ZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzYyNThlNgotLS0gL2Rldi9udWxsCisrKyBiL01ha2VmaWxlCkBAIC0wLDAgKzEsMTM2IEBACisjCisjICAgIENvcHlyaWdodCAoYykgMjAxMC0yMDE0IE5lc3QsIEluYy4KKyMgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgICAgVGhpcyBkb2N1bWVudCBpcyB0aGUgcHJvcGVydHkgb2YgTmVzdC4gSXQgaXMgY29uc2lkZXJlZAorIyAgICBjb25maWRlbnRpYWwgYW5kIHByb3ByaWV0YXJ5IGluZm9ybWF0aW9uLgorIworIyAgICBUaGlzIGRvY3VtZW50IG1heSBub3QgYmUgcmVwcm9kdWNlZCBvciB0cmFuc21pdHRlZCBpbiBhbnkgZm9ybSwKKyMgICAgaW4gd2hvbGUgb3IgaW4gcGFydCwgd2l0aG91dCB0aGUgZXhwcmVzcyB3cml0dGVuIHBlcm1pc3Npb24gb2YKKyMgICAgTmVzdC4KKyMKKyMgICAgRGVzY3JpcHRpb246CisjICAgICAgVGhpcyBmaWxlIGlzIHRoZSBtYWtlIGZpbGUgZm9yIHRoZSBHTlUgcGFydGl0aW9uIGVkaXRvciwKKyMgICAgICBwYXJ0ZWQuCisjCisKK0J1aWxkQ29uZmlnU3BlY2lhbGl6ZWQJOj0gTm8KK0J1aWxkUHJvZHVjdFNwZWNpYWxpemVkCTo9IE5vCisKK2luY2x1ZGUgcHJlLm1haworCitQYWNrYWdlTmFtZQkJOj0gcGFydGVkCisKK1BhY2thZ2VFeHRlbnNpb24JOj0gdGFyLmd6CitQYWNrYWdlU2VwYXJhdG9yCTo9IC0KKworUGFja2FnZVBhdGNoQXJncwk6PSAtcDAKKworUGFja2FnZUFyY2hpdmUJCTo9ICQoUGFja2FnZU5hbWUpLiQoUGFja2FnZUV4dGVuc2lvbikKK1BhY2thZ2VTb3VyY2VEaXIJOj0gJChQYWNrYWdlTmFtZSkkKFBhY2thZ2VTZXBhcmF0b3IpJChQYWNrYWdlVmVyc2lvbikKKworUGFja2FnZUJ1aWxkTWFrZWZpbGUJPSAkKGNhbGwgR2VuZXJhdGVCdWlsZFBhdGhzLE1ha2VmaWxlKQorCitMaWNlbnNlU291cmNlRmlsZQk6PSAkKFBhY2thZ2VTb3VyY2VEaXIpL0NPUFlJTkcKKworQ2xlYW5QYXRocwkJKz0gJChQYWNrYWdlTGljZW5zZUZpbGUpCisKK1VVSUREaXIgICAgICAgICAJOj0gc3cvdHBzL2UyZnNwcm9ncworVVVJREluY0RpciAgICAgIAk9ICQoY2FsbCBHZW5lcmF0ZVJlc3VsdFBhdGhzLCQoVVVJRERpciksdXNyL2luY2x1ZGUpCitVVUlETGliRGlyICAgICAgCT0gJChjYWxsIEdlbmVyYXRlUmVzdWx0UGF0aHMsJChVVUlERGlyKSx1c3IvbGliKQorCithbGw6ICQoUGFja2FnZURlZmF1bHRHb2FsKQorCisjIEdlbmVyYXRlIHRoZSBwYWNrYWdlIGxpY2Vuc2UgY29udGVudHMuCisKKyQoTGljZW5zZVNvdXJjZUZpbGUpOiBzb3VyY2UKKworJChQYWNrYWdlTGljZW5zZUZpbGUpOiAkKExpY2Vuc2VTb3VyY2VGaWxlKQorCSQoY29weS1yZXN1bHQpCisKKyMgRXh0cmFjdCB0aGUgc291cmNlIGZyb20gdGhlIGFyY2hpdmUgYW5kIGFwcGx5IHBhdGNoZXMsIGlmIGFueS4KKworJChQYWNrYWdlU291cmNlRGlyKTogJChQYWNrYWdlQXJjaGl2ZSkgJChQYWNrYWdlUGF0Y2hQYXRocykKKwkkKGV4cGFuZC1hbmQtcGF0Y2gtcGFja2FnZSkKKworIyBQcmVwYXJlIHRoZSBzb3VyY2VzLgorCisuUEhPTlk6IHNvdXJjZQorc291cmNlOiB8ICQoUGFja2FnZVNvdXJjZURpcikKKworIyBQYXRjaCB0aGUgc291cmNlcywgaWYgbmVjZXNzYXJ5LgorCisuUEhPTlk6IHBhdGNoCitwYXRjaDogc291cmNlCisKKyMgR2VuZXJhdGUgdGhlIHBhY2thZ2UgYnVpbGQgbWFrZWZpbGUuCisKKyQoUGFja2FnZUJ1aWxkTWFrZWZpbGUpOiB8ICQoUGFja2FnZVNvdXJjZURpcikgJChCdWlsZERpcmVjdG9yeSkgJChSZXN1bHREaXJlY3RvcnkpCisJJChWZXJib3NlKWNkICQoQnVpbGREaXJlY3RvcnkpICYmIFwKKwkkKENVUkRJUikvJChQYWNrYWdlU291cmNlRGlyKS9jb25maWd1cmUgXAorCUNDPSIkKENDKSIgQ1hYPSIkKENYWCkiIEFSPSQoQVIpIE5NPSQoTk0pIFJBTkxJQj0kKFJBTkxJQikgU1RSSVA9JChTVFJJUCkgXAorCUNQUEZMQUdTPSIkKGNhbGwgVG9vbEdlbmVyYXRlSW5jbHVkZUFyZ3VtZW50LCQoVVVJREluY0RpcikpIiBcCisJSU5TVEFMTD0iJChJTlNUQUxMKSAkKElOU1RBTExGTEFHUykiIFwKKwlMREZMQUdTPSItTCQoVVVJRExpYkRpcikiIFwKKwktLWJ1aWxkPSQoSG9zdFR1cGxlKSBcCisJLS1ob3N0PSQoVGFyZ2V0VHVwbGUpIFwKKwktLXRhcmdldD0kKFRhcmdldFR1cGxlKSBcCisJLS1wcmVmaXg9L3VzciBcCisJLS1zeXNjb25mZGlyPS9ldGMgXAorCS0tbG9jYWxzdGF0ZWRpcj0vdmFyIFwKKwktLWRpc2FibGUtZGV2aWNlLW1hcHBlciBcCisJLS1kaXNhYmxlLWZzIFwKKwktLWVuYWJsZS1yZWFkLW9ubHkgXAorCS0td2l0aG91dC1yZWFkbGluZSBcCisJYWNfY3ZfZnVuY19tYWxsb2NfMF9ub25udWxsPXllcyBcCisJYWNfY3ZfZnVuY19yZWFsbG9jXzBfbm9ubnVsbD15ZXMgXAorCWFjX2N2X2Z1bmNfY2FsbG9jXzBfbm9ubnVsbD15ZXMgXAorCS0tZGlzYWJsZS1zdGF0aWMKKworIyBDb25maWd1cmUgdGhlIHNvdXJjZSBmb3IgYnVpbGRpbmcuCisKKy5QSE9OWTogY29uZmlndXJlCitjb25maWd1cmU6IHNvdXJjZSAkKFBhY2thZ2VCdWlsZE1ha2VmaWxlKQorCisjIEJ1aWxkIHRoZSBzb3VyY2UuCisjCisjIFdlIGhhdmUgdG8gdW5zZXQgTUFLRUZMQUdTIHNpbmNlIHRoZXkgY29uZnVzZSB0aGUgcGFja2FnZSBidWlsZCBvdGhlcndpc2UuCisKKy5QSE9OWTogYnVpbGQKK2J1aWxkOiBjb25maWd1cmUKKwkkKFZlcmJvc2UpdW5zZXQgTUFLRUZMQUdTICYmIFwKKwkkKE1BS0UpICQoSk9CU0ZMQUcpIC1DICQoQnVpbGREaXJlY3RvcnkpIFwKKwlhbGwKKworIyBTdGFnZSB0aGUgYnVpbGQgdG8gYSB0ZW1wb3JhcnkgaW5zdGFsbGF0aW9uIGFyZWEuCisjCisjIFdlIGhhdmUgdG8gdW5zZXQgTUFLRUZMQUdTIHNpbmNlIHRoZXkgY29uZnVzZSB0aGUgcGFja2FnZSBidWlsZCBvdGhlcndpc2UuCisjCisjIFdlIGV4cGxpY3RseSByZW1vdmUgJ2xpYnBhcnRlZC5sYScgYmVjYXVzZSBzb21lIHBhY2thZ2VzIHRoYXQgZGVwZW5kCisjIG9uIGxpYnBhcnRlZCB1c2UgbGlidG9vbC4gSWYgbGlidG9vbCBmaW5kcyBhICcqLmxhJyBmaWxlIGZvciBhCisjIGxpYnJhcnksIGl0IHVzZXMgdGhlIHZhbHVlIG9mICdsaWJkaXI9PGRpcj4nIGl0IGZpbmRzLiBJbiBvdXIgY2FzZSwKKyMgc2luY2UgJy0tcHJlZml4PS91c3InIHRoaXMgdmFsdWUgaXMgJy91c3IvbGliJy4gSXQgdGhlbiByZXNvbHZlcworIyAnLWxwYXJ0ZWQnIHRvICcvdXNyL2xpYi9saWJwYXJ0ZWQuc28nLiBJbiBhIGNyb3NzLWNvbXBpbGF0aW9uCisjIGVudmlyb25tZW50LCB0aGlzIGlzIGxpa2VseSB0byBiZSBuZWl0aGVyIHRoZSByaWdodCBhcmNoaXRlY3R1cmUgbm9yCisjIHRoZSByaWdodCB2ZXJzaW9uIHRvIGxpbmsgYWdhaW5zdC4gSW4gc2hvcnQsIHdlIGxvc2UuCisjCisjIFdlIGNvdWxkIGFsc28gaGFuZGxlIHRoaXMgYnkgcmVtb3ZpbmcgREVTVERJUiBhbmQgc2V0dGluZyB0aGUgcHJlZml4CisjIHRvICQoUmVzdWx0RGlyZWN0b3J5KTsgaG93ZXZlciwgdGhhdCByZXN1bHRzIGluIGxpYnRvb2wgaGFyZC1jb2RpbmcKKyMgJChSZXN1bHREaXJlY3RvcnkpIGFzIHRoZSBSUEFUSCBpbiB0aGUgbGlua2VkIGV4ZWN1dGFibGVzIHdoaWNoIGlzCisjIE5PVCB3aGF0IHdlIHdhbnQgZWl0aGVyLiBXZSBsb3NlIGFnYWluLgorIworIyBCeSByZW1vdmluZyB0aGUgJyoubGEnIGZpbGUsIHdlIHdpbiBieSBlbnN1cmluZyBuZWl0aGVyIGEgbWlzZGlyZWN0ZWQKKyMgbGluayBub3IgYW4gUlBBVEguCisKKy5QSE9OWTogc3RhZ2UKK3N0YWdlOiBidWlsZCB8ICQoUmVzdWx0RGlyZWN0b3J5KQorCSQoVmVyYm9zZSl1bnNldCBNQUtFRkxBR1MgJiYgXAorCSQoTUFLRSkgJChKT0JTRkxBRykgLUMgJChCdWlsZERpcmVjdG9yeSkgREVTVERJUj0kKFJlc3VsdERpcmVjdG9yeSkgaW5zdGFsbAorCSQoVmVyYm9zZSkkKFJNKSAkKFJNRkxBR1MpICQoY2FsbCBHZW5lcmF0ZVJlc3VsdFBhdGhzLCx1c3IvbGliL2xpYnBhcnRlZC5sYSkKKworY2xlYW46CisJJChWZXJib3NlKSQoUk0pICQoUk1GTEFHUykgLXIgJChQYWNrYWdlU291cmNlRGlyKQorCSQoVmVyYm9zZSkkKFJNKSAkKFJNRkxBR1MpIC1yICQoQnVpbGREaXJlY3RvcnkpCisJJChWZXJib3NlKSQoUk0pICQoUk1GTEFHUykgLXIgJChSZXN1bHREaXJlY3RvcnkpCisKK2luY2x1ZGUgcG9zdC5tYWsKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy8ucHJldi12ZXJzaW9uIGIvcGFydGVkLTEuOC43Ly5wcmV2LXZlcnNpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI1OTM0MAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy8ucHJldi12ZXJzaW9uCkBAIC0wLDAgKzEgQEAKKzEuOApkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L0FCT1VULU5MUyBiL3BhcnRlZC0xLjguNy9BQk9VVC1OTFMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU3NTUzNQotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9BQk9VVC1OTFMKQEAgLTAsMCArMSwxMTExIEBACisxIE5vdGVzIG9uIHRoZSBGcmVlIFRyYW5zbGF0aW9uIFByb2plY3QKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitGcmVlIHNvZnR3YXJlIGlzIGdvaW5nIGludGVybmF0aW9uYWwhICBUaGUgRnJlZSBUcmFuc2xhdGlvbiBQcm9qZWN0IGlzCithIHdheSB0byBnZXQgbWFpbnRhaW5lcnMgb2YgZnJlZSBzb2Z0d2FyZSwgdHJhbnNsYXRvcnMsIGFuZCB1c2VycyBhbGwKK3RvZ2V0aGVyLCBzbyB0aGF0IGZyZWUgc29mdHdhcmUgd2lsbCBncmFkdWFsbHkgYmVjb21lIGFibGUgdG8gc3BlYWsgbWFueQorbGFuZ3VhZ2VzLiAgQSBmZXcgcGFja2FnZXMgYWxyZWFkeSBwcm92aWRlIHRyYW5zbGF0aW9ucyBmb3IgdGhlaXIKK21lc3NhZ2VzLgorCisgICBJZiB5b3UgZm91bmQgdGhpcyBgQUJPVVQtTkxTJyBmaWxlIGluc2lkZSBhIGRpc3RyaWJ1dGlvbiwgeW91IG1heQorYXNzdW1lIHRoYXQgdGhlIGRpc3RyaWJ1dGVkIHBhY2thZ2UgZG9lcyB1c2UgR05VIGBnZXR0ZXh0JyBpbnRlcm5hbGx5LAoraXRzZWxmIGF2YWlsYWJsZSBhdCB5b3VyIG5lYXJlc3QgR05VIGFyY2hpdmUgc2l0ZS4gIEJ1dCB5b3UgZG8gX25vdF8KK25lZWQgdG8gaW5zdGFsbCBHTlUgYGdldHRleHQnIHByaW9yIHRvIGNvbmZpZ3VyaW5nLCBpbnN0YWxsaW5nIG9yIHVzaW5nCit0aGlzIHBhY2thZ2Ugd2l0aCBtZXNzYWdlcyB0cmFuc2xhdGVkLgorCisgICBJbnN0YWxsZXJzIHdpbGwgZmluZCBoZXJlIHNvbWUgdXNlZnVsIGhpbnRzLiAgVGhlc2Ugbm90ZXMgYWxzbworZXhwbGFpbiBob3cgdXNlcnMgc2hvdWxkIHByb2NlZWQgZm9yIGdldHRpbmcgdGhlIHByb2dyYW1zIHRvIHVzZSB0aGUKK2F2YWlsYWJsZSB0cmFuc2xhdGlvbnMuICBUaGV5IHRlbGwgaG93IHBlb3BsZSB3YW50aW5nIHRvIGNvbnRyaWJ1dGUgYW5kCit3b3JrIG9uIHRyYW5zbGF0aW9ucyBjYW4gY29udGFjdCB0aGUgYXBwcm9wcmlhdGUgdGVhbS4KKworICAgV2hlbiByZXBvcnRpbmcgYnVncyBpbiB0aGUgYGludGwvJyBkaXJlY3Rvcnkgb3IgYnVncyB3aGljaCBtYXkgYmUKK3JlbGF0ZWQgdG8gaW50ZXJuYXRpb25hbGl6YXRpb24sIHlvdSBzaG91bGQgdGVsbCBhYm91dCB0aGUgdmVyc2lvbiBvZgorYGdldHRleHQnIHdoaWNoIGlzIHVzZWQuICBUaGUgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGluIHRoZQorYGludGwvVkVSU0lPTicgZmlsZSwgaW4gaW50ZXJuYXRpb25hbGl6ZWQgcGFja2FnZXMuCisKKzEuMSBRdWljayBjb25maWd1cmF0aW9uIGFkdmljZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0lmIHlvdSB3YW50IHRvIGV4cGxvaXQgdGhlIGZ1bGwgcG93ZXIgb2YgaW50ZXJuYXRpb25hbGl6YXRpb24sIHlvdQorc2hvdWxkIGNvbmZpZ3VyZSBpdCB1c2luZworCisgICAgIC4vY29uZmlndXJlIC0td2l0aC1pbmNsdWRlZC1nZXR0ZXh0CisKK3RvIGZvcmNlIHVzYWdlIG9mIGludGVybmF0aW9uYWxpemluZyByb3V0aW5lcyBwcm92aWRlZCB3aXRoaW4gdGhpcworcGFja2FnZSwgZGVzcGl0ZSB0aGUgZXhpc3RlbmNlIG9mIGludGVybmF0aW9uYWxpemluZyBjYXBhYmlsaXRpZXMgaW4gdGhlCitvcGVyYXRpbmcgc3lzdGVtIHdoZXJlIHRoaXMgcGFja2FnZSBpcyBiZWluZyBpbnN0YWxsZWQuICBTbyBmYXIsIG9ubHkKK3RoZSBgZ2V0dGV4dCcgaW1wbGVtZW50YXRpb24gaW4gdGhlIEdOVSBDIGxpYnJhcnkgdmVyc2lvbiAyIHByb3ZpZGVzIGFzCittYW55IGZlYXR1cmVzIChzdWNoIGFzIGxvY2FsZSBhbGlhcywgbWVzc2FnZSBpbmhlcml0YW5jZSwgYXV0b21hdGljCitjaGFyc2V0IGNvbnZlcnNpb24gb3IgcGx1cmFsIGZvcm0gaGFuZGxpbmcpIGFzIHRoZSBpbXBsZW1lbnRhdGlvbiBoZXJlLgorSXQgaXMgYWxzbyBub3QgcG9zc2libGUgdG8gb2ZmZXIgdGhpcyBhZGRpdGlvbmFsIGZ1bmN0aW9uYWxpdHkgb24gdG9wCitvZiBhIGBjYXRnZXRzJyBpbXBsZW1lbnRhdGlvbi4gIEZ1dHVyZSB2ZXJzaW9ucyBvZiBHTlUgYGdldHRleHQnIHdpbGwKK3ZlcnkgbGlrZWx5IGNvbnZleSBldmVuIG1vcmUgZnVuY3Rpb25hbGl0eS4gIFNvIGl0IG1pZ2h0IGJlIGEgZ29vZCBpZGVhCit0byBjaGFuZ2UgdG8gR05VIGBnZXR0ZXh0JyBhcyBzb29uIGFzIHBvc3NpYmxlLgorCisgICBTbyB5b3UgbmVlZCBfbm90XyBwcm92aWRlIHRoaXMgb3B0aW9uIGlmIHlvdSBhcmUgdXNpbmcgR05VIGxpYmMgMiBvcgoreW91IGhhdmUgaW5zdGFsbGVkIGEgcmVjZW50IGNvcHkgb2YgdGhlIEdOVSBnZXR0ZXh0IHBhY2thZ2Ugd2l0aCB0aGUKK2luY2x1ZGVkIGBsaWJpbnRsJy4KKworMS4yIElOU1RBTEwgTWF0dGVycworPT09PT09PT09PT09PT09PT09PQorCitTb21lIHBhY2thZ2VzIGFyZSAibG9jYWxpemFibGUiIHdoZW4gcHJvcGVybHkgaW5zdGFsbGVkOyB0aGUgcHJvZ3JhbXMKK3RoZXkgY29udGFpbiBjYW4gYmUgbWFkZSB0byBzcGVhayB5b3VyIG93biBuYXRpdmUgbGFuZ3VhZ2UuICBNb3N0IHN1Y2gKK3BhY2thZ2VzIHVzZSBHTlUgYGdldHRleHQnLiAgT3RoZXIgcGFja2FnZXMgaGF2ZSB0aGVpciBvd24gd2F5cyB0bworaW50ZXJuYXRpb25hbGl6YXRpb24sIHByZWRhdGluZyBHTlUgYGdldHRleHQnLgorCisgICBCeSBkZWZhdWx0LCB0aGlzIHBhY2thZ2Ugd2lsbCBiZSBpbnN0YWxsZWQgdG8gYWxsb3cgdHJhbnNsYXRpb24gb2YKK21lc3NhZ2VzLiAgSXQgd2lsbCBhdXRvbWF0aWNhbGx5IGRldGVjdCB3aGV0aGVyIHRoZSBzeXN0ZW0gYWxyZWFkeQorcHJvdmlkZXMgdGhlIEdOVSBgZ2V0dGV4dCcgZnVuY3Rpb25zLiAgSWYgbm90LCB0aGUgaW5jbHVkZWQgR05VCitgZ2V0dGV4dCcgbGlicmFyeSB3aWxsIGJlIHVzZWQuICBUaGlzIGxpYnJhcnkgaXMgd2hvbGx5IGNvbnRhaW5lZAord2l0aGluIHRoaXMgcGFja2FnZSwgdXN1YWxseSBpbiB0aGUgYGludGwvJyBzdWJkaXJlY3RvcnksIHNvIHByaW9yCitpbnN0YWxsYXRpb24gb2YgdGhlIEdOVSBgZ2V0dGV4dCcgcGFja2FnZSBpcyBfbm90XyByZXF1aXJlZC4KK0luc3RhbGxlcnMgbWF5IHVzZSBzcGVjaWFsIG9wdGlvbnMgYXQgY29uZmlndXJhdGlvbiB0aW1lIGZvciBjaGFuZ2luZwordGhlIGRlZmF1bHQgYmVoYXZpb3VyLiAgVGhlIGNvbW1hbmRzOgorCisgICAgIC4vY29uZmlndXJlIC0td2l0aC1pbmNsdWRlZC1nZXR0ZXh0CisgICAgIC4vY29uZmlndXJlIC0tZGlzYWJsZS1ubHMKKword2lsbCwgcmVzcGVjdGl2ZWx5LCBieXBhc3MgYW55IHByZS1leGlzdGluZyBgZ2V0dGV4dCcgdG8gdXNlIHRoZQoraW50ZXJuYXRpb25hbGl6aW5nIHJvdXRpbmVzIHByb3ZpZGVkIHdpdGhpbiB0aGlzIHBhY2thZ2UsIG9yIGVsc2UsCitfdG90YWxseV8gZGlzYWJsZSB0cmFuc2xhdGlvbiBvZiBtZXNzYWdlcy4KKworICAgV2hlbiB5b3UgYWxyZWFkeSBoYXZlIEdOVSBgZ2V0dGV4dCcgaW5zdGFsbGVkIG9uIHlvdXIgc3lzdGVtIGFuZCBydW4KK2NvbmZpZ3VyZSB3aXRob3V0IGFuIG9wdGlvbiBmb3IgeW91ciBuZXcgcGFja2FnZSwgYGNvbmZpZ3VyZScgd2lsbAorcHJvYmFibHkgZGV0ZWN0IHRoZSBwcmV2aW91c2x5IGJ1aWx0IGFuZCBpbnN0YWxsZWQgYGxpYmludGwuYScgZmlsZSBhbmQKK3dpbGwgZGVjaWRlIHRvIHVzZSB0aGlzLiAgVGhpcyBtaWdodCBub3QgYmUgZGVzaXJhYmxlLiAgWW91IHNob3VsZCB1c2UKK3RoZSBtb3JlIHJlY2VudCB2ZXJzaW9uIG9mIHRoZSBHTlUgYGdldHRleHQnIGxpYnJhcnkuICBJLmUuIGlmIHRoZSBmaWxlCitgaW50bC9WRVJTSU9OJyBzaG93cyB0aGF0IHRoZSBsaWJyYXJ5IHdoaWNoIGNvbWVzIHdpdGggdGhpcyBwYWNrYWdlIGlzCittb3JlIHJlY2VudCwgeW91IHNob3VsZCB1c2UKKworICAgICAuL2NvbmZpZ3VyZSAtLXdpdGgtaW5jbHVkZWQtZ2V0dGV4dAorCit0byBwcmV2ZW50IGF1dG8tZGV0ZWN0aW9uLgorCisgICBUaGUgY29uZmlndXJhdGlvbiBwcm9jZXNzIHdpbGwgbm90IHRlc3QgZm9yIHRoZSBgY2F0Z2V0cycgZnVuY3Rpb24KK2FuZCB0aGVyZWZvcmUgaXQgd2lsbCBub3QgYmUgdXNlZC4gIFRoZSByZWFzb24gaXMgdGhhdCBldmVuIGFuCitlbXVsYXRpb24gb2YgYGdldHRleHQnIG9uIHRvcCBvZiBgY2F0Z2V0cycgY291bGQgbm90IHByb3ZpZGUgYWxsIHRoZQorZXh0ZW5zaW9ucyBvZiB0aGUgR05VIGBnZXR0ZXh0JyBsaWJyYXJ5LgorCisgICBJbnRlcm5hdGlvbmFsaXplZCBwYWNrYWdlcyB1c3VhbGx5IGhhdmUgbWFueSBgcG8vTEwucG8nIGZpbGVzLCB3aGVyZQorTEwgZ2l2ZXMgYW4gSVNPIDYzOSB0d28tbGV0dGVyIGNvZGUgaWRlbnRpZnlpbmcgdGhlIGxhbmd1YWdlLiAgVW5sZXNzCit0cmFuc2xhdGlvbnMgaGF2ZSBiZWVuIGZvcmJpZGRlbiBhdCBgY29uZmlndXJlJyB0aW1lIGJ5IHVzaW5nIHRoZQorYC0tZGlzYWJsZS1ubHMnIHN3aXRjaCwgYWxsIGF2YWlsYWJsZSB0cmFuc2xhdGlvbnMgYXJlIGluc3RhbGxlZAordG9nZXRoZXIgd2l0aCB0aGUgcGFja2FnZS4gIEhvd2V2ZXIsIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBgTElOR1VBUycKK21heSBiZSBzZXQsIHByaW9yIHRvIGNvbmZpZ3VyYXRpb24sIHRvIGxpbWl0IHRoZSBpbnN0YWxsZWQgc2V0LgorYExJTkdVQVMnIHNob3VsZCB0aGVuIGNvbnRhaW4gYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiB0d28tbGV0dGVyCitjb2Rlcywgc3RhdGluZyB3aGljaCBsYW5ndWFnZXMgYXJlIGFsbG93ZWQuCisKKzEuMyBVc2luZyBUaGlzIFBhY2thZ2UKKz09PT09PT09PT09PT09PT09PT09PT0KKworQXMgYSB1c2VyLCBpZiB5b3VyIGxhbmd1YWdlIGhhcyBiZWVuIGluc3RhbGxlZCBmb3IgdGhpcyBwYWNrYWdlLCB5b3UKK29ubHkgaGF2ZSB0byBzZXQgdGhlIGBMQU5HJyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUgYXBwcm9wcmlhdGUKK2BMTF9DQycgY29tYmluYXRpb24uICBIZXJlIGBMTCcgaXMgYW4gSVNPIDYzOSB0d28tbGV0dGVyIGxhbmd1YWdlIGNvZGUsCithbmQgYENDJyBpcyBhbiBJU08gMzE2NiB0d28tbGV0dGVyIGNvdW50cnkgY29kZS4gIEZvciBleGFtcGxlLCBsZXQncworc3VwcG9zZSB0aGF0IHlvdSBzcGVhayBHZXJtYW4gYW5kIGxpdmUgaW4gR2VybWFueS4gIEF0IHRoZSBzaGVsbAorcHJvbXB0LCBtZXJlbHkgZXhlY3V0ZSBgc2V0ZW52IExBTkcgZGVfREUnIChpbiBgY3NoJyksCitgZXhwb3J0IExBTkc7IExBTkc9ZGVfREUnIChpbiBgc2gnKSBvciBgZXhwb3J0IExBTkc9ZGVfREUnIChpbiBgYmFzaCcpLgorVGhpcyBjYW4gYmUgZG9uZSBmcm9tIHlvdXIgYC5sb2dpbicgb3IgYC5wcm9maWxlJyBmaWxlLCBvbmNlIGFuZCBmb3IKK2FsbC4KKworICAgWW91IG1pZ2h0IHRoaW5rIHRoYXQgdGhlIGNvdW50cnkgY29kZSBzcGVjaWZpY2F0aW9uIGlzIHJlZHVuZGFudC4KK0J1dCBpbiBmYWN0LCBzb21lIGxhbmd1YWdlcyBoYXZlIGRpYWxlY3RzIGluIGRpZmZlcmVudCBjb3VudHJpZXMuICBGb3IKK2V4YW1wbGUsIGBkZV9BVCcgaXMgdXNlZCBmb3IgQXVzdHJpYSwgYW5kIGBwdF9CUicgZm9yIEJyYXppbC4gIFRoZQorY291bnRyeSBjb2RlIHNlcnZlcyB0byBkaXN0aW5ndWlzaCB0aGUgZGlhbGVjdHMuCisKKyAgIFRoZSBsb2NhbGUgbmFtaW5nIGNvbnZlbnRpb24gb2YgYExMX0NDJywgd2l0aCBgTEwnIGRlbm90aW5nIHRoZQorbGFuZ3VhZ2UgYW5kIGBDQycgZGVub3RpbmcgdGhlIGNvdW50cnksIGlzIHRoZSBvbmUgdXNlIG9uIHN5c3RlbXMgYmFzZWQKK29uIEdOVSBsaWJjLiAgT24gb3RoZXIgc3lzdGVtcywgc29tZSB2YXJpYXRpb25zIG9mIHRoaXMgc2NoZW1lIGFyZQordXNlZCwgc3VjaCBhcyBgTEwnIG9yIGBMTF9DQy5FTkNPRElORycuICBZb3UgY2FuIGdldCB0aGUgbGlzdCBvZgorbG9jYWxlcyBzdXBwb3J0ZWQgYnkgeW91ciBzeXN0ZW0gZm9yIHlvdXIgbGFuZ3VhZ2UgYnkgcnVubmluZyB0aGUKK2NvbW1hbmQgYGxvY2FsZSAtYSB8IGdyZXAgJ15MTCcnLgorCisgICBOb3QgYWxsIHByb2dyYW1zIGhhdmUgdHJhbnNsYXRpb25zIGZvciBhbGwgbGFuZ3VhZ2VzLiAgQnkgZGVmYXVsdCwgYW4KK0VuZ2xpc2ggbWVzc2FnZSBpcyBzaG93biBpbiBwbGFjZSBvZiBhIG5vbmV4aXN0ZW50IHRyYW5zbGF0aW9uLiAgSWYgeW91Cit1bmRlcnN0YW5kIG90aGVyIGxhbmd1YWdlcywgeW91IGNhbiBzZXQgdXAgYSBwcmlvcml0eSBsaXN0IG9mIGxhbmd1YWdlcy4KK1RoaXMgaXMgZG9uZSB0aHJvdWdoIGEgZGlmZmVyZW50IGVudmlyb25tZW50IHZhcmlhYmxlLCBjYWxsZWQKK2BMQU5HVUFHRScuICBHTlUgYGdldHRleHQnIGdpdmVzIHByZWZlcmVuY2UgdG8gYExBTkdVQUdFJyBvdmVyIGBMQU5HJworZm9yIHRoZSBwdXJwb3NlIG9mIG1lc3NhZ2UgaGFuZGxpbmcsIGJ1dCB5b3Ugc3RpbGwgbmVlZCB0byBoYXZlIGBMQU5HJworc2V0IHRvIHRoZSBwcmltYXJ5IGxhbmd1YWdlOyB0aGlzIGlzIHJlcXVpcmVkIGJ5IG90aGVyIHBhcnRzIG9mIHRoZQorc3lzdGVtIGxpYnJhcmllcy4gIEZvciBleGFtcGxlLCBzb21lIFN3ZWRpc2ggdXNlcnMgd2hvIHdvdWxkIHJhdGhlcgorcmVhZCB0cmFuc2xhdGlvbnMgaW4gR2VybWFuIHRoYW4gRW5nbGlzaCBmb3Igd2hlbiBTd2VkaXNoIGlzIG5vdAorYXZhaWxhYmxlLCBzZXQgYExBTkdVQUdFJyB0byBgc3Y6ZGUnIHdoaWxlIGxlYXZpbmcgYExBTkcnIHRvIGBzdl9TRScuCisKKyAgIFNwZWNpYWwgYWR2aWNlIGZvciBOb3J3ZWdpYW4gdXNlcnM6IFRoZSBsYW5ndWFnZSBjb2RlIGZvciBOb3J3ZWdpYW4KK2Jva21hKmwgY2hhbmdlZCBmcm9tIGBubycgdG8gYG5iJyByZWNlbnRseSAoaW4gMjAwMykuICBEdXJpbmcgdGhlCit0cmFuc2l0aW9uIHBlcmlvZCwgd2hpbGUgc29tZSBtZXNzYWdlIGNhdGFsb2dzIGZvciB0aGlzIGxhbmd1YWdlIGFyZQoraW5zdGFsbGVkIHVuZGVyIGBuYicgYW5kIHNvbWUgb2xkZXIgb25lcyB1bmRlciBgbm8nLCBpdCdzIHJlY29tbWVuZGVkCitmb3IgTm9yd2VnaWFuIHVzZXJzIHRvIHNldCBgTEFOR1VBR0UnIHRvIGBuYjpubycgc28gdGhhdCBib3RoIG5ld2VyIGFuZAorb2xkZXIgdHJhbnNsYXRpb25zIGFyZSB1c2VkLgorCisgICBJbiB0aGUgYExBTkdVQUdFJyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgYnV0IG5vdCBpbiB0aGUgYExBTkcnCitlbnZpcm9ubWVudCB2YXJpYWJsZSwgYExMX0NDJyBjb21iaW5hdGlvbnMgY2FuIGJlIGFiYnJldmlhdGVkIGFzIGBMTCcKK3RvIGRlbm90ZSB0aGUgbGFuZ3VhZ2UncyBtYWluIGRpYWxlY3QuICBGb3IgZXhhbXBsZSwgYGRlJyBpcyBlcXVpdmFsZW50Cit0byBgZGVfREUnIChHZXJtYW4gYXMgc3Bva2VuIGluIEdlcm1hbnkpLCBhbmQgYHB0JyB0byBgcHRfUFQnCisoUG9ydHVndWVzZSBhcyBzcG9rZW4gaW4gUG9ydHVnYWwpIGluIHRoaXMgY29udGV4dC4KKworMS40IFRyYW5zbGF0aW5nIFRlYW1zCis9PT09PT09PT09PT09PT09PT09PT0KKworRm9yIHRoZSBGcmVlIFRyYW5zbGF0aW9uIFByb2plY3QgdG8gYmUgYSBzdWNjZXNzLCB3ZSBuZWVkIGludGVyZXN0ZWQKK3Blb3BsZSB3aG8gbGlrZSB0aGVpciBvd24gbGFuZ3VhZ2UgYW5kIHdyaXRlIGl0IHdlbGwsIGFuZCB3aG8gYXJlIGFsc28KK2FibGUgdG8gc3luZXJnaXplIHdpdGggb3RoZXIgdHJhbnNsYXRvcnMgc3BlYWtpbmcgdGhlIHNhbWUgbGFuZ3VhZ2UuCitFYWNoIHRyYW5zbGF0aW9uIHRlYW0gaGFzIGl0cyBvd24gbWFpbGluZyBsaXN0LiAgVGhlIHVwLXRvLWRhdGUgbGlzdCBvZgordGVhbXMgY2FuIGJlIGZvdW5kIGF0IHRoZSBGcmVlIFRyYW5zbGF0aW9uIFByb2plY3QncyBob21lcGFnZSwKK2BodHRwOi8vd3d3Lmlyby51bW9udHJlYWwuY2EvY29udHJpYi9wby9IVE1MLycsIGluIHRoZSAiTmF0aW9uYWwgdGVhbXMiCithcmVhLgorCisgICBJZiB5b3UnZCBsaWtlIHRvIHZvbHVudGVlciB0byBfd29ya18gYXQgdHJhbnNsYXRpbmcgbWVzc2FnZXMsIHlvdQorc2hvdWxkIGJlY29tZSBhIG1lbWJlciBvZiB0aGUgdHJhbnNsYXRpbmcgdGVhbSBmb3IgeW91ciBvd24gbGFuZ3VhZ2UuCitUaGUgc3Vic2NyaWJpbmcgYWRkcmVzcyBpcyBfbm90XyB0aGUgc2FtZSBhcyB0aGUgbGlzdCBpdHNlbGYsIGl0IGhhcworYC1yZXF1ZXN0JyBhcHBlbmRlZC4gIEZvciBleGFtcGxlLCBzcGVha2VycyBvZiBTd2VkaXNoIGNhbiBzZW5kIGEKK21lc3NhZ2UgdG8gYHN2LXJlcXVlc3RAbGkub3JnJywgaGF2aW5nIHRoaXMgbWVzc2FnZSBib2R5OgorCisgICAgIHN1YnNjcmliZQorCisgICBLZWVwIGluIG1pbmQgdGhhdCB0ZWFtIG1lbWJlcnMgYXJlIGV4cGVjdGVkIHRvIHBhcnRpY2lwYXRlCitfYWN0aXZlbHlfIGluIHRyYW5zbGF0aW9ucywgb3IgYXQgc29sdmluZyB0cmFuc2xhdGlvbmFsIGRpZmZpY3VsdGllcywKK3JhdGhlciB0aGFuIG1lcmVseSBsdXJraW5nIGFyb3VuZC4gIElmIHlvdXIgdGVhbSBkb2VzIG5vdCBleGlzdCB5ZXQgYW5kCit5b3Ugd2FudCB0byBzdGFydCBvbmUsIG9yIGlmIHlvdSBhcmUgdW5zdXJlIGFib3V0IHdoYXQgdG8gZG8gb3IgaG93IHRvCitnZXQgc3RhcnRlZCwgcGxlYXNlIHdyaXRlIHRvIGB0cmFuc2xhdGlvbkBpcm8udW1vbnRyZWFsLmNhJyB0byByZWFjaCB0aGUKK2Nvb3JkaW5hdG9yIGZvciBhbGwgdHJhbnNsYXRvciB0ZWFtcy4KKworICAgVGhlIEVuZ2xpc2ggdGVhbSBpcyBzcGVjaWFsLiAgSXQgd29ya3MgYXQgaW1wcm92aW5nIGFuZCB1bmlmb3JtaXppbmcKK3RoZSB0ZXJtaW5vbG9neSBpbiB1c2UuICBQcm92ZW4gbGluZ3Vpc3RpYyBza2lsbCBhcmUgcHJhaXNlZCBtb3JlIHRoYW4KK3Byb2dyYW1taW5nIHNraWxsLCBoZXJlLgorCisxLjUgQXZhaWxhYmxlIFBhY2thZ2VzCis9PT09PT09PT09PT09PT09PT09PT09CisKK0xhbmd1YWdlcyBhcmUgbm90IGVxdWFsbHkgc3VwcG9ydGVkIGluIGFsbCBwYWNrYWdlcy4gIFRoZSBmb2xsb3dpbmcKK21hdHJpeCBzaG93cyB0aGUgY3VycmVudCBzdGF0ZSBvZiBpbnRlcm5hdGlvbmFsaXphdGlvbiwgYXMgb2YgSnVseQorMjAwNi4gIFRoZSBtYXRyaXggc2hvd3MsIGluIHJlZ2FyZCBvZiBlYWNoIHBhY2thZ2UsIGZvciB3aGljaCBsYW5ndWFnZXMKK1BPIGZpbGVzIGhhdmUgYmVlbiBzdWJtaXR0ZWQgdG8gdHJhbnNsYXRpb24gY29vcmRpbmF0aW9uLCB3aXRoIGEKK3RyYW5zbGF0aW9uIHBlcmNlbnRhZ2Ugb2YgYXQgbGVhc3QgNTAlLgorCisgICAgIFJlYWR5IFBPIGZpbGVzICAgICAgIGFmIGFtIGFyIGF6IGJlIGJnIGJzIGNhIGNzIGN5IGRhIGRlIGVsIGVuIGVuX0dCIGVvCisgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgR05VbmV0ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBhMnBzICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSBbXSBbXSAgICAgW10gICAgICB8CisgICAgIGFlZ2lzICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgICAgICAgICAgICAgIHwKKyAgICAgYW50LXBob25lICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgfAorICAgICBhbnViaXMgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIGFwLXV0aWxzICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgYXNwZWxsICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgIFtdICAgICAgfAorICAgICBiYXNoICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICAgICAgICAgICBbXSB8CisgICAgIGJhdGNoZWxvciAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgYmZkICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBiaWJzaGVsZiAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIGJpbnV0aWxzICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIHwKKyAgICAgYmlzb24gICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgfAorICAgICBiaXNvbi1ydW50aW1lICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIGJsdWV6LXBpbiAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdIFtdICAgICAgICAgIFtdIHwKKyAgICAgY2Zsb3cgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfAorICAgICBjbGlzcCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICB8CisgICAgIGNvbnNvbGUtdG9vbHMgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgY29yZXV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgW10gW10gICAgICAgICAgICAgICAgfAorICAgICBjcGlvICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGNwcGxpYiAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgY3J5cHRvbml0ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBkYXJrc3RhdCAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAoKSBbXSAgICAgICAgICAgICAgICB8CisgICAgIGRpYWxvZyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdIFtdIFtdIFtdIFtdIFtdICAgICAgICAgICAgIHwKKyAgICAgZGlmZnV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgW10gW10gW10gICAgICAgICAgW10gfAorICAgICBkb29kbGUgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIGUyZnNwcm9ncyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgZW5zY3JpcHQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gW10gICAgICAgIFtdICAgICAgfAorICAgICBlcnJvciAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICAgW10gICAgICB8CisgICAgIGZldGNobWFpbCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdICgpIFtdICAgICAgICAgICAgIHwKKyAgICAgZmlsZXV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgfAorICAgICBmaW5kdXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CisgICAgIGZsZXggICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgZnNsaW50ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBnYXMgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdhd2sgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgZ2JpZmYgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBnY2FsICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdjYyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgZ2V0dGV4dC1leGFtcGxlcyAgIHwgW10gICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gW10gICAgICAgICAgW10gfAorICAgICBnZXR0ZXh0LXJ1bnRpbWUgICAgfCAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICBbXSB8CisgICAgIGdldHRleHQtdG9vbHMgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgZ2ltcC1wcmludCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgIFtdICAgICAgfAorICAgICBnaXAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdsaXYgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgZ2x1bmFyY2xvY2sgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnbXVsdCAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIGdudWJpZmYgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgICAgICAgICAgICAgIHwKKyAgICAgZ251Y2FzaCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgKCkgICAgIFtdICAgICAgfAorICAgICBnbnVjYXNoLWdsb3NzYXJ5ICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAoKSAgICAgICAgICAgICAgICB8CisgICAgIGdudWVkdSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ251bGliICAgICAgICAgICAgIHwgW10gICAgICAgICAgW10gW10gICAgW10gICAgICAgW10gW10gICAgICAgICAgICAgICAgfAorICAgICBnbnVuZXQtZ3RrICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdudXRscyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3BlLWFlcmlhbCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBncGUtYmVhbSAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIGdwZS1jYWxlbmRhciAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgZ3BlLWNsb2NrICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBncGUtY29uZiAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIGdwZS1jb250YWN0cyAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3BlLWVkaXQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtZmlsZW1hbmFnZXIgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdwZS1nbyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3BlLWxvZ2luICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBncGUtb3duZXJpbmZvICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIGdwZS1wYWNrYWdlICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3BlLXNrZXRjaGJvb2sgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBncGUtc3UgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIGdwZS10YXNrbWFuYWdlciAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgZ3BlLXRpbWVzaGVldCAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtdG9kYXkgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIGdwZS10b2RvICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3Bob3RvMiAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgIFtdICAgICAgfAorICAgICBncHJvZiAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8CisgICAgIGdwc2RyaXZlICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgICgpICAgICAgICAgIHwKKyAgICAgZ3JhbWFkb2lyICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBncmVwICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgICBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICAgICB8CisgICAgIGdyZXRsICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3Nhc2wgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnc3MgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdzdC1wbHVnaW5zICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgIFtdIFtdICAgIFtdICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3N0LXBsdWdpbnMtYmFzZSAgIHwgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgfAorICAgICBnc3QtcGx1Z2lucy1nb29kICAgfCBbXSAgICAgICBbXSAgICBbXSAgICBbXSBbXSAgICBbXSAgICAgICAgICAgW10gICAgICB8CisgICAgIGdzdHJlYW1lciAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgIFtdIFtdICAgIFtdIFtdICAgICAgICBbXSAgICAgIHwKKyAgICAgZ3RpY2sgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgfAorICAgICBndGthbSAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICB8CisgICAgIGd0a29ycGhhbiAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgZ3Rrc3BlbGwgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgW10gfAorICAgICBndXRlbnByaW50ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CisgICAgIGhlbGxvICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdIFtdIFtdICAgICAgICAgIFtdIHwKKyAgICAgaWQtdXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgfAorICAgICBpbXBvc3QgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGluZGVudCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgICAgICAgIFtdIHwKKyAgICAgaXNvXzMxNjYgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgW10gfAorICAgICBpc29fMzE2Nl8xICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICBbXSBbXSBbXSAgICAgICAgICAgICB8CisgICAgIGlzb18zMTY2XzIgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgaXNvXzMxNjZfMyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBpc29fNDIxNyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIGlzb182MzkgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgIFtdIHwKKyAgICAganBpbG90ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBqdGFnICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGp3aG9pcyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAga2JkICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gW10gICAgICAgICAgICAgfAorICAgICBrZXl0b3VjaCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGtleXRvdWNoLWVkaXRvciAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAga2V5dG91Y2gta2V5Ym9hLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsYXRyaW5lICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICB8CisgICAgIGxkICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGVhZnBhZCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgW10gW10gICAgICAgICAgICAgfAorICAgICBsaWJjICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICBbXSBbXSBbXSAgICAgICAgICAgICB8CisgICAgIGxpYmV4aWYgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgbGliZXh0cmFjdG9yICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBsaWJncGV3aWRnZXQgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICB8CisgICAgIGxpYmdwZy1lcnJvciAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgbGliZ3Bob3RvMiAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgfAorICAgICBsaWJncGhvdG8yX3BvcnQgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8CisgICAgIGxpYmdzYXNsICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGliaWNvbnYgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgW10gfAorICAgICBsaWJpZG4gICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSB8CisgICAgIGxpZmVsaW5lcyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICgpICAgICAgICAgICAgICAgIHwKKyAgICAgbGlseXBvbmQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBsaW5nb3RlYWNoICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGx5bnggICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgIFtdIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgbTQgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gW10gICAgICAgICAgICAgfAorICAgICBtYWlsdXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIG1ha2UgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgbWFuLWRiICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gKCkgICAgW10gW10gICAgICAgICAgICAgICAgfAorICAgICBtaW5pY29tICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICB8CisgICAgIG15c2VjcmV0ZGlhcnkgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgbmFubyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgW10gKCkgICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBuYW5vXzFfMCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAoKSAgICBbXSBbXSAgICAgICAgICAgICAgICB8CisgICAgIG9wY29kZXMgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgcGFydGVkICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBwaWxvdC1xb2YgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8CisgICAgIHBzbWlzYyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgcHdkdXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBweXRob24gICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHFvZiAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgcmFkaXVzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICByZWNvZGUgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICBbXSBbXSBbXSAgICAgICAgICBbXSB8CisgICAgIHJwbSAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgICAgICAgICAgIHwKKyAgICAgc2NyZWVtICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBzY3JvbGxrZWVwZXIgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgICBbXSBbXSBbXSBbXSBbXSAgICAgICAgW10gICAgICB8CisgICAgIHNlZCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgICAgICAgIFtdIHwKKyAgICAgc2gtdXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgfAorICAgICBzaGFyZWQtbWltZS1pbmZvICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICBbXSB8CisgICAgIHNoYXJ1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgIFtdIFtdICAgIFtdIFtdIFtdICAgICAgICAgICAgIHwKKyAgICAgc2hpc2hpICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBzaWxreSAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHNrZW5jaWwgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICgpICAgICAgICAgICAgICAgIHwKKyAgICAgc2tldGNoICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gKCkgICAgICAgICAgICAgICAgfAorICAgICBzb2xmZWdlICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHNvdW5kdHJhY2tlciAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgc3AgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBzdGFyZGljdCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHN5c3RlbS10b29scy1iYS4uLiB8ICAgICAgIFtdICAgICAgIFtdIFtdIFtdIFtdICAgIFtdIFtdIFtdICAgICBbXSAgICAgIHwKKyAgICAgdGFyICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB0ZXhpbmZvICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICBbXSB8CisgICAgIHRleHR1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgdGluICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICgpICAgICAgfAorICAgICB0cC1yb2JvdCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIHR1eHBhaW50ICAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgIFtdIFtdICAgICAgICBbXSAgICAgIHwKKyAgICAgdW5pY29kZS1oYW4tdHJhLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB1bmljb2RlLXRyYW5zbGEuLi4gfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHV0aWwtbGludXggICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgIFtdIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgdm9yYmlzLXRvb2xzICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgW10gICAgICAgICAgIFtdICAgICAgfAorICAgICB3YXN0ZXNlZGdlICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICB8CisgICAgIHdkaWZmICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdIFtdICAgICAgICBbXSAgICAgIHwKKyAgICAgd2dldCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICB4Y2hhdCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICBbXSBbXSAgICAgW10gICAgICB8CisgICAgIHhrZXlib2FyZC1jb25maWcgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgeHBhZCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFmIGFtIGFyIGF6IGJlIGJnIGJzIGNhIGNzIGN5IGRhIGRlIGVsIGVuIGVuX0dCIGVvCisgICAgICAgICAgICAgICAgICAgICAgICAgIDExICAwICAxICAyICA4IDIxICAxIDQyIDQzICAyIDYyIDk5IDE4ICAxICAxNiAgIDE2CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZXMgZXQgZXUgZmEgZmkgZnIgIGdhIGdsIGd1IGhlIGhpIGhyIGh1IGlkIGlzIGl0CisgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgIEdOVW5ldCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGEycHMgICAgICAgICAgICAgICB8ICAgIFtdICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSB8CisgICAgIGFlZ2lzICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGFudC1waG9uZSAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGFudWJpcyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGFwLXV0aWxzICAgICAgICAgICB8ICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGFzcGVsbCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisgICAgIGJhc2ggICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIGJhdGNoZWxvciAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGJmZCAgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGJpYnNoZWxmICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisgICAgIGJpbnV0aWxzICAgICAgICAgICB8IFtdICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGJpc29uICAgICAgICAgICAgICB8IFtdIFtdICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICBbXSAgICBbXSB8CisgICAgIGJpc29uLXJ1bnRpbWUgICAgICB8ICAgIFtdICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICBbXSAgICBbXSB8CisgICAgIGJsdWV6LXBpbiAgICAgICAgICB8ICAgICAgICAgICAgIFtdIFtdICBbXSAgICAgICAgICAgICAgICBbXSBbXSAgICAgICB8CisgICAgIGNmbG93ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGNsaXNwICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGNvbnNvbGUtdG9vbHMgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGNvcmV1dGlscyAgICAgICAgICB8IFtdIFtdICAgICAgIFtdIFtdICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIGNwaW8gICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGNwcGxpYiAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGNyeXB0b25pdCAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGRhcmtzdGF0ICAgICAgICAgICB8IFtdICAgICAgICAgICAgICgpICBbXSAgICAgICAgICAgICAgICBbXSBbXSAgICAgICB8CisgICAgIGRpYWxvZyAgICAgICAgICAgICB8IFtdIFtdIFtdICAgIFtdIFtdICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICBbXSB8CisgICAgIGRpZmZ1dGlscyAgICAgICAgICB8IFtdICAgICAgICAgIFtdIFtdICBbXSBbXSAgICBbXSAgICAgICBbXSBbXSAgICBbXSB8CisgICAgIGRvb2RsZSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisgICAgIGUyZnNwcm9ncyAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisgICAgIGVuc2NyaXB0ICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICB8CisgICAgIGVycm9yICAgICAgICAgICAgICB8IFtdICAgICAgICAgIFtdIFtdICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIGZldGNobWFpbCAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGZpbGV1dGlscyAgICAgICAgICB8IFtdIFtdICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICBbXSB8CisgICAgIGZpbmR1dGlscyAgICAgICAgICB8ICAgIFtdICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIGZsZXggICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGZzbGludCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdhcyAgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdhd2sgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CisgICAgIGdiaWZmICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdjYWwgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdjYyAgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdldHRleHQtZXhhbXBsZXMgICB8IFtdICAgICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICBbXSB8CisgICAgIGdldHRleHQtcnVudGltZSAgICB8IFtdICAgICAgICAgIFtdIFtdICBbXSAgICAgICAgICAgICAgICAgICBbXSAgICBbXSB8CisgICAgIGdldHRleHQtdG9vbHMgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisgICAgIGdpbXAtcHJpbnQgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdpcCAgICAgICAgICAgICAgICB8IFtdICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdsaXYgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdsdW5hcmNsb2NrICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIGdtdWx0ICAgICAgICAgICAgICB8ICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisgICAgIGdudWJpZmYgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSB8CisgICAgIGdudWNhc2ggICAgICAgICAgICB8ICgpICAgICAgICAgICAgICgpICAgICAgICAgICAgICAgICAgICAoKSAgICAgICAgICB8CisgICAgIGdudWNhc2gtZ2xvc3NhcnkgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisgICAgIGdudWVkdSAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdudWxpYiAgICAgICAgICAgICB8IFtdIFtdIFtdICAgIFtdIFtdICBbXSBbXSAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIGdudW5ldC1ndGsgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdudXRscyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdwZS1hZXJpYWwgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdwZS1iZWFtICAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdwZS1jYWxlbmRhciAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICB8CisgICAgIGdwZS1jbG9jayAgICAgICAgICB8IFtdICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIGdwZS1jb25mICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdwZS1jb250YWN0cyAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdwZS1lZGl0ICAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICB8CisgICAgIGdwZS1maWxlbWFuYWdlciAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdwZS1nbyAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIGdwZS1sb2dpbiAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIGdwZS1vd25lcmluZm8gICAgICB8IFtdICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICB8CisgICAgIGdwZS1wYWNrYWdlICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdwZS1za2V0Y2hib29rICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdwZS1zdSAgICAgICAgICAgICB8IFtdICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIGdwZS10YXNrbWFuYWdlciAgICB8IFtdICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdwZS10aW1lc2hlZXQgICAgICB8IFtdICAgICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICBbXSAgICAgICB8CisgICAgIGdwZS10b2RheSAgICAgICAgICB8IFtdICAgICAgICAgIFtdIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdwZS10b2RvICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdwaG90bzIgICAgICAgICAgICB8IFtdICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSB8CisgICAgIGdwcm9mICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICBbXSAgICAgICB8CisgICAgIGdwc2RyaXZlICAgICAgICAgICB8ICgpICAgICAgICAgICAgICgpICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAoKSB8CisgICAgIGdyYW1hZG9pciAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdyZXAgICAgICAgICAgICAgICB8IFtdIFtdIFtdICAgIFtdIFtdICBbXSBbXSAgICBbXSAgICBbXSBbXSBbXSAgICBbXSB8CisgICAgIGdyZXRsICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisgICAgIGdzYXNsICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdzcyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdzdC1wbHVnaW5zICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSB8CisgICAgIGdzdC1wbHVnaW5zLWJhc2UgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSB8CisgICAgIGdzdC1wbHVnaW5zLWdvb2QgICB8ICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSB8CisgICAgIGdzdHJlYW1lciAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSB8CisgICAgIGd0aWNrICAgICAgICAgICAgICB8ICAgICAgIFtdICAgIFtdIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisgICAgIGd0a2FtICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSB8CisgICAgIGd0a29ycGhhbiAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisgICAgIGd0a3NwZWxsICAgICAgICAgICB8IFtdICAgIFtdICAgIFtdIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisgICAgIGd1dGVucHJpbnQgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIGhlbGxvICAgICAgICAgICAgICB8IFtdIFtdIFtdIFtdIFtdIFtdICBbXSBbXSAgICBbXSAgICBbXSBbXSBbXSAgICBbXSB8CisgICAgIGlkLXV0aWxzICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICBbXSBbXSAgICBbXSB8CisgICAgIGltcG9zdCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGluZGVudCAgICAgICAgICAgICB8IFtdIFtdIFtdICAgIFtdIFtdICBbXSBbXSAgICAgICAgICAgICBbXSBbXSAgICBbXSB8CisgICAgIGlzb18zMTY2ICAgICAgICAgICB8ICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIGlzb18zMTY2XzEgICAgICAgICB8IFtdICAgIFtdICAgIFtdIFtdICBbXSAgICAgICAgICAgICAgICBbXSBbXSAgICAgICB8CisgICAgIGlzb18zMTY2XzIgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGlzb18zMTY2XzMgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGlzb180MjE3ICAgICAgICAgICB8ICAgIFtdICAgICAgIFtdICAgICAgICBbXSAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIGlzb182MzkgICAgICAgICAgICB8ICAgICAgICAgIFtdIFtdIFtdICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIGpwaWxvdCAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGp0YWcgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGp3aG9pcyAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICBbXSB8CisgICAgIGtiZCAgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGtleXRvdWNoICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGtleXRvdWNoLWVkaXRvciAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGtleXRvdWNoLWtleWJvYS4uLiB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxhdHJpbmUgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisgICAgIGxkICAgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxlYWZwYWQgICAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICBbXSAgICAgICBbXSAgICAgICBbXSAgICAgICBbXSB8CisgICAgIGxpYmMgICAgICAgICAgICAgICB8IFtdICAgICAgICAgIFtdIFtdICAgICBbXSAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIGxpYmV4aWYgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxpYmV4dHJhY3RvciAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxpYmdwZXdpZGdldCAgICAgICB8IFtdICAgICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICBbXSBbXSAgICAgICB8CisgICAgIGxpYmdwZy1lcnJvciAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxpYmdwaG90bzIgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisgICAgIGxpYmdwaG90bzJfcG9ydCAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisgICAgIGxpYmdzYXNsICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxpYmljb252ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxpYmlkbiAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisgICAgIGxpZmVsaW5lcyAgICAgICAgICB8ICAgICAgICAgICAgICAgICgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxpbHlwb25kICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxpbmdvdGVhY2ggICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSB8CisgICAgIGx5bnggICAgICAgICAgICAgICB8ICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSB8CisgICAgIG00ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICBbXSBbXSAgICAgICAgICAgICAgICBbXSAgICAgICB8CisgICAgIG1haWx1dGlscyAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIG1ha2UgICAgICAgICAgICAgICB8IFtdICAgICAgICAgIFtdIFtdICBbXSBbXSAgICBbXSAgICBbXSAgICBbXSAgICAgICB8CisgICAgIG1hbi1kYiAgICAgICAgICAgICB8ICgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIG1pbmljb20gICAgICAgICAgICB8IFtdICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIG15c2VjcmV0ZGlhcnkgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICB8CisgICAgIG5hbm8gICAgICAgICAgICAgICB8ICAgICAgIFtdICAgICgpIFtdICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICBbXSB8CisgICAgIG5hbm9fMV8wICAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICBbXSB8CisgICAgIG9wY29kZXMgICAgICAgICAgICB8IFtdICAgICAgICAgIFtdIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHBhcnRlZCAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSB8CisgICAgIHBpbG90LXFvZiAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHBzbWlzYyAgICAgICAgICAgICB8ICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSB8CisgICAgIHB3ZHV0aWxzICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHB5dGhvbiAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHFvZiAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHJhZGl1cyAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHJlY29kZSAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICBbXSBbXSAgICBbXSAgICAgICBbXSBbXSAgICBbXSB8CisgICAgIHJwbSAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICB8CisgICAgIHNjcmVlbSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHNjcm9sbGtlZXBlciAgICAgICB8IFtdICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIHNlZCAgICAgICAgICAgICAgICB8IFtdIFtdICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIHNoLXV0aWxzICAgICAgICAgICB8IFtdIFtdICAgICAgIFtdIFtdICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICBbXSB8CisgICAgIHNoYXJlZC1taW1lLWluZm8gICB8IFtdICAgIFtdICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSB8CisgICAgIHNoYXJ1dGlscyAgICAgICAgICB8IFtdIFtdICAgICAgIFtdIFtdICBbXSBbXSAgICAgICAgICAgICBbXSAgICAgICBbXSB8CisgICAgIHNoaXNoaSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHNpbGt5ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHNrZW5jaWwgICAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHNrZXRjaCAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHNvbGZlZ2UgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisgICAgIHNvdW5kdHJhY2tlciAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisgICAgIHNwICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHN0YXJkaWN0ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIHN5c3RlbS10b29scy1iYS4uLiB8IFtdICAgIFtdICAgIFtdIFtdICAgICAgICAgICAgICAgICBbXSBbXSBbXSAgICBbXSB8CisgICAgIHRhciAgICAgICAgICAgICAgICB8IFtdIFtdICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICBbXSB8CisgICAgIHRleGluZm8gICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CisgICAgIHRleHR1dGlscyAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICBbXSBbXSAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIHRpbiAgICAgICAgICAgICAgICB8ICAgIFtdICAgICAgICAgICgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHRwLXJvYm90ICAgICAgICAgICB8ICAgICAgICAgICAgIFtdIFtdICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIHR1eHBhaW50ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIHVuaWNvZGUtaGFuLXRyYS4uLiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHVuaWNvZGUtdHJhbnNsYS4uLiB8ICAgICAgICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHV0aWwtbGludXggICAgICAgICB8IFtdIFtdICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICBbXSB8CisgICAgIHZvcmJpcy10b29scyAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHdhc3Rlc2VkZ2UgICAgICAgICB8ICAgICAgICAgICAgICAgICgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHdkaWZmICAgICAgICAgICAgICB8IFtdIFtdICAgICAgICAgIFtdICBbXSBbXSAgICAgICAgICAgICBbXSBbXSAgICBbXSB8CisgICAgIHdnZXQgICAgICAgICAgICAgICB8ICAgIFtdICAgICAgIFtdIFtdICBbXSAgICAgICAgICAgICBbXSBbXSBbXSAgICBbXSB8CisgICAgIHhjaGF0ICAgICAgICAgICAgICB8IFtdICAgIFtdICAgIFtdIFtdICAgICAgICBbXSAgICBbXSAgICBbXSAgICAgICBbXSB8CisgICAgIHhrZXlib2FyZC1jb25maWcgICB8ICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSB8CisgICAgIHhwYWQgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgICAgIGVzIGV0IGV1IGZhIGZpIGZyICBnYSBnbCBndSBoZSBoaSBociBodSBpZCBpcyBpdAorICAgICAgICAgICAgICAgICAgICAgICAgICA4OSAyMSAxNiAgMiA0MSAxMTkgNjEgMTQgIDEgIDggIDEgIDYgNjEgMzAgIDAgNTMKKworICAgICAgICAgICAgICAgICAgICAgICAgICBqYSBrbyBrdSBreSBsZyBsdCBsdiBtayBtbiBtcyBtdCBuYiBuZSBubCAgbm4gbm8KKyAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgR05VbmV0ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgYTJwcyAgICAgICAgICAgICAgIHwgICAgKCkgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgICgpIHwKKyAgICAgYWVnaXMgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgIHwKKyAgICAgYW50LXBob25lICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgYW51YmlzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgW10gICAgICAgIHwKKyAgICAgYXAtdXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgIHwKKyAgICAgYXNwZWxsICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgYmFzaCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgYmF0Y2hlbG9yICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgICAgIHwKKyAgICAgYmZkICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgYmlic2hlbGYgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgIHwKKyAgICAgYmludXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgYmlzb24gICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgW10gICAgICAgIHwKKyAgICAgYmlzb24tcnVudGltZSAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgW10gICAgICAgIHwKKyAgICAgYmx1ZXotcGluICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgICAgIHwKKyAgICAgY2Zsb3cgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgY2xpc3AgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgY29uc29sZS10b29scyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgY29yZXV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgY3BpbyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgY3BwbGliICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgY3J5cHRvbml0ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgZGFya3N0YXQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgICAgIHwKKyAgICAgZGlhbG9nICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgICAgIHwKKyAgICAgZGlmZnV0aWxzICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgICAgIHwKKyAgICAgZG9vZGxlICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZTJmc3Byb2dzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgZW5zY3JpcHQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgZXJyb3IgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgZmV0Y2htYWlsICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgZmlsZXV0aWxzICAgICAgICAgIHwgW10gICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZmluZHV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgZmxleCAgICAgICAgICAgICAgIHwgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgZnNsaW50ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgICAgIHwKKyAgICAgZ2FzICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ2F3ayAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgZ2JpZmYgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgZ2NhbCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ2NjICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ2V0dGV4dC1leGFtcGxlcyAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgZ2V0dGV4dC1ydW50aW1lICAgIHwgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgZ2V0dGV4dC10b29scyAgICAgIHwgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ2ltcC1wcmludCAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgZ2lwICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgICAgIHwKKyAgICAgZ2xpdiAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgZ2x1bmFyY2xvY2sgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgICAgIHwKKyAgICAgZ211bHQgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ251YmlmZiAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ251Y2FzaCAgICAgICAgICAgIHwgKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgIHwKKyAgICAgZ251Y2FzaC1nbG9zc2FyeSAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgZ251ZWR1ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ251bGliICAgICAgICAgICAgIHwgW10gW10gICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgICAgIHwKKyAgICAgZ251bmV0LWd0ayAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ251dGxzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3BlLWFlcmlhbCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgZ3BlLWJlYW0gICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgZ3BlLWNhbGVuZGFyICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgZ3BlLWNsb2NrICAgICAgICAgIHwgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgZ3BlLWNvbmYgICAgICAgICAgIHwgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgZ3BlLWNvbnRhY3RzICAgICAgIHwgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3BlLWVkaXQgICAgICAgICAgIHwgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgZ3BlLWZpbGVtYW5hZ2VyICAgIHwgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3BlLWdvICAgICAgICAgICAgIHwgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgZ3BlLWxvZ2luICAgICAgICAgIHwgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgZ3BlLW93bmVyaW5mbyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgZ3BlLXBhY2thZ2UgICAgICAgIHwgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3BlLXNrZXRjaGJvb2sgICAgIHwgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgZ3BlLXN1ICAgICAgICAgICAgIHwgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgZ3BlLXRhc2ttYW5hZ2VyICAgIHwgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgZ3BlLXRpbWVzaGVldCAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgZ3BlLXRvZGF5ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgZ3BlLXRvZG8gICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3Bob3RvMiAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgZ3Byb2YgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3BzZHJpdmUgICAgICAgICAgIHwgKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICgpIHwKKyAgICAgZ3JhbWFkb2lyICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgIHwKKyAgICAgZ3JlcCAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgIHwKKyAgICAgZ3JldGwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3Nhc2wgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgZ3NzICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3N0LXBsdWdpbnMgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgZ3N0LXBsdWdpbnMtYmFzZSAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3N0LXBsdWdpbnMtZ29vZCAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgZ3N0cmVhbWVyICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgZ3RpY2sgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgZ3RrYW0gICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3Rrb3JwaGFuICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgZ3Rrc3BlbGwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgZ3V0ZW5wcmludCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgaGVsbG8gICAgICAgICAgICAgIHwgW10gW10gICAgICAgICAgICAgW10gICAgICAgW10gICAgW10gICAgW10gIFtdIFtdIHwKKyAgICAgaWQtdXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgaW1wb3N0ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgaW5kZW50ICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgaXNvXzMxNjYgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgaXNvXzMxNjZfMSAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIFtdIHwKKyAgICAgaXNvXzMxNjZfMiAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgaXNvXzMxNjZfMyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgaXNvXzQyMTcgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgaXNvXzYzOSAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAganBpbG90ICAgICAgICAgICAgIHwgKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICgpIHwKKyAgICAganRhZyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgandob2lzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAga2JkICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAga2V5dG91Y2ggICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAga2V5dG91Y2gtZWRpdG9yICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAga2V5dG91Y2gta2V5Ym9hLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGF0cmluZSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgbGQgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGVhZnBhZCAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGliYyAgICAgICAgICAgICAgIHwgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgIFtdIHwKKyAgICAgbGliZXhpZiAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGliZXh0cmFjdG9yICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGliZ3Bld2lkZ2V0ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgbGliZ3BnLWVycm9yICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGliZ3Bob3RvMiAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGliZ3Bob3RvMl9wb3J0ICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGliZ3Nhc2wgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgbGliaWNvbnYgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGliaWRuICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgbGlmZWxpbmVzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgbGlseXBvbmQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGluZ290ZWFjaCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgbHlueCAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgbTQgICAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgbWFpbHV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbWFrZSAgICAgICAgICAgICAgIHwgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgbWFuLWRiICAgICAgICAgICAgIHwgKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbWluaWNvbSAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbXlzZWNyZXRkaWFyeSAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgbmFubyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgW10gICAgICAgIHwKKyAgICAgbmFub18xXzAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgIFtdICAgIHwKKyAgICAgb3Bjb2RlcyAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgcGFydGVkICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgcGlsb3QtcW9mICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgcHNtaXNjICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgIHwKKyAgICAgcHdkdXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgcHl0aG9uICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgcW9mICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgcmFkaXVzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgcmVjb2RlICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgcnBtICAgICAgICAgICAgICAgIHwgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgc2NyZWVtICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgc2Nyb2xsa2VlcGVyICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gIFtdICAgIHwKKyAgICAgc2VkICAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgc2gtdXRpbHMgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIHwKKyAgICAgc2hhcmVkLW1pbWUtaW5mbyAgIHwgICAgW10gICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgW10gIFtdICAgIHwKKyAgICAgc2hhcnV0aWxzICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgc2hpc2hpICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgc2lsa3kgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgc2tlbmNpbCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgc2tldGNoICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgc29sZmVnZSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgc291bmR0cmFja2VyICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgc3AgICAgICAgICAgICAgICAgIHwgKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgc3RhcmRpY3QgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgc3lzdGVtLXRvb2xzLWJhLi4uIHwgW10gW10gICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgdGFyICAgICAgICAgICAgICAgIHwgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgdGV4aW5mbyAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgIHwKKyAgICAgdGV4dHV0aWxzICAgICAgICAgIHwgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIHwKKyAgICAgdGluICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgdHAtcm9ib3QgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgdHV4cGFpbnQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIHwKKyAgICAgdW5pY29kZS1oYW4tdHJhLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgdW5pY29kZS10cmFuc2xhLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgdXRpbC1saW51eCAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgdm9yYmlzLXRvb2xzICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgd2FzdGVzZWRnZSAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgd2RpZmYgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgIHwKKyAgICAgd2dldCAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgeGNoYXQgICAgICAgICAgICAgIHwgW10gW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgeGtleWJvYXJkLWNvbmZpZyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIHwKKyAgICAgeHBhZCAgICAgICAgICAgICAgIHwgICAgW10gICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgamEga28ga3Uga3kgbGcgbHQgbHYgbWsgbW4gbXMgbXQgbmIgbmUgbmwgIG5uIG5vCisgICAgICAgICAgICAgICAgICAgICAgICAgIDQwIDI0ICAyICAxICAxICAzICAxICAyICAzIDIxICAwIDE1ICAxIDEwMSAgNSAgMworCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5zbyBvciBwYSBwbCBwdCBwdF9CUiBybSBybyBydSBydyBzayBzbCBzcSBzciBzdiAgdGEKKyAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgIEdOVW5ldCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBhMnBzICAgICAgICAgICAgICAgfCAgICAgICAgICAgKCkgICAgIFtdICAgICAgW10gW10gICAgICAgW10gICAgW10gW10gICAgIHwKKyAgICAgYWVnaXMgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICgpICgpICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGFudC1waG9uZSAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBhbnViaXMgICAgICAgICAgICAgfCAgICAgICAgICAgW10gICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgYXAtdXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGFzcGVsbCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBiYXNoICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIFtdICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgYmF0Y2hlbG9yICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGJmZCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBiaWJzaGVsZiAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgYmludXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGJpc29uICAgICAgICAgICAgICB8ICAgICAgICAgICBbXSAgICAgW10gICAgICBbXSBbXSAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBiaXNvbi1ydW50aW1lICAgICAgfCAgICAgICAgICAgW10gICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgICAgW10gICAgIHwKKyAgICAgYmx1ZXotcGluICAgICAgICAgIHwgICAgICAgICAgIFtdICAgICBbXSAgIFtdIFtdIFtdICAgIFtdIFtdICAgIFtdIFtdICAgICB8CisgICAgIGNmbG93ICAgICAgICAgICAgICB8ICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBjbGlzcCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgY29uc29sZS10b29scyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGNvcmV1dGlscyAgICAgICAgICB8ICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICBbXSAgICAgfAorICAgICBjcGlvICAgICAgICAgICAgICAgfCAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgY3BwbGliICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGNyeXB0b25pdCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBkYXJrc3RhdCAgICAgICAgICAgfCAgICAgICAgICAgW10gICAgIFtdICAgICAgW10gICAgICAgW10gICAgICAgW10gW10gICAgIHwKKyAgICAgZGlhbG9nICAgICAgICAgICAgIHwgICAgICAgICAgIFtdIFtdICBbXSAgIFtdIFtdIFtdIFtdICAgICAgICAgIFtdIFtdICAgICB8CisgICAgIGRpZmZ1dGlscyAgICAgICAgICB8ICAgICAgICAgICBbXSAgICAgW10gICAgICBbXSBbXSAgICAgICAgICAgICBbXSBbXSAgICAgfAorICAgICBkb29kbGUgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgIHwKKyAgICAgZTJmc3Byb2dzICAgICAgICAgIHwgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGVuc2NyaXB0ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgW10gICAgICBbXSBbXSAgICAgICBbXSAgICAgICBbXSAgICAgfAorICAgICBlcnJvciAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIFtdICAgICAgW10gICAgICAgW10gICAgICAgICAgW10gICAgIHwKKyAgICAgZmV0Y2htYWlsICAgICAgICAgIHwgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgICAgICB8CisgICAgIGZpbGV1dGlscyAgICAgICAgICB8ICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSBbXSAgICAgICBbXSAgICAgICBbXSAgICAgfAorICAgICBmaW5kdXRpbHMgICAgICAgICAgfCAgICAgICAgICAgW10gW10gICAgICAgICAgW10gICAgICAgW10gW10gICAgICAgW10gICAgIHwKKyAgICAgZmxleCAgICAgICAgICAgICAgIHwgICAgICAgICAgIFtdICAgICBbXSAgICAgIFtdIFtdICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGZzbGludCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgW10gICAgICBbXSAgICAgICAgICAgICAgICBbXSBbXSAgICAgfAorICAgICBnYXMgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ2F3ayAgICAgICAgICAgICAgIHwgICAgICAgICAgIFtdICAgICBbXSAgICAgIFtdICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGdiaWZmICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnY2FsICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZ2NjICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGdldHRleHQtZXhhbXBsZXMgICB8ICAgICAgICAgICBbXSBbXSAgICAgICAgICBbXSBbXSAgICBbXSBbXSAgICBbXSBbXSAgICAgfAorICAgICBnZXR0ZXh0LXJ1bnRpbWUgICAgfCAgICAgICAgICAgW10gW10gICAgICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKKyAgICAgZ2V0dGV4dC10b29scyAgICAgIHwgICAgICAgICAgIFtdICAgICAgICAgICAgIFtdIFtdICAgIFtdIFtdICAgIFtdIFtdICAgICB8CisgICAgIGdpbXAtcHJpbnQgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICAgfAorICAgICBnaXAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgICAgW10gW10gICAgIHwKKyAgICAgZ2xpdiAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICBbXSAgICAgIFtdICAgICAgIFtdICAgICAgICAgIFtdICAgICB8CisgICAgIGdsdW5hcmNsb2NrICAgICAgICB8ICAgICAgICAgICAgICAgICAgW10gICAgICBbXSBbXSAgICBbXSAgICAgICBbXSBbXSAgICAgfAorICAgICBnbXVsdCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gW10gICAgIHwKKyAgICAgZ251YmlmZiAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdudWNhc2ggICAgICAgICAgICB8ICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBnbnVjYXNoLWdsb3NzYXJ5ICAgfCAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgIHwKKyAgICAgZ251ZWR1ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdudWxpYiAgICAgICAgICAgICB8ICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSBbXSAgICAgICBbXSAgICAgICBbXSAgICAgfAorICAgICBnbnVuZXQtZ3RrICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZ251dGxzICAgICAgICAgICAgIHwgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGdwZS1hZXJpYWwgICAgICAgICB8ICAgICAgICAgICAgICBbXSAgW10gICAgICBbXSBbXSAgICAgICBbXSAgICBbXSBbXSAgICAgfAorICAgICBncGUtYmVhbSAgICAgICAgICAgfCAgICAgICAgICAgICAgW10gIFtdICAgICAgW10gW10gICAgICAgW10gICAgW10gW10gICAgIHwKKyAgICAgZ3BlLWNhbGVuZGFyICAgICAgIHwgICAgICAgICAgICAgIFtdICBbXSAgICAgIFtdIFtdICAgIFtdIFtdICAgIFtdIFtdICAgICB8CisgICAgIGdwZS1jbG9jayAgICAgICAgICB8ICAgICAgICAgICAgICBbXSAgW10gICAgICBbXSBbXSAgICBbXSBbXSAgICBbXSBbXSAgICAgfAorICAgICBncGUtY29uZiAgICAgICAgICAgfCAgICAgICAgICAgICAgW10gIFtdICAgICAgW10gW10gICAgW10gW10gICAgICAgW10gICAgIHwKKyAgICAgZ3BlLWNvbnRhY3RzICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgIFtdICAgIFtdIFtdICAgICB8CisgICAgIGdwZS1lZGl0ICAgICAgICAgICB8ICAgICAgICAgICAgICBbXSAgW10gICAgICBbXSBbXSAgICBbXSBbXSAgICBbXSBbXSAgICAgfAorICAgICBncGUtZmlsZW1hbmFnZXIgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgIHwKKyAgICAgZ3BlLWdvICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICBbXSAgICAgIFtdIFtdICAgICAgIFtdICAgIFtdIFtdICAgICB8CisgICAgIGdwZS1sb2dpbiAgICAgICAgICB8ICAgICAgICAgICAgICBbXSAgW10gICAgICBbXSBbXSAgICBbXSBbXSAgICBbXSBbXSAgICAgfAorICAgICBncGUtb3duZXJpbmZvICAgICAgfCAgICAgICAgICAgICAgW10gIFtdICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKKyAgICAgZ3BlLXBhY2thZ2UgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICB8CisgICAgIGdwZS1za2V0Y2hib29rICAgICB8ICAgICAgICAgICAgICBbXSAgW10gICAgICBbXSBbXSAgICBbXSBbXSAgICBbXSBbXSAgICAgfAorICAgICBncGUtc3UgICAgICAgICAgICAgfCAgICAgICAgICAgICAgW10gIFtdICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKKyAgICAgZ3BlLXRhc2ttYW5hZ2VyICAgIHwgICAgICAgICAgICAgIFtdICBbXSAgICAgIFtdIFtdICAgIFtdIFtdICAgIFtdIFtdICAgICB8CisgICAgIGdwZS10aW1lc2hlZXQgICAgICB8ICAgICAgICAgICAgICBbXSAgW10gICAgICBbXSBbXSAgICBbXSBbXSAgICBbXSBbXSAgICAgfAorICAgICBncGUtdG9kYXkgICAgICAgICAgfCAgICAgICAgICAgICAgW10gIFtdICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKKyAgICAgZ3BlLXRvZG8gICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdICAgIFtdIFtdICAgICB8CisgICAgIGdwaG90bzIgICAgICAgICAgICB8ICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICBbXSBbXSAgICAgfAorICAgICBncHJvZiAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIFtdICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZ3BzZHJpdmUgICAgICAgICAgIHwgICAgICAgIFtdICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGdyYW1hZG9pciAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICAgfAorICAgICBncmVwICAgICAgICAgICAgICAgfCAgICAgICAgICAgW10gW10gIFtdICAgICAgW10gW10gICAgICAgW10gICAgW10gW10gICAgIHwKKyAgICAgZ3JldGwgICAgICAgICAgICAgIHwgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdzYXNsICAgICAgICAgICAgICB8ICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBnc3MgICAgICAgICAgICAgICAgfCAgICAgICAgICAgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZ3N0LXBsdWdpbnMgICAgICAgIHwgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdIFtdICAgICB8CisgICAgIGdzdC1wbHVnaW5zLWJhc2UgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBnc3QtcGx1Z2lucy1nb29kICAgfCAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gICAgIHwKKyAgICAgZ3N0cmVhbWVyICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdIFtdICAgICB8CisgICAgIGd0aWNrICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBndGthbSAgICAgICAgICAgICAgfCAgICAgICAgICAgW10gICAgIFtdICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZ3Rrb3JwaGFuICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGd0a3NwZWxsICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgW10gICBbXSBbXSBbXSAgICBbXSBbXSAgICBbXSBbXSAgICAgfAorICAgICBndXRlbnByaW50ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgaGVsbG8gICAgICAgICAgICAgIHwgICAgICAgICAgIFtdICAgICBbXSAgICAgIFtdIFtdICAgIFtdIFtdICAgIFtdIFtdICAgICB8CisgICAgIGlkLXV0aWxzICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgW10gICAgICBbXSBbXSAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBpbXBvc3QgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgaW5kZW50ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICBbXSAgICAgIFtdIFtdICAgIFtdICAgICAgIFtdIFtdICAgICB8CisgICAgIGlzb18zMTY2ICAgICAgICAgICB8ICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICBbXSBbXSBbXSBbXSAgICAgfAorICAgICBpc29fMzE2Nl8xICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gW10gICAgICAgIHwKKyAgICAgaXNvXzMxNjZfMiAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGlzb18zMTY2XzMgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICBbXSAgICBbXSAgICAgICAgfAorICAgICBpc29fNDIxNyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgW10gW10gICAgIHwKKyAgICAgaXNvXzYzOSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgIFtdIFtdICAgICB8CisgICAgIGpwaWxvdCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBqdGFnICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIHwKKyAgICAgandob2lzICAgICAgICAgICAgIHwgICAgICAgICAgIFtdICAgICBbXSAgICAgIFtdICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGtiZCAgICAgICAgICAgICAgICB8ICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBrZXl0b3VjaCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAga2V5dG91Y2gtZWRpdG9yICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGtleXRvdWNoLWtleWJvYS4uLiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBsYXRyaW5lICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgbGQgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGxlYWZwYWQgICAgICAgICAgICB8ICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICBbXSAgW10gfAorICAgICBsaWJjICAgICAgICAgICAgICAgfCAgICAgICAgICAgW10gICAgIFtdICAgICAgICAgW10gICAgW10gICAgICAgICAgW10gICAgIHwKKyAgICAgbGliZXhpZiAgICAgICAgICAgIHwgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxpYmV4dHJhY3RvciAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBsaWJncGV3aWRnZXQgICAgICAgfCAgICAgICAgICAgICAgW10gIFtdICAgICAgW10gICAgICAgW10gW10gICAgW10gW10gICAgIHwKKyAgICAgbGliZ3BnLWVycm9yICAgICAgIHwgICAgICAgICAgIFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxpYmdwaG90bzIgICAgICAgICB8ICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsaWJncGhvdG8yX3BvcnQgICAgfCAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgbGliZ3Nhc2wgICAgICAgICAgIHwgICAgICAgICAgIFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIFtdIFtdICAgICB8CisgICAgIGxpYmljb252ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsaWJpZG4gICAgICAgICAgICAgfCAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gKCkgICAgIHwKKyAgICAgbGlmZWxpbmVzICAgICAgICAgIHwgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGxpbHlwb25kICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsaW5nb3RlYWNoICAgICAgICAgfCAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbHlueCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICBbXSAgICAgICAgIFtdICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIG00ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICBbXSAgICAgW10gICAgICBbXSBbXSAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBtYWlsdXRpbHMgICAgICAgICAgfCAgICAgICAgICAgW10gICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgbWFrZSAgICAgICAgICAgICAgIHwgICAgICAgICAgIFtdICAgICBbXSAgICAgICAgIFtdICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIG1hbi1kYiAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBtaW5pY29tICAgICAgICAgICAgfCAgICAgICAgICAgW10gICAgIFtdICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgbXlzZWNyZXRkaWFyeSAgICAgIHwgICAgICAgICAgICAgICAgICBbXSAgICAgIFtdIFtdICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIG5hbm8gICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBuYW5vXzFfMCAgICAgICAgICAgfCAgICAgICAgICAgW10gICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgb3Bjb2RlcyAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIHBhcnRlZCAgICAgICAgICAgICB8ICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBwaWxvdC1xb2YgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgcHNtaXNjICAgICAgICAgICAgIHwgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIHB3ZHV0aWxzICAgICAgICAgICB8ICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBweXRob24gICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgcW9mICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIHJhZGl1cyAgICAgICAgICAgICB8ICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICByZWNvZGUgICAgICAgICAgICAgfCAgICAgICAgICAgW10gW10gIFtdICAgICAgW10gW10gICAgICAgW10gICAgICAgW10gICAgIHwKKyAgICAgcnBtICAgICAgICAgICAgICAgIHwgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIHNjcmVlbSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBzY3JvbGxrZWVwZXIgICAgICAgfCAgICAgICAgICAgW10gICAgICAgICAgICAgW10gW10gICAgW10gICAgW10gW10gW10gICAgIHwKKyAgICAgc2VkICAgICAgICAgICAgICAgIHwgICAgICAgICAgIFtdIFtdICBbXSAgICAgIFtdIFtdICAgIFtdIFtdICAgIFtdIFtdICAgICB8CisgICAgIHNoLXV0aWxzICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICBbXSAgICAgICAgfAorICAgICBzaGFyZWQtbWltZS1pbmZvICAgfCAgICAgICAgICAgICAgW10gIFtdICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gICAgIHwKKyAgICAgc2hhcnV0aWxzICAgICAgICAgIHwgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgIFtdIFtdICAgICB8CisgICAgIHNoaXNoaSAgICAgICAgICAgICB8ICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBzaWxreSAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIHwKKyAgICAgc2tlbmNpbCAgICAgICAgICAgIHwgICAgICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIHNrZXRjaCAgICAgICAgICAgICB8ICAgICAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBzb2xmZWdlICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgc291bmR0cmFja2VyICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICB8CisgICAgIHNwICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBzdGFyZGljdCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgW10gICAgIHwKKyAgICAgc3lzdGVtLXRvb2xzLWJhLi4uIHwgICAgICAgIFtdIFtdIFtdICBbXSAgICAgIFtdICAgICAgICAgICAgIFtdIFtdIFtdICBbXSB8CisgICAgIHRhciAgICAgICAgICAgICAgICB8ICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSBbXSAgICAgICBbXSAgICAgICBbXSAgICAgfAorICAgICB0ZXhpbmZvICAgICAgICAgICAgfCAgICAgICAgICAgW10gICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgdGV4dHV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICAgIFtdICAgICB8CisgICAgIHRpbiAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB0cC1yb2JvdCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgdHV4cGFpbnQgICAgICAgICAgIHwgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgIFtdIFtdIFtdIFtdICAgICB8CisgICAgIHVuaWNvZGUtaGFuLXRyYS4uLiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB1bmljb2RlLXRyYW5zbGEuLi4gfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgdXRpbC1saW51eCAgICAgICAgIHwgICAgICAgICAgICAgICAgICBbXSAgICAgICAgIFtdICAgICAgIFtdICAgICAgIFtdICAgICB8CisgICAgIHZvcmJpcy10b29scyAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB3YXN0ZXNlZGdlICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgd2RpZmYgICAgICAgICAgICAgIHwgICAgICAgICAgIFtdICAgICBbXSAgICAgIFtdIFtdICAgIFtdICAgICAgICAgIFtdICAgICB8CisgICAgIHdnZXQgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICBbXSAgICAgfAorICAgICB4Y2hhdCAgICAgICAgICAgICAgfCAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gW10gW10gW10gICAgIHwKKyAgICAgeGtleWJvYXJkLWNvbmZpZyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICB8CisgICAgIHhwYWQgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICBbXSAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbnNvIG9yIHBhIHBsIHB0IHB0X0JSIHJtIHJvIHJ1IHJ3IHNrIHNsIHNxIHNyIHN2ICB0YQorICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgIDIgIDMgNTggMzEgIDUzICAgIDUgNzYgNzIgIDUgNDIgNDggMTIgNTEgMTMwICAyCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdGcgdGggdGsgdHIgdWsgdmVuIHZpICB3YSB4aCB6aF9DTiB6aF9ISyB6aF9UVyB6dQorICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgR05VbmV0ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyCisgICAgIGEycHMgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdIFtdICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxOQorICAgICBhZWdpcyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDAKKyAgICAgYW50LXBob25lICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA2CisgICAgIGFudWJpcyAgICAgICAgICAgICB8ICAgICAgICAgIFtdIFtdICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMQorICAgICBhcC11dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICAoKSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQKKyAgICAgYXNwZWxsICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICB8IDE0CisgICAgIGJhc2ggICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMQorICAgICBiYXRjaGVsb3IgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDkKKyAgICAgYmZkICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxCisgICAgIGJpYnNoZWxmICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNworICAgICBiaW51dGlscyAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICBbXSAgICAgIHwgIDkKKyAgICAgYmlzb24gICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8IDE5CisgICAgIGJpc29uLXJ1bnRpbWUgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgfCAxNgorICAgICBibHVlei1waW4gICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gIFtdICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMjgKKyAgICAgY2Zsb3cgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA0CisgICAgIGNsaXNwICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNgorICAgICBjb25zb2xlLXRvb2xzICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUKKyAgICAgY29yZXV0aWxzICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE3CisgICAgIGNwaW8gICAgICAgICAgICAgICB8ICAgICAgICAgIFtdIFtdICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgOQorICAgICBjcHBsaWIgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMTEKKyAgICAgY3J5cHRvbml0ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1CisgICAgIGRhcmtzdGF0ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICgpICAgICAgICAgICgpICAgICAgfCAxNQorICAgICBkaWFsb2cgICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMzAKKyAgICAgZGlmZnV0aWxzICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgW10gICAgICAgICAgW10gICAgICB8IDI4CisgICAgIGRvb2RsZSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNgorICAgICBlMmZzcHJvZ3MgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTAKKyAgICAgZW5zY3JpcHQgICAgICAgICAgIHwgICAgICAgICAgW10gW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE2CisgICAgIGVycm9yICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgfCAxOAorICAgICBmZXRjaG1haWwgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTIKKyAgICAgZmlsZXV0aWxzICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgICB8IDE4CisgICAgIGZpbmR1dGlscyAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgfCAxNworICAgICBmbGV4ICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTUKKyAgICAgZnNsaW50ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA5CisgICAgIGdhcyAgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMworICAgICBnYXdrICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTUKKyAgICAgZ2JpZmYgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1CisgICAgIGdjYWwgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNQorICAgICBnY2MgICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgIDYKKyAgICAgZ2V0dGV4dC1leGFtcGxlcyAgIHwgICAgICAgICAgW10gW10gICAgIFtdICAgICAgICAgW10gICAgW10gICAgW10gICAgICB8IDI2CisgICAgIGdldHRleHQtcnVudGltZSAgICB8ICAgICAgICAgIFtdIFtdICAgICBbXSAgICAgICAgIFtdICAgIFtdICAgIFtdICAgICAgfCAyOAorICAgICBnZXR0ZXh0LXRvb2xzICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMTkKKyAgICAgZ2ltcC1wcmludCAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEyCisgICAgIGdpcCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgfCAxMgorICAgICBnbGl2ICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDgKKyAgICAgZ2x1bmFyY2xvY2sgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgW10gICAgICB8IDE1CisgICAgIGdtdWx0ICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgfCAxNQorICAgICBnbnViaWZmICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEKKyAgICAgZ251Y2FzaCAgICAgICAgICAgIHwgICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyCisgICAgIGdudWNhc2gtZ2xvc3NhcnkgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgfCAgOQorICAgICBnbnVlZHUgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIKKyAgICAgZ251bGliICAgICAgICAgICAgIHwgICAgICAgICAgW10gW10gICAgIFtdICAgICAgICAgW10gICAgICAgICAgW10gICAgICB8IDI4CisgICAgIGdudW5ldC1ndGsgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMQorICAgICBnbnV0bHMgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIKKyAgICAgZ3BlLWFlcmlhbCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgW10gICAgICAgICAgICAgICAgICB8IDE0CisgICAgIGdwZS1iZWFtICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgfCAxNAorICAgICBncGUtY2FsZW5kYXIgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gIFtdICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMTkKKyAgICAgZ3BlLWNsb2NrICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICBbXSAgICAgW10gICAgICAgICAgICAgICAgICB8IDIwCisgICAgIGdwZS1jb25mICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgfCAxNAorICAgICBncGUtY29udGFjdHMgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICBbXSAgICAgICAgICAgICAgICAgIHwgMTAKKyAgICAgZ3BlLWVkaXQgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgW10gICAgICB8IDE5CisgICAgIGdwZS1maWxlbWFuYWdlciAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNQorICAgICBncGUtZ28gICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTQKKyAgICAgZ3BlLWxvZ2luICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICBbXSAgICAgW10gICAgICAgICAgW10gICAgICB8IDIwCisgICAgIGdwZS1vd25lcmluZm8gICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgfCAyMAorICAgICBncGUtcGFja2FnZSAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUKKyAgICAgZ3BlLXNrZXRjaGJvb2sgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE2CisgICAgIGdwZS1zdSAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgfCAxOQorICAgICBncGUtdGFza21hbmFnZXIgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICBbXSAgICAgICAgICAgICAgICAgIHwgMTkKKyAgICAgZ3BlLXRpbWVzaGVldCAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgW10gICAgICAgICAgW10gICAgICB8IDE4CisgICAgIGdwZS10b2RheSAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgW10gICAgIFtdICAgICAgICAgIFtdICAgICAgfCAyMAorICAgICBncGUtdG9kbyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDYKKyAgICAgZ3Bob3RvMiAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgIFtdICAgICAgICAgW10gICAgICAgICAgW10gICAgICB8IDIwCisgICAgIGdwcm9mICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMQorICAgICBncHNkcml2ZSAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQKKyAgICAgZ3JhbWFkb2lyICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA3CisgICAgIGdyZXAgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdIFtdICAgICBbXSAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgfCAzMworICAgICBncmV0bCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQKKyAgICAgZ3Nhc2wgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgW10gICAgICAgICAgICAgICAgICB8ICA2CisgICAgIGdzcyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNQorICAgICBnc3QtcGx1Z2lucyAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICBbXSAgICAgIHwgMTUKKyAgICAgZ3N0LXBsdWdpbnMtYmFzZSAgIHwgICAgICAgICAgICAgW10gICAgIFtdICAgICAgICAgW10gICAgICAgICAgICAgICAgICB8ICA5CisgICAgIGdzdC1wbHVnaW5zLWdvb2QgICB8ICAgICAgICAgICAgIFtdICAgICBbXSAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgfCAxOAorICAgICBnc3RyZWFtZXIgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTcKKyAgICAgZ3RpY2sgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDExCisgICAgIGd0a2FtICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMworICAgICBndGtvcnBoYW4gICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDcKKyAgICAgZ3Rrc3BlbGwgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgIFtdICBbXSAgICAgW10gICAgW10gICAgW10gICAgICB8IDI2CisgICAgIGd1dGVucHJpbnQgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMworICAgICBoZWxsbyAgICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMzkKKyAgICAgaWQtdXRpbHMgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE0CisgICAgIGltcG9zdCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNAorICAgICBpbmRlbnQgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMjUKKyAgICAgaXNvXzMxNjYgICAgICAgICAgIHwgICAgICAgW10gW10gICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE1CisgICAgIGlzb18zMTY2XzEgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgfCAyMAorICAgICBpc29fMzE2Nl8yICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIKKyAgICAgaXNvXzMxNjZfMyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgW10gICAgICAgICAgICAgICAgICB8ICA5CisgICAgIGlzb180MjE3ICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxNAorICAgICBpc29fNjM5ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTQKKyAgICAganBpbG90ICAgICAgICAgICAgIHwgICAgICAgICAgW10gW10gICAgIFtdICAgICAgICAgW10gICAgICAgICAgICAgICAgICB8ICA3CisgICAgIGp0YWcgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMworICAgICBqd2hvaXMgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICBbXSAgICAgIHwgMTMKKyAgICAga2JkICAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEyCisgICAgIGtleXRvdWNoICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNAorICAgICBrZXl0b3VjaC1lZGl0b3IgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIKKyAgICAga2V5dG91Y2gta2V5Ym9hLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyCisgICAgIGxhdHJpbmUgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgOAorICAgICBsZCAgICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgIDgKKyAgICAgbGVhZnBhZCAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgW10gICAgICAgICAgW10gICAgICB8IDIzCisgICAgIGxpYmMgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgfCAyMworICAgICBsaWJleGlmICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQKKyAgICAgbGliZXh0cmFjdG9yICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1CisgICAgIGxpYmdwZXdpZGdldCAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgfCAxOQorICAgICBsaWJncGctZXJyb3IgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQKKyAgICAgbGliZ3Bob3RvMiAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA4CisgICAgIGxpYmdwaG90bzJfcG9ydCAgICB8ICAgICAgICAgICAgIFtdICAgICBbXSAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgfCAxMQorICAgICBsaWJnc2FzbCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDgKKyAgICAgbGliaWNvbnYgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA0CisgICAgIGxpYmlkbiAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgfCAxMAorICAgICBsaWZlbGluZXMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQKKyAgICAgbGlseXBvbmQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyCisgICAgIGxpbmdvdGVhY2ggICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNgorICAgICBseW54ICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTUKKyAgICAgbTQgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgW10gICAgICAgICAgW10gICAgICB8IDE4CisgICAgIG1haWx1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgOAorICAgICBtYWtlICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICBbXSAgICAgICAgICAgICAgICAgIHwgMjAKKyAgICAgbWFuLWRiICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA2CisgICAgIG1pbmljb20gICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxNAorICAgICBteXNlY3JldGRpYXJ5ICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTIKKyAgICAgbmFubyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8IDE1CisgICAgIG5hbm9fMV8wICAgICAgICAgICB8ICAgICAgICAgIFtdIFtdICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxOAorICAgICBvcGNvZGVzICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTAKKyAgICAgcGFydGVkICAgICAgICAgICAgIHwgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8IDEwCisgICAgIHBpbG90LXFvZiAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMworICAgICBwc21pc2MgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTAKKyAgICAgcHdkdXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzCisgICAgIHB5dGhvbiAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMAorICAgICBxb2YgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIKKyAgICAgcmFkaXVzICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA2CisgICAgIHJlY29kZSAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgfCAyNQorICAgICBycG0gICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICBbXSAgICAgIHwgMTQKKyAgICAgc2NyZWVtICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyCisgICAgIHNjcm9sbGtlZXBlciAgICAgICB8ICAgICAgICAgIFtdIFtdICAgICBbXSAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgfCAyNgorICAgICBzZWQgICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICBbXSAgICAgIHwgMjIKKyAgICAgc2gtdXRpbHMgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE1CisgICAgIHNoYXJlZC1taW1lLWluZm8gICB8ICAgICAgICAgICAgIFtdICAgICBbXSAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgfCAyMworICAgICBzaGFydXRpbHMgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICBbXSAgICAgIHwgMjMKKyAgICAgc2hpc2hpICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxCisgICAgIHNpbGt5ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNAorICAgICBza2VuY2lsICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDcKKyAgICAgc2tldGNoICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA2CisgICAgIHNvbGZlZ2UgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMgorICAgICBzb3VuZHRyYWNrZXIgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDkKKyAgICAgc3AgICAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzCisgICAgIHN0YXJkaWN0ICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICBbXSAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgfCAxMQorICAgICBzeXN0ZW0tdG9vbHMtYmEuLi4gfCAgICBbXSAgICBbXSBbXSAgICAgW10gICAgIFtdICBbXSAgICAgICAgICBbXSAgICAgIHwgMzcKKyAgICAgdGFyICAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8IDE5CisgICAgIHRleGluZm8gICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgfCAxNQorICAgICB0ZXh0dXRpbHMgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMTcKKyAgICAgdGluICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxCisgICAgIHRwLXJvYm90ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgfCAxMAorICAgICB0dXhwYWludCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gIFtdICAgICAgICAgICAgICAgICBbXSAgICAgIHwgMTYKKyAgICAgdW5pY29kZS1oYW4tdHJhLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAwCisgICAgIHVuaWNvZGUtdHJhbnNsYS4uLiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMgorICAgICB1dGlsLWxpbnV4ICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMjAKKyAgICAgdm9yYmlzLXRvb2xzICAgICAgIHwgICAgICAgICAgICAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDExCisgICAgIHdhc3Rlc2VkZ2UgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMQorICAgICB3ZGlmZiAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMjIKKyAgICAgd2dldCAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8IDE5CisgICAgIHhjaGF0ICAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICBbXSAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgfCAyOAorICAgICB4a2V5Ym9hcmQtY29uZmlnICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICBbXSAgICAgIHwgMTEKKyAgICAgeHBhZCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgW10gICAgICAgICAgW10gICAgICB8IDE0CisgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgIDc3IHRlYW1zICAgICAgICAgICB0ZyB0aCB0ayB0ciB1ayB2ZW4gdmkgIHdhIHhoIHpoX0NOIHpoX0hLIHpoX1RXIHp1CisgICAgICAxNzIgZG9tYWlucyAgICAgICAgICAwICAxICAxIDc4IDM5ICAwICAxMzUgMTMgIDEgIDUwICAgICAzICAgIDU0ICAgIDAgIDIwNTQKKworICAgU29tZSBjb3VudGVycyBpbiB0aGUgcHJlY2VkaW5nIG1hdHJpeCBhcmUgaGlnaGVyIHRoYW4gdGhlIG51bWJlciBvZgordmlzaWJsZSBibG9ja3MgbGV0IHVzIGV4cGVjdC4gIFRoaXMgaXMgYmVjYXVzZSBhIGZldyBleHRyYSBQTyBmaWxlcyBhcmUKK3VzZWQgZm9yIGltcGxlbWVudGluZyByZWdpb25hbCB2YXJpYW50cyBvZiBsYW5ndWFnZXMsIG9yIGxhbmd1YWdlCitkaWFsZWN0cy4KKworICAgRm9yIGEgUE8gZmlsZSBpbiB0aGUgbWF0cml4IGFib3ZlIHRvIGJlIGVmZmVjdGl2ZSwgdGhlIHBhY2thZ2UgdG8KK3doaWNoIGl0IGFwcGxpZXMgc2hvdWxkIGFsc28gaGF2ZSBiZWVuIGludGVybmF0aW9uYWxpemVkIGFuZAorZGlzdHJpYnV0ZWQgYXMgc3VjaCBieSBpdHMgbWFpbnRhaW5lci4gIFRoZXJlIG1pZ2h0IGJlIGFuIG9ic2VydmFibGUKK2xhZyBiZXR3ZWVuIHRoZSBtZXJlIGV4aXN0ZW5jZSBhIFBPIGZpbGUgYW5kIGl0cyB3aWRlIGF2YWlsYWJpbGl0eSBpbiBhCitkaXN0cmlidXRpb24uCisKKyAgIElmIEp1bHkgMjAwNiBzZWVtcyB0byBiZSBvbGQsIHlvdSBtYXkgZmV0Y2ggYSBtb3JlIHJlY2VudCBjb3B5IG9mCit0aGlzIGBBQk9VVC1OTFMnIGZpbGUgb24gbW9zdCBHTlUgYXJjaGl2ZSBzaXRlcy4gIFRoZSBtb3N0IHVwLXRvLWRhdGUKK21hdHJpeCB3aXRoIGZ1bGwgcGVyY2VudGFnZSBkZXRhaWxzIGNhbiBiZSBmb3VuZCBhdAorYGh0dHA6Ly93d3cuaXJvLnVtb250cmVhbC5jYS9jb250cmliL3BvL0hUTUwvbWF0cml4Lmh0bWwnLgorCisxLjYgVXNpbmcgYGdldHRleHQnIGluIG5ldyBwYWNrYWdlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworSWYgeW91IGFyZSB3cml0aW5nIGEgZnJlZWx5IGF2YWlsYWJsZSBwcm9ncmFtIGFuZCB3YW50IHRvCitpbnRlcm5hdGlvbmFsaXplIGl0IHlvdSBhcmUgd2VsY29tZSB0byB1c2UgR05VIGBnZXR0ZXh0JyBpbiB5b3VyCitwYWNrYWdlLiAgT2YgY291cnNlIHlvdSBoYXZlIHRvIHJlc3BlY3QgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCitMaWNlbnNlIHdoaWNoIGNvdmVycyB0aGUgdXNlIG9mIHRoZSBHTlUgYGdldHRleHQnIGxpYnJhcnkuICBUaGlzIG1lYW5zCitpbiBwYXJ0aWN1bGFyIHRoYXQgZXZlbiBub24tZnJlZSBwcm9ncmFtcyBjYW4gdXNlIGBsaWJpbnRsJyBhcyBhIHNoYXJlZAorbGlicmFyeSwgd2hlcmVhcyBvbmx5IGZyZWUgc29mdHdhcmUgY2FuIHVzZSBgbGliaW50bCcgYXMgYSBzdGF0aWMKK2xpYnJhcnkgb3IgdXNlIG1vZGlmaWVkIHZlcnNpb25zIG9mIGBsaWJpbnRsJy4KKworICAgT25jZSB0aGUgc291cmNlcyBhcmUgY2hhbmdlZCBhcHByb3ByaWF0ZWx5IGFuZCB0aGUgc2V0dXAgY2FuIGhhbmRsZQordGhlIHVzZSBvZiBgZ2V0dGV4dCcgdGhlIG9ubHkgdGhpbmcgbWlzc2luZyBhcmUgdGhlIHRyYW5zbGF0aW9ucy4gIFRoZQorRnJlZSBUcmFuc2xhdGlvbiBQcm9qZWN0IGlzIGFsc28gYXZhaWxhYmxlIGZvciBwYWNrYWdlcyB3aGljaCBhcmUgbm90CitkZXZlbG9wZWQgaW5zaWRlIHRoZSBHTlUgcHJvamVjdC4gIFRoZXJlZm9yZSB0aGUgaW5mb3JtYXRpb24gZ2l2ZW4gYWJvdmUKK2FwcGxpZXMgYWxzbyBmb3IgZXZlcnkgb3RoZXIgRnJlZSBTb2Z0d2FyZSBQcm9qZWN0LiAgQ29udGFjdAorYHRyYW5zbGF0aW9uQGlyby51bW9udHJlYWwuY2EnIHRvIG1ha2UgdGhlIGAucG90JyBmaWxlcyBhdmFpbGFibGUgdG8KK3RoZSB0cmFuc2xhdGlvbiB0ZWFtcy4KKwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L0FVVEhPUlMgYi9wYXJ0ZWQtMS44LjcvQVVUSE9SUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTU1ZTZmCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L0FVVEhPUlMKQEAgLTAsMCArMSwyMzMgQEAKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBQYXJ0ZWQKK0NvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNworICAgICAgICAgICAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gSW5jLgorCitUaGlzIGZpbGUgbWF5IGJlIG1vZGlmaWVkIGFuZC9vciBkaXN0cmlidXRlZCB3aXRob3V0IHJlc3RyaWN0aW9uLiAgVGhpcyBpcworbm90IGFuIGludml0YXRpb24gdG8gbWlzcmVwcmVzZW50IHdobyBjb250cmlidXRlZCB0byBHTlUgUGFydGVkLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1dlIG5lZWQgdG8ga2VlcCB0cmFjayBvZiBjb3B5cmlnaHQgKHNlZSB0aGUgTWFpbnRhaW5lciBIT1dUTyBvbiB3d3cuZ251Lm9yZykuCisKKworTGVzbGllIFBhdHJpY2sgUG9semVyICAgPHBvbHplckBnbnUub3JnPgorICAgICAgICAqIHBhcnRzIG9mIDEuNi4yNCBQZWRVbml0IEFQSQorICAgICAgICAqIEdQVCBwdGhfKiBmdW5jdGlvbnMgYW5kIGJsb2NrIHNpemUgZml4ZXMKKyAgICAgICAgKiBQRURfU0VDVE9SX1NJWkUgLT4gUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQKKyAgICAgICAgKiBkZWJ1Z2dpbmcgZnJhbWV3b3JrCisgICAgICAgICogZXh0MiAic3RyYW5nZSBsYXlvdXQiIGZpeCAoZXhwZXJpbWVudGFsKQorICAgICAgICAqIHN1cHBvcnQgZm9yIHBoeXNpY2FsIGJsb2NrIHNpemVzCisgICAgICAgICogU0NPIEJGUyBzdXBwb3J0CisKKyAgICAgICAgaHR0cDovL25pYy1uYWMtcHJvamVjdC5kZS9+c2t5cGhlci8KKworICAgICAgICBTbmFpbCBNYWlsOgorICAgICAgICBBbSBLaXJjaGJlcmcgMTUKKyAgICAgICAgODk1MzcgR2llbmdlbgorICAgICAgICBHZXJtYW55CisKK0FuZHJldyBDbGF1c2VuICAgICAgICAgIDxjbGF1c2VuQGdudS5vcmc+CisgICAgICAgICogYWxsIEZBVCBjb2RlIChsaWJwYXJ0ZWQvZnNfZmF0KQorICAgICAgICAqIGFsbCBsaW51eC1zd2FwIGNvZGUgKGxpYnBhcnRlZC9mc19saW51eF9zd2FwKQorICAgICAgICAqIHNvbWUgcmVpc2VyZnMgZ2x1ZSBjb2RlIChsaWJwYXJ0ZWQvZnNfcmVpc2VyZnMpIHdpdGggVW1hbmV0cworICAgICAgICAqIG1vc3Qgb2YgdGhlIEFQSSAod2l0aCBsb3RzIG9mIGRpc2N1c3Npb24gd2l0aCBMZW5uZXJ0IEJ1eXRlbmhlaykKKyAgICAgICAgICAoaW5jbHVkZS9wYXJ0ZWQvKikKKyAgICAgICAgKiBnZW5lcmljIGZpbGVzeXN0ZW0gY29kZSAoZmlsZXN5cy5jKSBhbmQgZGV2aWNlIGNvZGUgKGRldmljZS5jKQorICAgICAgICAqIGV4Y2VwdGlvbiBjb2RlIChleGNlcHRpb24uYywgZGVidWcuYykKKyAgICAgICAgKiBwYXJ0aXRpb24gdGFibGUgY29kZSAoZGlzay5jKQorICAgICAgICAqIGRvcyBwYXJ0aXRpb24gc3VwcG9ydCAoZGlza19kb3MuYykKKyAgICAgICAgKiBtYWMgcGFydGl0aW9uIHN1cHBvcnQgKGRpc2tfbWFjLmMpCisgICAgICAgICogbWlwcyBwYXJ0aXRpb24gc3VwcG9ydCAoZGlza19taXBzLmMpCisgICAgICAgICogbG9vcGJhY2sgc3VwcG9ydCAoZGlza19sb29wLmMpCisgICAgICAgICogc29tZSBvZiB0aGUgUEM5OCBjb2RlIChkaXNrX3BjOTguYyksIHdpdGggTWFzYWhpcm8gU2FrYWkuCisgICAgICAgICogbWlzYy4gaGFja2luZyBvbiBhbGwgZGlza18qLmMgY29kZQorICAgICAgICAqIGxvdy1sZXZlbCBJL08gY29kZSAoZGV2aWNlLmMsIGdlb20uYywgbGludXguYykKKyAgICAgICAgICAtIGluaXRfc2NzaSgpIHN0b2xlbiBmcm9tIGdub21lLWdmZGlzayB2aWEgTWF0dCBXaWxzb24uCisgICAgICAgICogY29uc3RyYWludCBzb2x2ZXIgKG5hdG1hdGguYywgY29uc3RyYWludC5jKQorICAgICAgICAqIGNvbW1hbmQtbGluZSwgYW5kIGZkaXNrLWxpa2UgZnJvbnRlbmQgKHBhcnRlZC8qKQorICAgICAgICAqIHN0dWJzIGZvciBudGZzLCBoZnMsIHhmcworICAgICAgICAqIGhhY2tlZCBvbiBsaWJwYXJ0ZWQvZnNfZXh0MiBhIGZhaXIgYml0IChidWcgZml4ZXMsIGVycm9yIGhhbmRsaW5nLAorICAgICAgICBzdXBwb3J0IGZvciA+IDEwMjQgZ3JvdXBzLCBldGMuKQorICAgICAgICAqIGxpYnBhcnRlZC9tYnIucyAodGhlIE1CUiBib290IGxvYWRlciBjb2RlKQorICAgICAgICAqIG1pc2MgaGFja2luZyBvbiBHTlUvSHVyZCBwb3J0CisgICAgICAgICogbWFqb3Igc3VyZ2VyeSBvbiBHVUlEIFBhcnRpdGlvbiBUYWJsZSAoR1BUKSBzdXBwb3J0IChkaXNrX2dwdC5bY2hdKQorICAgICAgICAqIHByb2dyZXNzIG1ldGVyIHN1cHBvcnQgKGxpYnBhcnRlZC90aW1lci5jIGluY2x1ZGUvcGFydGVkL3RpbWVyLmgpCisKKyAgICAgICAgU25haWwgbWFpbDoKKyAgICAgICAgMTggU2hhdyBTdAorICAgICAgICBBc2h3b29kLCAzMTQ3CisgICAgICAgIEF1c3RyYWxpYQorCitMZW5uZXJ0IEJ1eXRlbmhlayAgICAgICA8YnV5dGVuaEBnbnUub3JnPgorICAgICAgICAqIG9yaWdpbmFsIGV4dDIgY29kZSAobGlicGFydGVkL2ZzX2V4dDIpCisgICAgICAgICogZGlzY3Vzc2lvbi9pZGVhcyBmb3IgQVBJCisKK01hdHRoZXcgV2lsc29uICAgICAgICAgIDxtc3dAcmVkaGF0LmNvbT4KKyAgICAgICAgKiBiYXNpcyBvZiBwYXJ0aXRpb24gdGFibGUgYW5kIGRldmljZSBjb2RlIChkaXNrLmMsIGRpc2tfZG9zLmMsCisgICAgICAgIGFuZCBkZXZpY2UuYykgIEhhcyBtb3JwaGVkIGludG8gc29tZXRoaW5nIHRoYXQgbG9va3MgY29tcGxldGVseQorICAgICAgICBkaWZmZXJlbnQgbm93IDotKQorICAgICAgICAqIGJ1ZyBmaXhlcworICAgICAgICAqIEJTRCBkaXNrbGFiZWwgc3VwcG9ydCAoZGlza19ic2QuYykKKyAgICAgICAgKiBQeXRob24gYmluZGluZ3MgdG8gbGlicGFydGVkCisgICAgICAgICogRG9uJ3QgZGV0ZWN0IEFJWCBwaHlzaWNhbCB2b2x1bWVzIGFzIG1zZG9zIHBhcnRpdGlvbiB0YWJsZXMKKyAgICAgICAgKiBDb2RlIGZvciBtYW5pcHVsYXRpbmcgQUlYIFBWcworCitNYXJ0aW4gdm9uIEz2d2lzICAgICAgICA8bWFydGluQG1pcmEuaXNkbi5jcy50dS1iZXJsaW4uZGU+CisgICAgICAgICogR2VybWFuIHRyYW5zbGF0aW9ucworCitCYXR5IEplYW4tTWFyYyAgICAgICAgICA8YmF0eUBjbHViLWludGVybmV0LmZyPgorICAgICAgICAqIEZyZW5jaCB0cmFuc2xhdGlvbnMKKworSGlyb3NoaSBUYWtla2F3YSAgICAgICAgPHRha2VrYXdhQHNyMy50LnUtdG9reW8uYWMuanA+CisgICAgICAgICogSmFwYW5lc2UgdHJhbnNsYXRpb25zCisKK0VsaXBoYXMgTGV2eSBUaGVvZG9ybyAgIDxlbGlwaGFzQGNvbmVjdGl2YS5jb20+CisgICAgICAgICogQnJhemlsbGlhbiBQb3J0dWdlc2UgdHJhbnNsYXRpb25zCisKK0RtaXRyeSBTLiBTaXZhY2hlbmtvICAgIDxkaW1hQENoZy5SVT4KKyAgICAgICAgKiBSdXNzaWFuIHRyYW5zbGF0aW9ucworCitUaW1zaGVsIEtub2xsICAgICAgICAgICA8dGltc2hlbEBwb2JveC5jb20+CisgICAgICAgICogbWFuIHBhZ2VzIChwYXJ0ZWQuOCBwYXJ0cHJvYmUuOCkKKyAgICAgICAgKiBidWcgZml4ZXMKKworSXZvIFRpbW1lcm1hbnMgICAgICAgICAgPGl0aW1tZXJtYW5zQGJpZ2Zvb3QuY29tPgorICAgICAgICAqIER1dGNoIHRyYW5zbGF0aW9ucworCitSeW9qaSBLYXdhZ2lzaGkgICAgICAgICA8a2F3YWdpc2lAeWsucmltLm9yLmpwPgorICAgICAgICAqIEphcGFuZXNlIHRyYW5zbGF0aW9uIG9mIGRvYy9VU0VSICh1c2VyIGRvY3VtZW50YXRpb24pCisgICAgICAgIChyZXBsYWNlZCBieSBPa3VqaSdzIHZlcnNpb24sIG5vdykKKworT2t1amkgWW9zaGlub3JpICAgICAgICAgPG9rdWppQGt1aWNyLmt5b3RvLWEuYWMuanA+CisgICAgICAgICogZG9jL1VTRVIuanAKKyAgICAgICAgKiBjb250cmlidXRpb25zIHRvIEphcGFuZXNlIHRyYW5zbGF0aW9ucworCitNYXNhaGlybyBTYWthaSAgICAgICAgICA8WlZNMDEwNTJAbmlmdHkubmUuanA+CisgICAgICAgICogbW9zdCBvZiB0aGUgUEM5OCBzdXBwb3J0IChkaXNrX3BjOTguYyksIHdpdGggQW5kcmV3IENsYXVzZW4KKyAgICAgICAgKiBsb3RzIG9mIHRlZGlvdXMgd29yayBvbiBwYXJ0ZWQvc3RybGlzdC5jCisKK0RhbWllbiBHZW5ldCAgICAgICAgICAgIDxkYW1pZW4uZ2VuZXRAZnJlZS5mcj4KKyAgICAgICAgKiBwYXJ0ZWQubTQKKworQmVuIENvbGxpbnMgICAgICAgICAgICAgPGJjb2xsaW5zQGRlYmlhbi5vcmc+CisgICAgICAgICogU3VuIGRpc2sgbGFiZWwgc3VwcG9ydCAobGlicGFydGVkL2Rpc2tfc3VuLmMpCisgICAgICAgICogc3R1YnMgZm9yIFVGUworCitWaW5jZW50IFN0ZWxo6SAgICAgICAgICA8dmluY2VudC5zdGVsaGVAZnJlZS5mcj4KKyAgICAgICAgKiBtb3ZlIHN5bnRheCBwYXRjaCAobWFrZSBFTkQgc3BlY2lmaWNhdGlvbiBvcHRpb25hbCkuICBUcml2aWFsCisgICAgICAgIGZvciBjb3B5cmlnaHQgcHVycG9zZXMgKG5vIGRpc2NsYWltZXIgbmVlZGVkKQorCitOZWFsIEggV2FsZmllbGQgICAgICAgICA8bmVhbEBjcy51bWwuZWR1PgorICAgICAgICAqIEdOVS9IdXJkIHBvcnQgLSBsaWJwYXJ0ZWQvZ251LmMKKworVGhvbWFzIFJvZWx6ICAgICAgICAgICAgPHRvbUBzdXNlLmRlPgorICAgICAgICAqIG1pc2MgYnVnIGZpeGVzCisKK01hdHQgRG9tc2NoICAgICAgICAgICAgIDxNYXR0X0RvbXNjaEBkZWxsLmNvbT4KKyAgICAgICAgKiBHVUlEIFBhcnRpdGlvbiBUYWJsZSAoR1BUKSBzdXBwb3J0IChkaXNrX2dwdC5bY2hdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyYzMyLltjaF0pCisgICAgICAgICogbWlzYyBidWcgZml4ZXMsIGluY2x1ZGluZyBlbmQtb2YtZGV2aWNlIHdvcmthcm91bmQKKyAgICAgICAgaW4gbGlicGFydGVkL2xpbnV4LmMKKworS2pldGlsIFRvcmdyaW0gSG9tbWUgICAgPGtqZXRpbGhvQGxpbnByby5ubz4KKyAgICAgICAgKiBOb3J3ZWlnZW4gdHJhbnNsYXRpb25zCisKK0r2cmdlbiBUZWdu6XIgICAgICAgICAgIDxqb3JnZW4udGVnbmVyQHRlbGlhLmNvbT4KKyAgICAgICAgKiBTd2VkaXNoIHRyYW5zbGF0aW9ucworCitLZWxkIFNpbW9uc2VuICAgICAgICAgICA8a2VsZEBka3V1Zy5kaz4KKyAgICAgICAgKiBEYW5pc2ggdHJhbnNsYXRpb25zCisKK1JpY2hhcmQgTS4gS3JldXRlciAgICAgIDxrcmV1dGVyQGF1c2FyLnJ1dGdlcnMuZWR1PgorICAgICAgICAqIGNvbnZlcnRlZCBkb2MvVVNFUiB0byB0ZXhpbmZvIChkb2MvcGFydGVkLnRleGkpCisKK01pcXVlbCBNYXRhcyAgICAgICAgICAgIDxtaXF1ZWxtYXRhc0B3YW5hZG9vLmVzPgorICAgICAgICAqIENhdGFsYW4gdHJhbnNsYXRpb25zCisKK0FuZHJlYXMgRGlsZ2VyICAgICAgICAgIDxhZGlsZ2VyQGNsdXN0ZXJmcy5jb20+CisgICAgICAgICogbG90cyBvZiBtaXggYnVnIGZpeGVzL2NsZWFudXBzCisKK1ZpY2VudGUgRS4gTGxvcmVucyAgICAgIDx2bGxvcmVuc0BtdW5kb2ZyZWUuY29tPgorICAgICAgICAqIFNwYW5pc2ggdHJhbnNsYXRpb25zCisKK1l1cnkgVW1hbmV0cyAgICAgICAgICAgIDx0b3JxdWVAdWtycG9zdC5uZXQ+CisgICAgICAgICogYmFzaXMgb2YgbGlicGFydGVkL2ZzX3JlaXNlcmZzCisKK0Jlcm5hcmRvIEpv428gVG9ycmVzIGRhIFNpbHZlaXJhIAorICAgICAgICAgICAgICAgICAgICAgICAgPGJlcm5hcmRvanRzQGlnLmNvbS5icj4KKyAgICAgICAgKiBwdF9CUiB0cmFuc2xhdGlvbiBvZiBGQVEgYW5kIHBhcnRlZC50ZXhpCisKK1dvamNpZWNoIFBvbGFrICAgICAgICAgIDxwb2xha0BnbnUub3JnPgorICAgICAgICAqIFBvbGlzaCB0cmFuc2xhdGlvbnMKKworTWlsb3NsYXYgVHJtYWMgICAgICAgICAgPG1pdHJAdm9sbnkuY3o+CisgICAgICAgICogQ3plY2ggdHJhbnNsYXRpb25zCisKK01heGltIFYuIER6aXVtYW5lbmtvICAgIDxtdmRAbXlsaW51eC5jb20udWE+CisgICAgICAgICogVWtyYWluaWFuIHRyYW5zbGF0aW9ucworCitHaXVzZXBwZSBTYWNjbyAgICAgICAgICA8ZXBwZXN1aWdAZGViaWFuLm9yZz4KKyAgICAgICAgKiBJdGFsaWFuIHRyYW5zbGF0aW9ucworCitHdWlsbGF1bWUgS25pc3BlbCAgICAgICA8a19ndWlsbGF1bWVAbGliZXJ0eXN1cmYuZnI+CisgICAgICAgICogbmVhcmx5IGFsbCBoZnMgYW5kIGhmcysgY29kZSAobGlicGFydGVkL2ZzX2hmcykKKyAgICAgICAgKiBoZnMrIHN1cHBvcnQgZm9yIG1hYyBwYXJ0aXRpb25zIChkaXNrX21hYy5jKQorICAgICAgICAqIHN5bmNfZmFzdCBjb2RlIChsaW51eC5jIGdudS5jIGdlb20uW2NoXSBkZXZpY2UuW2NoXSApCisgICAgICAgICogdmFyaW91cyBmaXhlcyAocGFydGVkLmMgdWkuYyBmaWxlc3lzLmMgZGlza19kb3MuYyBkaXNrLmMKKyAgICAgICAgZG9jL3BhcnRlZC50ZXhpIGRvYy9BUEkgZGlza19ncHQuYyBkaXNrX21hYy5jIHVuaXQuYyBmc19mYXQvdHJhdmVyc2UuYykKKworQ2hyaXMgTHVtZW5zICAgICAgICAgICAgPGNsdW1lbnNAcmVkaGF0LmNvbT4KKyAgICAgICAgKiBpbnRlcmFjdGl2ZSBoZWxwIGZpeGVzIGZvciBmaWxlc3lzdGVtIHR5cGVzCisgICAgICAgICogZ2NjLTQgcGVkYW50aWNpc20gY2xlYW51cHMKKworV2VpLUx1biBDaGFvICAgICAgICAgICAgPGNoYW93ZWlsdW5AcGNtYWlsLmNvbS50dz4KKyAgICAgICAgKiBUYWl3YW5lc2UgZGlhbGVjdCBvZiBDaGluZXNlIChDYW50b25lc2U/KSB0cmFuc2xhdGlvbnMuCisKK1RyYW4gVGhpIEhvYW5nIFF1eWVuICAgIDxiYW5oZGF1eGFuaGhhaWR1b25nQGdtYWlsLmNvbT4KKyAgICAgICAgKiBWaWV0bmFtZXNlIHRyYW5zbGF0aW9ucworCitFZHVhcmRvIE1hZXN0cmkgUmlnaGVzICA8ZWR1YXJkb0B0dGVuZy5jb20uYnI+CisgICAgICAgICogaGlkZGVuIHBhcnRpdGlvbnMgc3VwcG9ydAorICAgICAgICAqIHNldHRpbmcgTVMgUmVzZXJ2ZWQgcGFydGl0aW9ucyB0aHJvdWdoICJzZXQiIGNvbW1hbmQuCisKK0FyaWYgRS4gTnVncm9obyAgICAgICAgIDxhcmlmX2VuZHJvQHlhaG9vLmNvbT4KKyAgICAgICAgKiBJbmRvbmVzaWFuIHRyYW5zbGF0aW9ucworCitJdGhhbWFyIFIuIEFkZW1hICAgICAgICA8aXRoYW1hckB1bmV0Lm5sPgorICAgICAgICAqIEJlT1Mgc3VwcG9ydAorCitEYXZpZCBDYW50cmVsbCAgICAgICAgICA8ZGNhbnRyZWxsQHJlZGhhdC5jb20+CisgICAgICAgICogQWRkZWQgc3VwcG9ydCBmb3IgUHJvbWlzZSBTWDggZGV2aWNlcyAob3JpZ2luYWwgcGF0Y2ggZnJvbSBKZXJlbXkKKyAgICAgICAgICBLYXR6IDxrYXR6akByZWRoYXQuY29tPikKKyAgICAgICAgKiBCcm91Z2h0IElCTS9SZWQgSGF0IERBU0QgcGF0Y2hlcyBmb3J3YXJkIHRvIHBhcnRlZC0xLjcueAorICAgICAgICAgIE9yaWdpbmFsIElCTSBhdXRob3JzOiBWb2xrZXIgU2FtZXNrZSA8c2FtZXNrZUBkZS5pYm0uY29tPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3JzdCBIdW1tZWwgPEhvcnN0Lkh1bW1lbEBkZS5pYm0uY29tPgorICAgICAgICAgIE9yaWdpbmFsIFJlZCBIYXQgYXV0aG9yczogUGhpbCBLbmlyc2NoIDxwaGlsQHJlZGhhdC5kZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhhcmFsZCBIb3llciA8aGFyYWxkQHJlZGhhdC5kZT4KKyAgICAgICAgKiBQcmV2ZW50IFNJR0ZQRSB3aGVuIEZBVCBzZWN0b3Igc2l6ZSBpcyAwCisgICAgICAgICogQWRkIHZpcnR1YWwgREFTRCAoVklPREFTRCkgb24gaVNlcmllcyBzdXBwb3J0CisgICAgICAgICogVXNlIE9fRElSRUNUIEkvTyB0byBwcmV2ZW50IGZpcnN0IHBhcnRpdGlvbiBjb3JydXB0aW9uIG9uIEdQVCBkaXNrcworICAgICAgICAqIFByZXZlbnQgc2VjdG9yIHJlYWRpbmcgZXhjZXB0aW9ucyBmcm9tIHBlZF9nZW9tZXRyeV9jaGVjaygpIG9uIE1hYworICAgICAgICAgIGRpc2tsYWJlbHMuCisgICAgICAgICogVmFyaW91cyBidWcgZml4ZXMgYW5kIG90aGVyIHRoaW5ncy4KKworUGV0ZXIgSm9uZXMgICAgICAgICAgICAgPHBqb25lc0ByZWRoYXQuY29tPgorICAgICAgICAqIEFkZCBwZWRfZXhjZXB0aW9uX2dldF9oYW5kbGVyKCkKKyAgICAgICAgKiAvZGV2L21hcHBlciByZWFkL3dyaXRlIHN1cHBvcnQgb24gTGludXggKHZpYSBsaWJkZXZtYXBwZXIpCisKK0RhcnJlbiBMYXZlbmRlciAgICAgICAgIDxkbDFAaHBwaW5lOTkuZ2JyLmhwLmNvbT4KKyAgICAgICAgKiBGaXggU0lHU0VHViBpbiBwYXJ0ZWQgMS42LjE5IGFuZCBhc3NlcnRpb24gZXJyb3IgaW4gMS43LjAKKyAgICAgICAgKiBBZGQgc3VwcG9ydCBmb3IgTFVOL2RldmljZSByZXNpemUgZGV0ZWN0aW9uIGFuZCBvcHRpb24gR1BUCisgICAgICAgICAgaGVhZGVyIGNvcnJ1cHRpb24KKyAgICAgICAgKiBGaXhlZCBvZmYtYnktb25lIGVycm9yIGluIEdQVCBoZWFkZXIgdGhhdCBhbGxvd2VkIGZvciBvdmVybGFwCisgICAgICAgICAgYmV0d2VlbiBMREFzIG9mIExhc3RVc2FibGVMQkEgYW5kIFBhcnRpdGlvbkVudHJ5TEJBIGluIGJhY2t1cCBHUFQKKworT2xhZiBIZXJpbmcgICAgICAgICAgICAgPG9saEBzdXNlLmRlPgorICAgICAgICAqIEZpeGVzIGZvciBNYWNpbnRvc2ggZGlzayBsYWJlbCBjb2RlCisKK0RlYmFyc2hpIFJheSAgICAgICAgICAgIDxyaXNoaUBnbnUub3JnPgorICAgICAgICAqIERpc3BsYXkgZGlzayBtb2RlbCBhbmQgdHJhbnNwb3J0IHR5cGUgaW4gcGFydGVkKDgpLgorICAgICAgICAqICctLWxpc3QvLWwnIGNvbW1hbmQgbGluZSBzd2l0Y2guCisgICAgICAgICogSW50cm9kdWNlICdwcmludCBkZXZpY2VzJyBhbmQgYWxpYXMgJ3ByaW50IGxpc3QnIHRvICdwcmludCBhbGwnLgorICAgICAgICAqIEFsaWFzICdta3RhYmxlJyB0byAnbWtsYWJlbCcuCisgICAgICAgICogQ29kZSBhbmQgQVBJIGNsZWFuLXVwLCBidWcgZml4ZXMsIGFuZCBvdGhlciBtaXNjZWxsYW5lb3VzIHN0dWZmLgpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L0JVR1MgYi9wYXJ0ZWQtMS44LjcvQlVHUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2QzOTk5Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L0JVR1MKQEAgLTAsMCArMSw3IEBACisKK1BsZWFzZSBzZWUgdGhlIEZBUSAoYXZhaWxhYmxlIG9uIHRoZSB3ZWIgc2l0ZSBhdAoraHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3BhcnRlZC8pIGZvciBjb21tb24gYnVncyBmcm9tIHRoZSBwYXN0CithbmQgaHR0cDovL2FsaW90aC5kZWJpYW4ub3JnL3BhcnRlZC8gZm9yIGEgYnVnIHRyYWNrZXIuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9DT1BZSU5HIGIvcGFydGVkLTEuOC43L0NPUFlJTkcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzkxMjEwOQotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9DT1BZSU5HCkBAIC0wLDAgKzEsMzQwIEBACisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKworIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgICAgICAgICAgICAgICAgICAgICAgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworCQkJICAgIFByZWFtYmxlCisKKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKK3NvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bwordXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQordGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCit5b3VyIHByb2dyYW1zLCB0b28uCisKKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQoraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgordGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0CitpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAoraW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCisgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKK2FueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4KK1RoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91CitkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgorZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0Cit5b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQorc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgorcmlnaHRzLgorCisgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQKKygyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCitkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorCisgIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCit0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCit3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbwordGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKK2F1dGhvcnMnIHJlcHV0YXRpb25zLgorCisgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlCitwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlCitwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCitwcm9ncmFtIHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkKK3BhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCisKKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKK21vZGlmaWNhdGlvbiBmb2xsb3cuCisMCisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCitlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgordGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCitpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncworc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91Citjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCitjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCitub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CithbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCithbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKK3lvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgorb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAorZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCithYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQorICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQorICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKyAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCisgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgorICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCisgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKyAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCisgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCisMCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCitjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCit3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCit0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAordW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCitTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCisgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKworVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55Cithc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQorYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCitvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAoraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorCitJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCithY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CithY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKwwKKyAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCitleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0CitvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKK3ZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4KK0hvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyCit0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAorcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisgIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKK2Rpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwordGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKyAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKK29yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8KK3RoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCityZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCitZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bwordGhpcyBMaWNlbnNlLgorCisgIDcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKK2luZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCitjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCitvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CitleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdAorZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQorbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAorbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieQorYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCit0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCityZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorCitJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKK2FueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8KK2FwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyCitjaXJjdW1zdGFuY2VzLgorCitJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CitwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQorc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQoraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzCitpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKK3Rocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0CitzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCit0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKK2ltcG9zZSB0aGF0IGNob2ljZS4KKworVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCitiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKwwKKyAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQorbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCit0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCitjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKK3RoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCisgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCitvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CitsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCitlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgordGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4KKworICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCitwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCit0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcworbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCisJCQkgICAgTk8gV0FSUkFOVFkKKworICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCitUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCitQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCitJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisMCisJICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCisgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0Cit0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Citjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAordGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorCisKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCitJZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzCit3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorCisgICAgR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSB5ZWFyIG5hbWUgb2YgYXV0aG9yCisgICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLgorICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCisKK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQorcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQorYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBldmVuIGJlCittb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisgIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KK3Byb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5Citjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvQ2hhbmdlTG9nIGIvcGFydGVkLTEuOC43L0NoYW5nZUxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTVjN2E0Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L0NoYW5nZUxvZwpAQCAtMCwwICsxLDI0ODMgQEAKK2NvbW1pdCA2YTliODUwMTRhNzE5M2Q2YmIwOGNjMzc2ZmM4ZWNhNjJkZTcxODA2CitBdXRob3I6IERhdmlkIENhbnRyZWxsIDxkY2FudHJlbEBtb3J0aXNlLmJvc3Rvbi5yZWRoYXQuY29tPgorRGF0ZTogICBXZWQgTWF5IDkgMTY6NDU6MzggMjAwNyAtMDQwMAorCisgICAgUmVtb3ZlZCBjbGVhbi5zaCBzY3JpcHQuICBVc2luZyBnaXQgbm93LCB3ZSBkb24ndCBuZWVkIGl0IGFueW1vcmUgKGdpdCAKK2NsZWFuIC1kIC14KS4KKworY29tbWl0IGNkYTBiOWJmNGFkOTlhOGMwNmE4MzFlMGVmYzQ2YWVlZmRjZmJjNGMKK0F1dGhvcjogRGF2aWQgQ2FudHJlbGwgPGRjYW50cmVsQG1vcnRpc2UuYm9zdG9uLnJlZGhhdC5jb20+CitEYXRlOiAgIFdlZCBNYXkgOSAxNjo0MTozMCAyMDA3IC0wNDAwCisKKyAgICBVcGRhdGVkIE5FV1MgZmlsZSBmb3IgMS44LjcuCisKK2NvbW1pdCA1ZGFlMDQwODAwYjI4NjIyODBhM2E0YjY1YmMzY2JiZTAxMzUwY2FjCitBdXRob3I6IERhdmlkIENhbnRyZWxsIDxkY2FudHJlbEBtb3J0aXNlLmJvc3Rvbi5yZWRoYXQuY29tPgorRGF0ZTogICBXZWQgTWF5IDkgMTU6MTU6NDcgMjAwNyAtMDQwMAorCisgICAgVXNlIGdudWxpYiB4bWFsbG9jKCkgYW5kIHhyZWFsbG9jKCkuCisKK2NvbW1pdCA3NzRiNTgzOWMwNDE3M2VjY2ViZWU5MDViM2QzZmMwOGQ0NjRiZjRlCitBdXRob3I6IERhdmlkIENhbnRyZWxsIDxkY2FudHJlbEBtb3J0aXNlLmJvc3Rvbi5yZWRoYXQuY29tPgorRGF0ZTogICBXZWQgTWF5IDkgMTU6MTQ6MjkgMjAwNyAtMDQwMAorCisgICAgV2hpdGVzcGFjZSBjbGVhbnVwcy4KKworY29tbWl0IGE2NWE2ZWUzMGUxM2NkYjMzNTRhNTFiNjc2ODdiMGFjNmE3MDg5YzcKK0F1dGhvcjogRGF2aWQgQ2FudHJlbGwgPGRjYW50cmVsQG1vcnRpc2UuYm9zdG9uLnJlZGhhdC5jb20+CitEYXRlOiAgIFR1ZSBNYXkgOCAxODo0NDo0NCAyMDA3IC0wNDAwCisKKyAgICBCdW1wIHZlcnNpb24gdG8gMS44LjcuCisKK2NvbW1pdCA5ZTVlNTVjN2E3ZjJiZTRlYzgxOWQwOGI5OTAyM2QyMGQxOGYzNThhCitBdXRob3I6IERhdmlkIENhbnRyZWxsIDxkY2FudHJlbEBtb3J0aXNlLmJvc3Rvbi5yZWRoYXQuY29tPgorRGF0ZTogICBUdWUgTWF5IDggMTg6NDQ6MjMgMjAwNyAtMDQwMAorCisgICAgQmxhbmsgdGhlIE5FV1MgZmlsZSBpbiBwcmVwYXJhdGlvbiBmb3IgMS44LjcuCisKK2NvbW1pdCBlNzdiYjBmMGZlMjZjNjk0ZTE3ODY3NDJhYzI0ZWZhZDhiYzhlNmVmCitBdXRob3I6IE90YXZpbyBTYWx2YWRvciA8b3RhdmlvQG9zc3lzdGVtcy5jb20uYnI+CitEYXRlOiAgIFdlZCBNYXkgOSAxNjowMzozOSAyMDA3IC0wMzAwCisKKyAgICBbcGFydGVkXSBGaXggc2NyaXB0IG1vZGUgc3VwcG9ydCBvbiBta2ZzIGNvbW1hbmRsaW5lIGNvbW1hbmQKKyAgICAKKyAgICBQYXJ0ZWQgd2FzIGxhY2tpbmcgc3VwcG9ydCB0byBzY3JpcHQgbW9kZSBvbiBkb19ta2ZzIG1ldGhvZCBoZW5jZQorICAgIGFsd2F5cyBmYWlsaW5nLgorICAgIAorICAgIE5vdGU6IHRlc3RzL3QyMDAwLW1rZnMuc2ggd2FzIGNyZWF0ZWQgdG8gYXZvaWQgaXQgdG8gaGFwcGVuIGFnYWluCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW9Ab3NzeXN0ZW1zLmNvbS5icj4KKyAgICAoY2hlcnJ5IHBpY2tlZCBmcm9tIGNvbW1pdCAyMGZkMTdjYTcyNWIwNzA1ZTQ2MmQ1OTYwNDk1MWFkN2VhMzQ0OTdjKQorCitjb21taXQgYWNjMjg4NjRiYjg1OGJjZGQ0NzZmYWNkNGJkOWEwZjc5YzFjZDY4MAorQXV0aG9yOiBEZWJhcnNoaSBSYXkgPHJpc2hpQGdudS5vcmc+CitEYXRlOiAgIFR1ZSBNYXkgOCAyMzowNToyMyAyMDA3ICswNTMwCisKKyAgICBQcmV2ZW50aW5nIGNvbXBpbGF0aW9uIG9mIERBU0QgY29kZSBvbiBHTlUgSHVyZCBzeXN0ZW1zIHRocm91Z2ggdGhlIHVzZSBvZiAKK0FDX0NPTVBJTEVfSUZFTFNFIGFuZCBBTV9DT05ESVRJT05BTCwgaW5zdGVhZCBvZiAjaWZkZWYuCisgICAgKGNoZXJyeSBwaWNrZWQgZnJvbSBjb21taXQgMmI0ZmE2YWY2NzM2ZWUyNTI2ZGE3ZjRhZTZhMTczYjI5YzMyMTgyNikKKworY29tbWl0IGZhY2EzY2IyNzM4ZDEyZjdlMDM0NmRmMDNhZDFlZTE2MmU5ODg0MzYKK0F1dGhvcjogSmltIE1leWVyaW5nIDxqaW1AbWV5ZXJpbmcubmV0PgorRGF0ZTogICBNb24gTWF5IDcgMTg6NDI6MzggMjAwNyArMDIwMAorCisgICAgUmV3cml0ZSBpbnRlZ3JhdGlvbiB0ZXN0cyB0byB1c2UgYSBuZXcgZnJhbWV3b3JrIChnaXQncykuCisgICAgKiB0ZXN0cy90MTAwMC1ta3BhcnRmcy5zaDogTmV3IGZpbGUuCisgICAgKiB0ZXN0cy90MDAwMC1iYXNpYy5zaDogTmV3IGZpbGUuCisgICAgKiB0ZXN0cy90ZXN0LWxpYi5zaDogTmV3IGZpbGUuICBEZXJpdmVkIGZyb20gZ2l0J3MgdC90ZXN0LWxpYi5zaC4KKyAgICAqIHRlc3RzL2xhbmctZGVmYXVsdCwgdGVzdHMvcHJpdi1jaGVjazogUmVtb3ZlIGZpbGVzLgorICAgICogdGVzdHMvTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGQgdGVzdC1saWIuc2guCisgICAgUmVtb3ZlIGxhbmctZGVmYXVsdCBhbmQgcHJpdi1jaGVjazsgbm8gbG9uZ2VyIHVzZWQuCisgICAgKiB0ZXN0cy9wYXJ0LTAxLCB0ZXN0cy9sYWJlbC0wMTogUmVtb3ZlIGZpbGVzLgorICAgICogdGVzdHMvcGFydC0wMiwgdGVzdHMvbGFiZWwtMDI6IExpa2V3aXNlLgorICAgIChjaGVycnkgcGlja2VkIGZyb20gY29tbWl0IDY4MDMzMjAyNjFjOGFkM2U5ZTk3ZDc3YzQ1NDhjMGIxNTFkNWRlMzQpCisKK2NvbW1pdCBhNmMyZmY4ZWRlMWQ3ZWJhMGQ4ZGE1YmUwMjE4NjcwZDE1ZDA4ZGE3CitBdXRob3I6IEppbSBNZXllcmluZyA8amltQG1leWVyaW5nLm5ldD4KK0RhdGU6ICAgTW9uIE1heSA3IDE2OjUxOjI5IDIwMDcgKzAyMDAKKworICAgIE1ha2UgLS0tcHJldGVuZC1pbnB1dC10dHkgaW5oaWJpdCBvdXRwdXQgd29yZC13cmFwLgorICAgICogcGFydGVkL3VpLmMgKHNjcmVlbl93aWR0aCk6IFVzZSBlZmZlY3RpdmVseS11bmxpbWl0ZWQgc2NyZWVuIHdpZHRoCisgICAgd2l0aCAtLS1wcmV0ZW5kLWlucHV0LXR0eSwganVzdCBhcyBmb3IgJy0tc2NyaXB0JyBtb2RlLgorICAgIChjaGVycnkgcGlja2VkIGZyb20gY29tbWl0IGExNWQ4OWMzYTU1M2Y1Y2YxN2JmODQ0ZDBlOWFlNGExMDg5ZmM2NmYpCisKK2NvbW1pdCBmMmUxZTQ3ZWQyNGQ2ODhhNWM2MTFjOTkzMmU3NWJkNGE2NmMxOGYzCitBdXRob3I6IEppbSBNZXllcmluZyA8amltQG1leWVyaW5nLm5ldD4KK0RhdGU6ICAgTW9uIE1heSA3IDE2OjQ1OjI3IDIwMDcgKzAyMDAKKworICAgIFN1cHByZXNzICJ5b3UgYXJlIG5vdCBzdXBlcnVzZXIuLi4iIHdhcm5pbmcgaW4gc2NyaXB0IG1vZGUuCisgICAgKiBwYXJ0ZWQvcGFydGVkLmMgKF9pbml0KTogRG8gbm90IGVtaXQgdGhpcyB3YXJuaW5nIGluIHNjcmlwdCBtb2RlOgorICAgICJZb3UgYXJlIG5vdCBzdXBlcnVzZXIuICBXYXRjaCBvdXQgZm9yIHBlcm1pc3Npb25zLiIKKyAgICAoY2hlcnJ5IHBpY2tlZCBmcm9tIGNvbW1pdCAwYThiZmRjYTdjOTBhOTM2ZGNmNjg5YmM1NGQ1YjA5OGI4NGRjNjMwKQorCitjb21taXQgOGRmNmU2ZjAzYTY5Yzk3NjI2ZTQ2ZmQxNDFjMTlmYWU2M2JkMjA3ZAorQXV0aG9yOiBKaW0gTWV5ZXJpbmcgPGppbUBtZXllcmluZy5uZXQ+CitEYXRlOiAgIE1vbiBNYXkgNyAxNjozODowMCAyMDA3ICswMjAwCisKKyAgICBBdm9pZCAibWFrZSBkaXN0Y2hlY2siIGZhaWx1cmUsIHdpdGggbmV3ZXIgc3lzdGVtIGhlYWRlcnMuCisgICAgKiBwYXJ0ZWQvcGFydGVkLmM6IEluY2x1ZGUgPGxpbWl0cy5oPiwgZm9yIHVzZSBvZiBDSEFSX01BWC4KKyAgICAoY2hlcnJ5IHBpY2tlZCBmcm9tIGNvbW1pdCA2MDA4ZmY4MTI1ZTJhNDYxMmNlY2UxOGNlYTQ4MDhhODllYjNmOTExKQorCitjb21taXQgY2QzZThjYTdmNWFjZTc4N2I4MTQ2M2M2ZWQ4ODQ2NTFmNjYyOGE0ZAorQXV0aG9yOiBBbmFudCBOYXJheWFuYW4gPGFuYW50QGtpeC5pbj4KK0RhdGU6ICAgRnJpIE1heSA0IDA1OjA5OjUyIDIwMDcgKzA1MzAKKworICAgIFVwZGF0ZWQgRG94eWZpbGUKKyAgICAoY2hlcnJ5IHBpY2tlZCBmcm9tIGNvbW1pdCBjNDBkM2ZkNmZiNDBmNmM5YTUyZGNjYWY4ZGIyYWRjMDExN2MxYWRhKQorCitjb21taXQgNTJiZDg5M2UzYTBmYWNjOGY2YjEzNDUzNGMxYjU3OGM2MTUyYWZhMworQXV0aG9yOiBKaW0gTWV5ZXJpbmcgPGppbUBtZXllcmluZy5uZXQ+CitEYXRlOiAgIFRodSBBcHIgMjYgMjM6MTc6MzIgMjAwNyArMDIwMAorCisgICAgQWRkIGludGVncmF0aW9uIHRlc3RzLCB0aGVuIGFkanVzdCBjb2RlIHNvIHRoYXQgdGhleSBwYXNzLgorICAgIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGhvdyAtLXNjcmlwdCAoLXMpIHdvcmtzLCBhbmQgd2hlbiBkaWFnbm9zdGljcworICAgIGFyZSBkaXNwbGF5ZWQuCisgICAgKiBNYWtlZmlsZS5hbSAoU1VCRElSUyk6IEFkZCB0ZXN0cy4KKyAgICAqIGNvbmZpZ3VyZS5hYyAoQUNfT1VUUFVUKTogQWRkIHRlc3RzL01ha2VmaWxlLgorICAgICogdGVzdHMvTWFrZWZpbGUuYW06IE5ldyBmaWxlLgorICAgICogdGVzdHMvcGFydC0wMSwgdGVzdHMvbGFiZWwtMDE6IE5ldyBmaWxlcy4KKyAgICAqIHRlc3RzL3BhcnQtMDIsIHRlc3RzL2xhYmVsLTAyOiBOZXcgZmlsZXMuCisgICAgKiBwYXJ0ZWQvcGFydGVkLmMgKGVudW0pIFtQUkVURU5EX0lOUFVUX1RUWV06IERlZmluZS4KKyAgICBTdXBwb3J0IGEgbmV3LCB1bmRvY3VtZW50ZWQgb3B0aW9uOiAtLS1wcmV0ZW5kLWlucHV0LXR0eS4KKyAgICBJdCBpcyBpbnRlbmRlZCBzb2xlbHkgZm9yIHRlc3RpbmcuICBUaGUgbGVhZGluZyAnLS0tJyBlbnN1cmVzCisgICAgdGhhdCBpdCB3aWxsIG5ldmVyIGNvbmZsaWN0IHdpdGggYSAicmVndWxhciIgbG9uZyBvcHRpb24uCisgICAgKGRvX21rcGFydGZzKTogUHJvbXB0IG9ubHkgd2hlbiBub3QgaW4gc2NyaXB0IG1vZGUuCisgICAgQ2FsbCBwZWRfZXhjZXB0aW9uX2xlYXZlX2FsbCgpIHRvIGRlY3JlbWVudCBnbG9iYWwgY291bnRlci4KKyAgICBXaXRob3V0IHRoaXMsIHRoZSB1c2Ugb2YgcGFydGVkIGluIHRlc3RzL3BhcnQtMDEgd291bGQgc3RpbGwgZmFpbCwKKyAgICBidXQgd291bGQgbm90IGlzc3VlIHRoZSBkaWFnbm9zdGljIGV4cGxhaW5pbmcgd2h5LgorICAgICogcGFydGVkL3VpLmggKHByZXRlbmRfaW5wdXRfdHR5KTogRGVjbGFyZSBuZXcgZ2xvYmFsLgorICAgICogcGFydGVkL3VpLmMgKGV4Y2VwdGlvbl9oYW5kbGVyKTogTGV0IHRoZSBuZXcgInByZXRlbmRfaW5wdXRfdHR5IgorICAgIG9wdGlvbiBvdmVycmlkZSAiIWlzYXR0eSAoMCkiLgorICAgIChpbml0X3VpKTogRG9uJ3Qgc2V0IG9wdF9zY3JpcHRfbW9kZS4KKyAgICAqIHRlc3RzL2xhbmctZGVmYXVsdCwgdGVzdHMvcHJpdi1jaGVjazogTmV3IGZpbGVzLgorICAgIChjaGVycnkgcGlja2VkIGZyb20gY29tbWl0IGIyMzVmOGE0ODdkODFiNDcwM2U3NmUwOGFkZDNjODljZjEwOWEwNmYpCisKK2NvbW1pdCAyMmUxMmMyMjdlZDQxZWUwNDk4NzcxNGRhYjlhNmRiOTVjYjhhMzliCitBdXRob3I6IERhdmlkIENhbnRyZWxsIDxkY2FudHJlbEBtb3J0aXNlLmJvc3Rvbi5yZWRoYXQuY29tPgorRGF0ZTogICBNb24gQXByIDIzIDE2OjQxOjAyIDIwMDcgLTA0MDAKKworICAgIFJldmVydCAiUmVtb3ZlIHVudXNlZCBsYWJlbC4iCisgICAgCisgICAgVGhpcyByZXZlcnRzIGNvbW1pdCBiZmQ5YTZkOGI2MzIyZDg3MDY1MGIwZTkyYmQ5MzYwMzVhYjI4ZTc2LgorICAgIChjaGVycnkgcGlja2VkIGZyb20gY29tbWl0IDVhYzhlMjFhODZlY2Y4YzllNjM5ZTRhZWFkYWQ4Yjc3ODA1Mjg0MWMpCisKK2NvbW1pdCA5YjA0YjE4MWQ2MTQ3YWY4OWExNjc4ZWJjYzVhN2M1Mjg5OGYzNWVkCitBdXRob3I6IERhdmlkIENhbnRyZWxsIDxkY2FudHJlbEBtb3J0aXNlLmJvc3Rvbi5yZWRoYXQuY29tPgorRGF0ZTogICBNb24gQXByIDIzIDE2OjAyOjEzIDIwMDcgLTA0MDAKKworICAgIEZpeCBwcmltYXJ5IHBhcnRpdGlvbiBjeWxpbmRlciBhbGlnbm1lbnQgZXJyb3IgZm9yIERPUyBkaXNrIGxhYmVscy4KKworY29tbWl0IDZhYTkzMTcwMTBiMDY5NGQyYzViMWRjODVjZWM2ZDhlNjM2NTkyMzYKK0F1dGhvcjogRGF2aWQgQ2FudHJlbGwgPGRjYW50cmVsQG1vcnRpc2UuYm9zdG9uLnJlZGhhdC5jb20+CitEYXRlOiAgIE1vbiBBcHIgMjMgMTY6MDA6NTQgMjAwNyAtMDQwMAorCisgICAgRml4IG9mZi1ieS1vbmUgYnVnIGluIHBhcnRlZCB3aGVuIGRpc3BsYXlpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGRpc2sgCitsYWJlbCAodGhlIGRpc2sgc2l6ZSwgc3BlY2lmaWNhbGx5KS4KKworY29tbWl0IDViYTBhZjIyNDc0NTBiZDRjMmJjYTUzYzM5NzFmMDQzZTM1NjNlMDgKK0F1dGhvcjogRGF2aWQgQ2FudHJlbGwgPGRjYW50cmVsQG1vcnRpc2UuYm9zdG9uLnJlZGhhdC5jb20+CitEYXRlOiAgIE1vbiBBcHIgMjMgMTU6NTg6MDMgMjAwNyAtMDQwMAorCisgICAgRG8gbm90IHRyYW5zbGF0ZSBwYXJ0aXRpb24gbmFtZXMgaW4gJ3BhcnRlZCBwcmludCcgY29tbWFuZC4gVGhpcyBjYXVzZXMgCitwcm9ibGVtcyBmb3Igbm9uLUxhdGluLWJhc2VkIGNoYXJhY3RlciBzZXRzLiBBbHNvLCB3ZSBkb24ndCB3YW50IHRvIHRyYW5zbGF0ZSAKK3RoZSBwYXJ0aXRpb24gbmFtZSBoZXJlIGFzIHdlIGFyZSBqdXN0IHNob3dpbmcgd2hhdCBpcyBpbiB0aGUgZGlza2xhYmVsLCAKK3RyYW5zbGF0aW5nIGl0IGRpc3RvcnRzIHdoYXQgdGhlIHZhbHVlIGlzLgorICAgIAorICAgIEFsc28gYWRkZWQgc29tZSBtYWxsb2MgY2hlY2tzIGluIHRhYmxlLmMuCisKK2NvbW1pdCBlMzFmNjAwZmVhMTFiYTI5ZjQ4ZDEyNTAzMmRhZWE1MDBhNjNhY2MyCitBdXRob3I6IERhdmlkIENhbnRyZWxsIDxkY2FudHJlbEBtb3J0aXNlLmJvc3Rvbi5yZWRoYXQuY29tPgorRGF0ZTogICBNb24gQXByIDIzIDE1OjUzOjQ4IDIwMDcgLTA0MDAKKworICAgIFJlbW92ZSB1bnVzZWQgbGFiZWwuCisKK2NvbW1pdCBhNjk5ZGE2MzdiZDZiNWE2ODhiNzlhZmE4ZjQxZGQ0OWIyYTk0NTE3CitBdXRob3I6IERlYmFyc2hpIFJheSA8cmlzaGlAZ251Lm9yZz4KK0RhdGU6ICAgVHVlIE1heSAxIDEwOjAxOjUwIDIwMDcgKzA1MzAKKworICAgIFt0ZXN0c10gU2VwYXJhdGUgYW5kIGltcHJvdmVkIHRlc3QgZm9yIHJlYWRpbmcgb2YgZGlzayBsYWJlbHMuCisgICAgKGNoZXJyeSBwaWNrZWQgZnJvbSBjb21taXQgZTczNjY0OGMyNDM3MmZkNzUzMmZlZjdjNTY4YTU0MjQzOTViM2E3YSkKKworY29tbWl0IGE2YmNhYjQ0NmU4OTU3Yjc3MWVmZDAwZWM1MmIyODhjMDRhM2JmYTQKK0F1dGhvcjogTWF0dGhldyBIYXJyaXMgPG1oYXJyaXNAY29ydXNjYW50Lihub25lKT4KK0RhdGU6ICAgVHVlIEFwciAyNCAwODoxMzo0MSAyMDA3IC0wNzAwCisKKyAgICBGaXggZW5kaWFubmVzcyBidWdzCisgICAgKGNoZXJyeSBwaWNrZWQgZnJvbSBjb21taXQgZWNlYTBjOTg1NzgxM2JlYWUxYzkxYjBhZmEzOWMxNzYzNGI5N2E5NSkKKworY29tbWl0IDBhNTg1OWVlZGE0OTkwOWFlNTRhNjUxMDk0N2MxNjkzNGI4NmVmOGQKK0F1dGhvcjogSmltIE1leWVyaW5nIDxqaW1AbWV5ZXJpbmcubmV0PgorRGF0ZTogICBUaHUgQXByIDI2IDIxOjU0OjUxIDIwMDcgKzAyMDAKKworICAgIFRlbXBvcmFyaWx5IGRpc2FibGUgdGhlIGNsb25lLWR2aC1sYWJlbCB0ZXN0LgorICAgICogbGlicGFydGVkL3Rlc3RzL2xhYmVsLmMgKHRlc3RfY2xvbmVfbGFiZWwpOgorICAgIChjaGVycnkgcGlja2VkIGZyb20gY29tbWl0IGVmOGQxM2ViMDA1M2U1ZTBiODdmZWEwMzdhMTUwYjFlZWYzYTMzNzIpCisKK2NvbW1pdCA2ZjA0ZjMxNzMwMWI1MDUwNzlmNDkyZDU3OTc3ZjQ2YzFlNzQ1ZWQyCitBdXRob3I6IERlYmFyc2hpIFJheSA8cmlzaGlAZ251Lm9yZz4KK0RhdGU6ICAgU2F0IEFwciAyMSAwMDo1OToxNSAyMDA3ICswNTMwCisKKyAgICBbdGVzdHNdIE5ldyB0ZXN0IGZvciBwcm9iaW5nIG9mIGRpc2sgbGFiZWxzLgorICAgIChjaGVycnkgcGlja2VkIGZyb20gY29tbWl0IGI0MGE3YTA5NzYyODBmYzg2MWQ1YWZhNzU2M2IyOGY1NjE4MThiNTUpCisKK2NvbW1pdCAxY2JhNWEyZjFlYmNhZTc5ZDcxMGY2MDFiNGJiMTMwNmQ2ZmE1NTE5CitBdXRob3I6IEppbSBNZXllcmluZyA8amltQG1leWVyaW5nLm5ldD4KK0RhdGU6ICAgU2F0IEFwciAyMSAxODo1OTo0MyAyMDA3ICswMjAwCisKKyAgICBbUEFUQ0hdIEF2b2lkIHdhcm5pbmcgZnJvbSAtV2Zvcm1hdC1zZWN1cml0eTsgdHdlYWsgZXJyb3IgZGlhZ25vc3RpYy4KKyAgICAKKyAgICAqIHBhcnRlZC9wYXJ0ZWQuYyAoX3BhcnNlX29wdGlvbnMpOiBVcG9uIGZhaWx1cmUsIG91dHB1dCBkaWFnbm9zdGljCisgICAgdG8gc3RkZXJyLCBub3Qgc3Rkb3V0LiAgVXNlICJwcm9ncmFtX25hbWUiIHZhbHVlLCBub3QgbGl0ZXJhbCAicGFydGVkIi4KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBKaW0gTWV5ZXJpbmcgPGppbUBtZXllcmluZy5uZXQ+CisgICAgKGNoZXJyeSBwaWNrZWQgZnJvbSBjb21taXQgM2I5MzkyNWY3NjdlZTE3Mjc4OTg2NzRhNmUzNTdiNzU3MjE1N2RkOCkKKworY29tbWl0IDQyNjNjM2ExNWYzOWQwZGNhMDFiMzVkNjcxYjQ0YzYwZjQxMTBkYjUKK0F1dGhvcjogT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW9Ab3NzeXN0ZW1zLmNvbS5icj4KK0RhdGU6ICAgRnJpIEFwciAyMCAwMzo1MzoxOCAyMDA3IC0wMzAwCisKKyAgICBbdGVzdHNdIFNpbXBsaWZ5IHRlc3RfY2xvbmVfbGFiZWwgcmVtb3ZpbmcgdGhlIGxhYmVsIHJlYWRpbmcgdGVzdAorICAgIAorICAgIFNpbmNlIHRoZSB0ZXN0X2NyZWF0ZV9sYWJlbCBhbHJlYWR5IHRlc3RzIHRoZSBsYWJlbCByZWFkaW5nIHdlCisgICAgc2hvdWxkbid0IHJlZG8gaXQuIEl0J3MgYWx3YXlzIGJldHRlciB0byBoYXZlIHNpbXBsZSB0ZXN0cyBzbyBpcyBtdWNoCisgICAgZWFzaWVyIHRvIGZpbmQgdGhlIGJ1Z3MuCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW9Ab3NzeXN0ZW1zLmNvbS5icj4KKyAgICAoY2hlcnJ5IHBpY2tlZCBmcm9tIGNvbW1pdCA1NjUwNjk1YTlhYmY2M2MzOTMwYjBmNWY0NDM1MmI0ZTJhNTQ2OWRjKQorCitjb21taXQgOWIxYWQxZGMxM2Y1ZjQyN2MwM2I3N2QwN2EwMjRlODMwYzk3N2ExNworQXV0aG9yOiBPdGF2aW8gU2FsdmFkb3IgPG90YXZpb0Bvc3N5c3RlbXMuY29tLmJyPgorRGF0ZTogICBGcmkgQXByIDIwIDAwOjM3OjA3IDIwMDcgLTAzMDAKKworICAgIFt0ZXN0c10gVHJpdmlhbCBjb2Rpbmcgc3R5bGUgZml4ZXMgYXJvdW5kIHRoZSB0ZXN0cyBjb2RlCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW9Ab3NzeXN0ZW1zLmNvbS5icj4KKyAgICAoY2hlcnJ5IHBpY2tlZCBmcm9tIGNvbW1pdCA1YzQzOGFlZTliNmZjNjk5YjVlNGJiOWFkY2JlMmVkMTNjODdmMjAyKQorCitjb21taXQgOTM2NWM4M2NmNTdjYTI4N2E0ODFmNDRiOWExZTkwNzk5NGJiOWI0MQorQXV0aG9yOiBEZWJhcnNoaSBSYXkgPHJpc2hpQGdudS5vcmc+CitEYXRlOiAgIEZyaSBBcHIgMjAgMDU6NDk6NDQgMjAwNyArMDUzMAorCisgICAgW3Rlc3RzXSBOZXcgdGVzdCBmb3IgY2xvbmluZyBvZiBkaXNrIGxhYmVscy4KKyAgICAoY2hlcnJ5IHBpY2tlZCBmcm9tIGNvbW1pdCBhNDZjYzc1NzhmZDJmZjQ3OGI2ZTgzODUwZTA2YjczZmU0MjkxMWIxKQorCitjb21taXQgYmMxOWM1NmFhZDg2ZDRlYjdiOGJiMjAwYjM4ZWU3N2ZmOGU0YmMyOQorQXV0aG9yOiBPdGF2aW8gU2FsdmFkb3IgPG90YXZpb0Bvc3N5c3RlbXMuY29tLmJyPgorRGF0ZTogICBUaHUgQXByIDE5IDIxOjMwOjUzIDIwMDcgLTAzMDAKKworICAgIFt0ZXN0c10gQWRkIF90ZXN0X2V4Y2VwdGlvbl9oYW5kbGVyIHRvIGZhaWwgZXZlcnkgdGltZSBhbiBleGNlcHRpb24gaXMgCityYWlzZWQKKyAgICAKKyAgICBTb21ldGltZXMgcGFydHMgb2YgY29kZSByYWlzZXMgZXhjZXB0aW9ucyBhbmQgdGhpcyBzaG91bGRuJ3QgaGFwcGVuIG9uCisgICAgdGVzdHMuIFRvIGVuc3VyZSB3ZSBjYXRjaCB0aGVtIGEgc3BlY2lmaWMgZXhjZXB0aW9uIGhhbmRsZXIgaGFzIGJlZW4KKyAgICBpbXBsZW1lbnRlZC4KKyAgICAKKyAgICBUaGUgaGFuZGxlciB1c2FnZSBpcyB2ZXJ5IGVhc3kuIFlvdSBqdXN0IG5lZWQgdG8gcHV0IHRoZSBmb2xsb3dpbmcKKyAgICBjb2RlIGF0IHRlc3RzdWl0ZSBtYWluIG1ldGhvZDoKKyAgICAKKyAgICAuLi4KKyAgICAgICAgICAgIC8qIEZhaWwgd2hlbiBhbiBleGNlcHRpb24gaXMgcmFpc2VkICovCisgICAgICAgICAgICBwZWRfZXhjZXB0aW9uX3NldF9oYW5kbGVyIChfdGVzdF9leGNlcHRpb25faGFuZGxlcik7CisgICAgLi4uCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW9Ab3NzeXN0ZW1zLmNvbS5icj4KKyAgICAoY2hlcnJ5IHBpY2tlZCBmcm9tIGNvbW1pdCBjYmEzYTY0ZmIxNzQ0ZjU0NWMzNzM1OTRjODc5NWE0ZGEzMDU1OGM0KQorCitjb21taXQgZGZmODQ3Njc0ZmU0OGEwOGRjOWFiNWM2NzkzZDNkZDRjOGRhM2E4ZQorQXV0aG9yOiBEZWJhcnNoaSBSYXkgPHJpc2hpQGdudS5vcmc+CitEYXRlOiAgIEZyaSBBcHIgMjAgMDE6MDA6NTAgMjAwNyArMDUzMAorCisgICAgW3Rlc3RzXSBGaXggc3BhY2luZyBhcm91bmQgYnJhY2tldHMgYW5kIGFzdGVyaXNrcy4KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBPdGF2aW8gU2FsdmFkb3IgPG90YXZpb0Bvc3N5c3RlbXMuY29tLmJyPgorICAgIChjaGVycnkgcGlja2VkIGZyb20gY29tbWl0IGExYWU4ODA5ZDExMTc5NWRjYzk3N2U2OTM2NjhiY2ZhZjc3NmZiYmUpCisKK2NvbW1pdCAzMTlhODg2Y2M5N2ZjMWFhMTEwNTRkODM5YTBkYTgwYzNlZTE3NzdmCitBdXRob3I6IEJlbm5vIFNjaHVsZW5iZXJnIDxiZW5zYmVyZ0BqdXN0ZW1haWwubmV0PgorRGF0ZTogICBNb24gQXByIDkgMjM6MzQ6MTUgMjAwNyArMDIwMAorCisgICAgSGFuZGxlIG9wdGlvbnMgaW5kZXBlbmRlbnQgb2YgdGhlaXIgb3JkZXIuCisgICAgCisgICAgQWJvcnQgb24gYW55IGludmFsaWQgb3B0aW9uLCBhbmQgaGFuZGxlIC12IGFuZCAtaCBmaXJzdC4KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBPdGF2aW8gU2FsdmFkb3IgPG90YXZpb0Bvc3N5c3RlbXMuY29tLmJyPgorICAgIChjaGVycnkgcGlja2VkIGZyb20gY29tbWl0IGI2MGUyYTBjYjI0MjcyY2M5ZDVhZjA0M2FiNjlhYTJmYmE1NDZmOTMpCisKK2NvbW1pdCA1NTA5OGQ5ZDIzMmNlN2IxNTI4MGFmZDVjYjVlOTA2NzNmNTYxNWExCitBdXRob3I6IE90YXZpbyBTYWx2YWRvciA8b3RhdmlvQG9zc3lzdGVtcy5jb20uYnI+CitEYXRlOiAgIFdlZCBBcHIgMTggMTk6Mzc6MTEgMjAwNyAtMDMwMAorCisgICAgW3Rlc3RzXSBTbWFsbCByZWZhY3RvcmluZyBvbiB0ZXN0X2NyZWF0ZV9sYWJlbAorICAgIAorICAgICAtIERlc3Ryb3kgdGhlIHRlbXBvcmFyeSBkZXZpY2Ugb25jZSB0aGUgdGVzdCBoYXMgYmVlbiBmaW5pc2hlZCwKKyAgICAgLSBVc2UgdGhlIF9pbXBsZW1lbnRlZF9kaXNrX2xhYmVsIGFuZCBfY3JlYXRlX2Rpc2tfbGFiZWwgbWV0aG9kcworICAgICAgIHRvIGF2b2lkIGNvZGUgZHVwbGljYXRpb24uCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW9Ab3NzeXN0ZW1zLmNvbS5icj4KKyAgICAoY2hlcnJ5IHBpY2tlZCBmcm9tIGNvbW1pdCAwYjNjZGM3NDI1YTNiOGQ2MDk1YzFkMGRkNGUwZDUzODUxYzUyMjM2KQorCitjb21taXQgYmMwMGQzYmU5N2U1Y2E1NWY3MDI4ZTllY2QwNWRlMDdmYzg0MWQ3OQorQXV0aG9yOiBPdGF2aW8gU2FsdmFkb3IgPG90YXZpb0Bvc3N5c3RlbXMuY29tLmJyPgorRGF0ZTogICBXZWQgQXByIDE4IDE5OjM1OjU3IDIwMDcgLTAzMDAKKworICAgIFt0ZXN0c10gSW1wbGVtZW50cyBfaW1wbGVtZW50ZWRfZGlza19sYWJlbCBhbmQgX2NyZWF0ZV9kaXNrX2xhYmVsIG9uIAorY29tbW9uLltoY10KKyAgICAKKyAgICAgLSBfaW1wbGVtZW50ZWRfZGlza19sYWJlbDogcmV0dXJucyAwIHdoZW4gd2UgaGF2ZW4ndCB5ZXQgaW1wbGVtZW50ZWQKKyAgICAgICB0aGlzIHNwZWNpZmljIGxhYmVsIGFuZCAxIG90aGVyd2lzZTsKKyAgICAKKyAgICAgLSBfY3JlYXRlX2Rpc2tfbGFiZWw6IGNyZWF0ZXMgYSBkaXNrIGxhYmVsIG9mIGEgc3BlY2lmaWMgdHlwZSBvbiBhCisgICAgICAgc3BlY2lmaWMgZGV2aWNlOworICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IE90YXZpbyBTYWx2YWRvciA8b3RhdmlvQG9zc3lzdGVtcy5jb20uYnI+CisgICAgKGNoZXJyeSBwaWNrZWQgZnJvbSBjb21taXQgYzcwZWY0NDM5Y2M1ZWE4MGRiOTUwZjQwNGNjZGMyZmVmOTJiZDQ4OCkKKworY29tbWl0IGUyMTc3ZGVlOGIwODM2NTE4YzM1NDkyYWQ5YTg2MDhhMmU2Yzc2YWQKK0F1dGhvcjogT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW9Ab3NzeXN0ZW1zLmNvbS5icj4KK0RhdGU6ICAgV2VkIEFwciAxOCAxNzowNTowNSAyMDA3IC0wMzAwCisKKyAgICBbdGVzdHNdIEVuc3VyZSB0aGF0IHdlJ3JlIGFibGUgdG8gcmVhZCB0aGUganVzdCBjcmVhdGVkIGRpc2sgbGFiZWwKKyAgICAKKyAgICBUbyBlbnN1cmUgd2UncmUgYWJsZSB0byByZWFkIHRoZSBqdXN0IGNyZWF0ZWQgZGlzayBsYWJlbCB3ZSBpbnRyb2R1Y2VkIGEgCitjYWxsCisgICAgcGVkX2Rpc2tfbmV3IHVzaW5nIHRoZSBzYW1lIGxvb3BiYWNrLiBUaGlzIGNvdWxkIGRldGVjdCBiYWQgbGFiZWwgY3JlYXRpbmcgCitvcgorICAgIHByb2JpbmcgZGV0ZWN0aW9uZyBtaXN0YWtlcy4KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBPdGF2aW8gU2FsdmFkb3IgPG90YXZpb0Bvc3N5c3RlbXMuY29tLmJyPgorICAgIChjaGVycnkgcGlja2VkIGZyb20gY29tbWl0IGFkNTBhZmY3OWY1MDYyZDU0M2IyMWU5OGQyZGU5MzhiZWMyNDdhMjYpCisKK2NvbW1pdCAyY2JkYmEyNWRlNDAyZjQ4OTU5YTQ2OGI1ODRlODNkY2M3N2FlMzMxCitBdXRob3I6IERlYmFyc2hpIFJheSA8cmlzaGlAZ251Lm9yZz4KK0RhdGU6ICAgVHVlIEFwciAxNyAwMDowNDo1NCAyMDA3ICswNTMwCisKKyAgICBTaG93IHRoZSB1cGRhdGUgL2V0Yy9mc3RhYiBtZXNzYWdlIG9ubHkgd2hlbiB0aGVyZSBoYXMgYmVlbiBhIGNoYW5nZSB0byB0aGUgCitkaXNrLiBUaGUgbWVzc2FnZSBpcyBub3cgc2hvcnRlciBhbmQgbW9yZSBkaXJlY3QuCisgICAgKGNoZXJyeSBwaWNrZWQgZnJvbSBjb21taXQgZmM1ZTcwMzBjMmI2NzIwNTRjNzczMmMzNmQwMDlkYzMwMmZmZTdhYSkKKworY29tbWl0IGIxMTE3ZmRiZTRjY2UxYWIxMmZiMmRhODc1ZTM1MjhiNzJiNGI5OWYKK0F1dGhvcjogRGViYXJzaGkgUmF5IDxyaXNoaUBnbnUub3JnPgorRGF0ZTogICBUdWUgQXByIDE3IDIxOjA4OjE0IDIwMDcgKzA1MzAKKworICAgIEluZGVudGF0aW9uIGZpeGVzIGluIGxpYnBhcnRlZC90ZXN0cy8uCisgICAgKGNoZXJyeSBwaWNrZWQgZnJvbSBjb21taXQgNWI0YmZkZTAxNWQ3ZTFjM2IwMWIzNTJkOGVhZmUwMDNlMWNkODQ3NCkKKworY29tbWl0IDgwYjE1NzJiZDFlZjNiNzA0ZTdmYThkNjdkMWU3NWY3NjhjYjUxNTYKK0F1dGhvcjogc29sc1RpQ2UgZCdIaXZlciA8c29sc3RpY2VkLmhpdmVyQGxhcG9zdGUubmV0PgorRGF0ZTogICBGcmkgQXByIDYgMDA6MDE6NDYgMjAwNyArMDIwMAorCisgICAgY2hhbmdlIHRoZSB2YXJpYWJsZSBuYW1lZCBzdGFydCB0byBvZmZzZXQgdG8gYmUgY29uc2lzdGVudCB3aXRoIHRoZSBkb2MKKyAgICAoY2hlcnJ5IHBpY2tlZCBmcm9tIGNvbW1pdCBjYzhmMDg2Y2RlMGM3NTk0NWU1ZGRkZmVmNjdkZTAyYmY0NWFjOGI4KQorCitjb21taXQgNWFhODUxYjg5YmNiNjQ5MTQ5OTUyYmU1MGZlMmJmYmZkZjI1Y2ExMQorQXV0aG9yOiBzb2xzVGlDZSBkJ0hpdmVyIDxzb2xzdGljZS5kaGl2ZXJAbGFwb3N0ZS5uZXQ+CitEYXRlOiAgIFRodSBBcHIgNSAxNDozOTo0NSAyMDA3ICswMjAwCisKKyAgICByZW1vdmUgYW55IHRyYWNlIG9mIFBFRF9QQVJUSVRJT05fUFJJTUFSWSB3aGljaCB3YXMgZGVwcmVjYXRlZCBhIGxvbmcgdGltZSAKK2FnbyB0byB1c2UgUEVEX1BBUlRJVElPTl9OT1JNQUwKKyAgICAoY2hlcnJ5IHBpY2tlZCBmcm9tIGNvbW1pdCBmOWFkM2YwZDExNGRlZGM3MDZmZmM0YmQ3ZmRjN2NlMTM3NjE3NjZiKQorCitjb21taXQgNDNiYjE3ZWE3MzA2NDAyZWRhMDM4NzI4NDBlYmM2OWI2MDA0ZDI4OQorQXV0aG9yOiBCZW5ubyBTY2h1bGVuYmVyZyA8YmVuc2JlcmdAanVzdGVtYWlsLm5ldD4KK0RhdGU6ICAgVGh1IE1hciAyOSAxOToyODoyNSAyMDA3ICswMjAwCisKKyAgICBBZGRlZCAncmVzY3VlJywgJ3VuaXQnLCBhbmQgJ3ZlcnNpb24nIHRvIHRoZSBtYW4gcGFnZSwgcGx1cyBzb21lIHNtYWxsIAorZWRpdHMuCisgICAgKGNoZXJyeSBwaWNrZWQgZnJvbSBjb21taXQgMTc5Mjg0ODA2MzA2NmRlM2NjNjJkM2JjZjk4MTBiYWQ3N2YyMzBjMikKKworY29tbWl0IGFiZmY2NDZhYTg4ZTdlZDBlMThhN2QyNjIxYjFlNTA1YTMxYWI0YzkKK0F1dGhvcjogQmVubm8gU2NodWxlbmJlcmcgPGJlbnNiZXJnQGp1c3RlbWFpbC5uZXQ+CitEYXRlOiAgIFdlZCBBcHIgNCAxMjowMzoyOSAyMDA3ICswMjAwCisKKyAgICBNYWtlIHRoZSB3b3JkaW5nIG9mIHdhcm5pbmcgc29tZXdoYXQgY2xlYXJlci4KKworY29tbWl0IDljODBkZjRiNTBjOTgzOGVmNjYxZmQ0Mjg2Y2U1NmVkNzRjYjBiNmYKK0F1dGhvcjogT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW9Ab3NzeXN0ZW1zLmNvbS5icj4KK0RhdGU6ICAgV2VkIEFwciA0IDA5OjA0OjMwIDIwMDcgLTAzMDAKKworICAgIEF2b2lkIHNlZ2ZhdWx0IGR1ZSBhIGRvdWJsZSBmcmVlIG9uIHJlaXNlcmZzIHN1cHBvcnQgKHBhdGNoIHNlbnQgYnkgSmFrdWIgCitCb2d1c3ogPHFib29zaEBwbGQtbGludXgub3JnPikKKworY29tbWl0IDAwMDUzMjVlMjRmZTJhZTIxZGM4ZTk3OGRhNjU5NzYxOTMzNWIxOTcKK0F1dGhvcjogQmVubm8gU2NodWxlbmJlcmcgPGJlbnNiZXJnQGp1c3RlbWFpbC5uZXQ+CitEYXRlOiAgIFR1ZSBNYXIgMjcgMDA6MjM6MTggMjAwNyArMDIwMAorCisgICAgVHdlYWsgc29tZSBoZWxwIG1lc3NhZ2VzOiBjaGFuZ2UgdGhpcmQgcGVyc29uIHRvIGltcGVyYXRpdmUgZm9yIAorY29uc2lzdGVuY3ksIGFkZCBzaW5nbGUgcXVvdGVzIGFuZCByZW1vdmUgbGV0dGVycyBmb3IgY2xhcml0eQorCitjb21taXQgMzllYmJhOGI1YjMxYjAwZTY4OTY0MDUwNTUzMzVmZjJhZjZlMTJiMworQXV0aG9yOiBEYXZpZCBDYW50cmVsbCA8ZGNhbnRyZWxsQHJlZGhhdC5jb20+CitEYXRlOiAgIFR1ZSBNYXIgMjAgMDE6Mzc6MTMgMjAwNyAtMDQwMAorCisgICAgQWRkZWQgJWZpbmRfbGFuZyB0byB0aGUgc3BlYyBmaWxlIHRlbXBsYXRlLgorCitjb21taXQgNzM2MmM2ZTMwNzRjYmQ5YTkxNjNhOTZhYzQ2MzI3YjYyYzdhYzQxYworQXV0aG9yOiBEYXZpZCBDYW50cmVsbCA8ZGNhbnRyZWxsQHJlZGhhdC5jb20+CitEYXRlOiAgIFR1ZSBNYXIgMjAgMDA6NTg6MTYgMjAwNyAtMDQwMAorCisgICAgRml4IHZhcmlhYmxlIG5hbWVzLgorCitjb21taXQgODE4NDA0MDE2YmRkYmM5MjliODE2NTEwNmZhNDU4OTdiYjRhMTIxYgorQXV0aG9yOiBEYXZpZCBDYW50cmVsbCA8ZGNhbnRyZWxsQHJlZGhhdC5jb20+CitEYXRlOiAgIFR1ZSBNYXIgMjAgMDA6MDk6MDggMjAwNyAtMDQwMAorCisgICAgVXBkYXRlZCBmaWxlIHNpemVzLgorCitjb21taXQgMWYxYzRlOTRiYzJlMzk5NGNkOGE0MmQxZmNiNDJmOWMzZTgyNTBmMAorQXV0aG9yOiBEYXZpZCBDYW50cmVsbCA8ZGNhbnRyZWxsQHJlZGhhdC5jb20+CitEYXRlOiAgIE1vbiBNYXIgMTkgMjI6NDA6MTUgMjAwNyAtMDQwMAorCisgICAgVXBkYXRlIE5FV1MgZm9yIDEuOC41LgorCitjb21taXQgMzlmZjY4OGI5YTNiN2QyMDI4ODM3M2M1M2Q0OTI3ZTQzMWVlNmQ0OAorQXV0aG9yOiBEYXZpZCBDYW50cmVsbCA8ZGNhbnRyZWxsQHJlZGhhdC5jb20+CitEYXRlOiAgIE1vbiBNYXIgMTkgMTc6MjY6MzkgMjAwNyAtMDQwMAorCisgICAgVXBkYXRlIGZvciB2ZXJzaW9uIDEuOC41LgorCitjb21taXQgYjhkYWIyNmU2ZDgxNWE4NmE0Y2I5YjMzYzRmMWE2NGI1MWFiMWRjYworQXV0aG9yOiBEYXZpZCBDYW50cmVsbCA8ZGNhbnRyZWxsQHJlZGhhdC5jb20+CitEYXRlOiAgIE1vbiBNYXIgMTkgMTc6MjU6MjkgMjAwNyAtMDQwMAorCisgICAgd2dldCBsaWVzLCBjaGVhdHMsIGFuZCBzdGVhbHMuICBVc2UgY3VybCB0byBkb3dubG9hZCBQTyBmaWxlcyBpbnN0ZWFkLgorCitjb21taXQgY2I2M2U2ODMyNTlmOTQyNWY4ZjQ5NDkyODczMTY1MDNjZjkyOTQ2NworQXV0aG9yOiBEYXZpZCBDYW50cmVsbCA8ZGNhbnRyZWxsQHJlZGhhdC5jb20+CitEYXRlOiAgIE1vbiBNYXIgMTkgMTQ6MzA6MjcgMjAwNyAtMDQwMAorCisgICAgVXBkYXRlZCBORVdTIGZpbGUgZm9yIDEuOC40LgorCitjb21taXQgMDI4ZjNiM2Q4ZjdiYTI5YmNhNjExN2Q4OTdmYWYyNWZlZjU0YzJhNworQXV0aG9yOiBEYXZpZCBDYW50cmVsbCA8ZGNhbnRyZWxsQHJlZGhhdC5jb20+CitEYXRlOiAgIE1vbiBNYXIgMTkgMTQ6MjA6NTIgMjAwNyAtMDQwMAorCisgICAgUmVtb3ZlIEdOVSBtYWtlLXNwZWNpZmljIHRoaW5ncyBmcm9tIHBvNGEubWsuCisKK2NvbW1pdCA2ZTFiYWQ4Yzk5ZTJhNWRiNjFkY2I4YWQzYzhjMmVmMWVmM2RmZmI4CitBdXRob3I6IERhdmlkIENhbnRyZWxsIDxkY2FudHJlbGxAcmVkaGF0LmNvbT4KK0RhdGU6ICAgTW9uIE1hciAxOSAxNDowMjowMCAyMDA3IC0wNDAwCisKKyAgICBVcGRhdGUuCisKK2NvbW1pdCBjMjYwMTliOGZkZDhmZGIyYzVmNWQ0Yjk5NzhiMTUzZjNlY2VkOGY4CitBdXRob3I6IERhdmlkIENhbnRyZWxsIDxkY2FudHJlbGxAcmVkaGF0LmNvbT4KK0RhdGU6ICAgTW9uIE1hciAxOSAxNDowMTo0NiAyMDA3IC0wNDAwCisKKyAgICBDb25kaXRpb25hbGl6ZSB0aGUgU3lzdGVtIFogc3R1ZmYgY29ycmVjdGx5LiAgV2UgZ2V0IGhlYWRlcnMgaW5zdGFsbGVkIG9uIAorbm9uLVN5c3RlbSBaIHBsYXRmb3JtcywgYnV0IHRoZSBjb2RlIG9ubHkgY29tcGlsZXMgb24gdGhhdCBwbGF0Zm9ybS4KKworY29tbWl0IGIwNzQwNWQ1OTRjZjMxMTBlY2YwMTA4NjgxOWUzMzkyNGRjMTZmOGYKK0F1dGhvcjogRGF2aWQgQ2FudHJlbGwgPGRjYW50cmVsbEByZWRoYXQuY29tPgorRGF0ZTogICBNb24gTWFyIDE5IDExOjIyOjIyIDIwMDcgLTA0MDAKKworICAgIEFkZGVkIGEgc2VjdGlvbiBmb3IgdmVyc2lvbiAxLjguNCAoaXQncyBvbmx5IGEgbWlub3IgYnVnIGZpeCByZWxlYXNlKS4KKworY29tbWl0IDgyYmQ5NWMxMjdlNjk5ZWE0NmQ4M2QwZWY5ODNiZDFiYmVkZGIyNDEKK0F1dGhvcjogRGF2aWQgQ2FudHJlbGwgPGRjYW50cmVsbEByZWRoYXQuY29tPgorRGF0ZTogICBNb24gTWFyIDE5IDExOjIyOjA2IDIwMDcgLTA0MDAKKworICAgIFVwZGF0ZSB0byAxLjguNCBmb3IgdGhlIHZlcnNpb24gbnVtYmVyLgorCitjb21taXQgMjY1MjJmODVmN2Y5YjAzYTEyNzNiNzNiZjE3Y2MwMzVhZDBkNzRiMgorQXV0aG9yOiBEYXZpZCBDYW50cmVsbCA8ZGNhbnRyZWxsQHJlZGhhdC5jb20+CitEYXRlOiAgIE1vbiBNYXIgMTkgMTE6MjA6NTUgMjAwNyAtMDQwMAorCisgICAgUmVtb3ZlIHRoZSBDT01QSUxFX0ZPUl9TMzkwIGZsYWctc2V0dGluZyBzdHVmZi4gIEl0IHdhc24ndCBjb3JyZWN0IGFueXdheS4gIAorVGFrZSBhIGtlcm5lbC1zdHlsZSBhcHByb2FjaCBhbmQgY2hlY2sgdW5hbWUgLW0gdG8gc2VlIGlmIHdlIGFyZSBvbiBzMzkwLiAgSWYgCitzbywgd2UgYnVpbGQgZm9yIHpTZXJpZXMuICBPdGhlcndpc2Ugd2UgZG8gbm90LgorCitjb21taXQgZDUxODZjOWNlOTFmNDNlMTMwMmEwZTNiNGVkY2VlMDg1NzhjYWMyYworQXV0aG9yOiBEYXZpZCBDYW50cmVsbCA8ZGNhbnRyZWxsQHJlZGhhdC5jb20+CitEYXRlOiAgIE1vbiBNYXIgMTkgMTE6MTk6MjcgMjAwNyAtMDQwMAorCisgICAgSW5jbHVkZSB2dG9jLmggZm9yIHRoZSBmb3JtYXQxX2xhYmVsX3QgdHlwZWRlZi4KKworY29tbWl0IGIyMjI4MTNkMmM2YmQyZDQ4YjVjMjA4YjBmOThlYzFjN2RkZDIzYzYKK0F1dGhvcjogRGF2aWQgQ2FudHJlbGwgPGRjYW50cmVsbEByZWRoYXQuY29tPgorRGF0ZTogICBNb24gTWFyIDE5IDExOjEyOjExIDIwMDcgLTA0MDAKKworICAgIFJlbW92ZSBzb21lIHVudXNlZCB2YXJpYWJsZXMsIGNoZWNrIHRoZSByZXR1cm4gdmFsdWVzIGZyb20gZmdldHMoKSBhbmQgCithc3ByaW50ZigpLCBhbmQgcmVtb3ZlIHRoZSB1bnVzZWQgX2RtX3JlbW92ZV9tYXAoKSBmdW5jdGlvbi4KKworY29tbWl0IDM5YjgzMjZjZDhkMmY3MjAyNDZlMzA1Njc1NTg4NjBhODlhZmRjMTMKK0F1dGhvcjogRGF2aWQgQ2FudHJlbGwgPGRjYW50cmVsbEByZWRoYXQuY29tPgorRGF0ZTogICBNb24gTWFyIDE5IDExOjEwOjM4IDIwMDcgLTA0MDAKKworICAgIENoZWNrIGZvciB0Z2V0ZW50KCkgaW4gbGlidGluZm8gYXMgd2VsbCBhcyBuY3Vyc2VzLCBjdXJzZXMsIHRlcm1jYXAsIGFuZCAKK3Rlcm1saWIuCisKK2NvbW1pdCBmNmFkNWQ2NDVlYjBjNDFmYzU1Y2I1MmFkOTAxZjU2NjExMzVkMjlkCitBdXRob3I6IERhdmlkIENhbnRyZWxsIDxkY2FudHJlbGxAcmVkaGF0LmNvbT4KK0RhdGU6ICAgTW9uIE1hciAxOSAxMTowOToyNSAyMDA3IC0wNDAwCisKKyAgICBGaXggZm9yIGNvbXBpbGUgcHJvYmxlbXMgd2l0aCBnY2MtNC4xLjIgYXMgaW5kaWNhdGVkIGhlcmU6CisgICAgaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1wYXJ0ZWQvMjAwNy0wMy9tc2cwMDAwOC5odG1sCisKK2NvbW1pdCBjYmE4OGJlNzNlMTMyM2NkNWFiMTAxZWFiNzE3YTliNTZkY2FjZmJmCitBdXRob3I6IERhdmlkIENhbnRyZWxsIDxkY2FudHJlbGxAcmVkaGF0LmNvbT4KK0RhdGU6ICAgTW9uIE1hciAxOSAxMDo0Mzo1NiAyMDA3IC0wNDAwCisKKyAgICBTbGVlcCBmb3Igb25lIHNlY29uZCBhZnRlciB1cGxvYWRpbmcgYSBmaWxlIHRvIGZ0cC11cGxvYWQuZ251Lm9yZy4gIFNlZW1zIAordHJhbnNhY3Rpb25zIG5lZWQgdG8gYmUgc3BhY2VkIG91dCBhIGJpdCBvdGhlcndpc2UgdGhlIHNlcnZlciB3aWxsIHJlamVjdCBmaWxlcy4KKworY29tbWl0IDFmNDYyN2NiNDViNTBiMWMxMDJkNTljMmEwNzIzNWI1NDVlNGI4NjIKK0F1dGhvcjogRGF2aWQgQ2FudHJlbGwgPGRjYW50cmVsbEByZWRoYXQuY29tPgorRGF0ZTogICBGcmkgTWFyIDE2IDE2OjA5OjA4IDIwMDcgLTA0MDAKKworICAgIFVwZGF0ZWQgdGhlIHJlbGVhc2Ugc2NyaXB0IHRvIHdvcmsgd2l0aCB0aGUgbmV3IHNvdXJjZSBsYXlvdXQuCisKK2NvbW1pdCA3ZGQ5YWM0YTg2MGE0OTY1YTIxNWFhMzM4NzJmMWJlYTZlNjg4ZjkzCitBdXRob3I6IERhdmlkIENhbnRyZWxsIDxkY2FudHJlbGxAcmVkaGF0LmNvbT4KK0RhdGU6ICAgRnJpIE1hciAxNiAxNToyMDoyMiAyMDA3IC0wNDAwCisKKyAgICBJZ25vcmUgdGhlIGdudWxpYi8gc3ViZGlyZWN0b3J5IGluIHZlcnNpb24gY29udHJvbC4KKworY29tbWl0IGQxNjVlZGU5NGNmYTcwY2M1ZjcyODk0ZTEyYWVkODUxYjQ3Y2U3OTUKK0F1dGhvcjogRGF2aWQgQ2FudHJlbGwgPGRjYW50cmVsbEByZWRoYXQuY29tPgorRGF0ZTogICBGcmkgTWFyIDE2IDE1OjE5OjU3IDIwMDcgLTA0MDAKKworICAgIE1vcmUgc3BlYyBmaWxlIHRlbXBsYXRlIGNsZWFudXBzLgorCitjb21taXQgMjMyOGJiNmJjNDFlZTA3YTkyODRiNTIzM2U3OTg2ZDlkYmYyNTI0YQorQXV0aG9yOiBEYXZpZCBDYW50cmVsbCA8ZGNhbnRyZWxsQHJlZGhhdC5jb20+CitEYXRlOiAgIEZyaSBNYXIgMTYgMTU6MTg6MjcgMjAwNyAtMDQwMAorCisgICAgRmlsZSBzaXplIHVwZGF0ZXMuCisKK2NvbW1pdCA0MTJlYjJhZTE4N2JmZDYzNDgwZDVjYmM0YTRhYjEwZTc5MmZlNzdjCitBdXRob3I6IERhdmlkIENhbnRyZWxsIDxkY2FudHJlbGxAcmVkaGF0LmNvbT4KK0RhdGU6ICAgRnJpIE1hciAxNiAxNToxODowOCAyMDA3IC0wNDAwCisKKyAgICBJbnN0YWxsIHRoZSBsaWJwYXJ0ZWQucGMgZmlsZSwgbm90IHRoZSBsaWJwYXJ0ZWQucGMuaW4gZmlsZS4KKworY29tbWl0IDEwMjcwNjRiYmQ3ZDU4NzgwOGUyOGZmZDQ4OGMwMGVhMWE1ZGVjZTMKK0F1dGhvcjogRGF2aWQgQ2FudHJlbGwgPGRjYW50cmVsbEByZWRoYXQuY29tPgorRGF0ZTogICBGcmkgTWFyIDE2IDE1OjEwOjAzIDIwMDcgLTA0MDAKKworICAgIFVwZGF0ZWQgTkVXUyBmb3IgdmVyc2lvbiAxLjguMy4KKworY29tbWl0IGFiYWIwZjFlMzZkYTg5ZWRjMzZmMTBkMDFiZmRjMTE2NTdlMjUxZmEKK0F1dGhvcjogRGF2aWQgQ2FudHJlbGwgPGRjYW50cmVsbEByZWRoYXQuY29tPgorRGF0ZTogICBGcmkgTWFyIDE2IDE0OjUwOjM0IDIwMDcgLTA0MDAKKworICAgIFJldmVydCAiRnJvbTogSmltIE1leWVyaW5nIDxqaW1AbWV5ZXJpbmcubmV0PiAtIDIwNDgtYnl0ZSBsaW51eF93cml0ZSBwYXRjaCIKKyAgICAKKyAgICBUaGlzIHJldmVydHMgY29tbWl0IDE1MmM0MjZjYWNlZGNkMjBkYjQ1MTViZDQwZDY2ZWNlNjYzMmMyNTguCisgICAgCisgICAgVGVzdCBoYXJkd2FyZSBub3Qgc2VjdXJlZCBpbiB0aW1lIGZvciByZWxlYXNlLiAgUG9zdHBvbmluZyB0aGlzIHBhdGNoIHRvCisgICAgbmV4dCByZWxlYXNlLgorCitjb21taXQgMTUyYzQyNmNhY2VkY2QyMGRiNDUxNWJkNDBkNjZlY2U2NjMyYzI1OAorQXV0aG9yOiBEYXZpZCBDYW50cmVsbCA8ZGNhbnRyZWxsQHJlZGhhdC5jb20+CitEYXRlOiAgIEZyaSBNYXIgMTYgMTQ6MTA6MTEgMjAwNyAtMDQwMAorCisgICAgRnJvbTogSmltIE1leWVyaW5nIDxqaW1AbWV5ZXJpbmcubmV0PgorICAgIAorICAgIFBhdGNoIGxpbnV4X3dyaXRlKCkgdG8gaGFuZGxlIGxvZ2ljYWwgc2VjdG9yIHNpemVzIGxhcmdlciB0aGFuIAorUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQgKDUxMikuCisKK2NvbW1pdCA2NjkzOWJmOTBiOTZlNWNiZTA5ODg5ZTRkMzQ5MDgzN2Y4N2ZjMjg1CitBdXRob3I6IEppbSBNZXllcmluZyA8amltQG1leWVyaW5nLm5ldD4KK0RhdGU6ICAgRnJpIE1hciAxNiAxMDo1OToxOSAyMDA3ICswMTAwCisKKyAgICBwby9QT1RGSUxFUy5pbjogQWRkIGxpYi9nZXRvcHQuYworCitjb21taXQgYjNlZDI1M2NiYmM5M2Y2MWNiZjA2ZTdiODdmMTA2NTYxOWQzOWNjOQorQXV0aG9yOiBEZWJhcnNoaSBSYXkgPHJpc2hpQGdudS5vcmc+CitEYXRlOiAgIEZyaSBNYXIgMTYgMTk6NTA6MzIgMjAwNyArMDUzMAorCisgICAgRml4ZWQgZmF1bHR5IGluZm9ybWF0aW9uIGluIFJFQURNRS1oYWNraW5nIChCaXNvbiBpcyBub3QgYSBtYWludGFpbmVyIHRvb2wgCitmb3IgUGFydGVkKSwgYW5kIE1ha2VmaWxlLm1haW50IChldmVyeSBwcm9qZWN0IGhhcyBjZXJ0YWluIHZhcmlhdGlvbnMgb2YgaXQpLgorCitjb21taXQgNGY5ZGExNzMxMzg5OWIwZWE5ODM3MzI0OWNiNmE2ZDA5YzMyZWE0YQorQXV0aG9yOiBEZWJhcnNoaSBSYXkgPHJpc2hpQGdudS5vcmc+CitEYXRlOiAgIEZyaSBNYXIgMTYgMTI6MTI6MzQgMjAwNyArMDUzMAorCisgICAgUHJldmVudGVkIERBU0Qgc3BlY2lmaWMgaGVhZGVycyBhbmQgc291cmNlcyBmcm9tIGJlaW5nIGNvbXBpbGVkL2luc3RhbGxlZCAKK29uIG5vbi1zMzkwIHN5c3RlbXM7IGFuZCBjb25kaXRpb25hbGx5IGluY2x1ZGVkIGZkYXNkLmggaW4gbGludXguaCBmb3IgczM5MCAKK3N5c3RlbXMuCisKK2NvbW1pdCBlMTE3YWRlZDg3MmFmYWQ5MDM3NTg5MDAzNTM0ODdhYjlmMzI2NWJlCitBdXRob3I6IERhdmlkIENhbnRyZWxsIDxkY2FudHJlbGxAcmVkaGF0LmNvbT4KK0RhdGU6ICAgVHVlIE1hciAxMyAxNzozNDowNSAyMDA3IC0wNDAwCisKKyAgICBNb2Rlcm5pemUgdGhlIHNwZWMgZmlsZSB0ZW1wbGF0ZS4KKworY29tbWl0IGQ2YTQwYWMyODg4ZjIyMWI0MWQzYTQ2YTliY2YzM2U0MTcxNDA5ZWIKK0F1dGhvcjogRGF2aWQgQ2FudHJlbGwgPGRjYW50cmVsbEByZWRoYXQuY29tPgorRGF0ZTogICBUaHUgTWFyIDE1IDEzOjAzOjI0IDIwMDcgLTA0MDAKKworICAgIE1vdmUgc3RhdGljIHZhcmlhYmxlIGZsYWdnaW5nIGxpdHRsZSBlbmRpYW4gb3Igbm90IHRvIGpvdXJuYWwuYy4gIFdlIGRvbid0IAord2FudCBzdGF0aWMgdmFyaWFibGVzIGluIGdlbmVyYWwsIGJ1dCBpZiB0aGV5IG11c3QgZXhpc3QsIHB1dCB0aGVtIGluIGEgQyBmaWxlLCAKK25vdCBhIGhlYWRlci4KKyAgICAKKyAgICBQYXJhbWV0ZXJpemUgdGhlIGxpdHRsZV9lbmRpYW4gZmxhZyBmb3IgdGhlIG1hY3JvcyBpbiBqb3VybmFsLmguCisKK2NvbW1pdCA1YTk2ODUxNGRmYzQ5YzcxNmMwNGE0YjRkZTRiMTc1NjI1MzYxOGNmCitBdXRob3I6IERhdmlkIENhbnRyZWxsIDxkY2FudHJlbGxAcmVkaGF0LmNvbT4KK0RhdGU6ICAgVGh1IE1hciAxNSAxMjo1MzozNSAyMDA3IC0wNDAwCisKKyAgICBSZXZlcnRlZCBteSBwYXRjaCB0byBjb25maWd1cmUuYWMgdG8gcmVtb3ZlIC1XbCwtLWFzLW5lZWRlZCBmcm9tIExERkxBR1MgCit3aGVuIGNoZWNraW5nIGZvciBsaWJyZWFkbGluZS4KKworY29tbWl0IDhjMmUyOWZlZmExY2U0NTk3NjRiNjk0YzY4ZjQ5NTAzNGZmZjNhODgKK0F1dGhvcjogRGF2aWQgQ2FudHJlbGwgPGRjYW50cmVsbEByZWRoYXQuY29tPgorRGF0ZTogICBXZWQgTWFyIDE0IDE0OjU1OjQ5IDIwMDcgLTA0MDAKKworICAgIGxpYnJlYWRsaW5lIGlzIGEgcHJvYmxlbWF0aWMgbGlicmFyeS4gIEF1dG9jb25mIGFkZHMgYSBibG9jayB0byB0aGUgCitnZW5lcmF0ZWQgY29uZmlndXJlIHNjcmlwdCB0aGF0IGNoZWNrcyB0byBzZWUgaWYgd2Ugc2hvdWxkIGJlIHBhc3NpbmcgdGhlIAorLS1hcy1uZWVkZWQgZmxhZyB0byBsZCgxKS4gIFRoZXJlIGFyZSBwb3J0YWJpbGl0eSByZWFzb25zIHRoaXMgY29kZSBleGlzdHMgCisoYmVzdCBJIGNhbiBmaWd1cmUpLCBidXQgaXQgcHJlc2VudHMgYSBwcm9ibGVtIHdoZW4gd2Ugc2NhbiBmb3IgbGlicmVhZGxpbmUuCisgICAgCisgICAgbGlicmVhZGxpbmUgc3BlY2lmaWNhbGx5IGhhcyB1bnJlc29sdmVkIHN5bWJvbHMgb24gYXQgbGVhc3QgRmVkb3JhIGFuZCAKK1JIRUwuICBXaHk/ICBXZWxsLCB0aGUgZGV2ZWxvcGVyIGNhbiBjaG9vc2UgdG8gcHJvdmlkZSBsaWJ0ZXJtY2FwLCBsaWJuY3Vyc2VzLCAKK29yIGxpYm5jdXJzZXN3ICh3aWRlLWNoYXIgc3VwcG9ydCkgYXQgY29tcGlsZSB0aW1lIHdoaWNoIGFsbCBzYXRpc2Z5IHRoZSBjdXJzZXMgCitBUEkgZGVwZW5kZW5jeSB0aGF0IGxpYnJlYWRsaW5lIGhhcy4gIFdoZW4gdGhlIHBhcnRlZCBjb25maWd1cmUgc2NyaXB0IHJ1bnMsIGl0IAorZmFpbHMgb24gcmVhZGxpbmUgYmVjYXVzZSB0aGUgLS1hcy1uZWVkZWQgZmxhZyBjYXVzZXMgdGhlIGxpbmtlciB0byBub3QgaW5jbHVkZSAKK2xpYm5jdXJzZXMgZXZlbiB0aG91Z2ggd2UgYWxyZWFkeSBoYXZlIHRoYXQgb24gdGhlIGxpbmsgbGluZS4KKyAgICAKKyAgICBNeSBzb2x1dGlvbiBpcyB0byByZW1vdmUgdGhlIC0tYXMtbmVlZGVkIGZsYWcgd2hlbiB3ZSBzY2FuIGZvciBsaWJyZWFkbGluZSAKK2FuZCB0aGVuIGxhdGVyIGNoZWNrIGZvciBybF9jb21wbGV0aW9uX21hdGNoZXMoKSBpbiBsaWJyZWFkbGluZS4KKworY29tbWl0IGFjOTFkOTdiMzE2NDM5NTE4MzZjOGZkYzA3MWJlODhjMTc3ZGYxODYKK0F1dGhvcjogRGF2aWQgQ2FudHJlbGwgPGRjYW50cmVsbEByZWRoYXQuY29tPgorRGF0ZTogICBUdWUgTWFyIDEzIDIzOjI0OjE3IDIwMDcgLTA0MDAKKworICAgIElnbm9yZSBtb3JlIGZpbGVzLgorCitjb21taXQgMjc5M2Q4OWFmYjg4ZGY5MjM5NmZjZDBhNzIyYjBiNjc2ODQxYmY5NQorQXV0aG9yOiBEYXZpZCBDYW50cmVsbCA8ZGNhbnRyZWxsQHJlZGhhdC5jb20+CitEYXRlOiAgIFR1ZSBNYXIgMTMgMTU6MDU6NTMgMjAwNyAtMDQwMAorCisgICAgTW9yZSBjaGFuZ2VzIHRvIHNldCB0aGUgdmVyc2lvbiBudW1iZXIgdG8gMS44LjMuCisKK2NvbW1pdCBkMGJmYzE5Njg4MTI4YTRkYTg2YTZiZWM4NzUyNjZiNWNiOGY1ODc4CitBdXRob3I6IERhdmlkIENhbnRyZWxsIDxkY2FudHJlbGxAcmVkaGF0LmNvbT4KK0RhdGU6ICAgVHVlIE1hciAxMyAxMzozNzo0NSAyMDA3IC0wNDAwCisKKyAgICBQYXRjaCBmcm9tIE1hdHRoZXcgR2FycmV0dCA8bWpnNTlAc3JjZi51Y2FtLm9yZz4gdG8gYWRkIEhGUysgcmVzaXplIHN1cHBvcnQuCisKK2NvbW1pdCBiMjM5MDg3M2E2MzJkMDRhMTMzMTkxYzZiOWZlYjIxYjE1ZjU4NzIyCitBdXRob3I6IEppbSBNZXllcmluZyA8amltQG1leWVyaW5nLm5ldD4KK0RhdGU6ICAgVGh1IE1hciA4IDAxOjA1OjMzIDIwMDcgKzAxMDAKKworICAgIERvbid0IHVzZSBkZXByZWNhdGVkIG1rdGVtcCwgdG8gYXZvaWQgbGlua2VyIHdhcm5pbmcKKyAgICAqIGxpYnBhcnRlZC90ZXN0cy9jb21tb24uYyAoX2NyZWF0ZV9kaXNrKTogUmV3cml0ZSB0bworICAgIHVzZSBta3N0ZW1wIGluc3RlYWQuCisKK2NvbW1pdCA0OTlhNDhiNzQxM2U2MGZkMzlkMWJlNzlkYjc5YjNiODc0NWQwMDBjCitBdXRob3I6IEppbSBNZXllcmluZyA8amltQG1leWVyaW5nLm5ldD4KK0RhdGU6ICAgV2VkIE1hciA3IDE4OjU2OjIxIDIwMDcgKzAxMDAKKworICAgIHRlc3RzL2xhYmVsOiBEb24ndCBkZXJlZmVyZW5jZSBOVUxMIGlmIG9wZW4gZmFpbHMuCisgICAgKiBsaWJwYXJ0ZWQvdGVzdHMvbGFiZWwuYyAoU1RBUlRfVEVTVCk6IFJldHVybiByaWdodCBhd2F5IGlmCisgICAgcGVkX2RldmljZV9nZXQgcmV0dXJucyBOVUxMLgorCitjb21taXQgOGRhMzk1YjhiNWJkZjI2NzMwYzU5ZDY5Njk3NWVkYzRhMjA2N2Y4ZAorQXV0aG9yOiBEYXZpZCBDYW50cmVsbCA8ZGNhbnRyZWxsQHJlZGhhdC5jb20+CitEYXRlOiAgIFR1ZSBNYXIgMTMgMTM6MDM6MDIgMjAwNyAtMDQwMAorCisgICAgU2V0IHZlcnNpb24gdG8gMS44LjMgZm9yIHVwY29taW5nIHJlbGVhc2UuCisKK2NvbW1pdCA4Y2Y4ZWNiZjkwMThjMTI0MjliZWM1NTBmNTVhODY3YjlkZjVhN2YzCitBdXRob3I6IEppbSBNZXllcmluZyA8amltQG1leWVyaW5nLm5ldD4KK0RhdGU6ICAgTW9uIE1hciAxMiAxNDo1ODo0MCAyMDA3ICswMTAwCisKKyAgICBoZnMuYzogRGV0ZWN0IHdyaXRlIGZhaWx1cmUuCisgICAgKiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jIChoZnNfZXh0cmFjdF9maWxlLCBoZnNfZXh0cmFjdF9iaXRtYXApOgorICAgIChoZnNfZXh0cmFjdF9tZGIsIGhmc3BsdXNfZXh0cmFjdF9maWxlLCBoZnNwbHVzX2V4dHJhY3RfdmgpOgorICAgIEZhaWwgd2hlbiBmY2xvc2UgZmFpbHMgZm9yIGEgd3JpdHRlbi10byBmaWxlIGhhbmRsZS4KKworY29tbWl0IDM5NDM3MzM1MDQ5YjBlMGQwZmEwYzM2YmI2OWM1MGRjMmVmMGVhZTkKK0F1dGhvcjogSmltIE1leWVyaW5nIDxqaW1AbWV5ZXJpbmcubmV0PgorRGF0ZTogICBUaHUgTWFyIDggMjM6NDA6MDMgMjAwNyArMDEwMAorCisgICAgCWFpeC5jOiBBdm9pZCBtZW1vcnkgb3ZlcnJ1bi4gIERvbid0IGFzc3VtZSBsb2dpY2FsIHNlY3RvciBzaXplIDw9IDUxMkIKKyAgICAJKiBsaWJwYXJ0ZWQvbGFiZWxzL2FpeC5jIChzdHJ1Y3QgQWl4TGFiZWwpOiBSZW1vdmUgZGVmaW5pdGlvbi4KKyAgICAJKGFpeF9sYWJlbF9tYWdpY19nZXQsIGFpeF9sYWJlbF9tYWdpY19zZXQpOiBOZXcgZnVuY3Rpb25zLgorICAgIAkocmVhZF9zZWN0b3IpOiBOZXcgZnVuY3Rpb24uCisgICAgCShhaXhfcHJvYmUpOiBSZXdyaXRlIG5vdCB0byB1c2UgdGhlIGFib3ZlLCBhbmQgbm90IGEgc3RhdGljIGJ1ZmZlci4KKyAgICAJKGFpeF9jbG9iYmVyKTogTGlrZXdpc2UuCisgICAgCUFsc28sIHJhdGhlciB0aGFuIFBFRF9BU1NFUlQnaW5nIHRoYXQgYWl4X3Byb2JlIHJldHVybnMgMSwKKyAgICAJc2ltcGx5IHJldHVybiAwIGlmIGFpeF9wcm9iZSByZXR1cm5zIGZhaWxzLgorICAgIAkocGVkX2Rpc2tfYWl4X2luaXQpOiBSZW1vdmUgYXNzZXJ0aW9uLCBub3cgdGhhdCBBaXhMYWJlbCBpcyBnb25lLgorCitjb21taXQgMTU0YTJjMzAyODM1OWQzZjhmOWZjZDBkNjQ0NmU2NGUxODVhMmZjZQorQXV0aG9yOiBKaW0gTWV5ZXJpbmcgPGppbUBtZXllcmluZy5uZXQ+CitEYXRlOiAgIFRodSBNYXIgOCAyMzoxMTo1MyAyMDA3ICswMTAwCisKKyAgICAJVXNlIFBFRF9TRUNUT1JfU0laRV9ERUZBVUxUIG5vdCA1MTIKKyAgICAJKiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmMgKGJlb3NfcmVhZCwgYmVvc193cml0ZSk6CisgICAgCSogbGlicGFydGVkL2FyY2gvbGludXguYyAoX2RldmljZV9nZXRfbGVuZ3RoLCBfZGV2aWNlX3NlZWspCisgICAgCShsaW51eF9yZWFkLCBsaW51eF93cml0ZSwgX2Jsa3BnX2FkZF9wYXJ0aXRpb24pOgorICAgIAkqIGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jIChmYXRfYm9vdF9zZWN0b3JfcmVhZCk6CisgICAgCSogbGlicGFydGVkL2xhYmVscy9ic2QuYyAoYnNkX2FsbG9jKToKKyAgICAJKiBsaWJwYXJ0ZWQvbGFiZWxzL2Rvcy5jIChwcm9iZV9maWxlc3lzdGVtX2Zvcl9nZW9tKToKKyAgICAJKiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jIChhbWlnYV9yZWFkKToKKworY29tbWl0IDUzZDlhN2QyZTcxMDRiOTFhMTU3NWExYWQwMWQ0MDM3ODhmY2U5NGYKK0F1dGhvcjogSmltIE1leWVyaW5nIDxqaW1AbWV5ZXJpbmcubmV0PgorRGF0ZTogICBUaHUgTWFyIDggMjI6Mzk6MzMgMjAwNyArMDEwMAorCisgICAgKiBwYXJ0ZWQvdWkuYyAobm9uX2ludGVyYWN0aXZlX21vZGUpOiBQbHVnIGEgdGlueSBsZWFrLgorICAgIEV4ZXJjaXNlIGJ5IHJ1bm5pbmcgdGhlIGZvbGxvd2luZyB3aXRoIGEgQ0QtUk9NIGluIHRoZSBkcml2ZToKKyAgICB2YWxncmluZCAtLWxlYWstY2hlY2s9ZnVsbCBwYXJ0ZWQvcGFydGVkIC9kZXYvY2Ryb20gcHJpbnQKKyAgICBCZWZvcmUsIHdlJ2QgbGVhayB0aGUgNi1ieXRlIGNvbW1hbmQ6ICJwcmludFwwIi4KKworY29tbWl0IGRhNjJlMzk1MzZkMGFhZWFmZjFlODU1Mzc0YzJjN2JlNzIzN2E0NGMKK0F1dGhvcjogSmltIE1leWVyaW5nIDxqaW1AbWV5ZXJpbmcubmV0PgorRGF0ZTogICBUaHUgTWFyIDggMTc6NDE6MzQgMjAwNyArMDEwMAorCisgICAgbGludXguYzogQXZvaWQgbWVtb3J5IG92ZXJydW4uICBIYW5kbGUgMjA0OC1ieXRlIGxvZ2ljYWwgc2VjdG9ycy4KKyAgICAqIGxpYnBhcnRlZC9hcmNoL2xpbnV4LmMgKGxpbnV4X3JlYWQpOiBBbGxvY2F0ZSB0aGUgcmlnaHQgYW1vdW50IG9mCisgICAgc3BhY2UgZm9yIHRoZSAocG90ZW50aWFsbHkgMjA0OC1ieXRlLWxvbmcpIHNlY3RvcnMgd2UncmUgYWJvdXQgdG8gcmVhZC4KKworY29tbWl0IDYyMzZkNDRiYjgxMzMxMzFhMDZhZWYyYTZkNTk2ZjdiNWZlMWQ4ODYKK0F1dGhvcjogSmltIE1leWVyaW5nIDxqaW1AbWV5ZXJpbmcubmV0PgorRGF0ZTogICBUaHUgTWFyIDggMDE6MDQ6NDQgMjAwNyArMDEwMAorCisgICAgKiBsaWJwYXJ0ZWQvdGVzdHMvbGFiZWwuYzogUGx1ZyBhIHRyaXZpYWwgbGVhay4KKworY29tbWl0IDFlNGMyYzg1YWQ1M2JjMzE2M2IyYTAwMDMzNmQzOWE4MGU5YTIzNmYKK0F1dGhvcjogRGViYXJzaGkgUmF5IDxyaXNoaUBnbnUub3JnPgorRGF0ZTogICBUaHUgTWFyIDggMDE6NDg6MzAgMjAwNyArMDUzMAorCisgICAgUmVwbGFjZWQgW2ZdcHJpbnRmIHdpdGggZnB1dFtjfHNdIGdsb2JhbGx5LgorCitjb21taXQgODgxYzk3M2UxMjczNTk4M2U0MjMwN2EyYjIwOGE4NmEyNGNlZmRjNQorQXV0aG9yOiBKaW0gTWV5ZXJpbmcgPGppbUBtZXllcmluZy5uZXQ+CitEYXRlOiAgIFdlZCBNYXIgNyAxOTozOTo1NiAyMDA3ICswMTAwCisKKyAgICBsaWJwYXJ0ZWQvdW5pdC5jOiBjb25zdGlmeSBpbnRlcmZhY2VzCisgICAgKiBpbmNsdWRlL3BhcnRlZC91bml0LmggKFBFRF9VTklUX0xBU1QpOgorICAgICogbGlicGFydGVkL3VuaXQuYyAocGVkX3VuaXRfZ2V0X3NpemUpOgorICAgIChwZWRfdW5pdF9mb3JtYXRfY3VzdG9tX2J5dGUsIHBlZF91bml0X2Zvcm1hdF9ieXRlKToKKyAgICAocGVkX3VuaXRfZm9ybWF0X2N1c3RvbSwgcGVkX3VuaXRfZm9ybWF0LCBwZWRfdW5pdF9wYXJzZSk6CisgICAgKGZpbmRfc3VmZml4LCBwYXJzZV9jaHMsIGNsaXAsIGdlb21ldHJ5X2Zyb21fY2VudHJlX3JhZGl1cyk6CisgICAgKHBlZF91bml0X3BhcnNlX2N1c3RvbSk6CisKK2NvbW1pdCBiOGFmYzBiNWQ0OGFlZmI0OGNkM2IyZWViODExZGNhODNjZmE5NDAxCitBdXRob3I6IEppbSBNZXllcmluZyA8amltQG1leWVyaW5nLm5ldD4KK0RhdGU6ICAgV2VkIE1hciA3IDE5OjI3OjE4IDIwMDcgKzAxMDAKKworICAgIERlY2xhcmUgc29tZSBzdGF0aWMgYXJyYXlzIHRvIGJlICJjb25zdCIuCisgICAgKiBsaWJwYXJ0ZWQvbGFiZWxzL2Rvcy5jIChNQlJfQk9PVF9DT0RFKToKKyAgICAqIGxpYnBhcnRlZC9sYWJlbHMvZWZpX2NyYzMyLmMgKGNyYzMyX3RhYik6CisgICAgKiBsaWJwYXJ0ZWQvbGFiZWxzL3BjOTguYyAoTUJSX0JPT1RfQ09ERSk6CisgICAgKiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYyAoRUJDdG9BU0MsIEFTQ3RvRUJDKToKKworY29tbWl0IGNiNzcwNjNjMjYyODFkYWUyZGJjZTYwNzk4MTljNGFhZDRlMTViMTUKK0F1dGhvcjogSmltIE1leWVyaW5nIDxqaW1AbWV5ZXJpbmcubmV0PgorRGF0ZTogICBXZWQgTWFyIDcgMTg6MTc6MDAgMjAwNyArMDEwMAorCisgICAgQWRkICJjb25zdCIgdG8gcGFyYW1ldGVycyBpbiB0aGVzZSBwdWJsaWMgaW50ZXJmYWNlcy4KKyAgICAqIGxpYnBhcnRlZC9kaXNrLmMgKHBlZF9kaXNrX2NoZWNrKToKKyAgICAocGVkX2Rpc2tfZ2V0X3ByaW1hcnlfcGFydGl0aW9uX2NvdW50KToKKyAgICAocGVkX2Rpc2tfZ2V0X2xhc3RfcGFydGl0aW9uX251bSwgcGVkX3BhcnRpdGlvbl9wcmludCk6CisgICAgKHBlZF9kaXNrX3ByaW50KToKKyAgICAocGVkX3BhcnRpdGlvbl9wcmludCk6IEFsc28gZGVjbGFyZSB0byBiZSAic3RhdGljIi4KKyAgICBUaGlzIGlzIG9rLCBzaW5jZSB0aGUgZnVuY3Rpb24gaXMgcmVmZXJlbmNlZCBvbmx5IGZyb20gdGhpcyBmaWxlLgorICAgICogaW5jbHVkZS9wYXJ0ZWQvZGlzay5oOiBVcGRhdGUgdGhlaXIgcHJvdG90eXBlcy4KKworY29tbWl0IGI5MDZmYjU5N2U4NGM1ZmY3Y2EzYzU0MzQzYjZjMmRlMjE2ZDI0NzEKK0F1dGhvcjogSmltIE1leWVyaW5nIDxqaW1AbWV5ZXJpbmcubmV0PgorRGF0ZTogICBXZWQgTWFyIDcgMTI6Mjk6NDcgMjAwNyArMDEwMAorCisgICAgVXNlIDxjb25maWcuaD4gY29uc2lzdGVudGx5LCBub3QgImNvbmZpZy5oIi4KKyAgICAqIE1ha2VmaWxlLmNmZyAobG9jYWwtY2hlY2tzLXRvLXNraXApOiBSZW1vdmUgc2NfcmVxdWlyZV9jb25maWdfaCwKKyAgICB0byBlbmFibGUgdGhlICJtYWtlIGRpc3RjaGVjayIgdGVzdCBmb3IgdGhpcy4KKworY29tbWl0IGNjMTk1NWUzOTIwMmY5ZmY1ZWNmOWYzYmY4NzRhZjFiODVhNzM3YWEKK0F1dGhvcjogRGF2aWQgQ2FudHJlbGwgPGRjYW50cmVsbEByZWRoYXQuY29tPgorRGF0ZTogICBUdWUgTWFyIDYgMTc6MTk6MzEgMjAwNyAtMDUwMAorCisgICAgc3RhcnRfcG9zIGlzIGEgUGVkU2VjdG9yLCBub3QgYSBQZWRHZW9tZXRyeS4KKworY29tbWl0IDUxZTc3NDI2OTAwMmE3YTljMGFlY2Y0OTdkNGQ5ODQ4NmM5MTg5MTgKK0F1dGhvcjogRGF2aWQgQ2FudHJlbGwgPGRjYW50cmVsQG1vcnRpc2UuYm9zdG9uLnJlZGhhdC5jb20+CitEYXRlOiAgIFR1ZSBNYXIgNiAxMToxODoyMCAyMDA3IC0wNTAwCisKKyAgICBQcmVzZXJ2ZSBzdGFydGluZyBzZWN0b3IgZm9yIHByaW1hcnkgTlRGUyAzLjEgcGFydGl0aW9ucyAoV2luZG93cyBWaXN0YSkKKyAgICB3aGVuIG1vZGlmeWluZyB0aGUgRE9TIGRpc2sgbGFiZWwuICBOVEZTIDMuMSBwYXJ0aXRpb25zIGRvIG5vdCBzdGFydCBvbgorICAgIHRoZSAybmQgaGVhZCBvZiB0aGUgMXN0IGN5bGluZGVyIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRyaXZlLgorCitjb21taXQgNDBiZmJhM2EzMTdmMzNlN2JjNTVmZGQ4Y2Q1MDczYWM2OWFlMjgwYQorQXV0aG9yOiBEYXZpZCBDYW50cmVsbCA8ZGNhbnRyZWxAbW9ydGlzZS5ib3N0b24ucmVkaGF0LmNvbT4KK0RhdGU6ICAgRnJpIE1hciAyIDEzOjIwOjI4IDIwMDcgLTA1MDAKKworICAgIFBhdGNoZWQgcGFydGVkLjggbWFuIHBhZ2UgdG8gc2hvdyBwYXJ0aXRpb24gbmFtZXMgYXBwbHkgdG8gR1BUIGRpc2sgbGFiZWxzCisgICAgCisgICAgYXMgd2VsbCBhcyBNYWMgYW5kIFBDOTggZGlzayBsYWJlbHMuCisKK2NvbW1pdCA1MzMwZDIzMmY5NzYxOWIzOTI3N2JkNDZmODg1OGJiNDFhOGYxNTQxCitBdXRob3I6IERlYmFyc2hpIFJheSA8cmlzaGlAZ251Lm9yZz4KK0RhdGU6ICAgVHVlIE1hciA2IDIwOjQ3OjU4IDIwMDcgKzA1MzAKKworICAgIFJlcGxhY2VkIFtmXXByaW50ZiB3aXRoIGZwdXRbY3xzXSBpbiAKK2xpYnBhcnRlZC9mcy9leHQyL2V4dDJfYmxvY2tfcmVsb2NhdG9yLmMuCisKK2NvbW1pdCA1N2IzYzczZTdlNGQwMWFjODcyMTI1MDFmN2E4NzQ3N2JlMDE4ZDEyCitBdXRob3I6IERlYmFyc2hpIFJheSA8cmlzaGlAZ251Lm9yZz4KK0RhdGU6ICAgVHVlIE1hciA2IDE2OjM4OjMzIDIwMDcgKzA1MzAKKworICAgIFJlLWFycmFuZ2luZyAuZ2l0aWdub3JlIGluIGFscGhhYmV0aWNhbCBvcmRlci4KKworY29tbWl0IGY0YTQ2NzAxNjM4MzU1YTgwZTc1OTA5MzE1ODc4YjNiNzIzN2I2YjUKK0F1dGhvcjogRGViYXJzaGkgUmF5IDxyaXNoaUBnbnUub3JnPgorRGF0ZTogICBUdWUgTWFyIDYgMTU6NTc6MjQgMjAwNyArMDUzMAorCisgICAgRGVmaW5lZCBhIGR1bW15ICdfZHVtcF9oaXN0b3J5JyBmdW5jdGlvbiBpbiBwYXJ0ZWQvdWkuYyB3aGVuIFJlYWRsaW5lIGlzIAorYWJzZW50LiBUaGFua3MgdG8gSmltIE1leWVyaW5nIGZvciB0aGUgc3VnZ2VzdGlvbi4KKworY29tbWl0IGQ3MmI3OGUyZjU1ZTQ0OTg1NzE2ZjM3YzBmZGU0MGU1ZjhmZDc5ZWIKK0F1dGhvcjogRGViYXJzaGkgUmF5IDxyaXNoaUBnbnUub3JnPgorRGF0ZTogICBUdWUgTWFyIDYgMTU6NTE6NTggMjAwNyArMDUzMAorCisgICAgQWRkZWQgbGlicGFydGVkL3Rlc3RzL2xhYmVsIHRvIC5naXRpZ25vcmUuCisKK2NvbW1pdCA3Y2EyMGZiY2ExNWU4OWQ4ZDQwYzMzZDExOTE3YzY5NjlmMWVkNDAzCitBdXRob3I6IERlYmFyc2hpIFJheSA8cmlzaGlAZ251Lm9yZz4KK0RhdGU6ICAgVHVlIE1hciA2IDE0OjM3OjI1IDIwMDcgKzA1MzAKKworICAgIEZpeGVkIHBhcnRlZC91aS5jIHRvIGluY29ycG9yYXRlIHNpZ25hbCBoYW5kbGVycyBmb3Igc3lzdGVtcyBsYWNraW5nIAorJ3NpZ2FjdGlvbicsICdTQV9TSUdJTkZPJywgYW5kIG90aGVyIGNvbnN0YW50cyBpbiBzaWduYWwuaC4KKworY29tbWl0IGNlMzgxMGI0MzcyNzY0MTU0YjcxYTI5OWMzZTkwZWIwOGE2MTBhNDYKK0F1dGhvcjogSmltIE1leWVyaW5nIDxqaW1AbWV5ZXJpbmcubmV0PgorRGF0ZTogICBNb24gTWFyIDUgMjI6NDQ6MzggMjAwNyArMDEwMAorCisgICAgVW5kbyBwYXJ0IG9mIHRoZSBkb3MuYyBjb25zdGlmaWNhdGlvbi4KKyAgICAqIGxpYnBhcnRlZC9kaXNrLmM6IFRoZSBzb2xlIHBhcmFtZXRlciBvZiBwZWRfZGlza190eXBlX3JlZ2lzdGVyCisgICAgYW5kIHBlZF9kaXNrX3R5cGVfdW5yZWdpc3RlciBtdXN0ICpub3QqIGJlIGNvbnN0LgorICAgICogbGlicGFydGVkL2xhYmVscy9kb3MuYyAobXNkb3NfZGlza190eXBlKTogTGlrZXdpc2UgZm9yIHRoZQorICAgIGNvcnJlc3BvbmRpbmcgc3RhdGljIHN0cnVjdCBpbiBkb3MuYywgc2luY2UgdGhvc2UgZnVuY3Rpb25zIG1vZGlmeQorICAgIHRoZSBzdHJ1Y3QuICBUaGlzIGRpZG4ndCBzaG93IHVwIGF0IGNvbXBpbGUgdGltZSBkdWUgdG8gY2FzdHMuCisgICAgKiBpbmNsdWRlL3BhcnRlZC9kaXNrLmg6IFVwZGF0ZSBwcm90b3R5cGVzLCB0b28uCisKK2NvbW1pdCAzMDExZTE4MDlhMTkzNWY1NzZhNWVjODA2ODFjYzVmY2Y5NGNkMjYyCitBdXRob3I6IEppbSBNZXllcmluZyA8amltQG1leWVyaW5nLm5ldD4KK0RhdGU6ICAgTW9uIE1hciA1IDIyOjA3OjIzIDIwMDcgKzAxMDAKKworICAgIEhpZGUgdHdvIHVubmVjZXNzYXJpbHktImV4dGVybiIgZnVuY3Rpb25zLgorICAgICogbGlicGFydGVkL2xhYmVscy9tYWMuYyAobWFjX2FsbG9jKTogRGVjbGFyZSBzdGF0aWMuCisgICAgKiBsaWJwYXJ0ZWQvbGFiZWxzL2Rvcy5jIChyYXdfcGFydF9wYXJzZSk6IERlY2xhcmUgc3RhdGljLgorCitjb21taXQgZjBjOGZjMjU1ZGJkZWZlYTJmNWM3OWFlMTAwZjg5Yzg1Mjk1MjMxMgorQXV0aG9yOiBKaW0gTWV5ZXJpbmcgPGppbUBtZXllcmluZy5uZXQ+CitEYXRlOiAgIE1vbiBNYXIgNSAxNTozNzoyNSAyMDA3ICswMTAwCisKKyAgICAqIGxpYnBhcnRlZC9sYWJlbHMvZG9zLmM6IENvbXBsZXRlIGNvbnN0aWZpY2F0aW9uIG9mIHRoaXMgZmlsZS4KKyAgICAqIGxpYnBhcnRlZC9kaXNrLmMgKHBlZF9kaXNrX3R5cGVfcmVnaXN0ZXIpOiBNYWtlIHRoZSBzb2xlCisgICAgcGFyYW1ldGVyICJjb25zdCIsIHNvIHRoYXQgY2FsbGVyJ3MgYXJndW1lbnQgbWF5IGJlICJjb25zdCIuCisgICAgKHBlZF9kaXNrX3R5cGVfdW5yZWdpc3Rlcik6IExpa2V3aXNlLgorCitjb21taXQgODY5YTZiNGUyODIxOGIwOWM1YjllNDZiMjE0ZTAyY2U3NTQ1MGQ3MAorQXV0aG9yOiBKaW0gTWV5ZXJpbmcgPGppbUBtZXllcmluZy5uZXQ+CitEYXRlOiAgIE1vbiBNYXIgNSAxNTowNjozMSAyMDA3ICswMTAwCisKKyAgICAqIHBvL1BPVEZJTEVTLmluOiBBZGQgcGFydHByb2JlL3BhcnRwcm9iZS5jLCBub3cgdGhhdCBpdCBjb250YWlucworICAgIHRyYW5zbGF0YWJsZSBzdHJpbmdzLgorCitjb21taXQgY2M0NmFhMmRiYmFlYmM3ZjY4ZThiYmZjOWJmYjMxM2EyZTFjMmUxOAorQXV0aG9yOiBKaW0gTWV5ZXJpbmcgPGppbUBtZXllcmluZy5uZXQ+CitEYXRlOiAgIE1vbiBNYXIgNSAxNDo0NzowMiAyMDA3ICswMTAwCisKKyAgICBNYWtlIHBhcnRwcm9iZSBhY2NlcHQgLS1oZWxwIGFuZCAtLXZlcnNpb24gb3B0aW9ucy4KKyAgICBBZGQgbG9uZyBvcHRpb25zOiAtLW5vLXVwZGF0ZSAoc2FtZSBhcyBleGlzdGluZyAtZCksIGFuZAorICAgIC0tc3VtbWFyeSAoc2FtZSBhcyBleGlzdGluZyAtcykuCisgICAgKiBwYXJ0cHJvYmUvcGFydHByb2JlLmMKKyAgICBJbmNsdWRlIGNvbmZpZ21ha2UuaCwgZ2V0b3B0LmgsIGFuZCBOTFMtcmVsYXRlZCB0aGluZ3MuCisgICAgKG1haW4pOiBSZXdyaXRlIG9wdGlvbiBoYW5kbGluZy4KKyAgICBBbG9uZyB0aGUgd2F5LCBmaXggYSBidWcgd2hlcmVieSAicGFydHByb2JlIERFVjEgREVWMiAuLi4gREVWTiIgd291bGQKKyAgICBleGl0IHN1Y2Nlc3NmdWxseSB3aGVuZXZlciBwcm9jZXNzX2RldiAoREVWTikgcmV0dXJucyBub256ZXJvLCBldmVuCisgICAgd2hlbiB0aGF0IGZ1bmN0aW9uIGZhaWxzIGZvciBlYWNoIG9mIHRoZSBwcmVjZWRpbmcgZGV2aWNlcy4KKworY29tbWl0IDMzODlmNjJiYTM1Y2EyZjBjNWJhODdhZTI5YWY1ZWY4MDdlY2Y5ODUKK0F1dGhvcjogSmltIE1leWVyaW5nIDxqaW1AbWV5ZXJpbmcubmV0PgorRGF0ZTogICBNb24gTWFyIDUgMTQ6NDc6MDIgMjAwNyArMDEwMAorCisgICAgTWFrZSBjbGVhcmZhdCBhY2NlcHQgLS1oZWxwIGFuZCAtLXZlcnNpb24gb3B0aW9ucy4KKyAgICAqIGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmMgKEFVVEhPUlMsIFBST0dSQU1fTkFNRSk6IERlZmluZS4KKyAgICBJbmNsdWRlIGdldHRleHQtcmVsYXRlZCB0aGluZ3MuCisgICAgSW5jbHVkZSBjbG9zZW91dC5oLgorICAgICh1c2FnZSk6IE5ldyBmdW5jdGlvbi4KKyAgICAobWFpbik6IFNldCB1cCBmb3IgdHJhbnNsYXRpb25zLCB1c2UgY2xvc2Vfc3Rkb3V0LgorICAgICogYm9vdHN0cmFwLmNvbmY6IEFkZCBsb25nLW9wdGlvbnMsIGZvciBjbGVhcmZhdC4KKyAgICAqIGRlYnVnL2NsZWFyZmF0L01ha2VmaWxlLmFtOiBVc2UgZ251bGliLgorCitjb21taXQgYTNmOTcxZDA4ZmY2NzZiZDUxNWRhMjgzMGFjZmRkZDM3NTNkNWI2ZQorQXV0aG9yOiBKaW0gTWV5ZXJpbmcgPGppbUBtZXllcmluZy5uZXQ+CitEYXRlOiAgIE1vbiBNYXIgNSAxNDo0NDo1OCAyMDA3ICswMTAwCisKKyAgICAqIGluY2x1ZGUvcGFydGVkL2Rpc2suaCAoc3RydWN0IF9QZWREaXNrT3BzKSBbd3JpdGVdOiBDaGFuZ2UKKyAgICBwYXJhbWV0ZXIgdHlwZSB0byBiZSAiY29uc3QiLgorCitjb21taXQgNmIwZDljNTE5ODVhZTQ4YWYwNTI1MGJkNTA2MDBmMzg3YmE3ZmY4ZAorQXV0aG9yOiBKaW0gTWV5ZXJpbmcgPGppbUBtZXllcmluZy5uZXQ+CitEYXRlOiAgIE1vbiBNYXIgNSAxNDozNzozOSAyMDA3ICswMTAwCisKKyAgICBCZWdpbiBtYWtpbmcgbGlicGFydGVkL2xhYmVscy8qLmMgY29uc3QtY29ycmVjdC4KKyAgICBGb3IgYW4gaW50cm9kdWN0aW9uLCBzZWUKKyAgICBodHRwOi8vbWFpbC1hcmNoaXZlLmNvbS9wYXJ0ZWQtZGV2ZWxAbGlzdHMuYWxpb3RoLmRlYmlhbi5vcmcvbXNnMDA5MzAuaHRtbAorICAgIEluIHBhcnRpY3VsYXIsIEkndmUgdXNlZCBhIGNvbnN0LWFkZGluZyBjYXNlIGluIG1hYy5jIHRvIHdvcmsgYXJvdW5kCisgICAgdGhlIGN1cnJlbnQsIGluY29uc2lzdGVudCBzZW1hbnRpY3Mgb2YgbWFjX3dyaXRlLgorCitjb21taXQgZTFmZWU2ZWU0ODJmZWU4YWQxYjI1NWUyOWQzYjM5YmZmMzdiOTc5YworQXV0aG9yOiBKaW0gTWV5ZXJpbmcgPGppbUBtZXllcmluZy5uZXQ+CitEYXRlOiAgIE1vbiBNYXIgNSAxMDoxOTo1MyAyMDA3ICswMTAwCisKKyAgICBBdm9pZCBhIGxpYnRvb2wgd2FybmluZzoKKyAgICBsaWJ0b29sOiBsaW5rOiB3YXJuaW5nOiBgLXJlbGVhc2UnIGlzIGlnbm9yZWQgZm9yIGNvbnZlbmllbmNlIGxpYnJhcmllcworICAgICogbGlicGFydGVkL2xhYmVscy9NYWtlZmlsZS5hbSAobGlibGFiZWxzX2xhX0xERkxBR1MpOiBEb24ndCBkZWZpbmUuCisKK2NvbW1pdCBjZWZmZTU2NzM0NDk2NjM1MzA3OTgxOWY2YzdhYWIzNTdhNzgwOWMxCitBdXRob3I6IEppbSBNZXllcmluZyA8amltQG1leWVyaW5nLm5ldD4KK0RhdGU6ICAgTW9uIE1hciA1IDEwOjEzOjA4IDIwMDcgKzAxMDAKKworICAgIE1ha2UgIm1ha2UgZGlzdGNoZWNrIiB3b3JrIGJldHRlci4KKyAgICAqIE1ha2VmaWxlLmNmZyAobG9jYWwtY2hlY2tzLXRvLXNraXApOiBTa2lwIHNjX3N5c3RlbV9oX2hlYWRlcnMsIHRvby4KKyAgICAqIE1ha2VmaWxlLm1haW50IChteS1kaXN0Y2hlY2spOiBEb24ndCBkZXBlbmQgb24gJChyZWxlYXNlX2FyY2hpdmVfZGlyKS4KKworY29tbWl0IDMzNGUxMDYzOWMyMDhjMGU2OTMxNzU1NmI1YmFlNGFmMzVmNGZiNzAKK0F1dGhvcjogSmltIE1leWVyaW5nIDxqaW1AbWV5ZXJpbmcubmV0PgorRGF0ZTogICBGcmkgTWFyIDIgMTI6MjM6MjUgMjAwNyArMDEwMAorCisgICAgQXZvaWQgcmVjdXJzaXZlICJMSUJTID0gLi4uICQoTElCUykiIGFzc2lnbm1lbnRzLgorICAgICogbGlicGFydGVkL2xhYmVscy9NYWtlZmlsZS5hbSAobGlibGFiZWxzX2xhX0xJQkFERCk6IEFkZCAkKElOVExMSUJTKQorICAgIGhlcmUgcmF0aGVyIHRoYW4gdmlhIGEgcmVjdXJzaXZlIExJQlMgPSAuLi4gJChMSUJTKSBhc3NpZ25tZW50LgorICAgICogbGlicGFydGVkL2ZzL01ha2VmaWxlLmFtIChsaWJmc19sYV9MSUJBREQpOiBMaWtld2lzZS4KKworY29tbWl0IDIzM2M3OGYyNGVmZTE2ZWYyOTYyNmYzNDhjZjdlNGY0ZjI3NTY2OGYKK0F1dGhvcjogSmltIE1leWVyaW5nIDxqaW1AbWV5ZXJpbmcubmV0PgorRGF0ZTogICBGcmkgTWFyIDIgMTE6NTY6MDIgMjAwNyArMDEwMAorCisgICAgVXNlICQoVkFSKSwgcmF0aGVyIHRoYW4gb2Jzb2xlc2NlbnQgQFZBUkAgYXV0b21ha2Ugbm90YXRpb24uCisgICAgCisgICAgRW5hYmxlIHRoZSBtYWtlZmlsZS1jaGVjayBydWxlLgorICAgICogTWFrZWZpbGUuY2ZnOiBSZW1vdmUgbWFrZWZpbGUtY2hlY2sgZnJvbSB0aGUgbGlzdCBvZiBydWxlcyB0byBza2lwLgorICAgICogTWFrZWZpbGUuYW06IGNoYW5nZSBlLmcuLCBAVkVSU0lPTkAgdG8gJChWRVJTSU9OKS4KKyAgICAqIGRlYnVnL2NsZWFyZmF0L01ha2VmaWxlLmFtOiBMaWtld2lzZS4KKyAgICAqIGxpYnBhcnRlZC9NYWtlZmlsZS5hbTogTGlrZXdpc2UuCisgICAgKiBsaWJwYXJ0ZWQvZnMvTWFrZWZpbGUuYW06IExpa2V3aXNlLgorICAgICogbGlicGFydGVkL2ZzL2FtaWdhL01ha2VmaWxlLmFtOiBMaWtld2lzZS4KKyAgICAqIGxpYnBhcnRlZC9mcy9iZnMvTWFrZWZpbGUuYW06IExpa2V3aXNlLgorICAgICogbGlicGFydGVkL2ZzL2V4dDIvTWFrZWZpbGUuYW06IExpa2V3aXNlLgorICAgICogbGlicGFydGVkL2ZzL2ZhdC9NYWtlZmlsZS5hbTogTGlrZXdpc2UuCisgICAgKiBsaWJwYXJ0ZWQvZnMvaGZzL01ha2VmaWxlLmFtOiBMaWtld2lzZS4KKyAgICAqIGxpYnBhcnRlZC9mcy9qZnMvTWFrZWZpbGUuYW06IExpa2V3aXNlLgorICAgICogbGlicGFydGVkL2ZzL2xpbnV4X3N3YXAvTWFrZWZpbGUuYW06IExpa2V3aXNlLgorICAgICogbGlicGFydGVkL2ZzL250ZnMvTWFrZWZpbGUuYW06IExpa2V3aXNlLgorICAgICogbGlicGFydGVkL2ZzL3JlaXNlcmZzL01ha2VmaWxlLmFtOiBMaWtld2lzZS4KKyAgICAqIGxpYnBhcnRlZC9mcy91ZnMvTWFrZWZpbGUuYW06IExpa2V3aXNlLgorICAgICogbGlicGFydGVkL2ZzL3hmcy9NYWtlZmlsZS5hbTogTGlrZXdpc2UuCisgICAgKiBsaWJwYXJ0ZWQvbGFiZWxzL01ha2VmaWxlLmFtOiBMaWtld2lzZS4KKyAgICAqIGxpYnBhcnRlZC90ZXN0cy9NYWtlZmlsZS5hbTogTGlrZXdpc2UuCisgICAgKiBwYXJ0ZWQvTWFrZWZpbGUuYW06IExpa2V3aXNlLgorICAgICogcGFydHByb2JlL01ha2VmaWxlLmFtOiBMaWtld2lzZS4KKyAgICAKKyAgICBUaGUgYWJvdmUgY29udmVyc2lvbiBjYXVzZWQgYSBwcm9ibGVtOgorICAgICogbGlicGFydGVkL01ha2VmaWxlLmFtOiBSZW1vdmUgdGhpcyByZWN1cnNpdmUgZGVmaW5pdGlvbjoKKyAgICBMSUJTID0gQElOVExMSUJTQCBATElCU0AuICBPbmNlIGNvbnZlcnRlZCB0byBMSUJTID0gLi4uJChMSUJTKSwKKyAgICBHTlUgbWFrZSB3b3VsZCAocmlnaHRseSkgZmFpbCwgb2JqZWN0aW5nIHRvIHRoZSByZWN1cnNpdmUgZGVmaW5pdGlvbi4KKyAgICAobGlicGFydGVkX2xhX0xJQkFERCk6IEluc3RlYWQsIGFkZCAkKElOVExMSUJTKSBoZXJlLgorCitjb21taXQgMDM3ZTFkMDYxYTNiYmYwZjg1YzgwYzkyZDMxYjEwODFlYTIyZTE4MgorQXV0aG9yOiBKaW0gTWV5ZXJpbmcgPGppbUBtZXllcmluZy5uZXQ+CitEYXRlOiAgIEZyaSBNYXIgMiAxMTo1NTo1OCAyMDA3ICswMTAwCisKKyAgICBFbmFibGUgdGhlIHBvLWNoZWNrIHJ1bGUuCisgICAgCisgICAgKiBNYWtlZmlsZS5jZmcgKGxvY2FsLWNoZWNrcy10by1za2lwKTogUmVtb3ZlIHBvLWNoZWNrLgorICAgICogcG8vUE9URklMRVMuaW46IEFkZCBhIGJ1bmNoIG9mIG5hbWVzIG9mIGZpbGVzIHRoYXQgY29udGFpbgorICAgIHRyYW5zbGF0YWJsZSBzdHJpbmdzLiAgUmVtb3ZlIHNvbWUgd2hpY2ggY29udGFpbiBub25lLgorCitjb21taXQgNDc4Yzg5ZjY4MzA4M2E3NjhmYjQ3ZDMzMDU5YWYzMDA1YmYzYmU4MgorQXV0aG9yOiBKaW0gTWV5ZXJpbmcgPGppbUBtZXllcmluZy5uZXQ+CitEYXRlOiAgIEZyaSBNYXIgMiAxMTo1NTo1MCAyMDA3ICswMTAwCisKKyAgICBBZGQgaW5mcmFzdHJ1Y3R1cmUgZm9yIG1vcmUgcmlnb3JvdXMgIm1ha2UgZGlzdGNoZWNrIiBydWxlcy4KKyAgICAKKyAgICAqIEdOVW1ha2VmaWxlOiBOZXcgZmlsZS4KKyAgICAqIC5wcmV2LXZlcnNpb246IE5ldyBmaWxlLgorICAgICogTWFrZWZpbGUuYW0gKE1BSU5UQUlORVJDTEVBTkZJTEVTKTogUmVtb3ZlIG5hbWVzIG9mIGZpbGVzIG5vdyBpbiAKK2J1aWxkLWF1eC8uCisgICAgKGRpc3RjaGVjay1ob29rKTogTmV3IHJ1bGUsIHRvIHJ1biB0aGUgY2hlY2tzIGluIE1ha2VmaWxlLm1haW50LgorICAgIChFWFRSQV9ESVNUKTogQWRkIC5wcmV2LXZlcnNpb24uCisgICAgKiBNYWtlZmlsZS5tYWludDogTmV3IGZpbGUuICBJbXByb3ZlZCAibWFrZSBkaXN0Y2hlY2siIHJ1bGVzLgorICAgICogTWFrZWZpbGUuY2ZnOiBTZWxlY3Qgd2hpY2ggTWFrZWZpbGUubWFpbnQgY2hlY2tzIHRvIHJ1bi4KKyAgICAobG9jYWwtY2hlY2tzLXRvLXNraXApOiBMaXN0IGFsbCBjdXJyZW50bHktZmFpbGluZyBhbmQgaXJyZWxldmFudAorICAgIHRlc3RzIGhlcmUuCisgICAgKiBidWlsZC1hdXgvdmMtbGlzdC1maWxlczogTmV3IGZpbGUuICBMaXN0IHZlcnNpb24tY29udHJvbGxlZCBmaWxlcy4KKyAgICAqIC5naXRpZ25vcmU6IFJlbW92ZSBidWlsZC1hdXgsIHNpbmNlIG5vdyBpdCBjb250YWlucyBhCisgICAgdmVyc2lvbi1jb250cm9sbGVkIGZpbGUuCisKK2NvbW1pdCA4NTJiOWMwOGE3YTFhZThlYzdlNTgxNDVhN2YxMjhjZjY5Y2JhYTJmCitBdXRob3I6IERlYmFyc2hpIFJheSA8cmlzaGlAZ251Lm9yZz4KK0RhdGU6ICAgVGh1IE1hciAxIDIxOjQyOjMyIDIwMDcgKzA1MzAKKworICAgIEZpeGluZyBpbmRlbnRhdGlvbiBpbiBwYXJ0ZWQvdWkuYy4gUmVwbGFjZWQgVEFCcyB3aXRoIHNwYWNlcyB0byBlbnN1cmUgCit1bmlmb3JtaXR5IGluIGFsbCBlZGl0b3JzLgorCitjb21taXQgYjM2MDNiNTQxMjUyZjBkZWRmZDNhZGMxMGFlYzJlNzlmOWEyZDU4NgorQXV0aG9yOiBEZWJhcnNoaSBSYXkgPHJpc2hpQGdudS5vcmc+CitEYXRlOiAgIFdlZCBGZWIgMjggMjE6MDE6NTIgMjAwNyArMDUzMAorCisgICAgRml4aW5nIGluZGVudGF0aW9uIGluIHBhcnRlZC91aS5jLgorCitjb21taXQgMjVkNTU2OTMxMzY3N2M2NmRkODUwYWYzNGE2YzZmNjFiMGM3ZTVhNworQXV0aG9yOiBKaW0gTWV5ZXJpbmcgPGppbUBtZXllcmluZy5uZXQ+CitEYXRlOiAgIFR1ZSBGZWIgMjcgMTg6NTY6MzYgMjAwNyArMDEwMAorCisgICAgTm9ybWFsaXplIHRoZSB3YXkgd2UgaGFuZGxlIGEgZ2VuZXJhdGVkLWFuZC1kaXN0cmlidXRlZCBmaWxlLCBwYXJ0ZWQuc3BlYy4KKyAgICAqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkIHBhcnRlZC5zcGVjLgorICAgIChwYXJ0ZWQuc3BlYyk6IE5ldyBydWxlLgorICAgIChNQUlOVEFJTkVSQ0xFQU5GSUxFUyk6IEFkZCBwYXJ0ZWQuc3BlYy4KKyAgICAqIGNvbmZpZ3VyZS5hYyAoQUNfT1VUUFVUKTogUmVtb3ZlIHBhcnRlZC5zcGVjIGZyb20gdGhlIGxpc3QuCisKK2NvbW1pdCA3Y2M5ZmQ3NjdkYWRjZjhiYmFjZDhlNmQ0OTg3ODFiMzExM2Q1NzIxCitBdXRob3I6IEppbSBNZXllcmluZyA8amltQG1leWVyaW5nLm5ldD4KK0RhdGU6ICAgVHVlIEZlYiAyNyAxNjoyMjoyOSAyMDA3ICswMTAwCisKKyAgICBBZGQgLUkkKHRvcF9zcmNkaXIpL2xpYiwgcmVxdWlyZWQgZm9yIG5ldyB1c2Ugb2YgY2xvc2Vfc3Rkb3V0LgorICAgICogcGFydHByb2JlL01ha2VmaWxlLmFtIChwYXJ0ZWRpbmNsdWRlZGlyKToKKworY29tbWl0IGRkM2ZlMDMxZmY0ZjA2ZGYxNDVjNTBkNTU3YjY1Y2U1NzE2ZTEwMjkKK0F1dGhvcjogSmltIE1leWVyaW5nIDxqaW1AbWV5ZXJpbmcubmV0PgorRGF0ZTogICBUdWUgRmViIDI3IDEzOjE2OjQ0IDIwMDcgKzAxMDAKKworICAgIEFycmFuZ2UgZm9yICJtYWtlIGRpc3RjaGVjayIgdG8gYmUgc3RyaWN0ZXIuCisKK2NvbW1pdCAxNWFlNmNlY2E4MjYwMmZlM2ExYzZlZjYxMzBmMGNhMTMzYzcwMTZiCitBdXRob3I6IEppbSBNZXllcmluZyA8amltQG1leWVyaW5nLm5ldD4KK0RhdGU6ICAgVHVlIEZlYiAyNyAwMDo0Mzo1NSAyMDA3ICswMTAwCisKKyAgICAqIGJvb3RzdHJhcDogbmV3IGZpbGUuCisKK2NvbW1pdCA3MmQxYTBjNGU1NzRjNTI4ZTMwYjFlMTA0NDkwNzcyNTMwZWVkY2IxCitBdXRob3I6IERlYmFyc2hpIFJheSA8cmlzaGlAZ251Lm9yZz4KK0RhdGU6ICAgVHVlIEZlYiAyNyAwNDowMjo0NCAyMDA3ICswNTMwCisKKyAgICBGaXhpbmcgbGlicGFydGVkL2FyY2gvZ251LmMgdG8gcmVtb3ZlIGJ1aWxkLXRpbWUgZXJyb3JzLgorCitjb21taXQgODAyNTA0YWUxMWE3OWQzZWQ3MmZjMzQ2NmRkM2E5NmRlMTEzOWMxMgorQXV0aG9yOiBKaW0gTWV5ZXJpbmcgPGppbUBtZXllcmluZy5uZXQ+CitEYXRlOiAgIFN1biBGZWIgMjUgMTg6NDY6MDUgMjAwNyArMDEwMAorCisgICAgcGFydHByb2JlOiBEZXRlY3QvcmVwb3J0IGFueSBlcnJvciB3aGVuIHdyaXRpbmcgdG8gc3Rkb3V0LgorICAgIAkqIHBhcnRwcm9iZS9NYWtlZmlsZS5hbSAocGFydHByb2JlX0xEQUREKTogQWRkIGxpYi9saWJwYXJ0ZWQubGEuCisgICAgCSogcGFydHByb2JlL3BhcnRwcm9iZS5jOgorICAgIAlJbmNsdWRlICJjbG9zZW91dC5oIiBmb3IgY2xvc2Vfc3Rkb3V0LgorICAgIAlJbmNsdWRlICJ2ZXJzaW9uLWV0Yy5oIiBmb3IgdmVyc2lvbl9ldGMgcHJvdG90eXBlLgorICAgIAlEZWNsYXJlIGdsb2JhbCwgcHJvZ3JhbV9uYW1lLgorICAgIAkoUFJPR1JBTV9OQU1FLCBBVVRIT1JTKTogRGVmaW5lLgorICAgIAkoaGVscCk6IFVzZSBQUk9HUkFNX05BTUUsIHJhdGhlciB0aGFuIGhhcmQtY29kaW5nIGl0LgorICAgIAkodmVyc2lvbik6IFVzZSBnbnVsaWIncyB2ZXJzaW9uX2V0Yy4KKyAgICAJKG1haW4pOiBTZXQgcHJvZ3JhbV9uYW1lLgorICAgIAlVc2UgYXRleGl0IHRvIGNsb3NlIHN0ZG91dCBjYXJlZnVsbHkgdXBvbiBleGl0LgorCitjb21taXQgMWJmZGEzODU5ZTNmNmQxOWNmZGZmNDc5NGRhNWQxNTBiZWM0YzZiMworQXV0aG9yOiBKaW0gTWV5ZXJpbmcgPGppbUBtZXllcmluZy5uZXQ+CitEYXRlOiAgIFN1biBGZWIgMjUgMTg6NDQ6MzAgMjAwNyArMDEwMAorCisgICAgQWRkIGEgYnVuY2ggb2YgLmdpdGlnbm9yZSBmaWxlcy4KKworY29tbWl0IDdhNDZiNzBlNWVjYzBiMWViOTdlODcxNThlMmNhMDgxNmQ2MzIxNGUKK0F1dGhvcjogSmltIE1leWVyaW5nIDxqaW1AbWV5ZXJpbmcubmV0PgorRGF0ZTogICBTdW4gRmViIDI1IDE4OjQ0OjMwIDIwMDcgKzAxMDAKKworICAgIAlBdm9pZCBhIGdjYyBmb3JtYXQgd2FybmluZzoKKyAgICAJKiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jIChfZG9faGVscCk6IFVzZSBmcHV0cywgbm90IHByaW50Zi4KKworY29tbWl0IDE3ZTUwMzZiZjRlNGU1Yzg4Yjk0NTYyNDMyZTEwZDFhZTNiMmIxYjAKK0F1dGhvcjogSmltIE1leWVyaW5nIDxqaW1AbWV5ZXJpbmcubmV0PgorRGF0ZTogICBTdW4gRmViIDI1IDE4OjQ0OjMwIDIwMDcgKzAxMDAKKworICAgIAlSZW1vdmUgbm93LWdlbmVyYXRlZCBmaWxlcy4KKyAgICAJKiBwby9jYS5wbywgcG8vY3MucG8sIHBvL2RhLnBvLCBwby9kZS5wbywgcG8vZXMucG8sIHBvL2ZyLnBvOgorICAgIAkqIHBvL2dsLnBvLCBwby9pZC5wbywgcG8vaXQucG8sIHBvL2phLnBvLCBwby9ubC5wbywgcG8vbm4ucG86CisgICAgCSogcG8vcGwucG8sIHBvL3B0LnBvLCBwby9wdF9CUi5wbywgcG8vcnUucG86CisgICAgCSogcG8vc3YucG8sIHBvL3RyLnBvLCBwby91ay5wbywgcG8vdmkucG8sIHBvL3poX0NOLnBvLCBwby96aF9UVy5wbzoKKyAgICAJKiBwby9NYWtldmFyczogUmVtb3ZlIG5vdy1nZW5lcmF0ZWQgZmlsZS4KKyAgICAJKiBwby9wYXJ0ZWQucG90OiBSZW1vdmUgLWdlbmVyYXRlZCBmaWxlLgorCitjb21taXQgNzIwYzAzOTg2ZDNkOWUxNThjNTRiYmU4OWFmYTk3MGMxZTNiZTYwZQorQXV0aG9yOiBKaW0gTWV5ZXJpbmcgPGppbUBtZXllcmluZy5uZXQ+CitEYXRlOiAgIFN1biBGZWIgMjUgMTg6NDQ6MzAgMjAwNyArMDEwMAorCisgICAgCW12IHBhcnRlZC5tNCBpbnRvIG5ldyBkaXIsIG00LworICAgIAorICAgIAkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogUmVtb3ZlIHBhcnRlZC5tNC4KKyAgICAJTm93IHRoYXQgaXQncyBpbiBtNCwgaXQncyBpbmNsdWRlZCBhdXRvbWF0aWNhbGx5LgorICAgIAkoYWNsb2NhbF9EQVRBKTogUmVtb3ZlIHVubmVjZXNzYXJ5IGRlZmluaXRpb24uCisKK2NvbW1pdCA0MDc1OGYxYmQ5MDlmOTI3ZTgxZjlhNTIzZmM0MTY5ZTE4NTcyZWVjCitBdXRob3I6IEppbSBNZXllcmluZyA8amltQG1leWVyaW5nLm5ldD4KK0RhdGU6ICAgU3VuIEZlYiAyNSAxODo0NDozMCAyMDA3ICswMTAwCisKKyAgICAJKiBsaWJwYXJ0ZWQvdGVzdHMvbGFiZWwuYzogRmFpbCBpZiBfY3JlYXRlX2Rpc2sgcmV0dXJucyBOVUxMLgorICAgIAlNYWtlIGdsb2JhbCBhbmQgZnVuY3Rpb25zIHN0YXRpYy4KKyAgICAJKiBsaWJwYXJ0ZWQvdGVzdHMvY29tbW9uLmMgKF9jcmVhdGVfZGlzayk6IEhhbmRsZSBmb3BlbiBmYWlsdXJlLgorICAgIAlIYW5kbGUgZmNsb3NlIGZhaWx1cmUuCisKK2NvbW1pdCBkZWE3MWY1MDNjNThkMzliYTVhNzkwMWM2NzVmM2RjYzQ1MjI5NjJkCitBdXRob3I6IEppbSBNZXllcmluZyA8amltQG1leWVyaW5nLm5ldD4KK0RhdGU6ICAgU3VuIEZlYiAyNSAxODo0NDozMCAyMDA3ICswMTAwCisKKyAgICAJSW5jbHVkZSA8Y29uZmlnLmg+IGZyb20gZXZlcnkgLmMgZmlsZToKKyAgICAJKiBsaWJwYXJ0ZWQvdW5pdC5jLCBsaWJwYXJ0ZWQvdGltZXIuYzoKKyAgICAJKiBsaWJwYXJ0ZWQvY3MvbmF0bWF0aC5jLCBsaWJwYXJ0ZWQvY3MvY29uc3RyYWludC5jOgorICAgIAkqIGxpYnBhcnRlZC90ZXN0cy9sYWJlbC5jLCBsaWJwYXJ0ZWQvdGVzdHMvY29tbW9uLmM6CisgICAgCSogbGlicGFydGVkL2ZzL2ZhdC9jb3VudC5jLCBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzoKKyAgICAJKiBsaWJwYXJ0ZWQvZnMvZmF0L2NvbnRleHQuYywgbGlicGFydGVkL2ZzL2ZhdC9mYXRpby5jOgorICAgIAkqIGxpYnBhcnRlZC9mcy9mYXQvZmF0LmMsIGxpYnBhcnRlZC9mcy9mYXQvY2xzdGR1cC5jOgorICAgIAkqIGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmMsIGxpYnBhcnRlZC9mcy9mYXQvdHJhdmVyc2UuYzoKKyAgICAJKiBsaWJwYXJ0ZWQvZnMvZmF0L3RhYmxlLmMsIGxpYnBhcnRlZC9mcy9mYXQvY2FsYy5jOgorICAgIAkqIGxpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jLCBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6CisgICAgCSogbGlicGFydGVkL2xhYmVscy9kdmguYywgbGlicGFydGVkL2xhYmVscy9lZmlfY3JjMzIuYzoKKyAgICAJKiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYywgcGFydGVkL2NvbW1hbmQuYzoKKyAgICAJKiBsaWJwYXJ0ZWQvdGVzdHMvbGFiZWwuYywgbGlicGFydGVkL3Rlc3RzL2NvbW1vbi5jOgorCitjb21taXQgMmNjMjc5MmEyZmYzNmZkOWY5NTk1NzdjMWY2MDU4ZDllYjliYTNkZAorQXV0aG9yOiBKaW0gTWV5ZXJpbmcgPGppbUBtZXllcmluZy5uZXQ+CitEYXRlOiAgIFN1biBGZWIgMjUgMTg6NDQ6MzAgMjAwNyArMDEwMAorCisgICAgCSogbGlicGFydGVkL2xpYnBhcnRlZC5jOiBJbmNsdWRlICJjb25maWdtYWtlLmgiIGZvciBMT0NBTEVESVIgZGVmbi4KKworY29tbWl0IGUwOGRlYTY3MmY4ZjA3MTVhY2Q4NzMxMTcxMjFmNzE2NTY1ZDI5MmMKK0F1dGhvcjogSmltIE1leWVyaW5nIDxqaW1AbWV5ZXJpbmcubmV0PgorRGF0ZTogICBTdW4gRmViIDI1IDE4OjQ0OjMwIDIwMDcgKzAxMDAKKworICAgIHBhcnRlZDogRGV0ZWN0L3JlcG9ydCBzdGRvdXQgd3JpdGUgZXJyb3JzLgorICAgIAkqIHBhcnRlZC9wYXJ0ZWQuYzogSW5jbHVkZSAiY2xvc2VvdXQuaCIgZm9yIGNsb3NlX3N0ZG91dC4KKyAgICAJSW5jbHVkZSAiY29uZmlnbWFrZS5oIiBmb3IgTE9DQUxFRElSIGRlZmluaXRpb24uCisgICAgCUluY2x1ZGUgInZlcnNpb24tZXRjLmgiIGZvciB2ZXJzaW9uX2V0YyBwcm90b3R5cGUuCisgICAgCURlY2xhcmUgZ2xvYmFsLCBwcm9ncmFtX25hbWUuCisgICAgCShQUk9HUkFNX05BTUUsIEFVVEhPUlMpOiBEZWZpbmUuCisgICAgCShfdmVyc2lvbik6IFVzZSBnbnVsaWIncyB2ZXJzaW9uX2V0Yy4KKyAgICAJKG1haW4pOiBTZXQgcHJvZ3JhbV9uYW1lLgorICAgIAlVc2UgYXRleGl0IHRvIGNsb3NlIHN0ZG91dCBjYXJlZnVsbHkgdXBvbiBleGl0LgorCitjb21taXQgMjk0NGExZTEzOTc4MjcyOWI5ODBkNTVkMDEzOTRiNDE0ODMyMWFiMAorQXV0aG9yOiBKaW0gTWV5ZXJpbmcgPGppbUBtZXllcmluZy5uZXQ+CitEYXRlOiAgIFN1biBGZWIgMjUgMTg6NDQ6MjkgMjAwNyArMDEwMAorCisgICAgSW5jbHVkZSA8Y29uZmlnLmg+LCBub3QgIi4uL2NvbmZpZy5oIi4KKworY29tbWl0IGUyNTgzMDYwZTNiYTFiOTQ0NjVhNzlmOWNjOGZhZGYwMmVlN2I1ZWYKK0F1dGhvcjogSmltIE1leWVyaW5nIDxqaW1AbWV5ZXJpbmcubmV0PgorRGF0ZTogICBTdW4gRmViIDI1IDE4OjQzOjUzIDIwMDcgKzAxMDAKKworICAgIEJlZ2luIGFkanVzdGluZyBNYWtlZmlsZS5hbSBmaWxlcyB0byB1c2UgZ251bGliLgorICAgICogbGlicGFydGVkL01ha2VmaWxlLmFtIChwYXJ0ZWRpbmNsdWRlZGlyKTogQWRkIC1JJCh0b3Bfc3JjZGlyKS9saWIuCisgICAgKiBwYXJ0ZWQvTWFrZWZpbGUuYW0gKHBhcnRlZF9MREFERCk6IEFkZCBsaWIvbGlicGFydGVkLmxhLgorICAgIChwYXJ0ZWRpbmNsdWRlZGlyKTogQWRkIC1JJCh0b3Bfc3JjZGlyKS9saWIuCisKK2NvbW1pdCA2Njc2MGVlNDJmZDhjNjI3Y2IyYTMyZmVhMjM5MDhmM2UwOGQxNjRjCitBdXRob3I6IEppbSBNZXllcmluZyA8amltQG1leWVyaW5nLm5ldD4KK0RhdGU6ICAgU3VuIEZlYiAyNSAxODozODo0MSAyMDA3ICswMTAwCisKKyAgICBVcGRhdGUgdG8gdXNlIGdudWxpYiwgYW5kIG5ld2VyIGF1dG9jb25mLCBhdXRvbWFrZSBjb252ZW50aW9ucy4KKyAgICAKKyAgICAJQWRkIGJ1aWxkLWZyb20tY2hlY2tvdXQgaW5zdHJ1Y3Rpb25zLgorICAgIAkqIFJFQURNRS1oYWNraW5nOiBOZXcgZmlsZS4gIE1vc3RseSBjb3BpZWQgZnJvbSBjb3JldXRpbHMnCisgICAgCVJFQURNRS1jdnMuCisgICAgCSogYm9vdHN0cmFwOiBHZW5lcmF0ZSBDaGFuZ2VMb2cgaGVyZSwgaWYgbmVlZGVkL3Bvc3NpYmxlLAorICAgIAliZWZvcmUgaW52b2tpbmcgdG9vbHMgdGhhdCByZXF1aXJlIGl0cyBwcmVzZW5jZS4KKyAgICAJKiBhdXRvZ2VuLnNoOiBSZW1vdmUgdGhpcyBmaWxlLiAgSXQncyBzdXBlcnNlZGVkIGJ5IGJvb3RzdHJhcC4KKyAgICAKKyAgICAJVXNlIGdudWxpYiwgbW9kZXJuaXplIHNvbWUgdXNlcyBvZiBhdXRvY29uZiwgYXV0b21ha2UsIGV0Yy4KKyAgICAJKiBib290c3RyYXAsIGJvb3RzdHJhcC5jb25mOiBOZXcgZmlsZXMuCisgICAgCisgICAgCSogY29uZmlndXJlLmFjOiBNb2Rlcm5pemUuCisgICAgCVJlcXVpcmUgdGhlIGxhdGVzdCBzdGFibGUgcmVsZWFzZXM6IGF1dG9jb25mLTIuNjEsIGF1dG9tYWtlLTEuMTAuCisgICAgCVJlcXVpcmUgZ2V0dGV4dC0wLjE1LgorICAgIAlVc2UgbW9yZSBtb2Rlcm4gZm9ybSBvZiBBQ19JTklULCBldGMuCisgICAgCU5vdyB0aGF0IHRoZSB2ZXJzaW9uIHN0cmluZyBtdXN0IGJlIGhhcmQtY29kZWQgaW4gdGhlIEFDX0lOSVQgbGluZSwKKyAgICAJYWRkIGNvZGUgdG8gZW5zdXJlIGl0IGFncmVlcyB3aXRoIHRoZSBQRURfKiBhbmQgTFRfKiB2YXJpYWJsZXMuCisgICAgCVVzZSBBTV9DUFBGTEFHUywgbm90IENGTEFHUworICAgIAlSZW1vdmUgb2Jzb2xldGUgc2V0dGluZyBvZiBBTExfTElOR1VBUy4KKyAgICAJRG9uJ3Qgc2V0IENGTEFHUz0tRF9HTlVfU09VUkNFPTEgZXhwbGljaXRseSAsIHNpbmNlIHRoYXQncyBhbHJlYWR5CisgICAgCWRvbmUgdmlhIEFDX0dOVV9TT1VSQ0UsIHdoaWNoIGdudWxpYiBwdWxscyBpbiBieSBkZWZhdWx0LAorICAgIAl0aHJvdWdoIGdsX0VBUkxZLgorICAgIAlVc2UgZ2xfSU5JVCBhbmQgZ2xfRUFSTFkuCisgICAgCisgICAgCSogTWFrZWZpbGUuYW0gKFNVQkRJUlMpOiBBZGQgbGliLgorICAgIAkoRVhUUkFfRElTVCk6IFJlbW92ZSBuYW1lcyB0aGF0IGFyZSBhdXRvbWF0aWNhbGx5IGluY2x1ZGVkLgorICAgIAkqIGxpYi9NYWtlZmlsZS5hbTogTmV3IGZpbGUuCisKK2NvbW1pdCBhNzk3NWI2OWE1MjY3NWY4YTFlZjM0NmQ0YjVlYmY5OTQyMDBjODhlCitBdXRob3I6IEFuYW50IE5hcmF5YW5hbiA8YW5hbnRAdGhlZ2hvc3QubG9jYWw+CitEYXRlOiAgIEZyaSBGZWIgMjMgMTY6MTg6MzEgMjAwNyArMDUzMAorCisgICAgRml4IG1lbWxlYWtzLiBQYXRjaCB0aGFua3MgdG8gTWlrZSBIb21tZXkKKworY29tbWl0IDc4NTUxNzkxMjAxNjJjZDRkZThiZDdkYzA0ZTIxODA5YjhmMWQ0MTMKK0F1dGhvcjogRGViYXJzaGkgUmF5IDxyaXNoaUBnbnUub3JnPgorRGF0ZTogICBNb24gRmViIDE5IDEwOjU4OjQ2IDIwMDcgKzA1MzAKKworICAgIEludHJvZHVjZWQgTUFJTlRBSU5FUkNMRUFORklMRVMgaW4gTWFrZWZpbGUuYW0gZm9yIGNhcnJ5aW5nIG91dCAnbWFrZSAKK21haW50YWluZXItY2xlYW4nLgorCitjb21taXQgOWQ0YTQyODk2NTk2MjVlZjE0M2U4Yzc0YTI2NjU0YTdjNGRhMjkwNgorQXV0aG9yOiBEZWJhcnNoaSBSYXkgPHJpc2hpQGdudS5vcmc+CitEYXRlOiAgIE1vbiBGZWIgMTkgMDk6MDk6NDQgMjAwNyArMDUzMAorCisgICAgQ2xlYW5pbmcgdXAgbmVzdGVkIHN0cnVjdHMgJiB1bmlvbnMuCisKK2NvbW1pdCA0NTI5ZjY2MjU2MjJiNDU5OTc1YzU5OTIxZjQzNjBhZmU2YjdlYjVjCitBdXRob3I6IEppbSBNZXllcmluZyA8amltQG1leWVyaW5nLm5ldD4KK0RhdGU6ICAgRnJpIEZlYiAxNiAxNTo1NTo0MCAyMDA3ICswMTAwCisKKyAgICBBdm9pZCBjb21waWxlciB3YXJuaW5ncyB3aXRoIGdjYyAtV2FsbCAtV3NoYWRvdy4KKyAgICAKKyAgICAqIGxpYnBhcnRlZC9hcmNoL2xpbnV4LmMgKGluaXRfaWRlKTogQWRkIG1pc3NpbmcgImJyZWFrIiBhdCBlbmQgb2YKKyAgICBmaW5hbCBjYXNlOiBzdG10LgorICAgIEFkZCAiZGVmYXVsdDoiIGluIHRoZSBzYW1lIHN3aXRjaCB0byBhdm9pZCBhIGNvbXBpbGVyIHdhcm5pbmcuCisgICAgKiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYyAoZmF0X2Jvb3Rfc2VjdG9yX2FuYWx5c2UpOiBMaWtld2lzZS4KKyAgICAqIGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmMgKGFza190eXBlKTogTGlrZXdpc2UuCisgICAgKiBsaWJwYXJ0ZWQvZnMvZmF0L3RyYXZlcnNlLmMgKGZhdF9kaXJfZW50cnlfc2V0X2ZpcnN0X2NsdXN0ZXIpOgorICAgIExpa2V3aXNlLgorICAgICogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYyAoX2NhbGNfZmF0X2VudHJ5X29mZnNldCk6IExpa2V3aXNlLgorICAgIAorICAgICogcGFydGVkL3BhcnRlZC5jIChfdGltZXJfaGFuZGxlcik6IENhc3QgdGltZV90IHZhbHVlcyB0byAiaW50IgorICAgIHRvIGFncmVlIHdpdGggJWQgcHJpbnRmIGZvcm1hdC4KKyAgICAoZ190aW1lcik6IFJlbmFtZSBmaWxlLXNjb3BlZCBnbG9iYWwgZnJvbSBzaGFkb3dlZCAidGltZXIiLgorICAgIFVwZGF0ZSBhbGwgdXNlcyBvZiB0aGUgZ2xvYmFsLgorICAgICh2ZXJzaW9uX21zZyk6IFJlbW92ZSBkZWNsIG9mIHVudXNlZCBnbG9iYWwuCisgICAgCisgICAgKiBwYXJ0ZWQvdWkuYyAoY3VycmVudF9leGNlcHRpb25fb3B0KTogUmVtb3ZlIGRlY2wgb2YgdW51c2VkIGdsb2JhbC4KKyAgICAKKyAgICAqIGxpYnBhcnRlZC9maWxlc3lzLmMgKHBlZF9maWxlX3N5c3RlbV9jbG9zZSk6IFJlbW92ZSB1bnVzZWQgbGFiZWwuCisgICAgKiBsaWJwYXJ0ZWQvdW5pdC5jIChwYXJzZV9jaHMpOiBMaWtld2lzZS4KKyAgICAKKyAgICAqIGxpYnBhcnRlZC9kZWJ1Zy5jIChwZWRfYXNzZXJ0KTogVXNlICJpbnQiIGFzIHR5cGUgb2YgYmFja3RyYWNlCisgICAgcmV0dXJuIHZhbHVlLCBub3Qgc2l6ZV90LgorICAgIAorICAgICogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmMgKHJlaXNlcmZzX2NoZWNrKToKKyAgICBHdWFyZCBkZWNsYXJhdGlvbiBvZiBsb2NhbCB3aXRoICNpZmRlZiBIQVZFX1JFSVNFUkZTX0ZTX0NIRUNLLAorICAgIHNpbmNlIGl0J3MgdXNlZCBvbmx5IGluIGEgc2ltaWxhcmx5LWd1YXJkZWQgYmxvY2suCisgICAgKHJlaXNlcmZzX2ZzX2NoZWNrKTogTGlrZXdpc2UgZm9yIHRoaXMgZmlsZS1zY29wZWQgZ2xvYmFsLgorICAgIAorICAgIEF2b2lkIHdhcm5pbmdzIGFib3V0IHVudXNlZCBmaWxlLXNjb3BlZCBnbG9iYWwgdmFyaWFibGVzLgorICAgICogbGlicGFydGVkL2ZzL2hmcy9oZnMuaCAoaGZzX3R5cGUsIGhmc3BsdXNfdHlwZSk6IFJlbW92ZSB0aGVzZQorICAgIGRlY2xhcmF0aW9ucyBvZiBmaWxlLXNjb3BlZCBzdGF0aWMgdmFyaWFibGVzLgorICAgICogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzogUHV0IHRoZW0gaGVyZSwgaW5zdGVhZC4KKyAgICAKKyAgICAqIGxpYnBhcnRlZC9mcy9mYXQvdGFibGUuYyAoX3Rlc3RfY29kZV9hY3RpdmUpOiBSZW1vdmUgdW51c2VkIGZ1bmN0aW9uLgorICAgIAorICAgICogbGlicGFydGVkL2FyY2gvbGludXguYzogQWRkIGNhc3RzIHRvIGF2b2lkIHBlcmZvcm1pbmcKKyAgICBwb2ludGVyIGFyaXRobWV0aWMgb24gInZvaWQgKiIgcG9pbnRlcnMuCisgICAgCisgICAgKiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGVfcGx1cy5jIChoZnNwbHVzX2ZpbGVfcmVhZCk6CisgICAgRG9uJ3QgZG8gcG9pbnRlciBhcml0aG1ldGljIG9uIGEgInZvaWQgKiIgcG9pbnRlci4KKyAgICAoaGZzcGx1c19maWxlX3dyaXRlKTogTGlrZXdpc2UuCisgICAgCisgICAgKiBsaWJwYXJ0ZWQvZnMvZmF0L2NvdW50LmMgKGZsYWdfdHJhdmVyc2VfZGlyKTogTW92ZSBkZWNsIG9mCisgICAgdW51c2VkIGxvY2FsIGludG8gI2lmLTAnZCBibG9jayB3aGVyZSBpdCBpcyByZWZlcmVuY2VkLgorICAgIChwcmludF9jaGFpbik6IEd1YXJkIGRlZmluaXRpb24gd2l0aCAjaWZkZWYgUEVEX1ZFUkJPU0UsCisgICAgc2luY2UgdGhlIHNvbGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24gaXMgZ3VhcmRlZCB0aGUgc2FtZSB3YXkuCisgICAgCisgICAgKiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzogKF9hbWlnYV92YWxpZF9ibG9ja19pZCk6CisgICAgUmVtb3ZlIHVudXNlZCBmdW5jdGlvbi4KKyAgICAoX2FtaWdhX2dldF9ic3RyKTogTGlrZXdpc2UuCisgICAgKF9hbWlnYV9zZXRfYnN0cik6IExpa2V3aXNlLgorICAgIAorICAgIFJlbW92ZSB1bnVzZWQgbGFiZWxzIGFuZC9vciBkZWNsYXJhdGlvbnMgb2YgdW51c2VkIHZhcmlhYmxlcy4KKyAgICAqIHBhcnRlZC91aS5jIChfcmVhZGxpbmUpOiBMaWtld2lzZS4KKyAgICAqIGxpYnBhcnRlZC9jcy9jb25zdHJhaW50LmMgKF9jb25zdHJhaW50X2dldF9jYW5vbmljYWxfc3RhcnRfcmFuZ2UpOgorICAgIExpa2V3aXNlLgorICAgICogbGlicGFydGVkL2NzL2dlb20uYyAocGVkX2dlb21ldHJ5X3JlYWQpOiBMaWtld2lzZS4KKyAgICAqIGxpYnBhcnRlZC9mcy9hbWlnYS9hcGZzLmMgKF9nZW5lcmljX2FwZnNfcHJvYmUpOiBMaWtld2lzZS4KKyAgICAqIGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfbWtmcy5jIChleHQyX21rZnNfd3JpdGVfbWV0YSk6IExpa2V3aXNlLgorICAgICogbGlicGFydGVkL2Rpc2suYzogTGlrZXdpc2UuCisgICAgKiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOiBMaWtld2lzZS4KKyAgICAqIGxpYnBhcnRlZC9mcy9mYXQvZmF0LmM6IExpa2V3aXNlLgorICAgICogbGlicGFydGVkL2ZzL2ZhdC9jbHN0ZHVwLmM6IExpa2V3aXNlLgorICAgICogbGlicGFydGVkL2ZzL2ZhdC9jYWxjLmM6IExpa2V3aXNlLgorICAgICogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOiBMaWtld2lzZS4KKyAgICAqIGxpYnBhcnRlZC9mcy9hbWlnYS9hZmZzLmM6IExpa2V3aXNlLgorICAgICogbGlicGFydGVkL2ZzL2FtaWdhL2FzZnMuYzogTGlrZXdpc2UuCisgICAgKiBsaWJwYXJ0ZWQvbGFiZWxzL2FpeC5jOiBMaWtld2lzZS4KKyAgICAqIGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6IExpa2V3aXNlLgorICAgICogbGlicGFydGVkL2xhYmVscy9wYzk4LmM6IExpa2V3aXNlLgorICAgICogbGlicGFydGVkL2xhYmVscy9tYWMuYzogTGlrZXdpc2UuCisgICAgKiBsaWJwYXJ0ZWQvbGFiZWxzL2Rvcy5jOiBMaWtld2lzZS4KKyAgICAqIGxpYnBhcnRlZC9sYWJlbHMvbG9vcC5jIChsb29wX2FsbG9jKTogTGlrZXdpc2UuCisgICAgKiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOiBMaWtld2lzZS4KKyAgICAqIGxpYnBhcnRlZC9sYWJlbHMvZHZoLmMgKGR2aF9hbGxvYyk6IExpa2V3aXNlLgorICAgIChkdmhfcmVhZCkgWyFESVNDT1ZFUl9PTkxZXTogQWRkICJkZWZhdWx0OiIgaW4gYSBzd2l0Y2guCisgICAgCisgICAgKiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmMgKGZkYXNkX3JlcmVhZF9wYXJ0aXRpb25fdGFibGUpOgorICAgIFJlbW92ZSBkZWNsIG9mIHVudXNlZCBsb2NhbChzKS4KKyAgICAoZmRhc2RfZ2V0X3BhcnRpdGlvbl9kYXRhKTogTGlrZXdpc2UuCisgICAgKGZkYXNkX3BhcnRpdGlvbl90eXBlKTogUmVtb3ZlIHVudXNlZCBmdW5jdGlvbi4KKyAgICAoZmRhc2Rfd3JpdGVfdnRvY19sYWJlbHMpOiBMaWtld2lzZS4KKyAgICAoZmRhc2RfY2hhbmdlX3ZvbHNlcik6IExpa2V3aXNlLgorICAgIChmZGFzZF9jaGVja192b2xzZXIpOiBMaWtld2lzZS4KKyAgICAoZmRhc2RfcmVyZWFkX3BhcnRpdGlvbl90YWJsZSk6IExpa2V3aXNlLgorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IEppbSBNZXllcmluZyA8amltQG1leWVyaW5nLm5ldD4KKworY29tbWl0IGNiZjViNGRhMDk1NjM3ZTE4YWI2ZjJiOGE1MmE1MDZhNDEyNjg0NWIKK0F1dGhvcjogSmltIE1leWVyaW5nIDxqaW1AbWV5ZXJpbmcubmV0PgorRGF0ZTogICBUaHUgRmViIDE1IDE2OjA1OjE3IDIwMDcgKzAxMDAKKworICAgICogbGlicGFydGVkL2xhYmVscy9yZGIuYyAoYW1pZ2FfcmVhZCk6IFJlbW92ZSBkZWNsIG9mIHVudXNlZCBsb2NhbChzKS4KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBKaW0gTWV5ZXJpbmcgPGppbUBtZXllcmluZy5uZXQ+CisKK2NvbW1pdCAzZjNhZjRhZmZlMmVlMDM3NjIwYzcxN2FjYzdkM2ZjODQ0MjI1NzRjCitBdXRob3I6IEppbSBNZXllcmluZyA8amltQG1leWVyaW5nLm5ldD4KK0RhdGU6ICAgVGh1IEZlYiAxNSAxNTo1NjoyMyAyMDA3ICswMTAwCisKKyAgICAqIGxpYnBhcnRlZC9sYWJlbHMvYnNkLmMgKGJzZF9wYXJ0aXRpb25fbmV3KTogUmVtb3ZlIHVudXNlZCBsYWJlbC4KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBKaW0gTWV5ZXJpbmcgPGppbUBtZXllcmluZy5uZXQ+CisKK2NvbW1pdCA3NGViNjJjNTBkN2E2MTA3ZjdjOWRjYjUyNzMwNjBmMjBkYTk5MGI4CitBdXRob3I6IEppbSBNZXllcmluZyA8amltQG1leWVyaW5nLm5ldD4KK0RhdGU6ICAgVGh1IEZlYiAxNSAxNTo1Mzo0NCAyMDA3ICswMTAwCisKKyAgICAqIGxpYnBhcnRlZC9sYWJlbHMvZGFzZC5jOiBSZW1vdmUgdW51c2VkIGxhYmVscyBhbmQgZGVjbGFyYXRpb25zCisgICAgCisgICAgb2YgdW51c2VkIHZhcmlhYmxlcy4KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBKaW0gTWV5ZXJpbmcgPGppbUBtZXllcmluZy5uZXQ+CisKK2NvbW1pdCA5M2NhMjBkOGFlYmQwZDA0ZGJiMDBiODZhMjkwM2M5OTJlNTlhOTZiCitBdXRob3I6IERlYmFyc2hpIFJheSA8cmlzaGlAZ251Lm9yZz4KK0RhdGU6ICAgRnJpIEZlYiAxNiAxMDoxMDoxNyAyMDA3ICswNTMwCisKKyAgICBGaXggdGhlIHN0eWxlIG9mIHR5cGVkZWYsIGVudW0sIHN0cnVjdCBhbmQgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpLgorCitjb21taXQgZjQwMjJhMzVmYWYwMWM1Mjg2YWI1YjQ0YmNlMDgwZTgwZDMxMDA5OQorQXV0aG9yOiBEZWJhcnNoaSBSYXkgPHJpc2hpQGdudS5vcmc+CitEYXRlOiAgIFRodSBGZWIgMTUgMTA6MjU6NDEgMjAwNyArMDUzMAorCisgICAgRGVwcmVjYXRpbmcgcGVkX1tyZWdpc3Rlcnx1bnJlZ2lzdGVyXV9kaXNrX3R5cGUgaW4gZmF2b3VyIG9mIAorcGVkX2Rpc2tfdHlwZV9bcmVnaXN0ZXJ8dW5yZWdpc3Rlcl0uCisKK2NvbW1pdCAzOTY1OTY1YjM0MTNkZjExZDYzMDY3MDQ0Nzg0OTBmNmU1YjcyNTQ5CitBdXRob3I6IEppbSBNZXllcmluZyA8amltQG1leWVyaW5nLm5ldD4KK0RhdGU6ICAgVHVlIEZlYiAxMyAyMjo1MTo1NiAyMDA3ICswMTAwCisKKyAgICBVc2UgbGlnaHRlci13ZWlnaHQgZnB1dHMgYW5kIHB1dGNoYXIgaW4gcGxhY2Ugb2YgcHJpbnRmLCB3aGVuIHBvc3NpYmxlLgorICAgIAorICAgICogcGFydGVkL3VpLmMgKHdpcGVfbGluZSwgX2R1bXBfaGlzdG9yeSwgcmVzZXRfZW52KToKKyAgICAoc2lnc2Vndl9oYW5kbGVyLCBzaWdmcGVfaGFuZGxlciwgc2lnaWxsX2hhbmRsZXIsIF9yZWFkbGluZSk6CisgICAgKGhlbHBfbXNnLCBpbnRlcmFjdGl2ZV9tb2RlLCBub25faW50ZXJhY3RpdmVfbW9kZSk6IFVzZSBwdXRzLAorICAgIGZwdXRzLCBhbmQgcHV0Y2hhciBpbiBwbGFjZSBvZiBwcmludGYsIHdoZW4gcG9zc2libGUuCisgICAgKHJlc2V0X2Vudik6IENvcnJlY3QgbWlzbGVhZGluZyBpbmRlbnRhdGlvbi4KKyAgICAod2lwZV9saW5lKTogU3BsaXQgYSBsb25nIHN0cmluZy4KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBKaW0gTWV5ZXJpbmcgPGppbUBtZXllcmluZy5uZXQ+CisKK2NvbW1pdCBmNzU3MTU2ZDg0NmM3MGE4OGI5MGFiM2ZmNDdmZjM4NWVkMTM2YTU2CitBdXRob3I6IEppbSBNZXllcmluZyA8amltQG1leWVyaW5nLm5ldD4KK0RhdGU6ICAgV2VkIEZlYiAxNCAxMjozNzo0NSAyMDA3ICswMTAwCisKKyAgICBNYWtlIGl0IHNvICJtYWtlIGRpc3RjaGVjayIgcGFzc2VzLgorICAgIAorICAgICogZG9jL3BvNGEubWsgKHVwZGF0ZXBvKTogRG9uJ3QgY2hva2Ugd2hlbiAqLiQobGFuZykucG8gbWF0Y2hlcyBubyBmaWxlLgorICAgICogZG9jL0MvTWFrZWZpbGUuYW0gKHVwZGF0ZXBvKTogRG9uJ3QgZG8gYW55dGhpbmcgd2hlbiAkKHNyY2RpcikgaXMgbm90IAord3JpdGFibGUuCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogSmltIE1leWVyaW5nIDxqaW1AbWV5ZXJpbmcubmV0PgorCitjb21taXQgNGFlNjkwMzUyNWU2MDIwMmVmYTc4ZWJlYzMzNmQxYmIyYzNiYjZiNAorQXV0aG9yOiBEZWJhcnNoaSBSYXkgPHJpc2hpQGdudS5vcmc+CitEYXRlOiAgIFdlZCBGZWIgMTQgMjI6MTk6NDIgMjAwNyArMDUzMAorCisgICAgRml4ZWQgdGhlIGNvcHlyaWdodCBub3RpY2VzLgorCitjb21taXQgNjliNzMzZmNlZGM4MGQ3MTkyZmI5OGMyYWRlMDA2OTM4YzZkNThmOAorQXV0aG9yOiBEZWJhcnNoaSBSYXkgPHJpc2hpQGdudS5vcmc+CitEYXRlOiAgIFdlZCBGZWIgMTQgMjE6Mzk6NTcgMjAwNyArMDUzMAorCisgICAgQ2xlYW5lZCB1cCB0aGUgZm9ybWF0dGluZyBvZiBBVVRIT1JTLgorCitjb21taXQgZDI5YzkxN2JmNGEyMmEwODRkZWVjZjc2OTM0NmYwMzBiODdlMGViOAorQXV0aG9yOiBEZWJhcnNoaSBSYXkgPHJpc2hpQGdudS5vcmc+CitEYXRlOiAgIFdlZCBGZWIgMTQgMjA6MjU6MTIgMjAwNyArMDUzMAorCisgICAgVGlkeWluZyB1cCB0aGUgZm9ybWF0dGluZyBhbmQgY29tbWVudHMgaW4gbGludXhfc3dhcC5jLgorCitjb21taXQgOTUxZTgyZmMwYzEwMmFhODE4N2NmMTlkZTQ5YzlmNTA0ZWFhNjBmNgorQXV0aG9yOiBKaW0gTWV5ZXJpbmcgPGppbUBtZXllcmluZy5uZXQ+CitEYXRlOiAgIFR1ZSBGZWIgMTMgMjE6MDI6MDggMjAwNyArMDEwMAorCisgICAgRG9uJ3QgZGVmaW5lIF9HTlVfU09VUkNFIG1hbnVhbGx5LgorICAgIAorICAgIEl0J3MgYmV0dGVyIG5vdCB0byBkZWZpbmUgX0dOVV9TT1VSQ0UgbWFudWFsbHkuCisgICAgQnkgdXNpbmcgQUNfR05VX1NPVVJDRSwgeW91IGdldCB0aGUgZGVmaW5pdGlvbiBpbiBleGFjdGx5IG9uZSBwbGFjZToKKyAgICBpbiBjb25maWcuaC4gIEkgdmVyaWZpZWQgdGhhdCBlYWNoIGFmZmVjdGVkIGZpbGUgYWxzbyBpbmNsdWRlcyBjb25maWcuaC4KKyAgICAKKyAgICBEb24ndCBkZWZpbmUgX0dOVV9TT1VSQ0UgbWFudWFsbHkuCisgICAgKiBjb25maWd1cmUuYWM6IFVzZSBBQ19HTlVfU09VUkNFIGluc3RlYWQuCisgICAgKiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzogUmVtb3ZlIGRlZmluaXRpb24gb2YgX0dOVV9TT1VSQ0UuCisgICAgKiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOiBMaWtld2lzZS4KKyAgICAqIGxpYnBhcnRlZC9kZXZpY2UuYzogTGlrZXdpc2UuCisgICAgKiBwYXJ0ZWQvdGFibGUuYzogTGlrZXdpc2UuCisgICAgKiBwYXJ0ZWQvdGFibGUuaDogTGlrZXdpc2UuCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogSmltIE1leWVyaW5nIDxqaW1AbWV5ZXJpbmcubmV0PgorCitjb21taXQgMmQyZTIwZmMzNjZjMDg1MTlmZGFjMzNkNzQ2ODZkYTg3ZDgyOTFmNQorQXV0aG9yOiBKaW0gTWV5ZXJpbmcgPGppbUBtZXllcmluZy5uZXQ+CitEYXRlOiAgIFR1ZSBGZWIgMTMgMTc6MTA6MTggMjAwNyArMDEwMAorCisgICAgUmVtb3ZlIHNvbWUgI2lmZGVmcworICAgIAorICAgIFJlbW92ZSBzb21lICNpZmRlZnMuCisgICAgKiBwYXJ0ZWQvdGFibGUuYyAoTF8pOiBkZWZpbmUuCisgICAgUmVtb3ZlIGluLWZ1bmN0aW9uICNpZmRlZnM7IHVzZSBMXyhzdHIpIGluc3RlYWQuCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogSmltIE1leWVyaW5nIDxqaW1AbWV5ZXJpbmcubmV0PgorCitjb21taXQgZjM4Y2IyMDkxZTVmOWNkMzAwYjRiYzBhYTkzMTM4YzIwNWQzNDEzNQorQXV0aG9yOiBKaW0gTWV5ZXJpbmcgPGppbUBtZXllcmluZy5uZXQ+CitEYXRlOiAgIFR1ZSBGZWIgMTMgMTc6MDg6MzUgMjAwNyArMDEwMAorCisgICAgKiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmMgKEdFVEFSRyk6IFJlbW92ZSB1bnVzZWQgZGVmaW5pdGlvbi4KKyAgICAKKyAgICBBIHRpbnkgY2hhbmdlLi4uCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogSmltIE1leWVyaW5nIDxqaW1AbWV5ZXJpbmcubmV0PgorCitjb21taXQgNzA3NGExNjUwMGJjMjc1YTRmNWJiNGJkMGEwMmQyNmIzYzgzYWU5YQorQXV0aG9yOiBPdGF2aW8gU2FsdmFkb3IgPG90YXZpb0Bvc3N5c3RlbXMuY29tLmJyPgorRGF0ZTogICBUdWUgRmViIDEzIDA5OjQ0OjMzIDIwMDcgLTAyMDAKKworICAgIENyZWF0ZSAnbTQnIGRpcmVjdG9yeSB3aGVuIGdlbmVyYXRpbmcgdGhlIGJ1aWxkaW5nIHN5c3RlbQorCitjb21taXQgZTNjMWVmMzQ4Y2VhNGFiOTk4MjI0ZGIzZTc3NjcyZGI5YjdhZjhkNworQXV0aG9yOiBKaW0gTWV5ZXJpbmcgPGppbUBtZXllcmluZy5uZXQ+CitEYXRlOiAgIE1vbiBGZWIgMTIgMjM6MzA6NDYgMjAwNyArMDEwMAorCisgICAgV29yayB3aXRoIGF1dG9tYWtlLTEuMTAuCisgICAgCisgICAgSSd2ZSBqdXN0IHRyaWVkIGJ1aWxkaW5nIHBhcnRlZCBmcm9tIHNjcmF0Y2ggKHJ1bm5pbmcgLi9hdXRvZ2VuLnNoCisgICAgYWZ0ZXIgZ2l0LWNsb25lKSBhbmQgaGl0IGEgY291cGxlIG9mIHNuYWdzOgorICAgIAorICAgIFdpdGhvdXQgYWNsb2NhbCdzIC1JIG00LCAuL2F1dG9nZW4uc2ggcHJvZHVjZWQgdGhpczoKKyAgICAKKyAgICAgIGNvbmZpZ3VyZS5hYzoxOTI6IHdhcm5pbmc6IG1hY3JvIGBBTV9HTlVfR0VUVEVYVF9WRVJTSU9OJyBub3QgZm91bmQgaW4gCitsaWJyYXJ5CisgICAgICBjb25maWd1cmUuYWM6MTkzOiB3YXJuaW5nOiBtYWNybyBgQU1fR05VX0dFVFRFWFQnIG5vdCBmb3VuZCBpbiBsaWJyYXJ5CisgICAgICBjb25maWd1cmUuYWM6MTkyOiBlcnJvcjogcG9zc2libHkgdW5kZWZpbmVkIG1hY3JvOiBBTV9HTlVfR0VUVEVYVF9WRVJTSU9OCisgICAgICAgICAgICBJZiB0aGlzIHRva2VuIGFuZCBvdGhlcnMgYXJlIGxlZ2l0aW1hdGUsIHBsZWFzZSB1c2UgCittNF9wYXR0ZXJuX2FsbG93LgorICAgICAgICAgICAgU2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uLgorICAgIAorICAgIFdpdGggYXV0b21ha2UtMS4xMCwgSSBnb3QgdGhpczoKKyAgICAKKyAgICAgICAgcGFydGVkL01ha2VmaWxlLmFtOjU6IGNvbXBpbGluZyBgY29tbWFuZC5jJyB3aXRoIHBlci10YXJnZXQgZmxhZ3MgCityZXF1aXJlcyBgQU1fUFJPR19DQ19DX08nIGluIGBjb25maWd1cmUuYWMnCisgICAgCisgICAgSGVyZSdzIGEgcGF0Y2ggdGhhdCBmaXhlcyB0aG9zZSBhbmQgYWxzbyByZW1vdmVzIHNvbWUgdHJhaWxpbmcgYmxhbmtzLgorCitjb21taXQgNjRmNjFhYmJjYWVmZTA2MDQzMzE5NmUzMjNlYmEyNTFiZmM2ZTE3ZQorQXV0aG9yOiBKaW0gTWV5ZXJpbmcgPGppbUBtZXllcmluZy5uZXQ+CitEYXRlOiAgIE1vbiBGZWIgMTIgMjM6MzU6MzAgMjAwNyArMDEwMAorCisgICAgQ29tcGlsZSB3YXJuaW5nLWZyZWUgd2l0aCAiZ2NjIC1XYWxsIC1Xc2hhZG93Ii4KKyAgICAKKyAgICBIZWxsbywKKyAgICAKKyAgICBJIGZpbmQgdGhhdCBrZWVwaW5nIGNvZGUgd2FybmluZy1mcmVlICh3cnQgZ2NjIC1XYWxsIC1Xc2hhZG93KQorICAgIG1ha2VzIGl0IGVhc2llciB0byBhdm9pZCBjZXJ0YWluIGNsYXNzZXMgb2YgYnVncy4KKyAgICAKKyAgICBDb21waWxpbmcgd2l0aCBnY2MgLVdhbGwgLVdzaGFkb3cgZXZva2VkIGEgZmV3IHdhcm5pbmdzCisgICAgb24gYSBEZWJpYW4vdW5zdGFibGUgc3lzdGVtLiAgSGVyZSBhcmUgcGF0Y2hlcyB0byBmaXggdGhvc2U6CisgICAgCisgICAgKiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmMgKGRlZmF1bHRfaGFuZGxlcik6IFJlbmFtZSBwYXJhbWV0ZXIgImV4IgorICAgIHRvICJlIiwgdG8gYXZvaWQgc2hhZG93aW5nIGZpbGUtc2NvcGVkIGdsb2JhbC4KKyAgICAqIGxpYnBhcnRlZC9mcy9saW51eF9zd2FwL2xpbnV4X3N3YXAuYyAoX2dlbmVyaWNfc3dhcF9wcm9iZSk6IEFkZCBhCisgICAgImNhbid0IGhhcHBlbiIgKHdpdGggY3VycmVudCBjYWxsZXJzKSAiZGVmYXVsdDogZ290byBlcnJvciIgY2xhdXNlCisgICAgaW4gYSBzd2l0Y2ggdG8gYXZvaWQgYSBtYXktYmUtdXNlZC11bmluaXRpYWxpemVkIHdhcm5pbmcuCisgICAgKF9nZW5lcmljX3N3YXBfY2xvYmJlcik6IExpa2V3aXNlLgorICAgICogbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmMgKGhmc3BsdXNfcGFja19mcmVlX3NwYWNlX2Zyb21fYmxvY2spOgorICAgIFJlbmFtZSBsb2NhbCB2YXJpYWJsZSAiZGl2IiB0byAiZGl2aXNvciIsIHRvIGF2b2lkIHNoYWRvd2luZworICAgIHRoZSBmdW5jdGlvbiBpbiA8c3RkbGliLmg+LgorICAgICogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jIChoZnNfcGFja19mcmVlX3NwYWNlX2Zyb21fYmxvY2spOiBMaWtld2lzZS4KKyAgICAqIGxpYnBhcnRlZC9mcy9oZnMvY2FjaGUuYyAoaGZzY19jYWNoZV9hZGRfZXh0ZW50KTogUmVuYW1lIHBhcmFtZXRlcgorICAgICJpbmRleCIgdG8gInJlZl9pbmRleCIgdG8gYXZvaWQgc2hhZG93aW5nIHRoZSA8c3RyaW5nLmg+IGZ1bmN0aW9uLgorICAgICogbGlicGFydGVkL2xhYmVscy9zdW4uYyAoc3VuX3BhcnRpdGlvbl9lbnVtZXJhdGUpOiBSZW5hbWUgbG9jYWwKKyAgICB2YXJpYWJsZSAiaSIgdG8gImoiLCB0byBhdm9pZCBzaGFkb3dpbmcgYW5vdGhlciBsb2NhbC4KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBKaW0gTWV5ZXJpbmcgPGppbUBtZXllcmluZy5uZXQ+CisKK2NvbW1pdCBlZmY3Yzc1ZmJlNzM0OGUyMGZkZTM5ZjBmMDJkYzk2MTNjY2Q3YWZjCitBdXRob3I6IEppbSBNZXllcmluZyA8amltQG1leWVyaW5nLm5ldD4KK0RhdGU6ICAgTW9uIEZlYiAxMiAyMzozODowNyAyMDA3ICswMTAwCisKKyAgICBjb25maWd1cmUuYWM6IEFkZCBMT0NBTEVESVIgZGVmaW5pdGlvbiB0byBDRkxBR1Mgb25seSBvbmNlLgorICAgIAorICAgIEkgbm90aWNlZCB0aGF0IHRoZXJlIHdlcmUgdHdvIGlkZW50aWNhbCBsaW5lcyBpbiBjb25maWd1cmUuYWMsCisgICAgYWRkaW5nIHRoZSBzYW1lIExPQ0FMRURJUiBkZWZpbml0aW9uIHRvIENGTEFHUy4KKyAgICBUaGlzIGNoYW5nZSByZW1vdmVzIHRoZSBsYXR0ZXIuCisgICAgCisgICAgKiBjb25maWd1cmUuYWM6IEFkZCBMT0NBTEVESVIgZGVmaW5pdGlvbiB0byBDRkxBR1Mgb25seSBvbmNlLgorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IEppbSBNZXllcmluZyA8amltQG1leWVyaW5nLm5ldD4KKworY29tbWl0IDkyZjAwYzlhNGI2NjY5OTU0YWE4Njg5YzU5NjNjNTJjZWFlZmRmNTcKK0F1dGhvcjogUmljY2FyZG8gU2V0dGkgPGdpc2thcmRAcGl0b24uYXNpbW92LmJvdD4KK0RhdGU6ICAgTW9uIEZlYiAxMiAxMzoyNDoyOSAyMDA3ICswMTAwCisKKyAgICBBZGRlZCBhIHBrZ2NvbmZpZyBmaWxlIGZvciBsaWJwYXJ0ZWQsIGFkanVzdGVkIE1ha2VmaWxlLmFtIGFuZCBjb25maWd1cmUuYWMgCitmb3IgcmVmbGVjdCB0aGUgY2FuZ2VzCisgICAgCisgICAgCW1vZGlmaWVkOiAgIE1ha2VmaWxlLmFtCisgICAgCW1vZGlmaWVkOiAgIGNvbmZpZ3VyZS5hYworICAgIAluZXcgZmlsZTogICBsaWJwYXJ0ZWQucGMuaW4KKworY29tbWl0IDc2MGU2ZGVjZWY3YWFjMTJhYWRhNjJjMzE4NWU4MzUwNmZjYjVkNDcKK0F1dGhvcjogRGViYXJzaGkgUmF5IDxyaXNoaUBnbnUub3JnPgorRGF0ZTogICBXZWQgSmFuIDMxIDAyOjAxOjQzIDIwMDcgKzA1MzAKKworICAgIFJlbmFtaW5nIFBBUlRJVElPTl9FWFQgdG8gUEFSVElUSU9OX0RPU19FWFQgaW4gTVNET1MgZGlzay1sYWJlbCBjb2RlLCB0byAKK21haW50YWluIHNpbWlsYXJpdHkgd2l0aCBMaW51eCB2Mi42LjE4LjIKKworY29tbWl0IDk4YTUzZmQxMTVjYTAxMmVkZjIyNjUyNWI4ZDRiZTYyODQ1NGY5OWUKK0F1dGhvcjogRGViYXJzaGkgUmF5IDxyaXNoaUBnbnUub3JnPgorRGF0ZTogICBXZWQgSmFuIDE3IDE4OjU2OjQ2IDIwMDcgKzA1MzAKKworICAgIEVuYWJsZSBzdXBwb3J0IGZvciBzd3N1c3AgcGFydGl0aW9ucywgYW5kIHRoZSBhYmlsaXR5IHRvIGRpZmZlcmVudGlhdGUgCitiZXR3ZWVuIG9sZCBhbmQgbmV3IHZlcnNpb25zIG9mIGxpbnV4LXN3YXAgcGFydGl0aW9ucy4gQ2hhbmdlZCB0aGUgc3dhcF9pbml0IAorc2lnbmF0dXJlIGFuZCByZW1vdmVkIGV4dHJhIHBlZF9nZW9tZXRyeV9yZWFkIGZyb20gX3N3YXAqX29wZW4uCisKK2NvbW1pdCBmNTg0NjcxOTA3MjFjN2QyOWIyZDA3YzE1NjdjZGQ5MDYzM2YxOTk2CitBdXRob3I6IERlYmFyc2hpIFJheSA8cmlzaGlAZ251Lm9yZz4KK0RhdGU6ICAgVHVlIEphbiAxNiAyMzoxMzowOSAyMDA3ICswNTMwCisKKyAgICBTeW5jaHJvbml6ZSB0aGUgbGludXgtc3dhcCAobmV3IHZlcnNpb24pIGhlYWRlciBhY2NvcmRpbmcgdG8gdGhlIExpbnV4IAora2VybmVsIHNvdXJjZXMuCisKK2NvbW1pdCA4Y2MxODJlMTkxOTE0NGVjYWVkZTViOTU5ODNiNjUyODAxN2E3OGFjCitBdXRob3I6IERlYmFyc2hpIFJheSA8cmlzaGlAZ251Lm9yZz4KK0RhdGU6ICAgVHVlIEphbiAxNiAyMjo0MTo0NyAyMDA3ICswNTMwCisKKyAgICBjYjZjYTczYmUwNmYzNjAzMDhlNmEyZmNjYjcxNDJlZDgxNzVhZjI5IGNvbnRpbnVlZC4KKworY29tbWl0IGNiNmNhNzNiZTA2ZjM2MDMwOGU2YTJmY2NiNzE0MmVkODE3NWFmMjkKK0F1dGhvcjogRGViYXJzaGkgUmF5IDxyaXNoaUBnbnUub3JnPgorRGF0ZTogICBUdWUgSmFuIDE2IDA2OjQzOjM2IDIwMDcgKzA1MzAKKworICAgIEFkZCBzdGRpbnQuaCBzdGRsaWIuaCAmIHN0cmluZy5oIHRvIGluY2x1ZGUvcGFydGVkL3BhcnRlZC5oIGFuZCByZW1vdmUgdGhlbSAKK2Zyb20gb3RoZXIgZmlsZXMuCisKK2NvbW1pdCAyMWRjMzA4ZmUwODI5ZTEyZDU1ZmJhMGU2Zjc1MDYzY2Y3YmY2NTFhCitBdXRob3I6IERlYmFyc2hpIFJheSA8cmlzaGlAZ251Lm9yZz4KK0RhdGU6ICAgU3VuIEphbiAxNCAyMTowNjo1OCAyMDA3ICswNTMwCisKKyAgICBTeW5jaHJvbmlzZSBtYW51YWwgcGFnZSBhbmQgLS1oZWxwIGRvY3VtZW50YXRpb24uCisKK2NvbW1pdCA3YWQxMDAyMDljMGE3MzgyY2EzNmNjNGIzMzdiODgwMGQ0NWM0YTdhCitBdXRob3I6IERhdmlkIENhbnRyZWxsIDxkY2FudHJlbEBtb3J0aXNlLmJvc3Rvbi5yZWRoYXQuY29tPgorRGF0ZTogICBGcmkgSmFuIDEyIDEyOjQ3OjEzIDIwMDcgLTA1MDAKKworICAgIFVwZGF0ZWQgaTE4biBpbmZvcm1hdGlvbi4KKworY29tbWl0IDQwMDM4NmE5YTZmMzliMDUyZWNlYmIzMDdjZjJhYThjM2JmYzBlMzUKK0F1dGhvcjogRGF2aWQgQ2FudHJlbGwgPGRjYW50cmVsQG1vcnRpc2UuYm9zdG9uLnJlZGhhdC5jb20+CitEYXRlOiAgIEZyaSBKYW4gMTIgMTA6MDU6MDggMjAwNyAtMDUwMAorCisgICAgQWRkIHBlZF9kZXZpY2VfY2FjaGVfcmVtb3ZlKCkgcHJvdG90eXBlLgorICAgIChjaGVycnkgcGlja2VkIGZyb20gY29tbWl0IGNiNTNiODdhYjJmNzc5NjMzZjE1MmY0NzhjN2Y4Yzk5YzJmZDE4MTcpCisKK2NvbW1pdCA5MzVhZTExM2QyNTdmYTRmNDJjYTk3YjMwNjUwZjA1NjIzOGU3NzA1CitBdXRob3I6IERhdmlkIENhbnRyZWxsIDxkY2FudHJlbEBtb3J0aXNlLmJvc3Rvbi5yZWRoYXQuY29tPgorRGF0ZTogICBGcmkgSmFuIDEyIDEwOjA2OjQwIDIwMDcgLTA1MDAKKworICAgIE9ubHkgY2FsbCBfZGlza193YXJuX2xvc3MoZGlzaykgaW4gZG9fbWtsYWJlbCgpIGlmIGRpc2sgaXMgbm90IE5VTEwuICBGaXhlcyAKK2Egc2VnZmF1bHQgd2hlbiBpbml0aWFsaXppbmcgbmV3IHZvbHVtZXMuCisgICAgKGNoZXJyeSBwaWNrZWQgZnJvbSBjb21taXQgNzBlM2JmNWU3ODE4ZGY0OWExMWUyMDNhYzg1MTllMDM3ODE4ZDU5MikKKworY29tbWl0IDVmYTk1YmUyYzQ4ZTA5MTNmNzhkYWJlMmM5YzA3OGQwNzQyYTcxZjgKK0F1dGhvcjogRGF2aWQgQ2FudHJlbGwgPGRjYW50cmVsQG1vcnRpc2UuYm9zdG9uLnJlZGhhdC5jb20+CitEYXRlOiAgIEZyaSBKYW4gMTIgMTA6MDc6MTcgMjAwNyAtMDUwMAorCisgICAgRml4IGEgc2VnZmF1bHQgaW4gcGVkX2Fzc2VydCgpIHdoZXJlIHRoZSB3cm9uZyBwb2ludGVyIGlzIGZyZWVkIGluIHRoZSAKK2JhY2t0cmFjZS4KKyAgICAoY2hlcnJ5IHBpY2tlZCBmcm9tIGNvbW1pdCA2M2Y3YjMzYjM1MmQwZDY5OWVmZWIxMDk1MzQwZWQ2MTM5YzQ5ZTNiKQorCitjb21taXQgYjVlNjUwMDg2OGM0MjE2YjVjMTM3Nzk5Yzg5ODg3MDcyNmYyOGEwMAorQXV0aG9yOiBEYXZpZCBDYW50cmVsbCA8ZGNhbnRyZWxAbW9ydGlzZS5ib3N0b24ucmVkaGF0LmNvbT4KK0RhdGU6ICAgRnJpIEphbiAxMiAxMDowNzo0NSAyMDA3IC0wNTAwCisKKyAgICBBZGQgdGhlIHBlZF9kZXZpY2VfY2FjaGVfcmVtb3ZlKCkgZnVuY3Rpb24gdG8gcmVtb3ZlIGEgZGV2aWNlIGZyb20gdGhlIAorY2FjaGUuCisgICAgKGNoZXJyeSBwaWNrZWQgZnJvbSBjb21taXQgNWZiNjY1OGQxMjQwNTBhOWRjMjdhODdmMmUxYzNmZmQzZDFhZDdjMCkKKworY29tbWl0IDFjMTI1MWMyMDE3MjI0NjY3MWFjMmMwYzdjNjY2NjNhZjkwMmZkZjMKK0F1dGhvcjogRGF2aWQgQ2FudHJlbGwgPGRjYW50cmVsQG1vcnRpc2UuYm9zdG9uLnJlZGhhdC5jb20+CitEYXRlOiAgIEZyaSBKYW4gMTIgMTA6MTA6MDcgMjAwNyAtMDUwMAorCisgICAgVXBkYXRlZCB0aGUgQVVUSE9SUyBmaWxlLgorICAgIChjaGVycnkgcGlja2VkIGZyb20gY29tbWl0IDdhYjMyZDQyM2NjNDNhNWU5MzcyYTdkYzAwMGZlYjE4M2RiOWE4OWEpCisKK2NvbW1pdCA5ZWY0MTdmMDVkMTQwNWQ2YTZiODc0ZDc3ZDkzY2NmMzExM2RlZWU2CitBdXRob3I6IERlYmFyc2hpIFJheSA8cmlzaGlAZ251Lm9yZz4KK0RhdGU6ICAgRnJpIEphbiAxMiAwODoxMDoxNSAyMDA3ICswNTMwCisKKyAgICBSZWN0aWZ5IHNlZ21lbnRhdGlvbiBmYXVsdCBjYXVzZWQgYnkgCis5ZTA1NDE4ZGUzNDc3NjY2YjA3MDlmNWQxOTk2MTQ5ZmViZDMzMTAwCisKK2NvbW1pdCAzOTljYzM0NGVmOWVjMGIyYzA2MTMyYjk1ZWU0MTk1Nzc5ZDQ0Njg2CitBdXRob3I6IERlYmFyc2hpIFJheSA8cmlzaGlAZ251Lm9yZz4KK0RhdGU6ICAgRnJpIEphbiAxMiAwNjozNTo1OCAyMDA3ICswNTMwCisKKyAgICBVcGRhdGUgZG9jL0MvcGFydGVkLjggdG8gZG9jdW1lbnQgLS1saXN0LgorCitjb21taXQgOWUwNTQxOGRlMzQ3NzY2NmIwNzA5ZjVkMTk5NjE0OWZlYmQzMzEwMAorQXV0aG9yOiBPdGF2aW8gU2FsdmFkb3IgPG90YXZpb0BkZWJpYW4ub3JnPgorRGF0ZTogICBTYXQgRGVjIDE2IDE4OjQ3OjUzIDIwMDYgLTAyMDAKKworICAgIHBhcnRlZC9wYXJ0ZWQuYzogRGVzdHJveSBhbGwgb2JqZWN0cyBiZWZvcmUgcmV0dXJuIHdoZW4gY2FsbGVkIHdpdGggLS1saXN0IAorb3IgLS1hbGwgb3B0aW9uLgorCitjb21taXQgN2YzMTBlY2RlYjE4N2MzY2NkMGY1MWM3Y2M4NzRmMzRmYjk1Y2Y4MQorQXV0aG9yOiBBbmFudCBOYXJheWFuYW4gPGFuYW50QGtpeC5pbj4KK0RhdGU6ICAgRnJpIEphbiA1IDIzOjQyOjIzIDIwMDcgKzA1MzAKKworICAgIER1bXAgcmVhZGxpbmUgaGlzdG9yeSBvbiBjcmFzaAorCitjb21taXQgOGFjYWM0ZjE0OTdlNTU0NDdkOTMxZGY4YTEyOGFmM2ExNDQ1MjM4NQorQXV0aG9yOiBBbmFudCBOYXJheWFuYW4gPGFuYW50QGtpeC5pbj4KK0RhdGU6ICAgVGh1IERlYyAxNCAyMjowMDo1OSAyMDA2ICswNTMwCisKKyAgICBMb29zZW4gcmVxdWlyZW1lbnQgZm9yIHRoZSAnY2hlY2snIGxpYnJhcnkuCisKK2NvbW1pdCA0NTcxMzkzMDAzMmI4ZTA2NjQyODdhNmNiMzU0NTA5ZjdkZjI4MWU3CitBdXRob3I6IERlYmFyc2hpIFJheSA8cmlzaGlAZ251Lm9yZz4KK0RhdGU6ICAgRnJpIERlYyAxNSAwMToyNjowMyAyMDA2ICswNTMwCisKKyAgICBVcGRhdGUgQVVUSE9SUy4KKworY29tbWl0IGY3NGI4OTBiYjM2NThiOTcyYjAyZTk4ZTQzNTQ5OTQzMDZjYjgzNzIKK0F1dGhvcjogTGVzbGllIFAuIFBvbHplciA8cG9semVyQGdudS5vcmc+CitEYXRlOiAgIFdlZCBEZWMgMTMgMTc6MjM6MTUgMjAwNiArMDEwMAorCisgICAgYWRkZWQgc2NyaXB0cy91cGRhdGUtcG8KKworY29tbWl0IGE3YjQ3YjM2MzJmZDJhYzU5NDk1NTIwYjlkYjAyYTU3YzZjODI3OTQKK0F1dGhvcjogRGF2aWQgQ2FudHJlbGwgPGRjYW50cmVsQG1vcnRpc2UuYm9zdG9uLnJlZGhhdC5jb20+CitEYXRlOiAgIFR1ZSBEZWMgMTIgMTk6MjY6MDkgMjAwNiAtMDUwMAorCisgICAgTWVyZ2UgYnJhbmNoZXMgJ21hc3RlcicgYW5kICdtYXN0ZXInIG9mIAorZ2l0K3NzaDovL2RjYW50cmVsbC1ndWVzdEBnaXQuZGViaWFuLm9yZy9naXQvcGFydGVkL3BhcnRlZAorCitjb21taXQgNjBhMTE4OGNlODY5ZWMxOWEwNjUwY2I0MjUxZjgwYmMyYjUxNjI1YworQXV0aG9yOiBMZXNsaWUgUC4gUG9semVyIDxwb2x6ZXJAZ251Lm9yZz4KK0RhdGU6ICAgTW9uIERlYyAxMSAxODowMDowMCAyMDA2ICswMTAwCisKKyAgICBVcGRhdGVkIHRyYW5zbGF0aW9ucy4KKworY29tbWl0IGI5ZmFkZDEyZDFhNmMwYTg1M2Y5OTkzOThlZDVkNjg5ZmQ3ZDkxMDYKK0F1dGhvcjogRGViYXJzaGkgUmF5IDxyaXNoaUBnbnUub3JnPgorRGF0ZTogICBTYXQgRGVjIDkgMDE6MTE6NDkgMjAwNiArMDUzMAorCisgICAgQWxpYXMgJ3ByaW50IGxpc3QnIHdpdGggJ3ByaW50IGFsbCcuCisKK2NvbW1pdCA2OTI4NDc3NDM2ODIzMzU5ODUwOTQxZmFiZDc4NDQ0NjM1NzUyMDk1CitBdXRob3I6IE90YXZpbyBTYWx2YWRvciA8b3RhdmlvQG9zc3lzdGVtcy5jb20uYnI+CitEYXRlOiAgIE1vbiBEZWMgMTEgMDc6NDY6MzQgMjAwNiAtMDIwMAorCisgICAgSW5jbHVkZSBhIGRpc2sgcHJvYmluZyB0ZXN0CisKK2NvbW1pdCBjOTVkN2Y5MTJmNTc3YzYxODhjNDkwMDgyNmY1MGRkZDU0NTA1YjRlCitBdXRob3I6IE90YXZpbyBTYWx2YWRvciA8b3RhdmlvQG9zc3lzdGVtcy5jb20uYnI+CitEYXRlOiAgIE1vbiBEZWMgMTEgMDc6NDY6MzQgMjAwNiAtMDIwMAorCisgICAgSWYgQ0hFQ0sgaXMgaW5zdGFsbGVkIG9uIGNvbmZpZ3VyZSB0aW1lLCBidWlsZCBvdXIgdW5pdHRlc3QgZnJhbWV3b3JrCisKK2NvbW1pdCAzOGYyOTMwNzU4Mzg2NWY4MzExN2FhN2M3Yzg1YTI5N2ZlZWZhZDE4CitBdXRob3I6IE90YXZpbyBTYWx2YWRvciA8b3RhdmlvQG9zc3lzdGVtcy5jb20uYnI+CitEYXRlOiAgIE1vbiBEZWMgMTEgMDc6NDY6MzMgMjAwNiAtMDIwMAorCisgICAgQWRkIENIRUNLIHVuaXR0ZXh0IGxpYnJhcnkgZGV0ZWN0aW9uIHRvIEF1dG9jb25mIHNjcmlwdAorCitjb21taXQgYWIxNDNlMTc5NGMwNmVlNTgyODQ1MGVjNDhlYmNjZDJhODlhZGZhNAorQXV0aG9yOiBMZXNsaWUgUC4gUG9semVyIDxwb2x6ZXJAZ251Lm9yZz4KK0RhdGU6ICAgU2F0IERlYyA5IDEwOjUxOjQzIDIwMDYgKzAxMDAKKworICAgIFJlbGVhc2Ugc2NyaXB0OiBjYW5ub3QgY2FsbCAicmV0dXJuIiBmcm9tIHRvcCBsZXZlbDsgIHJlcGxhY2VkIHdpdGggImV4aXQiLgorCitjb21taXQgYTZjM2ZmNmRmNTVjMzFjOTIyYTdlOTYzNjYyYjFhMGQ3NjAwMTE2MgorQXV0aG9yOiBEZWJhcnNoaSBSYXkgPHJpc2hpQGdudS5vcmc+CitEYXRlOiAgIEZyaSBEZWMgOCAwMDo1MTowNiAyMDA2ICswNTMwCisKKyAgICBaZXJvIHNpemVkIGRldmljZSBpcyBzaG93biBhcyAwLjAwQiBhbmQgbm90IC0wLjAwa0IuCisKK2NvbW1pdCAxNzE1NWRmZDU0Yjg5MzE4MWMwY2M2YWVlOThiMTM4N2I0ZTNiYTdhCitBdXRob3I6IE90YXZpbyBTYWx2YWRvciA8b3RhdmlvQGRlYmlhbi5vcmc+CitEYXRlOiAgIFdlZCBEZWMgNiAyMzozMzo1MiAyMDA2IC0wMjAwCisKKyAgICBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6IER5bmFtaWNhbGx5IGFsbG93IHNwYWNlIG9mIGV4Y2VwdGlvbiBtZXNzYWdlLgorCitjb21taXQgYjg5MDNiM2Y1NDE1MTQzN2EyZmZmOTMzOTljYTUwYjAxYWJkNDE4NAorQXV0aG9yOiBPdGF2aW8gU2FsdmFkb3IgPG90YXZpb0BkZWJpYW4ub3JnPgorRGF0ZTogICBXZWQgRGVjIDYgMjI6NDQ6NDAgMjAwNiAtMDIwMAorCisgICAgT3V0cHV0IGEgYmFja3RyYWNlIHdoZW4gY2F0Y2hpbmcgU0VHVl9NQVBFUlIgb3IgYSBnZW5lcmFsIFNJR1NFR1Ygc2lnbmFscy4KKworY29tbWl0IDEzYzI4ZjM3OWM0NmQ5ODNlNzAwNTgwODI2MTExOWMxODhiOWM4YTAKK0F1dGhvcjogRGViYXJzaGkgUmF5IDxyaXNoaUBnbnUub3JnPgorRGF0ZTogICBUaHUgRGVjIDcgMDc6MzE6MzkgMjAwNiArMDUzMAorCisgICAgSW1wbGVtZW50ICdwcmludCBkZXZpY2VzJy4KKworY29tbWl0IDdkZjY2OTA3ODgzNGI4YTQ4ZWIyOTA0MmQxYzZmZWEwNmUyMjEzNjcKK0F1dGhvcjogQmVubm8gU2NodWxlbmJlcmcgPGJlbnNiZXJnQGp1c3RlbWFpbC5uZXQ+CitEYXRlOiAgIFdlZCBEZWMgNiAwMDowMDowMyAyMDA2ICswMTAwCisKKyAgICBUcmFuc2xhdGUgdGhlIGNvcHlyaWdodCBtZXNzYWdlLCBhbmQgaGFyZCB3cmFwIGl0CisKK2NvbW1pdCBhOWZlYTFhZGQ2NDJhOGYxMjQzOTMyYTRkYjJlZTk2N2FkNjY4YTRiCitBdXRob3I6IE90YXZpbyBTYWx2YWRvciA8b3RhdmlvQGRlYmlhbi5vcmc+CitEYXRlOiAgIFR1ZSBEZWMgNSAxNTozMjoyNiAyMDA2IC0wMjAwCisKKyAgICBsaWJwYXJ0ZWQvZGlzay5jOiBTdGFuZGFyaXplIHRoZSB3YXkgd2Ugd2FsayB0aHJvdWdodCB0aGUgZGlzayB0eXBlcyAKK292ZXJhbGwgdGhlIGNvZGUKKworY29tbWl0IDBmMWJhM2Y1ZDlkNTdmM2EyMjA1ZWM2NzczOGY2MTFjZjViMjJlN2QKK0F1dGhvcjogT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW9AZGViaWFuLm9yZz4KK0RhdGU6ICAgVHVlIERlYyA1IDE0OjE2OjA0IDIwMDYgLTAyMDAKKworICAgIFJldmVydCAiQWRkIGNoZWNrIHVuaXR0ZXN0IHN1cHBvcnQgYW5kIGEgaW5pdGlhbCB0ZXN0IGZvciBhIHJlc2l6aW5nIGJ1Zy4iCisgICAgCisgICAgVGhpcyBjb2RlIHdhc24ndCByZWFkeSBmb3IgY29tbWl0IHlldC4KKyAgICAKKyAgICBUaGlzIHJldmVydHMgY29tbWl0IGJhNDNjYjZmZjdiYjFkOTQ1MDYyZTI1Yjk0ZWZlY2IxYjg0YzBjMzMuCisKK2NvbW1pdCBmZTkxNDgyOGQyYjM2NDUxYTcwNTYyOTI1NjA4MjA2MzNjODkxYWZlCitBdXRob3I6IE90YXZpbyBTYWx2YWRvciA8b3RhdmlvQGRlYmlhbi5vcmc+CitEYXRlOiAgIFR1ZSBEZWMgNSAxNDoxMjoyNCAyMDA2IC0wMjAwCisKKyAgICBwYXJ0ZWQvcGFydGVkLmM6IFJlbW92ZSB1c2VsZXNzIGxpbmUgYnJlYWsKKworY29tbWl0IGJhNDNjYjZmZjdiYjFkOTQ1MDYyZTI1Yjk0ZWZlY2IxYjg0YzBjMzMKK0F1dGhvcjogT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW9Ab3NzeXN0ZW1zLmNvbS5icj4KK0RhdGU6ICAgTW9uIERlYyA0IDIzOjQwOjU0IDIwMDYgLTAyMDAKKworICAgIEFkZCBjaGVjayB1bml0dGVzdCBzdXBwb3J0IGFuZCBhIGluaXRpYWwgdGVzdCBmb3IgYSByZXNpemluZyBidWcuCisKK2NvbW1pdCBkYzRkZjY5ZWNhYzJjNjkzMzI4ZGJhNDUyZjRiNGU5ZGY5YzBkMjlmCitBdXRob3I6IERhdmlkIENhbnRyZWxsIDxkY2FudHJlbEBtb3J0aXNlLmJvc3Rvbi5yZWRoYXQuY29tPgorRGF0ZTogICBTdW4gRGVjIDMgMjI6MjA6MjUgMjAwNiAtMDUwMAorCisgICAgRml4IHRoZSB1cGxvYWQgc2NyaXB0IHRvIGNvcnJlY3RseSByZWZlcmVuY2UgdGhlIHNpZyBmaWxlcy4KKworY29tbWl0IGJlMWExNTdhZDM2NTdiMWMxNDA2ZDJiMjQ2ZGY5ZTQ5YWZjYTgyNmYKK0F1dGhvcjogRGF2aWQgQ2FudHJlbGwgPGRjYW50cmVsQG1vcnRpc2UuYm9zdG9uLnJlZGhhdC5jb20+CitEYXRlOiAgIFN1biBEZWMgMyAyMDozMToxMCAyMDA2IC0wNTAwCisKKyAgICBSZW1vdmUgQ2hhbmdlTG9nLCBkb2MvbWRhdGUtc2gsIGFuZCBkb2MvdGV4aW5mby50ZXggc2luY2UgdGhleSBhcmUgCit1bm1hbmFnZWQgZmlsZXMgYW5kIGdldCBnZW5lcmF0ZWQgYXV0b21hdGljYWxseSBhdCByZWxlYXNlIHRpbWUuCisKK2NvbW1pdCAwYjhiMmRhNTcwY2VkYTg1Zjc5ZTFiMmIxMjM5ZjdlNWE0NjY4ZWNlCitBdXRob3I6IERhdmlkIENhbnRyZWxsIDxkY2FudHJlbEBtb3J0aXNlLmJvc3Rvbi5yZWRoYXQuY29tPgorRGF0ZTogICBTdW4gRGVjIDMgMjA6MzA6NDQgMjAwNiAtMDUwMAorCisgICAgR2VuZXJhdGUgQ2hhbmdlTG9nIGJlZm9yZSBydW5uaW5nIHRoZSBhdXRvZ2VuIHRvb2xzIGJlY2F1c2Ugd2UgbmVlZCBhIGZpbGUgCitjYWxsZWQgJ0NoYW5nZUxvZycgdG8gZXhpc3Qgd2hlbiBydW5uaW5nIHRob3NlIHRvb2xzLgorCitjb21taXQgYWZlYjk3YzA5NjhlYTBkZGE1ZjA3ZDU2ZWUxMzYxNTYyYThkNjUxNworQXV0aG9yOiBEYXZpZCBDYW50cmVsbCA8ZGNhbnRyZWxAbW9ydGlzZS5ib3N0b24ucmVkaGF0LmNvbT4KK0RhdGU6ICAgU3VuIERlYyAzIDE4OjM3OjQ1IDIwMDYgLTA1MDAKKworICAgIFBhc3MgZ2l0IGNoYW5nZWxvZyB0aHJvdWdoICdmb2xkIC1zJyB0byB3cmFwIGxvbmcgbGluZXMuCisKK2NvbW1pdCBlNjAxMmNhYzlmYTE5OTlkMjcxOWYwMWMzNWRmMzNjZWY5YjkyNjE0CitBdXRob3I6IERhdmlkIENhbnRyZWxsIDxkY2FudHJlbEBtb3J0aXNlLmJvc3Rvbi5yZWRoYXQuY29tPgorRGF0ZTogICBTdW4gRGVjIDMgMTg6MjU6NDEgMjAwNiAtMDUwMAorCisgICAgQWRkZWQgdGhlIC0tZW5hYmxlLXNlbGludXggc3dpdGNoIHRvIHRoZSBjb25maWd1cmUgc2NyaXB0LiAgSWYgc2V0LCBpdCBhZGRzIAorLWxzZWxpbnV4IGFuZCAtbHNlcG9sIHRvIHRoZSBsaXN0IG9mIGxpYnJhcmllcyB0byBsaW5rIGxpYnBhcnRlZCB3aXRoLiAgQnVtcGVkIAordGhlIHZlcnNpb24gbnVtYmVyIHRvIDEuOS45IHNpbmNlIHRoaXMgaXMgdGhlIGVkZ2UgYnJhbmNoLgorCitjb21taXQgMDBhYjY5Y2M0NDcxNjQzYWE0MjJlM2JmOWE1MzZhYzJmZmY2NDI2NgorQXV0aG9yOiBEYXZpZCBDYW50cmVsbCA8ZGNhbnRyZWxAbW9ydGlzZS5ib3N0b24ucmVkaGF0LmNvbT4KK0RhdGU6ICAgU3VuIERlYyAzIDE4OjA5OjU0IDIwMDYgLTA1MDAKKworICAgIFJlbmFtZSBhbGwgb2xkIENoYW5nZUxvZyBmaWxlcyB0byBDaGFuZ2VMb2cuMC4gIEFkZGVkIGNvZGUgdG8gdGhlIAordGFyYmFsbF91cGxvYWQuc2ggc2NyaXB0IHRvIGdlbmVyYXRlIGEgdG9wbGV2ZWwgQ2hhbmdlTG9nIGZyb20gdGhlIGdpdCAKK2NoYW5nZWxvZy4KKworY29tbWl0IDE1NWI4ZGE2ZjY0N2EwOWIzNjVhNTk5ZDk2Y2UyNTlmZDQ2NDk0MjkKK0F1dGhvcjogTGVzbGllIFAuIFBvbHplciA8cG9semVyQGdudS5vcmc+CitEYXRlOiAgIFNhdCBEZWMgMiAyMTo0MzowMiAyMDA2ICswMTAwCisKKyAgICBVcGRhdGVkIFVSTCBvZiBzdGF0aWMgcGFydGVkIGluIGRvY3MuCisKK2NvbW1pdCBlM2FmMTRmZGU2MjQ5MmU3YTRhN2Y0NTExNjFjOTk5NTI3MDI1ZDY1CitBdXRob3I6IEFuYW50IE5hcmF5YW5hbiA8YW5hbnRAa2l4LmluPgorRGF0ZTogICBTdW4gRGVjIDMgMDE6NDU6MTQgMjAwNiArMDUzMAorCisgICAgTWFrZSBwYXJ0ZWQgaWdub3JlICctaScgb3B0aW9uIGluc3RlYWQgb2YgZmFpbGluZworCitjb21taXQgMzBlMTIyNzYwMjliMGI2YzA0ZDJkMGVkZjJiOWIwMGJhNzk3MDEzYworQXV0aG9yOiBBbmFudCBOYXJheWFuYW4gPGFuYW50QGtpeC5pbj4KK0RhdGU6ICAgU3VuIERlYyAzIDAwOjI0OjM0IDIwMDYgKzA1MzAKKworICAgIFN1cHBvcnQgbWFjaGluZSBwYXJzZWFibGUgb3V0cHV0LgorCitjb21taXQgYTUxYmMwNGMzMTExNTRhYjc3MGE3MjBmYWY4NGRlZjY4YzJmNDg3NQorQXV0aG9yOiBEZWJhcnNoaSBSYXkgPHJpc2hpQGdudS5vcmc+CitEYXRlOiAgIFRodSBOb3YgMzAgMDg6MDk6MDggMjAwNiArMDUzMAorCisgICAgQ2xlYW51cCBfcGFydGl0aW9uX3dhcm5fYnVzeSwgX2Rpc2tfd2Fybl9idXN5LCBfcGFydGl0aW9uX3dhcm5fbG9zcyBhbmQgCitfZGlza193YXJuX2xvc3MuCisKK2NvbW1pdCBjZWJlZTc4YTViNWM5ZjZiMGZiM2M5MThkMmNhYjgyNzQ0ZDc0ZTI0CitBdXRob3I6IE90YXZpbyBTYWx2YWRvciA8b3RhdmlvQGRlYmlhbi5vcmc+CitEYXRlOiAgIFR1ZSBOb3YgMjggMjI6MjY6NTAgMjAwNiAtMDIwMAorCisgICAgUHJvcGVyIHByaW50IHdoZW4gdGhlcmUncmUgbm8gZXh0ZW5kZWQgcGFydGl0aW9ucywgYnV0IHBhcnRpdGlvbiBuYW1lcyAKKyhwYXRjaCBmcm9tIFN2ZW4gTHV0aGVyKQorCitjb21taXQgYWQzNThlODAyYmM1MzllNDk2MDhlMDViYWRkMjU3YTFmZjZkMzY1OAorQXV0aG9yOiBPdGF2aW8gU2FsdmFkb3IgPG90YXZpb0BkZWJpYW4ub3JnPgorRGF0ZTogICBUdWUgTm92IDI4IDE3OjM2OjAzIDIwMDYgLTAyMDAKKworICAgIGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6IGluaXRpYWxpemUgdGFzayBwb2ludCB0byBwbGVhc2UgR0NDCisKK2NvbW1pdCA3MDgxYjQ4OTAwMmRlZGI1Yjk0NTBmYjgzYmRmOTFhOTE1YjI4MzhiCitBdXRob3I6IE90YXZpbyBTYWx2YWRvciA8b3RhdmlvQGRlYmlhbi5vcmc+CitEYXRlOiAgIFR1ZSBOb3YgMjggMTc6MzU6MDAgMjAwNiAtMDIwMAorCisgICAgRG9uJ3QgZW5mb3JjZSBsaWJzZWxpbnV4IGFuZCBsaWJzZXBvbCBsaW5raW5nIHdoZW4gdXNpbmcgZGV2aWNlLW1hcHBlciAKK3N1cHBvcnQKKworY29tbWl0IDY5MmExYTgzNjNkMTc5ODZkYTA2MWI3OTJkZDAxZjgwZTdiNzQ1ZjAKK0F1dGhvcjogRGViYXJzaGkgUmF5IDxyaXNoaUBnbnUub3JnPgorRGF0ZTogICBXZWQgTm92IDI5IDAzOjQzOjA1IDIwMDYgKzA1MzAKKworICAgIFdhcm4gYmVmb3JlIG1rbGFiZWwgYW5kIG1rZnMuCisKK2NvbW1pdCBhZTYyNzhiMzA5MWRiYmFlZTQ4MzJjMDU3OWEwMmQ4NjdjYzViYmUyCitBdXRob3I6IERlYmFyc2hpIFJheSA8cmlzaGlAZ251Lm9yZz4KK0RhdGU6ICAgV2VkIE5vdiAyOSAwMDoxMDowNCAyMDA2ICswNTMwCisKKyAgICBNYWtlIG1rdGFibGUgYWxpYXNlZCB0byBta2xhYmVsLgorCitjb21taXQgM2NhMzczNzY5YmQzM2I5OTk0NmU5YTg1ZjQ3NmUyMWM0Y2FkNDdjZQorQXV0aG9yOiBPdGF2aW8gU2FsdmFkb3IgPG90YXZpb0BkZWJpYW4ub3JnPgorRGF0ZTogICBNb24gTm92IDI3IDIyOjA2OjIwIDIwMDYgLTAyMDAKKworICAgIEZpeCAncHJpbnQnIGNvbW1hbmQgaGVscAorICAgIAorICAgICdwcmludCcgY29tbWFuZCBoZWxwIHdhcyBtaXNzaW5nIGEgbmV3IGxpbmUgYXQgZW5kIGFuZCB0aGVuIGJyZWFraW5nCisgICAgdGhlIGhlbHAgcHJpbnRpbmcuCisKK2NvbW1pdCBhOWY5MjQwZDdlZTQwNjU5ZWRhYTk1M2JiOTg3ZTQ3NWFjMTU5ZWEyCitBdXRob3I6IExlc2xpZSBQLiBQb2x6ZXIgPHBvbHplckBnbnUub3JnPgorRGF0ZTogICBNb24gTm92IDI3IDE3OjU5OjE0IDIwMDYgKzAxMDAKKworICAgIFVwZGF0ZWQgdHJhbnNsYXRpb25zLgorCitjb21taXQgOWE2ZDViYzlmYmQ5OTFiMjNiNWU3OGM1NTJkMjUyNzQwZGEwYmY2MworQXV0aG9yOiBPdGF2aW8gU2FsdmFkb3IgPG90YXZpb0BkZWJpYW4ub3JnPgorRGF0ZTogICBTdW4gTm92IDI2IDIyOjQ3OjExIDIwMDYgLTAyMDAKKworICAgIFJlbW92ZSBkb2MvbWRhdGUtc2ggYW5kIGRvYy90ZXhpbmZvLnRleCBzaW5jZSB0aGV5IGFyZSBpbmNsdWRlZCB3aGVuIHdlIHJ1biAKK2F1dG9nZW4uc2gKKworY29tbWl0IGU1NjdiNDJhZWQ4MmVhY2U3MTQzZTBlMDRlMjUzMmQ3MTI0ZWU5OTEKK0F1dGhvcjogQW5hbnQgTmFyYXlhbmFuIDxhbmFudEBraXguaW4+CitEYXRlOiAgIFRodSBOb3YgMjMgMTM6NDY6MTMgMjAwNiArMDUzMAorCisgICAgSW50cm9kdWNlIHRoZSAtbGlzdCBjb21tYW5kLWxpbmUgc3dpdGNoLCBwYXRjaCBieSBEZWJhcnNoaSBSYXkKKworY29tbWl0IDQ1YzYzNDEyYTg5NTgwZTRjMzNkYjI5ZDIxOGJjNzg5NmM3YzVkNDUKK0F1dGhvcjogT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW9AZGViaWFuLm9yZz4KK0RhdGU6ICAgV2VkIE5vdiAyMiAxODozODo1OSAyMDA2IC0wMjAwCisKKyAgICBBdm9pZCB3YXJuaW5nIGFib3V0IHVzZXIgcGVybWlzc2lvbnMgd2hlbiB1c2luZyAtLXZlcnNpb24KKworY29tbWl0IDFkMDIxZDc4ZWNjYzNhODc0NjFhNDliYmI4NzFiMzAyNzdjNGIwMTAKK0F1dGhvcjogT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW9AZGViaWFuLm9yZz4KK0RhdGU6ICAgV2VkIE5vdiAyMiAxODoyMjozOSAyMDA2IC0wMjAwCisKKyAgICBwYXJ0ZWQvcGFydGVkLmM6IFJlbW92ZSByZWRlY2xhcmF0aW9uIG9mIGN1cnJlbnRfZGV2IGZpeGluZyBhIGNvbXBpbGF0aW9uIAorZXJyb3IKKworY29tbWl0IGI1OTNiMDIxOTc4NzY0NmNlY2M2NDgxOGMzNjE4YWZhZGE1MDc1YjkKK0F1dGhvcjogT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW9AZGViaWFuLm9yZz4KK0RhdGU6ICAgV2VkIE5vdiAyMiAxNTo0MDo0NCAyMDA2IC0wMjAwCisKKyAgICBSZWFkZCB0aGUgJ3JldHVybiAwOycgdG8gcGxlYXNlIEdDQworICAgIAorICAgIFRoZSBjb21taXQgZDAwMGRlOGYwNjJjZTA3MGQ1MzEwZjE2NGViZjRmNWVkMjZmY2FkMCBpbmNsdWRlZCBhCisgICAgY29tcGlsYXRpb24gd2FybmluZyB0aGF0IG1ha2VzIHNlbnNlIHdoZW4gUGFydGVkIGlzIGJ1aWx0IHdpdGhvdXQKKyAgICBkZWJ1Z2dpbmcuIFRvIHNvbHZlIHRoZSB3YXJuaW5nIGFuZCBlbnN1cmUgdGhhdCB3aGVuIHJ1bm5pbmcgd2l0aG91dAorICAgIGRlYnVnZ2luZyB3ZSByZXR1cm4gYSBzaW5zaWJsZSB2YWx1ZSBJJ3ZlIHJldmVydGVkCisgICAgZDAwMGRlOGYwNjJjZTA3MGQ1MzEwZjE2NGViZjRmNWVkMjZmY2FkMCBjaGFuZ2UgYW5kIGFkZGVkIGEgbmljZQorICAgIGNvbW1lbnQgdG8gYXZvaWQgbWlzdW5kZXJzdGFuZGluZ3MgYWdhaW4uCisKK2NvbW1pdCAwZGRjMTRhOWQyMmNmMWQ5OTRlYTE1Mjg1Y2MzOWM2ZjAwMGEyZDMwCitBdXRob3I6IEFuYW50IDxhbmFudEB0aGVnaG9zdC4obm9uZSk+CitEYXRlOiAgIFRodSBOb3YgMjMgMDE6MTI6MDQgMjAwNiArMDUzMAorCisgICAgRml4IGxvb3AgaW4gcHJpbnRfYWxsLCB0aGFua3MgdG8gRGViYXJzaGkgUmF5IGZvciB0aGUgcGF0Y2guCisKK2NvbW1pdCBkMDAwZGU4ZjA2MmNlMDcwZDUzMTBmMTY0ZWJmNGY1ZWQyNmZjYWQwCitBdXRob3I6IE90YXZpbyBTYWx2YWRvciA8b3RhdmlvQGRlYmlhbi5vcmc+CitEYXRlOiAgIE1vbiBOb3YgMjAgMjE6NDU6MTMgMjAwNiAtMDIwMAorCisgICAgUmVtb3ZlIHVzZWxlc3MgJ3JldHVybiAwOycgY2FsbAorICAgIAorICAgIFNpbmNlIFBFRF9BU1NFUlQgd2lsbCBhbHdheXMgYmUgcnVuLCB0aGUgcmV0dXJuIDAgaXMgdXNlbGVzcywgaGVuY2UKKyAgICByZW1vdmVkLgorCitjb21taXQgNDNiOGE5MzBjM2M5NzA4OGU4NWY2NzYxMDBiM2Y4YzhhZmNkMDFlYgorQXV0aG9yOiBPdGF2aW8gU2FsdmFkb3IgPG90YXZpb0BkZWJpYW4ub3JnPgorRGF0ZTogICBNb24gTm92IDIwIDIxOjQ0OjEzIDIwMDYgLTAyMDAKKworICAgIFJlbW92ZSB1c2VsZXNzIHNlbWljb2xvbiBmcm9tIFBFRF9BU1NFUlQgY2FsbHMKKworY29tbWl0IGU4YzQ2MmVhYWU2N2EzODY3OGYxOWNjMGYxOGY0NzNkMzYzYjQyMjcKK0F1dGhvcjogRGF2aWQgQ2FudHJlbGwgPGRjYW50cmVsQG1vcnRpc2UuYm9zdG9uLnJlZGhhdC5jb20+CitEYXRlOiAgIE1vbiBOb3YgMjAgMTI6MzQ6NDkgMjAwNiAtMDUwMAorCisgICAgR2VuZXJhdGUgU0hBLTEgZGlnZXN0cyBvZiB0aGUgYXJjaGl2ZSBmaWxlcyBhbmQgdXBsb2FkIHRob3NlIGFsb25nIHdpdGggdGhlIAorYWN0dWFsIGFyY2hpdmUgZmlsZXMuCisKK2NvbW1pdCA3OTFiYzE3ZDlmNmEzZjM4OTBiMzdiMGE5NjgyMzM1MGNmOGE3ZWJiCitBdXRob3I6IE90YXZpbyBTYWx2YWRvciA8b3RhdmlvQGRlYmlhbi5vcmc+CitEYXRlOiAgIE1vbiBOb3YgMjAgMTg6MTY6MTIgMjAwNiAtMDIwMAorCisgICAgUmV3b3JrIGJhY2t0cmFjZSBzdXBwb3J0CisgICAgCisgICAgV2hpbGUgZG9pbmcgYSBkZWVwbHkgY2hlY2sgYWJvdXQgdGhlIGJhY2t0cmFjZSBzdXBwb3J0IEkgZm91bmQgdGhhdAorICAgIC1yZHluYW1pYyBpcyB1c2VsZXNzIG9uIENGTEFHUyBhbmQgbXkgcHJldmlvdXMgY2hhbmdlIHdhcyB3cm9uZyBzaW5jZQorICAgIGl0IHdhc24ndCBhdm9pZGluZyAtcmR5bmFtaWMgb24gTEZMQUdTIGlmIHRoZSBydW5uaW5nIHN5c3RlbSBtaXNzZWQKKyAgICB0aGUgZXhlY2luZm8uaCBzdXBwb3J0LiBUaGF0IHdvdWxkIHByb2JhYmx5IGNhdXNlIGEgYnVpbGQgZXJyb3Igb24KKyAgICBzb21lIHN5c3RlbXMuCisKK2NvbW1pdCBkOWY5ODUyNDBjNjdkNmI3ODlkN2M1ZDRlN2Y1YjhjODY4NjVkMDUwCitBdXRob3I6IERhdmlkIENhbnRyZWxsIDxkY2FudHJlbGxAcmVkaGF0LmNvbT4KK0RhdGU6ICAgRnJpIE5vdiAxNyAxNTo0MjowNSAyMDA2ICswMDAwCisKKyAgICBGaW5hbCBjaGFuZ2VzIGZvciBwYXJ0ZWQtMS44LjAKKyAgICAKKyAgICAKKyAgICBnaXQtc3ZuLWlkOiBzdm46Ly9zdm4uZGViaWFuLm9yZy9zdm4vcGFydGVkL3Vwc3RyZWFtL3RydW5rQDg5NiAKKzJkNDI0ZmQ3LTdmZTItMDMxMC1hZjc0LThiYzY1ZWRlYjE3MworCitjb21taXQgN2Y0NDNmYTMxZGU1M2M1OGI4MzZjZmUyYjQyYWE5MjBkY2UzNGY5MQorQXV0aG9yOiBPdGF2aW8gU2FsdmFkb3IgPG90YXZpb0BkZWJpYW4ub3JnPgorRGF0ZTogICBTYXQgTm92IDExIDIwOjMwOjU3IDIwMDYgKzAwMDAKKworICAgIEFwcGx5IGNoYW5nZXMgZG9uZSBvbiBEYXJjcyBhbmQgc3VpdGFibGUgZm9yIHJlbGVhc2Ugb24gMS44IGZpbmFsOgorICAgIAorICAgIFNhdCBOb3YgMTEgMTg6MDk6MTcgQlJTVCAyMDA2ICBPdGF2aW8gU2FsdmFkb3IgPG90YXZpb0BkZWJpYW4ub3JnPgorICAgICAgKiBFbmFibGUgYmFja3RyYWNlIGp1c3QgaWYgaXQncyBoYXMgc3VwcG9ydCBvbiBsaWJjLgorICAgIAorICAgIFNhdCBOb3YgMTEgMTc6NDE6MTIgQlJTVCAyMDA2ICBPdGF2aW8gU2FsdmFkb3IgPG90YXZpb0BkZWJpYW4ub3JnPgorICAgICAgKiBBZGQgLXJkeW5hbWljIHRvIExERkxBR1MuCisgICAgCisgICAgU2F0IE5vdiAxMSAxNzo0MDoxOSBCUlNUIDIwMDYgIE90YXZpbyBTYWx2YWRvciA8b3RhdmlvQGRlYmlhbi5vcmc+CisgICAgICAqIEFkZCAtcmR5bmFtaWMgdG8gQ0ZMQUdTCisgICAgCisgICAgU2F0IE5vdiAxMSAxNzozODoxMSBCUlNUIDIwMDYgIE90YXZpbyBTYWx2YWRvciA8b3RhdmlvQGRlYmlhbi5vcmc+CisgICAgICAqIFByaW50IGJhY2t0cmFjZSBzdGFjayB3aGVuIHRocm93aW5nIGFuIGV4Y2VwdGlvbgorICAgIAorICAgIAorICAgIAorICAgIGdpdC1zdm4taWQ6IHN2bjovL3N2bi5kZWJpYW4ub3JnL3N2bi9wYXJ0ZWQvdXBzdHJlYW0vdHJ1bmtAODk1IAorMmQ0MjRmZDctN2ZlMi0wMzEwLWFmNzQtOGJjNjVlZGViMTczCisKK2NvbW1pdCA4ZDAxYmFjMmEzNGJhMmEwYmM3ZTRmZGI2OGM2MTkxN2NkYTAzYTcxCitBdXRob3I6IE90YXZpbyBTYWx2YWRvciA8b3RhdmlvQGRlYmlhbi5vcmc+CitEYXRlOiAgIFNhdCBOb3YgMTEgMTc6MjM6NDYgMjAwNiArMDAwMAorCisgICAgUmVtb3ZlIGZpbGVzIHRoYXQgY2FuIGJlIGdlbmVyYXRlZC4KKyAgICAKKyAgICBnaXQtc3ZuLWlkOiBzdm46Ly9zdm4uZGViaWFuLm9yZy9zdm4vcGFydGVkL3Vwc3RyZWFtL3RydW5rQDg5NCAKKzJkNDI0ZmQ3LTdmZTItMDMxMC1hZjc0LThiYzY1ZWRlYjE3MworCitjb21taXQgZWE0NGE3YjVlMTM5NWFjMDZjOTY1ZGFmODE1ZDA4YjUyNWQzNWNmOQorQXV0aG9yOiBPdGF2aW8gU2FsdmFkb3IgPG90YXZpb0BkZWJpYW4ub3JnPgorRGF0ZTogICBTYXQgTm92IDExIDEyOjQ1OjIzIDIwMDYgKzAwMDAKKworICAgIENoYW5nZXMgZG9uZSBvbiBkYXJjcyByZXBvc2l0b3J5IHN1aXRhYmxlIGZvciAxLjggcmVsZWFzZToKKyAgICAKKyAgICBTYXQgTm92IDExIDEwOjQxOjU0IEJSU1QgMjAwNiAgT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW9AZGViaWFuLm9yZz4KKyAgICAgICogQnJlYWsgbGluZXMgYmlnZ2VyIHRoZW4gODAgY29sdW1ucy4KKyAgICAKKyAgICBTYXQgTm92IDExIDAyOjAyOjI2IEJSU1QgMjAwNiAgT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW9AZGViaWFuLm9yZz4KKyAgICAgICogRml4IGF1dG9nZW4uc2ggc2NyaXB0IHRvIGNhbGwgYXV0b3BvaW50IHdpdGggLWYKKyAgICAKKyAgICAKKyAgICBnaXQtc3ZuLWlkOiBzdm46Ly9zdm4uZGViaWFuLm9yZy9zdm4vcGFydGVkL3Vwc3RyZWFtL3RydW5rQDg5MiAKKzJkNDI0ZmQ3LTdmZTItMDMxMC1hZjc0LThiYzY1ZWRlYjE3MworCitjb21taXQgYzRhOGI5ZDk0YWZiODg5ZmM5MGY0YTg1NWQ1NWIwYTE3MTZjNTdiMgorQXV0aG9yOiBPdGF2aW8gU2FsdmFkb3IgPG90YXZpb0BkZWJpYW4ub3JnPgorRGF0ZTogICBTYXQgTm92IDExIDAxOjMyOjU4IDIwMDYgKzAwMDAKKworICAgIENoYW5nZXMgZG9uZSBvbiBkYXJjcyByZXBvc2l0b3J5IHN1aXRhYmxlIGZvciAxLjggcmVsZWFzZToKKyAgICAKKyAgICBGcmkgTm92IDEwIDIzOjE5OjE1IEJSU1QgMjAwNiAgT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW9AZGViaWFuLm9yZz4KKyAgICAgICogQ29kZSBjbGVhbi11cCBvbiByZWdpc3RlcmluZyBhbmQgdW5yZWdpc3RlcmluZyBvZiBkaXNrcworICAgIAorICAgICAgICAgICAgKiBsaWJwYXJ0ZWQvZGlzay5jIChwZWRfcmVnaXN0ZXJfZGlza190eXBlLCAKK3BlZF91bnJlZ2lzdGVyX2Rpc2tfdHlwZSk6CisgICAgICAgICAgICBDbGVhbi11cC4gUGF0Y2ggc2VudCBieSBEZWJhcnNoaSAnUmlzaGknIFJheSAKKzxkZWJhcnNoaS5yYXlAZ21haWwuY29tPi4KKyAgICAKKyAgICBGcmkgTm92IDEwIDIzOjE0OjU4IEJSU1QgMjAwNiAgT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW9AZGViaWFuLm9yZz4KKyAgICAgICogRml4IGZpbGVzeXN0ZW0gdW5yZWdpc3RlcmluZworICAgIAorICAgICAgICAgICAgKiBsaWJwYXJ0ZWQvZmlsZXN5cy5jIChwZWRfZmlsZV9zeXN0ZW1fdHlwZV91bnJlZ2lzdGVyKTogSGFuZGxlCisgICAgICAgICAgICBpbnN0YW5jZXMgd2hlcmUgZnNfdHlwZXMgPT0gTlVMTCBhbmQgdGhlIGdpdmVuIGZzX3R5cGUgaXMgbm90IGluCisgICAgICAgICAgICB0aGUgbGlzdCBvZiByZWdpc3RlcmVkIGZpbGUtc3lzdGVtIHR5cGVzLiBTb21lIGNvZGUgY2xlYW4tdXAuCisgICAgICAgICAgICBQYXRjaCBzZW50IGJ5IERlYmFyc2hpICdSaXNoaScgUmF5IDxkZWJhcnNoaS5yYXlAZ21haWwuY29tPi4KKyAgICAKKyAgICAKKyAgICBnaXQtc3ZuLWlkOiBzdm46Ly9zdm4uZGViaWFuLm9yZy9zdm4vcGFydGVkL3Vwc3RyZWFtL3RydW5rQDg5MSAKKzJkNDI0ZmQ3LTdmZTItMDMxMC1hZjc0LThiYzY1ZWRlYjE3MworCitjb21taXQgNjVhOWI4Nzk3MWExNzYxMjc0Yjc5YWVkNDY0YWU5MjRkOTI0Y2UwNAorQXV0aG9yOiBPdGF2aW8gU2FsdmFkb3IgPG90YXZpb0BkZWJpYW4ub3JnPgorRGF0ZTogICBGcmkgTm92IDEwIDE0OjA1OjE4IDIwMDYgKzAwMDAKKworICAgIENoYW5nZXMgZG9uZSBvbiBkYXJjcyByZXBvc2l0b3J5IHN1aXRhYmxlIGZvciAxLjggcmVsZWFzZToKKyAgICAKKyAgICBXZWQgTm92ICA4IDIwOjQwOjQzIEJSU1QgMjAwNiAgT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW9AZGViaWFuLm9yZz4KKyAgICAgICogTWVyZ2UgbGlicGFydGVkL0NoYW5nZUxvZyBjb25mbGljdCBjYXVzZWQgYnkgU3VidmVyc2lvbiBzeW5jaW5nCisgICAgCisgICAgV2VkIE5vdiAgOCAyMToxNTo1OCBCUlNUIDIwMDYgIE90YXZpbyBTYWx2YWRvciA8b3RhdmlvQGRlYmlhbi5vcmc+CisgICAgICAqIGRvYy9DL3BhcnRlZC44OiBzbWFsbCBkb2N1bWVudGF0aW9uIHNpbXBsaWZpY2F0aW9uCisgICAgCisgICAgV2VkIE5vdiAgOCAyMDowOTowMyBCUlNUIDIwMDYgIE90YXZpbyBTYWx2YWRvciA8b3RhdmlvQGRlYmlhbi5vcmc+CisgICAgICAqIGxpYnBhcnRlZC9mcy9oZnMvcHJvYmUuYzogRml4IGEgc2VnbWVudGF0aW9uIGZhdWx0IHdoZW4gcnVubmluZyB3aXRob3V0IAorZGVidWcKKyAgICAKKyAgICAKKyAgICAKKyAgICBnaXQtc3ZuLWlkOiBzdm46Ly9zdm4uZGViaWFuLm9yZy9zdm4vcGFydGVkL3Vwc3RyZWFtL3RydW5rQDg5MCAKKzJkNDI0ZmQ3LTdmZTItMDMxMC1hZjc0LThiYzY1ZWRlYjE3MworCitjb21taXQgZWQzMzQ3ZmZlNjk1YzQ1Y2RiMGU2MDM3ZTM4MmRiNjE5YjZlNzZjMgorQXV0aG9yOiBEYXZpZCBDYW50cmVsbCA8ZGNhbnRyZWxsQHJlZGhhdC5jb20+CitEYXRlOiAgIE1vbiBOb3YgNiAwMDozNDo1NyAyMDA2ICswMDAwCisKKyAgICBVcGRhdGVzIGZvciBwYXJ0ZWQtMS44LjByYzMKKyAgICAKKyAgICAKKyAgICBnaXQtc3ZuLWlkOiBzdm46Ly9zdm4uZGViaWFuLm9yZy9zdm4vcGFydGVkL3Vwc3RyZWFtL3RydW5rQDg4MiAKKzJkNDI0ZmQ3LTdmZTItMDMxMC1hZjc0LThiYzY1ZWRlYjE3MworCitjb21taXQgYjU1ZDRjYjdlYjQ4MWI3MTg5NGZmMzQxNmY5ZTA5MmZmYjc5NDA0MgorQXV0aG9yOiBEYXZpZCBDYW50cmVsbCA8ZGNhbnRyZWxsQHJlZGhhdC5jb20+CitEYXRlOiAgIE1vbiBOb3YgNiAwMDowMTowMSAyMDA2ICswMDAwCisKKyAgICAgICAqIGFyY2gvbGludXguYzogRGVmaW5lIFBST0NfREVWSUNFU19CVUZTSVogZm9yIHJlYWRpbmcgL3Byb2MvZGV2aWNlcywKKyAgICAgICBzZXQgdG8gMTYzODQuCisgICAgCisgICAgCisgICAgZ2l0LXN2bi1pZDogc3ZuOi8vc3ZuLmRlYmlhbi5vcmcvc3ZuL3BhcnRlZC91cHN0cmVhbS90cnVua0A4ODEgCisyZDQyNGZkNy03ZmUyLTAzMTAtYWY3NC04YmM2NWVkZWIxNzMKKworY29tbWl0IDg1Nzk1MmRiNDRjYmVlYmE0NjJmYzRiMWVmZWJiNzNhZGFiZWI5ZTkKK0F1dGhvcjogRGF2aWQgQ2FudHJlbGwgPGRjYW50cmVsbEByZWRoYXQuY29tPgorRGF0ZTogICBUaHUgTm92IDIgMjM6MzU6MzEgMjAwNiArMDAwMAorCisgICAgICAgKiBsYWJlbHMvbWFjLmMgKF9yYXdwYXJ0X2lzX2Jvb3QpOiBDaGVjayBmb3IgQXBwbGVfQm9vdCB0eXBlLgorICAgICAgICogbGFiZWxzL21hYy5jIChfcmF3cGFydF9hbmFseXNlKTogRG9uJ3QgY2hlY2sgdGhlIGRhdGFfcmVnaW9uX2xlbmd0aAorICAgICAgIGFnYWluc3QgdGhlIHBhcnQtPmdlb20ubGVuZ3RoIGZvciBib290IHBhcnRpdGlvbnMuCisgICAgCisgICAgCisgICAgZ2l0LXN2bi1pZDogc3ZuOi8vc3ZuLmRlYmlhbi5vcmcvc3ZuL3BhcnRlZC91cHN0cmVhbS90cnVua0A4ODAgCisyZDQyNGZkNy03ZmUyLTAzMTAtYWY3NC04YmM2NWVkZWIxNzMKKworY29tbWl0IGJlZGViNjM0NTdiNTQzY2QxNGJhNjJmZjE2N2I1NTJmNGI3ZjY0YjIKK0F1dGhvcjogRGF2aWQgQ2FudHJlbGwgPGRjYW50cmVsbEByZWRoYXQuY29tPgorRGF0ZTogICBUdWUgT2N0IDMxIDIwOjA2OjI1IDIwMDYgKzAwMDAKKworICAgIDIwNDggLT4gMTAyNAorICAgIAorICAgIAorICAgIGdpdC1zdm4taWQ6IHN2bjovL3N2bi5kZWJpYW4ub3JnL3N2bi9wYXJ0ZWQvdXBzdHJlYW0vdHJ1bmtAODcxIAorMmQ0MjRmZDctN2ZlMi0wMzEwLWFmNzQtOGJjNjVlZGViMTczCisKK2NvbW1pdCA1Mzc4NjNjNWRlZmQ1ZDNmMWJhMzNjZDY1ZjA2MGM2M2UyZWFiN2IwCitBdXRob3I6IERhdmlkIENhbnRyZWxsIDxkY2FudHJlbGxAcmVkaGF0LmNvbT4KK0RhdGU6ICAgVHVlIE9jdCAzMSAyMDowNTo1NSAyMDA2ICswMDAwCisKKyAgICAgICAgICAgICogZGV2aWNlLmMgKGNhbm9uaWNhbGl6ZV9maWxlX25hbWUpOiBjYWxsb2Mgc2hvdWxkIHVzZSBzaXplb2YoY2hhcikKKyAgICAgICAgICAgIGluc3RlYWQgb2YgMSAoZnJvbSBEZWJhcnNoaSBSYXkpLgorICAgICAgICAgICAgKiBhcmNoL2xpbnV4LmMgKHJlYWRGRCk6IFVzZSBhIDFLQiBidWZmZXIgdG8gcmVhZCAvcHJvYy9kZXZpY2VzCisgICAgICAgICAgICByYXRoZXIgdGhhbiBhIDE2S0IgYnVmZmVyLiAgSW5pdCBmaWxlc2l6ZSB0byB6ZXJvIGF0IGRlY2xhcmF0aW9uLgorICAgICAgICAgICAgQ29tYmluZSBlcnJvciBhbmQgRU9GIGNoZWNrIGZvciByZWFkKCkgbG9vcC4gIE1lbW9yeSBjbGVhbnVwcyBhdAorICAgICAgICAgICAgZnVuY3Rpb24gZXhpdC4gIFVzZSBtYWxsb2MoKSBpbnN0ZWFkIG9mIGNhbGxvYygpIChmcm9tIERlYmFyc2hpCisgICAgICAgICAgICBSYXkpLgorICAgICAgICAgICAgKiBhcmNoL2xpbnV4LmMgKF9pc19kbV9tYWpvcik6IFRlc3QgZXhwcmVzc2lvbiBhbmQgbG9vcCBjbGVhbnVwcworICAgICAgICAgICAgKGZyb20gRGViYXJzaGkgUmF5KS4KKyAgICAKKyAgICAKKyAgICBnaXQtc3ZuLWlkOiBzdm46Ly9zdm4uZGViaWFuLm9yZy9zdm4vcGFydGVkL3Vwc3RyZWFtL3RydW5rQDg3MCAKKzJkNDI0ZmQ3LTdmZTItMDMxMC1hZjc0LThiYzY1ZWRlYjE3MworCitjb21taXQgZTVhYmQ0ZDU1OTdiYTRhNTRkOWI1ZTQxOTRmOGQ5MDk4OGMxOGUxOQorQXV0aG9yOiBEYXZpZCBDYW50cmVsbCA8ZGNhbnRyZWxsQHJlZGhhdC5jb20+CitEYXRlOiAgIFR1ZSBPY3QgMzEgMjA6MDU6NDIgMjAwNiArMDAwMAorCisgICAgICAgICAgICAqIHBhcnRlZC5jIChkb19wcmludCk6IEFkZCBkZXZpY2UtbWFwcGVyIHR5cGUgdG8gdGhlIHRyYW5zcG9ydCB0eXBlCisgICAgICAgICAgICBsaXN0IChmcm9tIERlYmFyc2hpIFJheSkuCisgICAgCisgICAgCisgICAgZ2l0LXN2bi1pZDogc3ZuOi8vc3ZuLmRlYmlhbi5vcmcvc3ZuL3BhcnRlZC91cHN0cmVhbS90cnVua0A4NjkgCisyZDQyNGZkNy03ZmUyLTAzMTAtYWY3NC04YmM2NWVkZWIxNzMKKworY29tbWl0IGVmNDM0M2VmZTFlYTI4M2ZmM2Y0ZWU0NDA0NmFmMWE0NzMwMTRmOTMKK0F1dGhvcjogRGF2aWQgQ2FudHJlbGwgPGRjYW50cmVsbEByZWRoYXQuY29tPgorRGF0ZTogICBUaHUgT2N0IDI2IDIwOjIzOjIwIDIwMDYgKzAwMDAKKworICAgICAgICAgICAgKiBhcmNoL2xpbnV4LmM6IEdvIHRvIGVycm9yX2ZyZWVfYXJjaF9zcGVjaWZpYyByYXRoZXIgdGhhbgorICAgICAgICAgICAgZXJyb3JfZnJlZV9kZXYgZm9yIGluaXRfZ2VuZXJpYygpIGZhaWx1cmUgb24gUEVEX0RFVklDRV9VQkQuCisgICAgCisgICAgCisgICAgZ2l0LXN2bi1pZDogc3ZuOi8vc3ZuLmRlYmlhbi5vcmcvc3ZuL3BhcnRlZC91cHN0cmVhbS90cnVua0A4NjYgCisyZDQyNGZkNy03ZmUyLTAzMTAtYWY3NC04YmM2NWVkZWIxNzMKKworY29tbWl0IDUyYjUyODFiYmJlNmY5ZjI2MmYwMjRiYTMxYmQ0OTc4N2MxYTFhNGUKK0F1dGhvcjogRGF2aWQgQ2FudHJlbGwgPGRjYW50cmVsbEByZWRoYXQuY29tPgorRGF0ZTogICBUaHUgT2N0IDI2IDIwOjIyOjU5IDIwMDYgKzAwMDAKKworICAgIExpbmUgbGVuZ3RoIGZpeGVzLgorICAgIAorICAgIAorICAgIGdpdC1zdm4taWQ6IHN2bjovL3N2bi5kZWJpYW4ub3JnL3N2bi9wYXJ0ZWQvdXBzdHJlYW0vdHJ1bmtAODY1IAorMmQ0MjRmZDctN2ZlMi0wMzEwLWFmNzQtOGJjNjVlZGViMTczCisKK2NvbW1pdCAzY2Y3ZTk4ZjY1YmYxNjk1Y2VkYWZkOWNlZWM1M2VhY2JiMmY0OWVjCitBdXRob3I6IERhdmlkIENhbnRyZWxsIDxkY2FudHJlbGxAcmVkaGF0LmNvbT4KK0RhdGU6ICAgV2VkIE9jdCAxMSAyMDo1Mjo1OCAyMDA2ICswMDAwCisKKyAgICBOZWVkIHRoZSBmaWxlbmFtZTogZGlyZWN0aXZlIGFzIHdlbGwuCisgICAgCisgICAgCisgICAgZ2l0LXN2bi1pZDogc3ZuOi8vc3ZuLmRlYmlhbi5vcmcvc3ZuL3BhcnRlZC91cHN0cmVhbS90cnVua0A4NTggCisyZDQyNGZkNy03ZmUyLTAzMTAtYWY3NC04YmM2NWVkZWIxNzMKKworY29tbWl0IDMxNTYyZTk1YWUzMjM0OTI3ODVmODIxYjNkYTYxZDViZWE1YTg4MjkKK0F1dGhvcjogRGF2aWQgQ2FudHJlbGwgPGRjYW50cmVsbEByZWRoYXQuY29tPgorRGF0ZTogICBXZWQgT2N0IDExIDIwOjM1OjI0IDIwMDYgKzAwMDAKKworICAgIFNldCBkaXJlY3RpdmUgZmlsZSB2ZXJzaW9uIHRvIDEuMS4KKyAgICAKKyAgICAKKyAgICBnaXQtc3ZuLWlkOiBzdm46Ly9zdm4uZGViaWFuLm9yZy9zdm4vcGFydGVkL3Vwc3RyZWFtL3RydW5rQDg1NSAKKzJkNDI0ZmQ3LTdmZTItMDMxMC1hZjc0LThiYzY1ZWRlYjE3MworCitjb21taXQgMjgyMGUwOTFlNTFiMzk0YWNhMjZhNTBjMmNlMGUzM2ZkNzVmZDIyNAorQXV0aG9yOiBEYXZpZCBDYW50cmVsbCA8ZGNhbnRyZWxsQHJlZGhhdC5jb20+CitEYXRlOiAgIFdlZCBPY3QgMTEgMTk6NTU6NTggMjAwNiArMDAwMAorCisgICAgQ29uZGl0aW9uYWxpemUgdGhlIGRldmljZS1tYXBwZXIgc3R1ZmYuCisgICAgCisgICAgCisgICAgZ2l0LXN2bi1pZDogc3ZuOi8vc3ZuLmRlYmlhbi5vcmcvc3ZuL3BhcnRlZC91cHN0cmVhbS90cnVua0A4NTIgCisyZDQyNGZkNy03ZmUyLTAzMTAtYWY3NC04YmM2NWVkZWIxNzMKKworY29tbWl0IDdhZTA3ZDUyZWM4NGMwMGUzNzQ5ZmQ3NDMwMmZiZTk0NzA0NDdhZjAKK0F1dGhvcjogRGF2aWQgQ2FudHJlbGwgPGRjYW50cmVsbEByZWRoYXQuY29tPgorRGF0ZTogICBXZWQgT2N0IDExIDE5OjQ4OjI5IDIwMDYgKzAwMDAKKworICAgIGkxOG4gdXBkYXRlcy4KKyAgICAKKyAgICAKKyAgICBnaXQtc3ZuLWlkOiBzdm46Ly9zdm4uZGViaWFuLm9yZy9zdm4vcGFydGVkL3Vwc3RyZWFtL3RydW5rQDg1MCAKKzJkNDI0ZmQ3LTdmZTItMDMxMC1hZjc0LThiYzY1ZWRlYjE3MworCitjb21taXQgMmY5MGZlMmI2MjQ4MDczNDcxMjdlN2E5ZGRlM2MyZTI4YzMyYTI1NgorQXV0aG9yOiBEYXZpZCBDYW50cmVsbCA8ZGNhbnRyZWxsQHJlZGhhdC5jb20+CitEYXRlOiAgIFdlZCBPY3QgMTEgMTk6NDY6MDcgMjAwNiArMDAwMAorCisgICAgQnVtcCB2ZXJzaW9uLgorICAgIAorICAgIAorICAgIGdpdC1zdm4taWQ6IHN2bjovL3N2bi5kZWJpYW4ub3JnL3N2bi9wYXJ0ZWQvdXBzdHJlYW0vdHJ1bmtAODQ5IAorMmQ0MjRmZDctN2ZlMi0wMzEwLWFmNzQtOGJjNjVlZGViMTczCisKK2NvbW1pdCAyZDNmZjU3ODJmNDc4YzlhNjhlMTA4NDc4N2U4ZTk3NTU2MDU0YWFhCitBdXRob3I6IERhdmlkIENhbnRyZWxsIDxkY2FudHJlbGxAcmVkaGF0LmNvbT4KK0RhdGU6ICAgV2VkIE9jdCAxMSAxOTo0NTo1MiAyMDA2ICswMDAwCisKKyAgICBVcGRhdGVzIGZvciAxLjguMHJjMiByZWxlYXNlLgorICAgIAorICAgIAorICAgIGdpdC1zdm4taWQ6IHN2bjovL3N2bi5kZWJpYW4ub3JnL3N2bi9wYXJ0ZWQvdXBzdHJlYW0vdHJ1bmtAODQ4IAorMmQ0MjRmZDctN2ZlMi0wMzEwLWFmNzQtOGJjNjVlZGViMTczCisKK2NvbW1pdCA3OTdjZGIwMGNiZDA1Y2E1Mjk1MzdkZTY1NDZjNTk1MjkwZGIzOTc0CitBdXRob3I6IERhdmlkIENhbnRyZWxsIDxkY2FudHJlbGxAcmVkaGF0LmNvbT4KK0RhdGU6ICAgV2VkIE9jdCAxMSAxOTo0MjowOCAyMDA2ICswMDAwCisKKyAgICBBZGRlZCAvZGV2L21hcHBlciBkZXZpY2Ugc3VwcG9ydCAocGF0Y2ggZnJvbSBQZXRlciBKb25lcykuCisgICAgCisgICAgCisgICAgZ2l0LXN2bi1pZDogc3ZuOi8vc3ZuLmRlYmlhbi5vcmcvc3ZuL3BhcnRlZC91cHN0cmVhbS90cnVua0A4NDcgCisyZDQyNGZkNy03ZmUyLTAzMTAtYWY3NC04YmM2NWVkZWIxNzMKKworY29tbWl0IGRmOTI0N2MxNDI1ZTIzZGFhYWY1MWUxNWQyYWZlNWQzOTM5YjU4YTQKK0F1dGhvcjogRGF2aWQgQ2FudHJlbGwgPGRjYW50cmVsbEByZWRoYXQuY29tPgorRGF0ZTogICBNb24gT2N0IDkgMTg6MzM6NDggMjAwNiArMDAwMAorCisgICAgICAgKiBjcy9nZW9tLmMgKHBlZF9nZW9tZXRyeV9yZWFkKTogRG8gbm90IHRocm93IFBFRF9FWENFUFRJT05fRVJST1IgaGVyZQorICAgICAgIGlmIGFjY2Vzc2luZyBzZWN0b3JzIG91dHNpZGUgb2YgcGFydGl0aW9uIGJvdW5kYXJ5LiBSZXR1cm5pbmcgZmFsc2UKKyAgICAgICBjYXVzZXMgcGVkX2dlb21ldHJ5X2NoZWNrKCkgdG8gc2hpZnQgY29ycmVjdGx5IGFueXdheS4gIFRoaXMgb2NjdXJzCisgICAgICAgb24gY3VycmVudCBNYWMgZGlza2xhYmVscywgYW1vbmcgb3RoZXIgc3lzdGVtcy4KKyAgICAKKyAgICAKKyAgICBnaXQtc3ZuLWlkOiBzdm46Ly9zdm4uZGViaWFuLm9yZy9zdm4vcGFydGVkL3Vwc3RyZWFtL3RydW5rQDg0NSAKKzJkNDI0ZmQ3LTdmZTItMDMxMC1hZjc0LThiYzY1ZWRlYjE3MworCitjb21taXQgNzQzYTU3MzU0Y2JiN2ZlMGMwY2ZiMzhjY2E1ZDY5YTM1ZDBmMGYzZAorQXV0aG9yOiBEYXZpZCBDYW50cmVsbCA8ZGNhbnRyZWxsQHJlZGhhdC5jb20+CitEYXRlOiAgIE1vbiBPY3QgOSAxODoyOToyMiAyMDA2ICswMDAwCisKKyAgICAgICAqIGRpc2suYyAocGVkX3VucmVnaXN0ZXJfZGlza190eXBlKTogSGFuZGxlIGluc3RhbmNlcyB3aGVyZSBkaXNrX3R5cGVzCisgICAgICAgPT0gTlVMTCBhbmQgdGhlIGdpdmVuIHR5cGUgaXMgbm90IGluIHRoZSBsaXN0IG9mIHJlZ2lzdGVyZWQgZGlzayB0eXBlcworICAgICAgIChmcm9tIERlYmFyc2hpIFJheSkuCisgICAgCisgICAgCisgICAgZ2l0LXN2bi1pZDogc3ZuOi8vc3ZuLmRlYmlhbi5vcmcvc3ZuL3BhcnRlZC91cHN0cmVhbS90cnVua0A4NDQgCisyZDQyNGZkNy03ZmUyLTAzMTAtYWY3NC04YmM2NWVkZWIxNzMKKworY29tbWl0IGM5YjdkOGZmOWQyMzc2NjY2M2Q1OTQ2NWU0MDI1YmI5Mjc4YzJmMTAKK0F1dGhvcjogRGF2aWQgQ2FudHJlbGwgPGRjYW50cmVsbEByZWRoYXQuY29tPgorRGF0ZTogICBNb24gT2N0IDkgMTg6MjU6MDYgMjAwNiArMDAwMAorCisgICAgICAgICAgICogcGFydGVkLmMgKGRvX3ByaW50KTogRGVmaW5lIHRyYW5zcG9ydCB0eXBlIGxpc3QgYW5kIGRpc3BsYXkgZGlzaworICAgICAgICAgICBtb2RlbCB0eXBlIGFuZCB0cmFuc3BvcnQgdHlwZSAoZnJvbSBEZWJhcnNoaSBSYXkpLgorICAgIAorICAgIAorICAgIGdpdC1zdm4taWQ6IHN2bjovL3N2bi5kZWJpYW4ub3JnL3N2bi9wYXJ0ZWQvdXBzdHJlYW0vdHJ1bmtAODQzIAorMmQ0MjRmZDctN2ZlMi0wMzEwLWFmNzQtOGJjNjVlZGViMTczCisKK2NvbW1pdCBkNDA0NTQyNDkzYzZlNmM5ZjA5NTAzNzVhZjg0Nzg3N2ZjNDc3ZWI5CitBdXRob3I6IERhdmlkIENhbnRyZWxsIDxkY2FudHJlbGxAcmVkaGF0LmNvbT4KK0RhdGU6ICAgTW9uIE9jdCA5IDE4OjAzOjUyIDIwMDYgKzAwMDAKKworICAgIEZvcmdvdCBjaGFuZ2Vsb2cgbm90aWNlLgorICAgIAorICAgIAorICAgIGdpdC1zdm4taWQ6IHN2bjovL3N2bi5kZWJpYW4ub3JnL3N2bi9wYXJ0ZWQvdXBzdHJlYW0vdHJ1bmtAODQyIAorMmQ0MjRmZDctN2ZlMi0wMzEwLWFmNzQtOGJjNjVlZGViMTczCisKK2NvbW1pdCBlMTFlZTZhZjAxNjU1N2M3MWU0MDU2MWMwMjA2MGY3MWMyODE0YTg0CitBdXRob3I6IERhdmlkIENhbnRyZWxsIDxkY2FudHJlbGxAcmVkaGF0LmNvbT4KK0RhdGU6ICAgTW9uIE9jdCA5IDE4OjAzOjIyIDIwMDYgKzAwMDAKKworICAgIFVwZGF0ZWQgaTE4biBmaWxlcy4KKyAgICAKKyAgICAKKyAgICBnaXQtc3ZuLWlkOiBzdm46Ly9zdm4uZGViaWFuLm9yZy9zdm4vcGFydGVkL3Vwc3RyZWFtL3RydW5rQDg0MSAKKzJkNDI0ZmQ3LTdmZTItMDMxMC1hZjc0LThiYzY1ZWRlYjE3MworCitjb21taXQgZjBiOWM4Y2YwMjE5NmNlN2U2ZDFlYWNjMzllYWQxODc5MjY4ZWUwYQorQXV0aG9yOiBEYXZpZCBDYW50cmVsbCA8ZGNhbnRyZWxsQHJlZGhhdC5jb20+CitEYXRlOiAgIEZyaSBPY3QgNiAxOTozNjoxNCAyMDA2ICswMDAwCisKKyAgICAgICAqIGFyY2gvbGludXguYzogQ2hhbmdlIF9fR05VX1NPVVJDRSBkZWZpbmUgdG8gX0dOVV9TT1VSQ0UgKG9ubHkgb25lCisgICAgICAgdW5kZXJzY29yZSBhdCB0aGUgYmVnaW5uaW5nKS4gRml4ZXMgcHJvYmxlbSB3aXRoIGNlcnRhaW4gc3lzdGVtcworICAgICAgIG5vdCBnZXR0aW5nIHBvc2l4X21lbWFsaWduKCkgZGVmaW5lZCBkdXJpbmcgY29tcGlsYXRpb24uCisgICAgCisgICAgCisgICAgZ2l0LXN2bi1pZDogc3ZuOi8vc3ZuLmRlYmlhbi5vcmcvc3ZuL3BhcnRlZC91cHN0cmVhbS90cnVua0A4NDAgCisyZDQyNGZkNy03ZmUyLTAzMTAtYWY3NC04YmM2NWVkZWIxNzMKKworY29tbWl0IDRiOWYyNDY3MzFmMDYxYTYxZTYzZTNhZjJlZGRmNGQxMzZmOTc3NWEKK0F1dGhvcjogRGF2aWQgQ2FudHJlbGwgPGRjYW50cmVsbEByZWRoYXQuY29tPgorRGF0ZTogICBGcmkgT2N0IDYgMTg6MTU6NDEgMjAwNiArMDAwMAorCisgICAgICAgKiBzY3JpcHRzL3JlbGVhc2UvdGFyYmFsbF91cGxvYWQuc2g6IFNpbmNlIHYxLjAgZGlyZWN0aXZlIGZpbGVzIHdpbGwKKyAgICAgICBubyBsb25nZXIgYmUgc3VwcG9ydGVkIGJ5IGZ0cC11cGxvYWQuZ251Lm9yZyBhZnRlciAyMDA2LCBtb2RpZmllZCB0aGUKKyAgICAgICB1cGxvYWQgc2NyaXB0IHRvIHVzZSB0aGUgdjEuMSBmb3JtYXQuCisgICAgCisgICAgCisgICAgZ2l0LXN2bi1pZDogc3ZuOi8vc3ZuLmRlYmlhbi5vcmcvc3ZuL3BhcnRlZC91cHN0cmVhbS90cnVua0A4MzkgCisyZDQyNGZkNy03ZmUyLTAzMTAtYWY3NC04YmM2NWVkZWIxNzMKKworY29tbWl0IDE3MzNmNjgwZjIyYTZmMTVhZDBiYTg2YTM4NDljZjllNjI4MGMzNTEKK0F1dGhvcjogRGF2aWQgQ2FudHJlbGwgPGRjYW50cmVsbEByZWRoYXQuY29tPgorRGF0ZTogICBGcmkgT2N0IDYgMTc6NTE6NDIgMjAwNiArMDAwMAorCisgICAgICAgKiBzY3JpcHRzL3JlbGVhc2UvdGFyYmFsbF91cGxvYWQuc2g6IFN1cHBvcnQgdGhlIC1hIChvciAtLWFscGhhKSBzd2l0Y2gKKyAgICAgICBvbiB0aGUgdGFyYmFsbCB1cGxvYWQgc2NyaXB0LiBUaGlzIHN3aXRjaCB3aWxsIHVwbG9hZCB0aGUgcmVsZWFzZSB0bworICAgICAgIGFscGhhLmdudS5vcmcgcmF0aGVyIHRoYW4gZnRwLmdudS5vcmcuCisgICAgCisgICAgCisgICAgZ2l0LXN2bi1pZDogc3ZuOi8vc3ZuLmRlYmlhbi5vcmcvc3ZuL3BhcnRlZC91cHN0cmVhbS90cnVua0A4MzggCisyZDQyNGZkNy03ZmUyLTAzMTAtYWY3NC04YmM2NWVkZWIxNzMKKworY29tbWl0IGZlZTgxYzQ2ZjU4OTBkOTAyNGMwZjRlMTY0ZDU1NWZlODI4ZjBkMTMKK0F1dGhvcjogRGF2aWQgQ2FudHJlbGwgPGRjYW50cmVsbEByZWRoYXQuY29tPgorRGF0ZTogICBGcmkgU2VwIDE1IDE5OjE0OjE3IDIwMDYgKzAwMDAKKworICAgIEZpeCBleGVjdXRpb24gb2YgYXV0b2dlbi5zaCBhbmQgY29uZmlndXJlLgorICAgIAorICAgIAorICAgIGdpdC1zdm4taWQ6IHN2bjovL3N2bi5kZWJpYW4ub3JnL3N2bi9wYXJ0ZWQvdXBzdHJlYW0vdHJ1bmtAODM2IAorMmQ0MjRmZDctN2ZlMi0wMzEwLWFmNzQtOGJjNjVlZGViMTczCisKK2NvbW1pdCA2N2Q2YmRjZmUwZTNiMzQ0NzI0M2UxZTNiYTJhYzE5NWZkYTZlMzQ5CitBdXRob3I6IERhdmlkIENhbnRyZWxsIDxkY2FudHJlbGxAcmVkaGF0LmNvbT4KK0RhdGU6ICAgRnJpIFNlcCAxNSAxOToxMDowOCAyMDA2ICswMDAwCisKKyAgICBUaGVzZSAodXB4IGFuZCBzdGF0aWZpZXIpIGFyZSBub3QgY2FsbGVkIGZyb20gYW55d2hlcmUuCisgICAgCisgICAgCisgICAgZ2l0LXN2bi1pZDogc3ZuOi8vc3ZuLmRlYmlhbi5vcmcvc3ZuL3BhcnRlZC91cHN0cmVhbS90cnVua0A4MzUgCisyZDQyNGZkNy03ZmUyLTAzMTAtYWY3NC04YmM2NWVkZWIxNzMKKworY29tbWl0IDBlMzI3NmUyYWQ1YmRmYzUxMzQwNjY0OTlhOTRkYWYyYWUzZGY0NjEKK0F1dGhvcjogRGF2aWQgQ2FudHJlbGwgPGRjYW50cmVsbEByZWRoYXQuY29tPgorRGF0ZTogICBGcmkgU2VwIDE1IDE5OjA2OjUzIDIwMDYgKzAwMDAKKworICAgIFVwZGF0ZWQgZm9yIHBhcnRlZC0xLjguMHJjMS4KKyAgICAKKyAgICAKKyAgICBnaXQtc3ZuLWlkOiBzdm46Ly9zdm4uZGViaWFuLm9yZy9zdm4vcGFydGVkL3Vwc3RyZWFtL3RydW5rQDgzNCAKKzJkNDI0ZmQ3LTdmZTItMDMxMC1hZjc0LThiYzY1ZWRlYjE3MworCitjb21taXQgNzM1MDY2Nzk4YjNiZGQwNWNiMmQ2MzI0YzQ1MTlkMjFhZDhmOTRkZQorQXV0aG9yOiBEYXZpZCBDYW50cmVsbCA8ZGNhbnRyZWxsQHJlZGhhdC5jb20+CitEYXRlOiAgIEZyaSBTZXAgMTUgMTk6MDU6MjMgMjAwNiArMDAwMAorCisgICAgICAgICAgICogZG9jL3BvNGEubWs6IFJlbW92ZWQgZmFrZSogc3R1ZmYuIEZpeGVkIGFsbC1sb2NhbCB0YXJnZXQgc28geW91IAorZG9uJ3QKKyAgICAgICAgICAgZW5kIHVwIGluIGFuIGluZmluaXRlIG1ha2UgbG9vcCB0cnlpbmcgdG8gbWFrZSAnKicuIEZpeGVkIHRoZSByZW1vdmUKKyAgICAgICAgICAgdGFyZ2V0IGFzIHdlbGwuCisgICAgCisgICAgCisgICAgZ2l0LXN2bi1pZDogc3ZuOi8vc3ZuLmRlYmlhbi5vcmcvc3ZuL3BhcnRlZC91cHN0cmVhbS90cnVua0A4MzMgCisyZDQyNGZkNy03ZmUyLTAzMTAtYWY3NC04YmM2NWVkZWIxNzMKKworY29tbWl0IGVlNTFkYzY0ZjljZTg1YjhlZmUzZTMxZTM3MWM1ZmRiOTU5MWRmZDgKK0F1dGhvcjogRGF2aWQgQ2FudHJlbGwgPGRjYW50cmVsbEByZWRoYXQuY29tPgorRGF0ZTogICBGcmkgU2VwIDE1IDE4OjU0OjU1IDIwMDYgKzAwMDAKKworICAgIFRhYnMgZm9yIHRoZSB1cGRhdGVwbyB0YXJnZXQuCisgICAgCisgICAgCisgICAgZ2l0LXN2bi1pZDogc3ZuOi8vc3ZuLmRlYmlhbi5vcmcvc3ZuL3BhcnRlZC91cHN0cmVhbS90cnVua0A4MzIgCisyZDQyNGZkNy03ZmUyLTAzMTAtYWY3NC04YmM2NWVkZWIxNzMKKworY29tbWl0IGQ3NmE4Yjk4OWMyNjQxNGExMTA4NWQ5OTVkNDYzZjNiMjkyNmIxZGEKK0F1dGhvcjogRGF2aWQgQ2FudHJlbGwgPGRjYW50cmVsbEByZWRoYXQuY29tPgorRGF0ZTogICBGcmkgU2VwIDE1IDE4OjMyOjU0IDIwMDYgKzAwMDAKKworICAgIEFkZCB2dG9jLmggYW5kIGZkYXNkLmggdG8gdGhlIGxpc3QuCisgICAgCisgICAgCisgICAgZ2l0LXN2bi1pZDogc3ZuOi8vc3ZuLmRlYmlhbi5vcmcvc3ZuL3BhcnRlZC91cHN0cmVhbS90cnVua0A4MzEgCisyZDQyNGZkNy03ZmUyLTAzMTAtYWY3NC04YmM2NWVkZWIxNzMKKworY29tbWl0IGE0MWNkMjJlMWYwMzU0NzhjNDI5ZjVjYjVmMjAxN2Q0MDViMzE4NjQKK0F1dGhvcjogRGF2aWQgQ2FudHJlbGwgPGRjYW50cmVsbEByZWRoYXQuY29tPgorRGF0ZTogICBGcmkgU2VwIDE1IDE4OjI3OjQzIDIwMDYgKzAwMDAKKworICAgIFJlbW92ZWQgdGhlIGV4dHJhIGRvdWJsZSBxdW90ZSBhdCB0aGUgZW5kIG9mIGxpbmUgNiBpbiAKK3BhcnRwcm9iZS44LnB0X0JSLnBvLiAgT3RoZXIgdXBkYXRlcyBmb3IgaTE4bi4KKyAgICAKKyAgICAKKyAgICBnaXQtc3ZuLWlkOiBzdm46Ly9zdm4uZGViaWFuLm9yZy9zdm4vcGFydGVkL3Vwc3RyZWFtL3RydW5rQDgzMCAKKzJkNDI0ZmQ3LTdmZTItMDMxMC1hZjc0LThiYzY1ZWRlYjE3MworCitjb21taXQgM2Q1ZjIyODE0YmMyMDU0NmJkNjM2MWEyZTcxOGIyYmRlMjJmZWQxMgorQXV0aG9yOiBEYXZpZCBDYW50cmVsbCA8ZGNhbnRyZWxsQHJlZGhhdC5jb20+CitEYXRlOiAgIEZyaSBTZXAgMTUgMTg6MTY6MTkgMjAwNiArMDAwMAorCisgICAgQWRkZWQgYSBzY3JpcHQgdG8gY2xlYW4gdGhlIHRyZWUgYWZ0ZXIgcnVubmluZyAnbWFrZSBkaXN0Y2xlYW4nLiAgR2V0cyBpdCAKK2JhY2sgdG8gdGhlIGNoZWNrZWQtb3V0IHN0YXRlIGZyb20gc3ZuLgorICAgIAorICAgIAorICAgIGdpdC1zdm4taWQ6IHN2bjovL3N2bi5kZWJpYW4ub3JnL3N2bi9wYXJ0ZWQvdXBzdHJlYW0vdHJ1bmtAODI5IAorMmQ0MjRmZDctN2ZlMi0wMzEwLWFmNzQtOGJjNjVlZGViMTczCisKK2NvbW1pdCBlNGFiNDRhMzgwNjhlM2E4NTZjNDliNjgxOTYzMTU5MDMwYTM3N2EzCitBdXRob3I6IERhdmlkIENhbnRyZWxsIDxkY2FudHJlbGxAcmVkaGF0LmNvbT4KK0RhdGU6ICAgRnJpIFNlcCAxNSAxODoxNDoyOCAyMDA2ICswMDAwCisKKyAgICBpMThuIHVwZGF0ZXMgZm9yIHBhcnRlZC0xLjguMC4KKyAgICAKKyAgICAKKyAgICBnaXQtc3ZuLWlkOiBzdm46Ly9zdm4uZGViaWFuLm9yZy9zdm4vcGFydGVkL3Vwc3RyZWFtL3RydW5rQDgyOCAKKzJkNDI0ZmQ3LTdmZTItMDMxMC1hZjc0LThiYzY1ZWRlYjE3MworCitjb21taXQgNGMyNzM0MDhlZGU3MGEzNDM3MjdjZmE4MGQ2NTYxMTRlMDg1YzY5NgorQXV0aG9yOiBEYXZpZCBDYW50cmVsbCA8ZGNhbnRyZWxsQHJlZGhhdC5jb20+CitEYXRlOiAgIEZyaSBTZXAgMTUgMTg6MTQ6MDYgMjAwNiArMDAwMAorCisgICAgUmVtb3ZlZCAqLmggZmlsZXMgZnJvbSB0aGUgTWFrZWZpbGUuCisgICAgCisgICAgCisgICAgZ2l0LXN2bi1pZDogc3ZuOi8vc3ZuLmRlYmlhbi5vcmcvc3ZuL3BhcnRlZC91cHN0cmVhbS90cnVua0A4MjcgCisyZDQyNGZkNy03ZmUyLTAzMTAtYWY3NC04YmM2NWVkZWIxNzMKKworY29tbWl0IDM2YjNhOThlM2Q1ZmE2YmIxYTE4MmYzYThjZmVhOGQ2ZDAxMGRjMjAKK0F1dGhvcjogRGF2aWQgQ2FudHJlbGwgPGRjYW50cmVsbEByZWRoYXQuY29tPgorRGF0ZTogICBGcmkgU2VwIDE1IDE4OjEzOjA3IDIwMDYgKzAwMDAKKworICAgIGkxOG4gdXBkYXRlcyBmb3IgcGFydGVkLTEuOC4wLgorICAgIAorICAgIAorICAgIGdpdC1zdm4taWQ6IHN2bjovL3N2bi5kZWJpYW4ub3JnL3N2bi9wYXJ0ZWQvdXBzdHJlYW0vdHJ1bmtAODI2IAorMmQ0MjRmZDctN2ZlMi0wMzEwLWFmNzQtOGJjNjVlZGViMTczCisKK2NvbW1pdCA4NTlkMGQ2OGZlMDMyMzViNDM4YTczOGVkNWE2NWEzMmQ4ODA2MTRlCitBdXRob3I6IERhdmlkIENhbnRyZWxsIDxkY2FudHJlbGxAcmVkaGF0LmNvbT4KK0RhdGU6ICAgRnJpIFNlcCAxNSAxODoxMjozNSAyMDA2ICswMDAwCisKKyAgICBSZW1vdmVkIGZyb20gdmVyc2lvbiBjb250cm9sLgorICAgIAorICAgIAorICAgIGdpdC1zdm4taWQ6IHN2bjovL3N2bi5kZWJpYW4ub3JnL3N2bi9wYXJ0ZWQvdXBzdHJlYW0vdHJ1bmtAODI1IAorMmQ0MjRmZDctN2ZlMi0wMzEwLWFmNzQtOGJjNjVlZGViMTczCisKK2NvbW1pdCBmNDQ0OGY1NDk3MzRlN2ZkOGVkNTc1MDI0YzgzYTlmZWFkNDk2YmY4CitBdXRob3I6IERhdmlkIENhbnRyZWxsIDxkY2FudHJlbGxAcmVkaGF0LmNvbT4KK0RhdGU6ICAgRnJpIFNlcCAxNSAxODoxMToxMCAyMDA2ICswMDAwCisKKyAgICBpMThuIHVwZGF0ZXMgZm9yIHBhcnRlZC0xLjguMC4KKyAgICAKKyAgICAKKyAgICBnaXQtc3ZuLWlkOiBzdm46Ly9zdm4uZGViaWFuLm9yZy9zdm4vcGFydGVkL3Vwc3RyZWFtL3RydW5rQDgyNCAKKzJkNDI0ZmQ3LTdmZTItMDMxMC1hZjc0LThiYzY1ZWRlYjE3MworCitjb21taXQgNGQ2OWNkMzdkNmU1NWQ0N2ExZmRmMTI0NTE1NjZhNGUxMjQ0MjQwNworQXV0aG9yOiBEYXZpZCBDYW50cmVsbCA8ZGNhbnRyZWxsQHJlZGhhdC5jb20+CitEYXRlOiAgIEZyaSBTZXAgMTUgMTg6MTA6NDMgMjAwNiArMDAwMAorCisgICAgUmVtb3ZlZCBmcm9tIHZlcnNpb24gY29udHJvbC4KKyAgICAKKyAgICAKKyAgICBnaXQtc3ZuLWlkOiBzdm46Ly9zdm4uZGViaWFuLm9yZy9zdm4vcGFydGVkL3Vwc3RyZWFtL3RydW5rQDgyMyAKKzJkNDI0ZmQ3LTdmZTItMDMxMC1hZjc0LThiYzY1ZWRlYjE3MworCitjb21taXQgNDhlYTM4MTE4ZmM5YzYwMWVjYTYxNjY4MGE2NTMyN2NiNGRjZGNmZQorQXV0aG9yOiBEYXZpZCBDYW50cmVsbCA8ZGNhbnRyZWxsQHJlZGhhdC5jb20+CitEYXRlOiAgIEZyaSBTZXAgMTUgMTU6MjU6NDEgMjAwNiArMDAwMAorCisgICAgVXBkYXRlZCBmb3IgdmVyc2lvbiAxLjguMHJjMS4KKyAgICAKKyAgICAKKyAgICBnaXQtc3ZuLWlkOiBzdm46Ly9zdm4uZGViaWFuLm9yZy9zdm4vcGFydGVkL3Vwc3RyZWFtL3RydW5rQDgyMiAKKzJkNDI0ZmQ3LTdmZTItMDMxMC1hZjc0LThiYzY1ZWRlYjE3MworCitjb21taXQgMjZjZmFjYjcwZDc1OTIzYjIzYTBlMDdmMWEwMWVkN2VkODg2MjJjNgorQXV0aG9yOiBEYXZpZCBDYW50cmVsbCA8ZGNhbnRyZWxsQHJlZGhhdC5jb20+CitEYXRlOiAgIFRodSBTZXAgMTQgMjA6NTU6NTggMjAwNiArMDAwMAorCisgICAgICAgICAgICogbGFiZWxzL21hYy5jIChtYWNfcGFydGl0aW9uX25ldyk6IG1lbXNldCgpIGluaXRzIGV2ZXJ5dGhpbmcgdG8KKyAgICAgICAgICAgemVybywgbm8gbmVlZCB0byBkbyBpdCBtYW51YWxseS4KKyAgICAKKyAgICAgICAgICAgKiBsYWJlbHMvbWFjLmMgKG1hY19wYXJ0aXRpb25fc2V0X2ZsYWcpOiBQcmV2ZW50IExWTSBhbmQgUkFJRCAKK3BhcnRpdGlvbgorICAgICAgICAgICB0eXBlcyBmcm9tIGNvcnJ1cHRpbmcgdGhlIHBhcnRpdGlvbiB0YWJsZS4KKyAgICAKKyAgICAgICAgICAgKiBhcmNoL2xpbnV4LmMgKF9ibGtwZ19hZGRfcGFydGl0aW9uKTogU2V0IGxpbnV4X3BhcnQubGVuZ3RoIGJhc2VkIG9uCisgICAgICAgICAgIHdoZXRoZXIgb3Igbm90IHRoaXMgcGFydGl0aW9uIGlzIFBFRF9QQVJUSVRJT05fRVhURU5ERUQgb3Igbm90LgorICAgIAorICAgICAgICAgICAqIGFyY2gvbGludXguYyAoX2Rpc2tfc3luY19wYXJ0X3RhYmxlKTogUmVtb3ZlIHRoZSBjaGVjayBhbmQgY29udGludWUKKyAgICAgICAgICAgZm9yIFBFRF9QQVJUSVRJT05fRVhURU5ERUQgdHlwZXMuCisgICAgCisgICAgCisgICAgZ2l0LXN2bi1pZDogc3ZuOi8vc3ZuLmRlYmlhbi5vcmcvc3ZuL3BhcnRlZC91cHN0cmVhbS90cnVua0A4MjEgCisyZDQyNGZkNy03ZmUyLTAzMTAtYWY3NC04YmM2NWVkZWIxNzMKKworY29tbWl0IDIzMmRiZGE5MTVkZmNmZWM5OWU1OTgzYjdmNTNkNTdkNDQ5OGE2YWEKK0F1dGhvcjogQW5hbnQgTmFyYXlhbmFuIDxhbmFudEBraXguaW4+CitEYXRlOiAgIFRodSBTZXAgMTQgMTU6MTg6NDUgMjAwNiArMDAwMAorCisgICAgRml4IENoYW5nZUxvZworICAgIAorICAgIAorICAgIGdpdC1zdm4taWQ6IHN2bjovL3N2bi5kZWJpYW4ub3JnL3N2bi9wYXJ0ZWQvdXBzdHJlYW0vdHJ1bmtAODIwIAorMmQ0MjRmZDctN2ZlMi0wMzEwLWFmNzQtOGJjNjVlZGViMTczCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvR05VbWFrZWZpbGUgYi9wYXJ0ZWQtMS44LjcvR05VbWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhkNTUyNAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9HTlVtYWtlZmlsZQpAQCAtMCwwICsxLDU4IEBACisjIEhhdmluZyBhIHNlcGFyYXRlIEdOVW1ha2VmaWxlIGxldHMgbWUgYGluY2x1ZGUnIHRoZSBkeW5hbWljYWxseQorIyBnZW5lcmF0ZWQgcnVsZXMgY3JlYXRlZCB2aWEgTWFrZWZpbGUubWFpbnQgYXMgd2VsbCBhcyBNYWtlZmlsZS5tYWludCBpdHNlbGYuCisjIFRoaXMgbWFrZWZpbGUgaXMgdXNlZCBvbmx5IGlmIHlvdSBydW4gR05VIE1ha2UuCisjIEl0IGlzIG5lY2Vzc2FyeSBpZiB5b3Ugd2FudCB0byBidWlsZCB0YXJnZXRzIHVzdWFsbHkgb2YgaW50ZXJlc3QKKyMgb25seSB0byB0aGUgbWFpbnRhaW5lci4KKworIyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDMsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyMgU3lzdGVtcyB3aGVyZSAvYmluL3NoIGlzIG5vdCB0aGUgZGVmYXVsdCBzaGVsbCBuZWVkIHRoaXMuICBUaGUgJChzaGVsbCkKKyMgY29tbWFuZCBiZWxvdyB3b24ndCB3b3JrIHdpdGggZS5nLiBzdG9jayBET1MvV2luZG93cyBzaGVsbHMuCitpZmVxICgkKHdpbGRjYXJkIC9iaW4vc1toXSksL2Jpbi9zaCkKK1NIRUxMID0gL2Jpbi9zaAorZWxzZQorIyB3aWxsIGJlIHVzZWQgb25seSB3aXRoIHRoZSBuZXh0IHNoZWxsLXRlc3QgbGluZSwgdGhlbiBvdmVyd3JpdHRlbgorIyBieSBhIGNvbmZpZ3VyZWQtaW4gdmFsdWUKK1NIRUxMID0gc2gKK2VuZGlmCisKK2hhdmUtTWFrZWZpbGUgOj0gJChzaGVsbCB0ZXN0IC1mIE1ha2VmaWxlICYmIGVjaG8geWVzKQorCisjIElmIHRoZSB1c2VyIHJ1bnMgR05VIG1ha2UgYnV0IGhhcyBub3QgeWV0IHJ1biAuL2NvbmZpZ3VyZSwKKyMgZ2l2ZSB0aGVtIGEgZGlhZ25vc3RpYy4KK2lmZXEgKCQoaGF2ZS1NYWtlZmlsZSkseWVzKQorCisjIE1ha2UgdGFyIGFyY2hpdmUgZWFzaWVyIHRvIHJlcHJvZHVjZS4KK2V4cG9ydCBUQVJfT1BUSU9OUyA9IC0tb3duZXI9MCAtLWdyb3VwPTAgLS1udW1lcmljLW93bmVyCisKK2luY2x1ZGUgTWFrZWZpbGUKK2luY2x1ZGUgJChzcmNkaXIpL01ha2VmaWxlLmNmZworaW5jbHVkZSAkKHNyY2RpcikvTWFrZWZpbGUubWFpbnQKKworZWxzZQorCithbGw6CisJQGVjaG8gVGhlcmUgc2VlbXMgdG8gYmUgbm8gTWFrZWZpbGUgaW4gdGhpcyBkaXJlY3RvcnkuICAgMT4mMgorCUBlY2hvICJZb3UgbXVzdCBydW4gLi9jb25maWd1cmUgYmVmb3JlIHJ1bm5pbmcgXGBtYWtlJy4iIDE+JjIKKwlAZXhpdCAxCisKK2VuZGlmCisKKyMgVGVsbCB2ZXJzaW9uIDMuNzkgYW5kIHVwIG9mIEdOVSBtYWtlIHRvIG5vdCBidWlsZCBnb2FscyBpbiB0aGlzCisjIGRpcmVjdG9yeSBpbiBwYXJhbGxlbC4gIFRoaXMgaXMgbmVjZXNzYXJ5IGluIGNhc2Ugc29tZW9uZSB0cmllcyB0bworIyBidWlsZCBtdWx0aXBsZSB0YXJnZXRzIG9uIG9uZSBjb21tYW5kIGxpbmUuCisuTk9UUEFSQUxMRUw6CmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvSU5TVEFMTCBiL3BhcnRlZC0xLjguNy9JTlNUQUxMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NTg3MTQKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvSU5TVEFMTApAQCAtMCwwICsxLDIzNCBAQAorSW5zdGFsbGF0aW9uIEluc3RydWN0aW9ucworKioqKioqKioqKioqKioqKioqKioqKioqKgorCitDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDQsIDIwMDUsCisyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgZnJlZSBkb2N1bWVudGF0aW9uOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzCit1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgaXQuCisKK0Jhc2ljIEluc3RhbGxhdGlvbgorPT09PT09PT09PT09PT09PT09CisKK0JyaWVmbHksIHRoZSBzaGVsbCBjb21tYW5kcyBgLi9jb25maWd1cmU7IG1ha2U7IG1ha2UgaW5zdGFsbCcgc2hvdWxkCitjb25maWd1cmUsIGJ1aWxkLCBhbmQgaW5zdGFsbCB0aGlzIHBhY2thZ2UuICBUaGUgZm9sbG93aW5nCittb3JlLWRldGFpbGVkIGluc3RydWN0aW9ucyBhcmUgZ2VuZXJpYzsgc2VlIHRoZSBgUkVBRE1FJyBmaWxlIGZvcgoraW5zdHJ1Y3Rpb25zIHNwZWNpZmljIHRvIHRoaXMgcGFja2FnZS4KKworICAgVGhlIGBjb25maWd1cmUnIHNoZWxsIHNjcmlwdCBhdHRlbXB0cyB0byBndWVzcyBjb3JyZWN0IHZhbHVlcyBmb3IKK3ZhcmlvdXMgc3lzdGVtLWRlcGVuZGVudCB2YXJpYWJsZXMgdXNlZCBkdXJpbmcgY29tcGlsYXRpb24uICBJdCB1c2VzCit0aG9zZSB2YWx1ZXMgdG8gY3JlYXRlIGEgYE1ha2VmaWxlJyBpbiBlYWNoIGRpcmVjdG9yeSBvZiB0aGUgcGFja2FnZS4KK0l0IG1heSBhbHNvIGNyZWF0ZSBvbmUgb3IgbW9yZSBgLmgnIGZpbGVzIGNvbnRhaW5pbmcgc3lzdGVtLWRlcGVuZGVudAorZGVmaW5pdGlvbnMuICBGaW5hbGx5LCBpdCBjcmVhdGVzIGEgc2hlbGwgc2NyaXB0IGBjb25maWcuc3RhdHVzJyB0aGF0Cit5b3UgY2FuIHJ1biBpbiB0aGUgZnV0dXJlIHRvIHJlY3JlYXRlIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24sIGFuZCBhCitmaWxlIGBjb25maWcubG9nJyBjb250YWluaW5nIGNvbXBpbGVyIG91dHB1dCAodXNlZnVsIG1haW5seSBmb3IKK2RlYnVnZ2luZyBgY29uZmlndXJlJykuCisKKyAgIEl0IGNhbiBhbHNvIHVzZSBhbiBvcHRpb25hbCBmaWxlICh0eXBpY2FsbHkgY2FsbGVkIGBjb25maWcuY2FjaGUnCithbmQgZW5hYmxlZCB3aXRoIGAtLWNhY2hlLWZpbGU9Y29uZmlnLmNhY2hlJyBvciBzaW1wbHkgYC1DJykgdGhhdCBzYXZlcwordGhlIHJlc3VsdHMgb2YgaXRzIHRlc3RzIHRvIHNwZWVkIHVwIHJlY29uZmlndXJpbmcuICBDYWNoaW5nIGlzCitkaXNhYmxlZCBieSBkZWZhdWx0IHRvIHByZXZlbnQgcHJvYmxlbXMgd2l0aCBhY2NpZGVudGFsIHVzZSBvZiBzdGFsZQorY2FjaGUgZmlsZXMuCisKKyAgIElmIHlvdSBuZWVkIHRvIGRvIHVudXN1YWwgdGhpbmdzIHRvIGNvbXBpbGUgdGhlIHBhY2thZ2UsIHBsZWFzZSB0cnkKK3RvIGZpZ3VyZSBvdXQgaG93IGBjb25maWd1cmUnIGNvdWxkIGNoZWNrIHdoZXRoZXIgdG8gZG8gdGhlbSwgYW5kIG1haWwKK2RpZmZzIG9yIGluc3RydWN0aW9ucyB0byB0aGUgYWRkcmVzcyBnaXZlbiBpbiB0aGUgYFJFQURNRScgc28gdGhleSBjYW4KK2JlIGNvbnNpZGVyZWQgZm9yIHRoZSBuZXh0IHJlbGVhc2UuICBJZiB5b3UgYXJlIHVzaW5nIHRoZSBjYWNoZSwgYW5kIGF0Citzb21lIHBvaW50IGBjb25maWcuY2FjaGUnIGNvbnRhaW5zIHJlc3VsdHMgeW91IGRvbid0IHdhbnQgdG8ga2VlcCwgeW91CittYXkgcmVtb3ZlIG9yIGVkaXQgaXQuCisKKyAgIFRoZSBmaWxlIGBjb25maWd1cmUuYWMnIChvciBgY29uZmlndXJlLmluJykgaXMgdXNlZCB0byBjcmVhdGUKK2Bjb25maWd1cmUnIGJ5IGEgcHJvZ3JhbSBjYWxsZWQgYGF1dG9jb25mJy4gIFlvdSBuZWVkIGBjb25maWd1cmUuYWMnIGlmCit5b3Ugd2FudCB0byBjaGFuZ2UgaXQgb3IgcmVnZW5lcmF0ZSBgY29uZmlndXJlJyB1c2luZyBhIG5ld2VyIHZlcnNpb24KK29mIGBhdXRvY29uZicuCisKK1RoZSBzaW1wbGVzdCB3YXkgdG8gY29tcGlsZSB0aGlzIHBhY2thZ2UgaXM6CisKKyAgMS4gYGNkJyB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIHBhY2thZ2UncyBzb3VyY2UgY29kZSBhbmQgdHlwZQorICAgICBgLi9jb25maWd1cmUnIHRvIGNvbmZpZ3VyZSB0aGUgcGFja2FnZSBmb3IgeW91ciBzeXN0ZW0uCisKKyAgICAgUnVubmluZyBgY29uZmlndXJlJyBtaWdodCB0YWtlIGEgd2hpbGUuICBXaGlsZSBydW5uaW5nLCBpdCBwcmludHMKKyAgICAgc29tZSBtZXNzYWdlcyB0ZWxsaW5nIHdoaWNoIGZlYXR1cmVzIGl0IGlzIGNoZWNraW5nIGZvci4KKworICAyLiBUeXBlIGBtYWtlJyB0byBjb21waWxlIHRoZSBwYWNrYWdlLgorCisgIDMuIE9wdGlvbmFsbHksIHR5cGUgYG1ha2UgY2hlY2snIHRvIHJ1biBhbnkgc2VsZi10ZXN0cyB0aGF0IGNvbWUgd2l0aAorICAgICB0aGUgcGFja2FnZS4KKworICA0LiBUeXBlIGBtYWtlIGluc3RhbGwnIHRvIGluc3RhbGwgdGhlIHByb2dyYW1zIGFuZCBhbnkgZGF0YSBmaWxlcyBhbmQKKyAgICAgZG9jdW1lbnRhdGlvbi4KKworICA1LiBZb3UgY2FuIHJlbW92ZSB0aGUgcHJvZ3JhbSBiaW5hcmllcyBhbmQgb2JqZWN0IGZpbGVzIGZyb20gdGhlCisgICAgIHNvdXJjZSBjb2RlIGRpcmVjdG9yeSBieSB0eXBpbmcgYG1ha2UgY2xlYW4nLiAgVG8gYWxzbyByZW1vdmUgdGhlCisgICAgIGZpbGVzIHRoYXQgYGNvbmZpZ3VyZScgY3JlYXRlZCAoc28geW91IGNhbiBjb21waWxlIHRoZSBwYWNrYWdlIGZvcgorICAgICBhIGRpZmZlcmVudCBraW5kIG9mIGNvbXB1dGVyKSwgdHlwZSBgbWFrZSBkaXN0Y2xlYW4nLiAgVGhlcmUgaXMKKyAgICAgYWxzbyBhIGBtYWtlIG1haW50YWluZXItY2xlYW4nIHRhcmdldCwgYnV0IHRoYXQgaXMgaW50ZW5kZWQgbWFpbmx5CisgICAgIGZvciB0aGUgcGFja2FnZSdzIGRldmVsb3BlcnMuICBJZiB5b3UgdXNlIGl0LCB5b3UgbWF5IGhhdmUgdG8gZ2V0CisgICAgIGFsbCBzb3J0cyBvZiBvdGhlciBwcm9ncmFtcyBpbiBvcmRlciB0byByZWdlbmVyYXRlIGZpbGVzIHRoYXQgY2FtZQorICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKK0NvbXBpbGVycyBhbmQgT3B0aW9ucworPT09PT09PT09PT09PT09PT09PT09CisKK1NvbWUgc3lzdGVtcyByZXF1aXJlIHVudXN1YWwgb3B0aW9ucyBmb3IgY29tcGlsYXRpb24gb3IgbGlua2luZyB0aGF0IHRoZQorYGNvbmZpZ3VyZScgc2NyaXB0IGRvZXMgbm90IGtub3cgYWJvdXQuICBSdW4gYC4vY29uZmlndXJlIC0taGVscCcgZm9yCitkZXRhaWxzIG9uIHNvbWUgb2YgdGhlIHBlcnRpbmVudCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCisKKyAgIFlvdSBjYW4gZ2l2ZSBgY29uZmlndXJlJyBpbml0aWFsIHZhbHVlcyBmb3IgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzCitieSBzZXR0aW5nIHZhcmlhYmxlcyBpbiB0aGUgY29tbWFuZCBsaW5lIG9yIGluIHRoZSBlbnZpcm9ubWVudC4gIEhlcmUKK2lzIGFuIGV4YW1wbGU6CisKKyAgICAgLi9jb25maWd1cmUgQ0M9Yzk5IENGTEFHUz0tZyBMSUJTPS1scG9zaXgKKworICAgKk5vdGUgRGVmaW5pbmcgVmFyaWFibGVzOjosIGZvciBtb3JlIGRldGFpbHMuCisKK0NvbXBpbGluZyBGb3IgTXVsdGlwbGUgQXJjaGl0ZWN0dXJlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1lvdSBjYW4gY29tcGlsZSB0aGUgcGFja2FnZSBmb3IgbW9yZSB0aGFuIG9uZSBraW5kIG9mIGNvbXB1dGVyIGF0IHRoZQorc2FtZSB0aW1lLCBieSBwbGFjaW5nIHRoZSBvYmplY3QgZmlsZXMgZm9yIGVhY2ggYXJjaGl0ZWN0dXJlIGluIHRoZWlyCitvd24gZGlyZWN0b3J5LiAgVG8gZG8gdGhpcywgeW91IGNhbiB1c2UgR05VIGBtYWtlJy4gIGBjZCcgdG8gdGhlCitkaXJlY3Rvcnkgd2hlcmUgeW91IHdhbnQgdGhlIG9iamVjdCBmaWxlcyBhbmQgZXhlY3V0YWJsZXMgdG8gZ28gYW5kIHJ1bgordGhlIGBjb25maWd1cmUnIHNjcmlwdC4gIGBjb25maWd1cmUnIGF1dG9tYXRpY2FsbHkgY2hlY2tzIGZvciB0aGUKK3NvdXJjZSBjb2RlIGluIHRoZSBkaXJlY3RvcnkgdGhhdCBgY29uZmlndXJlJyBpcyBpbiBhbmQgaW4gYC4uJy4KKworICAgV2l0aCBhIG5vbi1HTlUgYG1ha2UnLCBpdCBpcyBzYWZlciB0byBjb21waWxlIHRoZSBwYWNrYWdlIGZvciBvbmUKK2FyY2hpdGVjdHVyZSBhdCBhIHRpbWUgaW4gdGhlIHNvdXJjZSBjb2RlIGRpcmVjdG9yeS4gIEFmdGVyIHlvdSBoYXZlCitpbnN0YWxsZWQgdGhlIHBhY2thZ2UgZm9yIG9uZSBhcmNoaXRlY3R1cmUsIHVzZSBgbWFrZSBkaXN0Y2xlYW4nIGJlZm9yZQorcmVjb25maWd1cmluZyBmb3IgYW5vdGhlciBhcmNoaXRlY3R1cmUuCisKK0luc3RhbGxhdGlvbiBOYW1lcworPT09PT09PT09PT09PT09PT09CisKK0J5IGRlZmF1bHQsIGBtYWtlIGluc3RhbGwnIGluc3RhbGxzIHRoZSBwYWNrYWdlJ3MgY29tbWFuZHMgdW5kZXIKK2AvdXNyL2xvY2FsL2JpbicsIGluY2x1ZGUgZmlsZXMgdW5kZXIgYC91c3IvbG9jYWwvaW5jbHVkZScsIGV0Yy4gIFlvdQorY2FuIHNwZWNpZnkgYW4gaW5zdGFsbGF0aW9uIHByZWZpeCBvdGhlciB0aGFuIGAvdXNyL2xvY2FsJyBieSBnaXZpbmcKK2Bjb25maWd1cmUnIHRoZSBvcHRpb24gYC0tcHJlZml4PVBSRUZJWCcuCisKKyAgIFlvdSBjYW4gc3BlY2lmeSBzZXBhcmF0ZSBpbnN0YWxsYXRpb24gcHJlZml4ZXMgZm9yCithcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmlsZXMgYW5kIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBmaWxlcy4gIElmIHlvdQorcGFzcyB0aGUgb3B0aW9uIGAtLWV4ZWMtcHJlZml4PVBSRUZJWCcgdG8gYGNvbmZpZ3VyZScsIHRoZSBwYWNrYWdlIHVzZXMKK1BSRUZJWCBhcyB0aGUgcHJlZml4IGZvciBpbnN0YWxsaW5nIHByb2dyYW1zIGFuZCBsaWJyYXJpZXMuCitEb2N1bWVudGF0aW9uIGFuZCBvdGhlciBkYXRhIGZpbGVzIHN0aWxsIHVzZSB0aGUgcmVndWxhciBwcmVmaXguCisKKyAgIEluIGFkZGl0aW9uLCBpZiB5b3UgdXNlIGFuIHVudXN1YWwgZGlyZWN0b3J5IGxheW91dCB5b3UgY2FuIGdpdmUKK29wdGlvbnMgbGlrZSBgLS1iaW5kaXI9RElSJyB0byBzcGVjaWZ5IGRpZmZlcmVudCB2YWx1ZXMgZm9yIHBhcnRpY3VsYXIKK2tpbmRzIG9mIGZpbGVzLiAgUnVuIGBjb25maWd1cmUgLS1oZWxwJyBmb3IgYSBsaXN0IG9mIHRoZSBkaXJlY3RvcmllcworeW91IGNhbiBzZXQgYW5kIHdoYXQga2luZHMgb2YgZmlsZXMgZ28gaW4gdGhlbS4KKworICAgSWYgdGhlIHBhY2thZ2Ugc3VwcG9ydHMgaXQsIHlvdSBjYW4gY2F1c2UgcHJvZ3JhbXMgdG8gYmUgaW5zdGFsbGVkCit3aXRoIGFuIGV4dHJhIHByZWZpeCBvciBzdWZmaXggb24gdGhlaXIgbmFtZXMgYnkgZ2l2aW5nIGBjb25maWd1cmUnIHRoZQorb3B0aW9uIGAtLXByb2dyYW0tcHJlZml4PVBSRUZJWCcgb3IgYC0tcHJvZ3JhbS1zdWZmaXg9U1VGRklYJy4KKworT3B0aW9uYWwgRmVhdHVyZXMKKz09PT09PT09PT09PT09PT09CisKK1NvbWUgcGFja2FnZXMgcGF5IGF0dGVudGlvbiB0byBgLS1lbmFibGUtRkVBVFVSRScgb3B0aW9ucyB0bworYGNvbmZpZ3VyZScsIHdoZXJlIEZFQVRVUkUgaW5kaWNhdGVzIGFuIG9wdGlvbmFsIHBhcnQgb2YgdGhlIHBhY2thZ2UuCitUaGV5IG1heSBhbHNvIHBheSBhdHRlbnRpb24gdG8gYC0td2l0aC1QQUNLQUdFJyBvcHRpb25zLCB3aGVyZSBQQUNLQUdFCitpcyBzb21ldGhpbmcgbGlrZSBgZ251LWFzJyBvciBgeCcgKGZvciB0aGUgWCBXaW5kb3cgU3lzdGVtKS4gIFRoZQorYFJFQURNRScgc2hvdWxkIG1lbnRpb24gYW55IGAtLWVuYWJsZS0nIGFuZCBgLS13aXRoLScgb3B0aW9ucyB0aGF0IHRoZQorcGFja2FnZSByZWNvZ25pemVzLgorCisgICBGb3IgcGFja2FnZXMgdGhhdCB1c2UgdGhlIFggV2luZG93IFN5c3RlbSwgYGNvbmZpZ3VyZScgY2FuIHVzdWFsbHkKK2ZpbmQgdGhlIFggaW5jbHVkZSBhbmQgbGlicmFyeSBmaWxlcyBhdXRvbWF0aWNhbGx5LCBidXQgaWYgaXQgZG9lc24ndCwKK3lvdSBjYW4gdXNlIHRoZSBgY29uZmlndXJlJyBvcHRpb25zIGAtLXgtaW5jbHVkZXM9RElSJyBhbmQKK2AtLXgtbGlicmFyaWVzPURJUicgdG8gc3BlY2lmeSB0aGVpciBsb2NhdGlvbnMuCisKK1NwZWNpZnlpbmcgdGhlIFN5c3RlbSBUeXBlCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGVyZSBtYXkgYmUgc29tZSBmZWF0dXJlcyBgY29uZmlndXJlJyBjYW5ub3QgZmlndXJlIG91dCBhdXRvbWF0aWNhbGx5LAorYnV0IG5lZWRzIHRvIGRldGVybWluZSBieSB0aGUgdHlwZSBvZiBtYWNoaW5lIHRoZSBwYWNrYWdlIHdpbGwgcnVuIG9uLgorVXN1YWxseSwgYXNzdW1pbmcgdGhlIHBhY2thZ2UgaXMgYnVpbHQgdG8gYmUgcnVuIG9uIHRoZSBfc2FtZV8KK2FyY2hpdGVjdHVyZXMsIGBjb25maWd1cmUnIGNhbiBmaWd1cmUgdGhhdCBvdXQsIGJ1dCBpZiBpdCBwcmludHMgYQorbWVzc2FnZSBzYXlpbmcgaXQgY2Fubm90IGd1ZXNzIHRoZSBtYWNoaW5lIHR5cGUsIGdpdmUgaXQgdGhlCitgLS1idWlsZD1UWVBFJyBvcHRpb24uICBUWVBFIGNhbiBlaXRoZXIgYmUgYSBzaG9ydCBuYW1lIGZvciB0aGUgc3lzdGVtCit0eXBlLCBzdWNoIGFzIGBzdW40Jywgb3IgYSBjYW5vbmljYWwgbmFtZSB3aGljaCBoYXMgdGhlIGZvcm06CisKKyAgICAgQ1BVLUNPTVBBTlktU1lTVEVNCisKK3doZXJlIFNZU1RFTSBjYW4gaGF2ZSBvbmUgb2YgdGhlc2UgZm9ybXM6CisKKyAgICAgT1MgS0VSTkVMLU9TCisKKyAgIFNlZSB0aGUgZmlsZSBgY29uZmlnLnN1YicgZm9yIHRoZSBwb3NzaWJsZSB2YWx1ZXMgb2YgZWFjaCBmaWVsZC4gIElmCitgY29uZmlnLnN1YicgaXNuJ3QgaW5jbHVkZWQgaW4gdGhpcyBwYWNrYWdlLCB0aGVuIHRoaXMgcGFja2FnZSBkb2Vzbid0CituZWVkIHRvIGtub3cgdGhlIG1hY2hpbmUgdHlwZS4KKworICAgSWYgeW91IGFyZSBfYnVpbGRpbmdfIGNvbXBpbGVyIHRvb2xzIGZvciBjcm9zcy1jb21waWxpbmcsIHlvdSBzaG91bGQKK3VzZSB0aGUgb3B0aW9uIGAtLXRhcmdldD1UWVBFJyB0byBzZWxlY3QgdGhlIHR5cGUgb2Ygc3lzdGVtIHRoZXkgd2lsbAorcHJvZHVjZSBjb2RlIGZvci4KKworICAgSWYgeW91IHdhbnQgdG8gX3VzZV8gYSBjcm9zcyBjb21waWxlciwgdGhhdCBnZW5lcmF0ZXMgY29kZSBmb3IgYQorcGxhdGZvcm0gZGlmZmVyZW50IGZyb20gdGhlIGJ1aWxkIHBsYXRmb3JtLCB5b3Ugc2hvdWxkIHNwZWNpZnkgdGhlCisiaG9zdCIgcGxhdGZvcm0gKGkuZS4sIHRoYXQgb24gd2hpY2ggdGhlIGdlbmVyYXRlZCBwcm9ncmFtcyB3aWxsCitldmVudHVhbGx5IGJlIHJ1bikgd2l0aCBgLS1ob3N0PVRZUEUnLgorCitTaGFyaW5nIERlZmF1bHRzCis9PT09PT09PT09PT09PT09CisKK0lmIHlvdSB3YW50IHRvIHNldCBkZWZhdWx0IHZhbHVlcyBmb3IgYGNvbmZpZ3VyZScgc2NyaXB0cyB0byBzaGFyZSwgeW91CitjYW4gY3JlYXRlIGEgc2l0ZSBzaGVsbCBzY3JpcHQgY2FsbGVkIGBjb25maWcuc2l0ZScgdGhhdCBnaXZlcyBkZWZhdWx0Cit2YWx1ZXMgZm9yIHZhcmlhYmxlcyBsaWtlIGBDQycsIGBjYWNoZV9maWxlJywgYW5kIGBwcmVmaXgnLgorYGNvbmZpZ3VyZScgbG9va3MgZm9yIGBQUkVGSVgvc2hhcmUvY29uZmlnLnNpdGUnIGlmIGl0IGV4aXN0cywgdGhlbgorYFBSRUZJWC9ldGMvY29uZmlnLnNpdGUnIGlmIGl0IGV4aXN0cy4gIE9yLCB5b3UgY2FuIHNldCB0aGUKK2BDT05GSUdfU0lURScgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlIGxvY2F0aW9uIG9mIHRoZSBzaXRlIHNjcmlwdC4KK0Egd2FybmluZzogbm90IGFsbCBgY29uZmlndXJlJyBzY3JpcHRzIGxvb2sgZm9yIGEgc2l0ZSBzY3JpcHQuCisKK0RlZmluaW5nIFZhcmlhYmxlcworPT09PT09PT09PT09PT09PT09CisKK1ZhcmlhYmxlcyBub3QgZGVmaW5lZCBpbiBhIHNpdGUgc2hlbGwgc2NyaXB0IGNhbiBiZSBzZXQgaW4gdGhlCitlbnZpcm9ubWVudCBwYXNzZWQgdG8gYGNvbmZpZ3VyZScuICBIb3dldmVyLCBzb21lIHBhY2thZ2VzIG1heSBydW4KK2NvbmZpZ3VyZSBhZ2FpbiBkdXJpbmcgdGhlIGJ1aWxkLCBhbmQgdGhlIGN1c3RvbWl6ZWQgdmFsdWVzIG9mIHRoZXNlCit2YXJpYWJsZXMgbWF5IGJlIGxvc3QuICBJbiBvcmRlciB0byBhdm9pZCB0aGlzIHByb2JsZW0sIHlvdSBzaG91bGQgc2V0Cit0aGVtIGluIHRoZSBgY29uZmlndXJlJyBjb21tYW5kIGxpbmUsIHVzaW5nIGBWQVI9dmFsdWUnLiAgRm9yIGV4YW1wbGU6CisKKyAgICAgLi9jb25maWd1cmUgQ0M9L3Vzci9sb2NhbDIvYmluL2djYworCitjYXVzZXMgdGhlIHNwZWNpZmllZCBgZ2NjJyB0byBiZSB1c2VkIGFzIHRoZSBDIGNvbXBpbGVyICh1bmxlc3MgaXQgaXMKK292ZXJyaWRkZW4gaW4gdGhlIHNpdGUgc2hlbGwgc2NyaXB0KS4KKworVW5mb3J0dW5hdGVseSwgdGhpcyB0ZWNobmlxdWUgZG9lcyBub3Qgd29yayBmb3IgYENPTkZJR19TSEVMTCcgZHVlIHRvCithbiBBdXRvY29uZiBidWcuICBVbnRpbCB0aGUgYnVnIGlzIGZpeGVkIHlvdSBjYW4gdXNlIHRoaXMgd29ya2Fyb3VuZDoKKworICAgICBDT05GSUdfU0hFTEw9L2Jpbi9iYXNoIC9iaW4vYmFzaCAuL2NvbmZpZ3VyZSBDT05GSUdfU0hFTEw9L2Jpbi9iYXNoCisKK2Bjb25maWd1cmUnIEludm9jYXRpb24KKz09PT09PT09PT09PT09PT09PT09PT0KKworYGNvbmZpZ3VyZScgcmVjb2duaXplcyB0aGUgZm9sbG93aW5nIG9wdGlvbnMgdG8gY29udHJvbCBob3cgaXQgb3BlcmF0ZXMuCisKK2AtLWhlbHAnCitgLWgnCisgICAgIFByaW50IGEgc3VtbWFyeSBvZiB0aGUgb3B0aW9ucyB0byBgY29uZmlndXJlJywgYW5kIGV4aXQuCisKK2AtLXZlcnNpb24nCitgLVYnCisgICAgIFByaW50IHRoZSB2ZXJzaW9uIG9mIEF1dG9jb25mIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGBjb25maWd1cmUnCisgICAgIHNjcmlwdCwgYW5kIGV4aXQuCisKK2AtLWNhY2hlLWZpbGU9RklMRScKKyAgICAgRW5hYmxlIHRoZSBjYWNoZTogdXNlIGFuZCBzYXZlIHRoZSByZXN1bHRzIG9mIHRoZSB0ZXN0cyBpbiBGSUxFLAorICAgICB0cmFkaXRpb25hbGx5IGBjb25maWcuY2FjaGUnLiAgRklMRSBkZWZhdWx0cyB0byBgL2Rldi9udWxsJyB0bworICAgICBkaXNhYmxlIGNhY2hpbmcuCisKK2AtLWNvbmZpZy1jYWNoZScKK2AtQycKKyAgICAgQWxpYXMgZm9yIGAtLWNhY2hlLWZpbGU9Y29uZmlnLmNhY2hlJy4KKworYC0tcXVpZXQnCitgLS1zaWxlbnQnCitgLXEnCisgICAgIERvIG5vdCBwcmludCBtZXNzYWdlcyBzYXlpbmcgd2hpY2ggY2hlY2tzIGFyZSBiZWluZyBtYWRlLiAgVG8KKyAgICAgc3VwcHJlc3MgYWxsIG5vcm1hbCBvdXRwdXQsIHJlZGlyZWN0IGl0IHRvIGAvZGV2L251bGwnIChhbnkgZXJyb3IKKyAgICAgbWVzc2FnZXMgd2lsbCBzdGlsbCBiZSBzaG93bikuCisKK2AtLXNyY2Rpcj1ESVInCisgICAgIExvb2sgZm9yIHRoZSBwYWNrYWdlJ3Mgc291cmNlIGNvZGUgaW4gZGlyZWN0b3J5IERJUi4gIFVzdWFsbHkKKyAgICAgYGNvbmZpZ3VyZScgY2FuIGRldGVybWluZSB0aGF0IGRpcmVjdG9yeSBhdXRvbWF0aWNhbGx5LgorCitgY29uZmlndXJlJyBhbHNvIGFjY2VwdHMgc29tZSBvdGhlciwgbm90IHdpZGVseSB1c2VmdWwsIG9wdGlvbnMuICBSdW4KK2Bjb25maWd1cmUgLS1oZWxwJyBmb3IgbW9yZSBkZXRhaWxzLgorCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvTWFrZWZpbGUuYW0gYi9wYXJ0ZWQtMS44LjcvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFiYTE3NwotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDc0IEBACitBQ0xPQ0FMX0FNRkxBR1MgPSAtSSBtNAorU1VCRElSUyA9IHBvIGxpYiBsaWJwYXJ0ZWQgcGFydGVkIHBhcnRwcm9iZSBpbmNsdWRlIGRvYyBkZWJ1ZyB0ZXN0cworCitFWFRSQV9ESVNUID0JCQkJXAorICAucHJldi12ZXJzaW9uCQkJCVwKKyAgQlVHUwkJCQkJXAorICBsaWJwYXJ0ZWQucGMuaW4JCQlcCisgIHBhcnRlZC5zcGVjLmluCQkJXAorICBwYXJ0ZWQuc3BlYwkJCQlcCisgIHNjcmlwdHMvZGF0YS9hYmkvYmFzZWxpbmVfc3ltYm9scy50eHQgXAorICBzY3JpcHRzL2V4dHJhY3Rfc3ltdmVycwkJXAorICBNYWtlZmlsZS5jZmcJCQkJXAorICBNYWtlZmlsZS5tYWludAkJCVwKKyAgR05VbWFrZWZpbGUKKworYWNsb2NhbGRpcj0kKGRhdGFkaXIpL2FjbG9jYWwKKworcGNkaXIgPSAkKGxpYmRpcikvcGtnY29uZmlnCitwY19EQVRBID0gbGlicGFydGVkLnBjCisKKyMgVGhpcyBpcyBiZXN0IG5vdCBkb25lIHZpYSBjb25maWd1cmUuYWMsIGJlY2F1c2UgYXV0b21ha2UncworIyBtYWtlIGRpc3RjaGVjayB0YXJnZXQgZG9lcyBub3QgbGlrZSBhdXRvLWdlbmVyYXRlZCBmaWxlcworIyBiZWluZyBpbmNsdWRlZCBpbiB0aGUgZGlzdHJpYnV0ZWQgYXJjaGl2ZS4KK3BhcnRlZC5zcGVjOiBwYXJ0ZWQuc3BlYy5pbgorCXNlZCAncy9AJydQQUNLQUdFQC8kKFBBQ0tBR0UpLztzL0AnJ1ZFUlNJT05ALyQoVkVSU0lPTikvJyAkPCA+ICRALXRtcAorCW12ICRALXRtcCAkQAorTUFJTlRBSU5FUkNMRUFORklMRVMgPSBwYXJ0ZWQuc3BlYworCitkaXN0Y2hlY2staG9vazoKKwkkKE1BS0UpIG15LWRpc3RjaGVjaworCisjIyMgQUJJIENoZWNraW5nIHNjcmlwdHMgIyMjCisKK2Jhc2VsaW5lX2ZpbGUgPSAke3RvcF9zcmNkaXJ9L3NjcmlwdHMvZGF0YS9hYmkvYmFzZWxpbmVfc3ltYm9scy50eHQKK2V4dHJhY3Rfc3ltdmVycyA9ICQodG9wX3NyY2Rpcikvc2NyaXB0cy9leHRyYWN0X3N5bXZlcnMKKworY3VycmVudF9zeW1ib2xzLnR4dDogJHtleHRyYWN0X3N5bXZlcnN9CisJICAtQChzaCAke2V4dHJhY3Rfc3ltdmVyc30gbGlicGFydGVkLy5saWJzL2xpYnBhcnRlZC5zbyBjdXJyZW50X3N5bWJvbHMudHh0KQorCitiYXNlbGluZV9zeW1ib2xzOgorCS1AKG91dHB1dD0ke2Jhc2VsaW5lX2ZpbGV9OyBcCisJICBpZiB0ZXN0ICEgLWYgJCR7b3V0cHV0fTsgdGhlbiBcCisJICAgIGVjaG8gIkJhc2VsaW5lIGZpbGUgZG9lc24ndCBleGlzdC4iOyBcCisJICAgIGVjaG8gIlRyeSAnbWFrZSBuZXctYWJpLWJhc2VsaW5lJyB0byBjcmVhdGUgaXQuIjsgXAorCSAgICBleGl0IDE7IFwKKwkgIGZpOyB0cnVlKQorCituZXctYWJpLWJhc2VsaW5lOgorCS1AJChta2luc3RhbGxkaXJzKSAke2Jhc2VsaW5lX2Rpcn0KKwktQChvdXRwdXQ9JHtiYXNlbGluZV9maWxlfTsgXAorCSAgaWYgdGVzdCAtZiAkJHtvdXRwdXR9OyB0aGVuIFwKKwkgICAgb3V0cHV0PSQke291dHB1dH0ubmV3OyBcCisJICAgIHQ9YGVjaG8gJCR7b3V0cHV0fSB8IHNlZCAncz0uKmNvbmZpZy9hYmkvPT0nYDsgXAorCSAgICBlY2hvICJCYXNlbGluZSBmaWxlIGFscmVhZHkgZXhpc3RzLCB3cml0aW5nIHRvICQke3R9IGluc3RlYWQuIjsgXAorCSAgZmk7IFwKKwkgIHNoICR7ZXh0cmFjdF9zeW12ZXJzfSBsaWJwYXJ0ZWQvLmxpYnMvbGlicGFydGVkLnNvICQke291dHB1dH0pCisKKyMgVXNlICduZXctYWJpLWJhc2VsaW5lJyB0byBjcmVhdGUgYW4gaW5pdGlhbCBzeW1ib2wgZmlsZS4gIFRoZW4gcnVuCisjICdjaGVjay1hYmknIHRvIHRlc3QgZm9yIGNoYW5nZXMgYWdhaW5zdCB0aGF0IGZpbGUuCitjaGVjay1hYmk6IGJhc2VsaW5lX3N5bWJvbHMgY3VycmVudF9zeW1ib2xzLnR4dAorCUBkaWZmIC11ICR7YmFzZWxpbmVfZmlsZX0gLi9jdXJyZW50X3N5bWJvbHMudHh0IDI+JjEgXAorICAgICAgICAgfCB0ZWUgbGlicGFydGVkLmFiaS1kaWZmCisJQHRlc3QgYHdjIC1sIDwgbGlicGFydGVkLmFiaS1kaWZmYCAtZ3QgMCBcCisgICAgICAgICAmJiAoZWNobyAiQUJJIGhhcyBjaGFuZ2VkLiBQbGVhc2UsIHVwZGF0ZSB5b3UgQUJJIHBhY2thZ2UgdmVyc2lvbi4iOyBleGl0IDEpIFwKKyAgICAgICAgIHx8IGV4aXQgMAorCitNT1NUTFlDTEVBTkRJUlMgPSBtNAorCitNQUlOVEFJTkVSQ0xFQU5GSUxFUyArPSBcCisgIEFCT1VULU5MUyAgICAgXAorICBDaGFuZ2VMb2cgICAgIFwKKyAgSU5TVEFMTCAgICAgICBcCisgIGFjbG9jYWwubTQgICAgXAorICBjb25maWd1cmUKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9NYWtlZmlsZS5jZmcgYi9wYXJ0ZWQtMS44LjcvTWFrZWZpbGUuY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxYmFkMmIKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvTWFrZWZpbGUuY2ZnCkBAIC0wLDAgKzEsNTQgQEAKKyMgQ3VzdG9taXplIE1ha2VmaWxlLm1haW50LiAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBtYWtlZmlsZSAtKi0KKyMgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyMgMDIxMTAtMTMwMSwgVVNBLgorCisjIFVzZSBhbHBoYS5nbnUub3JnIGZvciBhbHBoYSBhbmQgYmV0YSByZWxlYXNlcy4KKyMgVXNlIGZ0cC5nbnUub3JnIGZvciBtYWpvciByZWxlYXNlcy4KK2dudV9mdHBfaG9zdC1hbHBoYSA9IGFscGhhLmdudS5vcmcKK2dudV9mdHBfaG9zdC1iZXRhID0gYWxwaGEuZ251Lm9yZworZ251X2Z0cF9ob3N0LW1ham9yID0gZnRwLmdudS5vcmcKK2dudV9yZWxfaG9zdCA9ICQoZ251X2Z0cF9ob3N0LSQoUkVMRUFTRV9UWVBFKSkKKwordXJsX2Rpcl9saXN0ID0gXAorICBmdHA6Ly8kKGdudV9yZWxfaG9zdCkvZ251L3BhcnRlZAorCisjIFRoZSBHbnVQRyBJRCBvZiB0aGUga2V5IHVzZWQgdG8gc2lnbiB0aGUgdGFyYmFsbHMuCitncGdfa2V5X0lEID0gRDMzM0NCQTEKKworIyBUZXN0cyBub3QgdG8gcnVuIGFzIHBhcnQgb2YgIm1ha2UgZGlzdGNoZWNrIi4KKyMgRXhjbHVkZSBjaGFuZ2Vsb2ctY2hlY2sgaGVyZSBzbyB0aGF0IHRoZXJlJ3MgbGVzcyBjaHVybiBpbiBDaGFuZ2VMb2cKKyMgZmlsZXMgLS0gb3RoZXJ3aXNlLCB5b3UnZCBuZWVkIHRvIGhhdmUgdGhlIHVwY29taW5nIHZlcnNpb24gbnVtYmVyCisjIGF0IHRoZSB0b3Agb2YgdGhlIGZpbGUgZm9yIGVhY2ggYG1ha2UgZGlzdGNoZWNrJyBydW4uCitsb2NhbC1jaGVja3MtdG8tc2tpcCA9IFwKKyAgc2NfZmlsZV9zeXN0ZW0gXAorICBzY19wcm9oaWJpdF9hdG9pX2F0b2YgXAorICBzY19zeXN0ZW1faF9oZWFkZXJzIFwKKyAgc2Nfc3BhY2VfdGFiIFwKKyAgc2NfdGlnaHRfc2NvcGUgXAorICBzY190cmFpbGluZ19ibGFuayBcCisgIHNjX3VzZWxlc3NfY3BwX3BhcmVucyBcCisgIGNoYW5nZWxvZy1jaGVjayBcCisgIHN0cmZ0aW1lLWNoZWNrIFwKKyAgcGF0Y2gtY2hlY2sgXAorICBhdXRob3JfbWFya19jaGVjayBcCisgIHNjX2Nhc3Rfb2ZfYXJndW1lbnRfdG9fZnJlZSBcCisgIGNoZWNrLUFVVEhPUlMKKworCisjIFRoZSBsb2NhbCBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgY2hlY2tlZC1vdXQgY29weSBvZiBnbnVsaWIgdXNlZCBpbgorIyB0aGlzIHJlbGVhc2UuICBVc2VkIHNvbGVseSB0byBnZXQgYSBkYXRlIGZvciB0aGUgImFubm91bmNlbWVudCIgdGFyZ2V0LgorZ251bGliX2RpciA9IC9nbnVsaWIKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9NYWtlZmlsZS5pbiBiL3BhcnRlZC0xLjguNy9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDhlZTJmCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L01ha2VmaWxlLmluCkBAIC0wLDAgKzEsODk3IEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjEwIGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK3N1YmRpciA9IC4KK0RJU1RfQ09NTU9OID0gUkVBRE1FICQoYW1fX2NvbmZpZ3VyZV9kZXBzKSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gXAorCSQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHNyY2RpcikvbGlicGFydGVkLnBjLmluIFwKKwkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSBBQk9VVC1OTFMgQVVUSE9SUyBDT1BZSU5HIENoYW5nZUxvZyBcCisJSU5TVEFMTCBORVdTIFRIQU5LUyBUT0RPIGJ1aWxkLWF1eC9jb21waWxlIFwKKwlidWlsZC1hdXgvY29uZmlnLmd1ZXNzIGJ1aWxkLWF1eC9jb25maWcucnBhdGggXAorCWJ1aWxkLWF1eC9jb25maWcuc3ViIGJ1aWxkLWF1eC9kZXBjb21wIGJ1aWxkLWF1eC9pbnN0YWxsLXNoIFwKKwlidWlsZC1hdXgvbHRtYWluLnNoIGJ1aWxkLWF1eC9tZGF0ZS1zaCBidWlsZC1hdXgvbWlzc2luZyBcCisJYnVpbGQtYXV4L3RleGluZm8udGV4CitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9hYnNvbHV0ZS1oZWFkZXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvYWxsb2NhLm00ICQodG9wX3NyY2RpcikvbTQvYXNzZXJ0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2F0ZXhpdC5tNCAkKHRvcF9zcmNkaXIpL200L2NhbGxvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jbG9zZS1zdHJlYW0ubTQgJCh0b3Bfc3JjZGlyKS9tNC9jbG9zZW91dC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jb2Rlc2V0Lm00ICQodG9wX3NyY2RpcikvbTQvY29uZmlnLWgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZGlybmFtZS5tNCAkKHRvcF9zcmNkaXIpL200L2Rvcy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9kb3VibGUtc2xhc2gtcm9vdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9lcnJvci5tNCAkKHRvcF9zcmNkaXIpL200L2V4aXRmYWlsLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2V4dGVuc2lvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9mcGVuZGluZy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9mcmVlLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0b3B0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgJCh0b3Bfc3JjZGlyKS9tNC9nbGliYzIxLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2dudWxpYi1jb21tb24ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZ251bGliLWNvbXAubTQgJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pbmxpbmUubTQgJCh0b3Bfc3JjZGlyKS9tNC9pbnR0eXBlcy1wcmkubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaW50dHlwZXMubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItaWdub3JlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbG9jYWxjaGFyc2V0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xvbmctb3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2xvbmdsb25nLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21icnRvd2MubTQgJCh0b3Bfc3JjZGlyKS9tNC9tYnN0YXRlX3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWVtY2hyLm00ICQodG9wX3NyY2RpcikvbTQvbWVtY21wLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21lbWNweS5tNCAkKHRvcF9zcmNkaXIpL200L21lbW1vdmUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWVtc2V0Lm00ICQodG9wX3NyY2RpcikvbTQvbmxzLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3BvLm00ICQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcXVvdGVhcmcubTQgJCh0b3Bfc3JjZGlyKS9tNC9yZWdleC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9yZW5hbWUubTQgJCh0b3Bfc3JjZGlyKS9tNC9ycG1hdGNoLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3NhZmUtcmVhZC5tNCAkKHRvcF9zcmNkaXIpL200L3NhZmUtd3JpdGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3NpemVfdC5tNCAkKHRvcF9zcmNkaXIpL200L3N0ZGFyZy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdGRib29sLm00ICQodG9wX3NyY2RpcikvbTQvc3RkaW50Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0ZGxpYl9oLm00ICQodG9wX3NyY2RpcikvbTQvc3RyY3Nwbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdHJpbmdfaC5tNCAkKHRvcF9zcmNkaXIpL200L3N0cm5kdXAubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3Rybmxlbi5tNCAkKHRvcF9zcmNkaXIpL200L3N0cnRvZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdHJ0b2wubTQgJCh0b3Bfc3JjZGlyKS9tNC91bmlzdGRfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC91dGltYnVmLm00ICQodG9wX3NyY2RpcikvbTQvdXRpbWUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdXRpbWVzLW51bGwubTQgJCh0b3Bfc3JjZGlyKS9tNC93Y2hhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC93Y3R5cGUubTQgJCh0b3Bfc3JjZGlyKS9tNC93aW50X3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQveGFsbG9jLm00ICQodG9wX3NyY2RpcikvbTQveHN0cm5kdXAubTQgXAorCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCithbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorCSQoQUNMT0NBTF9NNCkKK2FtX19DT05GSUdfRElTVENMRUFOX0ZJTEVTID0gY29uZmlnLnN0YXR1cyBjb25maWcuY2FjaGUgY29uZmlnLmxvZyBcCisgY29uZmlndXJlLmxpbmVubyBjb25maWcuc3RhdHVzLmxpbmVubworbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oCitDT05GSUdfQ0xFQU5fRklMRVMgPSBsaWJwYXJ0ZWQucGMKK1NPVVJDRVMgPQorRElTVF9TT1VSQ0VTID0KK1JFQ1VSU0lWRV9UQVJHRVRTID0gYWxsLXJlY3Vyc2l2ZSBjaGVjay1yZWN1cnNpdmUgZHZpLXJlY3Vyc2l2ZSBcCisJaHRtbC1yZWN1cnNpdmUgaW5mby1yZWN1cnNpdmUgaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1kdmktcmVjdXJzaXZlIGluc3RhbGwtZXhlYy1yZWN1cnNpdmUgXAorCWluc3RhbGwtaHRtbC1yZWN1cnNpdmUgaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1wZGYtcmVjdXJzaXZlIGluc3RhbGwtcHMtcmVjdXJzaXZlIGluc3RhbGwtcmVjdXJzaXZlIFwKKwlpbnN0YWxsY2hlY2stcmVjdXJzaXZlIGluc3RhbGxkaXJzLXJlY3Vyc2l2ZSBwZGYtcmVjdXJzaXZlIFwKKwlwcy1yZWN1cnNpdmUgdW5pbnN0YWxsLXJlY3Vyc2l2ZQorYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7CithbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAorICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCisgICAgKikgZj0kJHA7OyBcCisgIGVzYWM7CithbV9fc3RyaXBfZGlyID0gYGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOworYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKHBjZGlyKSIKK3BjREFUQV9JTlNUQUxMID0gJChJTlNUQUxMX0RBVEEpCitEQVRBID0gJChwY19EQVRBKQorUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMgPSBtb3N0bHljbGVhbi1yZWN1cnNpdmUgY2xlYW4tcmVjdXJzaXZlCVwKKyAgZGlzdGNsZWFuLXJlY3Vyc2l2ZSBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQorRVRBR1MgPSBldGFncworQ1RBR1MgPSBjdGFncworRElTVF9TVUJESVJTID0gJChTVUJESVJTKQorRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK2Rpc3RkaXIgPSAkKFBBQ0tBR0UpLSQoVkVSU0lPTikKK3RvcF9kaXN0ZGlyID0gJChkaXN0ZGlyKQorYW1fX3JlbW92ZV9kaXN0ZGlyID0gXAorICB7IHRlc3QgISAtZCAkKGRpc3RkaXIpIFwKKyAgICB8fCB7IGZpbmQgJChkaXN0ZGlyKSAtdHlwZSBkICEgLXBlcm0gLTIwMCAtZXhlYyBjaG1vZCB1K3cge30gJzsnIFwKKyAgICAgICAgICYmIHJtIC1mciAkKGRpc3RkaXIpOyB9OyB9CitESVNUX0FSQ0hJVkVTID0gJChkaXN0ZGlyKS50YXIuZ3ogJChkaXN0ZGlyKS50YXIuYnoyCitHWklQX0VOViA9IC0tYmVzdAorZGlzdHVuaW5zdGFsbGNoZWNrX2xpc3RmaWxlcyA9IGZpbmQgLiAtdHlwZSBmIC1wcmludAorZGlzdGNsZWFuY2hlY2tfbGlzdGZpbGVzID0gZmluZCAuIC10eXBlIGYgLXByaW50CitBQlNPTFVURV9JTlRUWVBFU19IID0gQEFCU09MVVRFX0lOVFRZUEVTX0hACitBQlNPTFVURV9TVERJTlRfSCA9IEBBQlNPTFVURV9TVERJTlRfSEAKK0FCU09MVVRFX1NURExJQl9IID0gQEFCU09MVVRFX1NURExJQl9IQAorQUJTT0xVVEVfU1RSSU5HX0ggPSBAQUJTT0xVVEVfU1RSSU5HX0hACitBQlNPTFVURV9VTklTVERfSCA9IEBBQlNPTFVURV9VTklTVERfSEAKK0FCU09MVVRFX1dDSEFSX0ggPSBAQUJTT0xVVEVfV0NIQVJfSEAKK0FCU09MVVRFX1dDVFlQRV9IID0gQEFCU09MVVRFX1dDVFlQRV9IQAorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQUxMT0NBID0gQEFMTE9DQUAKK0FMTE9DQV9IID0gQEFMTE9DQV9IQAorQU1UQVIgPSBAQU1UQVJACitBUiA9IEBBUkAKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBV0sgPSBAQVdLQAorQklUU0laRU9GX1BUUkRJRkZfVCA9IEBCSVRTSVpFT0ZfUFRSRElGRl9UQAorQklUU0laRU9GX1NJR19BVE9NSUNfVCA9IEBCSVRTSVpFT0ZfU0lHX0FUT01JQ19UQAorQklUU0laRU9GX1NJWkVfVCA9IEBCSVRTSVpFT0ZfU0laRV9UQAorQklUU0laRU9GX1dDSEFSX1QgPSBAQklUU0laRU9GX1dDSEFSX1RACitCSVRTSVpFT0ZfV0lOVF9UID0gQEJJVFNJWkVPRl9XSU5UX1RACitCVUlMRElORk8gPSBAQlVJTERJTkZPQAorQ0MgPSBAQ0NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NIRUNLX0NGTEFHUyA9IEBDSEVDS19DRkxBR1NACitDSEVDS19MSUJTID0gQENIRUNLX0xJQlNACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitETF9MSUJTID0gQERMX0xJQlNACitETV9MSUJTID0gQERNX0xJQlNACitFQ0hPID0gQEVDSE9ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VYRUVYVCA9IEBFWEVFWFRACitGNzcgPSBARjc3QAorRkZMQUdTID0gQEZGTEFHU0AKK0dFVE9QVF9IID0gQEdFVE9QVF9IQAorR0xJQkMyMSA9IEBHTElCQzIxQAorR01TR0ZNVCA9IEBHTVNHRk1UQAorR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACitHTlVMSUJfQ0hPV04gPSBAR05VTElCX0NIT1dOQAorR05VTElCX0RVUDIgPSBAR05VTElCX0RVUDJACitHTlVMSUJfRkNIRElSID0gQEdOVUxJQl9GQ0hESVJACitHTlVMSUJfRlRSVU5DQVRFID0gQEdOVUxJQl9GVFJVTkNBVEVACitHTlVMSUJfR0VUQ1dEID0gQEdOVUxJQl9HRVRDV0RACitHTlVMSUJfR0VUTE9HSU5fUiA9IEBHTlVMSUJfR0VUTE9HSU5fUkAKK0dOVUxJQl9HRVRTVUJPUFQgPSBAR05VTElCX0dFVFNVQk9QVEAKK0dOVUxJQl9JTUFYQUJTID0gQEdOVUxJQl9JTUFYQUJTQAorR05VTElCX0lNQVhESVYgPSBAR05VTElCX0lNQVhESVZACitHTlVMSUJfTUJTQ0FTRUNNUCA9IEBHTlVMSUJfTUJTQ0FTRUNNUEAKK0dOVUxJQl9NQlNDQVNFU1RSID0gQEdOVUxJQl9NQlNDQVNFU1RSQAorR05VTElCX01CU0NIUiA9IEBHTlVMSUJfTUJTQ0hSQAorR05VTElCX01CU0NTUE4gPSBAR05VTElCX01CU0NTUE5ACitHTlVMSUJfTUJTTEVOID0gQEdOVUxJQl9NQlNMRU5ACitHTlVMSUJfTUJTTkNBU0VDTVAgPSBAR05VTElCX01CU05DQVNFQ01QQAorR05VTElCX01CU1BCUksgPSBAR05VTElCX01CU1BCUktACitHTlVMSUJfTUJTUENBU0VDTVAgPSBAR05VTElCX01CU1BDQVNFQ01QQAorR05VTElCX01CU1JDSFIgPSBAR05VTElCX01CU1JDSFJACitHTlVMSUJfTUJTU0VQID0gQEdOVUxJQl9NQlNTRVBACitHTlVMSUJfTUJTU1BOID0gQEdOVUxJQl9NQlNTUE5ACitHTlVMSUJfTUJTU1RSID0gQEdOVUxJQl9NQlNTVFJACitHTlVMSUJfTUJTVE9LX1IgPSBAR05VTElCX01CU1RPS19SQAorR05VTElCX01FTU1FTSA9IEBHTlVMSUJfTUVNTUVNQAorR05VTElCX01FTVBDUFkgPSBAR05VTElCX01FTVBDUFlACitHTlVMSUJfTUVNUkNIUiA9IEBHTlVMSUJfTUVNUkNIUkAKK0dOVUxJQl9NS0RURU1QID0gQEdOVUxJQl9NS0RURU1QQAorR05VTElCX01LU1RFTVAgPSBAR05VTElCX01LU1RFTVBACitHTlVMSUJfUkVBRExJTksgPSBAR05VTElCX1JFQURMSU5LQAorR05VTElCX1NMRUVQID0gQEdOVUxJQl9TTEVFUEAKK0dOVUxJQl9TVFBDUFkgPSBAR05VTElCX1NUUENQWUAKK0dOVUxJQl9TVFBOQ1BZID0gQEdOVUxJQl9TVFBOQ1BZQAorR05VTElCX1NUUkNBU0VTVFIgPSBAR05VTElCX1NUUkNBU0VTVFJACitHTlVMSUJfU1RSQ0hSTlVMID0gQEdOVUxJQl9TVFJDSFJOVUxACitHTlVMSUJfU1RSRFVQID0gQEdOVUxJQl9TVFJEVVBACitHTlVMSUJfU1RSTkRVUCA9IEBHTlVMSUJfU1RSTkRVUEAKK0dOVUxJQl9TVFJOTEVOID0gQEdOVUxJQl9TVFJOTEVOQAorR05VTElCX1NUUlBCUksgPSBAR05VTElCX1NUUlBCUktACitHTlVMSUJfU1RSU0VQID0gQEdOVUxJQl9TVFJTRVBACitHTlVMSUJfU1RSVE9JTUFYID0gQEdOVUxJQl9TVFJUT0lNQVhACitHTlVMSUJfU1RSVE9LX1IgPSBAR05VTElCX1NUUlRPS19SQAorR05VTElCX1NUUlRPVU1BWCA9IEBHTlVMSUJfU1RSVE9VTUFYQAorR1JFUCA9IEBHUkVQQAorSEFWRV9ERUNMX0dFVExPR0lOX1IgPSBASEFWRV9ERUNMX0dFVExPR0lOX1JACitIQVZFX0RFQ0xfSU1BWEFCUyA9IEBIQVZFX0RFQ0xfSU1BWEFCU0AKK0hBVkVfREVDTF9JTUFYRElWID0gQEhBVkVfREVDTF9JTUFYRElWQAorSEFWRV9ERUNMX01FTU1FTSA9IEBIQVZFX0RFQ0xfTUVNTUVNQAorSEFWRV9ERUNMX01FTVJDSFIgPSBASEFWRV9ERUNMX01FTVJDSFJACitIQVZFX0RFQ0xfU1RSRFVQID0gQEhBVkVfREVDTF9TVFJEVVBACitIQVZFX0RFQ0xfU1RSTkNBU0VDTVAgPSBASEFWRV9ERUNMX1NUUk5DQVNFQ01QQAorSEFWRV9ERUNMX1NUUk5EVVAgPSBASEFWRV9ERUNMX1NUUk5EVVBACitIQVZFX0RFQ0xfU1RSTkxFTiA9IEBIQVZFX0RFQ0xfU1RSTkxFTkAKK0hBVkVfREVDTF9TVFJUT0lNQVggPSBASEFWRV9ERUNMX1NUUlRPSU1BWEAKK0hBVkVfREVDTF9TVFJUT0tfUiA9IEBIQVZFX0RFQ0xfU1RSVE9LX1JACitIQVZFX0RFQ0xfU1RSVE9VTUFYID0gQEhBVkVfREVDTF9TVFJUT1VNQVhACitIQVZFX0RVUDIgPSBASEFWRV9EVVAyQAorSEFWRV9GVFJVTkNBVEUgPSBASEFWRV9GVFJVTkNBVEVACitIQVZFX0dFVFNVQk9QVCA9IEBIQVZFX0dFVFNVQk9QVEAKK0hBVkVfSU5UVFlQRVNfSCA9IEBIQVZFX0lOVFRZUEVTX0hACitIQVZFX0lTV0NOVFJMID0gQEhBVkVfSVNXQ05UUkxACitIQVZFX0xPTkdfTE9OR19JTlQgPSBASEFWRV9MT05HX0xPTkdfSU5UQAorSEFWRV9NRU1QQ1BZID0gQEhBVkVfTUVNUENQWUAKK0hBVkVfTUtEVEVNUCA9IEBIQVZFX01LRFRFTVBACitIQVZFX1JFQURMSU5LID0gQEhBVkVfUkVBRExJTktACitIQVZFX1NJR05FRF9TSUdfQVRPTUlDX1QgPSBASEFWRV9TSUdORURfU0lHX0FUT01JQ19UQAorSEFWRV9TSUdORURfV0NIQVJfVCA9IEBIQVZFX1NJR05FRF9XQ0hBUl9UQAorSEFWRV9TSUdORURfV0lOVF9UID0gQEhBVkVfU0lHTkVEX1dJTlRfVEAKK0hBVkVfU0xFRVAgPSBASEFWRV9TTEVFUEAKK0hBVkVfU1RESU5UX0ggPSBASEFWRV9TVERJTlRfSEAKK0hBVkVfU1RQQ1BZID0gQEhBVkVfU1RQQ1BZQAorSEFWRV9TVFBOQ1BZID0gQEhBVkVfU1RQTkNQWUAKK0hBVkVfU1RSQ0FTRUNNUCA9IEBIQVZFX1NUUkNBU0VDTVBACitIQVZFX1NUUkNBU0VTVFIgPSBASEFWRV9TVFJDQVNFU1RSQAorSEFWRV9TVFJDSFJOVUwgPSBASEFWRV9TVFJDSFJOVUxACitIQVZFX1NUUk5EVVAgPSBASEFWRV9TVFJORFVQQAorSEFWRV9TVFJQQlJLID0gQEhBVkVfU1RSUEJSS0AKK0hBVkVfU1RSU0VQID0gQEhBVkVfU1RSU0VQQAorSEFWRV9TWVNfQklUWVBFU19IID0gQEhBVkVfU1lTX0JJVFlQRVNfSEAKK0hBVkVfU1lTX0lOVFRZUEVTX0ggPSBASEFWRV9TWVNfSU5UVFlQRVNfSEAKK0hBVkVfU1lTX1RZUEVTX0ggPSBASEFWRV9TWVNfVFlQRVNfSEAKK0hBVkVfVU5JU1REX0ggPSBASEFWRV9VTklTVERfSEAKK0hBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVCA9IEBIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlRACitIQVZFX1dDVFlQRV9IID0gQEhBVkVfV0NUWVBFX0hACitIQVZFX1dJTlRfVCA9IEBIQVZFX1dJTlRfVEAKK0hBVkVfX0JPT0wgPSBASEFWRV9fQk9PTEAKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSU5UTElOQ1MgPSBASU5UTElOQ1NACitJTlRMTElCUyA9IEBJTlRMTElCU0AKK0lOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKK0lOVFRZUEVTX0ggPSBASU5UVFlQRVNfSEAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQklDT05WID0gQExJQklDT05WQAorTElCSU5UTCA9IEBMSUJJTlRMQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTE5fUyA9IEBMTl9TQAorTFRBTExPQ0EgPSBATFRBTExPQ0FACitMVExJQklDT05WID0gQExUTElCSUNPTlZACitMVExJQklOVEwgPSBATFRMSUJJTlRMQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK0xUX0FHRSA9IEBMVF9BR0VACitMVF9DVVJSRU5UID0gQExUX0NVUlJFTlRACitMVF9SRUxFQVNFID0gQExUX1JFTEVBU0VACitMVF9SRVZJU0lPTiA9IEBMVF9SRVZJU0lPTkAKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTVNHRk1UID0gQE1TR0ZNVEAKK01TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKK01TR01FUkdFID0gQE1TR01FUkdFQAorT0JKRVhUID0gQE9CSkVYVEAKK09TID0gQE9TQAorT1NfTElCUyA9IEBPU19MSUJTQAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBUlRFRExERkxBR1MgPSBAUEFSVEVETERGTEFHU0AKK1BBUlRFRF9MSUJTID0gQFBBUlRFRF9MSUJTQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQT1NVQiA9IEBQT1NVQkAKK1BPV19MSUIgPSBAUE9XX0xJQkAKK1BSSVBUUl9QUkVGSVggPSBAUFJJUFRSX1BSRUZJWEAKK1BSSV9NQUNST1NfQlJPS0VOID0gQFBSSV9NQUNST1NfQlJPS0VOQAorUFRSRElGRl9UX1NVRkZJWCA9IEBQVFJESUZGX1RfU1VGRklYQAorUkFOTElCID0gQFJBTkxJQkAKK1JFSVNFUl9MSUJTID0gQFJFSVNFUl9MSUJTQAorUkVQTEFDRV9DSE9XTiA9IEBSRVBMQUNFX0NIT1dOQAorUkVQTEFDRV9GQ0hESVIgPSBAUkVQTEFDRV9GQ0hESVJACitSRVBMQUNFX0dFVENXRCA9IEBSRVBMQUNFX0dFVENXREAKK1JFUExBQ0VfTUtTVEVNUCA9IEBSRVBMQUNFX01LU1RFTVBACitTRUQgPSBAU0VEQAorU0VMSU5VWF9MSUJTID0gQFNFTElOVVhfTElCU0AKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTSUdfQVRPTUlDX1RfU1VGRklYID0gQFNJR19BVE9NSUNfVF9TVUZGSVhACitTSVpFX1RfU1VGRklYID0gQFNJWkVfVF9TVUZGSVhACitTVERCT09MX0ggPSBAU1REQk9PTF9IQAorU1RESU5UX0ggPSBAU1RESU5UX0hACitTVFJJUCA9IEBTVFJJUEAKK1VTRV9OTFMgPSBAVVNFX05MU0AKK1VVSURfTElCUyA9IEBVVUlEX0xJQlNACitWRVJTSU9OID0gQFZFUlNJT05ACitXQ0hBUl9IID0gQFdDSEFSX0hACitXQ0hBUl9UX1NVRkZJWCA9IEBXQ0hBUl9UX1NVRkZJWEAKK1dDVFlQRV9IID0gQFdDVFlQRV9IQAorV0lOVF9UX1NVRkZJWCA9IEBXSU5UX1RfU1VGRklYQAorWEdFVFRFWFQgPSBAWEdFVFRFWFRACitYR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9DWFggPSBAYWNfY3RfQ1hYQAorYWNfY3RfRjc3ID0gQGFjX2N0X0Y3N0AKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitnbF9MSUJPQkpTID0gQGdsX0xJQk9CSlNACitnbF9MVExJQk9CSlMgPSBAZ2xfTFRMSUJPQkpTQAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK0FDTE9DQUxfQU1GTEFHUyA9IC1JIG00CitTVUJESVJTID0gcG8gbGliIGxpYnBhcnRlZCBwYXJ0ZWQgcGFydHByb2JlIGluY2x1ZGUgZG9jIGRlYnVnIHRlc3RzCitFWFRSQV9ESVNUID0gXAorICAucHJldi12ZXJzaW9uCQkJCVwKKyAgQlVHUwkJCQkJXAorICBsaWJwYXJ0ZWQucGMuaW4JCQlcCisgIHBhcnRlZC5zcGVjLmluCQkJXAorICBwYXJ0ZWQuc3BlYwkJCQlcCisgIHNjcmlwdHMvZGF0YS9hYmkvYmFzZWxpbmVfc3ltYm9scy50eHQgXAorICBzY3JpcHRzL2V4dHJhY3Rfc3ltdmVycwkJXAorICBNYWtlZmlsZS5jZmcJCQkJXAorICBNYWtlZmlsZS5tYWludAkJCVwKKyAgR05VbWFrZWZpbGUKKworYWNsb2NhbGRpciA9ICQoZGF0YWRpcikvYWNsb2NhbAorcGNkaXIgPSAkKGxpYmRpcikvcGtnY29uZmlnCitwY19EQVRBID0gbGlicGFydGVkLnBjCitNQUlOVEFJTkVSQ0xFQU5GSUxFUyA9IHBhcnRlZC5zcGVjIEFCT1VULU5MUyBDaGFuZ2VMb2cgSU5TVEFMTCBcCisJYWNsb2NhbC5tNCBjb25maWd1cmUKKworIyMjIEFCSSBDaGVja2luZyBzY3JpcHRzICMjIworYmFzZWxpbmVfZmlsZSA9ICR7dG9wX3NyY2Rpcn0vc2NyaXB0cy9kYXRhL2FiaS9iYXNlbGluZV9zeW1ib2xzLnR4dAorZXh0cmFjdF9zeW12ZXJzID0gJCh0b3Bfc3JjZGlyKS9zY3JpcHRzL2V4dHJhY3Rfc3ltdmVycworTU9TVExZQ0xFQU5ESVJTID0gbTQKK2FsbDogYWxsLXJlY3Vyc2l2ZQorCisuU1VGRklYRVM6CithbS0tcmVmcmVzaDoKKwlAOgorJChzcmNkaXIpL01ha2VmaWxlLmluOiAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICBlY2hvICcgY2QgJChzcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251ICc7IFwKKwkgICAgICBjZCAkKHNyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgIFwKKwkJJiYgZXhpdCAwOyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSAgTWFrZWZpbGUnOyBcCisJY2QgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWdudSAgTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBlY2hvICcgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzJzsgXAorCSAgICAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXM7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJJChTSEVMTCkgLi9jb25maWcuc3RhdHVzIC0tcmVjaGVjaworCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQoc3JjZGlyKSAmJiAkKEFVVE9DT05GKQorJChBQ0xPQ0FMX000KTogICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHNyY2RpcikgJiYgJChBQ0xPQ0FMKSAkKEFDTE9DQUxfQU1GTEFHUykKK2xpYnBhcnRlZC5wYzogJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChzcmNkaXIpL2xpYnBhcnRlZC5wYy5pbgorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJEAKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKKworZGlzdGNsZWFuLWxpYnRvb2w6CisJLXJtIC1mIGxpYnRvb2wKK2luc3RhbGwtcGNEQVRBOiAkKHBjX0RBVEEpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJdGVzdCAteiAiJChwY2RpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKHBjZGlyKSIKKwlAbGlzdD0nJChwY19EQVRBKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKKwkgIGY9JChhbV9fc3RyaXBfZGlyKSBcCisJICBlY2hvICIgJChwY0RBVEFfSU5TVEFMTCkgJyQkZCQkcCcgJyQoREVTVERJUikkKHBjZGlyKS8kJGYnIjsgXAorCSAgJChwY0RBVEFfSU5TVEFMTCkgIiQkZCQkcCIgIiQoREVTVERJUikkKHBjZGlyKS8kJGYiOyBcCisJZG9uZQorCit1bmluc3RhbGwtcGNEQVRBOgorCUAkKE5PUk1BTF9VTklOU1RBTEwpCisJQGxpc3Q9JyQocGNfREFUQSknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGY9JChhbV9fc3RyaXBfZGlyKSBcCisJICBlY2hvICIgcm0gLWYgJyQoREVTVERJUikkKHBjZGlyKS8kJGYnIjsgXAorCSAgcm0gLWYgIiQoREVTVERJUikkKHBjZGlyKS8kJGYiOyBcCisJZG9uZQorCisjIFRoaXMgZGlyZWN0b3J5J3Mgc3ViZGlyZWN0b3JpZXMgYXJlIG1vc3RseSBpbmRlcGVuZGVudDsgeW91IGNhbiBjZAorIyBpbnRvIHRoZW0gYW5kIHJ1biBgbWFrZScgd2l0aG91dCBnb2luZyB0aHJvdWdoIHRoaXMgTWFrZWZpbGUuCisjIFRvIGNoYW5nZSB0aGUgdmFsdWVzIG9mIGBtYWtlJyB2YXJpYWJsZXM6IGluc3RlYWQgb2YgZWRpdGluZyBNYWtlZmlsZXMsCisjICgxKSBpZiB0aGUgdmFyaWFibGUgaXMgc2V0IGluIGBjb25maWcuc3RhdHVzJywgZWRpdCBgY29uZmlnLnN0YXR1cycKKyMgICAgICh3aGljaCB3aWxsIGNhdXNlIHRoZSBNYWtlZmlsZXMgdG8gYmUgcmVnZW5lcmF0ZWQgd2hlbiB5b3UgcnVuIGBtYWtlJyk7CisjICgyKSBvdGhlcndpc2UsIHBhc3MgdGhlIGRlc2lyZWQgdmFsdWVzIG9uIHRoZSBgbWFrZScgY29tbWFuZCBsaW5lLgorJChSRUNVUlNJVkVfVEFSR0VUUyk6CisJQGZhaWxjb209J2V4aXQgMSc7IFwKKwlmb3IgZiBpbiB4ICQkTUFLRUZMQUdTOyBkbyBcCisJICBjYXNlICQkZiBpbiBcCisJICAgICo9KiB8IC0tWyFrXSopOzsgXAorCSAgICAqayopIGZhaWxjb209J2ZhaWw9eWVzJzs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZG90X3NlZW49bm87IFwKKwl0YXJnZXQ9YGVjaG8gJEAgfCBzZWQgcy8tcmVjdXJzaXZlLy9gOyBcCisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBlY2hvICJNYWtpbmcgJCR0YXJnZXQgaW4gJCRzdWJkaXIiOyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gXAorCSAgICBkb3Rfc2Vlbj15ZXM7IFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldC1hbSI7IFwKKwkgIGVsc2UgXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0IjsgXAorCSAgZmk7IFwKKwkgIChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkJGxvY2FsX3RhcmdldCkgXAorCSAgfHwgZXZhbCAkJGZhaWxjb207IFwKKwlkb25lOyBcCisJaWYgdGVzdCAiJCRkb3Rfc2VlbiIgPSAibm8iOyB0aGVuIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICIkJHRhcmdldC1hbSIgfHwgZXhpdCAxOyBcCisJZmk7IHRlc3QgLXogIiQkZmFpbCIKKworJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUyk6CisJQGZhaWxjb209J2V4aXQgMSc7IFwKKwlmb3IgZiBpbiB4ICQkTUFLRUZMQUdTOyBkbyBcCisJICBjYXNlICQkZiBpbiBcCisJICAgICo9KiB8IC0tWyFrXSopOzsgXAorCSAgICAqayopIGZhaWxjb209J2ZhaWw9eWVzJzs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZG90X3NlZW49bm87IFwKKwljYXNlICIkQCIgaW4gXAorCSAgZGlzdGNsZWFuLSogfCBtYWludGFpbmVyLWNsZWFuLSopIGxpc3Q9JyQoRElTVF9TVUJESVJTKScgOzsgXAorCSAgKikgbGlzdD0nJChTVUJESVJTKScgOzsgXAorCWVzYWM7IFwKKwlyZXY9Jyc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gOjsgZWxzZSBcCisJICAgIHJldj0iJCRzdWJkaXIgJCRyZXYiOyBcCisJICBmaTsgXAorCWRvbmU7IFwKKwlyZXY9IiQkcmV2IC4iOyBcCisJdGFyZ2V0PWBlY2hvICRAIHwgc2VkIHMvLXJlY3Vyc2l2ZS8vYDsgXAorCWZvciBzdWJkaXIgaW4gJCRyZXY7IGRvIFwKKwkgIGVjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQtYW0iOyBcCisJICBlbHNlIFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKKwkgIGZpOyBcCisJICAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRsb2NhbF90YXJnZXQpIFwKKwkgIHx8IGV2YWwgJCRmYWlsY29tOyBcCisJZG9uZSAmJiB0ZXN0IC16ICIkJGZhaWwiCit0YWdzLXJlY3Vyc2l2ZToKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHRhZ3MpOyBcCisJZG9uZQorY3RhZ3MtcmVjdXJzaXZlOgorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgdGVzdCAiJCRzdWJkaXIiID0gLiB8fCAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY3RhZ3MpOyBcCisJZG9uZQorCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJbWtpZCAtZklEICQkdW5pcXVlCit0YWdzOiBUQUdTCisKK1RBR1M6IHRhZ3MtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwl0YWdzPTsgXAorCWhlcmU9YHB3ZGA7IFwKKwlpZiAoJChFVEFHUykgLS1ldGFncy1pbmNsdWRlIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKKwkgIGluY2x1ZGVfb3B0aW9uPS0tZXRhZ3MtaW5jbHVkZTsgXAorCSAgZW1wdHlfZml4PS47IFwKKwllbHNlIFwKKwkgIGluY2x1ZGVfb3B0aW9uPS0taW5jbHVkZTsgXAorCSAgZW1wdHlfZml4PTsgXAorCWZpOyBcCisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAorCSAgICB0ZXN0ICEgLWYgJCRzdWJkaXIvVEFHUyB8fCBcCisJICAgICAgdGFncz0iJCR0YWdzICQkaW5jbHVkZV9vcHRpb249JCRoZXJlLyQkc3ViZGlyL1RBR1MiOyBcCisJICBmaTsgXAorCWRvbmU7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKKwkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorCSAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAkJHRhZ3MgJCR1bmlxdWU7IFwKKwlmaQorY3RhZ3M6IENUQUdTCitDVEFHUzogY3RhZ3MtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwl0YWdzPTsgXAorCWhlcmU9YHB3ZGA7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKKwkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKKwl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiIFwKKwkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKKwkgICAgICQkdGFncyAkJHVuaXF1ZQorCitHVEFHUzoKKwloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorCSAgJiYgY2QgJCh0b3Bfc3JjZGlyKSBcCisJICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICQkaGVyZQorCitkaXN0Y2xlYW4tdGFnczoKKwktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwkkKGFtX19yZW1vdmVfZGlzdGRpcikKKwl0ZXN0IC1kICQoZGlzdGRpcikgfHwgbWtkaXIgJChkaXN0ZGlyKQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgXAorCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKKwkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCisJICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAorCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKKwkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKKwkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKKwkJCSAgIHNvcnQgLXVgIDs7IFwKKwllc2FjOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtcFIgJChzcmNkaXIpLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1wUiAkJGQvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICQoZGlzdGRpcikvJCRmaWxlIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAkKGRpc3RkaXIpLyQkZmlsZSBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCisJbGlzdD0nJChESVNUX1NVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCisJICAgIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRzdWJkaXIiIFwKKwkgICAgfHwgJChNS0RJUl9QKSAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgICAgZGlzdGRpcj1gJChhbV9fY2QpICQoZGlzdGRpcikgJiYgcHdkYDsgXAorCSAgICB0b3BfZGlzdGRpcj1gJChhbV9fY2QpICQodG9wX2Rpc3RkaXIpICYmIHB3ZGA7IFwKKwkgICAgKGNkICQkc3ViZGlyICYmIFwKKwkgICAgICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBcCisJICAgICAgICB0b3BfZGlzdGRpcj0iJCR0b3BfZGlzdGRpciIgXAorCSAgICAgICAgZGlzdGRpcj0iJCRkaXN0ZGlyLyQkc3ViZGlyIiBcCisJCWFtX19yZW1vdmVfZGlzdGRpcj06IFwKKwkJYW1fX3NraXBfbGVuZ3RoX2NoZWNrPTogXAorCSAgICAgICAgZGlzdGRpcikgXAorCSAgICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCisJLWZpbmQgJChkaXN0ZGlyKSAtdHlwZSBkICEgLXBlcm0gLTc3NyAtZXhlYyBjaG1vZCBhK3J3eCB7fSBcOyAtbyBcCisJICAhIC10eXBlIGQgISAtcGVybSAtNDQ0IC1saW5rcyAxIC1leGVjIGNobW9kIGErciB7fSBcOyAtbyBcCisJICAhIC10eXBlIGQgISAtcGVybSAtNDAwIC1leGVjIGNobW9kIGErciB7fSBcOyAtbyBcCisJICAhIC10eXBlIGQgISAtcGVybSAtNDQ0IC1leGVjICQoaW5zdGFsbF9zaCkgLWMgLW0gYStyIHt9IHt9IFw7IFwKKwl8fCBjaG1vZCAtUiBhK3IgJChkaXN0ZGlyKQorZGlzdC1nemlwOiBkaXN0ZGlyCisJdGFyZGlyPSQoZGlzdGRpcikgJiYgJChhbV9fdGFyKSB8IEdaSVA9JChHWklQX0VOVikgZ3ppcCAtYyA+JChkaXN0ZGlyKS50YXIuZ3oKKwkkKGFtX19yZW1vdmVfZGlzdGRpcikKK2Rpc3QtYnppcDI6IGRpc3RkaXIKKwl0YXJkaXI9JChkaXN0ZGlyKSAmJiAkKGFtX190YXIpIHwgYnppcDIgLTkgLWMgPiQoZGlzdGRpcikudGFyLmJ6MgorCSQoYW1fX3JlbW92ZV9kaXN0ZGlyKQorCitkaXN0LXRhclo6IGRpc3RkaXIKKwl0YXJkaXI9JChkaXN0ZGlyKSAmJiAkKGFtX190YXIpIHwgY29tcHJlc3MgLWMgPiQoZGlzdGRpcikudGFyLloKKwkkKGFtX19yZW1vdmVfZGlzdGRpcikKKworZGlzdC1zaGFyOiBkaXN0ZGlyCisJc2hhciAkKGRpc3RkaXIpIHwgR1pJUD0kKEdaSVBfRU5WKSBnemlwIC1jID4kKGRpc3RkaXIpLnNoYXIuZ3oKKwkkKGFtX19yZW1vdmVfZGlzdGRpcikKKworZGlzdC16aXA6IGRpc3RkaXIKKwktcm0gLWYgJChkaXN0ZGlyKS56aXAKKwl6aXAgLXJxICQoZGlzdGRpcikuemlwICQoZGlzdGRpcikKKwkkKGFtX19yZW1vdmVfZGlzdGRpcikKKworZGlzdCBkaXN0LWFsbDogZGlzdGRpcgorCXRhcmRpcj0kKGRpc3RkaXIpICYmICQoYW1fX3RhcikgfCBHWklQPSQoR1pJUF9FTlYpIGd6aXAgLWMgPiQoZGlzdGRpcikudGFyLmd6CisJdGFyZGlyPSQoZGlzdGRpcikgJiYgJChhbV9fdGFyKSB8IGJ6aXAyIC05IC1jID4kKGRpc3RkaXIpLnRhci5iejIKKwkkKGFtX19yZW1vdmVfZGlzdGRpcikKKworIyBUaGlzIHRhcmdldCB1bnRhcnMgdGhlIGRpc3QgZmlsZSBhbmQgdHJpZXMgYSBWUEFUSCBjb25maWd1cmF0aW9uLiAgVGhlbgorIyBpdCBndWFyYW50ZWVzIHRoYXQgdGhlIGRpc3RyaWJ1dGlvbiBpcyBzZWxmLWNvbnRhaW5lZCBieSBtYWtpbmcgYW5vdGhlcgorIyB0YXJmaWxlLgorZGlzdGNoZWNrOiBkaXN0CisJY2FzZSAnJChESVNUX0FSQ0hJVkVTKScgaW4gXAorCSoudGFyLmd6KikgXAorCSAgR1pJUD0kKEdaSVBfRU5WKSBndW56aXAgLWMgJChkaXN0ZGlyKS50YXIuZ3ogfCAkKGFtX191bnRhcikgOztcCisJKi50YXIuYnoyKikgXAorCSAgYnVuemlwMiAtYyAkKGRpc3RkaXIpLnRhci5iejIgfCAkKGFtX191bnRhcikgOztcCisJKi50YXIuWiopIFwKKwkgIHVuY29tcHJlc3MgLWMgJChkaXN0ZGlyKS50YXIuWiB8ICQoYW1fX3VudGFyKSA7O1wKKwkqLnNoYXIuZ3oqKSBcCisJICBHWklQPSQoR1pJUF9FTlYpIGd1bnppcCAtYyAkKGRpc3RkaXIpLnNoYXIuZ3ogfCB1bnNoYXIgOztcCisJKi56aXAqKSBcCisJICB1bnppcCAkKGRpc3RkaXIpLnppcCA7O1wKKwllc2FjCisJY2htb2QgLVIgYS13ICQoZGlzdGRpcik7IGNobW9kIGErdyAkKGRpc3RkaXIpCisJbWtkaXIgJChkaXN0ZGlyKS9fYnVpbGQKKwlta2RpciAkKGRpc3RkaXIpL19pbnN0CisJY2htb2QgYS13ICQoZGlzdGRpcikKKwlkY19pbnN0YWxsX2Jhc2U9YCQoYW1fX2NkKSAkKGRpc3RkaXIpL19pbnN0ICYmIHB3ZCB8IHNlZCAtZSAncyxeW146XFwvXTpbXFwvXSwvLCdgIFwKKwkgICYmIGRjX2Rlc3RkaXI9IiQke1RNUERJUi0vdG1wfS9hbS1kYy0kJCQkLyIgXAorCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgZGlzdGNoZWNrLWhvb2sgXAorCSAgJiYgY2QgJChkaXN0ZGlyKS9fYnVpbGQgXAorCSAgJiYgLi4vY29uZmlndXJlIC0tc3JjZGlyPS4uIC0tcHJlZml4PSIkJGRjX2luc3RhbGxfYmFzZSIgXAorCSAgICAkKERJU1RDSEVDS19DT05GSUdVUkVfRkxBR1MpIFwKKwkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIFwKKwkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGR2aSBcCisJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBjaGVjayBcCisJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsIFwKKwkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGxjaGVjayBcCisJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSB1bmluc3RhbGwgXAorCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgZGlzdHVuaW5zdGFsbGNoZWNrX2Rpcj0iJCRkY19pbnN0YWxsX2Jhc2UiIFwKKwkgICAgICAgIGRpc3R1bmluc3RhbGxjaGVjayBcCisJICAmJiBjaG1vZCAtUiBhLXcgIiQkZGNfaW5zdGFsbF9iYXNlIiBcCisJICAmJiAoeyBcCisJICAgICAgIChjZCAuLi8uLiAmJiB1bWFzayAwNzcgJiYgbWtkaXIgIiQkZGNfZGVzdGRpciIpIFwKKwkgICAgICAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgREVTVERJUj0iJCRkY19kZXN0ZGlyIiBpbnN0YWxsIFwKKwkgICAgICAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgREVTVERJUj0iJCRkY19kZXN0ZGlyIiB1bmluc3RhbGwgXAorCSAgICAgICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBERVNURElSPSIkJGRjX2Rlc3RkaXIiIFwKKwkgICAgICAgICAgICBkaXN0dW5pbnN0YWxsY2hlY2tfZGlyPSIkJGRjX2Rlc3RkaXIiIGRpc3R1bmluc3RhbGxjaGVjazsgXAorCSAgICAgIH0gfHwgeyBybSAtcmYgIiQkZGNfZGVzdGRpciI7IGV4aXQgMTsgfSkgXAorCSAgJiYgcm0gLXJmICIkJGRjX2Rlc3RkaXIiIFwKKwkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGRpc3QgXAorCSAgJiYgcm0gLXJmICQoRElTVF9BUkNISVZFUykgXAorCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgZGlzdGNsZWFuY2hlY2sKKwkkKGFtX19yZW1vdmVfZGlzdGRpcikKKwlAKGVjaG8gIiQoZGlzdGRpcikgYXJjaGl2ZXMgcmVhZHkgZm9yIGRpc3RyaWJ1dGlvbjogIjsgXAorCSAgbGlzdD0nJChESVNUX0FSQ0hJVkVTKSc7IGZvciBpIGluICQkbGlzdDsgZG8gZWNobyAkJGk7IGRvbmUpIHwgXAorCSAgc2VkIC1lIDFoIC1lIDFzLy4vPS9nIC1lIDFwIC1lIDF4IC1lICckJHAnIC1lICckJHgnCitkaXN0dW5pbnN0YWxsY2hlY2s6CisJQGNkICQoZGlzdHVuaW5zdGFsbGNoZWNrX2RpcikgXAorCSYmIHRlc3QgYCQoZGlzdHVuaW5zdGFsbGNoZWNrX2xpc3RmaWxlcykgfCB3YyAtbGAgLWxlIDEgXAorCSAgIHx8IHsgZWNobyAiRVJST1I6IGZpbGVzIGxlZnQgYWZ0ZXIgdW5pbnN0YWxsOiIgOyBcCisJICAgICAgICBpZiB0ZXN0IC1uICIkKERFU1RESVIpIjsgdGhlbiBcCisJICAgICAgICAgIGVjaG8gIiAgKGNoZWNrIERFU1RESVIgc3VwcG9ydCkiOyBcCisJICAgICAgICBmaSA7IFwKKwkgICAgICAgICQoZGlzdHVuaW5zdGFsbGNoZWNrX2xpc3RmaWxlcykgOyBcCisJICAgICAgICBleGl0IDE7IH0gPiYyCitkaXN0Y2xlYW5jaGVjazogZGlzdGNsZWFuCisJQGlmIHRlc3QgJyQoc3JjZGlyKScgPSAuIDsgdGhlbiBcCisJICBlY2hvICJFUlJPUjogZGlzdGNsZWFuY2hlY2sgY2FuIG9ubHkgcnVuIGZyb20gYSBWUEFUSCBidWlsZCIgOyBcCisJICBleGl0IDEgOyBcCisJZmkKKwlAdGVzdCBgJChkaXN0Y2xlYW5jaGVja19saXN0ZmlsZXMpIHwgd2MgLWxgIC1lcSAwIFwKKwkgIHx8IHsgZWNobyAiRVJST1I6IGZpbGVzIGxlZnQgaW4gYnVpbGQgZGlyZWN0b3J5IGFmdGVyIGRpc3RjbGVhbjoiIDsgXAorCSAgICAgICAkKGRpc3RjbGVhbmNoZWNrX2xpc3RmaWxlcykgOyBcCisJICAgICAgIGV4aXQgMTsgfSA+JjIKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1yZWN1cnNpdmUKK2FsbC1hbTogTWFrZWZpbGUgJChEQVRBKQoraW5zdGFsbGRpcnM6IGluc3RhbGxkaXJzLXJlY3Vyc2l2ZQoraW5zdGFsbGRpcnMtYW06CisJZm9yIGRpciBpbiAiJChERVNURElSKSQocGNkaXIpIjsgZG8gXAorCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAorCWRvbmUKK2luc3RhbGw6IGluc3RhbGwtcmVjdXJzaXZlCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1yZWN1cnNpdmUKK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZQordW5pbnN0YWxsOiB1bmluc3RhbGwtcmVjdXJzaXZlCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZQoraW5zdGFsbC1zdHJpcDoKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKKwkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKKwktdGVzdCAteiAiJChNQUlOVEFJTkVSQ0xFQU5GSUxFUykiIHx8IHJtIC1mICQoTUFJTlRBSU5FUkNMRUFORklMRVMpCitjbGVhbjogY2xlYW4tcmVjdXJzaXZlCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tcmVjdXJzaXZlCisJLXJtIC1mICQoYW1fX0NPTkZJR19ESVNUQ0xFQU5fRklMRVMpCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIFwKKwlkaXN0Y2xlYW4tdGFncworCitkdmk6IGR2aS1yZWN1cnNpdmUKKworZHZpLWFtOgorCitodG1sOiBodG1sLXJlY3Vyc2l2ZQorCitpbmZvOiBpbmZvLXJlY3Vyc2l2ZQorCitpbmZvLWFtOgorCitpbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtcGNEQVRBCisKK2luc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1yZWN1cnNpdmUKKworaW5zdGFsbC1leGVjLWFtOgorCitpbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1yZWN1cnNpdmUKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tcmVjdXJzaXZlCisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtcmVjdXJzaXZlCisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtcmVjdXJzaXZlCisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUKKwktcm0gLWYgJChhbV9fQ09ORklHX0RJU1RDTEVBTl9GSUxFUykKKwktcm0gLXJmICQodG9wX3NyY2RpcikvYXV0b200dGUuY2FjaGUKKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLXJlY3Vyc2l2ZQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLXJlY3Vyc2l2ZQorCitwZGYtYW06CisKK3BzOiBwcy1yZWN1cnNpdmUKKworcHMtYW06CisKK3VuaW5zdGFsbC1hbTogdW5pbnN0YWxsLXBjREFUQQorCisuTUFLRTogJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUykgJChSRUNVUlNJVkVfVEFSR0VUUykgaW5zdGFsbC1hbSBcCisJaW5zdGFsbC1zdHJpcAorCisuUEhPTlk6ICQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpICQoUkVDVVJTSVZFX1RBUkdFVFMpIENUQUdTIEdUQUdTIFwKKwlhbGwgYWxsLWFtIGFtLS1yZWZyZXNoIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAorCWNsZWFuLWxpYnRvb2wgY3RhZ3MgY3RhZ3MtcmVjdXJzaXZlIGRpc3QgZGlzdC1hbGwgZGlzdC1iemlwMiBcCisJZGlzdC1nemlwIGRpc3Qtc2hhciBkaXN0LXRhclogZGlzdC16aXAgZGlzdGNoZWNrIGRpc3RjbGVhbiBcCisJZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgXAorCWRpc3RjbGVhbmNoZWNrIGRpc3RkaXIgZGlzdHVuaW5zdGFsbGNoZWNrIGR2aSBkdmktYW0gaHRtbCBcCisJaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCisJaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBcCisJaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIFwKKwlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1wY0RBVEEgaW5zdGFsbC1wZGYgXAorCWluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBpbnN0YWxsLXN0cmlwIFwKKwlpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIGluc3RhbGxkaXJzLWFtIFwKKwltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBcCisJbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAorCXRhZ3MgdGFncy1yZWN1cnNpdmUgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSB1bmluc3RhbGwtcGNEQVRBCisKKworIyBUaGlzIGlzIGJlc3Qgbm90IGRvbmUgdmlhIGNvbmZpZ3VyZS5hYywgYmVjYXVzZSBhdXRvbWFrZSdzCisjIG1ha2UgZGlzdGNoZWNrIHRhcmdldCBkb2VzIG5vdCBsaWtlIGF1dG8tZ2VuZXJhdGVkIGZpbGVzCisjIGJlaW5nIGluY2x1ZGVkIGluIHRoZSBkaXN0cmlidXRlZCBhcmNoaXZlLgorcGFydGVkLnNwZWM6IHBhcnRlZC5zcGVjLmluCisJc2VkICdzL0AnJ1BBQ0tBR0VALyQoUEFDS0FHRSkvO3MvQCcnVkVSU0lPTkAvJChWRVJTSU9OKS8nICQ8ID4gJEAtdG1wCisJbXYgJEAtdG1wICRACisKK2Rpc3RjaGVjay1ob29rOgorCSQoTUFLRSkgbXktZGlzdGNoZWNrCisKK2N1cnJlbnRfc3ltYm9scy50eHQ6ICR7ZXh0cmFjdF9zeW12ZXJzfQorCSAgLUAoc2ggJHtleHRyYWN0X3N5bXZlcnN9IGxpYnBhcnRlZC8ubGlicy9saWJwYXJ0ZWQuc28gY3VycmVudF9zeW1ib2xzLnR4dCkKKworYmFzZWxpbmVfc3ltYm9sczoKKwktQChvdXRwdXQ9JHtiYXNlbGluZV9maWxlfTsgXAorCSAgaWYgdGVzdCAhIC1mICQke291dHB1dH07IHRoZW4gXAorCSAgICBlY2hvICJCYXNlbGluZSBmaWxlIGRvZXNuJ3QgZXhpc3QuIjsgXAorCSAgICBlY2hvICJUcnkgJ21ha2UgbmV3LWFiaS1iYXNlbGluZScgdG8gY3JlYXRlIGl0LiI7IFwKKwkgICAgZXhpdCAxOyBcCisJICBmaTsgdHJ1ZSkKKworbmV3LWFiaS1iYXNlbGluZToKKwktQCQobWtpbnN0YWxsZGlycykgJHtiYXNlbGluZV9kaXJ9CisJLUAob3V0cHV0PSR7YmFzZWxpbmVfZmlsZX07IFwKKwkgIGlmIHRlc3QgLWYgJCR7b3V0cHV0fTsgdGhlbiBcCisJICAgIG91dHB1dD0kJHtvdXRwdXR9Lm5ldzsgXAorCSAgICB0PWBlY2hvICQke291dHB1dH0gfCBzZWQgJ3M9Lipjb25maWcvYWJpLz09J2A7IFwKKwkgICAgZWNobyAiQmFzZWxpbmUgZmlsZSBhbHJlYWR5IGV4aXN0cywgd3JpdGluZyB0byAkJHt0fSBpbnN0ZWFkLiI7IFwKKwkgIGZpOyBcCisJICBzaCAke2V4dHJhY3Rfc3ltdmVyc30gbGlicGFydGVkLy5saWJzL2xpYnBhcnRlZC5zbyAkJHtvdXRwdXR9KQorCisjIFVzZSAnbmV3LWFiaS1iYXNlbGluZScgdG8gY3JlYXRlIGFuIGluaXRpYWwgc3ltYm9sIGZpbGUuICBUaGVuIHJ1bgorIyAnY2hlY2stYWJpJyB0byB0ZXN0IGZvciBjaGFuZ2VzIGFnYWluc3QgdGhhdCBmaWxlLgorY2hlY2stYWJpOiBiYXNlbGluZV9zeW1ib2xzIGN1cnJlbnRfc3ltYm9scy50eHQKKwlAZGlmZiAtdSAke2Jhc2VsaW5lX2ZpbGV9IC4vY3VycmVudF9zeW1ib2xzLnR4dCAyPiYxIFwKKyAgICAgICAgIHwgdGVlIGxpYnBhcnRlZC5hYmktZGlmZgorCUB0ZXN0IGB3YyAtbCA8IGxpYnBhcnRlZC5hYmktZGlmZmAgLWd0IDAgXAorICAgICAgICAgJiYgKGVjaG8gIkFCSSBoYXMgY2hhbmdlZC4gUGxlYXNlLCB1cGRhdGUgeW91IEFCSSBwYWNrYWdlIHZlcnNpb24uIjsgZXhpdCAxKSBcCisgICAgICAgICB8fCBleGl0IDAKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9NYWtlZmlsZS5tYWludCBiL3BhcnRlZC0xLjguNy9NYWtlZmlsZS5tYWludApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2I3MzcwCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L01ha2VmaWxlLm1haW50CkBAIC0wLDAgKzEsNjIwIEBACisjIC0qLU1ha2VmaWxlLSotCisKKyMjIENvcHlyaWdodCAoQykgMjAwMS0yMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyMKKyMjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyMgYW55IGxhdGVyIHZlcnNpb24uCisjIworIyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMjCisjIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyMjIDAyMTEwLTEzMDEsIFVTQS4KKworIyBUaGlzIGlzIHJlcG9ydGVkIG5vdCB0byB3b3JrIHdpdGggbWFrZS0zLjc5LjEKKyMgTUUgOj0gJCh3b3JkICQod29yZHMgJChNQUtFRklMRV9MSVNUKSksJChNQUtFRklMRV9MSVNUKSkKK01FIDo9IE1ha2VmaWxlLm1haW50CisKKyMgRG8gbm90IHNhdmUgdGhlIG9yaWdpbmFsIG5hbWUgb3IgdGltZXN0YW1wIGluIHRoZSAudGFyLmd6IGZpbGUuCisjIFVzZSAtLXJzeW5jYWJsZSBpZiBhdmFpbGFibGUuCitnemlwX3JzeW5jYWJsZSA6PSBcCisgICQoc2hlbGwgZ3ppcCAtLWhlbHAgMj4vZGV2L251bGx8Z3JlcCByc3luY2FibGUgPi9kZXYvbnVsbCAmJiBlY2hvIC0tcnN5bmNhYmxlKQorR1pJUF9FTlYgPSAnLS1uby1uYW1lIC0tYmVzdCAkKGd6aXBfcnN5bmNhYmxlKScKKworQ1ZTID0gY3ZzCitHSVQgPSBnaXQKK1ZDID0gJChHSVQpCitWQy10YWcgPSBnaXQtdGFnIC1zIC1tICckKFZFUlNJT04pJworCitDVlNfTElTVCA9IGJ1aWxkLWF1eC92Yy1saXN0LWZpbGVzCisKK0NWU19MSVNUX0VYQ0VQVCA9IFwKKyAgJChDVlNfTElTVCkgfCBpZiB0ZXN0IC1mIC54LSRAOyB0aGVuIGdyZXAgLXZFZiAueC0kQDsgZWxzZSBncmVwIC12IENoYW5nZUxvZzsgZmkKKworaWZlcSAoJChvcmlnaW4gcHJldl92ZXJzaW9uX2ZpbGUpLCB1bmRlZmluZWQpCisgIHByZXZfdmVyc2lvbl9maWxlID0gLnByZXYtdmVyc2lvbgorZW5kaWYKKworUFJFVl9WRVJTSU9OIDo9ICQoc2hlbGwgY2F0ICQocHJldl92ZXJzaW9uX2ZpbGUpKQorVkVSU0lPTl9SRUdFWFAgPSAkKHN1YnN0IC4sXC4sJChWRVJTSU9OKSkKKwordGFnLXBhY2thZ2UgPSAkKHNoZWxsIGVjaG8gIiQoUEFDS0FHRSkiIHwgdHIgJ1s6bG93ZXI6XScgJ1s6dXBwZXI6XScpCit0YWctdGhpcy12ZXJzaW9uID0gJChzdWJzdCAuLF8sJChWRVJTSU9OKSkKK3RoaXMtdmMtdGFnID0gJCh0YWctcGFja2FnZSktJCh0YWctdGhpcy12ZXJzaW9uKQorbXlfZGlzdGRpciA9ICQoUEFDS0FHRSktJChWRVJTSU9OKQorCisjIE9sZCByZWxlYXNlcyBhcmUgc3RvcmVkIGhlcmUuCisjIFVzZWQgZm9yIGRpZmZzIGFuZCB4ZGVsdGFzLgorcmVsZWFzZV9hcmNoaXZlX2RpciA/PSAuLi9yZWxlYXNlCisKKyMgUHJldmVudCBwcm9ncmFtcyBsaWtlICdzb3J0JyBmcm9tIGNvbnNpZGVyaW5nIGRpc3RpbmN0IHN0cmluZ3MgdG8gYmUgZXF1YWwuCisjIERvaW5nIGl0IGhlcmUgc2F2ZXMgdXMgZnJvbSBoYXZpbmcgdG8gc2V0IExDX0FMTCBlbHNld2hlcmUgaW4gdGhpcyBmaWxlLgorZXhwb3J0IExDX0FMTCA9IEMKKworCisKKyMjIC0tLS0tLS0tLS0tLS0tLSAjIworIyMgU2FuaXR5IGNoZWNrcy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0gIyMKKworIyBGSVhNRTogYWRkIGEgY2hlY2sgdG8gcHJvaGliaXQgZGVmaW5pdGlvbiBpbiBzcmMvKi5jIG9mIHN5bWJvbHMgZGVmaW5lZAorIyBpbiBzeXN0ZW0uaC4gIEUuZy4gdG9kYXkgSSByZW1vdmVkIGZyb20gdGFpbC5jIGEgdXNlbGVzcyBkZWZpbml0aW9uIG9mCisjIEVOT1NZUy4gIEl0IHdhcyB1c2VsZXNzIGJlY2F1c2Ugc3lzdGVtLmggZW5zdXJlcyBpdCdzIGRlZmluZWQuCisKKyMgQ29sbGVjdCB0aGUgbmFtZXMgb2YgcnVsZXMgc3RhcnRpbmcgd2l0aCBgc2NfJy4KK3N5bnRheC1jaGVjay1ydWxlcyA6PSAkKHNoZWxsIHNlZCAtbiAncy9eXChzY19bYS16QS1aMC05Xy1dKlwpOi4qL1wxL3AnICQoTUUpKQorLlBIT05ZOiAkKHN5bnRheC1jaGVjay1ydWxlcykKKworIyBDaGVja3MgdGhhdCBkb24ndCByZXF1aXJlIGN2cy4KKyMgUnVuIGBjaGFuZ2Vsb2ctY2hlY2snIGxhc3QsIGFzIHByZXZpb3VzIHRlc3QgbWF5IHJldmVhbCBwcm9ibGVtcyByZXF1aXJpbmcKKyMgbmV3IENoYW5nZUxvZyBlbnRyaWVzLgorbG9jYWwtY2hlY2tzLWF2YWlsYWJsZSA9IFwKKyAgcG8tY2hlY2sgY29weXJpZ2h0LWNoZWNrIG00LWNoZWNrIGF1dGhvcl9tYXJrX2NoZWNrIFwKKyAgY2hhbmdlbG9nLWNoZWNrIHBhdGNoLWNoZWNrIHN0cmZ0aW1lLWNoZWNrICQoc3ludGF4LWNoZWNrLXJ1bGVzKSBcCisgIG1ha2VmaWxlX3BhdGhfc2VwYXJhdG9yX2NoZWNrIFwKKyAgbWFrZWZpbGUtY2hlY2sgY2hlY2stQVVUSE9SUworLlBIT05ZOiAkKGxvY2FsLWNoZWNrcy1hdmFpbGFibGUpCisKK2xvY2FsLWNoZWNrIDo9ICQoZmlsdGVyLW91dCAkKGxvY2FsLWNoZWNrcy10by1za2lwKSwgJChsb2NhbC1jaGVja3MtYXZhaWxhYmxlKSkKKworc3ludGF4LWNoZWNrOiAkKGxvY2FsLWNoZWNrKQorIwlAZ3JlcCAtbkUgJyMgICppbmNsdWRlIDwobGltaXRzfHN0ZChkZWZ8YXJnfGJvb2wpKVwuaD4nCQlcCisjCSAgICAkJChmaW5kIC10eXBlIGYgLW5hbWUgJyouW2NobHldJykgJiYJCQlcCisjCSAgeyBlY2hvICckKE1FKTogZm91bmQgY29uZGl0aW9uYWwgaW5jbHVkZScgMT4mMjsJCVwKKyMJICAgIGV4aXQgMTsgfSB8fCA6CisKKyMJZ3JlcCAtbkUgJ14jICAqaW5jbHVkZSA8KHN0cmluZ3xzdGRsaWIpXC5oPicJCQlcCisjCSAgICAkKHNyY2Rpcikve2xpYixzcmN9LyouW2NoeV0gJiYJCQkJXAorIwkgIHsgZWNobyAnJChNRSk6IEZJWE1FJyAxPiYyOwkJCQkJXAorIwkgICAgZXhpdCAxOyB9IHx8IDoKKyMgRklYTUU6IGRvbid0IGFsbG93IGAjaW5jbHVkZSAuc3RyaW5nc1wuaCcgYW55d2hlcmUKKworc2NfY2FzdF9vZl9hcmd1bWVudF90b19mcmVlOgorCUBncmVwIC1uRSAnXDxmcmVlIFwoXCgnICQkKCQoQ1ZTX0xJU1RfRVhDRVBUKSkgJiYJCVwKKwkgIHsgZWNobyAnJChNRSk6IGRvbidcJyd0IGNhc3QgZnJlZSBhcmd1bWVudCcgMT4mMjsJCVwKKwkgICAgZXhpdCAxOyB9IHx8IDoKKworc2NfY2FzdF9vZl94X2FsbG9jX3JldHVybl92YWx1ZToKKwlAZ3JlcCAtbkUgJ1wqXCkgKngobXxjfHJlKWFsbG9jXD4nICQkKCQoQ1ZTX0xJU1RfRVhDRVBUKSkgJiYJXAorCSAgeyBlY2hvICckKE1FKTogZG9uJ1wnJ3QgY2FzdCB4KmFsbG9jIHJldHVybiB2YWx1ZScgMT4mMjsJXAorCSAgICBleGl0IDE7IH0gfHwgOgorCitzY19jYXN0X29mX2FsbG9jYV9yZXR1cm5fdmFsdWU6CisJQGdyZXAgLW5FICdcKlwpICphbGxvY2FcPicgJCQoJChDVlNfTElTVF9FWENFUFQpKSAmJgkJXAorCSAgeyBlY2hvICckKE1FKTogZG9uJ1wnJ3QgY2FzdCBhbGxvY2EgcmV0dXJuIHZhbHVlJyAxPiYyOwlcCisJICAgIGV4aXQgMTsgfSB8fCA6CisKK3NjX3NwYWNlX3RhYjoKKwlAZ3JlcCAtbiAnWyBdCScgJCQoJChDVlNfTElTVF9FWENFUFQpKSAmJgkJCVwKKwkgIHsgZWNobyAnJChNRSk6IGZvdW5kIFNQQUNFLVRBQiBzZXF1ZW5jZTsgcmVtb3ZlIHRoZSBTUEFDRScJXAorCQkxPiYyOyBleGl0IDE7IH0gfHwgOgorCisjIERvbid0IHVzZSB0aGUgb2xkIGF0byogZnVuY3Rpb25zIGluIGByZWFsJyBjb2RlLgorIyBUaGV5IHByb3ZpZGUgbm8gZXJyb3IgY2hlY2tpbmcgbWVjaGFuaXNtLgorIyBJbnN0ZWFkLCB1c2Ugc3RydG8qIGZ1bmN0aW9ucy4KK3NjX3Byb2hpYml0X2F0b2lfYXRvZjoKKwlAZ3JlcCAtbkUgJ1w8YXRvKFtmaWxxXXxsbClcPicgJCQoJChDVlNfTElTVF9FWENFUFQpKSAmJglcCisJICB7IGVjaG8gJyQoTUUpOiBkbyBub3QgdXNlIGF0bycnZiwgYXRvJydpLCBhdG8nJ2wsIGF0bycnbGwsIG9yIGF0bycncScJXAorCQkxPiYyOyBleGl0IDE7IH0gfHwgOgorCisjIFVzaW5nIEVYSVRfU1VDQ0VTUyBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gZXJyb3IgaXMgbWlzbGVhZGluZywKKyMgc2luY2Ugd2hlbiB0aGF0IHBhcmFtZXRlciBpcyAwLCBlcnJvciBkb2VzIG5vdCBleGl0LiAgVXNlIGAwJyBpbnN0ZWFkLgorc2NfZXJyb3JfZXhpdF9zdWNjZXNzOgorCUBncmVwIC1uRiAnZXJyb3IgKEVYSVRfU1VDQ0VTUywnCQkJCVwKKwkgICAgJCQoZmluZCAtdHlwZSBmIC1uYW1lICcqLltjaGx5XScpICYmCQkJXAorCSAgeyBlY2hvICckKE1FKTogZm91bmQgZXJyb3IgKEVYSVRfU1VDQ0VTUycgMT4mMjsJCVwKKwkgICAgZXhpdCAxOyB9IHx8IDoKKworc2NfZmlsZV9zeXN0ZW06CisJQGdyZXAgLW5pICdmaWxlJydzeXN0ZW0nICQkKCQoQ1ZTX0xJU1RfRVhDRVBUKSkgJiYJCVwKKwkgIHsgZWNobyAnJChNRSk6IGZvdW5kIHVzZSBvZiAiZmlsZScnc3lzdGVtIjsnCQkJXAorCSAgICAncmV3cml0ZSB0byB1c2UgImZpbGUgc3lzdGVtIicgMT4mMjsJCQlcCisJICAgIGV4aXQgMTsgfSB8fCA6CisKK3NjX25vX2hhdmVfY29uZmlnX2g6CisJQGdyZXAgLW4gJ0hBVkUnJ19DT05GSUdfSCcgJCQoJChDVlNfTElTVF9FWENFUFQpKSAmJgkJXAorCSAgeyBlY2hvICckKE1FKTogZm91bmQgdXNlIG9mIEhBVkUnJ19DT05GSUdfSDsgcmVtb3ZlJwkJXAorCQkxPiYyOyBleGl0IDE7IH0gfHwgOgorCisjIE5lYXJseSBhbGwgLmMgZmlsZXMgbXVzdCBpbmNsdWRlIDxjb25maWcuaD4uCitzY19yZXF1aXJlX2NvbmZpZ19oOgorCUBpZiAkKENWU19MSVNUX0VYQ0VQVCkgfCBncmVwICdcLmMkJCcgPiAvZGV2L251bGw7IHRoZW4JCVwKKwkgIGdyZXAgLUwgJ14jICppbmNsdWRlIDxjb25maWdcLmg+JwkJCQlcCisJCSQkKCQoQ1ZTX0xJU1RfRVhDRVBUKSB8IGdyZXAgJ1wuYyQkJykJCQlcCisJICAgICAgfCBncmVwIC4gJiYJCQkJCQlcCisJICB7IGVjaG8gJyQoTUUpOiB0aGUgYWJvdmUgZmlsZXMgZG8gbm90IGluY2x1ZGUgPGNvbmZpZy5oPicJXAorCQkxPiYyOyBleGl0IDE7IH0gfHwgOjsJCQkJCVwKKwllbHNlIDo7CQkJCQkJCQlcCisJZmkKKworIyBQcm9oaWJpdCB0aGUgaW5jbHVzaW9uIG9mIGFzc2VydC5oIHdpdGhvdXQgYW4gYWN0dWFsIHVzZSBvZiBhc3NlcnQuCitzY19wcm9oaWJpdF9hc3NlcnRfd2l0aG91dF91c2U6CisJQGlmICQoQ1ZTX0xJU1RfRVhDRVBUKSB8IGdyZXAgJ1wuYyQkJyA+IC9kZXYvbnVsbDsgdGhlbgkJXAorCSAgZmlsZXM9JCQoZ3JlcCAtbCAnIyAqaW5jbHVkZSA8YXNzZXJ0XC5oPicJCQlcCisJCSAgICAkJCgkKENWU19MSVNUX0VYQ0VQVCkgfCBncmVwICdcLmMkJCcpKSAmJgkJXAorCSAgZ3JlcCAtTCAnXDxhc3NlcnQgKCcgJCRmaWxlcwkJCQkJXAorCSAgICAgIHwgZ3JlcCAuICYmCQkJCQkJXAorCSAgICB7IGVjaG8gIiQoTUUpOiB0aGUgYWJvdmUgZmlsZXMgaW5jbHVkZSA8YXNzZXJ0Lmg+IGJ1dCBkb24ndCB1c2UgaXQiIFwKKwkJICAxPiYyOyBleGl0IDE7IH0gfHwgOjsJCQkJCVwKKwllbHNlIDo7CQkJCQkJCQlcCisJZmkKKworc2Nfb2Jzb2xldGVfc3ltYm9sczoKKwlAZ3JlcCAtbkUgJ1w8KEhBVkUnJ19GQ05UTF9IfE8nJ19OREVMQVkpXD4nCQkJXAorCSAgICAgJCQoJChDVlNfTElTVF9FWENFUFQpKSAmJgkJCQkJXAorCSAgeyBlY2hvICckKE1FKTogZG8gbm90IHVzZSBIQVZFJydfRkNOVExfSCBvciBPJydfTkRFTEFZJwlcCisJCTE+JjI7IGV4aXQgMTsgfSB8fCA6CisKKyMgRklYTUU6IHdhcm4gYWJvdXQgZGVmaW5pdGlvbnMgb2YgRVhJVF9GQUlMVVJFLCBFWElUX1NVQ0NFU1MsIFNUUkVRCisKKyMgRWFjaCBub25lbXB0eSBsaW5lIG11c3Qgc3RhcnQgd2l0aCBhIHllYXIgbnVtYmVyLCBvciBhIFRBQi4KK3NjX2NoYW5nZWxvZzoKKwlAZ3JlcCAtbiAnXlteMTIJXScgJCQoZmluZCAuIC1tYXhkZXB0aCAyIC1uYW1lIENoYW5nZUxvZykgJiYJXAorCSAgeyBlY2hvICckKE1FKTogZm91bmQgdW5leHBlY3RlZCBwcmVmaXggaW4gYSBDaGFuZ2VMb2cnIDE+JjI7CVwKKwkgICAgZXhpdCAxOyB9IHx8IDoKKworIyBFbnN1cmUgdGhhdCBkZCdzIGRlZmluaXRpb24gb2YgTE9OR0VTVF9TWU1CT0wgc3RheXMgaW4gc3luYworIyB3aXRoIHRoZSBzdHJpbmdzIGZyb20gdGhlIHR3byBhZmZlY3RlZCB2YXJpYWJsZXMuCitkZF9jID0gJChzcmNkaXIpL3NyYy9kZC5jCitzY19kZF9tYXhfc3ltX2xlbmd0aDoKK2lmbmVxICgkKHdpbGRjYXJkICQoZGRfYykpLCkKKwlAbGVuPSQkKCAoc2VkIC1uICcvY29udmVyc2lvbnNcW1xdID0kJC8sL159Oy9wJyAkKGRkX2MpO1wKKwkJIHNlZCAtbiAnL2ZsYWdzXFtcXSA9JCQvLC9efTsvcCcgJChkZF9jKSApCVwKKwkJfHNlZCAtbiAnLyIvcy9eW14iXSoiXChbXiJdKlwpIi4qL1wxL3AnCQlcCisJICAgICAgfCB3YyAtLW1heC1saW5lLWxlbmd0aCk7CQkJCVwKKwltYXg9JCQoc2VkIC1uICcvXiNkZWZpbmUgTE9OR0VTVF9TWU1CT0wgL3MvLy9wJyAkKGRkX2MpCVwKKwkgICAgICB8dHIgLWQgJyInIHwgd2MgLS1tYXgtbGluZS1sZW5ndGgpOwkJXAorCWlmIHRlc3QgIiQkbGVuIiA9ICIkJG1heCI7IHRoZW4gOjsgZWxzZQkJCVwKKwkgIGVjaG8gJ2RkLmM6IExPTkdFU1RfU1lNQk9MIGlzIG5vdCBsb25nZXN0JyAxPiYyOwlcCisJICBleGl0IDE7CQkJCQkJXAorCWZpCitlbmRpZgorCisjIE1hbnkgbTQgbWFjcm9zIG5hbWVzIG9uY2UgYmVnYW4gd2l0aCBgam1fJy4KKyMgT24gMjAwNC0wNC0xMywgdGhleSB3ZXJlIGFsbCBjaGFuZ2VkIHRvIHN0YXJ0IHdpdGggZ2xfIGluc3RlYWQuCisjIE1ha2Ugc3VyZSB0aGF0IG5vbmUgYXJlIGluYWR2ZXJ0ZW50bHkgcmVpbnRyb2R1Y2VkLgorc2NfcHJvaGliaXRfam1faW5fbTQ6CisJQGdyZXAgLW5FICdqbV9bQS1aXScJCQkJCVwKKwkJJCQoJChDVlNfTElTVCkgbTQgfGdyZXAgJ1wubTQkJCc7IGVjaG8gL2Rldi9udWxsKSAmJiBcCisJICAgIHsgZWNobyAnJChNRSk6IGRvIG5vdCB1c2Ugam1fIGluIG00IG1hY3JvIG5hbWVzJwlcCisJICAgICAgMT4mMjsgZXhpdCAxOyB9IHx8IDoKKworc2Nfcm9vdF90ZXN0czoKKwlAaWYgdGVzdCAtZCB0ZXN0cyBcCisJICAgICAgJiYgZ3JlcCBjaGVjay1yb290IHRlc3RzL01ha2VmaWxlLmFtPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKKwl0MT1zYy1yb290LmV4cGVjdGVkOyB0Mj1zYy1yb290LmFjdHVhbDsJCQkJXAorCWdyZXAgLW5sICdeUFJJVl9DSEVDS19BUkc9cmVxdWlyZS1yb290JwkJCQlcCisJICAkJCgkKENWU19MSVNUKSB0ZXN0cykgfHNlZCBzLHRlc3RzLC4sIHxzb3J0ID4gJCR0MTsJCVwKKwlzZWQgLW4gJ3MsCWNkIFwoW14gXSpcKSAuKk1BS0UuLmNoZWNrIFRFU1RTPVwoLipcKSwuL1wxL1wyLHAnIFwKKwkgICQoc3JjZGlyKS90ZXN0cy9NYWtlZmlsZS5hbSB8c29ydCA+ICQkdDI7CQkJXAorCWRpZmYgLXUgJCR0MSAkJHQyIHx8IGRpZmY9MTsJCQkJCVwKKwlybSAtZiAkJHQxICQkdDI7CQkJCQkJXAorCXRlc3QgIiQkZGlmZiIJCQkJCQkJXAorCSAgJiYgeyBlY2hvICd0ZXN0cy9NYWtlZmlsZS5hbTogbWlzc2luZyBjaGVjay1yb290IGFjdGlvbic+JjI7CVwKKwkgICAgICAgZXhpdCAxOyB9IHx8IDo7CQkJCQkJXAorCWZpCisKK2hlYWRlcnNfd2l0aF9pbnRlcmVzdGluZ19tYWNyb19kZWZzID0gXAorICBleGl0LmgJXAorICBmY250bF8uaAlcCisgIGZubWF0Y2hfLmgJXAorICBpbnRwcm9wcy5oCVwKKyAgaW50dHlwZXNfLmgJXAorICBsY2hvd24uaAlcCisgIG9wZW5hdC5oCVwKKyAgc3RhdC1tYWNyb3MuaAlcCisgIHN0ZGludF8uaAorCisjIENyZWF0ZSBhIGxpc3Qgb2YgcmVndWxhciBleHByZXNzaW9ucyBtYXRjaGluZyB0aGUgbmFtZXMKKyMgb2YgbWFjcm9zIHRoYXQgYXJlIGd1YXJhbnRlZWQgYnkgcGFydHMgb2YgZ251bGliIHRvIGJlIGRlZmluZWQuCisucmUtZGVmbWFjOgorCUAoY2QgJChzcmNkaXIpL2xpYjsJCQkJCQlcCisJICBmb3IgZiBpbiAkKGhlYWRlcnNfd2l0aF9pbnRlcmVzdGluZ19tYWNyb19kZWZzKTsgZG8JCVwKKwkgICAgdGVzdCAtZiAkJGYgJiYJCQkJCQlcCisJICAgICAgc2VkIC1uICcvXiMgKmRlZmluZSBcKFteXyAoXVteIChdKlwpWyAoXS4qL3MvL1wxL3AnICQkZjsJXAorCSAgIGRvbmU7CQkJCQkJCVwKKwkgKSB8IHNvcnQgLXUJCQkJCQkJXAorCSAgIHwgZ3JlcCAtRXYgJ0FUVFJJQlVURV9OT1JFVFVSTnxTSVpFX01BWCcJCQlcCisJICAgfCBzZWQgJ3MvXi9eIyAqZGVmaW5lIC8nCQkJCQlcCisJICA+ICRALXQKKwlAbXYgJEAtdCAkQAorCisjIERvbid0IGRlZmluZSBtYWNyb3MgdGhhdCB3ZSBhbHJlYWR5IGdldCBmcm9tIGdudWxpYiBoZWFkZXIgZmlsZXMuCitzY19hbHdheXNfZGVmaW5lZF9tYWNyb3M6IC5yZS1kZWZtYWMKKwlAaWYgdGVzdCAtZiAkKHNyY2Rpcikvc3JjL3N5c3RlbS5oOyB0aGVuCQkJXAorCSAgdHJhcCAncmM9JCQ/OyBybSAtZiAucmUtZGVmbWFjOyBleGl0ICQkcmMnIDAgMSAyIDMgMTU7CVwKKwkgIGdyZXAgLWYgLnJlLWRlZm1hYyAkJCgkKENWU19MSVNUKSkJCQkJXAorCSAgICAmJiB7IGVjaG8gJyQoTUUpOiBkZWZpbmUgdGhlIGFib3ZlIHZpYSBzb21lIGdudWxpYiAuaCBmaWxlJwlcCisJCSAgMT4mMjsgIGV4aXQgMTsgfSB8fCA6OwkJCQlcCisJZmkKKworIyBDcmVhdGUgYSBsaXN0IG9mIHJlZ3VsYXIgZXhwcmVzc2lvbnMgbWF0Y2hpbmcgdGhlIG5hbWVzCisjIG9mIGZpbGVzIGluY2x1ZGVkIGZyb20gc3lzdGVtLmguICBFeGNsdWRlIGEgY291cGxlLgorLnJlLWxpc3Q6CisJQHNlZCAtbiAnL14jICppbmNsdWRlIC9zLy8vcCcgJChzcmNkaXIpL3NyYy9zeXN0ZW0uaCBcCisJICB8IGdyZXAgLUV2ICdzeXMvKHBhcmFtfGZpbGUpXC5oJyBcCisJICB8IHNlZCAncy8gLiovLzs7cy9eWyI8XS9eIyAqaW5jbHVkZSBbPCJdLztzL1wuaFsiPl0kJC9cXC5oWyI+XS8nIFwKKwkgID4gJEAtdAorCUBtdiAkQC10ICRACisKKyMgRmlsZXMgaW4gc3JjLyBzaG91bGQgbm90IGluY2x1ZGUgZGlyZWN0bHkgYW55IG9mCisjIHRoZSBoZWFkZXJzIGFscmVhZHkgaW5jbHVkZWQgdmlhIHN5c3RlbS5oLgorc2Nfc3lzdGVtX2hfaGVhZGVyczogLnJlLWxpc3QKKwlAaWYgdGVzdCAtZiAkKHNyY2Rpcikvc3JjL3N5c3RlbS5oOyB0aGVuCQkJXAorCSAgdHJhcCAncmM9JCQ/OyBybSAtZiAucmUtbGlzdDsgZXhpdCAkJHJjJyAwIDEgMiAzIDE1OwkJXAorCSAgZ3JlcCAtbkUgLWYgLnJlLWxpc3QJCQkJCQlcCisJICAgICAgJCQoJChDVlNfTElTVCkgc3JjIHwJCQkJCVwKKwkJIGdyZXAgLUV2ICcoKGNvcHl8c3lzdGVtKVwuaHxwYXJzZS1ncmFtXC5jKSQkJykJCVwKKwkgICAgJiYgeyBlY2hvICckKE1FKTogdGhlIGFib3ZlIGFyZSBhbHJlYWR5IGluY2x1ZGVkIHZpYSBzeXN0ZW0uaCdcCisJCSAgMT4mMjsgIGV4aXQgMTsgfSB8fCA6OwkJCQlcCisJZmkKKworc2Nfc3VuX29zX25hbWVzOgorCUBncmVwIC1uRWkgXAorCSAgICAnc29sYXJpc1teWzphbG51bTpdXSoyXC4oN3w4fDl8WzEtOV1bMC05XSl8c3Vub3NbXls6YWxudW06XV1bNi05XScgXAorCSAgICAkJCgkKENWU19MSVNUX0VYQ0VQVCkpICYmCQkJCQlcCisJICB7IGVjaG8gJyQoTUUpOiBmb3VuZCBtaXN1c2Ugb2YgU3VuIE9TIHZlcnNpb24gbnVtYmVycycgMT4mMjsJXAorCSAgICBleGl0IDE7IH0gfHwgOgorCitzY190aGVfdGhlOgorCUBncmVwIC1uaSAnXDx0aGUgJyd0aGVcPicgJCQoJChDVlNfTElTVF9FWENFUFQpKSAmJgkJXAorCSAgeyBlY2hvICckKE1FKTogZm91bmQgdXNlIG9mICJ0aGUgJyd0aGUiOycgMT4mMjsJCVwKKwkgICAgZXhpdCAxOyB9IHx8IDoKKworc2NfdGlnaHRfc2NvcGU6CisJJChNQUtFKSAtQyBwYXJ0ZWQgJEAKKworc2NfdHJhaWxpbmdfYmxhbms6CisJQGdyZXAgLW4gJ1sJIF0kJCcgJCQoJChDVlNfTElTVF9FWENFUFQpKSAmJgkJCVwKKwkgIHsgZWNobyAnJChNRSk6IGZvdW5kIHRyYWlsaW5nIGJsYW5rKHMpJwkJCVwKKwkJMT4mMjsgZXhpdCAxOyB9IHx8IDoKKworIyBNYXRjaCBsaW5lcyBsaWtlIHRoZSBmb2xsb3dpbmcsIGJ1dCB3aGVyZSB0aGVyZSBpcyBvbmx5IG9uZSBzcGFjZQorIyBiZXR3ZWVuIHRoZSBvcHRpb25zIGFuZCB0aGUgZGVzY3JpcHRpb246CisjICAgLUQsIC0tYWxsLXJlcGVhdGVkWz1kZWxpbWl0LW1ldGhvZF0gIHByaW50IGFsbCBkdXBsaWNhdGUgbGluZXNcbgorbG9uZ29wdF9yZSA9IC0tW2Etel1bMC05QS1aYS16LV0qKFxbPz1bMC05QS1aYS16LV0qXF0/KT8KK3NjX3R3b19zcGFjZV9zZXBhcmF0b3JfaW5fdXNhZ2U6CisJQGdyZXAgLW5FICdeICAgKigtW0EtWmEtel0sKT8gJChsb25nb3B0X3JlKSBbXiBdLipcXCQkJwkJXAorCSAgICAkJCgkKENWU19MSVNUX0VYQ0VQVCkpICYmCQkJCQlcCisJICB7IGVjaG8gIiQoTUUpOiBoZWxwMm1hbiByZXF1aXJlcyBhdCBsZWFzdCB0d28gc3BhY2VzIGJldHdlZW4iOyBcCisJICAgIGVjaG8gIiQoTUUpOiBhbiBvcHRpb24gYW5kIGl0cyBkZXNjcmlwdGlvbiI7IFwKKwkJMT4mMjsgZXhpdCAxOyB9IHx8IDoKKworIyBMb29rIGZvciBkaWFnbm9zdGljcyB0aGF0IGFyZW4ndCBtYXJrZWQgZm9yIHRyYW5zbGF0aW9uLgorIyBUaGlzIHdvbid0IGZpbmQgYW55IGZvciB3aGljaCBlcnJvcidzIGZvcm1hdCBzdHJpbmcgaXMgb24gYSBzZXBhcmF0ZSBsaW5lLgorc2NfdW5tYXJrZWRfZGlhZ25vc3RpY3M6CisJQGdyZXAgLW5FCQkJCQkJCVwKKwkgICAgJ1w8ZXJyb3IgXChbXiJdKiJbXiJdKlthLXpdezN9JyAkJCgkKENWU19MSVNUX0VYQ0VQVCkpCVwKKwkgIHwgZ3JlcCAtdiAnXycnKCcgJiYJCQkJCQlcCisJICB7IGVjaG8gJyQoTUUpOiBmb3VuZCB1bm1hcmtlZCBkaWFnbm9zdGljKHMpJyAxPiYyOwkJXAorCSAgICBleGl0IDE7IH0gfHwgOgorCisjIEF2b2lkIHVzZWxlc3MgcGFyZW50aGVzZXMgbGlrZSB0aG9zZSBpbiB0aGlzIGV4YW1wbGU6CisjICNpZiBkZWZpbmVkIChTWU1CT0wpIHx8IGRlZmluZWQgKFNZTTIpCitzY191c2VsZXNzX2NwcF9wYXJlbnM6CisJQGdyZXAgLW4gJ14jICppZiAuKmRlZmluZWQgKignICQkKCQoQ1ZTX0xJU1RfRVhDRVBUKSkgJiYJXAorCSAgeyBlY2hvICckKE1FKTogZm91bmQgdXNlbGVzcyBwYXJlbnRoZXNlcyBpbiBjcHAgZGlyZWN0aXZlJwlcCisJCTE+JjI7IGV4aXQgMTsgfSB8fCA6CisKKyMgRW5zdXJlIHRoYXQgdGhlIGM5OS10by1jODkgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LgorcGF0Y2gtY2hlY2s6CisJcm0gLXJmIHNyYy1jODkgJEAuMSAkQC4yCisJY3AgLWEgc3JjIHNyYy1jODkKKwkoY2Qgc3JjLWM4OTsgcGF0Y2ggLXAyIC1WIG5ldmVyIC0tZnV6ej0wKSA8IHNyYy9jOTktdG8tYzg5LmRpZmYgXAorCSAgPiAkQC4xIDI+JjEKKwlpZiB0ZXN0ICIkJHtSRUdFTl9QQVRDSCtzZXR9IiA9IHNldDsgdGhlbiBcCisJICBkaWZmIC11cHIgc3JjIHNyYy1jODkgPiBuZXctZGlmZiB8fCA6IDsgZmkKKwlncmVwIC12ICdecGF0Y2hpbmcgZmlsZSAnICRALjEgPiAkQC4yIHx8IDoKKwltc2c9b2s7IHRlc3QgLXMgJEAuMiAmJiBtc2c9J2Z1enp5IHBhdGNoJyB8fCA6IDsJXAorCXJtIC1mIHNyYy1jODkvKi5vIHx8IG1zZz0ncm0gZmFpbGVkJzsJCQlcCisJJChNQUtFKSAtQyBzcmMtYzg5IENGTEFHUz0nLVdkZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQgLVdlcnJvcicgXAorCSAgfHwgbXNnPSdjb21waWxlIGZhaWx1cmUgd2l0aCBleHRyYSBvcHRpb25zJzsJCVwKKwlybSAtcmYgc3JjLWM4OSAkQC4xICRALjI7CQkJCVwKKwl0ZXN0ICIkJG1zZyIgPSBvayAmJiA6IHx8IGVjaG8gIiQkbXNnIiAxPiYyOwkJXAorCXRlc3QgIiQkbXNnIiA9IG9rCisKKyMgRW5zdXJlIHRoYXQgZGF0ZSdzIC0taGVscCBvdXRwdXQgc3RheXMgaW4gc3luYyB3aXRoIHRoZSBpbmZvCisjIGRvY3VtZW50YXRpb24gZm9yIEdOVSBzdHJmdGltZS4gIFRoZSBvbmx5IGV4Y2VwdGlvbiBpcyAlTiwKKyMgd2hpY2ggZGF0ZSBhY2NlcHRzIGJ1dCBHTlUgc3RyZnRpbWUgZG9lcyBub3QuCitleHRyYWN0X2NoYXIgPSBzZWQgJ3MvXlteJV1bXiVdKiVcKC5cKS4qL1wxLycKK3N0cmZ0aW1lLWNoZWNrOgorCWlmIHRlc3QgLWYgJChzcmNkaXIpL3NyYy9kYXRlLmM7IHRoZW4JCQkJXAorCSAgZ3JlcCAnXiAgJS4gICcgJChzcmNkaXIpL3NyYy9kYXRlLmMgfCBzb3J0CQkJXAorCSAgICB8ICQoZXh0cmFjdF9jaGFyKSA+ICRALXNyYzsJCQkJCVwKKwkgIHsgZWNobyBOOwkJCQkJCQlcCisJICAgIGluZm8gbGliYyBkYXRlIGNhbGVuZGFyIGZvcm1hdCB8IGdyZXAgJ14gICAgYCUuJ1wnCQlcCisJICAgICAgfCAkKGV4dHJhY3RfY2hhcik7IH0gfCBzb3J0ID4gJEAtaW5mbzsJCQlcCisJICBkaWZmIC11ICRALXNyYyAkQC1pbmZvIHx8IGV4aXQgMTsJCQkJXAorCSAgcm0gLWYgJEAtc3JjICRALWluZm87CQkJCQkJXAorCWZpCisKK2NoZWNrLUFVVEhPUlM6CisJJChNQUtFKSAtQyBzcmMgJEAKKworIyBFbnN1cmUgdGhhdCB3ZSB1c2Ugb25seSB0aGUgc3RhbmRhcmQgJChWQVIpIG5vdGF0aW9uLAorIyBub3QgQC4uLkAgaW4gTWFrZWZpbGUuYW0sIG5vdyB0aGF0IHdlIGNhbiByZWx5IG9uIGF1dG9tYWtlCisjIHRvIGVtaXQgYSBkZWZpbml0aW9uIGZvciBlYWNoIHN1YnN0aXR1dGVkIHZhcmlhYmxlLgorbWFrZWZpbGUtY2hlY2s6CisJZ3JlcCAtbkUgJ0BbQS1aXzAtOV0rQCcgYGZpbmQgLiAtbmFtZSBNYWtlZmlsZS5hbWAgXAorCSAgJiYgeyBlY2hvICdNYWtlZmlsZS5tYWludDogdXNlICQkKC4uLiksIG5vdCBALi4uQCcgMT4mMjsgZXhpdCAxOyB9IHx8IDoKKworbmV3cy1kYXRlLWNoZWNrOiBORVdTCisJdG9kYXk9YGRhdGUgKyVZLSVtLSVkYDsJCQkJCQlcCisJaWYgaGVhZCBORVdTIHwgZ3JlcCAnXlwqLiogJChWRVJTSU9OX1JFR0VYUCkgKCckJHRvZGF5JyknCVwKKwkgICAgPi9kZXYvbnVsbDsgdGhlbgkJCQkJCVwKKwkgIDo7CQkJCQkJCQlcCisJZWxzZQkJCQkJCQkJXAorCSAgZWNobyAidmVyc2lvbiBvciB0b2RheSdzIGRhdGUgaXMgbm90IGluIE5FV1MiIDE+JjI7CQlcCisJICBleGl0IDE7CQkJCQkJCVwKKwlmaQorCitjaGFuZ2Vsb2ctY2hlY2s6CisJaWYgaGVhZCBDaGFuZ2VMb2cgfCBncmVwICdWZXJzaW9uICQoVkVSU0lPTl9SRUdFWFApXC4kJCcJXAorCSAgICA+L2Rldi9udWxsOyB0aGVuCQkJCQkJXAorCSAgOjsJCQkJCQkJCVwKKwllbHNlCQkJCQkJCQlcCisJICBlY2hvICIkKFZFUlNJT04pIG5vdCBpbiBDaGFuZ2VMb2ciIDE+JjI7CQkJXAorCSAgZXhpdCAxOwkJCQkJCQlcCisJZmkKKworbTQtY2hlY2s6CisJQGdyZXAgLW4gJ0FDX0RFRlVOKFteW10nIG00LyoubTQgXAorCSAgJiYgeyBlY2hvICdNYWtlZmlsZS5tYWludDogcXVvdGUgdGhlIGZpcnN0IGFyZyB0byBBQ19ERUZVTicgMT4mMjsgXAorCSAgICAgICBleGl0IDE7IH0gfHwgOgorCisjIFZlcmlmeSB0aGF0IGFsbCBzb3VyY2UgZmlsZXMgdXNpbmcgXygpIGFyZSBsaXN0ZWQgaW4gcG8vUE9URklMRVMuaW4uCisjIEZJWE1FOiBkb24ndCBoYXJkLWNvZGUgZmlsZSBuYW1lcyBiZWxvdzsgdXNlIGEgbW9yZSBnZW5lcmFsIG1lY2hhbmlzbS4KK3BvLWNoZWNrOgorCWlmIHRlc3QgLWYgcG8vUE9URklMRVMuaW47IHRoZW4JCQkJCVwKKwkgIGdyZXAgLUUgLXYgJ14oI3wkJCknIHBvL1BPVEZJTEVTLmluCQkJCVwKKwkgICAgfCBncmVwIC12ICdec3JjL2ZhbHNlXC5jJCQnIHwgc29ydCA+ICRALTE7CQkJXAorCSAgZmlsZXM9OwkJCQkJCQlcCisJICBmb3IgZmlsZSBpbiAkJCgkKENWU19MSVNUX0VYQ0VQVCkpIGxpYi8qLltjaF07IGRvCQlcCisJICAgIGNhc2UgJCRmaWxlIGluCQkJCQkJXAorCSAgICBkamdwcC8qIHwgbWFuLyopIGNvbnRpbnVlOzsJCQkJCVwKKwkgICAgZXNhYzsJCQkJCQkJXAorCSAgICBjYXNlICQkZmlsZSBpbgkJCQkJCVwKKwkgICAgKi5bY2hdKQkJCQkJCQlcCisJICAgICAgYmFzZT1gZXhwciAiICQkZmlsZSIgOiAnIFwoLipcKVwuLidgOwkJCVwKKwkgICAgICB7IHRlc3QgLWYgJCRiYXNlLmwgfHwgdGVzdCAtZiAkJGJhc2UueTsgfSAmJiBjb250aW51ZTs7CVwKKwkgICAgZXNhYzsJCQkJCQkJXAorCSAgICBmaWxlcz0iJCRmaWxlcyAkJGZpbGUiOwkJCQkJXAorCSAgZG9uZTsJCQkJCQkJCVwKKwkgIGdyZXAgLUUgLWwgJ1xiKE4/X3xnZXR0ZXh0ICopXChbXikiXSooInwkJCknICQkZmlsZXMJCVwKKwkgICAgfCBzb3J0IC11ID4gJEAtMjsJCQkJCQlcCisJICBkaWZmIC11ICRALTEgJEAtMiB8fCBleGl0IDE7CQkJCQlcCisJICBybSAtZiAkQC0xICRALTI7CQkJCQkJXAorCWZpCisKKyMgSW4gYSBkZWZpbml0aW9uIG9mICNkZWZpbmUgQVVUSE9SUyAiLi4uIGFuZCAuLi4iIHdoZXJlIHRoZSBSSFMgY29udGFpbnMKKyMgdGhlIEVuZ2xpc2ggd29yZCBgYW5kJywgdGhlIHN0cmluZyBtdXN0IGJlIG1hcmtlZCB3aXRoIGBOXyAoLi4uKScgc28gdGhhdAorIyBnZXR0ZXh0IHJlY29nbml6ZXMgaXQgYXMgYSBzdHJpbmcgcmVxdWlyaW5nIHRyYW5zbGF0aW9uLgorYXV0aG9yX21hcmtfY2hlY2s6CisJQGdyZXAgLW4gJ14jICpkZWZpbmUgQVVUSE9SUyAiW14iXSogYW5kICcgc3JjLyouYyB8Z3JlcCAtdiAnIE5fICgnICYmIFwKKwkgIHsgZWNobyAnTWFrZWZpbGUubWFpbnQ6IGVuY2xvc2UgdGhlIGFib3ZlIHN0cmluZ3MgaW4gTl8gKC4uLiknIDE+JjI7IFwKKwkgICAgZXhpdCAxOyB9IHx8IDoKKworIyBTb21ldGltZXMgaXQgaXMgdXNlZnVsIHRvIGNoYW5nZSB0aGUgUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZQorIyBpbiBNYWtlZmlsZXMuICBXaGVuIGRvaW5nIHNvLCBpdCdzIGJldHRlciBub3QgdG8gdXNlIHRoZSBVbml4LWNlbnRyaWMKKyMgcGF0aCBzZXBhcmF0b3Igb2YgYDonLCBidXQgcmF0aGVyIHRoZSBhdXRvbWFrZS1wcm92aWRlZCBgQFBBVEhfU0VQQVJBVE9SQCcuCisjIEl0J2QgYmUgYmV0dGVyIHRvIHVzZSBgZmluZCAtcHJpbnQwIC4uLnx4YXJncyAtMCAuLi4nLCBidXQgbGVzcyBwb3J0YWJsZSwKKyMgYW5kIHRoZXJlIHByb2JhYmx5IGFyZW4ndCBtYW55IHByb2plY3RzIHdpdGggc28gbWFueSBNYWtlZmlsZS5hbSBmaWxlcworIyB0aGF0IHdlJ2QgaGF2ZSB0byB3b3JyeSBhYm91dCBsaW1pdHMgb24gY29tbWFuZCBsaW5lIGxlbmd0aC4KK21zZyA9ICdNYWtlZmlsZS5tYWludDogRG8gbm90IHVzZSBgOidcJycgYWJvdmU7IHVzZSBAUEFUSF9TRVBBUkFUT1JAIGluc3RlYWQnCittYWtlZmlsZV9wYXRoX3NlcGFyYXRvcl9jaGVjazoKKwlAZ3JlcCAtbiAnUEFUSD0uKjonIGBmaW5kICQoc3JjZGlyKSAtbmFtZSBNYWtlZmlsZS5hbWAgXAorCSAgJiYgeyBlY2hvICQobXNnKSAxPiYyOyBleGl0IDE7IH0gfHwgOgorCisjIENoZWNrIHRoYXQgYG1ha2UgYWxwaGEnIHdpbGwgbm90IGZhaWwgYXQgdGhlIGVuZCBvZiB0aGUgcHJvY2Vzcy4KK3dyaXRhYmxlLWZpbGVzOgorCWlmIHRlc3QgLWQgJChyZWxlYXNlX2FyY2hpdmVfZGlyKTsgdGhlbiA6OyBlbHNlCQkJXAorCSAgbWtkaXIgJChyZWxlYXNlX2FyY2hpdmVfZGlyKTsJCQkJCVwKKwlmaQorCWZvciBmaWxlIGluICQoZGlzdGRpcikudGFyLmd6ICQoeGQtZGVsdGEpCQkJXAorCSAgICAgICAgICAgICQocmVsZWFzZV9hcmNoaXZlX2RpcikvJChkaXN0ZGlyKS50YXIuZ3oJCVwKKwkgICAgICAgICAgICAkKHJlbGVhc2VfYXJjaGl2ZV9kaXIpLyQoeGQtZGVsdGEpOyBkbwkJXAorCSAgdGVzdCAtZSAkJGZpbGUgfHwgY29udGludWU7CQkJCQlcCisJICB0ZXN0IC13ICQkZmlsZQkJCQkJCVwKKwkgICAgfHwgeyBlY2hvIEVSUk9SOiAkJGZpbGUgaXMgbm90IHdyaXRhYmxlOyBmYWlsPTE7IH07CQlcCisJZG9uZTsJCQkJCQkJCVwKKwl0ZXN0ICIkJGZhaWwiICYmIGV4aXQgMSB8fCA6CisKK3ZfZXRjX2ZpbGUgPSBsaWIvdmVyc2lvbi1ldGMuYworc2FtcGxlLXRlc3QgPSB0ZXN0cy9zYW1wbGUtdGVzdAorIyBNYWtlIHN1cmUgdGhhdCB0aGUgY29weXJpZ2h0IGRhdGUgaW4gJCh2X2V0Y19maWxlKSBpcyB1cCB0byBkYXRlLgorY29weXJpZ2h0LWNoZWNrOgorCUBpZiB0ZXN0IC1mICQodl9ldGNfZmlsZSk7IHRoZW4gXAorCSAgZ3JlcCAnZW51bSB7IENPUFlSSUdIVF9ZRUFSID0gJyQkKGRhdGUgKyVZKScgfTsnICQodl9ldGNfZmlsZSkgXAorCSAgICA+L2Rldi9udWxsIFwKKwkgIHx8IHsgZWNobyAnb3V0IG9mIGRhdGUgY29weXJpZ2h0IGluICQodl9ldGNfZmlsZSk7IHVwZGF0ZSBpdCcgMT4mMjsgXAorCSAgICAgICBleGl0IDE7IH07IFwKKwlmaQorCUBpZiB0ZXN0IC1mICQoc2FtcGxlLXRlc3QpOyB0aGVuIFwKKwkgIGdyZXAgJyMgQ29weXJpZ2h0IChDKSAnJCQoZGF0ZSArJVkpJyBGcmVlJyAkKHNhbXBsZS10ZXN0KSBcCisJICAgID4vZGV2L251bGwgXAorCSAgfHwgeyBlY2hvICdvdXQgb2YgZGF0ZSBjb3B5cmlnaHQgaW4gJChzYW1wbGUtdGVzdCk7IHVwZGF0ZSBpdCcgMT4mMjsgXAorCSAgICAgICBleGl0IDE7IH07IFwKKwlmaQorCisKKyMgU2FuaXR5IGNoZWNrcyB3aXRoIHRoZSByZXBvc2l0b3J5LgorIyBBYm9ydCBlYXJseSBpZiB0aGlzIHRhZyBoYXMgYWxyZWFkeSBiZWVuIHVzZWQuCit2Yy10YWctY2hlY2s6CisJdXNlZD1ubzsJCQkJCQkJXAorCWlmICQoVkMpIC0taGVscCB8IGdyZXAgQ1ZTOyB0aGVuCQkJCVwKKwkgICQoQ1ZTKSAtbiBsb2cgLWggUkVBRE1FfGdyZXAgLWUgJCh0aGlzLXZjLXRhZyk6ID4vZGV2L251bGwJXAorCSAgICAmJiB1c2VkPXllczsJCQkJCQlcCisJZWxzZQkJCQkJCQkJXAorCSAgJChHSVQpIHRhZyAtbCAnXiQodGhpcy12Yy10YWcpJCQnICYmIHVzZWQ9eWVzOwkJXAorCWZpOwkJCQkJCQkJXAorCWlmIHRlc3QgIiQkdXNlZCIgPSB5ZXM7IHRoZW4JCQkJCVwKKwkgIGVjaG8gIiQodGhpcy12Yy10YWcpIGhhcyBhbHJlYWR5IGJlZW4gdXNlZDsgbm90IHRhZ2dpbmciIDE+JjI7IFwKKwkgIGV4aXQgMTsJCQkJCQkJXAorCWZpCisKK3ZjLWRpZmYtY2hlY2s6CisJJChWQykgZGlmZiA+IHZjLWRpZmZzIHx8IDoKKwlpZiB0ZXN0IC1zIHZjLWRpZmZzOyB0aGVuCQkJCVwKKwkgIGNhdCB2Yy1kaWZmczsJCQkJCQlcCisJICBlY2hvICJTb21lIGZpbGVzIGFyZSBsb2NhbGx5IG1vZGlmaWVkOiIgMT4mMjsJCVwKKwkgIGV4aXQgMTsJCQkJCQlcCisJZWxzZQkJCQkJCQlcCisJICBybSB2Yy1kaWZmczsJCQkJCQlcCisJZmkKKworY3ZzLWNoZWNrOiB2Yy1kaWZmLWNoZWNrIHZjLXRhZy1jaGVjaworCittYWludGFpbmVyLWRpc3RjaGVjazoKKwkkKE1BS0UpIGRpc3RjaGVjaworCSQoTUFLRSkgbXktZGlzdGNoZWNrCisKKworIyBUYWcgYmVmb3JlIG1ha2luZyBkaXN0cmlidXRpb24uICBBbHNvLCBkb24ndCBtYWtlIGEgZGlzdHJpYnV0aW9uIGlmCisjIGNoZWNrcyBmYWlsLiAgQWxzbywgbWFrZSBzdXJlIHRoZSBORVdTIGZpbGUgaXMgdXAtdG8tZGF0ZS4KKyMgRklYTUU6IHVzZSBkaXN0LWhvb2svbXktZGlzdCBsaWtlIGRpc3RjaGVjay1ob29rL215LWRpc3RjaGVjay4KK3ZjLWRpc3Q6ICQobG9jYWwtY2hlY2spIGN2cy1jaGVjayBtYWludGFpbmVyLWRpc3RjaGVjaworCSQoVkMtdGFnKSAkKHRoaXMtdmMtdGFnKQorCSQoTUFLRSkgZGlzdAorCisjIFVzZSB0aGlzIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBydW4gdGhlc2UgcHJvZ3JhbXMgd2hlbiBidWlsZGluZworIyBmcm9tIGEgdmlyZ2luIHRneiBmaWxlLCBiZWxvdy4KK251bGxfQU1fTUFLRUZMQUdTID0gXAorICBBQ0xPQ0FMPWZhbHNlIFwKKyAgQVVUT0NPTkY9ZmFsc2UgXAorICBBVVRPTUFLRT1mYWxzZSBcCisgIEFVVE9IRUFERVI9ZmFsc2UgXAorICBNQUtFSU5GTz1mYWxzZQorCit3YXJuX2NmbGFncyA9IC1EbGludCAtTyAtV2Vycm9yIC1XYWxsIC1XZm9ybWF0IC1Xc2hhZG93IC1XcG9pbnRlci1hcml0aAorCisjIFVzZSAtV2Zvcm1hdCAtV2Vycm9yIHRvIGRldGVjdCBmb3JtYXQtc3RyaW5nL2FyZy1saXN0IG1pc21hdGNoZXMuCisjIEFsc28sIGNoZWNrIGZvciBzaGFkb3dpbmcgcHJvYmxlbXMgd2l0aCAtV3NoYWRvdywgYW5kIGZvciBwb2ludGVyCisjIGFyaXRobWV0aWMgcHJvYmxlbXMgd2l0aCAtV3BvaW50ZXItYXJpdGguCisjIFRoZXNlIENGTEFHUyBhcmUgcHJldHR5IHN0cmljdC4gIElmIHlvdSBidWlsZCB0aGlzIHRhcmdldCwgeW91IHByb2JhYmx5CisjIGhhdmUgdG8gaGF2ZSBhIHJlY2VudCB2ZXJzaW9uIG9mIGdjYyBhbmQgZ2xpYmMgaGVhZGVycy4KK1RNUERJUiA/PSAvdG1wCit0PSQoVE1QRElSKS8kKFBBQ0tBR0UpL3Rlc3QKK215LWRpc3RjaGVjazogJChsb2NhbC1jaGVjaykKKwktcm0gLXJmICQodCkKKwlta2RpciAtcCAkKHQpCisJR1pJUD0kKEdaSVBfRU5WKSAkKEFNVEFSKSAtQyAkKHQpIC16eGYgJChkaXN0ZGlyKS50YXIuZ3oKKwljZCAkKHQpLyQoZGlzdGRpcikJCQkJXAorCSAgJiYgLi9jb25maWd1cmUgLS1kaXNhYmxlLW5scwkJCVwKKwkgICYmICQoTUFLRSkgQ0ZMQUdTPSckKHdhcm5fY2ZsYWdzKScJCVwKKwkgICAgICBBTV9NQUtFRkxBR1M9JyQobnVsbF9BTV9NQUtFRkxBR1MpJwlcCisJICAmJiAkKE1BS0UpIGR2aQkJCQlcCisJICAmJiAkKE1BS0UpIGNoZWNrCQkJCVwKKwkgICYmICQoTUFLRSkgZGlzdGNsZWFuCisJKGNkICQodCkgJiYgbXYgJChkaXN0ZGlyKSAkKGRpc3RkaXIpLm9sZAlcCisJICAmJiAkKEFNVEFSKSAtenhmIC0gKSA8ICQoZGlzdGRpcikudGFyLmd6CisJZGlmZiAtdXIgJCh0KS8kKGRpc3RkaXIpLm9sZCAkKHQpLyQoZGlzdGRpcikKKwlpZiB0ZXN0IC1mICQoc3JjZGlyKS9zcmMvYzk5LXRvLWM4OS5kaWZmOyB0aGVuCQkJXAorCSAgY2QgJCh0KS8kKGRpc3RkaXIpCQkJCQkJXAorCSAgICAmJiAoY2Qgc3JjICYmIHBhdGNoIC1WIG5ldmVyIC0tZnV6ej0wIDxjOTktdG8tYzg5LmRpZmYpCVwKKwkgICAgJiYgLi9jb25maWd1cmUgLS1kaXNhYmxlLWxhcmdlZmlsZQkJCQlcCisJICAgICAgICAgQ0ZMQUdTPSctV2Vycm9yIC1hbnNpIC1wZWRhbnRpYyAtV25vLWxvbmctbG9uZycJXAorCSAgICAmJiAkKE1BS0UpOwkJCQkJCQlcCisJZmkKKwktcm0gLXJmICQodCkKKwlAZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09IjsgXAorCWVjaG8gIiQoZGlzdGRpcikudGFyLmd6IGlzIHJlYWR5IGZvciBkaXN0cmlidXRpb24iOyBcCisJZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09IgorCitXR0VUID0gd2dldAorV0dFVEZMQUdTID0gLUMgb2ZmCisKK3JlbC1jaGVjazoKKwl0YXJ6PS90bXAvcmVsLWNoZWNrLXRhcnotJCQkJDsgXAorCW1kNV90bXA9L3RtcC9yZWwtY2hlY2stbWQ1LSQkJCQ7IFwKKwlzZXQgLWU7IFwKKwl0cmFwICdzdGF0dXM9JCQ/OyBybSAtZiAkJHRhcnogJCRtZDVfdG1wOyBleGl0ICQkc3RhdHVzJyAwIDEgMiAzIDE1OyBcCisJJChXR0VUKSAkKFdHRVRGTEFHUykgLXEgLS1vdXRwdXQtZG9jdW1lbnQ9JCR0YXJ6ICQodXJsKTsgXAorCWVjaG8gIiQobWQ1KSAgLSIgPiAkJG1kNV90bXA7IFwKKwltZDVzdW0gLWMgJCRtZDVfdG1wIDwgJCR0YXJ6CisKK3ByZXYtdGd6ID0gJChQQUNLQUdFKS0kKFBSRVZfVkVSU0lPTikudGFyLmd6Cit4ZC1kZWx0YSA9ICQoUEFDS0FHRSktJChQUkVWX1ZFUlNJT04pLSQoVkVSU0lPTikueGRlbHRhCisKK3JlbC1maWxlcyA9ICQoeGQtZGVsdGEpICQoRElTVF9BUkNISVZFUykKKworIyBBcHByb3hpbWF0ZSB0aGUgZGF0ZSBvZiBsYXN0IGdudWxpYiAidXBkYXRlIiBieSB0aGUgQ2hhbmdlTG9nIGZpbGUncworIyBtdGltZSwgYW5kIHByb3ZpZGUgdGhhdCBkYXRlIGluIHRoZSBhbm5vdW5jZW1lbnQuCithbm5vdW5jZW1lbnQ6IE5FV1MgQ2hhbmdlTG9nICQocmVsLWZpbGVzKQorCUBjbF9kYXRlPSQkKHN0YXQgLS1wcmludGYgQCVZICQoZ251bGliX2RpcikvQ2hhbmdlTG9nKTsJCVwKKwl1dGNfZGF0ZT0kJChkYXRlIC11IC0tZGF0ZSAkJGNsX2RhdGUgJyslWS0lbS0lZCAlVCAleicpOwlcCisJLi9idWlsZC1hdXgvYW5ub3VuY2UtZ2VuCQkJCQlcCisJICAgIC0tcmVsZWFzZS10eXBlPSQoUkVMRUFTRV9UWVBFKQkJCQlcCisJICAgIC0tcGFja2FnZT0kKFBBQ0tBR0UpCQkJCQlcCisJICAgIC0tcHJldj0kKFBSRVZfVkVSU0lPTikJCQkJCVwKKwkgICAgLS1jdXJyPSQoVkVSU0lPTikJCQkJCQlcCisJICAgIC0tZ3BnLWtleS1pZD0kKGdwZ19rZXlfSUQpCQkJCQlcCisJICAgIC0tbmV3cz1ORVdTCQkJCQkJCVwKKwkgICAgLS1ib290c3RyYXAtdG9vbHM9YXV0b2NvbmYsYXV0b21ha2UsYmlzb24sZ251bGliCQlcCisJICAgIC0tZ251bGliLXNuYXBzaG90LXRpbWUtc3RhbXA9IiQkdXRjX2RhdGUiCQkJXAorCSAgICAkKGFkZHByZWZpeCAtLXVybC1kaXI9LCAkKHVybF9kaXJfbGlzdCkpCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFVwZGF0aW5nIGZpbGVzLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0gIyMKKworZnRwLWdudSA9IGZ0cDovL2Z0cC5nbnUub3JnL2dudQord3d3LWdudSA9IGh0dHA6Ly93d3cuZ251Lm9yZworCisjIFVzZSBtdiwgaWYgeW91IGRvbid0IGhhdmUvd2FudCBtb3ZlLWlmLWNoYW5nZS4KK21vdmVfaWZfY2hhbmdlID89IG1vdmUtaWYtY2hhbmdlCisKK2VtaXRfdXBsb2FkX2NvbW1hbmRzOgorCUBlY2hvID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlAZWNobyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJQGVjaG8gIiQoc3JjZGlyKS9idWlsZC1hdXgvZ251cGxvYWQgJChHTlVQTE9BREZMQUdTKSBcXCIKKwlAZWNobyAiICAgIC0tdG8gJChnbnVfcmVsX2hvc3QpOiQoUEFDS0FHRSkgXFwiCisJQGVjaG8gIiAgJChyZWwtZmlsZXMpIgorCUBlY2hvICcjIHNlbmQgdGhlIC90bXAvYW5ub3VuY2VtZW50IGUtbWFpbCcKKwlAZWNobyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJQGVjaG8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCiskKHhkLWRlbHRhKTogJChyZWxlYXNlX2FyY2hpdmVfZGlyKS8kKHByZXYtdGd6KSAkKGRpc3RkaXIpLnRhci5negorCXhkZWx0YSBkZWx0YSAtOSAkXiAkQCB8fCA6CisKKy5QSE9OWTogYWxwaGEgYmV0YSBtYWpvcgorYWxwaGEgYmV0YSBtYWpvcjogbmV3cy1kYXRlLWNoZWNrIGNoYW5nZWxvZy1jaGVjayAkKGxvY2FsLWNoZWNrKSB3cml0YWJsZS1maWxlcworCXRlc3QgJEAgPSBtYWpvcgkJCQkJCVwKKwkgICYmIHsgZWNobyAkKFZFUlNJT04pIHwgZ3JlcCAtRSAnXlswLTldKyhcLlswLTldKykrJCQnCVwKKwkgICAgICAgfHwgeyBlY2hvICJpbnZhbGlkIHZlcnNpb24gc3RyaW5nOiAkKFZFUlNJT04pIiAxPiYyOyBleGl0IDE7fTt9XAorCSAgfHwgOgorCSQoTUFLRSkgdmMtZGlzdAorCSQoTUFLRSkgJCh4ZC1kZWx0YSkKKwkkKE1BS0UpIC1zIGFubm91bmNlbWVudCBSRUxFQVNFX1RZUEU9JEAgPiAvdG1wL2Fubm91bmNlLSQobXlfZGlzdGRpcikKKwlsbiAkKHJlbC1maWxlcykgJChyZWxlYXNlX2FyY2hpdmVfZGlyKQorCWNobW9kIGEtdyAkKHJlbC1maWxlcykKKwkkKE1BS0UpIC1zIGVtaXRfdXBsb2FkX2NvbW1hbmRzIFJFTEVBU0VfVFlQRT0kQAorCWVjaG8gJChWRVJTSU9OKSA+ICQocHJldl92ZXJzaW9uX2ZpbGUpCisJJChWQykgY29tbWl0IC1tIFwKKwkgICckKHByZXZfdmVyc2lvbl9maWxlKTogUmVjb3JkIHByZXZpb3VzIHZlcnNpb246ICQoVkVSU0lPTikuJyBcCisJICAkKHByZXZfdmVyc2lvbl9maWxlKQpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L05FV1MgYi9wYXJ0ZWQtMS44LjcvTkVXUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjE1OThmCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L05FV1MKQEAgLTAsMCArMSwyMSBAQAorMS44LjcKKz09PT09CisKK2xpYnBhcnRlZDoKKy0gUHJldmVudCBjb21waWxhdGlvbiBvZiBEQVNEIGNvZGUgb24gR05VIEh1cmQgc3lzdGVtcy4KKy0gSW50ZWdyYXRlIG5ldyB1bml0IHRlc3RpbmcgZnJhbWV3b3JrIGZvciBwYXJ0ZWQgYW5kIGxpYnBhcnRlZC4KKy0gRml4IHByaW1hcnkgcGFydGl0aW9uIGN5bGluZGVyIGFsaWdubWVudCBlcnJvciBmb3IgRE9TIGRpc2sgbGFiZWxzLgorLSBVc2UgUEVEX1BBUlRJVElPTl9OT1JNQUwgaW4gcGxhY2Ugb2YgUEVEX1BBUlRJVElPTl9QUklNQVJZLgorLSBBdm9pZCBzZWdmYXVsdCBkdWUgdG8gYSBkb3VibGUgZnJlZSBvbiByZWlzZXJmcyBzdXBwb3J0LgorCitwYXJ0ZWQ6CistIEZpeCBzY3JpcHQgbW9kZSAoLXMpIGZvciBta2ZzIGNvbW1hbmQgaW4gcGFydGVkLgorLSBTdXBwcmVzcyAieW91IGFyZSBub3Qgc3VwZXJ1c2VyLi4uIiB3YXJuaW5nIGluIHNjcmlwdCBtb2RlLgorLSBGaXggb2ZmLWJ5LW9uZSBidWcgaW4gcGFydGVkIHdoZW4gZGlzcGxheWluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZGlzay4KKy0gRG8gbm90IHRyYW5zbGF0ZSBwYXJ0aXRpb24gbmFtZXMgaW4gdGhlICdwYXJ0ZWQgcHJpbnQnIGNvbW1hbmQuICBUaGlzCisgIGNhdXNlcyBwcm9ibGVtcyBmb3Igbm9uLUxhdGluLWJhc2VkIGNoYXJhY3RlciBzZXRzLgorLSBTZW5kIGVycm9ycyB0byBzdGRlcnIgcmF0aGVyIHRoYW4gc3Rkb3V0LgorLSBIYW5kbGUgY29tbWFuZCBsaW5lIG9wdGlvbnMgaW5kZXBlbmRlbnQgb2YgdGhlIG9yZGVyLgorLSBBYm9ydCBvbiBhbnkgaW52YWxpZCBvcHRpb24gYW5kIGhhbmRsZSAtdiBhbmQgLWggZmlyc3QuCistIE9ubHkgZGlzcGxheSB0aGUgdXBkYXRlIC9ldGMvZnN0YWIgbWVzc2FnZSB3aGVuIHRoZXJlIGhhcyBiZWVuIGEgY2hhbmdlCisgIHRvIHRoZSBkaXNrIChhIHNob3J0ZXIgYW5kIG1vcmUgZGlyZWN0IG1lc3NhZ2UgdG9vKS4KZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9SRUFETUUgYi9wYXJ0ZWQtMS44LjcvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlZGFjZDUKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvUkVBRE1FCkBAIC0wLDAgKzEsNjMgQEAKK0dOVSBQYXJ0ZWQKKy0tLS0tLS0tLS0KKworR05VIFBhcnRlZCBpcyBhIHByb2dyYW0gZm9yIGNyZWF0aW5nLCBkZXN0cm95aW5nLCByZXNpemluZywgY2hlY2tpbmcgYW5kCitjb3B5aW5nIHBhcnRpdGlvbnMsIGFuZCB0aGUgZmlsZXN5c3RlbXMgb24gdGhlbS4gIFRoaXMgaXMgdXNlZnVsIGZvciBjcmVhdGluZworc3BhY2UgZm9yIG5ldyBvcGVyYXRpbmcgc3lzdGVtcywgcmVvcmdhbmlzaW5nIGRpc2sgdXNhZ2UsIGNvcHlpbmcgZGF0YSBiZXR3ZWVuCitoYXJkIGRpc2tzLCBhbmQgZGlzayBpbWFnaW5nLgorCisgKiBkb2N1bWVudGF0aW9uIGlzIGluIHRoZSBkb2MvIGRpcmVjdG9yeS4gIFRoZSBVc2VyJ3MgZG9jdW1lbnRhdGlvbiBpcyBpbgordGV4aW5mbyBmb3JtYXQsIGFuZCBpcyBidWlsdCBpbnRvIGEgZm9ybWF0IHZpZXdhYmxlIGJ5IGluZm8vcGluZm8gd2hlbgoreW91IHJ1biBtYWtlLiAgaS5lLgorCisJJCAuL2NvbmZpZ3VyZQorCSQgY2QgZG9jCisJJCBtYWtlCisJJCBpbmZvIC1mIHBhcnRlZC5pbmZvCisKK1llcywgaXQgc3Vja3MgdGhhdCB5b3UgbmVlZCB0byBydW4gLi9jb25maWd1cmUgYmVmb3JlIHlvdSBjYW4gcmVhZCB0aGUgbWFudWFsLgorSWYgeW91IGhhdmUgcHJvYmxlbXMgd2l0aCBpdCwgZG9jL3BhcnRlZC50ZXhpIHNob3VsZCBiZSBmYWlybHkgZWFzeSB0byByZWFkLAoranVzdCBhIGJpdCBsZXNzIHVzZXJmcmllbmRseS4KKwlJZiB5b3UgcHJlZmVyIGh0bWwgZm9ybWF0LCB5b3UgY2FuIHJ1bjoKKworCSQgY2QgZG9jCisJJCBtYWtlaW5mbyAtLWh0bWwgcGFydGVkLnRleGkKKworICogYW4gb25saW5lIHR1dG9yaWFsIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lmx1di5hc24uYXUvb3ZlcmhlYWRzL3BhcnRlZAorICogdGhlIEdOVSBQYXJ0ZWQgaG9tZSBwYWdlIGlzIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9wYXJ0ZWQKKyAqIHRoZSBHTlUgUGFydGVkIEZBUSBjYW4gYmUgZm91bmQgYXQKKyAgIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9wYXJ0ZWQvZmFxLmh0bWwKKyAqIHNlbmQgYnVnIHJlcG9ydHMsIHJlcXVlc3RzIGZvciBoZWxwLCBmZWF0dXJlIHJlcXVlc3RzLCBjb21tZW50cywgZXRjLiB0bworYnVnLXBhcnRlZEBnbnUub3JnLiAgVGhlIGF1dGhvcnMgY2FuIGJlIGNvbnRhY3RlZCBkaXJlY3RseSAoc2VlIHRoZSBBVVRIT1JTCitmaWxlKS4KKworCitOT1RFIFRPIERJU1RSSUJVVElPTlMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisoMSkgV2hlbiBjb21waWxpbmcgUGFydGVkIGZvciBkaXN0cmlidXRpb24gZm9yIGdlbmVyYWwgdXNlLCB3ZSByZWNvbW1lbmQgdXNpbmcKK3RoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb246CisKKwlDRkxBR1M9LU9zIC4vY29uZmlndXJlCisKK1RoaXMgaW5jbHVkZXMgLS1lbmFibGUtZGVidWcgKGJ5IGRlZmF1bHQpLCB3aGljaCBjb250YWlucyBtYW55IGFzc2VydGlvbnMuCitPYnZpb3VzbHksIHRoZXNlICJ3YXN0ZSIgc3BhY2UsIGJ1dCBpbiB0aGUgcGFzdCwgdGhleSBoYXZlIGNhdWdodCBwb3RlbnRpYWxseQorZGFuZ2Vyb3VzIGJ1Z3MgYmVmb3JlIHRoZXkgd291bGQgaGF2ZSBkb25lIGRhbWFnZSwgc28gd2UgdGhpbmsgaXQncyB3b3J0aAoraXQuICBBbHNvLCBpdCBtZWFucyB3ZSBnZXQgbW9yZSBidWcgcmVwb3J0cyA7KQorCisKKygyKSBXaGVuIGRvaW5nIGRlcGVuZGVuY2llcywgcmVtZW1iZXIgdGhhdCBsaWJyZWlzZXJmcyBpcyBhICpzb2Z0KiBkZXBlbmRlbmN5LAorc28gSSBndWVzcyB0aGF0IG1lYW5zIERlYmlhbi1sb29rLWFsaWtlcyBzaG91bGQgZG8gYSAic3VnZ2VzdHMiLCBidXQKK25vdCBhICJyZXF1aXJlcyIuCisKKworKDMpIFdoZW4gc3BhY2UgaXMgaW1wb3J0YW50LCB3ZSBzdWdnZXN0IC0td2l0aG91dC1yZWFkbGluZSwgLS1kaXNhYmxlLXNoYXJlZCwKK2FuZCBwb3NzaWJseSAtLWRpc2FibGUtbmxzIGFuZCAtLWRpc2FibGUtZHluYW1pYy1sb2FkaW5nLgorCitJZiBQYXJ0ZWQgaXMgb25seSBnb2luZyB0byBiZSB1c2VkIGZvciBwcm9iaW5nIC8gZGlzY292ZXJ5IChhbmQgbm90CisiZWRpdGluZyIpLCB0aGVyZSBpcyBhIC0tZW5hYmxlLWRpc2NvdmVyeS1vbmx5IGFuZCAtLWRpc2FibGUtZnMgKHdoZW4geW91J3JlCitvbmx5IGludGVyZXN0ZWQgaW4gcGFydGl0aW9uIHRhYmxlcykuICBTaW5jZSBpdCdzIHJlYWRvbmx5LCAtLWVuYWJsZS1kZWJ1ZworZ2FpbnMgeW91IG5vdGhpbmcgd3J0IHNhZmV0eSwgc28gdXNlIC0tZGlzYWJsZS1kZWJ1ZyA7KSAgVGhlICJkaXNjb3ZlciIKK3Byb2dyYW0gaXMgYWJvdXQgMzVrIChnemlwcGVkKSB3aGVuIGNvbXBpbGVkIHRoaXMgd2F5IChub3QgY291bnRpbmcgbGliYworYW5kIGxpYnV1aWQpLgorCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvVEhBTktTIGIvcGFydGVkLTEuOC43L1RIQU5LUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjZjY2FjCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L1RIQU5LUwpAQCAtMCwwICsxLDI4IEBACitJbiBubyBwYXJ0aWN1bGFyIG9yZGVyOgorCisgKiBKb25hdGhhbiBkdVNhaW50IDxqb25Acm9ja2dlZWtzLm5ldD4gZm9yIGJpbmFyeSB1bml0IHN1cHBvcnQgYW5kIG1vcmUuCisgKiBLYW1pbCBJZ25hY2FrIDxhY2VyaW9uQHdwLnBsPiBmb3IgaGVscCB3aXRoIHRoZSBtaWdyYXRpb24gb2YgdGhlIEFQSSBkb2N1bWVudGF0aW9uLgorICogQ29uZWN0aXZhLCB3d3cuY29uZWN0aXZhLmNvbSwgZm9yIHNwb25zb3JpbmcgUGFydGVkJ3MgZGV2ZWxvcG1lbnQgKGluIHRoZQorcGFzdCkuICBFbGlwaGFzLCBiZWJlciAoYWthIFBhdG8pLCBiYXJldHRhLCBmdWdhbnRpLCBjbGF1ZGlvLCBvbGl2ZSAoYW55b25lCitlbHNlPykKKyAqIFN0ZWZhbiBLYW50aGFrIDwxMDEuMzM3NjFAZ2VybWFueW5ldC5kZT4gZm9yIGxvdHMgb2YgaW5mbyBvbiBib290LWxvYWRlcnMsCithbmQgc29tZSBjb3JyZWN0aW9ucyB0byB0aGUgZG9jdW1lbnRhdGlvbgorICogRmFiaWFuIEVtbWVzIDxmYWJAb3JsZW4uZGU+IGZvciBSUE0gc3BlYyBmaWxlLCBoZWxwIHdpdGggaGlkZGVuCitwYXJ0aXRpb25zIGFuZCBhdXRvY29uZnVzaW9uIDotKSAtIGFuZCBsb3RzIG9mIG90aGVyIG1pc2MuIGhlbHAuCisgKiBGYWxrIEh1ZWZmbmVyIDxmYWxrLmh1ZWZmbmVyQHN0dWRlbnQudW5pLXR1ZWJpbmdlbi5kZT4gZm9yIGJ1ZyBmaXhlcy4KKyAqIEtldmluIExpbmRzYXkgPGtsaW5kc2F5QHN0b3JtaXguY29tPiBmb3IgbG90cyBvZiBidWcgcmVwb3J0cywgZXRjLgorICogSm9obiBXZWlzbWlsbGVyIDxqb2huQHN0b3JtaXguY29tPiBmb3IgbG90cyBvZiBidWcgcmVwb3J0cywgZXRjLgorICogQW5kcmllcyBCcm91d2VyIDxBbmRyaWVzLkJyb3V3ZXJAY3dpLm5sPiBmb3IgYWR2aWNlIG9uIEJJT1MgZ2VvbWV0cnkKKyAqIFNpbW9uIEtpcmJ5IDxzaW1Ac3Rvcm1peC5jb20+IGZvciBhZHZpY2Ugb24gQklPUyBnZW9tZXRyeQorICogR2xlbm4gTWNHcmF0aCA8R2xlbm4uTWNHcmF0aEBqY3UuZWR1LmF1PgorICogVGltc2hlbCBLbm9sbCA8dGltc2hlbEBwb2JveC5jb20+IGZvciBEZWJpYW4gc3R1ZmYKKyAqIFRpbSBXYXVnaCA8dHdhdWdoQHJlZGhhdC5jb20+IGZvciBidWcgcmVwb3J0cyBhbmQgZml4ZXMKKyAqIE15IGZyaWVuZHMgZm9yIGhlbHBpbmcgd2l0aCB0ZXN0aW5nOiBUcmlzdGFuIFp3YWxmLCBNZW5ha2EgTGFzaGl0aGEgQmFuZGFyYSwKK1Rob21hcyBIYW1ibGV0b24KKyAqIFJ5YW4gV2VhdmVyIDxyeWFud0BpbmZvaHd5LmNvbT4gZm9yIHBhcnRlZC5zcGVjLmluIHBhdGNoZXMKKyAqIEJlbmphbWluIEhlcnJlbnNjaG1pZHQgPGJoNDBAY2FsdmEubmV0PiBmb3IgYW5zd2VyaW5nIGFsbCBvZiBvdXIgcXVlc3Rpb25zCitvbiBNYWMncworICogRXRoYW4gQmVuc29uIDxlcmJlbnNvbkBhbGFza2EubmV0PiBmb3IgbG90cyBvZiBhZHZpY2UgLyB0ZXN0aW5nIG9uIHBwYworICogQ2hhcmxlcyBTdGV2ZW5zb24gPGNzdGV2ZW5AdGVycmFwbGV4LmNvbT4gLSBwcGMgc3R1ZmYKKyAqIGhlYXBzIG9mIHBlb3BsZSB3ZSBsZWZ0IG91dCEKKwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L1RPRE8gYi9wYXJ0ZWQtMS44LjcvVE9ETwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTljZDc0Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L1RPRE8KQEAgLTAsMCArMSw5OCBAQAorCitTZWUgaHR0cDovL3dpa2kuZGViaWFuLm9yZy9QYXJ0ZWQKKworPT09IGV2ZXJ5dGhpbmcgYmVsb3cgaXMgb2xkIGFuZCBmb3IgcmVmZXJlbmNlIHB1cnBvc2VzIG9ubHkgPT09CisKKyogcmVncmVzc2lvbiB0ZXN0czoKKwktIGFkZCBzcGVjaWZpYyB0ZXN0cyBmb3IgRkFUMTYgLT4gRkFUMzIsIEZBVDMyIC0+IEZBVDE2LCBjbHVzdGVyCityZXNpemluZyA4ayAtPiA0aywgZXRjLiAgQWxzbywgY29tcGFyZSBvdXRwdXQsIHRvIGNhdGNoIG90aGVyICJ1bmV4cGVjdGVkIgorZXJyb3JzIChsaWtlIHBhcnRpdGlvbnMgZ29pbmcgbWlzc2luZywgPGNvdWdoPiBub3QgdGhhdCB0aGF0J3MgZXZlcgoraGFwcGVuZWQgPGNvdWdoPikKKworKiB1aToKKwktIHN1cHBvcnQgYSBjeWxpbmRlciBpbnRlcmZhY2UgZm9yIHRoZSBtYXNvY2hpc3RpYy4KKwktIHdhcm4gd2hlbiBwYXJ0aXRpb24gbnVtYmVycyBjaGFuZ2UgKD8pICBpbiBVST8KKworKiBtYWtlICpfcmVhZCgpIGRvIHBlZF9maWxlX3N5c3RlbV9wcm9iZSgpLCBhbmQgd2FybiBpZiBpdCBpc24ndCBzYW5lIGZvcgordGhlIHBhcnRpdGlvbiBJRCBvbi1kaXNrLgorCisqIGRpc2sgbGFiZWwgaW1wbGVtZW50YXRpb25zOgorCS0gT1MvMiBETEFUIHN1cHBvcnQKKwktIHJlYWQtb25seSBmbGFnIGZvciBNYWMgcGFydGl0aW9ucywgYW5kIHRoZSBtYWN1ZnMgcGFydGl0aW9uIHR5cGUKKwktIGxiYSBmbGFnIC0gZGVmYXVsdCBmbGFnPworCS0gUEM5ODogcmVsYXggY3lsaW5kZXIgYm91bmRhcnkgcmVzdHJpY3Rpb25zIChjcmVhdGUgY29uZm9ybWluZworCXBhcnRpdGlvbnMsIGJ1dCBhbGxvdyBub24tY29uZm9ybWluZyBwYXJ0aXRpb25zIDstKQorCisqIGRvY3MgZm9yIFJBV1JJVEUsIGV0Yy4KKworKiB3cml0ZSBhIHN1bW1hcnkgb2Ygb3BlcmF0aW9uIGxpc3QgdGhpbmdzLCBhbmQgZ2V0IGRpc2N1c3Npb24gZ29pbmcuLi4KKyogcGVkX2ZpbGVfc3lzdGVtX2lzX2ZsYWdfYXZhaWxhYmxlKCkKKyogcGVkX2ZpbGVfc3lzdGVtX2NvbW1pdCgpID8gICBwb2x5bW9ycGhpYyBvcGVyYXRpb25zLCB3aXRoIGFwcGx5KCkgYW5kCityZXZlcnQoKSBpbiBtZW1vcnksIGFuZCBjb21taXQgYWxsIGZzJ3MgYW5kIGRpc2sncyB0byBjb21taXQgb24tZGlzay4KKyogcGVkX29wZXJhdGlvbl9xdWV1ZSAocGVkX29wZXJhdGlvbl9uZXcgKFBFRF9PUF9QQVJUSVRJT05fU0VUX0ZMQUcsIC4uLikpLAorCW9yIHBlZF9wYXJ0aXRpb25fc2V0X2ZsYWcoKSAod2l0aCBhICJ0cmFuc3BhcmVudCIgcXVldWU/KQorCisqIHNlcGFyYXRlIGRvbWFpbnMgbGlicGFydGVkIGFuZCBwYXJ0ZWQgKGZvciBubHMpCisqIG1lcmdlIHdpdGggcGFydGltYWdlLnNvdXJjZWZvcmdlLm5ldAorKiBtZXJnZSB3aXRoIGdwYXJ0CisqICJyZW51bWJlciIKKyogInJlY29uc3RydWN0IgorKiAicmVzaXplcGFydCIKKyogbWFrZSBhbiBlcnJhdGEgd2ViIHBhZ2UKKyogYm9vdGRpc2s6IHRyeSBnZXR0aW5nIHJlYWRsaW5lICYgbmxzIHN1cHBvcnQgaW4sIHVzZSBhIG5ld2VyIHZlcnNpb24gb2YKK2J1c3lib3guICBBbHNvLCB3cml0ZSBzb21lIHNjcmlwdHMgZm9yIGRpc2sgaW1hZ2luZy4KKyogUmF3cml0ZTMgSVMgZnJlZSwgaXQgc2VlbXMuICBGaW5kIHRoZSBzb3VyY2UgKHZlcnNpb24gMS4zID09IHZlcnNpb24gMyksIGFuZAorc3RpY2sgc291cmNlK2JpbiB1cCBvbiB0aGUgZnRwIHNpdGUuCisqIGltcHJvdmUgd2Vic2l0ZSAoY2hlY2sgb3V0IHRleGluZm8uICBEb2VzIGl0IGNyZWF0ZSBtdWNoIGF1dG9jb25mdXNpb24/KQorCisqIC9wcm9jL21lbWluZm8sIG1sb2NrKCkKKworKiBjcmVhdGUgYW4gRkFRLCBhbmQgc3RpY2sgbG90cyBvZiBleGFtcGxlcyBpbiBpdC4KKworKiBwZWRfZmlsZV9zeXN0ZW1fcmVzaXplX29ubGluZSgpCisKKyogcmVpc2VyIGZzIChhbG1vc3QgdGhlcmUpLCBudGZzIHN1cHBvcnQhCisKKyogd2hlbiBXaW5kb3dzIGRvZXNuJ3Qgc2h1dCBkb3duIHByb3Blcmx5LCBpdCBrbm93cyBhYm91dCBpdC4gIEhvdz8KKyogRkFUIGJvb3Qgc2VjdG9yIHJlY29uc3RydWN0aW9uLCBpbiBmYXRfY2hlY2soKSAgLSBhY3R1YWxseSwgZmF0X29wZW4oKSwKK3NpbmNlIGl0IHdvbid0IG9wZW4gcHJvcGVybHkgaWYgaXQncyBicm9rZW4uLi4gIFRlbGwgcGFub3ZAaWFjcC52bC5ydSB3aGVuCitkb25lLiAgUGVyaGFwcyBjb25uZWN0IHRoaXMgdG8gdGhlIGZyb250LWVuZCB2aWEgYSAiZm9yY2UgTUlOT1IgRlMtVFlQRSIKK2NvbW1hbmQsIHNpbmNlIGl0J3Mgc29tZXRpbWVzIGhhcmQgdG8gZGV0ZWN0IGJyb2tlbiBmaWxlIHN5c3RlbXMuCisKKyogRnJlZUJTRCBzdXBwb3J0IChnZXQgYSBjb3B5IC0gSSB3YW50IHRvIHRyeSBpdCBhbnl3YXkhKQorCisqIExCQSBzdXBwb3J0IGluIGJvb3QgbG9hZGVyCisKKyogT1MvMiBCb290IG1hbmFnZXIKKworKiBkb2N1bWVudGF0aW9uIG9mIHRoZSBpbnRlcm5hbCBBUEksIHR1dG9yaWFsIG9uIGV4dGVybmFsIEFQSSwgYW5kIHBlcmhhcHMgYSBiaXQKK29uIGhvdyB0aGUgcmVzaXplcnMsIGV0Yy4gd29yayAgW01PU1RMWSBET05FXQorCisqIGxvZ2ljYWwgc2VjdG9ycyAoPykgIGJ5dGUgYWRkcmVzc2luZz8KKworKiBsaWJib290bG9hZCA/CisJLSB1cGRhdGUgTElMTy9HUlVCL1F1aWsKKworKiBjb21tYW5kLWxpbmUgaW50ZXJmYWNlOiBpMThuIGlzc3VlcywgIlllcywgTm8gb3IgQ2FuY2VsPyIuICBUaGlzIGlzc3VlIGlzCitoYXJkLCBmb3IgZnJlZSBzb2Z0d2FyZSBpbiBnZW5lcmFsLiAgV2UgbmVlZCBhIGNvbW11bml0eSAoaS5lLiBtYWlsaW5nIGxpc3QpCit0aGF0IHNwZWNpYWxpemVzIGluIHRoaXMsIElNSE8uCisKKyogcGVkX2dlb21ldHJ5X3ttYXB8dW5tYXB9KCksIGFuZCBraWxsIHRoZSBsaWJwYXJ0ZWQvZnNfZXh0MiBidWZmZXIgY2FjaGUKKworKiBpbmplY3RpbmcvZWplY3RpbmcgcGFydGl0aW9ucyBpbnRvL291dCBvZiBleHRlbmRlZCBwYXJ0aXRpb25zLiAgQnV0IHRvCitrZWVwIGFsaWdubWVudCBydWxlcywgd291bGQgaGF2ZSB0byBtb3ZlIHRoZSBzdGFydCBvZiB0aGUgcGFydGl0aW9uLiAgTm8KK3Byb2JsZW0gZm9yIEZBVC4gIEFic29sdXRlIHBhaW4gZm9yIGV4dDIuCisKKyogZXh0MiByZXNpemVyOgorCS0gYWRkIGFiaWxpdHkgdG8gbW92ZSB0aGUgc3RhcnQgb2YgdGhlIGZpbGUgc3lzdGVtLgorCS0gZml4ICJzdHJhbmdlIGxheW91dCIgcHJvYmxlbQorCS0gYWRkIGFuIGluY29tcGF0IGZlYXR1cmUgdG8gZXh0MiB0aGF0IGlzIGEgc3BlY2lhbCByZXNpemUtdGhlLXN0YXJ0Citqb3VybmFsLCBhbmQgYWRkIHN1cHBvcnQgaW4gZTJmc2NrIC8gbW91bnQgLyBsaW51eCAoPykgZm9yIGl0LgorCisqIFJBSUQ/IExWTT8gRVZNUz8gZ3JhbmQtdW5pZmllZCBzeXN0ZW0gVE0/CisKKyogc3VwcG9ydCBmaW5kaW5nIGJhZC1ibG9ja3MuICBVc2UgcGVkX2RldmljZV9jaGVjaygpIGluIHBlZF9nZW9tZXRyeV9jaGVjaygpCisKKyogZ2VuZXJpYyByZXNpemluZy9jb252ZXJ0aW5nIHdpdGggdGhlIGlucGxhY2UgY29weSB2aWEgc3BhcnNlIGxvb3BiYWNrIGlkZWEKKyAgZnJvbSBTZXJndWVpIFR6dWthbm92CisKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9hY2xvY2FsLm00IGIvcGFydGVkLTEuOC43L2FjbG9jYWwubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzlkMzU0ZgotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9hY2xvY2FsLm00CkBAIC0wLDAgKzEsNzU2OCBAQAorIyBnZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBhY2xvY2FsIDEuMTAgLSotIEF1dG9jb25mIC0qLQorCisjIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwKKyMgMjAwNSwgMjAwNiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK200X2lmKG00X1BBQ0tBR0VfVkVSU0lPTiwgWzIuNjFdLCwKK1ttNF9mYXRhbChbdGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgZm9yIGF1dG9jb25mIDIuNjEuCitZb3UgaGF2ZSBhbm90aGVyIHZlcnNpb24gb2YgYXV0b2NvbmYuICBJZiB5b3Ugd2FudCB0byB1c2UgdGhhdCwKK3lvdSBzaG91bGQgcmVnZW5lcmF0ZSB0aGUgYnVpbGQgc3lzdGVtIGVudGlyZWx5Ll0sIFs2M10pXSkKKworIyBsaWJ0b29sLm00IC0gQ29uZmlndXJlIGxpYnRvb2wgZm9yIHRoZSBob3N0IHN5c3RlbS4gLSotQXV0b2NvbmYtKi0KKworIyBzZXJpYWwgNDggQUNfUFJPR19MSUJUT09MCisKKworIyBBQ19QUk9WSURFX0lGRUxTRShNQUNSTy1OQU1FLCBJRi1QUk9WSURFRCwgSUYtTk9ULVBST1ZJREVEKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBJZiB0aGlzIG1hY3JvIGlzIG5vdCBkZWZpbmVkIGJ5IEF1dG9jb25mLCBkZWZpbmUgaXQgaGVyZS4KK200X2lmZGVmKFtBQ19QUk9WSURFX0lGRUxTRV0sCisgICAgICAgICBbXSwKKyAgICAgICAgIFttNF9kZWZpbmUoW0FDX1BST1ZJREVfSUZFTFNFXSwKKwkgICAgICAgICBbbTRfaWZkZWYoW0FDX1BST1ZJREVfJDFdLAorCQkgICAgICAgICAgIFskMl0sIFskM10pXSldKQorCisKKyMgQUNfUFJPR19MSUJUT09MCisjIC0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0FDX1BST0dfTElCVE9PTF0sCitbQUNfUkVRVUlSRShbX0FDX1BST0dfTElCVE9PTF0pZG5sCitkbmwgSWYgQUNfUFJPR19DWFggaGFzIGFscmVhZHkgYmVlbiBleHBhbmRlZCwgcnVuIEFDX0xJQlRPT0xfQ1hYCitkbmwgaW1tZWRpYXRlbHksIG90aGVyd2lzZSwgaG9vayBpdCBpbiBhdCB0aGUgZW5kIG9mIEFDX1BST0dfQ1hYLgorICBBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19DWFhdLAorICAgIFtBQ19MSUJUT09MX0NYWF0sCisgICAgW2RlZmluZShbQUNfUFJPR19DWFhdLCBkZWZuKFtBQ19QUk9HX0NYWF0pW0FDX0xJQlRPT0xfQ1hYCisgIF0pXSkKK2RubCBBbmQgYSBzaW1pbGFyIHNldHVwIGZvciBGb3J0cmFuIDc3IHN1cHBvcnQKKyAgQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfRjc3XSwKKyAgICBbQUNfTElCVE9PTF9GNzddLAorICAgIFtkZWZpbmUoW0FDX1BST0dfRjc3XSwgZGVmbihbQUNfUFJPR19GNzddKVtBQ19MSUJUT09MX0Y3NworXSldKQorCitkbmwgUXVvdGUgQV1bTV9QUk9HX0dDSiBzbyB0aGF0IGFjbG9jYWwgZG9lc24ndCBicmluZyBpdCBpbiBuZWVkbGVzc2x5LgorZG5sIElmIGVpdGhlciBBQ19QUk9HX0dDSiBvciBBXVtNX1BST0dfR0NKIGhhdmUgYWxyZWFkeSBiZWVuIGV4cGFuZGVkLCBydW4KK2RubCBBQ19MSUJUT09MX0dDSiBpbW1lZGlhdGVseSwgb3RoZXJ3aXNlLCBob29rIGl0IGluIGF0IHRoZSBlbmQgb2YgYm90aC4KKyAgQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfR0NKXSwKKyAgICBbQUNfTElCVE9PTF9HQ0pdLAorICAgIFtBQ19QUk9WSURFX0lGRUxTRShbQV1bTV9QUk9HX0dDSl0sCisgICAgICBbQUNfTElCVE9PTF9HQ0pdLAorICAgICAgW0FDX1BST1ZJREVfSUZFTFNFKFtMVF9BQ19QUk9HX0dDSl0sCisJW0FDX0xJQlRPT0xfR0NKXSwKKyAgICAgIFtpZmRlZihbQUNfUFJPR19HQ0pdLAorCSAgICAgW2RlZmluZShbQUNfUFJPR19HQ0pdLCBkZWZuKFtBQ19QUk9HX0dDSl0pW0FDX0xJQlRPT0xfR0NKXSldKQorICAgICAgIGlmZGVmKFtBXVtNX1BST0dfR0NKXSwKKwkgICAgIFtkZWZpbmUoW0FdW01fUFJPR19HQ0pdLCBkZWZuKFtBXVtNX1BST0dfR0NKXSlbQUNfTElCVE9PTF9HQ0pdKV0pCisgICAgICAgaWZkZWYoW0xUX0FDX1BST0dfR0NKXSwKKwkgICAgIFtkZWZpbmUoW0xUX0FDX1BST0dfR0NKXSwKKwkJZGVmbihbTFRfQUNfUFJPR19HQ0pdKVtBQ19MSUJUT09MX0dDSl0pXSldKV0pCitdKV0pIyBBQ19QUk9HX0xJQlRPT0wKKworCisjIF9BQ19QUk9HX0xJQlRPT0wKKyMgLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW19BQ19QUk9HX0xJQlRPT0xdLAorW0FDX1JFUVVJUkUoW0FDX0xJQlRPT0xfU0VUVVBdKWRubAorQUNfQkVGT1JFKFskMF0sW0FDX0xJQlRPT0xfQ1hYXSlkbmwKK0FDX0JFRk9SRShbJDBdLFtBQ19MSUJUT09MX0Y3N10pZG5sCitBQ19CRUZPUkUoWyQwXSxbQUNfTElCVE9PTF9HQ0pdKWRubAorCisjIFRoaXMgY2FuIGJlIHVzZWQgdG8gcmVidWlsZCBsaWJ0b29sIHdoZW4gbmVlZGVkCitMSUJUT09MX0RFUFM9IiRhY19hdXhfZGlyL2x0bWFpbi5zaCIKKworIyBBbHdheXMgdXNlIG91ciBvd24gbGlidG9vbC4KK0xJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKS9saWJ0b29sJworQUNfU1VCU1QoTElCVE9PTClkbmwKKworIyBQcmV2ZW50IG11bHRpcGxlIGV4cGFuc2lvbgorZGVmaW5lKFtBQ19QUk9HX0xJQlRPT0xdLCBbXSkKK10pIyBfQUNfUFJPR19MSUJUT09MCisKKworIyBBQ19MSUJUT09MX1NFVFVQCisjIC0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtBQ19MSUJUT09MX1NFVFVQXSwKK1tBQ19QUkVSRVEoMi41MClkbmwKK0FDX1JFUVVJUkUoW0FDX0VOQUJMRV9TSEFSRURdKWRubAorQUNfUkVRVUlSRShbQUNfRU5BQkxFX1NUQVRJQ10pZG5sCitBQ19SRVFVSVJFKFtBQ19FTkFCTEVfRkFTVF9JTlNUQUxMXSlkbmwKK0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKK0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9CVUlMRF0pZG5sCitBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKK0FDX1JFUVVJUkUoW0FDX1BST0dfTERdKWRubAorQUNfUkVRVUlSRShbQUNfUFJPR19MRF9SRUxPQURfRkxBR10pZG5sCitBQ19SRVFVSVJFKFtBQ19QUk9HX05NXSlkbmwKKworQUNfUkVRVUlSRShbQUNfUFJPR19MTl9TXSlkbmwKK0FDX1JFUVVJUkUoW0FDX0RFUExJQlNfQ0hFQ0tfTUVUSE9EXSlkbmwKKyMgQXV0b2NvbmYgMi4xMydzIEFDX09CSkVYVCBhbmQgQUNfRVhFRVhUIG1hY3JvcyBvbmx5IHdvcmtzIGZvciBDIGNvbXBpbGVycyEKK0FDX1JFUVVJUkUoW0FDX09CSkVYVF0pZG5sCitBQ19SRVFVSVJFKFtBQ19FWEVFWFRdKWRubAorZG5sCisKK0FDX0xJQlRPT0xfU1lTX01BWF9DTURfTEVOCitBQ19MSUJUT09MX1NZU19HTE9CQUxfU1lNQk9MX1BJUEUKK0FDX0xJQlRPT0xfT0JKRElSCisKK0FDX1JFUVVJUkUoW19MVF9BQ19TWVNfQ09NUElMRVJdKWRubAorX0xUX0FDX1BST0dfRUNIT19CQUNLU0xBU0gKKworY2FzZSAkaG9zdF9vcyBpbgorYWl4MyopCisgICMgQUlYIHNvbWV0aW1lcyBoYXMgcHJvYmxlbXMgd2l0aCB0aGUgR0NDIGNvbGxlY3QyIHByb2dyYW0uICBGb3Igc29tZQorICAjIHJlYXNvbiwgaWYgd2Ugc2V0IHRoZSBDT0xMRUNUX05BTUVTIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgcHJvYmxlbXMKKyAgIyB2YW5pc2ggaW4gYSBwdWZmIG9mIHNtb2tlLgorICBpZiB0ZXN0ICJYJHtDT0xMRUNUX05BTUVTK3NldH0iICE9IFhzZXQ7IHRoZW4KKyAgICBDT0xMRUNUX05BTUVTPQorICAgIGV4cG9ydCBDT0xMRUNUX05BTUVTCisgIGZpCisgIDs7Citlc2FjCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0IGhlbHBzIHVzIGRvIHJvYnVzdCBxdW90aW5nLiAgSXQgYmFja3NsYXNoaWZpZXMKKyMgbWV0YWNoYXJhY3RlcnMgdGhhdCBhcmUgc3RpbGwgYWN0aXZlIHdpdGhpbiBkb3VibGUtcXVvdGVkIHN0cmluZ3MuCitYc2VkPSdzZWQgLWUgMXMvXlgvLycKK1tzZWRfcXVvdGVfc3Vic3Q9J3MvXChbXFwiXFxgJFxcXFxdXCkvXFxcMS9nJ10KKworIyBTYW1lIGFzIGFib3ZlLCBidXQgZG8gbm90IHF1b3RlIHZhcmlhYmxlIHJlZmVyZW5jZXMuCitbZG91YmxlX3F1b3RlX3N1YnN0PSdzL1woW1xcIlxcYFxcXFxdXCkvXFxcMS9nJ10KKworIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGRlbGF5IGV4cGFuc2lvbiBvZiBhbiBlc2NhcGVkIHNoZWxsIHZhcmlhYmxlIGluIGEKKyMgZG91YmxlX3F1b3RlX3N1YnN0J2VkIHN0cmluZy4KK2RlbGF5X3ZhcmlhYmxlX3N1YnN0PSdzL1xcXFxcXFxcXFxcJC9cXFxcXFwkL2cnCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0byBhdm9pZCBhY2NpZGVudGFsIGdsb2JiaW5nIGluIGV2YWxlZCBleHByZXNzaW9ucworbm9fZ2xvYl9zdWJzdD0ncy9cKi9cXFwqL2cnCisKKyMgQ29uc3RhbnRzOgorcm09InJtIC1mIgorCisjIEdsb2JhbCB2YXJpYWJsZXM6CitkZWZhdWx0X29maWxlPWxpYnRvb2wKK2Nhbl9idWlsZF9zaGFyZWQ9eWVzCisKKyMgQWxsIGtub3duIGxpbmtlcnMgcmVxdWlyZSBhIGAuYScgYXJjaGl2ZSBmb3Igc3RhdGljIGxpbmtpbmcgKGV4Y2VwdCBNU1ZDLAorIyB3aGljaCBuZWVkcyAnLmxpYicpLgorbGliZXh0PWEKK2x0bWFpbj0iJGFjX2F1eF9kaXIvbHRtYWluLnNoIgorb2ZpbGU9IiRkZWZhdWx0X29maWxlIgord2l0aF9nbnVfbGQ9IiRsdF9jdl9wcm9nX2dudV9sZCIKKworQUNfQ0hFQ0tfVE9PTChBUiwgYXIsIGZhbHNlKQorQUNfQ0hFQ0tfVE9PTChSQU5MSUIsIHJhbmxpYiwgOikKK0FDX0NIRUNLX1RPT0woU1RSSVAsIHN0cmlwLCA6KQorCitvbGRfQ0M9IiRDQyIKK29sZF9DRkxBR1M9IiRDRkxBR1MiCisKKyMgU2V0IHNhbmUgZGVmYXVsdHMgZm9yIHZhcmlvdXMgdmFyaWFibGVzCit0ZXN0IC16ICIkQVIiICYmIEFSPWFyCit0ZXN0IC16ICIkQVJfRkxBR1MiICYmIEFSX0ZMQUdTPWNydQordGVzdCAteiAiJEFTIiAmJiBBUz1hcwordGVzdCAteiAiJENDIiAmJiBDQz1jYwordGVzdCAteiAiJExUQ0MiICYmIExUQ0M9JENDCit0ZXN0IC16ICIkTFRDRkxBR1MiICYmIExUQ0ZMQUdTPSRDRkxBR1MKK3Rlc3QgLXogIiRETExUT09MIiAmJiBETExUT09MPWRsbHRvb2wKK3Rlc3QgLXogIiRMRCIgJiYgTEQ9bGQKK3Rlc3QgLXogIiRMTl9TIiAmJiBMTl9TPSJsbiAtcyIKK3Rlc3QgLXogIiRNQUdJQ19DTUQiICYmIE1BR0lDX0NNRD1maWxlCit0ZXN0IC16ICIkTk0iICYmIE5NPW5tCit0ZXN0IC16ICIkU0VEIiAmJiBTRUQ9c2VkCit0ZXN0IC16ICIkT0JKRFVNUCIgJiYgT0JKRFVNUD1vYmpkdW1wCit0ZXN0IC16ICIkUkFOTElCIiAmJiBSQU5MSUI9OgordGVzdCAteiAiJFNUUklQIiAmJiBTVFJJUD06Cit0ZXN0IC16ICIkYWNfb2JqZXh0IiAmJiBhY19vYmpleHQ9bworCisjIERldGVybWluZSBjb21tYW5kcyB0byBjcmVhdGUgb2xkLXN0eWxlIHN0YXRpYyBhcmNoaXZlcy4KK29sZF9hcmNoaXZlX2NtZHM9JyRBUiAkQVJfRkxBR1MgJG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJworb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDY0NCAkb2xkbGliJworb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0KKworaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICBvcGVuYnNkKikKKyAgICBvbGRfcG9zdGluc3RhbGxfY21kcz0iJG9sZF9wb3N0aW5zdGFsbF9jbWRzflwkUkFOTElCIC10IFwkb2xkbGliIgorICAgIDs7CisgICopCisgICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9IiRvbGRfcG9zdGluc3RhbGxfY21kc35cJFJBTkxJQiBcJG9sZGxpYiIKKyAgICA7OworICBlc2FjCisgIG9sZF9hcmNoaXZlX2NtZHM9IiRvbGRfYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkb2xkbGliIgorZmkKKworX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorCisjIE9ubHkgcGVyZm9ybSB0aGUgY2hlY2sgZm9yIGZpbGUsIGlmIHRoZSBjaGVjayBtZXRob2QgcmVxdWlyZXMgaXQKK2Nhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCitmaWxlX21hZ2ljKikKKyAgaWYgdGVzdCAiJGZpbGVfbWFnaWNfY21kIiA9ICckTUFHSUNfQ01EJzsgdGhlbgorICAgIEFDX1BBVEhfTUFHSUMKKyAgZmkKKyAgOzsKK2VzYWMKKworQUNfUFJPVklERV9JRkVMU0UoW0FDX0xJQlRPT0xfRExPUEVOXSwgZW5hYmxlX2Rsb3Blbj15ZXMsIGVuYWJsZV9kbG9wZW49bm8pCitBQ19QUk9WSURFX0lGRUxTRShbQUNfTElCVE9PTF9XSU4zMl9ETExdLAorZW5hYmxlX3dpbjMyX2RsbD15ZXMsIGVuYWJsZV93aW4zMl9kbGw9bm8pCisKK0FDX0FSR19FTkFCTEUoW2xpYnRvb2wtbG9ja10sCisgICAgW0FDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtbGlidG9vbC1sb2NrXSwKKwlbYXZvaWQgbG9ja2luZyAobWlnaHQgYnJlYWsgcGFyYWxsZWwgYnVpbGRzKV0pXSkKK3Rlc3QgIngkZW5hYmxlX2xpYnRvb2xfbG9jayIgIT0geG5vICYmIGVuYWJsZV9saWJ0b29sX2xvY2s9eWVzCisKK0FDX0FSR19XSVRIKFtwaWNdLAorICAgIFtBQ19IRUxQX1NUUklORyhbLS13aXRoLXBpY10sCisJW3RyeSB0byB1c2Ugb25seSBQSUMvbm9uLVBJQyBvYmplY3RzIEA8OkBkZWZhdWx0PXVzZSBib3RoQDo+QF0pXSwKKyAgICBbcGljX21vZGU9IiR3aXRodmFsIl0sCisgICAgW3BpY19tb2RlPWRlZmF1bHRdKQordGVzdCAteiAiJHBpY19tb2RlIiAmJiBwaWNfbW9kZT1kZWZhdWx0CisKKyMgVXNlIEMgZm9yIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gaW4gdGhlIGxpYnRvb2wgc2NyaXB0Cit0YWduYW1lPQorQUNfTElCVE9PTF9MQU5HX0NfQ09ORklHCitfTFRfQUNfVEFHQ09ORklHCitdKSMgQUNfTElCVE9PTF9TRVRVUAorCisKKyMgX0xUX0FDX1NZU19DT01QSUxFUgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbX0xUX0FDX1NZU19DT01QSUxFUl0sCitbQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCisKKyMgSWYgbm8gQyBjb21waWxlciB3YXMgc3BlY2lmaWVkLCB1c2UgQ0MuCitMVENDPSR7TFRDQy0iJENDIn0KKworIyBJZiBubyBDIGNvbXBpbGVyIGZsYWdzIHdlcmUgc3BlY2lmaWVkLCB1c2UgQ0ZMQUdTLgorTFRDRkxBR1M9JHtMVENGTEFHUy0iJENGTEFHUyJ9CisKKyMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCitjb21waWxlcj0kQ0MKK10pIyBfTFRfQUNfU1lTX0NPTVBJTEVSCisKKworIyBfTFRfQ0NfQkFTRU5BTUUoQ0MpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2FsY3VsYXRlIGNjX2Jhc2VuYW1lLiAgU2tpcCBrbm93biBjb21waWxlciB3cmFwcGVycyBhbmQgY3Jvc3MtcHJlZml4LgorQUNfREVGVU4oW19MVF9DQ19CQVNFTkFNRV0sCitbZm9yIGNjX3RlbXAgaW4gJDEiIjsgZG8KKyAgY2FzZSAkY2NfdGVtcCBpbgorICAgIGNvbXBpbGUgfCAqW1tcXC9dXWNvbXBpbGUgfCBjY2FjaGUgfCAqW1tcXC9dXWNjYWNoZSApIDs7CisgICAgZGlzdGNjIHwgKltbXFwvXV1kaXN0Y2MgfCBwdXJpZnkgfCAqW1tcXC9dXXB1cmlmeSApIDs7CisgICAgXC0qKSA7OworICAgICopIGJyZWFrOzsKKyAgZXNhYworZG9uZQorY2NfYmFzZW5hbWU9YCRlY2hvICJYJGNjX3RlbXAiIHwgJFhzZWQgLWUgJ3MlLiovJSUnIC1lICJzJV4kaG9zdF9hbGlhcy0lJSJgCitdKQorCisKKyMgX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayBmb3IgY29tcGlsZXIgYm9pbGVycGxhdGUgb3V0cHV0IG9yIHdhcm5pbmdzIHdpdGgKKyMgdGhlIHNpbXBsZSBjb21waWxlciB0ZXN0IGNvZGUuCitBQ19ERUZVTihbX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFXSwKK1thY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKK3ByaW50ZiAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKK2V2YWwgIiRhY19jb21waWxlIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgorX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAorJHJtIGNvbmZ0ZXN0KgorXSkjIF9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorCisKKyMgX0xUX0xJTktFUl9CT0lMRVJQTEFURQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIGZvciBsaW5rZXIgYm9pbGVycGxhdGUgb3V0cHV0IG9yIHdhcm5pbmdzIHdpdGgKKyMgdGhlIHNpbXBsZSBsaW5rIHRlc3QgY29kZS4KK0FDX0RFRlVOKFtfTFRfTElOS0VSX0JPSUxFUlBMQVRFXSwKK1thY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKK3ByaW50ZiAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKK2V2YWwgIiRhY19saW5rIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgorX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKKyRybSBjb25mdGVzdCoKK10pIyBfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisKKworIyBfTFRfQUNfU1lTX0xJQlBBVEhfQUlYCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTGlua3MgYSBtaW5pbWFsIHByb2dyYW0gYW5kIGNoZWNrcyB0aGUgZXhlY3V0YWJsZQorIyBmb3IgdGhlIHN5c3RlbSBkZWZhdWx0IGhhcmRjb2RlZCBsaWJyYXJ5IHBhdGguIEluIG1vc3QgY2FzZXMsCisjIHRoaXMgaXMgL3Vzci9saWI6L2xpYiwgYnV0IHdoZW4gdGhlIE1QSSBjb21waWxlcnMgYXJlIHVzZWQKKyMgdGhlIGxvY2F0aW9uIG9mIHRoZSBjb21tdW5pY2F0aW9uIGFuZCBNUEkgbGlicyBhcmUgaW5jbHVkZWQgdG9vLgorIyBJZiB3ZSBkb24ndCBmaW5kIGFueXRoaW5nLCB1c2UgdGhlIGRlZmF1bHQgbGlicmFyeSBwYXRoIGFjY29yZGluZworIyB0byB0aGUgYWl4IGxkIG1hbnVhbC4KK0FDX0RFRlVOKFtfTFRfQUNfU1lTX0xJQlBBVEhfQUlYXSwKK1tBQ19MSU5LX0lGRUxTRShBQ19MQU5HX1BST0dSQU0sWworYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAnL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geyAvXjAvIHsgcy9eMCAgKlwoLipcKSQvXDEvOyBwOyB9Cit9J2AKKyMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KK2lmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAnL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geyAvXjAvIHsgcy9eMCAgKlwoLipcKSQvXDEvOyBwOyB9Cit9J2A7IGZpXSxbXSkKK2lmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorXSkjIF9MVF9BQ19TWVNfTElCUEFUSF9BSVgKKworCisjIF9MVF9BQ19TSEVMTF9JTklUKEFSRykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW19MVF9BQ19TSEVMTF9JTklUXSwKK1tpZmRlZihbQUNfRElWRVJTSU9OX05PVElDRV0sCisJICAgICBbQUNfRElWRVJUX1BVU0goQUNfRElWRVJTSU9OX05PVElDRSldLAorCSBbQUNfRElWRVJUX1BVU0goTk9USUNFKV0pCiskMQorQUNfRElWRVJUX1BPUAorXSkjIF9MVF9BQ19TSEVMTF9JTklUCisKKworIyBfTFRfQUNfUFJPR19FQ0hPX0JBQ0tTTEFTSAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBZGQgc29tZSBjb2RlIHRvIHRoZSBzdGFydCBvZiB0aGUgZ2VuZXJhdGVkIGNvbmZpZ3VyZSBzY3JpcHQgd2hpY2gKKyMgd2lsbCBmaW5kIGFuIGVjaG8gY29tbWFuZCB3aGljaCBkb2Vzbid0IGludGVycHJldCBiYWNrc2xhc2hlcy4KK0FDX0RFRlVOKFtfTFRfQUNfUFJPR19FQ0hPX0JBQ0tTTEFTSF0sCitbX0xUX0FDX1NIRUxMX0lOSVQoWworIyBDaGVjayB0aGF0IHdlIGFyZSBydW5uaW5nIHVuZGVyIHRoZSBjb3JyZWN0IHNoZWxsLgorU0hFTEw9JHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0KKworY2FzZSBYJEVDSE8gaW4KK1gqLS1mYWxsYmFjay1lY2hvKQorICAjIFJlbW92ZSBvbmUgbGV2ZWwgb2YgcXVvdGF0aW9uICh3aGljaCB3YXMgcmVxdWlyZWQgZm9yIE1ha2UpLgorICBFQ0hPPWBlY2hvICIkRUNITyIgfCBzZWQgJ3MsXFxcXFxbJF1cXFskXTAsJ1skXTAnLCdgCisgIDs7Citlc2FjCisKK2VjaG89JHtFQ0hPLWVjaG99CitpZiB0ZXN0ICJYWyRdMSIgPSBYLS1uby1yZWV4ZWM7IHRoZW4KKyAgIyBEaXNjYXJkIHRoZSAtLW5vLXJlZXhlYyBmbGFnLCBhbmQgY29udGludWUuCisgIHNoaWZ0CitlbGlmIHRlc3QgIlhbJF0xIiA9IFgtLWZhbGxiYWNrLWVjaG87IHRoZW4KKyAgIyBBdm9pZCBpbmxpbmUgZG9jdW1lbnQgaGVyZSwgaXQgbWF5IGJlIGxlZnQgb3ZlcgorICA6CitlbGlmIHRlc3QgIlhgKCRlY2hvICdcdCcpIDI+L2Rldi9udWxsYCIgPSAnWFx0JyA7IHRoZW4KKyAgIyBZaXBwZWUsICRlY2hvIHdvcmtzIQorICA6CitlbHNlCisgICMgUmVzdGFydCB1bmRlciB0aGUgY29ycmVjdCBzaGVsbC4KKyAgZXhlYyAkU0hFTEwgIlskXTAiIC0tbm8tcmVleGVjICR7MSsiWyRdQCJ9CitmaQorCitpZiB0ZXN0ICJYWyRdMSIgPSBYLS1mYWxsYmFjay1lY2hvOyB0aGVuCisgICMgdXNlZCBhcyBmYWxsYmFjayBlY2hvCisgIHNoaWZ0CisgIGNhdCA8PEVPRgorWyRdKgorRU9GCisgIGV4aXQgMAorZmkKKworIyBUaGUgSFAtVVgga3NoIGFuZCBQT1NJWCBzaGVsbCBwcmludCB0aGUgdGFyZ2V0IGRpcmVjdG9yeSB0byBzdGRvdXQKKyMgaWYgQ0RQQVRIIGlzIHNldC4KKyh1bnNldCBDRFBBVEgpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBDRFBBVEgKKworaWYgdGVzdCAteiAiJEVDSE8iOyB0aGVuCitpZiB0ZXN0ICJYJHtlY2hvX3Rlc3Rfc3RyaW5nK3NldH0iICE9IFhzZXQ7IHRoZW4KKyMgZmluZCBhIHN0cmluZyBhcyBsYXJnZSBhcyBwb3NzaWJsZSwgYXMgbG9uZyBhcyB0aGUgc2hlbGwgY2FuIGNvcGUgd2l0aCBpdAorICBmb3IgY21kIGluICdzZWQgNTBxICJbJF0wIicgJ3NlZCAyMHEgIlskXTAiJyAnc2VkIDEwcSAiWyRdMCInICdzZWQgMnEgIlskXTAiJyAnZWNobyB0ZXN0JzsgZG8KKyAgICAjIGV4cGVjdGVkIHNpemVzOiBsZXNzIHRoYW4gMktiLCAxS2IsIDUxMiBieXRlcywgMTYgYnl0ZXMsIC4uLgorICAgIGlmIChlY2hvX3Rlc3Rfc3RyaW5nPWBldmFsICRjbWRgKSAyPi9kZXYvbnVsbCAmJgorICAgICAgIGVjaG9fdGVzdF9zdHJpbmc9YGV2YWwgJGNtZGAgJiYKKyAgICAgICAodGVzdCAiWCRlY2hvX3Rlc3Rfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbAorICAgIHRoZW4KKyAgICAgIGJyZWFrCisgICAgZmkKKyAgZG9uZQorZmkKKworaWYgdGVzdCAiWGAoJGVjaG8gJ1x0JykgMj4vZGV2L251bGxgIiA9ICdYXHQnICYmCisgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJGVjaG8gIiRlY2hvX3Rlc3Rfc3RyaW5nIikgMj4vZGV2L251bGxgICYmCisgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KKyAgOgorZWxzZQorICAjIFRoZSBTb2xhcmlzLCBBSVgsIGFuZCBEaWdpdGFsIFVuaXggZGVmYXVsdCBlY2hvIHByb2dyYW1zIHVucXVvdGUKKyAgIyBiYWNrc2xhc2hlcy4gIFRoaXMgbWFrZXMgaXQgaW1wb3NzaWJsZSB0byBxdW90ZSBiYWNrc2xhc2hlcyB1c2luZworICAjICAgZWNobyAiJHNvbWV0aGluZyIgfCBzZWQgJ3MvXFwvXFxcXC9nJworICAjCisgICMgU28sIGZpcnN0IHdlIGxvb2sgZm9yIGEgd29ya2luZyBlY2hvIGluIHRoZSB1c2VyJ3MgUEFUSC4KKworICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgZm9yIGRpciBpbiAkUEFUSCAvdXNyL3VjYjsgZG8KKyAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICBpZiAodGVzdCAtZiAkZGlyL2VjaG8gfHwgdGVzdCAtZiAkZGlyL2VjaG8kYWNfZXhlZXh0KSAmJgorICAgICAgIHRlc3QgIlhgKCRkaXIvZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAiID0gJ1hcdCcgJiYKKyAgICAgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJGRpci9lY2hvICIkZWNob190ZXN0X3N0cmluZyIpIDI+L2Rldi9udWxsYCAmJgorICAgICAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgorICAgICAgZWNobz0iJGRpci9lY2hvIgorICAgICAgYnJlYWsKKyAgICBmaQorICBkb25lCisgIElGUz0iJGx0X3NhdmVfaWZzIgorCisgIGlmIHRlc3QgIlgkZWNobyIgPSBYZWNobzsgdGhlbgorICAgICMgV2UgZGlkbid0IGZpbmQgYSBiZXR0ZXIgZWNobywgc28gbG9vayBmb3IgYWx0ZXJuYXRpdmVzLgorICAgIGlmIHRlc3QgIlhgKHByaW50IC1yICdcdCcpIDI+L2Rldi9udWxsYCIgPSAnWFx0JyAmJgorICAgICAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YChwcmludCAtciAiJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbGAgJiYKKyAgICAgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KKyAgICAgICMgVGhpcyBzaGVsbCBoYXMgYSBidWlsdGluIHByaW50IC1yIHRoYXQgZG9lcyB0aGUgdHJpY2suCisgICAgICBlY2hvPSdwcmludCAtcicKKyAgICBlbGlmICh0ZXN0IC1mIC9iaW4va3NoIHx8IHRlc3QgLWYgL2Jpbi9rc2gkYWNfZXhlZXh0KSAmJgorCSB0ZXN0ICJYJENPTkZJR19TSEVMTCIgIT0gWC9iaW4va3NoOyB0aGVuCisgICAgICAjIElmIHdlIGhhdmUga3NoLCB0cnkgcnVubmluZyBjb25maWd1cmUgYWdhaW4gd2l0aCBpdC4KKyAgICAgIE9SSUdJTkFMX0NPTkZJR19TSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQorICAgICAgZXhwb3J0IE9SSUdJTkFMX0NPTkZJR19TSEVMTAorICAgICAgQ09ORklHX1NIRUxMPS9iaW4va3NoCisgICAgICBleHBvcnQgQ09ORklHX1NIRUxMCisgICAgICBleGVjICRDT05GSUdfU0hFTEwgIlskXTAiIC0tbm8tcmVleGVjICR7MSsiWyRdQCJ9CisgICAgZWxzZQorICAgICAgIyBUcnkgdXNpbmcgcHJpbnRmLgorICAgICAgZWNobz0ncHJpbnRmICVzXG4nCisgICAgICBpZiB0ZXN0ICJYYCgkZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAiID0gJ1hcdCcgJiYKKwkgZWNob190ZXN0aW5nX3N0cmluZz1gKCRlY2hvICIkZWNob190ZXN0X3N0cmluZyIpIDI+L2Rldi9udWxsYCAmJgorCSB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KKwkjIENvb2wsIHByaW50ZiB3b3JrcworCToKKyAgICAgIGVsaWYgZWNob190ZXN0aW5nX3N0cmluZz1gKCRPUklHSU5BTF9DT05GSUdfU0hFTEwgIlskXTAiIC0tZmFsbGJhY2stZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAgJiYKKwkgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gJ1hcdCcgJiYKKwkgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJE9SSUdJTkFMX0NPTkZJR19TSEVMTCAiWyRdMCIgLS1mYWxsYmFjay1lY2hvICIkZWNob190ZXN0X3N0cmluZyIpIDI+L2Rldi9udWxsYCAmJgorCSAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgorCUNPTkZJR19TSEVMTD0kT1JJR0lOQUxfQ09ORklHX1NIRUxMCisJZXhwb3J0IENPTkZJR19TSEVMTAorCVNIRUxMPSIkQ09ORklHX1NIRUxMIgorCWV4cG9ydCBTSEVMTAorCWVjaG89IiRDT05GSUdfU0hFTEwgWyRdMCAtLWZhbGxiYWNrLWVjaG8iCisgICAgICBlbGlmIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkQ09ORklHX1NIRUxMICJbJF0wIiAtLWZhbGxiYWNrLWVjaG8gJ1x0JykgMj4vZGV2L251bGxgICYmCisJICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICdYXHQnICYmCisJICAgZWNob190ZXN0aW5nX3N0cmluZz1gKCRDT05GSUdfU0hFTEwgIlskXTAiIC0tZmFsbGJhY2stZWNobyAiJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbGAgJiYKKwkgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KKwllY2hvPSIkQ09ORklHX1NIRUxMIFskXTAgLS1mYWxsYmFjay1lY2hvIgorICAgICAgZWxzZQorCSMgbWF5YmUgd2l0aCBhIHNtYWxsZXIgc3RyaW5nLi4uCisJcHJldj06CisKKwlmb3IgY21kIGluICdlY2hvIHRlc3QnICdzZWQgMnEgIlskXTAiJyAnc2VkIDEwcSAiWyRdMCInICdzZWQgMjBxICJbJF0wIicgJ3NlZCA1MHEgIlskXTAiJzsgZG8KKwkgIGlmICh0ZXN0ICJYJGVjaG9fdGVzdF9zdHJpbmciID0gIlhgZXZhbCAkY21kYCIpIDI+L2Rldi9udWxsCisJICB0aGVuCisJICAgIGJyZWFrCisJICBmaQorCSAgcHJldj0iJGNtZCIKKwlkb25lCisKKwlpZiB0ZXN0ICIkcHJldiIgIT0gJ3NlZCA1MHEgIlskXTAiJzsgdGhlbgorCSAgZWNob190ZXN0X3N0cmluZz1gZXZhbCAkcHJldmAKKwkgIGV4cG9ydCBlY2hvX3Rlc3Rfc3RyaW5nCisJICBleGVjICR7T1JJR0lOQUxfQ09ORklHX1NIRUxMLSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9fSAiWyRdMCIgJHsxKyJbJF1AIn0KKwllbHNlCisJICAjIE9vcHMuICBXZSBsb3N0IGNvbXBsZXRlbHksIHNvIGp1c3Qgc3RpY2sgd2l0aCBlY2hvLgorCSAgZWNobz1lY2hvCisJZmkKKyAgICAgIGZpCisgICAgZmkKKyAgZmkKK2ZpCitmaQorCisjIENvcHkgZWNobyBhbmQgcXVvdGUgdGhlIGNvcHkgc3VpdGFibHkgZm9yIHBhc3NpbmcgdG8gbGlidG9vbCBmcm9tCisjIHRoZSBNYWtlZmlsZSwgaW5zdGVhZCBvZiBxdW90aW5nIHRoZSBvcmlnaW5hbCwgd2hpY2ggaXMgdXNlZCBsYXRlci4KK0VDSE89JGVjaG8KK2lmIHRlc3QgIlgkRUNITyIgPSAiWCRDT05GSUdfU0hFTEwgWyRdMCAtLWZhbGxiYWNrLWVjaG8iOyB0aGVuCisgICBFQ0hPPSIkQ09ORklHX1NIRUxMIFxcXCRcWyRdMCAtLWZhbGxiYWNrLWVjaG8iCitmaQorCitBQ19TVUJTVChFQ0hPKQorXSldKSMgX0xUX0FDX1BST0dfRUNIT19CQUNLU0xBU0gKKworCisjIF9MVF9BQ19MT0NLCisjIC0tLS0tLS0tLS0tCitBQ19ERUZVTihbX0xUX0FDX0xPQ0tdLAorW0FDX0FSR19FTkFCTEUoW2xpYnRvb2wtbG9ja10sCisgICAgW0FDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtbGlidG9vbC1sb2NrXSwKKwlbYXZvaWQgbG9ja2luZyAobWlnaHQgYnJlYWsgcGFyYWxsZWwgYnVpbGRzKV0pXSkKK3Rlc3QgIngkZW5hYmxlX2xpYnRvb2xfbG9jayIgIT0geG5vICYmIGVuYWJsZV9saWJ0b29sX2xvY2s9eWVzCisKKyMgU29tZSBmbGFncyBuZWVkIHRvIGJlIHByb3BhZ2F0ZWQgdG8gdGhlIGNvbXBpbGVyIG9yIGxpbmtlciBmb3IgZ29vZAorIyBsaWJ0b29sIHN1cHBvcnQuCitjYXNlICRob3N0IGluCitpYTY0LSotaHB1eCopCisgICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKyAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisgICAgKkVMRi0zMiopCisgICAgICBIUFVYX0lBNjRfTU9ERT0iMzIiCisgICAgICA7OworICAgICpFTEYtNjQqKQorICAgICAgSFBVWF9JQTY0X01PREU9IjY0IgorICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgOzsKKyotKi1pcml4NiopCisgICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKyAgZWNobyAnWyNdbGluZSBfX29saW5lX18gImNvbmZpZ3VyZSInID4gY29uZnRlc3QuJGFjX2V4dAorICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorICAgaWYgdGVzdCAiJGx0X2N2X3Byb2dfZ251X2xkIiA9IHllczsgdGhlbgorICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKyAgICAqMzItYml0KikKKyAgICAgIExEPSIke0xELWxkfSAtbWVsZjMyYnNtaXAiCisgICAgICA7OworICAgICpOMzIqKQorICAgICAgTEQ9IiR7TEQtbGR9IC1tZWxmMzJibWlwbjMyIgorICAgICAgOzsKKyAgICAqNjQtYml0KikKKyAgICAgIExEPSIke0xELWxkfSAtbWVsZjY0Ym1pcCIKKyAgICAgIDs7CisgICAgZXNhYworICAgZWxzZQorICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKyAgICAqMzItYml0KikKKyAgICAgIExEPSIke0xELWxkfSAtMzIiCisgICAgICA7OworICAgICpOMzIqKQorICAgICAgTEQ9IiR7TEQtbGR9IC1uMzIiCisgICAgICA7OworICAgICo2NC1iaXQqKQorICAgICAgTEQ9IiR7TEQtbGR9IC02NCIKKyAgICAgIDs7CisgICAgZXNhYworICAgZmkKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworCit4ODZfNjQtKmxpbnV4KnxwcGMqLSpsaW51eCp8cG93ZXJwYyotKmxpbnV4KnxzMzkwKi0qbGludXgqfHNwYXJjKi0qbGludXgqKQorICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCisgIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC5vYCBpbgorICAgICozMi1iaXQqKQorICAgICAgY2FzZSAkaG9zdCBpbgorICAgICAgICB4ODZfNjQtKmxpbnV4KikKKyAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX2kzODYiCisgICAgICAgICAgOzsKKyAgICAgICAgcHBjNjQtKmxpbnV4Knxwb3dlcnBjNjQtKmxpbnV4KikKKyAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJwcGNsaW51eCIKKyAgICAgICAgICA7OworICAgICAgICBzMzkweC0qbGludXgqKQorICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGZfczM5MCIKKyAgICAgICAgICA7OworICAgICAgICBzcGFyYzY0LSpsaW51eCopCisgICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjMyX3NwYXJjIgorICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworICAgICo2NC1iaXQqKQorICAgICAgY2FzZSAkaG9zdCBpbgorICAgICAgICB4ODZfNjQtKmxpbnV4KikKKyAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3g4Nl82NCIKKyAgICAgICAgICA7OworICAgICAgICBwcGMqLSpsaW51eCp8cG93ZXJwYyotKmxpbnV4KikKKyAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRwcGMiCisgICAgICAgICAgOzsKKyAgICAgICAgczM5MCotKmxpbnV4KikKKyAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfczM5MCIKKyAgICAgICAgICA7OworICAgICAgICBzcGFyYyotKmxpbnV4KikKKyAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfc3BhcmMiCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgICAgZXNhYworICBmaQorICBybSAtcmYgY29uZnRlc3QqCisgIDs7CisKKyotKi1zY28zLjJ2NSopCisgICMgT24gU0NPIE9wZW5TZXJ2ZXIgNSwgd2UgbmVlZCAtYmVsZiB0byBnZXQgZnVsbC1mZWF0dXJlZCBiaW5hcmllcy4KKyAgU0FWRV9DRkxBR1M9IiRDRkxBR1MiCisgIENGTEFHUz0iJENGTEFHUyAtYmVsZiIKKyAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgdGhlIEMgY29tcGlsZXIgbmVlZHMgLWJlbGZdLCBsdF9jdl9jY19uZWVkc19iZWxmLAorICAgIFtBQ19MQU5HX1BVU0goQykKKyAgICAgQUNfVFJZX0xJTksoW10sW10sW2x0X2N2X2NjX25lZWRzX2JlbGY9eWVzXSxbbHRfY3ZfY2NfbmVlZHNfYmVsZj1ub10pCisgICAgIEFDX0xBTkdfUE9QXSkKKyAgaWYgdGVzdCB4IiRsdF9jdl9jY19uZWVkc19iZWxmIiAhPSB4InllcyI7IHRoZW4KKyAgICAjIHRoaXMgaXMgcHJvYmFibHkgZ2NjIDIuOC4wLCBlZ2NzIDEuMCBvciBuZXdlcjsgbm8gbmVlZCBmb3IgLWJlbGYKKyAgICBDRkxBR1M9IiRTQVZFX0NGTEFHUyIKKyAgZmkKKyAgOzsKK3NwYXJjKi0qc29sYXJpcyopCisgICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKyAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0Lm9gIGluCisgICAgKjY0LWJpdCopCisgICAgICBjYXNlICRsdF9jdl9wcm9nX2dudV9sZCBpbgorICAgICAgeWVzKikgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3NwYXJjIiA7OworICAgICAgKikgICAgTEQ9IiR7TEQtbGR9IC02NCIgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgICAgZXNhYworICBmaQorICBybSAtcmYgY29uZnRlc3QqCisgIDs7CisKK0FDX1BST1ZJREVfSUZFTFNFKFtBQ19MSUJUT09MX1dJTjMyX0RMTF0sCitbKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqKQorICBBQ19DSEVDS19UT09MKERMTFRPT0wsIGRsbHRvb2wsIGZhbHNlKQorICBBQ19DSEVDS19UT09MKEFTLCBhcywgZmFsc2UpCisgIEFDX0NIRUNLX1RPT0woT0JKRFVNUCwgb2JqZHVtcCwgZmFsc2UpCisgIDs7CisgIF0pCitlc2FjCisKK25lZWRfbG9ja3M9IiRlbmFibGVfbGlidG9vbF9sb2NrIgorCitdKSMgX0xUX0FDX0xPQ0sKKworCisjIEFDX0xJQlRPT0xfQ09NUElMRVJfT1BUSU9OKE1FU1NBR0UsIFZBUklBQkxFLU5BTUUsIEZMQUdTLAorIwkJW09VVFBVVC1GSUxFXSwgW0FDVElPTi1TVUNDRVNTXSwgW0FDVElPTi1GQUlMVVJFXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBjb21waWxlciBvcHRpb24gd29ya3MKK0FDX0RFRlVOKFtBQ19MSUJUT09MX0NPTVBJTEVSX09QVElPTl0sCitbQUNfUkVRVUlSRShbTFRfQUNfUFJPR19TRURdKQorQUNfQ0FDSEVfQ0hFQ0soWyQxXSwgWyQyXSwKKyAgWyQyPW5vCisgIGlmZWxzZShbJDRdLCAsIFthY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHRdLCBbYWNfb3V0ZmlsZT0kNF0pCisgICBwcmludGYgIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgbHRfY29tcGlsZXJfZmxhZz0iJDMiCisgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgorICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KKyAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKKyAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCisgICAjIFRoZSBvcHRpb24gaXMgcmVmZXJlbmNlZCB2aWEgYSB2YXJpYWJsZSB0byBhdm9pZCBjb25mdXNpbmcgc2VkLgorICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCisgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAtZSAnczogW1teIF1dKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCisgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6X19vbGluZV9fOiAkbHRfY29tcGlsZVwiIiA+JkFTX01FU1NBR0VfTE9HX0ZEKQorICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKKyAgIGFjX3N0YXR1cz0kPworICAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisgICBlY2hvICIkYXNfbWU6X19vbGluZV9fOiBcJD8gPSAkYWNfc3RhdHVzIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zICIkYWNfb3V0ZmlsZSI7IHRoZW4KKyAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzIG90aGVyIHRoYW4gdGhlIHVzdWFsIG91dHB1dC4KKyAgICAgJGVjaG8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPmNvbmZ0ZXN0LmV4cAorICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKKyAgICAgaWYgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVyMiB8fCBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICQyPXllcworICAgICBmaQorICAgZmkKKyAgICRybSBjb25mdGVzdCoKK10pCisKK2lmIHRlc3QgeCJbJF0kMiIgPSB4eWVzOyB0aGVuCisgICAgaWZlbHNlKFskNV0sICwgOiwgWyQ1XSkKK2Vsc2UKKyAgICBpZmVsc2UoWyQ2XSwgLCA6LCBbJDZdKQorZmkKK10pIyBBQ19MSUJUT09MX0NPTVBJTEVSX09QVElPTgorCisKKyMgQUNfTElCVE9PTF9MSU5LRVJfT1BUSU9OKE1FU1NBR0UsIFZBUklBQkxFLU5BTUUsIEZMQUdTLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgW0FDVElPTi1TVUNDRVNTXSwgW0FDVElPTi1GQUlMVVJFXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGNvbXBpbGVyIG9wdGlvbiB3b3JrcworQUNfREVGVU4oW0FDX0xJQlRPT0xfTElOS0VSX09QVElPTl0sCitbQUNfQ0FDSEVfQ0hFQ0soWyQxXSwgWyQyXSwKKyAgWyQyPW5vCisgICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorICAgTERGTEFHUz0iJExERkxBR1MgJDMiCisgICBwcmludGYgIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgaWYgKGV2YWwgJGFjX2xpbmsgMj5jb25mdGVzdC5lcnIpICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgICAgICMgVGhlIGxpbmtlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKKyAgICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgICAjIEFwcGVuZCBhbnkgZXJyb3JzIHRvIHRoZSBjb25maWcubG9nLgorICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgICAkZWNobyAiWCRfbHRfbGlua2VyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPiBjb25mdGVzdC5leHAKKyAgICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKKyAgICAgICBpZiBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgJDI9eWVzCisgICAgICAgZmkKKyAgICAgZWxzZQorICAgICAgICQyPXllcworICAgICBmaQorICAgZmkKKyAgICRybSBjb25mdGVzdCoKKyAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCitdKQorCitpZiB0ZXN0IHgiWyRdJDIiID0geHllczsgdGhlbgorICAgIGlmZWxzZShbJDRdLCAsIDosIFskNF0pCitlbHNlCisgICAgaWZlbHNlKFskNV0sICwgOiwgWyQ1XSkKK2ZpCitdKSMgQUNfTElCVE9PTF9MSU5LRVJfT1BUSU9OCisKKworIyBBQ19MSUJUT09MX1NZU19NQVhfQ01EX0xFTgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX01BWF9DTURfTEVOXSwKK1sjIGZpbmQgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKK0FDX01TR19DSEVDS0lORyhbdGhlIG1heGltdW0gbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHNdKQorQUNfQ0FDSEVfVkFMKFtsdF9jdl9zeXNfbWF4X2NtZF9sZW5dLCBbZG5sCisgIGk9MAorICB0ZXN0c3RyaW5nPSJBQkNEIgorCisgIGNhc2UgJGJ1aWxkX29zIGluCisgIG1zZG9zZGpncHAqKQorICAgICMgT24gREpHUFAsIHRoaXMgdGVzdCBjYW4gYmxvdyB1cCBwcmV0dHkgYmFkbHkgZHVlIHRvIHByb2JsZW1zIGluIGxpYmMKKyAgICAjIChhbnkgc2luZ2xlIGFyZ3VtZW50IGV4Y2VlZGluZyAyMDAwIGJ5dGVzIGNhdXNlcyBhIGJ1ZmZlciBvdmVycnVuCisgICAgIyBkdXJpbmcgZ2xvYiBleHBhbnNpb24pLiAgRXZlbiBpZiBpdCB3ZXJlIGZpeGVkLCB0aGUgcmVzdWx0IG9mIHRoaXMKKyAgICAjIGNoZWNrIHdvdWxkIGJlIGxhcmdlciB0aGFuIGl0IHNob3VsZCBiZS4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTIyODg7ICAgICMgMTJLIGlzIGFib3V0IHJpZ2h0CisgICAgOzsKKworICBnbnUqKQorICAgICMgVW5kZXIgR05VIEh1cmQsIHRoaXMgdGVzdCBpcyBub3QgcmVxdWlyZWQgYmVjYXVzZSB0aGVyZSBpcworICAgICMgbm8gbGltaXQgdG8gdGhlIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgorICAgICMgTGlidG9vbCB3aWxsIGludGVycHJldCAtMSBhcyBubyBsaW1pdCB3aGF0c29ldmVyCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPS0xOworICAgIDs7CisKKyAgY3lnd2luKiB8IG1pbmd3KikKKyAgICAjIE9uIFdpbjl4L01FLCB0aGlzIHRlc3QgYmxvd3MgdXAgLS0gaXQgc3VjY2VlZHMsIGJ1dCB0YWtlcworICAgICMgYWJvdXQgNSBtaW51dGVzIGFzIHRoZSB0ZXN0c3RyaW5nIGdyb3dzIGV4cG9uZW50aWFsbHkuCisgICAgIyBXb3JzZSwgc2luY2UgOXgvTUUgYXJlIG5vdCBwcmUtZW1wdGl2ZWx5IG11bHRpdGFza2luZywKKyAgICAjIHlvdSBlbmQgdXAgd2l0aCBhICJmcm96ZW4iIGNvbXB1dGVyLCBldmVuIHRob3VnaCB3aXRoIHBhdGllbmNlCisgICAgIyB0aGUgdGVzdCBldmVudHVhbGx5IHN1Y2NlZWRzICh3aXRoIGEgbWF4IGxpbmUgbGVuZ3RoIG9mIDI1NmspLgorICAgICMgSW5zdGVhZCwgbGV0J3MganVzdCBwdW50OiB1c2UgdGhlIG1pbmltdW0gbGluZWxlbmd0aCByZXBvcnRlZCBieQorICAgICMgYWxsIG9mIHRoZSBzdXBwb3J0ZWQgcGxhdGZvcm1zOiA4MTkyIChvbiBOVC8ySy9YUCkuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTgxOTI7CisgICAgOzsKKworICBhbWlnYW9zKikKKyAgICAjIE9uIEFtaWdhT1Mgd2l0aCBwZGtzaCwgdGhpcyB0ZXN0IHRha2VzIGhvdXJzLCBsaXRlcmFsbHkuCisgICAgIyBTbyB3ZSBqdXN0IHB1bnQgYW5kIHVzZSBhIG1pbmltdW0gbGluZSBsZW5ndGggb2YgODE5Mi4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKKyAgICA7OworCisgIG5ldGJzZCogfCBmcmVlYnNkKiB8IG9wZW5ic2QqIHwgZGFyd2luKiB8IGRyYWdvbmZseSopCisgICAgIyBUaGlzIGhhcyBiZWVuIGFyb3VuZCBzaW5jZSAzODZCU0QsIGF0IGxlYXN0LiAgTGlrZWx5IGZ1cnRoZXIuCisgICAgaWYgdGVzdCAteCAvc2Jpbi9zeXNjdGw7IHRoZW4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gL3NiaW4vc3lzY3RsIC1uIGtlcm4uYXJnbWF4YAorICAgIGVsaWYgdGVzdCAteCAvdXNyL3NiaW4vc3lzY3RsOyB0aGVuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YC91c3Ivc2Jpbi9zeXNjdGwgLW4ga2Vybi5hcmdtYXhgCisgICAgZWxzZQorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTY1NTM2CSMgdXNhYmxlIGRlZmF1bHQgZm9yIGFsbCBCU0RzCisgICAgZmkKKyAgICAjIEFuZCBhZGQgYSBzYWZldHkgem9uZQorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDRgCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXCogM2AKKyAgICA7OworCisgIGludGVyaXgqKQorICAgICMgV2Uga25vdyB0aGUgdmFsdWUgMjYyMTQ0IGFuZCBoYXJkY29kZSBpdCB3aXRoIGEgc2FmZXR5IHpvbmUgKGxpa2UgQlNEKQorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xOTY2MDgKKyAgICA7OworCisgIG9zZiopCisgICAgIyBEci4gSGFucyBFa2tlaGFyZCBQbGVzc2VyIHJlcG9ydHMgc2VlaW5nIGEga2VybmVsIHBhbmljIHJ1bm5pbmcgY29uZmlndXJlCisgICAgIyBkdWUgdG8gdGhpcyB0ZXN0IHdoZW4gZXhlY19kaXNhYmxlX2FyZ19saW1pdCBpcyAxIG9uIFRydTY0LiBJdCBpcyBub3QKKyAgICAjIG5pY2UgdG8gY2F1c2Uga2VybmVsIHBhbmljcyBzbyBsZXRzIGF2b2lkIHRoZSBsb29wIGJlbG93LgorICAgICMgRmlyc3Qgc2V0IGEgcmVhc29uYWJsZSBkZWZhdWx0LgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xNjM4NAorICAgICMKKyAgICBpZiB0ZXN0IC14IC9zYmluL3N5c2NvbmZpZzsgdGhlbgorICAgICAgY2FzZSBgL3NiaW4vc3lzY29uZmlnIC1xIHByb2MgZXhlY19kaXNhYmxlX2FyZ19saW1pdGAgaW4KKyAgICAgICAgKjEqKSBsdF9jdl9zeXNfbWF4X2NtZF9sZW49LTEgOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICAgIDs7CisgIHNjbzMuMnY1KikKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTAyNDAwCisgICAgOzsKKyAgc3lzdjUqIHwgc2NvNXY2KiB8IHN5c3Y0LjJ1dzIqKQorICAgIGthcmdtYXg9YGdyZXAgQVJHX01BWCAvZXRjL2NvbmYvY2YuZC9zdHVuZSAyPi9kZXYvbnVsbGAKKyAgICBpZiB0ZXN0IC1uICIka2FyZ21heCI7IHRoZW4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZWNobyAka2FyZ21heCB8IHNlZCAncy8uKltbIAldXS8vJ2AKKyAgICBlbHNlCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MzI3NjgKKyAgICBmaQorICAgIDs7CisgICopCisgICAgIyBJZiB0ZXN0IGlzIG5vdCBhIHNoZWxsIGJ1aWx0LWluLCB3ZSdsbCBwcm9iYWJseSBlbmQgdXAgY29tcHV0aW5nIGEKKyAgICAjIG1heGltdW0gbGVuZ3RoIHRoYXQgaXMgb25seSBoYWxmIG9mIHRoZSBhY3R1YWwgbWF4aW11bSBsZW5ndGgsIGJ1dAorICAgICMgd2UgY2FuJ3QgdGVsbC4KKyAgICBTSEVMTD0ke1NIRUxMLSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9fQorICAgIHdoaWxlICh0ZXN0ICJYImAkU0hFTEwgWyRdMCAtLWZhbGxiYWNrLWVjaG8gIlgkdGVzdHN0cmluZyIgMj4vZGV2L251bGxgIFwKKwkgICAgICAgPSAiWFgkdGVzdHN0cmluZyIpID4vZGV2L251bGwgMj4mMSAmJgorCSAgICBuZXdfcmVzdWx0PWBleHByICJYJHRlc3RzdHJpbmciIDogIi4qIiAyPiYxYCAmJgorCSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49JG5ld19yZXN1bHQgJiYKKwkgICAgdGVzdCAkaSAhPSAxNyAjIDEvMiBNQiBzaG91bGQgYmUgZW5vdWdoCisgICAgZG8KKyAgICAgIGk9YGV4cHIgJGkgKyAxYAorICAgICAgdGVzdHN0cmluZz0kdGVzdHN0cmluZyR0ZXN0c3RyaW5nCisgICAgZG9uZQorICAgIHRlc3RzdHJpbmc9CisgICAgIyBBZGQgYSBzaWduaWZpY2FudCBzYWZldHkgZmFjdG9yIGJlY2F1c2UgQysrIGNvbXBpbGVycyBjYW4gdGFjayBvbiBtYXNzaXZlCisgICAgIyBhbW91bnRzIG9mIGFkZGl0aW9uYWwgYXJndW1lbnRzIGJlZm9yZSBwYXNzaW5nIHRoZW0gdG8gdGhlIGxpbmtlci4KKyAgICAjIEl0IGFwcGVhcnMgYXMgdGhvdWdoIDEvMiBpcyBhIHVzYWJsZSB2YWx1ZS4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyAyYAorICAgIDs7CisgIGVzYWMKK10pCitpZiB0ZXN0IC1uICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gOyB0aGVuCisgIEFDX01TR19SRVNVTFQoJGx0X2N2X3N5c19tYXhfY21kX2xlbikKK2Vsc2UKKyAgQUNfTVNHX1JFU1VMVChub25lKQorZmkKK10pIyBBQ19MSUJUT09MX1NZU19NQVhfQ01EX0xFTgorCisKKyMgX0xUX0FDX0NIRUNLX0RMRkNOCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW19MVF9BQ19DSEVDS19ETEZDTl0sCitbQUNfQ0hFQ0tfSEVBREVSUyhkbGZjbi5oKWRubAorXSkjIF9MVF9BQ19DSEVDS19ETEZDTgorCisKKyMgX0xUX0FDX1RSWV9ETE9QRU5fU0VMRiAoQUNUSU9OLUlGLVRSVUUsIEFDVElPTi1JRi1UUlVFLVctVVNDT1JFLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDVElPTi1JRi1GQUxTRSwgQUNUSU9OLUlGLUNST1NTLUNPTVBJTElORykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbX0xUX0FDX1RSWV9ETE9QRU5fU0VMRl0sCitbQUNfUkVRVUlSRShbX0xUX0FDX0NIRUNLX0RMRkNOXSlkbmwKK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgWyQ0XQorZWxzZQorICBsdF9kbHVua25vd249MDsgbHRfZGxub191c2NvcmU9MTsgbHRfZGxuZWVkX3VzY29yZT0yCisgIGx0X3N0YXR1cz0kbHRfZGx1bmtub3duCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKK1sjbGluZSBfX29saW5lX18gImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaWYgSEFWRV9ETEZDTl9ICisjaW5jbHVkZSA8ZGxmY24uaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lmZGVmIFJUTERfR0xPQkFMCisjICBkZWZpbmUgTFRfRExHTE9CQUwJCVJUTERfR0xPQkFMCisjZWxzZQorIyAgaWZkZWYgRExfR0xPQkFMCisjICAgIGRlZmluZSBMVF9ETEdMT0JBTAkJRExfR0xPQkFMCisjICBlbHNlCisjICAgIGRlZmluZSBMVF9ETEdMT0JBTAkJMAorIyAgZW5kaWYKKyNlbmRpZgorCisvKiBXZSBtYXkgaGF2ZSB0byBkZWZpbmUgTFRfRExMQVpZX09SX05PVyBpbiB0aGUgY29tbWFuZCBsaW5lIGlmIHdlCisgICBmaW5kIG91dCBpdCBkb2VzIG5vdCB3b3JrIGluIHNvbWUgcGxhdGZvcm0uICovCisjaWZuZGVmIExUX0RMTEFaWV9PUl9OT1cKKyMgIGlmZGVmIFJUTERfTEFaWQorIyAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkJUlRMRF9MQVpZCisjICBlbHNlCisjICAgIGlmZGVmIERMX0xBWlkKKyMgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkJRExfTEFaWQorIyAgICBlbHNlCisjICAgICAgaWZkZWYgUlRMRF9OT1cKKyMgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCVJUTERfTk9XCisjICAgICAgZWxzZQorIyAgICAgICAgaWZkZWYgRExfTk9XCisjICAgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCURMX05PVworIyAgICAgICAgZWxzZQorIyAgICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkwCisjICAgICAgICBlbmRpZgorIyAgICAgIGVuZGlmCisjICAgIGVuZGlmCisjICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB2b2lkIGV4aXQgKGludCk7CisjZW5kaWYKKwordm9pZCBmbm9yZCgpIHsgaW50IGk9NDI7fQoraW50IG1haW4gKCkKK3sKKyAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CisgIGludCBzdGF0dXMgPSAkbHRfZGx1bmtub3duOworCisgIGlmIChzZWxmKQorICAgIHsKKyAgICAgIGlmIChkbHN5bSAoc2VsZiwiZm5vcmQiKSkgICAgICAgc3RhdHVzID0gJGx0X2Rsbm9fdXNjb3JlOworICAgICAgZWxzZSBpZiAoZGxzeW0oIHNlbGYsIl9mbm9yZCIpKSBzdGF0dXMgPSAkbHRfZGxuZWVkX3VzY29yZTsKKyAgICAgIC8qIGRsY2xvc2UgKHNlbGYpOyAqLworICAgIH0KKyAgZWxzZQorICAgIHB1dHMgKGRsZXJyb3IgKCkpOworCisgICAgZXhpdCAoc3RhdHVzKTsKK31dCitFT0YKKyAgaWYgQUNfVFJZX0VWQUwoYWNfbGluaykgJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAyPi9kZXYvbnVsbDsgdGhlbgorICAgICguL2NvbmZ0ZXN0OyBleGl0OyApID4mQVNfTUVTU0FHRV9MT0dfRkQgMj4vZGV2L251bGwKKyAgICBsdF9zdGF0dXM9JD8KKyAgICBjYXNlIHgkbHRfc3RhdHVzIGluCisgICAgICB4JGx0X2Rsbm9fdXNjb3JlKSAkMSA7OworICAgICAgeCRsdF9kbG5lZWRfdXNjb3JlKSAkMiA7OworICAgICAgeCRsdF9kbHVua25vd258eCopICQzIDs7CisgICAgZXNhYworICBlbHNlIDoKKyAgICAjIGNvbXBpbGF0aW9uIGZhaWxlZAorICAgICQzCisgIGZpCitmaQorcm0gLWZyIGNvbmZ0ZXN0KgorXSkjIF9MVF9BQ19UUllfRExPUEVOX1NFTEYKKworCisjIEFDX0xJQlRPT0xfRExPUEVOX1NFTEYKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0FDX0xJQlRPT0xfRExPUEVOX1NFTEZdLAorW0FDX1JFUVVJUkUoW19MVF9BQ19DSEVDS19ETEZDTl0pZG5sCitpZiB0ZXN0ICJ4JGVuYWJsZV9kbG9wZW4iICE9IHh5ZXM7IHRoZW4KKyAgZW5hYmxlX2Rsb3Blbj11bmtub3duCisgIGVuYWJsZV9kbG9wZW5fc2VsZj11bmtub3duCisgIGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9dW5rbm93bgorZWxzZQorICBsdF9jdl9kbG9wZW49bm8KKyAgbHRfY3ZfZGxvcGVuX2xpYnM9CisKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBiZW9zKikKKyAgICBsdF9jdl9kbG9wZW49ImxvYWRfYWRkX29uIgorICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgIGx0X2N2X2Rsb3Blbl9zZWxmPXllcworICAgIDs7CisKKyAgbWluZ3cqIHwgcHczMiopCisgICAgbHRfY3ZfZGxvcGVuPSJMb2FkTGlicmFyeSIKKyAgICBsdF9jdl9kbG9wZW5fbGlicz0KKyAgIDs7CisKKyAgY3lnd2luKikKKyAgICBsdF9jdl9kbG9wZW49ImRsb3BlbiIKKyAgICBsdF9jdl9kbG9wZW5fbGlicz0KKyAgIDs7CisKKyAgZGFyd2luKikKKyAgIyBpZiBsaWJkbCBpcyBpbnN0YWxsZWQgd2UgbmVlZCB0byBsaW5rIGFnYWluc3QgaXQKKyAgICBBQ19DSEVDS19MSUIoW2RsXSwgW2Rsb3Blbl0sCisJCVtsdF9jdl9kbG9wZW49ImRsb3BlbiIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGwiXSxbCisgICAgbHRfY3ZfZGxvcGVuPSJkeWxkIgorICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgIGx0X2N2X2Rsb3Blbl9zZWxmPXllcworICAgIF0pCisgICA7OworCisgICopCisgICAgQUNfQ0hFQ0tfRlVOQyhbc2hsX2xvYWRdLAorCSAgW2x0X2N2X2Rsb3Blbj0ic2hsX2xvYWQiXSwKKyAgICAgIFtBQ19DSEVDS19MSUIoW2RsZF0sIFtzaGxfbG9hZF0sCisJICAgIFtsdF9jdl9kbG9wZW49InNobF9sb2FkIiBsdF9jdl9kbG9wZW5fbGlicz0iLWRsZCJdLAorCVtBQ19DSEVDS19GVU5DKFtkbG9wZW5dLAorCSAgICAgIFtsdF9jdl9kbG9wZW49ImRsb3BlbiJdLAorCSAgW0FDX0NIRUNLX0xJQihbZGxdLCBbZGxvcGVuXSwKKwkJW2x0X2N2X2Rsb3Blbj0iZGxvcGVuIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbCJdLAorCSAgICBbQUNfQ0hFQ0tfTElCKFtzdmxkXSwgW2Rsb3Blbl0sCisJCSAgW2x0X2N2X2Rsb3Blbj0iZGxvcGVuIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxzdmxkIl0sCisJICAgICAgW0FDX0NIRUNLX0xJQihbZGxkXSwgW2RsZF9saW5rXSwKKwkJICAgIFtsdF9jdl9kbG9wZW49ImRsZF9saW5rIiBsdF9jdl9kbG9wZW5fbGlicz0iLWRsZCJdKQorCSAgICAgIF0pCisJICAgIF0pCisJICBdKQorCV0pCisgICAgICBdKQorICAgIDs7CisgIGVzYWMKKworICBpZiB0ZXN0ICJ4JGx0X2N2X2Rsb3BlbiIgIT0geG5vOyB0aGVuCisgICAgZW5hYmxlX2Rsb3Blbj15ZXMKKyAgZWxzZQorICAgIGVuYWJsZV9kbG9wZW49bm8KKyAgZmkKKworICBjYXNlICRsdF9jdl9kbG9wZW4gaW4KKyAgZGxvcGVuKQorICAgIHNhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKyAgICB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9kbGZjbl9oIiA9IHh5ZXMgJiYgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtREhBVkVfRExGQ05fSCIKKworICAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisgICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBMREZMQUdTPVwiXCRMREZMQUdTICRleHBvcnRfZHluYW1pY19mbGFnX3NwZWNcIgorCisgICAgc2F2ZV9MSUJTPSIkTElCUyIKKyAgICBMSUJTPSIkbHRfY3ZfZGxvcGVuX2xpYnMgJExJQlMiCisKKyAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBhIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGZdLAorCSAgbHRfY3ZfZGxvcGVuX3NlbGYsIFtkbmwKKwkgIF9MVF9BQ19UUllfRExPUEVOX1NFTEYoCisJICAgIGx0X2N2X2Rsb3Blbl9zZWxmPXllcywgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzLAorCSAgICBsdF9jdl9kbG9wZW5fc2VsZj1ubywgbHRfY3ZfZGxvcGVuX3NlbGY9Y3Jvc3MpCisgICAgXSkKKworICAgIGlmIHRlc3QgIngkbHRfY3ZfZGxvcGVuX3NlbGYiID0geHllczsgdGhlbgorICAgICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBMREZMQUdTPVwiXCRMREZMQUdTICRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY1wiCisgICAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBhIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGZdLAorICAgIAkgIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYywgW2RubAorCSAgX0xUX0FDX1RSWV9ETE9QRU5fU0VMRigKKwkgICAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPXllcywgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPXllcywKKwkgICAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPW5vLCAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPWNyb3NzKQorICAgICAgXSkKKyAgICBmaQorCisgICAgQ1BQRkxBR1M9IiRzYXZlX0NQUEZMQUdTIgorICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisgICAgTElCUz0iJHNhdmVfTElCUyIKKyAgICA7OworICBlc2FjCisKKyAgY2FzZSAkbHRfY3ZfZGxvcGVuX3NlbGYgaW4KKyAgeWVzfG5vKSBlbmFibGVfZGxvcGVuX3NlbGY9JGx0X2N2X2Rsb3Blbl9zZWxmIDs7CisgICopIGVuYWJsZV9kbG9wZW5fc2VsZj11bmtub3duIDs7CisgIGVzYWMKKworICBjYXNlICRsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMgaW4KKyAgeWVzfG5vKSBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPSRsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMgOzsKKyAgKikgZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz11bmtub3duIDs7CisgIGVzYWMKK2ZpCitdKSMgQUNfTElCVE9PTF9ETE9QRU5fU0VMRgorCisKKyMgQUNfTElCVE9PTF9QUk9HX0NDX0NfTyhbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayB0byBzZWUgaWYgb3B0aW9ucyAtYyBhbmQgLW8gYXJlIHNpbXVsdGFuZW91c2x5IHN1cHBvcnRlZCBieSBjb21waWxlcgorQUNfREVGVU4oW0FDX0xJQlRPT0xfUFJPR19DQ19DX09dLAorW0FDX1JFUVVJUkUoW19MVF9BQ19TWVNfQ09NUElMRVJdKWRubAorQUNfQ0FDSEVfQ0hFQ0soW2lmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHRdLAorICBbX0xUX0FDX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpXSwKKyAgW19MVF9BQ19UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKT1ubworICAgJHJtIC1yIGNvbmZ0ZXN0IDI+L2Rldi9udWxsCisgICBta2RpciBjb25mdGVzdAorICAgY2QgY29uZnRlc3QKKyAgIG1rZGlyIG91dAorICAgcHJpbnRmICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKworICAgbHRfY29tcGlsZXJfZmxhZz0iLW8gb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0IgorICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKKyAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCisgICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCisgICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgorICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCisgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAtZSAnczogW1teIF1dKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCisgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6X19vbGluZV9fOiAkbHRfY29tcGlsZVwiIiA+JkFTX01FU1NBR0VfTE9HX0ZEKQorICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPm91dC9jb25mdGVzdC5lcnIpCisgICBhY19zdGF0dXM9JD8KKyAgIGNhdCBvdXQvY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgIGVjaG8gIiRhc19tZTpfX29saW5lX186IFwkPyA9ICRhY19zdGF0dXMiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0CisgICB0aGVuCisgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworICAgICAkZWNobyAiWCRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+IG91dC9jb25mdGVzdC5leHAKKyAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIG91dC9jb25mdGVzdC5lcnIgPm91dC9jb25mdGVzdC5lcjIKKyAgICAgaWYgdGVzdCAhIC1zIG91dC9jb25mdGVzdC5lcjIgfHwgZGlmZiBvdXQvY29uZnRlc3QuZXhwIG91dC9jb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgIF9MVF9BQ19UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKT15ZXMKKyAgICAgZmkKKyAgIGZpCisgICBjaG1vZCB1K3cgLiAyPiZBU19NRVNTQUdFX0xPR19GRAorICAgJHJtIGNvbmZ0ZXN0KgorICAgIyBTR0kgQysrIGNvbXBpbGVyIHdpbGwgY3JlYXRlIGRpcmVjdG9yeSBvdXQvaWlfZmlsZXMvIGZvcgorICAgIyB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uCisgICB0ZXN0IC1kIG91dC9paV9maWxlcyAmJiAkcm0gb3V0L2lpX2ZpbGVzLyogJiYgcm1kaXIgb3V0L2lpX2ZpbGVzCisgICAkcm0gb3V0LyogJiYgcm1kaXIgb3V0CisgICBjZCAuLgorICAgcm1kaXIgY29uZnRlc3QKKyAgICRybSBjb25mdGVzdCoKK10pCitdKSMgQUNfTElCVE9PTF9QUk9HX0NDX0NfTworCisKKyMgQUNfTElCVE9PTF9TWVNfSEFSRF9MSU5LX0xPQ0tTKFtUQUdOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgdG8gc2VlIGlmIHdlIGNhbiBkbyBoYXJkIGxpbmtzIHRvIGxvY2sgc29tZSBmaWxlcyBpZiBuZWVkZWQKK0FDX0RFRlVOKFtBQ19MSUJUT09MX1NZU19IQVJEX0xJTktfTE9DS1NdLAorW0FDX1JFUVVJUkUoW19MVF9BQ19MT0NLXSlkbmwKKworaGFyZF9saW5rcz0ibm90dGVzdGVkIgoraWYgdGVzdCAiJF9MVF9BQ19UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKSIgPSBubyAmJiB0ZXN0ICIkbmVlZF9sb2NrcyIgIT0gbm87IHRoZW4KKyAgIyBkbyBub3Qgb3ZlcndyaXRlIHRoZSB2YWx1ZSBvZiBuZWVkX2xvY2tzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyCisgIEFDX01TR19DSEVDS0lORyhbaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzXSkKKyAgaGFyZF9saW5rcz15ZXMKKyAgJHJtIGNvbmZ0ZXN0KgorICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubworICB0b3VjaCBjb25mdGVzdC5hCisgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPiY1IHx8IGhhcmRfbGlua3M9bm8KKyAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KKyAgQUNfTVNHX1JFU1VMVChbJGhhcmRfbGlua3NdKQorICBpZiB0ZXN0ICIkaGFyZF9saW5rcyIgPSBubzsgdGhlbgorICAgIEFDX01TR19XQVJOKFtgJENDJyBkb2VzIG5vdCBzdXBwb3J0IGAtYyAtbycsIHNvIGBtYWtlIC1qJyBtYXkgYmUgdW5zYWZlXSkKKyAgICBuZWVkX2xvY2tzPXdhcm4KKyAgZmkKK2Vsc2UKKyAgbmVlZF9sb2Nrcz1ubworZmkKK10pIyBBQ19MSUJUT09MX1NZU19IQVJEX0xJTktfTE9DS1MKKworCisjIEFDX0xJQlRPT0xfT0JKRElSCisjIC0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQUNfTElCVE9PTF9PQkpESVJdLAorW0FDX0NBQ0hFX0NIRUNLKFtmb3Igb2JqZGlyXSwgW2x0X2N2X29iamRpcl0sCitbcm0gLWYgLmxpYnMgMj4vZGV2L251bGwKK21rZGlyIC5saWJzIDI+L2Rldi9udWxsCitpZiB0ZXN0IC1kIC5saWJzOyB0aGVuCisgIGx0X2N2X29iamRpcj0ubGlicworZWxzZQorICAjIE1TLURPUyBkb2VzIG5vdCBhbGxvdyBmaWxlbmFtZXMgdGhhdCBiZWdpbiB3aXRoIGEgZG90LgorICBsdF9jdl9vYmpkaXI9X2xpYnMKK2ZpCitybWRpciAubGlicyAyPi9kZXYvbnVsbF0pCitvYmpkaXI9JGx0X2N2X29iamRpcgorXSkjIEFDX0xJQlRPT0xfT0JKRElSCisKKworIyBBQ19MSUJUT09MX1BST0dfTERfSEFSRENPREVfTElCUEFUSChbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgaGFyZGNvZGluZyBhdHRyaWJ1dGVzLgorQUNfREVGVU4oW0FDX0xJQlRPT0xfUFJPR19MRF9IQVJEQ09ERV9MSUJQQVRIXSwKK1tBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXNdKQorX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT0KK2lmIHRlc3QgLW4gIiRfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKSIgfHwgXAorICAgdGVzdCAtbiAiJF9MVF9BQ19UQUdWQVIocnVucGF0aF92YXIsICQxKSIgfHwgXAorICAgdGVzdCAiWCRfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpIiA9ICJYeWVzIiA7IHRoZW4KKworICAjIFdlIGNhbiBoYXJkY29kZSBub24tZXhpc3RhbnQgZGlyZWN0b3JpZXMuCisgIGlmIHRlc3QgIiRfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpIiAhPSBubyAmJgorICAgICAjIElmIHRoZSBvbmx5IG1lY2hhbmlzbSB0byBhdm9pZCBoYXJkY29kaW5nIGlzIHNobGlicGF0aF92YXIsIHdlCisgICAgICMgaGF2ZSB0byByZWxpbmssIG90aGVyd2lzZSB3ZSBtaWdodCBsaW5rIHdpdGggYW4gaW5zdGFsbGVkIGxpYnJhcnkKKyAgICAgIyB3aGVuIHdlIHNob3VsZCBiZSBsaW5raW5nIHdpdGggYSB5ZXQtdG8tYmUtaW5zdGFsbGVkIG9uZQorICAgICAjIyB0ZXN0ICIkX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSkiICE9IG5vICYmCisgICAgIHRlc3QgIiRfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKSIgIT0gbm87IHRoZW4KKyAgICAjIExpbmtpbmcgYWx3YXlzIGhhcmRjb2RlcyB0aGUgdGVtcG9yYXJ5IGxpYnJhcnkgZGlyZWN0b3J5LgorICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSk9cmVsaW5rCisgIGVsc2UKKyAgICAjIFdlIGNhbiBsaW5rIHdpdGhvdXQgaGFyZGNvZGluZywgYW5kIHdlIGNhbiBoYXJkY29kZSBub25leGlzdGluZyBkaXJzLgorICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSk9aW1tZWRpYXRlCisgIGZpCitlbHNlCisgICMgV2UgY2Fubm90IGhhcmRjb2RlIGFueXRoaW5nLCBvciBlbHNlIHdlIGNhbiBvbmx5IGhhcmRjb2RlIGV4aXN0aW5nCisgICMgZGlyZWN0b3JpZXMuCisgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSk9dW5zdXBwb3J0ZWQKK2ZpCitBQ19NU0dfUkVTVUxUKFskX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKV0pCisKK2lmIHRlc3QgIiRfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpIiA9IHJlbGluazsgdGhlbgorICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQKKyAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubworZWxpZiB0ZXN0ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiA9IHllcyB8fAorICAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSBubzsgdGhlbgorICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBuZWNlc3NhcnkKKyAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1uZWVkbGVzcworZmkKK10pIyBBQ19MSUJUT09MX1BST0dfTERfSEFSRENPREVfTElCUEFUSAorCisKKyMgQUNfTElCVE9PTF9TWVNfTElCX1NUUklQCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX0xJQl9TVFJJUF0sCitbc3RyaXBsaWI9CitvbGRfc3RyaXBsaWI9CitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgc3RyaXBwaW5nIGxpYnJhcmllcyBpcyBwb3NzaWJsZV0pCitpZiB0ZXN0IC1uICIkU1RSSVAiICYmICRTVFJJUCAtViAyPiYxIHwgZ3JlcCAiR05VIHN0cmlwIiA+L2Rldi9udWxsOyB0aGVuCisgIHRlc3QgLXogIiRvbGRfc3RyaXBsaWIiICYmIG9sZF9zdHJpcGxpYj0iJFNUUklQIC0tc3RyaXAtZGVidWciCisgIHRlc3QgLXogIiRzdHJpcGxpYiIgJiYgc3RyaXBsaWI9IiRTVFJJUCAtLXN0cmlwLXVubmVlZGVkIgorICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorZWxzZQorIyBGSVhNRSAtIGluc2VydCBzb21lIHJlYWwgdGVzdHMsIGhvc3Rfb3MgaXNuJ3QgcmVhbGx5IGdvb2QgZW5vdWdoCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgIGRhcndpbiopCisgICAgICAgaWYgdGVzdCAtbiAiJFNUUklQIiA7IHRoZW4KKyAgICAgICAgIHN0cmlwbGliPSIkU1RSSVAgLXgiCisgICAgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgIGVsc2UKKyAgQUNfTVNHX1JFU1VMVChbbm9dKQorZmkKKyAgICAgICA7OworICAgKikKKyAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIDs7CisgIGVzYWMKK2ZpCitdKSMgQUNfTElCVE9PTF9TWVNfTElCX1NUUklQCisKKworIyBBQ19MSUJUT09MX1NZU19EWU5BTUlDX0xJTktFUgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQT1JUTUUgRmlsbCBpbiB5b3VyIGxkLnNvIGNoYXJhY3RlcmlzdGljcworQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX0RZTkFNSUNfTElOS0VSXSwKK1tBQ19NU0dfQ0hFQ0tJTkcoW2R5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljc10pCitsaWJyYXJ5X25hbWVzX3NwZWM9CitsaWJuYW1lX3NwZWM9J2xpYiRuYW1lJworc29uYW1lX3NwZWM9CitzaHJleHRfY21kcz0iLnNvIgorcG9zdGluc3RhbGxfY21kcz0KK3Bvc3R1bmluc3RhbGxfY21kcz0KK2ZpbmlzaF9jbWRzPQorZmluaXNoX2V2YWw9CitzaGxpYnBhdGhfdmFyPQorc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXVua25vd24KK3ZlcnNpb25fdHlwZT1ub25lCitkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCitzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiIKK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJENDIC1wcmludC1zZWFyY2gtZGlycyB8IGdyZXAgIl5saWJyYXJpZXM6IiB8ICRTRUQgLWUgInMvXmxpYnJhcmllczovLyIgLWUgInMsPS8sLyxnImAKKyAgaWYgZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBncmVwICc7JyA+L2Rldi9udWxsIDsgdGhlbgorICAgICMgaWYgdGhlIHBhdGggY29udGFpbnMgIjsiIHRoZW4gd2UgYXNzdW1lIGl0IHRvIGJlIHRoZSBzZXBhcmF0b3IKKyAgICAjIG90aGVyd2lzZSBkZWZhdWx0IHRvIHRoZSBzdGFuZGFyZCBwYXRoIHNlcGFyYXRvciAoaS5lLiAiOiIpIC0gaXQgaXMKKyAgICAjIGFzc3VtZWQgdGhhdCBubyBwYXJ0IG9mIGEgbm9ybWFsIHBhdGhuYW1lIGNvbnRhaW5zICI7IiBidXQgdGhhdCBzaG91bGQKKyAgICAjIG9rYXkgaW4gdGhlIHJlYWwgd29ybGQgd2hlcmUgIjsiIGluIGRpcnBhdGhzIGlzIGl0c2VsZiBwcm9ibGVtYXRpYy4KKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGVjaG8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCisgIGVsc2UKKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGVjaG8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisgIGZpCitlbHNlCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiIKK2ZpCituZWVkX2xpYl9wcmVmaXg9dW5rbm93bgoraGFyZGNvZGVfaW50b19saWJzPW5vCisKKyMgd2hlbiB5b3Ugc2V0IG5lZWRfdmVyc2lvbiB0byBubywgbWFrZSBzdXJlIGl0IGRvZXMgbm90IGNhdXNlIC1zZXRfdmVyc2lvbgorIyBmbGFncyB0byBiZSBsZWZ0IHdpdGhvdXQgYXJndW1lbnRzCituZWVkX3ZlcnNpb249dW5rbm93bgorCitjYXNlICRob3N0X29zIGluCithaXgzKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZS5hJworICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKKworICAjIEFJWCAzIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIHdlIGFwcGVuZCBhIG1ham9yIHZlcnNpb24gdG8gdGhlIG5hbWUuCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIDs7CisKK2FpeDQqIHwgYWl4NSopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICAjIEFJWCA1IHN1cHBvcnRzIElBNjQKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBlbHNlCisgICAgIyBXaXRoIEdDQyB1cCB0byAyLjk1LngsIGNvbGxlY3QyIHdvdWxkIGNyZWF0ZSBhbiBpbXBvcnQgZmlsZQorICAgICMgZm9yIGRlcGVuZGVuY2UgbGlicmFyaWVzLiAgVGhlIGltcG9ydCBmaWxlIHdvdWxkIHN0YXJ0IHdpdGgKKyAgICAjIHRoZSBsaW5lIGAjISAuJy4gIFRoaXMgd291bGQgY2F1c2UgdGhlIGdlbmVyYXRlZCBsaWJyYXJ5IHRvCisgICAgIyBkZXBlbmQgb24gYC4nLCBhbHdheXMgYW4gaW52YWxpZCBsaWJyYXJ5LiAgVGhpcyB3YXMgZml4ZWQgaW4KKyAgICAjIGRldmVsb3BtZW50IHNuYXBzaG90cyBvZiBHQ0MgcHJpb3IgdG8gMy4wLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeDQgfCBhaXg0LltbMDFdXSB8IGFpeDQuW1swMV1dLiopCisgICAgICBpZiB7IGVjaG8gJyNpZiBfX0dOVUNfXyA+IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gOTcpJworCSAgIGVjaG8gJyB5ZXMgJworCSAgIGVjaG8gJyNlbmRpZic7IH0gfCAke0NDfSAtRSAtIHwgZ3JlcCB5ZXMgPiAvZGV2L251bGw7IHRoZW4KKwk6CisgICAgICBlbHNlCisJY2FuX2J1aWxkX3NoYXJlZD1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgZXNhYworICAgICMgQUlYIChvbiBQb3dlciopIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIGN1cnJlbnRseSB3ZSBjYW4gbm90IGhhcmRjb2RlIGNvcnJlY3QKKyAgICAjIHNvbmFtZSBpbnRvIGV4ZWN1dGFibGUuIFByb2JhYmx5IHdlIGNhbiBhZGQgdmVyc2lvbmluZyBzdXBwb3J0IHRvCisgICAgIyBjb2xsZWN0Miwgc28gYWRkaXRpb25hbCBsaW5rcyBjYW4gYmUgdXNlZnVsIGluIGZ1dHVyZS4KKyAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKyAgICAgICMgSWYgdXNpbmcgcnVuIHRpbWUgbGlua2luZyAob24gQUlYIDQuMiBvciBsYXRlcikgdXNlIGxpYjxuYW1lPi5zbworICAgICAgIyBpbnN0ZWFkIG9mIGxpYjxuYW1lPi5hIHRvIGxldCBwZW9wbGUga25vdyB0aGF0IHRoZXNlIGFyZSBub3QKKyAgICAgICMgdHlwaWNhbCBBSVggc2hhcmVkIGxpYnJhcmllcy4KKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIGVsc2UKKyAgICAgICMgV2UgcHJlc2VydmUgLmEgYXMgZXh0ZW5zaW9uIGZvciBzaGFyZWQgbGlicmFyaWVzIHRocm91Z2ggQUlYNC4yCisgICAgICAjIGFuZCBsYXRlciB3aGVuIHdlIGFyZSBub3QgZG9pbmcgcnVuIHRpbWUgbGlua2luZy4KKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uYSAkbGlibmFtZS5hJworICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICBmaQorICAgIHNobGlicGF0aF92YXI9TElCUEFUSAorICBmaQorICA7OworCithbWlnYW9zKikKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5peGxpYnJhcnkgJGxpYm5hbWUuYScKKyAgIyBDcmVhdGUgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSBlbnRyaWVzIGluIC9zeXMvbGlicy4KKyAgZmluaXNoX2V2YWw9J2ZvciBsaWIgaW4gYGxzICRsaWJkaXIvKi5peGxpYnJhcnkgMj4vZGV2L251bGxgOyBkbyBsaWJuYW1lPWAkZWNobyAiWCRsaWIiIHwgJFhzZWQgLWUgJ1wnJ3MlXi4qL1woW1teL11dKlwpXC5peGxpYnJhcnkkJVwxJSdcJydgOyB0ZXN0ICRybSAvc3lzL2xpYnMvJHtsaWJuYW1lfV9peGxpYnJhcnkuYTsgJHNob3cgImNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEiOyBjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIHx8IGV4aXQgMTsgZG9uZScKKyAgOzsKKworYmVvcyopCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKKyAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgOzsKKworYnNkaVtbNDVdXSopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvWDExL2xpYiAvdXNyL2NvbnRyaWIvbGliIC9saWIgL3Vzci9sb2NhbC9saWIiCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCisgICMgdGhlIGRlZmF1bHQgbGQuc28uY29uZiBhbHNvIGNvbnRhaW5zIC91c3IvY29udHJpYi9saWIgYW5kCisgICMgL3Vzci9YMTFSNi9saWIgKC91c3IvWDExIGlzIGEgbGluayB0byAvdXNyL1gxMVI2KSwgYnV0IGxldCB1cyBhbGxvdworICAjIGxpYnRvb2wgdG8gaGFyZC1jb2RlIHRoZXNlIGludG8gcHJvZ3JhbXMKKyAgOzsKKworY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQorICB2ZXJzaW9uX3R5cGU9d2luZG93cworICBzaHJleHRfY21kcz0iLmRsbCIKKyAgbmVlZF92ZXJzaW9uPW5vCisgIG5lZWRfbGliX3ByZWZpeD1ubworCisgIGNhc2UgJEdDQywkaG9zdF9vcyBpbgorICB5ZXMsY3lnd2luKiB8IHllcyxtaW5ndyogfCB5ZXMscHczMiopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYScKKyAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CisgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTtlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KKyAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZX4KKyAgICAgIGNobW9kIGEreCBcJGRsZGlyLyRkbG5hbWUnCisgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+CisgICAgICAgJHJtIFwkZGxwYXRoJworICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBjeWd3aW4qKQorICAgICAgIyBDeWd3aW4gRExMcyB1c2UgJ2N5ZycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCisgICAgICBzb25hbWVfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL2N5Zy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIgL2xpYi93MzJhcGkgL2xpYiAvdXNyL2xvY2FsL2xpYiIKKyAgICAgIDs7CisgICAgbWluZ3cqKQorICAgICAgIyBNaW5HVyBETExzIHVzZSB0cmFkaXRpb25hbCAnbGliJyBwcmVmaXgKKyAgICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgZ3JlcCAiXmxpYnJhcmllczoiIHwgJFNFRCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAicyw9LywvLGciYAorICAgICAgaWYgZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBbZ3JlcCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGxdOyB0aGVuCisgICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEggcHJpbnRlZCBieQorICAgICAgICAjIG1pbmd3IGdjYywgYnV0IHdlIGFyZSBydW5uaW5nIG9uIEN5Z3dpbi4gR2NjIHByaW50cyBpdHMgc2VhcmNoCisgICAgICAgICMgcGF0aCB3aXRoIDsgc2VwYXJhdG9ycywgYW5kIHdpdGggZHJpdmUgbGV0dGVycy4gV2UgY2FuIGhhbmRsZSB0aGUKKyAgICAgICAgIyBkcml2ZSBsZXR0ZXJzIChjeWd3aW4gZmlsZXV0aWxzIHVuZGVyc3RhbmRzIHRoZW0pLCBzbyBsZWF2ZSB0aGVtLAorICAgICAgICAjIGVzcGVjaWFsbHkgYXMgd2UgbWlnaHQgcGFzcyBmaWxlcyBmb3VuZCB0aGVyZSB0byBhIG1pbmd3IG9iamR1bXAsCisgICAgICAgICMgd2hpY2ggd291bGRuJ3QgdW5kZXJzdGFuZCBhIGN5Z3dpbmlmaWVkIHBhdGguIEFoaC4KKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAorICAgICAgZWxzZQorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGVjaG8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisgICAgICBmaQorICAgICAgOzsKKyAgICBwdzMyKikKKyAgICAgICMgcHczMiBETExzIHVzZSAncHcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJworICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICA7OworICAgIGVzYWMKKyAgICA7OworCisgICopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKKyAgICA7OworICBlc2FjCisgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICMgRklYTUU6IGZpcnN0IHdlIHNob3VsZCBzZWFyY2ggLiBhbmQgdGhlIGRpcmVjdG9yeSB0aGUgZXhlY3V0YWJsZSBpcyBpbgorICBzaGxpYnBhdGhfdmFyPVBBVEgKKyAgOzsKKworZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGR5bGQiCisgIHZlcnNpb25fdHlwZT1kYXJ3aW4KKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHt2ZXJzdWZmaXh9JHNoYXJlZF9leHQgJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0ICR7bGlibmFtZX0kc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCcKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBzaGxpYnBhdGhfdmFyPURZTERfTElCUkFSWV9QQVRICisgIHNocmV4dF9jbWRzPSdgdGVzdCAuJG1vZHVsZSA9IC55ZXMgJiYgZWNobyAuc28gfHwgZWNobyAuZHlsaWJgJworICAjIEFwcGxlJ3MgZ2NjIHByaW50cyAnZ2NjIC1wcmludC1zZWFyY2gtZGlycycgZG9lc24ndCBvcGVyYXRlIHRoZSBzYW1lLgorICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJENDIC1wcmludC1zZWFyY2gtZGlycyB8IHRyICJcbiIgIiRQQVRIX1NFUEFSQVRPUiIgfCBzZWQgLWUgJ3MvbGlicmFyaWVzOi9AbGlicmFyaWVzOi8nIHwgdHIgIkAiICJcbiIgfCBncmVwICJebGlicmFyaWVzOiIgfCBzZWQgLWUgInMvXmxpYnJhcmllczovLyIgLWUgInMsPS8sLyxnIiAtZSAicywkUEFUSF9TRVBBUkFUT1IsICxnIiAtZSAicywuKiwmIC9saWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIsZyJgCisgIGVsc2UKKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy9saWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWInCisgIGZpCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvbGliIC91c3IvbGliJworICA7OworCitkZ3V4KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICA7OworCitmcmVlYnNkMSopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7CisKK2tmcmVlYnNkKi1nbnUpCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGR5bmFtaWNfbGlua2VyPSdHTlUgbGQuc28nCisgIDs7CisKK2ZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgIyBEcmFnb25GbHkgZG9lcyBub3QgaGF2ZSBhb3V0LiAgV2hlbi9pZiB0aGV5IGltcGxlbWVudCBhIG5ldworICAjIHZlcnNpb25pbmcgbWVjaGFuaXNtLCBhZGp1c3QgdGhpcy4KKyAgaWYgdGVzdCAteCAvdXNyL2Jpbi9vYmpmb3JtYXQ7IHRoZW4KKyAgICBvYmpmb3JtYXQ9YC91c3IvYmluL29iamZvcm1hdGAKKyAgZWxzZQorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBmcmVlYnNkW1sxMjNdXSopIG9iamZvcm1hdD1hb3V0IDs7CisgICAgKikgb2JqZm9ybWF0PWVsZiA7OworICAgIGVzYWMKKyAgZmkKKyAgdmVyc2lvbl90eXBlPWZyZWVic2QtJG9iamZvcm1hdAorICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KKyAgICBmcmVlYnNkLWVsZiopCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICAgIG5lZWRfdmVyc2lvbj1ubworICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICA7OworICAgIGZyZWVic2QtKikKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICAgICAgbmVlZF92ZXJzaW9uPXllcworICAgICAgOzsKKyAgZXNhYworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBjYXNlICRob3N0X29zIGluCisgIGZyZWVic2QyKikKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgOzsKKyAgZnJlZWJzZDMuW1swMV1dKiB8IGZyZWVic2RlbGYzLltbMDFdXSopCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICA7OworICBmcmVlYnNkMy5bWzItOV1dKiB8IGZyZWVic2RlbGYzLltbMi05XV0qIHwgXAorICBmcmVlYnNkNC5bWzAtNV1dIHwgZnJlZWJzZGVsZjQuW1swLTVdXSB8IGZyZWVic2Q0LjEuMSB8IGZyZWVic2RlbGY0LjEuMSkKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgOzsKKyAgZnJlZWJzZCopICMgZnJvbSA0LjYgb24KKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIDs7CisgIGVzYWMKKyAgOzsKKworZ251KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR7bWFqb3J9ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK2hwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorICAjIEdpdmUgYSBzb25hbWUgY29ycmVzcG9uZGluZyB0byB0aGUgbWFqb3IgdmVyc2lvbiBzbyB0aGF0IGRsZC5zbCByZWZ1c2VzIHRvCisgICMgbGluayBhZ2FpbnN0IG90aGVyIHZlcnNpb25zLgorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBjYXNlICRob3N0X2NwdSBpbgorICBpYTY0KikKKyAgICBzaHJleHRfY21kcz0nLnNvJworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNvIgorICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgaWYgdGVzdCAiWCRIUFVYX0lBNjRfTU9ERSIgPSBYMzI7IHRoZW4KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYiIKKyAgICBlbHNlCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXg2NCAvdXNyL2xvY2FsL2xpYi9ocHV4NjQiCisgICAgZmkKKyAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisgICAgOzsKKyAgIGhwcGEqNjQqKQorICAgICBzaHJleHRfY21kcz0nLnNsJworICAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCisgICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRIICMgSG93IHNob3VsZCB3ZSBoYW5kbGUgU0hMSUJfUEFUSAorICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCisgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL3BhMjBfNjQgL3Vzci9jY3MvbGliL3BhMjBfNjQiCisgICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKKyAgICAgOzsKKyAgICopCisgICAgc2hyZXh0X2NtZHM9Jy5zbCcKKyAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgorICAgIHNobGlicGF0aF92YXI9U0hMSUJfUEFUSAorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubyAjICtzIGlzIHJlcXVpcmVkIHRvIGVuYWJsZSBTSExJQl9QQVRICisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICA7OworICBlc2FjCisgICMgSFAtVVggcnVucyAqcmVhbGx5KiBzbG93bHkgdW5sZXNzIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG1vZGUgNTU1LgorICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA1NTUgJGxpYicKKyAgOzsKKworaW50ZXJpeDMqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBkeW5hbWljX2xpbmtlcj0nSW50ZXJpeCAzLnggbGQuc28uMSAoUEUsIGxpa2UgRUxGKScKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIG5vbnN0b3B1eCopIHZlcnNpb25fdHlwZT1ub25zdG9wdXggOzsKKyAgICAqKQorCWlmIHRlc3QgIiRsdF9jdl9wcm9nX2dudV9sZCIgPSB5ZXM7IHRoZW4KKwkJdmVyc2lvbl90eXBlPWxpbnV4CisJZWxzZQorCQl2ZXJzaW9uX3R5cGU9aXJpeAorCWZpIDs7CisgIGVzYWMKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgaXJpeDUqIHwgbm9uc3RvcHV4KikKKyAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9CisgICAgOzsKKyAgKikKKyAgICBjYXNlICRMRCBpbiAjIGxpYnRvb2wubTQgd2lsbCBhZGQgb25lIG9mIHRoZXNlIHN3aXRjaGVzIHRvIExECisgICAgKi0zMnwqIi0zMiAifCotbWVsZjMyYnNtaXB8KiItbWVsZjMyYnNtaXAgIikKKyAgICAgIGxpYnN1ZmY9IHNobGlic3VmZj0gbGlibWFnaWM9MzItYml0OzsKKyAgICAqLW4zMnwqIi1uMzIgInwqLW1lbGYzMmJtaXBuMzJ8KiItbWVsZjMyYm1pcG4zMiAiKQorICAgICAgbGlic3VmZj0zMiBzaGxpYnN1ZmY9TjMyIGxpYm1hZ2ljPU4zMjs7CisgICAgKi02NHwqIi02NCAifCotbWVsZjY0Ym1pcHwqIi1tZWxmNjRibWlwICIpCisgICAgICBsaWJzdWZmPTY0IHNobGlic3VmZj02NCBsaWJtYWdpYz02NC1iaXQ7OworICAgICopIGxpYnN1ZmY9IHNobGlic3VmZj0gbGlibWFnaWM9bmV2ZXItbWF0Y2g7OworICAgIGVzYWMKKyAgICA7OworICBlc2FjCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWSR7c2hsaWJzdWZmfV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJHtsaWJzdWZmfSAvbGliJHtsaWJzdWZmfSAvdXNyL2xvY2FsL2xpYiR7bGlic3VmZn0iCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0iCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworIyBObyBzaGFyZWQgbGliIHN1cHBvcnQgZm9yIExpbnV4IG9sZGxkLCBhb3V0LCBvciBjb2ZmLgorbGludXgqb2xkbGQqIHwgbGludXgqYW91dCogfCBsaW51eCpjb2ZmKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKKworIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgorbGludXgqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW4gJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICMgVGhpcyBpbXBsaWVzIG5vIGZhc3RfaW5zdGFsbCwgd2hpY2ggaXMgdW5hY2NlcHRhYmxlLgorICAjIFNvbWUgcmV3b3JrIHdpbGwgYmUgbmVlZGVkIHRvIGFsbG93IGZvciBmYXN0X2luc3RhbGwKKyAgIyBiZWZvcmUgdGhpcyBjYW4gYmUgZW5hYmxlZC4KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworCisgICMgZmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZworICBsaWJzdWZmPQorICBjYXNlICIkaG9zdF9jcHUiIGluCisgIHg4Nl82NCp8czM5MHgqfHBvd2VycGM2NCopCisgICAgZWNobyAnWyNdbGluZSBfX29saW5lX18gImNvbmZpZ3VyZSInID4gY29uZnRlc3QuJGFjX2V4dAorICAgIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisgICAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisgICAgICAqNjQtYml0KikKKyAgICAgICAgbGlic3VmZj02NAorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9saWIke2xpYnN1ZmZ9IC91c3IvbGliJHtsaWJzdWZmfSAvdXNyL2xvY2FsL2xpYiR7bGlic3VmZn0iCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgZmkKKyAgICBybSAtcmYgY29uZnRlc3QqCisgICAgOzsKKyAgZXNhYworCisgICMgQXBwZW5kIGxkLnNvLmNvbmYgY29udGVudHMgdG8gdGhlIHNlYXJjaCBwYXRoCisgIGlmIHRlc3QgLWYgL2V0Yy9sZC5zby5jb25mOyB0aGVuCisgICAgbHRfbGRfZXh0cmE9YGF3ayAnL15pbmNsdWRlIC8geyBzeXN0ZW0oc3ByaW50ZigiY2QgL2V0YzsgY2F0ICVzIDI+L2Rldi9udWxsIiwgXFskXTIpKTsgc2tpcCA9IDE7IH0geyBpZiAoIXNraXApIHByaW50IFxbJF0wOyBza2lwID0gMDsgfScgPCAvZXRjL2xkLnNvLmNvbmYgfCAkU0VEIC1lICdzL15bCSBdKi8vO3MvIy4qLy87L15bXlwvXS9kO3MvWzosCV0vIC9nO3MvPVtePV0qJC8vO3MvPVtePSBdKiAvIC9nOy9eJC9kJyB8IHRyICdcbicgJyAnYAorICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliJHtsaWJzdWZmfSAvdXNyL2xpYiR7bGlic3VmZn0gJGx0X2xkX2V4dHJhIgorICBmaQorCisgICMgV2UgdXNlZCB0byB0ZXN0IGZvciAvbGliL2xkLnNvLjEgYW5kIGRpc2FibGUgc2hhcmVkIGxpYnJhcmllcyBvbgorICAjIHBvd2VycGMsIGJlY2F1c2UgTWtMaW51eCBvbmx5IHN1cHBvcnRlZCBzaGFyZWQgbGlicmFyaWVzIHdpdGggdGhlCisgICMgR05VIGR5bmFtaWMgbGlua2VyLiAgU2luY2UgdGhpcyB3YXMgYnJva2VuIHdpdGggY3Jvc3MgY29tcGlsZXJzLAorICAjIG1vc3QgcG93ZXJwYy1saW51eCBib3hlcyBzdXBwb3J0IGR5bmFtaWMgbGlua2luZyB0aGVzZSBkYXlzIGFuZAorICAjIHBlb3BsZSBjYW4gYWx3YXlzIC0tZGlzYWJsZS1zaGFyZWQsIHRoZSB0ZXN0IHdhcyByZW1vdmVkLCBhbmQgd2UKKyAgIyBhc3N1bWUgdGhlIEdOVS9MaW51eCBkeW5hbWljIGxpbmtlciBpcyBpbiB1c2UuCisgIGR5bmFtaWNfbGlua2VyPSdHTlUvTGludXggbGQuc28nCisgIDs7CisKK2tuZXRic2QqLWdudSkKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgZHluYW1pY19saW5rZXI9J0dOVSBsZC5zbycKKyAgOzsKKworbmV0YnNkKikKKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCisgICAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKKyAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIChhLm91dCkgbGQuc28nCisgIGVsc2UKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgZHluYW1pY19saW5rZXI9J05ldEJTRCBsZC5lbGZfc28nCisgIGZpCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCituZXdzb3M2KQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgOzsKKworbnRvLXFueCopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIDs7CisKK29wZW5ic2QqKQorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliIgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgIyBTb21lIG9sZGVyIHZlcnNpb25zIG9mIE9wZW5CU0QgKDMuMyBhdCBsZWFzdCkgKmRvKiBuZWVkIHZlcnNpb25lZCBsaWJzLgorICBjYXNlICRob3N0X29zIGluCisgICAgb3BlbmJzZDMuMyB8IG9wZW5ic2QzLjMuKikgbmVlZF92ZXJzaW9uPXllcyA7OworICAgICopICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRfdmVyc2lvbj1ubyAgOzsKKyAgZXNhYworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBvcGVuYnNkMi5bWzg5XV0gfCBvcGVuYnNkMi5bWzg5XV0uKikKKwlzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKwk7OworICAgICAgKikKKwlzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisJOzsKKyAgICAgIGVzYWMKKyAgZWxzZQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgZmkKKyAgOzsKKworb3MyKikKKyAgbGlibmFtZV9zcGVjPSckbmFtZScKKyAgc2hyZXh0X2NtZHM9Ii5kbGwiCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fSAkbGlibmFtZS5hJworICBkeW5hbWljX2xpbmtlcj0nT1MvMiBsZC5leGUnCisgIHNobGlicGF0aF92YXI9TElCUEFUSAorICA7OworCitvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgIHZlcnNpb25fdHlwZT1vc2YKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL3NobGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYi9jbXBscnMvY2MgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIgL3Zhci9zaGxpYiIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiCisgIDs7CisKK3NvbGFyaXMqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICMgbGRkIGNvbXBsYWlucyB1bmxlc3MgbGlicmFyaWVzIGFyZSBleGVjdXRhYmxlCisgIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kICt4ICRsaWInCisgIDs7CisKK3N1bm9zNCopCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi91c3IvZXRjIiBsZGNvbmZpZyAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgZmkKKyAgbmVlZF92ZXJzaW9uPXllcworICA7OworCitzeXN2NCB8IHN5c3Y0LjMqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGNhc2UgJGhvc3RfdmVuZG9yIGluCisgICAgc25pKQorICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tQmxhcmdlZHluc3ltJworICAgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKyAgICAgIDs7CisgICAgc2llbWVucykKKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgOzsKKyAgICBtb3Rvcm9sYSkKKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgbmVlZF92ZXJzaW9uPW5vCisgICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL2xpYiAvdXNyL2xpYiAvdXNyL2Njcy9saWInCisgICAgICA7OworICBlc2FjCisgIDs7CisKK3N5c3Y0Kk1QKikKKyAgaWYgdGVzdCAtZCAvdXNyL25lYyA7dGhlbgorICAgIHZlcnNpb25fdHlwZT1saW51eAorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9LiR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9LiRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kbWFqb3InCisgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgZmkKKyAgOzsKKworc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKiB8IHN5c3Y0KnV3MiopCisgIHZlcnNpb25fdHlwZT1mcmVlYnNkLWVsZgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC91c3IvZ251L2xpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIgL2xpYicKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgZWxzZQorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9jY3MvbGliIC91c3IvbGliJworICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBzY28zLjJ2NSopCisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAvbGliIgorCTs7CisgICAgZXNhYworICBmaQorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9saWInCisgIDs7CisKK3V0czQqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIDs7CisKKyopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7Citlc2FjCitBQ19NU0dfUkVTVUxUKFskZHluYW1pY19saW5rZXJdKQordGVzdCAiJGR5bmFtaWNfbGlua2VyIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KKwordmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IlBBVEggJHNobGlicGF0aF92YXIgJHJ1bnBhdGhfdmFyIgoraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayBHQ0NfRVhFQ19QUkVGSVggQ09NUElMRVJfUEFUSCBMSUJSQVJZX1BBVEgiCitmaQorXSkjIEFDX0xJQlRPT0xfU1lTX0RZTkFNSUNfTElOS0VSCisKKworIyBfTFRfQUNfVEFHQ09ORklHCisjIC0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtfTFRfQUNfVEFHQ09ORklHXSwKK1tBQ19BUkdfV0lUSChbdGFnc10sCisgICAgW0FDX0hFTFBfU1RSSU5HKFstLXdpdGgtdGFnc0A8OkA9VEFHU0A6PkBdLAorICAgICAgICBbaW5jbHVkZSBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb25zIEA8OkBhdXRvbWF0aWNAOj5AXSldLAorICAgIFt0YWduYW1lcz0iJHdpdGh2YWwiXSkKKworaWYgdGVzdCAtZiAiJGx0bWFpbiIgJiYgdGVzdCAtbiAiJHRhZ25hbWVzIjsgdGhlbgorICBpZiB0ZXN0ICEgLWYgIiR7b2ZpbGV9IjsgdGhlbgorICAgIEFDX01TR19XQVJOKFtvdXRwdXQgZmlsZSBgJG9maWxlJyBkb2VzIG5vdCBleGlzdF0pCisgIGZpCisKKyAgaWYgdGVzdCAteiAiJExUQ0MiOyB0aGVuCisgICAgZXZhbCAiYCRTSEVMTCAke29maWxlfSAtLWNvbmZpZyB8IGdyZXAgJ15MVENDPSdgIgorICAgIGlmIHRlc3QgLXogIiRMVENDIjsgdGhlbgorICAgICAgQUNfTVNHX1dBUk4oW291dHB1dCBmaWxlIGAkb2ZpbGUnIGRvZXMgbm90IGxvb2sgbGlrZSBhIGxpYnRvb2wgc2NyaXB0XSkKKyAgICBlbHNlCisgICAgICBBQ19NU0dfV0FSTihbdXNpbmcgYExUQ0M9JExUQ0MnLCBleHRyYWN0ZWQgZnJvbSBgJG9maWxlJ10pCisgICAgZmkKKyAgZmkKKyAgaWYgdGVzdCAteiAiJExUQ0ZMQUdTIjsgdGhlbgorICAgIGV2YWwgImAkU0hFTEwgJHtvZmlsZX0gLS1jb25maWcgfCBncmVwICdeTFRDRkxBR1M9J2AiCisgIGZpCisKKyAgIyBFeHRyYWN0IGxpc3Qgb2YgYXZhaWxhYmxlIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBpbiAkb2ZpbGUuCisgICMgTm90ZSB0aGF0IHRoaXMgYXNzdW1lcyB0aGUgZW50aXJlIGxpc3QgaXMgb24gb25lIGxpbmUuCisgIGF2YWlsYWJsZV90YWdzPWBncmVwICJeYXZhaWxhYmxlX3RhZ3M9IiAiJHtvZmlsZX0iIHwgJFNFRCAtZSAncy9hdmFpbGFibGVfdGFncz1cKC4qJFwpL1wxLycgLWUgJ3MvXCIvL2cnYAorCisgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgorICBmb3IgdGFnbmFtZSBpbiAkdGFnbmFtZXM7IGRvCisgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgIyBDaGVjayB3aGV0aGVyIHRhZ25hbWUgY29udGFpbnMgb25seSB2YWxpZCBjaGFyYWN0ZXJzCisgICAgY2FzZSBgJGVjaG8gIlgkdGFnbmFtZSIgfCAkWHNlZCAtZSAnczpbWy1fQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejEyMzQ1Njc4OTAsL11dOjpnJ2AgaW4KKyAgICAiIikgOzsKKyAgICAqKSAgQUNfTVNHX0VSUk9SKFtpbnZhbGlkIHRhZyBuYW1lOiAkdGFnbmFtZV0pCisJOzsKKyAgICBlc2FjCisKKyAgICBpZiBncmVwICJeIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAkdGFnbmFtZSQiIDwgIiR7b2ZpbGV9IiA+IC9kZXYvbnVsbAorICAgIHRoZW4KKyAgICAgIEFDX01TR19FUlJPUihbdGFnIG5hbWUgXCIkdGFnbmFtZVwiIGFscmVhZHkgZXhpc3RzXSkKKyAgICBmaQorCisgICAgIyBVcGRhdGUgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIHRhZ3MuCisgICAgaWYgdGVzdCAtbiAiJHRhZ25hbWUiOyB0aGVuCisgICAgICBlY2hvIGFwcGVuZGluZyBjb25maWd1cmF0aW9uIHRhZyBcIiR0YWduYW1lXCIgdG8gJG9maWxlCisKKyAgICAgIGNhc2UgJHRhZ25hbWUgaW4KKyAgICAgIENYWCkKKwlpZiB0ZXN0IC1uICIkQ1hYIiAmJiAoIHRlc3QgIlgkQ1hYIiAhPSAiWG5vIiAmJgorCSAgICAoICh0ZXN0ICJYJENYWCIgPSAiWGcrKyIgJiYgYGcrKyAtdiA+L2Rldi9udWxsIDI+JjFgICkgfHwKKwkgICAgKHRlc3QgIlgkQ1hYIiAhPSAiWGcrKyIpKSkgOyB0aGVuCisJICBBQ19MSUJUT09MX0xBTkdfQ1hYX0NPTkZJRworCWVsc2UKKwkgIHRhZ25hbWU9IiIKKwlmaQorCTs7CisKKyAgICAgIEY3NykKKwlpZiB0ZXN0IC1uICIkRjc3IiAmJiB0ZXN0ICJYJEY3NyIgIT0gIlhubyI7IHRoZW4KKwkgIEFDX0xJQlRPT0xfTEFOR19GNzdfQ09ORklHCisJZWxzZQorCSAgdGFnbmFtZT0iIgorCWZpCisJOzsKKworICAgICAgR0NKKQorCWlmIHRlc3QgLW4gIiRHQ0oiICYmIHRlc3QgIlgkR0NKIiAhPSAiWG5vIjsgdGhlbgorCSAgQUNfTElCVE9PTF9MQU5HX0dDSl9DT05GSUcKKwllbHNlCisJICB0YWduYW1lPSIiCisJZmkKKwk7OworCisgICAgICBSQykKKwlBQ19MSUJUT09MX0xBTkdfUkNfQ09ORklHCisJOzsKKworICAgICAgKikKKwlBQ19NU0dfRVJST1IoW1Vuc3VwcG9ydGVkIHRhZyBuYW1lOiAkdGFnbmFtZV0pCisJOzsKKyAgICAgIGVzYWMKKworICAgICAgIyBBcHBlbmQgdGhlIG5ldyB0YWcgbmFtZSB0byB0aGUgbGlzdCBvZiBhdmFpbGFibGUgdGFncy4KKyAgICAgIGlmIHRlc3QgLW4gIiR0YWduYW1lIiA7IHRoZW4KKyAgICAgIGF2YWlsYWJsZV90YWdzPSIkYXZhaWxhYmxlX3RhZ3MgJHRhZ25hbWUiCisgICAgZmkKKyAgICBmaQorICBkb25lCisgIElGUz0iJGx0X3NhdmVfaWZzIgorCisgICMgTm93IHN1YnN0aXR1dGUgdGhlIHVwZGF0ZWQgbGlzdCBvZiBhdmFpbGFibGUgdGFncy4KKyAgaWYgZXZhbCAic2VkIC1lICdzL15hdmFpbGFibGVfdGFncz0uKlwkL2F2YWlsYWJsZV90YWdzPVwiJGF2YWlsYWJsZV90YWdzXCIvJyBcIiRvZmlsZVwiID4gXCIke29maWxlfVRcIiI7IHRoZW4KKyAgICBtdiAiJHtvZmlsZX1UIiAiJG9maWxlIgorICAgIGNobW9kICt4ICIkb2ZpbGUiCisgIGVsc2UKKyAgICBybSAtZiAiJHtvZmlsZX1UIgorICAgIEFDX01TR19FUlJPUihbdW5hYmxlIHRvIHVwZGF0ZSBsaXN0IG9mIGF2YWlsYWJsZSB0YWdnZWQgY29uZmlndXJhdGlvbnMuXSkKKyAgZmkKK2ZpCitdKSMgX0xUX0FDX1RBR0NPTkZJRworCisKKyMgQUNfTElCVE9PTF9ETE9QRU4KKyMgLS0tLS0tLS0tLS0tLS0tLS0KKyMgZW5hYmxlIGNoZWNrcyBmb3IgZGxvcGVuIHN1cHBvcnQKK0FDX0RFRlVOKFtBQ19MSUJUT09MX0RMT1BFTl0sCisgW0FDX0JFRk9SRShbJDBdLFtBQ19MSUJUT09MX1NFVFVQXSkKK10pIyBBQ19MSUJUT09MX0RMT1BFTgorCisKKyMgQUNfTElCVE9PTF9XSU4zMl9ETEwKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgZGVjbGFyZSBwYWNrYWdlIHN1cHBvcnQgZm9yIGJ1aWxkaW5nIHdpbjMyIERMTHMKK0FDX0RFRlVOKFtBQ19MSUJUT09MX1dJTjMyX0RMTF0sCitbQUNfQkVGT1JFKFskMF0sIFtBQ19MSUJUT09MX1NFVFVQXSkKK10pIyBBQ19MSUJUT09MX1dJTjMyX0RMTAorCisKKyMgQUNfRU5BQkxFX1NIQVJFRChbREVGQVVMVF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBpbXBsZW1lbnQgdGhlIC0tZW5hYmxlLXNoYXJlZCBmbGFnCisjIERFRkFVTFQgaXMgZWl0aGVyIGB5ZXMnIG9yIGBubycuICBJZiBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBgeWVzJy4KK0FDX0RFRlVOKFtBQ19FTkFCTEVfU0hBUkVEXSwKK1tkZWZpbmUoW0FDX0VOQUJMRV9TSEFSRURfREVGQVVMVF0sIGlmZWxzZSgkMSwgbm8sIG5vLCB5ZXMpKWRubAorQUNfQVJHX0VOQUJMRShbc2hhcmVkXSwKKyAgICBbQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXNoYXJlZEA8OkA9UEtHU0A6PkBdLAorCVtidWlsZCBzaGFyZWQgbGlicmFyaWVzIEA8OkBkZWZhdWx0PV1BQ19FTkFCTEVfU0hBUkVEX0RFRkFVTFRbQDo+QF0pXSwKKyAgICBbcD0ke1BBQ0tBR0UtZGVmYXVsdH0KKyAgICBjYXNlICRlbmFibGV2YWwgaW4KKyAgICB5ZXMpIGVuYWJsZV9zaGFyZWQ9eWVzIDs7CisgICAgbm8pIGVuYWJsZV9zaGFyZWQ9bm8gOzsKKyAgICAqKQorICAgICAgZW5hYmxlX3NoYXJlZD1ubworICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgorICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCisgICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCisJSUZTPSIkbHRfc2F2ZV9pZnMiCisJaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KKwkgIGVuYWJsZV9zaGFyZWQ9eWVzCisJZmkKKyAgICAgIGRvbmUKKyAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgICAgOzsKKyAgICBlc2FjXSwKKyAgICBbZW5hYmxlX3NoYXJlZD1dQUNfRU5BQkxFX1NIQVJFRF9ERUZBVUxUKQorXSkjIEFDX0VOQUJMRV9TSEFSRUQKKworCisjIEFDX0RJU0FCTEVfU0hBUkVECisjIC0tLS0tLS0tLS0tLS0tLS0tCisjIHNldCB0aGUgZGVmYXVsdCBzaGFyZWQgZmxhZyB0byAtLWRpc2FibGUtc2hhcmVkCitBQ19ERUZVTihbQUNfRElTQUJMRV9TSEFSRURdLAorW0FDX0JFRk9SRShbJDBdLFtBQ19MSUJUT09MX1NFVFVQXSlkbmwKK0FDX0VOQUJMRV9TSEFSRUQobm8pCitdKSMgQUNfRElTQUJMRV9TSEFSRUQKKworCisjIEFDX0VOQUJMRV9TVEFUSUMoW0RFRkFVTFRdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgaW1wbGVtZW50IHRoZSAtLWVuYWJsZS1zdGF0aWMgZmxhZworIyBERUZBVUxUIGlzIGVpdGhlciBgeWVzJyBvciBgbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYHllcycuCitBQ19ERUZVTihbQUNfRU5BQkxFX1NUQVRJQ10sCitbZGVmaW5lKFtBQ19FTkFCTEVfU1RBVElDX0RFRkFVTFRdLCBpZmVsc2UoJDEsIG5vLCBubywgeWVzKSlkbmwKK0FDX0FSR19FTkFCTEUoW3N0YXRpY10sCisgICAgW0FDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1zdGF0aWNAPDpAPVBLR1NAOj5AXSwKKwlbYnVpbGQgc3RhdGljIGxpYnJhcmllcyBAPDpAZGVmYXVsdD1dQUNfRU5BQkxFX1NUQVRJQ19ERUZBVUxUW0A6PkBdKV0sCisgICAgW3A9JHtQQUNLQUdFLWRlZmF1bHR9CisgICAgY2FzZSAkZW5hYmxldmFsIGluCisgICAgeWVzKSBlbmFibGVfc3RhdGljPXllcyA7OworICAgIG5vKSBlbmFibGVfc3RhdGljPW5vIDs7CisgICAgKikKKyAgICAgZW5hYmxlX3N0YXRpYz1ubworICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgorICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCisgICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCisJSUZTPSIkbHRfc2F2ZV9pZnMiCisJaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KKwkgIGVuYWJsZV9zdGF0aWM9eWVzCisJZmkKKyAgICAgIGRvbmUKKyAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgICAgOzsKKyAgICBlc2FjXSwKKyAgICBbZW5hYmxlX3N0YXRpYz1dQUNfRU5BQkxFX1NUQVRJQ19ERUZBVUxUKQorXSkjIEFDX0VOQUJMRV9TVEFUSUMKKworCisjIEFDX0RJU0FCTEVfU1RBVElDCisjIC0tLS0tLS0tLS0tLS0tLS0tCisjIHNldCB0aGUgZGVmYXVsdCBzdGF0aWMgZmxhZyB0byAtLWRpc2FibGUtc3RhdGljCitBQ19ERUZVTihbQUNfRElTQUJMRV9TVEFUSUNdLAorW0FDX0JFRk9SRShbJDBdLFtBQ19MSUJUT09MX1NFVFVQXSlkbmwKK0FDX0VOQUJMRV9TVEFUSUMobm8pCitdKSMgQUNfRElTQUJMRV9TVEFUSUMKKworCisjIEFDX0VOQUJMRV9GQVNUX0lOU1RBTEwoW0RFRkFVTFRdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgaW1wbGVtZW50IHRoZSAtLWVuYWJsZS1mYXN0LWluc3RhbGwgZmxhZworIyBERUZBVUxUIGlzIGVpdGhlciBgeWVzJyBvciBgbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYHllcycuCitBQ19ERUZVTihbQUNfRU5BQkxFX0ZBU1RfSU5TVEFMTF0sCitbZGVmaW5lKFtBQ19FTkFCTEVfRkFTVF9JTlNUQUxMX0RFRkFVTFRdLCBpZmVsc2UoJDEsIG5vLCBubywgeWVzKSlkbmwKK0FDX0FSR19FTkFCTEUoW2Zhc3QtaW5zdGFsbF0sCisgICAgW0FDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1mYXN0LWluc3RhbGxAPDpAPVBLR1NAOj5AXSwKKyAgICBbb3B0aW1pemUgZm9yIGZhc3QgaW5zdGFsbGF0aW9uIEA8OkBkZWZhdWx0PV1BQ19FTkFCTEVfRkFTVF9JTlNUQUxMX0RFRkFVTFRbQDo+QF0pXSwKKyAgICBbcD0ke1BBQ0tBR0UtZGVmYXVsdH0KKyAgICBjYXNlICRlbmFibGV2YWwgaW4KKyAgICB5ZXMpIGVuYWJsZV9mYXN0X2luc3RhbGw9eWVzIDs7CisgICAgbm8pIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8gOzsKKyAgICAqKQorICAgICAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubworICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgorICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCisgICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCisJSUZTPSIkbHRfc2F2ZV9pZnMiCisJaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KKwkgIGVuYWJsZV9mYXN0X2luc3RhbGw9eWVzCisJZmkKKyAgICAgIGRvbmUKKyAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgICAgOzsKKyAgICBlc2FjXSwKKyAgICBbZW5hYmxlX2Zhc3RfaW5zdGFsbD1dQUNfRU5BQkxFX0ZBU1RfSU5TVEFMTF9ERUZBVUxUKQorXSkjIEFDX0VOQUJMRV9GQVNUX0lOU1RBTEwKKworCisjIEFDX0RJU0FCTEVfRkFTVF9JTlNUQUxMCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIHNldCB0aGUgZGVmYXVsdCB0byAtLWRpc2FibGUtZmFzdC1pbnN0YWxsCitBQ19ERUZVTihbQUNfRElTQUJMRV9GQVNUX0lOU1RBTExdLAorW0FDX0JFRk9SRShbJDBdLFtBQ19MSUJUT09MX1NFVFVQXSlkbmwKK0FDX0VOQUJMRV9GQVNUX0lOU1RBTEwobm8pCitdKSMgQUNfRElTQUJMRV9GQVNUX0lOU1RBTEwKKworCisjIEFDX0xJQlRPT0xfUElDTU9ERShbTU9ERV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGltcGxlbWVudCB0aGUgLS13aXRoLXBpYyBmbGFnCisjIE1PREUgaXMgZWl0aGVyIGB5ZXMnIG9yIGBubycuICBJZiBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBgYm90aCcuCitBQ19ERUZVTihbQUNfTElCVE9PTF9QSUNNT0RFXSwKK1tBQ19CRUZPUkUoWyQwXSxbQUNfTElCVE9PTF9TRVRVUF0pZG5sCitwaWNfbW9kZT1pZmVsc2UoJCMsMSwkMSxkZWZhdWx0KQorXSkjIEFDX0xJQlRPT0xfUElDTU9ERQorCisKKyMgQUNfUFJPR19FR1JFUAorIyAtLS0tLS0tLS0tLS0tCisjIFRoaXMgaXMgcHJlZGVmaW5lZCBzdGFydGluZyB3aXRoIEF1dG9jb25mIDIuNTQsIHNvIHRoaXMgY29uZGl0aW9uYWwKKyMgZGVmaW5pdGlvbiBjYW4gYmUgcmVtb3ZlZCBvbmNlIHdlIHJlcXVpcmUgQXV0b2NvbmYgMi41NCBvciBsYXRlci4KK200X2lmbmRlZihbQUNfUFJPR19FR1JFUF0sIFtBQ19ERUZVTihbQUNfUFJPR19FR1JFUF0sCitbQUNfQ0FDSEVfQ0hFQ0soW2ZvciBlZ3JlcF0sIFthY19jdl9wcm9nX2VncmVwXSwKKyAgIFtpZiBlY2hvIGEgfCAoZ3JlcCAtRSAnKGF8YiknKSA+L2Rldi9udWxsIDI+JjEKKyAgICB0aGVuIGFjX2N2X3Byb2dfZWdyZXA9J2dyZXAgLUUnCisgICAgZWxzZSBhY19jdl9wcm9nX2VncmVwPSdlZ3JlcCcKKyAgICBmaV0pCisgRUdSRVA9JGFjX2N2X3Byb2dfZWdyZXAKKyBBQ19TVUJTVChbRUdSRVBdKQorXSldKQorCisKKyMgQUNfUEFUSF9UT09MX1BSRUZJWAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tCisjIGZpbmQgYSBmaWxlIHByb2dyYW0gd2hpY2ggY2FuIHJlY29nbmlzZSBzaGFyZWQgbGlicmFyeQorQUNfREVGVU4oW0FDX1BBVEhfVE9PTF9QUkVGSVhdLAorW0FDX1JFUVVJUkUoW0FDX1BST0dfRUdSRVBdKWRubAorQUNfTVNHX0NIRUNLSU5HKFtmb3IgJDFdKQorQUNfQ0FDSEVfVkFMKGx0X2N2X3BhdGhfTUFHSUNfQ01ELAorW2Nhc2UgJE1BR0lDX0NNRCBpbgorW1tcXC8qXSB8ICA/OltcXC9dKl0pCisgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSIkTUFHSUNfQ01EIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyopCisgIGx0X3NhdmVfTUFHSUNfQ01EPSIkTUFHSUNfQ01EIgorICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2RubCAkYWNfZHVtbXkgZm9yY2VzIHNwbGl0dGluZyBvbiBjb25zdGFudCB1c2VyLXN1cHBsaWVkIHBhdGhzLgorZG5sIFBPU0lYLjIgd29yZCBzcGxpdHRpbmcgaXMgZG9uZSBvbmx5IG9uIHRoZSBvdXRwdXQgb2Ygd29yZCBleHBhbnNpb25zLAorZG5sIG5vdCBldmVyeSB3b3JkLiAgVGhpcyBjbG9zZXMgYSBsb25nc3RhbmRpbmcgc2ggc2VjdXJpdHkgaG9sZS4KKyAgYWNfZHVtbXk9ImlmZWxzZShbJDJdLCAsICRQQVRILCBbJDJdKSIKKyAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCisgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICBpZiB0ZXN0IC1mICRhY19kaXIvJDE7IHRoZW4KKyAgICAgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSIkYWNfZGlyLyQxIgorICAgICAgaWYgdGVzdCAtbiAiJGZpbGVfbWFnaWNfdGVzdF9maWxlIjsgdGhlbgorCWNhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCisJImZpbGVfbWFnaWMgIiopCisJICBmaWxlX21hZ2ljX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogImZpbGVfbWFnaWMgXCguKlwpImAKKwkgIE1BR0lDX0NNRD0iJGx0X2N2X3BhdGhfTUFHSUNfQ01EIgorCSAgaWYgZXZhbCAkZmlsZV9tYWdpY19jbWQgXCRmaWxlX21hZ2ljX3Rlc3RfZmlsZSAyPiAvZGV2L251bGwgfAorCSAgICAkRUdSRVAgIiRmaWxlX21hZ2ljX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICA6CisJICBlbHNlCisJICAgIGNhdCA8PEVPRiAxPiYyCisKKyoqKiBXYXJuaW5nOiB0aGUgY29tbWFuZCBsaWJ0b29sIHVzZXMgdG8gZGV0ZWN0IHNoYXJlZCBsaWJyYXJpZXMsCisqKiogJGZpbGVfbWFnaWNfY21kLCBwcm9kdWNlcyBvdXRwdXQgdGhhdCBsaWJ0b29sIGNhbm5vdCByZWNvZ25pemUuCisqKiogVGhlIHJlc3VsdCBpcyB0aGF0IGxpYnRvb2wgbWF5IGZhaWwgdG8gcmVjb2duaXplIHNoYXJlZCBsaWJyYXJpZXMKKyoqKiBhcyBzdWNoLiAgVGhpcyB3aWxsIGFmZmVjdCB0aGUgY3JlYXRpb24gb2YgbGlidG9vbCBsaWJyYXJpZXMgdGhhdAorKioqIGRlcGVuZCBvbiBzaGFyZWQgbGlicmFyaWVzLCBidXQgcHJvZ3JhbXMgbGlua2VkIHdpdGggc3VjaCBsaWJ0b29sCisqKiogbGlicmFyaWVzIHdpbGwgd29yayByZWdhcmRsZXNzIG9mIHRoaXMgcHJvYmxlbS4gIE5ldmVydGhlbGVzcywgeW91CisqKiogbWF5IHdhbnQgdG8gcmVwb3J0IHRoZSBwcm9ibGVtIHRvIHlvdXIgc3lzdGVtIG1hbmFnZXIgYW5kL29yIHRvCisqKiogYnVnLWxpYnRvb2xAZ251Lm9yZworCitFT0YKKwkgIGZpIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGJyZWFrCisgICAgZmkKKyAgZG9uZQorICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgTUFHSUNfQ01EPSIkbHRfc2F2ZV9NQUdJQ19DTUQiCisgIDs7Citlc2FjXSkKK01BR0lDX0NNRD0iJGx0X2N2X3BhdGhfTUFHSUNfQ01EIgoraWYgdGVzdCAtbiAiJE1BR0lDX0NNRCI7IHRoZW4KKyAgQUNfTVNHX1JFU1VMVCgkTUFHSUNfQ01EKQorZWxzZQorICBBQ19NU0dfUkVTVUxUKG5vKQorZmkKK10pIyBBQ19QQVRIX1RPT0xfUFJFRklYCisKKworIyBBQ19QQVRIX01BR0lDCisjIC0tLS0tLS0tLS0tLS0KKyMgZmluZCBhIGZpbGUgcHJvZ3JhbSB3aGljaCBjYW4gcmVjb2duaXNlIGEgc2hhcmVkIGxpYnJhcnkKK0FDX0RFRlVOKFtBQ19QQVRIX01BR0lDXSwKK1tBQ19QQVRIX1RPT0xfUFJFRklYKCR7YWNfdG9vbF9wcmVmaXh9ZmlsZSwgL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSCkKK2lmIHRlc3QgLXogIiRsdF9jdl9wYXRoX01BR0lDX0NNRCI7IHRoZW4KKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAgIEFDX1BBVEhfVE9PTF9QUkVGSVgoZmlsZSwgL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSCkKKyAgZWxzZQorICAgIE1BR0lDX0NNRD06CisgIGZpCitmaQorXSkjIEFDX1BBVEhfTUFHSUMKKworCisjIEFDX1BST0dfTEQKKyMgLS0tLS0tLS0tLQorIyBmaW5kIHRoZSBwYXRobmFtZSB0byB0aGUgR05VIG9yIG5vbi1HTlUgbGlua2VyCitBQ19ERUZVTihbQUNfUFJPR19MRF0sCitbQUNfQVJHX1dJVEgoW2dudS1sZF0sCisgICAgW0FDX0hFTFBfU1RSSU5HKFstLXdpdGgtZ251LWxkXSwKKwlbYXNzdW1lIHRoZSBDIGNvbXBpbGVyIHVzZXMgR05VIGxkIEA8OkBkZWZhdWx0PW5vQDo+QF0pXSwKKyAgICBbdGVzdCAiJHdpdGh2YWwiID0gbm8gfHwgd2l0aF9nbnVfbGQ9eWVzXSwKKyAgICBbd2l0aF9nbnVfbGQ9bm9dKQorQUNfUkVRVUlSRShbTFRfQUNfUFJPR19TRURdKWRubAorQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCitBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCitBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfQlVJTERdKWRubAorYWNfcHJvZz1sZAoraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgIyBDaGVjayBpZiBnY2MgLXByaW50LXByb2ctbmFtZT1sZCBnaXZlcyBhIHBhdGguCisgIEFDX01TR19DSEVDS0lORyhbZm9yIGxkIHVzZWQgYnkgJENDXSkKKyAgY2FzZSAkaG9zdCBpbgorICAqLSotbWluZ3cqKQorICAgICMgZ2NjIGxlYXZlcyBhIHRyYWlsaW5nIGNhcnJpYWdlIHJldHVybiB3aGljaCB1cHNldHMgbWluZ3cKKyAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjUgfCB0ciAtZCAnXDAxNSdgIDs7CisgICopCisgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1YCA7OworICBlc2FjCisgIGNhc2UgJGFjX3Byb2cgaW4KKyAgICAjIEFjY2VwdCBhYnNvbHV0ZSBwYXRocy4KKyAgICBbW1xcL11dKiB8ID86W1tcXC9dXSopCisgICAgICByZV9kaXJlbHQ9Jy9bW14vXV1bW14vXV0qL1wuXC4vJworICAgICAgIyBDYW5vbmljYWxpemUgdGhlIHBhdGhuYW1lIG9mIGxkCisgICAgICBhY19wcm9nPWBlY2hvICRhY19wcm9nfCAkU0VEICdzJVxcXFwlLyVnJ2AKKyAgICAgIHdoaWxlIGVjaG8gJGFjX3Byb2cgfCBncmVwICIkcmVfZGlyZWx0IiA+IC9kZXYvbnVsbCAyPiYxOyBkbworCWFjX3Byb2c9YGVjaG8gJGFjX3Byb2d8ICRTRUQgInMlJHJlX2RpcmVsdCUvJSJgCisgICAgICBkb25lCisgICAgICB0ZXN0IC16ICIkTEQiICYmIExEPSIkYWNfcHJvZyIKKyAgICAgIDs7CisgICIiKQorICAgICMgSWYgaXQgZmFpbHMsIHRoZW4gcHJldGVuZCB3ZSBhcmVuJ3QgdXNpbmcgR0NDLgorICAgIGFjX3Byb2c9bGQKKyAgICA7OworICAqKQorICAgICMgSWYgaXQgaXMgcmVsYXRpdmUsIHRoZW4gc2VhcmNoIGZvciB0aGUgZmlyc3QgbGQgaW4gUEFUSC4KKyAgICB3aXRoX2dudV9sZD11bmtub3duCisgICAgOzsKKyAgZXNhYworZWxpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgIEFDX01TR19DSEVDS0lORyhbZm9yIEdOVSBsZF0pCitlbHNlCisgIEFDX01TR19DSEVDS0lORyhbZm9yIG5vbi1HTlUgbGRdKQorZmkKK0FDX0NBQ0hFX1ZBTChsdF9jdl9wYXRoX0xELAorW2lmIHRlc3QgLXogIiRMRCI7IHRoZW4KKyAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgIGZvciBhY19kaXIgaW4gJFBBVEg7IGRvCisgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICBpZiB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nIiB8fCB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nJGFjX2V4ZWV4dCI7IHRoZW4KKyAgICAgIGx0X2N2X3BhdGhfTEQ9IiRhY19kaXIvJGFjX3Byb2ciCisgICAgICAjIENoZWNrIHRvIHNlZSBpZiB0aGUgcHJvZ3JhbSBpcyBHTlUgbGQuICBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24sCisgICAgICAjIGJ1dCBhcHBhcmVudGx5IHNvbWUgdmFyaWFudHMgb2YgR05VIGxkIG9ubHkgYWNjZXB0IC12LgorICAgICAgIyBCcmVhayBvbmx5IGlmIGl0IHdhcyB0aGUgR05VL25vbi1HTlUgbGQgdGhhdCB3ZSBwcmVmZXIuCisgICAgICBjYXNlIGAiJGx0X2N2X3BhdGhfTEQiIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KKyAgICAgICpHTlUqIHwgKid3aXRoIEJGRCcqKQorCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0gbm8gJiYgYnJlYWsKKwk7OworICAgICAgKikKKwl0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IHllcyAmJiBicmVhaworCTs7CisgICAgICBlc2FjCisgICAgZmkKKyAgZG9uZQorICBJRlM9IiRsdF9zYXZlX2lmcyIKK2Vsc2UKKyAgbHRfY3ZfcGF0aF9MRD0iJExEIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KK2ZpXSkKK0xEPSIkbHRfY3ZfcGF0aF9MRCIKK2lmIHRlc3QgLW4gIiRMRCI7IHRoZW4KKyAgQUNfTVNHX1JFU1VMVCgkTEQpCitlbHNlCisgIEFDX01TR19SRVNVTFQobm8pCitmaQordGVzdCAteiAiJExEIiAmJiBBQ19NU0dfRVJST1IoW25vIGFjY2VwdGFibGUgbGQgZm91bmQgaW4gXCRQQVRIXSkKK0FDX1BST0dfTERfR05VCitdKSMgQUNfUFJPR19MRAorCisKKyMgQUNfUFJPR19MRF9HTlUKKyMgLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtBQ19QUk9HX0xEX0dOVV0sCitbQUNfUkVRVUlSRShbQUNfUFJPR19FR1JFUF0pZG5sCitBQ19DQUNIRV9DSEVDSyhbaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGRdLCBsdF9jdl9wcm9nX2dudV9sZCwKK1sjIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiBoZXJlLCBidXQgYXBwYXJlbnRseSBzb21lIEdOVSBsZHMgb25seSBhY2NlcHQgLXYuCitjYXNlIGAkTEQgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgorKkdOVSogfCAqJ3dpdGggQkZEJyopCisgIGx0X2N2X3Byb2dfZ251X2xkPXllcworICA7OworKikKKyAgbHRfY3ZfcHJvZ19nbnVfbGQ9bm8KKyAgOzsKK2VzYWNdKQord2l0aF9nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkCitdKSMgQUNfUFJPR19MRF9HTlUKKworCisjIEFDX1BST0dfTERfUkVMT0FEX0ZMQUcKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBmaW5kIHJlbG9hZCBmbGFnIGZvciBsaW5rZXIKKyMgICAtLSBQT1JUTUUgU29tZSBsaW5rZXJzIG1heSBuZWVkIGEgZGlmZmVyZW50IHJlbG9hZCBmbGFnLgorQUNfREVGVU4oW0FDX1BST0dfTERfUkVMT0FEX0ZMQUddLAorW0FDX0NBQ0hFX0NIRUNLKFtmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzXSwKKyAgbHRfY3ZfbGRfcmVsb2FkX2ZsYWcsCisgIFtsdF9jdl9sZF9yZWxvYWRfZmxhZz0nLXInXSkKK3JlbG9hZF9mbGFnPSRsdF9jdl9sZF9yZWxvYWRfZmxhZworY2FzZSAkcmVsb2FkX2ZsYWcgaW4KKyIiIHwgIiAiKikgOzsKKyopIHJlbG9hZF9mbGFnPSIgJHJlbG9hZF9mbGFnIiA7OworZXNhYworcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworY2FzZSAkaG9zdF9vcyBpbgorICBkYXJ3aW4qKQorICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICByZWxvYWRfY21kcz0nJExUQ0MgJExUQ0ZMQUdTIC1ub3N0ZGxpYiAke3dsfS1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisgICAgZWxzZQorICAgICAgcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworICAgIGZpCisgICAgOzsKK2VzYWMKK10pIyBBQ19QUk9HX0xEX1JFTE9BRF9GTEFHCisKKworIyBBQ19ERVBMSUJTX0NIRUNLX01FVEhPRAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBob3cgdG8gY2hlY2sgZm9yIGxpYnJhcnkgZGVwZW5kZW5jaWVzCisjICAtLSBQT1JUTUUgZmlsbCBpbiB3aXRoIHRoZSBkeW5hbWljIGxpYnJhcnkgY2hhcmFjdGVyaXN0aWNzCitBQ19ERUZVTihbQUNfREVQTElCU19DSEVDS19NRVRIT0RdLAorW0FDX0NBQ0hFX0NIRUNLKFtob3cgdG8gcmVjb2duaXNlIGRlcGVuZGVudCBsaWJyYXJpZXNdLAorbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QsCitbbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRNQUdJQ19DTUQnCitsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0KK2x0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSd1bmtub3duJworIyBOZWVkIHRvIHNldCB0aGUgcHJlY2VkaW5nIHZhcmlhYmxlIG9uIGFsbCBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0CisjIGludGVybGlicmFyeSBkZXBlbmRlbmNpZXMuCisjICdub25lJyAtLSBkZXBlbmRlbmNpZXMgbm90IHN1cHBvcnRlZC4KKyMgYHVua25vd24nIC0tIHNhbWUgYXMgbm9uZSwgYnV0IGRvY3VtZW50cyB0aGF0IHdlIHJlYWxseSBkb24ndCBrbm93LgorIyAncGFzc19hbGwnIC0tIGFsbCBkZXBlbmRlbmNpZXMgcGFzc2VkIHdpdGggbm8gY2hlY2tzLgorIyAndGVzdF9jb21waWxlJyAtLSBjaGVjayBieSBtYWtpbmcgdGVzdCBwcm9ncmFtLgorIyAnZmlsZV9tYWdpYyBbW3JlZ2V4XV0nIC0tIGNoZWNrIGJ5IGxvb2tpbmcgZm9yIGZpbGVzIGluIGxpYnJhcnkgcGF0aAorIyB3aGljaCByZXNwb25kcyB0byB0aGUgJGZpbGVfbWFnaWNfY21kIHdpdGggYSBnaXZlbiBleHRlbmRlZCByZWdleC4KKyMgSWYgeW91IGhhdmUgYGZpbGUnIG9yIGVxdWl2YWxlbnQgb24geW91ciBzeXN0ZW0gYW5kIHlvdSdyZSBub3Qgc3VyZQorIyB3aGV0aGVyIGBwYXNzX2FsbCcgd2lsbCAqYWx3YXlzKiB3b3JrLCB5b3UgcHJvYmFibHkgd2FudCB0aGlzIG9uZS4KKworY2FzZSAkaG9zdF9vcyBpbgorYWl4NCogfCBhaXg1KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworYmVvcyopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2JzZGlbWzQ1XV0qKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgW1swLTldXVtbMC05XV0qLWJpdCBbW01MXV1TQiAoc2hhcmVkIG9iamVjdHxkeW5hbWljIGxpYiknCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPScvdXNyL2Jpbi9maWxlIC1MJworICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vc2hsaWIvbGliYy5zbworICA7OworCitjeWd3aW4qKQorICAjIGZ1bmNfd2luMzJfbGliaWQgaXMgYSBzaGVsbCBmdW5jdGlvbiBkZWZpbmVkIGluIGx0bWFpbi5zaAorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKKyAgOzsKKworbWluZ3cqIHwgcHczMiopCisgICMgQmFzZSBNU1lTL01pbkdXIGRvIG5vdCBwcm92aWRlIHRoZSAnZmlsZScgY29tbWFuZCBuZWVkZWQgYnkKKyAgIyBmdW5jX3dpbjMyX2xpYmlkIHNoZWxsIGZ1bmN0aW9uLCBzbyB1c2UgYSB3ZWFrZXIgdGVzdCBiYXNlZCBvbiAnb2JqZHVtcCcuCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/JworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCisgIDs7CisKK2RhcndpbiogfCByaGFwc29keSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2ZyZWVic2QqIHwga2ZyZWVic2QqLWdudSB8IGRyYWdvbmZseSopCisgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4gL2Rldi9udWxsOyB0aGVuCisgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICBpKjg2ICkKKyAgICAgICMgTm90IHN1cmUgd2hldGhlciB0aGUgcHJlc2VuY2Ugb2YgT3BlbkJTRCBoZXJlIHdhcyBhIG1pc3Rha2UuCisgICAgICAjIExldCdzIGFjY2VwdCBib3RoIG9mIHRoZW0gdW50aWwgdGhpcyBpcyBjbGVhcmVkIHVwLgorICAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKEZyZWVCU0R8T3BlbkJTRHxEcmFnb25GbHkpL2lbWzMtOV1dODYgKGNvbXBhY3QgKT9kZW1hbmQgcGFnZWQgc2hhcmVkIGxpYnJhcnknCisgICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCisgICAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT1gZWNobyAvdXNyL2xpYi9saWJjLnNvLipgCisgICAgICA7OworICAgIGVzYWMKKyAgZWxzZQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIGZpCisgIDs7CisKK2dudSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2hwdXgxMC4yMCogfCBocHV4MTEqKQorICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCisgIGNhc2UgJGhvc3RfY3B1IGluCisgIGlhNjQqKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzW1swLTldXVtbMC05XV1bWzAtOV1dfEVMRi1bWzAtOV1dW1swLTldXSkgc2hhcmVkIG9iamVjdCBmaWxlIC0gSUE2NCcKKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9ocHV4MzIvbGliYy5zbworICAgIDs7CisgIGhwcGEqNjQqKQorICAgIFtsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoc1swLTldWzAtOV1bMC05XXxFTEYtWzAtOV1bMC05XSkgc2hhcmVkIG9iamVjdCBmaWxlIC0gUEEtUklTQyBbMC05XS5bMC05XSddCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvcGEyMF82NC9saWJjLnNsCisgICAgOzsKKyAgKikKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoc1tbMC05XV1bWzAtOV1dW1swLTldXXxQQS1SSVNDW1swLTldXS5bWzAtOV1dKSBzaGFyZWQgbGlicmFyeScKKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9saWJjLnNsCisgICAgOzsKKyAgZXNhYworICA7OworCitpbnRlcml4MyopCisgICMgUElDIGNvZGUgaXMgYnJva2VuIG9uIEludGVyaXggMy54LCB0aGF0J3Mgd2h5IHxcLmEgbm90IHxfcGljXC5hIGhlcmUKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb3xcLmEpJCcKKyAgOzsKKworaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgY2FzZSAkTEQgaW4KKyAgKi0zMnwqIi0zMiAiKSBsaWJtYWdpYz0zMi1iaXQ7OworICAqLW4zMnwqIi1uMzIgIikgbGlibWFnaWM9TjMyOzsKKyAgKi02NHwqIi02NCAiKSBsaWJtYWdpYz02NC1iaXQ7OworICAqKSBsaWJtYWdpYz1uZXZlci1tYXRjaDs7CisgIGVzYWMKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgorbGludXgqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCituZXRic2QqKQorICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc29cLltbMC05XV0rXC5bWzAtOV1dK3xfcGljXC5hKSQnCisgIGVsc2UKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW1teL11dKyhcLnNvfF9waWNcLmEpJCcKKyAgZmkKKyAgOzsKKworbmV3b3M2KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tNTF1dU0IgKGV4ZWN1dGFibGV8ZHluYW1pYyBsaWIpJworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCisgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2xpYm5scy5zbworICA7OworCitudG8tcW54KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgorICA7OworCitvcGVuYnNkKikKKyAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb1wuW1swLTldXStcLltbMC05XV0rfFwuc298X3BpY1wuYSkkJworICBlbHNlCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb1wuW1swLTldXStcLltbMC05XV0rfF9waWNcLmEpJCcKKyAgZmkKKyAgOzsKKworb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitzb2xhcmlzKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworc3lzdjQgfCBzeXN2NC4zKikKKyAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKyAgbW90b3JvbGEpCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tNTF1dU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIpIE1bWzAtOV1dW1swLTldXSogVmVyc2lvbiBbWzAtOV1dJworICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC91c3IvbGliL2xpYmMuc28qYAorICAgIDs7CisgIG5jcikKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgIDs7CisgIHNlcXVlbnQpCisgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy9iaW4vZmlsZScKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgW1swLTldXVtbMC05XV0qLWJpdCBbW0xNXV1TQiAoc2hhcmVkIG9iamVjdHxkeW5hbWljIGxpYiApJworICAgIDs7CisgIHNuaSkKKyAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL2Jpbi9maWxlJworICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSJmaWxlX21hZ2ljIEVMRiBbWzAtOV1dW1swLTldXSotYml0IFtbTE1dXVNCIGR5bmFtaWMgbGliIgorICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS9saWIvbGliYy5zbworICAgIDs7CisgIHNpZW1lbnMpCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgICA7OworICBwYykKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgIDs7CisgIGVzYWMKKyAgOzsKKworc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKiB8IHN5c3Y0KnV3MiopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7Citlc2FjCitdKQorZmlsZV9tYWdpY19jbWQ9JGx0X2N2X2ZpbGVfbWFnaWNfY21kCitkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QKK3Rlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgorXSkjIEFDX0RFUExJQlNfQ0hFQ0tfTUVUSE9ECisKKworIyBBQ19QUk9HX05NCisjIC0tLS0tLS0tLS0KKyMgZmluZCB0aGUgcGF0aG5hbWUgdG8gYSBCU0QtY29tcGF0aWJsZSBuYW1lIGxpc3RlcgorQUNfREVGVU4oW0FDX1BST0dfTk1dLAorW0FDX0NBQ0hFX0NIRUNLKFtmb3IgQlNELWNvbXBhdGlibGUgbm1dLCBsdF9jdl9wYXRoX05NLAorW2lmIHRlc3QgLW4gIiROTSI7IHRoZW4KKyAgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisgIGx0X2N2X3BhdGhfTk09IiROTSIKK2Vsc2UKKyAgbHRfbm1fdG9fY2hlY2s9IiR7YWNfdG9vbF9wcmVmaXh9bm0iCisgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCIgJiYgdGVzdCAiJGJ1aWxkIiA9ICIkaG9zdCI7IHRoZW4gCisgICAgbHRfbm1fdG9fY2hlY2s9IiRsdF9ubV90b19jaGVjayBubSIKKyAgZmkKKyAgZm9yIGx0X3RtcF9ubSBpbiAkbHRfbm1fdG9fY2hlY2s7IGRvCisgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgICAgZm9yIGFjX2RpciBpbiAkUEFUSCAvdXNyL2Njcy9iaW4vZWxmIC91c3IvY2NzL2JpbiAvdXNyL3VjYiAvYmluOyBkbworICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgICAgdG1wX25tPSIkYWNfZGlyLyRsdF90bXBfbm0iCisgICAgICBpZiB0ZXN0IC1mICIkdG1wX25tIiB8fCB0ZXN0IC1mICIkdG1wX25tJGFjX2V4ZWV4dCIgOyB0aGVuCisJIyBDaGVjayB0byBzZWUgaWYgdGhlIG5tIGFjY2VwdHMgYSBCU0QtY29tcGF0IGZsYWcuCisJIyBBZGRpbmcgdGhlIGBzZWQgMXEnIHByZXZlbnRzIGZhbHNlIHBvc2l0aXZlcyBvbiBIUC1VWCwgd2hpY2ggc2F5czoKKwkjICAgbm06IHVua25vd24gb3B0aW9uICJCIiBpZ25vcmVkCisJIyBUcnU2NCdzIG5tIGNvbXBsYWlucyB0aGF0IC9kZXYvbnVsbCBpcyBhbiBpbnZhbGlkIG9iamVjdCBmaWxlCisJY2FzZSBgIiR0bXBfbm0iIC1CIC9kZXYvbnVsbCAyPiYxIHwgc2VkICcxcSdgIGluCisJKi9kZXYvbnVsbCogfCAqJ0ludmFsaWQgZmlsZSBvciBvYmplY3QgdHlwZScqKQorCSAgbHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSAtQiIKKwkgIGJyZWFrCisJICA7OworCSopCisJICBjYXNlIGAiJHRtcF9ubSIgLXAgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KKwkgICovZGV2L251bGwqKQorCSAgICBsdF9jdl9wYXRoX05NPSIkdG1wX25tIC1wIgorCSAgICBicmVhaworCSAgICA7OworCSAgKikKKwkgICAgbHRfY3ZfcGF0aF9OTT0ke2x0X2N2X3BhdGhfTk09IiR0bXBfbm0ifSAjIGtlZXAgdGhlIGZpcnN0IG1hdGNoLCBidXQKKwkgICAgY29udGludWUgIyBzbyB0aGF0IHdlIGNhbiB0cnkgdG8gZmluZCBvbmUgdGhhdCBzdXBwb3J0cyBCU0QgZmxhZ3MKKwkgICAgOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworICAgICAgZmkKKyAgICBkb25lCisgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgIGRvbmUKKyAgdGVzdCAteiAiJGx0X2N2X3BhdGhfTk0iICYmIGx0X2N2X3BhdGhfTk09bm0KK2ZpXSkKK05NPSIkbHRfY3ZfcGF0aF9OTSIKK10pIyBBQ19QUk9HX05NCisKKworIyBBQ19DSEVDS19MSUJNCisjIC0tLS0tLS0tLS0tLS0KKyMgY2hlY2sgZm9yIG1hdGggbGlicmFyeQorQUNfREVGVU4oW0FDX0NIRUNLX0xJQk1dLAorW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKK0xJQk09CitjYXNlICRob3N0IGluCisqLSotYmVvcyogfCAqLSotY3lnd2luKiB8ICotKi1wdzMyKiB8ICotKi1kYXJ3aW4qKQorICAjIFRoZXNlIHN5c3RlbSBkb24ndCBoYXZlIGxpYm0sIG9yIGRvbid0IG5lZWQgaXQKKyAgOzsKKyotbmNyLXN5c3Y0LjMqKQorICBBQ19DSEVDS19MSUIobXcsIF9td3ZhbGlkY2hlY2tsLCBMSUJNPSItbG13IikKKyAgQUNfQ0hFQ0tfTElCKG0sIGNvcywgTElCTT0iJExJQk0gLWxtIikKKyAgOzsKKyopCisgIEFDX0NIRUNLX0xJQihtLCBjb3MsIExJQk09Ii1sbSIpCisgIDs7Citlc2FjCitdKSMgQUNfQ0hFQ0tfTElCTQorCisKKyMgQUNfTElCTFRETF9DT05WRU5JRU5DRShbRElSRUNUT1JZXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgc2V0cyBMSUJMVERMIHRvIHRoZSBsaW5rIGZsYWdzIGZvciB0aGUgbGlibHRkbCBjb252ZW5pZW5jZSBsaWJyYXJ5IGFuZAorIyBMVERMSU5DTCB0byB0aGUgaW5jbHVkZSBmbGFncyBmb3IgdGhlIGxpYmx0ZGwgaGVhZGVyIGFuZCBhZGRzCisjIC0tZW5hYmxlLWx0ZGwtY29udmVuaWVuY2UgdG8gdGhlIGNvbmZpZ3VyZSBhcmd1bWVudHMuICBOb3RlIHRoYXQKKyMgQUNfQ09ORklHX1NVQkRJUlMgaXMgbm90IGNhbGxlZCBoZXJlLiAgSWYgRElSRUNUT1JZIGlzIG5vdCBwcm92aWRlZCwKKyMgaXQgaXMgYXNzdW1lZCB0byBiZSBgbGlibHRkbCcuICBMSUJMVERMIHdpbGwgYmUgcHJlZml4ZWQgd2l0aAorIyAnJHt0b3BfYnVpbGRkaXJ9LycgYW5kIExURExJTkNMIHdpbGwgYmUgcHJlZml4ZWQgd2l0aCAnJHt0b3Bfc3JjZGlyfS8nCisjIChub3RlIHRoZSBzaW5nbGUgcXVvdGVzISkuICBJZiB5b3VyIHBhY2thZ2UgaXMgbm90IGZsYXQgYW5kIHlvdSdyZSBub3QKKyMgdXNpbmcgYXV0b21ha2UsIGRlZmluZSB0b3BfYnVpbGRkaXIgYW5kIHRvcF9zcmNkaXIgYXBwcm9wcmlhdGVseSBpbgorIyB0aGUgTWFrZWZpbGVzLgorQUNfREVGVU4oW0FDX0xJQkxURExfQ09OVkVOSUVOQ0VdLAorW0FDX0JFRk9SRShbJDBdLFtBQ19MSUJUT09MX1NFVFVQXSlkbmwKKyAgY2FzZSAkZW5hYmxlX2x0ZGxfY29udmVuaWVuY2UgaW4KKyAgbm8pIEFDX01TR19FUlJPUihbdGhpcyBwYWNrYWdlIG5lZWRzIGEgY29udmVuaWVuY2UgbGlibHRkbF0pIDs7CisgICIiKSBlbmFibGVfbHRkbF9jb252ZW5pZW5jZT15ZXMKKyAgICAgIGFjX2NvbmZpZ3VyZV9hcmdzPSIkYWNfY29uZmlndXJlX2FyZ3MgLS1lbmFibGUtbHRkbC1jb252ZW5pZW5jZSIgOzsKKyAgZXNhYworICBMSUJMVERMPScke3RvcF9idWlsZGRpcn0vJ2lmZWxzZSgkIywxLFskMV0sWydsaWJsdGRsJ10pL2xpYmx0ZGxjLmxhCisgIExURExJTkNMPSctSSR7dG9wX3NyY2Rpcn0vJ2lmZWxzZSgkIywxLFskMV0sWydsaWJsdGRsJ10pCisgICMgRm9yIGJhY2t3YXJkcyBub24tZ2V0dGV4dCBjb25zaXN0ZW50IGNvbXBhdGliaWxpdHkuLi4KKyAgSU5DTFRETD0iJExURExJTkNMIgorXSkjIEFDX0xJQkxURExfQ09OVkVOSUVOQ0UKKworCisjIEFDX0xJQkxURExfSU5TVEFMTEFCTEUoW0RJUkVDVE9SWV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIHNldHMgTElCTFRETCB0byB0aGUgbGluayBmbGFncyBmb3IgdGhlIGxpYmx0ZGwgaW5zdGFsbGFibGUgbGlicmFyeSBhbmQKKyMgTFRETElOQ0wgdG8gdGhlIGluY2x1ZGUgZmxhZ3MgZm9yIHRoZSBsaWJsdGRsIGhlYWRlciBhbmQgYWRkcworIyAtLWVuYWJsZS1sdGRsLWluc3RhbGwgdG8gdGhlIGNvbmZpZ3VyZSBhcmd1bWVudHMuICBOb3RlIHRoYXQKKyMgQUNfQ09ORklHX1NVQkRJUlMgaXMgbm90IGNhbGxlZCBoZXJlLiAgSWYgRElSRUNUT1JZIGlzIG5vdCBwcm92aWRlZCwKKyMgYW5kIGFuIGluc3RhbGxlZCBsaWJsdGRsIGlzIG5vdCBmb3VuZCwgaXQgaXMgYXNzdW1lZCB0byBiZSBgbGlibHRkbCcuCisjIExJQkxUREwgd2lsbCBiZSBwcmVmaXhlZCB3aXRoICcke3RvcF9idWlsZGRpcn0vJyMgYW5kIExURExJTkNMIHdpdGgKKyMgJyR7dG9wX3NyY2Rpcn0vJyAobm90ZSB0aGUgc2luZ2xlIHF1b3RlcyEpLiAgSWYgeW91ciBwYWNrYWdlIGlzIG5vdAorIyBmbGF0IGFuZCB5b3UncmUgbm90IHVzaW5nIGF1dG9tYWtlLCBkZWZpbmUgdG9wX2J1aWxkZGlyIGFuZCB0b3Bfc3JjZGlyCisjIGFwcHJvcHJpYXRlbHkgaW4gdGhlIE1ha2VmaWxlcy4KKyMgSW4gdGhlIGZ1dHVyZSwgdGhpcyBtYWNybyBtYXkgaGF2ZSB0byBiZSBjYWxsZWQgYWZ0ZXIgQUNfUFJPR19MSUJUT09MLgorQUNfREVGVU4oW0FDX0xJQkxURExfSU5TVEFMTEFCTEVdLAorW0FDX0JFRk9SRShbJDBdLFtBQ19MSUJUT09MX1NFVFVQXSlkbmwKKyAgQUNfQ0hFQ0tfTElCKGx0ZGwsIGx0X2RsaW5pdCwKKyAgW3Rlc3QgeCIkZW5hYmxlX2x0ZGxfaW5zdGFsbCIgIT0geHllcyAmJiBlbmFibGVfbHRkbF9pbnN0YWxsPW5vXSwKKyAgW2lmIHRlc3QgeCIkZW5hYmxlX2x0ZGxfaW5zdGFsbCIgPSB4bm87IHRoZW4KKyAgICAgQUNfTVNHX1dBUk4oW2xpYmx0ZGwgbm90IGluc3RhbGxlZCwgYnV0IGluc3RhbGxhdGlvbiBkaXNhYmxlZF0pCisgICBlbHNlCisgICAgIGVuYWJsZV9sdGRsX2luc3RhbGw9eWVzCisgICBmaQorICBdKQorICBpZiB0ZXN0IHgiJGVuYWJsZV9sdGRsX2luc3RhbGwiID0geCJ5ZXMiOyB0aGVuCisgICAgYWNfY29uZmlndXJlX2FyZ3M9IiRhY19jb25maWd1cmVfYXJncyAtLWVuYWJsZS1sdGRsLWluc3RhbGwiCisgICAgTElCTFRETD0nJHt0b3BfYnVpbGRkaXJ9LydpZmVsc2UoJCMsMSxbJDFdLFsnbGlibHRkbCddKS9saWJsdGRsLmxhCisgICAgTFRETElOQ0w9Jy1JJHt0b3Bfc3JjZGlyfS8naWZlbHNlKCQjLDEsWyQxXSxbJ2xpYmx0ZGwnXSkKKyAgZWxzZQorICAgIGFjX2NvbmZpZ3VyZV9hcmdzPSIkYWNfY29uZmlndXJlX2FyZ3MgLS1lbmFibGUtbHRkbC1pbnN0YWxsPW5vIgorICAgIExJQkxUREw9Ii1sbHRkbCIKKyAgICBMVERMSU5DTD0KKyAgZmkKKyAgIyBGb3IgYmFja3dhcmRzIG5vbi1nZXR0ZXh0IGNvbnNpc3RlbnQgY29tcGF0aWJpbGl0eS4uLgorICBJTkNMVERMPSIkTFRETElOQ0wiCitdKSMgQUNfTElCTFRETF9JTlNUQUxMQUJMRQorCisKKyMgQUNfTElCVE9PTF9DWFgKKyMgLS0tLS0tLS0tLS0tLS0KKyMgZW5hYmxlIHN1cHBvcnQgZm9yIEMrKyBsaWJyYXJpZXMKK0FDX0RFRlVOKFtBQ19MSUJUT09MX0NYWF0sCitbQUNfUkVRVUlSRShbX0xUX0FDX0xBTkdfQ1hYXSkKK10pIyBBQ19MSUJUT09MX0NYWAorCisKKyMgX0xUX0FDX0xBTkdfQ1hYCisjIC0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW19MVF9BQ19MQU5HX0NYWF0sCitbQUNfUkVRVUlSRShbQUNfUFJPR19DWFhdKQorQUNfUkVRVUlSRShbX0xUX0FDX1BST0dfQ1hYQ1BQXSkKK19MVF9BQ19TSEVMTF9JTklUKFt0YWduYW1lcz0ke3RhZ25hbWVzKyR7dGFnbmFtZXN9LH1DWFhdKQorXSkjIF9MVF9BQ19MQU5HX0NYWAorCisjIF9MVF9BQ19QUk9HX0NYWENQUAorIyAtLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtfTFRfQUNfUFJPR19DWFhDUFBdLAorWworQUNfUkVRVUlSRShbQUNfUFJPR19DWFhdKQoraWYgdGVzdCAtbiAiJENYWCIgJiYgKCB0ZXN0ICJYJENYWCIgIT0gIlhubyIgJiYKKyAgICAoICh0ZXN0ICJYJENYWCIgPSAiWGcrKyIgJiYgYGcrKyAtdiA+L2Rldi9udWxsIDI+JjFgICkgfHwKKyAgICAodGVzdCAiWCRDWFgiICE9ICJYZysrIikpKSA7IHRoZW4KKyAgQUNfUFJPR19DWFhDUFAKK2ZpCitdKSMgX0xUX0FDX1BST0dfQ1hYQ1BQCisKKyMgQUNfTElCVE9PTF9GNzcKKyMgLS0tLS0tLS0tLS0tLS0KKyMgZW5hYmxlIHN1cHBvcnQgZm9yIEZvcnRyYW4gNzcgbGlicmFyaWVzCitBQ19ERUZVTihbQUNfTElCVE9PTF9GNzddLAorW0FDX1JFUVVJUkUoW19MVF9BQ19MQU5HX0Y3N10pCitdKSMgQUNfTElCVE9PTF9GNzcKKworCisjIF9MVF9BQ19MQU5HX0Y3NworIyAtLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtfTFRfQUNfTEFOR19GNzddLAorW0FDX1JFUVVJUkUoW0FDX1BST0dfRjc3XSkKK19MVF9BQ19TSEVMTF9JTklUKFt0YWduYW1lcz0ke3RhZ25hbWVzKyR7dGFnbmFtZXN9LH1GNzddKQorXSkjIF9MVF9BQ19MQU5HX0Y3NworCisKKyMgQUNfTElCVE9PTF9HQ0oKKyMgLS0tLS0tLS0tLS0tLS0KKyMgZW5hYmxlIHN1cHBvcnQgZm9yIEdDSiBsaWJyYXJpZXMKK0FDX0RFRlVOKFtBQ19MSUJUT09MX0dDSl0sCitbQUNfUkVRVUlSRShbX0xUX0FDX0xBTkdfR0NKXSkKK10pIyBBQ19MSUJUT09MX0dDSgorCisKKyMgX0xUX0FDX0xBTkdfR0NKCisjIC0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW19MVF9BQ19MQU5HX0dDSl0sCitbQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfR0NKXSxbXSwKKyAgW0FDX1BST1ZJREVfSUZFTFNFKFtBXVtNX1BST0dfR0NKXSxbXSwKKyAgICBbQUNfUFJPVklERV9JRkVMU0UoW0xUX0FDX1BST0dfR0NKXSxbXSwKKyAgICAgIFtpZmRlZihbQUNfUFJPR19HQ0pdLFtBQ19SRVFVSVJFKFtBQ19QUk9HX0dDSl0pXSwKKwkgW2lmZGVmKFtBXVtNX1BST0dfR0NKXSxbQUNfUkVRVUlSRShbQV1bTV9QUk9HX0dDSl0pXSwKKwkgICBbQUNfUkVRVUlSRShbQV1bQ19QUk9HX0dDSl9PUl9BXVtNX1BST0dfR0NKXSldKV0pXSldKV0pCitfTFRfQUNfU0hFTExfSU5JVChbdGFnbmFtZXM9JHt0YWduYW1lcyske3RhZ25hbWVzfSx9R0NKXSkKK10pIyBfTFRfQUNfTEFOR19HQ0oKKworCisjIEFDX0xJQlRPT0xfUkMKKyMgLS0tLS0tLS0tLS0tLQorIyBlbmFibGUgc3VwcG9ydCBmb3IgV2luZG93cyByZXNvdXJjZSBmaWxlcworQUNfREVGVU4oW0FDX0xJQlRPT0xfUkNdLAorW0FDX1JFUVVJUkUoW0xUX0FDX1BST0dfUkNdKQorX0xUX0FDX1NIRUxMX0lOSVQoW3RhZ25hbWVzPSR7dGFnbmFtZXMrJHt0YWduYW1lc30sfVJDXSkKK10pIyBBQ19MSUJUT09MX1JDCisKKworIyBBQ19MSUJUT09MX0xBTkdfQ19DT05GSUcKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcnMgZm9yIHRoZSBDIGNvbXBpbGVyIGFyZQorIyBzdWl0YWJseSBkZWZpbmVkLiAgVGhvc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieQorIyBBQ19MSUJUT09MX0NPTkZJRyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCitBQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX0NfQ09ORklHXSwgW19MVF9BQ19MQU5HX0NfQ09ORklHXSkKK0FDX0RFRlVOKFtfTFRfQUNfTEFOR19DX0NPTkZJR10sCitbbHRfc2F2ZV9DQz0iJENDIgorQUNfTEFOR19QVVNIKEMpCisKKyMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBDIHRlc3Qgc291cmNlcy4KK2FjX2V4dD1jCisKKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBDIHRlc3Qgc291cmNlcy4KK29iamV4dD1vCitfTFRfQUNfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKK2x0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iaW50IHNvbWVfdmFyaWFibGUgPSAwO1xuIgorCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cworbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSdpbnQgbWFpbigpe3JldHVybigwKTt9XG4nCisKK19MVF9BQ19TWVNfQ09NUElMRVIKKworIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKK19MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorX0xUX0xJTktFUl9CT0lMRVJQTEFURQorCitBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfTk9fUlRUSSgkMSkKK0FDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9QSUMoJDEpCitBQ19MSUJUT09MX1BST0dfQ0NfQ19PKCQxKQorQUNfTElCVE9PTF9TWVNfSEFSRF9MSU5LX0xPQ0tTKCQxKQorQUNfTElCVE9PTF9QUk9HX0xEX1NITElCUygkMSkKK0FDX0xJQlRPT0xfU1lTX0RZTkFNSUNfTElOS0VSKCQxKQorQUNfTElCVE9PTF9QUk9HX0xEX0hBUkRDT0RFX0xJQlBBVEgoJDEpCitBQ19MSUJUT09MX1NZU19MSUJfU1RSSVAKK0FDX0xJQlRPT0xfRExPUEVOX1NFTEYKKworIyBSZXBvcnQgd2hpY2ggbGlicmFyeSB0eXBlcyB3aWxsIGFjdHVhbGx5IGJlIGJ1aWx0CitBQ19NU0dfQ0hFQ0tJTkcoW2lmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllc10pCitBQ19NU0dfUkVTVUxUKFskY2FuX2J1aWxkX3NoYXJlZF0pCisKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzXSkKK3Rlc3QgIiRjYW5fYnVpbGRfc2hhcmVkIiA9ICJubyIgJiYgZW5hYmxlX3NoYXJlZD1ubworCisjIE9uIEFJWCwgc2hhcmVkIGxpYnJhcmllcyBhbmQgc3RhdGljIGxpYnJhcmllcyB1c2UgdGhlIHNhbWUgbmFtZXNwYWNlLCBhbmQKKyMgYXJlIGFsbCBidWlsdCBmcm9tIFBJQy4KK2Nhc2UgJGhvc3Rfb3MgaW4KK2FpeDMqKQorICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubworICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICAgIGFyY2hpdmVfY21kcz0iJGFyY2hpdmVfY21kc35cJFJBTkxJQiBcJGxpYiIKKyAgICBwb3N0aW5zdGFsbF9jbWRzPSckUkFOTElCICRsaWInCisgIGZpCisgIDs7CisKK2FpeDQqIHwgYWl4NSopCisgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NCAmJiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSBubyA7IHRoZW4KKyAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubworICBmaQorICAgIDs7Citlc2FjCitBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3NoYXJlZF0pCisKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzXSkKKyMgTWFrZSBzdXJlIGVpdGhlciBlbmFibGVfc2hhcmVkIG9yIGVuYWJsZV9zdGF0aWMgaXMgeWVzLgordGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzIHx8IGVuYWJsZV9zdGF0aWM9eWVzCitBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3N0YXRpY10pCisKK0FDX0xJQlRPT0xfQ09ORklHKCQxKQorCitBQ19MQU5HX1BPUAorQ0M9IiRsdF9zYXZlX0NDIgorXSkjIEFDX0xJQlRPT0xfTEFOR19DX0NPTkZJRworCisKKyMgQUNfTElCVE9PTF9MQU5HX0NYWF9DT05GSUcKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFycyBmb3IgdGhlIEMgY29tcGlsZXIgYXJlCisjIHN1aXRhYmx5IGRlZmluZWQuICBUaG9zZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5CisjIEFDX0xJQlRPT0xfQ09ORklHIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KK0FDX0RFRlVOKFtBQ19MSUJUT09MX0xBTkdfQ1hYX0NPTkZJR10sIFtfTFRfQUNfTEFOR19DWFhfQ09ORklHKENYWCldKQorQUNfREVGVU4oW19MVF9BQ19MQU5HX0NYWF9DT05GSUddLAorW0FDX0xBTkdfUFVTSChDKyspCitBQ19SRVFVSVJFKFtBQ19QUk9HX0NYWF0pCitBQ19SRVFVSVJFKFtfTFRfQUNfUFJPR19DWFhDUFBdKQorCitfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KK19MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0KK19MVF9BQ19UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KK19MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPQorX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0KK19MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KK19MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPQorX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkLCAkMSk9CitfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KK19MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPW5vCitfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT11bnN1cHBvcnRlZAorX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKT1ubworX0xUX0FDX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPQorX0xUX0FDX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0KK19MVF9BQ19UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXVua25vd24KK19MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSRvbGRfYXJjaGl2ZV9jbWRzCitfTFRfQUNfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9CitfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CitfTFRfQUNfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT1ubworCisjIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBvYmplY3QgYmVpbmcgbGlua2VkOgorX0xUX0FDX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpPQorX0xUX0FDX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKT0KK19MVF9BQ19UQUdWQVIocHJlZGVwcywgJDEpPQorX0xUX0FDX1RBR1ZBUihwb3N0ZGVwcywgJDEpPQorX0xUX0FDX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKT0KKworIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIEMrKyB0ZXN0IHNvdXJjZXMuCithY19leHQ9Y3BwCisKKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBDKysgdGVzdCBzb3VyY2VzLgorb2JqZXh0PW8KK19MVF9BQ19UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAorCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJpbnQgc29tZV92YXJpYWJsZSA9IDA7XG4iCisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCitsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J2ludCBtYWluKGludCwgY2hhciAqW1tdXSkgeyByZXR1cm4oMCk7IH1cbicKKworIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorX0xUX0FDX1NZU19DT01QSUxFUgorCisjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCitfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisKKyMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCitsdF9zYXZlX0NDPSRDQworbHRfc2F2ZV9MRD0kTEQKK2x0X3NhdmVfR0NDPSRHQ0MKK0dDQz0kR1hYCitsdF9zYXZlX3dpdGhfZ251X2xkPSR3aXRoX2dudV9sZAorbHRfc2F2ZV9wYXRoX0xEPSRsdF9jdl9wYXRoX0xECitpZiB0ZXN0IC1uICIke2x0X2N2X3Byb2dfZ251X2xkY3h4K3NldH0iOyB0aGVuCisgIGx0X2N2X3Byb2dfZ251X2xkPSRsdF9jdl9wcm9nX2dudV9sZGN4eAorZWxzZQorICAkYXNfdW5zZXQgbHRfY3ZfcHJvZ19nbnVfbGQKK2ZpCitpZiB0ZXN0IC1uICIke2x0X2N2X3BhdGhfTERDWFgrc2V0fSI7IHRoZW4KKyAgbHRfY3ZfcGF0aF9MRD0kbHRfY3ZfcGF0aF9MRENYWAorZWxzZQorICAkYXNfdW5zZXQgbHRfY3ZfcGF0aF9MRAorZmkKK3Rlc3QgLXogIiR7TERDWFgrc2V0fSIgfHwgTEQ9JExEQ1hYCitDQz0ke0NYWC0iYysrIn0KK2NvbXBpbGVyPSRDQworX0xUX0FDX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorCisjIFdlIGRvbid0IHdhbnQgLWZuby1leGNlcHRpb24gd2VuIGNvbXBpbGluZyBDKysgY29kZSwgc28gc2V0IHRoZQorIyBub19idWlsdGluX2ZsYWcgc2VwYXJhdGVseQoraWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPScgLWZuby1idWlsdGluJworZWxzZQorICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9CitmaQorCitpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorICAjIFNldCB1cCBkZWZhdWx0IEdOVSBDKysgY29uZmlndXJhdGlvbgorCisgIEFDX1BST0dfTEQKKworICAjIENoZWNrIGlmIEdOVSBDKysgdXNlcyBHTlUgbGQgYXMgdGhlIHVuZGVybHlpbmcgbGlua2VyLCBzaW5jZSB0aGUKKyAgIyBhcmNoaXZpbmcgY29tbWFuZHMgYmVsb3cgYXNzdW1lIHRoYXQgR05VIGxkIGlzIGJlaW5nIHVzZWQuCisgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKworICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tcnBhdGggJHt3bH0kbGliZGlyJworICAgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKworICAgICMgSWYgYXJjaGl2ZV9jbWRzIHJ1bnMgTEQsIG5vdCBDQywgd2xhcmMgc2hvdWxkIGJlIGVtcHR5CisgICAgIyBYWFggSSB0aGluayB3bGFyYyBjYW4gYmUgZWxpbWluYXRlZCBpbiBsdGNmLWN4eCwgYnV0IEkgbmVlZCB0bworICAgICMgICAgIGludmVzdGlnYXRlIGl0IGEgbGl0dGxlIGJpdCBtb3JlLiAoTU0pCisgICAgd2xhcmM9JyR7d2x9JworCisgICAgIyBhbmNpZW50IEdOVSBsZCBkaWRuJ3Qgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUgZXQuIGFsLgorICAgIGlmIGV2YWwgImAkQ0MgLXByaW50LXByb2ctbmFtZT1sZGAgLS1oZWxwIDI+JjEiIHwgXAorCWdyZXAgJ25vLXdob2xlLWFyY2hpdmUnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICBfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9IiR3bGFyYyInLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICciJHdsYXJjIictLW5vLXdob2xlLWFyY2hpdmUnCisgICAgZWxzZQorICAgICAgX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQorICAgIGZpCisgIGVsc2UKKyAgICB3aXRoX2dudV9sZD1ubworICAgIHdsYXJjPQorCisgICAgIyBBIGdlbmVyaWMgYW5kIHZlcnkgc2ltcGxlIGRlZmF1bHQgc2hhcmVkIGxpYnJhcnkgY3JlYXRpb24KKyAgICAjIGNvbW1hbmQgZm9yIEdOVSBDKysgZm9yIHRoZSBjYXNlIHdoZXJlIGl0IHVzZXMgdGhlIG5hdGl2ZQorICAgICMgbGlua2VyLCBpbnN0ZWFkIG9mIEdOVSBsZC4gIElmIHBvc3NpYmxlLCB0aGlzIHNldHRpbmcgc2hvdWxkCisgICAgIyBvdmVycmlkZGVuIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZSBuYXRpdmUgbGlua2VyIGZlYXR1cmVzIG9uCisgICAgIyB0aGUgcGxhdGZvcm0gaXQgaXMgYmVpbmcgdXNlZCBvbi4KKyAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRsaWInCisgIGZpCisKKyAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKyAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8IGdyZXAgIlwtTCInCisKK2Vsc2UKKyAgR1hYPW5vCisgIHdpdGhfZ251X2xkPW5vCisgIHdsYXJjPQorZmkKKworIyBQT1JUTUU6IGZpbGwgaW4gYSBkZXNjcmlwdGlvbiBvZiB5b3VyIHN5c3RlbSdzIEMrKyBsaW5rIGNoYXJhY3RlcmlzdGljcworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQorX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT15ZXMKK2Nhc2UgJGhvc3Rfb3MgaW4KKyAgYWl4MyopCisgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgIDs7CisgIGFpeDQqIHwgYWl4NSopCisgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICAgICMgT24gSUE2NCwgdGhlIGxpbmtlciBkb2VzIHJ1biB0aW1lIGxpbmtpbmcgYnkgZGVmYXVsdCwgc28gd2UgZG9uJ3QKKyAgICAgICMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgorICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworICAgICAgZXhwX3N5bV9mbGFnPSctQmV4cG9ydCcKKyAgICAgIG5vX2VudHJ5X2ZsYWc9IiIKKyAgICBlbHNlCisgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCisKKyAgICAgICMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAorICAgICAgIyBBSVggc3R5bGUgbGlua2luZy4gSWYgLWJydGwgaXMgc29tZXdoZXJlIGluIExERkxBR1MsIHdlCisgICAgICAjIG5lZWQgdG8gZG8gcnVudGltZSBsaW5raW5nLgorICAgICAgY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMjNdXXxhaXg0LltbMjNdXS4qfGFpeDUqKQorCWZvciBsZF9mbGFnIGluICRMREZMQUdTOyBkbworCSAgY2FzZSAkbGRfZmxhZyBpbgorCSAgKi1icnRsKikKKwkgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKKwkgICAgYnJlYWsKKwkgICAgOzsKKwkgIGVzYWMKKwlkb25lCisJOzsKKyAgICAgIGVzYWMKKworICAgICAgZXhwX3N5bV9mbGFnPSctYmV4cG9ydCcKKyAgICAgIG5vX2VudHJ5X2ZsYWc9Jy1ibm9lbnRyeScKKyAgICBmaQorCisgICAgIyBXaGVuIGxhcmdlIGV4ZWN1dGFibGVzIG9yIHNoYXJlZCBvYmplY3RzIGFyZSBidWlsdCwgQUlYIGxkIGNhbgorICAgICMgaGF2ZSBwcm9ibGVtcyBjcmVhdGluZyB0aGUgdGFibGUgb2YgY29udGVudHMuICBJZiBsaW5raW5nIGEgbGlicmFyeQorICAgICMgb3IgcHJvZ3JhbSByZXN1bHRzIGluICJlcnJvciBUT0Mgb3ZlcmZsb3ciIGFkZCAtbW1pbmltYWwtdG9jIHRvCisgICAgIyBDWFhGTEFHUy9DRkxBR1MgZm9yIGcrKy9nY2MuICBJbiB0aGUgY2FzZXMgd2hlcmUgdGhhdCBpcyBub3QKKyAgICAjIGVub3VnaCB0byBmaXggdGhlIHByb2JsZW0sIGFkZCAtV2wsLWJiaWd0b2MgdG8gTERGTEFHUy4KKworICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JycKKyAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPSc6JworICAgIF9MVF9BQ19UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworCisgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bWzAxMl1dfGFpeDQuW1swMTJdXS4qKQorICAgICAgIyBXZSBvbmx5IHdhbnQgdG8gZG8gdGhpcyBvbiBBSVggNC4yIGFuZCBsb3dlciwgdGhlIGNoZWNrCisgICAgICAjIGJlbG93IGZvciBicm9rZW4gY29sbGVjdDIgZG9lc24ndCB3b3JrIHVuZGVyIDQuMysKKwljb2xsZWN0Mm5hbWU9YCR7Q0N9IC1wcmludC1wcm9nLW5hbWU9Y29sbGVjdDJgCisJaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYgXAorCSAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgZ3JlcCByZXNvbHZlX2xpYl9uYW1lID4vZGV2L251bGwKKwl0aGVuCisJICAjIFdlIGhhdmUgcmV3b3JrZWQgY29sbGVjdDIKKwkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisJZWxzZQorCSAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgorCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT11bnN1cHBvcnRlZAorCSAgIyBJdCBmYWlscyB0byBmaW5kIHVuaW5zdGFsbGVkIGxpYnJhcmllcyB3aGVuIHRoZSB1bmluc3RhbGxlZAorCSAgIyBwYXRoIGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGxpYnBhdGguICBTZXR0aW5nIGhhcmRjb2RlX21pbnVzX0wKKwkgICMgdG8gdW5zdXBwb3J0ZWQgZm9yY2VzIHJlbGlua2luZworCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisJICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9CisJZmkKKwk7OworICAgICAgZXNhYworICAgICAgc2hhcmVkX2ZsYWc9Jy1zaGFyZWQnCisgICAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKwlzaGFyZWRfZmxhZz0iJHNoYXJlZF9mbGFnICInJHt3bH0tRycKKyAgICAgIGZpCisgICAgZWxzZQorICAgICAgIyBub3QgdXNpbmcgZ2NjCisgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSMgVmlzdWFsQWdlIEMrKywgVmVyc2lvbiA1LjUgZm9yIEFJWCA1TCBmb3IgSUEtNjQsIEJldGEgMyBSZWxlYXNlCisJIyBjaG9rZXMgb24gLVdsLC1HLiBUaGUgZm9sbG93aW5nIGxpbmUgaXMgY29ycmVjdDoKKwlzaGFyZWRfZmxhZz0nLUcnCisgICAgICBlbHNlCisJaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisJICBzaGFyZWRfZmxhZz0nJHt3bH0tRycKKwllbHNlCisJICBzaGFyZWRfZmxhZz0nJHt3bH0tYk06U1JFJworCWZpCisgICAgICBmaQorICAgIGZpCisKKyAgICAjIEl0IHNlZW1zIHRoYXQgLWJleHBhbGwgZG9lcyBub3QgZXhwb3J0IHN5bWJvbHMgYmVnaW5uaW5nIHdpdGgKKyAgICAjIHVuZGVyc2NvcmUgKF8pLCBzbyBpdCBpcyBiZXR0ZXIgdG8gZ2VuZXJhdGUgYSBsaXN0IG9mIHN5bWJvbHMgdG8gZXhwb3J0LgorICAgIF9MVF9BQ19UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9eWVzCisgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisgICAgICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW50aW1lIGxvYWRpbmcgZmxhZ3MgKC1icnRsKSwKKyAgICAgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KKyAgICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nLWJlcm9rJworICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuIGVtcHR5IGV4ZWN1dGFibGUuCisgICAgICBfTFRfQUNfU1lTX0xJQlBBVEhfQUlYCisgICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKworICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IlwkQ0MiJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGVjaG8gIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCisgICAgIGVsc2UKKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LVIgJGxpYmRpcjovdXNyL2xpYjovbGliJworCV9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0iLXogbm9kZWZzIgorCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyAke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzIgorICAgICAgZWxzZQorCSMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbiBlbXB0eSBleGVjdXRhYmxlLgorCV9MVF9BQ19TWVNfTElCUEFUSF9BSVgKKwlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKwkjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorCSMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KKwlfTFRfQUNfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1iZXJub3RvaycKKwlfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1iZXJvaycKKwkjIEV4cG9ydGVkIHN5bWJvbHMgY2FuIGJlIHB1bGxlZCBpbnRvIHNoYXJlZCBvYmplY3RzIGZyb20gYXJjaGl2ZXMKKwlfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyRjb252ZW5pZW5jZScKKwlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9eWVzCisJIyBUaGlzIGlzIHNpbWlsYXIgdG8gaG93IEFJWCB0cmFkaXRpb25hbGx5IGJ1aWxkcyBpdHMgc2hhcmVkIGxpYnJhcmllcy4KKwlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICR7d2x9LWJub2VudHJ5ICRjb21waWxlcl9mbGFncyAke3dsfS1iRTokZXhwb3J0X3N5bWJvbHMke2FsbG93X3VuZGVmaW5lZF9mbGFnfX4kQVIgJEFSX0ZMQUdTICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lJHJlbGVhc2UuYSAkb3V0cHV0X29iamRpci8kc29uYW1lJworICAgICAgZmkKKyAgICBmaQorICAgIDs7CisKKyAgYmVvcyopCisgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKyAgICAgICMgSm9zZXBoIEJlY2tlbmJhY2ggPGpyYjNAYmVzdC5jb20+IHNheXMgc29tZSByZWxlYXNlcyBvZiBnY2MKKyAgICAgICMgc3VwcG9ydCAtLXVuZGVmaW5lZC4gIFRoaXMgZGVzZXJ2ZXMgc29tZSBpbnZlc3RpZ2F0aW9uLiAgRklYTUUKKyAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbm9zdGFydCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICBlbHNlCisgICAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgZmkKKyAgICA7OworCisgIGNob3J1cyopCisgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICopCisJIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCTs7CisgICAgZXNhYworICAgIDs7CisKKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQorICAgICMgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSkgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCisgICAgIyBhcyB0aGVyZSBpcyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKyAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorICAgIF9MVF9BQ19UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KKyAgICBfTFRfQUNfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKKworICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworICAgICAgIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlICgxc3QgbGluZQorICAgICAgIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KKyAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorCWNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKyAgICAgIGVsc2UKKwllY2hvIEVYUE9SVFMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKwljYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworICAgICAgZml+CisgICAgICAkQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisgICAgZWxzZQorICAgICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgIGZpCisgIDs7CisgICAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICAgICBjYXNlICRob3N0X29zIGluCisgICAgICAgIHJoYXBzb2R5KiB8IGRhcndpbjEuW1swMTJdXSkKKyAgICAgICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnCisgICAgICAgICA7OworICAgICAgICopICMgRGFyd2luIDEuMyBvbgorICAgICAgICAgaWYgdGVzdCAteiAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVH0gOyB0aGVuCisgICAgICAgICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnCisgICAgICAgICBlbHNlCisgICAgICAgICAgIGNhc2UgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVR9IGluCisgICAgICAgICAgICAgMTAuW1swMTJdXSkKKyAgICAgICAgICAgICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnCisgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgIDEwLiopCisgICAgICAgICAgICAgICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJworICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgZXNhYworICAgICAgICAgZmkKKyAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKT15ZXMKKyAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPXVuc3VwcG9ydGVkCisgICAgICBfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JycKKyAgICAgIF9MVF9BQ19UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworCisgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXMgOyB0aGVuCisgICAgICBsdF9pbnRfYXBwbGVfY2Nfc2luZ2xlX21vZD1ubworICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCisgICAgICBpZiAkQ0MgLWR1bXBzcGVjcyAyPiYxIHwgJEVHUkVQICdzaW5nbGVfbW9kdWxlJyA+L2Rldi9udWxsIDsgdGhlbgorICAgICAgIGx0X2ludF9hcHBsZV9jY19zaW5nbGVfbW9kPXllcworICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIlgkbHRfaW50X2FwcGxlX2NjX3NpbmdsZV9tb2QiID0gWHllcyA7IHRoZW4KKyAgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWR5bmFtaWNsaWIgLXNpbmdsZV9tb2R1bGUgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgJHJwYXRoLyRzb25hbWUgJHZlcnN0cmluZycKKyAgICAgIGVsc2UKKyAgICAgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXIgLWtlZXBfcHJpdmF0ZV9leHRlcm5zIC1ub3N0ZGxpYiAtbyAke2xpYn0tbWFzdGVyLm8gJGxpYm9ianN+JENDIC1keW5hbWljbGliICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICR7bGlifS1tYXN0ZXIubyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSAkcnBhdGgvJHNvbmFtZSAkdmVyc3RyaW5nJworICAgICAgICBmaQorICAgICAgICBfTFRfQUNfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSk9JyRDQyAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAtYnVuZGxlICRsaWJvYmpzICRkZXBsaWJzJGNvbXBpbGVyX2ZsYWdzJworICAgICAgICAjIERvbid0IGZpeCB0aGlzIGJ5IHVzaW5nIHRoZSBsZCAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGZsYWcsIGl0IGRvZXNuJ3QgZXhpc3QgaW4gb2xkZXIgZGFyd2luIGxkcworICAgICAgICAgIGlmIHRlc3QgIlgkbHRfaW50X2FwcGxlX2NjX3NpbmdsZV9tb2QiID0gWHllcyA7IHRoZW4KKyAgICAgICAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAtZHluYW1pY2xpYiAtc2luZ2xlX21vZHVsZSAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSAkcnBhdGgvJHNvbmFtZSAkdmVyc3RyaW5nfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgLXIgLWtlZXBfcHJpdmF0ZV9leHRlcm5zIC1ub3N0ZGxpYiAtbyAke2xpYn0tbWFzdGVyLm8gJGxpYm9ianN+JENDIC1keW5hbWljbGliICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICR7bGlifS1tYXN0ZXIubyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSAkcnBhdGgvJHNvbmFtZSAkdmVyc3RyaW5nfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKKyAgICAgICAgICBmaQorICAgICAgICAgICAgX0xUX0FDX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnICAtbyAkbGliIC1idW5kbGUgJGxpYm9ianMgJGRlcGxpYnMkY29tcGlsZXJfZmxhZ3N+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JworICAgICAgZWxzZQorICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgeGxjKikKKyAgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdlY2hvJworICAgICAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtcW1rc2hyb2JqICR7d2x9LXNpbmdsZV9tb2R1bGUgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWluc3RhbGxfbmFtZSAke3dsfWBlY2hvICRycGF0aC8kc29uYW1lYCAkdmVyc3RyaW5nJworICAgICAgICAgIF9MVF9BQ19UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0nJENDICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliIC1idW5kbGUgJGxpYm9ianMgJGRlcGxpYnMkY29tcGlsZXJfZmxhZ3MnCisgICAgICAgICAgIyBEb24ndCBmaXggdGhpcyBieSB1c2luZyB0aGUgbGQgLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCBmbGFnLCBpdCBkb2Vzbid0IGV4aXN0IGluIG9sZGVyIGRhcndpbiBsZHMKKyAgICAgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgLXFta3Nocm9iaiAke3dsfS1zaW5nbGVfbW9kdWxlICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1pbnN0YWxsX25hbWUgJHt3bH0kcnBhdGgvJHNvbmFtZSAkdmVyc3RyaW5nfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKKyAgICAgICAgICBfTFRfQUNfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpPSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFnc35ubWVkaXQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCisgICAgICAgICAgOzsKKyAgICAgICAqKQorICAgICAgICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICBmaQorICAgICAgICA7OworCisgIGRndXgqKQorICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICBlYysrKikKKwkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJOzsKKyAgICAgIGdoY3gqKQorCSMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCTs7CisgICAgICAqKQorCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwk7OworICAgIGVzYWMKKyAgICA7OworICBmcmVlYnNkW1sxMl1dKikKKyAgICAjIEMrKyBzaGFyZWQgbGlicmFyaWVzIHJlcG9ydGVkIHRvIGJlIGZhaXJseSBicm9rZW4gYmVmb3JlIHN3aXRjaCB0byBFTEYKKyAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgOzsKKyAgZnJlZWJzZC1lbGYqKQorICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworICAgIDs7CisgIGZyZWVic2QqIHwga2ZyZWVic2QqLWdudSB8IGRyYWdvbmZseSopCisgICAgIyBGcmVlQlNEIDMgYW5kIGxhdGVyIHVzZSBHTlUgQysrIGFuZCBHTlUgbGQgd2l0aCBzdGFuZGFyZCBFTEYKKyAgICAjIGNvbnZlbnRpb25zCisgICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT15ZXMKKyAgICA7OworICBnbnUqKQorICAgIDs7CisgIGhwdXg5KikKKyAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorICAgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMgIyBOb3QgaW4gdGhlIHNlYXJjaCBQQVRILAorCQkJCSMgYnV0IGFzIHRoZSBkZWZhdWx0CisJCQkJIyBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKworICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgQ0MqKQorICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICA7OworICAgIGFDQyopCisgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckcm0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLWIgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKyAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisgICAgICAjCisgICAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisgICAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorICAgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorICAgICAgIyBkZXBlbmRlbmNpZXMuCisgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCgkQ0MgLWIgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEpIHwgZ3JlcCAiW1stXV1MImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBlY2hvICRsaXN0JworICAgICAgOzsKKyAgICAqKQorICAgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJHJtICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICBlbHNlCisgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKKyAgaHB1eDEwKnxocHV4MTEqKQorICAgIGlmIHRlc3QgJHdpdGhfZ251X2xkID0gbm87IHRoZW4KKyAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfStiICR7d2x9JGxpYmRpcicKKyAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKworICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIGhwcGEqNjQqfGlhNjQqKQorCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCwgJDEpPScrYiAkbGliZGlyJworICAgICAgICA7OworICAgICAgKikKKwlfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworICAgICAgICA7OworICAgICAgZXNhYworICAgIGZpCisgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICBocHBhKjY0KnxpYTY0KikKKyAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KKyAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworICAgICopCisgICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzICMgTm90IGluIHRoZSBzZWFyY2ggUEFUSCwKKwkJCQkJICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQKKwkJCQkJICAgICAgIyBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKyAgICAgIDs7CisgICAgZXNhYworCisgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgIENDKikKKwkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJOzsKKyAgICAgIGFDQyopCisJY2FzZSAkaG9zdF9jcHUgaW4KKwlocHBhKjY0KikKKwkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJaWE2NCopCisJICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCSopCisJICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJZXNhYworCSMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkjCisJIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQorCSMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCisJIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorCSMgZGVwZW5kZW5jaWVzLgorCW91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gKCRDQyAtYiAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSkgfCBncmVwICJcLUwiYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGVjaG8gJGxpc3QnCisJOzsKKyAgICAgICopCisJaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKwkgIGlmIHRlc3QgJHdpdGhfZ251X2xkID0gbm87IHRoZW4KKwkgICAgY2FzZSAkaG9zdF9jcHUgaW4KKwkgICAgaHBwYSo2NCopCisJICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgIDs7CisJICAgIGlhNjQqKQorCSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICA7OworCSAgICAqKQorCSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgIGZpCisJZWxzZQorCSAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJZmkKKwk7OworICAgIGVzYWMKKyAgICA7OworICBpbnRlcml4MyopCisgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisgICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKyAgICAjIEhhY2s6IE9uIEludGVyaXggMy54LCB3ZSBjYW5ub3QgY29tcGlsZSBQSUMgYmVjYXVzZSBvZiBhIGJyb2tlbiBnY2MuCisgICAgIyBJbnN0ZWFkLCBzaGFyZWQgbGlicmFyaWVzIGFyZSBsb2FkZWQgYXQgYW4gaW1hZ2UgYmFzZSAoMHgxMDAwMDAwMCBieQorICAgICMgZGVmYXVsdCkgYW5kIHJlbG9jYXRlZCBpZiB0aGV5IGNvbmZsaWN0LCB3aGljaCBpcyBhIHNsb3cgdmVyeSBtZW1vcnkKKyAgICAjIGNvbnN1bWluZyBhbmQgZnJhZ21lbnRpbmcgcHJvY2Vzcy4gIFRvIGF2b2lkIHRoaXMsIHdlIHBpY2sgYSByYW5kb20sCisgICAgIyAyNTYgS2lCLWFsaWduZWQgaW1hZ2UgYmFzZSBiZXR3ZWVuIDB4NTAwMDAwMDAgYW5kIDB4NkZGQzAwMDAgYXQgbGluaworICAgICMgdGltZS4gIE1vdmluZyB1cCBmcm9tIDB4MTAwMDAwMDAgYWxzbyBhbGxvd3MgbW9yZSBzYnJrKDIpIHNwYWNlLgorICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3NlZCAicyxeLF8sIiAkZXhwb3J0X3N5bWJvbHMgPiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1yZXRhaW4tc3ltYm9scy1maWxlLCRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisgICAgOzsKKyAgaXJpeDUqIHwgaXJpeDYqKQorICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICBDQyopCisJIyBTR0kgQysrCisJX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLWFsbCAtbXVsdGlnb3QgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCisJIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJIyAiQ0MgLWFyIiwgd2hlcmUgIkNDIiBpcyB0aGUgSVJJWCBDKysgY29tcGlsZXIuICBUaGlzIGlzCisJIyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIGluc3RhbnRpYXRlZCB0ZW1wbGF0ZXMgYXJlIGluY2x1ZGVkCisJIyBpbiB0aGUgYXJjaGl2ZS4KKwlfTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC1hciAtV1IsLXUgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwk7OworICAgICAgKikKKwlpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorCSAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmdgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJICBlbHNlCisJICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmdgIC1vICRsaWInCisJICBmaQorCWZpCisJX0xUX0FDX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisJOzsKKyAgICBlc2FjCisgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisgICAgOzsKKyAgbGludXgqKQorICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICBLQ0MqKQorCSMgS3VjayBhbmQgQXNzb2NpYXRlcywgSW5jLiAoS0FJKSBDKysgQ29tcGlsZXIKKworCSMgS0NDIHdpbGwgb25seSBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeSBpZiB0aGUgb3V0cHV0IGZpbGUKKwkjIGVuZHMgd2l0aCAiLnNvIiAob3IgIi5zbCIgZm9yIEhQLVVYKSwgc28gcmVuYW1lIHRoZSBsaWJyYXJ5CisJIyB0byBpdHMgcHJvcGVyIG5hbWUgKHdpdGggdmVyc2lvbikgYWZ0ZXIgbGlua2luZy4KKwlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFtbXigpMC05QS1aYS16e31dXVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gJGxpYiB8ICRTRUQgLWUgInMvXCR7dGVtcGV4dH1cLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYjsgbXYgXCR0ZW1wbGliICRsaWInCisJX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW1teKCkwLTlBLVphLXp7fV1dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAkbGliIHwgJFNFRCAtZSAicy9cJHt0ZW1wZXh0fVwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzOyBtdiBcJHRlbXBsaWIgJGxpYicKKwkjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJIworCSMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKwkjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorCSMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKwkjIGRlcGVuZGVuY2llcy4KKwlvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgLW8gbGliY29uZnRlc3Qkc2hhcmVkX2V4dCAyPiYxIHwgZ3JlcCAibGQiYDsgcm0gLWYgbGliY29uZnRlc3Qkc2hhcmVkX2V4dDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGVjaG8gJGxpc3QnCisKKwlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXJwYXRoLCRsaWJkaXInCisJX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworCisJIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJIyAiQ0MgLUJzdGF0aWMiLCB3aGVyZSAiQ0MiIGlzIHRoZSBLQUkgQysrIGNvbXBpbGVyLgorCV9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLUJzdGF0aWMgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwk7OworICAgICAgaWNwYyopCisJIyBJbnRlbCBDKysKKwl3aXRoX2dudV9sZD15ZXMKKwkjIHZlcnNpb24gOC4wIGFuZCBhYm92ZSBvZiBpY3BjIGNob2tlIG9uIG11bHRpcGx5IGRlZmluZWQgc3ltYm9scworCSMgaWYgd2UgYWRkICRwcmVkZXBfb2JqZWN0cyBhbmQgJHBvc3RkZXBfb2JqZWN0cywgaG93ZXZlciA3LjEgYW5kCisJIyBlYXJsaWVyIGRvIG5vdCBhZGQgdGhlIG9iamVjdHMgdGhlbXNlbHZlcy4KKwljYXNlIGAkQ0MgLVYgMj4mMWAgaW4KKwkqIlZlcnNpb24gNy4iKikKKyAgCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgIAkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkgIDs7CisJKikgICMgVmVyc2lvbiA4LjAgb3IgbmV3ZXIKKwkgIHRtcF9pZHluPQorCSAgY2FzZSAkaG9zdF9jcHUgaW4KKwkgICAgaWE2NCopIHRtcF9pZHluPScgLWlfZHluYW1pYyc7OworCSAgZXNhYworICAJICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCciJHRtcF9pZHluIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQnIiR0bXBfaWR5biInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCSAgOzsKKwllc2FjCisJX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisJX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworCV9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJOzsKKyAgICAgIHBnQ0MqKQorICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIEMrKyBjb21waWxlcgorCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAtbyAkbGliJworICAJX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisKKwlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXJwYXRoICR7d2x9JGxpYmRpcicKKwlfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCisJX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkZWNobyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisgICAgICAgIDs7CisgICAgICBjeHgqKQorCSMgQ29tcGFxIEMrKworCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgIC1vICRsaWIgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMnCisKKwlydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctcnBhdGggJGxpYmRpcicKKwlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisKKwkjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJIworCSMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKwkjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorCSMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKwkjIGRlcGVuZGVuY2llcy4KKwlvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgZ3JlcCAibGQiYDsgdGVtcGxpc3Q9YGVjaG8gJHRlbXBsaXN0IHwgJFNFRCAicy9cKF4uKmxkLipcKVwoIC4qbGQgLiokXCkvXDEvImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBlY2hvICRsaXN0JworCTs7CisgICAgZXNhYworICAgIDs7CisgIGx5bnhvcyopCisgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgIDs7CisgIG04OGsqKQorICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICA7OworICBtdnMqKQorICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICBjeHgqKQorCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwk7OworICAgICAgKikKKwkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJOzsKKyAgICBlc2FjCisgICAgOzsKKyAgbmV0YnNkKikKKyAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGxpbmtlcl9mbGFncycKKyAgICAgIHdsYXJjPQorICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKyAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgIGZpCisgICAgIyBXb3JrYXJvdW5kIHNvbWUgYnJva2VuIHByZS0xLjUgdG9vbGNoYWlucworICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8IGdyZXAgY29uZnRlc3QuJG9iamV4dCB8ICRTRUQgLWUgInM6LWxnY2MgLWxjIC1sZ2NjOjoiJworICAgIDs7CisgIG9wZW5ic2QyKikKKyAgICAjIEMrKyBzaGFyZWQgbGlicmFyaWVzIGFyZSBmYWlybHkgYnJva2VuCisgICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgIDs7CisgIG9wZW5ic2QqKQorICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRsaWInCisgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisgICAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKyAgICAgIF9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0iJHdsYXJjIictLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyIkd2xhcmMiJy0tbm8td2hvbGUtYXJjaGl2ZScKKyAgICBmaQorICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdlY2hvJworICAgIDs7CisgIG9zZjMqKQorICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICBLQ0MqKQorCSMgS3VjayBhbmQgQXNzb2NpYXRlcywgSW5jLiAoS0FJKSBDKysgQ29tcGlsZXIKKworCSMgS0NDIHdpbGwgb25seSBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeSBpZiB0aGUgb3V0cHV0IGZpbGUKKwkjIGVuZHMgd2l0aCAiLnNvIiAob3IgIi5zbCIgZm9yIEhQLVVYKSwgc28gcmVuYW1lIHRoZSBsaWJyYXJ5CisJIyB0byBpdHMgcHJvcGVyIG5hbWUgKHdpdGggdmVyc2lvbikgYWZ0ZXIgbGlua2luZy4KKwlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFtbXigpMC05QS1aYS16e31dXVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gJGxpYiB8ICRTRUQgLWUgInMvXCR7dGVtcGV4dH1cLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYjsgbXYgXCR0ZW1wbGliICRsaWInCisKKwlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisKKwkjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKwkjICJDQyAtQnN0YXRpYyIsIHdoZXJlICJDQyIgaXMgdGhlIEtBSSBDKysgY29tcGlsZXIuCisJX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtQnN0YXRpYyAtbyAkb2xkbGliICRvbGRvYmpzJworCisJOzsKKyAgICAgIFJDQyopCisJIyBSYXRpb25hbCBDKysgMi40LjEKKwkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJOzsKKyAgICAgIGN4eCopCisJX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKwlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisKKwlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKworCSMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkjCisJIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQorCSMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCisJIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorCSMgZGVwZW5kZW5jaWVzLgorCW91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCBncmVwICJsZCIgfCBncmVwIC12ICJsZDoiYDsgdGVtcGxpc3Q9YGVjaG8gJHRlbXBsaXN0IHwgJFNFRCAicy9cKF4uKmxkLipcKVwoIC4qbGQuKiRcKS9cMS8iYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGVjaG8gJGxpc3QnCisJOzsKKyAgICAgICopCisJaWYgdGVzdCAiJEdYWCIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKworCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKwkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKworCSAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8IGdyZXAgIlwtTCInCisKKwllbHNlCisJICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwlmaQorCTs7CisgICAgZXNhYworICAgIDs7CisgIG9zZjQqIHwgb3NmNSopCisgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgIEtDQyopCisJIyBLdWNrIGFuZCBBc3NvY2lhdGVzLCBJbmMuIChLQUkpIEMrKyBDb21waWxlcgorCisJIyBLQ0Mgd2lsbCBvbmx5IGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5IGlmIHRoZSBvdXRwdXQgZmlsZQorCSMgZW5kcyB3aXRoICIuc28iIChvciAiLnNsIiBmb3IgSFAtVVgpLCBzbyByZW5hbWUgdGhlIGxpYnJhcnkKKwkjIHRvIGl0cyBwcm9wZXIgbmFtZSAod2l0aCB2ZXJzaW9uKSBhZnRlciBsaW5raW5nLgorCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW1teKCkwLTlBLVphLXp7fV1dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAkbGliIHwgJFNFRCAtZSAicy9cJHt0ZW1wZXh0fVwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliOyBtdiBcJHRlbXBsaWIgJGxpYicKKworCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJworCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKworCSMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZworCSMgdGhlIEtBSSBDKysgY29tcGlsZXIuCisJX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbyAkb2xkbGliICRvbGRvYmpzJworCTs7CisgICAgICBSQ0MqKQorCSMgUmF0aW9uYWwgQysrIDIuNC4xCisJIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCTs7CisgICAgICBjeHgqKQorCV9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKKwlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZm9yIGkgaW4gYGNhdCAkZXhwb3J0X3N5bWJvbHNgOyBkbyBwcmludGYgIiVzICVzXFxuIiAtZXhwb3J0ZWRfc3ltYm9sICJcJGkiID4+ICRsaWIuZXhwOyBkb25lfgorCSAgZWNobyAiLWhpZGRlbiI+PiAkbGliLmV4cH4KKwkgICRDQyAtc2hhcmVkJGFsbG93X3VuZGVmaW5lZF9mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgLVdsLC1pbnB1dCAtV2wsJGxpYi5leHAgIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbgkkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWJ+CisJICAkcm0gJGxpYi5leHAnCisKKwlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLXJwYXRoICRsaWJkaXInCisJX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorCisJIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSMKKwkjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisJIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKwkjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisJIyBkZXBlbmRlbmNpZXMuCisJb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8IGdyZXAgImxkIiB8IGdyZXAgLXYgImxkOiJgOyB0ZW1wbGlzdD1gZWNobyAkdGVtcGxpc3QgfCAkU0VEICJzL1woXi4qbGQuKlwpXCggLipsZC4qJFwpL1wxLyJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZWNobyAkbGlzdCcKKwk7OworICAgICAgKikKKwlpZiB0ZXN0ICIkR1hYIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwkgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCisJIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKworCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKwkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKworCSAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8IGdyZXAgIlwtTCInCisKKwllbHNlCisJICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwlmaQorCTs7CisgICAgZXNhYworICAgIDs7CisgIHBzb3MqKQorICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICA7OworICBzdW5vczQqKQorICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICBDQyopCisJIyBTdW4gQysrIDQueAorCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwk7OworICAgICAgbGNjKikKKwkjIEx1Y2lkCisJIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCTs7CisgICAgICAqKQorCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwk7OworICAgIGVzYWMKKyAgICA7OworICBzb2xhcmlzKikKKyAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgQ0MqKQorCSMgU3VuIEMrKyA0LjIsIDUueCBhbmQgQ2VudGVybGluZSBDKysKKyAgICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywkMSk9eWVzCisJX0xUX0FDX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgLXpkZWZzJworCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfiRlY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorCSRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICAke3dsfS1NICR7d2x9JGxpYi5leHAgLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRybSAkbGliLmV4cCcKKworCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisJX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKwljYXNlICRob3N0X29zIGluCisJICBzb2xhcmlzMi5bWzAtNV1dIHwgc29sYXJpczIuW1swLTVdXS4qKSA7OworCSAgKikKKwkgICAgIyBUaGUgQysrIGNvbXBpbGVyIGlzIHVzZWQgYXMgbGlua2VyIHNvIHdlIG11c3QgdXNlICR3bAorCSAgICAjIGZsYWcgdG8gcGFzcyB0aGUgY29tbWFuZHMgdG8gdGhlIHVuZGVybHlpbmcgc3lzdGVtCisJICAgICMgbGlua2VyLiBXZSBtdXN0IGFsc28gcGFzcyBlYWNoIGNvbnZpZW5jZSBsaWJyYXJ5IHRocm91Z2gKKwkgICAgIyB0byB0aGUgc3lzdGVtIGxpbmtlciBiZXR3ZWVuIGFsbGV4dHJhY3QvZGVmYXVsdGV4dHJhY3QuCisJICAgICMgVGhlIEMrKyBjb21waWxlciB3aWxsIGNvbWJpbmUgbGlua2VyIG9wdGlvbnMgc28gd2UKKwkgICAgIyBjYW5ub3QganVzdCBwYXNzIHRoZSBjb252aWVuY2UgbGlicmFyeSBuYW1lcyB0aHJvdWdoCisJICAgICMgd2l0aG91dCAkd2wuCisJICAgICMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCisJICAgIF9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0teiAke3dsfWFsbGV4dHJhY3RgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkZWNobyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0teiAke3dsfWRlZmF1bHRleHRyYWN0JworCSAgICA7OworCWVzYWMKKwlfTFRfQUNfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKworCW91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdlY2hvJworCisJIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJIyAiQ0MgLXhhciIsIHdoZXJlICJDQyIgaXMgdGhlIFN1biBDKysgY29tcGlsZXIuICBUaGlzIGlzCisJIyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIGluc3RhbnRpYXRlZCB0ZW1wbGF0ZXMgYXJlIGluY2x1ZGVkCisJIyBpbiB0aGUgYXJjaGl2ZS4KKwlfTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC14YXIgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwk7OworICAgICAgZ2N4KikKKwkjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKKworCSMgVGhlIEMrKyBjb21waWxlciBtdXN0IGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBhcmNoaXZlLgorCV9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgJExERkxBR1MgLWFyY2hpdmUgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwk7OworICAgICAgKikKKwkjIEdOVSBDKysgY29tcGlsZXIgd2l0aCBTb2xhcmlzIGxpbmtlcgorCWlmIHRlc3QgIiRHWFgiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCSAgX0xUX0FDX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0teiAke3dsfWRlZnMnCisJICBpZiAkQ0MgLS12ZXJzaW9uIHwgZ3JlcCAtdiAnXjJcLjcnID4gL2Rldi9udWxsOyB0aGVuCisJICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkTERGTEFHUyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCAkd2wkc29uYW1lIC1vICRsaWInCisJICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH4kZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkJJENDIC1zaGFyZWQgLW5vc3RkbGliICR7d2x9LU0gJHdsJGxpYi5leHAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JHJtICRsaWIuZXhwJworCisJICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0iJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCBncmVwIFwiXC1MXCIiCisJICBlbHNlCisJICAgICMgZysrIDIuNyBhcHBlYXJzIHRvIHJlcXVpcmUgYC1HJyBOT1QgYC1zaGFyZWQnIG9uIHRoaXMKKwkgICAgIyBwbGF0Zm9ybS4KKwkgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HIC1ub3N0ZGxpYiAkTERGTEFHUyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCAkd2wkc29uYW1lIC1vICRsaWInCisJICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH4kZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkJJENDIC1HIC1ub3N0ZGxpYiAke3dsfS1NICR3bCRsaWIuZXhwIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRybSAkbGliLmV4cCcKKworCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9IiRDQyAtRyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8IGdyZXAgXCJcLUxcIiIKKwkgIGZpCisKKwkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1SICR3bCRsaWJkaXInCisJZmkKKwk7OworICAgIGVzYWMKKyAgICA7OworICBzeXN2NCp1dzIqIHwgc3lzdjVPcGVuVU5JWCogfCBzeXN2NVVuaXhXYXJlNy5bWzAxXV0uW1sxMF1dKiB8IHVuaXh3YXJlNyogfCBzY28zLjJ2NS4wLltbMDI0XV0qKQorICAgIF9MVF9BQ19UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0teix0ZXh0JworICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworCisgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgIENDKikKKwlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCTs7CisgICAgICAqKQorCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCTs7CisgICAgZXNhYworICAgIDs7CisgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiopCisgICAgIyBOb3RlOiBXZSBjYW4gTk9UIHVzZSAteiBkZWZzIGFzIHdlIG1pZ2h0IGRlc2lyZSwgYmVjYXVzZSB3ZSBkbyBub3QKKyAgICAjIGxpbmsgd2l0aCAtbGMsIGFuZCB0aGF0IHdvdWxkIGNhdXNlIGFueSBzeW1ib2xzIHVzZWQgZnJvbSBsaWJjIHRvCisgICAgIyBhbHdheXMgYmUgdW5yZXNvbHZlZCwgd2hpY2ggbWVhbnMganVzdCBhYm91dCBubyBsaWJyYXJ5IHdvdWxkCisgICAgIyBldmVyIGxpbmsgY29ycmVjdGx5LiAgSWYgd2UncmUgbm90IHVzaW5nIEdOVSBsZCB3ZSB1c2UgLXogdGV4dAorICAgICMgdGhvdWdoLCB3aGljaCBkb2VzIGNhdGNoIHNvbWUgYmFkIHN5bWJvbHMgYnV0IGlzbid0IGFzIGhlYXZ5LWhhbmRlZAorICAgICMgYXMgLXogZGVmcy4KKyAgICAjIEZvciBzZWN1cml0eSByZWFzb25zLCBpdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgYWx3YXlzCisgICAgIyB1c2UgYWJzb2x1dGUgcGF0aHMgZm9yIG5hbWluZyBzaGFyZWQgbGlicmFyaWVzLCBhbmQgZXhjbHVkZSB0aGUKKyAgICAjIERUX1JVTlBBVEggdGFnIGZyb20gZXhlY3V0YWJsZXMgYW5kIGxpYnJhcmllcy4gIEJ1dCBkb2luZyBzbworICAgICMgcmVxdWlyZXMgdGhhdCB5b3UgY29tcGlsZSBldmVyeXRoaW5nIHR3aWNlLCB3aGljaCBpcyBhIHBhaW4uCisgICAgIyBTbyB0aGF0IGJlaGF2aW91ciBpcyBvbmx5IGVuYWJsZWQgaWYgU0NPQUJTUEFUSCBpcyBzZXQgdG8gYQorICAgICMgbm9uLWVtcHR5IHZhbHVlIGluIHRoZSBlbnZpcm9ubWVudC4gIE1vc3QgbGlrZWx5IG9ubHkgdXNlZnVsIGZvcgorICAgICMgY3JlYXRpbmcgb2ZmaWNpYWwgZGlzdHJpYnV0aW9ucyBvZiBwYWNrYWdlcy4KKyAgICAjIFRoaXMgaXMgYSBoYWNrIHVudGlsIGxpYnRvb2wgb2ZmaWNpYWxseSBzdXBwb3J0cyBhYnNvbHV0ZSBwYXRoCisgICAgIyBuYW1lcyBmb3Igc2hhcmVkIGxpYnJhcmllcy4KKyAgICBfTFRfQUNfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosdGV4dCcKKyAgICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosbm9kZWZzJworICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9J2B0ZXN0IC16ICIkU0NPQUJTUEFUSCIgJiYgZWNobyAke3dsfS1SLCRsaWJkaXJgJworICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPSc6JworICAgIF9MVF9BQ19UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworICAgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUJleHBvcnQnCisgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworCisgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgIENDKikKKwlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJOzsKKyAgICAgICopCisJX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwk7OworICAgIGVzYWMKKyAgICA7OworICB0YW5kZW0qKQorICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICBOQ0MqKQorCSMgTm9uU3RvcC1VWCBOQ0MgMy4yMAorCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwk7OworICAgICAgKikKKwkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJOzsKKyAgICBlc2FjCisgICAgOzsKKyAgdnh3b3JrcyopCisgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgIDs7CisgICopCisgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgIDs7Citlc2FjCitBQ19NU0dfUkVTVUxUKFskX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKV0pCit0ZXN0ICIkX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKSIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCisKK19MVF9BQ19UQUdWQVIoR0NDLCAkMSk9IiRHWFgiCitfTFRfQUNfVEFHVkFSKExELCAkMSk9IiRMRCIKKworQUNfTElCVE9PTF9QT1NUREVQX1BSRURFUCgkMSkKK0FDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9QSUMoJDEpCitBQ19MSUJUT09MX1BST0dfQ0NfQ19PKCQxKQorQUNfTElCVE9PTF9TWVNfSEFSRF9MSU5LX0xPQ0tTKCQxKQorQUNfTElCVE9PTF9QUk9HX0xEX1NITElCUygkMSkKK0FDX0xJQlRPT0xfU1lTX0RZTkFNSUNfTElOS0VSKCQxKQorQUNfTElCVE9PTF9QUk9HX0xEX0hBUkRDT0RFX0xJQlBBVEgoJDEpCisKK0FDX0xJQlRPT0xfQ09ORklHKCQxKQorCitBQ19MQU5HX1BPUAorQ0M9JGx0X3NhdmVfQ0MKK0xEQ1hYPSRMRAorTEQ9JGx0X3NhdmVfTEQKK0dDQz0kbHRfc2F2ZV9HQ0MKK3dpdGhfZ251X2xkY3h4PSR3aXRoX2dudV9sZAord2l0aF9nbnVfbGQ9JGx0X3NhdmVfd2l0aF9nbnVfbGQKK2x0X2N2X3BhdGhfTERDWFg9JGx0X2N2X3BhdGhfTEQKK2x0X2N2X3BhdGhfTEQ9JGx0X3NhdmVfcGF0aF9MRAorbHRfY3ZfcHJvZ19nbnVfbGRjeHg9JGx0X2N2X3Byb2dfZ251X2xkCitsdF9jdl9wcm9nX2dudV9sZD0kbHRfc2F2ZV93aXRoX2dudV9sZAorXSkjIEFDX0xJQlRPT0xfTEFOR19DWFhfQ09ORklHCisKKyMgQUNfTElCVE9PTF9QT1NUREVQX1BSRURFUChbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBGaWd1cmUgb3V0ICJoaWRkZW4iIGxpYnJhcnkgZGVwZW5kZW5jaWVzIGZyb20gdmVyYm9zZQorIyBjb21waWxlciBvdXRwdXQgd2hlbiBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisjIFBhcnNlIHRoZSBjb21waWxlciBvdXRwdXQgYW5kIGV4dHJhY3QgdGhlIG5lY2Vzc2FyeQorIyBvYmplY3RzLCBsaWJyYXJpZXMgYW5kIGxpYnJhcnkgZmxhZ3MuCitBQ19ERUZVTihbQUNfTElCVE9PTF9QT1NUREVQX1BSRURFUF0sWworZG5sIHdlIGNhbid0IHVzZSB0aGUgbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIGhlcmUsCitkbmwgYmVjYXVzZSBpdCBjb250YWlucyBjb2RlIGludGVuZGVkIGZvciBhbiBleGVjdXRhYmxlLAorZG5sIG5vdCBhIGxpYnJhcnkuICBJdCdzIHBvc3NpYmxlIHdlIHNob3VsZCBsZXQgZWFjaAorZG5sIHRhZyBkZWZpbmUgYSBuZXcgbHRfPz8/P19saW5rX3Rlc3RfY29kZSB2YXJpYWJsZSwKK2RubCBidXQgaXQncyBvbmx5IHVzZWQgaGVyZS4uLgoraWZlbHNlKFskMV0sW10sW2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKK2ludCBhOwordm9pZCBmb28gKHZvaWQpIHsgYSA9IDA7IH0KK0VPRgorXSxbJDFdLFtDWFhdLFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCitjbGFzcyBGb28KK3sKK3B1YmxpYzoKKyAgRm9vICh2b2lkKSB7IGEgPSAwOyB9Citwcml2YXRlOgorICBpbnQgYTsKK307CitFT0YKK10sWyQxXSxbRjc3XSxbY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorICAgICAgc3Vicm91dGluZSBmb28KKyAgICAgIGltcGxpY2l0IG5vbmUKKyAgICAgIGludGVnZXIqNCBhCisgICAgICBhPTAKKyAgICAgIHJldHVybgorICAgICAgZW5kCitFT0YKK10sWyQxXSxbR0NKXSxbY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorcHVibGljIGNsYXNzIGZvbyB7CisgIHByaXZhdGUgaW50IGE7CisgIHB1YmxpYyB2b2lkIGJhciAodm9pZCkgeworICAgIGEgPSAwOworICB9Cit9OworRU9GCitdKQorZG5sIFBhcnNlIHRoZSBjb21waWxlciBvdXRwdXQgYW5kIGV4dHJhY3QgdGhlIG5lY2Vzc2FyeQorZG5sIG9iamVjdHMsIGxpYnJhcmllcyBhbmQgbGlicmFyeSBmbGFncy4KK2lmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisgICMgUGFyc2UgdGhlIGNvbXBpbGVyIG91dHB1dCBhbmQgZXh0cmFjdCB0aGUgbmVjZXNzYXJ5CisgICMgb2JqZWN0cywgbGlicmFyaWVzIGFuZCBsaWJyYXJ5IGZsYWdzLgorCisgICMgU2VudGluZWwgdXNlZCB0byBrZWVwIHRyYWNrIG9mIHdoZXRoZXIgb3Igbm90IHdlIGFyZSBiZWZvcmUKKyAgIyB0aGUgY29uZnRlc3Qgb2JqZWN0IGZpbGUuCisgIHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmU9bm8KKworICAjIFRoZSBgKicgaW4gdGhlIGNhc2UgbWF0Y2hlcyBmb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IHVzZSBgY2FzZScgaW4KKyAgIyAkb3V0cHV0X3ZlcmJvc2VfY21kIGNhbiB0cmlnZ2VyIGdsb2IgZXhwYW5zaW9uIGR1cmluZyB0aGUgbG9vcAorICAjIGV2YWwgd2l0aG91dCB0aGlzIHN1YnN0aXR1dGlvbi4KKyAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9YCRlY2hvICJYJG91dHB1dF92ZXJib3NlX2xpbmtfY21kIiB8ICRYc2VkIC1lICIkbm9fZ2xvYl9zdWJzdCJgCisKKyAgZm9yIHAgaW4gYGV2YWwgJG91dHB1dF92ZXJib3NlX2xpbmtfY21kYDsgZG8KKyAgICBjYXNlICRwIGluCisKKyAgICAtTCogfCAtUiogfCAtbCopCisgICAgICAgIyBTb21lIGNvbXBpbGVycyBwbGFjZSBzcGFjZSBiZXR3ZWVuICIte0wsUn0iIGFuZCB0aGUgcGF0aC4KKyAgICAgICAjIFJlbW92ZSB0aGUgc3BhY2UuCisgICAgICAgaWYgdGVzdCAkcCA9ICItTCIgXAorCSAgfHwgdGVzdCAkcCA9ICItUiI7IHRoZW4KKwkgcHJldj0kcAorCSBjb250aW51ZQorICAgICAgIGVsc2UKKwkgcHJldj0KKyAgICAgICBmaQorCisgICAgICAgaWYgdGVzdCAiJHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmUiID0gbm87IHRoZW4KKwkgY2FzZSAkcCBpbgorCSAtTCogfCAtUiopCisJICAgIyBJbnRlcm5hbCBjb21waWxlciBsaWJyYXJ5IHBhdGhzIHNob3VsZCBjb21lIGFmdGVyIHRob3NlCisJICAgIyBwcm92aWRlZCB0aGUgdXNlci4gIFRoZSBwb3N0ZGVwcyBhbHJlYWR5IGNvbWUgYWZ0ZXIgdGhlCisJICAgIyB1c2VyIHN1cHBsaWVkIGxpYnMgc28gdGhlcmUgaXMgbm8gbmVlZCB0byBwcm9jZXNzIHRoZW0uCisJICAgaWYgdGVzdCAteiAiJF9MVF9BQ19UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSkiOyB0aGVuCisJICAgICBfTFRfQUNfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpPSIke3ByZXZ9JHtwfSIKKwkgICBlbHNlCisJICAgICBfTFRfQUNfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpPSIke19MVF9BQ19UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSl9ICR7cHJldn0ke3B9IgorCSAgIGZpCisJICAgOzsKKwkgIyBUaGUgIi1sIiBjYXNlIHdvdWxkIG5ldmVyIGNvbWUgYmVmb3JlIHRoZSBvYmplY3QgYmVpbmcKKwkgIyBsaW5rZWQsIHNvIGRvbid0IGJvdGhlciBoYW5kbGluZyB0aGlzIGNhc2UuCisJIGVzYWMKKyAgICAgICBlbHNlCisJIGlmIHRlc3QgLXogIiRfTFRfQUNfVEFHVkFSKHBvc3RkZXBzLCAkMSkiOyB0aGVuCisJICAgX0xUX0FDX1RBR1ZBUihwb3N0ZGVwcywgJDEpPSIke3ByZXZ9JHtwfSIKKwkgZWxzZQorCSAgIF9MVF9BQ19UQUdWQVIocG9zdGRlcHMsICQxKT0iJHtfTFRfQUNfVEFHVkFSKHBvc3RkZXBzLCAkMSl9ICR7cHJldn0ke3B9IgorCSBmaQorICAgICAgIGZpCisgICAgICAgOzsKKworICAgICouJG9iamV4dCkKKyAgICAgICAjIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSB0ZXN0IG9iamVjdCBmaWxlIG9ubHkgc2hvd3MgdXAKKyAgICAgICAjIG9uY2UgaW4gdGhlIGNvbXBpbGVyIG91dHB1dC4KKyAgICAgICBpZiB0ZXN0ICIkcCIgPSAiY29uZnRlc3QuJG9iamV4dCI7IHRoZW4KKwkgcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZT15ZXMKKwkgY29udGludWUKKyAgICAgICBmaQorCisgICAgICAgaWYgdGVzdCAiJHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmUiID0gbm87IHRoZW4KKwkgaWYgdGVzdCAteiAiJF9MVF9BQ19UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKSI7IHRoZW4KKwkgICBfTFRfQUNfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSk9IiRwIgorCSBlbHNlCisJICAgX0xUX0FDX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpPSIkX0xUX0FDX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpICRwIgorCSBmaQorICAgICAgIGVsc2UKKwkgaWYgdGVzdCAteiAiJF9MVF9BQ19UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSkiOyB0aGVuCisJICAgX0xUX0FDX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKT0iJHAiCisJIGVsc2UKKwkgICBfTFRfQUNfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpPSIkX0xUX0FDX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKSAkcCIKKwkgZmkKKyAgICAgICBmaQorICAgICAgIDs7CisKKyAgICAqKSA7OyAjIElnbm9yZSB0aGUgcmVzdC4KKworICAgIGVzYWMKKyAgZG9uZQorCisgICMgQ2xlYW4gdXAuCisgIHJtIC1mIGEub3V0IGEuZXhlCitlbHNlCisgIGVjaG8gImxpYnRvb2wubTQ6IGVycm9yOiBwcm9ibGVtIGNvbXBpbGluZyAkMSB0ZXN0IHByb2dyYW0iCitmaQorCiskcm0gLWYgY29uZmVzdC4kb2JqZXh0CisKKyMgUE9SVE1FOiBvdmVycmlkZSBhYm92ZSB0ZXN0IG9uIHN5c3RlbXMgd2hlcmUgaXQgaXMgYnJva2VuCitpZmVsc2UoWyQxXSxbQ1hYXSwKK1tjYXNlICRob3N0X29zIGluCitpbnRlcml4MyopCisgICMgSW50ZXJpeCAzLjUgaW5zdGFsbHMgY29tcGxldGVseSBob3NlZCAubGEgZmlsZXMgZm9yIEMrKywgc28gcmF0aGVyIHRoYW4KKyAgIyBoYWNrIGFsbCBhcm91bmQgaXQsIGxldCdzIGp1c3QgdHJ1c3QgImcrKyIgdG8gRFRSVC4KKyAgX0xUX0FDX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywkMSk9CisgIF9MVF9BQ19UQUdWQVIocG9zdGRlcF9vYmplY3RzLCQxKT0KKyAgX0xUX0FDX1RBR1ZBUihwb3N0ZGVwcywkMSk9CisgIDs7CisKK3NvbGFyaXMqKQorICBjYXNlICRjY19iYXNlbmFtZSBpbgorICBDQyopCisgICAgIyBBZGRpbmcgdGhpcyByZXF1aXJlcyBhIGtub3duLWdvb2Qgc2V0dXAgb2Ygc2hhcmVkIGxpYnJhcmllcyBmb3IKKyAgICAjIFN1biBjb21waWxlciB2ZXJzaW9ucyBiZWZvcmUgNS42LCBlbHNlIFBJQyBvYmplY3RzIGZyb20gYW4gb2xkCisgICAgIyBhcmNoaXZlIHdpbGwgYmUgbGlua2VkIGludG8gdGhlIG91dHB1dCwgbGVhZGluZyB0byBzdWJ0bGUgYnVncy4KKyAgICBfTFRfQUNfVEFHVkFSKHBvc3RkZXBzLCQxKT0nLWxDc3RkIC1sQ3J1bicKKyAgICA7OworICBlc2FjCisgIDs7Citlc2FjCitdKQorCitjYXNlICIgJF9MVF9BQ19UQUdWQVIocG9zdGRlcHMsICQxKSAiIGluCisqIiAtbGMgIiopIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubyA7OworZXNhYworXSkjIEFDX0xJQlRPT0xfUE9TVERFUF9QUkVERVAKKworIyBBQ19MSUJUT09MX0xBTkdfRjc3X0NPTkZJRworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJzIGZvciB0aGUgQyBjb21waWxlciBhcmUKKyMgc3VpdGFibHkgZGVmaW5lZC4gIFRob3NlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkKKyMgQUNfTElCVE9PTF9DT05GSUcgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgorQUNfREVGVU4oW0FDX0xJQlRPT0xfTEFOR19GNzdfQ09ORklHXSwgW19MVF9BQ19MQU5HX0Y3N19DT05GSUcoRjc3KV0pCitBQ19ERUZVTihbX0xUX0FDX0xBTkdfRjc3X0NPTkZJR10sCitbQUNfUkVRVUlSRShbQUNfUFJPR19GNzddKQorQUNfTEFOR19QVVNIKEZvcnRyYW4gNzcpCisKK19MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQorX0xUX0FDX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9CitfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPQorX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9CitfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQsICQxKT0KK19MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQorX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9bm8KK19MVF9BQ19UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSk9bm8KK19MVF9BQ19UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0KK19MVF9BQ19UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSk9CitfTFRfQUNfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT11bmtub3duCitfTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0kb2xkX2FyY2hpdmVfY21kcworX0xUX0FDX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPQorX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQorX0xUX0FDX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9bm8KKworIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIGY3NyB0ZXN0IHNvdXJjZXMuCithY19leHQ9ZgorCisjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgZjc3IHRlc3Qgc291cmNlcy4KK29iamV4dD1vCitfTFRfQUNfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKK2x0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iICAgICAgc3Vicm91dGluZSB0XG4gICAgICByZXR1cm5cbiAgICAgIGVuZFxuIgorCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cworbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSIgICAgICBwcm9ncmFtIHRcbiAgICAgIGVuZFxuIgorCisjIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCitfTFRfQUNfU1lTX0NPTVBJTEVSCisKKyMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCitfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKK19MVF9MSU5LRVJfQk9JTEVSUExBVEUKKworIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KK2x0X3NhdmVfQ0M9IiRDQyIKK0NDPSR7Rjc3LSJmNzcifQorY29tcGlsZXI9JENDCitfTFRfQUNfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCitfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCisKK0FDX01TR19DSEVDS0lORyhbaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKK0FDX01TR19SRVNVTFQoWyRjYW5fYnVpbGRfc2hhcmVkXSkKKworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXNdKQordGVzdCAiJGNhbl9idWlsZF9zaGFyZWQiID0gIm5vIiAmJiBlbmFibGVfc2hhcmVkPW5vCisKKyMgT24gQUlYLCBzaGFyZWQgbGlicmFyaWVzIGFuZCBzdGF0aWMgbGlicmFyaWVzIHVzZSB0aGUgc2FtZSBuYW1lc3BhY2UsIGFuZAorIyBhcmUgYWxsIGJ1aWx0IGZyb20gUElDLgorY2FzZSAkaG9zdF9vcyBpbgorYWl4MyopCisgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgICAgYXJjaGl2ZV9jbWRzPSIkYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkbGliIgorICAgIHBvc3RpbnN0YWxsX2NtZHM9JyRSQU5MSUIgJGxpYicKKyAgZmkKKyAgOzsKK2FpeDQqIHwgYWl4NSopCisgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NCAmJiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSBubyA7IHRoZW4KKyAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubworICBmaQorICA7OworZXNhYworQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zaGFyZWRdKQorCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllc10pCisjIE1ha2Ugc3VyZSBlaXRoZXIgZW5hYmxlX3NoYXJlZCBvciBlbmFibGVfc3RhdGljIGlzIHllcy4KK3Rlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyB8fCBlbmFibGVfc3RhdGljPXllcworQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zdGF0aWNdKQorCitfTFRfQUNfVEFHVkFSKEdDQywgJDEpPSIkRzc3IgorX0xUX0FDX1RBR1ZBUihMRCwgJDEpPSIkTEQiCisKK0FDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9QSUMoJDEpCitBQ19MSUJUT09MX1BST0dfQ0NfQ19PKCQxKQorQUNfTElCVE9PTF9TWVNfSEFSRF9MSU5LX0xPQ0tTKCQxKQorQUNfTElCVE9PTF9QUk9HX0xEX1NITElCUygkMSkKK0FDX0xJQlRPT0xfU1lTX0RZTkFNSUNfTElOS0VSKCQxKQorQUNfTElCVE9PTF9QUk9HX0xEX0hBUkRDT0RFX0xJQlBBVEgoJDEpCisKK0FDX0xJQlRPT0xfQ09ORklHKCQxKQorCitBQ19MQU5HX1BPUAorQ0M9IiRsdF9zYXZlX0NDIgorXSkjIEFDX0xJQlRPT0xfTEFOR19GNzdfQ09ORklHCisKKworIyBBQ19MSUJUT09MX0xBTkdfR0NKX0NPTkZJRworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJzIGZvciB0aGUgQyBjb21waWxlciBhcmUKKyMgc3VpdGFibHkgZGVmaW5lZC4gIFRob3NlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkKKyMgQUNfTElCVE9PTF9DT05GSUcgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgorQUNfREVGVU4oW0FDX0xJQlRPT0xfTEFOR19HQ0pfQ09ORklHXSwgW19MVF9BQ19MQU5HX0dDSl9DT05GSUcoR0NKKV0pCitBQ19ERUZVTihbX0xUX0FDX0xBTkdfR0NKX0NPTkZJR10sCitbQUNfTEFOR19TQVZFCisKKyMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBKYXZhIHRlc3Qgc291cmNlcy4KK2FjX2V4dD1qYXZhCisKKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBKYXZhIHRlc3Qgc291cmNlcy4KK29iamV4dD1vCitfTFRfQUNfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKK2x0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iY2xhc3MgZm9vIHt9XG4iCisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCitsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J3B1YmxpYyBjbGFzcyBjb25mdGVzdCB7IHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tbXV0gYXJndikge307IH1cbicKKworIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorX0xUX0FDX1NZU19DT01QSUxFUgorCisjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCitfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisKKyMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCitsdF9zYXZlX0NDPSIkQ0MiCitDQz0ke0dDSi0iZ2NqIn0KK2NvbXBpbGVyPSRDQworX0xUX0FDX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorCisjIEdDSiBkaWQgbm90IGV4aXN0IGF0IHRoZSB0aW1lIEdDQyBkaWRuJ3QgaW1wbGljaXRseSBsaW5rIGxpYmMgaW4uCitfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKworX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JG9sZF9hcmNoaXZlX2NtZHMKKworQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX05PX1JUVEkoJDEpCitBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfUElDKCQxKQorQUNfTElCVE9PTF9QUk9HX0NDX0NfTygkMSkKK0FDX0xJQlRPT0xfU1lTX0hBUkRfTElOS19MT0NLUygkMSkKK0FDX0xJQlRPT0xfUFJPR19MRF9TSExJQlMoJDEpCitBQ19MSUJUT09MX1NZU19EWU5BTUlDX0xJTktFUigkMSkKK0FDX0xJQlRPT0xfUFJPR19MRF9IQVJEQ09ERV9MSUJQQVRIKCQxKQorCitBQ19MSUJUT09MX0NPTkZJRygkMSkKKworQUNfTEFOR19SRVNUT1JFCitDQz0iJGx0X3NhdmVfQ0MiCitdKSMgQUNfTElCVE9PTF9MQU5HX0dDSl9DT05GSUcKKworCisjIEFDX0xJQlRPT0xfTEFOR19SQ19DT05GSUcKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJzIGZvciB0aGUgV2luZG93cyByZXNvdXJjZSBjb21waWxlciBhcmUKKyMgc3VpdGFibHkgZGVmaW5lZC4gIFRob3NlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkKKyMgQUNfTElCVE9PTF9DT05GSUcgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgorQUNfREVGVU4oW0FDX0xJQlRPT0xfTEFOR19SQ19DT05GSUddLCBbX0xUX0FDX0xBTkdfUkNfQ09ORklHKFJDKV0pCitBQ19ERUZVTihbX0xUX0FDX0xBTkdfUkNfQ09ORklHXSwKK1tBQ19MQU5HX1NBVkUKKworIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIFJDIHRlc3Qgc291cmNlcy4KK2FjX2V4dD1yYworCisjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgUkMgdGVzdCBzb3VyY2VzLgorb2JqZXh0PW8KK19MVF9BQ19UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAorCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSdzYW1wbGUgTUVOVSB7IE1FTlVJVEVNICImU291cCIsIDEwMCwgQ0hFQ0tFRCB9XG4nCisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCitsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9IiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiCisKKyMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KK19MVF9BQ19TWVNfQ09NUElMRVIKKworIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKK19MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorX0xUX0xJTktFUl9CT0lMRVJQTEFURQorCisjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorbHRfc2F2ZV9DQz0iJENDIgorQ0M9JHtSQy0id2luZHJlcyJ9Citjb21waWxlcj0kQ0MKK19MVF9BQ19UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKK19MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKK19MVF9BQ19UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKT15ZXMKKworQUNfTElCVE9PTF9DT05GSUcoJDEpCisKK0FDX0xBTkdfUkVTVE9SRQorQ0M9IiRsdF9zYXZlX0NDIgorXSkjIEFDX0xJQlRPT0xfTEFOR19SQ19DT05GSUcKKworCisjIEFDX0xJQlRPT0xfQ09ORklHKFtUQUdOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBJZiBUQUdOQU1FIGlzIG5vdCBwYXNzZWQsIHRoZW4gY3JlYXRlIGFuIGluaXRpYWwgbGlidG9vbCBzY3JpcHQKKyMgd2l0aCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmcm9tIHRoZSB1bnRhZ2dlZCBjb25maWcgdmFycy4gIE90aGVyd2lzZQorIyBhZGQgY29kZSB0byBjb25maWcuc3RhdHVzIGZvciBhcHBlbmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gbmFtZWQgYnkKKyMgVEFHTkFNRSBmcm9tIHRoZSBtYXRjaGluZyB0YWdnZWQgY29uZmlnIHZhcnMuCitBQ19ERUZVTihbQUNfTElCVE9PTF9DT05GSUddLAorWyMgVGhlIGVsc2UgY2xhdXNlIHNob3VsZCBvbmx5IGZpcmUgd2hlbiBib290c3RyYXBwaW5nIHRoZQorIyBsaWJ0b29sIGRpc3RyaWJ1dGlvbiwgb3RoZXJ3aXNlIHlvdSBmb3Jnb3QgdG8gc2hpcCBsdG1haW4uc2gKKyMgd2l0aCB5b3VyIHBhY2thZ2UsIGFuZCB5b3Ugd2lsbCBnZXQgY29tcGxhaW50cyB0aGF0IHRoZXJlIGFyZQorIyBubyBydWxlcyB0byBnZW5lcmF0ZSBsdG1haW4uc2guCitpZiB0ZXN0IC1mICIkbHRtYWluIjsgdGhlbgorICAjIFNlZSBpZiB3ZSBhcmUgcnVubmluZyBvbiB6c2gsIGFuZCBzZXQgdGhlIG9wdGlvbnMgd2hpY2ggYWxsb3cgb3VyIGNvbW1hbmRzIHRocm91Z2gKKyAgIyB3aXRob3V0IHJlbW92YWwgb2YgXCBlc2NhcGVzLgorICBpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgorICAgIHNldG9wdCBOT19HTE9CX1NVQlNUCisgIGZpCisgICMgTm93IHF1b3RlIGFsbCB0aGUgdGhpbmdzIHRoYXQgbWF5IGNvbnRhaW4gbWV0YWNoYXJhY3RlcnMgd2hpbGUgYmVpbmcKKyAgIyBjYXJlZnVsIG5vdCB0byBvdmVycXVvdGUgdGhlIEFDX1NVQlNUZWQgdmFsdWVzLiAgV2UgdGFrZSBjb3BpZXMgb2YgdGhlCisgICMgdmFyaWFibGVzIGFuZCBxdW90ZSB0aGUgY29waWVzIGZvciBnZW5lcmF0aW9uIG9mIHRoZSBsaWJ0b29sIHNjcmlwdC4KKyAgZm9yIHZhciBpbiBlY2hvIG9sZF9DQyBvbGRfQ0ZMQUdTIEFSIEFSX0ZMQUdTIEVHUkVQIFJBTkxJQiBMTl9TIExUQ0MgTFRDRkxBR1MgTk0gXAorICAgIFNFRCBTSEVMTCBTVFJJUCBcCisgICAgbGlibmFtZV9zcGVjIGxpYnJhcnlfbmFtZXNfc3BlYyBzb25hbWVfc3BlYyBleHRyYWN0X2V4cHN5bXNfY21kcyBcCisgICAgb2xkX3N0cmlwbGliIHN0cmlwbGliIGZpbGVfbWFnaWNfY21kIGZpbmlzaF9jbWRzIGZpbmlzaF9ldmFsIFwKKyAgICBkZXBsaWJzX2NoZWNrX21ldGhvZCByZWxvYWRfZmxhZyByZWxvYWRfY21kcyBuZWVkX2xvY2tzIFwKKyAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIFwKKyAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyBcCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjIFwKKyAgICBvbGRfcG9zdGluc3RhbGxfY21kcyBvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIFwKKyAgICBfTFRfQUNfVEFHVkFSKGNvbXBpbGVyLCAkMSkgXAorICAgIF9MVF9BQ19UQUdWQVIoQ0MsICQxKSBcCisgICAgX0xUX0FDX1RBR1ZBUihMRCwgJDEpIFwKKyAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKSBcCisgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIFwKKyAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSkgXAorICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKSBcCisgICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKSBcCisgICAgX0xUX0FDX1RBR1ZBUih0aHJlYWRfc2FmZV9mbGFnX3NwZWMsICQxKSBcCisgICAgX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpIFwKKyAgICBfTFRfQUNfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKSBcCisgICAgX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSkgXAorICAgIF9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpIFwKKyAgICBfTFRfQUNfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSkgXAorICAgIF9MVF9BQ19UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSkgXAorICAgIF9MVF9BQ19UQUdWQVIocHJlZGVwcywgJDEpIFwKKyAgICBfTFRfQUNfVEFHVkFSKHBvc3RkZXBzLCAkMSkgXAorICAgIF9MVF9BQ19UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSkgXAorICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSkgXAorICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpIFwKKyAgICBfTFRfQUNfVEFHVkFSKHBvc3RpbnN0YWxsX2NtZHMsICQxKSBcCisgICAgX0xUX0FDX1RBR1ZBUihwb3N0dW5pbnN0YWxsX2NtZHMsICQxKSBcCisgICAgX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcywgJDEpIFwKKyAgICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSkgXAorICAgIF9MVF9BQ19UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKSBcCisgICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSkgXAorICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpIFwKKyAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQsICQxKSBcCisgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSkgXAorICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSkgXAorICAgIF9MVF9BQ19UQUdWQVIobW9kdWxlX2NtZHMsICQxKSBcCisgICAgX0xUX0FDX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKSBcCisgICAgX0xUX0FDX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpIFwKKyAgICBfTFRfQUNfVEFHVkFSKGV4Y2x1ZGVfZXhwc3ltcywgJDEpIFwKKyAgICBfTFRfQUNfVEFHVkFSKGluY2x1ZGVfZXhwc3ltcywgJDEpOyBkbworCisgICAgY2FzZSAkdmFyIGluCisgICAgX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSkgfCBcCisgICAgX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCAkMSkgfCBcCisgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKSB8IFwKKyAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKSB8IFwKKyAgICBfTFRfQUNfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSkgfCBcCisgICAgX0xUX0FDX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKSB8IFwKKyAgICBfTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzLCAkMSkgfCBcCisgICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSkgfCBcCisgICAgZXh0cmFjdF9leHBzeW1zX2NtZHMgfCByZWxvYWRfY21kcyB8IGZpbmlzaF9jbWRzIHwgXAorICAgIHBvc3RpbnN0YWxsX2NtZHMgfCBwb3N0dW5pbnN0YWxsX2NtZHMgfCBcCisgICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHMgfCBvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIHwgXAorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyB8IHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjKQorICAgICAgIyBEb3VibGUtcXVvdGUgZG91YmxlLWV2YWxlZCBzdHJpbmdzLgorICAgICAgZXZhbCAibHRfJHZhcj1cXFwiXGBcJGVjaG8gXCJYXCQkdmFyXCIgfCBcJFhzZWQgLWUgXCJcJGRvdWJsZV9xdW90ZV9zdWJzdFwiIC1lIFwiXCRzZWRfcXVvdGVfc3Vic3RcIiAtZSBcIlwkZGVsYXlfdmFyaWFibGVfc3Vic3RcIlxgXFxcIiIKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGV2YWwgImx0XyR2YXI9XFxcIlxgXCRlY2hvIFwiWFwkJHZhclwiIHwgXCRYc2VkIC1lIFwiXCRzZWRfcXVvdGVfc3Vic3RcIlxgXFxcIiIKKyAgICAgIDs7CisgICAgZXNhYworICBkb25lCisKKyAgY2FzZSAkbHRfZWNobyBpbgorICAqJ1xbJF0wIC0tZmFsbGJhY2stZWNobyInKQorICAgIGx0X2VjaG89YCRlY2hvICJYJGx0X2VjaG8iIHwgJFhzZWQgLWUgJ3MvXFxcXFxcXFskXTAgLS1mYWxsYmFjay1lY2hvIlskXS9bJF0wIC0tZmFsbGJhY2stZWNobyIvJ2AKKyAgICA7OworICBlc2FjCisKK2lmZWxzZShbJDFdLCBbXSwKKyAgW2NmZ2ZpbGU9IiR7b2ZpbGV9VCIKKyAgdHJhcCAiJHJtIFwiJGNmZ2ZpbGVcIjsgZXhpdCAxIiAxIDIgMTUKKyAgJHJtIC1mICIkY2ZnZmlsZSIKKyAgQUNfTVNHX05PVElDRShbY3JlYXRpbmcgJG9maWxlXSldLAorICBbY2ZnZmlsZT0iJG9maWxlIl0pCisKKyAgY2F0IDw8X19FT0ZfXyA+PiAiJGNmZ2ZpbGUiCitpZmVsc2UoWyQxXSwgW10sCitbIyEgJFNIRUxMCisKKyMgYCRlY2hvICIkY2ZnZmlsZSIgfCBzZWQgJ3MlXi4qLyUlJ2AgLSBQcm92aWRlIGdlbmVyYWxpemVkIGxpYnJhcnktYnVpbGRpbmcgc3VwcG9ydCBzZXJ2aWNlcy4KKyMgR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSAkVkVSU0lPTiRUSU1FU1RBTVApCisjIE5PVEU6IENoYW5nZXMgbWFkZSB0byB0aGlzIGZpbGUgd2lsbCBiZSBsb3N0OiBsb29rIGF0IGx0bWFpbi5zaC4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxCisjIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgTGlidG9vbDoKKyMgT3JpZ2luYWxseSBieSBHb3Jkb24gTWF0emlna2VpdCA8Z29yZEBnbnUuYWkubWl0LmVkdT4sIDE5OTYKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisjIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisjCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKKyMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCisjIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCisjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworIyBBIHNlZCBwcm9ncmFtIHRoYXQgZG9lcyBub3QgdHJ1bmNhdGUgb3V0cHV0LgorU0VEPSRsdF9TRUQKKworIyBTZWQgdGhhdCBoZWxwcyB1cyBhdm9pZCBhY2NpZGVudGFsbHkgdHJpZ2dlcmluZyBlY2hvKDEpIG9wdGlvbnMgbGlrZSAtbi4KK1hzZWQ9IiRTRUQgLWUgMXMvXlgvLyIKKworIyBUaGUgSFAtVVgga3NoIGFuZCBQT1NJWCBzaGVsbCBwcmludCB0aGUgdGFyZ2V0IGRpcmVjdG9yeSB0byBzdGRvdXQKKyMgaWYgQ0RQQVRIIGlzIHNldC4KKyh1bnNldCBDRFBBVEgpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBDRFBBVEgKKworIyBUaGUgbmFtZXMgb2YgdGhlIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzdXBwb3J0ZWQgYnkgdGhpcyBzY3JpcHQuCithdmFpbGFibGVfdGFncz0KKworIyAjIyMgQkVHSU4gTElCVE9PTCBDT05GSUddLAorWyMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWVdKQorCisjIExpYnRvb2wgd2FzIGNvbmZpZ3VyZWQgb24gaG9zdCBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWA6CisKKyMgU2hlbGwgdG8gdXNlIHdoZW4gaW52b2tpbmcgc2hlbGwgc2NyaXB0cy4KK1NIRUxMPSRsdF9TSEVMTAorCisjIFdoZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMuCitidWlsZF9saWJ0b29sX2xpYnM9JGVuYWJsZV9zaGFyZWQKKworIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzLgorYnVpbGRfb2xkX2xpYnM9JGVuYWJsZV9zdGF0aWMKKworIyBXaGV0aGVyIG9yIG5vdCB0byBhZGQgLWxjIGZvciBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzLgorYnVpbGRfbGlidG9vbF9uZWVkX2xjPSRfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSkKKworIyBXaGV0aGVyIG9yIG5vdCB0byBkaXNhbGxvdyBzaGFyZWQgbGlicyB3aGVuIHJ1bnRpbWUgbGlicyBhcmUgc3RhdGljCithbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXM9JF9MVF9BQ19UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpCisKKyMgV2hldGhlciBvciBub3QgdG8gb3B0aW1pemUgZm9yIGZhc3QgaW5zdGFsbGF0aW9uLgorZmFzdF9pbnN0YWxsPSRlbmFibGVfZmFzdF9pbnN0YWxsCisKKyMgVGhlIGhvc3Qgc3lzdGVtLgoraG9zdF9hbGlhcz0kaG9zdF9hbGlhcworaG9zdD0kaG9zdAoraG9zdF9vcz0kaG9zdF9vcworCisjIFRoZSBidWlsZCBzeXN0ZW0uCitidWlsZF9hbGlhcz0kYnVpbGRfYWxpYXMKK2J1aWxkPSRidWlsZAorYnVpbGRfb3M9JGJ1aWxkX29zCisKKyMgQW4gZWNobyBwcm9ncmFtIHRoYXQgZG9lcyBub3QgaW50ZXJwcmV0IGJhY2tzbGFzaGVzLgorZWNobz0kbHRfZWNobworCisjIFRoZSBhcmNoaXZlci4KK0FSPSRsdF9BUgorQVJfRkxBR1M9JGx0X0FSX0ZMQUdTCisKKyMgQSBDIGNvbXBpbGVyLgorTFRDQz0kbHRfTFRDQworCisjIExUQ0MgY29tcGlsZXIgZmxhZ3MuCitMVENGTEFHUz0kbHRfTFRDRkxBR1MKKworIyBBIGxhbmd1YWdlLXNwZWNpZmljIGNvbXBpbGVyLgorQ0M9JGx0X1tdX0xUX0FDX1RBR1ZBUihjb21waWxlciwgJDEpCisKKyMgSXMgdGhlIGNvbXBpbGVyIHRoZSBHTlUgQyBjb21waWxlcj8KK3dpdGhfZ2NjPSRfTFRfQUNfVEFHVkFSKEdDQywgJDEpCisKKyMgQW4gRVJFIG1hdGNoZXIuCitFR1JFUD0kbHRfRUdSRVAKKworIyBUaGUgbGlua2VyIHVzZWQgdG8gYnVpbGQgbGlicmFyaWVzLgorTEQ9JGx0X1tdX0xUX0FDX1RBR1ZBUihMRCwgJDEpCisKKyMgV2hldGhlciB3ZSBuZWVkIGhhcmQgb3Igc29mdCBsaW5rcy4KK0xOX1M9JGx0X0xOX1MKKworIyBBIEJTRC1jb21wYXRpYmxlIG5tIHByb2dyYW0uCitOTT0kbHRfTk0KKworIyBBIHN5bWJvbCBzdHJpcHBpbmcgcHJvZ3JhbQorU1RSSVA9JGx0X1NUUklQCisKKyMgVXNlZCB0byBleGFtaW5lIGxpYnJhcmllcyB3aGVuIGZpbGVfbWFnaWNfY21kIGJlZ2lucyAiZmlsZSIKK01BR0lDX0NNRD0kTUFHSUNfQ01ECisKKyMgVXNlZCBvbiBjeWd3aW46IERMTCBjcmVhdGlvbiBwcm9ncmFtLgorRExMVE9PTD0iJERMTFRPT0wiCisKKyMgVXNlZCBvbiBjeWd3aW46IG9iamVjdCBkdW1wZXIuCitPQkpEVU1QPSIkT0JKRFVNUCIKKworIyBVc2VkIG9uIGN5Z3dpbjogYXNzZW1ibGVyLgorQVM9IiRBUyIKKworIyBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXMuCitvYmpkaXI9JG9iamRpcgorCisjIEhvdyB0byBjcmVhdGUgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMuCityZWxvYWRfZmxhZz0kbHRfcmVsb2FkX2ZsYWcKK3JlbG9hZF9jbWRzPSRsdF9yZWxvYWRfY21kcworCisjIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCit3bD0kbHRfW11fTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKQorCisjIE9iamVjdCBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIm8iKS4KK29iamV4dD0iJGFjX29iamV4dCIKKworIyBPbGQgYXJjaGl2ZSBzdWZmaXggKG5vcm1hbGx5ICJhIikuCitsaWJleHQ9IiRsaWJleHQiCisKKyMgU2hhcmVkIGxpYnJhcnkgc3VmZml4IChub3JtYWxseSAiLnNvIikuCitzaHJleHRfY21kcz0nJHNocmV4dF9jbWRzJworCisjIEV4ZWN1dGFibGUgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICIiKS4KK2V4ZWV4dD0iJGV4ZWV4dCIKKworIyBBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHMuCitwaWNfZmxhZz0kbHRfW11fTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkKK3BpY19tb2RlPSRwaWNfbW9kZQorCisjIFdoYXQgaXMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgY29tbWFuZD8KK21heF9jbWRfbGVuPSRsdF9jdl9zeXNfbWF4X2NtZF9sZW4KKworIyBEb2VzIGNvbXBpbGVyIHNpbXVsdGFuZW91c2x5IHN1cHBvcnQgLWMgYW5kIC1vIG9wdGlvbnM/Citjb21waWxlcl9jX289JGx0X1tdX0xUX0FDX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpCisKKyMgTXVzdCB3ZSBsb2NrIGZpbGVzIHdoZW4gZG9pbmcgY29tcGlsYXRpb24/CituZWVkX2xvY2tzPSRsdF9uZWVkX2xvY2tzCisKKyMgRG8gd2UgbmVlZCB0aGUgbGliIHByZWZpeCBmb3IgbW9kdWxlcz8KK25lZWRfbGliX3ByZWZpeD0kbmVlZF9saWJfcHJlZml4CisKKyMgRG8gd2UgbmVlZCBhIHZlcnNpb24gZm9yIGxpYnJhcmllcz8KK25lZWRfdmVyc2lvbj0kbmVlZF92ZXJzaW9uCisKKyMgV2hldGhlciBkbG9wZW4gaXMgc3VwcG9ydGVkLgorZGxvcGVuX3N1cHBvcnQ9JGVuYWJsZV9kbG9wZW4KKworIyBXaGV0aGVyIGRsb3BlbiBvZiBwcm9ncmFtcyBpcyBzdXBwb3J0ZWQuCitkbG9wZW5fc2VsZj0kZW5hYmxlX2Rsb3Blbl9zZWxmCisKKyMgV2hldGhlciBkbG9wZW4gb2Ygc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkLgorZGxvcGVuX3NlbGZfc3RhdGljPSRlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljCisKKyMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KK2xpbmtfc3RhdGljX2ZsYWc9JGx0X1tdX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpCisKKyMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4KK25vX2J1aWx0aW5fZmxhZz0kbHRfW11fTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSkKKworIyBDb21waWxlciBmbGFnIHRvIGFsbG93IHJlZmxleGl2ZSBkbG9wZW5zLgorZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSRsdF9bXV9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSkKKworIyBDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHNoYXJlZCBvYmplY3RzIGRpcmVjdGx5IGZyb20gYXJjaGl2ZXMuCit3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0kbHRfW11fTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSkKKworIyBDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHRocmVhZC1zYWZlIG9iamVjdHMuCit0aHJlYWRfc2FmZV9mbGFnX3NwZWM9JGx0X1tdX0xUX0FDX1RBR1ZBUih0aHJlYWRfc2FmZV9mbGFnX3NwZWMsICQxKQorCisjIExpYnJhcnkgdmVyc2lvbmluZyB0eXBlLgordmVyc2lvbl90eXBlPSR2ZXJzaW9uX3R5cGUKKworIyBGb3JtYXQgb2YgbGlicmFyeSBuYW1lIHByZWZpeC4KK2xpYm5hbWVfc3BlYz0kbHRfbGlibmFtZV9zcGVjCisKKyMgTGlzdCBvZiBhcmNoaXZlIG5hbWVzLiAgRmlyc3QgbmFtZSBpcyB0aGUgcmVhbCBvbmUsIHRoZSByZXN0IGFyZSBsaW5rcy4KKyMgVGhlIGxhc3QgbmFtZSBpcyB0aGUgb25lIHRoYXQgdGhlIGxpbmtlciBmaW5kcyB3aXRoIC1sTkFNRS4KK2xpYnJhcnlfbmFtZXNfc3BlYz0kbHRfbGlicmFyeV9uYW1lc19zcGVjCisKKyMgVGhlIGNvZGVkIG5hbWUgb2YgdGhlIGxpYnJhcnksIGlmIGRpZmZlcmVudCBmcm9tIHRoZSByZWFsIG5hbWUuCitzb25hbWVfc3BlYz0kbHRfc29uYW1lX3NwZWMKKworIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuZCBpbnN0YWxsIGFuIG9sZC1zdHlsZSBhcmNoaXZlLgorUkFOTElCPSRsdF9SQU5MSUIKK29sZF9hcmNoaXZlX2NtZHM9JGx0X1tdX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSkKK29sZF9wb3N0aW5zdGFsbF9jbWRzPSRsdF9vbGRfcG9zdGluc3RhbGxfY21kcworb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0kbHRfb2xkX3Bvc3R1bmluc3RhbGxfY21kcworCisjIENyZWF0ZSBhbiBvbGQtc3R5bGUgYXJjaGl2ZSBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCitvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSRsdF9bXV9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpCisKKyMgQ3JlYXRlIGEgdGVtcG9yYXJ5IG9sZC1zdHlsZSBhcmNoaXZlIHRvIGxpbmsgaW5zdGVhZCBvZiBhIHNoYXJlZCBhcmNoaXZlLgorb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHM9JGx0X1tdX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcywgJDEpCisKKyMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhbmQgaW5zdGFsbCBhIHNoYXJlZCBhcmNoaXZlLgorYXJjaGl2ZV9jbWRzPSRsdF9bXV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSkKK2FyY2hpdmVfZXhwc3ltX2NtZHM9JGx0X1tdX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSkKK3Bvc3RpbnN0YWxsX2NtZHM9JGx0X3Bvc3RpbnN0YWxsX2NtZHMKK3Bvc3R1bmluc3RhbGxfY21kcz0kbHRfcG9zdHVuaW5zdGFsbF9jbWRzCisKKyMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIGxvYWRhYmxlIG1vZHVsZSAoYXNzdW1lZCBzYW1lIGFzIGFib3ZlIGlmIGVtcHR5KQorbW9kdWxlX2NtZHM9JGx0X1tdX0xUX0FDX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpCittb2R1bGVfZXhwc3ltX2NtZHM9JGx0X1tdX0xUX0FDX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKQorCisjIENvbW1hbmRzIHRvIHN0cmlwIGxpYnJhcmllcy4KK29sZF9zdHJpcGxpYj0kbHRfb2xkX3N0cmlwbGliCitzdHJpcGxpYj0kbHRfc3RyaXBsaWIKKworIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQorIyBzaGFyZWQgbGlicmFyeS4KK3ByZWRlcF9vYmplY3RzPSRsdF9bXV9MVF9BQ19UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKQorCisjIERlcGVuZGVuY2llcyB0byBwbGFjZSBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKKyMgc2hhcmVkIGxpYnJhcnkuCitwb3N0ZGVwX29iamVjdHM9JGx0X1tdX0xUX0FDX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKQorCisjIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCisjIHNoYXJlZCBsaWJyYXJ5LgorcHJlZGVwcz0kbHRfW11fTFRfQUNfVEFHVkFSKHByZWRlcHMsICQxKQorCisjIERlcGVuZGVuY2llcyB0byBwbGFjZSBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKKyMgc2hhcmVkIGxpYnJhcnkuCitwb3N0ZGVwcz0kbHRfW11fTFRfQUNfVEFHVkFSKHBvc3RkZXBzLCAkMSkKKworIyBUaGUgbGlicmFyeSBzZWFyY2ggcGF0aCB1c2VkIGludGVybmFsbHkgYnkgdGhlIGNvbXBpbGVyIHdoZW4gbGlua2luZworIyBhIHNoYXJlZCBsaWJyYXJ5LgorY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoPSRsdF9bXV9MVF9BQ19UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSkKKworIyBNZXRob2QgdG8gY2hlY2sgd2hldGhlciBkZXBlbmRlbnQgbGlicmFyaWVzIGFyZSBzaGFyZWQgb2JqZWN0cy4KK2RlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9kZXBsaWJzX2NoZWNrX21ldGhvZAorCisjIENvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPT0gZmlsZV9tYWdpYy4KK2ZpbGVfbWFnaWNfY21kPSRsdF9maWxlX21hZ2ljX2NtZAorCisjIEZsYWcgdGhhdCBhbGxvd3Mgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHVuZGVmaW5lZCBzeW1ib2xzIHRvIGJlIGJ1aWx0LgorYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGx0X1tdX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpCisKKyMgRmxhZyB0aGF0IGZvcmNlcyBubyB1bmRlZmluZWQgc3ltYm9scy4KK25vX3VuZGVmaW5lZF9mbGFnPSRsdF9bXV9MVF9BQ19UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKQorCisjIENvbW1hbmRzIHVzZWQgdG8gZmluaXNoIGEgbGlidG9vbCBsaWJyYXJ5IGluc3RhbGxhdGlvbiBpbiBhIGRpcmVjdG9yeS4KK2ZpbmlzaF9jbWRzPSRsdF9maW5pc2hfY21kcworCisjIFNhbWUgYXMgYWJvdmUsIGJ1dCBhIHNpbmdsZSBzY3JpcHQgZnJhZ21lbnQgdG8gYmUgZXZhbGVkIGJ1dCBub3Qgc2hvd24uCitmaW5pc2hfZXZhbD0kbHRfZmluaXNoX2V2YWwKKworIyBUYWtlIHRoZSBvdXRwdXQgb2Ygbm0gYW5kIHByb2R1Y2UgYSBsaXN0aW5nIG9mIHJhdyBzeW1ib2xzIGFuZCBDIG5hbWVzLgorZ2xvYmFsX3N5bWJvbF9waXBlPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlCisKKyMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbgorZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wKKworIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIKK2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzCisKKyMgVGhpcyBpcyB0aGUgc2hhcmVkIGxpYnJhcnkgcnVudGltZSBwYXRoIHZhcmlhYmxlLgorcnVucGF0aF92YXI9JHJ1bnBhdGhfdmFyCisKKyMgVGhpcyBpcyB0aGUgc2hhcmVkIGxpYnJhcnkgcGF0aCB2YXJpYWJsZS4KK3NobGlicGF0aF92YXI9JHNobGlicGF0aF92YXIKKworIyBJcyBzaGxpYnBhdGggc2VhcmNoZWQgYmVmb3JlIHRoZSBoYXJkLWNvZGVkIGxpYnJhcnkgc2VhcmNoIHBhdGg/CitzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9JHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aAorCisjIEhvdyB0byBoYXJkY29kZSBhIHNoYXJlZCBsaWJyYXJ5IHBhdGggaW50byBhbiBleGVjdXRhYmxlLgoraGFyZGNvZGVfYWN0aW9uPSRfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpCisKKyMgV2hldGhlciB3ZSBzaG91bGQgaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIGxpYnJhcmllcy4KK2hhcmRjb2RlX2ludG9fbGlicz0kaGFyZGNvZGVfaW50b19saWJzCisKKyMgRmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgorIyBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMgbm90IGV4aXN0LgoraGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0kbHRfW11fTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKQorCisjIElmIGxkIGlzIHVzZWQgd2hlbiBsaW5raW5nLCBmbGFnIHRvIGhhcmRjb2RlIFwkbGliZGlyIGludG8KKyMgYSBiaW5hcnkgZHVyaW5nIGxpbmtpbmcuIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgXCRsaWJkaXIgZG9lcworIyBub3QgZXhpc3QuCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPSRsdF9bXV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCwgJDEpCisKKyMgV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlIC1ycGF0aCBmbGFnIHdpdGggYSBzZXBhcmF0ZWQgYXJndW1lbnQuCitoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSRsdF9bXV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpCisKKyMgU2V0IHRvIHllcyBpZiB1c2luZyBESVIvbGliTkFNRSR7c2hhcmVkX2V4dH0gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQorIyByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfZGlyZWN0PSRfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpCisKKyMgU2V0IHRvIHllcyBpZiB1c2luZyB0aGUgLUxESVIgZmxhZyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCisjIHJlc3VsdGluZyBiaW5hcnkuCitoYXJkY29kZV9taW51c19MPSRfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKQorCisjIFNldCB0byB5ZXMgaWYgdXNpbmcgU0hMSUJQQVRIX1ZBUj1ESVIgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvCisjIHRoZSByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0kX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSkKKworIyBTZXQgdG8geWVzIGlmIGJ1aWxkaW5nIGEgc2hhcmVkIGxpYnJhcnkgYXV0b21hdGljYWxseSBoYXJkY29kZXMgRElSIGludG8gdGhlIGxpYnJhcnkKKyMgYW5kIGFsbCBzdWJzZXF1ZW50IGxpYnJhcmllcyBhbmQgZXhlY3V0YWJsZXMgbGlua2VkIGFnYWluc3QgaXQuCitoYXJkY29kZV9hdXRvbWF0aWM9JF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSkKKworIyBWYXJpYWJsZXMgd2hvc2UgdmFsdWVzIHNob3VsZCBiZSBzYXZlZCBpbiBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0cyBhbmQKKyMgcmVzdG9yZWQgYXQgcmVsaW5rIHRpbWUuCit2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIgorCisjIFdoZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllcy4KK2xpbmtfYWxsX2RlcGxpYnM9JF9MVF9BQ19UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpCisKKyMgQ29tcGlsZS10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzCitzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9JGx0X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYworCisjIFJ1bi10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzCitzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kbHRfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMKKworIyBGaXggdGhlIHNoZWxsIHZhcmlhYmxlIFwkc3JjZmlsZSBmb3IgdGhlIGNvbXBpbGVyLgorZml4X3NyY2ZpbGVfcGF0aD0iJF9MVF9BQ19UQUdWQVIoZml4X3NyY2ZpbGVfcGF0aCwgJDEpIgorCisjIFNldCB0byB5ZXMgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCithbHdheXNfZXhwb3J0X3N5bWJvbHM9JF9MVF9BQ19UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSkKKworIyBUaGUgY29tbWFuZHMgdG8gbGlzdCBleHBvcnRlZCBzeW1ib2xzLgorZXhwb3J0X3N5bWJvbHNfY21kcz0kbHRfW11fTFRfQUNfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKQorCisjIFRoZSBjb21tYW5kcyB0byBleHRyYWN0IHRoZSBleHBvcnRlZCBzeW1ib2wgbGlzdCBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCitleHRyYWN0X2V4cHN5bXNfY21kcz0kbHRfZXh0cmFjdF9leHBzeW1zX2NtZHMKKworIyBTeW1ib2xzIHRoYXQgc2hvdWxkIG5vdCBiZSBsaXN0ZWQgaW4gdGhlIHByZWxvYWRlZCBzeW1ib2xzLgorZXhjbHVkZV9leHBzeW1zPSRsdF9bXV9MVF9BQ19UQUdWQVIoZXhjbHVkZV9leHBzeW1zLCAkMSkKKworIyBTeW1ib2xzIHRoYXQgbXVzdCBhbHdheXMgYmUgZXhwb3J0ZWQuCitpbmNsdWRlX2V4cHN5bXM9JGx0X1tdX0xUX0FDX1RBR1ZBUihpbmNsdWRlX2V4cHN5bXMsICQxKQorCitpZmVsc2UoWyQxXSxbXSwKK1sjICMjIyBFTkQgTElCVE9PTCBDT05GSUddLAorWyMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6ICR0YWduYW1lXSkKKworX19FT0ZfXworCitpZmVsc2UoWyQxXSxbXSwgWworICBjYXNlICRob3N0X29zIGluCisgIGFpeDMqKQorICAgIGNhdCA8PFxFT0YgPj4gIiRjZmdmaWxlIgorCisjIEFJWCBzb21ldGltZXMgaGFzIHByb2JsZW1zIHdpdGggdGhlIEdDQyBjb2xsZWN0MiBwcm9ncmFtLiAgRm9yIHNvbWUKKyMgcmVhc29uLCBpZiB3ZSBzZXQgdGhlIENPTExFQ1RfTkFNRVMgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBwcm9ibGVtcworIyB2YW5pc2ggaW4gYSBwdWZmIG9mIHNtb2tlLgoraWYgdGVzdCAiWCR7Q09MTEVDVF9OQU1FUytzZXR9IiAhPSBYc2V0OyB0aGVuCisgIENPTExFQ1RfTkFNRVM9CisgIGV4cG9ydCBDT0xMRUNUX05BTUVTCitmaQorRU9GCisgICAgOzsKKyAgZXNhYworCisgICMgV2UgdXNlIHNlZCBpbnN0ZWFkIG9mIGNhdCBiZWNhdXNlIGJhc2ggb24gREpHUFAgZ2V0cyBjb25mdXNlZCBpZgorICAjIGlmIGZpbmRzIG1peGVkIENSL0xGIGFuZCBMRi1vbmx5IGxpbmVzLiAgU2luY2Ugc2VkIG9wZXJhdGVzIGluCisgICMgdGV4dCBtb2RlLCBpdCBwcm9wZXJseSBjb252ZXJ0cyBsaW5lcyB0byBDUi9MRi4gIFRoaXMgYmFzaCBwcm9ibGVtCisgICMgaXMgcmVwb3J0ZWRseSBmaXhlZCwgYnV0IHdoeSBub3QgcnVuIG9uIG9sZCB2ZXJzaW9ucyB0b28/CisgIHNlZCAnJHEnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCisKKyAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fCBcCisgICAgKHJtIC1mICIkb2ZpbGUiICYmIGNwICIkY2ZnZmlsZSIgIiRvZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlIikKKyAgY2htb2QgK3ggIiRvZmlsZSIKK10pCitlbHNlCisgICMgSWYgdGhlcmUgaXMgbm8gTWFrZWZpbGUgeWV0LCB3ZSByZWx5IG9uIGEgbWFrZSBydWxlIHRvIGV4ZWN1dGUKKyAgIyBgY29uZmlnLnN0YXR1cyAtLXJlY2hlY2snIHRvIHJlcnVuIHRoZXNlIHRlc3RzIGFuZCBjcmVhdGUgdGhlCisgICMgbGlidG9vbCBzY3JpcHQgdGhlbi4KKyAgbHRtYWluX2luPWBlY2hvICRsdG1haW4gfCBzZWQgLWUgJ3MvXC5zaCQvLmluLydgCisgIGlmIHRlc3QgLWYgIiRsdG1haW5faW4iOyB0aGVuCisgICAgdGVzdCAtZiBNYWtlZmlsZSAmJiBtYWtlICIkbHRtYWluIgorICBmaQorZmkKK10pIyBBQ19MSUJUT09MX0NPTkZJRworCisKKyMgQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX05PX1JUVEkoW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX05PX1JUVEldLAorW0FDX1JFUVVJUkUoW19MVF9BQ19TWVNfQ09NUElMRVJdKWRubAorCitfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9CisKK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKT0nIC1mbm8tYnVpbHRpbicKKworICBBQ19MSUJUT09MX0NPTVBJTEVSX09QVElPTihbaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnNdLAorICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zLAorICAgIFstZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zXSwgW10sCisgICAgW19MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKT0iJF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKSAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zIl0pCitmaQorXSkjIEFDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9OT19SVFRJCisKKworIyBBQ19MSUJUT09MX1NZU19HTE9CQUxfU1lNQk9MX1BJUEUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfR0xPQkFMX1NZTUJPTF9QSVBFXSwKK1tBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pCitBQ19SRVFVSVJFKFtBQ19QUk9HX05NXSkKK0FDX1JFUVVJUkUoW0FDX09CSkVYVF0pCisjIENoZWNrIGZvciBjb21tYW5kIHRvIGdyYWIgdGhlIHJhdyBzeW1ib2wgbmFtZSBmb2xsb3dlZCBieSBDIHN5bWJvbCBmcm9tIG5tLgorQUNfTVNHX0NIRUNLSU5HKFtjb21tYW5kIHRvIHBhcnNlICROTSBvdXRwdXQgZnJvbSAkY29tcGlsZXIgb2JqZWN0XSkKK0FDX0NBQ0hFX1ZBTChbbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZV0sCitbCisjIFRoZXNlIGFyZSBzYW5lIGRlZmF1bHRzIHRoYXQgd29yayBvbiBhdCBsZWFzdCBhIGZldyBvbGQgc3lzdGVtcy4KKyMgW1RoZXkgY29tZSBmcm9tIFVsdHJpeC4gIFdoYXQgY291bGQgYmUgb2xkZXIgdGhhbiBVbHRyaXg/ISEgOyldCisKKyMgQ2hhcmFjdGVyIGNsYXNzIGRlc2NyaWJpbmcgTk0gZ2xvYmFsIHN5bWJvbCBjb2Rlcy4KK3N5bWNvZGU9J1tbQkNERUdSU1RdXScKKworIyBSZWdleHAgdG8gbWF0Y2ggc3ltYm9scyB0aGF0IGNhbiBiZSBhY2Nlc3NlZCBkaXJlY3RseSBmcm9tIEMuCitzeW1wYXQ9J1woW1tfQS1aYS16XV1bW19BLVphLXowLTldXSpcKScKKworIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbgorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eLiAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDE7L3AnIgorCisjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBzeW1ib2wgbmFtZSBhbmQgc3ltYm9sIGFkZHJlc3MKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbW14gXV0qXCkgJC8gIHtcXFwiXDFcXFwiLCAobHRfcHRyKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlIFwoW1teIF1dKlwpIFwoW1teIF1dKlwpJC8gIHtcIlwyXCIsIChsdF9wdHIpIFwmXDJ9LC9wJyIKKworIyBEZWZpbmUgc3lzdGVtLXNwZWNpZmljIHZhcmlhYmxlcy4KK2Nhc2UgJGhvc3Rfb3MgaW4KK2FpeCopCisgIHN5bWNvZGU9J1tbQkNEVF1dJworICA7OworY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQorICBzeW1jb2RlPSdbW0FCQ0RHSVNUV11dJworICA7OworaHB1eCopICMgSXRzIGxpbmtlciBkaXN0aW5ndWlzaGVzIGRhdGEgZnJvbSBjb2RlIHN5bWJvbHMKKyAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICBzeW1jb2RlPSdbW0FCQ0RFR1JTVF1dJworICBmaQorICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIC1lICdzL15UIC4qIFwoLipcKSQvZXh0ZXJuIGludCBcMSgpOy9wJyAtZSAncy9eJHN5bWNvZGUqIC4qIFwoLipcKSQvZXh0ZXJuIGNoYXIgXDE7L3AnIgorICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW1teIF1dKlwpICQvICB7XFxcIlwxXFxcIiwgKGx0X3B0cikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbW14gXV0qXCkgXChbW14gXV0qXCkkLyAge1wiXDJcIiwgKGx0X3B0cikgXCZcMn0sL3AnIgorICA7OworbGludXgqKQorICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICAgIHN5bWNvZGU9J1tbQUJDREdJUlNUV11dJworICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4gLWUgJ3MvXlQgLiogXCguKlwpJC9leHRlcm4gaW50IFwxKCk7L3AnIC1lICdzL14kc3ltY29kZSogLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvcCciCisgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFtbXiBdXSpcKSAkLyAge1xcXCJcMVxcXCIsIChsdF9wdHIpIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW1teIF1dKlwpIFwoW1teIF1dKlwpJC8gIHtcIlwyXCIsIChsdF9wdHIpIFwmXDJ9LC9wJyIKKyAgZmkKKyAgOzsKK2lyaXgqIHwgbm9uc3RvcHV4KikKKyAgc3ltY29kZT0nW1tCQ0RFR1JTVF1dJworICA7Oworb3NmKikKKyAgc3ltY29kZT0nW1tCQ0RFR1FSU1RdXScKKyAgOzsKK3NvbGFyaXMqKQorICBzeW1jb2RlPSdbW0JEUlRdXScKKyAgOzsKK3NjbzMuMnY1KikKKyAgc3ltY29kZT0nW1tEVF1dJworICA7Oworc3lzdjQuMnV3MiopCisgIHN5bWNvZGU9J1tbRFRdXScKKyAgOzsKK3N5c3Y1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCopCisgIHN5bWNvZGU9J1tbQUJEVF1dJworICA7Oworc3lzdjQpCisgIHN5bWNvZGU9J1tbREZOU1RVXV0nCisgIDs7Citlc2FjCisKKyMgSGFuZGxlIENSTEYgaW4gbWluZ3cgdG9vbCBjaGFpbgorb3B0X2NyPQorY2FzZSAkYnVpbGRfb3MgaW4KK21pbmd3KikKKyAgb3B0X2NyPWBlY2hvICd4XHswLDFcfScgfCB0ciB4ICdcMDE1J2AgIyBvcHRpb24gY3IgaW4gcmVnZXhwCisgIDs7Citlc2FjCisKKyMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHVzZSBpdHMgc3RhbmRhcmQgc3ltYm9sIGNvZGVzLgorY2FzZSBgJE5NIC1WIDI+JjFgIGluCisqR05VKiB8ICond2l0aCBCRkQnKikKKyAgc3ltY29kZT0nW1tBQkNER0lSU1RXXV0nIDs7Citlc2FjCisKKyMgVHJ5IHdpdGhvdXQgYSBwcmVmaXggdW5kZXJjb3JlLCB0aGVuIHdpdGggaXQuCitmb3IgYWNfc3ltcHJmeCBpbiAiIiAiXyI7IGRvCisKKyAgIyBUcmFuc2Zvcm0gc3ltY29kZSwgc3ltcGF0LCBhbmQgc3ltcHJmeCBpbnRvIGEgcmF3IHN5bWJvbCBhbmQgYSBDIHN5bWJvbC4KKyAgc3lteGZybT0iXFwxICRhY19zeW1wcmZ4XFwyIFxcMiIKKworICAjIFdyaXRlIHRoZSByYXcgYW5kIEMgaWRlbnRpZmllcnMuCisgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9InNlZCAtbiAtZSAncy9eLipbWyAJXV1cKCRzeW1jb2RlJHN5bWNvZGUqXClbWyAJXV1bWyAJXV0qJGFjX3N5bXByZngkc3ltcGF0JG9wdF9jciQvJHN5bXhmcm0vcCciCisKKyAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGUgcGlwZSB3b3JrcyBjb3JyZWN0bHkuCisgIHBpcGVfd29ya3M9bm8KKworICBybSAtZiBjb25mdGVzdCoKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorY2hhciBubV90ZXN0X3ZhcjsKK3ZvaWQgbm1fdGVzdF9mdW5jKCl7fQorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKK2ludCBtYWluKCl7bm1fdGVzdF92YXI9J2EnO25tX3Rlc3RfZnVuYygpO3JldHVybigwKTt9CitFT0YKKworICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorICAgICMgTm93IHRyeSB0byBncmFiIHRoZSBzeW1ib2xzLgorICAgIG5saXN0PWNvbmZ0ZXN0Lm5tCisgICAgaWYgQUNfVFJZX0VWQUwoTk0gY29uZnRlc3QuJGFjX29iamV4dCBcfCAkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBcPiAkbmxpc3QpICYmIHRlc3QgLXMgIiRubGlzdCI7IHRoZW4KKyAgICAgICMgVHJ5IHNvcnRpbmcgYW5kIHVuaXF1aWZ5aW5nIHRoZSBvdXRwdXQuCisgICAgICBpZiBzb3J0ICIkbmxpc3QiIHwgdW5pcSA+ICIkbmxpc3QiVDsgdGhlbgorCW12IC1mICIkbmxpc3QiVCAiJG5saXN0IgorICAgICAgZWxzZQorCXJtIC1mICIkbmxpc3QiVAorICAgICAgZmkKKworICAgICAgIyBNYWtlIHN1cmUgdGhhdCB3ZSBzbmFnZ2VkIGFsbCB0aGUgc3ltYm9scyB3ZSBuZWVkLgorICAgICAgaWYgZ3JlcCAnIG5tX3Rlc3RfdmFyJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorCWlmIGdyZXAgJyBubV90ZXN0X2Z1bmMkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisJICBjYXQgPDxFT0YgPiBjb25mdGVzdC4kYWNfZXh0CisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK0VPRgorCSAgIyBOb3cgZ2VuZXJhdGUgdGhlIHN5bWJvbCBmaWxlLgorCSAgZXZhbCAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIicgPCAiJG5saXN0IiB8IGdyZXAgLXYgbWFpbiA+PiBjb25mdGVzdC4kYWNfZXh0JworCisJICBjYXQgPDxFT0YgPj4gY29uZnRlc3QuJGFjX2V4dAorI2lmIGRlZmluZWQgKF9fU1REQ19fKSAmJiBfX1NURENfXworIyBkZWZpbmUgbHRfcHRyX3Qgdm9pZCAqCisjZWxzZQorIyBkZWZpbmUgbHRfcHRyX3QgY2hhciAqCisjIGRlZmluZSBjb25zdAorI2VuZGlmCisKKy8qIFRoZSBtYXBwaW5nIGJldHdlZW4gc3ltYm9sIG5hbWVzIGFuZCBzeW1ib2xzLiAqLworY29uc3Qgc3RydWN0IHsKKyAgY29uc3QgY2hhciAqbmFtZTsKKyAgbHRfcHRyX3QgYWRkcmVzczsKK30KK2x0X3ByZWxvYWRlZF9zeW1ib2xzW1tdXSA9Cit7CitFT0YKKwkgICRTRUQgInMvXiRzeW1jb2RlJHN5bWNvZGUqIFwoLipcKSBcKC4qXCkkLyAge1wiXDJcIiwgKGx0X3B0cl90KSBcJlwyfSwvIiA8ICIkbmxpc3QiIHwgZ3JlcCAtdiBtYWluID4+IGNvbmZ0ZXN0LiRhY19leHQKKwkgIGNhdCA8PFxFT0YgPj4gY29uZnRlc3QuJGFjX2V4dAorICB7MCwgKGx0X3B0cl90KSAwfQorfTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKK0VPRgorCSAgIyBOb3cgdHJ5IGxpbmtpbmcgdGhlIHR3byBmaWxlcy4KKwkgIG12IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRzdG0uJGFjX29iamV4dAorCSAgbHRfc2F2ZV9MSUJTPSIkTElCUyIKKwkgIGx0X3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorCSAgTElCUz0iY29uZnRzdG0uJGFjX29iamV4dCIKKwkgIENGTEFHUz0iJENGTEFHUyRfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSkiCisJICBpZiBBQ19UUllfRVZBTChhY19saW5rKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisJICAgIHBpcGVfd29ya3M9eWVzCisJICBmaQorCSAgTElCUz0iJGx0X3NhdmVfTElCUyIKKwkgIENGTEFHUz0iJGx0X3NhdmVfQ0ZMQUdTIgorCWVsc2UKKwkgIGVjaG8gImNhbm5vdCBmaW5kIG5tX3Rlc3RfZnVuYyBpbiAkbmxpc3QiID4mQVNfTUVTU0FHRV9MT0dfRkQKKwlmaQorICAgICAgZWxzZQorCWVjaG8gImNhbm5vdCBmaW5kIG5tX3Rlc3RfdmFyIGluICRubGlzdCIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgZmkKKyAgICBlbHNlCisgICAgICBlY2hvICJjYW5ub3QgcnVuICRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgZmkKKyAgZWxzZQorICAgIGVjaG8gIiRwcm9nbmFtZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBmaQorICBybSAtZiBjb25mdGVzdCogY29uZnRzdCoKKworICAjIERvIG5vdCB1c2UgdGhlIGdsb2JhbF9zeW1ib2xfcGlwZSB1bmxlc3MgaXQgd29ya3MuCisgIGlmIHRlc3QgIiRwaXBlX3dvcmtzIiA9IHllczsgdGhlbgorICAgIGJyZWFrCisgIGVsc2UKKyAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPQorICBmaQorZG9uZQorXSkKK2lmIHRlc3QgLXogIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIjsgdGhlbgorICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0KK2ZpCitpZiB0ZXN0IC16ICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCI7IHRoZW4KKyAgQUNfTVNHX1JFU1VMVChmYWlsZWQpCitlbHNlCisgIEFDX01TR19SRVNVTFQob2spCitmaQorXSkgIyBBQ19MSUJUT09MX1NZU19HTE9CQUxfU1lNQk9MX1BJUEUKKworCisjIEFDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9QSUMoW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfUElDXSwKK1tfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0KK19MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0KK19MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0KKworQUNfTVNHX0NIRUNLSU5HKFtmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQ10pCisgaWZlbHNlKFskMV0sW0NYWF0sWworICAjIEMrKyBzcGVjaWZpYyBjYXNlcyBmb3IgcGljLCBzdGF0aWMsIHdsLCBldGMuCisgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJworCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeCopCisgICAgICAjIEFsbCBBSVggY29kZSBpcyBQSUMuCisgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCisJX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIGZpCisgICAgICA7OworICAgIGFtaWdhb3MqKQorICAgICAgIyBGSVhNRTogd2UgbmVlZCBhdCBsZWFzdCA2ODAyMCBjb2RlIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dAorICAgICAgIyBhZGRpbmcgdGhlIGAtbTY4MDIwJyBmbGFnIHRvIEdDQyBwcmV2ZW50cyBidWlsZGluZyBhbnl0aGluZyBiZXR0ZXIsCisgICAgICAjIGxpa2UgYC1tNjgwNDAnLgorICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctbTY4MDIwIC1yZXNpZGVudDMyIC1tYWx3YXlzLXJlc3RvcmUtYTQnCisgICAgICA7OworICAgIGJlb3MqIHwgY3lnd2luKiB8IGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCogfCBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgT1Nlcy4KKyAgICAgIDs7CisgICAgbWluZ3cqIHwgb3MyKiB8IHB3MzIqKQorICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZworICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KKyAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLURETExfRVhQT1JUJworICAgICAgOzsKKyAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQorICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcworICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZm5vLWNvbW1vbicKKyAgICAgIDs7CisgICAgKmRqZ3BwKikKKyAgICAgICMgREpHUFAgZG9lcyBub3Qgc3VwcG9ydCBzaGFyZWQgbGlicmFyaWVzIGF0IGFsbAorICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQorICAgICAgOzsKKyAgICBpbnRlcml4MyopCisgICAgICAjIEludGVyaXggMy54IGdjYyAtZnBpYy8tZlBJQyBvcHRpb25zIGdlbmVyYXRlIGJyb2tlbiBjb2RlLgorICAgICAgIyBJbnN0ZWFkLCB3ZSByZWxvY2F0ZSBzaGFyZWQgbGlicmFyaWVzIGF0IHJ1bnRpbWUuCisgICAgICA7OworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KKwlfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9LUtjb25mb3JtX3BpYworICAgICAgZmkKKyAgICAgIDs7CisgICAgaHB1eCopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSUE2NCBIUC1VWCBhbmQgNjQtYml0IEhQLVVYLCBidXQKKyAgICAgICMgbm90IGZvciBQQSBIUC1VWC4KKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBocHBhKjY0KnxpYTY0KikKKwk7OworICAgICAgKikKKwlfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworCTs7CisgICAgICBlc2FjCisgICAgICA7OworICAgICopCisgICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworICAgICAgOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXg0KiB8IGFpeDUqKQorCSMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KKwlpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSAgIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwkgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJZWxzZQorCSAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctYm5zbyAtYkk6L2xpYi9zeXNjYWxscy5leHAnCisJZmkKKwk7OworICAgICAgY2hvcnVzKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCWN4Y2g2OCopCisJICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorCSAgIyBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Ii0tbm9fYXV0b19pbnN0YW50aWF0aW9uIC11IF9fbWFpbiAtdSBfX3ByZW1haW4gLXUgX2Fib3J0IC1yICRDT09MX0RJUi9saWIvbGliT3JiLmEgJE1WTUVfRElSL2xpYi9DQy9saWJDLmEgJE1WTUVfRElSL2xpYi9jbGFzc2l4L2xpYmN4LnMuYSIKKwkgIDs7CisJZXNhYworCTs7CisgICAgICAgZGFyd2luKikKKyAgICAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KKyAgICAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKKyAgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgIHhsYyopCisgICAgICAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXFub2NvbW1vbicKKyAgICAgICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICAgICAgIDs7CisgICAgICAgICBlc2FjCisgICAgICAgOzsKKyAgICAgIGRndXgqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBlYysrKikKKwkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgICAgOzsKKwkgIGdoY3gqKQorCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1waWMnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgZnJlZWJzZCogfCBrZnJlZWJzZCotZ251IHwgZHJhZ29uZmx5KikKKwkjIEZyZWVCU0QgdXNlcyBHTlUgQysrCisJOzsKKyAgICAgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBDQyopCisJICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9JyR7d2x9LWEgJHt3bH1hcmNoaXZlJworCSAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQ7IHRoZW4KKwkgICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9JytaJworCSAgICBmaQorCSAgICA7OworCSAgYUNDKikKKwkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nJHt3bH0tYSAke3dsfWFyY2hpdmUnCisJICAgIGNhc2UgJGhvc3RfY3B1IGluCisJICAgIGhwcGEqNjQqfGlhNjQqKQorCSAgICAgICMgK1ogdGhlIGRlZmF1bHQKKwkgICAgICA7OworCSAgICAqKQorCSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nK1onCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIGludGVyaXgqKQorCSMgVGhpcyBpcyBjODksIHdoaWNoIGlzIE1TIFZpc3VhbCBDKysgKG5vIHNoYXJlZCBsaWJzKQorCSMgQW55b25lIHdhbnRzIHRvIGRvIGEgcG9ydD8KKwk7OworICAgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgQ0MqKQorCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKKwkgICAgIyBDQyBwaWMgZmxhZyAtS1BJQyBpcyB0aGUgZGVmYXVsdC4KKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBsaW51eCopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIEtDQyopCisJICAgICMgS0FJIEMrKyBDb21waWxlcgorCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLS1iYWNrZW5kIC1XbCwnCisJICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisJICAgIDs7CisJICBpY3BjKiB8IGVjcGMqKQorCSAgICAjIEludGVsIEMrKworCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJworCSAgICA7OworCSAgcGdDQyopCisJICAgICMgUG9ydGxhbmQgR3JvdXAgQysrIGNvbXBpbGVyLgorCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZnBpYycKKwkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwkgICAgOzsKKwkgIGN4eCopCisJICAgICMgQ29tcGFxIEMrKworCSAgICAjIE1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgaXMgZW1wdHkuICBJdCBhcHBlYXJzIHRoYXQgYWxsIEFscGhhCisJICAgICMgTGludXggYW5kIENvbXBhcSBUcnU2NCBVbml4IG9iamVjdHMgYXJlIFBJQy4KKwkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQorCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIGx5bnhvcyopCisJOzsKKyAgICAgIG04OGsqKQorCTs7CisgICAgICBtdnMqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBjeHgqKQorCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1XIGMsZXhwb3J0YWxsJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIG5ldGJzZCopCisJOzsKKyAgICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgS0NDKikKKwkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy0tYmFja2VuZCAtV2wsJworCSAgICA7OworCSAgUkNDKikKKwkgICAgIyBSYXRpb25hbCBDKysgMi40LjEKKwkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJworCSAgICA7OworCSAgY3h4KikKKwkgICAgIyBEaWdpdGFsL0NvbXBhcSBDKysKKwkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICAgICMgTWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBpcyBlbXB0eS4gIEl0IGFwcGVhcnMgdGhhdCBhbGwgQWxwaGEKKwkgICAgIyBMaW51eCBhbmQgQ29tcGFxIFRydTY0IFVuaXggb2JqZWN0cyBhcmUgUElDLgorCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9CisJICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgcHNvcyopCisJOzsKKyAgICAgIHNvbGFyaXMqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBDQyopCisJICAgICMgU3VuIEMrKyA0LjIsIDUueCBhbmQgQ2VudGVybGluZSBDKysKKwkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICcKKwkgICAgOzsKKwkgIGdjeCopCisJICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLVBJQycKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBzdW5vczQqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBDQyopCisJICAgICMgU3VuIEMrKyA0LngKKwkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJworCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgICA7OworCSAgbGNjKikKKwkgICAgIyBMdWNpZAorCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1waWMnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgdGFuZGVtKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgTkNDKikKKwkgICAgIyBOb25TdG9wLVVYIE5DQyAzLjIwCisJICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgc3lzdjUqIHwgdW5peHdhcmUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IE9wZW5VTklYKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgQ0MqKQorCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIHZ4d29ya3MqKQorCTs7CisgICAgICAqKQorCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm8KKwk7OworICAgIGVzYWMKKyAgZmkKK10sCitbCisgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJworCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4KikKKyAgICAgICMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwlfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhbWlnYW9zKikKKyAgICAgICMgRklYTUU6IHdlIG5lZWQgYXQgbGVhc3QgNjgwMjAgY29kZSB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLCBidXQKKyAgICAgICMgYWRkaW5nIHRoZSBgLW02ODAyMCcgZmxhZyB0byBHQ0MgcHJldmVudHMgYnVpbGRpbmcgYW55dGhpbmcgYmV0dGVyLAorICAgICAgIyBsaWtlIGAtbTY4MDQwJy4KKyAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLW02ODAyMCAtcmVzaWRlbnQzMiAtbWFsd2F5cy1yZXN0b3JlLWE0JworICAgICAgOzsKKworICAgIGJlb3MqIHwgY3lnd2luKiB8IGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCogfCBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgT1Nlcy4KKyAgICAgIDs7CisKKyAgICBtaW5ndyogfCBwdzMyKiB8IG9zMiopCisgICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisgICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgorICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctRERMTF9FWFBPUlQnCisgICAgICA7OworCisgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KKyAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKKyAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZuby1jb21tb24nCisgICAgICA7OworCisgICAgaW50ZXJpeDMqKQorICAgICAgIyBJbnRlcml4IDMueCBnY2MgLWZwaWMvLWZQSUMgb3B0aW9ucyBnZW5lcmF0ZSBicm9rZW4gY29kZS4KKyAgICAgICMgSW5zdGVhZCwgd2UgcmVsb2NhdGUgc2hhcmVkIGxpYnJhcmllcyBhdCBydW50aW1lLgorICAgICAgOzsKKworICAgIG1zZG9zZGpncHAqKQorICAgICAgIyBKdXN0IGJlY2F1c2Ugd2UgdXNlIEdDQyBkb2Vzbid0IG1lYW4gd2Ugc3VkZGVubHkgZ2V0IHNoYXJlZCBsaWJyYXJpZXMKKyAgICAgICMgb24gc3lzdGVtcyB0aGF0IGRvbid0IHN1cHBvcnQgdGhlbS4KKyAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm8KKyAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KKyAgICAgIDs7CisKKyAgICBzeXN2NCpNUCopCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisJX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPS1LY29uZm9ybV9waWMKKyAgICAgIGZpCisgICAgICA7OworCisgICAgaHB1eCopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSUE2NCBIUC1VWCBhbmQgNjQtYml0IEhQLVVYLCBidXQKKyAgICAgICMgbm90IGZvciBQQSBIUC1VWC4KKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBocHBhKjY0KnxpYTY0KikKKwkjICtaIHRoZSBkZWZhdWx0CisJOzsKKyAgICAgICopCisJX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgICopCisgICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworICAgICAgOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICAjIFBPUlRNRSBDaGVjayBmb3IgZmxhZyB0byBwYXNzIGxpbmtlciBmbGFncyB0aHJvdWdoIHRoZSBzeXN0ZW0gY29tcGlsZXIuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeCopCisgICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwlfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgZWxzZQorCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLWJuc28gLWJJOi9saWIvc3lzY2FsbHMuZXhwJworICAgICAgZmkKKyAgICAgIDs7CisgICAgICBkYXJ3aW4qKQorICAgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCisgICAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKKyAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgeGxjKikKKyAgICAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXFub2NvbW1vbicKKyAgICAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgICAgICAgOzsKKyAgICAgICBlc2FjCisgICAgICAgOzsKKworICAgIG1pbmd3KiB8IHB3MzIqIHwgb3MyKikKKyAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKKyAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCisgICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1ERExMX0VYUE9SVCcKKyAgICAgIDs7CisKKyAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKyAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIElBNjQgSFAtVVggYW5kIDY0LWJpdCBIUC1VWCwgYnV0CisgICAgICAjIG5vdCBmb3IgUEEgSFAtVVguCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgaHBwYSo2NCp8aWE2NCopCisJIyArWiB0aGUgZGVmYXVsdAorCTs7CisgICAgICAqKQorCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nK1onCisJOzsKKyAgICAgIGVzYWMKKyAgICAgICMgSXMgdGhlcmUgYSBiZXR0ZXIgbHRfcHJvZ19jb21waWxlcl9zdGF0aWMgdGhhdCB3b3JrcyB3aXRoIHRoZSBidW5kbGVkIENDPworICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPScke3dsfS1hICR7d2x9YXJjaGl2ZScKKyAgICAgIDs7CisKKyAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICAjIFBJQyAod2l0aCAtS1BJQykgaXMgdGhlIGRlZmF1bHQuCisgICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJworICAgICAgOzsKKworICAgIG5ld3NvczYpCisgICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICBsaW51eCopCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgaWNjKiB8IGVjYyopCisJX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwlfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCisgICAgICAgIDs7CisgICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KikKKyAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBjb21waWxlcnMgKCpub3QqIHRoZSBQZW50aXVtIGdjYyBjb21waWxlciwKKwkjIHdoaWNoIGxvb2tzIHRvIGJlIGEgZGVhZCBwcm9qZWN0KQorCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZwaWMnCisJX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgICAgOzsKKyAgICAgIGNjYyopCisgICAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgICAgICAjIEFsbCBBbHBoYSBjb2RlIGlzIFBJQy4KKyAgICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICAgICMgQWxsIE9TRi8xIGNvZGUgaXMgUElDLgorICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKKyAgICAgIDs7CisKKyAgICBzb2xhcmlzKikKKyAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisgICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgIGY3NyogfCBmOTAqIHwgZjk1KikKKwlfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVFvcHRpb24gbGQgJzs7CisgICAgICAqKQorCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJzs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgc3Vub3M0KikKKyAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctUW9wdGlvbiBsZCAnCisgICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1QSUMnCisgICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKikKKyAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKyAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgc3lzdjQqTVAqKQorICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYyA7dGhlbgorCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtjb25mb3JtX3BpYycKKwlfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzeXN2NSogfCB1bml4d2FyZSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgT3BlblVOSVgqKQorICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICB1bmljb3MqKQorICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZCwgJDEpPW5vCisgICAgICA7OworCisgICAgdXRzNCopCisgICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1waWMnCisgICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgICopCisgICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZCwgJDEpPW5vCisgICAgICA7OworICAgIGVzYWMKKyAgZmkKK10pCitBQ19NU0dfUkVTVUxUKFskX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpXSkKKworIworIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorIworaWYgdGVzdCAtbiAiJF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKSI7IHRoZW4KKyAgQUNfTElCVE9PTF9DT01QSUxFUl9PUFRJT04oW2lmICRjb21waWxlciBQSUMgZmxhZyAkX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIHdvcmtzXSwKKyAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzLCAkMSksCisgICAgWyRfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSlpZmVsc2UoWyQxXSxbXSxbIC1EUElDXSxbaWZlbHNlKFskMV0sW0NYWF0sWyAtRFBJQ10sW10pXSldLCBbXSwKKyAgICBbY2FzZSAkX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIGluCisgICAgICIiIHwgIiAiKikgOzsKKyAgICAgKikgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSIgJF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKSIgOzsKKyAgICAgZXNhY10sCisgICAgW19MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0KKyAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQsICQxKT1ub10pCitmaQorY2FzZSAkaG9zdF9vcyBpbgorICAjIEZvciBwbGF0Zm9ybXMgd2hpY2ggZG8gbm90IHN1cHBvcnQgUElDLCAtRFBJQyBpcyBtZWFuaW5nbGVzczoKKyAgKmRqZ3BwKikKKyAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9CisgICAgOzsKKyAgKikKKyAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9IiRfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSlpZmVsc2UoWyQxXSxbXSxbIC1EUElDXSxbaWZlbHNlKFskMV0sW0NYWF0sWyAtRFBJQ10sW10pXSkiCisgICAgOzsKK2VzYWMKKworIworIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIHN0YXRpYyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorIword2w9JF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpIGV2YWwgbHRfdG1wX3N0YXRpY19mbGFnPVwiJF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKVwiCitBQ19MSUJUT09MX0xJTktFUl9PUFRJT04oW2lmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzXSwKKyAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3JrcywgJDEpLAorICAkbHRfdG1wX3N0YXRpY19mbGFnLAorICBbXSwKKyAgW19MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT1dKQorXSkKKworCisjIEFDX0xJQlRPT0xfUFJPR19MRF9TSExJQlMoW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2VlIGlmIHRoZSBsaW5rZXIgc3VwcG9ydHMgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcy4KK0FDX0RFRlVOKFtBQ19MSUJUT09MX1BST0dfTERfU0hMSUJTXSwKK1tBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllc10pCitpZmVsc2UoWyQxXSxbQ1hYXSxbCisgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgYWl4NCogfCBhaXg1KikKKyAgICAjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB3ZSBkb24ndCB3YW50IHRoZSAiLUMiIG9wdGlvbi4KKyAgICAjIC1DIG1lYW5zIGRlbWFuZ2xlIHRvIEFJWCBubSwgYnV0IG1lYW5zIGRvbid0IGRlbWFuZ2xlIHdpdGggR05VIG5tCisgICAgaWYgJE5NIC1WIDI+JjEgfCBncmVwICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NIC1CcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFxbJF0yID09ICJUIikgfHwgKFxbJF0yID09ICJEIikgfHwgKFxbJF0yID09ICJCIikpICYmIChbc3Vic3RyXShcWyRdMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXFskXTMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCisgICAgZWxzZQorICAgICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAtQkNwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXFskXTIgPT0gIlQiKSB8fCAoXFskXTIgPT0gIkQiKSB8fCAoXFskXTIgPT0gIkIiKSkgJiYgKFtzdWJzdHJdKFxbJF0zLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcWyRdMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKyAgICBmaQorICAgIDs7CisgIHB3MzIqKQorICAgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSIkbHRkbGxfY21kcyIKKyAgOzsKKyAgY3lnd2luKiB8IG1pbmd3KikKKyAgICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltbQkNER1JTXV0gL3MvLiogXChbW14gXV0qXCkvXDEgREFUQS87L14uKiBfX25tX18vcy9eLiogX19ubV9fXChbW14gXV0qXCkgW1teIF1dKi9cMSBEQVRBLzsvXkkgL2Q7L15bW0FJVFddXSAvcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgOzsKKyAgKikKKyAgICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworICA7OworICBlc2FjCitdLFsKKyAgcnVucGF0aF92YXI9CisgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0KKyAgX0xUX0FDX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9bm8KKyAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0KKyAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9CisgIF9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfRnJvbV9uZXdfY21kcywgJDEpPQorICBfTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzLCAkMSk9CisgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9CisgIF9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KKyAgX0xUX0FDX1RBR1ZBUih0aHJlYWRfc2FmZV9mbGFnX3NwZWMsICQxKT0KKyAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9CisgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCwgJDEpPQorICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KKyAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT1ubworICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT11bnN1cHBvcnRlZAorICBfTFRfQUNfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT11bmtub3duCisgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSk9bm8KKyAgX0xUX0FDX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPQorICBfTFRfQUNfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpPQorICBfTFRfQUNfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCisgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgICMgaW5jbHVkZV9leHBzeW1zIHNob3VsZCBiZSBhIGxpc3Qgb2Ygc3BhY2Utc2VwYXJhdGVkIHN5bWJvbHMgdG8gYmUgKmFsd2F5cyoKKyAgIyBpbmNsdWRlZCBpbiB0aGUgc3ltYm9sIGxpc3QKKyAgX0xUX0FDX1RBR1ZBUihpbmNsdWRlX2V4cHN5bXMsICQxKT0KKyAgIyBleGNsdWRlX2V4cHN5bXMgY2FuIGJlIGFuIGV4dGVuZGVkIHJlZ2V4cCBvZiBzeW1ib2xzIHRvIGV4Y2x1ZGUKKyAgIyBpdCB3aWxsIGJlIHdyYXBwZWQgYnkgYCAoJyBhbmQgYCkkJywgc28gb25lIG11c3Qgbm90IG1hdGNoIGJlZ2lubmluZyBvcgorICAjIGVuZCBvZiBsaW5lLiAgRXhhbXBsZTogYGF8YmN8LipkLionIHdpbGwgZXhjbHVkZSB0aGUgc3ltYm9scyBgYScgYW5kIGBiYycsCisgICMgYXMgd2VsbCBhcyBhbnkgc3ltYm9sIHRoYXQgY29udGFpbnMgYGQnLgorICBfTFRfQUNfVEFHVkFSKGV4Y2x1ZGVfZXhwc3ltcywgJDEpPSJfR0xPQkFMX09GRlNFVF9UQUJMRV8iCisgICMgQWx0aG91Z2ggX0dMT0JBTF9PRkZTRVRfVEFCTEVfIGlzIGEgdmFsaWQgc3ltYm9sIEMgbmFtZSwgbW9zdCBhLm91dAorICAjIHBsYXRmb3JtcyAoYWIpdXNlIGl0IGluIFBJQyBjb2RlLCBidXQgdGhlaXIgbGlua2VycyBnZXQgY29uZnVzZWQgaWYKKyAgIyB0aGUgc3ltYm9sIGlzIGV4cGxpY2l0bHkgcmVmZXJlbmNlZC4gIFNpbmNlIHBvcnRhYmxlIGNvZGUgY2Fubm90CisgICMgcmVseSBvbiB0aGlzIHN5bWJvbCBuYW1lLCBpdCdzIHByb2JhYmx5IGZpbmUgdG8gbmV2ZXIgaW5jbHVkZSBpdCBpbgorICAjIHByZWxvYWRlZCBzeW1ib2wgdGFibGVzLgorICBleHRyYWN0X2V4cHN5bXNfY21kcz0KKyAgIyBKdXN0IGJlaW5nIHBhcmFub2lkIGFib3V0IGVuc3VyaW5nIHRoYXQgY2NfYmFzZW5hbWUgaXMgc2V0LgorICBfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQorICAgICMgRklYTUU6IHRoZSBNU1ZDKysgcG9ydCBoYXNuJ3QgYmVlbiB0ZXN0ZWQgaW4gYSBsb29vb25nIHRpbWUKKyAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZworICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisgICAgICB3aXRoX2dudV9sZD1ubworICAgIGZpCisgICAgOzsKKyAgaW50ZXJpeCopCisgICAgIyB3ZSBqdXN0IGhvcGUvYXNzdW1lIHRoaXMgaXMgZ2NjIGFuZCBub3QgYzg5ICg9IE1TVkMrKykKKyAgICB3aXRoX2dudV9sZD15ZXMKKyAgICA7OworICBvcGVuYnNkKikKKyAgICB3aXRoX2dudV9sZD1ubworICAgIDs7CisgIGVzYWMKKworICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcworICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgICAgIyBJZiBhcmNoaXZlX2NtZHMgcnVucyBMRCwgbm90IENDLCB3bGFyYyBzaG91bGQgYmUgZW1wdHkKKyAgICB3bGFyYz0nJHt3bH0nCisKKyAgICAjIFNldCBzb21lIGRlZmF1bHRzIGZvciBHTlUgbGQgd2l0aCBzaGFyZWQgbGlicmFyeSBzdXBwb3J0LiBUaGVzZQorICAgICMgYXJlIHJlc2V0IGxhdGVyIGlmIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG5vdCBzdXBwb3J0ZWQuIFB1dHRpbmcgdGhlbQorICAgICMgaGVyZSBhbGxvd3MgdGhlbSB0byBiZSBvdmVycmlkZGVuIGlmIG5lY2Vzc2FyeS4KKyAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tcnBhdGggJHt3bH0kbGliZGlyJworICAgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKyAgICAjIGFuY2llbnQgR05VIGxkIGRpZG4ndCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZSBldC4gYWwuCisgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnbm8td2hvbGUtYXJjaGl2ZScgPiAvZGV2L251bGw7IHRoZW4KKwlfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9IiR3bGFyYyInLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICciJHdsYXJjIictLW5vLXdob2xlLWFyY2hpdmUnCisgICAgICBlbHNlCisgIAlfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CisgICAgZmkKKyAgICBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9bm8KKyAgICBjYXNlIGAkTEQgLXYgMj4vZGV2L251bGxgIGluCisgICAgICAqXCBbWzAxXV0uKiB8ICpcIDIuW1swLTldXS4qIHwgKlwgMi4xMC4qKSA7OyAjIGNhdGNoIHZlcnNpb25zIDwgMi4xMQorICAgICAgKlwgMi4xMS45My4wLjJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBSSDcuMyAuLi4KKyAgICAgICpcIDIuMTEuOTIuMC4xMlwgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OyAjIE1hbmRyYWtlIDguMiAuLi4KKyAgICAgICpcIDIuMTEuKikgOzsgIyBvdGhlciAyLjExIHZlcnNpb25zCisgICAgICAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7CisgICAgZXNhYworCisgICAgIyBTZWUgaWYgR05VIGxkIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeDMqIHwgYWl4NCogfCBhaXg1KikKKyAgICAgICMgT24gQUlYL1BQQywgdGhlIEdOVSBsaW5rZXIgaXMgdmVyeSBicm9rZW4KKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NDsgdGhlbgorCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwljYXQgPDxFT0YgMT4mMgorCisqKiogV2FybmluZzogdGhlIEdOVSBsaW5rZXIsIGF0IGxlYXN0IHVwIHRvIHJlbGVhc2UgMi45LjEsIGlzIHJlcG9ydGVkCisqKiogdG8gYmUgdW5hYmxlIHRvIHJlbGlhYmx5IGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIEFJWC4KKyoqKiBUaGVyZWZvcmUsIGxpYnRvb2wgaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIElmIHlvdQorKioqIHJlYWxseSBjYXJlIGZvciBzaGFyZWQgbGlicmFyaWVzLCB5b3UgbWF5IHdhbnQgdG8gbW9kaWZ5IHlvdXIgUEFUSAorKioqIHNvIHRoYXQgYSBub24tR05VIGxpbmtlciBpcyBmb3VuZCwgYW5kIHRoZW4gcmVzdGFydC4KKworRU9GCisgICAgICBmaQorICAgICAgOzsKKworICAgIGFtaWdhb3MqKQorICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJHJtICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgTkFNRSAkbGlibmFtZSIgPiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIExJQlJBUllfSUQgMSIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBWRVJTSU9OICRtYWpvciIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBSRVZJU0lPTiAkcmV2aXNpb24iID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEFSICRBUl9GTEFHUyAkbGliICRsaWJvYmpzfiRSQU5MSUIgJGxpYn4oY2QgJG91dHB1dF9vYmpkaXIgJiYgYTJpeGxpYnJhcnkgLTMyKScKKyAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKworICAgICAgIyBTYW11ZWwgQS4gRmFsdm8gSUkgPGtjNXRqYUBkb2xwaGluLm9wZW5wcm9qZWN0cy5uZXQ+IHJlcG9ydHMKKyAgICAgICMgdGhhdCB0aGUgc2VtYW50aWNzIG9mIGR5bmFtaWMgbGlicmFyaWVzIG9uIEFtaWdhT1MsIGF0IGxlYXN0IHVwCisgICAgICAjIHRvIHZlcnNpb24gNCwgaXMgdG8gc2hhcmUgZGF0YSBhbW9uZyBtdWx0aXBsZSBwcm9ncmFtcyBsaW5rZWQKKyAgICAgICMgd2l0aCB0aGUgc2FtZSBkeW5hbWljIGxpYnJhcnkuICBTaW5jZSB0aGlzIGRvZXNuJ3QgbWF0Y2ggdGhlCisgICAgICAjIGJlaGF2aW9yIG9mIHNoYXJlZCBsaWJyYXJpZXMgb24gb3RoZXIgcGxhdGZvcm1zLCB3ZSBjYW4ndCB1c2UKKyAgICAgICMgdGhlbS4KKyAgICAgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICBiZW9zKikKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCV9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorCSMgSm9zZXBoIEJlY2tlbmJhY2ggPGpyYjNAYmVzdC5jb20+IHNheXMgc29tZSByZWxlYXNlcyBvZiBnY2MKKwkjIHN1cHBvcnQgLS11bmRlZmluZWQuICBUaGlzIGRlc2VydmVzIHNvbWUgaW52ZXN0aWdhdGlvbi4gIEZJWE1FCisJX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1ub3N0YXJ0ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgZWxzZQorCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQorICAgICAgIyBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKKyAgICAgICMgYXMgdGhlcmUgaXMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisgICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworICAgICAgX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisgICAgICBfTFRfQUNfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCisgICAgICBfTFRfQUNfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKKyAgICAgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW1tCQ0RHUlNdXSAvcy8uKiBcKFtbXiBdXSpcKS9cMSBEQVRBLydcJycgfCAkU0VEIC1lICdcJycvXltbQUlUV11dIC9zLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisJIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlICgxc3QgbGluZQorCSMgaXMgRVhQT1JUUyksIHVzZSBpdCBhcyBpczsgb3RoZXJ3aXNlLCBwcmVwZW5kLi4uCisJX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisJICBjcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisJZWxzZQorCSAgZWNobyBFWFBPUlRTID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisJICBjYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworCWZpfgorCSRDQyAtc2hhcmVkICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworICAgICAgZWxzZQorCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgaW50ZXJpeDMqKQorICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJworICAgICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKyAgICAgICMgSGFjazogT24gSW50ZXJpeCAzLngsIHdlIGNhbm5vdCBjb21waWxlIFBJQyBiZWNhdXNlIG9mIGEgYnJva2VuIGdjYy4KKyAgICAgICMgSW5zdGVhZCwgc2hhcmVkIGxpYnJhcmllcyBhcmUgbG9hZGVkIGF0IGFuIGltYWdlIGJhc2UgKDB4MTAwMDAwMDAgYnkKKyAgICAgICMgZGVmYXVsdCkgYW5kIHJlbG9jYXRlZCBpZiB0aGV5IGNvbmZsaWN0LCB3aGljaCBpcyBhIHNsb3cgdmVyeSBtZW1vcnkKKyAgICAgICMgY29uc3VtaW5nIGFuZCBmcmFnbWVudGluZyBwcm9jZXNzLiAgVG8gYXZvaWQgdGhpcywgd2UgcGljayBhIHJhbmRvbSwKKyAgICAgICMgMjU2IEtpQi1hbGlnbmVkIGltYWdlIGJhc2UgYmV0d2VlbiAweDUwMDAwMDAwIGFuZCAweDZGRkMwMDAwIGF0IGxpbmsKKyAgICAgICMgdGltZS4gIE1vdmluZyB1cCBmcm9tIDB4MTAwMDAwMDAgYWxzbyBhbGxvd3MgbW9yZSBzYnJrKDIpIHNwYWNlLgorICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKyAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdzZWQgInMsXixfLCIgJGV4cG9ydF9zeW1ib2xzID4kb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0tcmV0YWluLXN5bWJvbHMtZmlsZSwkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJworICAgICAgOzsKKworICAgIGxpbnV4KikKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCXRtcF9hZGRmbGFnPQorCWNhc2UgJGNjX2Jhc2VuYW1lLCRob3N0X2NwdSBpbgorCXBnY2MqKQkJCQkjIFBvcnRsYW5kIEdyb3VwIEMgY29tcGlsZXIKKwkgIF9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJGVjaG8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCisJICA7OworCXBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KikJIyBQb3J0bGFuZCBHcm91cCBmNzcgYW5kIGY5MCBjb21waWxlcnMKKwkgIF9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJGVjaG8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcgLU1ub21haW4nIDs7CisJZWNjKixpYTY0KiB8IGljYyosaWE2NCopCQkjIEludGVsIEMgY29tcGlsZXIgb24gaWE2NAorCSAgdG1wX2FkZGZsYWc9JyAtaV9keW5hbWljJyA7OworCWVmYyosaWE2NCogfCBpZm9ydCosaWE2NCopCSMgSW50ZWwgRm9ydHJhbiBjb21waWxlciBvbiBpYTY0CisJICB0bXBfYWRkZmxhZz0nIC1pX2R5bmFtaWMgLW5vZm9yX21haW4nIDs7CisJaWZjKiB8IGlmb3J0KikJCQkjIEludGVsIEZvcnRyYW4gY29tcGlsZXIKKwkgIHRtcF9hZGRmbGFnPScgLW5vZm9yX21haW4nIDs7CisJZXNhYworCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJyIkdG1wX2FkZGZsYWciJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKworCWlmIHRlc3QgJHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyA9IHllczsgdGhlbgorCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgICRlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICRDQyAtc2hhcmVkJyIkdG1wX2FkZGZsYWciJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tdmVyc2lvbi1zY3JpcHQgJHt3bH0kb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKwlmaQorICAgICAgZWxzZQorCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgbmV0YnNkKikKKyAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKwlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbyAkbGliJworCXdsYXJjPQorICAgICAgZWxzZQorCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGZpCisgICAgICA7OworCisgICAgc29sYXJpcyopCisgICAgICBpZiAkTEQgLXYgMj4mMSB8IGdyZXAgJ0JGRCAyXC44JyA+IC9kZXYvbnVsbDsgdGhlbgorCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwljYXQgPDxFT0YgMT4mMgorCisqKiogV2FybmluZzogVGhlIHJlbGVhc2VzIDIuOC4qIG9mIHRoZSBHTlUgbGlua2VyIGNhbm5vdCByZWxpYWJseQorKioqIGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIFNvbGFyaXMgc3lzdGVtcy4gIFRoZXJlZm9yZSwgbGlidG9vbAorKioqIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBXZSB1cmdlIHlvdSB0byB1cGdyYWRlIEdOVQorKioqIGJpbnV0aWxzIHRvIHJlbGVhc2UgMi45LjEgb3IgbmV3ZXIuICBBbm90aGVyIG9wdGlvbiBpcyB0byBtb2RpZnkKKyoqKiB5b3VyIFBBVEggb3IgY29tcGlsZXIgY29uZmlndXJhdGlvbiBzbyB0aGF0IHRoZSBuYXRpdmUgbGlua2VyIGlzCisqKiogdXNlZCwgYW5kIHRoZW4gcmVzdGFydC4KKworRU9GCisgICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCopCisgICAgICBjYXNlIGAkTEQgLXYgMj4mMWAgaW4KKyAgICAgICAgKlwgW1swMV1dLiogfCAqXCAyLltbMC05XV0uKiB8ICpcIDIuMVtbMC01XV0uKikgCisJX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCWNhdCA8PF9MVF9FT0YgMT4mMgorCisqKiogV2FybmluZzogUmVsZWFzZXMgb2YgdGhlIEdOVSBsaW5rZXIgcHJpb3IgdG8gMi4xNi45MS4wLjMgY2FuIG5vdAorKioqIHJlbGlhYmx5IGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIFNDTyBzeXN0ZW1zLiAgVGhlcmVmb3JlLCBsaWJ0b29sCisqKiogaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIFdlIHVyZ2UgeW91IHRvIHVwZ3JhZGUgR05VCisqKiogYmludXRpbHMgdG8gcmVsZWFzZSAyLjE2LjkxLjAuMyBvciBuZXdlci4gIEFub3RoZXIgb3B0aW9uIGlzIHRvIG1vZGlmeQorKioqIHlvdXIgUEFUSCBvciBjb21waWxlciBjb25maWd1cmF0aW9uIHNvIHRoYXQgdGhlIG5hdGl2ZSBsaW5rZXIgaXMKKyoqKiB1c2VkLCBhbmQgdGhlbiByZXN0YXJ0LgorCitfTFRfRU9GCisJOzsKKwkqKQorCSAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSdgdGVzdCAteiAiJFNDT0FCU1BBVEgiICYmIGVjaG8gJHt3bH0tcnBhdGgsJGxpYmRpcmAnCisJICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYicKKwkgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUsLXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJICBlbHNlCisJICAgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgIGZpCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBzdW5vczQqKQorICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1hc3NlcnQgcHVyZS10ZXh0IC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIHdsYXJjPQorICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgKikKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBpZiB0ZXN0ICIkX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKSIgPSBubzsgdGhlbgorICAgICAgcnVucGF0aF92YXI9CisgICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KKyAgICAgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9CisgICAgICBfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CisgICAgZmkKKyAgZWxzZQorICAgICMgUE9SVE1FIGZpbGwgaW4gYSBkZXNjcmlwdGlvbiBvZiB5b3VyIHN5c3RlbSdzIGxpbmtlciAobm90IEdOVSBsZCkKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgYWl4MyopCisgICAgICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKyAgICAgIF9MVF9BQ19UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9eWVzCisgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJExEIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtYkU6JGV4cG9ydF9zeW1ib2xzIC1UNTEyIC1INTEyIC1iTTpTUkV+JEFSICRBUl9GTEFHUyAkbGliICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCisgICAgICAjIE5vdGU6IHRoaXMgbGlua2VyIGhhcmRjb2RlcyB0aGUgZGlyZWN0b3JpZXMgaW4gTElCUEFUSCBpZiB0aGVyZQorICAgICAgIyBhcmUgbm8gZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGJ5IC1MLgorICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0IC16ICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWMiOyB0aGVuCisJIyBOZWl0aGVyIGRpcmVjdCBoYXJkY29kaW5nIG5vciBzdGF0aWMgbGlua2luZyBpcyBzdXBwb3J0ZWQgd2l0aCBhCisJIyBicm9rZW4gY29sbGVjdDIuCisJX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT11bnN1cHBvcnRlZAorICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhaXg0KiB8IGFpeDUqKQorICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkjIE9uIElBNjQsIHRoZSBsaW5rZXIgZG9lcyBydW4gdGltZSBsaW5raW5nIGJ5IGRlZmF1bHQsIHNvIHdlIGRvbid0CisJIyBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwuCisJYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworCWV4cF9zeW1fZmxhZz0nLUJleHBvcnQnCisJbm9fZW50cnlfZmxhZz0iIgorICAgICAgZWxzZQorCSMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHdlIGRvbid0IHdhbnQgdGhlICItQyIgb3B0aW9uLgorCSMgLUMgbWVhbnMgZGVtYW5nbGUgdG8gQUlYIG5tLCBidXQgbWVhbnMgZG9uJ3QgZGVtYW5nbGUgd2l0aCBHTlUgbm0KKwlpZiAkTk0gLVYgMj4mMSB8IGdyZXAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KKwkgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gLUJwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXFskXTIgPT0gIlQiKSB8fCAoXFskXTIgPT0gIkQiKSB8fCAoXFskXTIgPT0gIkIiKSkgJiYgKFtzdWJzdHJdKFxbJF0zLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcWyRdMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKwllbHNlCisJICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NIC1CQ3BnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcWyRdMiA9PSAiVCIpIHx8IChcWyRdMiA9PSAiRCIpIHx8IChcWyRdMiA9PSAiQiIpKSAmJiAoW3N1YnN0cl0oXFskXTMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFxbJF0zIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJworCWZpCisJYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworCisJIyBUZXN0IGlmIHdlIGFyZSB0cnlpbmcgdG8gdXNlIHJ1biB0aW1lIGxpbmtpbmcgb3Igbm9ybWFsCisJIyBBSVggc3R5bGUgbGlua2luZy4gSWYgLWJydGwgaXMgc29tZXdoZXJlIGluIExERkxBR1MsIHdlCisJIyBuZWVkIHRvIGRvIHJ1bnRpbWUgbGlua2luZy4KKwljYXNlICRob3N0X29zIGluIGFpeDQuW1syM11dfGFpeDQuW1syM11dLip8YWl4NSopCisJICBmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KKyAgCSAgaWYgKHRlc3QgJGxkX2ZsYWcgPSAiLWJydGwiIHx8IHRlc3QgJGxkX2ZsYWcgPSAiLVdsLC1icnRsIik7IHRoZW4KKyAgCSAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcworICAJICAgIGJyZWFrCisgIAkgIGZpCisJICBkb25lCisJICA7OworCWVzYWMKKworCWV4cF9zeW1fZmxhZz0nLWJleHBvcnQnCisJbm9fZW50cnlfZmxhZz0nLWJub2VudHJ5JworICAgICAgZmkKKworICAgICAgIyBXaGVuIGxhcmdlIGV4ZWN1dGFibGVzIG9yIHNoYXJlZCBvYmplY3RzIGFyZSBidWlsdCwgQUlYIGxkIGNhbgorICAgICAgIyBoYXZlIHByb2JsZW1zIGNyZWF0aW5nIHRoZSB0YWJsZSBvZiBjb250ZW50cy4gIElmIGxpbmtpbmcgYSBsaWJyYXJ5CisgICAgICAjIG9yIHByb2dyYW0gcmVzdWx0cyBpbiAiZXJyb3IgVE9DIG92ZXJmbG93IiBhZGQgLW1taW5pbWFsLXRvYyB0bworICAgICAgIyBDWFhGTEFHUy9DRkxBR1MgZm9yIGcrKy9nY2MuICBJbiB0aGUgY2FzZXMgd2hlcmUgdGhhdCBpcyBub3QKKyAgICAgICMgZW5vdWdoIHRvIGZpeCB0aGUgcHJvYmxlbSwgYWRkIC1XbCwtYmJpZ3RvYyB0byBMREZMQUdTLgorCisgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPScnCisgICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9JzonCisgICAgICBfTFRfQUNfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwljYXNlICRob3N0X29zIGluIGFpeDQuW1swMTJdXXxhaXg0LltbMDEyXV0uKikKKwkjIFdlIG9ubHkgd2FudCB0byBkbyB0aGlzIG9uIEFJWCA0LjIgYW5kIGxvd2VyLCB0aGUgY2hlY2sKKwkjIGJlbG93IGZvciBicm9rZW4gY29sbGVjdDIgZG9lc24ndCB3b3JrIHVuZGVyIDQuMysKKwkgIGNvbGxlY3QybmFtZT1gJHtDQ30gLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKKwkgIGlmIHRlc3QgLWYgIiRjb2xsZWN0Mm5hbWUiICYmIFwKKyAgCSAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgZ3JlcCByZXNvbHZlX2xpYl9uYW1lID4vZGV2L251bGwKKwkgIHRoZW4KKyAgCSAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCisgIAkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisJICBlbHNlCisgIAkgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKKyAgCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT11bnN1cHBvcnRlZAorICAJICAjIEl0IGZhaWxzIHRvIGZpbmQgdW5pbnN0YWxsZWQgbGlicmFyaWVzIHdoZW4gdGhlIHVuaW5zdGFsbGVkCisgIAkgICMgcGF0aCBpcyBub3QgbGlzdGVkIGluIHRoZSBsaWJwYXRoLiAgU2V0dGluZyBoYXJkY29kZV9taW51c19MCisgIAkgICMgdG8gdW5zdXBwb3J0ZWQgZm9yY2VzIHJlbGlua2luZworICAJICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9CisJICBmaQorCSAgOzsKKwllc2FjCisJc2hhcmVkX2ZsYWc9Jy1zaGFyZWQnCisJaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisJICBzaGFyZWRfZmxhZz0iJHNoYXJlZF9mbGFnICInJHt3bH0tRycKKwlmaQorICAgICAgZWxzZQorCSMgbm90IHVzaW5nIGdjYworCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisgIAkjIFZpc3VhbEFnZSBDKyssIFZlcnNpb24gNS41IGZvciBBSVggNUwgZm9yIElBLTY0LCBCZXRhIDMgUmVsZWFzZQorICAJIyBjaG9rZXMgb24gLVdsLC1HLiBUaGUgZm9sbG93aW5nIGxpbmUgaXMgY29ycmVjdDoKKwkgIHNoYXJlZF9mbGFnPSctRycKKwllbHNlCisJICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKwkgICAgc2hhcmVkX2ZsYWc9JyR7d2x9LUcnCisJICBlbHNlCisJICAgIHNoYXJlZF9mbGFnPScke3dsfS1iTTpTUkUnCisJICBmaQorCWZpCisgICAgICBmaQorCisgICAgICAjIEl0IHNlZW1zIHRoYXQgLWJleHBhbGwgZG9lcyBub3QgZXhwb3J0IHN5bWJvbHMgYmVnaW5uaW5nIHdpdGgKKyAgICAgICMgdW5kZXJzY29yZSAoXyksIHNvIGl0IGlzIGJldHRlciB0byBnZW5lcmF0ZSBhIGxpc3Qgb2Ygc3ltYm9scyB0byBleHBvcnQuCisgICAgICBfTFRfQUNfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPXllcworICAgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisJIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVudGltZSBsb2FkaW5nIGZsYWdzICgtYnJ0bCksCisJIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgorCV9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nLWJlcm9rJworICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbiBlbXB0eSBleGVjdXRhYmxlLgorICAgICAgIF9MVF9BQ19TWVNfTElCUEFUSF9BSVgKKyAgICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKwlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iXCRDQyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZWNobyAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKKyAgICAgICBlbHNlCisJaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1SICRsaWJkaXI6L3Vzci9saWI6L2xpYicKKwkgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0iLXogbm9kZWZzIgorCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzICR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30gJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMiCisJZWxzZQorCSAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4gZW1wdHkgZXhlY3V0YWJsZS4KKwkgX0xUX0FDX1NZU19MSUJQQVRIX0FJWAorCSBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKwkgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCisJICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCisJICBfTFRfQUNfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1iZXJub3RvaycKKwkgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWJlcm9rJworCSAgIyBFeHBvcnRlZCBzeW1ib2xzIGNhbiBiZSBwdWxsZWQgaW50byBzaGFyZWQgb2JqZWN0cyBmcm9tIGFyY2hpdmVzCisJICBfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyRjb252ZW5pZW5jZScKKwkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT15ZXMKKwkgICMgVGhpcyBpcyBzaW1pbGFyIHRvIGhvdyBBSVggdHJhZGl0aW9uYWxseSBidWlsZHMgaXRzIHNoYXJlZCBsaWJyYXJpZXMuCisJICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICR7d2x9LWJub2VudHJ5ICRjb21waWxlcl9mbGFncyAke3dsfS1iRTokZXhwb3J0X3N5bWJvbHMke2FsbG93X3VuZGVmaW5lZF9mbGFnfX4kQVIgJEFSX0ZMQUdTICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lJHJlbGVhc2UuYSAkb3V0cHV0X29iamRpci8kc29uYW1lJworCWZpCisgICAgICBmaQorICAgICAgOzsKKworICAgIGFtaWdhb3MqKQorICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJHJtICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgTkFNRSAkbGlibmFtZSIgPiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIExJQlJBUllfSUQgMSIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBWRVJTSU9OICRtYWpvciIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBSRVZJU0lPTiAkcmV2aXNpb24iID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEFSICRBUl9GTEFHUyAkbGliICRsaWJvYmpzfiRSQU5MSUIgJGxpYn4oY2QgJG91dHB1dF9vYmpkaXIgJiYgYTJpeGxpYnJhcnkgLTMyKScKKyAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgZGlmZmVyZW50IHNlbWFudGljcyBvbiB0aGUgR05VIGxkIHNlY3Rpb24KKyAgICAgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICBic2RpW1s0NV1dKikKKyAgICAgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9LXJkeW5hbWljCisgICAgICA7OworCisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQorICAgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKKyAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisgICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyAnCisgICAgICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKyAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisgICAgICBsaWJleHQ9bGliCisgICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKyAgICAgIHNocmV4dF9jbWRzPSIuZGxsIgorICAgICAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBlY2hvICIkZGVwbGlicyIgfCAkU0VEIC1lICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCisgICAgICAjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgorICAgICAgX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9Gcm9tX25ld19jbWRzLCAkMSk9J3RydWUnCisgICAgICAjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgorICAgICAgX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9J2xpYiAvT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKyAgICAgIF9MVF9BQ19UQUdWQVIoZml4X3NyY2ZpbGVfcGF0aCwgJDEpPSdgY3lncGF0aCAtdyAiJHNyY2ZpbGUiYCcKKyAgICAgIF9MVF9BQ19UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcworICAgICAgOzsKKworICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICBjYXNlICRob3N0X29zIGluCisgICAgICAgIHJoYXBzb2R5KiB8IGRhcndpbjEuW1swMTJdXSkKKyAgICAgICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnCisgICAgICAgICA7OworICAgICAgICopICMgRGFyd2luIDEuMyBvbgorICAgICAgICAgaWYgdGVzdCAteiAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVH0gOyB0aGVuCisgICAgICAgICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnCisgICAgICAgICBlbHNlCisgICAgICAgICAgIGNhc2UgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVR9IGluCisgICAgICAgICAgICAgMTAuW1swMTJdXSkKKyAgICAgICAgICAgICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnCisgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgIDEwLiopCisgICAgICAgICAgICAgICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJworICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgZXNhYworICAgICAgICAgZmkKKyAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKyAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KKyAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSk9eWVzCisgICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT11bnN1cHBvcnRlZAorICAgICAgX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScnCisgICAgICBfTFRfQUNfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyA7IHRoZW4KKyAgICAJb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCisgICAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtZHluYW1pY2xpYiAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSAkcnBhdGgvJHNvbmFtZSAkdmVyc3RyaW5nJworICAgICAgX0xUX0FDX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPSckQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFncycKKyAgICAgICMgRG9uJ3QgZml4IHRoaXMgYnkgdXNpbmcgdGhlIGxkIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgZmxhZywgaXQgZG9lc24ndCBleGlzdCBpbiBvbGRlciBkYXJ3aW4gbGRzCisgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgLWR5bmFtaWNsaWIgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgJHJwYXRoLyRzb25hbWUgJHZlcnN0cmluZ35ubWVkaXQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCisgICAgICBfTFRfQUNfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpPSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFnc35ubWVkaXQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCisgICAgZWxzZQorICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgeGxjKikKKyAgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdlY2hvJworICAgICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1xbWtzaHJvYmogJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWluc3RhbGxfbmFtZSAke3dsfWBlY2hvICRycGF0aC8kc29uYW1lYCAkdmVyc3RyaW5nJworICAgICAgICAgX0xUX0FDX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPSckQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFncycKKyAgICAgICAgICAjIERvbid0IGZpeCB0aGlzIGJ5IHVzaW5nIHRoZSBsZCAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGZsYWcsIGl0IGRvZXNuJ3QgZXhpc3QgaW4gb2xkZXIgZGFyd2luIGxkcworICAgICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDIC1xbWtzaHJvYmogJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWluc3RhbGxfbmFtZSAke3dsfSRycGF0aC8kc29uYW1lICR2ZXJzdHJpbmd+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JworICAgICAgICAgIF9MVF9BQ19UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSk9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDICRhbGxvd191bmRlZmluZWRfZmxhZyAgLW8gJGxpYiAtYnVuZGxlICRsaWJvYmpzICRkZXBsaWJzJGNvbXBpbGVyX2ZsYWdzfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKKyAgICAgICAgICA7OworICAgICAgICopCisgICAgICAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICAgICAgOzsKKworICAgIGRndXgqKQorICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgZnJlZWJzZDEqKQorICAgICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgOzsKKworICAgICMgRnJlZUJTRCAyLjIuWzAxMl0gYWxsb3dzIHVzIHRvIGluY2x1ZGUgYysrcnQwLm8gdG8gZ2V0IEMrKyBjb25zdHJ1Y3RvcgorICAgICMgc3VwcG9ydC4gIEZ1dHVyZSB2ZXJzaW9ucyBkbyB0aGlzIGF1dG9tYXRpY2FsbHksIGJ1dCBhbiBleHBsaWNpdCBjKytydDAubworICAgICMgZG9lcyBub3QgYnJlYWsgYW55dGhpbmcsIGFuZCBoZWxwcyBzaWduaWZpY2FudGx5IChhdCB0aGUgY29zdCBvZiBhIGxpdHRsZQorICAgICMgZXh0cmEgc3BhY2UpLgorICAgIGZyZWVic2QyLjIqKQorICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAvdXNyL2xpYi9jKytydDAubycKKyAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisgICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICAjIFVuZm9ydHVuYXRlbHksIG9sZGVyIHZlcnNpb25zIG9mIEZyZWVCU0QgMiBkbyBub3QgaGF2ZSB0aGlzIGZlYXR1cmUuCisgICAgZnJlZWJzZDIqKQorICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgIyBGcmVlQlNEIDMgYW5kIGdyZWF0ZXIgdXNlcyBnY2MgLXNoYXJlZCB0byBkbyBzaGFyZWQgbGlicmFyaWVzLgorICAgIGZyZWVic2QqIHwga2ZyZWVic2QqLWdudSB8IGRyYWdvbmZseSopCisgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisgICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICBocHV4OSopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRybSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICBlbHNlCisJX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJHJtICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JExEIC1iICtiICRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICBmaQorICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKworICAgICAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKKyAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworICAgICAgOzsKKworICAgIGhwdXgxMCopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAtYSAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGVsc2UKKwlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfStiICR7d2x9JGxpYmRpcicKKwlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisKKwlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworCV9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisKKwkjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorCSMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBocHV4MTEqKQorICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgLWEgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCWNhc2UgJGhvc3RfY3B1IGluCisJaHBwYSo2NCopCisJICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJaWE2NCopCisJICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJKikKKwkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCWVzYWMKKyAgICAgIGVsc2UKKwljYXNlICRob3N0X2NwdSBpbgorCWhwcGEqNjQqKQorCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwlpYTY0KikKKwkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJKikKKwkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKworCWNhc2UgJGhvc3RfY3B1IGluCisJaHBwYSo2NCp8aWE2NCopCisJICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQsICQxKT0nK2IgJGxpYmRpcicKKwkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KKwkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJICA7OworCSopCisJICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworCSAgX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKworCSAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKKwkgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisJICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICA7OworCisgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworICAgICAgZWxzZQorCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkLCAkMSk9Jy1ycGF0aCAkbGliZGlyJworICAgICAgZmkKKyAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisgICAgICBfTFRfQUNfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgICAgIDs7CisKKyAgICBuZXRic2QqKQorICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnICAjIGEub3V0CisgICAgICBlbHNlCisJX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJyAgICAgICMgRUxGCisgICAgICBmaQorICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKyAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgIG5ld3NvczYpCisgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKyAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgb3BlbmJzZCopCisgICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzJworCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJworCV9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisgICAgICBlbHNlCisgICAgICAgY2FzZSAkaG9zdF9vcyBpbgorCSBvcGVuYnNkW1swMV1dLiogfCBvcGVuYnNkMi5bWzAtN11dIHwgb3BlbmJzZDIuW1swLTddXS4qKQorCSAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKwkgICA7OworCSAqKQorCSAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwkgICA7OworICAgICAgIGVzYWMKKyAgICAgIGZpCisgICAgICA7OworCisgICAgb3MyKikKKyAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJGVjaG8gIkxJQlJBUlkgJGxpYm5hbWUgSU5JVElOU1RBTkNFIiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kZWNobyAiREVTQ1JJUFRJT04gXCIkbGlibmFtZVwiIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JGVjaG8gREFUQSA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JGVjaG8gIiBTSU5HTEUgTk9OU0hBUkVEIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JGVjaG8gRVhQT1JUUyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+ZW14ZXhwICRsaWJvYmpzID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kQ0MgLVpkbGwgLVpjcnRkbGwgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJworICAgICAgX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9Gcm9tX25ld19jbWRzLCAkMSk9J2VteGltcCAtbyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5hICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKKyAgICAgIDs7CisKKyAgICBvc2YzKikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKwlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCisJX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworICAgICAgZmkKKyAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisgICAgICA7OworCisgICAgb3NmNCogfCBvc2Y1KikJIyBhcyBvc2YzKiB3aXRoIHRoZSBhZGRpdGlvbiBvZiAtbXN5bSBmbGFnCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCV9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCisJX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgZWxzZQorCV9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKKwlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2ZvciBpIGluIGBjYXQgJGV4cG9ydF9zeW1ib2xzYDsgZG8gcHJpbnRmICIlcyAlc1xcbiIgLWV4cG9ydGVkX3N5bWJvbCAiXCRpIiA+PiAkbGliLmV4cDsgZG9uZTsgZWNobyAiLWhpZGRlbiI+PiAkbGliLmV4cH4KKwkkTEQgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1pbnB1dCAkbGliLmV4cCAkbGlua2VyX2ZsYWdzICRsaWJvYmpzICRkZXBsaWJzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGlifiRybSAkbGliLmV4cCcKKworCSMgQm90aCBjIGFuZCBjeHggY29tcGlsZXIgc3VwcG9ydCAtcnBhdGggZGlyZWN0bHkKKwlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLXJwYXRoICRsaWJkaXInCisgICAgICBmaQorICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorICAgICAgOzsKKworICAgIHNvbGFyaXMqKQorICAgICAgX0xUX0FDX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgLXogdGV4dCcKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJd2xhcmM9JyR7d2x9JworCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH4kZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkgICRDQyAtc2hhcmVkICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kcm0gJGxpYi5leHAnCisgICAgICBlbHNlCisJd2xhcmM9JycKKwlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJGVjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+JGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisgIAkkTEQgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtTSAkbGliLmV4cCAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc34kcm0gJGxpYi5leHAnCisgICAgICBmaQorICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKyAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICBjYXNlICRob3N0X29zIGluCisgICAgICBzb2xhcmlzMi5bWzAtNV1dIHwgc29sYXJpczIuW1swLTVdXS4qKSA7OworICAgICAgKikKKyAJIyBUaGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgY29tYmluZSBsaW5rZXIgb3B0aW9ucyBzbyB3ZQorIAkjIGNhbm5vdCBqdXN0IHBhc3MgdGhlIGNvbnZpZW5jZSBsaWJyYXJ5IG5hbWVzIHRocm91Z2gKKyAJIyB3aXRob3V0ICR3bCwgaWZmIHdlIGRvIG5vdCBsaW5rIHdpdGggJExELgorIAkjIEx1Y2tpbHksIGdjYyBzdXBwb3J0cyB0aGUgc2FtZSBzeW50YXggd2UgbmVlZCBmb3IgU3VuIFN0dWRpby4KKyAJIyBTdXBwb3J0ZWQgc2luY2UgU29sYXJpcyAyLjYgKG1heWJlIDIuNS4xPykKKyAJY2FzZSAkd2xhcmMgaW4KKyAJJycpCisgCSAgX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScteiBhbGxleHRyYWN0JGNvbnZlbmllbmNlIC16IGRlZmF1bHRleHRyYWN0JyA7OworIAkqKQorIAkgIF9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0teiAke3dsfWFsbGV4dHJhY3RgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkZWNobyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0teiAke3dsfWRlZmF1bHRleHRyYWN0JyA7OworIAllc2FjIDs7CisgICAgICBlc2FjCisgICAgICBfTFRfQUNfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgICAgIDs7CisKKyAgICBzdW5vczQqKQorICAgICAgaWYgdGVzdCAieCRob3N0X3ZlbmRvciIgPSB4c2VxdWVudDsgdGhlbgorCSMgVXNlICRDQyB0byBsaW5rIHVuZGVyIHNlcXVlbnQsIGJlY2F1c2UgaXQgdGhyb3dzIGluIHNvbWUgZXh0cmEgLm8KKwkjIGZpbGVzIHRoYXQgbWFrZSAuaW5pdCBhbmQgLmZpbmkgc2VjdGlvbnMgd29yay4KKwlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHt3bH0taCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtYXNzZXJ0IHB1cmUtdGV4dCAtQnN0YXRpYyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBmaQorICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgc3lzdjQpCisgICAgICBjYXNlICRob3N0X3ZlbmRvciBpbgorCXNuaSkKKwkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzICMgaXMgdGhpcyByZWFsbHkgdHJ1ZT8/PworCTs7CisJc2llbWVucykKKwkgICMjIExEIGlzIGxkIGl0IG1ha2VzIGEgUExBTUxJQgorCSAgIyMgQ0MganVzdCBtYWtlcyBhIEdyb3NzTW9kdWxlLgorCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgIF9MVF9BQ19UQUdWQVIocmVsb2FkX2NtZHMsICQxKT0nJENDIC1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisJICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCisgICAgICAgIDs7CisJbW90b3JvbGEpCisJICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vICNNb3Rvcm9sYSBtYW51YWwgc2F5cyB5ZXMsIGJ1dCBteSB0ZXN0cyBzYXkgdGhleSBsaWUKKwk7OworICAgICAgZXNhYworICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICBzeXN2NC4zKikKKyAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSctQmV4cG9ydCcKKyAgICAgIDs7CisKKyAgICBzeXN2NCpNUCopCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisJX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKwloYXJkY29kZV9ydW5wYXRoX3Zhcj15ZXMKKwlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzeXN2NCp1dzIqIHwgc3lzdjVPcGVuVU5JWCogfCBzeXN2NVVuaXhXYXJlNy5bWzAxXV0uW1sxMF1dKiB8IHVuaXh3YXJlNyopCisgICAgICBfTFRfQUNfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosdGV4dCcKKyAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKKworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGVsc2UKKwlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqKQorICAgICAgIyBOb3RlOiBXZSBjYW4gTk9UIHVzZSAteiBkZWZzIGFzIHdlIG1pZ2h0IGRlc2lyZSwgYmVjYXVzZSB3ZSBkbyBub3QKKyAgICAgICMgbGluayB3aXRoIC1sYywgYW5kIHRoYXQgd291bGQgY2F1c2UgYW55IHN5bWJvbHMgdXNlZCBmcm9tIGxpYmMgdG8KKyAgICAgICMgYWx3YXlzIGJlIHVucmVzb2x2ZWQsIHdoaWNoIG1lYW5zIGp1c3QgYWJvdXQgbm8gbGlicmFyeSB3b3VsZAorICAgICAgIyBldmVyIGxpbmsgY29ycmVjdGx5LiAgSWYgd2UncmUgbm90IHVzaW5nIEdOVSBsZCB3ZSB1c2UgLXogdGV4dAorICAgICAgIyB0aG91Z2gsIHdoaWNoIGRvZXMgY2F0Y2ggc29tZSBiYWQgc3ltYm9scyBidXQgaXNuJ3QgYXMgaGVhdnktaGFuZGVkCisgICAgICAjIGFzIC16IGRlZnMuCisgICAgICBfTFRfQUNfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosdGV4dCcKKyAgICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0teixub2RlZnMnCisgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKyAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nYHRlc3QgLXogIiRTQ09BQlNQQVRIIiAmJiBlY2hvICR7d2x9LVIsJGxpYmRpcmAnCisgICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0nOicKKyAgICAgIF9MVF9BQ19UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworICAgICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tQmV4cG9ydCcKKyAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKKworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgdXRzNCopCisgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICAqKQorICAgICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgOzsKKyAgICBlc2FjCisgIGZpCitdKQorQUNfTVNHX1JFU1VMVChbJF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSldKQordGVzdCAiJF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSkiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubworCisjCisjIERvIHdlIG5lZWQgdG8gZXhwbGljaXRseSBsaW5rIGxpYmM/CisjCitjYXNlICJ4JF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKSIgaW4KK3h8eHllcykKKyAgIyBBc3N1bWUgLWxjIHNob3VsZCBiZSBhZGRlZAorICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9eWVzCisKKyAgaWYgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgY2FzZSAkX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKSBpbgorICAgIConficqKQorICAgICAgIyBGSVhNRTogd2UgbWF5IGhhdmUgdG8gZGVhbCB3aXRoIG11bHRpLWNvbW1hbmQgc2VxdWVuY2VzLgorICAgICAgOzsKKyAgICAnJENDICcqKQorICAgICAgIyBUZXN0IHdoZXRoZXIgdGhlIGNvbXBpbGVyIGltcGxpY2l0bHkgbGlua3Mgd2l0aCAtbGMgc2luY2Ugb24gc29tZQorICAgICAgIyBzeXN0ZW1zLCAtbGdjYyBoYXMgdG8gY29tZSBiZWZvcmUgLWxjLiBJZiBnY2MgYWxyZWFkeSBwYXNzZXMgLWxjCisgICAgICAjIHRvIGxkLCBkb24ndCBhZGQgLWxjIGJlZm9yZSAtbGdjYy4KKyAgICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluXSkKKyAgICAgICRybSBjb25mdGVzdCoKKyAgICAgIHByaW50ZiAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisKKyAgICAgIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXJyOyB0aGVuCisgICAgICAgIHNvbmFtZT1jb25mdGVzdAorICAgICAgICBsaWI9Y29uZnRlc3QKKyAgICAgICAgbGlib2Jqcz1jb25mdGVzdC4kYWNfb2JqZXh0CisgICAgICAgIGRlcGxpYnM9CisgICAgICAgIHdsPSRfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKQorCXBpY19mbGFnPSRfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkKKyAgICAgICAgY29tcGlsZXJfZmxhZ3M9LXYKKyAgICAgICAgbGlua2VyX2ZsYWdzPS12CisgICAgICAgIHZlcnN0cmluZz0KKyAgICAgICAgb3V0cHV0X29iamRpcj0uCisgICAgICAgIGxpYm5hbWU9Y29uZnRlc3QKKyAgICAgICAgbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZz0kX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpCisgICAgICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0KKyAgICAgICAgaWYgQUNfVFJZX0VWQUwoX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKSAyXD5cJjEgXHwgZ3JlcCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxKQorICAgICAgICB0aGVuCisJICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKyAgICAgICAgZWxzZQorCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPXllcworICAgICAgICBmaQorICAgICAgICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWcKKyAgICAgIGVsc2UKKyAgICAgICAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1CisgICAgICBmaQorICAgICAgJHJtIGNvbmZ0ZXN0KgorICAgICAgQUNfTVNHX1JFU1VMVChbJF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKV0pCisgICAgICA7OworICAgIGVzYWMKKyAgZmkKKyAgOzsKK2VzYWMKK10pIyBBQ19MSUJUT09MX1BST0dfTERfU0hMSUJTCisKKworIyBfTFRfQUNfRklMRV9MVERMTF9DCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQmUgY2FyZWZ1bCB0aGF0IHRoZSBzdGFydCBtYXJrZXIgYWx3YXlzIGZvbGxvd3MgYSBuZXdsaW5lLgorQUNfREVGVU4oW19MVF9BQ19GSUxFX0xURExMX0NdLCBbCisjIC8qIGx0ZGxsLmMgc3RhcnRzIGhlcmUgKi8KKyMgI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjICNpbmNsdWRlIDx3aW5kb3dzLmg+CisjICN1bmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCisjICNpbmNsdWRlIDxzdGRpby5oPgorIworIyAjaWZuZGVmIF9fQ1lHV0lOX18KKyMgIyAgaWZkZWYgX19DWUdXSU4zMl9fCisjICMgICAgZGVmaW5lIF9fQ1lHV0lOX18gX19DWUdXSU4zMl9fCisjICMgIGVuZGlmCisjICNlbmRpZgorIworIyAjaWZkZWYgX19jcGx1c3BsdXMKKyMgZXh0ZXJuICJDIiB7CisjICNlbmRpZgorIyBCT09MIEFQSUVOVFJZIERsbE1haW4gKEhJTlNUQU5DRSBoSW5zdCwgRFdPUkQgcmVhc29uLCBMUFZPSUQgcmVzZXJ2ZWQpOworIyAjaWZkZWYgX19jcGx1c3BsdXMKKyMgfQorIyAjZW5kaWYKKyMKKyMgI2lmZGVmIF9fQ1lHV0lOX18KKyMgI2luY2x1ZGUgPGN5Z3dpbi9jeWd3aW5fZGxsLmg+CisjIERFQ0xBUkVfQ1lHV0lOX0RMTCggRGxsTWFpbiApOworIyAjZW5kaWYKKyMgSElOU1RBTkNFIF9faERsbEluc3RhbmNlX2Jhc2U7CisjCisjIEJPT0wgQVBJRU5UUlkKKyMgRGxsTWFpbiAoSElOU1RBTkNFIGhJbnN0LCBEV09SRCByZWFzb24sIExQVk9JRCByZXNlcnZlZCkKKyMgeworIyAgIF9faERsbEluc3RhbmNlX2Jhc2UgPSBoSW5zdDsKKyMgICByZXR1cm4gVFJVRTsKKyMgfQorIyAvKiBsdGRsbC5jIGVuZHMgaGVyZSAqLworXSkjIF9MVF9BQ19GSUxFX0xURExMX0MKKworCisjIF9MVF9BQ19UQUdWQVIoVkFSTkFNRSwgW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtfTFRfQUNfVEFHVkFSXSwgW2lmZWxzZShbJDJdLCBbXSwgWyQxXSwgWyQxXyQyXSldKQorCisKKyMgb2xkIG5hbWVzCitBQ19ERUZVTihbQU1fUFJPR19MSUJUT09MXSwgICBbQUNfUFJPR19MSUJUT09MXSkKK0FDX0RFRlVOKFtBTV9FTkFCTEVfU0hBUkVEXSwgIFtBQ19FTkFCTEVfU0hBUkVEKCRAKV0pCitBQ19ERUZVTihbQU1fRU5BQkxFX1NUQVRJQ10sICBbQUNfRU5BQkxFX1NUQVRJQygkQCldKQorQUNfREVGVU4oW0FNX0RJU0FCTEVfU0hBUkVEXSwgW0FDX0RJU0FCTEVfU0hBUkVEKCRAKV0pCitBQ19ERUZVTihbQU1fRElTQUJMRV9TVEFUSUNdLCBbQUNfRElTQUJMRV9TVEFUSUMoJEApXSkKK0FDX0RFRlVOKFtBTV9QUk9HX0xEXSwgICAgICAgIFtBQ19QUk9HX0xEXSkKK0FDX0RFRlVOKFtBTV9QUk9HX05NXSwgICAgICAgIFtBQ19QUk9HX05NXSkKKworIyBUaGlzIGlzIGp1c3QgdG8gc2lsZW5jZSBhY2xvY2FsIGFib3V0IHRoZSBtYWNybyBub3QgYmVpbmcgdXNlZAoraWZlbHNlKFtBQ19ESVNBQkxFX0ZBU1RfSU5TVEFMTF0pCisKK0FDX0RFRlVOKFtMVF9BQ19QUk9HX0dDSl0sCitbQUNfQ0hFQ0tfVE9PTChHQ0osIGdjaiwgbm8pCisgIHRlc3QgIngke0dDSkZMQUdTK3NldH0iID0geHNldCB8fCBHQ0pGTEFHUz0iLWcgLU8yIgorICBBQ19TVUJTVChHQ0pGTEFHUykKK10pCisKK0FDX0RFRlVOKFtMVF9BQ19QUk9HX1JDXSwKK1tBQ19DSEVDS19UT09MKFJDLCB3aW5kcmVzLCBubykKK10pCisKKyMgTk9URTogVGhpcyBtYWNybyBoYXMgYmVlbiBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbnRvICAgIworIyAgR05VIEF1dG9jb25mIGFzIEFDX1BST0dfU0VELiAgV2hlbiBpdCBpcyBhdmFpbGFibGUgaW4gICAjCisjICBhIHJlbGVhc2VkIHZlcnNpb24gb2YgQXV0b2NvbmYgd2Ugc2hvdWxkIHJlbW92ZSB0aGlzICAgICMKKyMgIG1hY3JvIGFuZCB1c2UgaXQgaW5zdGVhZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBMVF9BQ19QUk9HX1NFRAorIyAtLS0tLS0tLS0tLS0tLQorIyBDaGVjayBmb3IgYSBmdWxseS1mdW5jdGlvbmFsIHNlZCBwcm9ncmFtLCB0aGF0IHRydW5jYXRlcworIyBhcyBmZXcgY2hhcmFjdGVycyBhcyBwb3NzaWJsZS4gIFByZWZlciBHTlUgc2VkIGlmIGZvdW5kLgorQUNfREVGVU4oW0xUX0FDX1BST0dfU0VEXSwKK1tBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBhIHNlZCB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dF0pCitBQ19DQUNIRV9WQUwobHRfY3ZfcGF0aF9TRUQsCitbIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBzZWQgYW5kIGdzZWQuCisjIFRoZW4gdXNlIHRoYXQgbGlzdCBvZiBzZWQncyBhcyBvbmVzIHRvIHRlc3QgZm9yIHRydW5jYXRpb24uCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgIGZvciBsdF9hY19wcm9nIGluIHNlZCBnc2VkOyBkbworICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgICAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kbHRfYWNfcHJvZyRhY19leGVjX2V4dCI7IHRoZW4KKyAgICAgICAgbHRfYWNfc2VkX2xpc3Q9IiRsdF9hY19zZWRfbGlzdCAkYXNfZGlyLyRsdF9hY19wcm9nJGFjX2V4ZWNfZXh0IgorICAgICAgZmkKKyAgICBkb25lCisgIGRvbmUKK2RvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKK2x0X2FjX21heD0wCitsdF9hY19jb3VudD0wCisjIEFkZCAvdXNyL3hwZzQvYmluL3NlZCBhcyBpdCBpcyB0eXBpY2FsbHkgZm91bmQgb24gU29sYXJpcworIyBhbG9uZyB3aXRoIC9iaW4vc2VkIHRoYXQgdHJ1bmNhdGVzIG91dHB1dC4KK2ZvciBsdF9hY19zZWQgaW4gJGx0X2FjX3NlZF9saXN0IC91c3IveHBnNC9iaW4vc2VkOyBkbworICB0ZXN0ICEgLWYgJGx0X2FjX3NlZCAmJiBjb250aW51ZQorICBjYXQgL2Rldi9udWxsID4gY29uZnRlc3QuaW4KKyAgbHRfYWNfY291bnQ9MAorICBlY2hvICRFQ0hPX04gIjAxMjM0NTY3ODkkRUNIT19DIiA+Y29uZnRlc3QuaW4KKyAgIyBDaGVjayBmb3IgR05VIHNlZCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgorICBpZiAiJGx0X2FjX3NlZCIgLS12ZXJzaW9uIDI+JjEgPCAvZGV2L251bGwgfCBncmVwICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCisgICAgbHRfY3ZfcGF0aF9TRUQ9JGx0X2FjX3NlZAorICAgIGJyZWFrCisgIGZpCisgIHdoaWxlIHRydWU7IGRvCisgICAgY2F0IGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LmluID5jb25mdGVzdC50bXAKKyAgICBtdiBjb25mdGVzdC50bXAgY29uZnRlc3QuaW4KKyAgICBjcCBjb25mdGVzdC5pbiBjb25mdGVzdC5ubAorICAgIGVjaG8gPj5jb25mdGVzdC5ubAorICAgICRsdF9hY19zZWQgLWUgJ3MvYSQvLycgPCBjb25mdGVzdC5ubCA+Y29uZnRlc3Qub3V0IHx8IGJyZWFrCisgICAgY21wIC1zIGNvbmZ0ZXN0Lm91dCBjb25mdGVzdC5ubCB8fCBicmVhaworICAgICMgMTAwMDAgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAorICAgIHRlc3QgJGx0X2FjX2NvdW50IC1ndCAxMCAmJiBicmVhaworICAgIGx0X2FjX2NvdW50PWBleHByICRsdF9hY19jb3VudCArIDFgCisgICAgaWYgdGVzdCAkbHRfYWNfY291bnQgLWd0ICRsdF9hY19tYXg7IHRoZW4KKyAgICAgIGx0X2FjX21heD0kbHRfYWNfY291bnQKKyAgICAgIGx0X2N2X3BhdGhfU0VEPSRsdF9hY19zZWQKKyAgICBmaQorICBkb25lCitkb25lCitdKQorU0VEPSRsdF9jdl9wYXRoX1NFRAorQUNfU1VCU1QoW1NFRF0pCitBQ19NU0dfUkVTVUxUKFskU0VEXSkKK10pCisKKyMgcGtnLm00IC0gTWFjcm9zIHRvIGxvY2F0ZSBhbmQgdXRpbGlzZSBwa2ctY29uZmlnLiAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKyMgCisjIENvcHlyaWdodCDCqSAyMDA0IFNjb3R0IEphbWVzIFJlbW5hbnQgPHNjb3R0QG5ldHNwbGl0LmNvbT4uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisjCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKKyMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCisjIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCisjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworIyBQS0dfUFJPR19QS0dfQ09ORklHKFtNSU4tVkVSU0lPTl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtQS0dfUFJPR19QS0dfQ09ORklHXSwKK1ttNF9wYXR0ZXJuX2ZvcmJpZChbXl8/UEtHX1tBLVpfXSskXSkKK200X3BhdHRlcm5fYWxsb3coW15QS0dfQ09ORklHKF9QQVRIKT8kXSkKK0FDX0FSR19WQVIoW1BLR19DT05GSUddLCBbcGF0aCB0byBwa2ctY29uZmlnIHV0aWxpdHldKWRubAoraWYgdGVzdCAieCRhY19jdl9lbnZfUEtHX0NPTkZJR19zZXQiICE9ICJ4c2V0IjsgdGhlbgorCUFDX1BBVEhfVE9PTChbUEtHX0NPTkZJR10sIFtwa2ctY29uZmlnXSkKK2ZpCitpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KKwlfcGtnX21pbl92ZXJzaW9uPW00X2RlZmF1bHQoWyQxXSwgWzAuOS4wXSkKKwlBQ19NU0dfQ0hFQ0tJTkcoW3BrZy1jb25maWcgaXMgYXQgbGVhc3QgdmVyc2lvbiAkX3BrZ19taW5fdmVyc2lvbl0pCisJaWYgJFBLR19DT05GSUcgLS1hdGxlYXN0LXBrZ2NvbmZpZy12ZXJzaW9uICRfcGtnX21pbl92ZXJzaW9uOyB0aGVuCisJCUFDX01TR19SRVNVTFQoW3llc10pCisJZWxzZQorCQlBQ19NU0dfUkVTVUxUKFtub10pCisJCVBLR19DT05GSUc9IiIKKwlmaQorCQkKK2ZpW11kbmwKK10pIyBQS0dfUFJPR19QS0dfQ09ORklHCisKKyMgUEtHX0NIRUNLX0VYSVNUUyhNT0RVTEVTLCBbQUNUSU9OLUlGLUZPVU5EXSwgW0FDVElPTi1JRi1OT1QtRk9VTkRdKQorIworIyBDaGVjayB0byBzZWUgd2hldGhlciBhIHBhcnRpY3VsYXIgc2V0IG9mIG1vZHVsZXMgZXhpc3RzLiAgU2ltaWxhcgorIyB0byBQS0dfQ0hFQ0tfTU9EVUxFUygpLCBidXQgZG9lcyBub3Qgc2V0IHZhcmlhYmxlcyBvciBwcmludCBlcnJvcnMuCisjCisjCisjIFNpbWlsYXIgdG8gUEtHX0NIRUNLX01PRFVMRVMsIG1ha2Ugc3VyZSB0aGF0IHRoZSBmaXJzdCBpbnN0YW5jZSBvZgorIyB0aGlzIG9yIFBLR19DSEVDS19NT0RVTEVTIGlzIGNhbGxlZCwgb3IgbWFrZSBzdXJlIHRvIGNhbGwKKyMgUEtHX0NIRUNLX0VYSVNUUyBtYW51YWxseQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW1BLR19DSEVDS19FWElTVFNdLAorW0FDX1JFUVVJUkUoW1BLR19QUk9HX1BLR19DT05GSUddKWRubAoraWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKKyAgICBBQ19SVU5fTE9HKFskUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAiJDEiXSk7IHRoZW4KKyAgbTRfaWZ2YWwoWyQyXSwgWyQyXSwgWzpdKQorbTRfaWZ2YWxuKFskM10sIFtlbHNlCisgICQzXSlkbmwKK2ZpXSkKKworCisjIF9QS0dfQ09ORklHKFtWQVJJQUJMRV0sIFtDT01NQU5EXSwgW01PRFVMRVNdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbX1BLR19DT05GSUddLAorW2lmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgorICAgIGlmIHRlc3QgLW4gIiQkMSI7IHRoZW4KKyAgICAgICAgcGtnX2N2X1tdJDE9IiQkMSIKKyAgICBlbHNlCisgICAgICAgIFBLR19DSEVDS19FWElTVFMoWyQzXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbcGtnX2N2X1tdJDE9YCRQS0dfQ09ORklHIC0tW10kMiAiJDMiIDI+L2Rldi9udWxsYF0sCisJCQkgW3BrZ19mYWlsZWQ9eWVzXSkKKyAgICBmaQorZWxzZQorCXBrZ19mYWlsZWQ9dW50cmllZAorZmlbXWRubAorXSkjIF9QS0dfQ09ORklHCisKKyMgX1BLR19TSE9SVF9FUlJPUlNfU1VQUE9SVEVECisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbX1BLR19TSE9SVF9FUlJPUlNfU1VQUE9SVEVEXSwKK1tBQ19SRVFVSVJFKFtQS0dfUFJPR19QS0dfQ09ORklHXSkKK2lmICRQS0dfQ09ORklHIC0tYXRsZWFzdC1wa2djb25maWctdmVyc2lvbiAwLjIwOyB0aGVuCisgICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD15ZXMKK2Vsc2UKKyAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPW5vCitmaVtdZG5sCitdKSMgX1BLR19TSE9SVF9FUlJPUlNfU1VQUE9SVEVECisKKworIyBQS0dfQ0hFQ0tfTU9EVUxFUyhWQVJJQUJMRS1QUkVGSVgsIE1PRFVMRVMsIFtBQ1RJT04tSUYtRk9VTkRdLAorIyBbQUNUSU9OLUlGLU5PVC1GT1VORF0pCisjCisjCisjIE5vdGUgdGhhdCBpZiB0aGVyZSBpcyBhIHBvc3NpYmlsaXR5IHRoZSBmaXJzdCBjYWxsIHRvCisjIFBLR19DSEVDS19NT0RVTEVTIG1pZ2h0IG5vdCBoYXBwZW4sIHlvdSBzaG91bGQgYmUgc3VyZSB0byBpbmNsdWRlIGFuCisjIGV4cGxpY2l0IGNhbGwgdG8gUEtHX1BST0dfUEtHX0NPTkZJRyBpbiB5b3VyIGNvbmZpZ3VyZS5hYworIworIworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW1BLR19DSEVDS19NT0RVTEVTXSwKK1tBQ19SRVFVSVJFKFtQS0dfUFJPR19QS0dfQ09ORklHXSlkbmwKK0FDX0FSR19WQVIoWyQxXVtfQ0ZMQUdTXSwgW0MgY29tcGlsZXIgZmxhZ3MgZm9yICQxLCBvdmVycmlkaW5nIHBrZy1jb25maWddKWRubAorQUNfQVJHX1ZBUihbJDFdW19MSUJTXSwgW2xpbmtlciBmbGFncyBmb3IgJDEsIG92ZXJyaWRpbmcgcGtnLWNvbmZpZ10pZG5sCisKK3BrZ19mYWlsZWQ9bm8KK0FDX01TR19DSEVDS0lORyhbZm9yICQxXSkKKworX1BLR19DT05GSUcoWyQxXVtfQ0ZMQUdTXSwgW2NmbGFnc10sIFskMl0pCitfUEtHX0NPTkZJRyhbJDFdW19MSUJTXSwgW2xpYnNdLCBbJDJdKQorCittNF9kZWZpbmUoW19QS0dfVEVYVF0sIFtBbHRlcm5hdGl2ZWx5LCB5b3UgbWF5IHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzICQxW11fQ0ZMQUdTCithbmQgJDFbXV9MSUJTIHRvIGF2b2lkIHRoZSBuZWVkIHRvIGNhbGwgcGtnLWNvbmZpZy4KK1NlZSB0aGUgcGtnLWNvbmZpZyBtYW4gcGFnZSBmb3IgbW9yZSBkZXRhaWxzLl0pCisKK2lmIHRlc3QgJHBrZ19mYWlsZWQgPSB5ZXM7IHRoZW4KKyAgICAgICAgX1BLR19TSE9SVF9FUlJPUlNfU1VQUE9SVEVECisgICAgICAgIGlmIHRlc3QgJF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZCA9IHllczsgdGhlbgorCSAgICAgICAgJDFbXV9QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLXNob3J0LWVycm9ycyAtLWVycm9ycy10by1zdGRvdXQgLS1wcmludC1lcnJvcnMgIiQyImAKKyAgICAgICAgZWxzZSAKKwkgICAgICAgICQxW11fUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1lcnJvcnMtdG8tc3Rkb3V0IC0tcHJpbnQtZXJyb3JzICIkMiJgCisgICAgICAgIGZpCisJIyBQdXQgdGhlIG5hc3R5IGVycm9yIG1lc3NhZ2UgaW4gY29uZmlnLmxvZyB3aGVyZSBpdCBiZWxvbmdzCisJZWNobyAiJCQxW11fUEtHX0VSUk9SUyIgPiZBU19NRVNTQUdFX0xPR19GRAorCisJaWZlbHNlKFskNF0sICwgW0FDX01TR19FUlJPUihkbmwKK1tQYWNrYWdlIHJlcXVpcmVtZW50cyAoJDIpIHdlcmUgbm90IG1ldDoKKworJCQxX1BLR19FUlJPUlMKKworQ29uc2lkZXIgYWRqdXN0aW5nIHRoZSBQS0dfQ09ORklHX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUgaWYgeW91CitpbnN0YWxsZWQgc29mdHdhcmUgaW4gYSBub24tc3RhbmRhcmQgcHJlZml4LgorCitfUEtHX1RFWFQKK10pXSwKKwkJW0FDX01TR19SRVNVTFQoW25vXSkKKyAgICAgICAgICAgICAgICAkNF0pCitlbGlmIHRlc3QgJHBrZ19mYWlsZWQgPSB1bnRyaWVkOyB0aGVuCisJaWZlbHNlKFskNF0sICwgW0FDX01TR19GQUlMVVJFKGRubAorW1RoZSBwa2ctY29uZmlnIHNjcmlwdCBjb3VsZCBub3QgYmUgZm91bmQgb3IgaXMgdG9vIG9sZC4gIE1ha2Ugc3VyZSBpdAoraXMgaW4geW91ciBQQVRIIG9yIHNldCB0aGUgUEtHX0NPTkZJRyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUgZnVsbAorcGF0aCB0byBwa2ctY29uZmlnLgorCitfUEtHX1RFWFQKKworVG8gZ2V0IHBrZy1jb25maWcsIHNlZSA8aHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvc29mdHdhcmUvcGtnY29uZmlnPi5dKV0sCisJCVskNF0pCitlbHNlCisJJDFbXV9DRkxBR1M9JHBrZ19jdl9bXSQxW11fQ0ZMQUdTCisJJDFbXV9MSUJTPSRwa2dfY3ZfW10kMVtdX0xJQlMKKyAgICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKwlpZmVsc2UoWyQzXSwgLCA6LCBbJDNdKQorZmlbXWRubAorXSkjIFBLR19DSEVDS19NT0RVTEVTCisKKyMgdWxvbmdsb25nLm00IHNlcmlhbCA2CitkbmwgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworZG5sIEZyb20gUGF1bCBFZ2dlcnQuCisKKyMgRGVmaW5lIEhBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVCBpZiAndW5zaWduZWQgbG9uZyBsb25nIGludCcgd29ya3MuCisjIFRoaXMgZml4ZXMgYSBidWcgaW4gQXV0b2NvbmYgMi42MCwgYnV0IGNhbiBiZSByZW1vdmVkIG9uY2Ugd2UKKyMgYXNzdW1lIDIuNjEgZXZlcnl3aGVyZS4KKworIyBOb3RlOiBJZiB0aGUgdHlwZSAndW5zaWduZWQgbG9uZyBsb25nIGludCcgZXhpc3RzIGJ1dCBpcyBvbmx5IDMyIGJpdHMKKyMgbGFyZ2UgKGFzIG9uIHNvbWUgdmVyeSBvbGQgY29tcGlsZXJzKSwgQUNfVFlQRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UCisjIHdpbGwgbm90IGJlIGRlZmluZWQuIEluIHRoaXMgY2FzZSB5b3UgY2FuIHRyZWF0ICd1bnNpZ25lZCBsb25nIGxvbmcgaW50JworIyBsaWtlICd1bnNpZ25lZCBsb25nIGludCcuCisKK0FDX0RFRlVOKFtBQ19UWVBFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlRdLAorWworICBBQ19DQUNIRV9DSEVDSyhbZm9yIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnRdLAorICAgIFthY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZ19pbnRdLAorICAgIFtBQ19MSU5LX0lGRUxTRSgKKyAgICAgICBbQUNfTEFOR19QUk9HUkFNKAorCSAgW1t1bnNpZ25lZCBsb25nIGxvbmcgaW50IHVsbCA9IDE4NDQ2NzQ0MDczNzA5NTUxNjE1VUxMOworCSAgICB0eXBlZGVmIGludCBhWygxODQ0Njc0NDA3MzcwOTU1MTYxNVVMTCA8PSAodW5zaWduZWQgbG9uZyBsb25nIGludCkgLTEKKwkJCSAgID8gMSA6IC0xKV07CisJICAgaW50IGkgPSA2MztdXSwKKwkgIFtbdW5zaWduZWQgbG9uZyBsb25nIGludCB1bGxtYXggPSAxODQ0Njc0NDA3MzcwOTU1MTYxNXVsbDsKKwkgICAgcmV0dXJuICh1bGwgPDwgNjMgfCB1bGwgPj4gNjMgfCB1bGwgPDwgaSB8IHVsbCA+PiBpCisJCSAgICB8IHVsbG1heCAvIHVsbCB8IHVsbG1heCAlIHVsbCk7XV0pXSwKKyAgICAgICBbYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmdfaW50PXllc10sCisgICAgICAgW2FjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nX2ludD1ub10pXSkKKyAgaWYgdGVzdCAkYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmdfaW50ID0geWVzOyB0aGVuCisgICAgQUNfREVGSU5FKFtIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlRdLCAxLAorICAgICAgW0RlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGB1bnNpZ25lZCBsb25nIGxvbmcgaW50Jy5dKQorICBmaQorXSkKKworIyBUaGlzIG1hY3JvIGlzIG9ic29sZXNjZW50IGFuZCBzaG91bGQgZ28gYXdheSBzb29uLgorQUNfREVGVU4oW2dsX0FDX1RZUEVfVU5TSUdORURfTE9OR19MT05HXSwKK1sKKyAgQUNfUkVRVUlSRShbQUNfVFlQRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UXSkKKyAgYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmc9JGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nX2ludAorICBpZiB0ZXN0ICRhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZyA9IHllczsgdGhlbgorICAgIEFDX0RFRklORShIQVZFX1VOU0lHTkVEX0xPTkdfTE9ORywgMSwKKyAgICAgIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlICd1bnNpZ25lZCBsb25nIGxvbmcnIHR5cGUuXSkKKyAgZmkKK10pCisKKyMgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzLCAyMDA1LCAyMDA2ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIEFNX0FVVE9NQUtFX1ZFUlNJT04oVkVSU0lPTikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBdXRvbWFrZSBYLlkgdHJhY2VzIHRoaXMgbWFjcm8gdG8gZW5zdXJlIGFjbG9jYWwubTQgaGFzIGJlZW4KKyMgZ2VuZXJhdGVkIGZyb20gdGhlIG00IGZpbGVzIGFjY29tcGFueWluZyBBdXRvbWFrZSBYLlkuCisjIChUaGlzIHByaXZhdGUgbWFjcm8gc2hvdWxkIG5vdCBiZSBjYWxsZWQgb3V0c2lkZSB0aGlzIGZpbGUuKQorQUNfREVGVU4oW0FNX0FVVE9NQUtFX1ZFUlNJT05dLAorW2FtX19hcGlfdmVyc2lvbj0nMS4xMCcKK2RubCBTb21lIHVzZXJzIGZpbmQgQU1fQVVUT01BS0VfVkVSU0lPTiBhbmQgbWlzdGFrZSBpdCBmb3IgYSB3YXkgdG8KK2RubCByZXF1aXJlIHNvbWUgbWluaW11bSB2ZXJzaW9uLiAgUG9pbnQgdGhlbSB0byB0aGUgcmlnaHQgbWFjcm8uCittNF9pZihbJDFdLCBbMS4xMF0sIFtdLAorICAgICAgW0FDX0ZBVEFMKFtEbyBub3QgY2FsbCAkMCwgdXNlIEFNX0lOSVRfQVVUT01BS0UoWyQxXSkuXSldKWRubAorXSkKKworIyBfQU1fQVVUT0NPTkZfVkVSU0lPTihWRVJTSU9OKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBhY2xvY2FsIHRyYWNlcyB0aGlzIG1hY3JvIHRvIGZpbmQgdGhlIEF1dG9jb25mIHZlcnNpb24uCisjIFRoaXMgaXMgYSBwcml2YXRlIG1hY3JvIHRvby4gIFVzaW5nIG00X2RlZmluZSBzaW1wbGlmaWVzCisjIHRoZSBsb2dpYyBpbiBhY2xvY2FsLCB3aGljaCBjYW4gc2ltcGx5IGlnbm9yZSB0aGlzIGRlZmluaXRpb24uCittNF9kZWZpbmUoW19BTV9BVVRPQ09ORl9WRVJTSU9OXSwgW10pCisKKyMgQU1fU0VUX0NVUlJFTlRfQVVUT01BS0VfVkVSU0lPTgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENhbGwgQU1fQVVUT01BS0VfVkVSU0lPTiBhbmQgQU1fQVVUT01BS0VfVkVSU0lPTiBzbyB0aGV5IGNhbiBiZSB0cmFjZWQuCisjIFRoaXMgZnVuY3Rpb24gaXMgQUNfUkVRVUlSRWQgYnkgQUNfSU5JVF9BVVRPTUFLRS4KK0FDX0RFRlVOKFtBTV9TRVRfQ1VSUkVOVF9BVVRPTUFLRV9WRVJTSU9OXSwKK1tBTV9BVVRPTUFLRV9WRVJTSU9OKFsxLjEwXSlkbmwKK19BTV9BVVRPQ09ORl9WRVJTSU9OKG00X1BBQ0tBR0VfVkVSU0lPTildKQorCisjIEFNX0FVWF9ESVJfRVhQQU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisKKyMgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAzLCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIEZvciBwcm9qZWN0cyB1c2luZyBBQ19DT05GSUdfQVVYX0RJUihbZm9vXSksIEF1dG9jb25mIHNldHMKKyMgJGFjX2F1eF9kaXIgdG8gYCRzcmNkaXIvZm9vJy4gIEluIG90aGVyIHByb2plY3RzLCBpdCBpcyBzZXQgdG8KKyMgYCRzcmNkaXInLCBgJHNyY2Rpci8uLicsIG9yIGAkc3JjZGlyLy4uLy4uJy4KKyMKKyMgT2YgY291cnNlLCBBdXRvbWFrZSBtdXN0IGhvbm9yIHRoaXMgdmFyaWFibGUgd2hlbmV2ZXIgaXQgY2FsbHMgYQorIyB0b29sIGZyb20gdGhlIGF1eGlsaWFyeSBkaXJlY3RvcnkuICBUaGUgcHJvYmxlbSBpcyB0aGF0ICRzcmNkaXIgKGFuZAorIyB0aGVyZWZvcmUgJGFjX2F1eF9kaXIgYXMgd2VsbCkgY2FuIGJlIGVpdGhlciBhYnNvbHV0ZSBvciByZWxhdGl2ZSwKKyMgZGVwZW5kaW5nIG9uIGhvdyBjb25maWd1cmUgaXMgcnVuLiAgVGhpcyBpcyBwcmV0dHkgYW5ub3lpbmcsIHNpbmNlCisjIGl0IG1ha2VzICRhY19hdXhfZGlyIHF1aXRlIHVudXNhYmxlIGluIHN1YmRpcmVjdG9yaWVzOiBpbiB0aGUgdG9wCisjIHNvdXJjZSBkaXJlY3RvcnksIGFueSBmb3JtIHdpbGwgd29yayBmaW5lLCBidXQgaW4gc3ViZGlyZWN0b3JpZXMgYQorIyByZWxhdGl2ZSBwYXRoIG5lZWRzIHRvIGJlIGFkanVzdGVkIGZpcnN0LgorIworIyAkYWNfYXV4X2Rpci9taXNzaW5nCisjICAgIGZhaWxzIHdoZW4gY2FsbGVkIGZyb20gYSBzdWJkaXJlY3RvcnkgaWYgJGFjX2F1eF9kaXIgaXMgcmVsYXRpdmUKKyMgJHRvcF9zcmNkaXIvJGFjX2F1eF9kaXIvbWlzc2luZworIyAgICBmYWlscyBpZiAkYWNfYXV4X2RpciBpcyBhYnNvbHV0ZSwKKyMgICAgZmFpbHMgd2hlbiBjYWxsZWQgZnJvbSBhIHN1YmRpcmVjdG9yeSBpbiBhIFZQQVRIIGJ1aWxkIHdpdGgKKyMgICAgICAgICAgYSByZWxhdGl2ZSAkYWNfYXV4X2RpcgorIworIyBUaGUgcmVhc29uIG9mIHRoZSBsYXR0ZXIgZmFpbHVyZSBpcyB0aGF0ICR0b3Bfc3JjZGlyIGFuZCAkYWNfYXV4X2RpcgorIyBhcmUgYm90aCBwcmVmaXhlZCBieSAkc3JjZGlyLiAgSW4gYW4gaW4tc291cmNlIGJ1aWxkIHRoaXMgaXMgdXN1YWxseQorIyBoYXJtbGVzcyBiZWNhdXNlICRzcmNkaXIgaXMgYC4nLCBidXQgdGhpbmdzIHdpbGwgYnJva2Ugd2hlbiB5b3UKKyMgc3RhcnQgYSBWUEFUSCBidWlsZCBvciB1c2UgYW4gYWJzb2x1dGUgJHNyY2Rpci4KKyMKKyMgU28gd2UgY291bGQgdXNlIHNvbWV0aGluZyBzaW1pbGFyIHRvICR0b3Bfc3JjZGlyLyRhY19hdXhfZGlyL21pc3NpbmcsCisjIGlmZiB3ZSBzdHJpcCB0aGUgbGVhZGluZyAkc3JjZGlyIGZyb20gJGFjX2F1eF9kaXIuICBUaGF0IHdvdWxkIGJlOgorIyAgIGFtX2F1eF9kaXI9J1wkKHRvcF9zcmNkaXIpLydgZXhwciAiJGFjX2F1eF9kaXIiIDogIiRzcmNkaXIvLypcKC4qXCkiYAorIyBhbmQgdGhlbiB3ZSB3b3VsZCBkZWZpbmUgJE1JU1NJTkcgYXMKKyMgICBNSVNTSU5HPSJcJHtTSEVMTH0gJGFtX2F1eF9kaXIvbWlzc2luZyIKKyMgVGhpcyB3aWxsIHdvcmsgYXMgbG9uZyBhcyBNSVNTSU5HIGlzIG5vdCBjYWxsZWQgZnJvbSBjb25maWd1cmUsIGJlY2F1c2UKKyMgdW5mb3J0dW5hdGVseSAkKHRvcF9zcmNkaXIpIGhhcyBubyBtZWFuaW5nIGluIGNvbmZpZ3VyZS4KKyMgSG93ZXZlciB0aGVyZSBhcmUgb3RoZXIgdmFyaWFibGVzLCBsaWtlIENDLCB3aGljaCBhcmUgb2Z0ZW4gdXNlZCBpbgorIyBjb25maWd1cmUsIGFuZCBjb3VsZCB0aGVyZWZvcmUgbm90IHVzZSB0aGlzICJmaXhlZCIgJGFjX2F1eF9kaXIuCisjCisjIEFub3RoZXIgc29sdXRpb24sIHVzZWQgaGVyZSwgaXMgdG8gYWx3YXlzIGV4cGFuZCAkYWNfYXV4X2RpciB0byBhbgorIyBhYnNvbHV0ZSBQQVRILiAgVGhlIGRyYXdiYWNrIGlzIHRoYXQgdXNpbmcgYWJzb2x1dGUgcGF0aHMgcHJldmVudCBhCisjIGNvbmZpZ3VyZWQgdHJlZSB0byBiZSBtb3ZlZCB3aXRob3V0IHJlY29uZmlndXJhdGlvbi4KKworQUNfREVGVU4oW0FNX0FVWF9ESVJfRVhQQU5EXSwKK1tkbmwgUmVseSBvbiBhdXRvY29uZiB0byBzZXQgdXAgQ0RQQVRIIHByb3Blcmx5LgorQUNfUFJFUkVRKFsyLjUwXSlkbmwKKyMgZXhwYW5kICRhY19hdXhfZGlyIHRvIGFuIGFic29sdXRlIHBhdGgKK2FtX2F1eF9kaXI9YGNkICRhY19hdXhfZGlyICYmIHB3ZGAKK10pCisKKyMgQU1fQ09ORElUSU9OQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKworIyBDb3B5cmlnaHQgKEMpIDE5OTcsIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYKKyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgOAorCisjIEFNX0NPTkRJVElPTkFMKE5BTUUsIFNIRUxMLUNPTkRJVElPTikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBEZWZpbmUgYSBjb25kaXRpb25hbC4KK0FDX0RFRlVOKFtBTV9DT05ESVRJT05BTF0sCitbQUNfUFJFUkVRKDIuNTIpZG5sCisgaWZlbHNlKFskMV0sIFtUUlVFXSwgIFtBQ19GQVRBTChbJDA6IGludmFsaWQgY29uZGl0aW9uOiAkMV0pXSwKKwlbJDFdLCBbRkFMU0VdLCBbQUNfRkFUQUwoWyQwOiBpbnZhbGlkIGNvbmRpdGlvbjogJDFdKV0pZG5sCitBQ19TVUJTVChbJDFfVFJVRV0pZG5sCitBQ19TVUJTVChbJDFfRkFMU0VdKWRubAorX0FNX1NVQlNUX05PVE1BS0UoWyQxX1RSVUVdKWRubAorX0FNX1NVQlNUX05PVE1BS0UoWyQxX0ZBTFNFXSlkbmwKK2lmICQyOyB0aGVuCisgICQxX1RSVUU9CisgICQxX0ZBTFNFPScjJworZWxzZQorICAkMV9UUlVFPScjJworICAkMV9GQUxTRT0KK2ZpCitBQ19DT05GSUdfQ09NTUFORFNfUFJFKAorW2lmIHRlc3QgLXogIiR7JDFfVFJVRX0iICYmIHRlc3QgLXogIiR7JDFfRkFMU0V9IjsgdGhlbgorICBBQ19NU0dfRVJST1IoW1tjb25kaXRpb25hbCAiJDEiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuXV0pCitmaV0pXSkKKworIyBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYKKyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgOQorCisjIFRoZXJlIGFyZSBhIGZldyBkaXJ0eSBoYWNrcyBiZWxvdyB0byBhdm9pZCBsZXR0aW5nIGBBQ19QUk9HX0NDJyBiZQorIyB3cml0dGVuIGluIGNsZWFyLCBpbiB3aGljaCBjYXNlIGF1dG9tYWtlLCB3aGVuIHJlYWRpbmcgYWNsb2NhbC5tNCwKKyMgd2lsbCB0aGluayBpdCBzZWVzIGEgKnVzZSosIGFuZCB0aGVyZWZvcmUgd2lsbCB0cmlnZ2VyIGFsbCBpdCdzCisjIEMgc3VwcG9ydCBtYWNoaW5lcnkuICBBbHNvIG5vdGUgdGhhdCBpdCBtZWFucyB0aGF0IGF1dG9zY2FuLCBzZWVpbmcKKyMgQ0MgZXRjLiBpbiB0aGUgTWFrZWZpbGUsIHdpbGwgYXNrIGZvciBhbiBBQ19QUk9HX0NDIHVzZS4uLgorCisKKyMgX0FNX0RFUEVOREVOQ0lFUyhOQU1FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNlZSBob3cgdGhlIGNvbXBpbGVyIGltcGxlbWVudHMgZGVwZW5kZW5jeSBjaGVja2luZy4KKyMgTkFNRSBpcyAiQ0MiLCAiQ1hYIiwgIkdDSiIsIG9yICJPQkpDIi4KKyMgV2UgdHJ5IGEgZmV3IHRlY2huaXF1ZXMgYW5kIHVzZSB0aGF0IHRvIHNldCBhIHNpbmdsZSBjYWNoZSB2YXJpYWJsZS4KKyMKKyMgV2UgZG9uJ3QgQUNfUkVRVUlSRSB0aGUgY29ycmVzcG9uZGluZyBBQ19QUk9HX0NDIHNpbmNlIHRoZSBsYXR0ZXIgd2FzCisjIG1vZGlmaWVkIHRvIGludm9rZSBfQU1fREVQRU5ERU5DSUVTKENDKTsgd2Ugd291bGQgaGF2ZSBhIGNpcmN1bGFyCisjIGRlcGVuZGVuY3ksIGFuZCBnaXZlbiB0aGF0IHRoZSB1c2VyIGlzIG5vdCBleHBlY3RlZCB0byBydW4gdGhpcyBtYWNybywKKyMganVzdCByZWx5IG9uIEFDX1BST0dfQ0MuCitBQ19ERUZVTihbX0FNX0RFUEVOREVOQ0lFU10sCitbQUNfUkVRVUlSRShbQU1fU0VUX0RFUERJUl0pZG5sCitBQ19SRVFVSVJFKFtBTV9PVVRQVVRfREVQRU5ERU5DWV9DT01NQU5EU10pZG5sCitBQ19SRVFVSVJFKFtBTV9NQUtFX0lOQ0xVREVdKWRubAorQUNfUkVRVUlSRShbQU1fREVQX1RSQUNLXSlkbmwKKworaWZlbHNlKFskMV0sIENDLCAgIFtkZXBjYz0iJENDIiAgIGFtX2NvbXBpbGVyX2xpc3Q9XSwKKyAgICAgICBbJDFdLCBDWFgsICBbZGVwY2M9IiRDWFgiICBhbV9jb21waWxlcl9saXN0PV0sCisgICAgICAgWyQxXSwgT0JKQywgW2RlcGNjPSIkT0JKQyIgYW1fY29tcGlsZXJfbGlzdD0nZ2NjMyBnY2MnXSwKKyAgICAgICBbJDFdLCBVUEMsICBbZGVwY2M9IiRVUEMiICBhbV9jb21waWxlcl9saXN0PV0sCisgICAgICAgWyQxXSwgR0NKLCAgW2RlcGNjPSIkR0NKIiAgYW1fY29tcGlsZXJfbGlzdD0nZ2NjMyBnY2MnXSwKKyAgICAgICAgICAgICAgICAgICBbZGVwY2M9IiQkMSIgICBhbV9jb21waWxlcl9saXN0PV0pCisKK0FDX0NBQ0hFX0NIRUNLKFtkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjY10sCisgICAgICAgICAgICAgICBbYW1fY3ZfJDFfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGVdLAorW2lmIHRlc3QgLXogIiRBTURFUF9UUlVFIiAmJiB0ZXN0IC1mICIkYW1fZGVwY29tcCI7IHRoZW4KKyAgIyBXZSBtYWtlIGEgc3ViZGlyIGFuZCBkbyB0aGUgdGVzdHMgdGhlcmUuICBPdGhlcndpc2Ugd2UgY2FuIGVuZCB1cAorICAjIG1ha2luZyBib2d1cyBmaWxlcyB0aGF0IHdlIGRvbid0IGtub3cgYWJvdXQgYW5kIG5ldmVyIHJlbW92ZS4gIEZvcgorICAjIGluc3RhbmNlIGl0IHdhcyByZXBvcnRlZCB0aGF0IG9uIEhQLVVYIHRoZSBnY2MgdGVzdCB3aWxsIGVuZCB1cAorICAjIG1ha2luZyBhIGR1bW15IGZpbGUgbmFtZWQgYEQnIC0tIGJlY2F1c2UgYC1NRCcgbWVhbnMgYHB1dCB0aGUgb3V0cHV0CisgICMgaW4gRCcuCisgIG1rZGlyIGNvbmZ0ZXN0LmRpcgorICAjIENvcHkgZGVwY29tcCB0byBzdWJkaXIgYmVjYXVzZSBvdGhlcndpc2Ugd2Ugd29uJ3QgZmluZCBpdCBpZiB3ZSdyZQorICAjIHVzaW5nIGEgcmVsYXRpdmUgZGlyZWN0b3J5LgorICBjcCAiJGFtX2RlcGNvbXAiIGNvbmZ0ZXN0LmRpcgorICBjZCBjb25mdGVzdC5kaXIKKyAgIyBXZSB3aWxsIGJ1aWxkIG9iamVjdHMgYW5kIGRlcGVuZGVuY2llcyBpbiBhIHN1YmRpcmVjdG9yeSBiZWNhdXNlCisgICMgaXQgaGVscHMgdG8gZGV0ZWN0IGluYXBwbGljYWJsZSBkZXBlbmRlbmN5IG1vZGVzLiAgRm9yIGluc3RhbmNlCisgICMgYm90aCBUcnU2NCdzIGNjIGFuZCBJQ0Mgc3VwcG9ydCAtTUQgdG8gb3V0cHV0IGRlcGVuZGVuY2llcyBhcyBhCisgICMgc2lkZSBlZmZlY3Qgb2YgY29tcGlsYXRpb24sIGJ1dCBJQ0Mgd2lsbCBwdXQgdGhlIGRlcGVuZGVuY2llcyBpbgorICAjIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB3aGlsZSBUcnU2NCB3aWxsIHB1dCB0aGVtIGluIHRoZSBvYmplY3QKKyAgIyBkaXJlY3RvcnkuCisgIG1rZGlyIHN1YgorCisgIGFtX2N2XyQxX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPW5vbmUKKyAgaWYgdGVzdCAiJGFtX2NvbXBpbGVyX2xpc3QiID0gIiI7IHRoZW4KKyAgICAgYW1fY29tcGlsZXJfbGlzdD1gc2VkIC1uIFsncy9eIypcKFthLXpBLVowLTldKlwpKSQvXDEvcCddIDwgLi9kZXBjb21wYAorICBmaQorICBmb3IgZGVwbW9kZSBpbiAkYW1fY29tcGlsZXJfbGlzdDsgZG8KKyAgICAjIFNldHVwIGEgc291cmNlIHdpdGggbWFueSBkZXBlbmRlbmNpZXMsIGJlY2F1c2Ugc29tZSBjb21waWxlcnMKKyAgICAjIGxpa2UgdG8gd3JhcCBsYXJnZSBkZXBlbmRlbmN5IGxpc3RzIG9uIGNvbHVtbiA4MCAod2l0aCBcKSwgYW5kCisgICAgIyB3ZSBzaG91bGQgbm90IGNob29zZSBhIGRlcGNvbXAgbW9kZSB3aGljaCBpcyBjb25mdXNlZCBieSB0aGlzLgorICAgICMKKyAgICAjIFdlIG5lZWQgdG8gcmVjcmVhdGUgdGhlc2UgZmlsZXMgZm9yIGVhY2ggdGVzdCwgYXMgdGhlIGNvbXBpbGVyIG1heQorICAgICMgb3ZlcndyaXRlIHNvbWUgb2YgdGhlbSB3aGVuIHRlc3Rpbmcgd2l0aCBvYnNjdXJlIGNvbW1hbmQgbGluZXMuCisgICAgIyBUaGlzIGhhcHBlbnMgYXQgbGVhc3Qgd2l0aCB0aGUgQUlYIEMgY29tcGlsZXIuCisgICAgOiA+IHN1Yi9jb25mdGVzdC5jCisgICAgZm9yIGkgaW4gMSAyIDMgNCA1IDY7IGRvCisgICAgICBlY2hvICcjaW5jbHVkZSAiY29uZnRzdCckaScuaCInID4+IHN1Yi9jb25mdGVzdC5jCisgICAgICAjIFVzaW5nIGA6ID4gc3ViL2NvbmZ0c3QkaS5oJyBjcmVhdGVzIG9ubHkgc3ViL2NvbmZ0c3QxLmggd2l0aAorICAgICAgIyBTb2xhcmlzIDgncyB7L3Vzcix9L2Jpbi9zaC4KKyAgICAgIHRvdWNoIHN1Yi9jb25mdHN0JGkuaAorICAgIGRvbmUKKyAgICBlY2hvICIke2FtX19pbmNsdWRlfSAke2FtX19xdW90ZX1zdWIvY29uZnRlc3QuUG8ke2FtX19xdW90ZX0iID4gY29uZm1mCisKKyAgICBjYXNlICRkZXBtb2RlIGluCisgICAgbm9zaWRlZWZmZWN0KQorICAgICAgIyBhZnRlciB0aGlzIHRhZywgbWVjaGFuaXNtcyBhcmUgbm90IGJ5IHNpZGUtZWZmZWN0LCBzbyB0aGV5J2xsCisgICAgICAjIG9ubHkgYmUgdXNlZCB3aGVuIGV4cGxpY2l0bHkgcmVxdWVzdGVkCisgICAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiA9IHh5ZXM7IHRoZW4KKwljb250aW51ZQorICAgICAgZWxzZQorCWJyZWFrCisgICAgICBmaQorICAgICAgOzsKKyAgICBub25lKSBicmVhayA7OworICAgIGVzYWMKKyAgICAjIFdlIGNoZWNrIHdpdGggYC1jJyBhbmQgYC1vJyBmb3IgdGhlIHNha2Ugb2YgdGhlICJkYXNobXN0ZG91dCIKKyAgICAjIG1vZGUuICBJdCB0dXJucyBvdXQgdGhhdCB0aGUgU3VuUHJvIEMrKyBjb21waWxlciBkb2VzIG5vdCBwcm9wZXJseQorICAgICMgaGFuZGxlIGAtTSAtbycsIGFuZCB3ZSBuZWVkIHRvIGRldGVjdCB0aGlzLgorICAgIGlmIGRlcG1vZGU9JGRlcG1vZGUgXAorICAgICAgIHNvdXJjZT1zdWIvY29uZnRlc3QuYyBvYmplY3Q9c3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99IFwKKyAgICAgICBkZXBmaWxlPXN1Yi9jb25mdGVzdC5QbyB0bXBkZXBmaWxlPXN1Yi9jb25mdGVzdC5UUG8gXAorICAgICAgICRTSEVMTCAuL2RlcGNvbXAgJGRlcGNjIC1jIC1vIHN1Yi9jb25mdGVzdC4ke09CSkVYVC1vfSBzdWIvY29uZnRlc3QuYyBcCisgICAgICAgICA+L2Rldi9udWxsIDI+Y29uZnRlc3QuZXJyICYmCisgICAgICAgZ3JlcCBzdWIvY29uZnRzdDEuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorICAgICAgIGdyZXAgc3ViL2NvbmZ0c3Q2Lmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKKyAgICAgICBncmVwIHN1Yi9jb25mdGVzdC4ke09CSkVYVC1vfSBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorICAgICAgICR7TUFLRS1tYWtlfSAtcyAtZiBjb25mbWYgPiAvZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgIyBpY2MgZG9lc24ndCBjaG9rZSBvbiB1bmtub3duIG9wdGlvbnMsIGl0IHdpbGwganVzdCBpc3N1ZSB3YXJuaW5ncworICAgICAgIyBvciByZW1hcmtzIChldmVuIHdpdGggLVdlcnJvcikuICBTbyB3ZSBncmVwIHN0ZGVyciBmb3IgYW55IG1lc3NhZ2UKKyAgICAgICMgdGhhdCBzYXlzIGFuIG9wdGlvbiB3YXMgaWdub3JlZCBvciBub3Qgc3VwcG9ydGVkLgorICAgICAgIyBXaGVuIGdpdmVuIC1NUCwgaWNjIDcuMCBhbmQgNy4xIGNvbXBsYWluIHRodXNseToKKyAgICAgICMgICBpY2M6IENvbW1hbmQgbGluZSB3YXJuaW5nOiBpZ25vcmluZyBvcHRpb24gJy1NJzsgbm8gYXJndW1lbnQgcmVxdWlyZWQKKyAgICAgICMgVGhlIGRpYWdub3NpcyBjaGFuZ2VkIGluIGljYyA4LjA6CisgICAgICAjICAgaWNjOiBDb21tYW5kIGxpbmUgcmVtYXJrOiBvcHRpb24gJy1NUCcgbm90IHN1cHBvcnRlZAorICAgICAgaWYgKGdyZXAgJ2lnbm9yaW5nIG9wdGlvbicgY29uZnRlc3QuZXJyIHx8CisgICAgICAgICAgZ3JlcCAnbm90IHN1cHBvcnRlZCcgY29uZnRlc3QuZXJyKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOjsgZWxzZQorICAgICAgICBhbV9jdl8kMV9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT0kZGVwbW9kZQorICAgICAgICBicmVhaworICAgICAgZmkKKyAgICBmaQorICBkb25lCisKKyAgY2QgLi4KKyAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgorZWxzZQorICBhbV9jdl8kMV9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT1ub25lCitmaQorXSkKK0FDX1NVQlNUKFskMURFUE1PREVdLCBbZGVwbW9kZT0kYW1fY3ZfJDFfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGVdKQorQU1fQ09ORElUSU9OQUwoW2FtX19mYXN0ZGVwJDFdLCBbCisgIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubyBcCisgICYmIHRlc3QgIiRhbV9jdl8kMV9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPSBnY2MzXSkKK10pCisKKworIyBBTV9TRVRfREVQRElSCisjIC0tLS0tLS0tLS0tLS0KKyMgQ2hvb3NlIGEgZGlyZWN0b3J5IG5hbWUgZm9yIGRlcGVuZGVuY3kgZmlsZXMuCisjIFRoaXMgbWFjcm8gaXMgQUNfUkVRVUlSRWQgaW4gX0FNX0RFUEVOREVOQ0lFUworQUNfREVGVU4oW0FNX1NFVF9ERVBESVJdLAorW0FDX1JFUVVJUkUoW0FNX1NFVF9MRUFESU5HX0RPVF0pZG5sCitBQ19TVUJTVChbREVQRElSXSwgWyIke2FtX19sZWFkaW5nX2RvdH1kZXBzIl0pZG5sCitdKQorCisKKyMgQU1fREVQX1RSQUNLCisjIC0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0FNX0RFUF9UUkFDS10sCitbQUNfQVJHX0VOQUJMRShkZXBlbmRlbmN5LXRyYWNraW5nLAorWyAgLS1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgIHNwZWVkcyB1cCBvbmUtdGltZSBidWlsZAorICAtLWVuYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nICAgZG8gbm90IHJlamVjdCBzbG93IGRlcGVuZGVuY3kgZXh0cmFjdG9yc10pCitpZiB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiAhPSB4bm87IHRoZW4KKyAgYW1fZGVwY29tcD0iJGFjX2F1eF9kaXIvZGVwY29tcCIKKyAgQU1ERVBCQUNLU0xBU0g9J1wnCitmaQorQU1fQ09ORElUSU9OQUwoW0FNREVQXSwgW3Rlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhub10pCitBQ19TVUJTVChbQU1ERVBCQUNLU0xBU0hdKWRubAorX0FNX1NVQlNUX05PVE1BS0UoW0FNREVQQkFDS1NMQVNIXSlkbmwKK10pCisKKyMgR2VuZXJhdGUgY29kZSB0byBzZXQgdXAgZGVwZW5kZW5jeSB0cmFja2luZy4gICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKworIyBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUKKyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworI3NlcmlhbCAzCisKKyMgX0FNX09VVFBVVF9ERVBFTkRFTkNZX0NPTU1BTkRTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW19BTV9PVVRQVVRfREVQRU5ERU5DWV9DT01NQU5EU10sCitbZm9yIG1mIGluICRDT05GSUdfRklMRVM7IGRvCisgICMgU3RyaXAgTUYgc28gd2UgZW5kIHVwIHdpdGggdGhlIG5hbWUgb2YgdGhlIGZpbGUuCisgIG1mPWBlY2hvICIkbWYiIHwgc2VkIC1lICdzLzouKiQvLydgCisgICMgQ2hlY2sgd2hldGhlciB0aGlzIGlzIGFuIEF1dG9tYWtlIGdlbmVyYXRlZCBNYWtlZmlsZSBvciBub3QuCisgICMgV2UgdXNlZCB0byBtYXRjaCBvbmx5IHRoZSBmaWxlcyBuYW1lZCBgTWFrZWZpbGUuaW4nLCBidXQKKyAgIyBzb21lIHBlb3BsZSByZW5hbWUgdGhlbTsgc28gaW5zdGVhZCB3ZSBsb29rIGF0IHRoZSBmaWxlIGNvbnRlbnQuCisgICMgR3JlcCdpbmcgdGhlIGZpcnN0IGxpbmUgaXMgbm90IGVub3VnaDogc29tZSBwZW9wbGUgcG9zdC1wcm9jZXNzCisgICMgZWFjaCBNYWtlZmlsZS5pbiBhbmQgYWRkIGEgbmV3IGxpbmUgb24gdG9wIG9mIGVhY2ggZmlsZSB0byBzYXkgc28uCisgICMgR3JlcCdpbmcgdGhlIHdob2xlIGZpbGUgaXMgbm90IGdvb2QgZWl0aGVyOiBBSVggZ3JlcCBoYXMgYSBsaW5lCisgICMgbGltaXQgb2YgMjA0OCwgYnV0IGFsbCBzZWQncyB3ZSBrbm93IGhhdmUgdW5kZXJzdGFuZCBhdCBsZWFzdCA0MDAwLgorICBpZiBzZWQgMTBxICIkbWYiIHwgZ3JlcCAnXiMuKmdlbmVyYXRlZCBieSBhdXRvbWFrZScgPiAvZGV2L251bGwgMj4mMTsgdGhlbgorICAgIGRpcnBhcnQ9YEFTX0RJUk5BTUUoIiRtZiIpYAorICBlbHNlCisgICAgY29udGludWUKKyAgZmkKKyAgIyBFeHRyYWN0IHRoZSBkZWZpbml0aW9uIG9mIERFUERJUiwgYW1fX2luY2x1ZGUsIGFuZCBhbV9fcXVvdGUKKyAgIyBmcm9tIHRoZSBNYWtlZmlsZSB3aXRob3V0IHJ1bm5pbmcgYG1ha2UnLgorICBERVBESVI9YHNlZCAtbiAncy9eREVQRElSID0gLy9wJyA8ICIkbWYiYAorICB0ZXN0IC16ICIkREVQRElSIiAmJiBjb250aW51ZQorICBhbV9faW5jbHVkZT1gc2VkIC1uICdzL15hbV9faW5jbHVkZSA9IC8vcCcgPCAiJG1mImAKKyAgdGVzdCAteiAiYW1fX2luY2x1ZGUiICYmIGNvbnRpbnVlCisgIGFtX19xdW90ZT1gc2VkIC1uICdzL15hbV9fcXVvdGUgPSAvL3AnIDwgIiRtZiJgCisgICMgV2hlbiB1c2luZyBhbnNpMmtuciwgVSBtYXkgYmUgZW1wdHkgb3IgYW4gdW5kZXJzY29yZTsgZXhwYW5kIGl0CisgIFU9YHNlZCAtbiAncy9eVSA9IC8vcCcgPCAiJG1mImAKKyAgIyBGaW5kIGFsbCBkZXBlbmRlbmN5IG91dHB1dCBmaWxlcywgdGhleSBhcmUgaW5jbHVkZWQgZmlsZXMgd2l0aAorICAjICQoREVQRElSKSBpbiB0aGVpciBuYW1lcy4gIFdlIGludm9rZSBzZWQgdHdpY2UgYmVjYXVzZSBpdCBpcyB0aGUKKyAgIyBzaW1wbGVzdCBhcHByb2FjaCB0byBjaGFuZ2luZyAkKERFUERJUikgdG8gaXRzIGFjdHVhbCB2YWx1ZSBpbiB0aGUKKyAgIyBleHBhbnNpb24uCisgIGZvciBmaWxlIGluIGBzZWQgLW4gIgorICAgIHMvXiRhbV9faW5jbHVkZSAkYW1fX3F1b3RlXCguKihERVBESVIpLipcKSRhbV9fcXVvdGUiJyQvXDEvcCcgPCIkbWYiIHwgXAorICAgICAgIHNlZCAtZSAncy9cJChERVBESVIpLyciJERFUERJUiInL2cnIC1lICdzL1wkVS8nIiRVIicvZydgOyBkbworICAgICMgTWFrZSBzdXJlIHRoZSBkaXJlY3RvcnkgZXhpc3RzLgorICAgIHRlc3QgLWYgIiRkaXJwYXJ0LyRmaWxlIiAmJiBjb250aW51ZQorICAgIGZkaXI9YEFTX0RJUk5BTUUoWyIkZmlsZSJdKWAKKyAgICBBU19NS0RJUl9QKFskZGlycGFydC8kZmRpcl0pCisgICAgIyBlY2hvICJjcmVhdGluZyAkZGlycGFydC8kZmlsZSIKKyAgICBlY2hvICcjIGR1bW15JyA+ICIkZGlycGFydC8kZmlsZSIKKyAgZG9uZQorZG9uZQorXSkjIF9BTV9PVVRQVVRfREVQRU5ERU5DWV9DT01NQU5EUworCisKKyMgQU1fT1VUUFVUX0RFUEVOREVOQ1lfQ09NTUFORFMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGhpcyBtYWNybyBzaG91bGQgb25seSBiZSBpbnZva2VkIG9uY2UgLS0gdXNlIHZpYSBBQ19SRVFVSVJFLgorIworIyBUaGlzIGNvZGUgaXMgb25seSByZXF1aXJlZCB3aGVuIGF1dG9tYXRpYyBkZXBlbmRlbmN5IHRyYWNraW5nCisjIGlzIGVuYWJsZWQuICBGSVhNRS4gIFRoaXMgY3JlYXRlcyBlYWNoIGAuUCcgZmlsZSB0aGF0IHdlIHdpbGwKKyMgbmVlZCBpbiBvcmRlciB0byBib290c3RyYXAgdGhlIGRlcGVuZGVuY3kgaGFuZGxpbmcgY29kZS4KK0FDX0RFRlVOKFtBTV9PVVRQVVRfREVQRU5ERU5DWV9DT01NQU5EU10sCitbQUNfQ09ORklHX0NPTU1BTkRTKFtkZXBmaWxlc10sCisgICAgIFt0ZXN0IHgiJEFNREVQX1RSVUUiICE9IHgiIiB8fCBfQU1fT1VUUFVUX0RFUEVOREVOQ1lfQ09NTUFORFNdLAorICAgICBbQU1ERVBfVFJVRT0iJEFNREVQX1RSVUUiIGFjX2F1eF9kaXI9IiRhY19hdXhfZGlyIl0pCitdKQorCisjIERvIGFsbCB0aGUgd29yayBmb3IgQXV0b21ha2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisKKyMgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LAorIyAyMDA1LCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDEyCisKKyMgVGhpcyBtYWNybyBhY3R1YWxseSBkb2VzIHRvbyBtdWNoLiAgU29tZSBjaGVja3MgYXJlIG9ubHkgbmVlZGVkIGlmCisjIHlvdXIgcGFja2FnZSBkb2VzIGNlcnRhaW4gdGhpbmdzLiAgQnV0IHRoaXMgaXNuJ3QgcmVhbGx5IGEgYmlnIGRlYWwuCisKKyMgQU1fSU5JVF9BVVRPTUFLRShQQUNLQUdFLCBWRVJTSU9OLCBbTk8tREVGSU5FXSkKKyMgQU1fSU5JVF9BVVRPTUFLRShbT1BUSU9OU10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRoZSBjYWxsIHdpdGggUEFDS0FHRSBhbmQgVkVSU0lPTiBhcmd1bWVudHMgaXMgdGhlIG9sZCBzdHlsZQorIyBjYWxsIChwcmUgYXV0b2NvbmYtMi41MCksIHdoaWNoIGlzIGJlaW5nIHBoYXNlZCBvdXQuICBQQUNLQUdFCisjIGFuZCBWRVJTSU9OIHNob3VsZCBub3cgYmUgcGFzc2VkIHRvIEFDX0lOSVQgYW5kIHJlbW92ZWQgZnJvbQorIyB0aGUgY2FsbCB0byBBTV9JTklUX0FVVE9NQUtFLgorIyBXZSBzdXBwb3J0IGJvdGggY2FsbCBzdHlsZXMgZm9yIHRoZSB0cmFuc2l0aW9uLiAgQWZ0ZXIKKyMgdGhlIG5leHQgQXV0b21ha2UgcmVsZWFzZSwgQXV0b2NvbmYgY2FuIG1ha2UgdGhlIEFDX0lOSVQKKyMgYXJndW1lbnRzIG1hbmRhdG9yeSwgYW5kIHRoZW4gd2UgY2FuIGRlcGVuZCBvbiBhIG5ldyBBdXRvY29uZgorIyByZWxlYXNlIGFuZCBkcm9wIHRoZSBvbGQgY2FsbCBzdXBwb3J0LgorQUNfREVGVU4oW0FNX0lOSVRfQVVUT01BS0VdLAorW0FDX1BSRVJFUShbMi42MF0pZG5sCitkbmwgQXV0b2NvbmYgd2FudHMgdG8gZGlzYWxsb3cgQU1fIG5hbWVzLiAgV2UgZXhwbGljaXRseSBhbGxvdworZG5sIHRoZSBvbmVzIHdlIGNhcmUgYWJvdXQuCittNF9wYXR0ZXJuX2FsbG93KFteQU1fW0EtWl0rRkxBR1MkXSlkbmwKK0FDX1JFUVVJUkUoW0FNX1NFVF9DVVJSRU5UX0FVVE9NQUtFX1ZFUlNJT05dKWRubAorQUNfUkVRVUlSRShbQUNfUFJPR19JTlNUQUxMXSlkbmwKK2lmIHRlc3QgImBjZCAkc3JjZGlyICYmIHB3ZGAiICE9ICJgcHdkYCI7IHRoZW4KKyAgIyBVc2UgLUkkKHNyY2Rpcikgb25seSB3aGVuICQoc3JjZGlyKSAhPSAuLCBzbyB0aGF0IG1ha2UncyBvdXRwdXQKKyAgIyBpcyBub3QgcG9sbHV0ZWQgd2l0aCByZXBlYXRlZCAiLUkuIgorICBBQ19TVUJTVChbYW1fX2lzcmNdLCBbJyAtSSQoc3JjZGlyKSddKV9BTV9TVUJTVF9OT1RNQUtFKFthbV9faXNyY10pZG5sCisgICMgdGVzdCB0byBzZWUgaWYgc3JjZGlyIGFscmVhZHkgY29uZmlndXJlZAorICBpZiB0ZXN0IC1mICRzcmNkaXIvY29uZmlnLnN0YXR1czsgdGhlbgorICAgIEFDX01TR19FUlJPUihbc291cmNlIGRpcmVjdG9yeSBhbHJlYWR5IGNvbmZpZ3VyZWQ7IHJ1biAibWFrZSBkaXN0Y2xlYW4iIHRoZXJlIGZpcnN0XSkKKyAgZmkKK2ZpCisKKyMgdGVzdCB3aGV0aGVyIHdlIGhhdmUgY3lncGF0aAoraWYgdGVzdCAteiAiJENZR1BBVEhfVyI7IHRoZW4KKyAgaWYgKGN5Z3BhdGggLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+L2Rldi9udWxsOyB0aGVuCisgICAgQ1lHUEFUSF9XPSdjeWdwYXRoIC13JworICBlbHNlCisgICAgQ1lHUEFUSF9XPWVjaG8KKyAgZmkKK2ZpCitBQ19TVUJTVChbQ1lHUEFUSF9XXSkKKworIyBEZWZpbmUgdGhlIGlkZW50aXR5IG9mIHRoZSBwYWNrYWdlLgorZG5sIERpc3Rpbmd1aXNoIGJldHdlZW4gb2xkLXN0eWxlIGFuZCBuZXctc3R5bGUgY2FsbHMuCittNF9pZnZhbChbJDJdLAorW200X2lmdmFsKFskM10sIFtfQU1fU0VUX09QVElPTihbbm8tZGVmaW5lXSldKWRubAorIEFDX1NVQlNUKFtQQUNLQUdFXSwgWyQxXSlkbmwKKyBBQ19TVUJTVChbVkVSU0lPTl0sIFskMl0pXSwKK1tfQU1fU0VUX09QVElPTlMoWyQxXSlkbmwKK2RubCBEaWFnbm9zZSBvbGQtc3R5bGUgQUNfSU5JVCB3aXRoIG5ldy1zdHlsZSBBTV9BVVRPTUFLRV9JTklULgorbTRfaWYobTRfaWZkZWYoW0FDX1BBQ0tBR0VfTkFNRV0sIDEpbTRfaWZkZWYoW0FDX1BBQ0tBR0VfVkVSU0lPTl0sIDEpLCAxMSwsCisgIFttNF9mYXRhbChbQUNfSU5JVCBzaG91bGQgYmUgY2FsbGVkIHdpdGggcGFja2FnZSBhbmQgdmVyc2lvbiBhcmd1bWVudHNdKV0pZG5sCisgQUNfU1VCU1QoW1BBQ0tBR0VdLCBbJ0FDX1BBQ0tBR0VfVEFSTkFNRSddKWRubAorIEFDX1NVQlNUKFtWRVJTSU9OXSwgWydBQ19QQUNLQUdFX1ZFUlNJT04nXSldKWRubAorCitfQU1fSUZfT1BUSU9OKFtuby1kZWZpbmVdLCwKK1tBQ19ERUZJTkVfVU5RVU9URUQoUEFDS0FHRSwgIiRQQUNLQUdFIiwgW05hbWUgb2YgcGFja2FnZV0pCisgQUNfREVGSU5FX1VOUVVPVEVEKFZFUlNJT04sICIkVkVSU0lPTiIsIFtWZXJzaW9uIG51bWJlciBvZiBwYWNrYWdlXSldKWRubAorCisjIFNvbWUgdG9vbHMgQXV0b21ha2UgbmVlZHMuCitBQ19SRVFVSVJFKFtBTV9TQU5JVFlfQ0hFQ0tdKWRubAorQUNfUkVRVUlSRShbQUNfQVJHX1BST0dSQU1dKWRubAorQU1fTUlTU0lOR19QUk9HKEFDTE9DQUwsIGFjbG9jYWwtJHthbV9fYXBpX3ZlcnNpb259KQorQU1fTUlTU0lOR19QUk9HKEFVVE9DT05GLCBhdXRvY29uZikKK0FNX01JU1NJTkdfUFJPRyhBVVRPTUFLRSwgYXV0b21ha2UtJHthbV9fYXBpX3ZlcnNpb259KQorQU1fTUlTU0lOR19QUk9HKEFVVE9IRUFERVIsIGF1dG9oZWFkZXIpCitBTV9NSVNTSU5HX1BST0coTUFLRUlORk8sIG1ha2VpbmZvKQorQU1fUFJPR19JTlNUQUxMX1NICitBTV9QUk9HX0lOU1RBTExfU1RSSVAKK0FDX1JFUVVJUkUoW0FNX1BST0dfTUtESVJfUF0pZG5sCisjIFdlIG5lZWQgYXdrIGZvciB0aGUgImNoZWNrIiB0YXJnZXQuICBUaGUgc3lzdGVtICJhd2siIGlzIGJhZCBvbgorIyBzb21lIHBsYXRmb3Jtcy4KK0FDX1JFUVVJUkUoW0FDX1BST0dfQVdLXSlkbmwKK0FDX1JFUVVJUkUoW0FDX1BST0dfTUFLRV9TRVRdKWRubAorQUNfUkVRVUlSRShbQU1fU0VUX0xFQURJTkdfRE9UXSlkbmwKK19BTV9JRl9PUFRJT04oW3Rhci11c3Rhcl0sIFtfQU1fUFJPR19UQVIoW3VzdGFyXSldLAorICAgICAgICAgICAgICBbX0FNX0lGX09QVElPTihbdGFyLXBheF0sIFtfQU1fUFJPR19UQVIoW3BheF0pXSwKKwkgICAgICAJCSAgICAgW19BTV9QUk9HX1RBUihbdjddKV0pXSkKK19BTV9JRl9PUFRJT04oW25vLWRlcGVuZGVuY2llc10sLAorW0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0NDXSwKKyAgICAgICAgICAgICAgICAgIFtfQU1fREVQRU5ERU5DSUVTKENDKV0sCisgICAgICAgICAgICAgICAgICBbZGVmaW5lKFtBQ19QUk9HX0NDXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmbihbQUNfUFJPR19DQ10pW19BTV9ERVBFTkRFTkNJRVMoQ0MpXSldKWRubAorQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfQ1hYXSwKKyAgICAgICAgICAgICAgICAgIFtfQU1fREVQRU5ERU5DSUVTKENYWCldLAorICAgICAgICAgICAgICAgICAgW2RlZmluZShbQUNfUFJPR19DWFhdLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZuKFtBQ19QUk9HX0NYWF0pW19BTV9ERVBFTkRFTkNJRVMoQ1hYKV0pXSlkbmwKK0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX09CSkNdLAorICAgICAgICAgICAgICAgICAgW19BTV9ERVBFTkRFTkNJRVMoT0JKQyldLAorICAgICAgICAgICAgICAgICAgW2RlZmluZShbQUNfUFJPR19PQkpDXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmbihbQUNfUFJPR19PQkpDXSlbX0FNX0RFUEVOREVOQ0lFUyhPQkpDKV0pXSlkbmwKK10pCitdKQorCisKKyMgV2hlbiBjb25maWcuc3RhdHVzIGdlbmVyYXRlcyBhIGhlYWRlciwgd2UgbXVzdCB1cGRhdGUgdGhlIHN0YW1wLWggZmlsZS4KKyMgVGhpcyBmaWxlIHJlc2lkZXMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSBjb25maWcgaGVhZGVyCisjIHRoYXQgaXMgZ2VuZXJhdGVkLiAgVGhlIHN0YW1wIGZpbGVzIGFyZSBudW1iZXJlZCB0byBoYXZlIGRpZmZlcmVudCBuYW1lcy4KKworIyBBdXRvY29uZiBjYWxscyBfQUNfQU1fQ09ORklHX0hFQURFUl9IT09LICh3aGVuIGRlZmluZWQpIGluIHRoZQorIyBsb29wIHdoZXJlIGNvbmZpZy5zdGF0dXMgY3JlYXRlcyB0aGUgaGVhZGVycywgc28gd2UgY2FuIGdlbmVyYXRlCisjIG91ciBzdGFtcCBmaWxlcyB0aGVyZS4KK0FDX0RFRlVOKFtfQUNfQU1fQ09ORklHX0hFQURFUl9IT09LXSwKK1sjIENvbXB1dGUgJDEncyBpbmRleCBpbiAkY29uZmlnX2hlYWRlcnMuCitfYW1fc3RhbXBfY291bnQ9MQorZm9yIF9hbV9oZWFkZXIgaW4gJGNvbmZpZ19oZWFkZXJzIDo7IGRvCisgIGNhc2UgJF9hbV9oZWFkZXIgaW4KKyAgICAkMSB8ICQxOiogKQorICAgICAgYnJlYWsgOzsKKyAgICAqICkKKyAgICAgIF9hbV9zdGFtcF9jb3VudD1gZXhwciAkX2FtX3N0YW1wX2NvdW50ICsgMWAgOzsKKyAgZXNhYworZG9uZQorZWNobyAidGltZXN0YW1wIGZvciAkMSIgPmBBU19ESVJOQU1FKFskMV0pYC9zdGFtcC1oW10kX2FtX3N0YW1wX2NvdW50XSkKKworIyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDMsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgQU1fUFJPR19JTlNUQUxMX1NICisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBEZWZpbmUgJGluc3RhbGxfc2guCitBQ19ERUZVTihbQU1fUFJPR19JTlNUQUxMX1NIXSwKK1tBQ19SRVFVSVJFKFtBTV9BVVhfRElSX0VYUEFORF0pZG5sCitpbnN0YWxsX3NoPSR7aW5zdGFsbF9zaC0iXCQoU0hFTEwpICRhbV9hdXhfZGlyL2luc3RhbGwtc2gifQorQUNfU1VCU1QoaW5zdGFsbF9zaCldKQorCisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgMgorCisjIENoZWNrIHdoZXRoZXIgdGhlIHVuZGVybHlpbmcgZmlsZS1zeXN0ZW0gc3VwcG9ydHMgZmlsZW5hbWVzCisjIHdpdGggYSBsZWFkaW5nIGRvdC4gIEZvciBpbnN0YW5jZSBNUy1ET1MgZG9lc24ndC4KK0FDX0RFRlVOKFtBTV9TRVRfTEVBRElOR19ET1RdLAorW3JtIC1yZiAudHN0IDI+L2Rldi9udWxsCitta2RpciAudHN0IDI+L2Rldi9udWxsCitpZiB0ZXN0IC1kIC50c3Q7IHRoZW4KKyAgYW1fX2xlYWRpbmdfZG90PS4KK2Vsc2UKKyAgYW1fX2xlYWRpbmdfZG90PV8KK2ZpCitybWRpciAudHN0IDI+L2Rldi9udWxsCitBQ19TVUJTVChbYW1fX2xlYWRpbmdfZG90XSldKQorCisjIENoZWNrIHRvIHNlZSBob3cgJ21ha2UnIHRyZWF0cyBpbmNsdWRlcy4JICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorCisjIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgMworCisjIEFNX01BS0VfSU5DTFVERSgpCisjIC0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIHRvIHNlZSBob3cgbWFrZSB0cmVhdHMgaW5jbHVkZXMuCitBQ19ERUZVTihbQU1fTUFLRV9JTkNMVURFXSwKK1thbV9tYWtlPSR7TUFLRS1tYWtlfQorY2F0ID4gY29uZmluYyA8PCAnRU5EJworYW1fX2RvaXQ6CisJQGVjaG8gZG9uZQorLlBIT05ZOiBhbV9fZG9pdAorRU5ECisjIElmIHdlIGRvbid0IGZpbmQgYW4gaW5jbHVkZSBkaXJlY3RpdmUsIGp1c3QgY29tbWVudCBvdXQgdGhlIGNvZGUuCitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBzdHlsZSBvZiBpbmNsdWRlIHVzZWQgYnkgJGFtX21ha2VdKQorYW1fX2luY2x1ZGU9IiMiCithbV9fcXVvdGU9CitfYW1fcmVzdWx0PW5vbmUKKyMgRmlyc3QgdHJ5IEdOVSBtYWtlIHN0eWxlIGluY2x1ZGUuCitlY2hvICJpbmNsdWRlIGNvbmZpbmMiID4gY29uZm1mCisjIFdlIGdyZXAgb3V0IGBFbnRlcmluZyBkaXJlY3RvcnknIGFuZCBgTGVhdmluZyBkaXJlY3RvcnknCisjIG1lc3NhZ2VzIHdoaWNoIGNhbiBvY2N1ciBpZiBgdycgZW5kcyB1cCBpbiBNQUtFRkxBR1MuCisjIEluIHBhcnRpY3VsYXIgd2UgZG9uJ3QgbG9vayBhdCBgXm1ha2U6JyBiZWNhdXNlIEdOVSBtYWtlIG1pZ2h0CisjIGJlIGludm9rZWQgdW5kZXIgc29tZSBvdGhlciBuYW1lICh1c3VhbGx5ICJnbWFrZSIpLCBpbiB3aGljaAorIyBjYXNlIGl0IHByaW50cyBpdHMgbmV3IG5hbWUgaW5zdGVhZCBvZiBgbWFrZScuCitpZiB0ZXN0ICJgJGFtX21ha2UgLXMgLWYgY29uZm1mIDI+IC9kZXYvbnVsbCB8IGdyZXAgLXYgJ2luZyBkaXJlY3RvcnknYCIgPSAiZG9uZSI7IHRoZW4KKyAgIGFtX19pbmNsdWRlPWluY2x1ZGUKKyAgIGFtX19xdW90ZT0KKyAgIF9hbV9yZXN1bHQ9R05VCitmaQorIyBOb3cgdHJ5IEJTRCBtYWtlIHN0eWxlIGluY2x1ZGUuCitpZiB0ZXN0ICIkYW1fX2luY2x1ZGUiID0gIiMiOyB0aGVuCisgICBlY2hvICcuaW5jbHVkZSAiY29uZmluYyInID4gY29uZm1mCisgICBpZiB0ZXN0ICJgJGFtX21ha2UgLXMgLWYgY29uZm1mIDI+IC9kZXYvbnVsbGAiID0gImRvbmUiOyB0aGVuCisgICAgICBhbV9faW5jbHVkZT0uaW5jbHVkZQorICAgICAgYW1fX3F1b3RlPSJcIiIKKyAgICAgIF9hbV9yZXN1bHQ9QlNECisgICBmaQorZmkKK0FDX1NVQlNUKFthbV9faW5jbHVkZV0pCitBQ19TVUJTVChbYW1fX3F1b3RlXSkKK0FDX01TR19SRVNVTFQoWyRfYW1fcmVzdWx0XSkKK3JtIC1mIGNvbmZpbmMgY29uZm1mCitdKQorCisjIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNQorIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCA1CisKKyMgQU1fUFJPR19DQ19DX08KKyMgLS0tLS0tLS0tLS0tLS0KKyMgTGlrZSBBQ19QUk9HX0NDX0NfTywgYnV0IGNoYW5nZWQgZm9yIGF1dG9tYWtlLgorQUNfREVGVU4oW0FNX1BST0dfQ0NfQ19PXSwKK1tBQ19SRVFVSVJFKFtBQ19QUk9HX0NDX0NfT10pZG5sCitBQ19SRVFVSVJFKFtBTV9BVVhfRElSX0VYUEFORF0pZG5sCitBQ19SRVFVSVJFX0FVWF9GSUxFKFtjb21waWxlXSlkbmwKKyMgRklYTUU6IHdlIHJlbHkgb24gdGhlIGNhY2hlIHZhcmlhYmxlIG5hbWUgYmVjYXVzZQorIyB0aGVyZSBpcyBubyBvdGhlciB3YXkuCitzZXQgZHVtbXkgJENDCithY19jYz1gZWNobyAkWzJdIHwgc2VkIFsncy9bXmEtekEtWjAtOV9dL18vZztzL15bMC05XS9fLyddYAoraWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfcHJvZ19jY18nJHthY19jY31fY19vYFwiICE9IHllcyI7IHRoZW4KKyAgICMgTG9zaW5nIGNvbXBpbGVyLCBzbyBvdmVycmlkZSB3aXRoIHRoZSBzY3JpcHQuCisgICAjIEZJWE1FOiBJdCBpcyB3cm9uZyB0byByZXdyaXRlIENDLgorICAgIyBCdXQgaWYgd2UgZG9uJ3QgdGhlbiB3ZSBnZXQgaW50byB0cm91YmxlIG9mIG9uZSBzb3J0IG9yIGFub3RoZXIuCisgICAjIEEgbG9uZ2VyLXRlcm0gZml4IHdvdWxkIGJlIHRvIGhhdmUgYXV0b21ha2UgdXNlIGFtX19DQyBpbiB0aGlzIGNhc2UsCisgICAjIGFuZCB0aGVuIHdlIGNvdWxkIHNldCBhbV9fQ0M9IlwkKHRvcF9zcmNkaXIpL2NvbXBpbGUgXCQoQ0MpIgorICAgQ0M9IiRhbV9hdXhfZGlyL2NvbXBpbGUgJENDIgorZmkKK2RubCBNYWtlIHN1cmUgQUNfUFJPR19DQyBpcyBuZXZlciBjYWxsZWQgYWdhaW4sIG9yIGl0IHdpbGwgb3ZlcnJpZGUgb3VyCitkbmwgc2V0dGluZyBvZiBDQy4KK200X2RlZmluZShbQUNfUFJPR19DQ10sCisgICAgICAgICAgW200X2ZhdGFsKFtBQ19QUk9HX0NDIGNhbm5vdCBiZSBjYWxsZWQgYWZ0ZXIgQU1fUFJPR19DQ19DX09dKV0pCitdKQorCisjIEZha2UgdGhlIGV4aXN0ZW5jZSBvZiBwcm9ncmFtcyB0aGF0IEdOVSBtYWludGFpbmVycyB1c2UuICAtKi0gQXV0b2NvbmYgLSotCisKKyMgQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1CisjIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDUKKworIyBBTV9NSVNTSU5HX1BST0coTkFNRSwgUFJPR1JBTSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQU1fTUlTU0lOR19QUk9HXSwKK1tBQ19SRVFVSVJFKFtBTV9NSVNTSU5HX0hBU19SVU5dKQorJDE9JHskMS0iJHthbV9taXNzaW5nX3J1bn0kMiJ9CitBQ19TVUJTVCgkMSldKQorCisKKyMgQU1fTUlTU0lOR19IQVNfUlVOCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBEZWZpbmUgTUlTU0lORyBpZiBub3QgZGVmaW5lZCBzbyBmYXIgYW5kIHRlc3QgaWYgaXQgc3VwcG9ydHMgLS1ydW4uCisjIElmIGl0IGRvZXMsIHNldCBhbV9taXNzaW5nX3J1biB0byB1c2UgaXQsIG90aGVyd2lzZSwgdG8gbm90aGluZy4KK0FDX0RFRlVOKFtBTV9NSVNTSU5HX0hBU19SVU5dLAorW0FDX1JFUVVJUkUoW0FNX0FVWF9ESVJfRVhQQU5EXSlkbmwKK0FDX1JFUVVJUkVfQVVYX0ZJTEUoW21pc3NpbmddKWRubAordGVzdCB4IiR7TUlTU0lORytzZXR9IiA9IHhzZXQgfHwgTUlTU0lORz0iXCR7U0hFTEx9ICRhbV9hdXhfZGlyL21pc3NpbmciCisjIFVzZSBldmFsIHRvIGV4cGFuZCAkU0hFTEwKK2lmIGV2YWwgIiRNSVNTSU5HIC0tcnVuIHRydWUiOyB0aGVuCisgIGFtX21pc3NpbmdfcnVuPSIkTUlTU0lORyAtLXJ1biAiCitlbHNlCisgIGFtX21pc3NpbmdfcnVuPQorICBBQ19NU0dfV0FSTihbYG1pc3NpbmcnIHNjcmlwdCBpcyB0b28gb2xkIG9yIG1pc3NpbmddKQorZmkKK10pCisKKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIEFNX1BST0dfTUtESVJfUAorIyAtLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgZm9yIGBta2RpciAtcCcuCitBQ19ERUZVTihbQU1fUFJPR19NS0RJUl9QXSwKK1tBQ19QUkVSRVEoWzIuNjBdKWRubAorQUNfUkVRVUlSRShbQUNfUFJPR19NS0RJUl9QXSlkbmwKK2RubCBBdXRvbWFrZSAxLjggdG8gMS45LjYgdXNlZCB0byBkZWZpbmUgbWtkaXJfcC4gIFdlIG5vdyB1c2UgTUtESVJfUCwKK2RubCB3aGlsZSBrZWVwaW5nIGEgZGVmaW5pdGlvbiBvZiBta2Rpcl9wIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorZG5sIEBNS0RJUl9QQCBpcyBtYWdpYzogQUNfT1VUUFVUIGFkanVzdHMgaXRzIHZhbHVlIGZvciBlYWNoIE1ha2VmaWxlLgorZG5sIEhvd2V2ZXIgd2UgY2Fubm90IGRlZmluZSBta2Rpcl9wIGFzICQoTUtESVJfUCkgZm9yIHRoZSBzYWtlIG9mCitkbmwgTWFrZWZpbGUuaW5zIHRoYXQgZG8gbm90IGRlZmluZSBNS0RJUl9QLCBzbyB3ZSBkbyBvdXIgb3duCitkbmwgYWRqdXN0bWVudCB1c2luZyB0b3BfYnVpbGRkaXIgKHdoaWNoIGlzIGRlZmluZWQgbW9yZSBvZnRlbiB0aGFuCitkbmwgTUtESVJfUCkuCitBQ19TVUJTVChbbWtkaXJfcF0sIFsiJE1LRElSX1AiXSlkbmwKK2Nhc2UgJG1rZGlyX3AgaW4KKyAgW1tcXC8kXV0qIHwgPzpbW1xcL11dKikgOzsKKyAgKi8qKSBta2Rpcl9wPSJcJCh0b3BfYnVpbGRkaXIpLyRta2Rpcl9wIiA7OworZXNhYworXSkKKworIyBIZWxwZXIgZnVuY3Rpb25zIGZvciBvcHRpb24gaGFuZGxpbmcuICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorCisjIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgMworCisjIF9BTV9NQU5HTEVfT1BUSU9OKE5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbX0FNX01BTkdMRV9PUFRJT05dLAorW1tfQU1fT1BUSU9OX11tNF9icGF0c3Vic3QoJDEsIFtbXmEtekEtWjAtOV9dXSwgW19dKV0pCisKKyMgX0FNX1NFVF9PUFRJT04oTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNldCBvcHRpb24gTkFNRS4gIFByZXNlbnRseSB0aGF0IG9ubHkgbWVhbnMgZGVmaW5pbmcgYSBmbGFnIGZvciB0aGlzIG9wdGlvbi4KK0FDX0RFRlVOKFtfQU1fU0VUX09QVElPTl0sCitbbTRfZGVmaW5lKF9BTV9NQU5HTEVfT1BUSU9OKFskMV0pLCAxKV0pCisKKyMgX0FNX1NFVF9PUFRJT05TKE9QVElPTlMpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgT1BUSU9OUyBpcyBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIEF1dG9tYWtlIG9wdGlvbnMuCitBQ19ERUZVTihbX0FNX1NFVF9PUFRJT05TXSwKK1tBQ19GT1JFQUNIKFtfQU1fT3B0aW9uXSwgWyQxXSwgW19BTV9TRVRfT1BUSU9OKF9BTV9PcHRpb24pXSldKQorCisjIF9BTV9JRl9PUFRJT04oT1BUSU9OLCBJRi1TRVQsIFtJRi1OT1QtU0VUXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFeGVjdXRlIElGLVNFVCBpZiBPUFRJT04gaXMgc2V0LCBJRi1OT1QtU0VUIG90aGVyd2lzZS4KK0FDX0RFRlVOKFtfQU1fSUZfT1BUSU9OXSwKK1ttNF9pZnNldChfQU1fTUFOR0xFX09QVElPTihbJDFdKSwgWyQyXSwgWyQzXSldKQorCisjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBidWlsZCBlbnZpcm9ubWVudCBpcyBzYW5lLiAgICAtKi0gQXV0b2NvbmYgLSotCisKKyMgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA1CisjIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDQKKworIyBBTV9TQU5JVFlfQ0hFQ0sKKyMgLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQU1fU0FOSVRZX0NIRUNLXSwKK1tBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgYnVpbGQgZW52aXJvbm1lbnQgaXMgc2FuZV0pCisjIEp1c3QgaW4gY2FzZQorc2xlZXAgMQorZWNobyB0aW1lc3RhbXAgPiBjb25mdGVzdC5maWxlCisjIERvIGBzZXQnIGluIGEgc3Vic2hlbGwgc28gd2UgZG9uJ3QgY2xvYmJlciB0aGUgY3VycmVudCBzaGVsbCdzCisjIGFyZ3VtZW50cy4gIE11c3QgdHJ5IC1MIGZpcnN0IGluIGNhc2UgY29uZmlndXJlIGlzIGFjdHVhbGx5IGEKKyMgc3ltbGluazsgc29tZSBzeXN0ZW1zIHBsYXkgd2VpcmQgZ2FtZXMgd2l0aCB0aGUgbW9kIHRpbWUgb2Ygc3ltbGlua3MKKyMgKGVnIEZyZWVCU0QgcmV0dXJucyB0aGUgbW9kIHRpbWUgb2YgdGhlIHN5bWxpbmsncyBjb250YWluaW5nCisjIGRpcmVjdG9yeSkuCitpZiAoCisgICBzZXQgWCBgbHMgLUx0ICRzcmNkaXIvY29uZmlndXJlIGNvbmZ0ZXN0LmZpbGUgMj4gL2Rldi9udWxsYAorICAgaWYgdGVzdCAiJFsqXSIgPSAiWCI7IHRoZW4KKyAgICAgICMgLUwgZGlkbid0IHdvcmsuCisgICAgICBzZXQgWCBgbHMgLXQgJHNyY2Rpci9jb25maWd1cmUgY29uZnRlc3QuZmlsZWAKKyAgIGZpCisgICBybSAtZiBjb25mdGVzdC5maWxlCisgICBpZiB0ZXN0ICIkWypdIiAhPSAiWCAkc3JjZGlyL2NvbmZpZ3VyZSBjb25mdGVzdC5maWxlIiBcCisgICAgICAmJiB0ZXN0ICIkWypdIiAhPSAiWCBjb25mdGVzdC5maWxlICRzcmNkaXIvY29uZmlndXJlIjsgdGhlbgorCisgICAgICAjIElmIG5laXRoZXIgbWF0Y2hlZCwgdGhlbiB3ZSBoYXZlIGEgYnJva2VuIGxzLiAgVGhpcyBjYW4gaGFwcGVuCisgICAgICAjIGlmLCBmb3IgaW5zdGFuY2UsIENPTkZJR19TSEVMTCBpcyBiYXNoIGFuZCBpdCBpbmhlcml0cyBhCisgICAgICAjIGJyb2tlbiBscyBhbGlhcyBmcm9tIHRoZSBlbnZpcm9ubWVudC4gIFRoaXMgaGFzIGFjdHVhbGx5CisgICAgICAjIGhhcHBlbmVkLiAgU3VjaCBhIHN5c3RlbSBjb3VsZCBub3QgYmUgY29uc2lkZXJlZCAic2FuZSIuCisgICAgICBBQ19NU0dfRVJST1IoW2xzIC10IGFwcGVhcnMgdG8gZmFpbC4gIE1ha2Ugc3VyZSB0aGVyZSBpcyBub3QgYSBicm9rZW4KK2FsaWFzIGluIHlvdXIgZW52aXJvbm1lbnRdKQorICAgZmkKKworICAgdGVzdCAiJFsyXSIgPSBjb25mdGVzdC5maWxlCisgICApCit0aGVuCisgICAjIE9rLgorICAgOgorZWxzZQorICAgQUNfTVNHX0VSUk9SKFtuZXdseSBjcmVhdGVkIGZpbGUgaXMgb2xkZXIgdGhhbiBkaXN0cmlidXRlZCBmaWxlcyEKK0NoZWNrIHlvdXIgc3lzdGVtIGNsb2NrXSkKK2ZpCitBQ19NU0dfUkVTVUxUKHllcyldKQorCisjIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMywgMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBBTV9QUk9HX0lOU1RBTExfU1RSSVAKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE9uZSBpc3N1ZSB3aXRoIHZlbmRvciBgaW5zdGFsbCcgKGV2ZW4gR05VKSBpcyB0aGF0IHlvdSBjYW4ndAorIyBzcGVjaWZ5IHRoZSBwcm9ncmFtIHVzZWQgdG8gc3RyaXAgYmluYXJpZXMuICBUaGlzIGlzIGVzcGVjaWFsbHkKKyMgYW5ub3lpbmcgaW4gY3Jvc3MtY29tcGlsaW5nIGVudmlyb25tZW50cywgd2hlcmUgdGhlIGJ1aWxkJ3Mgc3RyaXAKKyMgaXMgdW5saWtlbHkgdG8gaGFuZGxlIHRoZSBob3N0J3MgYmluYXJpZXMuCisjIEZvcnR1bmF0ZWx5IGluc3RhbGwtc2ggd2lsbCBob25vciBhIFNUUklQUFJPRyB2YXJpYWJsZSwgc28gd2UKKyMgYWx3YXlzIHVzZSBpbnN0YWxsLXNoIGluIGBtYWtlIGluc3RhbGwtc3RyaXAnLCBhbmQgaW5pdGlhbGl6ZQorIyBTVFJJUFBST0cgd2l0aCB0aGUgdmFsdWUgb2YgdGhlIFNUUklQIHZhcmlhYmxlIChzZXQgYnkgdGhlIHVzZXIpLgorQUNfREVGVU4oW0FNX1BST0dfSU5TVEFMTF9TVFJJUF0sCitbQUNfUkVRVUlSRShbQU1fUFJPR19JTlNUQUxMX1NIXSlkbmwKKyMgSW5zdGFsbGVkIGJpbmFyaWVzIGFyZSB1c3VhbGx5IHN0cmlwcGVkIHVzaW5nIGBzdHJpcCcgd2hlbiB0aGUgdXNlcgorIyBydW4gYG1ha2UgaW5zdGFsbC1zdHJpcCcuICBIb3dldmVyIGBzdHJpcCcgbWlnaHQgbm90IGJlIHRoZSByaWdodAorIyB0b29sIHRvIHVzZSBpbiBjcm9zcy1jb21waWxhdGlvbiBlbnZpcm9ubWVudHMsIHRoZXJlZm9yZSBBdXRvbWFrZQorIyB3aWxsIGhvbm9yIHRoZSBgU1RSSVAnIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIG92ZXJydWxlIHRoaXMgcHJvZ3JhbS4KK2RubCBEb24ndCB0ZXN0IGZvciAkY3Jvc3NfY29tcGlsaW5nID0geWVzLCBiZWNhdXNlIGl0IG1pZ2h0IGJlIGBtYXliZScuCitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiAhPSBubzsgdGhlbgorICBBQ19DSEVDS19UT09MKFtTVFJJUF0sIFtzdHJpcF0sIDopCitmaQorSU5TVEFMTF9TVFJJUF9QUk9HUkFNPSJcJChpbnN0YWxsX3NoKSAtYyAtcyIKK0FDX1NVQlNUKFtJTlNUQUxMX1NUUklQX1BST0dSQU1dKV0pCisKKyMgQ29weXJpZ2h0IChDKSAyMDA2ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIF9BTV9TVUJTVF9OT1RNQUtFKFZBUklBQkxFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJldmVudCBBdXRvbWFrZSBmcm9tIG91dHB1dGluZyBWQVJJQUJMRSA9IEBWQVJJQUJMRUAgaW4gTWFrZWZpbGUuaW4uCisjIFRoaXMgbWFjcm8gaXMgdHJhY2VkIGJ5IEF1dG9tYWtlLgorQUNfREVGVU4oW19BTV9TVUJTVF9OT1RNQUtFXSkKKworIyBDaGVjayBob3cgdG8gY3JlYXRlIGEgdGFyYmFsbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorCisjIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgMgorCisjIF9BTV9QUk9HX1RBUihGT1JNQVQpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIGhvdyB0byBjcmVhdGUgYSB0YXJiYWxsIGluIGZvcm1hdCBGT1JNQVQuCisjIEZPUk1BVCBzaG91bGQgYmUgb25lIG9mIGB2NycsIGB1c3RhcicsIG9yIGBwYXgnLgorIworIyBTdWJzdGl0dXRlIGEgdmFyaWFibGUgJChhbV9fdGFyKSB0aGF0IGlzIGEgY29tbWFuZAorIyB3cml0aW5nIHRvIHN0ZG91dCBhIEZPUk1BVC10YXJiYWxsIGNvbnRhaW5pbmcgdGhlIGRpcmVjdG9yeQorIyAkdGFyZGlyLgorIyAgICAgdGFyZGlyPWRpcmVjdG9yeSAmJiAkKGFtX190YXIpID4gcmVzdWx0LnRhcgorIworIyBTdWJzdGl0dXRlIGEgdmFyaWFibGUgJChhbV9fdW50YXIpIHRoYXQgZXh0cmFjdCBzdWNoCisjIGEgdGFyYmFsbCByZWFkIGZyb20gc3RkaW4uCisjICAgICAkKGFtX191bnRhcikgPCByZXN1bHQudGFyCitBQ19ERUZVTihbX0FNX1BST0dfVEFSXSwKK1sjIEFsd2F5cyBkZWZpbmUgQU1UQVIgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCitBTV9NSVNTSU5HX1BST0coW0FNVEFSXSwgW3Rhcl0pCittNF9pZihbJDFdLCBbdjddLAorICAgICBbYW1fX3Rhcj0nJHtBTVRBUn0gY2hvZiAtICIkJHRhcmRpciInOyBhbV9fdW50YXI9JyR7QU1UQVJ9IHhmIC0nXSwKKyAgICAgW200X2Nhc2UoWyQxXSwgW3VzdGFyXSwsIFtwYXhdLCwKKyAgICAgICAgICAgICAgW200X2ZhdGFsKFtVbmtub3duIHRhciBmb3JtYXRdKV0pCitBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBjcmVhdGUgYSAkMSB0YXIgYXJjaGl2ZV0pCisjIExvb3Agb3ZlciBhbGwga25vd24gbWV0aG9kcyB0byBjcmVhdGUgYSB0YXIgYXJjaGl2ZSB1bnRpbCBvbmUgd29ya3MuCitfYW1fdG9vbHM9J2dudXRhciBtNF9pZihbJDFdLCBbdXN0YXJdLCBbcGxhaW50YXJdKSBwYXggY3BpbyBub25lJworX2FtX3Rvb2xzPSR7YW1fY3ZfcHJvZ190YXJfJDEtJF9hbV90b29sc30KKyMgRG8gbm90IGZvbGQgdGhlIGFib3ZlIHR3byBsaW5lIGludG8gb25lLCBiZWNhdXNlIFRydTY0IHNoIGFuZAorIyBTb2xhcmlzIHNoIHdpbGwgbm90IGdyb2sgc3BhY2VzIGluIHRoZSByaHMgb2YgYC0nLgorZm9yIF9hbV90b29sIGluICRfYW1fdG9vbHMKK2RvCisgIGNhc2UgJF9hbV90b29sIGluCisgIGdudXRhcikKKyAgICBmb3IgX2FtX3RhciBpbiB0YXIgZ251dGFyIGd0YXI7CisgICAgZG8KKyAgICAgIEFNX1JVTl9MT0coWyRfYW1fdGFyIC0tdmVyc2lvbl0pICYmIGJyZWFrCisgICAgZG9uZQorICAgIGFtX190YXI9IiRfYW1fdGFyIC0tZm9ybWF0PW00X2lmKFskMV0sIFtwYXhdLCBbcG9zaXhdLCBbJDFdKSAtY2hmIC0gIiciJCR0YXJkaXIiJworICAgIGFtX190YXJfPSIkX2FtX3RhciAtLWZvcm1hdD1tNF9pZihbJDFdLCBbcGF4XSwgW3Bvc2l4XSwgWyQxXSkgLWNoZiAtICInIiR0YXJkaXIiJworICAgIGFtX191bnRhcj0iJF9hbV90YXIgLXhmIC0iCisgICAgOzsKKyAgcGxhaW50YXIpCisgICAgIyBNdXN0IHNraXAgR05VIHRhcjogaWYgaXQgZG9lcyBub3Qgc3VwcG9ydCAtLWZvcm1hdD0gaXQgZG9lc24ndCBjcmVhdGUKKyAgICAjIHVzdGFyIHRhcmJhbGwgZWl0aGVyLgorICAgICh0YXIgLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjEgJiYgY29udGludWUKKyAgICBhbV9fdGFyPSd0YXIgY2hmIC0gIiQkdGFyZGlyIicKKyAgICBhbV9fdGFyXz0ndGFyIGNoZiAtICIkdGFyZGlyIicKKyAgICBhbV9fdW50YXI9J3RhciB4ZiAtJworICAgIDs7CisgIHBheCkKKyAgICBhbV9fdGFyPSdwYXggLUwgLXggJDEgLXcgIiQkdGFyZGlyIicKKyAgICBhbV9fdGFyXz0ncGF4IC1MIC14ICQxIC13ICIkdGFyZGlyIicKKyAgICBhbV9fdW50YXI9J3BheCAtcicKKyAgICA7OworICBjcGlvKQorICAgIGFtX190YXI9J2ZpbmQgIiQkdGFyZGlyIiAtcHJpbnQgfCBjcGlvIC1vIC1IICQxIC1MJworICAgIGFtX190YXJfPSdmaW5kICIkdGFyZGlyIiAtcHJpbnQgfCBjcGlvIC1vIC1IICQxIC1MJworICAgIGFtX191bnRhcj0nY3BpbyAtaSAtSCAkMSAtZCcKKyAgICA7OworICBub25lKQorICAgIGFtX190YXI9ZmFsc2UKKyAgICBhbV9fdGFyXz1mYWxzZQorICAgIGFtX191bnRhcj1mYWxzZQorICAgIDs7CisgIGVzYWMKKworICAjIElmIHRoZSB2YWx1ZSB3YXMgY2FjaGVkLCBzdG9wIG5vdy4gIFdlIGp1c3Qgd2FudGVkIHRvIGhhdmUgYW1fX3RhcgorICAjIGFuZCBhbV9fdW50YXIgc2V0LgorICB0ZXN0IC1uICIke2FtX2N2X3Byb2dfdGFyXyQxfSIgJiYgYnJlYWsKKworICAjIHRhci91bnRhciBhIGR1bW15IGRpcmVjdG9yeSwgYW5kIHN0b3AgaWYgdGhlIGNvbW1hbmQgd29ya3MKKyAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgorICBta2RpciBjb25mdGVzdC5kaXIKKyAgZWNobyBHcmVwTWUgPiBjb25mdGVzdC5kaXIvZmlsZQorICBBTV9SVU5fTE9HKFt0YXJkaXI9Y29uZnRlc3QuZGlyICYmIGV2YWwgJGFtX190YXJfID5jb25mdGVzdC50YXJdKQorICBybSAtcmYgY29uZnRlc3QuZGlyCisgIGlmIHRlc3QgLXMgY29uZnRlc3QudGFyOyB0aGVuCisgICAgQU1fUlVOX0xPRyhbJGFtX191bnRhciA8Y29uZnRlc3QudGFyXSkKKyAgICBncmVwIEdyZXBNZSBjb25mdGVzdC5kaXIvZmlsZSA+L2Rldi9udWxsIDI+JjEgJiYgYnJlYWsKKyAgZmkKK2RvbmUKK3JtIC1yZiBjb25mdGVzdC5kaXIKKworQUNfQ0FDSEVfVkFMKFthbV9jdl9wcm9nX3Rhcl8kMV0sIFthbV9jdl9wcm9nX3Rhcl8kMT0kX2FtX3Rvb2xdKQorQUNfTVNHX1JFU1VMVChbJGFtX2N2X3Byb2dfdGFyXyQxXSldKQorQUNfU1VCU1QoW2FtX190YXJdKQorQUNfU1VCU1QoW2FtX191bnRhcl0pCitdKSAjIF9BTV9QUk9HX1RBUgorCittNF9pbmNsdWRlKFttNC9hYnNvbHV0ZS1oZWFkZXIubTRdKQorbTRfaW5jbHVkZShbbTQvYWxsb2NhLm00XSkKK200X2luY2x1ZGUoW200L2Fzc2VydC5tNF0pCittNF9pbmNsdWRlKFttNC9hdGV4aXQubTRdKQorbTRfaW5jbHVkZShbbTQvY2FsbG9jLm00XSkKK200X2luY2x1ZGUoW200L2Nsb3NlLXN0cmVhbS5tNF0pCittNF9pbmNsdWRlKFttNC9jbG9zZW91dC5tNF0pCittNF9pbmNsdWRlKFttNC9jb2Rlc2V0Lm00XSkKK200X2luY2x1ZGUoW200L2NvbmZpZy1oLm00XSkKK200X2luY2x1ZGUoW200L2Rpcm5hbWUubTRdKQorbTRfaW5jbHVkZShbbTQvZG9zLm00XSkKK200X2luY2x1ZGUoW200L2RvdWJsZS1zbGFzaC1yb290Lm00XSkKK200X2luY2x1ZGUoW200L2Vycm9yLm00XSkKK200X2luY2x1ZGUoW200L2V4aXRmYWlsLm00XSkKK200X2luY2x1ZGUoW200L2V4dGVuc2lvbnMubTRdKQorbTRfaW5jbHVkZShbbTQvZnBlbmRpbmcubTRdKQorbTRfaW5jbHVkZShbbTQvZnJlZS5tNF0pCittNF9pbmNsdWRlKFttNC9nZXRvcHQubTRdKQorbTRfaW5jbHVkZShbbTQvZ2V0dGV4dC5tNF0pCittNF9pbmNsdWRlKFttNC9nbGliYzIxLm00XSkKK200X2luY2x1ZGUoW200L2dudWxpYi1jb21tb24ubTRdKQorbTRfaW5jbHVkZShbbTQvZ251bGliLWNvbXAubTRdKQorbTRfaW5jbHVkZShbbTQvaWNvbnYubTRdKQorbTRfaW5jbHVkZShbbTQvaW5saW5lLm00XSkKK200X2luY2x1ZGUoW200L2ludHR5cGVzLXByaS5tNF0pCittNF9pbmNsdWRlKFttNC9pbnR0eXBlcy5tNF0pCittNF9pbmNsdWRlKFttNC9saWItaWdub3JlLm00XSkKK200X2luY2x1ZGUoW200L2xpYi1sZC5tNF0pCittNF9pbmNsdWRlKFttNC9saWItbGluay5tNF0pCittNF9pbmNsdWRlKFttNC9saWItcHJlZml4Lm00XSkKK200X2luY2x1ZGUoW200L2xvY2FsY2hhcnNldC5tNF0pCittNF9pbmNsdWRlKFttNC9sb25nLW9wdGlvbnMubTRdKQorbTRfaW5jbHVkZShbbTQvbG9uZ2xvbmcubTRdKQorbTRfaW5jbHVkZShbbTQvbWJydG93Yy5tNF0pCittNF9pbmNsdWRlKFttNC9tYnN0YXRlX3QubTRdKQorbTRfaW5jbHVkZShbbTQvbWVtY2hyLm00XSkKK200X2luY2x1ZGUoW200L21lbWNtcC5tNF0pCittNF9pbmNsdWRlKFttNC9tZW1jcHkubTRdKQorbTRfaW5jbHVkZShbbTQvbWVtbW92ZS5tNF0pCittNF9pbmNsdWRlKFttNC9tZW1zZXQubTRdKQorbTRfaW5jbHVkZShbbTQvbmxzLm00XSkKK200X2luY2x1ZGUoW200L3BvLm00XSkKK200X2luY2x1ZGUoW200L3Byb2d0ZXN0Lm00XSkKK200X2luY2x1ZGUoW200L3F1b3RlYXJnLm00XSkKK200X2luY2x1ZGUoW200L3JlZ2V4Lm00XSkKK200X2luY2x1ZGUoW200L3JlbmFtZS5tNF0pCittNF9pbmNsdWRlKFttNC9ycG1hdGNoLm00XSkKK200X2luY2x1ZGUoW200L3NhZmUtcmVhZC5tNF0pCittNF9pbmNsdWRlKFttNC9zYWZlLXdyaXRlLm00XSkKK200X2luY2x1ZGUoW200L3NzaXplX3QubTRdKQorbTRfaW5jbHVkZShbbTQvc3RkYXJnLm00XSkKK200X2luY2x1ZGUoW200L3N0ZGJvb2wubTRdKQorbTRfaW5jbHVkZShbbTQvc3RkaW50Lm00XSkKK200X2luY2x1ZGUoW200L3N0ZGxpYl9oLm00XSkKK200X2luY2x1ZGUoW200L3N0cmNzcG4ubTRdKQorbTRfaW5jbHVkZShbbTQvc3RyaW5nX2gubTRdKQorbTRfaW5jbHVkZShbbTQvc3RybmR1cC5tNF0pCittNF9pbmNsdWRlKFttNC9zdHJubGVuLm00XSkKK200X2luY2x1ZGUoW200L3N0cnRvZC5tNF0pCittNF9pbmNsdWRlKFttNC9zdHJ0b2wubTRdKQorbTRfaW5jbHVkZShbbTQvdW5pc3RkX2gubTRdKQorbTRfaW5jbHVkZShbbTQvdXRpbWJ1Zi5tNF0pCittNF9pbmNsdWRlKFttNC91dGltZS5tNF0pCittNF9pbmNsdWRlKFttNC91dGltZXMtbnVsbC5tNF0pCittNF9pbmNsdWRlKFttNC93Y2hhci5tNF0pCittNF9pbmNsdWRlKFttNC93Y3R5cGUubTRdKQorbTRfaW5jbHVkZShbbTQvd2ludF90Lm00XSkKK200X2luY2x1ZGUoW200L3hhbGxvYy5tNF0pCittNF9pbmNsdWRlKFttNC94c3RybmR1cC5tNF0pCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvYnVpbGQtYXV4L2NvbXBpbGUgYi9wYXJ0ZWQtMS44LjcvYnVpbGQtYXV4L2NvbXBpbGUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWIxZDIzMgotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9idWlsZC1hdXgvY29tcGlsZQpAQCAtMCwwICsxLDE0MiBAQAorIyEgL2Jpbi9zaAorIyBXcmFwcGVyIGZvciBjb21waWxlcnMgd2hpY2ggZG8gbm90IHVuZGVyc3RhbmQgYC1jIC1vJy4KKworc2NyaXB0dmVyc2lvbj0yMDA1LTA1LTE0LjIyCisKKyMgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAzLCAyMDA0LCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBXcml0dGVuIGJ5IFRvbSBUcm9tZXkgPHRyb21leUBjeWdudXMuY29tPi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKKyMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKyMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCisjIFRoaXMgZmlsZSBpcyBtYWludGFpbmVkIGluIEF1dG9tYWtlLCBwbGVhc2UgcmVwb3J0CisjIGJ1Z3MgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPiBvciBzZW5kIHBhdGNoZXMgdG8KKyMgPGF1dG9tYWtlLXBhdGNoZXNAZ251Lm9yZz4uCisKK2Nhc2UgJDEgaW4KKyAgJycpCisgICAgIGVjaG8gIiQwOiBObyBjb21tYW5kLiAgVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iIDE+JjIKKyAgICAgZXhpdCAxOworICAgICA7OworICAtaCB8IC0taCopCisgICAgY2F0IDw8XEVPRgorVXNhZ2U6IGNvbXBpbGUgWy0taGVscF0gWy0tdmVyc2lvbl0gUFJPR1JBTSBbQVJHU10KKworV3JhcHBlciBmb3IgY29tcGlsZXJzIHdoaWNoIGRvIG5vdCB1bmRlcnN0YW5kIGAtYyAtbycuCitSZW1vdmUgYC1vIGRlc3QubycgZnJvbSBBUkdTLCBydW4gUFJPR1JBTSB3aXRoIHRoZSByZW1haW5pbmcKK2FyZ3VtZW50cywgYW5kIHJlbmFtZSB0aGUgb3V0cHV0IGFzIGV4cGVjdGVkLgorCitJZiB5b3UgYXJlIHRyeWluZyB0byBidWlsZCBhIHdob2xlIHBhY2thZ2UgdGhpcyBpcyBub3QgdGhlCityaWdodCBzY3JpcHQgdG8gcnVuOiBwbGVhc2Ugc3RhcnQgYnkgcmVhZGluZyB0aGUgZmlsZSBgSU5TVEFMTCcuCisKK1JlcG9ydCBidWdzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4uCitFT0YKKyAgICBleGl0ICQ/CisgICAgOzsKKyAgLXYgfCAtLXYqKQorICAgIGVjaG8gImNvbXBpbGUgJHNjcmlwdHZlcnNpb24iCisgICAgZXhpdCAkPworICAgIDs7Citlc2FjCisKK29maWxlPQorY2ZpbGU9CitlYXQ9CisKK2ZvciBhcmcKK2RvCisgIGlmIHRlc3QgLW4gIiRlYXQiOyB0aGVuCisgICAgZWF0PQorICBlbHNlCisgICAgY2FzZSAkMSBpbgorICAgICAgLW8pCisJIyBjb25maWd1cmUgbWlnaHQgY2hvb3NlIHRvIHJ1biBjb21waWxlIGFzIGBjb21waWxlIGNjIC1vIGZvbyBmb28uYycuCisJIyBTbyB3ZSBzdHJpcCBgLW8gYXJnJyBvbmx5IGlmIGFyZyBpcyBhbiBvYmplY3QuCisJZWF0PTEKKwljYXNlICQyIGluCisJICAqLm8gfCAqLm9iaikKKwkgICAgb2ZpbGU9JDIKKwkgICAgOzsKKwkgICopCisJICAgIHNldCB4ICIkQCIgLW8gIiQyIgorCSAgICBzaGlmdAorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgKi5jKQorCWNmaWxlPSQxCisJc2V0IHggIiRAIiAiJDEiCisJc2hpZnQKKwk7OworICAgICAgKikKKwlzZXQgeCAiJEAiICIkMSIKKwlzaGlmdAorCTs7CisgICAgZXNhYworICBmaQorICBzaGlmdAorZG9uZQorCitpZiB0ZXN0IC16ICIkb2ZpbGUiIHx8IHRlc3QgLXogIiRjZmlsZSI7IHRoZW4KKyAgIyBJZiBubyBgLW8nIG9wdGlvbiB3YXMgc2VlbiB0aGVuIHdlIG1pZ2h0IGhhdmUgYmVlbiBpbnZva2VkIGZyb20gYQorICAjIHBhdHRlcm4gcnVsZSB3aGVyZSB3ZSBkb24ndCBuZWVkIG9uZS4gIFRoYXQgaXMgb2sgLS0gdGhpcyBpcyBhCisgICMgbm9ybWFsIGNvbXBpbGF0aW9uIHRoYXQgdGhlIGxvc2luZyBjb21waWxlciBjYW4gaGFuZGxlLiAgSWYgbm8KKyAgIyBgLmMnIGZpbGUgd2FzIHNlZW4gdGhlbiB3ZSBhcmUgcHJvYmFibHkgbGlua2luZy4gIFRoYXQgaXMgYWxzbworICAjIG9rLgorICBleGVjICIkQCIKK2ZpCisKKyMgTmFtZSBvZiBmaWxlIHdlIGV4cGVjdCBjb21waWxlciB0byBjcmVhdGUuCitjb2ZpbGU9YGVjaG8gIiRjZmlsZSIgfCBzZWQgLWUgJ3N8Xi4qL3x8JyAtZSAncy9cLmMkLy5vLydgCisKKyMgQ3JlYXRlIHRoZSBsb2NrIGRpcmVjdG9yeS4KKyMgTm90ZTogdXNlIGBbLy4tXScgaGVyZSB0byBlbnN1cmUgdGhhdCB3ZSBkb24ndCB1c2UgdGhlIHNhbWUgbmFtZQorIyB0aGF0IHdlIGFyZSB1c2luZyBmb3IgdGhlIC5vIGZpbGUuICBBbHNvLCBiYXNlIHRoZSBuYW1lIG9uIHRoZSBleHBlY3RlZAorIyBvYmplY3QgZmlsZSBuYW1lLCBzaW5jZSB0aGF0IGlzIHdoYXQgbWF0dGVycyB3aXRoIGEgcGFyYWxsZWwgYnVpbGQuCitsb2NrZGlyPWBlY2hvICIkY29maWxlIiB8IHNlZCAtZSAnc3xbLy4tXXxffGcnYC5kCit3aGlsZSB0cnVlOyBkbworICBpZiBta2RpciAiJGxvY2tkaXIiID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgIGJyZWFrCisgIGZpCisgIHNsZWVwIDEKK2RvbmUKKyMgRklYTUU6IHJhY2UgY29uZGl0aW9uIGhlcmUgaWYgdXNlciBraWxscyBiZXR3ZWVuIG1rZGlyIGFuZCB0cmFwLgordHJhcCAicm1kaXIgJyRsb2NrZGlyJzsgZXhpdCAxIiAxIDIgMTUKKworIyBSdW4gdGhlIGNvbXBpbGUuCisiJEAiCityZXQ9JD8KKworaWYgdGVzdCAtZiAiJGNvZmlsZSI7IHRoZW4KKyAgbXYgIiRjb2ZpbGUiICIkb2ZpbGUiCitlbGlmIHRlc3QgLWYgIiR7Y29maWxlfWJqIjsgdGhlbgorICBtdiAiJHtjb2ZpbGV9YmoiICIkb2ZpbGUiCitmaQorCitybWRpciAiJGxvY2tkaXIiCitleGl0ICRyZXQKKworIyBMb2NhbCBWYXJpYWJsZXM6CisjIG1vZGU6IHNoZWxsLXNjcmlwdAorIyBzaC1pbmRlbnRhdGlvbjogMgorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJzY3JpcHR2ZXJzaW9uPSIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkLiUwMkgiCisjIHRpbWUtc3RhbXAtZW5kOiAiJCIKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2J1aWxkLWF1eC9jb25maWcuZ3Vlc3MgYi9wYXJ0ZWQtMS44LjcvYnVpbGQtYXV4L2NvbmZpZy5ndWVzcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wZjBmZTcxCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2J1aWxkLWF1eC9jb25maWcuZ3Vlc3MKQEAgLTAsMCArMSwxNTE2IEBACisjISAvYmluL3NoCisjIEF0dGVtcHQgdG8gZ3Vlc3MgYSBjYW5vbmljYWwgc3lzdGVtIG5hbWUuCisjICAgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorIyAgIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyAgIEluYy4KKwordGltZXN0YW1wPScyMDA3LTAzLTA2JworCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisjIDAyMTEwLTEzMDEsIFVTQS4KKyMKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKKyMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKyMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCisKKyMgT3JpZ2luYWxseSB3cml0dGVuIGJ5IFBlciBCb3RobmVyIDxwZXJAYm90aG5lci5jb20+LgorIyBQbGVhc2Ugc2VuZCBwYXRjaGVzIHRvIDxjb25maWctcGF0Y2hlc0BnbnUub3JnPi4gIFN1Ym1pdCBhIGNvbnRleHQKKyMgZGlmZiBhbmQgYSBwcm9wZXJseSBmb3JtYXR0ZWQgQ2hhbmdlTG9nIGVudHJ5LgorIworIyBUaGlzIHNjcmlwdCBhdHRlbXB0cyB0byBndWVzcyBhIGNhbm9uaWNhbCBzeXN0ZW0gbmFtZSBzaW1pbGFyIHRvCisjIGNvbmZpZy5zdWIuICBJZiBpdCBzdWNjZWVkcywgaXQgcHJpbnRzIHRoZSBzeXN0ZW0gbmFtZSBvbiBzdGRvdXQsIGFuZAorIyBleGl0cyB3aXRoIDAuICBPdGhlcndpc2UsIGl0IGV4aXRzIHdpdGggMS4KKyMKKyMgVGhlIHBsYW4gaXMgdGhhdCB0aGlzIGNhbiBiZSBjYWxsZWQgYnkgY29uZmlndXJlIHNjcmlwdHMgaWYgeW91CisjIGRvbid0IHNwZWNpZnkgYW4gZXhwbGljaXQgYnVpbGQgc3lzdGVtIHR5cGUuCisKK21lPWBlY2hvICIkMCIgfCBzZWQgLWUgJ3MsLiovLCwnYAorCit1c2FnZT0iXAorVXNhZ2U6ICQwIFtPUFRJT05dCisKK091dHB1dCB0aGUgY29uZmlndXJhdGlvbiBuYW1lIG9mIHRoZSBzeXN0ZW0gXGAkbWUnIGlzIHJ1biBvbi4KKworT3BlcmF0aW9uIG1vZGVzOgorICAtaCwgLS1oZWxwICAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKKyAgLXQsIC0tdGltZS1zdGFtcCAgIHByaW50IGRhdGUgb2YgbGFzdCBtb2RpZmljYXRpb24sIHRoZW4gZXhpdAorICAtdiwgLS12ZXJzaW9uICAgICAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdAorCitSZXBvcnQgYnVncyBhbmQgcGF0Y2hlcyB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4uIgorCit2ZXJzaW9uPSJcCitHTlUgY29uZmlnLmd1ZXNzICgkdGltZXN0YW1wKQorCitPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgUGVyIEJvdGhuZXIuCitDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTword2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIgorCitoZWxwPSIKK1RyeSBcYCRtZSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKworIyBQYXJzZSBjb21tYW5kIGxpbmUKK3doaWxlIHRlc3QgJCMgLWd0IDAgOyBkbworICBjYXNlICQxIGluCisgICAgLS10aW1lLXN0YW1wIHwgLS10aW1lKiB8IC10ICkKKyAgICAgICBlY2hvICIkdGltZXN0YW1wIiA7IGV4aXQgOzsKKyAgICAtLXZlcnNpb24gfCAtdiApCisgICAgICAgZWNobyAiJHZlcnNpb24iIDsgZXhpdCA7OworICAgIC0taGVscCB8IC0taCogfCAtaCApCisgICAgICAgZWNobyAiJHVzYWdlIjsgZXhpdCA7OworICAgIC0tICkgICAgICMgU3RvcCBvcHRpb24gcHJvY2Vzc2luZworICAgICAgIHNoaWZ0OyBicmVhayA7OworICAgIC0gKQkjIFVzZSBzdGRpbiBhcyBpbnB1dC4KKyAgICAgICBicmVhayA7OworICAgIC0qICkKKyAgICAgICBlY2hvICIkbWU6IGludmFsaWQgb3B0aW9uICQxJGhlbHAiID4mMgorICAgICAgIGV4aXQgMSA7OworICAgICogKQorICAgICAgIGJyZWFrIDs7CisgIGVzYWMKK2RvbmUKKworaWYgdGVzdCAkIyAhPSAwOyB0aGVuCisgIGVjaG8gIiRtZTogdG9vIG1hbnkgYXJndW1lbnRzJGhlbHAiID4mMgorICBleGl0IDEKK2ZpCisKK3RyYXAgJ2V4aXQgMScgMSAyIDE1CisKKyMgQ0NfRk9SX0JVSUxEIC0tIGNvbXBpbGVyIHVzZWQgYnkgdGhpcyBzY3JpcHQuIE5vdGUgdGhhdCB0aGUgdXNlIG9mIGEKKyMgY29tcGlsZXIgdG8gYWlkIGluIHN5c3RlbSBkZXRlY3Rpb24gaXMgZGlzY291cmFnZWQgYXMgaXQgcmVxdWlyZXMKKyMgdGVtcG9yYXJ5IGZpbGVzIHRvIGJlIGNyZWF0ZWQgYW5kLCBhcyB5b3UgY2FuIHNlZSBiZWxvdywgaXQgaXMgYQorIyBoZWFkYWNoZSB0byBkZWFsIHdpdGggaW4gYSBwb3J0YWJsZSBmYXNoaW9uLgorCisjIEhpc3RvcmljYWxseSwgYENDX0ZPUl9CVUlMRCcgdXNlZCB0byBiZSBuYW1lZCBgSE9TVF9DQycuIFdlIHN0aWxsCisjIHVzZSBgSE9TVF9DQycgaWYgZGVmaW5lZCwgYnV0IGl0IGlzIGRlcHJlY2F0ZWQuCisKKyMgUG9ydGFibGUgdG1wIGRpcmVjdG9yeSBjcmVhdGlvbiBpbnNwaXJlZCBieSB0aGUgQXV0b2NvbmYgdGVhbS4KKworc2V0X2NjX2Zvcl9idWlsZD0nCit0cmFwICJleGl0Y29kZT1cJD87IChybSAtZiBcJHRtcGZpbGVzIDI+L2Rldi9udWxsOyBybWRpciBcJHRtcCAyPi9kZXYvbnVsbCkgJiYgZXhpdCBcJGV4aXRjb2RlIiAwIDsKK3RyYXAgInJtIC1mIFwkdG1wZmlsZXMgMj4vZGV2L251bGw7IHJtZGlyIFwkdG1wIDI+L2Rldi9udWxsOyBleGl0IDEiIDEgMiAxMyAxNSA7Cis6ICR7VE1QRElSPS90bXB9IDsKKyB7IHRtcD1gKHVtYXNrIDA3NyAmJiBta3RlbXAgLWQgIiRUTVBESVIvY2dYWFhYWFgiKSAyPi9kZXYvbnVsbGAgJiYgdGVzdCAtbiAiJHRtcCIgJiYgdGVzdCAtZCAiJHRtcCIgOyB9IHx8CisgeyB0ZXN0IC1uICIkUkFORE9NIiAmJiB0bXA9JFRNUERJUi9jZyQkLSRSQU5ET00gJiYgKHVtYXNrIDA3NyAmJiBta2RpciAkdG1wKSA7IH0gfHwKKyB7IHRtcD0kVE1QRElSL2NnLSQkICYmICh1bWFzayAwNzcgJiYgbWtkaXIgJHRtcCkgJiYgZWNobyAiV2FybmluZzogY3JlYXRpbmcgaW5zZWN1cmUgdGVtcCBkaXJlY3RvcnkiID4mMiA7IH0gfHwKKyB7IGVjaG8gIiRtZTogY2Fubm90IGNyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgaW4gJFRNUERJUiIgPiYyIDsgZXhpdCAxIDsgfSA7CitkdW1teT0kdG1wL2R1bW15IDsKK3RtcGZpbGVzPSIkZHVtbXkuYyAkZHVtbXkubyAkZHVtbXkucmVsICRkdW1teSIgOworY2FzZSAkQ0NfRk9SX0JVSUxELCRIT1NUX0NDLCRDQyBpbgorICwsKSAgICBlY2hvICJpbnQgeDsiID4gJGR1bW15LmMgOworCWZvciBjIGluIGNjIGdjYyBjODkgYzk5IDsgZG8KKwkgIGlmICgkYyAtYyAtbyAkZHVtbXkubyAkZHVtbXkuYykgPi9kZXYvbnVsbCAyPiYxIDsgdGhlbgorCSAgICAgQ0NfRk9SX0JVSUxEPSIkYyI7IGJyZWFrIDsKKwkgIGZpIDsKKwlkb25lIDsKKwlpZiB0ZXN0IHgiJENDX0ZPUl9CVUlMRCIgPSB4IDsgdGhlbgorCSAgQ0NfRk9SX0JVSUxEPW5vX2NvbXBpbGVyX2ZvdW5kIDsKKwlmaQorCTs7CisgLCwqKSAgIENDX0ZPUl9CVUlMRD0kQ0MgOzsKKyAsKiwqKSAgQ0NfRk9SX0JVSUxEPSRIT1NUX0NDIDs7Citlc2FjIDsgc2V0X2NjX2Zvcl9idWlsZD0gOycKKworIyBUaGlzIGlzIG5lZWRlZCB0byBmaW5kIHVuYW1lIG9uIGEgUHlyYW1pZCBPU3ggd2hlbiBydW4gaW4gdGhlIEJTRCB1bml2ZXJzZS4KKyMgKGdoYXppQG5vYy5ydXRnZXJzLmVkdSAxOTk0LTA4LTI0KQoraWYgKHRlc3QgLWYgLy5hdHRiaW4vdW5hbWUpID4vZGV2L251bGwgMj4mMSA7IHRoZW4KKwlQQVRIPSRQQVRIOi8uYXR0YmluIDsgZXhwb3J0IFBBVEgKK2ZpCisKK1VOQU1FX01BQ0hJTkU9YCh1bmFtZSAtbSkgMj4vZGV2L251bGxgIHx8IFVOQU1FX01BQ0hJTkU9dW5rbm93bgorVU5BTUVfUkVMRUFTRT1gKHVuYW1lIC1yKSAyPi9kZXYvbnVsbGAgfHwgVU5BTUVfUkVMRUFTRT11bmtub3duCitVTkFNRV9TWVNURU09YCh1bmFtZSAtcykgMj4vZGV2L251bGxgICB8fCBVTkFNRV9TWVNURU09dW5rbm93bgorVU5BTUVfVkVSU0lPTj1gKHVuYW1lIC12KSAyPi9kZXYvbnVsbGAgfHwgVU5BTUVfVkVSU0lPTj11bmtub3duCisKKyMgTm90ZTogb3JkZXIgaXMgc2lnbmlmaWNhbnQgLSB0aGUgY2FzZSBicmFuY2hlcyBhcmUgbm90IGV4Y2x1c2l2ZS4KKworY2FzZSAiJHtVTkFNRV9NQUNISU5FfToke1VOQU1FX1NZU1RFTX06JHtVTkFNRV9SRUxFQVNFfToke1VOQU1FX1ZFUlNJT059IiBpbgorICAgICo6TmV0QlNEOio6KikKKwkjIE5ldEJTRCAobmJzZCkgdGFyZ2V0cyBzaG91bGQgKHdoZXJlIGFwcGxpY2FibGUpIG1hdGNoIG9uZSBvcgorCSMgbW9yZSBvZiB0aGUgdHVwcGxlczogKi0qLW5ldGJzZGVsZiosICotKi1uZXRic2Rhb3V0KiwKKwkjICotKi1uZXRic2RlY29mZiogYW5kICotKi1uZXRic2QqLiAgRm9yIHRhcmdldHMgdGhhdCByZWNlbnRseQorCSMgc3dpdGNoZWQgdG8gRUxGLCAqLSotbmV0YnNkKiB3b3VsZCBzZWxlY3QgdGhlIG9sZAorCSMgb2JqZWN0IGZpbGUgZm9ybWF0LiAgVGhpcyBwcm92aWRlcyBib3RoIGZvcndhcmQKKwkjIGNvbXBhdGliaWxpdHkgYW5kIGEgY29uc2lzdGVudCBtZWNoYW5pc20gZm9yIHNlbGVjdGluZyB0aGUKKwkjIG9iamVjdCBmaWxlIGZvcm1hdC4KKwkjCisJIyBOb3RlOiBOZXRCU0QgZG9lc24ndCBwYXJ0aWN1bGFybHkgY2FyZSBhYm91dCB0aGUgdmVuZG9yCisJIyBwb3J0aW9uIG9mIHRoZSBuYW1lLiAgV2UgYWx3YXlzIHNldCBpdCB0byAidW5rbm93biIuCisJc3lzY3RsPSJzeXNjdGwgLW4gaHcubWFjaGluZV9hcmNoIgorCVVOQU1FX01BQ0hJTkVfQVJDSD1gKC9zYmluLyRzeXNjdGwgMj4vZGV2L251bGwgfHwgXAorCSAgICAvdXNyL3NiaW4vJHN5c2N0bCAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd24pYAorCWNhc2UgIiR7VU5BTUVfTUFDSElORV9BUkNIfSIgaW4KKwkgICAgYXJtZWIpIG1hY2hpbmU9YXJtZWItdW5rbm93biA7OworCSAgICBhcm0qKSBtYWNoaW5lPWFybS11bmtub3duIDs7CisJICAgIHNoM2VsKSBtYWNoaW5lPXNobC11bmtub3duIDs7CisJICAgIHNoM2ViKSBtYWNoaW5lPXNoLXVua25vd24gOzsKKwkgICAgc2g1ZWwpIG1hY2hpbmU9c2g1bGUtdW5rbm93biA7OworCSAgICAqKSBtYWNoaW5lPSR7VU5BTUVfTUFDSElORV9BUkNIfS11bmtub3duIDs7CisJZXNhYworCSMgVGhlIE9wZXJhdGluZyBTeXN0ZW0gaW5jbHVkaW5nIG9iamVjdCBmb3JtYXQsIGlmIGl0IGhhcyBzd2l0Y2hlZAorCSMgdG8gRUxGIHJlY2VudGx5LCBvciB3aWxsIGluIHRoZSBmdXR1cmUuCisJY2FzZSAiJHtVTkFNRV9NQUNISU5FX0FSQ0h9IiBpbgorCSAgICBhcm0qfGkzODZ8bTY4a3xuczMya3xzaDMqfHNwYXJjfHZheCkKKwkJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCQlpZiBlY2hvIF9fRUxGX18gfCAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwgXAorCQkJfCBncmVwIF9fRUxGX18gPi9kZXYvbnVsbAorCQl0aGVuCisJCSAgICAjIE9uY2UgYWxsIHV0aWxpdGllcyBjYW4gYmUgRUNPRkYgKG5ldGJzZGVjb2ZmKSBvciBhLm91dCAobmV0YnNkYW91dCkuCisJCSAgICAjIFJldHVybiBuZXRic2QgZm9yIGVpdGhlci4gIEZJWD8KKwkJICAgIG9zPW5ldGJzZAorCQllbHNlCisJCSAgICBvcz1uZXRic2RlbGYKKwkJZmkKKwkJOzsKKwkgICAgKikKKwkgICAgICAgIG9zPW5ldGJzZAorCQk7OworCWVzYWMKKwkjIFRoZSBPUyByZWxlYXNlCisJIyBEZWJpYW4gR05VL05ldEJTRCBtYWNoaW5lcyBoYXZlIGEgZGlmZmVyZW50IHVzZXJsYW5kLCBhbmQKKwkjIHRodXMsIG5lZWQgYSBkaXN0aW5jdCB0cmlwbGV0LiBIb3dldmVyLCB0aGV5IGRvIG5vdCBuZWVkCisJIyBrZXJuZWwgdmVyc2lvbiBpbmZvcm1hdGlvbiwgc28gaXQgY2FuIGJlIHJlcGxhY2VkIHdpdGggYQorCSMgc3VpdGFibGUgdGFnLCBpbiB0aGUgc3R5bGUgb2YgbGludXgtZ251LgorCWNhc2UgIiR7VU5BTUVfVkVSU0lPTn0iIGluCisJICAgIERlYmlhbiopCisJCXJlbGVhc2U9Jy1nbnUnCisJCTs7CisJICAgICopCisJCXJlbGVhc2U9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy1fXS4qL1wuLydgCisJCTs7CisJZXNhYworCSMgU2luY2UgQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLUtFUk5FTC1PUEVSQVRJTkdfU1lTVEVNOgorCSMgY29udGFpbnMgcmVkdW5kYW50IGluZm9ybWF0aW9uLCB0aGUgc2hvcnRlciBmb3JtOgorCSMgQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLU9QRVJBVElOR19TWVNURU0gaXMgdXNlZC4KKwllY2hvICIke21hY2hpbmV9LSR7b3N9JHtyZWxlYXNlfSIKKwlleGl0IDs7CisgICAgKjpPcGVuQlNEOio6KikKKwlVTkFNRV9NQUNISU5FX0FSQ0g9YGFyY2ggfCBzZWQgJ3MvT3BlbkJTRC4vLydgCisJZWNobyAke1VOQU1FX01BQ0hJTkVfQVJDSH0tdW5rbm93bi1vcGVuYnNkJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOmVra29CU0Q6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWVra29ic2Qke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6U29saWRCU0Q6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLXNvbGlkYnNkJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBtYWNwcGM6TWlyQlNEOio6KikKKwllY2hvIHBvd2VycGMtdW5rbm93bi1taXJic2Qke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6TWlyQlNEOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1taXJic2Qke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIGFscGhhOk9TRjE6KjoqKQorCWNhc2UgJFVOQU1FX1JFTEVBU0UgaW4KKwkqNC4wKQorCQlVTkFNRV9SRUxFQVNFPWAvdXNyL3NiaW4vc2l6ZXIgLXYgfCBhd2sgJ3twcmludCAkM30nYAorCQk7OworCSo1LiopCisJICAgICAgICBVTkFNRV9SRUxFQVNFPWAvdXNyL3NiaW4vc2l6ZXIgLXYgfCBhd2sgJ3twcmludCAkNH0nYAorCQk7OworCWVzYWMKKwkjIEFjY29yZGluZyB0byBDb21wYXEsIC91c3Ivc2Jpbi9wc3JpbmZvIGhhcyBiZWVuIGF2YWlsYWJsZSBvbgorCSMgT1NGLzEgYW5kIFRydTY0IHN5c3RlbXMgcHJvZHVjZWQgc2luY2UgMTk5NS4gIEkgaG9wZSB0aGF0CisJIyBjb3ZlcnMgbW9zdCBzeXN0ZW1zIHJ1bm5pbmcgdG9kYXkuICBUaGlzIGNvZGUgcGlwZXMgdGhlIENQVQorCSMgdHlwZXMgdGhyb3VnaCBoZWFkIC1uIDEsIHNvIHdlIG9ubHkgZGV0ZWN0IHRoZSB0eXBlIG9mIENQVSAwLgorCUFMUEhBX0NQVV9UWVBFPWAvdXNyL3NiaW4vcHNyaW5mbyAtdiB8IHNlZCAtbiAtZSAncy9eICBUaGUgYWxwaGEgXCguKlwpIHByb2Nlc3Nvci4qJC9cMS9wJyB8IGhlYWQgLW4gMWAKKwljYXNlICIkQUxQSEFfQ1BVX1RZUEUiIGluCisJICAgICJFVjQgKDIxMDY0KSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhIiA7OworCSAgICAiRVY0LjUgKDIxMDY0KSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhIiA7OworCSAgICAiTENBNCAoMjEwNjYvMjEwNjgpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGEiIDs7CisJICAgICJFVjUgKDIxMTY0KSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY1IiA7OworCSAgICAiRVY1LjYgKDIxMTY0QSkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NTYiIDs7CisJICAgICJFVjUuNiAoMjExNjRQQykiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYXBjYTU2IiA7OworCSAgICAiRVY1LjcgKDIxMTY0UEMpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFwY2E1NyIgOzsKKwkgICAgIkVWNiAoMjEyNjQpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjYiIDs7CisJICAgICJFVjYuNyAoMjEyNjRBKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY2NyIgOzsKKwkgICAgIkVWNi44Q0IgKDIxMjY0QykiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NjgiIDs7CisJICAgICJFVjYuOEFMICgyMTI2NEIpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjY4IiA7OworCSAgICAiRVY2LjhDWCAoMjEyNjREKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY2OCIgOzsKKwkgICAgIkVWNi45QSAoMjEyNjQvRVY2OUEpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjY5IiA7OworCSAgICAiRVY3ICgyMTM2NCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NyIgOzsKKwkgICAgIkVWNy45ICgyMTM2NEEpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjc5IiA7OworCWVzYWMKKwkjIEEgUG4ubiB2ZXJzaW9uIGlzIGEgcGF0Y2hlZCB2ZXJzaW9uLgorCSMgQSBWbi5uIHZlcnNpb24gaXMgYSByZWxlYXNlZCB2ZXJzaW9uLgorCSMgQSBUbi5uIHZlcnNpb24gaXMgYSByZWxlYXNlZCBmaWVsZCB0ZXN0IHZlcnNpb24uCisJIyBBIFhuLm4gdmVyc2lvbiBpcyBhbiB1bnJlbGVhc2VkIGV4cGVyaW1lbnRhbCBiYXNlbGV2ZWwuCisJIyAxLjIgdXNlcyAiMS4yIiBmb3IgdW5hbWUgLXIuCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWRlYy1vc2ZgZWNobyAke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL15bUFZUWF0vLycgfCB0ciAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eidgCisJZXhpdCA7OworICAgIEFscGhhXCAqOldpbmRvd3NfTlQqOiopCisJIyBIb3cgZG8gd2Uga25vdyBpdCdzIEludGVyaXggcmF0aGVyIHRoYW4gdGhlIGdlbmVyaWMgUE9TSVggc3Vic3lzdGVtPworCSMgU2hvdWxkIHdlIGNoYW5nZSBVTkFNRV9NQUNISU5FIGJhc2VkIG9uIHRoZSBvdXRwdXQgb2YgdW5hbWUgaW5zdGVhZAorCSMgb2YgdGhlIHNwZWNpZmljIEFscGhhIG1vZGVsPworCWVjaG8gYWxwaGEtcGMtaW50ZXJpeAorCWV4aXQgOzsKKyAgICAyMTA2NDpXaW5kb3dzX05UOjUwOjMpCisJZWNobyBhbHBoYS1kZWMtd2lubnQzLjUKKwlleGl0IDs7CisgICAgQW1pZ2EqOlVOSVhfU3lzdGVtX1Y6NC4wOiopCisJZWNobyBtNjhrLXVua25vd24tc3lzdjQKKwlleGl0IDs7CisgICAgKjpbQWFdbWlnYVtPb11bU3NdOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1hbWlnYW9zCisJZXhpdCA7OworICAgICo6W01tXW9ycGhbT29dW1NzXToqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbW9ycGhvcworCWV4aXQgOzsKKyAgICAqOk9TLzM5MDoqOiopCisJZWNobyBpMzcwLWlibS1vcGVuZWRpdGlvbgorCWV4aXQgOzsKKyAgICAqOnovVk06KjoqKQorCWVjaG8gczM5MC1pYm0tenZtb2UKKwlleGl0IDs7CisgICAgKjpPUzQwMDoqOiopCisgICAgICAgIGVjaG8gcG93ZXJwYy1pYm0tb3M0MDAKKwlleGl0IDs7CisgICAgYXJtOlJJU0MqOjEuWzAxMl0qOip8YXJtOnJpc2NpeDoxLlswMTJdKjoqKQorCWVjaG8gYXJtLWFjb3JuLXJpc2NpeCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgYXJtOnJpc2NvczoqOip8YXJtOlJJU0NPUzoqOiopCisJZWNobyBhcm0tdW5rbm93bi1yaXNjb3MKKwlleGl0IDs7CisgICAgU1IyPzAxOkhJLVVYL01QUDoqOiogfCBTUjgwMDA6SEktVVgvTVBQOio6KikKKwllY2hvIGhwcGExLjEtaGl0YWNoaS1oaXV4bXBwCisJZXhpdCA7OworICAgIFB5cmFtaWQqOk9TeCo6KjoqIHwgTUlTKjpPU3gqOio6KiB8IE1JUyo6U01QX0RDLU9TeCo6KjoqKQorCSMgYWtlZUB3cGRpczAzLndwYWZiLmFmLm1pbCAoRWFybGUgRi4gQWtlKSBjb250cmlidXRlZCBNSVMgYW5kIE5JTEUuCisJaWYgdGVzdCAiYCgvYmluL3VuaXZlcnNlKSAyPi9kZXYvbnVsbGAiID0gYXR0IDsgdGhlbgorCQllY2hvIHB5cmFtaWQtcHlyYW1pZC1zeXN2MworCWVsc2UKKwkJZWNobyBweXJhbWlkLXB5cmFtaWQtYnNkCisJZmkKKwlleGl0IDs7CisgICAgTklMRSo6KjoqOmRjb3N4KQorCWVjaG8gcHlyYW1pZC1weXJhbWlkLXN2cjQKKwlleGl0IDs7CisgICAgRFJTPzYwMDA6dW5peDo0LjA6NiopCisJZWNobyBzcGFyYy1pY2wtbng2CisJZXhpdCA7OworICAgIERSUz82MDAwOlVOSVhfU1Y6NC4yKjo3KiB8IERSUz82MDAwOmlzaXM6NC4yKjo3KikKKwljYXNlIGAvdXNyL2Jpbi91bmFtZSAtcGAgaW4KKwkgICAgc3BhcmMpIGVjaG8gc3BhcmMtaWNsLW54NzsgZXhpdCA7OworCWVzYWMgOzsKKyAgICBzdW40SDpTdW5PUzo1Lio6KikKKwllY2hvIHNwYXJjLWhhbC1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAorCWV4aXQgOzsKKyAgICBzdW40KjpTdW5PUzo1Lio6KiB8IHRhZHBvbGUqOlN1bk9TOjUuKjoqKQorCWVjaG8gc3BhcmMtc3VuLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCisJZXhpdCA7OworICAgIGk4NnBjOlN1bk9TOjUuKjoqKQorCWVjaG8gaTM4Ni1wYy1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAorCWV4aXQgOzsKKyAgICBzdW40KjpTdW5PUzo2KjoqKQorCSMgQWNjb3JkaW5nIHRvIGNvbmZpZy5zdWIsIHRoaXMgaXMgdGhlIHByb3BlciB3YXkgdG8gY2Fub25pY2FsaXplCisJIyBTdW5PUzYuICBIYXJkIHRvIGd1ZXNzIGV4YWN0bHkgd2hhdCBTdW5PUzYgd2lsbCBiZSBsaWtlLCBidXQKKwkjIGl0J3MgbGlrZWx5IHRvIGJlIG1vcmUgbGlrZSBTb2xhcmlzIHRoYW4gU3VuT1M0LgorCWVjaG8gc3BhcmMtc3VuLXNvbGFyaXMzYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCisJZXhpdCA7OworICAgIHN1bjQqOlN1bk9TOio6KikKKwljYXNlICJgL3Vzci9iaW4vYXJjaCAta2AiIGluCisJICAgIFNlcmllcyp8UzQqKQorCQlVTkFNRV9SRUxFQVNFPWB1bmFtZSAtdmAKKwkJOzsKKwllc2FjCisJIyBKYXBhbmVzZSBMYW5ndWFnZSB2ZXJzaW9ucyBoYXZlIGEgdmVyc2lvbiBudW1iZXIgbGlrZSBgNC4xLjMtSkwnLgorCWVjaG8gc3BhcmMtc3VuLXN1bm9zYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvLS9fLydgCisJZXhpdCA7OworICAgIHN1bjMqOlN1bk9TOio6KikKKwllY2hvIG02OGstc3VuLXN1bm9zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBzdW4qOio6NC4yQlNEOiopCisJVU5BTUVfUkVMRUFTRT1gKHNlZCAxcSAvZXRjL21vdGQgfCBhd2sgJ3twcmludCBzdWJzdHIoJDUsMSwzKX0nKSAyPi9kZXYvbnVsbGAKKwl0ZXN0ICJ4JHtVTkFNRV9SRUxFQVNFfSIgPSAieCIgJiYgVU5BTUVfUkVMRUFTRT0zCisJY2FzZSAiYC9iaW4vYXJjaGAiIGluCisJICAgIHN1bjMpCisJCWVjaG8gbTY4ay1zdW4tc3Vub3Mke1VOQU1FX1JFTEVBU0V9CisJCTs7CisJICAgIHN1bjQpCisJCWVjaG8gc3BhcmMtc3VuLXN1bm9zJHtVTkFNRV9SRUxFQVNFfQorCQk7OworCWVzYWMKKwlleGl0IDs7CisgICAgYXVzaHA6U3VuT1M6KjoqKQorCWVjaG8gc3BhcmMtYXVzcGV4LXN1bm9zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAjIFRoZSBzaXR1YXRpb24gZm9yIE1pTlQgaXMgYSBsaXR0bGUgY29uZnVzaW5nLiAgVGhlIG1hY2hpbmUgbmFtZQorICAgICMgY2FuIGJlIHZpcnR1YWxseSBldmVyeXRoaW5nIChldmVyeXRoaW5nIHdoaWNoIGlzIG5vdAorICAgICMgImF0YXJpc3QiIG9yICJhdGFyaXN0ZSIgYXQgbGVhc3Qgc2hvdWxkIGhhdmUgYSBwcm9jZXNzb3IKKyAgICAjID4gbTY4MDAwKS4gIFRoZSBzeXN0ZW0gbmFtZSByYW5nZXMgZnJvbSAiTWlOVCIgb3ZlciAiRnJlZU1pTlQiCisgICAgIyB0byB0aGUgbG93ZXJjYXNlIHZlcnNpb24gIm1pbnQiIChvciAiZnJlZW1pbnQiKS4gIEZpbmFsbHkKKyAgICAjIHRoZSBzeXN0ZW0gbmFtZSAiVE9TIiBkZW5vdGVzIGEgc3lzdGVtIHdoaWNoIGlzIGFjdHVhbGx5IG5vdAorICAgICMgTWlOVC4gIEJ1dCBNaU5UIGlzIGRvd253YXJkIGNvbXBhdGlibGUgdG8gVE9TLCBzbyB0aGlzIHNob3VsZAorICAgICMgYmUgbm8gcHJvYmxlbS4KKyAgICBhdGFyaXN0W2VdOipNaU5UOio6KiB8IGF0YXJpc3RbZV06Km1pbnQ6KjoqIHwgYXRhcmlzdFtlXToqVE9TOio6KikKKyAgICAgICAgZWNobyBtNjhrLWF0YXJpLW1pbnQke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIGF0YXJpKjoqTWlOVDoqOiogfCBhdGFyaSo6Km1pbnQ6KjoqIHwgYXRhcmlzdFtlXToqVE9TOio6KikKKwllY2hvIG02OGstYXRhcmktbWludCR7VU5BTUVfUkVMRUFTRX0KKyAgICAgICAgZXhpdCA7OworICAgICpmYWxjb24qOipNaU5UOio6KiB8ICpmYWxjb24qOiptaW50Oio6KiB8ICpmYWxjb24qOipUT1M6KjoqKQorICAgICAgICBlY2hvIG02OGstYXRhcmktbWludCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgbWlsYW4qOipNaU5UOio6KiB8IG1pbGFuKjoqbWludDoqOiogfCAqbWlsYW4qOipUT1M6KjoqKQorICAgICAgICBlY2hvIG02OGstbWlsYW4tbWludCR7VU5BTUVfUkVMRUFTRX0KKyAgICAgICAgZXhpdCA7OworICAgIGhhZGVzKjoqTWlOVDoqOiogfCBoYWRlcyo6Km1pbnQ6KjoqIHwgKmhhZGVzKjoqVE9TOio6KikKKyAgICAgICAgZWNobyBtNjhrLWhhZGVzLW1pbnQke1VOQU1FX1JFTEVBU0V9CisgICAgICAgIGV4aXQgOzsKKyAgICAqOipNaU5UOio6KiB8ICo6Km1pbnQ6KjoqIHwgKjoqVE9TOio6KikKKyAgICAgICAgZWNobyBtNjhrLXVua25vd24tbWludCR7VU5BTUVfUkVMRUFTRX0KKyAgICAgICAgZXhpdCA7OworICAgIG02OGs6bWFjaHRlbjoqOiopCisJZWNobyBtNjhrLWFwcGxlLW1hY2h0ZW4ke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIHBvd2VycGM6bWFjaHRlbjoqOiopCisJZWNobyBwb3dlcnBjLWFwcGxlLW1hY2h0ZW4ke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFJJU0MqOk1hY2g6KjoqKQorCWVjaG8gbWlwcy1kZWMtbWFjaF9ic2Q0LjMKKwlleGl0IDs7CisgICAgUklTQyo6VUxUUklYOio6KikKKwllY2hvIG1pcHMtZGVjLXVsdHJpeCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgVkFYKjpVTFRSSVgqOio6KikKKwllY2hvIHZheC1kZWMtdWx0cml4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAyMDIwOkNMSVg6KjoqIHwgMjQzMDpDTElYOio6KikKKwllY2hvIGNsaXBwZXItaW50ZXJncmFwaC1jbGl4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBtaXBzOio6KjpVTUlQUyB8IG1pcHM6KjoqOlJJU0NvcykKKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJc2VkICdzL14JLy8nIDw8IEVPRiA+JGR1bW15LmMKKyNpZmRlZiBfX2NwbHVzcGx1cworI2luY2x1ZGUgPHN0ZGlvLmg+ICAvKiBmb3IgcHJpbnRmKCkgcHJvdG90eXBlICovCisJaW50IG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKKyNlbHNlCisJaW50IG1haW4gKGFyZ2MsIGFyZ3YpIGludCBhcmdjOyBjaGFyICphcmd2W107IHsKKyNlbmRpZgorCSNpZiBkZWZpbmVkIChob3N0X21pcHMpICYmIGRlZmluZWQgKE1JUFNFQikKKwkjaWYgZGVmaW5lZCAoU1lTVFlQRV9TWVNWKQorCSAgcHJpbnRmICgibWlwcy1taXBzLXJpc2NvcyVzc3lzdlxuIiwgYXJndlsxXSk7IGV4aXQgKDApOworCSNlbmRpZgorCSNpZiBkZWZpbmVkIChTWVNUWVBFX1NWUjQpCisJICBwcmludGYgKCJtaXBzLW1pcHMtcmlzY29zJXNzdnI0XG4iLCBhcmd2WzFdKTsgZXhpdCAoMCk7CisJI2VuZGlmCisJI2lmIGRlZmluZWQgKFNZU1RZUEVfQlNENDMpIHx8IGRlZmluZWQoU1lTVFlQRV9CU0QpCisJICBwcmludGYgKCJtaXBzLW1pcHMtcmlzY29zJXNic2RcbiIsIGFyZ3ZbMV0pOyBleGl0ICgwKTsKKwkjZW5kaWYKKwkjZW5kaWYKKwkgIGV4aXQgKC0xKTsKKwl9CitFT0YKKwkkQ0NfRk9SX0JVSUxEIC1vICRkdW1teSAkZHVtbXkuYyAmJgorCSAgZHVtbXlhcmc9YGVjaG8gIiR7VU5BTUVfUkVMRUFTRX0iIHwgc2VkIC1uICdzL1woWzAtOV0qXCkuKi9cMS9wJ2AgJiYKKwkgIFNZU1RFTV9OQU1FPWAkZHVtbXkgJGR1bW15YXJnYCAmJgorCSAgICB7IGVjaG8gIiRTWVNURU1fTkFNRSI7IGV4aXQ7IH0KKwllY2hvIG1pcHMtbWlwcy1yaXNjb3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIE1vdG9yb2xhOlBvd2VyTUFYX09TOio6KikKKwllY2hvIHBvd2VycGMtbW90b3JvbGEtcG93ZXJtYXgKKwlleGl0IDs7CisgICAgTW90b3JvbGE6Kjo0LjM6UEw4LSopCisJZWNobyBwb3dlcnBjLWhhcnJpcy1wb3dlcm1heAorCWV4aXQgOzsKKyAgICBOaWdodF9IYXdrOio6KjpQb3dlck1BWF9PUyB8IFN5bmVyZ3k6UG93ZXJNQVhfT1M6KjoqKQorCWVjaG8gcG93ZXJwYy1oYXJyaXMtcG93ZXJtYXgKKwlleGl0IDs7CisgICAgTmlnaHRfSGF3azpQb3dlcl9VTklYOio6KikKKwllY2hvIHBvd2VycGMtaGFycmlzLXBvd2VydW5peAorCWV4aXQgOzsKKyAgICBtODhrOkNYL1VYOjcqOiopCisJZWNobyBtODhrLWhhcnJpcy1jeHV4NworCWV4aXQgOzsKKyAgICBtODhrOio6NCo6UjQqKQorCWVjaG8gbTg4ay1tb3Rvcm9sYS1zeXN2NAorCWV4aXQgOzsKKyAgICBtODhrOio6Myo6UjMqKQorCWVjaG8gbTg4ay1tb3Rvcm9sYS1zeXN2MworCWV4aXQgOzsKKyAgICBBVmlpT046ZGd1eDoqOiopCisgICAgICAgICMgREcvVVggcmV0dXJucyBBVmlpT04gZm9yIGFsbCBhcmNoaXRlY3R1cmVzCisgICAgICAgIFVOQU1FX1BST0NFU1NPUj1gL3Vzci9iaW4vdW5hbWUgLXBgCisJaWYgWyAkVU5BTUVfUFJPQ0VTU09SID0gbWM4ODEwMCBdIHx8IFsgJFVOQU1FX1BST0NFU1NPUiA9IG1jODgxMTAgXQorCXRoZW4KKwkgICAgaWYgWyAke1RBUkdFVF9CSU5BUllfSU5URVJGQUNFfXggPSBtODhrZGd1eGVsZnggXSB8fCBcCisJICAgICAgIFsgJHtUQVJHRVRfQklOQVJZX0lOVEVSRkFDRX14ID0geCBdCisJICAgIHRoZW4KKwkJZWNobyBtODhrLWRnLWRndXgke1VOQU1FX1JFTEVBU0V9CisJICAgIGVsc2UKKwkJZWNobyBtODhrLWRnLWRndXhiY3Mke1VOQU1FX1JFTEVBU0V9CisJICAgIGZpCisJZWxzZQorCSAgICBlY2hvIGk1ODYtZGctZGd1eCR7VU5BTUVfUkVMRUFTRX0KKwlmaQorIAlleGl0IDs7CisgICAgTTg4KjpEb2xwaGluT1M6KjoqKQkjIERvbHBoaW5PUyAoU1ZSMykKKwllY2hvIG04OGstZG9scGhpbi1zeXN2MworCWV4aXQgOzsKKyAgICBNODgqOio6UjMqOiopCisJIyBEZWx0YSA4OGsgc3lzdGVtIHJ1bm5pbmcgU1ZSMworCWVjaG8gbTg4ay1tb3Rvcm9sYS1zeXN2MworCWV4aXQgOzsKKyAgICBYRDg4KjoqOio6KikgIyBUZWt0cm9uaXggWEQ4OCBzeXN0ZW0gcnVubmluZyBVVGVrViAoU1ZSMykKKwllY2hvIG04OGstdGVrdHJvbml4LXN5c3YzCisJZXhpdCA7OworICAgIFRlazQzWzAtOV1bMC05XTpVVGVrOio6KikgIyBUZWt0cm9uaXggNDMwMCBzeXN0ZW0gcnVubmluZyBVVGVrIChCU0QpCisJZWNobyBtNjhrLXRla3Ryb25peC1ic2QKKwlleGl0IDs7CisgICAgKjpJUklYKjoqOiopCisJZWNobyBtaXBzLXNnaS1pcml4YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvLS9fL2cnYAorCWV4aXQgOzsKKyAgICA/Pz8/Pz8/PzpBSVg/OlsxMl0uMToyKSAgICMgQUlYIDIuMi4xIG9yIEFJWCAyLjEuMSBpcyBSVC9QQyBBSVguCisJZWNobyByb21wLWlibS1haXggICAgICMgdW5hbWUgLW0gZ2l2ZXMgYW4gOCBoZXgtY29kZSBDUFUgaWQKKwlleGl0IDs7ICAgICAgICAgICAgICAgIyBOb3RlIHRoYXQ6IGVjaG8gIidgdW5hbWUgLXNgJyIgZ2l2ZXMgJ0FJWCAnCisgICAgaSo4NjpBSVg6KjoqKQorCWVjaG8gaTM4Ni1pYm0tYWl4CisJZXhpdCA7OworICAgIGlhNjQ6QUlYOio6KikKKwlpZiBbIC14IC91c3IvYmluL29zbGV2ZWwgXSA7IHRoZW4KKwkJSUJNX1JFVj1gL3Vzci9iaW4vb3NsZXZlbGAKKwllbHNlCisJCUlCTV9SRVY9JHtVTkFNRV9WRVJTSU9OfS4ke1VOQU1FX1JFTEVBU0V9CisJZmkKKwllY2hvICR7VU5BTUVfTUFDSElORX0taWJtLWFpeCR7SUJNX1JFVn0KKwlleGl0IDs7CisgICAgKjpBSVg6MjozKQorCWlmIGdyZXAgYm9zMzI1IC91c3IvaW5jbHVkZS9zdGRpby5oID4vZGV2L251bGwgMj4mMTsgdGhlbgorCQlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJCXNlZCAncy9eCQkvLycgPDwgRU9GID4kZHVtbXkuYworCQkjaW5jbHVkZSA8c3lzL3N5c3RlbWNmZy5oPgorCisJCW1haW4oKQorCQkJeworCQkJaWYgKCFfX3Bvd2VyX3BjKCkpCisJCQkJZXhpdCgxKTsKKwkJCXB1dHMoInBvd2VycGMtaWJtLWFpeDMuMi41Iik7CisJCQlleGl0KDApOworCQkJfQorRU9GCisJCWlmICRDQ19GT1JfQlVJTEQgLW8gJGR1bW15ICRkdW1teS5jICYmIFNZU1RFTV9OQU1FPWAkZHVtbXlgCisJCXRoZW4KKwkJCWVjaG8gIiRTWVNURU1fTkFNRSIKKwkJZWxzZQorCQkJZWNobyByczYwMDAtaWJtLWFpeDMuMi41CisJCWZpCisJZWxpZiBncmVwIGJvczMyNCAvdXNyL2luY2x1ZGUvc3RkaW8uaCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkJZWNobyByczYwMDAtaWJtLWFpeDMuMi40CisJZWxzZQorCQllY2hvIHJzNjAwMC1pYm0tYWl4My4yCisJZmkKKwlleGl0IDs7CisgICAgKjpBSVg6KjpbNDVdKQorCUlCTV9DUFVfSUQ9YC91c3Ivc2Jpbi9sc2RldiAtQyAtYyBwcm9jZXNzb3IgLVMgYXZhaWxhYmxlIHwgc2VkIDFxIHwgYXdrICd7IHByaW50ICQxIH0nYAorCWlmIC91c3Ivc2Jpbi9sc2F0dHIgLUVsICR7SUJNX0NQVV9JRH0gfCBncmVwICcgUE9XRVInID4vZGV2L251bGwgMj4mMTsgdGhlbgorCQlJQk1fQVJDSD1yczYwMDAKKwllbHNlCisJCUlCTV9BUkNIPXBvd2VycGMKKwlmaQorCWlmIFsgLXggL3Vzci9iaW4vb3NsZXZlbCBdIDsgdGhlbgorCQlJQk1fUkVWPWAvdXNyL2Jpbi9vc2xldmVsYAorCWVsc2UKKwkJSUJNX1JFVj0ke1VOQU1FX1ZFUlNJT059LiR7VU5BTUVfUkVMRUFTRX0KKwlmaQorCWVjaG8gJHtJQk1fQVJDSH0taWJtLWFpeCR7SUJNX1JFVn0KKwlleGl0IDs7CisgICAgKjpBSVg6KjoqKQorCWVjaG8gcnM2MDAwLWlibS1haXgKKwlleGl0IDs7CisgICAgaWJtcnQ6NC40QlNEOip8cm9tcC1pYm06QlNEOiopCisJZWNobyByb21wLWlibS1ic2Q0LjQKKwlleGl0IDs7CisgICAgaWJtcnQ6KkJTRDoqfHJvbXAtaWJtOkJTRDoqKSAgICAgICAgICAgICMgY292ZXJzIFJUL1BDIEJTRCBhbmQKKwllY2hvIHJvbXAtaWJtLWJzZCR7VU5BTUVfUkVMRUFTRX0gICAjIDQuMyB3aXRoIHVuYW1lIGFkZGVkIHRvCisJZXhpdCA7OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyByZXBvcnQ6IHJvbXAtaWJtIEJTRCA0LjMKKyAgICAqOkJPU1g6KjoqKQorCWVjaG8gcnM2MDAwLWJ1bGwtYm9zeAorCWV4aXQgOzsKKyAgICBEUFgvMj8wMDpCLk8uUy46KjoqKQorCWVjaG8gbTY4ay1idWxsLXN5c3YzCisJZXhpdCA7OworICAgIDkwMDAvWzM0XT8/OjQuM2JzZDoxLio6KikKKwllY2hvIG02OGstaHAtYnNkCisJZXhpdCA7OworICAgIGhwMzAwOjQuNEJTRDoqOiogfCA5MDAwL1szNF0/Pzo0LjNic2Q6Mi4qOiopCisJZWNobyBtNjhrLWhwLWJzZDQuNAorCWV4aXQgOzsKKyAgICA5MDAwL1szNDY3OF0/PzpIUC1VWDoqOiopCisJSFBVWF9SRVY9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSouWzBCXSovLydgCisJY2FzZSAiJHtVTkFNRV9NQUNISU5FfSIgaW4KKwkgICAgOTAwMC8zMT8gKSAgICAgICAgICAgIEhQX0FSQ0g9bTY4MDAwIDs7CisJICAgIDkwMDAvWzM0XT8/ICkgICAgICAgICBIUF9BUkNIPW02OGsgOzsKKwkgICAgOTAwMC9bNjc4XVswLTldWzAtOV0pCisJCWlmIFsgLXggL3Vzci9iaW4vZ2V0Y29uZiBdOyB0aGVuCisJCSAgICBzY19jcHVfdmVyc2lvbj1gL3Vzci9iaW4vZ2V0Y29uZiBTQ19DUFVfVkVSU0lPTiAyPi9kZXYvbnVsbGAKKyAgICAgICAgICAgICAgICAgICAgc2Nfa2VybmVsX2JpdHM9YC91c3IvYmluL2dldGNvbmYgU0NfS0VSTkVMX0JJVFMgMj4vZGV2L251bGxgCisgICAgICAgICAgICAgICAgICAgIGNhc2UgIiR7c2NfY3B1X3ZlcnNpb259IiBpbgorICAgICAgICAgICAgICAgICAgICAgIDUyMykgSFBfQVJDSD0iaHBwYTEuMCIgOzsgIyBDUFVfUEFfUklTQzFfMAorICAgICAgICAgICAgICAgICAgICAgIDUyOCkgSFBfQVJDSD0iaHBwYTEuMSIgOzsgIyBDUFVfUEFfUklTQzFfMQorICAgICAgICAgICAgICAgICAgICAgIDUzMikgICAgICAgICAgICAgICAgICAgICAgIyBDUFVfUEFfUklTQzJfMAorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJHtzY19rZXJuZWxfYml0c30iIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgIDMyKSBIUF9BUkNIPSJocHBhMi4wbiIgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgNjQpIEhQX0FSQ0g9ImhwcGEyLjB3IiA7OworCQkJICAnJykgSFBfQVJDSD0iaHBwYTIuMCIgOzsgICAjIEhQLVVYIDEwLjIwCisgICAgICAgICAgICAgICAgICAgICAgICBlc2FjIDs7CisgICAgICAgICAgICAgICAgICAgIGVzYWMKKwkJZmkKKwkJaWYgWyAiJHtIUF9BUkNIfSIgPSAiIiBdOyB0aGVuCisJCSAgICBldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJCSAgICBzZWQgJ3MvXiAgICAgICAgICAgICAgLy8nIDw8IEVPRiA+JGR1bW15LmMKKworICAgICAgICAgICAgICAjZGVmaW5lIF9IUFVYX1NPVVJDRQorICAgICAgICAgICAgICAjaW5jbHVkZSA8c3RkbGliLmg+CisgICAgICAgICAgICAgICNpbmNsdWRlIDx1bmlzdGQuaD4KKworICAgICAgICAgICAgICBpbnQgbWFpbiAoKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICNpZiBkZWZpbmVkKF9TQ19LRVJORUxfQklUUykKKyAgICAgICAgICAgICAgICAgIGxvbmcgYml0cyA9IHN5c2NvbmYoX1NDX0tFUk5FTF9CSVRTKTsKKyAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgICBsb25nIGNwdSAgPSBzeXNjb25mIChfU0NfQ1BVX1ZFUlNJT04pOworCisgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNwdSkKKyAgICAgICAgICAgICAgCXsKKyAgICAgICAgICAgICAgCWNhc2UgQ1BVX1BBX1JJU0MxXzA6IHB1dHMgKCJocHBhMS4wIik7IGJyZWFrOworICAgICAgICAgICAgICAJY2FzZSBDUFVfUEFfUklTQzFfMTogcHV0cyAoImhwcGExLjEiKTsgYnJlYWs7CisgICAgICAgICAgICAgIAljYXNlIENQVV9QQV9SSVNDMl8wOgorICAgICAgICAgICAgICAjaWYgZGVmaW5lZChfU0NfS0VSTkVMX0JJVFMpCisgICAgICAgICAgICAgIAkgICAgc3dpdGNoIChiaXRzKQorICAgICAgICAgICAgICAJCXsKKyAgICAgICAgICAgICAgCQljYXNlIDY0OiBwdXRzICgiaHBwYTIuMHciKTsgYnJlYWs7CisgICAgICAgICAgICAgIAkJY2FzZSAzMjogcHV0cyAoImhwcGEyLjBuIik7IGJyZWFrOworICAgICAgICAgICAgICAJCWRlZmF1bHQ6IHB1dHMgKCJocHBhMi4wIik7IGJyZWFrOworICAgICAgICAgICAgICAJCX0gYnJlYWs7CisgICAgICAgICAgICAgICNlbHNlICAvKiAhZGVmaW5lZChfU0NfS0VSTkVMX0JJVFMpICovCisgICAgICAgICAgICAgIAkgICAgcHV0cyAoImhwcGEyLjAiKTsgYnJlYWs7CisgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAJZGVmYXVsdDogcHV0cyAoImhwcGExLjAiKTsgYnJlYWs7CisgICAgICAgICAgICAgIAl9CisgICAgICAgICAgICAgICAgICBleGl0ICgwKTsKKyAgICAgICAgICAgICAgfQorRU9GCisJCSAgICAoQ0NPUFRTPSAkQ0NfRk9SX0JVSUxEIC1vICRkdW1teSAkZHVtbXkuYyAyPi9kZXYvbnVsbCkgJiYgSFBfQVJDSD1gJGR1bW15YAorCQkgICAgdGVzdCAteiAiJEhQX0FSQ0giICYmIEhQX0FSQ0g9aHBwYQorCQlmaSA7OworCWVzYWMKKwlpZiBbICR7SFBfQVJDSH0gPSAiaHBwYTIuMHciIF0KKwl0aGVuCisJICAgIGV2YWwgJHNldF9jY19mb3JfYnVpbGQKKworCSAgICAjIGhwcGEyLjB3LWhwLWhwdXgqIGhhcyBhIDY0LWJpdCBrZXJuZWwgYW5kIGEgY29tcGlsZXIgZ2VuZXJhdGluZworCSAgICAjIDMyLWJpdCBjb2RlLiAgaHBwYTY0LWhwLWhwdXgqIGhhcyB0aGUgc2FtZSBrZXJuZWwgYW5kIGEgY29tcGlsZXIKKwkgICAgIyBnZW5lcmF0aW5nIDY0LWJpdCBjb2RlLiAgR05VIGFuZCBIUCB1c2UgZGlmZmVyZW50IG5vbWVuY2xhdHVyZToKKwkgICAgIworCSAgICAjICQgQ0NfRk9SX0JVSUxEPWNjIC4vY29uZmlnLmd1ZXNzCisJICAgICMgPT4gaHBwYTIuMHctaHAtaHB1eDExLjIzCisJICAgICMgJCBDQ19GT1JfQlVJTEQ9ImNjICtEQTIuMHciIC4vY29uZmlnLmd1ZXNzCisJICAgICMgPT4gaHBwYTY0LWhwLWhwdXgxMS4yMworCisJICAgIGlmIGVjaG8gX19MUDY0X18gfCAoQ0NPUFRTPSAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwpIHwKKwkJZ3JlcCBfX0xQNjRfXyA+L2Rldi9udWxsCisJICAgIHRoZW4KKwkJSFBfQVJDSD0iaHBwYTIuMHciCisJICAgIGVsc2UKKwkJSFBfQVJDSD0iaHBwYTY0IgorCSAgICBmaQorCWZpCisJZWNobyAke0hQX0FSQ0h9LWhwLWhwdXgke0hQVVhfUkVWfQorCWV4aXQgOzsKKyAgICBpYTY0OkhQLVVYOio6KikKKwlIUFVYX1JFVj1gZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi5bMEJdKi8vJ2AKKwllY2hvIGlhNjQtaHAtaHB1eCR7SFBVWF9SRVZ9CisJZXhpdCA7OworICAgIDMwNTAqOkhJLVVYOio6KikKKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJc2VkICdzL14JLy8nIDw8IEVPRiA+JGR1bW15LmMKKwkjaW5jbHVkZSA8dW5pc3RkLmg+CisJaW50CisJbWFpbiAoKQorCXsKKwkgIGxvbmcgY3B1ID0gc3lzY29uZiAoX1NDX0NQVV9WRVJTSU9OKTsKKwkgIC8qIFRoZSBvcmRlciBtYXR0ZXJzLCBiZWNhdXNlIENQVV9JU19IUF9NQzY4SyBlcnJvbmVvdXNseSByZXR1cm5zCisJICAgICB0cnVlIGZvciBDUFVfUEFfUklTQzFfMC4gIENQVV9JU19QQV9SSVNDIHJldHVybnMgY29ycmVjdAorCSAgICAgcmVzdWx0cywgaG93ZXZlci4gICovCisJICBpZiAoQ1BVX0lTX1BBX1JJU0MgKGNwdSkpCisJICAgIHsKKwkgICAgICBzd2l0Y2ggKGNwdSkKKwkJeworCQkgIGNhc2UgQ1BVX1BBX1JJU0MxXzA6IHB1dHMgKCJocHBhMS4wLWhpdGFjaGktaGl1eHdlMiIpOyBicmVhazsKKwkJICBjYXNlIENQVV9QQV9SSVNDMV8xOiBwdXRzICgiaHBwYTEuMS1oaXRhY2hpLWhpdXh3ZTIiKTsgYnJlYWs7CisJCSAgY2FzZSBDUFVfUEFfUklTQzJfMDogcHV0cyAoImhwcGEyLjAtaGl0YWNoaS1oaXV4d2UyIik7IGJyZWFrOworCQkgIGRlZmF1bHQ6IHB1dHMgKCJocHBhLWhpdGFjaGktaGl1eHdlMiIpOyBicmVhazsKKwkJfQorCSAgICB9CisJICBlbHNlIGlmIChDUFVfSVNfSFBfTUM2OEsgKGNwdSkpCisJICAgIHB1dHMgKCJtNjhrLWhpdGFjaGktaGl1eHdlMiIpOworCSAgZWxzZSBwdXRzICgidW5rbm93bi1oaXRhY2hpLWhpdXh3ZTIiKTsKKwkgIGV4aXQgKDApOworCX0KK0VPRgorCSRDQ19GT1JfQlVJTEQgLW8gJGR1bW15ICRkdW1teS5jICYmIFNZU1RFTV9OQU1FPWAkZHVtbXlgICYmCisJCXsgZWNobyAiJFNZU1RFTV9OQU1FIjsgZXhpdDsgfQorCWVjaG8gdW5rbm93bi1oaXRhY2hpLWhpdXh3ZTIKKwlleGl0IDs7CisgICAgOTAwMC83Pz86NC4zYnNkOio6KiB8IDkwMDAvOD9bNzldOjQuM2JzZDoqOiogKQorCWVjaG8gaHBwYTEuMS1ocC1ic2QKKwlleGl0IDs7CisgICAgOTAwMC84Pz86NC4zYnNkOio6KikKKwllY2hvIGhwcGExLjAtaHAtYnNkCisJZXhpdCA7OworICAgICo5Pz8qOk1QRS9pWDoqOiogfCAqMzAwMCo6TVBFL2lYOio6KikKKwllY2hvIGhwcGExLjAtaHAtbXBlaXgKKwlleGl0IDs7CisgICAgaHA3Pz86T1NGMToqOiogfCBocDg/Wzc5XTpPU0YxOio6KiApCisJZWNobyBocHBhMS4xLWhwLW9zZgorCWV4aXQgOzsKKyAgICBocDg/PzpPU0YxOio6KikKKwllY2hvIGhwcGExLjAtaHAtb3NmCisJZXhpdCA7OworICAgIGkqODY6T1NGMToqOiopCisJaWYgWyAteCAvdXNyL3NiaW4vc3lzdmVyc2lvbiBdIDsgdGhlbgorCSAgICBlY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1vc2YxbWsKKwllbHNlCisJICAgIGVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLW9zZjEKKwlmaQorCWV4aXQgOzsKKyAgICBwYXJpc2MqOkxpdGVzKjoqOiopCisJZWNobyBocHBhMS4xLWhwLWxpdGVzCisJZXhpdCA7OworICAgIEMxKjpDb252ZXhPUzoqOiogfCBjb252ZXg6Q29udmV4T1M6QzEqOiopCisJZWNobyBjMS1jb252ZXgtYnNkCisgICAgICAgIGV4aXQgOzsKKyAgICBDMio6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkMyKjoqKQorCWlmIGdldHN5c2luZm8gLWYgc2NhbGFyX2FjYworCXRoZW4gZWNobyBjMzItY29udmV4LWJzZAorCWVsc2UgZWNobyBjMi1jb252ZXgtYnNkCisJZmkKKyAgICAgICAgZXhpdCA7OworICAgIEMzNCo6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkMzNCo6KikKKwllY2hvIGMzNC1jb252ZXgtYnNkCisgICAgICAgIGV4aXQgOzsKKyAgICBDMzgqOkNvbnZleE9TOio6KiB8IGNvbnZleDpDb252ZXhPUzpDMzgqOiopCisJZWNobyBjMzgtY29udmV4LWJzZAorICAgICAgICBleGl0IDs7CisgICAgQzQqOkNvbnZleE9TOio6KiB8IGNvbnZleDpDb252ZXhPUzpDNCo6KikKKwllY2hvIGM0LWNvbnZleC1ic2QKKyAgICAgICAgZXhpdCA7OworICAgIENSQVkqWS1NUDoqOio6KikKKwllY2hvIHltcC1jcmF5LXVuaWNvcyR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXC5bXi5dKiQvLlgvJworCWV4aXQgOzsKKyAgICBDUkFZKltBLVpdOTA6KjoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWNyYXktdW5pY29zJHtVTkFNRV9SRUxFQVNFfSBcCisJfCBzZWQgLWUgJ3MvQ1JBWS4qXChbQS1aXTkwXCkvXDEvJyBcCisJICAgICAgLWUgeS9BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei8gXAorCSAgICAgIC1lICdzL1wuW14uXSokLy5YLycKKwlleGl0IDs7CisgICAgQ1JBWSpUUzoqOio6KikKKwllY2hvIHQ5MC1jcmF5LXVuaWNvcyR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXC5bXi5dKiQvLlgvJworCWV4aXQgOzsKKyAgICBDUkFZKlQzRToqOio6KikKKwllY2hvIGFscGhhZXY1LWNyYXktdW5pY29zbWske1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL1wuW14uXSokLy5YLycKKwlleGl0IDs7CisgICAgQ1JBWSpTVjE6KjoqOiopCisJZWNobyBzdjEtY3JheS11bmljb3Mke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL1wuW14uXSokLy5YLycKKwlleGl0IDs7CisgICAgKjpVTklDT1MvbXA6KjoqKQorCWVjaG8gY3JheW52LWNyYXktdW5pY29zbXAke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL1wuW14uXSokLy5YLycKKwlleGl0IDs7CisgICAgRjMwWzAxXTpVTklYX1N5c3RlbV9WOio6KiB8IEY3MDA6VU5JWF9TeXN0ZW1fVjoqOiopCisJRlVKSVRTVV9QUk9DPWB1bmFtZSAtbSB8IHRyICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6J2AKKyAgICAgICAgRlVKSVRTVV9TWVM9YHVuYW1lIC1wIHwgdHIgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonIHwgc2VkIC1lICdzL1wvLy8nYAorICAgICAgICBGVUpJVFNVX1JFTD1gZWNobyAke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzLyAvXy8nYAorICAgICAgICBlY2hvICIke0ZVSklUU1VfUFJPQ30tZnVqaXRzdS0ke0ZVSklUU1VfU1lTfSR7RlVKSVRTVV9SRUx9IgorICAgICAgICBleGl0IDs7CisgICAgNTAwMDpVTklYX1N5c3RlbV9WOjQuKjoqKQorICAgICAgICBGVUpJVFNVX1NZUz1gdW5hbWUgLXAgfCB0ciAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicgfCBzZWQgLWUgJ3MvXC8vLydgCisgICAgICAgIEZVSklUU1VfUkVMPWBlY2hvICR7VU5BTUVfUkVMRUFTRX0gfCB0ciAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicgfCBzZWQgLWUgJ3MvIC9fLydgCisgICAgICAgIGVjaG8gInNwYXJjLWZ1aml0c3UtJHtGVUpJVFNVX1NZU30ke0ZVSklUU1VfUkVMfSIKKwlleGl0IDs7CisgICAgaSo4NjpCU0QvMzg2Oio6KiB8IGkqODY6QlNEL09TOio6KiB8ICo6QXNjZW5kXCBFbWJlZGRlZC9PUzoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLWJzZGkke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIHNwYXJjKjpCU0QvT1M6KjoqKQorCWVjaG8gc3BhcmMtdW5rbm93bi1ic2RpJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOkJTRC9PUzoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tYnNkaSR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpGcmVlQlNEOio6KikKKwljYXNlICR7VU5BTUVfTUFDSElORX0gaW4KKwkgICAgcGM5OCkKKwkJZWNobyBpMzg2LXVua25vd24tZnJlZWJzZGBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stKF0uKi8vJ2AgOzsKKwkgICAgYW1kNjQpCisJCWVjaG8geDg2XzY0LXVua25vd24tZnJlZWJzZGBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stKF0uKi8vJ2AgOzsKKwkgICAgKikKKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tZnJlZWJzZGBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stKF0uKi8vJ2AgOzsKKwllc2FjCisJZXhpdCA7OworICAgIGkqOkNZR1dJTio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtY3lnd2luCisJZXhpdCA7OworICAgICo6TUlOR1cqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW1pbmd3MzIKKwlleGl0IDs7CisgICAgaSo6d2luZG93czMyKjoqKQorICAgIAkjIHVuYW1lIC1tIGluY2x1ZGVzICItcGMiIG9uIHRoaXMgc3lzdGVtLgorICAgIAllY2hvICR7VU5BTUVfTUFDSElORX0tbWluZ3czMgorCWV4aXQgOzsKKyAgICBpKjpQVyo6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtcHczMgorCWV4aXQgOzsKKyAgICAqOkludGVyaXgqOlszNDU2XSopCisgICAgCWNhc2UgJHtVTkFNRV9NQUNISU5FfSBpbgorCSAgICB4ODYpIAorCQllY2hvIGk1ODYtcGMtaW50ZXJpeCR7VU5BTUVfUkVMRUFTRX0KKwkJZXhpdCA7OworCSAgICBFTTY0VCB8IGF1dGhlbnRpY2FtZCkKKwkJZWNobyB4ODZfNjQtdW5rbm93bi1pbnRlcml4JHtVTkFNRV9SRUxFQVNFfQorCQlleGl0IDs7CisJZXNhYyA7OworICAgIFszNDVdODY6V2luZG93c185NToqIHwgWzM0NV04NjpXaW5kb3dzXzk4OiogfCBbMzQ1XTg2OldpbmRvd3NfTlQ6KikKKwllY2hvIGkke1VOQU1FX01BQ0hJTkV9LXBjLW1rcworCWV4aXQgOzsKKyAgICBpKjpXaW5kb3dzX05UKjoqIHwgUGVudGl1bSo6V2luZG93c19OVCo6KikKKwkjIEhvdyBkbyB3ZSBrbm93IGl0J3MgSW50ZXJpeCByYXRoZXIgdGhhbiB0aGUgZ2VuZXJpYyBQT1NJWCBzdWJzeXN0ZW0/CisJIyBJdCBhbHNvIGNvbmZsaWN0cyB3aXRoIHByZS0yLjAgdmVyc2lvbnMgb2YgQVQmVCBVV0lOLiBTaG91bGQgd2UKKwkjIFVOQU1FX01BQ0hJTkUgYmFzZWQgb24gdGhlIG91dHB1dCBvZiB1bmFtZSBpbnN0ZWFkIG9mIGkzODY/CisJZWNobyBpNTg2LXBjLWludGVyaXgKKwlleGl0IDs7CisgICAgaSo6VVdJTio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtdXdpbgorCWV4aXQgOzsKKyAgICBhbWQ2NDpDWUdXSU4qOio6KiB8IHg4Nl82NDpDWUdXSU4qOio6KikKKwllY2hvIHg4Nl82NC11bmtub3duLWN5Z3dpbgorCWV4aXQgOzsKKyAgICBwKjpDWUdXSU4qOiopCisJZWNobyBwb3dlcnBjbGUtdW5rbm93bi1jeWd3aW4KKwlleGl0IDs7CisgICAgcHJlcCo6U3VuT1M6NS4qOiopCisJZWNobyBwb3dlcnBjbGUtdW5rbm93bi1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAorCWV4aXQgOzsKKyAgICAqOkdOVToqOiopCisJIyB0aGUgR05VIHN5c3RlbQorCWVjaG8gYGVjaG8gJHtVTkFNRV9NQUNISU5FfXxzZWQgLWUgJ3MsWy0vXS4qJCwsJ2AtdW5rbm93bi1nbnVgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncywvLiokLCwnYAorCWV4aXQgOzsKKyAgICAqOkdOVS8qOio6KikKKwkjIG90aGVyIHN5c3RlbXMgd2l0aCBHTlUgbGliYyBhbmQgdXNlcmxhbmQKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1gZWNobyAke1VOQU1FX1NZU1RFTX0gfCBzZWQgJ3MsXlteL10qLywsJyB8IHRyICdbQS1aXScgJ1thLXpdJ2BgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLShdLiovLydgLWdudQorCWV4aXQgOzsKKyAgICBpKjg2Ok1pbml4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtbWluaXgKKwlleGl0IDs7CisgICAgYXJtKjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIGF2cjMyKjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIGNyaXM6TGludXg6KjoqKQorCWVjaG8gY3Jpcy1heGlzLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBjcmlzdjMyOkxpbnV4Oio6KikKKwllY2hvIGNyaXN2MzItYXhpcy1saW51eC1nbnUKKwlleGl0IDs7CisgICAgZnJ2OkxpbnV4Oio6KikKKyAgICAJZWNobyBmcnYtdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgaWE2NDpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIG0zMnIqOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgbTY4KjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIG1pcHM6TGludXg6KjoqKQorCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwlzZWQgJ3MvXgkvLycgPDwgRU9GID4kZHVtbXkuYworCSN1bmRlZiBDUFUKKwkjdW5kZWYgbWlwcworCSN1bmRlZiBtaXBzZWwKKwkjaWYgZGVmaW5lZChfX01JUFNFTF9fKSB8fCBkZWZpbmVkKF9fTUlQU0VMKSB8fCBkZWZpbmVkKF9NSVBTRUwpIHx8IGRlZmluZWQoTUlQU0VMKQorCUNQVT1taXBzZWwKKwkjZWxzZQorCSNpZiBkZWZpbmVkKF9fTUlQU0VCX18pIHx8IGRlZmluZWQoX19NSVBTRUIpIHx8IGRlZmluZWQoX01JUFNFQikgfHwgZGVmaW5lZChNSVBTRUIpCisJQ1BVPW1pcHMKKwkjZWxzZQorCUNQVT0KKwkjZW5kaWYKKwkjZW5kaWYKK0VPRgorCWV2YWwgImAkQ0NfRk9SX0JVSUxEIC1FICRkdW1teS5jIDI+L2Rldi9udWxsIHwgc2VkIC1uICcKKwkgICAgL15DUFUveworCQlzOiA6OmcKKwkJcAorCSAgICB9J2AiCisJdGVzdCB4IiR7Q1BVfSIgIT0geCAmJiB7IGVjaG8gIiR7Q1BVfS11bmtub3duLWxpbnV4LWdudSI7IGV4aXQ7IH0KKwk7OworICAgIG1pcHM2NDpMaW51eDoqOiopCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCXNlZCAncy9eCS8vJyA8PCBFT0YgPiRkdW1teS5jCisJI3VuZGVmIENQVQorCSN1bmRlZiBtaXBzNjQKKwkjdW5kZWYgbWlwczY0ZWwKKwkjaWYgZGVmaW5lZChfX01JUFNFTF9fKSB8fCBkZWZpbmVkKF9fTUlQU0VMKSB8fCBkZWZpbmVkKF9NSVBTRUwpIHx8IGRlZmluZWQoTUlQU0VMKQorCUNQVT1taXBzNjRlbAorCSNlbHNlCisJI2lmIGRlZmluZWQoX19NSVBTRUJfXykgfHwgZGVmaW5lZChfX01JUFNFQikgfHwgZGVmaW5lZChfTUlQU0VCKSB8fCBkZWZpbmVkKE1JUFNFQikKKwlDUFU9bWlwczY0CisJI2Vsc2UKKwlDUFU9CisJI2VuZGlmCisJI2VuZGlmCitFT0YKKwlldmFsICJgJENDX0ZPUl9CVUlMRCAtRSAkZHVtbXkuYyAyPi9kZXYvbnVsbCB8IHNlZCAtbiAnCisJICAgIC9eQ1BVL3sKKwkJczogOjpnCisJCXAKKwkgICAgfSdgIgorCXRlc3QgeCIke0NQVX0iICE9IHggJiYgeyBlY2hvICIke0NQVX0tdW5rbm93bi1saW51eC1nbnUiOyBleGl0OyB9CisJOzsKKyAgICBvcjMyOkxpbnV4Oio6KikKKwllY2hvIG9yMzItdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgcHBjOkxpbnV4Oio6KikKKwllY2hvIHBvd2VycGMtdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgcHBjNjQ6TGludXg6KjoqKQorCWVjaG8gcG93ZXJwYzY0LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIGFscGhhOkxpbnV4Oio6KikKKwljYXNlIGBzZWQgLW4gJy9eY3B1IG1vZGVsL3MvXi4qOiBcKC4qXCkvXDEvcCcgPCAvcHJvYy9jcHVpbmZvYCBpbgorCSAgRVY1KSAgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjUgOzsKKwkgIEVWNTYpICBVTkFNRV9NQUNISU5FPWFscGhhZXY1NiA7OworCSAgUENBNTYpIFVOQU1FX01BQ0hJTkU9YWxwaGFwY2E1NiA7OworCSAgUENBNTcpIFVOQU1FX01BQ0hJTkU9YWxwaGFwY2E1NiA7OworCSAgRVY2KSAgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjYgOzsKKwkgIEVWNjcpICBVTkFNRV9NQUNISU5FPWFscGhhZXY2NyA7OworCSAgRVY2OCopIFVOQU1FX01BQ0hJTkU9YWxwaGFldjY4IDs7CisgICAgICAgIGVzYWMKKwlvYmpkdW1wIC0tcHJpdmF0ZS1oZWFkZXJzIC9iaW4vc2ggfCBncmVwIGxkLnNvLjEgPi9kZXYvbnVsbAorCWlmIHRlc3QgIiQ/IiA9IDAgOyB0aGVuIExJQkM9ImxpYmMxIiA7IGVsc2UgTElCQz0iIiA7IGZpCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251JHtMSUJDfQorCWV4aXQgOzsKKyAgICBwYXJpc2M6TGludXg6KjoqIHwgaHBwYTpMaW51eDoqOiopCisJIyBMb29rIGZvciBDUFUgbGV2ZWwKKwljYXNlIGBncmVwICdeY3B1W15hLXpdKjonIC9wcm9jL2NwdWluZm8gMj4vZGV2L251bGwgfCBjdXQgLWQnICcgLWYyYCBpbgorCSAgUEE3KikgZWNobyBocHBhMS4xLXVua25vd24tbGludXgtZ251IDs7CisJICBQQTgqKSBlY2hvIGhwcGEyLjAtdW5rbm93bi1saW51eC1nbnUgOzsKKwkgICopICAgIGVjaG8gaHBwYS11bmtub3duLWxpbnV4LWdudSA7OworCWVzYWMKKwlleGl0IDs7CisgICAgcGFyaXNjNjQ6TGludXg6KjoqIHwgaHBwYTY0OkxpbnV4Oio6KikKKwllY2hvIGhwcGE2NC11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBzMzkwOkxpbnV4Oio6KiB8IHMzOTB4OkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0taWJtLWxpbnV4CisJZXhpdCA7OworICAgIHNoNjQqOkxpbnV4Oio6KikKKyAgICAJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIHNoKjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIHNwYXJjOkxpbnV4Oio6KiB8IHNwYXJjNjQ6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICB2YXg6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1kZWMtbGludXgtZ251CisJZXhpdCA7OworICAgIHg4Nl82NDpMaW51eDoqOiopCisJZWNobyB4ODZfNjQtdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgeHRlbnNhOkxpbnV4Oio6KikKKyAgICAJZWNobyB4dGVuc2EtdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgaSo4NjpMaW51eDoqOiopCisJIyBUaGUgQkZEIGxpbmtlciBrbm93cyB3aGF0IHRoZSBkZWZhdWx0IG9iamVjdCBmaWxlIGZvcm1hdCBpcywgc28KKwkjIGZpcnN0IHNlZSBpZiBpdCB3aWxsIHRlbGwgdXMuIGNkIHRvIHRoZSByb290IGRpcmVjdG9yeSB0byBwcmV2ZW50CisJIyBwcm9ibGVtcyB3aXRoIG90aGVyIHByb2dyYW1zIG9yIGRpcmVjdG9yaWVzIGNhbGxlZCBgbGQnIGluIHRoZSBwYXRoLgorCSMgU2V0IExDX0FMTD1DIHRvIGVuc3VyZSBsZCBvdXRwdXRzIG1lc3NhZ2VzIGluIEVuZ2xpc2guCisJbGRfc3VwcG9ydGVkX3RhcmdldHM9YGNkIC87IExDX0FMTD1DIGxkIC0taGVscCAyPiYxIFwKKwkJCSB8IHNlZCAtbmUgJy9zdXBwb3J0ZWQgdGFyZ2V0czovIWQKKwkJCQkgICAgcy9bIAldWyAJXSovIC9nCisJCQkJICAgIHMvLipzdXBwb3J0ZWQgdGFyZ2V0czogKi8vCisJCQkJICAgIHMvIC4qLy8KKwkJCQkgICAgcCdgCisgICAgICAgIGNhc2UgIiRsZF9zdXBwb3J0ZWRfdGFyZ2V0cyIgaW4KKwkgIGVsZjMyLWkzODYpCisJCVRFTlRBVElWRT0iJHtVTkFNRV9NQUNISU5FfS1wYy1saW51eC1nbnUiCisJCTs7CisJICBhLm91dC1pMzg2LWxpbnV4KQorCQllY2hvICIke1VOQU1FX01BQ0hJTkV9LXBjLWxpbnV4LWdudWFvdXQiCisJCWV4aXQgOzsKKwkgIGNvZmYtaTM4NikKKwkJZWNobyAiJHtVTkFNRV9NQUNISU5FfS1wYy1saW51eC1nbnVjb2ZmIgorCQlleGl0IDs7CisJICAiIikKKwkJIyBFaXRoZXIgYSBwcmUtQkZEIGEub3V0IGxpbmtlciAobGludXgtZ251b2xkbGQpIG9yCisJCSMgb25lIHRoYXQgZG9lcyBub3QgZ2l2ZSB1cyB1c2VmdWwgLS1oZWxwLgorCQllY2hvICIke1VOQU1FX01BQ0hJTkV9LXBjLWxpbnV4LWdudW9sZGxkIgorCQlleGl0IDs7CisJZXNhYworCSMgRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGRlZmF1bHQgY29tcGlsZXIgaXMgYS5vdXQgb3IgZWxmCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCXNlZCAncy9eCS8vJyA8PCBFT0YgPiRkdW1teS5jCisJI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisJI2lmZGVmIF9fRUxGX18KKwkjIGlmZGVmIF9fR0xJQkNfXworCSMgIGlmIF9fR0xJQkNfXyA+PSAyCisJTElCQz1nbnUKKwkjICBlbHNlCisJTElCQz1nbnVsaWJjMQorCSMgIGVuZGlmCisJIyBlbHNlCisJTElCQz1nbnVsaWJjMQorCSMgZW5kaWYKKwkjZWxzZQorCSNpZiBkZWZpbmVkKF9fSU5URUxfQ09NUElMRVIpIHx8IGRlZmluZWQoX19QR0kpIHx8IGRlZmluZWQoX19TVU5QUk9fQykgfHwgZGVmaW5lZChfX1NVTlBST19DQykKKwlMSUJDPWdudQorCSNlbHNlCisJTElCQz1nbnVhb3V0CisJI2VuZGlmCisJI2VuZGlmCisJI2lmZGVmIF9fZGlldGxpYmNfXworCUxJQkM9ZGlldGxpYmMKKwkjZW5kaWYKK0VPRgorCWV2YWwgImAkQ0NfRk9SX0JVSUxEIC1FICRkdW1teS5jIDI+L2Rldi9udWxsIHwgc2VkIC1uICcKKwkgICAgL15MSUJDL3sKKwkJczogOjpnCisJCXAKKwkgICAgfSdgIgorCXRlc3QgeCIke0xJQkN9IiAhPSB4ICYmIHsKKwkJZWNobyAiJHtVTkFNRV9NQUNISU5FfS1wYy1saW51eC0ke0xJQkN9IgorCQlleGl0CisJfQorCXRlc3QgeCIke1RFTlRBVElWRX0iICE9IHggJiYgeyBlY2hvICIke1RFTlRBVElWRX0iOyBleGl0OyB9CisJOzsKKyAgICBpKjg2OkRZTklYL3B0eDo0KjoqKQorCSMgcHR4IDQuMCBkb2VzIHVuYW1lIC1zIGNvcnJlY3RseSwgd2l0aCBEWU5JWC9wdHggaW4gdGhlcmUuCisJIyBlYXJsaWVyIHZlcnNpb25zIGFyZSBtZXNzZWQgdXAgYW5kIHB1dCB0aGUgbm9kZW5hbWUgaW4gYm90aAorCSMgc3lzbmFtZSBhbmQgbm9kZW5hbWUuCisJZWNobyBpMzg2LXNlcXVlbnQtc3lzdjQKKwlleGl0IDs7CisgICAgaSo4NjpVTklYX1NWOjQuMk1QOjIuKikKKyAgICAgICAgIyBVbml4d2FyZSBpcyBhbiBvZmZzaG9vdCBvZiBTVlI0LCBidXQgaXQgaGFzIGl0cyBvd24gdmVyc2lvbgorICAgICAgICAjIG51bWJlciBzZXJpZXMgc3RhcnRpbmcgd2l0aCAyLi4uCisgICAgICAgICMgSSBhbSBub3QgcG9zaXRpdmUgdGhhdCBvdGhlciBTVlI0IHN5c3RlbXMgd29uJ3QgbWF0Y2ggdGhpcywKKwkjIEkganVzdCBoYXZlIHRvIGhvcGUuICAtLSBybXMuCisgICAgICAgICMgVXNlIHN5c3Y0LjJ1dy4uLiBzbyB0aGF0IHN5c3Y0KiBtYXRjaGVzIGl0LgorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1zeXN2NC4ydXcke1VOQU1FX1ZFUlNJT059CisJZXhpdCA7OworICAgIGkqODY6T1MvMjoqOiopCisJIyBJZiB3ZSB3ZXJlIGFibGUgdG8gZmluZCBgdW5hbWUnLCB0aGVuIEVNWCBVbml4IGNvbXBhdGliaWxpdHkKKwkjIGlzIHByb2JhYmx5IGluc3RhbGxlZC4KKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtb3MyLWVteAorCWV4aXQgOzsKKyAgICBpKjg2OlhUUy0zMDA6KjpTVE9QKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLXN0b3AKKwlleGl0IDs7CisgICAgaSo4NjphdGhlb3M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWF0aGVvcworCWV4aXQgOzsKKyAgICBpKjg2OnN5bGxhYmxlOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc3lsbGFibGUKKwlleGl0IDs7CisgICAgaSo4NjpMeW54T1M6Mi4qOiogfCBpKjg2Okx5bnhPUzozLlswMV0qOiogfCBpKjg2Okx5bnhPUzo0LjAqOiopCisJZWNobyBpMzg2LXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBpKjg2OipET1M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1tc2Rvc2RqZ3BwCisJZXhpdCA7OworICAgIGkqODY6Kjo0Lio6KiB8IGkqODY6U1lTVEVNX1Y6NC4qOiopCisJVU5BTUVfUkVMPWBlY2hvICR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgJ3MvXC9NUCQvLydgCisJaWYgZ3JlcCBOb3ZlbGwgL3Vzci9pbmNsdWRlL2xpbmsuaCA+L2Rldi9udWxsIDI+L2Rldi9udWxsOyB0aGVuCisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bml2ZWwtc3lzdiR7VU5BTUVfUkVMfQorCWVsc2UKKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXN5c3Yke1VOQU1FX1JFTH0KKwlmaQorCWV4aXQgOzsKKyAgICBpKjg2Oio6NTpbNjc4XSopCisgICAgCSMgVW5peFdhcmUgNy54LCBPcGVuVU5JWCBhbmQgT3BlblNlcnZlciA2LgorCWNhc2UgYC9iaW4vdW5hbWUgLVggfCBncmVwICJeTWFjaGluZSJgIGluCisJICAgICo0ODYqKQkgICAgIFVOQU1FX01BQ0hJTkU9aTQ4NiA7OworCSAgICAqUGVudGl1bSkJICAgICBVTkFNRV9NQUNISU5FPWk1ODYgOzsKKwkgICAgKlBlbnQqfCpDZWxlcm9uKSBVTkFNRV9NQUNISU5FPWk2ODYgOzsKKwllc2FjCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tc3lzdiR7VU5BTUVfUkVMRUFTRX0ke1VOQU1FX1NZU1RFTX0ke1VOQU1FX1ZFUlNJT059CisJZXhpdCA7OworICAgIGkqODY6KjozLjI6KikKKwlpZiB0ZXN0IC1mIC91c3Ivb3B0aW9ucy9jYi5uYW1lOyB0aGVuCisJCVVOQU1FX1JFTD1gc2VkIC1uICdzLy4qVmVyc2lvbiAvL3AnIDwvdXNyL29wdGlvbnMvY2IubmFtZWAKKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLWlzYyRVTkFNRV9SRUwKKwllbGlmIC9iaW4vdW5hbWUgLVggMj4vZGV2L251bGwgPi9kZXYvbnVsbCA7IHRoZW4KKwkJVU5BTUVfUkVMPWAoL2Jpbi91bmFtZSAtWHxncmVwIFJlbGVhc2V8c2VkIC1lICdzLy4qPSAvLycpYAorCQkoL2Jpbi91bmFtZSAtWHxncmVwIGk4MDQ4NiA+L2Rldi9udWxsKSAmJiBVTkFNRV9NQUNISU5FPWk0ODYKKwkJKC9iaW4vdW5hbWUgLVh8Z3JlcCAnXk1hY2hpbmUuKlBlbnRpdW0nID4vZGV2L251bGwpIFwKKwkJCSYmIFVOQU1FX01BQ0hJTkU9aTU4NgorCQkoL2Jpbi91bmFtZSAtWHxncmVwICdeTWFjaGluZS4qUGVudCAqSUknID4vZGV2L251bGwpIFwKKwkJCSYmIFVOQU1FX01BQ0hJTkU9aTY4NgorCQkoL2Jpbi91bmFtZSAtWHxncmVwICdeTWFjaGluZS4qUGVudGl1bSBQcm8nID4vZGV2L251bGwpIFwKKwkJCSYmIFVOQU1FX01BQ0hJTkU9aTY4NgorCQllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc2NvJFVOQU1FX1JFTAorCWVsc2UKKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXN5c3YzMgorCWZpCisJZXhpdCA7OworICAgIHBjOio6KjoqKQorCSMgTGVmdCBoZXJlIGZvciBjb21wYXRpYmlsaXR5OgorICAgICAgICAjIHVuYW1lIC1tIHByaW50cyBmb3IgREpHUFAgYWx3YXlzICdwYycsIGJ1dCBpdCBwcmludHMgbm90aGluZyBhYm91dAorICAgICAgICAjIHRoZSBwcm9jZXNzb3IsIHNvIHdlIHBsYXkgc2FmZSBieSBhc3N1bWluZyBpMzg2LgorCWVjaG8gaTM4Ni1wYy1tc2Rvc2RqZ3BwCisgICAgICAgIGV4aXQgOzsKKyAgICBJbnRlbDpNYWNoOjMqOiopCisJZWNobyBpMzg2LXBjLW1hY2gzCisJZXhpdCA7OworICAgIHBhcmFnb246KjoqOiopCisJZWNobyBpODYwLWludGVsLW9zZjEKKwlleGl0IDs7CisgICAgaTg2MDoqOjQuKjoqKSAjIGk4NjAtU1ZSNAorCWlmIGdyZXAgU3RhcmRlbnQgL3Vzci9pbmNsdWRlL3N5cy91YWRtaW4uaCA+L2Rldi9udWxsIDI+JjEgOyB0aGVuCisJICBlY2hvIGk4NjAtc3RhcmRlbnQtc3lzdiR7VU5BTUVfUkVMRUFTRX0gIyBTdGFyZGVudCBWaXN0cmEgaTg2MC1TVlI0CisJZWxzZSAjIEFkZCBvdGhlciBpODYwLVNWUjQgdmVuZG9ycyBiZWxvdyBhcyB0aGV5IGFyZSBkaXNjb3ZlcmVkLgorCSAgZWNobyBpODYwLXVua25vd24tc3lzdiR7VU5BTUVfUkVMRUFTRX0gICMgVW5rbm93biBpODYwLVNWUjQKKwlmaQorCWV4aXQgOzsKKyAgICBtaW5pKjpDVElYOlNZUyo1OiopCisJIyAibWluaWZyYW1lIgorCWVjaG8gbTY4MDEwLWNvbnZlcmdlbnQtc3lzdgorCWV4aXQgOzsKKyAgICBtYzY4azpVTklYOlNZU1RFTTU6My41MW0pCisJZWNobyBtNjhrLWNvbnZlcmdlbnQtc3lzdgorCWV4aXQgOzsKKyAgICBNNjgwPzA6RC1OSVg6NS4zOiopCisJZWNobyBtNjhrLWRpYWItZG5peAorCWV4aXQgOzsKKyAgICBNNjgqOio6UjNWWzU2NzhdKjoqKQorCXRlc3QgLXIgL3N5c1Y2OCAmJiB7IGVjaG8gJ202OGstbW90b3JvbGEtc3lzdic7IGV4aXQ7IH0gOzsKKyAgICAzWzM0NV0/PzoqOjQuMDozLjAgfCAzWzM0XT8/QToqOjQuMDozLjAgfCAzWzM0XT8/LCo6Kjo0LjA6My4wIHwgM1szNF0/Py8qOio6NC4wOjMuMCB8IDQ0MDA6Kjo0LjA6My4wIHwgNDg1MDoqOjQuMDozLjAgfCBTS0E0MDoqOjQuMDozLjAgfCBTRFMyOio6NC4wOjMuMCB8IFNIRzI6Kjo0LjA6My4wIHwgUzc1MDEqOio6NC4wOjMuMCkKKwlPU19SRUw9JycKKwl0ZXN0IC1yIC9ldGMvLnJlbGlkIFwKKwkmJiBPU19SRUw9LmBzZWQgLW4gJ3MvW14gXSogW14gXSogXChbMC05XVswLTldXCkuKi9cMS9wJyA8IC9ldGMvLnJlbGlkYAorCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCBncmVwIDg2ID4vZGV2L251bGwgXAorCSAgJiYgeyBlY2hvIGk0ODYtbmNyLXN5c3Y0LjMke09TX1JFTH07IGV4aXQ7IH0KKwkvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgL2Jpbi9ncmVwIGVudGl1bSA+L2Rldi9udWxsIFwKKwkgICYmIHsgZWNobyBpNTg2LW5jci1zeXN2NC4zJHtPU19SRUx9OyBleGl0OyB9IDs7CisgICAgM1szNF0/PzoqOjQuMDoqIHwgM1szNF0/PywqOio6NC4wOiopCisgICAgICAgIC9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCBncmVwIDg2ID4vZGV2L251bGwgXAorICAgICAgICAgICYmIHsgZWNobyBpNDg2LW5jci1zeXN2NDsgZXhpdDsgfSA7OworICAgIG02OCo6THlueE9TOjIuKjoqIHwgbTY4KjpMeW54T1M6My4wKjoqKQorCWVjaG8gbTY4ay11bmtub3duLWx5bnhvcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgbWM2ODAzMDpVTklYX1N5c3RlbV9WOjQuKjoqKQorCWVjaG8gbTY4ay1hdGFyaS1zeXN2NAorCWV4aXQgOzsKKyAgICBUU1VOQU1JOkx5bnhPUzoyLio6KikKKwllY2hvIHNwYXJjLXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICByczYwMDA6THlueE9TOjIuKjoqKQorCWVjaG8gcnM2MDAwLXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBQb3dlclBDOkx5bnhPUzoyLio6KiB8IFBvd2VyUEM6THlueE9TOjMuWzAxXSo6KiB8IFBvd2VyUEM6THlueE9TOjQuMCo6KikKKwllY2hvIHBvd2VycGMtdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFNNW0JFXVM6VU5JWF9TVjoqOiopCisJZWNobyBtaXBzLWRkZS1zeXN2JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBSTSo6UmVsaWFudFVOSVgtKjoqOiopCisJZWNobyBtaXBzLXNuaS1zeXN2NAorCWV4aXQgOzsKKyAgICBSTSo6U0lOSVgtKjoqOiopCisJZWNobyBtaXBzLXNuaS1zeXN2NAorCWV4aXQgOzsKKyAgICAqOlNJTklYLSo6KjoqKQorCWlmIHVuYW1lIC1wIDI+L2Rldi9udWxsID4vZGV2L251bGwgOyB0aGVuCisJCVVOQU1FX01BQ0hJTkU9YCh1bmFtZSAtcCkgMj4vZGV2L251bGxgCisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1zbmktc3lzdjQKKwllbHNlCisJCWVjaG8gbnMzMmstc25pLXN5c3YKKwlmaQorCWV4aXQgOzsKKyAgICBQRU5USVVNOio6NC4wKjoqKSAjIFVuaXN5cyBgQ2xlYXJQYXRoIEhNUCBJWCA0MDAwJyBTVlI0L01QIGVmZm9ydAorICAgICAgICAgICAgICAgICAgICAgICMgc2F5cyA8UmljaGFyZC5NLkJhcnRlbEBjY01haWwuQ2Vuc3VzLkdPVj4KKyAgICAgICAgZWNobyBpNTg2LXVuaXN5cy1zeXN2NAorICAgICAgICBleGl0IDs7CisgICAgKjpVTklYX1N5c3RlbV9WOjQqOkZUWCopCisJIyBGcm9tIEdlcmFsZCBIZXdlcyA8aGV3ZXNAb3Blbm1hcmtldC5jb20+LgorCSMgSG93IGFib3V0IGRpZmZlcmVudGlhdGluZyBiZXR3ZWVuIHN0cmF0dXMgYXJjaGl0ZWN0dXJlcz8gLWRqbQorCWVjaG8gaHBwYTEuMS1zdHJhdHVzLXN5c3Y0CisJZXhpdCA7OworICAgICo6KjoqOkZUWCopCisJIyBGcm9tIHNlYW5mQHN3ZGMuc3RyYXR1cy5jb20uCisJZWNobyBpODYwLXN0cmF0dXMtc3lzdjQKKwlleGl0IDs7CisgICAgaSo4NjpWT1M6KjoqKQorCSMgRnJvbSBQYXVsLkdyZWVuQHN0cmF0dXMuY29tLgorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1zdHJhdHVzLXZvcworCWV4aXQgOzsKKyAgICAqOlZPUzoqOiopCisJIyBGcm9tIFBhdWwuR3JlZW5Ac3RyYXR1cy5jb20uCisJZWNobyBocHBhMS4xLXN0cmF0dXMtdm9zCisJZXhpdCA7OworICAgIG1jNjgqOkEvVVg6KjoqKQorCWVjaG8gbTY4ay1hcHBsZS1hdXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIG5ld3MqOk5FV1MtT1M6Nio6KikKKwllY2hvIG1pcHMtc29ueS1uZXdzb3M2CisJZXhpdCA7OworICAgIFJbMzRdMDAwOipTeXN0ZW1fVio6KjoqIHwgUjQwMDA6VU5JWF9TWVNWOio6KiB8IFIqMDAwOlVOSVhfU1Y6KjoqKQorCWlmIFsgLWQgL3Vzci9uZWMgXTsgdGhlbgorCSAgICAgICAgZWNobyBtaXBzLW5lYy1zeXN2JHtVTkFNRV9SRUxFQVNFfQorCWVsc2UKKwkgICAgICAgIGVjaG8gbWlwcy11bmtub3duLXN5c3Yke1VOQU1FX1JFTEVBU0V9CisJZmkKKyAgICAgICAgZXhpdCA7OworICAgIEJlQm94OkJlT1M6KjoqKQkjIEJlT1MgcnVubmluZyBvbiBoYXJkd2FyZSBtYWRlIGJ5IEJlLCBQUEMgb25seS4KKwllY2hvIHBvd2VycGMtYmUtYmVvcworCWV4aXQgOzsKKyAgICBCZU1hYzpCZU9TOio6KikJIyBCZU9TIHJ1bm5pbmcgb24gTWFjIG9yIE1hYyBjbG9uZSwgUFBDIG9ubHkuCisJZWNobyBwb3dlcnBjLWFwcGxlLWJlb3MKKwlleGl0IDs7CisgICAgQmVQQzpCZU9TOio6KikJIyBCZU9TIHJ1bm5pbmcgb24gSW50ZWwgUEMgY29tcGF0aWJsZS4KKwllY2hvIGk1ODYtcGMtYmVvcworCWV4aXQgOzsKKyAgICBTWC00OlNVUEVSLVVYOio6KikKKwllY2hvIHN4NC1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgU1gtNTpTVVBFUi1VWDoqOiopCisJZWNobyBzeDUtbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFNYLTY6U1VQRVItVVg6KjoqKQorCWVjaG8gc3g2LW5lYy1zdXBlcnV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBTWC03OlNVUEVSLVVYOio6KikKKwllY2hvIHN4Ny1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgU1gtODpTVVBFUi1VWDoqOiopCisJZWNobyBzeDgtbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFNYLThSOlNVUEVSLVVYOio6KikKKwllY2hvIHN4OHItbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFBvd2VyKjpSaGFwc29keToqOiopCisJZWNobyBwb3dlcnBjLWFwcGxlLXJoYXBzb2R5JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOlJoYXBzb2R5Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tYXBwbGUtcmhhcHNvZHkke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6RGFyd2luOio6KikKKwlVTkFNRV9QUk9DRVNTT1I9YHVuYW1lIC1wYCB8fCBVTkFNRV9QUk9DRVNTT1I9dW5rbm93bgorCWNhc2UgJFVOQU1FX1BST0NFU1NPUiBpbgorCSAgICB1bmtub3duKSBVTkFNRV9QUk9DRVNTT1I9cG93ZXJwYyA7OworCWVzYWMKKwllY2hvICR7VU5BTUVfUFJPQ0VTU09SfS1hcHBsZS1kYXJ3aW4ke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6cHJvY250byo6KjoqIHwgKjpRTlg6WzAxMjM0NTY3ODldKjoqKQorCVVOQU1FX1BST0NFU1NPUj1gdW5hbWUgLXBgCisJaWYgdGVzdCAiJFVOQU1FX1BST0NFU1NPUiIgPSAieDg2IjsgdGhlbgorCQlVTkFNRV9QUk9DRVNTT1I9aTM4NgorCQlVTkFNRV9NQUNISU5FPXBjCisJZmkKKwllY2hvICR7VU5BTUVfUFJPQ0VTU09SfS0ke1VOQU1FX01BQ0hJTkV9LW50by1xbngke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6UU5YOio6NCopCisJZWNobyBpMzg2LXBjLXFueAorCWV4aXQgOzsKKyAgICBOU0UtPzpOT05TVE9QX0tFUk5FTDoqOiopCisJZWNobyBuc2UtdGFuZGVtLW5zayR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgTlNSLT86Tk9OU1RPUF9LRVJORUw6KjoqKQorCWVjaG8gbnNyLXRhbmRlbS1uc2ske1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6Tm9uU3RvcC1VWDoqOiopCisJZWNobyBtaXBzLWNvbXBhcS1ub25zdG9wdXgKKwlleGl0IDs7CisgICAgQlMyMDAwOlBPU0lYKjoqOiopCisJZWNobyBiczIwMDAtc2llbWVucy1zeXN2CisJZXhpdCA7OworICAgIERTLyo6VU5JWF9TeXN0ZW1fVjoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LSR7VU5BTUVfU1lTVEVNfS0ke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6UGxhbjk6KjoqKQorCSMgInVuYW1lIC1tIiBpcyBub3QgY29uc2lzdGVudCwgc28gdXNlICRjcHV0eXBlIGluc3RlYWQuIDM4NgorCSMgaXMgY29udmVydGVkIHRvIGkzODYgZm9yIGNvbnNpc3RlbmN5IHdpdGggb3RoZXIgeDg2CisJIyBvcGVyYXRpbmcgc3lzdGVtcy4KKwlpZiB0ZXN0ICIkY3B1dHlwZSIgPSAiMzg2IjsgdGhlbgorCSAgICBVTkFNRV9NQUNISU5FPWkzODYKKwllbHNlCisJICAgIFVOQU1FX01BQ0hJTkU9IiRjcHV0eXBlIgorCWZpCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tcGxhbjkKKwlleGl0IDs7CisgICAgKjpUT1BTLTEwOio6KikKKwllY2hvIHBkcDEwLXVua25vd24tdG9wczEwCisJZXhpdCA7OworICAgICo6VEVORVg6KjoqKQorCWVjaG8gcGRwMTAtdW5rbm93bi10ZW5leAorCWV4aXQgOzsKKyAgICBLUzEwOlRPUFMtMjA6KjoqIHwgS0wxMDpUT1BTLTIwOio6KiB8IFRZUEU0OlRPUFMtMjA6KjoqKQorCWVjaG8gcGRwMTAtZGVjLXRvcHMyMAorCWV4aXQgOzsKKyAgICBYS0wtMTpUT1BTLTIwOio6KiB8IFRZUEU1OlRPUFMtMjA6KjoqKQorCWVjaG8gcGRwMTAteGtsLXRvcHMyMAorCWV4aXQgOzsKKyAgICAqOlRPUFMtMjA6KjoqKQorCWVjaG8gcGRwMTAtdW5rbm93bi10b3BzMjAKKwlleGl0IDs7CisgICAgKjpJVFM6KjoqKQorCWVjaG8gcGRwMTAtdW5rbm93bi1pdHMKKwlleGl0IDs7CisgICAgU0VJOio6KjpTRUlVWCkKKyAgICAgICAgZWNobyBtaXBzLXNlaS1zZWl1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpEcmFnb25GbHk6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWRyYWdvbmZseWBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stKF0uKi8vJ2AKKwlleGl0IDs7CisgICAgKjoqVk1TOio6KikKKyAgICAJVU5BTUVfTUFDSElORT1gKHVuYW1lIC1wKSAyPi9kZXYvbnVsbGAKKwljYXNlICIke1VOQU1FX01BQ0hJTkV9IiBpbgorCSAgICBBKikgZWNobyBhbHBoYS1kZWMtdm1zIDsgZXhpdCA7OworCSAgICBJKikgZWNobyBpYTY0LWRlYy12bXMgOyBleGl0IDs7CisJICAgIFYqKSBlY2hvIHZheC1kZWMtdm1zIDsgZXhpdCA7OworCWVzYWMgOzsKKyAgICAqOlhFTklYOio6U3lzVikKKwllY2hvIGkzODYtcGMteGVuaXgKKwlleGl0IDs7CisgICAgaSo4Njpza3lvczoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXNreW9zYGVjaG8gJHtVTkFNRV9SRUxFQVNFfWAgfCBzZWQgLWUgJ3MvIC4qJC8vJworCWV4aXQgOzsKKyAgICBpKjg2OnJkb3M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1yZG9zCisJZXhpdCA7OworZXNhYworCisjZWNobyAnKE5vIHVuYW1lIGNvbW1hbmQgb3IgdW5hbWUgb3V0cHV0IG5vdCByZWNvZ25pemVkLiknIDE+JjIKKyNlY2hvICIke1VOQU1FX01BQ0hJTkV9OiR7VU5BTUVfU1lTVEVNfToke1VOQU1FX1JFTEVBU0V9OiR7VU5BTUVfVkVSU0lPTn0iIDE+JjIKKworZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorY2F0ID4kZHVtbXkuYyA8PEVPRgorI2lmZGVmIF9TRVFVRU5UXworIyBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyMgaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KKyNlbmRpZgorbWFpbiAoKQoreworI2lmIGRlZmluZWQgKHNvbnkpCisjaWYgZGVmaW5lZCAoTUlQU0VCKQorICAvKiBCRkQgd2FudHMgImJzZCIgaW5zdGVhZCBvZiAibmV3c29zIi4gIFBlcmhhcHMgQkZEIHNob3VsZCBiZSBjaGFuZ2VkLAorICAgICBJIGRvbid0IGtub3cuLi4uICAqLworICBwcmludGYgKCJtaXBzLXNvbnktYnNkXG4iKTsgZXhpdCAoMCk7CisjZWxzZQorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorICBwcmludGYgKCJtNjhrLXNvbnktbmV3c29zJXNcbiIsCisjaWZkZWYgTkVXU09TNAorICAgICAgICAgICI0IgorI2Vsc2UKKwkgICIiCisjZW5kaWYKKyAgICAgICAgICk7IGV4aXQgKDApOworI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9fYXJtKSAmJiBkZWZpbmVkIChfX2Fjb3JuKSAmJiBkZWZpbmVkIChfX3VuaXgpCisgIHByaW50ZiAoImFybS1hY29ybi1yaXNjaXhcbiIpOyBleGl0ICgwKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoaHAzMDApICYmICFkZWZpbmVkIChocHV4KQorICBwcmludGYgKCJtNjhrLWhwLWJzZFxuIik7IGV4aXQgKDApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChOZVhUKQorI2lmICFkZWZpbmVkIChfX0FSQ0hJVEVDVFVSRV9fKQorI2RlZmluZSBfX0FSQ0hJVEVDVFVSRV9fICJtNjhrIgorI2VuZGlmCisgIGludCB2ZXJzaW9uOworICB2ZXJzaW9uPWAoaG9zdGluZm8gfCBzZWQgLW4gJ3MvLipOZVhUIE1hY2ggXChbMC05XSpcKS4qL1wxL3AnKSAyPi9kZXYvbnVsbGA7CisgIGlmICh2ZXJzaW9uIDwgNCkKKyAgICBwcmludGYgKCIlcy1uZXh0LW5leHRzdGVwJWRcbiIsIF9fQVJDSElURUNUVVJFX18sIHZlcnNpb24pOworICBlbHNlCisgICAgcHJpbnRmICgiJXMtbmV4dC1vcGVuc3RlcCVkXG4iLCBfX0FSQ0hJVEVDVFVSRV9fLCB2ZXJzaW9uKTsKKyAgZXhpdCAoMCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQgKE1VTFRJTUFYKSB8fCBkZWZpbmVkIChuMTYpCisjaWYgZGVmaW5lZCAoVU1BWFYpCisgIHByaW50ZiAoIm5zMzJrLWVuY29yZS1zeXN2XG4iKTsgZXhpdCAoMCk7CisjZWxzZQorI2lmIGRlZmluZWQgKENNVSkKKyAgcHJpbnRmICgibnMzMmstZW5jb3JlLW1hY2hcbiIpOyBleGl0ICgwKTsKKyNlbHNlCisgIHByaW50ZiAoIm5zMzJrLWVuY29yZS1ic2RcbiIpOyBleGl0ICgwKTsKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9fMzg2QlNEX18pCisgIHByaW50ZiAoImkzODYtcGMtYnNkXG4iKTsgZXhpdCAoMCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQgKHNlcXVlbnQpCisjaWYgZGVmaW5lZCAoaTM4NikKKyAgcHJpbnRmICgiaTM4Ni1zZXF1ZW50LWR5bml4XG4iKTsgZXhpdCAoMCk7CisjZW5kaWYKKyNpZiBkZWZpbmVkIChuczMyMDAwKQorICBwcmludGYgKCJuczMyay1zZXF1ZW50LWR5bml4XG4iKTsgZXhpdCAoMCk7CisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX1NFUVVFTlRfKQorICAgIHN0cnVjdCB1dHNuYW1lIHVuOworCisgICAgdW5hbWUoJnVuKTsKKworICAgIGlmIChzdHJuY21wKHVuLnZlcnNpb24sICJWMiIsIDIpID09IDApIHsKKwlwcmludGYgKCJpMzg2LXNlcXVlbnQtcHR4MlxuIik7IGV4aXQgKDApOworICAgIH0KKyAgICBpZiAoc3RybmNtcCh1bi52ZXJzaW9uLCAiVjEiLCAyKSA9PSAwKSB7IC8qIFhYWCBpcyBWMSBjb3JyZWN0PyAqLworCXByaW50ZiAoImkzODYtc2VxdWVudC1wdHgxXG4iKTsgZXhpdCAoMCk7CisgICAgfQorICAgIHByaW50ZiAoImkzODYtc2VxdWVudC1wdHhcbiIpOyBleGl0ICgwKTsKKworI2VuZGlmCisKKyNpZiBkZWZpbmVkICh2YXgpCisjIGlmICFkZWZpbmVkICh1bHRyaXgpCisjICBpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyMgIGlmIGRlZmluZWQgKEJTRCkKKyMgICBpZiBCU0QgPT0gNDMKKyAgICAgIHByaW50ZiAoInZheC1kZWMtYnNkNC4zXG4iKTsgZXhpdCAoMCk7CisjICAgZWxzZQorIyAgICBpZiBCU0QgPT0gMTk5MDA2CisgICAgICBwcmludGYgKCJ2YXgtZGVjLWJzZDQuM3Jlbm9cbiIpOyBleGl0ICgwKTsKKyMgICAgZWxzZQorICAgICAgcHJpbnRmICgidmF4LWRlYy1ic2RcbiIpOyBleGl0ICgwKTsKKyMgICAgZW5kaWYKKyMgICBlbmRpZgorIyAgZWxzZQorICAgIHByaW50ZiAoInZheC1kZWMtYnNkXG4iKTsgZXhpdCAoMCk7CisjICBlbmRpZgorIyBlbHNlCisgICAgcHJpbnRmICgidmF4LWRlYy11bHRyaXhcbiIpOyBleGl0ICgwKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoYWxsaWFudCkgJiYgZGVmaW5lZCAoaTg2MCkKKyAgcHJpbnRmICgiaTg2MC1hbGxpYW50LWJzZFxuIik7IGV4aXQgKDApOworI2VuZGlmCisKKyAgZXhpdCAoMSk7Cit9CitFT0YKKworJENDX0ZPUl9CVUlMRCAtbyAkZHVtbXkgJGR1bW15LmMgMj4vZGV2L251bGwgJiYgU1lTVEVNX05BTUU9YCRkdW1teWAgJiYKKwl7IGVjaG8gIiRTWVNURU1fTkFNRSI7IGV4aXQ7IH0KKworIyBBcG9sbG9zIHB1dCB0aGUgc3lzdGVtIHR5cGUgaW4gdGhlIGVudmlyb25tZW50LgorCit0ZXN0IC1kIC91c3IvYXBvbGxvICYmIHsgZWNobyAke0lTUH0tYXBvbGxvLSR7U1lTVFlQRX07IGV4aXQ7IH0KKworIyBDb252ZXggdmVyc2lvbnMgdGhhdCBwcmVkYXRlIHVuYW1lIGNhbiB1c2UgZ2V0c3lzaW5mbygxKQorCitpZiBbIC14IC91c3IvY29udmV4L2dldHN5c2luZm8gXQordGhlbgorICAgIGNhc2UgYGdldHN5c2luZm8gLWYgY3B1X3R5cGVgIGluCisgICAgYzEqKQorCWVjaG8gYzEtY29udmV4LWJzZAorCWV4aXQgOzsKKyAgICBjMiopCisJaWYgZ2V0c3lzaW5mbyAtZiBzY2FsYXJfYWNjCisJdGhlbiBlY2hvIGMzMi1jb252ZXgtYnNkCisJZWxzZSBlY2hvIGMyLWNvbnZleC1ic2QKKwlmaQorCWV4aXQgOzsKKyAgICBjMzQqKQorCWVjaG8gYzM0LWNvbnZleC1ic2QKKwlleGl0IDs7CisgICAgYzM4KikKKwllY2hvIGMzOC1jb252ZXgtYnNkCisJZXhpdCA7OworICAgIGM0KikKKwllY2hvIGM0LWNvbnZleC1ic2QKKwlleGl0IDs7CisgICAgZXNhYworZmkKKworY2F0ID4mMiA8PEVPRgorJDA6IHVuYWJsZSB0byBndWVzcyBzeXN0ZW0gdHlwZQorCitUaGlzIHNjcmlwdCwgbGFzdCBtb2RpZmllZCAkdGltZXN0YW1wLCBoYXMgZmFpbGVkIHRvIHJlY29nbml6ZQordGhlIG9wZXJhdGluZyBzeXN0ZW0geW91IGFyZSB1c2luZy4gSXQgaXMgYWR2aXNlZCB0aGF0IHlvdQorZG93bmxvYWQgdGhlIG1vc3QgdXAgdG8gZGF0ZSB2ZXJzaW9uIG9mIHRoZSBjb25maWcgc2NyaXB0cyBmcm9tCisKKyAgaHR0cDovL3NhdmFubmFoLmdudS5vcmcvY2dpLWJpbi92aWV3Y3ZzLypjaGVja291dCovY29uZmlnL2NvbmZpZy9jb25maWcuZ3Vlc3MKK2FuZAorICBodHRwOi8vc2F2YW5uYWguZ251Lm9yZy9jZ2ktYmluL3ZpZXdjdnMvKmNoZWNrb3V0Ki9jb25maWcvY29uZmlnL2NvbmZpZy5zdWIKKworSWYgdGhlIHZlcnNpb24geW91IHJ1biAoJDApIGlzIGFscmVhZHkgdXAgdG8gZGF0ZSwgcGxlYXNlCitzZW5kIHRoZSBmb2xsb3dpbmcgZGF0YSBhbmQgYW55IGluZm9ybWF0aW9uIHlvdSB0aGluayBtaWdodCBiZQorcGVydGluZW50IHRvIDxjb25maWctcGF0Y2hlc0BnbnUub3JnPiBpbiBvcmRlciB0byBwcm92aWRlIHRoZSBuZWVkZWQKK2luZm9ybWF0aW9uIHRvIGhhbmRsZSB5b3VyIHN5c3RlbS4KKworY29uZmlnLmd1ZXNzIHRpbWVzdGFtcCA9ICR0aW1lc3RhbXAKKwordW5hbWUgLW0gPSBgKHVuYW1lIC1tKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCit1bmFtZSAtciA9IGAodW5hbWUgLXIpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKK3VuYW1lIC1zID0gYCh1bmFtZSAtcykgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAordW5hbWUgLXYgPSBgKHVuYW1lIC12KSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCisKKy91c3IvYmluL3VuYW1lIC1wID0gYCgvdXNyL2Jpbi91bmFtZSAtcCkgMj4vZGV2L251bGxgCisvYmluL3VuYW1lIC1YICAgICA9IGAoL2Jpbi91bmFtZSAtWCkgMj4vZGV2L251bGxgCisKK2hvc3RpbmZvICAgICAgICAgICAgICAgPSBgKGhvc3RpbmZvKSAyPi9kZXYvbnVsbGAKKy9iaW4vdW5pdmVyc2UgICAgICAgICAgPSBgKC9iaW4vdW5pdmVyc2UpIDI+L2Rldi9udWxsYAorL3Vzci9iaW4vYXJjaCAtayAgICAgICA9IGAoL3Vzci9iaW4vYXJjaCAtaykgMj4vZGV2L251bGxgCisvYmluL2FyY2ggICAgICAgICAgICAgID0gYCgvYmluL2FyY2gpIDI+L2Rldi9udWxsYAorL3Vzci9iaW4vb3NsZXZlbCAgICAgICA9IGAoL3Vzci9iaW4vb3NsZXZlbCkgMj4vZGV2L251bGxgCisvdXNyL2NvbnZleC9nZXRzeXNpbmZvID0gYCgvdXNyL2NvbnZleC9nZXRzeXNpbmZvKSAyPi9kZXYvbnVsbGAKKworVU5BTUVfTUFDSElORSA9ICR7VU5BTUVfTUFDSElORX0KK1VOQU1FX1JFTEVBU0UgPSAke1VOQU1FX1JFTEVBU0V9CitVTkFNRV9TWVNURU0gID0gJHtVTkFNRV9TWVNURU19CitVTkFNRV9WRVJTSU9OID0gJHtVTkFNRV9WRVJTSU9OfQorRU9GCisKK2V4aXQgMQorCisjIExvY2FsIHZhcmlhYmxlczoKKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXN0YXJ0OiAidGltZXN0YW1wPSciCisjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZCIKKyMgdGltZS1zdGFtcC1lbmQ6ICInIgorIyBFbmQ6CmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvYnVpbGQtYXV4L2NvbmZpZy5ycGF0aCBiL3BhcnRlZC0xLjguNy9idWlsZC1hdXgvY29uZmlnLnJwYXRoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUwODJkYjYKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvYnVpbGQtYXV4L2NvbmZpZy5ycGF0aApAQCAtMCwwICsxLDY2MCBAQAorIyEgL2Jpbi9zaAorIyBPdXRwdXQgYSBzeXN0ZW0gZGVwZW5kZW50IHNldCBvZiB2YXJpYWJsZXMsIGRlc2NyaWJpbmcgaG93IHRvIHNldCB0aGUKKyMgcnVuIHRpbWUgc2VhcmNoIHBhdGggb2Ygc2hhcmVkIGxpYnJhcmllcyBpbiBhbiBleGVjdXRhYmxlLgorIworIyAgIENvcHlyaWdodCAxOTk2LTIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjICAgVGFrZW4gZnJvbSBHTlUgbGlidG9vbCwgMjAwMQorIyAgIE9yaWdpbmFsbHkgYnkgR29yZG9uIE1hdHppZ2tlaXQgPGdvcmRAZ251LmFpLm1pdC5lZHU+LCAxOTk2CisjCisjICAgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKKyMgICB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKKyMgICBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKyMKKyMgVGhlIGZpcnN0IGFyZ3VtZW50IHBhc3NlZCB0byB0aGlzIGZpbGUgaXMgdGhlIGNhbm9uaWNhbCBob3N0IHNwZWNpZmljYXRpb24sCisjICAgIENQVV9UWVBFLU1BTlVGQUNUVVJFUi1PUEVSQVRJTkdfU1lTVEVNCisjIG9yCisjICAgIENQVV9UWVBFLU1BTlVGQUNUVVJFUi1LRVJORUwtT1BFUkFUSU5HX1NZU1RFTQorIyBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIENDLCBHQ0MsIExERkxBR1MsIExELCB3aXRoX2dudV9sZAorIyBzaG91bGQgYmUgc2V0IGJ5IHRoZSBjYWxsZXIuCisjCisjIFRoZSBzZXQgb2YgZGVmaW5lZCB2YXJpYWJsZXMgaXMgYXQgdGhlIGVuZCBvZiB0aGlzIHNjcmlwdC4KKworIyBLbm93biBsaW1pdGF0aW9uczoKKyMgLSBPbiBJUklYIDYuNSB3aXRoIENDPSJjYyIsIHRoZSBydW4gdGltZSBzZWFyY2ggcGF0Y2ggbXVzdCBub3QgYmUgbG9uZ2VyCisjICAgdGhhbiAyNTYgYnl0ZXMsIG90aGVyd2lzZSB0aGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgZHVtcCBjb3JlLiBUaGUgb25seQorIyAgIGtub3duIHdvcmthcm91bmQgaXMgdG8gY2hvb3NlIHNob3J0ZXIgZGlyZWN0b3J5IG5hbWVzIGZvciB0aGUgYnVpbGQKKyMgICBkaXJlY3RvcnkgYW5kL29yIHRoZSBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LgorCisjIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSBgLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKKyMgd2hpY2ggbmVlZHMgJy5saWInKS4KK2xpYmV4dD1hCitzaHJleHQ9LnNvCisKK2hvc3Q9IiQxIgoraG9zdF9jcHU9YGVjaG8gIiRob3N0IiB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wxLydgCitob3N0X3ZlbmRvcj1gZWNobyAiJGhvc3QiIHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDIvJ2AKK2hvc3Rfb3M9YGVjaG8gIiRob3N0IiB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wzLydgCisKKyMgQ29kZSB0YWtlbiBmcm9tIGxpYnRvb2wubTQncyBfTFRfQ0NfQkFTRU5BTUUuCisKK2ZvciBjY190ZW1wIGluICRDQyIiOyBkbworICBjYXNlICRjY190ZW1wIGluCisgICAgY29tcGlsZSB8ICpbXFwvXWNvbXBpbGUgfCBjY2FjaGUgfCAqW1xcL11jY2FjaGUgKSA7OworICAgIGRpc3RjYyB8ICpbXFwvXWRpc3RjYyB8IHB1cmlmeSB8ICpbXFwvXXB1cmlmeSApIDs7CisgICAgXC0qKSA7OworICAgICopIGJyZWFrOzsKKyAgZXNhYworZG9uZQorY2NfYmFzZW5hbWU9YGVjaG8gIiRjY190ZW1wIiB8IHNlZCAtZSAncyVeLiovJSUnYAorCisjIENvZGUgdGFrZW4gZnJvbSBsaWJ0b29sLm00J3MgQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX1BJQy4KKword2w9CitpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICB3bD0nLVdsLCcKK2Vsc2UKKyAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgYWl4KikKKyAgICAgIHdsPSctV2wsJworICAgICAgOzsKKyAgICBkYXJ3aW4qKQorICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgeGxjKikKKyAgICAgICAgICB3bD0nLVdsLCcKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKyAgICBtaW5ndyogfCBwdzMyKiB8IG9zMiopCisgICAgICA7OworICAgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorICAgICAgd2w9Jy1XbCwnCisgICAgICA7OworICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgICB3bD0nLVdsLCcKKyAgICAgIDs7CisgICAgbmV3c29zNikKKyAgICAgIDs7CisgICAgbGludXgqKQorICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgaWNjKiB8IGVjYyopCisgICAgICAgICAgd2w9Jy1XbCwnCisgICAgICAgICAgOzsKKyAgICAgICAgcGdjYyB8IHBnZjc3IHwgcGdmOTApCisgICAgICAgICAgd2w9Jy1XbCwnCisgICAgICAgICAgOzsKKyAgICAgICAgY2NjKikKKyAgICAgICAgICB3bD0nLVdsLCcKKyAgICAgICAgICA7OworICAgICAgICBjb21vKQorICAgICAgICAgIHdsPSctbG9wdD0nCisgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICBjYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKyAgICAgICAgICAgICpTdW5cIEMqKQorICAgICAgICAgICAgICB3bD0nLVdsLCcKKyAgICAgICAgICAgICAgOzsKKyAgICAgICAgICBlc2FjCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgICAgd2w9Jy1XbCwnCisgICAgICA7OworICAgIHNjbzMuMnY1KikKKyAgICAgIDs7CisgICAgc29sYXJpcyopCisgICAgICB3bD0nLVdsLCcKKyAgICAgIDs7CisgICAgc3Vub3M0KikKKyAgICAgIHdsPSctUW9wdGlvbiBsZCAnCisgICAgICA7OworICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKiB8IHN5c3Y1KikKKyAgICAgIHdsPSctV2wsJworICAgICAgOzsKKyAgICBzeXN2NCpNUCopCisgICAgICA7OworICAgIHVuaWNvcyopCisgICAgICB3bD0nLVdsLCcKKyAgICAgIDs7CisgICAgdXRzNCopCisgICAgICA7OworICBlc2FjCitmaQorCisjIENvZGUgdGFrZW4gZnJvbSBsaWJ0b29sLm00J3MgQUNfTElCVE9PTF9QUk9HX0xEX1NITElCUy4KKworaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9CitoYXJkY29kZV9kaXJlY3Q9bm8KK2hhcmRjb2RlX21pbnVzX0w9bm8KKworY2FzZSAiJGhvc3Rfb3MiIGluCisgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKyAgICAjIEZJWE1FOiB0aGUgTVNWQysrIHBvcnQgaGFzbid0IGJlZW4gdGVzdGVkIGluIGEgbG9vb29uZyB0aW1lCisgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKKyAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgorICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorICAgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICBmaQorICAgIDs7CisgIGludGVyaXgqKQorICAgICMgd2UganVzdCBob3BlL2Fzc3VtZSB0aGlzIGlzIGdjYyBhbmQgbm90IGM4OSAoPSBNU1ZDKyspCisgICAgd2l0aF9nbnVfbGQ9eWVzCisgICAgOzsKKyAgb3BlbmJzZCopCisgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICA7OworZXNhYworCitsZF9zaGxpYnM9eWVzCitpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgICMgU2V0IHNvbWUgZGVmYXVsdHMgZm9yIEdOVSBsZCB3aXRoIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQuIFRoZXNlCisgICMgYXJlIHJlc2V0IGxhdGVyIGlmIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG5vdCBzdXBwb3J0ZWQuIFB1dHRpbmcgdGhlbQorICAjIGhlcmUgYWxsb3dzIHRoZW0gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWNlc3NhcnkuCisgICMgVW5saWtlIGxpYnRvb2wsIHdlIHVzZSAtcnBhdGggaGVyZSwgbm90IC0tcnBhdGgsIHNpbmNlIHRoZSBkb2N1bWVudGVkCisgICMgb3B0aW9uIG9mIEdOVSBsZCBpcyBjYWxsZWQgLXJwYXRoLCBub3QgLS1ycGF0aC4KKyAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICBhaXgzKiB8IGFpeDQqIHwgYWl4NSopCisgICAgICAjIE9uIEFJWC9QUEMsIHRoZSBHTlUgbGlua2VyIGlzIHZlcnkgYnJva2VuCisgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQ7IHRoZW4KKyAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBhbWlnYW9zKikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICAjIFNhbXVlbCBBLiBGYWx2byBJSSA8a2M1dGphQGRvbHBoaW4ub3BlbnByb2plY3RzLm5ldD4gcmVwb3J0cworICAgICAgIyB0aGF0IHRoZSBzZW1hbnRpY3Mgb2YgZHluYW1pYyBsaWJyYXJpZXMgb24gQW1pZ2FPUywgYXQgbGVhc3QgdXAKKyAgICAgICMgdG8gdmVyc2lvbiA0LCBpcyB0byBzaGFyZSBkYXRhIGFtb25nIG11bHRpcGxlIHByb2dyYW1zIGxpbmtlZAorICAgICAgIyB3aXRoIHRoZSBzYW1lIGR5bmFtaWMgbGlicmFyeS4gIFNpbmNlIHRoaXMgZG9lc24ndCBtYXRjaCB0aGUKKyAgICAgICMgYmVoYXZpb3Igb2Ygc2hhcmVkIGxpYnJhcmllcyBvbiBvdGhlciBwbGF0Zm9ybXMsIHdlIGNhbm5vdCB1c2UKKyAgICAgICMgdGhlbS4KKyAgICAgIGxkX3NobGlicz1ubworICAgICAgOzsKKyAgICBiZW9zKikKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICA6CisgICAgICBlbHNlCisgICAgICAgIGxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQorICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICA6CisgICAgICBlbHNlCisgICAgICAgIGxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgaW50ZXJpeDMqKQorICAgICAgaGFyZGNvZGVfZGlyZWN0PW5vCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCwkbGliZGlyJworICAgICAgOzsKKyAgICBsaW51eCopCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgOgorICAgICAgZWxzZQorICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworICAgIG5ldGJzZCopCisgICAgICA7OworICAgIHNvbGFyaXMqKQorICAgICAgaWYgJExEIC12IDI+JjEgfCBncmVwICdCRkQgMlwuOCcgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICA6CisgICAgICBlbHNlCisgICAgICAgIGxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKikKKyAgICAgIGNhc2UgYCRMRCAtdiAyPiYxYCBpbgorICAgICAgICAqXCBbMDFdLiogfCAqXCAyLlswLTldLiogfCAqXCAyLjFbMC01XS4qKQorICAgICAgICAgIGxkX3NobGlicz1ubworICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSdgdGVzdCAteiAiJFNDT0FCU1BBVEgiICYmIGVjaG8gJHt3bH0tcnBhdGgsJGxpYmRpcmAnCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICAgICAgZmkKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKyAgICBzdW5vczQqKQorICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgOzsKKyAgICAqKQorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgIDoKKyAgICAgIGVsc2UKKyAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgZXNhYworICBpZiB0ZXN0ICIkbGRfc2hsaWJzIiA9IG5vOyB0aGVuCisgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KKyAgZmkKK2Vsc2UKKyAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgYWl4MyopCisgICAgICAjIE5vdGU6IHRoaXMgbGlua2VyIGhhcmRjb2RlcyB0aGUgZGlyZWN0b3JpZXMgaW4gTElCUEFUSCBpZiB0aGVyZQorICAgICAgIyBhcmUgbm8gZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGJ5IC1MLgorICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICAgICMgTmVpdGhlciBkaXJlY3QgaGFyZGNvZGluZyBub3Igc3RhdGljIGxpbmtpbmcgaXMgc3VwcG9ydGVkIHdpdGggYQorICAgICAgICAjIGJyb2tlbiBjb2xsZWN0Mi4KKyAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXVuc3VwcG9ydGVkCisgICAgICBmaQorICAgICAgOzsKKyAgICBhaXg0KiB8IGFpeDUqKQorICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICAgICAgIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAorICAgICAgICAjIGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4KKyAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworICAgICAgZWxzZQorICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCisgICAgICAgICMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAorICAgICAgICAjIEFJWCBzdHlsZSBsaW5raW5nLiBJZiAtYnJ0bCBpcyBzb21ld2hlcmUgaW4gTERGTEFHUywgd2UKKyAgICAgICAgIyBuZWVkIHRvIGRvIHJ1bnRpbWUgbGlua2luZy4KKyAgICAgICAgY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlsyM118YWl4NC5bMjNdLip8YWl4NSopCisgICAgICAgICAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCisgICAgICAgICAgICBpZiAodGVzdCAkbGRfZmxhZyA9ICItYnJ0bCIgfHwgdGVzdCAkbGRfZmxhZyA9ICItV2wsLWJydGwiKTsgdGhlbgorICAgICAgICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcworICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZmkKKyAgICAgICAgICBkb25lCisgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgZmkKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JzonCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICAgICBjYXNlICRob3N0X29zIGluIGFpeDQuWzAxMl18YWl4NC5bMDEyXS4qKQorICAgICAgICAgIGNvbGxlY3QybmFtZT1gJHtDQ30gLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKKyAgICAgICAgICBpZiB0ZXN0IC1mICIkY29sbGVjdDJuYW1lIiAmJiBcCisgICAgICAgICAgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8IGdyZXAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCisgICAgICAgICAgdGhlbgorICAgICAgICAgICAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCisgICAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgorICAgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXVuc3VwcG9ydGVkCisgICAgICAgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0KKyAgICAgICAgICBmaQorICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgIGZpCisgICAgICAjIEJlZ2luIF9MVF9BQ19TWVNfTElCUEFUSF9BSVguCisgICAgICBlY2hvICdpbnQgbWFpbiAoKSB7IHJldHVybiAwOyB9JyA+IGNvbmZ0ZXN0LmMKKyAgICAgICR7Q0N9ICR7TERGTEFHU30gY29uZnRlc3QuYyAtbyBjb25mdGVzdAorICAgICAgYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QgMj4vZGV2L251bGwgfCBzZWQgLW4gLWUgJy9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsgL14wLyB7IHMvXjAgICpcKC4qXCkkL1wxLzsgcDsgfQorfSdgCisgICAgICBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCisgICAgICAgIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0IDI+L2Rldi9udWxsIHwgc2VkIC1uIC1lICcvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7IC9eMC8geyBzL14wICAqXCguKlwpJC9cMS87IHA7IH0KK30nYAorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KKyAgICAgICAgYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiCisgICAgICBmaQorICAgICAgcm0gLWYgY29uZnRlc3QuYyBjb25mdGVzdAorICAgICAgIyBFbmQgX0xUX0FDX1NZU19MSUJQQVRIX0FJWC4KKyAgICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorICAgICAgZWxzZQorICAgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LVIgJGxpYmRpcjovdXNyL2xpYjovbGliJworICAgICAgICBlbHNlCisgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgICA7OworICAgIGFtaWdhb3MqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgZGlmZmVyZW50IHNlbWFudGljcyBvbiB0aGUgR05VIGxkIHNlY3Rpb24KKyAgICAgIGxkX3NobGlicz1ubworICAgICAgOzsKKyAgICBic2RpWzQ1XSopCisgICAgICA7OworICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKyAgICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCisgICAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgorICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCisgICAgICBsaWJleHQ9bGliCisgICAgICA7OworICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICBoYXJkY29kZV9kaXJlY3Q9bm8KKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzIDsgdGhlbgorICAgICAgICA6CisgICAgICBlbHNlCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgeGxjKikKKyAgICAgICAgICAgIDs7CisgICAgICAgICAgKikKKyAgICAgICAgICAgIGxkX3NobGlicz1ubworICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgZmkKKyAgICAgIDs7CisgICAgZGd1eCopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICA7OworICAgIGZyZWVic2QxKikKKyAgICAgIGxkX3NobGlicz1ubworICAgICAgOzsKKyAgICBmcmVlYnNkMi4yKikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIDs7CisgICAgZnJlZWJzZDIqKQorICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIDs7CisgICAgZnJlZWJzZCogfCBrZnJlZWJzZCotZ251IHwgZHJhZ29uZmx5KikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIDs7CisgICAgaHB1eDkqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCisgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICA7OworICAgIGhwdXgxMCopCisgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICAgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCisgICAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICAgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgZmkKKyAgICAgIDs7CisgICAgaHB1eDExKikKKyAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfStiICR7d2x9JGxpYmRpcicKKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICAgICAgaHBwYSo2NCp8aWE2NCopCisgICAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9bm8KKyAgICAgICAgICAgIDs7CisgICAgICAgICAgKikKKyAgICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgICAgICAgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCisgICAgICAgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKyAgICAgICAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgICBmaQorICAgICAgOzsKKyAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICA7OworICAgIG5ldGJzZCopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICA7OworICAgIG5ld3NvczYpCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgIDs7CisgICAgb3BlbmJzZCopCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKyAgICAgIGVsc2UKKyAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgb3BlbmJzZFswMV0uKiB8IG9wZW5ic2QyLlswLTddIHwgb3BlbmJzZDIuWzAtN10uKikKKyAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgICAgICAgIDs7CisgICAgICAgICAgKikKKyAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgICBmaQorICAgICAgOzsKKyAgICBvczIqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIDs7CisgICAgb3NmMyopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgIDs7CisgICAgb3NmNCogfCBvc2Y1KikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIGVsc2UKKyAgICAgICAgIyBCb3RoIGNjIGFuZCBjeHggY29tcGlsZXIgc3VwcG9ydCAtcnBhdGggZGlyZWN0bHkKKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLXJwYXRoICRsaWJkaXInCisgICAgICBmaQorICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICA7OworICAgIHNvbGFyaXMqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgOzsKKyAgICBzdW5vczQqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIDs7CisgICAgc3lzdjQpCisgICAgICBjYXNlICRob3N0X3ZlbmRvciBpbgorICAgICAgICBzbmkpCisgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcyAjIGlzIHRoaXMgcmVhbGx5IHRydWU/Pz8KKyAgICAgICAgICA7OworICAgICAgICBzaWVtZW5zKQorICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubworICAgICAgICAgIDs7CisgICAgICAgIG1vdG9yb2xhKQorICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubyAjTW90b3JvbGEgbWFudWFsIHNheXMgeWVzLCBidXQgbXkgdGVzdHMgc2F5IHRoZXkgbGllCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgICAgc3lzdjQuMyopCisgICAgICA7OworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KKyAgICAgICAgbGRfc2hsaWJzPXllcworICAgICAgZmkKKyAgICAgIDs7CisgICAgc3lzdjQqdXcyKiB8IHN5c3Y1T3BlblVOSVgqIHwgc3lzdjVVbml4V2FyZTcuWzAxXS5bMTBdKiB8IHVuaXh3YXJlNyopCisgICAgICA7OworICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSdgdGVzdCAteiAiJFNDT0FCU1BBVEgiICYmIGVjaG8gJHt3bH0tUiwkbGliZGlyYCcKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JzonCisgICAgICA7OworICAgIHV0czQqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgOzsKKyAgICAqKQorICAgICAgbGRfc2hsaWJzPW5vCisgICAgICA7OworICBlc2FjCitmaQorCisjIENoZWNrIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcworIyBDb2RlIHRha2VuIGZyb20gbGlidG9vbC5tNCdzIEFDX0xJQlRPT0xfU1lTX0RZTkFNSUNfTElOS0VSLgorIyBVbmxpa2UgbGlidG9vbC5tNCwgaGVyZSB3ZSBkb24ndCBjYXJlIGFib3V0IF9hbGxfIG5hbWVzIG9mIHRoZSBsaWJyYXJ5LCBidXQKKyMgb25seSBhYm91dCB0aGUgb25lIHRoZSBsaW5rZXIgZmluZHMgd2hlbiBwYXNzZWQgLWxOQU1FLiBUaGlzIGlzIHRoZSBsYXN0CisjIGVsZW1lbnQgb2YgbGlicmFyeV9uYW1lc19zcGVjIGluIGxpYnRvb2wubTQsIG9yIHBvc3NpYmx5IHR3byBvZiB0aGVtIGlmIHRoZQorIyBsaW5rZXIgaGFzIHNwZWNpYWwgc2VhcmNoIHJ1bGVzLgorbGlicmFyeV9uYW1lc19zcGVjPSAgICAgICMgdGhlIGxhc3QgZWxlbWVudCBvZiBsaWJyYXJ5X25hbWVzX3NwZWMgaW4gbGlidG9vbC5tNAorbGlibmFtZV9zcGVjPSdsaWIkbmFtZScKK2Nhc2UgIiRob3N0X29zIiBpbgorICBhaXgzKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmEnCisgICAgOzsKKyAgYWl4NCogfCBhaXg1KikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBhbWlnYW9zKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmEnCisgICAgOzsKKyAgYmVvcyopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgYnNkaVs0NV0qKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKyAgICBzaHJleHQ9LmRsbAorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEgJGxpYm5hbWUubGliJworICAgIDs7CisgIGRhcndpbiogfCByaGFwc29keSopCisgICAgc2hyZXh0PS5keWxpYgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIGRndXgqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIGZyZWVic2QxKikKKyAgICA7OworICBrZnJlZWJzZCotZ251KQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgIGZyZWVic2RbMTIzXSopCisgICAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JHZlcnN1ZmZpeCcgOzsKKyAgICAgICopCisgICAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JyA7OworICAgIGVzYWMKKyAgICA7OworICBnbnUqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBpYTY0KikKKyAgICAgICAgc2hyZXh0PS5zbworICAgICAgICA7OworICAgICAgaHBwYSo2NCopCisgICAgICAgIHNocmV4dD0uc2wKKyAgICAgICAgOzsKKyAgICAgICopCisgICAgICAgIHNocmV4dD0uc2wKKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgaW50ZXJpeDMqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICBpcml4NSogfCBub25zdG9wdXgqKQorICAgICAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9CisgICAgICAgIDs7CisgICAgICAqKQorICAgICAgICBjYXNlICRMRCBpbgorICAgICAgICAgICotMzJ8KiItMzIgInwqLW1lbGYzMmJzbWlwfCoiLW1lbGYzMmJzbWlwICIpIGxpYnN1ZmY9IHNobGlic3VmZj0gOzsKKyAgICAgICAgICAqLW4zMnwqIi1uMzIgInwqLW1lbGYzMmJtaXBuMzJ8KiItbWVsZjMyYm1pcG4zMiAiKSBsaWJzdWZmPTMyIHNobGlic3VmZj1OMzIgOzsKKyAgICAgICAgICAqLTY0fCoiLTY0ICJ8Ki1tZWxmNjRibWlwfCoiLW1lbGY2NGJtaXAgIikgbGlic3VmZj02NCBzaGxpYnN1ZmY9NjQgOzsKKyAgICAgICAgICAqKSBsaWJzdWZmPSBzaGxpYnN1ZmY9IDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKKyAgbGludXgqb2xkbGQqIHwgbGludXgqYW91dCogfCBsaW51eCpjb2ZmKikKKyAgICA7OworICBsaW51eCopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAga25ldGJzZCotZ251KQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIG5ldGJzZCopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgbmV3c29zNikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBudG8tcW54KikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBvcGVuYnNkKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCR2ZXJzdWZmaXgnCisgICAgOzsKKyAgb3MyKikKKyAgICBsaWJuYW1lX3NwZWM9JyRuYW1lJworICAgIHNocmV4dD0uZGxsCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5hJworICAgIDs7CisgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBzb2xhcmlzKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBzdW5vczQqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JHZlcnN1ZmZpeCcKKyAgICA7OworICBzeXN2NCB8IHN5c3Y0LjMqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIHN5c3Y0Kk1QKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICB1dHM0KikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworZXNhYworCitzZWRfcXVvdGVfc3Vic3Q9J3MvXChbImAkXFxdXCkvXFxcMS9nJworZXNjYXBlZF93bD1gZWNobyAiWCR3bCIgfCBzZWQgLWUgJ3MvXlgvLycgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorc2hsaWJleHQ9YGVjaG8gIiRzaHJleHQiIHwgc2VkIC1lICdzLF5cLiwsJ2AKK2VzY2FwZWRfbGlibmFtZV9zcGVjPWBlY2hvICJYJGxpYm5hbWVfc3BlYyIgfCBzZWQgLWUgJ3MvXlgvLycgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorZXNjYXBlZF9saWJyYXJ5X25hbWVzX3NwZWM9YGVjaG8gIlgkbGlicmFyeV9uYW1lc19zcGVjIiB8IHNlZCAtZSAncy9eWC8vJyAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCitlc2NhcGVkX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9YGVjaG8gIlgkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgfCBzZWQgLWUgJ3MvXlgvLycgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorCitMQ19BTEw9QyBzZWQgLWUgJ3MvXlwoW2EtekEtWjAtOV9dKlwpPS9hY2xfY3ZfXDE9LycgPDxFT0YKKworIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgord2w9IiRlc2NhcGVkX3dsIgorCisjIFN0YXRpYyBsaWJyYXJ5IHN1ZmZpeCAobm9ybWFsbHkgImEiKS4KK2xpYmV4dD0iJGxpYmV4dCIKKworIyBTaGFyZWQgbGlicmFyeSBzdWZmaXggKG5vcm1hbGx5ICJzbyIpLgorc2hsaWJleHQ9IiRzaGxpYmV4dCIKKworIyBGb3JtYXQgb2YgbGlicmFyeSBuYW1lIHByZWZpeC4KK2xpYm5hbWVfc3BlYz0iJGVzY2FwZWRfbGlibmFtZV9zcGVjIgorCisjIExpYnJhcnkgbmFtZXMgdGhhdCB0aGUgbGlua2VyIGZpbmRzIHdoZW4gcGFzc2VkIC1sTkFNRS4KK2xpYnJhcnlfbmFtZXNfc3BlYz0iJGVzY2FwZWRfbGlicmFyeV9uYW1lc19zcGVjIgorCisjIEZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KKyMgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzIG5vdCBleGlzdC4KK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9IiRlc2NhcGVkX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiCisKKyMgV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlIC1ycGF0aCBmbGFnIHdpdGggYSBzZXBhcmF0ZWQgYXJndW1lbnQuCitoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIKKworIyBTZXQgdG8geWVzIGlmIHVzaW5nIERJUi9saWJOQU1FLnNvIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKKyMgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX2RpcmVjdD0iJGhhcmRjb2RlX2RpcmVjdCIKKworIyBTZXQgdG8geWVzIGlmIHVzaW5nIHRoZSAtTERJUiBmbGFnIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKKyMgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX21pbnVzX0w9IiRoYXJkY29kZV9taW51c19MIgorCitFT0YKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9idWlsZC1hdXgvY29uZmlnLnN1YiBiL3BhcnRlZC0xLjguNy9idWlsZC1hdXgvY29uZmlnLnN1YgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jMDYwZjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2J1aWxkLWF1eC9jb25maWcuc3ViCkBAIC0wLDAgKzEsMTYyNiBAQAorIyEgL2Jpbi9zaAorIyBDb25maWd1cmF0aW9uIHZhbGlkYXRpb24gc3Vicm91dGluZSBzY3JpcHQuCisjICAgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorIyAgIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyAgIEluYy4KKwordGltZXN0YW1wPScyMDA3LTA0LTI5JworCisjIFRoaXMgZmlsZSBpcyAoaW4gcHJpbmNpcGxlKSBjb21tb24gdG8gQUxMIEdOVSBzb2Z0d2FyZS4KKyMgVGhlIHByZXNlbmNlIG9mIGEgbWFjaGluZSBpbiB0aGlzIGZpbGUgc3VnZ2VzdHMgdGhhdCBTT01FIEdOVSBzb2Z0d2FyZQorIyBjYW4gaGFuZGxlIHRoYXQgbWFjaGluZS4gIEl0IGRvZXMgbm90IGltcGx5IEFMTCBHTlUgc29mdHdhcmUgY2FuLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorIyAwMjExMC0xMzAxLCBVU0EuCisjCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKKyMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCisjIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCisjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworCisjIFBsZWFzZSBzZW5kIHBhdGNoZXMgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+LiAgU3VibWl0IGEgY29udGV4dAorIyBkaWZmIGFuZCBhIHByb3Blcmx5IGZvcm1hdHRlZCBDaGFuZ2VMb2cgZW50cnkuCisjCisjIENvbmZpZ3VyYXRpb24gc3Vicm91dGluZSB0byB2YWxpZGF0ZSBhbmQgY2Fub25pY2FsaXplIGEgY29uZmlndXJhdGlvbiB0eXBlLgorIyBTdXBwbHkgdGhlIHNwZWNpZmllZCBjb25maWd1cmF0aW9uIHR5cGUgYXMgYW4gYXJndW1lbnQuCisjIElmIGl0IGlzIGludmFsaWQsIHdlIHByaW50IGFuIGVycm9yIG1lc3NhZ2Ugb24gc3RkZXJyIGFuZCBleGl0IHdpdGggY29kZSAxLgorIyBPdGhlcndpc2UsIHdlIHByaW50IHRoZSBjYW5vbmljYWwgY29uZmlnIHR5cGUgb24gc3Rkb3V0IGFuZCBzdWNjZWVkLgorCisjIFRoaXMgZmlsZSBpcyBzdXBwb3NlZCB0byBiZSB0aGUgc2FtZSBmb3IgYWxsIEdOVSBwYWNrYWdlcworIyBhbmQgcmVjb2duaXplIGFsbCB0aGUgQ1BVIHR5cGVzLCBzeXN0ZW0gdHlwZXMgYW5kIGFsaWFzZXMKKyMgdGhhdCBhcmUgbWVhbmluZ2Z1bCB3aXRoICphbnkqIEdOVSBzb2Z0d2FyZS4KKyMgRWFjaCBwYWNrYWdlIGlzIHJlc3BvbnNpYmxlIGZvciByZXBvcnRpbmcgd2hpY2ggdmFsaWQgY29uZmlndXJhdGlvbnMKKyMgaXQgZG9lcyBub3Qgc3VwcG9ydC4gIFRoZSB1c2VyIHNob3VsZCBiZSBhYmxlIHRvIGRpc3Rpbmd1aXNoCisjIGEgZmFpbHVyZSB0byBzdXBwb3J0IGEgdmFsaWQgY29uZmlndXJhdGlvbiBmcm9tIGEgbWVhbmluZ2xlc3MKKyMgY29uZmlndXJhdGlvbi4KKworIyBUaGUgZ29hbCBvZiB0aGlzIGZpbGUgaXMgdG8gbWFwIGFsbCB0aGUgdmFyaW91cyB2YXJpYXRpb25zIG9mIGEgZ2l2ZW4KKyMgbWFjaGluZSBzcGVjaWZpY2F0aW9uIGludG8gYSBzaW5nbGUgc3BlY2lmaWNhdGlvbiBpbiB0aGUgZm9ybToKKyMJQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLU9QRVJBVElOR19TWVNURU0KKyMgb3IgaW4gc29tZSBjYXNlcywgdGhlIG5ld2VyIGZvdXItcGFydCBmb3JtOgorIwlDUFVfVFlQRS1NQU5VRkFDVFVSRVItS0VSTkVMLU9QRVJBVElOR19TWVNURU0KKyMgSXQgaXMgd3JvbmcgdG8gZWNobyBhbnkgb3RoZXIgdHlwZSBvZiBzcGVjaWZpY2F0aW9uLgorCittZT1gZWNobyAiJDAiIHwgc2VkIC1lICdzLC4qLywsJ2AKKwordXNhZ2U9IlwKK1VzYWdlOiAkMCBbT1BUSU9OXSBDUFUtTUZSLU9QU1lTCisgICAgICAgJDAgW09QVElPTl0gQUxJQVMKKworQ2Fub25pY2FsaXplIGEgY29uZmlndXJhdGlvbiBuYW1lLgorCitPcGVyYXRpb24gbW9kZXM6CisgIC1oLCAtLWhlbHAgICAgICAgICBwcmludCB0aGlzIGhlbHAsIHRoZW4gZXhpdAorICAtdCwgLS10aW1lLXN0YW1wICAgcHJpbnQgZGF0ZSBvZiBsYXN0IG1vZGlmaWNhdGlvbiwgdGhlbiBleGl0CisgIC12LCAtLXZlcnNpb24gICAgICBwcmludCB2ZXJzaW9uIG51bWJlciwgdGhlbiBleGl0CisKK1JlcG9ydCBidWdzIGFuZCBwYXRjaGVzIHRvIDxjb25maWctcGF0Y2hlc0BnbnUub3JnPi4iCisKK3ZlcnNpb249IlwKK0dOVSBjb25maWcuc3ViICgkdGltZXN0YW1wKQorCitDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTword2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIgorCitoZWxwPSIKK1RyeSBcYCRtZSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKworIyBQYXJzZSBjb21tYW5kIGxpbmUKK3doaWxlIHRlc3QgJCMgLWd0IDAgOyBkbworICBjYXNlICQxIGluCisgICAgLS10aW1lLXN0YW1wIHwgLS10aW1lKiB8IC10ICkKKyAgICAgICBlY2hvICIkdGltZXN0YW1wIiA7IGV4aXQgOzsKKyAgICAtLXZlcnNpb24gfCAtdiApCisgICAgICAgZWNobyAiJHZlcnNpb24iIDsgZXhpdCA7OworICAgIC0taGVscCB8IC0taCogfCAtaCApCisgICAgICAgZWNobyAiJHVzYWdlIjsgZXhpdCA7OworICAgIC0tICkgICAgICMgU3RvcCBvcHRpb24gcHJvY2Vzc2luZworICAgICAgIHNoaWZ0OyBicmVhayA7OworICAgIC0gKQkjIFVzZSBzdGRpbiBhcyBpbnB1dC4KKyAgICAgICBicmVhayA7OworICAgIC0qICkKKyAgICAgICBlY2hvICIkbWU6IGludmFsaWQgb3B0aW9uICQxJGhlbHAiCisgICAgICAgZXhpdCAxIDs7CisKKyAgICAqbG9jYWwqKQorICAgICAgICMgRmlyc3QgcGFzcyB0aHJvdWdoIGFueSBsb2NhbCBtYWNoaW5lIHR5cGVzLgorICAgICAgIGVjaG8gJDEKKyAgICAgICBleGl0IDs7CisKKyAgICAqICkKKyAgICAgICBicmVhayA7OworICBlc2FjCitkb25lCisKK2Nhc2UgJCMgaW4KKyAwKSBlY2hvICIkbWU6IG1pc3NpbmcgYXJndW1lbnQkaGVscCIgPiYyCisgICAgZXhpdCAxOzsKKyAxKSA7OworICopIGVjaG8gIiRtZTogdG9vIG1hbnkgYXJndW1lbnRzJGhlbHAiID4mMgorICAgIGV4aXQgMTs7Citlc2FjCisKKyMgU2VwYXJhdGUgd2hhdCB0aGUgdXNlciBnYXZlIGludG8gQ1BVLUNPTVBBTlkgYW5kIE9TIG9yIEtFUk5FTC1PUyAoaWYgYW55KS4KKyMgSGVyZSB3ZSBtdXN0IHJlY29nbml6ZSBhbGwgdGhlIHZhbGlkIEtFUk5FTC1PUyBjb21iaW5hdGlvbnMuCittYXliZV9vcz1gZWNobyAkMSB8IHNlZCAncy9eXCguKlwpLVwoW14tXSotW14tXSpcKSQvXDIvJ2AKK2Nhc2UgJG1heWJlX29zIGluCisgIG50by1xbngqIHwgbGludXgtZ251KiB8IGxpbnV4LWRpZXRsaWJjIHwgbGludXgtbmV3bGliKiB8IGxpbnV4LXVjbGliYyogfCBcCisgIHVjbGludXgtdWNsaWJjKiB8IHVjbGludXgtZ251KiB8IGtmcmVlYnNkKi1nbnUqIHwga25ldGJzZCotZ251KiB8IG5ldGJzZCotZ251KiB8IFwKKyAgc3Rvcm0tY2hhb3MqIHwgb3MyLWVteCogfCBydG1rLW5vdmEqKQorICAgIG9zPS0kbWF5YmVfb3MKKyAgICBiYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkICdzL15cKC4qXCktXChbXi1dKi1bXi1dKlwpJC9cMS8nYAorICAgIDs7CisgICopCisgICAgYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAncy8tW14tXSokLy8nYAorICAgIGlmIFsgJGJhc2ljX21hY2hpbmUgIT0gJDEgXQorICAgIHRoZW4gb3M9YGVjaG8gJDEgfCBzZWQgJ3MvLiotLy0vJ2AKKyAgICBlbHNlIG9zPTsgZmkKKyAgICA7OworZXNhYworCisjIyMgTGV0J3MgcmVjb2duaXplIGNvbW1vbiBtYWNoaW5lcyBhcyBub3QgYmVpbmcgb3BlcmF0aW5nIHN5c3RlbXMgc28KKyMjIyB0aGF0IHRoaW5ncyBsaWtlIGNvbmZpZy5zdWIgZGVjc3RhdGlvbi0zMTAwIHdvcmsuICBXZSBhbHNvCisjIyMgcmVjb2duaXplIHNvbWUgbWFudWZhY3R1cmVycyBhcyBub3QgYmVpbmcgb3BlcmF0aW5nIHN5c3RlbXMsIHNvIHdlCisjIyMgY2FuIHByb3ZpZGUgZGVmYXVsdCBvcGVyYXRpbmcgc3lzdGVtcyBiZWxvdy4KK2Nhc2UgJG9zIGluCisJLXN1bipvcyopCisJCSMgUHJldmVudCBmb2xsb3dpbmcgY2xhdXNlIGZyb20gaGFuZGxpbmcgdGhpcyBpbnZhbGlkIGlucHV0LgorCQk7OworCS1kZWMqIHwgLW1pcHMqIHwgLXNlcXVlbnQqIHwgLWVuY29yZSogfCAtcGM1MzIqIHwgLXNnaSogfCAtc29ueSogfCBcCisJLWF0dCogfCAtNzMwMCogfCAtMzMwMCogfCAtZGVsdGEqIHwgLW1vdG9yb2xhKiB8IC1zdW5bMjM0XSogfCBcCisJLXVuaWNvbSogfCAtaWJtKiB8IC1uZXh0IHwgLWhwIHwgLWlzaSogfCAtYXBvbGxvIHwgLWFsdG9zKiB8IFwKKwktY29udmVyZ2VudCogfCAtbmNyKiB8IC1uZXdzIHwgLTMyKiB8IC0zNjAwKiB8IC0zMTAwKiB8IC1oaXRhY2hpKiB8XAorCS1jWzEyM10qIHwgLWNvbnZleCogfCAtc3VuIHwgLWNyZHMgfCAtb21yb24qIHwgLWRnIHwgLXVsdHJhIHwgLXR0aSogfCBcCisJLWhhcnJpcyB8IC1kb2xwaGluIHwgLWhpZ2hsZXZlbCB8IC1nb3VsZCB8IC1jYm0gfCAtbnMgfCAtbWFzc2NvbXAgfCBcCisJLWFwcGxlIHwgLWF4aXMgfCAta251dGggfCAtY3JheSkKKwkJb3M9CisJCWJhc2ljX21hY2hpbmU9JDEKKwkJOzsKKwktc2ltIHwgLWNpc2NvIHwgLW9raSB8IC13ZWMgfCAtd2luYm9uZCkKKwkJb3M9CisJCWJhc2ljX21hY2hpbmU9JDEKKwkJOzsKKwktc2NvdXQpCisJCTs7CisJLXdycykKKwkJb3M9LXZ4d29ya3MKKwkJYmFzaWNfbWFjaGluZT0kMQorCQk7OworCS1jaG9ydXNvcyopCisJCW9zPS1jaG9ydXNvcworCQliYXNpY19tYWNoaW5lPSQxCisJCTs7CisgCS1jaG9ydXNyZGIpCisgCQlvcz0tY2hvcnVzcmRiCisJCWJhc2ljX21hY2hpbmU9JDEKKyAJCTs7CisJLWhpdXgqKQorCQlvcz0taGl1eHdlMgorCQk7OworCS1zY282KQorCQlvcz0tc2NvNXY2CisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktc2NvNSkKKwkJb3M9LXNjbzMuMnY1CisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktc2NvNCkKKwkJb3M9LXNjbzMuMnY0CisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktc2NvMy4yLls0LTldKikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzL3NjbzMuMi4vc2NvMy4ydi8nYAorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLXNjbzMuMnZbNC05XSopCisJCSMgRG9uJ3QgZm9yZ2V0IHZlcnNpb24gaWYgaXQgaXMgMy4ydjQgb3IgbmV3ZXIuCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktc2NvNXY2KikKKwkJIyBEb24ndCBmb3JnZXQgdmVyc2lvbiBpZiBpdCBpcyAzLjJ2NCBvciBuZXdlci4KKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1zY28qKQorCQlvcz0tc2NvMy4ydjIKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS11ZGsqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLWlzYykKKwkJb3M9LWlzYzIuMgorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLWNsaXgqKQorCQliYXNpY19tYWNoaW5lPWNsaXBwZXItaW50ZXJncmFwaAorCQk7OworCS1pc2MqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLWx5bngqKQorCQlvcz0tbHlueG9zCisJCTs7CisJLXB0eCopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtc2VxdWVudC8nYAorCQk7OworCS13aW5kb3dzbnQqKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3Mvd2luZG93c250L3dpbm50LydgCisJCTs7CisJLXBzb3MqKQorCQlvcz0tcHNvcworCQk7OworCS1taW50IHwgLW1pbnRbMC05XSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hdGFyaQorCQlvcz0tbWludAorCQk7OworZXNhYworCisjIERlY29kZSBhbGlhc2VzIGZvciBjZXJ0YWluIENQVS1DT01QQU5ZIGNvbWJpbmF0aW9ucy4KK2Nhc2UgJGJhc2ljX21hY2hpbmUgaW4KKwkjIFJlY29nbml6ZSB0aGUgYmFzaWMgQ1BVIHR5cGVzIHdpdGhvdXQgY29tcGFueSBuYW1lLgorCSMgU29tZSBhcmUgb21pdHRlZCBoZXJlIGJlY2F1c2UgdGhleSBoYXZlIHNwZWNpYWwgbWVhbmluZ3MgYmVsb3cuCisJMTc1MGEgfCA1ODAgXAorCXwgYTI5ayBcCisJfCBhbHBoYSB8IGFscGhhZXZbNC04XSB8IGFscGhhZXY1NiB8IGFscGhhZXY2Wzc4XSB8IGFscGhhcGNhNVs2N10gXAorCXwgYWxwaGE2NCB8IGFscGhhNjRldls0LThdIHwgYWxwaGE2NGV2NTYgfCBhbHBoYTY0ZXY2Wzc4XSB8IGFscGhhNjRwY2E1WzY3XSBcCisJfCBhbTMzXzIuMCBcCisJfCBhcmMgfCBhcm0gfCBhcm1bYmxdZSB8IGFybWVbbGJdIHwgYXJtdlsyMzQ1XSB8IGFybXZbMzQ1XVtsYl0gfCBhdnIgfCBhdnIzMiBcCisJfCBiZmluIFwKKwl8IGM0eCB8IGNsaXBwZXIgXAorCXwgZDEwdiB8IGQzMHYgfCBkbHggfCBkc3AxNnh4IFwKKwl8IGZpZG8gfCBmcjMwIHwgZnJ2IFwKKwl8IGg4MzAwIHwgaDg1MDAgfCBocHBhIHwgaHBwYTEuWzAxXSB8IGhwcGEyLjAgfCBocHBhMi4wW253XSB8IGhwcGE2NCBcCisJfCBpMzcwIHwgaTg2MCB8IGk5NjAgfCBpYTY0IFwKKwl8IGlwMmsgfCBpcTIwMDAgXAorCXwgbTMyYyB8IG0zMnIgfCBtMzJybGUgfCBtNjgwMDAgfCBtNjhrIHwgbTg4ayBcCisJfCBtYXhxIHwgbWIgfCBtaWNyb2JsYXplIHwgbWNvcmUgfCBtZXAgXAorCXwgbWlwcyB8IG1pcHNiZSB8IG1pcHNlYiB8IG1pcHNlbCB8IG1pcHNsZSBcCisJfCBtaXBzMTYgXAorCXwgbWlwczY0IHwgbWlwczY0ZWwgXAorCXwgbWlwczY0dnIgfCBtaXBzNjR2cmVsIFwKKwl8IG1pcHM2NG9yaW9uIHwgbWlwczY0b3Jpb25lbCBcCisJfCBtaXBzNjR2cjQxMDAgfCBtaXBzNjR2cjQxMDBlbCBcCisJfCBtaXBzNjR2cjQzMDAgfCBtaXBzNjR2cjQzMDBlbCBcCisJfCBtaXBzNjR2cjUwMDAgfCBtaXBzNjR2cjUwMDBlbCBcCisJfCBtaXBzNjR2cjU5MDAgfCBtaXBzNjR2cjU5MDBlbCBcCisJfCBtaXBzaXNhMzIgfCBtaXBzaXNhMzJlbCBcCisJfCBtaXBzaXNhMzJyMiB8IG1pcHNpc2EzMnIyZWwgXAorCXwgbWlwc2lzYTY0IHwgbWlwc2lzYTY0ZWwgXAorCXwgbWlwc2lzYTY0cjIgfCBtaXBzaXNhNjRyMmVsIFwKKwl8IG1pcHNpc2E2NHNiMSB8IG1pcHNpc2E2NHNiMWVsIFwKKwl8IG1pcHNpc2E2NHNyNzFrIHwgbWlwc2lzYTY0c3I3MWtlbCBcCisJfCBtaXBzdHgzOSB8IG1pcHN0eDM5ZWwgXAorCXwgbW4xMDIwMCB8IG1uMTAzMDAgXAorCXwgbXQgXAorCXwgbXNwNDMwIFwKKwl8IG5pb3MgfCBuaW9zMiBcCisJfCBuczE2ayB8IG5zMzJrIFwKKwl8IG9yMzIgXAorCXwgcGRwMTAgfCBwZHAxMSB8IHBqIHwgcGpsIFwKKwl8IHBvd2VycGMgfCBwb3dlcnBjNjQgfCBwb3dlcnBjNjRsZSB8IHBvd2VycGNsZSB8IHBwY2JlIFwKKwl8IHB5cmFtaWQgXAorCXwgc2NvcmUgXAorCXwgc2ggfCBzaFsxMjM0XSB8IHNoWzI0XWEgfCBzaFsyM11lIHwgc2hbMzRdZWIgfCBzaGViIHwgc2hiZSB8IHNobGUgfCBzaFsxMjM0XWxlIHwgc2gzZWxlIFwKKwl8IHNoNjQgfCBzaDY0bGUgXAorCXwgc3BhcmMgfCBzcGFyYzY0IHwgc3BhcmM2NGIgfCBzcGFyYzY0diB8IHNwYXJjODZ4IHwgc3BhcmNsZXQgfCBzcGFyY2xpdGUgXAorCXwgc3BhcmN2OCB8IHNwYXJjdjkgfCBzcGFyY3Y5YiB8IHNwYXJjdjl2IFwKKwl8IHNwdSB8IHN0cm9uZ2FybSBcCisJfCB0YWhvZSB8IHRodW1iIHwgdGljNHggfCB0aWM4MCB8IHRyb24gXAorCXwgdjg1MCB8IHY4NTBlIFwKKwl8IHdlMzJrIFwKKwl8IHg4NiB8IHhjMTZ4IHwgeHNjYWxlIHwgeHNjYWxlZVtibF0gfCB4c3Rvcm15MTYgfCB4dGVuc2EgXAorCXwgejhrKQorCQliYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXVua25vd24KKwkJOzsKKwltNjgxMSB8IG02OGhjMTEgfCBtNjgxMiB8IG02OGhjMTIpCisJCSMgTW90b3JvbGEgNjhIQzExLzEyLgorCQliYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXVua25vd24KKwkJb3M9LW5vbmUKKwkJOzsKKwltODgxMTAgfCBtNjgwWzEyMzQ2XTAgfCBtNjgzPzIgfCBtNjgzNjAgfCBtNTIwMCB8IHY3MCB8IHc2NSB8IHo4aykKKwkJOzsKKwltczEpCisJCWJhc2ljX21hY2hpbmU9bXQtdW5rbm93bgorCQk7OworCisJIyBXZSB1c2UgYHBjJyByYXRoZXIgdGhhbiBgdW5rbm93bicKKwkjIGJlY2F1c2UgKDEpIHRoYXQncyB3aGF0IHRoZXkgbm9ybWFsbHkgYXJlLCBhbmQKKwkjICgyKSB0aGUgd29yZCAidW5rbm93biIgdGVuZHMgdG8gY29uZnVzZSBiZWdpbm5pbmcgdXNlcnMuCisJaSo4NiB8IHg4Nl82NCkKKwkgIGJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtcGMKKwkgIDs7CisJIyBPYmplY3QgaWYgbW9yZSB0aGFuIG9uZSBjb21wYW55IG5hbWUgd29yZC4KKwkqLSotKikKKwkJZWNobyBJbnZhbGlkIGNvbmZpZ3VyYXRpb24gXGAkMVwnOiBtYWNoaW5lIFxgJGJhc2ljX21hY2hpbmVcJyBub3QgcmVjb2duaXplZCAxPiYyCisJCWV4aXQgMQorCQk7OworCSMgUmVjb2duaXplIHRoZSBiYXNpYyBDUFUgdHlwZXMgd2l0aCBjb21wYW55IG5hbWUuCisJNTgwLSogXAorCXwgYTI5ay0qIFwKKwl8IGFscGhhLSogfCBhbHBoYWV2WzQtOF0tKiB8IGFscGhhZXY1Ni0qIHwgYWxwaGFldjZbNzhdLSogXAorCXwgYWxwaGE2NC0qIHwgYWxwaGE2NGV2WzQtOF0tKiB8IGFscGhhNjRldjU2LSogfCBhbHBoYTY0ZXY2Wzc4XS0qIFwKKwl8IGFscGhhcGNhNVs2N10tKiB8IGFscGhhNjRwY2E1WzY3XS0qIHwgYXJjLSogXAorCXwgYXJtLSogIHwgYXJtYmUtKiB8IGFybWxlLSogfCBhcm1lYi0qIHwgYXJtdiotKiBcCisJfCBhdnItKiB8IGF2cjMyLSogXAorCXwgYmZpbi0qIHwgYnMyMDAwLSogXAorCXwgY1sxMjNdKiB8IGMzMC0qIHwgW2NqdF05MC0qIHwgYzR4LSogfCBjNTR4LSogfCBjNTV4LSogfCBjNngtKiBcCisJfCBjbGlwcGVyLSogfCBjcmF5bnYtKiB8IGN5ZHJhLSogXAorCXwgZDEwdi0qIHwgZDMwdi0qIHwgZGx4LSogXAorCXwgZWx4c2ktKiBcCisJfCBmMzBbMDFdLSogfCBmNzAwLSogfCBmaWRvLSogfCBmcjMwLSogfCBmcnYtKiB8IGZ4ODAtKiBcCisJfCBoODMwMC0qIHwgaDg1MDAtKiBcCisJfCBocHBhLSogfCBocHBhMS5bMDFdLSogfCBocHBhMi4wLSogfCBocHBhMi4wW253XS0qIHwgaHBwYTY0LSogXAorCXwgaSo4Ni0qIHwgaTg2MC0qIHwgaTk2MC0qIHwgaWE2NC0qIFwKKwl8IGlwMmstKiB8IGlxMjAwMC0qIFwKKwl8IG0zMmMtKiB8IG0zMnItKiB8IG0zMnJsZS0qIFwKKwl8IG02ODAwMC0qIHwgbTY4MFswMTIzNDZdMC0qIHwgbTY4MzYwLSogfCBtNjgzPzItKiB8IG02OGstKiBcCisJfCBtODgxMTAtKiB8IG04OGstKiB8IG1heHEtKiB8IG1jb3JlLSogXAorCXwgbWlwcy0qIHwgbWlwc2JlLSogfCBtaXBzZWItKiB8IG1pcHNlbC0qIHwgbWlwc2xlLSogXAorCXwgbWlwczE2LSogXAorCXwgbWlwczY0LSogfCBtaXBzNjRlbC0qIFwKKwl8IG1pcHM2NHZyLSogfCBtaXBzNjR2cmVsLSogXAorCXwgbWlwczY0b3Jpb24tKiB8IG1pcHM2NG9yaW9uZWwtKiBcCisJfCBtaXBzNjR2cjQxMDAtKiB8IG1pcHM2NHZyNDEwMGVsLSogXAorCXwgbWlwczY0dnI0MzAwLSogfCBtaXBzNjR2cjQzMDBlbC0qIFwKKwl8IG1pcHM2NHZyNTAwMC0qIHwgbWlwczY0dnI1MDAwZWwtKiBcCisJfCBtaXBzNjR2cjU5MDAtKiB8IG1pcHM2NHZyNTkwMGVsLSogXAorCXwgbWlwc2lzYTMyLSogfCBtaXBzaXNhMzJlbC0qIFwKKwl8IG1pcHNpc2EzMnIyLSogfCBtaXBzaXNhMzJyMmVsLSogXAorCXwgbWlwc2lzYTY0LSogfCBtaXBzaXNhNjRlbC0qIFwKKwl8IG1pcHNpc2E2NHIyLSogfCBtaXBzaXNhNjRyMmVsLSogXAorCXwgbWlwc2lzYTY0c2IxLSogfCBtaXBzaXNhNjRzYjFlbC0qIFwKKwl8IG1pcHNpc2E2NHNyNzFrLSogfCBtaXBzaXNhNjRzcjcxa2VsLSogXAorCXwgbWlwc3R4MzktKiB8IG1pcHN0eDM5ZWwtKiBcCisJfCBtbWl4LSogXAorCXwgbXQtKiBcCisJfCBtc3A0MzAtKiBcCisJfCBuaW9zLSogfCBuaW9zMi0qIFwKKwl8IG5vbmUtKiB8IG5wMS0qIHwgbnMxNmstKiB8IG5zMzJrLSogXAorCXwgb3Jpb24tKiBcCisJfCBwZHAxMC0qIHwgcGRwMTEtKiB8IHBqLSogfCBwamwtKiB8IHBuLSogfCBwb3dlci0qIFwKKwl8IHBvd2VycGMtKiB8IHBvd2VycGM2NC0qIHwgcG93ZXJwYzY0bGUtKiB8IHBvd2VycGNsZS0qIHwgcHBjYmUtKiBcCisJfCBweXJhbWlkLSogXAorCXwgcm9tcC0qIHwgcnM2MDAwLSogXAorCXwgc2gtKiB8IHNoWzEyMzRdLSogfCBzaFsyNF1hLSogfCBzaFsyM11lLSogfCBzaFszNF1lYi0qIHwgc2hlYi0qIHwgc2hiZS0qIFwKKwl8IHNobGUtKiB8IHNoWzEyMzRdbGUtKiB8IHNoM2VsZS0qIHwgc2g2NC0qIHwgc2g2NGxlLSogXAorCXwgc3BhcmMtKiB8IHNwYXJjNjQtKiB8IHNwYXJjNjRiLSogfCBzcGFyYzY0di0qIHwgc3BhcmM4NngtKiB8IHNwYXJjbGV0LSogXAorCXwgc3BhcmNsaXRlLSogXAorCXwgc3BhcmN2OC0qIHwgc3BhcmN2OS0qIHwgc3BhcmN2OWItKiB8IHNwYXJjdjl2LSogfCBzdHJvbmdhcm0tKiB8IHN2MS0qIHwgc3g/LSogXAorCXwgdGFob2UtKiB8IHRodW1iLSogXAorCXwgdGljMzAtKiB8IHRpYzR4LSogfCB0aWM1NHgtKiB8IHRpYzU1eC0qIHwgdGljNngtKiB8IHRpYzgwLSogXAorCXwgdHJvbi0qIFwKKwl8IHY4NTAtKiB8IHY4NTBlLSogfCB2YXgtKiBcCisJfCB3ZTMyay0qIFwKKwl8IHg4Ni0qIHwgeDg2XzY0LSogfCB4YzE2eC0qIHwgeHBzMTAwLSogfCB4c2NhbGUtKiB8IHhzY2FsZWVbYmxdLSogXAorCXwgeHN0b3JteTE2LSogfCB4dGVuc2EtKiBcCisJfCB5bXAtKiBcCisJfCB6OGstKikKKwkJOzsKKwkjIFJlY29nbml6ZSB0aGUgdmFyaW91cyBtYWNoaW5lIG5hbWVzIGFuZCBhbGlhc2VzIHdoaWNoIHN0YW5kCisJIyBmb3IgYSBDUFUgdHlwZSBhbmQgYSBjb21wYW55IGFuZCBzb21ldGltZXMgZXZlbiBhbiBPUy4KKwkzODZic2QpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni11bmtub3duCisJCW9zPS1ic2QKKwkJOzsKKwkzYjEgfCA3MzAwIHwgNzMwMC1hdHQgfCBhdHQtNzMwMCB8IHBjNzMwMCB8IHNhZmFyaSB8IHVuaXhwYykKKwkJYmFzaWNfbWFjaGluZT1tNjgwMDAtYXR0CisJCTs7CisJM2IqKQorCQliYXNpY19tYWNoaW5lPXdlMzJrLWF0dAorCQk7OworCWEyOWtoaWYpCisJCWJhc2ljX21hY2hpbmU9YTI5ay1hbWQKKwkJb3M9LXVkaQorCQk7OworICAgIAlhYmFjdXMpCisJCWJhc2ljX21hY2hpbmU9YWJhY3VzLXVua25vd24KKwkJOzsKKwlhZG9iZTY4aykKKwkJYmFzaWNfbWFjaGluZT1tNjgwMTAtYWRvYmUKKwkJb3M9LXNjb3V0CisJCTs7CisJYWxsaWFudCB8IGZ4ODApCisJCWJhc2ljX21hY2hpbmU9Zng4MC1hbGxpYW50CisJCTs7CisJYWx0b3MgfCBhbHRvczMwNjgpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hbHRvcworCQk7OworCWFtMjlrKQorCQliYXNpY19tYWNoaW5lPWEyOWstbm9uZQorCQlvcz0tYnNkCisJCTs7CisJYW1kNjQpCisJCWJhc2ljX21hY2hpbmU9eDg2XzY0LXBjCisJCTs7CisJYW1kNjQtKikKKwkJYmFzaWNfbWFjaGluZT14ODZfNjQtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlhbWRhaGwpCisJCWJhc2ljX21hY2hpbmU9NTgwLWFtZGFobAorCQlvcz0tc3lzdgorCQk7OworCWFtaWdhIHwgYW1pZ2EtKikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXVua25vd24KKwkJOzsKKwlhbWlnYW9zIHwgYW1pZ2Fkb3MpCisJCWJhc2ljX21hY2hpbmU9bTY4ay11bmtub3duCisJCW9zPS1hbWlnYW9zCisJCTs7CisJYW1pZ2F1bml4IHwgYW1peCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXVua25vd24KKwkJb3M9LXN5c3Y0CisJCTs7CisJYXBvbGxvNjgpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hcG9sbG8KKwkJb3M9LXN5c3YKKwkJOzsKKwlhcG9sbG82OGJzZCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWFwb2xsbworCQlvcz0tYnNkCisJCTs7CisJYXV4KQorCQliYXNpY19tYWNoaW5lPW02OGstYXBwbGUKKwkJb3M9LWF1eAorCQk7OworCWJhbGFuY2UpCisJCWJhc2ljX21hY2hpbmU9bnMzMmstc2VxdWVudAorCQlvcz0tZHluaXgKKwkJOzsKKwljOTApCisJCWJhc2ljX21hY2hpbmU9YzkwLWNyYXkKKwkJb3M9LXVuaWNvcworCQk7OworCWNvbnZleC1jMSkKKwkJYmFzaWNfbWFjaGluZT1jMS1jb252ZXgKKwkJb3M9LWJzZAorCQk7OworCWNvbnZleC1jMikKKwkJYmFzaWNfbWFjaGluZT1jMi1jb252ZXgKKwkJb3M9LWJzZAorCQk7OworCWNvbnZleC1jMzIpCisJCWJhc2ljX21hY2hpbmU9YzMyLWNvbnZleAorCQlvcz0tYnNkCisJCTs7CisJY29udmV4LWMzNCkKKwkJYmFzaWNfbWFjaGluZT1jMzQtY29udmV4CisJCW9zPS1ic2QKKwkJOzsKKwljb252ZXgtYzM4KQorCQliYXNpY19tYWNoaW5lPWMzOC1jb252ZXgKKwkJb3M9LWJzZAorCQk7OworCWNyYXkgfCBqOTApCisJCWJhc2ljX21hY2hpbmU9ajkwLWNyYXkKKwkJb3M9LXVuaWNvcworCQk7OworCWNyYXludikKKwkJYmFzaWNfbWFjaGluZT1jcmF5bnYtY3JheQorCQlvcz0tdW5pY29zbXAKKwkJOzsKKwljcjE2YykKKwkJYmFzaWNfbWFjaGluZT1jcjE2Yy11bmtub3duCisJCW9zPS1lbGYKKwkJOzsKKwljcmRzIHwgdW5vcykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWNyZHMKKwkJOzsKKwljcmlzdjMyIHwgY3Jpc3YzMi0qIHwgZXRyYXhmcyopCisJCWJhc2ljX21hY2hpbmU9Y3Jpc3YzMi1heGlzCisJCTs7CisJY3JpcyB8IGNyaXMtKiB8IGV0cmF4KikKKwkJYmFzaWNfbWFjaGluZT1jcmlzLWF4aXMKKwkJOzsKKwljcngpCisJCWJhc2ljX21hY2hpbmU9Y3J4LXVua25vd24KKwkJb3M9LWVsZgorCQk7OworCWRhMzAgfCBkYTMwLSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay1kYTMwCisJCTs7CisJZGVjc3RhdGlvbiB8IGRlY3N0YXRpb24tMzEwMCB8IHBtYXggfCBwbWF4LSogfCBwbWluIHwgZGVjMzEwMCB8IGRlY3N0YXRuKQorCQliYXNpY19tYWNoaW5lPW1pcHMtZGVjCisJCTs7CisJZGVjc3lzdGVtMTAqIHwgZGVjMTAqKQorCQliYXNpY19tYWNoaW5lPXBkcDEwLWRlYworCQlvcz0tdG9wczEwCisJCTs7CisJZGVjc3lzdGVtMjAqIHwgZGVjMjAqKQorCQliYXNpY19tYWNoaW5lPXBkcDEwLWRlYworCQlvcz0tdG9wczIwCisJCTs7CisJZGVsdGEgfCAzMzAwIHwgbW90b3JvbGEtMzMwMCB8IG1vdG9yb2xhLWRlbHRhIFwKKwkgICAgICB8IDMzMDAtbW90b3JvbGEgfCBkZWx0YS1tb3Rvcm9sYSkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLW1vdG9yb2xhCisJCTs7CisJZGVsdGE4OCkKKwkJYmFzaWNfbWFjaGluZT1tODhrLW1vdG9yb2xhCisJCW9zPS1zeXN2MworCQk7OworCWRqZ3BwKQorCQliYXNpY19tYWNoaW5lPWk1ODYtcGMKKwkJb3M9LW1zZG9zZGpncHAKKwkJOzsKKwlkcHgyMCB8IGRweDIwLSopCisJCWJhc2ljX21hY2hpbmU9cnM2MDAwLWJ1bGwKKwkJb3M9LWJvc3gKKwkJOzsKKwlkcHgyKiB8IGRweDIqLWJ1bGwpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1idWxsCisJCW9zPS1zeXN2MworCQk7OworCWVibW9uMjlrKQorCQliYXNpY19tYWNoaW5lPWEyOWstYW1kCisJCW9zPS1lYm1vbgorCQk7OworCWVseHNpKQorCQliYXNpY19tYWNoaW5lPWVseHNpLWVseHNpCisJCW9zPS1ic2QKKwkJOzsKKwllbmNvcmUgfCB1bWF4IHwgbW1heCkKKwkJYmFzaWNfbWFjaGluZT1uczMyay1lbmNvcmUKKwkJOzsKKwllczE4MDAgfCBPU0U2OGsgfCBvc2U2OGsgfCBvc2UgfCBPU0UpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1lcmljc3NvbgorCQlvcz0tb3NlCisJCTs7CisJZngyODAwKQorCQliYXNpY19tYWNoaW5lPWk4NjAtYWxsaWFudAorCQk7OworCWdlbml4KQorCQliYXNpY19tYWNoaW5lPW5zMzJrLW5zCisJCTs7CisJZ21pY3JvKQorCQliYXNpY19tYWNoaW5lPXRyb24tZ21pY3JvCisJCW9zPS1zeXN2CisJCTs7CisJZ28zMikKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisJCW9zPS1nbzMyCisJCTs7CisJaDMwNTByKiB8IGhpdXgqKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaGl0YWNoaQorCQlvcz0taGl1eHdlMgorCQk7OworCWg4MzAwaG1zKQorCQliYXNpY19tYWNoaW5lPWg4MzAwLWhpdGFjaGkKKwkJb3M9LWhtcworCQk7OworCWg4MzAweHJheSkKKwkJYmFzaWNfbWFjaGluZT1oODMwMC1oaXRhY2hpCisJCW9zPS14cmF5CisJCTs7CisJaDg1MDBobXMpCisJCWJhc2ljX21hY2hpbmU9aDg1MDAtaGl0YWNoaQorCQlvcz0taG1zCisJCTs7CisJaGFycmlzKQorCQliYXNpY19tYWNoaW5lPW04OGstaGFycmlzCisJCW9zPS1zeXN2MworCQk7OworCWhwMzAwLSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay1ocAorCQk7OworCWhwMzAwYnNkKQorCQliYXNpY19tYWNoaW5lPW02OGstaHAKKwkJb3M9LWJzZAorCQk7OworCWhwMzAwaHB1eCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWhwCisJCW9zPS1ocHV4CisJCTs7CisJaHAzazlbMC05XVswLTldIHwgaHA5WzAtOV1bMC05XSkKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4wLWhwCisJCTs7CisJaHA5azJbMC05XVswLTldIHwgaHA5azMxWzAtOV0pCisJCWJhc2ljX21hY2hpbmU9bTY4MDAwLWhwCisJCTs7CisJaHA5azNbMi05XVswLTldKQorCQliYXNpY19tYWNoaW5lPW02OGstaHAKKwkJOzsKKwlocDlrNlswLTldWzAtOV0gfCBocDZbMC05XVswLTldKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjAtaHAKKwkJOzsKKwlocDlrN1swLTc5XVswLTldIHwgaHA3WzAtNzldWzAtOV0pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAorCQk7OworCWhwOWs3OFswLTldIHwgaHA3OFswLTldKQorCQkjIEZJWE1FOiByZWFsbHkgaHBwYTIuMC1ocAorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKKwkJOzsKKwlocDlrOFs2N10xIHwgaHA4WzY3XTEgfCBocDlrODBbMjRdIHwgaHA4MFsyNF0gfCBocDlrOFs3OF05IHwgaHA4Wzc4XTkgfCBocDlrODkzIHwgaHA4OTMpCisJCSMgRklYTUU6IHJlYWxseSBocHBhMi4wLWhwCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAorCQk7OworCWhwOWs4WzAtOV1bMTM2NzldIHwgaHA4WzAtOV1bMTM2NzldKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKKwkJOzsKKwlocDlrOFswLTldWzAtOV0gfCBocDhbMC05XVswLTldKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjAtaHAKKwkJOzsKKwlocHBhLW5leHQpCisJCW9zPS1uZXh0c3RlcDMKKwkJOzsKKwlocHBhb3NmKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKKwkJb3M9LW9zZgorCQk7OworCWhwcHJvKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKKwkJb3M9LXByb2VsZgorCQk7OworCWkzNzAtaWJtKiB8IGlibSopCisJCWJhc2ljX21hY2hpbmU9aTM3MC1pYm0KKwkJOzsKKyMgSSdtIG5vdCBzdXJlIHdoYXQgIlN5c3YzMiIgbWVhbnMuICBTaG91bGQgdGhpcyBiZSBzeXN2My4yPworCWkqODZ2MzIpCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYuKi84Ni1wYy8nYAorCQlvcz0tc3lzdjMyCisJCTs7CisJaSo4NnY0KikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni4qLzg2LXBjLydgCisJCW9zPS1zeXN2NAorCQk7OworCWkqODZ2KQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LiovODYtcGMvJ2AKKwkJb3M9LXN5c3YKKwkJOzsKKwlpKjg2c29sMikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni4qLzg2LXBjLydgCisJCW9zPS1zb2xhcmlzMgorCQk7OworCWkzODZtYWNoKQorCQliYXNpY19tYWNoaW5lPWkzODYtbWFjaAorCQlvcz0tbWFjaAorCQk7OworCWkzODYtdnN0YSB8IHZzdGEpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni11bmtub3duCisJCW9zPS12c3RhCisJCTs7CisJaXJpcyB8IGlyaXM0ZCkKKwkJYmFzaWNfbWFjaGluZT1taXBzLXNnaQorCQljYXNlICRvcyBpbgorCQkgICAgLWlyaXgqKQorCQkJOzsKKwkJICAgICopCisJCQlvcz0taXJpeDQKKwkJCTs7CisJCWVzYWMKKwkJOzsKKwlpc2k2OCB8IGlzaSkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWlzaQorCQlvcz0tc3lzdgorCQk7OworCW04OGstb21yb24qKQorCQliYXNpY19tYWNoaW5lPW04OGstb21yb24KKwkJOzsKKwltYWdudW0gfCBtMzIzMCkKKwkJYmFzaWNfbWFjaGluZT1taXBzLW1pcHMKKwkJb3M9LXN5c3YKKwkJOzsKKwltZXJsaW4pCisJCWJhc2ljX21hY2hpbmU9bnMzMmstdXRlaworCQlvcz0tc3lzdgorCQk7OworCW1pbmd3MzIpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1wYworCQlvcz0tbWluZ3czMgorCQk7OworCW1pbmd3MzJjZSkKKwkJYmFzaWNfbWFjaGluZT1hcm0tdW5rbm93bgorCQlvcz0tbWluZ3czMmNlCisJCTs7CisJbWluaWZyYW1lKQorCQliYXNpY19tYWNoaW5lPW02ODAwMC1jb252ZXJnZW50CisJCTs7CisJKm1pbnQgfCAtbWludFswLTldKiB8ICpNaU5UIHwgKk1pTlRbMC05XSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hdGFyaQorCQlvcz0tbWludAorCQk7OworCW1pcHMzKi0qKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkIC1lICdzL21pcHMzL21pcHM2NC8nYAorCQk7OworCW1pcHMzKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAtZSAncy9taXBzMy9taXBzNjQvJ2AtdW5rbm93bgorCQk7OworCW1vbml0b3IpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1yb202OGsKKwkJb3M9LWNvZmYKKwkJOzsKKwltb3JwaG9zKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGMtdW5rbm93bgorCQlvcz0tbW9ycGhvcworCQk7OworCW1zZG9zKQorCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKwkJb3M9LW1zZG9zCisJCTs7CisJbXMxLSopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgLWUgJ3MvbXMxLS9tdC0vJ2AKKwkJOzsKKwltdnMpCisJCWJhc2ljX21hY2hpbmU9aTM3MC1pYm0KKwkJb3M9LW12cworCQk7OworCW5jcjMwMDApCisJCWJhc2ljX21hY2hpbmU9aTQ4Ni1uY3IKKwkJb3M9LXN5c3Y0CisJCTs7CisJbmV0YnNkMzg2KQorCQliYXNpY19tYWNoaW5lPWkzODYtdW5rbm93bgorCQlvcz0tbmV0YnNkCisJCTs7CisJbmV0d2luZGVyKQorCQliYXNpY19tYWNoaW5lPWFybXY0bC1yZWJlbAorCQlvcz0tbGludXgKKwkJOzsKKwluZXdzIHwgbmV3czcwMCB8IG5ld3M4MDAgfCBuZXdzOTAwKQorCQliYXNpY19tYWNoaW5lPW02OGstc29ueQorCQlvcz0tbmV3c29zCisJCTs7CisJbmV3czEwMDApCisJCWJhc2ljX21hY2hpbmU9bTY4MDMwLXNvbnkKKwkJb3M9LW5ld3NvcworCQk7OworCW5ld3MtMzYwMCB8IHJpc2MtbmV3cykKKwkJYmFzaWNfbWFjaGluZT1taXBzLXNvbnkKKwkJb3M9LW5ld3NvcworCQk7OworCW5lY3Y3MCkKKwkJYmFzaWNfbWFjaGluZT12NzAtbmVjCisJCW9zPS1zeXN2CisJCTs7CisJbmV4dCB8IG0qLW5leHQgKQorCQliYXNpY19tYWNoaW5lPW02OGstbmV4dAorCQljYXNlICRvcyBpbgorCQkgICAgLW5leHRzdGVwKiApCisJCQk7OworCQkgICAgLW5zMiopCisJCSAgICAgIG9zPS1uZXh0c3RlcDIKKwkJCTs7CisJCSAgICAqKQorCQkgICAgICBvcz0tbmV4dHN0ZXAzCisJCQk7OworCQllc2FjCisJCTs7CisJbmgzMDAwKQorCQliYXNpY19tYWNoaW5lPW02OGstaGFycmlzCisJCW9zPS1jeHV4CisJCTs7CisJbmhbNDVdMDAwKQorCQliYXNpY19tYWNoaW5lPW04OGstaGFycmlzCisJCW9zPS1jeHV4CisJCTs7CisJbmluZHk5NjApCisJCWJhc2ljX21hY2hpbmU9aTk2MC1pbnRlbAorCQlvcz0tbmluZHkKKwkJOzsKKwltb245NjApCisJCWJhc2ljX21hY2hpbmU9aTk2MC1pbnRlbAorCQlvcz0tbW9uOTYwCisJCTs7CisJbm9uc3RvcHV4KQorCQliYXNpY19tYWNoaW5lPW1pcHMtY29tcGFxCisJCW9zPS1ub25zdG9wdXgKKwkJOzsKKwlucDEpCisJCWJhc2ljX21hY2hpbmU9bnAxLWdvdWxkCisJCTs7CisJbnNyLXRhbmRlbSkKKwkJYmFzaWNfbWFjaGluZT1uc3ItdGFuZGVtCisJCTs7CisJb3A1MG4tKiB8IG9wNjBjLSopCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1va2kKKwkJb3M9LXByb2VsZgorCQk7OworCW9wZW5yaXNjIHwgb3BlbnJpc2MtKikKKwkJYmFzaWNfbWFjaGluZT1vcjMyLXVua25vd24KKwkJOzsKKwlvczQwMCkKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjLWlibQorCQlvcz0tb3M0MDAKKwkJOzsKKwlPU0U2ODAwMCB8IG9zZTY4MDAwKQorCQliYXNpY19tYWNoaW5lPW02ODAwMC1lcmljc3NvbgorCQlvcz0tb3NlCisJCTs7CisJb3M2OGspCisJCWJhc2ljX21hY2hpbmU9bTY4ay1ub25lCisJCW9zPS1vczY4aworCQk7OworCXBhLWhpdGFjaGkpCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1oaXRhY2hpCisJCW9zPS1oaXV4d2UyCisJCTs7CisJcGFyYWdvbikKKwkJYmFzaWNfbWFjaGluZT1pODYwLWludGVsCisJCW9zPS1vc2YKKwkJOzsKKwlwYmQpCisJCWJhc2ljX21hY2hpbmU9c3BhcmMtdHRpCisJCTs7CisJcGJiKQorCQliYXNpY19tYWNoaW5lPW02OGstdHRpCisJCTs7CisJcGM1MzIgfCBwYzUzMi0qKQorCQliYXNpY19tYWNoaW5lPW5zMzJrLXBjNTMyCisJCTs7CisJcGM5OCkKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisJCTs7CisJcGM5OC0qKQorCQliYXNpY19tYWNoaW5lPWkzODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwZW50aXVtIHwgcDUgfCBrNSB8IGs2IHwgbmV4Z2VuIHwgdmlhYzMpCisJCWJhc2ljX21hY2hpbmU9aTU4Ni1wYworCQk7OworCXBlbnRpdW1wcm8gfCBwNiB8IDZ4ODYgfCBhdGhsb24gfCBhdGhsb25fKikKKwkJYmFzaWNfbWFjaGluZT1pNjg2LXBjCisJCTs7CisJcGVudGl1bWlpIHwgcGVudGl1bTIgfCBwZW50aXVtaWlpIHwgcGVudGl1bTMpCisJCWJhc2ljX21hY2hpbmU9aTY4Ni1wYworCQk7OworCXBlbnRpdW00KQorCQliYXNpY19tYWNoaW5lPWk3ODYtcGMKKwkJOzsKKwlwZW50aXVtLSogfCBwNS0qIHwgazUtKiB8IGs2LSogfCBuZXhnZW4tKiB8IHZpYWMzLSopCisJCWJhc2ljX21hY2hpbmU9aTU4Ni1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBlbnRpdW1wcm8tKiB8IHA2LSogfCA2eDg2LSogfCBhdGhsb24tKikKKwkJYmFzaWNfbWFjaGluZT1pNjg2LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcGVudGl1bWlpLSogfCBwZW50aXVtMi0qIHwgcGVudGl1bWlpaS0qIHwgcGVudGl1bTMtKikKKwkJYmFzaWNfbWFjaGluZT1pNjg2LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcGVudGl1bTQtKikKKwkJYmFzaWNfbWFjaGluZT1pNzg2LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcG4pCisJCWJhc2ljX21hY2hpbmU9cG4tZ291bGQKKwkJOzsKKwlwb3dlcikJYmFzaWNfbWFjaGluZT1wb3dlci1pYm0KKwkJOzsKKwlwcGMpCWJhc2ljX21hY2hpbmU9cG93ZXJwYy11bmtub3duCisJCTs7CisJcHBjLSopCWJhc2ljX21hY2hpbmU9cG93ZXJwYy1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBwY2xlIHwgcG93ZXJwY2xpdHRsZSB8IHBwYy1sZSB8IHBvd2VycGMtbGl0dGxlKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGNsZS11bmtub3duCisJCTs7CisJcHBjbGUtKiB8IHBvd2VycGNsaXR0bGUtKikKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjbGUtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwcGM2NCkJYmFzaWNfbWFjaGluZT1wb3dlcnBjNjQtdW5rbm93bgorCQk7OworCXBwYzY0LSopIGJhc2ljX21hY2hpbmU9cG93ZXJwYzY0LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcHBjNjRsZSB8IHBvd2VycGM2NGxpdHRsZSB8IHBwYzY0LWxlIHwgcG93ZXJwYzY0LWxpdHRsZSkKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjNjRsZS11bmtub3duCisJCTs7CisJcHBjNjRsZS0qIHwgcG93ZXJwYzY0bGl0dGxlLSopCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwYzY0bGUtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwczIpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1pYm0KKwkJOzsKKwlwdzMyKQorCQliYXNpY19tYWNoaW5lPWk1ODYtdW5rbm93bgorCQlvcz0tcHczMgorCQk7OworCXJkb3MpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1wYworCQlvcz0tcmRvcworCQk7OworCXJvbTY4aykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXJvbTY4aworCQlvcz0tY29mZgorCQk7OworCXJtWzQ2XTAwKQorCQliYXNpY19tYWNoaW5lPW1pcHMtc2llbWVucworCQk7OworCXJ0cGMgfCBydHBjLSopCisJCWJhc2ljX21hY2hpbmU9cm9tcC1pYm0KKwkJOzsKKwlzMzkwIHwgczM5MC0qKQorCQliYXNpY19tYWNoaW5lPXMzOTAtaWJtCisJCTs7CisJczM5MHggfCBzMzkweC0qKQorCQliYXNpY19tYWNoaW5lPXMzOTB4LWlibQorCQk7OworCXNhMjkyMDApCisJCWJhc2ljX21hY2hpbmU9YTI5ay1hbWQKKwkJb3M9LXVkaQorCQk7OworCXNiMSkKKwkJYmFzaWNfbWFjaGluZT1taXBzaXNhNjRzYjEtdW5rbm93bgorCQk7OworCXNiMWVsKQorCQliYXNpY19tYWNoaW5lPW1pcHNpc2E2NHNiMWVsLXVua25vd24KKwkJOzsKKwlzZGUpCisJCWJhc2ljX21hY2hpbmU9bWlwc2lzYTMyLXNkZQorCQlvcz0tZWxmCisJCTs7CisJc2VpKQorCQliYXNpY19tYWNoaW5lPW1pcHMtc2VpCisJCW9zPS1zZWl1eAorCQk7OworCXNlcXVlbnQpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1zZXF1ZW50CisJCTs7CisJc2gpCisJCWJhc2ljX21hY2hpbmU9c2gtaGl0YWNoaQorCQlvcz0taG1zCisJCTs7CisJc2g1ZWwpCisJCWJhc2ljX21hY2hpbmU9c2g1bGUtdW5rbm93bgorCQk7OworCXNoNjQpCisJCWJhc2ljX21hY2hpbmU9c2g2NC11bmtub3duCisJCTs7CisJc3BhcmNsaXRlLXdycyB8IHNpbXNvLXdycykKKwkJYmFzaWNfbWFjaGluZT1zcGFyY2xpdGUtd3JzCisJCW9zPS12eHdvcmtzCisJCTs7CisJc3BzNykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWJ1bGwKKwkJb3M9LXN5c3YyCisJCTs7CisJc3B1cikKKwkJYmFzaWNfbWFjaGluZT1zcHVyLXVua25vd24KKwkJOzsKKwlzdDIwMDApCisJCWJhc2ljX21hY2hpbmU9bTY4ay10YW5kZW0KKwkJOzsKKwlzdHJhdHVzKQorCQliYXNpY19tYWNoaW5lPWk4NjAtc3RyYXR1cworCQlvcz0tc3lzdjQKKwkJOzsKKwlzdW4yKQorCQliYXNpY19tYWNoaW5lPW02ODAwMC1zdW4KKwkJOzsKKwlzdW4yb3MzKQorCQliYXNpY19tYWNoaW5lPW02ODAwMC1zdW4KKwkJb3M9LXN1bm9zMworCQk7OworCXN1bjJvczQpCisJCWJhc2ljX21hY2hpbmU9bTY4MDAwLXN1bgorCQlvcz0tc3Vub3M0CisJCTs7CisJc3VuM29zMykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXN1bgorCQlvcz0tc3Vub3MzCisJCTs7CisJc3VuM29zNCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXN1bgorCQlvcz0tc3Vub3M0CisJCTs7CisJc3VuNG9zMykKKwkJYmFzaWNfbWFjaGluZT1zcGFyYy1zdW4KKwkJb3M9LXN1bm9zMworCQk7OworCXN1bjRvczQpCisJCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCisJCW9zPS1zdW5vczQKKwkJOzsKKwlzdW40c29sMikKKwkJYmFzaWNfbWFjaGluZT1zcGFyYy1zdW4KKwkJb3M9LXNvbGFyaXMyCisJCTs7CisJc3VuMyB8IHN1bjMtKikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXN1bgorCQk7OworCXN1bjQpCisJCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCisJCTs7CisJc3VuMzg2IHwgc3VuMzg2aSB8IHJvYWRydW5uZXIpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1zdW4KKwkJOzsKKwlzdjEpCisJCWJhc2ljX21hY2hpbmU9c3YxLWNyYXkKKwkJb3M9LXVuaWNvcworCQk7OworCXN5bW1ldHJ5KQorCQliYXNpY19tYWNoaW5lPWkzODYtc2VxdWVudAorCQlvcz0tZHluaXgKKwkJOzsKKwl0M2UpCisJCWJhc2ljX21hY2hpbmU9YWxwaGFldjUtY3JheQorCQlvcz0tdW5pY29zCisJCTs7CisJdDkwKQorCQliYXNpY19tYWNoaW5lPXQ5MC1jcmF5CisJCW9zPS11bmljb3MKKwkJOzsKKwl0aWM1NHggfCBjNTR4KikKKwkJYmFzaWNfbWFjaGluZT10aWM1NHgtdW5rbm93bgorCQlvcz0tY29mZgorCQk7OworCXRpYzU1eCB8IGM1NXgqKQorCQliYXNpY19tYWNoaW5lPXRpYzU1eC11bmtub3duCisJCW9zPS1jb2ZmCisJCTs7CisJdGljNnggfCBjNngqKQorCQliYXNpY19tYWNoaW5lPXRpYzZ4LXVua25vd24KKwkJb3M9LWNvZmYKKwkJOzsKKwl0eDM5KQorCQliYXNpY19tYWNoaW5lPW1pcHN0eDM5LXVua25vd24KKwkJOzsKKwl0eDM5ZWwpCisJCWJhc2ljX21hY2hpbmU9bWlwc3R4MzllbC11bmtub3duCisJCTs7CisJdG9hZDEpCisJCWJhc2ljX21hY2hpbmU9cGRwMTAteGtsCisJCW9zPS10b3BzMjAKKwkJOzsKKwl0b3dlciB8IHRvd2VyLTMyKQorCQliYXNpY19tYWNoaW5lPW02OGstbmNyCisJCTs7CisJdHBmKQorCQliYXNpY19tYWNoaW5lPXMzOTB4LWlibQorCQlvcz0tdHBmCisJCTs7CisJdWRpMjlrKQorCQliYXNpY19tYWNoaW5lPWEyOWstYW1kCisJCW9zPS11ZGkKKwkJOzsKKwl1bHRyYTMpCisJCWJhc2ljX21hY2hpbmU9YTI5ay1ueXUKKwkJb3M9LXN5bTEKKwkJOzsKKwl2ODEwIHwgbmVjdjgxMCkKKwkJYmFzaWNfbWFjaGluZT12ODEwLW5lYworCQlvcz0tbm9uZQorCQk7OworCXZheHYpCisJCWJhc2ljX21hY2hpbmU9dmF4LWRlYworCQlvcz0tc3lzdgorCQk7OworCXZtcykKKwkJYmFzaWNfbWFjaGluZT12YXgtZGVjCisJCW9zPS12bXMKKwkJOzsKKwl2cHAqfHZ4fHZ4LSopCisJCWJhc2ljX21hY2hpbmU9ZjMwMS1mdWppdHN1CisJCTs7CisJdnh3b3Jrczk2MCkKKwkJYmFzaWNfbWFjaGluZT1pOTYwLXdycworCQlvcz0tdnh3b3JrcworCQk7OworCXZ4d29ya3M2OCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXdycworCQlvcz0tdnh3b3JrcworCQk7OworCXZ4d29ya3MyOWspCisJCWJhc2ljX21hY2hpbmU9YTI5ay13cnMKKwkJb3M9LXZ4d29ya3MKKwkJOzsKKwl3NjUqKQorCQliYXNpY19tYWNoaW5lPXc2NS13ZGMKKwkJb3M9LW5vbmUKKwkJOzsKKwl3ODlrLSopCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS13aW5ib25kCisJCW9zPS1wcm9lbGYKKwkJOzsKKwl4Ym94KQorCQliYXNpY19tYWNoaW5lPWk2ODYtcGMKKwkJb3M9LW1pbmd3MzIKKwkJOzsKKwl4cHMgfCB4cHMxMDApCisJCWJhc2ljX21hY2hpbmU9eHBzMTAwLWhvbmV5d2VsbAorCQk7OworCXltcCkKKwkJYmFzaWNfbWFjaGluZT15bXAtY3JheQorCQlvcz0tdW5pY29zCisJCTs7CisJejhrLSotY29mZikKKwkJYmFzaWNfbWFjaGluZT16OGstdW5rbm93bgorCQlvcz0tc2ltCisJCTs7CisJbm9uZSkKKwkJYmFzaWNfbWFjaGluZT1ub25lLW5vbmUKKwkJb3M9LW5vbmUKKwkJOzsKKworIyBIZXJlIHdlIGhhbmRsZSB0aGUgZGVmYXVsdCBtYW51ZmFjdHVyZXIgb2YgY2VydGFpbiBDUFUgdHlwZXMuICBJdCBpcyBpbgorIyBzb21lIGNhc2VzIHRoZSBvbmx5IG1hbnVmYWN0dXJlciwgaW4gb3RoZXJzLCBpdCBpcyB0aGUgbW9zdCBwb3B1bGFyLgorCXc4OWspCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS13aW5ib25kCisJCTs7CisJb3A1MG4pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1va2kKKwkJOzsKKwlvcDYwYykKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLW9raQorCQk7OworCXJvbXApCisJCWJhc2ljX21hY2hpbmU9cm9tcC1pYm0KKwkJOzsKKwltbWl4KQorCQliYXNpY19tYWNoaW5lPW1taXgta251dGgKKwkJOzsKKwlyczYwMDApCisJCWJhc2ljX21hY2hpbmU9cnM2MDAwLWlibQorCQk7OworCXZheCkKKwkJYmFzaWNfbWFjaGluZT12YXgtZGVjCisJCTs7CisJcGRwMTApCisJCSMgdGhlcmUgYXJlIG1hbnkgY2xvbmVzLCBzbyBERUMgaXMgbm90IGEgc2FmZSBiZXQKKwkJYmFzaWNfbWFjaGluZT1wZHAxMC11bmtub3duCisJCTs7CisJcGRwMTEpCisJCWJhc2ljX21hY2hpbmU9cGRwMTEtZGVjCisJCTs7CisJd2UzMmspCisJCWJhc2ljX21hY2hpbmU9d2UzMmstYXR0CisJCTs7CisJc2hbMTIzNF0gfCBzaFsyNF1hIHwgc2hbMzRdZWIgfCBzaFsxMjM0XWxlIHwgc2hbMjNdZWxlKQorCQliYXNpY19tYWNoaW5lPXNoLXVua25vd24KKwkJOzsKKwlzcGFyYyB8IHNwYXJjdjggfCBzcGFyY3Y5IHwgc3BhcmN2OWIgfCBzcGFyY3Y5dikKKwkJYmFzaWNfbWFjaGluZT1zcGFyYy1zdW4KKwkJOzsKKwljeWRyYSkKKwkJYmFzaWNfbWFjaGluZT1jeWRyYS1jeWRyb21lCisJCTs7CisJb3Jpb24pCisJCWJhc2ljX21hY2hpbmU9b3Jpb24taGlnaGxldmVsCisJCTs7CisJb3Jpb24xMDUpCisJCWJhc2ljX21hY2hpbmU9Y2xpcHBlci1oaWdobGV2ZWwKKwkJOzsKKwltYWMgfCBtcHcgfCBtYWMtbXB3KQorCQliYXNpY19tYWNoaW5lPW02OGstYXBwbGUKKwkJOzsKKwlwbWFjIHwgcG1hYy1tcHcpCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwYy1hcHBsZQorCQk7OworCSotdW5rbm93bikKKwkJIyBNYWtlIHN1cmUgdG8gbWF0Y2ggYW4gYWxyZWFkeS1jYW5vbmljYWxpemVkIG1hY2hpbmUgbmFtZS4KKwkJOzsKKwkqKQorCQllY2hvIEludmFsaWQgY29uZmlndXJhdGlvbiBcYCQxXCc6IG1hY2hpbmUgXGAkYmFzaWNfbWFjaGluZVwnIG5vdCByZWNvZ25pemVkIDE+JjIKKwkJZXhpdCAxCisJCTs7Citlc2FjCisKKyMgSGVyZSB3ZSBjYW5vbmljYWxpemUgY2VydGFpbiBhbGlhc2VzIGZvciBtYW51ZmFjdHVyZXJzLgorY2FzZSAkYmFzaWNfbWFjaGluZSBpbgorCSotZGlnaXRhbCopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvZGlnaXRhbC4qL2RlYy8nYAorCQk7OworCSotY29tbW9kb3JlKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9jb21tb2RvcmUuKi9jYm0vJ2AKKwkJOzsKKwkqKQorCQk7OworZXNhYworCisjIERlY29kZSBtYW51ZmFjdHVyZXItc3BlY2lmaWMgYWxpYXNlcyBmb3IgY2VydGFpbiBvcGVyYXRpbmcgc3lzdGVtcy4KKworaWYgWyB4IiRvcyIgIT0geCIiIF0KK3RoZW4KK2Nhc2UgJG9zIGluCisgICAgICAgICMgRmlyc3QgbWF0Y2ggc29tZSBzeXN0ZW0gdHlwZSBhbGlhc2VzCisgICAgICAgICMgdGhhdCBtaWdodCBnZXQgY29uZnVzZWQgd2l0aCB2YWxpZCBzeXN0ZW0gdHlwZXMuCisJIyAtc29sYXJpcyogaXMgYSBiYXNpYyBzeXN0ZW0gdHlwZSwgd2l0aCB0aGlzIG9uZSBleGNlcHRpb24uCisJLXNvbGFyaXMxIHwgLXNvbGFyaXMxLiopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xzb2xhcmlzMXxzdW5vczR8J2AKKwkJOzsKKwktc29sYXJpcykKKwkJb3M9LXNvbGFyaXMyCisJCTs7CisJLXN2cjQqKQorCQlvcz0tc3lzdjQKKwkJOzsKKwktdW5peHdhcmUqKQorCQlvcz0tc3lzdjQuMnV3CisJCTs7CisJLWdudS9saW51eCopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xnbnUvbGludXh8bGludXgtZ251fCdgCisJCTs7CisJIyBGaXJzdCBhY2NlcHQgdGhlIGJhc2ljIHN5c3RlbSB0eXBlcy4KKwkjIFRoZSBwb3J0YWJsZSBzeXN0ZW1zIGNvbWVzIGZpcnN0LgorCSMgRWFjaCBhbHRlcm5hdGl2ZSBNVVNUIEVORCBJTiBBICosIHRvIG1hdGNoIGEgdmVyc2lvbiBudW1iZXIuCisJIyAtc3lzdiogaXMgbm90IGhlcmUgYmVjYXVzZSBpdCBjb21lcyBsYXRlciwgYWZ0ZXIgc3lzdnI0LgorCS1nbnUqIHwgLWJzZCogfCAtbWFjaCogfCAtbWluaXgqIHwgLWdlbml4KiB8IC11bHRyaXgqIHwgLWlyaXgqIFwKKwkgICAgICB8IC0qdm1zKiB8IC1zY28qIHwgLWVzaXgqIHwgLWlzYyogfCAtYWl4KiB8IC1zdW5vcyB8IC1zdW5vc1szNF0qXAorCSAgICAgIHwgLWhwdXgqIHwgLXVub3MqIHwgLW9zZiogfCAtbHVuYSogfCAtZGd1eCogfCAtc29sYXJpcyogfCAtc3ltKiBcCisJICAgICAgfCAtYW1pZ2FvcyogfCAtYW1pZ2Fkb3MqIHwgLW1zZG9zKiB8IC1uZXdzb3MqIHwgLXVuaWNvcyogfCAtYW9mKiBcCisJICAgICAgfCAtYW9zKiBcCisJICAgICAgfCAtbmluZHkqIHwgLXZ4c2ltKiB8IC12eHdvcmtzKiB8IC1lYm1vbiogfCAtaG1zKiB8IC1tdnMqIFwKKwkgICAgICB8IC1jbGl4KiB8IC1yaXNjb3MqIHwgLXVuaXBsdXMqIHwgLWlyaXMqIHwgLXJ0dSogfCAteGVuaXgqIFwKKwkgICAgICB8IC1oaXV4KiB8IC0zODZic2QqIHwgLWtuZXRic2QqIHwgLW1pcmJzZCogfCAtbmV0YnNkKiBcCisJICAgICAgfCAtb3BlbmJzZCogfCAtc29saWRic2QqIFwKKwkgICAgICB8IC1la2tvYnNkKiB8IC1rZnJlZWJzZCogfCAtZnJlZWJzZCogfCAtcmlzY2l4KiB8IC1seW54b3MqIFwKKwkgICAgICB8IC1ib3N4KiB8IC1uZXh0c3RlcCogfCAtY3h1eCogfCAtYW91dCogfCAtZWxmKiB8IC1vYWJpKiBcCisJICAgICAgfCAtcHR4KiB8IC1jb2ZmKiB8IC1lY29mZiogfCAtd2lubnQqIHwgLWRvbWFpbiogfCAtdnN0YSogXAorCSAgICAgIHwgLXVkaSogfCAtZWFiaSogfCAtbGl0ZXMqIHwgLWllZWUqIHwgLWdvMzIqIHwgLWF1eCogXAorCSAgICAgIHwgLWNob3J1c29zKiB8IC1jaG9ydXNyZGIqIFwKKwkgICAgICB8IC1jeWd3aW4qIHwgLXBlKiB8IC1wc29zKiB8IC1tb3NzKiB8IC1wcm9lbGYqIHwgLXJ0ZW1zKiBcCisJICAgICAgfCAtbWluZ3czMiogfCAtbGludXgtZ251KiB8IC1saW51eC1uZXdsaWIqIHwgLWxpbnV4LXVjbGliYyogXAorCSAgICAgIHwgLXV4cHYqIHwgLWJlb3MqIHwgLW1wZWl4KiB8IC11ZGsqIFwKKwkgICAgICB8IC1pbnRlcml4KiB8IC11d2luKiB8IC1ta3MqIHwgLXJoYXBzb2R5KiB8IC1kYXJ3aW4qIHwgLW9wZW5lZCogXAorCSAgICAgIHwgLW9wZW5zdGVwKiB8IC1vc2tpdCogfCAtY29uaXgqIHwgLXB3MzIqIHwgLW5vbnN0b3B1eCogXAorCSAgICAgIHwgLXN0b3JtLWNoYW9zKiB8IC10b3BzMTAqIHwgLXRlbmV4KiB8IC10b3BzMjAqIHwgLWl0cyogXAorCSAgICAgIHwgLW9zMiogfCAtdm9zKiB8IC1wYWxtb3MqIHwgLXVjbGludXgqIHwgLW51Y2xldXMqIFwKKwkgICAgICB8IC1tb3JwaG9zKiB8IC1zdXBlcnV4KiB8IC1ydG1rKiB8IC1ydG1rLW5vdmEqIHwgLXdpbmRpc3MqIFwKKwkgICAgICB8IC1wb3dlcm1heCogfCAtZG5peCogfCAtbng2IHwgLW54NyB8IC1zZWkqIHwgLWRyYWdvbmZseSogXAorCSAgICAgIHwgLXNreW9zKiB8IC1oYWlrdSogfCAtcmRvcyogfCAtdG9wcGVycyogfCAtZHJvcHMqKQorCSMgUmVtZW1iZXIsIGVhY2ggYWx0ZXJuYXRpdmUgTVVTVCBFTkQgSU4gKiwgdG8gbWF0Y2ggYSB2ZXJzaW9uIG51bWJlci4KKwkJOzsKKwktcW54KikKKwkJY2FzZSAkYmFzaWNfbWFjaGluZSBpbgorCQkgICAgeDg2LSogfCBpKjg2LSopCisJCQk7OworCQkgICAgKikKKwkJCW9zPS1udG8kb3MKKwkJCTs7CisJCWVzYWMKKwkJOzsKKwktbnRvLXFueCopCisJCTs7CisJLW50byopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xudG98bnRvLXFueHwnYAorCQk7OworCS1zaW0gfCAtZXMxODAwKiB8IC1obXMqIHwgLXhyYXkgfCAtb3M2OGsqIHwgLW5vbmUqIHwgLXY4OHIqIFwKKwkgICAgICB8IC13aW5kb3dzKiB8IC1vc3ggfCAtYWJ1ZyB8IC1uZXR3YXJlKiB8IC1vczkqIHwgLWJlb3MqIHwgLWhhaWt1KiBcCisJICAgICAgfCAtbWFjb3MqIHwgLW1wdyogfCAtbWFnaWMqIHwgLW1taXh3YXJlKiB8IC1tb245NjAqIHwgLWxuZXdzKikKKwkJOzsKKwktbWFjKikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfG1hY3xtYWNvc3wnYAorCQk7OworCS1saW51eC1kaWV0bGliYykKKwkJb3M9LWxpbnV4LWRpZXRsaWJjCisJCTs7CisJLWxpbnV4KikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfGxpbnV4fGxpbnV4LWdudXwnYAorCQk7OworCS1zdW5vczUqKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8c3Vub3M1fHNvbGFyaXMyfCdgCisJCTs7CisJLXN1bm9zNiopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xzdW5vczZ8c29sYXJpczN8J2AKKwkJOzsKKwktb3BlbmVkKikKKwkJb3M9LW9wZW5lZGl0aW9uCisJCTs7CisgICAgICAgIC1vczQwMCopCisJCW9zPS1vczQwMAorCQk7OworCS13aW5jZSopCisJCW9zPS13aW5jZQorCQk7OworCS1vc2Zyb3NlKikKKwkJb3M9LW9zZnJvc2UKKwkJOzsKKwktb3NmKikKKwkJb3M9LW9zZgorCQk7OworCS11dGVrKikKKwkJb3M9LWJzZAorCQk7OworCS1keW5peCopCisJCW9zPS1ic2QKKwkJOzsKKwktYWNpcyopCisJCW9zPS1hb3MKKwkJOzsKKwktYXRoZW9zKikKKwkJb3M9LWF0aGVvcworCQk7OworCS1zeWxsYWJsZSopCisJCW9zPS1zeWxsYWJsZQorCQk7OworCS0zODZic2QpCisJCW9zPS1ic2QKKwkJOzsKKwktY3RpeCogfCAtdXRzKikKKwkJb3M9LXN5c3YKKwkJOzsKKwktbm92YSopCisJCW9zPS1ydG1rLW5vdmEKKwkJOzsKKwktbnMyICkKKwkJb3M9LW5leHRzdGVwMgorCQk7OworCS1uc2sqKQorCQlvcz0tbnNrCisJCTs7CisJIyBQcmVzZXJ2ZSB0aGUgdmVyc2lvbiBudW1iZXIgb2Ygc2luaXg1LgorCS1zaW5peDUuKikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfHNpbml4fHN5c3Z8J2AKKwkJOzsKKwktc2luaXgqKQorCQlvcz0tc3lzdjQKKwkJOzsKKyAgICAgICAgLXRwZiopCisJCW9zPS10cGYKKwkJOzsKKwktdHJpdG9uKikKKwkJb3M9LXN5c3YzCisJCTs7CisJLW9zcyopCisJCW9zPS1zeXN2MworCQk7OworCS1zdnI0KQorCQlvcz0tc3lzdjQKKwkJOzsKKwktc3ZyMykKKwkJb3M9LXN5c3YzCisJCTs7CisJLXN5c3ZyNCkKKwkJb3M9LXN5c3Y0CisJCTs7CisJIyBUaGlzIG11c3QgY29tZSBhZnRlciAtc3lzdnI0LgorCS1zeXN2KikKKwkJOzsKKwktb3NlKikKKwkJb3M9LW9zZQorCQk7OworCS1lczE4MDAqKQorCQlvcz0tb3NlCisJCTs7CisJLXhlbml4KQorCQlvcz0teGVuaXgKKwkJOzsKKwktKm1pbnQgfCAtbWludFswLTldKiB8IC0qTWlOVCB8IC1NaU5UWzAtOV0qKQorCQlvcz0tbWludAorCQk7OworCS1hcm9zKikKKwkJb3M9LWFyb3MKKwkJOzsKKwkta2FvcyopCisJCW9zPS1rYW9zCisJCTs7CisJLXp2bW9lKQorCQlvcz0tenZtb2UKKwkJOzsKKwktbm9uZSkKKwkJOzsKKwkqKQorCQkjIEdldCByaWQgb2YgdGhlIGAtJyBhdCB0aGUgYmVnaW5uaW5nIG9mICRvcy4KKwkJb3M9YGVjaG8gJG9zIHwgc2VkICdzL1teLV0qLS8vJ2AKKwkJZWNobyBJbnZhbGlkIGNvbmZpZ3VyYXRpb24gXGAkMVwnOiBzeXN0ZW0gXGAkb3NcJyBub3QgcmVjb2duaXplZCAxPiYyCisJCWV4aXQgMQorCQk7OworZXNhYworZWxzZQorCisjIEhlcmUgd2UgaGFuZGxlIHRoZSBkZWZhdWx0IG9wZXJhdGluZyBzeXN0ZW1zIHRoYXQgY29tZSB3aXRoIHZhcmlvdXMgbWFjaGluZXMuCisjIFRoZSB2YWx1ZSBzaG91bGQgYmUgd2hhdCB0aGUgdmVuZG9yIGN1cnJlbnRseSBzaGlwcyBvdXQgdGhlIGRvb3Igd2l0aCB0aGVpcgorIyBtYWNoaW5lIG9yIHB1dCBhbm90aGVyIHdheSwgdGhlIG1vc3QgcG9wdWxhciBvcyBwcm92aWRlZCB3aXRoIHRoZSBtYWNoaW5lLgorCisjIE5vdGUgdGhhdCBpZiB5b3UncmUgZ29pbmcgdG8gdHJ5IHRvIG1hdGNoICItTUFOVUZBQ1RVUkVSIiBoZXJlIChzYXksCisjICItc3VuIiksIHRoZW4geW91IGhhdmUgdG8gdGVsbCB0aGUgY2FzZSBzdGF0ZW1lbnQgdXAgdG93YXJkcyB0aGUgdG9wCisjIHRoYXQgTUFOVUZBQ1RVUkVSIGlzbid0IGFuIG9wZXJhdGluZyBzeXN0ZW0uICBPdGhlcndpc2UsIGNvZGUgYWJvdmUKKyMgd2lsbCBzaWduYWwgYW4gZXJyb3Igc2F5aW5nIHRoYXQgTUFOVUZBQ1RVUkVSIGlzbid0IGFuIG9wZXJhdGluZworIyBzeXN0ZW0sIGFuZCB3ZSdsbCBuZXZlciBnZXQgdG8gdGhpcyBwb2ludC4KKworY2FzZSAkYmFzaWNfbWFjaGluZSBpbgorICAgICAgICBzY29yZS0qKQorCQlvcz0tZWxmCisJCTs7CisgICAgICAgIHNwdS0qKQorCQlvcz0tZWxmCisJCTs7CisJKi1hY29ybikKKwkJb3M9LXJpc2NpeDEuMgorCQk7OworCWFybSotcmViZWwpCisJCW9zPS1saW51eAorCQk7OworCWFybSotc2VtaSkKKwkJb3M9LWFvdXQKKwkJOzsKKyAgICAgICAgYzR4LSogfCB0aWM0eC0qKQorICAgICAgICAJb3M9LWNvZmYKKwkJOzsKKwkjIFRoaXMgbXVzdCBjb21lIGJlZm9yZSB0aGUgKi1kZWMgZW50cnkuCisJcGRwMTAtKikKKwkJb3M9LXRvcHMyMAorCQk7OworCXBkcDExLSopCisJCW9zPS1ub25lCisJCTs7CisJKi1kZWMgfCB2YXgtKikKKwkJb3M9LXVsdHJpeDQuMgorCQk7OworCW02OCotYXBvbGxvKQorCQlvcz0tZG9tYWluCisJCTs7CisJaTM4Ni1zdW4pCisJCW9zPS1zdW5vczQuMC4yCisJCTs7CisJbTY4MDAwLXN1bikKKwkJb3M9LXN1bm9zMworCQkjIFRoaXMgYWxzbyBleGlzdHMgaW4gdGhlIGNvbmZpZ3VyZSBwcm9ncmFtLCBidXQgd2FzIG5vdCB0aGUKKwkJIyBkZWZhdWx0LgorCQkjIG9zPS1zdW5vczQKKwkJOzsKKwltNjgqLWNpc2NvKQorCQlvcz0tYW91dAorCQk7OworICAgICAgICBtZXAtKikKKwkJb3M9LWVsZgorCQk7OworCW1pcHMqLWNpc2NvKQorCQlvcz0tZWxmCisJCTs7CisJbWlwcyotKikKKwkJb3M9LWVsZgorCQk7OworCW9yMzItKikKKwkJb3M9LWNvZmYKKwkJOzsKKwkqLXR0aSkJIyBtdXN0IGJlIGJlZm9yZSBzcGFyYyBlbnRyeSBvciB3ZSBnZXQgdGhlIHdyb25nIG9zLgorCQlvcz0tc3lzdjMKKwkJOzsKKwlzcGFyYy0qIHwgKi1zdW4pCisJCW9zPS1zdW5vczQuMS4xCisJCTs7CisJKi1iZSkKKwkJb3M9LWJlb3MKKwkJOzsKKwkqLWhhaWt1KQorCQlvcz0taGFpa3UKKwkJOzsKKwkqLWlibSkKKwkJb3M9LWFpeAorCQk7OworICAgIAkqLWtudXRoKQorCQlvcz0tbW1peHdhcmUKKwkJOzsKKwkqLXdlYykKKwkJb3M9LXByb2VsZgorCQk7OworCSotd2luYm9uZCkKKwkJb3M9LXByb2VsZgorCQk7OworCSotb2tpKQorCQlvcz0tcHJvZWxmCisJCTs7CisJKi1ocCkKKwkJb3M9LWhwdXgKKwkJOzsKKwkqLWhpdGFjaGkpCisJCW9zPS1oaXV4CisJCTs7CisJaTg2MC0qIHwgKi1hdHQgfCAqLW5jciB8ICotYWx0b3MgfCAqLW1vdG9yb2xhIHwgKi1jb252ZXJnZW50KQorCQlvcz0tc3lzdgorCQk7OworCSotY2JtKQorCQlvcz0tYW1pZ2FvcworCQk7OworCSotZGcpCisJCW9zPS1kZ3V4CisJCTs7CisJKi1kb2xwaGluKQorCQlvcz0tc3lzdjMKKwkJOzsKKwltNjhrLWNjdXIpCisJCW9zPS1ydHUKKwkJOzsKKwltODhrLW9tcm9uKikKKwkJb3M9LWx1bmEKKwkJOzsKKwkqLW5leHQgKQorCQlvcz0tbmV4dHN0ZXAKKwkJOzsKKwkqLXNlcXVlbnQpCisJCW9zPS1wdHgKKwkJOzsKKwkqLWNyZHMpCisJCW9zPS11bm9zCisJCTs7CisJKi1ucykKKwkJb3M9LWdlbml4CisJCTs7CisJaTM3MC0qKQorCQlvcz0tbXZzCisJCTs7CisJKi1uZXh0KQorCQlvcz0tbmV4dHN0ZXAzCisJCTs7CisJKi1nb3VsZCkKKwkJb3M9LXN5c3YKKwkJOzsKKwkqLWhpZ2hsZXZlbCkKKwkJb3M9LWJzZAorCQk7OworCSotZW5jb3JlKQorCQlvcz0tYnNkCisJCTs7CisJKi1zZ2kpCisJCW9zPS1pcml4CisJCTs7CisJKi1zaWVtZW5zKQorCQlvcz0tc3lzdjQKKwkJOzsKKwkqLW1hc3Njb21wKQorCQlvcz0tcnR1CisJCTs7CisJZjMwWzAxXS1mdWppdHN1IHwgZjcwMC1mdWppdHN1KQorCQlvcz0tdXhwdgorCQk7OworCSotcm9tNjhrKQorCQlvcz0tY29mZgorCQk7OworCSotKmJ1ZykKKwkJb3M9LWNvZmYKKwkJOzsKKwkqLWFwcGxlKQorCQlvcz0tbWFjb3MKKwkJOzsKKwkqLWF0YXJpKikKKwkJb3M9LW1pbnQKKwkJOzsKKwkqKQorCQlvcz0tbm9uZQorCQk7OworZXNhYworZmkKKworIyBIZXJlIHdlIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBrbm93IHRoZSBvcywgYW5kIHRoZSBDUFUgdHlwZSwgYnV0IG5vdCB0aGUKKyMgbWFudWZhY3R1cmVyLiAgV2UgcGljayB0aGUgbG9naWNhbCBtYW51ZmFjdHVyZXIuCit2ZW5kb3I9dW5rbm93bgorY2FzZSAkYmFzaWNfbWFjaGluZSBpbgorCSotdW5rbm93bikKKwkJY2FzZSAkb3MgaW4KKwkJCS1yaXNjaXgqKQorCQkJCXZlbmRvcj1hY29ybgorCQkJCTs7CisJCQktc3Vub3MqKQorCQkJCXZlbmRvcj1zdW4KKwkJCQk7OworCQkJLWFpeCopCisJCQkJdmVuZG9yPWlibQorCQkJCTs7CisJCQktYmVvcyopCisJCQkJdmVuZG9yPWJlCisJCQkJOzsKKwkJCS1ocHV4KikKKwkJCQl2ZW5kb3I9aHAKKwkJCQk7OworCQkJLW1wZWl4KikKKwkJCQl2ZW5kb3I9aHAKKwkJCQk7OworCQkJLWhpdXgqKQorCQkJCXZlbmRvcj1oaXRhY2hpCisJCQkJOzsKKwkJCS11bm9zKikKKwkJCQl2ZW5kb3I9Y3JkcworCQkJCTs7CisJCQktZGd1eCopCisJCQkJdmVuZG9yPWRnCisJCQkJOzsKKwkJCS1sdW5hKikKKwkJCQl2ZW5kb3I9b21yb24KKwkJCQk7OworCQkJLWdlbml4KikKKwkJCQl2ZW5kb3I9bnMKKwkJCQk7OworCQkJLW12cyogfCAtb3BlbmVkKikKKwkJCQl2ZW5kb3I9aWJtCisJCQkJOzsKKwkJCS1vczQwMCopCisJCQkJdmVuZG9yPWlibQorCQkJCTs7CisJCQktcHR4KikKKwkJCQl2ZW5kb3I9c2VxdWVudAorCQkJCTs7CisJCQktdHBmKikKKwkJCQl2ZW5kb3I9aWJtCisJCQkJOzsKKwkJCS12eHNpbSogfCAtdnh3b3JrcyogfCAtd2luZGlzcyopCisJCQkJdmVuZG9yPXdycworCQkJCTs7CisJCQktYXV4KikKKwkJCQl2ZW5kb3I9YXBwbGUKKwkJCQk7OworCQkJLWhtcyopCisJCQkJdmVuZG9yPWhpdGFjaGkKKwkJCQk7OworCQkJLW1wdyogfCAtbWFjb3MqKQorCQkJCXZlbmRvcj1hcHBsZQorCQkJCTs7CisJCQktKm1pbnQgfCAtbWludFswLTldKiB8IC0qTWlOVCB8IC1NaU5UWzAtOV0qKQorCQkJCXZlbmRvcj1hdGFyaQorCQkJCTs7CisJCQktdm9zKikKKwkJCQl2ZW5kb3I9c3RyYXR1cworCQkJCTs7CisJCWVzYWMKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAicy91bmtub3duLyR2ZW5kb3IvImAKKwkJOzsKK2VzYWMKKworZWNobyAkYmFzaWNfbWFjaGluZSRvcworZXhpdAorCisjIExvY2FsIHZhcmlhYmxlczoKKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXN0YXJ0OiAidGltZXN0YW1wPSciCisjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZCIKKyMgdGltZS1zdGFtcC1lbmQ6ICInIgorIyBFbmQ6CmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvYnVpbGQtYXV4L2RlcGNvbXAgYi9wYXJ0ZWQtMS44LjcvYnVpbGQtYXV4L2RlcGNvbXAKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTVmOTczNgotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9idWlsZC1hdXgvZGVwY29tcApAQCAtMCwwICsxLDU4OSBAQAorIyEgL2Jpbi9zaAorIyBkZXBjb21wIC0gY29tcGlsZSBhIHByb2dyYW0gZ2VuZXJhdGluZyBkZXBlbmRlbmNpZXMgYXMgc2lkZS1lZmZlY3RzCisKK3NjcmlwdHZlcnNpb249MjAwNy0wMy0yOS4wMQorCisjIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorIyAwMjExMC0xMzAxLCBVU0EuCisKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKKyMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKyMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCisjIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBBbGV4YW5kcmUgT2xpdmEgPG9saXZhQGRjYy51bmljYW1wLmJyPi4KKworY2FzZSAkMSBpbgorICAnJykKKyAgICAgZWNobyAiJDA6IE5vIGNvbW1hbmQuICBUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgMT4mMgorICAgICBleGl0IDE7CisgICAgIDs7CisgIC1oIHwgLS1oKikKKyAgICBjYXQgPDxcRU9GCitVc2FnZTogZGVwY29tcCBbLS1oZWxwXSBbLS12ZXJzaW9uXSBQUk9HUkFNIFtBUkdTXQorCitSdW4gUFJPR1JBTVMgQVJHUyB0byBjb21waWxlIGEgZmlsZSwgZ2VuZXJhdGluZyBkZXBlbmRlbmNpZXMKK2FzIHNpZGUtZWZmZWN0cy4KKworRW52aXJvbm1lbnQgdmFyaWFibGVzOgorICBkZXBtb2RlICAgICBEZXBlbmRlbmN5IHRyYWNraW5nIG1vZGUuCisgIHNvdXJjZSAgICAgIFNvdXJjZSBmaWxlIHJlYWQgYnkgYFBST0dSQU1TIEFSR1MnLgorICBvYmplY3QgICAgICBPYmplY3QgZmlsZSBvdXRwdXQgYnkgYFBST0dSQU1TIEFSR1MnLgorICBERVBESVIgICAgICBkaXJlY3Rvcnkgd2hlcmUgdG8gc3RvcmUgZGVwZW5kZW5jaWVzLgorICBkZXBmaWxlICAgICBEZXBlbmRlbmN5IGZpbGUgdG8gb3V0cHV0LgorICB0bXBkZXBmaWxlICBUZW1wb3JhcnkgZmlsZSB0byB1c2Ugd2hlbiBvdXRwdXRpbmcgZGVwZW5kZW5jaWVzLgorICBsaWJ0b29sICAgICBXaGV0aGVyIGxpYnRvb2wgaXMgdXNlZCAoeWVzL25vKS4KKworUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPi4KK0VPRgorICAgIGV4aXQgJD8KKyAgICA7OworICAtdiB8IC0tdiopCisgICAgZWNobyAiZGVwY29tcCAkc2NyaXB0dmVyc2lvbiIKKyAgICBleGl0ICQ/CisgICAgOzsKK2VzYWMKKworaWYgdGVzdCAteiAiJGRlcG1vZGUiIHx8IHRlc3QgLXogIiRzb3VyY2UiIHx8IHRlc3QgLXogIiRvYmplY3QiOyB0aGVuCisgIGVjaG8gImRlcGNvbXA6IFZhcmlhYmxlcyBzb3VyY2UsIG9iamVjdCBhbmQgZGVwbW9kZSBtdXN0IGJlIHNldCIgMT4mMgorICBleGl0IDEKK2ZpCisKKyMgRGVwZW5kZW5jaWVzIGZvciBzdWIvYmFyLm8gb3Igc3ViL2Jhci5vYmogZ28gaW50byBzdWIvLmRlcHMvYmFyLlBvLgorZGVwZmlsZT0ke2RlcGZpbGUtYGVjaG8gIiRvYmplY3QiIHwKKyAgc2VkICdzfFteXFwvXSokfCcke0RFUERJUi0uZGVwc30nLyZ8O3N8XC5cKFteLl0qXCkkfC5QXDF8O3N8UG9iaiR8UG98J2B9Cit0bXBkZXBmaWxlPSR7dG1wZGVwZmlsZS1gZWNobyAiJGRlcGZpbGUiIHwgc2VkICdzL1wuXChbXi5dKlwpJC8uVFwxLydgfQorCitybSAtZiAiJHRtcGRlcGZpbGUiCisKKyMgU29tZSBtb2RlcyB3b3JrIGp1c3QgbGlrZSBvdGhlciBtb2RlcywgYnV0IHVzZSBkaWZmZXJlbnQgZmxhZ3MuICBXZQorIyBwYXJhbWV0ZXJpemUgaGVyZSwgYnV0IHN0aWxsIGxpc3QgdGhlIG1vZGVzIGluIHRoZSBiaWcgY2FzZSBiZWxvdywKKyMgdG8gbWFrZSBkZXBlbmQubTQgZWFzaWVyIHRvIHdyaXRlLiAgTm90ZSB0aGF0IHdlICpjYW5ub3QqIHVzZSBhIGNhc2UKKyMgaGVyZSwgYmVjYXVzZSB0aGlzIGZpbGUgY2FuIG9ubHkgY29udGFpbiBvbmUgY2FzZSBzdGF0ZW1lbnQuCitpZiB0ZXN0ICIkZGVwbW9kZSIgPSBocDsgdGhlbgorICAjIEhQIGNvbXBpbGVyIHVzZXMgLU0gYW5kIG5vIGV4dHJhIGFyZy4KKyAgZ2NjZmxhZz0tTQorICBkZXBtb2RlPWdjYworZmkKKworaWYgdGVzdCAiJGRlcG1vZGUiID0gZGFzaFhtc3Rkb3V0OyB0aGVuCisgICAjIFRoaXMgaXMganVzdCBsaWtlIGRhc2htc3Rkb3V0IHdpdGggYSBkaWZmZXJlbnQgYXJndW1lbnQuCisgICBkYXNobWZsYWc9LXhNCisgICBkZXBtb2RlPWRhc2htc3Rkb3V0CitmaQorCitjYXNlICIkZGVwbW9kZSIgaW4KK2djYzMpCisjIyBnY2MgMyBpbXBsZW1lbnRzIGRlcGVuZGVuY3kgdHJhY2tpbmcgdGhhdCBkb2VzIGV4YWN0bHkgd2hhdAorIyMgd2Ugd2FudC4gIFlheSEgIE5vdGU6IGZvciBzb21lIHJlYXNvbiBsaWJ0b29sIDEuNCBkb2Vzbid0IGxpa2UKKyMjIGl0IGlmIC1NRCAtTVAgY29tZXMgYWZ0ZXIgdGhlIC1NRiBzdHVmZi4gIEhtbS4KKyMjIFVuZm9ydHVuYXRlbHksIEZyZWVCU0QgYzg5IGFjY2VwdGFuY2Ugb2YgZmxhZ3MgZGVwZW5kcyB1cG9uCisjIyB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50IG9yZGVyOyBzbyBhZGQgdGhlIGZsYWdzIHdoZXJlIHRoZXkKKyMjIGFwcGVhciBpbiBkZXBlbmQyLmFtLiAgTm90ZSB0aGF0IHRoZSBzbG93ZG93biBpbmN1cnJlZCBoZXJlCisjIyBhZmZlY3RzIG9ubHkgY29uZmlndXJlOiBpbiBtYWtlZmlsZXMsICVGQVNUREVQJSBzaG9ydGN1dHMgdGhpcy4KKyAgZm9yIGFyZworICBkbworICAgIGNhc2UgJGFyZyBpbgorICAgIC1jKSBzZXQgZm5vcmQgIiRAIiAtTVQgIiRvYmplY3QiIC1NRCAtTVAgLU1GICIkdG1wZGVwZmlsZSIgIiRhcmciIDs7CisgICAgKikgIHNldCBmbm9yZCAiJEAiICIkYXJnIiA7OworICAgIGVzYWMKKyAgICBzaGlmdCAjIGZub3JkCisgICAgc2hpZnQgIyAkYXJnCisgIGRvbmUKKyAgIiRAIgorICBzdGF0PSQ/CisgIGlmIHRlc3QgJHN0YXQgLWVxIDA7IHRoZW4gOgorICBlbHNlCisgICAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICAgIGV4aXQgJHN0YXQKKyAgZmkKKyAgbXYgIiR0bXBkZXBmaWxlIiAiJGRlcGZpbGUiCisgIDs7CisKK2djYykKKyMjIFRoZXJlIGFyZSB2YXJpb3VzIHdheXMgdG8gZ2V0IGRlcGVuZGVuY3kgb3V0cHV0IGZyb20gZ2NjLiAgSGVyZSdzCisjIyB3aHkgd2UgcGljayB0aGlzIHJhdGhlciBvYnNjdXJlIG1ldGhvZDoKKyMjIC0gRG9uJ3Qgd2FudCB0byB1c2UgLU1EIGJlY2F1c2Ugd2UnZCBsaWtlIHRoZSBkZXBlbmRlbmNpZXMgdG8gZW5kCisjIyAgIHVwIGluIGEgc3ViZGlyLiAgSGF2aW5nIHRvIHJlbmFtZSBieSBoYW5kIGlzIHVnbHkuCisjIyAgIChXZSBtaWdodCBlbmQgdXAgZG9pbmcgdGhpcyBhbnl3YXkgdG8gc3VwcG9ydCBvdGhlciBjb21waWxlcnMuKQorIyMgLSBUaGUgREVQRU5ERU5DSUVTX09VVFBVVCBlbnZpcm9ubWVudCB2YXJpYWJsZSBtYWtlcyBnY2MgYWN0IGxpa2UKKyMjICAgLU1NLCBub3QgLU0gKGRlc3BpdGUgd2hhdCB0aGUgZG9jcyBzYXkpLgorIyMgLSBVc2luZyAtTSBkaXJlY3RseSBtZWFucyBydW5uaW5nIHRoZSBjb21waWxlciB0d2ljZSAoZXZlbiB3b3JzZQorIyMgICB0aGFuIHJlbmFtaW5nKS4KKyAgaWYgdGVzdCAteiAiJGdjY2ZsYWciOyB0aGVuCisgICAgZ2NjZmxhZz0tTUQsCisgIGZpCisgICIkQCIgLVdwLCIkZ2NjZmxhZyR0bXBkZXBmaWxlIgorICBzdGF0PSQ/CisgIGlmIHRlc3QgJHN0YXQgLWVxIDA7IHRoZW4gOgorICBlbHNlCisgICAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICAgIGV4aXQgJHN0YXQKKyAgZmkKKyAgcm0gLWYgIiRkZXBmaWxlIgorICBlY2hvICIkb2JqZWN0IDogXFwiID4gIiRkZXBmaWxlIgorICBhbHBoYT1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6CisjIyBUaGUgc2Vjb25kIC1lIGV4cHJlc3Npb24gaGFuZGxlcyBET1Mtc3R5bGUgZmlsZSBuYW1lcyB3aXRoIGRyaXZlIGxldHRlcnMuCisgIHNlZCAtZSAncy9eW146XSo6IC8gLycgXAorICAgICAgLWUgJ3MvXlsnJGFscGhhJ106XC9bXjpdKjogLyAvJyA8ICIkdG1wZGVwZmlsZSIgPj4gIiRkZXBmaWxlIgorIyMgVGhpcyBuZXh0IHBpZWNlIG9mIG1hZ2ljIGF2b2lkcyB0aGUgYGRlbGV0ZWQgaGVhZGVyIGZpbGUnIHByb2JsZW0uCisjIyBUaGUgcHJvYmxlbSBpcyB0aGF0IHdoZW4gYSBoZWFkZXIgZmlsZSB3aGljaCBhcHBlYXJzIGluIGEgLlAgZmlsZQorIyMgaXMgZGVsZXRlZCwgdGhlIGRlcGVuZGVuY3kgY2F1c2VzIG1ha2UgdG8gZGllIChiZWNhdXNlIHRoZXJlIGlzCisjIyB0eXBpY2FsbHkgbm8gd2F5IHRvIHJlYnVpbGQgdGhlIGhlYWRlcikuICBXZSBhdm9pZCB0aGlzIGJ5IGFkZGluZworIyMgZHVtbXkgZGVwZW5kZW5jaWVzIGZvciBlYWNoIGhlYWRlciBmaWxlLiAgVG9vIGJhZCBnY2MgZG9lc24ndCBkbworIyMgdGhpcyBmb3IgdXMgZGlyZWN0bHkuCisgIHRyICcgJyAnCisnIDwgIiR0bXBkZXBmaWxlIiB8CisjIyBTb21lIHZlcnNpb25zIG9mIGdjYyBwdXQgYSBzcGFjZSBiZWZvcmUgdGhlIGA6Jy4gIE9uIHRoZSB0aGVvcnkKKyMjIHRoYXQgdGhlIHNwYWNlIG1lYW5zIHNvbWV0aGluZywgd2UgYWRkIGEgc3BhY2UgdG8gdGhlIG91dHB1dCBhcworIyMgd2VsbC4KKyMjIFNvbWUgdmVyc2lvbnMgb2YgdGhlIEhQVVggMTAuMjAgc2VkIGNhbid0IHByb2Nlc3MgdGhpcyBpbnZvY2F0aW9uCisjIyBjb3JyZWN0bHkuICBCcmVha2luZyBpdCBpbnRvIHR3byBzZWQgaW52b2NhdGlvbnMgaXMgYSB3b3JrYXJvdW5kLgorICAgIHNlZCAtZSAncy9eXFwkLy8nIC1lICcvXiQvZCcgLWUgJy86JC9kJyB8IHNlZCAtZSAncy8kLyA6LycgPj4gIiRkZXBmaWxlIgorICBybSAtZiAiJHRtcGRlcGZpbGUiCisgIDs7CisKK2hwKQorICAjIFRoaXMgY2FzZSBleGlzdHMgb25seSB0byBsZXQgZGVwZW5kLm00IGRvIGl0cyB3b3JrLiAgSXQgd29ya3MgYnkKKyAgIyBsb29raW5nIGF0IHRoZSB0ZXh0IG9mIHRoaXMgc2NyaXB0LiAgVGhpcyBjYXNlIHdpbGwgbmV2ZXIgYmUgcnVuLAorICAjIHNpbmNlIGl0IGlzIGNoZWNrZWQgZm9yIGFib3ZlLgorICBleGl0IDEKKyAgOzsKKworc2dpKQorICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KKyAgICAiJEAiICItV3AsLU1EdXBkYXRlLCR0bXBkZXBmaWxlIgorICBlbHNlCisgICAgIiRAIiAtTUR1cGRhdGUgIiR0bXBkZXBmaWxlIgorICBmaQorICBzdGF0PSQ/CisgIGlmIHRlc3QgJHN0YXQgLWVxIDA7IHRoZW4gOgorICBlbHNlCisgICAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICAgIGV4aXQgJHN0YXQKKyAgZmkKKyAgcm0gLWYgIiRkZXBmaWxlIgorCisgIGlmIHRlc3QgLWYgIiR0bXBkZXBmaWxlIjsgdGhlbiAgIyB5ZXMsIHRoZSBzb3VyY2VmaWxlIGRlcGVuZCBvbiBvdGhlciBmaWxlcworICAgIGVjaG8gIiRvYmplY3QgOiBcXCIgPiAiJGRlcGZpbGUiCisKKyAgICAjIENsaXAgb2ZmIHRoZSBpbml0aWFsIGVsZW1lbnQgKHRoZSBkZXBlbmRlbnQpLiAgRG9uJ3QgdHJ5IHRvIGJlCisgICAgIyBjbGV2ZXIgYW5kIHJlcGxhY2UgdGhpcyB3aXRoIHNlZCBjb2RlLCBhcyBJUklYIHNlZCB3b24ndCBoYW5kbGUKKyAgICAjIGxpbmVzIHdpdGggbW9yZSB0aGFuIGEgZml4ZWQgbnVtYmVyIG9mIGNoYXJhY3RlcnMgKDQwOTYgaW4KKyAgICAjIElSSVggNi4yIHNlZCwgODE5MiBpbiBJUklYIDYuNSkuICBXZSBhbHNvIHJlbW92ZSBjb21tZW50IGxpbmVzOworICAgICMgdGhlIElSSVggY2MgYWRkcyBjb21tZW50cyBsaWtlIGAjOmZlYycgdG8gdGhlIGVuZCBvZiB0aGUKKyAgICAjIGRlcGVuZGVuY3kgbGluZS4KKyAgICB0ciAnICcgJworJyA8ICIkdG1wZGVwZmlsZSIgXAorICAgIHwgc2VkIC1lICdzL14uKlwubzovLycgLWUgJ3MvIy4qJC8vJyAtZSAnL14kLyBkJyB8IFwKKyAgICB0ciAnCisnICcgJyA+PiAkZGVwZmlsZQorICAgIGVjaG8gPj4gJGRlcGZpbGUKKworICAgICMgVGhlIHNlY29uZCBwYXNzIGdlbmVyYXRlcyBhIGR1bW15IGVudHJ5IGZvciBlYWNoIGhlYWRlciBmaWxlLgorICAgIHRyICcgJyAnCisnIDwgIiR0bXBkZXBmaWxlIiBcCisgICB8IHNlZCAtZSAncy9eLipcLm86Ly8nIC1lICdzLyMuKiQvLycgLWUgJy9eJC8gZCcgLWUgJ3MvJC86LycgXAorICAgPj4gJGRlcGZpbGUKKyAgZWxzZQorICAgICMgVGhlIHNvdXJjZWZpbGUgZG9lcyBub3QgY29udGFpbiBhbnkgZGVwZW5kZW5jaWVzLCBzbyBqdXN0CisgICAgIyBzdG9yZSBhIGR1bW15IGNvbW1lbnQgbGluZSwgdG8gYXZvaWQgZXJyb3JzIHdpdGggdGhlIE1ha2VmaWxlCisgICAgIyAiaW5jbHVkZSBiYXNlbmFtZS5QbG8iIHNjaGVtZS4KKyAgICBlY2hvICIjZHVtbXkiID4gIiRkZXBmaWxlIgorICBmaQorICBybSAtZiAiJHRtcGRlcGZpbGUiCisgIDs7CisKK2FpeCkKKyAgIyBUaGUgQyBmb3IgQUlYIENvbXBpbGVyIHVzZXMgLU0gYW5kIG91dHB1dHMgdGhlIGRlcGVuZGVuY2llcworICAjIGluIGEgLnUgZmlsZS4gIEluIG9sZGVyIHZlcnNpb25zLCB0aGlzIGZpbGUgYWx3YXlzIGxpdmVzIGluIHRoZQorICAjIGN1cnJlbnQgZGlyZWN0b3J5LiAgQWxzbywgdGhlIEFJWCBjb21waWxlciBwdXRzIGAkb2JqZWN0OicgYXQgdGhlCisgICMgc3RhcnQgb2YgZWFjaCBsaW5lOyAkb2JqZWN0IGRvZXNuJ3QgaGF2ZSBkaXJlY3RvcnkgaW5mb3JtYXRpb24uCisgICMgVmVyc2lvbiA2IHVzZXMgdGhlIGRpcmVjdG9yeSBpbiBib3RoIGNhc2VzLgorICBkaXI9YGVjaG8gIiRvYmplY3QiIHwgc2VkIC1lICdzfC9bXi9dKiR8L3wnYAorICB0ZXN0ICJ4JGRpciIgPSAieCRvYmplY3QiICYmIGRpcj0KKyAgYmFzZT1gZWNobyAiJG9iamVjdCIgfCBzZWQgLWUgJ3N8Xi4qL3x8JyAtZSAncy9cLm8kLy8nIC1lICdzL1wubG8kLy8nYAorICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KKyAgICB0bXBkZXBmaWxlMT0kZGlyJGJhc2UudQorICAgIHRtcGRlcGZpbGUyPSRiYXNlLnUKKyAgICB0bXBkZXBmaWxlMz0kZGlyLmxpYnMvJGJhc2UudQorICAgICIkQCIgLVdjLC1NCisgIGVsc2UKKyAgICB0bXBkZXBmaWxlMT0kZGlyJGJhc2UudQorICAgIHRtcGRlcGZpbGUyPSRkaXIkYmFzZS51CisgICAgdG1wZGVwZmlsZTM9JGRpciRiYXNlLnUKKyAgICAiJEAiIC1NCisgIGZpCisgIHN0YXQ9JD8KKworICBpZiB0ZXN0ICRzdGF0IC1lcSAwOyB0aGVuIDoKKyAgZWxzZQorICAgIHJtIC1mICIkdG1wZGVwZmlsZTEiICIkdG1wZGVwZmlsZTIiICIkdG1wZGVwZmlsZTMiCisgICAgZXhpdCAkc3RhdAorICBmaQorCisgIGZvciB0bXBkZXBmaWxlIGluICIkdG1wZGVwZmlsZTEiICIkdG1wZGVwZmlsZTIiICIkdG1wZGVwZmlsZTMiCisgIGRvCisgICAgdGVzdCAtZiAiJHRtcGRlcGZpbGUiICYmIGJyZWFrCisgIGRvbmUKKyAgaWYgdGVzdCAtZiAiJHRtcGRlcGZpbGUiOyB0aGVuCisgICAgIyBFYWNoIGxpbmUgaXMgb2YgdGhlIGZvcm0gYGZvby5vOiBkZXBlbmRlbnQuaCcuCisgICAgIyBEbyB0d28gcGFzc2VzLCBvbmUgdG8ganVzdCBjaGFuZ2UgdGhlc2UgdG8KKyAgICAjIGAkb2JqZWN0OiBkZXBlbmRlbnQuaCcgYW5kIG9uZSB0byBzaW1wbHkgYGRlcGVuZGVudC5oOicuCisgICAgc2VkIC1lICJzLF4uKlwuW2Etel0qOiwkb2JqZWN0OiwiIDwgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKKyAgICAjIFRoYXQncyBhIHRhYiBhbmQgYSBzcGFjZSBpbiB0aGUgW10uCisgICAgc2VkIC1lICdzLF4uKlwuW2Etel0qOlsJIF0qLCwnIC1lICdzLCQsOiwnIDwgIiR0bXBkZXBmaWxlIiA+PiAiJGRlcGZpbGUiCisgIGVsc2UKKyAgICAjIFRoZSBzb3VyY2VmaWxlIGRvZXMgbm90IGNvbnRhaW4gYW55IGRlcGVuZGVuY2llcywgc28ganVzdAorICAgICMgc3RvcmUgYSBkdW1teSBjb21tZW50IGxpbmUsIHRvIGF2b2lkIGVycm9ycyB3aXRoIHRoZSBNYWtlZmlsZQorICAgICMgImluY2x1ZGUgYmFzZW5hbWUuUGxvIiBzY2hlbWUuCisgICAgZWNobyAiI2R1bW15IiA+ICIkZGVwZmlsZSIKKyAgZmkKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICA7OworCitpY2MpCisgICMgSW50ZWwncyBDIGNvbXBpbGVyIHVuZGVyc3RhbmRzIGAtTUQgLU1GIGZpbGUnLiAgSG93ZXZlciBvbgorICAjICAgIGljYyAtTUQgLU1GIGZvby5kIC1jIC1vIHN1Yi9mb28ubyBzdWIvZm9vLmMKKyAgIyBJQ0MgNy4wIHdpbGwgZmlsbCBmb28uZCB3aXRoIHNvbWV0aGluZyBsaWtlCisgICMgICAgZm9vLm86IHN1Yi9mb28uYworICAjICAgIGZvby5vOiBzdWIvZm9vLmgKKyAgIyB3aGljaCBpcyB3cm9uZy4gIFdlIHdhbnQ6CisgICMgICAgc3ViL2Zvby5vOiBzdWIvZm9vLmMKKyAgIyAgICBzdWIvZm9vLm86IHN1Yi9mb28uaAorICAjICAgIHN1Yi9mb28uYzoKKyAgIyAgICBzdWIvZm9vLmg6CisgICMgSUNDIDcuMSB3aWxsIG91dHB1dAorICAjICAgIGZvby5vOiBzdWIvZm9vLmMgc3ViL2Zvby5oCisgICMgYW5kIHdpbGwgd3JhcCBsb25nIGxpbmVzIHVzaW5nIFwgOgorICAjICAgIGZvby5vOiBzdWIvZm9vLmMgLi4uIFwKKyAgIyAgICAgc3ViL2Zvby5oIC4uLiBcCisgICMgICAgIC4uLgorCisgICIkQCIgLU1EIC1NRiAiJHRtcGRlcGZpbGUiCisgIHN0YXQ9JD8KKyAgaWYgdGVzdCAkc3RhdCAtZXEgMDsgdGhlbiA6CisgIGVsc2UKKyAgICBybSAtZiAiJHRtcGRlcGZpbGUiCisgICAgZXhpdCAkc3RhdAorICBmaQorICBybSAtZiAiJGRlcGZpbGUiCisgICMgRWFjaCBsaW5lIGlzIG9mIHRoZSBmb3JtIGBmb28ubzogZGVwZW5kZW50LmgnLAorICAjIG9yIGBmb28ubzogZGVwMS5oIGRlcDIuaCBcJywgb3IgYCBkZXAzLmggZGVwNC5oIFwnLgorICAjIERvIHR3byBwYXNzZXMsIG9uZSB0byBqdXN0IGNoYW5nZSB0aGVzZSB0bworICAjIGAkb2JqZWN0OiBkZXBlbmRlbnQuaCcgYW5kIG9uZSB0byBzaW1wbHkgYGRlcGVuZGVudC5oOicuCisgIHNlZCAicyxeW146XSo6LCRvYmplY3QgOiwiIDwgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKKyAgIyBTb21lIHZlcnNpb25zIG9mIHRoZSBIUFVYIDEwLjIwIHNlZCBjYW4ndCBwcm9jZXNzIHRoaXMgaW52b2NhdGlvbgorICAjIGNvcnJlY3RseS4gIEJyZWFraW5nIGl0IGludG8gdHdvIHNlZCBpbnZvY2F0aW9ucyBpcyBhIHdvcmthcm91bmQuCisgIHNlZCAncyxeW146XSo6IFwoLipcKSQsXDEsO3MvXlxcJC8vOy9eJC9kOy86JC9kJyA8ICIkdG1wZGVwZmlsZSIgfAorICAgIHNlZCAtZSAncy8kLyA6LycgPj4gIiRkZXBmaWxlIgorICBybSAtZiAiJHRtcGRlcGZpbGUiCisgIDs7CisKK2hwMikKKyAgIyBUaGUgImhwIiBzdGFuemEgYWJvdmUgZG9lcyBub3Qgd29yayB3aXRoIGFDQyAoQysrKSBhbmQgSFAncyBpYTY0CisgICMgY29tcGlsZXJzLCB3aGljaCBoYXZlIGludGVncmF0ZWQgcHJlcHJvY2Vzc29ycy4gIFRoZSBjb3JyZWN0IG9wdGlvbgorICAjIHRvIHVzZSB3aXRoIHRoZXNlIGlzICtNYWtlZDsgaXQgd3JpdGVzIGRlcGVuZGVuY2llcyB0byBhIGZpbGUgbmFtZWQKKyAgIyAnZm9vLmQnLCB3aGljaCBsYW5kcyBuZXh0IHRvIHRoZSBvYmplY3QgZmlsZSwgd2hlcmV2ZXIgdGhhdAorICAjIGhhcHBlbnMgdG8gYmUuCisgICMgTXVjaCBvZiB0aGlzIGlzIHNpbWlsYXIgdG8gdGhlIHRydTY0IGNhc2U7IHNlZSBjb21tZW50cyB0aGVyZS4KKyAgZGlyPWBlY2hvICIkb2JqZWN0IiB8IHNlZCAtZSAnc3wvW14vXSokfC98J2AKKyAgdGVzdCAieCRkaXIiID0gIngkb2JqZWN0IiAmJiBkaXI9CisgIGJhc2U9YGVjaG8gIiRvYmplY3QiIHwgc2VkIC1lICdzfF4uKi98fCcgLWUgJ3MvXC5vJC8vJyAtZSAncy9cLmxvJC8vJ2AKKyAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgdG1wZGVwZmlsZTE9JGRpciRiYXNlLmQKKyAgICB0bXBkZXBmaWxlMj0kZGlyLmxpYnMvJGJhc2UuZAorICAgICIkQCIgLVdjLCtNYWtlZAorICBlbHNlCisgICAgdG1wZGVwZmlsZTE9JGRpciRiYXNlLmQKKyAgICB0bXBkZXBmaWxlMj0kZGlyJGJhc2UuZAorICAgICIkQCIgK01ha2VkCisgIGZpCisgIHN0YXQ9JD8KKyAgaWYgdGVzdCAkc3RhdCAtZXEgMDsgdGhlbiA6CisgIGVsc2UKKyAgICAgcm0gLWYgIiR0bXBkZXBmaWxlMSIgIiR0bXBkZXBmaWxlMiIKKyAgICAgZXhpdCAkc3RhdAorICBmaQorCisgIGZvciB0bXBkZXBmaWxlIGluICIkdG1wZGVwZmlsZTEiICIkdG1wZGVwZmlsZTIiCisgIGRvCisgICAgdGVzdCAtZiAiJHRtcGRlcGZpbGUiICYmIGJyZWFrCisgIGRvbmUKKyAgaWYgdGVzdCAtZiAiJHRtcGRlcGZpbGUiOyB0aGVuCisgICAgc2VkIC1lICJzLF4uKlwuW2Etel0qOiwkb2JqZWN0OiwiICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCisgICAgIyBBZGQgYGRlcGVuZGVudC5oOicgbGluZXMuCisgICAgc2VkIC1uZSAnMiwkezsgcy9eICovLzsgcy8gXFwqJC8vOyBzLyQvOi87IHA7fScgIiR0bXBkZXBmaWxlIiA+PiAiJGRlcGZpbGUiCisgIGVsc2UKKyAgICBlY2hvICIjZHVtbXkiID4gIiRkZXBmaWxlIgorICBmaQorICBybSAtZiAiJHRtcGRlcGZpbGUiICIkdG1wZGVwZmlsZTIiCisgIDs7CisKK3RydTY0KQorICAgIyBUaGUgVHJ1NjQgY29tcGlsZXIgdXNlcyAtTUQgdG8gZ2VuZXJhdGUgZGVwZW5kZW5jaWVzIGFzIGEgc2lkZQorICAgIyBlZmZlY3QuICBgY2MgLU1EIC1vIGZvby5vIC4uLicgcHV0cyB0aGUgZGVwZW5kZW5jaWVzIGludG8gYGZvby5vLmQnLgorICAgIyBBdCBsZWFzdCBvbiBBbHBoYS9SZWRoYXQgNi4xLCBDb21wYXEgQ0NDIFY2LjItNTA0IHNlZW1zIHRvIHB1dAorICAgIyBkZXBlbmRlbmNpZXMgaW4gYGZvby5kJyBpbnN0ZWFkLCBzbyB3ZSBjaGVjayBmb3IgdGhhdCB0b28uCisgICAjIFN1YmRpcmVjdG9yaWVzIGFyZSByZXNwZWN0ZWQuCisgICBkaXI9YGVjaG8gIiRvYmplY3QiIHwgc2VkIC1lICdzfC9bXi9dKiR8L3wnYAorICAgdGVzdCAieCRkaXIiID0gIngkb2JqZWN0IiAmJiBkaXI9CisgICBiYXNlPWBlY2hvICIkb2JqZWN0IiB8IHNlZCAtZSAnc3xeLiovfHwnIC1lICdzL1wubyQvLycgLWUgJ3MvXC5sbyQvLydgCisKKyAgIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgorICAgICAgIyBXaXRoIFRydTY0IGNjLCBzaGFyZWQgb2JqZWN0cyBjYW4gYWxzbyBiZSB1c2VkIHRvIG1ha2UgYQorICAgICAgIyBzdGF0aWMgbGlicmFyeS4gIFRoaXMgbWVjaGFuaXNtIGlzIHVzZWQgaW4gbGlidG9vbCAxLjQgc2VyaWVzIHRvCisgICAgICAjIGhhbmRsZSBib3RoIHNoYXJlZCBhbmQgc3RhdGljIGxpYnJhcmllcyBpbiBhIHNpbmdsZSBjb21waWxhdGlvbi4KKyAgICAgICMgV2l0aCBsaWJ0b29sIDEuNCwgZGVwZW5kZW5jaWVzIHdlcmUgb3V0cHV0IGluICRkaXIubGlicy8kYmFzZS5sby5kLgorICAgICAgIworICAgICAgIyBXaXRoIGxpYnRvb2wgMS41IHRoaXMgZXhjZXB0aW9uIHdhcyByZW1vdmVkLCBhbmQgbGlidG9vbCBub3cKKyAgICAgICMgZ2VuZXJhdGVzIDIgc2VwYXJhdGUgb2JqZWN0cyBmb3IgdGhlIDIgbGlicmFyaWVzLiAgVGhlc2UgdHdvCisgICAgICAjIGNvbXBpbGF0aW9ucyBvdXRwdXQgZGVwZW5kZW5jaWVzIGluICRkaXIubGlicy8kYmFzZS5vLmQgYW5kCisgICAgICAjIGluICRkaXIkYmFzZS5vLmQuICBXZSBoYXZlIHRvIGNoZWNrIGZvciBib3RoIGZpbGVzLCBiZWNhdXNlCisgICAgICAjIG9uZSBvZiB0aGUgdHdvIGNvbXBpbGF0aW9ucyBjYW4gYmUgZGlzYWJsZWQuICBXZSBzaG91bGQgcHJlZmVyCisgICAgICAjICRkaXIkYmFzZS5vLmQgb3ZlciAkZGlyLmxpYnMvJGJhc2Uuby5kIGJlY2F1c2UgdGhlIGxhdHRlciBpcworICAgICAgIyBhdXRvbWF0aWNhbGx5IGNsZWFuZWQgd2hlbiAubGlicy8gaXMgZGVsZXRlZCwgd2hpbGUgaWdub3JpbmcKKyAgICAgICMgdGhlIGZvcm1lciB3b3VsZCBjYXVzZSBhIGRpc3RjbGVhbmNoZWNrIHBhbmljLgorICAgICAgdG1wZGVwZmlsZTE9JGRpci5saWJzLyRiYXNlLmxvLmQgICAjIGxpYnRvb2wgMS40CisgICAgICB0bXBkZXBmaWxlMj0kZGlyJGJhc2Uuby5kICAgICAgICAgICMgbGlidG9vbCAxLjUKKyAgICAgIHRtcGRlcGZpbGUzPSRkaXIubGlicy8kYmFzZS5vLmQgICAgIyBsaWJ0b29sIDEuNQorICAgICAgdG1wZGVwZmlsZTQ9JGRpci5saWJzLyRiYXNlLmQgICAgICAjIENvbXBhcSBDQ0MgVjYuMi01MDQKKyAgICAgICIkQCIgLVdjLC1NRAorICAgZWxzZQorICAgICAgdG1wZGVwZmlsZTE9JGRpciRiYXNlLm8uZAorICAgICAgdG1wZGVwZmlsZTI9JGRpciRiYXNlLmQKKyAgICAgIHRtcGRlcGZpbGUzPSRkaXIkYmFzZS5kCisgICAgICB0bXBkZXBmaWxlND0kZGlyJGJhc2UuZAorICAgICAgIiRAIiAtTUQKKyAgIGZpCisKKyAgIHN0YXQ9JD8KKyAgIGlmIHRlc3QgJHN0YXQgLWVxIDA7IHRoZW4gOgorICAgZWxzZQorICAgICAgcm0gLWYgIiR0bXBkZXBmaWxlMSIgIiR0bXBkZXBmaWxlMiIgIiR0bXBkZXBmaWxlMyIgIiR0bXBkZXBmaWxlNCIKKyAgICAgIGV4aXQgJHN0YXQKKyAgIGZpCisKKyAgIGZvciB0bXBkZXBmaWxlIGluICIkdG1wZGVwZmlsZTEiICIkdG1wZGVwZmlsZTIiICIkdG1wZGVwZmlsZTMiICIkdG1wZGVwZmlsZTQiCisgICBkbworICAgICB0ZXN0IC1mICIkdG1wZGVwZmlsZSIgJiYgYnJlYWsKKyAgIGRvbmUKKyAgIGlmIHRlc3QgLWYgIiR0bXBkZXBmaWxlIjsgdGhlbgorICAgICAgc2VkIC1lICJzLF4uKlwuW2Etel0qOiwkb2JqZWN0OiwiIDwgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKKyAgICAgICMgVGhhdCdzIGEgdGFiIGFuZCBhIHNwYWNlIGluIHRoZSBbXS4KKyAgICAgIHNlZCAtZSAncyxeLipcLlthLXpdKjpbCSBdKiwsJyAtZSAncywkLDosJyA8ICIkdG1wZGVwZmlsZSIgPj4gIiRkZXBmaWxlIgorICAgZWxzZQorICAgICAgZWNobyAiI2R1bW15IiA+ICIkZGVwZmlsZSIKKyAgIGZpCisgICBybSAtZiAiJHRtcGRlcGZpbGUiCisgICA7OworCisjbm9zaWRlZWZmZWN0KQorICAjIFRoaXMgY29tbWVudCBhYm92ZSBpcyB1c2VkIGJ5IGF1dG9tYWtlIHRvIHRlbGwgc2lkZS1lZmZlY3QKKyAgIyBkZXBlbmRlbmN5IHRyYWNraW5nIG1lY2hhbmlzbXMgZnJvbSBzbG93ZXIgb25lcy4KKworZGFzaG1zdGRvdXQpCisgICMgSW1wb3J0YW50IG5vdGU6IGluIG9yZGVyIHRvIHN1cHBvcnQgdGhpcyBtb2RlLCBhIGNvbXBpbGVyICptdXN0KgorICAjIGFsd2F5cyB3cml0ZSB0aGUgcHJlcHJvY2Vzc2VkIGZpbGUgdG8gc3Rkb3V0LCByZWdhcmRsZXNzIG9mIC1vLgorICAiJEAiIHx8IGV4aXQgJD8KKworICAjIFJlbW92ZSB0aGUgY2FsbCB0byBMaWJ0b29sLgorICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KKyAgICB3aGlsZSB0ZXN0ICQxICE9ICctLW1vZGU9Y29tcGlsZSc7IGRvCisgICAgICBzaGlmdAorICAgIGRvbmUKKyAgICBzaGlmdAorICBmaQorCisgICMgUmVtb3ZlIGAtbyAkb2JqZWN0Jy4KKyAgSUZTPSIgIgorICBmb3IgYXJnCisgIGRvCisgICAgY2FzZSAkYXJnIGluCisgICAgLW8pCisgICAgICBzaGlmdAorICAgICAgOzsKKyAgICAkb2JqZWN0KQorICAgICAgc2hpZnQKKyAgICAgIDs7CisgICAgKikKKyAgICAgIHNldCBmbm9yZCAiJEAiICIkYXJnIgorICAgICAgc2hpZnQgIyBmbm9yZAorICAgICAgc2hpZnQgIyAkYXJnCisgICAgICA7OworICAgIGVzYWMKKyAgZG9uZQorCisgIHRlc3QgLXogIiRkYXNobWZsYWciICYmIGRhc2htZmxhZz0tTQorICAjIFJlcXVpcmUgYXQgbGVhc3QgdHdvIGNoYXJhY3RlcnMgYmVmb3JlIHNlYXJjaGluZyBmb3IgYDonCisgICMgaW4gdGhlIHRhcmdldCBuYW1lLiAgVGhpcyBpcyB0byBjb3BlIHdpdGggRE9TLXN0eWxlIGZpbGVuYW1lczoKKyAgIyBhIGRlcGVuZGVuY3kgc3VjaCBhcyBgYzovZm9vL2JhcicgY291bGQgYmUgc2VlbiBhcyB0YXJnZXQgYGMnIG90aGVyd2lzZS4KKyAgIiRAIiAkZGFzaG1mbGFnIHwKKyAgICBzZWQgJ3M6XlsgIF0qW146IF1bXjpdW146XSpcOlsgICAgXSo6JyIkb2JqZWN0IidcOiA6JyA+ICIkdG1wZGVwZmlsZSIKKyAgcm0gLWYgIiRkZXBmaWxlIgorICBjYXQgPCAiJHRtcGRlcGZpbGUiID4gIiRkZXBmaWxlIgorICB0ciAnICcgJworJyA8ICIkdG1wZGVwZmlsZSIgfCBcCisjIyBTb21lIHZlcnNpb25zIG9mIHRoZSBIUFVYIDEwLjIwIHNlZCBjYW4ndCBwcm9jZXNzIHRoaXMgaW52b2NhdGlvbgorIyMgY29ycmVjdGx5LiAgQnJlYWtpbmcgaXQgaW50byB0d28gc2VkIGludm9jYXRpb25zIGlzIGEgd29ya2Fyb3VuZC4KKyAgICBzZWQgLWUgJ3MvXlxcJC8vJyAtZSAnL14kL2QnIC1lICcvOiQvZCcgfCBzZWQgLWUgJ3MvJC8gOi8nID4+ICIkZGVwZmlsZSIKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICA7OworCitkYXNoWG1zdGRvdXQpCisgICMgVGhpcyBjYXNlIG9ubHkgZXhpc3RzIHRvIHNhdGlzZnkgZGVwZW5kLm00LiAgSXQgaXMgbmV2ZXIgYWN0dWFsbHkKKyAgIyBydW4sIGFzIHRoaXMgbW9kZSBpcyBzcGVjaWFsbHkgcmVjb2duaXplZCBpbiB0aGUgcHJlYW1ibGUuCisgIGV4aXQgMQorICA7OworCittYWtlZGVwZW5kKQorICAiJEAiIHx8IGV4aXQgJD8KKyAgIyBSZW1vdmUgYW55IExpYnRvb2wgY2FsbAorICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KKyAgICB3aGlsZSB0ZXN0ICQxICE9ICctLW1vZGU9Y29tcGlsZSc7IGRvCisgICAgICBzaGlmdAorICAgIGRvbmUKKyAgICBzaGlmdAorICBmaQorICAjIFggbWFrZWRlcGVuZAorICBzaGlmdAorICBjbGVhcmVkPW5vCisgIGZvciBhcmcgaW4gIiRAIjsgZG8KKyAgICBjYXNlICRjbGVhcmVkIGluCisgICAgbm8pCisgICAgICBzZXQgIiI7IHNoaWZ0CisgICAgICBjbGVhcmVkPXllcyA7OworICAgIGVzYWMKKyAgICBjYXNlICIkYXJnIiBpbgorICAgIC1EKnwtSSopCisgICAgICBzZXQgZm5vcmQgIiRAIiAiJGFyZyI7IHNoaWZ0IDs7CisgICAgIyBTdHJpcCBhbnkgb3B0aW9uIHRoYXQgbWFrZWRlcGVuZCBtYXkgbm90IHVuZGVyc3RhbmQuICBSZW1vdmUKKyAgICAjIHRoZSBvYmplY3QgdG9vLCBvdGhlcndpc2UgbWFrZWRlcGVuZCB3aWxsIHBhcnNlIGl0IGFzIGEgc291cmNlIGZpbGUuCisgICAgLSp8JG9iamVjdCkKKyAgICAgIDs7CisgICAgKikKKyAgICAgIHNldCBmbm9yZCAiJEAiICIkYXJnIjsgc2hpZnQgOzsKKyAgICBlc2FjCisgIGRvbmUKKyAgb2JqX3N1ZmZpeD0iYGVjaG8gJG9iamVjdCB8IHNlZCAncy9eLipcLi8uLydgIgorICB0b3VjaCAiJHRtcGRlcGZpbGUiCisgICR7TUFLRURFUEVORC1tYWtlZGVwZW5kfSAtbyIkb2JqX3N1ZmZpeCIgLWYiJHRtcGRlcGZpbGUiICIkQCIKKyAgcm0gLWYgIiRkZXBmaWxlIgorICBjYXQgPCAiJHRtcGRlcGZpbGUiID4gIiRkZXBmaWxlIgorICBzZWQgJzEsMmQnICIkdG1wZGVwZmlsZSIgfCB0ciAnICcgJworJyB8IFwKKyMjIFNvbWUgdmVyc2lvbnMgb2YgdGhlIEhQVVggMTAuMjAgc2VkIGNhbid0IHByb2Nlc3MgdGhpcyBpbnZvY2F0aW9uCisjIyBjb3JyZWN0bHkuICBCcmVha2luZyBpdCBpbnRvIHR3byBzZWQgaW52b2NhdGlvbnMgaXMgYSB3b3JrYXJvdW5kLgorICAgIHNlZCAtZSAncy9eXFwkLy8nIC1lICcvXiQvZCcgLWUgJy86JC9kJyB8IHNlZCAtZSAncy8kLyA6LycgPj4gIiRkZXBmaWxlIgorICBybSAtZiAiJHRtcGRlcGZpbGUiICIkdG1wZGVwZmlsZSIuYmFrCisgIDs7CisKK2NwcCkKKyAgIyBJbXBvcnRhbnQgbm90ZTogaW4gb3JkZXIgdG8gc3VwcG9ydCB0aGlzIG1vZGUsIGEgY29tcGlsZXIgKm11c3QqCisgICMgYWx3YXlzIHdyaXRlIHRoZSBwcmVwcm9jZXNzZWQgZmlsZSB0byBzdGRvdXQuCisgICIkQCIgfHwgZXhpdCAkPworCisgICMgUmVtb3ZlIHRoZSBjYWxsIHRvIExpYnRvb2wuCisgIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgorICAgIHdoaWxlIHRlc3QgJDEgIT0gJy0tbW9kZT1jb21waWxlJzsgZG8KKyAgICAgIHNoaWZ0CisgICAgZG9uZQorICAgIHNoaWZ0CisgIGZpCisKKyAgIyBSZW1vdmUgYC1vICRvYmplY3QnLgorICBJRlM9IiAiCisgIGZvciBhcmcKKyAgZG8KKyAgICBjYXNlICRhcmcgaW4KKyAgICAtbykKKyAgICAgIHNoaWZ0CisgICAgICA7OworICAgICRvYmplY3QpCisgICAgICBzaGlmdAorICAgICAgOzsKKyAgICAqKQorICAgICAgc2V0IGZub3JkICIkQCIgIiRhcmciCisgICAgICBzaGlmdCAjIGZub3JkCisgICAgICBzaGlmdCAjICRhcmcKKyAgICAgIDs7CisgICAgZXNhYworICBkb25lCisKKyAgIiRAIiAtRSB8CisgICAgc2VkIC1uIC1lICcvXiMgWzAtOV1bMC05XSogIlwoW14iXSpcKSIuKi8gczo6IFwxIFxcOnAnIFwKKyAgICAgICAtZSAnL14jbGluZSBbMC05XVswLTldKiAiXChbXiJdKlwpIi4qLyBzOjogXDEgXFw6cCcgfAorICAgIHNlZCAnJCBzOiBcXCQ6OicgPiAiJHRtcGRlcGZpbGUiCisgIHJtIC1mICIkZGVwZmlsZSIKKyAgZWNobyAiJG9iamVjdCA6IFxcIiA+ICIkZGVwZmlsZSIKKyAgY2F0IDwgIiR0bXBkZXBmaWxlIiA+PiAiJGRlcGZpbGUiCisgIHNlZCA8ICIkdG1wZGVwZmlsZSIgJy9eJC9kO3MvXiAvLztzLyBcXCQvLztzLyQvIDovJyA+PiAiJGRlcGZpbGUiCisgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgOzsKKworbXN2aXN1YWxjcHApCisgICMgSW1wb3J0YW50IG5vdGU6IGluIG9yZGVyIHRvIHN1cHBvcnQgdGhpcyBtb2RlLCBhIGNvbXBpbGVyICptdXN0KgorICAjIGFsd2F5cyB3cml0ZSB0aGUgcHJlcHJvY2Vzc2VkIGZpbGUgdG8gc3Rkb3V0LCByZWdhcmRsZXNzIG9mIC1vLAorICAjIGJlY2F1c2Ugd2UgbXVzdCB1c2UgLW8gd2hlbiBydW5uaW5nIGxpYnRvb2wuCisgICIkQCIgfHwgZXhpdCAkPworICBJRlM9IiAiCisgIGZvciBhcmcKKyAgZG8KKyAgICBjYXNlICIkYXJnIiBpbgorICAgICItR20ifCIvR20ifCItR2kifCIvR2kifCItWkkifCIvWkkiKQorCXNldCBmbm9yZCAiJEAiCisJc2hpZnQKKwlzaGlmdAorCTs7CisgICAgKikKKwlzZXQgZm5vcmQgIiRAIiAiJGFyZyIKKwlzaGlmdAorCXNoaWZ0CisJOzsKKyAgICBlc2FjCisgIGRvbmUKKyAgIiRAIiAtRSB8CisgIHNlZCAtbiAnL14jbGluZSBbMC05XVswLTldKiAiXChbXiJdKlwpIi8gczo6ZWNobyAiYGN5Z3BhdGggLXUgXFwiXDFcXCJgIjpwJyB8IHNvcnQgfCB1bmlxID4gIiR0bXBkZXBmaWxlIgorICBybSAtZiAiJGRlcGZpbGUiCisgIGVjaG8gIiRvYmplY3QgOiBcXCIgPiAiJGRlcGZpbGUiCisgIC4gIiR0bXBkZXBmaWxlIiB8IHNlZCAncyUgJVxcICVnJyB8IHNlZCAtbiAnL15cKC4qXCkkLyBzOjoJXDEgXFw6cCcgPj4gIiRkZXBmaWxlIgorICBlY2hvICIJIiA+PiAiJGRlcGZpbGUiCisgIC4gIiR0bXBkZXBmaWxlIiB8IHNlZCAncyUgJVxcICVnJyB8IHNlZCAtbiAnL15cKC4qXCkkLyBzOjpcMVw6OnAnID4+ICIkZGVwZmlsZSIKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICA7OworCitub25lKQorICBleGVjICIkQCIKKyAgOzsKKworKikKKyAgZWNobyAiVW5rbm93biBkZXBtb2RlICRkZXBtb2RlIiAxPiYyCisgIGV4aXQgMQorICA7OworZXNhYworCitleGl0IDAKKworIyBMb2NhbCBWYXJpYWJsZXM6CisjIG1vZGU6IHNoZWxsLXNjcmlwdAorIyBzaC1pbmRlbnRhdGlvbjogMgorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJzY3JpcHR2ZXJzaW9uPSIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkLiUwMkgiCisjIHRpbWUtc3RhbXAtZW5kOiAiJCIKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2J1aWxkLWF1eC9pbnN0YWxsLXNoIGIvcGFydGVkLTEuOC43L2J1aWxkLWF1eC9pbnN0YWxsLXNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE1ODk3ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvYnVpbGQtYXV4L2luc3RhbGwtc2gKQEAgLTAsMCArMSw1MTkgQEAKKyMhL2Jpbi9zaAorIyBpbnN0YWxsIC0gaW5zdGFsbCBhIHByb2dyYW0sIHNjcmlwdCwgb3IgZGF0YWZpbGUKKworc2NyaXB0dmVyc2lvbj0yMDA2LTEyLTI1LjAwCisKKyMgVGhpcyBvcmlnaW5hdGVzIGZyb20gWDExUjUgKG1pdC91dGlsL3NjcmlwdHMvaW5zdGFsbC5zaCksIHdoaWNoIHdhcworIyBsYXRlciByZWxlYXNlZCBpbiBYMTFSNiAoeGMvY29uZmlnL3V0aWwvaW5zdGFsbC5zaCkgd2l0aCB0aGUKKyMgZm9sbG93aW5nIGNvcHlyaWdodCBhbmQgbGljZW5zZS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk0IFggQ29uc29ydGl1bQorIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisjIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0bworIyBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZQorIyByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyMgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisjIFggQ09OU09SVElVTSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDLQorIyBUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZSBvZiB0aGUgWCBDb25zb3J0aXVtIHNoYWxsIG5vdAorIyBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbC0KKyMgaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBhdXRob3JpemF0aW9uIGZyb20gdGhlIFggQ29uc29yLQorIyB0aXVtLgorIworIworIyBGU0YgY2hhbmdlcyB0byB0aGlzIGZpbGUgYXJlIGluIHRoZSBwdWJsaWMgZG9tYWluLgorIworIyBDYWxsaW5nIHRoaXMgc2NyaXB0IGluc3RhbGwtc2ggaXMgcHJlZmVycmVkIG92ZXIgaW5zdGFsbC5zaCwgdG8gcHJldmVudAorIyBgbWFrZScgaW1wbGljaXQgcnVsZXMgZnJvbSBjcmVhdGluZyBhIGZpbGUgY2FsbGVkIGluc3RhbGwgZnJvbSBpdAorIyB3aGVuIHRoZXJlIGlzIG5vIE1ha2VmaWxlLgorIworIyBUaGlzIHNjcmlwdCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIEJTRCBpbnN0YWxsIHNjcmlwdCwgYnV0IHdhcyB3cml0dGVuCisjIGZyb20gc2NyYXRjaC4KKworbmw9JworJworSUZTPSIgIiIJJG5sIgorCisjIHNldCBET0lUUFJPRyB0byBlY2hvIHRvIHRlc3QgdGhpcyBzY3JpcHQKKworIyBEb24ndCB1c2UgOi0gc2luY2UgNC4zQlNEIGFuZCBlYXJsaWVyIHNoZWxscyBkb24ndCBsaWtlIGl0LgorZG9pdD0ke0RPSVRQUk9HLX0KK2lmIHRlc3QgLXogIiRkb2l0IjsgdGhlbgorICBkb2l0X2V4ZWM9ZXhlYworZWxzZQorICBkb2l0X2V4ZWM9JGRvaXQKK2ZpCisKKyMgUHV0IGluIGFic29sdXRlIGZpbGUgbmFtZXMgaWYgeW91IGRvbid0IGhhdmUgdGhlbSBpbiB5b3VyIHBhdGg7CisjIG9yIHVzZSBlbnZpcm9ubWVudCB2YXJzLgorCitjaGdycHByb2c9JHtDSEdSUFBST0ctY2hncnB9CitjaG1vZHByb2c9JHtDSE1PRFBST0ctY2htb2R9CitjaG93bnByb2c9JHtDSE9XTlBST0ctY2hvd259CitjbXBwcm9nPSR7Q01QUFJPRy1jbXB9CitjcHByb2c9JHtDUFBST0ctY3B9Citta2RpcnByb2c9JHtNS0RJUlBST0ctbWtkaXJ9CittdnByb2c9JHtNVlBST0ctbXZ9CitybXByb2c9JHtSTVBST0ctcm19CitzdHJpcHByb2c9JHtTVFJJUFBST0ctc3RyaXB9CisKK3Bvc2l4X2dsb2I9Jz8nCitpbml0aWFsaXplX3Bvc2l4X2dsb2I9JworICB0ZXN0ICIkcG9zaXhfZ2xvYiIgIT0gIj8iIHx8IHsKKyAgICBpZiAoc2V0IC1mKSAyPi9kZXYvbnVsbDsgdGhlbgorICAgICAgcG9zaXhfZ2xvYj0KKyAgICBlbHNlCisgICAgICBwb3NpeF9nbG9iPToKKyAgICBmaQorICB9CisnCisKK3Bvc2l4X21rZGlyPQorCisjIERlc2lyZWQgbW9kZSBvZiBpbnN0YWxsZWQgZmlsZS4KK21vZGU9MDc1NQorCitjaGdycGNtZD0KK2NobW9kY21kPSRjaG1vZHByb2cKK2Nob3duY21kPQorbXZjbWQ9JG12cHJvZworcm1jbWQ9IiRybXByb2cgLWYiCitzdHJpcGNtZD0KKworc3JjPQorZHN0PQorZGlyX2FyZz0KK2RzdF9hcmc9CisKK2NvcHlfb25fY2hhbmdlPWZhbHNlCitub190YXJnZXRfZGlyZWN0b3J5PQorCit1c2FnZT0iXAorVXNhZ2U6ICQwIFtPUFRJT05dLi4uIFstVF0gU1JDRklMRSBEU1RGSUxFCisgICBvcjogJDAgW09QVElPTl0uLi4gU1JDRklMRVMuLi4gRElSRUNUT1JZCisgICBvcjogJDAgW09QVElPTl0uLi4gLXQgRElSRUNUT1JZIFNSQ0ZJTEVTLi4uCisgICBvcjogJDAgW09QVElPTl0uLi4gLWQgRElSRUNUT1JJRVMuLi4KKworSW4gdGhlIDFzdCBmb3JtLCBjb3B5IFNSQ0ZJTEUgdG8gRFNURklMRS4KK0luIHRoZSAybmQgYW5kIDNyZCwgY29weSBhbGwgU1JDRklMRVMgdG8gRElSRUNUT1JZLgorSW4gdGhlIDR0aCwgY3JlYXRlIERJUkVDVE9SSUVTLgorCitPcHRpb25zOgorICAgICAtLWhlbHAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0LgorICAgICAtLXZlcnNpb24gIGRpc3BsYXkgdmVyc2lvbiBpbmZvIGFuZCBleGl0LgorCisgIC1jICAgICAgICAgICAgKGlnbm9yZWQpCisgIC1DICAgICAgICAgICAgaW5zdGFsbCBvbmx5IGlmIGRpZmZlcmVudCAocHJlc2VydmUgdGhlIGxhc3QgZGF0YSBtb2RpZmljYXRpb24gdGltZSkKKyAgLWQgICAgICAgICAgICBjcmVhdGUgZGlyZWN0b3JpZXMgaW5zdGVhZCBvZiBpbnN0YWxsaW5nIGZpbGVzLgorICAtZyBHUk9VUCAgICAgICRjaGdycHByb2cgaW5zdGFsbGVkIGZpbGVzIHRvIEdST1VQLgorICAtbSBNT0RFICAgICAgICRjaG1vZHByb2cgaW5zdGFsbGVkIGZpbGVzIHRvIE1PREUuCisgIC1vIFVTRVIgICAgICAgJGNob3ducHJvZyBpbnN0YWxsZWQgZmlsZXMgdG8gVVNFUi4KKyAgLXMgICAgICAgICAgICAkc3RyaXBwcm9nIGluc3RhbGxlZCBmaWxlcy4KKyAgLXQgRElSRUNUT1JZICBpbnN0YWxsIGludG8gRElSRUNUT1JZLgorICAtVCAgICAgICAgICAgIHJlcG9ydCBhbiBlcnJvciBpZiBEU1RGSUxFIGlzIGEgZGlyZWN0b3J5LgorCitFbnZpcm9ubWVudCB2YXJpYWJsZXMgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgY29tbWFuZHM6CisgIENIR1JQUFJPRyBDSE1PRFBST0cgQ0hPV05QUk9HIENNUFBST0cgQ1BQUk9HIE1LRElSUFJPRyBNVlBST0cKKyAgUk1QUk9HIFNUUklQUFJPRworIgorCit3aGlsZSB0ZXN0ICQjIC1uZSAwOyBkbworICBjYXNlICQxIGluCisgICAgLWMpIDs7CisKKyAgICAtQykgY29weV9vbl9jaGFuZ2U9dHJ1ZTs7CisKKyAgICAtZCkgZGlyX2FyZz10cnVlOzsKKworICAgIC1nKSBjaGdycGNtZD0iJGNoZ3JwcHJvZyAkMiIKKwlzaGlmdDs7CisKKyAgICAtLWhlbHApIGVjaG8gIiR1c2FnZSI7IGV4aXQgJD87OworCisgICAgLW0pIG1vZGU9JDIKKwljYXNlICRtb2RlIGluCisJICAqJyAnKiB8IConCScqIHwgKicKKycqCSAgfCAqJyonKiB8IConPycqIHwgKidbJyopCisJICAgIGVjaG8gIiQwOiBpbnZhbGlkIG1vZGU6ICRtb2RlIiA+JjIKKwkgICAgZXhpdCAxOzsKKwllc2FjCisJc2hpZnQ7OworCisgICAgLW8pIGNob3duY21kPSIkY2hvd25wcm9nICQyIgorCXNoaWZ0OzsKKworICAgIC1zKSBzdHJpcGNtZD0kc3RyaXBwcm9nOzsKKworICAgIC10KSBkc3RfYXJnPSQyCisJc2hpZnQ7OworCisgICAgLVQpIG5vX3RhcmdldF9kaXJlY3Rvcnk9dHJ1ZTs7CisKKyAgICAtLXZlcnNpb24pIGVjaG8gIiQwICRzY3JpcHR2ZXJzaW9uIjsgZXhpdCAkPzs7CisKKyAgICAtLSkJc2hpZnQKKwlicmVhazs7CisKKyAgICAtKikJZWNobyAiJDA6IGludmFsaWQgb3B0aW9uOiAkMSIgPiYyCisJZXhpdCAxOzsKKworICAgICopICBicmVhazs7CisgIGVzYWMKKyAgc2hpZnQKK2RvbmUKKworaWYgdGVzdCAkIyAtbmUgMCAmJiB0ZXN0IC16ICIkZGlyX2FyZyRkc3RfYXJnIjsgdGhlbgorICAjIFdoZW4gLWQgaXMgdXNlZCwgYWxsIHJlbWFpbmluZyBhcmd1bWVudHMgYXJlIGRpcmVjdG9yaWVzIHRvIGNyZWF0ZS4KKyAgIyBXaGVuIC10IGlzIHVzZWQsIHRoZSBkZXN0aW5hdGlvbiBpcyBhbHJlYWR5IHNwZWNpZmllZC4KKyAgIyBPdGhlcndpc2UsIHRoZSBsYXN0IGFyZ3VtZW50IGlzIHRoZSBkZXN0aW5hdGlvbi4gIFJlbW92ZSBpdCBmcm9tICRALgorICBmb3IgYXJnCisgIGRvCisgICAgaWYgdGVzdCAtbiAiJGRzdF9hcmciOyB0aGVuCisgICAgICAjICRAIGlzIG5vdCBlbXB0eTogaXQgY29udGFpbnMgYXQgbGVhc3QgJGFyZy4KKyAgICAgIHNldCBmbm9yZCAiJEAiICIkZHN0X2FyZyIKKyAgICAgIHNoaWZ0ICMgZm5vcmQKKyAgICBmaQorICAgIHNoaWZ0ICMgYXJnCisgICAgZHN0X2FyZz0kYXJnCisgIGRvbmUKK2ZpCisKK2lmIHRlc3QgJCMgLWVxIDA7IHRoZW4KKyAgaWYgdGVzdCAteiAiJGRpcl9hcmciOyB0aGVuCisgICAgZWNobyAiJDA6IG5vIGlucHV0IGZpbGUgc3BlY2lmaWVkLiIgPiYyCisgICAgZXhpdCAxCisgIGZpCisgICMgSXQncyBPSyB0byBjYWxsIGBpbnN0YWxsLXNoIC1kJyB3aXRob3V0IGFyZ3VtZW50LgorICAjIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGNyZWF0aW5nIGNvbmRpdGlvbmFsIGRpcmVjdG9yaWVzLgorICBleGl0IDAKK2ZpCisKK2lmIHRlc3QgLXogIiRkaXJfYXJnIjsgdGhlbgorICB0cmFwICcoZXhpdCAkPyk7IGV4aXQnIDEgMiAxMyAxNQorCisgICMgU2V0IHVtYXNrIHNvIGFzIG5vdCB0byBjcmVhdGUgdGVtcHMgd2l0aCB0b28tZ2VuZXJvdXMgbW9kZXMuCisgICMgSG93ZXZlciwgJ3N0cmlwJyByZXF1aXJlcyBib3RoIHJlYWQgYW5kIHdyaXRlIGFjY2VzcyB0byB0ZW1wcy4KKyAgY2FzZSAkbW9kZSBpbgorICAgICMgT3B0aW1pemUgY29tbW9uIGNhc2VzLgorICAgICo2NDQpIGNwX3VtYXNrPTEzMzs7CisgICAgKjc1NSkgY3BfdW1hc2s9MjI7OworCisgICAgKlswLTddKQorICAgICAgaWYgdGVzdCAteiAiJHN0cmlwY21kIjsgdGhlbgorCXVfcGx1c19ydz0KKyAgICAgIGVsc2UKKwl1X3BsdXNfcnc9JyUgMjAwJworICAgICAgZmkKKyAgICAgIGNwX3VtYXNrPWBleHByICcoJyA3NzcgLSAkbW9kZSAlIDEwMDAgJyknICR1X3BsdXNfcndgOzsKKyAgICAqKQorICAgICAgaWYgdGVzdCAteiAiJHN0cmlwY21kIjsgdGhlbgorCXVfcGx1c19ydz0KKyAgICAgIGVsc2UKKwl1X3BsdXNfcnc9LHUrcncKKyAgICAgIGZpCisgICAgICBjcF91bWFzaz0kbW9kZSR1X3BsdXNfcnc7OworICBlc2FjCitmaQorCitmb3Igc3JjCitkbworICAjIFByb3RlY3QgbmFtZXMgc3RhcnRpbmcgd2l0aCBgLScuCisgIGNhc2UgJHNyYyBpbgorICAgIC0qKSBzcmM9Li8kc3JjOzsKKyAgZXNhYworCisgIGlmIHRlc3QgLW4gIiRkaXJfYXJnIjsgdGhlbgorICAgIGRzdD0kc3JjCisgICAgZHN0ZGlyPSRkc3QKKyAgICB0ZXN0IC1kICIkZHN0ZGlyIgorICAgIGRzdGRpcl9zdGF0dXM9JD8KKyAgZWxzZQorCisgICAgIyBXYWl0aW5nIGZvciB0aGlzIHRvIGJlIGRldGVjdGVkIGJ5IHRoZSAiJGNwcHJvZyAkc3JjICRkc3R0bXAiIGNvbW1hbmQKKyAgICAjIG1pZ2h0IGNhdXNlIGRpcmVjdG9yaWVzIHRvIGJlIGNyZWF0ZWQsIHdoaWNoIHdvdWxkIGJlIGVzcGVjaWFsbHkgYmFkCisgICAgIyBpZiAkc3JjIChhbmQgdGh1cyAkZHN0dG1wKSBjb250YWlucyAnKicuCisgICAgaWYgdGVzdCAhIC1mICIkc3JjIiAmJiB0ZXN0ICEgLWQgIiRzcmMiOyB0aGVuCisgICAgICBlY2hvICIkMDogJHNyYyBkb2VzIG5vdCBleGlzdC4iID4mMgorICAgICAgZXhpdCAxCisgICAgZmkKKworICAgIGlmIHRlc3QgLXogIiRkc3RfYXJnIjsgdGhlbgorICAgICAgZWNobyAiJDA6IG5vIGRlc3RpbmF0aW9uIHNwZWNpZmllZC4iID4mMgorICAgICAgZXhpdCAxCisgICAgZmkKKworICAgIGRzdD0kZHN0X2FyZworICAgICMgUHJvdGVjdCBuYW1lcyBzdGFydGluZyB3aXRoIGAtJy4KKyAgICBjYXNlICRkc3QgaW4KKyAgICAgIC0qKSBkc3Q9Li8kZHN0OzsKKyAgICBlc2FjCisKKyAgICAjIElmIGRlc3RpbmF0aW9uIGlzIGEgZGlyZWN0b3J5LCBhcHBlbmQgdGhlIGlucHV0IGZpbGVuYW1lOyB3b24ndCB3b3JrCisgICAgIyBpZiBkb3VibGUgc2xhc2hlcyBhcmVuJ3QgaWdub3JlZC4KKyAgICBpZiB0ZXN0IC1kICIkZHN0IjsgdGhlbgorICAgICAgaWYgdGVzdCAtbiAiJG5vX3RhcmdldF9kaXJlY3RvcnkiOyB0aGVuCisJZWNobyAiJDA6ICRkc3RfYXJnOiBJcyBhIGRpcmVjdG9yeSIgPiYyCisJZXhpdCAxCisgICAgICBmaQorICAgICAgZHN0ZGlyPSRkc3QKKyAgICAgIGRzdD0kZHN0ZGlyL2BiYXNlbmFtZSAiJHNyYyJgCisgICAgICBkc3RkaXJfc3RhdHVzPTAKKyAgICBlbHNlCisgICAgICAjIFByZWZlciBkaXJuYW1lLCBidXQgZmFsbCBiYWNrIG9uIGEgc3Vic3RpdHV0ZSBpZiBkaXJuYW1lIGZhaWxzLgorICAgICAgZHN0ZGlyPWAKKwkoZGlybmFtZSAiJGRzdCIpIDI+L2Rldi9udWxsIHx8CisJZXhwciBYIiRkc3QiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJICAgICBYIiRkc3QiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJICAgICBYIiRkc3QiIDogJ1hcKC8vXCkkJyBcfCBcCisJICAgICBYIiRkc3QiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorCWVjaG8gWCIkZHN0IiB8CisJICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CisJCSAgIHMvL1wxLworCQkgICBxCisJCSB9CisJCSAvXlhcKFwvXC9cKVteL10uKi97CisJCSAgIHMvL1wxLworCQkgICBxCisJCSB9CisJCSAvXlhcKFwvXC9cKSQveworCQkgICBzLy9cMS8KKwkJICAgcQorCQkgfQorCQkgL15YXChcL1wpLioveworCQkgICBzLy9cMS8KKwkJICAgcQorCQkgfQorCQkgcy8uKi8uLzsgcScKKyAgICAgIGAKKworICAgICAgdGVzdCAtZCAiJGRzdGRpciIKKyAgICAgIGRzdGRpcl9zdGF0dXM9JD8KKyAgICBmaQorICBmaQorCisgIG9ic29sZXRlX21rZGlyX3VzZWQ9ZmFsc2UKKworICBpZiB0ZXN0ICRkc3RkaXJfc3RhdHVzICE9IDA7IHRoZW4KKyAgICBjYXNlICRwb3NpeF9ta2RpciBpbgorICAgICAgJycpCisJIyBDcmVhdGUgaW50ZXJtZWRpYXRlIGRpcnMgdXNpbmcgbW9kZSA3NTUgYXMgbW9kaWZpZWQgYnkgdGhlIHVtYXNrLgorCSMgVGhpcyBpcyBsaWtlIEZyZWVCU0QgJ2luc3RhbGwnIGFzIG9mIDE5OTctMTAtMjguCisJdW1hc2s9YHVtYXNrYAorCWNhc2UgJHN0cmlwY21kLiR1bWFzayBpbgorCSAgIyBPcHRpbWl6ZSBjb21tb24gY2FzZXMuCisJICAqWzIzNjddWzIzNjddKSBta2Rpcl91bWFzaz0kdW1hc2s7OworCSAgLiowWzAyXVswMl0gfCAuWzAyXVswMl0gfCAuWzAyXSkgbWtkaXJfdW1hc2s9MjI7OworCisJICAqWzAtN10pCisJICAgIG1rZGlyX3VtYXNrPWBleHByICR1bWFzayArIDIyIFwKKwkgICAgICAtICR1bWFzayAlIDEwMCAlIDQwICsgJHVtYXNrICUgMjAgXAorCSAgICAgIC0gJHVtYXNrICUgMTAgJSA0ICsgJHVtYXNrICUgMgorCSAgICBgOzsKKwkgICopIG1rZGlyX3VtYXNrPSR1bWFzayxnby13OzsKKwllc2FjCisKKwkjIFdpdGggLWQsIGNyZWF0ZSB0aGUgbmV3IGRpcmVjdG9yeSB3aXRoIHRoZSB1c2VyLXNwZWNpZmllZCBtb2RlLgorCSMgT3RoZXJ3aXNlLCByZWx5IG9uICRta2Rpcl91bWFzay4KKwlpZiB0ZXN0IC1uICIkZGlyX2FyZyI7IHRoZW4KKwkgIG1rZGlyX21vZGU9LW0kbW9kZQorCWVsc2UKKwkgIG1rZGlyX21vZGU9CisJZmkKKworCXBvc2l4X21rZGlyPWZhbHNlCisJY2FzZSAkdW1hc2sgaW4KKwkgICpbMTIzNTY3XVswLTddWzAtN10pCisJICAgICMgUE9TSVggbWtkaXIgLXAgc2V0cyB1K3d4IGJpdHMgcmVnYXJkbGVzcyBvZiB1bWFzaywgd2hpY2gKKwkgICAgIyBpcyBpbmNvbXBhdGlibGUgd2l0aCBGcmVlQlNEICdpbnN0YWxsJyB3aGVuICh1bWFzayAmIDMwMCkgIT0gMC4KKwkgICAgOzsKKwkgICopCisJICAgIHRtcGRpcj0ke1RNUERJUi0vdG1wfS9pbnMkUkFORE9NLSQkCisJICAgIHRyYXAgJ3JldD0kPzsgcm1kaXIgIiR0bXBkaXIvZCIgIiR0bXBkaXIiIDI+L2Rldi9udWxsOyBleGl0ICRyZXQnIDAKKworCSAgICBpZiAodW1hc2sgJG1rZGlyX3VtYXNrICYmCisJCWV4ZWMgJG1rZGlycHJvZyAkbWtkaXJfbW9kZSAtcCAtLSAiJHRtcGRpci9kIikgPi9kZXYvbnVsbCAyPiYxCisJICAgIHRoZW4KKwkgICAgICBpZiB0ZXN0IC16ICIkZGlyX2FyZyIgfHwgeworCQkgICAjIENoZWNrIGZvciBQT1NJWCBpbmNvbXBhdGliaWxpdGllcyB3aXRoIC1tLgorCQkgICAjIEhQLVVYIDExLjIzIGFuZCBJUklYIDYuNSBta2RpciAtbSAtcCBzZXRzIGdyb3VwLSBvcgorCQkgICAjIG90aGVyLXdyaXRlYWJsZSBiaXQgb2YgcGFyZW50IGRpcmVjdG9yeSB3aGVuIGl0IHNob3VsZG4ndC4KKwkJICAgIyBGcmVlQlNEIDYuMSBta2RpciAtbSAtcCBzZXRzIG1vZGUgb2YgZXhpc3RpbmcgZGlyZWN0b3J5LgorCQkgICBsc19sZF90bXBkaXI9YGxzIC1sZCAiJHRtcGRpciJgCisJCSAgIGNhc2UgJGxzX2xkX3RtcGRpciBpbgorCQkgICAgIGQ/Pz8/LT9yLSopIGRpZmZlcmVudF9tb2RlPTcwMDs7CisJCSAgICAgZD8/Pz8tPy0tKikgZGlmZmVyZW50X21vZGU9NzU1OzsKKwkJICAgICAqKSBmYWxzZTs7CisJCSAgIGVzYWMgJiYKKwkJICAgJG1rZGlycHJvZyAtbSRkaWZmZXJlbnRfbW9kZSAtcCAtLSAiJHRtcGRpciIgJiYgeworCQkgICAgIGxzX2xkX3RtcGRpcl8xPWBscyAtbGQgIiR0bXBkaXIiYAorCQkgICAgIHRlc3QgIiRsc19sZF90bXBkaXIiID0gIiRsc19sZF90bXBkaXJfMSIKKwkJICAgfQorCQkgfQorCSAgICAgIHRoZW4gcG9zaXhfbWtkaXI9OgorCSAgICAgIGZpCisJICAgICAgcm1kaXIgIiR0bXBkaXIvZCIgIiR0bXBkaXIiCisJICAgIGVsc2UKKwkgICAgICAjIFJlbW92ZSBhbnkgZGlycyBsZWZ0IGJlaGluZCBieSBhbmNpZW50IG1rZGlyIGltcGxlbWVudGF0aW9ucy4KKwkgICAgICBybWRpciAuLyRta2Rpcl9tb2RlIC4vLXAgLi8tLSAyPi9kZXYvbnVsbAorCSAgICBmaQorCSAgICB0cmFwICcnIDA7OworCWVzYWM7OworICAgIGVzYWMKKworICAgIGlmCisgICAgICAkcG9zaXhfbWtkaXIgJiYgKAorCXVtYXNrICRta2Rpcl91bWFzayAmJgorCSRkb2l0X2V4ZWMgJG1rZGlycHJvZyAkbWtkaXJfbW9kZSAtcCAtLSAiJGRzdGRpciIKKyAgICAgICkKKyAgICB0aGVuIDoKKyAgICBlbHNlCisKKyAgICAgICMgVGhlIHVtYXNrIGlzIHJpZGljdWxvdXMsIG9yIG1rZGlyIGRvZXMgbm90IGNvbmZvcm0gdG8gUE9TSVgsCisgICAgICAjIG9yIGl0IGZhaWxlZCBwb3NzaWJseSBkdWUgdG8gYSByYWNlIGNvbmRpdGlvbi4gIENyZWF0ZSB0aGUKKyAgICAgICMgZGlyZWN0b3J5IHRoZSBzbG93IHdheSwgc3RlcCBieSBzdGVwLCBjaGVja2luZyBmb3IgcmFjZXMgYXMgd2UgZ28uCisKKyAgICAgIGNhc2UgJGRzdGRpciBpbgorCS8qKSBwcmVmaXg9Jy8nOzsKKwktKikgcHJlZml4PScuLyc7OworCSopICBwcmVmaXg9Jyc7OworICAgICAgZXNhYworCisgICAgICBldmFsICIkaW5pdGlhbGl6ZV9wb3NpeF9nbG9iIgorCisgICAgICBvSUZTPSRJRlMKKyAgICAgIElGUz0vCisgICAgICAkcG9zaXhfZ2xvYiBzZXQgLWYKKyAgICAgIHNldCBmbm9yZCAkZHN0ZGlyCisgICAgICBzaGlmdAorICAgICAgJHBvc2l4X2dsb2Igc2V0ICtmCisgICAgICBJRlM9JG9JRlMKKworICAgICAgcHJlZml4ZXM9CisKKyAgICAgIGZvciBkCisgICAgICBkbworCXRlc3QgLXogIiRkIiAmJiBjb250aW51ZQorCisJcHJlZml4PSRwcmVmaXgkZAorCWlmIHRlc3QgLWQgIiRwcmVmaXgiOyB0aGVuCisJICBwcmVmaXhlcz0KKwllbHNlCisJICBpZiAkcG9zaXhfbWtkaXI7IHRoZW4KKwkgICAgKHVtYXNrPSRta2Rpcl91bWFzayAmJgorCSAgICAgJGRvaXRfZXhlYyAkbWtkaXJwcm9nICRta2Rpcl9tb2RlIC1wIC0tICIkZHN0ZGlyIikgJiYgYnJlYWsKKwkgICAgIyBEb24ndCBmYWlsIGlmIHR3byBpbnN0YW5jZXMgYXJlIHJ1bm5pbmcgY29uY3VycmVudGx5LgorCSAgICB0ZXN0IC1kICIkcHJlZml4IiB8fCBleGl0IDEKKwkgIGVsc2UKKwkgICAgY2FzZSAkcHJlZml4IGluCisJICAgICAgKlwnKikgcXByZWZpeD1gZWNobyAiJHByZWZpeCIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OworCSAgICAgICopIHFwcmVmaXg9JHByZWZpeDs7CisJICAgIGVzYWMKKwkgICAgcHJlZml4ZXM9IiRwcmVmaXhlcyAnJHFwcmVmaXgnIgorCSAgZmkKKwlmaQorCXByZWZpeD0kcHJlZml4LworICAgICAgZG9uZQorCisgICAgICBpZiB0ZXN0IC1uICIkcHJlZml4ZXMiOyB0aGVuCisJIyBEb24ndCBmYWlsIGlmIHR3byBpbnN0YW5jZXMgYXJlIHJ1bm5pbmcgY29uY3VycmVudGx5LgorCSh1bWFzayAkbWtkaXJfdW1hc2sgJiYKKwkgZXZhbCAiXCRkb2l0X2V4ZWMgXCRta2RpcnByb2cgJHByZWZpeGVzIikgfHwKKwkgIHRlc3QgLWQgIiRkc3RkaXIiIHx8IGV4aXQgMQorCW9ic29sZXRlX21rZGlyX3VzZWQ9dHJ1ZQorICAgICAgZmkKKyAgICBmaQorICBmaQorCisgIGlmIHRlc3QgLW4gIiRkaXJfYXJnIjsgdGhlbgorICAgIHsgdGVzdCAteiAiJGNob3duY21kIiB8fCAkZG9pdCAkY2hvd25jbWQgIiRkc3QiOyB9ICYmCisgICAgeyB0ZXN0IC16ICIkY2hncnBjbWQiIHx8ICRkb2l0ICRjaGdycGNtZCAiJGRzdCI7IH0gJiYKKyAgICB7IHRlc3QgIiRvYnNvbGV0ZV9ta2Rpcl91c2VkJGNob3duY21kJGNoZ3JwY21kIiA9IGZhbHNlIHx8CisgICAgICB0ZXN0IC16ICIkY2htb2RjbWQiIHx8ICRkb2l0ICRjaG1vZGNtZCAkbW9kZSAiJGRzdCI7IH0gfHwgZXhpdCAxCisgIGVsc2UKKworICAgICMgTWFrZSBhIGNvdXBsZSBvZiB0ZW1wIGZpbGUgbmFtZXMgaW4gdGhlIHByb3BlciBkaXJlY3RvcnkuCisgICAgZHN0dG1wPSRkc3RkaXIvX2luc3QuJCRfCisgICAgcm10bXA9JGRzdGRpci9fcm0uJCRfCisKKyAgICAjIFRyYXAgdG8gY2xlYW4gdXAgdGhvc2UgdGVtcCBmaWxlcyBhdCBleGl0LgorICAgIHRyYXAgJ3JldD0kPzsgcm0gLWYgIiRkc3R0bXAiICIkcm10bXAiICYmIGV4aXQgJHJldCcgMAorCisgICAgIyBDb3B5IHRoZSBmaWxlIG5hbWUgdG8gdGhlIHRlbXAgbmFtZS4KKyAgICAodW1hc2sgJGNwX3VtYXNrICYmICRkb2l0X2V4ZWMgJGNwcHJvZyAiJHNyYyIgIiRkc3R0bXAiKSAmJgorCisgICAgIyBhbmQgc2V0IGFueSBvcHRpb25zOyBkbyBjaG1vZCBsYXN0IHRvIHByZXNlcnZlIHNldHVpZCBiaXRzLgorICAgICMKKyAgICAjIElmIGFueSBvZiB0aGVzZSBmYWlsLCB3ZSBhYm9ydCB0aGUgd2hvbGUgdGhpbmcuICBJZiB3ZSB3YW50IHRvCisgICAgIyBpZ25vcmUgZXJyb3JzIGZyb20gYW55IG9mIHRoZXNlLCBqdXN0IG1ha2Ugc3VyZSBub3QgdG8gaWdub3JlCisgICAgIyBlcnJvcnMgZnJvbSB0aGUgYWJvdmUgIiRkb2l0ICRjcHByb2cgJHNyYyAkZHN0dG1wIiBjb21tYW5kLgorICAgICMKKyAgICB7IHRlc3QgLXogIiRjaG93bmNtZCIgfHwgJGRvaXQgJGNob3duY21kICIkZHN0dG1wIjsgfSAmJgorICAgIHsgdGVzdCAteiAiJGNoZ3JwY21kIiB8fCAkZG9pdCAkY2hncnBjbWQgIiRkc3R0bXAiOyB9ICYmCisgICAgeyB0ZXN0IC16ICIkc3RyaXBjbWQiIHx8ICRkb2l0ICRzdHJpcGNtZCAiJGRzdHRtcCI7IH0gJiYKKyAgICB7IHRlc3QgLXogIiRjaG1vZGNtZCIgfHwgJGRvaXQgJGNobW9kY21kICRtb2RlICIkZHN0dG1wIjsgfSAmJgorCisgICAgIyBJZiAtQywgZG9uJ3QgYm90aGVyIHRvIGNvcHkgaWYgaXQgd291bGRuJ3QgY2hhbmdlIHRoZSBmaWxlLgorICAgIGlmICRjb3B5X29uX2NoYW5nZSAmJgorICAgICAgIG9sZD1gTENfQUxMPUMgbHMgLWRsTCAiJGRzdCIJMj4vZGV2L251bGxgICYmCisgICAgICAgbmV3PWBMQ19BTEw9QyBscyAtZGxMICIkZHN0dG1wIgkyPi9kZXYvbnVsbGAgJiYKKworICAgICAgIGV2YWwgIiRpbml0aWFsaXplX3Bvc2l4X2dsb2IiICYmCisgICAgICAgJHBvc2l4X2dsb2Igc2V0IC1mICYmCisgICAgICAgc2V0IFggJG9sZCAmJiBvbGQ9OiQyOiQ0OiQ1OiQ2ICYmCisgICAgICAgc2V0IFggJG5ldyAmJiBuZXc9OiQyOiQ0OiQ1OiQ2ICYmCisgICAgICAgJHBvc2l4X2dsb2Igc2V0ICtmICYmCisKKyAgICAgICB0ZXN0ICIkb2xkIiA9ICIkbmV3IiAmJgorICAgICAgICRjbXBwcm9nICIkZHN0IiAiJGRzdHRtcCIgPi9kZXYvbnVsbCAyPiYxCisgICAgdGhlbgorICAgICAgcm0gLWYgIiRkc3R0bXAiCisgICAgZWxzZQorICAgICAgIyBSZW5hbWUgdGhlIGZpbGUgdG8gdGhlIHJlYWwgZGVzdGluYXRpb24uCisgICAgICAkZG9pdCAkbXZjbWQgLWYgIiRkc3R0bXAiICIkZHN0IiAyPi9kZXYvbnVsbCB8fAorCisgICAgICAjIFRoZSByZW5hbWUgZmFpbGVkLCBwZXJoYXBzIGJlY2F1c2UgbXYgY2FuJ3QgcmVuYW1lIHNvbWV0aGluZyBlbHNlCisgICAgICAjIHRvIGl0c2VsZiwgb3IgcGVyaGFwcyBiZWNhdXNlIG12IGlzIHNvIGFuY2llbnQgdGhhdCBpdCBkb2VzIG5vdAorICAgICAgIyBzdXBwb3J0IC1mLgorICAgICAgeworCSMgTm93IHJlbW92ZSBvciBtb3ZlIGFzaWRlIGFueSBvbGQgZmlsZSBhdCBkZXN0aW5hdGlvbiBsb2NhdGlvbi4KKwkjIFdlIHRyeSB0aGlzIHR3byB3YXlzIHNpbmNlIHJtIGNhbid0IHVubGluayBpdHNlbGYgb24gc29tZQorCSMgc3lzdGVtcyBhbmQgdGhlIGRlc3RpbmF0aW9uIGZpbGUgbWlnaHQgYmUgYnVzeSBmb3Igb3RoZXIKKwkjIHJlYXNvbnMuICBJbiB0aGlzIGNhc2UsIHRoZSBmaW5hbCBjbGVhbnVwIG1pZ2h0IGZhaWwgYnV0IHRoZSBuZXcKKwkjIGZpbGUgc2hvdWxkIHN0aWxsIGluc3RhbGwgc3VjY2Vzc2Z1bGx5LgorCXsKKwkgIHRlc3QgISAtZiAiJGRzdCIgfHwKKwkgICRkb2l0ICRybWNtZCAtZiAiJGRzdCIgMj4vZGV2L251bGwgfHwKKwkgIHsgJGRvaXQgJG12Y21kIC1mICIkZHN0IiAiJHJtdG1wIiAyPi9kZXYvbnVsbCAmJgorCSAgICB7ICRkb2l0ICRybWNtZCAtZiAiJHJtdG1wIiAyPi9kZXYvbnVsbDsgOjsgfQorCSAgfSB8fAorCSAgeyBlY2hvICIkMDogY2Fubm90IHVubGluayBvciByZW5hbWUgJGRzdCIgPiYyCisJICAgIChleGl0IDEpOyBleGl0IDEKKwkgIH0KKwl9ICYmCisKKwkjIE5vdyByZW5hbWUgdGhlIGZpbGUgdG8gdGhlIHJlYWwgZGVzdGluYXRpb24uCisJJGRvaXQgJG12Y21kICIkZHN0dG1wIiAiJGRzdCIKKyAgICAgIH0KKyAgICBmaSB8fCBleGl0IDEKKworICAgIHRyYXAgJycgMAorICBmaQorZG9uZQorCisjIExvY2FsIHZhcmlhYmxlczoKKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXN0YXJ0OiAic2NyaXB0dmVyc2lvbj0iCisjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZC4lMDJIIgorIyB0aW1lLXN0YW1wLWVuZDogIiQiCisjIEVuZDoKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9idWlsZC1hdXgvbHRtYWluLnNoIGIvcGFydGVkLTEuOC43L2J1aWxkLWF1eC9sdG1haW4uc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDcwZGM3NQotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9idWlsZC1hdXgvbHRtYWluLnNoCkBAIC0wLDAgKzEsNjkwOSBAQAorIyBsdG1haW4uc2ggLSBQcm92aWRlIGdlbmVyYWxpemVkIGxpYnJhcnktYnVpbGRpbmcgc3VwcG9ydCBzZXJ2aWNlcy4KKyMgTk9URTogQ2hhbmdpbmcgdGhpcyBmaWxlIHdpbGwgbm90IGFmZmVjdCBhbnl0aGluZyB1bnRpbCB5b3UgcmVydW4gY29uZmlndXJlLgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUKKyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIE9yaWdpbmFsbHkgYnkgR29yZG9uIE1hdHppZ2tlaXQgPGdvcmRAZ251LmFpLm1pdC5lZHU+LCAxOTk2CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorIworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgorIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKK2Jhc2VuYW1lPSJzLF4uKi8sLGciCisKKyMgV29yayBhcm91bmQgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBpc3N1ZSBvbiBJUklYIDYuNS4gT24gSVJJWCA2LjQrLCBzaAorIyBpcyBrc2ggYnV0IHdoZW4gdGhlIHNoZWxsIGlzIGludm9rZWQgYXMgInNoIiBhbmQgdGhlIGN1cnJlbnQgdmFsdWUgb2YKKyMgdGhlIF9YUEcgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IGVxdWFsIHRvIDEgKG9uZSksIHRoZSBzcGVjaWFsCisjIHBvc2l0aW9uYWwgcGFyYW1ldGVyICQwLCB3aXRoaW4gYSBmdW5jdGlvbiBjYWxsLCBpcyB0aGUgbmFtZSBvZiB0aGUKKyMgZnVuY3Rpb24uCitwcm9ncGF0aD0iJDAiCisKKyMgVGhlIG5hbWUgb2YgdGhpcyBwcm9ncmFtOgorcHJvZ25hbWU9YGVjaG8gIiRwcm9ncGF0aCIgfCAkU0VEICRiYXNlbmFtZWAKK21vZGVuYW1lPSIkcHJvZ25hbWUiCisKKyMgR2xvYmFsIHZhcmlhYmxlczoKK0VYSVRfU1VDQ0VTUz0wCitFWElUX0ZBSUxVUkU9MQorCitQUk9HUkFNPWx0bWFpbi5zaAorUEFDS0FHRT1saWJ0b29sCitWRVJTSU9OPTEuNS4yMgorVElNRVNUQU1QPSIgKDEuMTIyMC4yLjM2NSAyMDA1LzEyLzE4IDIyOjE0OjA2KSIKKworIyBCZSBCb3VybmUgY29tcGF0aWJsZSAodGFrZW4gZnJvbSBBdXRvY29uZjpfQVNfQk9VUk5FX0NPTVBBVElCTEUpLgoraWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGVtdWxhdGUgc2gKKyAgTlVMTENNRD06CisgICMgWnNoIDMueCBhbmQgNC54IHBlcmZvcm1zIHdvcmQgc3BsaXR0aW5nIG9uICR7MSsiJEAifSwgd2hpY2gKKyAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KKyAgYWxpYXMgLWcgJyR7MSsiJEAifSc9JyIkQCInCisgIHNldG9wdCBOT19HTE9CX1NVQlNUCitlbHNlCisgIGNhc2UgYChzZXQgLW8pIDI+L2Rldi9udWxsYCBpbiAqcG9zaXgqKSBzZXQgLW8gcG9zaXg7OyBlc2FjCitmaQorCisjIENoZWNrIHRoYXQgd2UgaGF2ZSBhIHdvcmtpbmcgJGVjaG8uCitpZiB0ZXN0ICJYJDEiID0gWC0tbm8tcmVleGVjOyB0aGVuCisgICMgRGlzY2FyZCB0aGUgLS1uby1yZWV4ZWMgZmxhZywgYW5kIGNvbnRpbnVlLgorICBzaGlmdAorZWxpZiB0ZXN0ICJYJDEiID0gWC0tZmFsbGJhY2stZWNobzsgdGhlbgorICAjIEF2b2lkIGlubGluZSBkb2N1bWVudCBoZXJlLCBpdCBtYXkgYmUgbGVmdCBvdmVyCisgIDoKK2VsaWYgdGVzdCAiWGAoJGVjaG8gJ1x0JykgMj4vZGV2L251bGxgIiA9ICdYXHQnOyB0aGVuCisgICMgWWlwcGVlLCAkZWNobyB3b3JrcyEKKyAgOgorZWxzZQorICAjIFJlc3RhcnQgdW5kZXIgdGhlIGNvcnJlY3Qgc2hlbGwsIGFuZCB0aGVuIG1heWJlICRlY2hvIHdpbGwgd29yay4KKyAgZXhlYyAkU0hFTEwgIiRwcm9ncGF0aCIgLS1uby1yZWV4ZWMgJHsxKyIkQCJ9CitmaQorCitpZiB0ZXN0ICJYJDEiID0gWC0tZmFsbGJhY2stZWNobzsgdGhlbgorICAjIHVzZWQgYXMgZmFsbGJhY2sgZWNobworICBzaGlmdAorICBjYXQgPDxFT0YKKyQqCitFT0YKKyAgZXhpdCAkRVhJVF9TVUNDRVNTCitmaQorCitkZWZhdWx0X21vZGU9CitoZWxwPSJUcnkgXGAkcHJvZ25hbWUgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCittYWdpYz0iJSUlTUFHSUMgdmFyaWFibGUlJSUiCitta2Rpcj0ibWtkaXIiCittdj0ibXYgLWYiCitybT0icm0gLWYiCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0IGhlbHBzIHVzIGRvIHJvYnVzdCBxdW90aW5nLiAgSXQgYmFja3NsYXNoaWZpZXMKKyMgbWV0YWNoYXJhY3RlcnMgdGhhdCBhcmUgc3RpbGwgYWN0aXZlIHdpdGhpbiBkb3VibGUtcXVvdGVkIHN0cmluZ3MuCitYc2VkPSIke1NFRH0iJyAtZSAxcy9eWC8vJworc2VkX3F1b3RlX3N1YnN0PSdzL1woW1xcYFxcIiRcXFxcXVwpL1xcXDEvZycKKyMgdGVzdCBFQkNESUMgb3IgQVNDSUkKK2Nhc2UgYGVjaG8gWHx0ciBYICdcMTAxJ2AgaW4KKyBBKSAjIEFTQ0lJIGJhc2VkIHN5c3RlbQorICAgICMgXG4gaXMgbm90IGludGVycHJldGVkIGNvcnJlY3RseSBieSBTb2xhcmlzIDggL3Vzci91Y2IvdHIKKyAgU1AyTkw9J3RyIFwwNDAgXDAxMicKKyAgTkwyU1A9J3RyIFwwMTVcMDEyIFwwNDBcMDQwJworICA7OworICopICMgRUJDRElDIGJhc2VkIHN5c3RlbQorICBTUDJOTD0ndHIgXDEwMCBcbicKKyAgTkwyU1A9J3RyIFxyXG4gXDEwMFwxMDAnCisgIDs7Citlc2FjCisKKyMgTkxTIG51aXNhbmNlcy4KKyMgT25seSBzZXQgTEFORyBhbmQgTENfQUxMIHRvIEMgaWYgYWxyZWFkeSBzZXQuCisjIFRoZXNlIG11c3Qgbm90IGJlIHNldCB1bmNvbmRpdGlvbmFsbHkgYmVjYXVzZSBub3QgYWxsIHN5c3RlbXMgdW5kZXJzdGFuZAorIyBlLmcuIExBTkc9QyAobm90YWJseSBTQ08pLgorIyBXZSBzYXZlIHRoZSBvbGQgdmFsdWVzIHRvIHJlc3RvcmUgZHVyaW5nIGV4ZWN1dGUgbW9kZS4KK2ZvciBsdF92YXIgaW4gTEFORyBMQ19BTEwgTENfQ1RZUEUgTENfQ09MTEFURSBMQ19NRVNTQUdFUworZG8KKyAgZXZhbCAiaWYgdGVzdCBcIlwkeyRsdF92YXIrc2V0fVwiID0gc2V0OyB0aGVuCisgICAgICAgICBzYXZlXyRsdF92YXI9XCQkbHRfdmFyCisgICAgICAgICAkbHRfdmFyPUMKKyAgICAgICAgIGV4cG9ydCAkbHRfdmFyCisgICAgICAgZmkiCitkb25lCisKKyMgTWFrZSBzdXJlIElGUyBoYXMgYSBzZW5zaWJsZSBkZWZhdWx0CitsdF9ubD0nCisnCitJRlM9IiAJJGx0X25sIgorCitpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXMgJiYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiAhPSB5ZXM7IHRoZW4KKyAgJGVjaG8gIiRtb2RlbmFtZTogbm90IGNvbmZpZ3VyZWQgdG8gYnVpbGQgYW55IGtpbmQgb2YgbGlicmFyeSIgMT4mMgorICAkZWNobyAiRmF0YWwgY29uZmlndXJhdGlvbiBlcnJvci4gIFNlZSB0aGUgJFBBQ0tBR0UgZG9jcyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iIDE+JjIKKyAgZXhpdCAkRVhJVF9GQUlMVVJFCitmaQorCisjIEdsb2JhbCB2YXJpYWJsZXMuCittb2RlPSRkZWZhdWx0X21vZGUKK25vbm9wdD0KK3ByZXY9CitwcmV2b3B0PQorcnVuPQorc2hvdz0iJGVjaG8iCitzaG93X2hlbHA9CitleGVjdXRlX2RsZmlsZXM9CitkdXBsaWNhdGVfZGVwcz1ubworcHJlc2VydmVfYXJncz0KK2xvMm89InMvXFwubG9cJC8uJHtvYmpleHR9LyIKK28ybG89InMvXFwuJHtvYmpleHR9XCQvLmxvLyIKK2V4dHJhY3RlZF9hcmNoaXZlcz0KK2V4dHJhY3RlZF9zZXJpYWw9MAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFNoZWxsIGZ1bmN0aW9uIGRlZmluaXRpb25zOgorIyBUaGlzIHNlZW1zIHRvIGJlIHRoZSBiZXN0IHBsYWNlIGZvciB0aGVtCisKKyMgZnVuY19ta3RlbXBkaXIgW3N0cmluZ10KKyMgTWFrZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgdGhhdCB3b24ndCBjbGFzaCB3aXRoIG90aGVyIHJ1bm5pbmcKKyMgbGlidG9vbCBwcm9jZXNzZXMsIGFuZCBhdm9pZHMgcmFjZSBjb25kaXRpb25zIGlmIHBvc3NpYmxlLiAgSWYKKyMgZ2l2ZW4sIFNUUklORyBpcyB0aGUgYmFzZW5hbWUgZm9yIHRoYXQgZGlyZWN0b3J5LgorZnVuY19ta3RlbXBkaXIgKCkKK3sKKyAgICBteV90ZW1wbGF0ZT0iJHtUTVBESVItL3RtcH0vJHsxLSRwcm9nbmFtZX0iCisKKyAgICBpZiB0ZXN0ICIkcnVuIiA9ICI6IjsgdGhlbgorICAgICAgIyBSZXR1cm4gYSBkaXJlY3RvcnkgbmFtZSwgYnV0IGRvbid0IGNyZWF0ZSBpdCBpbiBkcnktcnVuIG1vZGUKKyAgICAgIG15X3RtcGRpcj0iJHtteV90ZW1wbGF0ZX0tJCQiCisgICAgZWxzZQorCisgICAgICAjIElmIG1rdGVtcCB3b3JrcywgdXNlIHRoYXQgZmlyc3QgYW5kIGZvcmVtb3N0CisgICAgICBteV90bXBkaXI9YG1rdGVtcCAtZCAiJHtteV90ZW1wbGF0ZX0tWFhYWFhYWFgiIDI+L2Rldi9udWxsYAorCisgICAgICBpZiB0ZXN0ICEgLWQgIiRteV90bXBkaXIiOyB0aGVuCisJIyBGYWlsaW5nIHRoYXQsIGF0IGxlYXN0IHRyeSBhbmQgdXNlICRSQU5ET00gdG8gYXZvaWQgYSByYWNlCisJbXlfdG1wZGlyPSIke215X3RlbXBsYXRlfS0ke1JBTkRPTS0wfSQkIgorCisJc2F2ZV9ta3RlbXBkaXJfdW1hc2s9YHVtYXNrYAorCXVtYXNrIDAwNzcKKwkkbWtkaXIgIiRteV90bXBkaXIiCisJdW1hc2sgJHNhdmVfbWt0ZW1wZGlyX3VtYXNrCisgICAgICBmaQorCisgICAgICAjIElmIHdlJ3JlIG5vdCBpbiBkcnktcnVuIG1vZGUsIGJvbWIgb3V0IG9uIGZhaWx1cmUKKyAgICAgIHRlc3QgLWQgIiRteV90bXBkaXIiIHx8IHsKKyAgICAgICAgJGVjaG8gImNhbm5vdCBjcmVhdGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSBcYCRteV90bXBkaXInIiAxPiYyCisJZXhpdCAkRVhJVF9GQUlMVVJFCisgICAgICB9CisgICAgZmkKKworICAgICRlY2hvICJYJG15X3RtcGRpciIgfCAkWHNlZAorfQorCisKKyMgZnVuY193aW4zMl9saWJpZCBhcmcKKyMgcmV0dXJuIHRoZSBsaWJyYXJ5IHR5cGUgb2YgZmlsZSAnYXJnJworIworIyBOZWVkIGEgbG90IG9mIGdvbyB0byBoYW5kbGUgKmJvdGgqIERMTHMgYW5kIGltcG9ydCBsaWJzCisjIEhhcyB0byBiZSBhIHNoZWxsIGZ1bmN0aW9uIGluIG9yZGVyIHRvICdlYXQnIHRoZSBhcmd1bWVudAorIyB0aGF0IGlzIHN1cHBsaWVkIHdoZW4gJGZpbGVfbWFnaWNfY29tbWFuZCBpcyBjYWxsZWQuCitmdW5jX3dpbjMyX2xpYmlkICgpCit7CisgIHdpbjMyX2xpYmlkX3R5cGU9InVua25vd24iCisgIHdpbjMyX2ZpbGVyZXM9YGZpbGUgLUwgJDEgMj4vZGV2L251bGxgCisgIGNhc2UgJHdpbjMyX2ZpbGVyZXMgaW4KKyAgKmFyXCBhcmNoaXZlXCBpbXBvcnRcIGxpYnJhcnkqKSAjIGRlZmluaXRlbHkgaW1wb3J0CisgICAgd2luMzJfbGliaWRfdHlwZT0ieDg2IGFyY2hpdmUgaW1wb3J0IgorICAgIDs7CisgICphclwgYXJjaGl2ZSopICMgY291bGQgYmUgYW4gaW1wb3J0LCBvciBzdGF0aWMKKyAgICBpZiBldmFsICRPQkpEVU1QIC1mICQxIHwgJFNFRCAtZSAnMTBxJyAyPi9kZXYvbnVsbCB8IFwKKyAgICAgICRFR1JFUCAtZSAnZmlsZSBmb3JtYXQgcGUtaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/JyA+L2Rldi9udWxsIDsgdGhlbgorICAgICAgd2luMzJfbm1yZXM9YGV2YWwgJE5NIC1mIHBvc2l4IC1BICQxIHwgXAorCSRTRUQgLW4gLWUgJzEsMTAwey8gSSAve3MsLiosaW1wb3J0LDtwO3E7fTt9J2AKKyAgICAgIGNhc2UgJHdpbjMyX25tcmVzIGluCisgICAgICBpbXBvcnQqKSAgd2luMzJfbGliaWRfdHlwZT0ieDg2IGFyY2hpdmUgaW1wb3J0Ijs7CisgICAgICAqKSAgICAgICAgd2luMzJfbGliaWRfdHlwZT0ieDg2IGFyY2hpdmUgc3RhdGljIjs7CisgICAgICBlc2FjCisgICAgZmkKKyAgICA7OworICAqRExMKikKKyAgICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgRExMIgorICAgIDs7CisgICpleGVjdXRhYmxlKikgIyBidXQgc2hlbGwgc2NyaXB0cyBhcmUgImV4ZWN1dGFibGUiIHRvby4uLgorICAgIGNhc2UgJHdpbjMyX2ZpbGVyZXMgaW4KKyAgICAqTVNcIFdpbmRvd3NcIFBFXCBJbnRlbCopCisgICAgICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgRExMIgorICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKKyAgZXNhYworICAkZWNobyAkd2luMzJfbGliaWRfdHlwZQorfQorCisKKyMgZnVuY19pbmZlcl90YWcgYXJnCisjIEluZmVyIHRhZ2dlZCBjb25maWd1cmF0aW9uIHRvIHVzZSBpZiBhbnkgYXJlIGF2YWlsYWJsZSBhbmQKKyMgaWYgb25lIHdhc24ndCBjaG9zZW4gdmlhIHRoZSAiLS10YWciIGNvbW1hbmQgbGluZSBvcHRpb24uCisjIE9ubHkgYXR0ZW1wdCB0aGlzIGlmIHRoZSBjb21waWxlciBpbiB0aGUgYmFzZSBjb21waWxlCisjIGNvbW1hbmQgZG9lc24ndCBtYXRjaCB0aGUgZGVmYXVsdCBjb21waWxlci4KKyMgYXJnIGlzIHVzdWFsbHkgb2YgdGhlIGZvcm0gJ2djYyAuLi4nCitmdW5jX2luZmVyX3RhZyAoKQoreworICAgIGlmIHRlc3QgLW4gIiRhdmFpbGFibGVfdGFncyIgJiYgdGVzdCAteiAiJHRhZ25hbWUiOyB0aGVuCisgICAgICBDQ19xdW90ZWQ9CisgICAgICBmb3IgYXJnIGluICRDQzsgZG8KKwljYXNlICRhcmcgaW4KKwkgICpbXFtcflwjXF5cJlwqXChcKVx7XH1cfFw7XDxcPlw/XCdcIFwJXSp8Kl0qfCIiKQorCSAgYXJnPSJcIiRhcmdcIiIKKwkgIDs7CisJZXNhYworCUNDX3F1b3RlZD0iJENDX3F1b3RlZCAkYXJnIgorICAgICAgZG9uZQorICAgICAgY2FzZSAkQCBpbgorICAgICAgIyBCbGFua3MgaW4gdGhlIGNvbW1hbmQgbWF5IGhhdmUgYmVlbiBzdHJpcHBlZCBieSB0aGUgY2FsbGluZyBzaGVsbCwKKyAgICAgICMgYnV0IG5vdCBmcm9tIHRoZSBDQyBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aGVuIGNvbmZpZ3VyZSB3YXMgcnVuLgorICAgICAgIiAkQ0MgIiogfCAiJENDICIqIHwgIiBgJGVjaG8gJENDYCAiKiB8ICJgJGVjaG8gJENDYCAiKiB8ICIgJENDX3F1b3RlZCIqIHwgIiRDQ19xdW90ZWQgIiogfCAiIGAkZWNobyAkQ0NfcXVvdGVkYCAiKiB8ICJgJGVjaG8gJENDX3F1b3RlZGAgIiopIDs7CisgICAgICAjIEJsYW5rcyBhdCB0aGUgc3RhcnQgb2YgJGJhc2VfY29tcGlsZSB3aWxsIGNhdXNlIHRoaXMgdG8gZmFpbAorICAgICAgIyBpZiB3ZSBkb24ndCBjaGVjayBmb3IgdGhlbSBhcyB3ZWxsLgorICAgICAgKikKKwlmb3IgeiBpbiAkYXZhaWxhYmxlX3RhZ3M7IGRvCisJICBpZiBncmVwICJeIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAkeiQiIDwgIiRwcm9ncGF0aCIgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgIyBFdmFsdWF0ZSB0aGUgY29uZmlndXJhdGlvbi4KKwkgICAgZXZhbCAiYCR7U0VEfSAtbiAtZSAnL14jICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICckeickLywvXiMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6ICckeickL3AnIDwgJHByb2dwYXRoYCIKKwkgICAgQ0NfcXVvdGVkPQorCSAgICBmb3IgYXJnIGluICRDQzsgZG8KKwkgICAgIyBEb3VibGUtcXVvdGUgYXJncyBjb250YWluaW5nIG90aGVyIHNoZWxsIG1ldGFjaGFyYWN0ZXJzLgorCSAgICBjYXNlICRhcmcgaW4KKwkgICAgICAqW1xbXH5cI1xeXCZcKlwoXClce1x9XHxcO1w8XD5cP1wnXCBcCV0qfCpdKnwiIikKKwkgICAgICBhcmc9IlwiJGFyZ1wiIgorCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgQ0NfcXVvdGVkPSIkQ0NfcXVvdGVkICRhcmciCisJICBkb25lCisJICAgIGNhc2UgIiRAICIgaW4KKwkgICAgICAiICRDQyAiKiB8ICIkQ0MgIiogfCAiIGAkZWNobyAkQ0NgICIqIHwgImAkZWNobyAkQ0NgICIqIHwgIiAkQ0NfcXVvdGVkIiogfCAiJENDX3F1b3RlZCAiKiB8ICIgYCRlY2hvICRDQ19xdW90ZWRgICIqIHwgImAkZWNobyAkQ0NfcXVvdGVkYCAiKikKKwkgICAgICAjIFRoZSBjb21waWxlciBpbiB0aGUgYmFzZSBjb21waWxlIGNvbW1hbmQgbWF0Y2hlcworCSAgICAgICMgdGhlIG9uZSBpbiB0aGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb24uCisJICAgICAgIyBBc3N1bWUgdGhpcyBpcyB0aGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb24gd2Ugd2FudC4KKwkgICAgICB0YWduYW1lPSR6CisJICAgICAgYnJlYWsKKwkgICAgICA7OworCSAgICBlc2FjCisJICBmaQorCWRvbmUKKwkjIElmICR0YWduYW1lIHN0aWxsIGlzbid0IHNldCwgdGhlbiBubyB0YWdnZWQgY29uZmlndXJhdGlvbgorCSMgd2FzIGZvdW5kIGFuZCBsZXQgdGhlIHVzZXIga25vdyB0aGF0IHRoZSAiLS10YWciIGNvbW1hbmQKKwkjIGxpbmUgb3B0aW9uIG11c3QgYmUgdXNlZC4KKwlpZiB0ZXN0IC16ICIkdGFnbmFtZSI7IHRoZW4KKwkgICRlY2hvICIkbW9kZW5hbWU6IHVuYWJsZSB0byBpbmZlciB0YWdnZWQgY29uZmlndXJhdGlvbiIKKwkgICRlY2hvICIkbW9kZW5hbWU6IHNwZWNpZnkgYSB0YWcgd2l0aCBcYC0tdGFnJyIgMT4mMgorCSAgZXhpdCAkRVhJVF9GQUlMVVJFCisjICAgICAgICBlbHNlCisjICAgICAgICAgICRlY2hvICIkbW9kZW5hbWU6IHVzaW5nICR0YWduYW1lIHRhZ2dlZCBjb25maWd1cmF0aW9uIgorCWZpCisJOzsKKyAgICAgIGVzYWMKKyAgICBmaQorfQorCisKKyMgZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgZGlyIG9sZGxpYgorZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgKCkKK3sKKyAgICBmX2V4X2FuX2FyX2Rpcj0iJDEiOyBzaGlmdAorICAgIGZfZXhfYW5fYXJfb2xkbGliPSIkMSIKKworICAgICRzaG93ICIoY2QgJGZfZXhfYW5fYXJfZGlyICYmICRBUiB4ICRmX2V4X2FuX2FyX29sZGxpYikiCisgICAgJHJ1biBldmFsICIoY2QgXCRmX2V4X2FuX2FyX2RpciAmJiAkQVIgeCBcJGZfZXhfYW5fYXJfb2xkbGliKSIgfHwgZXhpdCAkPworICAgIGlmICgkQVIgdCAiJGZfZXhfYW5fYXJfb2xkbGliIiB8IHNvcnQgfCBzb3J0IC11YyA+L2Rldi9udWxsIDI+JjEpOyB0aGVuCisgICAgIDoKKyAgICBlbHNlCisgICAgICAkZWNobyAiJG1vZGVuYW1lOiBFUlJPUjogb2JqZWN0IG5hbWUgY29uZmxpY3RzOiAkZl9leF9hbl9hcl9kaXIvJGZfZXhfYW5fYXJfb2xkbGliIiAxPiYyCisgICAgICBleGl0ICRFWElUX0ZBSUxVUkUKKyAgICBmaQorfQorCisjIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyBnZW50b3Agb2xkbGliIC4uLgorZnVuY19leHRyYWN0X2FyY2hpdmVzICgpCit7CisgICAgbXlfZ2VudG9wPSIkMSI7IHNoaWZ0CisgICAgbXlfb2xkbGlicz0kezErIiRAIn0KKyAgICBteV9vbGRvYmpzPSIiCisgICAgbXlfeGxpYj0iIgorICAgIG15X3hhYnM9IiIKKyAgICBteV94ZGlyPSIiCisgICAgbXlfc3RhdHVzPSIiCisKKyAgICAkc2hvdyAiJHtybX1yICRteV9nZW50b3AiCisgICAgJHJ1biAke3JtfXIgIiRteV9nZW50b3AiCisgICAgJHNob3cgIiRta2RpciAkbXlfZ2VudG9wIgorICAgICRydW4gJG1rZGlyICIkbXlfZ2VudG9wIgorICAgIG15X3N0YXR1cz0kPworICAgIGlmIHRlc3QgIiRteV9zdGF0dXMiIC1uZSAwICYmIHRlc3QgISAtZCAiJG15X2dlbnRvcCI7IHRoZW4KKyAgICAgIGV4aXQgJG15X3N0YXR1cworICAgIGZpCisKKyAgICBmb3IgbXlfeGxpYiBpbiAkbXlfb2xkbGliczsgZG8KKyAgICAgICMgRXh0cmFjdCB0aGUgb2JqZWN0cy4KKyAgICAgIGNhc2UgJG15X3hsaWIgaW4KKwlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIG15X3hhYnM9IiRteV94bGliIiA7OworCSopIG15X3hhYnM9YHB3ZGAiLyRteV94bGliIiA7OworICAgICAgZXNhYworICAgICAgbXlfeGxpYj1gJGVjaG8gIlgkbXlfeGxpYiIgfCAkWHNlZCAtZSAncyVeLiovJSUnYAorICAgICAgbXlfeGxpYl91PSRteV94bGliCisgICAgICB3aGlsZSA6OyBkbworICAgICAgICBjYXNlICIgJGV4dHJhY3RlZF9hcmNoaXZlcyAiIGluCisgICAgICAgKiIgJG15X3hsaWJfdSAiKikKKyAgICAgICAgIGV4dHJhY3RlZF9zZXJpYWw9YGV4cHIgJGV4dHJhY3RlZF9zZXJpYWwgKyAxYAorICAgICAgICAgbXlfeGxpYl91PWx0JGV4dHJhY3RlZF9zZXJpYWwtJG15X3hsaWIgOzsKKyAgICAgICAqKSBicmVhayA7OworICAgICAgIGVzYWMKKyAgICAgIGRvbmUKKyAgICAgIGV4dHJhY3RlZF9hcmNoaXZlcz0iJGV4dHJhY3RlZF9hcmNoaXZlcyAkbXlfeGxpYl91IgorICAgICAgbXlfeGRpcj0iJG15X2dlbnRvcC8kbXlfeGxpYl91IgorCisgICAgICAkc2hvdyAiJHtybX1yICRteV94ZGlyIgorICAgICAgJHJ1biAke3JtfXIgIiRteV94ZGlyIgorICAgICAgJHNob3cgIiRta2RpciAkbXlfeGRpciIKKyAgICAgICRydW4gJG1rZGlyICIkbXlfeGRpciIKKyAgICAgIGV4aXRfc3RhdHVzPSQ/CisgICAgICBpZiB0ZXN0ICIkZXhpdF9zdGF0dXMiIC1uZSAwICYmIHRlc3QgISAtZCAiJG15X3hkaXIiOyB0aGVuCisJZXhpdCAkZXhpdF9zdGF0dXMKKyAgICAgIGZpCisgICAgICBjYXNlICRob3N0IGluCisgICAgICAqLWRhcndpbiopCisJJHNob3cgIkV4dHJhY3RpbmcgJG15X3hhYnMiCisJIyBEbyBub3QgYm90aGVyIGRvaW5nIGFueXRoaW5nIGlmIGp1c3QgYSBkcnkgcnVuCisJaWYgdGVzdCAteiAiJHJ1biI7IHRoZW4KKwkgIGRhcndpbl9vcmlnX2Rpcj1gcHdkYAorCSAgY2QgJG15X3hkaXIgfHwgZXhpdCAkPworCSAgZGFyd2luX2FyY2hpdmU9JG15X3hhYnMKKwkgIGRhcndpbl9jdXJkaXI9YHB3ZGAKKwkgIGRhcndpbl9iYXNlX2FyY2hpdmU9YCRlY2hvICJYJGRhcndpbl9hcmNoaXZlIiB8ICRYc2VkIC1lICdzJV4uKi8lJSdgCisJICBkYXJ3aW5fYXJjaGVzPWBsaXBvIC1pbmZvICIkZGFyd2luX2FyY2hpdmUiIDI+L2Rldi9udWxsIHwgJEVHUkVQIEFyY2hpdGVjdHVyZXMgMj4vZGV2L251bGxgCisJICBpZiB0ZXN0IC1uICIkZGFyd2luX2FyY2hlcyI7IHRoZW4gCisJICAgIGRhcndpbl9hcmNoZXM9YGVjaG8gIiRkYXJ3aW5fYXJjaGVzIiB8ICRTRUQgLWUgJ3MvLiphcmU6Ly8nYAorCSAgICBkYXJ3aW5fYXJjaD0KKwkgICAgJHNob3cgIiRkYXJ3aW5fYmFzZV9hcmNoaXZlIGhhcyBtdWx0aXBsZSBhcmNoaXRlY3R1cmVzICRkYXJ3aW5fYXJjaGVzIgorCSAgICBmb3IgZGFyd2luX2FyY2ggaW4gICRkYXJ3aW5fYXJjaGVzIDsgZG8KKwkgICAgICBta2RpciAtcCAidW5mYXQtJCQvJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfS0ke2Rhcndpbl9hcmNofSIKKwkgICAgICBsaXBvIC10aGluICRkYXJ3aW5fYXJjaCAtb3V0cHV0ICJ1bmZhdC0kJC8ke2Rhcndpbl9iYXNlX2FyY2hpdmV9LSR7ZGFyd2luX2FyY2h9LyR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0iICIke2Rhcndpbl9hcmNoaXZlfSIKKwkgICAgICBjZCAidW5mYXQtJCQvJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfS0ke2Rhcndpbl9hcmNofSIKKwkgICAgICBmdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSAiYHB3ZGAiICIke2Rhcndpbl9iYXNlX2FyY2hpdmV9IgorCSAgICAgIGNkICIkZGFyd2luX2N1cmRpciIKKwkgICAgICAkcm0gInVuZmF0LSQkLyR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0tJHtkYXJ3aW5fYXJjaH0vJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfSIKKwkgICAgZG9uZSAjICRkYXJ3aW5fYXJjaGVzCisgICAgICAjIyBPa2F5IG5vdyB3ZSBoYXZlIGEgYnVuY2ggb2YgdGhpbiBvYmplY3RzLCBnb3R0YSBmYXR0ZW4gdGhlbSB1cCA6KQorCSAgICBkYXJ3aW5fZmlsZWxpc3Q9YGZpbmQgdW5mYXQtJCQgLXR5cGUgZiAtbmFtZSBcKi5vIC1wcmludCAtbyAtbmFtZSBcKi5sbyAtcHJpbnR8IHhhcmdzIGJhc2VuYW1lIHwgc29ydCAtdSB8ICROTDJTUGAKKwkgICAgZGFyd2luX2ZpbGU9CisJICAgIGRhcndpbl9maWxlcz0KKwkgICAgZm9yIGRhcndpbl9maWxlIGluICRkYXJ3aW5fZmlsZWxpc3Q7IGRvCisJICAgICAgZGFyd2luX2ZpbGVzPWBmaW5kIHVuZmF0LSQkIC1uYW1lICRkYXJ3aW5fZmlsZSAtcHJpbnQgfCAkTkwyU1BgCisJICAgICAgbGlwbyAtY3JlYXRlIC1vdXRwdXQgIiRkYXJ3aW5fZmlsZSIgJGRhcndpbl9maWxlcworCSAgICBkb25lICMgJGRhcndpbl9maWxlbGlzdAorCSAgICAke3JtfXIgdW5mYXQtJCQKKwkgICAgY2QgIiRkYXJ3aW5fb3JpZ19kaXIiCisJICBlbHNlCisJICAgIGNkICIkZGFyd2luX29yaWdfZGlyIgorIAkgICAgZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgIiRteV94ZGlyIiAiJG15X3hhYnMiCisJICBmaSAjICRkYXJ3aW5fYXJjaGVzCisJZmkgIyAkcnVuCisJOzsKKyAgICAgICopCisgICAgICAgIGZ1bmNfZXh0cmFjdF9hbl9hcmNoaXZlICIkbXlfeGRpciIgIiRteV94YWJzIgorICAgICAgICA7OworICAgICAgZXNhYworICAgICAgbXlfb2xkb2Jqcz0iJG15X29sZG9ianMgImBmaW5kICRteV94ZGlyIC1uYW1lIFwqLiRvYmpleHQgLXByaW50IC1vIC1uYW1lIFwqLmxvIC1wcmludCB8ICROTDJTUGAKKyAgICBkb25lCisgICAgZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdD0iJG15X29sZG9ianMiCit9CisjIEVuZCBvZiBTaGVsbCBmdW5jdGlvbiBkZWZpbml0aW9ucworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIERhcndpbiBzdWNrcworZXZhbCBzdGRfc2hyZXh0PVwiJHNocmV4dF9jbWRzXCIKKworZGlzYWJsZV9saWJzPW5vCisKKyMgUGFyc2Ugb3VyIGNvbW1hbmQgbGluZSBvcHRpb25zIG9uY2UsIHRob3JvdWdobHkuCit3aGlsZSB0ZXN0ICIkIyIgLWd0IDAKK2RvCisgIGFyZz0iJDEiCisgIHNoaWZ0CisKKyAgY2FzZSAkYXJnIGluCisgIC0qPSopIG9wdGFyZz1gJGVjaG8gIlgkYXJnIiB8ICRYc2VkIC1lICdzL1stX2EtekEtWjAtOV0qPS8vJ2AgOzsKKyAgKikgb3B0YXJnPSA7OworICBlc2FjCisKKyAgIyBJZiB0aGUgcHJldmlvdXMgb3B0aW9uIG5lZWRzIGFuIGFyZ3VtZW50LCBhc3NpZ24gaXQuCisgIGlmIHRlc3QgLW4gIiRwcmV2IjsgdGhlbgorICAgIGNhc2UgJHByZXYgaW4KKyAgICBleGVjdXRlX2RsZmlsZXMpCisgICAgICBleGVjdXRlX2RsZmlsZXM9IiRleGVjdXRlX2RsZmlsZXMgJGFyZyIKKyAgICAgIDs7CisgICAgdGFnKQorICAgICAgdGFnbmFtZT0iJGFyZyIKKyAgICAgIHByZXNlcnZlX2FyZ3M9IiR7cHJlc2VydmVfYXJnc309JGFyZyIKKworICAgICAgIyBDaGVjayB3aGV0aGVyIHRhZ25hbWUgY29udGFpbnMgb25seSB2YWxpZCBjaGFyYWN0ZXJzCisgICAgICBjYXNlICR0YWduYW1lIGluCisgICAgICAqWyEtX0EtWmEtejAtOSwvXSopCisJJGVjaG8gIiRwcm9nbmFtZTogaW52YWxpZCB0YWcgbmFtZTogJHRhZ25hbWUiIDE+JjIKKwlleGl0ICRFWElUX0ZBSUxVUkUKKwk7OworICAgICAgZXNhYworCisgICAgICBjYXNlICR0YWduYW1lIGluCisgICAgICBDQykKKwkjIERvbid0IHRlc3QgZm9yIHRoZSAiZGVmYXVsdCIgQyB0YWcsIGFzIHdlIGtub3csIGl0J3MgdGhlcmUsIGJ1dAorCSMgbm90IHNwZWNpYWxseSBtYXJrZWQuCisJOzsKKyAgICAgICopCisJaWYgZ3JlcCAiXiMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWUkIiA8ICIkcHJvZ3BhdGgiID4gL2Rldi9udWxsOyB0aGVuCisJICB0YWdsaXN0PSIkdGFnbGlzdCAkdGFnbmFtZSIKKwkgICMgRXZhbHVhdGUgdGhlIGNvbmZpZ3VyYXRpb24uCisJICBldmFsICJgJHtTRUR9IC1uIC1lICcvXiMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJyR0YWduYW1lJyQvLC9eIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogJyR0YWduYW1lJyQvcCcgPCAkcHJvZ3BhdGhgIgorCWVsc2UKKwkgICRlY2hvICIkcHJvZ25hbWU6IGlnbm9yaW5nIHVua25vd24gdGFnICR0YWduYW1lIiAxPiYyCisJZmkKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKyAgICAqKQorICAgICAgZXZhbCAiJHByZXY9XCRhcmciCisgICAgICA7OworICAgIGVzYWMKKworICAgIHByZXY9CisgICAgcHJldm9wdD0KKyAgICBjb250aW51ZQorICBmaQorCisgICMgSGF2ZSB3ZSBzZWVuIGEgbm9uLW9wdGlvbmFsIGFyZ3VtZW50IHlldD8KKyAgY2FzZSAkYXJnIGluCisgIC0taGVscCkKKyAgICBzaG93X2hlbHA9eWVzCisgICAgOzsKKworICAtLXZlcnNpb24pCisgICAgJGVjaG8gIiRQUk9HUkFNIChHTlUgJFBBQ0tBR0UpICRWRVJTSU9OJFRJTUVTVEFNUCIKKyAgICAkZWNobworICAgICRlY2hvICJDb3B5cmlnaHQgKEMpIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiIKKyAgICAkZWNobyAiVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8iCisgICAgJGVjaG8gIndhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiIKKyAgICBleGl0ICQ/CisgICAgOzsKKworICAtLWNvbmZpZykKKyAgICAke1NFRH0gLWUgJzEsL14jICMjIyBCRUdJTiBMSUJUT09MIENPTkZJRy9kJyAtZSAnL14jICMjIyBFTkQgTElCVE9PTCBDT05GSUcvLCRkJyAkcHJvZ3BhdGgKKyAgICAjIE5vdyBwcmludCB0aGUgY29uZmlndXJhdGlvbnMgZm9yIHRoZSB0YWdzLgorICAgIGZvciB0YWduYW1lIGluICR0YWdsaXN0OyBkbworICAgICAgJHtTRUR9IC1uIC1lICIvXiMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWUkLywvXiMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6ICR0YWduYW1lJC9wIiA8ICIkcHJvZ3BhdGgiCisgICAgZG9uZQorICAgIGV4aXQgJD8KKyAgICA7OworCisgIC0tZGVidWcpCisgICAgJGVjaG8gIiRwcm9nbmFtZTogZW5hYmxpbmcgc2hlbGwgdHJhY2UgbW9kZSIKKyAgICBzZXQgLXgKKyAgICBwcmVzZXJ2ZV9hcmdzPSIkcHJlc2VydmVfYXJncyAkYXJnIgorICAgIDs7CisKKyAgLS1kcnktcnVuIHwgLW4pCisgICAgcnVuPToKKyAgICA7OworCisgIC0tZmVhdHVyZXMpCisgICAgJGVjaG8gImhvc3Q6ICRob3N0IgorICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisgICAgICAkZWNobyAiZW5hYmxlIHNoYXJlZCBsaWJyYXJpZXMiCisgICAgZWxzZQorICAgICAgJGVjaG8gImRpc2FibGUgc2hhcmVkIGxpYnJhcmllcyIKKyAgICBmaQorICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KKyAgICAgICRlY2hvICJlbmFibGUgc3RhdGljIGxpYnJhcmllcyIKKyAgICBlbHNlCisgICAgICAkZWNobyAiZGlzYWJsZSBzdGF0aWMgbGlicmFyaWVzIgorICAgIGZpCisgICAgZXhpdCAkPworICAgIDs7CisKKyAgLS1maW5pc2gpIG1vZGU9ImZpbmlzaCIgOzsKKworICAtLW1vZGUpIHByZXZvcHQ9Ii0tbW9kZSIgcHJldj1tb2RlIDs7CisgIC0tbW9kZT0qKSBtb2RlPSIkb3B0YXJnIiA7OworCisgIC0tcHJlc2VydmUtZHVwLWRlcHMpIGR1cGxpY2F0ZV9kZXBzPSJ5ZXMiIDs7CisKKyAgLS1xdWlldCB8IC0tc2lsZW50KQorICAgIHNob3c9OgorICAgIHByZXNlcnZlX2FyZ3M9IiRwcmVzZXJ2ZV9hcmdzICRhcmciCisgICAgOzsKKworICAtLXRhZykKKyAgICBwcmV2b3B0PSItLXRhZyIKKyAgICBwcmV2PXRhZworICAgIHByZXNlcnZlX2FyZ3M9IiRwcmVzZXJ2ZV9hcmdzIC0tdGFnIgorICAgIDs7CisgIC0tdGFnPSopCisgICAgc2V0IHRhZyAiJG9wdGFyZyIgJHsxKyIkQCJ9CisgICAgc2hpZnQKKyAgICBwcmV2PXRhZworICAgIHByZXNlcnZlX2FyZ3M9IiRwcmVzZXJ2ZV9hcmdzIC0tdGFnIgorICAgIDs7CisKKyAgLWRsb3BlbikKKyAgICBwcmV2b3B0PSItZGxvcGVuIgorICAgIHByZXY9ZXhlY3V0ZV9kbGZpbGVzCisgICAgOzsKKworICAtKikKKyAgICAkZWNobyAiJG1vZGVuYW1lOiB1bnJlY29nbml6ZWQgb3B0aW9uIFxgJGFyZyciIDE+JjIKKyAgICAkZWNobyAiJGhlbHAiIDE+JjIKKyAgICBleGl0ICRFWElUX0ZBSUxVUkUKKyAgICA7OworCisgICopCisgICAgbm9ub3B0PSIkYXJnIgorICAgIGJyZWFrCisgICAgOzsKKyAgZXNhYworZG9uZQorCitpZiB0ZXN0IC1uICIkcHJldm9wdCI7IHRoZW4KKyAgJGVjaG8gIiRtb2RlbmFtZTogb3B0aW9uIFxgJHByZXZvcHQnIHJlcXVpcmVzIGFuIGFyZ3VtZW50IiAxPiYyCisgICRlY2hvICIkaGVscCIgMT4mMgorICBleGl0ICRFWElUX0ZBSUxVUkUKK2ZpCisKK2Nhc2UgJGRpc2FibGVfbGlicyBpbgorbm8pIAorICA7Oworc2hhcmVkKQorICBidWlsZF9saWJ0b29sX2xpYnM9bm8KKyAgYnVpbGRfb2xkX2xpYnM9eWVzCisgIDs7CitzdGF0aWMpCisgIGJ1aWxkX29sZF9saWJzPWBjYXNlICRidWlsZF9saWJ0b29sX2xpYnMgaW4geWVzKSBlY2hvIG5vOzsgKikgZWNobyB5ZXM7OyBlc2FjYAorICA7OworZXNhYworCisjIElmIHRoaXMgdmFyaWFibGUgaXMgc2V0IGluIGFueSBvZiB0aGUgYWN0aW9ucywgdGhlIGNvbW1hbmQgaW4gaXQKKyMgd2lsbCBiZSBleGVjZWQgYXQgdGhlIGVuZC4gIFRoaXMgcHJldmVudHMgaGVyZS1kb2N1bWVudHMgZnJvbSBiZWluZworIyBsZWZ0IG92ZXIgYnkgc2hlbGxzLgorZXhlY19jbWQ9CisKK2lmIHRlc3QgLXogIiRzaG93X2hlbHAiOyB0aGVuCisKKyAgIyBJbmZlciB0aGUgb3BlcmF0aW9uIG1vZGUuCisgIGlmIHRlc3QgLXogIiRtb2RlIjsgdGhlbgorICAgICRlY2hvICIqKiogV2FybmluZzogaW5mZXJyaW5nIHRoZSBtb2RlIG9mIG9wZXJhdGlvbiBpcyBkZXByZWNhdGVkLiIgMT4mMgorICAgICRlY2hvICIqKiogRnV0dXJlIHZlcnNpb25zIG9mIExpYnRvb2wgd2lsbCByZXF1aXJlIC0tbW9kZT1NT0RFIGJlIHNwZWNpZmllZC4iIDE+JjIKKyAgICBjYXNlICRub25vcHQgaW4KKyAgICAqY2MgfCBjYyogfCAqKysgfCBnY2MqIHwgKi1nY2MqIHwgZysrKiB8IHhsYyopCisgICAgICBtb2RlPWxpbmsKKyAgICAgIGZvciBhcmcKKyAgICAgIGRvCisJY2FzZSAkYXJnIGluCisJLWMpCisJICAgbW9kZT1jb21waWxlCisJICAgYnJlYWsKKwkgICA7OworCWVzYWMKKyAgICAgIGRvbmUKKyAgICAgIDs7CisgICAgKmRiIHwgKmRieCB8ICpzdHJhY2UgfCAqdHJ1c3MpCisgICAgICBtb2RlPWV4ZWN1dGUKKyAgICAgIDs7CisgICAgKmluc3RhbGwqfGNwfG12KQorICAgICAgbW9kZT1pbnN0YWxsCisgICAgICA7OworICAgICpybSkKKyAgICAgIG1vZGU9dW5pbnN0YWxsCisgICAgICA7OworICAgICopCisgICAgICAjIElmIHdlIGhhdmUgbm8gbW9kZSwgYnV0IGRsZmlsZXMgd2VyZSBzcGVjaWZpZWQsIHRoZW4gZG8gZXhlY3V0ZSBtb2RlLgorICAgICAgdGVzdCAtbiAiJGV4ZWN1dGVfZGxmaWxlcyIgJiYgbW9kZT1leGVjdXRlCisKKyAgICAgICMgSnVzdCB1c2UgdGhlIGRlZmF1bHQgb3BlcmF0aW9uIG1vZGUuCisgICAgICBpZiB0ZXN0IC16ICIkbW9kZSI7IHRoZW4KKwlpZiB0ZXN0IC1uICIkbm9ub3B0IjsgdGhlbgorCSAgJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogY2Fubm90IGluZmVyIG9wZXJhdGlvbiBtb2RlIGZyb20gXGAkbm9ub3B0JyIgMT4mMgorCWVsc2UKKwkgICRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IGNhbm5vdCBpbmZlciBvcGVyYXRpb24gbW9kZSB3aXRob3V0IE1PREUtQVJHUyIgMT4mMgorCWZpCisgICAgICBmaQorICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisKKyAgIyBPbmx5IGV4ZWN1dGUgbW9kZSBpcyBhbGxvd2VkIHRvIGhhdmUgLWRsb3BlbiBmbGFncy4KKyAgaWYgdGVzdCAtbiAiJGV4ZWN1dGVfZGxmaWxlcyIgJiYgdGVzdCAiJG1vZGUiICE9IGV4ZWN1dGU7IHRoZW4KKyAgICAkZWNobyAiJG1vZGVuYW1lOiB1bnJlY29nbml6ZWQgb3B0aW9uIFxgLWRsb3BlbiciIDE+JjIKKyAgICAkZWNobyAiJGhlbHAiIDE+JjIKKyAgICBleGl0ICRFWElUX0ZBSUxVUkUKKyAgZmkKKworICAjIENoYW5nZSB0aGUgaGVscCBtZXNzYWdlIHRvIGEgbW9kZS1zcGVjaWZpYyBvbmUuCisgIGdlbmVyaWNfaGVscD0iJGhlbHAiCisgIGhlbHA9IlRyeSBcYCRtb2RlbmFtZSAtLWhlbHAgLS1tb2RlPSRtb2RlJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCisKKyAgIyBUaGVzZSBtb2RlcyBhcmUgaW4gb3JkZXIgb2YgZXhlY3V0aW9uIGZyZXF1ZW5jeSBzbyB0aGF0IHRoZXkgcnVuIHF1aWNrbHkuCisgIGNhc2UgJG1vZGUgaW4KKyAgIyBsaWJ0b29sIGNvbXBpbGUgbW9kZQorICBjb21waWxlKQorICAgIG1vZGVuYW1lPSIkbW9kZW5hbWU6IGNvbXBpbGUiCisgICAgIyBHZXQgdGhlIGNvbXBpbGF0aW9uIGNvbW1hbmQgYW5kIHRoZSBzb3VyY2UgZmlsZS4KKyAgICBiYXNlX2NvbXBpbGU9CisgICAgc3JjZmlsZT0iJG5vbm9wdCIgICMgIGFsd2F5cyBrZWVwIGEgbm9uLWVtcHR5IHZhbHVlIGluICJzcmNmaWxlIgorICAgIHN1cHByZXNzX29wdD15ZXMKKyAgICBzdXBwcmVzc19vdXRwdXQ9CisgICAgYXJnX21vZGU9bm9ybWFsCisgICAgbGlib2JqPQorICAgIGxhdGVyPQorCisgICAgZm9yIGFyZworICAgIGRvCisgICAgICBjYXNlICRhcmdfbW9kZSBpbgorICAgICAgYXJnICApCisJIyBkbyBub3QgImNvbnRpbnVlIi4gIEluc3RlYWQsIGFkZCB0aGlzIHRvIGJhc2VfY29tcGlsZQorCWxhc3Rhcmc9IiRhcmciCisJYXJnX21vZGU9bm9ybWFsCisJOzsKKworICAgICAgdGFyZ2V0ICkKKwlsaWJvYmo9IiRhcmciCisJYXJnX21vZGU9bm9ybWFsCisJY29udGludWUKKwk7OworCisgICAgICBub3JtYWwgKQorCSMgQWNjZXB0IGFueSBjb21tYW5kLWxpbmUgb3B0aW9ucy4KKwljYXNlICRhcmcgaW4KKwktbykKKwkgIGlmIHRlc3QgLW4gIiRsaWJvYmoiIDsgdGhlbgorCSAgICAkZWNobyAiJG1vZGVuYW1lOiB5b3UgY2Fubm90IHNwZWNpZnkgXGAtbycgbW9yZSB0aGFuIG9uY2UiIDE+JjIKKwkgICAgZXhpdCAkRVhJVF9GQUlMVVJFCisJICBmaQorCSAgYXJnX21vZGU9dGFyZ2V0CisJICBjb250aW51ZQorCSAgOzsKKworCS1zdGF0aWMgfCAtcHJlZmVyLXBpYyB8IC1wcmVmZXItbm9uLXBpYykKKwkgIGxhdGVyPSIkbGF0ZXIgJGFyZyIKKwkgIGNvbnRpbnVlCisJICA7OworCisJLW5vLXN1cHByZXNzKQorCSAgc3VwcHJlc3Nfb3B0PW5vCisJICBjb250aW51ZQorCSAgOzsKKworCS1YY29tcGlsZXIpCisJICBhcmdfbW9kZT1hcmcgICMgIHRoZSBuZXh0IG9uZSBnb2VzIGludG8gdGhlICJiYXNlX2NvbXBpbGUiIGFyZyBsaXN0CisJICBjb250aW51ZSAgICAgICMgIFRoZSBjdXJyZW50ICJzcmNmaWxlIiB3aWxsIGVpdGhlciBiZSByZXRhaW5lZCBvcgorCSAgOzsgICAgICAgICAgICAjICByZXBsYWNlZCBsYXRlci4gIEkgd291bGQgZ3Vlc3MgdGhhdCB3b3VsZCBiZSBhIGJ1Zy4KKworCS1XYywqKQorCSAgYXJncz1gJGVjaG8gIlgkYXJnIiB8ICRYc2VkIC1lICJzL14tV2MsLy8iYAorCSAgbGFzdGFyZz0KKwkgIHNhdmVfaWZzPSIkSUZTIjsgSUZTPScsJworIAkgIGZvciBhcmcgaW4gJGFyZ3M7IGRvCisJICAgIElGUz0iJHNhdmVfaWZzIgorCisJICAgICMgRG91YmxlLXF1b3RlIGFyZ3MgY29udGFpbmluZyBvdGhlciBzaGVsbCBtZXRhY2hhcmFjdGVycy4KKwkgICAgIyBNYW55IEJvdXJuZSBzaGVsbHMgY2Fubm90IGhhbmRsZSBjbG9zZSBicmFja2V0cyBjb3JyZWN0bHkKKwkgICAgIyBpbiBzY2FuIHNldHMsIHNvIHdlIHNwZWNpZnkgaXQgc2VwYXJhdGVseS4KKwkgICAgY2FzZSAkYXJnIGluCisJICAgICAgKltcW1x+XCNcXlwmXCpcKFwpXHtcfVx8XDtcPFw+XD9cJ1wgXAldKnwqXSp8IiIpCisJICAgICAgYXJnPSJcIiRhcmdcIiIKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIGxhc3Rhcmc9IiRsYXN0YXJnICRhcmciCisJICBkb25lCisJICBJRlM9IiRzYXZlX2lmcyIKKwkgIGxhc3Rhcmc9YCRlY2hvICJYJGxhc3RhcmciIHwgJFhzZWQgLWUgInMvXiAvLyJgCisKKwkgICMgQWRkIHRoZSBhcmd1bWVudHMgdG8gYmFzZV9jb21waWxlLgorCSAgYmFzZV9jb21waWxlPSIkYmFzZV9jb21waWxlICRsYXN0YXJnIgorCSAgY29udGludWUKKwkgIDs7CisKKwkqICkKKwkgICMgQWNjZXB0IHRoZSBjdXJyZW50IGFyZ3VtZW50IGFzIHRoZSBzb3VyY2UgZmlsZS4KKwkgICMgVGhlIHByZXZpb3VzICJzcmNmaWxlIiBiZWNvbWVzIHRoZSBjdXJyZW50IGFyZ3VtZW50LgorCSAgIworCSAgbGFzdGFyZz0iJHNyY2ZpbGUiCisJICBzcmNmaWxlPSIkYXJnIgorCSAgOzsKKwllc2FjICAjICBjYXNlICRhcmcKKwk7OworICAgICAgZXNhYyAgICAjICBjYXNlICRhcmdfbW9kZQorCisgICAgICAjIEFlc3RoZXRpY2FsbHkgcXVvdGUgdGhlIHByZXZpb3VzIGFyZ3VtZW50LgorICAgICAgbGFzdGFyZz1gJGVjaG8gIlgkbGFzdGFyZyIgfCAkWHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisKKyAgICAgIGNhc2UgJGxhc3RhcmcgaW4KKyAgICAgICMgRG91YmxlLXF1b3RlIGFyZ3MgY29udGFpbmluZyBvdGhlciBzaGVsbCBtZXRhY2hhcmFjdGVycy4KKyAgICAgICMgTWFueSBCb3VybmUgc2hlbGxzIGNhbm5vdCBoYW5kbGUgY2xvc2UgYnJhY2tldHMgY29ycmVjdGx5CisgICAgICAjIGluIHNjYW4gc2V0cywgYW5kIHNvbWUgU3VuT1Mga3NoIG1pc3RyZWF0IGJhY2tzbGFzaC1lc2NhcGluZworICAgICAgIyBpbiBzY2FuIHNldHMgKHdvcmtlZCBhcm91bmQgd2l0aCB2YXJpYWJsZSBleHBhbnNpb24pLAorICAgICAgIyBhbmQgZnVydGhlcm1vcmUgY2Fubm90IGhhbmRsZSAnfCcgJyYnICcoJyAnKScgaW4gc2NhbiBzZXRzIAorICAgICAgIyBhdCBhbGwsIHNvIHdlIHNwZWNpZnkgdGhlbSBzZXBhcmF0ZWx5LgorICAgICAgKltcW1x+XCNcXlwmXCpcKFwpXHtcfVx8XDtcPFw+XD9cJ1wgXAldKnwqXSp8IiIpCisJbGFzdGFyZz0iXCIkbGFzdGFyZ1wiIgorCTs7CisgICAgICBlc2FjCisKKyAgICAgIGJhc2VfY29tcGlsZT0iJGJhc2VfY29tcGlsZSAkbGFzdGFyZyIKKyAgICBkb25lICMgZm9yIGFyZworCisgICAgY2FzZSAkYXJnX21vZGUgaW4KKyAgICBhcmcpCisgICAgICAkZWNobyAiJG1vZGVuYW1lOiB5b3UgbXVzdCBzcGVjaWZ5IGFuIGFyZ3VtZW50IGZvciAtWGNvbXBpbGUiCisgICAgICBleGl0ICRFWElUX0ZBSUxVUkUKKyAgICAgIDs7CisgICAgdGFyZ2V0KQorICAgICAgJGVjaG8gIiRtb2RlbmFtZTogeW91IG11c3Qgc3BlY2lmeSBhIHRhcmdldCB3aXRoIFxgLW8nIiAxPiYyCisgICAgICBleGl0ICRFWElUX0ZBSUxVUkUKKyAgICAgIDs7CisgICAgKikKKyAgICAgICMgR2V0IHRoZSBuYW1lIG9mIHRoZSBsaWJyYXJ5IG9iamVjdC4KKyAgICAgIFsgLXogIiRsaWJvYmoiIF0gJiYgbGlib2JqPWAkZWNobyAiWCRzcmNmaWxlIiB8ICRYc2VkIC1lICdzJV4uKi8lJSdgCisgICAgICA7OworICAgIGVzYWMKKworICAgICMgUmVjb2duaXplIHNldmVyYWwgZGlmZmVyZW50IGZpbGUgc3VmZml4ZXMuCisgICAgIyBJZiB0aGUgdXNlciBzcGVjaWZpZXMgLW8gZmlsZS5vLCBpdCBpcyByZXBsYWNlZCB3aXRoIGZpbGUubG8KKyAgICB4Zm9ybT0nW2NDRlNpZm1zb10nCisgICAgY2FzZSAkbGlib2JqIGluCisgICAgKi5hZGEpIHhmb3JtPWFkYSA7OworICAgICouYWRiKSB4Zm9ybT1hZGIgOzsKKyAgICAqLmFkcykgeGZvcm09YWRzIDs7CisgICAgKi5hc20pIHhmb3JtPWFzbSA7OworICAgICouYysrKSB4Zm9ybT1jKysgOzsKKyAgICAqLmNjKSB4Zm9ybT1jYyA7OworICAgICouaWkpIHhmb3JtPWlpIDs7CisgICAgKi5jbGFzcykgeGZvcm09Y2xhc3MgOzsKKyAgICAqLmNwcCkgeGZvcm09Y3BwIDs7CisgICAgKi5jeHgpIHhmb3JtPWN4eCA7OworICAgICouZjkwKSB4Zm9ybT1mOTAgOzsKKyAgICAqLmZvcikgeGZvcm09Zm9yIDs7CisgICAgKi5qYXZhKSB4Zm9ybT1qYXZhIDs7CisgICAgKi5vYmopIHhmb3JtPW9iaiA7OworICAgIGVzYWMKKworICAgIGxpYm9iaj1gJGVjaG8gIlgkbGlib2JqIiB8ICRYc2VkIC1lICJzL1wuJHhmb3JtJC8ubG8vImAKKworICAgIGNhc2UgJGxpYm9iaiBpbgorICAgICoubG8pIG9iaj1gJGVjaG8gIlgkbGlib2JqIiB8ICRYc2VkIC1lICIkbG8ybyJgIDs7CisgICAgKikKKyAgICAgICRlY2hvICIkbW9kZW5hbWU6IGNhbm5vdCBkZXRlcm1pbmUgbmFtZSBvZiBsaWJyYXJ5IG9iamVjdCBmcm9tIFxgJGxpYm9iaiciIDE+JjIKKyAgICAgIGV4aXQgJEVYSVRfRkFJTFVSRQorICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBmdW5jX2luZmVyX3RhZyAkYmFzZV9jb21waWxlCisKKyAgICBmb3IgYXJnIGluICRsYXRlcjsgZG8KKyAgICAgIGNhc2UgJGFyZyBpbgorICAgICAgLXN0YXRpYykKKwlidWlsZF9vbGRfbGlicz15ZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1wcmVmZXItcGljKQorCXBpY19tb2RlPXllcworCWNvbnRpbnVlCisJOzsKKworICAgICAgLXByZWZlci1ub24tcGljKQorCXBpY19tb2RlPW5vCisJY29udGludWUKKwk7OworICAgICAgZXNhYworICAgIGRvbmUKKworICAgIHFsaWJvYmo9YCRlY2hvICJYJGxpYm9iaiIgfCAkWHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisgICAgY2FzZSAkcWxpYm9iaiBpbgorICAgICAgKltcW1x+XCNcXlwmXCpcKFwpXHtcfVx8XDtcPFw+XD9cJ1wgXAldKnwqXSp8IiIpCisJcWxpYm9iaj0iXCIkcWxpYm9ialwiIiA7OworICAgIGVzYWMKKyAgICB0ZXN0ICJYJGxpYm9iaiIgIT0gIlgkcWxpYm9iaiIgXAorCSYmICRlY2hvICJYJGxpYm9iaiIgfCBncmVwICdbXX4jXip7fTs8Pj8iJyInIicgCSYoKXxgJFtdJyBcCisJJiYgJGVjaG8gIiRtb2RlbmFtZTogbGlib2JqIG5hbWUgXGAkbGlib2JqJyBtYXkgbm90IGNvbnRhaW4gc2hlbGwgc3BlY2lhbCBjaGFyYWN0ZXJzLiIKKyAgICBvYmpuYW1lPWAkZWNobyAiWCRvYmoiIHwgJFhzZWQgLWUgJ3MlXi4qLyUlJ2AKKyAgICB4ZGlyPWAkZWNobyAiWCRvYmoiIHwgJFhzZWQgLWUgJ3MlL1teL10qJCUlJ2AKKyAgICBpZiB0ZXN0ICJYJHhkaXIiID0gIlgkb2JqIjsgdGhlbgorICAgICAgeGRpcj0KKyAgICBlbHNlCisgICAgICB4ZGlyPSR4ZGlyLworICAgIGZpCisgICAgbG9iaj0ke3hkaXJ9JG9iamRpci8kb2JqbmFtZQorCisgICAgaWYgdGVzdCAteiAiJGJhc2VfY29tcGlsZSI7IHRoZW4KKyAgICAgICRlY2hvICIkbW9kZW5hbWU6IHlvdSBtdXN0IHNwZWNpZnkgYSBjb21waWxhdGlvbiBjb21tYW5kIiAxPiYyCisgICAgICAkZWNobyAiJGhlbHAiIDE+JjIKKyAgICAgIGV4aXQgJEVYSVRfRkFJTFVSRQorICAgIGZpCisKKyAgICAjIERlbGV0ZSBhbnkgbGVmdG92ZXIgbGlicmFyeSBvYmplY3RzLgorICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KKyAgICAgIHJlbW92ZWxpc3Q9IiRvYmogJGxvYmogJGxpYm9iaiAke2xpYm9ian1UIgorICAgIGVsc2UKKyAgICAgIHJlbW92ZWxpc3Q9IiRsb2JqICRsaWJvYmogJHtsaWJvYmp9VCIKKyAgICBmaQorCisgICAgJHJ1biAkcm0gJHJlbW92ZWxpc3QKKyAgICB0cmFwICIkcnVuICRybSAkcmVtb3ZlbGlzdDsgZXhpdCAkRVhJVF9GQUlMVVJFIiAxIDIgMTUKKworICAgICMgT24gQ3lnd2luIHRoZXJlJ3Mgbm8gInJlYWwiIFBJQyBmbGFnIHNvIHdlIG11c3QgYnVpbGQgYm90aCBvYmplY3QgdHlwZXMKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgb3MyKikKKyAgICAgIHBpY19tb2RlPWRlZmF1bHQKKyAgICAgIDs7CisgICAgZXNhYworICAgIGlmIHRlc3QgIiRwaWNfbW9kZSIgPSBubyAmJiB0ZXN0ICIkZGVwbGlic19jaGVja19tZXRob2QiICE9IHBhc3NfYWxsOyB0aGVuCisgICAgICAjIG5vbi1QSUMgY29kZSBpbiBzaGFyZWQgbGlicmFyaWVzIGlzIG5vdCBzdXBwb3J0ZWQKKyAgICAgIHBpY19tb2RlPWRlZmF1bHQKKyAgICBmaQorCisgICAgIyBDYWxjdWxhdGUgdGhlIGZpbGVuYW1lIG9mIHRoZSBvdXRwdXQgb2JqZWN0IGlmIGNvbXBpbGVyIGRvZXMKKyAgICAjIG5vdCBzdXBwb3J0IC1vIHdpdGggLWMKKyAgICBpZiB0ZXN0ICIkY29tcGlsZXJfY19vIiA9IG5vOyB0aGVuCisgICAgICBvdXRwdXRfb2JqPWAkZWNobyAiWCRzcmNmaWxlIiB8ICRYc2VkIC1lICdzJV4uKi8lJScgLWUgJ3MlXC5bXi5dKiQlJSdgLiR7b2JqZXh0fQorICAgICAgbG9ja2ZpbGU9IiRvdXRwdXRfb2JqLmxvY2siCisgICAgICByZW1vdmVsaXN0PSIkcmVtb3ZlbGlzdCAkb3V0cHV0X29iaiAkbG9ja2ZpbGUiCisgICAgICB0cmFwICIkcnVuICRybSAkcmVtb3ZlbGlzdDsgZXhpdCAkRVhJVF9GQUlMVVJFIiAxIDIgMTUKKyAgICBlbHNlCisgICAgICBvdXRwdXRfb2JqPQorICAgICAgbmVlZF9sb2Nrcz1ubworICAgICAgbG9ja2ZpbGU9CisgICAgZmkKKworICAgICMgTG9jayB0aGlzIGNyaXRpY2FsIHNlY3Rpb24gaWYgaXQgaXMgbmVlZGVkCisgICAgIyBXZSB1c2UgdGhpcyBzY3JpcHQgZmlsZSB0byBtYWtlIHRoZSBsaW5rLCBpdCBhdm9pZHMgY3JlYXRpbmcgYSBuZXcgZmlsZQorICAgIGlmIHRlc3QgIiRuZWVkX2xvY2tzIiA9IHllczsgdGhlbgorICAgICAgdW50aWwgJHJ1biBsbiAiJHByb2dwYXRoIiAiJGxvY2tmaWxlIiAyPi9kZXYvbnVsbDsgZG8KKwkkc2hvdyAiV2FpdGluZyBmb3IgJGxvY2tmaWxlIHRvIGJlIHJlbW92ZWQiCisJc2xlZXAgMgorICAgICAgZG9uZQorICAgIGVsaWYgdGVzdCAiJG5lZWRfbG9ja3MiID0gd2FybjsgdGhlbgorICAgICAgaWYgdGVzdCAtZiAiJGxvY2tmaWxlIjsgdGhlbgorCSRlY2hvICJcCisqKiogRVJST1IsICRsb2NrZmlsZSBleGlzdHMgYW5kIGNvbnRhaW5zOgorYGNhdCAkbG9ja2ZpbGUgMj4vZGV2L251bGxgCisKK1RoaXMgaW5kaWNhdGVzIHRoYXQgYW5vdGhlciBwcm9jZXNzIGlzIHRyeWluZyB0byB1c2UgdGhlIHNhbWUKK3RlbXBvcmFyeSBvYmplY3QgZmlsZSwgYW5kIGxpYnRvb2wgY291bGQgbm90IHdvcmsgYXJvdW5kIGl0IGJlY2F1c2UKK3lvdXIgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydCBcYC1jJyBhbmQgXGAtbycgdG9nZXRoZXIuICBJZiB5b3UKK3JlcGVhdCB0aGlzIGNvbXBpbGF0aW9uLCBpdCBtYXkgc3VjY2VlZCwgYnkgY2hhbmNlLCBidXQgeW91IGhhZCBiZXR0ZXIKK2F2b2lkIHBhcmFsbGVsIGJ1aWxkcyAobWFrZSAtaikgaW4gdGhpcyBwbGF0Zm9ybSwgb3IgZ2V0IGEgYmV0dGVyCitjb21waWxlci4iCisKKwkkcnVuICRybSAkcmVtb3ZlbGlzdAorCWV4aXQgJEVYSVRfRkFJTFVSRQorICAgICAgZmkKKyAgICAgICRlY2hvICIkc3JjZmlsZSIgPiAiJGxvY2tmaWxlIgorICAgIGZpCisKKyAgICBpZiB0ZXN0IC1uICIkZml4X3NyY2ZpbGVfcGF0aCI7IHRoZW4KKyAgICAgIGV2YWwgc3JjZmlsZT1cIiRmaXhfc3JjZmlsZV9wYXRoXCIKKyAgICBmaQorICAgIHFzcmNmaWxlPWAkZWNobyAiWCRzcmNmaWxlIiB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKyAgICBjYXNlICRxc3JjZmlsZSBpbgorICAgICAgKltcW1x+XCNcXlwmXCpcKFwpXHtcfVx8XDtcPFw+XD9cJ1wgXAldKnwqXSp8IiIpCisgICAgICBxc3JjZmlsZT0iXCIkcXNyY2ZpbGVcIiIgOzsKKyAgICBlc2FjCisKKyAgICAkcnVuICRybSAiJGxpYm9iaiIgIiR7bGlib2JqfVQiCisKKyAgICAjIENyZWF0ZSBhIGxpYnRvb2wgb2JqZWN0IGZpbGUgKGFuYWxvZ291cyB0byBhICIubGEiIGZpbGUpLAorICAgICMgYnV0IGRvbid0IGNyZWF0ZSBpdCBpZiB3ZSdyZSBkb2luZyBhIGRyeSBydW4uCisgICAgdGVzdCAteiAiJHJ1biIgJiYgY2F0ID4gJHtsaWJvYmp9VCA8PEVPRgorIyAkbGlib2JqIC0gYSBsaWJ0b29sIG9iamVjdCBmaWxlCisjIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAtIEdOVSAkUEFDS0FHRSAkVkVSU0lPTiRUSU1FU1RBTVAKKyMKKyMgUGxlYXNlIERPIE5PVCBkZWxldGUgdGhpcyBmaWxlIQorIyBJdCBpcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgdGhlIGxpYnJhcnkuCisKKyMgTmFtZSBvZiB0aGUgUElDIG9iamVjdC4KK0VPRgorCisgICAgIyBPbmx5IGJ1aWxkIGEgUElDIG9iamVjdCBpZiB3ZSBhcmUgYnVpbGRpbmcgbGlidG9vbCBsaWJyYXJpZXMuCisgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KKyAgICAgICMgV2l0aG91dCB0aGlzIGFzc2lnbm1lbnQsIGJhc2VfY29tcGlsZSBnZXRzIGVtcHRpZWQuCisgICAgICBmYnNkX2hpZGVvdXNfc2hfYnVnPSRiYXNlX2NvbXBpbGUKKworICAgICAgaWYgdGVzdCAiJHBpY19tb2RlIiAhPSBubzsgdGhlbgorCWNvbW1hbmQ9IiRiYXNlX2NvbXBpbGUgJHFzcmNmaWxlICRwaWNfZmxhZyIKKyAgICAgIGVsc2UKKwkjIERvbid0IGJ1aWxkIFBJQyBjb2RlCisJY29tbWFuZD0iJGJhc2VfY29tcGlsZSAkcXNyY2ZpbGUiCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0ICEgLWQgIiR7eGRpcn0kb2JqZGlyIjsgdGhlbgorCSRzaG93ICIkbWtkaXIgJHt4ZGlyfSRvYmpkaXIiCisJJHJ1biAkbWtkaXIgJHt4ZGlyfSRvYmpkaXIKKwlleGl0X3N0YXR1cz0kPworCWlmIHRlc3QgIiRleGl0X3N0YXR1cyIgLW5lIDAgJiYgdGVzdCAhIC1kICIke3hkaXJ9JG9iamRpciI7IHRoZW4KKwkgIGV4aXQgJGV4aXRfc3RhdHVzCisJZmkKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgLXogIiRvdXRwdXRfb2JqIjsgdGhlbgorCSMgUGxhY2UgUElDIG9iamVjdHMgaW4gJG9iamRpcgorCWNvbW1hbmQ9IiRjb21tYW5kIC1vICRsb2JqIgorICAgICAgZmkKKworICAgICAgJHJ1biAkcm0gIiRsb2JqIiAiJG91dHB1dF9vYmoiCisKKyAgICAgICRzaG93ICIkY29tbWFuZCIKKyAgICAgIGlmICRydW4gZXZhbCAiJGNvbW1hbmQiOyB0aGVuIDoKKyAgICAgIGVsc2UKKwl0ZXN0IC1uICIkb3V0cHV0X29iaiIgJiYgJHJ1biAkcm0gJHJlbW92ZWxpc3QKKwlleGl0ICRFWElUX0ZBSUxVUkUKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgIiRuZWVkX2xvY2tzIiA9IHdhcm4gJiYKKwkgdGVzdCAiWGBjYXQgJGxvY2tmaWxlIDI+L2Rldi9udWxsYCIgIT0gIlgkc3JjZmlsZSI7IHRoZW4KKwkkZWNobyAiXAorKioqIEVSUk9SLCAkbG9ja2ZpbGUgY29udGFpbnM6CitgY2F0ICRsb2NrZmlsZSAyPi9kZXYvbnVsbGAKKworYnV0IGl0IHNob3VsZCBjb250YWluOgorJHNyY2ZpbGUKKworVGhpcyBpbmRpY2F0ZXMgdGhhdCBhbm90aGVyIHByb2Nlc3MgaXMgdHJ5aW5nIHRvIHVzZSB0aGUgc2FtZQordGVtcG9yYXJ5IG9iamVjdCBmaWxlLCBhbmQgbGlidG9vbCBjb3VsZCBub3Qgd29yayBhcm91bmQgaXQgYmVjYXVzZQoreW91ciBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0IFxgLWMnIGFuZCBcYC1vJyB0b2dldGhlci4gIElmIHlvdQorcmVwZWF0IHRoaXMgY29tcGlsYXRpb24sIGl0IG1heSBzdWNjZWVkLCBieSBjaGFuY2UsIGJ1dCB5b3UgaGFkIGJldHRlcgorYXZvaWQgcGFyYWxsZWwgYnVpbGRzIChtYWtlIC1qKSBpbiB0aGlzIHBsYXRmb3JtLCBvciBnZXQgYSBiZXR0ZXIKK2NvbXBpbGVyLiIKKworCSRydW4gJHJtICRyZW1vdmVsaXN0CisJZXhpdCAkRVhJVF9GQUlMVVJFCisgICAgICBmaQorCisgICAgICAjIEp1c3QgbW92ZSB0aGUgb2JqZWN0IGlmIG5lZWRlZCwgdGhlbiBnbyBvbiB0byBjb21waWxlIHRoZSBuZXh0IG9uZQorICAgICAgaWYgdGVzdCAtbiAiJG91dHB1dF9vYmoiICYmIHRlc3QgIlgkb3V0cHV0X29iaiIgIT0gIlgkbG9iaiI7IHRoZW4KKwkkc2hvdyAiJG12ICRvdXRwdXRfb2JqICRsb2JqIgorCWlmICRydW4gJG12ICRvdXRwdXRfb2JqICRsb2JqOyB0aGVuIDoKKwllbHNlCisJICBlcnJvcj0kPworCSAgJHJ1biAkcm0gJHJlbW92ZWxpc3QKKwkgIGV4aXQgJGVycm9yCisJZmkKKyAgICAgIGZpCisKKyAgICAgICMgQXBwZW5kIHRoZSBuYW1lIG9mIHRoZSBQSUMgb2JqZWN0IHRvIHRoZSBsaWJ0b29sIG9iamVjdCBmaWxlLgorICAgICAgdGVzdCAteiAiJHJ1biIgJiYgY2F0ID4+ICR7bGlib2JqfVQgPDxFT0YKK3BpY19vYmplY3Q9JyRvYmpkaXIvJG9iam5hbWUnCisKK0VPRgorCisgICAgICAjIEFsbG93IGVycm9yIG1lc3NhZ2VzIG9ubHkgZnJvbSB0aGUgZmlyc3QgY29tcGlsYXRpb24uCisgICAgICBpZiB0ZXN0ICIkc3VwcHJlc3Nfb3B0IiA9IHllczsgdGhlbgorICAgICAgICBzdXBwcmVzc19vdXRwdXQ9JyA+L2Rldi9udWxsIDI+JjEnCisgICAgICBmaQorICAgIGVsc2UKKyAgICAgICMgTm8gUElDIG9iamVjdCBzbyBpbmRpY2F0ZSBpdCBkb2Vzbid0IGV4aXN0IGluIHRoZSBsaWJ0b29sCisgICAgICAjIG9iamVjdCBmaWxlLgorICAgICAgdGVzdCAteiAiJHJ1biIgJiYgY2F0ID4+ICR7bGlib2JqfVQgPDxFT0YKK3BpY19vYmplY3Q9bm9uZQorCitFT0YKKyAgICBmaQorCisgICAgIyBPbmx5IGJ1aWxkIGEgcG9zaXRpb24tZGVwZW5kZW50IG9iamVjdCBpZiB3ZSBidWlsZCBvbGQgbGlicmFyaWVzLgorICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KKyAgICAgIGlmIHRlc3QgIiRwaWNfbW9kZSIgIT0geWVzOyB0aGVuCisJIyBEb24ndCBidWlsZCBQSUMgY29kZQorCWNvbW1hbmQ9IiRiYXNlX2NvbXBpbGUgJHFzcmNmaWxlIgorICAgICAgZWxzZQorCWNvbW1hbmQ9IiRiYXNlX2NvbXBpbGUgJHFzcmNmaWxlICRwaWNfZmxhZyIKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkY29tcGlsZXJfY19vIiA9IHllczsgdGhlbgorCWNvbW1hbmQ9IiRjb21tYW5kIC1vICRvYmoiCisgICAgICBmaQorCisgICAgICAjIFN1cHByZXNzIGNvbXBpbGVyIG91dHB1dCBpZiB3ZSBhbHJlYWR5IGRpZCBhIFBJQyBjb21waWxhdGlvbi4KKyAgICAgIGNvbW1hbmQ9IiRjb21tYW5kJHN1cHByZXNzX291dHB1dCIKKyAgICAgICRydW4gJHJtICIkb2JqIiAiJG91dHB1dF9vYmoiCisgICAgICAkc2hvdyAiJGNvbW1hbmQiCisgICAgICBpZiAkcnVuIGV2YWwgIiRjb21tYW5kIjsgdGhlbiA6CisgICAgICBlbHNlCisJJHJ1biAkcm0gJHJlbW92ZWxpc3QKKwlleGl0ICRFWElUX0ZBSUxVUkUKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgIiRuZWVkX2xvY2tzIiA9IHdhcm4gJiYKKwkgdGVzdCAiWGBjYXQgJGxvY2tmaWxlIDI+L2Rldi9udWxsYCIgIT0gIlgkc3JjZmlsZSI7IHRoZW4KKwkkZWNobyAiXAorKioqIEVSUk9SLCAkbG9ja2ZpbGUgY29udGFpbnM6CitgY2F0ICRsb2NrZmlsZSAyPi9kZXYvbnVsbGAKKworYnV0IGl0IHNob3VsZCBjb250YWluOgorJHNyY2ZpbGUKKworVGhpcyBpbmRpY2F0ZXMgdGhhdCBhbm90aGVyIHByb2Nlc3MgaXMgdHJ5aW5nIHRvIHVzZSB0aGUgc2FtZQordGVtcG9yYXJ5IG9iamVjdCBmaWxlLCBhbmQgbGlidG9vbCBjb3VsZCBub3Qgd29yayBhcm91bmQgaXQgYmVjYXVzZQoreW91ciBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0IFxgLWMnIGFuZCBcYC1vJyB0b2dldGhlci4gIElmIHlvdQorcmVwZWF0IHRoaXMgY29tcGlsYXRpb24sIGl0IG1heSBzdWNjZWVkLCBieSBjaGFuY2UsIGJ1dCB5b3UgaGFkIGJldHRlcgorYXZvaWQgcGFyYWxsZWwgYnVpbGRzIChtYWtlIC1qKSBpbiB0aGlzIHBsYXRmb3JtLCBvciBnZXQgYSBiZXR0ZXIKK2NvbXBpbGVyLiIKKworCSRydW4gJHJtICRyZW1vdmVsaXN0CisJZXhpdCAkRVhJVF9GQUlMVVJFCisgICAgICBmaQorCisgICAgICAjIEp1c3QgbW92ZSB0aGUgb2JqZWN0IGlmIG5lZWRlZAorICAgICAgaWYgdGVzdCAtbiAiJG91dHB1dF9vYmoiICYmIHRlc3QgIlgkb3V0cHV0X29iaiIgIT0gIlgkb2JqIjsgdGhlbgorCSRzaG93ICIkbXYgJG91dHB1dF9vYmogJG9iaiIKKwlpZiAkcnVuICRtdiAkb3V0cHV0X29iaiAkb2JqOyB0aGVuIDoKKwllbHNlCisJICBlcnJvcj0kPworCSAgJHJ1biAkcm0gJHJlbW92ZWxpc3QKKwkgIGV4aXQgJGVycm9yCisJZmkKKyAgICAgIGZpCisKKyAgICAgICMgQXBwZW5kIHRoZSBuYW1lIG9mIHRoZSBub24tUElDIG9iamVjdCB0aGUgbGlidG9vbCBvYmplY3QgZmlsZS4KKyAgICAgICMgT25seSBhcHBlbmQgaWYgdGhlIGxpYnRvb2wgb2JqZWN0IGZpbGUgZXhpc3RzLgorICAgICAgdGVzdCAteiAiJHJ1biIgJiYgY2F0ID4+ICR7bGlib2JqfVQgPDxFT0YKKyMgTmFtZSBvZiB0aGUgbm9uLVBJQyBvYmplY3QuCitub25fcGljX29iamVjdD0nJG9iam5hbWUnCisKK0VPRgorICAgIGVsc2UKKyAgICAgICMgQXBwZW5kIHRoZSBuYW1lIG9mIHRoZSBub24tUElDIG9iamVjdCB0aGUgbGlidG9vbCBvYmplY3QgZmlsZS4KKyAgICAgICMgT25seSBhcHBlbmQgaWYgdGhlIGxpYnRvb2wgb2JqZWN0IGZpbGUgZXhpc3RzLgorICAgICAgdGVzdCAteiAiJHJ1biIgJiYgY2F0ID4+ICR7bGlib2JqfVQgPDxFT0YKKyMgTmFtZSBvZiB0aGUgbm9uLVBJQyBvYmplY3QuCitub25fcGljX29iamVjdD1ub25lCisKK0VPRgorICAgIGZpCisKKyAgICAkcnVuICRtdiAiJHtsaWJvYmp9VCIgIiR7bGlib2JqfSIKKworICAgICMgVW5sb2NrIHRoZSBjcml0aWNhbCBzZWN0aW9uIGlmIGl0IHdhcyBsb2NrZWQKKyAgICBpZiB0ZXN0ICIkbmVlZF9sb2NrcyIgIT0gbm87IHRoZW4KKyAgICAgICRydW4gJHJtICIkbG9ja2ZpbGUiCisgICAgZmkKKworICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworICAgIDs7CisKKyAgIyBsaWJ0b29sIGxpbmsgbW9kZQorICBsaW5rIHwgcmVsaW5rKQorICAgIG1vZGVuYW1lPSIkbW9kZW5hbWU6IGxpbmsiCisgICAgY2FzZSAkaG9zdCBpbgorICAgICotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqKQorICAgICAgIyBJdCBpcyBpbXBvc3NpYmxlIHRvIGxpbmsgYSBkbGwgd2l0aG91dCB0aGlzIHNldHRpbmcsIGFuZAorICAgICAgIyB3ZSBzaG91bGRuJ3QgZm9yY2UgdGhlIG1ha2VmaWxlIG1haW50YWluZXIgdG8gZmlndXJlIG91dAorICAgICAgIyB3aGljaCBzeXN0ZW0gd2UgYXJlIGNvbXBpbGluZyBmb3IgaW4gb3JkZXIgdG8gcGFzcyBhbiBleHRyYQorICAgICAgIyBmbGFnIGZvciBldmVyeSBsaWJ0b29sIGludm9jYXRpb24uCisgICAgICAjIGFsbG93X3VuZGVmaW5lZD1ubworCisgICAgICAjIEZJWE1FOiBVbmZvcnR1bmF0ZWx5LCB0aGVyZSBhcmUgcHJvYmxlbXMgd2l0aCB0aGUgYWJvdmUgd2hlbiB0cnlpbmcKKyAgICAgICMgdG8gbWFrZSBhIGRsbCB3aGljaCBoYXMgdW5kZWZpbmVkIHN5bWJvbHMsIGluIHdoaWNoIGNhc2Ugbm90CisgICAgICAjIGV2ZW4gYSBzdGF0aWMgbGlicmFyeSBpcyBidWlsdC4gIEZvciBub3csIHdlIG5lZWQgdG8gc3BlY2lmeQorICAgICAgIyAtbm8tdW5kZWZpbmVkIG9uIHRoZSBsaWJ0b29sIGxpbmsgbGluZSB3aGVuIHdlIGNhbiBiZSBjZXJ0YWluCisgICAgICAjIHRoYXQgYWxsIHN5bWJvbHMgYXJlIHNhdGlzZmllZCwgb3RoZXJ3aXNlIHdlIGdldCBhIHN0YXRpYyBsaWJyYXJ5LgorICAgICAgYWxsb3dfdW5kZWZpbmVkPXllcworICAgICAgOzsKKyAgICAqKQorICAgICAgYWxsb3dfdW5kZWZpbmVkPXllcworICAgICAgOzsKKyAgICBlc2FjCisgICAgbGlidG9vbF9hcmdzPSIkbm9ub3B0IgorICAgIGJhc2VfY29tcGlsZT0iJG5vbm9wdCAkQCIKKyAgICBjb21waWxlX2NvbW1hbmQ9IiRub25vcHQiCisgICAgZmluYWxpemVfY29tbWFuZD0iJG5vbm9wdCIKKworICAgIGNvbXBpbGVfcnBhdGg9CisgICAgZmluYWxpemVfcnBhdGg9CisgICAgY29tcGlsZV9zaGxpYnBhdGg9CisgICAgZmluYWxpemVfc2hsaWJwYXRoPQorICAgIGNvbnZlbmllbmNlPQorICAgIG9sZF9jb252ZW5pZW5jZT0KKyAgICBkZXBsaWJzPQorICAgIG9sZF9kZXBsaWJzPQorICAgIGNvbXBpbGVyX2ZsYWdzPQorICAgIGxpbmtlcl9mbGFncz0KKyAgICBkbGxzZWFyY2hwYXRoPQorICAgIGxpYl9zZWFyY2hfcGF0aD1gcHdkYAorICAgIGluc3RfcHJlZml4X2Rpcj0KKworICAgIGF2b2lkX3ZlcnNpb249bm8KKyAgICBkbGZpbGVzPQorICAgIGRscHJlZmlsZXM9CisgICAgZGxzZWxmPW5vCisgICAgZXhwb3J0X2R5bmFtaWM9bm8KKyAgICBleHBvcnRfc3ltYm9scz0KKyAgICBleHBvcnRfc3ltYm9sc19yZWdleD0KKyAgICBnZW5lcmF0ZWQ9CisgICAgbGlib2Jqcz0KKyAgICBsdGxpYnM9CisgICAgbW9kdWxlPW5vCisgICAgbm9faW5zdGFsbD1ubworICAgIG9ianM9CisgICAgbm9uX3BpY19vYmplY3RzPQorICAgIG5vdGluc3RfcGF0aD0gIyBwYXRocyB0aGF0IGNvbnRhaW4gbm90LWluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcworICAgIHByZWNpb3VzX2ZpbGVzX3JlZ2V4PQorICAgIHByZWZlcl9zdGF0aWNfbGlicz1ubworICAgIHByZWxvYWQ9bm8KKyAgICBwcmV2PQorICAgIHByZXZhcmc9CisgICAgcmVsZWFzZT0KKyAgICBycGF0aD0KKyAgICB4cnBhdGg9CisgICAgcGVybV9ycGF0aD0KKyAgICB0ZW1wX3JwYXRoPQorICAgIHRocmVhZF9zYWZlPW5vCisgICAgdmluZm89CisgICAgdmluZm9fbnVtYmVyPW5vCisKKyAgICBmdW5jX2luZmVyX3RhZyAkYmFzZV9jb21waWxlCisKKyAgICAjIFdlIG5lZWQgdG8ga25vdyAtc3RhdGljLCB0byBnZXQgdGhlIHJpZ2h0IG91dHB1dCBmaWxlbmFtZXMuCisgICAgZm9yIGFyZworICAgIGRvCisgICAgICBjYXNlICRhcmcgaW4KKyAgICAgIC1hbGwtc3RhdGljIHwgLXN0YXRpYyB8IC1zdGF0aWMtbGlidG9vbC1saWJzKQorICAgIGNhc2UgJGFyZyBpbgorICAgIC1hbGwtc3RhdGljKQorCSAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXMgJiYgdGVzdCAteiAiJGxpbmtfc3RhdGljX2ZsYWciOyB0aGVuCisJICAgICRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IGNvbXBsZXRlIHN0YXRpYyBsaW5raW5nIGlzIGltcG9zc2libGUgaW4gdGhpcyBjb25maWd1cmF0aW9uIiAxPiYyCisJICBmaQorCSAgaWYgdGVzdCAtbiAiJGxpbmtfc3RhdGljX2ZsYWciOyB0aGVuCisJICAgIGRsb3Blbl9zZWxmPSRkbG9wZW5fc2VsZl9zdGF0aWMKKwkgIGZpCisJICBwcmVmZXJfc3RhdGljX2xpYnM9eWVzCisJICA7OworICAgIC1zdGF0aWMpCisJICBpZiB0ZXN0IC16ICIkcGljX2ZsYWciICYmIHRlc3QgLW4gIiRsaW5rX3N0YXRpY19mbGFnIjsgdGhlbgorCSAgICBkbG9wZW5fc2VsZj0kZGxvcGVuX3NlbGZfc3RhdGljCisJICBmaQorCSAgcHJlZmVyX3N0YXRpY19saWJzPWJ1aWx0CisJICA7OworICAgIC1zdGF0aWMtbGlidG9vbC1saWJzKQorICAgICAgaWYgdGVzdCAteiAiJHBpY19mbGFnIiAmJiB0ZXN0IC1uICIkbGlua19zdGF0aWNfZmxhZyI7IHRoZW4KKyAgICAgICAgZGxvcGVuX3NlbGY9JGRsb3Blbl9zZWxmX3N0YXRpYworICAgICAgZmkKKyAgICAgIHByZWZlcl9zdGF0aWNfbGlicz15ZXMKKyAgICAgIDs7CisgICAgZXNhYworCWJ1aWxkX2xpYnRvb2xfbGlicz1ubworCWJ1aWxkX29sZF9saWJzPXllcworCWJyZWFrCisJOzsKKyAgICAgIGVzYWMKKyAgICBkb25lCisKKyAgICAjIFNlZSBpZiBvdXIgc2hhcmVkIGFyY2hpdmVzIGRlcGVuZCBvbiBzdGF0aWMgYXJjaGl2ZXMuCisgICAgdGVzdCAtbiAiJG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMiICYmIGJ1aWxkX29sZF9saWJzPXllcworCisgICAgIyBHbyB0aHJvdWdoIHRoZSBhcmd1bWVudHMsIHRyYW5zZm9ybWluZyB0aGVtIG9uIHRoZSB3YXkuCisgICAgd2hpbGUgdGVzdCAiJCMiIC1ndCAwOyBkbworICAgICAgYXJnPSIkMSIKKyAgICAgIHNoaWZ0CisgICAgICBjYXNlICRhcmcgaW4KKyAgICAgICpbXFtcflwjXF5cJlwqXChcKVx7XH1cfFw7XDxcPlw/XCdcIFwJXSp8Kl0qfCIiKQorCXFhcmc9XCJgJGVjaG8gIlgkYXJnIiB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImBcIiAjIyMgdGVzdHN1aXRlOiBza2lwIG5lc3RlZCBxdW90aW5nIHRlc3QKKwk7OworICAgICAgKikgcWFyZz0kYXJnIDs7CisgICAgICBlc2FjCisgICAgICBsaWJ0b29sX2FyZ3M9IiRsaWJ0b29sX2FyZ3MgJHFhcmciCisKKyAgICAgICMgSWYgdGhlIHByZXZpb3VzIG9wdGlvbiBuZWVkcyBhbiBhcmd1bWVudCwgYXNzaWduIGl0LgorICAgICAgaWYgdGVzdCAtbiAiJHByZXYiOyB0aGVuCisJY2FzZSAkcHJldiBpbgorCW91dHB1dCkKKwkgIGNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCBAT1VUUFVUQCIKKwkgIGZpbmFsaXplX2NvbW1hbmQ9IiRmaW5hbGl6ZV9jb21tYW5kIEBPVVRQVVRAIgorCSAgOzsKKwllc2FjCisKKwljYXNlICRwcmV2IGluCisJZGxmaWxlc3xkbHByZWZpbGVzKQorCSAgaWYgdGVzdCAiJHByZWxvYWQiID0gbm87IHRoZW4KKwkgICAgIyBBZGQgdGhlIHN5bWJvbCBvYmplY3QgaW50byB0aGUgbGlua2luZyBjb21tYW5kcy4KKwkgICAgY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kIEBTWU1GSUxFQCIKKwkgICAgZmluYWxpemVfY29tbWFuZD0iJGZpbmFsaXplX2NvbW1hbmQgQFNZTUZJTEVAIgorCSAgICBwcmVsb2FkPXllcworCSAgZmkKKwkgIGNhc2UgJGFyZyBpbgorCSAgKi5sYSB8ICoubG8pIDs7ICAjIFdlIGhhbmRsZSB0aGVzZSBjYXNlcyBiZWxvdy4KKwkgIGZvcmNlKQorCSAgICBpZiB0ZXN0ICIkZGxzZWxmIiA9IG5vOyB0aGVuCisJICAgICAgZGxzZWxmPW5lZWRsZXNzCisJICAgICAgZXhwb3J0X2R5bmFtaWM9eWVzCisJICAgIGZpCisJICAgIHByZXY9CisJICAgIGNvbnRpbnVlCisJICAgIDs7CisJICBzZWxmKQorCSAgICBpZiB0ZXN0ICIkcHJldiIgPSBkbHByZWZpbGVzOyB0aGVuCisJICAgICAgZGxzZWxmPXllcworCSAgICBlbGlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXMgJiYgdGVzdCAiJGRsb3Blbl9zZWxmIiAhPSB5ZXM7IHRoZW4KKwkgICAgICBkbHNlbGY9eWVzCisJICAgIGVsc2UKKwkgICAgICBkbHNlbGY9bmVlZGxlc3MKKwkgICAgICBleHBvcnRfZHluYW1pYz15ZXMKKwkgICAgZmkKKwkgICAgcHJldj0KKwkgICAgY29udGludWUKKwkgICAgOzsKKwkgICopCisJICAgIGlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KKwkgICAgICBkbGZpbGVzPSIkZGxmaWxlcyAkYXJnIgorCSAgICBlbHNlCisJICAgICAgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJGFyZyIKKwkgICAgZmkKKwkgICAgcHJldj0KKwkgICAgY29udGludWUKKwkgICAgOzsKKwkgIGVzYWMKKwkgIDs7CisJZXhwc3ltcykKKwkgIGV4cG9ydF9zeW1ib2xzPSIkYXJnIgorCSAgaWYgdGVzdCAhIC1mICIkYXJnIjsgdGhlbgorCSAgICAkZWNobyAiJG1vZGVuYW1lOiBzeW1ib2wgZmlsZSBcYCRhcmcnIGRvZXMgbm90IGV4aXN0IgorCSAgICBleGl0ICRFWElUX0ZBSUxVUkUKKwkgIGZpCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJZXhwc3ltc19yZWdleCkKKwkgIGV4cG9ydF9zeW1ib2xzX3JlZ2V4PSIkYXJnIgorCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCWluc3RfcHJlZml4KQorCSAgaW5zdF9wcmVmaXhfZGlyPSIkYXJnIgorCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCXByZWNpb3VzX3JlZ2V4KQorCSAgcHJlY2lvdXNfZmlsZXNfcmVnZXg9IiRhcmciCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJcmVsZWFzZSkKKwkgIHJlbGVhc2U9Ii0kYXJnIgorCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCW9iamVjdGxpc3QpCisJICBpZiB0ZXN0IC1mICIkYXJnIjsgdGhlbgorCSAgICBzYXZlX2FyZz0kYXJnCisJICAgIG1vcmVhcmdzPQorCSAgICBmb3IgZmlsIGluIGBjYXQgJHNhdmVfYXJnYAorCSAgICBkbworIwkgICAgICBtb3JlYXJncz0iJG1vcmVhcmdzICRmaWwiCisJICAgICAgYXJnPSRmaWwKKwkgICAgICAjIEEgbGlidG9vbC1jb250cm9sbGVkIG9iamVjdC4KKworCSAgICAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIG9iamVjdC4KKwkgICAgICBpZiAoJHtTRUR9IC1lICcycScgJGFyZyB8IGdyZXAgIl4jIEdlbmVyYXRlZCBieSAuKiRQQUNLQUdFIikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJCXBpY19vYmplY3Q9CisJCW5vbl9waWNfb2JqZWN0PQorCisJCSMgUmVhZCB0aGUgLmxvIGZpbGUKKwkJIyBJZiB0aGVyZSBpcyBubyBkaXJlY3RvcnkgY29tcG9uZW50LCB0aGVuIGFkZCBvbmUuCisJCWNhc2UgJGFyZyBpbgorCQkqLyogfCAqXFwqKSAuICRhcmcgOzsKKwkJKikgLiAuLyRhcmcgOzsKKwkJZXNhYworCisJCWlmIHRlc3QgLXogIiRwaWNfb2JqZWN0IiB8fCBcCisJCSAgIHRlc3QgLXogIiRub25fcGljX29iamVjdCIgfHwKKwkJICAgdGVzdCAiJHBpY19vYmplY3QiID0gbm9uZSAmJiBcCisJCSAgIHRlc3QgIiRub25fcGljX29iamVjdCIgPSBub25lOyB0aGVuCisJCSAgJGVjaG8gIiRtb2RlbmFtZTogY2Fubm90IGZpbmQgbmFtZSBvZiBvYmplY3QgZm9yIFxgJGFyZyciIDE+JjIKKwkJICBleGl0ICRFWElUX0ZBSUxVUkUKKwkJZmkKKworCQkjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorCQl4ZGlyPWAkZWNobyAiWCRhcmciIHwgJFhzZWQgLWUgJ3MlL1teL10qJCUlJ2AKKwkJaWYgdGVzdCAiWCR4ZGlyIiA9ICJYJGFyZyI7IHRoZW4KKwkJICB4ZGlyPQorCQllbHNlCisJCSAgeGRpcj0iJHhkaXIvIgorCQlmaQorCisJCWlmIHRlc3QgIiRwaWNfb2JqZWN0IiAhPSBub25lOyB0aGVuCisJCSAgIyBQcmVwZW5kIHRoZSBzdWJkaXJlY3RvcnkgdGhlIG9iamVjdCBpcyBmb3VuZCBpbi4KKwkJICBwaWNfb2JqZWN0PSIkeGRpciRwaWNfb2JqZWN0IgorCisJCSAgaWYgdGVzdCAiJHByZXYiID0gZGxmaWxlczsgdGhlbgorCQkgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXMgJiYgdGVzdCAiJGRsb3Blbl9zdXBwb3J0IiA9IHllczsgdGhlbgorCQkgICAgICBkbGZpbGVzPSIkZGxmaWxlcyAkcGljX29iamVjdCIKKwkJICAgICAgcHJldj0KKwkJICAgICAgY29udGludWUKKwkJICAgIGVsc2UKKwkJICAgICAgIyBJZiBsaWJ0b29sIG9iamVjdHMgYXJlIHVuc3VwcG9ydGVkLCB0aGVuIHdlIG5lZWQgdG8gcHJlbG9hZC4KKwkJICAgICAgcHJldj1kbHByZWZpbGVzCisJCSAgICBmaQorCQkgIGZpCisKKwkJICAjIENIRUNLIE1FOiAgSSB0aGluayBJIGJ1c3RlZCB0aGlzLiAgLU9zc2FtYQorCQkgIGlmIHRlc3QgIiRwcmV2IiA9IGRscHJlZmlsZXM7IHRoZW4KKwkJICAgICMgUHJlbG9hZCB0aGUgb2xkLXN0eWxlIG9iamVjdC4KKwkJICAgIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRwaWNfb2JqZWN0IgorCQkgICAgcHJldj0KKwkJICBmaQorCisJCSAgIyBBIFBJQyBvYmplY3QuCisJCSAgbGlib2Jqcz0iJGxpYm9ianMgJHBpY19vYmplY3QiCisJCSAgYXJnPSIkcGljX29iamVjdCIKKwkJZmkKKworCQkjIE5vbi1QSUMgb2JqZWN0LgorCQlpZiB0ZXN0ICIkbm9uX3BpY19vYmplY3QiICE9IG5vbmU7IHRoZW4KKwkJICAjIFByZXBlbmQgdGhlIHN1YmRpcmVjdG9yeSB0aGUgb2JqZWN0IGlzIGZvdW5kIGluLgorCQkgIG5vbl9waWNfb2JqZWN0PSIkeGRpciRub25fcGljX29iamVjdCIKKworCQkgICMgQSBzdGFuZGFyZCBub24tUElDIG9iamVjdAorCQkgIG5vbl9waWNfb2JqZWN0cz0iJG5vbl9waWNfb2JqZWN0cyAkbm9uX3BpY19vYmplY3QiCisJCSAgaWYgdGVzdCAteiAiJHBpY19vYmplY3QiIHx8IHRlc3QgIiRwaWNfb2JqZWN0IiA9IG5vbmUgOyB0aGVuCisJCSAgICBhcmc9IiRub25fcGljX29iamVjdCIKKwkJICBmaQorCQllbHNlCisJCSAgIyBJZiB0aGUgUElDIG9iamVjdCBleGlzdHMsIHVzZSBpdCBpbnN0ZWFkLgorCQkgICMgJHhkaXIgd2FzIHByZXBlbmRlZCB0byAkcGljX29iamVjdCBhYm92ZS4KKwkJICBub25fcGljX29iamVjdD0iJHBpY19vYmplY3QiCisJCSAgbm9uX3BpY19vYmplY3RzPSIkbm9uX3BpY19vYmplY3RzICRub25fcGljX29iamVjdCIKKwkJZmkKKwkgICAgICBlbHNlCisJCSMgT25seSBhbiBlcnJvciBpZiBub3QgZG9pbmcgYSBkcnktcnVuLgorCQlpZiB0ZXN0IC16ICIkcnVuIjsgdGhlbgorCQkgICRlY2hvICIkbW9kZW5hbWU6IFxgJGFyZycgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBvYmplY3QiIDE+JjIKKwkJICBleGl0ICRFWElUX0ZBSUxVUkUKKwkJZWxzZQorCQkgICMgRHJ5LXJ1biBjYXNlLgorCisJCSAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKwkJICB4ZGlyPWAkZWNobyAiWCRhcmciIHwgJFhzZWQgLWUgJ3MlL1teL10qJCUlJ2AKKwkJICBpZiB0ZXN0ICJYJHhkaXIiID0gIlgkYXJnIjsgdGhlbgorCQkgICAgeGRpcj0KKwkJICBlbHNlCisJCSAgICB4ZGlyPSIkeGRpci8iCisJCSAgZmkKKworCQkgIHBpY19vYmplY3Q9YCRlY2hvICJYJHt4ZGlyfSR7b2JqZGlyfS8ke2FyZ30iIHwgJFhzZWQgLWUgIiRsbzJvImAKKwkJICBub25fcGljX29iamVjdD1gJGVjaG8gIlgke3hkaXJ9JHthcmd9IiB8ICRYc2VkIC1lICIkbG8ybyJgCisJCSAgbGlib2Jqcz0iJGxpYm9ianMgJHBpY19vYmplY3QiCisJCSAgbm9uX3BpY19vYmplY3RzPSIkbm9uX3BpY19vYmplY3RzICRub25fcGljX29iamVjdCIKKwkJZmkKKwkgICAgICBmaQorCSAgICBkb25lCisJICBlbHNlCisJICAgICRlY2hvICIkbW9kZW5hbWU6IGxpbmsgaW5wdXQgZmlsZSBcYCRzYXZlX2FyZycgZG9lcyBub3QgZXhpc3QiCisJICAgIGV4aXQgJEVYSVRfRkFJTFVSRQorCSAgZmkKKwkgIGFyZz0kc2F2ZV9hcmcKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlycGF0aCB8IHhycGF0aCkKKwkgICMgV2UgbmVlZCBhbiBhYnNvbHV0ZSBwYXRoLgorCSAgY2FzZSAkYXJnIGluCisJICBbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIDs7CisJICAqKQorCSAgICAkZWNobyAiJG1vZGVuYW1lOiBvbmx5IGFic29sdXRlIHJ1bi1wYXRocyBhcmUgYWxsb3dlZCIgMT4mMgorCSAgICBleGl0ICRFWElUX0ZBSUxVUkUKKwkgICAgOzsKKwkgIGVzYWMKKwkgIGlmIHRlc3QgIiRwcmV2IiA9IHJwYXRoOyB0aGVuCisJICAgIGNhc2UgIiRycGF0aCAiIGluCisJICAgICoiICRhcmcgIiopIDs7CisJICAgICopIHJwYXRoPSIkcnBhdGggJGFyZyIgOzsKKwkgICAgZXNhYworCSAgZWxzZQorCSAgICBjYXNlICIkeHJwYXRoICIgaW4KKwkgICAgKiIgJGFyZyAiKikgOzsKKwkgICAgKikgeHJwYXRoPSIkeHJwYXRoICRhcmciIDs7CisJICAgIGVzYWMKKwkgIGZpCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJeGNvbXBpbGVyKQorCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkcWFyZyIKKwkgIHByZXY9CisJICBjb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgJHFhcmciCisJICBmaW5hbGl6ZV9jb21tYW5kPSIkZmluYWxpemVfY29tbWFuZCAkcWFyZyIKKwkgIGNvbnRpbnVlCisJICA7OworCXhsaW5rZXIpCisJICBsaW5rZXJfZmxhZ3M9IiRsaW5rZXJfZmxhZ3MgJHFhcmciCisJICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICR3bCRxYXJnIgorCSAgcHJldj0KKwkgIGNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCAkd2wkcWFyZyIKKwkgIGZpbmFsaXplX2NvbW1hbmQ9IiRmaW5hbGl6ZV9jb21tYW5kICR3bCRxYXJnIgorCSAgY29udGludWUKKwkgIDs7CisJeGNjbGlua2VyKQorCSAgbGlua2VyX2ZsYWdzPSIkbGlua2VyX2ZsYWdzICRxYXJnIgorCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkcWFyZyIKKwkgIHByZXY9CisJICBjb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgJHFhcmciCisJICBmaW5hbGl6ZV9jb21tYW5kPSIkZmluYWxpemVfY29tbWFuZCAkcWFyZyIKKwkgIGNvbnRpbnVlCisJICA7OworCXNocmV4dCkKKyAgCSAgc2hyZXh0X2NtZHM9IiRhcmciCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJZGFyd2luX2ZyYW1ld29ya3xkYXJ3aW5fZnJhbWV3b3JrX3NraXApCisJICB0ZXN0ICIkcHJldiIgPSAiZGFyd2luX2ZyYW1ld29yayIgJiYgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkYXJnIgorCSAgY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kICRhcmciCisJICBmaW5hbGl6ZV9jb21tYW5kPSIkZmluYWxpemVfY29tbWFuZCAkYXJnIgorCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCSopCisJICBldmFsICIkcHJldj1cIlwkYXJnXCIiCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJZXNhYworICAgICAgZmkgIyB0ZXN0IC1uICIkcHJldiIKKworICAgICAgcHJldmFyZz0iJGFyZyIKKworICAgICAgY2FzZSAkYXJnIGluCisgICAgICAtYWxsLXN0YXRpYykKKwlpZiB0ZXN0IC1uICIkbGlua19zdGF0aWNfZmxhZyI7IHRoZW4KKwkgIGNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCAkbGlua19zdGF0aWNfZmxhZyIKKwkgIGZpbmFsaXplX2NvbW1hbmQ9IiRmaW5hbGl6ZV9jb21tYW5kICRsaW5rX3N0YXRpY19mbGFnIgorCWZpCisJY29udGludWUKKwk7OworCisgICAgICAtYWxsb3ctdW5kZWZpbmVkKQorCSMgRklYTUU6IHJlbW92ZSB0aGlzIGZsYWcgc29tZXRpbWUgaW4gdGhlIGZ1dHVyZS4KKwkkZWNobyAiJG1vZGVuYW1lOiBcYC1hbGxvdy11bmRlZmluZWQnIGlzIGRlcHJlY2F0ZWQgYmVjYXVzZSBpdCBpcyB0aGUgZGVmYXVsdCIgMT4mMgorCWNvbnRpbnVlCisJOzsKKworICAgICAgLWF2b2lkLXZlcnNpb24pCisJYXZvaWRfdmVyc2lvbj15ZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1kbG9wZW4pCisJcHJldj1kbGZpbGVzCisJY29udGludWUKKwk7OworCisgICAgICAtZGxwcmVvcGVuKQorCXByZXY9ZGxwcmVmaWxlcworCWNvbnRpbnVlCisJOzsKKworICAgICAgLWV4cG9ydC1keW5hbWljKQorCWV4cG9ydF9keW5hbWljPXllcworCWNvbnRpbnVlCisJOzsKKworICAgICAgLWV4cG9ydC1zeW1ib2xzIHwgLWV4cG9ydC1zeW1ib2xzLXJlZ2V4KQorCWlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgfHwgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IjsgdGhlbgorCSAgJGVjaG8gIiRtb2RlbmFtZTogbW9yZSB0aGFuIG9uZSAtZXhwb3J0ZWQtc3ltYm9scyBhcmd1bWVudCBpcyBub3QgYWxsb3dlZCIKKwkgIGV4aXQgJEVYSVRfRkFJTFVSRQorCWZpCisJaWYgdGVzdCAiWCRhcmciID0gIlgtZXhwb3J0LXN5bWJvbHMiOyB0aGVuCisJICBwcmV2PWV4cHN5bXMKKwllbHNlCisJICBwcmV2PWV4cHN5bXNfcmVnZXgKKwlmaQorCWNvbnRpbnVlCisJOzsKKworICAgICAgLWZyYW1ld29ya3wtYXJjaHwtaXN5c3Jvb3QpCisJY2FzZSAiICRDQyAiIGluCisJICAqIiAke2FyZ30gJHsxfSAiKiB8ICoiICR7YXJnfQkkezF9ICIqKSAKKwkJcHJldj1kYXJ3aW5fZnJhbWV3b3JrX3NraXAgOzsKKwkgICopIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJGFyZyIKKwkgICAgIHByZXY9ZGFyd2luX2ZyYW1ld29yayA7OworCWVzYWMKKwljb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgJGFyZyIKKwlmaW5hbGl6ZV9jb21tYW5kPSIkZmluYWxpemVfY29tbWFuZCAkYXJnIgorCWNvbnRpbnVlCisJOzsKKworICAgICAgLWluc3QtcHJlZml4LWRpcikKKwlwcmV2PWluc3RfcHJlZml4CisJY29udGludWUKKwk7OworCisgICAgICAjIFRoZSBuYXRpdmUgSVJJWCBsaW5rZXIgdW5kZXJzdGFuZHMgLUxBTkc6KiwgLUxJU1Q6KiBhbmQgLUxOTzoqCisgICAgICAjIHNvLCBpZiB3ZSBzZWUgdGhlc2UgZmxhZ3MgYmUgY2FyZWZ1bCBub3QgdG8gdHJlYXQgdGhlbSBsaWtlIC1MCisgICAgICAtTFtBLVpdW0EtWl0qOiopCisJY2FzZSAkd2l0aF9nY2MvJGhvc3QgaW4KKwluby8qLSotaXJpeCogfCAvKi0qLWlyaXgqKQorCSAgY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kICRhcmciCisJICBmaW5hbGl6ZV9jb21tYW5kPSIkZmluYWxpemVfY29tbWFuZCAkYXJnIgorCSAgOzsKKwllc2FjCisJY29udGludWUKKwk7OworCisgICAgICAtTCopCisJZGlyPWAkZWNobyAiWCRhcmciIHwgJFhzZWQgLWUgJ3MvXi1MLy8nYAorCSMgV2UgbmVlZCBhbiBhYnNvbHV0ZSBwYXRoLgorCWNhc2UgJGRpciBpbgorCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgOzsKKwkqKQorCSAgYWJzZGlyPWBjZCAiJGRpciIgJiYgcHdkYAorCSAgaWYgdGVzdCAteiAiJGFic2RpciI7IHRoZW4KKwkgICAgJGVjaG8gIiRtb2RlbmFtZTogY2Fubm90IGRldGVybWluZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBvZiBcYCRkaXInIiAxPiYyCisJICAgIGFic2Rpcj0iJGRpciIKKwkgICAgbm90aW5zdF9wYXRoPSIkbm90aW5zdF9wYXRoICRkaXIiCisJICBmaQorCSAgZGlyPSIkYWJzZGlyIgorCSAgOzsKKwllc2FjCisJY2FzZSAiJGRlcGxpYnMgIiBpbgorCSoiIC1MJGRpciAiKikgOzsKKwkqKQorCSAgZGVwbGlicz0iJGRlcGxpYnMgLUwkZGlyIgorCSAgbGliX3NlYXJjaF9wYXRoPSIkbGliX3NlYXJjaF9wYXRoICRkaXIiCisJICA7OworCWVzYWMKKwljYXNlICRob3N0IGluCisJKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiopCisJICB0ZXN0YmluZGlyPWAkZWNobyAiWCRkaXIiIHwgJFhzZWQgLWUgJ3MqL2xpYiQqL2JpbionYAorCSAgY2FzZSA6JGRsbHNlYXJjaHBhdGg6IGluCisJICAqIjokZGlyOiIqKSA7OworCSAgKikgZGxsc2VhcmNocGF0aD0iJGRsbHNlYXJjaHBhdGg6JGRpciI7OworCSAgZXNhYworCSAgY2FzZSA6JGRsbHNlYXJjaHBhdGg6IGluCisJICAqIjokdGVzdGJpbmRpcjoiKikgOzsKKwkgICopIGRsbHNlYXJjaHBhdGg9IiRkbGxzZWFyY2hwYXRoOiR0ZXN0YmluZGlyIjs7CisJICBlc2FjCisJICA7OworCWVzYWMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1sKikKKwlpZiB0ZXN0ICJYJGFyZyIgPSAiWC1sYyIgfHwgdGVzdCAiWCRhcmciID0gIlgtbG0iOyB0aGVuCisJICBjYXNlICRob3N0IGluCisJICAqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotYmVvcyopCisJICAgICMgVGhlc2Ugc3lzdGVtcyBkb24ndCBhY3R1YWxseSBoYXZlIGEgQyBvciBtYXRoIGxpYnJhcnkgKGFzIHN1Y2gpCisJICAgIGNvbnRpbnVlCisJICAgIDs7CisJICAqLSotb3MyKikKKwkgICAgIyBUaGVzZSBzeXN0ZW1zIGRvbid0IGFjdHVhbGx5IGhhdmUgYSBDIGxpYnJhcnkgKGFzIHN1Y2gpCisJICAgIHRlc3QgIlgkYXJnIiA9ICJYLWxjIiAmJiBjb250aW51ZQorCSAgICA7OworCSAgKi0qLW9wZW5ic2QqIHwgKi0qLWZyZWVic2QqIHwgKi0qLWRyYWdvbmZseSopCisJICAgICMgRG8gbm90IGluY2x1ZGUgbGliYyBkdWUgdG8gdXMgaGF2aW5nIGxpYmMvbGliY19yLgorCSAgICB0ZXN0ICJYJGFyZyIgPSAiWC1sYyIgJiYgY29udGludWUKKwkgICAgOzsKKwkgICotKi1yaGFwc29keSogfCAqLSotZGFyd2luMS5bMDEyXSkKKwkgICAgIyBSaGFwc29keSBDIGFuZCBtYXRoIGxpYnJhcmllcyBhcmUgaW4gdGhlIFN5c3RlbSBmcmFtZXdvcmsKKwkgICAgZGVwbGlicz0iJGRlcGxpYnMgLWZyYW1ld29yayBTeXN0ZW0iCisJICAgIGNvbnRpbnVlCisJICAgIDs7CisJICAqLSotc2NvMy4ydjUqIHwgKi0qLXNjbzV2NiopCisJICAgICMgQ2F1c2VzIHByb2JsZW1zIHdpdGggX19jdHlwZQorCSAgICB0ZXN0ICJYJGFyZyIgPSAiWC1sYyIgJiYgY29udGludWUKKwkgICAgOzsKKwkgICotKi1zeXN2NC4ydXcyKiB8ICotKi1zeXN2NSogfCAqLSotdW5peHdhcmUqIHwgKi0qLU9wZW5VTklYKikKKwkgICAgIyBDb21waWxlciBpbnNlcnRzIGxpYmMgaW4gdGhlIGNvcnJlY3QgcGxhY2UgZm9yIHRocmVhZHMgdG8gd29yaworCSAgICB0ZXN0ICJYJGFyZyIgPSAiWC1sYyIgJiYgY29udGludWUKKwkgICAgOzsKKwkgIGVzYWMKKwllbGlmIHRlc3QgIlgkYXJnIiA9ICJYLWxjX3IiOyB0aGVuCisJIGNhc2UgJGhvc3QgaW4KKwkgKi0qLW9wZW5ic2QqIHwgKi0qLWZyZWVic2QqIHwgKi0qLWRyYWdvbmZseSopCisJICAgIyBEbyBub3QgaW5jbHVkZSBsaWJjX3IgZGlyZWN0bHksIHVzZSAtcHRocmVhZCBmbGFnLgorCSAgIGNvbnRpbnVlCisJICAgOzsKKwkgZXNhYworCWZpCisJZGVwbGlicz0iJGRlcGxpYnMgJGFyZyIKKwljb250aW51ZQorCTs7CisKKyAgICAgICMgVHJ1NjQgVU5JWCB1c2VzIC1tb2RlbCBbYXJnXSB0byBkZXRlcm1pbmUgdGhlIGxheW91dCBvZiBDKysKKyAgICAgICMgY2xhc3NlcywgbmFtZSBtYW5nbGluZywgYW5kIGV4Y2VwdGlvbiBoYW5kbGluZy4KKyAgICAgIC1tb2RlbCkKKwljb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgJGFyZyIKKwljb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRhcmciCisJZmluYWxpemVfY29tbWFuZD0iJGZpbmFsaXplX2NvbW1hbmQgJGFyZyIKKwlwcmV2PXhjb21waWxlcgorCWNvbnRpbnVlCisJOzsKKworICAgICAtbXR8LW10aHJlYWRzfC1rdGhyZWFkfC1LdGhyZWFkfC1wdGhyZWFkfC1wdGhyZWFkc3wtLXRocmVhZC1zYWZlKQorCWNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJGFyZyIKKwljb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgJGFyZyIKKwlmaW5hbGl6ZV9jb21tYW5kPSIkZmluYWxpemVfY29tbWFuZCAkYXJnIgorCWNvbnRpbnVlCisJOzsKKworICAgICAgLW1vZHVsZSkKKwltb2R1bGU9eWVzCisJY29udGludWUKKwk7OworCisgICAgICAjIC02NCwgLW1pcHNbMC05XSBlbmFibGUgNjQtYml0IG1vZGUgb24gdGhlIFNHSSBjb21waWxlcgorICAgICAgIyAtclswLTldWzAtOV0qIHNwZWNpZmllcyB0aGUgcHJvY2Vzc29yIG9uIHRoZSBTR0kgY29tcGlsZXIKKyAgICAgICMgLXhhcmNoPSosIC14dGFyZ2V0PSogZW5hYmxlIDY0LWJpdCBtb2RlIG9uIHRoZSBTdW4gY29tcGlsZXIKKyAgICAgICMgK0RBKiwgK0REKiBlbmFibGUgNjQtYml0IG1vZGUgb24gdGhlIEhQIGNvbXBpbGVyCisgICAgICAjIC1xKiBwYXNzIHRocm91Z2ggY29tcGlsZXIgYXJncyBmb3IgdGhlIElCTSBjb21waWxlcgorICAgICAgIyAtbSogcGFzcyB0aHJvdWdoIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb21waWxlciBhcmdzIGZvciBHQ0MKKyAgICAgICMgLW0qLCAtdFs0NV0qLCAtdHhzY2FsZSogcGFzcyB0aHJvdWdoIGFyY2hpdGVjdHVyZS1zcGVjaWZpYworICAgICAgIyBjb21waWxlciBhcmdzIGZvciBHQ0MKKyAgICAgICMgLXBnIHBhc3MgdGhyb3VnaCBwcm9maWxpbmcgZmxhZyBmb3IgR0NDCisgICAgICAjIEBmaWxlIEdDQyByZXNwb25zZSBmaWxlcworICAgICAgLTY0fC1taXBzWzAtOV18LXJbMC05XVswLTldKnwteGFyY2g9KnwteHRhcmdldD0qfCtEQSp8K0REKnwtcSp8LW0qfC1wZ3wgXAorICAgICAgLXRbNDVdKnwtdHhzY2FsZSp8QCopCisKKwkjIFVua25vd24gYXJndW1lbnRzIGluIGJvdGggZmluYWxpemVfY29tbWFuZCBhbmQgY29tcGlsZV9jb21tYW5kIG5lZWQKKwkjIHRvIGJlIGFlc3RoZXRpY2FsbHkgcXVvdGVkIGJlY2F1c2UgdGhleSBhcmUgZXZhbGVkIGxhdGVyLgorCWFyZz1gJGVjaG8gIlgkYXJnIiB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKwljYXNlICRhcmcgaW4KKwkqW1xbXH5cI1xeXCZcKlwoXClce1x9XHxcO1w8XD5cP1wnXCBcCV0qfCpdKnwiIikKKwkgIGFyZz0iXCIkYXJnXCIiCisJICA7OworCWVzYWMKKyAgICAgICAgY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kICRhcmciCisgICAgICAgIGZpbmFsaXplX2NvbW1hbmQ9IiRmaW5hbGl6ZV9jb21tYW5kICRhcmciCisgICAgICAgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJGFyZyIKKyAgICAgICAgY29udGludWUKKyAgICAgICAgOzsKKworICAgICAgLXNocmV4dCkKKwlwcmV2PXNocmV4dAorCWNvbnRpbnVlCisJOzsKKworICAgICAgLW5vLWZhc3QtaW5zdGFsbCkKKwlmYXN0X2luc3RhbGw9bm8KKwljb250aW51ZQorCTs7CisKKyAgICAgIC1uby1pbnN0YWxsKQorCWNhc2UgJGhvc3QgaW4KKwkqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotb3MyKikKKwkgICMgVGhlIFBBVEggaGFja2VyeSBpbiB3cmFwcGVyIHNjcmlwdHMgaXMgcmVxdWlyZWQgb24gV2luZG93cworCSAgIyBpbiBvcmRlciBmb3IgdGhlIGxvYWRlciB0byBmaW5kIGFueSBkbGxzIGl0IG5lZWRzLgorCSAgJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogXGAtbm8taW5zdGFsbCcgaXMgaWdub3JlZCBmb3IgJGhvc3QiIDE+JjIKKwkgICRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IGFzc3VtaW5nIFxgLW5vLWZhc3QtaW5zdGFsbCcgaW5zdGVhZCIgMT4mMgorCSAgZmFzdF9pbnN0YWxsPW5vCisJICA7OworCSopIG5vX2luc3RhbGw9eWVzIDs7CisJZXNhYworCWNvbnRpbnVlCisJOzsKKworICAgICAgLW5vLXVuZGVmaW5lZCkKKwlhbGxvd191bmRlZmluZWQ9bm8KKwljb250aW51ZQorCTs7CisKKyAgICAgIC1vYmplY3RsaXN0KQorCXByZXY9b2JqZWN0bGlzdAorCWNvbnRpbnVlCisJOzsKKworICAgICAgLW8pIHByZXY9b3V0cHV0IDs7CisKKyAgICAgIC1wcmVjaW91cy1maWxlcy1yZWdleCkKKwlwcmV2PXByZWNpb3VzX3JlZ2V4CisJY29udGludWUKKwk7OworCisgICAgICAtcmVsZWFzZSkKKwlwcmV2PXJlbGVhc2UKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1ycGF0aCkKKwlwcmV2PXJwYXRoCisJY29udGludWUKKwk7OworCisgICAgICAtUikKKwlwcmV2PXhycGF0aAorCWNvbnRpbnVlCisJOzsKKworICAgICAgLVIqKQorCWRpcj1gJGVjaG8gIlgkYXJnIiB8ICRYc2VkIC1lICdzL14tUi8vJ2AKKwkjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KKwljYXNlICRkaXIgaW4KKwlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIDs7CisJKikKKwkgICRlY2hvICIkbW9kZW5hbWU6IG9ubHkgYWJzb2x1dGUgcnVuLXBhdGhzIGFyZSBhbGxvd2VkIiAxPiYyCisJICBleGl0ICRFWElUX0ZBSUxVUkUKKwkgIDs7CisJZXNhYworCWNhc2UgIiR4cnBhdGggIiBpbgorCSoiICRkaXIgIiopIDs7CisJKikgeHJwYXRoPSIkeHJwYXRoICRkaXIiIDs7CisJZXNhYworCWNvbnRpbnVlCisJOzsKKworICAgICAgLXN0YXRpYyB8IC1zdGF0aWMtbGlidG9vbC1saWJzKQorCSMgVGhlIGVmZmVjdHMgb2YgLXN0YXRpYyBhcmUgZGVmaW5lZCBpbiBhIHByZXZpb3VzIGxvb3AuCisJIyBXZSB1c2VkIHRvIGRvIHRoZSBzYW1lIGFzIC1hbGwtc3RhdGljIG9uIHBsYXRmb3JtcyB0aGF0CisJIyBkaWRuJ3QgaGF2ZSBhIFBJQyBmbGFnLCBidXQgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgZWZmZWN0cworCSMgd291bGQgYmUgZXF1aXZhbGVudCB3YXMgd3JvbmcuICBJdCB3b3VsZCBicmVhayBvbiBhdCBsZWFzdAorCSMgRGlnaXRhbCBVbml4IGFuZCBBSVguCisJY29udGludWUKKwk7OworCisgICAgICAtdGhyZWFkLXNhZmUpCisJdGhyZWFkX3NhZmU9eWVzCisJY29udGludWUKKwk7OworCisgICAgICAtdmVyc2lvbi1pbmZvKQorCXByZXY9dmluZm8KKwljb250aW51ZQorCTs7CisgICAgICAtdmVyc2lvbi1udW1iZXIpCisJcHJldj12aW5mbworCXZpbmZvX251bWJlcj15ZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1XYywqKQorCWFyZ3M9YCRlY2hvICJYJGFyZyIgfCAkWHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCIgLWUgJ3MvXi1XYywvLydgCisJYXJnPQorCXNhdmVfaWZzPSIkSUZTIjsgSUZTPScsJworCWZvciBmbGFnIGluICRhcmdzOyBkbworCSAgSUZTPSIkc2F2ZV9pZnMiCisJICBjYXNlICRmbGFnIGluCisJICAgICpbXFtcflwjXF5cJlwqXChcKVx7XH1cfFw7XDxcPlw/XCdcIFwJXSp8Kl0qfCIiKQorCSAgICBmbGFnPSJcIiRmbGFnXCIiCisJICAgIDs7CisJICBlc2FjCisJICBhcmc9IiRhcmcgJHdsJGZsYWciCisJICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRmbGFnIgorCWRvbmUKKwlJRlM9IiRzYXZlX2lmcyIKKwlhcmc9YCRlY2hvICJYJGFyZyIgfCAkWHNlZCAtZSAicy9eIC8vImAKKwk7OworCisgICAgICAtV2wsKikKKwlhcmdzPWAkZWNobyAiWCRhcmciIHwgJFhzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiIC1lICdzL14tV2wsLy8nYAorCWFyZz0KKwlzYXZlX2lmcz0iJElGUyI7IElGUz0nLCcKKwlmb3IgZmxhZyBpbiAkYXJnczsgZG8KKwkgIElGUz0iJHNhdmVfaWZzIgorCSAgY2FzZSAkZmxhZyBpbgorCSAgICAqW1xbXH5cI1xeXCZcKlwoXClce1x9XHxcO1w8XD5cP1wnXCBcCV0qfCpdKnwiIikKKwkgICAgZmxhZz0iXCIkZmxhZ1wiIgorCSAgICA7OworCSAgZXNhYworCSAgYXJnPSIkYXJnICR3bCRmbGFnIgorCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkd2wkZmxhZyIKKwkgIGxpbmtlcl9mbGFncz0iJGxpbmtlcl9mbGFncyAkZmxhZyIKKwlkb25lCisJSUZTPSIkc2F2ZV9pZnMiCisJYXJnPWAkZWNobyAiWCRhcmciIHwgJFhzZWQgLWUgInMvXiAvLyJgCisJOzsKKworICAgICAgLVhjb21waWxlcikKKwlwcmV2PXhjb21waWxlcgorCWNvbnRpbnVlCisJOzsKKworICAgICAgLVhsaW5rZXIpCisJcHJldj14bGlua2VyCisJY29udGludWUKKwk7OworCisgICAgICAtWENDbGlua2VyKQorCXByZXY9eGNjbGlua2VyCisJY29udGludWUKKwk7OworCisgICAgICAjIFNvbWUgb3RoZXIgY29tcGlsZXIgZmxhZy4KKyAgICAgIC0qIHwgKyopCisJIyBVbmtub3duIGFyZ3VtZW50cyBpbiBib3RoIGZpbmFsaXplX2NvbW1hbmQgYW5kIGNvbXBpbGVfY29tbWFuZCBuZWVkCisJIyB0byBiZSBhZXN0aGV0aWNhbGx5IHF1b3RlZCBiZWNhdXNlIHRoZXkgYXJlIGV2YWxlZCBsYXRlci4KKwlhcmc9YCRlY2hvICJYJGFyZyIgfCAkWHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisJY2FzZSAkYXJnIGluCisJKltcW1x+XCNcXlwmXCpcKFwpXHtcfVx8XDtcPFw+XD9cJ1wgXAldKnwqXSp8IiIpCisJICBhcmc9IlwiJGFyZ1wiIgorCSAgOzsKKwllc2FjCisJOzsKKworICAgICAgKi4kb2JqZXh0KQorCSMgQSBzdGFuZGFyZCBvYmplY3QuCisJb2Jqcz0iJG9ianMgJGFyZyIKKwk7OworCisgICAgICAqLmxvKQorCSMgQSBsaWJ0b29sLWNvbnRyb2xsZWQgb2JqZWN0LgorCisJIyBDaGVjayB0byBzZWUgdGhhdCB0aGlzIHJlYWxseSBpcyBhIGxpYnRvb2wgb2JqZWN0LgorCWlmICgke1NFRH0gLWUgJzJxJyAkYXJnIHwgZ3JlcCAiXiMgR2VuZXJhdGVkIGJ5IC4qJFBBQ0tBR0UiKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkgIHBpY19vYmplY3Q9CisJICBub25fcGljX29iamVjdD0KKworCSAgIyBSZWFkIHRoZSAubG8gZmlsZQorCSAgIyBJZiB0aGVyZSBpcyBubyBkaXJlY3RvcnkgY29tcG9uZW50LCB0aGVuIGFkZCBvbmUuCisJICBjYXNlICRhcmcgaW4KKwkgICovKiB8ICpcXCopIC4gJGFyZyA7OworCSAgKikgLiAuLyRhcmcgOzsKKwkgIGVzYWMKKworCSAgaWYgdGVzdCAteiAiJHBpY19vYmplY3QiIHx8IFwKKwkgICAgIHRlc3QgLXogIiRub25fcGljX29iamVjdCIgfHwKKwkgICAgIHRlc3QgIiRwaWNfb2JqZWN0IiA9IG5vbmUgJiYgXAorCSAgICAgdGVzdCAiJG5vbl9waWNfb2JqZWN0IiA9IG5vbmU7IHRoZW4KKwkgICAgJGVjaG8gIiRtb2RlbmFtZTogY2Fubm90IGZpbmQgbmFtZSBvZiBvYmplY3QgZm9yIFxgJGFyZyciIDE+JjIKKwkgICAgZXhpdCAkRVhJVF9GQUlMVVJFCisJICBmaQorCisJICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorCSAgeGRpcj1gJGVjaG8gIlgkYXJnIiB8ICRYc2VkIC1lICdzJS9bXi9dKiQlJSdgCisJICBpZiB0ZXN0ICJYJHhkaXIiID0gIlgkYXJnIjsgdGhlbgorCSAgICB4ZGlyPQorIAkgIGVsc2UKKwkgICAgeGRpcj0iJHhkaXIvIgorCSAgZmkKKworCSAgaWYgdGVzdCAiJHBpY19vYmplY3QiICE9IG5vbmU7IHRoZW4KKwkgICAgIyBQcmVwZW5kIHRoZSBzdWJkaXJlY3RvcnkgdGhlIG9iamVjdCBpcyBmb3VuZCBpbi4KKwkgICAgcGljX29iamVjdD0iJHhkaXIkcGljX29iamVjdCIKKworCSAgICBpZiB0ZXN0ICIkcHJldiIgPSBkbGZpbGVzOyB0aGVuCisJICAgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXMgJiYgdGVzdCAiJGRsb3Blbl9zdXBwb3J0IiA9IHllczsgdGhlbgorCQlkbGZpbGVzPSIkZGxmaWxlcyAkcGljX29iamVjdCIKKwkJcHJldj0KKwkJY29udGludWUKKwkgICAgICBlbHNlCisJCSMgSWYgbGlidG9vbCBvYmplY3RzIGFyZSB1bnN1cHBvcnRlZCwgdGhlbiB3ZSBuZWVkIHRvIHByZWxvYWQuCisJCXByZXY9ZGxwcmVmaWxlcworCSAgICAgIGZpCisJICAgIGZpCisKKwkgICAgIyBDSEVDSyBNRTogIEkgdGhpbmsgSSBidXN0ZWQgdGhpcy4gIC1Pc3NhbWEKKwkgICAgaWYgdGVzdCAiJHByZXYiID0gZGxwcmVmaWxlczsgdGhlbgorCSAgICAgICMgUHJlbG9hZCB0aGUgb2xkLXN0eWxlIG9iamVjdC4KKwkgICAgICBkbHByZWZpbGVzPSIkZGxwcmVmaWxlcyAkcGljX29iamVjdCIKKwkgICAgICBwcmV2PQorCSAgICBmaQorCisJICAgICMgQSBQSUMgb2JqZWN0LgorCSAgICBsaWJvYmpzPSIkbGlib2JqcyAkcGljX29iamVjdCIKKwkgICAgYXJnPSIkcGljX29iamVjdCIKKwkgIGZpCisKKwkgICMgTm9uLVBJQyBvYmplY3QuCisJICBpZiB0ZXN0ICIkbm9uX3BpY19vYmplY3QiICE9IG5vbmU7IHRoZW4KKwkgICAgIyBQcmVwZW5kIHRoZSBzdWJkaXJlY3RvcnkgdGhlIG9iamVjdCBpcyBmb3VuZCBpbi4KKwkgICAgbm9uX3BpY19vYmplY3Q9IiR4ZGlyJG5vbl9waWNfb2JqZWN0IgorCisJICAgICMgQSBzdGFuZGFyZCBub24tUElDIG9iamVjdAorCSAgICBub25fcGljX29iamVjdHM9IiRub25fcGljX29iamVjdHMgJG5vbl9waWNfb2JqZWN0IgorCSAgICBpZiB0ZXN0IC16ICIkcGljX29iamVjdCIgfHwgdGVzdCAiJHBpY19vYmplY3QiID0gbm9uZSA7IHRoZW4KKwkgICAgICBhcmc9IiRub25fcGljX29iamVjdCIKKwkgICAgZmkKKwkgIGVsc2UKKwkgICAgIyBJZiB0aGUgUElDIG9iamVjdCBleGlzdHMsIHVzZSBpdCBpbnN0ZWFkLgorCSAgICAjICR4ZGlyIHdhcyBwcmVwZW5kZWQgdG8gJHBpY19vYmplY3QgYWJvdmUuCisJICAgIG5vbl9waWNfb2JqZWN0PSIkcGljX29iamVjdCIKKwkgICAgbm9uX3BpY19vYmplY3RzPSIkbm9uX3BpY19vYmplY3RzICRub25fcGljX29iamVjdCIKKwkgIGZpCisJZWxzZQorCSAgIyBPbmx5IGFuIGVycm9yIGlmIG5vdCBkb2luZyBhIGRyeS1ydW4uCisJICBpZiB0ZXN0IC16ICIkcnVuIjsgdGhlbgorCSAgICAkZWNobyAiJG1vZGVuYW1lOiBcYCRhcmcnIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgb2JqZWN0IiAxPiYyCisJICAgIGV4aXQgJEVYSVRfRkFJTFVSRQorCSAgZWxzZQorCSAgICAjIERyeS1ydW4gY2FzZS4KKworCSAgICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorCSAgICB4ZGlyPWAkZWNobyAiWCRhcmciIHwgJFhzZWQgLWUgJ3MlL1teL10qJCUlJ2AKKwkgICAgaWYgdGVzdCAiWCR4ZGlyIiA9ICJYJGFyZyI7IHRoZW4KKwkgICAgICB4ZGlyPQorCSAgICBlbHNlCisJICAgICAgeGRpcj0iJHhkaXIvIgorCSAgICBmaQorCisJICAgIHBpY19vYmplY3Q9YCRlY2hvICJYJHt4ZGlyfSR7b2JqZGlyfS8ke2FyZ30iIHwgJFhzZWQgLWUgIiRsbzJvImAKKwkgICAgbm9uX3BpY19vYmplY3Q9YCRlY2hvICJYJHt4ZGlyfSR7YXJnfSIgfCAkWHNlZCAtZSAiJGxvMm8iYAorCSAgICBsaWJvYmpzPSIkbGlib2JqcyAkcGljX29iamVjdCIKKwkgICAgbm9uX3BpY19vYmplY3RzPSIkbm9uX3BpY19vYmplY3RzICRub25fcGljX29iamVjdCIKKwkgIGZpCisJZmkKKwk7OworCisgICAgICAqLiRsaWJleHQpCisJIyBBbiBhcmNoaXZlLgorCWRlcGxpYnM9IiRkZXBsaWJzICRhcmciCisJb2xkX2RlcGxpYnM9IiRvbGRfZGVwbGlicyAkYXJnIgorCWNvbnRpbnVlCisJOzsKKworICAgICAgKi5sYSkKKwkjIEEgbGlidG9vbC1jb250cm9sbGVkIGxpYnJhcnkuCisKKwlpZiB0ZXN0ICIkcHJldiIgPSBkbGZpbGVzOyB0aGVuCisJICAjIFRoaXMgbGlicmFyeSB3YXMgc3BlY2lmaWVkIHdpdGggLWRsb3Blbi4KKwkgIGRsZmlsZXM9IiRkbGZpbGVzICRhcmciCisJICBwcmV2PQorCWVsaWYgdGVzdCAiJHByZXYiID0gZGxwcmVmaWxlczsgdGhlbgorCSAgIyBUaGUgbGlicmFyeSB3YXMgc3BlY2lmaWVkIHdpdGggLWRscHJlb3Blbi4KKwkgIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRhcmciCisJICBwcmV2PQorCWVsc2UKKwkgIGRlcGxpYnM9IiRkZXBsaWJzICRhcmciCisJZmkKKwljb250aW51ZQorCTs7CisKKyAgICAgICMgU29tZSBvdGhlciBjb21waWxlciBhcmd1bWVudC4KKyAgICAgICopCisJIyBVbmtub3duIGFyZ3VtZW50cyBpbiBib3RoIGZpbmFsaXplX2NvbW1hbmQgYW5kIGNvbXBpbGVfY29tbWFuZCBuZWVkCisJIyB0byBiZSBhZXN0aGV0aWNhbGx5IHF1b3RlZCBiZWNhdXNlIHRoZXkgYXJlIGV2YWxlZCBsYXRlci4KKwlhcmc9YCRlY2hvICJYJGFyZyIgfCAkWHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisJY2FzZSAkYXJnIGluCisJKltcW1x+XCNcXlwmXCpcKFwpXHtcfVx8XDtcPFw+XD9cJ1wgXAldKnwqXSp8IiIpCisJICBhcmc9IlwiJGFyZ1wiIgorCSAgOzsKKwllc2FjCisJOzsKKyAgICAgIGVzYWMgIyBhcmcKKworICAgICAgIyBOb3cgYWN0dWFsbHkgc3Vic3RpdHV0ZSB0aGUgYXJndW1lbnQgaW50byB0aGUgY29tbWFuZHMuCisgICAgICBpZiB0ZXN0IC1uICIkYXJnIjsgdGhlbgorCWNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCAkYXJnIgorCWZpbmFsaXplX2NvbW1hbmQ9IiRmaW5hbGl6ZV9jb21tYW5kICRhcmciCisgICAgICBmaQorICAgIGRvbmUgIyBhcmd1bWVudCBwYXJzaW5nIGxvb3AKKworICAgIGlmIHRlc3QgLW4gIiRwcmV2IjsgdGhlbgorICAgICAgJGVjaG8gIiRtb2RlbmFtZTogdGhlIFxgJHByZXZhcmcnIG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCIgMT4mMgorICAgICAgJGVjaG8gIiRoZWxwIiAxPiYyCisgICAgICBleGl0ICRFWElUX0ZBSUxVUkUKKyAgICBmaQorCisgICAgaWYgdGVzdCAiJGV4cG9ydF9keW5hbWljIiA9IHllcyAmJiB0ZXN0IC1uICIkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjIjsgdGhlbgorICAgICAgZXZhbCBhcmc9XCIkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjXCIKKyAgICAgIGNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCAkYXJnIgorICAgICAgZmluYWxpemVfY29tbWFuZD0iJGZpbmFsaXplX2NvbW1hbmQgJGFyZyIKKyAgICBmaQorCisgICAgb2xkbGlicz0KKyAgICAjIGNhbGN1bGF0ZSB0aGUgbmFtZSBvZiB0aGUgZmlsZSwgd2l0aG91dCBpdHMgZGlyZWN0b3J5CisgICAgb3V0cHV0bmFtZT1gJGVjaG8gIlgkb3V0cHV0IiB8ICRYc2VkIC1lICdzJV4uKi8lJSdgCisgICAgbGlib2Jqc19zYXZlPSIkbGlib2JqcyIKKworICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgorICAgICAgIyBnZXQgdGhlIGRpcmVjdG9yaWVzIGxpc3RlZCBpbiAkc2hsaWJwYXRoX3ZhcgorICAgICAgZXZhbCBzaGxpYl9zZWFyY2hfcGF0aD1cYFwkZWNobyBcIlhcJHskc2hsaWJwYXRoX3Zhcn1cIiBcfCBcJFhzZWQgLWUgXCdzLzovIC9nXCdcYAorICAgIGVsc2UKKyAgICAgIHNobGliX3NlYXJjaF9wYXRoPQorICAgIGZpCisgICAgZXZhbCBzeXNfbGliX3NlYXJjaF9wYXRoPVwiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlY1wiCisgICAgZXZhbCBzeXNfbGliX2Rsc2VhcmNoX3BhdGg9XCIkc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWNcIgorCisgICAgb3V0cHV0X29iamRpcj1gJGVjaG8gIlgkb3V0cHV0IiB8ICRYc2VkIC1lICdzJS9bXi9dKiQlJSdgCisgICAgaWYgdGVzdCAiWCRvdXRwdXRfb2JqZGlyIiA9ICJYJG91dHB1dCI7IHRoZW4KKyAgICAgIG91dHB1dF9vYmpkaXI9IiRvYmpkaXIiCisgICAgZWxzZQorICAgICAgb3V0cHV0X29iamRpcj0iJG91dHB1dF9vYmpkaXIvJG9iamRpciIKKyAgICBmaQorICAgICMgQ3JlYXRlIHRoZSBvYmplY3QgZGlyZWN0b3J5LgorICAgIGlmIHRlc3QgISAtZCAiJG91dHB1dF9vYmpkaXIiOyB0aGVuCisgICAgICAkc2hvdyAiJG1rZGlyICRvdXRwdXRfb2JqZGlyIgorICAgICAgJHJ1biAkbWtkaXIgJG91dHB1dF9vYmpkaXIKKyAgICAgIGV4aXRfc3RhdHVzPSQ/CisgICAgICBpZiB0ZXN0ICIkZXhpdF9zdGF0dXMiIC1uZSAwICYmIHRlc3QgISAtZCAiJG91dHB1dF9vYmpkaXIiOyB0aGVuCisJZXhpdCAkZXhpdF9zdGF0dXMKKyAgICAgIGZpCisgICAgZmkKKworICAgICMgRGV0ZXJtaW5lIHRoZSB0eXBlIG9mIG91dHB1dAorICAgIGNhc2UgJG91dHB1dCBpbgorICAgICIiKQorICAgICAgJGVjaG8gIiRtb2RlbmFtZTogeW91IG11c3Qgc3BlY2lmeSBhbiBvdXRwdXQgZmlsZSIgMT4mMgorICAgICAgJGVjaG8gIiRoZWxwIiAxPiYyCisgICAgICBleGl0ICRFWElUX0ZBSUxVUkUKKyAgICAgIDs7CisgICAgKi4kbGliZXh0KSBsaW5rbW9kZT1vbGRsaWIgOzsKKyAgICAqLmxvIHwgKi4kb2JqZXh0KSBsaW5rbW9kZT1vYmogOzsKKyAgICAqLmxhKSBsaW5rbW9kZT1saWIgOzsKKyAgICAqKSBsaW5rbW9kZT1wcm9nIDs7ICMgQW55dGhpbmcgZWxzZSBzaG91bGQgYmUgYSBwcm9ncmFtLgorICAgIGVzYWMKKworICAgIGNhc2UgJGhvc3QgaW4KKyAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqcHczMiopCisgICAgICAjIGRvbid0IGVsaW1pbmF0ZSBkdXBsaWNhdGlvbnMgaW4gJHBvc3RkZXBzIGFuZCAkcHJlZGVwcworICAgICAgZHVwbGljYXRlX2NvbXBpbGVyX2dlbmVyYXRlZF9kZXBzPXllcworICAgICAgOzsKKyAgICAqKQorICAgICAgZHVwbGljYXRlX2NvbXBpbGVyX2dlbmVyYXRlZF9kZXBzPSRkdXBsaWNhdGVfZGVwcworICAgICAgOzsKKyAgICBlc2FjCisgICAgc3BlY2lhbGRlcGxpYnM9CisKKyAgICBsaWJzPQorICAgICMgRmluZCBhbGwgaW50ZXJkZXBlbmRlbnQgZGVwbGlicyBieSBzZWFyY2hpbmcgZm9yIGxpYnJhcmllcworICAgICMgdGhhdCBhcmUgbGlua2VkIG1vcmUgdGhhbiBvbmNlIChlLmcuIC1sYSAtbGIgLWxhKQorICAgIGZvciBkZXBsaWIgaW4gJGRlcGxpYnM7IGRvCisgICAgICBpZiB0ZXN0ICJYJGR1cGxpY2F0ZV9kZXBzIiA9ICJYeWVzIiA7IHRoZW4KKwljYXNlICIkbGlicyAiIGluCisJKiIgJGRlcGxpYiAiKikgc3BlY2lhbGRlcGxpYnM9IiRzcGVjaWFsZGVwbGlicyAkZGVwbGliIiA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBsaWJzPSIkbGlicyAkZGVwbGliIgorICAgIGRvbmUKKworICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWI7IHRoZW4KKyAgICAgIGxpYnM9IiRwcmVkZXBzICRsaWJzICRjb21waWxlcl9saWJfc2VhcmNoX3BhdGggJHBvc3RkZXBzIgorCisgICAgICAjIENvbXB1dGUgbGlicmFyaWVzIHRoYXQgYXJlIGxpc3RlZCBtb3JlIHRoYW4gb25jZSBpbiAkcHJlZGVwcworICAgICAgIyAkcG9zdGRlcHMgYW5kIG1hcmsgdGhlbSBhcyBzcGVjaWFsIChpLmUuLCB3aG9zZSBkdXBsaWNhdGVzIGFyZQorICAgICAgIyBub3QgdG8gYmUgZWxpbWluYXRlZCkuCisgICAgICBwcmVfcG9zdF9kZXBzPQorICAgICAgaWYgdGVzdCAiWCRkdXBsaWNhdGVfY29tcGlsZXJfZ2VuZXJhdGVkX2RlcHMiID0gIlh5ZXMiIDsgdGhlbgorCWZvciBwcmVfcG9zdF9kZXAgaW4gJHByZWRlcHMgJHBvc3RkZXBzOyBkbworCSAgY2FzZSAiJHByZV9wb3N0X2RlcHMgIiBpbgorCSAgKiIgJHByZV9wb3N0X2RlcCAiKikgc3BlY2lhbGRlcGxpYnM9IiRzcGVjaWFsZGVwbGlicyAkcHJlX3Bvc3RfZGVwcyIgOzsKKwkgIGVzYWMKKwkgIHByZV9wb3N0X2RlcHM9IiRwcmVfcG9zdF9kZXBzICRwcmVfcG9zdF9kZXAiCisJZG9uZQorICAgICAgZmkKKyAgICAgIHByZV9wb3N0X2RlcHM9CisgICAgZmkKKworICAgIGRlcGxpYnM9CisgICAgbmV3ZGVwZW5kZW5jeV9saWJzPQorICAgIG5ld2xpYl9zZWFyY2hfcGF0aD0KKyAgICBuZWVkX3JlbGluaz1ubyAjIHdoZXRoZXIgd2UncmUgbGlua2luZyBhbnkgdW5pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMKKyAgICBub3RpbnN0X2RlcGxpYnM9ICMgbm90LWluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcworICAgIGNhc2UgJGxpbmttb2RlIGluCisgICAgbGliKQorCXBhc3Nlcz0iY29udiBsaW5rIgorCWZvciBmaWxlIGluICRkbGZpbGVzICRkbHByZWZpbGVzOyBkbworCSAgY2FzZSAkZmlsZSBpbgorCSAgKi5sYSkgOzsKKwkgICopCisJICAgICRlY2hvICIkbW9kZW5hbWU6IGxpYnJhcmllcyBjYW4gXGAtZGxvcGVuJyBvbmx5IGxpYnRvb2wgbGlicmFyaWVzOiAkZmlsZSIgMT4mMgorCSAgICBleGl0ICRFWElUX0ZBSUxVUkUKKwkgICAgOzsKKwkgIGVzYWMKKwlkb25lCisJOzsKKyAgICBwcm9nKQorCWNvbXBpbGVfZGVwbGlicz0KKwlmaW5hbGl6ZV9kZXBsaWJzPQorCWFsbGRlcGxpYnM9bm8KKwluZXdkbGZpbGVzPQorCW5ld2RscHJlZmlsZXM9CisJcGFzc2VzPSJjb252IHNjYW4gZGxvcGVuIGRscHJlb3BlbiBsaW5rIgorCTs7CisgICAgKikgIHBhc3Nlcz0iY29udiIKKwk7OworICAgIGVzYWMKKyAgICBmb3IgcGFzcyBpbiAkcGFzc2VzOyBkbworICAgICAgaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJsaWIsbGluayIgfHwKKwkgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLHNjYW4iOyB0aGVuCisJbGlicz0iJGRlcGxpYnMiCisJZGVwbGlicz0KKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgorCWNhc2UgJHBhc3MgaW4KKwlkbG9wZW4pIGxpYnM9IiRkbGZpbGVzIiA7OworCWRscHJlb3BlbikgbGlicz0iJGRscHJlZmlsZXMiIDs7CisJbGluaykgbGlicz0iJGRlcGxpYnMgJURFUExJQlMlICRkZXBlbmRlbmN5X2xpYnMiIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiRwYXNzIiA9IGRsb3BlbjsgdGhlbgorCSMgQ29sbGVjdCBkbHByZW9wZW5lZCBsaWJyYXJpZXMKKwlzYXZlX2RlcGxpYnM9IiRkZXBsaWJzIgorCWRlcGxpYnM9CisgICAgICBmaQorICAgICAgZm9yIGRlcGxpYiBpbiAkbGliczsgZG8KKwlsaWI9CisJZm91bmQ9bm8KKwljYXNlICRkZXBsaWIgaW4KKwktbXR8LW10aHJlYWRzfC1rdGhyZWFkfC1LdGhyZWFkfC1wdGhyZWFkfC1wdGhyZWFkc3wtLXRocmVhZC1zYWZlKQorCSAgaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLGxpbmsiOyB0aGVuCisJICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgorCSAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgZWxzZQorCSAgICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWIiCisJICBmaQorCSAgY29udGludWUKKwkgIDs7CisJLWwqKQorCSAgaWYgdGVzdCAiJGxpbmttb2RlIiAhPSBsaWIgJiYgdGVzdCAiJGxpbmttb2RlIiAhPSBwcm9nOyB0aGVuCisJICAgICRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgLWwnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzL29iamVjdHMiIDE+JjIKKwkgICAgY29udGludWUKKwkgIGZpCisJICBuYW1lPWAkZWNobyAiWCRkZXBsaWIiIHwgJFhzZWQgLWUgJ3MvXi1sLy8nYAorCSAgZm9yIHNlYXJjaGRpciBpbiAkbmV3bGliX3NlYXJjaF9wYXRoICRsaWJfc2VhcmNoX3BhdGggJHN5c19saWJfc2VhcmNoX3BhdGggJHNobGliX3NlYXJjaF9wYXRoOyBkbworCSAgICBmb3Igc2VhcmNoX2V4dCBpbiAubGEgJHN0ZF9zaHJleHQgLnNvIC5hOyBkbworCSAgICAgICMgU2VhcmNoIHRoZSBsaWJ0b29sIGxpYnJhcnkKKwkgICAgICBsaWI9IiRzZWFyY2hkaXIvbGliJHtuYW1lfSR7c2VhcmNoX2V4dH0iCisJICAgICAgaWYgdGVzdCAtZiAiJGxpYiI7IHRoZW4KKwkJaWYgdGVzdCAiJHNlYXJjaF9leHQiID0gIi5sYSI7IHRoZW4KKwkJICBmb3VuZD15ZXMKKwkJZWxzZQorCQkgIGZvdW5kPW5vCisJCWZpCisJCWJyZWFrIDIKKwkgICAgICBmaQorCSAgICBkb25lCisJICBkb25lCisJICBpZiB0ZXN0ICIkZm91bmQiICE9IHllczsgdGhlbgorCSAgICAjIGRlcGxpYiBkb2Vzbid0IHNlZW0gdG8gYmUgYSBsaWJ0b29sIGxpYnJhcnkKKwkgICAgaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLGxpbmsiOyB0aGVuCisJICAgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCisJICAgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKKwkgICAgZWxzZQorCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgICAgdGVzdCAiJGxpbmttb2RlIiA9IGxpYiAmJiBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKKwkgICAgZmkKKwkgICAgY29udGludWUKKwkgIGVsc2UgIyBkZXBsaWIgaXMgYSBsaWJ0b29sIGxpYnJhcnkKKwkgICAgIyBJZiAkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzICYmICRkZXBsaWIgaXMgYSBzdGRsaWIsCisJICAgICMgV2UgbmVlZCB0byBkbyBzb21lIHNwZWNpYWwgdGhpbmdzIGhlcmUsIGFuZCBub3QgbGF0ZXIuCisJICAgIGlmIHRlc3QgIlgkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIiA9ICJYeWVzIiA7IHRoZW4KKwkgICAgICBjYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KKwkgICAgICAqIiAkZGVwbGliICIqKQorCQlpZiAoJHtTRUR9IC1lICcycScgJGxpYiB8CisgICAgICAgICAgICAgICAgICAgIGdyZXAgIl4jIEdlbmVyYXRlZCBieSAuKiRQQUNLQUdFIikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJCSAgbGlicmFyeV9uYW1lcz0KKwkJICBvbGRfbGlicmFyeT0KKwkJICBjYXNlICRsaWIgaW4KKwkJICAqLyogfCAqXFwqKSAuICRsaWIgOzsKKwkJICAqKSAuIC4vJGxpYiA7OworCQkgIGVzYWMKKwkJICBmb3IgbCBpbiAkb2xkX2xpYnJhcnkgJGxpYnJhcnlfbmFtZXM7IGRvCisJCSAgICBsbD0iJGwiCisJCSAgZG9uZQorCQkgIGlmIHRlc3QgIlgkbGwiID0gIlgkb2xkX2xpYnJhcnkiIDsgdGhlbiAjIG9ubHkgc3RhdGljIHZlcnNpb24gYXZhaWxhYmxlCisJCSAgICBmb3VuZD1ubworCQkgICAgbGFkaXI9YCRlY2hvICJYJGxpYiIgfCAkWHNlZCAtZSAncyUvW14vXSokJSUnYAorCQkgICAgdGVzdCAiWCRsYWRpciIgPSAiWCRsaWIiICYmIGxhZGlyPSIuIgorCQkgICAgbGliPSRsYWRpci8kb2xkX2xpYnJhcnkKKwkJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxsaW5rIjsgdGhlbgorCQkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkJICAgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKKwkJICAgIGVsc2UKKwkJICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkJICAgICAgdGVzdCAiJGxpbmttb2RlIiA9IGxpYiAmJiBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKKwkJICAgIGZpCisJCSAgICBjb250aW51ZQorCQkgIGZpCisJCWZpCisJICAgICAgICA7OworCSAgICAgICopIDs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgZmkKKwkgIDs7ICMgLWwKKwktTCopCisJICBjYXNlICRsaW5rbW9kZSBpbgorCSAgbGliKQorCSAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgICB0ZXN0ICIkcGFzcyIgPSBjb252ICYmIGNvbnRpbnVlCisJICAgIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgorCSAgICBuZXdsaWJfc2VhcmNoX3BhdGg9IiRuZXdsaWJfc2VhcmNoX3BhdGggImAkZWNobyAiWCRkZXBsaWIiIHwgJFhzZWQgLWUgJ3MvXi1MLy8nYAorCSAgICA7OworCSAgcHJvZykKKwkgICAgaWYgdGVzdCAiJHBhc3MiID0gY29udjsgdGhlbgorCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgICAgY29udGludWUKKwkgICAgZmkKKwkgICAgaWYgdGVzdCAiJHBhc3MiID0gc2NhbjsgdGhlbgorCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgIGVsc2UKKwkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgICBmaQorCSAgICBuZXdsaWJfc2VhcmNoX3BhdGg9IiRuZXdsaWJfc2VhcmNoX3BhdGggImAkZWNobyAiWCRkZXBsaWIiIHwgJFhzZWQgLWUgJ3MvXi1MLy8nYAorCSAgICA7OworCSAgKikKKwkgICAgJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogXGAtTCcgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMvb2JqZWN0cyIgMT4mMgorCSAgICA7OworCSAgZXNhYyAjIGxpbmttb2RlCisJICBjb250aW51ZQorCSAgOzsgIyAtTAorCS1SKikKKwkgIGlmIHRlc3QgIiRwYXNzIiA9IGxpbms7IHRoZW4KKwkgICAgZGlyPWAkZWNobyAiWCRkZXBsaWIiIHwgJFhzZWQgLWUgJ3MvXi1SLy8nYAorCSAgICAjIE1ha2Ugc3VyZSB0aGUgeHJwYXRoIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGRpcmVjdG9yaWVzLgorCSAgICBjYXNlICIkeHJwYXRoICIgaW4KKwkgICAgKiIgJGRpciAiKikgOzsKKwkgICAgKikgeHJwYXRoPSIkeHJwYXRoICRkaXIiIDs7CisJICAgIGVzYWMKKwkgIGZpCisJICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgY29udGludWUKKwkgIDs7CisJKi5sYSkgbGliPSIkZGVwbGliIiA7OworCSouJGxpYmV4dCkKKwkgIGlmIHRlc3QgIiRwYXNzIiA9IGNvbnY7IHRoZW4KKwkgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgY29udGludWUKKwkgIGZpCisJICBjYXNlICRsaW5rbW9kZSBpbgorCSAgbGliKQorCSAgICB2YWxpZF9hX2xpYj1ubworCSAgICBjYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgorCSAgICAgIG1hdGNoX3BhdHRlcm4qKQorCQlzZXQgZHVtbXkgJGRlcGxpYnNfY2hlY2tfbWV0aG9kCisJICAgICAgICBtYXRjaF9wYXR0ZXJuX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogIiQyIFwoLipcKSJgCisJCWlmIGV2YWwgJGVjaG8gXCIkZGVwbGliXCIgMj4vZGV2L251bGwgXAorCQkgICAgfCAkU0VEIDEwcSBcCisJCSAgICB8ICRFR1JFUCAiJG1hdGNoX3BhdHRlcm5fcmVnZXgiID4gL2Rldi9udWxsOyB0aGVuCisJCSAgdmFsaWRfYV9saWI9eWVzCisJCWZpCisJCTs7CisJICAgICAgcGFzc19hbGwpCisJCXZhbGlkX2FfbGliPXllcworCQk7OworICAgICAgICAgICAgZXNhYworCSAgICBpZiB0ZXN0ICIkdmFsaWRfYV9saWIiICE9IHllczsgdGhlbgorCSAgICAgICRlY2hvCisJICAgICAgJGVjaG8gIioqKiBXYXJuaW5nOiBUcnlpbmcgdG8gbGluayB3aXRoIHN0YXRpYyBsaWIgYXJjaGl2ZSAkZGVwbGliLiIKKwkgICAgICAkZWNobyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKKwkgICAgICAkZWNobyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKKwkgICAgICAkZWNobyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlIgorCSAgICAgICRlY2hvICIqKiogYmVjYXVzZSB0aGUgZmlsZSBleHRlbnNpb25zIC4kbGliZXh0IG9mIHRoaXMgYXJndW1lbnQgbWFrZXMgbWUgYmVsaWV2ZSIKKwkgICAgICAkZWNobyAiKioqIHRoYXQgaXQgaXMganVzdCBhIHN0YXRpYyBhcmNoaXZlIHRoYXQgSSBzaG91bGQgbm90IHVzZWQgaGVyZS4iCisJICAgIGVsc2UKKwkgICAgICAkZWNobworCSAgICAgICRlY2hvICIqKiogV2FybmluZzogTGlua2luZyB0aGUgc2hhcmVkIGxpYnJhcnkgJG91dHB1dCBhZ2FpbnN0IHRoZSIKKwkgICAgICAkZWNobyAiKioqIHN0YXRpYyBsaWJyYXJ5ICRkZXBsaWIgaXMgbm90IHBvcnRhYmxlISIKKwkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgICBmaQorCSAgICBjb250aW51ZQorCSAgICA7OworCSAgcHJvZykKKwkgICAgaWYgdGVzdCAiJHBhc3MiICE9IGxpbms7IHRoZW4KKwkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgICBlbHNlCisJICAgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCisJICAgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKKwkgICAgZmkKKwkgICAgY29udGludWUKKwkgICAgOzsKKwkgIGVzYWMgIyBsaW5rbW9kZQorCSAgOzsgIyAqLiRsaWJleHQKKwkqLmxvIHwgKi4kb2JqZXh0KQorCSAgaWYgdGVzdCAiJHBhc3MiID0gY29udjsgdGhlbgorCSAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgZWxpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgorCSAgICBpZiB0ZXN0ICIkcGFzcyIgPSBkbHByZW9wZW4gfHwgdGVzdCAiJGRsb3Blbl9zdXBwb3J0IiAhPSB5ZXMgfHwgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSBubzsgdGhlbgorCSAgICAgICMgSWYgdGhlcmUgaXMgbm8gZGxvcGVuIHN1cHBvcnQgb3Igd2UncmUgbGlua2luZyBzdGF0aWNhbGx5LAorCSAgICAgICMgd2UgbmVlZCB0byBwcmVsb2FkLgorCSAgICAgIG5ld2RscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzICRkZXBsaWIiCisJICAgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCisJICAgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKKwkgICAgZWxzZQorCSAgICAgIG5ld2RsZmlsZXM9IiRuZXdkbGZpbGVzICRkZXBsaWIiCisJICAgIGZpCisJICBmaQorCSAgY29udGludWUKKwkgIDs7CisJJURFUExJQlMlKQorCSAgYWxsZGVwbGlicz15ZXMKKwkgIGNvbnRpbnVlCisJICA7OworCWVzYWMgIyBjYXNlICRkZXBsaWIKKwlpZiB0ZXN0ICIkZm91bmQiID0geWVzIHx8IHRlc3QgLWYgIiRsaWIiOyB0aGVuIDoKKwllbHNlCisJICAkZWNobyAiJG1vZGVuYW1lOiBjYW5ub3QgZmluZCB0aGUgbGlicmFyeSBcYCRsaWInIG9yIHVuaGFuZGxlZCBhcmd1bWVudCBcYCRkZXBsaWInIiAxPiYyCisJICBleGl0ICRFWElUX0ZBSUxVUkUKKwlmaQorCisJIyBDaGVjayB0byBzZWUgdGhhdCB0aGlzIHJlYWxseSBpcyBhIGxpYnRvb2wgYXJjaGl2ZS4KKwlpZiAoJHtTRUR9IC1lICcycScgJGxpYiB8IGdyZXAgIl4jIEdlbmVyYXRlZCBieSAuKiRQQUNLQUdFIikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKwllbHNlCisJICAkZWNobyAiJG1vZGVuYW1lOiBcYCRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIgMT4mMgorCSAgZXhpdCAkRVhJVF9GQUlMVVJFCisJZmkKKworCWxhZGlyPWAkZWNobyAiWCRsaWIiIHwgJFhzZWQgLWUgJ3MlL1teL10qJCUlJ2AKKwl0ZXN0ICJYJGxhZGlyIiA9ICJYJGxpYiIgJiYgbGFkaXI9Ii4iCisKKwlkbG5hbWU9CisJZGxvcGVuPQorCWRscHJlb3Blbj0KKwlsaWJkaXI9CisJbGlicmFyeV9uYW1lcz0KKwlvbGRfbGlicmFyeT0KKwkjIElmIHRoZSBsaWJyYXJ5IHdhcyBpbnN0YWxsZWQgd2l0aCBhbiBvbGQgcmVsZWFzZSBvZiBsaWJ0b29sLAorCSMgaXQgd2lsbCBub3QgcmVkZWZpbmUgdmFyaWFibGVzIGluc3RhbGxlZCwgb3Igc2hvdWxkbm90bGluaworCWluc3RhbGxlZD15ZXMKKwlzaG91bGRub3RsaW5rPW5vCisJYXZvaWR0ZW1wcnBhdGg9CisKKworCSMgUmVhZCB0aGUgLmxhIGZpbGUKKwljYXNlICRsaWIgaW4KKwkqLyogfCAqXFwqKSAuICRsaWIgOzsKKwkqKSAuIC4vJGxpYiA7OworCWVzYWMKKworCWlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAibGliLGxpbmsiIHx8CisJICAgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLHNjYW4iIHx8CisJICAgeyB0ZXN0ICIkbGlua21vZGUiICE9IHByb2cgJiYgdGVzdCAiJGxpbmttb2RlIiAhPSBsaWI7IH07IHRoZW4KKwkgIHRlc3QgLW4gIiRkbG9wZW4iICYmIGRsZmlsZXM9IiRkbGZpbGVzICRkbG9wZW4iCisJICB0ZXN0IC1uICIkZGxwcmVvcGVuIiAmJiBkbHByZWZpbGVzPSIkZGxwcmVmaWxlcyAkZGxwcmVvcGVuIgorCWZpCisKKwlpZiB0ZXN0ICIkcGFzcyIgPSBjb252OyB0aGVuCisJICAjIE9ubHkgY2hlY2sgZm9yIGNvbnZlbmllbmNlIGxpYnJhcmllcworCSAgZGVwbGlicz0iJGxpYiAkZGVwbGlicyIKKwkgIGlmIHRlc3QgLXogIiRsaWJkaXIiOyB0aGVuCisJICAgIGlmIHRlc3QgLXogIiRvbGRfbGlicmFyeSI7IHRoZW4KKwkgICAgICAkZWNobyAiJG1vZGVuYW1lOiBjYW5ub3QgZmluZCBuYW1lIG9mIGxpbmsgbGlicmFyeSBmb3IgXGAkbGliJyIgMT4mMgorCSAgICAgIGV4aXQgJEVYSVRfRkFJTFVSRQorCSAgICBmaQorCSAgICAjIEl0IGlzIGEgbGlidG9vbCBjb252ZW5pZW5jZSBsaWJyYXJ5LCBzbyBhZGQgaW4gaXRzIG9iamVjdHMuCisJICAgIGNvbnZlbmllbmNlPSIkY29udmVuaWVuY2UgJGxhZGlyLyRvYmpkaXIvJG9sZF9saWJyYXJ5IgorCSAgICBvbGRfY29udmVuaWVuY2U9IiRvbGRfY29udmVuaWVuY2UgJGxhZGlyLyRvYmpkaXIvJG9sZF9saWJyYXJ5IgorCSAgICB0bXBfbGlicz0KKwkgICAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisgICAgICAgICAgICAgIGlmIHRlc3QgIlgkZHVwbGljYXRlX2RlcHMiID0gIlh5ZXMiIDsgdGhlbgorCSAgICAgICAgY2FzZSAiJHRtcF9saWJzICIgaW4KKwkgICAgICAgICoiICRkZXBsaWIgIiopIHNwZWNpYWxkZXBsaWJzPSIkc3BlY2lhbGRlcGxpYnMgJGRlcGxpYiIgOzsKKwkgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgZmkKKwkgICAgICB0bXBfbGlicz0iJHRtcF9saWJzICRkZXBsaWIiCisJICAgIGRvbmUKKwkgIGVsaWYgdGVzdCAiJGxpbmttb2RlIiAhPSBwcm9nICYmIHRlc3QgIiRsaW5rbW9kZSIgIT0gbGliOyB0aGVuCisJICAgICRlY2hvICIkbW9kZW5hbWU6IFxgJGxpYicgaXMgbm90IGEgY29udmVuaWVuY2UgbGlicmFyeSIgMT4mMgorCSAgICBleGl0ICRFWElUX0ZBSUxVUkUKKwkgIGZpCisJICBjb250aW51ZQorCWZpICMgJHBhc3MgPSBjb252CisKKworCSMgR2V0IHRoZSBuYW1lIG9mIHRoZSBsaWJyYXJ5IHdlIGxpbmsgYWdhaW5zdC4KKwlsaW5rbGliPQorCWZvciBsIGluICRvbGRfbGlicmFyeSAkbGlicmFyeV9uYW1lczsgZG8KKwkgIGxpbmtsaWI9IiRsIgorCWRvbmUKKwlpZiB0ZXN0IC16ICIkbGlua2xpYiI7IHRoZW4KKwkgICRlY2hvICIkbW9kZW5hbWU6IGNhbm5vdCBmaW5kIG5hbWUgb2YgbGluayBsaWJyYXJ5IGZvciBcYCRsaWInIiAxPiYyCisJICBleGl0ICRFWElUX0ZBSUxVUkUKKwlmaQorCisJIyBUaGlzIGxpYnJhcnkgd2FzIHNwZWNpZmllZCB3aXRoIC1kbG9wZW4uCisJaWYgdGVzdCAiJHBhc3MiID0gZGxvcGVuOyB0aGVuCisJICBpZiB0ZXN0IC16ICIkbGliZGlyIjsgdGhlbgorCSAgICAkZWNobyAiJG1vZGVuYW1lOiBjYW5ub3QgLWRsb3BlbiBhIGNvbnZlbmllbmNlIGxpYnJhcnk6IFxgJGxpYiciIDE+JjIKKwkgICAgZXhpdCAkRVhJVF9GQUlMVVJFCisJICBmaQorCSAgaWYgdGVzdCAteiAiJGRsbmFtZSIgfHwKKwkgICAgIHRlc3QgIiRkbG9wZW5fc3VwcG9ydCIgIT0geWVzIHx8CisJICAgICB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IG5vOyB0aGVuCisJICAgICMgSWYgdGhlcmUgaXMgbm8gZGxuYW1lLCBubyBkbG9wZW4gc3VwcG9ydCBvciB3ZSdyZSBsaW5raW5nCisJICAgICMgc3RhdGljYWxseSwgd2UgbmVlZCB0byBwcmVsb2FkLiAgV2UgYWxzbyBuZWVkIHRvIHByZWxvYWQgYW55CisJICAgICMgZGVwZW5kZW50IGxpYnJhcmllcyBzbyBsaWJsdGRsJ3MgZGVwbGliIHByZWxvYWRlciBkb2Vzbid0CisJICAgICMgYm9tYiBvdXQgaW4gdGhlIGxvYWQgZGVwbGlicyBwaGFzZS4KKwkgICAgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJGxpYiAkZGVwZW5kZW5jeV9saWJzIgorCSAgZWxzZQorCSAgICBuZXdkbGZpbGVzPSIkbmV3ZGxmaWxlcyAkbGliIgorCSAgZmkKKwkgIGNvbnRpbnVlCisJZmkgIyAkcGFzcyA9IGRsb3BlbgorCisJIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCisJY2FzZSAkbGFkaXIgaW4KKwlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIGFic19sYWRpcj0iJGxhZGlyIiA7OworCSopCisJICBhYnNfbGFkaXI9YGNkICIkbGFkaXIiICYmIHB3ZGAKKwkgIGlmIHRlc3QgLXogIiRhYnNfbGFkaXIiOyB0aGVuCisJICAgICRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IGNhbm5vdCBkZXRlcm1pbmUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgb2YgXGAkbGFkaXInIiAxPiYyCisJICAgICRlY2hvICIkbW9kZW5hbWU6IHBhc3NpbmcgaXQgbGl0ZXJhbGx5IHRvIHRoZSBsaW5rZXIsIGFsdGhvdWdoIGl0IG1pZ2h0IGZhaWwiIDE+JjIKKwkgICAgYWJzX2xhZGlyPSIkbGFkaXIiCisJICBmaQorCSAgOzsKKwllc2FjCisJbGFuYW1lPWAkZWNobyAiWCRsaWIiIHwgJFhzZWQgLWUgJ3MlXi4qLyUlJ2AKKworCSMgRmluZCB0aGUgcmVsZXZhbnQgb2JqZWN0IGRpcmVjdG9yeSBhbmQgbGlicmFyeSBuYW1lLgorCWlmIHRlc3QgIlgkaW5zdGFsbGVkIiA9IFh5ZXM7IHRoZW4KKwkgIGlmIHRlc3QgISAtZiAiJGxpYmRpci8kbGlua2xpYiIgJiYgdGVzdCAtZiAiJGFic19sYWRpci8kbGlua2xpYiI7IHRoZW4KKwkgICAgJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogbGlicmFyeSBcYCRsaWInIHdhcyBtb3ZlZC4iIDE+JjIKKwkgICAgZGlyPSIkbGFkaXIiCisJICAgIGFic2Rpcj0iJGFic19sYWRpciIKKwkgICAgbGliZGlyPSIkYWJzX2xhZGlyIgorCSAgZWxzZQorCSAgICBkaXI9IiRsaWJkaXIiCisJICAgIGFic2Rpcj0iJGxpYmRpciIKKwkgIGZpCisJICB0ZXN0ICJYJGhhcmRjb2RlX2F1dG9tYXRpYyIgPSBYeWVzICYmIGF2b2lkdGVtcHJwYXRoPXllcworCWVsc2UKKwkgIGlmIHRlc3QgISAtZiAiJGxhZGlyLyRvYmpkaXIvJGxpbmtsaWIiICYmIHRlc3QgLWYgIiRhYnNfbGFkaXIvJGxpbmtsaWIiOyB0aGVuCisJICAgIGRpcj0iJGxhZGlyIgorCSAgICBhYnNkaXI9IiRhYnNfbGFkaXIiCisJICAgICMgUmVtb3ZlIHRoaXMgc2VhcmNoIHBhdGggbGF0ZXIKKwkgICAgbm90aW5zdF9wYXRoPSIkbm90aW5zdF9wYXRoICRhYnNfbGFkaXIiCisJICBlbHNlCisJICAgIGRpcj0iJGxhZGlyLyRvYmpkaXIiCisJICAgIGFic2Rpcj0iJGFic19sYWRpci8kb2JqZGlyIgorCSAgICAjIFJlbW92ZSB0aGlzIHNlYXJjaCBwYXRoIGxhdGVyCisJICAgIG5vdGluc3RfcGF0aD0iJG5vdGluc3RfcGF0aCAkYWJzX2xhZGlyIgorCSAgZmkKKwlmaSAjICRpbnN0YWxsZWQgPSB5ZXMKKwluYW1lPWAkZWNobyAiWCRsYW5hbWUiIHwgJFhzZWQgLWUgJ3MvXC5sYSQvLycgLWUgJ3MvXmxpYi8vJ2AKKworCSMgVGhpcyBsaWJyYXJ5IHdhcyBzcGVjaWZpZWQgd2l0aCAtZGxwcmVvcGVuLgorCWlmIHRlc3QgIiRwYXNzIiA9IGRscHJlb3BlbjsgdGhlbgorCSAgaWYgdGVzdCAteiAiJGxpYmRpciI7IHRoZW4KKwkgICAgJGVjaG8gIiRtb2RlbmFtZTogY2Fubm90IC1kbHByZW9wZW4gYSBjb252ZW5pZW5jZSBsaWJyYXJ5OiBcYCRsaWInIiAxPiYyCisJICAgIGV4aXQgJEVYSVRfRkFJTFVSRQorCSAgZmkKKwkgICMgUHJlZmVyIHVzaW5nIGEgc3RhdGljIGxpYnJhcnkgKHNvIHRoYXQgbm8gc2lsbHkgX0RZTkFNSUMgc3ltYm9scworCSAgIyBhcmUgcmVxdWlyZWQgdG8gbGluaykuCisJICBpZiB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiOyB0aGVuCisJICAgIG5ld2RscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzICRkaXIvJG9sZF9saWJyYXJ5IgorCSAgIyBPdGhlcndpc2UsIHVzZSB0aGUgZGxuYW1lLCBzbyB0aGF0IGx0X2Rsb3BlbiBmaW5kcyBpdC4KKwkgIGVsaWYgdGVzdCAtbiAiJGRsbmFtZSI7IHRoZW4KKwkgICAgbmV3ZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMgJGRpci8kZGxuYW1lIgorCSAgZWxzZQorCSAgICBuZXdkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyAkZGlyLyRsaW5rbGliIgorCSAgZmkKKwlmaSAjICRwYXNzID0gZGxwcmVvcGVuCisKKwlpZiB0ZXN0IC16ICIkbGliZGlyIjsgdGhlbgorCSAgIyBMaW5rIHRoZSBjb252ZW5pZW5jZSBsaWJyYXJ5CisJICBpZiB0ZXN0ICIkbGlua21vZGUiID0gbGliOyB0aGVuCisJICAgIGRlcGxpYnM9IiRkaXIvJG9sZF9saWJyYXJ5ICRkZXBsaWJzIgorCSAgZWxpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csbGluayI7IHRoZW4KKwkgICAgY29tcGlsZV9kZXBsaWJzPSIkZGlyLyRvbGRfbGlicmFyeSAkY29tcGlsZV9kZXBsaWJzIgorCSAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGlyLyRvbGRfbGlicmFyeSAkZmluYWxpemVfZGVwbGlicyIKKwkgIGVsc2UKKwkgICAgZGVwbGlicz0iJGxpYiAkZGVwbGlicyIgIyB1c2VkIGZvciBwcm9nLHNjYW4gcGFzcworCSAgZmkKKwkgIGNvbnRpbnVlCisJZmkKKworCisJaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2cgJiYgdGVzdCAiJHBhc3MiICE9IGxpbms7IHRoZW4KKwkgIG5ld2xpYl9zZWFyY2hfcGF0aD0iJG5ld2xpYl9zZWFyY2hfcGF0aCAkbGFkaXIiCisJICBkZXBsaWJzPSIkbGliICRkZXBsaWJzIgorCisJICBsaW5rYWxsZGVwbGlicz1ubworCSAgaWYgdGVzdCAiJGxpbmtfYWxsX2RlcGxpYnMiICE9IG5vIHx8IHRlc3QgLXogIiRsaWJyYXJ5X25hbWVzIiB8fAorCSAgICAgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSBubzsgdGhlbgorCSAgICBsaW5rYWxsZGVwbGlicz15ZXMKKwkgIGZpCisKKwkgIHRtcF9saWJzPQorCSAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworCSAgICBjYXNlICRkZXBsaWIgaW4KKwkgICAgLUwqKSBuZXdsaWJfc2VhcmNoX3BhdGg9IiRuZXdsaWJfc2VhcmNoX3BhdGggImAkZWNobyAiWCRkZXBsaWIiIHwgJFhzZWQgLWUgJ3MvXi1MLy8nYDs7ICMjIyB0ZXN0c3VpdGU6IHNraXAgbmVzdGVkIHF1b3RpbmcgdGVzdAorCSAgICBlc2FjCisJICAgICMgTmVlZCB0byBsaW5rIGFnYWluc3QgYWxsIGRlcGVuZGVuY3lfbGlicz8KKwkgICAgaWYgdGVzdCAiJGxpbmthbGxkZXBsaWJzIiA9IHllczsgdGhlbgorCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgIGVsc2UKKwkgICAgICAjIE5lZWQgdG8gaGFyZGNvZGUgc2hhcmVkIGxpYnJhcnkgcGF0aHMKKwkgICAgICAjIG9yL2FuZCBsaW5rIGFnYWluc3Qgc3RhdGljIGxpYnJhcmllcworCSAgICAgIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgorCSAgICBmaQorCSAgICBpZiB0ZXN0ICJYJGR1cGxpY2F0ZV9kZXBzIiA9ICJYeWVzIiA7IHRoZW4KKwkgICAgICBjYXNlICIkdG1wX2xpYnMgIiBpbgorCSAgICAgICoiICRkZXBsaWIgIiopIHNwZWNpYWxkZXBsaWJzPSIkc3BlY2lhbGRlcGxpYnMgJGRlcGxpYiIgOzsKKwkgICAgICBlc2FjCisJICAgIGZpCisJICAgIHRtcF9saWJzPSIkdG1wX2xpYnMgJGRlcGxpYiIKKwkgIGRvbmUgIyBmb3IgZGVwbGliCisJICBjb250aW51ZQorCWZpICMgJGxpbmttb2RlID0gcHJvZy4uLgorCisJaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLGxpbmsiOyB0aGVuCisJICBpZiB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyIgJiYKKyAgICAgICAgIHsgeyB0ZXN0ICIkcHJlZmVyX3N0YXRpY19saWJzIiA9IG5vIHx8CisgICAgICAgICAgICAgdGVzdCAiJHByZWZlcl9zdGF0aWNfbGlicywkaW5zdGFsbGVkIiA9ICJidWlsdCx5ZXMiOyB9IHx8CisgICAgICAgICAgIHRlc3QgLXogIiRvbGRfbGlicmFyeSI7IH07IHRoZW4KKwkgICAgIyBXZSBuZWVkIHRvIGhhcmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGgKKwkgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiICYmIHRlc3QgLXogIiRhdm9pZHRlbXBycGF0aCIgOyB0aGVuCisJICAgICAgIyBNYWtlIHN1cmUgdGhlIHJwYXRoIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGRpcmVjdG9yaWVzLgorCSAgICAgIGNhc2UgIiR0ZW1wX3JwYXRoICIgaW4KKwkgICAgICAqIiAkZGlyICIqKSA7OworCSAgICAgICoiICRhYnNkaXIgIiopIDs7CisJICAgICAgKikgdGVtcF9ycGF0aD0iJHRlbXBfcnBhdGggJGFic2RpciIgOzsKKwkgICAgICBlc2FjCisJICAgIGZpCisKKwkgICAgIyBIYXJkY29kZSB0aGUgbGlicmFyeSBwYXRoLgorCSAgICAjIFNraXAgZGlyZWN0b3JpZXMgdGhhdCBhcmUgaW4gdGhlIHN5c3RlbSBkZWZhdWx0IHJ1bi10aW1lCisJICAgICMgc2VhcmNoIHBhdGguCisJICAgIGNhc2UgIiAkc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIgaW4KKwkgICAgKiIgJGFic2RpciAiKikgOzsKKwkgICAgKikKKwkgICAgICBjYXNlICIkY29tcGlsZV9ycGF0aCAiIGluCisJICAgICAgKiIgJGFic2RpciAiKikgOzsKKwkgICAgICAqKSBjb21waWxlX3JwYXRoPSIkY29tcGlsZV9ycGF0aCAkYWJzZGlyIgorCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIGNhc2UgIiAkc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIgaW4KKwkgICAgKiIgJGxpYmRpciAiKikgOzsKKwkgICAgKikKKwkgICAgICBjYXNlICIkZmluYWxpemVfcnBhdGggIiBpbgorCSAgICAgICoiICRsaWJkaXIgIiopIDs7CisJICAgICAgKikgZmluYWxpemVfcnBhdGg9IiRmaW5hbGl6ZV9ycGF0aCAkbGliZGlyIgorCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgICBlc2FjCisJICBmaSAjICRsaW5rbW9kZSwkcGFzcyA9IHByb2csbGluay4uLgorCisJICBpZiB0ZXN0ICIkYWxsZGVwbGlicyIgPSB5ZXMgJiYKKwkgICAgIHsgdGVzdCAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA9IHBhc3NfYWxsIHx8CisJICAgICAgIHsgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXMgJiYKKwkJIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVzIjsgfTsgfTsgdGhlbgorCSAgICAjIFdlIG9ubHkgbmVlZCB0byBzZWFyY2ggZm9yIHN0YXRpYyBsaWJyYXJpZXMKKwkgICAgY29udGludWUKKwkgIGZpCisJZmkKKworCWxpbmtfc3RhdGljPW5vICMgV2hldGhlciB0aGUgZGVwbGliIHdpbGwgYmUgbGlua2VkIHN0YXRpY2FsbHkKKwl1c2Vfc3RhdGljX2xpYnM9JHByZWZlcl9zdGF0aWNfbGlicworCWlmIHRlc3QgIiR1c2Vfc3RhdGljX2xpYnMiID0gYnVpbHQgJiYgdGVzdCAiJGluc3RhbGxlZCIgPSB5ZXMgOyB0aGVuCisJICB1c2Vfc3RhdGljX2xpYnM9bm8KKwlmaQorCWlmIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVzIiAmJgorCSAgIHsgdGVzdCAiJHVzZV9zdGF0aWNfbGlicyIgPSBubyB8fCB0ZXN0IC16ICIkb2xkX2xpYnJhcnkiOyB9OyB0aGVuCisJICBpZiB0ZXN0ICIkaW5zdGFsbGVkIiA9IG5vOyB0aGVuCisJICAgIG5vdGluc3RfZGVwbGlicz0iJG5vdGluc3RfZGVwbGlicyAkbGliIgorCSAgICBuZWVkX3JlbGluaz15ZXMKKwkgIGZpCisJICAjIFRoaXMgaXMgYSBzaGFyZWQgbGlicmFyeQorCisJICAjIFdhcm4gYWJvdXQgcG9ydGFiaWxpdHksIGNhbid0IGxpbmsgYWdhaW5zdCAtbW9kdWxlJ3Mgb24KKwkgICMgc29tZSBzeXN0ZW1zIChkYXJ3aW4pCisJICBpZiB0ZXN0ICIkc2hvdWxkbm90bGluayIgPSB5ZXMgJiYgdGVzdCAiJHBhc3MiID0gbGluayA7IHRoZW4KKwkgICAgJGVjaG8KKwkgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KKwkgICAgICAkZWNobyAiKioqIFdhcm5pbmc6IExpbmtpbmcgdGhlIGV4ZWN1dGFibGUgJG91dHB1dCBhZ2FpbnN0IHRoZSBsb2FkYWJsZSBtb2R1bGUiCisJICAgIGVsc2UKKwkgICAgICAkZWNobyAiKioqIFdhcm5pbmc6IExpbmtpbmcgdGhlIHNoYXJlZCBsaWJyYXJ5ICRvdXRwdXQgYWdhaW5zdCB0aGUgbG9hZGFibGUgbW9kdWxlIgorCSAgICBmaQorCSAgICAkZWNobyAiKioqICRsaW5rbGliIGlzIG5vdCBwb3J0YWJsZSEiCisJICBmaQorCSAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYiAmJgorCSAgICAgdGVzdCAiJGhhcmRjb2RlX2ludG9fbGlicyIgPSB5ZXM7IHRoZW4KKwkgICAgIyBIYXJkY29kZSB0aGUgbGlicmFyeSBwYXRoLgorCSAgICAjIFNraXAgZGlyZWN0b3JpZXMgdGhhdCBhcmUgaW4gdGhlIHN5c3RlbSBkZWZhdWx0IHJ1bi10aW1lCisJICAgICMgc2VhcmNoIHBhdGguCisJICAgIGNhc2UgIiAkc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIgaW4KKwkgICAgKiIgJGFic2RpciAiKikgOzsKKwkgICAgKikKKwkgICAgICBjYXNlICIkY29tcGlsZV9ycGF0aCAiIGluCisJICAgICAgKiIgJGFic2RpciAiKikgOzsKKwkgICAgICAqKSBjb21waWxlX3JwYXRoPSIkY29tcGlsZV9ycGF0aCAkYWJzZGlyIgorCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIGNhc2UgIiAkc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIgaW4KKwkgICAgKiIgJGxpYmRpciAiKikgOzsKKwkgICAgKikKKwkgICAgICBjYXNlICIkZmluYWxpemVfcnBhdGggIiBpbgorCSAgICAgICoiICRsaWJkaXIgIiopIDs7CisJICAgICAgKikgZmluYWxpemVfcnBhdGg9IiRmaW5hbGl6ZV9ycGF0aCAkbGliZGlyIgorCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgICBlc2FjCisJICBmaQorCisJICBpZiB0ZXN0IC1uICIkb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMiOyB0aGVuCisJICAgICMgZmlndXJlIG91dCB0aGUgc29uYW1lCisJICAgIHNldCBkdW1teSAkbGlicmFyeV9uYW1lcworCSAgICByZWFsbmFtZT0iJDIiCisJICAgIHNoaWZ0OyBzaGlmdAorCSAgICBsaWJuYW1lPWBldmFsIFxcJGVjaG8gXCIkbGlibmFtZV9zcGVjXCJgCisJICAgICMgdXNlIGRsbmFtZSBpZiB3ZSBnb3QgaXQuIGl0J3MgcGVyZmVjdGx5IGdvb2QsIG5vPworCSAgICBpZiB0ZXN0IC1uICIkZGxuYW1lIjsgdGhlbgorCSAgICAgIHNvbmFtZT0iJGRsbmFtZSIKKwkgICAgZWxpZiB0ZXN0IC1uICIkc29uYW1lX3NwZWMiOyB0aGVuCisJICAgICAgIyBibGVoIHdpbmRvd3MKKwkgICAgICBjYXNlICRob3N0IGluCisJICAgICAgKmN5Z3dpbiogfCBtaW5ndyopCisJCW1ham9yPWBleHByICRjdXJyZW50IC0gJGFnZWAKKwkJdmVyc3VmZml4PSItJG1ham9yIgorCQk7OworCSAgICAgIGVzYWMKKwkgICAgICBldmFsIHNvbmFtZT1cIiRzb25hbWVfc3BlY1wiCisJICAgIGVsc2UKKwkgICAgICBzb25hbWU9IiRyZWFsbmFtZSIKKwkgICAgZmkKKworCSAgICAjIE1ha2UgYSBuZXcgbmFtZSBmb3IgdGhlIGV4dHJhY3RfZXhwc3ltc19jbWRzIHRvIHVzZQorCSAgICBzb3Jvb3Q9IiRzb25hbWUiCisJICAgIHNvbmFtZT1gJGVjaG8gJHNvcm9vdCB8ICR7U0VEfSAtZSAncy9eLipcLy8vJ2AKKwkgICAgbmV3bGliPSJsaWJpbXAtYCRlY2hvICRzb25hbWUgfCAke1NFRH0gJ3MvXmxpYi8vO3MvXC5kbGwkLy8nYC5hIgorCisJICAgICMgSWYgdGhlIGxpYnJhcnkgaGFzIG5vIGV4cG9ydCBsaXN0LCB0aGVuIGNyZWF0ZSBvbmUgbm93CisJICAgIGlmIHRlc3QgLWYgIiRvdXRwdXRfb2JqZGlyLyRzb25hbWUtZGVmIjsgdGhlbiA6CisJICAgIGVsc2UKKwkgICAgICAkc2hvdyAiZXh0cmFjdGluZyBleHBvcnRlZCBzeW1ib2wgbGlzdCBmcm9tIFxgJHNvbmFtZSciCisJICAgICAgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9J34nCisJICAgICAgY21kcz0kZXh0cmFjdF9leHBzeW1zX2NtZHMKKwkgICAgICBmb3IgY21kIGluICRjbWRzOyBkbworCQlJRlM9IiRzYXZlX2lmcyIKKwkJZXZhbCBjbWQ9XCIkY21kXCIKKwkJJHNob3cgIiRjbWQiCisJCSRydW4gZXZhbCAiJGNtZCIgfHwgZXhpdCAkPworCSAgICAgIGRvbmUKKwkgICAgICBJRlM9IiRzYXZlX2lmcyIKKwkgICAgZmkKKworCSAgICAjIENyZWF0ZSAkbmV3bGliCisJICAgIGlmIHRlc3QgLWYgIiRvdXRwdXRfb2JqZGlyLyRuZXdsaWIiOyB0aGVuIDo7IGVsc2UKKwkgICAgICAkc2hvdyAiZ2VuZXJhdGluZyBpbXBvcnQgbGlicmFyeSBmb3IgXGAkc29uYW1lJyIKKwkgICAgICBzYXZlX2lmcz0iJElGUyI7IElGUz0nficKKwkgICAgICBjbWRzPSRvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcworCSAgICAgIGZvciBjbWQgaW4gJGNtZHM7IGRvCisJCUlGUz0iJHNhdmVfaWZzIgorCQlldmFsIGNtZD1cIiRjbWRcIgorCQkkc2hvdyAiJGNtZCIKKwkJJHJ1biBldmFsICIkY21kIiB8fCBleGl0ICQ/CisJICAgICAgZG9uZQorCSAgICAgIElGUz0iJHNhdmVfaWZzIgorCSAgICBmaQorCSAgICAjIG1ha2Ugc3VyZSB0aGUgbGlicmFyeSB2YXJpYWJsZXMgYXJlIHBvaW50aW5nIHRvIHRoZSBuZXcgbGlicmFyeQorCSAgICBkaXI9JG91dHB1dF9vYmpkaXIKKwkgICAgbGlua2xpYj0kbmV3bGliCisJICBmaSAjIHRlc3QgLW4gIiRvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcyIKKworCSAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2cgfHwgdGVzdCAiJG1vZGUiICE9IHJlbGluazsgdGhlbgorCSAgICBhZGRfc2hsaWJwYXRoPQorCSAgICBhZGRfZGlyPQorCSAgICBhZGQ9CisJICAgIGxpYl9saW5rZWQ9eWVzCisJICAgIGNhc2UgJGhhcmRjb2RlX2FjdGlvbiBpbgorCSAgICBpbW1lZGlhdGUgfCB1bnN1cHBvcnRlZCkKKwkgICAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0IiA9IG5vOyB0aGVuCisJCWFkZD0iJGRpci8kbGlua2xpYiIKKwkJY2FzZSAkaG9zdCBpbgorCQkgICotKi1zY28zLjJ2NS4wLlswMjRdKikgYWRkX2Rpcj0iLUwkZGlyIiA7OworCQkgICotKi1zeXN2NCp1dzIqKSBhZGRfZGlyPSItTCRkaXIiIDs7CisJCSAgKi0qLXN5c3Y1T3BlblVOSVgqIHwgKi0qLXN5c3Y1VW5peFdhcmU3LlswMV0uWzEwXSogfCBcCisJCSAgICAqLSotdW5peHdhcmU3KikgYWRkX2Rpcj0iLUwkZGlyIiA7OworCQkgICotKi1kYXJ3aW4qICkKKwkJICAgICMgaWYgdGhlIGxpYiBpcyBhIG1vZHVsZSB0aGVuIHdlIGNhbiBub3QgbGluayBhZ2FpbnN0CisJCSAgICAjIGl0LCBzb21lb25lIGlzIGlnbm9yaW5nIHRoZSBuZXcgd2FybmluZ3MgSSBhZGRlZAorCQkgICAgaWYgL3Vzci9iaW4vZmlsZSAtTCAkYWRkIDI+IC9kZXYvbnVsbCB8CisgICAgICAgICAgICAgICAgICAgICAgJEVHUkVQICI6IFteOl0qIGJ1bmRsZSIgPi9kZXYvbnVsbCA7IHRoZW4KKwkJICAgICAgJGVjaG8gIioqIFdhcm5pbmcsIGxpYiAkbGlua2xpYiBpcyBhIG1vZHVsZSwgbm90IGEgc2hhcmVkIGxpYnJhcnkiCisJCSAgICAgIGlmIHRlc3QgLXogIiRvbGRfbGlicmFyeSIgOyB0aGVuCisJCSAgICAgICAgJGVjaG8KKwkJICAgICAgICAkZWNobyAiKiogQW5kIHRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIHN0YXRpYyBhcmNoaXZlIGF2YWlsYWJsZSIKKwkJICAgICAgICAkZWNobyAiKiogVGhlIGxpbmsgd2lsbCBwcm9iYWJseSBmYWlsLCBzb3JyeSIKKwkJICAgICAgZWxzZQorCQkgICAgICAgIGFkZD0iJGRpci8kb2xkX2xpYnJhcnkiCisJCSAgICAgIGZpCisJCSAgICBmaQorCQllc2FjCisJICAgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTCIgPSBubzsgdGhlbgorCQljYXNlICRob3N0IGluCisJCSotKi1zdW5vcyopIGFkZF9zaGxpYnBhdGg9IiRkaXIiIDs7CisJCWVzYWMKKwkJYWRkX2Rpcj0iLUwkZGlyIgorCQlhZGQ9Ii1sJG5hbWUiCisJICAgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgPSBubzsgdGhlbgorCQlhZGRfc2hsaWJwYXRoPSIkZGlyIgorCQlhZGQ9Ii1sJG5hbWUiCisJICAgICAgZWxzZQorCQlsaWJfbGlua2VkPW5vCisJICAgICAgZmkKKwkgICAgICA7OworCSAgICByZWxpbmspCisJICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgPSB5ZXM7IHRoZW4KKwkJYWRkPSIkZGlyLyRsaW5rbGliIgorCSAgICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiID0geWVzOyB0aGVuCisJCWFkZF9kaXI9Ii1MJGRpciIKKwkJIyBUcnkgbG9va2luZyBmaXJzdCBpbiB0aGUgbG9jYXRpb24gd2UncmUgYmVpbmcgaW5zdGFsbGVkIHRvLgorCQlpZiB0ZXN0IC1uICIkaW5zdF9wcmVmaXhfZGlyIjsgdGhlbgorCQkgIGNhc2UgJGxpYmRpciBpbgorCQkgICAgW1xcL10qKQorCQkgICAgICBhZGRfZGlyPSIkYWRkX2RpciAtTCRpbnN0X3ByZWZpeF9kaXIkbGliZGlyIgorCQkgICAgICA7OworCQkgIGVzYWMKKwkJZmkKKwkJYWRkPSItbCRuYW1lIgorCSAgICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiID0geWVzOyB0aGVuCisJCWFkZF9zaGxpYnBhdGg9IiRkaXIiCisJCWFkZD0iLWwkbmFtZSIKKwkgICAgICBlbHNlCisJCWxpYl9saW5rZWQ9bm8KKwkgICAgICBmaQorCSAgICAgIDs7CisJICAgICopIGxpYl9saW5rZWQ9bm8gOzsKKwkgICAgZXNhYworCisJICAgIGlmIHRlc3QgIiRsaWJfbGlua2VkIiAhPSB5ZXM7IHRoZW4KKwkgICAgICAkZWNobyAiJG1vZGVuYW1lOiBjb25maWd1cmF0aW9uIGVycm9yOiB1bnN1cHBvcnRlZCBoYXJkY29kZSBwcm9wZXJ0aWVzIgorCSAgICAgIGV4aXQgJEVYSVRfRkFJTFVSRQorCSAgICBmaQorCisJICAgIGlmIHRlc3QgLW4gIiRhZGRfc2hsaWJwYXRoIjsgdGhlbgorCSAgICAgIGNhc2UgOiRjb21waWxlX3NobGlicGF0aDogaW4KKwkgICAgICAqIjokYWRkX3NobGlicGF0aDoiKikgOzsKKwkgICAgICAqKSBjb21waWxlX3NobGlicGF0aD0iJGNvbXBpbGVfc2hsaWJwYXRoJGFkZF9zaGxpYnBhdGg6IiA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KKwkgICAgICB0ZXN0IC1uICIkYWRkX2RpciIgJiYgY29tcGlsZV9kZXBsaWJzPSIkYWRkX2RpciAkY29tcGlsZV9kZXBsaWJzIgorCSAgICAgIHRlc3QgLW4gIiRhZGQiICYmIGNvbXBpbGVfZGVwbGlicz0iJGFkZCAkY29tcGlsZV9kZXBsaWJzIgorCSAgICBlbHNlCisJICAgICAgdGVzdCAtbiAiJGFkZF9kaXIiICYmIGRlcGxpYnM9IiRhZGRfZGlyICRkZXBsaWJzIgorCSAgICAgIHRlc3QgLW4gIiRhZGQiICYmIGRlcGxpYnM9IiRhZGQgJGRlcGxpYnMiCisJICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgIT0geWVzICYmIFwKKwkJIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiAhPSB5ZXMgJiYgXAorCQkgdGVzdCAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiID0geWVzOyB0aGVuCisJCWNhc2UgOiRmaW5hbGl6ZV9zaGxpYnBhdGg6IGluCisJCSoiOiRsaWJkaXI6IiopIDs7CisJCSopIGZpbmFsaXplX3NobGlicGF0aD0iJGZpbmFsaXplX3NobGlicGF0aCRsaWJkaXI6IiA7OworCQllc2FjCisJICAgICAgZmkKKwkgICAgZmkKKwkgIGZpCisKKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nIHx8IHRlc3QgIiRtb2RlIiA9IHJlbGluazsgdGhlbgorCSAgICBhZGRfc2hsaWJwYXRoPQorCSAgICBhZGRfZGlyPQorCSAgICBhZGQ9CisJICAgICMgRmluYWxpemUgY29tbWFuZCBmb3IgYm90aCBpcyBzaW1wbGU6IGp1c3QgaGFyZGNvZGUgaXQuCisJICAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiID0geWVzOyB0aGVuCisJICAgICAgYWRkPSIkbGliZGlyLyRsaW5rbGliIgorCSAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiA9IHllczsgdGhlbgorCSAgICAgIGFkZF9kaXI9Ii1MJGxpYmRpciIKKwkgICAgICBhZGQ9Ii1sJG5hbWUiCisJICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiID0geWVzOyB0aGVuCisJICAgICAgY2FzZSA6JGZpbmFsaXplX3NobGlicGF0aDogaW4KKwkgICAgICAqIjokbGliZGlyOiIqKSA7OworCSAgICAgICopIGZpbmFsaXplX3NobGlicGF0aD0iJGZpbmFsaXplX3NobGlicGF0aCRsaWJkaXI6IiA7OworCSAgICAgIGVzYWMKKwkgICAgICBhZGQ9Ii1sJG5hbWUiCisJICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX2F1dG9tYXRpYyIgPSB5ZXM7IHRoZW4KKwkgICAgICBpZiB0ZXN0IC1uICIkaW5zdF9wcmVmaXhfZGlyIiAmJgorCQkgdGVzdCAtZiAiJGluc3RfcHJlZml4X2RpciRsaWJkaXIvJGxpbmtsaWIiIDsgdGhlbgorCSAgICAgICAgYWRkPSIkaW5zdF9wcmVmaXhfZGlyJGxpYmRpci8kbGlua2xpYiIKKwkgICAgICBlbHNlCisJICAgICAgICBhZGQ9IiRsaWJkaXIvJGxpbmtsaWIiCisJICAgICAgZmkKKwkgICAgZWxzZQorCSAgICAgICMgV2UgY2Fubm90IHNlZW0gdG8gaGFyZGNvZGUgaXQsIGd1ZXNzIHdlJ2xsIGZha2UgaXQuCisJICAgICAgYWRkX2Rpcj0iLUwkbGliZGlyIgorCSAgICAgICMgVHJ5IGxvb2tpbmcgZmlyc3QgaW4gdGhlIGxvY2F0aW9uIHdlJ3JlIGJlaW5nIGluc3RhbGxlZCB0by4KKwkgICAgICBpZiB0ZXN0IC1uICIkaW5zdF9wcmVmaXhfZGlyIjsgdGhlbgorCQljYXNlICRsaWJkaXIgaW4KKwkJICBbXFwvXSopCisJCSAgICBhZGRfZGlyPSIkYWRkX2RpciAtTCRpbnN0X3ByZWZpeF9kaXIkbGliZGlyIgorCQkgICAgOzsKKwkJZXNhYworCSAgICAgIGZpCisJICAgICAgYWRkPSItbCRuYW1lIgorCSAgICBmaQorCisJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisJICAgICAgdGVzdCAtbiAiJGFkZF9kaXIiICYmIGZpbmFsaXplX2RlcGxpYnM9IiRhZGRfZGlyICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgICAgIHRlc3QgLW4gIiRhZGQiICYmIGZpbmFsaXplX2RlcGxpYnM9IiRhZGQgJGZpbmFsaXplX2RlcGxpYnMiCisJICAgIGVsc2UKKwkgICAgICB0ZXN0IC1uICIkYWRkX2RpciIgJiYgZGVwbGlicz0iJGFkZF9kaXIgJGRlcGxpYnMiCisJICAgICAgdGVzdCAtbiAiJGFkZCIgJiYgZGVwbGlicz0iJGFkZCAkZGVwbGlicyIKKwkgICAgZmkKKwkgIGZpCisJZWxpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgorCSAgIyBIZXJlIHdlIGFzc3VtZSB0aGF0IG9uZSBvZiBoYXJkY29kZV9kaXJlY3Qgb3IgaGFyZGNvZGVfbWludXNfTAorCSAgIyBpcyBub3QgdW5zdXBwb3J0ZWQuICBUaGlzIGlzIHZhbGlkIG9uIGFsbCBrbm93biBzdGF0aWMgYW5kCisJICAjIHNoYXJlZCBwbGF0Zm9ybXMuCisJICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0IiAhPSB1bnN1cHBvcnRlZDsgdGhlbgorCSAgICB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiICYmIGxpbmtsaWI9IiRvbGRfbGlicmFyeSIKKwkgICAgY29tcGlsZV9kZXBsaWJzPSIkZGlyLyRsaW5rbGliICRjb21waWxlX2RlcGxpYnMiCisJICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkaXIvJGxpbmtsaWIgJGZpbmFsaXplX2RlcGxpYnMiCisJICBlbHNlCisJICAgIGNvbXBpbGVfZGVwbGlicz0iLWwkbmFtZSAtTCRkaXIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgZmluYWxpemVfZGVwbGlicz0iLWwkbmFtZSAtTCRkaXIgJGZpbmFsaXplX2RlcGxpYnMiCisJICBmaQorCWVsaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KKwkgICMgTm90IGEgc2hhcmVkIGxpYnJhcnkKKwkgIGlmIHRlc3QgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgIT0gcGFzc19hbGw7IHRoZW4KKwkgICAgIyBXZSdyZSB0cnlpbmcgbGluayBhIHNoYXJlZCBsaWJyYXJ5IGFnYWluc3QgYSBzdGF0aWMgb25lCisJICAgICMgYnV0IHRoZSBzeXN0ZW0gZG9lc24ndCBzdXBwb3J0IGl0LgorCisJICAgICMgSnVzdCBwcmludCBhIHdhcm5pbmcgYW5kIGFkZCB0aGUgbGlicmFyeSB0byBkZXBlbmRlbmN5X2xpYnMgc28KKwkgICAgIyB0aGF0IHRoZSBwcm9ncmFtIGNhbiBiZSBsaW5rZWQgYWdhaW5zdCB0aGUgc3RhdGljIGxpYnJhcnkuCisJICAgICRlY2hvCisJICAgICRlY2hvICIqKiogV2FybmluZzogVGhpcyBzeXN0ZW0gY2FuIG5vdCBsaW5rIHRvIHN0YXRpYyBsaWIgYXJjaGl2ZSAkbGliLiIKKwkgICAgJGVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisJICAgICRlY2hvICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgorCSAgICAkZWNobyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlLiIKKwkgICAgaWYgdGVzdCAiJG1vZHVsZSIgPSB5ZXM7IHRoZW4KKwkgICAgICAkZWNobyAiKioqIEJ1dCBhcyB5b3UgdHJ5IHRvIGJ1aWxkIGEgbW9kdWxlIGxpYnJhcnksIGxpYnRvb2wgd2lsbCBzdGlsbCBjcmVhdGUgIgorCSAgICAgICRlY2hvICIqKiogYSBzdGF0aWMgbW9kdWxlLCB0aGF0IHNob3VsZCB3b3JrIGFzIGxvbmcgYXMgdGhlIGRsb3BlbmluZyBhcHBsaWNhdGlvbiIKKwkgICAgICAkZWNobyAiKioqIGlzIGxpbmtlZCB3aXRoIHRoZSAtZGxvcGVuIGZsYWcgdG8gcmVzb2x2ZSBzeW1ib2xzIGF0IHJ1bnRpbWUuIgorCSAgICAgIGlmIHRlc3QgLXogIiRnbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCisJCSRlY2hvCisJCSRlY2hvICIqKiogSG93ZXZlciwgdGhpcyB3b3VsZCBvbmx5IHdvcmsgaWYgbGlidG9vbCB3YXMgYWJsZSB0byBleHRyYWN0IHN5bWJvbCIKKwkJJGVjaG8gIioqKiBsaXN0cyBmcm9tIGEgcHJvZ3JhbSwgdXNpbmcgXGBubScgb3IgZXF1aXZhbGVudCwgYnV0IGxpYnRvb2wgY291bGQiCisJCSRlY2hvICIqKiogbm90IGZpbmQgc3VjaCBhIHByb2dyYW0uICBTbywgdGhpcyBtb2R1bGUgaXMgcHJvYmFibHkgdXNlbGVzcy4iCisJCSRlY2hvICIqKiogXGBubScgZnJvbSBHTlUgYmludXRpbHMgYW5kIGEgZnVsbCByZWJ1aWxkIG1heSBoZWxwLiIKKwkgICAgICBmaQorCSAgICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSBubzsgdGhlbgorCQlidWlsZF9saWJ0b29sX2xpYnM9bW9kdWxlCisJCWJ1aWxkX29sZF9saWJzPXllcworCSAgICAgIGVsc2UKKwkJYnVpbGRfbGlidG9vbF9saWJzPW5vCisJICAgICAgZmkKKwkgICAgZmkKKwkgIGVsc2UKKwkgICAgZGVwbGlicz0iJGRpci8kb2xkX2xpYnJhcnkgJGRlcGxpYnMiCisJICAgIGxpbmtfc3RhdGljPXllcworCSAgZmkKKwlmaSAjIGxpbmsgc2hhcmVkL3N0YXRpYyBsaWJyYXJ5PworCisJaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYjsgdGhlbgorCSAgaWYgdGVzdCAtbiAiJGRlcGVuZGVuY3lfbGlicyIgJiYKKwkgICAgIHsgdGVzdCAiJGhhcmRjb2RlX2ludG9fbGlicyIgIT0geWVzIHx8CisJICAgICAgIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXMgfHwKKwkgICAgICAgdGVzdCAiJGxpbmtfc3RhdGljIiA9IHllczsgfTsgdGhlbgorCSAgICAjIEV4dHJhY3QgLVIgZnJvbSBkZXBlbmRlbmN5X2xpYnMKKwkgICAgdGVtcF9kZXBsaWJzPQorCSAgICBmb3IgbGliZGlyIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgICAgY2FzZSAkbGliZGlyIGluCisJICAgICAgLVIqKSB0ZW1wX3hycGF0aD1gJGVjaG8gIlgkbGliZGlyIiB8ICRYc2VkIC1lICdzL14tUi8vJ2AKKwkJICAgY2FzZSAiICR4cnBhdGggIiBpbgorCQkgICAqIiAkdGVtcF94cnBhdGggIiopIDs7CisJCSAgICopIHhycGF0aD0iJHhycGF0aCAkdGVtcF94cnBhdGgiOzsKKwkJICAgZXNhYzs7CisJICAgICAgKikgdGVtcF9kZXBsaWJzPSIkdGVtcF9kZXBsaWJzICRsaWJkaXIiOzsKKwkgICAgICBlc2FjCisJICAgIGRvbmUKKwkgICAgZGVwZW5kZW5jeV9saWJzPSIkdGVtcF9kZXBsaWJzIgorCSAgZmkKKworCSAgbmV3bGliX3NlYXJjaF9wYXRoPSIkbmV3bGliX3NlYXJjaF9wYXRoICRhYnNkaXIiCisJICAjIExpbmsgYWdhaW5zdCB0aGlzIGxpYnJhcnkKKwkgIHRlc3QgIiRsaW5rX3N0YXRpYyIgPSBubyAmJiBuZXdkZXBlbmRlbmN5X2xpYnM9IiRhYnNfbGFkaXIvJGxhbmFtZSAkbmV3ZGVwZW5kZW5jeV9saWJzIgorCSAgIyAuLi4gYW5kIGl0cyBkZXBlbmRlbmN5X2xpYnMKKwkgIHRtcF9saWJzPQorCSAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworCSAgICBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKKwkgICAgaWYgdGVzdCAiWCRkdXBsaWNhdGVfZGVwcyIgPSAiWHllcyIgOyB0aGVuCisJICAgICAgY2FzZSAiJHRtcF9saWJzICIgaW4KKwkgICAgICAqIiAkZGVwbGliICIqKSBzcGVjaWFsZGVwbGlicz0iJHNwZWNpYWxkZXBsaWJzICRkZXBsaWIiIDs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgICB0bXBfbGlicz0iJHRtcF9saWJzICRkZXBsaWIiCisJICBkb25lCisKKwkgIGlmIHRlc3QgIiRsaW5rX2FsbF9kZXBsaWJzIiAhPSBubzsgdGhlbgorCSAgICAjIEFkZCB0aGUgc2VhcmNoIHBhdGhzIG9mIGFsbCBkZXBlbmRlbmN5IGxpYnJhcmllcworCSAgICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgICAgY2FzZSAkZGVwbGliIGluCisJICAgICAgLUwqKSBwYXRoPSIkZGVwbGliIiA7OworCSAgICAgICoubGEpCisJCWRpcj1gJGVjaG8gIlgkZGVwbGliIiB8ICRYc2VkIC1lICdzJS9bXi9dKiQlJSdgCisJCXRlc3QgIlgkZGlyIiA9ICJYJGRlcGxpYiIgJiYgZGlyPSIuIgorCQkjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KKwkJY2FzZSAkZGlyIGluCisJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzZGlyPSIkZGlyIiA7OworCQkqKQorCQkgIGFic2Rpcj1gY2QgIiRkaXIiICYmIHB3ZGAKKwkJICBpZiB0ZXN0IC16ICIkYWJzZGlyIjsgdGhlbgorCQkgICAgJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogY2Fubm90IGRldGVybWluZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBvZiBcYCRkaXInIiAxPiYyCisJCSAgICBhYnNkaXI9IiRkaXIiCisJCSAgZmkKKwkJICA7OworCQllc2FjCisJCWlmIGdyZXAgIl5pbnN0YWxsZWQ9bm8iICRkZXBsaWIgPiAvZGV2L251bGw7IHRoZW4KKwkJICBwYXRoPSIkYWJzZGlyLyRvYmpkaXIiCisJCWVsc2UKKwkJICBldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkZGVwbGliYAorCQkgIGlmIHRlc3QgLXogIiRsaWJkaXIiOyB0aGVuCisJCSAgICAkZWNobyAiJG1vZGVuYW1lOiBcYCRkZXBsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIgMT4mMgorCQkgICAgZXhpdCAkRVhJVF9GQUlMVVJFCisJCSAgZmkKKwkJICBpZiB0ZXN0ICIkYWJzZGlyIiAhPSAiJGxpYmRpciI7IHRoZW4KKwkJICAgICRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgJGRlcGxpYicgc2VlbXMgdG8gYmUgbW92ZWQiIDE+JjIKKwkJICBmaQorCQkgIHBhdGg9IiRhYnNkaXIiCisJCWZpCisJCWRlcGRlcGw9CisJCWNhc2UgJGhvc3QgaW4KKwkJKi0qLWRhcndpbiopCisJCSAgIyB3ZSBkbyBub3Qgd2FudCB0byBsaW5rIGFnYWluc3Qgc3RhdGljIGxpYnMsCisJCSAgIyBidXQgbmVlZCB0byBsaW5rIGFnYWluc3Qgc2hhcmVkCisJCSAgZXZhbCBkZXBsaWJyYXJ5X25hbWVzPWAke1NFRH0gLW4gLWUgJ3MvXmxpYnJhcnlfbmFtZXM9XCguKlwpJC9cMS9wJyAkZGVwbGliYAorCQkgIGlmIHRlc3QgLW4gIiRkZXBsaWJyYXJ5X25hbWVzIiA7IHRoZW4KKwkJICAgIGZvciB0bXAgaW4gJGRlcGxpYnJhcnlfbmFtZXMgOyBkbworCQkgICAgICBkZXBkZXBsPSR0bXAKKwkJICAgIGRvbmUKKwkJICAgIGlmIHRlc3QgLWYgIiRwYXRoLyRkZXBkZXBsIiA7IHRoZW4KKwkJICAgICAgZGVwZGVwbD0iJHBhdGgvJGRlcGRlcGwiCisJCSAgICBmaQorCQkgICAgIyBkbyBub3QgYWRkIHBhdGhzIHdoaWNoIGFyZSBhbHJlYWR5IHRoZXJlCisJCSAgICBjYXNlICIgJG5ld2xpYl9zZWFyY2hfcGF0aCAiIGluCisJCSAgICAqIiAkcGF0aCAiKikgOzsKKwkJICAgICopIG5ld2xpYl9zZWFyY2hfcGF0aD0iJG5ld2xpYl9zZWFyY2hfcGF0aCAkcGF0aCI7OworCQkgICAgZXNhYworCQkgIGZpCisJCSAgcGF0aD0iIgorCQkgIDs7CisJCSopCisJCSAgcGF0aD0iLUwkcGF0aCIKKwkJICA7OworCQllc2FjCisJCTs7CisJICAgICAgLWwqKQorCQljYXNlICRob3N0IGluCisJCSotKi1kYXJ3aW4qKQorCQkgICMgQWdhaW4sIHdlIG9ubHkgd2FudCB0byBsaW5rIGFnYWluc3Qgc2hhcmVkIGxpYnJhcmllcworCQkgIGV2YWwgdG1wX2xpYnM9YCRlY2hvICJYJGRlcGxpYiIgfCAkWHNlZCAtZSAicyxeXC1sLCwiYAorCQkgIGZvciB0bXAgaW4gJG5ld2xpYl9zZWFyY2hfcGF0aCA7IGRvCisJCSAgICBpZiB0ZXN0IC1mICIkdG1wL2xpYiR0bXBfbGlicy5keWxpYiIgOyB0aGVuCisJCSAgICAgIGV2YWwgZGVwZGVwbD0iJHRtcC9saWIkdG1wX2xpYnMuZHlsaWIiCisJCSAgICAgIGJyZWFrCisJCSAgICBmaQorCQkgIGRvbmUKKwkJICBwYXRoPSIiCisJCSAgOzsKKwkJKikgY29udGludWUgOzsKKwkJZXNhYworCQk7OworCSAgICAgICopIGNvbnRpbnVlIDs7CisJICAgICAgZXNhYworCSAgICAgIGNhc2UgIiAkZGVwbGlicyAiIGluCisJICAgICAgKiIgJHBhdGggIiopIDs7CisJICAgICAgKikgZGVwbGlicz0iJHBhdGggJGRlcGxpYnMiIDs7CisJICAgICAgZXNhYworCSAgICAgIGNhc2UgIiAkZGVwbGlicyAiIGluCisJICAgICAgKiIgJGRlcGRlcGwgIiopIDs7CisJICAgICAgKikgZGVwbGlicz0iJGRlcGRlcGwgJGRlcGxpYnMiIDs7CisJICAgICAgZXNhYworCSAgICBkb25lCisJICBmaSAjIGxpbmtfYWxsX2RlcGxpYnMgIT0gbm8KKwlmaSAjIGxpbmttb2RlID0gbGliCisgICAgICBkb25lICMgZm9yIGRlcGxpYiBpbiAkbGlicworICAgICAgZGVwZW5kZW5jeV9saWJzPSIkbmV3ZGVwZW5kZW5jeV9saWJzIgorICAgICAgaWYgdGVzdCAiJHBhc3MiID0gZGxwcmVvcGVuOyB0aGVuCisJIyBMaW5rIHRoZSBkbHByZW9wZW5lZCBsaWJyYXJpZXMgYmVmb3JlIG90aGVyIGxpYnJhcmllcworCWZvciBkZXBsaWIgaW4gJHNhdmVfZGVwbGliczsgZG8KKwkgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJZG9uZQorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiRwYXNzIiAhPSBkbG9wZW47IHRoZW4KKwlpZiB0ZXN0ICIkcGFzcyIgIT0gY29udjsgdGhlbgorCSAgIyBNYWtlIHN1cmUgbGliX3NlYXJjaF9wYXRoIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGRpcmVjdG9yaWVzLgorCSAgbGliX3NlYXJjaF9wYXRoPQorCSAgZm9yIGRpciBpbiAkbmV3bGliX3NlYXJjaF9wYXRoOyBkbworCSAgICBjYXNlICIkbGliX3NlYXJjaF9wYXRoICIgaW4KKwkgICAgKiIgJGRpciAiKikgOzsKKwkgICAgKikgbGliX3NlYXJjaF9wYXRoPSIkbGliX3NlYXJjaF9wYXRoICRkaXIiIDs7CisJICAgIGVzYWMKKwkgIGRvbmUKKwkgIG5ld2xpYl9zZWFyY2hfcGF0aD0KKwlmaQorCisJaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiAhPSAicHJvZyxsaW5rIjsgdGhlbgorCSAgdmFycz0iZGVwbGlicyIKKwllbHNlCisJICB2YXJzPSJjb21waWxlX2RlcGxpYnMgZmluYWxpemVfZGVwbGlicyIKKwlmaQorCWZvciB2YXIgaW4gJHZhcnMgZGVwZW5kZW5jeV9saWJzOyBkbworCSAgIyBBZGQgbGlicmFyaWVzIHRvICR2YXIgaW4gcmV2ZXJzZSBvcmRlcgorCSAgZXZhbCB0bXBfbGlicz1cIlwkJHZhclwiCisJICBuZXdfbGlicz0KKwkgIGZvciBkZXBsaWIgaW4gJHRtcF9saWJzOyBkbworCSAgICAjIEZJWE1FOiBQZWRhbnRpY2FsbHksIHRoaXMgaXMgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvLCBzbworCSAgICAjICAgICAgICB0aGF0IHNvbWUgbmFzdHkgZGVwZW5kZW5jeSBsb29wIGlzbid0IGFjY2lkZW50YWxseQorCSAgICAjICAgICAgICBicm9rZW46CisJICAgICNuZXdfbGlicz0iJGRlcGxpYiAkbmV3X2xpYnMiCisJICAgICMgUHJhZ21hdGljYWxseSwgdGhpcyBzZWVtcyB0byBjYXVzZSB2ZXJ5IGZldyBwcm9ibGVtcyBpbgorCSAgICAjIHByYWN0aWNlOgorCSAgICBjYXNlICRkZXBsaWIgaW4KKwkgICAgLUwqKSBuZXdfbGlicz0iJGRlcGxpYiAkbmV3X2xpYnMiIDs7CisJICAgIC1SKikgOzsKKwkgICAgKikKKwkgICAgICAjIEFuZCBoZXJlIGlzIHRoZSByZWFzb246IHdoZW4gYSBsaWJyYXJ5IGFwcGVhcnMgbW9yZQorCSAgICAgICMgdGhhbiBvbmNlIGFzIGFuIGV4cGxpY2l0IGRlcGVuZGVuY2Ugb2YgYSBsaWJyYXJ5LCBvcgorCSAgICAgICMgaXMgaW1wbGljaXRseSBsaW5rZWQgaW4gbW9yZSB0aGFuIG9uY2UgYnkgdGhlCisJICAgICAgIyBjb21waWxlciwgaXQgaXMgY29uc2lkZXJlZCBzcGVjaWFsLCBhbmQgbXVsdGlwbGUKKwkgICAgICAjIG9jY3VycmVuY2VzIHRoZXJlb2YgYXJlIG5vdCByZW1vdmVkLiAgQ29tcGFyZSB0aGlzCisJICAgICAgIyB3aXRoIGhhdmluZyB0aGUgc2FtZSBsaWJyYXJ5IGJlaW5nIGxpc3RlZCBhcyBhCisJICAgICAgIyBkZXBlbmRlbmN5IG9mIG11bHRpcGxlIG90aGVyIGxpYnJhcmllczogaW4gdGhpcyBjYXNlLAorCSAgICAgICMgd2Uga25vdyAocGVkYW50aWNhbGx5LCB3ZSBhc3N1bWUpIHRoZSBsaWJyYXJ5IGRvZXMgbm90CisJICAgICAgIyBuZWVkIHRvIGJlIGxpc3RlZCBtb3JlIHRoYW4gb25jZSwgc28gd2Uga2VlcCBvbmx5IHRoZQorCSAgICAgICMgbGFzdCBjb3B5LiAgVGhpcyBpcyBub3QgYWx3YXlzIHJpZ2h0LCBidXQgaXQgaXMgcmFyZQorCSAgICAgICMgZW5vdWdoIHRoYXQgd2UgcmVxdWlyZSB1c2VycyB0aGF0IHJlYWxseSBtZWFuIHRvIHBsYXkKKwkgICAgICAjIHN1Y2ggdW5wb3J0YWJsZSBsaW5raW5nIHRyaWNrcyB0byBsaW5rIHRoZSBsaWJyYXJ5CisJICAgICAgIyB1c2luZyAtV2wsLWxuYW1lLCBzbyB0aGF0IGxpYnRvb2wgZG9lcyBub3QgY29uc2lkZXIgaXQKKwkgICAgICAjIGZvciBkdXBsaWNhdGUgcmVtb3ZhbC4KKwkgICAgICBjYXNlICIgJHNwZWNpYWxkZXBsaWJzICIgaW4KKwkgICAgICAqIiAkZGVwbGliICIqKSBuZXdfbGlicz0iJGRlcGxpYiAkbmV3X2xpYnMiIDs7CisJICAgICAgKikKKwkJY2FzZSAiICRuZXdfbGlicyAiIGluCisJCSoiICRkZXBsaWIgIiopIDs7CisJCSopIG5ld19saWJzPSIkZGVwbGliICRuZXdfbGlicyIgOzsKKwkJZXNhYworCQk7OworCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgICBlc2FjCisJICBkb25lCisJICB0bXBfbGlicz0KKwkgIGZvciBkZXBsaWIgaW4gJG5ld19saWJzOyBkbworCSAgICBjYXNlICRkZXBsaWIgaW4KKwkgICAgLUwqKQorCSAgICAgIGNhc2UgIiAkdG1wX2xpYnMgIiBpbgorCSAgICAgICoiICRkZXBsaWIgIiopIDs7CisJICAgICAgKikgdG1wX2xpYnM9IiR0bXBfbGlicyAkZGVwbGliIiA7OworCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgICAqKSB0bXBfbGlicz0iJHRtcF9saWJzICRkZXBsaWIiIDs7CisJICAgIGVzYWMKKwkgIGRvbmUKKwkgIGV2YWwgJHZhcj1cIiR0bXBfbGlic1wiCisJZG9uZSAjIGZvciB2YXIKKyAgICAgIGZpCisgICAgICAjIExhc3Qgc3RlcDogcmVtb3ZlIHJ1bnRpbWUgbGlicyBmcm9tIGRlcGVuZGVuY3lfbGlicworICAgICAgIyAodGhleSBzdGF5IGluIGRlcGxpYnMpCisgICAgICB0bXBfbGlicz0KKyAgICAgIGZvciBpIGluICRkZXBlbmRlbmN5X2xpYnMgOyBkbworCWNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgJGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCAiIGluCisJKiIgJGkgIiopCisJICBpPSIiCisJICA7OworCWVzYWMKKwlpZiB0ZXN0IC1uICIkaSIgOyB0aGVuCisJICB0bXBfbGlicz0iJHRtcF9saWJzICRpIgorCWZpCisgICAgICBkb25lCisgICAgICBkZXBlbmRlbmN5X2xpYnM9JHRtcF9saWJzCisgICAgZG9uZSAjIGZvciBwYXNzCisgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KKyAgICAgIGRsZmlsZXM9IiRuZXdkbGZpbGVzIgorICAgICAgZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMiCisgICAgZmkKKworICAgIGNhc2UgJGxpbmttb2RlIGluCisgICAgb2xkbGliKQorICAgICAgaWYgdGVzdCAtbiAiJGRlcGxpYnMiOyB0aGVuCisJJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogXGAtbCcgYW5kIFxgLUwnIGFyZSBpZ25vcmVkIGZvciBhcmNoaXZlcyIgMT4mMgorICAgICAgZmkKKworICAgICAgaWYgdGVzdCAtbiAiJGRsZmlsZXMkZGxwcmVmaWxlcyIgfHwgdGVzdCAiJGRsc2VsZiIgIT0gbm87IHRoZW4KKwkkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBcYC1kbG9wZW4nIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIiAxPiYyCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0IC1uICIkcnBhdGgiOyB0aGVuCisJJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogXGAtcnBhdGgnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIiAxPiYyCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0IC1uICIkeHJwYXRoIjsgdGhlbgorCSRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgLVInIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIiAxPiYyCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0IC1uICIkdmluZm8iOyB0aGVuCisJJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogXGAtdmVyc2lvbi1pbmZvLy12ZXJzaW9uLW51bWJlcicgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiIDE+JjIKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgLW4gIiRyZWxlYXNlIjsgdGhlbgorCSRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgLXJlbGVhc2UnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIiAxPiYyCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiIHx8IHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCI7IHRoZW4KKwkkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBcYC1leHBvcnQtc3ltYm9scycgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiIDE+JjIKKyAgICAgIGZpCisKKyAgICAgICMgTm93IHNldCB0aGUgdmFyaWFibGVzIGZvciBidWlsZGluZyBvbGQgbGlicmFyaWVzLgorICAgICAgYnVpbGRfbGlidG9vbF9saWJzPW5vCisgICAgICBvbGRsaWJzPSIkb3V0cHV0IgorICAgICAgb2Jqcz0iJG9ianMkb2xkX2RlcGxpYnMiCisgICAgICA7OworCisgICAgbGliKQorICAgICAgIyBNYWtlIHN1cmUgd2Ugb25seSBnZW5lcmF0ZSBsaWJyYXJpZXMgb2YgdGhlIGZvcm0gYGxpYk5BTUUubGEnLgorICAgICAgY2FzZSAkb3V0cHV0bmFtZSBpbgorICAgICAgbGliKikKKwluYW1lPWAkZWNobyAiWCRvdXRwdXRuYW1lIiB8ICRYc2VkIC1lICdzL1wubGEkLy8nIC1lICdzL15saWIvLydgCisJZXZhbCBzaGFyZWRfZXh0PVwiJHNocmV4dF9jbWRzXCIKKwlldmFsIGxpYm5hbWU9XCIkbGlibmFtZV9zcGVjXCIKKwk7OworICAgICAgKikKKwlpZiB0ZXN0ICIkbW9kdWxlIiA9IG5vOyB0aGVuCisJICAkZWNobyAiJG1vZGVuYW1lOiBsaWJ0b29sIGxpYnJhcnkgXGAkb3V0cHV0JyBtdXN0IGJlZ2luIHdpdGggXGBsaWInIiAxPiYyCisJICAkZWNobyAiJGhlbHAiIDE+JjIKKwkgIGV4aXQgJEVYSVRfRkFJTFVSRQorCWZpCisJaWYgdGVzdCAiJG5lZWRfbGliX3ByZWZpeCIgIT0gbm87IHRoZW4KKwkgICMgQWRkIHRoZSAibGliIiBwcmVmaXggZm9yIG1vZHVsZXMgaWYgcmVxdWlyZWQKKwkgIG5hbWU9YCRlY2hvICJYJG91dHB1dG5hbWUiIHwgJFhzZWQgLWUgJ3MvXC5sYSQvLydgCisJICBldmFsIHNoYXJlZF9leHQ9XCIkc2hyZXh0X2NtZHNcIgorCSAgZXZhbCBsaWJuYW1lPVwiJGxpYm5hbWVfc3BlY1wiCisJZWxzZQorCSAgbGlibmFtZT1gJGVjaG8gIlgkb3V0cHV0bmFtZSIgfCAkWHNlZCAtZSAncy9cLmxhJC8vJ2AKKwlmaQorCTs7CisgICAgICBlc2FjCisKKyAgICAgIGlmIHRlc3QgLW4gIiRvYmpzIjsgdGhlbgorCWlmIHRlc3QgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgIT0gcGFzc19hbGw7IHRoZW4KKwkgICRlY2hvICIkbW9kZW5hbWU6IGNhbm5vdCBidWlsZCBsaWJ0b29sIGxpYnJhcnkgXGAkb3V0cHV0JyBmcm9tIG5vbi1saWJ0b29sIG9iamVjdHMgb24gdGhpcyBob3N0OiRvYmpzIiAyPiYxCisJICBleGl0ICRFWElUX0ZBSUxVUkUKKwllbHNlCisJICAkZWNobworCSAgJGVjaG8gIioqKiBXYXJuaW5nOiBMaW5raW5nIHRoZSBzaGFyZWQgbGlicmFyeSAkb3V0cHV0IGFnYWluc3QgdGhlIG5vbi1saWJ0b29sIgorCSAgJGVjaG8gIioqKiBvYmplY3RzICRvYmpzIGlzIG5vdCBwb3J0YWJsZSEiCisJICBsaWJvYmpzPSIkbGlib2JqcyAkb2JqcyIKKwlmaQorICAgICAgZmkKKworICAgICAgaWYgdGVzdCAiJGRsc2VsZiIgIT0gbm87IHRoZW4KKwkkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBcYC1kbG9wZW4gc2VsZicgaXMgaWdub3JlZCBmb3IgbGlidG9vbCBsaWJyYXJpZXMiIDE+JjIKKyAgICAgIGZpCisKKyAgICAgIHNldCBkdW1teSAkcnBhdGgKKyAgICAgIGlmIHRlc3QgIiQjIiAtZ3QgMjsgdGhlbgorCSRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IGlnbm9yaW5nIG11bHRpcGxlIFxgLXJwYXRoJ3MgZm9yIGEgbGlidG9vbCBsaWJyYXJ5IiAxPiYyCisgICAgICBmaQorICAgICAgaW5zdGFsbF9saWJkaXI9IiQyIgorCisgICAgICBvbGRsaWJzPQorICAgICAgaWYgdGVzdCAteiAiJHJwYXRoIjsgdGhlbgorCWlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisJICAjIEJ1aWxkaW5nIGEgbGlidG9vbCBjb252ZW5pZW5jZSBsaWJyYXJ5LgorCSAgIyBTb21lIGNvbXBpbGVycyBoYXZlIHByb2JsZW1zIHdpdGggYSBgLmFsJyBleHRlbnNpb24gc28KKwkgICMgY29udmVuaWVuY2UgbGlicmFyaWVzIHNob3VsZCBoYXZlIHRoZSBzYW1lIGV4dGVuc2lvbiBhbgorCSAgIyBhcmNoaXZlIG5vcm1hbGx5IHdvdWxkLgorCSAgb2xkbGlicz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuJGxpYmV4dCAkb2xkbGlicyIKKwkgIGJ1aWxkX2xpYnRvb2xfbGlicz1jb252ZW5pZW5jZQorCSAgYnVpbGRfb2xkX2xpYnM9eWVzCisJZmkKKworCWlmIHRlc3QgLW4gIiR2aW5mbyI7IHRoZW4KKwkgICRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgLXZlcnNpb24taW5mby8tdmVyc2lvbi1udW1iZXInIGlzIGlnbm9yZWQgZm9yIGNvbnZlbmllbmNlIGxpYnJhcmllcyIgMT4mMgorCWZpCisKKwlpZiB0ZXN0IC1uICIkcmVsZWFzZSI7IHRoZW4KKwkgICRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgLXJlbGVhc2UnIGlzIGlnbm9yZWQgZm9yIGNvbnZlbmllbmNlIGxpYnJhcmllcyIgMT4mMgorCWZpCisgICAgICBlbHNlCisKKwkjIFBhcnNlIHRoZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGFyZ3VtZW50LgorCXNhdmVfaWZzPSIkSUZTIjsgSUZTPSc6JworCXNldCBkdW1teSAkdmluZm8gMCAwIDAKKwlJRlM9IiRzYXZlX2lmcyIKKworCWlmIHRlc3QgLW4gIiQ4IjsgdGhlbgorCSAgJGVjaG8gIiRtb2RlbmFtZTogdG9vIG1hbnkgcGFyYW1ldGVycyB0byBcYC12ZXJzaW9uLWluZm8nIiAxPiYyCisJICAkZWNobyAiJGhlbHAiIDE+JjIKKwkgIGV4aXQgJEVYSVRfRkFJTFVSRQorCWZpCisKKwkjIGNvbnZlcnQgYWJzb2x1dGUgdmVyc2lvbiBudW1iZXJzIHRvIGxpYnRvb2wgYWdlcworCSMgdGhpcyByZXRhaW5zIGNvbXBhdGliaWxpdHkgd2l0aCAubGEgZmlsZXMgYW5kIGF0dGVtcHRzCisJIyB0byBtYWtlIHRoZSBjb2RlIGJlbG93IGEgYml0IG1vcmUgY29tcHJlaGVuc2libGUKKworCWNhc2UgJHZpbmZvX251bWJlciBpbgorCXllcykKKwkgIG51bWJlcl9tYWpvcj0iJDIiCisJICBudW1iZXJfbWlub3I9IiQzIgorCSAgbnVtYmVyX3JldmlzaW9uPSIkNCIKKwkgICMKKwkgICMgVGhlcmUgYXJlIHJlYWxseSBvbmx5IHR3byBraW5kcyAtLSB0aG9zZSB0aGF0CisJICAjIHVzZSB0aGUgY3VycmVudCByZXZpc2lvbiBhcyB0aGUgbWFqb3IgdmVyc2lvbgorCSAgIyBhbmQgdGhvc2UgdGhhdCBzdWJ0cmFjdCBhZ2UgYW5kIHVzZSBhZ2UgYXMKKwkgICMgYSBtaW5vciB2ZXJzaW9uLiAgQnV0LCB0aGVuIHRoZXJlIGlzIGlyaXgKKwkgICMgd2hpY2ggaGFzIGFuIGV4dHJhIDEgYWRkZWQganVzdCBmb3IgZnVuCisJICAjCisJICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KKwkgIGRhcndpbnxsaW51eHxvc2Z8d2luZG93c3xub25lKQorCSAgICBjdXJyZW50PWBleHByICRudW1iZXJfbWFqb3IgKyAkbnVtYmVyX21pbm9yYAorCSAgICBhZ2U9IiRudW1iZXJfbWlub3IiCisJICAgIHJldmlzaW9uPSIkbnVtYmVyX3JldmlzaW9uIgorCSAgICA7OworCSAgZnJlZWJzZC1hb3V0fGZyZWVic2QtZWxmfHN1bm9zKQorCSAgICBjdXJyZW50PSIkbnVtYmVyX21ham9yIgorCSAgICByZXZpc2lvbj0iJG51bWJlcl9taW5vciIKKwkgICAgYWdlPSIwIgorCSAgICA7OworCSAgaXJpeHxub25zdG9wdXgpCisJICAgIGN1cnJlbnQ9YGV4cHIgJG51bWJlcl9tYWpvciArICRudW1iZXJfbWlub3IgLSAxYAorCSAgICBhZ2U9IiRudW1iZXJfbWlub3IiCisJICAgIHJldmlzaW9uPSIkbnVtYmVyX21pbm9yIgorCSAgICA7OworCSAgZXNhYworCSAgOzsKKwlubykKKwkgIGN1cnJlbnQ9IiQyIgorCSAgcmV2aXNpb249IiQzIgorCSAgYWdlPSIkNCIKKwkgIDs7CisJZXNhYworCisJIyBDaGVjayB0aGF0IGVhY2ggb2YgdGhlIHRoaW5ncyBhcmUgdmFsaWQgbnVtYmVycy4KKwljYXNlICRjdXJyZW50IGluCisJMHxbMS05XXxbMS05XVswLTldfFsxLTldWzAtOV1bMC05XXxbMS05XVswLTldWzAtOV1bMC05XXxbMS05XVswLTldWzAtOV1bMC05XVswLTldKSA7OworCSopCisJICAkZWNobyAiJG1vZGVuYW1lOiBDVVJSRU5UIFxgJGN1cnJlbnQnIG11c3QgYmUgYSBub25uZWdhdGl2ZSBpbnRlZ2VyIiAxPiYyCisJICAkZWNobyAiJG1vZGVuYW1lOiBcYCR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iIDE+JjIKKwkgIGV4aXQgJEVYSVRfRkFJTFVSRQorCSAgOzsKKwllc2FjCisKKwljYXNlICRyZXZpc2lvbiBpbgorCTB8WzEtOV18WzEtOV1bMC05XXxbMS05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV1bMC05XSkgOzsKKwkqKQorCSAgJGVjaG8gIiRtb2RlbmFtZTogUkVWSVNJT04gXGAkcmV2aXNpb24nIG11c3QgYmUgYSBub25uZWdhdGl2ZSBpbnRlZ2VyIiAxPiYyCisJICAkZWNobyAiJG1vZGVuYW1lOiBcYCR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iIDE+JjIKKwkgIGV4aXQgJEVYSVRfRkFJTFVSRQorCSAgOzsKKwllc2FjCisKKwljYXNlICRhZ2UgaW4KKwkwfFsxLTldfFsxLTldWzAtOV18WzEtOV1bMC05XVswLTldfFsxLTldWzAtOV1bMC05XVswLTldfFsxLTldWzAtOV1bMC05XVswLTldWzAtOV0pIDs7CisJKikKKwkgICRlY2hvICIkbW9kZW5hbWU6IEFHRSBcYCRhZ2UnIG11c3QgYmUgYSBub25uZWdhdGl2ZSBpbnRlZ2VyIiAxPiYyCisJICAkZWNobyAiJG1vZGVuYW1lOiBcYCR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iIDE+JjIKKwkgIGV4aXQgJEVYSVRfRkFJTFVSRQorCSAgOzsKKwllc2FjCisKKwlpZiB0ZXN0ICIkYWdlIiAtZ3QgIiRjdXJyZW50IjsgdGhlbgorCSAgJGVjaG8gIiRtb2RlbmFtZTogQUdFIFxgJGFnZScgaXMgZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IGludGVyZmFjZSBudW1iZXIgXGAkY3VycmVudCciIDE+JjIKKwkgICRlY2hvICIkbW9kZW5hbWU6IFxgJHZpbmZvJyBpcyBub3QgdmFsaWQgdmVyc2lvbiBpbmZvcm1hdGlvbiIgMT4mMgorCSAgZXhpdCAkRVhJVF9GQUlMVVJFCisJZmkKKworCSMgQ2FsY3VsYXRlIHRoZSB2ZXJzaW9uIHZhcmlhYmxlcy4KKwltYWpvcj0KKwl2ZXJzdWZmaXg9CisJdmVyc3RyaW5nPQorCWNhc2UgJHZlcnNpb25fdHlwZSBpbgorCW5vbmUpIDs7CisKKwlkYXJ3aW4pCisJICAjIExpa2UgTGludXgsIGJ1dCB3aXRoIHRoZSBjdXJyZW50IHZlcnNpb24gYXZhaWxhYmxlIGluCisJICAjIHZlcnN0cmluZyBmb3IgY29kaW5nIGl0IGludG8gdGhlIGxpYnJhcnkgaGVhZGVyCisJICBtYWpvcj0uYGV4cHIgJGN1cnJlbnQgLSAkYWdlYAorCSAgdmVyc3VmZml4PSIkbWFqb3IuJGFnZS4kcmV2aXNpb24iCisJICAjIERhcndpbiBsZCBkb2Vzbid0IGxpa2UgMCBmb3IgdGhlc2Ugb3B0aW9ucy4uLgorCSAgbWlub3JfY3VycmVudD1gZXhwciAkY3VycmVudCArIDFgCisJICB2ZXJzdHJpbmc9IiR7d2x9LWNvbXBhdGliaWxpdHlfdmVyc2lvbiAke3dsfSRtaW5vcl9jdXJyZW50ICR7d2x9LWN1cnJlbnRfdmVyc2lvbiAke3dsfSRtaW5vcl9jdXJyZW50LiRyZXZpc2lvbiIKKwkgIDs7CisKKwlmcmVlYnNkLWFvdXQpCisJICBtYWpvcj0iLiRjdXJyZW50IgorCSAgdmVyc3VmZml4PSIuJGN1cnJlbnQuJHJldmlzaW9uIjsKKwkgIDs7CisKKwlmcmVlYnNkLWVsZikKKwkgIG1ham9yPSIuJGN1cnJlbnQiCisJICB2ZXJzdWZmaXg9Ii4kY3VycmVudCI7CisJICA7OworCisJaXJpeCB8IG5vbnN0b3B1eCkKKwkgIG1ham9yPWBleHByICRjdXJyZW50IC0gJGFnZSArIDFgCisKKwkgIGNhc2UgJHZlcnNpb25fdHlwZSBpbgorCSAgICBub25zdG9wdXgpIHZlcnN0cmluZ19wcmVmaXg9bm9uc3RvcHV4IDs7CisJICAgICopICAgICAgICAgdmVyc3RyaW5nX3ByZWZpeD1zZ2kgOzsKKwkgIGVzYWMKKwkgIHZlcnN0cmluZz0iJHZlcnN0cmluZ19wcmVmaXgkbWFqb3IuJHJldmlzaW9uIgorCisJICAjIEFkZCBpbiBhbGwgdGhlIGludGVyZmFjZXMgdGhhdCB3ZSBhcmUgY29tcGF0aWJsZSB3aXRoLgorCSAgbG9vcD0kcmV2aXNpb24KKwkgIHdoaWxlIHRlc3QgIiRsb29wIiAtbmUgMDsgZG8KKwkgICAgaWZhY2U9YGV4cHIgJHJldmlzaW9uIC0gJGxvb3BgCisJICAgIGxvb3A9YGV4cHIgJGxvb3AgLSAxYAorCSAgICB2ZXJzdHJpbmc9IiR2ZXJzdHJpbmdfcHJlZml4JG1ham9yLiRpZmFjZTokdmVyc3RyaW5nIgorCSAgZG9uZQorCisJICAjIEJlZm9yZSB0aGlzIHBvaW50LCAkbWFqb3IgbXVzdCBub3QgY29udGFpbiBgLicuCisJICBtYWpvcj0uJG1ham9yCisJICB2ZXJzdWZmaXg9IiRtYWpvci4kcmV2aXNpb24iCisJICA7OworCisJbGludXgpCisJICBtYWpvcj0uYGV4cHIgJGN1cnJlbnQgLSAkYWdlYAorCSAgdmVyc3VmZml4PSIkbWFqb3IuJGFnZS4kcmV2aXNpb24iCisJICA7OworCisJb3NmKQorCSAgbWFqb3I9LmBleHByICRjdXJyZW50IC0gJGFnZWAKKwkgIHZlcnN1ZmZpeD0iLiRjdXJyZW50LiRhZ2UuJHJldmlzaW9uIgorCSAgdmVyc3RyaW5nPSIkY3VycmVudC4kYWdlLiRyZXZpc2lvbiIKKworCSAgIyBBZGQgaW4gYWxsIHRoZSBpbnRlcmZhY2VzIHRoYXQgd2UgYXJlIGNvbXBhdGlibGUgd2l0aC4KKwkgIGxvb3A9JGFnZQorCSAgd2hpbGUgdGVzdCAiJGxvb3AiIC1uZSAwOyBkbworCSAgICBpZmFjZT1gZXhwciAkY3VycmVudCAtICRsb29wYAorCSAgICBsb29wPWBleHByICRsb29wIC0gMWAKKwkgICAgdmVyc3RyaW5nPSIkdmVyc3RyaW5nOiR7aWZhY2V9LjAiCisJICBkb25lCisKKwkgICMgTWFrZSBleGVjdXRhYmxlcyBkZXBlbmQgb24gb3VyIGN1cnJlbnQgdmVyc2lvbi4KKwkgIHZlcnN0cmluZz0iJHZlcnN0cmluZzoke2N1cnJlbnR9LjAiCisJICA7OworCisJc3Vub3MpCisJICBtYWpvcj0iLiRjdXJyZW50IgorCSAgdmVyc3VmZml4PSIuJGN1cnJlbnQuJHJldmlzaW9uIgorCSAgOzsKKworCXdpbmRvd3MpCisJICAjIFVzZSAnLScgcmF0aGVyIHRoYW4gJy4nLCBzaW5jZSB3ZSBvbmx5IHdhbnQgb25lCisJICAjIGV4dGVuc2lvbiBvbiBET1MgOC4zIGZpbGVzeXN0ZW1zLgorCSAgbWFqb3I9YGV4cHIgJGN1cnJlbnQgLSAkYWdlYAorCSAgdmVyc3VmZml4PSItJG1ham9yIgorCSAgOzsKKworCSopCisJICAkZWNobyAiJG1vZGVuYW1lOiB1bmtub3duIGxpYnJhcnkgdmVyc2lvbiB0eXBlIFxgJHZlcnNpb25fdHlwZSciIDE+JjIKKwkgICRlY2hvICJGYXRhbCBjb25maWd1cmF0aW9uIGVycm9yLiAgU2VlIHRoZSAkUEFDS0FHRSBkb2NzIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgMT4mMgorCSAgZXhpdCAkRVhJVF9GQUlMVVJFCisJICA7OworCWVzYWMKKworCSMgQ2xlYXIgdGhlIHZlcnNpb24gaW5mbyBpZiB3ZSBkZWZhdWx0ZWQsIGFuZCB0aGV5IHNwZWNpZmllZCBhIHJlbGVhc2UuCisJaWYgdGVzdCAteiAiJHZpbmZvIiAmJiB0ZXN0IC1uICIkcmVsZWFzZSI7IHRoZW4KKwkgIG1ham9yPQorCSAgY2FzZSAkdmVyc2lvbl90eXBlIGluCisJICBkYXJ3aW4pCisJICAgICMgd2UgY2FuJ3QgY2hlY2sgZm9yICIwLjAiIGluIGFyY2hpdmVfY21kcyBkdWUgdG8gcXVvdGluZworCSAgICAjIHByb2JsZW1zLCBzbyB3ZSByZXNldCBpdCBjb21wbGV0ZWx5CisJICAgIHZlcnN0cmluZz0KKwkgICAgOzsKKwkgICopCisJICAgIHZlcnN0cmluZz0iMC4wIgorCSAgICA7OworCSAgZXNhYworCSAgaWYgdGVzdCAiJG5lZWRfdmVyc2lvbiIgPSBubzsgdGhlbgorCSAgICB2ZXJzdWZmaXg9CisJICBlbHNlCisJICAgIHZlcnN1ZmZpeD0iLjAuMCIKKwkgIGZpCisJZmkKKworCSMgUmVtb3ZlIHZlcnNpb24gaW5mbyBmcm9tIG5hbWUgaWYgdmVyc2lvbmluZyBzaG91bGQgYmUgYXZvaWRlZAorCWlmIHRlc3QgIiRhdm9pZF92ZXJzaW9uIiA9IHllcyAmJiB0ZXN0ICIkbmVlZF92ZXJzaW9uIiA9IG5vOyB0aGVuCisJICBtYWpvcj0KKwkgIHZlcnN1ZmZpeD0KKwkgIHZlcnN0cmluZz0iIgorCWZpCisKKwkjIENoZWNrIHRvIHNlZSBpZiB0aGUgYXJjaGl2ZSB3aWxsIGhhdmUgdW5kZWZpbmVkIHN5bWJvbHMuCisJaWYgdGVzdCAiJGFsbG93X3VuZGVmaW5lZCIgPSB5ZXM7IHRoZW4KKwkgIGlmIHRlc3QgIiRhbGxvd191bmRlZmluZWRfZmxhZyIgPSB1bnN1cHBvcnRlZDsgdGhlbgorCSAgICAkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiB1bmRlZmluZWQgc3ltYm9scyBub3QgYWxsb3dlZCBpbiAkaG9zdCBzaGFyZWQgbGlicmFyaWVzIiAxPiYyCisJICAgIGJ1aWxkX2xpYnRvb2xfbGlicz1ubworCSAgICBidWlsZF9vbGRfbGlicz15ZXMKKwkgIGZpCisJZWxzZQorCSAgIyBEb24ndCBhbGxvdyB1bmRlZmluZWQgc3ltYm9scy4KKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnPSIkbm9fdW5kZWZpbmVkX2ZsYWciCisJZmkKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgIiRtb2RlIiAhPSByZWxpbms7IHRoZW4KKwkjIFJlbW92ZSBvdXIgb3V0cHV0cywgYnV0IGRvbid0IHJlbW92ZSBvYmplY3QgZmlsZXMgc2luY2UgdGhleQorCSMgbWF5IGhhdmUgYmVlbiBjcmVhdGVkIHdoZW4gY29tcGlsaW5nIFBJQyBvYmplY3RzLgorCXJlbW92ZWxpc3Q9CisJdGVtcHJlbW92ZWxpc3Q9YCRlY2hvICIkb3V0cHV0X29iamRpci8qImAKKwlmb3IgcCBpbiAkdGVtcHJlbW92ZWxpc3Q7IGRvCisJICBjYXNlICRwIGluCisJICAgICouJG9iamV4dCkKKwkgICAgICAgOzsKKwkgICAgJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUgfCAkb3V0cHV0X29iamRpci8kbGlibmFtZS4qIHwgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfSR7cmVsZWFzZX0uKikKKwkgICAgICAgaWYgdGVzdCAiWCRwcmVjaW91c19maWxlc19yZWdleCIgIT0gIlgiOyB0aGVuCisJICAgICAgICAgaWYgZWNobyAkcCB8ICRFR1JFUCAtZSAiJHByZWNpb3VzX2ZpbGVzX3JlZ2V4IiA+L2Rldi9udWxsIDI+JjEKKwkgICAgICAgICB0aGVuCisJCSAgIGNvbnRpbnVlCisJCSBmaQorCSAgICAgICBmaQorCSAgICAgICByZW1vdmVsaXN0PSIkcmVtb3ZlbGlzdCAkcCIKKwkgICAgICAgOzsKKwkgICAgKikgOzsKKwkgIGVzYWMKKwlkb25lCisJaWYgdGVzdCAtbiAiJHJlbW92ZWxpc3QiOyB0aGVuCisJICAkc2hvdyAiJHtybX1yICRyZW1vdmVsaXN0IgorCSAgJHJ1biAke3JtfXIgJHJlbW92ZWxpc3QKKwlmaQorICAgICAgZmkKKworICAgICAgIyBOb3cgc2V0IHRoZSB2YXJpYWJsZXMgZm9yIGJ1aWxkaW5nIG9sZCBsaWJyYXJpZXMuCisgICAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzICYmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IGNvbnZlbmllbmNlIDsgdGhlbgorCW9sZGxpYnM9IiRvbGRsaWJzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiRsaWJleHQiCisKKwkjIFRyYW5zZm9ybSAubG8gZmlsZXMgdG8gLm8gZmlsZXMuCisJb2xkb2Jqcz0iJG9ianMgImAkZWNobyAiWCRsaWJvYmpzIiB8ICRTUDJOTCB8ICRYc2VkIC1lICcvXC4nJHtsaWJleHR9JyQvZCcgLWUgIiRsbzJvIiB8ICROTDJTUGAKKyAgICAgIGZpCisKKyAgICAgICMgRWxpbWluYXRlIGFsbCB0ZW1wb3JhcnkgZGlyZWN0b3JpZXMuCisjICAgICAgZm9yIHBhdGggaW4gJG5vdGluc3RfcGF0aDsgZG8KKyMJbGliX3NlYXJjaF9wYXRoPWAkZWNobyAiJGxpYl9zZWFyY2hfcGF0aCAiIHwgJHtTRUR9IC1lICJzJSAkcGF0aCAlICVnImAKKyMJZGVwbGlicz1gJGVjaG8gIiRkZXBsaWJzICIgfCAke1NFRH0gLWUgInMlIC1MJHBhdGggJSAlZyJgCisjCWRlcGVuZGVuY3lfbGlicz1gJGVjaG8gIiRkZXBlbmRlbmN5X2xpYnMgIiB8ICR7U0VEfSAtZSAicyUgLUwkcGF0aCAlICVnImAKKyMgICAgICBkb25lCisKKyAgICAgIGlmIHRlc3QgLW4gIiR4cnBhdGgiOyB0aGVuCisJIyBJZiB0aGUgdXNlciBzcGVjaWZpZWQgYW55IHJwYXRoIGZsYWdzLCB0aGVuIGFkZCB0aGVtLgorCXRlbXBfeHJwYXRoPQorCWZvciBsaWJkaXIgaW4gJHhycGF0aDsgZG8KKwkgIHRlbXBfeHJwYXRoPSIkdGVtcF94cnBhdGggLVIkbGliZGlyIgorCSAgY2FzZSAiJGZpbmFsaXplX3JwYXRoICIgaW4KKwkgICoiICRsaWJkaXIgIiopIDs7CisJICAqKSBmaW5hbGl6ZV9ycGF0aD0iJGZpbmFsaXplX3JwYXRoICRsaWJkaXIiIDs7CisJICBlc2FjCisJZG9uZQorCWlmIHRlc3QgIiRoYXJkY29kZV9pbnRvX2xpYnMiICE9IHllcyB8fCB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzOyB0aGVuCisJICBkZXBlbmRlbmN5X2xpYnM9IiR0ZW1wX3hycGF0aCAkZGVwZW5kZW5jeV9saWJzIgorCWZpCisgICAgICBmaQorCisgICAgICAjIE1ha2Ugc3VyZSBkbGZpbGVzIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGZpbGVzIHRoYXQgd29uJ3QgYmUgZGxwcmVvcGVuZWQKKyAgICAgIG9sZF9kbGZpbGVzPSIkZGxmaWxlcyIKKyAgICAgIGRsZmlsZXM9CisgICAgICBmb3IgbGliIGluICRvbGRfZGxmaWxlczsgZG8KKwljYXNlICIgJGRscHJlZmlsZXMgJGRsZmlsZXMgIiBpbgorCSoiICRsaWIgIiopIDs7CisJKikgZGxmaWxlcz0iJGRsZmlsZXMgJGxpYiIgOzsKKwllc2FjCisgICAgICBkb25lCisKKyAgICAgICMgTWFrZSBzdXJlIGRscHJlZmlsZXMgY29udGFpbnMgb25seSB1bmlxdWUgZmlsZXMKKyAgICAgIG9sZF9kbHByZWZpbGVzPSIkZGxwcmVmaWxlcyIKKyAgICAgIGRscHJlZmlsZXM9CisgICAgICBmb3IgbGliIGluICRvbGRfZGxwcmVmaWxlczsgZG8KKwljYXNlICIkZGxwcmVmaWxlcyAiIGluCisJKiIgJGxpYiAiKikgOzsKKwkqKSBkbHByZWZpbGVzPSIkZGxwcmVmaWxlcyAkbGliIiA7OworCWVzYWMKKyAgICAgIGRvbmUKKworICAgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KKwlpZiB0ZXN0IC1uICIkcnBhdGgiOyB0aGVuCisJICBjYXNlICRob3N0IGluCisJICAqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotb3MyKiB8ICotKi1iZW9zKikKKwkgICAgIyB0aGVzZSBzeXN0ZW1zIGRvbid0IGFjdHVhbGx5IGhhdmUgYSBjIGxpYnJhcnkgKGFzIHN1Y2gpIQorCSAgICA7OworCSAgKi0qLXJoYXBzb2R5KiB8ICotKi1kYXJ3aW4xLlswMTJdKQorCSAgICAjIFJoYXBzb2R5IEMgbGlicmFyeSBpcyBpbiB0aGUgU3lzdGVtIGZyYW1ld29yaworCSAgICBkZXBsaWJzPSIkZGVwbGlicyAtZnJhbWV3b3JrIFN5c3RlbSIKKwkgICAgOzsKKwkgICotKi1uZXRic2QqKQorCSAgICAjIERvbid0IGxpbmsgd2l0aCBsaWJjIHVudGlsIHRoZSBhLm91dCBsZC5zbyBpcyBmaXhlZC4KKwkgICAgOzsKKwkgICotKi1vcGVuYnNkKiB8ICotKi1mcmVlYnNkKiB8ICotKi1kcmFnb25mbHkqKQorCSAgICAjIERvIG5vdCBpbmNsdWRlIGxpYmMgZHVlIHRvIHVzIGhhdmluZyBsaWJjL2xpYmNfci4KKwkgICAgOzsKKwkgICotKi1zY28zLjJ2NSogfCAqLSotc2NvNXY2KikKKwkgICAgIyBDYXVzZXMgcHJvYmxlbXMgd2l0aCBfX2N0eXBlCisJICAgIDs7CisJICAqLSotc3lzdjQuMnV3MiogfCAqLSotc3lzdjUqIHwgKi0qLXVuaXh3YXJlKiB8ICotKi1PcGVuVU5JWCopCisJICAgICMgQ29tcGlsZXIgaW5zZXJ0cyBsaWJjIGluIHRoZSBjb3JyZWN0IHBsYWNlIGZvciB0aHJlYWRzIHRvIHdvcmsKKwkgICAgOzsKKyAJICAqKQorCSAgICAjIEFkZCBsaWJjIHRvIGRlcGxpYnMgb24gYWxsIG90aGVyIHN5c3RlbXMgaWYgbmVjZXNzYXJ5LgorCSAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9uZWVkX2xjIiA9ICJ5ZXMiOyB0aGVuCisJICAgICAgZGVwbGlicz0iJGRlcGxpYnMgLWxjIgorCSAgICBmaQorCSAgICA7OworCSAgZXNhYworCWZpCisKKwkjIFRyYW5zZm9ybSBkZXBsaWJzIGludG8gb25seSBkZXBsaWJzIHRoYXQgY2FuIGJlIGxpbmtlZCBpbiBzaGFyZWQuCisJbmFtZV9zYXZlPSRuYW1lCisJbGlibmFtZV9zYXZlPSRsaWJuYW1lCisJcmVsZWFzZV9zYXZlPSRyZWxlYXNlCisJdmVyc3VmZml4X3NhdmU9JHZlcnN1ZmZpeAorCW1ham9yX3NhdmU9JG1ham9yCisJIyBJJ20gbm90IHN1cmUgaWYgSSdtIHRyZWF0aW5nIHRoZSByZWxlYXNlIGNvcnJlY3RseS4gIEkgdGhpbmsKKwkjIHJlbGVhc2Ugc2hvdWxkIHNob3cgdXAgaW4gdGhlIC1sIChpZSAtbGdtcDUpIHNvIHdlIGRvbid0IHdhbnQgdG8KKwkjIGFkZCBpdCBpbiB0d2ljZS4gIElzIHRoYXQgY29ycmVjdD8KKwlyZWxlYXNlPSIiCisJdmVyc3VmZml4PSIiCisJbWFqb3I9IiIKKwluZXdkZXBsaWJzPQorCWRyb3BwZWRkZXBzPW5vCisJY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KKwlwYXNzX2FsbCkKKwkgICMgRG9uJ3QgY2hlY2sgZm9yIHNoYXJlZC9zdGF0aWMuICBFdmVyeXRoaW5nIHdvcmtzLgorCSAgIyBUaGlzIG1pZ2h0IGJlIGEgbGl0dGxlIG5haXZlLiAgV2UgbWlnaHQgd2FudCB0byBjaGVjaworCSAgIyB3aGV0aGVyIHRoZSBsaWJyYXJ5IGV4aXN0cyBvciBub3QuICBCdXQgdGhpcyBpcyBvbgorCSAgIyBvc2YzICYgb3NmNCBhbmQgSSdtIG5vdCByZWFsbHkgc3VyZS4uLiBKdXN0CisJICAjIGltcGxlbWVudGluZyB3aGF0IHdhcyBhbHJlYWR5IHRoZSBiZWhhdmlvci4KKwkgIG5ld2RlcGxpYnM9JGRlcGxpYnMKKwkgIDs7CisJdGVzdF9jb21waWxlKQorCSAgIyBUaGlzIGNvZGUgc3RyZXNzZXMgdGhlICJsaWJyYXJpZXMgYXJlIHByb2dyYW1zIiBwYXJhZGlnbSB0byBpdHMKKwkgICMgbGltaXRzLiBNYXliZSBldmVuIGJyZWFrcyBpdC4gIFdlIGNvbXBpbGUgYSBwcm9ncmFtLCBsaW5raW5nIGl0CisJICAjIGFnYWluc3QgdGhlIGRlcGxpYnMgYXMgYSBwcm94eSBmb3IgdGhlIGxpYnJhcnkuICBUaGVuIHdlIGNhbiBjaGVjaworCSAgIyB3aGV0aGVyIHRoZXkgbGlua2VkIGluIHN0YXRpY2FsbHkgb3IgZHluYW1pY2FsbHkgd2l0aCBsZGQuCisJICAkcm0gY29uZnRlc3QuYworCSAgY2F0ID4gY29uZnRlc3QuYyA8PEVPRgorCSAgaW50IG1haW4oKSB7IHJldHVybiAwOyB9CitFT0YKKwkgICRybSBjb25mdGVzdAorICAgICAgaWYgJExUQ0MgJExUQ0ZMQUdTIC1vIGNvbmZ0ZXN0IGNvbmZ0ZXN0LmMgJGRlcGxpYnM7IHRoZW4KKwkgICAgbGRkX291dHB1dD1gbGRkIGNvbmZ0ZXN0YAorCSAgICBmb3IgaSBpbiAkZGVwbGliczsgZG8KKwkgICAgICBuYW1lPWBleHByICRpIDogJy1sXCguKlwpJ2AKKwkgICAgICAjIElmICRuYW1lIGlzIGVtcHR5IHdlIGFyZSBvcGVyYXRpbmcgb24gYSAtTCBhcmd1bWVudC4KKyAgICAgICAgICAgICAgaWYgdGVzdCAiJG5hbWUiICE9ICIiICYmIHRlc3QgIiRuYW1lIiAhPSAiMCI7IHRoZW4KKwkJaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgorCQkgIGNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgorCQkgICoiICRpICIqKQorCQkgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGkiCisJCSAgICBpPSIiCisJCSAgICA7OworCQkgIGVzYWMKKwkgICAgICAgIGZpCisJCWlmIHRlc3QgLW4gIiRpIiA7IHRoZW4KKwkJICBsaWJuYW1lPWBldmFsIFxcJGVjaG8gXCIkbGlibmFtZV9zcGVjXCJgCisJCSAgZGVwbGliX21hdGNoZXM9YGV2YWwgXFwkZWNobyBcIiRsaWJyYXJ5X25hbWVzX3NwZWNcImAKKwkJICBzZXQgZHVtbXkgJGRlcGxpYl9tYXRjaGVzCisJCSAgZGVwbGliX21hdGNoPSQyCisJCSAgaWYgdGVzdCBgZXhwciAiJGxkZF9vdXRwdXQiIDogIi4qJGRlcGxpYl9tYXRjaCJgIC1uZSAwIDsgdGhlbgorCQkgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGkiCisJCSAgZWxzZQorCQkgICAgZHJvcHBlZGRlcHM9eWVzCisJCSAgICAkZWNobworCQkgICAgJGVjaG8gIioqKiBXYXJuaW5nOiBkeW5hbWljIGxpbmtlciBkb2VzIG5vdCBhY2NlcHQgbmVlZGVkIGxpYnJhcnkgJGkuIgorCQkgICAgJGVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisJCSAgICAkZWNobyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKKwkJICAgICRlY2hvICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIEkgYmVsaWV2ZSB5b3UgZG8gbm90IGhhdmUiCisJCSAgICAkZWNobyAiKioqIGJlY2F1c2UgYSB0ZXN0X2NvbXBpbGUgZGlkIHJldmVhbCB0aGF0IHRoZSBsaW5rZXIgZGlkIG5vdCB1c2UgaXQgZm9yIgorCQkgICAgJGVjaG8gIioqKiBpdHMgZHluYW1pYyBkZXBlbmRlbmN5IGxpc3QgdGhhdCBwcm9ncmFtcyBnZXQgcmVzb2x2ZWQgd2l0aCBhdCBydW50aW1lLiIKKwkJICBmaQorCQlmaQorCSAgICAgIGVsc2UKKwkJbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGkiCisJICAgICAgZmkKKwkgICAgZG9uZQorCSAgZWxzZQorCSAgICAjIEVycm9yIG9jY3VycmVkIGluIHRoZSBmaXJzdCBjb21waWxlLiAgTGV0J3MgdHJ5IHRvIHNhbHZhZ2UKKwkgICAgIyB0aGUgc2l0dWF0aW9uOiBDb21waWxlIGEgc2VwYXJhdGUgcHJvZ3JhbSBmb3IgZWFjaCBsaWJyYXJ5LgorCSAgICBmb3IgaSBpbiAkZGVwbGliczsgZG8KKwkgICAgICBuYW1lPWBleHByICRpIDogJy1sXCguKlwpJ2AKKwkgICAgICAjIElmICRuYW1lIGlzIGVtcHR5IHdlIGFyZSBvcGVyYXRpbmcgb24gYSAtTCBhcmd1bWVudC4KKyAgICAgICAgICAgICAgaWYgdGVzdCAiJG5hbWUiICE9ICIiICYmIHRlc3QgIiRuYW1lIiAhPSAiMCI7IHRoZW4KKwkJJHJtIGNvbmZ0ZXN0CisJCWlmICRMVENDICRMVENGTEFHUyAtbyBjb25mdGVzdCBjb25mdGVzdC5jICRpOyB0aGVuCisJCSAgbGRkX291dHB1dD1gbGRkIGNvbmZ0ZXN0YAorCQkgIGlmIHRlc3QgIlgkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIiA9ICJYeWVzIiA7IHRoZW4KKwkJICAgIGNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgorCQkgICAgKiIgJGkgIiopCisJCSAgICAgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRpIgorCQkgICAgICBpPSIiCisJCSAgICAgIDs7CisJCSAgICBlc2FjCisJCSAgZmkKKwkJICBpZiB0ZXN0IC1uICIkaSIgOyB0aGVuCisJCSAgICBsaWJuYW1lPWBldmFsIFxcJGVjaG8gXCIkbGlibmFtZV9zcGVjXCJgCisJCSAgICBkZXBsaWJfbWF0Y2hlcz1gZXZhbCBcXCRlY2hvIFwiJGxpYnJhcnlfbmFtZXNfc3BlY1wiYAorCQkgICAgc2V0IGR1bW15ICRkZXBsaWJfbWF0Y2hlcworCQkgICAgZGVwbGliX21hdGNoPSQyCisJCSAgICBpZiB0ZXN0IGBleHByICIkbGRkX291dHB1dCIgOiAiLiokZGVwbGliX21hdGNoImAgLW5lIDAgOyB0aGVuCisJCSAgICAgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRpIgorCQkgICAgZWxzZQorCQkgICAgICBkcm9wcGVkZGVwcz15ZXMKKwkJICAgICAgJGVjaG8KKwkJICAgICAgJGVjaG8gIioqKiBXYXJuaW5nOiBkeW5hbWljIGxpbmtlciBkb2VzIG5vdCBhY2NlcHQgbmVlZGVkIGxpYnJhcnkgJGkuIgorCQkgICAgICAkZWNobyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKKwkJICAgICAgJGVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCisJCSAgICAgICRlY2hvICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIHlvdSBkbyBub3QgYXBwZWFyIHRvIGhhdmUiCisJCSAgICAgICRlY2hvICIqKiogYmVjYXVzZSBhIHRlc3RfY29tcGlsZSBkaWQgcmV2ZWFsIHRoYXQgdGhlIGxpbmtlciBkaWQgbm90IHVzZSB0aGlzIG9uZSIKKwkJICAgICAgJGVjaG8gIioqKiBhcyBhIGR5bmFtaWMgZGVwZW5kZW5jeSB0aGF0IHByb2dyYW1zIGNhbiBnZXQgcmVzb2x2ZWQgd2l0aCBhdCBydW50aW1lLiIKKwkJICAgIGZpCisJCSAgZmkKKwkJZWxzZQorCQkgIGRyb3BwZWRkZXBzPXllcworCQkgICRlY2hvCisJCSAgJGVjaG8gIioqKiBXYXJuaW5nISAgTGlicmFyeSAkaSBpcyBuZWVkZWQgYnkgdGhpcyBsaWJyYXJ5IGJ1dCBJIHdhcyBub3QgYWJsZSB0byIKKwkJICAkZWNobyAiKioqIG1ha2UgaXQgbGluayBpbiEgIFlvdSB3aWxsIHByb2JhYmx5IG5lZWQgdG8gaW5zdGFsbCBpdCBvciBzb21lIgorCQkgICRlY2hvICIqKiogbGlicmFyeSB0aGF0IGl0IGRlcGVuZHMgb24gYmVmb3JlIHRoaXMgbGlicmFyeSB3aWxsIGJlIGZ1bGx5IgorCQkgICRlY2hvICIqKiogZnVuY3Rpb25hbC4gIEluc3RhbGxpbmcgaXQgYmVmb3JlIGNvbnRpbnVpbmcgd291bGQgYmUgZXZlbiBiZXR0ZXIuIgorCQlmaQorCSAgICAgIGVsc2UKKwkJbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGkiCisJICAgICAgZmkKKwkgICAgZG9uZQorCSAgZmkKKwkgIDs7CisJZmlsZV9tYWdpYyopCisJICBzZXQgZHVtbXkgJGRlcGxpYnNfY2hlY2tfbWV0aG9kCisJICBmaWxlX21hZ2ljX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogIiQyIFwoLipcKSJgCisJICBmb3IgYV9kZXBsaWIgaW4gJGRlcGxpYnM7IGRvCisJICAgIG5hbWU9YGV4cHIgJGFfZGVwbGliIDogJy1sXCguKlwpJ2AKKwkgICAgIyBJZiAkbmFtZSBpcyBlbXB0eSB3ZSBhcmUgb3BlcmF0aW5nIG9uIGEgLUwgYXJndW1lbnQuCisgICAgICAgICAgICBpZiB0ZXN0ICIkbmFtZSIgIT0gIiIgJiYgdGVzdCAgIiRuYW1lIiAhPSAiMCI7IHRoZW4KKwkgICAgICBpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCisJCWNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgorCQkqIiAkYV9kZXBsaWIgIiopCisJCSAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGFfZGVwbGliIgorCQkgIGFfZGVwbGliPSIiCisJCSAgOzsKKwkJZXNhYworCSAgICAgIGZpCisJICAgICAgaWYgdGVzdCAtbiAiJGFfZGVwbGliIiA7IHRoZW4KKwkJbGlibmFtZT1gZXZhbCBcXCRlY2hvIFwiJGxpYm5hbWVfc3BlY1wiYAorCQlmb3IgaSBpbiAkbGliX3NlYXJjaF9wYXRoICRzeXNfbGliX3NlYXJjaF9wYXRoICRzaGxpYl9zZWFyY2hfcGF0aDsgZG8KKwkJICBwb3RlbnRpYWxfbGlicz1gbHMgJGkvJGxpYm5hbWVbLi1dKiAyPi9kZXYvbnVsbGAKKwkJICBmb3IgcG90ZW50X2xpYiBpbiAkcG90ZW50aWFsX2xpYnM7IGRvCisJCSAgICAgICMgRm9sbG93IHNvZnQgbGlua3MuCisJCSAgICAgIGlmIGxzIC1sTGQgIiRwb3RlbnRfbGliIiAyPi9kZXYvbnVsbCBcCisJCQkgfCBncmVwICIgLT4gIiA+L2Rldi9udWxsOyB0aGVuCisJCQljb250aW51ZQorCQkgICAgICBmaQorCQkgICAgICAjIFRoZSBzdGF0ZW1lbnQgYWJvdmUgdHJpZXMgdG8gYXZvaWQgZW50ZXJpbmcgYW4KKwkJICAgICAgIyBlbmRsZXNzIGxvb3AgYmVsb3csIGluIGNhc2Ugb2YgY3ljbGljIGxpbmtzLgorCQkgICAgICAjIFdlIG1pZ2h0IHN0aWxsIGVudGVyIGFuIGVuZGxlc3MgbG9vcCwgc2luY2UgYSBsaW5rCisJCSAgICAgICMgbG9vcCBjYW4gYmUgY2xvc2VkIHdoaWxlIHdlIGZvbGxvdyBsaW5rcywKKwkJICAgICAgIyBidXQgc28gd2hhdD8KKwkJICAgICAgcG90bGliPSIkcG90ZW50X2xpYiIKKwkJICAgICAgd2hpbGUgdGVzdCAtaCAiJHBvdGxpYiIgMj4vZGV2L251bGw7IGRvCisJCQlwb3RsaWJsaW5rPWBscyAtbGQgJHBvdGxpYiB8ICR7U0VEfSAncy8uKiAtPiAvLydgCisJCQljYXNlICRwb3RsaWJsaW5rIGluCisJCQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIHBvdGxpYj0iJHBvdGxpYmxpbmsiOzsKKwkJCSopIHBvdGxpYj1gJGVjaG8gIlgkcG90bGliIiB8ICRYc2VkIC1lICdzLFteL10qJCwsJ2AiJHBvdGxpYmxpbmsiOzsKKwkJCWVzYWMKKwkJICAgICAgZG9uZQorCQkgICAgICBpZiBldmFsICRmaWxlX21hZ2ljX2NtZCBcIlwkcG90bGliXCIgMj4vZGV2L251bGwgXAorCQkJIHwgJHtTRUR9IDEwcSBcCisJCQkgfCAkRUdSRVAgIiRmaWxlX21hZ2ljX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgorCQkJbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGFfZGVwbGliIgorCQkJYV9kZXBsaWI9IiIKKwkJCWJyZWFrIDIKKwkJICAgICAgZmkKKwkJICBkb25lCisJCWRvbmUKKwkgICAgICBmaQorCSAgICAgIGlmIHRlc3QgLW4gIiRhX2RlcGxpYiIgOyB0aGVuCisJCWRyb3BwZWRkZXBzPXllcworCQkkZWNobworCQkkZWNobyAiKioqIFdhcm5pbmc6IGxpbmtlciBwYXRoIGRvZXMgbm90IGhhdmUgcmVhbCBmaWxlIGZvciBsaWJyYXJ5ICRhX2RlcGxpYi4iCisJCSRlY2hvICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgorCQkkZWNobyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKKwkJJGVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKKwkJJGVjaG8gIioqKiBiZWNhdXNlIEkgZGlkIGNoZWNrIHRoZSBsaW5rZXIgcGF0aCBsb29raW5nIGZvciBhIGZpbGUgc3RhcnRpbmciCisJCWlmIHRlc3QgLXogIiRwb3RsaWIiIDsgdGhlbgorCQkgICRlY2hvICIqKiogd2l0aCAkbGlibmFtZSBidXQgbm8gY2FuZGlkYXRlcyB3ZXJlIGZvdW5kLiAoLi4uZm9yIGZpbGUgbWFnaWMgdGVzdCkiCisJCWVsc2UKKwkJICAkZWNobyAiKioqIHdpdGggJGxpYm5hbWUgYW5kIG5vbmUgb2YgdGhlIGNhbmRpZGF0ZXMgcGFzc2VkIGEgZmlsZSBmb3JtYXQgdGVzdCIKKwkJICAkZWNobyAiKioqIHVzaW5nIGEgZmlsZSBtYWdpYy4gTGFzdCBmaWxlIGNoZWNrZWQ6ICRwb3RsaWIiCisJCWZpCisJICAgICAgZmkKKwkgICAgZWxzZQorCSAgICAgICMgQWRkIGEgLUwgYXJndW1lbnQuCisJICAgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGFfZGVwbGliIgorCSAgICBmaQorCSAgZG9uZSAjIEdvbmUgdGhyb3VnaCBhbGwgZGVwbGlicy4KKwkgIDs7CisJbWF0Y2hfcGF0dGVybiopCisJICBzZXQgZHVtbXkgJGRlcGxpYnNfY2hlY2tfbWV0aG9kCisJICBtYXRjaF9wYXR0ZXJuX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogIiQyIFwoLipcKSJgCisJICBmb3IgYV9kZXBsaWIgaW4gJGRlcGxpYnM7IGRvCisJICAgIG5hbWU9YGV4cHIgJGFfZGVwbGliIDogJy1sXCguKlwpJ2AKKwkgICAgIyBJZiAkbmFtZSBpcyBlbXB0eSB3ZSBhcmUgb3BlcmF0aW5nIG9uIGEgLUwgYXJndW1lbnQuCisJICAgIGlmIHRlc3QgLW4gIiRuYW1lIiAmJiB0ZXN0ICIkbmFtZSIgIT0gIjAiOyB0aGVuCisJICAgICAgaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgorCQljYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KKwkJKiIgJGFfZGVwbGliICIqKQorCQkgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRhX2RlcGxpYiIKKwkJICBhX2RlcGxpYj0iIgorCQkgIDs7CisJCWVzYWMKKwkgICAgICBmaQorCSAgICAgIGlmIHRlc3QgLW4gIiRhX2RlcGxpYiIgOyB0aGVuCisJCWxpYm5hbWU9YGV2YWwgXFwkZWNobyBcIiRsaWJuYW1lX3NwZWNcImAKKwkJZm9yIGkgaW4gJGxpYl9zZWFyY2hfcGF0aCAkc3lzX2xpYl9zZWFyY2hfcGF0aCAkc2hsaWJfc2VhcmNoX3BhdGg7IGRvCisJCSAgcG90ZW50aWFsX2xpYnM9YGxzICRpLyRsaWJuYW1lWy4tXSogMj4vZGV2L251bGxgCisJCSAgZm9yIHBvdGVudF9saWIgaW4gJHBvdGVudGlhbF9saWJzOyBkbworCQkgICAgcG90bGliPSIkcG90ZW50X2xpYiIgIyBzZWUgc3ltbGluay1jaGVjayBhYm92ZSBpbiBmaWxlX21hZ2ljIHRlc3QKKwkJICAgIGlmIGV2YWwgJGVjaG8gXCIkcG90ZW50X2xpYlwiIDI+L2Rldi9udWxsIFwKKwkJICAgICAgICB8ICR7U0VEfSAxMHEgXAorCQkgICAgICAgIHwgJEVHUkVQICIkbWF0Y2hfcGF0dGVybl9yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KKwkJICAgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGFfZGVwbGliIgorCQkgICAgICBhX2RlcGxpYj0iIgorCQkgICAgICBicmVhayAyCisJCSAgICBmaQorCQkgIGRvbmUKKwkJZG9uZQorCSAgICAgIGZpCisJICAgICAgaWYgdGVzdCAtbiAiJGFfZGVwbGliIiA7IHRoZW4KKwkJZHJvcHBlZGRlcHM9eWVzCisJCSRlY2hvCisJCSRlY2hvICIqKiogV2FybmluZzogbGlua2VyIHBhdGggZG9lcyBub3QgaGF2ZSByZWFsIGZpbGUgZm9yIGxpYnJhcnkgJGFfZGVwbGliLiIKKwkJJGVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisJCSRlY2hvICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgorCQkkZWNobyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlIgorCQkkZWNobyAiKioqIGJlY2F1c2UgSSBkaWQgY2hlY2sgdGhlIGxpbmtlciBwYXRoIGxvb2tpbmcgZm9yIGEgZmlsZSBzdGFydGluZyIKKwkJaWYgdGVzdCAteiAiJHBvdGxpYiIgOyB0aGVuCisJCSAgJGVjaG8gIioqKiB3aXRoICRsaWJuYW1lIGJ1dCBubyBjYW5kaWRhdGVzIHdlcmUgZm91bmQuICguLi5mb3IgcmVnZXggcGF0dGVybiB0ZXN0KSIKKwkJZWxzZQorCQkgICRlY2hvICIqKiogd2l0aCAkbGlibmFtZSBhbmQgbm9uZSBvZiB0aGUgY2FuZGlkYXRlcyBwYXNzZWQgYSBmaWxlIGZvcm1hdCB0ZXN0IgorCQkgICRlY2hvICIqKiogdXNpbmcgYSByZWdleCBwYXR0ZXJuLiBMYXN0IGZpbGUgY2hlY2tlZDogJHBvdGxpYiIKKwkJZmkKKwkgICAgICBmaQorCSAgICBlbHNlCisJICAgICAgIyBBZGQgYSAtTCBhcmd1bWVudC4KKwkgICAgICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkYV9kZXBsaWIiCisJICAgIGZpCisJICBkb25lICMgR29uZSB0aHJvdWdoIGFsbCBkZXBsaWJzLgorCSAgOzsKKwlub25lIHwgdW5rbm93biB8ICopCisJICBuZXdkZXBsaWJzPSIiCisJICB0bXBfZGVwbGlicz1gJGVjaG8gIlggJGRlcGxpYnMiIHwgJFhzZWQgLWUgJ3MvIC1sYyQvLycgXAorCSAgICAtZSAncy8gLVtMUl1bXiBdKi8vZydgCisJICBpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCisJICAgIGZvciBpIGluICRwcmVkZXBzICRwb3N0ZGVwcyA7IGRvCisJICAgICAgIyBjYW4ndCB1c2UgWHNlZCBiZWxvdywgYmVjYXVzZSAkaSBtaWdodCBjb250YWluICcvJworCSAgICAgIHRtcF9kZXBsaWJzPWAkZWNobyAiWCAkdG1wX2RlcGxpYnMiIHwgJHtTRUR9IC1lICIxcyxeWCwsIiAtZSAicywkaSwsImAKKwkgICAgZG9uZQorCSAgZmkKKwkgIGlmICRlY2hvICJYICR0bXBfZGVwbGlicyIgfCAkWHNlZCAtZSAncy9bIAldLy9nJyBcCisJICAgIHwgZ3JlcCAuID4vZGV2L251bGw7IHRoZW4KKwkgICAgJGVjaG8KKwkgICAgaWYgdGVzdCAiWCRkZXBsaWJzX2NoZWNrX21ldGhvZCIgPSAiWG5vbmUiOyB0aGVuCisJICAgICAgJGVjaG8gIioqKiBXYXJuaW5nOiBpbnRlci1saWJyYXJ5IGRlcGVuZGVuY2llcyBhcmUgbm90IHN1cHBvcnRlZCBpbiB0aGlzIHBsYXRmb3JtLiIKKwkgICAgZWxzZQorCSAgICAgICRlY2hvICIqKiogV2FybmluZzogaW50ZXItbGlicmFyeSBkZXBlbmRlbmNpZXMgYXJlIG5vdCBrbm93biB0byBiZSBzdXBwb3J0ZWQuIgorCSAgICBmaQorCSAgICAkZWNobyAiKioqIEFsbCBkZWNsYXJlZCBpbnRlci1saWJyYXJ5IGRlcGVuZGVuY2llcyBhcmUgYmVpbmcgZHJvcHBlZC4iCisJICAgIGRyb3BwZWRkZXBzPXllcworCSAgZmkKKwkgIDs7CisJZXNhYworCXZlcnN1ZmZpeD0kdmVyc3VmZml4X3NhdmUKKwltYWpvcj0kbWFqb3Jfc2F2ZQorCXJlbGVhc2U9JHJlbGVhc2Vfc2F2ZQorCWxpYm5hbWU9JGxpYm5hbWVfc2F2ZQorCW5hbWU9JG5hbWVfc2F2ZQorCisJY2FzZSAkaG9zdCBpbgorCSotKi1yaGFwc29keSogfCAqLSotZGFyd2luMS5bMDEyXSkKKwkgICMgT24gUmhhcHNvZHkgcmVwbGFjZSB0aGUgQyBsaWJyYXJ5IGlzIHRoZSBTeXN0ZW0gZnJhbWV3b3JrCisJICBuZXdkZXBsaWJzPWAkZWNobyAiWCAkbmV3ZGVwbGlicyIgfCAkWHNlZCAtZSAncy8gLWxjIC8gLWZyYW1ld29yayBTeXN0ZW0gLydgCisJICA7OworCWVzYWMKKworCWlmIHRlc3QgIiRkcm9wcGVkZGVwcyIgPSB5ZXM7IHRoZW4KKwkgIGlmIHRlc3QgIiRtb2R1bGUiID0geWVzOyB0aGVuCisJICAgICRlY2hvCisJICAgICRlY2hvICIqKiogV2FybmluZzogbGlidG9vbCBjb3VsZCBub3Qgc2F0aXNmeSBhbGwgZGVjbGFyZWQgaW50ZXItbGlicmFyeSIKKwkgICAgJGVjaG8gIioqKiBkZXBlbmRlbmNpZXMgb2YgbW9kdWxlICRsaWJuYW1lLiAgVGhlcmVmb3JlLCBsaWJ0b29sIHdpbGwgY3JlYXRlIgorCSAgICAkZWNobyAiKioqIGEgc3RhdGljIG1vZHVsZSwgdGhhdCBzaG91bGQgd29yayBhcyBsb25nIGFzIHRoZSBkbG9wZW5pbmciCisJICAgICRlY2hvICIqKiogYXBwbGljYXRpb24gaXMgbGlua2VkIHdpdGggdGhlIC1kbG9wZW4gZmxhZy4iCisJICAgIGlmIHRlc3QgLXogIiRnbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCisJICAgICAgJGVjaG8KKwkgICAgICAkZWNobyAiKioqIEhvd2V2ZXIsIHRoaXMgd291bGQgb25seSB3b3JrIGlmIGxpYnRvb2wgd2FzIGFibGUgdG8gZXh0cmFjdCBzeW1ib2wiCisJICAgICAgJGVjaG8gIioqKiBsaXN0cyBmcm9tIGEgcHJvZ3JhbSwgdXNpbmcgXGBubScgb3IgZXF1aXZhbGVudCwgYnV0IGxpYnRvb2wgY291bGQiCisJICAgICAgJGVjaG8gIioqKiBub3QgZmluZCBzdWNoIGEgcHJvZ3JhbS4gIFNvLCB0aGlzIG1vZHVsZSBpcyBwcm9iYWJseSB1c2VsZXNzLiIKKwkgICAgICAkZWNobyAiKioqIFxgbm0nIGZyb20gR05VIGJpbnV0aWxzIGFuZCBhIGZ1bGwgcmVidWlsZCBtYXkgaGVscC4iCisJICAgIGZpCisJICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSBubzsgdGhlbgorCSAgICAgIG9sZGxpYnM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiRsaWJleHQiCisJICAgICAgYnVpbGRfbGlidG9vbF9saWJzPW1vZHVsZQorCSAgICAgIGJ1aWxkX29sZF9saWJzPXllcworCSAgICBlbHNlCisJICAgICAgYnVpbGRfbGlidG9vbF9saWJzPW5vCisJICAgIGZpCisJICBlbHNlCisJICAgICRlY2hvICIqKiogVGhlIGludGVyLWxpYnJhcnkgZGVwZW5kZW5jaWVzIHRoYXQgaGF2ZSBiZWVuIGRyb3BwZWQgaGVyZSB3aWxsIGJlIgorCSAgICAkZWNobyAiKioqIGF1dG9tYXRpY2FsbHkgYWRkZWQgd2hlbmV2ZXIgYSBwcm9ncmFtIGlzIGxpbmtlZCB3aXRoIHRoaXMgbGlicmFyeSIKKwkgICAgJGVjaG8gIioqKiBvciBpcyBkZWNsYXJlZCB0byAtZGxvcGVuIGl0LiIKKworCSAgICBpZiB0ZXN0ICIkYWxsb3dfdW5kZWZpbmVkIiA9IG5vOyB0aGVuCisJICAgICAgJGVjaG8KKwkgICAgICAkZWNobyAiKioqIFNpbmNlIHRoaXMgbGlicmFyeSBtdXN0IG5vdCBjb250YWluIHVuZGVmaW5lZCBzeW1ib2xzLCIKKwkgICAgICAkZWNobyAiKioqIGJlY2F1c2UgZWl0aGVyIHRoZSBwbGF0Zm9ybSBkb2VzIG5vdCBzdXBwb3J0IHRoZW0gb3IiCisJICAgICAgJGVjaG8gIioqKiBpdCB3YXMgZXhwbGljaXRseSByZXF1ZXN0ZWQgd2l0aCAtbm8tdW5kZWZpbmVkLCIKKwkgICAgICAkZWNobyAiKioqIGxpYnRvb2wgd2lsbCBvbmx5IGNyZWF0ZSBhIHN0YXRpYyB2ZXJzaW9uIG9mIGl0LiIKKwkgICAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0gbm87IHRoZW4KKwkJb2xkbGlicz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuJGxpYmV4dCIKKwkJYnVpbGRfbGlidG9vbF9saWJzPW1vZHVsZQorCQlidWlsZF9vbGRfbGlicz15ZXMKKwkgICAgICBlbHNlCisJCWJ1aWxkX2xpYnRvb2xfbGlicz1ubworCSAgICAgIGZpCisJICAgIGZpCisJICBmaQorCWZpCisJIyBEb25lIGNoZWNraW5nIGRlcGxpYnMhCisJZGVwbGlicz0kbmV3ZGVwbGlicworICAgICAgZmkKKworCisgICAgICAjIG1vdmUgbGlicmFyeSBzZWFyY2ggcGF0aHMgdGhhdCBjb2luY2lkZSB3aXRoIHBhdGhzIHRvIG5vdCB5ZXQKKyAgICAgICMgaW5zdGFsbGVkIGxpYnJhcmllcyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaWJyYXJ5IHNlYXJjaCBsaXN0CisgICAgICBuZXdfbGlicz0KKyAgICAgIGZvciBwYXRoIGluICRub3RpbnN0X3BhdGg7IGRvCisJY2FzZSAiICRuZXdfbGlicyAiIGluCisJKiIgLUwkcGF0aC8kb2JqZGlyICIqKSA7OworCSopCisJICBjYXNlICIgJGRlcGxpYnMgIiBpbgorCSAgKiIgLUwkcGF0aC8kb2JqZGlyICIqKQorCSAgICBuZXdfbGlicz0iJG5ld19saWJzIC1MJHBhdGgvJG9iamRpciIgOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworICAgICAgZG9uZQorICAgICAgZm9yIGRlcGxpYiBpbiAkZGVwbGliczsgZG8KKwljYXNlICRkZXBsaWIgaW4KKwktTCopCisJICBjYXNlICIgJG5ld19saWJzICIgaW4KKwkgICoiICRkZXBsaWIgIiopIDs7CisJICAqKSBuZXdfbGlicz0iJG5ld19saWJzICRkZXBsaWIiIDs7CisJICBlc2FjCisJICA7OworCSopIG5ld19saWJzPSIkbmV3X2xpYnMgJGRlcGxpYiIgOzsKKwllc2FjCisgICAgICBkb25lCisgICAgICBkZXBsaWJzPSIkbmV3X2xpYnMiCisKKworICAgICAgIyBBbGwgdGhlIGxpYnJhcnktc3BlY2lmaWMgdmFyaWFibGVzIChpbnN0YWxsX2xpYmRpciBpcyBzZXQgYWJvdmUpLgorICAgICAgbGlicmFyeV9uYW1lcz0KKyAgICAgIG9sZF9saWJyYXJ5PQorICAgICAgZGxuYW1lPQorCisgICAgICAjIFRlc3QgYWdhaW4sIHdlIG1heSBoYXZlIGRlY2lkZWQgbm90IHRvIGJ1aWxkIGl0IGFueSBtb3JlCisgICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgorCWlmIHRlc3QgIiRoYXJkY29kZV9pbnRvX2xpYnMiID0geWVzOyB0aGVuCisJICAjIEhhcmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGhzCisJICBoYXJkY29kZV9saWJkaXJzPQorCSAgZGVwX3JwYXRoPQorCSAgcnBhdGg9IiRmaW5hbGl6ZV9ycGF0aCIKKwkgIHRlc3QgIiRtb2RlIiAhPSByZWxpbmsgJiYgcnBhdGg9IiRjb21waWxlX3JwYXRoJHJwYXRoIgorCSAgZm9yIGxpYmRpciBpbiAkcnBhdGg7IGRvCisJICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgorCSAgICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgorCQlpZiB0ZXN0IC16ICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKwkJICBoYXJkY29kZV9saWJkaXJzPSIkbGliZGlyIgorCQllbHNlCisJCSAgIyBKdXN0IGFjY3VtdWxhdGUgdGhlIHVuaXF1ZSBsaWJkaXJzLgorCQkgIGNhc2UgJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkaGFyZGNvZGVfbGliZGlycyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIGluCisJCSAgKiIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIqKQorCQkgICAgOzsKKwkJICAqKQorCQkgICAgaGFyZGNvZGVfbGliZGlycz0iJGhhcmRjb2RlX2xpYmRpcnMkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIiCisJCSAgICA7OworCQkgIGVzYWMKKwkJZmkKKwkgICAgICBlbHNlCisJCWV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKwkJZGVwX3JwYXRoPSIkZGVwX3JwYXRoICRmbGFnIgorCSAgICAgIGZpCisJICAgIGVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorCSAgICAgIGNhc2UgIiRwZXJtX3JwYXRoICIgaW4KKwkgICAgICAqIiAkbGliZGlyICIqKSA7OworCSAgICAgICopIHBlcm1fcnBhdGg9IiRwZXJtX3JwYXRoICRsaWJkaXIiIDs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgZG9uZQorCSAgIyBTdWJzdGl0dXRlIHRoZSBoYXJkY29kZWQgbGliZGlycyBpbnRvIHRoZSBycGF0aC4KKwkgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiAmJgorCSAgICAgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisJICAgIGxpYmRpcj0iJGhhcmRjb2RlX2xpYmRpcnMiCisJICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkIjsgdGhlbgorCSAgICAgIGV2YWwgZGVwX3JwYXRoPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRcIgorCSAgICBlbHNlCisJICAgICAgZXZhbCBkZXBfcnBhdGg9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisJICAgIGZpCisJICBmaQorCSAgaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIiAmJiB0ZXN0IC1uICIkcGVybV9ycGF0aCI7IHRoZW4KKwkgICAgIyBXZSBzaG91bGQgc2V0IHRoZSBydW5wYXRoX3Zhci4KKwkgICAgcnBhdGg9CisJICAgIGZvciBkaXIgaW4gJHBlcm1fcnBhdGg7IGRvCisJICAgICAgcnBhdGg9IiRycGF0aCRkaXI6IgorCSAgICBkb25lCisJICAgIGV2YWwgIiRydW5wYXRoX3Zhcj0nJHJwYXRoXCQkcnVucGF0aF92YXInOyBleHBvcnQgJHJ1bnBhdGhfdmFyIgorCSAgZmkKKwkgIHRlc3QgLW4gIiRkZXBfcnBhdGgiICYmIGRlcGxpYnM9IiRkZXBfcnBhdGggJGRlcGxpYnMiCisJZmkKKworCXNobGlicGF0aD0iJGZpbmFsaXplX3NobGlicGF0aCIKKwl0ZXN0ICIkbW9kZSIgIT0gcmVsaW5rICYmIHNobGlicGF0aD0iJGNvbXBpbGVfc2hsaWJwYXRoJHNobGlicGF0aCIKKwlpZiB0ZXN0IC1uICIkc2hsaWJwYXRoIjsgdGhlbgorCSAgZXZhbCAiJHNobGlicGF0aF92YXI9JyRzaGxpYnBhdGhcJCRzaGxpYnBhdGhfdmFyJzsgZXhwb3J0ICRzaGxpYnBhdGhfdmFyIgorCWZpCisKKwkjIEdldCB0aGUgcmVhbCBhbmQgbGluayBuYW1lcyBvZiB0aGUgbGlicmFyeS4KKwlldmFsIHNoYXJlZF9leHQ9XCIkc2hyZXh0X2NtZHNcIgorCWV2YWwgbGlicmFyeV9uYW1lcz1cIiRsaWJyYXJ5X25hbWVzX3NwZWNcIgorCXNldCBkdW1teSAkbGlicmFyeV9uYW1lcworCXJlYWxuYW1lPSIkMiIKKwlzaGlmdDsgc2hpZnQKKworCWlmIHRlc3QgLW4gIiRzb25hbWVfc3BlYyI7IHRoZW4KKwkgIGV2YWwgc29uYW1lPVwiJHNvbmFtZV9zcGVjXCIKKwllbHNlCisJICBzb25hbWU9IiRyZWFsbmFtZSIKKwlmaQorCWlmIHRlc3QgLXogIiRkbG5hbWUiOyB0aGVuCisJICBkbG5hbWU9JHNvbmFtZQorCWZpCisKKwlsaWI9IiRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZSIKKwlsaW5rbmFtZXM9CisJZm9yIGxpbmsKKwlkbworCSAgbGlua25hbWVzPSIkbGlua25hbWVzICRsaW5rIgorCWRvbmUKKworCSMgVXNlIHN0YW5kYXJkIG9iamVjdHMgaWYgdGhleSBhcmUgcGljCisJdGVzdCAteiAiJHBpY19mbGFnIiAmJiBsaWJvYmpzPWAkZWNobyAiWCRsaWJvYmpzIiB8ICRTUDJOTCB8ICRYc2VkIC1lICIkbG8ybyIgfCAkTkwyU1BgCisKKwkjIFByZXBhcmUgdGhlIGxpc3Qgb2YgZXhwb3J0ZWQgc3ltYm9scworCWlmIHRlc3QgLXogIiRleHBvcnRfc3ltYm9scyI7IHRoZW4KKwkgIGlmIHRlc3QgIiRhbHdheXNfZXhwb3J0X3N5bWJvbHMiID0geWVzIHx8IHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCI7IHRoZW4KKwkgICAgJHNob3cgImdlbmVyYXRpbmcgc3ltYm9sIGxpc3QgZm9yIFxgJGxpYm5hbWUubGEnIgorCSAgICBleHBvcnRfc3ltYm9scz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZXhwIgorCSAgICAkcnVuICRybSAkZXhwb3J0X3N5bWJvbHMKKwkgICAgY21kcz0kZXhwb3J0X3N5bWJvbHNfY21kcworCSAgICBzYXZlX2lmcz0iJElGUyI7IElGUz0nficKKwkgICAgZm9yIGNtZCBpbiAkY21kczsgZG8KKwkgICAgICBJRlM9IiRzYXZlX2lmcyIKKwkgICAgICBldmFsIGNtZD1cIiRjbWRcIgorCSAgICAgIGlmIGxlbj1gZXhwciAiWCRjbWQiIDogIi4qImAgJiYKKwkgICAgICAgdGVzdCAiJGxlbiIgLWxlICIkbWF4X2NtZF9sZW4iIHx8IHRlc3QgIiRtYXhfY21kX2xlbiIgLWxlIC0xOyB0aGVuCisJICAgICAgICAkc2hvdyAiJGNtZCIKKwkgICAgICAgICRydW4gZXZhbCAiJGNtZCIgfHwgZXhpdCAkPworCSAgICAgICAgc2tpcHBlZF9leHBvcnQ9ZmFsc2UKKwkgICAgICBlbHNlCisJICAgICAgICAjIFRoZSBjb21tYW5kIGxpbmUgaXMgdG9vIGxvbmcgdG8gZXhlY3V0ZSBpbiBvbmUgc3RlcC4KKwkgICAgICAgICRzaG93ICJ1c2luZyByZWxvYWRhYmxlIG9iamVjdCBmaWxlIGZvciBleHBvcnQgbGlzdC4uLiIKKwkgICAgICAgIHNraXBwZWRfZXhwb3J0PToKKwkJIyBCcmVhayBvdXQgZWFybHksIG90aGVyd2lzZSBza2lwcGVkX2V4cG9ydCBtYXkgYmUKKwkJIyBzZXQgdG8gZmFsc2UgYnkgYSBsYXRlciBidXQgc2hvcnRlciBjbWQuCisJCWJyZWFrCisJICAgICAgZmkKKwkgICAgZG9uZQorCSAgICBJRlM9IiRzYXZlX2lmcyIKKwkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IjsgdGhlbgorCSAgICAgICRzaG93ICIkRUdSRVAgLWUgXCIkZXhwb3J0X3N5bWJvbHNfcmVnZXhcIiBcIiRleHBvcnRfc3ltYm9sc1wiID4gXCIke2V4cG9ydF9zeW1ib2xzfVRcIiIKKwkgICAgICAkcnVuIGV2YWwgJyRFR1JFUCAtZSAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAiJGV4cG9ydF9zeW1ib2xzIiA+ICIke2V4cG9ydF9zeW1ib2xzfVQiJworCSAgICAgICRzaG93ICIkbXYgXCIke2V4cG9ydF9zeW1ib2xzfVRcIiBcIiRleHBvcnRfc3ltYm9sc1wiIgorCSAgICAgICRydW4gZXZhbCAnJG12ICIke2V4cG9ydF9zeW1ib2xzfVQiICIkZXhwb3J0X3N5bWJvbHMiJworCSAgICBmaQorCSAgZmkKKwlmaQorCisJaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkaW5jbHVkZV9leHBzeW1zIjsgdGhlbgorCSAgJHJ1biBldmFsICckZWNobyAiWCRpbmNsdWRlX2V4cHN5bXMiIHwgJFNQMk5MID4+ICIkZXhwb3J0X3N5bWJvbHMiJworCWZpCisKKwl0bXBfZGVwbGlicz0KKwlmb3IgdGVzdF9kZXBsaWIgaW4gJGRlcGxpYnM7IGRvCisJCWNhc2UgIiAkY29udmVuaWVuY2UgIiBpbgorCQkqIiAkdGVzdF9kZXBsaWIgIiopIDs7CisJCSopCisJCQl0bXBfZGVwbGlicz0iJHRtcF9kZXBsaWJzICR0ZXN0X2RlcGxpYiIKKwkJCTs7CisJCWVzYWMKKwlkb25lCisJZGVwbGlicz0iJHRtcF9kZXBsaWJzIgorCisJaWYgdGVzdCAtbiAiJGNvbnZlbmllbmNlIjsgdGhlbgorCSAgaWYgdGVzdCAtbiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgorCSAgICBzYXZlX2xpYm9ianM9JGxpYm9ianMKKwkgICAgZXZhbCBsaWJvYmpzPVwiXCRsaWJvYmpzICR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY1wiCisJICBlbHNlCisJICAgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCisJICAgIGdlbmVyYXRlZD0iJGdlbmVyYXRlZCAkZ2VudG9wIgorCisJICAgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAkZ2VudG9wICRjb252ZW5pZW5jZQorCSAgICBsaWJvYmpzPSIkbGlib2JqcyAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKwkgIGZpCisJZmkKKwkKKwlpZiB0ZXN0ICIkdGhyZWFkX3NhZmUiID0geWVzICYmIHRlc3QgLW4gIiR0aHJlYWRfc2FmZV9mbGFnX3NwZWMiOyB0aGVuCisJICBldmFsIGZsYWc9XCIkdGhyZWFkX3NhZmVfZmxhZ19zcGVjXCIKKwkgIGxpbmtlcl9mbGFncz0iJGxpbmtlcl9mbGFncyAkZmxhZyIKKwlmaQorCisJIyBNYWtlIGEgYmFja3VwIG9mIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IHdoZW4gcmVsaW5raW5nCisJaWYgdGVzdCAiJG1vZGUiID0gcmVsaW5rOyB0aGVuCisJICAkcnVuIGV2YWwgJyhjZCAkb3V0cHV0X29iamRpciAmJiAkcm0gJHtyZWFsbmFtZX1VICYmICRtdiAkcmVhbG5hbWUgJHtyZWFsbmFtZX1VKScgfHwgZXhpdCAkPworCWZpCisKKwkjIERvIGVhY2ggb2YgdGhlIGFyY2hpdmUgY29tbWFuZHMuCisJaWYgdGVzdCAiJG1vZHVsZSIgPSB5ZXMgJiYgdGVzdCAtbiAiJG1vZHVsZV9jbWRzIiA7IHRoZW4KKwkgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJG1vZHVsZV9leHBzeW1fY21kcyI7IHRoZW4KKwkgICAgZXZhbCB0ZXN0X2NtZHM9XCIkbW9kdWxlX2V4cHN5bV9jbWRzXCIKKwkgICAgY21kcz0kbW9kdWxlX2V4cHN5bV9jbWRzCisJICBlbHNlCisJICAgIGV2YWwgdGVzdF9jbWRzPVwiJG1vZHVsZV9jbWRzXCIKKwkgICAgY21kcz0kbW9kdWxlX2NtZHMKKwkgIGZpCisJZWxzZQorCWlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGFyY2hpdmVfZXhwc3ltX2NtZHMiOyB0aGVuCisJICBldmFsIHRlc3RfY21kcz1cIiRhcmNoaXZlX2V4cHN5bV9jbWRzXCIKKwkgIGNtZHM9JGFyY2hpdmVfZXhwc3ltX2NtZHMKKwllbHNlCisJICBldmFsIHRlc3RfY21kcz1cIiRhcmNoaXZlX2NtZHNcIgorCSAgY21kcz0kYXJjaGl2ZV9jbWRzCisJICBmaQorCWZpCisKKwlpZiB0ZXN0ICJYJHNraXBwZWRfZXhwb3J0IiAhPSAiWDoiICYmCisJICAgbGVuPWBleHByICJYJHRlc3RfY21kcyIgOiAiLioiIDI+L2Rldi9udWxsYCAmJgorCSAgIHRlc3QgIiRsZW4iIC1sZSAiJG1heF9jbWRfbGVuIiB8fCB0ZXN0ICIkbWF4X2NtZF9sZW4iIC1sZSAtMTsgdGhlbgorCSAgOgorCWVsc2UKKwkgICMgVGhlIGNvbW1hbmQgbGluZSBpcyB0b28gbG9uZyB0byBsaW5rIGluIG9uZSBzdGVwLCBsaW5rIHBpZWNld2lzZS4KKwkgICRlY2hvICJjcmVhdGluZyByZWxvYWRhYmxlIG9iamVjdCBmaWxlcy4uLiIKKworCSAgIyBTYXZlIHRoZSB2YWx1ZSBvZiAkb3V0cHV0IGFuZCAkbGlib2JqcyBiZWNhdXNlIHdlIHdhbnQgdG8KKwkgICMgdXNlIHRoZW0gbGF0ZXIuICBJZiB3ZSBoYXZlIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCB3ZQorCSAgIyB3YW50IHRvIHVzZSBzYXZlX2xpYm9ianMgYXMgaXQgd2FzIGJlZm9yZQorCSAgIyB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyB3YXMgZXhwYW5kZWQsIGJlY2F1c2Ugd2UgY2FuJ3QKKwkgICMgYXNzdW1lIHRoZSBsaW5rZXIgdW5kZXJzdGFuZHMgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMuCisJICAjIFRoaXMgbWF5IGhhdmUgdG8gYmUgcmV2aXNpdGVkLCBpbiBjYXNlIHRvbyBtYW55CisJICAjIGNvbnZlbmllbmNlIGxpYnJhcmllcyBnZXQgbGlua2VkIGluIGFuZCBlbmQgdXAgZXhjZWVkaW5nCisJICAjIHRoZSBzcGVjLgorCSAgaWYgdGVzdCAteiAiJGNvbnZlbmllbmNlIiB8fCB0ZXN0IC16ICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiOyB0aGVuCisJICAgIHNhdmVfbGlib2Jqcz0kbGlib2JqcworCSAgZmkKKwkgIHNhdmVfb3V0cHV0PSRvdXRwdXQKKwkgIG91dHB1dF9sYT1gJGVjaG8gIlgkb3V0cHV0IiB8ICRYc2VkIC1lICIkYmFzZW5hbWUiYAorCisJICAjIENsZWFyIHRoZSByZWxvYWRhYmxlIG9iamVjdCBjcmVhdGlvbiBjb21tYW5kIHF1ZXVlIGFuZAorCSAgIyBpbml0aWFsaXplIGsgdG8gb25lLgorCSAgdGVzdF9jbWRzPQorCSAgY29uY2F0X2NtZHM9CisJICBvYmpsaXN0PQorCSAgZGVsZmlsZXM9CisJICBsYXN0X3JvYmo9CisJICBrPTEKKwkgIG91dHB1dD0kb3V0cHV0X29iamRpci8kb3V0cHV0X2xhLSR7a30uJG9iamV4dAorCSAgIyBMb29wIG92ZXIgdGhlIGxpc3Qgb2Ygb2JqZWN0cyB0byBiZSBsaW5rZWQuCisJICBmb3Igb2JqIGluICRzYXZlX2xpYm9ianMKKwkgIGRvCisJICAgIGV2YWwgdGVzdF9jbWRzPVwiJHJlbG9hZF9jbWRzICRvYmpsaXN0ICRsYXN0X3JvYmpcIgorCSAgICBpZiB0ZXN0ICJYJG9iamxpc3QiID0gWCB8fAorCSAgICAgICB7IGxlbj1gZXhwciAiWCR0ZXN0X2NtZHMiIDogIi4qIiAyPi9kZXYvbnVsbGAgJiYKKwkJIHRlc3QgIiRsZW4iIC1sZSAiJG1heF9jbWRfbGVuIjsgfTsgdGhlbgorCSAgICAgIG9iamxpc3Q9IiRvYmpsaXN0ICRvYmoiCisJICAgIGVsc2UKKwkgICAgICAjIFRoZSBjb21tYW5kICR0ZXN0X2NtZHMgaXMgYWxtb3N0IHRvbyBsb25nLCBhZGQgYQorCSAgICAgICMgY29tbWFuZCB0byB0aGUgcXVldWUuCisJICAgICAgaWYgdGVzdCAiJGsiIC1lcSAxIDsgdGhlbgorCQkjIFRoZSBmaXJzdCBmaWxlIGRvZXNuJ3QgaGF2ZSBhIHByZXZpb3VzIGNvbW1hbmQgdG8gYWRkLgorCQlldmFsIGNvbmNhdF9jbWRzPVwiJHJlbG9hZF9jbWRzICRvYmpsaXN0ICRsYXN0X3JvYmpcIgorCSAgICAgIGVsc2UKKwkJIyBBbGwgc3Vic2VxdWVudCByZWxvYWRhYmxlIG9iamVjdCBmaWxlcyB3aWxsIGxpbmsgaW4KKwkJIyB0aGUgbGFzdCBvbmUgY3JlYXRlZC4KKwkJZXZhbCBjb25jYXRfY21kcz1cIlwkY29uY2F0X2NtZHN+JHJlbG9hZF9jbWRzICRvYmpsaXN0ICRsYXN0X3JvYmpcIgorCSAgICAgIGZpCisJICAgICAgbGFzdF9yb2JqPSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEtJHtrfS4kb2JqZXh0CisJICAgICAgaz1gZXhwciAkayArIDFgCisJICAgICAgb3V0cHV0PSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEtJHtrfS4kb2JqZXh0CisJICAgICAgb2JqbGlzdD0kb2JqCisJICAgICAgbGVuPTEKKwkgICAgZmkKKwkgIGRvbmUKKwkgICMgSGFuZGxlIHRoZSByZW1haW5pbmcgb2JqZWN0cyBieSBjcmVhdGluZyBvbmUgbGFzdAorCSAgIyByZWxvYWRhYmxlIG9iamVjdCBmaWxlLiAgQWxsIHN1YnNlcXVlbnQgcmVsb2FkYWJsZSBvYmplY3QKKwkgICMgZmlsZXMgd2lsbCBsaW5rIGluIHRoZSBsYXN0IG9uZSBjcmVhdGVkLgorCSAgdGVzdCAteiAiJGNvbmNhdF9jbWRzIiB8fCBjb25jYXRfY21kcz0kY29uY2F0X2NtZHN+CisJICBldmFsIGNvbmNhdF9jbWRzPVwiXCR7Y29uY2F0X2NtZHN9JHJlbG9hZF9jbWRzICRvYmpsaXN0ICRsYXN0X3JvYmpcIgorCisJICBpZiAke3NraXBwZWRfZXhwb3J0LWZhbHNlfTsgdGhlbgorCSAgICAkc2hvdyAiZ2VuZXJhdGluZyBzeW1ib2wgbGlzdCBmb3IgXGAkbGlibmFtZS5sYSciCisJICAgIGV4cG9ydF9zeW1ib2xzPSIkb3V0cHV0X29iamRpci8kbGlibmFtZS5leHAiCisJICAgICRydW4gJHJtICRleHBvcnRfc3ltYm9scworCSAgICBsaWJvYmpzPSRvdXRwdXQKKwkgICAgIyBBcHBlbmQgdGhlIGNvbW1hbmQgdG8gY3JlYXRlIHRoZSBleHBvcnQgZmlsZS4KKwkgICAgZXZhbCBjb25jYXRfY21kcz1cIlwkY29uY2F0X2NtZHN+JGV4cG9ydF9zeW1ib2xzX2NtZHNcIgorICAgICAgICAgIGZpCisKKwkgICMgU2V0IHVwIGEgY29tbWFuZCB0byByZW1vdmUgdGhlIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzCisJICAjIGFmdGVyIHRoZXkgYXJlIHVzZWQuCisJICBpPTAKKwkgIHdoaWxlIHRlc3QgIiRpIiAtbHQgIiRrIgorCSAgZG8KKwkgICAgaT1gZXhwciAkaSArIDFgCisJICAgIGRlbGZpbGVzPSIkZGVsZmlsZXMgJG91dHB1dF9vYmpkaXIvJG91dHB1dF9sYS0ke2l9LiRvYmpleHQiCisJICBkb25lCisKKwkgICRlY2hvICJjcmVhdGluZyBhIHRlbXBvcmFyeSByZWxvYWRhYmxlIG9iamVjdCBmaWxlOiAkb3V0cHV0IgorCisJICAjIExvb3AgdGhyb3VnaCB0aGUgY29tbWFuZHMgZ2VuZXJhdGVkIGFib3ZlIGFuZCBleGVjdXRlIHRoZW0uCisJICBzYXZlX2lmcz0iJElGUyI7IElGUz0nficKKwkgIGZvciBjbWQgaW4gJGNvbmNhdF9jbWRzOyBkbworCSAgICBJRlM9IiRzYXZlX2lmcyIKKwkgICAgJHNob3cgIiRjbWQiCisJICAgICRydW4gZXZhbCAiJGNtZCIgfHwgZXhpdCAkPworCSAgZG9uZQorCSAgSUZTPSIkc2F2ZV9pZnMiCisKKwkgIGxpYm9ianM9JG91dHB1dAorCSAgIyBSZXN0b3JlIHRoZSB2YWx1ZSBvZiBvdXRwdXQuCisJICBvdXRwdXQ9JHNhdmVfb3V0cHV0CisKKwkgIGlmIHRlc3QgLW4gIiRjb252ZW5pZW5jZSIgJiYgdGVzdCAtbiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgorCSAgICBldmFsIGxpYm9ianM9XCJcJGxpYm9ianMgJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjXCIKKwkgIGZpCisJICAjIEV4cGFuZCB0aGUgbGlicmFyeSBsaW5raW5nIGNvbW1hbmRzIGFnYWluIHRvIHJlc2V0IHRoZQorCSAgIyB2YWx1ZSBvZiAkbGlib2JqcyBmb3IgcGllY2V3aXNlIGxpbmtpbmcuCisKKwkgICMgRG8gZWFjaCBvZiB0aGUgYXJjaGl2ZSBjb21tYW5kcy4KKwkgIGlmIHRlc3QgIiRtb2R1bGUiID0geWVzICYmIHRlc3QgLW4gIiRtb2R1bGVfY21kcyIgOyB0aGVuCisJICAgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJG1vZHVsZV9leHBzeW1fY21kcyI7IHRoZW4KKwkgICAgICBjbWRzPSRtb2R1bGVfZXhwc3ltX2NtZHMKKwkgICAgZWxzZQorCSAgICAgIGNtZHM9JG1vZHVsZV9jbWRzCisJICAgIGZpCisJICBlbHNlCisJICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRhcmNoaXZlX2V4cHN5bV9jbWRzIjsgdGhlbgorCSAgICBjbWRzPSRhcmNoaXZlX2V4cHN5bV9jbWRzCisJICBlbHNlCisJICAgIGNtZHM9JGFyY2hpdmVfY21kcworCSAgICBmaQorCSAgZmkKKworCSAgIyBBcHBlbmQgdGhlIGNvbW1hbmQgdG8gcmVtb3ZlIHRoZSByZWxvYWRhYmxlIG9iamVjdCBmaWxlcworCSAgIyB0byB0aGUganVzdC1yZXNldCAkY21kcy4KKwkgIGV2YWwgY21kcz1cIlwkY21kc35cJHJtICRkZWxmaWxlc1wiCisJZmkKKwlzYXZlX2lmcz0iJElGUyI7IElGUz0nficKKwlmb3IgY21kIGluICRjbWRzOyBkbworCSAgSUZTPSIkc2F2ZV9pZnMiCisJICBldmFsIGNtZD1cIiRjbWRcIgorCSAgJHNob3cgIiRjbWQiCisJICAkcnVuIGV2YWwgIiRjbWQiIHx8IHsKKwkgICAgbHRfZXhpdD0kPworCisJICAgICMgUmVzdG9yZSB0aGUgdW5pbnN0YWxsZWQgbGlicmFyeSBhbmQgZXhpdAorCSAgICBpZiB0ZXN0ICIkbW9kZSIgPSByZWxpbms7IHRoZW4KKwkgICAgICAkcnVuIGV2YWwgJyhjZCAkb3V0cHV0X29iamRpciAmJiAkcm0gJHtyZWFsbmFtZX1UICYmICRtdiAke3JlYWxuYW1lfVUgJHJlYWxuYW1lKScKKwkgICAgZmkKKworCSAgICBleGl0ICRsdF9leGl0CisJICB9CisJZG9uZQorCUlGUz0iJHNhdmVfaWZzIgorCisJIyBSZXN0b3JlIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IGFuZCBleGl0CisJaWYgdGVzdCAiJG1vZGUiID0gcmVsaW5rOyB0aGVuCisJICAkcnVuIGV2YWwgJyhjZCAkb3V0cHV0X29iamRpciAmJiAkcm0gJHtyZWFsbmFtZX1UICYmICRtdiAkcmVhbG5hbWUgJHtyZWFsbmFtZX1UICYmICRtdiAiJHJlYWxuYW1lIlUgJHJlYWxuYW1lKScgfHwgZXhpdCAkPworCisJICBpZiB0ZXN0IC1uICIkY29udmVuaWVuY2UiOyB0aGVuCisJICAgIGlmIHRlc3QgLXogIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyI7IHRoZW4KKwkgICAgICAkc2hvdyAiJHtybX1yICRnZW50b3AiCisJICAgICAgJHJ1biAke3JtfXIgIiRnZW50b3AiCisJICAgIGZpCisJICBmaQorCisJICBleGl0ICRFWElUX1NVQ0NFU1MKKwlmaQorCisJIyBDcmVhdGUgbGlua3MgdG8gdGhlIHJlYWwgbGlicmFyeS4KKwlmb3IgbGlua25hbWUgaW4gJGxpbmtuYW1lczsgZG8KKwkgIGlmIHRlc3QgIiRyZWFsbmFtZSIgIT0gIiRsaW5rbmFtZSI7IHRoZW4KKwkgICAgJHNob3cgIihjZCAkb3V0cHV0X29iamRpciAmJiAkcm0gJGxpbmtuYW1lICYmICRMTl9TICRyZWFsbmFtZSAkbGlua25hbWUpIgorCSAgICAkcnVuIGV2YWwgJyhjZCAkb3V0cHV0X29iamRpciAmJiAkcm0gJGxpbmtuYW1lICYmICRMTl9TICRyZWFsbmFtZSAkbGlua25hbWUpJyB8fCBleGl0ICQ/CisJICBmaQorCWRvbmUKKworCSMgSWYgLW1vZHVsZSBvciAtZXhwb3J0LWR5bmFtaWMgd2FzIHNwZWNpZmllZCwgc2V0IHRoZSBkbG5hbWUuCisJaWYgdGVzdCAiJG1vZHVsZSIgPSB5ZXMgfHwgdGVzdCAiJGV4cG9ydF9keW5hbWljIiA9IHllczsgdGhlbgorCSAgIyBPbiBhbGwga25vd24gb3BlcmF0aW5nIHN5c3RlbXMsIHRoZXNlIGFyZSBpZGVudGljYWwuCisJICBkbG5hbWU9IiRzb25hbWUiCisJZmkKKyAgICAgIGZpCisgICAgICA7OworCisgICAgb2JqKQorICAgICAgaWYgdGVzdCAtbiAiJGRlcGxpYnMiOyB0aGVuCisJJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogXGAtbCcgYW5kIFxgLUwnIGFyZSBpZ25vcmVkIGZvciBvYmplY3RzIiAxPiYyCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0IC1uICIkZGxmaWxlcyRkbHByZWZpbGVzIiB8fCB0ZXN0ICIkZGxzZWxmIiAhPSBubzsgdGhlbgorCSRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgLWRsb3BlbicgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIgMT4mMgorICAgICAgZmkKKworICAgICAgaWYgdGVzdCAtbiAiJHJwYXRoIjsgdGhlbgorCSRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgLXJwYXRoJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIiAxPiYyCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0IC1uICIkeHJwYXRoIjsgdGhlbgorCSRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgLVInIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiIDE+JjIKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgLW4gIiR2aW5mbyI7IHRoZW4KKwkkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBcYC12ZXJzaW9uLWluZm8nIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiIDE+JjIKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgLW4gIiRyZWxlYXNlIjsgdGhlbgorCSRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgLXJlbGVhc2UnIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiIDE+JjIKKyAgICAgIGZpCisKKyAgICAgIGNhc2UgJG91dHB1dCBpbgorICAgICAgKi5sbykKKwlpZiB0ZXN0IC1uICIkb2JqcyRvbGRfZGVwbGlicyI7IHRoZW4KKwkgICRlY2hvICIkbW9kZW5hbWU6IGNhbm5vdCBidWlsZCBsaWJyYXJ5IG9iamVjdCBcYCRvdXRwdXQnIGZyb20gbm9uLWxpYnRvb2wgb2JqZWN0cyIgMT4mMgorCSAgZXhpdCAkRVhJVF9GQUlMVVJFCisJZmkKKwlsaWJvYmo9IiRvdXRwdXQiCisJb2JqPWAkZWNobyAiWCRvdXRwdXQiIHwgJFhzZWQgLWUgIiRsbzJvImAKKwk7OworICAgICAgKikKKwlsaWJvYmo9CisJb2JqPSIkb3V0cHV0IgorCTs7CisgICAgICBlc2FjCisKKyAgICAgICMgRGVsZXRlIHRoZSBvbGQgb2JqZWN0cy4KKyAgICAgICRydW4gJHJtICRvYmogJGxpYm9iagorCisgICAgICAjIE9iamVjdHMgZnJvbSBjb252ZW5pZW5jZSBsaWJyYXJpZXMuICBUaGlzIGFzc3VtZXMKKyAgICAgICMgc2luZ2xlLXZlcnNpb24gY29udmVuaWVuY2UgbGlicmFyaWVzLiAgV2hlbmV2ZXIgd2UgY3JlYXRlCisgICAgICAjIGRpZmZlcmVudCBvbmVzIGZvciBQSUMvbm9uLVBJQywgdGhpcyB3ZSdsbCBoYXZlIHRvIGR1cGxpY2F0ZQorICAgICAgIyB0aGUgZXh0cmFjdGlvbi4KKyAgICAgIHJlbG9hZF9jb252X29ianM9CisgICAgICBnZW50b3A9CisgICAgICAjIHJlbG9hZF9jbWRzIHJ1bnMgJExEIGRpcmVjdGx5LCBzbyBsZXQgdXMgZ2V0IHJpZCBvZgorICAgICAgIyAtV2wgZnJvbSB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyBhbmQgaG9wZSB3ZSBjYW4gZ2V0IGJ5IHdpdGgKKyAgICAgICMgdHVybmluZyBjb21tYSBpbnRvIHNwYWNlLi4KKyAgICAgIHdsPQorCisgICAgICBpZiB0ZXN0IC1uICIkY29udmVuaWVuY2UiOyB0aGVuCisJaWYgdGVzdCAtbiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgorCSAgZXZhbCB0bXBfd2hvbGVfYXJjaGl2ZV9mbGFncz1cIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY1wiCisgICAgICByZWxvYWRfY29udl9vYmpzPSRyZWxvYWRfb2Jqc1wgYCRlY2hvICJYJHRtcF93aG9sZV9hcmNoaXZlX2ZsYWdzIiB8ICRYc2VkIC1lICdzfCx8IHxnJ2AKKwllbHNlCisJICBnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b2JqfXgiCisJICBnZW5lcmF0ZWQ9IiRnZW5lcmF0ZWQgJGdlbnRvcCIKKworCSAgZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGNvbnZlbmllbmNlCisJICByZWxvYWRfY29udl9vYmpzPSIkcmVsb2FkX29ianMgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCisJZmkKKyAgICAgIGZpCisKKyAgICAgICMgQ3JlYXRlIHRoZSBvbGQtc3R5bGUgb2JqZWN0LgorICAgICAgcmVsb2FkX29ianM9IiRvYmpzJG9sZF9kZXBsaWJzICJgJGVjaG8gIlgkbGlib2JqcyIgfCAkU1AyTkwgfCAkWHNlZCAtZSAnL1wuJyR7bGliZXh0fSQnL2QnIC1lICcvXC5saWIkL2QnIC1lICIkbG8ybyIgfCAkTkwyU1BgIiAkcmVsb2FkX2NvbnZfb2JqcyIgIyMjIHRlc3RzdWl0ZTogc2tpcCBuZXN0ZWQgcXVvdGluZyB0ZXN0CisKKyAgICAgIG91dHB1dD0iJG9iaiIKKyAgICAgIGNtZHM9JHJlbG9hZF9jbWRzCisgICAgICBzYXZlX2lmcz0iJElGUyI7IElGUz0nficKKyAgICAgIGZvciBjbWQgaW4gJGNtZHM7IGRvCisJSUZTPSIkc2F2ZV9pZnMiCisJZXZhbCBjbWQ9XCIkY21kXCIKKwkkc2hvdyAiJGNtZCIKKwkkcnVuIGV2YWwgIiRjbWQiIHx8IGV4aXQgJD8KKyAgICAgIGRvbmUKKyAgICAgIElGUz0iJHNhdmVfaWZzIgorCisgICAgICAjIEV4aXQgaWYgd2UgYXJlbid0IGRvaW5nIGEgbGlicmFyeSBvYmplY3QgZmlsZS4KKyAgICAgIGlmIHRlc3QgLXogIiRsaWJvYmoiOyB0aGVuCisJaWYgdGVzdCAtbiAiJGdlbnRvcCI7IHRoZW4KKwkgICRzaG93ICIke3JtfXIgJGdlbnRvcCIKKwkgICRydW4gJHtybX1yICRnZW50b3AKKwlmaQorCisJZXhpdCAkRVhJVF9TVUNDRVNTCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXM7IHRoZW4KKwlpZiB0ZXN0IC1uICIkZ2VudG9wIjsgdGhlbgorCSAgJHNob3cgIiR7cm19ciAkZ2VudG9wIgorCSAgJHJ1biAke3JtfXIgJGdlbnRvcAorCWZpCisKKwkjIENyZWF0ZSBhbiBpbnZhbGlkIGxpYnRvb2wgb2JqZWN0IGlmIG5vIFBJQywgc28gdGhhdCB3ZSBkb24ndAorCSMgYWNjaWRlbnRhbGx5IGxpbmsgaXQgaW50byBhIHByb2dyYW0uCisJIyAkc2hvdyAiZWNobyB0aW1lc3RhbXAgPiAkbGlib2JqIgorCSMgJHJ1biBldmFsICJlY2hvIHRpbWVzdGFtcCA+ICRsaWJvYmoiIHx8IGV4aXQgJD8KKwlleGl0ICRFWElUX1NVQ0NFU1MKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgLW4gIiRwaWNfZmxhZyIgfHwgdGVzdCAiJHBpY19tb2RlIiAhPSBkZWZhdWx0OyB0aGVuCisJIyBPbmx5IGRvIGNvbW1hbmRzIGlmIHdlIHJlYWxseSBoYXZlIGRpZmZlcmVudCBQSUMgb2JqZWN0cy4KKwlyZWxvYWRfb2Jqcz0iJGxpYm9ianMgJHJlbG9hZF9jb252X29ianMiCisJb3V0cHV0PSIkbGlib2JqIgorCWNtZHM9JHJlbG9hZF9jbWRzCisJc2F2ZV9pZnM9IiRJRlMiOyBJRlM9J34nCisJZm9yIGNtZCBpbiAkY21kczsgZG8KKwkgIElGUz0iJHNhdmVfaWZzIgorCSAgZXZhbCBjbWQ9XCIkY21kXCIKKwkgICRzaG93ICIkY21kIgorCSAgJHJ1biBldmFsICIkY21kIiB8fCBleGl0ICQ/CisJZG9uZQorCUlGUz0iJHNhdmVfaWZzIgorICAgICAgZmkKKworICAgICAgaWYgdGVzdCAtbiAiJGdlbnRvcCI7IHRoZW4KKwkkc2hvdyAiJHtybX1yICRnZW50b3AiCisJJHJ1biAke3JtfXIgJGdlbnRvcAorICAgICAgZmkKKworICAgICAgZXhpdCAkRVhJVF9TVUNDRVNTCisgICAgICA7OworCisgICAgcHJvZykKKyAgICAgIGNhc2UgJGhvc3QgaW4KKwkqY3lnd2luKikgb3V0cHV0PWAkZWNobyAkb3V0cHV0IHwgJHtTRUR9IC1lICdzLC5leGUkLCw7cywkLC5leGUsJ2AgOzsKKyAgICAgIGVzYWMKKyAgICAgIGlmIHRlc3QgLW4gIiR2aW5mbyI7IHRoZW4KKwkkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBcYC12ZXJzaW9uLWluZm8nIGlzIGlnbm9yZWQgZm9yIHByb2dyYW1zIiAxPiYyCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0IC1uICIkcmVsZWFzZSI7IHRoZW4KKwkkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBcYC1yZWxlYXNlJyBpcyBpZ25vcmVkIGZvciBwcm9ncmFtcyIgMT4mMgorICAgICAgZmkKKworICAgICAgaWYgdGVzdCAiJHByZWxvYWQiID0geWVzOyB0aGVuCisJaWYgdGVzdCAiJGRsb3Blbl9zdXBwb3J0IiA9IHVua25vd24gJiYgdGVzdCAiJGRsb3Blbl9zZWxmIiA9IHVua25vd24gJiYKKwkgICB0ZXN0ICIkZGxvcGVuX3NlbGZfc3RhdGljIiA9IHVua25vd247IHRoZW4KKwkgICRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgQUNfTElCVE9PTF9ETE9QRU4nIG5vdCB1c2VkLiBBc3N1bWluZyBubyBkbG9wZW4gc3VwcG9ydC4iCisJZmkKKyAgICAgIGZpCisKKyAgICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgICotKi1yaGFwc29keSogfCAqLSotZGFyd2luMS5bMDEyXSkKKwkjIE9uIFJoYXBzb2R5IHJlcGxhY2UgdGhlIEMgbGlicmFyeSBpcyB0aGUgU3lzdGVtIGZyYW1ld29yaworCWNvbXBpbGVfZGVwbGlicz1gJGVjaG8gIlggJGNvbXBpbGVfZGVwbGlicyIgfCAkWHNlZCAtZSAncy8gLWxjIC8gLWZyYW1ld29yayBTeXN0ZW0gLydgCisJZmluYWxpemVfZGVwbGlicz1gJGVjaG8gIlggJGZpbmFsaXplX2RlcGxpYnMiIHwgJFhzZWQgLWUgJ3MvIC1sYyAvIC1mcmFtZXdvcmsgU3lzdGVtIC8nYAorCTs7CisgICAgICBlc2FjCisKKyAgICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgICpkYXJ3aW4qKQorICAgICAgICAjIERvbid0IGFsbG93IGxhenkgbGlua2luZywgaXQgYnJlYWtzIEMrKyBnbG9iYWwgY29uc3RydWN0b3JzCisgICAgICAgIGlmIHRlc3QgIiR0YWduYW1lIiA9IENYWCA7IHRoZW4KKyAgICAgICAgY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kICR7d2x9LWJpbmRfYXRfbG9hZCIKKyAgICAgICAgZmluYWxpemVfY29tbWFuZD0iJGZpbmFsaXplX2NvbW1hbmQgJHt3bH0tYmluZF9hdF9sb2FkIgorICAgICAgICBmaQorICAgICAgICA7OworICAgICAgZXNhYworCisKKyAgICAgICMgbW92ZSBsaWJyYXJ5IHNlYXJjaCBwYXRocyB0aGF0IGNvaW5jaWRlIHdpdGggcGF0aHMgdG8gbm90IHlldAorICAgICAgIyBpbnN0YWxsZWQgbGlicmFyaWVzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpYnJhcnkgc2VhcmNoIGxpc3QKKyAgICAgIG5ld19saWJzPQorICAgICAgZm9yIHBhdGggaW4gJG5vdGluc3RfcGF0aDsgZG8KKwljYXNlICIgJG5ld19saWJzICIgaW4KKwkqIiAtTCRwYXRoLyRvYmpkaXIgIiopIDs7CisJKikKKwkgIGNhc2UgIiAkY29tcGlsZV9kZXBsaWJzICIgaW4KKwkgICoiIC1MJHBhdGgvJG9iamRpciAiKikKKwkgICAgbmV3X2xpYnM9IiRuZXdfbGlicyAtTCRwYXRoLyRvYmpkaXIiIDs7CisJICBlc2FjCisJICA7OworCWVzYWMKKyAgICAgIGRvbmUKKyAgICAgIGZvciBkZXBsaWIgaW4gJGNvbXBpbGVfZGVwbGliczsgZG8KKwljYXNlICRkZXBsaWIgaW4KKwktTCopCisJICBjYXNlICIgJG5ld19saWJzICIgaW4KKwkgICoiICRkZXBsaWIgIiopIDs7CisJICAqKSBuZXdfbGlicz0iJG5ld19saWJzICRkZXBsaWIiIDs7CisJICBlc2FjCisJICA7OworCSopIG5ld19saWJzPSIkbmV3X2xpYnMgJGRlcGxpYiIgOzsKKwllc2FjCisgICAgICBkb25lCisgICAgICBjb21waWxlX2RlcGxpYnM9IiRuZXdfbGlicyIKKworCisgICAgICBjb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgJGNvbXBpbGVfZGVwbGlicyIKKyAgICAgIGZpbmFsaXplX2NvbW1hbmQ9IiRmaW5hbGl6ZV9jb21tYW5kICRmaW5hbGl6ZV9kZXBsaWJzIgorCisgICAgICBpZiB0ZXN0IC1uICIkcnBhdGgkeHJwYXRoIjsgdGhlbgorCSMgSWYgdGhlIHVzZXIgc3BlY2lmaWVkIGFueSBycGF0aCBmbGFncywgdGhlbiBhZGQgdGhlbS4KKwlmb3IgbGliZGlyIGluICRycGF0aCAkeHJwYXRoOyBkbworCSAgIyBUaGlzIGlzIHRoZSBtYWdpYyB0byB1c2UgLXJwYXRoLgorCSAgY2FzZSAiJGZpbmFsaXplX3JwYXRoICIgaW4KKwkgICoiICRsaWJkaXIgIiopIDs7CisJICAqKSBmaW5hbGl6ZV9ycGF0aD0iJGZpbmFsaXplX3JwYXRoICRsaWJkaXIiIDs7CisJICBlc2FjCisJZG9uZQorICAgICAgZmkKKworICAgICAgIyBOb3cgaGFyZGNvZGUgdGhlIGxpYnJhcnkgcGF0aHMKKyAgICAgIHJwYXRoPQorICAgICAgaGFyZGNvZGVfbGliZGlycz0KKyAgICAgIGZvciBsaWJkaXIgaW4gJGNvbXBpbGVfcnBhdGggJGZpbmFsaXplX3JwYXRoOyBkbworCWlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgorCSAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisJICAgIGlmIHRlc3QgLXogIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorCSAgICAgIGhhcmRjb2RlX2xpYmRpcnM9IiRsaWJkaXIiCisJICAgIGVsc2UKKwkgICAgICAjIEp1c3QgYWNjdW11bGF0ZSB0aGUgdW5pcXVlIGxpYmRpcnMuCisJICAgICAgY2FzZSAkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgaW4KKwkgICAgICAqIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiopCisJCTs7CisJICAgICAgKikKKwkJaGFyZGNvZGVfbGliZGlycz0iJGhhcmRjb2RlX2xpYmRpcnMkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIiCisJCTs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgZWxzZQorCSAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisJICAgIHJwYXRoPSIkcnBhdGggJGZsYWciCisJICBmaQorCWVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorCSAgY2FzZSAiJHBlcm1fcnBhdGggIiBpbgorCSAgKiIgJGxpYmRpciAiKikgOzsKKwkgICopIHBlcm1fcnBhdGg9IiRwZXJtX3JwYXRoICRsaWJkaXIiIDs7CisJICBlc2FjCisJZmkKKwljYXNlICRob3N0IGluCisJKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiopCisJICB0ZXN0YmluZGlyPWAkZWNobyAiWCRsaWJkaXIiIHwgJFhzZWQgLWUgJ3MqL2xpYiQqL2JpbionYAorCSAgY2FzZSA6JGRsbHNlYXJjaHBhdGg6IGluCisJICAqIjokbGliZGlyOiIqKSA7OworCSAgKikgZGxsc2VhcmNocGF0aD0iJGRsbHNlYXJjaHBhdGg6JGxpYmRpciI7OworCSAgZXNhYworCSAgY2FzZSA6JGRsbHNlYXJjaHBhdGg6IGluCisJICAqIjokdGVzdGJpbmRpcjoiKikgOzsKKwkgICopIGRsbHNlYXJjaHBhdGg9IiRkbGxzZWFyY2hwYXRoOiR0ZXN0YmluZGlyIjs7CisJICBlc2FjCisJICA7OworCWVzYWMKKyAgICAgIGRvbmUKKyAgICAgICMgU3Vic3RpdHV0ZSB0aGUgaGFyZGNvZGVkIGxpYmRpcnMgaW50byB0aGUgcnBhdGguCisgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIgJiYKKwkgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisJbGliZGlyPSIkaGFyZGNvZGVfbGliZGlycyIKKwlldmFsIHJwYXRoPVwiICRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKyAgICAgIGZpCisgICAgICBjb21waWxlX3JwYXRoPSIkcnBhdGgiCisKKyAgICAgIHJwYXRoPQorICAgICAgaGFyZGNvZGVfbGliZGlycz0KKyAgICAgIGZvciBsaWJkaXIgaW4gJGZpbmFsaXplX3JwYXRoOyBkbworCWlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgorCSAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisJICAgIGlmIHRlc3QgLXogIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorCSAgICAgIGhhcmRjb2RlX2xpYmRpcnM9IiRsaWJkaXIiCisJICAgIGVsc2UKKwkgICAgICAjIEp1c3QgYWNjdW11bGF0ZSB0aGUgdW5pcXVlIGxpYmRpcnMuCisJICAgICAgY2FzZSAkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgaW4KKwkgICAgICAqIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiopCisJCTs7CisJICAgICAgKikKKwkJaGFyZGNvZGVfbGliZGlycz0iJGhhcmRjb2RlX2xpYmRpcnMkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIiCisJCTs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgZWxzZQorCSAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisJICAgIHJwYXRoPSIkcnBhdGggJGZsYWciCisJICBmaQorCWVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorCSAgY2FzZSAiJGZpbmFsaXplX3Blcm1fcnBhdGggIiBpbgorCSAgKiIgJGxpYmRpciAiKikgOzsKKwkgICopIGZpbmFsaXplX3Blcm1fcnBhdGg9IiRmaW5hbGl6ZV9wZXJtX3JwYXRoICRsaWJkaXIiIDs7CisJICBlc2FjCisJZmkKKyAgICAgIGRvbmUKKyAgICAgICMgU3Vic3RpdHV0ZSB0aGUgaGFyZGNvZGVkIGxpYmRpcnMgaW50byB0aGUgcnBhdGguCisgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIgJiYKKwkgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisJbGliZGlyPSIkaGFyZGNvZGVfbGliZGlycyIKKwlldmFsIHJwYXRoPVwiICRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKyAgICAgIGZpCisgICAgICBmaW5hbGl6ZV9ycGF0aD0iJHJwYXRoIgorCisgICAgICBpZiB0ZXN0IC1uICIkbGlib2JqcyIgJiYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgorCSMgVHJhbnNmb3JtIGFsbCB0aGUgbGlicmFyeSBvYmplY3RzIGludG8gc3RhbmRhcmQgb2JqZWN0cy4KKwljb21waWxlX2NvbW1hbmQ9YCRlY2hvICJYJGNvbXBpbGVfY29tbWFuZCIgfCAkU1AyTkwgfCAkWHNlZCAtZSAiJGxvMm8iIHwgJE5MMlNQYAorCWZpbmFsaXplX2NvbW1hbmQ9YCRlY2hvICJYJGZpbmFsaXplX2NvbW1hbmQiIHwgJFNQMk5MIHwgJFhzZWQgLWUgIiRsbzJvIiB8ICROTDJTUGAKKyAgICAgIGZpCisKKyAgICAgIGRsc3ltcz0KKyAgICAgIGlmIHRlc3QgLW4gIiRkbGZpbGVzJGRscHJlZmlsZXMiIHx8IHRlc3QgIiRkbHNlbGYiICE9IG5vOyB0aGVuCisJaWYgdGVzdCAtbiAiJE5NIiAmJiB0ZXN0IC1uICIkZ2xvYmFsX3N5bWJvbF9waXBlIjsgdGhlbgorCSAgZGxzeW1zPSIke291dHB1dG5hbWV9Uy5jIgorCWVsc2UKKwkgICRlY2hvICIkbW9kZW5hbWU6IG5vdCBjb25maWd1cmVkIHRvIGV4dHJhY3QgZ2xvYmFsIHN5bWJvbHMgZnJvbSBkbHByZW9wZW5lZCBmaWxlcyIgMT4mMgorCWZpCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0IC1uICIkZGxzeW1zIjsgdGhlbgorCWNhc2UgJGRsc3ltcyBpbgorCSIiKSA7OworCSouYykKKwkgICMgRGlzY292ZXIgdGhlIG5saXN0IG9mIGVhY2ggb2YgdGhlIGRsZmlsZXMuCisJICBubGlzdD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfS5ubSIKKworCSAgJHNob3cgIiRybSAkbmxpc3QgJHtubGlzdH1TICR7bmxpc3R9VCIKKwkgICRydW4gJHJtICIkbmxpc3QiICIke25saXN0fVMiICIke25saXN0fVQiCisKKwkgICMgUGFyc2UgdGhlIG5hbWUgbGlzdCBpbnRvIGEgc291cmNlIGZpbGUuCisJICAkc2hvdyAiY3JlYXRpbmcgJG91dHB1dF9vYmpkaXIvJGRsc3ltcyIKKworCSAgdGVzdCAteiAiJHJ1biIgJiYgJGVjaG8gPiAiJG91dHB1dF9vYmpkaXIvJGRsc3ltcyIgIlwKKy8qICRkbHN5bXMgLSBzeW1ib2wgcmVzb2x1dGlvbiB0YWJsZSBmb3IgXGAkb3V0cHV0bmFtZScgZGxzeW0gZW11bGF0aW9uLiAqLworLyogR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIC0gR05VICRQQUNLQUdFICRWRVJTSU9OJFRJTUVTVEFNUCAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiBcIkNcIiB7CisjZW5kaWYKKworLyogUHJldmVudCB0aGUgb25seSBraW5kIG9mIGRlY2xhcmF0aW9uIGNvbmZsaWN0cyB3ZSBjYW4gbWFrZS4gKi8KKyNkZWZpbmUgbHRfcHJlbG9hZGVkX3N5bWJvbHMgc29tZV9vdGhlcl9zeW1ib2wKKworLyogRXh0ZXJuYWwgc3ltYm9sIGRlY2xhcmF0aW9ucyBmb3IgdGhlIGNvbXBpbGVyLiAqL1wKKyIKKworCSAgaWYgdGVzdCAiJGRsc2VsZiIgPSB5ZXM7IHRoZW4KKwkgICAgJHNob3cgImdlbmVyYXRpbmcgc3ltYm9sIGxpc3QgZm9yIFxgJG91dHB1dCciCisKKwkgICAgdGVzdCAteiAiJHJ1biIgJiYgJGVjaG8gJzogQFBST0dSQU1AICcgPiAiJG5saXN0IgorCisJICAgICMgQWRkIG91ciBvd24gcHJvZ3JhbSBvYmplY3RzIHRvIHRoZSBzeW1ib2wgbGlzdC4KKwkgICAgcHJvZ2ZpbGVzPWAkZWNobyAiWCRvYmpzJG9sZF9kZXBsaWJzIiB8ICRTUDJOTCB8ICRYc2VkIC1lICIkbG8ybyIgfCAkTkwyU1BgCisJICAgIGZvciBhcmcgaW4gJHByb2dmaWxlczsgZG8KKwkgICAgICAkc2hvdyAiZXh0cmFjdGluZyBnbG9iYWwgQyBzeW1ib2xzIGZyb20gXGAkYXJnJyIKKwkgICAgICAkcnVuIGV2YWwgIiROTSAkYXJnIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSA+PiAnJG5saXN0JyIKKwkgICAgZG9uZQorCisJICAgIGlmIHRlc3QgLW4gIiRleGNsdWRlX2V4cHN5bXMiOyB0aGVuCisJICAgICAgJHJ1biBldmFsICckRUdSRVAgLXYgIiAoJGV4Y2x1ZGVfZXhwc3ltcykkIiAiJG5saXN0IiA+ICIkbmxpc3QiVCcKKwkgICAgICAkcnVuIGV2YWwgJyRtdiAiJG5saXN0IlQgIiRubGlzdCInCisJICAgIGZpCisKKwkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IjsgdGhlbgorCSAgICAgICRydW4gZXZhbCAnJEVHUkVQIC1lICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICIkbmxpc3QiID4gIiRubGlzdCJUJworCSAgICAgICRydW4gZXZhbCAnJG12ICIkbmxpc3QiVCAiJG5saXN0IicKKwkgICAgZmkKKworCSAgICAjIFByZXBhcmUgdGhlIGxpc3Qgb2YgZXhwb3J0ZWQgc3ltYm9scworCSAgICBpZiB0ZXN0IC16ICIkZXhwb3J0X3N5bWJvbHMiOyB0aGVuCisJICAgICAgZXhwb3J0X3N5bWJvbHM9IiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmV4cCIKKwkgICAgICAkcnVuICRybSAkZXhwb3J0X3N5bWJvbHMKKwkgICAgICAkcnVuIGV2YWwgIiR7U0VEfSAtbiAtZSAnL146IEBQUk9HUkFNQCAkL2QnIC1lICdzL14uKiBcKC4qXCkkL1wxL3AnICInPCAiJG5saXN0IiA+ICIkZXhwb3J0X3N5bWJvbHMiJworICAgICAgICAgICAgICBjYXNlICRob3N0IGluCisgICAgICAgICAgICAgICpjeWd3aW4qIHwgKm1pbmd3KiApCisJICAgICAgICAkcnVuIGV2YWwgImVjaG8gRVhQT1JUUyAiJz4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiInCisJCSRydW4gZXZhbCAnY2F0ICIkZXhwb3J0X3N5bWJvbHMiID4+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiJworICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgIGVzYWMKKwkgICAgZWxzZQorCSAgICAgICRydW4gZXZhbCAiJHtTRUR9IC1lICdzL1woW10uWypeJF1cKS9cXFxcXDEvZycgLWUgJ3MvXi8gLycgLWUgJ3MvJC8kLyciJyA8ICIkZXhwb3J0X3N5bWJvbHMiID4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmV4cCInCisJICAgICAgJHJ1biBldmFsICdncmVwIC1mICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5leHAiIDwgIiRubGlzdCIgPiAiJG5saXN0IlQnCisJICAgICAgJHJ1biBldmFsICdtdiAiJG5saXN0IlQgIiRubGlzdCInCisgICAgICAgICAgICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgICAgICAgICAgKmN5Z3dpbiogfCAqbWluZ3cqICkKKwkgICAgICAgICRydW4gZXZhbCAiZWNobyBFWFBPUlRTICInPiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIicKKwkJJHJ1biBldmFsICdjYXQgIiRubGlzdCIgPj4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiInCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgZXNhYworCSAgICBmaQorCSAgZmkKKworCSAgZm9yIGFyZyBpbiAkZGxwcmVmaWxlczsgZG8KKwkgICAgJHNob3cgImV4dHJhY3RpbmcgZ2xvYmFsIEMgc3ltYm9scyBmcm9tIFxgJGFyZyciCisJICAgIG5hbWU9YCRlY2hvICIkYXJnIiB8ICR7U0VEfSAtZSAncyVeLiovJSUnYAorCSAgICAkcnVuIGV2YWwgJyRlY2hvICI6ICRuYW1lICIgPj4gIiRubGlzdCInCisJICAgICRydW4gZXZhbCAiJE5NICRhcmcgfCAkZ2xvYmFsX3N5bWJvbF9waXBlID4+ICckbmxpc3QnIgorCSAgZG9uZQorCisJICBpZiB0ZXN0IC16ICIkcnVuIjsgdGhlbgorCSAgICAjIE1ha2Ugc3VyZSB3ZSBoYXZlIGF0IGxlYXN0IGFuIGVtcHR5IGZpbGUuCisJICAgIHRlc3QgLWYgIiRubGlzdCIgfHwgOiA+ICIkbmxpc3QiCisKKwkgICAgaWYgdGVzdCAtbiAiJGV4Y2x1ZGVfZXhwc3ltcyI7IHRoZW4KKwkgICAgICAkRUdSRVAgLXYgIiAoJGV4Y2x1ZGVfZXhwc3ltcykkIiAiJG5saXN0IiA+ICIkbmxpc3QiVAorCSAgICAgICRtdiAiJG5saXN0IlQgIiRubGlzdCIKKwkgICAgZmkKKworCSAgICAjIFRyeSBzb3J0aW5nIGFuZCB1bmlxdWlmeWluZyB0aGUgb3V0cHV0LgorCSAgICBpZiBncmVwIC12ICJeOiAiIDwgIiRubGlzdCIgfAorCQlpZiBzb3J0IC1rIDMgPC9kZXYvbnVsbCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkJICBzb3J0IC1rIDMKKwkJZWxzZQorCQkgIHNvcnQgKzIKKwkJZmkgfAorCQl1bmlxID4gIiRubGlzdCJTOyB0aGVuCisJICAgICAgOgorCSAgICBlbHNlCisJICAgICAgZ3JlcCAtdiAiXjogIiA8ICIkbmxpc3QiID4gIiRubGlzdCJTCisJICAgIGZpCisKKwkgICAgaWYgdGVzdCAtZiAiJG5saXN0IlM7IHRoZW4KKwkgICAgICBldmFsICIkZ2xvYmFsX3N5bWJvbF90b19jZGVjbCInIDwgIiRubGlzdCJTID4+ICIkb3V0cHV0X29iamRpci8kZGxzeW1zIicKKwkgICAgZWxzZQorCSAgICAgICRlY2hvICcvKiBOT05FICovJyA+PiAiJG91dHB1dF9vYmpkaXIvJGRsc3ltcyIKKwkgICAgZmkKKworCSAgICAkZWNobyA+PiAiJG91dHB1dF9vYmpkaXIvJGRsc3ltcyIgIlwKKworI3VuZGVmIGx0X3ByZWxvYWRlZF9zeW1ib2xzCisKKyNpZiBkZWZpbmVkIChfX1NURENfXykgJiYgX19TVERDX18KKyMgZGVmaW5lIGx0X3B0ciB2b2lkICoKKyNlbHNlCisjIGRlZmluZSBsdF9wdHIgY2hhciAqCisjIGRlZmluZSBjb25zdAorI2VuZGlmCisKKy8qIFRoZSBtYXBwaW5nIGJldHdlZW4gc3ltYm9sIG5hbWVzIGFuZCBzeW1ib2xzLiAqLworIgorCisJICAgIGNhc2UgJGhvc3QgaW4KKwkgICAgKmN5Z3dpbiogfCAqbWluZ3cqICkKKwkgICRlY2hvID4+ICIkb3V0cHV0X29iamRpci8kZGxzeW1zIiAiXAorLyogREFUQSBpbXBvcnRzIGZyb20gRExMcyBvbiBXSU4zMiBjYW4ndCBiZSBjb25zdCwgYmVjYXVzZQorICAgcnVudGltZSByZWxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIC0tIHNlZSBsZCdzIGRvY3VtZW50YXRpb24KKyAgIG9uIHBzZXVkby1yZWxvY3MgKi8KK3N0cnVjdCB7CisiCisJICAgICAgOzsKKwkgICAgKiApCisJICAkZWNobyA+PiAiJG91dHB1dF9vYmpkaXIvJGRsc3ltcyIgIlwKK2NvbnN0IHN0cnVjdCB7CisiCisJICAgICAgOzsKKwkgICAgZXNhYworCisKKwkgICRlY2hvID4+ICIkb3V0cHV0X29iamRpci8kZGxzeW1zIiAiXAorICBjb25zdCBjaGFyICpuYW1lOworICBsdF9wdHIgYWRkcmVzczsKK30KK2x0X3ByZWxvYWRlZF9zeW1ib2xzW10gPQore1wKKyIKKworCSAgICBldmFsICIkZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyIgPCAiJG5saXN0IiA+PiAiJG91dHB1dF9vYmpkaXIvJGRsc3ltcyIKKworCSAgICAkZWNobyA+PiAiJG91dHB1dF9vYmpkaXIvJGRsc3ltcyIgIlwKKyAgezAsIChsdF9wdHIpIDB9Cit9OworCisvKiBUaGlzIHdvcmtzIGFyb3VuZCBhIHByb2JsZW0gaW4gRnJlZUJTRCBsaW5rZXIgKi8KKyNpZmRlZiBGUkVFQlNEX1dPUktBUk9VTkQKK3N0YXRpYyBjb25zdCB2b2lkICpsdF9wcmVsb2FkZWRfc2V0dXAoKSB7CisgIHJldHVybiBsdF9wcmVsb2FkZWRfc3ltYm9sczsKK30KKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZlwKKyIKKwkgIGZpCisKKwkgIHBpY19mbGFnX2Zvcl9zeW10YWJsZT0KKwkgIGNhc2UgJGhvc3QgaW4KKwkgICMgY29tcGlsaW5nIHRoZSBzeW1ib2wgdGFibGUgZmlsZSB3aXRoIHBpY19mbGFnIHdvcmtzIGFyb3VuZAorCSAgIyBhIEZyZWVCU0QgYnVnIHRoYXQgY2F1c2VzIHByb2dyYW1zIHRvIGNyYXNoIHdoZW4gLWxtIGlzCisJICAjIGxpbmtlZCBiZWZvcmUgYW55IG90aGVyIFBJQyBvYmplY3QuICBCdXQgd2UgbXVzdCBub3QgdXNlCisJICAjIHBpY19mbGFnIHdoZW4gbGlua2luZyB3aXRoIC1zdGF0aWMuICBUaGUgcHJvYmxlbSBleGlzdHMgaW4KKwkgICMgRnJlZUJTRCAyLjIuNiBhbmQgaXMgZml4ZWQgaW4gRnJlZUJTRCAzLjEuCisJICAqLSotZnJlZWJzZDIqfCotKi1mcmVlYnNkMy4wKnwqLSotZnJlZWJzZGVsZjMuMCopCisJICAgIGNhc2UgIiRjb21waWxlX2NvbW1hbmQgIiBpbgorCSAgICAqIiAtc3RhdGljICIqKSA7OworCSAgICAqKSBwaWNfZmxhZ19mb3Jfc3ltdGFibGU9IiAkcGljX2ZsYWcgLURGUkVFQlNEX1dPUktBUk9VTkQiOzsKKwkgICAgZXNhYzs7CisJICAqLSotaHB1eCopCisJICAgIGNhc2UgIiRjb21waWxlX2NvbW1hbmQgIiBpbgorCSAgICAqIiAtc3RhdGljICIqKSA7OworCSAgICAqKSBwaWNfZmxhZ19mb3Jfc3ltdGFibGU9IiAkcGljX2ZsYWciOzsKKwkgICAgZXNhYworCSAgZXNhYworCisJICAjIE5vdyBjb21waWxlIHRoZSBkeW5hbWljIHN5bWJvbCBmaWxlLgorCSAgJHNob3cgIihjZCAkb3V0cHV0X29iamRpciAmJiAkTFRDQyAgJExUQ0ZMQUdTIC1jJG5vX2J1aWx0aW5fZmxhZyRwaWNfZmxhZ19mb3Jfc3ltdGFibGUgXCIkZGxzeW1zXCIpIgorCSAgJHJ1biBldmFsICcoY2QgJG91dHB1dF9vYmpkaXIgJiYgJExUQ0MgICRMVENGTEFHUyAtYyRub19idWlsdGluX2ZsYWckcGljX2ZsYWdfZm9yX3N5bXRhYmxlICIkZGxzeW1zIiknIHx8IGV4aXQgJD8KKworCSAgIyBDbGVhbiB1cCB0aGUgZ2VuZXJhdGVkIGZpbGVzLgorCSAgJHNob3cgIiRybSAkb3V0cHV0X29iamRpci8kZGxzeW1zICRubGlzdCAke25saXN0fVMgJHtubGlzdH1UIgorCSAgJHJ1biAkcm0gIiRvdXRwdXRfb2JqZGlyLyRkbHN5bXMiICIkbmxpc3QiICIke25saXN0fVMiICIke25saXN0fVQiCisKKwkgICMgVHJhbnNmb3JtIHRoZSBzeW1ib2wgZmlsZSBpbnRvIHRoZSBjb3JyZWN0IG5hbWUuCisgICAgICAgICAgY2FzZSAkaG9zdCBpbgorICAgICAgICAgICpjeWd3aW4qIHwgKm1pbmd3KiApCisgICAgICAgICAgICBpZiB0ZXN0IC1mICIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9LmRlZiIgOyB0aGVuCisgICAgICAgICAgICAgIGNvbXBpbGVfY29tbWFuZD1gJGVjaG8gIlgkY29tcGlsZV9jb21tYW5kIiB8ICRTUDJOTCB8ICRYc2VkIC1lICJzJUBTWU1GSUxFQCUkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9LmRlZiAkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9Uy4ke29iamV4dH0lIiB8ICROTDJTUGAKKyAgICAgICAgICAgICAgZmluYWxpemVfY29tbWFuZD1gJGVjaG8gIlgkZmluYWxpemVfY29tbWFuZCIgfCAkU1AyTkwgfCAkWHNlZCAtZSAicyVAU1lNRklMRUAlJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfS5kZWYgJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfVMuJHtvYmpleHR9JSIgfCAkTkwyU1BgCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIGNvbXBpbGVfY29tbWFuZD1gJGVjaG8gIlgkY29tcGlsZV9jb21tYW5kIiB8ICRTUDJOTCB8ICRYc2VkIC1lICJzJUBTWU1GSUxFQCUkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9Uy4ke29iamV4dH0lIiB8ICROTDJTUGAKKyAgICAgICAgICAgICAgZmluYWxpemVfY29tbWFuZD1gJGVjaG8gIlgkZmluYWxpemVfY29tbWFuZCIgfCAkU1AyTkwgfCAkWHNlZCAtZSAicyVAU1lNRklMRUAlJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfVMuJHtvYmpleHR9JSIgfCAkTkwyU1BgCisgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIDs7CisgICAgICAgICAgKiApCisgICAgICAgICAgICBjb21waWxlX2NvbW1hbmQ9YCRlY2hvICJYJGNvbXBpbGVfY29tbWFuZCIgfCAkU1AyTkwgfCAkWHNlZCAtZSAicyVAU1lNRklMRUAlJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfVMuJHtvYmpleHR9JSIgfCAkTkwyU1BgCisgICAgICAgICAgICBmaW5hbGl6ZV9jb21tYW5kPWAkZWNobyAiWCRmaW5hbGl6ZV9jb21tYW5kIiB8ICRTUDJOTCB8ICRYc2VkIC1lICJzJUBTWU1GSUxFQCUkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9Uy4ke29iamV4dH0lIiB8ICROTDJTUGAKKyAgICAgICAgICAgIDs7CisgICAgICAgICAgZXNhYworCSAgOzsKKwkqKQorCSAgJGVjaG8gIiRtb2RlbmFtZTogdW5rbm93biBzdWZmaXggZm9yIFxgJGRsc3ltcyciIDE+JjIKKwkgIGV4aXQgJEVYSVRfRkFJTFVSRQorCSAgOzsKKwllc2FjCisgICAgICBlbHNlCisJIyBXZSBrZWVwIGdvaW5nIGp1c3QgaW4gY2FzZSB0aGUgdXNlciBkaWRuJ3QgcmVmZXIgdG8KKwkjIGx0X3ByZWxvYWRlZF9zeW1ib2xzLiAgVGhlIGxpbmtlciB3aWxsIGZhaWwgaWYgZ2xvYmFsX3N5bWJvbF9waXBlCisJIyByZWFsbHkgd2FzIHJlcXVpcmVkLgorCisJIyBOdWxsaWZ5IHRoZSBzeW1ib2wgZmlsZS4KKwljb21waWxlX2NvbW1hbmQ9YCRlY2hvICJYJGNvbXBpbGVfY29tbWFuZCIgfCAkU1AyTkwgfCAkWHNlZCAtZSAicyUgQFNZTUZJTEVAJSUiIHwgJE5MMlNQYAorCWZpbmFsaXplX2NvbW1hbmQ9YCRlY2hvICJYJGZpbmFsaXplX2NvbW1hbmQiIHwgJFNQMk5MIHwgJFhzZWQgLWUgInMlIEBTWU1GSUxFQCUlIiB8ICROTDJTUGAKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgIiRuZWVkX3JlbGluayIgPSBubyB8fCB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXM7IHRoZW4KKwkjIFJlcGxhY2UgdGhlIG91dHB1dCBmaWxlIHNwZWNpZmljYXRpb24uCisJY29tcGlsZV9jb21tYW5kPWAkZWNobyAiWCRjb21waWxlX2NvbW1hbmQiIHwgJFNQMk5MIHwgJFhzZWQgLWUgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0IiclZycgfCAkTkwyU1BgCisJbGlua19jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgiCisKKwkjIFdlIGhhdmUgbm8gdW5pbnN0YWxsZWQgbGlicmFyeSBkZXBlbmRlbmNpZXMsIHNvIGZpbmFsaXplIHJpZ2h0IG5vdy4KKwkkc2hvdyAiJGxpbmtfY29tbWFuZCIKKwkkcnVuIGV2YWwgIiRsaW5rX2NvbW1hbmQiCisJZXhpdF9zdGF0dXM9JD8KKworCSMgRGVsZXRlIHRoZSBnZW5lcmF0ZWQgZmlsZXMuCisJaWYgdGVzdCAtbiAiJGRsc3ltcyI7IHRoZW4KKwkgICRzaG93ICIkcm0gJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfVMuJHtvYmpleHR9IgorCSAgJHJ1biAkcm0gIiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX1TLiR7b2JqZXh0fSIKKwlmaQorCisJZXhpdCAkZXhpdF9zdGF0dXMKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgorCSMgV2Ugc2hvdWxkIHNldCB0aGUgc2hsaWJwYXRoX3ZhcgorCXJwYXRoPQorCWZvciBkaXIgaW4gJHRlbXBfcnBhdGg7IGRvCisJICBjYXNlICRkaXIgaW4KKwkgIFtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikKKwkgICAgIyBBYnNvbHV0ZSBwYXRoLgorCSAgICBycGF0aD0iJHJwYXRoJGRpcjoiCisJICAgIDs7CisJICAqKQorCSAgICAjIFJlbGF0aXZlIHBhdGg6IGFkZCBhIHRoaXNkaXIgZW50cnkuCisJICAgIHJwYXRoPSIkcnBhdGhcJHRoaXNkaXIvJGRpcjoiCisJICAgIDs7CisJICBlc2FjCisJZG9uZQorCXRlbXBfcnBhdGg9IiRycGF0aCIKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgLW4gIiRjb21waWxlX3NobGlicGF0aCRmaW5hbGl6ZV9zaGxpYnBhdGgiOyB0aGVuCisJY29tcGlsZV9jb21tYW5kPSIkc2hsaWJwYXRoX3Zhcj1cIiRjb21waWxlX3NobGlicGF0aCRmaW5hbGl6ZV9zaGxpYnBhdGhcJCRzaGxpYnBhdGhfdmFyXCIgJGNvbXBpbGVfY29tbWFuZCIKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0IC1uICIkZmluYWxpemVfc2hsaWJwYXRoIjsgdGhlbgorCWZpbmFsaXplX2NvbW1hbmQ9IiRzaGxpYnBhdGhfdmFyPVwiJGZpbmFsaXplX3NobGlicGF0aFwkJHNobGlicGF0aF92YXJcIiAkZmluYWxpemVfY29tbWFuZCIKKyAgICAgIGZpCisKKyAgICAgIGNvbXBpbGVfdmFyPQorICAgICAgZmluYWxpemVfdmFyPQorICAgICAgaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorCWlmIHRlc3QgLW4gIiRwZXJtX3JwYXRoIjsgdGhlbgorCSAgIyBXZSBzaG91bGQgc2V0IHRoZSBydW5wYXRoX3Zhci4KKwkgIHJwYXRoPQorCSAgZm9yIGRpciBpbiAkcGVybV9ycGF0aDsgZG8KKwkgICAgcnBhdGg9IiRycGF0aCRkaXI6IgorCSAgZG9uZQorCSAgY29tcGlsZV92YXI9IiRydW5wYXRoX3Zhcj1cIiRycGF0aFwkJHJ1bnBhdGhfdmFyXCIgIgorCWZpCisJaWYgdGVzdCAtbiAiJGZpbmFsaXplX3Blcm1fcnBhdGgiOyB0aGVuCisJICAjIFdlIHNob3VsZCBzZXQgdGhlIHJ1bnBhdGhfdmFyLgorCSAgcnBhdGg9CisJICBmb3IgZGlyIGluICRmaW5hbGl6ZV9wZXJtX3JwYXRoOyBkbworCSAgICBycGF0aD0iJHJwYXRoJGRpcjoiCisJICBkb25lCisJICBmaW5hbGl6ZV92YXI9IiRydW5wYXRoX3Zhcj1cIiRycGF0aFwkJHJ1bnBhdGhfdmFyXCIgIgorCWZpCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0ICIkbm9faW5zdGFsbCIgPSB5ZXM7IHRoZW4KKwkjIFdlIGRvbid0IG5lZWQgdG8gY3JlYXRlIGEgd3JhcHBlciBzY3JpcHQuCisJbGlua19jb21tYW5kPSIkY29tcGlsZV92YXIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgiCisJIyBSZXBsYWNlIHRoZSBvdXRwdXQgZmlsZSBzcGVjaWZpY2F0aW9uLgorCWxpbmtfY29tbWFuZD1gJGVjaG8gIlgkbGlua19jb21tYW5kIiB8ICRYc2VkIC1lICdzJUBPVVRQVVRAJSciJG91dHB1dCInJWcnYAorCSMgRGVsZXRlIHRoZSBvbGQgb3V0cHV0IGZpbGUuCisJJHJ1biAkcm0gJG91dHB1dAorCSMgTGluayB0aGUgZXhlY3V0YWJsZSBhbmQgZXhpdAorCSRzaG93ICIkbGlua19jb21tYW5kIgorCSRydW4gZXZhbCAiJGxpbmtfY29tbWFuZCIgfHwgZXhpdCAkPworCWV4aXQgJEVYSVRfU1VDQ0VTUworICAgICAgZmkKKworICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2FjdGlvbiIgPSByZWxpbms7IHRoZW4KKwkjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQKKwlsaW5rX2NvbW1hbmQ9IiRjb21waWxlX3ZhciRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aCIKKwlyZWxpbmtfY29tbWFuZD0iJGZpbmFsaXplX3ZhciRmaW5hbGl6ZV9jb21tYW5kJGZpbmFsaXplX3JwYXRoIgorCisJJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogdGhpcyBwbGF0Zm9ybSBkb2VzIG5vdCBsaWtlIHVuaW5zdGFsbGVkIHNoYXJlZCBsaWJyYXJpZXMiIDE+JjIKKwkkZWNobyAiJG1vZGVuYW1lOiBcYCRvdXRwdXQnIHdpbGwgYmUgcmVsaW5rZWQgZHVyaW5nIGluc3RhbGxhdGlvbiIgMT4mMgorICAgICAgZWxzZQorCWlmIHRlc3QgIiRmYXN0X2luc3RhbGwiICE9IG5vOyB0aGVuCisJICBsaW5rX2NvbW1hbmQ9IiRmaW5hbGl6ZV92YXIkY29tcGlsZV9jb21tYW5kJGZpbmFsaXplX3JwYXRoIgorCSAgaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgPSB5ZXM7IHRoZW4KKwkgICAgcmVsaW5rX2NvbW1hbmQ9YCRlY2hvICJYJGNvbXBpbGVfdmFyJGNvbXBpbGVfY29tbWFuZCRjb21waWxlX3JwYXRoIiB8ICRTUDJOTCB8ICRYc2VkIC1lICdzJUBPVVRQVVRAJVwkcHJvZ2Rpci9cJGZpbGUlZycgfCAkTkwyU1BgCisJICBlbHNlCisJICAgICMgZmFzdF9pbnN0YWxsIGlzIHNldCB0byBuZWVkbGVzcworCSAgICByZWxpbmtfY29tbWFuZD0KKwkgIGZpCisJZWxzZQorCSAgbGlua19jb21tYW5kPSIkY29tcGlsZV92YXIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgiCisJICByZWxpbmtfY29tbWFuZD0iJGZpbmFsaXplX3ZhciRmaW5hbGl6ZV9jb21tYW5kJGZpbmFsaXplX3JwYXRoIgorCWZpCisgICAgICBmaQorCisgICAgICAjIFJlcGxhY2UgdGhlIG91dHB1dCBmaWxlIHNwZWNpZmljYXRpb24uCisgICAgICBsaW5rX2NvbW1hbmQ9YCRlY2hvICJYJGxpbmtfY29tbWFuZCIgfCAkWHNlZCAtZSAncyVAT1VUUFVUQCUnIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lIiclZydgCisKKyAgICAgICMgRGVsZXRlIHRoZSBvbGQgb3V0cHV0IGZpbGVzLgorICAgICAgJHJ1biAkcm0gJG91dHB1dCAkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSAkb3V0cHV0X29iamRpci9sdC0kb3V0cHV0bmFtZQorCisgICAgICAkc2hvdyAiJGxpbmtfY29tbWFuZCIKKyAgICAgICRydW4gZXZhbCAiJGxpbmtfY29tbWFuZCIgfHwgZXhpdCAkPworCisgICAgICAjIE5vdyBjcmVhdGUgdGhlIHdyYXBwZXIgc2NyaXB0LgorICAgICAgJHNob3cgImNyZWF0aW5nICRvdXRwdXQiCisKKyAgICAgICMgUXVvdGUgdGhlIHJlbGluayBjb21tYW5kIGZvciBzaGlwcGluZy4KKyAgICAgIGlmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KKwkjIFByZXNlcnZlIGFueSB2YXJpYWJsZXMgdGhhdCBtYXkgYWZmZWN0IGNvbXBpbGVyIGJlaGF2aW9yCisJZm9yIHZhciBpbiAkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms7IGRvCisJICBpZiBldmFsIHRlc3QgLXogXCJcJHskdmFyK3NldH1cIjsgdGhlbgorCSAgICByZWxpbmtfY29tbWFuZD0ieyB0ZXN0IC16IFwiXCR7JHZhcitzZXR9XCIgfHwgdW5zZXQgJHZhciB8fCB7ICR2YXI9OyBleHBvcnQgJHZhcjsgfTsgfTsgJHJlbGlua19jb21tYW5kIgorCSAgZWxpZiBldmFsIHZhcl92YWx1ZT1cJCR2YXI7IHRlc3QgLXogIiR2YXJfdmFsdWUiOyB0aGVuCisJICAgIHJlbGlua19jb21tYW5kPSIkdmFyPTsgZXhwb3J0ICR2YXI7ICRyZWxpbmtfY29tbWFuZCIKKwkgIGVsc2UKKwkgICAgdmFyX3ZhbHVlPWAkZWNobyAiWCR2YXJfdmFsdWUiIHwgJFhzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorCSAgICByZWxpbmtfY29tbWFuZD0iJHZhcj1cIiR2YXJfdmFsdWVcIjsgZXhwb3J0ICR2YXI7ICRyZWxpbmtfY29tbWFuZCIKKwkgIGZpCisJZG9uZQorCXJlbGlua19jb21tYW5kPSIoY2QgYHB3ZGA7ICRyZWxpbmtfY29tbWFuZCkiCisJcmVsaW5rX2NvbW1hbmQ9YCRlY2hvICJYJHJlbGlua19jb21tYW5kIiB8ICRTUDJOTCB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0IiB8ICROTDJTUGAKKyAgICAgIGZpCisKKyAgICAgICMgUXVvdGUgJGVjaG8gZm9yIHNoaXBwaW5nLgorICAgICAgaWYgdGVzdCAiWCRlY2hvIiA9ICJYJFNIRUxMICRwcm9ncGF0aCAtLWZhbGxiYWNrLWVjaG8iOyB0aGVuCisJY2FzZSAkcHJvZ3BhdGggaW4KKwlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIHFlY2hvPSIkU0hFTEwgJHByb2dwYXRoIC0tZmFsbGJhY2stZWNobyI7OworCSopIHFlY2hvPSIkU0hFTEwgYHB3ZGAvJHByb2dwYXRoIC0tZmFsbGJhY2stZWNobyI7OworCWVzYWMKKwlxZWNobz1gJGVjaG8gIlgkcWVjaG8iIHwgJFhzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorICAgICAgZWxzZQorCXFlY2hvPWAkZWNobyAiWCRlY2hvIiB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKyAgICAgIGZpCisKKyAgICAgICMgT25seSBhY3R1YWxseSBkbyB0aGluZ3MgaWYgb3VyIHJ1biBjb21tYW5kIGlzIG5vbi1udWxsLgorICAgICAgaWYgdGVzdCAteiAiJHJ1biI7IHRoZW4KKwkjIHdpbjMyIHdpbGwgdGhpbmsgdGhlIHNjcmlwdCBpcyBhIGJpbmFyeSBpZiBpdCBoYXMKKwkjIGEgLmV4ZSBzdWZmaXgsIHNvIHdlIHN0cmlwIGl0IG9mZiBoZXJlLgorCWNhc2UgJG91dHB1dCBpbgorCSAgKi5leGUpIG91dHB1dD1gJGVjaG8gJG91dHB1dHwke1NFRH0gJ3MsLmV4ZSQsLCdgIDs7CisJZXNhYworCSMgdGVzdCBmb3IgY3lnd2luIGJlY2F1c2UgbXYgZmFpbHMgdy9vIC5leGUgZXh0ZW5zaW9ucworCWNhc2UgJGhvc3QgaW4KKwkgICpjeWd3aW4qKQorCSAgICBleGVleHQ9LmV4ZQorCSAgICBvdXRwdXRuYW1lPWAkZWNobyAkb3V0cHV0bmFtZXwke1NFRH0gJ3MsLmV4ZSQsLCdgIDs7CisJICAqKSBleGVleHQ9IDs7CisJZXNhYworCWNhc2UgJGhvc3QgaW4KKwkgICpjeWd3aW4qIHwgKm1pbmd3KiApCisgICAgICAgICAgICBvdXRwdXRfbmFtZT1gYmFzZW5hbWUgJG91dHB1dGAKKyAgICAgICAgICAgIG91dHB1dF9wYXRoPWBkaXJuYW1lICRvdXRwdXRgCisgICAgICAgICAgICBjd3JhcHBlcnNvdXJjZT0iJG91dHB1dF9wYXRoLyRvYmpkaXIvbHQtJG91dHB1dF9uYW1lLmMiCisgICAgICAgICAgICBjd3JhcHBlcj0iJG91dHB1dF9wYXRoLyRvdXRwdXRfbmFtZS5leGUiCisgICAgICAgICAgICAkcm0gJGN3cmFwcGVyc291cmNlICRjd3JhcHBlcgorICAgICAgICAgICAgdHJhcCAiJHJtICRjd3JhcHBlcnNvdXJjZSAkY3dyYXBwZXI7IGV4aXQgJEVYSVRfRkFJTFVSRSIgMSAyIDE1CisKKwkgICAgY2F0ID4gJGN3cmFwcGVyc291cmNlIDw8RU9GCisKKy8qICRjd3JhcHBlcnNvdXJjZSAtIHRlbXBvcmFyeSB3cmFwcGVyIGV4ZWN1dGFibGUgZm9yICRvYmpkaXIvJG91dHB1dG5hbWUKKyAgIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAtIEdOVSAkUEFDS0FHRSAkVkVSU0lPTiRUSU1FU1RBTVAKKworICAgVGhlICRvdXRwdXQgcHJvZ3JhbSBjYW5ub3QgYmUgZGlyZWN0bHkgZXhlY3V0ZWQgdW50aWwgYWxsIHRoZSBsaWJ0b29sCisgICBsaWJyYXJpZXMgdGhhdCBpdCBkZXBlbmRzIG9uIGFyZSBpbnN0YWxsZWQuCisKKyAgIFRoaXMgd3JhcHBlciBleGVjdXRhYmxlIHNob3VsZCBuZXZlciBiZSBtb3ZlZCBvdXQgb2YgdGhlIGJ1aWxkIGRpcmVjdG9yeS4KKyAgIElmIGl0IGlzLCBpdCB3aWxsIG5vdCBvcGVyYXRlIGNvcnJlY3RseS4KKworICAgQ3VycmVudGx5LCBpdCBzaW1wbHkgZXhlY3MgdGhlIHdyYXBwZXIgKnNjcmlwdCogIi9iaW4vc2ggJG91dHB1dCIsCisgICBidXQgY291bGQgZXZlbnR1YWxseSBhYnNvcmIgYWxsIG9mIHRoZSBzY3JpcHRzIGZ1bmN0aW9uYWxpdHkgYW5kCisgICBleGVjICRvYmpkaXIvJG91dHB1dG5hbWUgZGlyZWN0bHkuCisqLworRU9GCisJICAgIGNhdCA+PiAkY3dyYXBwZXJzb3VyY2U8PCJFT0YiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxtYWxsb2MuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKKyNpZiBkZWZpbmVkKFBBVEhfTUFYKQorIyBkZWZpbmUgTFRfUEFUSE1BWCBQQVRIX01BWAorI2VsaWYgZGVmaW5lZChNQVhQQVRITEVOKQorIyBkZWZpbmUgTFRfUEFUSE1BWCBNQVhQQVRITEVOCisjZWxzZQorIyBkZWZpbmUgTFRfUEFUSE1BWCAxMDI0CisjZW5kaWYKKworI2lmbmRlZiBESVJfU0VQQVJBVE9SCisjIGRlZmluZSBESVJfU0VQQVJBVE9SICcvJworIyBkZWZpbmUgUEFUSF9TRVBBUkFUT1IgJzonCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9XSU4zMikgfHwgZGVmaW5lZCAoX19NU0RPU19fKSB8fCBkZWZpbmVkIChfX0RKR1BQX18pIHx8IFwKKyAgZGVmaW5lZCAoX19PUzJfXykKKyMgZGVmaW5lIEhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNCisjIGlmbmRlZiBESVJfU0VQQVJBVE9SXzIKKyMgIGRlZmluZSBESVJfU0VQQVJBVE9SXzIgJ1xcJworIyBlbmRpZgorIyBpZm5kZWYgUEFUSF9TRVBBUkFUT1JfMgorIyAgZGVmaW5lIFBBVEhfU0VQQVJBVE9SXzIgJzsnCisjIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBESVJfU0VQQVJBVE9SXzIKKyMgZGVmaW5lIElTX0RJUl9TRVBBUkFUT1IoY2gpICgoY2gpID09IERJUl9TRVBBUkFUT1IpCisjZWxzZSAvKiBESVJfU0VQQVJBVE9SXzIgKi8KKyMgZGVmaW5lIElTX0RJUl9TRVBBUkFUT1IoY2gpIFwKKyAgICAgICAgKCgoY2gpID09IERJUl9TRVBBUkFUT1IpIHx8ICgoY2gpID09IERJUl9TRVBBUkFUT1JfMikpCisjZW5kaWYgLyogRElSX1NFUEFSQVRPUl8yICovCisKKyNpZm5kZWYgUEFUSF9TRVBBUkFUT1JfMgorIyBkZWZpbmUgSVNfUEFUSF9TRVBBUkFUT1IoY2gpICgoY2gpID09IFBBVEhfU0VQQVJBVE9SKQorI2Vsc2UgLyogUEFUSF9TRVBBUkFUT1JfMiAqLworIyBkZWZpbmUgSVNfUEFUSF9TRVBBUkFUT1IoY2gpICgoY2gpID09IFBBVEhfU0VQQVJBVE9SXzIpCisjZW5kaWYgLyogUEFUSF9TRVBBUkFUT1JfMiAqLworCisjZGVmaW5lIFhNQUxMT0ModHlwZSwgbnVtKSAgICAgICgodHlwZSAqKSB4bWFsbG9jICgobnVtKSAqIHNpemVvZih0eXBlKSkpCisjZGVmaW5lIFhGUkVFKHN0YWxlKSBkbyB7IFwKKyAgaWYgKHN0YWxlKSB7IGZyZWUgKCh2b2lkICopIHN0YWxlKTsgc3RhbGUgPSAwOyB9IFwKK30gd2hpbGUgKDApCisKKy8qIC1EREVCVUcgaXMgZmFpcmx5IGNvbW1vbiBpbiBDRkxBR1MuICAqLworI3VuZGVmIERFQlVHCisjaWYgZGVmaW5lZCBERUJVR1dSQVBQRVIKKyMgZGVmaW5lIERFQlVHKGZvcm1hdCwgLi4uKSBmcHJpbnRmKHN0ZGVyciwgZm9ybWF0LCBfX1ZBX0FSR1NfXykKKyNlbHNlCisjIGRlZmluZSBERUJVRyhmb3JtYXQsIC4uLikKKyNlbmRpZgorCitjb25zdCBjaGFyICpwcm9ncmFtX25hbWUgPSBOVUxMOworCit2b2lkICogeG1hbGxvYyAoc2l6ZV90IG51bSk7CitjaGFyICogeHN0cmR1cCAoY29uc3QgY2hhciAqc3RyaW5nKTsKK2NvbnN0IGNoYXIgKiBiYXNlX25hbWUgKGNvbnN0IGNoYXIgKm5hbWUpOworY2hhciAqIGZpbmRfZXhlY3V0YWJsZShjb25zdCBjaGFyICp3cmFwcGVyKTsKK2ludCAgICBjaGVja19leGVjdXRhYmxlKGNvbnN0IGNoYXIgKnBhdGgpOworY2hhciAqIHN0cmVuZHphcChjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnBhdCk7Cit2b2lkIGx0X2ZhdGFsIChjb25zdCBjaGFyICptZXNzYWdlLCAuLi4pOworCitpbnQKK21haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgIGNoYXIgKipuZXdhcmd6OworICBpbnQgaTsKKworICBwcm9ncmFtX25hbWUgPSAoY2hhciAqKSB4c3RyZHVwIChiYXNlX25hbWUgKGFyZ3ZbMF0pKTsKKyAgREVCVUcoIihtYWluKSBhcmd2WzBdICAgICAgOiAlc1xuIixhcmd2WzBdKTsKKyAgREVCVUcoIihtYWluKSBwcm9ncmFtX25hbWUgOiAlc1xuIixwcm9ncmFtX25hbWUpOworICBuZXdhcmd6ID0gWE1BTExPQyhjaGFyICosIGFyZ2MrMik7CitFT0YKKworICAgICAgICAgICAgY2F0ID4+ICRjd3JhcHBlcnNvdXJjZSA8PEVPRgorICBuZXdhcmd6WzBdID0gKGNoYXIgKikgeHN0cmR1cCgiJFNIRUxMIik7CitFT0YKKworICAgICAgICAgICAgY2F0ID4+ICRjd3JhcHBlcnNvdXJjZSA8PCJFT0YiCisgIG5ld2FyZ3pbMV0gPSBmaW5kX2V4ZWN1dGFibGUoYXJndlswXSk7CisgIGlmIChuZXdhcmd6WzFdID09IE5VTEwpCisgICAgbHRfZmF0YWwoIkNvdWxkbid0IGZpbmQgJXMiLCBhcmd2WzBdKTsKKyAgREVCVUcoIihtYWluKSBmb3VuZCBleGUgYXQgOiAlc1xuIixuZXdhcmd6WzFdKTsKKyAgLyogd2Uga25vdyB0aGUgc2NyaXB0IGhhcyB0aGUgc2FtZSBuYW1lLCB3aXRob3V0IHRoZSAuZXhlICovCisgIC8qIHNvIG1ha2Ugc3VyZSBuZXdhcmd6WzFdIGRvZXNuJ3QgZW5kIGluIC5leGUgKi8KKyAgc3RyZW5kemFwKG5ld2FyZ3pbMV0sIi5leGUiKTsKKyAgZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykKKyAgICBuZXdhcmd6W2krMV0gPSB4c3RyZHVwKGFyZ3ZbaV0pOworICBuZXdhcmd6W2FyZ2MrMV0gPSBOVUxMOworCisgIGZvciAoaT0wOyBpPGFyZ2MrMTsgaSsrKQorICB7CisgICAgREVCVUcoIihtYWluKSBuZXdhcmd6WyVkXSAgIDogJXNcbiIsaSxuZXdhcmd6W2ldKTsKKyAgICA7CisgIH0KKworRU9GCisKKyAgICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgICAgICAgICAgbWluZ3cqKQorICAgICAgICAgICAgICAgIGNhdCA+PiAkY3dyYXBwZXJzb3VyY2UgPDxFT0YKKyAgZXhlY3YoIiRTSEVMTCIsKGNoYXIgY29uc3QgKiopbmV3YXJneik7CitFT0YKKyAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICBjYXQgPj4gJGN3cmFwcGVyc291cmNlIDw8RU9GCisgIGV4ZWN2KCIkU0hFTEwiLG5ld2FyZ3opOworRU9GCisgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICBlc2FjCisKKyAgICAgICAgICAgIGNhdCA+PiAkY3dyYXBwZXJzb3VyY2UgPDwiRU9GIgorICByZXR1cm4gMTI3OworfQorCit2b2lkICoKK3htYWxsb2MgKHNpemVfdCBudW0pCit7CisgIHZvaWQgKiBwID0gKHZvaWQgKikgbWFsbG9jIChudW0pOworICBpZiAoIXApCisgICAgbHRfZmF0YWwgKCJNZW1vcnkgZXhoYXVzdGVkIik7CisKKyAgcmV0dXJuIHA7Cit9CisKK2NoYXIgKgoreHN0cmR1cCAoY29uc3QgY2hhciAqc3RyaW5nKQoreworICByZXR1cm4gc3RyaW5nID8gc3RyY3B5ICgoY2hhciAqKSB4bWFsbG9jIChzdHJsZW4gKHN0cmluZykgKyAxKSwgc3RyaW5nKSA6IE5VTEwKKzsKK30KKworY29uc3QgY2hhciAqCitiYXNlX25hbWUgKGNvbnN0IGNoYXIgKm5hbWUpCit7CisgIGNvbnN0IGNoYXIgKmJhc2U7CisKKyNpZiBkZWZpbmVkIChIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTSkKKyAgLyogU2tpcCBvdmVyIHRoZSBkaXNrIG5hbWUgaW4gTVNET1MgcGF0aG5hbWVzLiAqLworICBpZiAoaXNhbHBoYSAoKHVuc2lnbmVkIGNoYXIpbmFtZVswXSkgJiYgbmFtZVsxXSA9PSAnOicpCisgICAgbmFtZSArPSAyOworI2VuZGlmCisKKyAgZm9yIChiYXNlID0gbmFtZTsgKm5hbWU7IG5hbWUrKykKKyAgICBpZiAoSVNfRElSX1NFUEFSQVRPUiAoKm5hbWUpKQorICAgICAgYmFzZSA9IG5hbWUgKyAxOworICByZXR1cm4gYmFzZTsKK30KKworaW50CitjaGVja19leGVjdXRhYmxlKGNvbnN0IGNoYXIgKiBwYXRoKQoreworICBzdHJ1Y3Qgc3RhdCBzdDsKKworICBERUJVRygiKGNoZWNrX2V4ZWN1dGFibGUpICA6ICVzXG4iLCBwYXRoID8gKCpwYXRoID8gcGF0aCA6ICJFTVBUWSEiKSA6ICJOVUxMISIpOworICBpZiAoKCFwYXRoKSB8fCAoISpwYXRoKSkKKyAgICByZXR1cm4gMDsKKworICBpZiAoKHN0YXQgKHBhdGgsICZzdCkgPj0gMCkgJiYKKyAgICAgICgKKyAgICAgICAgLyogTWluR1cgJiBuYXRpdmUgV0lOMzIgZG8gbm90IHN1cHBvcnQgU19JWE9USCBvciBTX0lYR1JQICovCisjaWYgZGVmaW5lZCAoU19JWE9USCkKKyAgICAgICAoKHN0LnN0X21vZGUgJiBTX0lYT1RIKSA9PSBTX0lYT1RIKSB8fAorI2VuZGlmCisjaWYgZGVmaW5lZCAoU19JWEdSUCkKKyAgICAgICAoKHN0LnN0X21vZGUgJiBTX0lYR1JQKSA9PSBTX0lYR1JQKSB8fAorI2VuZGlmCisgICAgICAgKChzdC5zdF9tb2RlICYgU19JWFVTUikgPT0gU19JWFVTUikpCisgICAgICApCisgICAgcmV0dXJuIDE7CisgIGVsc2UKKyAgICByZXR1cm4gMDsKK30KKworLyogU2VhcmNoZXMgZm9yIHRoZSBmdWxsIHBhdGggb2YgdGhlIHdyYXBwZXIuICBSZXR1cm5zCisgICBuZXdseSBhbGxvY2F0ZWQgZnVsbCBwYXRoIG5hbWUgaWYgZm91bmQsIE5VTEwgb3RoZXJ3aXNlICovCitjaGFyICoKK2ZpbmRfZXhlY3V0YWJsZSAoY29uc3QgY2hhciogd3JhcHBlcikKK3sKKyAgaW50IGhhc19zbGFzaCA9IDA7CisgIGNvbnN0IGNoYXIqIHA7CisgIGNvbnN0IGNoYXIqIHBfbmV4dDsKKyAgLyogc3RhdGljIGJ1ZmZlciBmb3IgZ2V0Y3dkICovCisgIGNoYXIgdG1wW0xUX1BBVEhNQVggKyAxXTsKKyAgaW50IHRtcF9sZW47CisgIGNoYXIqIGNvbmNhdF9uYW1lOworCisgIERFQlVHKCIoZmluZF9leGVjdXRhYmxlKSAgOiAlc1xuIiwgd3JhcHBlciA/ICgqd3JhcHBlciA/IHdyYXBwZXIgOiAiRU1QVFkhIikgOiAiTlVMTCEiKTsKKworICBpZiAoKHdyYXBwZXIgPT0gTlVMTCkgfHwgKCp3cmFwcGVyID09ICdcMCcpKQorICAgIHJldHVybiBOVUxMOworCisgIC8qIEFic29sdXRlIHBhdGg/ICovCisjaWYgZGVmaW5lZCAoSEFWRV9ET1NfQkFTRURfRklMRV9TWVNURU0pCisgIGlmIChpc2FscGhhICgodW5zaWduZWQgY2hhcil3cmFwcGVyWzBdKSAmJiB3cmFwcGVyWzFdID09ICc6JykKKyAgeworICAgIGNvbmNhdF9uYW1lID0geHN0cmR1cCAod3JhcHBlcik7CisgICAgaWYgKGNoZWNrX2V4ZWN1dGFibGUoY29uY2F0X25hbWUpKQorICAgICAgcmV0dXJuIGNvbmNhdF9uYW1lOworICAgIFhGUkVFKGNvbmNhdF9uYW1lKTsKKyAgfQorICBlbHNlCisgIHsKKyNlbmRpZgorICAgIGlmIChJU19ESVJfU0VQQVJBVE9SICh3cmFwcGVyWzBdKSkKKyAgICB7CisgICAgICBjb25jYXRfbmFtZSA9IHhzdHJkdXAgKHdyYXBwZXIpOworICAgICAgaWYgKGNoZWNrX2V4ZWN1dGFibGUoY29uY2F0X25hbWUpKQorICAgICAgICByZXR1cm4gY29uY2F0X25hbWU7CisgICAgICBYRlJFRShjb25jYXRfbmFtZSk7CisgICAgfQorI2lmIGRlZmluZWQgKEhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNKQorICB9CisjZW5kaWYKKworICBmb3IgKHAgPSB3cmFwcGVyOyAqcDsgcCsrKQorICAgIGlmICgqcCA9PSAnLycpCisgICAgeworICAgICAgaGFzX3NsYXNoID0gMTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgaWYgKCFoYXNfc2xhc2gpCisgIHsKKyAgICAvKiBubyBzbGFzaGVzOyBzZWFyY2ggUEFUSCAqLworICAgIGNvbnN0IGNoYXIqIHBhdGggPSBnZXRlbnYgKCJQQVRIIik7CisgICAgaWYgKHBhdGggIT0gTlVMTCkKKyAgICB7CisgICAgICBmb3IgKHAgPSBwYXRoOyAqcDsgcCA9IHBfbmV4dCkKKyAgICAgIHsKKyAgICAgICAgY29uc3QgY2hhciogcTsKKyAgICAgICAgc2l6ZV90IHBfbGVuOworICAgICAgICBmb3IgKHEgPSBwOyAqcTsgcSsrKQorICAgICAgICAgIGlmIChJU19QQVRIX1NFUEFSQVRPUigqcSkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgcF9sZW4gPSBxIC0gcDsKKyAgICAgICAgcF9uZXh0ID0gKCpxID09ICdcMCcgPyBxIDogcSArIDEpOworICAgICAgICBpZiAocF9sZW4gPT0gMCkKKyAgICAgICAgeworICAgICAgICAgIC8qIGVtcHR5IHBhdGg6IGN1cnJlbnQgZGlyZWN0b3J5ICovCisgICAgICAgICAgaWYgKGdldGN3ZCAodG1wLCBMVF9QQVRITUFYKSA9PSBOVUxMKQorICAgICAgICAgICAgbHRfZmF0YWwgKCJnZXRjd2QgZmFpbGVkIik7CisgICAgICAgICAgdG1wX2xlbiA9IHN0cmxlbih0bXApOworICAgICAgICAgIGNvbmNhdF9uYW1lID0gWE1BTExPQyhjaGFyLCB0bXBfbGVuICsgMSArIHN0cmxlbih3cmFwcGVyKSArIDEpOworICAgICAgICAgIG1lbWNweSAoY29uY2F0X25hbWUsIHRtcCwgdG1wX2xlbik7CisgICAgICAgICAgY29uY2F0X25hbWVbdG1wX2xlbl0gPSAnLyc7CisgICAgICAgICAgc3RyY3B5IChjb25jYXRfbmFtZSArIHRtcF9sZW4gKyAxLCB3cmFwcGVyKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBjb25jYXRfbmFtZSA9IFhNQUxMT0MoY2hhciwgcF9sZW4gKyAxICsgc3RybGVuKHdyYXBwZXIpICsgMSk7CisgICAgICAgICAgbWVtY3B5IChjb25jYXRfbmFtZSwgcCwgcF9sZW4pOworICAgICAgICAgIGNvbmNhdF9uYW1lW3BfbGVuXSA9ICcvJzsKKyAgICAgICAgICBzdHJjcHkgKGNvbmNhdF9uYW1lICsgcF9sZW4gKyAxLCB3cmFwcGVyKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2hlY2tfZXhlY3V0YWJsZShjb25jYXRfbmFtZSkpCisgICAgICAgICAgcmV0dXJuIGNvbmNhdF9uYW1lOworICAgICAgICBYRlJFRShjb25jYXRfbmFtZSk7CisgICAgICB9CisgICAgfQorICAgIC8qIG5vdCBmb3VuZCBpbiBQQVRIOyBhc3N1bWUgY3VyZGlyICovCisgIH0KKyAgLyogUmVsYXRpdmUgcGF0aCB8IG5vdCBmb3VuZCBpbiBwYXRoOiBwcmVwZW5kIGN3ZCAqLworICBpZiAoZ2V0Y3dkICh0bXAsIExUX1BBVEhNQVgpID09IE5VTEwpCisgICAgbHRfZmF0YWwgKCJnZXRjd2QgZmFpbGVkIik7CisgIHRtcF9sZW4gPSBzdHJsZW4odG1wKTsKKyAgY29uY2F0X25hbWUgPSBYTUFMTE9DKGNoYXIsIHRtcF9sZW4gKyAxICsgc3RybGVuKHdyYXBwZXIpICsgMSk7CisgIG1lbWNweSAoY29uY2F0X25hbWUsIHRtcCwgdG1wX2xlbik7CisgIGNvbmNhdF9uYW1lW3RtcF9sZW5dID0gJy8nOworICBzdHJjcHkgKGNvbmNhdF9uYW1lICsgdG1wX2xlbiArIDEsIHdyYXBwZXIpOworCisgIGlmIChjaGVja19leGVjdXRhYmxlKGNvbmNhdF9uYW1lKSkKKyAgICByZXR1cm4gY29uY2F0X25hbWU7CisgIFhGUkVFKGNvbmNhdF9uYW1lKTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKK2NoYXIgKgorc3RyZW5kemFwKGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcGF0KQoreworICBzaXplX3QgbGVuLCBwYXRsZW47CisKKyAgYXNzZXJ0KHN0ciAhPSBOVUxMKTsKKyAgYXNzZXJ0KHBhdCAhPSBOVUxMKTsKKworICBsZW4gPSBzdHJsZW4oc3RyKTsKKyAgcGF0bGVuID0gc3RybGVuKHBhdCk7CisKKyAgaWYgKHBhdGxlbiA8PSBsZW4pCisgIHsKKyAgICBzdHIgKz0gbGVuIC0gcGF0bGVuOworICAgIGlmIChzdHJjbXAoc3RyLCBwYXQpID09IDApCisgICAgICAqc3RyID0gJ1wwJzsKKyAgfQorICByZXR1cm4gc3RyOworfQorCitzdGF0aWMgdm9pZAorbHRfZXJyb3JfY29yZSAoaW50IGV4aXRfc3RhdHVzLCBjb25zdCBjaGFyICogbW9kZSwKKyAgICAgICAgICBjb25zdCBjaGFyICogbWVzc2FnZSwgdmFfbGlzdCBhcCkKK3sKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXM6ICVzOiAiLCBwcm9ncmFtX25hbWUsIG1vZGUpOworICB2ZnByaW50ZiAoc3RkZXJyLCBtZXNzYWdlLCBhcCk7CisgIGZwcmludGYgKHN0ZGVyciwgIi5cbiIpOworCisgIGlmIChleGl0X3N0YXR1cyA+PSAwKQorICAgIGV4aXQgKGV4aXRfc3RhdHVzKTsKK30KKwordm9pZAorbHRfZmF0YWwgKGNvbnN0IGNoYXIgKm1lc3NhZ2UsIC4uLikKK3sKKyAgdmFfbGlzdCBhcDsKKyAgdmFfc3RhcnQgKGFwLCBtZXNzYWdlKTsKKyAgbHRfZXJyb3JfY29yZSAoRVhJVF9GQUlMVVJFLCAiRkFUQUwiLCBtZXNzYWdlLCBhcCk7CisgIHZhX2VuZCAoYXApOworfQorRU9GCisgICAgICAgICAgIyB3ZSBzaG91bGQgcmVhbGx5IHVzZSBhIGJ1aWxkLXBsYXRmb3JtIHNwZWNpZmljIGNvbXBpbGVyCisgICAgICAgICAgIyBoZXJlLCBidXQgT1RPSCwgdGhlIHdyYXBwZXJzIChzaGVsbCBzY3JpcHQgYW5kIHRoaXMgQyBvbmUpCisgICAgICAgICAgIyBhcmUgb25seSB1c2VmdWwgaWYgeW91IHdhbnQgdG8gZXhlY3V0ZSB0aGUgInJlYWwiIGJpbmFyeS4KKyAgICAgICAgICAjIFNpbmNlIHRoZSAicmVhbCIgYmluYXJ5IGlzIGJ1aWx0IGZvciAkaG9zdCwgdGhlbiB0aGlzCisgICAgICAgICAgIyB3cmFwcGVyIG1pZ2h0IGFzIHdlbGwgYmUgYnVpbHQgZm9yICRob3N0LCB0b28uCisgICAgICAgICAgJHJ1biAkTFRDQyAkTFRDRkxBR1MgLXMgLW8gJGN3cmFwcGVyICRjd3JhcHBlcnNvdXJjZQorICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgJHJtICRvdXRwdXQKKyAgICAgICAgdHJhcCAiJHJtICRvdXRwdXQ7IGV4aXQgJEVYSVRfRkFJTFVSRSIgMSAyIDE1CisKKwkkZWNobyA+ICRvdXRwdXQgIlwKKyMhICRTSEVMTAorCisjICRvdXRwdXQgLSB0ZW1wb3Jhcnkgd3JhcHBlciBzY3JpcHQgZm9yICRvYmpkaXIvJG91dHB1dG5hbWUKKyMgR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIC0gR05VICRQQUNLQUdFICRWRVJTSU9OJFRJTUVTVEFNUAorIworIyBUaGUgJG91dHB1dCBwcm9ncmFtIGNhbm5vdCBiZSBkaXJlY3RseSBleGVjdXRlZCB1bnRpbCBhbGwgdGhlIGxpYnRvb2wKKyMgbGlicmFyaWVzIHRoYXQgaXQgZGVwZW5kcyBvbiBhcmUgaW5zdGFsbGVkLgorIworIyBUaGlzIHdyYXBwZXIgc2NyaXB0IHNob3VsZCBuZXZlciBiZSBtb3ZlZCBvdXQgb2YgdGhlIGJ1aWxkIGRpcmVjdG9yeS4KKyMgSWYgaXQgaXMsIGl0IHdpbGwgbm90IG9wZXJhdGUgY29ycmVjdGx5LgorCisjIFNlZCBzdWJzdGl0dXRpb24gdGhhdCBoZWxwcyB1cyBkbyByb2J1c3QgcXVvdGluZy4gIEl0IGJhY2tzbGFzaGlmaWVzCisjIG1ldGFjaGFyYWN0ZXJzIHRoYXQgYXJlIHN0aWxsIGFjdGl2ZSB3aXRoaW4gZG91YmxlLXF1b3RlZCBzdHJpbmdzLgorWHNlZD0nJHtTRUR9IC1lIDFzL15YLy8nCitzZWRfcXVvdGVfc3Vic3Q9JyRzZWRfcXVvdGVfc3Vic3QnCisKKyMgQmUgQm91cm5lIGNvbXBhdGlibGUgKHRha2VuIGZyb20gQXV0b2NvbmY6X0FTX0JPVVJORV9DT01QQVRJQkxFKS4KK2lmIHRlc3QgLW4gXCJcJHtaU0hfVkVSU0lPTitzZXR9XCIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBlbXVsYXRlIHNoCisgIE5VTExDTUQ9OgorICAjIFpzaCAzLnggYW5kIDQueCBwZXJmb3JtcyB3b3JkIHNwbGl0dGluZyBvbiBcJHsxK1wiXCRAXCJ9LCB3aGljaAorICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgorICBhbGlhcyAtZyAnXCR7MStcIlwkQFwifSc9J1wiXCRAXCInCisgIHNldG9wdCBOT19HTE9CX1NVQlNUCitlbHNlCisgIGNhc2UgXGAoc2V0IC1vKSAyPi9kZXYvbnVsbFxgIGluICpwb3NpeCopIHNldCAtbyBwb3NpeDs7IGVzYWMKK2ZpCisKKyMgVGhlIEhQLVVYIGtzaCBhbmQgUE9TSVggc2hlbGwgcHJpbnQgdGhlIHRhcmdldCBkaXJlY3RvcnkgdG8gc3Rkb3V0CisjIGlmIENEUEFUSCBpcyBzZXQuCisodW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICisKK3JlbGlua19jb21tYW5kPVwiJHJlbGlua19jb21tYW5kXCIKKworIyBUaGlzIGVudmlyb25tZW50IHZhcmlhYmxlIGRldGVybWluZXMgb3VyIG9wZXJhdGlvbiBtb2RlLgoraWYgdGVzdCBcIlwkbGlidG9vbF9pbnN0YWxsX21hZ2ljXCIgPSBcIiRtYWdpY1wiOyB0aGVuCisgICMgaW5zdGFsbCBtb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgdmFyaWFibGU6CisgIG5vdGluc3RfZGVwbGlicz0nJG5vdGluc3RfZGVwbGlicycKK2Vsc2UKKyAgIyBXaGVuIHdlIGFyZSBzb3VyY2VkIGluIGV4ZWN1dGUgbW9kZSwgXCRmaWxlIGFuZCBcJGVjaG8gYXJlIGFscmVhZHkgc2V0LgorICBpZiB0ZXN0IFwiXCRsaWJ0b29sX2V4ZWN1dGVfbWFnaWNcIiAhPSBcIiRtYWdpY1wiOyB0aGVuCisgICAgZWNobz1cIiRxZWNob1wiCisgICAgZmlsZT1cIlwkMFwiCisgICAgIyBNYWtlIHN1cmUgZWNobyB3b3Jrcy4KKyAgICBpZiB0ZXN0IFwiWFwkMVwiID0gWC0tbm8tcmVleGVjOyB0aGVuCisgICAgICAjIERpc2NhcmQgdGhlIC0tbm8tcmVleGVjIGZsYWcsIGFuZCBjb250aW51ZS4KKyAgICAgIHNoaWZ0CisgICAgZWxpZiB0ZXN0IFwiWFxgKFwkZWNobyAnXHQnKSAyPi9kZXYvbnVsbFxgXCIgPSAnWFx0JzsgdGhlbgorICAgICAgIyBZaXBwZWUsIFwkZWNobyB3b3JrcyEKKyAgICAgIDoKKyAgICBlbHNlCisgICAgICAjIFJlc3RhcnQgdW5kZXIgdGhlIGNvcnJlY3Qgc2hlbGwsIGFuZCB0aGVuIG1heWJlIFwkZWNobyB3aWxsIHdvcmsuCisgICAgICBleGVjICRTSEVMTCBcIlwkMFwiIC0tbm8tcmVleGVjIFwkezErXCJcJEBcIn0KKyAgICBmaQorICBmaVwKKyIKKwkkZWNobyA+PiAkb3V0cHV0ICJcCisKKyAgIyBGaW5kIHRoZSBkaXJlY3RvcnkgdGhhdCB0aGlzIHNjcmlwdCBsaXZlcyBpbi4KKyAgdGhpc2Rpcj1cYFwkZWNobyBcIlhcJGZpbGVcIiB8IFwkWHNlZCAtZSAncyUvW14vXSokJSUnXGAKKyAgdGVzdCBcInhcJHRoaXNkaXJcIiA9IFwieFwkZmlsZVwiICYmIHRoaXNkaXI9LgorCisgICMgRm9sbG93IHN5bWJvbGljIGxpbmtzIHVudGlsIHdlIGdldCB0byB0aGUgcmVhbCB0aGlzZGlyLgorICBmaWxlPVxgbHMgLWxkIFwiXCRmaWxlXCIgfCAke1NFRH0gLW4gJ3MvLiotPiAvL3AnXGAKKyAgd2hpbGUgdGVzdCAtbiBcIlwkZmlsZVwiOyBkbworICAgIGRlc3RkaXI9XGBcJGVjaG8gXCJYXCRmaWxlXCIgfCBcJFhzZWQgLWUgJ3MlL1teL10qXCQlJSdcYAorCisgICAgIyBJZiB0aGVyZSB3YXMgYSBkaXJlY3RvcnkgY29tcG9uZW50LCB0aGVuIGNoYW5nZSB0aGlzZGlyLgorICAgIGlmIHRlc3QgXCJ4XCRkZXN0ZGlyXCIgIT0gXCJ4XCRmaWxlXCI7IHRoZW4KKyAgICAgIGNhc2UgXCJcJGRlc3RkaXJcIiBpbgorICAgICAgW1xcXFwvXSogfCBbQS1aYS16XTpbXFxcXC9dKikgdGhpc2Rpcj1cIlwkZGVzdGRpclwiIDs7CisgICAgICAqKSB0aGlzZGlyPVwiXCR0aGlzZGlyL1wkZGVzdGRpclwiIDs7CisgICAgICBlc2FjCisgICAgZmkKKworICAgIGZpbGU9XGBcJGVjaG8gXCJYXCRmaWxlXCIgfCBcJFhzZWQgLWUgJ3MlXi4qLyUlJ1xgCisgICAgZmlsZT1cYGxzIC1sZCBcIlwkdGhpc2Rpci9cJGZpbGVcIiB8ICR7U0VEfSAtbiAncy8uKi0+IC8vcCdcYAorICBkb25lCisKKyAgIyBUcnkgdG8gZ2V0IHRoZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZS4KKyAgYWJzZGlyPVxgY2QgXCJcJHRoaXNkaXJcIiAmJiBwd2RcYAorICB0ZXN0IC1uIFwiXCRhYnNkaXJcIiAmJiB0aGlzZGlyPVwiXCRhYnNkaXJcIgorIgorCisJaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgPSB5ZXM7IHRoZW4KKwkgICRlY2hvID4+ICRvdXRwdXQgIlwKKyAgcHJvZ3JhbT1sdC0nJG91dHB1dG5hbWUnJGV4ZWV4dAorICBwcm9nZGlyPVwiXCR0aGlzZGlyLyRvYmpkaXJcIgorCisgIGlmIHRlc3QgISAtZiBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIiB8fCBcXAorICAgICB7IGZpbGU9XGBscyAtMWR0IFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIFwiXCRwcm9nZGlyLy4uL1wkcHJvZ3JhbVwiIDI+L2Rldi9udWxsIHwgJHtTRUR9IDFxXGA7IFxcCisgICAgICAgdGVzdCBcIlhcJGZpbGVcIiAhPSBcIlhcJHByb2dkaXIvXCRwcm9ncmFtXCI7IH07IHRoZW4KKworICAgIGZpbGU9XCJcJFwkLVwkcHJvZ3JhbVwiCisKKyAgICBpZiB0ZXN0ICEgLWQgXCJcJHByb2dkaXJcIjsgdGhlbgorICAgICAgJG1rZGlyIFwiXCRwcm9nZGlyXCIKKyAgICBlbHNlCisgICAgICAkcm0gXCJcJHByb2dkaXIvXCRmaWxlXCIKKyAgICBmaSIKKworCSAgJGVjaG8gPj4gJG91dHB1dCAiXAorCisgICAgIyByZWxpbmsgZXhlY3V0YWJsZSBpZiBuZWNlc3NhcnkKKyAgICBpZiB0ZXN0IC1uIFwiXCRyZWxpbmtfY29tbWFuZFwiOyB0aGVuCisgICAgICBpZiByZWxpbmtfY29tbWFuZF9vdXRwdXQ9XGBldmFsIFwkcmVsaW5rX2NvbW1hbmQgMj4mMVxgOyB0aGVuIDoKKyAgICAgIGVsc2UKKwkkZWNobyBcIlwkcmVsaW5rX2NvbW1hbmRfb3V0cHV0XCIgPiYyCisJJHJtIFwiXCRwcm9nZGlyL1wkZmlsZVwiCisJZXhpdCAkRVhJVF9GQUlMVVJFCisgICAgICBmaQorICAgIGZpCisKKyAgICAkbXYgXCJcJHByb2dkaXIvXCRmaWxlXCIgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCIgMj4vZGV2L251bGwgfHwKKyAgICB7ICRybSBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIjsKKyAgICAgICRtdiBcIlwkcHJvZ2Rpci9cJGZpbGVcIiBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIjsgfQorICAgICRybSBcIlwkcHJvZ2Rpci9cJGZpbGVcIgorICBmaSIKKwllbHNlCisJICAkZWNobyA+PiAkb3V0cHV0ICJcCisgIHByb2dyYW09JyRvdXRwdXRuYW1lJworICBwcm9nZGlyPVwiXCR0aGlzZGlyLyRvYmpkaXJcIgorIgorCWZpCisKKwkkZWNobyA+PiAkb3V0cHV0ICJcCisKKyAgaWYgdGVzdCAtZiBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIjsgdGhlbiIKKworCSMgRXhwb3J0IG91ciBzaGxpYnBhdGhfdmFyIGlmIHdlIGhhdmUgb25lLgorCWlmIHRlc3QgIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiID0geWVzICYmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIiAmJiB0ZXN0IC1uICIkdGVtcF9ycGF0aCI7IHRoZW4KKwkgICRlY2hvID4+ICRvdXRwdXQgIlwKKyAgICAjIEFkZCBvdXIgb3duIGxpYnJhcnkgcGF0aCB0byAkc2hsaWJwYXRoX3ZhcgorICAgICRzaGxpYnBhdGhfdmFyPVwiJHRlbXBfcnBhdGhcJCRzaGxpYnBhdGhfdmFyXCIKKworICAgICMgU29tZSBzeXN0ZW1zIGNhbm5vdCBjb3BlIHdpdGggY29sb24tdGVybWluYXRlZCAkc2hsaWJwYXRoX3ZhcgorICAgICMgVGhlIHNlY29uZCBjb2xvbiBpcyBhIHdvcmthcm91bmQgZm9yIGEgYnVnIGluIEJlT1MgUjQgc2VkCisgICAgJHNobGlicGF0aF92YXI9XGBcJGVjaG8gXCJYXCQkc2hsaWJwYXRoX3ZhclwiIHwgXCRYc2VkIC1lICdzLzo6KlwkLy8nXGAKKworICAgIGV4cG9ydCAkc2hsaWJwYXRoX3ZhcgorIgorCWZpCisKKwkjIGZpeHVwIHRoZSBkbGwgc2VhcmNocGF0aCBpZiB3ZSBuZWVkIHRvLgorCWlmIHRlc3QgLW4gIiRkbGxzZWFyY2hwYXRoIjsgdGhlbgorCSAgJGVjaG8gPj4gJG91dHB1dCAiXAorICAgICMgQWRkIHRoZSBkbGwgc2VhcmNoIHBhdGggY29tcG9uZW50cyB0byB0aGUgZXhlY3V0YWJsZSBQQVRICisgICAgUEFUSD0kZGxsc2VhcmNocGF0aDpcJFBBVEgKKyIKKwlmaQorCisJJGVjaG8gPj4gJG91dHB1dCAiXAorICAgIGlmIHRlc3QgXCJcJGxpYnRvb2xfZXhlY3V0ZV9tYWdpY1wiICE9IFwiJG1hZ2ljXCI7IHRoZW4KKyAgICAgICMgUnVuIHRoZSBhY3R1YWwgcHJvZ3JhbSB3aXRoIG91ciBhcmd1bWVudHMuCisiCisJY2FzZSAkaG9zdCBpbgorCSMgQmFja3NsYXNoZXMgc2VwYXJhdGUgZGlyZWN0b3JpZXMgb24gcGxhaW4gd2luZG93cworCSotKi1taW5ndyB8ICotKi1vczIqKQorCSAgJGVjaG8gPj4gJG91dHB1dCAiXAorICAgICAgZXhlYyBcIlwkcHJvZ2RpclxcXFxcJHByb2dyYW1cIiBcJHsxK1wiXCRAXCJ9CisiCisJICA7OworCisJKikKKwkgICRlY2hvID4+ICRvdXRwdXQgIlwKKyAgICAgIGV4ZWMgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCIgXCR7MStcIlwkQFwifQorIgorCSAgOzsKKwllc2FjCisJJGVjaG8gPj4gJG91dHB1dCAiXAorICAgICAgXCRlY2hvIFwiXCQwOiBjYW5ub3QgZXhlYyBcJHByb2dyYW0gXCQqXCIKKyAgICAgIGV4aXQgJEVYSVRfRkFJTFVSRQorICAgIGZpCisgIGVsc2UKKyAgICAjIFRoZSBwcm9ncmFtIGRvZXNuJ3QgZXhpc3QuCisgICAgXCRlY2hvIFwiXCQwOiBlcnJvcjogXFxcYFwkcHJvZ2Rpci9cJHByb2dyYW0nIGRvZXMgbm90IGV4aXN0XCIgMT4mMgorICAgIFwkZWNobyBcIlRoaXMgc2NyaXB0IGlzIGp1c3QgYSB3cmFwcGVyIGZvciBcJHByb2dyYW0uXCIgMT4mMgorICAgICRlY2hvIFwiU2VlIHRoZSAkUEFDS0FHRSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLlwiIDE+JjIKKyAgICBleGl0ICRFWElUX0ZBSUxVUkUKKyAgZmkKK2ZpXAorIgorCWNobW9kICt4ICRvdXRwdXQKKyAgICAgIGZpCisgICAgICBleGl0ICRFWElUX1NVQ0NFU1MKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgIyBTZWUgaWYgd2UgbmVlZCB0byBidWlsZCBhbiBvbGQtZmFzaGlvbmVkIGFyY2hpdmUuCisgICAgZm9yIG9sZGxpYiBpbiAkb2xkbGliczsgZG8KKworICAgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSBjb252ZW5pZW5jZTsgdGhlbgorCW9sZG9ianM9IiRsaWJvYmpzX3NhdmUiCisJYWRkbGlicz0iJGNvbnZlbmllbmNlIgorCWJ1aWxkX2xpYnRvb2xfbGlicz1ubworICAgICAgZWxzZQorCWlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0gbW9kdWxlOyB0aGVuCisJICBvbGRvYmpzPSIkbGlib2Jqc19zYXZlIgorCSAgYnVpbGRfbGlidG9vbF9saWJzPW5vCisJZWxzZQorCSAgb2xkb2Jqcz0iJG9sZF9kZXBsaWJzICRub25fcGljX29iamVjdHMiCisJZmkKKwlhZGRsaWJzPSIkb2xkX2NvbnZlbmllbmNlIgorICAgICAgZmkKKworICAgICAgaWYgdGVzdCAtbiAiJGFkZGxpYnMiOyB0aGVuCisJZ2VudG9wPSIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eCIKKwlnZW5lcmF0ZWQ9IiRnZW5lcmF0ZWQgJGdlbnRvcCIKKworCWZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAkZ2VudG9wICRhZGRsaWJzCisJb2xkb2Jqcz0iJG9sZG9ianMgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCisgICAgICBmaQorCisgICAgICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgYXJjaGl2ZSBjb21tYW5kcy4KKyAgICAgIGlmIHRlc3QgLW4gIiRvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzIiAmJiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgorICAgICAgIGNtZHM9JG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMKKyAgICAgIGVsc2UKKwkjIFBPU0lYIGRlbWFuZHMgbm8gcGF0aHMgdG8gYmUgZW5jb2RlZCBpbiBhcmNoaXZlcy4gIFdlIGhhdmUKKwkjIHRvIGF2b2lkIGNyZWF0aW5nIGFyY2hpdmVzIHdpdGggZHVwbGljYXRlIGJhc2VuYW1lcyBpZiB3ZQorCSMgbWlnaHQgaGF2ZSB0byBleHRyYWN0IHRoZW0gYWZ0ZXJ3YXJkcywgZS5nLiwgd2hlbiBjcmVhdGluZyBhCisJIyBzdGF0aWMgYXJjaGl2ZSBvdXQgb2YgYSBjb252ZW5pZW5jZSBsaWJyYXJ5LCBvciB3aGVuIGxpbmtpbmcKKwkjIHRoZSBlbnRpcmV0eSBvZiBhIGxpYnRvb2wgYXJjaGl2ZSBpbnRvIGFub3RoZXIgKGN1cnJlbnRseQorCSMgbm90IHN1cHBvcnRlZCBieSBsaWJ0b29sKS4KKwlpZiAoZm9yIG9iaiBpbiAkb2xkb2JqcworCSAgICBkbworCSAgICAgICRlY2hvICJYJG9iaiIgfCAkWHNlZCAtZSAncyVeLiovJSUnCisJICAgIGRvbmUgfCBzb3J0IHwgc29ydCAtdWMgPi9kZXYvbnVsbCAyPiYxKTsgdGhlbgorCSAgOgorCWVsc2UKKwkgICRlY2hvICJjb3B5aW5nIHNlbGVjdGVkIG9iamVjdCBmaWxlcyB0byBhdm9pZCBiYXNlbmFtZSBjb25mbGljdHMuLi4iCisKKwkgIGlmIHRlc3QgLXogIiRnZW50b3AiOyB0aGVuCisJICAgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCisJICAgIGdlbmVyYXRlZD0iJGdlbmVyYXRlZCAkZ2VudG9wIgorCisJICAgICRzaG93ICIke3JtfXIgJGdlbnRvcCIKKwkgICAgJHJ1biAke3JtfXIgIiRnZW50b3AiCisJICAgICRzaG93ICIkbWtkaXIgJGdlbnRvcCIKKwkgICAgJHJ1biAkbWtkaXIgIiRnZW50b3AiCisJICAgIGV4aXRfc3RhdHVzPSQ/CisJICAgIGlmIHRlc3QgIiRleGl0X3N0YXR1cyIgLW5lIDAgJiYgdGVzdCAhIC1kICIkZ2VudG9wIjsgdGhlbgorCSAgICAgIGV4aXQgJGV4aXRfc3RhdHVzCisJICAgIGZpCisJICBmaQorCisJICBzYXZlX29sZG9ianM9JG9sZG9ianMKKwkgIG9sZG9ianM9CisJICBjb3VudGVyPTEKKwkgIGZvciBvYmogaW4gJHNhdmVfb2xkb2JqcworCSAgZG8KKwkgICAgb2JqYmFzZT1gJGVjaG8gIlgkb2JqIiB8ICRYc2VkIC1lICdzJV4uKi8lJSdgCisJICAgIGNhc2UgIiAkb2xkb2JqcyAiIGluCisJICAgICIgIikgb2xkb2Jqcz0kb2JqIDs7CisJICAgICpbXCAvXSIkb2JqYmFzZSAiKikKKwkgICAgICB3aGlsZSA6OyBkbworCQkjIE1ha2Ugc3VyZSB3ZSBkb24ndCBwaWNrIGFuIGFsdGVybmF0ZSBuYW1lIHRoYXQgYWxzbworCQkjIG92ZXJsYXBzLgorCQluZXdvYmo9bHQkY291bnRlci0kb2JqYmFzZQorCQljb3VudGVyPWBleHByICRjb3VudGVyICsgMWAKKwkJY2FzZSAiICRvbGRvYmpzICIgaW4KKwkJKltcIC9dIiRuZXdvYmogIiopIDs7CisJCSopIGlmIHRlc3QgISAtZiAiJGdlbnRvcC8kbmV3b2JqIjsgdGhlbiBicmVhazsgZmkgOzsKKwkJZXNhYworCSAgICAgIGRvbmUKKwkgICAgICAkc2hvdyAibG4gJG9iaiAkZ2VudG9wLyRuZXdvYmogfHwgY3AgJG9iaiAkZ2VudG9wLyRuZXdvYmoiCisJICAgICAgJHJ1biBsbiAiJG9iaiIgIiRnZW50b3AvJG5ld29iaiIgfHwKKwkgICAgICAkcnVuIGNwICIkb2JqIiAiJGdlbnRvcC8kbmV3b2JqIgorCSAgICAgIG9sZG9ianM9IiRvbGRvYmpzICRnZW50b3AvJG5ld29iaiIKKwkgICAgICA7OworCSAgICAqKSBvbGRvYmpzPSIkb2xkb2JqcyAkb2JqIiA7OworCSAgICBlc2FjCisJICBkb25lCisJZmkKKworCWV2YWwgY21kcz1cIiRvbGRfYXJjaGl2ZV9jbWRzXCIKKworCWlmIGxlbj1gZXhwciAiWCRjbWRzIiA6ICIuKiJgICYmCisJICAgICB0ZXN0ICIkbGVuIiAtbGUgIiRtYXhfY21kX2xlbiIgfHwgdGVzdCAiJG1heF9jbWRfbGVuIiAtbGUgLTE7IHRoZW4KKwkgIGNtZHM9JG9sZF9hcmNoaXZlX2NtZHMKKwllbHNlCisJICAjIHRoZSBjb21tYW5kIGxpbmUgaXMgdG9vIGxvbmcgdG8gbGluayBpbiBvbmUgc3RlcCwgbGluayBpbiBwYXJ0cworCSAgJGVjaG8gInVzaW5nIHBpZWNld2lzZSBhcmNoaXZlIGxpbmtpbmcuLi4iCisJICBzYXZlX1JBTkxJQj0kUkFOTElCCisJICBSQU5MSUI9OgorCSAgb2JqbGlzdD0KKwkgIGNvbmNhdF9jbWRzPQorCSAgc2F2ZV9vbGRvYmpzPSRvbGRvYmpzCisKKwkgICMgSXMgdGhlcmUgYSBiZXR0ZXIgd2F5IG9mIGZpbmRpbmcgdGhlIGxhc3Qgb2JqZWN0IGluIHRoZSBsaXN0PworCSAgZm9yIG9iaiBpbiAkc2F2ZV9vbGRvYmpzCisJICBkbworCSAgICBsYXN0X29sZG9iaj0kb2JqCisJICBkb25lCisJICBmb3Igb2JqIGluICRzYXZlX29sZG9ianMKKwkgIGRvCisJICAgIG9sZG9ianM9IiRvYmpsaXN0ICRvYmoiCisJICAgIG9iamxpc3Q9IiRvYmpsaXN0ICRvYmoiCisJICAgIGV2YWwgdGVzdF9jbWRzPVwiJG9sZF9hcmNoaXZlX2NtZHNcIgorCSAgICBpZiBsZW49YGV4cHIgIlgkdGVzdF9jbWRzIiA6ICIuKiIgMj4vZGV2L251bGxgICYmCisJICAgICAgIHRlc3QgIiRsZW4iIC1sZSAiJG1heF9jbWRfbGVuIjsgdGhlbgorCSAgICAgIDoKKwkgICAgZWxzZQorCSAgICAgICMgdGhlIGFib3ZlIGNvbW1hbmQgc2hvdWxkIGJlIHVzZWQgYmVmb3JlIGl0IGdldHMgdG9vIGxvbmcKKwkgICAgICBvbGRvYmpzPSRvYmpsaXN0CisJICAgICAgaWYgdGVzdCAiJG9iaiIgPSAiJGxhc3Rfb2xkb2JqIiA7IHRoZW4KKwkgICAgICAgIFJBTkxJQj0kc2F2ZV9SQU5MSUIKKwkgICAgICBmaQorCSAgICAgIHRlc3QgLXogIiRjb25jYXRfY21kcyIgfHwgY29uY2F0X2NtZHM9JGNvbmNhdF9jbWRzfgorCSAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJHtjb25jYXRfY21kc30kb2xkX2FyY2hpdmVfY21kc1wiCisJICAgICAgb2JqbGlzdD0KKwkgICAgZmkKKwkgIGRvbmUKKwkgIFJBTkxJQj0kc2F2ZV9SQU5MSUIKKwkgIG9sZG9ianM9JG9iamxpc3QKKwkgIGlmIHRlc3QgIlgkb2xkb2JqcyIgPSAiWCIgOyB0aGVuCisJICAgIGV2YWwgY21kcz1cIlwkY29uY2F0X2NtZHNcIgorCSAgZWxzZQorCSAgICBldmFsIGNtZHM9XCJcJGNvbmNhdF9jbWRzflwkb2xkX2FyY2hpdmVfY21kc1wiCisJICBmaQorCWZpCisgICAgICBmaQorICAgICAgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9J34nCisgICAgICBmb3IgY21kIGluICRjbWRzOyBkbworICAgICAgICBldmFsIGNtZD1cIiRjbWRcIgorCUlGUz0iJHNhdmVfaWZzIgorCSRzaG93ICIkY21kIgorCSRydW4gZXZhbCAiJGNtZCIgfHwgZXhpdCAkPworICAgICAgZG9uZQorICAgICAgSUZTPSIkc2F2ZV9pZnMiCisgICAgZG9uZQorCisgICAgaWYgdGVzdCAtbiAiJGdlbmVyYXRlZCI7IHRoZW4KKyAgICAgICRzaG93ICIke3JtfXIkZ2VuZXJhdGVkIgorICAgICAgJHJ1biAke3JtfXIkZ2VuZXJhdGVkCisgICAgZmkKKworICAgICMgTm93IGNyZWF0ZSB0aGUgbGlidG9vbCBhcmNoaXZlLgorICAgIGNhc2UgJG91dHB1dCBpbgorICAgICoubGEpCisgICAgICBvbGRfbGlicmFyeT0KKyAgICAgIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXMgJiYgb2xkX2xpYnJhcnk9IiRsaWJuYW1lLiRsaWJleHQiCisgICAgICAkc2hvdyAiY3JlYXRpbmcgJG91dHB1dCIKKworICAgICAgIyBQcmVzZXJ2ZSBhbnkgdmFyaWFibGVzIHRoYXQgbWF5IGFmZmVjdCBjb21waWxlciBiZWhhdmlvcgorICAgICAgZm9yIHZhciBpbiAkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms7IGRvCisJaWYgZXZhbCB0ZXN0IC16IFwiXCR7JHZhcitzZXR9XCI7IHRoZW4KKwkgIHJlbGlua19jb21tYW5kPSJ7IHRlc3QgLXogXCJcJHskdmFyK3NldH1cIiB8fCB1bnNldCAkdmFyIHx8IHsgJHZhcj07IGV4cG9ydCAkdmFyOyB9OyB9OyAkcmVsaW5rX2NvbW1hbmQiCisJZWxpZiBldmFsIHZhcl92YWx1ZT1cJCR2YXI7IHRlc3QgLXogIiR2YXJfdmFsdWUiOyB0aGVuCisJICByZWxpbmtfY29tbWFuZD0iJHZhcj07IGV4cG9ydCAkdmFyOyAkcmVsaW5rX2NvbW1hbmQiCisJZWxzZQorCSAgdmFyX3ZhbHVlPWAkZWNobyAiWCR2YXJfdmFsdWUiIHwgJFhzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorCSAgcmVsaW5rX2NvbW1hbmQ9IiR2YXI9XCIkdmFyX3ZhbHVlXCI7IGV4cG9ydCAkdmFyOyAkcmVsaW5rX2NvbW1hbmQiCisJZmkKKyAgICAgIGRvbmUKKyAgICAgICMgUXVvdGUgdGhlIGxpbmsgY29tbWFuZCBmb3Igc2hpcHBpbmcuCisgICAgICByZWxpbmtfY29tbWFuZD0iKGNkIGBwd2RgOyAkU0hFTEwgJHByb2dwYXRoICRwcmVzZXJ2ZV9hcmdzIC0tbW9kZT1yZWxpbmsgJGxpYnRvb2xfYXJncyBAaW5zdF9wcmVmaXhfZGlyQCkiCisgICAgICByZWxpbmtfY29tbWFuZD1gJGVjaG8gIlgkcmVsaW5rX2NvbW1hbmQiIHwgJFNQMk5MIHwgJFhzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiIHwgJE5MMlNQYAorICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2F1dG9tYXRpYyIgPSB5ZXMgOyB0aGVuCisJcmVsaW5rX2NvbW1hbmQ9CisgICAgICBmaQorCisKKyAgICAgICMgT25seSBjcmVhdGUgdGhlIG91dHB1dCBpZiBub3QgYSBkcnkgcnVuLgorICAgICAgaWYgdGVzdCAteiAiJHJ1biI7IHRoZW4KKwlmb3IgaW5zdGFsbGVkIGluIG5vIHllczsgZG8KKwkgIGlmIHRlc3QgIiRpbnN0YWxsZWQiID0geWVzOyB0aGVuCisJICAgIGlmIHRlc3QgLXogIiRpbnN0YWxsX2xpYmRpciI7IHRoZW4KKwkgICAgICBicmVhaworCSAgICBmaQorCSAgICBvdXRwdXQ9IiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lImkKKwkgICAgIyBSZXBsYWNlIGFsbCB1bmluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcyB3aXRoIHRoZSBpbnN0YWxsZWQgb25lcworCSAgICBuZXdkZXBlbmRlbmN5X2xpYnM9CisJICAgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KKwkgICAgICBjYXNlICRkZXBsaWIgaW4KKwkgICAgICAqLmxhKQorCQluYW1lPWAkZWNobyAiWCRkZXBsaWIiIHwgJFhzZWQgLWUgJ3MlXi4qLyUlJ2AKKwkJZXZhbCBsaWJkaXI9YCR7U0VEfSAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGRlcGxpYmAKKwkJaWYgdGVzdCAteiAiJGxpYmRpciI7IHRoZW4KKwkJICAkZWNobyAiJG1vZGVuYW1lOiBcYCRkZXBsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIgMT4mMgorCQkgIGV4aXQgJEVYSVRfRkFJTFVSRQorCQlmaQorCQluZXdkZXBlbmRlbmN5X2xpYnM9IiRuZXdkZXBlbmRlbmN5X2xpYnMgJGxpYmRpci8kbmFtZSIKKwkJOzsKKwkgICAgICAqKSBuZXdkZXBlbmRlbmN5X2xpYnM9IiRuZXdkZXBlbmRlbmN5X2xpYnMgJGRlcGxpYiIgOzsKKwkgICAgICBlc2FjCisJICAgIGRvbmUKKwkgICAgZGVwZW5kZW5jeV9saWJzPSIkbmV3ZGVwZW5kZW5jeV9saWJzIgorCSAgICBuZXdkbGZpbGVzPQorCSAgICBmb3IgbGliIGluICRkbGZpbGVzOyBkbworCSAgICAgIG5hbWU9YCRlY2hvICJYJGxpYiIgfCAkWHNlZCAtZSAncyVeLiovJSUnYAorCSAgICAgIGV2YWwgbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRsaWJgCisJICAgICAgaWYgdGVzdCAteiAiJGxpYmRpciI7IHRoZW4KKwkJJGVjaG8gIiRtb2RlbmFtZTogXGAkbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiIDE+JjIKKwkJZXhpdCAkRVhJVF9GQUlMVVJFCisJICAgICAgZmkKKwkgICAgICBuZXdkbGZpbGVzPSIkbmV3ZGxmaWxlcyAkbGliZGlyLyRuYW1lIgorCSAgICBkb25lCisJICAgIGRsZmlsZXM9IiRuZXdkbGZpbGVzIgorCSAgICBuZXdkbHByZWZpbGVzPQorCSAgICBmb3IgbGliIGluICRkbHByZWZpbGVzOyBkbworCSAgICAgIG5hbWU9YCRlY2hvICJYJGxpYiIgfCAkWHNlZCAtZSAncyVeLiovJSUnYAorCSAgICAgIGV2YWwgbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRsaWJgCisJICAgICAgaWYgdGVzdCAteiAiJGxpYmRpciI7IHRoZW4KKwkJJGVjaG8gIiRtb2RlbmFtZTogXGAkbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiIDE+JjIKKwkJZXhpdCAkRVhJVF9GQUlMVVJFCisJICAgICAgZmkKKwkgICAgICBuZXdkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyAkbGliZGlyLyRuYW1lIgorCSAgICBkb25lCisJICAgIGRscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzIgorCSAgZWxzZQorCSAgICBuZXdkbGZpbGVzPQorCSAgICBmb3IgbGliIGluICRkbGZpbGVzOyBkbworCSAgICAgIGNhc2UgJGxpYiBpbgorCQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIGFicz0iJGxpYiIgOzsKKwkJKikgYWJzPWBwd2RgIi8kbGliIiA7OworCSAgICAgIGVzYWMKKwkgICAgICBuZXdkbGZpbGVzPSIkbmV3ZGxmaWxlcyAkYWJzIgorCSAgICBkb25lCisJICAgIGRsZmlsZXM9IiRuZXdkbGZpbGVzIgorCSAgICBuZXdkbHByZWZpbGVzPQorCSAgICBmb3IgbGliIGluICRkbHByZWZpbGVzOyBkbworCSAgICAgIGNhc2UgJGxpYiBpbgorCQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIGFicz0iJGxpYiIgOzsKKwkJKikgYWJzPWBwd2RgIi8kbGliIiA7OworCSAgICAgIGVzYWMKKwkgICAgICBuZXdkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyAkYWJzIgorCSAgICBkb25lCisJICAgIGRscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzIgorCSAgZmkKKwkgICRybSAkb3V0cHV0CisJICAjIHBsYWNlIGRsbmFtZSBpbiBjb3JyZWN0IHBvc2l0aW9uIGZvciBjeWd3aW4KKwkgIHRkbG5hbWU9JGRsbmFtZQorCSAgY2FzZSAkaG9zdCwkb3V0cHV0LCRpbnN0YWxsZWQsJG1vZHVsZSwkZGxuYW1lIGluCisJICAgICpjeWd3aW4qLCpsYWkseWVzLG5vLCouZGxsIHwgKm1pbmd3KiwqbGFpLHllcyxubywqLmRsbCkgdGRsbmFtZT0uLi9iaW4vJGRsbmFtZSA7OworCSAgZXNhYworCSAgJGVjaG8gPiAkb3V0cHV0ICJcCisjICRvdXRwdXRuYW1lIC0gYSBsaWJ0b29sIGxpYnJhcnkgZmlsZQorIyBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gLSBHTlUgJFBBQ0tBR0UgJFZFUlNJT04kVElNRVNUQU1QCisjCisjIFBsZWFzZSBETyBOT1QgZGVsZXRlIHRoaXMgZmlsZSEKKyMgSXQgaXMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHRoZSBsaWJyYXJ5LgorCisjIFRoZSBuYW1lIHRoYXQgd2UgY2FuIGRsb3BlbigzKS4KK2RsbmFtZT0nJHRkbG5hbWUnCisKKyMgTmFtZXMgb2YgdGhpcyBsaWJyYXJ5LgorbGlicmFyeV9uYW1lcz0nJGxpYnJhcnlfbmFtZXMnCisKKyMgVGhlIG5hbWUgb2YgdGhlIHN0YXRpYyBhcmNoaXZlLgorb2xkX2xpYnJhcnk9JyRvbGRfbGlicmFyeScKKworIyBMaWJyYXJpZXMgdGhhdCB0aGlzIG9uZSBkZXBlbmRzIHVwb24uCitkZXBlbmRlbmN5X2xpYnM9JyRkZXBlbmRlbmN5X2xpYnMnCisKKyMgVmVyc2lvbiBpbmZvcm1hdGlvbiBmb3IgJGxpYm5hbWUuCitjdXJyZW50PSRjdXJyZW50CithZ2U9JGFnZQorcmV2aXNpb249JHJldmlzaW9uCisKKyMgSXMgdGhpcyBhbiBhbHJlYWR5IGluc3RhbGxlZCBsaWJyYXJ5PworaW5zdGFsbGVkPSRpbnN0YWxsZWQKKworIyBTaG91bGQgd2Ugd2FybiBhYm91dCBwb3J0YWJpbGl0eSB3aGVuIGxpbmtpbmcgYWdhaW5zdCAtbW9kdWxlcz8KK3Nob3VsZG5vdGxpbms9JG1vZHVsZQorCisjIEZpbGVzIHRvIGRsb3Blbi9kbHByZW9wZW4KK2Rsb3Blbj0nJGRsZmlsZXMnCitkbHByZW9wZW49JyRkbHByZWZpbGVzJworCisjIERpcmVjdG9yeSB0aGF0IHRoaXMgbGlicmFyeSBuZWVkcyB0byBiZSBpbnN0YWxsZWQgaW46CitsaWJkaXI9JyRpbnN0YWxsX2xpYmRpciciCisJICBpZiB0ZXN0ICIkaW5zdGFsbGVkIiA9IG5vICYmIHRlc3QgIiRuZWVkX3JlbGluayIgPSB5ZXM7IHRoZW4KKwkgICAgJGVjaG8gPj4gJG91dHB1dCAiXAorcmVsaW5rX2NvbW1hbmQ9XCIkcmVsaW5rX2NvbW1hbmRcIiIKKwkgIGZpCisJZG9uZQorICAgICAgZmkKKworICAgICAgIyBEbyBhIHN5bWJvbGljIGxpbmsgc28gdGhhdCB0aGUgbGlidG9vbCBhcmNoaXZlIGNhbiBiZSBmb3VuZCBpbgorICAgICAgIyBMRF9MSUJSQVJZX1BBVEggYmVmb3JlIHRoZSBwcm9ncmFtIGlzIGluc3RhbGxlZC4KKyAgICAgICRzaG93ICIoY2QgJG91dHB1dF9vYmpkaXIgJiYgJHJtICRvdXRwdXRuYW1lICYmICRMTl9TIC4uLyRvdXRwdXRuYW1lICRvdXRwdXRuYW1lKSIKKyAgICAgICRydW4gZXZhbCAnKGNkICRvdXRwdXRfb2JqZGlyICYmICRybSAkb3V0cHV0bmFtZSAmJiAkTE5fUyAuLi8kb3V0cHV0bmFtZSAkb3V0cHV0bmFtZSknIHx8IGV4aXQgJD8KKyAgICAgIDs7CisgICAgZXNhYworICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworICAgIDs7CisKKyAgIyBsaWJ0b29sIGluc3RhbGwgbW9kZQorICBpbnN0YWxsKQorICAgIG1vZGVuYW1lPSIkbW9kZW5hbWU6IGluc3RhbGwiCisKKyAgICAjIFRoZXJlIG1heSBiZSBhbiBvcHRpb25hbCBzaCgxKSBhcmd1bWVudCBhdCB0aGUgYmVnaW5uaW5nIG9mCisgICAgIyBpbnN0YWxsX3Byb2cgKGVzcGVjaWFsbHkgb24gV2luZG93cyBOVCkuCisgICAgaWYgdGVzdCAiJG5vbm9wdCIgPSAiJFNIRUxMIiB8fCB0ZXN0ICIkbm9ub3B0IiA9IC9iaW4vc2ggfHwKKyAgICAgICAjIEFsbG93IHRoZSB1c2Ugb2YgR05VIHNodG9vbCdzIGluc3RhbGwgY29tbWFuZC4KKyAgICAgICAkZWNobyAiWCRub25vcHQiIHwgZ3JlcCBzaHRvb2wgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICMgQWVzdGhldGljYWxseSBxdW90ZSBpdC4KKyAgICAgIGFyZz1gJGVjaG8gIlgkbm9ub3B0IiB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKyAgICAgIGNhc2UgJGFyZyBpbgorICAgICAgKltcW1x+XCNcXlwmXCpcKFwpXHtcfVx8XDtcPFw+XD9cJ1wgXAldKnwqXSp8IiIpCisJYXJnPSJcIiRhcmdcIiIKKwk7OworICAgICAgZXNhYworICAgICAgaW5zdGFsbF9wcm9nPSIkYXJnICIKKyAgICAgIGFyZz0iJDEiCisgICAgICBzaGlmdAorICAgIGVsc2UKKyAgICAgIGluc3RhbGxfcHJvZz0KKyAgICAgIGFyZz0kbm9ub3B0CisgICAgZmkKKworICAgICMgVGhlIHJlYWwgZmlyc3QgYXJndW1lbnQgc2hvdWxkIGJlIHRoZSBuYW1lIG9mIHRoZSBpbnN0YWxsYXRpb24gcHJvZ3JhbS4KKyAgICAjIEFlc3RoZXRpY2FsbHkgcXVvdGUgaXQuCisgICAgYXJnPWAkZWNobyAiWCRhcmciIHwgJFhzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorICAgIGNhc2UgJGFyZyBpbgorICAgICpbXFtcflwjXF5cJlwqXChcKVx7XH1cfFw7XDxcPlw/XCdcIFwJXSp8Kl0qfCIiKQorICAgICAgYXJnPSJcIiRhcmdcIiIKKyAgICAgIDs7CisgICAgZXNhYworICAgIGluc3RhbGxfcHJvZz0iJGluc3RhbGxfcHJvZyRhcmciCisKKyAgICAjIFdlIG5lZWQgdG8gYWNjZXB0IGF0IGxlYXN0IGFsbCB0aGUgQlNEIGluc3RhbGwgZmxhZ3MuCisgICAgZGVzdD0KKyAgICBmaWxlcz0KKyAgICBvcHRzPQorICAgIHByZXY9CisgICAgaW5zdGFsbF90eXBlPQorICAgIGlzZGlyPW5vCisgICAgc3RyaXBtZT0KKyAgICBmb3IgYXJnCisgICAgZG8KKyAgICAgIGlmIHRlc3QgLW4gIiRkZXN0IjsgdGhlbgorCWZpbGVzPSIkZmlsZXMgJGRlc3QiCisJZGVzdD0kYXJnCisJY29udGludWUKKyAgICAgIGZpCisKKyAgICAgIGNhc2UgJGFyZyBpbgorICAgICAgLWQpIGlzZGlyPXllcyA7OworICAgICAgLWYpIAorICAgICAgCWNhc2UgIiAkaW5zdGFsbF9wcm9nICIgaW4KKwkqW1xcXCAvXWNwXCAqKSA7OworCSopIHByZXY9JGFyZyA7OworCWVzYWMKKwk7OworICAgICAgLWcgfCAtbSB8IC1vKSBwcmV2PSRhcmcgOzsKKyAgICAgIC1zKQorCXN0cmlwbWU9IiAtcyIKKwljb250aW51ZQorCTs7CisgICAgICAtKikKKwk7OworICAgICAgKikKKwkjIElmIHRoZSBwcmV2aW91cyBvcHRpb24gbmVlZGVkIGFuIGFyZ3VtZW50LCB0aGVuIHNraXAgaXQuCisJaWYgdGVzdCAtbiAiJHByZXYiOyB0aGVuCisJICBwcmV2PQorCWVsc2UKKwkgIGRlc3Q9JGFyZworCSAgY29udGludWUKKwlmaQorCTs7CisgICAgICBlc2FjCisKKyAgICAgICMgQWVzdGhldGljYWxseSBxdW90ZSB0aGUgYXJndW1lbnQuCisgICAgICBhcmc9YCRlY2hvICJYJGFyZyIgfCAkWHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisgICAgICBjYXNlICRhcmcgaW4KKyAgICAgICpbXFtcflwjXF5cJlwqXChcKVx7XH1cfFw7XDxcPlw/XCdcIFwJXSp8Kl0qfCIiKQorCWFyZz0iXCIkYXJnXCIiCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIGluc3RhbGxfcHJvZz0iJGluc3RhbGxfcHJvZyAkYXJnIgorICAgIGRvbmUKKworICAgIGlmIHRlc3QgLXogIiRpbnN0YWxsX3Byb2ciOyB0aGVuCisgICAgICAkZWNobyAiJG1vZGVuYW1lOiB5b3UgbXVzdCBzcGVjaWZ5IGFuIGluc3RhbGwgcHJvZ3JhbSIgMT4mMgorICAgICAgJGVjaG8gIiRoZWxwIiAxPiYyCisgICAgICBleGl0ICRFWElUX0ZBSUxVUkUKKyAgICBmaQorCisgICAgaWYgdGVzdCAtbiAiJHByZXYiOyB0aGVuCisgICAgICAkZWNobyAiJG1vZGVuYW1lOiB0aGUgXGAkcHJldicgb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IiAxPiYyCisgICAgICAkZWNobyAiJGhlbHAiIDE+JjIKKyAgICAgIGV4aXQgJEVYSVRfRkFJTFVSRQorICAgIGZpCisKKyAgICBpZiB0ZXN0IC16ICIkZmlsZXMiOyB0aGVuCisgICAgICBpZiB0ZXN0IC16ICIkZGVzdCI7IHRoZW4KKwkkZWNobyAiJG1vZGVuYW1lOiBubyBmaWxlIG9yIGRlc3RpbmF0aW9uIHNwZWNpZmllZCIgMT4mMgorICAgICAgZWxzZQorCSRlY2hvICIkbW9kZW5hbWU6IHlvdSBtdXN0IHNwZWNpZnkgYSBkZXN0aW5hdGlvbiIgMT4mMgorICAgICAgZmkKKyAgICAgICRlY2hvICIkaGVscCIgMT4mMgorICAgICAgZXhpdCAkRVhJVF9GQUlMVVJFCisgICAgZmkKKworICAgICMgU3RyaXAgYW55IHRyYWlsaW5nIHNsYXNoIGZyb20gdGhlIGRlc3RpbmF0aW9uLgorICAgIGRlc3Q9YCRlY2hvICJYJGRlc3QiIHwgJFhzZWQgLWUgJ3MlLyQlJSdgCisKKyAgICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBkZXN0aW5hdGlvbiBpcyBhIGRpcmVjdG9yeS4KKyAgICB0ZXN0IC1kICIkZGVzdCIgJiYgaXNkaXI9eWVzCisgICAgaWYgdGVzdCAiJGlzZGlyIiA9IHllczsgdGhlbgorICAgICAgZGVzdGRpcj0iJGRlc3QiCisgICAgICBkZXN0bmFtZT0KKyAgICBlbHNlCisgICAgICBkZXN0ZGlyPWAkZWNobyAiWCRkZXN0IiB8ICRYc2VkIC1lICdzJS9bXi9dKiQlJSdgCisgICAgICB0ZXN0ICJYJGRlc3RkaXIiID0gIlgkZGVzdCIgJiYgZGVzdGRpcj0uCisgICAgICBkZXN0bmFtZT1gJGVjaG8gIlgkZGVzdCIgfCAkWHNlZCAtZSAncyVeLiovJSUnYAorCisgICAgICAjIE5vdCBhIGRpcmVjdG9yeSwgc28gY2hlY2sgdG8gc2VlIHRoYXQgdGhlcmUgaXMgb25seSBvbmUgZmlsZSBzcGVjaWZpZWQuCisgICAgICBzZXQgZHVtbXkgJGZpbGVzCisgICAgICBpZiB0ZXN0ICIkIyIgLWd0IDI7IHRoZW4KKwkkZWNobyAiJG1vZGVuYW1lOiBcYCRkZXN0JyBpcyBub3QgYSBkaXJlY3RvcnkiIDE+JjIKKwkkZWNobyAiJGhlbHAiIDE+JjIKKwlleGl0ICRFWElUX0ZBSUxVUkUKKyAgICAgIGZpCisgICAgZmkKKyAgICBjYXNlICRkZXN0ZGlyIGluCisgICAgW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSA7OworICAgICopCisgICAgICBmb3IgZmlsZSBpbiAkZmlsZXM7IGRvCisJY2FzZSAkZmlsZSBpbgorCSoubG8pIDs7CisJKikKKwkgICRlY2hvICIkbW9kZW5hbWU6IFxgJGRlc3RkaXInIG11c3QgYmUgYW4gYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUiIDE+JjIKKwkgICRlY2hvICIkaGVscCIgMT4mMgorCSAgZXhpdCAkRVhJVF9GQUlMVVJFCisJICA7OworCWVzYWMKKyAgICAgIGRvbmUKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgIyBUaGlzIHZhcmlhYmxlIHRlbGxzIHdyYXBwZXIgc2NyaXB0cyBqdXN0IHRvIHNldCB2YXJpYWJsZXMgcmF0aGVyCisgICAgIyB0aGFuIHJ1bm5pbmcgdGhlaXIgcHJvZ3JhbXMuCisgICAgbGlidG9vbF9pbnN0YWxsX21hZ2ljPSIkbWFnaWMiCisKKyAgICBzdGF0aWNsaWJzPQorICAgIGZ1dHVyZV9saWJkaXJzPQorICAgIGN1cnJlbnRfbGliZGlycz0KKyAgICBmb3IgZmlsZSBpbiAkZmlsZXM7IGRvCisKKyAgICAgICMgRG8gZWFjaCBpbnN0YWxsYXRpb24uCisgICAgICBjYXNlICRmaWxlIGluCisgICAgICAqLiRsaWJleHQpCisJIyBEbyB0aGUgc3RhdGljIGxpYnJhcmllcyBsYXRlci4KKwlzdGF0aWNsaWJzPSIkc3RhdGljbGlicyAkZmlsZSIKKwk7OworCisgICAgICAqLmxhKQorCSMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIGFyY2hpdmUuCisJaWYgKCR7U0VEfSAtZSAnMnEnICRmaWxlIHwgZ3JlcCAiXiMgR2VuZXJhdGVkIGJ5IC4qJFBBQ0tBR0UiKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCWVsc2UKKwkgICRlY2hvICIkbW9kZW5hbWU6IFxgJGZpbGUnIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIgMT4mMgorCSAgJGVjaG8gIiRoZWxwIiAxPiYyCisJICBleGl0ICRFWElUX0ZBSUxVUkUKKwlmaQorCisJbGlicmFyeV9uYW1lcz0KKwlvbGRfbGlicmFyeT0KKwlyZWxpbmtfY29tbWFuZD0KKwkjIElmIHRoZXJlIGlzIG5vIGRpcmVjdG9yeSBjb21wb25lbnQsIHRoZW4gYWRkIG9uZS4KKwljYXNlICRmaWxlIGluCisJKi8qIHwgKlxcKikgLiAkZmlsZSA7OworCSopIC4gLi8kZmlsZSA7OworCWVzYWMKKworCSMgQWRkIHRoZSBsaWJkaXIgdG8gY3VycmVudF9saWJkaXJzIGlmIGl0IGlzIHRoZSBkZXN0aW5hdGlvbi4KKwlpZiB0ZXN0ICJYJGRlc3RkaXIiID0gIlgkbGliZGlyIjsgdGhlbgorCSAgY2FzZSAiJGN1cnJlbnRfbGliZGlycyAiIGluCisJICAqIiAkbGliZGlyICIqKSA7OworCSAgKikgY3VycmVudF9saWJkaXJzPSIkY3VycmVudF9saWJkaXJzICRsaWJkaXIiIDs7CisJICBlc2FjCisJZWxzZQorCSAgIyBOb3RlIHRoZSBsaWJkaXIgYXMgYSBmdXR1cmUgbGliZGlyLgorCSAgY2FzZSAiJGZ1dHVyZV9saWJkaXJzICIgaW4KKwkgICoiICRsaWJkaXIgIiopIDs7CisJICAqKSBmdXR1cmVfbGliZGlycz0iJGZ1dHVyZV9saWJkaXJzICRsaWJkaXIiIDs7CisJICBlc2FjCisJZmkKKworCWRpcj1gJGVjaG8gIlgkZmlsZSIgfCAkWHNlZCAtZSAncyUvW14vXSokJSUnYC8KKwl0ZXN0ICJYJGRpciIgPSAiWCRmaWxlLyIgJiYgZGlyPQorCWRpcj0iJGRpciRvYmpkaXIiCisKKwlpZiB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuCisJICAjIERldGVybWluZSB0aGUgcHJlZml4IHRoZSB1c2VyIGhhcyBhcHBsaWVkIHRvIG91ciBmdXR1cmUgZGlyLgorCSAgaW5zdF9wcmVmaXhfZGlyPWAkZWNobyAiJGRlc3RkaXIiIHwgJFNFRCAicyUkbGliZGlyXCQlJSJgCisKKwkgICMgRG9uJ3QgYWxsb3cgdGhlIHVzZXIgdG8gcGxhY2UgdXMgb3V0c2lkZSBvZiBvdXIgZXhwZWN0ZWQKKwkgICMgbG9jYXRpb24gYi9jIHRoaXMgcHJldmVudHMgZmluZGluZyBkZXBlbmRlbnQgbGlicmFyaWVzIHRoYXQKKwkgICMgYXJlIGluc3RhbGxlZCB0byB0aGUgc2FtZSBwcmVmaXguCisJICAjIEF0IHByZXNlbnQsIHRoaXMgY2hlY2sgZG9lc24ndCBhZmZlY3Qgd2luZG93cyAuZGxsJ3MgdGhhdAorCSAgIyBhcmUgaW5zdGFsbGVkIGludG8gJGxpYmRpci8uLi9iaW4gKGN1cnJlbnRseSwgdGhhdCB3b3JrcyBmaW5lKQorCSAgIyBidXQgaXQncyBzb21ldGhpbmcgdG8ga2VlcCBhbiBleWUgb24uCisJICBpZiB0ZXN0ICIkaW5zdF9wcmVmaXhfZGlyIiA9ICIkZGVzdGRpciI7IHRoZW4KKwkgICAgJGVjaG8gIiRtb2RlbmFtZTogZXJyb3I6IGNhbm5vdCBpbnN0YWxsIFxgJGZpbGUnIHRvIGEgZGlyZWN0b3J5IG5vdCBlbmRpbmcgaW4gJGxpYmRpciIgMT4mMgorCSAgICBleGl0ICRFWElUX0ZBSUxVUkUKKwkgIGZpCisKKwkgIGlmIHRlc3QgLW4gIiRpbnN0X3ByZWZpeF9kaXIiOyB0aGVuCisJICAgICMgU3RpY2sgdGhlIGluc3RfcHJlZml4X2RpciBkYXRhIGludG8gdGhlIGxpbmsgY29tbWFuZC4KKwkgICAgcmVsaW5rX2NvbW1hbmQ9YCRlY2hvICIkcmVsaW5rX2NvbW1hbmQiIHwgJFNQMk5MIHwgJFNFRCAicyVAaW5zdF9wcmVmaXhfZGlyQCUtaW5zdC1wcmVmaXgtZGlyICRpbnN0X3ByZWZpeF9kaXIlIiB8ICROTDJTUGAKKwkgIGVsc2UKKwkgICAgcmVsaW5rX2NvbW1hbmQ9YCRlY2hvICIkcmVsaW5rX2NvbW1hbmQiIHwgJFNQMk5MIHwgJFNFRCAicyVAaW5zdF9wcmVmaXhfZGlyQCUlIiB8ICROTDJTUGAKKwkgIGZpCisKKwkgICRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IHJlbGlua2luZyBcYCRmaWxlJyIgMT4mMgorCSAgJHNob3cgIiRyZWxpbmtfY29tbWFuZCIKKwkgIGlmICRydW4gZXZhbCAiJHJlbGlua19jb21tYW5kIjsgdGhlbiA6CisJICBlbHNlCisJICAgICRlY2hvICIkbW9kZW5hbWU6IGVycm9yOiByZWxpbmsgXGAkZmlsZScgd2l0aCB0aGUgYWJvdmUgY29tbWFuZCBiZWZvcmUgaW5zdGFsbGluZyBpdCIgMT4mMgorCSAgICBleGl0ICRFWElUX0ZBSUxVUkUKKwkgIGZpCisJZmkKKworCSMgU2VlIHRoZSBuYW1lcyBvZiB0aGUgc2hhcmVkIGxpYnJhcnkuCisJc2V0IGR1bW15ICRsaWJyYXJ5X25hbWVzCisJaWYgdGVzdCAtbiAiJDIiOyB0aGVuCisJICByZWFsbmFtZT0iJDIiCisJICBzaGlmdAorCSAgc2hpZnQKKworCSAgc3JjbmFtZT0iJHJlYWxuYW1lIgorCSAgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIiAmJiBzcmNuYW1lPSIkcmVhbG5hbWUiVAorCisJICAjIEluc3RhbGwgdGhlIHNoYXJlZCBsaWJyYXJ5IGFuZCBidWlsZCB0aGUgc3ltbGlua3MuCisJICAkc2hvdyAiJGluc3RhbGxfcHJvZyAkZGlyLyRzcmNuYW1lICRkZXN0ZGlyLyRyZWFsbmFtZSIKKwkgICRydW4gZXZhbCAiJGluc3RhbGxfcHJvZyAkZGlyLyRzcmNuYW1lICRkZXN0ZGlyLyRyZWFsbmFtZSIgfHwgZXhpdCAkPworCSAgaWYgdGVzdCAtbiAiJHN0cmlwbWUiICYmIHRlc3QgLW4gIiRzdHJpcGxpYiI7IHRoZW4KKwkgICAgJHNob3cgIiRzdHJpcGxpYiAkZGVzdGRpci8kcmVhbG5hbWUiCisJICAgICRydW4gZXZhbCAiJHN0cmlwbGliICRkZXN0ZGlyLyRyZWFsbmFtZSIgfHwgZXhpdCAkPworCSAgZmkKKworCSAgaWYgdGVzdCAiJCMiIC1ndCAwOyB0aGVuCisJICAgICMgRGVsZXRlIHRoZSBvbGQgc3ltbGlua3MsIGFuZCBjcmVhdGUgbmV3IG9uZXMuCisJICAgICMgVHJ5IGBsbiAtc2YnIGZpcnN0LCBiZWNhdXNlIHRoZSBgbG4nIGJpbmFyeSBtaWdodCBkZXBlbmQgb24KKwkgICAgIyB0aGUgc3ltbGluayB3ZSByZXBsYWNlISAgU29sYXJpcyAvYmluL2xuIGRvZXMgbm90IHVuZGVyc3RhbmQgLWYsCisJICAgICMgc28gd2UgYWxzbyBuZWVkIHRvIHRyeSBybSAmJiBsbiAtcy4KKwkgICAgZm9yIGxpbmtuYW1lCisJICAgIGRvCisJICAgICAgaWYgdGVzdCAiJGxpbmtuYW1lIiAhPSAiJHJlYWxuYW1lIjsgdGhlbgorICAgICAgICAgICAgICAgICRzaG93ICIoY2QgJGRlc3RkaXIgJiYgeyAkTE5fUyAtZiAkcmVhbG5hbWUgJGxpbmtuYW1lIHx8IHsgJHJtICRsaW5rbmFtZSAmJiAkTE5fUyAkcmVhbG5hbWUgJGxpbmtuYW1lOyB9OyB9KSIKKyAgICAgICAgICAgICAgICAkcnVuIGV2YWwgIihjZCAkZGVzdGRpciAmJiB7ICRMTl9TIC1mICRyZWFsbmFtZSAkbGlua25hbWUgfHwgeyAkcm0gJGxpbmtuYW1lICYmICRMTl9TICRyZWFsbmFtZSAkbGlua25hbWU7IH07IH0pIgorCSAgICAgIGZpCisJICAgIGRvbmUKKwkgIGZpCisKKwkgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBwb3N0aW5zdGFsbCBjb21tYW5kcy4KKwkgIGxpYj0iJGRlc3RkaXIvJHJlYWxuYW1lIgorCSAgY21kcz0kcG9zdGluc3RhbGxfY21kcworCSAgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9J34nCisJICBmb3IgY21kIGluICRjbWRzOyBkbworCSAgICBJRlM9IiRzYXZlX2lmcyIKKwkgICAgZXZhbCBjbWQ9XCIkY21kXCIKKwkgICAgJHNob3cgIiRjbWQiCisJICAgICRydW4gZXZhbCAiJGNtZCIgfHwgeworCSAgICAgIGx0X2V4aXQ9JD8KKworCSAgICAgICMgUmVzdG9yZSB0aGUgdW5pbnN0YWxsZWQgbGlicmFyeSBhbmQgZXhpdAorCSAgICAgIGlmIHRlc3QgIiRtb2RlIiA9IHJlbGluazsgdGhlbgorCQkkcnVuIGV2YWwgJyhjZCAkb3V0cHV0X29iamRpciAmJiAkcm0gJHtyZWFsbmFtZX1UICYmICRtdiAke3JlYWxuYW1lfVUgJHJlYWxuYW1lKScKKwkgICAgICBmaQorCisJICAgICAgZXhpdCAkbHRfZXhpdAorCSAgICB9CisJICBkb25lCisJICBJRlM9IiRzYXZlX2lmcyIKKwlmaQorCisJIyBJbnN0YWxsIHRoZSBwc2V1ZG8tbGlicmFyeSBmb3IgaW5mb3JtYXRpb24gcHVycG9zZXMuCisJbmFtZT1gJGVjaG8gIlgkZmlsZSIgfCAkWHNlZCAtZSAncyVeLiovJSUnYAorCWluc3RuYW1lPSIkZGlyLyRuYW1lImkKKwkkc2hvdyAiJGluc3RhbGxfcHJvZyAkaW5zdG5hbWUgJGRlc3RkaXIvJG5hbWUiCisJJHJ1biBldmFsICIkaW5zdGFsbF9wcm9nICRpbnN0bmFtZSAkZGVzdGRpci8kbmFtZSIgfHwgZXhpdCAkPworCisJIyBNYXliZSBpbnN0YWxsIHRoZSBzdGF0aWMgbGlicmFyeSwgdG9vLgorCXRlc3QgLW4gIiRvbGRfbGlicmFyeSIgJiYgc3RhdGljbGlicz0iJHN0YXRpY2xpYnMgJGRpci8kb2xkX2xpYnJhcnkiCisJOzsKKworICAgICAgKi5sbykKKwkjIEluc3RhbGwgKGkuZS4gY29weSkgYSBsaWJ0b29sIG9iamVjdC4KKworCSMgRmlndXJlIG91dCBkZXN0aW5hdGlvbiBmaWxlIG5hbWUsIGlmIGl0IHdhc24ndCBhbHJlYWR5IHNwZWNpZmllZC4KKwlpZiB0ZXN0IC1uICIkZGVzdG5hbWUiOyB0aGVuCisJICBkZXN0ZmlsZT0iJGRlc3RkaXIvJGRlc3RuYW1lIgorCWVsc2UKKwkgIGRlc3RmaWxlPWAkZWNobyAiWCRmaWxlIiB8ICRYc2VkIC1lICdzJV4uKi8lJSdgCisJICBkZXN0ZmlsZT0iJGRlc3RkaXIvJGRlc3RmaWxlIgorCWZpCisKKwkjIERlZHVjZSB0aGUgbmFtZSBvZiB0aGUgZGVzdGluYXRpb24gb2xkLXN0eWxlIG9iamVjdCBmaWxlLgorCWNhc2UgJGRlc3RmaWxlIGluCisJKi5sbykKKwkgIHN0YXRpY2Rlc3Q9YCRlY2hvICJYJGRlc3RmaWxlIiB8ICRYc2VkIC1lICIkbG8ybyJgCisJICA7OworCSouJG9iamV4dCkKKwkgIHN0YXRpY2Rlc3Q9IiRkZXN0ZmlsZSIKKwkgIGRlc3RmaWxlPQorCSAgOzsKKwkqKQorCSAgJGVjaG8gIiRtb2RlbmFtZTogY2Fubm90IGNvcHkgYSBsaWJ0b29sIG9iamVjdCB0byBcYCRkZXN0ZmlsZSciIDE+JjIKKwkgICRlY2hvICIkaGVscCIgMT4mMgorCSAgZXhpdCAkRVhJVF9GQUlMVVJFCisJICA7OworCWVzYWMKKworCSMgSW5zdGFsbCB0aGUgbGlidG9vbCBvYmplY3QgaWYgcmVxdWVzdGVkLgorCWlmIHRlc3QgLW4gIiRkZXN0ZmlsZSI7IHRoZW4KKwkgICRzaG93ICIkaW5zdGFsbF9wcm9nICRmaWxlICRkZXN0ZmlsZSIKKwkgICRydW4gZXZhbCAiJGluc3RhbGxfcHJvZyAkZmlsZSAkZGVzdGZpbGUiIHx8IGV4aXQgJD8KKwlmaQorCisJIyBJbnN0YWxsIHRoZSBvbGQgb2JqZWN0IGlmIGVuYWJsZWQuCisJaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgorCSAgIyBEZWR1Y2UgdGhlIG5hbWUgb2YgdGhlIG9sZC1zdHlsZSBvYmplY3QgZmlsZS4KKwkgIHN0YXRpY29iaj1gJGVjaG8gIlgkZmlsZSIgfCAkWHNlZCAtZSAiJGxvMm8iYAorCisJICAkc2hvdyAiJGluc3RhbGxfcHJvZyAkc3RhdGljb2JqICRzdGF0aWNkZXN0IgorCSAgJHJ1biBldmFsICIkaW5zdGFsbF9wcm9nIFwkc3RhdGljb2JqIFwkc3RhdGljZGVzdCIgfHwgZXhpdCAkPworCWZpCisJZXhpdCAkRVhJVF9TVUNDRVNTCisJOzsKKworICAgICAgKikKKwkjIEZpZ3VyZSBvdXQgZGVzdGluYXRpb24gZmlsZSBuYW1lLCBpZiBpdCB3YXNuJ3QgYWxyZWFkeSBzcGVjaWZpZWQuCisJaWYgdGVzdCAtbiAiJGRlc3RuYW1lIjsgdGhlbgorCSAgZGVzdGZpbGU9IiRkZXN0ZGlyLyRkZXN0bmFtZSIKKwllbHNlCisJICBkZXN0ZmlsZT1gJGVjaG8gIlgkZmlsZSIgfCAkWHNlZCAtZSAncyVeLiovJSUnYAorCSAgZGVzdGZpbGU9IiRkZXN0ZGlyLyRkZXN0ZmlsZSIKKwlmaQorCisJIyBJZiB0aGUgZmlsZSBpcyBtaXNzaW5nLCBhbmQgdGhlcmUgaXMgYSAuZXhlIG9uIHRoZSBlbmQsIHN0cmlwIGl0CisJIyBiZWNhdXNlIGl0IGlzIG1vc3QgbGlrZWx5IGEgbGlidG9vbCBzY3JpcHQgd2UgYWN0dWFsbHkgd2FudCB0bworCSMgaW5zdGFsbAorCXN0cmlwcGVkX2V4dD0iIgorCWNhc2UgJGZpbGUgaW4KKwkgICouZXhlKQorCSAgICBpZiB0ZXN0ICEgLWYgIiRmaWxlIjsgdGhlbgorCSAgICAgIGZpbGU9YCRlY2hvICRmaWxlfCR7U0VEfSAncywuZXhlJCwsJ2AKKwkgICAgICBzdHJpcHBlZF9leHQ9Ii5leGUiCisJICAgIGZpCisJICAgIDs7CisJZXNhYworCisJIyBEbyBhIHRlc3QgdG8gc2VlIGlmIHRoaXMgaXMgcmVhbGx5IGEgbGlidG9vbCBwcm9ncmFtLgorCWNhc2UgJGhvc3QgaW4KKwkqY3lnd2luKnwqbWluZ3cqKQorCSAgICB3cmFwcGVyPWAkZWNobyAkZmlsZSB8ICR7U0VEfSAtZSAncywuZXhlJCwsJ2AKKwkgICAgOzsKKwkqKQorCSAgICB3cmFwcGVyPSRmaWxlCisJICAgIDs7CisJZXNhYworCWlmICgke1NFRH0gLWUgJzRxJyAkd3JhcHBlciB8IGdyZXAgIl4jIEdlbmVyYXRlZCBieSAuKiRQQUNLQUdFIik+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkgIG5vdGluc3RfZGVwbGlicz0KKwkgIHJlbGlua19jb21tYW5kPQorCisJICAjIE5vdGUgdGhhdCBpdCBpcyBub3QgbmVjZXNzYXJ5IG9uIGN5Z3dpbi9taW5ndyB0byBhcHBlbmQgYSBkb3QgdG8KKwkgICMgZm9vIGV2ZW4gaWYgYm90aCBmb28gYW5kIEZJTEUuZXhlIGV4aXN0OiBhdXRvbWF0aWMtYXBwZW5kLS5leGUKKwkgICMgYmVoYXZpb3IgaGFwcGVucyBvbmx5IGZvciBleGVjKDMpLCBub3QgZm9yIG9wZW4oMikhICBBbHNvLCBzb3VyY2luZworCSAgIyBgRklMRS4nIGRvZXMgbm90IHdvcmsgb24gY3lnd2luIG1hbmFnZWQgbW91bnRzLgorCSAgIworCSAgIyBJZiB0aGVyZSBpcyBubyBkaXJlY3RvcnkgY29tcG9uZW50LCB0aGVuIGFkZCBvbmUuCisJICBjYXNlICR3cmFwcGVyIGluCisJICAqLyogfCAqXFwqKSAuICR7d3JhcHBlcn0gOzsKKwkgICopIC4gLi8ke3dyYXBwZXJ9IDs7CisJICBlc2FjCisKKwkgICMgQ2hlY2sgdGhlIHZhcmlhYmxlcyB0aGF0IHNob3VsZCBoYXZlIGJlZW4gc2V0LgorCSAgaWYgdGVzdCAteiAiJG5vdGluc3RfZGVwbGlicyI7IHRoZW4KKwkgICAgJGVjaG8gIiRtb2RlbmFtZTogaW52YWxpZCBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0IFxgJHdyYXBwZXInIiAxPiYyCisJICAgIGV4aXQgJEVYSVRfRkFJTFVSRQorCSAgZmkKKworCSAgZmluYWxpemU9eWVzCisJICBmb3IgbGliIGluICRub3RpbnN0X2RlcGxpYnM7IGRvCisJICAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgZWFjaCBsaWJyYXJ5IGlzIGluc3RhbGxlZC4KKwkgICAgbGliZGlyPQorCSAgICBpZiB0ZXN0IC1mICIkbGliIjsgdGhlbgorCSAgICAgICMgSWYgdGhlcmUgaXMgbm8gZGlyZWN0b3J5IGNvbXBvbmVudCwgdGhlbiBhZGQgb25lLgorCSAgICAgIGNhc2UgJGxpYiBpbgorCSAgICAgICovKiB8ICpcXCopIC4gJGxpYiA7OworCSAgICAgICopIC4gLi8kbGliIDs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgICBsaWJmaWxlPSIkbGliZGlyLyJgJGVjaG8gIlgkbGliIiB8ICRYc2VkIC1lICdzJV4uKi8lJWcnYCAjIyMgdGVzdHN1aXRlOiBza2lwIG5lc3RlZCBxdW90aW5nIHRlc3QKKwkgICAgaWYgdGVzdCAtbiAiJGxpYmRpciIgJiYgdGVzdCAhIC1mICIkbGliZmlsZSI7IHRoZW4KKwkgICAgICAkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBcYCRsaWInIGhhcyBub3QgYmVlbiBpbnN0YWxsZWQgaW4gXGAkbGliZGlyJyIgMT4mMgorCSAgICAgIGZpbmFsaXplPW5vCisJICAgIGZpCisJICBkb25lCisKKwkgIHJlbGlua19jb21tYW5kPQorCSAgIyBOb3RlIHRoYXQgaXQgaXMgbm90IG5lY2Vzc2FyeSBvbiBjeWd3aW4vbWluZ3cgdG8gYXBwZW5kIGEgZG90IHRvCisJICAjIGZvbyBldmVuIGlmIGJvdGggZm9vIGFuZCBGSUxFLmV4ZSBleGlzdDogYXV0b21hdGljLWFwcGVuZC0uZXhlCisJICAjIGJlaGF2aW9yIGhhcHBlbnMgb25seSBmb3IgZXhlYygzKSwgbm90IGZvciBvcGVuKDIpISAgQWxzbywgc291cmNpbmcKKwkgICMgYEZJTEUuJyBkb2VzIG5vdCB3b3JrIG9uIGN5Z3dpbiBtYW5hZ2VkIG1vdW50cy4KKwkgICMKKwkgICMgSWYgdGhlcmUgaXMgbm8gZGlyZWN0b3J5IGNvbXBvbmVudCwgdGhlbiBhZGQgb25lLgorCSAgY2FzZSAkd3JhcHBlciBpbgorCSAgKi8qIHwgKlxcKikgLiAke3dyYXBwZXJ9IDs7CisJICAqKSAuIC4vJHt3cmFwcGVyfSA7OworCSAgZXNhYworCisJICBvdXRwdXRuYW1lPQorCSAgaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgPSBubyAmJiB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuCisJICAgIGlmIHRlc3QgIiRmaW5hbGl6ZSIgPSB5ZXMgJiYgdGVzdCAteiAiJHJ1biI7IHRoZW4KKwkgICAgICB0bXBkaXI9YGZ1bmNfbWt0ZW1wZGlyYAorCSAgICAgIGZpbGU9YCRlY2hvICJYJGZpbGUkc3RyaXBwZWRfZXh0IiB8ICRYc2VkIC1lICdzJV4uKi8lJSdgCisJICAgICAgb3V0cHV0bmFtZT0iJHRtcGRpci8kZmlsZSIKKwkgICAgICAjIFJlcGxhY2UgdGhlIG91dHB1dCBmaWxlIHNwZWNpZmljYXRpb24uCisJICAgICAgcmVsaW5rX2NvbW1hbmQ9YCRlY2hvICJYJHJlbGlua19jb21tYW5kIiB8ICRTUDJOTCB8ICRYc2VkIC1lICdzJUBPVVRQVVRAJSciJG91dHB1dG5hbWUiJyVnJyB8ICROTDJTUGAKKworCSAgICAgICRzaG93ICIkcmVsaW5rX2NvbW1hbmQiCisJICAgICAgaWYgJHJ1biBldmFsICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuIDoKKwkgICAgICBlbHNlCisJCSRlY2hvICIkbW9kZW5hbWU6IGVycm9yOiByZWxpbmsgXGAkZmlsZScgd2l0aCB0aGUgYWJvdmUgY29tbWFuZCBiZWZvcmUgaW5zdGFsbGluZyBpdCIgMT4mMgorCQkke3JtfXIgIiR0bXBkaXIiCisJCWNvbnRpbnVlCisJICAgICAgZmkKKwkgICAgICBmaWxlPSIkb3V0cHV0bmFtZSIKKwkgICAgZWxzZQorCSAgICAgICRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IGNhbm5vdCByZWxpbmsgXGAkZmlsZSciIDE+JjIKKwkgICAgZmkKKwkgIGVsc2UKKwkgICAgIyBJbnN0YWxsIHRoZSBiaW5hcnkgdGhhdCB3ZSBjb21waWxlZCBlYXJsaWVyLgorCSAgICBmaWxlPWAkZWNobyAiWCRmaWxlJHN0cmlwcGVkX2V4dCIgfCAkWHNlZCAtZSAicyVcKFteL10qXCkkJSRvYmpkaXIvXDElImAKKwkgIGZpCisJZmkKKworCSMgcmVtb3ZlIC5leGUgc2luY2UgY3lnd2luIC91c3IvYmluL2luc3RhbGwgd2lsbCBhcHBlbmQgYW5vdGhlcgorCSMgb25lIGFueXdheSAKKwljYXNlICRpbnN0YWxsX3Byb2csJGhvc3QgaW4KKwkqL3Vzci9iaW4vaW5zdGFsbCosKmN5Z3dpbiopCisJICBjYXNlICRmaWxlOiRkZXN0ZmlsZSBpbgorCSAgKi5leGU6Ki5leGUpCisJICAgICMgdGhpcyBpcyBvaworCSAgICA7OworCSAgKi5leGU6KikKKwkgICAgZGVzdGZpbGU9JGRlc3RmaWxlLmV4ZQorCSAgICA7OworCSAgKjoqLmV4ZSkKKwkgICAgZGVzdGZpbGU9YCRlY2hvICRkZXN0ZmlsZSB8ICR7U0VEfSAtZSAncywuZXhlJCwsJ2AKKwkgICAgOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworCSRzaG93ICIkaW5zdGFsbF9wcm9nJHN0cmlwbWUgJGZpbGUgJGRlc3RmaWxlIgorCSRydW4gZXZhbCAiJGluc3RhbGxfcHJvZ1wkc3RyaXBtZSBcJGZpbGUgXCRkZXN0ZmlsZSIgfHwgZXhpdCAkPworCXRlc3QgLW4gIiRvdXRwdXRuYW1lIiAmJiAke3JtfXIgIiR0bXBkaXIiCisJOzsKKyAgICAgIGVzYWMKKyAgICBkb25lCisKKyAgICBmb3IgZmlsZSBpbiAkc3RhdGljbGliczsgZG8KKyAgICAgIG5hbWU9YCRlY2hvICJYJGZpbGUiIHwgJFhzZWQgLWUgJ3MlXi4qLyUlJ2AKKworICAgICAgIyBTZXQgdXAgdGhlIHJhbmxpYiBwYXJhbWV0ZXJzLgorICAgICAgb2xkbGliPSIkZGVzdGRpci8kbmFtZSIKKworICAgICAgJHNob3cgIiRpbnN0YWxsX3Byb2cgJGZpbGUgJG9sZGxpYiIKKyAgICAgICRydW4gZXZhbCAiJGluc3RhbGxfcHJvZyBcJGZpbGUgXCRvbGRsaWIiIHx8IGV4aXQgJD8KKworICAgICAgaWYgdGVzdCAtbiAiJHN0cmlwbWUiICYmIHRlc3QgLW4gIiRvbGRfc3RyaXBsaWIiOyB0aGVuCisJJHNob3cgIiRvbGRfc3RyaXBsaWIgJG9sZGxpYiIKKwkkcnVuIGV2YWwgIiRvbGRfc3RyaXBsaWIgJG9sZGxpYiIgfHwgZXhpdCAkPworICAgICAgZmkKKworICAgICAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIHBvc3RpbnN0YWxsIGNvbW1hbmRzLgorICAgICAgY21kcz0kb2xkX3Bvc3RpbnN0YWxsX2NtZHMKKyAgICAgIHNhdmVfaWZzPSIkSUZTIjsgSUZTPSd+JworICAgICAgZm9yIGNtZCBpbiAkY21kczsgZG8KKwlJRlM9IiRzYXZlX2lmcyIKKwlldmFsIGNtZD1cIiRjbWRcIgorCSRzaG93ICIkY21kIgorCSRydW4gZXZhbCAiJGNtZCIgfHwgZXhpdCAkPworICAgICAgZG9uZQorICAgICAgSUZTPSIkc2F2ZV9pZnMiCisgICAgZG9uZQorCisgICAgaWYgdGVzdCAtbiAiJGZ1dHVyZV9saWJkaXJzIjsgdGhlbgorICAgICAgJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogcmVtZW1iZXIgdG8gcnVuIFxgJHByb2duYW1lIC0tZmluaXNoJGZ1dHVyZV9saWJkaXJzJyIgMT4mMgorICAgIGZpCisKKyAgICBpZiB0ZXN0IC1uICIkY3VycmVudF9saWJkaXJzIjsgdGhlbgorICAgICAgIyBNYXliZSBqdXN0IGRvIGEgZHJ5IHJ1bi4KKyAgICAgIHRlc3QgLW4gIiRydW4iICYmIGN1cnJlbnRfbGliZGlycz0iIC1uJGN1cnJlbnRfbGliZGlycyIKKyAgICAgIGV4ZWNfY21kPSckU0hFTEwgJHByb2dwYXRoICRwcmVzZXJ2ZV9hcmdzIC0tZmluaXNoJGN1cnJlbnRfbGliZGlycycKKyAgICBlbHNlCisgICAgICBleGl0ICRFWElUX1NVQ0NFU1MKKyAgICBmaQorICAgIDs7CisKKyAgIyBsaWJ0b29sIGZpbmlzaCBtb2RlCisgIGZpbmlzaCkKKyAgICBtb2RlbmFtZT0iJG1vZGVuYW1lOiBmaW5pc2giCisgICAgbGliZGlycz0iJG5vbm9wdCIKKyAgICBhZG1pbmNtZHM9CisKKyAgICBpZiB0ZXN0IC1uICIkZmluaXNoX2NtZHMkZmluaXNoX2V2YWwiICYmIHRlc3QgLW4gIiRsaWJkaXJzIjsgdGhlbgorICAgICAgZm9yIGRpcgorICAgICAgZG8KKwlsaWJkaXJzPSIkbGliZGlycyAkZGlyIgorICAgICAgZG9uZQorCisgICAgICBmb3IgbGliZGlyIGluICRsaWJkaXJzOyBkbworCWlmIHRlc3QgLW4gIiRmaW5pc2hfY21kcyI7IHRoZW4KKwkgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBmaW5pc2ggY29tbWFuZHMuCisJICBjbWRzPSRmaW5pc2hfY21kcworCSAgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9J34nCisJICBmb3IgY21kIGluICRjbWRzOyBkbworCSAgICBJRlM9IiRzYXZlX2lmcyIKKwkgICAgZXZhbCBjbWQ9XCIkY21kXCIKKwkgICAgJHNob3cgIiRjbWQiCisJICAgICRydW4gZXZhbCAiJGNtZCIgfHwgYWRtaW5jbWRzPSIkYWRtaW5jbWRzCisgICAgICAgJGNtZCIKKwkgIGRvbmUKKwkgIElGUz0iJHNhdmVfaWZzIgorCWZpCisJaWYgdGVzdCAtbiAiJGZpbmlzaF9ldmFsIjsgdGhlbgorCSAgIyBEbyB0aGUgc2luZ2xlIGZpbmlzaF9ldmFsLgorCSAgZXZhbCBjbWRzPVwiJGZpbmlzaF9ldmFsXCIKKwkgICRydW4gZXZhbCAiJGNtZHMiIHx8IGFkbWluY21kcz0iJGFkbWluY21kcworICAgICAgICRjbWRzIgorCWZpCisgICAgICBkb25lCisgICAgZmkKKworICAgICMgRXhpdCBoZXJlIGlmIHRoZXkgd2FudGVkIHNpbGVudCBtb2RlLgorICAgIHRlc3QgIiRzaG93IiA9IDogJiYgZXhpdCAkRVhJVF9TVUNDRVNTCisKKyAgICAkZWNobyAiWC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iIHwgJFhzZWQKKyAgICAkZWNobyAiTGlicmFyaWVzIGhhdmUgYmVlbiBpbnN0YWxsZWQgaW46IgorICAgIGZvciBsaWJkaXIgaW4gJGxpYmRpcnM7IGRvCisgICAgICAkZWNobyAiICAgJGxpYmRpciIKKyAgICBkb25lCisgICAgJGVjaG8KKyAgICAkZWNobyAiSWYgeW91IGV2ZXIgaGFwcGVuIHRvIHdhbnQgdG8gbGluayBhZ2FpbnN0IGluc3RhbGxlZCBsaWJyYXJpZXMiCisgICAgJGVjaG8gImluIGEgZ2l2ZW4gZGlyZWN0b3J5LCBMSUJESVIsIHlvdSBtdXN0IGVpdGhlciB1c2UgbGlidG9vbCwgYW5kIgorICAgICRlY2hvICJzcGVjaWZ5IHRoZSBmdWxsIHBhdGhuYW1lIG9mIHRoZSBsaWJyYXJ5LCBvciB1c2UgdGhlIFxgLUxMSUJESVInIgorICAgICRlY2hvICJmbGFnIGR1cmluZyBsaW5raW5nIGFuZCBkbyBhdCBsZWFzdCBvbmUgb2YgdGhlIGZvbGxvd2luZzoiCisgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiOyB0aGVuCisgICAgICAkZWNobyAiICAgLSBhZGQgTElCRElSIHRvIHRoZSBcYCRzaGxpYnBhdGhfdmFyJyBlbnZpcm9ubWVudCB2YXJpYWJsZSIKKyAgICAgICRlY2hvICIgICAgIGR1cmluZyBleGVjdXRpb24iCisgICAgZmkKKyAgICBpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCisgICAgICAkZWNobyAiICAgLSBhZGQgTElCRElSIHRvIHRoZSBcYCRydW5wYXRoX3ZhcicgZW52aXJvbm1lbnQgdmFyaWFibGUiCisgICAgICAkZWNobyAiICAgICBkdXJpbmcgbGlua2luZyIKKyAgICBmaQorICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgorICAgICAgbGliZGlyPUxJQkRJUgorICAgICAgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorCisgICAgICAkZWNobyAiICAgLSB1c2UgdGhlIFxgJGZsYWcnIGxpbmtlciBmbGFnIgorICAgIGZpCisgICAgaWYgdGVzdCAtbiAiJGFkbWluY21kcyI7IHRoZW4KKyAgICAgICRlY2hvICIgICAtIGhhdmUgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBydW4gdGhlc2UgY29tbWFuZHM6JGFkbWluY21kcyIKKyAgICBmaQorICAgIGlmIHRlc3QgLWYgL2V0Yy9sZC5zby5jb25mOyB0aGVuCisgICAgICAkZWNobyAiICAgLSBoYXZlIHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3IgYWRkIExJQkRJUiB0byBcYC9ldGMvbGQuc28uY29uZiciCisgICAgZmkKKyAgICAkZWNobworICAgICRlY2hvICJTZWUgYW55IG9wZXJhdGluZyBzeXN0ZW0gZG9jdW1lbnRhdGlvbiBhYm91dCBzaGFyZWQgbGlicmFyaWVzIGZvciIKKyAgICAkZWNobyAibW9yZSBpbmZvcm1hdGlvbiwgc3VjaCBhcyB0aGUgbGQoMSkgYW5kIGxkLnNvKDgpIG1hbnVhbCBwYWdlcy4iCisgICAgJGVjaG8gIlgtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiB8ICRYc2VkCisgICAgZXhpdCAkRVhJVF9TVUNDRVNTCisgICAgOzsKKworICAjIGxpYnRvb2wgZXhlY3V0ZSBtb2RlCisgIGV4ZWN1dGUpCisgICAgbW9kZW5hbWU9IiRtb2RlbmFtZTogZXhlY3V0ZSIKKworICAgICMgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSBjb21tYW5kIG5hbWUuCisgICAgY21kPSIkbm9ub3B0IgorICAgIGlmIHRlc3QgLXogIiRjbWQiOyB0aGVuCisgICAgICAkZWNobyAiJG1vZGVuYW1lOiB5b3UgbXVzdCBzcGVjaWZ5IGEgQ09NTUFORCIgMT4mMgorICAgICAgJGVjaG8gIiRoZWxwIgorICAgICAgZXhpdCAkRVhJVF9GQUlMVVJFCisgICAgZmkKKworICAgICMgSGFuZGxlIC1kbG9wZW4gZmxhZ3MgaW1tZWRpYXRlbHkuCisgICAgZm9yIGZpbGUgaW4gJGV4ZWN1dGVfZGxmaWxlczsgZG8KKyAgICAgIGlmIHRlc3QgISAtZiAiJGZpbGUiOyB0aGVuCisJJGVjaG8gIiRtb2RlbmFtZTogXGAkZmlsZScgaXMgbm90IGEgZmlsZSIgMT4mMgorCSRlY2hvICIkaGVscCIgMT4mMgorCWV4aXQgJEVYSVRfRkFJTFVSRQorICAgICAgZmkKKworICAgICAgZGlyPQorICAgICAgY2FzZSAkZmlsZSBpbgorICAgICAgKi5sYSkKKwkjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBhcmNoaXZlLgorCWlmICgke1NFRH0gLWUgJzJxJyAkZmlsZSB8IGdyZXAgIl4jIEdlbmVyYXRlZCBieSAuKiRQQUNLQUdFIikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKwllbHNlCisJICAkZWNobyAiJG1vZGVuYW1lOiBcYCRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIgMT4mMgorCSAgJGVjaG8gIiRoZWxwIiAxPiYyCisJICBleGl0ICRFWElUX0ZBSUxVUkUKKwlmaQorCisJIyBSZWFkIHRoZSBsaWJ0b29sIGxpYnJhcnkuCisJZGxuYW1lPQorCWxpYnJhcnlfbmFtZXM9CisKKwkjIElmIHRoZXJlIGlzIG5vIGRpcmVjdG9yeSBjb21wb25lbnQsIHRoZW4gYWRkIG9uZS4KKwljYXNlICRmaWxlIGluCisJKi8qIHwgKlxcKikgLiAkZmlsZSA7OworCSopIC4gLi8kZmlsZSA7OworCWVzYWMKKworCSMgU2tpcCB0aGlzIGxpYnJhcnkgaWYgaXQgY2Fubm90IGJlIGRsb3BlbmVkLgorCWlmIHRlc3QgLXogIiRkbG5hbWUiOyB0aGVuCisJICAjIFdhcm4gaWYgaXQgd2FzIGEgc2hhcmVkIGxpYnJhcnkuCisJICB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyIgJiYgJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogXGAkZmlsZScgd2FzIG5vdCBsaW5rZWQgd2l0aCBcYC1leHBvcnQtZHluYW1pYyciCisJICBjb250aW51ZQorCWZpCisKKwlkaXI9YCRlY2hvICJYJGZpbGUiIHwgJFhzZWQgLWUgJ3MlL1teL10qJCUlJ2AKKwl0ZXN0ICJYJGRpciIgPSAiWCRmaWxlIiAmJiBkaXI9LgorCisJaWYgdGVzdCAtZiAiJGRpci8kb2JqZGlyLyRkbG5hbWUiOyB0aGVuCisJICBkaXI9IiRkaXIvJG9iamRpciIKKwllbHNlCisJICAkZWNobyAiJG1vZGVuYW1lOiBjYW5ub3QgZmluZCBcYCRkbG5hbWUnIGluIFxgJGRpcicgb3IgXGAkZGlyLyRvYmpkaXInIiAxPiYyCisJICBleGl0ICRFWElUX0ZBSUxVUkUKKwlmaQorCTs7CisKKyAgICAgICoubG8pCisJIyBKdXN0IGFkZCB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIC5sbyBmaWxlLgorCWRpcj1gJGVjaG8gIlgkZmlsZSIgfCAkWHNlZCAtZSAncyUvW14vXSokJSUnYAorCXRlc3QgIlgkZGlyIiA9ICJYJGZpbGUiICYmIGRpcj0uCisJOzsKKworICAgICAgKikKKwkkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nIFxgLWRsb3BlbicgaXMgaWdub3JlZCBmb3Igbm9uLWxpYnRvb2wgbGlicmFyaWVzIGFuZCBvYmplY3RzIiAxPiYyCisJY29udGludWUKKwk7OworICAgICAgZXNhYworCisgICAgICAjIEdldCB0aGUgYWJzb2x1dGUgcGF0aG5hbWUuCisgICAgICBhYnNkaXI9YGNkICIkZGlyIiAmJiBwd2RgCisgICAgICB0ZXN0IC1uICIkYWJzZGlyIiAmJiBkaXI9IiRhYnNkaXIiCisKKyAgICAgICMgTm93IGFkZCB0aGUgZGlyZWN0b3J5IHRvIHNobGlicGF0aF92YXIuCisgICAgICBpZiBldmFsICJ0ZXN0IC16IFwiXCQkc2hsaWJwYXRoX3ZhclwiIjsgdGhlbgorCWV2YWwgIiRzaGxpYnBhdGhfdmFyPVwiXCRkaXJcIiIKKyAgICAgIGVsc2UKKwlldmFsICIkc2hsaWJwYXRoX3Zhcj1cIlwkZGlyOlwkJHNobGlicGF0aF92YXJcIiIKKyAgICAgIGZpCisgICAgZG9uZQorCisgICAgIyBUaGlzIHZhcmlhYmxlIHRlbGxzIHdyYXBwZXIgc2NyaXB0cyBqdXN0IHRvIHNldCBzaGxpYnBhdGhfdmFyCisgICAgIyByYXRoZXIgdGhhbiBydW5uaW5nIHRoZWlyIHByb2dyYW1zLgorICAgIGxpYnRvb2xfZXhlY3V0ZV9tYWdpYz0iJG1hZ2ljIgorCisgICAgIyBDaGVjayBpZiBhbnkgb2YgdGhlIGFyZ3VtZW50cyBpcyBhIHdyYXBwZXIgc2NyaXB0LgorICAgIGFyZ3M9CisgICAgZm9yIGZpbGUKKyAgICBkbworICAgICAgY2FzZSAkZmlsZSBpbgorICAgICAgLSopIDs7CisgICAgICAqKQorCSMgRG8gYSB0ZXN0IHRvIHNlZSBpZiB0aGlzIGlzIHJlYWxseSBhIGxpYnRvb2wgcHJvZ3JhbS4KKwlpZiAoJHtTRUR9IC1lICc0cScgJGZpbGUgfCBncmVwICJeIyBHZW5lcmF0ZWQgYnkgLiokUEFDS0FHRSIpID4vZGV2L251bGwgMj4mMTsgdGhlbgorCSAgIyBJZiB0aGVyZSBpcyBubyBkaXJlY3RvcnkgY29tcG9uZW50LCB0aGVuIGFkZCBvbmUuCisJICBjYXNlICRmaWxlIGluCisJICAqLyogfCAqXFwqKSAuICRmaWxlIDs7CisJICAqKSAuIC4vJGZpbGUgOzsKKwkgIGVzYWMKKworCSAgIyBUcmFuc2Zvcm0gYXJnIHRvIHdyYXBwZWQgbmFtZS4KKwkgIGZpbGU9IiRwcm9nZGlyLyRwcm9ncmFtIgorCWZpCisJOzsKKyAgICAgIGVzYWMKKyAgICAgICMgUXVvdGUgYXJndW1lbnRzICh0byBwcmVzZXJ2ZSBzaGVsbCBtZXRhY2hhcmFjdGVycykuCisgICAgICBmaWxlPWAkZWNobyAiWCRmaWxlIiB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKyAgICAgIGFyZ3M9IiRhcmdzIFwiJGZpbGVcIiIKKyAgICBkb25lCisKKyAgICBpZiB0ZXN0IC16ICIkcnVuIjsgdGhlbgorICAgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiOyB0aGVuCisJIyBFeHBvcnQgdGhlIHNobGlicGF0aF92YXIuCisJZXZhbCAiZXhwb3J0ICRzaGxpYnBhdGhfdmFyIgorICAgICAgZmkKKworICAgICAgIyBSZXN0b3JlIHNhdmVkIGVudmlyb25tZW50IHZhcmlhYmxlcworICAgICAgZm9yIGx0X3ZhciBpbiBMQU5HIExDX0FMTCBMQ19DVFlQRSBMQ19DT0xMQVRFIExDX01FU1NBR0VTCisgICAgICBkbworICAgICAgIGV2YWwgImlmIHRlc3QgXCJcJHtzYXZlXyRsdF92YXIrc2V0fVwiID0gc2V0OyB0aGVuCisgICAgICAgICAgICAgICAkbHRfdmFyPVwkc2F2ZV8kbHRfdmFyOyBleHBvcnQgJGx0X3ZhcgorICAgICAgICAgICAgIGZpIgorICAgICAgZG9uZQorCisKKyAgICAgICMgTm93IHByZXBhcmUgdG8gYWN0dWFsbHkgZXhlYyB0aGUgY29tbWFuZC4KKyAgICAgIGV4ZWNfY21kPSJcJGNtZCRhcmdzIgorICAgIGVsc2UKKyAgICAgICMgRGlzcGxheSB3aGF0IHdvdWxkIGJlIGRvbmUuCisgICAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KKwlldmFsICJcJGVjaG8gXCJcJHNobGlicGF0aF92YXI9XCQkc2hsaWJwYXRoX3ZhclwiIgorCSRlY2hvICJleHBvcnQgJHNobGlicGF0aF92YXIiCisgICAgICBmaQorICAgICAgJGVjaG8gIiRjbWQkYXJncyIKKyAgICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworICAgIGZpCisgICAgOzsKKworICAjIGxpYnRvb2wgY2xlYW4gYW5kIHVuaW5zdGFsbCBtb2RlCisgIGNsZWFuIHwgdW5pbnN0YWxsKQorICAgIG1vZGVuYW1lPSIkbW9kZW5hbWU6ICRtb2RlIgorICAgIHJtPSIkbm9ub3B0IgorICAgIGZpbGVzPQorICAgIHJtZm9yY2U9CisgICAgZXhpdF9zdGF0dXM9MAorCisgICAgIyBUaGlzIHZhcmlhYmxlIHRlbGxzIHdyYXBwZXIgc2NyaXB0cyBqdXN0IHRvIHNldCB2YXJpYWJsZXMgcmF0aGVyCisgICAgIyB0aGFuIHJ1bm5pbmcgdGhlaXIgcHJvZ3JhbXMuCisgICAgbGlidG9vbF9pbnN0YWxsX21hZ2ljPSIkbWFnaWMiCisKKyAgICBmb3IgYXJnCisgICAgZG8KKyAgICAgIGNhc2UgJGFyZyBpbgorICAgICAgLWYpIHJtPSIkcm0gJGFyZyI7IHJtZm9yY2U9eWVzIDs7CisgICAgICAtKikgcm09IiRybSAkYXJnIiA7OworICAgICAgKikgZmlsZXM9IiRmaWxlcyAkYXJnIiA7OworICAgICAgZXNhYworICAgIGRvbmUKKworICAgIGlmIHRlc3QgLXogIiRybSI7IHRoZW4KKyAgICAgICRlY2hvICIkbW9kZW5hbWU6IHlvdSBtdXN0IHNwZWNpZnkgYW4gUk0gcHJvZ3JhbSIgMT4mMgorICAgICAgJGVjaG8gIiRoZWxwIiAxPiYyCisgICAgICBleGl0ICRFWElUX0ZBSUxVUkUKKyAgICBmaQorCisgICAgcm1kaXJzPQorCisgICAgb3JpZ29iamRpcj0iJG9iamRpciIKKyAgICBmb3IgZmlsZSBpbiAkZmlsZXM7IGRvCisgICAgICBkaXI9YCRlY2hvICJYJGZpbGUiIHwgJFhzZWQgLWUgJ3MlL1teL10qJCUlJ2AKKyAgICAgIGlmIHRlc3QgIlgkZGlyIiA9ICJYJGZpbGUiOyB0aGVuCisJZGlyPS4KKwlvYmpkaXI9IiRvcmlnb2JqZGlyIgorICAgICAgZWxzZQorCW9iamRpcj0iJGRpci8kb3JpZ29iamRpciIKKyAgICAgIGZpCisgICAgICBuYW1lPWAkZWNobyAiWCRmaWxlIiB8ICRYc2VkIC1lICdzJV4uKi8lJSdgCisgICAgICB0ZXN0ICIkbW9kZSIgPSB1bmluc3RhbGwgJiYgb2JqZGlyPSIkZGlyIgorCisgICAgICAjIFJlbWVtYmVyIG9iamRpciBmb3IgcmVtb3ZhbCBsYXRlciwgYmVpbmcgY2FyZWZ1bCB0byBhdm9pZCBkdXBsaWNhdGVzCisgICAgICBpZiB0ZXN0ICIkbW9kZSIgPSBjbGVhbjsgdGhlbgorCWNhc2UgIiAkcm1kaXJzICIgaW4KKwkgICoiICRvYmpkaXIgIiopIDs7CisJICAqKSBybWRpcnM9IiRybWRpcnMgJG9iamRpciIgOzsKKwllc2FjCisgICAgICBmaQorCisgICAgICAjIERvbid0IGVycm9yIGlmIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3QgYW5kIHJtIC1mIHdhcyB1c2VkLgorICAgICAgaWYgKHRlc3QgLUwgIiRmaWxlIikgPi9kZXYvbnVsbCAyPiYxIFwKKwl8fCAodGVzdCAtaCAiJGZpbGUiKSA+L2Rldi9udWxsIDI+JjEgXAorCXx8IHRlc3QgLWYgIiRmaWxlIjsgdGhlbgorCToKKyAgICAgIGVsaWYgdGVzdCAtZCAiJGZpbGUiOyB0aGVuCisJZXhpdF9zdGF0dXM9MQorCWNvbnRpbnVlCisgICAgICBlbGlmIHRlc3QgIiRybWZvcmNlIiA9IHllczsgdGhlbgorCWNvbnRpbnVlCisgICAgICBmaQorCisgICAgICBybWZpbGVzPSIkZmlsZSIKKworICAgICAgY2FzZSAkbmFtZSBpbgorICAgICAgKi5sYSkKKwkjIFBvc3NpYmx5IGEgbGlidG9vbCBhcmNoaXZlLCBzbyB2ZXJpZnkgaXQuCisJaWYgKCR7U0VEfSAtZSAnMnEnICRmaWxlIHwgZ3JlcCAiXiMgR2VuZXJhdGVkIGJ5IC4qJFBBQ0tBR0UiKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkgIC4gJGRpci8kbmFtZQorCisJICAjIERlbGV0ZSB0aGUgbGlidG9vbCBsaWJyYXJpZXMgYW5kIHN5bWxpbmtzLgorCSAgZm9yIG4gaW4gJGxpYnJhcnlfbmFtZXM7IGRvCisJICAgIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvJG4iCisJICBkb25lCisJICB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiICYmIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvJG9sZF9saWJyYXJ5IgorCisJICBjYXNlICIkbW9kZSIgaW4KKwkgIGNsZWFuKQorCSAgICBjYXNlICIgICRsaWJyYXJ5X25hbWVzICIgaW4KKwkgICAgIyAiICAiIGluIHRoZSBiZWdpbm5pbmcgY2F0Y2hlcyBlbXB0eSAkZGxuYW1lCisJICAgICoiICRkbG5hbWUgIiopIDs7CisJICAgICopIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvJGRsbmFtZSIgOzsKKwkgICAgZXNhYworCSAgICAgdGVzdCAtbiAiJGxpYmRpciIgJiYgcm1maWxlcz0iJHJtZmlsZXMgJG9iamRpci8kbmFtZSAkb2JqZGlyLyR7bmFtZX1pIgorCSAgICA7OworCSAgdW5pbnN0YWxsKQorCSAgICBpZiB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyI7IHRoZW4KKwkgICAgICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgcG9zdHVuaW5zdGFsbCBjb21tYW5kcy4KKwkgICAgICBjbWRzPSRwb3N0dW5pbnN0YWxsX2NtZHMKKwkgICAgICBzYXZlX2lmcz0iJElGUyI7IElGUz0nficKKwkgICAgICBmb3IgY21kIGluICRjbWRzOyBkbworCQlJRlM9IiRzYXZlX2lmcyIKKwkJZXZhbCBjbWQ9XCIkY21kXCIKKwkJJHNob3cgIiRjbWQiCisJCSRydW4gZXZhbCAiJGNtZCIKKwkJaWYgdGVzdCAiJD8iIC1uZSAwICYmIHRlc3QgIiRybWZvcmNlIiAhPSB5ZXM7IHRoZW4KKwkJICBleGl0X3N0YXR1cz0xCisJCWZpCisJICAgICAgZG9uZQorCSAgICAgIElGUz0iJHNhdmVfaWZzIgorCSAgICBmaQorCisJICAgIGlmIHRlc3QgLW4gIiRvbGRfbGlicmFyeSI7IHRoZW4KKwkgICAgICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgb2xkX3Bvc3R1bmluc3RhbGwgY29tbWFuZHMuCisJICAgICAgY21kcz0kb2xkX3Bvc3R1bmluc3RhbGxfY21kcworCSAgICAgIHNhdmVfaWZzPSIkSUZTIjsgSUZTPSd+JworCSAgICAgIGZvciBjbWQgaW4gJGNtZHM7IGRvCisJCUlGUz0iJHNhdmVfaWZzIgorCQlldmFsIGNtZD1cIiRjbWRcIgorCQkkc2hvdyAiJGNtZCIKKwkJJHJ1biBldmFsICIkY21kIgorCQlpZiB0ZXN0ICIkPyIgLW5lIDAgJiYgdGVzdCAiJHJtZm9yY2UiICE9IHllczsgdGhlbgorCQkgIGV4aXRfc3RhdHVzPTEKKwkJZmkKKwkgICAgICBkb25lCisJICAgICAgSUZTPSIkc2F2ZV9pZnMiCisJICAgIGZpCisJICAgICMgRklYTUU6IHNob3VsZCByZWluc3RhbGwgdGhlIGJlc3QgcmVtYWluaW5nIHNoYXJlZCBsaWJyYXJ5LgorCSAgICA7OworCSAgZXNhYworCWZpCisJOzsKKworICAgICAgKi5sbykKKwkjIFBvc3NpYmx5IGEgbGlidG9vbCBvYmplY3QsIHNvIHZlcmlmeSBpdC4KKwlpZiAoJHtTRUR9IC1lICcycScgJGZpbGUgfCBncmVwICJeIyBHZW5lcmF0ZWQgYnkgLiokUEFDS0FHRSIpID4vZGV2L251bGwgMj4mMTsgdGhlbgorCisJICAjIFJlYWQgdGhlIC5sbyBmaWxlCisJICAuICRkaXIvJG5hbWUKKworCSAgIyBBZGQgUElDIG9iamVjdCB0byB0aGUgbGlzdCBvZiBmaWxlcyB0byByZW1vdmUuCisJICBpZiB0ZXN0IC1uICIkcGljX29iamVjdCIgXAorCSAgICAgJiYgdGVzdCAiJHBpY19vYmplY3QiICE9IG5vbmU7IHRoZW4KKwkgICAgcm1maWxlcz0iJHJtZmlsZXMgJGRpci8kcGljX29iamVjdCIKKwkgIGZpCisKKwkgICMgQWRkIG5vbi1QSUMgb2JqZWN0IHRvIHRoZSBsaXN0IG9mIGZpbGVzIHRvIHJlbW92ZS4KKwkgIGlmIHRlc3QgLW4gIiRub25fcGljX29iamVjdCIgXAorCSAgICAgJiYgdGVzdCAiJG5vbl9waWNfb2JqZWN0IiAhPSBub25lOyB0aGVuCisJICAgIHJtZmlsZXM9IiRybWZpbGVzICRkaXIvJG5vbl9waWNfb2JqZWN0IgorCSAgZmkKKwlmaQorCTs7CisKKyAgICAgICopCisJaWYgdGVzdCAiJG1vZGUiID0gY2xlYW4gOyB0aGVuCisJICBub2V4ZW5hbWU9JG5hbWUKKwkgIGNhc2UgJGZpbGUgaW4KKwkgICouZXhlKQorCSAgICBmaWxlPWAkZWNobyAkZmlsZXwke1NFRH0gJ3MsLmV4ZSQsLCdgCisJICAgIG5vZXhlbmFtZT1gJGVjaG8gJG5hbWV8JHtTRUR9ICdzLC5leGUkLCwnYAorCSAgICAjICRmaWxlIHdpdGggLmV4ZSBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIHJtZmlsZXMsCisJICAgICMgYWRkICRmaWxlIHdpdGhvdXQgLmV4ZQorCSAgICBybWZpbGVzPSIkcm1maWxlcyAkZmlsZSIKKwkgICAgOzsKKwkgIGVzYWMKKwkgICMgRG8gYSB0ZXN0IHRvIHNlZSBpZiB0aGlzIGlzIGEgbGlidG9vbCBwcm9ncmFtLgorCSAgaWYgKCR7U0VEfSAtZSAnNHEnICRmaWxlIHwgZ3JlcCAiXiMgR2VuZXJhdGVkIGJ5IC4qJFBBQ0tBR0UiKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkgICAgcmVsaW5rX2NvbW1hbmQ9CisJICAgIC4gJGRpci8kbm9leGVuYW1lCisKKwkgICAgIyBub3RlICRuYW1lIHN0aWxsIGNvbnRhaW5zIC5leGUgaWYgaXQgd2FzIGluICRmaWxlIG9yaWdpbmFsbHkKKwkgICAgIyBhcyBkb2VzIHRoZSB2ZXJzaW9uIG9mICRmaWxlIHRoYXQgd2FzIGFkZGVkIGludG8gJHJtZmlsZXMKKwkgICAgcm1maWxlcz0iJHJtZmlsZXMgJG9iamRpci8kbmFtZSAkb2JqZGlyLyR7bmFtZX1TLiR7b2JqZXh0fSIKKwkgICAgaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgPSB5ZXMgJiYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgorCSAgICAgIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvbHQtJG5hbWUiCisJICAgIGZpCisJICAgIGlmIHRlc3QgIlgkbm9leGVuYW1lIiAhPSAiWCRuYW1lIiA7IHRoZW4KKwkgICAgICBybWZpbGVzPSIkcm1maWxlcyAkb2JqZGlyL2x0LSR7bm9leGVuYW1lfS5jIgorCSAgICBmaQorCSAgZmkKKwlmaQorCTs7CisgICAgICBlc2FjCisgICAgICAkc2hvdyAiJHJtICRybWZpbGVzIgorICAgICAgJHJ1biAkcm0gJHJtZmlsZXMgfHwgZXhpdF9zdGF0dXM9MQorICAgIGRvbmUKKyAgICBvYmpkaXI9IiRvcmlnb2JqZGlyIgorCisgICAgIyBUcnkgdG8gcmVtb3ZlIHRoZSAke29iamRpcn1zIGluIHRoZSBkaXJlY3RvcmllcyB3aGVyZSB3ZSBkZWxldGVkIGZpbGVzCisgICAgZm9yIGRpciBpbiAkcm1kaXJzOyBkbworICAgICAgaWYgdGVzdCAtZCAiJGRpciI7IHRoZW4KKwkkc2hvdyAicm1kaXIgJGRpciIKKwkkcnVuIHJtZGlyICRkaXIgPi9kZXYvbnVsbCAyPiYxCisgICAgICBmaQorICAgIGRvbmUKKworICAgIGV4aXQgJGV4aXRfc3RhdHVzCisgICAgOzsKKworICAiIikKKyAgICAkZWNobyAiJG1vZGVuYW1lOiB5b3UgbXVzdCBzcGVjaWZ5IGEgTU9ERSIgMT4mMgorICAgICRlY2hvICIkZ2VuZXJpY19oZWxwIiAxPiYyCisgICAgZXhpdCAkRVhJVF9GQUlMVVJFCisgICAgOzsKKyAgZXNhYworCisgIGlmIHRlc3QgLXogIiRleGVjX2NtZCI7IHRoZW4KKyAgICAkZWNobyAiJG1vZGVuYW1lOiBpbnZhbGlkIG9wZXJhdGlvbiBtb2RlIFxgJG1vZGUnIiAxPiYyCisgICAgJGVjaG8gIiRnZW5lcmljX2hlbHAiIDE+JjIKKyAgICBleGl0ICRFWElUX0ZBSUxVUkUKKyAgZmkKK2ZpICMgdGVzdCAteiAiJHNob3dfaGVscCIKKworaWYgdGVzdCAtbiAiJGV4ZWNfY21kIjsgdGhlbgorICBldmFsIGV4ZWMgJGV4ZWNfY21kCisgIGV4aXQgJEVYSVRfRkFJTFVSRQorZmkKKworIyBXZSBuZWVkIHRvIGRpc3BsYXkgaGVscCBmb3IgZWFjaCBvZiB0aGUgbW9kZXMuCitjYXNlICRtb2RlIGluCisiIikgJGVjaG8gXAorIlVzYWdlOiAkbW9kZW5hbWUgW09QVElPTl0uLi4gW01PREUtQVJHXS4uLgorCitQcm92aWRlIGdlbmVyYWxpemVkIGxpYnJhcnktYnVpbGRpbmcgc3VwcG9ydCBzZXJ2aWNlcy4KKworICAgIC0tY29uZmlnICAgICAgICAgIHNob3cgYWxsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCisgICAgLS1kZWJ1ZyAgICAgICAgICAgZW5hYmxlIHZlcmJvc2Ugc2hlbGwgdHJhY2luZworLW4sIC0tZHJ5LXJ1biAgICAgICAgIGRpc3BsYXkgY29tbWFuZHMgd2l0aG91dCBtb2RpZnlpbmcgYW55IGZpbGVzCisgICAgLS1mZWF0dXJlcyAgICAgICAgZGlzcGxheSBiYXNpYyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGFuZCBleGl0CisgICAgLS1maW5pc2ggICAgICAgICAgc2FtZSBhcyBcYC0tbW9kZT1maW5pc2gnCisgICAgLS1oZWxwICAgICAgICAgICAgZGlzcGxheSB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgIC0tbW9kZT1NT0RFICAgICAgIHVzZSBvcGVyYXRpb24gbW9kZSBNT0RFIFtkZWZhdWx0PWluZmVycmVkIGZyb20gTU9ERS1BUkdTXQorICAgIC0tcXVpZXQgICAgICAgICAgIHNhbWUgYXMgXGAtLXNpbGVudCcKKyAgICAtLXNpbGVudCAgICAgICAgICBkb24ndCBwcmludCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzCisgICAgLS10YWc9VEFHICAgICAgICAgdXNlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZyb20gdGFnIFRBRworICAgIC0tdmVyc2lvbiAgICAgICAgIHByaW50IHZlcnNpb24gaW5mb3JtYXRpb24KKworTU9ERSBtdXN0IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgICBjbGVhbiAgICAgICAgICAgcmVtb3ZlIGZpbGVzIGZyb20gdGhlIGJ1aWxkIGRpcmVjdG9yeQorICAgICAgY29tcGlsZSAgICAgICAgIGNvbXBpbGUgYSBzb3VyY2UgZmlsZSBpbnRvIGEgbGlidG9vbCBvYmplY3QKKyAgICAgIGV4ZWN1dGUgICAgICAgICBhdXRvbWF0aWNhbGx5IHNldCBsaWJyYXJ5IHBhdGgsIHRoZW4gcnVuIGEgcHJvZ3JhbQorICAgICAgZmluaXNoICAgICAgICAgIGNvbXBsZXRlIHRoZSBpbnN0YWxsYXRpb24gb2YgbGlidG9vbCBsaWJyYXJpZXMKKyAgICAgIGluc3RhbGwgICAgICAgICBpbnN0YWxsIGxpYnJhcmllcyBvciBleGVjdXRhYmxlcworICAgICAgbGluayAgICAgICAgICAgIGNyZWF0ZSBhIGxpYnJhcnkgb3IgYW4gZXhlY3V0YWJsZQorICAgICAgdW5pbnN0YWxsICAgICAgIHJlbW92ZSBsaWJyYXJpZXMgZnJvbSBhbiBpbnN0YWxsZWQgZGlyZWN0b3J5CisKK01PREUtQVJHUyB2YXJ5IGRlcGVuZGluZyBvbiB0aGUgTU9ERS4gIFRyeSBcYCRtb2RlbmFtZSAtLWhlbHAgLS1tb2RlPU1PREUnIGZvcgorYSBtb3JlIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIE1PREUuCisKK1JlcG9ydCBidWdzIHRvIDxidWctbGlidG9vbEBnbnUub3JnPi4iCisgIGV4aXQgJEVYSVRfU1VDQ0VTUworICA7OworCitjbGVhbikKKyAgJGVjaG8gXAorIlVzYWdlOiAkbW9kZW5hbWUgW09QVElPTl0uLi4gLS1tb2RlPWNsZWFuIFJNIFtSTS1PUFRJT05dLi4uIEZJTEUuLi4KKworUmVtb3ZlIGZpbGVzIGZyb20gdGhlIGJ1aWxkIGRpcmVjdG9yeS4KKworUk0gaXMgdGhlIG5hbWUgb2YgdGhlIHByb2dyYW0gdG8gdXNlIHRvIGRlbGV0ZSBmaWxlcyBhc3NvY2lhdGVkIHdpdGggZWFjaCBGSUxFCisodHlwaWNhbGx5IFxgL2Jpbi9ybScpLiAgUk0tT1BUSU9OUyBhcmUgb3B0aW9ucyAoc3VjaCBhcyBcYC1mJykgdG8gYmUgcGFzc2VkCit0byBSTS4KKworSWYgRklMRSBpcyBhIGxpYnRvb2wgbGlicmFyeSwgb2JqZWN0IG9yIHByb2dyYW0sIGFsbCB0aGUgZmlsZXMgYXNzb2NpYXRlZAord2l0aCBpdCBhcmUgZGVsZXRlZC4gT3RoZXJ3aXNlLCBvbmx5IEZJTEUgaXRzZWxmIGlzIGRlbGV0ZWQgdXNpbmcgUk0uIgorICA7OworCitjb21waWxlKQorICAkZWNobyBcCisiVXNhZ2U6ICRtb2RlbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9Y29tcGlsZSBDT01QSUxFLUNPTU1BTkQuLi4gU09VUkNFRklMRQorCitDb21waWxlIGEgc291cmNlIGZpbGUgaW50byBhIGxpYnRvb2wgbGlicmFyeSBvYmplY3QuCisKK1RoaXMgbW9kZSBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBvcHRpb25zOgorCisgIC1vIE9VVFBVVC1GSUxFICAgIHNldCB0aGUgb3V0cHV0IGZpbGUgbmFtZSB0byBPVVRQVVQtRklMRQorICAtcHJlZmVyLXBpYyAgICAgICB0cnkgdG8gYnVpbGRpbmcgUElDIG9iamVjdHMgb25seQorICAtcHJlZmVyLW5vbi1waWMgICB0cnkgdG8gYnVpbGRpbmcgbm9uLVBJQyBvYmplY3RzIG9ubHkKKyAgLXN0YXRpYyAgICAgICAgICAgYWx3YXlzIGJ1aWxkIGEgXGAubycgZmlsZSBzdWl0YWJsZSBmb3Igc3RhdGljIGxpbmtpbmcKKworQ09NUElMRS1DT01NQU5EIGlzIGEgY29tbWFuZCB0byBiZSB1c2VkIGluIGNyZWF0aW5nIGEgXGBzdGFuZGFyZCcgb2JqZWN0IGZpbGUKK2Zyb20gdGhlIGdpdmVuIFNPVVJDRUZJTEUuCisKK1RoZSBvdXRwdXQgZmlsZSBuYW1lIGlzIGRldGVybWluZWQgYnkgcmVtb3ZpbmcgdGhlIGRpcmVjdG9yeSBjb21wb25lbnQgZnJvbQorU09VUkNFRklMRSwgdGhlbiBzdWJzdGl0dXRpbmcgdGhlIEMgc291cmNlIGNvZGUgc3VmZml4IFxgLmMnIHdpdGggdGhlCitsaWJyYXJ5IG9iamVjdCBzdWZmaXgsIFxgLmxvJy4iCisgIDs7CisKK2V4ZWN1dGUpCisgICRlY2hvIFwKKyJVc2FnZTogJG1vZGVuYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1leGVjdXRlIENPTU1BTkQgW0FSR1NdLi4uCisKK0F1dG9tYXRpY2FsbHkgc2V0IGxpYnJhcnkgcGF0aCwgdGhlbiBydW4gYSBwcm9ncmFtLgorCitUaGlzIG1vZGUgYWNjZXB0cyB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgb3B0aW9uczoKKworICAtZGxvcGVuIEZJTEUgICAgICBhZGQgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIEZJTEUgdG8gdGhlIGxpYnJhcnkgcGF0aAorCitUaGlzIG1vZGUgc2V0cyB0aGUgbGlicmFyeSBwYXRoIGVudmlyb25tZW50IHZhcmlhYmxlIGFjY29yZGluZyB0byBcYC1kbG9wZW4nCitmbGFncy4KKworSWYgYW55IG9mIHRoZSBBUkdTIGFyZSBsaWJ0b29sIGV4ZWN1dGFibGUgd3JhcHBlcnMsIHRoZW4gdGhleSBhcmUgdHJhbnNsYXRlZAoraW50byB0aGVpciBjb3JyZXNwb25kaW5nIHVuaW5zdGFsbGVkIGJpbmFyeSwgYW5kIGFueSBvZiB0aGVpciByZXF1aXJlZCBsaWJyYXJ5CitkaXJlY3RvcmllcyBhcmUgYWRkZWQgdG8gdGhlIGxpYnJhcnkgcGF0aC4KKworVGhlbiwgQ09NTUFORCBpcyBleGVjdXRlZCwgd2l0aCBBUkdTIGFzIGFyZ3VtZW50cy4iCisgIDs7CisKK2ZpbmlzaCkKKyAgJGVjaG8gXAorIlVzYWdlOiAkbW9kZW5hbWUgW09QVElPTl0uLi4gLS1tb2RlPWZpbmlzaCBbTElCRElSXS4uLgorCitDb21wbGV0ZSB0aGUgaW5zdGFsbGF0aW9uIG9mIGxpYnRvb2wgbGlicmFyaWVzLgorCitFYWNoIExJQkRJUiBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGxpYnRvb2wgbGlicmFyaWVzLgorCitUaGUgY29tbWFuZHMgdGhhdCB0aGlzIG1vZGUgZXhlY3V0ZXMgbWF5IHJlcXVpcmUgc3VwZXJ1c2VyIHByaXZpbGVnZXMuICBVc2UKK3RoZSBcYC0tZHJ5LXJ1bicgb3B0aW9uIGlmIHlvdSBqdXN0IHdhbnQgdG8gc2VlIHdoYXQgd291bGQgYmUgZXhlY3V0ZWQuIgorICA7OworCitpbnN0YWxsKQorICAkZWNobyBcCisiVXNhZ2U6ICRtb2RlbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9aW5zdGFsbCBJTlNUQUxMLUNPTU1BTkQuLi4KKworSW5zdGFsbCBleGVjdXRhYmxlcyBvciBsaWJyYXJpZXMuCisKK0lOU1RBTEwtQ09NTUFORCBpcyB0aGUgaW5zdGFsbGF0aW9uIGNvbW1hbmQuICBUaGUgZmlyc3QgY29tcG9uZW50IHNob3VsZCBiZQorZWl0aGVyIHRoZSBcYGluc3RhbGwnIG9yIFxgY3AnIHByb2dyYW0uCisKK1RoZSByZXN0IG9mIHRoZSBjb21wb25lbnRzIGFyZSBpbnRlcnByZXRlZCBhcyBhcmd1bWVudHMgdG8gdGhhdCBjb21tYW5kIChvbmx5CitCU0QtY29tcGF0aWJsZSBpbnN0YWxsIG9wdGlvbnMgYXJlIHJlY29nbml6ZWQpLiIKKyAgOzsKKworbGluaykKKyAgJGVjaG8gXAorIlVzYWdlOiAkbW9kZW5hbWUgW09QVElPTl0uLi4gLS1tb2RlPWxpbmsgTElOSy1DT01NQU5ELi4uCisKK0xpbmsgb2JqZWN0IGZpbGVzIG9yIGxpYnJhcmllcyB0b2dldGhlciB0byBmb3JtIGFub3RoZXIgbGlicmFyeSwgb3IgdG8KK2NyZWF0ZSBhbiBleGVjdXRhYmxlIHByb2dyYW0uCisKK0xJTkstQ09NTUFORCBpcyBhIGNvbW1hbmQgdXNpbmcgdGhlIEMgY29tcGlsZXIgdGhhdCB5b3Ugd291bGQgdXNlIHRvIGNyZWF0ZQorYSBwcm9ncmFtIGZyb20gc2V2ZXJhbCBvYmplY3QgZmlsZXMuCisKK1RoZSBmb2xsb3dpbmcgY29tcG9uZW50cyBvZiBMSU5LLUNPTU1BTkQgYXJlIHRyZWF0ZWQgc3BlY2lhbGx5OgorCisgIC1hbGwtc3RhdGljICAgICAgIGRvIG5vdCBkbyBhbnkgZHluYW1pYyBsaW5raW5nIGF0IGFsbAorICAtYXZvaWQtdmVyc2lvbiAgICBkbyBub3QgYWRkIGEgdmVyc2lvbiBzdWZmaXggaWYgcG9zc2libGUKKyAgLWRsb3BlbiBGSUxFICAgICAgXGAtZGxwcmVvcGVuJyBGSUxFIGlmIGl0IGNhbm5vdCBiZSBkbG9wZW5lZCBhdCBydW50aW1lCisgIC1kbHByZW9wZW4gRklMRSAgIGxpbmsgaW4gRklMRSBhbmQgYWRkIGl0cyBzeW1ib2xzIHRvIGx0X3ByZWxvYWRlZF9zeW1ib2xzCisgIC1leHBvcnQtZHluYW1pYyAgIGFsbG93IHN5bWJvbHMgZnJvbSBPVVRQVVQtRklMRSB0byBiZSByZXNvbHZlZCB3aXRoIGRsc3ltKDMpCisgIC1leHBvcnQtc3ltYm9scyBTWU1GSUxFCisgICAgICAgICAgICAgICAgICAgIHRyeSB0byBleHBvcnQgb25seSB0aGUgc3ltYm9scyBsaXN0ZWQgaW4gU1lNRklMRQorICAtZXhwb3J0LXN5bWJvbHMtcmVnZXggUkVHRVgKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHRvIGV4cG9ydCBvbmx5IHRoZSBzeW1ib2xzIG1hdGNoaW5nIFJFR0VYCisgIC1MTElCRElSICAgICAgICAgIHNlYXJjaCBMSUJESVIgZm9yIHJlcXVpcmVkIGluc3RhbGxlZCBsaWJyYXJpZXMKKyAgLWxOQU1FICAgICAgICAgICAgT1VUUFVULUZJTEUgcmVxdWlyZXMgdGhlIGluc3RhbGxlZCBsaWJyYXJ5IGxpYk5BTUUKKyAgLW1vZHVsZSAgICAgICAgICAgYnVpbGQgYSBsaWJyYXJ5IHRoYXQgY2FuIGRsb3BlbmVkCisgIC1uby1mYXN0LWluc3RhbGwgIGRpc2FibGUgdGhlIGZhc3QtaW5zdGFsbCBtb2RlCisgIC1uby1pbnN0YWxsICAgICAgIGxpbmsgYSBub3QtaW5zdGFsbGFibGUgZXhlY3V0YWJsZQorICAtbm8tdW5kZWZpbmVkICAgICBkZWNsYXJlIHRoYXQgYSBsaWJyYXJ5IGRvZXMgbm90IHJlZmVyIHRvIGV4dGVybmFsIHN5bWJvbHMKKyAgLW8gT1VUUFVULUZJTEUgICAgY3JlYXRlIE9VVFBVVC1GSUxFIGZyb20gdGhlIHNwZWNpZmllZCBvYmplY3RzCisgIC1vYmplY3RsaXN0IEZJTEUgIFVzZSBhIGxpc3Qgb2Ygb2JqZWN0IGZpbGVzIGZvdW5kIGluIEZJTEUgdG8gc3BlY2lmeSBvYmplY3RzCisgIC1wcmVjaW91cy1maWxlcy1yZWdleCBSRUdFWAorICAgICAgICAgICAgICAgICAgICBkb24ndCByZW1vdmUgb3V0cHV0IGZpbGVzIG1hdGNoaW5nIFJFR0VYCisgIC1yZWxlYXNlIFJFTEVBU0UgIHNwZWNpZnkgcGFja2FnZSByZWxlYXNlIGluZm9ybWF0aW9uCisgIC1ycGF0aCBMSUJESVIgICAgIHRoZSBjcmVhdGVkIGxpYnJhcnkgd2lsbCBldmVudHVhbGx5IGJlIGluc3RhbGxlZCBpbiBMSUJESVIKKyAgLVJbIF1MSUJESVIgICAgICAgYWRkIExJQkRJUiB0byB0aGUgcnVudGltZSBwYXRoIG9mIHByb2dyYW1zIGFuZCBsaWJyYXJpZXMKKyAgLXN0YXRpYyAgICAgICAgICAgZG8gbm90IGRvIGFueSBkeW5hbWljIGxpbmtpbmcgb2YgdW5pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMKKyAgLXN0YXRpYy1saWJ0b29sLWxpYnMKKyAgICAgICAgICAgICAgICAgICAgZG8gbm90IGRvIGFueSBkeW5hbWljIGxpbmtpbmcgb2YgbGlidG9vbCBsaWJyYXJpZXMKKyAgLXZlcnNpb24taW5mbyBDVVJSRU5UWzpSRVZJU0lPTls6QUdFXV0KKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmeSBsaWJyYXJ5IHZlcnNpb24gaW5mbyBbZWFjaCB2YXJpYWJsZSBkZWZhdWx0cyB0byAwXQorCitBbGwgb3RoZXIgb3B0aW9ucyAoYXJndW1lbnRzIGJlZ2lubmluZyB3aXRoIFxgLScpIGFyZSBpZ25vcmVkLgorCitFdmVyeSBvdGhlciBhcmd1bWVudCBpcyB0cmVhdGVkIGFzIGEgZmlsZW5hbWUuICBGaWxlcyBlbmRpbmcgaW4gXGAubGEnIGFyZQordHJlYXRlZCBhcyB1bmluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcywgb3RoZXIgZmlsZXMgYXJlIHN0YW5kYXJkIG9yIGxpYnJhcnkKK29iamVjdCBmaWxlcy4KKworSWYgdGhlIE9VVFBVVC1GSUxFIGVuZHMgaW4gXGAubGEnLCB0aGVuIGEgbGlidG9vbCBsaWJyYXJ5IGlzIGNyZWF0ZWQsCitvbmx5IGxpYnJhcnkgb2JqZWN0cyAoXGAubG8nIGZpbGVzKSBtYXkgYmUgc3BlY2lmaWVkLCBhbmQgXGAtcnBhdGgnIGlzCityZXF1aXJlZCwgZXhjZXB0IHdoZW4gY3JlYXRpbmcgYSBjb252ZW5pZW5jZSBsaWJyYXJ5LgorCitJZiBPVVRQVVQtRklMRSBlbmRzIGluIFxgLmEnIG9yIFxgLmxpYicsIHRoZW4gYSBzdGFuZGFyZCBsaWJyYXJ5IGlzIGNyZWF0ZWQKK3VzaW5nIFxgYXInIGFuZCBcYHJhbmxpYicsIG9yIG9uIFdpbmRvd3MgdXNpbmcgXGBsaWInLgorCitJZiBPVVRQVVQtRklMRSBlbmRzIGluIFxgLmxvJyBvciBcYC4ke29iamV4dH0nLCB0aGVuIGEgcmVsb2FkYWJsZSBvYmplY3QgZmlsZQoraXMgY3JlYXRlZCwgb3RoZXJ3aXNlIGFuIGV4ZWN1dGFibGUgcHJvZ3JhbSBpcyBjcmVhdGVkLiIKKyAgOzsKKwordW5pbnN0YWxsKQorICAkZWNobyBcCisiVXNhZ2U6ICRtb2RlbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9dW5pbnN0YWxsIFJNIFtSTS1PUFRJT05dLi4uIEZJTEUuLi4KKworUmVtb3ZlIGxpYnJhcmllcyBmcm9tIGFuIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuCisKK1JNIGlzIHRoZSBuYW1lIG9mIHRoZSBwcm9ncmFtIHRvIHVzZSB0byBkZWxldGUgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggRklMRQorKHR5cGljYWxseSBcYC9iaW4vcm0nKS4gIFJNLU9QVElPTlMgYXJlIG9wdGlvbnMgKHN1Y2ggYXMgXGAtZicpIHRvIGJlIHBhc3NlZAordG8gUk0uCisKK0lmIEZJTEUgaXMgYSBsaWJ0b29sIGxpYnJhcnksIGFsbCB0aGUgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIGl0IGFyZSBkZWxldGVkLgorT3RoZXJ3aXNlLCBvbmx5IEZJTEUgaXRzZWxmIGlzIGRlbGV0ZWQgdXNpbmcgUk0uIgorICA7OworCisqKQorICAkZWNobyAiJG1vZGVuYW1lOiBpbnZhbGlkIG9wZXJhdGlvbiBtb2RlIFxgJG1vZGUnIiAxPiYyCisgICRlY2hvICIkaGVscCIgMT4mMgorICBleGl0ICRFWElUX0ZBSUxVUkUKKyAgOzsKK2VzYWMKKworJGVjaG8KKyRlY2hvICJUcnkgXGAkbW9kZW5hbWUgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBvdGhlciBtb2Rlcy4iCisKK2V4aXQgJD8KKworIyBUaGUgVEFHcyBiZWxvdyBhcmUgZGVmaW5lZCBzdWNoIHRoYXQgd2UgbmV2ZXIgZ2V0IGludG8gYSBzaXR1YXRpb24KKyMgaW4gd2hpY2ggd2UgZGlzYWJsZSBib3RoIGtpbmRzIG9mIGxpYnJhcmllcy4gIEdpdmVuIGNvbmZsaWN0aW5nCisjIGNob2ljZXMsIHdlIGdvIGZvciBhIHN0YXRpYyBsaWJyYXJ5LCB0aGF0IGlzIHRoZSBtb3N0IHBvcnRhYmxlLAorIyBzaW5jZSB3ZSBjYW4ndCB0ZWxsIHdoZXRoZXIgc2hhcmVkIGxpYnJhcmllcyB3ZXJlIGRpc2FibGVkIGJlY2F1c2UKKyMgdGhlIHVzZXIgYXNrZWQgZm9yIHRoYXQgb3IgYmVjYXVzZSB0aGUgcGxhdGZvcm0gZG9lc24ndCBzdXBwb3J0CisjIHRoZW0uICBUaGlzIGlzIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgb24gQUlYLCBiZWNhdXNlIHdlIGRvbid0CisjIHN1cHBvcnQgaGF2aW5nIGJvdGggc3RhdGljIGFuZCBzaGFyZWQgbGlicmFyaWVzIGVuYWJsZWQgYXQgdGhlIHNhbWUKKyMgdGltZSBvbiB0aGF0IHBsYXRmb3JtLCBzbyB3ZSBkZWZhdWx0IHRvIGEgc2hhcmVkLW9ubHkgY29uZmlndXJhdGlvbi4KKyMgSWYgYSBkaXNhYmxlLXNoYXJlZCB0YWcgaXMgZ2l2ZW4sIHdlJ2xsIGZhbGxiYWNrIHRvIGEgc3RhdGljLW9ubHkKKyMgY29uZmlndXJhdGlvbi4gIEJ1dCB3ZSdsbCBuZXZlciBnbyBmcm9tIHN0YXRpYy1vbmx5IHRvIHNoYXJlZC1vbmx5LgorCisjICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6IGRpc2FibGUtc2hhcmVkCitkaXNhYmxlX2xpYnM9c2hhcmVkCisjICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiBkaXNhYmxlLXNoYXJlZAorCisjICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6IGRpc2FibGUtc3RhdGljCitkaXNhYmxlX2xpYnM9c3RhdGljCisjICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiBkaXNhYmxlLXN0YXRpYworCisjIExvY2FsIFZhcmlhYmxlczoKKyMgbW9kZTpzaGVsbC1zY3JpcHQKKyMgc2gtaW5kZW50YXRpb246MgorIyBFbmQ6CmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvYnVpbGQtYXV4L21kYXRlLXNoIGIvcGFydGVkLTEuOC43L2J1aWxkLWF1eC9tZGF0ZS1zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44M2QyNzAwCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2J1aWxkLWF1eC9tZGF0ZS1zaApAQCAtMCwwICsxLDIwNSBAQAorIyEvYmluL3NoCisjIEdldCBtb2RpZmljYXRpb24gdGltZSBvZiBhIGZpbGUgb3IgZGlyZWN0b3J5IGFuZCBwcmV0dHktcHJpbnQgaXQuCisKK3NjcmlwdHZlcnNpb249MjAwNy0wMy0zMC4wMgorCisjIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiwgMTk5NywgMjAwMywgMjAwNCwgMjAwNSwgMjAwNyBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4KKyMgd3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBnbnUuYWkubWl0LmVkdT4sIEp1bmUgMTk5NQorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgorIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKKyMgVGhpcyBmaWxlIGlzIG1haW50YWluZWQgaW4gQXV0b21ha2UsIHBsZWFzZSByZXBvcnQKKyMgYnVncyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+IG9yIHNlbmQgcGF0Y2hlcyB0bworIyA8YXV0b21ha2UtcGF0Y2hlc0BnbnUub3JnPi4KKworY2FzZSAkMSBpbgorICAnJykKKyAgICAgZWNobyAiJDA6IE5vIGZpbGUuICBUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgMT4mMgorICAgICBleGl0IDE7CisgICAgIDs7CisgIC1oIHwgLS1oKikKKyAgICBjYXQgPDxcRU9GCitVc2FnZTogbWRhdGUtc2ggWy0taGVscF0gWy0tdmVyc2lvbl0gRklMRQorCitQcmV0dHktcHJpbnQgdGhlIG1vZGlmaWNhdGlvbiB0aW1lIG9mIEZJTEUuCisKK1JlcG9ydCBidWdzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4uCitFT0YKKyAgICBleGl0ICQ/CisgICAgOzsKKyAgLXYgfCAtLXYqKQorICAgIGVjaG8gIm1kYXRlLXNoICRzY3JpcHR2ZXJzaW9uIgorICAgIGV4aXQgJD8KKyAgICA7OworZXNhYworCisjIFByZXZlbnQgZGF0ZSBnaXZpbmcgcmVzcG9uc2UgaW4gYW5vdGhlciBsYW5ndWFnZS4KK0xBTkc9QworZXhwb3J0IExBTkcKK0xDX0FMTD1DCitleHBvcnQgTENfQUxMCitMQ19USU1FPUMKK2V4cG9ydCBMQ19USU1FCisKKyMgR05VIGxzIGNoYW5nZXMgaXRzIHRpbWUgZm9ybWF0IGluIHJlc3BvbnNlIHRvIHRoZSBUSU1FX1NUWUxFCisjIHZhcmlhYmxlLiAgU2luY2Ugd2UgY2Fubm90IGFzc3VtZSBgdW5zZXQnIHdvcmtzLCByZXZlcnQgdGhpcworIyB2YXJpYWJsZSB0byBpdHMgZG9jdW1lbnRlZCBkZWZhdWx0LgoraWYgdGVzdCAiJHtUSU1FX1NUWUxFK3NldH0iID0gc2V0OyB0aGVuCisgIFRJTUVfU1RZTEU9cG9zaXgtbG9uZy1pc28KKyAgZXhwb3J0IFRJTUVfU1RZTEUKK2ZpCisKK3NhdmVfYXJnMT0kMQorCisjIEZpbmQgb3V0IGhvdyB0byBnZXQgdGhlIGV4dGVuZGVkIGxzIG91dHB1dCBvZiBhIGZpbGUgb3IgZGlyZWN0b3J5LgoraWYgbHMgLUwgL2Rldi9udWxsIDE+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgbHNfY29tbWFuZD0nbHMgLUwgLWwgLWQnCitlbHNlCisgIGxzX2NvbW1hbmQ9J2xzIC1sIC1kJworZmkKKyMgQXZvaWQgdXNlci9ncm91cCBuYW1lcyB0aGF0IG1pZ2h0IGhhdmUgc3BhY2VzLCB3aGVuIHBvc3NpYmxlLgoraWYgbHMgLW4gL2Rldi9udWxsIDE+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgbHNfY29tbWFuZD0iJGxzX2NvbW1hbmQgLW4iCitmaQorCisjIEEgYGxzIC1sJyBsaW5lIGxvb2tzIGFzIGZvbGxvd3Mgb24gT1MvMi4KKyMgIGRyd3hyd3gtLS0gICAgICAgIDAgQXVnIDExICAyMDAxIGZvbworIyBUaGlzIGRpZmZlcnMgZnJvbSBVbml4LCB3aGljaCBhZGRzIG93bmVyc2hpcCBpbmZvcm1hdGlvbi4KKyMgIGRyd3hyd3gtLS0gICAyIHJvb3QgIHJvb3QgICAgICA0MDk2IEF1ZyAxMSAgMjAwMSBmb28KKyMKKyMgVG8gZmluZCB0aGUgZGF0ZSwgd2Ugc3BsaXQgdGhlIGxpbmUgb24gc3BhY2VzIGFuZCBpdGVyYXRlIG9uIHdvcmRzCisjIHVudGlsIHdlIGZpbmQgYSBtb250aC4gIFRoaXMgY2Fubm90IHdvcmsgd2l0aCBmaWxlcyB3aG9zZSBvd25lciBpcyBhCisjIHVzZXIgbmFtZWQgYEphbicsIG9yIGBGZWInLCBldGMuICBIb3dldmVyLCBpdCdzIHVubGlrZWx5IHRoYXQgYC8nCisjIHdpbGwgYmUgb3duZWQgYnkgYSB1c2VyIHdob3NlIG5hbWUgaXMgYSBtb250aC4gIFNvIHdlIGZpcnN0IGxvb2sgYXQKKyMgdGhlIGV4dGVuZGVkIGxzIG91dHB1dCBvZiB0aGUgcm9vdCBkaXJlY3RvcnkgdG8gZGVjaWRlIGhvdyBtYW55CisjIHdvcmRzIHNob3VsZCBiZSBza2lwcGVkIHRvIGdldCB0aGUgZGF0ZS4KKworIyBPbiBIUFVYIC9iaW4vc2gsICJzZXQiIGludGVycHJldHMgIi1ydy1yLS1yLS0iIGFzIG9wdGlvbnMsIHNvIHRoZSAieCIgYmVsb3cuCitzZXQgeGAkbHNfY29tbWFuZCAvYAorCisjIEZpbmQgd2hpY2ggYXJndW1lbnQgaXMgdGhlIG1vbnRoLgorbW9udGg9Citjb21tYW5kPQordW50aWwgdGVzdCAkbW9udGgKK2RvCisgIHNoaWZ0CisgICMgQWRkIGFub3RoZXIgc2hpZnQgdG8gdGhlIGNvbW1hbmQuCisgIGNvbW1hbmQ9IiRjb21tYW5kIHNoaWZ0OyIKKyAgY2FzZSAkMSBpbgorICAgIEphbikgbW9udGg9SmFudWFyeTsgbnVtbW9udGg9MTs7CisgICAgRmViKSBtb250aD1GZWJydWFyeTsgbnVtbW9udGg9Mjs7CisgICAgTWFyKSBtb250aD1NYXJjaDsgbnVtbW9udGg9Mzs7CisgICAgQXByKSBtb250aD1BcHJpbDsgbnVtbW9udGg9NDs7CisgICAgTWF5KSBtb250aD1NYXk7IG51bW1vbnRoPTU7OworICAgIEp1bikgbW9udGg9SnVuZTsgbnVtbW9udGg9Njs7CisgICAgSnVsKSBtb250aD1KdWx5OyBudW1tb250aD03OzsKKyAgICBBdWcpIG1vbnRoPUF1Z3VzdDsgbnVtbW9udGg9ODs7CisgICAgU2VwKSBtb250aD1TZXB0ZW1iZXI7IG51bW1vbnRoPTk7OworICAgIE9jdCkgbW9udGg9T2N0b2JlcjsgbnVtbW9udGg9MTA7OworICAgIE5vdikgbW9udGg9Tm92ZW1iZXI7IG51bW1vbnRoPTExOzsKKyAgICBEZWMpIG1vbnRoPURlY2VtYmVyOyBudW1tb250aD0xMjs7CisgIGVzYWMKK2RvbmUKKworIyBHZXQgdGhlIGV4dGVuZGVkIGxzIG91dHB1dCBvZiB0aGUgZmlsZSBvciBkaXJlY3RvcnkuCitzZXQgZHVtbXkgeGBldmFsICIkbHNfY29tbWFuZCBcIlwkc2F2ZV9hcmcxXCIiYAorCisjIFJlbW92ZSBhbGwgcHJlY2VkaW5nIGFyZ3VtZW50cworZXZhbCAkY29tbWFuZAorCisjIEJlY2F1c2Ugb2YgdGhlIGR1bW15IGFyZ3VtZW50IGFib3ZlLCBtb250aCBpcyBpbiAkMi4KKyMKKyMgT24gYSBQT1NJWCBzeXN0ZW0sIHdlIHNob3VsZCBoYXZlCisjCisjICQjID0gNQorIyAkMSA9IGZpbGUgc2l6ZQorIyAkMiA9IG1vbnRoCisjICQzID0gZGF5CisjICQ0ID0geWVhciBvciB0aW1lCisjICQ1ID0gZmlsZW5hbWUKKyMKKyMgT24gRGFyd2luIDcuNy4wIGFuZCA3LjYuMCwgd2UgaGF2ZQorIworIyAkIyA9IDQKKyMgJDEgPSBkYXkKKyMgJDIgPSBtb250aAorIyAkMyA9IHllYXIgb3IgdGltZQorIyAkNCA9IGZpbGVuYW1lCisKKyMgR2V0IHRoZSBtb250aC4KK2Nhc2UgJDIgaW4KKyAgSmFuKSBtb250aD1KYW51YXJ5OyBudW1tb250aD0xOzsKKyAgRmViKSBtb250aD1GZWJydWFyeTsgbnVtbW9udGg9Mjs7CisgIE1hcikgbW9udGg9TWFyY2g7IG51bW1vbnRoPTM7OworICBBcHIpIG1vbnRoPUFwcmlsOyBudW1tb250aD00OzsKKyAgTWF5KSBtb250aD1NYXk7IG51bW1vbnRoPTU7OworICBKdW4pIG1vbnRoPUp1bmU7IG51bW1vbnRoPTY7OworICBKdWwpIG1vbnRoPUp1bHk7IG51bW1vbnRoPTc7OworICBBdWcpIG1vbnRoPUF1Z3VzdDsgbnVtbW9udGg9ODs7CisgIFNlcCkgbW9udGg9U2VwdGVtYmVyOyBudW1tb250aD05OzsKKyAgT2N0KSBtb250aD1PY3RvYmVyOyBudW1tb250aD0xMDs7CisgIE5vdikgbW9udGg9Tm92ZW1iZXI7IG51bW1vbnRoPTExOzsKKyAgRGVjKSBtb250aD1EZWNlbWJlcjsgbnVtbW9udGg9MTI7OworZXNhYworCitjYXNlICQzIGluCisgID8/PyopIGRheT0kMTs7CisgICopIGRheT0kMzsgc2hpZnQ7OworZXNhYworCisjIEhlcmUgd2UgaGF2ZSB0byBkZWFsIHdpdGggdGhlIHByb2JsZW0gdGhhdCB0aGUgbHMgb3V0cHV0IGdpdmVzIGVpdGhlcgorIyB0aGUgdGltZSBvZiBkYXkgb3IgdGhlIHllYXIuCitjYXNlICQzIGluCisgICo6Kikgc2V0IGBkYXRlYDsgZXZhbCB5ZWFyPVwkJCMKKyAgICAgICBjYXNlICQyIGluCisJIEphbikgbnVtbW9udGh0b2Q9MTs7CisJIEZlYikgbnVtbW9udGh0b2Q9Mjs7CisJIE1hcikgbnVtbW9udGh0b2Q9Mzs7CisJIEFwcikgbnVtbW9udGh0b2Q9NDs7CisJIE1heSkgbnVtbW9udGh0b2Q9NTs7CisJIEp1bikgbnVtbW9udGh0b2Q9Njs7CisJIEp1bCkgbnVtbW9udGh0b2Q9Nzs7CisJIEF1ZykgbnVtbW9udGh0b2Q9ODs7CisJIFNlcCkgbnVtbW9udGh0b2Q9OTs7CisJIE9jdCkgbnVtbW9udGh0b2Q9MTA7OworCSBOb3YpIG51bW1vbnRodG9kPTExOzsKKwkgRGVjKSBudW1tb250aHRvZD0xMjs7CisgICAgICAgZXNhYworICAgICAgICMgRm9yIHRoZSBmaXJzdCBzaXggbW9udGggb2YgdGhlIHllYXIgdGhlIHRpbWUgbm90YXRpb24gY2FuIGFsc28KKyAgICAgICAjIGJlIHVzZWQgZm9yIGZpbGVzIG1vZGlmaWVkIGluIHRoZSBsYXN0IHllYXIuCisgICAgICAgaWYgKGV4cHIgJG51bW1vbnRoIFw+ICRudW1tb250aHRvZCkgPiAvZGV2L251bGw7CisgICAgICAgdGhlbgorCSB5ZWFyPWBleHByICR5ZWFyIC0gMWAKKyAgICAgICBmaTs7CisgICopIHllYXI9JDM7OworZXNhYworCisjIFRoZSByZXN1bHQuCitlY2hvICRkYXkgJG1vbnRoICR5ZWFyCisKKyMgTG9jYWwgVmFyaWFibGVzOgorIyBtb2RlOiBzaGVsbC1zY3JpcHQKKyMgc2gtaW5kZW50YXRpb246IDIKKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXN0YXJ0OiAic2NyaXB0dmVyc2lvbj0iCisjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZC4lMDJIIgorIyB0aW1lLXN0YW1wLWVuZDogIiQiCisjIEVuZDoKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9idWlsZC1hdXgvbWlzc2luZyBiL3BhcnRlZC0xLjguNy9idWlsZC1hdXgvbWlzc2luZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xYzhmZjcwCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2J1aWxkLWF1eC9taXNzaW5nCkBAIC0wLDAgKzEsMzY3IEBACisjISAvYmluL3NoCisjIENvbW1vbiBzdHViIGZvciBhIGZldyBtaXNzaW5nIEdOVSBwcm9ncmFtcyB3aGlsZSBpbnN0YWxsaW5nLgorCitzY3JpcHR2ZXJzaW9uPTIwMDYtMDUtMTAuMjMKKworIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTksIDIwMDAsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYKKyMgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgT3JpZ2luYWxseSBieSBGcmFuLGNvaXMgUGluYXJkIDxwaW5hcmRAaXJvLnVtb250cmVhbC5jYT4sIDE5OTYuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyMgMDIxMTAtMTMwMSwgVVNBLgorCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKKyMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCisjIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCisjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworaWYgdGVzdCAkIyAtZXEgMDsgdGhlbgorICBlY2hvIDE+JjIgIlRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24iCisgIGV4aXQgMQorZmkKKworcnVuPToKK3NlZF9vdXRwdXQ9J3MvLiogLS1vdXRwdXRbID1dXChbXiBdKlwpLiovXDEvcCcKK3NlZF9taW51c289J3MvLiogLW8gXChbXiBdKlwpLiovXDEvcCcKKworIyBJbiB0aGUgY2FzZXMgd2hlcmUgdGhpcyBtYXR0ZXJzLCBgbWlzc2luZycgaXMgYmVpbmcgcnVuIGluIHRoZQorIyBzcmNkaXIgYWxyZWFkeS4KK2lmIHRlc3QgLWYgY29uZmlndXJlLmFjOyB0aGVuCisgIGNvbmZpZ3VyZV9hYz1jb25maWd1cmUuYWMKK2Vsc2UKKyAgY29uZmlndXJlX2FjPWNvbmZpZ3VyZS5pbgorZmkKKworbXNnPSJtaXNzaW5nIG9uIHlvdXIgc3lzdGVtIgorCitjYXNlICQxIGluCistLXJ1bikKKyAgIyBUcnkgdG8gcnVuIHJlcXVlc3RlZCBwcm9ncmFtLCBhbmQganVzdCBleGl0IGlmIGl0IHN1Y2NlZWRzLgorICBydW49CisgIHNoaWZ0CisgICIkQCIgJiYgZXhpdCAwCisgICMgRXhpdCBjb2RlIDYzIG1lYW5zIHZlcnNpb24gbWlzbWF0Y2guICBUaGlzIG9mdGVuIGhhcHBlbnMKKyAgIyB3aGVuIHRoZSB1c2VyIHRyeSB0byB1c2UgYW4gYW5jaWVudCB2ZXJzaW9uIG9mIGEgdG9vbCBvbgorICAjIGEgZmlsZSB0aGF0IHJlcXVpcmVzIGEgbWluaW11bSB2ZXJzaW9uLiAgSW4gdGhpcyBjYXNlIHdlCisgICMgd2Ugc2hvdWxkIHByb2NlZWQgaGFzIGlmIHRoZSBwcm9ncmFtIGhhZCBiZWVuIGFic2VudCwgb3IKKyAgIyBpZiAtLXJ1biBoYWRuJ3QgYmVlbiBwYXNzZWQuCisgIGlmIHRlc3QgJD8gPSA2MzsgdGhlbgorICAgIHJ1bj06CisgICAgbXNnPSJwcm9iYWJseSB0b28gb2xkIgorICBmaQorICA7OworCisgIC1ofC0taHwtLWhlfC0taGVsfC0taGVscCkKKyAgICBlY2hvICJcCiskMCBbT1BUSU9OXS4uLiBQUk9HUkFNIFtBUkdVTUVOVF0uLi4KKworSGFuZGxlIFxgUFJPR1JBTSBbQVJHVU1FTlRdLi4uJyBmb3Igd2hlbiBQUk9HUkFNIGlzIG1pc3NpbmcsIG9yIHJldHVybiBhbgorZXJyb3Igc3RhdHVzIGlmIHRoZXJlIGlzIG5vIGtub3duIGhhbmRsaW5nIGZvciBQUk9HUkFNLgorCitPcHRpb25zOgorICAtaCwgLS1oZWxwICAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXQKKyAgLXYsIC0tdmVyc2lvbiAgIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0CisgIC0tcnVuICAgICAgICAgICB0cnkgdG8gcnVuIHRoZSBnaXZlbiBjb21tYW5kLCBhbmQgZW11bGF0ZSBpdCBpZiBpdCBmYWlscworCitTdXBwb3J0ZWQgUFJPR1JBTSB2YWx1ZXM6CisgIGFjbG9jYWwgICAgICB0b3VjaCBmaWxlIFxgYWNsb2NhbC5tNCcKKyAgYXV0b2NvbmYgICAgIHRvdWNoIGZpbGUgXGBjb25maWd1cmUnCisgIGF1dG9oZWFkZXIgICB0b3VjaCBmaWxlIFxgY29uZmlnLmguaW4nCisgIGF1dG9tNHRlICAgICB0b3VjaCB0aGUgb3V0cHV0IGZpbGUsIG9yIGNyZWF0ZSBhIHN0dWIgb25lCisgIGF1dG9tYWtlICAgICB0b3VjaCBhbGwgXGBNYWtlZmlsZS5pbicgZmlsZXMKKyAgYmlzb24gICAgICAgIGNyZWF0ZSBcYHkudGFiLltjaF0nLCBpZiBwb3NzaWJsZSwgZnJvbSBleGlzdGluZyAuW2NoXQorICBmbGV4ICAgICAgICAgY3JlYXRlIFxgbGV4Lnl5LmMnLCBpZiBwb3NzaWJsZSwgZnJvbSBleGlzdGluZyAuYworICBoZWxwMm1hbiAgICAgdG91Y2ggdGhlIG91dHB1dCBmaWxlCisgIGxleCAgICAgICAgICBjcmVhdGUgXGBsZXgueXkuYycsIGlmIHBvc3NpYmxlLCBmcm9tIGV4aXN0aW5nIC5jCisgIG1ha2VpbmZvICAgICB0b3VjaCB0aGUgb3V0cHV0IGZpbGUKKyAgdGFyICAgICAgICAgIHRyeSB0YXIsIGdudXRhciwgZ3RhciwgdGhlbiB0YXIgd2l0aG91dCBub24tcG9ydGFibGUgZmxhZ3MKKyAgeWFjYyAgICAgICAgIGNyZWF0ZSBcYHkudGFiLltjaF0nLCBpZiBwb3NzaWJsZSwgZnJvbSBleGlzdGluZyAuW2NoXQorCitTZW5kIGJ1ZyByZXBvcnRzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4uIgorICAgIGV4aXQgJD8KKyAgICA7OworCisgIC12fC0tdnwtLXZlfC0tdmVyfC0tdmVyc3wtLXZlcnNpfC0tdmVyc2lvfC0tdmVyc2lvbikKKyAgICBlY2hvICJtaXNzaW5nICRzY3JpcHR2ZXJzaW9uIChHTlUgQXV0b21ha2UpIgorICAgIGV4aXQgJD8KKyAgICA7OworCisgIC0qKQorICAgIGVjaG8gMT4mMiAiJDA6IFVua25vd24gXGAkMScgb3B0aW9uIgorICAgIGVjaG8gMT4mMiAiVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiIKKyAgICBleGl0IDEKKyAgICA7OworCitlc2FjCisKKyMgTm93IGV4aXQgaWYgd2UgaGF2ZSBpdCwgYnV0IGl0IGZhaWxlZC4gIEFsc28gZXhpdCBub3cgaWYgd2UKKyMgZG9uJ3QgaGF2ZSBpdCBhbmQgLS12ZXJzaW9uIHdhcyBwYXNzZWQgKG1vc3QgbGlrZWx5IHRvIGRldGVjdAorIyB0aGUgcHJvZ3JhbSkuCitjYXNlICQxIGluCisgIGxleHx5YWNjKQorICAgICMgTm90IEdOVSBwcm9ncmFtcywgdGhleSBkb24ndCBoYXZlIC0tdmVyc2lvbi4KKyAgICA7OworCisgIHRhcikKKyAgICBpZiB0ZXN0IC1uICIkcnVuIjsgdGhlbgorICAgICAgIGVjaG8gMT4mMiAiRVJST1I6IFxgdGFyJyByZXF1aXJlcyAtLXJ1biIKKyAgICAgICBleGl0IDEKKyAgICBlbGlmIHRlc3QgIngkMiIgPSAieC0tdmVyc2lvbiIgfHwgdGVzdCAieCQyIiA9ICJ4LS1oZWxwIjsgdGhlbgorICAgICAgIGV4aXQgMQorICAgIGZpCisgICAgOzsKKworICAqKQorICAgIGlmIHRlc3QgLXogIiRydW4iICYmICgkMSAtLXZlcnNpb24pID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgICAjIFdlIGhhdmUgaXQsIGJ1dCBpdCBmYWlsZWQuCisgICAgICAgZXhpdCAxCisgICAgZWxpZiB0ZXN0ICJ4JDIiID0gIngtLXZlcnNpb24iIHx8IHRlc3QgIngkMiIgPSAieC0taGVscCI7IHRoZW4KKyAgICAgICAjIENvdWxkIG5vdCBydW4gLS12ZXJzaW9uIG9yIC0taGVscC4gIFRoaXMgaXMgcHJvYmFibHkgc29tZW9uZQorICAgICAgICMgcnVubmluZyBgJFRPT0wgLS12ZXJzaW9uJyBvciBgJFRPT0wgLS1oZWxwJyB0byBjaGVjayB3aGV0aGVyCisgICAgICAgIyAkVE9PTCBleGlzdHMgYW5kIG5vdCBrbm93aW5nICRUT09MIHVzZXMgbWlzc2luZy4KKyAgICAgICBleGl0IDEKKyAgICBmaQorICAgIDs7Citlc2FjCisKKyMgSWYgaXQgZG9lcyBub3QgZXhpc3QsIG9yIGZhaWxzIHRvIHJ1biAocG9zc2libHkgYW4gb3V0ZGF0ZWQgdmVyc2lvbiksCisjIHRyeSB0byBlbXVsYXRlIGl0LgorY2FzZSAkMSBpbgorICBhY2xvY2FsKikKKyAgICBlY2hvIDE+JjIgIlwKK1dBUk5JTkc6IFxgJDEnIGlzICRtc2cuICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgorICAgICAgICAgeW91IG1vZGlmaWVkIFxgYWNpbmNsdWRlLm00JyBvciBcYCR7Y29uZmlndXJlX2FjfScuICBZb3UgbWlnaHQgd2FudAorICAgICAgICAgdG8gaW5zdGFsbCB0aGUgXGBBdXRvbWFrZScgYW5kIFxgUGVybCcgcGFja2FnZXMuICBHcmFiIHRoZW0gZnJvbQorICAgICAgICAgYW55IEdOVSBhcmNoaXZlIHNpdGUuIgorICAgIHRvdWNoIGFjbG9jYWwubTQKKyAgICA7OworCisgIGF1dG9jb25mKQorICAgIGVjaG8gMT4mMiAiXAorV0FSTklORzogXGAkMScgaXMgJG1zZy4gIFlvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmCisgICAgICAgICB5b3UgbW9kaWZpZWQgXGAke2NvbmZpZ3VyZV9hY30nLiAgWW91IG1pZ2h0IHdhbnQgdG8gaW5zdGFsbCB0aGUKKyAgICAgICAgIFxgQXV0b2NvbmYnIGFuZCBcYEdOVSBtNCcgcGFja2FnZXMuICBHcmFiIHRoZW0gZnJvbSBhbnkgR05VCisgICAgICAgICBhcmNoaXZlIHNpdGUuIgorICAgIHRvdWNoIGNvbmZpZ3VyZQorICAgIDs7CisKKyAgYXV0b2hlYWRlcikKKyAgICBlY2hvIDE+JjIgIlwKK1dBUk5JTkc6IFxgJDEnIGlzICRtc2cuICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgorICAgICAgICAgeW91IG1vZGlmaWVkIFxgYWNjb25maWcuaCcgb3IgXGAke2NvbmZpZ3VyZV9hY30nLiAgWW91IG1pZ2h0IHdhbnQKKyAgICAgICAgIHRvIGluc3RhbGwgdGhlIFxgQXV0b2NvbmYnIGFuZCBcYEdOVSBtNCcgcGFja2FnZXMuICBHcmFiIHRoZW0KKyAgICAgICAgIGZyb20gYW55IEdOVSBhcmNoaXZlIHNpdGUuIgorICAgIGZpbGVzPWBzZWQgLW4gJ3MvXlsgXSpBW0NNXV9DT05GSUdfSEVBREVSKFwoW14pXSpcKSkuKi9cMS9wJyAke2NvbmZpZ3VyZV9hY31gCisgICAgdGVzdCAteiAiJGZpbGVzIiAmJiBmaWxlcz0iY29uZmlnLmgiCisgICAgdG91Y2hfZmlsZXM9CisgICAgZm9yIGYgaW4gJGZpbGVzOyBkbworICAgICAgY2FzZSAkZiBpbgorICAgICAgKjoqKSB0b3VjaF9maWxlcz0iJHRvdWNoX2ZpbGVzICJgZWNobyAiJGYiIHwKKwkJCQkgICAgICAgc2VkIC1lICdzL15bXjpdKjovLycgLWUgJ3MvOi4qLy8nYDs7CisgICAgICAqKSB0b3VjaF9maWxlcz0iJHRvdWNoX2ZpbGVzICRmLmluIjs7CisgICAgICBlc2FjCisgICAgZG9uZQorICAgIHRvdWNoICR0b3VjaF9maWxlcworICAgIDs7CisKKyAgYXV0b21ha2UqKQorICAgIGVjaG8gMT4mMiAiXAorV0FSTklORzogXGAkMScgaXMgJG1zZy4gIFlvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmCisgICAgICAgICB5b3UgbW9kaWZpZWQgXGBNYWtlZmlsZS5hbScsIFxgYWNpbmNsdWRlLm00JyBvciBcYCR7Y29uZmlndXJlX2FjfScuCisgICAgICAgICBZb3UgbWlnaHQgd2FudCB0byBpbnN0YWxsIHRoZSBcYEF1dG9tYWtlJyBhbmQgXGBQZXJsJyBwYWNrYWdlcy4KKyAgICAgICAgIEdyYWIgdGhlbSBmcm9tIGFueSBHTlUgYXJjaGl2ZSBzaXRlLiIKKyAgICBmaW5kIC4gLXR5cGUgZiAtbmFtZSBNYWtlZmlsZS5hbSAtcHJpbnQgfAorCSAgIHNlZCAncy9cLmFtJC8uaW4vJyB8CisJICAgd2hpbGUgcmVhZCBmOyBkbyB0b3VjaCAiJGYiOyBkb25lCisgICAgOzsKKworICBhdXRvbTR0ZSkKKyAgICBlY2hvIDE+JjIgIlwKK1dBUk5JTkc6IFxgJDEnIGlzIG5lZWRlZCwgYnV0IGlzICRtc2cuCisgICAgICAgICBZb3UgbWlnaHQgaGF2ZSBtb2RpZmllZCBzb21lIGZpbGVzIHdpdGhvdXQgaGF2aW5nIHRoZQorICAgICAgICAgcHJvcGVyIHRvb2xzIGZvciBmdXJ0aGVyIGhhbmRsaW5nIHRoZW0uCisgICAgICAgICBZb3UgY2FuIGdldCBcYCQxJyBhcyBwYXJ0IG9mIFxgQXV0b2NvbmYnIGZyb20gYW55IEdOVQorICAgICAgICAgYXJjaGl2ZSBzaXRlLiIKKworICAgIGZpbGU9YGVjaG8gIiQqIiB8IHNlZCAtbiAiJHNlZF9vdXRwdXQiYAorICAgIHRlc3QgLXogIiRmaWxlIiAmJiBmaWxlPWBlY2hvICIkKiIgfCBzZWQgLW4gIiRzZWRfbWludXNvImAKKyAgICBpZiB0ZXN0IC1mICIkZmlsZSI7IHRoZW4KKwl0b3VjaCAkZmlsZQorICAgIGVsc2UKKwl0ZXN0IC16ICIkZmlsZSIgfHwgZXhlYyA+JGZpbGUKKwllY2hvICIjISAvYmluL3NoIgorCWVjaG8gIiMgQ3JlYXRlZCBieSBHTlUgQXV0b21ha2UgbWlzc2luZyBhcyBhIHJlcGxhY2VtZW50IG9mIgorCWVjaG8gIiMgICQgJEAiCisJZWNobyAiZXhpdCAwIgorCWNobW9kICt4ICRmaWxlCisJZXhpdCAxCisgICAgZmkKKyAgICA7OworCisgIGJpc29ufHlhY2MpCisgICAgZWNobyAxPiYyICJcCitXQVJOSU5HOiBcYCQxJyAkbXNnLiAgWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYKKyAgICAgICAgIHlvdSBtb2RpZmllZCBhIFxgLnknIGZpbGUuICBZb3UgbWF5IG5lZWQgdGhlIFxgQmlzb24nIHBhY2thZ2UKKyAgICAgICAgIGluIG9yZGVyIGZvciB0aG9zZSBtb2RpZmljYXRpb25zIHRvIHRha2UgZWZmZWN0LiAgWW91IGNhbiBnZXQKKyAgICAgICAgIFxgQmlzb24nIGZyb20gYW55IEdOVSBhcmNoaXZlIHNpdGUuIgorICAgIHJtIC1mIHkudGFiLmMgeS50YWIuaAorICAgIGlmIHRlc3QgJCMgLW5lIDE7IHRoZW4KKyAgICAgICAgZXZhbCBMQVNUQVJHPSJcJHskI30iCisJY2FzZSAkTEFTVEFSRyBpbgorCSoueSkKKwkgICAgU1JDRklMRT1gZWNobyAiJExBU1RBUkciIHwgc2VkICdzL3kkL2MvJ2AKKwkgICAgaWYgdGVzdCAtZiAiJFNSQ0ZJTEUiOyB0aGVuCisJICAgICAgICAgY3AgIiRTUkNGSUxFIiB5LnRhYi5jCisJICAgIGZpCisJICAgIFNSQ0ZJTEU9YGVjaG8gIiRMQVNUQVJHIiB8IHNlZCAncy95JC9oLydgCisJICAgIGlmIHRlc3QgLWYgIiRTUkNGSUxFIjsgdGhlbgorCSAgICAgICAgIGNwICIkU1JDRklMRSIgeS50YWIuaAorCSAgICBmaQorCSAgOzsKKwllc2FjCisgICAgZmkKKyAgICBpZiB0ZXN0ICEgLWYgeS50YWIuaDsgdGhlbgorCWVjaG8gPnkudGFiLmgKKyAgICBmaQorICAgIGlmIHRlc3QgISAtZiB5LnRhYi5jOyB0aGVuCisJZWNobyAnbWFpbigpIHsgcmV0dXJuIDA7IH0nID55LnRhYi5jCisgICAgZmkKKyAgICA7OworCisgIGxleHxmbGV4KQorICAgIGVjaG8gMT4mMiAiXAorV0FSTklORzogXGAkMScgaXMgJG1zZy4gIFlvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmCisgICAgICAgICB5b3UgbW9kaWZpZWQgYSBcYC5sJyBmaWxlLiAgWW91IG1heSBuZWVkIHRoZSBcYEZsZXgnIHBhY2thZ2UKKyAgICAgICAgIGluIG9yZGVyIGZvciB0aG9zZSBtb2RpZmljYXRpb25zIHRvIHRha2UgZWZmZWN0LiAgWW91IGNhbiBnZXQKKyAgICAgICAgIFxgRmxleCcgZnJvbSBhbnkgR05VIGFyY2hpdmUgc2l0ZS4iCisgICAgcm0gLWYgbGV4Lnl5LmMKKyAgICBpZiB0ZXN0ICQjIC1uZSAxOyB0aGVuCisgICAgICAgIGV2YWwgTEFTVEFSRz0iXCR7JCN9IgorCWNhc2UgJExBU1RBUkcgaW4KKwkqLmwpCisJICAgIFNSQ0ZJTEU9YGVjaG8gIiRMQVNUQVJHIiB8IHNlZCAncy9sJC9jLydgCisJICAgIGlmIHRlc3QgLWYgIiRTUkNGSUxFIjsgdGhlbgorCSAgICAgICAgIGNwICIkU1JDRklMRSIgbGV4Lnl5LmMKKwkgICAgZmkKKwkgIDs7CisJZXNhYworICAgIGZpCisgICAgaWYgdGVzdCAhIC1mIGxleC55eS5jOyB0aGVuCisJZWNobyAnbWFpbigpIHsgcmV0dXJuIDA7IH0nID5sZXgueXkuYworICAgIGZpCisgICAgOzsKKworICBoZWxwMm1hbikKKyAgICBlY2hvIDE+JjIgIlwKK1dBUk5JTkc6IFxgJDEnIGlzICRtc2cuICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgorCSB5b3UgbW9kaWZpZWQgYSBkZXBlbmRlbmN5IG9mIGEgbWFudWFsIHBhZ2UuICBZb3UgbWF5IG5lZWQgdGhlCisJIFxgSGVscDJtYW4nIHBhY2thZ2UgaW4gb3JkZXIgZm9yIHRob3NlIG1vZGlmaWNhdGlvbnMgdG8gdGFrZQorCSBlZmZlY3QuICBZb3UgY2FuIGdldCBcYEhlbHAybWFuJyBmcm9tIGFueSBHTlUgYXJjaGl2ZSBzaXRlLiIKKworICAgIGZpbGU9YGVjaG8gIiQqIiB8IHNlZCAtbiAiJHNlZF9vdXRwdXQiYAorICAgIHRlc3QgLXogIiRmaWxlIiAmJiBmaWxlPWBlY2hvICIkKiIgfCBzZWQgLW4gIiRzZWRfbWludXNvImAKKyAgICBpZiB0ZXN0IC1mICIkZmlsZSI7IHRoZW4KKwl0b3VjaCAkZmlsZQorICAgIGVsc2UKKwl0ZXN0IC16ICIkZmlsZSIgfHwgZXhlYyA+JGZpbGUKKwllY2hvICIuYWIgaGVscDJtYW4gaXMgcmVxdWlyZWQgdG8gZ2VuZXJhdGUgdGhpcyBwYWdlIgorCWV4aXQgMQorICAgIGZpCisgICAgOzsKKworICBtYWtlaW5mbykKKyAgICBlY2hvIDE+JjIgIlwKK1dBUk5JTkc6IFxgJDEnIGlzICRtc2cuICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgorICAgICAgICAgeW91IG1vZGlmaWVkIGEgXGAudGV4aScgb3IgXGAudGV4aW5mbycgZmlsZSwgb3IgYW55IG90aGVyIGZpbGUKKyAgICAgICAgIGluZGlyZWN0bHkgYWZmZWN0aW5nIHRoZSBhc3BlY3Qgb2YgdGhlIG1hbnVhbC4gIFRoZSBzcHVyaW91cworICAgICAgICAgY2FsbCBtaWdodCBhbHNvIGJlIHRoZSBjb25zZXF1ZW5jZSBvZiB1c2luZyBhIGJ1Z2d5IFxgbWFrZScgKEFJWCwKKyAgICAgICAgIERVLCBJUklYKS4gIFlvdSBtaWdodCB3YW50IHRvIGluc3RhbGwgdGhlIFxgVGV4aW5mbycgcGFja2FnZSBvcgorICAgICAgICAgdGhlIFxgR05VIG1ha2UnIHBhY2thZ2UuICBHcmFiIGVpdGhlciBmcm9tIGFueSBHTlUgYXJjaGl2ZSBzaXRlLiIKKyAgICAjIFRoZSBmaWxlIHRvIHRvdWNoIGlzIHRoYXQgc3BlY2lmaWVkIHdpdGggLW8gLi4uCisgICAgZmlsZT1gZWNobyAiJCoiIHwgc2VkIC1uICIkc2VkX291dHB1dCJgCisgICAgdGVzdCAteiAiJGZpbGUiICYmIGZpbGU9YGVjaG8gIiQqIiB8IHNlZCAtbiAiJHNlZF9taW51c28iYAorICAgIGlmIHRlc3QgLXogIiRmaWxlIjsgdGhlbgorICAgICAgIyAuLi4gb3IgaXQgaXMgdGhlIG9uZSBzcGVjaWZpZWQgd2l0aCBAc2V0ZmlsZW5hbWUgLi4uCisgICAgICBpbmZpbGU9YGVjaG8gIiQqIiB8IHNlZCAncy8uKiBcKFteIF0qXCkgKiQvXDEvJ2AKKyAgICAgIGZpbGU9YHNlZCAtbiAnCisJL15Ac2V0ZmlsZW5hbWUveworCSAgcy8uKiBcKFteIF0qXCkgKiQvXDEvCisJICBwCisJICBxCisJfScgJGluZmlsZWAKKyAgICAgICMgLi4uIG9yIGl0IGlzIGRlcml2ZWQgZnJvbSB0aGUgc291cmNlIG5hbWUgKGRpci9mLnRleGkgYmVjb21lcyBmLmluZm8pCisgICAgICB0ZXN0IC16ICIkZmlsZSIgJiYgZmlsZT1gZWNobyAiJGluZmlsZSIgfCBzZWQgJ3MsLiovLCw7cywuW14uXSokLCwnYC5pbmZvCisgICAgZmkKKyAgICAjIElmIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0LCB0aGUgdXNlciByZWFsbHkgbmVlZHMgbWFrZWluZm87CisgICAgIyBsZXQncyBmYWlsIHdpdGhvdXQgdG91Y2hpbmcgYW55dGhpbmcuCisgICAgdGVzdCAtZiAkZmlsZSB8fCBleGl0IDEKKyAgICB0b3VjaCAkZmlsZQorICAgIDs7CisKKyAgdGFyKQorICAgIHNoaWZ0CisKKyAgICAjIFdlIGhhdmUgYWxyZWFkeSB0cmllZCB0YXIgaW4gdGhlIGdlbmVyaWMgcGFydC4KKyAgICAjIExvb2sgZm9yIGdudXRhci9ndGFyIGJlZm9yZSBpbnZvY2F0aW9uIHRvIGF2b2lkIHVnbHkgZXJyb3IKKyAgICAjIG1lc3NhZ2VzLgorICAgIGlmIChnbnV0YXIgLS12ZXJzaW9uID4gL2Rldi9udWxsIDI+JjEpOyB0aGVuCisgICAgICAgZ251dGFyICIkQCIgJiYgZXhpdCAwCisgICAgZmkKKyAgICBpZiAoZ3RhciAtLXZlcnNpb24gPiAvZGV2L251bGwgMj4mMSk7IHRoZW4KKyAgICAgICBndGFyICIkQCIgJiYgZXhpdCAwCisgICAgZmkKKyAgICBmaXJzdGFyZz0iJDEiCisgICAgaWYgc2hpZnQ7IHRoZW4KKwljYXNlICRmaXJzdGFyZyBpbgorCSpvKikKKwkgICAgZmlyc3Rhcmc9YGVjaG8gIiRmaXJzdGFyZyIgfCBzZWQgcy9vLy9gCisJICAgIHRhciAiJGZpcnN0YXJnIiAiJEAiICYmIGV4aXQgMAorCSAgICA7OworCWVzYWMKKwljYXNlICRmaXJzdGFyZyBpbgorCSpoKikKKwkgICAgZmlyc3Rhcmc9YGVjaG8gIiRmaXJzdGFyZyIgfCBzZWQgcy9oLy9gCisJICAgIHRhciAiJGZpcnN0YXJnIiAiJEAiICYmIGV4aXQgMAorCSAgICA7OworCWVzYWMKKyAgICBmaQorCisgICAgZWNobyAxPiYyICJcCitXQVJOSU5HOiBJIGNhbid0IHNlZW0gdG8gYmUgYWJsZSB0byBydW4gXGB0YXInIHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50cy4KKyAgICAgICAgIFlvdSBtYXkgd2FudCB0byBpbnN0YWxsIEdOVSB0YXIgb3IgRnJlZSBwYXh1dGlscywgb3IgY2hlY2sgdGhlCisgICAgICAgICBjb21tYW5kIGxpbmUgYXJndW1lbnRzLiIKKyAgICBleGl0IDEKKyAgICA7OworCisgICopCisgICAgZWNobyAxPiYyICJcCitXQVJOSU5HOiBcYCQxJyBpcyBuZWVkZWQsIGFuZCBpcyAkbXNnLgorICAgICAgICAgWW91IG1pZ2h0IGhhdmUgbW9kaWZpZWQgc29tZSBmaWxlcyB3aXRob3V0IGhhdmluZyB0aGUKKyAgICAgICAgIHByb3BlciB0b29scyBmb3IgZnVydGhlciBoYW5kbGluZyB0aGVtLiAgQ2hlY2sgdGhlIFxgUkVBRE1FJyBmaWxlLAorICAgICAgICAgaXQgb2Z0ZW4gdGVsbHMgeW91IGFib3V0IHRoZSBuZWVkZWQgcHJlcmVxdWlzaXRlcyBmb3IgaW5zdGFsbGluZworICAgICAgICAgdGhpcyBwYWNrYWdlLiAgWW91IG1heSBhbHNvIHBlZWsgYXQgYW55IEdOVSBhcmNoaXZlIHNpdGUsIGluIGNhc2UKKyAgICAgICAgIHNvbWUgb3RoZXIgcGFja2FnZSB3b3VsZCBjb250YWluIHRoaXMgbWlzc2luZyBcYCQxJyBwcm9ncmFtLiIKKyAgICBleGl0IDEKKyAgICA7OworZXNhYworCitleGl0IDAKKworIyBMb2NhbCB2YXJpYWJsZXM6CisjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1zdGFydDogInNjcmlwdHZlcnNpb249IgorIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQuJTAySCIKKyMgdGltZS1zdGFtcC1lbmQ6ICIkIgorIyBFbmQ6CmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvYnVpbGQtYXV4L3RleGluZm8udGV4IGIvcGFydGVkLTEuOC43L2J1aWxkLWF1eC90ZXhpbmZvLnRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjNjNzUwCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2J1aWxkLWF1eC90ZXhpbmZvLnRleApAQCAtMCwwICsxLDg2NDEgQEAKKyUgdGV4aW5mby50ZXggLS0gVGVYIG1hY3JvcyB0byBoYW5kbGUgVGV4aW5mbyBmaWxlcy4KKyUKKyUgTG9hZCBwbGFpbiBpZiBuZWNlc3NhcnksIGkuZS4sIGlmIHJ1bm5pbmcgdW5kZXIgaW5pdGV4LgorXGV4cGFuZGFmdGVyXGlmeFxjc25hbWUgZm10bmFtZVxlbmRjc25hbWVccmVsYXhcaW5wdXQgcGxhaW5cZmkKKyUKK1xkZWZcdGV4aW5mb3ZlcnNpb257MjAwNy0wNS0wNC4wOX0KKyUKKyUgQ29weXJpZ2h0IChDKSAxOTg1LCAxOTg2LCAxOTg4LCAxOTkwLCAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LAorJSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LAorJSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorJQorJSBUaGlzIHRleGluZm8udGV4IGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCislIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCislIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQKKyUgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorJQorJSBUaGlzIHRleGluZm8udGV4IGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlCislIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKKyUgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorJQorJSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorJSBhbG9uZyB3aXRoIHRoaXMgdGV4aW5mby50ZXggZmlsZTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlCislIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCislIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorJQorJSBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB3aGVuIHRoaXMgZmlsZSBpcyByZWFkIGJ5IFRlWCB3aGVuIHByb2Nlc3NpbmcKKyUgYSBUZXhpbmZvIHNvdXJjZSBkb2N1bWVudCwgeW91IG1heSB1c2UgdGhlIHJlc3VsdCB3aXRob3V0CislIHJlc3RyaWN0aW9uLiAgKFRoaXMgaGFzIGJlZW4gb3VyIGludGVudCBzaW5jZSBUZXhpbmZvIHdhcyBpbnZlbnRlZC4pCislCislIFBsZWFzZSB0cnkgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRleGluZm8udGV4IGJlZm9yZSBzdWJtaXR0aW5nIGJ1ZworJSByZXBvcnRzOyB5b3UgY2FuIGdldCB0aGUgbGF0ZXN0IHZlcnNpb24gZnJvbToKKyUgICBodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8gKHRoZSBUZXhpbmZvIGhvbWUgcGFnZSksIG9yCislICAgZnRwOi8vdHVnLm9yZy90ZXgvdGV4aW5mby50ZXgKKyUgICAgIChhbmQgYWxsIENUQU4gbWlycm9ycywgc2VlIGh0dHA6Ly93d3cuY3Rhbi5vcmcpLgorJSBUaGUgdGV4aW5mby50ZXggaW4gYW55IGdpdmVuIGRpc3RyaWJ1dGlvbiBjb3VsZCB3ZWxsIGJlIG91dAorJSBvZiBkYXRlLCBzbyBpZiB0aGF0J3Mgd2hhdCB5b3UncmUgdXNpbmcsIHBsZWFzZSBjaGVjay4KKyUKKyUgU2VuZCBidWcgcmVwb3J0cyB0byBidWctdGV4aW5mb0BnbnUub3JnLiAgUGxlYXNlIGluY2x1ZGUgaW5jbHVkaW5nIGEKKyUgY29tcGxldGUgZG9jdW1lbnQgaW4gZWFjaCBidWcgcmVwb3J0IHdpdGggd2hpY2ggd2UgY2FuIHJlcHJvZHVjZSB0aGUKKyUgcHJvYmxlbS4gIFBhdGNoZXMgYXJlLCBvZiBjb3Vyc2UsIGdyZWF0bHkgYXBwcmVjaWF0ZWQuCislCislIFRvIHByb2Nlc3MgYSBUZXhpbmZvIG1hbnVhbCB3aXRoIFRlWCwgaXQncyBtb3N0IHJlbGlhYmxlIHRvIHVzZSB0aGUKKyUgdGV4aTJkdmkgc2hlbGwgc2NyaXB0IHRoYXQgY29tZXMgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAgRm9yIGEgc2ltcGxlCislIG1hbnVhbCBmb28udGV4aSwgaG93ZXZlciwgeW91IGNhbiBnZXQgYXdheSB3aXRoIHRoaXM6CislICAgdGV4IGZvby50ZXhpCislICAgdGV4aW5kZXggZm9vLj8/CislICAgdGV4IGZvby50ZXhpCislICAgdGV4IGZvby50ZXhpCislICAgZHZpcHMgZm9vLmR2aSAtbyAgIyBvciB3aGF0ZXZlcjsgdGhpcyBtYWtlcyBmb28ucHMuCislIFRoZSBleHRyYSBUZVggcnVucyBnZXQgdGhlIGNyb3NzLXJlZmVyZW5jZSBpbmZvcm1hdGlvbiBjb3JyZWN0LgorJSBTb21ldGltZXMgb25lIHJ1biBhZnRlciB0ZXhpbmRleCBzdWZmaWNlcywgYW5kIHNvbWV0aW1lcyB5b3UgbmVlZCBtb3JlCislIHRoYW4gdHdvOyB0ZXhpMmR2aSBkb2VzIGl0IGFzIG1hbnkgdGltZXMgYXMgbmVjZXNzYXJ5LgorJQorJSBJdCBpcyBwb3NzaWJsZSB0byBhZGFwdCB0ZXhpbmZvLnRleCBmb3Igb3RoZXIgbGFuZ3VhZ2VzLCB0byBzb21lCislIGV4dGVudC4gIFlvdSBjYW4gZ2V0IHRoZSBleGlzdGluZyBsYW5ndWFnZS1zcGVjaWZpYyBmaWxlcyBmcm9tIHRoZQorJSBmdWxsIFRleGluZm8gZGlzdHJpYnV0aW9uLgorJQorJSBUaGUgR05VIFRleGluZm8gaG9tZSBwYWdlIGlzIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLgorCisKK1xtZXNzYWdle0xvYWRpbmcgdGV4aW5mbyBbdmVyc2lvbiBcdGV4aW5mb3ZlcnNpb25dOn0KKworJSBJZiBpbiBhIC5mbXQgZmlsZSwgcHJpbnQgdGhlIHZlcnNpb24gbnVtYmVyCislIGFuZCB0dXJuIG9uIGFjdGl2ZSBjaGFyYWN0ZXJzIHRoYXQgd2UgY291bGRuJ3QgZG8gZWFybGllciBiZWNhdXNlCislIHRoZXkgbWlnaHQgaGF2ZSBhcHBlYXJlZCBpbiB0aGUgaW5wdXQgZmlsZSBuYW1lLgorXGV2ZXJ5am9ie1xtZXNzYWdle1tUZXhpbmZvIHZlcnNpb24gXHRleGluZm92ZXJzaW9uXX0lCisgIFxjYXRjb2RlYCs9XGFjdGl2ZSBcY2F0Y29kZWBcXz1cYWN0aXZlfQorCisKK1xjaGFyZGVmXG90aGVyPTEyCisKKyUgV2UgbmV2ZXIgd2FudCBwbGFpbidzIFxvdXRlciBkZWZpbml0aW9uIG9mIFwrIGluIFRleGluZm8uCislIEZvciBAdGV4LCB3ZSBjYW4gdXNlIFx0YWJhbGlnbi4KK1xsZXRcKyA9IFxyZWxheAorCislIFNhdmUgc29tZSBwbGFpbiB0ZXggbWFjcm9zIHdob3NlIG5hbWVzIHdlIHdpbGwgcmVkZWZpbmUuCitcbGV0XHB0ZXhiPVxiCitcbGV0XHB0ZXhidWxsZXQ9XGJ1bGxldAorXGxldFxwdGV4Yz1cYworXGxldFxwdGV4Y29tbWE9XCwKK1xsZXRccHRleGRvdD1cLgorXGxldFxwdGV4ZG90cz1cZG90cworXGxldFxwdGV4ZW5kPVxlbmQKK1xsZXRccHRleGVxdWl2PVxlcXVpdgorXGxldFxwdGV4ZXhjbGFtPVwhCitcbGV0XHB0ZXhmb290bm90ZT1cZm9vdG5vdGUKK1xsZXRccHRleGd0cj0+CitcbGV0XHB0ZXhoYXQ9XgorXGxldFxwdGV4aT1caQorXGxldFxwdGV4aW5kZW50PVxpbmRlbnQKK1xsZXRccHRleGluc2VydD1caW5zZXJ0CitcbGV0XHB0ZXhsYnJhY2U9XHsKK1xsZXRccHRleGxlc3M9PAorXGxldFxwdGV4bmV3d3JpdGVcbmV3d3JpdGUKK1xsZXRccHRleG5vaW5kZW50PVxub2luZGVudAorXGxldFxwdGV4cGx1cz0rCitcbGV0XHB0ZXhyYnJhY2U9XH0KK1xsZXRccHRleHNsYXNoPVwvCitcbGV0XHB0ZXhzdGFyPVwqCitcbGV0XHB0ZXh0PVx0CisKKyUgSWYgdGhpcyBjaGFyYWN0ZXIgYXBwZWFycyBpbiBhbiBlcnJvciBtZXNzYWdlIG9yIGhlbHAgc3RyaW5nLCBpdAorJSBzdGFydHMgYSBuZXcgbGluZSBpbiB0aGUgb3V0cHV0LgorXG5ld2xpbmVjaGFyID0gYF5eSgorCislIFVzZSBUZVggMy4wJ3MgXGlucHV0bGluZW5vIHRvIGdldCB0aGUgbGluZSBudW1iZXIsIGZvciBiZXR0ZXIgZXJyb3IKKyUgbWVzc2FnZXMsIGJ1dCBpZiB3ZSdyZSB1c2luZyBhbiBvbGQgdmVyc2lvbiBvZiBUZVgsIGRvbid0IGRvIGFueXRoaW5nLgorJQorXGlmeFxpbnB1dGxpbmVub1x0aGlzaXN1bmRlZmluZWQKKyAgXGxldFxsaW5lbnVtYmVyID0gXGVtcHR5ICUgUHJlLTMuMC4KK1xlbHNlCisgIFxkZWZcbGluZW51bWJlcntsLlx0aGVcaW5wdXRsaW5lbm86XHNwYWNlfQorXGZpCisKKyUgU2V0IHVwIGZpeGVkIHdvcmRzIGZvciBFbmdsaXNoIGlmIG5vdCBhbHJlYWR5IHNldC4KK1xpZnhccHV0d29yZEFwcGVuZGl4XHVuZGVmaW5lZCAgXGdkZWZccHV0d29yZEFwcGVuZGl4e0FwcGVuZGl4fVxmaQorXGlmeFxwdXR3b3JkQ2hhcHRlclx1bmRlZmluZWQgICBcZ2RlZlxwdXR3b3JkQ2hhcHRlcntDaGFwdGVyfVxmaQorXGlmeFxwdXR3b3JkZmlsZVx1bmRlZmluZWQgICAgICBcZ2RlZlxwdXR3b3JkZmlsZXtmaWxlfVxmaQorXGlmeFxwdXR3b3JkaW5cdW5kZWZpbmVkICAgICAgICBcZ2RlZlxwdXR3b3JkaW57aW59XGZpCitcaWZ4XHB1dHdvcmRJbmRleElzRW1wdHlcdW5kZWZpbmVkICAgICBcZ2RlZlxwdXR3b3JkSW5kZXhJc0VtcHR5eyhJbmRleCBpcyBlbXB0eSl9XGZpCitcaWZ4XHB1dHdvcmRJbmRleE5vbmV4aXN0ZW50XHVuZGVmaW5lZCBcZ2RlZlxwdXR3b3JkSW5kZXhOb25leGlzdGVudHsoSW5kZXggaXMgbm9uZXhpc3RlbnQpfVxmaQorXGlmeFxwdXR3b3JkSW5mb1x1bmRlZmluZWQgICAgICBcZ2RlZlxwdXR3b3JkSW5mb3tJbmZvfVxmaQorXGlmeFxwdXR3b3JkSW5zdGFuY2VWYXJpYWJsZW9mXHVuZGVmaW5lZCBcZ2RlZlxwdXR3b3JkSW5zdGFuY2VWYXJpYWJsZW9me0luc3RhbmNlIFZhcmlhYmxlIG9mfVxmaQorXGlmeFxwdXR3b3JkTWV0aG9kb25cdW5kZWZpbmVkICBcZ2RlZlxwdXR3b3JkTWV0aG9kb257TWV0aG9kIG9ufVxmaQorXGlmeFxwdXR3b3JkTm9UaXRsZVx1bmRlZmluZWQgICBcZ2RlZlxwdXR3b3JkTm9UaXRsZXtObyBUaXRsZX1cZmkKK1xpZnhccHV0d29yZG9mXHVuZGVmaW5lZCAgICAgICAgXGdkZWZccHV0d29yZG9me29mfVxmaQorXGlmeFxwdXR3b3Jkb25cdW5kZWZpbmVkICAgICAgICBcZ2RlZlxwdXR3b3Jkb257b259XGZpCitcaWZ4XHB1dHdvcmRwYWdlXHVuZGVmaW5lZCAgICAgIFxnZGVmXHB1dHdvcmRwYWdle3BhZ2V9XGZpCitcaWZ4XHB1dHdvcmRzZWN0aW9uXHVuZGVmaW5lZCAgIFxnZGVmXHB1dHdvcmRzZWN0aW9ue3NlY3Rpb259XGZpCitcaWZ4XHB1dHdvcmRTZWN0aW9uXHVuZGVmaW5lZCAgIFxnZGVmXHB1dHdvcmRTZWN0aW9ue1NlY3Rpb259XGZpCitcaWZ4XHB1dHdvcmRzZWVcdW5kZWZpbmVkICAgICAgIFxnZGVmXHB1dHdvcmRzZWV7c2VlfVxmaQorXGlmeFxwdXR3b3JkU2VlXHVuZGVmaW5lZCAgICAgICBcZ2RlZlxwdXR3b3JkU2Vle1NlZX1cZmkKK1xpZnhccHV0d29yZFNob3J0VE9DXHVuZGVmaW5lZCAgXGdkZWZccHV0d29yZFNob3J0VE9De1Nob3J0IENvbnRlbnRzfVxmaQorXGlmeFxwdXR3b3JkVE9DXHVuZGVmaW5lZCAgICAgICBcZ2RlZlxwdXR3b3JkVE9De1RhYmxlIG9mIENvbnRlbnRzfVxmaQorJQorXGlmeFxwdXR3b3JkTUphblx1bmRlZmluZWQgXGdkZWZccHV0d29yZE1KYW57SmFudWFyeX1cZmkKK1xpZnhccHV0d29yZE1GZWJcdW5kZWZpbmVkIFxnZGVmXHB1dHdvcmRNRmVie0ZlYnJ1YXJ5fVxmaQorXGlmeFxwdXR3b3JkTU1hclx1bmRlZmluZWQgXGdkZWZccHV0d29yZE1NYXJ7TWFyY2h9XGZpCitcaWZ4XHB1dHdvcmRNQXByXHVuZGVmaW5lZCBcZ2RlZlxwdXR3b3JkTUFwcntBcHJpbH1cZmkKK1xpZnhccHV0d29yZE1NYXlcdW5kZWZpbmVkIFxnZGVmXHB1dHdvcmRNTWF5e01heX1cZmkKK1xpZnhccHV0d29yZE1KdW5cdW5kZWZpbmVkIFxnZGVmXHB1dHdvcmRNSnVue0p1bmV9XGZpCitcaWZ4XHB1dHdvcmRNSnVsXHVuZGVmaW5lZCBcZ2RlZlxwdXR3b3JkTUp1bHtKdWx5fVxmaQorXGlmeFxwdXR3b3JkTUF1Z1x1bmRlZmluZWQgXGdkZWZccHV0d29yZE1BdWd7QXVndXN0fVxmaQorXGlmeFxwdXR3b3JkTVNlcFx1bmRlZmluZWQgXGdkZWZccHV0d29yZE1TZXB7U2VwdGVtYmVyfVxmaQorXGlmeFxwdXR3b3JkTU9jdFx1bmRlZmluZWQgXGdkZWZccHV0d29yZE1PY3R7T2N0b2Jlcn1cZmkKK1xpZnhccHV0d29yZE1Ob3ZcdW5kZWZpbmVkIFxnZGVmXHB1dHdvcmRNTm92e05vdmVtYmVyfVxmaQorXGlmeFxwdXR3b3JkTURlY1x1bmRlZmluZWQgXGdkZWZccHV0d29yZE1EZWN7RGVjZW1iZXJ9XGZpCislCitcaWZ4XHB1dHdvcmREZWZtYWNcdW5kZWZpbmVkICAgIFxnZGVmXHB1dHdvcmREZWZtYWN7TWFjcm99XGZpCitcaWZ4XHB1dHdvcmREZWZzcGVjXHVuZGVmaW5lZCAgIFxnZGVmXHB1dHdvcmREZWZzcGVje1NwZWNpYWwgRm9ybX1cZmkKK1xpZnhccHV0d29yZERlZnZhclx1bmRlZmluZWQgICAgXGdkZWZccHV0d29yZERlZnZhcntWYXJpYWJsZX1cZmkKK1xpZnhccHV0d29yZERlZm9wdFx1bmRlZmluZWQgICAgXGdkZWZccHV0d29yZERlZm9wdHtVc2VyIE9wdGlvbn1cZmkKK1xpZnhccHV0d29yZERlZmZ1bmNcdW5kZWZpbmVkICAgXGdkZWZccHV0d29yZERlZmZ1bmN7RnVuY3Rpb259XGZpCisKKyUgU2luY2UgdGhlIGNhdGVnb3J5IG9mIHNwYWNlIGlzIG5vdCBrbm93biwgd2UgaGF2ZSB0byBiZSBjYXJlZnVsLgorXGNoYXJkZWZcc3BhY2VjYXQgPSAxMAorXGRlZlxzcGFjZWlzc3BhY2V7XGNhdGNvZGVgXCA9XHNwYWNlY2F0fQorCislIHNvbWV0aW1lcyBjaGFyYWN0ZXJzIGFyZSBhY3RpdmUsIHNvIHdlIG5lZWQgY29udHJvbCBzZXF1ZW5jZXMuCitcY2hhcmRlZlxjb2xvbkNoYXIgPSBgXDoKK1xjaGFyZGVmXGNvbW1hQ2hhciA9IGBcLAorXGNoYXJkZWZcZGFzaENoYXIgID0gYFwtCitcY2hhcmRlZlxkb3RDaGFyICAgPSBgXC4KK1xjaGFyZGVmXGV4Y2xhbUNoYXI9IGBcIQorXGNoYXJkZWZcbHF1b3RlQ2hhcj0gYFxgCitcY2hhcmRlZlxxdWVzdENoYXIgPSBgXD8KK1xjaGFyZGVmXHJxdW90ZUNoYXI9IGBcJworXGNoYXJkZWZcc2VtaUNoYXIgID0gYFw7CitcY2hhcmRlZlx1bmRlckNoYXIgPSBgXF8KKworJSBJZ25vcmUgYSB0b2tlbi4KKyUKK1xkZWZcZ29iYmxlIzF7fQorCislIFRoZSBmb2xsb3dpbmcgaXMgdXNlZCBpbnNpZGUgc2V2ZXJhbCBcZWRlZidzLgorXGRlZlxtYWtlY3NuYW1lIzF7XGV4cGFuZGFmdGVyXG5vZXhwYW5kXGNzbmFtZSMxXGVuZGNzbmFtZX0KKworJSBIeXBoZW5hdGlvbiBmaXhlcy4KK1xoeXBoZW5hdGlvbnsKKyAgRmxvci1pLWRhIEdob3N0LXNjcmlwdCBHaG9zdC12aWV3IE1hYy1PUyBQb3N0LVNjcmlwdAorICBhcC1wZW4tZGl4IGJpdC1tYXAgYml0LW1hcHMKKyAgZGF0YS1iYXNlIGRhdGEtYmFzZXMgZXNoZWxsIGZhbGwtaW5nIGhhbGYtd2F5IGxvbmctZXN0IG1hbi11LXNjcmlwdAorICBtYW4tdS1zY3JpcHRzIG1pbmktYnVmLWZlciBtaW5pLWJ1Zi1mZXJzIG92ZXItdmlldyBwYXItYS1kaWdtCisgIHBhci1hLWRpZ21zIHJhdGgtZXIgcmVjLXRhbi1ndS1sYXIgcm8tYm90LWljcyBzZS12ZXJlLWx5IHNldC11cCBzcGEtY2VzCisgIHNwZWxsLWluZyBzcGVsbC1pbmdzCisgIHN0YW5kLWFsb25lIHN0cm9uZy1lc3QgdGltZS1zdGFtcCB0aW1lLXN0YW1wcyB3aGljaC1ldmVyIHdoaXRlLXNwYWNlCisgIHdpZGUtc3ByZWFkIHdyYXAtYXJvdW5kCit9CisKKyUgTWFyZ2luIHRvIGFkZCB0byByaWdodCBvZiBldmVuIHBhZ2VzLCB0byBsZWZ0IG9mIG9kZCBwYWdlcy4KK1xuZXdkaW1lblxiaW5kaW5nb2Zmc2V0CitcbmV3ZGltZW5cbm9ybWFsb2Zmc2V0CitcbmV3ZGltZW5ccGFnZXdpZHRoIFxuZXdkaW1lblxwYWdlaGVpZ2h0CisKKyUgRm9yIGEgZmluYWwgY29weSwgdGFrZSBvdXQgdGhlIHJlY3RhbmdsZXMKKyUgdGhhdCBtYXJrIG92ZXJmdWxsIGJveGVzIChpbiBjYXNlIHlvdSBoYXZlIGRlY2lkZWQKKyUgdGhhdCB0aGUgdGV4dCBsb29rcyBvayBldmVuIHRob3VnaCBpdCBwYXNzZXMgdGhlIG1hcmdpbikuCislCitcZGVmXGZpbmFsb3V0e1xvdmVyZnVsbHJ1bGU9MHB0fQorCislIEB8IGluc2VydHMgYSBjaGFuZ2ViYXIgdG8gdGhlIGxlZnQgb2YgdGhlIGN1cnJlbnQgbGluZS4gIEl0IHNob3VsZAorJSBzdXJyb3VuZCBhbnkgY2hhbmdlZCB0ZXh0LiAgVGhpcyBhcHByb2FjaCBkb2VzICpub3QqIHdvcmsgaWYgdGhlCislIGNoYW5nZSBzcGFucyBtb3JlIHRoYW4gdHdvIGxpbmVzIG9mIG91dHB1dC4gIFRvIGhhbmRsZSB0aGF0LCB3ZSB3b3VsZAorJSBoYXZlIGFkb3B0IGEgbXVjaCBtb3JlIGRpZmZpY3VsdCBhcHByb2FjaCAocHV0dGluZyBtYXJrcyBpbnRvIHRoZSBtYWluCislIHZlcnRpY2FsIGxpc3QgZm9yIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBlYWNoIGNoYW5nZSkuCislCitcZGVmXHx7JQorICAlIFx2YWRqdXN0IGNhbiBvbmx5IGJlIHVzZWQgaW4gaG9yaXpvbnRhbCBtb2RlLgorICBcbGVhdmV2bW9kZQorICAlCisgICUgQXBwZW5kIHRoaXMgdmVydGljYWwgbW9kZSBtYXRlcmlhbCBhZnRlciB0aGUgY3VycmVudCBsaW5lIGluIHRoZSBvdXRwdXQuCisgIFx2YWRqdXN0eyUKKyAgICAlIFdlIHdhbnQgdG8gaW5zZXJ0IGEgcnVsZSB3aXRoIHRoZSBoZWlnaHQgYW5kIGRlcHRoIG9mIHRoZSBjdXJyZW50CisgICAgJSBsZWFkaW5nOyB0aGF0IGlzIGV4YWN0bHkgd2hhdCBcc3RydXRib3ggaXMgc3VwcG9zZWQgdG8gcmVjb3JkLgorICAgIFx2c2tpcC1cYmFzZWxpbmVza2lwCisgICAgJQorICAgICUgXHZhZGp1c3QtaXRlbXMgYXJlIGluc2VydGVkIGF0IHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIHR5cGUuICBTbworICAgICUgdGhlIFxsbGFwIGhlcmUgbW92ZXMgb3V0IGludG8gdGhlIGxlZnQtaGFuZCBtYXJnaW4uCisgICAgXGxsYXB7JQorICAgICAgJQorICAgICAgJSBGb3IgYSB0aGlja2VyIG9yIHRoaW5uZXIgYmFyLCBjaGFuZ2UgdGhlIGAxcHQnLgorICAgICAgXHZydWxlIGhlaWdodFxiYXNlbGluZXNraXAgd2lkdGgxcHQKKyAgICAgICUKKyAgICAgICUgVGhpcyBpcyB0aGUgc3BhY2UgYmV0d2VlbiB0aGUgYmFyIGFuZCB0aGUgdGV4dC4KKyAgICAgIFxoc2tpcCAxMnB0CisgICAgfSUKKyAgfSUKK30KKworJSBTb21ldGltZXMgaXQgaXMgY29udmVuaWVudCB0byBoYXZlIGV2ZXJ5dGhpbmcgaW4gdGhlIHRyYW5zY3JpcHQgZmlsZQorJSBhbmQgbm90aGluZyBvbiB0aGUgdGVybWluYWwuICBXZSBkb24ndCBqdXN0IGNhbGwgXHRyYWNpbmdhbGwgaGVyZSwKKyUgc2luY2UgdGhhdCBwcm9kdWNlcyBzb21lIHVzZWxlc3Mgb3V0cHV0IG9uIHRoZSB0ZXJtaW5hbC4gIFdlIGFsc28gbWFrZQorJSBzb21lIGVmZm9ydCB0byBvcmRlciB0aGUgdHJhY2luZyBjb21tYW5kcyB0byByZWR1Y2Ugb3V0cHV0IGluIHRoZSBsb2cKKyUgZmlsZTsgY2YuIHRyYWNlLnN0eSBpbiBMYVRlWC4KKyUKK1xkZWZcZ2xvZ2dpbmdhbGx7XGJlZ2luZ3JvdXAgXGdsb2JhbGRlZnMgPSAxIFxsb2dnaW5nYWxsIFxlbmRncm91cH0lCitcZGVmXGxvZ2dpbmdhbGx7JQorICBcdHJhY2luZ3N0YXRzMgorICBcdHJhY2luZ3BhZ2VzMQorICBcdHJhY2luZ2xvc3RjaGFyczIgICUgMiBnaXZlcyB1cyBtb3JlIGluIGV0ZXgKKyAgXHRyYWNpbmdwYXJhZ3JhcGhzMQorICBcdHJhY2luZ291dHB1dDEKKyAgXHRyYWNpbmdtYWNyb3MyCisgIFx0cmFjaW5ncmVzdG9yZXMxCisgIFxzaG93Ym94YnJlYWR0aFxtYXhkaW1lbiBcc2hvd2JveGRlcHRoXG1heGRpbWVuCisgIFxpZnhcZVRlWHZlcnNpb25cdW5kZWZpbmVkXGVsc2UgJSBldGV4IGdpdmVzIHVzIG1vcmUgbG9nZ2luZworICAgIFx0cmFjaW5nc2NhbnRva2VuczEKKyAgICBcdHJhY2luZ2lmczEKKyAgICBcdHJhY2luZ2dyb3VwczEKKyAgICBcdHJhY2luZ25lc3RpbmcyCisgICAgXHRyYWNpbmdhc3NpZ25zMQorICBcZmkKKyAgXHRyYWNpbmdjb21tYW5kczMgICUgMyBnaXZlcyB1cyBtb3JlIGluIGV0ZXgKKyAgXGVycm9yY29udGV4dGxpbmVzMTYKK30lCisKKyUgYWRkIGNoZWNrIGZvciBcbGFzdHBlbmFsdHkgdG8gcGxhaW4ncyBkZWZpbml0aW9ucy4gIElmIHRoZSBsYXN0IHRoaW5nCislIHdlIGRpZCB3YXMgYSBcbm9icmVhaywgd2UgZG9uJ3Qgd2FudCB0byBpbnNlcnQgbW9yZSBzcGFjZS4KKyUKK1xkZWZcc21hbGxicmVha3tcaWZudW1cbGFzdHBlbmFsdHk8MTAwMDBccGFyXGlmZGltXGxhc3Rza2lwPFxzbWFsbHNraXBhbW91bnQKKyAgXHJlbW92ZWxhc3Rza2lwXHBlbmFsdHktNTBcc21hbGxza2lwXGZpXGZpfQorXGRlZlxtZWRicmVha3tcaWZudW1cbGFzdHBlbmFsdHk8MTAwMDBccGFyXGlmZGltXGxhc3Rza2lwPFxtZWRza2lwYW1vdW50CisgIFxyZW1vdmVsYXN0c2tpcFxwZW5hbHR5LTEwMFxtZWRza2lwXGZpXGZpfQorXGRlZlxiaWdicmVha3tcaWZudW1cbGFzdHBlbmFsdHk8MTAwMDBccGFyXGlmZGltXGxhc3Rza2lwPFxiaWdza2lwYW1vdW50CisgIFxyZW1vdmVsYXN0c2tpcFxwZW5hbHR5LTIwMFxiaWdza2lwXGZpXGZpfQorCislIEZvciBAY3JvcG1hcmtzIGNvbW1hbmQuCislIERvIEBjcm9wbWFya3MgdG8gZ2V0IGNyb3AgbWFya3MuCislCitcbmV3aWZcaWZjcm9wbWFya3MKK1xsZXRcY3JvcG1hcmtzID0gXGNyb3BtYXJrc3RydWUKKyUKKyUgRGltZW5zaW9ucyB0byBhZGQgY3JvcG1hcmtzIGF0IGNvcm5lcnMuCislIEFkZGVkIGJ5IFAuIEEuIE1hY0theSwgMTIgTm92LiAxOTg2CislCitcbmV3ZGltZW5cb3V0ZXJoc2l6ZSBcbmV3ZGltZW5cb3V0ZXJ2c2l6ZSAlIHNldCBieSB0aGUgcGFwZXIgc2l6ZSByb3V0aW5lcworXG5ld2RpbWVuXGNvcm5lcmxvbmcgIFxjb3JuZXJsb25nPTFwYworXG5ld2RpbWVuXGNvcm5lcnRoaWNrIFxjb3JuZXJ0aGljaz0uM3B0CitcbmV3ZGltZW5cdG9wYW5kYm90dG9tbWFyZ2luIFx0b3BhbmRib3R0b21tYXJnaW49Ljc1aW4KKworJSBNYWluIG91dHB1dCByb3V0aW5lLgorXGNoYXJkZWZcUEFHRSA9IDI1NQorXG91dHB1dCA9IHtcb25lcGFnZW91dHtccGFnZWNvbnRlbnRzXFBBR0V9fQorCitcbmV3Ym94XGhlYWRsaW5lYm94CitcbmV3Ym94XGZvb3RsaW5lYm94CisKKyUgXG9uZXBhZ2VvdXQgdGFrZXMgYSB2Ym94IGFzIGFuIGFyZ3VtZW50LiAgTm90ZSB0aGF0IFxwYWdlY29udGVudHMKKyUgZG9lcyBpbnNlcnRpb25zLCBidXQgeW91IGhhdmUgdG8gY2FsbCBpdCB5b3Vyc2VsZi4KK1xkZWZcb25lcGFnZW91dCMxeyUKKyAgXGlmY3JvcG1hcmtzIFxob2Zmc2V0PTBwdCBcZWxzZSBcaG9mZnNldD1cbm9ybWFsb2Zmc2V0IFxmaQorICAlCisgIFxpZm9kZFxwYWdlbm8gIFxhZHZhbmNlXGhvZmZzZXQgYnkgXGJpbmRpbmdvZmZzZXQKKyAgXGVsc2UgXGFkdmFuY2VcaG9mZnNldCBieSAtXGJpbmRpbmdvZmZzZXRcZmkKKyAgJQorICAlIERvIHRoaXMgb3V0c2lkZSBvZiB0aGUgXHNoaXBvdXQgc28gQGNvZGUgZXRjLiB3aWxsIGJlIGV4cGFuZGVkIGluCisgICUgdGhlIGhlYWRsaW5lIGFzIHRoZXkgc2hvdWxkIGJlLCBub3QgdGFrZW4gbGl0ZXJhbGx5IChvdXRwdXR0aW5nICcnY29kZSkuCisgIFxzZXRib3hcaGVhZGxpbmVib3ggPSBcdmJveHtcbGV0XGhzaXplPVxwYWdld2lkdGggXG1ha2VoZWFkbGluZX0lCisgIFxzZXRib3hcZm9vdGxpbmVib3ggPSBcdmJveHtcbGV0XGhzaXplPVxwYWdld2lkdGggXG1ha2Vmb290bGluZX0lCisgICUKKyAgeyUKKyAgICAlIEhhdmUgdG8gZG8gdGhpcyBzdHVmZiBvdXRzaWRlIHRoZSBcc2hpcG91dCBiZWNhdXNlIHdlIHdhbnQgaXQgdG8KKyAgICAlIHRha2UgZWZmZWN0IGluIFx3cml0ZSdzLCB5ZXQgdGhlIGdyb3VwIGRlZmluZWQgYnkgdGhlIFx2Ym94IGVuZHMKKyAgICAlIGJlZm9yZSB0aGUgXHNoaXBvdXQgcnVucy4KKyAgICAlCisgICAgXGluZGV4ZHVtbWllcyAgICAgICAgICUgZG9uJ3QgZXhwYW5kIGNvbW1hbmRzIGluIHRoZSBvdXRwdXQuCisgICAgXG5vcm1hbHR1cm5vZmZhY3RpdmUgICUgXCBpbiBpbmRleCBlbnRyaWVzIG11c3Qgbm90IHN0YXkgXCwgZS5nLiwgaWYKKyAgICAgICAgICAgICAgICUgdGhlIHBhZ2UgYnJlYWsgaGFwcGVucyB0byBiZSBpbiB0aGUgbWlkZGxlIG9mIGFuIGV4YW1wbGUuCisgICAgICAgICAgICAgICAlIFdlIGRvbid0IHdhbnQgLnZyIChvciB3aGF0ZXZlcikgZW50cmllcyBsaWtlIHRoaXM6CisgICAgICAgICAgICAgICAlIFxlbnRyeXt7XHR0IFxpbmRleGJhY2tzbGFzaCB9YWNyb255bX17MzJ9e1xjb2RlIHtcYWNyb255bX19CisgICAgICAgICAgICAgICAlICJcYWNyb255bSIgd29uJ3Qgd29yayB3aGVuIGl0J3MgcmVhZCBiYWNrIGluOworICAgICAgICAgICAgICAgJSBpdCBuZWVkcyB0byBiZSAKKyAgICAgICAgICAgICAgICUge1xjb2RlIHt7XHR0IFxiYWNrc2xhc2hjdXJmb250IH1hY3JvbnltfQorICAgIFxzaGlwb3V0XHZib3h7JQorICAgICAgJSBEbyB0aGlzIGVhcmx5IHNvIHBkZiByZWZlcmVuY2VzIGdvIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBhZ2UuCisgICAgICBcaWZwZGZtYWtlcGFnZWRlc3QgXHBkZmRlc3QgbmFtZXtcdGhlXHBhZ2Vub30geHl6XGZpCisgICAgICAlCisgICAgICBcaWZjcm9wbWFya3MgXHZib3ggdG8gXG91dGVydnNpemVcYmdyb3VwCisgICAgICAgIFxoc2l6ZSA9IFxvdXRlcmhzaXplCisgICAgICAgIFx2c2tpcC1cdG9wYW5kYm90dG9tbWFyZ2luCisgICAgICAgIFx2dG9wIHRvMHB0eyUKKyAgICAgICAgICBcbGluZXtcZXd0b3BcaGZpbFxld3RvcH0lCisgICAgICAgICAgXG5vaW50ZXJsaW5lc2tpcAorICAgICAgICAgIFxsaW5leyUKKyAgICAgICAgICAgIFx2Ym94e1xtb3ZlbGVmdFxjb3JuZXJ0aGlja1xuc3RvcH0lCisgICAgICAgICAgICBcaGZpbGwKKyAgICAgICAgICAgIFx2Ym94e1xtb3ZlcmlnaHRcY29ybmVydGhpY2tcbnN0b3B9JQorICAgICAgICAgIH0lCisgICAgICAgICAgXHZzc30lCisgICAgICAgIFx2c2tpcFx0b3BhbmRib3R0b21tYXJnaW4KKyAgICAgICAgXGxpbmVcYmdyb3VwCisgICAgICAgICAgXGhmaWwgJSBjZW50ZXIgdGhlIHBhZ2Ugd2l0aGluIHRoZSBvdXRlciAocGFnZSkgaHNpemUuCisgICAgICAgICAgXGlmb2RkXHBhZ2Vub1xoc2tpcFxiaW5kaW5nb2Zmc2V0XGZpCisgICAgICAgICAgXHZib3hcYmdyb3VwCisgICAgICBcZmkKKyAgICAgICUKKyAgICAgIFx1bnZib3hcaGVhZGxpbmVib3gKKyAgICAgIFxwYWdlYm9keXsjMX0lCisgICAgICBcaWZkaW1caHRcZm9vdGxpbmVib3ggPiAwcHQKKyAgICAgICAgJSBPbmx5IGxlYXZlIHRoaXMgc3BhY2UgaWYgdGhlIGZvb3RsaW5lIGlzIG5vbmVtcHR5LgorICAgICAgICAlIChXZSBsZXNzZW5lZCBcdnNpemUgZm9yIGl0IGluIFxvZGRmb290aW5neXl5LikKKyAgICAgICAgJSBUaGUgXGJhc2VsaW5lc2tpcD0yNHB0IGluIHBsYWluJ3MgXG1ha2Vmb290bGluZSBoYXMgbm8gZWZmZWN0LgorICAgICAgICBcdnNraXAgMjRwdAorICAgICAgICBcdW52Ym94XGZvb3RsaW5lYm94CisgICAgICBcZmkKKyAgICAgICUKKyAgICAgIFxpZmNyb3BtYXJrcworICAgICAgICAgIFxlZ3JvdXAgJSBlbmQgb2YgXHZib3hcYmdyb3VwCisgICAgICAgIFxoZmlsXGVncm91cCAlIGVuZCBvZiAoY2VudGVyaW5nKSBcbGluZVxiZ3JvdXAKKyAgICAgICAgXHZza2lwXHRvcGFuZGJvdHRvbW1hcmdpbiBwbHVzMWZpbGwgbWludXMxZmlsbAorICAgICAgICBcYm94bWF4ZGVwdGggPSBcY29ybmVydGhpY2sKKyAgICAgICAgXHZib3ggdG8wcHR7XHZzcworICAgICAgICAgIFxsaW5leyUKKyAgICAgICAgICAgIFx2Ym94e1xtb3ZlbGVmdFxjb3JuZXJ0aGlja1xuc2JvdH0lCisgICAgICAgICAgICBcaGZpbGwKKyAgICAgICAgICAgIFx2Ym94e1xtb3ZlcmlnaHRcY29ybmVydGhpY2tcbnNib3R9JQorICAgICAgICAgIH0lCisgICAgICAgICAgXG5vaW50ZXJsaW5lc2tpcAorICAgICAgICAgIFxsaW5le1xld2JvdFxoZmlsXGV3Ym90fSUKKyAgICAgICAgfSUKKyAgICAgIFxlZ3JvdXAgJSBcdmJveCBmcm9tIGZpcnN0IGNyb3BtYXJrcyBjbGF1c2UKKyAgICAgIFxmaQorICAgIH0lIGVuZCBvZiBcc2hpcG91dFx2Ym94CisgIH0lIGVuZCBvZiBncm91cCB3aXRoIFxpbmRleGR1bW1pZXMKKyAgXGFkdmFuY2VwYWdlbm8KKyAgXGlmbnVtXG91dHB1dHBlbmFsdHk+LTIwMDAwIFxlbHNlXGRvc3VwZXJlamVjdFxmaQorfQorCitcbmV3aW5zZXJ0XG1hcmdpbiBcZGltZW5cbWFyZ2luPVxtYXhkaW1lbgorCitcZGVmXHBhZ2Vib2R5IzF7XHZib3ggdG9ccGFnZWhlaWdodHtcYm94bWF4ZGVwdGg9XG1heGRlcHRoICMxfX0KK3tcY2F0Y29kZWBcQCA9MTEKK1xnZGVmXHBhZ2Vjb250ZW50cyMxe1xpZnZvaWRcdG9waW5zXGVsc2VcdW52Ym94XHRvcGluc1xmaQorJSBtYXJnaW5hbCBoYWNrcywganVoYUB2aWlzYS51dWNwIChKdWhhIFRha2FsYSkKK1xpZnZvaWRcbWFyZ2luXGVsc2UgJSBtYXJnaW5hbCBpbmZvIGlzIHByZXNlbnQKKyAgXHJsYXB7XGtlcm5caHNpemVcdmJveCB0b1x6QHtca2VybjFwdFxib3hcbWFyZ2luIFx2c3N9fVxmaQorXGRpbWVuQD1cZHAjMSBcdW52Ym94IzEKK1xpZnZvaWRcZm9vdGluc1xlbHNlXHZza2lwXHNraXBcZm9vdGluc1xmb290bm90ZXJ1bGUgXHVudmJveFxmb290aW5zXGZpCitcaWZyQGdnZWRib3R0b20gXGtlcm4tXGRpbWVuQCBcdmZpbCBcZml9Cit9CisKKyUgSGVyZSBhcmUgdGhlIHJ1bGVzIGZvciB0aGUgY3JvcG1hcmtzLiAgTm90ZSB0aGF0IHRoZXkgYXJlCislIG9mZnNldCBzbyB0aGF0IHRoZSBzcGFjZSBiZXR3ZWVuIHRoZW0gaXMgdHJ1bHkgXG91dGVyaHNpemUgb3IgXG91dGVydnNpemUKKyUgKFAuIEEuIE1hY0theSwgMTIgTm92ZW1iZXIsIDE5ODYpCislCitcZGVmXGV3dG9we1x2cnVsZSBoZWlnaHRcY29ybmVydGhpY2sgZGVwdGgwcHQgd2lkdGhcY29ybmVybG9uZ30KK1xkZWZcbnN0b3B7XHZib3gKKyAge1xocnVsZSBoZWlnaHRcY29ybmVydGhpY2sgZGVwdGhcY29ybmVybG9uZyB3aWR0aFxjb3JuZXJ0aGlja319CitcZGVmXGV3Ym90e1x2cnVsZSBoZWlnaHQwcHQgZGVwdGhcY29ybmVydGhpY2sgd2lkdGhcY29ybmVybG9uZ30KK1xkZWZcbnNib3R7XHZib3gKKyAge1xocnVsZSBoZWlnaHRcY29ybmVybG9uZyBkZXB0aFxjb3JuZXJ0aGljayB3aWR0aFxjb3JuZXJ0aGlja319CisKKyUgUGFyc2UgYW4gYXJndW1lbnQsIHRoZW4gcGFzcyBpdCB0byAjMS4gIFRoZSBhcmd1bWVudCBpcyB0aGUgcmVzdCBvZgorJSB0aGUgaW5wdXQgbGluZSAoZXhjZXB0IHdlIHJlbW92ZSBhIHRyYWlsaW5nIGNvbW1lbnQpLiAgIzEgc2hvdWxkIGJlIGEKKyUgbWFjcm8gd2hpY2ggZXhwZWN0cyBhbiBvcmRpbmFyeSB1bmRlbGltaXRlZCBUZVggYXJndW1lbnQuCislCitcZGVmXHBhcnNlYXJne1xwYXJzZWFyZ3VzaW5ne319CitcZGVmXHBhcnNlYXJndXNpbmcjMSMyeyUKKyAgXGRlZlxhcmd0b3J1bnsjMn0lCisgIFxiZWdpbmdyb3VwCisgICAgXG9iZXlsaW5lcworICAgIFxzcGFjZWlzc3BhY2UKKyAgICAjMSUKKyAgICBccGFyc2VhcmdsaW5lXGVtcHR5JSBJbnNlcnQgdGhlIFxlbXB0eSB0b2tlbiwgc2VlIFxmaW5pc2hwYXJzZWFyZyBiZWxvdy4KK30KKwore1xvYmV5bGluZXMgJQorICBcZ2RlZlxwYXJzZWFyZ2xpbmUjMV5eTXslCisgICAgXGVuZGdyb3VwICUgRW5kIG9mIHRoZSBncm91cCBzdGFydGVkIGluIFxwYXJzZWFyZy4KKyAgICBcYXJncmVtb3ZlY29tbWVudCAjMVxjb21tZW50XEFyZ1Rlcm0lCisgIH0lCit9CisKKyUgRmlyc3QgcmVtb3ZlIGFueSBAY29tbWVudCwgdGhlbiBhbnkgQGMgY29tbWVudC4KK1xkZWZcYXJncmVtb3ZlY29tbWVudCMxXGNvbW1lbnQjMlxBcmdUZXJte1xhcmdyZW1vdmVjICMxXGNcQXJnVGVybX0KK1xkZWZcYXJncmVtb3ZlYyMxXGMjMlxBcmdUZXJte1xhcmdjaGVja3NwYWNlcyMxXF5eTVxBcmdUZXJtfQorCislIEVhY2ggb2NjdXJlbmNlIG9mIGBcXl5NJyBvciBgPHNwYWNlPlxeXk0nIGlzIHJlcGxhY2VkIGJ5IGEgc2luZ2xlIHNwYWNlLgorJQorJSBcYXJncmVtb3ZlYyBtaWdodCBsZWF2ZSB1cyB3aXRoIHRyYWlsaW5nIHNwYWNlLCBlLmcuLAorJSAgICBAZW5kIGl0ZW1pemUgIEBjIGZvbworJSBUaGlzIHNwYWNlIHRva2VuIHVuZGVyZ29lcyB0aGUgc2FtZSBwcm9jZWR1cmUgYW5kIGlzIGV2ZW50dWFsbHkgcmVtb3ZlZAorJSBieSBcZmluaXNocGFyc2VhcmcuCislCitcZGVmXGFyZ2NoZWNrc3BhY2VzIzFcXl5Ne1xhcmdjaGVja3NwYWNlc1gjMVxeXk0gXF5eTX0KK1xkZWZcYXJnY2hlY2tzcGFjZXNYIzEgXF5eTXtcYXJnY2hlY2tzcGFjZXNZIzFcXl5NfQorXGRlZlxhcmdjaGVja3NwYWNlc1kjMVxeXk0jMlxeXk0jM1xBcmdUZXJteyUKKyAgXGRlZlx0ZW1weyMzfSUKKyAgXGlmeFx0ZW1wXGVtcHR5CisgICAgJSBEbyBub3QgdXNlIFxuZXh0LCBwZXJoYXBzIHRoZSBjYWxsZXIgb2YgXHBhcnNlYXJnIHVzZXMgaXQ7IHJldXNlIFx0ZW1wOgorICAgIFxsZXRcdGVtcFxmaW5pc2hwYXJzZWFyZworICBcZWxzZQorICAgIFxsZXRcdGVtcFxhcmdjaGVja3NwYWNlcworICBcZmkKKyAgJSBQdXQgdGhlIHNwYWNlIHRva2VuIGluOgorICBcdGVtcCMxICMzXEFyZ1Rlcm0KK30KKworJSBJZiBhIF9kZWxpbWl0ZWRfIGFyZ3VtZW50IGlzIGVuY2xvc2VkIGluIGJyYWNlcywgdGhleSBnZXQgc3RyaXBwZWQ7IHNvCislIHRvIGdldCBfZXhhY3RseV8gdGhlIHJlc3Qgb2YgdGhlIGxpbmUsIHdlIGhhZCB0byBwcmV2ZW50IHN1Y2ggc2l0dWF0aW9uLgorJSBXZSBwcmVwZW5kZWQgYW4gXGVtcHR5IHRva2VuIGF0IHRoZSB2ZXJ5IGJlZ2lubmluZyBhbmQgd2UgZXhwYW5kIGl0IG5vdywKKyUganVzdCBiZWZvcmUgcGFzc2luZyB0aGUgY29udHJvbCB0byBcYXJndG9ydW4uCislIChTaW1pbGFyaWx5LCB3ZSBoYXZlIHRvIHRoaW5rIGFib3V0ICMzIG9mIFxhcmdjaGVja3NwYWNlc1kgYWJvdmU6IGl0IGlzCislIGVpdGhlciB0aGUgbnVsbCBzdHJpbmcsIG9yIGl0IGVuZHMgd2l0aCBcXl5NLS0tdGh1cyB0aGVyZSBpcyBubyBkYW5nZXIKKyUgdGhhdCBhIHBhaXIgb2YgYnJhY2VzIHdvdWxkIGJlIHN0cmlwcGVkLgorJQorJSBCdXQgZmlyc3QsIHdlIGhhdmUgdG8gcmVtb3ZlIHRoZSB0cmFpbGluZyBzcGFjZSB0b2tlbi4KKyUKK1xkZWZcZmluaXNocGFyc2VhcmcjMSBcQXJnVGVybXtcZXhwYW5kYWZ0ZXJcYXJndG9ydW5cZXhwYW5kYWZ0ZXJ7IzF9fQorCislIFxwYXJzZWFyZ2RlZlxmb297Li4ufQorJQlpcyByb3VnaGx5IGVxdWl2YWxlbnQgdG8KKyUgXGRlZlxmb297XHBhcnNlYXJnXFhmb299CislIFxkZWZcWGZvbyMxey4uLn0KKyUKKyUgQWN0dWFsbHksIEkgdXNlIFxjc25hbWVcc3RyaW5nXGZvb1xlbmRjc25hbWUsIGllLiBcXGZvbywgYXMgaXQgaXMgbXkKKyUgZmF2b3VyaXRlIFRlWCB0cmljay4gIC0ta2FzYWwsIDE2bm92MDMKKworXGRlZlxwYXJzZWFyZ2RlZiMxeyUKKyAgXGV4cGFuZGFmdGVyIFxkb3BhcnNlYXJnZGVmIFxjc25hbWVcc3RyaW5nIzFcZW5kY3NuYW1lICMxJQorfQorXGRlZlxkb3BhcnNlYXJnZGVmIzEjMnslCisgIFxkZWYjMntccGFyc2VhcmcjMX0lCisgIFxkZWYjMSMjMSUKK30KKworJSBTZXZlcmFsIHV0aWxpdHkgZGVmaW5pdGlvbnMgd2l0aCBhY3RpdmUgc3BhY2U6Cit7CisgIFxvYmV5c3BhY2VzCisgIFxnZGVmXG9iZXllZHNwYWNleyB9CisKKyAgJSBNYWtlIGVhY2ggc3BhY2UgY2hhcmFjdGVyIGluIHRoZSBpbnB1dCBwcm9kdWNlIGEgbm9ybWFsIGludGVyd29yZAorICAlIHNwYWNlIGluIHRoZSBvdXRwdXQuICBEb24ndCBhbGxvdyBhIGxpbmUgYnJlYWsgYXQgdGhpcyBzcGFjZSwgYXMgdGhpcworICAlIGlzIHVzZWQgb25seSBpbiBlbnZpcm9ubWVudHMgbGlrZSBAZXhhbXBsZSwgd2hlcmUgZWFjaCBsaW5lIG9mIGlucHV0CisgICUgc2hvdWxkIHByb2R1Y2UgYSBsaW5lIG9mIG91dHB1dCBhbnl3YXkuCisgICUKKyAgXGdkZWZcc2Vwc3BhY2Vze1xvYmV5c3BhY2VzXGxldCA9XHRpZX0KKworICAlIElmIGFuIGluZGV4IGNvbW1hbmQgaXMgdXNlZCBpbiBhbiBAZXhhbXBsZSBlbnZpcm9ubWVudCwgYW55IHNwYWNlcworICAlIHRoZXJlaW4gc2hvdWxkIGJlY29tZSByZWd1bGFyIHNwYWNlcyBpbiB0aGUgcmF3IGluZGV4IGZpbGUsIG5vdCB0aGUKKyAgJSBleHBhbnNpb24gb2YgXHRpZSAoXGxlYXZldm1vZGUgXHBlbmFsdHkgXEBNIFwgKS4KKyAgXGdkZWZcdW5zZXBzcGFjZXN7XGxldCA9XHNwYWNlfQorfQorCisKK1xkZWZcZmx1c2hjcntcaWZ4XHBhclxsaXNwcGFyIFxkZWZcbmV4dCMjMXt9XGVsc2UgXGxldFxuZXh0PVxyZWxheCBcZmkgXG5leHR9CisKKyUgRGVmaW5lIHRoZSBmcmFtZXdvcmsgZm9yIGVudmlyb25tZW50cyBpbiB0ZXhpbmZvLnRleC4gIEl0J3MgdXNlZCBsaWtlIHRoaXM6CislCislICAgXGVudmRlZlxmb297Li4ufQorJSAgIFxkZWZcRWZvb3suLi59CislCislIEl0J3MgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIFxlbnZkZWYgdG8gaW5zZXJ0IFxiZWdpbmdyb3VwIGJlZm9yZSB0aGUKKyUgYWN0dWFsIGJvZHk7IEBlbmQgY2xvc2VzIHRoZSBncm91cCBhZnRlciBjYWxsaW5nIFxFZm9vLiAgXGVudmRlZiBhbHNvCislIGRlZmluZXMgXHRoaXNlbnYsIHNvIHRoZSBjdXJyZW50IGVudmlyb25tZW50IGlzIGtub3duOyBAZW5kIGNoZWNrcworJSB3aGV0aGVyIHRoZSBlbnZpcm9ubWVudCBuYW1lIG1hdGNoZXMuICBUaGUgXGNoZWNrZW52IG1hY3JvIGNhbiBhbHNvIGJlCislIHVzZWQgdG8gY2hlY2sgd2hldGhlciB0aGUgY3VycmVudCBlbnZpcm9ubWVudCBpcyB0aGUgb25lIGV4cGVjdGVkLgorJQorJSBOb24tZmFsc2UgY29uZGl0aW9uYWxzIChAaWZ0ZXgsIEBpZnNldCkgZG9uJ3QgZml0IGludG8gdGhpcywgc28gdGhleQorJSBhcmUgbm90IHRyZWF0ZWQgYXMgZW52aXJvbWVudHM7IHRoZXkgZG9uJ3Qgb3BlbiBhIGdyb3VwLiAgKFRoZQorJSBpbXBsZW1lbnRhdGlvbiBvZiBAZW5kIHRha2VzIGNhcmUgbm90IHRvIGNhbGwgXGVuZGdyb3VwIGluIHRoaXMKKyUgc3BlY2lhbCBjYXNlLikKKworCislIEF0IHJ1bnRpbWUsIGVudmlyb25tZW50cyBzdGFydCB3aXRoIHRoaXM6CitcZGVmXHN0YXJ0ZW52aXJvbm1lbnQjMXtcYmVnaW5ncm91cFxkZWZcdGhpc2VudnsjMX19CislIGluaXRpYWxpemUKK1xsZXRcdGhpc2VudlxlbXB0eQorCislIC4uLiBidXQgdGhleSBnZXQgZGVmaW5lZCB2aWEgYGBcZW52ZGVmXGZvb3suLi59Jyc6CitcbG9uZ1xkZWZcZW52ZGVmIzEjMntcZGVmIzF7XHN0YXJ0ZW52aXJvbm1lbnQjMSMyfX0KK1xkZWZcZW52cGFyc2VhcmdkZWYjMSMye1xwYXJzZWFyZ2RlZiMxe1xzdGFydGVudmlyb25tZW50IzEjMn19CisKKyUgQ2hlY2sgd2hldGhlciB3ZSdyZSBpbiB0aGUgcmlnaHQgZW52aXJvbm1lbnQ6CitcZGVmXGNoZWNrZW52IzF7JQorICBcZGVmXHRlbXB7IzF9JQorICBcaWZ4XHRoaXNlbnZcdGVtcAorICBcZWxzZQorICAgIFxiYWRlbnZlcnIKKyAgXGZpCit9CisKKyUgRXZpcm9ubWVudCBtaXNtYXRjaCwgIzEgZXhwZWN0ZWQ6CitcZGVmXGJhZGVudmVycnslCisgIFxlcnJoZWxwID0gXEVNc2ltcGxlCisgIFxlcnJtZXNzYWdle1RoaXMgY29tbWFuZCBjYW4gYXBwZWFyIG9ubHkgXGluZW52aXJvbm1lbnRcdGVtcCwKKyAgICBub3QgXGluZW52aXJvbm1lbnRcdGhpc2Vudn0lCit9CitcZGVmXGluZW52aXJvbm1lbnQjMXslCisgIFxpZngjMVxlbXB0eQorICAgIG91dCBvZiBhbnkgZW52aXJvbm1lbnQlCisgIFxlbHNlCisgICAgaW4gZW52aXJvbm1lbnQgXGV4cGFuZGFmdGVyXHN0cmluZyMxJQorICBcZmkKK30KKworJSBAZW5kIGZvbyBleGVjdXRlcyB0aGUgZGVmaW5pdGlvbiBvZiBcRWZvby4KKyUgQnV0IGZpcnN0LCBpdCBleGVjdXRlcyBhIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgXGNoZWNrZW52CislCitccGFyc2VhcmdkZWZcZW5keyUKKyAgXGlmIDFcY3NuYW1lIGlzY29uZC4jMVxlbmRjc25hbWUKKyAgXGVsc2UKKyAgICAlIFRoZSBnZW5lcmFsIHdvcmRpbmcgb2YgXGJhZGVudmVyciBtYXkgbm90IGJlIGlkZWFsLCBidXQuLi4gLS1rYXNhbCwgMDZub3YwMworICAgIFxleHBhbmRhZnRlclxjaGVja2Vudlxjc25hbWUjMVxlbmRjc25hbWUKKyAgICBcY3NuYW1lIEUjMVxlbmRjc25hbWUKKyAgICBcZW5kZ3JvdXAKKyAgXGZpCit9CisKK1xuZXdoZWxwXEVNc2ltcGxle1ByZXNzIFJFVFVSTiB0byBjb250aW51ZS59CisKKworJSUgU2ltcGxlIHNpbmdsZS1jaGFyYWN0ZXIgQCBjb21tYW5kcworCislIEBAIHByaW50cyBhbiBACislIEtsdWRnZSB0aGlzIHVudGlsIHRoZSBmb250cyBhcmUgcmlnaHQgKGdycikuCitcZGVmXEB7e1x0dFxjaGFyNjR9fQorCislIFRoaXMgaXMgdHVybmVkIG9mZiBiZWNhdXNlIGl0IHdhcyBuZXZlciBkb2N1bWVudGVkCislIGFuZCB5b3UgY2FuIHVzZSBAd3suLi59IGFyb3VuZCBhIHF1b3RlIHRvIHN1cHByZXNzIGxpZ2F0dXJlcy4KKyUlIERlZmluZSBAYCBhbmQgQCcgdG8gYmUgdGhlIHNhbWUgYXMgYCBhbmQgJworJSUgYnV0IHN1cHByZXNzaW5nIGxpZ2F0dXJlcy4KKyVcZGVmXGB7e2B9fQorJVxkZWZcJ3t7J319CisKKyUgVXNlZCB0byBnZW5lcmF0ZSBxdW90ZWQgYnJhY2VzLgorXGRlZlxteWxicmFjZSB7e1x0dFxjaGFyMTIzfX0KK1xkZWZcbXlyYnJhY2Uge3tcdHRcY2hhcjEyNX19CitcbGV0XHs9XG15bGJyYWNlCitcbGV0XH09XG15cmJyYWNlCitcYmVnaW5ncm91cAorICAlIERlZmluaXRpb25zIHRvIHByb2R1Y2UgXHsgYW5kIFx9IGNvbW1hbmRzIGZvciBpbmRpY2VzLAorICAlIGFuZCBAeyBhbmQgQH0gZm9yIHRoZSBhdXgvdG9jIGZpbGVzLgorICBcY2F0Y29kZWBceyA9IFxvdGhlciBcY2F0Y29kZWBcfSA9IFxvdGhlcgorICBcY2F0Y29kZWBcWyA9IDEgXGNhdGNvZGVgXF0gPSAyCisgIFxjYXRjb2RlYFwhID0gMCBcY2F0Y29kZWBcXCA9IFxvdGhlcgorICAhZ2RlZiFsYnJhY2VjbWRbXHtdJQorICAhZ2RlZiFyYnJhY2VjbWRbXH1dJQorICAhZ2RlZiFsYnJhY2VhdGNtZFtAe10lCisgICFnZGVmIXJicmFjZWF0Y21kW0B9XSUKKyFlbmRncm91cAorCislIEBjb21tYXt9IHRvIGF2b2lkICwgcGFyc2luZyBwcm9ibGVtcy4KK1xsZXRcY29tbWEgPSAsCisKKyUgQWNjZW50czogQCwgQGRvdGFjY2VudCBAcmluZ2FjY2VudCBAdWJhcmFjY2VudCBAdWRvdGFjY2VudAorJSBPdGhlcnMgYXJlIGRlZmluZWQgYnkgcGxhaW4gVGVYOiBAYCBAJyBAIiBAXiBAfiBAPSBAdSBAdiBASC4KK1xsZXRcLCA9IFxjCitcbGV0XGRvdGFjY2VudCA9IFwuCitcZGVmXHJpbmdhY2NlbnQjMXt7XGFjY2VudDIzICMxfX0KK1xsZXRcdGllYWNjZW50ID0gXHQKK1xsZXRcdWJhcmFjY2VudCA9IFxiCitcbGV0XHVkb3RhY2NlbnQgPSBcZAorCislIE90aGVyIHNwZWNpYWwgY2hhcmFjdGVyczogQHF1ZXN0aW9uZG93biBAZXhjbGFtZG93biBAb3JkZiBAb3JkbQorJSBQbGFpbiBUZVggZGVmaW5lczogQEFBIEBBRSBATyBAT0UgQEwgKHBsdXMgbG93ZXJjYXNlIHZlcnNpb25zKSBAc3MuCitcZGVmXHF1ZXN0aW9uZG93bns/YH0KK1xkZWZcZXhjbGFtZG93bnshYH0KK1xkZWZcb3JkZntcbGVhdmV2bW9kZVxyYWlzZTFleFxoYm94e1xzZWxlY3Rmb250c1xsbGxzaXplIFx1bmRlcmJhcnthfX19CitcZGVmXG9yZG17XGxlYXZldm1vZGVccmFpc2UxZXhcaGJveHtcc2VsZWN0Zm9udHNcbGxsc2l6ZSBcdW5kZXJiYXJ7b319fQorCislIERvdGxlc3MgaSBhbmQgZG90bGVzcyBqLCB1c2VkIGZvciBhY2NlbnRzLgorXGRlZlxpbWFjcm97aX0KK1xkZWZcam1hY3Jve2p9CitcZGVmXGRvdGxlc3MjMXslCisgIFxkZWZcdGVtcHsjMX0lCisgIFxpZnhcdGVtcFxpbWFjcm8gXHB0ZXhpCisgIFxlbHNlXGlmeFx0ZW1wXGptYWNybyBcagorICBcZWxzZSBcZXJybWVzc2FnZXtAZG90bGVzcyBjYW4gYmUgdXNlZCBvbmx5IHdpdGggaSBvciBqfSUKKyAgXGZpXGZpCit9CisKKyUgVGhlIFxUZVh7fSBsb2dvLCBhcyBpbiBwbGFpbiwgYnV0IHJlc2V0dGluZyB0aGUgc3BhY2luZyBzbyB0aGF0IGEKKyUgcGVyaW9kIGZvbGxvd2luZyBjb3VudHMgYXMgZW5kaW5nIGEgc2VudGVuY2UuICAoSWRlYSBmb3VuZCBpbiBsYXRleC4pCislCitcZWRlZlxUZVh7XFRlWCBcc3BhY2VmYWN0b3I9MTAwMCB9CisKKyUgQExhVGVYe30gbG9nby4gIE5vdCBxdWl0ZSB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSBkZWZpbml0aW9uIGluCislIGxhdGV4Lmx0eCwgc2luY2Ugd2UgdXNlIGEgZGlmZmVyZW50IGZvbnQgZm9yIHRoZSByYWlzZWQgQTsgaXQncyBtb3N0CislIGNvbnZlbmllbnQgZm9yIHVzIHRvIHVzZSBhbiBleHBsaWNpdGx5IHNtYWxsZXIgZm9udCwgcmF0aGVyIHRoYW4gdXNpbmcKKyUgdGhlIFxzY3JpcHRzdHlsZSBmb250IChzaW5jZSB3ZSBkb24ndCByZXNldCBcc2NyaXB0c3R5bGUgYW5kCislIFxzY3JpcHRzY3JpcHRzdHlsZSkuCislCitcZGVmXExhVGVYeyUKKyAgTFxrZXJuLS4zNmVtCisgIHtcc2V0Ym94MD1caGJveHtUfSUKKyAgIFx2Ym94IHRvIFxodDB7XGhib3h7XHNlbGVjdGZvbnRzXGxsbHNpemUgQX1cdnNzfX0lCisgIFxrZXJuLS4xNWVtCisgIFxUZVgKK30KKworJSBCZSBzdXJlIHdlJ3JlIGluIGhvcml6b250YWwgbW9kZSB3aGVuIGRvaW5nIGEgdGllLCBzaW5jZSB3ZSBtYWtlIHNwYWNlCislIGVxdWl2YWxlbnQgdG8gdGhpcyBpbiBAZXhhbXBsZS1saWtlIGVudmlyb25tZW50cy4gT3RoZXJ3aXNlLCBhIHNwYWNlCislIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lIHdpbGwgc3RhcnQgd2l0aCBccGVuYWx0eSAtLSBhbmQKKyUgc2luY2UgXHBlbmFsdHkgaXMgdmFsaWQgaW4gdmVydGljYWwgbW9kZSwgd2UnZCBlbmQgdXAgcHV0dGluZyB0aGUKKyUgcGVuYWx0eSBvbiB0aGUgdmVydGljYWwgbGlzdCBpbnN0ZWFkIG9mIGluIHRoZSBuZXcgcGFyYWdyYXBoLgore1xjYXRjb2RlYEAgPSAxMQorICUgQXZvaWQgdXNpbmcgXEBNIGRpcmVjdGx5LCBiZWNhdXNlIHRoYXQgY2F1c2VzIHRyb3VibGUKKyAlIGlmIHRoZSBkZWZpbml0aW9uIGlzIHdyaXR0ZW4gaW50byBhbiBpbmRleCBmaWxlLgorIFxnbG9iYWxcbGV0XHRpZXBlbmFsdHkgPSBcQE0KKyBcZ2RlZlx0aWV7XGxlYXZldm1vZGVccGVuYWx0eVx0aWVwZW5hbHR5XCB9Cit9CisKKyUgQDogZm9yY2VzIG5vcm1hbCBzaXplIHdoaXRlc3BhY2UgZm9sbG93aW5nLgorXGRlZlw6e1xzcGFjZWZhY3Rvcj0xMDAwIH0KKworJSBAKiBmb3JjZXMgYSBsaW5lIGJyZWFrLgorXGRlZlwqe1xoZmlsXGJyZWFrXGhib3h7fVxpZ25vcmVzcGFjZXN9CisKKyUgQC8gYWxsb3dzIGEgbGluZSBicmVhay4KK1xsZXRcLz1cYWxsb3dicmVhaworCislIEAuIGlzIGFuIGVuZC1vZi1zZW50ZW5jZSBwZXJpb2QuCitcZGVmXC57LlxzcGFjZWZhY3Rvcj1cZW5kb2ZzZW50ZW5jZXNwYWNlZmFjdG9yXHNwYWNlfQorCislIEAhIGlzIGFuIGVuZC1vZi1zZW50ZW5jZSBiYW5nLgorXGRlZlwheyFcc3BhY2VmYWN0b3I9XGVuZG9mc2VudGVuY2VzcGFjZWZhY3RvclxzcGFjZX0KKworJSBAPyBpcyBhbiBlbmQtb2Ytc2VudGVuY2UgcXVlcnkuCitcZGVmXD97P1xzcGFjZWZhY3Rvcj1cZW5kb2ZzZW50ZW5jZXNwYWNlZmFjdG9yXHNwYWNlfQorCislIEBmcmVuY2hzcGFjaW5nIG9ufG9mZiAgc2F5cyB3aGV0aGVyIHRvIHB1dCBleHRyYSBzcGFjZSBhZnRlciBwdW5jdHVhdGlvbi4KKyUgCitcZGVmXG9ud29yZHtvbn0KK1xkZWZcb2Zmd29yZHtvZmZ9CislCitccGFyc2VhcmdkZWZcZnJlbmNoc3BhY2luZ3slCisgIFxkZWZcdGVtcHsjMX0lCisgIFxpZnhcdGVtcFxvbndvcmQgXHBsYWluZnJlbmNoc3BhY2luZworICBcZWxzZVxpZnhcdGVtcFxvZmZ3b3JkIFxwbGFpbm5vbmZyZW5jaHNwYWNpbmcKKyAgXGVsc2UKKyAgICBcZXJyaGVscCA9IFxFTXNpbXBsZQorICAgIFxlcnJtZXNzYWdle1Vua25vd24gQGZyZW5jaHNwYWNpbmcgb3B0aW9uIGBcdGVtcCcsIG11c3QgYmUgb24vb2ZmfSUKKyAgXGZpXGZpCit9CisKKyUgQHcgcHJldmVudHMgYSB3b3JkIGJyZWFrLiAgV2l0aG91dCB0aGUgXGxlYXZldm1vZGUsIEB3IGF0IHRoZQorJSBiZWdpbm5pbmcgb2YgYSBwYXJhZ3JhcGgsIHdoZW4gVGVYIGlzIHN0aWxsIGluIHZlcnRpY2FsIG1vZGUsIHdvdWxkCislIHByb2R1Y2UgYSB3aG9sZSBsaW5lIG9mIG91dHB1dCBpbnN0ZWFkIG9mIHN0YXJ0aW5nIHRoZSBwYXJhZ3JhcGguCitcZGVmXHcjMXtcbGVhdmV2bW9kZVxoYm94eyMxfX0KKworJSBAZ3JvdXAgLi4uIEBlbmQgZ3JvdXAgZm9yY2VzIC4uLiB0byBiZSBhbGwgb24gb25lIHBhZ2UsIGJ5IGVuY2xvc2luZworJSBpdCBpbiBhIFRlWCB2Ym94LiAgV2UgdXNlIFx2dG9wIGluc3RlYWQgb2YgXHZib3ggdG8gY29uc3RydWN0IHRoZSBib3gKKyUgdG8ga2VlcCBpdHMgaGVpZ2h0IHRoYXQgb2YgYSBub3JtYWwgbGluZS4gIEFjY29yZGluZyB0byB0aGUgcnVsZXMgZm9yCislIFx0b3Bza2lwIChwLjExNCBvZiB0aGUgVGVYYm9vayksIHRoZSBnbHVlIGluc2VydGVkIGlzCislIG1heCAoXHRvcHNraXAgLSBcaHQgKGZpcnN0IGl0ZW0pLCAwKS4gIElmIHRoYXQgaGVpZ2h0IGlzIGxhcmdlLAorJSB0aGVyZWZvcmUsIG5vIGdsdWUgaXMgaW5zZXJ0ZWQsIGFuZCB0aGUgc3BhY2UgYmV0d2VlbiB0aGUgaGVhZGxpbmUgYW5kCislIHRoZSB0ZXh0IGlzIHNtYWxsLCB3aGljaCBsb29rcyBiYWQuCislCislIEFub3RoZXIgY29tcGxpY2F0aW9uIGlzIHRoYXQgdGhlIGdyb3VwIG1pZ2h0IGJlIHZlcnkgbGFyZ2UuICBUaGlzIGNhbgorJSBjYXVzZSB0aGUgZ2x1ZSBvbiB0aGUgcHJldmlvdXMgcGFnZSB0byBiZSB1bmR1bHkgc3RyZXRjaGVkLCBiZWNhdXNlIGl0CislIGRvZXMgbm90IGhhdmUgbXVjaCBtYXRlcmlhbC4gIEluIHRoaXMgY2FzZSwgaXQncyBiZXR0ZXIgdG8gYWRkIGFuCislIGV4cGxpY2l0IFx2ZmlsbCBzbyB0aGF0IHRoZSBleHRyYSBzcGFjZSBpcyBhdCB0aGUgYm90dG9tLiAgVGhlCislIHRocmVzaG9sZCBmb3IgZG9pbmcgdGhpcyBpcyBpZiB0aGUgZ3JvdXAgaXMgbW9yZSB0aGFuIFx2ZmlsbGxpbWl0CislIHBlcmNlbnQgb2YgYSBwYWdlIChcdmZpbGxsaW1pdCBjYW4gYmUgY2hhbmdlZCBpbnNpZGUgb2YgQHRleCkuCislCitcbmV3Ym94XGdyb3VwYm94CitcZGVmXHZmaWxsbGltaXR7MC43fQorJQorXGVudmRlZlxncm91cHslCisgIFxpZm51bVxjYXRjb2RlYFxeXk09XGFjdGl2ZSBcZWxzZQorICAgIFxlcnJoZWxwID0gXGdyb3VwaW52YWxpZGhlbHAKKyAgICBcZXJybWVzc2FnZXtAZ3JvdXAgaW52YWxpZCBpbiBjb250ZXh0IHdoZXJlIGZpbGxpbmcgaXMgZW5hYmxlZH0lCisgIFxmaQorICBcc3RhcnRzYXZpbmdpbnNlcnRzCisgICUKKyAgXHNldGJveFxncm91cGJveCA9IFx2dG9wXGJncm91cAorICAgICUgRG8gQGNvbW1lbnQgc2luY2Ugd2UgYXJlIGNhbGxlZCBpbnNpZGUgYW4gZW52aXJvbm1lbnQgc3VjaCBhcworICAgICUgQGV4YW1wbGUsIHdoZXJlIGVhY2ggZW5kLW9mLWxpbmUgaW4gdGhlIGlucHV0IGNhdXNlcyBhbgorICAgICUgZW5kLW9mLWxpbmUgaW4gdGhlIG91dHB1dC4gIFdlIGRvbid0IHdhbnQgdGhlIGVuZC1vZi1saW5lIGFmdGVyCisgICAgJSB0aGUgYEBncm91cCcgdG8gcHV0IGV4dHJhIHNwYWNlIGluIHRoZSBvdXRwdXQuICBTaW5jZSBAZ3JvdXAKKyAgICAlIHNob3VsZCBhcHBlYXIgb24gYSBsaW5lIGJ5IGl0c2VsZiAoYWNjb3JkaW5nIHRvIHRoZSBUZXhpbmZvCisgICAgJSBtYW51YWwpLCB3ZSBkb24ndCB3b3JyeSBhYm91dCBlYXRpbmcgYW55IHVzZXIgdGV4dC4KKyAgICBcY29tbWVudAorfQorJQorJSBUaGUgXHZ0b3AgcHJvZHVjZXMgYSBib3ggd2l0aCBub3JtYWwgaGVpZ2h0IGFuZCBsYXJnZSBkZXB0aDsgdGh1cywgVGVYIHB1dHMKKyUgXGJhc2VsaW5lc2tpcCBnbHVlIGJlZm9yZSBpdCwgYW5kICh3aGVuIHRoZSBuZXh0IGxpbmUgb2YgdGV4dCBpcyBkb25lKQorJSBcbGluZXNraXAgZ2x1ZSBhZnRlciBpdC4gIFRodXMsIHNwYWNlIGJlbG93IGlzIG5vdCBxdWl0ZSBlcXVhbCB0byBzcGFjZQorJSBhYm92ZS4gIEJ1dCBpdCdzIHByZXR0eSBjbG9zZS4KK1xkZWZcRWdyb3VweyUKKyAgICAlIFRvIGdldCBjb3JyZWN0IGludGVybGluZSBzcGFjZSBiZXR3ZWVuIHRoZSBsYXN0IGxpbmUgb2YgdGhlIGdyb3VwCisgICAgJSBhbmQgdGhlIGZpcnN0IGxpbmUgYWZ0ZXJ3YXJkcywgd2UgaGF2ZSB0byBwcm9wYWdhdGUgXHByZXZkZXB0aC4KKyAgICBcZW5kZ3JhZiAlIE5vdCBccGFyLCBhcyBpdCBtYXkgaGF2ZSBiZWVuIHNldCB0byBcbGlzcHBhci4KKyAgICBcZ2xvYmFsXGRpbWVuMSA9IFxwcmV2ZGVwdGgKKyAgXGVncm91cCAgICAgICAgICAgJSBFbmQgdGhlIFx2dG9wLgorICAlIFxkaW1lbjAgaXMgdGhlIHZlcnRpY2FsIHNpemUgb2YgdGhlIGdyb3VwJ3MgYm94LgorICBcZGltZW4wID0gXGh0XGdyb3VwYm94ICBcYWR2YW5jZVxkaW1lbjAgYnkgXGRwXGdyb3VwYm94CisgICUgXGRpbWVuMiBpcyBob3cgbXVjaCBzcGFjZSBpcyBsZWZ0IG9uIHRoZSBwYWdlIChtb3JlIG9yIGxlc3MpLgorICBcZGltZW4yID0gXHBhZ2VoZWlnaHQgICBcYWR2YW5jZVxkaW1lbjIgYnkgLVxwYWdldG90YWwKKyAgJSBpZiB0aGUgZ3JvdXAgZG9lc24ndCBmaXQgb24gdGhlIGN1cnJlbnQgcGFnZSwgYW5kIGl0J3MgYSBiaWcgYmlnCisgICUgZ3JvdXAsIGZvcmNlIGEgcGFnZSBicmVhay4KKyAgXGlmZGltIFxkaW1lbjAgPiBcZGltZW4yCisgICAgXGlmZGltIFxwYWdldG90YWwgPCBcdmZpbGxsaW1pdFxwYWdlaGVpZ2h0CisgICAgICBccGFnZQorICAgIFxmaQorICBcZmkKKyAgXGJveFxncm91cGJveAorICBccHJldmRlcHRoID0gXGRpbWVuMQorICBcY2hlY2tpbnNlcnRzCit9CislCislIFRlWCBwdXRzIGluIGFuIFxlc2NhcGVjaGFyIChpLmUuLCBgQCcpIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGhlbHAKKyUgbWVzc2FnZSwgc28gdGhpcyBlbmRzIHVwIHByaW50aW5nIGBAZ3JvdXAgY2FuIG9ubHkgLi4uJy4KKyUKK1xuZXdoZWxwXGdyb3VwaW52YWxpZGhlbHB7JQorZ3JvdXAgY2FuIG9ubHkgYmUgdXNlZCBpbiBlbnZpcm9ubWVudHMgc3VjaCBhcyBAZXhhbXBsZSxeXkolCit3aGVyZSBlYWNoIGxpbmUgb2YgaW5wdXQgcHJvZHVjZXMgYSBsaW5lIG9mIG91dHB1dC59CisKKyUgQG5lZWQgc3BhY2UtaW4tbWlscworJSBmb3JjZXMgYSBwYWdlIGJyZWFrIGlmIHRoZXJlIGlzIG5vdCBzcGFjZS1pbi1taWxzIHJlbWFpbmluZy4KKworXG5ld2RpbWVuXG1pbCAgXG1pbD0wLjAwMWluCisKKyUgT2xkIGRlZmluaXRpb24tLWRpZG4ndCB3b3JrLgorJVxwYXJzZWFyZ2RlZlxuZWVke1xwYXIgJQorJSUgVGhpcyBtZXRob2QgdHJpZXMgdG8gbWFrZSBUZVggYnJlYWsgdGhlIHBhZ2UgbmF0dXJhbGx5CislJSBpZiB0aGUgZGVwdGggb2YgdGhlIGJveCBkb2VzIG5vdCBmaXQuCisle1xiYXNlbGluZXNraXA9MHB0JQorJVx2dG9wIHRvICMxXG1pbHtcdmZpbH1ca2VybiAtIzFcbWlsXG5vYnJlYWsKKyVccHJldmRlcHRoPS0xMDAwcHQKKyV9fQorCitccGFyc2VhcmdkZWZcbmVlZHslCisgICUgRW5zdXJlIHZlcnRpY2FsIG1vZGUsIHNvIHdlIGRvbid0IG1ha2UgYSBiaWcgYm94IGluIHRoZSBtaWRkbGUgb2YgYQorICAlIHBhcmFncmFwaC4KKyAgXHBhcgorICAlCisgICUgSWYgdGhlIEBuZWVkIHZhbHVlIGlzIGxlc3MgdGhhbiBvbmUgbGluZSBzcGFjZSwgaXQncyB1c2VsZXNzLgorICBcZGltZW4wID0gIzFcbWlsCisgIFxkaW1lbjIgPSBcaHRcc3RydXRib3gKKyAgXGFkdmFuY2VcZGltZW4yIGJ5IFxkcFxzdHJ1dGJveAorICBcaWZkaW1cZGltZW4wID4gXGRpbWVuMgorICAgICUKKyAgICAlIERvIGEgXHN0cnV0IGp1c3QgdG8gbWFrZSB0aGUgaGVpZ2h0IG9mIHRoaXMgYm94IGJlIG5vcm1hbCwgc28gdGhlCisgICAgJSBub3JtYWwgbGVhZGluZyBpcyBpbnNlcnRlZCByZWxhdGl2ZSB0byB0aGUgcHJlY2VkaW5nIGxpbmUuCisgICAgJSBBbmQgYSBwYWdlIGJyZWFrIGhlcmUgaXMgZmluZS4KKyAgICBcdnRvcCB0byAjMVxtaWx7XHN0cnV0XHZmaWx9JQorICAgICUKKyAgICAlIFRlWCBkb2VzIG5vdCBldmVuIGNvbnNpZGVyIHBhZ2UgYnJlYWtzIGlmIGEgcGVuYWx0eSBhZGRlZCB0byB0aGUKKyAgICAlIG1haW4gdmVydGljYWwgbGlzdCBpcyAxMDAwMCBvciBtb3JlLiAgQnV0IGluIG9yZGVyIHRvIHNlZSBpZiB0aGUKKyAgICAlIGVtcHR5IGJveCB3ZSBqdXN0IGFkZGVkIGZpdHMgb24gdGhlIHBhZ2UsIHdlIG11c3QgbWFrZSBpdCBjb25zaWRlcgorICAgICUgcGFnZSBicmVha3MuICBPbiB0aGUgb3RoZXIgaGFuZCwgd2UgZG9uJ3Qgd2FudCB0byBhY3R1YWxseSBicmVhayB0aGUKKyAgICAlIHBhZ2UgYWZ0ZXIgdGhlIGVtcHR5IGJveC4gIFNvIHdlIHVzZSBhIHBlbmFsdHkgb2YgOTk5OS4KKyAgICAlCisgICAgJSBUaGVyZSBpcyBhbiBleHRyZW1lbHkgc21hbGwgY2hhbmNlIHRoYXQgVGVYIHdpbGwgYWN0dWFsbHkgYnJlYWsgdGhlCisgICAgJSBwYWdlIGF0IHRoaXMgXHBlbmFsdHksIGlmIHRoZXJlIGFyZSBubyBvdGhlciBmZWFzaWJsZSBicmVha3BvaW50cyBpbgorICAgICUgc2lnaHQuICAoSWYgdGhlIHVzZXIgaXMgdXNpbmcgbG90cyBvZiBiaWcgQGdyb3VwIGNvbW1hbmRzLCB3aGljaAorICAgICUgYWxtb3N0LWJ1dC1ub3QtcXVpdGUgZmlsbCB1cCBhIHBhZ2UsIFRlWCB3aWxsIGhhdmUgYSBoYXJkIHRpbWUgZG9pbmcKKyAgICAlIGdvb2QgcGFnZSBicmVha2luZywgZm9yIGV4YW1wbGUuKSAgSG93ZXZlciwgSSBjb3VsZCBub3QgY29uc3RydWN0IGFuCisgICAgJSBleGFtcGxlIHdoZXJlIGEgcGFnZSBicm9rZSBhdCB0aGlzIFxwZW5hbHR5OyBpZiBpdCBoYXBwZW5zIGluIGEgcmVhbAorICAgICUgZG9jdW1lbnQsIHRoZW4gd2UgY2FuIHJlY29uc2lkZXIgb3VyIHN0cmF0ZWd5LgorICAgIFxwZW5hbHR5OTk5OQorICAgICUKKyAgICAlIEJhY2sgdXAgYnkgdGhlIHNpemUgb2YgdGhlIGJveCwgd2hldGhlciB3ZSBkaWQgYSBwYWdlIGJyZWFrIG9yIG5vdC4KKyAgICBca2VybiAtIzFcbWlsCisgICAgJQorICAgICUgRG8gbm90IGFsbG93IGEgcGFnZSBicmVhayByaWdodCBhZnRlciB0aGlzIGtlcm4uCisgICAgXG5vYnJlYWsKKyAgXGZpCit9CisKKyUgQGJyICAgZm9yY2VzIHBhcmFncmFwaCBicmVhayAoYW5kIGlzIHVuZG9jdW1lbnRlZCkuCisKK1xsZXRcYnIgPSBccGFyCisKKyUgQHBhZ2UgZm9yY2VzIHRoZSBzdGFydCBvZiBhIG5ldyBwYWdlLgorJQorXGRlZlxwYWdle1xwYXJcdmZpbGxcc3VwZXJlamVjdH0KKworJSBAZXhkZW50IHRleHQuLi4uCislIG91dHB1dHMgdGV4dCBvbiBzZXBhcmF0ZSBsaW5lIGluIHJvbWFuIGZvbnQsIHN0YXJ0aW5nIGF0IHN0YW5kYXJkIHBhZ2UgbWFyZ2luCisKKyUgVGhpcyByZWNvcmRzIHRoZSBhbW91bnQgb2YgaW5kZW50IGluIHRoZSBpbm5lcm1vc3QgZW52aXJvbm1lbnQuCislIFRoYXQncyBob3cgbXVjaCBcZXhkZW50IHNob3VsZCB0YWtlIG91dC4KK1xuZXdza2lwXGV4ZGVudGFtb3VudAorCislIFRoaXMgZGVmbiBpcyB1c2VkIGluc2lkZSBmaWxsIGVudmlyb25tZW50cyBzdWNoIGFzIEBkZWZ1bi4KK1xwYXJzZWFyZ2RlZlxleGRlbnR7XGhmaWxcYnJlYWtcaGJveHtca2VybiAtXGV4ZGVudGFtb3VudHtccm0jMX19XGhmaWxcYnJlYWt9CisKKyUgVGhpcyBkZWZuIGlzIHVzZWQgaW5zaWRlIG5vZmlsbCBlbnZpcm9ubWVudHMgc3VjaCBhcyBAZXhhbXBsZS4KK1xwYXJzZWFyZ2RlZlxub2ZpbGxleGRlbnR7e1xhZHZhbmNlIFxsZWZ0c2tpcCBieSAtXGV4ZGVudGFtb3VudAorICBcbGVmdGxpbmV7XGhza2lwXGxlZnRza2lwe1xybSMxfX19fQorCislIEBpbm1hcmdpbntXSElDSH17VEVYVH0gcHV0cyBURVhUIGluIHRoZSBXSElDSCBtYXJnaW4gbmV4dCB0byB0aGUgY3VycmVudAorJSBwYXJhZ3JhcGguICBGb3IgbW9yZSBnZW5lcmFsIHB1cnBvc2VzLCB1c2UgdGhlIFxtYXJnaW4gaW5zZXJ0aW9uCislIGNsYXNzLiAgV0hJQ0ggaXMgYGwnIG9yIGByJy4KKyUKK1xuZXdza2lwXGlubWFyZ2luc3BhY2luZyBcaW5tYXJnaW5zcGFjaW5nPTFjbQorXGRlZlxzdHJ1dGRlcHRoe1xkcFxzdHJ1dGJveH0KKyUKK1xkZWZcZG9pbm1hcmdpbiMxIzJ7XHN0cnV0XHZhZGp1c3R7JQorICBcbm9icmVhaworICBca2Vybi1cc3RydXRkZXB0aAorICBcdnRvcCB0byBcc3RydXRkZXB0aHslCisgICAgXGJhc2VsaW5lc2tpcD1cc3RydXRkZXB0aAorICAgIFx2c3MKKyAgICAlIGlmIHlvdSBoYXZlIG11bHRpcGxlIGxpbmVzIG9mIHN0dWZmIHRvIHB1dCBoZXJlLCB5b3UnbGwgbmVlZCB0bworICAgICUgbWFrZSB0aGUgdmJveCB5b3Vyc2VsZiBvZiB0aGUgYXBwcm9wcmlhdGUgc2l6ZS4KKyAgICBcaWZ4IzFsJQorICAgICAgXGxsYXB7XGlnbm9yZXNwYWNlcyAjMlxoc2tpcFxpbm1hcmdpbnNwYWNpbmd9JQorICAgIFxlbHNlCisgICAgICBccmxhcHtcaHNraXBcaHNpemUgXGhza2lwXGlubWFyZ2luc3BhY2luZyBcaWdub3Jlc3BhY2VzICMyfSUKKyAgICBcZmkKKyAgICBcbnVsbAorICB9JQorfX0KK1xkZWZcaW5sZWZ0bWFyZ2lue1xkb2lubWFyZ2luIGx9CitcZGVmXGlucmlnaHRtYXJnaW57XGRvaW5tYXJnaW4gcn0KKyUKKyUgQGlubWFyZ2lue1RFWFQgWywgUklHSFQtVEVYVF19CislIChpZiBSSUdIVC1URVhUIGlzIGdpdmVuLCB1c2UgVEVYVCBmb3IgbGVmdCBwYWdlLCBSSUdIVC1URVhUIGZvciByaWdodDsKKyUgZWxzZSB1c2UgVEVYVCBmb3IgYm90aCkuCislCitcZGVmXGlubWFyZ2luIzF7XHBhcnNlaW5tYXJnaW4gIzEsLFxmaW5pc2h9CitcZGVmXHBhcnNlaW5tYXJnaW4jMSwjMiwjM1xmaW5pc2h7JSBub3QgcGVyZmVjdCwgYnV0IGJldHRlciB0aGFuIG5vdGhpbmcuCisgIFxzZXRib3gwID0gXGhib3h7XGlnbm9yZXNwYWNlcyAjMn0lCisgIFxpZmRpbVx3ZDAgPiAwcHQKKyAgICBcZGVmXGxlZnR0ZXh0eyMxfSUgIGhhdmUgYm90aCB0ZXh0cworICAgIFxkZWZccmlnaHR0ZXh0eyMyfSUKKyAgXGVsc2UKKyAgICBcZGVmXGxlZnR0ZXh0eyMxfSUgIGhhdmUgb25seSBvbmUgdGV4dAorICAgIFxkZWZccmlnaHR0ZXh0eyMxfSUKKyAgXGZpCisgICUKKyAgXGlmb2RkXHBhZ2VubworICAgIFxkZWZcdGVtcHtcaW5yaWdodG1hcmdpblxyaWdodHRleHR9JSBvZGQgcGFnZSAtPiBvdXRzaWRlIGlzIHJpZ2h0IG1hcmdpbgorICBcZWxzZQorICAgIFxkZWZcdGVtcHtcaW5sZWZ0bWFyZ2luXGxlZnR0ZXh0fSUKKyAgXGZpCisgIFx0ZW1wCit9CisKKyUgQGluY2x1ZGUgZmlsZSAgICBpbnNlcnQgdGV4dCBvZiB0aGF0IGZpbGUgYXMgaW5wdXQuCislCitcZGVmXGluY2x1ZGV7XHBhcnNlYXJndXNpbmdcZmlsZW5hbWVjYXRjb2Rlc1xpbmNsdWRlenp6fQorXGRlZlxpbmNsdWRlenp6IzF7JQorICBccHVzaHRoaXNmaWxlc3RhY2sKKyAgXGRlZlx0aGlzZmlsZXsjMX0lCisgIHslCisgICAgXG1ha2V2YWx1ZWV4cGFuZGFibGUKKyAgICBcZGVmXHRlbXB7XGlucHV0ICMxIH0lCisgICAgXGV4cGFuZGFmdGVyCisgIH1cdGVtcAorICBccG9wdGhpc2ZpbGVzdGFjaworfQorXGRlZlxmaWxlbmFtZWNhdGNvZGVzeyUKKyAgXGNhdGNvZGVgXFw9XG90aGVyCisgIFxjYXRjb2RlYH49XG90aGVyCisgIFxjYXRjb2RlYF49XG90aGVyCisgIFxjYXRjb2RlYF89XG90aGVyCisgIFxjYXRjb2RlYHw9XG90aGVyCisgIFxjYXRjb2RlYDw9XG90aGVyCisgIFxjYXRjb2RlYD49XG90aGVyCisgIFxjYXRjb2RlYCs9XG90aGVyCisgIFxjYXRjb2RlYC09XG90aGVyCit9CisKK1xkZWZccHVzaHRoaXNmaWxlc3RhY2t7JQorICBcZXhwYW5kYWZ0ZXJccHVzaHRoaXNmaWxlc3RhY2tYXHBvcHRoaXNmaWxlc3RhY2tcU3RhY2tUZXJtCit9CitcZGVmXHB1c2h0aGlzZmlsZXN0YWNrWHslCisgIFxleHBhbmRhZnRlclxwdXNodGhpc2ZpbGVzdGFja1lcdGhpc2ZpbGVcU3RhY2tUZXJtCit9CitcZGVmXHB1c2h0aGlzZmlsZXN0YWNrWSAjMVxTdGFja1Rlcm0gIzJcU3RhY2tUZXJtIHslCisgIFxnZGVmXHBvcHRoaXNmaWxlc3RhY2t7XGdkZWZcdGhpc2ZpbGV7IzF9XGdkZWZccG9wdGhpc2ZpbGVzdGFja3sjMn19JQorfQorCitcZGVmXHBvcHRoaXNmaWxlc3RhY2t7XGVycnRoaXNmaWxlc3RhY2tlbXB0eX0KK1xkZWZcZXJydGhpc2ZpbGVzdGFja2VtcHR5e1xlcnJtZXNzYWdle0ludGVybmFsIGVycm9yOgorICB0aGUgc3RhY2sgb2YgZmlsZW5hbWVzIGlzIGVtcHR5Ln19CisKK1xkZWZcdGhpc2ZpbGV7fQorCislIEBjZW50ZXIgbGluZQorJSBvdXRwdXRzIHRoYXQgbGluZSwgY2VudGVyZWQuCislCitccGFyc2VhcmdkZWZcY2VudGVyeyUKKyAgXGlmaG1vZGUKKyAgICBcbGV0XG5leHRcY2VudGVySAorICBcZWxzZQorICAgIFxsZXRcbmV4dFxjZW50ZXJWCisgIFxmaQorICBcbmV4dHtcaGZpbCBcaWdub3Jlc3BhY2VzIzFcdW5za2lwIFxoZmlsfSUKK30KK1xkZWZcY2VudGVySCMxeyUKKyAgeyUKKyAgICBcaGZpbFxicmVhaworICAgIFxhZHZhbmNlXGhzaXplIGJ5IC1cbGVmdHNraXAKKyAgICBcYWR2YW5jZVxoc2l6ZSBieSAtXHJpZ2h0c2tpcAorICAgIFxsaW5leyMxfSUKKyAgICBcYnJlYWsKKyAgfSUKK30KK1xkZWZcY2VudGVyViMxe1xsaW5le1xrZXJuXGxlZnRza2lwICMxXGtlcm5ccmlnaHRza2lwfX0KKworJSBAc3AgbiAgIG91dHB1dHMgbiBsaW5lcyBvZiB2ZXJ0aWNhbCBzcGFjZQorCitccGFyc2VhcmdkZWZcc3B7XHZza2lwICMxXGJhc2VsaW5lc2tpcH0KKworJSBAY29tbWVudCAuLi5saW5lIHdoaWNoIGlzIGlnbm9yZWQuLi4KKyUgQGMgaXMgdGhlIHNhbWUgYXMgQGNvbW1lbnQKKyUgQGlnbm9yZSAuLi4gQGVuZCBpZ25vcmUgIGlzIGFub3RoZXIgd2F5IHRvIHdyaXRlIGEgY29tbWVudAorCitcZGVmXGNvbW1lbnR7XGJlZ2luZ3JvdXAgXGNhdGNvZGVgXF5eTT1cb3RoZXIlCitcY2F0Y29kZWBcQD1cb3RoZXIgXGNhdGNvZGVgXHs9XG90aGVyIFxjYXRjb2RlYFx9PVxvdGhlciUKK1xjb21tZW50eHh4fQore1xjYXRjb2RlYFxeXk09XG90aGVyIFxnZGVmXGNvbW1lbnR4eHgjMV5eTXtcZW5kZ3JvdXB9fQorCitcbGV0XGM9XGNvbW1lbnQKKworJSBAcGFyYWdyYXBoaW5kZW50IE5DSEFSUworJSBXZSdsbCB1c2UgZW1zIGZvciBOQ0hBUlMsIGNsb3NlIGVub3VnaC4KKyUgTkNIQVJTIGNhbiBhbHNvIGJlIHRoZSB3b3JkIGBhc2lzJyBvciBgbm9uZScuCislIFdlIGNhbm5vdCBmZWFzaWJseSBpbXBsZW1lbnQgQHBhcmFncmFwaGluZGVudCBhc2lzLCB0aG91Z2guCislCitcZGVmXGFzaXN3b3Jke2FzaXN9ICUgbm8gdHJhbnNsYXRpb24sIHRoZXNlIGFyZSBrZXl3b3JkcworXGRlZlxub25ld29yZHtub25lfQorJQorXHBhcnNlYXJnZGVmXHBhcmFncmFwaGluZGVudHslCisgIFxkZWZcdGVtcHsjMX0lCisgIFxpZnhcdGVtcFxhc2lzd29yZAorICBcZWxzZQorICAgIFxpZnhcdGVtcFxub25ld29yZAorICAgICAgXGRlZmF1bHRwYXJpbmRlbnQgPSAwcHQKKyAgICBcZWxzZQorICAgICAgXGRlZmF1bHRwYXJpbmRlbnQgPSAjMWVtCisgICAgXGZpCisgIFxmaQorICBccGFyaW5kZW50ID0gXGRlZmF1bHRwYXJpbmRlbnQKK30KKworJSBAZXhhbXBsZWluZGVudCBOQ0hBUlMKKyUgV2UnbGwgdXNlIGVtcyBmb3IgTkNIQVJTIGxpa2UgQHBhcmFncmFwaGluZGVudC4KKyUgSXQgc2VlbXMgQGV4YW1wbGVpbmRlbnQgYXNpcyBpc24ndCBuZWNlc3NhcnksIGJ1dAorJSBJIHByZXNlcnZlIGl0IHRvIG1ha2UgaXQgc2ltaWxhciB0byBAcGFyYWdyYXBoaW5kZW50LgorXHBhcnNlYXJnZGVmXGV4YW1wbGVpbmRlbnR7JQorICBcZGVmXHRlbXB7IzF9JQorICBcaWZ4XHRlbXBcYXNpc3dvcmQKKyAgXGVsc2UKKyAgICBcaWZ4XHRlbXBcbm9uZXdvcmQKKyAgICAgIFxsaXNwbmFycm93aW5nID0gMHB0CisgICAgXGVsc2UKKyAgICAgIFxsaXNwbmFycm93aW5nID0gIzFlbQorICAgIFxmaQorICBcZmkKK30KKworJSBAZmlyc3RwYXJhZ3JhcGhpbmRlbnQgV09SRAorJSBJZiBXT1JEIGlzIGBub25lJywgdGhlbiBzdXBwcmVzcyBpbmRlbnRhdGlvbiBvZiB0aGUgZmlyc3QgcGFyYWdyYXBoCislIGFmdGVyIGEgc2VjdGlvbiBoZWFkaW5nLiAgSWYgV09SRCBpcyBgaW5zZXJ0JywgdGhlbiBkbyBpbmRlbnQgYXQgc3VjaAorJSBwYXJhZ3JhcGhzLgorJQorJSBUaGUgcGFyYWdyYXBoIGluZGVudGF0aW9uIGlzIHN1cHByZXNzZWQgb3Igbm90IGJ5IGNhbGxpbmcKKyUgXHN1cHByZXNzZmlyc3RwYXJhZ3JhcGhpbmRlbnQsIHdoaWNoIHRoZSBzZWN0aW9uaW5nIGNvbW1hbmRzIGRvLgorJSBXZSBzd2l0Y2ggdGhlIGRlZmluaXRpb24gb2YgdGhpcyBiYWNrIGFuZCBmb3J0aCBhY2NvcmRpbmcgdG8gV09SRC4KKyUgQnkgZGVmYXVsdCwgd2Ugc3VwcHJlc3MgaW5kZW50YXRpb24uCislCitcZGVmXHN1cHByZXNzZmlyc3RwYXJhZ3JhcGhpbmRlbnR7XGRvc3VwcHJlc3NmaXJzdHBhcmFncmFwaGluZGVudH0KK1xkZWZcaW5zZXJ0d29yZHtpbnNlcnR9CislCitccGFyc2VhcmdkZWZcZmlyc3RwYXJhZ3JhcGhpbmRlbnR7JQorICBcZGVmXHRlbXB7IzF9JQorICBcaWZ4XHRlbXBcbm9uZXdvcmQKKyAgICBcbGV0XHN1cHByZXNzZmlyc3RwYXJhZ3JhcGhpbmRlbnQgPSBcZG9zdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50CisgIFxlbHNlXGlmeFx0ZW1wXGluc2VydHdvcmQKKyAgICBcbGV0XHN1cHByZXNzZmlyc3RwYXJhZ3JhcGhpbmRlbnQgPSBccmVsYXgKKyAgXGVsc2UKKyAgICBcZXJyaGVscCA9IFxFTXNpbXBsZQorICAgIFxlcnJtZXNzYWdle1Vua25vd24gQGZpcnN0cGFyYWdyYXBoaW5kZW50IG9wdGlvbiBgXHRlbXAnfSUKKyAgXGZpXGZpCit9CisKKyUgSGVyZSBpcyBob3cgd2UgYWN0dWFsbHkgc3VwcHJlc3MgaW5kZW50YXRpb24uICBSZWRlZmluZSBcZXZlcnlwYXIgdG8KKyUgXGtlcm4gYmFja3dhcmRzIGJ5IFxwYXJpbmRlbnQsIGFuZCB0aGVuIHJlc2V0IGl0c2VsZiB0byBlbXB0eS4KKyUKKyUgV2UgYWxzbyBtYWtlIFxpbmRlbnQgaXRzZWxmIG5vdCBhY3R1YWxseSBkbyBhbnl0aGluZyB1bnRpbCB0aGUgbmV4dAorJSBwYXJhZ3JhcGguCislCitcZ2RlZlxkb3N1cHByZXNzZmlyc3RwYXJhZ3JhcGhpbmRlbnR7JQorICBcZ2RlZlxpbmRlbnR7JQorICAgIFxyZXN0b3JlZmlyc3RwYXJhZ3JhcGhpbmRlbnQKKyAgICBcaW5kZW50CisgIH0lCisgIFxnZGVmXG5vaW5kZW50eyUKKyAgICBccmVzdG9yZWZpcnN0cGFyYWdyYXBoaW5kZW50CisgICAgXG5vaW5kZW50CisgIH0lCisgIFxnbG9iYWxcZXZlcnlwYXIgPSB7JQorICAgIFxrZXJuIC1ccGFyaW5kZW50CisgICAgXHJlc3RvcmVmaXJzdHBhcmFncmFwaGluZGVudAorICB9JQorfQorCitcZ2RlZlxyZXN0b3JlZmlyc3RwYXJhZ3JhcGhpbmRlbnR7JQorICBcZ2xvYmFsIFxsZXQgXGluZGVudCA9IFxwdGV4aW5kZW50CisgIFxnbG9iYWwgXGxldCBcbm9pbmRlbnQgPSBccHRleG5vaW5kZW50CisgIFxnbG9iYWwgXGV2ZXJ5cGFyID0ge30lCit9CisKKworJSBAYXNpcyBqdXN0IHlpZWxkcyBpdHMgYXJndW1lbnQuICBVc2VkIHdpdGggQHRhYmxlLCBmb3IgZXhhbXBsZS4KKyUKK1xkZWZcYXNpcyMxeyMxfQorCislIEBtYXRoIG91dHB1dHMgaXRzIGFyZ3VtZW50IGluIG1hdGggbW9kZS4KKyUKKyUgT25lIGNvbXBsaWNhdGlvbjogXyB1c3VhbGx5IG1lYW5zIHN1YnNjcmlwdHMsIGJ1dCBpdCBjb3VsZCBhbHNvIG1lYW4KKyUgYW4gYWN0dWFsIF8gY2hhcmFjdGVyLCBhcyBpbiBAbWF0aHtAdmFye3NvbWVfdmFyaWFibGV9ICsgMX0uICBTbyBtYWtlCislIF8gYWN0aXZlLCBhbmQgZGlzdGluZ3Vpc2ggYnkgc2VlaW5nIGlmIHRoZSBjdXJyZW50IGZhbWlseSBpcyBcc2xmYW0sCislIHdoaWNoIGlzIHdoYXQgQHZhciB1c2VzLgoreworICBcY2F0Y29kZWBcXyA9IFxhY3RpdmUKKyAgXGdkZWZcbWF0aHVuZGVyc2NvcmV7JQorICAgIFxjYXRjb2RlYFxfPVxhY3RpdmUKKyAgICBcZGVmX3tcaWZudW1cZmFtPVxzbGZhbSBcX1xlbHNlXHNiXGZpfSUKKyAgfQorfQorJSBBbm90aGVyIGNvbXBsaWNhdGlvbjogd2Ugd2FudCBcXCAoYW5kIEBcKSB0byBvdXRwdXQgYSBcIGNoYXJhY3Rlci4KKyUgRllJLCBwbGFpbi50ZXggdXNlcyBcXCBhcyBhIHRlbXBvcmFyeSBjb250cm9sIHNlcXVlbmNlICh3aHk/KSwgYnV0CislIHRoaXMgaXMgbm90IGFkdmVydGlzZWQgYW5kIHdlIGRvbid0IGNhcmUuICBUZXhpbmZvIGRvZXMgbm90CislIG90aGVyd2lzZSBkZWZpbmUgQFwuCislCislIFRoZSBcbWF0aGNoYXIgaXMgY2xhc3M9MD1vcmRpbmFyeSwgZmFtaWx5PTc9dHRmYW0sIHBvc2l0aW9uPTVDPVwuCitcZGVmXG1hdGhiYWNrc2xhc2h7XGlmbnVtXGZhbT1cdHRmYW0gXG1hdGhjaGFyIjA3NUMgXGVsc2VcYmFja3NsYXNoIFxmaX0KKyUKK1xkZWZcbWF0aHslCisgIFx0ZXgKKyAgXG1hdGh1bmRlcnNjb3JlCisgIFxsZXRcXCA9IFxtYXRoYmFja3NsYXNoCisgIFxtYXRoYWN0aXZlCisgICRcZmluaXNobWF0aAorfQorXGRlZlxmaW5pc2htYXRoIzF7IzEkXGVuZGdyb3VwfSAgJSBDbG9zZSB0aGUgZ3JvdXAgb3BlbmVkIGJ5IFx0ZXguCisKKyUgU29tZSBhY3RpdmUgY2hhcmFjdGVycyAoc3VjaCBhcyA8KSBhcmUgc3BhY2VkIGRpZmZlcmVudGx5IGluIG1hdGguCislIFdlIGhhdmUgdG8gcmVzZXQgdGhlaXIgZGVmaW5pdGlvbnMgaW4gY2FzZSB0aGUgQG1hdGggd2FzIGFuIGFyZ3VtZW50CislIHRvIGEgY29tbWFuZCB3aGljaCBzZXRzIHRoZSBjYXRjb2RlcyAoc3VjaCBhcyBAaXRlbSBvciBAc2VjdGlvbikuCislCit7CisgIFxjYXRjb2RlYF4gPSBcYWN0aXZlCisgIFxjYXRjb2RlYDwgPSBcYWN0aXZlCisgIFxjYXRjb2RlYD4gPSBcYWN0aXZlCisgIFxjYXRjb2RlYCsgPSBcYWN0aXZlCisgIFxnZGVmXG1hdGhhY3RpdmV7JQorICAgIFxsZXReID0gXHB0ZXhoYXQKKyAgICBcbGV0PCA9IFxwdGV4bGVzcworICAgIFxsZXQ+ID0gXHB0ZXhndHIKKyAgICBcbGV0KyA9IFxwdGV4cGx1cworICB9Cit9CisKKyUgQGJ1bGxldCBhbmQgQG1pbnVzIG5lZWQgdGhlIHNhbWUgdHJlYXRtZW50IGFzIEBtYXRoLCBqdXN0IGFib3ZlLgorXGRlZlxidWxsZXR7JFxwdGV4YnVsbGV0JH0KK1xkZWZcbWludXN7JC0kfQorCislIEBkb3Rze30gb3V0cHV0cyBhbiBlbGxpcHNpcyB1c2luZyB0aGUgY3VycmVudCBmb250LgorJSBXZSBkbyAuNWVtIHBlciBwZXJpb2Qgc28gdGhhdCBpdCBoYXMgdGhlIHNhbWUgc3BhY2luZyBpbiB0aGUgY20KKyUgdHlwZXdyaXRlciBmb250cyBhcyB0aHJlZSBhY3R1YWwgcGVyaW9kIGNoYXJhY3RlcnM7IG9uIHRoZSBvdGhlciBoYW5kLAorJSBpbiBvdGhlciB0eXBld3JpdGVyIGZvbnRzIHRocmVlIHBlcmlvZHMgYXJlIHdpZGVyIHRoYW4gMS41ZW0uICBTbyBkbworJSB3aGljaGV2ZXIgaXMgbGFyZ2VyLgorJQorXGRlZlxkb3RzeyUKKyAgXGxlYXZldm1vZGUKKyAgXHNldGJveDA9XGhib3h7Li4ufSUgZ2V0IHdpZHRoIG9mIHRocmVlIHBlcmlvZHMKKyAgXGlmZGltXHdkMCA+IDEuNWVtCisgICAgXGRpbWVuMCA9IFx3ZDAKKyAgXGVsc2UKKyAgICBcZGltZW4wID0gMS41ZW0KKyAgXGZpCisgIFxoYm94IHRvIFxkaW1lbjB7JQorICAgIFxoc2tpcCAwcHQgcGx1cy4yNWZpbAorICAgIC5caHNraXAgMHB0IHBsdXMxZmlsCisgICAgLlxoc2tpcCAwcHQgcGx1czFmaWwKKyAgICAuXGhza2lwIDBwdCBwbHVzLjVmaWwKKyAgfSUKK30KKworJSBAZW5kZG90c3t9IGlzIGFuIGVuZC1vZi1zZW50ZW5jZSBlbGxpcHNpcy4KKyUKK1xkZWZcZW5kZG90c3slCisgIFxkb3RzCisgIFxzcGFjZWZhY3Rvcj1cZW5kb2ZzZW50ZW5jZXNwYWNlZmFjdG9yCit9CisKKyUgQGNvbW1he30gaXMgc28gY29tbWFzIGNhbiBiZSBpbnNlcnRlZCBpbnRvIHRleHQgd2l0aG91dCBtZXNzaW5nIHVwCislIFRleGluZm8ncyBwYXJzaW5nLgorJQorXGxldFxjb21tYSA9ICwKKworJSBAcmVmaWxsIGlzIGEgbm8tb3AuCitcbGV0XHJlZmlsbD1ccmVsYXgKKworJSBJZiB3b3JraW5nIG9uIGEgbGFyZ2UgZG9jdW1lbnQgaW4gY2hhcHRlcnMsIGl0IGlzIGNvbnZlbmllbnQgdG8KKyUgYmUgYWJsZSB0byBkaXNhYmxlIGluZGV4aW5nLCBjcm9zcy1yZWZlcmVuY2luZywgYW5kIGNvbnRlbnRzLCBmb3IgdGVzdCBydW5zLgorJSBUaGlzIGlzIGRvbmUgd2l0aCBAbm92YWxpZGF0ZSAoYmVmb3JlIEBzZXRmaWxlbmFtZSkuCislCitcbmV3aWZcaWZsaW5rcyBcbGlua3N0cnVlICUgYnkgZGVmYXVsdCB3ZSB3YW50IHRoZSBhdXggZmlsZXMuCitcbGV0XG5vdmFsaWRhdGUgPSBcbGlua3NmYWxzZQorCislIEBzZXRmaWxlbmFtZSBpcyBkb25lIGF0IHRoZSBiZWdpbm5pbmcgb2YgZXZlcnkgdGV4aW5mbyBmaWxlLgorJSBTbyBvcGVuIGhlcmUgdGhlIGZpbGVzIHdlIG5lZWQgdG8gaGF2ZSBvcGVuIHdoaWxlIHJlYWRpbmcgdGhlIGlucHV0LgorJSBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIG1ha2UgYSAuZm10IGZpbGUgZm9yIHRleGluZm8uCitcZGVmXHNldGZpbGVuYW1leyUKKyAgIFxmaXhiYWNrc2xhc2ggICUgVHVybiBvZmYgaGFjayB0byBzd2FsbG93IGBcaW5wdXQgdGV4aW5mbycuCisgICBcaWZsaW5rcworICAgICBcdHJ5YXV4ZmlsZQorICAgICAlIE9wZW4gdGhlIG5ldyBhdXggZmlsZS4gIFRlWCB3aWxsIGNsb3NlIGl0IGF1dG9tYXRpY2FsbHkgYXQgZXhpdC4KKyAgICAgXGltbWVkaWF0ZVxvcGVub3V0XGF1eGZpbGU9XGpvYm5hbWUuYXV4CisgICBcZmkgJSBcb3BlbmluZGljZXMgbmVlZHMgdG8gZG8gc29tZSB3b3JrIGluIGFueSBjYXNlLgorICAgXG9wZW5pbmRpY2VzCisgICBcbGV0XHNldGZpbGVuYW1lPVxjb21tZW50ICUgSWdub3JlIGV4dHJhIEBzZXRmaWxlbmFtZSBjbWRzLgorICAgJQorICAgJSBJZiB0ZXhpbmZvLmNuZiBpcyBwcmVzZW50IG9uIHRoZSBzeXN0ZW0sIHJlYWQgaXQuCisgICAlIFVzZWZ1bCBmb3Igc2l0ZS13aWRlIEBhZm91cnBhcGVyLCBldGMuCisgICBcb3BlbmluIDEgdGV4aW5mby5jbmYKKyAgIFxpZmVvZiAxIFxlbHNlIFxpbnB1dCB0ZXhpbmZvLmNuZiBcZmkKKyAgIFxjbG9zZWluIDEKKyAgICUKKyAgIFxjb21tZW50ICUgSWdub3JlIHRoZSBhY3R1YWwgZmlsZW5hbWUuCit9CisKKyUgQ2FsbGVkIGZyb20gXHNldGZpbGVuYW1lLgorJQorXGRlZlxvcGVuaW5kaWNlc3slCisgIFxuZXdpbmRleHtjcH0lCisgIFxuZXdjb2RlaW5kZXh7Zm59JQorICBcbmV3Y29kZWluZGV4e3ZyfSUKKyAgXG5ld2NvZGVpbmRleHt0cH0lCisgIFxuZXdjb2RlaW5kZXh7a3l9JQorICBcbmV3Y29kZWluZGV4e3BnfSUKK30KKworJSBAYnllLgorXG91dGVyXGRlZlxieWV7XHBhZ2VhbGlnbm1hY3JvXHRyYWNpbmdzdGF0cz0xXHB0ZXhlbmR9CisKKworXG1lc3NhZ2V7cGRmLH0KKyUgYWRvYmUgYHBvcnRhYmxlJyBkb2N1bWVudCBmb3JtYXQKK1xuZXdjb3VudFx0ZW1wbnVtCitcbmV3Y291bnRcbG5rY291bnQKK1xuZXd0b2tzXGZpbGVuYW1lCitcbmV3Y291bnRcZmlsZW5hbWVsZW5ndGgKK1xuZXdjb3VudFxwZ24KK1xuZXd0b2tzXHRva3NBCitcbmV3dG9rc1x0b2tzQgorXG5ld3Rva3NcdG9rc0MKK1xuZXd0b2tzXHRva3NECitcbmV3Ym94XGJveEEKK1xuZXdjb3VudFxjb3VudEEKK1xuZXdpZlxpZnBkZgorXG5ld2lmXGlmcGRmbWFrZXBhZ2VkZXN0CisKKyUgd2hlbiBwZGZ0ZXggaXMgcnVuIGluIGR2aSBtb2RlLCBccGRmb3V0cHV0IGlzIGRlZmluZWQgKHNvIFxwZGZvdXRwdXQ9MQorJSBjYW4gYmUgc2V0KS4gIFNvIHdlIHRlc3QgZm9yIFxyZWxheCBhbmQgMCBhcyB3ZWxsIGFzIFx1bmRlZmluZWQsCislIGJvcnJvd2VkIGZyb20gaWZwZGYuc3R5LgorXGlmeFxwZGZvdXRwdXRcdW5kZWZpbmVkCitcZWxzZQorICBcaWZ4XHBkZm91dHB1dFxyZWxheAorICBcZWxzZQorICAgIFxpZmNhc2VccGRmb3V0cHV0CisgICAgXGVsc2UKKyAgICAgIFxwZGZ0cnVlCisgICAgXGZpCisgIFxmaQorXGZpCisKKyUgUERGIHVzZXMgUG9zdFNjcmlwdCBzdHJpbmcgY29uc3RhbnRzIGZvciB0aGUgbmFtZXMgb2YgeHJlZiB0YXJnZXRzLAorJSBmb3IgZGlzcGxheSBpbiB0aGUgb3V0bGluZXMsIGFuZCBpbiBvdGhlciBwbGFjZXMuICBUaHVzLCB3ZSBoYXZlIHRvCislIGRvdWJsZSBhbnkgYmFja3NsYXNoZXMuICBPdGhlcndpc2UsIGEgbmFtZSBsaWtlICJcbm9kZSIgd2lsbCBiZQorJSBpbnRlcnByZXRlZCBhcyBhIG5ld2xpbmUgKFxuKSwgZm9sbG93ZWQgYnkgbywgZCwgZS4gIE5vdCBnb29kLgorJSBodHRwOi8vd3d3Lm50Zy5ubC9waXBlcm1haWwvbnRnLXBkZnRleC8yMDA0LUp1bHkvMDAwNjU0Lmh0bWwKKyUgKGFuZCByZWxhdGVkIG1lc3NhZ2VzLCB0aGUgZmluYWwgb3V0Y29tZSBpcyB0aGF0IGl0IGlzIHVwIHRvIHRoZSBUZVgKKyUgdXNlciB0byBkb3VibGUgdGhlIGJhY2tzbGFzaGVzIGFuZCBvdGhlcndpc2UgbWFrZSB0aGUgc3RyaW5nIHZhbGlkLCBzbworJSB0aGF0J3Mgd2hhdCB3ZSBkbykuCisKKyUgZG91YmxlIGFjdGl2ZSBiYWNrc2xhc2hlcy4KKyUgCit7XGNhdGNvZGVgXEA9MCBcY2F0Y29kZWBcXD1cYWN0aXZlCisgQGdkZWZAYWN0aXZlYmFja3NsYXNoZG91YmxleyUKKyAgIEBjYXRjb2RlYEBcPUBhY3RpdmUKKyAgIEBsZXRcPUBkb3VibGViYWNrc2xhc2h9Cit9CisKKyUgVG8gaGFuZGxlIHBhcmVucywgd2UgbXVzdCBhZG9wdCBhIGRpZmZlcmVudCBhcHByb2FjaCwgc2luY2UgcGFyZW5zIGFyZQorJSBub3QgYWN0aXZlIGNoYXJhY3RlcnMuICBoeXBlcnJlZi5kdHggKHdoaWNoIGhhcyB0aGUgc2FtZSBwcm9ibGVtIGFzCislIHVzKSBoYW5kbGVzIGl0IHdpdGggdGhpcyBhbWF6aW5nIG1hY3JvIHRvIHJlcGxhY2UgdG9rZW5zLCB3aXRoIG1pbm9yCislIGNoYW5nZXMgZm9yIFRleGluZm8uICBJdCBpcyBpbmNsdWRlZCBoZXJlIHVuZGVyIHRoZSBHUEwgYnkgcGVybWlzc2lvbgorJSBmcm9tIHRoZSBhdXRob3IsIEhlaWtvIE9iZXJkaWVrLgorJSAKKyUgIzEgaXMgdGhlIHRva2VucyB0byByZXBsYWNlLgorJSAjMiBpcyB0aGUgcmVwbGFjZW1lbnQuCislICMzIGlzIHRoZSBjb250cm9sIHNlcXVlbmNlIHdpdGggdGhlIHN0cmluZy4KKyUgCitcZGVmXEh5UHNkU3Vic3QjMSMyIzN7JQorICBcZGVmXEh5UHNkUmVwbGFjZSMjMSMxIyMyXEVORHslCisgICAgIyMxJQorICAgIFxpZnhcXCMjMlxcJQorICAgIFxlbHNlCisgICAgICAjMiUKKyAgICAgIFxIeVJldHVybkFmdGVyRml7JQorICAgICAgICBcSHlQc2RSZXBsYWNlIyMyXEVORAorICAgICAgfSUKKyAgICBcZmkKKyAgfSUKKyAgXHhkZWYjM3tcZXhwYW5kYWZ0ZXJcSHlQc2RSZXBsYWNlIzMjMVxFTkR9JQorfQorXGxvbmdcZGVmXEh5UmV0dXJuQWZ0ZXJGaSMxXGZpe1xmaSMxfQorCislICMxIGlzIGEgY29udHJvbCBzZXF1ZW5jZSBpbiB3aGljaCB0byBkbyB0aGUgcmVwbGFjZW1lbnRzLgorXGRlZlxiYWNrc2xhc2hwYXJlbnMjMXslCisgIFx4ZGVmIzF7IzF9JSByZWRlZmluZSBpdCBhcyBpdHMgZXhwYW5zaW9uOyB0aGUgZGVmaW5pdGlvbiBpcyBzaW1wbHkKKyAgICAgICAgICAgICAlIFxsYXN0bm9kZSB3aGVuIGNhbGxlZCBmcm9tIFxzZXRyZWYgLT4gXHBkZm1rZGVzdC4KKyAgXEh5UHNkU3Vic3R7KH17XHJlYWxiYWNrc2xhc2gofXsjMX0lCisgIFxIeVBzZFN1YnN0eyl9e1xyZWFsYmFja3NsYXNoKX17IzF9JQorfQorCitcbmV3aGVscFxub3BkZmltYWdlaGVscHtUZXhpbmZvIHN1cHBvcnRzIC5wbmcsIC5qcGcsIC5qcGVnLCBhbmQgLnBkZiBpbWFnZXMKK3dpdGggUERGIG91dHB1dCwgYW5kIG5vbmUgb2YgdGhvc2UgZm9ybWF0cyBjb3VsZCBiZSBmb3VuZC4gICguZXBzIGNhbm5vdAorYmUgc3VwcG9ydGVkIGR1ZSB0byB0aGUgZGVzaWduIG9mIHRoZSBQREYgZm9ybWF0OyB1c2UgcmVndWxhciBUZVggKERWSQorb3V0cHV0KSBmb3IgdGhhdC4pfQorCitcaWZwZGYKKyAgXGlucHV0IHBkZmNvbG9yCisgIFxwZGZjYXRhbG9ney9QYWdlTW9kZSAvVXNlT3V0bGluZXN9CisgICUKKyAgJSAjMSBpcyBpbWFnZSBuYW1lLCAjMiB3aWR0aCAobWlnaHQgYmUgZW1wdHkvd2hpdGVzcGFjZSksICMzIGhlaWdodCAoZGl0dG8pLgorICBcZGVmXGRvcGRmaW1hZ2UjMSMyIzN7JQorICAgIFxkZWZcaW1hZ2V3aWR0aHsjMn1cc2V0Ym94MCA9IFxoYm94e1xpZ25vcmVzcGFjZXMgIzJ9JQorICAgIFxkZWZcaW1hZ2VoZWlnaHR7IzN9XHNldGJveDIgPSBcaGJveHtcaWdub3Jlc3BhY2VzICMzfSUKKyAgICAlCisgICAgJSBwZGZ0ZXggKGFuZCB0aGUgUERGIGZvcm1hdCkgc3VwcG9ydCAucG5nLCAuanBnLCAucGRmIChhbW9uZworICAgICUgb3RoZXJzKS4gIExldCdzIHRyeSBpbiB0aGF0IG9yZGVyLgorICAgIFxsZXRccGRmaW1nZXh0PVxlbXB0eQorICAgIFxiZWdpbmdyb3VwCisgICAgICBcb3BlbmluIDEgIzEucG5nIFxpZmVvZiAxCisgICAgICAgIFxvcGVuaW4gMSAjMS5qcGcgXGlmZW9mIDEKKyAgICAgICAgICBcb3BlbmluIDEgIzEuanBlZyBcaWZlb2YgMQorICAgICAgICAgICAgXG9wZW5pbiAxICMxLkpQRyBcaWZlb2YgMQorICAgICAgICAgICAgICBcb3BlbmluIDEgIzEucGRmIFxpZmVvZiAxCisgICAgICAgICAgICAgICAgXGVycmhlbHAgPSBcbm9wZGZpbWFnZWhlbHAKKyAgICAgICAgICAgICAgICBcZXJybWVzc2FnZXtDb3VsZCBub3QgZmluZCBpbWFnZSBmaWxlICMxIGZvciBwZGZ9JQorICAgICAgICAgICAgICBcZWxzZSBcZ2RlZlxwZGZpbWdleHR7cGRmfSUKKyAgICAgICAgICAgICAgXGZpCisgICAgICAgICAgICBcZWxzZSBcZ2RlZlxwZGZpbWdleHR7SlBHfSUKKyAgICAgICAgICAgIFxmaQorICAgICAgICAgIFxlbHNlIFxnZGVmXHBkZmltZ2V4dHtqcGVnfSUKKyAgICAgICAgICBcZmkKKyAgICAgICAgXGVsc2UgXGdkZWZccGRmaW1nZXh0e2pwZ30lCisgICAgICAgIFxmaQorICAgICAgXGVsc2UgXGdkZWZccGRmaW1nZXh0e3BuZ30lCisgICAgICBcZmkKKyAgICAgIFxjbG9zZWluIDEKKyAgICBcZW5kZ3JvdXAKKyAgICAlCisgICAgJSB3aXRob3V0IFxpbW1lZGlhdGUsIHBkZnRleCBzZWcgZmF1bHRzIHdoZW4gdGhlIHNhbWUgaW1hZ2UgaXMKKyAgICAlIGluY2x1ZGVkIHR3aWNlLiAgKFZlcnNpb24gMy4xNDE1OS1wcmUtMS4wLXVub2ZmaWNpYWwtMjAwMTA3MDQuKQorICAgIFxpZm51bVxwZGZ0ZXh2ZXJzaW9uIDwgMTQKKyAgICAgIFxpbW1lZGlhdGVccGRmaW1hZ2UKKyAgICBcZWxzZQorICAgICAgXGltbWVkaWF0ZVxwZGZ4aW1hZ2UKKyAgICBcZmkKKyAgICAgIFxpZmRpbSBcd2QwID4wcHQgd2lkdGggXGltYWdld2lkdGggXGZpCisgICAgICBcaWZkaW0gXHdkMiA+MHB0IGhlaWdodCBcaW1hZ2VoZWlnaHQgXGZpCisgICAgICBcaWZudW1ccGRmdGV4dmVyc2lvbjwxMworICAgICAgICAgIzEuXHBkZmltZ2V4dAorICAgICAgIFxlbHNlCisgICAgICAgICB7IzEuXHBkZmltZ2V4dH0lCisgICAgICAgXGZpCisgICAgXGlmbnVtXHBkZnRleHZlcnNpb24gPCAxNCBcZWxzZQorICAgICAgXHBkZnJlZnhpbWFnZSBccGRmbGFzdHhpbWFnZQorICAgIFxmaX0KKyAgJQorICBcZGVmXHBkZm1rZGVzdCMxe3slCisgICAgJSBXZSBoYXZlIHRvIHNldCBkdW1taWVzIHNvIGNvbW1hbmRzIHN1Y2ggYXMgQGNvZGUsIGFuZCBjaGFyYWN0ZXJzCisgICAgJSBzdWNoIGFzIFwsIGFyZW4ndCBleHBhbmRlZCB3aGVuIHByZXNlbnQgaW4gYSBzZWN0aW9uIHRpdGxlLgorICAgIFxpbmRleG5vZm9udHMKKyAgICBcdHVybm9mZmFjdGl2ZQorICAgIFxhY3RpdmViYWNrc2xhc2hkb3VibGUKKyAgICBcbWFrZXZhbHVlZXhwYW5kYWJsZQorICAgIFxkZWZccGRmZGVzdG5hbWV7IzF9JQorICAgIFxiYWNrc2xhc2hwYXJlbnNccGRmZGVzdG5hbWUKKyAgICBcc2FmZXdoYXRzaXR7XHBkZmRlc3QgbmFtZXtccGRmZGVzdG5hbWV9IHh5en0lCisgIH19CisgICUKKyAgJSB1c2VkIHRvIG1hcmsgdGFyZ2V0IG5hbWVzOyBtdXN0IGJlIGV4cGFuZGFibGUuCisgIFxkZWZccGRmbWtwZ24jMXsjMX0KKyAgJQorICAlIGJ5IGRlZmF1bHQsIHVzZSBhIGNvbG9yIHRoYXQgaXMgZGFyayBlbm91Z2ggdG8gcHJpbnQgb24gcGFwZXIgYXMKKyAgJSBuZWFybHkgYmxhY2ssIGJ1dCBzdGlsbCBkaXN0aW5ndWlzaGFibGUgZm9yIG9ubGluZSB2aWV3aW5nLgorICAlIChEZWZpbmVkIGluIHBkZmNvbG9yLnRleC4pCisgIFxsZXRcdXJsY29sb3IgPSBcQnJpY2tSZWQKKyAgXGxldFxsaW5rY29sb3IgPSBcQnJpY2tSZWQKKyAgXGRlZlxlbmRsaW5re1xCbGFja1xwZGZlbmRsaW5rfQorICAlCisgICUgQWRkaW5nIG91dGxpbmVzIHRvIFBERjsgbWFjcm9zIGZvciBjYWxjdWxhdGluZyBzdHJ1Y3R1cmUgb2Ygb3V0bGluZXMKKyAgJSBjb21lIGZyb20gUGV0ciBPbHNhaworICBcZGVmXGV4cG51bWJlciMxe1xleHBhbmRhZnRlclxpZnhcY3NuYW1lIzFcZW5kY3NuYW1lXHJlbGF4IDAlCisgICAgXGVsc2UgXGNzbmFtZSMxXGVuZGNzbmFtZSBcZml9CisgIFxkZWZcYWR2YW5jZW51bWJlciMxe1x0ZW1wbnVtPVxleHBudW1iZXJ7IzF9XHJlbGF4CisgICAgXGFkdmFuY2VcdGVtcG51bSBieSAxCisgICAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lIzFcZW5kY3NuYW1le1x0aGVcdGVtcG51bX19CisgICUKKyAgJSAjMSBpcyB0aGUgc2VjdGlvbiB0ZXh0LCB3aGljaCBpcyB3aGF0IHdpbGwgYmUgZGlzcGxheWVkIGluIHRoZQorICAlIG91dGxpbmUgYnkgdGhlIHBkZiB2aWV3ZXIuICAjMiBpcyB0aGUgcGRmIGV4cHJlc3Npb24gZm9yIHRoZSBudW1iZXIKKyAgJSBvZiBzdWJlbnRyaWVzIChvciBlbXB0eSwgZm9yIHN1YnN1YnNlY3Rpb25zKS4gICMzIGlzIHRoZSBub2RlIHRleHQsCisgICUgd2hpY2ggbWlnaHQgYmUgZW1wdHkgaWYgdGhpcyB0b2MgZW50cnkgaGFkIG5vIGNvcnJlc3BvbmRpbmcgbm9kZS4KKyAgJSAjNCBpcyB0aGUgcGFnZSBudW1iZXIKKyAgJQorICBcZGVmXGRvcGRmb3V0bGluZSMxIzIjMyM0eyUKKyAgICAlIEdlbmVyYXRlIGEgbGluayB0byB0aGUgbm9kZSB0ZXh0IGlmIHRoYXQgZXhpc3RzOyBlbHNlLCB1c2UgdGhlCisgICAgJSBwYWdlIG51bWJlci4gIFdlIGNvdWxkIGdlbmVyYXRlIGEgZGVzdGluYXRpb24gZm9yIHRoZSBzZWN0aW9uCisgICAgJSB0ZXh0IGluIHRoZSBjYXNlIHdoZXJlIGEgc2VjdGlvbiBoYXMgbm8gbm9kZSwgYnV0IGl0IGRvZXNuJ3QKKyAgICAlIHNlZW0gd29ydGggdGhlIHRyb3VibGUsIHNpbmNlIG1vc3QgZG9jdW1lbnRzIGFyZSBub3JtYWxseSBzdHJ1Y3R1cmVkLgorICAgIFxkZWZccGRmb3V0bGluZWRlc3R7IzN9JQorICAgIFxpZnhccGRmb3V0bGluZWRlc3RcZW1wdHkKKyAgICAgIFxkZWZccGRmb3V0bGluZWRlc3R7IzR9JQorICAgIFxlbHNlCisgICAgICAlIERvdWJsZWQgYmFja3NsYXNoZXMgaW4gdGhlIG5hbWUuCisgICAgICB7XGFjdGl2ZWJhY2tzbGFzaGRvdWJsZSBceGRlZlxwZGZvdXRsaW5lZGVzdHsjM30lCisgICAgICAgXGJhY2tzbGFzaHBhcmVuc1xwZGZvdXRsaW5lZGVzdH0lCisgICAgXGZpCisgICAgJQorICAgICUgQWxzbyBkb3VibGUgdGhlIGJhY2tzbGFzaGVzIGluIHRoZSBkaXNwbGF5IHN0cmluZy4KKyAgICB7XGFjdGl2ZWJhY2tzbGFzaGRvdWJsZSBceGRlZlxwZGZvdXRsaW5ldGV4dHsjMX0lCisgICAgIFxiYWNrc2xhc2hwYXJlbnNccGRmb3V0bGluZXRleHR9JQorICAgICUKKyAgICBccGRmb3V0bGluZSBnb3RvIG5hbWV7XHBkZm1rcGdue1xwZGZvdXRsaW5lZGVzdH19IzJ7XHBkZm91dGxpbmV0ZXh0fSUKKyAgfQorICAlCisgIFxkZWZccGRmbWFrZW91dGxpbmVzeyUKKyAgICBcYmVnaW5ncm91cAorICAgICAgJSBUaGFuaCdzIGhhY2sgLyBwcm9wZXIgYnJhY2VzIGluIGJvb2ttYXJrcworICAgICAgXGVkZWZcbXlsYnJhY2V7XGlmdHJ1ZSBcc3RyaW5ne1xlbHNlfVxmaX1cbGV0XHs9XG15bGJyYWNlCisgICAgICBcZWRlZlxteXJicmFjZXtcaWZmYWxzZXtcZWxzZVxzdHJpbmd9XGZpfVxsZXRcfT1cbXlyYnJhY2UKKyAgICAgICUKKyAgICAgICUgUmVhZCB0b2Mgc2lsZW50bHksIHRvIGdldCBjb3VudHMgb2Ygc3ViZW50cmllcyBmb3IgXHBkZm91dGxpbmUuCisgICAgICBcZGVmXG51bWNoYXBlbnRyeSMjMSMjMiMjMyMjNHslCisJXGRlZlx0aGlzY2hhcG51bXsjIzJ9JQorCVxkZWZcdGhpc3NlY251bXswfSUKKwlcZGVmXHRoaXNzdWJzZWNudW17MH0lCisgICAgICB9JQorICAgICAgXGRlZlxudW1zZWNlbnRyeSMjMSMjMiMjMyMjNHslCisJXGFkdmFuY2VudW1iZXJ7Y2hhcFx0aGlzY2hhcG51bX0lCisJXGRlZlx0aGlzc2VjbnVteyMjMn0lCisJXGRlZlx0aGlzc3Vic2VjbnVtezB9JQorICAgICAgfSUKKyAgICAgIFxkZWZcbnVtc3Vic2VjZW50cnkjIzEjIzIjIzMjIzR7JQorCVxhZHZhbmNlbnVtYmVye3NlY1x0aGlzc2VjbnVtfSUKKwlcZGVmXHRoaXNzdWJzZWNudW17IyMyfSUKKyAgICAgIH0lCisgICAgICBcZGVmXG51bXN1YnN1YnNlY2VudHJ5IyMxIyMyIyMzIyM0eyUKKwlcYWR2YW5jZW51bWJlcntzdWJzZWNcdGhpc3N1YnNlY251bX0lCisgICAgICB9JQorICAgICAgXGRlZlx0aGlzY2hhcG51bXswfSUKKyAgICAgIFxkZWZcdGhpc3NlY251bXswfSUKKyAgICAgIFxkZWZcdGhpc3N1YnNlY251bXswfSUKKyAgICAgICUKKyAgICAgICUgdXNlIFxkZWYgcmF0aGVyIHRoYW4gXGxldCBoZXJlIGJlY2F1c2Ugd2UgcmVkZWZpbmUgXGNoYXBlbnRyeSBldAorICAgICAgJSBhbC4gYSBzZWNvbmQgdGltZSwgYmVsb3cuCisgICAgICBcZGVmXGFwcGVudHJ5e1xudW1jaGFwZW50cnl9JQorICAgICAgXGRlZlxhcHBzZWNlbnRyeXtcbnVtc2VjZW50cnl9JQorICAgICAgXGRlZlxhcHBzdWJzZWNlbnRyeXtcbnVtc3Vic2VjZW50cnl9JQorICAgICAgXGRlZlxhcHBzdWJzdWJzZWNlbnRyeXtcbnVtc3Vic3Vic2VjZW50cnl9JQorICAgICAgXGRlZlx1bm5jaGFwZW50cnl7XG51bWNoYXBlbnRyeX0lCisgICAgICBcZGVmXHVubnNlY2VudHJ5e1xudW1zZWNlbnRyeX0lCisgICAgICBcZGVmXHVubnN1YnNlY2VudHJ5e1xudW1zdWJzZWNlbnRyeX0lCisgICAgICBcZGVmXHVubnN1YnN1YnNlY2VudHJ5e1xudW1zdWJzdWJzZWNlbnRyeX0lCisgICAgICBccmVhZGRhdGFmaWxle3RvY30lCisgICAgICAlCisgICAgICAlIFJlYWQgdG9jIHNlY29uZCB0aW1lLCB0aGlzIHRpbWUgYWN0dWFsbHkgcHJvZHVjaW5nIHRoZSBvdXRsaW5lcy4KKyAgICAgICUgVGhlIGAtJyBtZWFucyB0YWtlIHRoZSBcZXhwbnVtYmVyIGFzIHRoZSBhYnNvbHV0ZSBudW1iZXIgb2YKKyAgICAgICUgc3ViZW50cmllcywgd2hpY2ggd2UgY2FsY3VsYXRlZCBvbiBvdXIgZmlyc3QgcmVhZCBvZiB0aGUgLnRvYyBhYm92ZS4KKyAgICAgICUKKyAgICAgICUgV2UgdXNlIHRoZSBub2RlIG5hbWVzIGFzIHRoZSBkZXN0aW5hdGlvbnMuCisgICAgICBcZGVmXG51bWNoYXBlbnRyeSMjMSMjMiMjMyMjNHslCisgICAgICAgIFxkb3BkZm91dGxpbmV7IyMxfXtjb3VudC1cZXhwbnVtYmVye2NoYXAjIzJ9fXsjIzN9eyMjNH19JQorICAgICAgXGRlZlxudW1zZWNlbnRyeSMjMSMjMiMjMyMjNHslCisgICAgICAgIFxkb3BkZm91dGxpbmV7IyMxfXtjb3VudC1cZXhwbnVtYmVye3NlYyMjMn19eyMjM317IyM0fX0lCisgICAgICBcZGVmXG51bXN1YnNlY2VudHJ5IyMxIyMyIyMzIyM0eyUKKyAgICAgICAgXGRvcGRmb3V0bGluZXsjIzF9e2NvdW50LVxleHBudW1iZXJ7c3Vic2VjIyMyfX17IyMzfXsjIzR9fSUKKyAgICAgIFxkZWZcbnVtc3Vic3Vic2VjZW50cnkjIzEjIzIjIzMjIzR7JSBjb3VudCBpcyBhbHdheXMgemVybworICAgICAgICBcZG9wZGZvdXRsaW5leyMjMX17fXsjIzN9eyMjNH19JQorICAgICAgJQorICAgICAgJSBQREYgb3V0bGluZXMgYXJlIGRpc3BsYXllZCB1c2luZyBzeXN0ZW0gZm9udHMsIGluc3RlYWQgb2YKKyAgICAgICUgZG9jdW1lbnQgZm9udHMuICBUaGVyZWZvcmUgd2UgY2Fubm90IHVzZSBzcGVjaWFsIGNoYXJhY3RlcnMsCisgICAgICAlIHNpbmNlIHRoZSBlbmNvZGluZyBpcyB1bmtub3duLiAgRm9yIGV4YW1wbGUsIHRoZSBlb2dvbmVrIGZyb20KKyAgICAgICUgTGF0aW4gMiAoMHhlYSkgZ2V0cyB0cmFuc2xhdGVkIHRvIGEgfCBjaGFyYWN0ZXIuICBJbmZvIGZyb20KKyAgICAgICUgU3Rhc3playBXYXdyeWtpZXdpY3osIDE5IEphbiAyMDA0IDA0OjA5OjI0ICswMTAwLgorICAgICAgJQorICAgICAgJSB4eCB0byBkbyB0aGlzIHJpZ2h0LCB3ZSBoYXZlIHRvIHRyYW5zbGF0ZSA4LWJpdCBjaGFyYWN0ZXJzIHRvCisgICAgICAlIHRoZWlyICJiZXN0IiBlcXVpdmFsZW50LCBiYXNlZCBvbiB0aGUgQGRvY3VtZW50ZW5jb2RpbmcuICBSaWdodAorICAgICAgJSBub3csIEkgZ3Vlc3Mgd2UnbGwganVzdCBsZXQgdGhlIHBkZiByZWFkZXIgaGF2ZSBpdHMgd2F5LgorICAgICAgXGluZGV4bm9mb250cworICAgICAgXHNldHVwZGF0YWZpbGUKKyAgICAgIFxjYXRjb2RlYFxcPVxhY3RpdmUgXG90aGVyYmFja3NsYXNoCisgICAgICBcaW5wdXQgXHRvY3JlYWRmaWxlbmFtZQorICAgIFxlbmRncm91cAorICB9CisgICUKKyAgXGRlZlxza2lwc3BhY2VzIzF7XGRlZlxQUHsjMX1cZGVmXER7fH0lCisgICAgXGlmeFxQUFxEXGxldFxuZXh0c3BccmVsYXgKKyAgICBcZWxzZVxsZXRcbmV4dHNwXHNraXBzcGFjZXMKKyAgICAgIFxpZnhccFxzcGFjZVxlbHNlXGFkZHRva2Vuc3tcZmlsZW5hbWV9e1xQUH0lCisgICAgICAgIFxhZHZhbmNlXGZpbGVuYW1lbGVuZ3RoIGJ5IDEKKyAgICAgIFxmaQorICAgIFxmaQorICAgIFxuZXh0c3B9CisgIFxkZWZcZ2V0ZmlsZW5hbWUjMXtcZmlsZW5hbWVsZW5ndGg9MFxleHBhbmRhZnRlclxza2lwc3BhY2VzIzF8XHJlbGF4fQorICBcaWZudW1ccGRmdGV4dmVyc2lvbiA8IDE0CisgICAgXGxldCBcc3RhcnRsaW5rIFxwZGZhbm5vdGxpbmsKKyAgXGVsc2UKKyAgICBcbGV0IFxzdGFydGxpbmsgXHBkZnN0YXJ0bGluaworICBcZmkKKyAgJSBtYWtlIGEgbGl2ZSB1cmwgaW4gcGRmIG91dHB1dC4KKyAgXGRlZlxwZGZ1cmwjMXslCisgICAgXGJlZ2luZ3JvdXAKKyAgICAgICUgaXQgc2VlbXMgd2UgcmVhbGx5IG5lZWQgeWV0IGFub3RoZXIgc2V0IG9mIGR1bW1pZXM7IGhhdmUgbm90CisgICAgICAlIHRyaWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBlYWNoIGNvbW1hbmQgc2hvdWxkIGRvIGluIHRoZSBjb250ZXh0CisgICAgICAlIG9mIEB1cmwuICBmb3Igbm93LCBqdXN0IG1ha2UgQC8gYSBuby1vcCwgdGhhdCdzIHRoZSBvbmx5IG9uZQorICAgICAgJSBwZW9wbGUgaGF2ZSBhY3R1YWxseSByZXBvcnRlZCBhIHByb2JsZW0gd2l0aC4KKyAgICAgICUgCisgICAgICBcbm9ybWFsdHVybm9mZmFjdGl2ZQorICAgICAgXGRlZlxAe0B9JQorICAgICAgXGxldFwvPVxlbXB0eQorICAgICAgXG1ha2V2YWx1ZWV4cGFuZGFibGUKKyAgICAgIFxsZWF2ZXZtb2RlXHVybGNvbG9yCisgICAgICBcc3RhcnRsaW5rIGF0dHJ7L0JvcmRlciBbMCAwIDBdfSUKKyAgICAgICAgdXNlcnsvU3VidHlwZSAvTGluayAvQSA8PCAvUyAvVVJJIC9VUkkgKCMxKSA+Pn0lCisgICAgXGVuZGdyb3VwfQorICBcZGVmXHBkZmdldHRva3MjMS57XHNldGJveFxib3hBPVxoYm94e1x0b2tzQT17IzEufVx0b2tzQj17fVxtYWtldG9rc319CisgIFxkZWZcYWRkdG9rZW5zIzEjMntcZWRlZlxhZGR0b2tze1xub2V4cGFuZCMxPXtcdGhlIzEjMn19XGFkZHRva3N9CisgIFxkZWZcYWRuIzF7XGFkZHRva2Vuc3tcdG9rc0N9eyMxfVxnbG9iYWxcY291bnRBPTFcbGV0XG5leHQ9XG1ha2V0b2tzfQorICBcZGVmXHBvcHRva3MjMSMyfEVORFRPS1N8e1xsZXRcZmlyc3Q9IzFcdG9rc0Q9eyMxfVx0b2tzQT17IzJ9fQorICBcZGVmXG1ha2V0b2tzeyUKKyAgICBcZXhwYW5kYWZ0ZXJccG9wdG9rc1x0aGVcdG9rc0F8RU5EVE9LU3xccmVsYXgKKyAgICBcaWZ4XGZpcnN0MFxhZG4wCisgICAgXGVsc2VcaWZ4XGZpcnN0MVxhZG4xIFxlbHNlXGlmeFxmaXJzdDJcYWRuMiBcZWxzZVxpZnhcZmlyc3QzXGFkbjMKKyAgICBcZWxzZVxpZnhcZmlyc3Q0XGFkbjQgXGVsc2VcaWZ4XGZpcnN0NVxhZG41IFxlbHNlXGlmeFxmaXJzdDZcYWRuNgorICAgIFxlbHNlXGlmeFxmaXJzdDdcYWRuNyBcZWxzZVxpZnhcZmlyc3Q4XGFkbjggXGVsc2VcaWZ4XGZpcnN0OVxhZG45CisgICAgXGVsc2UKKyAgICAgIFxpZm51bTA9XGNvdW50QVxlbHNlXG1ha2VsaW5rXGZpCisgICAgICBcaWZ4XGZpcnN0LlxsZXRcbmV4dD1cZG9uZVxlbHNlCisgICAgICAgIFxsZXRcbmV4dD1cbWFrZXRva3MKKyAgICAgICAgXGFkZHRva2Vuc3tcdG9rc0J9e1x0aGVcdG9rc0R9CisgICAgICAgIFxpZnhcZmlyc3QsXGFkZHRva2Vuc3tcdG9rc0J9e1xzcGFjZX1cZmkKKyAgICAgIFxmaQorICAgIFxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaQorICAgIFxuZXh0fQorICBcZGVmXG1ha2VsaW5re1xhZGR0b2tlbnN7XHRva3NCfSUKKyAgICB7XG5vZXhwYW5kXHBkZmxpbmt7XHRoZVx0b2tzQ319XHRva3NDPXt9XGdsb2JhbFxjb3VudEE9MH0KKyAgXGRlZlxwZGZsaW5rIzF7JQorICAgIFxzdGFydGxpbmsgYXR0cnsvQm9yZGVyIFswIDAgMF19IGdvdG8gbmFtZXtccGRmbWtwZ257IzF9fQorICAgIFxsaW5rY29sb3IgIzFcZW5kbGlua30KKyAgXGRlZlxkb25le1xlZGVmXHN0e1xnbG9iYWxcbm9leHBhbmRcdG9rc0E9e1x0aGVcdG9rc0J9fVxzdH0KK1xlbHNlCisgIFxsZXRccGRmbWtkZXN0ID0gXGdvYmJsZQorICBcbGV0XHBkZnVybCA9IFxnb2JibGUKKyAgXGxldFxlbmRsaW5rID0gXHJlbGF4CisgIFxsZXRcbGlua2NvbG9yID0gXHJlbGF4CisgIFxsZXRccGRmbWFrZW91dGxpbmVzID0gXHJlbGF4CitcZmkgICUgXGlmeFxwZGZvdXRwdXQKKworCitcbWVzc2FnZXtmb250cyx9CisKKyUgQ2hhbmdlIHRoZSBjdXJyZW50IGZvbnQgc3R5bGUgdG8gIzEsIHJlbWVtYmVyaW5nIGl0IGluIFxjdXJmb250c3R5bGUuCislIEZvciBub3csIHdlIGRvIG5vdCBhY2N1bXVsYXRlIGZvbnQgc3R5bGVzOiBAYntAaXtmb299fSBwcmludHMgZm9vIGluCislIGl0YWxpY3MsIG5vdCBib2xkIGl0YWxpY3MuCislCitcZGVmXHNldGZvbnRzdHlsZSMxeyUKKyAgXGRlZlxjdXJmb250c3R5bGV7IzF9JSBub3QgYXMgYSBjb250cm9sIHNlcXVlbmNlLCBiZWNhdXNlIHdlIGFyZSBcZWRlZidkLgorICBcY3NuYW1lIHRlbiMxXGVuZGNzbmFtZSAgJSBjaGFuZ2UgdGhlIGN1cnJlbnQgZm9udAorfQorCislIFNlbGVjdCAjMSBmb250cyB3aXRoIHRoZSBjdXJyZW50IHN0eWxlLgorJQorXGRlZlxzZWxlY3Rmb250cyMxe1xjc25hbWUgIzFmb250c1xlbmRjc25hbWUgXGNzbmFtZVxjdXJmb250c3R5bGVcZW5kY3NuYW1lfQorCitcZGVmXHJte1xmYW09MCBcc2V0Zm9udHN0eWxle3JtfX0KK1xkZWZcaXR7XGZhbT1caXRmYW0gXHNldGZvbnRzdHlsZXtpdH19CitcZGVmXHNse1xmYW09XHNsZmFtIFxzZXRmb250c3R5bGV7c2x9fQorXGRlZlxiZntcZmFtPVxiZmZhbSBcc2V0Zm9udHN0eWxle2JmfX1cZGVmXGJmc3R5bGVuYW1le2JmfQorXGRlZlx0dHtcZmFtPVx0dGZhbSBcc2V0Zm9udHN0eWxle3R0fX0KKworJSBUZXhpbmZvIHNvcnQgb2Ygc3VwcG9ydHMgdGhlIHNhbnMgc2VyaWYgZm9udCBzdHlsZSwgd2hpY2ggcGxhaW4gVGVYIGRvZXMgbm90LgorJSBTbyB3ZSBzZXQgdXAgYSBcc2YuCitcbmV3ZmFtXHNmZmFtCitcZGVmXHNme1xmYW09XHNmZmFtIFxzZXRmb250c3R5bGV7c2Z9fQorXGxldFxsaSA9IFxzZiAlIFNvbWV0aW1lcyB3ZSBjYWxsIGl0IFxsaSwgbm90IFxzZi4KKworJSBXZSBkb24ndCBuZWVkIG1hdGggZm9yIHRoaXMgZm9udCBzdHlsZS4KK1xkZWZcdHRzbHtcc2V0Zm9udHN0eWxle3R0c2x9fQorCisKKyUgRGVmYXVsdCBsZWFkaW5nLgorXG5ld2RpbWVuXHRleHRsZWFkaW5nICBcdGV4dGxlYWRpbmcgPSAxMy4ycHQKKworJSBTZXQgdGhlIGJhc2VsaW5lc2tpcCB0byAjMSwgYW5kIHRoZSBsaW5lc2tpcCBhbmQgc3RydXQgc2l6ZQorJSBjb3JyZXNwb25kaW5nbHkuICBUaGVyZSBpcyBubyBkZWVwIG1lYW5pbmcgYmVoaW5kIHRoZXNlIG1hZ2ljIG51bWJlcnMKKyUgdXNlZCBhcyBmYWN0b3JzOyB0aGV5IGp1c3QgbWF0Y2ggKGNsb3NlbHkgZW5vdWdoKSB3aGF0IEtudXRoIGRlZmluZWQuCislCitcZGVmXGxpbmVza2lwZmFjdG9yey4wODMzM30KK1xkZWZcc3RydXRoZWlnaHRwZXJjZW50ey43MDgzM30KK1xkZWZcc3RydXRkZXB0aHBlcmNlbnQgey4yOTE2N30KKyUKK1xkZWZcc2V0bGVhZGluZyMxeyUKKyAgXG5vcm1hbGJhc2VsaW5lc2tpcCA9ICMxXHJlbGF4CisgIFxub3JtYWxsaW5lc2tpcCA9IFxsaW5lc2tpcGZhY3Rvclxub3JtYWxiYXNlbGluZXNraXAKKyAgXG5vcm1hbGJhc2VsaW5lcworICBcc2V0Ym94XHN0cnV0Ym94ID1caGJveHslCisgICAgXHZydWxlIHdpZHRoMHB0IGhlaWdodFxzdHJ1dGhlaWdodHBlcmNlbnRcYmFzZWxpbmVza2lwCisgICAgICAgICAgICAgICAgICAgIGRlcHRoIFxzdHJ1dGRlcHRocGVyY2VudCBcYmFzZWxpbmVza2lwCisgIH0lCit9CisKKyUKKyUgUERGIENNYXBzLiAgU2VlIGFsc28gTGFUZVgncyB0MS5jbWFwLgorJQorJSBcY21hcE9UMQorXGlmcGRmCisgIFxiZWdpbmdyb3VwCisgICAgXGNhdGNvZGVgXF5eTT1cYWN0aXZlIFxkZWZeXk17Xl5KfSUgT3V0cHV0IGxpbmUgZW5kaW5ncyBhcyB0aGUgXl5KIGNoYXIuCisgICAgXGNhdGNvZGVgXCU9MTIgXGltbWVkaWF0ZVxwZGZvYmogc3RyZWFtIHslIVBTLUFkb2JlLTMuMCBSZXNvdXJjZS1DTWFwCislJURvY3VtZW50TmVlZGVkUmVzb3VyY2VzOiBQcm9jU2V0IChDSURJbml0KQorJSVJbmNsdWRlUmVzb3VyY2U6IFByb2NTZXQgKENJREluaXQpCislJUJlZ2luUmVzb3VyY2U6IENNYXAgKFRlWC1PVDEtMCkKKyUlVGl0bGU6IChUZVgtT1QxLTAgVGVYIE9UMSAwKQorJSVWZXJzaW9uOiAxLjAwMAorJSVFbmRDb21tZW50cworL0NJREluaXQgL1Byb2NTZXQgZmluZHJlc291cmNlIGJlZ2luCisxMiBkaWN0IGJlZ2luCitiZWdpbmNtYXAKKy9DSURTeXN0ZW1JbmZvCis8PCAvUmVnaXN0cnkgKFRlWCkKKy9PcmRlcmluZyAoT1QxKQorL1N1cHBsZW1lbnQgMAorPj4gZGVmCisvQ01hcE5hbWUgL1RlWC1PVDEtMCBkZWYKKy9DTWFwVHlwZSAyIGRlZgorMSBiZWdpbmNvZGVzcGFjZXJhbmdlCis8MDA+IDw3Rj4KK2VuZGNvZGVzcGFjZXJhbmdlCis4IGJlZ2luYmZyYW5nZQorPDAwPiA8MDE+IDwwMzkzPgorPDA5PiA8MEE+IDwwM0E4PgorPDIzPiA8MjY+IDwwMDIzPgorPDI4PiA8M0I+IDwwMDI4PgorPDNGPiA8NUI+IDwwMDNGPgorPDVEPiA8NUU+IDwwMDVEPgorPDYxPiA8N0E+IDwwMDYxPgorPDdCPiA8N0M+IDwyMDEzPgorZW5kYmZyYW5nZQorNDAgYmVnaW5iZmNoYXIKKzwwMj4gPDAzOTg+Cis8MDM+IDwwMzlCPgorPDA0PiA8MDM5RT4KKzwwNT4gPDAzQTA+Cis8MDY+IDwwM0EzPgorPDA3PiA8MDNEMj4KKzwwOD4gPDAzQTY+Cis8MEI+IDwwMDY2MDA2Nj4KKzwwQz4gPDAwNjYwMDY5PgorPDBEPiA8MDA2NjAwNkM+Cis8MEU+IDwwMDY2MDA2NjAwNjk+Cis8MEY+IDwwMDY2MDA2NjAwNkM+Cis8MTA+IDwwMTMxPgorPDExPiA8MDIzNz4KKzwxMj4gPDAwNjA+Cis8MTM+IDwwMEI0PgorPDE0PiA8MDJDNz4KKzwxNT4gPDAyRDg+Cis8MTY+IDwwMEFGPgorPDE3PiA8MDJEQT4KKzwxOD4gPDAwQjg+Cis8MTk+IDwwMERGPgorPDFBPiA8MDBFNj4KKzwxQj4gPDAxNTM+Cis8MUM+IDwwMEY4PgorPDFEPiA8MDBDNj4KKzwxRT4gPDAxNTI+Cis8MUY+IDwwMEQ4PgorPDIxPiA8MDAyMT4KKzwyMj4gPDIwMUQ+Cis8Mjc+IDwyMDE5PgorPDNDPiA8MDBBMT4KKzwzRD4gPDAwM0Q+Cis8M0U+IDwwMEJGPgorPDVDPiA8MjAxQz4KKzw1Rj4gPDAyRDk+Cis8NjA+IDwyMDE4PgorPDdEPiA8MDJERD4KKzw3RT4gPDAwN0U+Cis8N0Y+IDwwMEE4PgorZW5kYmZjaGFyCitlbmRjbWFwCitDTWFwTmFtZSBjdXJyZW50ZGljdCAvQ01hcCBkZWZpbmVyZXNvdXJjZSBwb3AKK2VuZAorZW5kCislJUVuZFJlc291cmNlCislJUVPRgorICAgIH1cZW5kZ3JvdXAKKyAgXGV4cGFuZGFmdGVyXGVkZWZcY3NuYW1lIGNtYXBPVDFcZW5kY3NuYW1lIzF7JQorICAgIFxwZGZmb250YXR0ciMxey9Ub1VuaWNvZGUgXHRoZVxwZGZsYXN0b2JqXHNwYWNlIDAgUn0lCisgIH0lCislCislIFxjbWFwT1QxSVQKKyAgXGJlZ2luZ3JvdXAKKyAgICBcY2F0Y29kZWBcXl5NPVxhY3RpdmUgXGRlZl5eTXteXkp9JSBPdXRwdXQgbGluZSBlbmRpbmdzIGFzIHRoZSBeXkogY2hhci4KKyAgICBcY2F0Y29kZWBcJT0xMiBcaW1tZWRpYXRlXHBkZm9iaiBzdHJlYW0geyUhUFMtQWRvYmUtMy4wIFJlc291cmNlLUNNYXAKKyUlRG9jdW1lbnROZWVkZWRSZXNvdXJjZXM6IFByb2NTZXQgKENJREluaXQpCislJUluY2x1ZGVSZXNvdXJjZTogUHJvY1NldCAoQ0lESW5pdCkKKyUlQmVnaW5SZXNvdXJjZTogQ01hcCAoVGVYLU9UMUlULTApCislJVRpdGxlOiAoVGVYLU9UMUlULTAgVGVYIE9UMUlUIDApCislJVZlcnNpb246IDEuMDAwCislJUVuZENvbW1lbnRzCisvQ0lESW5pdCAvUHJvY1NldCBmaW5kcmVzb3VyY2UgYmVnaW4KKzEyIGRpY3QgYmVnaW4KK2JlZ2luY21hcAorL0NJRFN5c3RlbUluZm8KKzw8IC9SZWdpc3RyeSAoVGVYKQorL09yZGVyaW5nIChPVDFJVCkKKy9TdXBwbGVtZW50IDAKKz4+IGRlZgorL0NNYXBOYW1lIC9UZVgtT1QxSVQtMCBkZWYKKy9DTWFwVHlwZSAyIGRlZgorMSBiZWdpbmNvZGVzcGFjZXJhbmdlCis8MDA+IDw3Rj4KK2VuZGNvZGVzcGFjZXJhbmdlCis4IGJlZ2luYmZyYW5nZQorPDAwPiA8MDE+IDwwMzkzPgorPDA5PiA8MEE+IDwwM0E4PgorPDI1PiA8MjY+IDwwMDI1PgorPDI4PiA8M0I+IDwwMDI4PgorPDNGPiA8NUI+IDwwMDNGPgorPDVEPiA8NUU+IDwwMDVEPgorPDYxPiA8N0E+IDwwMDYxPgorPDdCPiA8N0M+IDwyMDEzPgorZW5kYmZyYW5nZQorNDIgYmVnaW5iZmNoYXIKKzwwMj4gPDAzOTg+Cis8MDM+IDwwMzlCPgorPDA0PiA8MDM5RT4KKzwwNT4gPDAzQTA+Cis8MDY+IDwwM0EzPgorPDA3PiA8MDNEMj4KKzwwOD4gPDAzQTY+Cis8MEI+IDwwMDY2MDA2Nj4KKzwwQz4gPDAwNjYwMDY5PgorPDBEPiA8MDA2NjAwNkM+Cis8MEU+IDwwMDY2MDA2NjAwNjk+Cis8MEY+IDwwMDY2MDA2NjAwNkM+Cis8MTA+IDwwMTMxPgorPDExPiA8MDIzNz4KKzwxMj4gPDAwNjA+Cis8MTM+IDwwMEI0PgorPDE0PiA8MDJDNz4KKzwxNT4gPDAyRDg+Cis8MTY+IDwwMEFGPgorPDE3PiA8MDJEQT4KKzwxOD4gPDAwQjg+Cis8MTk+IDwwMERGPgorPDFBPiA8MDBFNj4KKzwxQj4gPDAxNTM+Cis8MUM+IDwwMEY4PgorPDFEPiA8MDBDNj4KKzwxRT4gPDAxNTI+Cis8MUY+IDwwMEQ4PgorPDIxPiA8MDAyMT4KKzwyMj4gPDIwMUQ+Cis8MjM+IDwwMDIzPgorPDI0PiA8MDBBMz4KKzwyNz4gPDIwMTk+Cis8M0M+IDwwMEExPgorPDNEPiA8MDAzRD4KKzwzRT4gPDAwQkY+Cis8NUM+IDwyMDFDPgorPDVGPiA8MDJEOT4KKzw2MD4gPDIwMTg+Cis8N0Q+IDwwMkREPgorPDdFPiA8MDA3RT4KKzw3Rj4gPDAwQTg+CitlbmRiZmNoYXIKK2VuZGNtYXAKK0NNYXBOYW1lIGN1cnJlbnRkaWN0IC9DTWFwIGRlZmluZXJlc291cmNlIHBvcAorZW5kCitlbmQKKyUlRW5kUmVzb3VyY2UKKyUlRU9GCisgICAgfVxlbmRncm91cAorICBcZXhwYW5kYWZ0ZXJcZWRlZlxjc25hbWUgY21hcE9UMUlUXGVuZGNzbmFtZSMxeyUKKyAgICBccGRmZm9udGF0dHIjMXsvVG9Vbmljb2RlIFx0aGVccGRmbGFzdG9ialxzcGFjZSAwIFJ9JQorICB9JQorJQorJSBcY21hcE9UMVRUCisgIFxiZWdpbmdyb3VwCisgICAgXGNhdGNvZGVgXF5eTT1cYWN0aXZlIFxkZWZeXk17Xl5KfSUgT3V0cHV0IGxpbmUgZW5kaW5ncyBhcyB0aGUgXl5KIGNoYXIuCisgICAgXGNhdGNvZGVgXCU9MTIgXGltbWVkaWF0ZVxwZGZvYmogc3RyZWFtIHslIVBTLUFkb2JlLTMuMCBSZXNvdXJjZS1DTWFwCislJURvY3VtZW50TmVlZGVkUmVzb3VyY2VzOiBQcm9jU2V0IChDSURJbml0KQorJSVJbmNsdWRlUmVzb3VyY2U6IFByb2NTZXQgKENJREluaXQpCislJUJlZ2luUmVzb3VyY2U6IENNYXAgKFRlWC1PVDFUVC0wKQorJSVUaXRsZTogKFRlWC1PVDFUVC0wIFRlWCBPVDFUVCAwKQorJSVWZXJzaW9uOiAxLjAwMAorJSVFbmRDb21tZW50cworL0NJREluaXQgL1Byb2NTZXQgZmluZHJlc291cmNlIGJlZ2luCisxMiBkaWN0IGJlZ2luCitiZWdpbmNtYXAKKy9DSURTeXN0ZW1JbmZvCis8PCAvUmVnaXN0cnkgKFRlWCkKKy9PcmRlcmluZyAoT1QxVFQpCisvU3VwcGxlbWVudCAwCis+PiBkZWYKKy9DTWFwTmFtZSAvVGVYLU9UMVRULTAgZGVmCisvQ01hcFR5cGUgMiBkZWYKKzEgYmVnaW5jb2Rlc3BhY2VyYW5nZQorPDAwPiA8N0Y+CitlbmRjb2Rlc3BhY2VyYW5nZQorNSBiZWdpbmJmcmFuZ2UKKzwwMD4gPDAxPiA8MDM5Mz4KKzwwOT4gPDBBPiA8MDNBOD4KKzwyMT4gPDI2PiA8MDAyMT4KKzwyOD4gPDVGPiA8MDAyOD4KKzw2MT4gPDdFPiA8MDA2MT4KK2VuZGJmcmFuZ2UKKzMyIGJlZ2luYmZjaGFyCis8MDI+IDwwMzk4PgorPDAzPiA8MDM5Qj4KKzwwND4gPDAzOUU+Cis8MDU+IDwwM0EwPgorPDA2PiA8MDNBMz4KKzwwNz4gPDAzRDI+Cis8MDg+IDwwM0E2PgorPDBCPiA8MjE5MT4KKzwwQz4gPDIxOTM+Cis8MEQ+IDwwMDI3PgorPDBFPiA8MDBBMT4KKzwwRj4gPDAwQkY+Cis8MTA+IDwwMTMxPgorPDExPiA8MDIzNz4KKzwxMj4gPDAwNjA+Cis8MTM+IDwwMEI0PgorPDE0PiA8MDJDNz4KKzwxNT4gPDAyRDg+Cis8MTY+IDwwMEFGPgorPDE3PiA8MDJEQT4KKzwxOD4gPDAwQjg+Cis8MTk+IDwwMERGPgorPDFBPiA8MDBFNj4KKzwxQj4gPDAxNTM+Cis8MUM+IDwwMEY4PgorPDFEPiA8MDBDNj4KKzwxRT4gPDAxNTI+Cis8MUY+IDwwMEQ4PgorPDIwPiA8MjQyMz4KKzwyNz4gPDIwMTk+Cis8NjA+IDwyMDE4PgorPDdGPiA8MDBBOD4KK2VuZGJmY2hhcgorZW5kY21hcAorQ01hcE5hbWUgY3VycmVudGRpY3QgL0NNYXAgZGVmaW5lcmVzb3VyY2UgcG9wCitlbmQKK2VuZAorJSVFbmRSZXNvdXJjZQorJSVFT0YKKyAgICB9XGVuZGdyb3VwCisgIFxleHBhbmRhZnRlclxlZGVmXGNzbmFtZSBjbWFwT1QxVFRcZW5kY3NuYW1lIzF7JQorICAgIFxwZGZmb250YXR0ciMxey9Ub1VuaWNvZGUgXHRoZVxwZGZsYXN0b2JqXHNwYWNlIDAgUn0lCisgIH0lCitcZWxzZQorICBcZXhwYW5kYWZ0ZXJcbGV0XGNzbmFtZSBjbWFwT1QxXGVuZGNzbmFtZVxnb2JibGUKKyAgXGV4cGFuZGFmdGVyXGxldFxjc25hbWUgY21hcE9UMUlUXGVuZGNzbmFtZVxnb2JibGUKKyAgXGV4cGFuZGFmdGVyXGxldFxjc25hbWUgY21hcE9UMVRUXGVuZGNzbmFtZVxnb2JibGUKK1xmaQorCisKKyUgU2V0IHRoZSBmb250IG1hY3JvICMxIHRvIHRoZSBmb250IG5hbWVkICMyLCBhZGRpbmcgb24gdGhlCislIHNwZWNpZmllZCBmb250IHByZWZpeCAobm9ybWFsbHkgYGNtJykuCislICMzIGlzIHRoZSBmb250J3MgZGVzaWduIHNpemUsICM0IGlzIGEgc2NhbGUgZmFjdG9yLCAjNSBpcyB0aGUgQ01hcAorJSBlbmNvZGluZyAoY3VycmVudGx5IG9ubHkgT1QxLCBPVDFJVCBhbmQgT1QxVFQgYXJlIGFsbG93ZWQsIHBhc3MKKyUgZW1wdHkgdG8gb21pdCkuCitcZGVmXHNldGZvbnQjMSMyIzMjNCM1eyUKKyAgXGZvbnQjMT1cZm9udHByZWZpeCMyIzMgc2NhbGVkICM0CisgIFxjc25hbWUgY21hcCM1XGVuZGNzbmFtZSMxJQorfQorJSBUaGlzIGlzIHdoYXQgZ2V0cyBjYWxsZWQgd2hlbiAjNSBvZiBcc2V0Zm9udCBpcyBlbXB0eS4KK1xsZXRcY21hcFxnb2JibGUKKworCislIFVzZSBjbSBhcyB0aGUgZGVmYXVsdCBmb250IHByZWZpeC4KKyUgVG8gc3BlY2lmeSB0aGUgZm9udCBwcmVmaXgsIHlvdSBtdXN0IGRlZmluZSBcZm9udHByZWZpeAorJSBiZWZvcmUgeW91IHJlYWQgaW4gdGV4aW5mby50ZXguCitcaWZ4XGZvbnRwcmVmaXhcdW5kZWZpbmVkCitcZGVmXGZvbnRwcmVmaXh7Y219CitcZmkKKyUgU3VwcG9ydCBmb250IGZhbWlsaWVzIHRoYXQgZG9uJ3QgdXNlIHRoZSBzYW1lIG5hbWluZyBzY2hlbWUgYXMgQ00uCitcZGVmXHJtc2hhcGV7cn0KK1xkZWZccm1ic2hhcGV7Ynh9ICAgICAgICAgICAgICAgJXdoZXJlIHRoZSBub3JtYWwgZmFjZSBpcyBib2xkCitcZGVmXGJmc2hhcGV7Yn0KK1xkZWZcYnhzaGFwZXtieH0KK1xkZWZcdHRzaGFwZXt0dH0KK1xkZWZcdHRic2hhcGV7dHR9CitcZGVmXHR0c2xzaGFwZXtzbHR0fQorXGRlZlxpdHNoYXBle3RpfQorXGRlZlxpdGJzaGFwZXtieHRpfQorXGRlZlxzbHNoYXBle3NsfQorXGRlZlxzbGJzaGFwZXtieHNsfQorXGRlZlxzZnNoYXBle3NzfQorXGRlZlxzZmJzaGFwZXtzc30KK1xkZWZcc2NzaGFwZXtjc2N9CitcZGVmXHNjYnNoYXBle2NzY30KKworJSBEZWZpbml0aW9ucyBmb3IgYSBtYWluIHRleHQgc2l6ZSBvZiAxMXB0LiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBpbgorJSBUZXhpbmZvLgorJSAKK1xkZWZcZGVmaW5ldGV4dGZvbnRzaXpleGl7JQorJSBUZXh0IGZvbnRzICgxMS4ycHQsIG1hZ3N0ZXAxKS4KK1xkZWZcdGV4dG5vbWluYWxzaXplezExcHR9CitcZWRlZlxtYWlubWFnc3RlcHtcbWFnc3RlcGhhbGZ9Citcc2V0Zm9udFx0ZXh0cm1ccm1zaGFwZXsxMH17XG1haW5tYWdzdGVwfXtPVDF9Citcc2V0Zm9udFx0ZXh0dHRcdHRzaGFwZXsxMH17XG1haW5tYWdzdGVwfXtPVDFUVH0KK1xzZXRmb250XHRleHRiZlxiZnNoYXBlezEwfXtcbWFpbm1hZ3N0ZXB9e09UMX0KK1xzZXRmb250XHRleHRpdFxpdHNoYXBlezEwfXtcbWFpbm1hZ3N0ZXB9e09UMUlUfQorXHNldGZvbnRcdGV4dHNsXHNsc2hhcGV7MTB9e1xtYWlubWFnc3RlcH17T1QxfQorXHNldGZvbnRcdGV4dHNmXHNmc2hhcGV7MTB9e1xtYWlubWFnc3RlcH17T1QxfQorXHNldGZvbnRcdGV4dHNjXHNjc2hhcGV7MTB9e1xtYWlubWFnc3RlcH17T1QxfQorXHNldGZvbnRcdGV4dHR0c2xcdHRzbHNoYXBlezEwfXtcbWFpbm1hZ3N0ZXB9e09UMVRUfQorXGZvbnRcdGV4dGk9Y21taTEwIHNjYWxlZCBcbWFpbm1hZ3N0ZXAKK1xmb250XHRleHRzeT1jbXN5MTAgc2NhbGVkIFxtYWlubWFnc3RlcAorCislIEEgZmV3IGZvbnRzIGZvciBAZGVmdW4gbmFtZXMgYW5kIGFyZ3MuCitcc2V0Zm9udFxkZWZiZlxiZnNoYXBlezEwfXtcbWFnc3RlcDF9e09UMX0KK1xzZXRmb250XGRlZnR0XHR0c2hhcGV7MTB9e1xtYWdzdGVwMX17T1QxVFR9Citcc2V0Zm9udFxkZWZ0dHNsXHR0c2xzaGFwZXsxMH17XG1hZ3N0ZXAxfXtPVDFUVH0KK1xkZWZcZGZ7XGxldFx0ZW50dD1cZGVmdHQgXGxldFx0ZW5iZiA9IFxkZWZiZiBcbGV0XHRlbnR0c2w9XGRlZnR0c2wgXGJmfQorCislIEZvbnRzIGZvciBpbmRpY2VzLCBmb290bm90ZXMsIHNtYWxsIGV4YW1wbGVzICg5cHQpLgorXGRlZlxzbWFsbG5vbWluYWxzaXplezlwdH0KK1xzZXRmb250XHNtYWxscm1ccm1zaGFwZXs5fXsxMDAwfXtPVDF9Citcc2V0Zm9udFxzbWFsbHR0XHR0c2hhcGV7OX17MTAwMH17T1QxVFR9Citcc2V0Zm9udFxzbWFsbGJmXGJmc2hhcGV7MTB9ezkwMH17T1QxfQorXHNldGZvbnRcc21hbGxpdFxpdHNoYXBlezl9ezEwMDB9e09UMUlUfQorXHNldGZvbnRcc21hbGxzbFxzbHNoYXBlezl9ezEwMDB9e09UMX0KK1xzZXRmb250XHNtYWxsc2Zcc2ZzaGFwZXs5fXsxMDAwfXtPVDF9Citcc2V0Zm9udFxzbWFsbHNjXHNjc2hhcGV7MTB9ezkwMH17T1QxfQorXHNldGZvbnRcc21hbGx0dHNsXHR0c2xzaGFwZXsxMH17OTAwfXtPVDFUVH0KK1xmb250XHNtYWxsaT1jbW1pOQorXGZvbnRcc21hbGxzeT1jbXN5OQorCislIEZvbnRzIGZvciBzbWFsbCBleGFtcGxlcyAoOHB0KS4KK1xkZWZcc21hbGxlcm5vbWluYWxzaXplezhwdH0KK1xzZXRmb250XHNtYWxsZXJybVxybXNoYXBlezh9ezEwMDB9e09UMX0KK1xzZXRmb250XHNtYWxsZXJ0dFx0dHNoYXBlezh9ezEwMDB9e09UMVRUfQorXHNldGZvbnRcc21hbGxlcmJmXGJmc2hhcGV7MTB9ezgwMH17T1QxfQorXHNldGZvbnRcc21hbGxlcml0XGl0c2hhcGV7OH17MTAwMH17T1QxSVR9Citcc2V0Zm9udFxzbWFsbGVyc2xcc2xzaGFwZXs4fXsxMDAwfXtPVDF9Citcc2V0Zm9udFxzbWFsbGVyc2Zcc2ZzaGFwZXs4fXsxMDAwfXtPVDF9Citcc2V0Zm9udFxzbWFsbGVyc2Ncc2NzaGFwZXsxMH17ODAwfXtPVDF9Citcc2V0Zm9udFxzbWFsbGVydHRzbFx0dHNsc2hhcGV7MTB9ezgwMH17T1QxVFR9CitcZm9udFxzbWFsbGVyaT1jbW1pOAorXGZvbnRcc21hbGxlcnN5PWNtc3k4CisKKyUgRm9udHMgZm9yIHRpdGxlIHBhZ2UgKDIwLjRwdCk6CitcZGVmXHRpdGxlbm9taW5hbHNpemV7MjBwdH0KK1xzZXRmb250XHRpdGxlcm1ccm1ic2hhcGV7MTJ9e1xtYWdzdGVwM317T1QxfQorXHNldGZvbnRcdGl0bGVpdFxpdGJzaGFwZXsxMH17XG1hZ3N0ZXA0fXtPVDFJVH0KK1xzZXRmb250XHRpdGxlc2xcc2xic2hhcGV7MTB9e1xtYWdzdGVwNH17T1QxfQorXHNldGZvbnRcdGl0bGV0dFx0dGJzaGFwZXsxMn17XG1hZ3N0ZXAzfXtPVDFUVH0KK1xzZXRmb250XHRpdGxldHRzbFx0dHNsc2hhcGV7MTB9e1xtYWdzdGVwNH17T1QxVFR9Citcc2V0Zm9udFx0aXRsZXNmXHNmYnNoYXBlezE3fXtcbWFnc3RlcDF9e09UMX0KK1xsZXRcdGl0bGViZj1cdGl0bGVybQorXHNldGZvbnRcdGl0bGVzY1xzY2JzaGFwZXsxMH17XG1hZ3N0ZXA0fXtPVDF9CitcZm9udFx0aXRsZWk9Y21taTEyIHNjYWxlZCBcbWFnc3RlcDMKK1xmb250XHRpdGxlc3k9Y21zeTEwIHNjYWxlZCBcbWFnc3RlcDQKK1xkZWZcYXV0aG9ycm17XHNlY3JtfQorXGRlZlxhdXRob3J0dHtcc2VjdHR9CisKKyUgQ2hhcHRlciAoYW5kIHVubnVtYmVyZWQpIGZvbnRzICgxNy4yOHB0KS4KK1xkZWZcY2hhcG5vbWluYWxzaXplezE3cHR9Citcc2V0Zm9udFxjaGFwcm1ccm1ic2hhcGV7MTJ9e1xtYWdzdGVwMn17T1QxfQorXHNldGZvbnRcY2hhcGl0XGl0YnNoYXBlezEwfXtcbWFnc3RlcDN9e09UMUlUfQorXHNldGZvbnRcY2hhcHNsXHNsYnNoYXBlezEwfXtcbWFnc3RlcDN9e09UMX0KK1xzZXRmb250XGNoYXB0dFx0dGJzaGFwZXsxMn17XG1hZ3N0ZXAyfXtPVDFUVH0KK1xzZXRmb250XGNoYXB0dHNsXHR0c2xzaGFwZXsxMH17XG1hZ3N0ZXAzfXtPVDFUVH0KK1xzZXRmb250XGNoYXBzZlxzZmJzaGFwZXsxN317MTAwMH17T1QxfQorXGxldFxjaGFwYmY9XGNoYXBybQorXHNldGZvbnRcY2hhcHNjXHNjYnNoYXBlezEwfXtcbWFnc3RlcDN9e09UMX0KK1xmb250XGNoYXBpPWNtbWkxMiBzY2FsZWQgXG1hZ3N0ZXAyCitcZm9udFxjaGFwc3k9Y21zeTEwIHNjYWxlZCBcbWFnc3RlcDMKKworJSBTZWN0aW9uIGZvbnRzICgxNC40cHQpLgorXGRlZlxzZWNub21pbmFsc2l6ZXsxNHB0fQorXHNldGZvbnRcc2Vjcm1ccm1ic2hhcGV7MTJ9e1xtYWdzdGVwMX17T1QxfQorXHNldGZvbnRcc2VjaXRcaXRic2hhcGV7MTB9e1xtYWdzdGVwMn17T1QxSVR9Citcc2V0Zm9udFxzZWNzbFxzbGJzaGFwZXsxMH17XG1hZ3N0ZXAyfXtPVDF9Citcc2V0Zm9udFxzZWN0dFx0dGJzaGFwZXsxMn17XG1hZ3N0ZXAxfXtPVDFUVH0KK1xzZXRmb250XHNlY3R0c2xcdHRzbHNoYXBlezEwfXtcbWFnc3RlcDJ9e09UMVRUfQorXHNldGZvbnRcc2Vjc2Zcc2Zic2hhcGV7MTJ9e1xtYWdzdGVwMX17T1QxfQorXGxldFxzZWNiZlxzZWNybQorXHNldGZvbnRcc2Vjc2Ncc2Nic2hhcGV7MTB9e1xtYWdzdGVwMn17T1QxfQorXGZvbnRcc2VjaT1jbW1pMTIgc2NhbGVkIFxtYWdzdGVwMQorXGZvbnRcc2Vjc3k9Y21zeTEwIHNjYWxlZCBcbWFnc3RlcDIKKworJSBTdWJzZWN0aW9uIGZvbnRzICgxMy4xNXB0KS4KK1xkZWZcc3NlY25vbWluYWxzaXplezEzcHR9Citcc2V0Zm9udFxzc2Vjcm1ccm1ic2hhcGV7MTJ9e1xtYWdzdGVwaGFsZn17T1QxfQorXHNldGZvbnRcc3NlY2l0XGl0YnNoYXBlezEwfXsxMzE1fXtPVDFJVH0KK1xzZXRmb250XHNzZWNzbFxzbGJzaGFwZXsxMH17MTMxNX17T1QxfQorXHNldGZvbnRcc3NlY3R0XHR0YnNoYXBlezEyfXtcbWFnc3RlcGhhbGZ9e09UMVRUfQorXHNldGZvbnRcc3NlY3R0c2xcdHRzbHNoYXBlezEwfXsxMzE1fXtPVDFUVH0KK1xzZXRmb250XHNzZWNzZlxzZmJzaGFwZXsxMn17XG1hZ3N0ZXBoYWxmfXtPVDF9CitcbGV0XHNzZWNiZlxzc2Vjcm0KK1xzZXRmb250XHNzZWNzY1xzY2JzaGFwZXsxMH17MTMxNX17T1QxfQorXGZvbnRcc3NlY2k9Y21taTEyIHNjYWxlZCBcbWFnc3RlcGhhbGYKK1xmb250XHNzZWNzeT1jbXN5MTAgc2NhbGVkIDEzMTUKKworJSBSZWR1Y2VkIGZvbnRzIGZvciBAYWNybyBpbiB0ZXh0ICgxMHB0KS4KK1xkZWZccmVkdWNlZG5vbWluYWxzaXplezEwcHR9Citcc2V0Zm9udFxyZWR1Y2Vkcm1ccm1zaGFwZXsxMH17MTAwMH17T1QxfQorXHNldGZvbnRccmVkdWNlZHR0XHR0c2hhcGV7MTB9ezEwMDB9e09UMVRUfQorXHNldGZvbnRccmVkdWNlZGJmXGJmc2hhcGV7MTB9ezEwMDB9e09UMX0KK1xzZXRmb250XHJlZHVjZWRpdFxpdHNoYXBlezEwfXsxMDAwfXtPVDFJVH0KK1xzZXRmb250XHJlZHVjZWRzbFxzbHNoYXBlezEwfXsxMDAwfXtPVDF9Citcc2V0Zm9udFxyZWR1Y2Vkc2Zcc2ZzaGFwZXsxMH17MTAwMH17T1QxfQorXHNldGZvbnRccmVkdWNlZHNjXHNjc2hhcGV7MTB9ezEwMDB9e09UMX0KK1xzZXRmb250XHJlZHVjZWR0dHNsXHR0c2xzaGFwZXsxMH17MTAwMH17T1QxVFR9CitcZm9udFxyZWR1Y2VkaT1jbW1pMTAKK1xmb250XHJlZHVjZWRzeT1jbXN5MTAKKworJSByZXNldCB0aGUgY3VycmVudCBmb250cworXHRleHRmb250cworXHJtCit9ICUgZW5kIG9mIDExcHQgdGV4dCBmb250IHNpemUgZGVmaW5pdGlvbnMKKworCislIERlZmluaXRpb25zIHRvIG1ha2UgdGhlIG1haW4gdGV4dCBiZSAxMHB0IENvbXB1dGVyIE1vZGVybiwgd2l0aAorJSBzZWN0aW9uLCBjaGFwdGVyLCBldGMuLCBzaXplcyBmb2xsb3dpbmcgc3VpdC4gIFRoaXMgaXMgZm9yIHRoZSBHTlUKKyUgUHJlc3MgcHJpbnRpbmcgb2YgdGhlIEVtYWNzIDIyIG1hbnVhbC4gIE1heWJlIG90aGVyIG1hbnVhbHMgaW4gdGhlCislIGZ1dHVyZS4gIFVzZWQgd2l0aCBAc21hbGxib29rLCB3aGljaCBzZXRzIHRoZSBsZWFkaW5nIHRvIDEycHQuCislIAorXGRlZlxkZWZpbmV0ZXh0Zm9udHNpemV4eyUKKyUgVGV4dCBmb250cyAoMTBwdCkuCitcZGVmXHRleHRub21pbmFsc2l6ZXsxMHB0fQorXGVkZWZcbWFpbm1hZ3N0ZXB7MTAwMH0KK1xzZXRmb250XHRleHRybVxybXNoYXBlezEwfXtcbWFpbm1hZ3N0ZXB9e09UMX0KK1xzZXRmb250XHRleHR0dFx0dHNoYXBlezEwfXtcbWFpbm1hZ3N0ZXB9e09UMVRUfQorXHNldGZvbnRcdGV4dGJmXGJmc2hhcGV7MTB9e1xtYWlubWFnc3RlcH17T1QxfQorXHNldGZvbnRcdGV4dGl0XGl0c2hhcGV7MTB9e1xtYWlubWFnc3RlcH17T1QxSVR9Citcc2V0Zm9udFx0ZXh0c2xcc2xzaGFwZXsxMH17XG1haW5tYWdzdGVwfXtPVDF9Citcc2V0Zm9udFx0ZXh0c2Zcc2ZzaGFwZXsxMH17XG1haW5tYWdzdGVwfXtPVDF9Citcc2V0Zm9udFx0ZXh0c2Ncc2NzaGFwZXsxMH17XG1haW5tYWdzdGVwfXtPVDF9Citcc2V0Zm9udFx0ZXh0dHRzbFx0dHNsc2hhcGV7MTB9e1xtYWlubWFnc3RlcH17T1QxVFR9CitcZm9udFx0ZXh0aT1jbW1pMTAgc2NhbGVkIFxtYWlubWFnc3RlcAorXGZvbnRcdGV4dHN5PWNtc3kxMCBzY2FsZWQgXG1haW5tYWdzdGVwCisKKyUgQSBmZXcgZm9udHMgZm9yIEBkZWZ1biBuYW1lcyBhbmQgYXJncy4KK1xzZXRmb250XGRlZmJmXGJmc2hhcGV7MTB9e1xtYWdzdGVwaGFsZn17T1QxfQorXHNldGZvbnRcZGVmdHRcdHRzaGFwZXsxMH17XG1hZ3N0ZXBoYWxmfXtPVDFUVH0KK1xzZXRmb250XGRlZnR0c2xcdHRzbHNoYXBlezEwfXtcbWFnc3RlcGhhbGZ9e09UMVRUfQorXGRlZlxkZntcbGV0XHRlbnR0PVxkZWZ0dCBcbGV0XHRlbmJmID0gXGRlZmJmIFxsZXRcdGVudHRzbD1cZGVmdHRzbCBcYmZ9CisKKyUgRm9udHMgZm9yIGluZGljZXMsIGZvb3Rub3Rlcywgc21hbGwgZXhhbXBsZXMgKDlwdCkuCitcZGVmXHNtYWxsbm9taW5hbHNpemV7OXB0fQorXHNldGZvbnRcc21hbGxybVxybXNoYXBlezl9ezEwMDB9e09UMX0KK1xzZXRmb250XHNtYWxsdHRcdHRzaGFwZXs5fXsxMDAwfXtPVDFUVH0KK1xzZXRmb250XHNtYWxsYmZcYmZzaGFwZXsxMH17OTAwfXtPVDF9Citcc2V0Zm9udFxzbWFsbGl0XGl0c2hhcGV7OX17MTAwMH17T1QxSVR9Citcc2V0Zm9udFxzbWFsbHNsXHNsc2hhcGV7OX17MTAwMH17T1QxfQorXHNldGZvbnRcc21hbGxzZlxzZnNoYXBlezl9ezEwMDB9e09UMX0KK1xzZXRmb250XHNtYWxsc2Ncc2NzaGFwZXsxMH17OTAwfXtPVDF9Citcc2V0Zm9udFxzbWFsbHR0c2xcdHRzbHNoYXBlezEwfXs5MDB9e09UMVRUfQorXGZvbnRcc21hbGxpPWNtbWk5CitcZm9udFxzbWFsbHN5PWNtc3k5CisKKyUgRm9udHMgZm9yIHNtYWxsIGV4YW1wbGVzICg4cHQpLgorXGRlZlxzbWFsbGVybm9taW5hbHNpemV7OHB0fQorXHNldGZvbnRcc21hbGxlcnJtXHJtc2hhcGV7OH17MTAwMH17T1QxfQorXHNldGZvbnRcc21hbGxlcnR0XHR0c2hhcGV7OH17MTAwMH17T1QxVFR9Citcc2V0Zm9udFxzbWFsbGVyYmZcYmZzaGFwZXsxMH17ODAwfXtPVDF9Citcc2V0Zm9udFxzbWFsbGVyaXRcaXRzaGFwZXs4fXsxMDAwfXtPVDFJVH0KK1xzZXRmb250XHNtYWxsZXJzbFxzbHNoYXBlezh9ezEwMDB9e09UMX0KK1xzZXRmb250XHNtYWxsZXJzZlxzZnNoYXBlezh9ezEwMDB9e09UMX0KK1xzZXRmb250XHNtYWxsZXJzY1xzY3NoYXBlezEwfXs4MDB9e09UMX0KK1xzZXRmb250XHNtYWxsZXJ0dHNsXHR0c2xzaGFwZXsxMH17ODAwfXtPVDFUVH0KK1xmb250XHNtYWxsZXJpPWNtbWk4CitcZm9udFxzbWFsbGVyc3k9Y21zeTgKKworJSBGb250cyBmb3IgdGl0bGUgcGFnZSAoMjAuNHB0KToKK1xkZWZcdGl0bGVub21pbmFsc2l6ZXsyMHB0fQorXHNldGZvbnRcdGl0bGVybVxybWJzaGFwZXsxMn17XG1hZ3N0ZXAzfXtPVDF9Citcc2V0Zm9udFx0aXRsZWl0XGl0YnNoYXBlezEwfXtcbWFnc3RlcDR9e09UMUlUfQorXHNldGZvbnRcdGl0bGVzbFxzbGJzaGFwZXsxMH17XG1hZ3N0ZXA0fXtPVDF9Citcc2V0Zm9udFx0aXRsZXR0XHR0YnNoYXBlezEyfXtcbWFnc3RlcDN9e09UMVRUfQorXHNldGZvbnRcdGl0bGV0dHNsXHR0c2xzaGFwZXsxMH17XG1hZ3N0ZXA0fXtPVDFUVH0KK1xzZXRmb250XHRpdGxlc2Zcc2Zic2hhcGV7MTd9e1xtYWdzdGVwMX17T1QxfQorXGxldFx0aXRsZWJmPVx0aXRsZXJtCitcc2V0Zm9udFx0aXRsZXNjXHNjYnNoYXBlezEwfXtcbWFnc3RlcDR9e09UMX0KK1xmb250XHRpdGxlaT1jbW1pMTIgc2NhbGVkIFxtYWdzdGVwMworXGZvbnRcdGl0bGVzeT1jbXN5MTAgc2NhbGVkIFxtYWdzdGVwNAorXGRlZlxhdXRob3JybXtcc2Vjcm19CitcZGVmXGF1dGhvcnR0e1xzZWN0dH0KKworJSBDaGFwdGVyIGZvbnRzICgxNC40cHQpLgorXGRlZlxjaGFwbm9taW5hbHNpemV7MTRwdH0KK1xzZXRmb250XGNoYXBybVxybWJzaGFwZXsxMn17XG1hZ3N0ZXAxfXtPVDF9Citcc2V0Zm9udFxjaGFwaXRcaXRic2hhcGV7MTB9e1xtYWdzdGVwMn17T1QxSVR9Citcc2V0Zm9udFxjaGFwc2xcc2xic2hhcGV7MTB9e1xtYWdzdGVwMn17T1QxfQorXHNldGZvbnRcY2hhcHR0XHR0YnNoYXBlezEyfXtcbWFnc3RlcDF9e09UMVRUfQorXHNldGZvbnRcY2hhcHR0c2xcdHRzbHNoYXBlezEwfXtcbWFnc3RlcDJ9e09UMVRUfQorXHNldGZvbnRcY2hhcHNmXHNmYnNoYXBlezEyfXtcbWFnc3RlcDF9e09UMX0KK1xsZXRcY2hhcGJmXGNoYXBybQorXHNldGZvbnRcY2hhcHNjXHNjYnNoYXBlezEwfXtcbWFnc3RlcDJ9e09UMX0KK1xmb250XGNoYXBpPWNtbWkxMiBzY2FsZWQgXG1hZ3N0ZXAxCitcZm9udFxjaGFwc3k9Y21zeTEwIHNjYWxlZCBcbWFnc3RlcDIKKworJSBTZWN0aW9uIGZvbnRzICgxMnB0KS4KK1xkZWZcc2Vjbm9taW5hbHNpemV7MTJwdH0KK1xzZXRmb250XHNlY3JtXHJtYnNoYXBlezEyfXsxMDAwfXtPVDF9Citcc2V0Zm9udFxzZWNpdFxpdGJzaGFwZXsxMH17XG1hZ3N0ZXAxfXtPVDFJVH0KK1xzZXRmb250XHNlY3NsXHNsYnNoYXBlezEwfXtcbWFnc3RlcDF9e09UMX0KK1xzZXRmb250XHNlY3R0XHR0YnNoYXBlezEyfXsxMDAwfXtPVDFUVH0KK1xzZXRmb250XHNlY3R0c2xcdHRzbHNoYXBlezEwfXtcbWFnc3RlcDF9e09UMVRUfQorXHNldGZvbnRcc2Vjc2Zcc2Zic2hhcGV7MTJ9ezEwMDB9e09UMX0KK1xsZXRcc2VjYmZcc2Vjcm0KK1xzZXRmb250XHNlY3NjXHNjYnNoYXBlezEwfXtcbWFnc3RlcDF9e09UMX0KK1xmb250XHNlY2k9Y21taTEyIAorXGZvbnRcc2Vjc3k9Y21zeTEwIHNjYWxlZCBcbWFnc3RlcDEKKworJSBTdWJzZWN0aW9uIGZvbnRzICgxMHB0KS4KK1xkZWZcc3NlY25vbWluYWxzaXplezEwcHR9Citcc2V0Zm9udFxzc2Vjcm1ccm1ic2hhcGV7MTB9ezEwMDB9e09UMX0KK1xzZXRmb250XHNzZWNpdFxpdGJzaGFwZXsxMH17MTAwMH17T1QxSVR9Citcc2V0Zm9udFxzc2Vjc2xcc2xic2hhcGV7MTB9ezEwMDB9e09UMX0KK1xzZXRmb250XHNzZWN0dFx0dGJzaGFwZXsxMH17MTAwMH17T1QxVFR9Citcc2V0Zm9udFxzc2VjdHRzbFx0dHNsc2hhcGV7MTB9ezEwMDB9e09UMVRUfQorXHNldGZvbnRcc3NlY3NmXHNmYnNoYXBlezEwfXsxMDAwfXtPVDF9CitcbGV0XHNzZWNiZlxzc2Vjcm0KK1xzZXRmb250XHNzZWNzY1xzY2JzaGFwZXsxMH17MTAwMH17T1QxfQorXGZvbnRcc3NlY2k9Y21taTEwCitcZm9udFxzc2Vjc3k9Y21zeTEwCisKKyUgUmVkdWNlZCBmb250cyBmb3IgQGFjcm8gaW4gdGV4dCAoOXB0KS4KK1xkZWZccmVkdWNlZG5vbWluYWxzaXplezlwdH0KK1xzZXRmb250XHJlZHVjZWRybVxybXNoYXBlezl9ezEwMDB9e09UMX0KK1xzZXRmb250XHJlZHVjZWR0dFx0dHNoYXBlezl9ezEwMDB9e09UMVRUfQorXHNldGZvbnRccmVkdWNlZGJmXGJmc2hhcGV7MTB9ezkwMH17T1QxfQorXHNldGZvbnRccmVkdWNlZGl0XGl0c2hhcGV7OX17MTAwMH17T1QxSVR9Citcc2V0Zm9udFxyZWR1Y2Vkc2xcc2xzaGFwZXs5fXsxMDAwfXtPVDF9Citcc2V0Zm9udFxyZWR1Y2Vkc2Zcc2ZzaGFwZXs5fXsxMDAwfXtPVDF9Citcc2V0Zm9udFxyZWR1Y2Vkc2Ncc2NzaGFwZXsxMH17OTAwfXtPVDF9Citcc2V0Zm9udFxyZWR1Y2VkdHRzbFx0dHNsc2hhcGV7MTB9ezkwMH17T1QxVFR9CitcZm9udFxyZWR1Y2VkaT1jbW1pOQorXGZvbnRccmVkdWNlZHN5PWNtc3k5CisKKyUgcmVkdWNlIHNwYWNlIGJldHdlZW4gcGFyYWdyYXBocworXGRpdmlkZVxwYXJza2lwIGJ5IDIKKworJSByZXNldCB0aGUgY3VycmVudCBmb250cworXHRleHRmb250cworXHJtCit9ICUgZW5kIG9mIDEwcHQgdGV4dCBmb250IHNpemUgZGVmaW5pdGlvbnMKKworCislIFdlIHByb3ZpZGUgdGhlIHVzZXItbGV2ZWwgY29tbWFuZAorJSAgIEBmb250dGV4dHNpemUgMTAKKyUgKG9yIDExKSB0byByZWRlZmluZSB0aGUgdGV4dCBmb250IHNpemUuICBwdCBpcyBhc3N1bWVkLgorJSAKK1xkZWZceHdvcmR7MTB9CitcZGVmXHhpd29yZHsxMX0KKyUKK1xwYXJzZWFyZ2RlZlxmb250dGV4dHNpemV7JQorICBcZGVmXHRleHRzaXplYXJneyMxfSUKKyAgXHdsb2d7ZG9pbmcgQGZvbnR0ZXh0c2l6ZSBcdGV4dHNpemVhcmd9JQorICAlCisgICUgU2V0IFxnbG9iYWxkZWZzIHNvIHRoYXQgZG9jdW1lbnRzIGNhbiB1c2UgdGhpcyBpbnNpZGUgQHRleCwgc2luY2UKKyAgJSBtYWtlaW5mbyA0LjggZG9lcyBub3Qgc3VwcG9ydCBpdCwgYnV0IHdlIG5lZWQgaXQgbm9uZXRoZWxlc3MuCisgICUgCisgXGJlZ2luZ3JvdXAgXGdsb2JhbGRlZnM9MQorICBcaWZ4XHRleHRzaXplYXJnXHh3b3JkIFxkZWZpbmV0ZXh0Zm9udHNpemV4CisgIFxlbHNlIFxpZnhcdGV4dHNpemVhcmdceGl3b3JkIFxkZWZpbmV0ZXh0Zm9udHNpemV4aQorICBcZWxzZQorICAgIFxlcnJoZWxwPVxFTXNpbXBsZQorICAgIFxlcnJtZXNzYWdle0Bmb250dGV4dHNpemUgb25seSBzdXBwb3J0cyBgMTAnIG9yIGAxMScsIG5vdCBgXHRleHRzaXplYXJnJ30KKyAgXGZpXGZpCisgXGVuZGdyb3VwCit9CisKKworJSBJbiBvcmRlciBmb3IgdGhlIGZvbnQgY2hhbmdlcyB0byBhZmZlY3QgbW9zdCBtYXRoIHN5bWJvbHMgYW5kIGxldHRlcnMsCislIHdlIGhhdmUgdG8gZGVmaW5lIHRoZSBcdGV4dGZvbnQgb2YgdGhlIHN0YW5kYXJkIGZhbWlsaWVzLiAgU2luY2UKKyUgdGV4aW5mbyBkb2Vzbid0IGFsbG93IGZvciBwcm9kdWNpbmcgc3Vic2NyaXB0cyBhbmQgc3VwZXJzY3JpcHRzIGV4Y2VwdAorJSBpbiB0aGUgbWFpbiB0ZXh0LCB3ZSBkb24ndCBib3RoZXIgdG8gcmVzZXQgXHNjcmlwdGZvbnQgYW5kCislIFxzY3JpcHRzY3JpcHRmb250ICh3aGljaCB3b3VsZCBhbHNvIHJlcXVpcmUgbG9hZGluZyBhIGxvdCBtb3JlIGZvbnRzKS4KKyUKK1xkZWZccmVzZXRtYXRoZm9udHN7JQorICBcdGV4dGZvbnQwPVx0ZW5ybSBcdGV4dGZvbnQxPVx0ZW5pIFx0ZXh0Zm9udDI9XHRlbnN5CisgIFx0ZXh0Zm9udFxpdGZhbT1cdGVuaXQgXHRleHRmb250XHNsZmFtPVx0ZW5zbCBcdGV4dGZvbnRcYmZmYW09XHRlbmJmCisgIFx0ZXh0Zm9udFx0dGZhbT1cdGVudHQgXHRleHRmb250XHNmZmFtPVx0ZW5zZgorfQorCislIFRoZSBmb250LWNoYW5naW5nIGNvbW1hbmRzIHJlZGVmaW5lIHRoZSBtZWFuaW5ncyBvZiBcdGVuU1RZTEUsIGluc3RlYWQKKyUgb2YganVzdCBcU1RZTEUuICBXZSBkbyB0aGlzIGJlY2F1c2UgXFNUWUxFIG5lZWRzIHRvIGFsc28gc2V0IHRoZQorJSBjdXJyZW50IFxmYW0gZm9yIG1hdGggbW9kZS4gIE91ciBcU1RZTEUgKGUuZy4sIFxybSkgY29tbWFuZHMgaGFyZHdpcmUKKyUgXHRlblNUWUxFIHRvIHNldCB0aGUgY3VycmVudCBmb250LgorJQorJSBFYWNoIGZvbnQtY2hhbmdpbmcgY29tbWFuZCBhbHNvIHNldHMgdGhlIG5hbWVzIFxsc2l6ZSAob25lIHNpemUgbG93ZXIpCislIGFuZCBcbGxsc2l6ZSAodGhyZWUgc2l6ZXMgbG93ZXIpLiAgVGhlc2UgcmVsYXRpdmUgY29tbWFuZHMgYXJlIHVzZWQgaW4KKyUgdGhlIExhVGVYIGxvZ28gYW5kIGFjcm9ueW1zLgorJQorJSBUaGlzIGFsbCBuZWVkcyBnZW5lcmFsaXppbmcsIGJhZGx5LgorJQorXGRlZlx0ZXh0Zm9udHN7JQorICBcbGV0XHRlbnJtPVx0ZXh0cm0gXGxldFx0ZW5pdD1cdGV4dGl0IFxsZXRcdGVuc2w9XHRleHRzbAorICBcbGV0XHRlbmJmPVx0ZXh0YmYgXGxldFx0ZW50dD1cdGV4dHR0IFxsZXRcc21hbGxjYXBzPVx0ZXh0c2MKKyAgXGxldFx0ZW5zZj1cdGV4dHNmIFxsZXRcdGVuaT1cdGV4dGkgXGxldFx0ZW5zeT1cdGV4dHN5CisgIFxsZXRcdGVudHRzbD1cdGV4dHR0c2wKKyAgXGRlZlxjdXJmb250c2l6ZXt0ZXh0fSUKKyAgXGRlZlxsc2l6ZXtyZWR1Y2VkfVxkZWZcbGxsc2l6ZXtzbWFsbGVyfSUKKyAgXHJlc2V0bWF0aGZvbnRzIFxzZXRsZWFkaW5ne1x0ZXh0bGVhZGluZ319CitcZGVmXHRpdGxlZm9udHN7JQorICBcbGV0XHRlbnJtPVx0aXRsZXJtIFxsZXRcdGVuaXQ9XHRpdGxlaXQgXGxldFx0ZW5zbD1cdGl0bGVzbAorICBcbGV0XHRlbmJmPVx0aXRsZWJmIFxsZXRcdGVudHQ9XHRpdGxldHQgXGxldFxzbWFsbGNhcHM9XHRpdGxlc2MKKyAgXGxldFx0ZW5zZj1cdGl0bGVzZiBcbGV0XHRlbmk9XHRpdGxlaSBcbGV0XHRlbnN5PVx0aXRsZXN5CisgIFxsZXRcdGVudHRzbD1cdGl0bGV0dHNsCisgIFxkZWZcY3VyZm9udHNpemV7dGl0bGV9JQorICBcZGVmXGxzaXple2NoYXB9XGRlZlxsbGxzaXple3N1YnNlY30lCisgIFxyZXNldG1hdGhmb250cyBcc2V0bGVhZGluZ3syNXB0fX0KK1xkZWZcdGl0bGVmb250IzF7e1x0aXRsZWZvbnRzXHJtICMxfX0KK1xkZWZcY2hhcGZvbnRzeyUKKyAgXGxldFx0ZW5ybT1cY2hhcHJtIFxsZXRcdGVuaXQ9XGNoYXBpdCBcbGV0XHRlbnNsPVxjaGFwc2wKKyAgXGxldFx0ZW5iZj1cY2hhcGJmIFxsZXRcdGVudHQ9XGNoYXB0dCBcbGV0XHNtYWxsY2Fwcz1cY2hhcHNjCisgIFxsZXRcdGVuc2Y9XGNoYXBzZiBcbGV0XHRlbmk9XGNoYXBpIFxsZXRcdGVuc3k9XGNoYXBzeQorICBcbGV0XHRlbnR0c2w9XGNoYXB0dHNsCisgIFxkZWZcY3VyZm9udHNpemV7Y2hhcH0lCisgIFxkZWZcbHNpemV7c2VjfVxkZWZcbGxsc2l6ZXt0ZXh0fSUKKyAgXHJlc2V0bWF0aGZvbnRzIFxzZXRsZWFkaW5nezE5cHR9fQorXGRlZlxzZWNmb250c3slCisgIFxsZXRcdGVucm09XHNlY3JtIFxsZXRcdGVuaXQ9XHNlY2l0IFxsZXRcdGVuc2w9XHNlY3NsCisgIFxsZXRcdGVuYmY9XHNlY2JmIFxsZXRcdGVudHQ9XHNlY3R0IFxsZXRcc21hbGxjYXBzPVxzZWNzYworICBcbGV0XHRlbnNmPVxzZWNzZiBcbGV0XHRlbmk9XHNlY2kgXGxldFx0ZW5zeT1cc2Vjc3kKKyAgXGxldFx0ZW50dHNsPVxzZWN0dHNsCisgIFxkZWZcY3VyZm9udHNpemV7c2VjfSUKKyAgXGRlZlxsc2l6ZXtzdWJzZWN9XGRlZlxsbGxzaXple3JlZHVjZWR9JQorICBccmVzZXRtYXRoZm9udHMgXHNldGxlYWRpbmd7MTZwdH19CitcZGVmXHN1YnNlY2ZvbnRzeyUKKyAgXGxldFx0ZW5ybT1cc3NlY3JtIFxsZXRcdGVuaXQ9XHNzZWNpdCBcbGV0XHRlbnNsPVxzc2Vjc2wKKyAgXGxldFx0ZW5iZj1cc3NlY2JmIFxsZXRcdGVudHQ9XHNzZWN0dCBcbGV0XHNtYWxsY2Fwcz1cc3NlY3NjCisgIFxsZXRcdGVuc2Y9XHNzZWNzZiBcbGV0XHRlbmk9XHNzZWNpIFxsZXRcdGVuc3k9XHNzZWNzeQorICBcbGV0XHRlbnR0c2w9XHNzZWN0dHNsCisgIFxkZWZcY3VyZm9udHNpemV7c3NlY30lCisgIFxkZWZcbHNpemV7dGV4dH1cZGVmXGxsbHNpemV7c21hbGx9JQorICBccmVzZXRtYXRoZm9udHMgXHNldGxlYWRpbmd7MTVwdH19CitcbGV0XHN1YnN1YnNlY2ZvbnRzID0gXHN1YnNlY2ZvbnRzCitcZGVmXHJlZHVjZWRmb250c3slCisgIFxsZXRcdGVucm09XHJlZHVjZWRybSBcbGV0XHRlbml0PVxyZWR1Y2VkaXQgXGxldFx0ZW5zbD1ccmVkdWNlZHNsCisgIFxsZXRcdGVuYmY9XHJlZHVjZWRiZiBcbGV0XHRlbnR0PVxyZWR1Y2VkdHQgXGxldFxyZWR1Y2VkY2Fwcz1ccmVkdWNlZHNjCisgIFxsZXRcdGVuc2Y9XHJlZHVjZWRzZiBcbGV0XHRlbmk9XHJlZHVjZWRpIFxsZXRcdGVuc3k9XHJlZHVjZWRzeQorICBcbGV0XHRlbnR0c2w9XHJlZHVjZWR0dHNsCisgIFxkZWZcY3VyZm9udHNpemV7cmVkdWNlZH0lCisgIFxkZWZcbHNpemV7c21hbGx9XGRlZlxsbGxzaXple3NtYWxsZXJ9JQorICBccmVzZXRtYXRoZm9udHMgXHNldGxlYWRpbmd7MTAuNXB0fX0KK1xkZWZcc21hbGxmb250c3slCisgIFxsZXRcdGVucm09XHNtYWxscm0gXGxldFx0ZW5pdD1cc21hbGxpdCBcbGV0XHRlbnNsPVxzbWFsbHNsCisgIFxsZXRcdGVuYmY9XHNtYWxsYmYgXGxldFx0ZW50dD1cc21hbGx0dCBcbGV0XHNtYWxsY2Fwcz1cc21hbGxzYworICBcbGV0XHRlbnNmPVxzbWFsbHNmIFxsZXRcdGVuaT1cc21hbGxpIFxsZXRcdGVuc3k9XHNtYWxsc3kKKyAgXGxldFx0ZW50dHNsPVxzbWFsbHR0c2wKKyAgXGRlZlxjdXJmb250c2l6ZXtzbWFsbH0lCisgIFxkZWZcbHNpemV7c21hbGxlcn1cZGVmXGxsbHNpemV7c21hbGxlcn0lCisgIFxyZXNldG1hdGhmb250cyBcc2V0bGVhZGluZ3sxMC41cHR9fQorXGRlZlxzbWFsbGVyZm9udHN7JQorICBcbGV0XHRlbnJtPVxzbWFsbGVycm0gXGxldFx0ZW5pdD1cc21hbGxlcml0IFxsZXRcdGVuc2w9XHNtYWxsZXJzbAorICBcbGV0XHRlbmJmPVxzbWFsbGVyYmYgXGxldFx0ZW50dD1cc21hbGxlcnR0IFxsZXRcc21hbGxjYXBzPVxzbWFsbGVyc2MKKyAgXGxldFx0ZW5zZj1cc21hbGxlcnNmIFxsZXRcdGVuaT1cc21hbGxlcmkgXGxldFx0ZW5zeT1cc21hbGxlcnN5CisgIFxsZXRcdGVudHRzbD1cc21hbGxlcnR0c2wKKyAgXGRlZlxjdXJmb250c2l6ZXtzbWFsbGVyfSUKKyAgXGRlZlxsc2l6ZXtzbWFsbGVyfVxkZWZcbGxsc2l6ZXtzbWFsbGVyfSUKKyAgXHJlc2V0bWF0aGZvbnRzIFxzZXRsZWFkaW5nezkuNXB0fX0KKworJSBTZXQgdGhlIGZvbnRzIHRvIHVzZSB3aXRoIHRoZSBAc21hbGwuLi4gZW52aXJvbm1lbnRzLgorXGxldFxzbWFsbGV4YW1wbGVmb250cyA9IFxzbWFsbGZvbnRzCisKKyUgQWJvdXQgXHNtYWxsZXhhbXBsZWZvbnRzLiAgSWYgd2UgdXNlIFxzbWFsbGZvbnRzICg5cHQpLCBAc21hbGxleGFtcGxlCislIGNhbiBmaXQgdGhpcyBtYW55IGNoYXJhY3RlcnM6CislICAgOC41eDExPTg2ICAgc21hbGxib29rPTcyICBhND05MCAgYTU9NjkKKyUgSWYgd2UgdXNlIFxzY3JpcHRmb250cyAoOHB0KSwgdGhlbiB3ZSBjYW4gZml0IHRoaXMgbWFueSBjaGFyYWN0ZXJzOgorJSAgIDguNXgxMT05MCsgIHNtYWxsYm9vaz04MCAgYTQ9OTArICBhNT03NworJSBGb3IgbWUsIHN1YmplY3RpdmVseSwgdGhlIGZldyBleHRyYSBjaGFyYWN0ZXJzIHRoYXQgZml0IGFyZW4ndCB3b3J0aAorJSB0aGUgYWRkaXRpb25hbCBzbWFsbG5lc3Mgb2YgOHB0LiAgU28gSSdtIG1ha2luZyB0aGUgZGVmYXVsdCA5cHQuCislCislIEJ5IHRoZSB3YXksIGZvciBjb21wYXJpc29uLCBoZXJlJ3Mgd2hhdCBmaXRzIHdpdGggQGV4YW1wbGUgKDEwcHQpOgorJSAgIDguNXgxMT03MSAgc21hbGxib29rPTYwICBhND03NSAgYTU9NTgKKyUKKyUgSSB3aXNoIHRoZSBVU0EgdXNlZCBBNCBwYXBlci4KKyUgLS1rYXJsLCAyNGphbjAzLgorCisKKyUgU2V0IHVwIHRoZSBkZWZhdWx0IGZvbnRzLCBzbyB3ZSBjYW4gdXNlIHRoZW0gZm9yIGNyZWF0aW5nIGJveGVzLgorJQorXGRlZmluZXRleHRmb250c2l6ZXhpCisKKyUgRGVmaW5lIHRoZXNlIHNvIHRoZXkgY2FuIGJlIGVhc2lseSBjaGFuZ2VkIGZvciBvdGhlciBmb250cy4KK1xkZWZcYW5nbGVsZWZ0eyRcbGFuZ2xlJH0KK1xkZWZcYW5nbGVyaWdodHskXHJhbmdsZSR9CisKKyUgQ291bnQgZGVwdGggaW4gZm9udC1jaGFuZ2VzLCBmb3IgZXJyb3IgY2hlY2tzCitcbmV3Y291bnRcZm9udGRlcHRoIFxmb250ZGVwdGg9MAorCislIEZvbnRzIGZvciBzaG9ydCB0YWJsZSBvZiBjb250ZW50cy4KK1xzZXRmb250XHNob3J0Y29udHJtXHJtc2hhcGV7MTJ9ezEwMDB9e09UMX0KK1xzZXRmb250XHNob3J0Y29udGJmXGJmc2hhcGV7MTB9e1xtYWdzdGVwMX17T1QxfSAgJSBubyBjbWIxMgorXHNldGZvbnRcc2hvcnRjb250c2xcc2xzaGFwZXsxMn17MTAwMH17T1QxfQorXHNldGZvbnRcc2hvcnRjb250dHRcdHRzaGFwZXsxMn17MTAwMH17T1QxVFR9CisKKyUlIEFkZCBzY3JpYmUtbGlrZSBmb250IGVudmlyb25tZW50cywgcGx1cyBAbCBmb3IgaW5saW5lIGxpc3AgKHVzdWFsbHkgc2FucworJSUgc2VyaWYpIGFuZCBAaWkgZm9yIFRlWCBpdGFsaWMKKworJSBcc21hcnRpdGFsaWN7QVJHfSBvdXRwdXRzIGFyZyBpbiBpdGFsaWNzLCBmb2xsb3dlZCBieSBhbiBpdGFsaWMgY29ycmVjdGlvbgorJSB1bmxlc3MgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXIgaXMgc3VjaCBhcyBub3QgdG8gbmVlZCBvbmUuCitcZGVmXHNtYXJ0aXRhbGljeHtcaWZ4XG5leHQsXGVsc2VcaWZ4XG5leHQtXGVsc2VcaWZ4XG5leHQuXGVsc2UKKyAgICAgICAgICAgICAgICAgICAgXHB0ZXhzbGFzaFxmaVxmaVxmaX0KK1xkZWZcc21hcnRzbGFudGVkIzF7e1xpZnVzaW5ndHRcdHRzbFxzbCAjMX1cZnV0dXJlbGV0XG5leHRcc21hcnRpdGFsaWN4fQorXGRlZlxzbWFydGl0YWxpYyMxe3tcaWZ1c2luZ3R0XHR0c2xcaXQgIzF9XGZ1dHVyZWxldFxuZXh0XHNtYXJ0aXRhbGljeH0KKworJSBsaWtlIFxzbWFydHNsYW50ZWQgZXhjZXB0IHVuY29uZGl0aW9uYWxseSB1c2VzIFx0dHNsLgorJSBAdmFyIGlzIHNldCB0byB0aGlzIGZvciBkZWZ1biBhcmd1bWVudHMuCitcZGVmXHR0c2xhbnRlZCMxe3tcdHRzbCAjMX1cZnV0dXJlbGV0XG5leHRcc21hcnRpdGFsaWN4fQorCislIGxpa2UgXHNtYXJ0c2xhbnRlZCBleGNlcHQgdW5jb25kaXRpb25hbGx5IHVzZSBcc2wuICBXZSBuZXZlciB3YW50CislIHR0c2wgZm9yIGJvb2sgdGl0bGVzLCBkbyB3ZT8KK1xkZWZcY2l0ZSMxe3tcc2wgIzF9XGZ1dHVyZWxldFxuZXh0XHNtYXJ0aXRhbGljeH0KKworXGxldFxpPVxzbWFydGl0YWxpYworXGxldFxzbGFudGVkPVxzbWFydHNsYW50ZWQKK1xsZXRcdmFyPVxzbWFydHNsYW50ZWQKK1xsZXRcZGZuPVxzbWFydHNsYW50ZWQKK1xsZXRcZW1waD1cc21hcnRpdGFsaWMKKworJSBAYiwgZXhwbGljaXQgYm9sZC4KK1xkZWZcYiMxe3tcYmYgIzF9fQorXGxldFxzdHJvbmc9XGIKKworJSBAc2Fuc3NlcmlmLCBleHBsaWNpdCBzYW5zLgorXGRlZlxzYW5zc2VyaWYjMXt7XHNmICMxfX0KKworJSBXZSBjYW4ndCBqdXN0IHVzZSBcZXhoeXBoZW5wZW5hbHR5LCBiZWNhdXNlIHRoYXQgb25seSBoYXMgZWZmZWN0IGF0CislIHRoZSBlbmQgb2YgYSBwYXJhZ3JhcGguICBSZXN0b3JlIG5vcm1hbCBoeXBoZW5hdGlvbiBhdCB0aGUgZW5kIG9mIHRoZQorJSBncm91cCB3aXRoaW4gd2hpY2ggXG5vaHlwaGVuYXRpb24gaXMgcHJlc3VtYWJseSBjYWxsZWQuCislCitcZGVmXG5vaHlwaGVuYXRpb257XGh5cGhlbmNoYXJcZm9udCA9IC0xICBcYWZ0ZXJncm91cFxyZXN0b3JlaHlwaGVuYXRpb259CitcZGVmXHJlc3RvcmVoeXBoZW5hdGlvbntcaHlwaGVuY2hhclxmb250ID0gYC0gfQorCislIFNldCBzZmNvZGUgdG8gbm9ybWFsIGZvciB0aGUgY2hhcnMgdGhhdCB1c3VhbGx5IGhhdmUgYW5vdGhlciB2YWx1ZS4KKyUgQ2FuJ3QgdXNlIHBsYWluJ3MgXGZyZW5jaHNwYWNpbmcgYmVjYXVzZSBpdCB1c2VzIHRoZSBgXHggbm90YXRpb24sIGFuZAorJSBzb21ldGltZXMgXHggaGFzIGFuIGFjdGl2ZSBkZWZpbml0aW9uIHRoYXQgbWVzc2VzIHRoaW5ncyB1cC4KKyUKK1xjYXRjb2RlYEA9MTEKKyAgXGRlZlxwbGFpbmZyZW5jaHNwYWNpbmd7JQorICAgIFxzZmNvZGVcZG90Q2hhciAgPVxAbSBcc2Zjb2RlXHF1ZXN0Q2hhcj1cQG0gXHNmY29kZVxleGNsYW1DaGFyPVxAbQorICAgIFxzZmNvZGVcY29sb25DaGFyPVxAbSBcc2Zjb2RlXHNlbWlDaGFyID1cQG0gXHNmY29kZVxjb21tYUNoYXIgPVxAbQorICAgIFxkZWZcZW5kb2ZzZW50ZW5jZXNwYWNlZmFjdG9yezEwMDB9JSBmb3IgQC4gYW5kIGZyaWVuZHMKKyAgfQorICBcZGVmXHBsYWlubm9uZnJlbmNoc3BhY2luZ3slCisgICAgXHNmY29kZWBcLjMwMDBcc2Zjb2RlYFw/MzAwMFxzZmNvZGVgXCEzMDAwCisgICAgXHNmY29kZWBcOjIwMDBcc2Zjb2RlYFw7MTUwMFxzZmNvZGVgXCwxMjUwCisgICAgXGRlZlxlbmRvZnNlbnRlbmNlc3BhY2VmYWN0b3J7MzAwMH0lIGZvciBALiBhbmQgZnJpZW5kcworICB9CitcY2F0Y29kZWBAPVxvdGhlcgorXGRlZlxlbmRvZnNlbnRlbmNlc3BhY2VmYWN0b3J7MzAwMH0lIGRlZmF1bHQKKworXGRlZlx0IzF7JQorICB7XHR0IFxyYXdiYWNrc2xhc2ggXHBsYWluZnJlbmNoc3BhY2luZyAjMX0lCisgIFxudWxsCit9CitcZGVmXHNhbXAjMXtgXHRjbG9zZXsjMX0nXG51bGx9Citcc2V0Zm9udFxrZXlybVxybXNoYXBlezh9ezEwMDB9e09UMX0KK1xmb250XGtleXN5PWNtc3k5CitcZGVmXGtleSMxe3tca2V5cm1cdGV4dGZvbnQyPVxrZXlzeSBcbGVhdmV2bW9kZVxoYm94eyUKKyAgXHJhaXNlMC40cHRcaGJveHtcYW5nbGVsZWZ0fVxrZXJuLS4wOGVtXHZ0b3B7JQorICAgIFx2Ym94e1xocnVsZVxrZXJuLTAuNHB0CisgICAgIFxoYm94e1xyYWlzZTAuNHB0XGhib3h7XHZwaGFudG9te1xhbmdsZWxlZnR9fSMxfX0lCisgICAgXGtlcm4tMC40cHRcaHJ1bGV9JQorICBca2Vybi0uMDZlbVxyYWlzZTAuNHB0XGhib3h7XGFuZ2xlcmlnaHR9fX19CitcZGVmXGtleSAjMXt7XG5vaHlwaGVuYXRpb24gXHVwcGVyY2FzZXsjMX19XG51bGx9CislIFRoZSBvbGQgZGVmaW5pdGlvbiwgd2l0aCBubyBsb3plbmdlOgorJVxkZWZca2V5ICMxe3tcdHRzbCBcbm9oeXBoZW5hdGlvbiBcdXBwZXJjYXNleyMxfX1cbnVsbH0KK1xkZWZcY3RybCAjMXt7XHR0IFxyYXdiYWNrc2xhc2ggXGhhdH0jMX0KKworJSBAZmlsZSwgQG9wdGlvbiBhcmUgdGhlIHNhbWUgYXMgQHNhbXAuCitcbGV0XGZpbGU9XHNhbXAKK1xsZXRcb3B0aW9uPVxzYW1wCisKKyUgQGNvZGUgaXMgYSBtb2RpZmljYXRpb24gb2YgQHQsCislIHdoaWNoIG1ha2VzIHNwYWNlcyB0aGUgc2FtZSBzaXplIGFzIG5vcm1hbCBpbiB0aGUgc3Vycm91bmRpbmcgdGV4dC4KK1xkZWZcdGNsb3NlIzF7JQorICB7JQorICAgICUgQ2hhbmdlIG5vcm1hbCBpbnRlcndvcmQgc3BhY2UgdG8gYmUgc2FtZSBhcyBmb3IgdGhlIGN1cnJlbnQgZm9udC4KKyAgICBcc3BhY2Vza2lwID0gXGZvbnRkaW1lbjJcZm9udAorICAgICUKKyAgICAlIFN3aXRjaCB0byB0eXBld3JpdGVyLgorICAgIFx0dAorICAgICUKKyAgICAlIEJ1dCBgXCAnIHByb2R1Y2VzIHRoZSBsYXJnZSB0eXBld3JpdGVyIGludGVyd29yZCBzcGFjZS4KKyAgICBcZGVmXCB7e1xzcGFjZXNraXAgPSAwcHR7fSB9fSUKKyAgICAlCisgICAgJSBUdXJuIG9mZiBoeXBoZW5hdGlvbi4KKyAgICBcbm9oeXBoZW5hdGlvbgorICAgICUKKyAgICBccmF3YmFja3NsYXNoCisgICAgXHBsYWluZnJlbmNoc3BhY2luZworICAgICMxJQorICB9JQorICBcbnVsbAorfQorCislIFdlICptdXN0KiB0dXJuIG9uIGh5cGhlbmF0aW9uIGF0IGAtJyBhbmQgYF8nIGluIEBjb2RlLgorJSBPdGhlcndpc2UsIGl0IGlzIHRvbyBoYXJkIHRvIGF2b2lkIG92ZXJmdWxsIGhib3hlcworJSBpbiB0aGUgRW1hY3MgbWFudWFsLCB0aGUgTGlicmFyeSBtYW51YWwsIGV0Yy4KKworJSBVbmZvcnR1bmF0ZWx5LCBUZVggdXNlcyBvbmUgcGFyYW1ldGVyIChcaHlwaGVuY2hhcikgdG8gY29udHJvbAorJSBib3RoIGh5cGhlbmF0aW9uIGF0IC0gYW5kIGh5cGhlbmF0aW9uIHdpdGhpbiB3b3Jkcy4KKyUgV2UgbXVzdCB0aGVyZWZvcmUgdHVybiB0aGVtIGJvdGggb2ZmIChcdGNsb3NlIGRvZXMgdGhhdCkKKyUgYW5kIGFycmFuZ2UgZXhwbGljaXRseSB0byBoeXBoZW5hdGUgYXQgYSBkYXNoLgorJSAgLS0gcm1zLgoreworICBcY2F0Y29kZWBcLT1cYWN0aXZlIFxjYXRjb2RlYFxfPVxhY3RpdmUKKyAgXGNhdGNvZGVgXCc9XGFjdGl2ZSBcY2F0Y29kZWBcYD1cYWN0aXZlCisgICUKKyAgXGdsb2JhbFxkZWZcY29kZXtcYmVnaW5ncm91cAorICAgIFxjYXRjb2RlXHJxdW90ZUNoYXI9XGFjdGl2ZSBcY2F0Y29kZVxscXVvdGVDaGFyPVxhY3RpdmUKKyAgICBcbGV0J1xjb2RlcXVvdGVyaWdodCBcbGV0YFxjb2RlcXVvdGVsZWZ0CisgICAgJQorICAgIFxjYXRjb2RlXGRhc2hDaGFyPVxhY3RpdmUgIFxjYXRjb2RlXHVuZGVyQ2hhcj1cYWN0aXZlCisgICAgXGlmYWxsb3djb2RlYnJlYWtzCisgICAgIFxsZXQtXGNvZGVkYXNoCisgICAgIFxsZXRfXGNvZGV1bmRlcgorICAgIFxlbHNlCisgICAgIFxsZXQtXHJlYWxkYXNoCisgICAgIFxsZXRfXHJlYWx1bmRlcgorICAgIFxmaQorICAgIFxjb2RleAorICB9Cit9CisKK1xkZWZccmVhbGRhc2h7LX0KK1xkZWZcY29kZWRhc2h7LVxkaXNjcmV0aW9uYXJ5e317fXt9fQorXGRlZlxjb2RldW5kZXJ7JQorICAlIHRoaXMgaXMgYWxsIHNvIEBtYXRoe0Bjb2Rle3Zhcl9uYW1lfSsxfSBjYW4gd29yay4gIEluIG1hdGggbW9kZSwgXworICAlIGlzICJhY3RpdmUiIChtYXRoY29kZSI4MDAwKSBhbmQgXG5vcm1hbHVuZGVyc2NvcmUgKG9yIFxjaGFyOTUsIGV0Yy4pCisgICUgd2lsbCB0aGVyZWZvcmUgZXhwYW5kIHRoZSBhY3RpdmUgZGVmaW5pdGlvbiBvZiBfLCB3aGljaCBpcyB1cworICAlIChpbnNpZGUgQGNvZGUgdGhhdCBpcyksIHRoZXJlZm9yZSBhbiBlbmRsZXNzIGxvb3AuCisgIFxpZnVzaW5ndHR7XGlmbW1vZGUKKyAgICAgICAgICAgICAgIFxtYXRoY2hhciIwNzVGICUgY2xhc3MgMD1vcmRpbmFyeSwgZmFtaWx5IDc9dHRmYW0sIHBvcyAweDVGPV8uCisgICAgICAgICAgICAgXGVsc2Vcbm9ybWFsdW5kZXJzY29yZSBcZmkKKyAgICAgICAgICAgICBcZGlzY3JldGlvbmFyeXt9e317fX0lCisgICAgICAgICAgICB7XF99JQorfQorXGRlZlxjb2RleCAjMXtcdGNsb3NleyMxfVxlbmRncm91cH0KKworJSBBbiBhZGRpdGlvbmFsIGNvbXBsaWNhdGlvbjogdGhlIGFib3ZlIHdpbGwgYWxsb3cgYnJlYWtzIGFmdGVyLCBlLmcuLAorJSBlYWNoIG9mIHRoZSBmb3VyIHVuZGVyc2NvcmVzIGluIF9fdHlwZW9mX18uICBUaGlzIGlzIHVuZGVzaXJhYmxlIGluCislIHNvbWUgbWFudWFscywgZXNwZWNpYWxseSBpZiB0aGV5IGRvbid0IGhhdmUgbG9uZyBpZGVudGlmaWVycyBpbgorJSBnZW5lcmFsLiAgQGFsbG93Y29kZWJyZWFrcyBwcm92aWRlcyBhIHdheSB0byBjb250cm9sIHRoaXMuCislIAorXG5ld2lmXGlmYWxsb3djb2RlYnJlYWtzICBcYWxsb3djb2RlYnJlYWtzdHJ1ZQorCitcZGVmXGtleXdvcmR0cnVle3RydWV9CitcZGVmXGtleXdvcmRmYWxzZXtmYWxzZX0KKworXHBhcnNlYXJnZGVmXGFsbG93Y29kZWJyZWFrc3slCisgIFxkZWZcdHhpYXJneyMxfSUKKyAgXGlmeFx0eGlhcmdca2V5d29yZHRydWUKKyAgICBcYWxsb3djb2RlYnJlYWtzdHJ1ZQorICBcZWxzZVxpZnhcdHhpYXJnXGtleXdvcmRmYWxzZQorICAgIFxhbGxvd2NvZGVicmVha3NmYWxzZQorICBcZWxzZQorICAgIFxlcnJoZWxwID0gXEVNc2ltcGxlCisgICAgXGVycm1lc3NhZ2V7VW5rbm93biBAYWxsb3djb2RlYnJlYWtzIG9wdGlvbiBgXHR4aWFyZyd9JQorICBcZmlcZmkKK30KKworJSBAa2JkIGlzIGxpa2UgQGNvZGUsIGV4Y2VwdCB0aGF0IGlmIHRoZSBhcmd1bWVudCBpcyBqdXN0IG9uZSBAa2V5IGNvbW1hbmQsCislIHRoZW4gQGtiZCBoYXMgbm8gZWZmZWN0LgorCislIEBrYmRpbnB1dHN0eWxlIC0tIGFyZyBpcyBgZGlzdGluY3QnIChAa2JkIHVzZXMgc2xhbnRlZCB0dHkgZm9udCBhbHdheXMpLAorJSAgIGBleGFtcGxlJyAoQGtiZCB1c2VzIHR0c2wgb25seSBpbnNpZGUgb2YgQGV4YW1wbGUgYW5kIGZyaWVuZHMpLAorJSAgIG9yIGBjb2RlJyAoQGtiZCB1c2VzIG5vcm1hbCB0dHkgZm9udCBhbHdheXMpLgorXHBhcnNlYXJnZGVmXGtiZGlucHV0c3R5bGV7JQorICBcZGVmXHR4aWFyZ3sjMX0lCisgIFxpZnhcdHhpYXJnXHdvcmRkaXN0aW5jdAorICAgIFxnZGVmXGtiZGV4YW1wbGVmb250e1x0dHNsfVxnZGVmXGtiZGZvbnR7XHR0c2x9JQorICBcZWxzZVxpZnhcdHhpYXJnXHdvcmRleGFtcGxlCisgICAgXGdkZWZca2JkZXhhbXBsZWZvbnR7XHR0c2x9XGdkZWZca2JkZm9udHtcdHR9JQorICBcZWxzZVxpZnhcdHhpYXJnXHdvcmRjb2RlCisgICAgXGdkZWZca2JkZXhhbXBsZWZvbnR7XHR0fVxnZGVmXGtiZGZvbnR7XHR0fSUKKyAgXGVsc2UKKyAgICBcZXJyaGVscCA9IFxFTXNpbXBsZQorICAgIFxlcnJtZXNzYWdle1Vua25vd24gQGtiZGlucHV0c3R5bGUgb3B0aW9uIGBcdHhpYXJnJ30lCisgIFxmaVxmaVxmaQorfQorXGRlZlx3b3JkZGlzdGluY3R7ZGlzdGluY3R9CitcZGVmXHdvcmRleGFtcGxle2V4YW1wbGV9CitcZGVmXHdvcmRjb2Rle2NvZGV9CisKKyUgRGVmYXVsdCBpcyBgZGlzdGluY3QuJworXGtiZGlucHV0c3R5bGUgZGlzdGluY3QKKworXGRlZlx4a2V5e1xrZXl9CitcZGVmXGtiZGZvbyMxIzIjM1xwYXJ7XGRlZlxvbmV7IzF9XGRlZlx0aHJlZXsjM31cZGVmXHRocmVleHs/P30lCitcaWZ4XG9uZVx4a2V5XGlmeFx0aHJlZXhcdGhyZWUgXGtleXsjMn0lCitcZWxzZXtcdGNsb3Nle1xrYmRmb250XGxvb2t9fVxmaQorXGVsc2V7XHRjbG9zZXtca2JkZm9udFxsb29rfX1cZml9CisKKyUgRm9yIEBpbmRpY2F0ZXVybCwgQGVudiwgQGNvbW1hbmQgcXVvdGVzIHNlZW0gdW5uZWNlc3NhcnksIHNvIHVzZSBcY29kZS4KK1xsZXRcaW5kaWNhdGV1cmw9XGNvZGUKK1xsZXRcZW52PVxjb2RlCitcbGV0XGNvbW1hbmQ9XGNvZGUKKworJSBAdXJlZiAoYWJicmV2aWF0aW9uIGZvciBgdXJscmVmJykgdGFrZXMgYW4gb3B0aW9uYWwgKGNvbW1hLXNlcGFyYXRlZCkKKyUgc2Vjb25kIGFyZ3VtZW50IHNwZWNpZnlpbmcgdGhlIHRleHQgdG8gZGlzcGxheSBhbmQgYW4gb3B0aW9uYWwgdGhpcmQKKyUgYXJnIGFzIHRleHQgdG8gZGlzcGxheSBpbnN0ZWFkIG9mIChyYXRoZXIgdGhhbiBpbiBhZGRpdGlvbiB0bykgdGhlIHVybAorJSBpdHNlbGYuICBGaXJzdCAobWFuZGF0b3J5KSBhcmcgaXMgdGhlIHVybC4gIFBlcmhhcHMgZXZlbnR1YWxseSBwdXQgaW4KKyUgYSBoeXBlcnRleCBcc3BlY2lhbCBoZXJlLgorJQorXGRlZlx1cmVmIzF7XGRvdXJlZiAjMSwsLFxmaW5pc2h9CitcZGVmXGRvdXJlZiMxLCMyLCMzLCM0XGZpbmlzaHtcYmVnaW5ncm91cAorICBcdW5zZXBzcGFjZXMKKyAgXHBkZnVybHsjMX0lCisgIFxzZXRib3gwID0gXGhib3h7XGlnbm9yZXNwYWNlcyAjM30lCisgIFxpZmRpbVx3ZDAgPiAwcHQKKyAgICBcdW5oYm94MCAlIHRoaXJkIGFyZyBnaXZlbiwgc2hvdyBvbmx5IHRoYXQKKyAgXGVsc2UKKyAgICBcc2V0Ym94MCA9IFxoYm94e1xpZ25vcmVzcGFjZXMgIzJ9JQorICAgIFxpZmRpbVx3ZDAgPiAwcHQKKyAgICAgIFxpZnBkZgorICAgICAgICBcdW5oYm94MCAgICAgICAgICAgICAlIFBERjogMm5kIGFyZyBnaXZlbiwgc2hvdyBvbmx5IGl0CisgICAgICBcZWxzZQorICAgICAgICBcdW5oYm94MFwgKFxjb2RleyMxfSklIERWSTogMm5kIGFyZyBnaXZlbiwgc2hvdyBib3RoIGl0IGFuZCB1cmwKKyAgICAgIFxmaQorICAgIFxlbHNlCisgICAgICBcY29kZXsjMX0lIG9ubHkgdXJsIGdpdmVuLCBzbyBzaG93IGl0CisgICAgXGZpCisgIFxmaQorICBcZW5kbGluaworXGVuZGdyb3VwfQorCislIEB1cmwgc3lub255bSBmb3IgQHVyZWYsIHNpbmNlIHRoYXQncyBob3cgZXZlcnlvbmUgdXNlcyBpdC4KKyUKK1xsZXRcdXJsPVx1cmVmCisKKyUgcm1zIGRvZXMgbm90IGxpa2UgYW5nbGUgYnJhY2tldHMgLS1rYXJsLCAxN21heTk3LgorJSBTbyBub3cgQGVtYWlsIGlzIGp1c3QgbGlrZSBAdXJlZiwgdW5sZXNzIHdlIGFyZSBwZGYuCislCislXGRlZlxlbWFpbCMxe1xhbmdsZWxlZnR7XHR0ICMxfVxhbmdsZXJpZ2h0fQorXGlmcGRmCisgIFxkZWZcZW1haWwjMXtcZG9lbWFpbCMxLCxcZmluaXNofQorICBcZGVmXGRvZW1haWwjMSwjMiwjM1xmaW5pc2h7XGJlZ2luZ3JvdXAKKyAgICBcdW5zZXBzcGFjZXMKKyAgICBccGRmdXJse21haWx0bzojMX0lCisgICAgXHNldGJveDAgPSBcaGJveHtcaWdub3Jlc3BhY2VzICMyfSUKKyAgICBcaWZkaW1cd2QwPjBwdFx1bmhib3gwXGVsc2VcY29kZXsjMX1cZmkKKyAgICBcZW5kbGluaworICBcZW5kZ3JvdXB9CitcZWxzZQorICBcbGV0XGVtYWlsPVx1cmVmCitcZmkKKworJSBDaGVjayBpZiB3ZSBhcmUgY3VycmVudGx5IHVzaW5nIGEgdHlwZXdyaXRlciBmb250LiAgU2luY2UgYWxsIHRoZQorJSBDb21wdXRlciBNb2Rlcm4gdHlwZXdyaXRlciBmb250cyBoYXZlIHplcm8gaW50ZXJ3b3JkIHN0cmV0Y2ggKGFuZAorJSBzaHJpbmspLCBhbmQgaXQgaXMgcmVhc29uYWJsZSB0byBleHBlY3QgYWxsIHR5cGV3cml0ZXIgZm9udHMgdG8gaGF2ZQorJSB0aGlzIHByb3BlcnR5LCB3ZSBjYW4gY2hlY2sgdGhhdCBmb250IHBhcmFtZXRlci4KKyUKK1xkZWZcaWZtb25vc3BhY2V7XGlmZGltXGZvbnRkaW1lbjNcZm9udD0wcHQgfQorCislIFR5cGVzZXQgYSBkaW1lbnNpb24sIGUuZy4sIGBpbicgb3IgYHB0Jy4gIFRoZSBvbmx5IHJlYXNvbiBmb3IgdGhlCislIGFyZ3VtZW50IGlzIHRvIG1ha2UgdGhlIGlucHV0IGxvb2sgcmlnaHQ6IEBkbW57cHR9IGluc3RlYWQgb2YgQGRtbnt9cHQuCislCitcZGVmXGRtbiMxe1x0aGluc3BhY2UgIzF9CisKK1xkZWZca2JkIzF7XGRlZlxsb29reyMxfVxleHBhbmRhZnRlclxrYmRmb29cbG9vaz8/XHBhcn0KKworJSBAbCB3YXMgbmV2ZXIgZG9jdW1lbnRlZCB0byBtZWFuIGBgc3dpdGNoIHRvIHRoZSBMaXNwIGZvbnQnJywKKyUgYW5kIGl0IGlzIG5vdCB1c2VkIGFzIHN1Y2ggaW4gYW55IG1hbnVhbCBJIGNhbiBmaW5kLiAgV2UgbmVlZCBpdCBmb3IKKyUgUG9saXNoIHN1cHByZXNzZWQtbC4gIC0ta2FybCwgMjJzZXA5Ni4KKyVcZGVmXGwjMXt7XGxpICMxfVxudWxsfQorCislIEV4cGxpY2l0IGZvbnQgY2hhbmdlczogQHIsIEBzYywgdW5kb2N1bWVudGVkIEBpaS4KK1xkZWZcciMxe3tccm0gIzF9fSAgICAgICAgICAgICAgJSByb21hbiBmb250CitcZGVmXHNjIzF7e1xzbWFsbGNhcHMjMX19ICAgICAgICUgc21hbGxjYXBzIGZvbnQKK1xkZWZcaWkjMXt7XGl0ICMxfX0gICAgICAgICAgICAgJSBpdGFsaWMgZm9udAorCislIEBhY3JvbnltIGZvciAiRkJJIiwgIk5BVE8iLCBhbmQgdGhlIGxpa2UuCislIFdlIHByaW50IHRoaXMgb25lIHBvaW50IHNpemUgc21hbGxlciwgc2luY2UgaXQncyBpbnRlbmRlZCBmb3IKKyUgYWxsLXVwcGVyY2FzZS4KKyUgCitcZGVmXGFjcm9ueW0jMXtcZG9hY3JvbnltICMxLCxcZmluaXNofQorXGRlZlxkb2Fjcm9ueW0jMSwjMiwjM1xmaW5pc2h7JQorICB7XHNlbGVjdGZvbnRzXGxzaXplICMxfSUKKyAgXGRlZlx0ZW1weyMyfSUKKyAgXGlmeFx0ZW1wXGVtcHR5IFxlbHNlCisgICAgXHNwYWNlICh7XHVuc2Vwc3BhY2VzIFxpZ25vcmVzcGFjZXMgXHRlbXAgXHVuc2tpcH0pJQorICBcZmkKK30KKworJSBAYWJiciBmb3IgIkNvbXB1dC4gSi4iIGFuZCB0aGUgbGlrZS4KKyUgTm8gZm9udCBjaGFuZ2UsIGJ1dCBkb24ndCBkbyBlbmQtb2Ytc2VudGVuY2Ugc3BhY2luZy4KKyUgCitcZGVmXGFiYnIjMXtcZG9hYmJyICMxLCxcZmluaXNofQorXGRlZlxkb2FiYnIjMSwjMiwjM1xmaW5pc2h7JQorICB7XHBsYWluZnJlbmNoc3BhY2luZyAjMX0lCisgIFxkZWZcdGVtcHsjMn0lCisgIFxpZnhcdGVtcFxlbXB0eSBcZWxzZQorICAgIFxzcGFjZSAoe1x1bnNlcHNwYWNlcyBcaWdub3Jlc3BhY2VzIFx0ZW1wIFx1bnNraXB9KSUKKyAgXGZpCit9CisKKyUgQHBvdW5kc3t9IGlzIGEgc3Rlcmxpbmcgc2lnbiwgd2hpY2ggS251dGggcHV0IGluIHRoZSBDTSBpdGFsaWMgZm9udC4KKyUKK1xkZWZccG91bmRze3tcaXRcJH19CisKKyUgQGV1cm97fSBjb21lcyBmcm9tIGEgc2VwYXJhdGUgZm9udCwgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IHN0eWxlLgorJSBXZSB1c2UgdGhlIGZyZWUgZmV5bSogZm9udHMgZnJvbSB0aGUgZXVyb3N5bSBwYWNrYWdlIGJ5IEhlbnJpaworJSBUaGVpbGluZywgd2hpY2ggc3VwcG9ydCByZWd1bGFyLCBzbGFudGVkLCBib2xkIGFuZCBib2xkIHNsYW50ZWQgKGFuZAorJSAib3V0bGluZWQiIChibGFja2JvYXJkIGJvYXJkLCBzb3J0IG9mKSB2ZXJzaW9ucywgd2hpY2ggd2UgZG9uJ3QgbmVlZCkuCislIEl0IGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly93d3cuY3Rhbi5vcmcvdGV4LWFyY2hpdmUvZm9udHMvZXVyb3N5bS4KKyUgCislIEFsdGhvdWdoIG9ubHkgcmVndWxhciBpcyB0aGUgdHJ1bHkgb2ZmaWNpYWwgRXVybyBzeW1ib2wsIHdlIGlnbm9yZQorJSB0aGF0LiAgVGhlIEV1cm8gaXMgZGVzaWduZWQgdG8gYmUgc2xpZ2h0bHkgdGFsbGVyIHRoYW4gdGhlIHJlZ3VsYXIKKyUgZm9udCBoZWlnaHQuCislIAorJSBmZXltciAtIHJlZ3VsYXIKKyUgZmV5bW8gLSBzbGFudGVkCislIGZleWJyIC0gYm9sZAorJSBmZXlibyAtIGJvbGQgc2xhbnRlZAorJSAKKyUgVGhlcmUgaXMgbm8gZ29vZCAoZnJlZSkgdHlwZXdyaXRlciB2ZXJzaW9uLCB0byBteSBrbm93bGVkZ2UuCislIEEgZmV5bXIxMCBldXJvIGlzIH43LjNwdCB3aWRlLCB3aGlsZSBhIG5vcm1hbCBjbXR0MTAgY2hhciBpcyB+NS4yNXB0IHdpZGUuCislIEhtbS4KKyUgCislIEFsc28gZG9lc24ndCB3b3JrIGluIG1hdGguICBEbyB3ZSBuZWVkIHRvIGRvIG1hdGggd2l0aCBldXJvIHN5bWJvbHM/CislIEhvcGUgbm90LgorJSAKKyUgCitcZGVmXGV1cm97e1xldXJvZm9udCBlfX0KK1xkZWZcZXVyb2ZvbnR7JQorICAlIFdlIHNldCB0aGUgZm9udCBhdCBlYWNoIGNvbW1hbmQsIHJhdGhlciB0aGFuIHByZWRlZmluaW5nIGl0IGluCisgICUgXHRleHRmb250cyBhbmQgdGhlIG90aGVyIGZvbnQtc3dpdGNoaW5nIGNvbW1hbmRzLCBzbyB0aGF0CisgICUgaW5zdGFsbGF0aW9ucyB3aGljaCBuZXZlciBuZWVkIHRoZSBzeW1ib2wgZG9uJ3QgaGF2ZSB0byBoYXZlIHRoZQorICAlIGZvbnQgaW5zdGFsbGVkLgorICAlIAorICAlIFRoZXJlIGlzIG9ubHkgb25lIGRlc2lnbmVkIHNpemUgKG5vbWluYWwgMTBwdCksIHNvIHdlIGFsd2F5cyBzY2FsZQorICAlIHRoYXQgdG8gdGhlIGN1cnJlbnQgbm9taW5hbCBzaXplLgorICAlIAorICAlIEJ5IHRoZSB3YXksIHNpbXBseSB1c2luZyAiYXQgMWVtIiB3b3JrcyBmb3IgY21yMTAgYW5kIHRoZSBsaWtlLCBidXQKKyAgJSBkb2VzIG5vdCB3b3JrIGZvciBjbWJ4MTAgYW5kIG90aGVyIGV4dGVuZGVkL3NocnVua2VuIGZvbnRzLgorICAlIAorICBcZGVmXGV1cm9zaXple1xjc25hbWVcY3VyZm9udHNpemUgbm9taW5hbHNpemVcZW5kY3NuYW1lfSUKKyAgJQorICBcaWZ4XGN1cmZvbnRzdHlsZVxiZnN0eWxlbmFtZSAKKyAgICAlIGJvbGQ6CisgICAgXGZvbnRcdGhpc2V1cm9mb250ID0gXGlmdXNpbmdpdHtmZXlibzEwfXtmZXlicjEwfSBhdCBcZXVyb3NpemUKKyAgXGVsc2UgCisgICAgJSByZWd1bGFyOgorICAgIFxmb250XHRoaXNldXJvZm9udCA9IFxpZnVzaW5naXR7ZmV5bW8xMH17ZmV5bXIxMH0gYXQgXGV1cm9zaXplCisgIFxmaQorICBcdGhpc2V1cm9mb250Cit9CisKKyUgQHJlZ2lzdGVyZWRzeW1ib2wgLSBSIGluIGEgY2lyY2xlLiAgVGhlIGZvbnQgZm9yIHRoZSBSIHNob3VsZCByZWFsbHkKKyUgYmUgc21hbGxlciB5ZXQsIGJ1dCBsbGxzaXplIGlzIHRoZSBiZXN0IHdlIGNhbiBkbyBmb3Igbm93LgorJSBBZGFwdGVkIGZyb20gdGhlIHBsYWluLnRleCBkZWZpbml0aW9uIG9mIFxjb3B5cmlnaHQuCislCitcZGVmXHJlZ2lzdGVyZWRzeW1ib2x7JQorICAkXnt7XG9vYWxpZ257XGhmaWxccmFpc2UuMDdleFxoYm94e1xzZWxlY3Rmb250c1xsbGxzaXplIFJ9JQorICAgICAgICAgICAgICAgXGhmaWxcY3JjclxPcmJ9fSUKKyAgICB9JCUKK30KKworJSBAdGV4dGRlZ3JlZSAtIHRoZSBub3JtYWwgZGVncmVlcyBzaWduLgorJQorXGRlZlx0ZXh0ZGVncmVleyReXGNpcmMkfQorCislIExhdXJlbnQgU2llYmVubWFubiByZXBvcnRzIFxPcmIgdW5kZWZpbmVkIHdpdGg6CislICBUZXh0dXJlcyAxLjcuNyAocHJlbG9hZGVkIGZvcm1hdD1wbGFpbiA5My4xMC4xNCkgICg2OEspICAxNiBBUFIgMjAwNCAwMjozOAorJSBzbyB3ZSdsbCBkZWZpbmUgaXQgaWYgbmVjZXNzYXJ5LgorJSAKK1xpZnhcT3JiXHVuZGVmaW5lZAorXGRlZlxPcmJ7XG1hdGhoZXhib3gyMER9CitcZmkKKworCitcbWVzc2FnZXtwYWdlIGhlYWRpbmdzLH0KKworXG5ld3NraXBcdGl0bGVwYWdldG9wZ2x1ZSBcdGl0bGVwYWdldG9wZ2x1ZSA9IDEuNWluCitcbmV3c2tpcFx0aXRsZXBhZ2Vib3R0b21nbHVlIFx0aXRsZXBhZ2Vib3R0b21nbHVlID0gMnBjCisKKyUgRmlyc3QgdGhlIHRpdGxlIHBhZ2UuICBNdXN0IGRvIEBzZXR0aXRsZSBiZWZvcmUgQHRpdGxlcGFnZS4KK1xuZXdpZlxpZnNlZW5hdXRob3IKK1xuZXdpZlxpZmZpbmlzaGVkdGl0bGVwYWdlCisKKyUgRG8gYW4gaW1wbGljaXQgQGNvbnRlbnRzIG9yIEBzaG9ydGNvbnRlbnRzIGFmdGVyIEBlbmQgdGl0bGVwYWdlIGlmIHRoZQorJSB1c2VyIHNheXMgQHNldGNvbnRlbnRzYWZ0ZXJ0aXRsZXBhZ2Ugb3IgQHNldHNob3J0Y29udGVudHNhZnRlcnRpdGxlcGFnZS4KKyUKK1xuZXdpZlxpZnNldGNvbnRlbnRzYWZ0ZXJ0aXRsZXBhZ2UKKyBcbGV0XHNldGNvbnRlbnRzYWZ0ZXJ0aXRsZXBhZ2UgPSBcc2V0Y29udGVudHNhZnRlcnRpdGxlcGFnZXRydWUKK1xuZXdpZlxpZnNldHNob3J0Y29udGVudHNhZnRlcnRpdGxlcGFnZQorIFxsZXRcc2V0c2hvcnRjb250ZW50c2FmdGVydGl0bGVwYWdlID0gXHNldHNob3J0Y29udGVudHNhZnRlcnRpdGxlcGFnZXRydWUKKworXHBhcnNlYXJnZGVmXHNob3J0dGl0bGVwYWdle1xiZWdpbmdyb3VwXGhib3h7fVx2c2tpcCAxLjVpbiBcY2hhcHJtIFxjZW50ZXJsaW5leyMxfSUKKyAgICAgICAgXGVuZGdyb3VwXHBhZ2VcaGJveHt9XHBhZ2V9CisKK1xlbnZkZWZcdGl0bGVwYWdleyUKKyAgJSBPcGVuIG9uZSBleHRyYSBncm91cCwgYXMgd2Ugd2FudCB0byBjbG9zZSBpdCBpbiB0aGUgbWlkZGxlIG9mIFxFdGl0bGVwYWdlLgorICBcYmVnaW5ncm91cAorICAgIFxwYXJpbmRlbnQ9MHB0IFx0ZXh0Zm9udHMKKyAgICAlIExlYXZlIHNvbWUgc3BhY2UgYXQgdGhlIHZlcnkgdG9wIG9mIHRoZSBwYWdlLgorICAgIFx2Z2x1ZVx0aXRsZXBhZ2V0b3BnbHVlCisgICAgJSBObyBydWxlIGF0IHBhZ2UgYm90dG9tIHVubGVzcyB3ZSBwcmludCBvbmUgYXQgdGhlIHRvcCB3aXRoIEB0aXRsZS4KKyAgICBcZmluaXNoZWR0aXRsZXBhZ2V0cnVlCisgICAgJQorICAgICUgTW9zdCB0aXRsZSBgYHBhZ2VzJycgYXJlIGFjdHVhbGx5IHR3byBwYWdlcyBsb25nLCB3aXRoIHNwYWNlCisgICAgJSBhdCB0aGUgdG9wIG9mIHRoZSBzZWNvbmQuICBXZSBkb24ndCB3YW50IHRoZSByYWdnZWQgbGVmdCBvbiB0aGUgc2Vjb25kLgorICAgIFxsZXRcb2xkcGFnZSA9IFxwYWdlCisgICAgXGRlZlxwYWdleyUKKyAgICAgIFxpZmZpbmlzaGVkdGl0bGVwYWdlXGVsc2UKKwkgXGZpbmlzaHRpdGxlcGFnZQorICAgICAgXGZpCisgICAgICBcbGV0XHBhZ2UgPSBcb2xkcGFnZQorICAgICAgXHBhZ2UKKyAgICAgIFxudWxsCisgICAgfSUKK30KKworXGRlZlxFdGl0bGVwYWdleyUKKyAgICBcaWZmaW5pc2hlZHRpdGxlcGFnZVxlbHNlCisJXGZpbmlzaHRpdGxlcGFnZQorICAgIFxmaQorICAgICUgSXQgaXMgaW1wb3J0YW50IHRvIGRvIHRoZSBwYWdlIGJyZWFrIGJlZm9yZSBlbmRpbmcgdGhlIGdyb3VwLAorICAgICUgYmVjYXVzZSB0aGUgaGVhZGxpbmUgYW5kIGZvb3RsaW5lIGFyZSBvbmx5IGVtcHR5IGluc2lkZSB0aGUgZ3JvdXAuCisgICAgJSBJZiB3ZSB1c2UgdGhlIG5ldyBkZWZpbml0aW9uIG9mIFxwYWdlLCB3ZSBhbHdheXMgZ2V0IGEgYmxhbmsgcGFnZQorICAgICUgYWZ0ZXIgdGhlIHRpdGxlIHBhZ2UsIHdoaWNoIHdlIGNlcnRhaW5seSBkb24ndCB3YW50LgorICAgIFxvbGRwYWdlCisgIFxlbmRncm91cAorICAlCisgICUgTmVlZCB0aGlzIGJlZm9yZSB0aGUgXC4uLmFmdGVydGl0bGVwYWdlIGNoZWNrcyBzbyB0aGF0IGlmIHRoZXkgYXJlCisgICUgaW4gZWZmZWN0IHRoZSB0b2MgcGFnZXMgd2lsbCBjb21lIG91dCB3aXRoIHBhZ2UgbnVtYmVycy4KKyAgXEhFQURJTkdTb24KKyAgJQorICAlIElmIHRoZXkgd2FudCBzaG9ydCwgdGhleSBjZXJ0YWlubHkgd2FudCBsb25nIHRvby4KKyAgXGlmc2V0c2hvcnRjb250ZW50c2FmdGVydGl0bGVwYWdlCisgICAgXHNob3J0Y29udGVudHMKKyAgICBcY29udGVudHMKKyAgICBcZ2xvYmFsXGxldFxzaG9ydGNvbnRlbnRzID0gXHJlbGF4CisgICAgXGdsb2JhbFxsZXRcY29udGVudHMgPSBccmVsYXgKKyAgXGZpCisgICUKKyAgXGlmc2V0Y29udGVudHNhZnRlcnRpdGxlcGFnZQorICAgIFxjb250ZW50cworICAgIFxnbG9iYWxcbGV0XGNvbnRlbnRzID0gXHJlbGF4CisgICAgXGdsb2JhbFxsZXRcc2hvcnRjb250ZW50cyA9IFxyZWxheAorICBcZmkKK30KKworXGRlZlxmaW5pc2h0aXRsZXBhZ2V7JQorICBcdnNraXA0cHQgXGhydWxlIGhlaWdodCAycHQgd2lkdGggXGhzaXplCisgIFx2c2tpcFx0aXRsZXBhZ2Vib3R0b21nbHVlCisgIFxmaW5pc2hlZHRpdGxlcGFnZXRydWUKK30KKworJSUlIE1hY3JvcyB0byBiZSB1c2VkIHdpdGhpbiBAdGl0bGVwYWdlOgorCitcbGV0XHN1YnRpdGxlcm09XHRlbnJtCitcZGVmXHN1YnRpdGxlZm9udHtcc3VidGl0bGVybSBcbm9ybWFsYmFzZWxpbmVza2lwID0gMTNwdCBcbm9ybWFsYmFzZWxpbmVzfQorCitcZGVmXGF1dGhvcmZvbnR7XGF1dGhvcnJtIFxub3JtYWxiYXNlbGluZXNraXAgPSAxNnB0IFxub3JtYWxiYXNlbGluZXMKKwkJXGxldFx0dD1cYXV0aG9ydHR9CisKK1xwYXJzZWFyZ2RlZlx0aXRsZXslCisgIFxjaGVja2Vudlx0aXRsZXBhZ2UKKyAgXGxlZnRsaW5le1x0aXRsZWZvbnRzXHJtICMxfQorICAlIHByaW50IGEgcnVsZSBhdCB0aGUgcGFnZSBib3R0b20gYWxzby4KKyAgXGZpbmlzaGVkdGl0bGVwYWdlZmFsc2UKKyAgXHZza2lwNHB0IFxocnVsZSBoZWlnaHQgNHB0IHdpZHRoIFxoc2l6ZSBcdnNraXA0cHQKK30KKworXHBhcnNlYXJnZGVmXHN1YnRpdGxleyUKKyAgXGNoZWNrZW52XHRpdGxlcGFnZQorICB7XHN1YnRpdGxlZm9udCBccmlnaHRsaW5leyMxfX0lCit9CisKKyUgQGF1dGhvciBzaG91bGQgY29tZSBsYXN0LCBidXQgbWF5IGNvbWUgbWFueSB0aW1lcy4KKyUgSXQgY2FuIGFsc28gYmUgdXNlZCBpbnNpZGUgQHF1b3RhdGlvbi4KKyUKK1xwYXJzZWFyZ2RlZlxhdXRob3J7JQorICBcZGVmXHRlbXB7XHF1b3RhdGlvbn0lCisgIFxpZnhcdGhpc2Vudlx0ZW1wCisgICAgXGRlZlxxdW90YXRpb25hdXRob3J7IzF9JSBwcmludGVkIGluIFxFcXVvdGF0aW9uLgorICBcZWxzZQorICAgIFxjaGVja2Vudlx0aXRsZXBhZ2UKKyAgICBcaWZzZWVuYXV0aG9yXGVsc2UgXHZza2lwIDBwdCBwbHVzIDFmaWxsbCBcc2VlbmF1dGhvcnRydWUgXGZpCisgICAge1xhdXRob3Jmb250IFxsZWZ0bGluZXsjMX19JQorICBcZmkKK30KKworCislJSUgU2V0IHVwIHBhZ2UgaGVhZGluZ3MgYW5kIGZvb3RpbmdzLgorCitcbGV0XHRoaXNwYWdlPVxmb2xpbworCitcbmV3dG9rc1xldmVuaGVhZGxpbmUgICAgJSBoZWFkbGluZSBvbiBldmVuIHBhZ2VzCitcbmV3dG9rc1xvZGRoZWFkbGluZSAgICAgJSBoZWFkbGluZSBvbiBvZGQgcGFnZXMKK1xuZXd0b2tzXGV2ZW5mb290bGluZSAgICAlIGZvb3RsaW5lIG9uIGV2ZW4gcGFnZXMKK1xuZXd0b2tzXG9kZGZvb3RsaW5lICAgICAlIGZvb3RsaW5lIG9uIG9kZCBwYWdlcworCislIE5vdyBtYWtlIFRlWCB1c2UgdGhvc2UgdmFyaWFibGVzCitcaGVhZGxpbmU9e3tcdGV4dGZvbnRzXHJtIFxpZm9kZFxwYWdlbm8gXHRoZVxvZGRoZWFkbGluZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxlbHNlIFx0aGVcZXZlbmhlYWRsaW5lIFxmaX19CitcZm9vdGxpbmU9e3tcdGV4dGZvbnRzXHJtIFxpZm9kZFxwYWdlbm8gXHRoZVxvZGRmb290bGluZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxlbHNlIFx0aGVcZXZlbmZvb3RsaW5lIFxmaX1cSEVBRElOR1Nob29rfQorXGxldFxIRUFESU5HU2hvb2s9XHJlbGF4CisKKyUgQ29tbWFuZHMgdG8gc2V0IHRob3NlIHZhcmlhYmxlcy4KKyUgRm9yIGV4YW1wbGUsIHRoaXMgaXMgd2hhdCAgQGhlYWRpbmdzIG9uICBkb2VzCislIEBldmVuaGVhZGluZyBAdGhpc3RpdGxlfEB0aGlzcGFnZXxAdGhpc2NoYXB0ZXIKKyUgQG9kZGhlYWRpbmcgQHRoaXNjaGFwdGVyfEB0aGlzcGFnZXxAdGhpc3RpdGxlCislIEBldmVuZm9vdGluZyBAdGhpc2ZpbGV8fAorJSBAb2RkZm9vdGluZyB8fEB0aGlzZmlsZQorCisKK1xkZWZcZXZlbmhlYWRpbmd7XHBhcnNlYXJnXGV2ZW5oZWFkaW5neHh4fQorXGRlZlxldmVuaGVhZGluZ3h4eCAjMXtcZXZlbmhlYWRpbmd5eXkgIzFcfFx8XHxcfFxmaW5pc2h9CitcZGVmXGV2ZW5oZWFkaW5neXl5ICMxXHwjMlx8IzNcfCM0XGZpbmlzaHslCitcZ2xvYmFsXGV2ZW5oZWFkbGluZT17XHJsYXB7XGNlbnRlcmxpbmV7IzJ9fVxsaW5leyMxXGhmaWwjM319fQorCitcZGVmXG9kZGhlYWRpbmd7XHBhcnNlYXJnXG9kZGhlYWRpbmd4eHh9CitcZGVmXG9kZGhlYWRpbmd4eHggIzF7XG9kZGhlYWRpbmd5eXkgIzFcfFx8XHxcfFxmaW5pc2h9CitcZGVmXG9kZGhlYWRpbmd5eXkgIzFcfCMyXHwjM1x8IzRcZmluaXNoeyUKK1xnbG9iYWxcb2RkaGVhZGxpbmU9e1xybGFwe1xjZW50ZXJsaW5leyMyfX1cbGluZXsjMVxoZmlsIzN9fX0KKworXHBhcnNlYXJnZGVmXGV2ZXJ5aGVhZGluZ3tcb2RkaGVhZGluZ3h4eHsjMX1cZXZlbmhlYWRpbmd4eHh7IzF9fSUKKworXGRlZlxldmVuZm9vdGluZ3tccGFyc2VhcmdcZXZlbmZvb3Rpbmd4eHh9CitcZGVmXGV2ZW5mb290aW5neHh4ICMxe1xldmVuZm9vdGluZ3l5eSAjMVx8XHxcfFx8XGZpbmlzaH0KK1xkZWZcZXZlbmZvb3Rpbmd5eXkgIzFcfCMyXHwjM1x8IzRcZmluaXNoeyUKK1xnbG9iYWxcZXZlbmZvb3RsaW5lPXtccmxhcHtcY2VudGVybGluZXsjMn19XGxpbmV7IzFcaGZpbCMzfX19CisKK1xkZWZcb2RkZm9vdGluZ3tccGFyc2Vhcmdcb2RkZm9vdGluZ3h4eH0KK1xkZWZcb2RkZm9vdGluZ3h4eCAjMXtcb2RkZm9vdGluZ3l5eSAjMVx8XHxcfFx8XGZpbmlzaH0KK1xkZWZcb2RkZm9vdGluZ3l5eSAjMVx8IzJcfCMzXHwjNFxmaW5pc2h7JQorICBcZ2xvYmFsXG9kZGZvb3RsaW5lID0ge1xybGFwe1xjZW50ZXJsaW5leyMyfX1cbGluZXsjMVxoZmlsIzN9fSUKKyAgJQorICAlIExlYXZlIHNvbWUgc3BhY2UgZm9yIHRoZSBmb290bGluZS4gIEhvcGVmdWxseSBvayB0byBhc3N1bWUKKyAgJSBAZXZlbmZvb3Rpbmcgd2lsbCBub3QgYmUgdXNlZCBieSBpdHNlbGYuCisgIFxnbG9iYWxcYWR2YW5jZVxwYWdlaGVpZ2h0IGJ5IC0xMnB0CisgIFxnbG9iYWxcYWR2YW5jZVx2c2l6ZSBieSAtMTJwdAorfQorCitccGFyc2VhcmdkZWZcZXZlcnlmb290aW5ne1xvZGRmb290aW5neHh4eyMxfVxldmVuZm9vdGluZ3h4eHsjMX19CisKKworJSBAaGVhZGluZ3MgZG91YmxlICAgICAgdHVybnMgaGVhZGluZ3Mgb24gZm9yIGRvdWJsZS1zaWRlZCBwcmludGluZy4KKyUgQGhlYWRpbmdzIHNpbmdsZSAgICAgIHR1cm5zIGhlYWRpbmdzIG9uIGZvciBzaW5nbGUtc2lkZWQgcHJpbnRpbmcuCislIEBoZWFkaW5ncyBvZmYgICAgICAgICB0dXJucyB0aGVtIG9mZi4KKyUgQGhlYWRpbmdzIG9uICAgICAgICAgIHNhbWUgYXMgQGhlYWRpbmdzIGRvdWJsZSwgcmV0YWluZWQgZm9yIGNvbXBhdGliaWxpdHkuCislIEBoZWFkaW5ncyBhZnRlciAgICAgICB0dXJucyBvbiBkb3VibGUtc2lkZWQgaGVhZGluZ3MgYWZ0ZXIgdGhpcyBwYWdlLgorJSBAaGVhZGluZ3MgZG91YmxlYWZ0ZXIgdHVybnMgb24gZG91YmxlLXNpZGVkIGhlYWRpbmdzIGFmdGVyIHRoaXMgcGFnZS4KKyUgQGhlYWRpbmdzIHNpbmdsZWFmdGVyIHR1cm5zIG9uIHNpbmdsZS1zaWRlZCBoZWFkaW5ncyBhZnRlciB0aGlzIHBhZ2UuCislIEJ5IGRlZmF1bHQsIHRoZXkgYXJlIG9mZiBhdCB0aGUgc3RhcnQgb2YgYSBkb2N1bWVudCwKKyUgYW5kIHR1cm5lZCBgb24nIGFmdGVyIEBlbmQgdGl0bGVwYWdlLgorCitcZGVmXGhlYWRpbmdzICMxIHtcY3NuYW1lIEhFQURJTkdTIzFcZW5kY3NuYW1lfQorCitcZGVmXEhFQURJTkdTb2ZmeyUKK1xnbG9iYWxcZXZlbmhlYWRsaW5lPXtcaGZpbH0gXGdsb2JhbFxldmVuZm9vdGxpbmU9e1xoZmlsfQorXGdsb2JhbFxvZGRoZWFkbGluZT17XGhmaWx9IFxnbG9iYWxcb2RkZm9vdGxpbmU9e1xoZmlsfX0KK1xIRUFESU5HU29mZgorJSBXaGVuIHdlIHR1cm4gaGVhZGluZ3Mgb24sIHNldCB0aGUgcGFnZSBudW1iZXIgdG8gMS4KKyUgRm9yIGRvdWJsZS1zaWRlZCBwcmludGluZywgcHV0IGN1cnJlbnQgZmlsZSBuYW1lIGluIGxvd2VyIGxlZnQgY29ybmVyLAorJSBjaGFwdGVyIG5hbWUgb24gaW5zaWRlIHRvcCBvZiByaWdodCBoYW5kIHBhZ2VzLCBkb2N1bWVudAorJSB0aXRsZSBvbiBpbnNpZGUgdG9wIG9mIGxlZnQgaGFuZCBwYWdlcywgYW5kIHBhZ2UgbnVtYmVycyBvbiBvdXRzaWRlIHRvcAorJSBlZGdlIG9mIGFsbCBwYWdlcy4KK1xkZWZcSEVBRElOR1Nkb3VibGV7JQorXGdsb2JhbFxwYWdlbm89MQorXGdsb2JhbFxldmVuZm9vdGxpbmU9e1xoZmlsfQorXGdsb2JhbFxvZGRmb290bGluZT17XGhmaWx9CitcZ2xvYmFsXGV2ZW5oZWFkbGluZT17XGxpbmV7XGZvbGlvXGhmaWxcdGhpc3RpdGxlfX0KK1xnbG9iYWxcb2RkaGVhZGxpbmU9e1xsaW5le1x0aGlzY2hhcHRlclxoZmlsXGZvbGlvfX0KK1xnbG9iYWxcbGV0XGNvbnRlbnRzYWxpZ25tYWNybyA9IFxjaGFwb2RkcGFnZQorfQorXGxldFxjb250ZW50c2FsaWdubWFjcm8gPSBcY2hhcHBhZ2VyCisKKyUgRm9yIHNpbmdsZS1zaWRlZCBwcmludGluZywgY2hhcHRlciB0aXRsZSBnb2VzIGFjcm9zcyB0b3AgbGVmdCBvZiBwYWdlLAorJSBwYWdlIG51bWJlciBvbiB0b3AgcmlnaHQuCitcZGVmXEhFQURJTkdTc2luZ2xleyUKK1xnbG9iYWxccGFnZW5vPTEKK1xnbG9iYWxcZXZlbmZvb3RsaW5lPXtcaGZpbH0KK1xnbG9iYWxcb2RkZm9vdGxpbmU9e1xoZmlsfQorXGdsb2JhbFxldmVuaGVhZGxpbmU9e1xsaW5le1x0aGlzY2hhcHRlclxoZmlsXGZvbGlvfX0KK1xnbG9iYWxcb2RkaGVhZGxpbmU9e1xsaW5le1x0aGlzY2hhcHRlclxoZmlsXGZvbGlvfX0KK1xnbG9iYWxcbGV0XGNvbnRlbnRzYWxpZ25tYWNybyA9IFxjaGFwcGFnZXIKK30KK1xkZWZcSEVBRElOR1NvbntcSEVBRElOR1Nkb3VibGV9CisKK1xkZWZcSEVBRElOR1NhZnRlcntcbGV0XEhFQURJTkdTaG9vaz1cSEVBRElOR1Nkb3VibGV4fQorXGxldFxIRUFESU5HU2RvdWJsZWFmdGVyPVxIRUFESU5HU2FmdGVyCitcZGVmXEhFQURJTkdTZG91YmxleHslCitcZ2xvYmFsXGV2ZW5mb290bGluZT17XGhmaWx9CitcZ2xvYmFsXG9kZGZvb3RsaW5lPXtcaGZpbH0KK1xnbG9iYWxcZXZlbmhlYWRsaW5lPXtcbGluZXtcZm9saW9caGZpbFx0aGlzdGl0bGV9fQorXGdsb2JhbFxvZGRoZWFkbGluZT17XGxpbmV7XHRoaXNjaGFwdGVyXGhmaWxcZm9saW99fQorXGdsb2JhbFxsZXRcY29udGVudHNhbGlnbm1hY3JvID0gXGNoYXBvZGRwYWdlCit9CisKK1xkZWZcSEVBRElOR1NzaW5nbGVhZnRlcntcbGV0XEhFQURJTkdTaG9vaz1cSEVBRElOR1NzaW5nbGV4fQorXGRlZlxIRUFESU5HU3NpbmdsZXh7JQorXGdsb2JhbFxldmVuZm9vdGxpbmU9e1xoZmlsfQorXGdsb2JhbFxvZGRmb290bGluZT17XGhmaWx9CitcZ2xvYmFsXGV2ZW5oZWFkbGluZT17XGxpbmV7XHRoaXNjaGFwdGVyXGhmaWxcZm9saW99fQorXGdsb2JhbFxvZGRoZWFkbGluZT17XGxpbmV7XHRoaXNjaGFwdGVyXGhmaWxcZm9saW99fQorXGdsb2JhbFxsZXRcY29udGVudHNhbGlnbm1hY3JvID0gXGNoYXBwYWdlcgorfQorCislIFN1YnJvdXRpbmVzIHVzZWQgaW4gZ2VuZXJhdGluZyBoZWFkaW5ncworJSBUaGlzIHByb2R1Y2VzIERheSBNb250aCBZZWFyIHN0eWxlIG9mIG91dHB1dC4KKyUgT25seSBkZWZpbmUgaWYgbm90IGFscmVhZHkgZGVmaW5lZCwgaW4gY2FzZSBhIHR4aS0/Py50ZXggZmlsZSBoYXMgc2V0CislIHVwIGEgZGlmZmVyZW50IGZvcm1hdCAoZS5nLiwgdHhpLWNzLnRleCBkb2VzIHRoaXMpLgorXGlmeFx0b2RheVx1bmRlZmluZWQKK1xkZWZcdG9kYXl7JQorICBcbnVtYmVyXGRheVxzcGFjZQorICBcaWZjYXNlXG1vbnRoCisgIFxvclxwdXR3b3JkTUphblxvclxwdXR3b3JkTUZlYlxvclxwdXR3b3JkTU1hclxvclxwdXR3b3JkTUFwcgorICBcb3JccHV0d29yZE1NYXlcb3JccHV0d29yZE1KdW5cb3JccHV0d29yZE1KdWxcb3JccHV0d29yZE1BdWcKKyAgXG9yXHB1dHdvcmRNU2VwXG9yXHB1dHdvcmRNT2N0XG9yXHB1dHdvcmRNTm92XG9yXHB1dHdvcmRNRGVjCisgIFxmaQorICBcc3BhY2VcbnVtYmVyXHllYXJ9CitcZmkKKworJSBAc2V0dGl0bGUgbGluZS4uLiAgc3BlY2lmaWVzIHRoZSB0aXRsZSBvZiB0aGUgZG9jdW1lbnQsIGZvciBoZWFkaW5ncy4KKyUgSXQgZ2VuZXJhdGVzIG5vIG91dHB1dCBvZiBpdHMgb3duLgorXGRlZlx0aGlzdGl0bGV7XHB1dHdvcmROb1RpdGxlfQorXGRlZlxzZXR0aXRsZXtccGFyc2Vhcmd7XGdkZWZcdGhpc3RpdGxlfX0KKworCitcbWVzc2FnZXt0YWJsZXMsfQorJSBUYWJsZXMgLS0gQHRhYmxlLCBAZnRhYmxlLCBAdnRhYmxlLCBAaXRlbSh4KS4KKworJSBkZWZhdWx0IGluZGVudGF0aW9uIG9mIHRhYmxlIHRleHQKK1xuZXdkaW1lblx0YWJsZWluZGVudCBcdGFibGVpbmRlbnQ9LjhpbgorJSBkZWZhdWx0IGluZGVudGF0aW9uIG9mIEBpdGVtaXplIGFuZCBAZW51bWVyYXRlIHRleHQKK1xuZXdkaW1lblxpdGVtaW5kZW50ICBcaXRlbWluZGVudD0uM2luCislIG1hcmdpbiBiZXR3ZWVuIGVuZCBvZiB0YWJsZSBpdGVtIGFuZCBzdGFydCBvZiB0YWJsZSB0ZXh0LgorXG5ld2RpbWVuXGl0ZW1tYXJnaW4gIFxpdGVtbWFyZ2luPS4xaW4KKworJSB1c2VkIGludGVybmFsbHkgZm9yIFxpdGVtaW5kZW50IG1pbnVzIFxpdGVtbWFyZ2luCitcbmV3ZGltZW5caXRlbW1heAorCislIE5vdGUgQHRhYmxlLCBAZnRhYmxlLCBhbmQgQHZ0YWJsZSBkZWZpbmUgQGl0ZW0sIEBpdGVteCwgZXRjLiwgd2l0aAorJSB0aGVzZSBkZWZzLgorJSBUaGV5IGFsc28gZGVmaW5lIFxpdGVtaW5kZXgKKyUgdG8gaW5kZXggdGhlIGl0ZW0gbmFtZSBpbiB3aGF0ZXZlciBtYW5uZXIgaXMgZGVzaXJlZCAocGVyaGFwcyBub25lKS4KKworXG5ld2lmXGlmaXRlbXhuZWVkc25lZ2F0aXZldnNraXAKKworXGRlZlxpdGVteHBhcntccGFyXGlmaXRlbXhuZWVkc25lZ2F0aXZldnNraXBcbm9icmVha1x2c2tpcC1ccGFyc2tpcFxub2JyZWFrXGZpfQorCitcZGVmXGludGVybmFsQml0ZW17XHNtYWxsYnJlYWsgXHBhcnNlYXJnXGl0ZW16enp9CitcZGVmXGludGVybmFsQml0ZW14e1xpdGVteHBhciBccGFyc2VhcmdcaXRlbXp6en0KKworXGRlZlxpdGVtenp6ICMxe1xiZWdpbmdyb3VwICUKKyAgXGFkdmFuY2VcaHNpemUgYnkgLVxyaWdodHNraXAKKyAgXGFkdmFuY2VcaHNpemUgYnkgLVx0YWJsZWluZGVudAorICBcc2V0Ym94MD1caGJveHtcaXRlbWluZGljYXRleyMxfX0lCisgIFxpdGVtaW5kZXh7IzF9JQorICBcbm9icmVhayAlIFRoaXMgcHJldmVudHMgYSBicmVhayBiZWZvcmUgQGl0ZW14LgorICAlCisgICUgSWYgdGhlIGl0ZW0gdGV4dCBkb2VzIG5vdCBmaXQgaW4gdGhlIHNwYWNlIHdlIGhhdmUsIHB1dCBpdCBvbiBhIGxpbmUKKyAgJSBieSBpdHNlbGYsIGFuZCBkbyBub3QgYWxsb3cgYSBwYWdlIGJyZWFrIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgdGhhdAorICAlIGxpbmUuICBXZSBkbyBub3Qgc3RhcnQgYSBwYXJhZ3JhcGggaGVyZSBiZWNhdXNlIHRoZW4gaWYgdGhlIG5leHQKKyAgJSBjb21tYW5kIGlzLCBlLmcuLCBAa2luZGV4LCB0aGUgd2hhdHNpdCB3b3VsZCBnZXQgcHV0IGludG8gdGhlCisgICUgaG9yaXpvbnRhbCBsaXN0IG9uIGEgbGluZSBieSBpdHNlbGYsIHJlc3VsdGluZyBpbiBleHRyYSBibGFuayBzcGFjZS4KKyAgXGlmZGltIFx3ZDA+XGl0ZW1tYXgKKyAgICAlCisgICAgJSBNYWtlIHRoaXMgYSBwYXJhZ3JhcGggc28gd2UgZ2V0IHRoZSBccGFyc2tpcCBnbHVlIGFuZCB3cmFwcGluZywKKyAgICAlIGJ1dCBsZWF2ZSBpdCByYWdnZWQtcmlnaHQuCisgICAgXGJlZ2luZ3JvdXAKKyAgICAgIFxhZHZhbmNlXGxlZnRza2lwIGJ5LVx0YWJsZWluZGVudAorICAgICAgXGFkdmFuY2VcaHNpemUgYnlcdGFibGVpbmRlbnQKKyAgICAgIFxhZHZhbmNlXHJpZ2h0c2tpcCBieTBwdCBwbHVzMWZpbAorICAgICAgXGxlYXZldm1vZGVcdW5oYm94MFxwYXIKKyAgICBcZW5kZ3JvdXAKKyAgICAlCisgICAgJSBXZSdyZSBnb2luZyB0byBiZSBzdGFydGluZyBhIHBhcmFncmFwaCwgYnV0IHdlIGRvbid0IHdhbnQgdGhlCisgICAgJSBccGFyc2tpcCBnbHVlIC0tIGxvZ2ljYWxseSBpdCdzIHBhcnQgb2YgdGhlIEBpdGVtIHdlIGp1c3Qgc3RhcnRlZC4KKyAgICBcbm9icmVhayBcdnNraXAtXHBhcnNraXAKKyAgICAlCisgICAgJSBTdG9wIGEgcGFnZSBicmVhayBhdCB0aGUgXHBhcnNraXAgZ2x1ZSBjb21pbmcgdXAuICBIb3dldmVyLCBpZgorICAgICUgd2hhdCBmb2xsb3dzIGlzIGFuIGVudmlyb25tZW50IHN1Y2ggYXMgQGV4YW1wbGUsIHRoZXJlIHdpbGwgYmUgbm8KKyAgICAlIFxwYXJza2lwIGdsdWU7IHRoZW4gdGhlIG5lZ2F0aXZlIHZza2lwIHdlIGp1c3QgaW5zZXJ0ZWQgd291bGQKKyAgICAlIGNhdXNlIHRoZSBleGFtcGxlIGFuZCB0aGUgaXRlbSB0byBjcmFzaCB0b2dldGhlci4gIFNvIHdlIHVzZSB0aGlzCisgICAgJSBiaXphcnJlIHZhbHVlIG9mIDEwMDAxIGFzIGEgc2lnbmFsIHRvIFxhYm92ZWVudmJyZWFrIHRvIGluc2VydAorICAgICUgXHBhcnNraXAgZ2x1ZSBhZnRlciBhbGwuICBTZWN0aW9uIHRpdGxlcyBhcmUgaGFuZGxlZCB0aGlzIHdheSBhbHNvLgorICAgICUgCisgICAgXHBlbmFsdHkgMTAwMDEKKyAgICBcZW5kZ3JvdXAKKyAgICBcaXRlbXhuZWVkc25lZ2F0aXZldnNraXBmYWxzZQorICBcZWxzZQorICAgICUgVGhlIGl0ZW0gdGV4dCBmaXRzIGludG8gdGhlIHNwYWNlLiAgU3RhcnQgYSBwYXJhZ3JhcGgsIHNvIHRoYXQgdGhlCisgICAgJSBmb2xsb3dpbmcgdGV4dCAoaWYgYW55KSB3aWxsIGVuZCB1cCBvbiB0aGUgc2FtZSBsaW5lLgorICAgIFxub2luZGVudAorICAgICUgRG8gdGhpcyB3aXRoIGtlcm5zIGFuZCBcdW5oYm94IHNvIHRoYXQgaWYgdGhlcmUgaXMgYSBmb290bm90ZSBpbgorICAgICUgdGhlIGl0ZW0gdGV4dCwgaXQgY2FuIG1pZ3JhdGUgdG8gdGhlIG1haW4gdmVydGljYWwgbGlzdCBhbmQKKyAgICAlIGV2ZW50dWFsbHkgYmUgcHJpbnRlZC4KKyAgICBcbm9icmVha1xrZXJuLVx0YWJsZWluZGVudAorICAgIFxkaW1lbjAgPSBcaXRlbW1heCAgXGFkdmFuY2VcZGltZW4wIGJ5IFxpdGVtbWFyZ2luIFxhZHZhbmNlXGRpbWVuMCBieSAtXHdkMAorICAgIFx1bmhib3gwCisgICAgXG5vYnJlYWtca2VyblxkaW1lbjAKKyAgICBcZW5kZ3JvdXAKKyAgICBcaXRlbXhuZWVkc25lZ2F0aXZldnNraXB0cnVlCisgIFxmaQorfQorCitcZGVmXGl0ZW17XGVycm1lc3NhZ2V7QGl0ZW0gd2hpbGUgbm90IGluIGEgbGlzdCBlbnZpcm9ubWVudH19CitcZGVmXGl0ZW14e1xlcnJtZXNzYWdle0BpdGVteCB3aGlsZSBub3QgaW4gYSBsaXN0IGVudmlyb25tZW50fX0KKworJSBAdGFibGUsIEBmdGFibGUsIEB2dGFibGUuCitcZW52ZGVmXHRhYmxleyUKKyAgXGxldFxpdGVtaW5kZXhcZ29iYmxlCisgIFx0YWJsZWNoZWNre3RhYmxlfSUKK30KK1xlbnZkZWZcZnRhYmxleyUKKyAgXGRlZlxpdGVtaW5kZXggIyMxe1xkb2luZCB7Zm59e1xjb2RleyMjMX19fSUKKyAgXHRhYmxlY2hlY2t7ZnRhYmxlfSUKK30KK1xlbnZkZWZcdnRhYmxleyUKKyAgXGRlZlxpdGVtaW5kZXggIyMxe1xkb2luZCB7dnJ9e1xjb2RleyMjMX19fSUKKyAgXHRhYmxlY2hlY2t7dnRhYmxlfSUKK30KK1xkZWZcdGFibGVjaGVjayMxeyUKKyAgXGlmbnVtIFx0aGVcY2F0Y29kZWBcXl5NPVxhY3RpdmUKKyAgICBcZW5kZ3JvdXAKKyAgICBcZXJybWVzc2FnZXtUaGlzIGNvbW1hbmQgd29uJ3Qgd29yayBpbiB0aGlzIGNvbnRleHQ7IHBlcmhhcHMgdGhlIHByb2JsZW0gaXMKKyAgICAgIHRoYXQgd2UgYXJlIFxpbmVudmlyb25tZW50XHRoaXNlbnZ9JQorICAgIFxkZWZcbmV4dHtcZG9pZ25vcmV7IzF9fSUKKyAgXGVsc2UKKyAgICBcbGV0XG5leHRcdGFibGV4CisgIFxmaQorICBcbmV4dAorfQorXGRlZlx0YWJsZXgjMXslCisgIFxkZWZcaXRlbWluZGljYXRleyMxfSUKKyAgXHBhcnNlYXJnXHRhYmxleQorfQorXGRlZlx0YWJsZXkjMXslCisgIHslCisgICAgXG1ha2V2YWx1ZWV4cGFuZGFibGUKKyAgICBcZWRlZlx0ZW1we1xub2V4cGFuZFx0YWJsZXogIzFcc3BhY2Vcc3BhY2Vcc3BhY2V9JQorICAgIFxleHBhbmRhZnRlcgorICB9XHRlbXAgXGVuZHRhYmxlegorfQorXGRlZlx0YWJsZXogIzEgIzIgIzMgIzRcZW5kdGFibGV6eyUKKyAgXGFib3ZlZW52YnJlYWsKKyAgXGlmbnVtIDAjMT4wIFxhZHZhbmNlIFxsZWZ0c2tpcCBieSAjMVxtaWwgXGZpCisgIFxpZm51bSAwIzI+MCBcdGFibGVpbmRlbnQ9IzJcbWlsIFxmaQorICBcaWZudW0gMCMzPjAgXGFkdmFuY2UgXHJpZ2h0c2tpcCBieSAjM1xtaWwgXGZpCisgIFxpdGVtbWF4PVx0YWJsZWluZGVudAorICBcYWR2YW5jZSBcaXRlbW1heCBieSAtXGl0ZW1tYXJnaW4KKyAgXGFkdmFuY2UgXGxlZnRza2lwIGJ5IFx0YWJsZWluZGVudAorICBcZXhkZW50YW1vdW50PVx0YWJsZWluZGVudAorICBccGFyaW5kZW50ID0gMHB0CisgIFxwYXJza2lwID0gXHNtYWxsc2tpcGFtb3VudAorICBcaWZkaW0gXHBhcnNraXA9MHB0IFxwYXJza2lwPTJwdCBcZmkKKyAgXGxldFxpdGVtID0gXGludGVybmFsQml0ZW0KKyAgXGxldFxpdGVteCA9IFxpbnRlcm5hbEJpdGVteAorfQorXGRlZlxFdGFibGV7XGVuZGdyYWZcYWZ0ZXJlbnZicmVha30KK1xsZXRcRWZ0YWJsZVxFdGFibGUKK1xsZXRcRXZ0YWJsZVxFdGFibGUKK1xsZXRcRWl0ZW1pemVcRXRhYmxlCitcbGV0XEVlbnVtZXJhdGVcRXRhYmxlCisKKyUgVGhpcyBpcyB0aGUgY291bnRlciB1c2VkIGJ5IEBlbnVtZXJhdGUsIHdoaWNoIGlzIHJlYWxseSBAaXRlbWl6ZQorCitcbmV3Y291bnQgXGl0ZW1ubworCitcZW52ZGVmXGl0ZW1pemV7XHBhcnNlYXJnXGRvaXRlbWl6ZX0KKworXGRlZlxkb2l0ZW1pemUjMXslCisgIFxhYm92ZWVudmJyZWFrCisgIFxpdGVtbWF4PVxpdGVtaW5kZW50CisgIFxhZHZhbmNlXGl0ZW1tYXggYnkgLVxpdGVtbWFyZ2luCisgIFxhZHZhbmNlXGxlZnRza2lwIGJ5IFxpdGVtaW5kZW50CisgIFxleGRlbnRhbW91bnQ9XGl0ZW1pbmRlbnQKKyAgXHBhcmluZGVudD0wcHQKKyAgXHBhcnNraXA9XHNtYWxsc2tpcGFtb3VudAorICBcaWZkaW1ccGFyc2tpcD0wcHQgXHBhcnNraXA9MnB0IFxmaQorICBcZGVmXGl0ZW1jb250ZW50c3sjMX0lCisgICUgQGl0ZW1pemUgd2l0aCBubyBhcmcgaXMgZXF1aXZhbGVudCB0byBAaXRlbWl6ZSBAYnVsbGV0LgorICBcaWZ4XGl0ZW1jb250ZW50c1xlbXB0eVxkZWZcaXRlbWNvbnRlbnRze1xidWxsZXR9XGZpCisgIFxsZXRcaXRlbT1caXRlbWl6ZWl0ZW0KK30KKworJSBEZWZpbml0aW9uIG9mIEBpdGVtIHdoaWxlIGluc2lkZSBAaXRlbWl6ZSBhbmQgQGVudW1lcmF0ZS4KKyUKK1xkZWZcaXRlbWl6ZWl0ZW17JQorICBcYWR2YW5jZVxpdGVtbm8gYnkgMSAgJSBmb3IgZW51bWVyYXRpb25zCisgIHtcbGV0XHBhcj1cZW5kZ3JhZiBcc21hbGxicmVha30lIHJlYXNvbmFibGUgcGxhY2UgdG8gYnJlYWsKKyAgeyUKKyAgICUgSWYgdGhlIGRvY3VtZW50IGhhcyBhbiBAaXRlbWl6ZSBkaXJlY3RseSBhZnRlciBhIHNlY3Rpb24gdGl0bGUsIGEKKyAgICUgXG5vYnJlYWsgd2lsbCBiZSBsYXN0IG9uIHRoZSBsaXN0LCBhbmQgXHNlY3Rpb25oZWFkaW5nIHdpbGwgaGF2ZQorICAgJSBkb25lIGEgXHZza2lwLVxwYXJza2lwLiAgSW4gdGhhdCBjYXNlLCB3ZSBkb24ndCB3YW50IHRvIHplcm8KKyAgICUgcGFyc2tpcCwgb3IgdGhlIGl0ZW0gdGV4dCB3aWxsIGNyYXNoIHdpdGggdGhlIGhlYWRpbmcuICBPbiB0aGUKKyAgICUgb3RoZXIgaGFuZCwgd2hlbiB0aGVyZSBpcyBub3JtYWwgdGV4dCBwcmVjZWRpbmcgdGhlIGl0ZW0gKGFzIHRoZXJlCisgICAlIHVzdWFsbHkgaXMpLCB3ZSBkbyB3YW50IHRvIHplcm8gcGFyc2tpcCwgb3IgdGhlcmUgd291bGQgYmUgdG9vIG11Y2gKKyAgICUgc3BhY2UuICBJbiB0aGF0IGNhc2UsIHdlIHdvbid0IGhhdmUgYSBcbm9icmVhayBiZWZvcmUuICBBdCBsZWFzdAorICAgJSB0aGF0J3MgdGhlIHRoZW9yeS4KKyAgIFxpZm51bVxsYXN0cGVuYWx0eTwxMDAwMCBccGFyc2tpcD0waW4gXGZpCisgICBcbm9pbmRlbnQKKyAgIFxoYm94IHRvIDBwdHtcaHNzIFxpdGVtY29udGVudHMgXGtlcm5caXRlbW1hcmdpbn0lCisgICBcdmFkanVzdHtccGVuYWx0eSAxMjAwfX0lIG5vdCBnb29kIHRvIGJyZWFrIGFmdGVyIGZpcnN0IGxpbmUgb2YgaXRlbS4KKyAgXGZsdXNoY3IKK30KKworJSBcc3BsaXRvZmYgVE9LRU5TXGVuZG1hcmsgZGVmaW5lcyBcZmlyc3QgdG8gYmUgdGhlIGZpcnN0IHRva2VuIGluCislIFRPS0VOUywgYW5kIFxyZXN0IHRvIGJlIHRoZSByZW1haW5kZXIuCislCitcZGVmXHNwbGl0b2ZmIzEjMlxlbmRtYXJre1xkZWZcZmlyc3R7IzF9XGRlZlxyZXN0eyMyfX0lCisKKyUgQWxsb3cgYW4gb3B0aW9uYWwgYXJndW1lbnQgb2YgYW4gdXBwZXJjYXNlIGxldHRlciwgbG93ZXJjYXNlIGxldHRlciwKKyUgb3IgbnVtYmVyLCB0byBzcGVjaWZ5IHRoZSBmaXJzdCBsYWJlbCBpbiB0aGUgZW51bWVyYXRlZCBsaXN0LiAgTm8KKyUgYXJndW1lbnQgaXMgdGhlIHNhbWUgYXMgYDEnLgorJQorXGVudnBhcnNlYXJnZGVmXGVudW1lcmF0ZXtcZW51bWVyYXRleSAjMSAgXGVuZGVudW1lcmF0ZXl9CitcZGVmXGVudW1lcmF0ZXkgIzEgIzJcZW5kZW51bWVyYXRleXslCisgICUgSWYgd2Ugd2VyZSBnaXZlbiBubyBhcmd1bWVudCwgcHJldGVuZCB3ZSB3ZXJlIGdpdmVuIGAxJy4KKyAgXGRlZlx0aGVhcmd7IzF9JQorICBcaWZ4XHRoZWFyZ1xlbXB0eSBcZGVmXHRoZWFyZ3sxfVxmaQorICAlCisgICUgRGV0ZWN0IGlmIHRoZSBhcmd1bWVudCBpcyBhIHNpbmdsZSB0b2tlbi4gIElmIHNvLCBpdCBtaWdodCBiZSBhCisgICUgbGV0dGVyLiAgT3RoZXJ3aXNlLCB0aGUgb25seSB2YWxpZCB0aGluZyBpdCBjYW4gYmUgaXMgYSBudW1iZXIuCisgICUgKFdlIHdpbGwgYWx3YXlzIGhhdmUgb25lIHRva2VuLCBiZWNhdXNlIG9mIHRoZSB0ZXN0IHdlIGp1c3QgbWFkZS4KKyAgJSBUaGlzIGlzIGEgZ29vZCB0aGluZywgc2luY2UgXHNwbGl0b2ZmIGRvZXNuJ3Qgd29yayBnaXZlbiBub3RoaW5nIGF0CisgICUgYWxsIC0tIHRoZSBmaXJzdCBwYXJhbWV0ZXIgaXMgdW5kZWxpbWl0ZWQuKQorICBcZXhwYW5kYWZ0ZXJcc3BsaXRvZmZcdGhlYXJnXGVuZG1hcmsKKyAgXGlmeFxyZXN0XGVtcHR5CisgICAgJSBPbmx5IG9uZSB0b2tlbiBpbiB0aGUgYXJndW1lbnQuICBJdCBjb3VsZCBzdGlsbCBiZSBhbnl0aGluZy4KKyAgICAlIEEgYGBsb3dlcmNhc2UgbGV0dGVyJycgaXMgb25lIHdob3NlIFxsY2NvZGUgaXMgbm9uemVyby4KKyAgICAlIEFuIGBgdXBwZXJjYXNlIGxldHRlcicnIGlzIG9uZSB3aG9zZSBcbGNjb2RlIGlzIGJvdGggbm9uemVybywgYW5kCisgICAgJSAgIG5vdCBlcXVhbCB0byBpdHNlbGYuCisgICAgJSBPdGhlcndpc2UsIHdlIGFzc3VtZSBpdCdzIGEgbnVtYmVyLgorICAgICUKKyAgICAlIFdlIG5lZWQgdGhlIFxyZWxheCBhdCB0aGUgZW5kIG9mIHRoZSBcaWZudW0gbGluZXMgdG8gc3RvcCBUZVggZnJvbQorICAgICUgY29udGludWluZyB0byBsb29rIGZvciBhIDxudW1iZXI+LgorICAgICUKKyAgICBcaWZudW1cbGNjb2RlXGV4cGFuZGFmdGVyYFx0aGVhcmc9MFxyZWxheAorICAgICAgXG51bWVyaWNlbnVtZXJhdGUgJSBhIG51bWJlciAod2UgaG9wZSkKKyAgICBcZWxzZQorICAgICAgJSBJdCdzIGEgbGV0dGVyLgorICAgICAgXGlmbnVtXGxjY29kZVxleHBhbmRhZnRlcmBcdGhlYXJnPVxleHBhbmRhZnRlcmBcdGhlYXJnXHJlbGF4CisgICAgICAgIFxsb3dlcmNhc2VlbnVtZXJhdGUgJSBsb3dlcmNhc2UgbGV0dGVyCisgICAgICBcZWxzZQorICAgICAgICBcdXBwZXJjYXNlZW51bWVyYXRlICUgdXBwZXJjYXNlIGxldHRlcgorICAgICAgXGZpCisgICAgXGZpCisgIFxlbHNlCisgICAgJSBNdWx0aXBsZSB0b2tlbnMgaW4gdGhlIGFyZ3VtZW50LiAgV2UgaG9wZSBpdCdzIGEgbnVtYmVyLgorICAgIFxudW1lcmljZW51bWVyYXRlCisgIFxmaQorfQorCislIEFuIEBlbnVtZXJhdGUgd2hvc2UgbGFiZWxzIGFyZSBpbnRlZ2Vycy4gIFRoZSBzdGFydGluZyBpbnRlZ2VyIGlzCislIGdpdmVuIGluIFx0aGVhcmcuCislCitcZGVmXG51bWVyaWNlbnVtZXJhdGV7JQorICBcaXRlbW5vID0gXHRoZWFyZworICBcc3RhcnRlbnVtZXJhdGlvbntcdGhlXGl0ZW1ub30lCit9CisKKyUgVGhlIHN0YXJ0aW5nIChsb3dlcmNhc2UpIGxldHRlciBpcyBpbiBcdGhlYXJnLgorXGRlZlxsb3dlcmNhc2VlbnVtZXJhdGV7JQorICBcaXRlbW5vID0gXGV4cGFuZGFmdGVyYFx0aGVhcmcKKyAgXHN0YXJ0ZW51bWVyYXRpb257JQorICAgICUgQmUgc3VyZSB3ZSdyZSBub3QgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGFscGhhYmV0LgorICAgIFxpZm51bVxpdGVtbm89MAorICAgICAgXGVycm1lc3NhZ2V7Tm8gbW9yZSBsb3dlcmNhc2UgbGV0dGVycyBpbiBAZW51bWVyYXRlOyBnZXQgYSBiaWdnZXIKKyAgICAgICAgICAgICAgICAgIGFscGhhYmV0fSUKKyAgICBcZmkKKyAgICBcY2hhclxsY2NvZGVcaXRlbW5vCisgIH0lCit9CisKKyUgVGhlIHN0YXJ0aW5nICh1cHBlcmNhc2UpIGxldHRlciBpcyBpbiBcdGhlYXJnLgorXGRlZlx1cHBlcmNhc2VlbnVtZXJhdGV7JQorICBcaXRlbW5vID0gXGV4cGFuZGFmdGVyYFx0aGVhcmcKKyAgXHN0YXJ0ZW51bWVyYXRpb257JQorICAgICUgQmUgc3VyZSB3ZSdyZSBub3QgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGFscGhhYmV0LgorICAgIFxpZm51bVxpdGVtbm89MAorICAgICAgXGVycm1lc3NhZ2V7Tm8gbW9yZSB1cHBlcmNhc2UgbGV0dGVycyBpbiBAZW51bWVyYXRlOyBnZXQgYSBiaWdnZXIKKyAgICAgICAgICAgICAgICAgIGFscGhhYmV0fQorICAgIFxmaQorICAgIFxjaGFyXHVjY29kZVxpdGVtbm8KKyAgfSUKK30KKworJSBDYWxsIFxkb2l0ZW1pemUsIGFkZGluZyBhIHBlcmlvZCB0byB0aGUgZmlyc3QgYXJndW1lbnQgYW5kIHN1cHBseWluZyB0aGUKKyUgY29tbW9uIGxhc3QgdHdvIGFyZ3VtZW50cy4gIEFsc28gc3VidHJhY3Qgb25lIGZyb20gdGhlIGluaXRpYWwgdmFsdWUgaW4KKyUgXGl0ZW1ubywgc2luY2UgQGl0ZW0gaW5jcmVtZW50cyBcaXRlbW5vLgorJQorXGRlZlxzdGFydGVudW1lcmF0aW9uIzF7JQorICBcYWR2YW5jZVxpdGVtbm8gYnkgLTEKKyAgXGRvaXRlbWl6ZXsjMS59XGZsdXNoY3IKK30KKworJSBAYWxwaGFlbnVtZXJhdGUgYW5kIEBjYXBzZW51bWVyYXRlIGFyZSBhYmJyZXZpYXRpb25zIGZvciBnaXZpbmcgYW4gYXJnCislIHRvIEBlbnVtZXJhdGUuCislCitcZGVmXGFscGhhZW51bWVyYXRle1xlbnVtZXJhdGV7YX19CitcZGVmXGNhcHNlbnVtZXJhdGV7XGVudW1lcmF0ZXtBfX0KK1xkZWZcRWFscGhhZW51bWVyYXRle1xFZW51bWVyYXRlfQorXGRlZlxFY2Fwc2VudW1lcmF0ZXtcRWVudW1lcmF0ZX0KKworCislIEBtdWx0aXRhYmxlIG1hY3JvcworJSBBbXkgSGVuZHJpY2tzb24sIDgvMTgvOTQsIDMvNi85NgorJQorJSBAbXVsdGl0YWJsZSAuLi4gQGVuZCBtdWx0aXRhYmxlIHdpbGwgbWFrZSBhcyBtYW55IGNvbHVtbnMgYXMgZGVzaXJlZC4KKyUgQ29udGVudHMgb2YgZWFjaCBjb2x1bW4gd2lsbCB3cmFwIGF0IHdpZHRoIGdpdmVuIGluIHByZWFtYmxlLiAgV2lkdGgKKyUgY2FuIGJlIHNwZWNpZmllZCBlaXRoZXIgd2l0aCBzYW1wbGUgdGV4dCBnaXZlbiBpbiBhIHRlbXBsYXRlIGxpbmUsCislIG9yIGluIHBlcmNlbnQgb2YgXGhzaXplLCB0aGUgY3VycmVudCB3aWR0aCBvZiB0ZXh0IG9uIHBhZ2UuCisKKyUgVGFibGUgY2FuIGNvbnRpbnVlIG92ZXIgcGFnZXMgYnV0IHdpbGwgb25seSBicmVhayBiZXR3ZWVuIGxpbmVzLgorCislIFRvIG1ha2UgcHJlYW1ibGU6CislCislIEVpdGhlciBkZWZpbmUgd2lkdGhzIG9mIGNvbHVtbnMgaW4gdGVybXMgb2YgcGVyY2VudCBvZiBcaHNpemU6CislICAgQG11bHRpdGFibGUgQGNvbHVtbmZyYWN0aW9ucyAuMjUgLjMgLjQ1CislICAgQGl0ZW0gLi4uCislCislICAgTnVtYmVycyBmb2xsb3dpbmcgQGNvbHVtbmZyYWN0aW9ucyBhcmUgdGhlIHBlcmNlbnQgb2YgdGhlIHRvdGFsCislICAgY3VycmVudCBoc2l6ZSB0byBiZSB1c2VkIGZvciBlYWNoIGNvbHVtbi4gWW91IG1heSB1c2UgYXMgbWFueQorJSAgIGNvbHVtbnMgYXMgZGVzaXJlZC4KKworCislIE9yIHVzZSBhIHRlbXBsYXRlOgorJSAgIEBtdWx0aXRhYmxlIHtDb2x1bW4gMSB0ZW1wbGF0ZX0ge0NvbHVtbiAyIHRlbXBsYXRlfSB7Q29sdW1uIDMgdGVtcGxhdGV9CislICAgQGl0ZW0gLi4uCislICAgdXNpbmcgdGhlIHdpZGVzdCB0ZXJtIGRlc2lyZWQgaW4gZWFjaCBjb2x1bW4uCisKKyUgRWFjaCBuZXcgdGFibGUgbGluZSBzdGFydHMgd2l0aCBAaXRlbSwgZWFjaCBzdWJzZXF1ZW50IG5ldyBjb2x1bW4KKyUgc3RhcnRzIHdpdGggQHRhYi4gRW1wdHkgY29sdW1ucyBtYXkgYmUgcHJvZHVjZWQgYnkgc3VwcGx5aW5nIEB0YWIncworJSB3aXRoIG5vdGhpbmcgYmV0d2VlbiB0aGVtIGZvciBhcyBtYW55IHRpbWVzIGFzIGVtcHR5IGNvbHVtbnMgYXJlIG5lZWRlZCwKKyUgaWUsIEB0YWJAdGFiQHRhYiB3aWxsIHByb2R1Y2UgdHdvIGVtcHR5IGNvbHVtbnMuCisKKyUgQGl0ZW0sIEB0YWIgZG8gbm90IG5lZWQgdG8gYmUgb24gdGhlaXIgb3duIGxpbmVzLCBidXQgaXQgd2lsbCBub3QgaHVydAorJSBpZiB0aGV5IGFyZS4KKworJSBTYW1wbGUgbXVsdGl0YWJsZToKKworJSAgIEBtdWx0aXRhYmxlIHtDb2x1bW4gMSB0ZW1wbGF0ZX0ge0NvbHVtbiAyIHRlbXBsYXRlfSB7Q29sdW1uIDMgdGVtcGxhdGV9CislICAgQGl0ZW0gZmlyc3QgY29sIHN0dWZmIEB0YWIgc2Vjb25kIGNvbCBzdHVmZiBAdGFiIHRoaXJkIGNvbAorJSAgIEBpdGVtCislICAgZmlyc3QgY29sIHN0dWZmCislICAgQHRhYgorJSAgIHNlY29uZCBjb2wgc3R1ZmYKKyUgICBAdGFiCislICAgdGhpcmQgY29sCislICAgQGl0ZW0gZmlyc3QgY29sIHN0dWZmIEB0YWIgc2Vjb25kIGNvbCBzdHVmZgorJSAgIEB0YWIgTWFueSBwYXJhZ3JhcGhzIG9mIHRleHQgbWF5IGJlIHVzZWQgaW4gYW55IGNvbHVtbi4KKyUKKyUgICAgICAgICBUaGV5IHdpbGwgd3JhcCBhdCB0aGUgd2lkdGggZGV0ZXJtaW5lZCBieSB0aGUgdGVtcGxhdGUuCislICAgQGl0ZW1AdGFiQHRhYiBUaGlzIHdpbGwgYmUgaW4gdGhpcmQgY29sdW1uLgorJSAgIEBlbmQgbXVsdGl0YWJsZQorCislIERlZmF1bHQgZGltZW5zaW9ucyBtYXkgYmUgcmVzZXQgYnkgdXNlci4KKyUgQG11bHRpdGFibGVwYXJza2lwIGlzIHZlcnRpY2FsIHNwYWNlIGJldHdlZW4gcGFyYWdyYXBocyBpbiB0YWJsZS4KKyUgQG11bHRpdGFibGVwYXJpbmRlbnQgaXMgcGFyYWdyYXBoIGluZGVudCBpbiB0YWJsZS4KKyUgQG11bHRpdGFibGVjb2xtYXJnaW4gaXMgaG9yaXpvbnRhbCBzcGFjZSB0byBiZSBsZWZ0IGJldHdlZW4gY29sdW1ucy4KKyUgQG11bHRpdGFibGVsaW5lc3BhY2UgaXMgc3BhY2UgdG8gbGVhdmUgYmV0d2VlbiB0YWJsZSBpdGVtcywgYmFzZWxpbmUKKyUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBiYXNlbGluZS4KKyUgICAwcHQgbWVhbnMgaXQgZGVwZW5kcyBvbiBjdXJyZW50IG5vcm1hbCBsaW5lIHNwYWNpbmcuCislCitcbmV3c2tpcFxtdWx0aXRhYmxlcGFyc2tpcAorXG5ld3NraXBcbXVsdGl0YWJsZXBhcmluZGVudAorXG5ld2RpbWVuXG11bHRpdGFibGVjb2xzcGFjZQorXG5ld3NraXBcbXVsdGl0YWJsZWxpbmVzcGFjZQorXG11bHRpdGFibGVwYXJza2lwPTBwdAorXG11bHRpdGFibGVwYXJpbmRlbnQ9NnB0CitcbXVsdGl0YWJsZWNvbHNwYWNlPTEycHQKK1xtdWx0aXRhYmxlbGluZXNwYWNlPTBwdAorCislIE1hY3JvcyB1c2VkIHRvIHNldCB1cCBoYWxpZ24gcHJlYW1ibGU6CislCitcbGV0XGVuZHNldHVwdGFibGVccmVsYXgKK1xkZWZceGVuZHNldHVwdGFibGV7XGVuZHNldHVwdGFibGV9CitcbGV0XGNvbHVtbmZyYWN0aW9uc1xyZWxheAorXGRlZlx4Y29sdW1uZnJhY3Rpb25ze1xjb2x1bW5mcmFjdGlvbnN9CitcbmV3aWZcaWZzZXRwZXJjZW50CisKKyUgIzEgaXMgdGhlIEBjb2x1bW5mcmFjdGlvbiwgdXN1YWxseSBhIGRlY2ltYWwgbnVtYmVyIGxpa2UgLjUsIGJ1dCBtaWdodAorJSBiZSBqdXN0IDEuICBXZSBqdXN0IHVzZSBpdCwgd2hhdGV2ZXIgaXQgaXMuCislCitcZGVmXHBpY2t1cHdob2xlZnJhY3Rpb24jMSB7JQorICBcZ2xvYmFsXGFkdmFuY2VcY29sY291bnQgYnkgMQorICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWUgY29sXHRoZVxjb2xjb3VudFxlbmRjc25hbWV7IzFcaHNpemV9JQorICBcc2V0dXB0YWJsZQorfQorCitcbmV3Y291bnRcY29sY291bnQKK1xkZWZcc2V0dXB0YWJsZSMxeyUKKyAgXGRlZlxmaXJzdGFyZ3sjMX0lCisgIFxpZnhcZmlyc3RhcmdceGVuZHNldHVwdGFibGUKKyAgICBcbGV0XGdvID0gXHJlbGF4CisgIFxlbHNlCisgICAgXGlmeFxmaXJzdGFyZ1x4Y29sdW1uZnJhY3Rpb25zCisgICAgICBcZ2xvYmFsXHNldHBlcmNlbnR0cnVlCisgICAgXGVsc2UKKyAgICAgIFxpZnNldHBlcmNlbnQKKyAgICAgICAgIFxsZXRcZ29ccGlja3Vwd2hvbGVmcmFjdGlvbgorICAgICAgXGVsc2UKKyAgICAgICAgIFxnbG9iYWxcYWR2YW5jZVxjb2xjb3VudCBieSAxCisgICAgICAgICBcc2V0Ym94MD1caGJveHsjMVx1bnNraXBcc3BhY2V9JSBBZGQgYSBub3JtYWwgd29yZCBzcGFjZSBhcyBhCisgICAgICAgICAgICAgICAgICAgJSBzZXBhcmF0b3I7IHR5cGljYWxseSB0aGF0IGlzIGFsd2F5cyBpbiB0aGUgaW5wdXQsIGFueXdheS4KKyAgICAgICAgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZSBjb2xcdGhlXGNvbGNvdW50XGVuZGNzbmFtZXtcdGhlXHdkMH0lCisgICAgICBcZmkKKyAgICBcZmkKKyAgICBcaWZ4XGdvXHBpY2t1cHdob2xlZnJhY3Rpb24KKyAgICAgICUgUHV0IHRoZSBhcmd1bWVudCBiYWNrIGZvciB0aGUgXHBpY2t1cHdob2xlZnJhY3Rpb24gY2FsbCwgc28KKyAgICAgICUgd2UnbGwgYWx3YXlzIGhhdmUgYSBwZXJpb2QgdGhlcmUgdG8gYmUgcGFyc2VkLgorICAgICAgXGRlZlxnb3tccGlja3Vwd2hvbGVmcmFjdGlvbiMxfSUKKyAgICBcZWxzZQorICAgICAgXGxldFxnbyA9IFxzZXR1cHRhYmxlCisgICAgXGZpJQorICBcZmkKKyAgXGdvCit9CisKKyUgbXVsdGl0YWJsZS1vbmx5IGNvbW1hbmRzLgorJQorJSBAaGVhZGl0ZW0gc3RhcnRzIGEgaGVhZGluZyByb3csIHdoaWNoIHdlIHR5cGVzZXQgaW4gYm9sZC4KKyUgQXNzaWdubWVudHMgaGF2ZSB0byBiZSBnbG9iYWwgc2luY2Ugd2UgYXJlIGluc2lkZSB0aGUgaW1wbGljaXQgZ3JvdXAKKyUgb2YgYW4gYWxpZ25tZW50IGVudHJ5LiAgTm90ZSB0aGF0IFxldmVyeWNyIHJlc2V0cyBcZXZlcnl0YWIuCitcZGVmXGhlYWRpdGVte1xjaGVja2VudlxtdWx0aXRhYmxlIFxjcmNyIFxnbG9iYWxcZXZlcnl0YWI9e1xiZn1cdGhlXGV2ZXJ5dGFifSUKKyUKKyUgQSBcdGFiIHVzZWQgdG8gaW5jbHVkZSBcaHNraXAxc3AuICBCdXQgdGhlbiB0aGUgc3BhY2UgaW4gYSB0ZW1wbGF0ZQorJSBsaW5lIGlzIG5vdCBlbm91Z2guICBUaGF0IGlzIGJhZC4gIFNvIGxldCdzIGdvIGJhY2sgdG8ganVzdCBgJicgdW50aWwKKyUgd2UgZW5jb3VudGVyIHRoZSBwcm9ibGVtIGl0IHdhcyBpbnRlbmRlZCB0byBzb2x2ZSBhZ2Fpbi4KKyUJCQkJCS0ta2FybCwgbmF0aGFuQGFjbS5vcmcsIDIwYXByOTkuCitcZGVmXHRhYntcY2hlY2tlbnZcbXVsdGl0YWJsZSAmXHRoZVxldmVyeXRhYn0lCisKKyUgQG11bHRpdGFibGUgLi4uIEBlbmQgbXVsdGl0YWJsZSBkZWZpbml0aW9uczoKKyUKK1xuZXd0b2tzXGV2ZXJ5dGFiICAlIGluc2VydCBhZnRlciBldmVyeSB0YWIuCislCitcZW52ZGVmXG11bHRpdGFibGV7JQorICBcdnNraXBccGFyc2tpcAorICBcc3RhcnRzYXZpbmdpbnNlcnRzCisgICUKKyAgJSBAaXRlbSB3aXRoaW4gYSBtdWx0aXRhYmxlIHN0YXJ0cyBhIG5vcm1hbCByb3cuCisgICUgV2UgdXNlIFxkZWYgaW5zdGVhZCBvZiBcbGV0IHNvIHRoYXQgaWYgb25lIG9mIHRoZSBtdWx0aXRhYmxlIGVudHJpZXMKKyAgJSBjb250YWlucyBhbiBAaXRlbWl6ZSwgd2UgZG9uJ3QgY2hva2Ugb24gdGhlIFxpdGVtIChzZWVuIGFzIFxjcmNyIGFrYQorICAlIFxlbmR0ZW1wbGF0ZSkgZXhwYW5kaW5nIFxkb2l0ZW1pemUuCisgIFxkZWZcaXRlbXtcY3Jjcn0lCisgICUKKyAgXHRvbGVyYW5jZT05NTAwCisgIFxoYmFkbmVzcz05NTAwCisgIFxzZXRtdWx0aXRhYmxlc3BhY2luZworICBccGFyc2tpcD1cbXVsdGl0YWJsZXBhcnNraXAKKyAgXHBhcmluZGVudD1cbXVsdGl0YWJsZXBhcmluZGVudAorICBcb3ZlcmZ1bGxydWxlPTBwdAorICBcZ2xvYmFsXGNvbGNvdW50PTAKKyAgJQorICBcZXZlcnljciA9IHslCisgICAgXG5vYWxpZ257JQorICAgICAgXGdsb2JhbFxldmVyeXRhYj17fSUKKyAgICAgIFxnbG9iYWxcY29sY291bnQ9MCAlIFJlc2V0IHRoZSBjb2x1bW4gY291bnRlci4KKyAgICAgICUgQ2hlY2sgZm9yIHNhdmVkIGZvb3Rub3RlcywgZXRjLgorICAgICAgXGNoZWNraW5zZXJ0cworICAgICAgJSBLZWVwcyB1bmRlcmZ1bGwgYm94IG1lc3NhZ2VzIG9mZiB3aGVuIHRhYmxlIGJyZWFrcyBvdmVyIHBhZ2VzLgorICAgICAgJVxmaWxicmVhaworCSUgTWF5YmUgc28sIGJ1dCBpdCBhbHNvIGNyZWF0ZXMgcmVhbGx5IHdlaXJkIHBhZ2UgYnJlYWtzIHdoZW4gdGhlCisJJSB0YWJsZSBicmVha3Mgb3ZlciBwYWdlcy4gV291bGRuJ3QgXHZmaWwgYmUgYmV0dGVyPyAgV2FpdCB1bnRpbCB0aGUKKwklIHByb2JsZW0gbWFuaWZlc3RzIGl0c2VsZiwgc28gaXQgY2FuIGJlIGZpeGVkIGZvciByZWFsIC0ta2FybC4KKyAgICB9JQorICB9JQorICAlCisgIFxwYXJzZWFyZ1xkb211bHRpdGFibGUKK30KK1xkZWZcZG9tdWx0aXRhYmxlIzF7JQorICAlIFRvIHBhcnNlIGV2ZXJ5dGhpbmcgYmV0d2VlbiBAbXVsdGl0YWJsZSBhbmQgQGl0ZW06CisgIFxzZXR1cHRhYmxlIzEgXGVuZHNldHVwdGFibGUKKyAgJQorICAlIFRoaXMgcHJlYW1ibGUgc2V0cyB1cCBhIGdlbmVyaWMgY29sdW1uIGRlZmluaXRpb24sIHdoaWNoIHdpbGwKKyAgJSBiZSB1c2VkIGFzIG1hbnkgdGltZXMgYXMgdXNlciBjYWxscyBmb3IgY29sdW1ucy4KKyAgJSBcdnRvcCB3aWxsIHNldCBhIHNpbmdsZSBsaW5lIGFuZCB3aWxsIGFsc28gbGV0IHRleHQgd3JhcCBhbmQKKyAgJSBjb250aW51ZSBmb3IgbWFueSBwYXJhZ3JhcGhzIGlmIGRlc2lyZWQuCisgIFxoYWxpZ25cYmdyb3VwICYlCisgICAgXGdsb2JhbFxhZHZhbmNlXGNvbGNvdW50IGJ5IDEKKyAgICBcbXVsdGlzdHJ1dAorICAgIFx2dG9weyUKKyAgICAgICUgVXNlIHRoZSBjdXJyZW50IFxjb2xjb3VudCB0byBmaW5kIHRoZSBjb3JyZWN0IGNvbHVtbiB3aWR0aDoKKyAgICAgIFxoc2l6ZT1cZXhwYW5kYWZ0ZXJcY3NuYW1lIGNvbFx0aGVcY29sY291bnRcZW5kY3NuYW1lCisgICAgICAlCisgICAgICAlIEluIG9yZGVyIHRvIGtlZXAgZW50cmllcyBmcm9tIGJ1bXBpbmcgaW50byBlYWNoIG90aGVyCisgICAgICAlIHdlIHdpbGwgYWRkIGEgXGxlZnRza2lwIG9mIFxtdWx0aXRhYmxlY29sc3BhY2UgdG8gYWxsIGNvbHVtbnMgYWZ0ZXIKKyAgICAgICUgdGhlIGZpcnN0IG9uZS4KKyAgICAgICUKKyAgICAgICUgSWYgYSB0ZW1wbGF0ZSBoYXMgYmVlbiB1c2VkLCB3ZSB3aWxsIGFkZCBcbXVsdGl0YWJsZWNvbHNwYWNlCisgICAgICAlIHRvIHRoZSB3aWR0aCBvZiBlYWNoIHRlbXBsYXRlIGVudHJ5LgorICAgICAgJQorICAgICAgJSBJZiB0aGUgdXNlciBoYXMgc2V0IHByZWFtYmxlIGluIHRlcm1zIG9mIHBlcmNlbnQgb2YgXGhzaXplIHdlIHdpbGwKKyAgICAgICUgdXNlIHRoYXQgZGltZW5zaW9uIGFzIHRoZSB3aWR0aCBvZiB0aGUgY29sdW1uLCBhbmQgdGhlIFxsZWZ0c2tpcAorICAgICAgJSB3aWxsIGtlZXAgZW50cmllcyBmcm9tIGJ1bXBpbmcgaW50byBlYWNoIG90aGVyLiAgVGFibGUgd2lsbCBzdGFydCBhdAorICAgICAgJSBsZWZ0IG1hcmdpbiBhbmQgZmluYWwgY29sdW1uIHdpbGwganVzdGlmeSBhdCByaWdodCBtYXJnaW4uCisgICAgICAlCisgICAgICAlIE1ha2Ugc3VyZSB3ZSBkb24ndCBpbmhlcml0IFxyaWdodHNraXAgZnJvbSB0aGUgb3V0ZXIgZW52aXJvbm1lbnQuCisgICAgICBccmlnaHRza2lwPTBwdAorICAgICAgXGlmbnVtXGNvbGNvdW50PTEKKwklIFRoZSBmaXJzdCBjb2x1bW4gd2lsbCBiZSBpbmRlbnRlZCB3aXRoIHRoZSBzdXJyb3VuZGluZyB0ZXh0LgorCVxhZHZhbmNlXGhzaXplIGJ5XGxlZnRza2lwCisgICAgICBcZWxzZQorCVxpZnNldHBlcmNlbnQgXGVsc2UKKwkgICUgSWYgdXNlciBoYXMgbm90IHNldCBwcmVhbWJsZSBpbiB0ZXJtcyBvZiBwZXJjZW50IG9mIFxoc2l6ZQorCSAgJSB3ZSB3aWxsIGFkdmFuY2UgXGhzaXplIGJ5IFxtdWx0aXRhYmxlY29sc3BhY2UuCisJICBcYWR2YW5jZVxoc2l6ZSBieSBcbXVsdGl0YWJsZWNvbHNwYWNlCisJXGZpCisgICAgICAgJSBJbiBlaXRoZXIgY2FzZSB3ZSB3aWxsIG1ha2UgXGxlZnRza2lwPVxtdWx0aXRhYmxlY29sc3BhY2U6CisgICAgICBcbGVmdHNraXA9XG11bHRpdGFibGVjb2xzcGFjZQorICAgICAgXGZpCisgICAgICAlIElnbm9yaW5nIHNwYWNlIGF0IHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBhdm9pZHMgYW4gb2NjYXNpb25hbCBzcHVyaW91cworICAgICAgJSBibGFuayBsaW5lLCB3aGVuIFRlWCBkZWNpZGVzIHRvIGJyZWFrIHRoZSBsaW5lIGF0IHRoZSBzcGFjZSBiZWZvcmUgdGhlCisgICAgICAlIGJveCBmcm9tIHRoZSBtdWx0aXN0cnV0LCBzbyB0aGUgc3RydXQgZW5kcyB1cCBvbiBhIGxpbmUgYnkgaXRzZWxmLgorICAgICAgJSBGb3IgZXhhbXBsZToKKyAgICAgICUgQG11bHRpdGFibGUgQGNvbHVtbmZyYWN0aW9ucyAuMTEgLjg5CisgICAgICAlIEBpdGVtIEBjb2RleyN9CisgICAgICAlIEB0YWIgTGVnYWwgaG9saWRheSB3aGljaCBpcyB2YWxpZCBpbiBtYWpvciBwYXJ0cyBvZiB0aGUgd2hvbGUgY291bnRyeS4KKyAgICAgICUgSXMgYXV0b21hdGljYWxseSBwcm92aWRlZCB3aXRoIGhpZ2hsaWdodGluZyBzZXF1ZW5jZXMgcmVzcGVjdGl2ZWx5CisgICAgICAlIG1hcmtpbmcgY2hhcmFjdGVycy4KKyAgICAgIFxub2luZGVudFxpZ25vcmVzcGFjZXMjI1x1bnNraXBcbXVsdGlzdHJ1dAorICAgIH1cY3IKK30KK1xkZWZcRW11bHRpdGFibGV7JQorICBcY3JjcgorICBcZWdyb3VwICUgZW5kIHRoZSBcaGFsaWduCisgIFxnbG9iYWxcc2V0cGVyY2VudGZhbHNlCit9CisKK1xkZWZcc2V0bXVsdGl0YWJsZXNwYWNpbmd7JQorICBcZGVmXG11bHRpc3RydXR7XHN0cnV0fSUganVzdCB1c2UgdGhlIHN0YW5kYXJkIGxpbmUgc3BhY2luZworICAlCisgICUgQ29tcHV0ZSBcbXVsdGl0YWJsZWxpbmVzcGFjZSAoaWYgbm90IGRlZmluZWQgYnkgdXNlcikgZm9yIHVzZSBpbgorICAlIFxtdWx0aXRhYmxlcGFyc2tpcCBjYWxjdWxhdGlvbi4gIFdlIHVzZWQgZGVmaW5lIFxtdWx0aXN0cnV0IGJhc2VkIG9uCisgICUgdGhpcywgYnV0IChpcm9uaWNhbGx5KSB0aGF0IGNhdXNlZCB0aGUgc3BhY2luZyB0byBiZSBvZmYuCisgICUgU2VlIGJ1Zy10ZXhpbmZvIHJlcG9ydCBmcm9tIFdlcm5lciBMZW1iZXJnLCAzMSBPY3QgMjAwNCAxMjo1MjoyMCArMDEwMC4KK1xpZmRpbVxtdWx0aXRhYmxlbGluZXNwYWNlPTBwdAorXHNldGJveDA9XHZib3h7WH1cZ2xvYmFsXG11bHRpdGFibGVsaW5lc3BhY2U9XHRoZVxiYXNlbGluZXNraXAKK1xnbG9iYWxcYWR2YW5jZVxtdWx0aXRhYmxlbGluZXNwYWNlIGJ5LVxodDAKK1xmaQorJSUgVGVzdCB0byBzZWUgaWYgcGFyc2tpcCBpcyBsYXJnZXIgdGhhbiBzcGFjZSBiZXR3ZWVuIGxpbmVzIG9mCislJSB0YWJsZS4gSWYgbm90LCBkbyBub3RoaW5nLgorJSUgICAgICAgIElmIHNvLCBzZXQgdG8gc2FtZSBkaW1lbnNpb24gYXMgbXVsdGl0YWJsZWxpbmVzcGFjZS4KK1xpZmRpbVxtdWx0aXRhYmxlcGFyc2tpcD5cbXVsdGl0YWJsZWxpbmVzcGFjZQorXGdsb2JhbFxtdWx0aXRhYmxlcGFyc2tpcD1cbXVsdGl0YWJsZWxpbmVzcGFjZQorXGdsb2JhbFxhZHZhbmNlXG11bHRpdGFibGVwYXJza2lwLTdwdCAlJSB0byBrZWVwIHBhcnNraXAgc29tZXdoYXQgc21hbGxlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlJSB0aGFuIHNraXAgYmV0d2VlbiBsaW5lcyBpbiB0aGUgdGFibGUuCitcZmklCitcaWZkaW1cbXVsdGl0YWJsZXBhcnNraXA9MHB0CitcZ2xvYmFsXG11bHRpdGFibGVwYXJza2lwPVxtdWx0aXRhYmxlbGluZXNwYWNlCitcZ2xvYmFsXGFkdmFuY2VcbXVsdGl0YWJsZXBhcnNraXAtN3B0ICUlIHRvIGtlZXAgcGFyc2tpcCBzb21ld2hhdCBzbWFsbGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUlIHRoYW4gc2tpcCBiZXR3ZWVuIGxpbmVzIGluIHRoZSB0YWJsZS4KK1xmaX0KKworCitcbWVzc2FnZXtjb25kaXRpb25hbHMsfQorCislIEBpZnRleCwgQGlmbm90ZG9jYm9vaywgQGlmbm90aHRtbCwgQGlmbm90aW5mbywgQGlmbm90cGxhaW50ZXh0LAorJSBAaWZub3R4bWwgYWx3YXlzIHN1Y2NlZWQuICBUaGV5IGN1cnJlbnRseSBkbyBub3RoaW5nOyB3ZSBkb24ndAorJSBhdHRlbXB0IHRvIGNoZWNrIHdoZXRoZXIgdGhlIGNvbmRpdGlvbmFscyBhcmUgcHJvcGVybHkgbmVzdGVkLiAgQnV0IHdlCislIGhhdmUgdG8gcmVtZW1iZXIgdGhhdCB0aGV5IGFyZSBjb25kaXRpb25hbHMsIHNvIHRoYXQgQGVuZCBkb2Vzbid0CislIGF0dGVtcHQgdG8gY2xvc2UgYW4gZW52aXJvbm1lbnQgZ3JvdXAuCislCitcZGVmXG1ha2Vjb25kIzF7JQorICBcZXhwYW5kYWZ0ZXJcbGV0XGNzbmFtZSAjMVxlbmRjc25hbWUgPSBccmVsYXgKKyAgXGV4cGFuZGFmdGVyXGxldFxjc25hbWUgaXNjb25kLiMxXGVuZGNzbmFtZSA9IDEKK30KK1xtYWtlY29uZHtpZnRleH0KK1xtYWtlY29uZHtpZm5vdGRvY2Jvb2t9CitcbWFrZWNvbmR7aWZub3RodG1sfQorXG1ha2Vjb25ke2lmbm90aW5mb30KK1xtYWtlY29uZHtpZm5vdHBsYWludGV4dH0KK1xtYWtlY29uZHtpZm5vdHhtbH0KKworJSBJZ25vcmUgQGlnbm9yZSwgQGlmaHRtbCwgQGlmaW5mbywgYW5kIHRoZSBsaWtlLgorJQorXGRlZlxkaXJlbnRyeXtcZG9pZ25vcmV7ZGlyZW50cnl9fQorXGRlZlxkb2N1bWVudGRlc2NyaXB0aW9ue1xkb2lnbm9yZXtkb2N1bWVudGRlc2NyaXB0aW9ufX0KK1xkZWZcZG9jYm9va3tcZG9pZ25vcmV7ZG9jYm9va319CitcZGVmXGh0bWx7XGRvaWdub3Jle2h0bWx9fQorXGRlZlxpZmRvY2Jvb2t7XGRvaWdub3Jle2lmZG9jYm9va319CitcZGVmXGlmaHRtbHtcZG9pZ25vcmV7aWZodG1sfX0KK1xkZWZcaWZpbmZve1xkb2lnbm9yZXtpZmluZm99fQorXGRlZlxpZm5vdHRleHtcZG9pZ25vcmV7aWZub3R0ZXh9fQorXGRlZlxpZnBsYWludGV4dHtcZG9pZ25vcmV7aWZwbGFpbnRleHR9fQorXGRlZlxpZnhtbHtcZG9pZ25vcmV7aWZ4bWx9fQorXGRlZlxpZ25vcmV7XGRvaWdub3Jle2lnbm9yZX19CitcZGVmXG1lbnV7XGRvaWdub3Jle21lbnV9fQorXGRlZlx4bWx7XGRvaWdub3Jle3htbH19CisKKyUgSWdub3JlIHRleHQgdW50aWwgYSBsaW5lIGBAZW5kICMxJywga2VlcGluZyB0cmFjayBvZiBuZXN0ZWQgY29uZGl0aW9uYWxzLgorJQorJSBBIGNvdW50IHRvIHJlbWVtYmVyIHRoZSBkZXB0aCBvZiBuZXN0aW5nLgorXG5ld2NvdW50XGRvaWdub3JlY291bnQKKworXGRlZlxkb2lnbm9yZSMxe1xiZWdpbmdyb3VwCisgICUgU2NhbiBpbiBgYHZlcmJhdGltJycgbW9kZToKKyAgXG9iZXlsaW5lcworICBcY2F0Y29kZWBcQCA9IFxvdGhlcgorICBcY2F0Y29kZWBceyA9IFxvdGhlcgorICBcY2F0Y29kZWBcfSA9IFxvdGhlcgorICAlCisgICUgTWFrZSBzdXJlIHRoYXQgc3BhY2VzIHR1cm4gaW50byB0b2tlbnMgdGhhdCBtYXRjaCB3aGF0IFxkb2lnbm9yZXRleHQgd2FudHMuCisgIFxzcGFjZWlzc3BhY2UKKyAgJQorICAlIENvdW50IG51bWJlciBvZiAjMSdzIHRoYXQgd2UndmUgc2Vlbi4KKyAgXGRvaWdub3JlY291bnQgPSAwCisgICUKKyAgJSBTd2FsbG93IHRleHQgdW50aWwgd2UgcmVhY2ggdGhlIG1hdGNoaW5nIGBAZW5kICMxJy4KKyAgXGRvZG9pZ25vcmV7IzF9JQorfQorCit7IFxjYXRjb2RlYF89MTEgJSBXZSB3YW50IHRvIHVzZSBcX1NUT1BfIHdoaWNoIGNhbm5vdCBhcHBlYXIgaW4gdGV4aW5mbyBzb3VyY2UuCisgIFxvYmV5bGluZXMgJQorICAlCisgIFxnZGVmXGRvZG9pZ25vcmUjMXslCisgICAgJSAjMSBjb250YWlucyB0aGUgY29tbWFuZCBuYW1lIGFzIGEgc3RyaW5nLCBlLmcuLCBgaWZpbmZvJy4KKyAgICAlCisgICAgJSBEZWZpbmUgYSBjb21tYW5kIHRvIGZpbmQgdGhlIG5leHQgYEBlbmQgIzEnLgorICAgIFxsb25nXGRlZlxkb2lnbm9yZXRleHQjIzFeXk1AZW5kICMxeyUKKyAgICAgIFxkb2lnbm9yZXRleHR5eXkjIzFeXk1AIzFcX1NUT1BffSUKKyAgICAlCisgICAgJSBBbmQgdGhpcyBjb21tYW5kIHRvIGZpbmQgYW5vdGhlciAjMSBjb21tYW5kLCBhdCB0aGUgYmVnaW5uaW5nIG9mIGEKKyAgICAlIGxpbmUuICAoT3RoZXJ3aXNlLCB3ZSB3b3VsZCBjb25zaWRlciBhIGxpbmUgYEBjIEBpZnNldCcsIGZvcgorICAgICUgZXhhbXBsZSwgdG8gY291bnQgYXMgYW4gQGlmc2V0IGZvciBuZXN0aW5nLikKKyAgICBcbG9uZ1xkZWZcZG9pZ25vcmV0ZXh0eXl5IyMxXl5NQCMxIyMyXF9TVE9QX3tcZG9pZ25vcmV5eXl7IyMyfVxfU1RPUF99JQorICAgICUKKyAgICAlIEFuZCBub3cgZXhwYW5kIHRoYXQgY29tbWFuZC4KKyAgICBcZG9pZ25vcmV0ZXh0IF5eTSUKKyAgfSUKK30KKworXGRlZlxkb2lnbm9yZXl5eSMxeyUKKyAgXGRlZlx0ZW1weyMxfSUKKyAgXGlmeFx0ZW1wXGVtcHR5CQkJJSBOb3RoaW5nIGZvdW5kLgorICAgIFxsZXRcbmV4dFxkb2lnbm9yZXRleHR6enoKKyAgXGVsc2UJCQkJCSUgRm91bmQgYSBuZXN0ZWQgY29uZGl0aW9uLCAuLi4KKyAgICBcYWR2YW5jZVxkb2lnbm9yZWNvdW50IGJ5IDEKKyAgICBcbGV0XG5leHRcZG9pZ25vcmV0ZXh0eXl5CQklIC4uLiwgbG9vayBmb3IgYW5vdGhlci4KKyAgICAlIElmIHdlJ3JlIGhlcmUsICMxIGVuZHMgd2l0aCBeXk1caWZpbmZvIChmb3IgZXhhbXBsZSkuCisgIFxmaQorICBcbmV4dCAjMSUgdGhlIHRva2VuIFxfU1RPUF8gaXMgcHJlc2VudCBqdXN0IGFmdGVyIHRoaXMgbWFjcm8uCit9CisKKyUgV2UgaGF2ZSB0byBzd2FsbG93IHRoZSByZW1haW5pbmcgIlxfU1RPUF8iLgorJQorXGRlZlxkb2lnbm9yZXRleHR6enojMXslCisgIFxpZm51bVxkb2lnbm9yZWNvdW50ID0gMAklIFdlIGhhdmUganVzdCBmb3VuZCB0aGUgb3V0ZXJtb3N0IEBlbmQuCisgICAgXGxldFxuZXh0XGVuZGRvaWdub3JlCisgIFxlbHNlCQkJCSUgU3RpbGwgaW5zaWRlIGEgbmVzdGVkIGNvbmRpdGlvbi4KKyAgICBcYWR2YW5jZVxkb2lnbm9yZWNvdW50IGJ5IC0xCisgICAgXGxldFxuZXh0XGRvaWdub3JldGV4dCAgICAgICUgTG9vayBmb3IgdGhlIG5leHQgQGVuZC4KKyAgXGZpCisgIFxuZXh0Cit9CisKKyUgRmluaXNoIG9mZiBpZ25vcmVkIHRleHQuCit7IFxvYmV5bGluZXMlCisgICUgSWdub3JlIGFueXRoaW5nIGFmdGVyIHRoZSBsYXN0IGBAZW5kICMxJzsgdGhpcyBtYXR0ZXJzIGluIHZlcmJhdGltCisgICUgZW52aXJvbm1lbnRzLCB3aGVyZSBvdGhlcndpc2UgdGhlIG5ld2xpbmUgYWZ0ZXIgYW4gaWdub3JlZCBjb25kaXRpb25hbAorICAlIHdvdWxkIHJlc3VsdCBpbiBhIGJsYW5rIGxpbmUgaW4gdGhlIG91dHB1dC4KKyAgXGdkZWZcZW5kZG9pZ25vcmUjMV5eTXtcZW5kZ3JvdXBcaWdub3Jlc3BhY2VzfSUKK30KKworCislIEBzZXQgVkFSIHNldHMgdGhlIHZhcmlhYmxlIFZBUiB0byBhbiBlbXB0eSB2YWx1ZS4KKyUgQHNldCBWQVIgUkVTVC1PRi1MSU5FIHNldHMgVkFSIHRvIHRoZSB2YWx1ZSBSRVNULU9GLUxJTkUuCislCislIFNpbmNlIHdlIHdhbnQgdG8gc2VwYXJhdGUgVkFSIGZyb20gUkVTVC1PRi1MSU5FICh3aGljaCBtaWdodCBiZQorJSBlbXB0eSksIHdlIGNhbid0IGp1c3QgdXNlIFxwYXJzZWFyZzsgd2UgaGF2ZSB0byBpbnNlcnQgYSBzcGFjZSBvZiBvdXIKKyUgb3duIHRvIGRlbGltaXQgdGhlIHJlc3Qgb2YgdGhlIGxpbmUsIGFuZCB0aGVuIHRha2UgaXQgb3V0IGFnYWluIGlmIHdlCislIGRpZG4ndCBuZWVkIGl0LgorJSBXZSByZWx5IG9uIHRoZSBmYWN0IHRoYXQgXHBhcnNlYXJnIHNldHMgXGNhdGNvZGVgXCA9MTAuCislCitccGFyc2VhcmdkZWZcc2V0e1xzZXR5eXkjMSBcZW5kc2V0eXl5fQorXGRlZlxzZXR5eXkjMSAjMlxlbmRzZXR5eXl7JQorICB7JQorICAgIFxtYWtldmFsdWVleHBhbmRhYmxlCisgICAgXGRlZlx0ZW1weyMyfSUKKyAgICBcZWRlZlxuZXh0e1xnZGVmXG1ha2Vjc25hbWV7U0VUIzF9fSUKKyAgICBcaWZ4XHRlbXBcZW1wdHkKKyAgICAgIFxuZXh0e30lCisgICAgXGVsc2UKKyAgICAgIFxzZXR6enojMlxlbmRzZXR6enoKKyAgICBcZmkKKyAgfSUKK30KKyUgUmVtb3ZlIHRoZSB0cmFpbGluZyBzcGFjZSBcc2V0eHh4IGluc2VydGVkLgorXGRlZlxzZXR6enojMSBcZW5kc2V0enp6e1xuZXh0eyMxfX0KKworJSBAY2xlYXIgVkFSIGNsZWFycyAoaS5lLiwgdW5zZXRzKSB0aGUgdmFyaWFibGUgVkFSLgorJQorXHBhcnNlYXJnZGVmXGNsZWFyeyUKKyAgeyUKKyAgICBcbWFrZXZhbHVlZXhwYW5kYWJsZQorICAgIFxnbG9iYWxcZXhwYW5kYWZ0ZXJcbGV0XGNzbmFtZSBTRVQjMVxlbmRjc25hbWU9XHJlbGF4CisgIH0lCit9CisKKyUgQHZhbHVle2Zvb30gZ2V0cyB0aGUgdGV4dCBzYXZlZCBpbiB2YXJpYWJsZSBmb28uCitcZGVmXHZhbHVle1xiZWdpbmdyb3VwXG1ha2V2YWx1ZWV4cGFuZGFibGVcdmFsdWV4eHh9CitcZGVmXHZhbHVleHh4IzF7XGV4cGFuZGFibGV2YWx1ZXsjMX1cZW5kZ3JvdXB9Cit7CisgIFxjYXRjb2RlYFwtID0gXGFjdGl2ZSBcY2F0Y29kZWBcXyA9IFxhY3RpdmUKKyAgJQorICBcZ2RlZlxtYWtldmFsdWVleHBhbmRhYmxleyUKKyAgICBcbGV0XHZhbHVlID0gXGV4cGFuZGFibGV2YWx1ZQorICAgICUgV2UgZG9uJ3Qgd2FudCB0aGVzZSBjaGFyYWN0ZXJzIGFjdGl2ZSwgLi4uCisgICAgXGNhdGNvZGVgXC09XG90aGVyIFxjYXRjb2RlYFxfPVxvdGhlcgorICAgICUgLi4uLCBidXQgd2UgbWlnaHQgZW5kIHVwIHdpdGggYWN0aXZlIG9uZXMgaW4gdGhlIGFyZ3VtZW50IGlmCisgICAgJSB3ZSdyZSBjYWxsZWQgZnJvbSBAY29kZSwgYXMgQGNvZGV7QHZhbHVle2Zvby1iYXJffX0sIHRob3VnaC4KKyAgICAlIFNvIFxsZXQgdGhlbSB0byB0aGVpciBub3JtYWwgZXF1aXZhbGVudHMuCisgICAgXGxldC1ccmVhbGRhc2ggXGxldF9cbm9ybWFsdW5kZXJzY29yZQorICB9Cit9CisKKyUgV2UgaGF2ZSB0aGlzIHN1YnJvdXRpbmUgc28gdGhhdCB3ZSBjYW4gaGFuZGxlIGF0IGxlYXN0IHNvbWUgQHZhbHVlJ3MKKyUgcHJvcGVybHkgaW4gaW5kZXhlcyAod2UgY2FsbCBcbWFrZXZhbHVlZXhwYW5kYWJsZSBpbiBcaW5kZXhkdW1taWVzKS4KKyUgVGhlIGNvbW1hbmQgaGFzIHRvIGJlIGZ1bGx5IGV4cGFuZGFibGUgKGlmIHRoZSB2YXJpYWJsZSBpcyBzZXQpLCBzaW5jZQorJSB0aGUgcmVzdWx0IHdpbmRzIHVwIGluIHRoZSBpbmRleCBmaWxlLiAgVGhpcyBtZWFucyB0aGF0IGlmIHRoZQorJSB2YXJpYWJsZSdzIHZhbHVlIGNvbnRhaW5zIG90aGVyIFRleGluZm8gY29tbWFuZHMsIGl0J3MgYWxtb3N0IGNlcnRhaW4KKyUgaXQgd2lsbCBmYWlsIChhbHRob3VnaCBwZXJoYXBzIHdlIGNvdWxkIGZpeCB0aGF0IHdpdGggc3VmZmljaWVudCB3b3JrCislIHRvIGRvIGEgb25lLWxldmVsIGV4cGFuc2lvbiBvbiB0aGUgcmVzdWx0LCBpbnN0ZWFkIG9mIGNvbXBsZXRlKS4KKyUKK1xkZWZcZXhwYW5kYWJsZXZhbHVlIzF7JQorICBcZXhwYW5kYWZ0ZXJcaWZ4XGNzbmFtZSBTRVQjMVxlbmRjc25hbWVccmVsYXgKKyAgICB7W05vIHZhbHVlIGZvciBgYCMxJyddfSUKKyAgICBcbWVzc2FnZXtWYXJpYWJsZSBgIzEnLCB1c2VkIGluIEB2YWx1ZSwgaXMgbm90IHNldC59JQorICBcZWxzZQorICAgIFxjc25hbWUgU0VUIzFcZW5kY3NuYW1lCisgIFxmaQorfQorCislIEBpZnNldCBWQVIgLi4uIEBlbmQgaWZzZXQgcmVhZHMgdGhlIGAuLi4nIGlmZiBWQVIgaGFzIGJlZW4gZGVmaW5lZAorJSB3aXRoIEBzZXQuCislCislIFRvIGdldCBzcGVjaWFsIHRyZWF0bWVudCBvZiBgQGVuZCBpZnNldCwnIGNhbGwgXG1ha2VvbmQgYW5kIHRoZSByZWRlZmluZS4KKyUKK1xtYWtlY29uZHtpZnNldH0KK1xkZWZcaWZzZXR7XHBhcnNlYXJne1xkb2lmc2V0e1xsZXRcbmV4dD1caWZzZXRmYWlsfX19CitcZGVmXGRvaWZzZXQjMSMyeyUKKyAgeyUKKyAgICBcbWFrZXZhbHVlZXhwYW5kYWJsZQorICAgIFxsZXRcbmV4dD1cZW1wdHkKKyAgICBcZXhwYW5kYWZ0ZXJcaWZ4XGNzbmFtZSBTRVQjMlxlbmRjc25hbWVccmVsYXgKKyAgICAgICMxJSBJZiBub3Qgc2V0LCByZWRlZmluZSBcbmV4dC4KKyAgICBcZmkKKyAgICBcZXhwYW5kYWZ0ZXIKKyAgfVxuZXh0Cit9CitcZGVmXGlmc2V0ZmFpbHtcZG9pZ25vcmV7aWZzZXR9fQorCislIEBpZmNsZWFyIFZBUiAuLi4gQGVuZCBpZmNsZWFyIHJlYWRzIHRoZSBgLi4uJyBpZmYgVkFSIGhhcyBuZXZlciBiZWVuCislIGRlZmluZWQgd2l0aCBAc2V0LCBvciBoYXMgYmVlbiB1bmRlZmluZWQgd2l0aCBAY2xlYXIuCislCislIFRoZSBgXGVsc2UnIGluc2lkZSB0aGUgYFxkb2lmc2V0JyBwYXJhbWV0ZXIgaXMgYSB0cmljayB0byByZXVzZSB0aGUKKyUgYWJvdmUgY29kZTogaWYgdGhlIHZhcmlhYmxlIGlzIG5vdCBzZXQsIGRvIG5vdGhpbmcsIGlmIGl0IGlzIHNldCwKKyUgdGhlbiByZWRlZmluZSBcbmV4dCB0byBcaWZjbGVhcmZhaWwuCislCitcbWFrZWNvbmR7aWZjbGVhcn0KK1xkZWZcaWZjbGVhcntccGFyc2Vhcmd7XGRvaWZzZXR7XGVsc2UgXGxldFxuZXh0PVxpZmNsZWFyZmFpbH19fQorXGRlZlxpZmNsZWFyZmFpbHtcZG9pZ25vcmV7aWZjbGVhcn19CisKKyUgQGRpcmNhdGVnb3J5IENBVEVHT1JZICAtLSBzcGVjaWZ5IGEgY2F0ZWdvcnkgb2YgdGhlIGRpciBmaWxlCislIHdoaWNoIHRoaXMgZmlsZSBzaG91bGQgYmVsb25nIHRvLiAgSWdub3JlIHRoaXMgaW4gVGVYLgorXGxldFxkaXJjYXRlZ29yeT1cY29tbWVudAorCislIEBkZWZpbmluZm9lbmNsb3NlLgorXGxldFxkZWZpbmZvZW5jbG9zZT1cY29tbWVudAorCisKK1xtZXNzYWdle2luZGV4aW5nLH0KKyUgSW5kZXggZ2VuZXJhdGlvbiBmYWNpbGl0aWVzCisKKyUgRGVmaW5lIFxuZXd3cml0ZSB0byBiZSBpZGVudGljYWwgdG8gcGxhaW4gdGV4J3MgXG5ld3dyaXRlCislIGV4Y2VwdCBub3QgXG91dGVyLCBzbyBpdCBjYW4gYmUgdXNlZCB3aXRoaW4gbWFjcm9zIGFuZCBcaWYncy4KK1xlZGVmXG5ld3dyaXRle1xtYWtlY3NuYW1le3B0ZXhuZXd3cml0ZX19CisKKyUgXG5ld2luZGV4IHtmb299IGRlZmluZXMgYW4gaW5kZXggbmFtZWQgZm9vLgorJSBJdCBhdXRvbWF0aWNhbGx5IGRlZmluZXMgXGZvb2luZGV4IHN1Y2ggdGhhdAorJSBcZm9vaW5kZXggLi4ucmVzdCBvZiBsaW5lLi4uIHB1dHMgYW4gZW50cnkgaW4gdGhlIGluZGV4IGZvby4KKyUgSXQgYWxzbyBkZWZpbmVzIFxmb29pbmRmaWxlIHRvIGJlIHRoZSBudW1iZXIgb2YgdGhlIG91dHB1dCBjaGFubmVsIGZvcgorJSB0aGUgZmlsZSB0aGF0IGFjY3VtdWxhdGVzIHRoaXMgaW5kZXguICBUaGUgZmlsZSdzIGV4dGVuc2lvbiBpcyBmb28uCislIFRoZSBuYW1lIG9mIGFuIGluZGV4IHNob3VsZCBiZSBubyBtb3JlIHRoYW4gMiBjaGFyYWN0ZXJzIGxvbmcKKyUgZm9yIHRoZSBzYWtlIG9mIHZtcy4KKyUKK1xkZWZcbmV3aW5kZXgjMXslCisgIFxpZmxpbmtzCisgICAgXGV4cGFuZGFmdGVyXG5ld3dyaXRlIFxjc25hbWUjMWluZGZpbGVcZW5kY3NuYW1lCisgICAgXG9wZW5vdXQgXGNzbmFtZSMxaW5kZmlsZVxlbmRjc25hbWUgXGpvYm5hbWUuIzEgJSBPcGVuIHRoZSBmaWxlCisgIFxmaQorICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWUjMWluZGV4XGVuZGNzbmFtZXslICAgICAlIERlZmluZSBAIzFpbmRleAorICAgIFxub2V4cGFuZFxkb2luZGV4eyMxfX0KK30KKworJSBAZGVmaW5kZXggZm9vICA9PSAgXG5ld2luZGV4e2Zvb30KKyUKK1xkZWZcZGVmaW5kZXh7XHBhcnNlYXJnXG5ld2luZGV4fQorCislIERlZmluZSBAZGVmY29kZWluZGV4LCBsaWtlIEBkZWZpbmRleCBleGNlcHQgcHV0IGFsbCBlbnRyaWVzIGluIEBjb2RlLgorJQorXGRlZlxkZWZjb2RlaW5kZXh7XHBhcnNlYXJnXG5ld2NvZGVpbmRleH0KKyUKK1xkZWZcbmV3Y29kZWluZGV4IzF7JQorICBcaWZsaW5rcworICAgIFxleHBhbmRhZnRlclxuZXd3cml0ZSBcY3NuYW1lIzFpbmRmaWxlXGVuZGNzbmFtZQorICAgIFxvcGVub3V0IFxjc25hbWUjMWluZGZpbGVcZW5kY3NuYW1lIFxqb2JuYW1lLiMxCisgIFxmaQorICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWUjMWluZGV4XGVuZGNzbmFtZXslCisgICAgXG5vZXhwYW5kXGRvY29kZWluZGV4eyMxfX0lCit9CisKKworJSBAc3luaW5kZXggZm9vIGJhciAgICBtYWtlcyBpbmRleCBmb28gZmVlZCBpbnRvIGluZGV4IGJhci4KKyUgRG8gdGhpcyBpbnN0ZWFkIG9mIEBkZWZpbmRleCBmb28gaWYgeW91IGRvbid0IHdhbnQgaXQgYXMgYSBzZXBhcmF0ZSBpbmRleC4KKyUKKyUgQHN5bmNvZGVpbmRleCBmb28gYmFyICAgc2ltaWxhciwgYnV0IHB1dCBhbGwgZW50cmllcyBtYWRlIGZvciBpbmRleCBmb28KKyUgaW5zaWRlIEBjb2RlLgorJQorXGRlZlxzeW5pbmRleCMxICMyIHtcZG9zeW5pbmRleFxkb2luZGV4eyMxfXsjMn19CitcZGVmXHN5bmNvZGVpbmRleCMxICMyIHtcZG9zeW5pbmRleFxkb2NvZGVpbmRleHsjMX17IzJ9fQorCislICMxIGlzIFxkb2luZGV4IG9yIFxkb2NvZGVpbmRleCwgIzIgdGhlIGluZGV4IGdldHRpbmcgcmVkZWZpbmVkIChmb28pLAorJSAjMyB0aGUgdGFyZ2V0IGluZGV4IChiYXIpLgorXGRlZlxkb3N5bmluZGV4IzEjMiMzeyUKKyAgJSBPbmx5IGRvIFxjbG9zZW91dCBpZiB3ZSBoYXZlbid0IGFscmVhZHkgZG9uZSBpdCwgZWxzZSB3ZSdsbCBlbmQgdXAKKyAgJSBjbG9zaW5nIHRoZSB0YXJnZXQgaW5kZXguCisgIFxleHBhbmRhZnRlciBcaWZ4XGNzbmFtZSBkb25lc3luaW5kZXgjMlxlbmRjc25hbWUgXHVuZGVmaW5lZAorICAgICUgVGhlIFxjbG9zZW91dCBoZWxwcyByZWR1Y2UgdW5uZWNlc3Nhcnkgb3BlbiBmaWxlczsgdGhlIGxpbWl0IG9uIHRoZQorICAgICUgQWNvcm4gUklTQyBPUyBpcyBhIG1lcmUgMTYgZmlsZXMuCisgICAgXGV4cGFuZGFmdGVyXGNsb3Nlb3V0XGNzbmFtZSMyaW5kZmlsZVxlbmRjc25hbWUKKyAgICBcZXhwYW5kYWZ0ZXJcbGV0XGNzbmFtZVxkb25lc3luaW5kZXgjMlxlbmRjc25hbWUgPSAxCisgIFxmaQorICAlIHJlZGVmaW5lIFxmb29pbmRmaWxlOgorICBcZXhwYW5kYWZ0ZXJcbGV0XGV4cGFuZGFmdGVyXHRlbXBcZXhwYW5kYWZ0ZXI9XGNzbmFtZSMzaW5kZmlsZVxlbmRjc25hbWUKKyAgXGV4cGFuZGFmdGVyXGxldFxjc25hbWUjMmluZGZpbGVcZW5kY3NuYW1lPVx0ZW1wCisgICUgcmVkZWZpbmUgXGZvb2luZGV4OgorICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWUjMmluZGV4XGVuZGNzbmFtZXtcbm9leHBhbmQjMXsjM319JQorfQorCislIERlZmluZSBcZG9pbmRleCwgdGhlIGRyaXZlciBmb3IgYWxsIFxmb29pbmRleCBtYWNyb3MuCislIEFyZ3VtZW50ICMxIGlzIGdlbmVyYXRlZCBieSB0aGUgY2FsbGluZyBcZm9vaW5kZXggbWFjcm8sCislICBhbmQgaXQgaXMgImZvbyIsIHRoZSBuYW1lIG9mIHRoZSBpbmRleC4KKworJSBcZG9pbmRleCBqdXN0IHVzZXMgXHBhcnNlYXJnOyBpdCBjYWxscyBcZG9pbmQgZm9yIHRoZSBhY3R1YWwgd29yay4KKyUgVGhpcyBpcyBiZWNhdXNlIFxkb2luZCBpcyBtb3JlIHVzZWZ1bCB0byBjYWxsIGZyb20gb3RoZXIgbWFjcm9zLgorCislIFRoZXJlIGlzIGFsc28gXGRvc3ViaW5kIHtpbmRleH17dG9waWN9e3N1YnRvcGljfQorJSB3aGljaCBtYWtlcyBhbiBlbnRyeSBpbiBhIHR3by1sZXZlbCBpbmRleCBzdWNoIGFzIHRoZSBvcGVyYXRpb24gaW5kZXguCisKK1xkZWZcZG9pbmRleCMxe1xlZGVmXGluZGV4bmFtZXsjMX1ccGFyc2Vhcmdcc2luZ2xlaW5kZXhlcn0KK1xkZWZcc2luZ2xlaW5kZXhlciAjMXtcZG9pbmR7XGluZGV4bmFtZX17IzF9fQorCislIGxpa2UgdGhlIHByZXZpb3VzIHR3bywgYnV0IHRoZXkgcHV0IEBjb2RlIGFyb3VuZCB0aGUgYXJndW1lbnQuCitcZGVmXGRvY29kZWluZGV4IzF7XGVkZWZcaW5kZXhuYW1leyMxfVxwYXJzZWFyZ1xzaW5nbGVjb2RlaW5kZXhlcn0KK1xkZWZcc2luZ2xlY29kZWluZGV4ZXIgIzF7XGRvaW5ke1xpbmRleG5hbWV9e1xjb2RleyMxfX19CisKKyUgVGFrZSBjYXJlIG9mIFRleGluZm8gY29tbWFuZHMgdGhhdCBjYW4gYXBwZWFyIGluIGFuIGluZGV4IGVudHJ5LgorJSBTaW5jZSB0aGVyZSBhcmUgc29tZSBjb21tYW5kcyB3ZSB3YW50IHRvIGV4cGFuZCwgYW5kIG90aGVycyB3ZSBkb24ndCwKKyUgd2UgaGF2ZSB0byBsYWJvcmlvdXNseSBwcmV2ZW50IGV4cGFuc2lvbiBmb3IgdGhvc2UgdGhhdCB3ZSBkb24ndC4KKyUKK1xkZWZcaW5kZXhkdW1taWVzeyUKKyAgXGVzY2FwZWNoYXIgPSBgXFwgICAgICUgdXNlIGJhY2tzbGFzaCBpbiBvdXRwdXQgZmlsZXMuCisgIFxkZWZcQHtAfSUgY2hhbmdlIHRvIEBAIHdoZW4gd2Ugc3dpdGNoIHRvIEAgYXMgZXNjYXBlIGNoYXIgaW4gaW5kZXggZmlsZXMuCisgIFxkZWZcIHtccmVhbGJhY2tzbGFzaFxzcGFjZSB9JQorICAlCisgICUgTmVlZCB0aGVzZSBpbiBjYXNlIFx0ZXggaXMgaW4gZWZmZWN0IGFuZCBceyBpcyBhIFxkZWxpbWl0ZXIgYWdhaW4uCisgICUgQnV0IGNhbid0IHVzZSBcbGJyYWNlY21kIGFuZCBccmJyYWNlY21kIGJlY2F1c2UgdGV4aW5kZXggYXNzdW1lcworICAlIGJyYWNlcyBhbmQgYmFja3NsYXNoZXMgYXJlIHVzZWQgb25seSBhcyBkZWxpbWl0ZXJzLgorICBcbGV0XHsgPSBcbXlsYnJhY2UKKyAgXGxldFx9ID0gXG15cmJyYWNlCisgICUKKyAgJSBJIGRvbid0IGVudGlyZWx5IHVuZGVyc3RhbmQgdGhpcywgYnV0IHdoZW4gYW4gaW5kZXggZW50cnkgaXMKKyAgJSBnZW5lcmF0ZWQgZnJvbSBhIG1hY3JvIGNhbGwsIHRoZSBcZW5kaW5wdXQgd2hpY2ggXHNjYW5tYWNybyBpbnNlcnRzCisgICUgY2F1c2VzIHByb2Nlc3NpbmcgdG8gYmUgcHJlbWF0dXJlbHkgdGVybWluYXRlZC4gIFRoaXMgaXMsCisgICUgYXBwYXJlbnRseSwgYmVjYXVzZSBcaW5kZXhzb3J0dG1wIGlzIGZ1bGx5IGV4cGFuZGVkLCBhbmQgXGVuZGlucHV0CisgICUgaXMgYW4gZXhwYW5kYWJsZSBjb21tYW5kLiAgVGhlIHJlZGVmaW5pdGlvbiBiZWxvdyBtYWtlcyBcZW5kaW5wdXQKKyAgJSBkaXNhcHBlYXIgYWx0b2dldGhlciBmb3IgdGhhdCBwdXJwb3NlIC0tIGFsdGhvdWdoIGxvZ2dpbmcgc2hvd3MgdGhhdAorICAlIHByb2Nlc3NpbmcgY29udGludWVzIHRvIHNvbWUgZnVydGhlciBwb2ludC4gIE9uIHRoZSBvdGhlciBoYW5kLCBpdAorICAlIHNlZW1zIFxlbmRpbnB1dCBkb2VzIG5vdCBodXJ0IGluIHRoZSBwcmludGVkIGluZGV4IGFyZywgc2luY2UgdGhhdAorICAlIGlzIHN0aWxsIGdldHRpbmcgd3JpdHRlbiB3aXRob3V0IGFwcGFyZW50IGhhcm0uCisgICUgCisgICUgU2FtcGxlIHNvdXJjZSAobWFjLWlkeDMudGV4LCByZXBvcnRlZCBieSBHcmFoYW0gUGVyY2l2YWwgdG8KKyAgJSBoZWxwLXRleGluZm8sIDIybWF5MDYpOgorICAlIEBtYWNybyBmdW5pbmRleCB7V09SRH0KKyAgJSBAZmluZGV4IHh5egorICAlIEBlbmQgbWFjcm8KKyAgJSAuLi4KKyAgJSBAZnVuaW5kZXggY29tbXRlc3QKKyAgJSAKKyAgJSBUaGUgYWJvdmUgaXMgbm90IGVub3VnaCB0byByZXByb2R1Y2UgdGhlIGJ1ZywgYnV0IGl0IGdpdmVzIHRoZSBmbGF2b3IuCisgICUgCisgICUgU2FtcGxlIHdoYXRzaXQgcmVzdWx0aW5nOgorICAlIC5Ad3JpdGUze1xlbnRyeXt4eXp9e0Bmb2xpbyB9e0Bjb2RlIHt4eXpAZW5kaW5wdXQgfX19CisgICUgCisgICUgU286CisgIFxsZXRcZW5kaW5wdXQgPSBcZW1wdHkKKyAgJQorICAlIERvIHRoZSByZWRlZmluaXRpb25zLgorICBcY29tbW9uZHVtbWllcworfQorCislIEZvciB0aGUgYXV4IGFuZCB0b2MgZmlsZXMsIEAgaXMgdGhlIGVzY2FwZSBjaGFyYWN0ZXIuICBTbyB3ZSB3YW50IHRvCislIHJlZGVmaW5lIGV2ZXJ5dGhpbmcgdXNpbmcgQCBhcyB0aGUgZXNjYXBlIGNoYXJhY3RlciAoaW5zdGVhZCBvZgorJSBccmVhbGJhY2tzbGFzaCwgc3RpbGwgdXNlZCBmb3IgaW5kZXggZmlsZXMpLiAgV2hlbiBldmVyeXRoaW5nIHVzZXMgQCwKKyUgdGhpcyB3aWxsIGJlIHNpbXBsZXIuCislCitcZGVmXGF0ZHVtbWllc3slCisgIFxkZWZcQHtAQH0lCisgIFxkZWZcIHtAIH0lCisgIFxsZXRceyA9IFxsYnJhY2VhdGNtZAorICBcbGV0XH0gPSBccmJyYWNlYXRjbWQKKyAgJQorICAlIERvIHRoZSByZWRlZmluaXRpb25zLgorICBcY29tbW9uZHVtbWllcworICBcb3RoZXJiYWNrc2xhc2gKK30KKworJSBDYWxsZWQgZnJvbSBcaW5kZXhkdW1taWVzIGFuZCBcYXRkdW1taWVzLgorJQorXGRlZlxjb21tb25kdW1taWVzeyUKKyAgJQorICAlIFxkZWZpbmVkdW1teXdvcmQgZGVmaW5lcyBcIzEgYXMgXHN0cmluZ1wjMVxzcGFjZSwgdGh1cyBlZmZlY3RpdmVseQorICAlIHByZXZlbnRpbmcgaXRzIGV4cGFuc2lvbi4gIFRoaXMgaXMgdXNlZCBvbmx5IGZvciBjb250cm9sJSB3b3JkcywKKyAgJSBub3QgY29udHJvbCBsZXR0ZXJzLCBiZWNhdXNlIHRoZSBcc3BhY2Ugd291bGQgYmUgaW5jb3JyZWN0IGZvcgorICAlIGNvbnRyb2wgY2hhcmFjdGVycywgYnV0IGlzIG5lZWRlZCB0byBzZXBhcmF0ZSB0aGUgY29udHJvbCB3b3JkCisgICUgZnJvbSB3aGF0ZXZlciBmb2xsb3dzLgorICAlCisgICUgRm9yIGNvbnRyb2wgbGV0dGVycywgd2UgaGF2ZSBcZGVmaW5lZHVtbXlsZXR0ZXIsIHdoaWNoIG9taXRzIHRoZQorICAlIHNwYWNlLgorICAlCisgICUgVGhlc2UgY2FuIGJlIHVzZWQgYm90aCBmb3IgY29udHJvbCB3b3JkcyB0aGF0IHRha2UgYW4gYXJndW1lbnQgYW5kCisgICUgdGhvc2UgdGhhdCBkbyBub3QuICBJZiBpdCBpcyBmb2xsb3dlZCBieSB7YXJnfSBpbiB0aGUgaW5wdXQsIHRoZW4KKyAgJSB0aGF0IHdpbGwgZHV0aWZ1bGx5IGdldCB3cml0dGVuIHRvIHRoZSBpbmRleCAob3Igd2hlcmV2ZXIpLgorICAlCisgIFxkZWZcZGVmaW5lZHVtbXl3b3JkICAjIzF7XGRlZiMjMXtcc3RyaW5nIyMxXHNwYWNlfX0lCisgIFxkZWZcZGVmaW5lZHVtbXlsZXR0ZXIjIzF7XGRlZiMjMXtcc3RyaW5nIyMxfX0lCisgIFxsZXRcZGVmaW5lZHVtbXlhY2NlbnRcZGVmaW5lZHVtbXlsZXR0ZXIKKyAgJQorICBcY29tbW9uZHVtbWllc25vZm9udHMKKyAgJQorICBcZGVmaW5lZHVtbXlsZXR0ZXJcXyUKKyAgJQorICAlIE5vbi1FbmdsaXNoIGxldHRlcnMuCisgIFxkZWZpbmVkdW1teXdvcmRcQUEKKyAgXGRlZmluZWR1bW15d29yZFxBRQorICBcZGVmaW5lZHVtbXl3b3JkXEwKKyAgXGRlZmluZWR1bW15d29yZFxPRQorICBcZGVmaW5lZHVtbXl3b3JkXE8KKyAgXGRlZmluZWR1bW15d29yZFxhYQorICBcZGVmaW5lZHVtbXl3b3JkXGFlCisgIFxkZWZpbmVkdW1teXdvcmRcbAorICBcZGVmaW5lZHVtbXl3b3JkXG9lCisgIFxkZWZpbmVkdW1teXdvcmRcbworICBcZGVmaW5lZHVtbXl3b3JkXHNzCisgIFxkZWZpbmVkdW1teXdvcmRcZXhjbGFtZG93bgorICBcZGVmaW5lZHVtbXl3b3JkXHF1ZXN0aW9uZG93bgorICBcZGVmaW5lZHVtbXl3b3JkXG9yZGYKKyAgXGRlZmluZWR1bW15d29yZFxvcmRtCisgICUKKyAgJSBBbHRob3VnaCB0aGVzZSBpbnRlcm5hbCBjb21tYW5kcyBzaG91bGRuJ3Qgc2hvdyB1cCwgc29tZXRpbWVzIHRoZXkgZG8uCisgIFxkZWZpbmVkdW1teXdvcmRcYmYKKyAgXGRlZmluZWR1bW15d29yZFxndHIKKyAgXGRlZmluZWR1bW15d29yZFxoYXQKKyAgXGRlZmluZWR1bW15d29yZFxsZXNzCisgIFxkZWZpbmVkdW1teXdvcmRcc2YKKyAgXGRlZmluZWR1bW15d29yZFxzbAorICBcZGVmaW5lZHVtbXl3b3JkXHRjbG9zZQorICBcZGVmaW5lZHVtbXl3b3JkXHR0CisgICUKKyAgXGRlZmluZWR1bW15d29yZFxMYVRlWAorICBcZGVmaW5lZHVtbXl3b3JkXFRlWAorICAlCisgICUgQXNzb3J0ZWQgc3BlY2lhbCBjaGFyYWN0ZXJzLgorICBcZGVmaW5lZHVtbXl3b3JkXGJ1bGxldAorICBcZGVmaW5lZHVtbXl3b3JkXGNvbW1hCisgIFxkZWZpbmVkdW1teXdvcmRcY29weXJpZ2h0CisgIFxkZWZpbmVkdW1teXdvcmRccmVnaXN0ZXJlZHN5bWJvbAorICBcZGVmaW5lZHVtbXl3b3JkXGRvdHMKKyAgXGRlZmluZWR1bW15d29yZFxlbmRkb3RzCisgIFxkZWZpbmVkdW1teXdvcmRcZXF1aXYKKyAgXGRlZmluZWR1bW15d29yZFxlcnJvcgorICBcZGVmaW5lZHVtbXl3b3JkXGV1cm8KKyAgXGRlZmluZWR1bW15d29yZFxleHBhbnNpb24KKyAgXGRlZmluZWR1bW15d29yZFxtaW51cworICBcZGVmaW5lZHVtbXl3b3JkXHBvdW5kcworICBcZGVmaW5lZHVtbXl3b3JkXHBvaW50CisgIFxkZWZpbmVkdW1teXdvcmRccHJpbnQKKyAgXGRlZmluZWR1bW15d29yZFxyZXN1bHQKKyAgXGRlZmluZWR1bW15d29yZFx0ZXh0ZGVncmVlCisgICUKKyAgJSBXZSB3YW50IHRvIGRpc2FibGUgYWxsIG1hY3JvcyBzbyB0aGF0IHRoZXkgYXJlIG5vdCBleHBhbmRlZCBieSBcd3JpdGUuCisgIFxtYWNyb2xpc3QKKyAgJQorICBcbm9ybWFsdHVybm9mZmFjdGl2ZQorICAlCisgICUgSGFuZGxlIHNvbWUgY2FzZXMgb2YgQHZhbHVlIC0tIHdoZXJlIGl0IGRvZXMgbm90IGNvbnRhaW4gYW55CisgICUgKG5vbi1mdWxseS1leHBhbmRhYmxlKSBjb21tYW5kcy4KKyAgXG1ha2V2YWx1ZWV4cGFuZGFibGUKK30KKworJSBcY29tbW9uZHVtbWllc25vZm9udHM6IGNvbW1vbiB0byBcY29tbW9uZHVtbWllcyBhbmQgXGluZGV4bm9mb250cy4KKyUKK1xkZWZcY29tbW9uZHVtbWllc25vZm9udHN7JQorICAlIENvbnRyb2wgbGV0dGVycyBhbmQgYWNjZW50cy4KKyAgXGRlZmluZWR1bW15bGV0dGVyXCElCisgIFxkZWZpbmVkdW1teWFjY2VudFwiJQorICBcZGVmaW5lZHVtbXlhY2NlbnRcJyUKKyAgXGRlZmluZWR1bW15bGV0dGVyXColCisgIFxkZWZpbmVkdW1teWFjY2VudFwsJQorICBcZGVmaW5lZHVtbXlsZXR0ZXJcLiUKKyAgXGRlZmluZWR1bW15bGV0dGVyXC8lCisgIFxkZWZpbmVkdW1teWxldHRlclw6JQorICBcZGVmaW5lZHVtbXlhY2NlbnRcPSUKKyAgXGRlZmluZWR1bW15bGV0dGVyXD8lCisgIFxkZWZpbmVkdW1teWFjY2VudFxeJQorICBcZGVmaW5lZHVtbXlhY2NlbnRcYCUKKyAgXGRlZmluZWR1bW15YWNjZW50XH4lCisgIFxkZWZpbmVkdW1teXdvcmRcdQorICBcZGVmaW5lZHVtbXl3b3JkXHYKKyAgXGRlZmluZWR1bW15d29yZFxICisgIFxkZWZpbmVkdW1teXdvcmRcZG90YWNjZW50CisgIFxkZWZpbmVkdW1teXdvcmRccmluZ2FjY2VudAorICBcZGVmaW5lZHVtbXl3b3JkXHRpZWFjY2VudAorICBcZGVmaW5lZHVtbXl3b3JkXHViYXJhY2NlbnQKKyAgXGRlZmluZWR1bW15d29yZFx1ZG90YWNjZW50CisgIFxkZWZpbmVkdW1teXdvcmRcZG90bGVzcworICAlCisgICUgVGV4aW5mbyBmb250IGNvbW1hbmRzLgorICBcZGVmaW5lZHVtbXl3b3JkXGIKKyAgXGRlZmluZWR1bW15d29yZFxpCisgIFxkZWZpbmVkdW1teXdvcmRccgorICBcZGVmaW5lZHVtbXl3b3JkXHNjCisgIFxkZWZpbmVkdW1teXdvcmRcdAorICAlCisgICUgQ29tbWFuZHMgdGhhdCB0YWtlIGFyZ3VtZW50cy4KKyAgXGRlZmluZWR1bW15d29yZFxhY3JvbnltCisgIFxkZWZpbmVkdW1teXdvcmRcY2l0ZQorICBcZGVmaW5lZHVtbXl3b3JkXGNvZGUKKyAgXGRlZmluZWR1bW15d29yZFxjb21tYW5kCisgIFxkZWZpbmVkdW1teXdvcmRcZGZuCisgIFxkZWZpbmVkdW1teXdvcmRcZW1waAorICBcZGVmaW5lZHVtbXl3b3JkXGVudgorICBcZGVmaW5lZHVtbXl3b3JkXGZpbGUKKyAgXGRlZmluZWR1bW15d29yZFxrYmQKKyAgXGRlZmluZWR1bW15d29yZFxrZXkKKyAgXGRlZmluZWR1bW15d29yZFxtYXRoCisgIFxkZWZpbmVkdW1teXdvcmRcb3B0aW9uCisgIFxkZWZpbmVkdW1teXdvcmRccHhyZWYKKyAgXGRlZmluZWR1bW15d29yZFxyZWYKKyAgXGRlZmluZWR1bW15d29yZFxzYW1wCisgIFxkZWZpbmVkdW1teXdvcmRcc3Ryb25nCisgIFxkZWZpbmVkdW1teXdvcmRcdGllCisgIFxkZWZpbmVkdW1teXdvcmRcdXJlZgorICBcZGVmaW5lZHVtbXl3b3JkXHVybAorICBcZGVmaW5lZHVtbXl3b3JkXHZhcgorICBcZGVmaW5lZHVtbXl3b3JkXHZlcmIKKyAgXGRlZmluZWR1bW15d29yZFx3CisgIFxkZWZpbmVkdW1teXdvcmRceHJlZgorfQorCislIFxpbmRleG5vZm9udHMgaXMgdXNlZCB3aGVuIG91dHB1dHRpbmcgdGhlIHN0cmluZ3MgdG8gc29ydCB0aGUgaW5kZXgKKyUgYnksIGFuZCB3aGVuIGNvbnN0cnVjdGluZyBjb250cm9sIHNlcXVlbmNlIG5hbWVzLiAgSXQgZWxpbWluYXRlcyBhbGwKKyUgY29udHJvbCBzZXF1ZW5jZXMgYW5kIGp1c3Qgd3JpdGVzIHdoYXRldmVyIHRoZSBiZXN0IEFTQ0lJIHNvcnQgc3RyaW5nCislIHdvdWxkIGJlIGZvciBhIGdpdmVuIGNvbW1hbmQgKHVzdWFsbHkgaXRzIGFyZ3VtZW50KS4KKyUKK1xkZWZcaW5kZXhub2ZvbnRzeyUKKyAgJSBBY2NlbnQgY29tbWFuZHMgc2hvdWxkIGJlY29tZSBAYXNpcy4KKyAgXGRlZlxkZWZpbmVkdW1teWFjY2VudCMjMXtcbGV0IyMxXGFzaXN9JQorICAlIFdlIGNhbiBqdXN0IGlnbm9yZSBvdGhlciBjb250cm9sIGxldHRlcnMuCisgIFxkZWZcZGVmaW5lZHVtbXlsZXR0ZXIjIzF7XGxldCMjMVxlbXB0eX0lCisgICUgSG9wZWZ1bGx5LCBhbGwgY29udHJvbCB3b3JkcyBjYW4gYmVjb21lIEBhc2lzLgorICBcbGV0XGRlZmluZWR1bW15d29yZFxkZWZpbmVkdW1teWFjY2VudAorICAlCisgIFxjb21tb25kdW1taWVzbm9mb250cworICAlCisgICUgRG9uJ3Qgbm8tb3AgXHR0LCBzaW5jZSBpdCBpc24ndCBhIHVzZXItbGV2ZWwgY29tbWFuZAorICAlIGFuZCBpcyB1c2VkIGluIHRoZSBkZWZpbml0aW9ucyBvZiB0aGUgYWN0aXZlIGNoYXJzIGxpa2UgPCwgPiwgfCwgZXRjLgorICAlIExpa2V3aXNlIHdpdGggdGhlIG90aGVyIHBsYWluIHRleCBmb250IGNvbW1hbmRzLgorICAlXGxldFx0dD1cYXNpcworICAlCisgIFxkZWZcIHsgfSUKKyAgXGRlZlxAe0B9JQorICAlIGhvdyB0byBoYW5kbGUgYnJhY2VzPworICBcZGVmXF97XG5vcm1hbHVuZGVyc2NvcmV9JQorICAlCisgICUgTm9uLUVuZ2xpc2ggbGV0dGVycy4KKyAgXGRlZlxBQXtBQX0lCisgIFxkZWZcQUV7QUV9JQorICBcZGVmXEx7TH0lCisgIFxkZWZcT0V7T0V9JQorICBcZGVmXE97T30lCisgIFxkZWZcYWF7YWF9JQorICBcZGVmXGFle2FlfSUKKyAgXGRlZlxse2x9JQorICBcZGVmXG9le29lfSUKKyAgXGRlZlxve299JQorICBcZGVmXHNze3NzfSUKKyAgXGRlZlxleGNsYW1kb3dueyF9JQorICBcZGVmXHF1ZXN0aW9uZG93bns/fSUKKyAgXGRlZlxvcmRme2F9JQorICBcZGVmXG9yZG17b30lCisgICUKKyAgXGRlZlxMYVRlWHtMYVRlWH0lCisgIFxkZWZcVGVYe1RlWH0lCisgICUKKyAgJSBBc3NvcnRlZCBzcGVjaWFsIGNoYXJhY3RlcnMuCisgICUgKFRoZSBmb2xsb3dpbmcge30gd2lsbCBlbmQgdXAgaW4gdGhlIHNvcnQgc3RyaW5nLCBidXQgdGhhdCdzIG9rLikKKyAgXGRlZlxidWxsZXR7YnVsbGV0fSUKKyAgXGRlZlxjb21tYXssfSUKKyAgXGRlZlxjb3B5cmlnaHR7Y29weXJpZ2h0fSUKKyAgXGRlZlxyZWdpc3RlcmVkc3ltYm9se1J9JQorICBcZGVmXGRvdHN7Li4ufSUKKyAgXGRlZlxlbmRkb3Rzey4uLn0lCisgIFxkZWZcZXF1aXZ7PT19JQorICBcZGVmXGVycm9ye2Vycm9yfSUKKyAgXGRlZlxldXJve2V1cm99JQorICBcZGVmXGV4cGFuc2lvbns9PT59JQorICBcZGVmXG1pbnVzey19JQorICBcZGVmXHBvdW5kc3twb3VuZHN9JQorICBcZGVmXHBvaW50ey59JQorICBcZGVmXHByaW50ey18fSUKKyAgXGRlZlxyZXN1bHR7PT59JQorICBcZGVmXHRleHRkZWdyZWV7ZGVncmVlc30lCisgICUKKyAgJSBXZSBuZWVkIHRvIGdldCByaWQgb2YgYWxsIG1hY3JvcywgbGVhdmluZyBvbmx5IHRoZSBhcmd1bWVudHMgKGlmIHByZXNlbnQpLgorICAlIE9mIGNvdXJzZSB0aGlzIGlzIG5vdCBuZWFybHkgY29ycmVjdCwgYnV0IGl0IGlzIHRoZSBiZXN0IHdlIGNhbiBkbyBmb3Igbm93LgorICAlIG1ha2VpbmZvIGRvZXMgbm90IGV4cGFuZCBtYWNyb3MgaW4gdGhlIGFyZ3VtZW50IHRvIEBkZWZmbiwgd2hpY2ggZW5kcyB1cAorICAlIHdyaXRpbmcgYW4gaW5kZXggZW50cnksIGFuZCB0ZXhpbmRleCBpc24ndCBwcmVwYXJlZCBmb3IgYW4gaW5kZXggc29ydCBlbnRyeQorICAlIHRoYXQgc3RhcnRzIHdpdGggXC4KKyAgJSAKKyAgJSBTaW5jZSBtYWNybyBpbnZvY2F0aW9ucyBhcmUgZm9sbG93ZWQgYnkgYnJhY2VzLCB3ZSBjYW4ganVzdCByZWRlZmluZSB0aGVtCisgICUgdG8gdGFrZSBhIHNpbmdsZSBUZVggYXJndW1lbnQuICBUaGUgY2FzZSBvZiBhIG1hY3JvIGludm9jYXRpb24gdGhhdAorICAlIGdvZXMgdG8gZW5kLW9mLWxpbmUgaXMgbm90IGhhbmRsZWQuCisgICUgCisgIFxtYWNyb2xpc3QKK30KKworXGxldFxpbmRleGJhY2tzbGFzaD0wICAlb3ZlcnJpZGRlbiBkdXJpbmcgXHByaW50aW5kZXguCitcbGV0XFNFVG1hcmdpbmluZGV4PVxyZWxheCAlIHB1dCBpbmRleCBlbnRyaWVzIGluIG1hcmdpbiAodW5kb2N1bWVudGVkKT8KKworJSBNb3N0IGluZGV4IGVudHJpZXMgZ28gdGhyb3VnaCBoZXJlLCBidXQgXGRvc3ViaW5kIGlzIHRoZSBnZW5lcmFsIGNhc2UuCislICMxIGlzIHRoZSBpbmRleCBuYW1lLCAjMiBpcyB0aGUgZW50cnkgdGV4dC4KK1xkZWZcZG9pbmQjMSMye1xkb3N1YmluZHsjMX17IzJ9e319CisKKyUgV29ya2hvcnNlIGZvciBhbGwgXGZvb2luZGV4ZXMuCislICMxIGlzIG5hbWUgb2YgaW5kZXgsICMyIGlzIHN0dWZmIHRvIHB1dCB0aGVyZSwgIzMgaXMgc3ViZW50cnkgLS0KKyUgZW1wdHkgaWYgY2FsbGVkIGZyb20gXGRvaW5kLCBhcyB3ZSB1c3VhbGx5IGFyZSAodGhlIG1haW4gZXhjZXB0aW9uCislIGlzIHdpdGggbW9zdCBkZWZ1bnMsIHdoaWNoIGNhbGwgdXMgZGlyZWN0bHkpLgorJQorXGRlZlxkb3N1YmluZCMxIzIjM3slCisgIFxpZmxpbmtzCisgIHslCisgICAgJSBTdG9yZSB0aGUgbWFpbiBpbmRleCBlbnRyeSB0ZXh0IChpbmNsdWRpbmcgdGhlIHRoaXJkIGFyZykuCisgICAgXHRva3MwID0geyMyfSUKKyAgICAlIElmIHRoaXJkIGFyZyBpcyBwcmVzZW50LCBwcmVjZWRlIGl0IHdpdGggYSBzcGFjZS4KKyAgICBcZGVmXHRoaXJkYXJneyMzfSUKKyAgICBcaWZ4XHRoaXJkYXJnXGVtcHR5IFxlbHNlCisgICAgICBcdG9rczAgPSBcZXhwYW5kYWZ0ZXJ7XHRoZVx0b2tzMCBcc3BhY2UgIzN9JQorICAgIFxmaQorICAgICUKKyAgICBcZWRlZlx3cml0ZXRve1xjc25hbWUjMWluZGZpbGVcZW5kY3NuYW1lfSUKKyAgICAlCisgICAgXHNhZmV3aGF0c2l0XGRvc3ViaW5kd3JpdGUKKyAgfSUKKyAgXGZpCit9CisKKyUgV3JpdGUgdGhlIGVudHJ5IGluIFx0b2tzMCB0byB0aGUgaW5kZXggZmlsZToKKyUKK1xkZWZcZG9zdWJpbmR3cml0ZXslCisgICUgUHV0IHRoZSBpbmRleCBlbnRyeSBpbiB0aGUgbWFyZ2luIGlmIGRlc2lyZWQuCisgIFxpZnhcU0VUbWFyZ2luaW5kZXhccmVsYXhcZWxzZQorICAgIFxpbnNlcnRcbWFyZ2lue1xoYm94e1x2cnVsZSBoZWlnaHQ4cHQgZGVwdGgzcHQgd2lkdGgwcHQgXHRoZVx0b2tzMH19JQorICBcZmkKKyAgJQorICAlIFJlbWVtYmVyLCB3ZSBhcmUgd2l0aGluIGEgZ3JvdXAuCisgIFxpbmRleGR1bW1pZXMgJSBNdXN0IGRvIHRoaXMgaGVyZSwgc2luY2UgXGJmLCBldGMgZXhwYW5kIGF0IHRoaXMgc3RhZ2UKKyAgXGRlZlxiYWNrc2xhc2hjdXJmb250e1xpbmRleGJhY2tzbGFzaH0lIFxpbmRleGJhY2tzbGFzaCBpc24ndCBkZWZpbmVkIG5vdworICAgICAgJSBzbyBpdCB3aWxsIGJlIG91dHB1dCBhcyBpczsgYW5kIGl0IHdpbGwgcHJpbnQgYXMgYmFja3NsYXNoLgorICAlCisgICUgUHJvY2VzcyB0aGUgaW5kZXggZW50cnkgd2l0aCBhbGwgZm9udCBjb21tYW5kcyB0dXJuZWQgb2ZmLCB0bworICAlIGdldCB0aGUgc3RyaW5nIHRvIHNvcnQgYnkuCisgIHtcaW5kZXhub2ZvbnRzCisgICBcZWRlZlx0ZW1we1x0aGVcdG9rczB9JSBuZWVkIGZ1bGwgZXhwYW5zaW9uCisgICBceGRlZlxpbmRleHNvcnR0bXB7XHRlbXB9JQorICB9JQorICAlCisgICUgU2V0IHVwIHRoZSBjb21wbGV0ZSBpbmRleCBlbnRyeSwgd2l0aCBib3RoIHRoZSBzb3J0IGtleSBhbmQKKyAgJSB0aGUgb3JpZ2luYWwgdGV4dCwgaW5jbHVkaW5nIGFueSBmb250IGNvbW1hbmRzLiAgV2Ugd3JpdGUKKyAgJSB0aHJlZSBhcmd1bWVudHMgdG8gXGVudHJ5IHRvIHRoZSAuPz8gZmlsZSAoZm91ciBpbiB0aGUKKyAgJSBzdWJlbnRyeSBjYXNlKSwgdGV4aW5kZXggcmVkdWNlcyB0byB0d28gd2hlbiB3cml0aW5nIHRoZSAuPz9zCisgICUgc29ydGVkIHJlc3VsdC4KKyAgXGVkZWZcdGVtcHslCisgICAgXHdyaXRlXHdyaXRldG97JQorICAgICAgXHN0cmluZ1xlbnRyeXtcaW5kZXhzb3J0dG1wfXtcbm9leHBhbmRcZm9saW99e1x0aGVcdG9rczB9fSUKKyAgfSUKKyAgXHRlbXAKK30KKworJSBUYWtlIGNhcmUgb2YgdW53YW50ZWQgcGFnZSBicmVha3Mvc2tpcHMgYXJvdW5kIGEgd2hhdHNpdDoKKyUKKyUgSWYgYSBza2lwIGlzIHRoZSBsYXN0IHRoaW5nIG9uIHRoZSBsaXN0IG5vdywgcHJlc2VydmUgaXQKKyUgYnkgYmFja2luZyB1cCBieSBcbGFzdHNraXAsIGRvaW5nIHRoZSBcd3JpdGUsIHRoZW4gaW5zZXJ0aW5nCislIHRoZSBza2lwIGFnYWluLiAgT3RoZXJ3aXNlLCB0aGUgd2hhdHNpdCBnZW5lcmF0ZWQgYnkgdGhlCislIFx3cml0ZSBvciBccGRmZGVzdCB3aWxsIG1ha2UgXGxhc3Rza2lwIHplcm8uICBUaGUgcmVzdWx0IGlzIHRoYXQKKyUgc2VxdWVuY2VzIGxpa2UgdGhpczoKKyUgQGVuZCBkZWZ1bgorJSBAdGluZGV4IHdoYXRldmVyCislIEBkZWZ1biAuLi4KKyUgd2lsbCBoYXZlIGV4dHJhIHNwYWNlIGluc2VydGVkLCBiZWNhdXNlIHRoZSBcbWVkYnJlYWsgaW4gdGhlCislIHN0YXJ0IG9mIHRoZSBAZGVmdW4gd29uJ3Qgc2VlIHRoZSBza2lwIGluc2VydGVkIGJ5IHRoZSBAZW5kIG9mCislIHRoZSBwcmV2aW91cyBkZWZ1bi4KKyUKKyUgQnV0IGRvbid0IGRvIGFueSBvZiB0aGlzIGlmIHdlJ3JlIG5vdCBpbiB2ZXJ0aWNhbCBtb2RlLiAgV2UKKyUgZG9uJ3Qgd2FudCB0byBkbyBhIFx2c2tpcCBhbmQgcHJlbWF0dXJlbHkgZW5kIGEgcGFyYWdyYXBoLgorJQorJSBBdm9pZCBwYWdlIGJyZWFrcyBkdWUgdG8gdGhlc2UgZXh0cmEgc2tpcHMsIHRvby4KKyUKKyUgQnV0IHdhaXQsIHRoZXJlIGlzIGEgY2F0Y2ggdGhlcmU6CislIFdlJ2xsIGhhdmUgdG8gY2hlY2sgd2hldGhlciBcbGFzdHNraXAgaXMgemVybyBza2lwLiAgXGlmZGltIGlzIG5vdAorJSBzdWZmaWNpZW50IGZvciB0aGlzIHB1cnBvc2UsIGFzIGl0IGlnbm9yZXMgc3RyZXRjaCBhbmQgc2hyaW5rIHBhcnRzCislIG9mIHRoZSBza2lwLiAgVGhlIG9ubHkgd2F5IHNlZW1zIHRvIGJlIHRvIGNoZWNrIHRoZSB0ZXh0dWFsCislIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBza2lwLgorJQorJSBUaGUgZm9sbG93aW5nIGlzIGFsbW9zdCBsaWtlIFxkZWZcemVyb3NraXBtYWNyb3swLjBwdH0gZXhjZXB0IHRoYXQKKyUgdGhlIGBgcCcnIGFuZCBgYHQnJyBjaGFyYWN0ZXJzIGhhdmUgY2F0Y29kZSBcb3RoZXIsIG5vdCAxMSAobGV0dGVyKS4KKyUKK1xlZGVmXHplcm9za2lwbWFjcm97XGV4cGFuZGFmdGVyXHRoZVxjc25hbWUgekBza2lwXGVuZGNzbmFtZX0KKyUKK1xuZXdza2lwXHdoYXRzaXRza2lwCitcbmV3Y291bnRcd2hhdHNpdHBlbmFsdHkKKyUKKyUgLi4uLCByZWFkeSwgR086CislCitcZGVmXHNhZmV3aGF0c2l0IzF7JQorXGlmaG1vZGUKKyAgIzElCitcZWxzZQorICAlIFxsYXN0c2tpcCBhbmQgXGxhc3RwZW5hbHR5IGNhbm5vdCBib3RoIGJlIG5vbnplcm8gc2ltdWx0YW5lb3VzbHkuCisgIFx3aGF0c2l0c2tpcCA9IFxsYXN0c2tpcAorICBcZWRlZlxsYXN0c2tpcG1hY3Jve1x0aGVcbGFzdHNraXB9JQorICBcd2hhdHNpdHBlbmFsdHkgPSBcbGFzdHBlbmFsdHkKKyAgJQorICAlIElmIFxsYXN0c2tpcCBpcyBub256ZXJvLCB0aGF0IG1lYW5zIHRoZSBsYXN0IGl0ZW0gd2FzIGEKKyAgJSBza2lwLiAgQW5kIHNpbmNlIGEgc2tpcCBpcyBkaXNjYXJkYWJsZSwgdGhhdCBtZWFucyB0aGlzCisgICUgLVxza2lwMCBnbHVlIHdlJ3JlIGluc2VydGluZyBpcyBwcmVjZWRlZCBieSBhCisgICUgbm9uLWRpc2NhcmRhYmxlIGl0ZW0sIHRoZXJlZm9yZSBpdCBpcyBub3QgYSBwb3RlbnRpYWwKKyAgJSBicmVha3BvaW50LCB0aGVyZWZvcmUgbm8gXG5vYnJlYWsgbmVlZGVkLgorICBcaWZ4XGxhc3Rza2lwbWFjcm9cemVyb3NraXBtYWNybworICBcZWxzZQorICAgIFx2c2tpcC1cd2hhdHNpdHNraXAKKyAgXGZpCisgICUKKyAgIzElCisgICUKKyAgXGlmeFxsYXN0c2tpcG1hY3JvXHplcm9za2lwbWFjcm8KKyAgICAlIElmIFxsYXN0c2tpcCB3YXMgemVybywgcGVyaGFwcyB0aGUgbGFzdCBpdGVtIHdhcyBhIHBlbmFsdHksIGFuZAorICAgICUgcGVyaGFwcyBpdCB3YXMgPj0xMDAwMCwgZS5nLiwgYSBcbm9icmVhay4gIEluIHRoYXQgY2FzZSwgd2Ugd2FudAorICAgICUgdG8gcmUtaW5zZXJ0IHRoZSBzYW1lIHBlbmFsdHkgKHZhbHVlcyA+MTAwMDAgYXJlIHVzZWQgZm9yIHZhcmlvdXMKKyAgICAlIHNpZ25hbHMpOyBzaW5jZSB3ZSBqdXN0IGluc2VydGVkIGEgbm9uLWRpc2NhcmRhYmxlIGl0ZW0sIGFueQorICAgICUgZm9sbG93aW5nIGdsdWUgKHN1Y2ggYXMgYSBccGFyc2tpcCkgd291bGQgYmUgYSBicmVha3BvaW50LiAgRm9yIGV4YW1wbGU6CisgICAgJSAKKyAgICAlICAgQGRlZmZuIGRlZmZuLXdoYXRldmVyCisgICAgJSAgIEB2aW5kZXggaW5kZXgtd2hhdGV2ZXIKKyAgICAlICAgRGVzY3JpcHRpb24uCisgICAgJSB3b3VsZCBhbGxvdyBhIGJyZWFrIGJldHdlZW4gdGhlIGluZGV4LXdoYXRldmVyIHdoYXRzaXQKKyAgICAlIGFuZCB0aGUgIkRlc2NyaXB0aW9uLiIgcGFyYWdyYXBoLgorICAgIFxpZm51bVx3aGF0c2l0cGVuYWx0eT45OTk5IFxwZW5hbHR5XHdoYXRzaXRwZW5hbHR5IFxmaQorICBcZWxzZQorICAgICUgT24gdGhlIG90aGVyIGhhbmQsIGlmIHdlIGhhZCBhIG5vbnplcm8gXGxhc3Rza2lwLAorICAgICUgdGhpcyBtYWtlLXVwIGdsdWUgd291bGQgYmUgcHJlY2VkZWQgYnkgYSBub24tZGlzY2FyZGFibGUgaXRlbQorICAgICUgKHRoZSB3aGF0c2l0IGZyb20gdGhlIFx3cml0ZSksIHNvIHdlIG11c3QgaW5zZXJ0IGEgXG5vYnJlYWsuCisgICAgXG5vYnJlYWtcdnNraXBcd2hhdHNpdHNraXAKKyAgXGZpCitcZmkKK30KKworJSBUaGUgaW5kZXggZW50cnkgd3JpdHRlbiBpbiB0aGUgZmlsZSBhY3R1YWxseSBsb29rcyBsaWtlCislICBcZW50cnkge3NvcnRzdHJpbmd9e3BhZ2V9e3RvcGljfQorJSBvcgorJSAgXGVudHJ5IHtzb3J0c3RyaW5nfXtwYWdlfXt0b3BpY317c3VidG9waWN9CislIFRoZSB0ZXhpbmRleCBwcm9ncmFtIHJlYWRzIGluIHRoZXNlIGZpbGVzIGFuZCB3cml0ZXMgZmlsZXMKKyUgY29udGFpbmluZyB0aGVzZSBraW5kcyBvZiBsaW5lczoKKyUgIFxpbml0aWFsIHtjfQorJSAgICAgYmVmb3JlIHRoZSBmaXJzdCB0b3BpYyB3aG9zZSBpbml0aWFsIGlzIGMKKyUgIFxlbnRyeSB7dG9waWN9e3BhZ2VsaXN0fQorJSAgICAgZm9yIGEgdG9waWMgdGhhdCBpcyB1c2VkIHdpdGhvdXQgc3VidG9waWNzCislICBccHJpbWFyeSB7dG9waWN9CislICAgICBmb3IgdGhlIGJlZ2lubmluZyBvZiBhIHRvcGljIHRoYXQgaXMgdXNlZCB3aXRoIHN1YnRvcGljcworJSAgXHNlY29uZGFyeSB7c3VidG9waWN9e3BhZ2VsaXN0fQorJSAgICAgZm9yIGVhY2ggc3VidG9waWMuCisKKyUgRGVmaW5lIHRoZSB1c2VyLWFjY2Vzc2libGUgaW5kZXhpbmcgY29tbWFuZHMKKyUgQGZpbmRleCwgQHZpbmRleCwgQGtpbmRleCwgQGNpbmRleC4KKworXGRlZlxmaW5kZXgge1xmbmluZGV4fQorXGRlZlxraW5kZXgge1xreWluZGV4fQorXGRlZlxjaW5kZXgge1xjcGluZGV4fQorXGRlZlx2aW5kZXgge1x2cmluZGV4fQorXGRlZlx0aW5kZXgge1x0cGluZGV4fQorXGRlZlxwaW5kZXgge1xwZ2luZGV4fQorCitcZGVmXGNpbmRleHN1YiB7XGJlZ2luZ3JvdXBcb2JleWxpbmVzXGNpbmRleHN1Yn0KK3tcb2JleWxpbmVzICUKK1xnZGVmXGNpbmRleHN1YiAiIzEiICMyXl5Ne1xlbmRncm91cCAlCitcZG9zdWJpbmR7Y3B9eyMyfXsjMX19fQorCislIERlZmluZSB0aGUgbWFjcm9zIHVzZWQgaW4gZm9ybWF0dGluZyBvdXRwdXQgb2YgdGhlIHNvcnRlZCBpbmRleCBtYXRlcmlhbC4KKworJSBAcHJpbnRpbmRleCBjYXVzZXMgYSBwYXJ0aWN1bGFyIGluZGV4ICh0aGUgPz9zIGZpbGUpIHRvIGdldCBwcmludGVkLgorJSBJdCBkb2VzIG5vdCBwcmludCBhbnkgY2hhcHRlciBoZWFkaW5nICh1c3VhbGx5IGFuIEB1bm51bWJlcmVkKS4KKyUKK1xwYXJzZWFyZ2RlZlxwcmludGluZGV4e1xiZWdpbmdyb3VwCisgIFxkb2JyZWFrIFxjaGFwaGVhZGluZ3NraXB7MTAwMDB9JQorICAlCisgIFxzbWFsbGZvbnRzIFxybQorICBcdG9sZXJhbmNlID0gOTUwMAorICBccGxhaW5mcmVuY2hzcGFjaW5nCisgIFxldmVyeXBhciA9IHt9JSBkb24ndCB3YW50IHRoZSBca2VyblwtcGFyaW5kZW50IGZyb20gaW5kZW50YXRpb24gc3VwcHJlc3Npb24uCisgICUKKyAgJSBTZWUgaWYgdGhlIGluZGV4IGZpbGUgZXhpc3RzIGFuZCBpcyBub25lbXB0eS4KKyAgJSBDaGFuZ2UgY2F0Y29kZSBvZiBAIGhlcmUgc28gdGhhdCBpZiB0aGUgaW5kZXggZmlsZSBjb250YWlucworICAlIFxpbml0aWFsIHtAfQorICAlIGFzIGl0cyBmaXJzdCBsaW5lLCBUZVggZG9lc24ndCBjb21wbGFpbiBhYm91dCBtaXNtYXRjaGVkIGJyYWNlcworICAlIChiZWNhdXNlIGl0IHRoaW5rcyBAfSBpcyBhIGNvbnRyb2wgc2VxdWVuY2UpLgorICBcY2F0Y29kZWBcQCA9IDExCisgIFxvcGVuaW4gMSBcam9ibmFtZS4jMXMKKyAgXGlmZW9mIDEKKyAgICAlIFxlbmRkb3VibGVjb2x1bW5zIGdldHMgY29uZnVzZWQgaWYgdGhlcmUgaXMgbm8gdGV4dCBpbiB0aGUgaW5kZXgsCisgICAgJSBhbmQgaXQgbG9zZXMgdGhlIGNoYXB0ZXIgdGl0bGUgYW5kIHRoZSBhdXggZmlsZSBlbnRyaWVzIGZvciB0aGUKKyAgICAlIGluZGV4LiAgVGhlIGVhc2llc3Qgd2F5IHRvIHByZXZlbnQgdGhpcyBwcm9ibGVtIGlzIHRvIG1ha2Ugc3VyZQorICAgICUgdGhlcmUgaXMgc29tZSB0ZXh0LgorICAgIFxwdXR3b3JkSW5kZXhOb25leGlzdGVudAorICBcZWxzZQorICAgICUKKyAgICAlIElmIHRoZSBpbmRleCBmaWxlIGV4aXN0cyBidXQgaXMgZW1wdHksIHRoZW4gXG9wZW5pbiBsZWF2ZXMgXGlmZW9mCisgICAgJSBmYWxzZS4gIFdlIGhhdmUgdG8gbWFrZSBUZVggdHJ5IHRvIHJlYWQgc29tZXRoaW5nIGZyb20gdGhlIGZpbGUsIHNvCisgICAgJSBpdCBjYW4gZGlzY292ZXIgaWYgdGhlcmUgaXMgYW55dGhpbmcgaW4gaXQuCisgICAgXHJlYWQgMSB0byBcdGVtcAorICAgIFxpZmVvZiAxCisgICAgICBccHV0d29yZEluZGV4SXNFbXB0eQorICAgIFxlbHNlCisgICAgICAlIEluZGV4IGZpbGVzIGFyZSBhbG1vc3QgVGV4aW5mbyBzb3VyY2UsIGJ1dCB3ZSB1c2UgXCBhcyB0aGUgZXNjYXBlCisgICAgICAlIGNoYXJhY3Rlci4gIEl0IHdvdWxkIGJlIGJldHRlciB0byB1c2UgQCwgYnV0IHRoYXQncyB0b28gYmlnIGEgY2hhbmdlCisgICAgICAlIHRvIG1ha2UgcmlnaHQgbm93LgorICAgICAgXGRlZlxpbmRleGJhY2tzbGFzaHtcYmFja3NsYXNoY3VyZm9udH0lCisgICAgICBcY2F0Y29kZWBcXCA9IDAKKyAgICAgIFxlc2NhcGVjaGFyID0gYFxcCisgICAgICBcYmVnaW5kb3VibGVjb2x1bW5zCisgICAgICBcaW5wdXQgXGpvYm5hbWUuIzFzCisgICAgICBcZW5kZG91YmxlY29sdW1ucworICAgIFxmaQorICBcZmkKKyAgXGNsb3NlaW4gMQorXGVuZGdyb3VwfQorCislIFRoZXNlIG1hY3JvcyBhcmUgdXNlZCBieSB0aGUgc29ydGVkIGluZGV4IGZpbGUgaXRzZWxmLgorJSBDaGFuZ2UgdGhlbSB0byBjb250cm9sIHRoZSBhcHBlYXJhbmNlIG9mIHRoZSBpbmRleC4KKworXGRlZlxpbml0aWFsIzF7eyUKKyAgJSBTb21lIG1pbm9yIGZvbnQgY2hhbmdlcyBmb3IgdGhlIHNwZWNpYWwgY2hhcmFjdGVycy4KKyAgXGxldFx0ZW50dD1cc2VjdHQgXGxldFx0dD1cc2VjdHQgXGxldFxzZj1cc2VjdHQKKyAgJQorICAlIFJlbW92ZSBhbnkgZ2x1ZSB3ZSBtYXkgaGF2ZSwgd2UnbGwgYmUgaW5zZXJ0aW5nIG91ciBvd24uCisgIFxyZW1vdmVsYXN0c2tpcAorICAlCisgICUgV2UgbGlrZSBicmVha3MgYmVmb3JlIHRoZSBpbmRleCBpbml0aWFscywgc28gaW5zZXJ0IGEgYm9udXMuCisgIFxub2JyZWFrCisgIFx2c2tpcCAwcHQgcGx1cyAzXGJhc2VsaW5lc2tpcAorICBccGVuYWx0eSAwCisgIFx2c2tpcCAwcHQgcGx1cyAtM1xiYXNlbGluZXNraXAKKyAgJQorICAlIFR5cGVzZXQgdGhlIGluaXRpYWwuICBNYWtpbmcgdGhpcyBhZGQgdXAgdG8gYSB3aG9sZSBudW1iZXIgb2YKKyAgJSBiYXNlbGluZXNraXBzIGluY3JlYXNlcyB0aGUgY2hhbmNlIG9mIHRoZSBkb3RzIGxpbmluZyB1cCBmcm9tIGNvbHVtbgorICAlIHRvIGNvbHVtbi4gIEl0IHN0aWxsIHdvbid0IG9mdGVuIGJlIHBlcmZlY3QsIGJlY2F1c2Ugb2YgdGhlIHN0cmV0Y2gKKyAgJSB3ZSBuZWVkIGJlZm9yZSBlYWNoIGVudHJ5LCBidXQgaXQncyBiZXR0ZXIuCisgICUKKyAgJSBObyBzaHJpbmsgYmVjYXVzZSBpdCBjb25mdXNlcyBcYmFsYW5jZWNvbHVtbnMuCisgIFx2c2tpcCAxLjY3XGJhc2VsaW5lc2tpcCBwbHVzIC41XGJhc2VsaW5lc2tpcAorICBcbGVmdGxpbmV7XHNlY2JmICMxfSUKKyAgJSBEbyBvdXIgYmVzdCBub3QgdG8gYnJlYWsgYWZ0ZXIgdGhlIGluaXRpYWwuCisgIFxub2JyZWFrCisgIFx2c2tpcCAuMzNcYmFzZWxpbmVza2lwIHBsdXMgLjFcYmFzZWxpbmVza2lwCit9fQorCislIFxlbnRyeSB0eXBlc2V0cyBhIHBhcmFncmFwaCBjb25zaXN0aW5nIG9mIHRoZSB0ZXh0ICgjMSksIGRvdCBsZWFkZXJzLCBhbmQKKyUgdGhlbiBwYWdlIG51bWJlciAoIzIpIGZsdXNoZWQgdG8gdGhlIHJpZ2h0IG1hcmdpbi4gIEl0IGlzIHVzZWQgZm9yIGluZGV4CislIGFuZCB0YWJsZSBvZiBjb250ZW50cyBlbnRyaWVzLiAgVGhlIHBhcmFncmFwaCBpcyBpbmRlbnRlZCBieSBcbGVmdHNraXAuCislCislIEEgc3RyYWlnaHRmb3J3YXJkIGltcGxlbWVudGF0aW9uIHdvdWxkIHN0YXJ0IGxpa2UgdGhpczoKKyUJXGRlZlxlbnRyeSMxIzJ7Li4uCislIEJ1dCB0aGlzIGZyb3plcyB0aGUgY2F0Y29kZXMgaW4gdGhlIGFyZ3VtZW50LCBhbmQgY2FuIGNhdXNlIHByb2JsZW1zIHRvCislIEBjb2RlLCB3aGljaCBzZXRzIC0gYWN0aXZlLiAgVGhpcyBwcm9ibGVtIHdhcyBmaXhlZCBieSBhIGtsdWRnZS0tLQorJSBgYC0nJyB3YXMgYWN0aXZlIHRocm91Z2hvdXQgd2hvbGUgaW5kZXgsIGJ1dCB0aGlzIGlzbid0IHJlYWxseSByaWdodC4KKyUKKyUgVGhlIHJpZ2h0IHNvbHV0aW9uIGlzIHRvIHByZXZlbnQgXGVudHJ5IGZyb20gc3dhbGxvd2luZyB0aGUgd2hvbGUgdGV4dC4KKyUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWthc2FsLCAyMW5vdjAzCitcZGVmXGVudHJ5eyUKKyAgXGJlZ2luZ3JvdXAKKyAgICAlCisgICAgJSBTdGFydCBhIG5ldyBwYXJhZ3JhcGggaWYgbmVjZXNzYXJ5LCBzbyBvdXIgYXNzaWdubWVudHMgYmVsb3cgY2FuJ3QKKyAgICAlIGFmZmVjdCBwcmV2aW91cyB0ZXh0LgorICAgIFxwYXIKKyAgICAlCisgICAgJSBEbyBub3QgZmlsbCBvdXQgdGhlIGxhc3QgbGluZSB3aXRoIHdoaXRlIHNwYWNlLgorICAgIFxwYXJmaWxsc2tpcCA9IDBpbgorICAgICUKKyAgICAlIE5vIGV4dHJhIHNwYWNlIGFib3ZlIHRoaXMgcGFyYWdyYXBoLgorICAgIFxwYXJza2lwID0gMGluCisgICAgJQorICAgICUgRG8gbm90IHByZWZlciBhIHNlcGFyYXRlIGxpbmUgZW5kaW5nIHdpdGggYSBoeXBoZW4gdG8gZmV3ZXIgbGluZXMuCisgICAgXGZpbmFsaHlwaGVuZGVtZXJpdHMgPSAwCisgICAgJQorICAgICUgXGhhbmdpbmRlbnQgaXMgb25seSByZWxldmFudCB3aGVuIHRoZSBlbnRyeSB0ZXh0IGFuZCBwYWdlIG51bWJlcgorICAgICUgZG9uJ3QgYm90aCBmaXQgb24gb25lIGxpbmUuICBJbiB0aGF0IGNhc2UsIGJvYiBzdWdnZXN0cyBzdGFydGluZyB0aGUKKyAgICAlIGRvdHMgcHJldHR5IGZhciBvdmVyIG9uIHRoZSBsaW5lLiAgVW5mb3J0dW5hdGVseSwgYSBsYXJnZQorICAgICUgaW5kZW50YXRpb24gbG9va3Mgd3Jvbmcgd2hlbiB0aGUgZW50cnkgdGV4dCBpdHNlbGYgaXMgYnJva2VuIGFjcm9zcworICAgICUgbGluZXMuICBTbyB3ZSB1c2UgYSBzbWFsbCBpbmRlbnRhdGlvbiBhbmQgcHV0IHVwIHdpdGggbG9uZyBsZWFkZXJzLgorICAgICUKKyAgICAlIFxoYW5nYWZ0ZXIgaXMgcmVzZXQgdG8gMSAod2hpY2ggaXMgdGhlIHZhbHVlIHdlIHdhbnQpIGF0IHRoZSBzdGFydAorICAgICUgb2YgZWFjaCBwYXJhZ3JhcGgsIHNvIHdlIG5lZWQgbm90IGRvIGFueXRoaW5nIHdpdGggdGhhdC4KKyAgICBcaGFuZ2luZGVudCA9IDJlbQorICAgICUKKyAgICAlIFdoZW4gdGhlIGVudHJ5IHRleHQgbmVlZHMgdG8gYmUgYnJva2VuLCBqdXN0IGZpbGwgb3V0IHRoZSBmaXJzdCBsaW5lCisgICAgJSB3aXRoIGJsYW5rIHNwYWNlLgorICAgIFxyaWdodHNraXAgPSAwcHQgcGx1czFmaWwKKyAgICAlCisgICAgJSBBIGJpdCBvZiBzdHJldGNoIGJlZm9yZSBlYWNoIGVudHJ5IGZvciB0aGUgYmVuZWZpdCBvZiBiYWxhbmNpbmcKKyAgICAlIGNvbHVtbnMuCisgICAgXHZza2lwIDBwdCBwbHVzMXB0CisgICAgJQorICAgICUgU3dhbGxvdyB0aGUgbGVmdCBicmFjZSBvZiB0aGUgdGV4dCAoZmlyc3QgcGFyYW1ldGVyKToKKyAgICBcYWZ0ZXJhc3NpZ25tZW50XGRvZW50cnkKKyAgICBcbGV0XHRlbXAgPQorfQorXGRlZlxkb2VudHJ5eyUKKyAgICBcYmdyb3VwICUgSW5zdGVhZCBvZiB0aGUgc3dhbGxvd2VkIGJyYWNlLgorICAgICAgXG5vaW5kZW50CisgICAgICBcYWZ0ZXJncm91cFxmaW5pc2hlbnRyeQorICAgICAgJSBBbmQgbm93IGNvbWVzIHRoZSB0ZXh0IG9mIHRoZSBlbnRyeS4KK30KK1xkZWZcZmluaXNoZW50cnkjMXslCisgICAgJSAjMSBpcyB0aGUgcGFnZSBudW1iZXIuCisgICAgJQorICAgICUgVGhlIGZvbGxvd2luZyBpcyBrbHVkZ2VkIHRvIG5vdCBvdXRwdXQgYSBsaW5lIG9mIGRvdHMgaW4gdGhlIGluZGV4IGlmCisgICAgJSB0aGVyZSBhcmUgbm8gcGFnZSBudW1iZXJzLiAgVGhlIG5leHQgcGVyc29uIHdobyBicmVha3MgdGhpcyB3aWxsIGJlCisgICAgJSBjdXJzZWQgYnkgYSBVbml4IGRhZW1vbi4KKyAgICBcc2V0Ym94XGJveEEgPSBcaGJveHsjMX0lCisgICAgXGlmZGltXHdkXGJveEEgPSAwcHQKKyAgICAgIFwgJQorICAgIFxlbHNlCisgICAgICAlCisgICAgICAlIElmIHdlIG11c3QsIHB1dCB0aGUgcGFnZSBudW1iZXIgb24gYSBsaW5lIG9mIGl0cyBvd24sIGFuZCBmaWxsIG91dAorICAgICAgJSB0aGlzIGxpbmUgd2l0aCBibGFuayBzcGFjZS4gIChUaGUgXGhmaWwgaXMgb3ZlcndoZWxtZWQgd2l0aCB0aGUKKyAgICAgICUgZmlsbCBsZWFkZXJzIGdsdWUgaW4gXGluZGV4ZG90ZmlsbCBpZiB0aGUgcGFnZSBudW1iZXIgZG9lcyBmaXQuKQorICAgICAgXGhmaWxccGVuYWx0eTUwCisgICAgICBcbnVsbFxub2JyZWFrXGluZGV4ZG90ZmlsbCAlIEhhdmUgbGVhZGVycyBiZWZvcmUgdGhlIHBhZ2UgbnVtYmVyLgorICAgICAgJQorICAgICAgJSBUaGUgYFwgJyBoZXJlIGlzIHJlbW92ZWQgYnkgdGhlIGltcGxpY2l0IFx1bnNraXAgdGhhdCBUZVggZG9lcyBhcworICAgICAgJSBwYXJ0IG9mICh0aGUgcHJpbWl0aXZlKSBccGFyLiAgV2l0aG91dCBpdCwgYSBzcHVyaW91cyB1bmRlcmZ1bGwKKyAgICAgICUgXGhib3ggZW5zdWVzLgorICAgICAgXGlmcGRmCisJXHBkZmdldHRva3MjMS4lCisJXCBcdGhlXHRva3NBCisgICAgICBcZWxzZQorCVwgIzElCisgICAgICBcZmkKKyAgICBcZmkKKyAgICBccGFyCisgIFxlbmRncm91cAorfQorCislIExpa2UgcGxhaW4udGV4J3MgXGRvdGZpbGwsIGV4Y2VwdCB1c2VzIHVwIGF0IGxlYXN0IDEgZW0uCitcZGVmXGluZGV4ZG90ZmlsbHtcY2xlYWRlcnMKKyAgXGhib3h7JFxtYXRoc3Vycm91bmQ9MHB0IFxta2VybjEuNW11Llxta2VybjEuNW11JH1caHNraXAgMWVtIHBsdXMgMWZpbGx9CisKK1xkZWZccHJpbWFyeSAjMXtcbGluZXsjMVxoZmlsfX0KKworXG5ld3NraXBcc2Vjb25kYXJ5aW5kZW50IFxzZWNvbmRhcnlpbmRlbnQ9MC41Y20KK1xkZWZcc2Vjb25kYXJ5IzEjMnt7JQorICBccGFyZmlsbHNraXA9MGluCisgIFxwYXJza2lwPTBpbgorICBcaGFuZ2luZGVudD0xaW4KKyAgXGhhbmdhZnRlcj0xCisgIFxub2luZGVudFxoc2tpcFxzZWNvbmRhcnlpbmRlbnRcaGJveHsjMX1caW5kZXhkb3RmaWxsCisgIFxpZnBkZgorICAgIFxwZGZnZXR0b2tzIzIuXCBcdGhlXHRva3NBICUgVGhlIHBhZ2UgbnVtYmVyIGVuZHMgdGhlIHBhcmFncmFwaC4KKyAgXGVsc2UKKyAgICAjMgorICBcZmkKKyAgXHBhcgorfX0KKworJSBEZWZpbmUgdHdvLWNvbHVtbiBtb2RlLCB3aGljaCB3ZSB1c2UgdG8gdHlwZXNldCBpbmRleGVzLgorJSBBZGFwdGVkIGZyb20gdGhlIFRlWGJvb2ssIHBhZ2UgNDE2LCB3aGljaCBpcyB0byBzYXksCislIHRoZSBtYW5tYWMudGV4IGZvcm1hdCB1c2VkIHRvIHByaW50IHRoZSBUZVhib29rIGl0c2VsZi4KK1xjYXRjb2RlYFxAPTExCisKK1xuZXdib3hccGFydGlhbHBhZ2UKK1xuZXdkaW1lblxkb3VibGVjb2x1bW5oc2l6ZQorCitcZGVmXGJlZ2luZG91YmxlY29sdW1uc3tcYmVnaW5ncm91cCAlIGVuZGVkIGJ5IFxlbmRkb3VibGVjb2x1bW5zCisgICUgR3JhYiBhbnkgc2luZ2xlLWNvbHVtbiBtYXRlcmlhbCBhYm92ZSB1cy4KKyAgXG91dHB1dCA9IHslCisgICAgJQorICAgICUgSGVyZSBpcyBhIHBvc3NpYmlsaXR5IG5vdCBmb3Jlc2VlbiBpbiBtYW5tYWM6IGlmIHdlIGFjY3VtdWxhdGUgYQorICAgICUgd2hvbGUgbG90IG9mIG1hdGVyaWFsLCB3ZSBtaWdodCBlbmQgdXAgY2FsbGluZyB0aGlzIFxvdXRwdXQKKyAgICAlIHJvdXRpbmUgdHdpY2UgaW4gYSByb3cgKHNlZSB0aGUgZG91YmxlY29sLWxvc2UgdGVzdCwgd2hpY2ggaXMKKyAgICAlIGVzc2VudGlhbGx5IGEgY291cGxlIG9mIGluZGV4ZXMgd2l0aCBAc2V0Y2hhcHRlcm5ld3BhZ2Ugb2ZmKS4gIEluCisgICAgJSB0aGF0IGNhc2Ugd2UganVzdCBzaGlwIG91dCB3aGF0IGlzIGluIFxwYXJ0aWFscGFnZSB3aXRoIHRoZSBub3JtYWwKKyAgICAlIG91dHB1dCByb3V0aW5lLiAgR2VuZXJhbGx5LCBccGFydGlhbHBhZ2Ugd2lsbCBiZSBlbXB0eSB3aGVuIHRoaXMKKyAgICAlIHJ1bnMgYW5kIHRoaXMgd2lsbCBiZSBhIG5vLW9wLiAgU2VlIHRoZSBpbmRleHNwcmVhZC50ZXggdGVzdCBjYXNlLgorICAgIFxpZnZvaWRccGFydGlhbHBhZ2UgXGVsc2UKKyAgICAgIFxvbmVwYWdlb3V0e1xwYWdlY29udGVudHNccGFydGlhbHBhZ2V9JQorICAgIFxmaQorICAgICUKKyAgICBcZ2xvYmFsXHNldGJveFxwYXJ0aWFscGFnZSA9IFx2Ym94eyUKKyAgICAgICUgVW52Ym94IHRoZSBtYWluIG91dHB1dCBwYWdlLgorICAgICAgXHVudmJveFxQQUdFCisgICAgICBca2Vybi1cdG9wc2tpcCBca2VyblxiYXNlbGluZXNraXAKKyAgICB9JQorICB9JQorICBcZWplY3QgJSBydW4gdGhhdCBvdXRwdXQgcm91dGluZSB0byBzZXQgXHBhcnRpYWxwYWdlCisgICUKKyAgJSBVc2UgdGhlIGRvdWJsZS1jb2x1bW4gb3V0cHV0IHJvdXRpbmUgZm9yIHN1YnNlcXVlbnQgcGFnZXMuCisgIFxvdXRwdXQgPSB7XGRvdWJsZWNvbHVtbm91dH0lCisgICUKKyAgJSBDaGFuZ2UgdGhlIHBhZ2Ugc2l6ZSBwYXJhbWV0ZXJzLiAgV2UgY291bGQgZG8gdGhpcyBvbmNlIG91dHNpZGUgdGhpcworICAlIHJvdXRpbmUsIGluIGVhY2ggb2YgQHNtYWxsYm9vaywgQGFmb3VycGFwZXIsIGFuZCB0aGUgZGVmYXVsdCA4LjV4MTEKKyAgJSBmb3JtYXQsIGJ1dCB0aGVuIHdlIHJlcGVhdCB0aGUgc2FtZSBjb21wdXRhdGlvbi4gIFJlcGVhdGluZyBhIGNvdXBsZQorICAlIG9mIGFzc2lnbm1lbnRzIG9uY2UgcGVyIGluZGV4IGlzIGNsZWFybHkgbWVhbmluZ2xlc3MgZm9yIHRoZQorICAlIGV4ZWN1dGlvbiB0aW1lLCBzbyB3ZSBtYXkgYXMgd2VsbCBkbyBpdCBpbiBvbmUgcGxhY2UuCisgICUKKyAgJSBGaXJzdCB3ZSBoYWx2ZSB0aGUgbGluZSBsZW5ndGgsIGxlc3MgYSBsaXR0bGUgZm9yIHRoZSBndXR0ZXIgYmV0d2VlbgorICAlIHRoZSBjb2x1bW5zLiAgV2UgY29tcHV0ZSB0aGUgZ3V0dGVyIGJhc2VkIG9uIHRoZSBsaW5lIGxlbmd0aCwgc28gaXQKKyAgJSBjaGFuZ2VzIGF1dG9tYXRpY2FsbHkgd2l0aCB0aGUgcGFwZXIgZm9ybWF0LiAgVGhlIG1hZ2ljIGNvbnN0YW50CisgICUgYmVsb3cgaXMgY2hvc2VuIHNvIHRoYXQgdGhlIGd1dHRlciBoYXMgdGhlIHNhbWUgdmFsdWUgKHdlbGwsICstPDFwdCkKKyAgJSBhcyBpdCBkaWQgd2hlbiB3ZSBoYXJkLWNvZGVkIGl0LgorICAlCisgICUgV2UgcHV0IHRoZSByZXN1bHQgaW4gYSBzZXBhcmF0ZSByZWdpc3RlciwgXGRvdWJsZWNvbHVtaHNpemUsIHNvIHdlCisgICUgY2FuIHJlc3RvcmUgaXQgaW4gXHBhZ2Vzb2ZhciwgYWZ0ZXIgXGhzaXplIGl0c2VsZiBoYXMgKHBvdGVudGlhbGx5KQorICAlIGJlZW4gY2xvYmJlcmVkLgorICAlCisgIFxkb3VibGVjb2x1bW5oc2l6ZSA9IFxoc2l6ZQorICAgIFxhZHZhbmNlXGRvdWJsZWNvbHVtbmhzaXplIGJ5IC0uMDQxNTRcaHNpemUKKyAgICBcZGl2aWRlXGRvdWJsZWNvbHVtbmhzaXplIGJ5IDIKKyAgXGhzaXplID0gXGRvdWJsZWNvbHVtbmhzaXplCisgICUKKyAgJSBEb3VibGUgdGhlIFx2c2l6ZSBhcyB3ZWxsLiAgKFdlIGRvbid0IG5lZWQgYSBzZXBhcmF0ZSByZWdpc3RlciBoZXJlLAorICAlIHNpbmNlIG5vYm9keSBjbG9iYmVycyBcdnNpemUuKQorICBcdnNpemUgPSAyXHZzaXplCit9CisKKyUgVGhlIGRvdWJsZS1jb2x1bW4gb3V0cHV0IHJvdXRpbmUgZm9yIGFsbCBkb3VibGUtY29sdW1uIHBhZ2VzIGV4Y2VwdAorJSB0aGUgbGFzdC4KKyUKK1xkZWZcZG91YmxlY29sdW1ub3V0eyUKKyAgXHNwbGl0dG9wc2tpcD1cdG9wc2tpcCBcc3BsaXRtYXhkZXB0aD1cbWF4ZGVwdGgKKyAgJSBHZXQgdGhlIGF2YWlsYWJsZSBzcGFjZSBmb3IgdGhlIGRvdWJsZSBjb2x1bW5zIC0tIHRoZSBub3JtYWwKKyAgJSAodW5kb3VibGVkKSBwYWdlIGhlaWdodCBtaW51cyBhbnkgbWF0ZXJpYWwgbGVmdCBvdmVyIGZyb20gdGhlCisgICUgcHJldmlvdXMgcGFnZS4KKyAgXGRpbWVuQCA9IFx2c2l6ZQorICBcZGl2aWRlXGRpbWVuQCBieSAyCisgIFxhZHZhbmNlXGRpbWVuQCBieSAtXGh0XHBhcnRpYWxwYWdlCisgICUKKyAgJSBib3gwIHdpbGwgYmUgdGhlIGxlZnQtaGFuZCBjb2x1bW4sIGJveDIgdGhlIHJpZ2h0LgorICBcc2V0Ym94MD1cdnNwbGl0MjU1IHRvXGRpbWVuQCBcc2V0Ym94Mj1cdnNwbGl0MjU1IHRvXGRpbWVuQAorICBcb25lcGFnZW91dFxwYWdlc29mYXIKKyAgXHVudmJveDI1NQorICBccGVuYWx0eVxvdXRwdXRwZW5hbHR5Cit9CislCislIFJlLW91dHB1dCB0aGUgY29udGVudHMgb2YgdGhlIG91dHB1dCBwYWdlIC0tIGFueSBwcmV2aW91cyBtYXRlcmlhbCwKKyUgZm9sbG93ZWQgYnkgdGhlIHR3byBib3hlcyB3ZSBqdXN0IHNwbGl0LCBpbiBib3gwIGFuZCBib3gyLgorXGRlZlxwYWdlc29mYXJ7JQorICBcdW52Ym94XHBhcnRpYWxwYWdlCisgICUKKyAgXGhzaXplID0gXGRvdWJsZWNvbHVtbmhzaXplCisgIFx3ZDA9XGhzaXplIFx3ZDI9XGhzaXplCisgIFxoYm94IHRvXHBhZ2V3aWR0aHtcYm94MFxoZmlsXGJveDJ9JQorfQorJQorJSBBbGwgZG9uZSB3aXRoIGRvdWJsZSBjb2x1bW5zLgorXGRlZlxlbmRkb3VibGVjb2x1bW5zeyUKKyAgJSBUaGUgZm9sbG93aW5nIHBlbmFsdHkgZW5zdXJlcyB0aGF0IHRoZSBwYWdlIGJ1aWxkZXIgaXMgZXhlcmNpc2VkCisgICUgX2JlZm9yZV8gd2UgY2hhbmdlIHRoZSBvdXRwdXQgcm91dGluZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGluIHRoZQorICAlIGZvbGxvd2luZyBzaXR1YXRpb246CisgICUKKyAgJSBUaGUgbGFzdCBzZWN0aW9uIG9mIHRoZSBpbmRleCBjb25zaXN0cyBvbmx5IG9mIGEgc2luZ2xlIGVudHJ5LgorICAlIEJlZm9yZSB0aGlzIHNlY3Rpb24sIFxwYWdldG90YWwgaXMgbGVzcyB0aGFuIFxwYWdlZ29hbCwgc28gbm8KKyAgJSBicmVhayBvY2N1cnMgYmVmb3JlIHRoZSBsYXN0IHNlY3Rpb24gc3RhcnRzLiAgSG93ZXZlciwgdGhlIGxhc3QKKyAgJSBzZWN0aW9uLCBjb25zaXN0aW5nIG9mIFxpbml0aWFsIGFuZCB0aGUgc2luZ2xlIFxlbnRyeSwgZG9lcyBub3QKKyAgJSBmaXQgb24gdGhlIHBhZ2UgYW5kIGhhcyB0byBiZSBicm9rZW4gb2ZmLiAgV2l0aG91dCB0aGUgZm9sbG93aW5nCisgICUgcGVuYWx0eSB0aGUgcGFnZSBidWlsZGVyIHdpbGwgbm90IGJlIGV4ZXJjaXNlZCB1bnRpbCBcZWplY3QKKyAgJSBiZWxvdywgYW5kIGJ5IHRoYXQgdGltZSB3ZSdsbCBhbHJlYWR5IGhhdmUgY2hhbmdlZCB0aGUgb3V0cHV0CisgICUgcm91dGluZSB0byB0aGUgXGJhbGFuY2Vjb2x1bW5zIHZlcnNpb24sIHNvIHRoZSBuZXh0LXRvLWxhc3QKKyAgJSBkb3VibGUtY29sdW1uIHBhZ2Ugd2lsbCBiZSBwcm9jZXNzZWQgd2l0aCBcYmFsYW5jZWNvbHVtbnMsIHdoaWNoCisgICUgaXMgd3Jvbmc6ICBUaGUgdHdvIGNvbHVtbnMgd2lsbCBnbyB0byB0aGUgbWFpbiB2ZXJ0aWNhbCBsaXN0LCB3aXRoCisgICUgdGhlIGJyb2tlbi1vZmYgc2VjdGlvbiBpbiB0aGUgcmVjZW50IGNvbnRyaWJ1dGlvbnMuICBBcyBzb29uIGFzCisgICUgdGhlIG91dHB1dCByb3V0aW5lIGZpbmlzaGVzLCBUZVggc3RhcnRzIHJlY29uc2lkZXJpbmcgdGhlIHBhZ2UKKyAgJSBicmVhay4gIFRoZSB0d28gY29sdW1ucyBhbmQgdGhlIGJyb2tlbi1vZmYgc2VjdGlvbiBib3RoIGZpdCBvbiB0aGUKKyAgJSBwYWdlLCBiZWNhdXNlIHRoZSB0d28gY29sdW1ucyBub3cgdGFrZSB1cCBvbmx5IGhhbGYgb2YgdGhlIHBhZ2UKKyAgJSBnb2FsLiAgV2hlbiBUZVggc2VlcyBcZWplY3QgZnJvbSBiZWxvdyB3aGljaCBmb2xsb3dzIHRoZSBmaW5hbAorICAlIHNlY3Rpb24sIGl0IGludm9rZXMgdGhlIG5ldyBvdXRwdXQgcm91dGluZSB0aGF0IHdlJ3ZlIHNldCBhZnRlcgorICAlIFxiYWxhbmNlY29sdW1ucyBiZWxvdzsgXG9uZXBhZ2VvdXQgd2lsbCB0cnkgdG8gZml0IHRoZSB0d28gY29sdW1ucworICAlIGFuZCB0aGUgZmluYWwgc2VjdGlvbiBpbnRvIHRoZSB2Ym94IG9mIFxwYWdlaGVpZ2h0IChzZWUKKyAgJSBccGFnZWJvZHkpLCBjYXVzaW5nIGFuIG92ZXJmdWxsIGJveC4KKyAgJQorICAlIE5vdGUgdGhhdCBnbHVlIHdvbid0IHdvcmsgaGVyZSwgYmVjYXVzZSBnbHVlIGRvZXMgbm90IGV4ZXJjaXNlIHRoZQorICAlIHBhZ2UgYnVpbGRlciwgdW5saWtlIHBlbmFsdGllcyAoc2VlIFRoZSBUZVhib29rLCBwcC4gMjgwLTI4MSkuCisgIFxwZW5hbHR5MAorICAlCisgIFxvdXRwdXQgPSB7JQorICAgICUgU3BsaXQgdGhlIGxhc3Qgb2YgdGhlIGRvdWJsZS1jb2x1bW4gbWF0ZXJpYWwuICBMZWF2ZSBpdCBvbiB0aGUKKyAgICAlIGN1cnJlbnQgcGFnZSwgbm8gYXV0b21hdGljIHBhZ2UgYnJlYWsuCisgICAgXGJhbGFuY2Vjb2x1bW5zCisgICAgJQorICAgICUgSWYgd2UgZW5kIHVwIHNwbGl0dGluZyB0b28gbXVjaCBtYXRlcmlhbCBmb3IgdGhlIGN1cnJlbnQgcGFnZSwKKyAgICAlIHRob3VnaCwgdGhlcmUgd2lsbCBiZSBhbm90aGVyIHBhZ2UgYnJlYWsgcmlnaHQgYWZ0ZXIgdGhpcyBcb3V0cHV0CisgICAgJSBpbnZvY2F0aW9uIGVuZHMuICBIYXZpbmcgY2FsbGVkIFxiYWxhbmNlY29sdW1ucyBvbmNlLCB3ZSBkbyBub3QKKyAgICAlIHdhbnQgdG8gY2FsbCBpdCBhZ2Fpbi4gIFRoZXJlZm9yZSwgcmVzZXQgXG91dHB1dCB0byBpdHMgbm9ybWFsCisgICAgJSBkZWZpbml0aW9uIHJpZ2h0IGF3YXkuICAoV2UgaG9wZSBcYmFsYW5jZWNvbHVtbnMgd2lsbCBuZXZlciBiZQorICAgICUgY2FsbGVkIG9uIHRvIGJhbGFuY2UgdG9vIG11Y2ggbWF0ZXJpYWwsIGJ1dCBpZiBpdCBpcywgdGhpcyBtYWtlcworICAgICUgdGhlIG91dHB1dCBzb21ld2hhdCBtb3JlIHBhbGF0YWJsZS4pCisgICAgXGdsb2JhbFxvdXRwdXQgPSB7XG9uZXBhZ2VvdXR7XHBhZ2Vjb250ZW50c1xQQUdFfX0lCisgIH0lCisgIFxlamVjdAorICBcZW5kZ3JvdXAgJSBzdGFydGVkIGluIFxiZWdpbmRvdWJsZWNvbHVtbnMKKyAgJQorICAlIFxwYWdlZ29hbCB3YXMgc2V0IHRvIHRoZSBkb3VibGVkIFx2c2l6ZSBhYm92ZSwgc2luY2Ugd2UgcmVzdGFydGVkCisgICUgdGhlIGN1cnJlbnQgcGFnZS4gIFdlJ3JlIG5vdyBiYWNrIHRvIG5vcm1hbCBzaW5nbGUtY29sdW1uCisgICUgdHlwZXNldHRpbmcsIHNvIHJlc2V0IFxwYWdlZ29hbCB0byB0aGUgbm9ybWFsIFx2c2l6ZSAoYWZ0ZXIgdGhlCisgICUgXGVuZGdyb3VwIHdoZXJlIFx2c2l6ZSBnb3QgcmVzdG9yZWQpLgorICBccGFnZWdvYWwgPSBcdnNpemUKK30KKyUKKyUgQ2FsbGVkIGF0IHRoZSBlbmQgb2YgdGhlIGRvdWJsZSBjb2x1bW4gbWF0ZXJpYWwuCitcZGVmXGJhbGFuY2Vjb2x1bW5zeyUKKyAgXHNldGJveDAgPSBcdmJveHtcdW52Ym94MjU1fSUgbGlrZSBcYm94MjU1IGJ1dCBtb3JlIGVmZmljaWVudCwgc2VlIHAuMTIwLgorICBcZGltZW5AID0gXGh0MAorICBcYWR2YW5jZVxkaW1lbkAgYnkgXHRvcHNraXAKKyAgXGFkdmFuY2VcZGltZW5AIGJ5LVxiYXNlbGluZXNraXAKKyAgXGRpdmlkZVxkaW1lbkAgYnkgMiAlIHRhcmdldCB0byBzcGxpdCB0bworICAlZGVidWdcbWVzc2FnZXtmaW5hbCAyLWNvbHVtbiBtYXRlcmlhbCBoZWlnaHQ9XHRoZVxodDAsIHRhcmdldD1cdGhlXGRpbWVuQC59JQorICBcc3BsaXR0b3Bza2lwID0gXHRvcHNraXAKKyAgJSBMb29wIHVudGlsIHdlIGdldCBhIGRlY2VudCBicmVha3BvaW50LgorICB7JQorICAgIFx2YmFkbmVzcyA9IDEwMDAwCisgICAgXGxvb3AKKyAgICAgIFxnbG9iYWxcc2V0Ym94MyA9IFxjb3B5MAorICAgICAgXGdsb2JhbFxzZXRib3gxID0gXHZzcGxpdDMgdG8gXGRpbWVuQAorICAgIFxpZmRpbVxodDM+XGRpbWVuQAorICAgICAgXGdsb2JhbFxhZHZhbmNlXGRpbWVuQCBieSAxcHQKKyAgICBccmVwZWF0CisgIH0lCisgICVkZWJ1Z1xtZXNzYWdle3NwbGl0IHRvIFx0aGVcZGltZW5ALCBjb2x1bW4gaGVpZ2h0czogXHRoZVxodDEsIFx0aGVcaHQzLn0lCisgIFxzZXRib3gwPVx2Ym94IHRvXGRpbWVuQHtcdW52Ym94MX0lCisgIFxzZXRib3gyPVx2Ym94IHRvXGRpbWVuQHtcdW52Ym94M30lCisgICUKKyAgXHBhZ2Vzb2ZhcgorfQorXGNhdGNvZGVgXEAgPSBcb3RoZXIKKworCitcbWVzc2FnZXtzZWN0aW9uaW5nLH0KKyUgQ2hhcHRlcnMsIHNlY3Rpb25zLCBldGMuCisKKyUgXHVubnVtYmVyZWRubyBpcyBhbiBveHltb3Jvbiwgb2YgY291cnNlLiAgQnV0IHdlIGNvdW50IHRoZSB1bm51bWJlcmVkCislIHNlY3Rpb25zIHNvIHRoYXQgd2UgY2FuIHJlZmVyIHRvIHRoZW0gdW5hbWJpZ3VvdXNseSBpbiB0aGUgcGRmCislIG91dGxpbmVzIGJ5IHRoZWlyICJzZWN0aW9uIG51bWJlciIuICBXZSBhdm9pZCBjb2xsaXNpb25zIHdpdGggY2hhcHRlcgorJSBudW1iZXJzIGJ5IHN0YXJ0aW5nIHRoZW0gYXQgMTAwMDAuICAoSWYgYSBkb2N1bWVudCBldmVyIGhhcyAxMDAwMAorJSBjaGFwdGVycywgd2UncmUgaW4gdHJvdWJsZSBhbnl3YXksIEknbSBzdXJlLikKK1xuZXdjb3VudFx1bm51bWJlcmVkbm8gXHVubnVtYmVyZWRubyA9IDEwMDAwCitcbmV3Y291bnRcY2hhcG5vCitcbmV3Y291bnRcc2Vjbm8gICAgICAgIFxzZWNubz0wCitcbmV3Y291bnRcc3Vic2Vjbm8gICAgIFxzdWJzZWNubz0wCitcbmV3Y291bnRcc3Vic3Vic2Vjbm8gIFxzdWJzdWJzZWNubz0wCisKKyUgVGhpcyBjb3VudGVyIGlzIGZ1bm55IHNpbmNlIGl0IGNvdW50cyB0aHJvdWdoIGNoYXJjb2RlcyBvZiBsZXR0ZXJzIEEsIEIsIC4uLgorXG5ld2NvdW50XGFwcGVuZGl4bm8gIFxhcHBlbmRpeG5vID0gYFxACislCislIFxkZWZcYXBwZW5kaXhsZXR0ZXJ7XGNoYXJcdGhlXGFwcGVuZGl4bm99CislIFdlIGRvIHRoZSBmb2xsb3dpbmcgdWdseSBjb25kaXRpb25hbCBpbnN0ZWFkIG9mIHRoZSBhYm92ZSBzaW1wbGUKKyUgY29uc3RydWN0IGZvciB0aGUgc2FrZSBvZiBwZGZ0ZXgsIHdoaWNoIG5lZWRzIHRoZSBhY3R1YWwKKyUgbGV0dGVyIGluIHRoZSBleHBhbnNpb24sIG5vdCBqdXN0IHR5cGVzZXQuCislCitcZGVmXGFwcGVuZGl4bGV0dGVyeyUKKyAgXGlmbnVtXGFwcGVuZGl4bm89YEEgQSUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gQiBCJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBDIEMlCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YEQgRCUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gRSBFJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBGIEYlCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YEcgRyUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gSCBIJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBJIEklCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YEogSiUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gSyBLJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBMIEwlCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YE0gTSUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gTiBOJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBPIE8lCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YFAgUCUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gUSBRJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBSIFIlCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YFMgUyUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gVCBUJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBVIFUlCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YFYgViUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gVyBXJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBYIFglCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YFkgWSUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gWiBaJQorICAlIFRoZSBcdGhlIGlzIG5lY2Vzc2FyeSwgZGVzcGl0ZSBhcHBlYXJhbmNlcywgYmVjYXVzZSBcYXBwZW5kaXhsZXR0ZXIgaXMKKyAgJSBleHBhbmRlZCB3aGlsZSB3cml0aW5nIHRoZSAudG9jIGZpbGUuICBcY2hhclxhcHBlbmRpeG5vIGlzIG5vdAorICAlIGV4cGFuZGFibGUsIHRodXMgaXQgaXMgd3JpdHRlbiBsaXRlcmFsbHksIHRodXMgYWxsIGFwcGVuZGl4ZXMgY29tZSBvdXQKKyAgJSB3aXRoIHRoZSBzYW1lIGxldHRlciAob3IgQCkgaW4gdGhlIHRvYyB3aXRob3V0IGl0LgorICBcZWxzZVxjaGFyXHRoZVxhcHBlbmRpeG5vCisgIFxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaQorICBcZmlcZmlcZmlcZmlcZmlcZmlcZmlcZmlcZmlcZmlcZmlcZmlcZml9CisKKyUgRWFjaCBAY2hhcHRlciBkZWZpbmVzIHRoaXMgYXMgdGhlIG5hbWUgb2YgdGhlIGNoYXB0ZXIuCislIHBhZ2UgaGVhZGluZ3MgYW5kIGZvb3RpbmdzIGNhbiB1c2UgaXQuICBAc2VjdGlvbiBkb2VzIGxpa2V3aXNlLgorJSBIb3dldmVyLCB0aGV5IGFyZSBub3QgcmVsaWFibGUsIGJlY2F1c2Ugd2UgZG9uJ3QgdXNlIG1hcmtzLgorXGRlZlx0aGlzY2hhcHRlcnt9CitcZGVmXHRoaXNzZWN0aW9ue30KKworXG5ld2NvdW50XGFic3NlY2xldmVsICUgdXNlZCB0byBjYWxjdWxhdGUgcHJvcGVyIGhlYWRpbmcgbGV2ZWwKK1xuZXdjb3VudFxzZWNiYXNlXHNlY2Jhc2U9MCAlIEByYWlzZXNlY3Rpb25zL0Bsb3dlcnNlY3Rpb25zIG1vZGlmeSB0aGlzIGNvdW50CisKKyUgQHJhaXNlc2VjdGlvbnM6IHRyZWF0IEBzZWN0aW9uIGFzIGNoYXB0ZXIsIEBzdWJzZWN0aW9uIGFzIHNlY3Rpb24sIGV0Yy4KK1xkZWZccmFpc2VzZWN0aW9uc3tcZ2xvYmFsXGFkdmFuY2Vcc2VjYmFzZSBieSAtMX0KK1xsZXRcdXA9XHJhaXNlc2VjdGlvbnMgJSBvcmlnaW5hbCBCRm94IG5hbWUKKworJSBAbG93ZXJzZWN0aW9uczogdHJlYXQgQGNoYXB0ZXIgYXMgc2VjdGlvbiwgQHNlY3Rpb24gYXMgc3Vic2VjdGlvbiwgZXRjLgorXGRlZlxsb3dlcnNlY3Rpb25ze1xnbG9iYWxcYWR2YW5jZVxzZWNiYXNlIGJ5IDF9CitcbGV0XGRvd249XGxvd2Vyc2VjdGlvbnMgJSBvcmlnaW5hbCBCRm94IG5hbWUKKworJSB3ZSBvbmx5IGhhdmUgc3Vic3ViLgorXGNoYXJkZWZcbWF4c2VjbGV2ZWwgPSAzCislCislIEEgbnVtYmVyZWQgc2VjdGlvbiB3aXRoaW4gYW4gdW5udW1iZXJlZCBjaGFuZ2VzIHRvIHVubnVtYmVyZWQgdG9vLgorJSBUbyBhY2hpdmUgdGhpcywgcmVtZW1iZXIgdGhlICJiaWdnZXN0IiB1bm51bS4gc2VjLiB3ZSBhcmUgY3VycmVudGx5IGluOgorXGNoYXJkZWZcdW5tbGV2ZWwgPSBcbWF4c2VjbGV2ZWwKKyUKKyUgVHJhY2Ugd2hldGhlciB0aGUgY3VycmVudCBjaGFwdGVyIGlzIGFuIGFwcGVuZGl4IG9yIG5vdDoKKyUgXGNoYXBoZWFkdHlwZSBpcyAiTiIgb3IgIkEiLCB1bm51bWJlcmVkIGNoYXB0ZXJzIGFyZSBpZ25vcmVkLgorXGRlZlxjaGFwaGVhZHR5cGV7Tn0KKworJSBDaG9vc2UgYSBoZWFkaW5nIG1hY3JvCislICMxIGlzIGhlYWRpbmcgdHlwZQorJSAjMiBpcyBoZWFkaW5nIGxldmVsCislICMzIGlzIHRleHQgZm9yIGhlYWRpbmcKK1xkZWZcZ2VuaGVhZCMxIzIjM3slCisgICUgQ29tcHV0ZSB0aGUgYWJzLiBzZWMuIGxldmVsOgorICBcYWJzc2VjbGV2ZWw9IzIKKyAgXGFkdmFuY2VcYWJzc2VjbGV2ZWwgYnkgXHNlY2Jhc2UKKyAgJSBNYWtlIHN1cmUgXGFic3NlY2xldmVsIGRvZXNuJ3QgZmFsbCBvdXRzaWRlIHRoZSByYW5nZToKKyAgXGlmbnVtIFxhYnNzZWNsZXZlbCA8IDAKKyAgICBcYWJzc2VjbGV2ZWwgPSAwCisgIFxlbHNlCisgICAgXGlmbnVtIFxhYnNzZWNsZXZlbCA+IDMKKyAgICAgIFxhYnNzZWNsZXZlbCA9IDMKKyAgICBcZmkKKyAgXGZpCisgICUgVGhlIGhlYWRpbmcgdHlwZToKKyAgXGRlZlxoZWFkdHlwZXsjMX0lCisgIFxpZiBcaGVhZHR5cGUgVSUKKyAgICBcaWZudW0gXGFic3NlY2xldmVsIDwgXHVubWxldmVsCisgICAgICBcY2hhcmRlZlx1bm1sZXZlbCA9IFxhYnNzZWNsZXZlbAorICAgIFxmaQorICBcZWxzZQorICAgICUgQ2hlY2sgZm9yIGFwcGVuZGl4IHNlY3Rpb25zOgorICAgIFxpZm51bSBcYWJzc2VjbGV2ZWwgPSAwCisgICAgICBcZWRlZlxjaGFwaGVhZHR5cGV7XGhlYWR0eXBlfSUKKyAgICBcZWxzZQorICAgICAgXGlmIFxoZWFkdHlwZSBBXGlmIFxjaGFwaGVhZHR5cGUgTiUKKwlcZXJybWVzc2FnZXtAYXBwZW5kaXguLi4gd2l0aGluIGEgbm9uLWFwcGVuZGl4IGNoYXB0ZXJ9JQorICAgICAgXGZpXGZpCisgICAgXGZpCisgICAgJSBDaGVjayBmb3IgbnVtYmVyZWQgd2l0aGluIHVubnVtYmVyZWQ6CisgICAgXGlmbnVtIFxhYnNzZWNsZXZlbCA+IFx1bm1sZXZlbAorICAgICAgXGRlZlxoZWFkdHlwZXtVfSUKKyAgICBcZWxzZQorICAgICAgXGNoYXJkZWZcdW5tbGV2ZWwgPSAzCisgICAgXGZpCisgIFxmaQorICAlIE5vdyBwcmludCB0aGUgaGVhZGluZzoKKyAgXGlmIFxoZWFkdHlwZSBVJQorICAgIFxpZmNhc2VcYWJzc2VjbGV2ZWwKKwlcdW5udW1iZXJlZHp6ensjM30lCisgICAgXG9yIFx1bm51bWJlcmVkc2Vjenp6eyMzfSUKKyAgICBcb3IgXHVubnVtYmVyZWRzdWJzZWN6enp7IzN9JQorICAgIFxvciBcdW5udW1iZXJlZHN1YnN1YnNlY3p6ensjM30lCisgICAgXGZpCisgIFxlbHNlCisgICAgXGlmIFxoZWFkdHlwZSBBJQorICAgICAgXGlmY2FzZVxhYnNzZWNsZXZlbAorCSAgXGFwcGVuZGl4enp6eyMzfSUKKyAgICAgIFxvciBcYXBwZW5kaXhzZWN0aW9uenp6eyMzfSUKKyAgICAgIFxvciBcYXBwZW5kaXhzdWJzZWN6enp7IzN9JQorICAgICAgXG9yIFxhcHBlbmRpeHN1YnN1YnNlY3p6ensjM30lCisgICAgICBcZmkKKyAgICBcZWxzZQorICAgICAgXGlmY2FzZVxhYnNzZWNsZXZlbAorCSAgXGNoYXB0ZXJ6enp7IzN9JQorICAgICAgXG9yIFxzZWN6enp7IzN9JQorICAgICAgXG9yIFxudW1iZXJlZHN1YnNlY3p6ensjM30lCisgICAgICBcb3IgXG51bWJlcmVkc3Vic3Vic2Vjenp6eyMzfSUKKyAgICAgIFxmaQorICAgIFxmaQorICBcZmkKKyAgXHN1cHByZXNzZmlyc3RwYXJhZ3JhcGhpbmRlbnQKK30KKworJSBhbiBpbnRlcmZhY2U6CitcZGVmXG51bWhlYWR7XGdlbmhlYWQgTn0KK1xkZWZcYXBwaGVhZHtcZ2VuaGVhZCBBfQorXGRlZlx1bm5taGVhZHtcZ2VuaGVhZCBVfQorCislIEBjaGFwdGVyLCBAYXBwZW5kaXgsIEB1bm51bWJlcmVkLiAgSW5jcmVtZW50IHRvcC1sZXZlbCBjb3VudGVyLCByZXNldAorJSBhbGwgbG93ZXItbGV2ZWwgc2VjdGlvbmluZyBjb3VudGVycyB0byB6ZXJvLgorJQorJSBBbHNvIHNldCBcY2hhcGxldmVscHJlZml4LCB3aGljaCB3ZSBwcmVwZW5kIHRvIEBmbG9hdCBzZXF1ZW5jZSBudW1iZXJzCislIChlLmcuLCBmaWd1cmVzKSwgcS52LiAgQnkgZGVmYXVsdCAoYmVmb3JlIGFueSBjaGFwdGVyKSwgdGhhdCBpcyBlbXB0eS4KK1xsZXRcY2hhcGxldmVscHJlZml4ID0gXGVtcHR5CislCitcb3V0ZXJccGFyc2VhcmdkZWZcY2hhcHRlcntcbnVtaGVhZDB7IzF9fSAlIG5vcm1hbGx5IG51bWhlYWQwIGNhbGxzIGNoYXB0ZXJ6enoKK1xkZWZcY2hhcHRlcnp6eiMxeyUKKyAgJSBzZWN0aW9uIHJlc2V0dGluZyBpcyBcZ2xvYmFsIGluIGNhc2UgdGhlIGNoYXB0ZXIgaXMgaW4gYSBncm91cCwgc3VjaAorICAlIGFzIGFuIEBpbmNsdWRlIGZpbGUuCisgIFxnbG9iYWxcc2Vjbm89MCBcZ2xvYmFsXHN1YnNlY25vPTAgXGdsb2JhbFxzdWJzdWJzZWNubz0wCisgICAgXGdsb2JhbFxhZHZhbmNlXGNoYXBubyBieSAxCisgICUKKyAgJSBVc2VkIGZvciBcZmxvYXQuCisgIFxnZGVmXGNoYXBsZXZlbHByZWZpeHtcdGhlXGNoYXBuby59JQorICBccmVzZXRhbGxmbG9hdG5vcworICAlCisgIFxtZXNzYWdle1xwdXR3b3JkQ2hhcHRlclxzcGFjZSBcdGhlXGNoYXBub30lCisgICUKKyAgJSBXcml0ZSB0aGUgYWN0dWFsIGhlYWRpbmcuCisgIFxjaGFwbWFjcm97IzF9e1ludW1iZXJlZH17XHRoZVxjaGFwbm99JQorICAlCisgICUgU28gQHNlY3Rpb24gYW5kIHRoZSBsaWtlIGFyZSBudW1iZXJlZCB1bmRlcm5lYXRoIHRoaXMgY2hhcHRlci4KKyAgXGdsb2JhbFxsZXRcc2VjdGlvbiA9IFxudW1iZXJlZHNlYworICBcZ2xvYmFsXGxldFxzdWJzZWN0aW9uID0gXG51bWJlcmVkc3Vic2VjCisgIFxnbG9iYWxcbGV0XHN1YnN1YnNlY3Rpb24gPSBcbnVtYmVyZWRzdWJzdWJzZWMKK30KKworXG91dGVyXHBhcnNlYXJnZGVmXGFwcGVuZGl4e1xhcHBoZWFkMHsjMX19ICUgbm9ybWFsbHkgYXBwaGVhZDAgY2FsbHMgYXBwZW5kaXh6enoKK1xkZWZcYXBwZW5kaXh6enojMXslCisgIFxnbG9iYWxcc2Vjbm89MCBcZ2xvYmFsXHN1YnNlY25vPTAgXGdsb2JhbFxzdWJzdWJzZWNubz0wCisgICAgXGdsb2JhbFxhZHZhbmNlXGFwcGVuZGl4bm8gYnkgMQorICBcZ2RlZlxjaGFwbGV2ZWxwcmVmaXh7XGFwcGVuZGl4bGV0dGVyLn0lCisgIFxyZXNldGFsbGZsb2F0bm9zCisgICUKKyAgXGRlZlxhcHBlbmRpeG51bXtccHV0d29yZEFwcGVuZGl4XHNwYWNlIFxhcHBlbmRpeGxldHRlcn0lCisgIFxtZXNzYWdle1xhcHBlbmRpeG51bX0lCisgICUKKyAgXGNoYXBtYWNyb3sjMX17WWFwcGVuZGl4fXtcYXBwZW5kaXhsZXR0ZXJ9JQorICAlCisgIFxnbG9iYWxcbGV0XHNlY3Rpb24gPSBcYXBwZW5kaXhzZWMKKyAgXGdsb2JhbFxsZXRcc3Vic2VjdGlvbiA9IFxhcHBlbmRpeHN1YnNlYworICBcZ2xvYmFsXGxldFxzdWJzdWJzZWN0aW9uID0gXGFwcGVuZGl4c3Vic3Vic2VjCit9CisKK1xvdXRlclxwYXJzZWFyZ2RlZlx1bm51bWJlcmVke1x1bm5taGVhZDB7IzF9fSAlIG5vcm1hbGx5IHVubm1oZWFkMCBjYWxscyB1bm51bWJlcmVkenp6CitcZGVmXHVubnVtYmVyZWR6enojMXslCisgIFxnbG9iYWxcc2Vjbm89MCBcZ2xvYmFsXHN1YnNlY25vPTAgXGdsb2JhbFxzdWJzdWJzZWNubz0wCisgICAgXGdsb2JhbFxhZHZhbmNlXHVubnVtYmVyZWRubyBieSAxCisgICUKKyAgJSBTaW5jZSBhbiB1bm51bWJlcmVkIGhhcyBubyBudW1iZXIsIG5vIHByZWZpeCBmb3IgZmlndXJlcy4KKyAgXGdsb2JhbFxsZXRcY2hhcGxldmVscHJlZml4ID0gXGVtcHR5CisgIFxyZXNldGFsbGZsb2F0bm9zCisgICUKKyAgJSBUaGlzIHVzZWQgdG8gYmUgc2ltcGx5IFxtZXNzYWdleyMxfSwgYnV0IFRlWCBmdWxseSBleHBhbmRzIHRoZQorICAlIGFyZ3VtZW50IHRvIFxtZXNzYWdlLiAgVGhlcmVmb3JlLCBpZiAjMSBjb250YWluZWQgQC1jb21tYW5kcywgVGVYCisgICUgZXhwYW5kZWQgdGhlbS4gIEZvciBleGFtcGxlLCBpbiBgQHVubnVtYmVyZWQgVGhlIEBjaXRle0Jvb2t9JywgVGVYCisgICUgZXhwYW5kZWQgQGNpdGUgKHdoaWNoIHR1cm5zIG91dCB0byBjYXVzZSBlcnJvcnMgYmVjYXVzZSBcY2l0ZSBpcyBtZWFudAorICAlIHRvIGJlIGV4ZWN1dGVkLCBub3QgZXhwYW5kZWQpLgorICAlCisgICUgQW55d2F5LCB3ZSBkb24ndCB3YW50IHRoZSBmdWxseS1leHBhbmRlZCBkZWZpbml0aW9uIG9mIEBjaXRlIHRvIGFwcGVhcgorICAlIGFzIGEgcmVzdWx0IG9mIHRoZSBcbWVzc2FnZSwgd2UganVzdCB3YW50IGBAY2l0ZScgaXRzZWxmLiAgV2UgdXNlCisgICUgXHRoZTx0b2tzIHJlZ2lzdGVyPiB0byBhY2hpZXZlIHRoaXM6IFRlWCBleHBhbmRzIFx0aGU8dG9rcz4gb25seSBvbmNlLAorICAlIHNpbXBseSB5aWVsZGluZyB0aGUgY29udGVudHMgb2YgPHRva3MgcmVnaXN0ZXI+LiAgKFdlIGFsc28gZG8gdGhpcyBmb3IKKyAgJSB0aGUgdG9jIGVudHJpZXMuKQorICBcdG9rczAgPSB7IzF9JQorICBcbWVzc2FnZXsoXHRoZVx0b2tzMCl9JQorICAlCisgIFxjaGFwbWFjcm97IzF9e1lub3RoaW5nfXtcdGhlXHVubnVtYmVyZWRub30lCisgICUKKyAgXGdsb2JhbFxsZXRcc2VjdGlvbiA9IFx1bm51bWJlcmVkc2VjCisgIFxnbG9iYWxcbGV0XHN1YnNlY3Rpb24gPSBcdW5udW1iZXJlZHN1YnNlYworICBcZ2xvYmFsXGxldFxzdWJzdWJzZWN0aW9uID0gXHVubnVtYmVyZWRzdWJzdWJzZWMKK30KKworJSBAY2VudGVyY2hhcCBpcyBsaWtlIEB1bm51bWJlcmVkLCBidXQgdGhlIGhlYWRpbmcgaXMgY2VudGVyZWQuCitcb3V0ZXJccGFyc2VhcmdkZWZcY2VudGVyY2hhcHslCisgICUgV2VsbCwgd2UgY291bGQgZG8gdGhlIGZvbGxvd2luZyBpbiBhIGdyb3VwLCBidXQgdGhhdCB3b3VsZCBicmVhaworICAlIGFuIGFzc3VtcHRpb24gdGhhdCBcY2hhcG1hY3JvIGlzIGNhbGxlZCBhdCB0aGUgb3V0ZXJtb3N0IGxldmVsLgorICAlIFRodXMgd2UgYXJlIHNhZmVyIHRoaXMgd2F5OgkJLS1rYXNhbCwgMjRmZWIwNAorICBcbGV0XGNlbnRlcnBhcmFtZXRlcnNtYXliZSA9IFxjZW50ZXJwYXJhbWV0ZXJzCisgIFx1bm5taGVhZDB7IzF9JQorICBcbGV0XGNlbnRlcnBhcmFtZXRlcnNtYXliZSA9IFxyZWxheAorfQorCislIEB0b3AgaXMgbGlrZSBAdW5udW1iZXJlZC4KK1xsZXRcdG9wXHVubnVtYmVyZWQKKworJSBTZWN0aW9ucy4KK1xvdXRlclxwYXJzZWFyZ2RlZlxudW1iZXJlZHNlY3tcbnVtaGVhZDF7IzF9fSAlIG5vcm1hbGx5IGNhbGxzIHNlY3p6egorXGRlZlxzZWN6enojMXslCisgIFxnbG9iYWxcc3Vic2Vjbm89MCBcZ2xvYmFsXHN1YnN1YnNlY25vPTAgIFxnbG9iYWxcYWR2YW5jZVxzZWNubyBieSAxCisgIFxzZWN0aW9uaGVhZGluZ3sjMX17c2VjfXtZbnVtYmVyZWR9e1x0aGVcY2hhcG5vLlx0aGVcc2Vjbm99JQorfQorCitcb3V0ZXJccGFyc2VhcmdkZWZcYXBwZW5kaXhzZWN0aW9ue1xhcHBoZWFkMXsjMX19ICUgbm9ybWFsbHkgY2FsbHMgYXBwZW5kaXhzZWN0aW9uenp6CitcZGVmXGFwcGVuZGl4c2VjdGlvbnp6eiMxeyUKKyAgXGdsb2JhbFxzdWJzZWNubz0wIFxnbG9iYWxcc3Vic3Vic2Vjbm89MCAgXGdsb2JhbFxhZHZhbmNlXHNlY25vIGJ5IDEKKyAgXHNlY3Rpb25oZWFkaW5neyMxfXtzZWN9e1lhcHBlbmRpeH17XGFwcGVuZGl4bGV0dGVyLlx0aGVcc2Vjbm99JQorfQorXGxldFxhcHBlbmRpeHNlY1xhcHBlbmRpeHNlY3Rpb24KKworXG91dGVyXHBhcnNlYXJnZGVmXHVubnVtYmVyZWRzZWN7XHVubm1oZWFkMXsjMX19ICUgbm9ybWFsbHkgY2FsbHMgdW5udW1iZXJlZHNlY3p6egorXGRlZlx1bm51bWJlcmVkc2Vjenp6IzF7JQorICBcZ2xvYmFsXHN1YnNlY25vPTAgXGdsb2JhbFxzdWJzdWJzZWNubz0wICBcZ2xvYmFsXGFkdmFuY2Vcc2Vjbm8gYnkgMQorICBcc2VjdGlvbmhlYWRpbmd7IzF9e3NlY317WW5vdGhpbmd9e1x0aGVcdW5udW1iZXJlZG5vLlx0aGVcc2Vjbm99JQorfQorCislIFN1YnNlY3Rpb25zLgorXG91dGVyXHBhcnNlYXJnZGVmXG51bWJlcmVkc3Vic2Vje1xudW1oZWFkMnsjMX19ICUgbm9ybWFsbHkgY2FsbHMgbnVtYmVyZWRzdWJzZWN6enoKK1xkZWZcbnVtYmVyZWRzdWJzZWN6enojMXslCisgIFxnbG9iYWxcc3Vic3Vic2Vjbm89MCAgXGdsb2JhbFxhZHZhbmNlXHN1YnNlY25vIGJ5IDEKKyAgXHNlY3Rpb25oZWFkaW5neyMxfXtzdWJzZWN9e1ludW1iZXJlZH17XHRoZVxjaGFwbm8uXHRoZVxzZWNuby5cdGhlXHN1YnNlY25vfSUKK30KKworXG91dGVyXHBhcnNlYXJnZGVmXGFwcGVuZGl4c3Vic2Vje1xhcHBoZWFkMnsjMX19ICUgbm9ybWFsbHkgY2FsbHMgYXBwZW5kaXhzdWJzZWN6enoKK1xkZWZcYXBwZW5kaXhzdWJzZWN6enojMXslCisgIFxnbG9iYWxcc3Vic3Vic2Vjbm89MCAgXGdsb2JhbFxhZHZhbmNlXHN1YnNlY25vIGJ5IDEKKyAgXHNlY3Rpb25oZWFkaW5neyMxfXtzdWJzZWN9e1lhcHBlbmRpeH0lCisgICAgICAgICAgICAgICAgIHtcYXBwZW5kaXhsZXR0ZXIuXHRoZVxzZWNuby5cdGhlXHN1YnNlY25vfSUKK30KKworXG91dGVyXHBhcnNlYXJnZGVmXHVubnVtYmVyZWRzdWJzZWN7XHVubm1oZWFkMnsjMX19ICVub3JtYWxseSBjYWxscyB1bm51bWJlcmVkc3Vic2Vjenp6CitcZGVmXHVubnVtYmVyZWRzdWJzZWN6enojMXslCisgIFxnbG9iYWxcc3Vic3Vic2Vjbm89MCAgXGdsb2JhbFxhZHZhbmNlXHN1YnNlY25vIGJ5IDEKKyAgXHNlY3Rpb25oZWFkaW5neyMxfXtzdWJzZWN9e1lub3RoaW5nfSUKKyAgICAgICAgICAgICAgICAge1x0aGVcdW5udW1iZXJlZG5vLlx0aGVcc2Vjbm8uXHRoZVxzdWJzZWNub30lCit9CisKKyUgU3Vic3Vic2VjdGlvbnMuCitcb3V0ZXJccGFyc2VhcmdkZWZcbnVtYmVyZWRzdWJzdWJzZWN7XG51bWhlYWQzeyMxfX0gJSBub3JtYWxseSBudW1iZXJlZHN1YnN1YnNlY3p6egorXGRlZlxudW1iZXJlZHN1YnN1YnNlY3p6eiMxeyUKKyAgXGdsb2JhbFxhZHZhbmNlXHN1YnN1YnNlY25vIGJ5IDEKKyAgXHNlY3Rpb25oZWFkaW5neyMxfXtzdWJzdWJzZWN9e1ludW1iZXJlZH0lCisgICAgICAgICAgICAgICAgIHtcdGhlXGNoYXBuby5cdGhlXHNlY25vLlx0aGVcc3Vic2Vjbm8uXHRoZVxzdWJzdWJzZWNub30lCit9CisKK1xvdXRlclxwYXJzZWFyZ2RlZlxhcHBlbmRpeHN1YnN1YnNlY3tcYXBwaGVhZDN7IzF9fSAlIG5vcm1hbGx5IGFwcGVuZGl4c3Vic3Vic2Vjenp6CitcZGVmXGFwcGVuZGl4c3Vic3Vic2Vjenp6IzF7JQorICBcZ2xvYmFsXGFkdmFuY2Vcc3Vic3Vic2Vjbm8gYnkgMQorICBcc2VjdGlvbmhlYWRpbmd7IzF9e3N1YnN1YnNlY317WWFwcGVuZGl4fSUKKyAgICAgICAgICAgICAgICAge1xhcHBlbmRpeGxldHRlci5cdGhlXHNlY25vLlx0aGVcc3Vic2Vjbm8uXHRoZVxzdWJzdWJzZWNub30lCit9CisKK1xvdXRlclxwYXJzZWFyZ2RlZlx1bm51bWJlcmVkc3Vic3Vic2Vje1x1bm5taGVhZDN7IzF9fSAlbm9ybWFsbHkgdW5udW1iZXJlZHN1YnN1YnNlY3p6egorXGRlZlx1bm51bWJlcmVkc3Vic3Vic2Vjenp6IzF7JQorICBcZ2xvYmFsXGFkdmFuY2Vcc3Vic3Vic2Vjbm8gYnkgMQorICBcc2VjdGlvbmhlYWRpbmd7IzF9e3N1YnN1YnNlY317WW5vdGhpbmd9JQorICAgICAgICAgICAgICAgICB7XHRoZVx1bm51bWJlcmVkbm8uXHRoZVxzZWNuby5cdGhlXHN1YnNlY25vLlx0aGVcc3Vic3Vic2Vjbm99JQorfQorCislIFRoZXNlIG1hY3JvcyBjb250cm9sIHdoYXQgdGhlIHNlY3Rpb24gY29tbWFuZHMgZG8sIGFjY29yZGluZworJSB0byB3aGF0IGtpbmQgb2YgY2hhcHRlciB3ZSBhcmUgaW4gKG9yZGluYXJ5LCBhcHBlbmRpeCwgb3IgdW5udW1iZXJlZCkuCislIERlZmluZSB0aGVtIGJ5IGRlZmF1bHQgZm9yIGEgbnVtYmVyZWQgY2hhcHRlci4KK1xsZXRcc2VjdGlvbiA9IFxudW1iZXJlZHNlYworXGxldFxzdWJzZWN0aW9uID0gXG51bWJlcmVkc3Vic2VjCitcbGV0XHN1YnN1YnNlY3Rpb24gPSBcbnVtYmVyZWRzdWJzdWJzZWMKKworJSBEZWZpbmUgQG1ham9yaGVhZGluZywgQGhlYWRpbmcgYW5kIEBzdWJoZWFkaW5nCisKKyUgTk9URSBvbiB1c2Ugb2YgXHZib3ggZm9yIGNoYXB0ZXIgaGVhZGluZ3MsIHNlY3Rpb24gaGVhZGluZ3MsIGFuZCBzdWNoOgorJSAgICAgICAxKSBXZSB1c2UgXHZib3ggcmF0aGVyIHRoYW4gdGhlIGVhcmxpZXIgXGxpbmUgdG8gcGVybWl0CislICAgICAgICAgIG92ZXJsb25nIGhlYWRpbmdzIHRvIGZvbGQuCislICAgICAgIDIpIFxoeXBoZW5wZW5hbHR5IGlzIHNldCB0byAxMDAwMCBiZWNhdXNlIGh5cGhlbmF0aW9uIGluIGEKKyUgICAgICAgICAgaGVhZGluZyBpcyBvYm5veGlvdXM7IHRoaXMgZm9yYmlkcyBpdC4KKyUgICAgICAgMykgTGlrZXdpc2UsIGhlYWRpbmdzIGxvb2sgYmVzdCBpZiBubyBccGFyaW5kZW50IGlzIHVzZWQsIGFuZAorJSAgICAgICAgICBpZiBqdXN0aWZpY2F0aW9uIGlzIG5vdCBhdHRlbXB0ZWQuICBIZW5jZSBccmFnZ2VkcmlnaHQuCisKKworXGRlZlxtYWpvcmhlYWRpbmd7JQorICB7XGFkdmFuY2VcY2hhcGhlYWRpbmdza2lwIGJ5IDEwcHQgXGNoYXBicmVhayB9JQorICBccGFyc2VhcmdcY2hhcGhlYWRpbmd6enoKK30KKworXGRlZlxjaGFwaGVhZGluZ3tcY2hhcGJyZWFrIFxwYXJzZWFyZ1xjaGFwaGVhZGluZ3p6en0KK1xkZWZcY2hhcGhlYWRpbmd6enojMXslCisgIHtcY2hhcGZvbnRzIFx2Ym94e1xoeXBoZW5wZW5hbHR5PTEwMDAwXHRvbGVyYW5jZT01MDAwCisgICAgICAgICAgICAgICAgICAgIFxwYXJpbmRlbnQ9MHB0XHJhZ2dlZHJpZ2h0CisgICAgICAgICAgICAgICAgICAgIFxybSAjMVxoZmlsbH19JQorICBcYmlnc2tpcCBccGFyXHBlbmFsdHkgMjAwXHJlbGF4CisgIFxzdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50Cit9CisKKyUgQGhlYWRpbmcsIEBzdWJoZWFkaW5nLCBAc3Vic3ViaGVhZGluZy4KK1xwYXJzZWFyZ2RlZlxoZWFkaW5ne1xzZWN0aW9uaGVhZGluZ3sjMX17c2VjfXtZb21pdGZyb210b2N9e30KKyAgXHN1cHByZXNzZmlyc3RwYXJhZ3JhcGhpbmRlbnR9CitccGFyc2VhcmdkZWZcc3ViaGVhZGluZ3tcc2VjdGlvbmhlYWRpbmd7IzF9e3N1YnNlY317WW9taXRmcm9tdG9jfXt9CisgIFxzdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50fQorXHBhcnNlYXJnZGVmXHN1YnN1YmhlYWRpbmd7XHNlY3Rpb25oZWFkaW5neyMxfXtzdWJzdWJzZWN9e1lvbWl0ZnJvbXRvY317fQorICBcc3VwcHJlc3NmaXJzdHBhcmFncmFwaGluZGVudH0KKworJSBUaGVzZSBtYWNyb3MgZ2VuZXJhdGUgYSBjaGFwdGVyLCBzZWN0aW9uLCBldGMuIGhlYWRpbmcgb25seQorJSAoaW5jbHVkaW5nIHdoaXRlc3BhY2UsIGxpbmVicmVha2luZywgZXRjLiBhcm91bmQgaXQpLAorJSBnaXZlbiBhbGwgdGhlIGluZm9ybWF0aW9uIGluIGNvbnZlbmllbnQsIHBhcnNlZCBmb3JtLgorCislJSUgQXJncyBhcmUgdGhlIHNraXAgYW5kIHBlbmFsdHkgKHVzdWFsbHkgbmVnYXRpdmUpCitcZGVmXGRvYnJlYWsjMSMye1xwYXJcaWZkaW1cbGFzdHNraXA8IzFccmVtb3ZlbGFzdHNraXBccGVuYWx0eSMyXHZza2lwIzFcZml9CisKKyUlJSBEZWZpbmUgcGxhaW4gY2hhcHRlciBzdGFydHMsIGFuZCBwYWdlIG9uL29mZiBzd2l0Y2hpbmcgZm9yIGl0CislIFBhcmFtZXRlciBjb250cm9sbGluZyBza2lwIGJlZm9yZSBjaGFwdGVyIGhlYWRpbmdzIChpZiBuZWVkZWQpCisKK1xuZXdza2lwXGNoYXBoZWFkaW5nc2tpcAorCitcZGVmXGNoYXBicmVha3tcZG9icmVhayBcY2hhcGhlYWRpbmdza2lwIHstNDAwMH19CitcZGVmXGNoYXBwYWdlcntccGFyXHZmaWxsXHN1cGVyZWplY3R9CitcZGVmXGNoYXBvZGRwYWdle1xjaGFwcGFnZXIgXGlmb2RkXHBhZ2VubyBcZWxzZSBcaGJveCB0byAwcHR7fSBcY2hhcHBhZ2VyXGZpfQorCitcZGVmXHNldGNoYXB0ZXJuZXdwYWdlICMxIHtcY3NuYW1lIENIQVBQQUcjMVxlbmRjc25hbWV9CisKK1xkZWZcQ0hBUFBBR29mZnslCitcZ2xvYmFsXGxldFxjb250ZW50c2FsaWdubWFjcm8gPSBcY2hhcHBhZ2VyCitcZ2xvYmFsXGxldFxwY2hhcHNlcG1hY3JvPVxjaGFwYnJlYWsKK1xnbG9iYWxcbGV0XHBhZ2VhbGlnbm1hY3JvPVxjaGFwcGFnZXJ9CisKK1xkZWZcQ0hBUFBBR29ueyUKK1xnbG9iYWxcbGV0XGNvbnRlbnRzYWxpZ25tYWNybyA9IFxjaGFwcGFnZXIKK1xnbG9iYWxcbGV0XHBjaGFwc2VwbWFjcm89XGNoYXBwYWdlcgorXGdsb2JhbFxsZXRccGFnZWFsaWdubWFjcm89XGNoYXBwYWdlcgorXGdsb2JhbFxkZWZcSEVBRElOR1NvbntcSEVBRElOR1NzaW5nbGV9fQorCitcZGVmXENIQVBQQUdvZGR7JQorXGdsb2JhbFxsZXRcY29udGVudHNhbGlnbm1hY3JvID0gXGNoYXBvZGRwYWdlCitcZ2xvYmFsXGxldFxwY2hhcHNlcG1hY3JvPVxjaGFwb2RkcGFnZQorXGdsb2JhbFxsZXRccGFnZWFsaWdubWFjcm89XGNoYXBvZGRwYWdlCitcZ2xvYmFsXGRlZlxIRUFESU5HU29ue1xIRUFESU5HU2RvdWJsZX19CisKK1xDSEFQUEFHb24KKworJSBDaGFwdGVyIG9wZW5pbmcuCislCislICMxIGlzIHRoZSB0ZXh0LCAjMiBpcyB0aGUgc2VjdGlvbiB0eXBlIChZbnVtYmVyZWQsIFlub3RoaW5nLAorJSBZYXBwZW5kaXgsIFlvbWl0ZnJvbXRvYyksICMzIHRoZSBjaGFwdGVyIG51bWJlci4KKyUKKyUgVG8gdGVzdCBhZ2FpbnN0IG91ciBhcmd1bWVudC4KK1xkZWZcWW5vdGhpbmdrZXl3b3Jke1lub3RoaW5nfQorXGRlZlxZb21pdGZyb210b2NrZXl3b3Jke1lvbWl0ZnJvbXRvY30KK1xkZWZcWWFwcGVuZGl4a2V5d29yZHtZYXBwZW5kaXh9CislCitcZGVmXGNoYXBtYWNybyMxIzIjM3slCisgIFxwY2hhcHNlcG1hY3JvCisgIHslCisgICAgXGNoYXBmb250cyBccm0KKyAgICAlCisgICAgJSBIYXZlIHRvIGRlZmluZSBcdGhpc3NlY3Rpb24gYmVmb3JlIGNhbGxpbmcgXGRvbm9kZXJlZiwgYmVjYXVzZSB0aGUKKyAgICAlIHhyZWYgY29kZSBldmVudHVhbGx5IHVzZXMgaXQuICBPbiB0aGUgb3RoZXIgaGFuZCwgaXQgaGFzIHRvIGJlIGNhbGxlZAorICAgICUgYWZ0ZXIgXHBjaGFwc2VwbWFjcm8sIG9yIHRoZSBoZWFkbGluZSB3aWxsIGNoYW5nZSB0b28gc29vbi4KKyAgICBcZ2RlZlx0aGlzc2VjdGlvbnsjMX0lCisgICAgXGdkZWZcdGhpc2NoYXB0ZXJuYW1leyMxfSUKKyAgICAlCisgICAgJSBPbmx5IGluc2VydCB0aGUgc2VwYXJhdGluZyBzcGFjZSBpZiB3ZSBoYXZlIGEgY2hhcHRlci9hcHBlbmRpeAorICAgICUgbnVtYmVyLCBhbmQgZG9uJ3QgcHJpbnQgdGhlIHVubnVtYmVyZWQgYGBudW1iZXInJy4KKyAgICBcZGVmXHRlbXB0eXBleyMyfSUKKyAgICBcaWZ4XHRlbXB0eXBlXFlub3RoaW5na2V5d29yZAorICAgICAgXHNldGJveDAgPSBcaGJveHt9JQorICAgICAgXGRlZlx0b2N0eXBle3VubmNoYXB9JQorICAgICAgXGdkZWZcdGhpc2NoYXB0ZXJudW17fSUKKyAgICAgIFxnZGVmXHRoaXNjaGFwdGVyeyMxfSUKKyAgICBcZWxzZVxpZnhcdGVtcHR5cGVcWW9taXRmcm9tdG9ja2V5d29yZAorICAgICAgXHNldGJveDAgPSBcaGJveHt9JSBjb250ZW50cyBsaWtlIHVubnVtYmVyZWQsIGJ1dCBubyB0b2MgZW50cnkKKyAgICAgIFxkZWZcdG9jdHlwZXtvbWl0fSUKKyAgICAgIFxnZGVmXHRoaXNjaGFwdGVybnVte30lCisgICAgICBcZ2RlZlx0aGlzY2hhcHRlcnt9JQorICAgIFxlbHNlXGlmeFx0ZW1wdHlwZVxZYXBwZW5kaXhrZXl3b3JkCisgICAgICBcc2V0Ym94MCA9IFxoYm94e1xwdXR3b3JkQXBwZW5kaXh7fSAjM1xlbnNwYWNlfSUKKyAgICAgIFxkZWZcdG9jdHlwZXthcHB9JQorICAgICAgXHhkZWZcdGhpc2NoYXB0ZXJudW17XGFwcGVuZGl4bGV0dGVyfSUKKyAgICAgICUgV2UgZG9uJ3Qgc3Vic3RpdHV0ZSB0aGUgYWN0dWFsIGNoYXB0ZXIgbmFtZSBpbnRvIFx0aGlzY2hhcHRlcgorICAgICAgJSBiZWNhdXNlIHdlIGRvbid0IHdhbnQgaXRzIG1hY3JvcyBldmFsdWF0ZWQgbm93LiAgQW5kIHdlIGRvbid0CisgICAgICAlIHVzZSBcdGhpc3NlY3Rpb24gYmVjYXVzZSB0aGF0IGNoYW5nZXMgd2l0aCBlYWNoIHNlY3Rpb24uCisgICAgICAlCisgICAgICBceGRlZlx0aGlzY2hhcHRlcntccHV0d29yZEFwcGVuZGl4e30gXGFwcGVuZGl4bGV0dGVyOgorICAgICAgICAgICAgICAgICAgICAgICAgXG5vZXhwYW5kXHRoaXNjaGFwdGVybmFtZX0lCisgICAgXGVsc2UKKyAgICAgIFxzZXRib3gwID0gXGhib3h7IzNcZW5zcGFjZX0lCisgICAgICBcZGVmXHRvY3R5cGV7bnVtY2hhcH0lCisgICAgICBceGRlZlx0aGlzY2hhcHRlcm51bXtcdGhlXGNoYXBub30lCisgICAgICBceGRlZlx0aGlzY2hhcHRlcntccHV0d29yZENoYXB0ZXJ7fSBcdGhlXGNoYXBubzoKKyAgICAgICAgICAgICAgICAgICAgICAgIFxub2V4cGFuZFx0aGlzY2hhcHRlcm5hbWV9JQorICAgIFxmaVxmaVxmaQorICAgICUKKyAgICAlIFdyaXRlIHRoZSB0b2MgZW50cnkgZm9yIHRoaXMgY2hhcHRlci4gIE11c3QgY29tZSBiZWZvcmUgdGhlCisgICAgJSBcZG9ub2RlcmVmLCBiZWNhdXNlIHdlIGluY2x1ZGUgdGhlIGN1cnJlbnQgbm9kZSBuYW1lIGluIHRoZSB0b2MKKyAgICAlIGVudHJ5LCBhbmQgXGRvbm9kZXJlZiByZXNldHMgaXQgdG8gZW1wdHkuCisgICAgXHdyaXRldG9jZW50cnl7XHRvY3R5cGV9eyMxfXsjM30lCisgICAgJQorICAgICUgRm9yIHBkZnRleCwgd2UgaGF2ZSB0byB3cml0ZSBvdXQgdGhlIG5vZGUgZGVmaW5pdGlvbiAoYWthLCBtYWtlCisgICAgJSB0aGUgcGRmZGVzdCkgYWZ0ZXIgYW55IHBhZ2UgYnJlYWssIGJ1dCBiZWZvcmUgdGhlIGFjdHVhbCB0ZXh0IGhhcworICAgICUgYmVlbiB0eXBlc2V0LiAgSWYgdGhlIGRlc3RpbmF0aW9uIGZvciB0aGUgcGRmIG91dGxpbmUgaXMgYWZ0ZXIgdGhlCisgICAgJSB0ZXh0LCB0aGVuIGp1bXBpbmcgZnJvbSB0aGUgb3V0bGluZSBtYXkgd2luZCB1cCB3aXRoIHRoZSB0ZXh0IG5vdAorICAgICUgYmVpbmcgdmlzaWJsZSwgZm9yIGluc3RhbmNlIHVuZGVyIGhpZ2ggbWFnbmlmaWNhdGlvbi4KKyAgICBcZG9ub2RlcmVmeyMyfSUKKyAgICAlCisgICAgJSBUeXBlc2V0IHRoZSBhY3R1YWwgaGVhZGluZy4KKyAgICBcdmJveHtcaHlwaGVucGVuYWx0eT0xMDAwMCBcdG9sZXJhbmNlPTUwMDAgXHBhcmluZGVudD0wcHQgXHJhZ2dlZHJpZ2h0CisgICAgICAgICAgXGhhbmdpbmRlbnQ9XHdkMCBcY2VudGVycGFyYW1ldGVyc21heWJlCisgICAgICAgICAgXHVuaGJveDAgIzFccGFyfSUKKyAgfSUKKyAgXG5vYnJlYWtcYmlnc2tpcCAlIG5vIHBhZ2UgYnJlYWsgYWZ0ZXIgYSBjaGFwdGVyIHRpdGxlCisgIFxub2JyZWFrCit9CisKKyUgQGNlbnRlcmNoYXAgLS0gY2VudGVyZWQgYW5kIHVubnVtYmVyZWQuCitcbGV0XGNlbnRlcnBhcmFtZXRlcnNtYXliZSA9IFxyZWxheAorXGRlZlxjZW50ZXJwYXJhbWV0ZXJzeyUKKyAgXGFkdmFuY2VccmlnaHRza2lwIGJ5IDNccmlnaHRza2lwCisgIFxsZWZ0c2tpcCA9IFxyaWdodHNraXAKKyAgXHBhcmZpbGxza2lwID0gMHB0Cit9CisKKworJSBJIGRvbid0IHRoaW5rIHRoaXMgY2hhcHRlciBzdHlsZSBpcyBzdXBwb3J0ZWQgYW55IG1vcmUsIHNvIEknbSBub3QKKyUgdXBkYXRpbmcgaXQgd2l0aCB0aGUgbmV3IG5vZGVyZWYgc3R1ZmYuICBXZSdsbCBzZWUuICAtLWthcmwsIDExYXVnMDMuCislCitcZGVmXHNldGNoYXB0ZXJzdHlsZSAjMSB7XGNzbmFtZSBDSEFQRiMxXGVuZGNzbmFtZX0KKyUKK1xkZWZcdW5uY2hmb3BlbiAjMXslCitcY2hhcG9kZHBhZ2Uge1xjaGFwZm9udHMgXHZib3h7XGh5cGhlbnBlbmFsdHk9MTAwMDBcdG9sZXJhbmNlPTUwMDAKKyAgICAgICAgICAgICAgICAgICAgICAgXHBhcmluZGVudD0wcHRccmFnZ2VkcmlnaHQKKyAgICAgICAgICAgICAgICAgICAgICAgXHJtICMxXGhmaWxsfX1cYmlnc2tpcCBccGFyXG5vYnJlYWsKK30KK1xkZWZcY2hmb3BlbiAjMSMye1xjaGFwb2RkcGFnZSB7XGNoYXBmb250cworXHZib3ggdG8gM2lue1x2ZmlsIFxoYm94IHRvXGhzaXple1xoZmlsICMyfSBcaGJveCB0b1xoc2l6ZXtcaGZpbCAjMX0gXHZmaWx9fSUKK1xwYXJccGVuYWx0eSA1MDAwICUKK30KK1xkZWZcY2VudGVyY2hmb3BlbiAjMXslCitcY2hhcG9kZHBhZ2Uge1xjaGFwZm9udHMgXHZib3h7XGh5cGhlbnBlbmFsdHk9MTAwMDBcdG9sZXJhbmNlPTUwMDAKKyAgICAgICAgICAgICAgICAgICAgICAgXHBhcmluZGVudD0wcHQKKyAgICAgICAgICAgICAgICAgICAgICAgXGhmaWxsIHtccm0gIzF9XGhmaWxsfX1cYmlnc2tpcCBccGFyXG5vYnJlYWsKK30KK1xkZWZcQ0hBUEZvcGVueyUKKyAgXGdsb2JhbFxsZXRcY2hhcG1hY3JvPVxjaGZvcGVuCisgIFxnbG9iYWxcbGV0XGNlbnRlcmNoYXBtYWNybz1cY2VudGVyY2hmb3Blbn0KKworCislIFNlY3Rpb24gdGl0bGVzLiAgVGhlc2UgbWFjcm9zIGNvbWJpbmUgdGhlIHNlY3Rpb24gbnVtYmVyIHBhcnRzIGFuZAorJSBjYWxsIHRoZSBnZW5lcmljIFxzZWN0aW9uaGVhZGluZyB0byBkbyB0aGUgcHJpbnRpbmcuCislCitcbmV3c2tpcFxzZWNoZWFkaW5nc2tpcAorXGRlZlxzZWNoZWFkaW5nYnJlYWt7XGRvYnJlYWsgXHNlY2hlYWRpbmdza2lwey0xMDAwfX0KKworJSBTdWJzZWN0aW9uIHRpdGxlcy4KK1xuZXdza2lwXHN1YnNlY2hlYWRpbmdza2lwCitcZGVmXHN1YnNlY2hlYWRpbmdicmVha3tcZG9icmVhayBcc3Vic2VjaGVhZGluZ3NraXB7LTUwMH19CisKKyUgU3Vic3Vic2VjdGlvbiB0aXRsZXMuCitcZGVmXHN1YnN1YnNlY2hlYWRpbmdza2lwe1xzdWJzZWNoZWFkaW5nc2tpcH0KK1xkZWZcc3Vic3Vic2VjaGVhZGluZ2JyZWFre1xzdWJzZWNoZWFkaW5nYnJlYWt9CisKKworJSBQcmludCBhbnkgc2l6ZSwgYW55IHR5cGUsIHNlY3Rpb24gdGl0bGUuCislCislICMxIGlzIHRoZSB0ZXh0LCAjMiBpcyB0aGUgc2VjdGlvbiBsZXZlbCAoc2VjL3N1YnNlYy9zdWJzdWJzZWMpLCAjMyBpcworJSB0aGUgc2VjdGlvbiB0eXBlIGZvciB4cmVmcyAoWW51bWJlcmVkLCBZbm90aGluZywgWWFwcGVuZGl4KSwgIzQgaXMgdGhlCislIHNlY3Rpb24gbnVtYmVyLgorJQorXGRlZlxzZWN0aW9uaGVhZGluZyMxIzIjMyM0eyUKKyAgeyUKKyAgICAlIFN3aXRjaCB0byB0aGUgcmlnaHQgc2V0IG9mIGZvbnRzLgorICAgIFxjc25hbWUgIzJmb250c1xlbmRjc25hbWUgXHJtCisgICAgJQorICAgICUgSW5zZXJ0IHNwYWNlIGFib3ZlIHRoZSBoZWFkaW5nLgorICAgIFxjc25hbWUgIzJoZWFkaW5nYnJlYWtcZW5kY3NuYW1lCisgICAgJQorICAgICUgT25seSBpbnNlcnQgdGhlIHNwYWNlIGFmdGVyIHRoZSBudW1iZXIgaWYgd2UgaGF2ZSBhIHNlY3Rpb24gbnVtYmVyLgorICAgIFxkZWZcc2VjdGlvbmxldmVseyMyfSUKKyAgICBcZGVmXHRlbXB0eXBleyMzfSUKKyAgICAlCisgICAgXGlmeFx0ZW1wdHlwZVxZbm90aGluZ2tleXdvcmQKKyAgICAgIFxzZXRib3gwID0gXGhib3h7fSUKKyAgICAgIFxkZWZcdG9jdHlwZXt1bm59JQorICAgICAgXGdkZWZcdGhpc3NlY3Rpb257IzF9JQorICAgIFxlbHNlXGlmeFx0ZW1wdHlwZVxZb21pdGZyb210b2NrZXl3b3JkCisgICAgICAlIGZvciBAaGVhZGluZ3MgLS0gbm8gc2VjdGlvbiBudW1iZXIsIGRvbid0IGluY2x1ZGUgaW4gdG9jLAorICAgICAgJSBhbmQgZG9uJ3QgcmVkZWZpbmUgXHRoaXNzZWN0aW9uLgorICAgICAgXHNldGJveDAgPSBcaGJveHt9JQorICAgICAgXGRlZlx0b2N0eXBle29taXR9JQorICAgICAgXGxldFxzZWN0aW9ubGV2ZWw9XGVtcHR5CisgICAgXGVsc2VcaWZ4XHRlbXB0eXBlXFlhcHBlbmRpeGtleXdvcmQKKyAgICAgIFxzZXRib3gwID0gXGhib3h7IzRcZW5zcGFjZX0lCisgICAgICBcZGVmXHRvY3R5cGV7YXBwfSUKKyAgICAgIFxnZGVmXHRoaXNzZWN0aW9ueyMxfSUKKyAgICBcZWxzZQorICAgICAgXHNldGJveDAgPSBcaGJveHsjNFxlbnNwYWNlfSUKKyAgICAgIFxkZWZcdG9jdHlwZXtudW19JQorICAgICAgXGdkZWZcdGhpc3NlY3Rpb257IzF9JQorICAgIFxmaVxmaVxmaQorICAgICUKKyAgICAlIFdyaXRlIHRoZSB0b2MgZW50cnkgKGJlZm9yZSBcZG9ub2RlcmVmKS4gIFNlZSBjb21tZW50cyBpbiBcY2hhcG1hY3JvLgorICAgIFx3cml0ZXRvY2VudHJ5e1x0b2N0eXBlXHNlY3Rpb25sZXZlbH17IzF9eyM0fSUKKyAgICAlCisgICAgJSBXcml0ZSB0aGUgbm9kZSByZWZlcmVuY2UgKD0gcGRmIGRlc3RpbmF0aW9uIGZvciBwZGZ0ZXgpLgorICAgICUgQWdhaW4sIHNlZSBjb21tZW50cyBpbiBcY2hhcG1hY3JvLgorICAgIFxkb25vZGVyZWZ7IzN9JQorICAgICUKKyAgICAlIEludGVybGluZSBnbHVlIHdpbGwgYmUgaW5zZXJ0ZWQgd2hlbiB0aGUgdmJveCBpcyBjb21wbGV0ZWQuCisgICAgJSBUaGF0IGdsdWUgd2lsbCBiZSBhIHZhbGlkIGJyZWFrcG9pbnQgZm9yIHRoZSBwYWdlLCBzaW5jZSBpdCdsbCBiZQorICAgICUgcHJlY2VkZWQgYnkgYSB3aGF0c2l0ICh1c3VhbGx5IGZyb20gdGhlIFxkb25vZGVyZWYsIG9yIGZyb20gdGhlCisgICAgJSBcd3JpdGV0b2NlbnRyeSBpZiB0aGVyZSB3YXMgbm8gbm9kZSkuICBXZSBkb24ndCB3YW50IHRvIGFsbG93IHRoYXQKKyAgICAlIGJyZWFrLCBzaW5jZSB0aGVuIHRoZSB3aGF0c2l0cyBjb3VsZCBlbmQgdXAgb24gcGFnZSBuIHdoaWxlIHRoZQorICAgICUgc2VjdGlvbiBpcyBvbiBwYWdlIG4rMSwgdGh1cyB0b2MvZXRjLiBhcmUgd3JvbmcuICBEZWJpYW4gYnVnIDI3NjAwMC4KKyAgICBcbm9icmVhaworICAgICUKKyAgICAlIE91dHB1dCB0aGUgYWN0dWFsIHNlY3Rpb24gaGVhZGluZy4KKyAgICBcdmJveHtcaHlwaGVucGVuYWx0eT0xMDAwMCBcdG9sZXJhbmNlPTUwMDAgXHBhcmluZGVudD0wcHQgXHJhZ2dlZHJpZ2h0CisgICAgICAgICAgXGhhbmdpbmRlbnQ9XHdkMCAgJSB6ZXJvIGlmIG5vIHNlY3Rpb24gbnVtYmVyCisgICAgICAgICAgXHVuaGJveDAgIzF9JQorICB9JQorICAlIEFkZCBleHRyYSBzcGFjZSBhZnRlciB0aGUgaGVhZGluZyAtLSBoYWxmIG9mIHdoYXRldmVyIGNhbWUgYWJvdmUgaXQuCisgICUgRG9uJ3QgYWxsb3cgc3RyZXRjaCwgdGhvdWdoLgorICBca2VybiAuNSBcY3NuYW1lICMyaGVhZGluZ3NraXBcZW5kY3NuYW1lCisgICUKKyAgJSBEbyBub3QgbGV0IHRoZSBrZXJuIGJlIGEgcG90ZW50aWFsIGJyZWFrcG9pbnQsIGFzIGl0IHdvdWxkIGJlIGlmIGl0CisgICUgd2FzIGZvbGxvd2VkIGJ5IGdsdWUuCisgIFxub2JyZWFrCisgICUKKyAgJSBXZSdsbCBhbG1vc3QgY2VydGFpbmx5IHN0YXJ0IGEgcGFyYWdyYXBoIG5leHQsIHNvIGRvbid0IGxldCB0aGF0CisgICUgZ2x1ZSBhY2N1bXVsYXRlLiAgKE5vdCBhIGJyZWFrcG9pbnQgYmVjYXVzZSBpdCdzIHByZWNlZGVkIGJ5IGEKKyAgJSBkaXNjYXJkYWJsZSBpdGVtLikKKyAgXHZza2lwLVxwYXJza2lwCisgICUgCisgICUgVGhpcyBpcyBwdXJlbHkgc28gdGhlIGxhc3QgaXRlbSBvbiB0aGUgbGlzdCBpcyBhIGtub3duIFxwZW5hbHR5ID4KKyAgJSAxMDAwMC4gIFRoaXMgaXMgc28gXHN0YXJ0ZGVmdW4gY2FuIGF2b2lkIGFsbG93aW5nIGJyZWFrcG9pbnRzIGFmdGVyCisgICUgc2VjdGlvbiBoZWFkaW5ncy4gIE90aGVyd2lzZSwgaXQgd291bGQgaW5zZXJ0IGEgdmFsaWQgYnJlYWtwb2ludCBiZXR3ZWVuOgorICAlIAorICAlICAgQHNlY3Rpb24gc2VjLXdoYXRldmVyCisgICUgICBAZGVmZm4gZGVmLXdoYXRldmVyCisgIFxwZW5hbHR5IDEwMDAxCit9CisKKworXG1lc3NhZ2V7dG9jLH0KKyUgVGFibGUgb2YgY29udGVudHMuCitcbmV3d3JpdGVcdG9jZmlsZQorCislIFdyaXRlIGFuIGVudHJ5IHRvIHRoZSB0b2MgZmlsZSwgb3BlbmluZyBpdCBpZiBuZWNlc3NhcnkuCislIENhbGxlZCBmcm9tIEBjaGFwdGVyLCBldGMuCislCislIEV4YW1wbGUgdXNhZ2U6IFx3cml0ZXRvY2VudHJ5e3NlY317U2VjdGlvbiBOYW1lfXtcdGhlXGNoYXBuby5cdGhlXHNlY25vfQorJSBXZSBhcHBlbmQgdGhlIGN1cnJlbnQgbm9kZSBuYW1lIChpZiBhbnkpIGFuZCBwYWdlIG51bWJlciBhcyBhZGRpdGlvbmFsCislIGFyZ3VtZW50cyBmb3IgdGhlIFx7Y2hhcCxzZWMsLi4ufWVudHJ5IG1hY3JvcyB3aGljaCB3aWxsIGV2ZW50dWFsbHkKKyUgcmVhZCB0aGlzLiAgVGhlIG5vZGUgbmFtZSBpcyB1c2VkIGluIHRoZSBwZGYgb3V0bGluZXMgYXMgdGhlCislIGRlc3RpbmF0aW9uIHRvIGp1bXAgdG8uCislCislIFdlIG9wZW4gdGhlIC50b2MgZmlsZSBmb3Igd3JpdGluZyBoZXJlIGluc3RlYWQgb2YgYXQgQHNldGZpbGVuYW1lIChvcgorJSBhbnkgb3RoZXIgZml4ZWQgdGltZSkgc28gdGhhdCBAY29udGVudHMgY2FuIGJlIGFueXdoZXJlIGluIHRoZSBkb2N1bWVudC4KKyUgQnV0IGlmICMxIGlzIGBvbWl0JywgdGhlbiB3ZSBkb24ndCBkbyBhbnl0aGluZy4gIFRoaXMgaXMgdXNlZCBmb3IgdGhlCislIHRhYmxlIG9mIGNvbnRlbnRzIGNoYXB0ZXIgb3BlbmluZ3MgdGhlbXNlbHZlcy4KKyUKK1xuZXdpZlxpZnRvY2ZpbGVvcGVuZWQKK1xkZWZcb21pdGtleXdvcmR7b21pdH0lCislCitcZGVmXHdyaXRldG9jZW50cnkjMSMyIzN7JQorICBcZWRlZlx3cml0ZXRvY3R5cGV7IzF9JQorICBcaWZ4XHdyaXRldG9jdHlwZVxvbWl0a2V5d29yZCBcZWxzZQorICAgIFxpZnRvY2ZpbGVvcGVuZWRcZWxzZQorICAgICAgXGltbWVkaWF0ZVxvcGVub3V0XHRvY2ZpbGUgPSBcam9ibmFtZS50b2MKKyAgICAgIFxnbG9iYWxcdG9jZmlsZW9wZW5lZHRydWUKKyAgICBcZmkKKyAgICAlCisgICAgXGlmbGlua3MKKyAgICAgIHtcYXRkdW1taWVzCisgICAgICAgXGVkZWZcdGVtcHslCisgICAgICAgICBcd3JpdGVcdG9jZmlsZXtAIzFlbnRyeXsjMn17IzN9e1xsYXN0bm9kZX17XG5vZXhwYW5kXGZvbGlvfX19JQorICAgICAgIFx0ZW1wCisgICAgICB9JQorICAgIFxmaQorICBcZmkKKyAgJQorICAlIFRlbGwgXHNoaXBvdXQgdG8gY3JlYXRlIGEgcGRmIGRlc3RpbmF0aW9uIG9uIGVhY2ggcGFnZSwgaWYgd2UncmUKKyAgJSB3cml0aW5nIHBkZi4gIFRoZXNlIGFyZSB1c2VkIGluIHRoZSB0YWJsZSBvZiBjb250ZW50cy4gIFdlIGNhbid0CisgICUganVzdCB3cml0ZSBvbmUgb24gZXZlcnkgcGFnZSBiZWNhdXNlIHRoZSB0aXRsZSBwYWdlcyBhcmUgbnVtYmVyZWQKKyAgJSAxIGFuZCAyICh0aGUgcGFnZSBudW1iZXJzIGFyZW4ndCBwcmludGVkKSwgYW5kIHNvIGFyZSB0aGUgZmlyc3QKKyAgJSB0d28gcGFnZXMgb2YgdGhlIGRvY3VtZW50LiAgVGh1cywgd2UnZCBoYXZlIHR3byBkZXN0aW5hdGlvbnMgbmFtZWQKKyAgJSBgMScsIGFuZCB0d28gbmFtZWQgYDInLgorICBcaWZwZGYgXGdsb2JhbFxwZGZtYWtlcGFnZWRlc3R0cnVlIFxmaQorfQorCisKKyUgVGhlc2UgY2hhcmFjdGVycyBkbyBub3QgcHJpbnQgcHJvcGVybHkgaW4gdGhlIENvbXB1dGVyIE1vZGVybiByb21hbgorJSBmb250cywgc28gd2UgbXVzdCB0YWtlIHNwZWNpYWwgY2FyZS4gIFRoaXMgaXMgbW9yZSBvciBsZXNzIHJlZHVuZGFudAorJSB3aXRoIHRoZSBUZXhpbmZvIGlucHV0IGZvcm1hdCBzZXR1cCBhdCB0aGUgZW5kIG9mIHRoaXMgZmlsZS4KKyUgCitcZGVmXGFjdGl2ZWNhdGNvZGVzeyUKKyAgXGNhdGNvZGVgXCI9XGFjdGl2ZQorICBcY2F0Y29kZWBcJD1cYWN0aXZlCisgIFxjYXRjb2RlYFw8PVxhY3RpdmUKKyAgXGNhdGNvZGVgXD49XGFjdGl2ZQorICBcY2F0Y29kZWBcXD1cYWN0aXZlCisgIFxjYXRjb2RlYFxePVxhY3RpdmUKKyAgXGNhdGNvZGVgXF89XGFjdGl2ZQorICBcY2F0Y29kZWBcfD1cYWN0aXZlCisgIFxjYXRjb2RlYFx+PVxhY3RpdmUKK30KKworCislIFJlYWQgdGhlIHRvYyBmaWxlLCB3aGljaCBpcyBlc3NlbnRpYWxseSBUZXhpbmZvIGlucHV0LgorXGRlZlxyZWFkdG9jZmlsZXslCisgIFxzZXR1cGRhdGFmaWxlCisgIFxhY3RpdmVjYXRjb2RlcworICBcaW5wdXQgXHRvY3JlYWRmaWxlbmFtZQorfQorCitcbmV3c2tpcFxjb250ZW50c3JpZ2h0bWFyZ2luIFxjb250ZW50c3JpZ2h0bWFyZ2luPTFpbgorXG5ld2NvdW50XHNhdmVwYWdlbm8KK1xuZXdjb3VudFxsYXN0bmVnYXRpdmVwYWdlbm8gXGxhc3RuZWdhdGl2ZXBhZ2VubyA9IC0xCisKKyUgUHJlcGFyZSB0byByZWFkIHdoYXQgd2UndmUgd3JpdHRlbiB0byBcdG9jZmlsZS4KKyUKK1xkZWZcc3RhcnRjb250ZW50cyMxeyUKKyAgJSBJZiBAc2V0Y2hhcHRlcm5ld3BhZ2Ugb24sIGFuZCBAaGVhZGluZ3MgZG91YmxlLCB0aGUgY29udGVudHMgc2hvdWxkCisgICUgc3RhcnQgb24gYW4gb2RkIHBhZ2UsIHVubGlrZSBjaGFwdGVycy4gIFRodXMsIHdlIG1haW50YWluCisgICUgXGNvbnRlbnRzYWxpZ25tYWNybyBpbiBwYXJhbGxlbCB3aXRoIFxwYWdlYWxpZ25tYWNyby4KKyAgJSBGcm9tOiBUb3Jiam9ybiBHcmFubHVuZCA8dGVnZUBtYXRlbWF0aWsuc3Uuc2U+CisgIFxjb250ZW50c2FsaWdubWFjcm8KKyAgXGltbWVkaWF0ZVxjbG9zZW91dFx0b2NmaWxlCisgICUKKyAgJSBEb24ndCBuZWVkIHRvIHB1dCBgQ29udGVudHMnIG9yIGBTaG9ydCBDb250ZW50cycgaW4gdGhlIGhlYWRsaW5lLgorICAlIEl0IGlzIGFidW5kYW50bHkgY2xlYXIgd2hhdCB0aGV5IGFyZS4KKyAgXGRlZlx0aGlzY2hhcHRlcnt9JQorICBcY2hhcG1hY3JveyMxfXtZb21pdGZyb210b2N9e30lCisgICUKKyAgXHNhdmVwYWdlbm8gPSBccGFnZW5vCisgIFxiZWdpbmdyb3VwICAgICAgICAgICAgICAgICAgJSBTZXQgdXAgdG8gaGFuZGxlIGNvbnRlbnRzIGZpbGVzIHByb3Blcmx5LgorICAgIFxyYWdnZWRib3R0b20gICAgICAgICAgICAgICUgV29ycnkgbW9yZSBhYm91dCBicmVha3BvaW50cyB0aGFuIHRoZSBib3R0b20uCisgICAgXGFkdmFuY2VcaHNpemUgYnkgLVxjb250ZW50c3JpZ2h0bWFyZ2luICUgRG9uJ3QgdXNlIHRoZSBmdWxsIGxpbmUgbGVuZ3RoLgorICAgICUKKyAgICAlIFJvbWFuIG51bWVyYWxzIGZvciBwYWdlIG51bWJlcnMuCisgICAgXGlmbnVtIFxwYWdlbm8+MCBcZ2xvYmFsXHBhZ2VubyA9IFxsYXN0bmVnYXRpdmVwYWdlbm8gXGZpCit9CisKKyUgcmVkZWZpbmVkIGZvciB0aGUgdHdvLXZvbHVtZSBsaXNwcmVmLiAgV2UgYWx3YXlzIG91dHB1dCBvbgorJSBcam9ibmFtZS50b2MgZXZlbiBpZiB0aGlzIGlzIHJlZGVmaW5lZC4KKyUgCitcZGVmXHRvY3JlYWRmaWxlbmFtZXtcam9ibmFtZS50b2N9CisKKyUgTm9ybWFsIChsb25nKSB0b2MuCislCitcZGVmXGNvbnRlbnRzeyUKKyAgXHN0YXJ0Y29udGVudHN7XHB1dHdvcmRUT0N9JQorICAgIFxvcGVuaW4gMSBcdG9jcmVhZGZpbGVuYW1lXHNwYWNlCisgICAgXGlmZW9mIDEgXGVsc2UKKyAgICAgIFxyZWFkdG9jZmlsZQorICAgIFxmaQorICAgIFx2ZmlsbCBcZWplY3QKKyAgICBcY29udGVudHNhbGlnbm1hY3JvICUgaW4gY2FzZSBAc2V0Y2hhcHRlcm5ld3BhZ2Ugb2RkIGlzIGluIGVmZmVjdAorICAgIFxpZmVvZiAxIFxlbHNlCisgICAgICBccGRmbWFrZW91dGxpbmVzCisgICAgXGZpCisgICAgXGNsb3NlaW4gMQorICBcZW5kZ3JvdXAKKyAgXGxhc3RuZWdhdGl2ZXBhZ2VubyA9IFxwYWdlbm8KKyAgXGdsb2JhbFxwYWdlbm8gPSBcc2F2ZXBhZ2VubworfQorCislIEFuZCBqdXN0IHRoZSBjaGFwdGVycy4KK1xkZWZcc3VtbWFyeWNvbnRlbnRzeyUKKyAgXHN0YXJ0Y29udGVudHN7XHB1dHdvcmRTaG9ydFRPQ30lCisgICAgJQorICAgIFxsZXRcbnVtY2hhcGVudHJ5ID0gXHNob3J0Y2hhcGVudHJ5CisgICAgXGxldFxhcHBlbnRyeSA9IFxzaG9ydGNoYXBlbnRyeQorICAgIFxsZXRcdW5uY2hhcGVudHJ5ID0gXHNob3J0dW5uY2hhcGVudHJ5CisgICAgJSBXZSB3YW50IGEgdHJ1ZSByb21hbiBoZXJlIGZvciB0aGUgcGFnZSBudW1iZXJzLgorICAgIFxzZWNmb250cworICAgIFxsZXRccm09XHNob3J0Y29udHJtIFxsZXRcYmY9XHNob3J0Y29udGJmCisgICAgXGxldFxzbD1cc2hvcnRjb250c2wgXGxldFx0dD1cc2hvcnRjb250dHQKKyAgICBccm0KKyAgICBcaHlwaGVucGVuYWx0eSA9IDEwMDAwCisgICAgXGFkdmFuY2VcYmFzZWxpbmVza2lwIGJ5IDFwdCAlIE9wZW4gaXQgdXAgYSBsaXR0bGUuCisgICAgXGRlZlxudW1zZWNlbnRyeSMjMSMjMiMjMyMjNHt9CisgICAgXGxldFxhcHBzZWNlbnRyeSA9IFxudW1zZWNlbnRyeQorICAgIFxsZXRcdW5uc2VjZW50cnkgPSBcbnVtc2VjZW50cnkKKyAgICBcbGV0XG51bXN1YnNlY2VudHJ5ID0gXG51bXNlY2VudHJ5CisgICAgXGxldFxhcHBzdWJzZWNlbnRyeSA9IFxudW1zZWNlbnRyeQorICAgIFxsZXRcdW5uc3Vic2VjZW50cnkgPSBcbnVtc2VjZW50cnkKKyAgICBcbGV0XG51bXN1YnN1YnNlY2VudHJ5ID0gXG51bXNlY2VudHJ5CisgICAgXGxldFxhcHBzdWJzdWJzZWNlbnRyeSA9IFxudW1zZWNlbnRyeQorICAgIFxsZXRcdW5uc3Vic3Vic2VjZW50cnkgPSBcbnVtc2VjZW50cnkKKyAgICBcb3BlbmluIDEgXHRvY3JlYWRmaWxlbmFtZVxzcGFjZQorICAgIFxpZmVvZiAxIFxlbHNlCisgICAgICBccmVhZHRvY2ZpbGUKKyAgICBcZmkKKyAgICBcY2xvc2VpbiAxCisgICAgXHZmaWxsIFxlamVjdAorICAgIFxjb250ZW50c2FsaWdubWFjcm8gJSBpbiBjYXNlIEBzZXRjaGFwdGVybmV3cGFnZSBvZGQgaXMgaW4gZWZmZWN0CisgIFxlbmRncm91cAorICBcbGFzdG5lZ2F0aXZlcGFnZW5vID0gXHBhZ2VubworICBcZ2xvYmFsXHBhZ2VubyA9IFxzYXZlcGFnZW5vCit9CitcbGV0XHNob3J0Y29udGVudHMgPSBcc3VtbWFyeWNvbnRlbnRzCisKKyUgVHlwZXNldCB0aGUgbGFiZWwgZm9yIGEgY2hhcHRlciBvciBhcHBlbmRpeCBmb3IgdGhlIHNob3J0IGNvbnRlbnRzLgorJSBUaGUgYXJnIGlzLCBlLmcuLCBgQScgZm9yIGFuIGFwcGVuZGl4LCBvciBgMycgZm9yIGEgY2hhcHRlci4KKyUKK1xkZWZcc2hvcnRjaGFwbGFiZWwjMXslCisgICUgVGhpcyBzcGFjZSBzaG91bGQgYmUgZW5vdWdoLCBzaW5jZSBhIHNpbmdsZSBudW1iZXIgaXMgLjVlbSwgYW5kIHRoZQorICAlIHdpZGVzdCBsZXR0ZXIgKE0pIGlzIDFlbSwgYXQgbGVhc3QgaW4gdGhlIENvbXB1dGVyIE1vZGVybiBmb250cy4KKyAgJSBCdXQgdXNlIFxoc3MganVzdCBpbiBjYXNlLgorICAlIChUaGlzIHNwYWNlIGRvZXNuJ3QgaW5jbHVkZSB0aGUgZXh0cmEgc3BhY2UgdGhhdCBnZXRzIGFkZGVkIGFmdGVyCisgICUgdGhlIGxhYmVsOyB0aGF0IGdldHMgcHV0IGluIGJ5IFxzaG9ydGNoYXBlbnRyeSBhYm92ZS4pCisgICUKKyAgJSBXZSdkIGxpa2UgdG8gcmlnaHQtanVzdGlmeSBjaGFwdGVyIG51bWJlcnMsIGJ1dCB0aGF0IGxvb2tzIHN0cmFuZ2UKKyAgJSB3aXRoIGFwcGVuZGl4IGxldHRlcnMuICBBbmQgcmlnaHQtanVzdGlmeWluZyBudW1iZXJzIGFuZAorICAlIGxlZnQtanVzdGlmeWluZyBsZXR0ZXJzIGxvb2tzIHN0cmFuZ2Ugd2hlbiB0aGVyZSBpcyBsZXNzIHRoYW4gMTAKKyAgJSBjaGFwdGVycy4gIEhhdmUgdG8gcmVhZCB0aGUgd2hvbGUgdG9jIG9uY2UgdG8ga25vdyBob3cgbWFueSBjaGFwdGVycworICAlIHRoZXJlIGFyZSBiZWZvcmUgZGVjaWRpbmcgLi4uCisgIFxoYm94IHRvIDFlbXsjMVxoc3N9JQorfQorCislIFRoZXNlIG1hY3JvcyBnZW5lcmF0ZSBpbmRpdmlkdWFsIGVudHJpZXMgaW4gdGhlIHRhYmxlIG9mIGNvbnRlbnRzLgorJSBUaGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlIGNoYXB0ZXIgb3Igc2VjdGlvbiBuYW1lLgorJSBUaGUgbGFzdCBhcmd1bWVudCBpcyB0aGUgcGFnZSBudW1iZXIuCislIFRoZSBhcmd1bWVudHMgaW4gYmV0d2VlbiBhcmUgdGhlIGNoYXB0ZXIgbnVtYmVyLCBzZWN0aW9uIG51bWJlciwgLi4uCisKKyUgQ2hhcHRlcnMsIGluIHRoZSBtYWluIGNvbnRlbnRzLgorXGRlZlxudW1jaGFwZW50cnkjMSMyIzMjNHtcZG9jaGFwZW50cnl7IzJcbGFiZWxzcGFjZSMxfXsjNH19CislCislIENoYXB0ZXJzLCBpbiB0aGUgc2hvcnQgdG9jLgorJSBTZWUgY29tbWVudHMgaW4gXGRvY2hhcGVudHJ5IHJlIHZib3ggYW5kIHJlbGF0ZWQgc2V0dGluZ3MuCitcZGVmXHNob3J0Y2hhcGVudHJ5IzEjMiMzIzR7JQorICBcdG9jZW50cnl7XHNob3J0Y2hhcGxhYmVseyMyfVxsYWJlbHNwYWNlICMxfXtcZG9zaG9ydHBhZ2Vub1xiZ3JvdXAjNFxlZ3JvdXB9JQorfQorCislIEFwcGVuZGljZXMsIGluIHRoZSBtYWluIGNvbnRlbnRzLgorJSBOZWVkIHRoZSB3b3JkIEFwcGVuZGl4LCBhbmQgYSBmaXhlZC1zaXplIGJveC4KKyUKK1xkZWZcYXBwZW5kaXhib3gjMXslCisgICUgV2UgdXNlIE0gc2luY2UgaXQncyBwcm9iYWJseSB0aGUgd2lkZXN0IGxldHRlci4KKyAgXHNldGJveDAgPSBcaGJveHtccHV0d29yZEFwcGVuZGl4e30gTX0lCisgIFxoYm94IHRvIFx3ZDB7XHB1dHdvcmRBcHBlbmRpeHt9ICMxXGhzc319CislCitcZGVmXGFwcGVudHJ5IzEjMiMzIzR7XGRvY2hhcGVudHJ5e1xhcHBlbmRpeGJveHsjMn1cbGFiZWxzcGFjZSMxfXsjNH19CisKKyUgVW5udW1iZXJlZCBjaGFwdGVycy4KK1xkZWZcdW5uY2hhcGVudHJ5IzEjMiMzIzR7XGRvY2hhcGVudHJ5eyMxfXsjNH19CitcZGVmXHNob3J0dW5uY2hhcGVudHJ5IzEjMiMzIzR7XHRvY2VudHJ5eyMxfXtcZG9zaG9ydHBhZ2Vub1xiZ3JvdXAjNFxlZ3JvdXB9fQorCislIFNlY3Rpb25zLgorXGRlZlxudW1zZWNlbnRyeSMxIzIjMyM0e1xkb3NlY2VudHJ5eyMyXGxhYmVsc3BhY2UjMX17IzR9fQorXGxldFxhcHBzZWNlbnRyeT1cbnVtc2VjZW50cnkKK1xkZWZcdW5uc2VjZW50cnkjMSMyIzMjNHtcZG9zZWNlbnRyeXsjMX17IzR9fQorCislIFN1YnNlY3Rpb25zLgorXGRlZlxudW1zdWJzZWNlbnRyeSMxIzIjMyM0e1xkb3N1YnNlY2VudHJ5eyMyXGxhYmVsc3BhY2UjMX17IzR9fQorXGxldFxhcHBzdWJzZWNlbnRyeT1cbnVtc3Vic2VjZW50cnkKK1xkZWZcdW5uc3Vic2VjZW50cnkjMSMyIzMjNHtcZG9zdWJzZWNlbnRyeXsjMX17IzR9fQorCislIEFuZCBzdWJzdWJzZWN0aW9ucy4KK1xkZWZcbnVtc3Vic3Vic2VjZW50cnkjMSMyIzMjNHtcZG9zdWJzdWJzZWNlbnRyeXsjMlxsYWJlbHNwYWNlIzF9eyM0fX0KK1xsZXRcYXBwc3Vic3Vic2VjZW50cnk9XG51bXN1YnN1YnNlY2VudHJ5CitcZGVmXHVubnN1YnN1YnNlY2VudHJ5IzEjMiMzIzR7XGRvc3Vic3Vic2VjZW50cnl7IzF9eyM0fX0KKworJSBUaGlzIHBhcmFtZXRlciBjb250cm9scyB0aGUgaW5kZW50YXRpb24gb2YgdGhlIHZhcmlvdXMgbGV2ZWxzLgorJSBTYW1lIGFzIFxkZWZhdWx0cGFyaW5kZW50LgorXG5ld2RpbWVuXHRvY2luZGVudCBcdG9jaW5kZW50ID0gMTVwdAorCislIE5vdyBmb3IgdGhlIGFjdHVhbCB0eXBlc2V0dGluZy4gSW4gYWxsIHRoZXNlLCAjMSBpcyB0aGUgdGV4dCBhbmQgIzIgaXMgdGhlCislIHBhZ2UgbnVtYmVyLgorJQorJSBJZiB0aGUgdG9jIGhhcyB0byBiZSBicm9rZW4gb3ZlciBwYWdlcywgd2Ugd2FudCBpdCB0byBiZSBhdCBjaGFwdGVycworJSBpZiBhdCBhbGwgcG9zc2libGU7IGhlbmNlIHRoZSBccGVuYWx0eS4KK1xkZWZcZG9jaGFwZW50cnkjMSMyeyUKKyAgIFxwZW5hbHR5LTMwMCBcdnNraXAxXGJhc2VsaW5lc2tpcCBwbHVzLjMzXGJhc2VsaW5lc2tpcCBtaW51cy4yNVxiYXNlbGluZXNraXAKKyAgIFxiZWdpbmdyb3VwCisgICAgIFxjaGFwZW50cnlmb250cworICAgICBcdG9jZW50cnl7IzF9e1xkb3BhZ2Vub1xiZ3JvdXAjMlxlZ3JvdXB9JQorICAgXGVuZGdyb3VwCisgICBcbm9icmVha1x2c2tpcCAuMjVcYmFzZWxpbmVza2lwIHBsdXMuMVxiYXNlbGluZXNraXAKK30KKworXGRlZlxkb3NlY2VudHJ5IzEjMntcYmVnaW5ncm91cAorICBcc2VjZW50cnlmb250cyBcbGVmdHNraXA9XHRvY2luZGVudAorICBcdG9jZW50cnl7IzF9e1xkb3BhZ2Vub1xiZ3JvdXAjMlxlZ3JvdXB9JQorXGVuZGdyb3VwfQorCitcZGVmXGRvc3Vic2VjZW50cnkjMSMye1xiZWdpbmdyb3VwCisgIFxzdWJzZWNlbnRyeWZvbnRzIFxsZWZ0c2tpcD0yXHRvY2luZGVudAorICBcdG9jZW50cnl7IzF9e1xkb3BhZ2Vub1xiZ3JvdXAjMlxlZ3JvdXB9JQorXGVuZGdyb3VwfQorCitcZGVmXGRvc3Vic3Vic2VjZW50cnkjMSMye1xiZWdpbmdyb3VwCisgIFxzdWJzdWJzZWNlbnRyeWZvbnRzIFxsZWZ0c2tpcD0zXHRvY2luZGVudAorICBcdG9jZW50cnl7IzF9e1xkb3BhZ2Vub1xiZ3JvdXAjMlxlZ3JvdXB9JQorXGVuZGdyb3VwfQorCislIFdlIHVzZSB0aGUgc2FtZSBcZW50cnkgbWFjcm8gYXMgZm9yIHRoZSBpbmRleCBlbnRyaWVzLgorXGxldFx0b2NlbnRyeSA9IFxlbnRyeQorCislIFNwYWNlIGJldHdlZW4gY2hhcHRlciAob3Igd2hhdGV2ZXIpIG51bWJlciBhbmQgdGhlIHRpdGxlLgorXGRlZlxsYWJlbHNwYWNle1xoc2tpcDFlbSBccmVsYXh9CisKK1xkZWZcZG9wYWdlbm8jMXt7XHJtICMxfX0KK1xkZWZcZG9zaG9ydHBhZ2VubyMxe3tccm0gIzF9fQorCitcZGVmXGNoYXBlbnRyeWZvbnRze1xzZWNmb250cyBccm19CitcZGVmXHNlY2VudHJ5Zm9udHN7XHRleHRmb250c30KK1xkZWZcc3Vic2VjZW50cnlmb250c3tcdGV4dGZvbnRzfQorXGRlZlxzdWJzdWJzZWNlbnRyeWZvbnRze1x0ZXh0Zm9udHN9CisKKworXG1lc3NhZ2V7ZW52aXJvbm1lbnRzLH0KKyUgQGZvbyAuLi4gQGVuZCBmb28uCisKKyUgQHBvaW50e30sIEByZXN1bHR7fSwgQGV4cGFuc2lvbnt9LCBAcHJpbnR7fSwgQGVxdWl2e30uCislCislIFNpbmNlIHRoZXNlIGNoYXJhY3RlcnMgYXJlIHVzZWQgaW4gZXhhbXBsZXMsIGl0IHNob3VsZCBiZSBhbiBldmVuIG51bWJlciBvZgorJSBcdHQgd2lkdGhzLiBFYWNoIFx0dCBjaGFyYWN0ZXIgaXMgMWVuLCBzbyB0d28gbWFrZXMgaXQgMWVtLgorJQorXGRlZlxwb2ludHskXHN0YXIkfQorXGRlZlxyZXN1bHR7XGxlYXZldm1vZGVccmFpc2UuMTVleFxoYm94IHRvIDFlbXtcaGZpbCRcUmlnaHRhcnJvdyRcaGZpbH19CitcZGVmXGV4cGFuc2lvbntcbGVhdmV2bW9kZVxyYWlzZS4xZXhcaGJveCB0byAxZW17XGhmaWwkXG1hcHN0byRcaGZpbH19CitcZGVmXHByaW50e1xsZWF2ZXZtb2RlXGxvd2VyLjFleFxoYm94IHRvIDFlbXtcaGZpbCRcZGFzaHYkXGhmaWx9fQorXGRlZlxlcXVpdntcbGVhdmV2bW9kZVxsb3dlci4xZXhcaGJveCB0byAxZW17XGhmaWwkXHB0ZXhlcXVpdiRcaGZpbH19CisKKyUgVGhlIEBlcnJvcnt9IGNvbW1hbmQuCislIEFkYXB0ZWQgZnJvbSB0aGUgVGVYYm9vaydzIFxib3hpdC4KKyUKK1xuZXdib3hcZXJyb3Jib3gKKyUKK3tcdGVudHQgXGdsb2JhbFxkaW1lbjAgPSAzZW19JSBXaWR0aCBvZiB0aGUgYm94LgorXGRpbWVuMiA9IC41NXB0ICUgVGhpY2tuZXNzIG9mIHJ1bGVzCislIFRoZSB0ZXh0LiAoYHInIGlzIG9wZW4gb24gdGhlIHJpZ2h0LCBgZScgc29tZXdoYXQgbGVzcyBzbyBvbiB0aGUgbGVmdC4pCitcc2V0Ym94MCA9IFxoYm94e1xrZXJuLS43NXB0IFxyZWR1Y2Vkc2YgZXJyb3Jca2Vybi0xLjVwdH0KKyUKK1xzZXRib3hcZXJyb3Jib3g9XGhib3ggdG8gXGRpbWVuMHtcaGZpbAorICAgXGhzaXplID0gXGRpbWVuMCBcYWR2YW5jZVxoc2l6ZSBieSAtNS44cHQgJSBTcGFjZSB0byBsZWZ0K3JpZ2h0LgorICAgXGFkdmFuY2VcaHNpemUgYnkgLTJcZGltZW4yICUgUnVsZXMuCisgICBcdmJveHslCisgICAgICBcaHJ1bGUgaGVpZ2h0XGRpbWVuMgorICAgICAgXGhib3h7XHZydWxlIHdpZHRoXGRpbWVuMiBca2VybjNwdCAgICAgICAgICAlIFNwYWNlIHRvIGxlZnQgb2YgdGV4dC4KKyAgICAgICAgIFx2dG9we1xrZXJuMi40cHQgXGJveDAgXGtlcm4yLjRwdH0lIFNwYWNlIGFib3ZlL2JlbG93LgorICAgICAgICAgXGtlcm4zcHRcdnJ1bGUgd2lkdGhcZGltZW4yfSUgU3BhY2UgdG8gcmlnaHQuCisgICAgICBcaHJ1bGUgaGVpZ2h0XGRpbWVuMn0KKyAgICBcaGZpbH0KKyUKK1xkZWZcZXJyb3J7XGxlYXZldm1vZGVcbG93ZXIuN2V4XGNvcHlcZXJyb3Jib3h9CisKKyUgQHRleCAuLi4gQGVuZCB0ZXggICAgZXNjYXBlcyBpbnRvIHJhdyBUZXggdGVtcG9yYXJpbHkuCislIE9uZSBleGNlcHRpb246IEAgaXMgc3RpbGwgYW4gZXNjYXBlIGNoYXJhY3Rlciwgc28gdGhhdCBAZW5kIHRleCB3b3Jrcy4KKyUgQnV0IFxAIG9yIEBAIHdpbGwgZ2V0IGEgcGxhaW4gdGV4IEAgY2hhcmFjdGVyLgorCitcZW52ZGVmXHRleHslCisgIFxjYXRjb2RlIGBcXD0wIFxjYXRjb2RlIGBcez0xIFxjYXRjb2RlIGBcfT0yCisgIFxjYXRjb2RlIGBcJD0zIFxjYXRjb2RlIGBcJj00IFxjYXRjb2RlIGBcIz02CisgIFxjYXRjb2RlIGBcXj03IFxjYXRjb2RlIGBcXz04IFxjYXRjb2RlIGBcfj1cYWN0aXZlIFxsZXR+PVx0aWUKKyAgXGNhdGNvZGUgYFwlPTE0CisgIFxjYXRjb2RlIGBcKz1cb3RoZXIKKyAgXGNhdGNvZGUgYFwiPVxvdGhlcgorICBcY2F0Y29kZSBgXHw9XG90aGVyCisgIFxjYXRjb2RlIGBcPD1cb3RoZXIKKyAgXGNhdGNvZGUgYFw+PVxvdGhlcgorICBcZXNjYXBlY2hhcj1gXFwKKyAgJQorICBcbGV0XGI9XHB0ZXhiCisgIFxsZXRcYnVsbGV0PVxwdGV4YnVsbGV0CisgIFxsZXRcYz1ccHRleGMKKyAgXGxldFwsPVxwdGV4Y29tbWEKKyAgXGxldFwuPVxwdGV4ZG90CisgIFxsZXRcZG90cz1ccHRleGRvdHMKKyAgXGxldFxlcXVpdj1ccHRleGVxdWl2CisgIFxsZXRcIT1ccHRleGV4Y2xhbQorICBcbGV0XGk9XHB0ZXhpCisgIFxsZXRcaW5kZW50PVxwdGV4aW5kZW50CisgIFxsZXRcbm9pbmRlbnQ9XHB0ZXhub2luZGVudAorICBcbGV0XHs9XHB0ZXhsYnJhY2UKKyAgXGxldFwrPVx0YWJhbGlnbgorICBcbGV0XH09XHB0ZXhyYnJhY2UKKyAgXGxldFwvPVxwdGV4c2xhc2gKKyAgXGxldFwqPVxwdGV4c3RhcgorICBcbGV0XHQ9XHB0ZXh0CisgIFxsZXRcZnJlbmNoc3BhY2luZz1ccGxhaW5mcmVuY2hzcGFjaW5nCisgICUKKyAgXGRlZlxlbmRsZG90c3tcbWF0aGlubmVye1xsZG90c1xsZG90c1xsZG90c1xsZG90c319JQorICBcZGVmXGVuZGRvdHN7XHJlbGF4XGlmbW1vZGVcZW5kbGRvdHNcZWxzZSRcbWF0aHN1cnJvdW5kPTBwdCBcZW5kbGRvdHNcLCRcZml9JQorICBcZGVmXEB7QH0lCit9CislIFRoZXJlIGlzIG5vIG5lZWQgdG8gZGVmaW5lIFxFdGV4LgorCislIERlZmluZSBAbGlzcCAuLi4gQGVuZCBsaXNwLgorJSBAbGlzcCBlbnZpcm9ubWVudCBmb3JtcyBhIGdyb3VwIHNvIGl0IGNhbiByZWJpbmQgdGhpbmdzLAorJSBpbmNsdWRpbmcgdGhlIGRlZmluaXRpb24gb2YgQGVuZCBsaXNwICh3aGljaCBub3JtYWxseSBpcyBlcnJvbmVvdXMpLgorCislIEFtb3VudCB0byBuYXJyb3cgdGhlIG1hcmdpbnMgYnkgZm9yIEBsaXNwLgorXG5ld3NraXBcbGlzcG5hcnJvd2luZyBcbGlzcG5hcnJvd2luZz0wLjRpbgorCislIFRoaXMgaXMgdGhlIGRlZmluaXRpb24gdGhhdCBeXk0gZ2V0cyBpbnNpZGUgQGxpc3AsIEBleGFtcGxlLCBhbmQgb3RoZXIKKyUgc3VjaCBlbnZpcm9ubWVudHMuICBcbnVsbCBpcyBiZXR0ZXIgdGhhbiBhIHNwYWNlLCBzaW5jZSBpdCBkb2Vzbid0CislIGhhdmUgYW55IHdpZHRoLgorXGRlZlxsaXNwcGFye1xudWxsXGVuZGdyYWZ9CisKKyUgVGhpcyBzcGFjZSBpcyBhbHdheXMgcHJlc2VudCBhYm92ZSBhbmQgYmVsb3cgZW52aXJvbm1lbnRzLgorXG5ld3NraXBcZW52c2tpcGFtb3VudCBcZW52c2tpcGFtb3VudCA9IDBwdAorCislIE1ha2Ugc3BhY2luZyBhbmQgYmVsb3cgZW52aXJvbm1lbnQgc3ltbWV0cmljYWwuICBXZSB1c2UgXHBhcnNraXAgaGVyZQorJSB0byBoZWxwIGluIGRvaW5nIHRoYXQsIHNpbmNlIGluIEBleGFtcGxlLWxpa2UgZW52aXJvbm1lbnRzIFxwYXJza2lwCislIGlzIHJlc2V0IHRvIHplcm87IHRodXMgdGhlIFxhZnRlcmVudmJyZWFrIGluc2VydHMgbm8gc3BhY2UgLS0gYnV0IHRoZQorJSBzdGFydCBvZiB0aGUgbmV4dCBwYXJhZ3JhcGggd2lsbCBpbnNlcnQgXHBhcnNraXAuCislCitcZGVmXGFib3ZlZW52YnJlYWt7eyUKKyAgJSA9MTAwMDAgaW5zdGVhZCBvZiA8MTAwMDAgYmVjYXVzZSBvZiBhIHNwZWNpYWwgY2FzZSBpbiBcaXRlbXp6eiBhbmQKKyAgJSBcc2VjdGlvbmhlYWRpbmcsIHEudi4KKyAgXGlmbnVtIFxsYXN0cGVuYWx0eT0xMDAwMCBcZWxzZQorICAgIFxhZHZhbmNlXGVudnNraXBhbW91bnQgYnkgXHBhcnNraXAKKyAgICBcZW5kZ3JhZgorICAgIFxpZmRpbVxsYXN0c2tpcDxcZW52c2tpcGFtb3VudAorICAgICAgXHJlbW92ZWxhc3Rza2lwCisgICAgICAlIGl0J3Mgbm90IGEgZ29vZCBwbGFjZSB0byBicmVhayBpZiB0aGUgbGFzdCBwZW5hbHR5IHdhcyBcbm9icmVhaworICAgICAgJSBvciBiZXR0ZXIgLi4uCisgICAgICBcaWZudW1cbGFzdHBlbmFsdHk8MTAwMDAgXHBlbmFsdHktNTAgXGZpCisgICAgICBcdnNraXBcZW52c2tpcGFtb3VudAorICAgIFxmaQorICBcZmkKK319CisKK1xsZXRcYWZ0ZXJlbnZicmVhayA9IFxhYm92ZWVudmJyZWFrCisKKyUgXG5vbmFycm93aW5nIGlzIGEgZmxhZy4gIElmICJzZXQiLCBAbGlzcCBldGMgZG9uJ3QgbmFycm93IG1hcmdpbnM7IGl0IHdpbGwKKyUgYWxzbyBjbGVhciBpdCwgc28gdGhhdCBpdHMgZW1iZWRkZWQgZW52aXJvbm1lbnRzIGRvIHRoZSBuYXJyb3dpbmcgYWdhaW4uCitcbGV0XG5vbmFycm93aW5nPVxyZWxheAorCislIEBjYXJ0b3VjaGUgLi4uIEBlbmQgY2FydG91Y2hlOiBkcmF3IHJlY3RhbmdsZSB3L3JvdW5kZWQgY29ybmVycyBhcm91bmQKKyUgZW52aXJvbm1lbnQgY29udGVudHMuCitcZm9udFxjaXJjbGU9bGNpcmNsZTEwCitcbmV3ZGltZW5cY2lyY3RoaWNrCitcbmV3ZGltZW5cY2FydG91dGVyXG5ld2RpbWVuXGNhcnRpbm5lcgorXG5ld3NraXBcbm9ybWJza2lwXG5ld3NraXBcbm9ybXBza2lwXG5ld3NraXBcbm9ybWxza2lwCitcY2lyY3RoaWNrPVxmb250ZGltZW44XGNpcmNsZQorJQorXGRlZlxjdGx7e1xjaXJjbGVcY2hhcicwMTNcaHNraXAgLTZwdH19JSA2cHQgZnJvbSBwbCBmaWxlOiAxLzJjaGFyd2lkdGgKK1xkZWZcY3Rye3tcaHNraXAgNnB0XGNpcmNsZVxjaGFyJzAxMH19CitcZGVmXGNibHt7XGNpcmNsZVxjaGFyJzAxMlxoc2tpcCAtNnB0fX0KK1xkZWZcY2Jye3tcaHNraXAgNnB0XGNpcmNsZVxjaGFyJzAxMX19CitcZGVmXGNhcnR0b3B7XGhib3ggdG8gXGNhcnRvdXRlcntcaHNraXBcbHNraXAKKyAgICAgICAgXGN0bFxsZWFkZXJzXGhydWxlIGhlaWdodFxjaXJjdGhpY2tcaGZpbFxjdHIKKyAgICAgICAgXGhza2lwXHJza2lwfX0KK1xkZWZcY2FydGJvdHtcaGJveCB0byBcY2FydG91dGVye1xoc2tpcFxsc2tpcAorICAgICAgICBcY2JsXGxlYWRlcnNcaHJ1bGUgaGVpZ2h0XGNpcmN0aGlja1xoZmlsXGNicgorICAgICAgICBcaHNraXBccnNraXB9fQorJQorXG5ld3NraXBcbHNraXBcbmV3c2tpcFxyc2tpcAorCitcZW52ZGVmXGNhcnRvdWNoZXslCisgIFxpZmhtb2RlXHBhclxmaSAgJSBjYW4ndCBiZSBpbiB0aGUgbWlkc3Qgb2YgYSBwYXJhZ3JhcGguCisgIFxzdGFydHNhdmluZ2luc2VydHMKKyAgXGxza2lwPVxsZWZ0c2tpcCBccnNraXA9XHJpZ2h0c2tpcAorICBcbGVmdHNraXA9MHB0XHJpZ2h0c2tpcD0wcHQgJSB3ZSB3YW50IHRoZXNlICpvdXRzaWRlKi4KKyAgXGNhcnRpbm5lcj1caHNpemUgXGFkdmFuY2VcY2FydGlubmVyIGJ5LVxsc2tpcAorICBcYWR2YW5jZVxjYXJ0aW5uZXIgYnktXHJza2lwCisgIFxjYXJ0b3V0ZXI9XGhzaXplCisgIFxhZHZhbmNlXGNhcnRvdXRlciBieSAxOC40cHQJJSBhbGxvdyBmb3IgM3B0IGtlcm5zIG9uIGVpdGhlcgorCQkJCSUgc2lkZSwgYW5kIGZvciA2cHQgd2FzdGUgZnJvbQorCQkJCSUgZWFjaCBjb3JuZXIgY2hhciwgYW5kIHJ1bGUgdGhpY2tuZXNzCisgIFxub3JtYnNraXA9XGJhc2VsaW5lc2tpcCBcbm9ybXBza2lwPVxwYXJza2lwIFxub3JtbHNraXA9XGxpbmVza2lwCisgICUgRmxhZyB0byB0ZWxsIEBsaXNwLCBldGMuLCBub3QgdG8gbmFycm93IG1hcmdpbi4KKyAgXGxldFxub25hcnJvd2luZyA9IHQlCisgIFx2Ym94XGJncm91cAorICAgICAgXGJhc2VsaW5lc2tpcD0wcHRccGFyc2tpcD0wcHRcbGluZXNraXA9MHB0CisgICAgICBcY2FydHRvcAorICAgICAgXGhib3hcYmdyb3VwCisJICBcaHNraXBcbHNraXAKKwkgIFx2cnVsZVxrZXJuM3B0CisJICBcdmJveFxiZ3JvdXAKKwkgICAgICBca2VybjNwdAorCSAgICAgIFxoc2l6ZT1cY2FydGlubmVyCisJICAgICAgXGJhc2VsaW5lc2tpcD1cbm9ybWJza2lwCisJICAgICAgXGxpbmVza2lwPVxub3JtbHNraXAKKwkgICAgICBccGFyc2tpcD1cbm9ybXBza2lwCisJICAgICAgXHZza2lwIC1ccGFyc2tpcAorCSAgICAgIFxjb21tZW50ICUgRm9yIGV4cGxhbmF0aW9uLCBzZWUgdGhlIGVuZCBvZiBcZGVmXGdyb3VwLgorfQorXGRlZlxFY2FydG91Y2hleyUKKyAgICAgICAgICAgICAgXGlmaG1vZGVccGFyXGZpCisJICAgICAgXGtlcm4zcHQKKwkgIFxlZ3JvdXAKKwkgIFxrZXJuM3B0XHZydWxlCisJICBcaHNraXBccnNraXAKKyAgICAgIFxlZ3JvdXAKKyAgICAgIFxjYXJ0Ym90CisgIFxlZ3JvdXAKKyAgXGNoZWNraW5zZXJ0cworfQorCisKKyUgVGhpcyBtYWNybyBpcyBjYWxsZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBhbGwgdGhlIEBleGFtcGxlIHZhcmlhbnRzLAorJSBpbnNpZGUgYSBncm91cC4KK1xkZWZcbm9uZmlsbHN0YXJ0eyUKKyAgXGFib3ZlZW52YnJlYWsKKyAgXGhmdXp6ID0gMTJwdCAlIERvbid0IGJlIGZ1c3N5CisgIFxzZXBzcGFjZXMgJSBNYWtlIHNwYWNlcyBiZSB3b3JkLXNlcGFyYXRvcnMgcmF0aGVyIHRoYW4gc3BhY2UgdG9rZW5zLgorICBcbGV0XHBhciA9IFxsaXNwcGFyICUgZG9uJ3QgaWdub3JlIGJsYW5rIGxpbmVzCisgIFxvYmV5bGluZXMgJSBlYWNoIGxpbmUgb2YgaW5wdXQgaXMgYSBsaW5lIG9mIG91dHB1dAorICBccGFyc2tpcCA9IDBwdAorICBccGFyaW5kZW50ID0gMHB0CisgIFxlbWVyZ2VuY3lzdHJldGNoID0gMHB0ICUgZG9uJ3QgdHJ5IHRvIGF2b2lkIG92ZXJmdWxsIGJveGVzCisgIFxpZnhcbm9uYXJyb3dpbmdccmVsYXgKKyAgICBcYWR2YW5jZSBcbGVmdHNraXAgYnkgXGxpc3BuYXJyb3dpbmcKKyAgICBcZXhkZW50YW1vdW50PVxsaXNwbmFycm93aW5nCisgIFxlbHNlCisgICAgXGxldFxub25hcnJvd2luZyA9IFxyZWxheAorICBcZmkKKyAgXGxldFxleGRlbnQ9XG5vZmlsbGV4ZGVudAorfQorCislIElmIHlvdSB3YW50IGFsbCBleGFtcGxlcyBldGMuIHNtYWxsOiBAc2V0IGRpc3BlbnZzaXplIHNtYWxsLgorJSBJZiB5b3Ugd2FudCBldmVuIHNtYWxsIGV4YW1wbGVzIHRoZSBmdWxsIHNpemU6IEBzZXQgZGlzcGVudnNpemUgbm9zbWFsbC4KKyUgVGhpcyBhZmZlY3RzIHRoZSBmb2xsb3dpbmcgZGlzcGxheWVkIGVudmlyb25tZW50czoKKyUgICAgQGV4YW1wbGUsIEBkaXNwbGF5LCBAZm9ybWF0LCBAbGlzcAorJQorXGRlZlxzbWFsbHdvcmR7c21hbGx9CitcZGVmXG5vc21hbGx3b3Jke25vc21hbGx9CitcbGV0XFNFVGRpc3BlbnZzaXplXHJlbGF4CitcZGVmXHNldG5vcm1hbGRpc3BlbnZ7JQorICBcaWZ4XFNFVGRpc3BlbnZzaXplXHNtYWxsd29yZAorICAgICUgZW5kIHBhcmFncmFwaCBmb3Igc2FrZSBvZiBsZWFkaW5nLCBpbiBjYXNlIGRvY3VtZW50IGhhcyBubyBibGFuaworICAgICUgbGluZS4gIFRoaXMgaXMgcmVkdW5kYW50IHdpdGggd2hhdCBoYXBwZW5zIGluIFxhYm92ZWVudmJyZWFrLCBidXQKKyAgICAlIHdlIG5lZWQgdG8gZG8gaXQgYmVmb3JlIGNoYW5naW5nIHRoZSBmb250cywgYW5kIGl0J3MgaW5jb252ZW5pZW50CisgICAgJSB0byBjaGFuZ2UgdGhlIGZvbnRzIGFmdGVyd2FyZC4KKyAgICBcaWZudW0gXGxhc3RwZW5hbHR5PTEwMDAwIFxlbHNlIFxlbmRncmFmIFxmaQorICAgIFxzbWFsbGV4YW1wbGVmb250cyBccm0KKyAgXGZpCit9CitcZGVmXHNldHNtYWxsZGlzcGVudnslCisgIFxpZnhcU0VUZGlzcGVudnNpemVcbm9zbWFsbHdvcmQKKyAgXGVsc2UKKyAgICBcaWZudW0gXGxhc3RwZW5hbHR5PTEwMDAwIFxlbHNlIFxlbmRncmFmIFxmaQorICAgIFxzbWFsbGV4YW1wbGVmb250cyBccm0KKyAgXGZpCit9CisKKyUgV2Ugb2Z0ZW4gZGVmaW5lIHR3byBlbnZpcm9ubWVudHMsIEBmb28gYW5kIEBzbWFsbGZvby4KKyUgTGV0J3MgZG8gaXQgYnkgb25lIGNvbW1hbmQ6CitcZGVmXG1ha2VkaXNwZW52ICMxIzJ7CisgIFxleHBhbmRhZnRlclxlbnZkZWZcY3NuYW1lIzFcZW5kY3NuYW1lIHtcc2V0bm9ybWFsZGlzcGVudiAjMn0KKyAgXGV4cGFuZGFmdGVyXGVudmRlZlxjc25hbWUgc21hbGwjMVxlbmRjc25hbWUge1xzZXRzbWFsbGRpc3BlbnYgIzJ9CisgIFxleHBhbmRhZnRlclxsZXRcY3NuYW1lIEUjMVxlbmRjc25hbWUgXGFmdGVyZW52YnJlYWsKKyAgXGV4cGFuZGFmdGVyXGxldFxjc25hbWUgRXNtYWxsIzFcZW5kY3NuYW1lIFxhZnRlcmVudmJyZWFrCit9CisKKyUgRGVmaW5lIHR3byBzeW5vbnltczoKK1xkZWZcbWFrZXR3b2Rpc3BlbnZzICMxIzIjM3sKKyAgXG1ha2VkaXNwZW52eyMxfXsjM30KKyAgXG1ha2VkaXNwZW52eyMyfXsjM30KK30KKworJSBAbGlzcDogaW5kZW50ZWQsIG5hcnJvd2VkLCB0eXBld3JpdGVyIGZvbnQ7IEBleGFtcGxlOiBzYW1lIGFzIEBsaXNwLgorJQorJSBAc21hbGxleGFtcGxlIGFuZCBAc21hbGxsaXNwOiB1c2Ugc21hbGxlciBmb250cy4KKyUgT3JpZ2luYWxseSBjb250cmlidXRlZCBieSBQYXZlbEB4ZXJveC4KKyUKK1xtYWtldHdvZGlzcGVudnMge2xpc3B9e2V4YW1wbGV9eyUKKyAgXG5vbmZpbGxzdGFydAorICBcdHRccXVvdGVleHBhbmQKKyAgXGxldFxrYmRmb250ID0gXGtiZGV4YW1wbGVmb250ICUgQWxsb3cgQGtiZCB0byBkbyBzb21ldGhpbmcgc3BlY2lhbC4KKyAgXGdvYmJsZSAgICAgICAlIGVhdCByZXR1cm4KK30KKyUgQGRpc3BsYXkvQHNtYWxsZGlzcGxheTogc2FtZSBhcyBAbGlzcCBleGNlcHQga2VlcCBjdXJyZW50IGZvbnQuCislCitcbWFrZWRpc3BlbnYge2Rpc3BsYXl9eyUKKyAgXG5vbmZpbGxzdGFydAorICBcZ29iYmxlCit9CisKKyUgQGZvcm1hdC9Ac21hbGxmb3JtYXQ6IHNhbWUgYXMgQGRpc3BsYXkgZXhjZXB0IGRvbid0IG5hcnJvdyBtYXJnaW5zLgorJQorXG1ha2VkaXNwZW52e2Zvcm1hdH17JQorICBcbGV0XG5vbmFycm93aW5nID0gdCUKKyAgXG5vbmZpbGxzdGFydAorICBcZ29iYmxlCit9CisKKyUgQGZsdXNobGVmdDogc2FtZSBhcyBAZm9ybWF0LCBidXQgZG9lc24ndCBvYmV5IFxTRVRkaXNwZW52c2l6ZS4KK1xlbnZkZWZcZmx1c2hsZWZ0eyUKKyAgXGxldFxub25hcnJvd2luZyA9IHQlCisgIFxub25maWxsc3RhcnQKKyAgXGdvYmJsZQorfQorXGxldFxFZmx1c2hsZWZ0ID0gXGFmdGVyZW52YnJlYWsKKworJSBAZmx1c2hyaWdodC4KKyUKK1xlbnZkZWZcZmx1c2hyaWdodHslCisgIFxsZXRcbm9uYXJyb3dpbmcgPSB0JQorICBcbm9uZmlsbHN0YXJ0CisgIFxhZHZhbmNlXGxlZnRza2lwIGJ5IDBwdCBwbHVzIDFmaWxsCisgIFxnb2JibGUKK30KK1xsZXRcRWZsdXNocmlnaHQgPSBcYWZ0ZXJlbnZicmVhaworCisKKyUgQHF1b3RhdGlvbiBkb2VzIG5vcm1hbCBsaW5lYnJlYWtpbmcgKGhlbmNlIHdlIGNhbid0IHVzZSBcbm9uZmlsbHN0YXJ0KQorJSBhbmQgbmFycm93cyB0aGUgbWFyZ2lucy4gIFdlIGtlZXAgXHBhcnNraXAgbm9uemVybyBpbiBnZW5lcmFsLCBzaW5jZQorJSB3ZSdyZSBkb2luZyBub3JtYWwgZmlsbGluZy4gIFNvLCB3aGVuIHVzaW5nIFxhYm92ZWVudmJyZWFrIGFuZAorJSBcYWZ0ZXJlbnZicmVhaywgdGVtcG9yYXJpbHkgbWFrZSBccGFyc2tpcCAwLgorJQorXGVudmRlZlxxdW90YXRpb257JQorICB7XHBhcnNraXA9MHB0IFxhYm92ZWVudmJyZWFrfSUgYmVjYXVzZSBcYWJvdmVlbnZicmVhayBpbnNlcnRzIFxwYXJza2lwCisgIFxwYXJpbmRlbnQ9MHB0CisgICUKKyAgJSBAY2FydG91Y2hlIGRlZmluZXMgXG5vbmFycm93aW5nIHRvIGluaGliaXQgbmFycm93aW5nIGF0IG5leHQgbGV2ZWwgZG93bi4KKyAgXGlmeFxub25hcnJvd2luZ1xyZWxheAorICAgIFxhZHZhbmNlXGxlZnRza2lwIGJ5IFxsaXNwbmFycm93aW5nCisgICAgXGFkdmFuY2VccmlnaHRza2lwIGJ5IFxsaXNwbmFycm93aW5nCisgICAgXGV4ZGVudGFtb3VudCA9IFxsaXNwbmFycm93aW5nCisgIFxlbHNlCisgICAgXGxldFxub25hcnJvd2luZyA9IFxyZWxheAorICBcZmkKKyAgXHBhcnNlYXJnXHF1b3RhdGlvbmxhYmVsCit9CisKKyUgV2UgaGF2ZSByZXRhaW5lZCBhIG5vbnplcm8gcGFyc2tpcCBmb3IgdGhlIGVudmlyb25tZW50LCBzaW5jZSB3ZSdyZQorJSBkb2luZyBub3JtYWwgZmlsbGluZy4KKyUKK1xkZWZcRXF1b3RhdGlvbnslCisgIFxwYXIKKyAgXGlmeFxxdW90YXRpb25hdXRob3JcdW5kZWZpbmVkXGVsc2UKKyAgICAlIGluZGVudCBhIGJpdC4KKyAgICBcbGVmdGxpbmV7XGtlcm4gMlxsZWZ0c2tpcCBcc2wgLS0tXHF1b3RhdGlvbmF1dGhvcn0lCisgIFxmaQorICB7XHBhcnNraXA9MHB0IFxhZnRlcmVudmJyZWFrfSUKK30KKworJSBJZiB3ZSdyZSBnaXZlbiBhbiBhcmd1bWVudCwgdHlwZXNldCBpdCBpbiBib2xkIHdpdGggYSBjb2xvbiBhZnRlci4KK1xkZWZccXVvdGF0aW9ubGFiZWwjMXslCisgIFxkZWZcdGVtcHsjMX0lCisgIFxpZnhcdGVtcFxlbXB0eSBcZWxzZQorICAgIHtcYmYgIzE6IH0lCisgIFxmaQorfQorCisKKyUgTGFUZVgtbGlrZSBAdmVyYmF0aW0uLi5AZW5kIHZlcmJhdGltIGFuZCBAdmVyYns8Y2hhcj4uLi48Y2hhcj59CislIElmIHdlIHdhbnQgdG8gYWxsb3cgYW55IDxjaGFyPiBhcyBkZWxpbWl0ZXIsCislIHdlIG5lZWQgdGhlIGN1cmx5IGJyYWNlcyBzbyB0aGF0IG1ha2VpbmZvIHNlZXMgdGhlIEB2ZXJiIGNvbW1hbmQsIGVnOgorJSBgQHZlcmJ4Li4ueCcgd291bGQgbG9vayBsaWtlIHRoZSAnQHZlcmJ4JyBjb21tYW5kLiAgLS1qYW5uZWtlQGdudS5vcmcKKyUKKyUgW0tudXRoXTogRG9uYWxkIEVydmluIEtudXRoLCAxOTk2LiAgVGhlIFRlWGJvb2suCislCislIFtLbnV0aF0gcC4zNDQ7IG9ubHkgd2UgbmVlZCB0byBkbyB0aGUgb3RoZXIgY2hhcmFjdGVycyBUZXhpbmZvIHNldHMKKyUgYWN0aXZlIHRvby4gIE90aGVyd2lzZSwgdGhleSBnZXQgbG9zdCBhcyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9uIGEKKyUgdmVyYmF0aW0gbGluZS4KK1xkZWZcZG9zcGVjaWFsc3slCisgIFxkb1wgXGRvXFxcZG9ce1xkb1x9XGRvXCRcZG9cJiUKKyAgXGRvXCNcZG9cXlxkb1xeXktcZG9cX1xkb1xeXkFcZG9cJVxkb1x+JQorICBcZG9cPFxkb1w+XGRvXHxcZG9cQFxkbytcZG9cIiUKK30KKyUKKyUgW0tudXRoXSBwLiAzODAKK1xkZWZcdW5jYXRjb2Rlc3BlY2lhbHN7JQorICBcZGVmXGRvIyMxe1xjYXRjb2RlYCMjMT1cb3RoZXJ9XGRvc3BlY2lhbHN9CislCislIFtLbnV0aF0gcHAuIDM4MCwzODEsMzkxCislIERpc2FibGUgU3BhbmlzaCBsaWdhdHVyZXMgP2AgYW5kICFgIG9mIFx0dCBmb250CitcYmVnaW5ncm91cAorICBcY2F0Y29kZWBcYD1cYWN0aXZlXGdkZWZge1xyZWxheFxscX0KK1xlbmRncm91cAorJQorJSBTZXR1cCBmb3IgdGhlIEB2ZXJiIGNvbW1hbmQuCislCislIEVpZ2h0IHNwYWNlcyBmb3IgYSB0YWIKK1xiZWdpbmdyb3VwCisgIFxjYXRjb2RlYFxeXkk9XGFjdGl2ZQorICBcZ2RlZlx0YWJlaWdodHNwYWNlc3tcY2F0Y29kZWBcXl5JPVxhY3RpdmVcZGVmXl5Je1wgXCBcIFwgXCBcIFwgXCB9fQorXGVuZGdyb3VwCislCitcZGVmXHNldHVwdmVyYnslCisgIFx0dCAgJSBlYXNpZXN0IChhbmQgY29udmVudGlvbmFsbHkgdXNlZCkgZm9udCBmb3IgdmVyYmF0aW0KKyAgXGRlZlxwYXJ7XGxlYXZldm1vZGVcZW5kZ3JhZn0lCisgIFxjYXRjb2RlYFxgPVxhY3RpdmUKKyAgXHRhYmVpZ2h0c3BhY2VzCisgICUgUmVzcGVjdCBsaW5lIGJyZWFrcywKKyAgJSBwcmludCBzcGVjaWFsIHN5bWJvbHMgYXMgdGhlbXNlbHZlcywgYW5kCisgICUgbWFrZSBlYWNoIHNwYWNlIGNvdW50CisgICUgbXVzdCBkbyBpbiB0aGlzIG9yZGVyOgorICBcb2JleWxpbmVzIFx1bmNhdGNvZGVzcGVjaWFscyBcc2Vwc3BhY2VzCit9CisKKyUgU2V0dXAgZm9yIHRoZSBAdmVyYmF0aW0gZW52aXJvbm1lbnQKKyUKKyUgUmVhbCB0YWIgZXhwYW5zaW9uCitcbmV3ZGltZW5cdGFidyBcc2V0Ym94MD1caGJveHtcdHRcc3BhY2V9IFx0YWJ3PThcd2QwICUgdGFiIGFtb3VudAorJQorXGRlZlxzdGFydHRhYmJveHtcc2V0Ym94MD1caGJveFxiZ3JvdXB9CisKKyUgQWxsb3cgYW4gb3B0aW9uIHRvIG5vdCByZXBsYWNlIHF1b3RlcyB3aXRoIGEgcmVndWxhciBkaXJlY3RlZCByaWdodAorJSBxdW90ZS9hcG9zdHJvcGhlIChjaGFyIDB4MjcpLCBidXQgaW5zdGVhZCB1c2UgdGhlIHVuZGlyZWN0ZWQgcXVvdGUKKyUgZnJvbSBjbXR0IChjaGFyIDB4MGQpLiAgVGhlIHVuZGlyZWN0ZWQgcXVvdGUgaXMgdWdseSwgc28gZG9uJ3QgbWFrZSBpdAorJSB0aGUgZGVmYXVsdCwgYnV0IGl0IHdvcmtzIGZvciBwYXN0aW5nIHdpdGggbW9yZSBwZGYgdmlld2VycyAoYXQgbGVhc3QKKyUgZXZpbmNlKSwgdGhlIGxpbHlwb25kIGRldmVsb3BlcnMgcmVwb3J0LiAgeHBkZiBkb2VzIHdvcmsgd2l0aCB0aGUKKyUgcmVndWxhciAweDI3LiAgCislIAorXGRlZlxjb2RlcXVvdGVyaWdodHslCisgIFxleHBhbmRhZnRlclxpZnhcY3NuYW1lIFNFVGNvZGVxdW90ZXVuZGlyZWN0ZWRcZW5kY3NuYW1lXHJlbGF4CisgICAgJyUKKyAgXGVsc2UKKyAgICBcY2hhcicxNQorICBcZmkKK30KKyUKKyUgYW5kIGEgc2ltaWxhciBvcHRpb24gZm9yIHRoZSBsZWZ0IHF1b3RlIGNoYXIgdnMuIGEgZ3JhdmUgYWNjZW50LgorJSBNb2Rlcm4gZm9udHMgZGlzcGxheSBBU0NJSSAweDYwIGFzIGEgZ3JhdmUgYWNjZW50LCBzbyBzb21lIHBlb3BsZSBsaWtlCislIHRoZSBjb2RlIGVudmlyb25tZW50cyB0byBkbyBsaWtld2lzZS4KKyUgCitcZGVmXGNvZGVxdW90ZWxlZnR7JQorICBcZXhwYW5kYWZ0ZXJcaWZ4XGNzbmFtZSBTRVRjb2RlcXVvdGViYWNrdGlja1xlbmRjc25hbWVccmVsYXgKKyAgICBgJQorICBcZWxzZQorICAgIFxjaGFyJzIyCisgIFxmaQorfQorJQorXGJlZ2luZ3JvdXAKKyAgXGNhdGNvZGVgXF5eST1cYWN0aXZlCisgIFxnZGVmXHRhYmV4cGFuZHslCisgICAgXGNhdGNvZGVgXF5eST1cYWN0aXZlCisgICAgXGRlZl5eSXtcbGVhdmV2bW9kZVxlZ3JvdXAKKyAgICAgIFxkaW1lbjA9XHdkMCAlIHRoZSB3aWR0aCBzbyBmYXIsIG9yIHNpbmNlIHRoZSBwcmV2aW91cyB0YWIKKyAgICAgIFxkaXZpZGVcZGltZW4wIGJ5XHRhYncKKyAgICAgIFxtdWx0aXBseVxkaW1lbjAgYnlcdGFidyAlIGNvbXB1dGUgcHJldmlvdXMgbXVsdGlwbGUgb2YgXHRhYncKKyAgICAgIFxhZHZhbmNlXGRpbWVuMCBieVx0YWJ3ICAlIGFkdmFuY2UgdG8gbmV4dCBtdWx0aXBsZSBvZiBcdGFidworICAgICAgXHdkMD1cZGltZW4wIFxib3gwIFxzdGFydHRhYmJveAorICAgIH0lCisgIH0KKyAgXGNhdGNvZGVgXCc9XGFjdGl2ZQorICBcZ2RlZlxycXVvdGVleHBhbmR7XGNhdGNvZGVccnF1b3RlQ2hhcj1cYWN0aXZlIFxkZWYne1xjb2RlcXVvdGVyaWdodH19JQorICAlCisgIFxjYXRjb2RlYFxgPVxhY3RpdmUKKyAgXGdkZWZcbHF1b3RlZXhwYW5ke1xjYXRjb2RlXGxxdW90ZUNoYXI9XGFjdGl2ZSBcZGVmYHtcY29kZXF1b3RlbGVmdH19JQorICAlCisgIFxnZGVmXHF1b3RlZXhwYW5ke1xycXVvdGVleHBhbmQgXGxxdW90ZWV4cGFuZH0lCitcZW5kZ3JvdXAKKworJSBzdGFydCB0aGUgdmVyYmF0aW0gZW52aXJvbm1lbnQuCitcZGVmXHNldHVwdmVyYmF0aW17JQorICBcbGV0XG5vbmFycm93aW5nID0gdCUKKyAgXG5vbmZpbGxzdGFydAorICAlIEVhc2llc3QgKGFuZCBjb252ZW50aW9uYWxseSB1c2VkKSBmb250IGZvciB2ZXJiYXRpbQorICBcdHQKKyAgXGRlZlxwYXJ7XGxlYXZldm1vZGVcZWdyb3VwXGJveDBcZW5kZ3JhZn0lCisgIFxjYXRjb2RlYFxgPVxhY3RpdmUKKyAgXHRhYmV4cGFuZAorICBccXVvdGVleHBhbmQKKyAgJSBSZXNwZWN0IGxpbmUgYnJlYWtzLAorICAlIHByaW50IHNwZWNpYWwgc3ltYm9scyBhcyB0aGVtc2VsdmVzLCBhbmQKKyAgJSBtYWtlIGVhY2ggc3BhY2UgY291bnQKKyAgJSBtdXN0IGRvIGluIHRoaXMgb3JkZXI6CisgIFxvYmV5bGluZXMgXHVuY2F0Y29kZXNwZWNpYWxzIFxzZXBzcGFjZXMKKyAgXGV2ZXJ5cGFye1xzdGFydHRhYmJveH0lCit9CisKKyUgRG8gdGhlIEB2ZXJiIG1hZ2ljOiB2ZXJiYXRpbSB0ZXh0IGlzIHF1b3RlZCBieSB1bmlxdWUKKyUgZGVsaW1pdGVyIGNoYXJhY3RlcnMuICBCZWZvcmUgZmlyc3QgZGVsaW1pdGVyIGV4cGVjdCBhCislIHJpZ2h0IGJyYWNlLCBhZnRlciBsYXN0IGRlbGltaXRlciBleHBlY3QgY2xvc2luZyBicmFjZToKKyUKKyUgICAgXGRlZlxkb3ZlcmIneyc8Y2hhcj4jMTxjaGFyPid9J3sjMX0KKyUKKyUgW0tudXRoXSBwLiAzODI7IG9ubHkgZWF0IG91dGVyIHt9CitcYmVnaW5ncm91cAorICBcY2F0Y29kZWBbPTFcY2F0Y29kZWBdPTJcY2F0Y29kZWBcez1cb3RoZXJcY2F0Y29kZWBcfT1cb3RoZXIKKyAgXGdkZWZcZG92ZXJieyMxW1xkZWZcbmV4dCMjMSMxfVsjIzFcZW5kZ3JvdXBdXG5leHRdCitcZW5kZ3JvdXAKKyUKK1xkZWZcdmVyYntcYmVnaW5ncm91cFxzZXR1cHZlcmJcZG92ZXJifQorJQorJQorJSBEbyB0aGUgQHZlcmJhdGltIG1hZ2ljOiBkZWZpbmUgdGhlIG1hY3JvIFxkb3ZlcmJhdGltIHNvIHRoYXQKKyUgdGhlIChmaXJzdCkgYXJndW1lbnQgZW5kcyB3aGVuICdAZW5kIHZlcmJhdGltJyBpcyByZWFjaGVkLCBpZToKKyUKKyUgICAgIFxkZWZcZG92ZXJiYXRpbSMxQGVuZCB2ZXJiYXRpbXsjMX0KKyUKKyUgRm9yIFRleGluZm8gaXQncyBhIGxvdCBlYXNpZXIgdGhhbiBmb3IgTGFUZVgsCislIGJlY2F1c2UgdGV4aW5mbydzIFx2ZXJiYXRpbSBkb2Vzbid0IHN0b3AgYXQgJ1xlbmR7dmVyYmF0aW19JzoKKyUgd2UgbmVlZCBub3QgcmVkZWZpbmUgJ1wnLCAneycgYW5kICd9Jy4KKyUKKyUgSW5zcGlyZWQgYnkgTGFUZVgncyB2ZXJiYXRpbSBjb21tYW5kIHNldCBbbGF0ZXgubHR4XQorJQorXGJlZ2luZ3JvdXAKKyAgXGNhdGNvZGVgXCA9XGFjdGl2ZQorICBcb2JleWxpbmVzICUKKyAgJSBpZ25vcmUgZXZlcnl0aGluZyB1cCB0byB0aGUgZmlyc3QgXl5NLCB0aGF0J3MgdGhlIG5ld2xpbmUgYXQgdGhlIGVuZAorICAlIG9mIHRoZSBAdmVyYmF0aW0gaW5wdXQgbGluZSBpdHNlbGYuICBPdGhlcndpc2Ugd2UgZ2V0IGFuIGV4dHJhIGJsYW5rCisgICUgbGluZSBpbiB0aGUgb3V0cHV0LgorICBceGRlZlxkb3ZlcmJhdGltIzFeXk0jMkBlbmQgdmVyYmF0aW17IzJcbm9leHBhbmRcZW5kXGdvYmJsZSB2ZXJiYXRpbX0lCisgICUgV2UgcmVhbGx5IHdhbnQgey4uLlxlbmQgdmVyYmF0aW19IGluIHRoZSBib2R5IG9mIHRoZSBtYWNybywgYnV0CisgICUgd2l0aG91dCB0aGUgYWN0aXZlIHNwYWNlOyB0aHVzIHdlIGhhdmUgdG8gdXNlIFx4ZGVmIGFuZCBcZ29iYmxlLgorXGVuZGdyb3VwCislCitcZW52ZGVmXHZlcmJhdGlteyUKKyAgICBcc2V0dXB2ZXJiYXRpbVxkb3ZlcmJhdGltCit9CitcbGV0XEV2ZXJiYXRpbSA9IFxhZnRlcmVudmJyZWFrCisKKworJSBAdmVyYmF0aW1pbmNsdWRlIEZJTEUgLSBpbnNlcnQgdGV4dCBvZiBmaWxlIGluIHZlcmJhdGltIGVudmlyb25tZW50LgorJQorXGRlZlx2ZXJiYXRpbWluY2x1ZGV7XHBhcnNlYXJndXNpbmdcZmlsZW5hbWVjYXRjb2Rlc1xkb3ZlcmJhdGltaW5jbHVkZX0KKyUKK1xkZWZcZG92ZXJiYXRpbWluY2x1ZGUjMXslCisgIHslCisgICAgXG1ha2V2YWx1ZWV4cGFuZGFibGUKKyAgICBcc2V0dXB2ZXJiYXRpbQorICAgIFxpbnB1dCAjMQorICAgIFxhZnRlcmVudmJyZWFrCisgIH0lCit9CisKKyUgQGNvcHlpbmcgLi4uIEBlbmQgY29weWluZy4KKyUgU2F2ZSB0aGUgdGV4dCBhd2F5IGZvciBAaW5zZXJ0Y29weWluZyBsYXRlci4KKyUKKyUgV2Ugc2F2ZSB0aGUgdW5pbnRlcnByZXRlZCB0b2tlbnMsIHJhdGhlciB0aGFuIGNyZWF0aW5nIGEgYm94LgorJSBTYXZpbmcgdGhlIHRleHQgaW4gYSBib3ggd291bGQgYmUgbXVjaCBlYXNpZXIsIGJ1dCB0aGVuIGFsbCB0aGUKKyUgdHlwZXNldHRpbmcgY29tbWFuZHMgKEBzbWFsbGJvb2ssIGZvbnQgY2hhbmdlcywgZXRjLikgaGF2ZSB0byBiZSBkb25lCislIGJlZm9yZWhhbmQgLS0gYW5kIGEpIHdlIHdhbnQgQGNvcHlpbmcgdG8gYmUgZG9uZSBmaXJzdCBpbiB0aGUgc291cmNlCislIGZpbGU7IGIpIGxldHRpbmcgdXNlcnMgZGVmaW5lIHRoZSBmcm9udG1hdHRlciBpbiBhcyBmbGV4aWJsZSBvcmRlciBhcworJSBwb3NzaWJsZSBpcyB2ZXJ5IGRlc2lyYWJsZS4KKyUKK1xkZWZcY29weWluZ3tcY2hlY2tlbnZ7fVxiZWdpbmdyb3VwXHNjYW5hcmdjdHh0XGRvY29weWluZ30KK1xkZWZcZG9jb3B5aW5nIzFAZW5kIGNvcHlpbmd7XGVuZGdyb3VwXGRlZlxjb3B5aW5ndGV4dHsjMX19CislCitcZGVmXGluc2VydGNvcHlpbmd7JQorICBcYmVnaW5ncm91cAorICAgIFxwYXJpbmRlbnQgPSAwcHQgICUgcGFyYWdyYXBoIGluZGVudGF0aW9uIGxvb2tzIHdyb25nIG9uIHRpdGxlIHBhZ2UKKyAgICBcc2NhbmV4cFxjb3B5aW5ndGV4dAorICBcZW5kZ3JvdXAKK30KKworCitcbWVzc2FnZXtkZWZ1bnMsfQorJSBAZGVmdW4gZXRjLgorCitcbmV3c2tpcFxkZWZib2R5aW5kZW50IFxkZWZib2R5aW5kZW50PS40aW4KK1xuZXdza2lwXGRlZmFyZ3NpbmRlbnQgXGRlZmFyZ3NpbmRlbnQ9NTBwdAorXG5ld3NraXBcZGVmbGFzdGFyZ21hcmdpbiBcZGVmbGFzdGFyZ21hcmdpbj0xOHB0CitcbmV3Y291bnRcZGVmdW5wZW5hbHR5CisKKyUgU3RhcnQgdGhlIHByb2Nlc3Npbmcgb2YgQGRlZmZuOgorXGRlZlxzdGFydGRlZnVueyUKKyAgXGlmbnVtXGxhc3RwZW5hbHR5PDEwMDAwCisgICAgXG1lZGJyZWFrCisgICAgXGRlZnVucGVuYWx0eT0xMDAwMyAlIFdpbGwga2VlcCB0aGlzIEBkZWZmbiB0b2dldGhlciB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgJSBmb2xsb3dpbmcgQGRlZiBjb21tYW5kLCBzZWUgYmVsb3cuCisgIFxlbHNlCisgICAgJSBJZiB0aGVyZSBhcmUgdHdvIEBkZWYgY29tbWFuZHMgaW4gYSByb3csIHdlJ2xsIGhhdmUgYSBcbm9icmVhaywKKyAgICAlIHdoaWNoIGlzIHRoZXJlIHRvIGtlZXAgdGhlIGZ1bmN0aW9uIGRlc2NyaXB0aW9uIHRvZ2V0aGVyIHdpdGggaXRzCisgICAgJSBoZWFkZXIuICBCdXQgaWYgdGhlcmUncyBub3RoaW5nIGJ1dCBoZWFkZXJzLCB3ZSBuZWVkIHRvIGFsbG93IGEKKyAgICAlIGJyZWFrIHNvbWV3aGVyZS4gIENoZWNrIHNwZWNpZmljYWxseSBmb3IgcGVuYWx0eSAxMDAwMiwgaW5zZXJ0ZWQKKyAgICAlIGJ5IFxwcmludGRlZnVubGluZSwgaW5zdGVhZCBvZiAxMDAwMCwgc2luY2UgdGhlIHNlY3Rpb25pbmcKKyAgICAlIGNvbW1hbmRzIGFsc28gaW5zZXJ0IGEgbm9icmVhayBwZW5hbHR5LCBhbmQgd2UgZG9uJ3Qgd2FudCB0byBhbGxvdworICAgICUgYSBicmVhayBiZXR3ZWVuIGEgc2VjdGlvbiBoZWFkaW5nIGFuZCBhIGRlZnVuLgorICAgICUKKyAgICAlIEFzIGEgbWlub3IgcmVmaW5lbWVudCwgd2UgYXZvaWQgImNsdWIiIGhlYWRlcnMgYnkgc2lnbmFsbGluZworICAgICUgd2l0aCBwZW5hbHR5IG9mIDEwMDAzIGFmdGVyIHRoZSB2ZXJ5IGZpcnN0IEBkZWZmbiBpbiB0aGUKKyAgICAlIHNlcXVlbmNlIChzZWUgYWJvdmUpLCBhbmQgcGVuYWx0eSBvZiAxMDAwMiBhZnRlciBhbnkgZm9sbG93aW5nCisgICAgJSBAZGVmIGNvbW1hbmQuCisgICAgXGlmbnVtXGxhc3RwZW5hbHR5PTEwMDAyIFxwZW5hbHR5MjAwMCBcZWxzZSBcZGVmdW5wZW5hbHR5PTEwMDAyIFxmaQorICAgICUKKyAgICAlIFNpbWlsYXJseSwgYWZ0ZXIgYSBzZWN0aW9uIGhlYWRpbmcsIGRvIG5vdCBhbGxvdyBhIGJyZWFrLgorICAgICUgQnV0IGRvIGluc2VydCB0aGUgZ2x1ZS4KKyAgICBcbWVkc2tpcCAgJSBwcmVjZWRlZCBieSBkaXNjYXJkYWJsZSBwZW5hbHR5LCBzbyBub3QgYSBicmVha3BvaW50CisgIFxmaQorICAlCisgIFxwYXJpbmRlbnQ9MGluCisgIFxhZHZhbmNlXGxlZnRza2lwIGJ5IFxkZWZib2R5aW5kZW50CisgIFxleGRlbnRhbW91bnQ9XGRlZmJvZHlpbmRlbnQKK30KKworXGRlZlxkb2RlZnVueCMxeyUKKyAgJSBGaXJzdCwgY2hlY2sgd2hldGhlciB3ZSBhcmUgaW4gdGhlIHJpZ2h0IGVudmlyb25tZW50OgorICBcY2hlY2tlbnYjMSUKKyAgJQorICAlIEFzIGFib3ZlLCBhbGxvdyBsaW5lIGJyZWFrIGlmIHdlIGhhdmUgbXVsdGlwbGUgeCBoZWFkZXJzIGluIGEgcm93LgorICAlIEl0J3Mgbm90IGEgZ3JlYXQgcGxhY2UsIHRob3VnaC4KKyAgXGlmbnVtXGxhc3RwZW5hbHR5PTEwMDAyIFxwZW5hbHR5MzAwMCBcZWxzZSBcZGVmdW5wZW5hbHR5PTEwMDAyIFxmaQorICAlCisgICUgQW5kIG5vdywgaXQncyB0aW1lIHRvIHJldXNlIHRoZSBib2R5IG9mIHRoZSBvcmlnaW5hbCBkZWZ1bjoKKyAgXGV4cGFuZGFmdGVyXGdvYmJsZWRlZnVuIzElCit9CitcZGVmXGdvYmJsZWRlZnVuIzFcc3RhcnRkZWZ1bnt9CisKKyUgXHByaW50ZGVmdW5saW5lIFxkZWZmbmhlYWRlcnt0ZXh0fQorJQorXGRlZlxwcmludGRlZnVubGluZSMxIzJ7JQorICBcYmVnaW5ncm91cAorICAgICUgY2FsbCBcZGVmZm5oZWFkZXI6CisgICAgIzEjMiBcZW5kaGVhZGVyCisgICAgJSBjb21tb24gZW5kaW5nOgorICAgIFxpbnRlcmxpbmVwZW5hbHR5ID0gMTAwMDAKKyAgICBcYWR2YW5jZVxyaWdodHNraXAgYnkgMHB0IHBsdXMgMWZpbAorICAgIFxlbmRncmFmCisgICAgXG5vYnJlYWtcdnNraXAgLVxwYXJza2lwCisgICAgXHBlbmFsdHlcZGVmdW5wZW5hbHR5ICAlIHNpZ25hbCB0byBcc3RhcnRkZWZ1biBhbmQgXGRvZGVmdW54CisgICAgJSBTb21lIG9mIHRoZSBAZGVmdW4tdHlwZSB0YWdzIGRvIG5vdCBlbmFibGUgbWFnaWMgcGFyZW50aGVzZXMsCisgICAgJSByZW5kZXJpbmcgdGhlIGZvbGxvd2luZyBjaGVjayByZWR1bmRhbnQuICBCdXQgd2UgZG9uJ3Qgb3B0aW1pemUuCisgICAgXGNoZWNrcGFyZW5jb3VudHMKKyAgXGVuZGdyb3VwCit9CisKK1xkZWZcRWRlZnVue1xlbmRncmFmXG1lZGJyZWFrfQorCislIFxtYWtlZGVmdW57ZGVmZm59IGNyZWF0ZXMgXGRlZmZuLCBcZGVmZm54IGFuZCBcRWRlZmZuOworJSB0aGUgb25seSB0aGluZyByZW1haW5uaWcgaXMgdG8gZGVmaW5lIFxkZWZmbmhlYWRlci4KKyUKK1xkZWZcbWFrZWRlZnVuIzF7JQorICBcZXhwYW5kYWZ0ZXJcbGV0XGNzbmFtZSBFIzFcZW5kY3NuYW1lID0gXEVkZWZ1bgorICBcZWRlZlx0ZW1we1xub2V4cGFuZFxkb21ha2VkZWZ1bgorICAgIFxtYWtlY3NuYW1leyMxfVxtYWtlY3NuYW1leyMxeH1cbWFrZWNzbmFtZXsjMWhlYWRlcn19JQorICBcdGVtcAorfQorCislIFxkb21ha2VkZWZ1biBcZGVmZm4gXGRlZmZueCBcZGVmZm5oZWFkZXIKKyUKKyUgRGVmaW5lIFxkZWZmbiBhbmQgXGRlZmZueCwgd2l0aG91dCBwYXJhbWV0ZXJzLgorJSBcZGVmZm5oZWFkZXIgaGFzIHRvIGJlIGRlZmluZWQgZXhwbGljaXRseS4KKyUKK1xkZWZcZG9tYWtlZGVmdW4jMSMyIzN7JQorICBcZW52ZGVmIzF7JQorICAgIFxzdGFydGRlZnVuCisgICAgXHBhcnNlYXJndXNpbmdcYWN0aXZlcGFyZW5ze1xwcmludGRlZnVubGluZSMzfSUKKyAgfSUKKyAgXGRlZiMye1xkb2RlZnVueCMxfSUKKyAgXGRlZiMzJQorfQorCislJSUgVW50eXBlZCBmdW5jdGlvbnM6CisKKyUgQGRlZmZuIGNhdGVnb3J5IG5hbWUgYXJncworXG1ha2VkZWZ1bntkZWZmbn17XGRlZmZuZ2VuZXJhbHt9fQorCislIEBkZWZmbiBjYXRlZ29yeSBjbGFzcyBuYW1lIGFyZ3MKK1xtYWtlZGVmdW57ZGVmb3B9IzEge1xkZWZvcG9ueyMxXCBccHV0d29yZG9ufX0KKworJSBcZGVmb3BvbiB7Y2F0ZWdvcnkgb259Y2xhc3MgbmFtZSBhcmdzCitcZGVmXGRlZm9wb24jMSMyIHtcZGVmZm5nZW5lcmFse1xwdXR3b3Jkb25cIFxjb2RleyMyfX17IzFcIFxjb2RleyMyfX0gfQorCislIFxkZWZmbmdlbmVyYWwge3N1YmluZH1jYXRlZ29yeSBuYW1lIGFyZ3MKKyUKK1xkZWZcZGVmZm5nZW5lcmFsIzEjMiAjMyAjNFxlbmRoZWFkZXJ7JQorICAlIFJlbWVtYmVyIHRoYXQgXGRvc3ViaW5ke2ZufXtmb299e30gaXMgZXF1aXZhbGVudCB0byBcZG9pbmR7Zm59e2Zvb30uCisgIFxkb3N1YmluZHtmbn17XGNvZGV7IzN9fXsjMX0lCisgIFxkZWZuYW1leyMyfXt9eyMzfVxtYWdpY2FtcFxkZWZ1bmFyZ3N7IzRcdW5za2lwfSUKK30KKworJSUlIFR5cGVkIGZ1bmN0aW9uczoKKworJSBAZGVmdHlwZWZuIGNhdGVnb3J5IHR5cGUgbmFtZSBhcmdzCitcbWFrZWRlZnVue2RlZnR5cGVmbn17XGRlZnR5cGVmbmdlbmVyYWx7fX0KKworJSBAZGVmdHlwZW9wIGNhdGVnb3J5IGNsYXNzIHR5cGUgbmFtZSBhcmdzCitcbWFrZWRlZnVue2RlZnR5cGVvcH0jMSB7XGRlZnR5cGVvcG9ueyMxXCBccHV0d29yZG9ufX0KKworJSBcZGVmdHlwZW9wb24ge2NhdGVnb3J5IG9ufWNsYXNzIHR5cGUgbmFtZSBhcmdzCitcZGVmXGRlZnR5cGVvcG9uIzEjMiB7XGRlZnR5cGVmbmdlbmVyYWx7XHB1dHdvcmRvblwgXGNvZGV7IzJ9fXsjMVwgXGNvZGV7IzJ9fSB9CisKKyUgXGRlZnR5cGVmbmdlbmVyYWwge3N1YmluZH1jYXRlZ29yeSB0eXBlIG5hbWUgYXJncworJQorXGRlZlxkZWZ0eXBlZm5nZW5lcmFsIzEjMiAjMyAjNCAjNVxlbmRoZWFkZXJ7JQorICBcZG9zdWJpbmR7Zm59e1xjb2RleyM0fX17IzF9JQorICBcZGVmbmFtZXsjMn17IzN9eyM0fVxkZWZ1bmFyZ3N7IzVcdW5za2lwfSUKK30KKworJSUlIFR5cGVkIHZhcmlhYmxlczoKKworJSBAZGVmdHlwZXZyIGNhdGVnb3J5IHR5cGUgdmFyIGFyZ3MKK1xtYWtlZGVmdW57ZGVmdHlwZXZyfXtcZGVmdHlwZWN2Z2VuZXJhbHt9fQorCislIEBkZWZ0eXBlY3YgY2F0ZWdvcnkgY2xhc3MgdHlwZSB2YXIgYXJncworXG1ha2VkZWZ1bntkZWZ0eXBlY3Z9IzEge1xkZWZ0eXBlY3ZvZnsjMVwgXHB1dHdvcmRvZn19CisKKyUgXGRlZnR5cGVjdm9mIHtjYXRlZ29yeSBvZn1jbGFzcyB0eXBlIHZhciBhcmdzCitcZGVmXGRlZnR5cGVjdm9mIzEjMiB7XGRlZnR5cGVjdmdlbmVyYWx7XHB1dHdvcmRvZlwgXGNvZGV7IzJ9fXsjMVwgXGNvZGV7IzJ9fSB9CisKKyUgXGRlZnR5cGVjdmdlbmVyYWwge3N1YmluZH1jYXRlZ29yeSB0eXBlIHZhciBhcmdzCislCitcZGVmXGRlZnR5cGVjdmdlbmVyYWwjMSMyICMzICM0ICM1XGVuZGhlYWRlcnslCisgIFxkb3N1YmluZHt2cn17XGNvZGV7IzR9fXsjMX0lCisgIFxkZWZuYW1leyMyfXsjM317IzR9XGRlZnVuYXJnc3sjNVx1bnNraXB9JQorfQorCislJSUgVW50eXBlZCB2YXJpYWJsZXM6CisKKyUgQGRlZnZyIGNhdGVnb3J5IHZhciBhcmdzCitcbWFrZWRlZnVue2RlZnZyfSMxIHtcZGVmdHlwZXZyaGVhZGVyeyMxfSB7fSB9CisKKyUgQGRlZmN2IGNhdGVnb3J5IGNsYXNzIHZhciBhcmdzCitcbWFrZWRlZnVue2RlZmN2fSMxIHtcZGVmY3ZvZnsjMVwgXHB1dHdvcmRvZn19CisKKyUgXGRlZmN2b2Yge2NhdGVnb3J5IG9mfWNsYXNzIHZhciBhcmdzCitcZGVmXGRlZmN2b2YjMSMyIHtcZGVmdHlwZWN2b2Z7IzF9IzIge30gfQorCislJSUgVHlwZToKKyUgQGRlZnRwIGNhdGVnb3J5IG5hbWUgYXJncworXG1ha2VkZWZ1bntkZWZ0cH0jMSAjMiAjM1xlbmRoZWFkZXJ7JQorICBcZG9pbmR7dHB9e1xjb2RleyMyfX0lCisgIFxkZWZuYW1leyMxfXt9eyMyfVxkZWZ1bmFyZ3N7IzNcdW5za2lwfSUKK30KKworJSBSZW1haW5pbmcgQGRlZnVuLWxpa2Ugc2hvcnRjdXRzOgorXG1ha2VkZWZ1bntkZWZ1bn17XGRlZmZuaGVhZGVye1xwdXR3b3JkRGVmZnVuY30gfQorXG1ha2VkZWZ1bntkZWZtYWN9e1xkZWZmbmhlYWRlcntccHV0d29yZERlZm1hY30gfQorXG1ha2VkZWZ1bntkZWZzcGVjfXtcZGVmZm5oZWFkZXJ7XHB1dHdvcmREZWZzcGVjfSB9CitcbWFrZWRlZnVue2RlZnR5cGVmdW59e1xkZWZ0eXBlZm5oZWFkZXJ7XHB1dHdvcmREZWZmdW5jfSB9CitcbWFrZWRlZnVue2RlZnZhcn17XGRlZnZyaGVhZGVye1xwdXR3b3JkRGVmdmFyfSB9CitcbWFrZWRlZnVue2RlZm9wdH17XGRlZnZyaGVhZGVye1xwdXR3b3JkRGVmb3B0fSB9CitcbWFrZWRlZnVue2RlZnR5cGV2YXJ9e1xkZWZ0eXBldnJoZWFkZXJ7XHB1dHdvcmREZWZ2YXJ9IH0KK1xtYWtlZGVmdW57ZGVmbWV0aG9kfXtcZGVmb3BvblxwdXR3b3JkTWV0aG9kb259CitcbWFrZWRlZnVue2RlZnR5cGVtZXRob2R9e1xkZWZ0eXBlb3BvblxwdXR3b3JkTWV0aG9kb259CitcbWFrZWRlZnVue2RlZml2YXJ9e1xkZWZjdm9mXHB1dHdvcmRJbnN0YW5jZVZhcmlhYmxlb2Z9CitcbWFrZWRlZnVue2RlZnR5cGVpdmFyfXtcZGVmdHlwZWN2b2ZccHV0d29yZEluc3RhbmNlVmFyaWFibGVvZn0KKworJSBcZGVmbmFtZSwgd2hpY2ggZm9ybWF0cyB0aGUgbmFtZSBvZiB0aGUgQGRlZiAobm90IHRoZSBhcmdzKS4KKyUgIzEgaXMgdGhlIGNhdGVnb3J5LCBzdWNoIGFzICJGdW5jdGlvbiIuCislICMyIGlzIHRoZSByZXR1cm4gdHlwZSwgaWYgYW55LgorJSAjMyBpcyB0aGUgZnVuY3Rpb24gbmFtZS4KKyUKKyUgV2UgYXJlIGZvbGxvd2VkIGJ5IChidXQgbm90IHBhc3NlZCkgdGhlIGFyZ3VtZW50cywgaWYgYW55LgorJQorXGRlZlxkZWZuYW1lIzEjMiMzeyUKKyAgJSBHZXQgdGhlIHZhbHVlcyBvZiBcbGVmdHNraXAgYW5kIFxyaWdodHNraXAgYXMgdGhleSB3ZXJlIG91dHNpZGUgdGhlIEBkZWYuLi4KKyAgXGFkdmFuY2VcbGVmdHNraXAgYnkgLVxkZWZib2R5aW5kZW50CisgICUKKyAgJSBIb3cgd2UnbGwgZm9ybWF0IHRoZSB0eXBlIG5hbWUuICBQdXR0aW5nIGl0IGluIGJyYWNrZXRzIGhlbHBzCisgICUgZGlzdGluZ3Vpc2ggaXQgZnJvbSB0aGUgYm9keSB0ZXh0IHRoYXQgbWF5IGVuZCB1cCBvbiB0aGUgbmV4dCBsaW5lCisgICUganVzdCBiZWxvdyBpdC4KKyAgXGRlZlx0ZW1weyMxfSUKKyAgXHNldGJveDA9XGhib3h7XGtlcm5cZGVmbGFzdGFyZ21hcmdpbiBcaWZ4XHRlbXBcZW1wdHlcZWxzZSBbXHJtXHRlbXBdXGZpfQorICAlCisgICUgRmlndXJlIG91dCBsaW5lIHNpemVzIGZvciB0aGUgcGFyYWdyYXBoIHNoYXBlLgorICAlIFRoZSBmaXJzdCBsaW5lIG5lZWRzIHNwYWNlIGZvciBcYm94MDsgYnV0IGlmIFxyaWdodHNraXAgaXMgbm9uemVybywKKyAgJSB3ZSBuZWVkIG9ubHkgc3BhY2UgZm9yIHRoZSBwYXJ0IG9mIFxib3gwIHdoaWNoIGV4Y2VlZHMgaXQ6CisgIFxkaW1lbjA9XGhzaXplICBcYWR2YW5jZVxkaW1lbjAgYnkgLVx3ZDAgIFxhZHZhbmNlXGRpbWVuMCBieSBccmlnaHRza2lwCisgICUgVGhlIGNvbnRpbnVhdGlvbnM6CisgIFxkaW1lbjI9XGhzaXplICBcYWR2YW5jZVxkaW1lbjIgYnkgLVxkZWZhcmdzaW5kZW50CisgICUgKHBsYWluLnRleCBzYXlzIHRoYXQgXGRpbWVuMSBzaG91bGQgYmUgdXNlZCBvbmx5IGFzIGdsb2JhbC4pCisgIFxwYXJzaGFwZSAyIDBpbiBcZGltZW4wIFxkZWZhcmdzaW5kZW50IFxkaW1lbjIKKyAgJQorICAlIFB1dCB0aGUgdHlwZSBuYW1lIHRvIHRoZSByaWdodCBtYXJnaW4uCisgIFxub2luZGVudAorICBcaGJveCB0byAwcHR7JQorICAgIFxoZmlsXGJveDAgXGtlcm4tXGhzaXplCisgICAgJSBcaHNpemUgaGFzIHRvIGJlIHNob3J0ZW5lZCB0aGlzIHdheToKKyAgICBca2VyblxsZWZ0c2tpcAorICAgICUgSW50ZW50aW9uYWxseSBkbyBub3QgcmVzcGVjdCBccmlnaHRza2lwLCBzaW5jZSB3ZSBuZWVkIHRoZSBzcGFjZS4KKyAgfSUKKyAgJQorICAlIEFsbG93IGFsbCBsaW5lcyB0byBiZSB1bmRlcmZ1bGwgd2l0aG91dCBjb21wbGFpbnQ6CisgIFx0b2xlcmFuY2U9MTAwMDAgXGhiYWRuZXNzPTEwMDAwCisgIFxleGRlbnRhbW91bnQ9XGRlZmJvZHlpbmRlbnQKKyAgeyUKKyAgICAlIGRlZnVuIGZvbnRzLiBXZSB1c2UgdHlwZXdyaXRlciBieSBkZWZhdWx0ICh1c2VkIHRvIGJlIGJvbGQpIGJlY2F1c2U6CisgICAgJSAuIHdlJ3JlIHByaW50aW5nIGlkZW50aWZpZXJzLCB0aGV5IHNob3VsZCBiZSBpbiB0dCBpbiBwcmluY2lwbGUuCisgICAgJSAuIGluIGxhbmd1YWdlcyB3aXRoIG1hbnkgYWNjZW50cywgc3VjaCBhcyBDemVjaCBvciBGcmVuY2gsIGl0J3MKKyAgICAlICAgY29tbW9uIHRvIGxlYXZlIGFjY2VudHMgb2ZmIGlkZW50aWZpZXJzLiAgVGhlIHJlc3VsdCBsb29rcyBvayBpbgorICAgICUgICB0dCwgYnV0IGV4Y2VlZGluZ2x5IHN0cmFuZ2UgaW4gcm0uCisgICAgJSAuIHdlIGRvbid0IHdhbnQgLS0gYW5kIC0tLSB0byBiZSB0cmVhdGVkIGFzIGxpZ2F0dXJlcy4KKyAgICAlIC4gdGhpcyBzdGlsbCBkb2VzIG5vdCBmaXggdGhlID9gIGFuZCAhYCBsaWdhdHVyZXMsIGJ1dCBzbyBmYXIgbm8KKyAgICAlICAgb25lIGhhcyBtYWRlIGlkZW50aWZpZXJzIHVzaW5nIHRoZW0gOikuCisgICAgXGRmIFx0dAorICAgIFxkZWZcdGVtcHsjMn0lIHJldHVybiB2YWx1ZSB0eXBlCisgICAgXGlmeFx0ZW1wXGVtcHR5XGVsc2UgXHRjbG9zZXtcdGVtcH0gXGZpCisgICAgIzMlIG91dHB1dCBmdW5jdGlvbiBuYW1lCisgIH0lCisgIHtccm1cZW5za2lwfSUgaHNraXAgMC41IGVtIG9mIFx0ZW5ybQorICAlCisgIFxib2xkYnJheAorICAlIGFyZ3VtZW50cyB3aWxsIGJlIG91dHB1dCBuZXh0LCBpZiBhbnkuCit9CisKKyUgUHJpbnQgYXJndW1lbnRzIGluIHNsYW50ZWQgcm9tYW4gKG5vdCB0dHNsKSwgaW5jb25zaXN0ZW50bHkgd2l0aCB1c2luZworJSB0dCBmb3IgdGhlIG5hbWUuICBUaGlzIGlzIGJlY2F1c2UgbGl0ZXJhbCB0ZXh0IGlzIHNvbWV0aW1lcyBuZWVkZWQgaW4KKyUgdGhlIGFyZ3VtZW50IGxpc3QgKGdyb2ZmIG1hbnVhbCksIGFuZCB0dHNsIGFuZCB0dCBhcmUgbm90IHZlcnkKKyUgZGlzdGluZ3Vpc2hhYmxlLiAgUHJldmVudCBoeXBoZW5hdGlvbiBhdCBgLScgY2hhcnMuCislCitcZGVmXGRlZnVuYXJncyMxeyUKKyAgJSB1c2Ugc2wgYnkgZGVmYXVsdCAobm90IHR0c2wpLAorICAlIHR0IGZvciB0aGUgbmFtZXMuCisgIFxkZiBcc2wgXGh5cGhlbmNoYXJcZm9udD0wCisgICUKKyAgJSBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgYW4gYXJndW1lbnQgaGFzIHR3byBkYXNoZXMgKGZvciBpbnN0YW5jZSksIHdlCisgICUgd2FudCBhIHdheSB0byBnZXQgdHRzbC4gIExldCdzIHRyeSBAdmFyIGZvciB0aGF0LgorICBcbGV0XHZhcj1cdHRzbGFudGVkCisgICMxJQorICBcc2xcaHlwaGVuY2hhclxmb250PTQ1Cit9CisKKyUgV2Ugd2FudCAoKSZbXSB0byBwcmludCBzcGVjaWFsbHkgb24gdGhlIGRlZnVuIGxpbmUuCislCitcZGVmXGFjdGl2ZXBhcmVuc3slCisgIFxjYXRjb2RlYFwoPVxhY3RpdmUgXGNhdGNvZGVgXCk9XGFjdGl2ZQorICBcY2F0Y29kZWBcWz1cYWN0aXZlIFxjYXRjb2RlYFxdPVxhY3RpdmUKKyAgXGNhdGNvZGVgXCY9XGFjdGl2ZQorfQorCislIE1ha2UgY29udHJvbCBzZXF1ZW5jZXMgd2hpY2ggYWN0IGxpa2Ugbm9ybWFsIHBhcmVudGhlc2lzIGNoYXJzLgorXGxldFxscGFyZW4gPSAoIFxsZXRccnBhcmVuID0gKQorCislIEJlIHN1cmUgdGhhdCB3ZSBhbHdheXMgaGF2ZSBhIGRlZmluaXRpb24gZm9yIGAoJywgZXRjLiAgRm9yIGV4YW1wbGUsCislIGlmIHRoZSBmbiBuYW1lIGhhcyBwYXJlbnMgaW4gaXQsIFxib2xkYnJheCB3aWxsIG5vdCBiZSBpbiBlZmZlY3QgeWV0LAorJSBzbyBUZVggd291bGQgb3RoZXJ3aXNlIGNvbXBsYWluIGFib3V0IHVuZGVmaW5lZCBjb250cm9sIHNlcXVlbmNlLgoreworICBcYWN0aXZlcGFyZW5zCisgIFxnbG9iYWxcbGV0KD1cbHBhcmVuIFxnbG9iYWxcbGV0KT1ccnBhcmVuCisgIFxnbG9iYWxcbGV0Wz1cbGJyYWNrIFxnbG9iYWxcbGV0XT1ccmJyYWNrCisgIFxnbG9iYWxcbGV0JiA9IFwmCisKKyAgXGdkZWZcYm9sZGJyYXh7XGxldCg9XG9wbnJcbGV0KT1cY2xuclxsZXRbPVxsYnJiXGxldF09XHJicmJ9CisgIFxnZGVmXG1hZ2ljYW1we1xsZXQmPVxhbXBybX0KK30KKworXG5ld2NvdW50XHBhcmVuY291bnQKKworJSBJZiB3ZSBlbmNvdW50ZXIgJmZvbywgdGhlbiB0dXJuIG9uICgpLWhhY2tpbmcgYWZ0ZXJ3YXJkcworXG5ld2lmXGlmYW1wc2VlbgorXGRlZlxhbXBybSMxIHtcYW1wc2VlbnRydWV7XGJmXCYjMSB9fQorCitcZGVmXHBhcmVuZm9udHslCisgIFxpZmFtcHNlZW4KKyAgICAlIEF0IHRoZSBmaXJzdCBsZXZlbCwgcHJpbnQgcGFyZW5zIGluIHJvbWFuLAorICAgICUgb3RoZXJ3aXNlIHVzZSB0aGUgZGVmYXVsdCBmb250LgorICAgIFxpZm51bSBccGFyZW5jb3VudD0xIFxybSBcZmkKKyAgXGVsc2UKKyAgICAlIFRoZSBcc2YgcGFyZW5zIChpbiBcYm9sZGJyYXgpIGFjdHVhbGx5IGFyZSBhIGxpdHRsZSBib2xkZXIgdGhhbgorICAgICUgdGhlIGNvbnRhaW5lZCB0ZXh0LiAgVGhpcyBpcyBlc3BlY2lhbGx5IG5lZWRlZCBmb3IgWyBhbmQgXSAuCisgICAgXHNmCisgIFxmaQorfQorXGRlZlxpbmZpcnN0bGV2ZWwjMXslCisgIFxpZmFtcHNlZW4KKyAgICBcaWZudW1ccGFyZW5jb3VudD0xCisgICAgICAjMSUKKyAgICBcZmkKKyAgXGZpCit9CitcZGVmXGJmYWZ0ZXJ3b3JkIzEgeyMxIFxiZn0KKworXGRlZlxvcG5yeyUKKyAgXGdsb2JhbFxhZHZhbmNlXHBhcmVuY291bnQgYnkgMQorICB7XHBhcmVuZm9udCh9JQorICBcaW5maXJzdGxldmVsIFxiZmFmdGVyd29yZAorfQorXGRlZlxjbG5yeyUKKyAge1xwYXJlbmZvbnQpfSUKKyAgXGluZmlyc3RsZXZlbCBcc2wKKyAgXGdsb2JhbFxhZHZhbmNlXHBhcmVuY291bnQgYnkgLTEKK30KKworXG5ld2NvdW50XGJyYWNrY291bnQKK1xkZWZcbGJyYnslCisgIFxnbG9iYWxcYWR2YW5jZVxicmFja2NvdW50IGJ5IDEKKyAge1xiZlt9JQorfQorXGRlZlxyYnJieyUKKyAge1xiZl19JQorICBcZ2xvYmFsXGFkdmFuY2VcYnJhY2tjb3VudCBieSAtMQorfQorCitcZGVmXGNoZWNrcGFyZW5jb3VudHN7JQorICBcaWZudW1ccGFyZW5jb3VudD0wIFxlbHNlIFxiYWRwYXJlbmNvdW50IFxmaQorICBcaWZudW1cYnJhY2tjb3VudD0wIFxlbHNlIFxiYWRicmFja2NvdW50IFxmaQorfQorXGRlZlxiYWRwYXJlbmNvdW50eyUKKyAgXGVycm1lc3NhZ2V7VW5iYWxhbmNlZCBwYXJlbnRoZXNlcyBpbiBAZGVmfSUKKyAgXGdsb2JhbFxwYXJlbmNvdW50PTAKK30KK1xkZWZcYmFkYnJhY2tjb3VudHslCisgIFxlcnJtZXNzYWdle1VuYmFsYW5jZWQgc3F1YXJlIGJyYWNlcyBpbiBAZGVmfSUKKyAgXGdsb2JhbFxicmFja2NvdW50PTAKK30KKworCitcbWVzc2FnZXttYWNyb3MsfQorJSBAbWFjcm8uCisKKyUgVG8gZG8gdGhpcyByaWdodCB3ZSBuZWVkIGEgZmVhdHVyZSBvZiBlLVRlWCwgXHNjYW50b2tlbnMsCislIHdoaWNoIHdlIGFycmFuZ2UgdG8gZW11bGF0ZSB3aXRoIGEgdGVtcG9yYXJ5IGZpbGUgaW4gb3JkaW5hcnkgVGVYLgorXGlmeFxlVGVYdmVyc2lvblx1bmRlZmluZWQKKyAgXG5ld3dyaXRlXG1hY3NjcmliYmxlCisgIFxkZWZcc2NhbnRva2VucyMxeyUKKyAgICBcdG9rczA9eyMxfSUKKyAgICBcaW1tZWRpYXRlXG9wZW5vdXRcbWFjc2NyaWJibGU9XGpvYm5hbWUudG1wCisgICAgXGltbWVkaWF0ZVx3cml0ZVxtYWNzY3JpYmJsZXtcdGhlXHRva3MwfSUKKyAgICBcaW1tZWRpYXRlXGNsb3Nlb3V0XG1hY3NjcmliYmxlCisgICAgXGlucHV0IFxqb2JuYW1lLnRtcAorICB9CitcZmkKKworXGRlZlxzY2FubWFjcm8jMXslCisgIFxiZWdpbmdyb3VwCisgICAgXG5ld2xpbmVjaGFyYFxeXk0KKyAgICBcbGV0XHhlYXRzcGFjZXNcZWF0c3BhY2VzCisgICAgJSBVbmRvIGNhdGNvZGUgY2hhbmdlcyBvZiBcc3RhcnRjb250ZW50cyBhbmQgXGRvcHJpbnRpbmRleAorICAgICUgV2hlbiBjYWxsZWQgZnJvbSBAaW5zZXJ0Y29weWluZyBvciAoc2hvcnQpY2FwdGlvbiwgd2UgbmVlZCBhY3RpdmUKKyAgICAlIGJhY2tzbGFzaCB0byBnZXQgaXQgcHJpbnRlZCBjb3JyZWN0bHkuICBQcmV2aW91c2x5LCB3ZSBoYWQKKyAgICAlIFxjYXRjb2RlYFxcPVxvdGhlciBpbnN0ZWFkLiAgV2UnbGwgc2VlIHdoZXRoZXIgYSBwcm9ibGVtIGFwcGVhcnMKKyAgICAlIHdpdGggbWFjcm8gZXhwYW5zaW9uLgkJCQktLWthc2FsLCAxOWF1ZzA0CisgICAgXGNhdGNvZGVgXEA9MCBcY2F0Y29kZWBcXD1cYWN0aXZlIFxlc2NhcGVjaGFyPWBcQAorICAgICUgLi4uIGFuZCBcZXhhbXBsZQorICAgIFxzcGFjZWlzc3BhY2UKKyAgICAlCisgICAgJSBBcHBlbmQgXGVuZGlucHV0IHRvIG1ha2Ugc3VyZSB0aGF0IFRlWCBkb2VzIG5vdCBzZWUgdGhlIGVuZGluZyBuZXdsaW5lLgorICAgICUgSSd2ZSB2ZXJpZmllZCB0aGF0IGl0IGlzIG5lY2Vzc2FyeSBib3RoIGZvciBlLVRlWCBhbmQgZm9yIG9yZGluYXJ5IFRlWAorICAgICUJCQkJCQkJLS1rYXNhbCwgMjlub3YwMworICAgIFxzY2FudG9rZW5zeyMxXGVuZGlucHV0fSUKKyAgXGVuZGdyb3VwCit9CisKK1xkZWZcc2NhbmV4cCMxeyUKKyAgXGVkZWZcdGVtcHtcbm9leHBhbmRcc2Nhbm1hY3JveyMxfX0lCisgIFx0ZW1wCit9CisKK1xuZXdjb3VudFxwYXJhbW5vICAgJSBDb3VudCBvZiBwYXJhbWV0ZXJzCitcbmV3dG9rc1xtYWNuYW1lICAgICUgTWFjcm8gbmFtZQorXG5ld2lmXGlmcmVjdXJzaXZlICAlIElzIGl0IHJlY3Vyc2l2ZT8KKworJSBMaXN0IG9mIGFsbCBkZWZpbmVkIG1hY3JvcyBpbiB0aGUgZm9ybQorJSAgICBcZGVmaW5lZHVtbXl3b3JkXG1hY3JvMVxkZWZpbmVkdW1teXdvcmRcbWFjcm8yLi4uCislIEN1cnJlbnRseSBpcyBhbHNvIGNvbnRhaW5zIGFsbCBAYWxpYXNlczsgdGhlIGxpc3QgY2FuIGJlIHNwbGl0CislIGlmIHRoZXJlIGlzIGEgbmVlZC4KK1xkZWZcbWFjcm9saXN0e30KKworJSBBZGQgdGhlIG1hY3JvIHRvIFxtYWNyb2xpc3QKK1xkZWZcYWRkdG9tYWNyb2xpc3QjMXtcZXhwYW5kYWZ0ZXIgXGFkZHRvbWFjcm9saXN0eHh4IFxjc25hbWUjMVxlbmRjc25hbWV9CitcZGVmXGFkZHRvbWFjcm9saXN0eHh4IzF7JQorICAgICBcdG9rczAgPSBcZXhwYW5kYWZ0ZXJ7XG1hY3JvbGlzdFxkZWZpbmVkdW1teXdvcmQjMX0lCisgICAgIFx4ZGVmXG1hY3JvbGlzdHtcdGhlXHRva3MwfSUKK30KKworJSBVdGlsaXR5IHJvdXRpbmVzLgorJSBUaGlzIGRvZXMgXGxldCAjMSA9ICMyLCB3aXRoIFxjc25hbWVzOyB0aGF0IGlzLAorJSAgIFxsZXQgXGNzbmFtZSMxXGVuZGNzbmFtZSA9IFxjc25hbWUjMlxlbmRjc25hbWUKKyUgKGV4Y2VwdCBvZiBjb3Vyc2Ugd2UgaGF2ZSB0byBwbGF5IGV4cGFuc2lvbiBnYW1lcykuCislIAorXGRlZlxjc2xldCMxIzJ7JQorICBcZXhwYW5kYWZ0ZXJcbGV0CisgIFxjc25hbWUjMVxleHBhbmRhZnRlclxlbmRjc25hbWUKKyAgXGNzbmFtZSMyXGVuZGNzbmFtZQorfQorCislIFRyaW0gbGVhZGluZyBhbmQgdHJhaWxpbmcgc3BhY2VzIG9mZiBhIHN0cmluZy4KKyUgQ29uY2VwdHMgZnJvbSBhcm8tYmVuZCBwcm9ibGVtIDE1IChzZWUgQ1RBTikuCit7XGNhdGNvZGVgXEA9MTEKK1xnZGVmXGVhdHNwYWNlcyAjMXtcZXhwYW5kYWZ0ZXJcdHJpbUBcZXhwYW5kYWZ0ZXJ7IzEgfX0KK1xnZGVmXHRyaW1AICMxe1x0cmltQEAgQCMxIEAgIzEgQCBAQH0KK1xnZGVmXHRyaW1AQCAjMUAgIzJAICMzQEB7XHRyaW1AQEBcZW1wdHkgIzIgQH0KK1xkZWZcdW5icmFjZSMxeyMxfQorXHVuYnJhY2V7XGdkZWZcdHJpbUBAQCAjMSB9ICMyQHsjMX0KK30KKworJSBUcmltIGEgc2luZ2xlIHRyYWlsaW5nIF5eTSBvZmYgYSBzdHJpbmcuCit7XGNhdGNvZGVgXF5eTT1cb3RoZXIgXGNhdGNvZGVgXFE9MyUKK1xnZGVmXGVhdGNyICMxe1xlYXRjcmEgIzFRXl5NUX0lCitcZ2RlZlxlYXRjcmEjMV5eTVF7XGVhdGNyYiMxUX0lCitcZ2RlZlxlYXRjcmIjMVEjMlF7IzF9JQorfQorCislIE1hY3JvIGJvZGllcyBhcmUgYWJzb3JiZWQgYXMgYW4gYXJndW1lbnQgaW4gYSBjb250ZXh0IHdoZXJlCislIGFsbCBjaGFyYWN0ZXJzIGFyZSBjYXRjb2RlIDEwLCAxMSBvciAxMiwgZXhjZXB0IFwgd2hpY2ggaXMgYWN0aXZlCislIChhcyBpbiBub3JtYWwgdGV4aW5mbykuIEl0IGlzIG5lY2Vzc2FyeSB0byBjaGFuZ2UgdGhlIGRlZmluaXRpb24gb2YgXC4KKworJSBJdCdzIG5lY2Vzc2FyeSB0byBoYXZlIGhhcmQgQ1JzIHdoZW4gdGhlIG1hY3JvIGlzIGV4ZWN1dGVkLiBUaGlzIGlzCislIGRvbmUgYnkgIG1ha2luZyBeXk0gKFxlbmRsaW5lY2hhcikgY2F0Y29kZSAxMiB3aGVuIHJlYWRpbmcgdGhlIG1hY3JvCislIGJvZHksIGFuZCB0aGVuIG1ha2luZyBpdCB0aGUgXG5ld2xpbmVjaGFyIGluIFxzY2FubWFjcm8uCisKK1xkZWZcc2NhbmN0eHR7JQorICBcY2F0Y29kZWBcIj1cb3RoZXIKKyAgXGNhdGNvZGVgXCs9XG90aGVyCisgIFxjYXRjb2RlYFw8PVxvdGhlcgorICBcY2F0Y29kZWBcPj1cb3RoZXIKKyAgXGNhdGNvZGVgXEA9XG90aGVyCisgIFxjYXRjb2RlYFxePVxvdGhlcgorICBcY2F0Y29kZWBcXz1cb3RoZXIKKyAgXGNhdGNvZGVgXHw9XG90aGVyCisgIFxjYXRjb2RlYFx+PVxvdGhlcgorfQorCitcZGVmXHNjYW5hcmdjdHh0eyUKKyAgXHNjYW5jdHh0CisgIFxjYXRjb2RlYFxcPVxvdGhlcgorICBcY2F0Y29kZWBcXl5NPVxvdGhlcgorfQorCitcZGVmXG1hY3JvYm9keWN0eHR7JQorICBcc2NhbmN0eHQKKyAgXGNhdGNvZGVgXHs9XG90aGVyCisgIFxjYXRjb2RlYFx9PVxvdGhlcgorICBcY2F0Y29kZWBcXl5NPVxvdGhlcgorICBcdXNlbWJvZHliYWNrc2xhc2gKK30KKworXGRlZlxtYWNyb2FyZ2N0eHR7JQorICBcc2NhbmN0eHQKKyAgXGNhdGNvZGVgXFw9XG90aGVyCit9CisKKyUgXG1ib2R5YmFja3NsYXNoIGlzIHRoZSBkZWZpbml0aW9uIG9mIFwgaW4gQG1hY3JvIGJvZGllcy4KKyUgSXQgbWFwcyBcZm9vXCA9PiBcY3NuYW1lIG1hY2FyZy5mb29cZW5kY3NuYW1lID0+ICNOCislIHdoZXJlIE4gaXMgdGhlIG1hY3JvIHBhcmFtZXRlciBudW1iZXIuCislIFdlIGRlZmluZSBcY3NuYW1lIG1hY2FyZy5cZW5kY3NuYW1lIHRvIGJlIFxyZWFsYmFja3NsYXNoLCBzbworJSBcXCBpbiBtYWNybyByZXBsYWNlbWVudCB0ZXh0IGdldHMgeW91IGEgYmFja3NsYXNoLgorCit7XGNhdGNvZGVgQD0wIEBjYXRjb2RlYEBcPUBhY3RpdmUKKyBAZ2RlZkB1c2VtYm9keWJhY2tzbGFzaHtAbGV0XD1AbWJvZHliYWNrc2xhc2h9CisgQGdkZWZAbWJvZHliYWNrc2xhc2gjMVx7QGNzbmFtZSBtYWNhcmcuIzFAZW5kY3NuYW1lfQorfQorXGV4cGFuZGFmdGVyXGRlZlxjc25hbWUgbWFjYXJnLlxlbmRjc25hbWV7XHJlYWxiYWNrc2xhc2h9CisKK1xkZWZcbWFjcm97XHJlY3Vyc2l2ZWZhbHNlXHBhcnNlYXJnXG1hY3JveHh4fQorXGRlZlxybWFjcm97XHJlY3Vyc2l2ZXRydWVccGFyc2VhcmdcbWFjcm94eHh9CisKK1xkZWZcbWFjcm94eHgjMXslCisgIFxnZXRhcmdzeyMxfSUgICAgICAgICAgIG5vdyBcbWFjbmFtZSBpcyB0aGUgbWFjbmFtZSBhbmQgXGFyZ2wgdGhlIGFyZ2xpc3QKKyAgXGlmeFxhcmdsXGVtcHR5ICAgICAgICUgbm8gYXJndW1lbnRzCisgICAgIFxwYXJhbW5vPTAlCisgIFxlbHNlCisgICAgIFxleHBhbmRhZnRlclxwYXJzZW1hcmdkZWYgXGFyZ2w7JQorICBcZmkKKyAgXGlmMVxjc25hbWUgaXNtYWNyby5cdGhlXG1hY25hbWVcZW5kY3NuYW1lCisgICAgIFxtZXNzYWdle1dhcm5pbmc6IHJlZGVmaW5pbmcgXHRoZVxtYWNuYW1lfSUKKyAgXGVsc2UKKyAgICAgXGV4cGFuZGFmdGVyXGlmeFxjc25hbWUgXHRoZVxtYWNuYW1lXGVuZGNzbmFtZSBccmVsYXgKKyAgICAgXGVsc2UgXGVycm1lc3NhZ2V7TWFjcm8gbmFtZSBcdGhlXG1hY25hbWVcc3BhY2UgYWxyZWFkeSBkZWZpbmVkfVxmaQorICAgICBcZ2xvYmFsXGNzbGV0e21hY3NhdmUuXHRoZVxtYWNuYW1lfXtcdGhlXG1hY25hbWV9JQorICAgICBcZ2xvYmFsXGV4cGFuZGFmdGVyXGxldFxjc25hbWUgaXNtYWNyby5cdGhlXG1hY25hbWVcZW5kY3NuYW1lPTElCisgICAgIFxhZGR0b21hY3JvbGlzdHtcdGhlXG1hY25hbWV9JQorICBcZmkKKyAgXGJlZ2luZ3JvdXAgXG1hY3JvYm9keWN0eHQKKyAgXGlmcmVjdXJzaXZlIFxleHBhbmRhZnRlclxwYXJzZXJtYWNib2R5CisgIFxlbHNlIFxleHBhbmRhZnRlclxwYXJzZW1hY2JvZHkKKyAgXGZpfQorCitccGFyc2VhcmdkZWZcdW5tYWNyb3slCisgIFxpZjFcY3NuYW1lIGlzbWFjcm8uIzFcZW5kY3NuYW1lCisgICAgXGdsb2JhbFxjc2xldHsjMX17bWFjc2F2ZS4jMX0lCisgICAgXGdsb2JhbFxleHBhbmRhZnRlclxsZXQgXGNzbmFtZSBpc21hY3JvLiMxXGVuZGNzbmFtZT0wJQorICAgICUgUmVtb3ZlIHRoZSBtYWNybyBuYW1lIGZyb20gXG1hY3JvbGlzdDoKKyAgICBcYmVnaW5ncm91cAorICAgICAgXGV4cGFuZGFmdGVyXGxldFxjc25hbWUjMVxlbmRjc25hbWUgXHJlbGF4CisgICAgICBcbGV0XGRlZmluZWR1bW15d29yZFx1bm1hY3JvZG8KKyAgICAgIFx4ZGVmXG1hY3JvbGlzdHtcbWFjcm9saXN0fSUKKyAgICBcZW5kZ3JvdXAKKyAgXGVsc2UKKyAgICBcZXJybWVzc2FnZXtNYWNybyAjMSBub3QgZGVmaW5lZH0lCisgIFxmaQorfQorCislIENhbGxlZCBieSBcZG8gZnJvbSBcZG91bm1hY3JvIG9uIGVhY2ggbWFjcm8uICBUaGUgaWRlYSBpcyB0byBvbWl0IGFueQorJSBtYWNybyBkZWZpbml0aW9ucyB0aGF0IGhhdmUgYmVlbiBjaGFuZ2VkIHRvIFxyZWxheC4KKyUKK1xkZWZcdW5tYWNyb2RvIzF7JQorICBcaWZ4ICMxXHJlbGF4CisgICAgJSByZW1vdmUgdGhpcworICBcZWxzZQorICAgIFxub2V4cGFuZFxkZWZpbmVkdW1teXdvcmQgXG5vZXhwYW5kIzElCisgIFxmaQorfQorCislIFRoaXMgbWFrZXMgdXNlIG9mIHRoZSBvYnNjdXJlIGZlYXR1cmUgdGhhdCBpZiB0aGUgbGFzdCB0b2tlbiBvZiBhCislIDxwYXJhbWV0ZXIgbGlzdD4gaXMgIywgdGhlbiB0aGUgcHJlY2VkaW5nIGFyZ3VtZW50IGlzIGRlbGltaXRlZCBieQorJSBhbiBvcGVuaW5nIGJyYWNlLCBhbmQgdGhhdCBvcGVuaW5nIGJyYWNlIGlzIG5vdCBjb25zdW1lZC4KK1xkZWZcZ2V0YXJncyMxe1xnZXRhcmdzeHh4IzF7fX0KK1xkZWZcZ2V0YXJnc3h4eCMxI3tcZ2V0bWFjbmFtZSAjMSBccmVsYXhcZ2V0bWFjYXJnc30KK1xkZWZcZ2V0bWFjbmFtZSAjMSAjMlxyZWxheHtcbWFjbmFtZT17IzF9fQorXGRlZlxnZXRtYWNhcmdzIzF7XGRlZlxhcmdseyMxfX0KKworJSBQYXJzZSB0aGUgb3B0aW9uYWwge3BhcmFtc30gbGlzdC4gIFNldCB1cCBccGFyYW1ubyBhbmQgXHBhcmFtbGlzdAorJSBzbyBcZGVmbWFjcm8ga25vd3Mgd2hhdCB0byBkby4gIERlZmluZSBcbWFjYXJnLmJsYWggZm9yIGVhY2ggYmxhaAorJSBpbiB0aGUgcGFyYW1zIGxpc3QsIHRvIGJlICMjTiB3aGVyZSBOIGlzIHRoZSBwb3NpdGlvbiBpbiB0aGF0IGxpc3QuCislIFRoYXQgZ2V0cyB1c2VkIGJ5IFxtYm9keWJhY2tzbGFzaCAoYWJvdmUpLgorCislIFdlIG5lZWQgdG8gZ2V0IGBtYWNybyBwYXJhbWV0ZXIgY2hhciAjJyBpbnRvIHNldmVyYWwgZGVmaW5pdGlvbnMuCislIFRoZSB0ZWNobmlxdWUgdXNlZCBpcyBzdG9sZW4gZnJvbSBMYVRlWDogIGxldCBcaGFzaCBiZSBzb21ldGhpbmcKKyUgdW5leHBhbmRhYmxlLCBpbnNlcnQgdGhhdCB3aGVyZXZlciB5b3UgbmVlZCBhICMsIGFuZCB0aGVuIHJlZGVmaW5lCislIGl0IHRvICMganVzdCBiZWZvcmUgdXNpbmcgdGhlIHRva2VuIGxpc3QgcHJvZHVjZWQuCislCislIFRoZSBzYW1lIHRlY2huaXF1ZSBpcyB1c2VkIHRvIHByb3RlY3QgXGVhdHNwYWNlcyB0aWxsIGp1c3QgYmVmb3JlCislIHRoZSBtYWNybyBpcyB1c2VkLgorCitcZGVmXHBhcnNlbWFyZ2RlZiMxO3tccGFyYW1ubz0wXGRlZlxwYXJhbWxpc3R7fSUKKyAgICAgICAgXGxldFxoYXNoXHJlbGF4XGxldFx4ZWF0c3BhY2VzXHJlbGF4XHBhcnNlbWFyZ2RlZnh4eCMxLDssfQorXGRlZlxwYXJzZW1hcmdkZWZ4eHgjMSx7JQorICBcaWYjMTtcbGV0XG5leHQ9XHJlbGF4CisgIFxlbHNlIFxsZXRcbmV4dD1ccGFyc2VtYXJnZGVmeHh4CisgICAgXGFkdmFuY2VccGFyYW1ubyBieSAxJQorICAgIFxleHBhbmRhZnRlclxlZGVmXGNzbmFtZSBtYWNhcmcuXGVhdHNwYWNlc3sjMX1cZW5kY3NuYW1lCisgICAgICAgIHtceGVhdHNwYWNlc3tcaGFzaFx0aGVccGFyYW1ub319JQorICAgIFxlZGVmXHBhcmFtbGlzdHtccGFyYW1saXN0XGhhc2hcdGhlXHBhcmFtbm8sfSUKKyAgXGZpXG5leHR9CisKKyUgVGhlc2UgdHdvIGNvbW1hbmRzIHJlYWQgcmVjdXJzaXZlIGFuZCBub25yZWN1cnNpdmUgbWFjcm8gYm9kaWVzLgorJSAoVGhleSdyZSBkaWZmZXJlbnQgc2luY2UgcmVjIGFuZCBub25yZWMgbWFjcm9zIGVuZCBkaWZmZXJlbnRseS4pCisKK1xsb25nXGRlZlxwYXJzZW1hY2JvZHkjMUBlbmQgbWFjcm8lCit7XHhkZWZcdGVtcHtcZWF0Y3J7IzF9fVxlbmRncm91cFxkZWZtYWNyb30lCitcbG9uZ1xkZWZccGFyc2VybWFjYm9keSMxQGVuZCBybWFjcm8lCit7XHhkZWZcdGVtcHtcZWF0Y3J7IzF9fVxlbmRncm91cFxkZWZtYWNyb30lCisKKyUgVGhpcyBkZWZpbmVzIHRoZSBtYWNybyBpdHNlbGYuIFRoZXJlIGFyZSBzaXggY2FzZXM6IHJlY3Vyc2l2ZSBhbmQKKyUgbm9ucmVjdXJzaXZlIG1hY3JvcyBvZiB6ZXJvLCBvbmUsIGFuZCBtYW55IGFyZ3VtZW50cy4KKyUgTXVjaCBtYWdpYyB3aXRoIFxleHBhbmRhZnRlciBoZXJlLgorJSBceGRlZiBpcyB1c2VkIHNvIHRoYXQgbWFjcm8gZGVmaW5pdGlvbnMgd2lsbCBzdXJ2aXZlIHRoZSBmaWxlCislIHRoZXkncmUgZGVmaW5lZCBpbjsgQGluY2x1ZGUgcmVhZHMgdGhlIGZpbGUgaW5zaWRlIGEgZ3JvdXAuCitcZGVmXGRlZm1hY3JveyUKKyAgXGxldFxoYXNoPSMjJSBjb252ZXJ0IHBsYWNlaG9sZGVycyB0byBtYWNybyBwYXJhbWV0ZXIgY2hhcnMKKyAgXGlmcmVjdXJzaXZlCisgICAgXGlmY2FzZVxwYXJhbW5vCisgICAgJSAwCisgICAgICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWVcdGhlXG1hY25hbWVcZW5kY3NuYW1leyUKKyAgICAgICAgXG5vZXhwYW5kXHNjYW5tYWNyb3tcdGVtcH19JQorICAgIFxvciAlIDEKKyAgICAgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZVx0aGVcbWFjbmFtZVxlbmRjc25hbWV7JQorICAgICAgICAgXGJncm91cFxub2V4cGFuZFxtYWNyb2FyZ2N0eHQKKyAgICAgICAgIFxub2V4cGFuZFxicmFjZW9ybGluZQorICAgICAgICAgXGV4cGFuZGFmdGVyXG5vZXhwYW5kXGNzbmFtZVx0aGVcbWFjbmFtZSB4eHhcZW5kY3NuYW1lfSUKKyAgICAgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZVx0aGVcbWFjbmFtZSB4eHhcZW5kY3NuYW1lIyMxeyUKKyAgICAgICAgIFxlZ3JvdXBcbm9leHBhbmRcc2Nhbm1hY3Jve1x0ZW1wfX0lCisgICAgXGVsc2UgJSBtYW55CisgICAgICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWVcdGhlXG1hY25hbWVcZW5kY3NuYW1leyUKKyAgICAgICAgIFxiZ3JvdXBcbm9leHBhbmRcbWFjcm9hcmdjdHh0CisgICAgICAgICBcbm9leHBhbmRcY3NuYW1lXHRoZVxtYWNuYW1lIHh4XGVuZGNzbmFtZX0lCisgICAgICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWVcdGhlXG1hY25hbWUgeHhcZW5kY3NuYW1lIyMxeyUKKyAgICAgICAgICBcZXhwYW5kYWZ0ZXJcbm9leHBhbmRcY3NuYW1lXHRoZVxtYWNuYW1lIHh4eFxlbmRjc25hbWUgIyMxLH0lCisgICAgICBcZXhwYW5kYWZ0ZXJcZXhwYW5kYWZ0ZXIKKyAgICAgIFxleHBhbmRhZnRlclx4ZGVmCisgICAgICBcZXhwYW5kYWZ0ZXJcZXhwYW5kYWZ0ZXIKKyAgICAgICAgXGNzbmFtZVx0aGVcbWFjbmFtZSB4eHhcZW5kY3NuYW1lCisgICAgICAgICAgXHBhcmFtbGlzdHtcZWdyb3VwXG5vZXhwYW5kXHNjYW5tYWNyb3tcdGVtcH19JQorICAgIFxmaQorICBcZWxzZQorICAgIFxpZmNhc2VccGFyYW1ubworICAgICUgMAorICAgICAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lXHRoZVxtYWNuYW1lXGVuZGNzbmFtZXslCisgICAgICAgIFxub2V4cGFuZFxub3JlY3Vyc2V7XHRoZVxtYWNuYW1lfSUKKyAgICAgICAgXG5vZXhwYW5kXHNjYW5tYWNyb3tcdGVtcH1cZWdyb3VwfSUKKyAgICBcb3IgJSAxCisgICAgICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWVcdGhlXG1hY25hbWVcZW5kY3NuYW1leyUKKyAgICAgICAgIFxiZ3JvdXBcbm9leHBhbmRcbWFjcm9hcmdjdHh0CisgICAgICAgICBcbm9leHBhbmRcYnJhY2VvcmxpbmUKKyAgICAgICAgIFxleHBhbmRhZnRlclxub2V4cGFuZFxjc25hbWVcdGhlXG1hY25hbWUgeHh4XGVuZGNzbmFtZX0lCisgICAgICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWVcdGhlXG1hY25hbWUgeHh4XGVuZGNzbmFtZSMjMXslCisgICAgICAgIFxlZ3JvdXAKKyAgICAgICAgXG5vZXhwYW5kXG5vcmVjdXJzZXtcdGhlXG1hY25hbWV9JQorICAgICAgICBcbm9leHBhbmRcc2Nhbm1hY3Jve1x0ZW1wfVxlZ3JvdXB9JQorICAgIFxlbHNlICUgbWFueQorICAgICAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lXHRoZVxtYWNuYW1lXGVuZGNzbmFtZXslCisgICAgICAgICBcYmdyb3VwXG5vZXhwYW5kXG1hY3JvYXJnY3R4dAorICAgICAgICAgXGV4cGFuZGFmdGVyXG5vZXhwYW5kXGNzbmFtZVx0aGVcbWFjbmFtZSB4eFxlbmRjc25hbWV9JQorICAgICAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lXHRoZVxtYWNuYW1lIHh4XGVuZGNzbmFtZSMjMXslCisgICAgICAgICAgXGV4cGFuZGFmdGVyXG5vZXhwYW5kXGNzbmFtZVx0aGVcbWFjbmFtZSB4eHhcZW5kY3NuYW1lICMjMSx9JQorICAgICAgXGV4cGFuZGFmdGVyXGV4cGFuZGFmdGVyCisgICAgICBcZXhwYW5kYWZ0ZXJceGRlZgorICAgICAgXGV4cGFuZGFmdGVyXGV4cGFuZGFmdGVyCisgICAgICBcY3NuYW1lXHRoZVxtYWNuYW1lIHh4eFxlbmRjc25hbWUKKyAgICAgIFxwYXJhbWxpc3R7JQorICAgICAgICAgIFxlZ3JvdXAKKyAgICAgICAgICBcbm9leHBhbmRcbm9yZWN1cnNle1x0aGVcbWFjbmFtZX0lCisgICAgICAgICAgXG5vZXhwYW5kXHNjYW5tYWNyb3tcdGVtcH1cZWdyb3VwfSUKKyAgICBcZmkKKyAgXGZpfQorCitcZGVmXG5vcmVjdXJzZSMxe1xiZ3JvdXBcY3NsZXR7IzF9e21hY3NhdmUuIzF9fQorCislIFxicmFjZW9ybGluZSBkZWNpZGVzIHdoZXRoZXIgdGhlIG5leHQgbm9ud2hpdGVzcGFjZSBjaGFyYWN0ZXIgaXMgYQorJSB7LiAgSWYgc28gaXQgcmVhZHMgdXAgdG8gdGhlIGNsb3NpbmcgfSwgaWYgbm90LCBpdCByZWFkcyB0aGUgd2hvbGUKKyUgbGluZS4gIFdoYXRldmVyIHdhcyByZWFkIGlzIHRoZW4gZmVkIHRvIHRoZSBuZXh0IGNvbnRyb2wgc2VxdWVuY2UKKyUgYXMgYW4gYXJndW1lbnQgKGJ5IFxwYXJzZWJyYWNlIG9yIFxwYXJzZWFyZykKK1xkZWZcYnJhY2VvcmxpbmUjMXtcbGV0XG1hY25hbWV4eHg9IzFcZnV0dXJlbGV0XG5jaGFyXGJyYWNlb3JsaW5leHh4fQorXGRlZlxicmFjZW9ybGluZXh4eHslCisgIFxpZnhcbmNoYXJcYmdyb3VwXGVsc2UKKyAgICBcZXhwYW5kYWZ0ZXJccGFyc2VhcmcKKyAgXGZpIFxtYWNuYW1leHh4fQorCisKKyUgQGFsaWFzLgorJSBXZSBuZWVkIHNvbWUgdHJpY2tlcnkgdG8gcmVtb3ZlIHRoZSBvcHRpb25hbCBzcGFjZXMgYXJvdW5kIHRoZSBlcXVhbAorJSBzaWduLiAgSnVzdCBtYWtlIHRoZW0gYWN0aXZlIGFuZCB0aGVuIGV4cGFuZCB0aGVtIGFsbCB0byBub3RoaW5nLgorXGRlZlxhbGlhc3tccGFyc2Vhcmd1c2luZ1xvYmV5c3BhY2VzXGFsaWFzeHh4fQorXGRlZlxhbGlhc3h4eCAjMXtcYWxpYXN5eXkjMVxyZWxheH0KK1xkZWZcYWxpYXN5eXkgIzE9IzJccmVsYXh7JQorICB7JQorICAgIFxleHBhbmRhZnRlclxsZXRcb2JleWVkc3BhY2U9XGVtcHR5CisgICAgXGFkZHRvbWFjcm9saXN0eyMxfSUKKyAgICBceGRlZlxuZXh0e1xnbG9iYWxcbGV0XG1ha2Vjc25hbWV7IzF9PVxtYWtlY3NuYW1leyMyfX0lCisgIH0lCisgIFxuZXh0Cit9CisKKworXG1lc3NhZ2V7Y3Jvc3MgcmVmZXJlbmNlcyx9CisKK1xuZXd3cml0ZVxhdXhmaWxlCitcbmV3aWZcaWZoYXZleHJlZnMgICAgJSBUcnVlIGlmIHhyZWYgdmFsdWVzIGFyZSBrbm93bi4KK1xuZXdpZlxpZndhcm5lZHhyZWZzICAlIFRydWUgaWYgd2Ugd2FybmVkIG9uY2UgdGhhdCB0aGV5IGFyZW4ndCBrbm93bi4KKworJSBAaW5mb3JlZiBpcyByZWxhdGl2ZWx5IHNpbXBsZS4KK1xkZWZcaW5mb3JlZiAjMXtcaW5mb3JlZnp6eiAjMSwsLCwqKn0KK1xkZWZcaW5mb3JlZnp6eiAjMSwjMiwjMywjNCoqe1xwdXR3b3JkU2Vle30gXHB1dHdvcmRJbmZve30gXHB1dHdvcmRmaWxle30gXGZpbGV7XGlnbm9yZXNwYWNlcyAjM3t9fSwKKyAgbm9kZSBcc2FtcHtcaWdub3Jlc3BhY2VzIzF7fX19CisKKyUgQG5vZGUncyBvbmx5IGpvYiBpbiBUZVggaXMgdG8gZGVmaW5lIFxsYXN0bm9kZSwgd2hpY2ggaXMgdXNlZCBpbgorJSBjcm9zcy1yZWZlcmVuY2VzLiAgVGhlIEBub2RlIGxpbmUgbWlnaHQgb3IgbWlnaHQgbm90IGhhdmUgY29tbWFzLCBhbmQKKyUgbWlnaHQgb3IgbWlnaHQgbm90IGhhdmUgc3BhY2VzIGJlZm9yZSB0aGUgZmlyc3QgY29tbWEsIGxpa2U6CislIEBub2RlIGZvbyAsIGJhciAsIC4uLgorJSBXZSBkb24ndCB3YW50IHN1Y2ggdHJhaWxpbmcgc3BhY2VzIGluIHRoZSBub2RlIG5hbWUuCislCitccGFyc2VhcmdkZWZcbm9kZXtcY2hlY2tlbnZ7fVxkb25vZGUgIzEgLFxmaW5pc2hub2RlcGFyc2V9CislCislIGFsc28gcmVtb3ZlIGEgdHJhaWxpbmcgY29tbWEsIGluIGNhc2Ugb2Ygc29tZXRoaW5nIGxpa2UgdGhpczoKKyUgQG5vZGUgSGVscC1Dcm9zcywgICwgICwgQ3Jvc3MtcmVmcworXGRlZlxkb25vZGUjMSAsIzJcZmluaXNobm9kZXBhcnNle1xkb2Rvbm9kZSAjMSxcZmluaXNobm9kZXBhcnNlfQorXGRlZlxkb2Rvbm9kZSMxLCMyXGZpbmlzaG5vZGVwYXJzZXtcZ2RlZlxsYXN0bm9kZXsjMX19CisKK1xsZXRcbndub2RlPVxub2RlCitcbGV0XGxhc3Rub2RlPVxlbXB0eQorCislIFdyaXRlIGEgY3Jvc3MtcmVmZXJlbmNlIGRlZmluaXRpb24gZm9yIHRoZSBjdXJyZW50IG5vZGUuICAjMSBpcyB0aGUKKyUgdHlwZSAoWW51bWJlcmVkLCBZYXBwZW5kaXgsIFlub3RoaW5nKS4KKyUKK1xkZWZcZG9ub2RlcmVmIzF7JQorICBcaWZ4XGxhc3Rub2RlXGVtcHR5XGVsc2UKKyAgICBcc2V0cmVme1xsYXN0bm9kZX17IzF9JQorICAgIFxnbG9iYWxcbGV0XGxhc3Rub2RlPVxlbXB0eQorICBcZmkKK30KKworJSBAYW5jaG9ye05BTUV9IC0tIGRlZmluZSB4cmVmIHRhcmdldCBhdCBhcmJpdHJhcnkgcG9pbnQuCislCitcbmV3Y291bnRcc2F2ZXNmcmVnaXN0ZXIKKyUKK1xkZWZcc2F2ZXNme1xyZWxheCBcaWZobW9kZSBcc2F2ZXNmcmVnaXN0ZXI9XHNwYWNlZmFjdG9yIFxmaX0KK1xkZWZccmVzdG9yZXNme1xyZWxheCBcaWZobW9kZSBcc3BhY2VmYWN0b3I9XHNhdmVzZnJlZ2lzdGVyIFxmaX0KK1xkZWZcYW5jaG9yIzF7XHNhdmVzZiBcc2V0cmVmeyMxfXtZbm90aGluZ31ccmVzdG9yZXNmIFxpZ25vcmVzcGFjZXN9CisKKyUgXHNldHJlZntOQU1FfXtTTlR9IGRlZmluZXMgYSBjcm9zcy1yZWZlcmVuY2UgcG9pbnQgTkFNRSAoYSBub2RlIG9yIGFuCislIGFuY2hvciksIHdoaWNoIGNvbnNpc3RzIG9mIHRocmVlIHBhcnRzOgorJSAxKSBOQU1FLXRpdGxlIC0gdGhlIGN1cnJlbnQgc2VjdGlvbmluZyBuYW1lIHRha2VuIGZyb20gXHRoaXNzZWN0aW9uLAorJSAgICAgICAgICAgICAgICAgb3IgdGhlIGFuY2hvciBuYW1lLgorJSAyKSBOQU1FLXNudCAgIC0gc2VjdGlvbiBudW1iZXIgYW5kIHR5cGUsIHBhc3NlZCBhcyB0aGUgU05UIGFyZywgb3IKKyUgICAgICAgICAgICAgICAgIGVtcHR5IGZvciBhbmNob3JzLgorJSAzKSBOQU1FLXBnICAgIC0gdGhlIHBhZ2UgbnVtYmVyLgorJQorJSBUaGlzIGlzIGNhbGxlZCBmcm9tIFxkb25vZGVyZWYsIFxhbmNob3IsIGFuZCBcZG9mbG9hdC4gIEluIHRoZSBjYXNlIG9mCislIGZsb2F0cywgdGhlcmUgaXMgYW4gYWRkaXRpb25hbCBwYXJ0LCB3aGljaCBpcyBub3Qgd3JpdHRlbiBoZXJlOgorJSA0KSBOQU1FLWxvZiAgIC0gdGhlIHRleHQgYXMgaXQgc2hvdWxkIGFwcGVhciBpbiBhIEBsaXN0b2ZmbG9hdHMuCislCitcZGVmXHNldHJlZiMxIzJ7JQorICBccGRmbWtkZXN0eyMxfSUKKyAgXGlmbGlua3MKKyAgICB7JQorICAgICAgXGF0ZHVtbWllcyAgJSBwcmVzZXJ2ZSBjb21tYW5kcywgYnV0IGRvbid0IGV4cGFuZCB0aGVtCisgICAgICBcZWRlZlx3cml0ZXhyZGVmIyMxIyMyeyUKKwlcd3JpdGVcYXV4ZmlsZXtAeHJkZWZ7IzEtJSAjMSBvZiBcc2V0cmVmLCBleHBhbmRlZCBieSB0aGUgXGVkZWYKKwkgICMjMX17IyMyfX0lIHRoZXNlIGFyZSBwYXJhbWV0ZXJzIG9mIFx3cml0ZXhyZGVmCisgICAgICB9JQorICAgICAgXHRva3MwID0gXGV4cGFuZGFmdGVye1x0aGlzc2VjdGlvbn0lCisgICAgICBcaW1tZWRpYXRlIFx3cml0ZXhyZGVme3RpdGxlfXtcdGhlXHRva3MwIH0lCisgICAgICBcaW1tZWRpYXRlIFx3cml0ZXhyZGVme3NudH17XGNzbmFtZSAjMlxlbmRjc25hbWV9JSBcWW51bWJlcmVkIGV0Yy4KKyAgICAgIFxzYWZld2hhdHNpdHtcd3JpdGV4cmRlZntwZ317XGZvbGlvfX0lIHdpbGwgYmUgd3JpdHRlbiBsYXRlciwgZHVyaW5nIFxzaGlwb3V0CisgICAgfSUKKyAgXGZpCit9CisKKyUgQHhyZWYsIEBweHJlZiwgYW5kIEByZWYgZ2VuZXJhdGUgY3Jvc3MtcmVmZXJlbmNlcy4gIEZvciBceHJlZlgsICMxIGlzCislIHRoZSBub2RlIG5hbWUsICMyIHRoZSBuYW1lIG9mIHRoZSBJbmZvIGNyb3NzLXJlZmVyZW5jZSwgIzMgdGhlIHByaW50ZWQKKyUgbm9kZSBuYW1lLCAjNCB0aGUgbmFtZSBvZiB0aGUgSW5mbyBmaWxlLCAjNSB0aGUgbmFtZSBvZiB0aGUgcHJpbnRlZAorJSBtYW51YWwuICBBbGwgYnV0IHRoZSBub2RlIG5hbWUgY2FuIGJlIG9taXR0ZWQuCislCitcZGVmXHB4cmVmIzF7XHB1dHdvcmRzZWV7fSBceHJlZlhbIzEsLCwsLCwsXX0KK1xkZWZceHJlZiMxe1xwdXR3b3JkU2Vle30gXHhyZWZYWyMxLCwsLCwsLF19CitcZGVmXHJlZiMxe1x4cmVmWFsjMSwsLCwsLCxdfQorXGRlZlx4cmVmWFsjMSwjMiwjMywjNCwjNSwjNl17XGJlZ2luZ3JvdXAKKyAgXHVuc2Vwc3BhY2VzCisgIFxkZWZccHJpbnRlZG1hbnVhbHtcaWdub3Jlc3BhY2VzICM1fSUKKyAgXGRlZlxwcmludGVkcmVmbmFtZXtcaWdub3Jlc3BhY2VzICMzfSUKKyAgXHNldGJveDE9XGhib3h7XHByaW50ZWRtYW51YWxcdW5za2lwfSUKKyAgXHNldGJveDA9XGhib3h7XHByaW50ZWRyZWZuYW1lXHVuc2tpcH0lCisgIFxpZmRpbSBcd2QwID0gMHB0CisgICAgJSBObyBwcmludGVkIG5vZGUgbmFtZSB3YXMgZXhwbGljaXRseSBnaXZlbi4KKyAgICBcZXhwYW5kYWZ0ZXJcaWZ4XGNzbmFtZSBTRVR4cmVmLWF1dG9tYXRpYy1zZWN0aW9uLXRpdGxlXGVuZGNzbmFtZVxyZWxheAorICAgICAgJSBVc2UgdGhlIG5vZGUgbmFtZSBpbnNpZGUgdGhlIHNxdWFyZSBicmFja2V0cy4KKyAgICAgIFxkZWZccHJpbnRlZHJlZm5hbWV7XGlnbm9yZXNwYWNlcyAjMX0lCisgICAgXGVsc2UKKyAgICAgICUgVXNlIHRoZSBhY3R1YWwgY2hhcHRlci9zZWN0aW9uIHRpdGxlIGFwcGVhciBpbnNpZGUKKyAgICAgICUgdGhlIHNxdWFyZSBicmFja2V0cy4gIFVzZSB0aGUgcmVhbCBzZWN0aW9uIHRpdGxlIGlmIHdlIGhhdmUgaXQuCisgICAgICBcaWZkaW0gXHdkMSA+IDBwdAorICAgICAgICAlIEl0IGlzIGluIGFub3RoZXIgbWFudWFsLCBzbyB3ZSBkb24ndCBoYXZlIGl0LgorICAgICAgICBcZGVmXHByaW50ZWRyZWZuYW1le1xpZ25vcmVzcGFjZXMgIzF9JQorICAgICAgXGVsc2UKKyAgICAgICAgXGlmaGF2ZXhyZWZzCisgICAgICAgICAgJSBXZSBrbm93IHRoZSByZWFsIHRpdGxlIGlmIHdlIGhhdmUgdGhlIHhyZWYgdmFsdWVzLgorICAgICAgICAgIFxkZWZccHJpbnRlZHJlZm5hbWV7XHJlZnh7IzEtdGl0bGV9e319JQorICAgICAgICBcZWxzZQorICAgICAgICAgICUgT3RoZXJ3aXNlIGp1c3QgY29weSB0aGUgSW5mbyBub2RlIG5hbWUuCisgICAgICAgICAgXGRlZlxwcmludGVkcmVmbmFtZXtcaWdub3Jlc3BhY2VzICMxfSUKKyAgICAgICAgXGZpJQorICAgICAgXGZpCisgICAgXGZpCisgIFxmaQorICAlCisgICUgTWFrZSBsaW5rIGluIHBkZiBvdXRwdXQuCisgIFxpZnBkZgorICAgIFxsZWF2ZXZtb2RlCisgICAgXGdldGZpbGVuYW1leyM0fSUKKyAgICB7XGluZGV4bm9mb250cworICAgICBcdHVybm9mZmFjdGl2ZQorICAgICAlIFNlZSBjb21tZW50cyBhdCBcYWN0aXZlYmFja3NsYXNoZG91YmxlLgorICAgICB7XGFjdGl2ZWJhY2tzbGFzaGRvdWJsZSBceGRlZlxwZGZ4cmVmZGVzdHsjMX0lCisgICAgICBcYmFja3NsYXNocGFyZW5zXHBkZnhyZWZkZXN0fSUKKyAgICAgJQorICAgICBcaWZudW1cZmlsZW5hbWVsZW5ndGg+MAorICAgICAgIFxzdGFydGxpbmsgYXR0cnsvQm9yZGVyIFswIDAgMF19JQorICAgICAgICAgZ290byBmaWxle1x0aGVcZmlsZW5hbWUucGRmfSBuYW1le1xwZGZ4cmVmZGVzdH0lCisgICAgIFxlbHNlCisgICAgICAgXHN0YXJ0bGluayBhdHRyey9Cb3JkZXIgWzAgMCAwXX0lCisgICAgICAgICBnb3RvIG5hbWV7XHBkZm1rcGdue1xwZGZ4cmVmZGVzdH19JQorICAgICBcZmkKKyAgICB9JQorICAgIFxsaW5rY29sb3IKKyAgXGZpCisgICUKKyAgJSBGbG9hdCByZWZlcmVuY2VzIGFyZSBwcmludGVkIGNvbXBsZXRlbHkgZGlmZmVyZW50bHk6ICJGaWd1cmUgMS4yIgorICAlIGluc3RlYWQgb2YgIltzb21lbm9kZV0sIHAuMyIuICBXZSBkaXN0aW5ndWlzaCB0aGVtIGJ5IHRoZQorICAlIExBQkVMLXRpdGxlIGJlaW5nIHNldCB0byBhIG1hZ2ljIHN0cmluZy4KKyAgeyUKKyAgICAlIEhhdmUgdG8gb3RoZXJpZnkgZXZlcnl0aGluZyBzcGVjaWFsIHRvIGFsbG93IHRoZSBcY3NuYW1lIHRvCisgICAgJSBpbmNsdWRlIGFuIF8gaW4gdGhlIHhyZWYgbmFtZSwgZXRjLgorICAgIFxpbmRleG5vZm9udHMKKyAgICBcdHVybm9mZmFjdGl2ZQorICAgIFxleHBhbmRhZnRlclxnbG9iYWxcZXhwYW5kYWZ0ZXJcbGV0XGV4cGFuZGFmdGVyXFh0aGlzcmVmdGl0bGUKKyAgICAgIFxjc25hbWUgWFIjMS10aXRsZVxlbmRjc25hbWUKKyAgfSUKKyAgXGlmZmxvYXRcWHRoaXNyZWZ0aXRsZQorICAgICUgSWYgdGhlIHVzZXIgc3BlY2lmaWVkIHRoZSBwcmludCBuYW1lICh0aGlyZCBhcmcpIHRvIHRoZSByZWYsCisgICAgJSBwcmludCBpdCBpbnN0ZWFkIG9mIG91ciB1c3VhbCAiRmlndXJlIDEuMiIuCisgICAgXGlmZGltXHdkMCA9IDBwdAorICAgICAgXHJlZnh7IzEtc250fXt9JQorICAgIFxlbHNlCisgICAgICBccHJpbnRlZHJlZm5hbWUKKyAgICBcZmkKKyAgICAlCisgICAgJSBpZiB0aGUgdXNlciBhbHNvIGdhdmUgdGhlIHByaW50ZWQgbWFudWFsIG5hbWUgKGZpZnRoIGFyZyksIGFwcGVuZAorICAgICUgImluIE1BTlVBTE5BTUUiLgorICAgIFxpZmRpbSBcd2QxID4gMHB0CisgICAgICBcc3BhY2UgXHB1dHdvcmRpbnt9IFxjaXRle1xwcmludGVkbWFudWFsfSUKKyAgICBcZmkKKyAgXGVsc2UKKyAgICAlIG5vZGUvYW5jaG9yIChub24tZmxvYXQpIHJlZmVyZW5jZXMuCisgICAgJQorICAgICUgSWYgd2UgdXNlIFx1bmhib3gwIGFuZCBcdW5oYm94MSB0byBwcmludCB0aGUgbm9kZSBuYW1lcywgVGVYIGRvZXMgbm90CisgICAgJSBpbnNlcnQgZW1wdHkgZGlzY3JldGlvbmFyaWVzIGFmdGVyIGh5cGhlbnMsIHdoaWNoIG1lYW5zIHRoYXQgaXQgd2lsbAorICAgICUgbm90IGZpbmQgYSBsaW5lIGJyZWFrIGF0IGEgaHlwaGVuIGluIGEgbm9kZSBuYW1lcy4gIFNpbmNlIHNvbWUgbWFudWFscworICAgICUgYXJlIGJlc3Qgd3JpdHRlbiB3aXRoIGZhaXJseSBsb25nIG5vZGUgbmFtZXMsIGNvbnRhaW5pbmcgaHlwaGVucywgdGhpcworICAgICUgaXMgYSBsb3NzLiAgVGhlcmVmb3JlLCB3ZSBnaXZlIHRoZSB0ZXh0IG9mIHRoZSBub2RlIG5hbWUgYWdhaW4sIHNvIGl0CisgICAgJSBpcyBhcyBpZiBUZVggaXMgc2VlaW5nIGl0IGZvciB0aGUgZmlyc3QgdGltZS4KKyAgICBcaWZkaW0gXHdkMSA+IDBwdAorICAgICAgXHB1dHdvcmRzZWN0aW9ue30gYGBccHJpbnRlZHJlZm5hbWUnJyBccHV0d29yZGlue30gXGNpdGV7XHByaW50ZWRtYW51YWx9JQorICAgIFxlbHNlCisgICAgICAlIF8gKGZvciBleGFtcGxlKSBoYXMgdG8gYmUgdGhlIGNoYXJhY3RlciBfIGZvciB0aGUgcHVycG9zZXMgb2YgdGhlCisgICAgICAlIGNvbnRyb2wgc2VxdWVuY2UgY29ycmVzcG9uZGluZyB0byB0aGUgbm9kZSwgYnV0IGl0IGhhcyB0byBleHBhbmQKKyAgICAgICUgaW50byB0aGUgdXN1YWwgXGxlYXZldm1vZGUuLi5cdnJ1bGUgc3R1ZmYgZm9yIHB1cnBvc2VzIG9mCisgICAgICAlIHByaW50aW5nLiBTbyB3ZSBcdHVybm9mZmFjdGl2ZSBmb3IgdGhlIFxyZWZ4LXNudCwgYmFjayBvbiBmb3IgdGhlCisgICAgICAlIHByaW50aW5nLCBiYWNrIG9mZiBmb3IgdGhlIFxyZWZ4LXBnLgorICAgICAge1x0dXJub2ZmYWN0aXZlCisgICAgICAgJSBPbmx5IG91dHB1dCBhIGZvbGxvd2luZyBzcGFjZSBpZiB0aGUgLXNudCByZWYgaXMgbm9uZW1wdHk7IGZvcgorICAgICAgICUgQHVubnVtYmVyZWQgYW5kIEBhbmNob3IsIGl0IHdvbid0IGJlLgorICAgICAgIFxzZXRib3gyID0gXGhib3h7XGlnbm9yZXNwYWNlcyBccmVmeHsjMS1zbnR9e319JQorICAgICAgIFxpZmRpbSBcd2QyID4gMHB0IFxyZWZ4eyMxLXNudH1cc3BhY2VcZmkKKyAgICAgIH0lCisgICAgICAlIG91dHB1dCB0aGUgYFtteW5vZGVdJyB2aWEgYSBtYWNybyBzbyBpdCBjYW4gYmUgb3ZlcnJpZGRlbi4KKyAgICAgIFx4cmVmcHJpbnRub2RlbmFtZVxwcmludGVkcmVmbmFtZQorICAgICAgJQorICAgICAgJSBCdXQgd2UgYWx3YXlzIHdhbnQgYSBjb21tYSBhbmQgYSBzcGFjZToKKyAgICAgICxcc3BhY2UKKyAgICAgICUKKyAgICAgICUgb3V0cHV0IHRoZSBgcGFnZSAzJy4KKyAgICAgIFx0dXJub2ZmYWN0aXZlIFxwdXR3b3JkcGFnZVx0aWVccmVmeHsjMS1wZ317fSUKKyAgICBcZmkKKyAgXGZpCisgIFxlbmRsaW5rCitcZW5kZ3JvdXB9CisKKyUgVGhpcyBtYWNybyBpcyBjYWxsZWQgZnJvbSBceHJlZlggZm9yIHRoZSBgW25vZGVuYW1lXScgcGFydCBvZiB4cmVmCislIG91dHB1dC4gIEl0J3MgYSBzZXBhcmF0ZSBtYWNybyBvbmx5IHNvIGl0IGNhbiBiZSBjaGFuZ2VkIG1vcmUgZWFzaWx5LAorJSBzaW5jZSBzcXVhcmUgYnJhY2tldHMgZG9uJ3Qgd29yayB3ZWxsIGluIHNvbWUgZG9jdW1lbnRzLiAgUGFydGljdWxhcmx5CislIG9uZSB0aGF0IEJvYiBpcyB3b3JraW5nIG9uIDopLgorJQorXGRlZlx4cmVmcHJpbnRub2RlbmFtZSMxe1sjMV19CisKKyUgVGhpbmdzIHJlZmVycmVkIHRvIGJ5IFxzZXRyZWYuCislCitcZGVmXFlub3RoaW5ne30KK1xkZWZcWW9taXRmcm9tdG9je30KK1xkZWZcWW51bWJlcmVkeyUKKyAgXGlmbnVtXHNlY25vPTAKKyAgICBccHV0d29yZENoYXB0ZXJAdGllIFx0aGVcY2hhcG5vCisgIFxlbHNlIFxpZm51bVxzdWJzZWNubz0wCisgICAgXHB1dHdvcmRTZWN0aW9uQHRpZSBcdGhlXGNoYXBuby5cdGhlXHNlY25vCisgIFxlbHNlIFxpZm51bVxzdWJzdWJzZWNubz0wCisgICAgXHB1dHdvcmRTZWN0aW9uQHRpZSBcdGhlXGNoYXBuby5cdGhlXHNlY25vLlx0aGVcc3Vic2Vjbm8KKyAgXGVsc2UKKyAgICBccHV0d29yZFNlY3Rpb25AdGllIFx0aGVcY2hhcG5vLlx0aGVcc2Vjbm8uXHRoZVxzdWJzZWNuby5cdGhlXHN1YnN1YnNlY25vCisgIFxmaVxmaVxmaQorfQorXGRlZlxZYXBwZW5kaXh7JQorICBcaWZudW1cc2Vjbm89MAorICAgICBccHV0d29yZEFwcGVuZGl4QHRpZSBAY2hhclx0aGVcYXBwZW5kaXhub3t9JQorICBcZWxzZSBcaWZudW1cc3Vic2Vjbm89MAorICAgICBccHV0d29yZFNlY3Rpb25AdGllIEBjaGFyXHRoZVxhcHBlbmRpeG5vLlx0aGVcc2Vjbm8KKyAgXGVsc2UgXGlmbnVtXHN1YnN1YnNlY25vPTAKKyAgICBccHV0d29yZFNlY3Rpb25AdGllIEBjaGFyXHRoZVxhcHBlbmRpeG5vLlx0aGVcc2Vjbm8uXHRoZVxzdWJzZWNubworICBcZWxzZQorICAgIFxwdXR3b3JkU2VjdGlvbkB0aWUKKyAgICAgIEBjaGFyXHRoZVxhcHBlbmRpeG5vLlx0aGVcc2Vjbm8uXHRoZVxzdWJzZWNuby5cdGhlXHN1YnN1YnNlY25vCisgIFxmaVxmaVxmaQorfQorCislIERlZmluZSBccmVmeHtOQU1FfXtTVUZGSVh9IHRvIHJlZmVyZW5jZSBhIGNyb3NzLXJlZmVyZW5jZSBzdHJpbmcgbmFtZWQgTkFNRS4KKyUgSWYgaXRzIHZhbHVlIGlzIG5vbmVtcHR5LCBTVUZGSVggaXMgb3V0cHV0IGFmdGVyd2FyZC4KKyUKK1xkZWZccmVmeCMxIzJ7JQorICB7JQorICAgIFxpbmRleG5vZm9udHMKKyAgICBcb3RoZXJiYWNrc2xhc2gKKyAgICBcZXhwYW5kYWZ0ZXJcZ2xvYmFsXGV4cGFuZGFmdGVyXGxldFxleHBhbmRhZnRlclx0aGlzcmVmWAorICAgICAgXGNzbmFtZSBYUiMxXGVuZGNzbmFtZQorICB9JQorICBcaWZ4XHRoaXNyZWZYXHJlbGF4CisgICAgJSBJZiBub3QgZGVmaW5lZCwgc2F5IHNvbWV0aGluZyBhdCBsZWFzdC4KKyAgICBcYW5nbGVsZWZ0IHVuXC1kZVwtZmluZWRcYW5nbGVyaWdodAorICAgIFxpZmxpbmtzCisgICAgICBcaWZoYXZleHJlZnMKKyAgICAgICAgXG1lc3NhZ2V7XGxpbmVudW1iZXIgVW5kZWZpbmVkIGNyb3NzIHJlZmVyZW5jZSBgIzEnLn0lCisgICAgICBcZWxzZQorICAgICAgICBcaWZ3YXJuZWR4cmVmc1xlbHNlCisgICAgICAgICAgXGdsb2JhbFx3YXJuZWR4cmVmc3RydWUKKyAgICAgICAgICBcbWVzc2FnZXtDcm9zcyByZWZlcmVuY2UgdmFsdWVzIHVua25vd247IHlvdSBtdXN0IHJ1biBUZVggYWdhaW4ufSUKKyAgICAgICAgXGZpCisgICAgICBcZmkKKyAgICBcZmkKKyAgXGVsc2UKKyAgICAlIEl0J3MgZGVmaW5lZCwgc28ganVzdCB1c2UgaXQuCisgICAgXHRoaXNyZWZYCisgIFxmaQorICAjMiUgT3V0cHV0IHRoZSBzdWZmaXggaW4gYW55IGNhc2UuCit9CisKKyUgVGhpcyBpcyB0aGUgbWFjcm8gaW52b2tlZCBieSBlbnRyaWVzIGluIHRoZSBhdXggZmlsZS4gIFVzdWFsbHkgaXQncworJSBqdXN0IGEgXGRlZiAod2UgcHJlcGVuZCBYUiB0byB0aGUgY29udHJvbCBzZXF1ZW5jZSBuYW1lIHRvIGF2b2lkCislIGNvbGxpc2lvbnMpLiAgQnV0IGlmIHRoaXMgaXMgYSBmbG9hdCB0eXBlLCB3ZSBoYXZlIG1vcmUgd29yayB0byBkby4KKyUKK1xkZWZceHJkZWYjMSMyeyUKKyAgeyUgVGhlIG5vZGUgbmFtZSBtaWdodCBjb250YWluIDgtYml0IGNoYXJhY3RlcnMsIHdoaWNoIGluIG91ciBjdXJyZW50CisgICAlIGltcGxlbWVudGF0aW9uIGFyZSBjaGFuZ2VkIHRvIGNvbW1hbmRzIGxpa2UgQCdlLiAgRG9uJ3QgbGV0IHRoZXNlCisgICAlIG1lc3MgdXAgdGhlIGNvbnRyb2wgc2VxdWVuY2UgbmFtZS4KKyAgICBcaW5kZXhub2ZvbnRzCisgICAgXHR1cm5vZmZhY3RpdmUKKyAgICBceGRlZlxzYWZleHJlZm5hbWV7IzF9JQorICB9JQorICAlCisgIFxleHBhbmRhZnRlclxnZGVmXGNzbmFtZSBYUlxzYWZleHJlZm5hbWVcZW5kY3NuYW1leyMyfSUgcmVtZW1iZXIgdGhpcyB4cmVmCisgICUKKyAgJSBXYXMgdGhhdCB4cmVmIGNvbnRyb2wgc2VxdWVuY2UgdGhhdCB3ZSBqdXN0IGRlZmluZWQgZm9yIGEgZmxvYXQ/CisgIFxleHBhbmRhZnRlclxpZmZsb2F0XGNzbmFtZSBYUlxzYWZleHJlZm5hbWVcZW5kY3NuYW1lCisgICAgJSBpdCB3YXMgYSBmbG9hdCwgYW5kIHdlIGhhdmUgdGhlIChzYWZlKSBmbG9hdCB0eXBlIGluIFxpZmZsb2F0dHlwZS4KKyAgICBcZXhwYW5kYWZ0ZXJcbGV0XGV4cGFuZGFmdGVyXGZsb2F0bGlzdAorICAgICAgXGNzbmFtZSBmbG9hdGxpc3RcaWZmbG9hdHR5cGVcZW5kY3NuYW1lCisgICAgJQorICAgICUgSXMgdGhpcyB0aGUgZmlyc3QgdGltZSB3ZSd2ZSBzZWVuIHRoaXMgZmxvYXQgdHlwZT8KKyAgICBcZXhwYW5kYWZ0ZXJcaWZ4XGZsb2F0bGlzdFxyZWxheAorICAgICAgXHRva3MwID0ge1xkb30lIHllcywgc28ganVzdCBcZG8KKyAgICBcZWxzZQorICAgICAgJSBoYWQgaXQgYmVmb3JlLCBzbyBwcmVzZXJ2ZSBwcmV2aW91cyBlbGVtZW50cyBpbiBsaXN0LgorICAgICAgXHRva3MwID0gXGV4cGFuZGFmdGVye1xmbG9hdGxpc3RcZG99JQorICAgIFxmaQorICAgICUKKyAgICAlIFJlbWVtYmVyIHRoaXMgeHJlZiBpbiB0aGUgY29udHJvbCBzZXF1ZW5jZSBcZmxvYXRsaXN0RkxPQVRUWVBFLAorICAgICUgZm9yIGxhdGVyIHVzZSBpbiBcbGlzdG9mZmxvYXRzLgorICAgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZSBmbG9hdGxpc3RcaWZmbG9hdHR5cGVcZW5kY3NuYW1le1x0aGVcdG9rczAKKyAgICAgIHtcc2FmZXhyZWZuYW1lfX0lCisgIFxmaQorfQorCislIFJlYWQgdGhlIGxhc3QgZXhpc3RpbmcgYXV4IGZpbGUsIGlmIGFueS4gIE5vIGVycm9yIGlmIG5vbmUgZXhpc3RzLgorJQorXGRlZlx0cnlhdXhmaWxleyUKKyAgXG9wZW5pbiAxIFxqb2JuYW1lLmF1eAorICBcaWZlb2YgMSBcZWxzZQorICAgIFxyZWFkZGF0YWZpbGV7YXV4fSUKKyAgICBcZ2xvYmFsXGhhdmV4cmVmc3RydWUKKyAgXGZpCisgIFxjbG9zZWluIDEKK30KKworXGRlZlxzZXR1cGRhdGFmaWxleyUKKyAgXGNhdGNvZGVgXF5eQD1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eQT1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eQj1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eQz1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eRD1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eRT1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eRj1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eRz1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eSD1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eSz1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eTD1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eTj1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eUD1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eUT1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eUj1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eUz1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eVD1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eVT1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eVj1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eVz1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eWD1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eWj1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eWz1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eXD1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eXT1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eXj1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eXz1cb3RoZXIKKyAgJSBJdCB3YXMgc3VnZ2VzdGVkIHRvIHNldCB0aGUgY2F0Y29kZSBvZiBeIHRvIDcsIHdoaWNoIHdvdWxkIGFsbG93IF5eZTQgZXRjLgorICAlIGluIHhyZWYgdGFncywgaS5lLiwgbm9kZSBuYW1lcy4gIEJ1dCBzaW5jZSBeXmU0IG5vdGF0aW9uIGlzbid0CisgICUgc3VwcG9ydGVkIGluIHRoZSBtYWluIHRleHQsIGl0IGRvZXNuJ3Qgc2VlbSBkZXNpcmFibGUuICBGdXJ0aGVybW9yZSwKKyAgJSB0aGF0IGlzIG5vdCBlbm91Z2g6IGZvciBub2RlIG5hbWVzIHRoYXQgYWN0dWFsbHkgY29udGFpbiBhIF4KKyAgJSBjaGFyYWN0ZXIsIHdlIHdvdWxkIGVuZCB1cCB3cml0aW5nIGEgbGluZSBsaWtlIHRoaXM6ICd4cmRlZiB7J2hhdAorICAlIGItdGl0bGV9eydoYXQgYn0gYW5kIFx4cmRlZiBkb2VzIGEgXGNzbmFtZS4uLlxlbmRjc25hbWUgb24gdGhlIGZpcnN0CisgICUgYXJndW1lbnQsIGFuZCBcaGF0IGlzIG5vdCBhbiBleHBhbmRhYmxlIGNvbnRyb2wgc2VxdWVuY2UuICBJdCBjb3VsZAorICAlIGFsbCBiZSB3b3JrZWQgb3V0LCBidXQgd2h5PyAgRWl0aGVyIHdlIHN1cHBvcnQgXl4gb3Igd2UgZG9uJ3QuCisgICUKKyAgJSBUaGUgb3RoZXIgY2hhbmdlIG5lY2Vzc2FyeSBmb3IgdGhpcyB3YXMgdG8gZGVmaW5lIFxhdXhoYXQ6CisgICUgXGRlZlxhdXhoYXR7XGRlZl57J2hhdCB9fSUgZXh0cmEgc3BhY2Ugc28gb2sgaWYgZm9sbG93ZWQgYnkgbGV0dGVyCisgICUgYW5kIHRoZW4gdG8gY2FsbCBcYXV4aGF0IGluIFxzZXRxLgorICAlCisgIFxjYXRjb2RlYFxePVxvdGhlcgorICAlCisgICUgU3BlY2lhbCBjaGFyYWN0ZXJzLiAgU2hvdWxkIGJlIHR1cm5lZCBvZmYgYW55d2F5LCBidXQuLi4KKyAgXGNhdGNvZGVgXH49XG90aGVyCisgIFxjYXRjb2RlYFxbPVxvdGhlcgorICBcY2F0Y29kZWBcXT1cb3RoZXIKKyAgXGNhdGNvZGVgXCI9XG90aGVyCisgIFxjYXRjb2RlYFxfPVxvdGhlcgorICBcY2F0Y29kZWBcfD1cb3RoZXIKKyAgXGNhdGNvZGVgXDw9XG90aGVyCisgIFxjYXRjb2RlYFw+PVxvdGhlcgorICBcY2F0Y29kZWBcJD1cb3RoZXIKKyAgXGNhdGNvZGVgXCM9XG90aGVyCisgIFxjYXRjb2RlYFwmPVxvdGhlcgorICBcY2F0Y29kZWBcJT1cb3RoZXIKKyAgXGNhdGNvZGVgKz1cb3RoZXIgJSBhdm9pZCBcKyBmb3IgcGFyYW5vaWEgZXZlbiB0aG91Z2ggd2UndmUgdHVybmVkIGl0IG9mZgorICAlCisgICUgVGhpcyBpcyB0byBzdXBwb3J0IFwgaW4gbm9kZSBuYW1lcyBhbmQgdGl0bGVzLCBzaW5jZSB0aGUgXAorICAlIGNoYXJhY3RlcnMgZW5kIHVwIGluIGEgXGNzbmFtZS4gIEl0J3MgZWFzaWVyIHRoYW4KKyAgJSBsZWF2aW5nIGl0IGFjdGl2ZSBhbmQgbWFraW5nIGl0cyBhY3RpdmUgZGVmaW5pdGlvbiBhbiBhY3R1YWwgXAorICAlIGNoYXJhY3Rlci4gIFdoYXQgSSBkb24ndCB1bmRlcnN0YW5kIGlzIHdoeSBpdCB3b3JrcyBpbiB0aGUgKnZhbHVlKgorICAlIG9mIHRoZSB4cmRlZi4gIFNlZW1zIGxpa2UgaXQgc2hvdWxkIGJlIGEgY2F0Y29kZTEyIFwsIGFuZCB0aGF0CisgICUgc2hvdWxkIG5vdCB0eXBlc2V0IHByb3Blcmx5LiAgQnV0IGl0IHdvcmtzLCBzbyBJJ20gbW92aW5nIG9uIGZvcgorICAlIG5vdy4gIC0ta2FybCwgMTVqYW4wNC4KKyAgXGNhdGNvZGVgXFw9XG90aGVyCisgICUKKyAgJSBNYWtlIHRoZSBjaGFyYWN0ZXJzIDEyOC0yNTUgYmUgcHJpbnRpbmcgY2hhcmFjdGVycy4KKyAgeyUKKyAgICBcY291bnQxPTEyOAorICAgIFxkZWZcbG9vcHslCisgICAgICBcY2F0Y29kZVxjb3VudDE9XG90aGVyCisgICAgICBcYWR2YW5jZVxjb3VudDEgYnkgMQorICAgICAgXGlmbnVtIFxjb3VudDE8MjU2IFxsb29wIFxmaQorICAgIH0lCisgIH0lCisgICUKKyAgJSBAIGlzIG91ciBlc2NhcGUgY2hhcmFjdGVyIGluIC5hdXggZmlsZXMsIGFuZCB3ZSBuZWVkIGJyYWNlcy4KKyAgXGNhdGNvZGVgXHs9MQorICBcY2F0Y29kZWBcfT0yCisgIFxjYXRjb2RlYFxAPTAKK30KKworXGRlZlxyZWFkZGF0YWZpbGUjMXslCitcYmVnaW5ncm91cAorICBcc2V0dXBkYXRhZmlsZQorICBcaW5wdXRcam9ibmFtZS4jMQorXGVuZGdyb3VwfQorCisKK1xtZXNzYWdle2luc2VydGlvbnMsfQorJSBpbmNsdWRpbmcgZm9vdG5vdGVzLgorCitcbmV3Y291bnQgXGZvb3Rub3Rlbm8KKworJSBUaGUgdHJhaWxpbmcgc3BhY2UgaW4gdGhlIGZvbGxvd2luZyBkZWZpbml0aW9uIGZvciBzdXBlcmVqZWN0IGlzCislIHZpdGFsIGZvciBwcm9wZXIgZmlsbGluZzsgcGFnZXMgY29tZSBvdXQgdW5hbGlnbmVkIHdoZW4geW91IGRvIGEKKyUgcGFnZWFsaWdubWFjcm8gY2FsbCBpZiB0aGF0IHNwYWNlIGJlZm9yZSB0aGUgY2xvc2luZyBicmFjZSBpcworJSByZW1vdmVkLiAoR2VuZXJhbGx5LCBudW1lcmljIGNvbnN0YW50cyBzaG91bGQgYWx3YXlzIGJlIGZvbGxvd2VkIGJ5IGEKKyUgc3BhY2UgdG8gcHJldmVudCBzdHJhbmdlIGV4cGFuc2lvbiBlcnJvcnMuKQorXGRlZlxzdXBlcmVqZWN0e1xwYXJccGVuYWx0eSAtMjAwMDBcZm9vdG5vdGVubyA9MCB9CisKKyUgQGZvb3Rub3Rlc3R5bGUgaXMgbWVhbmluZ2Z1bCBmb3IgaW5mbyBvdXRwdXQgb25seS4KK1xsZXRcZm9vdG5vdGVzdHlsZT1cY29tbWVudAorCit7XGNhdGNvZGUgYFxAPTExCislCislIEF1dG8tbnVtYmVyIGZvb3Rub3Rlcy4gIE90aGVyd2lzZSBsaWtlIHBsYWluLgorXGdkZWZcZm9vdG5vdGV7JQorICBcbGV0XGluZGVudD1ccHRleGluZGVudAorICBcbGV0XG5vaW5kZW50PVxwdGV4bm9pbmRlbnQKKyAgXGdsb2JhbFxhZHZhbmNlXGZvb3Rub3Rlbm8gYnkgXEBuZQorICBcZWRlZlx0aGlzZm9vdG5veyRee1x0aGVcZm9vdG5vdGVub30kfSUKKyAgJQorICAlIEluIGNhc2UgdGhlIGZvb3Rub3RlIGNvbWVzIGF0IHRoZSBlbmQgb2YgYSBzZW50ZW5jZSwgcHJlc2VydmUgdGhlCisgICUgZXh0cmEgc3BhY2luZyBhZnRlciB3ZSBkbyB0aGUgZm9vdG5vdGUgbnVtYmVyLgorICBcbGV0XEBzZlxlbXB0eQorICBcaWZobW9kZVxlZGVmXEBzZntcc3BhY2VmYWN0b3JcdGhlXHNwYWNlZmFjdG9yfVxwdGV4c2xhc2hcZmkKKyAgJQorICAlIFJlbW92ZSBpbmFkdmVydGVudCBibGFuayBzcGFjZSBiZWZvcmUgdHlwZXNldHRpbmcgdGhlIGZvb3Rub3RlIG51bWJlci4KKyAgXHVuc2tpcAorICBcdGhpc2Zvb3Rub1xAc2YKKyAgXGRvZm9vdG5vdGUKK30lCisKKyUgRG9uJ3QgYm90aGVyIHdpdGggdGhlIHRyaWNrZXJ5IGluIHBsYWluLnRleCB0byBub3QgcmVxdWlyZSB0aGUKKyUgZm9vdG5vdGUgdGV4dCBhcyBhIHBhcmFtZXRlci4gIE91ciBmb290bm90ZXMgZG9uJ3QgbmVlZCB0byBiZSBzbyBnZW5lcmFsLgorJQorJSBPaCB5ZXMsIHRoZXkgZG87IG90aGVyd2lzZSwgQGlmc2V0IChhbmQgYW55dGhpbmcgZWxzZSB0aGF0IHVzZXMKKyUgXHBhcnNlYXJnbGluZSkgZmFpbHMgaW5zaWRlIGZvb3Rub3RlcyBiZWNhdXNlIHRoZSB0b2tlbnMgYXJlIGZpeGVkIHdoZW4KKyUgdGhlIGZvb3Rub3RlIGlzIHJlYWQuICAtLWthcmwsIDE2bm92OTYuCislCitcZ2RlZlxkb2Zvb3Rub3RleyUKKyAgXGluc2VydFxmb290aW5zXGJncm91cAorICAlIFdlIHdhbnQgdG8gdHlwZXNldCB0aGlzIHRleHQgYXMgYSBub3JtYWwgcGFyYWdyYXBoLCBldmVuIGlmIHRoZQorICAlIGZvb3Rub3RlIHJlZmVyZW5jZSBvY2N1cnMgaW4gKGZvciBleGFtcGxlKSBhIGRpc3BsYXkgZW52aXJvbm1lbnQuCisgICUgU28gcmVzZXQgc29tZSBwYXJhbWV0ZXJzLgorICBcaHNpemU9XHBhZ2V3aWR0aAorICBcaW50ZXJsaW5lcGVuYWx0eVxpbnRlcmZvb3Rub3RlbGluZXBlbmFsdHkKKyAgXHNwbGl0dG9wc2tpcFxodFxzdHJ1dGJveCAlIHRvcCBiYXNlbGluZSBmb3IgYnJva2VuIGZvb3Rub3RlcworICBcc3BsaXRtYXhkZXB0aFxkcFxzdHJ1dGJveAorICBcZmxvYXRpbmdwZW5hbHR5XEBNTQorICBcbGVmdHNraXBcekBza2lwCisgIFxyaWdodHNraXBcekBza2lwCisgIFxzcGFjZXNraXBcekBza2lwCisgIFx4c3BhY2Vza2lwXHpAc2tpcAorICBccGFyaW5kZW50XGRlZmF1bHRwYXJpbmRlbnQKKyAgJQorICBcc21hbGxmb250cyBccm0KKyAgJQorICAlIEJlY2F1c2Ugd2UgdXNlIGhhbmdpbmcgaW5kZW50YXRpb24gaW4gZm9vdG5vdGVzLCBhIEBub2luZGVudCBhcHBlYXJzCisgICUgdG8gZXhkZW50IHRoaXMgdGV4dCwgc28gbWFrZSBpdCBiZSBhIG5vLW9wLiAgbWFrZWluZm8gZG9lcyBub3QgdXNlCisgICUgaGFuZ2luZyBpbmRlbnRhdGlvbiBzbyBAbm9pbmRlbnQgY2FuIHN0aWxsIGJlIG5lZWRlZCB3aXRoaW4gZm9vdG5vdGUKKyAgJSB0ZXh0IGFmdGVyIGFuIEBleGFtcGxlIG9yIHRoZSBsaWtlIChub3QgdGhhdCB0aGlzIGlzIGdvb2Qgc3R5bGUpLgorICBcbGV0XG5vaW5kZW50ID0gXHJlbGF4CisgICUKKyAgJSBIYW5nIHRoZSBmb290bm90ZSB0ZXh0IG9mZiB0aGUgbnVtYmVyLiAgVXNlIFxldmVyeXBhciBpbiBjYXNlIHRoZQorICAlIGZvb3Rub3RlIGV4dGVuZHMgZm9yIG1vcmUgdGhhbiBvbmUgcGFyYWdyYXBoLgorICBcZXZlcnlwYXIgPSB7XGhhbmd9JQorICBcdGV4dGluZGVudHtcdGhpc2Zvb3Rub30lCisgICUKKyAgJSBEb24ndCBjcmFzaCBpbnRvIHRoZSBsaW5lIGFib3ZlIHRoZSBmb290bm90ZSB0ZXh0LiAgU2luY2UgdGhpcworICAlIGV4cGFuZHMgaW50byBhIGJveCwgaXQgbXVzdCBjb21lIHdpdGhpbiB0aGUgcGFyYWdyYXBoLCBsZXN0IGl0CisgICUgcHJvdmlkZSBhIHBsYWNlIHdoZXJlIFRlWCBjYW4gc3BsaXQgdGhlIGZvb3Rub3RlLgorICBcZm9vdHN0cnV0CisgIFxmdXR1cmVsZXRcbmV4dFxmb0B0Cit9Cit9JWVuZCBcY2F0Y29kZSBgXEA9MTEKKworJSBJbiBjYXNlIGEgQGZvb3Rub3RlIGFwcGVhcnMgaW4gYSB2Ym94LCBzYXZlIHRoZSBmb290bm90ZSB0ZXh0IGFuZCBjcmVhdGUKKyUgdGhlIHJlYWwgXGluc2VydCBqdXN0IGFmdGVyIHRoZSB2Ym94IGZpbmlzaGVkLiAgT3RoZXJ3aXNlLCB0aGUgaW5zZXJ0aW9uCislIHdvdWxkIGJlIGxvc3QuCislIFNpbWlsYXJpbHksIGlmIGEgQGZvb3Rub3RlIGFwcGVhcnMgaW5zaWRlIGFuIGFsaWdubWVudCwgc2F2ZSB0aGUgZm9vdG5vdGUKKyUgdGV4dCB0byBhIGJveCBhbmQgbWFrZSB0aGUgXGluc2VydCB3aGVuIGEgcm93IG9mIHRoZSB0YWJsZSBpcyBmaW5pc2hlZC4KKyUgQW5kIHRoZSBzYW1lIGNhbiBiZSBkb25lIGZvciBvdGhlciBpbnNlcnQgY2xhc3Nlcy4gIC0ta2FzYWwsIDE2bm92MDMuCisKKyUgUmVwbGFjZSB0aGUgXGluc2VydCBwcmltaXRpdmUgYnkgYSBjaGVhdGluZyBtYWNyby4KKyUgRGVlcGVyIGluc2lkZSwganVzdCBtYWtlIHN1cmUgdGhhdCB0aGUgc2F2ZWQgaW5zZXJ0aW9ucyBhcmUgbm90IHNwaWxsZWQKKyUgb3V0IHByZW1hdHVyZWx5LgorJQorXGRlZlxzdGFydHNhdmluZ2luc2VydHN7JQorICBcaWZ4IFxpbnNlcnRccHRleGluc2VydAorICAgIFxsZXRcaW5zZXJ0XHNhdmVpbnNlcnQKKyAgXGVsc2UKKyAgICBcbGV0XGNoZWNraW5zZXJ0c1xyZWxheAorICBcZmkKK30KKworJSBUaGlzIFxpbnNlcnQgcmVwbGFjZW1lbnQgd29ya3MgZm9yIGJvdGggXGluc2VydFxmb290aW5ze2Zvb30gYW5kCislIFxpbnNlcnRcZm9vdGluc1xiZ3JvdXAgZm9vXGVncm91cCwgYnV0IGl0IGRvZXNuJ3Qgd29yayBmb3IgXGluc2VydDI3e2Zvb30uCislCitcZGVmXHNhdmVpbnNlcnQjMXslCisgIFxlZGVmXG5leHR7XG5vZXhwYW5kXHNhdmV0b2JveCBcbWFrZVNBVkVuYW1lIzF9JQorICBcYWZ0ZXJhc3NpZ25tZW50XG5leHQKKyAgJSBzd2FsbG93IHRoZSBsZWZ0IGJyYWNlCisgIFxsZXRcdGVtcCA9Cit9CitcZGVmXG1ha2VTQVZFbmFtZSMxe1xtYWtlY3NuYW1le1NBVkVcZXhwYW5kYWZ0ZXJcZ29iYmxlXHN0cmluZyMxfX0KK1xkZWZcc2F2ZXRvYm94IzF7XGdsb2JhbFxzZXRib3gjMSA9IFx2Ym94XGJncm91cCBcdW52Ym94IzF9CisKK1xkZWZcY2hlY2tzYXZlaW5zIzF7XGlmdm9pZCMxXGVsc2UgXHBsYWNlc2F2ZWlucyMxXGZpfQorCitcZGVmXHBsYWNlc2F2ZWlucyMxeyUKKyAgXHB0ZXhpbnNlcnQgXGNzbmFtZVxleHBhbmRhZnRlclxnb2JibGVzYXZlXHN0cmluZyMxXGVuZGNzbmFtZQorICAgIHtcYm94IzF9JQorfQorCislIGVhdCBAU0FWRSAtLSBiZXdhcmUsIGFsbCBvZiB0aGVtIGhhdmUgY2F0Y29kZSBcb3RoZXI6Cit7CisgIFxkZWZcZG9zcGVjaWFsc3tcZG8gU1xkbyBBXGRvIFZcZG8gRX0gXHVuY2F0Y29kZXNwZWNpYWxzICAlICA7LSkKKyAgXGdkZWZcZ29iYmxlc2F2ZSBAU0FWRXt9Cit9CisKKyUgaW5pdGlhbGl6YXRpb246CitcZGVmXG5ld3NhdmVpbnMgIzF7JQorICBcZWRlZlxuZXh0e1xub2V4cGFuZFxuZXdzYXZlaW5zWCBcbWFrZVNBVkVuYW1lIzF9JQorICBcbmV4dAorfQorXGRlZlxuZXdzYXZlaW5zWCAjMXslCisgIFxjc25hbWUgbmV3Ym94XGVuZGNzbmFtZSAjMSUKKyAgXGV4cGFuZGFmdGVyXGRlZlxleHBhbmRhZnRlclxjaGVja2luc2VydHNcZXhwYW5kYWZ0ZXJ7XGNoZWNraW5zZXJ0cworICAgIFxjaGVja3NhdmVpbnMgIzF9JQorfQorCislIGluaXRpYWxpemU6CitcbGV0XGNoZWNraW5zZXJ0c1xlbXB0eQorXG5ld3NhdmVpbnNcZm9vdGlucworXG5ld3NhdmVpbnNcbWFyZ2luCisKKworJSBAaW1hZ2UuICBXZSB1c2UgdGhlIG1hY3JvcyBmcm9tIGVwc2YudGV4IHRvIHN1cHBvcnQgdGhpcy4KKyUgSWYgZXBzZi50ZXggaXMgbm90IGluc3RhbGxlZCBhbmQgQGltYWdlIGlzIHVzZWQsIHdlIGNvbXBsYWluLgorJQorJSBDaGVjayBmb3IgYW5kIHJlYWQgZXBzZi50ZXggdXAgZnJvbnQuICBJZiB3ZSByZWFkIGl0IG9ubHkgYXQgQGltYWdlCislIHRpbWUsIHdlIG1pZ2h0IGJlIGluc2lkZSBhIGdyb3VwLCBhbmQgdGhlbiBpdHMgZGVmaW5pdGlvbnMgd291bGQgZ2V0CislIHVuZG9uZSBhbmQgdGhlIG5leHQgaW1hZ2Ugd291bGQgZmFpbC4KK1xvcGVuaW4gMSA9IGVwc2YudGV4CitcaWZlb2YgMSBcZWxzZQorICAlIERvIG5vdCBib3RoZXIgc2hvd2luZyBiYW5uZXIgd2l0aCBlcHNmLnRleCB2Mi43ayAoYXZhaWxhYmxlIGluCisgICUgZG9jL2Vwc2YudGV4IGFuZCBvbiBjdGFuKS4KKyAgXGRlZlxlcHNmYW5ub3VuY2V7XHRva3MwID0gfSUKKyAgXGlucHV0IGVwc2YudGV4CitcZmkKK1xjbG9zZWluIDEKKyUKKyUgV2Ugd2lsbCBvbmx5IGNvbXBsYWluIG9uY2UgYWJvdXQgbGFjayBvZiBlcHNmLnRleC4KK1xuZXdpZlxpZndhcm5lZG5vZXBzZgorXG5ld2hlbHBcbm9lcHNmaGVscHtlcHNmLnRleCBtdXN0IGJlIGluc3RhbGxlZCBmb3IgaW1hZ2VzIHRvCisgIHdvcmsuICBJdCBpcyBhbHNvIGluY2x1ZGVkIGluIHRoZSBUZXhpbmZvIGRpc3RyaWJ1dGlvbiwgb3IgeW91IGNhbiBnZXQKKyAgaXQgZnJvbSBmdHA6Ly90dWcub3JnL3RleC9lcHNmLnRleC59CislCitcZGVmXGltYWdlIzF7JQorICBcaWZ4XGVwc2Zib3hcdW5kZWZpbmVkCisgICAgXGlmd2FybmVkbm9lcHNmIFxlbHNlCisgICAgICBcZXJyaGVscCA9IFxub2Vwc2ZoZWxwCisgICAgICBcZXJybWVzc2FnZXtlcHNmLnRleCBub3QgZm91bmQsIGltYWdlcyB3aWxsIGJlIGlnbm9yZWR9JQorICAgICAgXGdsb2JhbFx3YXJuZWRub2Vwc2Z0cnVlCisgICAgXGZpCisgIFxlbHNlCisgICAgXGltYWdleHh4ICMxLCwsLCxcZmluaXNoCisgIFxmaQorfQorJQorJSBBcmd1bWVudHMgdG8gQGltYWdlOgorJSAjMSBpcyAobWFuZGF0b3J5KSBpbWFnZSBmaWxlbmFtZTsgd2UgdGFjayBvbiAuZXBzIGV4dGVuc2lvbi4KKyUgIzIgaXMgKG9wdGlvbmFsKSB3aWR0aCwgIzMgaXMgKG9wdGlvbmFsKSBoZWlnaHQuCislICM0IGlzIChpZ25vcmVkIG9wdGlvbmFsKSBodG1sIGFsdCB0ZXh0LgorJSAjNSBpcyAoaWdub3JlZCBvcHRpb25hbCkgZXh0ZW5zaW9uLgorJSAjNiBpcyBqdXN0IHRoZSB1c3VhbCBleHRyYSBpZ25vcmVkIGFyZyBmb3IgcGFyc2luZyB0aGlzIHN0dWZmLgorXG5ld2lmXGlmaW1hZ2V2bW9kZQorXGRlZlxpbWFnZXh4eCMxLCMyLCMzLCM0LCM1LCM2XGZpbmlzaHtcYmVnaW5ncm91cAorICBcY2F0Y29kZWBcXl5NID0gNSAgICAgJSBpbiBjYXNlIHdlJ3JlIGluc2lkZSBhbiBleGFtcGxlCisgIFxub3JtYWx0dXJub2ZmYWN0aXZlICAlIGFsbG93IF8gZXQgYWwuIGluIG5hbWVzCisgICUgSWYgdGhlIGltYWdlIGlzIGJ5IGl0c2VsZiwgY2VudGVyIGl0LgorICBcaWZ2bW9kZQorICAgIFxpbWFnZXZtb2RldHJ1ZQorICAgIFxub2JyZWFrXGJpZ3NraXAKKyAgICAlIFVzdWFsbHkgd2UnbGwgaGF2ZSB0ZXh0IGFmdGVyIHRoZSBpbWFnZSB3aGljaCB3aWxsIGluc2VydAorICAgICUgXHBhcnNraXAgZ2x1ZSwgc28gaW5zZXJ0IGl0IGhlcmUgdG9vIHRvIGVxdWFsaXplIHRoZSBzcGFjZQorICAgICUgYWJvdmUgYW5kIGJlbG93LgorICAgIFxub2JyZWFrXHZza2lwXHBhcnNraXAKKyAgICBcbm9icmVhaworICAgIFxsaW5lXGJncm91cAorICBcZmkKKyAgJQorICAlIE91dHB1dCB0aGUgaW1hZ2UuCisgIFxpZnBkZgorICAgIFxkb3BkZmltYWdleyMxfXsjMn17IzN9JQorICBcZWxzZQorICAgICUgXGVwc2Zib3ggaXRzZWxmIHJlc2V0cyBcZXBzZj9zaXplIGF0IGVhY2ggZmlndXJlLgorICAgIFxzZXRib3gwID0gXGhib3h7XGlnbm9yZXNwYWNlcyAjMn1caWZkaW1cd2QwID4gMHB0IFxlcHNmeHNpemU9IzJccmVsYXggXGZpCisgICAgXHNldGJveDAgPSBcaGJveHtcaWdub3Jlc3BhY2VzICMzfVxpZmRpbVx3ZDAgPiAwcHQgXGVwc2Z5c2l6ZT0jM1xyZWxheCBcZmkKKyAgICBcZXBzZmJveHsjMS5lcHN9JQorICBcZmkKKyAgJQorICBcaWZpbWFnZXZtb2RlIFxlZ3JvdXAgXGJpZ2JyZWFrIFxmaSAgJSBzcGFjZSBhZnRlciB0aGUgaW1hZ2UKK1xlbmRncm91cH0KKworCislIEBmbG9hdCBGTE9BVFRZUEUsTEFCRUwsTE9DIC4uLiBAZW5kIGZsb2F0IGZvciBkaXNwbGF5ZWQgZmlndXJlcywgdGFibGVzLAorJSBldGMuICBXZSBkb24ndCBhY3R1YWxseSBpbXBsZW1lbnQgZmxvYXRpbmcgeWV0LCB3ZSBhbHdheXMgaW5jbHVkZSB0aGUKKyUgZmxvYXQgImhlcmUiLiAgQnV0IGl0IHNlZW1lZCB0aGUgYmVzdCBuYW1lIGZvciB0aGUgZnV0dXJlLgorJQorXGVudnBhcnNlYXJnZGVmXGZsb2F0e1xlYXRjb21tYXNwYWNlXGVhdGNvbW1hc3BhY2VcZG9mbG9hdCMxLCAsICxcZmluaXNofQorCislIFRoZXJlIG1heSBiZSBhIHNwYWNlIGJlZm9yZSBzZWNvbmQgYW5kL29yIHRoaXJkIHBhcmFtZXRlcjsgZGVsZXRlIGl0LgorXGRlZlxlYXRjb21tYXNwYWNlIzEsIHsjMSx9CisKKyUgIzEgaXMgdGhlIG9wdGlvbmFsIEZMT0FUVFlQRSwgdGhlIHRleHQgbGFiZWwgZm9yIHRoaXMgZmxvYXQsIHR5cGljYWxseQorJSAiRmlndXJlIiwgIlRhYmxlIiwgIkV4YW1wbGUiLCBldGMuICBDYW4ndCBjb250YWluIGNvbW1hcy4gIElmIG9taXR0ZWQsCislIHRoaXMgZmxvYXQgd2lsbCBub3QgYmUgbnVtYmVyZWQgYW5kIGNhbm5vdCBiZSByZWZlcnJlZCB0by4KKyUKKyUgIzIgaXMgdGhlIG9wdGlvbmFsIHhyZWYgbGFiZWwuICBBbHNvIG11c3QgYmUgcHJlc2VudCBmb3IgdGhlIGZsb2F0IHRvCislIGJlIHJlZmVyYWJsZS4KKyUKKyUgIzMgaXMgdGhlIG9wdGlvbmFsIHBvc2l0aW9uaW5nIGFyZ3VtZW50OyBmb3Igbm93LCBpdCBpcyBpZ25vcmVkLiAgSXQKKyUgd2lsbCBzb21laG93IHNwZWNpZnkgdGhlIHBvc2l0aW9ucyBhbGxvd2VkIHRvIGZsb2F0IHRvIChoZXJlLCB0b3AsIGJvdHRvbSkuCislCislIFdlIGtlZXAgYSBzZXBhcmF0ZSBjb3VudGVyIGZvciBlYWNoIEZMT0FUVFlQRSwgd2hpY2ggd2UgcmVzZXQgYXQgZWFjaAorJSBjaGFwdGVyLWxldmVsIGNvbW1hbmQuCitcbGV0XHJlc2V0YWxsZmxvYXRub3M9XGVtcHR5CislCitcZGVmXGRvZmxvYXQjMSwjMiwjMywjNFxmaW5pc2h7JQorICBcbGV0XHRoaXNjYXB0aW9uPVxlbXB0eQorICBcbGV0XHRoaXNzaG9ydGNhcHRpb249XGVtcHR5CisgICUKKyAgJSBkb24ndCBsb3NlIGZvb3Rub3RlcyBpbnNpZGUgQGZsb2F0LgorICAlCisgICUgQkVXQVJFOiB3aGVuIHRoZSBmbG9hdHMgc3RhcnQgZmxvYXQsIHdlIGhhdmUgdG8gaXNzdWUgd2FybmluZyB3aGVuZXZlciBhbgorICAlIGluc2VydCBhcHBlYXJzIGluc2lkZSBhIGZsb2F0IHdoaWNoIGNvdWxkIHBvc3NpYmx5IGZsb2F0LiAtLWthc2FsLCAyNm1heTA0CisgICUKKyAgXHN0YXJ0c2F2aW5naW5zZXJ0cworICAlCisgICUgV2UgY2FuJ3QgYmUgdXNlZCBpbnNpZGUgYSBwYXJhZ3JhcGguCisgIFxwYXIKKyAgJQorICBcdnRvcFxiZ3JvdXAKKyAgICBcZGVmXGZsb2F0dHlwZXsjMX0lCisgICAgXGRlZlxmbG9hdGxhYmVseyMyfSUKKyAgICBcZGVmXGZsb2F0bG9jeyMzfSUgd2UgZG8gbm90aGluZyB3aXRoIHRoaXMgeWV0LgorICAgICUKKyAgICBcaWZ4XGZsb2F0dHlwZVxlbXB0eQorICAgICAgXGxldFxzYWZlZmxvYXR0eXBlPVxlbXB0eQorICAgIFxlbHNlCisgICAgICB7JQorICAgICAgICAlIHRoZSBmbG9hdHR5cGUgbWlnaHQgaGF2ZSBhY2NlbnRzIG9yIG90aGVyIHNwZWNpYWwgY2hhcmFjdGVycywKKyAgICAgICAgJSBidXQgd2UgbmVlZCB0byB1c2UgaXQgaW4gYSBjb250cm9sIHNlcXVlbmNlIG5hbWUuCisgICAgICAgIFxpbmRleG5vZm9udHMKKyAgICAgICAgXHR1cm5vZmZhY3RpdmUKKyAgICAgICAgXHhkZWZcc2FmZWZsb2F0dHlwZXtcZmxvYXR0eXBlfSUKKyAgICAgIH0lCisgICAgXGZpCisgICAgJQorICAgICUgSWYgbGFiZWwgaXMgZ2l2ZW4gYnV0IG5vIHR5cGUsIHdlIGhhbmRsZSB0aGF0IGFzIHRoZSBlbXB0eSB0eXBlLgorICAgIFxpZnhcZmxvYXRsYWJlbFxlbXB0eSBcZWxzZQorICAgICAgJSBXZSB3YW50IGVhY2ggRkxPQVRUWVBFIHRvIGJlIG51bWJlcmVkIHNlcGFyYXRlbHkgKEZpZ3VyZSAxLAorICAgICAgJSBUYWJsZSAxLCBGaWd1cmUgMiwgLi4uKS4gIChBbmQgaWYgbm8gbGFiZWwsIG5vIG51bWJlci4pCisgICAgICAlCisgICAgICBcZXhwYW5kYWZ0ZXJcZ2V0ZmxvYXRub1xjc25hbWVcc2FmZWZsb2F0dHlwZSBmbG9hdG5vXGVuZGNzbmFtZQorICAgICAgXGdsb2JhbFxhZHZhbmNlXGZsb2F0bm8gYnkgMQorICAgICAgJQorICAgICAgeyUKKyAgICAgICAgJSBUaGlzIG1hZ2ljIHZhbHVlIGZvciBcdGhpc3NlY3Rpb24gaXMgb3V0cHV0IGJ5IFxzZXRyZWYgYXMgdGhlCisgICAgICAgICUgWFJFRkxBQkVMLXRpdGxlIHZhbHVlLiAgXHhyZWZYIHVzZXMgaXQgdG8gZGlzdGluZ3Vpc2ggZmxvYXQKKyAgICAgICAgJSBsYWJlbHMgKHdoaWNoIGhhdmUgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCBvdXRwdXQgZm9ybWF0KSBmcm9tCisgICAgICAgICUgbm9kZSBhbmQgYW5jaG9yIGxhYmVscy4gIEFuZCBceHJkZWYgdXNlcyBpdCB0byBjb25zdHJ1Y3QgdGhlCisgICAgICAgICUgbGlzdHMgb2YgZmxvYXRzLgorICAgICAgICAlCisgICAgICAgIFxlZGVmXHRoaXNzZWN0aW9ue1xmbG9hdG1hZ2ljPVxzYWZlZmxvYXR0eXBlfSUKKyAgICAgICAgXHNldHJlZntcZmxvYXRsYWJlbH17WWZsb2F0fSUKKyAgICAgIH0lCisgICAgXGZpCisgICAgJQorICAgICUgc3RhcnQgd2l0aCBccGFyc2tpcCBnbHVlLCBJIGd1ZXNzLgorICAgIFx2c2tpcFxwYXJza2lwCisgICAgJQorICAgICUgRG9uJ3Qgc3VwcHJlc3MgaW5kZW50YXRpb24gaWYgYSBmbG9hdCBoYXBwZW5zIHRvIHN0YXJ0IGEgc2VjdGlvbi4KKyAgICBccmVzdG9yZWZpcnN0cGFyYWdyYXBoaW5kZW50Cit9CisKKyUgd2UgaGF2ZSB0aGVzZSBwb3NzaWJpbGl0aWVzOgorJSBAZmxvYXQgRm9vLGxibCAmIEBjYXB0aW9ue0NhcH06IEZvbyAxLjE6IENhcAorJSBAZmxvYXQgRm9vLGxibCAmIG5vIGNhcHRpb246ICAgIEZvbyAxLjEKKyUgQGZsb2F0IEZvbyAmIEBjYXB0aW9ue0NhcH06ICAgICBGb286IENhcAorJSBAZmxvYXQgRm9vICYgbm8gY2FwdGlvbjogICAgICAgIEZvbworJSBAZmxvYXQgLGxibCAmIENhcHRpb257Q2FwfTogICAgIDEuMTogQ2FwCislIEBmbG9hdCAsbGJsICYgbm8gY2FwdGlvbjogICAgICAgMS4xCislIEBmbG9hdCAmIEBjYXB0aW9ue0NhcH06ICAgICAgICAgQ2FwCislIEBmbG9hdCAmIG5vIGNhcHRpb246CislCitcZGVmXEVmbG9hdHslCisgICAgXGxldFxmbG9hdGlkZW50ID0gXGVtcHR5CisgICAgJQorICAgICUgSW4gYWxsIGNhc2VzLCBpZiB3ZSBoYXZlIGEgZmxvYXQgdHlwZSwgaXQgY29tZXMgZmlyc3QuCisgICAgXGlmeFxmbG9hdHR5cGVcZW1wdHkgXGVsc2UgXGRlZlxmbG9hdGlkZW50e1xmbG9hdHR5cGV9XGZpCisgICAgJQorICAgICUgSWYgd2UgaGF2ZSBhbiB4cmVmIGxhYmVsLCB0aGUgbnVtYmVyIGNvbWVzIG5leHQuCisgICAgXGlmeFxmbG9hdGxhYmVsXGVtcHR5IFxlbHNlCisgICAgICBcaWZ4XGZsb2F0dHlwZVxlbXB0eSBcZWxzZSAlIGlmIGFsc28gaGFkIGZsb2F0IHR5cGUsIG5lZWQgdGllIGZpcnN0LgorICAgICAgICBcYXBwZW5kdG9tYWNyb1xmbG9hdGlkZW50e1x0aWV9JQorICAgICAgXGZpCisgICAgICAlIHRoZSBudW1iZXIuCisgICAgICBcYXBwZW5kdG9tYWNyb1xmbG9hdGlkZW50e1xjaGFwbGV2ZWxwcmVmaXhcdGhlXGZsb2F0bm99JQorICAgIFxmaQorICAgICUKKyAgICAlIFN0YXJ0IHRoZSBwcmludGVkIGNhcHRpb24gd2l0aCB3aGF0IHdlJ3ZlIGNvbnN0cnVjdGVkIGluCisgICAgJSBcZmxvYXRpZGVudCwgYnV0IGtlZXAgaXQgc2VwYXJhdGU7IHdlIG5lZWQgXGZsb2F0aWRlbnQgYWdhaW4uCisgICAgXGxldFxjYXB0aW9ubGluZSA9IFxmbG9hdGlkZW50CisgICAgJQorICAgIFxpZnhcdGhpc2NhcHRpb25cZW1wdHkgXGVsc2UKKyAgICAgIFxpZnhcZmxvYXRpZGVudFxlbXB0eSBcZWxzZQorCVxhcHBlbmR0b21hY3JvXGNhcHRpb25saW5lezogfSUgaGFkIGlkZW50LCBzbyBuZWVkIGEgY29sb24gYmV0d2VlbgorICAgICAgXGZpCisgICAgICAlCisgICAgICAlIGNhcHRpb24gdGV4dC4KKyAgICAgIFxhcHBlbmR0b21hY3JvXGNhcHRpb25saW5le1xzY2FuZXhwXHRoaXNjYXB0aW9ufSUKKyAgICBcZmkKKyAgICAlCisgICAgJSBJZiB3ZSBoYXZlIGFueXRoaW5nIHRvIHByaW50LCBwcmludCBpdCwgd2l0aCBzcGFjZSBiZWZvcmUuCisgICAgJSBFdmVudHVhbGx5IHRoaXMgbmVlZHMgdG8gYmVjb21lIGFuIFxpbnNlcnQuCisgICAgXGlmeFxjYXB0aW9ubGluZVxlbXB0eSBcZWxzZQorICAgICAgXHZza2lwLjVccGFyc2tpcAorICAgICAgXGNhcHRpb25saW5lCisgICAgICAlCisgICAgICAlIFNwYWNlIGJlbG93IGNhcHRpb24uCisgICAgICBcdnNraXBccGFyc2tpcAorICAgIFxmaQorICAgICUKKyAgICAlIElmIGhhdmUgYW4geHJlZiBsYWJlbCwgd3JpdGUgdGhlIGxpc3Qgb2YgZmxvYXRzIGluZm8uICBEbyB0aGlzCisgICAgJSBhZnRlciB0aGUgY2FwdGlvbiwgdG8gYXZvaWQgY2hhbmNlIG9mIGl0IGJlaW5nIGEgYnJlYWtwb2ludC4KKyAgICBcaWZ4XGZsb2F0bGFiZWxcZW1wdHkgXGVsc2UKKyAgICAgICUgV3JpdGUgdGhlIHRleHQgdGhhdCBnb2VzIGluIHRoZSBsb2YgdG8gdGhlIGF1eCBmaWxlIGFzCisgICAgICAlIFxmbG9hdGxhYmVsLWxvZi4gIEJlc2lkZXMgXGZsb2F0aWRlbnQsIHdlIGluY2x1ZGUgdGhlIHNob3J0CisgICAgICAlIGNhcHRpb24gaWYgc3BlY2lmaWVkLCBlbHNlIHRoZSBmdWxsIGNhcHRpb24gaWYgc3BlY2lmaWVkLCBlbHNlIG5vdGhpbmcuCisgICAgICB7JQorICAgICAgICBcYXRkdW1taWVzCisgICAgICAgICUKKyAgICAgICAgJSBzaW5jZSB3ZSByZWFkIHRoZSBjYXB0aW9uIHRleHQgaW4gdGhlIG1hY3JvIHdvcmxkLCB3aGVyZSBeXk0KKyAgICAgICAgJSBpcyB0dXJuZWQgaW50byBhIG5vcm1hbCBjaGFyYWN0ZXIsIHdlIGhhdmUgdG8gc2NhbiBpdCBiYWNrLCBzbworICAgICAgICAlIHdlIGRvbid0IHdyaXRlIHRoZSBsaXRlcmFsIHRocmVlIGNoYXJhY3RlcnMgIl5eTSIgaW50byB0aGUgYXV4IGZpbGUuCisJXHNjYW5leHB7JQorCSAgXHhkZWZcbm9leHBhbmRcZ3RlbXB7JQorCSAgICBcaWZ4XHRoaXNzaG9ydGNhcHRpb25cZW1wdHkKKwkgICAgICBcdGhpc2NhcHRpb24KKwkgICAgXGVsc2UKKwkgICAgICBcdGhpc3Nob3J0Y2FwdGlvbgorCSAgICBcZmkKKwkgIH0lCisJfSUKKyAgICAgICAgXGltbWVkaWF0ZVx3cml0ZVxhdXhmaWxle0B4cmRlZntcZmxvYXRsYWJlbC1sb2Z9e1xmbG9hdGlkZW50CisJICBcaWZ4XGd0ZW1wXGVtcHR5IFxlbHNlIDogXGd0ZW1wIFxmaX19JQorICAgICAgfSUKKyAgICBcZmkKKyAgXGVncm91cCAgJSBlbmQgb2YgXHZ0b3AKKyAgJQorICAlIHBsYWNlIHRoZSBjYXB0dXJlZCBpbnNlcnRzCisgICUKKyAgJSBCRVdBUkU6IHdoZW4gdGhlIGZsb2F0cyBzdGFydCBmbG9hdGluZywgd2UgaGF2ZSB0byBpc3N1ZSB3YXJuaW5nCisgICUgd2hlbmV2ZXIgYW4gaW5zZXJ0IGFwcGVhcnMgaW5zaWRlIGEgZmxvYXQgd2hpY2ggY291bGQgcG9zc2libHkKKyAgJSBmbG9hdC4gLS1rYXNhbCwgMjZtYXkwNAorICAlCisgIFxjaGVja2luc2VydHMKK30KKworJSBBcHBlbmQgdGhlIHRva2VucyAjMiB0byB0aGUgZGVmaW5pdGlvbiBvZiBtYWNybyAjMSwgbm90IGV4cGFuZGluZyBlaXRoZXIuCislCitcZGVmXGFwcGVuZHRvbWFjcm8jMSMyeyUKKyAgXGV4cGFuZGFmdGVyXGRlZlxleHBhbmRhZnRlciMxXGV4cGFuZGFmdGVyeyMxIzJ9JQorfQorCislIEBjYXB0aW9uLCBAc2hvcnRjYXB0aW9uCislCitcZGVmXGNhcHRpb257XGRvY2FwdGlvblx0aGlzY2FwdGlvbn0KK1xkZWZcc2hvcnRjYXB0aW9ue1xkb2NhcHRpb25cdGhpc3Nob3J0Y2FwdGlvbn0KK1xkZWZcZG9jYXB0aW9ue1xjaGVja2VudlxmbG9hdCBcYmdyb3VwXHNjYW5hcmdjdHh0XGRlZmNhcHRpb259CitcZGVmXGRlZmNhcHRpb24jMSMye1xlZ3JvdXAgXGRlZiMxeyMyfX0KKworJSBUaGUgcGFyYW1ldGVyIGlzIHRoZSBjb250cm9sIHNlcXVlbmNlIGlkZW50aWZ5aW5nIHRoZSBjb3VudGVyIHdlIGFyZQorJSBnb2luZyB0byB1c2UuICBDcmVhdGUgaXQgaWYgaXQgZG9lc24ndCBleGlzdCBhbmQgYXNzaWduIGl0IHRvIFxmbG9hdG5vLgorXGRlZlxnZXRmbG9hdG5vIzF7JQorICBcaWZ4IzFccmVsYXgKKyAgICAgICUgSGF2ZW4ndCBzZWVuIHRoaXMgZmlndXJlIHR5cGUgYmVmb3JlLgorICAgICAgXGNzbmFtZSBuZXdjb3VudFxlbmRjc25hbWUgIzElCisgICAgICAlCisgICAgICAlIFJlbWVtYmVyIHRvIHJlc2V0IHRoaXMgZmxvYXRubyBhdCB0aGUgbmV4dCBjaGFwLgorICAgICAgXGV4cGFuZGFmdGVyXGdkZWZcZXhwYW5kYWZ0ZXJccmVzZXRhbGxmbG9hdG5vcworICAgICAgICBcZXhwYW5kYWZ0ZXJ7XHJlc2V0YWxsZmxvYXRub3MgIzE9MCB9JQorICBcZmkKKyAgXGxldFxmbG9hdG5vIzElCit9CisKKyUgXHNldHJlZiBjYWxscyB0aGlzIHRvIGdldCB0aGUgWFJFRkxBQkVMLXNudCB2YWx1ZS4gIFdlIHdhbnQgYW4gQHhyZWYKKyUgdG8gdGhlIEZMT0FUTEFCRUwgdG8gZXhwYW5kIHRvICJGaWd1cmUgMy4xIi4gIFdlIGNhbGwgXHNldHJlZiB3aGVuIHdlCislIGZpcnN0IHJlYWQgdGhlIEBmbG9hdCBjb21tYW5kLgorJQorXGRlZlxZZmxvYXR7XGZsb2F0dHlwZUB0aWUgXGNoYXBsZXZlbHByZWZpeFx0aGVcZmxvYXRub30lCisKKyUgTWFnaWMgc3RyaW5nIHVzZWQgZm9yIHRoZSBYUkVGTEFCRUwtdGl0bGUgdmFsdWUsIHNvIFx4cmVmWCBjYW4KKyUgZGlzdGluZ3Vpc2ggZmxvYXRzIGZyb20gb3RoZXIgeHJlZiB0eXBlcy4KK1xkZWZcZmxvYXRtYWdpY3shIWZsb2F0ISF9CisKKyUgIzEgaXMgdGhlIGNvbnRyb2wgc2VxdWVuY2Ugd2UgYXJlIHBhc3NlZDsgd2UgZXhwYW5kIGludG8gYSBjb25kaXRpb25hbAorJSB3aGljaCBpcyB0cnVlIGlmICMxIHJlcHJlc2VudHMgYSBmbG9hdCByZWYuICBUaGF0IGlzLCB0aGUgbWFnaWMKKyUgXHRoaXNzZWN0aW9uIHZhbHVlIHdoaWNoIHdlIFxzZXRyZWYgYWJvdmUuCislCitcZGVmXGlmZmxvYXQjMXtcZXhwYW5kYWZ0ZXJcZG9pZmZsb2F0IzE9PVxmaW5pc2h9CislCislICMxIGlzIChtYXliZSkgdGhlIFxmbG9hdG1hZ2ljIHN0cmluZy4gIElmIHNvLCAjMiB3aWxsIGJlIHRoZQorJSAoc2FmZSkgZmxvYXQgdHlwZSBmb3IgdGhpcyBmbG9hdC4gIFdlIHNldCBcaWZmbG9hdHR5cGUgdG8gIzIuCislCitcZGVmXGRvaWZmbG9hdCMxPSMyPSMzXGZpbmlzaHslCisgIFxkZWZcdGVtcHsjMX0lCisgIFxkZWZcaWZmbG9hdHR5cGV7IzJ9JQorICBcaWZ4XHRlbXBcZmxvYXRtYWdpYworfQorCislIEBsaXN0b2ZmbG9hdHMgRkxPQVRUWVBFIC0gcHJpbnQgYSBsaXN0IG9mIGZsb2F0cyBsaWtlIGEgdGFibGUgb2YgY29udGVudHMuCislCitccGFyc2VhcmdkZWZcbGlzdG9mZmxvYXRzeyUKKyAgXGRlZlxmbG9hdHR5cGV7IzF9JSBmbG9hdHR5cGUKKyAgeyUKKyAgICAlIHRoZSBmbG9hdHR5cGUgbWlnaHQgaGF2ZSBhY2NlbnRzIG9yIG90aGVyIHNwZWNpYWwgY2hhcmFjdGVycywKKyAgICAlIGJ1dCB3ZSBuZWVkIHRvIHVzZSBpdCBpbiBhIGNvbnRyb2wgc2VxdWVuY2UgbmFtZS4KKyAgICBcaW5kZXhub2ZvbnRzCisgICAgXHR1cm5vZmZhY3RpdmUKKyAgICBceGRlZlxzYWZlZmxvYXR0eXBle1xmbG9hdHR5cGV9JQorICB9JQorICAlCisgICUgXHhyZGVmIHNhdmVzIHRoZSBmbG9hdHMgYXMgYSBcZG8tbGlzdCBpbiBcZmxvYXRsaXN0U0FGRUZMT0FUVFlQRS4KKyAgXGV4cGFuZGFmdGVyXGlmeFxjc25hbWUgZmxvYXRsaXN0XHNhZmVmbG9hdHR5cGVcZW5kY3NuYW1lIFxyZWxheAorICAgIFxpZmhhdmV4cmVmcworICAgICAgJSBpZiB0aGUgdXNlciBzYWlkIEBsaXN0b2ZmbG9hdHMgZm9vIGJ1dCBuZXZlciBAZmxvYXQgZm9vLgorICAgICAgXG1lc3NhZ2V7XGxpbmVudW1iZXIgTm8gYFxzYWZlZmxvYXR0eXBlJyBmbG9hdHMgdG8gbGlzdC59JQorICAgIFxmaQorICBcZWxzZQorICAgIFxiZWdpbmdyb3VwCisgICAgICBcbGVmdHNraXA9XHRvY2luZGVudCAgJSBpbmRlbnQgdGhlc2UgZW50cmllcyBsaWtlIGEgdG9jCisgICAgICBcbGV0XGRvPVxsaXN0b2ZmbG9hdHNkbworICAgICAgXGNzbmFtZSBmbG9hdGxpc3Rcc2FmZWZsb2F0dHlwZVxlbmRjc25hbWUKKyAgICBcZW5kZ3JvdXAKKyAgXGZpCit9CisKKyUgVGhpcyBpcyBjYWxsZWQgb24gZWFjaCBlbnRyeSBpbiBhIGxpc3Qgb2YgZmxvYXRzLiAgV2UncmUgcGFzc2VkIHRoZQorJSB4cmVmIGxhYmVsLCBpbiB0aGUgZm9ybSBMQUJFTC10aXRsZSwgd2hpY2ggaXMgaG93IHdlIHNhdmUgaXQgaW4gdGhlCislIGF1eCBmaWxlLiAgV2Ugc3RyaXAgb2ZmIHRoZSAtdGl0bGUgYW5kIGxvb2sgdXAgXFhSTEFCRUwtbG9mLCB3aGljaAorJSBoYXMgdGhlIHRleHQgd2UncmUgc3VwcG9zZWQgdG8gdHlwZXNldCBoZXJlLgorJQorJSBGaWd1cmVzIHdpdGhvdXQgeHJlZiBsYWJlbHMgd2lsbCBub3QgYmUgaW5jbHVkZWQgaW4gdGhlIGxpc3QgKHNpbmNlCislIHRoZXkgd29uJ3QgYXBwZWFyIGluIHRoZSBhdXggZmlsZSkuCislCitcZGVmXGxpc3RvZmZsb2F0c2RvIzF7XGxpc3RvZmZsb2F0c2RvZW50cnkjMVxmaW5pc2h9CitcZGVmXGxpc3RvZmZsb2F0c2RvZW50cnkjMS10aXRsZVxmaW5pc2h7eyUKKyAgJSBDYW4ndCBmdWxseSBleHBhbmQgWFIjMS1sb2YgYmVjYXVzZSBpdCBjYW4gY29udGFpbiBhbnl0aGluZy4gIEp1c3QKKyAgJSBwYXNzIHRoZSBjb250cm9sIHNlcXVlbmNlLiAgT24gdGhlIG90aGVyIGhhbmQsIFhSIzEtcGcgaXMganVzdCB0aGUKKyAgJSBwYWdlIG51bWJlciwgYW5kIHdlIHdhbnQgdG8gZnVsbHkgZXhwYW5kIHRoYXQgc28gd2UgY2FuIGdldCBhIGxpbmsKKyAgJSBpbiBwZGYgb3V0cHV0LgorICBcdG9rc0EgPSBcZXhwYW5kYWZ0ZXJ7XGNzbmFtZSBYUiMxLWxvZlxlbmRjc25hbWV9JQorICAlCisgICUgdXNlIHRoZSBzYW1lIFxlbnRyeSBtYWNybyB3ZSB1c2UgdG8gZ2VuZXJhdGUgdGhlIFRPQyBhbmQgaW5kZXguCisgIFxlZGVmXHdyaXRlZW50cnl7XG5vZXhwYW5kXGVudHJ5e1x0aGVcdG9rc0F9e1xjc25hbWUgWFIjMS1wZ1xlbmRjc25hbWV9fSUKKyAgXHdyaXRlZW50cnkKK319CisKKworXG1lc3NhZ2V7bG9jYWxpemF0aW9uLH0KKworJSBAZG9jdW1lbnRsYW5ndWFnZSBpcyB1c3VhbGx5IGdpdmVuIHZlcnkgZWFybHksIGp1c3QgYWZ0ZXIKKyUgQHNldGZpbGVuYW1lLiAgSWYgZG9uZSB0b28gbGF0ZSwgaXQgbWF5IG5vdCBvdmVycmlkZSBldmVyeXRoaW5nCislIHByb3Blcmx5LiAgU2luZ2xlIGFyZ3VtZW50IGlzIHRoZSBsYW5ndWFnZSBhYmJyZXZpYXRpb24uCislIEl0IHdvdWxkIGJlIG5pY2UgaWYgd2UgY291bGQgc2V0IHVwIGEgaHlwaGVuYXRpb24gZmlsZSBoZXJlLgorJQorXHBhcnNlYXJnZGVmXGRvY3VtZW50bGFuZ3VhZ2V7JQorICBcdGV4ICUgcmVhZCB0eGktPz8udGV4IGZpbGUgaW4gcGxhaW4gVGVYLgorICAgICUgUmVhZCB0aGUgZmlsZSBpZiBpdCBleGlzdHMuCisgICAgXG9wZW5pbiAxIHR4aS0jMS50ZXgKKyAgICBcaWZlb2YgMQorICAgICAgXGVycmhlbHAgPSBcbm9sYW5naGVscAorICAgICAgXGVycm1lc3NhZ2V7Q2Fubm90IHJlYWQgbGFuZ3VhZ2UgZmlsZSB0eGktIzEudGV4fSUKKyAgICBcZWxzZQorICAgICAgXGlucHV0IHR4aS0jMS50ZXgKKyAgICBcZmkKKyAgICBcY2xvc2VpbiAxCisgIFxlbmRncm91cAorfQorXG5ld2hlbHBcbm9sYW5naGVscHtUaGUgZ2l2ZW4gbGFuZ3VhZ2UgZGVmaW5pdGlvbiBmaWxlIGNhbm5vdCBiZSBmb3VuZCBvcgoraXMgZW1wdHkuICBNYXliZSB5b3UgbmVlZCB0byBpbnN0YWxsIGl0PyAgSW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5CitzaG91bGQgd29yayBpZiBub3doZXJlIGVsc2UgZG9lcy59CisKKyUgU2V0IHRoZSBjYXRjb2RlIG9mIGNoYXJhY3RlcnMgMTI4IHRocm91Z2ggMjU1IHRvIHRoZSBzcGVjaWZpZWQgbnVtYmVyLgorJQorXGRlZlxzZXRub25hc2NpaWNoYXJzY2F0Y29kZSMxeyUKKyAgIFxjb3VudDI1NT0xMjgKKyAgIFxsb29wXGlmbnVtXGNvdW50MjU1PDI1NgorICAgICAgXGdsb2JhbFxjYXRjb2RlXGNvdW50MjU1PSMxCisgICAgICBcYWR2YW5jZVxjb3VudDI1NSBieSAxCisgICBccmVwZWF0Cit9CisKKyUgQGRvY3VtZW50ZW5jb2Rpbmcgc2V0cyB0aGUgZGVmaW5pdGlvbiBvZiBub24tQVNDSUkgY2hhcmFjdGVycworJSBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBlbmNvZGluZy4KKyUKK1xwYXJzZWFyZ2RlZlxkb2N1bWVudGVuY29kaW5neyUKKyAgJSBFbmNvZGluZyBiZWluZyBkZWNsYXJlZCBmb3IgdGhlIGRvY3VtZW50LgorICBcZGVmXGRlY2xhcmVkZW5jb2Rpbmd7XGNzbmFtZSAjMS5lbmNcZW5kY3NuYW1lfSUKKyAgJQorICAlIFN1cHBvcnRlZCBlbmNvZGluZ3M6IG5hbWVzIGNvbnZlcnRlZCB0byB0b2tlbnMgaW4gb3JkZXIgdG8gYmUgYWJsZQorICAlIHRvIGNvbXBhcmUgdGhlbSB3aXRoIFxpZnguCisgIFxkZWZcYXNjaWl7XGNzbmFtZSBVUy1BU0NJSS5lbmNcZW5kY3NuYW1lfSUKKyAgXGRlZlxsYXRuaW5le1xjc25hbWUgSVNPLTg4NTktMTUuZW5jXGVuZGNzbmFtZX0lCisgIFxkZWZcbGF0b25le1xjc25hbWUgSVNPLTg4NTktMS5lbmNcZW5kY3NuYW1lfSUKKyAgXGRlZlxsYXR0d297XGNzbmFtZSBJU08tODg1OS0yLmVuY1xlbmRjc25hbWV9JQorICBcZGVmXHV0ZmVpZ2h0e1xjc25hbWUgVVRGLTguZW5jXGVuZGNzbmFtZX0lCisgICUKKyAgXGlmeCBcZGVjbGFyZWRlbmNvZGluZyBcYXNjaWkKKyAgICAgXGFzY2lpY2hhcmRlZnMKKyAgJQorICBcZWxzZSBcaWZ4IFxkZWNsYXJlZGVuY29kaW5nIFxsYXR0d28KKyAgICAgXHNldG5vbmFzY2lpY2hhcnNjYXRjb2RlXGFjdGl2ZQorICAgICBcbGF0dHdvY2hhcmRlZnMKKyAgJQorICBcZWxzZSBcaWZ4IFxkZWNsYXJlZGVuY29kaW5nIFxsYXRvbmUgCisgICAgIFxzZXRub25hc2NpaWNoYXJzY2F0Y29kZVxhY3RpdmUKKyAgICAgXGxhdG9uZWNoYXJkZWZzCisgICUKKyAgXGVsc2UgXGlmeCBcZGVjbGFyZWRlbmNvZGluZyBcbGF0bmluZQorICAgICBcc2V0bm9uYXNjaWljaGFyc2NhdGNvZGVcYWN0aXZlCisgICAgIFxsYXRuaW5lY2hhcmRlZnMKKyAgJQorICBcZWxzZSBcaWZ4IFxkZWNsYXJlZGVuY29kaW5nIFx1dGZlaWdodAorICAgICBcc2V0bm9uYXNjaWljaGFyc2NhdGNvZGVcYWN0aXZlCisgICAgIFx1dGZlaWdodGNoYXJkZWZzCisgICUKKyAgXGVsc2UgCisgICAgXG1lc3NhZ2V7VW5rbm93biBkb2N1bWVudCBlbmNvZGluZyAjMSwgaWdub3JpbmcufSUKKyAgJQorICBcZmkgJSB1dGZlaWdodAorICBcZmkgJSBsYXRuaW5lCisgIFxmaSAlIGxhdG9uZQorICBcZmkgJSBsYXR0d28KKyAgXGZpICUgYXNjaWkKK30KKworJSBBIG1lc3NhZ2UgdG8gYmUgbG9nZ2VkIHdoZW4gdXNpbmcgYSBjaGFyYWN0ZXIgdGhhdCBpc24ndCBhdmFpbGFibGUKKyUgdGhlIGRlZmF1bHQgZm9udCBlbmNvZGluZyAoT1QxKS4KKyUgCitcZGVmXG1pc3NpbmdjaGFybXNnIzF7XG1lc3NhZ2V7Q2hhcmFjdGVyIG1pc3NpbmcgaW4gT1QxIGVuY29kaW5nOiAjMS59fQorCislIFRha2UgYWNjb3VudCBvZiBcYyAocGxhaW4pIHZzLiBcLCAoVGV4aW5mbykgZGlmZmVyZW5jZS4KK1xkZWZcY2VkaWxsYSMxe1xpZnhcY1xwdGV4Y1xjeyMxfVxlbHNlXCx7IzF9XGZpfQorCislIEZpcnN0LCBtYWtlIGFjdGl2ZSBub24tQVNDSUkgY2hhcmFjdGVycyBpbiBvcmRlciBmb3IgdGhlbSB0byBiZQorJSBjb3JyZWN0bHkgY2F0ZWdvcml6ZWQgd2hlbiBUZVggcmVhZHMgdGhlIHJlcGxhY2VtZW50IHRleHQgb2YKKyUgbWFjcm9zIGNvbnRhaW5pbmcgdGhlIGNoYXJhY3RlciBkZWZpbml0aW9ucy4KK1xzZXRub25hc2NpaWNoYXJzY2F0Y29kZVxhY3RpdmUKKyUKKyUgTGF0aW4xIChJU08tODg1OS0xKSBjaGFyYWN0ZXIgZGVmaW5pdGlvbnMuCitcZGVmXGxhdG9uZWNoYXJkZWZzeyUKKyAgXGdkZWZeXmEwe359IAorICBcZ2RlZl5eYTF7XGV4Y2xhbWRvd259CisgIFxnZGVmXl5hMntcbWlzc2luZ2NoYXJtc2d7Q0VOVCBTSUdOfX0gCisgIFxnZGVmXl5hM3t7XHBvdW5kc319CisgIFxnZGVmXl5hNHtcbWlzc2luZ2NoYXJtc2d7Q1VSUkVOQ1kgU0lHTn19CisgIFxnZGVmXl5hNXtcbWlzc2luZ2NoYXJtc2d7WUVOIFNJR059fQorICBcZ2RlZl5eYTZ7XG1pc3NpbmdjaGFybXNne0JST0tFTiBCQVJ9fSAKKyAgXGdkZWZeXmE3e1xTfQorICBcZ2RlZl5eYTh7XCJ7fX0gCisgIFxnZGVmXl5hOXtcY29weXJpZ2h0fSAKKyAgXGdkZWZeXmFhe1xvcmRmfQorICBcZ2RlZl5eYWJ7XG1pc3NpbmdjaGFybXNne0xFRlQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFIFFVT1RBVElPTiBNQVJLfX0gCisgIFxnZGVmXl5hY3skXGxub3QkfQorICBcZ2RlZl5eYWR7XC19IAorICBcZ2RlZl5eYWV7XHJlZ2lzdGVyZWRzeW1ib2x9IAorICBcZ2RlZl5eYWZ7XD17fX0KKyAgJQorICBcZ2RlZl5eYjB7XHRleHRkZWdyZWV9CisgIFxnZGVmXl5iMXskXHBtJH0KKyAgXGdkZWZeXmIyeyReMiR9CisgIFxnZGVmXl5iM3skXjMkfQorICBcZ2RlZl5eYjR7XCd7fX0KKyAgXGdkZWZeXmI1eyRcbXUkfQorICBcZ2RlZl5eYjZ7XFB9CisgICUKKyAgXGdkZWZeXmI3eyReLiR9CisgIFxnZGVmXl5iOHtcY2VkaWxsYVwgfQorICBcZ2RlZl5eYjl7JF4xJH0KKyAgXGdkZWZeXmJhe1xvcmRtfQorICAlCisgIFxnZGVmXl5iYntcbWlzc2luZ2NoYXJtc2d7UklHSFQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFIFFVT1RBVElPTiBNQVJLfX0KKyAgXGdkZWZeXmJjeyQxXG92ZXI0JH0KKyAgXGdkZWZeXmJkeyQxXG92ZXIyJH0KKyAgXGdkZWZeXmJleyQzXG92ZXI0JH0KKyAgXGdkZWZeXmJme1xxdWVzdGlvbmRvd259CisgICUKKyAgXGdkZWZeXmMwe1xgQX0KKyAgXGdkZWZeXmMxe1wnQX0KKyAgXGdkZWZeXmMye1xeQX0KKyAgXGdkZWZeXmMze1x+QX0KKyAgXGdkZWZeXmM0e1wiQX0KKyAgXGdkZWZeXmM1e1xyaW5nYWNjZW50IEF9IAorICBcZ2RlZl5eYzZ7XEFFfQorICBcZ2RlZl5eYzd7XGNlZGlsbGEgQ30KKyAgXGdkZWZeXmM4e1xgRX0KKyAgXGdkZWZeXmM5e1wnRX0KKyAgXGdkZWZeXmNhe1xeRX0KKyAgXGdkZWZeXmNie1wiRX0KKyAgXGdkZWZeXmNje1xgSX0KKyAgXGdkZWZeXmNke1wnSX0KKyAgXGdkZWZeXmNle1xeSX0KKyAgXGdkZWZeXmNme1wiSX0KKyAgJQorICBcZ2RlZl5eZDB7XG1pc3NpbmdjaGFybXNne0xBVElOIENBUElUQUwgTEVUVEVSIEVUSH19CisgIFxnZGVmXl5kMXtcfk59CisgIFxnZGVmXl5kMntcYE99CisgIFxnZGVmXl5kM3tcJ099CisgIFxnZGVmXl5kNHtcXk99CisgIFxnZGVmXl5kNXtcfk99CisgIFxnZGVmXl5kNntcIk99CisgIFxnZGVmXl5kN3skXHRpbWVzJH0KKyAgXGdkZWZeXmQ4e1xPfQorICBcZ2RlZl5eZDl7XGBVfQorICBcZ2RlZl5eZGF7XCdVfQorICBcZ2RlZl5eZGJ7XF5VfQorICBcZ2RlZl5eZGN7XCJVfQorICBcZ2RlZl5eZGR7XCdZfQorICBcZ2RlZl5eZGV7XG1pc3NpbmdjaGFybXNne0xBVElOIENBUElUQUwgTEVUVEVSIFRIT1JOfX0KKyAgXGdkZWZeXmRme1xzc30KKyAgJQorICBcZ2RlZl5eZTB7XGBhfQorICBcZ2RlZl5eZTF7XCdhfQorICBcZ2RlZl5eZTJ7XF5hfQorICBcZ2RlZl5eZTN7XH5hfQorICBcZ2RlZl5eZTR7XCJhfQorICBcZ2RlZl5eZTV7XHJpbmdhY2NlbnQgYX0KKyAgXGdkZWZeXmU2e1xhZX0KKyAgXGdkZWZeXmU3e1xjZWRpbGxhIGN9CisgIFxnZGVmXl5lOHtcYGV9CisgIFxnZGVmXl5lOXtcJ2V9CisgIFxnZGVmXl5lYXtcXmV9CisgIFxnZGVmXl5lYntcImV9CisgIFxnZGVmXl5lY3tcYHtcZG90bGVzcyBpfX0KKyAgXGdkZWZeXmVke1wne1xkb3RsZXNzIGl9fQorICBcZ2RlZl5eZWV7XF57XGRvdGxlc3MgaX19CisgIFxnZGVmXl5lZntcIntcZG90bGVzcyBpfX0KKyAgJQorICBcZ2RlZl5eZjB7XG1pc3NpbmdjaGFybXNne0xBVElOIFNNQUxMIExFVFRFUiBFVEh9fQorICBcZ2RlZl5eZjF7XH5ufQorICBcZ2RlZl5eZjJ7XGBvfQorICBcZ2RlZl5eZjN7XCdvfQorICBcZ2RlZl5eZjR7XF5vfQorICBcZ2RlZl5eZjV7XH5vfQorICBcZ2RlZl5eZjZ7XCJvfQorICBcZ2RlZl5eZjd7JFxkaXYkfQorICBcZ2RlZl5eZjh7XG99CisgIFxnZGVmXl5mOXtcYHV9CisgIFxnZGVmXl5mYXtcJ3V9CisgIFxnZGVmXl5mYntcXnV9CisgIFxnZGVmXl5mY3tcInV9CisgIFxnZGVmXl5mZHtcJ3l9CisgIFxnZGVmXl5mZXtcbWlzc2luZ2NoYXJtc2d7TEFUSU4gU01BTEwgTEVUVEVSIFRIT1JOfX0KKyAgXGdkZWZeXmZme1wieX0KK30KKworJSBMYXRpbjkgKElTTy04ODU5LTE1KSBlbmNvZGluZyBjaGFyYWN0ZXIgZGVmaW5pdGlvbnMuCitcZGVmXGxhdG5pbmVjaGFyZGVmc3slCisgICUgRW5jb2RpbmcgaXMgYWxtb3N0IGlkZW50aWNhbCB0byBMYXRpbjEuCisgIFxsYXRvbmVjaGFyZGVmcworICAlCisgIFxnZGVmXl5hNHtcZXVyb30KKyAgXGdkZWZeXmE2e1x2IFN9CisgIFxnZGVmXl5hOHtcdiBzfQorICBcZ2RlZl5eYjR7XHYgWn0KKyAgXGdkZWZeXmI4e1x2IHp9CisgIFxnZGVmXl5iY3tcT0V9CisgIFxnZGVmXl5iZHtcb2V9CisgIFxnZGVmXl5iZXtcIll9Cit9CisKKyUgTGF0aW4yIChJU08tODg1OS0yKSBjaGFyYWN0ZXIgZGVmaW5pdGlvbnMuCitcZGVmXGxhdHR3b2NoYXJkZWZzeyUKKyAgXGdkZWZeXmEwe359CisgIFxnZGVmXl5hMXtcbWlzc2luZ2NoYXJtc2d7TEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIE9HT05FS319CisgIFxnZGVmXl5hMntcdXt9fQorICBcZ2RlZl5eYTN7XEx9CisgIFxnZGVmXl5hNHtcbWlzc2luZ2NoYXJtc2d7Q1VSUkVOQ1kgU0lHTn19CisgIFxnZGVmXl5hNXtcdiBMfQorICBcZ2RlZl5eYTZ7XCdTfQorICBcZ2RlZl5eYTd7XFN9CisgIFxnZGVmXl5hOHtcInt9fQorICBcZ2RlZl5eYTl7XHYgU30KKyAgXGdkZWZeXmFhe1xjZWRpbGxhIFN9CisgIFxnZGVmXl5hYntcdiBUfQorICBcZ2RlZl5eYWN7XCdafQorICBcZ2RlZl5eYWR7XC19CisgIFxnZGVmXl5hZXtcdiBafQorICBcZ2RlZl5eYWZ7XGRvdGFjY2VudCBafQorICAlCisgIFxnZGVmXl5iMHtcdGV4dGRlZ3JlZX0KKyAgXGdkZWZeXmIxe1xtaXNzaW5nY2hhcm1zZ3tMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIE9HT05FS319CisgIFxnZGVmXl5iMntcbWlzc2luZ2NoYXJtc2d7T0dPTkVLfX0KKyAgXGdkZWZeXmIze1xsfQorICBcZ2RlZl5eYjR7XCd7fX0KKyAgXGdkZWZeXmI1e1x2IGx9CisgIFxnZGVmXl5iNntcJ3N9CisgIFxnZGVmXl5iN3tcdnt9fQorICBcZ2RlZl5eYjh7XGNlZGlsbGFcIH0KKyAgXGdkZWZeXmI5e1x2IHN9CisgIFxnZGVmXl5iYXtcY2VkaWxsYSBzfQorICBcZ2RlZl5eYmJ7XHYgdH0KKyAgXGdkZWZeXmJje1wnen0KKyAgXGdkZWZeXmJke1xIe319CisgIFxnZGVmXl5iZXtcdiB6fQorICBcZ2RlZl5eYmZ7XGRvdGFjY2VudCB6fQorICAlCisgIFxnZGVmXl5jMHtcJ1J9CisgIFxnZGVmXl5jMXtcJ0F9CisgIFxnZGVmXl5jMntcXkF9CisgIFxnZGVmXl5jM3tcdSBBfQorICBcZ2RlZl5eYzR7XCJBfQorICBcZ2RlZl5eYzV7XCdMfQorICBcZ2RlZl5eYzZ7XCdDfQorICBcZ2RlZl5eYzd7XGNlZGlsbGEgQ30KKyAgXGdkZWZeXmM4e1x2IEN9CisgIFxnZGVmXl5jOXtcJ0V9CisgIFxnZGVmXl5jYXtcbWlzc2luZ2NoYXJtc2d7TEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIE9HT05FS319CisgIFxnZGVmXl5jYntcIkV9CisgIFxnZGVmXl5jY3tcdiBFfQorICBcZ2RlZl5eY2R7XCdJfQorICBcZ2RlZl5eY2V7XF5JfQorICBcZ2RlZl5eY2Z7XHYgRH0KKyAgJQorICBcZ2RlZl5eZDB7XG1pc3NpbmdjaGFybXNne0xBVElOIENBUElUQUwgTEVUVEVSIEQgV0lUSCBTVFJPS0V9fQorICBcZ2RlZl5eZDF7XCdOfQorICBcZ2RlZl5eZDJ7XHYgTn0KKyAgXGdkZWZeXmQze1wnT30KKyAgXGdkZWZeXmQ0e1xeT30KKyAgXGdkZWZeXmQ1e1xIIE99CisgIFxnZGVmXl5kNntcIk99CisgIFxnZGVmXl5kN3skXHRpbWVzJH0KKyAgXGdkZWZeXmQ4e1x2IFJ9CisgIFxnZGVmXl5kOXtccmluZ2FjY2VudCBVfSAKKyAgXGdkZWZeXmRhe1wnVX0KKyAgXGdkZWZeXmRie1xIIFV9CisgIFxnZGVmXl5kY3tcIlV9CisgIFxnZGVmXl5kZHtcJ1l9CisgIFxnZGVmXl5kZXtcY2VkaWxsYSBUfQorICBcZ2RlZl5eZGZ7XHNzfQorICAlCisgIFxnZGVmXl5lMHtcJ3J9CisgIFxnZGVmXl5lMXtcJ2F9CisgIFxnZGVmXl5lMntcXmF9CisgIFxnZGVmXl5lM3tcdSBhfQorICBcZ2RlZl5eZTR7XCJhfQorICBcZ2RlZl5eZTV7XCdsfQorICBcZ2RlZl5eZTZ7XCdjfQorICBcZ2RlZl5eZTd7XGNlZGlsbGEgY30KKyAgXGdkZWZeXmU4e1x2IGN9CisgIFxnZGVmXl5lOXtcJ2V9CisgIFxnZGVmXl5lYXtcbWlzc2luZ2NoYXJtc2d7TEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBPR09ORUt9fQorICBcZ2RlZl5eZWJ7XCJlfQorICBcZ2RlZl5eZWN7XHYgZX0KKyAgXGdkZWZeXmVke1wnXGl9CisgIFxnZGVmXl5lZXtcXlxpfQorICBcZ2RlZl5eZWZ7XHYgZH0KKyAgJQorICBcZ2RlZl5eZjB7XG1pc3NpbmdjaGFybXNne0xBVElOIFNNQUxMIExFVFRFUiBEIFdJVEggU1RST0tFfX0KKyAgXGdkZWZeXmYxe1wnbn0KKyAgXGdkZWZeXmYye1x2IG59CisgIFxnZGVmXl5mM3tcJ299CisgIFxnZGVmXl5mNHtcXm99CisgIFxnZGVmXl5mNXtcSCBvfQorICBcZ2RlZl5eZjZ7XCJvfQorICBcZ2RlZl5eZjd7JFxkaXYkfQorICBcZ2RlZl5eZjh7XHYgcn0KKyAgXGdkZWZeXmY5e1xyaW5nYWNjZW50IHV9CisgIFxnZGVmXl5mYXtcJ3V9CisgIFxnZGVmXl5mYntcSCB1fQorICBcZ2RlZl5eZmN7XCJ1fQorICBcZ2RlZl5eZmR7XCd5fQorICBcZ2RlZl5eZmV7XGNlZGlsbGEgdH0KKyAgXGdkZWZeXmZme1xkb3RhY2NlbnR7fX0KK30KKworJSBVVEYtOCBjaGFyYWN0ZXIgZGVmaW5pdGlvbnMuCislIAorJSBUaGlzIGNvZGUgdG8gc3VwcG9ydCBVVEYtOCBpcyBiYXNlZCBvbiBMYVRlWCdzIHV0ZjguZGVmLCB3aXRoIHNvbWUKKyUgY2hhbmdlcyBmb3IgVGV4aW5mbyBjb252ZW50aW9ucy4gIEl0IGlzIGluY2x1ZGVkIGhlcmUgdW5kZXIgdGhlIEdQTCBieQorJSBwZXJtaXNzaW9uIGZyb20gRnJhbmsgTWl0dGVsYmFjaCBhbmQgdGhlIExhVGVYIHRlYW0uCislIAorXG5ld2NvdW50XGNvdW50VVRGeAorXG5ld2NvdW50XGNvdW50VVRGeQorXG5ld2NvdW50XGNvdW50VVRGegorCitcZ2RlZlxVVEZ2aWlpVHdvT2N0ZXRzIzEjMntcZXhwYW5kYWZ0ZXIKKyAgIFxVVEZ2aWlpRGVmaW5lZFxjc25hbWUgdTg6IzFcc3RyaW5nICMyXGVuZGNzbmFtZX0KKyUKK1xnZGVmXFVURnZpaWlUaHJlZU9jdGV0cyMxIzIjM3tcZXhwYW5kYWZ0ZXIKKyAgIFxVVEZ2aWlpRGVmaW5lZFxjc25hbWUgdTg6IzFcc3RyaW5nICMyXHN0cmluZyAjM1xlbmRjc25hbWV9CislCitcZ2RlZlxVVEZ2aWlpRm91ck9jdGV0cyMxIzIjMyM0e1xleHBhbmRhZnRlcgorICAgXFVURnZpaWlEZWZpbmVkXGNzbmFtZSB1ODojMVxzdHJpbmcgIzJcc3RyaW5nICMzXHN0cmluZyAjNFxlbmRjc25hbWV9CisKK1xnZGVmXFVURnZpaWlEZWZpbmVkIzF7JQorICBcaWZ4ICMxXHJlbGF4CisgICAgXG1lc3NhZ2V7XGxpbmVudW1iZXIgVW5pY29kZSBjaGFyIFxzdHJpbmcgIzEgbm90IGRlZmluZWQgZm9yIFRleGluZm99JQorICBcZWxzZQorICAgIFxleHBhbmRhZnRlciAjMSUKKyAgXGZpCit9CisKK1xiZWdpbmdyb3VwCisgIFxjYXRjb2RlYFx+MTMKKyAgXGNhdGNvZGVgXCIxMgorCisgIFxkZWZcVVRGdmlpaUxvb3B7JQorICAgIFxnbG9iYWxcY2F0Y29kZVxjb3VudFVURnhcYWN0aXZlCisgICAgXHVjY29kZWBcflxjb3VudFVURngKKyAgICBcdXBwZXJjYXNlXGV4cGFuZGFmdGVye1xVVEZ2aWlpVG1wfSUKKyAgICBcYWR2YW5jZVxjb3VudFVURnggYnkgMQorICAgIFxpZm51bVxjb3VudFVURnggPCBcY291bnRVVEZ5CisgICAgICBcZXhwYW5kYWZ0ZXJcVVRGdmlpaUxvb3AKKyAgICBcZml9CisKKyAgXGNvdW50VVRGeCA9ICJDMgorICBcY291bnRVVEZ5ID0gIkUwCisgIFxkZWZcVVRGdmlpaVRtcHslCisgICAgXHhkZWZ+e1xub2V4cGFuZFxVVEZ2aWlpVHdvT2N0ZXRzXHN0cmluZ359fQorICBcVVRGdmlpaUxvb3AKKworICBcY291bnRVVEZ4ID0gIkUwCisgIFxjb3VudFVURnkgPSAiRjAKKyAgXGRlZlxVVEZ2aWlpVG1weyUKKyAgICBceGRlZn57XG5vZXhwYW5kXFVURnZpaWlUaHJlZU9jdGV0c1xzdHJpbmd+fX0KKyAgXFVURnZpaWlMb29wCisKKyAgXGNvdW50VVRGeCA9ICJGMAorICBcY291bnRVVEZ5ID0gIkY0CisgIFxkZWZcVVRGdmlpaVRtcHslCisgICAgXHhkZWZ+e1xub2V4cGFuZFxVVEZ2aWlpRm91ck9jdGV0c1xzdHJpbmd+fX0KKyAgXFVURnZpaWlMb29wCitcZW5kZ3JvdXAKKworXGJlZ2luZ3JvdXAKKyAgXGNhdGNvZGVgXCI9MTIKKyAgXGNhdGNvZGVgXDw9MTIKKyAgXGNhdGNvZGVgXC49MTIKKyAgXGNhdGNvZGVgXCw9MTIKKyAgXGNhdGNvZGVgXDs9MTIKKyAgXGNhdGNvZGVgXCE9MTIKKyAgXGNhdGNvZGVgXH49MTMKKworICBcZ2RlZlxEZWNsYXJlVW5pY29kZUNoYXJhY3RlciMxIzJ7JQorICAgIFxjb3VudFVURnogPSAiIzFccmVsYXgKKyAgICBcd2xvZ3tcc3BhY2Vcc3BhY2UgZGVmaW5pbmcgVW5pY29kZSBjaGFyIFUrIzEgKGRlY2ltYWwgXHRoZVxjb3VudFVURnopfSUKKyAgICBcYmVnaW5ncm91cAorICAgICAgXHBhcnNlWE1MQ2hhcnJlZgorICAgICAgXGRlZlxVVEZ2aWlpVHdvT2N0ZXRzIyMxIyMyeyUKKyAgICAgICAgXGNzbmFtZSB1ODojIzFcc3RyaW5nICMjMlxlbmRjc25hbWV9JQorICAgICAgXGRlZlxVVEZ2aWlpVGhyZWVPY3RldHMjIzEjIzIjIzN7JQorICAgICAgICBcY3NuYW1lIHU4OiMjMVxzdHJpbmcgIyMyXHN0cmluZyAjIzNcZW5kY3NuYW1lfSUKKyAgICAgIFxkZWZcVVRGdmlpaUZvdXJPY3RldHMjIzEjIzIjIzMjIzR7JQorICAgICAgICBcY3NuYW1lIHU4OiMjMVxzdHJpbmcgIyMyXHN0cmluZyAjIzNcc3RyaW5nICMjNFxlbmRjc25hbWV9JQorICAgICAgXGV4cGFuZGFmdGVyXGV4cGFuZGFmdGVyXGV4cGFuZGFmdGVyXGV4cGFuZGFmdGVyCisgICAgICAgXGV4cGFuZGFmdGVyXGV4cGFuZGFmdGVyXGV4cGFuZGFmdGVyCisgICAgICAgXGdkZWZcVVRGdmlpaVRtcHsjMn0lCisgICAgXGVuZGdyb3VwfQorCisgIFxnZGVmXHBhcnNlWE1MQ2hhcnJlZnslCisgICAgXGlmbnVtXGNvdW50VVRGeiA8ICJBMFxyZWxheAorICAgICAgXGVycmhlbHAgPSBcRU1zaW1wbGUKKyAgICAgIFxlcnJtZXNzYWdle0Nhbm5vdCBkZWZpbmUgVW5pY29kZSBjaGFyIHZhbHVlIDwgMDBBMH0lCisgICAgXGVsc2VcaWZudW1cY291bnRVVEZ6IDwgIjgwMFxyZWxheAorICAgICAgXHBhcnNlVVRGdmlpaUEsJQorICAgICAgXHBhcnNlVVRGdmlpaUIgQ1xVVEZ2aWlpVHdvT2N0ZXRzLiwlCisgICAgXGVsc2VcaWZudW1cY291bnRVVEZ6IDwgIjEwMDAwXHJlbGF4CisgICAgICBccGFyc2VVVEZ2aWlpQTslCisgICAgICBccGFyc2VVVEZ2aWlpQSwlCisgICAgICBccGFyc2VVVEZ2aWlpQiBFXFVURnZpaWlUaHJlZU9jdGV0cy57LDt9JQorICAgIFxlbHNlCisgICAgICBccGFyc2VVVEZ2aWlpQTslCisgICAgICBccGFyc2VVVEZ2aWlpQSwlCisgICAgICBccGFyc2VVVEZ2aWlpQSElCisgICAgICBccGFyc2VVVEZ2aWlpQiBGXFVURnZpaWlGb3VyT2N0ZXRzLnshLDt9JQorICAgIFxmaVxmaVxmaQorICB9CisKKyAgXGdkZWZccGFyc2VVVEZ2aWlpQSMxeyUKKyAgICBcY291bnRVVEZ4ID0gXGNvdW50VVRGegorICAgIFxkaXZpZGVcY291bnRVVEZ6IGJ5IDY0CisgICAgXGNvdW50VVRGeSA9IFxjb3VudFVURnoKKyAgICBcbXVsdGlwbHlcY291bnRVVEZ6IGJ5IDY0CisgICAgXGFkdmFuY2VcY291bnRVVEZ4IGJ5IC1cY291bnRVVEZ6CisgICAgXGFkdmFuY2VcY291bnRVVEZ4IGJ5IDEyOAorICAgIFx1Y2NvZGUgYCMxXGNvdW50VVRGeAorICAgIFxjb3VudFVURnogPSBcY291bnRVVEZ5fQorCisgIFxnZGVmXHBhcnNlVVRGdmlpaUIjMSMyIzMjNHslCisgICAgXGFkdmFuY2VcY291bnRVVEZ6IGJ5ICIjMTBccmVsYXgKKyAgICBcdWNjb2RlIGAjM1xjb3VudFVURnoKKyAgICBcdXBwZXJjYXNle1xnZGVmXFVURnZpaWlUbXB7IzIjMyM0fX19CitcZW5kZ3JvdXAKKworXGRlZlx1dGZlaWdodGNoYXJkZWZzeyUKKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwQTB9e1x0aWV9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEExfXtcZXhjbGFtZG93bn0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwQTN9e1xwb3VuZHN9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEE4fXtcInsgfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwQTl9e1xjb3B5cmlnaHR9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEFBfXtcb3JkZn0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwQUR9e1wtfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBBRX17XHJlZ2lzdGVyZWRzeW1ib2x9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEFGfXtcPXsgfX0KKworICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBCMH17XHJpbmdhY2NlbnR7IH19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEI0fXtcJ3sgfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwQjh9e1xjZWRpbGxheyB9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBCQX17XG9yZG19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEJGfXtccXVlc3Rpb25kb3dufQorCisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEMwfXtcYEF9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEMxfXtcJ0F9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEMyfXtcXkF9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEMzfXtcfkF9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEM0fXtcIkF9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEM1fXtcQUF9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEM2fXtcQUV9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEM3fXtcY2VkaWxsYXtDfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwQzh9e1xgRX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwQzl9e1wnRX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwQ0F9e1xeRX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwQ0J9e1wiRX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwQ0N9e1xgSX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwQ0R9e1wnSX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwQ0V9e1xeSX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwQ0Z9e1wiSX0KKworICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBEMX17XH5OfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBEMn17XGBPfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBEM317XCdPfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBENH17XF5PfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBENX17XH5PfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBENn17XCJPfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBEOH17XE99CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEQ5fXtcYFV9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMERBfXtcJ1V9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMERCfXtcXlV9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMERDfXtcIlV9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEREfXtcJ1l9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMERGfXtcc3N9CisKKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwRTB9e1xgYX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwRTF9e1wnYX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwRTJ9e1xeYX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwRTN9e1x+YX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwRTR9e1wiYX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwRTV9e1xhYX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwRTZ9e1xhZX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwRTd9e1xjZWRpbGxhe2N9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBFOH17XGBlfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBFOX17XCdlfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBFQX17XF5lfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBFQn17XCJlfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBFQ317XGB7XGRvdGxlc3N7aX19fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBFRH17XCd7XGRvdGxlc3N7aX19fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBFRX17XF57XGRvdGxlc3N7aX19fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDBFRn17XCJ7XGRvdGxlc3N7aX19fQorCisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEYxfXtcfm59CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEYyfXtcYG99CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEYzfXtcJ299CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEY0fXtcXm99CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEY1fXtcfm99CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEY2fXtcIm99CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMEY4fXtcb30KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwRjl9e1xgdX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwRkF9e1wndX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwRkJ9e1xedX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwRkN9e1widX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwRkR9e1wneX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAwRkZ9e1wieX0KKworICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDEwMH17XD1BfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDEwMX17XD1hfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDEwMn17XHV7QX19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTAzfXtcdXthfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMDZ9e1wnQ30KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMDd9e1wnY30KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMDh9e1xeQ30KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMDl9e1xeY30KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMEF9e1xkb3RhY2NlbnR7Q319CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTBCfXtcZG90YWNjZW50e2N9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDEwQ317XHZ7Q319CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTBEfXtcdntjfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMEV9e1x2e0R9fQorCisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTEyfXtcPUV9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTEzfXtcPWV9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTE0fXtcdXtFfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMTV9e1x1e2V9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDExNn17XGRvdGFjY2VudHtFfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMTd9e1xkb3RhY2NlbnR7ZX19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTFBfXtcdntFfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMUJ9e1x2e2V9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDExQ317XF5HfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDExRH17XF5nfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDExRX17XHV7R319CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTFGfXtcdXtnfX0KKworICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDEyMH17XGRvdGFjY2VudHtHfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMjF9e1xkb3RhY2NlbnR7Z319CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTI0fXtcXkh9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTI1fXtcXmh9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTI4fXtcfkl9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTI5fXtcfntcZG90bGVzc3tpfX19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTJBfXtcPUl9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTJCfXtcPXtcZG90bGVzc3tpfX19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTJDfXtcdXtJfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMkR9e1x1e1xkb3RsZXNze2l9fX0KKworICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDEzMH17XGRvdGFjY2VudHtJfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMzF9e1xkb3RsZXNze2l9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDEzMn17SUp9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTMzfXtpan0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMzR9e1xeSn0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMzV9e1xee1xkb3RsZXNze2p9fX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxMzl9e1wnTH0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxM0F9e1wnbH0KKworICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE0MX17XEx9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTQyfXtcbH0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxNDN9e1wnTn0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxNDR9e1wnbn0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxNDd9e1x2e059fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE0OH17XHZ7bn19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTRDfXtcPU99CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTREfXtcPW99CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTRFfXtcdXtPfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxNEZ9e1x1e299fQorCisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTUwfXtcSHtPfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxNTF9e1xIe299fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE1Mn17XE9FfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE1M317XG9lfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE1NH17XCdSfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE1NX17XCdyfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE1OH17XHZ7Un19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTU5fXtcdntyfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxNUF9e1wnU30KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxNUJ9e1wnc30KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxNUN9e1xeU30KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxNUR9e1xec30KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxNUV9e1xjZWRpbGxhe1N9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE1Rn17XGNlZGlsbGF7c319CisKKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxNjB9e1x2e1N9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE2MX17XHZ7c319CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTYyfXtcY2VkaWxsYXt0fX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxNjN9e1xjZWRpbGxhe1R9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE2NH17XHZ7VH19CisKKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxNjh9e1x+VX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxNjl9e1x+dX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxNkF9e1w9VX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxNkJ9e1w9dX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxNkN9e1x1e1V9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE2RH17XHV7dX19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTZFfXtccmluZ2FjY2VudHtVfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxNkZ9e1xyaW5nYWNjZW50e3V9fQorCisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTcwfXtcSHtVfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxNzF9e1xIe3V9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE3NH17XF5XfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE3NX17XF53fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE3Nn17XF5ZfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE3N317XF55fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE3OH17XCJZfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE3OX17XCdafQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE3QX17XCd6fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDE3Qn17XGRvdGFjY2VudHtafX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxN0N9e1xkb3RhY2NlbnR7en19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMTdEfXtcdntafX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxN0V9e1x2e3p9fQorCisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMUM0fXtEXHZ7Wn19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMUM1fXtEXHZ7en19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMUM2fXtkXHZ7en19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMUM3fXtMSn0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxQzh9e0xqfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDFDOX17bGp9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMUNBfXtOSn0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxQ0J9e05qfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDFDQ317bmp9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMUNEfXtcdntBfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxQ0V9e1x2e2F9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDFDRn17XHZ7SX19CisKKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxRDB9e1x2e1xkb3RsZXNze2l9fX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxRDF9e1x2e099fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDFEMn17XHZ7b319CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMUQzfXtcdntVfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxRDR9e1x2e3V9fQorCisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMUUyfXtcPXtcQUV9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDFFM317XD17XGFlfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxRTZ9e1x2e0d9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDFFN317XHZ7Z319CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMUU4fXtcdntLfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxRTl9e1x2e2t9fQorCisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMUYwfXtcdntcZG90bGVzc3tqfX19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMUYxfXtEWn0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxRjJ9e0R6fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDFGM317ZHp9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMUY0fXtcJ0d9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMUY1fXtcJ2d9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMUY4fXtcYE59CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMUY5fXtcYG59CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMUZDfXtcJ3tcQUV9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDFGRH17XCd7XGFlfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxRkV9e1wne1xPfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAxRkZ9e1wne1xvfX0KKworICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDIxRX17XHZ7SH19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMjFGfXtcdntofX0KKworICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDIyNn17XGRvdGFjY2VudHtBfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAyMjd9e1xkb3RhY2NlbnR7YX19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnswMjI4fXtcY2VkaWxsYXtFfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAyMjl9e1xjZWRpbGxhe2V9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MDIyRX17XGRvdGFjY2VudHtPfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAyMkZ9e1xkb3RhY2NlbnR7b319CisKKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAyMzJ9e1w9WX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAyMzN9e1w9eX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAyMzd9e1xkb3RsZXNze2p9fQorCisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTAyfXtcZG90YWNjZW50e0J9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUUwM317XGRvdGFjY2VudHtifX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFMDR9e1x1ZG90YWNjZW50e0J9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUUwNX17XHVkb3RhY2NlbnR7Yn19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTA2fXtcdWJhcmFjY2VudHtCfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFMDd9e1x1YmFyYWNjZW50e2J9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUUwQX17XGRvdGFjY2VudHtEfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFMEJ9e1xkb3RhY2NlbnR7ZH19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTBDfXtcdWRvdGFjY2VudHtEfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFMER9e1x1ZG90YWNjZW50e2R9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUUwRX17XHViYXJhY2NlbnR7RH19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTBGfXtcdWJhcmFjY2VudHtkfX0KKworICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUUxRX17XGRvdGFjY2VudHtGfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFMUZ9e1xkb3RhY2NlbnR7Zn19CisKKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFMjB9e1w9R30KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFMjF9e1w9Z30KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFMjJ9e1xkb3RhY2NlbnR7SH19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTIzfXtcZG90YWNjZW50e2h9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUUyNH17XHVkb3RhY2NlbnR7SH19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTI1fXtcdWRvdGFjY2VudHtofX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFMjZ9e1wiSH0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFMjd9e1wiaH0KKworICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUUzMH17XCdLfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUUzMX17XCdrfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUUzMn17XHVkb3RhY2NlbnR7S319CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTMzfXtcdWRvdGFjY2VudHtrfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFMzR9e1x1YmFyYWNjZW50e0t9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUUzNX17XHViYXJhY2NlbnR7a319CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTM2fXtcdWRvdGFjY2VudHtMfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFMzd9e1x1ZG90YWNjZW50e2x9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUUzQX17XHViYXJhY2NlbnR7TH19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTNCfXtcdWJhcmFjY2VudHtsfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFM0V9e1wnTX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFM0Z9e1wnbX0KKworICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUU0MH17XGRvdGFjY2VudHtNfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFNDF9e1xkb3RhY2NlbnR7bX19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTQyfXtcdWRvdGFjY2VudHtNfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFNDN9e1x1ZG90YWNjZW50e219fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUU0NH17XGRvdGFjY2VudHtOfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFNDV9e1xkb3RhY2NlbnR7bn19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTQ2fXtcdWRvdGFjY2VudHtOfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFNDd9e1x1ZG90YWNjZW50e259fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUU0OH17XHViYXJhY2NlbnR7Tn19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTQ5fXtcdWJhcmFjY2VudHtufX0KKworICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUU1NH17XCdQfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUU1NX17XCdwfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUU1Nn17XGRvdGFjY2VudHtQfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFNTd9e1xkb3RhY2NlbnR7cH19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTU4fXtcZG90YWNjZW50e1J9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUU1OX17XGRvdGFjY2VudHtyfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFNUF9e1x1ZG90YWNjZW50e1J9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUU1Qn17XHVkb3RhY2NlbnR7cn19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTVFfXtcdWJhcmFjY2VudHtSfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFNUZ9e1x1YmFyYWNjZW50e3J9fQorCisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTYwfXtcZG90YWNjZW50e1N9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUU2MX17XGRvdGFjY2VudHtzfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFNjJ9e1x1ZG90YWNjZW50e1N9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUU2M317XHVkb3RhY2NlbnR7c319CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTZBfXtcZG90YWNjZW50e1R9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUU2Qn17XGRvdGFjY2VudHt0fX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFNkN9e1x1ZG90YWNjZW50e1R9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUU2RH17XHVkb3RhY2NlbnR7dH19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTZFfXtcdWJhcmFjY2VudHtUfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFNkZ9e1x1YmFyYWNjZW50e3R9fQorCisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTdDfXtcflZ9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTdEfXtcfnZ9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTdFfXtcdWRvdGFjY2VudHtWfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFN0Z9e1x1ZG90YWNjZW50e3Z9fQorCisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTgwfXtcYFd9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTgxfXtcYHd9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTgyfXtcJ1d9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTgzfXtcJ3d9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTg0fXtcIld9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTg1fXtcInd9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTg2fXtcZG90YWNjZW50e1d9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUU4N317XGRvdGFjY2VudHt3fX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFODh9e1x1ZG90YWNjZW50e1d9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUU4OX17XHVkb3RhY2NlbnR7d319CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRThBfXtcZG90YWNjZW50e1h9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUU4Qn17XGRvdGFjY2VudHt4fX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFOEN9e1wiWH0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFOER9e1wieH0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFOEV9e1xkb3RhY2NlbnR7WX19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRThGfXtcZG90YWNjZW50e3l9fQorCisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTkwfXtcXlp9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTkxfXtcXnp9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTkyfXtcdWRvdGFjY2VudHtafX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFOTN9e1x1ZG90YWNjZW50e3p9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUU5NH17XHViYXJhY2NlbnR7Wn19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTk1fXtcdWJhcmFjY2VudHt6fX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFOTZ9e1x1YmFyYWNjZW50e2h9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUU5N317XCJ0fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUU5OH17XHJpbmdhY2NlbnR7d319CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRTk5fXtccmluZ2FjY2VudHt5fX0KKworICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUVBMH17XHVkb3RhY2NlbnR7QX19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRUExfXtcdWRvdGFjY2VudHthfX0KKworICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUVCOH17XHVkb3RhY2NlbnR7RX19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRUI5fXtcdWRvdGFjY2VudHtlfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFQkN9e1x+RX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFQkR9e1x+ZX0KKworICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUVDQX17XHVkb3RhY2NlbnR7SX19CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRUNCfXtcdWRvdGFjY2VudHtpfX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFQ0N9e1x1ZG90YWNjZW50e099fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUVDRH17XHVkb3RhY2NlbnR7b319CisKKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFRTR9e1x1ZG90YWNjZW50e1V9fQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MUVFNX17XHVkb3RhY2NlbnR7dX19CisKKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFRjJ9e1xgWX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFRjN9e1xgeX0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezFFRjR9e1x1ZG90YWNjZW50e1l9fQorCisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRUY4fXtcfll9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsxRUY5fXtcfnl9CisKKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezIwMTN9ey0tfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MjAxNH17LS0tfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MjAyMn17XGJ1bGxldH0KKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezIwMjZ9e1xkb3RzfQorICBcRGVjbGFyZVVuaWNvZGVDaGFyYWN0ZXJ7MjBBQ317XGV1cm99CisKKyAgXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezIxOTJ9e1xleHBhbnNpb259CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsyMUQyfXtccmVzdWx0fQorCisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsyMjEyfXtcbWludXN9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsyMjE3fXtccG9pbnR9CisgIFxEZWNsYXJlVW5pY29kZUNoYXJhY3RlcnsyMjYxfXtcZXF1aXZ9Cit9JSBlbmQgb2YgXHV0ZmVpZ2h0Y2hhcmRlZnMKKworCislIFVTLUFTQ0lJIGNoYXJhY3RlciBkZWZpbml0aW9ucy4KK1xkZWZcYXNjaWljaGFyZGVmc3slIG5vdGhpbmcgbmVlZCBiZSBkb25lCisgICBccmVsYXgKK30KKworJSBNYWtlIG5vbi1BU0NJSSBjaGFyYWN0ZXJzIHByaW50YWJsZSBhZ2FpbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoCislIGV4aXN0aW5nIFRleGluZm8gZG9jdW1lbnRzIHRoYXQgbWF5IHVzZSB0aGVtLCBldmVuIHdpdGhvdXQgZGVjbGFyaW5nIGEKKyUgZG9jdW1lbnQgZW5jb2RpbmcuCislCitcc2V0bm9uYXNjaWljaGFyc2NhdGNvZGUgXG90aGVyCisKKworXG1lc3NhZ2V7Zm9ybWF0dGluZyx9CisKK1xuZXdkaW1lblxkZWZhdWx0cGFyaW5kZW50IFxkZWZhdWx0cGFyaW5kZW50ID0gMTVwdAorCitcY2hhcGhlYWRpbmdza2lwID0gMTVwdCBwbHVzIDRwdCBtaW51cyAycHQKK1xzZWNoZWFkaW5nc2tpcCA9IDEycHQgcGx1cyAzcHQgbWludXMgMnB0Citcc3Vic2VjaGVhZGluZ3NraXAgPSA5cHQgcGx1cyAycHQgbWludXMgMnB0CisKKyUgUHJldmVudCB1bmRlcmZ1bGwgdmJveCBlcnJvciBtZXNzYWdlcy4KK1x2YmFkbmVzcyA9IDEwMDAwCisKKyUgRG9uJ3QgYmUgc28gZmluaWNreSBhYm91dCB1bmRlcmZ1bGwgaGJveGVzLCBlaXRoZXIuCitcaGJhZG5lc3MgPSAyMDAwCisKKyUgRm9sbG93aW5nIEdlb3JnZSBCdXNoLCBqdXN0IGdldCByaWQgb2Ygd2lkb3dzIGFuZCBvcnBoYW5zLgorXHdpZG93cGVuYWx0eT0xMDAwMAorXGNsdWJwZW5hbHR5PTEwMDAwCisKKyUgVXNlIFRlWCAzLjAncyBcZW1lcmdlbmN5c3RyZXRjaCB0byBoZWxwIGxpbmUgYnJlYWtpbmcsIGJ1dCBpZiB3ZSdyZQorJSB1c2luZyBhbiBvbGQgdmVyc2lvbiBvZiBUZVgsIGRvbid0IGRvIGFueXRoaW5nLiAgV2Ugd2FudCB0aGUgYW1vdW50IG9mCislIHN0cmV0Y2ggYWRkZWQgdG8gZGVwZW5kIG9uIHRoZSBsaW5lIGxlbmd0aCwgaGVuY2UgdGhlIGRlcGVuZGVuY2Ugb24KKyUgXGhzaXplLiAgV2UgY2FsbCB0aGlzIHdoZW5ldmVyIHRoZSBwYXBlciBzaXplIGlzIHNldC4KKyUKK1xkZWZcc2V0ZW1lcmdlbmN5c3RyZXRjaHslCisgIFxpZnhcZW1lcmdlbmN5c3RyZXRjaFx0aGlzaXN1bmRlZmluZWQKKyAgICAlIEFsbG93IHVzIHRvIGFzc2lnbiB0byBcZW1lcmdlbmN5c3RyZXRjaCBhbnl3YXkuCisgICAgXGRlZlxlbWVyZ2VuY3lzdHJldGNoe1xkaW1lbjB9JQorICBcZWxzZQorICAgIFxlbWVyZ2VuY3lzdHJldGNoID0gLjE1XGhzaXplCisgIFxmaQorfQorCislIFBhcmFtZXRlcnMgaW4gb3JkZXI6IDEpIHRleHRoZWlnaHQ7IDIpIHRleHR3aWR0aDsKKyUgMykgdm9mZnNldDsgNCkgaG9mZnNldDsgNSkgYmluZGluZyBvZmZzZXQ7IDYpIHRvcHNraXA7CislIDcpIHBoeXNpY2FsIHBhZ2UgaGVpZ2h0OyA4KSBwaHlzaWNhbCBwYWdlIHdpZHRoLgorJQorJSBXZSBhbHNvIGNhbGwgXHNldGxlYWRpbmd7XHRleHRsZWFkaW5nfSwgc28gdGhlIGNhbGxlciBzaG91bGQgZGVmaW5lCislIFx0ZXh0bGVhZGluZy4gIFRoZSBjYWxsZXIgc2hvdWxkIGFsc28gc2V0IFxwYXJza2lwLgorJQorXGRlZlxpbnRlcm5hbHBhZ2VzaXplcyMxIzIjMyM0IzUjNiM3Izh7JQorICBcdm9mZnNldCA9ICMzXHJlbGF4CisgIFx0b3Bza2lwID0gIzZccmVsYXgKKyAgXHNwbGl0dG9wc2tpcCA9IFx0b3Bza2lwCisgICUKKyAgXHZzaXplID0gIzFccmVsYXgKKyAgXGFkdmFuY2VcdnNpemUgYnkgXHRvcHNraXAKKyAgXG91dGVydnNpemUgPSBcdnNpemUKKyAgXGFkdmFuY2Vcb3V0ZXJ2c2l6ZSBieSAyXHRvcGFuZGJvdHRvbW1hcmdpbgorICBccGFnZWhlaWdodCA9IFx2c2l6ZQorICAlCisgIFxoc2l6ZSA9ICMyXHJlbGF4CisgIFxvdXRlcmhzaXplID0gXGhzaXplCisgIFxhZHZhbmNlXG91dGVyaHNpemUgYnkgMC41aW4KKyAgXHBhZ2V3aWR0aCA9IFxoc2l6ZQorICAlCisgIFxub3JtYWxvZmZzZXQgPSAjNFxyZWxheAorICBcYmluZGluZ29mZnNldCA9ICM1XHJlbGF4CisgICUKKyAgXGlmcGRmCisgICAgXHBkZnBhZ2VoZWlnaHQgIzdccmVsYXgKKyAgICBccGRmcGFnZXdpZHRoICM4XHJlbGF4CisgIFxmaQorICAlCisgIFxzZXRsZWFkaW5ne1x0ZXh0bGVhZGluZ30KKyAgJQorICBccGFyaW5kZW50ID0gXGRlZmF1bHRwYXJpbmRlbnQKKyAgXHNldGVtZXJnZW5jeXN0cmV0Y2gKK30KKworJSBAbGV0dGVycGFwZXIgKHRoZSBkZWZhdWx0KS4KK1xkZWZcbGV0dGVycGFwZXJ7e1xnbG9iYWxkZWZzID0gMQorICBccGFyc2tpcCA9IDNwdCBwbHVzIDJwdCBtaW51cyAxcHQKKyAgXHRleHRsZWFkaW5nID0gMTMuMnB0CisgICUKKyAgJSBJZiBwYWdlIGlzIG5vdGhpbmcgYnV0IHRleHQsIG1ha2UgaXQgY29tZSBvdXQgZXZlbi4KKyAgXGludGVybmFscGFnZXNpemVzezQ2XGJhc2VsaW5lc2tpcH17NmlufSUKKyAgICAgICAgICAgICAgICAgICAge1x2b2Zmc2V0fXsuMjVpbn0lCisgICAgICAgICAgICAgICAgICAgIHtcYmluZGluZ29mZnNldH17MzZwdH0lCisgICAgICAgICAgICAgICAgICAgIHsxMWlufXs4LjVpbn0lCit9fQorCislIFVzZSBAc21hbGxib29rIHRvIHJlc2V0IHBhcmFtZXRlcnMgZm9yIDd4OS4yNSB0cmltIHNpemUuCitcZGVmXHNtYWxsYm9va3t7XGdsb2JhbGRlZnMgPSAxCisgIFxwYXJza2lwID0gMnB0IHBsdXMgMXB0CisgIFx0ZXh0bGVhZGluZyA9IDEycHQKKyAgJQorICBcaW50ZXJuYWxwYWdlc2l6ZXN7Ny41aW59ezVpbn0lCisgICAgICAgICAgICAgICAgICAgIHstLjJpbn17MGlufSUKKyAgICAgICAgICAgICAgICAgICAge1xiaW5kaW5nb2Zmc2V0fXsxNnB0fSUKKyAgICAgICAgICAgICAgICAgICAgezkuMjVpbn17N2lufSUKKyAgJQorICBcbGlzcG5hcnJvd2luZyA9IDAuM2luCisgIFx0b2xlcmFuY2UgPSA3MDAKKyAgXGhmdXp6ID0gMXB0CisgIFxjb250ZW50c3JpZ2h0bWFyZ2luID0gMHB0CisgIFxkZWZib2R5aW5kZW50ID0gLjVjbQorfX0KKworJSBVc2UgQHNtYWxsZXJib29rIHRvIHJlc2V0IHBhcmFtZXRlcnMgZm9yIDZ4OSB0cmltIHNpemUuCislIChKdXN0IHRlc3RpbmcsIHBhcmFtZXRlcnMgc3RpbGwgaW4gZmx1eC4pCitcZGVmXHNtYWxsZXJib29re3tcZ2xvYmFsZGVmcyA9IDEKKyAgXHBhcnNraXAgPSAxLjVwdCBwbHVzIDFwdAorICBcdGV4dGxlYWRpbmcgPSAxMnB0CisgICUKKyAgXGludGVybmFscGFnZXNpemVzezcuNGlufXs0Ljhpbn0lCisgICAgICAgICAgICAgICAgICAgIHstLjJpbn17LS40aW59JQorICAgICAgICAgICAgICAgICAgICB7MHB0fXsxNHB0fSUKKyAgICAgICAgICAgICAgICAgICAgezlpbn17NmlufSUKKyAgJQorICBcbGlzcG5hcnJvd2luZyA9IDAuMjVpbgorICBcdG9sZXJhbmNlID0gNzAwCisgIFxoZnV6eiA9IDFwdAorICBcY29udGVudHNyaWdodG1hcmdpbiA9IDBwdAorICBcZGVmYm9keWluZGVudCA9IC40Y20KK319CisKKyUgVXNlIEBhZm91cnBhcGVyIHRvIHByaW50IG9uIEV1cm9wZWFuIEE0IHBhcGVyLgorXGRlZlxhZm91cnBhcGVye3tcZ2xvYmFsZGVmcyA9IDEKKyAgXHBhcnNraXAgPSAzcHQgcGx1cyAycHQgbWludXMgMXB0CisgIFx0ZXh0bGVhZGluZyA9IDEzLjJwdAorICAlCisgICUgRG91YmxlLXNpZGUgcHJpbnRpbmcgdmlhIHBvc3RzY3JpcHQgb24gTGFzZXJqZXQgNDA1MAorICAlIHByaW50cyBkb3VibGUtc2lkZWQgbmljZWx5IHdoZW4gXGJpbmRpbmdvZmZzZXQ9MTBtbSBhbmQgXGhvZmZzZXQ9LTZtbS4KKyAgJSBUbyBjaGFuZ2UgdGhlIHNldHRpbmdzIGZvciBhIGRpZmZlcmVudCBwcmludGVyIG9yIHNpdHVhdGlvbiwgYWRqdXN0CisgICUgXG5vcm1hbG9mZnNldCB1bnRpbCB0aGUgZnJvbnQtc2lkZSBhbmQgYmFjay1zaWRlIHRleHRzIGFsaWduLiAgVGhlbgorICAlIGRvIHRoZSBzYW1lIGZvciBcYmluZGluZ29mZnNldC4gIFlvdSBjYW4gc2V0IHRoZXNlIGZvciB0ZXN0aW5nIGluCisgICUgeW91ciB0ZXhpbmZvIHNvdXJjZSBmaWxlIGxpa2UgdGhpczoKKyAgJSBAdGV4CisgICUgXGdsb2JhbFxub3JtYWxvZmZzZXQgPSAtNm1tCisgICUgXGdsb2JhbFxiaW5kaW5nb2Zmc2V0ID0gMTBtbQorICAlIEBlbmQgdGV4CisgIFxpbnRlcm5hbHBhZ2VzaXplc3s1MVxiYXNlbGluZXNraXB9ezE2MG1tfQorICAgICAgICAgICAgICAgICAgICB7XHZvZmZzZXR9e1xob2Zmc2V0fSUKKyAgICAgICAgICAgICAgICAgICAge1xiaW5kaW5nb2Zmc2V0fXs0NHB0fSUKKyAgICAgICAgICAgICAgICAgICAgezI5N21tfXsyMTBtbX0lCisgICUKKyAgXHRvbGVyYW5jZSA9IDcwMAorICBcaGZ1enogPSAxcHQKKyAgXGNvbnRlbnRzcmlnaHRtYXJnaW4gPSAwcHQKKyAgXGRlZmJvZHlpbmRlbnQgPSA1bW0KK319CisKKyUgVXNlIEBhZml2ZXBhcGVyIHRvIHByaW50IG9uIEV1cm9wZWFuIEE1IHBhcGVyLgorJSBGcm9tIHJvbWlsZG9AdXJhbm8uaWNlYi51Zm9wLmJyLCAyIEp1bHkgMjAwMC4KKyUgSGUgYWxzbyByZWNvbW1lbmRzIG1ha2luZyBAZXhhbXBsZSBhbmQgQGxpc3AgYmUgc21hbGwuCitcZGVmXGFmaXZlcGFwZXJ7e1xnbG9iYWxkZWZzID0gMQorICBccGFyc2tpcCA9IDJwdCBwbHVzIDFwdCBtaW51cyAwLjFwdAorICBcdGV4dGxlYWRpbmcgPSAxMi41cHQKKyAgJQorICBcaW50ZXJuYWxwYWdlc2l6ZXN7MTYwbW19ezEyMG1tfSUKKyAgICAgICAgICAgICAgICAgICAge1x2b2Zmc2V0fXtcaG9mZnNldH0lCisgICAgICAgICAgICAgICAgICAgIHtcYmluZGluZ29mZnNldH17OHB0fSUKKyAgICAgICAgICAgICAgICAgICAgezIxMG1tfXsxNDhtbX0lCisgICUKKyAgXGxpc3BuYXJyb3dpbmcgPSAwLjJpbgorICBcdG9sZXJhbmNlID0gODAwCisgIFxoZnV6eiA9IDEuMnB0CisgIFxjb250ZW50c3JpZ2h0bWFyZ2luID0gMHB0CisgIFxkZWZib2R5aW5kZW50ID0gMm1tCisgIFx0YWJsZWluZGVudCA9IDEybW0KK319CisKKyUgQSBzcGVjaWZpYyB0ZXh0IGxheW91dCwgMjR4MTVjbSBvdmVyYWxsLCBpbnRlbmRlZCBmb3IgQTQgcGFwZXIuCitcZGVmXGFmb3VybGF0ZXh7e1xnbG9iYWxkZWZzID0gMQorICBcYWZvdXJwYXBlcgorICBcaW50ZXJuYWxwYWdlc2l6ZXN7MjM3bW19ezE1MG1tfSUKKyAgICAgICAgICAgICAgICAgICAge1x2b2Zmc2V0fXs0LjZtbX0lCisgICAgICAgICAgICAgICAgICAgIHtcYmluZGluZ29mZnNldH17N21tfSUKKyAgICAgICAgICAgICAgICAgICAgezI5N21tfXsyMTBtbX0lCisgICUKKyAgJSBNdXN0IGV4cGxpY2l0bHkgcmVzZXQgdG8gMCBiZWNhdXNlIHdlIGNhbGwgXGFmb3VycGFwZXIuCisgIFxnbG9iYWxkZWZzID0gMAorfX0KKworJSBVc2UgQGFmb3Vyd2lkZSB0byBwcmludCBvbiBBNCBwYXBlciBpbiBsYW5kc2NhcGUgZm9ybWF0LgorXGRlZlxhZm91cndpZGV7e1xnbG9iYWxkZWZzID0gMQorICBcYWZvdXJwYXBlcgorICBcaW50ZXJuYWxwYWdlc2l6ZXN7MjQxbW19ezE2NW1tfSUKKyAgICAgICAgICAgICAgICAgICAge1x2b2Zmc2V0fXstMi45NW1tfSUKKyAgICAgICAgICAgICAgICAgICAge1xiaW5kaW5nb2Zmc2V0fXs3bW19JQorICAgICAgICAgICAgICAgICAgICB7Mjk3bW19ezIxMG1tfSUKKyAgXGdsb2JhbGRlZnMgPSAwCit9fQorCislIEBwYWdlc2l6ZXMgVEVYVEhFSUdIVFssVEVYVFdJRFRIXQorJSBQZXJoYXBzIHdlIHNob3VsZCBhbGxvdyBzZXR0aW5nIHRoZSBtYXJnaW5zLCBcdG9wc2tpcCwgXHBhcnNraXAsCislIGFuZC9vciBsZWFkaW5nLCBhbHNvLiBPciBwZXJoYXBzIHdlIHNob3VsZCBjb21wdXRlIHRoZW0gc29tZWhvdy4KKyUKK1xwYXJzZWFyZ2RlZlxwYWdlc2l6ZXN7XHBhZ2VzaXplc3l5eSAjMSwsXGZpbmlzaH0KK1xkZWZccGFnZXNpemVzeXl5IzEsIzIsIzNcZmluaXNoe3slCisgIFxzZXRib3gwID0gXGhib3h7XGlnbm9yZXNwYWNlcyAjMn1caWZkaW1cd2QwID4gMHB0IFxoc2l6ZT0jMlxyZWxheCBcZmkKKyAgXGdsb2JhbGRlZnMgPSAxCisgICUKKyAgXHBhcnNraXAgPSAzcHQgcGx1cyAycHQgbWludXMgMXB0CisgIFxzZXRsZWFkaW5ne1x0ZXh0bGVhZGluZ30lCisgICUKKyAgXGRpbWVuMCA9ICMxCisgIFxhZHZhbmNlXGRpbWVuMCBieSBcdm9mZnNldAorICAlCisgIFxkaW1lbjIgPSBcaHNpemUKKyAgXGFkdmFuY2VcZGltZW4yIGJ5IFxub3JtYWxvZmZzZXQKKyAgJQorICBcaW50ZXJuYWxwYWdlc2l6ZXN7IzF9e1xoc2l6ZX0lCisgICAgICAgICAgICAgICAgICAgIHtcdm9mZnNldH17XG5vcm1hbG9mZnNldH0lCisgICAgICAgICAgICAgICAgICAgIHtcYmluZGluZ29mZnNldH17NDRwdH0lCisgICAgICAgICAgICAgICAgICAgIHtcZGltZW4wfXtcZGltZW4yfSUKK319CisKKyUgU2V0IGRlZmF1bHQgdG8gbGV0dGVyLgorJQorXGxldHRlcnBhcGVyCisKKworXG1lc3NhZ2V7YW5kIHR1cm5pbmcgb24gdGV4aW5mbyBpbnB1dCBmb3JtYXQufQorCislIERlZmluZSBtYWNyb3MgdG8gb3V0cHV0IHZhcmlvdXMgY2hhcmFjdGVycyB3aXRoIGNhdGNvZGUgZm9yIG5vcm1hbCB0ZXh0LgorXGNhdGNvZGVgXCI9XG90aGVyCitcY2F0Y29kZWBcfj1cb3RoZXIKK1xjYXRjb2RlYFxePVxvdGhlcgorXGNhdGNvZGVgXF89XG90aGVyCitcY2F0Y29kZWBcfD1cb3RoZXIKK1xjYXRjb2RlYFw8PVxvdGhlcgorXGNhdGNvZGVgXD49XG90aGVyCitcY2F0Y29kZWBcKz1cb3RoZXIKK1xjYXRjb2RlYFwkPVxvdGhlcgorXGRlZlxub3JtYWxkb3VibGVxdW90ZXsifQorXGRlZlxub3JtYWx0aWxkZXt+fQorXGRlZlxub3JtYWxjYXJldHtefQorXGRlZlxub3JtYWx1bmRlcnNjb3Jle199CitcZGVmXG5vcm1hbHZlcnRpY2FsYmFye3x9CitcZGVmXG5vcm1hbGxlc3N7PH0KK1xkZWZcbm9ybWFsZ3JlYXRlcns+fQorXGRlZlxub3JtYWxwbHVzeyt9CitcZGVmXG5vcm1hbGRvbGxhcnskfSUkIGZvbnQtbG9jayBmaXgKKworJSBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gbWFrZSBhIGNoYXJhY3RlciBwcmludCBvbmUgd2F5IGluIFx0dAorJSAod2hlcmUgaXQgY2FuIHByb2JhYmx5IGJlIG91dHB1dCBhcy1pcyksIGFuZCBhbm90aGVyIHdheSBpbiBvdGhlciBmb250cywKKyUgd2hlcmUgc29tZXRoaW5nIGhhaXJpZXIgcHJvYmFibHkgbmVlZHMgdG8gYmUgZG9uZS4KKyUKKyUgIzEgaXMgd2hhdCB0byBwcmludCBpZiB3ZSBhcmUgaW5kZWVkIHVzaW5nIFx0dDsgIzIgaXMgd2hhdCB0byBwcmludAorJSBvdGhlcndpc2UuICBTaW5jZSBhbGwgdGhlIENvbXB1dGVyIE1vZGVybiB0eXBld3JpdGVyIGZvbnRzIGhhdmUgemVybworJSBpbnRlcndvcmQgc3RyZXRjaCAoYW5kIHNocmluayksIGFuZCBpdCBpcyByZWFzb25hYmxlIHRvIGV4cGVjdCBhbGwKKyUgdHlwZXdyaXRlciBmb250cyB0byBoYXZlIHRoaXMsIHdlIGNhbiBjaGVjayB0aGF0IGZvbnQgcGFyYW1ldGVyLgorJQorXGRlZlxpZnVzaW5ndHQjMSMye1xpZmRpbSBcZm9udGRpbWVuM1xmb250PTBwdCAjMVxlbHNlICMyXGZpfQorCislIFNhbWUgYXMgYWJvdmUsIGJ1dCBjaGVjayBmb3IgaXRhbGljIGZvbnQuICBBY3R1YWxseSB0aGlzIGFsc28gY2F0Y2hlcworJSBub24taXRhbGljIHNsYW50ZWQgZm9udHMgc2luY2UgaXQgaXMgaW1wb3NzaWJsZSB0byBkaXN0aW5ndWlzaCB0aGVtIGZyb20KKyUgaXRhbGljIGZvbnRzLiAgQnV0IHNpbmNlIHRoaXMgaXMgb25seSB1c2VkIGJ5ICQgYW5kIGl0IHVzZXMgXHNsIGFueXdheQorJSB0aGlzIGlzIG5vdCBhIHByb2JsZW0uCitcZGVmXGlmdXNpbmdpdCMxIzJ7XGlmZGltIFxmb250ZGltZW4xXGZvbnQ+MHB0ICMxXGVsc2UgIzJcZml9CisKKyUgVHVybiBvZmYgYWxsIHNwZWNpYWwgY2hhcmFjdGVycyBleGNlcHQgQAorJSAoYW5kIHRob3NlIHdoaWNoIHRoZSB1c2VyIGNhbiB1c2UgYXMgaWYgdGhleSB3ZXJlIG9yZGluYXJ5KS4KKyUgTW9zdCBvZiB0aGVzZSB3ZSBzaW1wbHkgcHJpbnQgZnJvbSB0aGUgXHR0IGZvbnQsIGJ1dCBmb3Igc29tZSwgd2UgY2FuCislIHVzZSBtYXRoIG9yIG90aGVyIHZhcmlhbnRzIHRoYXQgbG9vayBiZXR0ZXIgaW4gbm9ybWFsIHRleHQuCisKK1xjYXRjb2RlYFwiPVxhY3RpdmUKK1xkZWZcYWN0aXZlZG91YmxlcXVvdGV7e1x0dFxjaGFyMzR9fQorXGxldCI9XGFjdGl2ZWRvdWJsZXF1b3RlCitcY2F0Y29kZWBcfj1cYWN0aXZlCitcZGVmfnt7XHR0XGNoYXIxMjZ9fQorXGNoYXJkZWZcaGF0PWBcXgorXGNhdGNvZGVgXF49XGFjdGl2ZQorXGRlZl57e1x0dCBcaGF0fX0KKworXGNhdGNvZGVgXF89XGFjdGl2ZQorXGRlZl97XGlmdXNpbmd0dFxub3JtYWx1bmRlcnNjb3JlXF99CitcbGV0XHJlYWx1bmRlcj1fCislIFN1YnJvdXRpbmUgZm9yIHRoZSBwcmV2aW91cyBtYWNyby4KK1xkZWZcX3tcbGVhdmV2bW9kZSBca2Vybi4wN2VtIFx2Ym94e1xocnVsZSB3aWR0aC4zZW0gaGVpZ2h0LjFleH1ca2VybiAuMDdlbSB9CisKK1xjYXRjb2RlYFx8PVxhY3RpdmUKK1xkZWZ8e3tcdHRcY2hhcjEyNH19CitcY2hhcmRlZiBcbGVzcz1gXDwKK1xjYXRjb2RlYFw8PVxhY3RpdmUKK1xkZWY8e3tcdHQgXGxlc3N9fQorXGNoYXJkZWYgXGd0cj1gXD4KK1xjYXRjb2RlYFw+PVxhY3RpdmUKK1xkZWY+e3tcdHQgXGd0cn19CitcY2F0Y29kZWBcKz1cYWN0aXZlCitcZGVmK3t7XHR0IFxjaGFyIDQzfX0KK1xjYXRjb2RlYFwkPVxhY3RpdmUKK1xkZWYke1xpZnVzaW5naXR7e1xzbFwkfX1cbm9ybWFsZG9sbGFyfSUkIGZvbnQtbG9jayBmaXgKKworJSBJZiBhIC5mbXQgZmlsZSBpcyBiZWluZyB1c2VkLCBjaGFyYWN0ZXJzIHRoYXQgbWlnaHQgYXBwZWFyIGluIGEgZmlsZQorJSBuYW1lIGNhbm5vdCBiZSBhY3RpdmUgdW50aWwgd2UgaGF2ZSBwYXJzZWQgdGhlIGNvbW1hbmQgbGluZS4KKyUgU28gdHVybiB0aGVtIG9mZiBhZ2FpbiwgYW5kIGhhdmUgXGV2ZXJ5am9iIChvciBAc2V0ZmlsZW5hbWUpIHR1cm4gdGhlbSBvbi4KKyUgXG90aGVyaWZ5YWN0aXZlIGlzIGNhbGxlZCBuZWFyIHRoZSBlbmQgb2YgdGhpcyBmaWxlLgorXGRlZlxvdGhlcmlmeWFjdGl2ZXtcY2F0Y29kZWArPVxvdGhlciBcY2F0Y29kZWBcXz1cb3RoZXJ9CisKKyUgVXNlZCBzb21ldGltZXMgdG8gdHVybiBvZmYgKGVmZmVjdGl2ZWx5KSB0aGUgYWN0aXZlIGNoYXJhY3RlcnMgZXZlbiBhZnRlcgorJSBwYXJzaW5nIHRoZW0uCitcZGVmXHR1cm5vZmZhY3RpdmV7JQorICBcbm9ybWFsdHVybm9mZmFjdGl2ZQorICBcb3RoZXJiYWNrc2xhc2gKK30KKworXGNhdGNvZGVgXEA9MAorCislIFxiYWNrc2xhc2hjdXJmb250IG91dHB1dHMgb25lIGJhY2tzbGFzaCBjaGFyYWN0ZXIgaW4gY3VycmVudCBmb250LAorJSBhcyBpbiBcY2hhcmBcXC4KK1xnbG9iYWxcY2hhcmRlZlxiYWNrc2xhc2hjdXJmb250PWBcXAorXGdsb2JhbFxsZXRccmF3YmFja3NsYXNoeHg9XGJhY2tzbGFzaGN1cmZvbnQgICUgbGV0IGV4aXN0aW5nIC4/P3MgZmlsZXMgd29yaworCislIFxyZWFsYmFja3NsYXNoIGlzIGFuIGFjdHVhbCBjaGFyYWN0ZXIgYFwnIHdpdGggY2F0Y29kZSBvdGhlciwgYW5kCislIFxkb3VibGViYWNrc2xhc2ggaXMgdHdvIG9mIHRoZW0gKGZvciB0aGUgcGRmIG91dGxpbmVzKS4KK3tcY2F0Y29kZWBcXD1cb3RoZXIgQGdkZWZAcmVhbGJhY2tzbGFzaHtcfSBAZ2RlZkBkb3VibGViYWNrc2xhc2h7XFx9fQorCislIEluIHRleGluZm8sIGJhY2tzbGFzaCBpcyBhbiBhY3RpdmUgY2hhcmFjdGVyOyBpdCBwcmludHMgdGhlIGJhY2tzbGFzaAorJSBpbiBmaXhlZCB3aWR0aCBmb250LgorXGNhdGNvZGVgXFw9XGFjdGl2ZQorQGRlZkBub3JtYWxiYWNrc2xhc2h7e0B0dEBiYWNrc2xhc2hjdXJmb250fX0KKyUgT24gc3RhcnR1cCwgQGZpeGJhY2tzbGFzaCBhc3NpZ25zOgorJSAgQGxldCBcID0gQG5vcm1hbGJhY2tzbGFzaAorCislIFxyYXdiYWNrc2xhc2ggZGVmaW5lcyBhbiBhY3RpdmUgXCB0byBkbyBcYmFja3NsYXNoY3VyZm9udC4KKyUgXG90aGVyYmFja3NsYXNoIGRlZmluZXMgYW4gYWN0aXZlIFwgdG8gYmUgYSBsaXRlcmFsIGBcJyBjaGFyYWN0ZXIgd2l0aAorJSBjYXRjb2RlIG90aGVyLgorQGdkZWZAcmF3YmFja3NsYXNoe0BsZXRcPUBiYWNrc2xhc2hjdXJmb250fQorQGdkZWZAb3RoZXJiYWNrc2xhc2h7QGxldFw9QHJlYWxiYWNrc2xhc2h9CisKKyUgU2FtZSBhcyBAdHVybm9mZmFjdGl2ZSBleGNlcHQgb3V0cHV0cyBcIGFzIHtcdHRcY2hhcmBcXH0gaW5zdGVhZCBvZgorJSB0aGUgbGl0ZXJhbCBjaGFyYWN0ZXIgYFwnLgorJSAKK0BkZWZAbm9ybWFsdHVybm9mZmFjdGl2ZXslCisgIEBsZXRcPUBub3JtYWxiYWNrc2xhc2gKKyAgQGxldCI9QG5vcm1hbGRvdWJsZXF1b3RlCisgIEBsZXR+PUBub3JtYWx0aWxkZQorICBAbGV0Xj1Abm9ybWFsY2FyZXQKKyAgQGxldF89QG5vcm1hbHVuZGVyc2NvcmUKKyAgQGxldHw9QG5vcm1hbHZlcnRpY2FsYmFyCisgIEBsZXQ8PUBub3JtYWxsZXNzCisgIEBsZXQ+PUBub3JtYWxncmVhdGVyCisgIEBsZXQrPUBub3JtYWxwbHVzCisgIEBsZXQkPUBub3JtYWxkb2xsYXIgJSQgZm9udC1sb2NrIGZpeAorICBAdW5zZXBzcGFjZXMKK30KKworJSBNYWtlIF8gYW5kICsgXG90aGVyIGNoYXJhY3RlcnMsIHRlbXBvcmFyaWx5LgorJSBUaGlzIGlzIGNhbmNlbGVkIGJ5IEBmaXhiYWNrc2xhc2guCitAb3RoZXJpZnlhY3RpdmUKKworJSBJZiBhIC5mbXQgZmlsZSBpcyBiZWluZyB1c2VkLCB3ZSBkb24ndCB3YW50IHRoZSBgXGlucHV0IHRleGluZm8nIHRvIHNob3cgdXAuCislIFRoYXQgaXMgd2hhdCBcZWF0aW5wdXQgaXMgZm9yOyBhZnRlciB0aGF0LCB0aGUgYFwnIHNob3VsZCByZXZlcnQgdG8gcHJpbnRpbmcKKyUgYSBiYWNrc2xhc2guCislCitAZ2RlZkBlYXRpbnB1dCBpbnB1dCB0ZXhpbmZve0BmaXhiYWNrc2xhc2h9CitAZ2xvYmFsQGxldFwgPSBAZWF0aW5wdXQKKworJSBPbiB0aGUgb3RoZXIgaGFuZCwgcGVyaGFwcyB0aGUgZmlsZSBkaWQgbm90IGhhdmUgYSBgXGlucHV0IHRleGluZm8nLiBUaGVuCislIHRoZSBmaXJzdCBgXCcgaW4gdGhlIGZpbGUgd291bGQgY2F1c2UgYW4gZXJyb3IuIFRoaXMgbWFjcm8gdHJpZXMgdG8gZml4CislIHRoYXQsIGFzc3VtaW5nIGl0IGlzIGNhbGxlZCBiZWZvcmUgdGhlIGZpcnN0IGBcJyBjb3VsZCBwbGF1c2libHkgb2NjdXIuCislIEFsc28gdHVybiBiYWNrIG9uIGFjdGl2ZSBjaGFyYWN0ZXJzIHRoYXQgbWlnaHQgYXBwZWFyIGluIHRoZSBpbnB1dAorJSBmaWxlIG5hbWUsIGluIGNhc2Ugbm90IHVzaW5nIGEgcHJlLWR1bXBlZCBmb3JtYXQuCislCitAZ2RlZkBmaXhiYWNrc2xhc2h7JQorICBAaWZ4XEBlYXRpbnB1dCBAbGV0XCA9IEBub3JtYWxiYWNrc2xhc2ggQGZpCisgIEBjYXRjb2RlYCs9QGFjdGl2ZQorICBAY2F0Y29kZWBAXz1AYWN0aXZlCit9CisKKyUgU2F5IEBmb28sIG5vdCBcZm9vLCBpbiBlcnJvciBtZXNzYWdlcy4KK0Blc2NhcGVjaGFyID0gYEBACisKKyUgVGhlc2UgbG9vayBvayBpbiBhbGwgZm9udHMsIHNvIGp1c3QgbWFrZSB0aGVtIG5vdCBzcGVjaWFsLgorQGNhdGNvZGVgQCYgPSBAb3RoZXIKK0BjYXRjb2RlYEAjID0gQG90aGVyCitAY2F0Y29kZWBAJSA9IEBvdGhlcgorCisKK0BjIExvY2FsIHZhcmlhYmxlczoKK0BjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKK0BjIHBhZ2UtZGVsaW1pdGVyOiAiXlxcXFxtZXNzYWdlIgorQGMgdGltZS1zdGFtcC1zdGFydDogImRlZlxcXFx0ZXhpbmZvdmVyc2lvbnsiCitAYyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQuJTAySCIKK0BjIHRpbWUtc3RhbXAtZW5kOiAifSIKK0BjIEVuZDoKKworQGMgdmltOnN3PTI6CisKK0BpZ25vcmUKKyAgIGFyY2gtdGFnOiBlMWIzNmUzMi1jOTZlLTQxMzUtYTQxYS0wYjJlZmEyZWExMTUKK0BlbmQgaWdub3JlCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvY29uZmlndXJlIGIvcGFydGVkLTEuOC43L2NvbmZpZ3VyZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kMDkxYzRmCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2NvbmZpZ3VyZQpAQCAtMCwwICsxLDM5MjU3IEBACisjISAvYmluL3NoCisjIEd1ZXNzIHZhbHVlcyBmb3Igc3lzdGVtLWRlcGVuZGVudCB2YXJpYWJsZXMgYW5kIGNyZWF0ZSBNYWtlZmlsZXMuCisjIEdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42MSBmb3IgR05VIHBhcnRlZCAxLjguNy4KKyMKKyMgUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1wYXJ0ZWRAZ251Lm9yZz4uCisjCisjIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwKKyMgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBjb25maWd1cmUgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LgorIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBNNHNoIEluaXRpYWxpemF0aW9uLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIEJlIG1vcmUgQm91cm5lIGNvbXBhdGlibGUKK0RVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBlbXVsYXRlIHNoCisgIE5VTExDTUQ9OgorICAjIFpzaCAzLnggYW5kIDQueCBwZXJmb3JtcyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCisgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCisgIGFsaWFzIC1nICckezErIiRAIn0nPSciJEAiJworICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZWxzZQorICBjYXNlIGAoc2V0IC1vKSAyPi9kZXYvbnVsbGAgaW4KKyAgKnBvc2l4Kikgc2V0IC1vIHBvc2l4IDs7Citlc2FjCisKK2ZpCisKKworCisKKyMgUEFUSCBuZWVkcyBDUgorIyBBdm9pZCBkZXBlbmRpbmcgdXBvbiBDaGFyYWN0ZXIgUmFuZ2VzLgorYXNfY3JfbGV0dGVycz0nYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonCithc19jcl9MRVRURVJTPSdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicKK2FzX2NyX0xldHRlcnM9JGFzX2NyX2xldHRlcnMkYXNfY3JfTEVUVEVSUworYXNfY3JfZGlnaXRzPScwMTIzNDU2Nzg5JworYXNfY3JfYWxudW09JGFzX2NyX0xldHRlcnMkYXNfY3JfZGlnaXRzCisKKyMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgoraWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KKyAgZWNobyAiIyEgL2Jpbi9zaCIgPmNvbmYkJC5zaAorICBlY2hvICAiZXhpdCAwIiAgID4+Y29uZiQkLnNoCisgIGNobW9kICt4IGNvbmYkJC5zaAorICBpZiAoUEFUSD0iL25vbmV4aXN0ZW50Oy4iOyBjb25mJCQuc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgIFBBVEhfU0VQQVJBVE9SPSc7JworICBlbHNlCisgICAgUEFUSF9TRVBBUkFUT1I9OgorICBmaQorICBybSAtZiBjb25mJCQuc2gKK2ZpCisKKyMgU3VwcG9ydCB1bnNldCB3aGVuIHBvc3NpYmxlLgoraWYgKCAoTUFJTD02MDsgdW5zZXQgTUFJTCkgfHwgZXhpdCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFzX3Vuc2V0PXVuc2V0CitlbHNlCisgIGFzX3Vuc2V0PWZhbHNlCitmaQorCisKKyMgSUZTCisjIFdlIG5lZWQgc3BhY2UsIHRhYiBhbmQgbmV3IGxpbmUsIGluIHByZWNpc2VseSB0aGF0IG9yZGVyLiAgUXVvdGluZyBpcworIyB0aGVyZSB0byBwcmV2ZW50IGVkaXRvcnMgZnJvbSBjb21wbGFpbmluZyBhYm91dCBzcGFjZS10YWIuCisjIChJZiBfQVNfUEFUSF9XQUxLIHdlcmUgY2FsbGVkIHdpdGggSUZTIHVuc2V0LCBpdCB3b3VsZCBkaXNhYmxlIHdvcmQKKyMgc3BsaXR0aW5nIGJ5IHNldHRpbmcgSUZTIHRvIGVtcHR5IHZhbHVlLikKK2FzX25sPScKKycKK0lGUz0iICIiCSRhc19ubCIKKworIyBGaW5kIHdobyB3ZSBhcmUuICBMb29rIGluIHRoZSBwYXRoIGlmIHdlIGNvbnRhaW4gbm8gZGlyZWN0b3J5IHNlcGFyYXRvci4KK2Nhc2UgJDAgaW4KKyAgKltcXC9dKiApIGFzX215c2VsZj0kMCA7OworICAqKSBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgIHRlc3QgLXIgIiRhc19kaXIvJDAiICYmIGFzX215c2VsZj0kYXNfZGlyLyQwICYmIGJyZWFrCitkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgICAgOzsKK2VzYWMKKyMgV2UgZGlkIG5vdCBmaW5kIG91cnNlbHZlcywgbW9zdCBwcm9iYWJseSB3ZSB3ZXJlIHJ1biBhcyBgc2ggQ09NTUFORCcKKyMgaW4gd2hpY2ggY2FzZSB3ZSBhcmUgbm90IHRvIGJlIGZvdW5kIGluIHRoZSBwYXRoLgoraWYgdGVzdCAieCRhc19teXNlbGYiID0geDsgdGhlbgorICBhc19teXNlbGY9JDAKK2ZpCitpZiB0ZXN0ICEgLWYgIiRhc19teXNlbGYiOyB0aGVuCisgIGVjaG8gIiRhc19teXNlbGY6IGVycm9yOiBjYW5ub3QgZmluZCBteXNlbGY7IHJlcnVuIHdpdGggYW4gYWJzb2x1dGUgZmlsZSBuYW1lIiA+JjIKKyAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9CitmaQorCisjIFdvcmsgYXJvdW5kIGJ1Z3MgaW4gcHJlLTMuMCBVV0lOIGtzaC4KK2ZvciBhc192YXIgaW4gRU5WIE1BSUwgTUFJTFBBVEgKK2RvICgkYXNfdW5zZXQgJGFzX3ZhcikgPi9kZXYvbnVsbCAyPiYxICYmICRhc191bnNldCAkYXNfdmFyCitkb25lCitQUzE9JyQgJworUFMyPSc+ICcKK1BTND0nKyAnCisKKyMgTkxTIG51aXNhbmNlcy4KK2ZvciBhc192YXIgaW4gXAorICBMQU5HIExBTkdVQUdFIExDX0FERFJFU1MgTENfQUxMIExDX0NPTExBVEUgTENfQ1RZUEUgTENfSURFTlRJRklDQVRJT04gXAorICBMQ19NRUFTVVJFTUVOVCBMQ19NRVNTQUdFUyBMQ19NT05FVEFSWSBMQ19OQU1FIExDX05VTUVSSUMgTENfUEFQRVIgXAorICBMQ19URUxFUEhPTkUgTENfVElNRQorZG8KKyAgaWYgKHNldCAreDsgdGVzdCAteiAiYChldmFsICRhc192YXI9QzsgZXhwb3J0ICRhc192YXIpIDI+JjFgIik7IHRoZW4KKyAgICBldmFsICRhc192YXI9QzsgZXhwb3J0ICRhc192YXIKKyAgZWxzZQorICAgICgkYXNfdW5zZXQgJGFzX3ZhcikgPi9kZXYvbnVsbCAyPiYxICYmICRhc191bnNldCAkYXNfdmFyCisgIGZpCitkb25lCisKKyMgUmVxdWlyZWQgdG8gdXNlIGJhc2VuYW1lLgoraWYgZXhwciBhIDogJ1woYVwpJyA+L2Rldi9udWxsIDI+JjEgJiYKKyAgIHRlc3QgIlhgZXhwciAwMDAwMSA6ICcuKlwoLi4uXCknYCIgPSBYMDAxOyB0aGVuCisgIGFzX2V4cHI9ZXhwcgorZWxzZQorICBhc19leHByPWZhbHNlCitmaQorCitpZiAoYmFzZW5hbWUgLS0gLykgPi9kZXYvbnVsbCAyPiYxICYmIHRlc3QgIlhgYmFzZW5hbWUgLS0gLyAyPiYxYCIgPSAiWC8iOyB0aGVuCisgIGFzX2Jhc2VuYW1lPWJhc2VuYW1lCitlbHNlCisgIGFzX2Jhc2VuYW1lPWZhbHNlCitmaQorCisKKyMgTmFtZSBvZiB0aGUgZXhlY3V0YWJsZS4KK2FzX21lPWAkYXNfYmFzZW5hbWUgLS0gIiQwIiB8fAorJGFzX2V4cHIgWC8iJDAiIDogJy4qL1woW14vXVteL10qXCkvKiQnIFx8IFwKKwkgWCIkMCIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkMCIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CitlY2hvIFgvIiQwIiB8CisgICAgc2VkICcvXi4qXC9cKFteL11bXi9dKlwpXC8qJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcL1woXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcL1woXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYAorCisjIENEUEFUSC4KKyRhc191bnNldCBDRFBBVEgKKworCitpZiB0ZXN0ICJ4JENPTkZJR19TSEVMTCIgPSB4OyB0aGVuCisgIGlmIChldmFsICI6IikgMj4vZGV2L251bGw7IHRoZW4KKyAgYXNfaGF2ZV9yZXF1aXJlZD15ZXMKK2Vsc2UKKyAgYXNfaGF2ZV9yZXF1aXJlZD1ubworZmkKKworICBpZiB0ZXN0ICRhc19oYXZlX3JlcXVpcmVkID0geWVzICYmIAkgKGV2YWwgIjoKKyhhc19mdW5jX3JldHVybiAoKSB7CisgIChleGl0IFwkMSkKK30KK2FzX2Z1bmNfc3VjY2VzcyAoKSB7CisgIGFzX2Z1bmNfcmV0dXJuIDAKK30KK2FzX2Z1bmNfZmFpbHVyZSAoKSB7CisgIGFzX2Z1bmNfcmV0dXJuIDEKK30KK2FzX2Z1bmNfcmV0X3N1Y2Nlc3MgKCkgeworICByZXR1cm4gMAorfQorYXNfZnVuY19yZXRfZmFpbHVyZSAoKSB7CisgIHJldHVybiAxCit9CisKK2V4aXRjb2RlPTAKK2lmIGFzX2Z1bmNfc3VjY2VzczsgdGhlbgorICA6CitlbHNlCisgIGV4aXRjb2RlPTEKKyAgZWNobyBhc19mdW5jX3N1Y2Nlc3MgZmFpbGVkLgorZmkKKworaWYgYXNfZnVuY19mYWlsdXJlOyB0aGVuCisgIGV4aXRjb2RlPTEKKyAgZWNobyBhc19mdW5jX2ZhaWx1cmUgc3VjY2VlZGVkLgorZmkKKworaWYgYXNfZnVuY19yZXRfc3VjY2VzczsgdGhlbgorICA6CitlbHNlCisgIGV4aXRjb2RlPTEKKyAgZWNobyBhc19mdW5jX3JldF9zdWNjZXNzIGZhaWxlZC4KK2ZpCisKK2lmIGFzX2Z1bmNfcmV0X2ZhaWx1cmU7IHRoZW4KKyAgZXhpdGNvZGU9MQorICBlY2hvIGFzX2Z1bmNfcmV0X2ZhaWx1cmUgc3VjY2VlZGVkLgorZmkKKworaWYgKCBzZXQgeDsgYXNfZnVuY19yZXRfc3VjY2VzcyB5ICYmIHRlc3QgeCA9IFwiXCQxXCIgKTsgdGhlbgorICA6CitlbHNlCisgIGV4aXRjb2RlPTEKKyAgZWNobyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgd2VyZSBub3Qgc2F2ZWQuCitmaQorCit0ZXN0IFwkZXhpdGNvZGUgPSAwKSB8fCB7IChleGl0IDEpOyBleGl0IDE7IH0KKworKAorICBhc19saW5lbm9fMT1cJExJTkVOTworICBhc19saW5lbm9fMj1cJExJTkVOTworICB0ZXN0IFwieFwkYXNfbGluZW5vXzFcIiAhPSBcInhcJGFzX2xpbmVub18yXCIgJiYKKyAgdGVzdCBcInhcYGV4cHIgXCRhc19saW5lbm9fMSArIDFcYFwiID0gXCJ4XCRhc19saW5lbm9fMlwiKSB8fCB7IChleGl0IDEpOyBleGl0IDE7IH0KKyIpIDI+IC9kZXYvbnVsbDsgdGhlbgorICA6CitlbHNlCisgIGFzX2NhbmRpZGF0ZV9zaGVsbHM9CisgICAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAvYmluJFBBVEhfU0VQQVJBVE9SL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICBjYXNlICRhc19kaXIgaW4KKwkgLyopCisJICAgZm9yIGFzX2Jhc2UgaW4gc2ggYmFzaCBrc2ggc2g1OyBkbworCSAgICAgYXNfY2FuZGlkYXRlX3NoZWxscz0iJGFzX2NhbmRpZGF0ZV9zaGVsbHMgJGFzX2Rpci8kYXNfYmFzZSIKKwkgICBkb25lOzsKKyAgICAgICBlc2FjCitkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKworICAgICAgZm9yIGFzX3NoZWxsIGluICRhc19jYW5kaWRhdGVfc2hlbGxzICRTSEVMTDsgZG8KKwkgIyBUcnkgb25seSBzaGVsbHMgdGhhdCBleGlzdCwgdG8gc2F2ZSBzZXZlcmFsIGZvcmtzLgorCSBpZiB7IHRlc3QgLWYgIiRhc19zaGVsbCIgfHwgdGVzdCAtZiAiJGFzX3NoZWxsLmV4ZSI7IH0gJiYKKwkJeyAoIiRhc19zaGVsbCIpIDI+IC9kZXYvbnVsbCA8PFxfQVNFT0YKK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBlbXVsYXRlIHNoCisgIE5VTExDTUQ9OgorICAjIFpzaCAzLnggYW5kIDQueCBwZXJmb3JtcyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCisgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCisgIGFsaWFzIC1nICckezErIiRAIn0nPSciJEAiJworICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZWxzZQorICBjYXNlIGAoc2V0IC1vKSAyPi9kZXYvbnVsbGAgaW4KKyAgKnBvc2l4Kikgc2V0IC1vIHBvc2l4IDs7Citlc2FjCisKK2ZpCisKKworOgorX0FTRU9GCit9OyB0aGVuCisgIENPTkZJR19TSEVMTD0kYXNfc2hlbGwKKwkgICAgICAgYXNfaGF2ZV9yZXF1aXJlZD15ZXMKKwkgICAgICAgaWYgeyAiJGFzX3NoZWxsIiAyPiAvZGV2L251bGwgPDxcX0FTRU9GCitpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgZW11bGF0ZSBzaAorICBOVUxMQ01EPToKKyAgIyBac2ggMy54IGFuZCA0LnggcGVyZm9ybXMgd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAorICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgorICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKKyAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2Vsc2UKKyAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251bGxgIGluCisgICpwb3NpeCopIHNldCAtbyBwb3NpeCA7OworZXNhYworCitmaQorCisKKzoKKyhhc19mdW5jX3JldHVybiAoKSB7CisgIChleGl0ICQxKQorfQorYXNfZnVuY19zdWNjZXNzICgpIHsKKyAgYXNfZnVuY19yZXR1cm4gMAorfQorYXNfZnVuY19mYWlsdXJlICgpIHsKKyAgYXNfZnVuY19yZXR1cm4gMQorfQorYXNfZnVuY19yZXRfc3VjY2VzcyAoKSB7CisgIHJldHVybiAwCit9Cithc19mdW5jX3JldF9mYWlsdXJlICgpIHsKKyAgcmV0dXJuIDEKK30KKworZXhpdGNvZGU9MAoraWYgYXNfZnVuY19zdWNjZXNzOyB0aGVuCisgIDoKK2Vsc2UKKyAgZXhpdGNvZGU9MQorICBlY2hvIGFzX2Z1bmNfc3VjY2VzcyBmYWlsZWQuCitmaQorCitpZiBhc19mdW5jX2ZhaWx1cmU7IHRoZW4KKyAgZXhpdGNvZGU9MQorICBlY2hvIGFzX2Z1bmNfZmFpbHVyZSBzdWNjZWVkZWQuCitmaQorCitpZiBhc19mdW5jX3JldF9zdWNjZXNzOyB0aGVuCisgIDoKK2Vsc2UKKyAgZXhpdGNvZGU9MQorICBlY2hvIGFzX2Z1bmNfcmV0X3N1Y2Nlc3MgZmFpbGVkLgorZmkKKworaWYgYXNfZnVuY19yZXRfZmFpbHVyZTsgdGhlbgorICBleGl0Y29kZT0xCisgIGVjaG8gYXNfZnVuY19yZXRfZmFpbHVyZSBzdWNjZWVkZWQuCitmaQorCitpZiAoIHNldCB4OyBhc19mdW5jX3JldF9zdWNjZXNzIHkgJiYgdGVzdCB4ID0gIiQxIiApOyB0aGVuCisgIDoKK2Vsc2UKKyAgZXhpdGNvZGU9MQorICBlY2hvIHBvc2l0aW9uYWwgcGFyYW1ldGVycyB3ZXJlIG5vdCBzYXZlZC4KK2ZpCisKK3Rlc3QgJGV4aXRjb2RlID0gMCkgfHwgeyAoZXhpdCAxKTsgZXhpdCAxOyB9CisKKygKKyAgYXNfbGluZW5vXzE9JExJTkVOTworICBhc19saW5lbm9fMj0kTElORU5PCisgIHRlc3QgIngkYXNfbGluZW5vXzEiICE9ICJ4JGFzX2xpbmVub18yIiAmJgorICB0ZXN0ICJ4YGV4cHIgJGFzX2xpbmVub18xICsgMWAiID0gIngkYXNfbGluZW5vXzIiKSB8fCB7IChleGl0IDEpOyBleGl0IDE7IH0KKworX0FTRU9GCit9OyB0aGVuCisgIGJyZWFrCitmaQorCitmaQorCisgICAgICBkb25lCisKKyAgICAgIGlmIHRlc3QgIngkQ09ORklHX1NIRUxMIiAhPSB4OyB0aGVuCisgIGZvciBhc192YXIgaW4gQkFTSF9FTlYgRU5WCisgICAgICAgIGRvICgkYXNfdW5zZXQgJGFzX3ZhcikgPi9kZXYvbnVsbCAyPiYxICYmICRhc191bnNldCAkYXNfdmFyCisgICAgICAgIGRvbmUKKyAgICAgICAgZXhwb3J0IENPTkZJR19TSEVMTAorICAgICAgICBleGVjICIkQ09ORklHX1NIRUxMIiAiJGFzX215c2VsZiIgJHsxKyIkQCJ9CitmaQorCisKKyAgICBpZiB0ZXN0ICRhc19oYXZlX3JlcXVpcmVkID0gbm87IHRoZW4KKyAgZWNobyBUaGlzIHNjcmlwdCByZXF1aXJlcyBhIHNoZWxsIG1vcmUgbW9kZXJuIHRoYW4gYWxsIHRoZQorICAgICAgZWNobyBzaGVsbHMgdGhhdCBJIGZvdW5kIG9uIHlvdXIgc3lzdGVtLiAgUGxlYXNlIGluc3RhbGwgYQorICAgICAgZWNobyBtb2Rlcm4gc2hlbGwsIG9yIG1hbnVhbGx5IHJ1biB0aGUgc2NyaXB0IHVuZGVyIHN1Y2ggYQorICAgICAgZWNobyBzaGVsbCBpZiB5b3UgZG8gaGF2ZSBvbmUuCisgICAgICB7IChleGl0IDEpOyBleGl0IDE7IH0KK2ZpCisKKworZmkKKworZmkKKworCisKKyhldmFsICJhc19mdW5jX3JldHVybiAoKSB7CisgIChleGl0IFwkMSkKK30KK2FzX2Z1bmNfc3VjY2VzcyAoKSB7CisgIGFzX2Z1bmNfcmV0dXJuIDAKK30KK2FzX2Z1bmNfZmFpbHVyZSAoKSB7CisgIGFzX2Z1bmNfcmV0dXJuIDEKK30KK2FzX2Z1bmNfcmV0X3N1Y2Nlc3MgKCkgeworICByZXR1cm4gMAorfQorYXNfZnVuY19yZXRfZmFpbHVyZSAoKSB7CisgIHJldHVybiAxCit9CisKK2V4aXRjb2RlPTAKK2lmIGFzX2Z1bmNfc3VjY2VzczsgdGhlbgorICA6CitlbHNlCisgIGV4aXRjb2RlPTEKKyAgZWNobyBhc19mdW5jX3N1Y2Nlc3MgZmFpbGVkLgorZmkKKworaWYgYXNfZnVuY19mYWlsdXJlOyB0aGVuCisgIGV4aXRjb2RlPTEKKyAgZWNobyBhc19mdW5jX2ZhaWx1cmUgc3VjY2VlZGVkLgorZmkKKworaWYgYXNfZnVuY19yZXRfc3VjY2VzczsgdGhlbgorICA6CitlbHNlCisgIGV4aXRjb2RlPTEKKyAgZWNobyBhc19mdW5jX3JldF9zdWNjZXNzIGZhaWxlZC4KK2ZpCisKK2lmIGFzX2Z1bmNfcmV0X2ZhaWx1cmU7IHRoZW4KKyAgZXhpdGNvZGU9MQorICBlY2hvIGFzX2Z1bmNfcmV0X2ZhaWx1cmUgc3VjY2VlZGVkLgorZmkKKworaWYgKCBzZXQgeDsgYXNfZnVuY19yZXRfc3VjY2VzcyB5ICYmIHRlc3QgeCA9IFwiXCQxXCIgKTsgdGhlbgorICA6CitlbHNlCisgIGV4aXRjb2RlPTEKKyAgZWNobyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgd2VyZSBub3Qgc2F2ZWQuCitmaQorCit0ZXN0IFwkZXhpdGNvZGUgPSAwIikgfHwgeworICBlY2hvIE5vIHNoZWxsIGZvdW5kIHRoYXQgc3VwcG9ydHMgc2hlbGwgZnVuY3Rpb25zLgorICBlY2hvIFBsZWFzZSB0ZWxsIGF1dG9jb25mQGdudS5vcmcgYWJvdXQgeW91ciBzeXN0ZW0sCisgIGVjaG8gaW5jbHVkaW5nIGFueSBlcnJvciBwb3NzaWJseSBvdXRwdXQgYmVmb3JlIHRoaXMKKyAgZWNobyBtZXNzYWdlCit9CisKKworCisgIGFzX2xpbmVub18xPSRMSU5FTk8KKyAgYXNfbGluZW5vXzI9JExJTkVOTworICB0ZXN0ICJ4JGFzX2xpbmVub18xIiAhPSAieCRhc19saW5lbm9fMiIgJiYKKyAgdGVzdCAieGBleHByICRhc19saW5lbm9fMSArIDFgIiA9ICJ4JGFzX2xpbmVub18yIiB8fCB7CisKKyAgIyBDcmVhdGUgJGFzX21lLmxpbmVubyBhcyBhIGNvcHkgb2YgJGFzX215c2VsZiwgYnV0IHdpdGggJExJTkVOTworICAjIHVuaWZvcm1seSByZXBsYWNlZCBieSB0aGUgbGluZSBudW1iZXIuICBUaGUgZmlyc3QgJ3NlZCcgaW5zZXJ0cyBhCisgICMgbGluZS1udW1iZXIgbGluZSBhZnRlciBlYWNoIGxpbmUgdXNpbmcgJExJTkVOTzsgdGhlIHNlY29uZCAnc2VkJworICAjIGRvZXMgdGhlIHJlYWwgd29yay4gIFRoZSBzZWNvbmQgc2NyaXB0IHVzZXMgJ04nIHRvIHBhaXIgZWFjaAorICAjIGxpbmUtbnVtYmVyIGxpbmUgd2l0aCB0aGUgbGluZSBjb250YWluaW5nICRMSU5FTk8sIGFuZCBhcHBlbmRzCisgICMgdHJhaWxpbmcgJy0nIGR1cmluZyBzdWJzdGl0dXRpb24gc28gdGhhdCAkTElORU5PIGlzIG5vdCBhIHNwZWNpYWwKKyAgIyBjYXNlIGF0IGxpbmUgZW5kLgorICAjIChSYWphIFIgSGFyaW5hdGggc3VnZ2VzdGVkIHNlZCAnPScsIGFuZCBQYXVsIEVnZ2VydCB3cm90ZSB0aGUKKyAgIyBzY3JpcHRzIHdpdGggb3B0aW1pemF0aW9uIGhlbHAgZnJvbSBQYW9sbyBCb256aW5pLiAgQmxhbWUgTGVlCisgICMgRS4gTWNNYWhvbiAoMTkzMS0xOTg5KSBmb3Igc2VkJ3Mgc3ludGF4LiAgOi0pCisgIHNlZCAtbiAnCisgICAgcAorICAgIC9bJF1MSU5FTk8vPQorICAnIDwkYXNfbXlzZWxmIHwKKyAgICBzZWQgJworICAgICAgcy9bJF1MSU5FTk8uKi8mLS8KKyAgICAgIHQgbGluZW5vCisgICAgICBiCisgICAgICA6bGluZW5vCisgICAgICBOCisgICAgICA6bG9vcAorICAgICAgcy9bJF1MSU5FTk9cKFteJyRhc19jcl9hbG51bSdfXS4qXG5cKVwoLipcKS9cMlwxXDIvCisgICAgICB0IGxvb3AKKyAgICAgIHMvLVxuLiovLworICAgICcgPiRhc19tZS5saW5lbm8gJiYKKyAgY2htb2QgK3ggIiRhc19tZS5saW5lbm8iIHx8CisgICAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlICRhc19tZS5saW5lbm87IHJlcnVuIHdpdGggYSBQT1NJWCBzaGVsbCIgPiYyCisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKworICAjIERvbid0IHRyeSB0byBleGVjIGFzIGl0IGNoYW5nZXMgJFswXSwgY2F1c2luZyBhbGwgc29ydCBvZiBwcm9ibGVtcworICAjICh0aGUgZGlybmFtZSBvZiAkWzBdIGlzIG5vdCB0aGUgcGxhY2Ugd2hlcmUgd2UgbWlnaHQgZmluZCB0aGUKKyAgIyBvcmlnaW5hbCBhbmQgc28gb24uICBBdXRvY29uZiBpcyBlc3BlY2lhbGx5IHNlbnNpdGl2ZSB0byB0aGlzKS4KKyAgLiAiLi8kYXNfbWUubGluZW5vIgorICAjIEV4aXQgc3RhdHVzIGlzIHRoYXQgb2YgdGhlIGxhc3QgY29tbWFuZC4KKyAgZXhpdAorfQorCisKK2lmIChhc19kaXI9YGRpcm5hbWUgLS0gL2AgJiYgdGVzdCAiWCRhc19kaXIiID0gWC8pID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhc19kaXJuYW1lPWRpcm5hbWUKK2Vsc2UKKyAgYXNfZGlybmFtZT1mYWxzZQorZmkKKworRUNIT19DPSBFQ0hPX049IEVDSE9fVD0KK2Nhc2UgYGVjaG8gLW4geGAgaW4KKy1uKikKKyAgY2FzZSBgZWNobyAneFxjJ2AgaW4KKyAgKmMqKSBFQ0hPX1Q9JwknOzsJIyBFQ0hPX1QgaXMgc2luZ2xlIHRhYiBjaGFyYWN0ZXIuCisgICopICAgRUNIT19DPSdcYyc7OworICBlc2FjOzsKKyopCisgIEVDSE9fTj0nLW4nOzsKK2VzYWMKKworaWYgZXhwciBhIDogJ1woYVwpJyA+L2Rldi9udWxsIDI+JjEgJiYKKyAgIHRlc3QgIlhgZXhwciAwMDAwMSA6ICcuKlwoLi4uXCknYCIgPSBYMDAxOyB0aGVuCisgIGFzX2V4cHI9ZXhwcgorZWxzZQorICBhc19leHByPWZhbHNlCitmaQorCitybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZmlsZQoraWYgdGVzdCAtZCBjb25mJCQuZGlyOyB0aGVuCisgIHJtIC1mIGNvbmYkJC5kaXIvY29uZiQkLmZpbGUKK2Vsc2UKKyAgcm0gLWYgY29uZiQkLmRpcgorICBta2RpciBjb25mJCQuZGlyCitmaQorZWNobyA+Y29uZiQkLmZpbGUKK2lmIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgorICBhc19sbl9zPSdsbiAtcycKKyAgIyAuLi4gYnV0IHRoZXJlIGFyZSB0d28gZ290Y2hhczoKKyAgIyAxKSBPbiBNU1lTLCBib3RoIGBsbiAtcyBmaWxlIGRpcicgYW5kIGBsbiBmaWxlIGRpcicgZmFpbC4KKyAgIyAyKSBESkdQUCA8IDIuMDQgaGFzIG5vIHN5bWxpbmtzOyBgbG4gLXMnIGNyZWF0ZXMgYSB3cmFwcGVyIGV4ZWN1dGFibGUuCisgICMgSW4gYm90aCBjYXNlcywgd2UgaGF2ZSB0byBkZWZhdWx0IHRvIGBjcCAtcCcuCisgIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJC5kaXIgMj4vZGV2L251bGwgJiYgdGVzdCAhIC1mIGNvbmYkJC5leGUgfHwKKyAgICBhc19sbl9zPSdjcCAtcCcKK2VsaWYgbG4gY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCisgIGFzX2xuX3M9bG4KK2Vsc2UKKyAgYXNfbG5fcz0nY3AgLXAnCitmaQorcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmRpci9jb25mJCQuZmlsZSBjb25mJCQuZmlsZQorcm1kaXIgY29uZiQkLmRpciAyPi9kZXYvbnVsbAorCitpZiBta2RpciAtcCAuIDI+L2Rldi9udWxsOyB0aGVuCisgIGFzX21rZGlyX3A9OgorZWxzZQorICB0ZXN0IC1kIC4vLXAgJiYgcm1kaXIgLi8tcAorICBhc19ta2Rpcl9wPWZhbHNlCitmaQorCitpZiB0ZXN0IC14IC8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFzX3Rlc3RfeD0ndGVzdCAteCcKK2Vsc2UKKyAgaWYgbHMgLWRMIC8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgYXNfbHNfTF9vcHRpb249TAorICBlbHNlCisgICAgYXNfbHNfTF9vcHRpb249CisgIGZpCisgIGFzX3Rlc3RfeD0nCisgICAgZXZhbCBzaCAtYyAnXCcnCisgICAgICBpZiB0ZXN0IC1kICIkMSI7IHRoZW4KKyAgICAgICAgdGVzdCAtZCAiJDEvLiI7CisgICAgICBlbHNlCisJY2FzZSAkMSBpbgorICAgICAgICAtKilzZXQgIi4vJDEiOzsKKwllc2FjOworCWNhc2UgYGxzIC1sZCckYXNfbHNfTF9vcHRpb24nICIkMSIgMj4vZGV2L251bGxgIGluCisJPz8/W3N4XSopOjs7KilmYWxzZTs7ZXNhYztmaQorICAgICdcJycgc2gKKyAgJworZmkKK2FzX2V4ZWN1dGFibGVfcD0kYXNfdGVzdF94CisKKyMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCBDUFAgbmFtZS4KK2FzX3RyX2NwcD0iZXZhbCBzZWQgJ3klKiRhc19jcl9sZXR0ZXJzJVAkYXNfY3JfTEVUVEVSUyU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCisKKyMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCB2YXJpYWJsZSBuYW1lLgorYXNfdHJfc2g9ImV2YWwgc2VkICd5JSorJXBwJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKKworCisKKworIyBDaGVjayB0aGF0IHdlIGFyZSBydW5uaW5nIHVuZGVyIHRoZSBjb3JyZWN0IHNoZWxsLgorU0hFTEw9JHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0KKworY2FzZSBYJEVDSE8gaW4KK1gqLS1mYWxsYmFjay1lY2hvKQorICAjIFJlbW92ZSBvbmUgbGV2ZWwgb2YgcXVvdGF0aW9uICh3aGljaCB3YXMgcmVxdWlyZWQgZm9yIE1ha2UpLgorICBFQ0hPPWBlY2hvICIkRUNITyIgfCBzZWQgJ3MsXFxcXFwkXFwkMCwnJDAnLCdgCisgIDs7Citlc2FjCisKK2VjaG89JHtFQ0hPLWVjaG99CitpZiB0ZXN0ICJYJDEiID0gWC0tbm8tcmVleGVjOyB0aGVuCisgICMgRGlzY2FyZCB0aGUgLS1uby1yZWV4ZWMgZmxhZywgYW5kIGNvbnRpbnVlLgorICBzaGlmdAorZWxpZiB0ZXN0ICJYJDEiID0gWC0tZmFsbGJhY2stZWNobzsgdGhlbgorICAjIEF2b2lkIGlubGluZSBkb2N1bWVudCBoZXJlLCBpdCBtYXkgYmUgbGVmdCBvdmVyCisgIDoKK2VsaWYgdGVzdCAiWGAoJGVjaG8gJ1x0JykgMj4vZGV2L251bGxgIiA9ICdYXHQnIDsgdGhlbgorICAjIFlpcHBlZSwgJGVjaG8gd29ya3MhCisgIDoKK2Vsc2UKKyAgIyBSZXN0YXJ0IHVuZGVyIHRoZSBjb3JyZWN0IHNoZWxsLgorICBleGVjICRTSEVMTCAiJDAiIC0tbm8tcmVleGVjICR7MSsiJEAifQorZmkKKworaWYgdGVzdCAiWCQxIiA9IFgtLWZhbGxiYWNrLWVjaG87IHRoZW4KKyAgIyB1c2VkIGFzIGZhbGxiYWNrIGVjaG8KKyAgc2hpZnQKKyAgY2F0IDw8RU9GCiskKgorRU9GCisgIGV4aXQgMAorZmkKKworIyBUaGUgSFAtVVgga3NoIGFuZCBQT1NJWCBzaGVsbCBwcmludCB0aGUgdGFyZ2V0IGRpcmVjdG9yeSB0byBzdGRvdXQKKyMgaWYgQ0RQQVRIIGlzIHNldC4KKyh1bnNldCBDRFBBVEgpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBDRFBBVEgKKworaWYgdGVzdCAteiAiJEVDSE8iOyB0aGVuCitpZiB0ZXN0ICJYJHtlY2hvX3Rlc3Rfc3RyaW5nK3NldH0iICE9IFhzZXQ7IHRoZW4KKyMgZmluZCBhIHN0cmluZyBhcyBsYXJnZSBhcyBwb3NzaWJsZSwgYXMgbG9uZyBhcyB0aGUgc2hlbGwgY2FuIGNvcGUgd2l0aCBpdAorICBmb3IgY21kIGluICdzZWQgNTBxICIkMCInICdzZWQgMjBxICIkMCInICdzZWQgMTBxICIkMCInICdzZWQgMnEgIiQwIicgJ2VjaG8gdGVzdCc7IGRvCisgICAgIyBleHBlY3RlZCBzaXplczogbGVzcyB0aGFuIDJLYiwgMUtiLCA1MTIgYnl0ZXMsIDE2IGJ5dGVzLCAuLi4KKyAgICBpZiAoZWNob190ZXN0X3N0cmluZz1gZXZhbCAkY21kYCkgMj4vZGV2L251bGwgJiYKKyAgICAgICBlY2hvX3Rlc3Rfc3RyaW5nPWBldmFsICRjbWRgICYmCisgICAgICAgKHRlc3QgIlgkZWNob190ZXN0X3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIikgMj4vZGV2L251bGwKKyAgICB0aGVuCisgICAgICBicmVhaworICAgIGZpCisgIGRvbmUKK2ZpCisKK2lmIHRlc3QgIlhgKCRlY2hvICdcdCcpIDI+L2Rldi9udWxsYCIgPSAnWFx0JyAmJgorICAgZWNob190ZXN0aW5nX3N0cmluZz1gKCRlY2hvICIkZWNob190ZXN0X3N0cmluZyIpIDI+L2Rldi9udWxsYCAmJgorICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCisgIDoKK2Vsc2UKKyAgIyBUaGUgU29sYXJpcywgQUlYLCBhbmQgRGlnaXRhbCBVbml4IGRlZmF1bHQgZWNobyBwcm9ncmFtcyB1bnF1b3RlCisgICMgYmFja3NsYXNoZXMuICBUaGlzIG1ha2VzIGl0IGltcG9zc2libGUgdG8gcXVvdGUgYmFja3NsYXNoZXMgdXNpbmcKKyAgIyAgIGVjaG8gIiRzb21ldGhpbmciIHwgc2VkICdzL1xcL1xcXFwvZycKKyAgIworICAjIFNvLCBmaXJzdCB3ZSBsb29rIGZvciBhIHdvcmtpbmcgZWNobyBpbiB0aGUgdXNlcidzIFBBVEguCisKKyAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgIGZvciBkaXIgaW4gJFBBVEggL3Vzci91Y2I7IGRvCisgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgaWYgKHRlc3QgLWYgJGRpci9lY2hvIHx8IHRlc3QgLWYgJGRpci9lY2hvJGFjX2V4ZWV4dCkgJiYKKyAgICAgICB0ZXN0ICJYYCgkZGlyL2VjaG8gJ1x0JykgMj4vZGV2L251bGxgIiA9ICdYXHQnICYmCisgICAgICAgZWNob190ZXN0aW5nX3N0cmluZz1gKCRkaXIvZWNobyAiJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbGAgJiYKKyAgICAgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KKyAgICAgIGVjaG89IiRkaXIvZWNobyIKKyAgICAgIGJyZWFrCisgICAgZmkKKyAgZG9uZQorICBJRlM9IiRsdF9zYXZlX2lmcyIKKworICBpZiB0ZXN0ICJYJGVjaG8iID0gWGVjaG87IHRoZW4KKyAgICAjIFdlIGRpZG4ndCBmaW5kIGEgYmV0dGVyIGVjaG8sIHNvIGxvb2sgZm9yIGFsdGVybmF0aXZlcy4KKyAgICBpZiB0ZXN0ICJYYChwcmludCAtciAnXHQnKSAyPi9kZXYvbnVsbGAiID0gJ1hcdCcgJiYKKyAgICAgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAocHJpbnQgLXIgIiRlY2hvX3Rlc3Rfc3RyaW5nIikgMj4vZGV2L251bGxgICYmCisgICAgICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCisgICAgICAjIFRoaXMgc2hlbGwgaGFzIGEgYnVpbHRpbiBwcmludCAtciB0aGF0IGRvZXMgdGhlIHRyaWNrLgorICAgICAgZWNobz0ncHJpbnQgLXInCisgICAgZWxpZiAodGVzdCAtZiAvYmluL2tzaCB8fCB0ZXN0IC1mIC9iaW4va3NoJGFjX2V4ZWV4dCkgJiYKKwkgdGVzdCAiWCRDT05GSUdfU0hFTEwiICE9IFgvYmluL2tzaDsgdGhlbgorICAgICAgIyBJZiB3ZSBoYXZlIGtzaCwgdHJ5IHJ1bm5pbmcgY29uZmlndXJlIGFnYWluIHdpdGggaXQuCisgICAgICBPUklHSU5BTF9DT05GSUdfU0hFTEw9JHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0KKyAgICAgIGV4cG9ydCBPUklHSU5BTF9DT05GSUdfU0hFTEwKKyAgICAgIENPTkZJR19TSEVMTD0vYmluL2tzaAorICAgICAgZXhwb3J0IENPTkZJR19TSEVMTAorICAgICAgZXhlYyAkQ09ORklHX1NIRUxMICIkMCIgLS1uby1yZWV4ZWMgJHsxKyIkQCJ9CisgICAgZWxzZQorICAgICAgIyBUcnkgdXNpbmcgcHJpbnRmLgorICAgICAgZWNobz0ncHJpbnRmICVzXG4nCisgICAgICBpZiB0ZXN0ICJYYCgkZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAiID0gJ1hcdCcgJiYKKwkgZWNob190ZXN0aW5nX3N0cmluZz1gKCRlY2hvICIkZWNob190ZXN0X3N0cmluZyIpIDI+L2Rldi9udWxsYCAmJgorCSB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KKwkjIENvb2wsIHByaW50ZiB3b3JrcworCToKKyAgICAgIGVsaWYgZWNob190ZXN0aW5nX3N0cmluZz1gKCRPUklHSU5BTF9DT05GSUdfU0hFTEwgIiQwIiAtLWZhbGxiYWNrLWVjaG8gJ1x0JykgMj4vZGV2L251bGxgICYmCisJICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICdYXHQnICYmCisJICAgZWNob190ZXN0aW5nX3N0cmluZz1gKCRPUklHSU5BTF9DT05GSUdfU0hFTEwgIiQwIiAtLWZhbGxiYWNrLWVjaG8gIiRlY2hvX3Rlc3Rfc3RyaW5nIikgMj4vZGV2L251bGxgICYmCisJICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCisJQ09ORklHX1NIRUxMPSRPUklHSU5BTF9DT05GSUdfU0hFTEwKKwlleHBvcnQgQ09ORklHX1NIRUxMCisJU0hFTEw9IiRDT05GSUdfU0hFTEwiCisJZXhwb3J0IFNIRUxMCisJZWNobz0iJENPTkZJR19TSEVMTCAkMCAtLWZhbGxiYWNrLWVjaG8iCisgICAgICBlbGlmIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkQ09ORklHX1NIRUxMICIkMCIgLS1mYWxsYmFjay1lY2hvICdcdCcpIDI+L2Rldi9udWxsYCAmJgorCSAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAnWFx0JyAmJgorCSAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkQ09ORklHX1NIRUxMICIkMCIgLS1mYWxsYmFjay1lY2hvICIkZWNob190ZXN0X3N0cmluZyIpIDI+L2Rldi9udWxsYCAmJgorCSAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgorCWVjaG89IiRDT05GSUdfU0hFTEwgJDAgLS1mYWxsYmFjay1lY2hvIgorICAgICAgZWxzZQorCSMgbWF5YmUgd2l0aCBhIHNtYWxsZXIgc3RyaW5nLi4uCisJcHJldj06CisKKwlmb3IgY21kIGluICdlY2hvIHRlc3QnICdzZWQgMnEgIiQwIicgJ3NlZCAxMHEgIiQwIicgJ3NlZCAyMHEgIiQwIicgJ3NlZCA1MHEgIiQwIic7IGRvCisJICBpZiAodGVzdCAiWCRlY2hvX3Rlc3Rfc3RyaW5nIiA9ICJYYGV2YWwgJGNtZGAiKSAyPi9kZXYvbnVsbAorCSAgdGhlbgorCSAgICBicmVhaworCSAgZmkKKwkgIHByZXY9IiRjbWQiCisJZG9uZQorCisJaWYgdGVzdCAiJHByZXYiICE9ICdzZWQgNTBxICIkMCInOyB0aGVuCisJICBlY2hvX3Rlc3Rfc3RyaW5nPWBldmFsICRwcmV2YAorCSAgZXhwb3J0IGVjaG9fdGVzdF9zdHJpbmcKKwkgIGV4ZWMgJHtPUklHSU5BTF9DT05GSUdfU0hFTEwtJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH19ICIkMCIgJHsxKyIkQCJ9CisJZWxzZQorCSAgIyBPb3BzLiAgV2UgbG9zdCBjb21wbGV0ZWx5LCBzbyBqdXN0IHN0aWNrIHdpdGggZWNoby4KKwkgIGVjaG89ZWNobworCWZpCisgICAgICBmaQorICAgIGZpCisgIGZpCitmaQorZmkKKworIyBDb3B5IGVjaG8gYW5kIHF1b3RlIHRoZSBjb3B5IHN1aXRhYmx5IGZvciBwYXNzaW5nIHRvIGxpYnRvb2wgZnJvbQorIyB0aGUgTWFrZWZpbGUsIGluc3RlYWQgb2YgcXVvdGluZyB0aGUgb3JpZ2luYWwsIHdoaWNoIGlzIHVzZWQgbGF0ZXIuCitFQ0hPPSRlY2hvCitpZiB0ZXN0ICJYJEVDSE8iID0gIlgkQ09ORklHX1NIRUxMICQwIC0tZmFsbGJhY2stZWNobyI7IHRoZW4KKyAgIEVDSE89IiRDT05GSUdfU0hFTEwgXFxcJFwkMCAtLWZhbGxiYWNrLWVjaG8iCitmaQorCisKKworCit0YWduYW1lcz0ke3RhZ25hbWVzKyR7dGFnbmFtZXN9LH1DWFgKKwordGFnbmFtZXM9JHt0YWduYW1lcyske3RhZ25hbWVzfSx9Rjc3CisKK2V4ZWMgNzwmMCA8L2Rldi9udWxsIDY+JjEKKworIyBOYW1lIG9mIHRoZSBob3N0LgorIyBob3N0bmFtZSBvbiBzb21lIHN5c3RlbXMgKFNWUjMuMiwgTGludXgpIHJldHVybnMgYSBib2d1cyBleGl0IHN0YXR1cywKKyMgc28gdW5hbWUgZ2V0cyBydW4gdG9vLgorYWNfaG9zdG5hbWU9YChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgCisKKyMKKyMgSW5pdGlhbGl6YXRpb25zLgorIworYWNfZGVmYXVsdF9wcmVmaXg9L3Vzci9sb2NhbAorYWNfY2xlYW5fZmlsZXM9CithY19jb25maWdfbGlib2JqX2Rpcj0uCitMSUJPQkpTPQorY3Jvc3NfY29tcGlsaW5nPW5vCitzdWJkaXJzPQorTUZMQUdTPQorTUFLRUZMQUdTPQorU0hFTEw9JHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0KKworIyBJZGVudGl0eSBvZiB0aGlzIHBhY2thZ2UuCitQQUNLQUdFX05BTUU9J0dOVSBwYXJ0ZWQnCitQQUNLQUdFX1RBUk5BTUU9J3BhcnRlZCcKK1BBQ0tBR0VfVkVSU0lPTj0nMS44LjcnCitQQUNLQUdFX1NUUklORz0nR05VIHBhcnRlZCAxLjguNycKK1BBQ0tBR0VfQlVHUkVQT1JUPSdidWctcGFydGVkQGdudS5vcmcnCisKK2FjX3VuaXF1ZV9maWxlPSJpbmNsdWRlL3BhcnRlZC9wYXJ0ZWQuaCIKKyMgRmFjdG9yaW5nIGRlZmF1bHQgaGVhZGVycyBmb3IgbW9zdCB0ZXN0cy4KK2FjX2luY2x1ZGVzX2RlZmF1bHQ9IlwKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyMgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TVEFUX0gKKyMgaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZgorI2lmZGVmIFNURENfSEVBREVSUworIyBpbmNsdWRlIDxzdGRsaWIuaD4KKyMgaW5jbHVkZSA8c3RkZGVmLmg+CisjZWxzZQorIyBpZmRlZiBIQVZFX1NURExJQl9ICisjICBpbmNsdWRlIDxzdGRsaWIuaD4KKyMgZW5kaWYKKyNlbmRpZgorI2lmZGVmIEhBVkVfU1RSSU5HX0gKKyMgaWYgIWRlZmluZWQgU1REQ19IRUFERVJTICYmIGRlZmluZWQgSEFWRV9NRU1PUllfSAorIyAgaW5jbHVkZSA8bWVtb3J5Lmg+CisjIGVuZGlmCisjIGluY2x1ZGUgPHN0cmluZy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TVFJJTkdTX0gKKyMgaW5jbHVkZSA8c3RyaW5ncy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9JTlRUWVBFU19ICisjIGluY2x1ZGUgPGludHR5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NURElOVF9ICisjIGluY2x1ZGUgPHN0ZGludC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9VTklTVERfSAorIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZiIKKworYWNfaGVhZGVyX2xpc3Q9CithY19mdW5jX2xpc3Q9CitndF9uZWVkcz0KK2FjX3N1YnN0X3ZhcnM9J1NIRUxMCitQQVRIX1NFUEFSQVRPUgorUEFDS0FHRV9OQU1FCitQQUNLQUdFX1RBUk5BTUUKK1BBQ0tBR0VfVkVSU0lPTgorUEFDS0FHRV9TVFJJTkcKK1BBQ0tBR0VfQlVHUkVQT1JUCitleGVjX3ByZWZpeAorcHJlZml4Citwcm9ncmFtX3RyYW5zZm9ybV9uYW1lCitiaW5kaXIKK3NiaW5kaXIKK2xpYmV4ZWNkaXIKK2RhdGFyb290ZGlyCitkYXRhZGlyCitzeXNjb25mZGlyCitzaGFyZWRzdGF0ZWRpcgorbG9jYWxzdGF0ZWRpcgoraW5jbHVkZWRpcgorb2xkaW5jbHVkZWRpcgorZG9jZGlyCitpbmZvZGlyCitodG1sZGlyCitkdmlkaXIKK3BkZmRpcgorcHNkaXIKK2xpYmRpcgorbG9jYWxlZGlyCittYW5kaXIKK0RFRlMKK0VDSE9fQworRUNIT19OCitFQ0hPX1QKK0xJQlMKK2J1aWxkX2FsaWFzCitob3N0X2FsaWFzCit0YXJnZXRfYWxpYXMKK0xUX1JFTEVBU0UKK0xUX0NVUlJFTlQKK0xUX1JFVklTSU9OCitMVF9BR0UKK0lOU1RBTExfUFJPR1JBTQorSU5TVEFMTF9TQ1JJUFQKK0lOU1RBTExfREFUQQorYW1fX2lzcmMKK0NZR1BBVEhfVworUEFDS0FHRQorVkVSU0lPTgorQUNMT0NBTAorQVVUT0NPTkYKK0FVVE9NQUtFCitBVVRPSEVBREVSCitNQUtFSU5GTworaW5zdGFsbF9zaAorU1RSSVAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTQorbWtkaXJfcAorQVdLCitTRVRfTUFLRQorYW1fX2xlYWRpbmdfZG90CitBTVRBUgorYW1fX3RhcgorYW1fX3VudGFyCitidWlsZAorYnVpbGRfY3B1CitidWlsZF92ZW5kb3IKK2J1aWxkX29zCitob3N0Citob3N0X2NwdQoraG9zdF92ZW5kb3IKK2hvc3Rfb3MKK09TCitQQVJURURMREZMQUdTCitDQworQ0ZMQUdTCitMREZMQUdTCitDUFBGTEFHUworYWNfY3RfQ0MKK0VYRUVYVAorT0JKRVhUCitERVBESVIKK2FtX19pbmNsdWRlCithbV9fcXVvdGUKK0FNREVQX1RSVUUKK0FNREVQX0ZBTFNFCitBTURFUEJBQ0tTTEFTSAorQ0NERVBNT0RFCithbV9fZmFzdGRlcENDX1RSVUUKK2FtX19mYXN0ZGVwQ0NfRkFMU0UKK0NQUAorR1JFUAorRUdSRVAKK1JBTkxJQgorR0xfQ09ORF9MSUJUT09MX1RSVUUKK0dMX0NPTkRfTElCVE9PTF9GQUxTRQorTFRBTExPQ0EKK0FMTE9DQQorQUxMT0NBX0gKK0dFVE9QVF9ICitMSUJJTlRMCitMVExJQklOVEwKK0hBVkVfTE9OR19MT05HX0lOVAorSEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UCitIQVZFX0lOVFRZUEVTX0gKK0hBVkVfU1lTX1RZUEVTX0gKK0FCU09MVVRFX1NURElOVF9ICitIQVZFX1NURElOVF9ICitIQVZFX1NZU19JTlRUWVBFU19ICitIQVZFX1NZU19CSVRZUEVTX0gKK0JJVFNJWkVPRl9QVFJESUZGX1QKK0JJVFNJWkVPRl9TSUdfQVRPTUlDX1QKK0JJVFNJWkVPRl9TSVpFX1QKK0JJVFNJWkVPRl9XQ0hBUl9UCitCSVRTSVpFT0ZfV0lOVF9UCitIQVZFX1NJR05FRF9TSUdfQVRPTUlDX1QKK0hBVkVfU0lHTkVEX1dDSEFSX1QKK0hBVkVfU0lHTkVEX1dJTlRfVAorUFRSRElGRl9UX1NVRkZJWAorU0lHX0FUT01JQ19UX1NVRkZJWAorU0laRV9UX1NVRkZJWAorV0NIQVJfVF9TVUZGSVgKK1dJTlRfVF9TVUZGSVgKK1NURElOVF9ICitQUklfTUFDUk9TX0JST0tFTgorR05VTElCX0lNQVhBQlMKK0dOVUxJQl9JTUFYRElWCitHTlVMSUJfU1RSVE9JTUFYCitHTlVMSUJfU1RSVE9VTUFYCitIQVZFX0RFQ0xfSU1BWEFCUworSEFWRV9ERUNMX0lNQVhESVYKK0hBVkVfREVDTF9TVFJUT0lNQVgKK0hBVkVfREVDTF9TVFJUT1VNQVgKK0FCU09MVVRFX0lOVFRZUEVTX0gKK1BSSVBUUl9QUkVGSVgKK0lOVFRZUEVTX0gKK0dMSUJDMjEKK1NUREJPT0xfSAorSEFWRV9fQk9PTAorR05VTElCX0dFVFNVQk9QVAorR05VTElCX01LRFRFTVAKK0dOVUxJQl9NS1NURU1QCitIQVZFX0dFVFNVQk9QVAorSEFWRV9NS0RURU1QCitSRVBMQUNFX01LU1RFTVAKK0FCU09MVVRFX1NURExJQl9ICitHTlVMSUJfTUVNTUVNCitHTlVMSUJfTUVNUENQWQorR05VTElCX01FTVJDSFIKK0dOVUxJQl9TVFBDUFkKK0dOVUxJQl9TVFBOQ1BZCitHTlVMSUJfU1RSQ0hSTlVMCitHTlVMSUJfU1RSRFVQCitHTlVMSUJfU1RSTkRVUAorR05VTElCX1NUUk5MRU4KK0dOVUxJQl9TVFJQQlJLCitHTlVMSUJfU1RSU0VQCitHTlVMSUJfU1RSQ0FTRVNUUgorR05VTElCX1NUUlRPS19SCitHTlVMSUJfTUJTTEVOCitHTlVMSUJfTUJTQ0hSCitHTlVMSUJfTUJTUkNIUgorR05VTElCX01CU1NUUgorR05VTElCX01CU0NBU0VDTVAKK0dOVUxJQl9NQlNOQ0FTRUNNUAorR05VTElCX01CU1BDQVNFQ01QCitHTlVMSUJfTUJTQ0FTRVNUUgorR05VTElCX01CU0NTUE4KK0dOVUxJQl9NQlNQQlJLCitHTlVMSUJfTUJTU1BOCitHTlVMSUJfTUJTU0VQCitHTlVMSUJfTUJTVE9LX1IKK0hBVkVfREVDTF9NRU1NRU0KK0hBVkVfTUVNUENQWQorSEFWRV9ERUNMX01FTVJDSFIKK0hBVkVfU1RQQ1BZCitIQVZFX1NUUE5DUFkKK0hBVkVfU1RSQ0FTRUNNUAorSEFWRV9ERUNMX1NUUk5DQVNFQ01QCitIQVZFX1NUUkNIUk5VTAorSEFWRV9ERUNMX1NUUkRVUAorSEFWRV9TVFJORFVQCitIQVZFX0RFQ0xfU1RSTkRVUAorSEFWRV9ERUNMX1NUUk5MRU4KK0hBVkVfU1RSUEJSSworSEFWRV9TVFJTRVAKK0hBVkVfU1RSQ0FTRVNUUgorSEFWRV9ERUNMX1NUUlRPS19SCitBQlNPTFVURV9TVFJJTkdfSAorUE9XX0xJQgorR05VTElCX0NIT1dOCitHTlVMSUJfRFVQMgorR05VTElCX0ZDSERJUgorR05VTElCX0ZUUlVOQ0FURQorR05VTElCX0dFVENXRAorR05VTElCX0dFVExPR0lOX1IKK0dOVUxJQl9SRUFETElOSworR05VTElCX1NMRUVQCitIQVZFX0RVUDIKK0hBVkVfRlRSVU5DQVRFCitIQVZFX1JFQURMSU5LCitIQVZFX1NMRUVQCitIQVZFX0RFQ0xfR0VUTE9HSU5fUgorUkVQTEFDRV9DSE9XTgorUkVQTEFDRV9GQ0hESVIKK1JFUExBQ0VfR0VUQ1dECitIQVZFX1VOSVNURF9ICitBQlNPTFVURV9VTklTVERfSAorQUJTT0xVVEVfV0NIQVJfSAorV0NIQVJfSAorSEFWRV9JU1dDTlRSTAorSEFWRV9XSU5UX1QKK0FCU09MVVRFX1dDVFlQRV9ICitIQVZFX1dDVFlQRV9ICitXQ1RZUEVfSAorU0VECitMTl9TCitFQ0hPCitBUgorQ1hYCitDWFhGTEFHUworYWNfY3RfQ1hYCitDWFhERVBNT0RFCithbV9fZmFzdGRlcENYWF9UUlVFCithbV9fZmFzdGRlcENYWF9GQUxTRQorQ1hYQ1BQCitGNzcKK0ZGTEFHUworYWNfY3RfRjc3CitMSUJUT09MCitVU0VfTkxTCitNU0dGTVQKK0dNU0dGTVQKK01TR0ZNVF8wMTUKK0dNU0dGTVRfMDE1CitYR0VUVEVYVAorWEdFVFRFWFRfMDE1CitNU0dNRVJHRQorSU5UTF9NQUNPU1hfTElCUworTElCSUNPTlYKK0xUTElCSUNPTlYKK0lOVExMSUJTCitQT1NVQgorRExfTElCUworVVVJRF9MSUJTCitETV9MSUJTCitTRUxJTlVYX0xJQlMKK1JFSVNFUl9MSUJTCitQQVJURURfTElCUworT1NfTElCUworSU5UTElOQ1MKK0NPTVBJTEVfRk9SX1MzOTBfVFJVRQorQ09NUElMRV9GT1JfUzM5MF9GQUxTRQorUEtHX0NPTkZJRworQ0hFQ0tfQ0ZMQUdTCitDSEVDS19MSUJTCitIQVZFX0NIRUNLX1RSVUUKK0hBVkVfQ0hFQ0tfRkFMU0UKK0JVSUxESU5GTworTElCT0JKUworTFRMSUJPQkpTCitnbF9MSUJPQkpTCitnbF9MVExJQk9CSlMnCithY19zdWJzdF9maWxlcz0nJworICAgICAgYWNfcHJlY2lvdXNfdmFycz0nYnVpbGRfYWxpYXMKK2hvc3RfYWxpYXMKK3RhcmdldF9hbGlhcworQ0MKK0NGTEFHUworTERGTEFHUworTElCUworQ1BQRkxBR1MKK0NQUAorQ1hYCitDWFhGTEFHUworQ0NDCitDWFhDUFAKK0Y3NworRkZMQUdTCitQS0dfQ09ORklHCitDSEVDS19DRkxBR1MKK0NIRUNLX0xJQlMnCisKKworIyBJbml0aWFsaXplIHNvbWUgdmFyaWFibGVzIHNldCBieSBvcHRpb25zLgorYWNfaW5pdF9oZWxwPQorYWNfaW5pdF92ZXJzaW9uPWZhbHNlCisjIFRoZSB2YXJpYWJsZXMgaGF2ZSB0aGUgc2FtZSBuYW1lcyBhcyB0aGUgb3B0aW9ucywgd2l0aAorIyBkYXNoZXMgY2hhbmdlZCB0byB1bmRlcmxpbmVzLgorY2FjaGVfZmlsZT0vZGV2L251bGwKK2V4ZWNfcHJlZml4PU5PTkUKK25vX2NyZWF0ZT0KK25vX3JlY3Vyc2lvbj0KK3ByZWZpeD1OT05FCitwcm9ncmFtX3ByZWZpeD1OT05FCitwcm9ncmFtX3N1ZmZpeD1OT05FCitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPXMseCx4LAorc2lsZW50PQorc2l0ZT0KK3NyY2Rpcj0KK3ZlcmJvc2U9Cit4X2luY2x1ZGVzPU5PTkUKK3hfbGlicmFyaWVzPU5PTkUKKworIyBJbnN0YWxsYXRpb24gZGlyZWN0b3J5IG9wdGlvbnMuCisjIFRoZXNlIGFyZSBsZWZ0IHVuZXhwYW5kZWQgc28gdXNlcnMgY2FuICJtYWtlIGluc3RhbGwgZXhlY19wcmVmaXg9L2ZvbyIKKyMgYW5kIGFsbCB0aGUgdmFyaWFibGVzIHRoYXQgYXJlIHN1cHBvc2VkIHRvIGJlIGJhc2VkIG9uIGV4ZWNfcHJlZml4CisjIGJ5IGRlZmF1bHQgd2lsbCBhY3R1YWxseSBjaGFuZ2UuCisjIFVzZSBicmFjZXMgaW5zdGVhZCBvZiBwYXJlbnMgYmVjYXVzZSBzaCwgcGVybCwgZXRjLiBhbHNvIGFjY2VwdCB0aGVtLgorIyAoVGhlIGxpc3QgZm9sbG93cyB0aGUgc2FtZSBvcmRlciBhcyB0aGUgR05VIENvZGluZyBTdGFuZGFyZHMuKQorYmluZGlyPScke2V4ZWNfcHJlZml4fS9iaW4nCitzYmluZGlyPScke2V4ZWNfcHJlZml4fS9zYmluJworbGliZXhlY2Rpcj0nJHtleGVjX3ByZWZpeH0vbGliZXhlYycKK2RhdGFyb290ZGlyPScke3ByZWZpeH0vc2hhcmUnCitkYXRhZGlyPScke2RhdGFyb290ZGlyfScKK3N5c2NvbmZkaXI9JyR7cHJlZml4fS9ldGMnCitzaGFyZWRzdGF0ZWRpcj0nJHtwcmVmaXh9L2NvbScKK2xvY2Fsc3RhdGVkaXI9JyR7cHJlZml4fS92YXInCitpbmNsdWRlZGlyPScke3ByZWZpeH0vaW5jbHVkZScKK29sZGluY2x1ZGVkaXI9Jy91c3IvaW5jbHVkZScKK2RvY2Rpcj0nJHtkYXRhcm9vdGRpcn0vZG9jLyR7UEFDS0FHRV9UQVJOQU1FfScKK2luZm9kaXI9JyR7ZGF0YXJvb3RkaXJ9L2luZm8nCitodG1sZGlyPScke2RvY2Rpcn0nCitkdmlkaXI9JyR7ZG9jZGlyfScKK3BkZmRpcj0nJHtkb2NkaXJ9JworcHNkaXI9JyR7ZG9jZGlyfScKK2xpYmRpcj0nJHtleGVjX3ByZWZpeH0vbGliJworbG9jYWxlZGlyPScke2RhdGFyb290ZGlyfS9sb2NhbGUnCittYW5kaXI9JyR7ZGF0YXJvb3RkaXJ9L21hbicKKworYWNfcHJldj0KK2FjX2Rhc2hkYXNoPQorZm9yIGFjX29wdGlvbgorZG8KKyAgIyBJZiB0aGUgcHJldmlvdXMgb3B0aW9uIG5lZWRzIGFuIGFyZ3VtZW50LCBhc3NpZ24gaXQuCisgIGlmIHRlc3QgLW4gIiRhY19wcmV2IjsgdGhlbgorICAgIGV2YWwgJGFjX3ByZXY9XCRhY19vcHRpb24KKyAgICBhY19wcmV2PQorICAgIGNvbnRpbnVlCisgIGZpCisKKyAgY2FzZSAkYWNfb3B0aW9uIGluCisgICo9KikJYWNfb3B0YXJnPWBleHByICJYJGFjX29wdGlvbiIgOiAnW149XSo9XCguKlwpJ2AgOzsKKyAgKikJYWNfb3B0YXJnPXllcyA7OworICBlc2FjCisKKyAgIyBBY2NlcHQgdGhlIGltcG9ydGFudCBDeWdudXMgY29uZmlndXJlIG9wdGlvbnMsIHNvIHdlIGNhbiBkaWFnbm9zZSB0eXBvcy4KKworICBjYXNlICRhY19kYXNoZGFzaCRhY19vcHRpb24gaW4KKyAgLS0pCisgICAgYWNfZGFzaGRhc2g9eWVzIDs7CisKKyAgLWJpbmRpciB8IC0tYmluZGlyIHwgLS1iaW5kaSB8IC0tYmluZCB8IC0tYmluIHwgLS1iaSkKKyAgICBhY19wcmV2PWJpbmRpciA7OworICAtYmluZGlyPSogfCAtLWJpbmRpcj0qIHwgLS1iaW5kaT0qIHwgLS1iaW5kPSogfCAtLWJpbj0qIHwgLS1iaT0qKQorICAgIGJpbmRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWJ1aWxkIHwgLS1idWlsZCB8IC0tYnVpbCB8IC0tYnVpIHwgLS1idSkKKyAgICBhY19wcmV2PWJ1aWxkX2FsaWFzIDs7CisgIC1idWlsZD0qIHwgLS1idWlsZD0qIHwgLS1idWlsPSogfCAtLWJ1aT0qIHwgLS1idT0qKQorICAgIGJ1aWxkX2FsaWFzPSRhY19vcHRhcmcgOzsKKworICAtY2FjaGUtZmlsZSB8IC0tY2FjaGUtZmlsZSB8IC0tY2FjaGUtZmlsIHwgLS1jYWNoZS1maSBcCisgIHwgLS1jYWNoZS1mIHwgLS1jYWNoZS0gfCAtLWNhY2hlIHwgLS1jYWNoIHwgLS1jYWMgfCAtLWNhIHwgLS1jKQorICAgIGFjX3ByZXY9Y2FjaGVfZmlsZSA7OworICAtY2FjaGUtZmlsZT0qIHwgLS1jYWNoZS1maWxlPSogfCAtLWNhY2hlLWZpbD0qIHwgLS1jYWNoZS1maT0qIFwKKyAgfCAtLWNhY2hlLWY9KiB8IC0tY2FjaGUtPSogfCAtLWNhY2hlPSogfCAtLWNhY2g9KiB8IC0tY2FjPSogfCAtLWNhPSogfCAtLWM9KikKKyAgICBjYWNoZV9maWxlPSRhY19vcHRhcmcgOzsKKworICAtLWNvbmZpZy1jYWNoZSB8IC1DKQorICAgIGNhY2hlX2ZpbGU9Y29uZmlnLmNhY2hlIDs7CisKKyAgLWRhdGFkaXIgfCAtLWRhdGFkaXIgfCAtLWRhdGFkaSB8IC0tZGF0YWQpCisgICAgYWNfcHJldj1kYXRhZGlyIDs7CisgIC1kYXRhZGlyPSogfCAtLWRhdGFkaXI9KiB8IC0tZGF0YWRpPSogfCAtLWRhdGFkPSopCisgICAgZGF0YWRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWRhdGFyb290ZGlyIHwgLS1kYXRhcm9vdGRpciB8IC0tZGF0YXJvb3RkaSB8IC0tZGF0YXJvb3RkIHwgLS1kYXRhcm9vdCBcCisgIHwgLS1kYXRhcm9vIHwgLS1kYXRhcm8gfCAtLWRhdGFyKQorICAgIGFjX3ByZXY9ZGF0YXJvb3RkaXIgOzsKKyAgLWRhdGFyb290ZGlyPSogfCAtLWRhdGFyb290ZGlyPSogfCAtLWRhdGFyb290ZGk9KiB8IC0tZGF0YXJvb3RkPSogXAorICB8IC0tZGF0YXJvb3Q9KiB8IC0tZGF0YXJvbz0qIHwgLS1kYXRhcm89KiB8IC0tZGF0YXI9KikKKyAgICBkYXRhcm9vdGRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWRpc2FibGUtKiB8IC0tZGlzYWJsZS0qKQorICAgIGFjX2ZlYXR1cmU9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSpkaXNhYmxlLVwoLipcKSdgCisgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorICAgIGV4cHIgIngkYWNfZmVhdHVyZSIgOiAiLipbXi0uXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKyAgICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCBmZWF0dXJlIG5hbWU6ICRhY19mZWF0dXJlIiA+JjIKKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgIGFjX2ZlYXR1cmU9YGVjaG8gJGFjX2ZlYXR1cmUgfCBzZWQgJ3MvWy0uXS9fL2cnYAorICAgIGV2YWwgZW5hYmxlXyRhY19mZWF0dXJlPW5vIDs7CisKKyAgLWRvY2RpciB8IC0tZG9jZGlyIHwgLS1kb2NkaSB8IC0tZG9jIHwgLS1kbykKKyAgICBhY19wcmV2PWRvY2RpciA7OworICAtZG9jZGlyPSogfCAtLWRvY2Rpcj0qIHwgLS1kb2NkaT0qIHwgLS1kb2M9KiB8IC0tZG89KikKKyAgICBkb2NkaXI9JGFjX29wdGFyZyA7OworCisgIC1kdmlkaXIgfCAtLWR2aWRpciB8IC0tZHZpZGkgfCAtLWR2aWQgfCAtLWR2aSB8IC0tZHYpCisgICAgYWNfcHJldj1kdmlkaXIgOzsKKyAgLWR2aWRpcj0qIHwgLS1kdmlkaXI9KiB8IC0tZHZpZGk9KiB8IC0tZHZpZD0qIHwgLS1kdmk9KiB8IC0tZHY9KikKKyAgICBkdmlkaXI9JGFjX29wdGFyZyA7OworCisgIC1lbmFibGUtKiB8IC0tZW5hYmxlLSopCisgICAgYWNfZmVhdHVyZT1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKmVuYWJsZS1cKFtePV0qXCknYAorICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KKyAgICBleHByICJ4JGFjX2ZlYXR1cmUiIDogIi4qW14tLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisgICAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgZmVhdHVyZSBuYW1lOiAkYWNfZmVhdHVyZSIgPiYyCisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICBhY19mZWF0dXJlPWBlY2hvICRhY19mZWF0dXJlIHwgc2VkICdzL1stLl0vXy9nJ2AKKyAgICBldmFsIGVuYWJsZV8kYWNfZmVhdHVyZT1cJGFjX29wdGFyZyA7OworCisgIC1leGVjLXByZWZpeCB8IC0tZXhlY19wcmVmaXggfCAtLWV4ZWMtcHJlZml4IHwgLS1leGVjLXByZWZpIFwKKyAgfCAtLWV4ZWMtcHJlZiB8IC0tZXhlYy1wcmUgfCAtLWV4ZWMtcHIgfCAtLWV4ZWMtcCB8IC0tZXhlYy0gXAorICB8IC0tZXhlYyB8IC0tZXhlIHwgLS1leCkKKyAgICBhY19wcmV2PWV4ZWNfcHJlZml4IDs7CisgIC1leGVjLXByZWZpeD0qIHwgLS1leGVjX3ByZWZpeD0qIHwgLS1leGVjLXByZWZpeD0qIHwgLS1leGVjLXByZWZpPSogXAorICB8IC0tZXhlYy1wcmVmPSogfCAtLWV4ZWMtcHJlPSogfCAtLWV4ZWMtcHI9KiB8IC0tZXhlYy1wPSogfCAtLWV4ZWMtPSogXAorICB8IC0tZXhlYz0qIHwgLS1leGU9KiB8IC0tZXg9KikKKyAgICBleGVjX3ByZWZpeD0kYWNfb3B0YXJnIDs7CisKKyAgLWdhcyB8IC0tZ2FzIHwgLS1nYSB8IC0tZykKKyAgICAjIE9ic29sZXRlOyB1c2UgLS13aXRoLWdhcy4KKyAgICB3aXRoX2dhcz15ZXMgOzsKKworICAtaGVscCB8IC0taGVscCB8IC0taGVsIHwgLS1oZSB8IC1oKQorICAgIGFjX2luaXRfaGVscD1sb25nIDs7CisgIC1oZWxwPXIqIHwgLS1oZWxwPXIqIHwgLS1oZWw9ciogfCAtLWhlPXIqIHwgLWhyKikKKyAgICBhY19pbml0X2hlbHA9cmVjdXJzaXZlIDs7CisgIC1oZWxwPXMqIHwgLS1oZWxwPXMqIHwgLS1oZWw9cyogfCAtLWhlPXMqIHwgLWhzKikKKyAgICBhY19pbml0X2hlbHA9c2hvcnQgOzsKKworICAtaG9zdCB8IC0taG9zdCB8IC0taG9zIHwgLS1obykKKyAgICBhY19wcmV2PWhvc3RfYWxpYXMgOzsKKyAgLWhvc3Q9KiB8IC0taG9zdD0qIHwgLS1ob3M9KiB8IC0taG89KikKKyAgICBob3N0X2FsaWFzPSRhY19vcHRhcmcgOzsKKworICAtaHRtbGRpciB8IC0taHRtbGRpciB8IC0taHRtbGRpIHwgLS1odG1sZCB8IC0taHRtbCB8IC0taHRtIHwgLS1odCkKKyAgICBhY19wcmV2PWh0bWxkaXIgOzsKKyAgLWh0bWxkaXI9KiB8IC0taHRtbGRpcj0qIHwgLS1odG1sZGk9KiB8IC0taHRtbGQ9KiB8IC0taHRtbD0qIHwgLS1odG09KiBcCisgIHwgLS1odD0qKQorICAgIGh0bWxkaXI9JGFjX29wdGFyZyA7OworCisgIC1pbmNsdWRlZGlyIHwgLS1pbmNsdWRlZGlyIHwgLS1pbmNsdWRlZGkgfCAtLWluY2x1ZGVkIHwgLS1pbmNsdWRlIFwKKyAgfCAtLWluY2x1ZCB8IC0taW5jbHUgfCAtLWluY2wgfCAtLWluYykKKyAgICBhY19wcmV2PWluY2x1ZGVkaXIgOzsKKyAgLWluY2x1ZGVkaXI9KiB8IC0taW5jbHVkZWRpcj0qIHwgLS1pbmNsdWRlZGk9KiB8IC0taW5jbHVkZWQ9KiB8IC0taW5jbHVkZT0qIFwKKyAgfCAtLWluY2x1ZD0qIHwgLS1pbmNsdT0qIHwgLS1pbmNsPSogfCAtLWluYz0qKQorICAgIGluY2x1ZGVkaXI9JGFjX29wdGFyZyA7OworCisgIC1pbmZvZGlyIHwgLS1pbmZvZGlyIHwgLS1pbmZvZGkgfCAtLWluZm9kIHwgLS1pbmZvIHwgLS1pbmYpCisgICAgYWNfcHJldj1pbmZvZGlyIDs7CisgIC1pbmZvZGlyPSogfCAtLWluZm9kaXI9KiB8IC0taW5mb2RpPSogfCAtLWluZm9kPSogfCAtLWluZm89KiB8IC0taW5mPSopCisgICAgaW5mb2Rpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWxpYmRpciB8IC0tbGliZGlyIHwgLS1saWJkaSB8IC0tbGliZCkKKyAgICBhY19wcmV2PWxpYmRpciA7OworICAtbGliZGlyPSogfCAtLWxpYmRpcj0qIHwgLS1saWJkaT0qIHwgLS1saWJkPSopCisgICAgbGliZGlyPSRhY19vcHRhcmcgOzsKKworICAtbGliZXhlY2RpciB8IC0tbGliZXhlY2RpciB8IC0tbGliZXhlY2RpIHwgLS1saWJleGVjZCB8IC0tbGliZXhlYyBcCisgIHwgLS1saWJleGUgfCAtLWxpYmV4IHwgLS1saWJlKQorICAgIGFjX3ByZXY9bGliZXhlY2RpciA7OworICAtbGliZXhlY2Rpcj0qIHwgLS1saWJleGVjZGlyPSogfCAtLWxpYmV4ZWNkaT0qIHwgLS1saWJleGVjZD0qIHwgLS1saWJleGVjPSogXAorICB8IC0tbGliZXhlPSogfCAtLWxpYmV4PSogfCAtLWxpYmU9KikKKyAgICBsaWJleGVjZGlyPSRhY19vcHRhcmcgOzsKKworICAtbG9jYWxlZGlyIHwgLS1sb2NhbGVkaXIgfCAtLWxvY2FsZWRpIHwgLS1sb2NhbGVkIHwgLS1sb2NhbGUpCisgICAgYWNfcHJldj1sb2NhbGVkaXIgOzsKKyAgLWxvY2FsZWRpcj0qIHwgLS1sb2NhbGVkaXI9KiB8IC0tbG9jYWxlZGk9KiB8IC0tbG9jYWxlZD0qIHwgLS1sb2NhbGU9KikKKyAgICBsb2NhbGVkaXI9JGFjX29wdGFyZyA7OworCisgIC1sb2NhbHN0YXRlZGlyIHwgLS1sb2NhbHN0YXRlZGlyIHwgLS1sb2NhbHN0YXRlZGkgfCAtLWxvY2Fsc3RhdGVkIFwKKyAgfCAtLWxvY2Fsc3RhdGUgfCAtLWxvY2Fsc3RhdCB8IC0tbG9jYWxzdGEgfCAtLWxvY2Fsc3QgfCAtLWxvY2FscykKKyAgICBhY19wcmV2PWxvY2Fsc3RhdGVkaXIgOzsKKyAgLWxvY2Fsc3RhdGVkaXI9KiB8IC0tbG9jYWxzdGF0ZWRpcj0qIHwgLS1sb2NhbHN0YXRlZGk9KiB8IC0tbG9jYWxzdGF0ZWQ9KiBcCisgIHwgLS1sb2NhbHN0YXRlPSogfCAtLWxvY2Fsc3RhdD0qIHwgLS1sb2NhbHN0YT0qIHwgLS1sb2NhbHN0PSogfCAtLWxvY2Fscz0qKQorICAgIGxvY2Fsc3RhdGVkaXI9JGFjX29wdGFyZyA7OworCisgIC1tYW5kaXIgfCAtLW1hbmRpciB8IC0tbWFuZGkgfCAtLW1hbmQgfCAtLW1hbiB8IC0tbWEgfCAtLW0pCisgICAgYWNfcHJldj1tYW5kaXIgOzsKKyAgLW1hbmRpcj0qIHwgLS1tYW5kaXI9KiB8IC0tbWFuZGk9KiB8IC0tbWFuZD0qIHwgLS1tYW49KiB8IC0tbWE9KiB8IC0tbT0qKQorICAgIG1hbmRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLW5mcCB8IC0tbmZwIHwgLS1uZikKKyAgICAjIE9ic29sZXRlOyB1c2UgLS13aXRob3V0LWZwLgorICAgIHdpdGhfZnA9bm8gOzsKKworICAtbm8tY3JlYXRlIHwgLS1uby1jcmVhdGUgfCAtLW5vLWNyZWF0IHwgLS1uby1jcmVhIHwgLS1uby1jcmUgXAorICB8IC0tbm8tY3IgfCAtLW5vLWMgfCAtbikKKyAgICBub19jcmVhdGU9eWVzIDs7CisKKyAgLW5vLXJlY3Vyc2lvbiB8IC0tbm8tcmVjdXJzaW9uIHwgLS1uby1yZWN1cnNpbyB8IC0tbm8tcmVjdXJzaSBcCisgIHwgLS1uby1yZWN1cnMgfCAtLW5vLXJlY3VyIHwgLS1uby1yZWN1IHwgLS1uby1yZWMgfCAtLW5vLXJlIHwgLS1uby1yKQorICAgIG5vX3JlY3Vyc2lvbj15ZXMgOzsKKworICAtb2xkaW5jbHVkZWRpciB8IC0tb2xkaW5jbHVkZWRpciB8IC0tb2xkaW5jbHVkZWRpIHwgLS1vbGRpbmNsdWRlZCBcCisgIHwgLS1vbGRpbmNsdWRlIHwgLS1vbGRpbmNsdWQgfCAtLW9sZGluY2x1IHwgLS1vbGRpbmNsIHwgLS1vbGRpbmMgXAorICB8IC0tb2xkaW4gfCAtLW9sZGkgfCAtLW9sZCB8IC0tb2wgfCAtLW8pCisgICAgYWNfcHJldj1vbGRpbmNsdWRlZGlyIDs7CisgIC1vbGRpbmNsdWRlZGlyPSogfCAtLW9sZGluY2x1ZGVkaXI9KiB8IC0tb2xkaW5jbHVkZWRpPSogfCAtLW9sZGluY2x1ZGVkPSogXAorICB8IC0tb2xkaW5jbHVkZT0qIHwgLS1vbGRpbmNsdWQ9KiB8IC0tb2xkaW5jbHU9KiB8IC0tb2xkaW5jbD0qIHwgLS1vbGRpbmM9KiBcCisgIHwgLS1vbGRpbj0qIHwgLS1vbGRpPSogfCAtLW9sZD0qIHwgLS1vbD0qIHwgLS1vPSopCisgICAgb2xkaW5jbHVkZWRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLXByZWZpeCB8IC0tcHJlZml4IHwgLS1wcmVmaSB8IC0tcHJlZiB8IC0tcHJlIHwgLS1wciB8IC0tcCkKKyAgICBhY19wcmV2PXByZWZpeCA7OworICAtcHJlZml4PSogfCAtLXByZWZpeD0qIHwgLS1wcmVmaT0qIHwgLS1wcmVmPSogfCAtLXByZT0qIHwgLS1wcj0qIHwgLS1wPSopCisgICAgcHJlZml4PSRhY19vcHRhcmcgOzsKKworICAtcHJvZ3JhbS1wcmVmaXggfCAtLXByb2dyYW0tcHJlZml4IHwgLS1wcm9ncmFtLXByZWZpIHwgLS1wcm9ncmFtLXByZWYgXAorICB8IC0tcHJvZ3JhbS1wcmUgfCAtLXByb2dyYW0tcHIgfCAtLXByb2dyYW0tcCkKKyAgICBhY19wcmV2PXByb2dyYW1fcHJlZml4IDs7CisgIC1wcm9ncmFtLXByZWZpeD0qIHwgLS1wcm9ncmFtLXByZWZpeD0qIHwgLS1wcm9ncmFtLXByZWZpPSogXAorICB8IC0tcHJvZ3JhbS1wcmVmPSogfCAtLXByb2dyYW0tcHJlPSogfCAtLXByb2dyYW0tcHI9KiB8IC0tcHJvZ3JhbS1wPSopCisgICAgcHJvZ3JhbV9wcmVmaXg9JGFjX29wdGFyZyA7OworCisgIC1wcm9ncmFtLXN1ZmZpeCB8IC0tcHJvZ3JhbS1zdWZmaXggfCAtLXByb2dyYW0tc3VmZmkgfCAtLXByb2dyYW0tc3VmZiBcCisgIHwgLS1wcm9ncmFtLXN1ZiB8IC0tcHJvZ3JhbS1zdSB8IC0tcHJvZ3JhbS1zKQorICAgIGFjX3ByZXY9cHJvZ3JhbV9zdWZmaXggOzsKKyAgLXByb2dyYW0tc3VmZml4PSogfCAtLXByb2dyYW0tc3VmZml4PSogfCAtLXByb2dyYW0tc3VmZmk9KiBcCisgIHwgLS1wcm9ncmFtLXN1ZmY9KiB8IC0tcHJvZ3JhbS1zdWY9KiB8IC0tcHJvZ3JhbS1zdT0qIHwgLS1wcm9ncmFtLXM9KikKKyAgICBwcm9ncmFtX3N1ZmZpeD0kYWNfb3B0YXJnIDs7CisKKyAgLXByb2dyYW0tdHJhbnNmb3JtLW5hbWUgfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbWUgXAorICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYSBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS0gXAorICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0gfCAtLXByb2dyYW0tdHJhbnNmb3IgXAorICB8IC0tcHJvZ3JhbS10cmFuc2ZvIHwgLS1wcm9ncmFtLXRyYW5zZiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zIHwgLS1wcm9ncmFtLXRyYW4gXAorICB8IC0tcHJvZ3ItdHJhIHwgLS1wcm9ncmFtLXRyIHwgLS1wcm9ncmFtLXQpCisgICAgYWNfcHJldj1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lIDs7CisgIC1wcm9ncmFtLXRyYW5zZm9ybS1uYW1lPSogfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbWU9KiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYW09KiB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmE9KiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uPSogfCAtLXByb2dyYW0tdHJhbnNmb3JtLT0qIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmb3JtPSogfCAtLXByb2dyYW0tdHJhbnNmb3I9KiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm89KiB8IC0tcHJvZ3JhbS10cmFuc2Y9KiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zPSogfCAtLXByb2dyYW0tdHJhbj0qIFwKKyAgfCAtLXByb2dyLXRyYT0qIHwgLS1wcm9ncmFtLXRyPSogfCAtLXByb2dyYW0tdD0qKQorICAgIHByb2dyYW1fdHJhbnNmb3JtX25hbWU9JGFjX29wdGFyZyA7OworCisgIC1wZGZkaXIgfCAtLXBkZmRpciB8IC0tcGRmZGkgfCAtLXBkZmQgfCAtLXBkZiB8IC0tcGQpCisgICAgYWNfcHJldj1wZGZkaXIgOzsKKyAgLXBkZmRpcj0qIHwgLS1wZGZkaXI9KiB8IC0tcGRmZGk9KiB8IC0tcGRmZD0qIHwgLS1wZGY9KiB8IC0tcGQ9KikKKyAgICBwZGZkaXI9JGFjX29wdGFyZyA7OworCisgIC1wc2RpciB8IC0tcHNkaXIgfCAtLXBzZGkgfCAtLXBzZCB8IC0tcHMpCisgICAgYWNfcHJldj1wc2RpciA7OworICAtcHNkaXI9KiB8IC0tcHNkaXI9KiB8IC0tcHNkaT0qIHwgLS1wc2Q9KiB8IC0tcHM9KikKKyAgICBwc2Rpcj0kYWNfb3B0YXJnIDs7CisKKyAgLXEgfCAtcXVpZXQgfCAtLXF1aWV0IHwgLS1xdWllIHwgLS1xdWkgfCAtLXF1IHwgLS1xIFwKKyAgfCAtc2lsZW50IHwgLS1zaWxlbnQgfCAtLXNpbGVuIHwgLS1zaWxlIHwgLS1zaWwpCisgICAgc2lsZW50PXllcyA7OworCisgIC1zYmluZGlyIHwgLS1zYmluZGlyIHwgLS1zYmluZGkgfCAtLXNiaW5kIHwgLS1zYmluIHwgLS1zYmkgfCAtLXNiKQorICAgIGFjX3ByZXY9c2JpbmRpciA7OworICAtc2JpbmRpcj0qIHwgLS1zYmluZGlyPSogfCAtLXNiaW5kaT0qIHwgLS1zYmluZD0qIHwgLS1zYmluPSogXAorICB8IC0tc2JpPSogfCAtLXNiPSopCisgICAgc2JpbmRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLXNoYXJlZHN0YXRlZGlyIHwgLS1zaGFyZWRzdGF0ZWRpciB8IC0tc2hhcmVkc3RhdGVkaSBcCisgIHwgLS1zaGFyZWRzdGF0ZWQgfCAtLXNoYXJlZHN0YXRlIHwgLS1zaGFyZWRzdGF0IHwgLS1zaGFyZWRzdGEgXAorICB8IC0tc2hhcmVkc3QgfCAtLXNoYXJlZHMgfCAtLXNoYXJlZCB8IC0tc2hhcmUgfCAtLXNoYXIgXAorICB8IC0tc2hhIHwgLS1zaCkKKyAgICBhY19wcmV2PXNoYXJlZHN0YXRlZGlyIDs7CisgIC1zaGFyZWRzdGF0ZWRpcj0qIHwgLS1zaGFyZWRzdGF0ZWRpcj0qIHwgLS1zaGFyZWRzdGF0ZWRpPSogXAorICB8IC0tc2hhcmVkc3RhdGVkPSogfCAtLXNoYXJlZHN0YXRlPSogfCAtLXNoYXJlZHN0YXQ9KiB8IC0tc2hhcmVkc3RhPSogXAorICB8IC0tc2hhcmVkc3Q9KiB8IC0tc2hhcmVkcz0qIHwgLS1zaGFyZWQ9KiB8IC0tc2hhcmU9KiB8IC0tc2hhcj0qIFwKKyAgfCAtLXNoYT0qIHwgLS1zaD0qKQorICAgIHNoYXJlZHN0YXRlZGlyPSRhY19vcHRhcmcgOzsKKworICAtc2l0ZSB8IC0tc2l0ZSB8IC0tc2l0KQorICAgIGFjX3ByZXY9c2l0ZSA7OworICAtc2l0ZT0qIHwgLS1zaXRlPSogfCAtLXNpdD0qKQorICAgIHNpdGU9JGFjX29wdGFyZyA7OworCisgIC1zcmNkaXIgfCAtLXNyY2RpciB8IC0tc3JjZGkgfCAtLXNyY2QgfCAtLXNyYyB8IC0tc3IpCisgICAgYWNfcHJldj1zcmNkaXIgOzsKKyAgLXNyY2Rpcj0qIHwgLS1zcmNkaXI9KiB8IC0tc3JjZGk9KiB8IC0tc3JjZD0qIHwgLS1zcmM9KiB8IC0tc3I9KikKKyAgICBzcmNkaXI9JGFjX29wdGFyZyA7OworCisgIC1zeXNjb25mZGlyIHwgLS1zeXNjb25mZGlyIHwgLS1zeXNjb25mZGkgfCAtLXN5c2NvbmZkIHwgLS1zeXNjb25mIFwKKyAgfCAtLXN5c2NvbiB8IC0tc3lzY28gfCAtLXN5c2MgfCAtLXN5cyB8IC0tc3kpCisgICAgYWNfcHJldj1zeXNjb25mZGlyIDs7CisgIC1zeXNjb25mZGlyPSogfCAtLXN5c2NvbmZkaXI9KiB8IC0tc3lzY29uZmRpPSogfCAtLXN5c2NvbmZkPSogfCAtLXN5c2NvbmY9KiBcCisgIHwgLS1zeXNjb249KiB8IC0tc3lzY289KiB8IC0tc3lzYz0qIHwgLS1zeXM9KiB8IC0tc3k9KikKKyAgICBzeXNjb25mZGlyPSRhY19vcHRhcmcgOzsKKworICAtdGFyZ2V0IHwgLS10YXJnZXQgfCAtLXRhcmdlIHwgLS10YXJnIHwgLS10YXIgfCAtLXRhIHwgLS10KQorICAgIGFjX3ByZXY9dGFyZ2V0X2FsaWFzIDs7CisgIC10YXJnZXQ9KiB8IC0tdGFyZ2V0PSogfCAtLXRhcmdlPSogfCAtLXRhcmc9KiB8IC0tdGFyPSogfCAtLXRhPSogfCAtLXQ9KikKKyAgICB0YXJnZXRfYWxpYXM9JGFjX29wdGFyZyA7OworCisgIC12IHwgLXZlcmJvc2UgfCAtLXZlcmJvc2UgfCAtLXZlcmJvcyB8IC0tdmVyYm8gfCAtLXZlcmIpCisgICAgdmVyYm9zZT15ZXMgOzsKKworICAtdmVyc2lvbiB8IC0tdmVyc2lvbiB8IC0tdmVyc2lvIHwgLS12ZXJzaSB8IC0tdmVycyB8IC1WKQorICAgIGFjX2luaXRfdmVyc2lvbj06IDs7CisKKyAgLXdpdGgtKiB8IC0td2l0aC0qKQorICAgIGFjX3BhY2thZ2U9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSp3aXRoLVwoW149XSpcKSdgCisgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorICAgIGV4cHIgIngkYWNfcGFja2FnZSIgOiAiLipbXi0uXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKyAgICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCBwYWNrYWdlIG5hbWU6ICRhY19wYWNrYWdlIiA+JjIKKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgIGFjX3BhY2thZ2U9YGVjaG8gJGFjX3BhY2thZ2UgfCBzZWQgJ3MvWy0uXS9fL2cnYAorICAgIGV2YWwgd2l0aF8kYWNfcGFja2FnZT1cJGFjX29wdGFyZyA7OworCisgIC13aXRob3V0LSogfCAtLXdpdGhvdXQtKikKKyAgICBhY19wYWNrYWdlPWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qd2l0aG91dC1cKC4qXCknYAorICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KKyAgICBleHByICJ4JGFjX3BhY2thZ2UiIDogIi4qW14tLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisgICAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgcGFja2FnZSBuYW1lOiAkYWNfcGFja2FnZSIgPiYyCisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICBhY19wYWNrYWdlPWBlY2hvICRhY19wYWNrYWdlIHwgc2VkICdzL1stLl0vXy9nJ2AKKyAgICBldmFsIHdpdGhfJGFjX3BhY2thZ2U9bm8gOzsKKworICAtLXgpCisgICAgIyBPYnNvbGV0ZTsgdXNlIC0td2l0aC14LgorICAgIHdpdGhfeD15ZXMgOzsKKworICAteC1pbmNsdWRlcyB8IC0teC1pbmNsdWRlcyB8IC0teC1pbmNsdWRlIHwgLS14LWluY2x1ZCB8IC0teC1pbmNsdSBcCisgIHwgLS14LWluY2wgfCAtLXgtaW5jIHwgLS14LWluIHwgLS14LWkpCisgICAgYWNfcHJldj14X2luY2x1ZGVzIDs7CisgIC14LWluY2x1ZGVzPSogfCAtLXgtaW5jbHVkZXM9KiB8IC0teC1pbmNsdWRlPSogfCAtLXgtaW5jbHVkPSogfCAtLXgtaW5jbHU9KiBcCisgIHwgLS14LWluY2w9KiB8IC0teC1pbmM9KiB8IC0teC1pbj0qIHwgLS14LWk9KikKKyAgICB4X2luY2x1ZGVzPSRhY19vcHRhcmcgOzsKKworICAteC1saWJyYXJpZXMgfCAtLXgtbGlicmFyaWVzIHwgLS14LWxpYnJhcmllIHwgLS14LWxpYnJhcmkgXAorICB8IC0teC1saWJyYXIgfCAtLXgtbGlicmEgfCAtLXgtbGliciB8IC0teC1saWIgfCAtLXgtbGkgfCAtLXgtbCkKKyAgICBhY19wcmV2PXhfbGlicmFyaWVzIDs7CisgIC14LWxpYnJhcmllcz0qIHwgLS14LWxpYnJhcmllcz0qIHwgLS14LWxpYnJhcmllPSogfCAtLXgtbGlicmFyaT0qIFwKKyAgfCAtLXgtbGlicmFyPSogfCAtLXgtbGlicmE9KiB8IC0teC1saWJyPSogfCAtLXgtbGliPSogfCAtLXgtbGk9KiB8IC0teC1sPSopCisgICAgeF9saWJyYXJpZXM9JGFjX29wdGFyZyA7OworCisgIC0qKSB7IGVjaG8gIiRhc19tZTogZXJyb3I6IHVucmVjb2duaXplZCBvcHRpb246ICRhY19vcHRpb24KK1RyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiA+JjIKKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgIDs7CisKKyAgKj0qKQorICAgIGFjX2VudnZhcj1gZXhwciAieCRhY19vcHRpb24iIDogJ3hcKFtePV0qXCk9J2AKKyAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCisgICAgZXhwciAieCRhY19lbnZ2YXIiIDogIi4qW15fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorICAgICAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBpbnZhbGlkIHZhcmlhYmxlIG5hbWU6ICRhY19lbnZ2YXIiID4mMgorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgICAgZXZhbCAkYWNfZW52dmFyPVwkYWNfb3B0YXJnCisgICAgZXhwb3J0ICRhY19lbnZ2YXIgOzsKKworICAqKQorICAgICMgRklYTUU6IHNob3VsZCBiZSByZW1vdmVkIGluIGF1dG9jb25mIDMuMC4KKyAgICBlY2hvICIkYXNfbWU6IFdBUk5JTkc6IHlvdSBzaG91bGQgdXNlIC0tYnVpbGQsIC0taG9zdCwgLS10YXJnZXQiID4mMgorICAgIGV4cHIgIngkYWNfb3B0aW9uIiA6ICIuKlteLS5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorICAgICAgZWNobyAiJGFzX21lOiBXQVJOSU5HOiBpbnZhbGlkIGhvc3QgdHlwZTogJGFjX29wdGlvbiIgPiYyCisgICAgOiAke2J1aWxkX2FsaWFzPSRhY19vcHRpb259ICR7aG9zdF9hbGlhcz0kYWNfb3B0aW9ufSAke3RhcmdldF9hbGlhcz0kYWNfb3B0aW9ufQorICAgIDs7CisKKyAgZXNhYworZG9uZQorCitpZiB0ZXN0IC1uICIkYWNfcHJldiI7IHRoZW4KKyAgYWNfb3B0aW9uPS0tYGVjaG8gJGFjX3ByZXYgfCBzZWQgJ3MvXy8tL2cnYAorICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IG1pc3NpbmcgYXJndW1lbnQgdG8gJGFjX29wdGlvbiIgPiYyCisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2ZpCisKKyMgQmUgc3VyZSB0byBoYXZlIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lcy4KK2ZvciBhY192YXIgaW4JZXhlY19wcmVmaXggcHJlZml4IGJpbmRpciBzYmluZGlyIGxpYmV4ZWNkaXIgZGF0YXJvb3RkaXIgXAorCQlkYXRhZGlyIHN5c2NvbmZkaXIgc2hhcmVkc3RhdGVkaXIgbG9jYWxzdGF0ZWRpciBpbmNsdWRlZGlyIFwKKwkJb2xkaW5jbHVkZWRpciBkb2NkaXIgaW5mb2RpciBodG1sZGlyIGR2aWRpciBwZGZkaXIgcHNkaXIgXAorCQlsaWJkaXIgbG9jYWxlZGlyIG1hbmRpcgorZG8KKyAgZXZhbCBhY192YWw9XCQkYWNfdmFyCisgIGNhc2UgJGFjX3ZhbCBpbgorICAgIFtcXC8kXSogfCA/OltcXC9dKiApICBjb250aW51ZTs7CisgICAgTk9ORSB8ICcnICkgY2FzZSAkYWNfdmFyIGluICpwcmVmaXggKSBjb250aW51ZTs7IGVzYWM7OworICBlc2FjCisgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogZXhwZWN0ZWQgYW4gYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgZm9yIC0tJGFjX3ZhcjogJGFjX3ZhbCIgPiYyCisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2RvbmUKKworIyBUaGVyZSBtaWdodCBiZSBwZW9wbGUgd2hvIGRlcGVuZCBvbiB0aGUgb2xkIGJyb2tlbiBiZWhhdmlvcjogYCRob3N0JworIyB1c2VkIHRvIGhvbGQgdGhlIGFyZ3VtZW50IG9mIC0taG9zdCBldGMuCisjIEZJWE1FOiBUbyByZW1vdmUgc29tZSBkYXkuCitidWlsZD0kYnVpbGRfYWxpYXMKK2hvc3Q9JGhvc3RfYWxpYXMKK3RhcmdldD0kdGFyZ2V0X2FsaWFzCisKKyMgRklYTUU6IFRvIHJlbW92ZSBzb21lIGRheS4KK2lmIHRlc3QgIngkaG9zdF9hbGlhcyIgIT0geDsgdGhlbgorICBpZiB0ZXN0ICJ4JGJ1aWxkX2FsaWFzIiA9IHg7IHRoZW4KKyAgICBjcm9zc19jb21waWxpbmc9bWF5YmUKKyAgICBlY2hvICIkYXNfbWU6IFdBUk5JTkc6IElmIHlvdSB3YW50ZWQgdG8gc2V0IHRoZSAtLWJ1aWxkIHR5cGUsIGRvbid0IHVzZSAtLWhvc3QuCisgICAgSWYgYSBjcm9zcyBjb21waWxlciBpcyBkZXRlY3RlZCB0aGVuIGNyb3NzIGNvbXBpbGUgbW9kZSB3aWxsIGJlIHVzZWQuIiA+JjIKKyAgZWxpZiB0ZXN0ICJ4JGJ1aWxkX2FsaWFzIiAhPSAieCRob3N0X2FsaWFzIjsgdGhlbgorICAgIGNyb3NzX2NvbXBpbGluZz15ZXMKKyAgZmkKK2ZpCisKK2FjX3Rvb2xfcHJlZml4PQordGVzdCAtbiAiJGhvc3RfYWxpYXMiICYmIGFjX3Rvb2xfcHJlZml4PSRob3N0X2FsaWFzLQorCit0ZXN0ICIkc2lsZW50IiA9IHllcyAmJiBleGVjIDY+L2Rldi9udWxsCisKKworYWNfcHdkPWBwd2RgICYmIHRlc3QgLW4gIiRhY19wd2QiICYmCithY19sc19kaT1gbHMgLWRpIC5gICYmCithY19wd2RfbHNfZGk9YGNkICIkYWNfcHdkIiAmJiBscyAtZGkgLmAgfHwKKyAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBXb3JraW5nIGRpcmVjdG9yeSBjYW5ub3QgYmUgZGV0ZXJtaW5lZCIgPiYyCisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK3Rlc3QgIlgkYWNfbHNfZGkiID0gIlgkYWNfcHdkX2xzX2RpIiB8fAorICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IHB3ZCBkb2VzIG5vdCByZXBvcnQgbmFtZSBvZiB3b3JraW5nIGRpcmVjdG9yeSIgPiYyCisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKworCisjIEZpbmQgdGhlIHNvdXJjZSBmaWxlcywgaWYgbG9jYXRpb24gd2FzIG5vdCBzcGVjaWZpZWQuCitpZiB0ZXN0IC16ICIkc3JjZGlyIjsgdGhlbgorICBhY19zcmNkaXJfZGVmYXVsdGVkPXllcworICAjIFRyeSB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhpcyBzY3JpcHQsIHRoZW4gdGhlIHBhcmVudCBkaXJlY3RvcnkuCisgIGFjX2NvbmZkaXI9YCRhc19kaXJuYW1lIC0tICIkMCIgfHwKKyRhc19leHByIFgiJDAiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJDAiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFgiJDAiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJDAiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorZWNobyBYIiQwIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2AKKyAgc3JjZGlyPSRhY19jb25mZGlyCisgIGlmIHRlc3QgISAtciAiJHNyY2Rpci8kYWNfdW5pcXVlX2ZpbGUiOyB0aGVuCisgICAgc3JjZGlyPS4uCisgIGZpCitlbHNlCisgIGFjX3NyY2Rpcl9kZWZhdWx0ZWQ9bm8KK2ZpCitpZiB0ZXN0ICEgLXIgIiRzcmNkaXIvJGFjX3VuaXF1ZV9maWxlIjsgdGhlbgorICB0ZXN0ICIkYWNfc3JjZGlyX2RlZmF1bHRlZCIgPSB5ZXMgJiYgc3JjZGlyPSIkYWNfY29uZmRpciBvciAuLiIKKyAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBzb3VyY2VzICgkYWNfdW5pcXVlX2ZpbGUpIGluICRzcmNkaXIiID4mMgorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitmaQorYWNfbXNnPSJzb3VyY2VzIGFyZSBpbiAkc3JjZGlyLCBidXQgXGBjZCAkc3JjZGlyJyBkb2VzIG5vdCB3b3JrIgorYWNfYWJzX2NvbmZkaXI9YCgKKwljZCAiJHNyY2RpciIgJiYgdGVzdCAtciAiLi8kYWNfdW5pcXVlX2ZpbGUiIHx8IHsgZWNobyAiJGFzX21lOiBlcnJvcjogJGFjX21zZyIgPiYyCisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKwlwd2QpYAorIyBXaGVuIGJ1aWxkaW5nIGluIHBsYWNlLCBzZXQgc3JjZGlyPS4KK2lmIHRlc3QgIiRhY19hYnNfY29uZmRpciIgPSAiJGFjX3B3ZCI7IHRoZW4KKyAgc3JjZGlyPS4KK2ZpCisjIFJlbW92ZSB1bm5lY2Vzc2FyeSB0cmFpbGluZyBzbGFzaGVzIGZyb20gc3JjZGlyLgorIyBEb3VibGUgc2xhc2hlcyBpbiBmaWxlIG5hbWVzIGluIG9iamVjdCBmaWxlIGRlYnVnZ2luZyBpbmZvCisjIG1lc3MgdXAgTS14IGdkYiBpbiBFbWFjcy4KK2Nhc2UgJHNyY2RpciBpbgorKi8pIHNyY2Rpcj1gZXhwciAiWCRzcmNkaXIiIDogJ1hcKC4qW14vXVwpJyBcfCAiWCRzcmNkaXIiIDogJ1hcKC4qXCknYDs7Citlc2FjCitmb3IgYWNfdmFyIGluICRhY19wcmVjaW91c192YXJzOyBkbworICBldmFsIGFjX2Vudl8ke2FjX3Zhcn1fc2V0PVwkeyR7YWNfdmFyfStzZXR9CisgIGV2YWwgYWNfZW52XyR7YWNfdmFyfV92YWx1ZT1cJCR7YWNfdmFyfQorICBldmFsIGFjX2N2X2Vudl8ke2FjX3Zhcn1fc2V0PVwkeyR7YWNfdmFyfStzZXR9CisgIGV2YWwgYWNfY3ZfZW52XyR7YWNfdmFyfV92YWx1ZT1cJCR7YWNfdmFyfQorZG9uZQorCisjCisjIFJlcG9ydCB0aGUgLS1oZWxwIG1lc3NhZ2UuCisjCitpZiB0ZXN0ICIkYWNfaW5pdF9oZWxwIiA9ICJsb25nIjsgdGhlbgorICAjIE9taXQgc29tZSBpbnRlcm5hbCBvciBvYnNvbGV0ZSBvcHRpb25zIHRvIG1ha2UgdGhlIGxpc3QgbGVzcyBpbXBvc2luZy4KKyAgIyBUaGlzIG1lc3NhZ2UgaXMgdG9vIGxvbmcgdG8gYmUgYSBzdHJpbmcgaW4gdGhlIEEvVVggMy4xIHNoLgorICBjYXQgPDxfQUNFT0YKK1xgY29uZmlndXJlJyBjb25maWd1cmVzIEdOVSBwYXJ0ZWQgMS44LjcgdG8gYWRhcHQgdG8gbWFueSBraW5kcyBvZiBzeXN0ZW1zLgorCitVc2FnZTogJDAgW09QVElPTl0uLi4gW1ZBUj1WQUxVRV0uLi4KKworVG8gYXNzaWduIGVudmlyb25tZW50IHZhcmlhYmxlcyAoZS5nLiwgQ0MsIENGTEFHUy4uLiksIHNwZWNpZnkgdGhlbSBhcworVkFSPVZBTFVFLiAgU2VlIGJlbG93IGZvciBkZXNjcmlwdGlvbnMgb2Ygc29tZSBvZiB0aGUgdXNlZnVsIHZhcmlhYmxlcy4KKworRGVmYXVsdHMgZm9yIHRoZSBvcHRpb25zIGFyZSBzcGVjaWZpZWQgaW4gYnJhY2tldHMuCisKK0NvbmZpZ3VyYXRpb246CisgIC1oLCAtLWhlbHAgICAgICAgICAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0CisgICAgICAtLWhlbHA9c2hvcnQgICAgICAgIGRpc3BsYXkgb3B0aW9ucyBzcGVjaWZpYyB0byB0aGlzIHBhY2thZ2UKKyAgICAgIC0taGVscD1yZWN1cnNpdmUgICAgZGlzcGxheSB0aGUgc2hvcnQgaGVscCBvZiBhbGwgdGhlIGluY2x1ZGVkIHBhY2thZ2VzCisgIC1WLCAtLXZlcnNpb24gICAgICAgICAgIGRpc3BsYXkgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdAorICAtcSwgLS1xdWlldCwgLS1zaWxlbnQgICBkbyBub3QgcHJpbnQgXGBjaGVja2luZy4uLicgbWVzc2FnZXMKKyAgICAgIC0tY2FjaGUtZmlsZT1GSUxFICAgY2FjaGUgdGVzdCByZXN1bHRzIGluIEZJTEUgW2Rpc2FibGVkXQorICAtQywgLS1jb25maWctY2FjaGUgICAgICBhbGlhcyBmb3IgXGAtLWNhY2hlLWZpbGU9Y29uZmlnLmNhY2hlJworICAtbiwgLS1uby1jcmVhdGUgICAgICAgICBkbyBub3QgY3JlYXRlIG91dHB1dCBmaWxlcworICAgICAgLS1zcmNkaXI9RElSICAgICAgICBmaW5kIHRoZSBzb3VyY2VzIGluIERJUiBbY29uZmlndXJlIGRpciBvciBcYC4uJ10KKworSW5zdGFsbGF0aW9uIGRpcmVjdG9yaWVzOgorICAtLXByZWZpeD1QUkVGSVggICAgICAgICBpbnN0YWxsIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBmaWxlcyBpbiBQUkVGSVgKKwkJCSAgWyRhY19kZWZhdWx0X3ByZWZpeF0KKyAgLS1leGVjLXByZWZpeD1FUFJFRklYICAgaW5zdGFsbCBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IGZpbGVzIGluIEVQUkVGSVgKKwkJCSAgW1BSRUZJWF0KKworQnkgZGVmYXVsdCwgXGBtYWtlIGluc3RhbGwnIHdpbGwgaW5zdGFsbCBhbGwgdGhlIGZpbGVzIGluCitcYCRhY19kZWZhdWx0X3ByZWZpeC9iaW4nLCBcYCRhY19kZWZhdWx0X3ByZWZpeC9saWInIGV0Yy4gIFlvdSBjYW4gc3BlY2lmeQorYW4gaW5zdGFsbGF0aW9uIHByZWZpeCBvdGhlciB0aGFuIFxgJGFjX2RlZmF1bHRfcHJlZml4JyB1c2luZyBcYC0tcHJlZml4JywKK2ZvciBpbnN0YW5jZSBcYC0tcHJlZml4PVwkSE9NRScuCisKK0ZvciBiZXR0ZXIgY29udHJvbCwgdXNlIHRoZSBvcHRpb25zIGJlbG93LgorCitGaW5lIHR1bmluZyBvZiB0aGUgaW5zdGFsbGF0aW9uIGRpcmVjdG9yaWVzOgorICAtLWJpbmRpcj1ESVIgICAgICAgICAgIHVzZXIgZXhlY3V0YWJsZXMgW0VQUkVGSVgvYmluXQorICAtLXNiaW5kaXI9RElSICAgICAgICAgIHN5c3RlbSBhZG1pbiBleGVjdXRhYmxlcyBbRVBSRUZJWC9zYmluXQorICAtLWxpYmV4ZWNkaXI9RElSICAgICAgIHByb2dyYW0gZXhlY3V0YWJsZXMgW0VQUkVGSVgvbGliZXhlY10KKyAgLS1zeXNjb25mZGlyPURJUiAgICAgICByZWFkLW9ubHkgc2luZ2xlLW1hY2hpbmUgZGF0YSBbUFJFRklYL2V0Y10KKyAgLS1zaGFyZWRzdGF0ZWRpcj1ESVIgICBtb2RpZmlhYmxlIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBkYXRhIFtQUkVGSVgvY29tXQorICAtLWxvY2Fsc3RhdGVkaXI9RElSICAgIG1vZGlmaWFibGUgc2luZ2xlLW1hY2hpbmUgZGF0YSBbUFJFRklYL3Zhcl0KKyAgLS1saWJkaXI9RElSICAgICAgICAgICBvYmplY3QgY29kZSBsaWJyYXJpZXMgW0VQUkVGSVgvbGliXQorICAtLWluY2x1ZGVkaXI9RElSICAgICAgIEMgaGVhZGVyIGZpbGVzIFtQUkVGSVgvaW5jbHVkZV0KKyAgLS1vbGRpbmNsdWRlZGlyPURJUiAgICBDIGhlYWRlciBmaWxlcyBmb3Igbm9uLWdjYyBbL3Vzci9pbmNsdWRlXQorICAtLWRhdGFyb290ZGlyPURJUiAgICAgIHJlYWQtb25seSBhcmNoLi1pbmRlcGVuZGVudCBkYXRhIHJvb3QgW1BSRUZJWC9zaGFyZV0KKyAgLS1kYXRhZGlyPURJUiAgICAgICAgICByZWFkLW9ubHkgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGRhdGEgW0RBVEFST09URElSXQorICAtLWluZm9kaXI9RElSICAgICAgICAgIGluZm8gZG9jdW1lbnRhdGlvbiBbREFUQVJPT1RESVIvaW5mb10KKyAgLS1sb2NhbGVkaXI9RElSICAgICAgICBsb2NhbGUtZGVwZW5kZW50IGRhdGEgW0RBVEFST09URElSL2xvY2FsZV0KKyAgLS1tYW5kaXI9RElSICAgICAgICAgICBtYW4gZG9jdW1lbnRhdGlvbiBbREFUQVJPT1RESVIvbWFuXQorICAtLWRvY2Rpcj1ESVIgICAgICAgICAgIGRvY3VtZW50YXRpb24gcm9vdCBbREFUQVJPT1RESVIvZG9jL3BhcnRlZF0KKyAgLS1odG1sZGlyPURJUiAgICAgICAgICBodG1sIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KKyAgLS1kdmlkaXI9RElSICAgICAgICAgICBkdmkgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQorICAtLXBkZmRpcj1ESVIgICAgICAgICAgIHBkZiBkb2N1bWVudGF0aW9uIFtET0NESVJdCisgIC0tcHNkaXI9RElSICAgICAgICAgICAgcHMgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQorX0FDRU9GCisKKyAgY2F0IDw8XF9BQ0VPRgorCitQcm9ncmFtIG5hbWVzOgorICAtLXByb2dyYW0tcHJlZml4PVBSRUZJWCAgICAgICAgICAgIHByZXBlbmQgUFJFRklYIHRvIGluc3RhbGxlZCBwcm9ncmFtIG5hbWVzCisgIC0tcHJvZ3JhbS1zdWZmaXg9U1VGRklYICAgICAgICAgICAgYXBwZW5kIFNVRkZJWCB0byBpbnN0YWxsZWQgcHJvZ3JhbSBuYW1lcworICAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbWU9UFJPR1JBTSAgIHJ1biBzZWQgUFJPR1JBTSBvbiBpbnN0YWxsZWQgcHJvZ3JhbSBuYW1lcworCitTeXN0ZW0gdHlwZXM6CisgIC0tYnVpbGQ9QlVJTEQgICAgIGNvbmZpZ3VyZSBmb3IgYnVpbGRpbmcgb24gQlVJTEQgW2d1ZXNzZWRdCisgIC0taG9zdD1IT1NUICAgICAgIGNyb3NzLWNvbXBpbGUgdG8gYnVpbGQgcHJvZ3JhbXMgdG8gcnVuIG9uIEhPU1QgW0JVSUxEXQorX0FDRU9GCitmaQorCitpZiB0ZXN0IC1uICIkYWNfaW5pdF9oZWxwIjsgdGhlbgorICBjYXNlICRhY19pbml0X2hlbHAgaW4KKyAgICAgc2hvcnQgfCByZWN1cnNpdmUgKSBlY2hvICJDb25maWd1cmF0aW9uIG9mIEdOVSBwYXJ0ZWQgMS44Ljc6Ijs7CisgICBlc2FjCisgIGNhdCA8PFxfQUNFT0YKKworT3B0aW9uYWwgRmVhdHVyZXM6CisgIC0tZGlzYWJsZS1GRUFUVVJFICAgICAgIGRvIG5vdCBpbmNsdWRlIEZFQVRVUkUgKHNhbWUgYXMgLS1lbmFibGUtRkVBVFVSRT1ubykKKyAgLS1lbmFibGUtRkVBVFVSRVs9QVJHXSAgaW5jbHVkZSBGRUFUVVJFIFtBUkc9eWVzXQorICAtLWVuYWJsZS1tdHJhY2UgICAgICAgICBlbmFibGUgbWFsbG9jKCkgZGVidWdnaW5nCisgIC0tZW5hYmxlLWRldmljZS1tYXBwZXIgIGVuYWJsZSBkZXZpY2UgbWFwcGVyIHN1cHBvcnQgZGVmYXVsdD1ubworICAtLWVuYWJsZS1zZWxpbnV4ICAgICAgICBlbmFibGUgU0VMaW51eCBzdXBwb3J0IGRlZmF1bHQ9bm8KKyAgLS1lbmFibGUtZGlzY292ZXItb25seSAgc3VwcG9ydCBvbmx5IHJlYWRpbmcvcHJvYmluZyBkZWZhdWx0PW5vCisgIC0tZW5hYmxlLWR5bmFtaWMtbG9hZGluZyAgc3VwcG9ydCBkeW5hbWljIGZzIGxpYnJhcmllcyBkZWZhdWx0PXllcworICAtLWVuYWJsZS1mcyAgICAgICAgICAgICBpbmNsdWRlIGZpbGVzeXN0ZW0gc3VwcG9ydCBkZWZhdWx0PXllcworICAtLWVuYWJsZS1kZWJ1ZyAgICAgICAgICBjb21waWxlIGluIGFzc2VydGlvbnMgZGVmYXVsdD15ZXMKKyAgLS1lbmFibGUtcmVhZC1vbmx5ICAgICAgZGlzYWJsZSB3cml0aW5nIChmb3IgZGVidWdnaW5nKSBkZWZhdWx0PW5vCisKKyAgLS1lbmFibGUtcGM5OCAgICAgICAgICBidWlsZCB3aXRoIHBjOTggc3VwcG9ydCBkZWZhdWx0PXllcworICAtLWVuYWJsZS1XZXJyb3IgICAgICAgICBidWlsZCB3aXRoIGdjYyAtV2Vycm9yIGRlZmF1bHQ9eWVzCisgIC0tZW5hYmxlLWhmcy1leHRyYWN0LWZzIEV4dHJhY3Qgc3BlY2lhbCBIRlMgZmlsZXMgZm9yIGRlYnVnZ2luZyBkZWZhdWx0PW5vCisgIC0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nICBzcGVlZHMgdXAgb25lLXRpbWUgYnVpbGQKKyAgLS1lbmFibGUtZGVwZW5kZW5jeS10cmFja2luZyAgIGRvIG5vdCByZWplY3Qgc2xvdyBkZXBlbmRlbmN5IGV4dHJhY3RvcnMKKyAgLS1kaXNhYmxlLWxhcmdlZmlsZSAgICAgb21pdCBzdXBwb3J0IGZvciBsYXJnZSBmaWxlcworICAtLWRpc2FibGUtYXNzZXJ0ICAgICAgICB0dXJuIG9mZiBhc3NlcnRpb25zCisgIC0tZW5hYmxlLXNoYXJlZFs9UEtHU10gIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMgW2RlZmF1bHQ9eWVzXQorICAtLWVuYWJsZS1zdGF0aWNbPVBLR1NdICBidWlsZCBzdGF0aWMgbGlicmFyaWVzIFtkZWZhdWx0PXllc10KKyAgLS1lbmFibGUtZmFzdC1pbnN0YWxsWz1QS0dTXQorICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpbWl6ZSBmb3IgZmFzdCBpbnN0YWxsYXRpb24gW2RlZmF1bHQ9eWVzXQorICAtLWRpc2FibGUtbGlidG9vbC1sb2NrICBhdm9pZCBsb2NraW5nIChtaWdodCBicmVhayBwYXJhbGxlbCBidWlsZHMpCisgIC0tZGlzYWJsZS1ubHMgICAgICAgICAgIGRvIG5vdCB1c2UgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKKyAgLS1kaXNhYmxlLXJwYXRoICAgICAgICAgZG8gbm90IGhhcmRjb2RlIHJ1bnRpbWUgbGlicmFyeSBwYXRocworCitPcHRpb25hbCBQYWNrYWdlczoKKyAgLS13aXRoLVBBQ0tBR0VbPUFSR10gICAgdXNlIFBBQ0tBR0UgW0FSRz15ZXNdCisgIC0td2l0aG91dC1QQUNLQUdFICAgICAgIGRvIG5vdCB1c2UgUEFDS0FHRSAoc2FtZSBhcyAtLXdpdGgtUEFDS0FHRT1ubykKKyAgLS13aXRoLXJlYWRsaW5lICAgICAgICAgc3VwcG9ydCBmYW5jeSBjb21tYW5kIGxpbmUgZWRpdGluZworICAtLXdpdGhvdXQtaW5jbHVkZWQtcmVnZXgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uJ3QgY29tcGlsZSByZWdleDsgdGhpcyBpcyB0aGUgZGVmYXVsdCBvbiAzMi1iaXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtcyB3aXRoIHJlY2VudC1lbm91Z2ggdmVyc2lvbnMgb2YgdGhlIEdOVSBDCisgICAgICAgICAgICAgICAgICAgICAgICAgIExpYnJhcnkgKHVzZSB3aXRoIGNhdXRpb24gb24gb3RoZXIgc3lzdGVtcykuIE9uCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbXMgd2l0aCA2NC1iaXQgcHRyZGlmZl90IGFuZCAzMi1iaXQgaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAtLXdpdGgtaW5jbHVkZWQtcmVnZXggaXMgdGhlIGRlZmF1bHQsIGluIGNhc2UgcmVnZXgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25zIG9wZXJhdGUgb24gdmVyeSBsb25nIHN0cmluZ3MgKD4yR0IpCisgIC0td2l0aC1nbnUtbGQgICAgICAgICAgIGFzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBbZGVmYXVsdD1ub10KKyAgLS13aXRoLXBpYyAgICAgICAgICAgICAgdHJ5IHRvIHVzZSBvbmx5IFBJQy9ub24tUElDIG9iamVjdHMgW2RlZmF1bHQ9dXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdGhdCisgIC0td2l0aC10YWdzWz1UQUdTXSAgICAgIGluY2x1ZGUgYWRkaXRpb25hbCBjb25maWd1cmF0aW9ucyBbYXV0b21hdGljXQorICAtLXdpdGgtZ251LWxkICAgICAgICAgICBhc3N1bWUgdGhlIEMgY29tcGlsZXIgdXNlcyBHTlUgbGQgZGVmYXVsdD1ubworICAtLXdpdGgtbGliaWNvbnYtcHJlZml4Wz1ESVJdICBzZWFyY2ggZm9yIGxpYmljb252IGluIERJUi9pbmNsdWRlIGFuZCBESVIvbGliCisgIC0td2l0aG91dC1saWJpY29udi1wcmVmaXggICAgIGRvbid0IHNlYXJjaCBmb3IgbGliaWNvbnYgaW4gaW5jbHVkZWRpciBhbmQgbGliZGlyCisgIC0td2l0aC1saWJpbnRsLXByZWZpeFs9RElSXSAgc2VhcmNoIGZvciBsaWJpbnRsIGluIERJUi9pbmNsdWRlIGFuZCBESVIvbGliCisgIC0td2l0aG91dC1saWJpbnRsLXByZWZpeCAgICAgZG9uJ3Qgc2VhcmNoIGZvciBsaWJpbnRsIGluIGluY2x1ZGVkaXIgYW5kIGxpYmRpcgorCitTb21lIGluZmx1ZW50aWFsIGVudmlyb25tZW50IHZhcmlhYmxlczoKKyAgQ0MgICAgICAgICAgQyBjb21waWxlciBjb21tYW5kCisgIENGTEFHUyAgICAgIEMgY29tcGlsZXIgZmxhZ3MKKyAgTERGTEFHUyAgICAgbGlua2VyIGZsYWdzLCBlLmcuIC1MPGxpYiBkaXI+IGlmIHlvdSBoYXZlIGxpYnJhcmllcyBpbiBhCisgICAgICAgICAgICAgIG5vbnN0YW5kYXJkIGRpcmVjdG9yeSA8bGliIGRpcj4KKyAgTElCUyAgICAgICAgbGlicmFyaWVzIHRvIHBhc3MgdG8gdGhlIGxpbmtlciwgZS5nLiAtbDxsaWJyYXJ5PgorICBDUFBGTEFHUyAgICBDL0MrKy9PYmplY3RpdmUgQyBwcmVwcm9jZXNzb3IgZmxhZ3MsIGUuZy4gLUk8aW5jbHVkZSBkaXI+IGlmCisgICAgICAgICAgICAgIHlvdSBoYXZlIGhlYWRlcnMgaW4gYSBub25zdGFuZGFyZCBkaXJlY3RvcnkgPGluY2x1ZGUgZGlyPgorICBDUFAgICAgICAgICBDIHByZXByb2Nlc3NvcgorICBDWFggICAgICAgICBDKysgY29tcGlsZXIgY29tbWFuZAorICBDWFhGTEFHUyAgICBDKysgY29tcGlsZXIgZmxhZ3MKKyAgQ1hYQ1BQICAgICAgQysrIHByZXByb2Nlc3NvcgorICBGNzcgICAgICAgICBGb3J0cmFuIDc3IGNvbXBpbGVyIGNvbW1hbmQKKyAgRkZMQUdTICAgICAgRm9ydHJhbiA3NyBjb21waWxlciBmbGFncworICBQS0dfQ09ORklHICBwYXRoIHRvIHBrZy1jb25maWcgdXRpbGl0eQorICBDSEVDS19DRkxBR1MKKyAgICAgICAgICAgICAgQyBjb21waWxlciBmbGFncyBmb3IgQ0hFQ0ssIG92ZXJyaWRpbmcgcGtnLWNvbmZpZworICBDSEVDS19MSUJTICBsaW5rZXIgZmxhZ3MgZm9yIENIRUNLLCBvdmVycmlkaW5nIHBrZy1jb25maWcKKworVXNlIHRoZXNlIHZhcmlhYmxlcyB0byBvdmVycmlkZSB0aGUgY2hvaWNlcyBtYWRlIGJ5IGBjb25maWd1cmUnIG9yIHRvIGhlbHAKK2l0IHRvIGZpbmQgbGlicmFyaWVzIGFuZCBwcm9ncmFtcyB3aXRoIG5vbnN0YW5kYXJkIG5hbWVzL2xvY2F0aW9ucy4KKworUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1wYXJ0ZWRAZ251Lm9yZz4uCitfQUNFT0YKK2FjX3N0YXR1cz0kPworZmkKKworaWYgdGVzdCAiJGFjX2luaXRfaGVscCIgPSAicmVjdXJzaXZlIjsgdGhlbgorICAjIElmIHRoZXJlIGFyZSBzdWJkaXJzLCByZXBvcnQgdGhlaXIgc3BlY2lmaWMgLS1oZWxwLgorICBmb3IgYWNfZGlyIGluIDogJGFjX3N1YmRpcnNfYWxsOyBkbyB0ZXN0ICJ4JGFjX2RpciIgPSB4OiAmJiBjb250aW51ZQorICAgIHRlc3QgLWQgIiRhY19kaXIiIHx8IGNvbnRpbnVlCisgICAgYWNfYnVpbGRkaXI9LgorCitjYXNlICIkYWNfZGlyIiBpbgorLikgYWNfZGlyX3N1ZmZpeD0gYWNfdG9wX2J1aWxkZGlyX3N1Yj0uIGFjX3RvcF9idWlsZF9wcmVmaXg9IDs7CisqKQorICBhY19kaXJfc3VmZml4PS9gZWNobyAiJGFjX2RpciIgfCBzZWQgJ3MsXlwuW1xcL10sLCdgCisgICMgQSAiLi4iIGZvciBlYWNoIGRpcmVjdG9yeSBpbiAkYWNfZGlyX3N1ZmZpeC4KKyAgYWNfdG9wX2J1aWxkZGlyX3N1Yj1gZWNobyAiJGFjX2Rpcl9zdWZmaXgiIHwgc2VkICdzLC9bXlxcL10qLC8uLixnO3MsLywsJ2AKKyAgY2FzZSAkYWNfdG9wX2J1aWxkZGlyX3N1YiBpbgorICAiIikgYWNfdG9wX2J1aWxkZGlyX3N1Yj0uIGFjX3RvcF9idWlsZF9wcmVmaXg9IDs7CisgICopICBhY190b3BfYnVpbGRfcHJlZml4PSRhY190b3BfYnVpbGRkaXJfc3ViLyA7OworICBlc2FjIDs7Citlc2FjCithY19hYnNfdG9wX2J1aWxkZGlyPSRhY19wd2QKK2FjX2Fic19idWlsZGRpcj0kYWNfcHdkJGFjX2Rpcl9zdWZmaXgKKyMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHk6CithY190b3BfYnVpbGRkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgKKworY2FzZSAkc3JjZGlyIGluCisgIC4pICAjIFdlIGFyZSBidWlsZGluZyBpbiBwbGFjZS4KKyAgICBhY19zcmNkaXI9LgorICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZGRpcl9zdWIKKyAgICBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfcHdkIDs7CisgIFtcXC9dKiB8ID86W1xcL10qICkgICMgQWJzb2x1dGUgbmFtZS4KKyAgICBhY19zcmNkaXI9JHNyY2RpciRhY19kaXJfc3VmZml4OworICAgIGFjX3RvcF9zcmNkaXI9JHNyY2RpcgorICAgIGFjX2Fic190b3Bfc3JjZGlyPSRzcmNkaXIgOzsKKyAgKikgIyBSZWxhdGl2ZSBuYW1lLgorICAgIGFjX3NyY2Rpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeCRzcmNkaXIkYWNfZGlyX3N1ZmZpeAorICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgkc3JjZGlyCisgICAgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3B3ZC8kc3JjZGlyIDs7Citlc2FjCithY19hYnNfc3JjZGlyPSRhY19hYnNfdG9wX3NyY2RpciRhY19kaXJfc3VmZml4CisKKyAgICBjZCAiJGFjX2RpciIgfHwgeyBhY19zdGF0dXM9JD87IGNvbnRpbnVlOyB9CisgICAgIyBDaGVjayBmb3IgZ3Vlc3RlZCBjb25maWd1cmUuCisgICAgaWYgdGVzdCAtZiAiJGFjX3NyY2Rpci9jb25maWd1cmUuZ251IjsgdGhlbgorICAgICAgZWNobyAmJgorICAgICAgJFNIRUxMICIkYWNfc3JjZGlyL2NvbmZpZ3VyZS5nbnUiIC0taGVscD1yZWN1cnNpdmUKKyAgICBlbGlmIHRlc3QgLWYgIiRhY19zcmNkaXIvY29uZmlndXJlIjsgdGhlbgorICAgICAgZWNobyAmJgorICAgICAgJFNIRUxMICIkYWNfc3JjZGlyL2NvbmZpZ3VyZSIgLS1oZWxwPXJlY3Vyc2l2ZQorICAgIGVsc2UKKyAgICAgIGVjaG8gIiRhc19tZTogV0FSTklORzogbm8gY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBpcyBpbiAkYWNfZGlyIiA+JjIKKyAgICBmaSB8fCBhY19zdGF0dXM9JD8KKyAgICBjZCAiJGFjX3B3ZCIgfHwgeyBhY19zdGF0dXM9JD87IGJyZWFrOyB9CisgIGRvbmUKK2ZpCisKK3Rlc3QgLW4gIiRhY19pbml0X2hlbHAiICYmIGV4aXQgJGFjX3N0YXR1cworaWYgJGFjX2luaXRfdmVyc2lvbjsgdGhlbgorICBjYXQgPDxcX0FDRU9GCitHTlUgcGFydGVkIGNvbmZpZ3VyZSAxLjguNworZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjYxCisKK0NvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwKKzIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitUaGlzIGNvbmZpZ3VyZSBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LgorX0FDRU9GCisgIGV4aXQKK2ZpCitjYXQgPmNvbmZpZy5sb2cgPDxfQUNFT0YKK1RoaXMgZmlsZSBjb250YWlucyBhbnkgbWVzc2FnZXMgcHJvZHVjZWQgYnkgY29tcGlsZXJzIHdoaWxlCitydW5uaW5nIGNvbmZpZ3VyZSwgdG8gYWlkIGRlYnVnZ2luZyBpZiBjb25maWd1cmUgbWFrZXMgYSBtaXN0YWtlLgorCitJdCB3YXMgY3JlYXRlZCBieSBHTlUgcGFydGVkICRhc19tZSAxLjguNywgd2hpY2ggd2FzCitnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjEuICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKKworICAkICQwICRACisKK19BQ0VPRgorZXhlYyA1Pj5jb25maWcubG9nCit7CitjYXQgPDxfQVNVTkFNRQorIyMgLS0tLS0tLS0tICMjCisjIyBQbGF0Zm9ybS4gIyMKKyMjIC0tLS0tLS0tLSAjIworCitob3N0bmFtZSA9IGAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYAordW5hbWUgLW0gPSBgKHVuYW1lIC1tKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCit1bmFtZSAtciA9IGAodW5hbWUgLXIpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKK3VuYW1lIC1zID0gYCh1bmFtZSAtcykgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAordW5hbWUgLXYgPSBgKHVuYW1lIC12KSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCisKKy91c3IvYmluL3VuYW1lIC1wID0gYCgvdXNyL2Jpbi91bmFtZSAtcCkgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAorL2Jpbi91bmFtZSAtWCAgICAgPSBgKC9iaW4vdW5hbWUgLVgpIDI+L2Rldi9udWxsICAgICB8fCBlY2hvIHVua25vd25gCisKKy9iaW4vYXJjaCAgICAgICAgICAgICAgPSBgKC9iaW4vYXJjaCkgMj4vZGV2L251bGwgICAgICAgICAgICAgIHx8IGVjaG8gdW5rbm93bmAKKy91c3IvYmluL2FyY2ggLWsgICAgICAgPSBgKC91c3IvYmluL2FyY2ggLWspIDI+L2Rldi9udWxsICAgICAgIHx8IGVjaG8gdW5rbm93bmAKKy91c3IvY29udmV4L2dldHN5c2luZm8gPSBgKC91c3IvY29udmV4L2dldHN5c2luZm8pIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKKy91c3IvYmluL2hvc3RpbmZvICAgICAgPSBgKC91c3IvYmluL2hvc3RpbmZvKSAyPi9kZXYvbnVsbCAgICAgIHx8IGVjaG8gdW5rbm93bmAKKy9iaW4vbWFjaGluZSAgICAgICAgICAgPSBgKC9iaW4vbWFjaGluZSkgMj4vZGV2L251bGwgICAgICAgICAgIHx8IGVjaG8gdW5rbm93bmAKKy91c3IvYmluL29zbGV2ZWwgICAgICAgPSBgKC91c3IvYmluL29zbGV2ZWwpIDI+L2Rldi9udWxsICAgICAgIHx8IGVjaG8gdW5rbm93bmAKKy9iaW4vdW5pdmVyc2UgICAgICAgICAgPSBgKC9iaW4vdW5pdmVyc2UpIDI+L2Rldi9udWxsICAgICAgICAgIHx8IGVjaG8gdW5rbm93bmAKKworX0FTVU5BTUUKKworYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICBlY2hvICJQQVRIOiAkYXNfZGlyIgorZG9uZQorSUZTPSRhc19zYXZlX0lGUworCit9ID4mNQorCitjYXQgPiY1IDw8X0FDRU9GCisKKworIyMgLS0tLS0tLS0tLS0gIyMKKyMjIENvcmUgdGVzdHMuICMjCisjIyAtLS0tLS0tLS0tLSAjIworCitfQUNFT0YKKworCisjIEtlZXAgYSB0cmFjZSBvZiB0aGUgY29tbWFuZCBsaW5lLgorIyBTdHJpcCBvdXQgLS1uby1jcmVhdGUgYW5kIC0tbm8tcmVjdXJzaW9uIHNvIHRoZXkgZG8gbm90IHBpbGUgdXAuCisjIFN0cmlwIG91dCAtLXNpbGVudCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gcmVjb3JkIGl0IGZvciBmdXR1cmUgcnVucy4KKyMgQWxzbyBxdW90ZSBhbnkgYXJncyBjb250YWluaW5nIHNoZWxsIG1ldGEtY2hhcmFjdGVycy4KKyMgTWFrZSB0d28gcGFzc2VzIHRvIGFsbG93IGZvciBwcm9wZXIgZHVwbGljYXRlLWFyZ3VtZW50IHN1cHByZXNzaW9uLgorYWNfY29uZmlndXJlX2FyZ3M9CithY19jb25maWd1cmVfYXJnczA9CithY19jb25maWd1cmVfYXJnczE9CithY19tdXN0X2tlZXBfbmV4dD1mYWxzZQorZm9yIGFjX3Bhc3MgaW4gMSAyCitkbworICBmb3IgYWNfYXJnCisgIGRvCisgICAgY2FzZSAkYWNfYXJnIGluCisgICAgLW5vLWNyZWF0ZSB8IC0tbm8tYyogfCAtbiB8IC1uby1yZWN1cnNpb24gfCAtLW5vLXIqKSBjb250aW51ZSA7OworICAgIC1xIHwgLXF1aWV0IHwgLS1xdWlldCB8IC0tcXVpZSB8IC0tcXVpIHwgLS1xdSB8IC0tcSBcCisgICAgfCAtc2lsZW50IHwgLS1zaWxlbnQgfCAtLXNpbGVuIHwgLS1zaWxlIHwgLS1zaWwpCisgICAgICBjb250aW51ZSA7OworICAgICpcJyopCisgICAgICBhY19hcmc9YGVjaG8gIiRhY19hcmciIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgIDs7CisgICAgZXNhYworICAgIGNhc2UgJGFjX3Bhc3MgaW4KKyAgICAxKSBhY19jb25maWd1cmVfYXJnczA9IiRhY19jb25maWd1cmVfYXJnczAgJyRhY19hcmcnIiA7OworICAgIDIpCisgICAgICBhY19jb25maWd1cmVfYXJnczE9IiRhY19jb25maWd1cmVfYXJnczEgJyRhY19hcmcnIgorICAgICAgaWYgdGVzdCAkYWNfbXVzdF9rZWVwX25leHQgPSB0cnVlOyB0aGVuCisJYWNfbXVzdF9rZWVwX25leHQ9ZmFsc2UgIyBHb3QgdmFsdWUsIGJhY2sgdG8gbm9ybWFsLgorICAgICAgZWxzZQorCWNhc2UgJGFjX2FyZyBpbgorCSAgKj0qIHwgLS1jb25maWctY2FjaGUgfCAtQyB8IC1kaXNhYmxlLSogfCAtLWRpc2FibGUtKiBcCisJICB8IC1lbmFibGUtKiB8IC0tZW5hYmxlLSogfCAtZ2FzIHwgLS1nKiB8IC1uZnAgfCAtLW5mKiBcCisJICB8IC1xIHwgLXF1aWV0IHwgLS1xKiB8IC1zaWxlbnQgfCAtLXNpbCogfCAtdiB8IC12ZXJiKiBcCisJICB8IC13aXRoLSogfCAtLXdpdGgtKiB8IC13aXRob3V0LSogfCAtLXdpdGhvdXQtKiB8IC0teCkKKwkgICAgY2FzZSAiJGFjX2NvbmZpZ3VyZV9hcmdzMCAiIGluCisJICAgICAgIiRhY19jb25maWd1cmVfYXJnczEiKiIgJyRhY19hcmcnICIqICkgY29udGludWUgOzsKKwkgICAgZXNhYworCSAgICA7OworCSAgLSogKSBhY19tdXN0X2tlZXBfbmV4dD10cnVlIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGFjX2NvbmZpZ3VyZV9hcmdzPSIkYWNfY29uZmlndXJlX2FyZ3MgJyRhY19hcmcnIgorICAgICAgOzsKKyAgICBlc2FjCisgIGRvbmUKK2RvbmUKKyRhc191bnNldCBhY19jb25maWd1cmVfYXJnczAgfHwgdGVzdCAiJHthY19jb25maWd1cmVfYXJnczArc2V0fSIgIT0gc2V0IHx8IHsgYWNfY29uZmlndXJlX2FyZ3MwPTsgZXhwb3J0IGFjX2NvbmZpZ3VyZV9hcmdzMDsgfQorJGFzX3Vuc2V0IGFjX2NvbmZpZ3VyZV9hcmdzMSB8fCB0ZXN0ICIke2FjX2NvbmZpZ3VyZV9hcmdzMStzZXR9IiAhPSBzZXQgfHwgeyBhY19jb25maWd1cmVfYXJnczE9OyBleHBvcnQgYWNfY29uZmlndXJlX2FyZ3MxOyB9CisKKyMgV2hlbiBpbnRlcnJ1cHRlZCBvciBleGl0J2QsIGNsZWFudXAgdGVtcG9yYXJ5IGZpbGVzLCBhbmQgY29tcGxldGUKKyMgY29uZmlnLmxvZy4gIFdlIHJlbW92ZSBjb21tZW50cyBiZWNhdXNlIGFueXdheSB0aGUgcXVvdGVzIGluIHRoZXJlCisjIHdvdWxkIGNhdXNlIHByb2JsZW1zIG9yIGxvb2sgdWdseS4KKyMgV0FSTklORzogVXNlICdcJycgdG8gcmVwcmVzZW50IGFuIGFwb3N0cm9waGUgd2l0aGluIHRoZSB0cmFwLgorIyBXQVJOSU5HOiBEbyBub3Qgc3RhcnQgdGhlIHRyYXAgY29kZSB3aXRoIGEgbmV3bGluZSwgZHVlIHRvIGEgRnJlZUJTRCA0LjAgYnVnLgordHJhcCAnZXhpdF9zdGF0dXM9JD8KKyAgIyBTYXZlIGludG8gY29uZmlnLmxvZyBzb21lIGluZm9ybWF0aW9uIHRoYXQgbWlnaHQgaGVscCBpbiBkZWJ1Z2dpbmcuCisgIHsKKyAgICBlY2hvCisKKyAgICBjYXQgPDxcX0FTQk9YCisjIyAtLS0tLS0tLS0tLS0tLS0tICMjCisjIyBDYWNoZSB2YXJpYWJsZXMuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tICMjCitfQVNCT1gKKyAgICBlY2hvCisgICAgIyBUaGUgZm9sbG93aW5nIHdheSBvZiB3cml0aW5nIHRoZSBjYWNoZSBtaXNoYW5kbGVzIG5ld2xpbmVzIGluIHZhbHVlcywKKygKKyAgZm9yIGFjX3ZhciBpbiBgKHNldCkgMj4mMSB8IHNlZCAtbiAnXCcncy9eXChbYS16QS1aX11bYS16QS1aMC05X10qXCk9LiovXDEvcCdcJydgOyBkbworICAgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorICAgIGNhc2UgJGFjX3ZhbCBpbiAjKAorICAgICoke2FzX25sfSopCisgICAgICBjYXNlICRhY192YXIgaW4gIygKKyAgICAgICpfY3ZfKikgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogQ2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUuIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogQ2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUuIiA+JjI7fSA7OworICAgICAgZXNhYworICAgICAgY2FzZSAkYWNfdmFyIGluICMoCisgICAgICBfIHwgSUZTIHwgYXNfbmwpIDs7ICMoCisgICAgICAqKSAkYXNfdW5zZXQgJGFjX3ZhciA7OworICAgICAgZXNhYyA7OworICAgIGVzYWMKKyAgZG9uZQorICAoc2V0KSAyPiYxIHwKKyAgICBjYXNlICRhc19ubGAoYWNfc3BhY2U9J1wnJyAnXCcnOyBzZXQpIDI+JjFgIGluICMoCisgICAgKiR7YXNfbmx9YWNfc3BhY2U9XCAqKQorICAgICAgc2VkIC1uIFwKKwkicy8nXCcnLydcJydcXFxcJ1wnJydcJycvZzsKKwkgIHMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9J1wnJ1xcMidcJycvcCIKKyAgICAgIDs7ICMoCisgICAgKikKKyAgICAgIHNlZCAtbiAiL15bXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSo9L3AiCisgICAgICA7OworICAgIGVzYWMgfAorICAgIHNvcnQKKykKKyAgICBlY2hvCisKKyAgICBjYXQgPDxcX0FTQk9YCisjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgT3V0cHV0IHZhcmlhYmxlcy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCitfQVNCT1gKKyAgICBlY2hvCisgICAgZm9yIGFjX3ZhciBpbiAkYWNfc3Vic3RfdmFycworICAgIGRvCisgICAgICBldmFsIGFjX3ZhbD1cJCRhY192YXIKKyAgICAgIGNhc2UgJGFjX3ZhbCBpbgorICAgICAgKlwnXCcnKikgYWNfdmFsPWBlY2hvICIkYWNfdmFsIiB8IHNlZCAicy8nXCcnLydcJydcXFxcXFxcXCdcJycnXCcnL2ciYDs7CisgICAgICBlc2FjCisgICAgICBlY2hvICIkYWNfdmFyPSdcJyckYWNfdmFsJ1wnJyIKKyAgICBkb25lIHwgc29ydAorICAgIGVjaG8KKworICAgIGlmIHRlc3QgLW4gIiRhY19zdWJzdF9maWxlcyI7IHRoZW4KKyAgICAgIGNhdCA8PFxfQVNCT1gKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEZpbGUgc3Vic3RpdHV0aW9ucy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKK19BU0JPWAorICAgICAgZWNobworICAgICAgZm9yIGFjX3ZhciBpbiAkYWNfc3Vic3RfZmlsZXMKKyAgICAgIGRvCisJZXZhbCBhY192YWw9XCQkYWNfdmFyCisJY2FzZSAkYWNfdmFsIGluCisJKlwnXCcnKikgYWNfdmFsPWBlY2hvICIkYWNfdmFsIiB8IHNlZCAicy8nXCcnLydcJydcXFxcXFxcXCdcJycnXCcnL2ciYDs7CisJZXNhYworCWVjaG8gIiRhY192YXI9J1wnJyRhY192YWwnXCcnIgorICAgICAgZG9uZSB8IHNvcnQKKyAgICAgIGVjaG8KKyAgICBmaQorCisgICAgaWYgdGVzdCAtcyBjb25mZGVmcy5oOyB0aGVuCisgICAgICBjYXQgPDxcX0FTQk9YCisjIyAtLS0tLS0tLS0tLSAjIworIyMgY29uZmRlZnMuaC4gIyMKKyMjIC0tLS0tLS0tLS0tICMjCitfQVNCT1gKKyAgICAgIGVjaG8KKyAgICAgIGNhdCBjb25mZGVmcy5oCisgICAgICBlY2hvCisgICAgZmkKKyAgICB0ZXN0ICIkYWNfc2lnbmFsIiAhPSAwICYmCisgICAgICBlY2hvICIkYXNfbWU6IGNhdWdodCBzaWduYWwgJGFjX3NpZ25hbCIKKyAgICBlY2hvICIkYXNfbWU6IGV4aXQgJGV4aXRfc3RhdHVzIgorICB9ID4mNQorICBybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogJiYKKyAgICBybSAtZiAtciBjb25mdGVzdCogY29uZmRlZnMqIGNvbmYkJCogJGFjX2NsZWFuX2ZpbGVzICYmCisgICAgZXhpdCAkZXhpdF9zdGF0dXMKKycgMAorZm9yIGFjX3NpZ25hbCBpbiAxIDIgMTMgMTU7IGRvCisgIHRyYXAgJ2FjX3NpZ25hbD0nJGFjX3NpZ25hbCc7IHsgKGV4aXQgMSk7IGV4aXQgMTsgfScgJGFjX3NpZ25hbAorZG9uZQorYWNfc2lnbmFsPTAKKworIyBjb25mZGVmcy5oIGF2b2lkcyBPUyBjb21tYW5kIGxpbmUgbGVuZ3RoIGxpbWl0cyB0aGF0IERFRlMgY2FuIGV4Y2VlZC4KK3JtIC1mIC1yIGNvbmZ0ZXN0KiBjb25mZGVmcy5oCisKKyMgUHJlZGVmaW5lZCBwcmVwcm9jZXNzb3IgdmFyaWFibGVzLgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFBBQ0tBR0VfTkFNRSAiJFBBQ0tBR0VfTkFNRSIKK19BQ0VPRgorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUEFDS0FHRV9UQVJOQU1FICIkUEFDS0FHRV9UQVJOQU1FIgorX0FDRU9GCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBQQUNLQUdFX1ZFUlNJT04gIiRQQUNLQUdFX1ZFUlNJT04iCitfQUNFT0YKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFBBQ0tBR0VfU1RSSU5HICIkUEFDS0FHRV9TVFJJTkciCitfQUNFT0YKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFBBQ0tBR0VfQlVHUkVQT1JUICIkUEFDS0FHRV9CVUdSRVBPUlQiCitfQUNFT0YKKworCisjIExldCB0aGUgc2l0ZSBmaWxlIHNlbGVjdCBhbiBhbHRlcm5hdGUgY2FjaGUgZmlsZSBpZiBpdCB3YW50cyB0by4KKyMgUHJlZmVyIGV4cGxpY2l0bHkgc2VsZWN0ZWQgZmlsZSB0byBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkIG9uZXMuCitpZiB0ZXN0IC1uICIkQ09ORklHX1NJVEUiOyB0aGVuCisgIHNldCB4ICIkQ09ORklHX1NJVEUiCitlbGlmIHRlc3QgIngkcHJlZml4IiAhPSB4Tk9ORTsgdGhlbgorICBzZXQgeCAiJHByZWZpeC9zaGFyZS9jb25maWcuc2l0ZSIgIiRwcmVmaXgvZXRjL2NvbmZpZy5zaXRlIgorZWxzZQorICBzZXQgeCAiJGFjX2RlZmF1bHRfcHJlZml4L3NoYXJlL2NvbmZpZy5zaXRlIiBcCisJIiRhY19kZWZhdWx0X3ByZWZpeC9ldGMvY29uZmlnLnNpdGUiCitmaQorc2hpZnQKK2ZvciBhY19zaXRlX2ZpbGUKK2RvCisgIGlmIHRlc3QgLXIgIiRhY19zaXRlX2ZpbGUiOyB0aGVuCisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogbG9hZGluZyBzaXRlIHNjcmlwdCAkYWNfc2l0ZV9maWxlIiA+JjUKK2VjaG8gIiRhc19tZTogbG9hZGluZyBzaXRlIHNjcmlwdCAkYWNfc2l0ZV9maWxlIiA+JjY7fQorICAgIHNlZCAncy9eL3wgLycgIiRhY19zaXRlX2ZpbGUiID4mNQorICAgIC4gIiRhY19zaXRlX2ZpbGUiCisgIGZpCitkb25lCisKK2lmIHRlc3QgLXIgIiRjYWNoZV9maWxlIjsgdGhlbgorICAjIFNvbWUgdmVyc2lvbnMgb2YgYmFzaCB3aWxsIGZhaWwgdG8gc291cmNlIC9kZXYvbnVsbCAoc3BlY2lhbAorICAjIGZpbGVzIGFjdHVhbGx5KSwgc28gd2UgYXZvaWQgZG9pbmcgdGhhdC4KKyAgaWYgdGVzdCAtZiAiJGNhY2hlX2ZpbGUiOyB0aGVuCisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogbG9hZGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1CitlY2hvICIkYXNfbWU6IGxvYWRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CisgICAgY2FzZSAkY2FjaGVfZmlsZSBpbgorICAgICAgW1xcL10qIHwgPzpbXFwvXSogKSAuICIkY2FjaGVfZmlsZSI7OworICAgICAgKikgICAgICAgICAgICAgICAgICAgICAgLiAiLi8kY2FjaGVfZmlsZSI7OworICAgIGVzYWMKKyAgZmkKK2Vsc2UKKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY3JlYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorZWNobyAiJGFzX21lOiBjcmVhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKyAgPiRjYWNoZV9maWxlCitmaQorCithY19oZWFkZXJfbGlzdD0iJGFjX2hlYWRlcl9saXN0IHN0ZGlvX2V4dC5oIgorYWNfaGVhZGVyX2xpc3Q9IiRhY19oZWFkZXJfbGlzdCBzdGRpbnQuaCIKK2FjX2hlYWRlcl9saXN0PSIkYWNfaGVhZGVyX2xpc3QgaW50dHlwZXMuaCIKK2FjX2Z1bmNfbGlzdD0iJGFjX2Z1bmNfbGlzdCBtYnNpbml0IgorYWNfaGVhZGVyX2xpc3Q9IiRhY19oZWFkZXJfbGlzdCBsb2NhbGUuaCIKK2FjX2Z1bmNfbGlzdD0iJGFjX2Z1bmNfbGlzdCBpc3djdHlwZSIKK2FjX2Z1bmNfbGlzdD0iJGFjX2Z1bmNfbGlzdCBtYnJ0b3djIgorYWNfZnVuY19saXN0PSIkYWNfZnVuY19saXN0IHdjcnRvbWIiCithY19mdW5jX2xpc3Q9IiRhY19mdW5jX2xpc3Qgd2NzY29sbCIKK2FjX2hlYWRlcl9saXN0PSIkYWNfaGVhZGVyX2xpc3Qgc3RkbGliLmgiCithY19oZWFkZXJfbGlzdD0iJGFjX2hlYWRlcl9saXN0IHN0cmluZy5oIgorYWNfaGVhZGVyX2xpc3Q9IiRhY19oZWFkZXJfbGlzdCB1bmlzdGQuaCIKK2FjX2hlYWRlcl9saXN0PSIkYWNfaGVhZGVyX2xpc3QgdXRpbWUuaCIKK2FjX2hlYWRlcl9saXN0PSIkYWNfaGVhZGVyX2xpc3Qgc3lzL3RpbWUuaCIKK2FjX2hlYWRlcl9saXN0PSIkYWNfaGVhZGVyX2xpc3Qgd2NoYXIuaCIKK2FjX2Z1bmNfbGlzdD0iJGFjX2Z1bmNfbGlzdCBpc3djbnRybCIKK2FjX2hlYWRlcl9saXN0PSIkYWNfaGVhZGVyX2xpc3Qgd2N0eXBlLmgiCitndF9uZWVkcz0iJGd0X25lZWRzICIKKyMgQ2hlY2sgdGhhdCB0aGUgcHJlY2lvdXMgdmFyaWFibGVzIHNhdmVkIGluIHRoZSBjYWNoZSBoYXZlIGtlcHQgdGhlIHNhbWUKKyMgdmFsdWUuCithY19jYWNoZV9jb3JydXB0ZWQ9ZmFsc2UKK2ZvciBhY192YXIgaW4gJGFjX3ByZWNpb3VzX3ZhcnM7IGRvCisgIGV2YWwgYWNfb2xkX3NldD1cJGFjX2N2X2Vudl8ke2FjX3Zhcn1fc2V0CisgIGV2YWwgYWNfbmV3X3NldD1cJGFjX2Vudl8ke2FjX3Zhcn1fc2V0CisgIGV2YWwgYWNfb2xkX3ZhbD1cJGFjX2N2X2Vudl8ke2FjX3Zhcn1fdmFsdWUKKyAgZXZhbCBhY19uZXdfdmFsPVwkYWNfZW52XyR7YWNfdmFyfV92YWx1ZQorICBjYXNlICRhY19vbGRfc2V0LCRhY19uZXdfc2V0IGluCisgICAgc2V0LCkKKyAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBcYCRhY192YXInIHdhcyBzZXQgdG8gXGAkYWNfb2xkX3ZhbCcgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBcYCRhY192YXInIHdhcyBzZXQgdG8gXGAkYWNfb2xkX3ZhbCcgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiYyO30KKyAgICAgIGFjX2NhY2hlX2NvcnJ1cHRlZD06IDs7CisgICAgLHNldCkKKyAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBcYCRhY192YXInIHdhcyBub3Qgc2V0IGluIHRoZSBwcmV2aW91cyBydW4iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgbm90IHNldCBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjI7fQorICAgICAgYWNfY2FjaGVfY29ycnVwdGVkPTogOzsKKyAgICAsKTs7CisgICAgKikKKyAgICAgIGlmIHRlc3QgIngkYWNfb2xkX3ZhbCIgIT0gIngkYWNfbmV3X3ZhbCI7IHRoZW4KKwl7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogXGAkYWNfdmFyJyBoYXMgY2hhbmdlZCBzaW5jZSB0aGUgcHJldmlvdXMgcnVuOiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBcYCRhY192YXInIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjI7fQorCXsgZWNobyAiJGFzX21lOiRMSU5FTk86ICAgZm9ybWVyIHZhbHVlOiAgJGFjX29sZF92YWwiID4mNQorZWNobyAiJGFzX21lOiAgIGZvcm1lciB2YWx1ZTogICRhY19vbGRfdmFsIiA+JjI7fQorCXsgZWNobyAiJGFzX21lOiRMSU5FTk86ICAgY3VycmVudCB2YWx1ZTogJGFjX25ld192YWwiID4mNQorZWNobyAiJGFzX21lOiAgIGN1cnJlbnQgdmFsdWU6ICRhY19uZXdfdmFsIiA+JjI7fQorCWFjX2NhY2hlX2NvcnJ1cHRlZD06CisgICAgICBmaTs7CisgIGVzYWMKKyAgIyBQYXNzIHByZWNpb3VzIHZhcmlhYmxlcyB0byBjb25maWcuc3RhdHVzLgorICBpZiB0ZXN0ICIkYWNfbmV3X3NldCIgPSBzZXQ7IHRoZW4KKyAgICBjYXNlICRhY19uZXdfdmFsIGluCisgICAgKlwnKikgYWNfYXJnPSRhY192YXI9YGVjaG8gIiRhY19uZXdfdmFsIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OworICAgICopIGFjX2FyZz0kYWNfdmFyPSRhY19uZXdfdmFsIDs7CisgICAgZXNhYworICAgIGNhc2UgIiAkYWNfY29uZmlndXJlX2FyZ3MgIiBpbgorICAgICAgKiIgJyRhY19hcmcnICIqKSA7OyAjIEF2b2lkIGR1cHMuICBVc2Ugb2YgcXVvdGVzIGVuc3VyZXMgYWNjdXJhY3kuCisgICAgICAqKSBhY19jb25maWd1cmVfYXJncz0iJGFjX2NvbmZpZ3VyZV9hcmdzICckYWNfYXJnJyIgOzsKKyAgICBlc2FjCisgIGZpCitkb25lCitpZiAkYWNfY2FjaGVfY29ycnVwdGVkOyB0aGVuCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjaGFuZ2VzIGluIHRoZSBlbnZpcm9ubWVudCBjYW4gY29tcHJvbWlzZSB0aGUgYnVpbGQiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2hhbmdlcyBpbiB0aGUgZW52aXJvbm1lbnQgY2FuIGNvbXByb21pc2UgdGhlIGJ1aWxkIiA+JjI7fQorICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBydW4gXGBtYWtlIGRpc3RjbGVhbicgYW5kL29yIFxgcm0gJGNhY2hlX2ZpbGUnIGFuZCBzdGFydCBvdmVyIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IHJ1biBcYG1ha2UgZGlzdGNsZWFuJyBhbmQvb3IgXGBybSAkY2FjaGVfZmlsZScgYW5kIHN0YXJ0IG92ZXIiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2ZpCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworCisKKworCithY19jb25maWdfaGVhZGVycz0iJGFjX2NvbmZpZ19oZWFkZXJzIGxpYi9jb25maWcuaDpsaWIvY29uZmlnLmguaW4iCisKK2FjX2F1eF9kaXI9Citmb3IgYWNfZGlyIGluIGJ1aWxkLWF1eCAiJHNyY2RpciIvYnVpbGQtYXV4OyBkbworICBpZiB0ZXN0IC1mICIkYWNfZGlyL2luc3RhbGwtc2giOyB0aGVuCisgICAgYWNfYXV4X2Rpcj0kYWNfZGlyCisgICAgYWNfaW5zdGFsbF9zaD0iJGFjX2F1eF9kaXIvaW5zdGFsbC1zaCAtYyIKKyAgICBicmVhaworICBlbGlmIHRlc3QgLWYgIiRhY19kaXIvaW5zdGFsbC5zaCI7IHRoZW4KKyAgICBhY19hdXhfZGlyPSRhY19kaXIKKyAgICBhY19pbnN0YWxsX3NoPSIkYWNfYXV4X2Rpci9pbnN0YWxsLnNoIC1jIgorICAgIGJyZWFrCisgIGVsaWYgdGVzdCAtZiAiJGFjX2Rpci9zaHRvb2wiOyB0aGVuCisgICAgYWNfYXV4X2Rpcj0kYWNfZGlyCisgICAgYWNfaW5zdGFsbF9zaD0iJGFjX2F1eF9kaXIvc2h0b29sIGluc3RhbGwgLWMiCisgICAgYnJlYWsKKyAgZmkKK2RvbmUKK2lmIHRlc3QgLXogIiRhY19hdXhfZGlyIjsgdGhlbgorICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZmluZCBpbnN0YWxsLXNoIG9yIGluc3RhbGwuc2ggaW4gYnVpbGQtYXV4IFwiJHNyY2RpclwiL2J1aWxkLWF1eCIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBpbnN0YWxsLXNoIG9yIGluc3RhbGwuc2ggaW4gYnVpbGQtYXV4IFwiJHNyY2RpclwiL2J1aWxkLWF1eCIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorZmkKKworIyBUaGVzZSB0aHJlZSB2YXJpYWJsZXMgYXJlIHVuZG9jdW1lbnRlZCBhbmQgdW5zdXBwb3J0ZWQsCisjIGFuZCBhcmUgaW50ZW5kZWQgdG8gYmUgd2l0aGRyYXduIGluIGEgZnV0dXJlIEF1dG9jb25mIHJlbGVhc2UuCisjIFRoZXkgY2FuIGNhdXNlIHNlcmlvdXMgcHJvYmxlbXMgaWYgYSBidWlsZGVyJ3Mgc291cmNlIHRyZWUgaXMgaW4gYSBkaXJlY3RvcnkKKyMgd2hvc2UgZnVsbCBuYW1lIGNvbnRhaW5zIHVudXN1YWwgY2hhcmFjdGVycy4KK2FjX2NvbmZpZ19ndWVzcz0iJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5ndWVzcyIgICMgUGxlYXNlIGRvbid0IHVzZSB0aGlzIHZhci4KK2FjX2NvbmZpZ19zdWI9IiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViIiAgIyBQbGVhc2UgZG9uJ3QgdXNlIHRoaXMgdmFyLgorYWNfY29uZmlndXJlPSIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlndXJlIiAgIyBQbGVhc2UgZG9uJ3QgdXNlIHRoaXMgdmFyLgorCisKKworUEVEX01BSk9SX1ZFUlNJT049MQorUEVEX01JTk9SX1ZFUlNJT049OAorUEVEX01JQ1JPX1ZFUlNJT049NworUEVEX0lOVEVSRkFDRV9BR0U9MAorUEVEX0JJTkFSWV9BR0U9MAorUEVEX1ZFUlNJT05fU1VGRklYPQorUEVEX1ZFUlNJT049JFBFRF9NQUpPUl9WRVJTSU9OLiRQRURfTUlOT1JfVkVSU0lPTi4kUEVEX01JQ1JPX1ZFUlNJT04kUEVEX1ZFUlNJT05fU1VGRklYCisKK0xUX1JFTEVBU0U9JFBFRF9NQUpPUl9WRVJTSU9OLiRQRURfTUlOT1JfVkVSU0lPTgorTFRfQ1VSUkVOVD1gZXhwciAkUEVEX01JQ1JPX1ZFUlNJT04gLSAkUEVEX0lOVEVSRkFDRV9BR0VgCitMVF9SRVZJU0lPTj0kUEVEX0lOVEVSRkFDRV9BR0UKK0xUX0FHRT1gZXhwciAkUEVEX0JJTkFSWV9BR0UgLSAkUEVEX0lOVEVSRkFDRV9BR0VgCisKKworCisKKworIyBFbnN1cmUgdGhhdCB0aGUgUEVEXyotc3BlY2lmaWVkIHZlcnNpb24gaXMgdGhlIHNhbWUgYXMgdGhlIGxpdGVyYWwKKyMgaW4gdGhlIEFDX0lOSVQgbGluZSwgYWJvdmUuCit0ZXN0ICRQQUNLQUdFX1ZFUlNJT04gPSAkUEVEX1ZFUlNJT04gfHwKKyAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZmlndXJlLmFjOiB2ZXJzaW9uIG1pc21hdGNoOiAkUEFDS0FHRV9WRVJTSU9OICE9ICRQRURfVkVSU0lPTiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjb25maWd1cmUuYWM6IHZlcnNpb24gbWlzbWF0Y2g6ICRQQUNLQUdFX1ZFUlNJT04gIT0gJFBFRF9WRVJTSU9OIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisKK2FtX19hcGlfdmVyc2lvbj0nMS4xMCcKKworIyBGaW5kIGEgZ29vZCBpbnN0YWxsIHByb2dyYW0uICBXZSBwcmVmZXIgYSBDIHByb2dyYW0gKGZhc3RlciksCisjIHNvIG9uZSBzY3JpcHQgaXMgYXMgZ29vZCBhcyBhbm90aGVyLiAgQnV0IGF2b2lkIHRoZSBicm9rZW4gb3IKKyMgaW5jb21wYXRpYmxlIHZlcnNpb25zOgorIyBTeXNWIC9ldGMvaW5zdGFsbCwgL3Vzci9zYmluL2luc3RhbGwKKyMgU3VuT1MgL3Vzci9ldGMvaW5zdGFsbAorIyBJUklYIC9zYmluL2luc3RhbGwKKyMgQUlYIC9iaW4vaW5zdGFsbAorIyBBbWlnYU9TIC9DL2luc3RhbGwsIHdoaWNoIGluc3RhbGxzIGJvb3RibG9ja3Mgb24gZmxvcHB5IGRpc2NzCisjIEFJWCA0IC91c3IvYmluL2luc3RhbGxic2QsIHdoaWNoIGRvZXNuJ3Qgd29yayB3aXRob3V0IGEgLWcgZmxhZworIyBBRlMgL3Vzci9hZnN3cy9iaW4vaW5zdGFsbCwgd2hpY2ggbWlzaGFuZGxlcyBub25leGlzdGVudCBhcmdzCisjIFNWUjQgL3Vzci91Y2IvaW5zdGFsbCwgd2hpY2ggdHJpZXMgdG8gdXNlIHRoZSBub25leGlzdGVudCBncm91cCAic3RhZmYiCisjIE9TLzIncyBzeXN0ZW0gaW5zdGFsbCwgd2hpY2ggaGFzIGEgY29tcGxldGVseSBkaWZmZXJlbnQgc2VtYW50aWMKKyMgLi9pbnN0YWxsLCB3aGljaCBjYW4gYmUgZXJyb25lb3VzbHkgY3JlYXRlZCBieSBtYWtlIGZyb20gLi9pbnN0YWxsLnNoLgoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGEgQlNELWNvbXBhdGlibGUgaW5zdGFsbCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBhIEJTRC1jb21wYXRpYmxlIGluc3RhbGwuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0IC16ICIkSU5TVEFMTCI7IHRoZW4KK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9pbnN0YWxsK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgIyBBY2NvdW50IGZvciBwZW9wbGUgd2hvIHB1dCB0cmFpbGluZyBzbGFzaGVzIGluIFBBVEggZWxlbWVudHMuCitjYXNlICRhc19kaXIvIGluCisgIC4vIHwgLi8vIHwgL2NDLyogfCBcCisgIC9ldGMvKiB8IC91c3Ivc2Jpbi8qIHwgL3Vzci9ldGMvKiB8IC9zYmluLyogfCAvdXNyL2Fmc3dzL2Jpbi8qIHwgXAorICA/OlxcL29zMlxcL2luc3RhbGxcXC8qIHwgPzpcXC9PUzJcXC9JTlNUQUxMXFwvKiB8IFwKKyAgL3Vzci91Y2IvKiApIDs7CisgICopCisgICAgIyBPU0YxIGFuZCBTQ08gT0RUIDMuMCBoYXZlIHRoZWlyIG93biBuYW1lcyBmb3IgaW5zdGFsbC4KKyAgICAjIERvbid0IHVzZSBpbnN0YWxsYnNkIGZyb20gT1NGIHNpbmNlIGl0IGluc3RhbGxzIHN0dWZmIGFzIHJvb3QKKyAgICAjIGJ5IGRlZmF1bHQuCisgICAgZm9yIGFjX3Byb2cgaW4gZ2luc3RhbGwgc2NvaW5zdCBpbnN0YWxsOyBkbworICAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisJaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorCSAgaWYgdGVzdCAkYWNfcHJvZyA9IGluc3RhbGwgJiYKKwkgICAgZ3JlcCBkc3Btc2cgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiID4vZGV2L251bGwgMj4mMTsgdGhlbgorCSAgICAjIEFJWCBpbnN0YWxsLiAgSXQgaGFzIGFuIGluY29tcGF0aWJsZSBjYWxsaW5nIGNvbnZlbnRpb24uCisJICAgIDoKKwkgIGVsaWYgdGVzdCAkYWNfcHJvZyA9IGluc3RhbGwgJiYKKwkgICAgZ3JlcCBwd3BsdXMgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiID4vZGV2L251bGwgMj4mMTsgdGhlbgorCSAgICAjIHByb2dyYW0tc3BlY2lmaWMgaW5zdGFsbCBzY3JpcHQgdXNlZCBieSBIUCBwd3BsdXMtLWRvbid0IHVzZS4KKwkgICAgOgorCSAgZWxzZQorCSAgICBhY19jdl9wYXRoX2luc3RhbGw9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQgLWMiCisJICAgIGJyZWFrIDMKKwkgIGZpCisJZmkKKyAgICAgIGRvbmUKKyAgICBkb25lCisgICAgOzsKK2VzYWMKK2RvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworCitmaQorICBpZiB0ZXN0ICIke2FjX2N2X3BhdGhfaW5zdGFsbCtzZXR9IiA9IHNldDsgdGhlbgorICAgIElOU1RBTEw9JGFjX2N2X3BhdGhfaW5zdGFsbAorICBlbHNlCisgICAgIyBBcyBhIGxhc3QgcmVzb3J0LCB1c2UgdGhlIHNsb3cgc2hlbGwgc2NyaXB0LiAgRG9uJ3QgY2FjaGUgYQorICAgICMgdmFsdWUgZm9yIElOU1RBTEwgd2l0aGluIGEgc291cmNlIGRpcmVjdG9yeSwgYmVjYXVzZSB0aGF0IHdpbGwKKyAgICAjIGJyZWFrIG90aGVyIHBhY2thZ2VzIHVzaW5nIHRoZSBjYWNoZSBpZiB0aGF0IGRpcmVjdG9yeSBpcworICAgICMgcmVtb3ZlZCwgb3IgaWYgdGhlIHZhbHVlIGlzIGEgcmVsYXRpdmUgbmFtZS4KKyAgICBJTlNUQUxMPSRhY19pbnN0YWxsX3NoCisgIGZpCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkSU5TVEFMTCIgPiY1CitlY2hvICIke0VDSE9fVH0kSU5TVEFMTCIgPiY2OyB9CisKKyMgVXNlIHRlc3QgLXogYmVjYXVzZSBTdW5PUzQgc2ggbWlzaGFuZGxlcyBicmFjZXMgaW4gJHt2YXItdmFsfS4KKyMgSXQgdGhpbmtzIHRoZSBmaXJzdCBjbG9zZSBicmFjZSBlbmRzIHRoZSB2YXJpYWJsZSBzdWJzdGl0dXRpb24uCit0ZXN0IC16ICIkSU5TVEFMTF9QUk9HUkFNIiAmJiBJTlNUQUxMX1BST0dSQU09JyR7SU5TVEFMTH0nCisKK3Rlc3QgLXogIiRJTlNUQUxMX1NDUklQVCIgJiYgSU5TVEFMTF9TQ1JJUFQ9JyR7SU5TVEFMTH0nCisKK3Rlc3QgLXogIiRJTlNUQUxMX0RBVEEiICYmIElOU1RBTExfREFUQT0nJHtJTlNUQUxMfSAtbSA2NDQnCisKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgYnVpbGQgZW52aXJvbm1lbnQgaXMgc2FuZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgYnVpbGQgZW52aXJvbm1lbnQgaXMgc2FuZS4uLiAkRUNIT19DIiA+JjY7IH0KKyMgSnVzdCBpbiBjYXNlCitzbGVlcCAxCitlY2hvIHRpbWVzdGFtcCA+IGNvbmZ0ZXN0LmZpbGUKKyMgRG8gYHNldCcgaW4gYSBzdWJzaGVsbCBzbyB3ZSBkb24ndCBjbG9iYmVyIHRoZSBjdXJyZW50IHNoZWxsJ3MKKyMgYXJndW1lbnRzLiAgTXVzdCB0cnkgLUwgZmlyc3QgaW4gY2FzZSBjb25maWd1cmUgaXMgYWN0dWFsbHkgYQorIyBzeW1saW5rOyBzb21lIHN5c3RlbXMgcGxheSB3ZWlyZCBnYW1lcyB3aXRoIHRoZSBtb2QgdGltZSBvZiBzeW1saW5rcworIyAoZWcgRnJlZUJTRCByZXR1cm5zIHRoZSBtb2QgdGltZSBvZiB0aGUgc3ltbGluaydzIGNvbnRhaW5pbmcKKyMgZGlyZWN0b3J5KS4KK2lmICgKKyAgIHNldCBYIGBscyAtTHQgJHNyY2Rpci9jb25maWd1cmUgY29uZnRlc3QuZmlsZSAyPiAvZGV2L251bGxgCisgICBpZiB0ZXN0ICIkKiIgPSAiWCI7IHRoZW4KKyAgICAgICMgLUwgZGlkbid0IHdvcmsuCisgICAgICBzZXQgWCBgbHMgLXQgJHNyY2Rpci9jb25maWd1cmUgY29uZnRlc3QuZmlsZWAKKyAgIGZpCisgICBybSAtZiBjb25mdGVzdC5maWxlCisgICBpZiB0ZXN0ICIkKiIgIT0gIlggJHNyY2Rpci9jb25maWd1cmUgY29uZnRlc3QuZmlsZSIgXAorICAgICAgJiYgdGVzdCAiJCoiICE9ICJYIGNvbmZ0ZXN0LmZpbGUgJHNyY2Rpci9jb25maWd1cmUiOyB0aGVuCisKKyAgICAgICMgSWYgbmVpdGhlciBtYXRjaGVkLCB0aGVuIHdlIGhhdmUgYSBicm9rZW4gbHMuICBUaGlzIGNhbiBoYXBwZW4KKyAgICAgICMgaWYsIGZvciBpbnN0YW5jZSwgQ09ORklHX1NIRUxMIGlzIGJhc2ggYW5kIGl0IGluaGVyaXRzIGEKKyAgICAgICMgYnJva2VuIGxzIGFsaWFzIGZyb20gdGhlIGVudmlyb25tZW50LiAgVGhpcyBoYXMgYWN0dWFsbHkKKyAgICAgICMgaGFwcGVuZWQuICBTdWNoIGEgc3lzdGVtIGNvdWxkIG5vdCBiZSBjb25zaWRlcmVkICJzYW5lIi4KKyAgICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGxzIC10IGFwcGVhcnMgdG8gZmFpbC4gIE1ha2Ugc3VyZSB0aGVyZSBpcyBub3QgYSBicm9rZW4KK2FsaWFzIGluIHlvdXIgZW52aXJvbm1lbnQiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogbHMgLXQgYXBwZWFycyB0byBmYWlsLiAgTWFrZSBzdXJlIHRoZXJlIGlzIG5vdCBhIGJyb2tlbgorYWxpYXMgaW4geW91ciBlbnZpcm9ubWVudCIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgZmkKKworICAgdGVzdCAiJDIiID0gY29uZnRlc3QuZmlsZQorICAgKQordGhlbgorICAgIyBPay4KKyAgIDoKK2Vsc2UKKyAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IG5ld2x5IGNyZWF0ZWQgZmlsZSBpcyBvbGRlciB0aGFuIGRpc3RyaWJ1dGVkIGZpbGVzIQorQ2hlY2sgeW91ciBzeXN0ZW0gY2xvY2siID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogbmV3bHkgY3JlYXRlZCBmaWxlIGlzIG9sZGVyIHRoYW4gZGlzdHJpYnV0ZWQgZmlsZXMhCitDaGVjayB5b3VyIHN5c3RlbSBjbG9jayIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKK2VjaG8gIiR7RUNIT19UfXllcyIgPiY2OyB9Cit0ZXN0ICIkcHJvZ3JhbV9wcmVmaXgiICE9IE5PTkUgJiYKKyAgcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT0icyZeJiRwcm9ncmFtX3ByZWZpeCY7JHByb2dyYW1fdHJhbnNmb3JtX25hbWUiCisjIFVzZSBhIGRvdWJsZSAkIHNvIG1ha2UgaWdub3JlcyBpdC4KK3Rlc3QgIiRwcm9ncmFtX3N1ZmZpeCIgIT0gTk9ORSAmJgorICBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPSJzJlwkJiRwcm9ncmFtX3N1ZmZpeCY7JHByb2dyYW1fdHJhbnNmb3JtX25hbWUiCisjIERvdWJsZSBhbnkgXCBvciAkLiAgZWNobyBtaWdodCBpbnRlcnByZXQgYmFja3NsYXNoZXMuCisjIEJ5IGRlZmF1bHQgd2FzIGBzLHgseCcsIHJlbW92ZSBpdCBpZiB1c2VsZXNzLgorY2F0IDw8XF9BQ0VPRiA+Y29uZnRlc3Quc2VkCitzL1tcXCRdLyYmL2c7cy87cyx4LHgsJC8vCitfQUNFT0YKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWU9YGVjaG8gJHByb2dyYW1fdHJhbnNmb3JtX25hbWUgfCBzZWQgLWYgY29uZnRlc3Quc2VkYAorcm0gLWYgY29uZnRlc3Quc2VkCisKKyMgZXhwYW5kICRhY19hdXhfZGlyIHRvIGFuIGFic29sdXRlIHBhdGgKK2FtX2F1eF9kaXI9YGNkICRhY19hdXhfZGlyICYmIHB3ZGAKKwordGVzdCB4IiR7TUlTU0lORytzZXR9IiA9IHhzZXQgfHwgTUlTU0lORz0iXCR7U0hFTEx9ICRhbV9hdXhfZGlyL21pc3NpbmciCisjIFVzZSBldmFsIHRvIGV4cGFuZCAkU0hFTEwKK2lmIGV2YWwgIiRNSVNTSU5HIC0tcnVuIHRydWUiOyB0aGVuCisgIGFtX21pc3NpbmdfcnVuPSIkTUlTU0lORyAtLXJ1biAiCitlbHNlCisgIGFtX21pc3NpbmdfcnVuPQorICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBcYG1pc3NpbmcnIHNjcmlwdCBpcyB0b28gb2xkIG9yIG1pc3NpbmciID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiBcYG1pc3NpbmcnIHNjcmlwdCBpcyB0b28gb2xkIG9yIG1pc3NpbmciID4mMjt9CitmaQorCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgYSB0aHJlYWQtc2FmZSBta2RpciAtcCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBhIHRocmVhZC1zYWZlIG1rZGlyIC1wLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAteiAiJE1LRElSX1AiOyB0aGVuCisgIGlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9ta2RpcitzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL29wdC9zZncvYmluCitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgIGZvciBhY19wcm9nIGluIG1rZGlyIGdta2RpcjsgZG8KKwkgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisJICAgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IjsgfSB8fCBjb250aW51ZQorCSAgIGNhc2UgYCIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiAtLXZlcnNpb24gMj4mMWAgaW4gIygKKwkgICAgICdta2RpciAoR05VIGNvcmV1dGlscykgJyogfCBcCisJICAgICAnbWtkaXIgKGNvcmV1dGlscykgJyogfCBcCisJICAgICAnbWtkaXIgKGZpbGV1dGlscykgJzQuMSopCisJICAgICAgIGFjX2N2X3BhdGhfbWtkaXI9JGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dAorCSAgICAgICBicmVhayAzOzsKKwkgICBlc2FjCisJIGRvbmUKKyAgICAgICBkb25lCitkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCisKKyAgaWYgdGVzdCAiJHthY19jdl9wYXRoX21rZGlyK3NldH0iID0gc2V0OyB0aGVuCisgICAgTUtESVJfUD0iJGFjX2N2X3BhdGhfbWtkaXIgLXAiCisgIGVsc2UKKyAgICAjIEFzIGEgbGFzdCByZXNvcnQsIHVzZSB0aGUgc2xvdyBzaGVsbCBzY3JpcHQuICBEb24ndCBjYWNoZSBhCisgICAgIyB2YWx1ZSBmb3IgTUtESVJfUCB3aXRoaW4gYSBzb3VyY2UgZGlyZWN0b3J5LCBiZWNhdXNlIHRoYXQgd2lsbAorICAgICMgYnJlYWsgb3RoZXIgcGFja2FnZXMgdXNpbmcgdGhlIGNhY2hlIGlmIHRoYXQgZGlyZWN0b3J5IGlzCisgICAgIyByZW1vdmVkLCBvciBpZiB0aGUgdmFsdWUgaXMgYSByZWxhdGl2ZSBuYW1lLgorICAgIHRlc3QgLWQgLi8tLXZlcnNpb24gJiYgcm1kaXIgLi8tLXZlcnNpb24KKyAgICBNS0RJUl9QPSIkYWNfaW5zdGFsbF9zaCAtZCIKKyAgZmkKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRNS0RJUl9QIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRNS0RJUl9QIiA+JjY7IH0KKworbWtkaXJfcD0iJE1LRElSX1AiCitjYXNlICRta2Rpcl9wIGluCisgIFtcXC8kXSogfCA/OltcXC9dKikgOzsKKyAgKi8qKSBta2Rpcl9wPSJcJCh0b3BfYnVpbGRkaXIpLyRta2Rpcl9wIiA7OworZXNhYworCitmb3IgYWNfcHJvZyBpbiBnYXdrIG1hd2sgbmF3ayBhd2sKK2RvCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQVdLK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRBV0siOyB0aGVuCisgIGFjX2N2X3Byb2dfQVdLPSIkQVdLIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX0FXSz0iJGFjX3Byb2ciCisgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKK2RvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitBV0s9JGFjX2N2X3Byb2dfQVdLCitpZiB0ZXN0IC1uICIkQVdLIjsgdGhlbgorICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRBV0siID4mNQorZWNobyAiJHtFQ0hPX1R9JEFXSyIgPiY2OyB9CitlbHNlCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorZmkKKworCisgIHRlc3QgLW4gIiRBV0siICYmIGJyZWFrCitkb25lCisKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgJHtNQUtFLW1ha2V9IHNldHMgXCQoTUFLRSkiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyICR7TUFLRS1tYWtlfSBzZXRzIFwkKE1BS0UpLi4uICRFQ0hPX0MiID4mNjsgfQorc2V0IHggJHtNQUtFLW1ha2V9OyBhY19tYWtlPWBlY2hvICIkMiIgfCBzZWQgJ3MvKy9wL2c7IHMvW15hLXpBLVowLTlfXS9fL2cnYAoraWYgeyBhc192YXI9YWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0OyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QubWFrZSA8PFxfQUNFT0YKK1NIRUxMID0gL2Jpbi9zaAorYWxsOgorCUBlY2hvICdAQEAlJSU9JChNQUtFKT1AQEAlJSUnCitfQUNFT0YKKyMgR05VIG1ha2Ugc29tZXRpbWVzIHByaW50cyAibWFrZVsxXTogRW50ZXJpbmcuLi4iLCB3aGljaCB3b3VsZCBjb25mdXNlIHVzLgorY2FzZSBgJHtNQUtFLW1ha2V9IC1mIGNvbmZ0ZXN0Lm1ha2UgMj4vZGV2L251bGxgIGluCisgICpAQEAlJSU9Pyo9QEBAJSUlKikKKyAgICBldmFsIGFjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldD15ZXM7OworICAqKQorICAgIGV2YWwgYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0PW5vOzsKK2VzYWMKK3JtIC1mIGNvbmZ0ZXN0Lm1ha2UKK2ZpCitpZiBldmFsIHRlc3QgXCRhY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQgPSB5ZXM7IHRoZW4KKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjY7IH0KKyAgU0VUX01BS0U9CitlbHNlCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorICBTRVRfTUFLRT0iTUFLRT0ke01BS0UtbWFrZX0iCitmaQorCitybSAtcmYgLnRzdCAyPi9kZXYvbnVsbAorbWtkaXIgLnRzdCAyPi9kZXYvbnVsbAoraWYgdGVzdCAtZCAudHN0OyB0aGVuCisgIGFtX19sZWFkaW5nX2RvdD0uCitlbHNlCisgIGFtX19sZWFkaW5nX2RvdD1fCitmaQorcm1kaXIgLnRzdCAyPi9kZXYvbnVsbAorCitpZiB0ZXN0ICJgY2QgJHNyY2RpciAmJiBwd2RgIiAhPSAiYHB3ZGAiOyB0aGVuCisgICMgVXNlIC1JJChzcmNkaXIpIG9ubHkgd2hlbiAkKHNyY2RpcikgIT0gLiwgc28gdGhhdCBtYWtlJ3Mgb3V0cHV0CisgICMgaXMgbm90IHBvbGx1dGVkIHdpdGggcmVwZWF0ZWQgIi1JLiIKKyAgYW1fX2lzcmM9JyAtSSQoc3JjZGlyKScKKyAgIyB0ZXN0IHRvIHNlZSBpZiBzcmNkaXIgYWxyZWFkeSBjb25maWd1cmVkCisgIGlmIHRlc3QgLWYgJHNyY2Rpci9jb25maWcuc3RhdHVzOyB0aGVuCisgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogc291cmNlIGRpcmVjdG9yeSBhbHJlYWR5IGNvbmZpZ3VyZWQ7IHJ1biBcIm1ha2UgZGlzdGNsZWFuXCIgdGhlcmUgZmlyc3QiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogc291cmNlIGRpcmVjdG9yeSBhbHJlYWR5IGNvbmZpZ3VyZWQ7IHJ1biBcIm1ha2UgZGlzdGNsZWFuXCIgdGhlcmUgZmlyc3QiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgZmkKK2ZpCisKKyMgdGVzdCB3aGV0aGVyIHdlIGhhdmUgY3lncGF0aAoraWYgdGVzdCAteiAiJENZR1BBVEhfVyI7IHRoZW4KKyAgaWYgKGN5Z3BhdGggLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+L2Rldi9udWxsOyB0aGVuCisgICAgQ1lHUEFUSF9XPSdjeWdwYXRoIC13JworICBlbHNlCisgICAgQ1lHUEFUSF9XPWVjaG8KKyAgZmkKK2ZpCisKKworIyBEZWZpbmUgdGhlIGlkZW50aXR5IG9mIHRoZSBwYWNrYWdlLgorIFBBQ0tBR0U9J3BhcnRlZCcKKyBWRVJTSU9OPScxLjguNycKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFBBQ0tBR0UgIiRQQUNLQUdFIgorX0FDRU9GCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBWRVJTSU9OICIkVkVSU0lPTiIKK19BQ0VPRgorCisjIFNvbWUgdG9vbHMgQXV0b21ha2UgbmVlZHMuCisKK0FDTE9DQUw9JHtBQ0xPQ0FMLSIke2FtX21pc3NpbmdfcnVufWFjbG9jYWwtJHthbV9fYXBpX3ZlcnNpb259In0KKworCitBVVRPQ09ORj0ke0FVVE9DT05GLSIke2FtX21pc3NpbmdfcnVufWF1dG9jb25mIn0KKworCitBVVRPTUFLRT0ke0FVVE9NQUtFLSIke2FtX21pc3NpbmdfcnVufWF1dG9tYWtlLSR7YW1fX2FwaV92ZXJzaW9ufSJ9CisKKworQVVUT0hFQURFUj0ke0FVVE9IRUFERVItIiR7YW1fbWlzc2luZ19ydW59YXV0b2hlYWRlciJ9CisKKworTUFLRUlORk89JHtNQUtFSU5GTy0iJHthbV9taXNzaW5nX3J1bn1tYWtlaW5mbyJ9CisKK2luc3RhbGxfc2g9JHtpbnN0YWxsX3NoLSJcJChTSEVMTCkgJGFtX2F1eF9kaXIvaW5zdGFsbC1zaCJ9CisKKyMgSW5zdGFsbGVkIGJpbmFyaWVzIGFyZSB1c3VhbGx5IHN0cmlwcGVkIHVzaW5nIGBzdHJpcCcgd2hlbiB0aGUgdXNlcgorIyBydW4gYG1ha2UgaW5zdGFsbC1zdHJpcCcuICBIb3dldmVyIGBzdHJpcCcgbWlnaHQgbm90IGJlIHRoZSByaWdodAorIyB0b29sIHRvIHVzZSBpbiBjcm9zcy1jb21waWxhdGlvbiBlbnZpcm9ubWVudHMsIHRoZXJlZm9yZSBBdXRvbWFrZQorIyB3aWxsIGhvbm9yIHRoZSBgU1RSSVAnIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIG92ZXJydWxlIHRoaXMgcHJvZ3JhbS4KK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciICE9IG5vOyB0aGVuCisgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXN0cmlwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXN0cmlwOyBhY193b3JkPSQyCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfU1RSSVArc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJFNUUklQIjsgdGhlbgorICBhY19jdl9wcm9nX1NUUklQPSIkU1RSSVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfU1RSSVA9IiR7YWNfdG9vbF9wcmVmaXh9c3RyaXAiCisgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKK2RvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitTVFJJUD0kYWNfY3ZfcHJvZ19TVFJJUAoraWYgdGVzdCAtbiAiJFNUUklQIjsgdGhlbgorICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRTVFJJUCIgPiY1CitlY2hvICIke0VDSE9fVH0kU1RSSVAiID4mNjsgfQorZWxzZQorICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX1NUUklQIjsgdGhlbgorICBhY19jdF9TVFJJUD0kU1RSSVAKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJzdHJpcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgc3RyaXA7IGFjX3dvcmQ9JDIKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9TVFJJUCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfU1RSSVAiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfU1RSSVA9IiRhY19jdF9TVFJJUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9TVFJJUD0ic3RyaXAiCisgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKK2RvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9TVFJJUD0kYWNfY3ZfcHJvZ19hY19jdF9TVFJJUAoraWYgdGVzdCAtbiAiJGFjX2N0X1NUUklQIjsgdGhlbgorICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9TVFJJUCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3RfU1RSSVAiID4mNjsgfQorZWxzZQorICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9TVFJJUCIgPSB4OyB0aGVuCisgICAgU1RSSVA9IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCit3aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCitjb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scword2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcworY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBTVFJJUD0kYWNfY3RfU1RSSVAKKyAgZmkKK2Vsc2UKKyAgU1RSSVA9IiRhY19jdl9wcm9nX1NUUklQIgorZmkKKworZmkKK0lOU1RBTExfU1RSSVBfUFJPR1JBTT0iXCQoaW5zdGFsbF9zaCkgLWMgLXMiCisKKyMgV2UgbmVlZCBhd2sgZm9yIHRoZSAiY2hlY2siIHRhcmdldC4gIFRoZSBzeXN0ZW0gImF3ayIgaXMgYmFkIG9uCisjIHNvbWUgcGxhdGZvcm1zLgorIyBBbHdheXMgZGVmaW5lIEFNVEFSIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorCitBTVRBUj0ke0FNVEFSLSIke2FtX21pc3NpbmdfcnVufXRhciJ9CisKK2FtX190YXI9JyR7QU1UQVJ9IGNob2YgLSAiJCR0YXJkaXIiJzsgYW1fX3VudGFyPScke0FNVEFSfSB4ZiAtJworCisKKworCisKKworIyBNYWtlIHN1cmUgd2UgY2FuIHJ1biBjb25maWcuc3ViLgorJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuc3ViIiBzdW40ID4vZGV2L251bGwgMj4mMSB8fAorICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgcnVuICRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBydW4gJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgYnVpbGQgc3lzdGVtIHR5cGUiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBidWlsZCBzeXN0ZW0gdHlwZS4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfYnVpbGQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgYWNfYnVpbGRfYWxpYXM9JGJ1aWxkX2FsaWFzCit0ZXN0ICJ4JGFjX2J1aWxkX2FsaWFzIiA9IHggJiYKKyAgYWNfYnVpbGRfYWxpYXM9YCRTSEVMTCAiJGFjX2F1eF9kaXIvY29uZmlnLmd1ZXNzImAKK3Rlc3QgIngkYWNfYnVpbGRfYWxpYXMiID0geCAmJgorICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZ3Vlc3MgYnVpbGQgdHlwZTsgeW91IG11c3Qgc3BlY2lmeSBvbmUiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGd1ZXNzIGJ1aWxkIHR5cGU7IHlvdSBtdXN0IHNwZWNpZnkgb25lIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CithY19jdl9idWlsZD1gJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuc3ViIiAkYWNfYnVpbGRfYWxpYXNgIHx8CisgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViICRhY19idWlsZF9hbGlhcyBmYWlsZWQiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIgJGFjX2J1aWxkX2FsaWFzIGZhaWxlZCIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfYnVpbGQiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2J1aWxkIiA+JjY7IH0KK2Nhc2UgJGFjX2N2X2J1aWxkIGluCisqLSotKikgOzsKKyopIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGludmFsaWQgdmFsdWUgb2YgY2Fub25pY2FsIGJ1aWxkIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgdmFsdWUgb2YgY2Fub25pY2FsIGJ1aWxkIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKK2VzYWMKK2J1aWxkPSRhY19jdl9idWlsZAorYWNfc2F2ZV9JRlM9JElGUzsgSUZTPSctJworc2V0IHggJGFjX2N2X2J1aWxkCitzaGlmdAorYnVpbGRfY3B1PSQxCitidWlsZF92ZW5kb3I9JDIKK3NoaWZ0OyBzaGlmdAorIyBSZW1lbWJlciwgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBJRlMgaXMgdXNlZCB0byBjcmVhdGUgJCosCisjIGV4Y2VwdCB3aXRoIG9sZCBzaGVsbHM6CitidWlsZF9vcz0kKgorSUZTPSRhY19zYXZlX0lGUworY2FzZSAkYnVpbGRfb3MgaW4gKlwgKikgYnVpbGRfb3M9YGVjaG8gIiRidWlsZF9vcyIgfCBzZWQgJ3MvIC8tL2cnYDs7IGVzYWMKKworCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBob3N0IHN5c3RlbSB0eXBlIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaG9zdCBzeXN0ZW0gdHlwZS4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfaG9zdCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0ICJ4JGhvc3RfYWxpYXMiID0geDsgdGhlbgorICBhY19jdl9ob3N0PSRhY19jdl9idWlsZAorZWxzZQorICBhY19jdl9ob3N0PWAkU0hFTEwgIiRhY19hdXhfZGlyL2NvbmZpZy5zdWIiICRob3N0X2FsaWFzYCB8fAorICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViICRob3N0X2FsaWFzIGZhaWxlZCIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiAkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiAkaG9zdF9hbGlhcyBmYWlsZWQiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2ZpCisKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9ob3N0IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9ob3N0IiA+JjY7IH0KK2Nhc2UgJGFjX2N2X2hvc3QgaW4KKyotKi0qKSA7OworKikgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogaW52YWxpZCB2YWx1ZSBvZiBjYW5vbmljYWwgaG9zdCIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBpbnZhbGlkIHZhbHVlIG9mIGNhbm9uaWNhbCBob3N0IiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKK2VzYWMKK2hvc3Q9JGFjX2N2X2hvc3QKK2FjX3NhdmVfSUZTPSRJRlM7IElGUz0nLScKK3NldCB4ICRhY19jdl9ob3N0CitzaGlmdAoraG9zdF9jcHU9JDEKK2hvc3RfdmVuZG9yPSQyCitzaGlmdDsgc2hpZnQKKyMgUmVtZW1iZXIsIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgSUZTIGlzIHVzZWQgdG8gY3JlYXRlICQqLAorIyBleGNlcHQgd2l0aCBvbGQgc2hlbGxzOgoraG9zdF9vcz0kKgorSUZTPSRhY19zYXZlX0lGUworY2FzZSAkaG9zdF9vcyBpbiAqXCAqKSBob3N0X29zPWBlY2hvICIkaG9zdF9vcyIgfCBzZWQgJ3MvIC8tL2cnYDs7IGVzYWMKKworCitjYXNlICIkaG9zdF9vcyIgaW4KKwlsaW51eCopIE9TPWxpbnV4IDs7CisJZ251KikJT1M9Z251IDs7CisJYmVvcyopCU9TPWJlb3MgOzsKKwkqKQl7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBVbmtub3duIG9yIHVuc3VwcG9ydGVkIE9TIFwiJGhvc3Rfb3NcIi4gIE9ubHkgXCJsaW51eFwiLCBcImdudVwiIGFuZCBcImJlb3NcIiBhcmUgc3VwcG9ydGVkIGluIHRoaXMgdmVyc2lvbiBvZiBHTlUgUGFydGVkLiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBVbmtub3duIG9yIHVuc3VwcG9ydGVkIE9TIFwiJGhvc3Rfb3NcIi4gIE9ubHkgXCJsaW51eFwiLCBcImdudVwiIGFuZCBcImJlb3NcIiBhcmUgc3VwcG9ydGVkIGluIHRoaXMgdmVyc2lvbiBvZiBHTlUgUGFydGVkLiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfSA7OworZXNhYworCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1yZWFkbGluZSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfcmVhZGxpbmUrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0kd2l0aF9yZWFkbGluZTsKK2Vsc2UKKyAgd2l0aF9yZWFkbGluZT15ZXMKKworZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbXRyYWNlIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX210cmFjZStzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9JGVuYWJsZV9tdHJhY2U7CitlbHNlCisgIGVuYWJsZV9tdHJhY2U9bm8KKworZmkKKworaWYgdGVzdCAiJGVuYWJsZV9tdHJhY2UiID0geWVzOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIEVOQUJMRV9NVFJBQ0UgMQorX0FDRU9GCisKK2ZpCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1kZXZpY2UtbWFwcGVyIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2RldmljZV9tYXBwZXIrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSRlbmFibGVfZGV2aWNlX21hcHBlcjsKK2Vsc2UKKyAgZW5hYmxlX2RldmljZV9tYXBwZXI9bm8KKworZmkKKworaWYgdGVzdCAiJGVuYWJsZV9kZXZpY2VfbWFwcGVyIiA9IHllczsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBFTkFCTEVfREVWSUNFX01BUFBFUiAxCitfQUNFT0YKKworZmkKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXNlbGludXggd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfc2VsaW51eCtzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9JGVuYWJsZV9zZWxpbnV4OworZWxzZQorICBlbmFibGVfc2VsaW51eD1ubworCitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1kaXNjb3Zlci1vbmx5IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2Rpc2NvdmVyX29ubHkrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSRlbmFibGVfZGlzY292ZXJfb25seTsKK2Vsc2UKKyAgZW5hYmxlX2Rpc2NvdmVyX29ubHk9bm8KKworZmkKKworaWYgdGVzdCAiJGVuYWJsZV9kaXNjb3Zlcl9vbmx5IiA9IHllczsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBESVNDT1ZFUl9PTkxZIDEKK19BQ0VPRgorCitmaQorCitQQVJURURfTElCUz0iIgorIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWR5bmFtaWMtbG9hZGluZyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9keW5hbWljX2xvYWRpbmcrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSRlbmFibGVfZHluYW1pY19sb2FkaW5nOworZWxzZQorICBpZiB0ZXN0ICIkZW5hYmxlX2Rpc2NvdmVyX29ubHkiID0geWVzOyB0aGVuCisJCWVuYWJsZV9keW5hbWljX2xvYWRpbmc9bm8KKwllbHNlCisJCWVuYWJsZV9keW5hbWljX2xvYWRpbmc9eWVzCisJZmkKKworZmkKKworaWYgdGVzdCAiJGVuYWJsZV9kaXNjb3Zlcl9vbmx5IiA9IHllcyAtYSAiJGVuYWJsZV9keW5hbWljX2xvYWRpbmciID0geWVzOyB0aGVuCisJeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogWW91IGNhbid0IHVzZSAtLWVuYWJsZS1keW5hbWljLWxvYWRpbmcgYW5kIC0tZGlzYWJsZS1kaXNjb3Zlci1vbmx5IHRvZ2V0aGVyCisJIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IFlvdSBjYW4ndCB1c2UgLS1lbmFibGUtZHluYW1pYy1sb2FkaW5nIGFuZCAtLWRpc2FibGUtZGlzY292ZXItb25seSB0b2dldGhlcgorCSIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorZmkKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWZzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2ZzK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0kZW5hYmxlX2ZzOworZWxzZQorICBlbmFibGVfZnM9eWVzCisKK2ZpCisKK2lmIHRlc3QgIiRlbmFibGVfZnMiID0geWVzOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIEVOQUJMRV9GUyAxCitfQUNFT0YKKworZmkKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRlYnVnIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2RlYnVnK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0kZW5hYmxlX2RlYnVnOworZWxzZQorICBlbmFibGVfZGVidWc9eWVzCisKK2ZpCisKKworaWYgdGVzdCAiJGVuYWJsZV9kZWJ1ZyIgPSB5ZXM7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgREVCVUcgMQorX0FDRU9GCisKK2ZpCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1yZWFkLW9ubHkgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfcmVhZF9vbmx5K3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0kZW5hYmxlX3JlYWRfb25seTsKK2Vsc2UKKyAgZW5hYmxlX3JlYWRfb25seT1ubworCitmaQorCitpZiB0ZXN0ICIkZW5hYmxlX3JlYWRfb25seSIgPSB5ZXM7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgUkVBRF9PTkxZIDEKK19BQ0VPRgorCitmaQorCitQQVJURURMREZMQUdTPQorCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1wYzk4IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3BjOTgrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSRlbmFibGVfcGM5ODsKK2Vsc2UKKyAgZW5hYmxlX3BjOTg9eWVzCisKK2ZpCisKK2lmIHRlc3QgIiRlbmFibGVfcGM5OCIgPSB5ZXM7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgRU5BQkxFX1BDOTggMQorX0FDRU9GCisKK2ZpCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1XZXJyb3Igd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfV2Vycm9yK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0kZW5hYmxlX1dlcnJvcjsKK2Vsc2UKKyAgZW5hYmxlX1dlcnJvcj15ZXMKKworZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtaGZzLWV4dHJhY3QtZnMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfaGZzX2V4dHJhY3RfZnMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSRlbmFibGVfaGZzX2V4dHJhY3RfZnM7CitlbHNlCisgIGVuYWJsZV9oZnNfZXh0cmFjdF9mcz1ubworCitmaQorCitpZiB0ZXN0ICIkZW5hYmxlX2hmc19leHRyYWN0X2ZzIiA9IHllczsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBIRlNfRVhUUkFDVF9GUyAxCitfQUNFT0YKKworZmkKKworQU1fQ1BQRkxBR1M9IiRBTV9DUFBGTEFHUyAtRF9SRUVOVFJBTlQiCisKK0RFUERJUj0iJHthbV9fbGVhZGluZ19kb3R9ZGVwcyIKKworYWNfY29uZmlnX2NvbW1hbmRzPSIkYWNfY29uZmlnX2NvbW1hbmRzIGRlcGZpbGVzIgorCisKK2FtX21ha2U9JHtNQUtFLW1ha2V9CitjYXQgPiBjb25maW5jIDw8ICdFTkQnCithbV9fZG9pdDoKKwlAZWNobyBkb25lCisuUEhPTlk6IGFtX19kb2l0CitFTkQKKyMgSWYgd2UgZG9uJ3QgZmluZCBhbiBpbmNsdWRlIGRpcmVjdGl2ZSwganVzdCBjb21tZW50IG91dCB0aGUgY29kZS4KK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdHlsZSBvZiBpbmNsdWRlIHVzZWQgYnkgJGFtX21ha2UiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3R5bGUgb2YgaW5jbHVkZSB1c2VkIGJ5ICRhbV9tYWtlLi4uICRFQ0hPX0MiID4mNjsgfQorYW1fX2luY2x1ZGU9IiMiCithbV9fcXVvdGU9CitfYW1fcmVzdWx0PW5vbmUKKyMgRmlyc3QgdHJ5IEdOVSBtYWtlIHN0eWxlIGluY2x1ZGUuCitlY2hvICJpbmNsdWRlIGNvbmZpbmMiID4gY29uZm1mCisjIFdlIGdyZXAgb3V0IGBFbnRlcmluZyBkaXJlY3RvcnknIGFuZCBgTGVhdmluZyBkaXJlY3RvcnknCisjIG1lc3NhZ2VzIHdoaWNoIGNhbiBvY2N1ciBpZiBgdycgZW5kcyB1cCBpbiBNQUtFRkxBR1MuCisjIEluIHBhcnRpY3VsYXIgd2UgZG9uJ3QgbG9vayBhdCBgXm1ha2U6JyBiZWNhdXNlIEdOVSBtYWtlIG1pZ2h0CisjIGJlIGludm9rZWQgdW5kZXIgc29tZSBvdGhlciBuYW1lICh1c3VhbGx5ICJnbWFrZSIpLCBpbiB3aGljaAorIyBjYXNlIGl0IHByaW50cyBpdHMgbmV3IG5hbWUgaW5zdGVhZCBvZiBgbWFrZScuCitpZiB0ZXN0ICJgJGFtX21ha2UgLXMgLWYgY29uZm1mIDI+IC9kZXYvbnVsbCB8IGdyZXAgLXYgJ2luZyBkaXJlY3RvcnknYCIgPSAiZG9uZSI7IHRoZW4KKyAgIGFtX19pbmNsdWRlPWluY2x1ZGUKKyAgIGFtX19xdW90ZT0KKyAgIF9hbV9yZXN1bHQ9R05VCitmaQorIyBOb3cgdHJ5IEJTRCBtYWtlIHN0eWxlIGluY2x1ZGUuCitpZiB0ZXN0ICIkYW1fX2luY2x1ZGUiID0gIiMiOyB0aGVuCisgICBlY2hvICcuaW5jbHVkZSAiY29uZmluYyInID4gY29uZm1mCisgICBpZiB0ZXN0ICJgJGFtX21ha2UgLXMgLWYgY29uZm1mIDI+IC9kZXYvbnVsbGAiID0gImRvbmUiOyB0aGVuCisgICAgICBhbV9faW5jbHVkZT0uaW5jbHVkZQorICAgICAgYW1fX3F1b3RlPSJcIiIKKyAgICAgIF9hbV9yZXN1bHQ9QlNECisgICBmaQorZmkKKworCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRfYW1fcmVzdWx0IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRfYW1fcmVzdWx0IiA+JjY7IH0KK3JtIC1mIGNvbmZpbmMgY29uZm1mCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmcrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZzsKK2ZpCisKK2lmIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubzsgdGhlbgorICBhbV9kZXBjb21wPSIkYWNfYXV4X2Rpci9kZXBjb21wIgorICBBTURFUEJBQ0tTTEFTSD0nXCcKK2ZpCisgaWYgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgIT0geG5vOyB0aGVuCisgIEFNREVQX1RSVUU9CisgIEFNREVQX0ZBTFNFPScjJworZWxzZQorICBBTURFUF9UUlVFPScjJworICBBTURFUF9GQUxTRT0KK2ZpCisKKworYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQoraWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9Z2NjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWdjYzsgYWNfd29yZD0kMgoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX0NDPSIke2FjX3Rvb2xfcHJlZml4fWdjYyIKKyAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0NDPSRhY19jdl9wcm9nX0NDCitpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENDIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRDQyIgPiY2OyB9CitlbHNlCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfQ0MiOyB0aGVuCisgIGFjX2N0X0NDPSRDQworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImdjYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgZ2NjOyBhY193b3JkPSQyCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfY3RfQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9ImdjYyIKKyAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0NDPSRhY19jdl9wcm9nX2FjX2N0X0NDCitpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X0NDIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdF9DQyIgPiY2OyB9CitlbHNlCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0NDIiA9IHg7IHRoZW4KKyAgICBDQz0iIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scword2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcworY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKK3dob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKK2NvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgQ0M9JGFjX2N0X0NDCisgIGZpCitlbHNlCisgIENDPSIkYWNfY3ZfcHJvZ19DQyIKK2ZpCisKK2lmIHRlc3QgLXogIiRDQyI7IHRoZW4KKyAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWNjOyBhY193b3JkPSQyCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfQ0M9IiR7YWNfdG9vbF9wcmVmaXh9Y2MiCisgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKK2RvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitDQz0kYWNfY3ZfcHJvZ19DQworaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDQyIgPiY1CitlY2hvICIke0VDSE9fVH0kQ0MiID4mNjsgfQorZWxzZQorICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KK2ZpCisKKworICBmaQorZmkKK2lmIHRlc3QgLXogIiRDQyI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJjYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgY2M7IGFjX3dvcmQ9JDIKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DQytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCisgIGFjX3Byb2dfcmVqZWN0ZWQ9bm8KK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBpZiB0ZXN0ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA9ICIvdXNyL3VjYi9jYyI7IHRoZW4KKyAgICAgICBhY19wcm9nX3JlamVjdGVkPXllcworICAgICAgIGNvbnRpbnVlCisgICAgIGZpCisgICAgYWNfY3ZfcHJvZ19DQz0iY2MiCisgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKK2RvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworaWYgdGVzdCAkYWNfcHJvZ19yZWplY3RlZCA9IHllczsgdGhlbgorICAjIFdlIGZvdW5kIGEgYm9nb24gaW4gdGhlIHBhdGgsIHNvIG1ha2Ugc3VyZSB3ZSBuZXZlciB1c2UgaXQuCisgIHNldCBkdW1teSAkYWNfY3ZfcHJvZ19DQworICBzaGlmdAorICBpZiB0ZXN0ICQjICE9IDA7IHRoZW4KKyAgICAjIFdlIGNob3NlIGEgZGlmZmVyZW50IGNvbXBpbGVyIGZyb20gdGhlIGJvZ3VzIG9uZS4KKyAgICAjIEhvd2V2ZXIsIGl0IGhhcyB0aGUgc2FtZSBiYXNlbmFtZSwgc28gdGhlIGJvZ29uIHdpbGwgYmUgY2hvc2VuCisgICAgIyBmaXJzdCBpZiB3ZSBzZXQgQ0MgdG8ganVzdCB0aGUgYmFzZW5hbWU7IHVzZSB0aGUgZnVsbCBmaWxlIG5hbWUuCisgICAgc2hpZnQKKyAgICBhY19jdl9wcm9nX0NDPSIkYXNfZGlyLyRhY193b3JkJHsxKycgJ30kQCIKKyAgZmkKK2ZpCitmaQorZmkKK0NDPSRhY19jdl9wcm9nX0NDCitpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENDIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRDQyIgPiY2OyB9CitlbHNlCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJENDIjsgdGhlbgorICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgIGZvciBhY19wcm9nIGluIGNsLmV4ZQorICBkbworICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfQ0M9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgorICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCitkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorQ0M9JGFjX2N2X3Byb2dfQ0MKK2lmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQ0MiID4mNQorZWNobyAiJHtFQ0hPX1R9JENDIiA+JjY7IH0KK2Vsc2UKKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CitmaQorCisKKyAgICB0ZXN0IC1uICIkQ0MiICYmIGJyZWFrCisgIGRvbmUKK2ZpCitpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCisgIGFjX2N0X0NDPSRDQworICBmb3IgYWNfcHJvZyBpbiBjbC5leGUKK2RvCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfY3RfQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19wcm9nIgorICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCitkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfQ0M9JGFjX2N2X3Byb2dfYWNfY3RfQ0MKK2lmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfQ0MiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N0X0NDIiA+JjY7IH0KK2Vsc2UKKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CitmaQorCisKKyAgdGVzdCAtbiAiJGFjX2N0X0NDIiAmJiBicmVhaworZG9uZQorCisgIGlmIHRlc3QgIngkYWNfY3RfQ0MiID0geDsgdGhlbgorICAgIENDPSIiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCit3aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCitjb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scword2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcworY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBDQz0kYWNfY3RfQ0MKKyAgZmkKK2ZpCisKK2ZpCisKKwordGVzdCAteiAiJENDIiAmJiB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBubyBhY2NlcHRhYmxlIEMgY29tcGlsZXIgZm91bmQgaW4gXCRQQVRICitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBubyBhY2NlcHRhYmxlIEMgY29tcGlsZXIgZm91bmQgaW4gXCRQQVRICitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorCisjIFByb3ZpZGUgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29tcGlsZXIuCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgdmVyc2lvbiIgPiY1CithY19jb21waWxlcj1gc2V0IFggJGFjX2NvbXBpbGU7IGVjaG8gJDJgCit7IChhY190cnk9IiRhY19jb21waWxlciAtLXZlcnNpb24gPiY1IgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGVyIC0tdmVyc2lvbiA+JjUiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9Cit7IChhY190cnk9IiRhY19jb21waWxlciAtdiA+JjUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZXIgLXYgPiY1IikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfQoreyAoYWNfdHJ5PSIkYWNfY29tcGlsZXIgLVYgPiY1IgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGVyIC1WID4mNSIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KKworY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2FjX2NsZWFuX2ZpbGVzX3NhdmU9JGFjX2NsZWFuX2ZpbGVzCithY19jbGVhbl9maWxlcz0iJGFjX2NsZWFuX2ZpbGVzIGEub3V0IGEuZXhlIGIub3V0IgorIyBUcnkgdG8gY3JlYXRlIGFuIGV4ZWN1dGFibGUgd2l0aG91dCAtbyBmaXJzdCwgZGlzcmVnYXJkIGEub3V0LgorIyBJdCB3aWxsIGhlbHAgdXMgZGlhZ25vc2UgYnJva2VuIGNvbXBpbGVycywgYW5kIGZpbmRpbmcgb3V0IGFuIGludHVpdGlvbgorIyBvZiBleGVleHQuCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgQyBjb21waWxlciBkZWZhdWx0IG91dHB1dCBmaWxlIG5hbWUiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgQyBjb21waWxlciBkZWZhdWx0IG91dHB1dCBmaWxlIG5hbWUuLi4gJEVDSE9fQyIgPiY2OyB9CithY19saW5rX2RlZmF1bHQ9YGVjaG8gIiRhY19saW5rIiB8IHNlZCAncy8gLW8gKmNvbmZ0ZXN0W14gXSovLydgCisjCisjIExpc3Qgb2YgcG9zc2libGUgb3V0cHV0IGZpbGVzLCBzdGFydGluZyBmcm9tIHRoZSBtb3N0IGxpa2VseS4KKyMgVGhlIGFsZ29yaXRobSBpcyBub3Qgcm9idXN0IHRvIGp1bmsgaW4gYC4nLCBoZW5jZSBnbyB0byB3aWxkY2FyZHMgKGEuKikKKyMgb25seSBhcyBhIGxhc3QgcmVzb3J0LiAgYi5vdXQgaXMgY3JlYXRlZCBieSBpOTYwIGNvbXBpbGVycy4KK2FjX2ZpbGVzPSdhX291dC5leGUgYS5leGUgY29uZnRlc3QuZXhlIGEub3V0IGNvbmZ0ZXN0IGEuKiBjb25mdGVzdC4qIGIub3V0JworIworIyBUaGUgSVJJWCA2IGxpbmtlciB3cml0ZXMgaW50byBleGlzdGluZyBmaWxlcyB3aGljaCBtYXkgbm90IGJlCisjIGV4ZWN1dGFibGUsIHJldGFpbmluZyB0aGVpciBwZXJtaXNzaW9ucy4gIFJlbW92ZSB0aGVtIGZpcnN0IHNvIGEKKyMgc3Vic2VxdWVudCBleGVjdXRpb24gdGVzdCB3b3Jrcy4KK2FjX3JtZmlsZXM9Citmb3IgYWNfZmlsZSBpbiAkYWNfZmlsZXMKK2RvCisgIGNhc2UgJGFjX2ZpbGUgaW4KKyAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubWFwIHwgKi5pbmYgfCAqLm8gfCAqLm9iaiApIDs7CisgICAgKiApIGFjX3JtZmlsZXM9IiRhY19ybWZpbGVzICRhY19maWxlIjs7CisgIGVzYWMKK2RvbmUKK3JtIC1mICRhY19ybWZpbGVzCisKK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmtfZGVmYXVsdCIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19saW5rX2RlZmF1bHQiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB0aGVuCisgICMgQXV0b2NvbmYtMi4xMyBjb3VsZCBzZXQgdGhlIGFjX2N2X2V4ZWV4dCB2YXJpYWJsZSB0byBgbm8nLgorIyBTbyBpZ25vcmUgYSB2YWx1ZSBvZiBgbm8nLCBvdGhlcndpc2UgdGhpcyB3b3VsZCBsZWFkIHRvIGBFWEVFWFQgPSBubycKKyMgaW4gYSBNYWtlZmlsZS4gIFdlIHNob3VsZCBub3Qgb3ZlcnJpZGUgYWNfY3ZfZXhlZXh0IGlmIGl0IHdhcyBjYWNoZWQsCisjIHNvIHRoYXQgdGhlIHVzZXIgY2FuIHNob3J0LWNpcmN1aXQgdGhpcyB0ZXN0IGZvciBjb21waWxlcnMgdW5rbm93biB0bworIyBBdXRvY29uZi4KK2ZvciBhY19maWxlIGluICRhY19maWxlcyAnJworZG8KKyAgdGVzdCAtZiAiJGFjX2ZpbGUiIHx8IGNvbnRpbnVlCisgIGNhc2UgJGFjX2ZpbGUgaW4KKyAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubWFwIHwgKi5pbmYgfCAqLm8gfCAqLm9iaiApCisJOzsKKyAgICBbYWJdLm91dCApCisJIyBXZSBmb3VuZCB0aGUgZGVmYXVsdCBleGVjdXRhYmxlLCBidXQgZXhlZXh0PScnIGlzIG1vc3QKKwkjIGNlcnRhaW5seSByaWdodC4KKwlicmVhazs7CisgICAgKi4qICkKKyAgICAgICAgaWYgdGVzdCAiJHthY19jdl9leGVleHQrc2V0fSIgPSBzZXQgJiYgdGVzdCAiJGFjX2N2X2V4ZWV4dCIgIT0gbm87CisJdGhlbiA6OyBlbHNlCisJICAgYWNfY3ZfZXhlZXh0PWBleHByICIkYWNfZmlsZSIgOiAnW14uXSpcKFwuLipcKSdgCisJZmkKKwkjIFdlIHNldCBhY19jdl9leGVleHQgaGVyZSBiZWNhdXNlIHRoZSBsYXRlciB0ZXN0IGZvciBpdCBpcyBub3QKKwkjIHNhZmU6IGNyb3NzIGNvbXBpbGVycyBtYXkgbm90IGFkZCB0aGUgc3VmZml4IGlmIGdpdmVuIGFuIGAtbycKKwkjIGFyZ3VtZW50LCBzbyB3ZSBtYXkgbmVlZCB0byBrbm93IGl0IGF0IHRoYXQgcG9pbnQgYWxyZWFkeS4KKwkjIEV2ZW4gaWYgdGhpcyBzZWN0aW9uIGxvb2tzIGNydWZ0eTogaXQgaGFzIHRoZSBhZHZhbnRhZ2Ugb2YKKwkjIGFjdHVhbGx5IHdvcmtpbmcuCisJYnJlYWs7OworICAgICogKQorCWJyZWFrOzsKKyAgZXNhYworZG9uZQordGVzdCAiJGFjX2N2X2V4ZWV4dCIgPSBubyAmJiBhY19jdl9leGVleHQ9CisKK2Vsc2UKKyAgYWNfZmlsZT0nJworZmkKKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfZmlsZSIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfZmlsZSIgPiY2OyB9CitpZiB0ZXN0IC16ICIkYWNfZmlsZSI7IHRoZW4KKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogQyBjb21waWxlciBjYW5ub3QgY3JlYXRlIGV4ZWN1dGFibGVzCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBDIGNvbXBpbGVyIGNhbm5vdCBjcmVhdGUgZXhlY3V0YWJsZXMKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQorICAgeyAoZXhpdCA3Nyk7IGV4aXQgNzc7IH07IH0KK2ZpCisKK2FjX2V4ZWV4dD0kYWNfY3ZfZXhlZXh0CisKKyMgQ2hlY2sgdGhhdCB0aGUgY29tcGlsZXIgcHJvZHVjZXMgZXhlY3V0YWJsZXMgd2UgY2FuIHJ1bi4gIElmIG5vdCwgZWl0aGVyCisjIHRoZSBjb21waWxlciBpcyBicm9rZW4sIG9yIHdlIGNyb3NzIGNvbXBpbGUuCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIHdvcmtzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciB3b3Jrcy4uLiAkRUNIT19DIiA+JjY7IH0KKyMgRklYTUU6IFRoZXNlIGNyb3NzIGNvbXBpbGVyIGhhY2tzIHNob3VsZCBiZSByZW1vdmVkIGZvciBBdXRvY29uZiAzLjAKKyMgSWYgbm90IGNyb3NzIGNvbXBpbGluZywgY2hlY2sgdGhhdCB3ZSBjYW4gcnVuIGEgc2ltcGxlIHByb2dyYW0uCitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiAhPSB5ZXM7IHRoZW4KKyAgaWYgeyBhY190cnk9Jy4vJGFjX2ZpbGUnCisgIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY190cnkiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgICAgY3Jvc3NfY29tcGlsaW5nPW5vCisgIGVsc2UKKyAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IG1heWJlOyB0aGVuCisJY3Jvc3NfY29tcGlsaW5nPXllcworICAgIGVsc2UKKwl7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgcnVuIEMgY29tcGlsZWQgcHJvZ3JhbXMuCitJZiB5b3UgbWVhbnQgdG8gY3Jvc3MgY29tcGlsZSwgdXNlIFxgLS1ob3N0Jy4KK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBydW4gQyBjb21waWxlZCBwcm9ncmFtcy4KK0lmIHlvdSBtZWFudCB0byBjcm9zcyBjb21waWxlLCB1c2UgXGAtLWhvc3QnLgorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICBmaQorICBmaQorZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKK2VjaG8gIiR7RUNIT19UfXllcyIgPiY2OyB9CisKK3JtIC1mIGEub3V0IGEuZXhlIGNvbmZ0ZXN0JGFjX2N2X2V4ZWV4dCBiLm91dAorYWNfY2xlYW5fZmlsZXM9JGFjX2NsZWFuX2ZpbGVzX3NhdmUKKyMgQ2hlY2sgdGhhdCB0aGUgY29tcGlsZXIgcHJvZHVjZXMgZXhlY3V0YWJsZXMgd2UgY2FuIHJ1bi4gIElmIG5vdCwgZWl0aGVyCisjIHRoZSBjb21waWxlciBpcyBicm9rZW4sIG9yIHdlIGNyb3NzIGNvbXBpbGUuCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSBjcm9zcyBjb21waWxpbmciID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSBjcm9zcyBjb21waWxpbmcuLi4gJEVDSE9fQyIgPiY2OyB9Cit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRjcm9zc19jb21waWxpbmciID4mNQorZWNobyAiJHtFQ0hPX1R9JGNyb3NzX2NvbXBpbGluZyIgPiY2OyB9CisKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdWZmaXggb2YgZXhlY3V0YWJsZXMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3VmZml4IG9mIGV4ZWN1dGFibGVzLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgorICAjIElmIGJvdGggYGNvbmZ0ZXN0LmV4ZScgYW5kIGBjb25mdGVzdCcgYXJlIGBwcmVzZW50JyAod2VsbCwgb2JzZXJ2YWJsZSkKKyMgY2F0Y2ggYGNvbmZ0ZXN0LmV4ZScuICBGb3IgaW5zdGFuY2Ugd2l0aCBDeWd3aW4sIGBscyBjb25mdGVzdCcgd2lsbAorIyB3b3JrIHByb3Blcmx5IChpLmUuLCByZWZlciB0byBgY29uZnRlc3QuZXhlJyksIHdoaWxlIGl0IHdvbid0IHdpdGgKKyMgYHJtJy4KK2ZvciBhY19maWxlIGluIGNvbmZ0ZXN0LmV4ZSBjb25mdGVzdCBjb25mdGVzdC4qOyBkbworICB0ZXN0IC1mICIkYWNfZmlsZSIgfHwgY29udGludWUKKyAgY2FzZSAkYWNfZmlsZSBpbgorICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5tYXAgfCAqLmluZiB8ICoubyB8ICoub2JqICkgOzsKKyAgICAqLiogKSBhY19jdl9leGVleHQ9YGV4cHIgIiRhY19maWxlIiA6ICdbXi5dKlwoXC4uKlwpJ2AKKwkgIGJyZWFrOzsKKyAgICAqICkgYnJlYWs7OworICBlc2FjCitkb25lCitlbHNlCisgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHN1ZmZpeCBvZiBleGVjdXRhYmxlczogY2Fubm90IGNvbXBpbGUgYW5kIGxpbmsKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHN1ZmZpeCBvZiBleGVjdXRhYmxlczogY2Fubm90IGNvbXBpbGUgYW5kIGxpbmsKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitmaQorCitybSAtZiBjb25mdGVzdCRhY19jdl9leGVleHQKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2V4ZWV4dCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfZXhlZXh0IiA+JjY7IH0KKworcm0gLWYgY29uZnRlc3QuJGFjX2V4dAorRVhFRVhUPSRhY19jdl9leGVleHQKK2FjX2V4ZWV4dD0kRVhFRVhUCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3VmZml4IG9mIG9iamVjdCBmaWxlcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9vYmpleHQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0Lm8gY29uZnRlc3Qub2JqCitpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB0aGVuCisgIGZvciBhY19maWxlIGluIGNvbmZ0ZXN0Lm8gY29uZnRlc3Qub2JqIGNvbmZ0ZXN0Lio7IGRvCisgIHRlc3QgLWYgIiRhY19maWxlIiB8fCBjb250aW51ZTsKKyAgY2FzZSAkYWNfZmlsZSBpbgorICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5tYXAgfCAqLmluZiApIDs7CisgICAgKikgYWNfY3Zfb2JqZXh0PWBleHByICIkYWNfZmlsZSIgOiAnLipcLlwoLipcKSdgCisgICAgICAgYnJlYWs7OworICBlc2FjCitkb25lCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK3sgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHN1ZmZpeCBvZiBvYmplY3QgZmlsZXM6IGNhbm5vdCBjb21waWxlCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzOiBjYW5ub3QgY29tcGlsZQorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2ZpCisKK3JtIC1mIGNvbmZ0ZXN0LiRhY19jdl9vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X29iamV4dCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3Zfb2JqZXh0IiA+JjY7IH0KK09CSkVYVD0kYWNfY3Zfb2JqZXh0CithY19vYmpleHQ9JE9CSkVYVAoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIGNvbXBpbGVyIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIGNvbXBpbGVyLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9jX2NvbXBpbGVyX2dudStzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisjaWZuZGVmIF9fR05VQ19fCisgICAgICAgY2hva2UgbWUKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgYWNfY29tcGlsZXJfZ251PXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfY29tcGlsZXJfZ251PW5vCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2FjX2N2X2NfY29tcGlsZXJfZ251PSRhY19jb21waWxlcl9nbnUKKworZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9jX2NvbXBpbGVyX2dudSIgPiY2OyB9CitHQ0M9YHRlc3QgJGFjX2NvbXBpbGVyX2dudSA9IHllcyAmJiBlY2hvIHllc2AKK2FjX3Rlc3RfQ0ZMQUdTPSR7Q0ZMQUdTK3NldH0KK2FjX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLWciID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1nLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2NjX2crc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgYWNfc2F2ZV9jX3dlcnJvcl9mbGFnPSRhY19jX3dlcnJvcl9mbGFnCisgICBhY19jX3dlcnJvcl9mbGFnPXllcworICAgYWNfY3ZfcHJvZ19jY19nPW5vCisgICBDRkxBR1M9Ii1nIgorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgYWNfY3ZfcHJvZ19jY19nPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJQ0ZMQUdTPSIiCisgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICA6CitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19jX3dlcnJvcl9mbGFnPSRhY19zYXZlX2Nfd2Vycm9yX2ZsYWcKKwkgQ0ZMQUdTPSItZyIKKwkgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgYWNfY3ZfcHJvZ19jY19nPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisKK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGFjX2Nfd2Vycm9yX2ZsYWc9JGFjX3NhdmVfY193ZXJyb3JfZmxhZworZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3Byb2dfY2NfZyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfcHJvZ19jY19nIiA+JjY7IH0KK2lmIHRlc3QgIiRhY190ZXN0X0NGTEFHUyIgPSBzZXQ7IHRoZW4KKyAgQ0ZMQUdTPSRhY19zYXZlX0NGTEFHUworZWxpZiB0ZXN0ICRhY19jdl9wcm9nX2NjX2cgPSB5ZXM7IHRoZW4KKyAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICBDRkxBR1M9Ii1nIC1PMiIKKyAgZWxzZQorICAgIENGTEFHUz0iLWciCisgIGZpCitlbHNlCisgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgQ0ZMQUdTPSItTzIiCisgIGVsc2UKKyAgICBDRkxBR1M9CisgIGZpCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBDODkiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQgSVNPIEM4OS4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19jY19jODkrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgYWNfY3ZfcHJvZ19jY19jODk9bm8KK2FjX3NhdmVfQ0M9JENDCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisvKiBNb3N0IG9mIHRoZSBmb2xsb3dpbmcgdGVzdHMgYXJlIHN0b2xlbiBmcm9tIFJDUyA1LjcncyBzcmMvY29uZi5zaC4gICovCitzdHJ1Y3QgYnVmIHsgaW50IHg7IH07CitGSUxFICogKCpyY3NvcGVuKSAoc3RydWN0IGJ1ZiAqLCBzdHJ1Y3Qgc3RhdCAqLCBpbnQpOworc3RhdGljIGNoYXIgKmUgKHAsIGkpCisgICAgIGNoYXIgKipwOworICAgICBpbnQgaTsKK3sKKyAgcmV0dXJuIHBbaV07Cit9CitzdGF0aWMgY2hhciAqZiAoY2hhciAqICgqZykgKGNoYXIgKiosIGludCksIGNoYXIgKipwLCAuLi4pCit7CisgIGNoYXIgKnM7CisgIHZhX2xpc3QgdjsKKyAgdmFfc3RhcnQgKHYscCk7CisgIHMgPSBnIChwLCB2YV9hcmcgKHYsaW50KSk7CisgIHZhX2VuZCAodik7CisgIHJldHVybiBzOworfQorCisvKiBPU0YgNC4wIENvbXBhcSBjYyBpcyBzb21lIHNvcnQgb2YgYWxtb3N0LUFOU0kgYnkgZGVmYXVsdC4gIEl0IGhhcworICAgZnVuY3Rpb24gcHJvdG90eXBlcyBhbmQgc3R1ZmYsIGJ1dCBub3QgJ1x4SEgnIGhleCBjaGFyYWN0ZXIgY29uc3RhbnRzLgorICAgVGhlc2UgZG9uJ3QgcHJvdm9rZSBhbiBlcnJvciB1bmZvcnR1bmF0ZWx5LCBpbnN0ZWFkIGFyZSBzaWxlbnRseSB0cmVhdGVkCisgICBhcyAneCcuICBUaGUgZm9sbG93aW5nIGluZHVjZXMgYW4gZXJyb3IsIHVudGlsIC1zdGQgaXMgYWRkZWQgdG8gZ2V0CisgICBwcm9wZXIgQU5TSSBtb2RlLiAgQ3VyaW91c2x5ICdceDAwJyE9J3gnIGFsd2F5cyBjb21lcyBvdXQgdHJ1ZSwgZm9yIGFuCisgICBhcnJheSBzaXplIGF0IGxlYXN0LiAgSXQncyBuZWNlc3NhcnkgdG8gd3JpdGUgJ1x4MDAnPT0wIHRvIGdldCBzb21ldGhpbmcKKyAgIHRoYXQncyB0cnVlIG9ubHkgd2l0aCAtc3RkLiAgKi8KK2ludCBvc2Y0X2NjX2FycmF5IFsnXHgwMCcgPT0gMCA/IDEgOiAtMV07CisKKy8qIElCTSBDIDYgZm9yIEFJWCBpcyBhbG1vc3QtQU5TSSBieSBkZWZhdWx0LCBidXQgaXQgcmVwbGFjZXMgbWFjcm8gcGFyYW1ldGVycworICAgaW5zaWRlIHN0cmluZ3MgYW5kIGNoYXJhY3RlciBjb25zdGFudHMuICAqLworI2RlZmluZSBGT08oeCkgJ3gnCitpbnQgeGxjNl9jY19hcnJheVtGT08oYSkgPT0gJ3gnID8gMSA6IC0xXTsKKworaW50IHRlc3QgKGludCBpLCBkb3VibGUgeCk7CitzdHJ1Y3QgczEge2ludCAoKmYpIChpbnQgYSk7fTsKK3N0cnVjdCBzMiB7aW50ICgqZikgKGRvdWJsZSBhKTt9OworaW50IHBhaXJuYW1lcyAoaW50LCBjaGFyICoqLCBGSUxFICooKikoc3RydWN0IGJ1ZiAqLCBzdHJ1Y3Qgc3RhdCAqLCBpbnQpLCBpbnQsIGludCk7CitpbnQgYXJnYzsKK2NoYXIgKiphcmd2OworaW50CittYWluICgpCit7CityZXR1cm4gZiAoZSwgYXJndiwgMCkgIT0gYXJndlswXSAgfHwgIGYgKGUsIGFyZ3YsIDEpICE9IGFyZ3ZbMV07CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2ZvciBhY19hcmcgaW4gJycgLXFsYW5nbHZsPWV4dGM4OSAtcWxhbmdsdmw9YW5zaSAtc3RkIFwKKwktQWUgIi1BYSAtRF9IUFVYX1NPVVJDRSIgIi1YYyAtRF9fRVhURU5TSU9OU19fIgorZG8KKyAgQ0M9IiRhY19zYXZlX0NDICRhY19hcmciCisgIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgYWNfY3ZfcHJvZ19jY19jODk9JGFjX2FyZworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisKK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgdGVzdCAieCRhY19jdl9wcm9nX2NjX2M4OSIgIT0gInhubyIgJiYgYnJlYWsKK2RvbmUKK3JtIC1mIGNvbmZ0ZXN0LiRhY19leHQKK0NDPSRhY19zYXZlX0NDCisKK2ZpCisjIEFDX0NBQ0hFX1ZBTAorY2FzZSAieCRhY19jdl9wcm9nX2NjX2M4OSIgaW4KKyAgeCkKKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vbmUgbmVlZGVkIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vbmUgbmVlZGVkIiA+JjY7IH0gOzsKKyAgeG5vKQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogdW5zdXBwb3J0ZWQiID4mNQorZWNobyAiJHtFQ0hPX1R9dW5zdXBwb3J0ZWQiID4mNjsgfSA7OworICAqKQorICAgIENDPSIkQ0MgJGFjX2N2X3Byb2dfY2NfYzg5IgorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3Byb2dfY2NfYzg5IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9wcm9nX2NjX2M4OSIgPiY2OyB9IDs7Citlc2FjCisKKworYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCitkZXBjYz0iJENDIiAgIGFtX2NvbXBpbGVyX2xpc3Q9CisKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2MuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgLXogIiRBTURFUF9UUlVFIiAmJiB0ZXN0IC1mICIkYW1fZGVwY29tcCI7IHRoZW4KKyAgIyBXZSBtYWtlIGEgc3ViZGlyIGFuZCBkbyB0aGUgdGVzdHMgdGhlcmUuICBPdGhlcndpc2Ugd2UgY2FuIGVuZCB1cAorICAjIG1ha2luZyBib2d1cyBmaWxlcyB0aGF0IHdlIGRvbid0IGtub3cgYWJvdXQgYW5kIG5ldmVyIHJlbW92ZS4gIEZvcgorICAjIGluc3RhbmNlIGl0IHdhcyByZXBvcnRlZCB0aGF0IG9uIEhQLVVYIHRoZSBnY2MgdGVzdCB3aWxsIGVuZCB1cAorICAjIG1ha2luZyBhIGR1bW15IGZpbGUgbmFtZWQgYEQnIC0tIGJlY2F1c2UgYC1NRCcgbWVhbnMgYHB1dCB0aGUgb3V0cHV0CisgICMgaW4gRCcuCisgIG1rZGlyIGNvbmZ0ZXN0LmRpcgorICAjIENvcHkgZGVwY29tcCB0byBzdWJkaXIgYmVjYXVzZSBvdGhlcndpc2Ugd2Ugd29uJ3QgZmluZCBpdCBpZiB3ZSdyZQorICAjIHVzaW5nIGEgcmVsYXRpdmUgZGlyZWN0b3J5LgorICBjcCAiJGFtX2RlcGNvbXAiIGNvbmZ0ZXN0LmRpcgorICBjZCBjb25mdGVzdC5kaXIKKyAgIyBXZSB3aWxsIGJ1aWxkIG9iamVjdHMgYW5kIGRlcGVuZGVuY2llcyBpbiBhIHN1YmRpcmVjdG9yeSBiZWNhdXNlCisgICMgaXQgaGVscHMgdG8gZGV0ZWN0IGluYXBwbGljYWJsZSBkZXBlbmRlbmN5IG1vZGVzLiAgRm9yIGluc3RhbmNlCisgICMgYm90aCBUcnU2NCdzIGNjIGFuZCBJQ0Mgc3VwcG9ydCAtTUQgdG8gb3V0cHV0IGRlcGVuZGVuY2llcyBhcyBhCisgICMgc2lkZSBlZmZlY3Qgb2YgY29tcGlsYXRpb24sIGJ1dCBJQ0Mgd2lsbCBwdXQgdGhlIGRlcGVuZGVuY2llcyBpbgorICAjIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB3aGlsZSBUcnU2NCB3aWxsIHB1dCB0aGVtIGluIHRoZSBvYmplY3QKKyAgIyBkaXJlY3RvcnkuCisgIG1rZGlyIHN1YgorCisgIGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPW5vbmUKKyAgaWYgdGVzdCAiJGFtX2NvbXBpbGVyX2xpc3QiID0gIiI7IHRoZW4KKyAgICAgYW1fY29tcGlsZXJfbGlzdD1gc2VkIC1uICdzL14jKlwoW2EtekEtWjAtOV0qXCkpJC9cMS9wJyA8IC4vZGVwY29tcGAKKyAgZmkKKyAgZm9yIGRlcG1vZGUgaW4gJGFtX2NvbXBpbGVyX2xpc3Q7IGRvCisgICAgIyBTZXR1cCBhIHNvdXJjZSB3aXRoIG1hbnkgZGVwZW5kZW5jaWVzLCBiZWNhdXNlIHNvbWUgY29tcGlsZXJzCisgICAgIyBsaWtlIHRvIHdyYXAgbGFyZ2UgZGVwZW5kZW5jeSBsaXN0cyBvbiBjb2x1bW4gODAgKHdpdGggXCksIGFuZAorICAgICMgd2Ugc2hvdWxkIG5vdCBjaG9vc2UgYSBkZXBjb21wIG1vZGUgd2hpY2ggaXMgY29uZnVzZWQgYnkgdGhpcy4KKyAgICAjCisgICAgIyBXZSBuZWVkIHRvIHJlY3JlYXRlIHRoZXNlIGZpbGVzIGZvciBlYWNoIHRlc3QsIGFzIHRoZSBjb21waWxlciBtYXkKKyAgICAjIG92ZXJ3cml0ZSBzb21lIG9mIHRoZW0gd2hlbiB0ZXN0aW5nIHdpdGggb2JzY3VyZSBjb21tYW5kIGxpbmVzLgorICAgICMgVGhpcyBoYXBwZW5zIGF0IGxlYXN0IHdpdGggdGhlIEFJWCBDIGNvbXBpbGVyLgorICAgIDogPiBzdWIvY29uZnRlc3QuYworICAgIGZvciBpIGluIDEgMiAzIDQgNSA2OyBkbworICAgICAgZWNobyAnI2luY2x1ZGUgImNvbmZ0c3QnJGknLmgiJyA+PiBzdWIvY29uZnRlc3QuYworICAgICAgIyBVc2luZyBgOiA+IHN1Yi9jb25mdHN0JGkuaCcgY3JlYXRlcyBvbmx5IHN1Yi9jb25mdHN0MS5oIHdpdGgKKyAgICAgICMgU29sYXJpcyA4J3Mgey91c3IsfS9iaW4vc2guCisgICAgICB0b3VjaCBzdWIvY29uZnRzdCRpLmgKKyAgICBkb25lCisgICAgZWNobyAiJHthbV9faW5jbHVkZX0gJHthbV9fcXVvdGV9c3ViL2NvbmZ0ZXN0LlBvJHthbV9fcXVvdGV9IiA+IGNvbmZtZgorCisgICAgY2FzZSAkZGVwbW9kZSBpbgorICAgIG5vc2lkZWVmZmVjdCkKKyAgICAgICMgYWZ0ZXIgdGhpcyB0YWcsIG1lY2hhbmlzbXMgYXJlIG5vdCBieSBzaWRlLWVmZmVjdCwgc28gdGhleSdsbAorICAgICAgIyBvbmx5IGJlIHVzZWQgd2hlbiBleHBsaWNpdGx5IHJlcXVlc3RlZAorICAgICAgaWYgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgPSB4eWVzOyB0aGVuCisJY29udGludWUKKyAgICAgIGVsc2UKKwlicmVhaworICAgICAgZmkKKyAgICAgIDs7CisgICAgbm9uZSkgYnJlYWsgOzsKKyAgICBlc2FjCisgICAgIyBXZSBjaGVjayB3aXRoIGAtYycgYW5kIGAtbycgZm9yIHRoZSBzYWtlIG9mIHRoZSAiZGFzaG1zdGRvdXQiCisgICAgIyBtb2RlLiAgSXQgdHVybnMgb3V0IHRoYXQgdGhlIFN1blBybyBDKysgY29tcGlsZXIgZG9lcyBub3QgcHJvcGVybHkKKyAgICAjIGhhbmRsZSBgLU0gLW8nLCBhbmQgd2UgbmVlZCB0byBkZXRlY3QgdGhpcy4KKyAgICBpZiBkZXBtb2RlPSRkZXBtb2RlIFwKKyAgICAgICBzb3VyY2U9c3ViL2NvbmZ0ZXN0LmMgb2JqZWN0PXN1Yi9jb25mdGVzdC4ke09CSkVYVC1vfSBcCisgICAgICAgZGVwZmlsZT1zdWIvY29uZnRlc3QuUG8gdG1wZGVwZmlsZT1zdWIvY29uZnRlc3QuVFBvIFwKKyAgICAgICAkU0hFTEwgLi9kZXBjb21wICRkZXBjYyAtYyAtbyBzdWIvY29uZnRlc3QuJHtPQkpFWFQtb30gc3ViL2NvbmZ0ZXN0LmMgXAorICAgICAgICAgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0LmVyciAmJgorICAgICAgIGdyZXAgc3ViL2NvbmZ0c3QxLmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKKyAgICAgICBncmVwIHN1Yi9jb25mdHN0Ni5oIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgZ3JlcCBzdWIvY29uZnRlc3QuJHtPQkpFWFQtb30gc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKKyAgICAgICAke01BS0UtbWFrZX0gLXMgLWYgY29uZm1mID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgICMgaWNjIGRvZXNuJ3QgY2hva2Ugb24gdW5rbm93biBvcHRpb25zLCBpdCB3aWxsIGp1c3QgaXNzdWUgd2FybmluZ3MKKyAgICAgICMgb3IgcmVtYXJrcyAoZXZlbiB3aXRoIC1XZXJyb3IpLiAgU28gd2UgZ3JlcCBzdGRlcnIgZm9yIGFueSBtZXNzYWdlCisgICAgICAjIHRoYXQgc2F5cyBhbiBvcHRpb24gd2FzIGlnbm9yZWQgb3Igbm90IHN1cHBvcnRlZC4KKyAgICAgICMgV2hlbiBnaXZlbiAtTVAsIGljYyA3LjAgYW5kIDcuMSBjb21wbGFpbiB0aHVzbHk6CisgICAgICAjICAgaWNjOiBDb21tYW5kIGxpbmUgd2FybmluZzogaWdub3Jpbmcgb3B0aW9uICctTSc7IG5vIGFyZ3VtZW50IHJlcXVpcmVkCisgICAgICAjIFRoZSBkaWFnbm9zaXMgY2hhbmdlZCBpbiBpY2MgOC4wOgorICAgICAgIyAgIGljYzogQ29tbWFuZCBsaW5lIHJlbWFyazogb3B0aW9uICctTVAnIG5vdCBzdXBwb3J0ZWQKKyAgICAgIGlmIChncmVwICdpZ25vcmluZyBvcHRpb24nIGNvbmZ0ZXN0LmVyciB8fAorICAgICAgICAgIGdyZXAgJ25vdCBzdXBwb3J0ZWQnIGNvbmZ0ZXN0LmVycikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDo7IGVsc2UKKyAgICAgICAgYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9JGRlcG1vZGUKKyAgICAgICAgYnJlYWsKKyAgICAgIGZpCisgICAgZmkKKyAgZG9uZQorCisgIGNkIC4uCisgIHJtIC1yZiBjb25mdGVzdC5kaXIKK2Vsc2UKKyAgYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9bm9uZQorZmkKKworZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPiY2OyB9CitDQ0RFUE1PREU9ZGVwbW9kZT0kYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUKKworIGlmCisgIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubyBcCisgICYmIHRlc3QgIiRhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPSBnY2MzOyB0aGVuCisgIGFtX19mYXN0ZGVwQ0NfVFJVRT0KKyAgYW1fX2Zhc3RkZXBDQ19GQUxTRT0nIycKK2Vsc2UKKyAgYW1fX2Zhc3RkZXBDQ19UUlVFPScjJworICBhbV9fZmFzdGRlcENDX0ZBTFNFPQorZmkKKworCisKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgc3RyZXJyb3IiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIHN0cmVycm9yLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9zZWFyY2hfc3RyZXJyb3Irc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSRMSUJTCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBzdHJlcnJvciAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHN0cmVycm9yICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitmb3IgYWNfbGliIGluICcnIGNwb3NpeDsgZG8KKyAgaWYgdGVzdCAteiAiJGFjX2xpYiI7IHRoZW4KKyAgICBhY19yZXM9Im5vbmUgcmVxdWlyZWQiCisgIGVsc2UKKyAgICBhY19yZXM9LWwkYWNfbGliCisgICAgTElCUz0iLWwkYWNfbGliICAkYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTIgorICBmaQorICBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgYWNfY3Zfc2VhcmNoX3N0cmVycm9yPSRhY19yZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorICAgICAgY29uZnRlc3QkYWNfZXhlZXh0CisgIGlmIHRlc3QgIiR7YWNfY3Zfc2VhcmNoX3N0cmVycm9yK3NldH0iID0gc2V0OyB0aGVuCisgIGJyZWFrCitmaQorZG9uZQoraWYgdGVzdCAiJHthY19jdl9zZWFyY2hfc3RyZXJyb3Irc2V0fSIgPSBzZXQ7IHRoZW4KKyAgOgorZWxzZQorICBhY19jdl9zZWFyY2hfc3RyZXJyb3I9bm8KK2ZpCitybSBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9zZWFyY2hfc3RyZXJyb3IiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3NlYXJjaF9zdHJlcnJvciIgPiY2OyB9CithY19yZXM9JGFjX2N2X3NlYXJjaF9zdHJlcnJvcgoraWYgdGVzdCAiJGFjX3JlcyIgIT0gbm87IHRoZW4KKyAgdGVzdCAiJGFjX3JlcyIgPSAibm9uZSByZXF1aXJlZCIgfHwgTElCUz0iJGFjX3JlcyAkTElCUyIKKworZmkKKworYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQoraWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9Z2NjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWdjYzsgYWNfd29yZD0kMgoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX0NDPSIke2FjX3Rvb2xfcHJlZml4fWdjYyIKKyAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0NDPSRhY19jdl9wcm9nX0NDCitpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENDIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRDQyIgPiY2OyB9CitlbHNlCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfQ0MiOyB0aGVuCisgIGFjX2N0X0NDPSRDQworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImdjYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgZ2NjOyBhY193b3JkPSQyCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfY3RfQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9ImdjYyIKKyAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0NDPSRhY19jdl9wcm9nX2FjX2N0X0NDCitpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X0NDIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdF9DQyIgPiY2OyB9CitlbHNlCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0NDIiA9IHg7IHRoZW4KKyAgICBDQz0iIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scword2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcworY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKK3dob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKK2NvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgQ0M9JGFjX2N0X0NDCisgIGZpCitlbHNlCisgIENDPSIkYWNfY3ZfcHJvZ19DQyIKK2ZpCisKK2lmIHRlc3QgLXogIiRDQyI7IHRoZW4KKyAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWNjOyBhY193b3JkPSQyCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfQ0M9IiR7YWNfdG9vbF9wcmVmaXh9Y2MiCisgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKK2RvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitDQz0kYWNfY3ZfcHJvZ19DQworaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDQyIgPiY1CitlY2hvICIke0VDSE9fVH0kQ0MiID4mNjsgfQorZWxzZQorICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KK2ZpCisKKworICBmaQorZmkKK2lmIHRlc3QgLXogIiRDQyI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJjYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgY2M7IGFjX3dvcmQ9JDIKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DQytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCisgIGFjX3Byb2dfcmVqZWN0ZWQ9bm8KK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBpZiB0ZXN0ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA9ICIvdXNyL3VjYi9jYyI7IHRoZW4KKyAgICAgICBhY19wcm9nX3JlamVjdGVkPXllcworICAgICAgIGNvbnRpbnVlCisgICAgIGZpCisgICAgYWNfY3ZfcHJvZ19DQz0iY2MiCisgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKK2RvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworaWYgdGVzdCAkYWNfcHJvZ19yZWplY3RlZCA9IHllczsgdGhlbgorICAjIFdlIGZvdW5kIGEgYm9nb24gaW4gdGhlIHBhdGgsIHNvIG1ha2Ugc3VyZSB3ZSBuZXZlciB1c2UgaXQuCisgIHNldCBkdW1teSAkYWNfY3ZfcHJvZ19DQworICBzaGlmdAorICBpZiB0ZXN0ICQjICE9IDA7IHRoZW4KKyAgICAjIFdlIGNob3NlIGEgZGlmZmVyZW50IGNvbXBpbGVyIGZyb20gdGhlIGJvZ3VzIG9uZS4KKyAgICAjIEhvd2V2ZXIsIGl0IGhhcyB0aGUgc2FtZSBiYXNlbmFtZSwgc28gdGhlIGJvZ29uIHdpbGwgYmUgY2hvc2VuCisgICAgIyBmaXJzdCBpZiB3ZSBzZXQgQ0MgdG8ganVzdCB0aGUgYmFzZW5hbWU7IHVzZSB0aGUgZnVsbCBmaWxlIG5hbWUuCisgICAgc2hpZnQKKyAgICBhY19jdl9wcm9nX0NDPSIkYXNfZGlyLyRhY193b3JkJHsxKycgJ30kQCIKKyAgZmkKK2ZpCitmaQorZmkKK0NDPSRhY19jdl9wcm9nX0NDCitpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENDIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRDQyIgPiY2OyB9CitlbHNlCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJENDIjsgdGhlbgorICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgIGZvciBhY19wcm9nIGluIGNsLmV4ZQorICBkbworICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfQ0M9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgorICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCitkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorQ0M9JGFjX2N2X3Byb2dfQ0MKK2lmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQ0MiID4mNQorZWNobyAiJHtFQ0hPX1R9JENDIiA+JjY7IH0KK2Vsc2UKKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CitmaQorCisKKyAgICB0ZXN0IC1uICIkQ0MiICYmIGJyZWFrCisgIGRvbmUKK2ZpCitpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCisgIGFjX2N0X0NDPSRDQworICBmb3IgYWNfcHJvZyBpbiBjbC5leGUKK2RvCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfY3RfQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19wcm9nIgorICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCitkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfQ0M9JGFjX2N2X3Byb2dfYWNfY3RfQ0MKK2lmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfQ0MiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N0X0NDIiA+JjY7IH0KK2Vsc2UKKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CitmaQorCisKKyAgdGVzdCAtbiAiJGFjX2N0X0NDIiAmJiBicmVhaworZG9uZQorCisgIGlmIHRlc3QgIngkYWNfY3RfQ0MiID0geDsgdGhlbgorICAgIENDPSIiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCit3aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCitjb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scword2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcworY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBDQz0kYWNfY3RfQ0MKKyAgZmkKK2ZpCisKK2ZpCisKKwordGVzdCAteiAiJENDIiAmJiB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBubyBhY2NlcHRhYmxlIEMgY29tcGlsZXIgZm91bmQgaW4gXCRQQVRICitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBubyBhY2NlcHRhYmxlIEMgY29tcGlsZXIgZm91bmQgaW4gXCRQQVRICitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorCisjIFByb3ZpZGUgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29tcGlsZXIuCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgdmVyc2lvbiIgPiY1CithY19jb21waWxlcj1gc2V0IFggJGFjX2NvbXBpbGU7IGVjaG8gJDJgCit7IChhY190cnk9IiRhY19jb21waWxlciAtLXZlcnNpb24gPiY1IgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGVyIC0tdmVyc2lvbiA+JjUiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9Cit7IChhY190cnk9IiRhY19jb21waWxlciAtdiA+JjUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZXIgLXYgPiY1IikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfQoreyAoYWNfdHJ5PSIkYWNfY29tcGlsZXIgLVYgPiY1IgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGVyIC1WID4mNSIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIGNvbXBpbGVyIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIGNvbXBpbGVyLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9jX2NvbXBpbGVyX2dudStzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisjaWZuZGVmIF9fR05VQ19fCisgICAgICAgY2hva2UgbWUKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgYWNfY29tcGlsZXJfZ251PXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfY29tcGlsZXJfZ251PW5vCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2FjX2N2X2NfY29tcGlsZXJfZ251PSRhY19jb21waWxlcl9nbnUKKworZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9jX2NvbXBpbGVyX2dudSIgPiY2OyB9CitHQ0M9YHRlc3QgJGFjX2NvbXBpbGVyX2dudSA9IHllcyAmJiBlY2hvIHllc2AKK2FjX3Rlc3RfQ0ZMQUdTPSR7Q0ZMQUdTK3NldH0KK2FjX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLWciID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1nLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2NjX2crc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgYWNfc2F2ZV9jX3dlcnJvcl9mbGFnPSRhY19jX3dlcnJvcl9mbGFnCisgICBhY19jX3dlcnJvcl9mbGFnPXllcworICAgYWNfY3ZfcHJvZ19jY19nPW5vCisgICBDRkxBR1M9Ii1nIgorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgYWNfY3ZfcHJvZ19jY19nPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJQ0ZMQUdTPSIiCisgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICA6CitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19jX3dlcnJvcl9mbGFnPSRhY19zYXZlX2Nfd2Vycm9yX2ZsYWcKKwkgQ0ZMQUdTPSItZyIKKwkgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgYWNfY3ZfcHJvZ19jY19nPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisKK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGFjX2Nfd2Vycm9yX2ZsYWc9JGFjX3NhdmVfY193ZXJyb3JfZmxhZworZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3Byb2dfY2NfZyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfcHJvZ19jY19nIiA+JjY7IH0KK2lmIHRlc3QgIiRhY190ZXN0X0NGTEFHUyIgPSBzZXQ7IHRoZW4KKyAgQ0ZMQUdTPSRhY19zYXZlX0NGTEFHUworZWxpZiB0ZXN0ICRhY19jdl9wcm9nX2NjX2cgPSB5ZXM7IHRoZW4KKyAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICBDRkxBR1M9Ii1nIC1PMiIKKyAgZWxzZQorICAgIENGTEFHUz0iLWciCisgIGZpCitlbHNlCisgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgQ0ZMQUdTPSItTzIiCisgIGVsc2UKKyAgICBDRkxBR1M9CisgIGZpCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBDODkiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQgSVNPIEM4OS4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19jY19jODkrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgYWNfY3ZfcHJvZ19jY19jODk9bm8KK2FjX3NhdmVfQ0M9JENDCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisvKiBNb3N0IG9mIHRoZSBmb2xsb3dpbmcgdGVzdHMgYXJlIHN0b2xlbiBmcm9tIFJDUyA1LjcncyBzcmMvY29uZi5zaC4gICovCitzdHJ1Y3QgYnVmIHsgaW50IHg7IH07CitGSUxFICogKCpyY3NvcGVuKSAoc3RydWN0IGJ1ZiAqLCBzdHJ1Y3Qgc3RhdCAqLCBpbnQpOworc3RhdGljIGNoYXIgKmUgKHAsIGkpCisgICAgIGNoYXIgKipwOworICAgICBpbnQgaTsKK3sKKyAgcmV0dXJuIHBbaV07Cit9CitzdGF0aWMgY2hhciAqZiAoY2hhciAqICgqZykgKGNoYXIgKiosIGludCksIGNoYXIgKipwLCAuLi4pCit7CisgIGNoYXIgKnM7CisgIHZhX2xpc3QgdjsKKyAgdmFfc3RhcnQgKHYscCk7CisgIHMgPSBnIChwLCB2YV9hcmcgKHYsaW50KSk7CisgIHZhX2VuZCAodik7CisgIHJldHVybiBzOworfQorCisvKiBPU0YgNC4wIENvbXBhcSBjYyBpcyBzb21lIHNvcnQgb2YgYWxtb3N0LUFOU0kgYnkgZGVmYXVsdC4gIEl0IGhhcworICAgZnVuY3Rpb24gcHJvdG90eXBlcyBhbmQgc3R1ZmYsIGJ1dCBub3QgJ1x4SEgnIGhleCBjaGFyYWN0ZXIgY29uc3RhbnRzLgorICAgVGhlc2UgZG9uJ3QgcHJvdm9rZSBhbiBlcnJvciB1bmZvcnR1bmF0ZWx5LCBpbnN0ZWFkIGFyZSBzaWxlbnRseSB0cmVhdGVkCisgICBhcyAneCcuICBUaGUgZm9sbG93aW5nIGluZHVjZXMgYW4gZXJyb3IsIHVudGlsIC1zdGQgaXMgYWRkZWQgdG8gZ2V0CisgICBwcm9wZXIgQU5TSSBtb2RlLiAgQ3VyaW91c2x5ICdceDAwJyE9J3gnIGFsd2F5cyBjb21lcyBvdXQgdHJ1ZSwgZm9yIGFuCisgICBhcnJheSBzaXplIGF0IGxlYXN0LiAgSXQncyBuZWNlc3NhcnkgdG8gd3JpdGUgJ1x4MDAnPT0wIHRvIGdldCBzb21ldGhpbmcKKyAgIHRoYXQncyB0cnVlIG9ubHkgd2l0aCAtc3RkLiAgKi8KK2ludCBvc2Y0X2NjX2FycmF5IFsnXHgwMCcgPT0gMCA/IDEgOiAtMV07CisKKy8qIElCTSBDIDYgZm9yIEFJWCBpcyBhbG1vc3QtQU5TSSBieSBkZWZhdWx0LCBidXQgaXQgcmVwbGFjZXMgbWFjcm8gcGFyYW1ldGVycworICAgaW5zaWRlIHN0cmluZ3MgYW5kIGNoYXJhY3RlciBjb25zdGFudHMuICAqLworI2RlZmluZSBGT08oeCkgJ3gnCitpbnQgeGxjNl9jY19hcnJheVtGT08oYSkgPT0gJ3gnID8gMSA6IC0xXTsKKworaW50IHRlc3QgKGludCBpLCBkb3VibGUgeCk7CitzdHJ1Y3QgczEge2ludCAoKmYpIChpbnQgYSk7fTsKK3N0cnVjdCBzMiB7aW50ICgqZikgKGRvdWJsZSBhKTt9OworaW50IHBhaXJuYW1lcyAoaW50LCBjaGFyICoqLCBGSUxFICooKikoc3RydWN0IGJ1ZiAqLCBzdHJ1Y3Qgc3RhdCAqLCBpbnQpLCBpbnQsIGludCk7CitpbnQgYXJnYzsKK2NoYXIgKiphcmd2OworaW50CittYWluICgpCit7CityZXR1cm4gZiAoZSwgYXJndiwgMCkgIT0gYXJndlswXSAgfHwgIGYgKGUsIGFyZ3YsIDEpICE9IGFyZ3ZbMV07CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2ZvciBhY19hcmcgaW4gJycgLXFsYW5nbHZsPWV4dGM4OSAtcWxhbmdsdmw9YW5zaSAtc3RkIFwKKwktQWUgIi1BYSAtRF9IUFVYX1NPVVJDRSIgIi1YYyAtRF9fRVhURU5TSU9OU19fIgorZG8KKyAgQ0M9IiRhY19zYXZlX0NDICRhY19hcmciCisgIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgYWNfY3ZfcHJvZ19jY19jODk9JGFjX2FyZworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisKK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgdGVzdCAieCRhY19jdl9wcm9nX2NjX2M4OSIgIT0gInhubyIgJiYgYnJlYWsKK2RvbmUKK3JtIC1mIGNvbmZ0ZXN0LiRhY19leHQKK0NDPSRhY19zYXZlX0NDCisKK2ZpCisjIEFDX0NBQ0hFX1ZBTAorY2FzZSAieCRhY19jdl9wcm9nX2NjX2M4OSIgaW4KKyAgeCkKKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vbmUgbmVlZGVkIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vbmUgbmVlZGVkIiA+JjY7IH0gOzsKKyAgeG5vKQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogdW5zdXBwb3J0ZWQiID4mNQorZWNobyAiJHtFQ0hPX1R9dW5zdXBwb3J0ZWQiID4mNjsgfSA7OworICAqKQorICAgIENDPSIkQ0MgJGFjX2N2X3Byb2dfY2NfYzg5IgorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3Byb2dfY2NfYzg5IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9wcm9nX2NjX2M4OSIgPiY2OyB9IDs7Citlc2FjCisKKworYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCitkZXBjYz0iJENDIiAgIGFtX2NvbXBpbGVyX2xpc3Q9CisKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2MuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgLXogIiRBTURFUF9UUlVFIiAmJiB0ZXN0IC1mICIkYW1fZGVwY29tcCI7IHRoZW4KKyAgIyBXZSBtYWtlIGEgc3ViZGlyIGFuZCBkbyB0aGUgdGVzdHMgdGhlcmUuICBPdGhlcndpc2Ugd2UgY2FuIGVuZCB1cAorICAjIG1ha2luZyBib2d1cyBmaWxlcyB0aGF0IHdlIGRvbid0IGtub3cgYWJvdXQgYW5kIG5ldmVyIHJlbW92ZS4gIEZvcgorICAjIGluc3RhbmNlIGl0IHdhcyByZXBvcnRlZCB0aGF0IG9uIEhQLVVYIHRoZSBnY2MgdGVzdCB3aWxsIGVuZCB1cAorICAjIG1ha2luZyBhIGR1bW15IGZpbGUgbmFtZWQgYEQnIC0tIGJlY2F1c2UgYC1NRCcgbWVhbnMgYHB1dCB0aGUgb3V0cHV0CisgICMgaW4gRCcuCisgIG1rZGlyIGNvbmZ0ZXN0LmRpcgorICAjIENvcHkgZGVwY29tcCB0byBzdWJkaXIgYmVjYXVzZSBvdGhlcndpc2Ugd2Ugd29uJ3QgZmluZCBpdCBpZiB3ZSdyZQorICAjIHVzaW5nIGEgcmVsYXRpdmUgZGlyZWN0b3J5LgorICBjcCAiJGFtX2RlcGNvbXAiIGNvbmZ0ZXN0LmRpcgorICBjZCBjb25mdGVzdC5kaXIKKyAgIyBXZSB3aWxsIGJ1aWxkIG9iamVjdHMgYW5kIGRlcGVuZGVuY2llcyBpbiBhIHN1YmRpcmVjdG9yeSBiZWNhdXNlCisgICMgaXQgaGVscHMgdG8gZGV0ZWN0IGluYXBwbGljYWJsZSBkZXBlbmRlbmN5IG1vZGVzLiAgRm9yIGluc3RhbmNlCisgICMgYm90aCBUcnU2NCdzIGNjIGFuZCBJQ0Mgc3VwcG9ydCAtTUQgdG8gb3V0cHV0IGRlcGVuZGVuY2llcyBhcyBhCisgICMgc2lkZSBlZmZlY3Qgb2YgY29tcGlsYXRpb24sIGJ1dCBJQ0Mgd2lsbCBwdXQgdGhlIGRlcGVuZGVuY2llcyBpbgorICAjIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB3aGlsZSBUcnU2NCB3aWxsIHB1dCB0aGVtIGluIHRoZSBvYmplY3QKKyAgIyBkaXJlY3RvcnkuCisgIG1rZGlyIHN1YgorCisgIGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPW5vbmUKKyAgaWYgdGVzdCAiJGFtX2NvbXBpbGVyX2xpc3QiID0gIiI7IHRoZW4KKyAgICAgYW1fY29tcGlsZXJfbGlzdD1gc2VkIC1uICdzL14jKlwoW2EtekEtWjAtOV0qXCkpJC9cMS9wJyA8IC4vZGVwY29tcGAKKyAgZmkKKyAgZm9yIGRlcG1vZGUgaW4gJGFtX2NvbXBpbGVyX2xpc3Q7IGRvCisgICAgIyBTZXR1cCBhIHNvdXJjZSB3aXRoIG1hbnkgZGVwZW5kZW5jaWVzLCBiZWNhdXNlIHNvbWUgY29tcGlsZXJzCisgICAgIyBsaWtlIHRvIHdyYXAgbGFyZ2UgZGVwZW5kZW5jeSBsaXN0cyBvbiBjb2x1bW4gODAgKHdpdGggXCksIGFuZAorICAgICMgd2Ugc2hvdWxkIG5vdCBjaG9vc2UgYSBkZXBjb21wIG1vZGUgd2hpY2ggaXMgY29uZnVzZWQgYnkgdGhpcy4KKyAgICAjCisgICAgIyBXZSBuZWVkIHRvIHJlY3JlYXRlIHRoZXNlIGZpbGVzIGZvciBlYWNoIHRlc3QsIGFzIHRoZSBjb21waWxlciBtYXkKKyAgICAjIG92ZXJ3cml0ZSBzb21lIG9mIHRoZW0gd2hlbiB0ZXN0aW5nIHdpdGggb2JzY3VyZSBjb21tYW5kIGxpbmVzLgorICAgICMgVGhpcyBoYXBwZW5zIGF0IGxlYXN0IHdpdGggdGhlIEFJWCBDIGNvbXBpbGVyLgorICAgIDogPiBzdWIvY29uZnRlc3QuYworICAgIGZvciBpIGluIDEgMiAzIDQgNSA2OyBkbworICAgICAgZWNobyAnI2luY2x1ZGUgImNvbmZ0c3QnJGknLmgiJyA+PiBzdWIvY29uZnRlc3QuYworICAgICAgIyBVc2luZyBgOiA+IHN1Yi9jb25mdHN0JGkuaCcgY3JlYXRlcyBvbmx5IHN1Yi9jb25mdHN0MS5oIHdpdGgKKyAgICAgICMgU29sYXJpcyA4J3Mgey91c3IsfS9iaW4vc2guCisgICAgICB0b3VjaCBzdWIvY29uZnRzdCRpLmgKKyAgICBkb25lCisgICAgZWNobyAiJHthbV9faW5jbHVkZX0gJHthbV9fcXVvdGV9c3ViL2NvbmZ0ZXN0LlBvJHthbV9fcXVvdGV9IiA+IGNvbmZtZgorCisgICAgY2FzZSAkZGVwbW9kZSBpbgorICAgIG5vc2lkZWVmZmVjdCkKKyAgICAgICMgYWZ0ZXIgdGhpcyB0YWcsIG1lY2hhbmlzbXMgYXJlIG5vdCBieSBzaWRlLWVmZmVjdCwgc28gdGhleSdsbAorICAgICAgIyBvbmx5IGJlIHVzZWQgd2hlbiBleHBsaWNpdGx5IHJlcXVlc3RlZAorICAgICAgaWYgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgPSB4eWVzOyB0aGVuCisJY29udGludWUKKyAgICAgIGVsc2UKKwlicmVhaworICAgICAgZmkKKyAgICAgIDs7CisgICAgbm9uZSkgYnJlYWsgOzsKKyAgICBlc2FjCisgICAgIyBXZSBjaGVjayB3aXRoIGAtYycgYW5kIGAtbycgZm9yIHRoZSBzYWtlIG9mIHRoZSAiZGFzaG1zdGRvdXQiCisgICAgIyBtb2RlLiAgSXQgdHVybnMgb3V0IHRoYXQgdGhlIFN1blBybyBDKysgY29tcGlsZXIgZG9lcyBub3QgcHJvcGVybHkKKyAgICAjIGhhbmRsZSBgLU0gLW8nLCBhbmQgd2UgbmVlZCB0byBkZXRlY3QgdGhpcy4KKyAgICBpZiBkZXBtb2RlPSRkZXBtb2RlIFwKKyAgICAgICBzb3VyY2U9c3ViL2NvbmZ0ZXN0LmMgb2JqZWN0PXN1Yi9jb25mdGVzdC4ke09CSkVYVC1vfSBcCisgICAgICAgZGVwZmlsZT1zdWIvY29uZnRlc3QuUG8gdG1wZGVwZmlsZT1zdWIvY29uZnRlc3QuVFBvIFwKKyAgICAgICAkU0hFTEwgLi9kZXBjb21wICRkZXBjYyAtYyAtbyBzdWIvY29uZnRlc3QuJHtPQkpFWFQtb30gc3ViL2NvbmZ0ZXN0LmMgXAorICAgICAgICAgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0LmVyciAmJgorICAgICAgIGdyZXAgc3ViL2NvbmZ0c3QxLmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKKyAgICAgICBncmVwIHN1Yi9jb25mdHN0Ni5oIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgZ3JlcCBzdWIvY29uZnRlc3QuJHtPQkpFWFQtb30gc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKKyAgICAgICAke01BS0UtbWFrZX0gLXMgLWYgY29uZm1mID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgICMgaWNjIGRvZXNuJ3QgY2hva2Ugb24gdW5rbm93biBvcHRpb25zLCBpdCB3aWxsIGp1c3QgaXNzdWUgd2FybmluZ3MKKyAgICAgICMgb3IgcmVtYXJrcyAoZXZlbiB3aXRoIC1XZXJyb3IpLiAgU28gd2UgZ3JlcCBzdGRlcnIgZm9yIGFueSBtZXNzYWdlCisgICAgICAjIHRoYXQgc2F5cyBhbiBvcHRpb24gd2FzIGlnbm9yZWQgb3Igbm90IHN1cHBvcnRlZC4KKyAgICAgICMgV2hlbiBnaXZlbiAtTVAsIGljYyA3LjAgYW5kIDcuMSBjb21wbGFpbiB0aHVzbHk6CisgICAgICAjICAgaWNjOiBDb21tYW5kIGxpbmUgd2FybmluZzogaWdub3Jpbmcgb3B0aW9uICctTSc7IG5vIGFyZ3VtZW50IHJlcXVpcmVkCisgICAgICAjIFRoZSBkaWFnbm9zaXMgY2hhbmdlZCBpbiBpY2MgOC4wOgorICAgICAgIyAgIGljYzogQ29tbWFuZCBsaW5lIHJlbWFyazogb3B0aW9uICctTVAnIG5vdCBzdXBwb3J0ZWQKKyAgICAgIGlmIChncmVwICdpZ25vcmluZyBvcHRpb24nIGNvbmZ0ZXN0LmVyciB8fAorICAgICAgICAgIGdyZXAgJ25vdCBzdXBwb3J0ZWQnIGNvbmZ0ZXN0LmVycikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDo7IGVsc2UKKyAgICAgICAgYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9JGRlcG1vZGUKKyAgICAgICAgYnJlYWsKKyAgICAgIGZpCisgICAgZmkKKyAgZG9uZQorCisgIGNkIC4uCisgIHJtIC1yZiBjb25mdGVzdC5kaXIKK2Vsc2UKKyAgYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9bm9uZQorZmkKKworZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPiY2OyB9CitDQ0RFUE1PREU9ZGVwbW9kZT0kYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUKKworIGlmCisgIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubyBcCisgICYmIHRlc3QgIiRhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPSBnY2MzOyB0aGVuCisgIGFtX19mYXN0ZGVwQ0NfVFJVRT0KKyAgYW1fX2Zhc3RkZXBDQ19GQUxTRT0nIycKK2Vsc2UKKyAgYW1fX2Zhc3RkZXBDQ19UUlVFPScjJworICBhbV9fZmFzdGRlcENDX0ZBTFNFPQorZmkKKworCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Cit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3NvciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yLi4uICRFQ0hPX0MiID4mNjsgfQorIyBPbiBTdW5zLCBzb21ldGltZXMgJENQUCBuYW1lcyBhIGRpcmVjdG9yeS4KK2lmIHRlc3QgLW4gIiRDUFAiICYmIHRlc3QgLWQgIiRDUFAiOyB0aGVuCisgIENQUD0KK2ZpCitpZiB0ZXN0IC16ICIkQ1BQIjsgdGhlbgorICBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ1BQK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgICAgICAjIERvdWJsZSBxdW90ZXMgYmVjYXVzZSBDUFAgbmVlZHMgdG8gYmUgZXhwYW5kZWQKKyAgICBmb3IgQ1BQIGluICIkQ0MgLUUiICIkQ0MgLUUgLXRyYWRpdGlvbmFsLWNwcCIgIi9saWIvY3BwIgorICAgIGRvCisgICAgICBhY19wcmVwcm9jX29rPWZhbHNlCitmb3IgYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKK2RvCisgICMgVXNlIGEgaGVhZGVyIGZpbGUgdGhhdCBjb21lcyB3aXRoIGdjYywgc28gY29uZmlndXJpbmcgZ2xpYmMKKyAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCisgICMgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAjIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4KKyAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKKyAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4gIlN5bnRheCBlcnJvciIgaXMgaGVyZSB0byBjYXRjaCB0aGlzIGNhc2UuCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKwkJICAgICBTeW50YXggZXJyb3IKK19BQ0VPRgoraWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7CisJIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9OyB0aGVuCisgIDoKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworICAjIEJyb2tlbjogZmFpbHMgb24gdmFsaWQgaW5wdXQuCitjb250aW51ZQorZmkKKworcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKworICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uZXhpc3RlbnQgaGVhZGVycworICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxhY19ub25leGlzdGVudC5oPgorX0FDRU9GCitpZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKwkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH07IHRoZW4KKyAgIyBCcm9rZW46IHN1Y2Nlc3Mgb24gaW52YWxpZCBpbnB1dC4KK2NvbnRpbnVlCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KK2FjX3ByZXByb2Nfb2s9OgorYnJlYWsKK2ZpCisKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisKK2RvbmUKKyMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK2lmICRhY19wcmVwcm9jX29rOyB0aGVuCisgIGJyZWFrCitmaQorCisgICAgZG9uZQorICAgIGFjX2N2X3Byb2dfQ1BQPSRDUFAKKworZmkKKyAgQ1BQPSRhY19jdl9wcm9nX0NQUAorZWxzZQorICBhY19jdl9wcm9nX0NQUD0kQ1BQCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQ1BQIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRDUFAiID4mNjsgfQorYWNfcHJlcHJvY19vaz1mYWxzZQorZm9yIGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4gJycgeWVzCitkbworICAjIFVzZSBhIGhlYWRlciBmaWxlIHRoYXQgY29tZXMgd2l0aCBnY2MsIHNvIGNvbmZpZ3VyaW5nIGdsaWJjCisgICMgd2l0aCBhIGZyZXNoIGNyb3NzLWNvbXBpbGVyIHdvcmtzLgorICAjIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgIyA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuCisgICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCisgICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisJCSAgICAgU3ludGF4IGVycm9yCitfQUNFT0YKK2lmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfTsgdGhlbgorICA6CitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgorY29udGludWUKK2ZpCisKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisKKyAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMKKyAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8YWNfbm9uZXhpc3RlbnQuaD4KK19BQ0VPRgoraWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7CisJIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9OyB0aGVuCisgICMgQnJva2VuOiBzdWNjZXNzIG9uIGludmFsaWQgaW5wdXQuCitjb250aW51ZQorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisgICMgUGFzc2VzIGJvdGggdGVzdHMuCithY19wcmVwcm9jX29rPToKK2JyZWFrCitmaQorCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorCitkb25lCisjIEJlY2F1c2Ugb2YgYGJyZWFrJywgX0FDX1BSRVBST0NfSUZFTFNFJ3MgY2xlYW5pbmcgY29kZSB3YXMgc2tpcHBlZC4KK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CitpZiAkYWNfcHJlcHJvY19vazsgdGhlbgorICA6CitlbHNlCisgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IEMgcHJlcHJvY2Vzc29yIFwiJENQUFwiIGZhaWxzIHNhbml0eSBjaGVjaworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogQyBwcmVwcm9jZXNzb3IgXCIkQ1BQXCIgZmFpbHMgc2FuaXR5IGNoZWNrCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorZmkKKworYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCisKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBncmVwIHRoYXQgaGFuZGxlcyBsb25nIGxpbmVzIGFuZCAtZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBncmVwIHRoYXQgaGFuZGxlcyBsb25nIGxpbmVzIGFuZCAtZS4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9HUkVQK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZ3JlcCBnZ3JlcCIgdG8gdXNlIGluIG1zZyBvdXRwdXQKK2lmIHRlc3QgLXogIiRHUkVQIjsgdGhlbgorc2V0IGR1bW15IGdyZXAgZ2dyZXA7IGFjX3Byb2dfbmFtZT0kMgoraWYgdGVzdCAiJHthY19jdl9wYXRoX0dSRVArc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgYWNfcGF0aF9HUkVQX2ZvdW5kPWZhbHNlCisjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4KK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgZm9yIGFjX3Byb2cgaW4gZ3JlcCBnZ3JlcDsgZG8KKyAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICAgYWNfcGF0aF9HUkVQPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IgorICAgIHsgdGVzdCAtZiAiJGFjX3BhdGhfR1JFUCIgJiYgJGFzX3Rlc3RfeCAiJGFjX3BhdGhfR1JFUCI7IH0gfHwgY29udGludWUKKyAgICAjIENoZWNrIGZvciBHTlUgYWNfcGF0aF9HUkVQIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCisgICMgQ2hlY2sgZm9yIEdOVSAkYWNfcGF0aF9HUkVQCitjYXNlIGAiJGFjX3BhdGhfR1JFUCIgLS12ZXJzaW9uIDI+JjFgIGluCisqR05VKikKKyAgYWNfY3ZfcGF0aF9HUkVQPSIkYWNfcGF0aF9HUkVQIiBhY19wYXRoX0dSRVBfZm91bmQ9Ojs7CisqKQorICBhY19jb3VudD0wCisgIGVjaG8gJEVDSE9fTiAiMDEyMzQ1Njc4OSRFQ0hPX0MiID4iY29uZnRlc3QuaW4iCisgIHdoaWxlIDoKKyAgZG8KKyAgICBjYXQgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QuaW4iID4iY29uZnRlc3QudG1wIgorICAgIG12ICJjb25mdGVzdC50bXAiICJjb25mdGVzdC5pbiIKKyAgICBjcCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5ubCIKKyAgICBlY2hvICdHUkVQJyA+PiAiY29uZnRlc3QubmwiCisgICAgIiRhY19wYXRoX0dSRVAiIC1lICdHUkVQJCcgLWUgJy0oY2Fubm90IG1hdGNoKS0nIDwgImNvbmZ0ZXN0Lm5sIiA+ImNvbmZ0ZXN0Lm91dCIgMj4vZGV2L251bGwgfHwgYnJlYWsKKyAgICBkaWZmICJjb25mdGVzdC5vdXQiICJjb25mdGVzdC5ubCIgPi9kZXYvbnVsbCAyPiYxIHx8IGJyZWFrCisgICAgYWNfY291bnQ9YGV4cHIgJGFjX2NvdW50ICsgMWAKKyAgICBpZiB0ZXN0ICRhY19jb3VudCAtZ3QgJHthY19wYXRoX0dSRVBfbWF4LTB9OyB0aGVuCisgICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKKyAgICAgIGFjX2N2X3BhdGhfR1JFUD0iJGFjX3BhdGhfR1JFUCIKKyAgICAgIGFjX3BhdGhfR1JFUF9tYXg9JGFjX2NvdW50CisgICAgZmkKKyAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCisgICAgdGVzdCAkYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCisgIGRvbmUKKyAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7Citlc2FjCisKKworICAgICRhY19wYXRoX0dSRVBfZm91bmQgJiYgYnJlYWsgMworICBkb25lCitkb25lCisKK2RvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworCitmaQorCitHUkVQPSIkYWNfY3ZfcGF0aF9HUkVQIgoraWYgdGVzdCAteiAiJEdSRVAiOyB0aGVuCisgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IG5vIGFjY2VwdGFibGUgJGFjX3Byb2dfbmFtZSBjb3VsZCBiZSBmb3VuZCBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogbm8gYWNjZXB0YWJsZSAkYWNfcHJvZ19uYW1lIGNvdWxkIGJlIGZvdW5kIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorZmkKKworZWxzZQorICBhY19jdl9wYXRoX0dSRVA9JEdSRVAKK2ZpCisKKworZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3BhdGhfR1JFUCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfcGF0aF9HUkVQIiA+JjY7IH0KKyBHUkVQPSIkYWNfY3ZfcGF0aF9HUkVQIgorCisKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBlZ3JlcCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBlZ3JlcC4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9FR1JFUCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiBlY2hvIGEgfCAkR1JFUCAtRSAnKGF8YiknID4vZGV2L251bGwgMj4mMQorICAgdGhlbiBhY19jdl9wYXRoX0VHUkVQPSIkR1JFUCAtRSIKKyAgIGVsc2UKKyAgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJlZ3JlcCIgdG8gdXNlIGluIG1zZyBvdXRwdXQKK2lmIHRlc3QgLXogIiRFR1JFUCI7IHRoZW4KK3NldCBkdW1teSBlZ3JlcDsgYWNfcHJvZ19uYW1lPSQyCitpZiB0ZXN0ICIke2FjX2N2X3BhdGhfRUdSRVArc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgYWNfcGF0aF9FR1JFUF9mb3VuZD1mYWxzZQorIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBlYWNoIG9mIFBST0dOQU1FLUxJU1QKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluCitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgIGZvciBhY19wcm9nIGluIGVncmVwOyBkbworICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgICBhY19wYXRoX0VHUkVQPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IgorICAgIHsgdGVzdCAtZiAiJGFjX3BhdGhfRUdSRVAiICYmICRhc190ZXN0X3ggIiRhY19wYXRoX0VHUkVQIjsgfSB8fCBjb250aW51ZQorICAgICMgQ2hlY2sgZm9yIEdOVSBhY19wYXRoX0VHUkVQIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCisgICMgQ2hlY2sgZm9yIEdOVSAkYWNfcGF0aF9FR1JFUAorY2FzZSBgIiRhY19wYXRoX0VHUkVQIiAtLXZlcnNpb24gMj4mMWAgaW4KKypHTlUqKQorICBhY19jdl9wYXRoX0VHUkVQPSIkYWNfcGF0aF9FR1JFUCIgYWNfcGF0aF9FR1JFUF9mb3VuZD06OzsKKyopCisgIGFjX2NvdW50PTAKKyAgZWNobyAkRUNIT19OICIwMTIzNDU2Nzg5JEVDSE9fQyIgPiJjb25mdGVzdC5pbiIKKyAgd2hpbGUgOgorICBkbworICAgIGNhdCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5pbiIgPiJjb25mdGVzdC50bXAiCisgICAgbXYgImNvbmZ0ZXN0LnRtcCIgImNvbmZ0ZXN0LmluIgorICAgIGNwICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0Lm5sIgorICAgIGVjaG8gJ0VHUkVQJyA+PiAiY29uZnRlc3QubmwiCisgICAgIiRhY19wYXRoX0VHUkVQIiAnRUdSRVAkJyA8ICJjb25mdGVzdC5ubCIgPiJjb25mdGVzdC5vdXQiIDI+L2Rldi9udWxsIHx8IGJyZWFrCisgICAgZGlmZiAiY29uZnRlc3Qub3V0IiAiY29uZnRlc3QubmwiID4vZGV2L251bGwgMj4mMSB8fCBicmVhaworICAgIGFjX2NvdW50PWBleHByICRhY19jb3VudCArIDFgCisgICAgaWYgdGVzdCAkYWNfY291bnQgLWd0ICR7YWNfcGF0aF9FR1JFUF9tYXgtMH07IHRoZW4KKyAgICAgICMgQmVzdCBvbmUgc28gZmFyLCBzYXZlIGl0IGJ1dCBrZWVwIGxvb2tpbmcgZm9yIGEgYmV0dGVyIG9uZQorICAgICAgYWNfY3ZfcGF0aF9FR1JFUD0iJGFjX3BhdGhfRUdSRVAiCisgICAgICBhY19wYXRoX0VHUkVQX21heD0kYWNfY291bnQKKyAgICBmaQorICAgICMgMTAqKDJeMTApIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKKyAgICB0ZXN0ICRhY19jb3VudCAtZ3QgMTAgJiYgYnJlYWsKKyAgZG9uZQorICBybSAtZiBjb25mdGVzdC5pbiBjb25mdGVzdC50bXAgY29uZnRlc3QubmwgY29uZnRlc3Qub3V0OzsKK2VzYWMKKworCisgICAgJGFjX3BhdGhfRUdSRVBfZm91bmQgJiYgYnJlYWsgMworICBkb25lCitkb25lCisKK2RvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworCitmaQorCitFR1JFUD0iJGFjX2N2X3BhdGhfRUdSRVAiCitpZiB0ZXN0IC16ICIkRUdSRVAiOyB0aGVuCisgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IG5vIGFjY2VwdGFibGUgJGFjX3Byb2dfbmFtZSBjb3VsZCBiZSBmb3VuZCBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogbm8gYWNjZXB0YWJsZSAkYWNfcHJvZ19uYW1lIGNvdWxkIGJlIGZvdW5kIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorZmkKKworZWxzZQorICBhY19jdl9wYXRoX0VHUkVQPSRFR1JFUAorZmkKKworCisgICBmaQorZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3BhdGhfRUdSRVAiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3BhdGhfRUdSRVAiID4mNjsgfQorIEVHUkVQPSIkYWNfY3ZfcGF0aF9FR1JFUCIKKworCitpZiB0ZXN0ICRhY19jdl9jX2NvbXBpbGVyX2dudSA9IHllczsgdGhlbgorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgJENDIG5lZWRzIC10cmFkaXRpb25hbCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgJENDIG5lZWRzIC10cmFkaXRpb25hbC4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19nY2NfdHJhZGl0aW9uYWwrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgICBhY19wYXR0ZXJuPSJBdXRvY29uZi4qJ3gnIgorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzZ3R0eS5oPgorQXV0b2NvbmYgVElPQ0dFVFAKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgIiRhY19wYXR0ZXJuIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYWNfY3ZfcHJvZ19nY2NfdHJhZGl0aW9uYWw9eWVzCitlbHNlCisgIGFjX2N2X3Byb2dfZ2NjX3RyYWRpdGlvbmFsPW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisKKworICBpZiB0ZXN0ICRhY19jdl9wcm9nX2djY190cmFkaXRpb25hbCA9IG5vOyB0aGVuCisgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8dGVybWlvLmg+CitBdXRvY29uZiBUQ0dFVEEKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgIiRhY19wYXR0ZXJuIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYWNfY3ZfcHJvZ19nY2NfdHJhZGl0aW9uYWw9eWVzCitmaQorcm0gLWYgY29uZnRlc3QqCisKKyAgZmkKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wcm9nX2djY190cmFkaXRpb25hbCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfcHJvZ19nY2NfdHJhZGl0aW9uYWwiID4mNjsgfQorICBpZiB0ZXN0ICRhY19jdl9wcm9nX2djY190cmFkaXRpb25hbCA9IHllczsgdGhlbgorICAgIENDPSIkQ0MgLXRyYWRpdGlvbmFsIgorICBmaQorZmkKKworaWYgdGVzdCAieCRDQyIgIT0geGNjOyB0aGVuCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgJENDIGFuZCBjYyB1bmRlcnN0YW5kIC1jIGFuZCAtbyB0b2dldGhlciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgJENDIGFuZCBjYyB1bmRlcnN0YW5kIC1jIGFuZCAtbyB0b2dldGhlci4uLiAkRUNIT19DIiA+JjY7IH0KK2Vsc2UKKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBjYyB1bmRlcnN0YW5kcyAtYyBhbmQgLW8gdG9nZXRoZXIiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIGNjIHVuZGVyc3RhbmRzIC1jIGFuZCAtbyB0b2dldGhlci4uLiAkRUNIT19DIiA+JjY7IH0KK2ZpCitzZXQgZHVtbXkgJENDOyBhY19jYz1gZWNobyAkMiB8CisJCSAgICAgIHNlZCAncy9bXmEtekEtWjAtOV9dL18vZztzL15bMC05XS9fLydgCitpZiB7IGFzX3Zhcj1hY19jdl9wcm9nX2NjXyR7YWNfY2N9X2NfbzsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorIyBNYWtlIHN1cmUgaXQgd29ya3MgYm90aCB3aXRoICRDQyBhbmQgd2l0aCBzaW1wbGUgY2MuCisjIFdlIGRvIHRoZSB0ZXN0IHR3aWNlIGJlY2F1c2Ugc29tZSBjb21waWxlcnMgcmVmdXNlIHRvIG92ZXJ3cml0ZSBhbgorIyBleGlzdGluZyAubyBmaWxlIHdpdGggLW8sIHRob3VnaCB0aGV5IHdpbGwgY3JlYXRlIG9uZS4KK2FjX3RyeT0nJENDIC1jIGNvbmZ0ZXN0LiRhY19leHQgLW8gY29uZnRlc3QyLiRhY19vYmpleHQgPiY1Jworcm0gLWYgY29uZnRlc3QyLioKK2lmIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY190cnkiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICB0ZXN0IC1mIGNvbmZ0ZXN0Mi4kYWNfb2JqZXh0ICYmIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY190cnkiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OwordGhlbgorICBldmFsIGFjX2N2X3Byb2dfY2NfJHthY19jY31fY19vPXllcworICBpZiB0ZXN0ICJ4JENDIiAhPSB4Y2M7IHRoZW4KKyAgICAjIFRlc3QgZmlyc3QgdGhhdCBjYyBleGlzdHMgYXQgYWxsLgorICAgIGlmIHsgYWNfdHJ5PSdjYyAtYyBjb25mdGVzdC4kYWNfZXh0ID4mNScKKyAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgICAgIGFjX3RyeT0nY2MgLWMgY29uZnRlc3QuJGFjX2V4dCAtbyBjb25mdGVzdDIuJGFjX29iamV4dCA+JjUnCisgICAgICBybSAtZiBjb25mdGVzdDIuKgorICAgICAgaWYgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgdGVzdCAtZiBjb25mdGVzdDIuJGFjX29iamV4dCAmJiB7IChjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfdHJ5IikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsKKyAgICAgIHRoZW4KKwkjIGNjIHdvcmtzIHRvby4KKwk6CisgICAgICBlbHNlCisJIyBjYyBleGlzdHMgYnV0IGRvZXNuJ3QgbGlrZSAtby4KKwlldmFsIGFjX2N2X3Byb2dfY2NfJHthY19jY31fY19vPW5vCisgICAgICBmaQorICAgIGZpCisgIGZpCitlbHNlCisgIGV2YWwgYWNfY3ZfcHJvZ19jY18ke2FjX2NjfV9jX289bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0KgorCitmaQoraWYgZXZhbCB0ZXN0IFwkYWNfY3ZfcHJvZ19jY18ke2FjX2NjfV9jX28gPSB5ZXM7IHRoZW4KKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjY7IH0KK2Vsc2UKKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisKK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIE5PX01JTlVTX0NfTUlOVVNfTyAxCitfQUNFT0YKKworZmkKKworIyBGSVhNRTogd2UgcmVseSBvbiB0aGUgY2FjaGUgdmFyaWFibGUgbmFtZSBiZWNhdXNlCisjIHRoZXJlIGlzIG5vIG90aGVyIHdheS4KK3NldCBkdW1teSAkQ0MKK2FjX2NjPWBlY2hvICQyIHwgc2VkICdzL1teYS16QS1aMC05X10vXy9nO3MvXlswLTldL18vJ2AKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X3Byb2dfY2NfJyR7YWNfY2N9X2Nfb2BcIiAhPSB5ZXMiOyB0aGVuCisgICAjIExvc2luZyBjb21waWxlciwgc28gb3ZlcnJpZGUgd2l0aCB0aGUgc2NyaXB0LgorICAgIyBGSVhNRTogSXQgaXMgd3JvbmcgdG8gcmV3cml0ZSBDQy4KKyAgICMgQnV0IGlmIHdlIGRvbid0IHRoZW4gd2UgZ2V0IGludG8gdHJvdWJsZSBvZiBvbmUgc29ydCBvciBhbm90aGVyLgorICAgIyBBIGxvbmdlci10ZXJtIGZpeCB3b3VsZCBiZSB0byBoYXZlIGF1dG9tYWtlIHVzZSBhbV9fQ0MgaW4gdGhpcyBjYXNlLAorICAgIyBhbmQgdGhlbiB3ZSBjb3VsZCBzZXQgYW1fX0NDPSJcJCh0b3Bfc3JjZGlyKS9jb21waWxlIFwkKENDKSIKKyAgIENDPSIkYW1fYXV4X2Rpci9jb21waWxlICRDQyIKK2ZpCisKKworCitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1yYW5saWIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9cmFubGliOyBhY193b3JkPSQyCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfUkFOTElCK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgIGFjX2N2X3Byb2dfUkFOTElCPSIkUkFOTElCIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX1JBTkxJQj0iJHthY190b29sX3ByZWZpeH1yYW5saWIiCisgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKK2RvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitSQU5MSUI9JGFjX2N2X3Byb2dfUkFOTElCCitpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRSQU5MSUIiID4mNQorZWNobyAiJHtFQ0hPX1R9JFJBTkxJQiIgPiY2OyB9CitlbHNlCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfUkFOTElCIjsgdGhlbgorICBhY19jdF9SQU5MSUI9JFJBTkxJQgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInJhbmxpYiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgcmFubGliOyBhY193b3JkPSQyCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfUkFOTElCK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9SQU5MSUIiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCPSIkYWNfY3RfUkFOTElCIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X1JBTkxJQj0icmFubGliIgorICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCitkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfUkFOTElCPSRhY19jdl9wcm9nX2FjX2N0X1JBTkxJQgoraWYgdGVzdCAtbiAiJGFjX2N0X1JBTkxJQiI7IHRoZW4KKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfUkFOTElCIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdF9SQU5MSUIiID4mNjsgfQorZWxzZQorICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9SQU5MSUIiID0geDsgdGhlbgorICAgIFJBTkxJQj0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKK3dob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKK2NvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCit3aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCitjb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIFJBTkxJQj0kYWNfY3RfUkFOTElCCisgIGZpCitlbHNlCisgIFJBTkxJQj0iJGFjX2N2X3Byb2dfUkFOTElCIgorZmkKKworCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBfR05VX1NPVVJDRSAxCitfQUNFT0YKKworCisKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBBSVgiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgQUlYLi4uICRFQ0hPX0MiID4mNjsgfQorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaWZkZWYgX0FJWAorICB5ZXMKKyNlbmRpZgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJ5ZXMiID4vZGV2L251bGwgMj4mMTsgdGhlbgorICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1CitlY2hvICIke0VDSE9fVH15ZXMiID4mNjsgfQorY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgX0FMTF9TT1VSQ0UgMQorX0FDRU9GCisKK2Vsc2UKKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CitmaQorcm0gLWYgY29uZnRlc3QqCisKKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcy4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3N0ZGMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZmxvYXQuaD4KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICBhY19jdl9oZWFkZXJfc3RkYz15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX2N2X2hlYWRlcl9zdGRjPW5vCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKyAgIyBTdW5PUyA0Lnggc3RyaW5nLmggZG9lcyBub3QgZGVjbGFyZSBtZW0qLCBjb250cmFyeSB0byBBTlNJLgorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAibWVtY2hyIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgOgorZWxzZQorICBhY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCitmaQorCitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICAjIElTQyAyLjAuMiBzdGRsaWIuaCBkb2VzIG5vdCBkZWNsYXJlIGZyZWUsIGNvbnRyYXJ5IHRvIEFOU0kuCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJmcmVlIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgOgorZWxzZQorICBhY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCitmaQorCitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICAjIC9iaW4vY2MgaW4gSXJpeC00LjAuNSBnZXRzIG5vbi1BTlNJIGN0eXBlIG1hY3JvcyB1bmxlc3MgdXNpbmcgLWFuc2kuCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgIDoKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpZiAoKCcgJyAmIDB4MEZGKSA9PSAweDAyMCkKKyMgZGVmaW5lIElTTE9XRVIoYykgKCdhJyA8PSAoYykgJiYgKGMpIDw9ICd6JykKKyMgZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykgPyAnQScgKyAoKGMpIC0gJ2EnKSA6IChjKSkKKyNlbHNlCisjIGRlZmluZSBJU0xPV0VSKGMpIFwKKwkJICAgKCgnYScgPD0gKGMpICYmIChjKSA8PSAnaScpIFwKKwkJICAgICB8fCAoJ2onIDw9IChjKSAmJiAoYykgPD0gJ3InKSBcCisJCSAgICAgfHwgKCdzJyA8PSAoYykgJiYgKGMpIDw9ICd6JykpCisjIGRlZmluZSBUT1VQUEVSKGMpIChJU0xPV0VSKGMpID8gKChjKSB8IDB4NDApIDogKGMpKQorI2VuZGlmCisKKyNkZWZpbmUgWE9SKGUsIGYpICgoKGUpICYmICEoZikpIHx8ICghKGUpICYmIChmKSkpCitpbnQKK21haW4gKCkKK3sKKyAgaW50IGk7CisgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKKyAgICBpZiAoWE9SIChpc2xvd2VyIChpKSwgSVNMT1dFUiAoaSkpCisJfHwgdG91cHBlciAoaSkgIT0gVE9VUFBFUiAoaSkpCisgICAgICByZXR1cm4gMjsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCisgIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY190cnkiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIDoKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKK2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyggZXhpdCAkYWNfc3RhdHVzICkKK2FjX2N2X2hlYWRlcl9zdGRjPW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorCisKK2ZpCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3N0ZGMiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hlYWRlcl9zdGRjIiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIFNURENfSEVBREVSUyAxCitfQUNFT0YKKworZmkKKworIyBPbiBJUklYIDUuMywgc3lzL3R5cGVzIGFuZCBpbnR0eXBlcy5oIGFyZSBjb25mbGljdGluZy4KKworCisKKworCisKKworCisKK2ZvciBhY19oZWFkZXIgaW4gc3lzL3R5cGVzLmggc3lzL3N0YXQuaCBzdGRsaWIuaCBzdHJpbmcuaCBtZW1vcnkuaCBzdHJpbmdzLmggXAorCQkgIGludHR5cGVzLmggc3RkaW50LmggdW5pc3RkLmgKK2RvCithc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKKworI2luY2x1ZGUgPCRhY19oZWFkZXI+CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgZXZhbCAiJGFzX2FjX0hlYWRlcj15ZXMiCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlldmFsICIkYXNfYWNfSGVhZGVyPW5vIgorZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCisJICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KK2lmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworaWYgdGVzdCAiJHthY19jdl9oZWFkZXJfbWluaXhfY29uZmlnX2grc2V0fSIgPSBzZXQ7IHRoZW4KKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIG1pbml4L2NvbmZpZy5oIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG1pbml4L2NvbmZpZy5oLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9oZWFkZXJfbWluaXhfY29uZmlnX2grc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfbWluaXhfY29uZmlnX2giID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hlYWRlcl9taW5peF9jb25maWdfaCIgPiY2OyB9CitlbHNlCisgICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgbWluaXgvY29uZmlnLmggdXNhYmlsaXR5IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgbWluaXgvY29uZmlnLmggdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNjsgfQorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAorI2luY2x1ZGUgPG1pbml4L2NvbmZpZy5oPgorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisgIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX2hlYWRlcl9jb21waWxlcj1ubworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2OyB9CisKKyMgSXMgdGhlIGhlYWRlciBwcmVzZW50PworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgbWluaXgvY29uZmlnLmggcHJlc2VuY2UiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBtaW5peC9jb25maWcuaCBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjY7IH0KK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPG1pbml4L2NvbmZpZy5oPgorX0FDRU9GCitpZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKwkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH07IHRoZW4KKyAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyAgYWNfaGVhZGVyX3ByZXByb2M9bm8KK2ZpCisKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Cit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNjsgfQorCisjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKyAgeWVzOm5vOiApCisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogbWluaXgvY29uZmlnLmg6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiBtaW5peC9jb25maWcuaDogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBtaW5peC9jb25maWcuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6IG1pbml4L2NvbmZpZy5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworICAgIDs7CisgIG5vOnllczoqICkKKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBtaW5peC9jb25maWcuaDogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogbWluaXgvY29uZmlnLmg6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBtaW5peC9jb25maWcuaDogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6IG1pbml4L2NvbmZpZy5oOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IG1pbml4L2NvbmZpZy5oOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiBtaW5peC9jb25maWcuaDogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IG1pbml4L2NvbmZpZy5oOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogbWluaXgvY29uZmlnLmg6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogbWluaXgvY29uZmlnLmg6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogbWluaXgvY29uZmlnLmg6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IG1pbml4L2NvbmZpZy5oOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiBtaW5peC9jb25maWcuaDogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorICAgICggY2F0IDw8XF9BU0JPWAorIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBSZXBvcnQgdGhpcyB0byBidWctcGFydGVkQGdudS5vcmcgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworX0FTQk9YCisgICAgICkgfCBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKyAgICA7OworZXNhYworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIG1pbml4L2NvbmZpZy5oIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG1pbml4L2NvbmZpZy5oLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9oZWFkZXJfbWluaXhfY29uZmlnX2grc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgYWNfY3ZfaGVhZGVyX21pbml4X2NvbmZpZ19oPSRhY19oZWFkZXJfcHJlcHJvYworZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9taW5peF9jb25maWdfaCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGVhZGVyX21pbml4X2NvbmZpZ19oIiA+JjY7IH0KKworZmkKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9taW5peF9jb25maWdfaCA9IHllczsgdGhlbgorICBNSU5JWD15ZXMKK2Vsc2UKKyAgTUlOSVg9CitmaQorCisKK2lmIHRlc3QgIiRNSU5JWCIgPSB5ZXM7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgX1BPU0lYX1NPVVJDRSAxCitfQUNFT0YKKworCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBfUE9TSVhfMV9TT1VSQ0UgMgorX0FDRU9GCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgX01JTklYIDEKK19BQ0VPRgorCitmaQorCisKKworCisKKworCisKKworCisKKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBpdCBpcyBzYWZlIHRvIGRlZmluZSBfX0VYVEVOU0lPTlNfXyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgaXQgaXMgc2FmZSB0byBkZWZpbmUgX19FWFRFTlNJT05TX18uLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjCSAgZGVmaW5lIF9fRVhURU5TSU9OU19fIDEKKwkgICRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisgIGFjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX189bm8KK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXyIgPiY2OyB9CisgIHRlc3QgJGFjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fID0geWVzICYmCisgICAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgX19FWFRFTlNJT05TX18gMQorX0FDRU9GCisKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTIDEKK19BQ0VPRgorCisgIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIF9UQU5ERU1fU09VUkNFIDEKK19BQ0VPRgorCisKKworICAgY2FzZSAkYWNfY3ZfcHJvZ19jY19zdGRjIGluCisgIG5vKSBhY19jdl9wcm9nX2NjX2M5OT1ubzsgYWNfY3ZfcHJvZ19jY19jODk9bm8gOzsKKyAgKikgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBDOTkiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQgSVNPIEM5OS4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19jY19jOTkrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgYWNfY3ZfcHJvZ19jY19jOTk9bm8KK2FjX3NhdmVfQ0M9JENDCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisvLyBDaGVjayB2YXJhcmdzIG1hY3Jvcy4gIFRoZXNlIGV4YW1wbGVzIGFyZSB0YWtlbiBmcm9tIEM5OSA2LjEwLjMuNS4KKyNkZWZpbmUgZGVidWcoLi4uKSBmcHJpbnRmIChzdGRlcnIsIF9fVkFfQVJHU19fKQorI2RlZmluZSBzaG93bGlzdCguLi4pIHB1dHMgKCNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgcmVwb3J0KHRlc3QsLi4uKSAoKHRlc3QpID8gcHV0cyAoI3Rlc3QpIDogcHJpbnRmIChfX1ZBX0FSR1NfXykpCitzdGF0aWMgdm9pZAordGVzdF92YXJhcmdzX21hY3JvcyAodm9pZCkKK3sKKyAgaW50IHggPSAxMjM0OworICBpbnQgeSA9IDU2Nzg7CisgIGRlYnVnICgiRmxhZyIpOworICBkZWJ1ZyAoIlggPSAlZFxuIiwgeCk7CisgIHNob3dsaXN0IChUaGUgZmlyc3QsIHNlY29uZCwgYW5kIHRoaXJkIGl0ZW1zLik7CisgIHJlcG9ydCAoeD55LCAieCBpcyAlZCBidXQgeSBpcyAlZCIsIHgsIHkpOworfQorCisvLyBDaGVjayBsb25nIGxvbmcgdHlwZXMuCisjZGVmaW5lIEJJRzY0IDE4NDQ2NzQ0MDczNzA5NTUxNjE1dWxsCisjZGVmaW5lIEJJRzMyIDQyOTQ5NjcyOTV1bAorI2RlZmluZSBCSUdfT0sgKEJJRzY0IC8gQklHMzIgPT0gNDI5NDk2NzI5N3VsbCAmJiBCSUc2NCAlIEJJRzMyID09IDApCisjaWYgIUJJR19PSworICB5b3VyIHByZXByb2Nlc3NvciBpcyBicm9rZW47CisjZW5kaWYKKyNpZiBCSUdfT0sKKyNlbHNlCisgIHlvdXIgcHJlcHJvY2Vzc29yIGlzIGJyb2tlbjsKKyNlbmRpZgorc3RhdGljIGxvbmcgbG9uZyBpbnQgYmlnbnVtID0gLTkyMjMzNzIwMzY4NTQ3NzU4MDdMTDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHViaWdudW0gPSBCSUc2NDsKKworc3RydWN0IGluY29tcGxldGVfYXJyYXkKK3sKKyAgaW50IGRhdGFzaXplOworICBkb3VibGUgZGF0YVtdOworfTsKKworc3RydWN0IG5hbWVkX2luaXQgeworICBpbnQgbnVtYmVyOworICBjb25zdCB3Y2hhcl90ICpuYW1lOworICBkb3VibGUgYXZlcmFnZTsKK307CisKK3R5cGVkZWYgY29uc3QgY2hhciAqY2NwOworCitzdGF0aWMgaW5saW5lIGludAordGVzdF9yZXN0cmljdCAoY2NwIHJlc3RyaWN0IHRleHQpCit7CisgIC8vIFNlZSBpZiBDKystc3R5bGUgY29tbWVudHMgd29yay4KKyAgLy8gSXRlcmF0ZSB0aHJvdWdoIGl0ZW1zIHZpYSB0aGUgcmVzdHJpY3RlZCBwb2ludGVyLgorICAvLyBBbHNvIGNoZWNrIGZvciBkZWNsYXJhdGlvbnMgaW4gZm9yIGxvb3BzLgorICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgKih0ZXh0K2kpICE9ICdcMCc7ICsraSkKKyAgICBjb250aW51ZTsKKyAgcmV0dXJuIDA7Cit9CisKKy8vIENoZWNrIHZhcmFyZ3MgYW5kIHZhX2NvcHkuCitzdGF0aWMgdm9pZAordGVzdF92YXJhcmdzIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgdmFfbGlzdCBhcmdzOworICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKKyAgdmFfbGlzdCBhcmdzX2NvcHk7CisgIHZhX2NvcHkgKGFyZ3NfY29weSwgYXJncyk7CisKKyAgY29uc3QgY2hhciAqc3RyOworICBpbnQgbnVtYmVyOworICBmbG9hdCBmbnVtYmVyOworCisgIHdoaWxlICgqZm9ybWF0KQorICAgIHsKKyAgICAgIHN3aXRjaCAoKmZvcm1hdCsrKQorCXsKKwljYXNlICdzJzogLy8gc3RyaW5nCisJICBzdHIgPSB2YV9hcmcgKGFyZ3NfY29weSwgY29uc3QgY2hhciAqKTsKKwkgIGJyZWFrOworCWNhc2UgJ2QnOiAvLyBpbnQKKwkgIG51bWJlciA9IHZhX2FyZyAoYXJnc19jb3B5LCBpbnQpOworCSAgYnJlYWs7CisJY2FzZSAnZic6IC8vIGZsb2F0CisJICBmbnVtYmVyID0gdmFfYXJnIChhcmdzX2NvcHksIGRvdWJsZSk7CisJICBicmVhazsKKwlkZWZhdWx0OgorCSAgYnJlYWs7CisJfQorICAgIH0KKyAgdmFfZW5kIChhcmdzX2NvcHkpOworICB2YV9lbmQgKGFyZ3MpOworfQorCitpbnQKK21haW4gKCkKK3sKKworICAvLyBDaGVjayBib29sLgorICBfQm9vbCBzdWNjZXNzID0gZmFsc2U7CisKKyAgLy8gQ2hlY2sgcmVzdHJpY3QuCisgIGlmICh0ZXN0X3Jlc3RyaWN0ICgiU3RyaW5nIGxpdGVyYWwiKSA9PSAwKQorICAgIHN1Y2Nlc3MgPSB0cnVlOworICBjaGFyICpyZXN0cmljdCBuZXd2YXIgPSAiQW5vdGhlciBzdHJpbmciOworCisgIC8vIENoZWNrIHZhcmFyZ3MuCisgIHRlc3RfdmFyYXJncyAoInMsIGQnIGYgLiIsICJzdHJpbmciLCA2NSwgMzQuMjM0KTsKKyAgdGVzdF92YXJhcmdzX21hY3JvcyAoKTsKKworICAvLyBDaGVjayBmbGV4aWJsZSBhcnJheSBtZW1iZXJzLgorICBzdHJ1Y3QgaW5jb21wbGV0ZV9hcnJheSAqaWEgPQorICAgIG1hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgaW5jb21wbGV0ZV9hcnJheSkgKyAoc2l6ZW9mIChkb3VibGUpICogMTApKTsKKyAgaWEtPmRhdGFzaXplID0gMTA7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgaWEtPmRhdGFzaXplOyArK2kpCisgICAgaWEtPmRhdGFbaV0gPSBpICogMS4yMzQ7CisKKyAgLy8gQ2hlY2sgbmFtZWQgaW5pdGlhbGl6ZXJzLgorICBzdHJ1Y3QgbmFtZWRfaW5pdCBuaSA9IHsKKyAgICAubnVtYmVyID0gMzQsCisgICAgLm5hbWUgPSBMIlRlc3Qgd2lkZSBzdHJpbmciLAorICAgIC5hdmVyYWdlID0gNTQzLjM0MzQzLAorICB9OworCisgIG5pLm51bWJlciA9IDU4OworCisgIGludCBkeW5hbWljX2FycmF5W25pLm51bWJlcl07CisgIGR5bmFtaWNfYXJyYXlbbmkubnVtYmVyIC0gMV0gPSA1NDM7CisKKyAgLy8gd29yayBhcm91bmQgdW51c2VkIHZhcmlhYmxlIHdhcm5pbmdzCisgIHJldHVybiAoIXN1Y2Nlc3MgfHwgYmlnbnVtID09IDBMTCB8fCB1YmlnbnVtID09IDB1TEwgfHwgbmV3dmFyWzBdID09ICd4JworCSAgfHwgZHluYW1pY19hcnJheVtuaS5udW1iZXIgLSAxXSAhPSA1NDMpOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2ZvciBhY19hcmcgaW4gJycgLXN0ZD1nbnU5OSAtYzk5IC1xbGFuZ2x2bD1leHRjOTkKK2RvCisgIENDPSIkYWNfc2F2ZV9DQyAkYWNfYXJnIgorICBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisgIGFjX2N2X3Byb2dfY2NfYzk5PSRhY19hcmcKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0CisgIHRlc3QgIngkYWNfY3ZfcHJvZ19jY19jOTkiICE9ICJ4bm8iICYmIGJyZWFrCitkb25lCitybSAtZiBjb25mdGVzdC4kYWNfZXh0CitDQz0kYWNfc2F2ZV9DQworCitmaQorIyBBQ19DQUNIRV9WQUwKK2Nhc2UgIngkYWNfY3ZfcHJvZ19jY19jOTkiIGluCisgIHgpCisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBub25lIG5lZWRlZCIgPiY1CitlY2hvICIke0VDSE9fVH1ub25lIG5lZWRlZCIgPiY2OyB9IDs7CisgIHhubykKKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHVuc3VwcG9ydGVkIiA+JjUKK2VjaG8gIiR7RUNIT19UfXVuc3VwcG9ydGVkIiA+JjY7IH0gOzsKKyAgKikKKyAgICBDQz0iJENDICRhY19jdl9wcm9nX2NjX2M5OSIKKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX2M5OSIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfcHJvZ19jY19jOTkiID4mNjsgfSA7OworZXNhYworaWYgdGVzdCAieCRhY19jdl9wcm9nX2NjX2M5OSIgIT0geG5vOyB0aGVuCisgIGFjX2N2X3Byb2dfY2Nfc3RkYz0kYWNfY3ZfcHJvZ19jY19jOTkKK2Vsc2UKKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBDODkiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQgSVNPIEM4OS4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19jY19jODkrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgYWNfY3ZfcHJvZ19jY19jODk9bm8KK2FjX3NhdmVfQ0M9JENDCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisvKiBNb3N0IG9mIHRoZSBmb2xsb3dpbmcgdGVzdHMgYXJlIHN0b2xlbiBmcm9tIFJDUyA1LjcncyBzcmMvY29uZi5zaC4gICovCitzdHJ1Y3QgYnVmIHsgaW50IHg7IH07CitGSUxFICogKCpyY3NvcGVuKSAoc3RydWN0IGJ1ZiAqLCBzdHJ1Y3Qgc3RhdCAqLCBpbnQpOworc3RhdGljIGNoYXIgKmUgKHAsIGkpCisgICAgIGNoYXIgKipwOworICAgICBpbnQgaTsKK3sKKyAgcmV0dXJuIHBbaV07Cit9CitzdGF0aWMgY2hhciAqZiAoY2hhciAqICgqZykgKGNoYXIgKiosIGludCksIGNoYXIgKipwLCAuLi4pCit7CisgIGNoYXIgKnM7CisgIHZhX2xpc3QgdjsKKyAgdmFfc3RhcnQgKHYscCk7CisgIHMgPSBnIChwLCB2YV9hcmcgKHYsaW50KSk7CisgIHZhX2VuZCAodik7CisgIHJldHVybiBzOworfQorCisvKiBPU0YgNC4wIENvbXBhcSBjYyBpcyBzb21lIHNvcnQgb2YgYWxtb3N0LUFOU0kgYnkgZGVmYXVsdC4gIEl0IGhhcworICAgZnVuY3Rpb24gcHJvdG90eXBlcyBhbmQgc3R1ZmYsIGJ1dCBub3QgJ1x4SEgnIGhleCBjaGFyYWN0ZXIgY29uc3RhbnRzLgorICAgVGhlc2UgZG9uJ3QgcHJvdm9rZSBhbiBlcnJvciB1bmZvcnR1bmF0ZWx5LCBpbnN0ZWFkIGFyZSBzaWxlbnRseSB0cmVhdGVkCisgICBhcyAneCcuICBUaGUgZm9sbG93aW5nIGluZHVjZXMgYW4gZXJyb3IsIHVudGlsIC1zdGQgaXMgYWRkZWQgdG8gZ2V0CisgICBwcm9wZXIgQU5TSSBtb2RlLiAgQ3VyaW91c2x5ICdceDAwJyE9J3gnIGFsd2F5cyBjb21lcyBvdXQgdHJ1ZSwgZm9yIGFuCisgICBhcnJheSBzaXplIGF0IGxlYXN0LiAgSXQncyBuZWNlc3NhcnkgdG8gd3JpdGUgJ1x4MDAnPT0wIHRvIGdldCBzb21ldGhpbmcKKyAgIHRoYXQncyB0cnVlIG9ubHkgd2l0aCAtc3RkLiAgKi8KK2ludCBvc2Y0X2NjX2FycmF5IFsnXHgwMCcgPT0gMCA/IDEgOiAtMV07CisKKy8qIElCTSBDIDYgZm9yIEFJWCBpcyBhbG1vc3QtQU5TSSBieSBkZWZhdWx0LCBidXQgaXQgcmVwbGFjZXMgbWFjcm8gcGFyYW1ldGVycworICAgaW5zaWRlIHN0cmluZ3MgYW5kIGNoYXJhY3RlciBjb25zdGFudHMuICAqLworI2RlZmluZSBGT08oeCkgJ3gnCitpbnQgeGxjNl9jY19hcnJheVtGT08oYSkgPT0gJ3gnID8gMSA6IC0xXTsKKworaW50IHRlc3QgKGludCBpLCBkb3VibGUgeCk7CitzdHJ1Y3QgczEge2ludCAoKmYpIChpbnQgYSk7fTsKK3N0cnVjdCBzMiB7aW50ICgqZikgKGRvdWJsZSBhKTt9OworaW50IHBhaXJuYW1lcyAoaW50LCBjaGFyICoqLCBGSUxFICooKikoc3RydWN0IGJ1ZiAqLCBzdHJ1Y3Qgc3RhdCAqLCBpbnQpLCBpbnQsIGludCk7CitpbnQgYXJnYzsKK2NoYXIgKiphcmd2OworaW50CittYWluICgpCit7CityZXR1cm4gZiAoZSwgYXJndiwgMCkgIT0gYXJndlswXSAgfHwgIGYgKGUsIGFyZ3YsIDEpICE9IGFyZ3ZbMV07CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2ZvciBhY19hcmcgaW4gJycgLXFsYW5nbHZsPWV4dGM4OSAtcWxhbmdsdmw9YW5zaSAtc3RkIFwKKwktQWUgIi1BYSAtRF9IUFVYX1NPVVJDRSIgIi1YYyAtRF9fRVhURU5TSU9OU19fIgorZG8KKyAgQ0M9IiRhY19zYXZlX0NDICRhY19hcmciCisgIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgYWNfY3ZfcHJvZ19jY19jODk9JGFjX2FyZworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisKK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgdGVzdCAieCRhY19jdl9wcm9nX2NjX2M4OSIgIT0gInhubyIgJiYgYnJlYWsKK2RvbmUKK3JtIC1mIGNvbmZ0ZXN0LiRhY19leHQKK0NDPSRhY19zYXZlX0NDCisKK2ZpCisjIEFDX0NBQ0hFX1ZBTAorY2FzZSAieCRhY19jdl9wcm9nX2NjX2M4OSIgaW4KKyAgeCkKKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vbmUgbmVlZGVkIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vbmUgbmVlZGVkIiA+JjY7IH0gOzsKKyAgeG5vKQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogdW5zdXBwb3J0ZWQiID4mNQorZWNobyAiJHtFQ0hPX1R9dW5zdXBwb3J0ZWQiID4mNjsgfSA7OworICAqKQorICAgIENDPSIkQ0MgJGFjX2N2X3Byb2dfY2NfYzg5IgorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3Byb2dfY2NfYzg5IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9wcm9nX2NjX2M4OSIgPiY2OyB9IDs7Citlc2FjCitpZiB0ZXN0ICJ4JGFjX2N2X3Byb2dfY2NfYzg5IiAhPSB4bm87IHRoZW4KKyAgYWNfY3ZfcHJvZ19jY19zdGRjPSRhY19jdl9wcm9nX2NjX2M4OQorZWxzZQorICBhY19jdl9wcm9nX2NjX3N0ZGM9bm8KK2ZpCisKKworZmkKKworIDs7Citlc2FjCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBJU08gU3RhbmRhcmQgQyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBJU08gU3RhbmRhcmQgQy4uLiAkRUNIT19DIiA+JjY7IH0KKyAgaWYgdGVzdCAiJHthY19jdl9wcm9nX2NjX3N0ZGMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2ZpCisKKyAgY2FzZSAkYWNfY3ZfcHJvZ19jY19zdGRjIGluCisgIG5vKSB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHVuc3VwcG9ydGVkIiA+JjUKK2VjaG8gIiR7RUNIT19UfXVuc3VwcG9ydGVkIiA+JjY7IH0gOzsKKyAgJycpIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm9uZSBuZWVkZWQiID4mNQorZWNobyAiJHtFQ0hPX1R9bm9uZSBuZWVkZWQiID4mNjsgfSA7OworICAqKSB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX3N0ZGMiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3Byb2dfY2Nfc3RkYyIgPiY2OyB9IDs7Citlc2FjCisKKworCisKKworCisKKworCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbGFyZ2VmaWxlIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2xhcmdlZmlsZStzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9JGVuYWJsZV9sYXJnZWZpbGU7CitmaQorCitpZiB0ZXN0ICIkZW5hYmxlX2xhcmdlZmlsZSIgIT0gbm87IHRoZW4KKworICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3BlY2lhbCBDIGNvbXBpbGVyIG9wdGlvbnMgbmVlZGVkIGZvciBsYXJnZSBmaWxlcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzcGVjaWFsIEMgY29tcGlsZXIgb3B0aW9ucyBuZWVkZWQgZm9yIGxhcmdlIGZpbGVzLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9zeXNfbGFyZ2VmaWxlX0NDK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGFjX2N2X3N5c19sYXJnZWZpbGVfQ0M9bm8KKyAgICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisgICAgICAgYWNfc2F2ZV9DQz0kQ0MKKyAgICAgICB3aGlsZSA6OyBkbworCSAjIElSSVggNi4yIGFuZCBsYXRlciBkbyBub3Qgc3VwcG9ydCBsYXJnZSBmaWxlcyBieSBkZWZhdWx0LAorCSAjIHNvIHVzZSB0aGUgQyBjb21waWxlcidzIC1uMzIgb3B0aW9uIGlmIHRoYXQgaGVscHMuCisJIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorIC8qIENoZWNrIHRoYXQgb2ZmX3QgY2FuIHJlcHJlc2VudCAyKio2MyAtIDEgY29ycmVjdGx5LgorICAgIFdlIGNhbid0IHNpbXBseSBkZWZpbmUgTEFSR0VfT0ZGX1QgdG8gYmUgOTIyMzM3MjAzNjg1NDc3NTgwNywKKyAgICBzaW5jZSBzb21lIEMrKyBjb21waWxlcnMgbWFzcXVlcmFkaW5nIGFzIEMgY29tcGlsZXJzCisgICAgaW5jb3JyZWN0bHkgcmVqZWN0IDkyMjMzNzIwMzY4NTQ3NzU4MDcuICAqLworI2RlZmluZSBMQVJHRV9PRkZfVCAoKChvZmZfdCkgMSA8PCA2MikgLSAxICsgKChvZmZfdCkgMSA8PCA2MikpCisgIGludCBvZmZfdF9pc19sYXJnZVsoTEFSR0VfT0ZGX1QgJSAyMTQ3NDgzNjI5ID09IDcyMQorCQkgICAgICAgJiYgTEFSR0VfT0ZGX1QgJSAyMTQ3NDgzNjQ3ID09IDEpCisJCSAgICAgID8gMSA6IC0xXTsKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKKwkgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICBicmVhaworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisKK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQKKwkgQ0M9IiRDQyAtbjMyIgorCSBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisgIGFjX2N2X3N5c19sYXJnZWZpbGVfQ0M9JyAtbjMyJzsgYnJlYWsKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0CisJIGJyZWFrCisgICAgICAgZG9uZQorICAgICAgIENDPSRhY19zYXZlX0NDCisgICAgICAgcm0gLWYgY29uZnRlc3QuJGFjX2V4dAorICAgIGZpCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfc3lzX2xhcmdlZmlsZV9DQyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3Zfc3lzX2xhcmdlZmlsZV9DQyIgPiY2OyB9CisgIGlmIHRlc3QgIiRhY19jdl9zeXNfbGFyZ2VmaWxlX0NDIiAhPSBubzsgdGhlbgorICAgIENDPSRDQyRhY19jdl9zeXNfbGFyZ2VmaWxlX0NDCisgIGZpCisKKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIF9GSUxFX09GRlNFVF9CSVRTIHZhbHVlIG5lZWRlZCBmb3IgbGFyZ2UgZmlsZXMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgX0ZJTEVfT0ZGU0VUX0JJVFMgdmFsdWUgbmVlZGVkIGZvciBsYXJnZSBmaWxlcy4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3Zfc3lzX2ZpbGVfb2Zmc2V0X2JpdHMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgd2hpbGUgOjsgZG8KKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgLyogQ2hlY2sgdGhhdCBvZmZfdCBjYW4gcmVwcmVzZW50IDIqKjYzIC0gMSBjb3JyZWN0bHkuCisgICAgV2UgY2FuJ3Qgc2ltcGx5IGRlZmluZSBMQVJHRV9PRkZfVCB0byBiZSA5MjIzMzcyMDM2ODU0Nzc1ODA3LAorICAgIHNpbmNlIHNvbWUgQysrIGNvbXBpbGVycyBtYXNxdWVyYWRpbmcgYXMgQyBjb21waWxlcnMKKyAgICBpbmNvcnJlY3RseSByZWplY3QgOTIyMzM3MjAzNjg1NDc3NTgwNy4gICovCisjZGVmaW5lIExBUkdFX09GRl9UICgoKG9mZl90KSAxIDw8IDYyKSAtIDEgKyAoKG9mZl90KSAxIDw8IDYyKSkKKyAgaW50IG9mZl90X2lzX2xhcmdlWyhMQVJHRV9PRkZfVCAlIDIxNDc0ODM2MjkgPT0gNzIxCisJCSAgICAgICAmJiBMQVJHRV9PRkZfVCAlIDIxNDc0ODM2NDcgPT0gMSkKKwkJICAgICAgPyAxIDogLTFdOworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICBhY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cz1ubzsgYnJlYWsKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjZGVmaW5lIF9GSUxFX09GRlNFVF9CSVRTIDY0CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgLyogQ2hlY2sgdGhhdCBvZmZfdCBjYW4gcmVwcmVzZW50IDIqKjYzIC0gMSBjb3JyZWN0bHkuCisgICAgV2UgY2FuJ3Qgc2ltcGx5IGRlZmluZSBMQVJHRV9PRkZfVCB0byBiZSA5MjIzMzcyMDM2ODU0Nzc1ODA3LAorICAgIHNpbmNlIHNvbWUgQysrIGNvbXBpbGVycyBtYXNxdWVyYWRpbmcgYXMgQyBjb21waWxlcnMKKyAgICBpbmNvcnJlY3RseSByZWplY3QgOTIyMzM3MjAzNjg1NDc3NTgwNy4gICovCisjZGVmaW5lIExBUkdFX09GRl9UICgoKG9mZl90KSAxIDw8IDYyKSAtIDEgKyAoKG9mZl90KSAxIDw8IDYyKSkKKyAgaW50IG9mZl90X2lzX2xhcmdlWyhMQVJHRV9PRkZfVCAlIDIxNDc0ODM2MjkgPT0gNzIxCisJCSAgICAgICAmJiBMQVJHRV9PRkZfVCAlIDIxNDc0ODM2NDcgPT0gMSkKKwkJICAgICAgPyAxIDogLTFdOworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICBhY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cz02NDsgYnJlYWsKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgYWNfY3Zfc3lzX2ZpbGVfb2Zmc2V0X2JpdHM9dW5rbm93bgorICBicmVhaworZG9uZQorZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3N5c19maWxlX29mZnNldF9iaXRzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cyIgPiY2OyB9CitjYXNlICRhY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cyBpbiAjKAorICBubyB8IHVua25vd24pIDs7CisgICopCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIF9GSUxFX09GRlNFVF9CSVRTICRhY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cworX0FDRU9GCis7OworZXNhYworcm0gLWYgY29uZnRlc3QqCisgIGlmIHRlc3QgJGFjX2N2X3N5c19maWxlX29mZnNldF9iaXRzID0gdW5rbm93bjsgdGhlbgorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBfTEFSR0VfRklMRVMgdmFsdWUgbmVlZGVkIGZvciBsYXJnZSBmaWxlcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBfTEFSR0VfRklMRVMgdmFsdWUgbmVlZGVkIGZvciBsYXJnZSBmaWxlcy4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3Zfc3lzX2xhcmdlX2ZpbGVzK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIHdoaWxlIDo7IGRvCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorIC8qIENoZWNrIHRoYXQgb2ZmX3QgY2FuIHJlcHJlc2VudCAyKio2MyAtIDEgY29ycmVjdGx5LgorICAgIFdlIGNhbid0IHNpbXBseSBkZWZpbmUgTEFSR0VfT0ZGX1QgdG8gYmUgOTIyMzM3MjAzNjg1NDc3NTgwNywKKyAgICBzaW5jZSBzb21lIEMrKyBjb21waWxlcnMgbWFzcXVlcmFkaW5nIGFzIEMgY29tcGlsZXJzCisgICAgaW5jb3JyZWN0bHkgcmVqZWN0IDkyMjMzNzIwMzY4NTQ3NzU4MDcuICAqLworI2RlZmluZSBMQVJHRV9PRkZfVCAoKChvZmZfdCkgMSA8PCA2MikgLSAxICsgKChvZmZfdCkgMSA8PCA2MikpCisgIGludCBvZmZfdF9pc19sYXJnZVsoTEFSR0VfT0ZGX1QgJSAyMTQ3NDgzNjI5ID09IDcyMQorCQkgICAgICAgJiYgTEFSR0VfT0ZGX1QgJSAyMTQ3NDgzNjQ3ID09IDEpCisJCSAgICAgID8gMSA6IC0xXTsKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgYWNfY3Zfc3lzX2xhcmdlX2ZpbGVzPW5vOyBicmVhaworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisKK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNkZWZpbmUgX0xBUkdFX0ZJTEVTIDEKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAvKiBDaGVjayB0aGF0IG9mZl90IGNhbiByZXByZXNlbnQgMioqNjMgLSAxIGNvcnJlY3RseS4KKyAgICBXZSBjYW4ndCBzaW1wbHkgZGVmaW5lIExBUkdFX09GRl9UIHRvIGJlIDkyMjMzNzIwMzY4NTQ3NzU4MDcsCisgICAgc2luY2Ugc29tZSBDKysgY29tcGlsZXJzIG1hc3F1ZXJhZGluZyBhcyBDIGNvbXBpbGVycworICAgIGluY29ycmVjdGx5IHJlamVjdCA5MjIzMzcyMDM2ODU0Nzc1ODA3LiAgKi8KKyNkZWZpbmUgTEFSR0VfT0ZGX1QgKCgob2ZmX3QpIDEgPDwgNjIpIC0gMSArICgob2ZmX3QpIDEgPDwgNjIpKQorICBpbnQgb2ZmX3RfaXNfbGFyZ2VbKExBUkdFX09GRl9UICUgMjE0NzQ4MzYyOSA9PSA3MjEKKwkJICAgICAgICYmIExBUkdFX09GRl9UICUgMjE0NzQ4MzY0NyA9PSAxKQorCQkgICAgICA/IDEgOiAtMV07CitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisgIGFjX2N2X3N5c19sYXJnZV9maWxlcz0xOyBicmVhaworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisKK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBhY19jdl9zeXNfbGFyZ2VfZmlsZXM9dW5rbm93bgorICBicmVhaworZG9uZQorZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3N5c19sYXJnZV9maWxlcyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3Zfc3lzX2xhcmdlX2ZpbGVzIiA+JjY7IH0KK2Nhc2UgJGFjX2N2X3N5c19sYXJnZV9maWxlcyBpbiAjKAorICBubyB8IHVua25vd24pIDs7CisgICopCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIF9MQVJHRV9GSUxFUyAkYWNfY3Zfc3lzX2xhcmdlX2ZpbGVzCitfQUNFT0YKKzs7Citlc2FjCitybSAtZiBjb25mdGVzdCoKKyAgZmkKK2ZpCisKKworIyBUaGUgVWx0cml4IDQuMiBtaXBzIGJ1aWx0aW4gYWxsb2NhIGRlY2xhcmVkIGJ5IGFsbG9jYS5oIG9ubHkgd29ya3MKKyMgZm9yIGNvbnN0YW50IGFyZ3VtZW50cy4gIFVzZWxlc3MhCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igd29ya2luZyBhbGxvY2EuaCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciB3b3JraW5nIGFsbG9jYS5oLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl93b3JraW5nX2FsbG9jYV9oK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGFsbG9jYS5oPgoraW50CittYWluICgpCit7CitjaGFyICpwID0gKGNoYXIgKikgYWxsb2NhICgyICogc2l6ZW9mIChpbnQpKTsKKwkJCSAgaWYgKHApIHJldHVybiAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgYWNfY3Zfd29ya2luZ19hbGxvY2FfaD15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX2N2X3dvcmtpbmdfYWxsb2NhX2g9bm8KK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3dvcmtpbmdfYWxsb2NhX2giID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3dvcmtpbmdfYWxsb2NhX2giID4mNjsgfQoraWYgdGVzdCAkYWNfY3Zfd29ya2luZ19hbGxvY2FfaCA9IHllczsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBIQVZFX0FMTE9DQV9IIDEKK19BQ0VPRgorCitmaQorCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgYWxsb2NhIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGFsbG9jYS4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfZnVuY19hbGxvY2Ffd29ya3Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaWZkZWYgX19HTlVDX18KKyMgZGVmaW5lIGFsbG9jYSBfX2J1aWx0aW5fYWxsb2NhCisjZWxzZQorIyBpZmRlZiBfTVNDX1ZFUgorIyAgaW5jbHVkZSA8bWFsbG9jLmg+CisjICBkZWZpbmUgYWxsb2NhIF9hbGxvY2EKKyMgZWxzZQorIyAgaWZkZWYgSEFWRV9BTExPQ0FfSAorIyAgIGluY2x1ZGUgPGFsbG9jYS5oPgorIyAgZWxzZQorIyAgIGlmZGVmIF9BSVgKKyAjcHJhZ21hIGFsbG9jYQorIyAgIGVsc2UKKyMgICAgaWZuZGVmIGFsbG9jYSAvKiBwcmVkZWZpbmVkIGJ5IEhQIGNjICtPbGliY2FsbHMgKi8KK2NoYXIgKmFsbG9jYSAoKTsKKyMgICAgZW5kaWYKKyMgICBlbmRpZgorIyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRpZgorCitpbnQKK21haW4gKCkKK3sKK2NoYXIgKnAgPSAoY2hhciAqKSBhbGxvY2EgKDEpOworCQkJCSAgICBpZiAocCkgcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKyAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorICBhY19jdl9mdW5jX2FsbG9jYV93b3Jrcz15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX2N2X2Z1bmNfYWxsb2NhX3dvcmtzPW5vCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX2FsbG9jYV93b3JrcyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY19hbGxvY2Ffd29ya3MiID4mNjsgfQorCitpZiB0ZXN0ICRhY19jdl9mdW5jX2FsbG9jYV93b3JrcyA9IHllczsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBIQVZFX0FMTE9DQSAxCitfQUNFT0YKKworZWxzZQorICAjIFRoZSBTVlIzIGxpYlBXIGFuZCBTVlI0IGxpYnVjYiBib3RoIGNvbnRhaW4gaW5jb21wYXRpYmxlIGZ1bmN0aW9ucworIyB0aGF0IGNhdXNlIHRyb3VibGUuICBTb21lIHZlcnNpb25zIGRvIG5vdCBldmVuIGNvbnRhaW4gYWxsb2NhIG9yCisjIGNvbnRhaW4gYSBidWdneSB2ZXJzaW9uLiAgSWYgeW91IHN0aWxsIHdhbnQgdG8gdXNlIHRoZWlyIGFsbG9jYSwKKyMgdXNlIGFyIHRvIGV4dHJhY3QgYWxsb2NhLm8gZnJvbSB0aGVtIGluc3RlYWQgb2YgY29tcGlsaW5nIGFsbG9jYS5jLgorCitBTExPQ0E9XCR7TElCT0JKRElSfWFsbG9jYS4kYWNfb2JqZXh0CisKK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIENfQUxMT0NBIDEKK19BQ0VPRgorCisKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgXGBhbGxvY2EuYycgbmVlZHMgQ3JheSBob29rcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgXGBhbGxvY2EuYycgbmVlZHMgQ3JheSBob29rcy4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3Zfb3NfY3JheStzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpZiBkZWZpbmVkIENSQVkgJiYgISBkZWZpbmVkIENSQVkyCit3ZWJlY3JheQorI2Vsc2UKK3dlbm90YmVjcmF5CisjZW5kaWYKKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAid2ViZWNyYXkiID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhY19jdl9vc19jcmF5PXllcworZWxzZQorICBhY19jdl9vc19jcmF5PW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9vc19jcmF5IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9vc19jcmF5IiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X29zX2NyYXkgPSB5ZXM7IHRoZW4KKyAgZm9yIGFjX2Z1bmMgaW4gX2dldGI2NyBHRVRCNjcgZ2V0YjY3OyBkbworICAgIGFzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB7IGFzX3Zhcj0kYXNfYWNfdmFyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCisgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKyNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCisKKy8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KKyAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKworI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKworI3VuZGVmICRhY19mdW5jCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgJGFjX2Z1bmMgKCk7CisvKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCisgICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKKyAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KKyNpZiBkZWZpbmVkIF9fc3R1Yl8kYWNfZnVuYyB8fCBkZWZpbmVkIF9fc3R1Yl9fXyRhY19mdW5jCitjaG9rZSBtZQorI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworcmV0dXJuICRhY19mdW5jICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlldmFsICIkYXNfYWNfdmFyPW5vIgorZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgCisJICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KK2lmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBDUkFZX1NUQUNLU0VHX0VORCAkYWNfZnVuYworX0FDRU9GCisKKyAgICBicmVhaworZmkKKworICBkb25lCitmaQorCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBzdGFjayBkaXJlY3Rpb24gZm9yIEMgYWxsb2NhIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgc3RhY2sgZGlyZWN0aW9uIGZvciBDIGFsbG9jYS4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfY19zdGFja19kaXJlY3Rpb24rc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgYWNfY3ZfY19zdGFja19kaXJlY3Rpb249MAorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK2ZpbmRfc3RhY2tfZGlyZWN0aW9uICgpCit7CisgIHN0YXRpYyBjaGFyICphZGRyID0gMDsKKyAgYXV0byBjaGFyIGR1bW15OworICBpZiAoYWRkciA9PSAwKQorICAgIHsKKyAgICAgIGFkZHIgPSAmZHVtbXk7CisgICAgICByZXR1cm4gZmluZF9zdGFja19kaXJlY3Rpb24gKCk7CisgICAgfQorICBlbHNlCisgICAgcmV0dXJuICgmZHVtbXkgPiBhZGRyKSA/IDEgOiAtMTsKK30KKworaW50CittYWluICgpCit7CisgIHJldHVybiBmaW5kX3N0YWNrX2RpcmVjdGlvbiAoKSA8IDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCisgIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY190cnkiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X2Nfc3RhY2tfZGlyZWN0aW9uPTEKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKK2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyggZXhpdCAkYWNfc3RhdHVzICkKK2FjX2N2X2Nfc3RhY2tfZGlyZWN0aW9uPS0xCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorCisKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9jX3N0YWNrX2RpcmVjdGlvbiIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfY19zdGFja19kaXJlY3Rpb24iID4mNjsgfQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFNUQUNLX0RJUkVDVElPTiAkYWNfY3ZfY19zdGFja19kaXJlY3Rpb24KK19BQ0VPRgorCisKK2ZpCisKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzaXplX3QiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc2l6ZV90Li4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl90eXBlX3NpemVfdCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0Cit0eXBlZGVmIHNpemVfdCBhY19fdHlwZV9uZXdfOworaW50CittYWluICgpCit7CitpZiAoKGFjX190eXBlX25ld18gKikgMCkKKyAgcmV0dXJuIDA7CitpZiAoc2l6ZW9mIChhY19fdHlwZV9uZXdfKSkKKyAgcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgYWNfY3ZfdHlwZV9zaXplX3Q9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19jdl90eXBlX3NpemVfdD1ubworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9zaXplX3QiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfc2l6ZV90IiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X3R5cGVfc2l6ZV90ID0geWVzOyB0aGVuCisgIDoKK2Vsc2UKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBzaXplX3QgdW5zaWduZWQgaW50CitfQUNFT0YKKworZmkKKworCisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBzeXN0ZW0gaXMgV2luZG93cyBvciBNU0RPUyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgc3lzdGVtIGlzIFdpbmRvd3Mgb3IgTVNET1MuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3dpbl9vcl9kb3Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworCWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKyNpZiAhZGVmaW5lZCBfV0lOMzIgJiYgIWRlZmluZWQgX19XSU4zMl9fICYmICFkZWZpbmVkIF9fTVNET1NfXyAmJiAhZGVmaW5lZCBfX0NZR1dJTl9fCituZWl0aGVyIE1TRE9TIG5vciBXaW5kb3dzCisjZW5kaWYKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICBhY19jdl93aW5fb3JfZG9zPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfY3Zfd2luX29yX2Rvcz1ubworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl93aW5fb3JfZG9zIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl93aW5fb3JfZG9zIiA+JjY7IH0KKworICAgIGlmIHRlc3QgeCIkYWNfY3Zfd2luX29yX2RvcyIgPSB4eWVzOyB0aGVuCisgICAgICBhY19mc19hY2NlcHRzX2RyaXZlX2xldHRlcl9wcmVmaXg9MQorICAgICAgYWNfZnNfYmFja3NsYXNoX2lzX2ZpbGVfbmFtZV9zZXBhcmF0b3I9MQorICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBkcml2ZSBsZXR0ZXIgY2FuIHN0YXJ0IHJlbGF0aXZlIHBhdGgiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIGRyaXZlIGxldHRlciBjYW4gc3RhcnQgcmVsYXRpdmUgcGF0aC4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfZHJpdmVfbGV0dGVyX2Nhbl9iZV9yZWxhdGl2ZStzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorCisJICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisjaWYgZGVmaW5lZCBfX0NZR1dJTl9fCitkcml2ZSBsZXR0ZXJzIGFyZSBhbHdheXMgYWJzb2x1dGUKKyNlbmRpZgorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisgIGFjX2N2X2RyaXZlX2xldHRlcl9jYW5fYmVfcmVsYXRpdmU9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19jdl9kcml2ZV9sZXR0ZXJfY2FuX2JlX3JlbGF0aXZlPW5vCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2RyaXZlX2xldHRlcl9jYW5fYmVfcmVsYXRpdmUiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2RyaXZlX2xldHRlcl9jYW5fYmVfcmVsYXRpdmUiID4mNjsgfQorICAgICAgaWYgdGVzdCB4IiRhY19jdl9kcml2ZV9sZXR0ZXJfY2FuX2JlX3JlbGF0aXZlIiA9IHh5ZXM7IHRoZW4KKwlhY19mc19kcml2ZV9sZXR0ZXJfY2FuX2JlX3JlbGF0aXZlPTEKKyAgICAgIGVsc2UKKwlhY19mc19kcml2ZV9sZXR0ZXJfY2FuX2JlX3JlbGF0aXZlPTAKKyAgICAgIGZpCisgICAgZWxzZQorICAgICAgYWNfZnNfYWNjZXB0c19kcml2ZV9sZXR0ZXJfcHJlZml4PTAKKyAgICAgIGFjX2ZzX2JhY2tzbGFzaF9pc19maWxlX25hbWVfc2VwYXJhdG9yPTAKKyAgICAgIGFjX2ZzX2RyaXZlX2xldHRlcl9jYW5fYmVfcmVsYXRpdmU9MAorICAgIGZpCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBGSUxFX1NZU1RFTV9BQ0NFUFRTX0RSSVZFX0xFVFRFUl9QUkVGSVggJGFjX2ZzX2FjY2VwdHNfZHJpdmVfbGV0dGVyX3ByZWZpeAorX0FDRU9GCisKKworCisKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEZJTEVfU1lTVEVNX0JBQ0tTTEFTSF9JU19GSUxFX05BTUVfU0VQQVJBVE9SICRhY19mc19iYWNrc2xhc2hfaXNfZmlsZV9uYW1lX3NlcGFyYXRvcgorX0FDRU9GCisKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEZJTEVfU1lTVEVNX0RSSVZFX1BSRUZJWF9DQU5fQkVfUkVMQVRJVkUgJGFjX2ZzX2RyaXZlX2xldHRlcl9jYW5fYmVfcmVsYXRpdmUKK19BQ0VPRgorCisKKworCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgLy8gaXMgZGlzdGluY3QgZnJvbSAvIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciAvLyBpcyBkaXN0aW5jdCBmcm9tIC8uLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2dsX2N2X2RvdWJsZV9zbGFzaF9yb290K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgICBpZiB0ZXN0IHgiJGNyb3NzX2NvbXBpbGluZyIgPSB4eWVzIDsgdGhlbgorCSMgV2hlbiBjcm9zcy1jb21waWxpbmcsIHRoZXJlIGlzIG5vIHdheSB0byB0ZWxsIHdoZXRoZXIgLy8gaXMgc3BlY2lhbAorCSMgc2hvcnQgb2YgYSBsaXN0IG9mIGhvc3RzLiAgSG93ZXZlciwgdGhlIG9ubHkga25vd24gaG9zdHMgdG8gZGF0ZQorCSMgdGhhdCBoYXZlIGEgZGlzdGluY3QgLy8gYXJlIEFwb2xsbyBEb21haW5PUyAodG9vIG9sZCB0byBwb3J0IHRvKSwKKwkjIEN5Z3dpbiwgYW5kIHovT1MuICBJZiBhbnlvbmUga25vd3Mgb2YgYW5vdGhlciBzeXN0ZW0gZm9yIHdoaWNoIC8vIGhhcworCSMgc3BlY2lhbCBzZW1hbnRpY3MgYW5kIGlzIGRpc3RpbmN0IGZyb20gLywgcGxlYXNlIHJlcG9ydCBpdCB0bworCSMgPGJ1Zy1nbnVsaWJAZ251Lm9yZz4uCisJY2FzZSAkaG9zdCBpbgorCSAgKi1jeWd3aW4gfCBpMzcwLWlibS1vcGVuZWRpdGlvbikKKwkgICAgZ2xfY3ZfZG91YmxlX3NsYXNoX3Jvb3Q9eWVzIDs7CisJICAqKQorCSAgICAjIEJlIG9wdGltaXN0aWMgYW5kIGFzc3VtZSB0aGF0IC8gYW5kIC8vIGFyZSB0aGUgc2FtZSB3aGVuIHdlCisJICAgICMgZG9uJ3Qga25vdy4KKwkgICAgZ2xfY3ZfZG91YmxlX3NsYXNoX3Jvb3Q9J3Vua25vd24sIGFzc3VtaW5nIG5vJyA7OworCWVzYWMKKyAgICAgIGVsc2UKKwlzZXQgeCBgbHMgLWRpIC8gLy9gCisJaWYgdGVzdCAkMiA9ICQ0ICYmIHdjIC8vZGV2L251bGwgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJICBnbF9jdl9kb3VibGVfc2xhc2hfcm9vdD1ubworCWVsc2UKKwkgIGdsX2N2X2RvdWJsZV9zbGFzaF9yb290PXllcworCWZpCisgICAgICBmaQorZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGdsX2N2X2RvdWJsZV9zbGFzaF9yb290IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRnbF9jdl9kb3VibGVfc2xhc2hfcm9vdCIgPiY2OyB9CisgIGlmIHRlc3QgIiRnbF9jdl9kb3VibGVfc2xhc2hfcm9vdCIgPSB5ZXM7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgRE9VQkxFX1NMQVNIX0lTX0RJU1RJTkNUX1JPT1QgMQorX0FDRU9GCisKKyAgZmkKKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBzdHJlcnJvcl9yIGlzIGRlY2xhcmVkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBzdHJlcnJvcl9yIGlzIGRlY2xhcmVkLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9oYXZlX2RlY2xfc3RyZXJyb3JfcitzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKKyNpZm5kZWYgc3RyZXJyb3JfcgorICAodm9pZCkgc3RyZXJyb3JfcjsKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgYWNfY3ZfaGF2ZV9kZWNsX3N0cmVycm9yX3I9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19jdl9oYXZlX2RlY2xfc3RyZXJyb3Jfcj1ubworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX3N0cmVycm9yX3IiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfZGVjbF9zdHJlcnJvcl9yIiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X2hhdmVfZGVjbF9zdHJlcnJvcl9yID0geWVzOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9ERUNMX1NUUkVSUk9SX1IgMQorX0FDRU9GCisKKworZWxzZQorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfREVDTF9TVFJFUlJPUl9SIDAKK19BQ0VPRgorCisKK2ZpCisKKworCitmb3IgYWNfZnVuYyBpbiBzdHJlcnJvcl9yCitkbworYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHsgYXNfdmFyPSRhc19hY192YXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisvKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KKyAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKKworLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgorICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorCisjdW5kZWYgJGFjX2Z1bmMKKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciAkYWNfZnVuYyAoKTsKKy8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKKyAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAorICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworI2lmIGRlZmluZWQgX19zdHViXyRhY19mdW5jIHx8IGRlZmluZWQgX19zdHViX19fJGFjX2Z1bmMKK2Nob2tlIG1lCisjZW5kaWYKKworaW50CittYWluICgpCit7CityZXR1cm4gJGFjX2Z1bmMgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKyAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorICBldmFsICIkYXNfYWNfdmFyPXllcyIKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWV2YWwgIiRhc19hY192YXI9bm8iCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCithY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AKKwkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQoraWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorZG9uZQorCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHN0cmVycm9yX3IgcmV0dXJucyBjaGFyICoiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHN0cmVycm9yX3IgcmV0dXJucyBjaGFyICouLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2Z1bmNfc3RyZXJyb3Jfcl9jaGFyX3Arc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworICAgIGFjX2N2X2Z1bmNfc3RyZXJyb3Jfcl9jaGFyX3A9bm8KKyAgICBpZiB0ZXN0ICRhY19jdl9oYXZlX2RlY2xfc3RyZXJyb3JfciA9IHllczsgdGhlbgorICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CisKKwkgIGNoYXIgYnVmWzEwMF07CisJICBjaGFyIHggPSAqc3RyZXJyb3JfciAoMCwgYnVmLCBzaXplb2YgYnVmKTsKKwkgIGNoYXIgKnAgPSBzdHJlcnJvcl9yICgwLCBidWYsIHNpemVvZiBidWYpOworCSAgcmV0dXJuICFwIHx8IHg7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICBhY19jdl9mdW5jX3N0cmVycm9yX3JfY2hhcl9wPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisKK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgIGVsc2UKKyAgICAgICMgc3RyZXJyb3JfciBpcyBub3QgZGVjbGFyZWQuICBDaG9vc2UgYmV0d2VlbgorICAgICAgIyBzeXN0ZW1zIHRoYXQgaGF2ZSByZWxhdGl2ZWx5IGluYWNjZXNzaWJsZSBkZWNsYXJhdGlvbnMgZm9yIHRoZQorICAgICAgIyBmdW5jdGlvbi4gIEJlT1MgYW5kIERFQyBVTklYIDQuMCBmYWxsIGluIHRoaXMgY2F0ZWdvcnksIGJ1dCB0aGUKKyAgICAgICMgZm9ybWVyIGhhcyBhIHN0cmVycm9yX3IgdGhhdCByZXR1cm5zIGNoYXIqLCB3aGlsZSB0aGUgbGF0dGVyCisgICAgICAjIGhhcyBhIHN0cmVycm9yX3IgdGhhdCByZXR1cm5zIGBpbnQnLgorICAgICAgIyBUaGlzIHRlc3Qgc2hvdWxkIHNlZ2ZhdWx0IG9uIHRoZSBERUMgc3lzdGVtLgorICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgOgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CisJZXh0ZXJuIGNoYXIgKnN0cmVycm9yX3IgKCk7CitpbnQKK21haW4gKCkKK3sKK2NoYXIgYnVmWzEwMF07CisJICBjaGFyIHggPSAqc3RyZXJyb3JfciAoMCwgYnVmLCBzaXplb2YgYnVmKTsKKwkgIHJldHVybiAhIGlzYWxwaGEgKHgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfdHJ5IikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9mdW5jX3N0cmVycm9yX3JfY2hhcl9wPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKKworCisgICAgZmkKKworZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfc3RyZXJyb3Jfcl9jaGFyX3AiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2Z1bmNfc3RyZXJyb3Jfcl9jaGFyX3AiID4mNjsgfQoraWYgdGVzdCAkYWNfY3ZfZnVuY19zdHJlcnJvcl9yX2NoYXJfcCA9IHllczsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBTVFJFUlJPUl9SX0NIQVJfUCAxCitfQUNFT0YKKworZmkKKworCisKKworCitmb3IgYWNfaGVhZGVyIGluICRhY19oZWFkZXJfbGlzdAorZG8KK2FzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAoraWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZmkKK2FjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CitlbHNlCisgICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjY7IH0KK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKKyNpbmNsdWRlIDwkYWNfaGVhZGVyPgorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisgIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX2hlYWRlcl9jb21waWxlcj1ubworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2OyB9CisKKyMgSXMgdGhlIGhlYWRlciBwcmVzZW50PworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2OyB9CitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDwkYWNfaGVhZGVyPgorX0FDRU9GCitpZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKwkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH07IHRoZW4KKyAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyAgYWNfaGVhZGVyX3ByZXByb2M9bm8KK2ZpCisKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Cit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNjsgfQorCisjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKyAgeWVzOm5vOiApCisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisgICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCisgICAgOzsKKyAgbm86eWVzOiogKQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CisgICAgKCBjYXQgPDxcX0FTQk9YCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1wYXJ0ZWRAZ251Lm9yZyAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCitfQVNCT1gKKyAgICAgKSB8IHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorICAgIDs7Citlc2FjCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCitmaQorYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCisJICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKworZmkKK2lmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworCisKKyAgaWYgdGVzdCAteiAiJEdFVE9QVF9IIjsgdGhlbgorCitmb3IgYWNfaGVhZGVyIGluIGdldG9wdC5oCitkbworYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCitpZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitmaQorYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCisJICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KK2Vsc2UKKyAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/Cit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNjsgfQorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAorI2luY2x1ZGUgPCRhY19oZWFkZXI+CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfaGVhZGVyX2NvbXBpbGVyPW5vCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjY7IH0KKworIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/Cit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjY7IH0KK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPCRhY19oZWFkZXI+CitfQUNFT0YKK2lmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfTsgdGhlbgorICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworICBhY19oZWFkZXJfcHJlcHJvYz1ubworZmkKKworcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2OyB9CisKKyMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorICB5ZXM6bm86ICkKKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKyAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKyAgICA7OworICBubzp5ZXM6KiApCisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKyAgICAoIGNhdCA8PFxfQVNCT1gKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgUmVwb3J0IHRoaXMgdG8gYnVnLXBhcnRlZEBnbnUub3JnICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKK19BU0JPWAorICAgICApIHwgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCisgICAgOzsKK2VzYWMKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKK2ZpCithY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AKKwkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorCitmaQoraWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2Vsc2UKKyAgR0VUT1BUX0g9Z2V0b3B0LmgKK2ZpCisKK2RvbmUKKworICBmaQorCisgIGlmIHRlc3QgLXogIiRHRVRPUFRfSCI7IHRoZW4KKworZm9yIGFjX2Z1bmMgaW4gZ2V0b3B0X2xvbmdfb25seQorZG8KK2FzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB7IGFzX3Zhcj0kYXNfYWNfdmFyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCisgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKyNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCisKKy8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KKyAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKworI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKworI3VuZGVmICRhY19mdW5jCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgJGFjX2Z1bmMgKCk7CisvKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCisgICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKKyAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KKyNpZiBkZWZpbmVkIF9fc3R1Yl8kYWNfZnVuYyB8fCBkZWZpbmVkIF9fc3R1Yl9fXyRhY19mdW5jCitjaG9rZSBtZQorI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworcmV0dXJuICRhY19mdW5jICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlldmFsICIkYXNfYWNfdmFyPW5vIgorZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgCisJICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KK2lmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZWxzZQorICBHRVRPUFRfSD1nZXRvcHQuaAorZmkKK2RvbmUKKworICBmaQorCisgICAgICBpZiB0ZXN0IC16ICIkR0VUT1BUX0giOyB0aGVuCisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBvcHRyZXNldCBpcyBkZWNsYXJlZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgb3B0cmVzZXQgaXMgZGVjbGFyZWQuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2hhdmVfZGVjbF9vcHRyZXNldCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxnZXRvcHQuaD4KKworaW50CittYWluICgpCit7CisjaWZuZGVmIG9wdHJlc2V0CisgICh2b2lkKSBvcHRyZXNldDsKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgYWNfY3ZfaGF2ZV9kZWNsX29wdHJlc2V0PXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfY3ZfaGF2ZV9kZWNsX29wdHJlc2V0PW5vCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfb3B0cmVzZXQiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfZGVjbF9vcHRyZXNldCIgPiY2OyB9CitpZiB0ZXN0ICRhY19jdl9oYXZlX2RlY2xfb3B0cmVzZXQgPSB5ZXM7IHRoZW4KKyAgR0VUT1BUX0g9Z2V0b3B0LmgKK2ZpCisKKyAgZmkKKworICAgICAgaWYgdGVzdCAteiAiJEdFVE9QVF9IIjsgdGhlbgorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB3b3JraW5nIEdOVSBnZXRvcHQgZnVuY3Rpb24iID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igd29ya2luZyBHTlUgZ2V0b3B0IGZ1bmN0aW9uLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHtnbF9jdl9mdW5jX2dudV9nZXRvcHQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgCSAJIAkgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBnZXRvcHRfY2xpcCBpcyBkZWNsYXJlZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgZ2V0b3B0X2NsaXAgaXMgZGVjbGFyZWQuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2hhdmVfZGVjbF9nZXRvcHRfY2xpcCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxnZXRvcHQuaD4KKworaW50CittYWluICgpCit7CisjaWZuZGVmIGdldG9wdF9jbGlwCisgICh2b2lkKSBnZXRvcHRfY2xpcDsKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgYWNfY3ZfaGF2ZV9kZWNsX2dldG9wdF9jbGlwPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfY3ZfaGF2ZV9kZWNsX2dldG9wdF9jbGlwPW5vCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfZ2V0b3B0X2NsaXAiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfZGVjbF9nZXRvcHRfY2xpcCIgPiY2OyB9CitpZiB0ZXN0ICRhY19jdl9oYXZlX2RlY2xfZ2V0b3B0X2NsaXAgPSB5ZXM7IHRoZW4KKyAgZ2xfY3ZfZnVuY19nbnVfZ2V0b3B0PW5vCitlbHNlCisgIGdsX2N2X2Z1bmNfZ251X2dldG9wdD15ZXMKK2ZpCisKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8Z2V0b3B0Lmg+CitpbnQKK21haW4gKCkKK3sKKworCSAgICAgY2hhciAqbXlhcmd2WzNdOworCSAgICAgbXlhcmd2WzBdID0gImNvbmZ0ZXN0IjsKKwkgICAgIG15YXJndlsxXSA9ICItKyI7CisJICAgICBteWFyZ3ZbMl0gPSAwOworCSAgICAgcmV0dXJuIGdldG9wdCAoMiwgbXlhcmd2LCAiK2EiKSAhPSAnPyc7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgZ2xfY3ZfZnVuY19nbnVfZ2V0b3B0PXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworKCBleGl0ICRhY19zdGF0dXMgKQorZ2xfY3ZfZnVuY19nbnVfZ2V0b3B0PW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorCisKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRnbF9jdl9mdW5jX2dudV9nZXRvcHQiID4mNQorZWNobyAiJHtFQ0hPX1R9JGdsX2N2X2Z1bmNfZ251X2dldG9wdCIgPiY2OyB9CisgICAgaWYgdGVzdCAiJGdsX2N2X2Z1bmNfZ251X2dldG9wdCIgPSAibm8iOyB0aGVuCisgICAgICBHRVRPUFRfSD1nZXRvcHQuaAorICAgIGZpCisgIGZpCisKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgZ2V0ZW52IGlzIGRlY2xhcmVkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBnZXRlbnYgaXMgZGVjbGFyZWQuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2hhdmVfZGVjbF9nZXRlbnYrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CisjaWZuZGVmIGdldGVudgorICAodm9pZCkgZ2V0ZW52OworI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICBhY19jdl9oYXZlX2RlY2xfZ2V0ZW52PXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfY3ZfaGF2ZV9kZWNsX2dldGVudj1ubworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX2dldGVudiIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX2dldGVudiIgPiY2OyB9CitpZiB0ZXN0ICRhY19jdl9oYXZlX2RlY2xfZ2V0ZW52ID0geWVzOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9ERUNMX0dFVEVOViAxCitfQUNFT0YKKworCitlbHNlCisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9ERUNMX0dFVEVOViAwCitfQUNFT0YKKworCitmaQorCisKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpbmxpbmUiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgaW5saW5lLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9jX2lubGluZStzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhY19jdl9jX2lubGluZT1ubworZm9yIGFjX2t3IGluIGlubGluZSBfX2lubGluZV9fIF9faW5saW5lOyBkbworICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpZm5kZWYgX19jcGx1c3BsdXMKK3R5cGVkZWYgaW50IGZvb190Oworc3RhdGljICRhY19rdyBmb29fdCBzdGF0aWNfZm9vICgpIHtyZXR1cm4gMDsgfQorJGFjX2t3IGZvb190IGZvbyAoKSB7cmV0dXJuIDA7IH0KKyNlbmRpZgorCitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgYWNfY3ZfY19pbmxpbmU9JGFjX2t3CitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIHRlc3QgIiRhY19jdl9jX2lubGluZSIgIT0gbm8gJiYgYnJlYWsKK2RvbmUKKworZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2NfaW5saW5lIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9jX2lubGluZSIgPiY2OyB9CisKKworY2FzZSAkYWNfY3ZfY19pbmxpbmUgaW4KKyAgaW5saW5lIHwgeWVzKSA7OworICAqKQorICAgIGNhc2UgJGFjX2N2X2NfaW5saW5lIGluCisgICAgICBubykgYWNfdmFsPTs7CisgICAgICAqKSBhY192YWw9JGFjX2N2X2NfaW5saW5lOzsKKyAgICBlc2FjCisgICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2lmbmRlZiBfX2NwbHVzcGx1cworI2RlZmluZSBpbmxpbmUgJGFjX3ZhbAorI2VuZGlmCitfQUNFT0YKKyAgICA7OworZXNhYworCisKKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGxvbmcgbG9uZyBpbnQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbG9uZyBsb25nIGludC4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfdHlwZV9sb25nX2xvbmdfaW50K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworbG9uZyBsb25nIGludCBsbCA9IDkyMjMzNzIwMzY4NTQ3NzU4MDdsbDsKKwkgICAgbG9uZyBsb25nIGludCBubGwgPSAtOTIyMzM3MjAzNjg1NDc3NTgwN0xMOworCSAgICB0eXBlZGVmIGludCBhWygoLTkyMjMzNzIwMzY4NTQ3NzU4MDdMTCA8IDAKKwkJCSAgICAmJiAwIDwgOTIyMzM3MjAzNjg1NDc3NTgwN2xsKQorCQkJICAgPyAxIDogLTEpXTsKKwkgICAgaW50IGkgPSA2MzsKK2ludAorbWFpbiAoKQoreworbG9uZyBsb25nIGludCBsbG1heCA9IDkyMjMzNzIwMzY4NTQ3NzU4MDdsbDsKKwkgICAgcmV0dXJuICgobGwgPDwgNjMpIHwgKGxsID4+IDYzKSB8IChsbCA8IGkpIHwgKGxsID4gaSkKKwkJICAgIHwgKGxsbWF4IC8gbGwpIHwgKGxsbWF4ICUgbGwpKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgIAkJICAgICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICBhY19jdl90eXBlX2xvbmdfbG9uZ19pbnQ9eWVzCitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGxpbWl0cy5oPgorCSAgICAgICAjaWZuZGVmIExMT05HX01BWAorCSAgICAgICAjIGRlZmluZSBIQUxGIFwKKwkJCSgxTEwgPDwgKHNpemVvZiAobG9uZyBsb25nIGludCkgKiBDSEFSX0JJVCAtIDIpKQorCSAgICAgICAjIGRlZmluZSBMTE9OR19NQVggKEhBTEYgLSAxICsgSEFMRikKKwkgICAgICAgI2VuZGlmCitpbnQKK21haW4gKCkKK3sKK2xvbmcgbG9uZyBpbnQgbiA9IDE7CisJICAgICAgIGludCBpOworCSAgICAgICBmb3IgKGkgPSAwOyA7IGkrKykKKwkJIHsKKwkJICAgbG9uZyBsb25nIGludCBtID0gbiA8PCBpOworCQkgICBpZiAobSA+PiBpICE9IG4pCisJCSAgICAgcmV0dXJuIDE7CisJCSAgIGlmIChMTE9OR19NQVggLyAyIDwgbSkKKwkJICAgICBicmVhazsKKwkJIH0KKwkgICAgICAgcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCisgIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY190cnkiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X3R5cGVfbG9uZ19sb25nX2ludD15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKK2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyggZXhpdCAkYWNfc3RhdHVzICkKK2FjX2N2X3R5cGVfbG9uZ19sb25nX2ludD1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKKworCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19jdl90eXBlX2xvbmdfbG9uZ19pbnQ9bm8KK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfbG9uZ19sb25nX2ludCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9sb25nX2xvbmdfaW50IiA+JjY7IH0KKyAgaWYgdGVzdCAkYWNfY3ZfdHlwZV9sb25nX2xvbmdfaW50ID0geWVzOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIEhBVkVfTE9OR19MT05HX0lOVCAxCitfQUNFT0YKKworICBmaQorCisKKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgdW5zaWduZWQgbG9uZyBsb25nIGludC4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmdfaW50K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLwordW5zaWduZWQgbG9uZyBsb25nIGludCB1bGwgPSAxODQ0Njc0NDA3MzcwOTU1MTYxNVVMTDsKKwkgICAgdHlwZWRlZiBpbnQgYVsoMTg0NDY3NDQwNzM3MDk1NTE2MTVVTEwgPD0gKHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQpIC0xCisJCQkgICA/IDEgOiAtMSldOworCSAgIGludCBpID0gNjM7CitpbnQKK21haW4gKCkKK3sKK3Vuc2lnbmVkIGxvbmcgbG9uZyBpbnQgdWxsbWF4ID0gMTg0NDY3NDQwNzM3MDk1NTE2MTV1bGw7CisJICAgIHJldHVybiAodWxsIDw8IDYzIHwgdWxsID4+IDYzIHwgdWxsIDw8IGkgfCB1bGwgPj4gaQorCQkgICAgfCB1bGxtYXggLyB1bGwgfCB1bGxtYXggJSB1bGwpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmdfaW50PXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmdfaW50PW5vCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZ19pbnQiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nX2ludCIgPiY2OyB9CisgIGlmIHRlc3QgJGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nX2ludCA9IHllczsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlQgMQorX0FDRU9GCisKKyAgZmkKKworCisKKworCisKKyAgaWYgdGVzdCAkYWNfY3ZfdHlwZV9sb25nX2xvbmdfaW50ID0geWVzOyB0aGVuCisgICAgSEFWRV9MT05HX0xPTkdfSU5UPTEKKyAgZWxzZQorICAgIEhBVkVfTE9OR19MT05HX0lOVD0wCisgIGZpCisKKworICBpZiB0ZXN0ICRhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZ19pbnQgPSB5ZXM7IHRoZW4KKyAgICBIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlQ9MQorICBlbHNlCisgICAgSEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UPTAKKyAgZmkKKworCisgICAgICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfaW50dHlwZXNfaCA9IHllczsgdGhlbgorICAgIEhBVkVfSU5UVFlQRVNfSD0xCisgIGVsc2UKKyAgICBIQVZFX0lOVFRZUEVTX0g9MAorICBmaQorCisKKyAgICAgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zeXNfdHlwZXNfaCA9IHllczsgdGhlbgorICAgIEhBVkVfU1lTX1RZUEVTX0g9MQorICBlbHNlCisgICAgSEFWRV9TWVNfVFlQRVNfSD0wCisgIGZpCisKKworICAgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRpbnRfaCA9IHllczsgdGhlbgorICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgYWJzb2x1dGUgbmFtZSBvZiA8c3RkaW50Lmg+IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgYWJzb2x1dGUgbmFtZSBvZiA8c3RkaW50Lmg+Li4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHtnbF9jdl9hYnNvbHV0ZV9zdGRpbnRfaCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorCisKKworCisKKyAgICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkaW50X2ggPSB5ZXM7IHRoZW4KKyAgICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0ZGludC5oPgorX0FDRU9GCisgICAgICBnbF9jdl9hYnNvbHV0ZV9zdGRpbnRfaD1gKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorc2VkIC1uICdcIy9zdGRpbnQuaCN7cyMuKiJcKC4qL3N0ZGludC5oXCkiLiojXDEjO3MjXi9bXi9dIy8vJiM7cDtxO30nYAorICAgIGZpCisKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRnbF9jdl9hYnNvbHV0ZV9zdGRpbnRfaCIgPiY1CitlY2hvICIke0VDSE9fVH0kZ2xfY3ZfYWJzb2x1dGVfc3RkaW50X2giID4mNjsgfQorY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBBQlNPTFVURV9TVERJTlRfSCAiJGdsX2N2X2Fic29sdXRlX3N0ZGludF9oIgorX0FDRU9GCisKKworICAgIEFCU09MVVRFX1NURElOVF9IPVwiJGdsX2N2X2Fic29sdXRlX3N0ZGludF9oXCIKKyAgICBIQVZFX1NURElOVF9IPTEKKyAgZWxzZQorICAgIEFCU09MVVRFX1NURElOVF9IPVwibm8vc3VjaC9maWxlL3N0ZGludC5oXCIKKyAgICBIQVZFX1NURElOVF9IPTAKKyAgZmkKKworCisKKyAgICAgICAgICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkaW50X2ggPSB5ZXM7IHRoZW4KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHN0ZGludC5oIGNvbmZvcm1zIHRvIEM5OSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgc3RkaW50LmggY29uZm9ybXMgdG8gQzk5Li4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHtnbF9jdl9oZWFkZXJfd29ya2luZ19zdGRpbnRfaCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBnbF9jdl9oZWFkZXJfd29ya2luZ19zdGRpbnRfaD1ubworICAgICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorCisgICAgICAgICAvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyAgLyogQlNEL09TIDQuMC4xIGhhcyBhIGJ1ZzogPHN0ZGRlZi5oPiwgPHN0ZGlvLmg+IGFuZCA8dGltZS5oPiBtdXN0IGJlCisgICAgIGluY2x1ZGVkIGJlZm9yZSA8d2NoYXIuaD4uICAqLworICAjaW5jbHVkZSA8c3RkZGVmLmg+CisgICNpbmNsdWRlIDxzaWduYWwuaD4KKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgICNpbmNsdWRlIDx0aW1lLmg+CisgICNpbmNsdWRlIDx3Y2hhci5oPgorCisKKyNkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JPUyAxIC8qIHRvIG1ha2UgaXQgd29yayBhbHNvIGluIEMrKyBtb2RlICovCisjZGVmaW5lIF9fU1REQ19DT05TVEFOVF9NQUNST1MgMSAvKiB0byBtYWtlIGl0IHdvcmsgYWxzbyBpbiBDKysgbW9kZSAqLworI2luY2x1ZGUgQUJTT0xVVEVfU1RESU5UX0gKKyNpZmRlZiBJTlQ4X01BWAoraW50OF90IGExID0gSU5UOF9NQVg7CitpbnQ4X3QgYTFtaW4gPSBJTlQ4X01JTjsKKyNlbmRpZgorI2lmZGVmIElOVDE2X01BWAoraW50MTZfdCBhMiA9IElOVDE2X01BWDsKK2ludDE2X3QgYTJtaW4gPSBJTlQxNl9NSU47CisjZW5kaWYKKyNpZmRlZiBJTlQzMl9NQVgKK2ludDMyX3QgYTMgPSBJTlQzMl9NQVg7CitpbnQzMl90IGEzbWluID0gSU5UMzJfTUlOOworI2VuZGlmCisjaWZkZWYgSU5UNjRfTUFYCitpbnQ2NF90IGE0ID0gSU5UNjRfTUFYOworaW50NjRfdCBhNG1pbiA9IElOVDY0X01JTjsKKyNlbmRpZgorI2lmZGVmIFVJTlQ4X01BWAordWludDhfdCBiMSA9IFVJTlQ4X01BWDsKKyNlbHNlCit0eXBlZGVmIGludCBiMVsodW5zaWduZWQgY2hhcikgLTEgIT0gMjU1ID8gMSA6IC0xXTsKKyNlbmRpZgorI2lmZGVmIFVJTlQxNl9NQVgKK3VpbnQxNl90IGIyID0gVUlOVDE2X01BWDsKKyNlbmRpZgorI2lmZGVmIFVJTlQzMl9NQVgKK3VpbnQzMl90IGIzID0gVUlOVDMyX01BWDsKKyNlbmRpZgorI2lmZGVmIFVJTlQ2NF9NQVgKK3VpbnQ2NF90IGI0ID0gVUlOVDY0X01BWDsKKyNlbmRpZgoraW50X2xlYXN0OF90IGMxID0gSU5UOF9DICgweDdmKTsKK2ludF9sZWFzdDhfdCBjMW1heCA9IElOVF9MRUFTVDhfTUFYOworaW50X2xlYXN0OF90IGMxbWluID0gSU5UX0xFQVNUOF9NSU47CitpbnRfbGVhc3QxNl90IGMyID0gSU5UMTZfQyAoMHg3ZmZmKTsKK2ludF9sZWFzdDE2X3QgYzJtYXggPSBJTlRfTEVBU1QxNl9NQVg7CitpbnRfbGVhc3QxNl90IGMybWluID0gSU5UX0xFQVNUMTZfTUlOOworaW50X2xlYXN0MzJfdCBjMyA9IElOVDMyX0MgKDB4N2ZmZmZmZmYpOworaW50X2xlYXN0MzJfdCBjM21heCA9IElOVF9MRUFTVDMyX01BWDsKK2ludF9sZWFzdDMyX3QgYzNtaW4gPSBJTlRfTEVBU1QzMl9NSU47CitpbnRfbGVhc3Q2NF90IGM0ID0gSU5UNjRfQyAoMHg3ZmZmZmZmZmZmZmZmZmZmKTsKK2ludF9sZWFzdDY0X3QgYzRtYXggPSBJTlRfTEVBU1Q2NF9NQVg7CitpbnRfbGVhc3Q2NF90IGM0bWluID0gSU5UX0xFQVNUNjRfTUlOOwordWludF9sZWFzdDhfdCBkMSA9IFVJTlQ4X0MgKDB4ZmYpOwordWludF9sZWFzdDhfdCBkMW1heCA9IFVJTlRfTEVBU1Q4X01BWDsKK3VpbnRfbGVhc3QxNl90IGQyID0gVUlOVDE2X0MgKDB4ZmZmZik7Cit1aW50X2xlYXN0MTZfdCBkMm1heCA9IFVJTlRfTEVBU1QxNl9NQVg7Cit1aW50X2xlYXN0MzJfdCBkMyA9IFVJTlQzMl9DICgweGZmZmZmZmZmKTsKK3VpbnRfbGVhc3QzMl90IGQzbWF4ID0gVUlOVF9MRUFTVDMyX01BWDsKK3VpbnRfbGVhc3Q2NF90IGQ0ID0gVUlOVDY0X0MgKDB4ZmZmZmZmZmZmZmZmZmZmZik7Cit1aW50X2xlYXN0NjRfdCBkNG1heCA9IFVJTlRfTEVBU1Q2NF9NQVg7CitpbnRfZmFzdDhfdCBlMSA9IElOVF9GQVNUOF9NQVg7CitpbnRfZmFzdDhfdCBlMW1pbiA9IElOVF9GQVNUOF9NSU47CitpbnRfZmFzdDE2X3QgZTIgPSBJTlRfRkFTVDE2X01BWDsKK2ludF9mYXN0MTZfdCBlMm1pbiA9IElOVF9GQVNUMTZfTUlOOworaW50X2Zhc3QzMl90IGUzID0gSU5UX0ZBU1QzMl9NQVg7CitpbnRfZmFzdDMyX3QgZTNtaW4gPSBJTlRfRkFTVDMyX01JTjsKK2ludF9mYXN0NjRfdCBlNCA9IElOVF9GQVNUNjRfTUFYOworaW50X2Zhc3Q2NF90IGU0bWluID0gSU5UX0ZBU1Q2NF9NSU47Cit1aW50X2Zhc3Q4X3QgZjEgPSBVSU5UX0ZBU1Q4X01BWDsKK3VpbnRfZmFzdDE2X3QgZjIgPSBVSU5UX0ZBU1QxNl9NQVg7Cit1aW50X2Zhc3QzMl90IGYzID0gVUlOVF9GQVNUMzJfTUFYOwordWludF9mYXN0NjRfdCBmNCA9IFVJTlRfRkFTVDY0X01BWDsKKyNpZmRlZiBJTlRQVFJfTUFYCitpbnRwdHJfdCBnID0gSU5UUFRSX01BWDsKK2ludHB0cl90IGdtaW4gPSBJTlRQVFJfTUlOOworI2VuZGlmCisjaWZkZWYgVUlOVFBUUl9NQVgKK3VpbnRwdHJfdCBoID0gVUlOVFBUUl9NQVg7CisjZW5kaWYKK2ludG1heF90IGkgPSBJTlRNQVhfTUFYOwordWludG1heF90IGogPSBVSU5UTUFYX01BWDsKK3N0cnVjdCBzIHsKKyAgaW50IGNoZWNrX1BUUkRJRkY6IFBUUkRJRkZfTUlOIDwgKHB0cmRpZmZfdCkgMCAmJiAocHRyZGlmZl90KSAwIDwgUFRSRElGRl9NQVggPyAxIDogLTE7CisgIGludCBjaGVja19TSUdfQVRPTUlDOiBTSUdfQVRPTUlDX01JTiA8PSAoc2lnX2F0b21pY190KSAwICYmIChzaWdfYXRvbWljX3QpIDAgPCBTSUdfQVRPTUlDX01BWCA/IDEgOiAtMTsKKyAgaW50IGNoZWNrX1NJWkU6IChzaXplX3QpIDAgPCBTSVpFX01BWCA/IDEgOiAtMTsKKyAgaW50IGNoZWNrX1dDSEFSOiBXQ0hBUl9NSU4gPD0gKHdjaGFyX3QpIDAgJiYgKHdjaGFyX3QpIDAgPCBXQ0hBUl9NQVggPyAxIDogLTE7CisgIGludCBjaGVja19XSU5UOiBXSU5UX01JTiA8PSAod2ludF90KSAwICYmICh3aW50X3QpIDAgPCBXSU5UX01BWCA/IDEgOiAtMTsKKworICAvKiBEZXRlY3QgYnVncyBpbiBnbGliYyAyLjQgYW5kIFNvbGFyaXMgMTAgc3RkaW50LmgsIGFtb25nIG90aGVycy4gICovCisgIGludCBjaGVja19VSU5UOF9DOgorICAgICAgICAoLTEgPCBVSU5UOF9DICgwKSkgPT0gKC0xIDwgKHVpbnRfbGVhc3Q4X3QpIDApID8gMSA6IC0xOworICBpbnQgY2hlY2tfVUlOVDE2X0M6CisgICAgICAgICgtMSA8IFVJTlQxNl9DICgwKSkgPT0gKC0xIDwgKHVpbnRfbGVhc3QxNl90KSAwKSA/IDEgOiAtMTsKKworICAvKiBEZXRlY3QgYnVncyBpbiBPcGVuQlNEIDMuOSBzdGRpbnQuaC4gICovCisjaWZkZWYgVUlOVDhfTUFYCisgIGludCBjaGVja191aW50ODogKHVpbnQ4X3QpIC0xID09IFVJTlQ4X01BWCA/IDEgOiAtMTsKKyNlbmRpZgorI2lmZGVmIFVJTlQxNl9NQVgKKyAgaW50IGNoZWNrX3VpbnQxNjogKHVpbnQxNl90KSAtMSA9PSBVSU5UMTZfTUFYID8gMSA6IC0xOworI2VuZGlmCisjaWZkZWYgVUlOVDMyX01BWAorICBpbnQgY2hlY2tfdWludDMyOiAodWludDMyX3QpIC0xID09IFVJTlQzMl9NQVggPyAxIDogLTE7CisjZW5kaWYKKyNpZmRlZiBVSU5UNjRfTUFYCisgIGludCBjaGVja191aW50NjQ6ICh1aW50NjRfdCkgLTEgPT0gVUlOVDY0X01BWCA/IDEgOiAtMTsKKyNlbmRpZgorICBpbnQgY2hlY2tfdWludF9sZWFzdDg6ICh1aW50X2xlYXN0OF90KSAtMSA9PSBVSU5UX0xFQVNUOF9NQVggPyAxIDogLTE7CisgIGludCBjaGVja191aW50X2xlYXN0MTY6ICh1aW50X2xlYXN0MTZfdCkgLTEgPT0gVUlOVF9MRUFTVDE2X01BWCA/IDEgOiAtMTsKKyAgaW50IGNoZWNrX3VpbnRfbGVhc3QzMjogKHVpbnRfbGVhc3QzMl90KSAtMSA9PSBVSU5UX0xFQVNUMzJfTUFYID8gMSA6IC0xOworICBpbnQgY2hlY2tfdWludF9sZWFzdDY0OiAodWludF9sZWFzdDY0X3QpIC0xID09IFVJTlRfTEVBU1Q2NF9NQVggPyAxIDogLTE7CisgIGludCBjaGVja191aW50X2Zhc3Q4OiAodWludF9mYXN0OF90KSAtMSA9PSBVSU5UX0ZBU1Q4X01BWCA/IDEgOiAtMTsKKyAgaW50IGNoZWNrX3VpbnRfZmFzdDE2OiAodWludF9mYXN0MTZfdCkgLTEgPT0gVUlOVF9GQVNUMTZfTUFYID8gMSA6IC0xOworICBpbnQgY2hlY2tfdWludF9mYXN0MzI6ICh1aW50X2Zhc3QzMl90KSAtMSA9PSBVSU5UX0ZBU1QzMl9NQVggPyAxIDogLTE7CisgIGludCBjaGVja191aW50X2Zhc3Q2NDogKHVpbnRfZmFzdDY0X3QpIC0xID09IFVJTlRfRkFTVDY0X01BWCA/IDEgOiAtMTsKKyAgaW50IGNoZWNrX3VpbnRwdHI6ICh1aW50cHRyX3QpIC0xID09IFVJTlRQVFJfTUFYID8gMSA6IC0xOworICBpbnQgY2hlY2tfdWludG1heDogKHVpbnRtYXhfdCkgLTEgPT0gVUlOVE1BWF9NQVggPyAxIDogLTE7CisgIGludCBjaGVja19zaXplOiAoc2l6ZV90KSAtMSA9PSBTSVpFX01BWCA/IDEgOiAtMTsKK307CisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgZ2xfY3ZfaGVhZGVyX3dvcmtpbmdfc3RkaW50X2g9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkZ2xfY3ZfaGVhZGVyX3dvcmtpbmdfc3RkaW50X2giID4mNQorZWNobyAiJHtFQ0hPX1R9JGdsX2N2X2hlYWRlcl93b3JraW5nX3N0ZGludF9oIiA+JjY7IH0KKyAgZmkKKyAgaWYgdGVzdCAiJGdsX2N2X2hlYWRlcl93b3JraW5nX3N0ZGludF9oIiA9IHllczsgdGhlbgorICAgIFNURElOVF9IPQorICBlbHNlCisKKworZm9yIGFjX2hlYWRlciBpbiBzeXMvaW50dHlwZXMuaCBzeXMvYml0eXBlcy5oCitkbworYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCitpZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitmaQorYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCisJICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KK2Vsc2UKKyAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/Cit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNjsgfQorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAorI2luY2x1ZGUgPCRhY19oZWFkZXI+CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfaGVhZGVyX2NvbXBpbGVyPW5vCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjY7IH0KKworIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/Cit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjY7IH0KK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPCRhY19oZWFkZXI+CitfQUNFT0YKK2lmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfTsgdGhlbgorICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworICBhY19oZWFkZXJfcHJlcHJvYz1ubworZmkKKworcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2OyB9CisKKyMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorICB5ZXM6bm86ICkKKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKyAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKyAgICA7OworICBubzp5ZXM6KiApCisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKyAgICAoIGNhdCA8PFxfQVNCT1gKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgUmVwb3J0IHRoaXMgdG8gYnVnLXBhcnRlZEBnbnUub3JnICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKK19BU0JPWAorICAgICApIHwgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCisgICAgOzsKK2VzYWMKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKK2ZpCithY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AKKwkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorCitmaQoraWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworICAgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zeXNfaW50dHlwZXNfaCA9IHllczsgdGhlbgorICAgICAgSEFWRV9TWVNfSU5UVFlQRVNfSD0xCisgICAgZWxzZQorICAgICAgSEFWRV9TWVNfSU5UVFlQRVNfSD0wCisgICAgZmkKKworICAgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zeXNfYml0eXBlc19oID0geWVzOyB0aGVuCisgICAgICBIQVZFX1NZU19CSVRZUEVTX0g9MQorICAgIGVsc2UKKyAgICAgIEhBVkVfU1lTX0JJVFlQRVNfSD0wCisgICAgZmkKKworCisKKworCisKKworCisKKworICBmb3IgZ2x0eXBlIGluIHB0cmRpZmZfdCBzaWdfYXRvbWljX3Qgc2l6ZV90IHdjaGFyX3Qgd2ludF90IDsgZG8KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgYml0IHNpemUgb2YgJGdsdHlwZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBiaXQgc2l6ZSBvZiAkZ2x0eXBlLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgeyBhc192YXI9Z2xfY3ZfYml0c2l6ZW9mXyR7Z2x0eXBlfTsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICAjIERlcGVuZGluZyB1cG9uIHRoZSBzaXplLCBjb21wdXRlIHRoZSBsbyBhbmQgaGkgYm91bmRzLgorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyAgLyogQlNEL09TIDQuMC4xIGhhcyBhIGJ1ZzogPHN0ZGRlZi5oPiwgPHN0ZGlvLmg+IGFuZCA8dGltZS5oPiBtdXN0IGJlCisgICAgIGluY2x1ZGVkIGJlZm9yZSA8d2NoYXIuaD4uICAqLworICAjaW5jbHVkZSA8c3RkZGVmLmg+CisgICNpbmNsdWRlIDxzaWduYWwuaD4KKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgICNpbmNsdWRlIDx0aW1lLmg+CisgICNpbmNsdWRlIDx3Y2hhci5oPgorCisjaW5jbHVkZSA8bGltaXRzLmg+CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKChzaXplb2YgKCRnbHR5cGUpICogQ0hBUl9CSVQpID49IDApXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgYWNfbG89MCBhY19taWQ9MAorICB3aGlsZSA6OyBkbworICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisgIC8qIEJTRC9PUyA0LjAuMSBoYXMgYSBidWc6IDxzdGRkZWYuaD4sIDxzdGRpby5oPiBhbmQgPHRpbWUuaD4gbXVzdCBiZQorICAgICBpbmNsdWRlZCBiZWZvcmUgPHdjaGFyLmg+LiAgKi8KKyAgI2luY2x1ZGUgPHN0ZGRlZi5oPgorICAjaW5jbHVkZSA8c2lnbmFsLmg+CisgICNpbmNsdWRlIDxzdGRpby5oPgorICAjaW5jbHVkZSA8dGltZS5oPgorICAjaW5jbHVkZSA8d2NoYXIuaD4KKworI2luY2x1ZGUgPGxpbWl0cy5oPgoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoc2l6ZW9mICgkZ2x0eXBlKSAqIENIQVJfQklUKSA8PSAkYWNfbWlkKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisgIGFjX2hpPSRhY19taWQ7IGJyZWFrCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19sbz1gZXhwciAkYWNfbWlkICsgMWAKKwkJCWlmIHRlc3QgJGFjX2xvIC1sZSAkYWNfbWlkOyB0aGVuCisJCQkgIGFjX2xvPSBhY19oaT0KKwkJCSAgYnJlYWsKKwkJCWZpCisJCQlhY19taWQ9YGV4cHIgMiAnKicgJGFjX21pZCArIDFgCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZG9uZQorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyAgLyogQlNEL09TIDQuMC4xIGhhcyBhIGJ1ZzogPHN0ZGRlZi5oPiwgPHN0ZGlvLmg+IGFuZCA8dGltZS5oPiBtdXN0IGJlCisgICAgIGluY2x1ZGVkIGJlZm9yZSA8d2NoYXIuaD4uICAqLworICAjaW5jbHVkZSA8c3RkZGVmLmg+CisgICNpbmNsdWRlIDxzaWduYWwuaD4KKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgICNpbmNsdWRlIDx0aW1lLmg+CisgICNpbmNsdWRlIDx3Y2hhci5oPgorCisjaW5jbHVkZSA8bGltaXRzLmg+CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKChzaXplb2YgKCRnbHR5cGUpICogQ0hBUl9CSVQpIDwgMCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICBhY19oaT0tMSBhY19taWQ9LTEKKyAgd2hpbGUgOjsgZG8KKyAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAvKiBCU0QvT1MgNC4wLjEgaGFzIGEgYnVnOiA8c3RkZGVmLmg+LCA8c3RkaW8uaD4gYW5kIDx0aW1lLmg+IG11c3QgYmUKKyAgICAgaW5jbHVkZWQgYmVmb3JlIDx3Y2hhci5oPi4gICovCisgICNpbmNsdWRlIDxzdGRkZWYuaD4KKyAgI2luY2x1ZGUgPHNpZ25hbC5oPgorICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgI2luY2x1ZGUgPHRpbWUuaD4KKyAgI2luY2x1ZGUgPHdjaGFyLmg+CisKKyNpbmNsdWRlIDxsaW1pdHMuaD4KK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKHNpemVvZiAoJGdsdHlwZSkgKiBDSEFSX0JJVCkgPj0gJGFjX21pZCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICBhY19sbz0kYWNfbWlkOyBicmVhaworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfaGk9YGV4cHIgJygnICRhY19taWQgJyknIC0gMWAKKwkJCWlmIHRlc3QgJGFjX21pZCAtbGUgJGFjX2hpOyB0aGVuCisJCQkgIGFjX2xvPSBhY19oaT0KKwkJCSAgYnJlYWsKKwkJCWZpCisJCQlhY19taWQ9YGV4cHIgMiAnKicgJGFjX21pZGAKK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBkb25lCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19sbz0gYWNfaGk9CitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIyBCaW5hcnkgc2VhcmNoIGJldHdlZW4gbG8gYW5kIGhpIGJvdW5kcy4KK3doaWxlIHRlc3QgIngkYWNfbG8iICE9ICJ4JGFjX2hpIjsgZG8KKyAgYWNfbWlkPWBleHByICcoJyAkYWNfaGkgLSAkYWNfbG8gJyknIC8gMiArICRhY19sb2AKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyAgLyogQlNEL09TIDQuMC4xIGhhcyBhIGJ1ZzogPHN0ZGRlZi5oPiwgPHN0ZGlvLmg+IGFuZCA8dGltZS5oPiBtdXN0IGJlCisgICAgIGluY2x1ZGVkIGJlZm9yZSA8d2NoYXIuaD4uICAqLworICAjaW5jbHVkZSA8c3RkZGVmLmg+CisgICNpbmNsdWRlIDxzaWduYWwuaD4KKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgICNpbmNsdWRlIDx0aW1lLmg+CisgICNpbmNsdWRlIDx3Y2hhci5oPgorCisjaW5jbHVkZSA8bGltaXRzLmg+CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKChzaXplb2YgKCRnbHR5cGUpICogQ0hBUl9CSVQpIDw9ICRhY19taWQpXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgYWNfaGk9JGFjX21pZAorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfbG89YGV4cHIgJygnICRhY19taWQgJyknICsgMWAKK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZG9uZQorY2FzZSAkYWNfbG8gaW4KKz8qKSByZXN1bHQ9JGFjX2xvOzsKKycnKSByZXN1bHQ9dW5rbm93biA7OworZXNhYworZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAvKiBCU0QvT1MgNC4wLjEgaGFzIGEgYnVnOiA8c3RkZGVmLmg+LCA8c3RkaW8uaD4gYW5kIDx0aW1lLmg+IG11c3QgYmUKKyAgICAgaW5jbHVkZWQgYmVmb3JlIDx3Y2hhci5oPi4gICovCisgICNpbmNsdWRlIDxzdGRkZWYuaD4KKyAgI2luY2x1ZGUgPHNpZ25hbC5oPgorICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgI2luY2x1ZGUgPHRpbWUuaD4KKyAgI2luY2x1ZGUgPHdjaGFyLmg+CisKKyNpbmNsdWRlIDxsaW1pdHMuaD4KK3N0YXRpYyBsb25nIGludCBsb25ndmFsICgpIHsgcmV0dXJuIHNpemVvZiAoJGdsdHlwZSkgKiBDSEFSX0JJVDsgfQorc3RhdGljIHVuc2lnbmVkIGxvbmcgaW50IHVsb25ndmFsICgpIHsgcmV0dXJuIHNpemVvZiAoJGdsdHlwZSkgKiBDSEFSX0JJVDsgfQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CitpbnQKK21haW4gKCkKK3sKKworICBGSUxFICpmID0gZm9wZW4gKCJjb25mdGVzdC52YWwiLCAidyIpOworICBpZiAoISBmKQorICAgIHJldHVybiAxOworICBpZiAoKHNpemVvZiAoJGdsdHlwZSkgKiBDSEFSX0JJVCkgPCAwKQorICAgIHsKKyAgICAgIGxvbmcgaW50IGkgPSBsb25ndmFsICgpOworICAgICAgaWYgKGkgIT0gKHNpemVvZiAoJGdsdHlwZSkgKiBDSEFSX0JJVCkpCisJcmV0dXJuIDE7CisgICAgICBmcHJpbnRmIChmLCAiJWxkXG4iLCBpKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICB1bnNpZ25lZCBsb25nIGludCBpID0gdWxvbmd2YWwgKCk7CisgICAgICBpZiAoaSAhPSAoc2l6ZW9mICgkZ2x0eXBlKSAqIENIQVJfQklUKSkKKwlyZXR1cm4gMTsKKyAgICAgIGZwcmludGYgKGYsICIlbHVcbiIsIGkpOworICAgIH0KKyAgcmV0dXJuIGZlcnJvciAoZikgfHwgZmNsb3NlIChmKSAhPSAwOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCisgIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY190cnkiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIHJlc3VsdD1gY2F0IGNvbmZ0ZXN0LnZhbGAKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKK2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyggZXhpdCAkYWNfc3RhdHVzICkKK3Jlc3VsdD11bmtub3duCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29uZnRlc3QudmFsCisgICAgICAgZXZhbCBnbF9jdl9iaXRzaXplb2ZfJHtnbHR5cGV9PVwkcmVzdWx0CisKK2ZpCithY19yZXM9YGV2YWwgZWNobyAnJHsnZ2xfY3ZfYml0c2l6ZW9mXyR7Z2x0eXBlfSd9J2AKKwkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorICAgIGV2YWwgcmVzdWx0PVwkZ2xfY3ZfYml0c2l6ZW9mXyR7Z2x0eXBlfQorICAgIGlmIHRlc3QgJHJlc3VsdCA9IHVua25vd247IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdD0wCisgICAgZmkKKyAgICBHTFRZUEU9YGVjaG8gIiRnbHR5cGUiIHwgdHIgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6ICcgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaXydgCisgICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBCSVRTSVpFT0ZfJHtHTFRZUEV9ICRyZXN1bHQKK19BQ0VPRgorCisgICAgZXZhbCBCSVRTSVpFT0ZfJHtHTFRZUEV9PVwkcmVzdWx0CisgIGRvbmUKKworCisKKworCisKKworICBmb3IgZ2x0eXBlIGluIHNpZ19hdG9taWNfdCB3Y2hhcl90IHdpbnRfdCA7IGRvCisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAkZ2x0eXBlIGlzIHNpZ25lZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgJGdsdHlwZSBpcyBzaWduZWQuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB7IGFzX3Zhcj1nbF9jdl90eXBlXyR7Z2x0eXBlfV9zaWduZWQ7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyAgLyogQlNEL09TIDQuMC4xIGhhcyBhIGJ1ZzogPHN0ZGRlZi5oPiwgPHN0ZGlvLmg+IGFuZCA8dGltZS5oPiBtdXN0IGJlCisgICAgIGluY2x1ZGVkIGJlZm9yZSA8d2NoYXIuaD4uICAqLworICAjaW5jbHVkZSA8c3RkZGVmLmg+CisgICNpbmNsdWRlIDxzaWduYWwuaD4KKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgICNpbmNsdWRlIDx0aW1lLmg+CisgICNpbmNsdWRlIDx3Y2hhci5oPgorCisgICAgICAgICAgICBpbnQgdmVyaWZ5WzIgKiAoKCRnbHR5cGUpIC0xIDwgKCRnbHR5cGUpIDApIC0gMV07CitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisgIHJlc3VsdD15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCXJlc3VsdD1ubworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgZXZhbCBnbF9jdl90eXBlXyR7Z2x0eXBlfV9zaWduZWQ9XCRyZXN1bHQKKworZmkKK2FjX3Jlcz1gZXZhbCBlY2hvICckeydnbF9jdl90eXBlXyR7Z2x0eXBlfV9zaWduZWQnfSdgCisJICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKyAgICBldmFsIHJlc3VsdD1cJGdsX2N2X3R5cGVfJHtnbHR5cGV9X3NpZ25lZAorICAgIEdMVFlQRT1gZWNobyAkZ2x0eXBlIHwgdHIgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6ICcgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaXydgCisgICAgaWYgdGVzdCAiJHJlc3VsdCIgPSB5ZXM7IHRoZW4KKyAgICAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TSUdORURfJHtHTFRZUEV9IDEKK19BQ0VPRgorCisgICAgICBldmFsIEhBVkVfU0lHTkVEXyR7R0xUWVBFfT0xCisgICAgZWxzZQorICAgICAgZXZhbCBIQVZFX1NJR05FRF8ke0dMVFlQRX09MAorICAgIGZpCisgIGRvbmUKKworCisgIGdsX2N2X3R5cGVfcHRyZGlmZl90X3NpZ25lZD15ZXMKKyAgZ2xfY3ZfdHlwZV9zaXplX3Rfc2lnbmVkPW5vCisKKworCisKKworCisKKyAgZm9yIGdsdHlwZSBpbiBwdHJkaWZmX3Qgc2lnX2F0b21pY190IHNpemVfdCB3Y2hhcl90IHdpbnRfdCA7IGRvCisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRnbHR5cGUgaW50ZWdlciBsaXRlcmFsIHN1ZmZpeCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkZ2x0eXBlIGludGVnZXIgbGl0ZXJhbCBzdWZmaXguLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB7IGFzX3Zhcj1nbF9jdl90eXBlXyR7Z2x0eXBlfV9zdWZmaXg7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgZXZhbCBnbF9jdl90eXBlXyR7Z2x0eXBlfV9zdWZmaXg9bm8KKyAgICAgICBldmFsIHJlc3VsdD1cJGdsX2N2X3R5cGVfJHtnbHR5cGV9X3NpZ25lZAorICAgICAgIGlmIHRlc3QgIiRyZXN1bHQiID0geWVzOyB0aGVuCisgICAgICAgICBnbHN1ZnU9CisgICAgICAgZWxzZQorICAgICAgICAgZ2xzdWZ1PXUKKyAgICAgICBmaQorICAgICAgIGZvciBnbHN1ZiBpbiAiJGdsc3VmdSIgJHtnbHN1ZnV9bCAke2dsc3VmdX1sbCAke2dsc3VmdX1pNjQ7IGRvCisgICAgICAgICBjYXNlICRnbHN1ZiBpbgorICAgICAgICAgICAnJykgIGdsdHlwZTE9J2ludCc7OworICAgICAgICAgICBsKQlnbHR5cGUxPSdsb25nIGludCc7OworICAgICAgICAgICBsbCkJZ2x0eXBlMT0nbG9uZyBsb25nIGludCc7OworICAgICAgICAgICBpNjQpCWdsdHlwZTE9J19faW50NjQnOzsKKyAgICAgICAgICAgdSkJZ2x0eXBlMT0ndW5zaWduZWQgaW50Jzs7CisgICAgICAgICAgIHVsKQlnbHR5cGUxPSd1bnNpZ25lZCBsb25nIGludCc7OworICAgICAgICAgICB1bGwpCWdsdHlwZTE9J3Vuc2lnbmVkIGxvbmcgbG9uZyBpbnQnOzsKKyAgICAgICAgICAgdWk2NClnbHR5cGUxPSd1bnNpZ25lZCBfX2ludDY0Jzs7CisgICAgICAgICBlc2FjCisgICAgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAvKiBCU0QvT1MgNC4wLjEgaGFzIGEgYnVnOiA8c3RkZGVmLmg+LCA8c3RkaW8uaD4gYW5kIDx0aW1lLmg+IG11c3QgYmUKKyAgICAgaW5jbHVkZWQgYmVmb3JlIDx3Y2hhci5oPi4gICovCisgICNpbmNsdWRlIDxzdGRkZWYuaD4KKyAgI2luY2x1ZGUgPHNpZ25hbC5oPgorICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgI2luY2x1ZGUgPHRpbWUuaD4KKyAgI2luY2x1ZGUgPHdjaGFyLmg+CisKKyAgICAgICAgICAgICAgZXh0ZXJuICRnbHR5cGUgZm9vOworICAgICAgICAgICAgICBleHRlcm4gJGdsdHlwZTEgZm9vOworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICBldmFsIGdsX2N2X3R5cGVfJHtnbHR5cGV9X3N1ZmZpeD1cJGdsc3VmCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgICBldmFsIHJlc3VsdD1cJGdsX2N2X3R5cGVfJHtnbHR5cGV9X3N1ZmZpeAorICAgICAgICAgdGVzdCAiJHJlc3VsdCIgIT0gbm8gJiYgYnJlYWsKKyAgICAgICBkb25lCitmaQorYWNfcmVzPWBldmFsIGVjaG8gJyR7J2dsX2N2X3R5cGVfJHtnbHR5cGV9X3N1ZmZpeCd9J2AKKwkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorICAgIEdMVFlQRT1gZWNobyAkZ2x0eXBlIHwgdHIgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6ICcgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaXydgCisgICAgZXZhbCByZXN1bHQ9XCRnbF9jdl90eXBlXyR7Z2x0eXBlfV9zdWZmaXgKKyAgICB0ZXN0ICIkcmVzdWx0IiA9IG5vICYmIHJlc3VsdD0KKyAgICBldmFsICR7R0xUWVBFfV9TVUZGSVg9XCRyZXN1bHQKKyAgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lICR7R0xUWVBFfV9TVUZGSVggJHJlc3VsdAorX0FDRU9GCisKKyAgZG9uZQorCisKKworICAgIFNURElOVF9IPXN0ZGludC5oCisgIGZpCisKKworCisKK2ZvciBhY19oZWFkZXIgaW4gaW50dHlwZXMuaAorZG8KK2FzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAoraWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZmkKK2FjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CitlbHNlCisgICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjY7IH0KK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKKyNpbmNsdWRlIDwkYWNfaGVhZGVyPgorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisgIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX2hlYWRlcl9jb21waWxlcj1ubworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2OyB9CisKKyMgSXMgdGhlIGhlYWRlciBwcmVzZW50PworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2OyB9CitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDwkYWNfaGVhZGVyPgorX0FDRU9GCitpZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKwkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH07IHRoZW4KKyAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyAgYWNfaGVhZGVyX3ByZXByb2M9bm8KK2ZpCisKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Cit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNjsgfQorCisjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKyAgeWVzOm5vOiApCisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisgICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCisgICAgOzsKKyAgbm86eWVzOiogKQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CisgICAgKCBjYXQgPDxcX0FTQk9YCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1wYXJ0ZWRAZ251Lm9yZyAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCitfQVNCT1gKKyAgICAgKSB8IHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorICAgIDs7Citlc2FjCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCitmaQorYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCisJICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKworZmkKK2lmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKyAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX2ludHR5cGVzX2ggPSB5ZXM7IHRoZW4KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRoZSBpbnR0eXBlcy5oIFBSSXhOTiBtYWNyb3MgYXJlIGJyb2tlbiIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdGhlIGludHR5cGVzLmggUFJJeE5OIG1hY3JvcyBhcmUgYnJva2VuLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHtndF9jdl9pbnR0eXBlc19wcmlfYnJva2VuK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKKyAgICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNpZmRlZiBQUklkMzIKK2NoYXIgKnAgPSBQUklkMzI7CisjZW5kaWYKKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICBndF9jdl9pbnR0eXBlc19wcmlfYnJva2VuPW5vCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlndF9jdl9pbnR0eXBlc19wcmlfYnJva2VuPXllcworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRndF9jdl9pbnR0eXBlc19wcmlfYnJva2VuIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRndF9jdl9pbnR0eXBlc19wcmlfYnJva2VuIiA+JjY7IH0KKyAgZmkKKyAgaWYgdGVzdCAiJGd0X2N2X2ludHR5cGVzX3ByaV9icm9rZW4iID0geWVzOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUFJJX01BQ1JPU19CUk9LRU4gMQorX0FDRU9GCisKKyAgICBQUklfTUFDUk9TX0JST0tFTj0xCisgIGVsc2UKKyAgICBQUklfTUFDUk9TX0JST0tFTj0wCisgIGZpCisKKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBpbWF4YWJzIGlzIGRlY2xhcmVkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBpbWF4YWJzIGlzIGRlY2xhcmVkLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9oYXZlX2RlY2xfaW1heGFicytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKKyNpZm5kZWYgaW1heGFicworICAodm9pZCkgaW1heGFiczsKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgYWNfY3ZfaGF2ZV9kZWNsX2ltYXhhYnM9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19jdl9oYXZlX2RlY2xfaW1heGFicz1ubworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX2ltYXhhYnMiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfZGVjbF9pbWF4YWJzIiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X2hhdmVfZGVjbF9pbWF4YWJzID0geWVzOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9ERUNMX0lNQVhBQlMgMQorX0FDRU9GCisKKworZWxzZQorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfREVDTF9JTUFYQUJTIDAKK19BQ0VPRgorCisKK2ZpCisKKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBpbWF4ZGl2IGlzIGRlY2xhcmVkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBpbWF4ZGl2IGlzIGRlY2xhcmVkLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9oYXZlX2RlY2xfaW1heGRpditzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKKyNpZm5kZWYgaW1heGRpdgorICAodm9pZCkgaW1heGRpdjsKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgYWNfY3ZfaGF2ZV9kZWNsX2ltYXhkaXY9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19jdl9oYXZlX2RlY2xfaW1heGRpdj1ubworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX2ltYXhkaXYiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfZGVjbF9pbWF4ZGl2IiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X2hhdmVfZGVjbF9pbWF4ZGl2ID0geWVzOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9ERUNMX0lNQVhESVYgMQorX0FDRU9GCisKKworZWxzZQorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfREVDTF9JTUFYRElWIDAKK19BQ0VPRgorCisKK2ZpCisKKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBzdHJ0b2ltYXggaXMgZGVjbGFyZWQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHN0cnRvaW1heCBpcyBkZWNsYXJlZC4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfaGF2ZV9kZWNsX3N0cnRvaW1heCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKKyNpZm5kZWYgc3RydG9pbWF4CisgICh2b2lkKSBzdHJ0b2ltYXg7CisjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisgIGFjX2N2X2hhdmVfZGVjbF9zdHJ0b2ltYXg9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19jdl9oYXZlX2RlY2xfc3RydG9pbWF4PW5vCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfc3RydG9pbWF4IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfc3RydG9pbWF4IiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X2hhdmVfZGVjbF9zdHJ0b2ltYXggPSB5ZXM7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0RFQ0xfU1RSVE9JTUFYIDEKK19BQ0VPRgorCisKK2Vsc2UKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0RFQ0xfU1RSVE9JTUFYIDAKK19BQ0VPRgorCisKK2ZpCisKKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBzdHJ0b3VtYXggaXMgZGVjbGFyZWQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHN0cnRvdW1heCBpcyBkZWNsYXJlZC4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfaGF2ZV9kZWNsX3N0cnRvdW1heCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKKyNpZm5kZWYgc3RydG91bWF4CisgICh2b2lkKSBzdHJ0b3VtYXg7CisjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisgIGFjX2N2X2hhdmVfZGVjbF9zdHJ0b3VtYXg9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19jdl9oYXZlX2RlY2xfc3RydG91bWF4PW5vCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfc3RydG91bWF4IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfc3RydG91bWF4IiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X2hhdmVfZGVjbF9zdHJ0b3VtYXggPSB5ZXM7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0RFQ0xfU1RSVE9VTUFYIDEKK19BQ0VPRgorCisKK2Vsc2UKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0RFQ0xfU1RSVE9VTUFYIDAKK19BQ0VPRgorCisKK2ZpCisKKworCisgIEdOVUxJQl9JTUFYQUJTPTA7CisgIEdOVUxJQl9JTUFYRElWPTA7CisgIEdOVUxJQl9TVFJUT0lNQVg9MDsKKyAgR05VTElCX1NUUlRPVU1BWD0wOworICAgIEhBVkVfREVDTF9JTUFYQUJTPTE7CisgIEhBVkVfREVDTF9JTUFYRElWPTE7CisgIEhBVkVfREVDTF9TVFJUT0lNQVg9MTsKKyAgSEFWRV9ERUNMX1NUUlRPVU1BWD0xOworCisKKworCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBubF9sYW5naW5mbyBhbmQgQ09ERVNFVCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBubF9sYW5naW5mbyBhbmQgQ09ERVNFVC4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YW1fY3ZfbGFuZ2luZm9fY29kZXNldCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxsYW5naW5mby5oPgoraW50CittYWluICgpCit7CitjaGFyKiBjcyA9IG5sX2xhbmdpbmZvKENPREVTRVQpOyByZXR1cm4gIWNzOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgYW1fY3ZfbGFuZ2luZm9fY29kZXNldD15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFtX2N2X2xhbmdpbmZvX2NvZGVzZXQ9bm8KK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYW1fY3ZfbGFuZ2luZm9fY29kZXNldCIgPiY1CitlY2hvICIke0VDSE9fVH0kYW1fY3ZfbGFuZ2luZm9fY29kZXNldCIgPiY2OyB9CisgIGlmIHRlc3QgJGFtX2N2X2xhbmdpbmZvX2NvZGVzZXQgPSB5ZXM7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgSEFWRV9MQU5HSU5GT19DT0RFU0VUIDEKK19BQ0VPRgorCisgIGZpCisKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgZ2V0Y191bmxvY2tlZCBpcyBkZWNsYXJlZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgZ2V0Y191bmxvY2tlZCBpcyBkZWNsYXJlZC4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfaGF2ZV9kZWNsX2dldGNfdW5sb2NrZWQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CisjaWZuZGVmIGdldGNfdW5sb2NrZWQKKyAgKHZvaWQpIGdldGNfdW5sb2NrZWQ7CisjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisgIGFjX2N2X2hhdmVfZGVjbF9nZXRjX3VubG9ja2VkPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfY3ZfaGF2ZV9kZWNsX2dldGNfdW5sb2NrZWQ9bm8KK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9nZXRjX3VubG9ja2VkIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfZ2V0Y191bmxvY2tlZCIgPiY2OyB9CitpZiB0ZXN0ICRhY19jdl9oYXZlX2RlY2xfZ2V0Y191bmxvY2tlZCA9IHllczsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfREVDTF9HRVRDX1VOTE9DS0VEIDEKK19BQ0VPRgorCisKK2Vsc2UKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0RFQ0xfR0VUQ19VTkxPQ0tFRCAwCitfQUNFT0YKKworCitmaQorCisKKworICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBMaWJyYXJ5IDIuMSBvciBuZXdlciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBMaWJyYXJ5IDIuMSBvciBuZXdlci4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfZ251X2xpYnJhcnlfMl8xK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKyNpZmRlZiBfX0dOVV9MSUJSQVJZX18KKyAjaWYgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAxKSB8fCAoX19HTElCQ19fID4gMikKKyAgTHVja3kgR05VIHVzZXIKKyAjZW5kaWYKKyNlbmRpZgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJMdWNreSBHTlUgdXNlciIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFjX2N2X2dudV9saWJyYXJ5XzJfMT15ZXMKK2Vsc2UKKyAgYWNfY3ZfZ251X2xpYnJhcnlfMl8xPW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisKKworCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZ251X2xpYnJhcnlfMl8xIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9nbnVfbGlicmFyeV8yXzEiID4mNjsgfQorCisgICAgR0xJQkMyMT0iJGFjX2N2X2dudV9saWJyYXJ5XzJfMSIKKworCisKKworCisKK2ZvciBhY19mdW5jIGluICRhY19mdW5jX2xpc3QKK2RvCithc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgeyBhc192YXI9JGFzX2FjX3ZhcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgorICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCisjZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYworCisvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCisgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisKKyN1bmRlZiAkYWNfZnVuYworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyICRhY19mdW5jICgpOworLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCisgICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCisjaWYgZGVmaW5lZCBfX3N0dWJfJGFjX2Z1bmMgfHwgZGVmaW5lZCBfX3N0dWJfX18kYWNfZnVuYworY2hva2UgbWUKKyNlbmRpZgorCitpbnQKK21haW4gKCkKK3sKK3JldHVybiAkYWNfZnVuYyAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgIGV2YWwgIiRhc19hY192YXI9eWVzIgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJZXZhbCAiJGFzX2FjX3Zhcj1ubyIKK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2FjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYAorCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CitpZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCitkb25lCisKKworCisKKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEMvQysrIHJlc3RyaWN0IGtleXdvcmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgQy9DKysgcmVzdHJpY3Qga2V5d29yZC4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfY19yZXN0cmljdCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhY19jdl9jX3Jlc3RyaWN0PW5vCisgICAjIFRyeSB0aGUgb2ZmaWNpYWwgcmVzdHJpY3Qga2V5d29yZCwgdGhlbiBnY2MncyBfX3Jlc3RyaWN0LCBhbmQKKyAgICMgdGhlIGxlc3MgY29tbW9uIHZhcmlhbnRzLgorICAgZm9yIGFjX2t3IGluIHJlc3RyaWN0IF9fcmVzdHJpY3QgX19yZXN0cmljdF9fIF9SZXN0cmljdDsgZG8KKyAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCit0eXBlZGVmIGludCAqIGludF9wdHI7CisgICAgICAgIGludCBmb28gKGludF9wdHIgJGFjX2t3IGlwKSB7CisgICAgICAgIHJldHVybiBpcFswXTsKKyAgICAgICB9CitpbnQKK21haW4gKCkKK3sKK2ludCBzWzFdOworICAgICAgICBpbnQgKiAkYWNfa3cgdCA9IHM7CisgICAgICAgIHRbMF0gPSAwOworICAgICAgICByZXR1cm4gZm9vKHQpCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgYWNfY3ZfY19yZXN0cmljdD0kYWNfa3cKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgdGVzdCAiJGFjX2N2X2NfcmVzdHJpY3QiICE9IG5vICYmIGJyZWFrCisgICBkb25lCisKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9jX3Jlc3RyaWN0IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9jX3Jlc3RyaWN0IiA+JjY7IH0KKyBjYXNlICRhY19jdl9jX3Jlc3RyaWN0IGluCisgICByZXN0cmljdCkgOzsKKyAgIG5vKQorY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgcmVzdHJpY3QKK19BQ0VPRgorIDs7CisgICAqKSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSByZXN0cmljdCAkYWNfY3ZfY19yZXN0cmljdAorX0FDRU9GCisgOzsKKyBlc2FjCisKKworCisKKworCisKKworCisKKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHNzaXplX3QiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3NpemVfdC4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7Z3RfY3Zfc3NpemVfdCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KK2ludAorbWFpbiAoKQoreworaW50IHggPSBzaXplb2YgKHNzaXplX3QgKikgKyBzaXplb2YgKHNzaXplX3QpOworICAgICAgICByZXR1cm4gIXg7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgZ3RfY3Zfc3NpemVfdD15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWd0X2N2X3NzaXplX3Q9bm8KK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGd0X2N2X3NzaXplX3QiID4mNQorZWNobyAiJHtFQ0hPX1R9JGd0X2N2X3NzaXplX3QiID4mNjsgfQorICBpZiB0ZXN0ICRndF9jdl9zc2l6ZV90ID0gbm87IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgc3NpemVfdCBpbnQKK19BQ0VPRgorCisgIGZpCisKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdGRib29sLmggdGhhdCBjb25mb3JtcyB0byBDOTkiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3RkYm9vbC5oIHRoYXQgY29uZm9ybXMgdG8gQzk5Li4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9oZWFkZXJfc3RkYm9vbF9oK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisJICAjaW5jbHVkZSA8c3RkYm9vbC5oPgorCSAgI2lmbmRlZiBib29sCisJICAgImVycm9yOiBib29sIGlzIG5vdCBkZWZpbmVkIgorCSAgI2VuZGlmCisJICAjaWZuZGVmIGZhbHNlCisJICAgImVycm9yOiBmYWxzZSBpcyBub3QgZGVmaW5lZCIKKwkgICNlbmRpZgorCSAgI2lmIGZhbHNlCisJICAgImVycm9yOiBmYWxzZSBpcyBub3QgMCIKKwkgICNlbmRpZgorCSAgI2lmbmRlZiB0cnVlCisJICAgImVycm9yOiB0cnVlIGlzIG5vdCBkZWZpbmVkIgorCSAgI2VuZGlmCisJICAjaWYgdHJ1ZSAhPSAxCisJICAgImVycm9yOiB0cnVlIGlzIG5vdCAxIgorCSAgI2VuZGlmCisJICAjaWZuZGVmIF9fYm9vbF90cnVlX2ZhbHNlX2FyZV9kZWZpbmVkCisJICAgImVycm9yOiBfX2Jvb2xfdHJ1ZV9mYWxzZV9hcmVfZGVmaW5lZCBpcyBub3QgZGVmaW5lZCIKKwkgICNlbmRpZgorCisJICBzdHJ1Y3QgcyB7IF9Cb29sIHM6IDE7IF9Cb29sIHQ7IH0gczsKKworCSAgY2hhciBhW3RydWUgPT0gMSA/IDEgOiAtMV07CisJICBjaGFyIGJbZmFsc2UgPT0gMCA/IDEgOiAtMV07CisJICBjaGFyIGNbX19ib29sX3RydWVfZmFsc2VfYXJlX2RlZmluZWQgPT0gMSA/IDEgOiAtMV07CisJICBjaGFyIGRbKGJvb2wpIDAuNSA9PSB0cnVlID8gMSA6IC0xXTsKKwkgIGJvb2wgZSA9ICZzOworCSAgY2hhciBmWyhfQm9vbCkgMC4wID09IGZhbHNlID8gMSA6IC0xXTsKKwkgIGNoYXIgZ1t0cnVlXTsKKwkgIGNoYXIgaFtzaXplb2YgKF9Cb29sKV07CisJICBjaGFyIGlbc2l6ZW9mIHMudF07CisJICBlbnVtIHsgaiA9IGZhbHNlLCBrID0gdHJ1ZSwgbCA9IGZhbHNlICogdHJ1ZSwgbSA9IHRydWUgKiAyNTYgfTsKKwkgIF9Cb29sIG5bbV07CisJICBjaGFyIG9bc2l6ZW9mIG4gPT0gbSAqIHNpemVvZiBuWzBdID8gMSA6IC0xXTsKKwkgIGNoYXIgcFstMSAtIChfQm9vbCkgMCA8IDAgJiYgLTEgLSAoYm9vbCkgMCA8IDAgPyAxIDogLTFdOworCSAgI2lmIGRlZmluZWQgX194bGNfXyB8fCBkZWZpbmVkIF9fR05VQ19fCisJICAgLyogQ2F0Y2ggYSBidWcgaW4gSUJNIEFJWCB4bGMgY29tcGlsZXIgdmVyc2lvbiA2LjAuMC4wCisJICAgICAgcmVwb3J0ZWQgYnkgSmFtZXMgTGVtbGV5IG9uIDIwMDUtMTAtMDU7IHNlZQorCSAgICAgIGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctY29yZXV0aWxzLzIwMDUtMTAvbXNnMDAwODYuaHRtbAorCSAgICAgIFRoaXMgdGVzdCBpcyBub3QgcXVpdGUgcmlnaHQsIHNpbmNlIHhsYyBpcyBhbGxvd2VkIHRvCisJICAgICAgcmVqZWN0IHRoaXMgcHJvZ3JhbSwgYXMgdGhlIGluaXRpYWxpemVyIGZvciB4bGNidWcgaXMKKwkgICAgICBub3Qgb25lIG9mIHRoZSBmb3JtcyB0aGF0IEMgcmVxdWlyZXMgc3VwcG9ydCBmb3IuCisJICAgICAgSG93ZXZlciwgZG9pbmcgdGhlIHRlc3QgcmlnaHQgd291bGQgcmVxdWlyZSBhIHJ1bi10aW1lCisJICAgICAgdGVzdCwgYW5kIHRoYXQgd291bGQgbWFrZSBjcm9zcy1jb21waWxhdGlvbiBoYXJkZXIuCisJICAgICAgTGV0IHVzIGhvcGUgdGhhdCBJQk0gZml4ZXMgdGhlIHhsYyBidWcsIGFuZCBhbHNvIGFkZHMKKwkgICAgICBzdXBwb3J0IGZvciB0aGlzIGtpbmQgb2YgY29uc3RhbnQgZXhwcmVzc2lvbi4gIEluIHRoZQorCSAgICAgIG1lYW50aW1lLCB0aGlzIHRlc3Qgd2lsbCByZWplY3QgeGxjLCB3aGljaCBpcyBPSywgc2luY2UKKwkgICAgICBvdXIgc3RkYm9vbC5oIHN1YnN0aXR1dGUgc2hvdWxkIHN1ZmZpY2UuICBXZSBhbHNvIHRlc3QKKwkgICAgICB0aGlzIHdpdGggR0NDLCB3aGVyZSBpdCBzaG91bGQgd29yaywgdG8gZGV0ZWN0IG1vcmUKKwkgICAgICBxdWlja2x5IHdoZXRoZXIgc29tZW9uZSBtZXNzZXMgdXAgdGhlIHRlc3QgaW4gdGhlCisJICAgICAgZnV0dXJlLiAgKi8KKwkgICBjaGFyIGRpZ3NbXSA9ICIwMTIzNDU2Nzg5IjsKKwkgICBpbnQgeGxjYnVnID0gMSAvICgmKGRpZ3MgKyA1KVstMiArIChib29sKSAxXSA9PSAmZGlnc1s0XSA/IDEgOiAtMSk7CisJICAjZW5kaWYKKwkgIC8qIENhdGNoIGEgYnVnIGluIGFuIEhQLVVYIEMgY29tcGlsZXIuICBTZWUKKwkgICAgIGh0dHA6Ly9nY2MuZ251Lm9yZy9tbC9nY2MtcGF0Y2hlcy8yMDAzLTEyL21zZzAyMzAzLmh0bWwKKwkgICAgIGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctY29yZXV0aWxzLzIwMDUtMTEvbXNnMDAxNjEuaHRtbAorCSAgICovCisJICBfQm9vbCBxID0gdHJ1ZTsKKwkgIF9Cb29sICpwcSA9ICZxOworCitpbnQKK21haW4gKCkKK3sKKworCSAgKnBxIHw9IHE7CisJICAqcHEgfD0gISBxOworCSAgLyogUmVmZXIgdG8gZXZlcnkgZGVjbGFyZWQgdmFsdWUsIHRvIGF2b2lkIGNvbXBpbGVyIG9wdGltaXphdGlvbnMuICAqLworCSAgcmV0dXJuICghYSArICFiICsgIWMgKyAhZCArICFlICsgIWYgKyAhZyArICFoICsgIWkgKyAhIWogKyAhayArICEhbAorCQkgICsgIW0gKyAhbiArICFvICsgIXAgKyAhcSArICFwcSk7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICBhY19jdl9oZWFkZXJfc3RkYm9vbF9oPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaD1ubworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaCIgPiY2OyB9CisgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgX0Jvb2wiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgX0Jvb2wuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3R5cGVfX0Jvb2wrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAordHlwZWRlZiBfQm9vbCBhY19fdHlwZV9uZXdfOworaW50CittYWluICgpCit7CitpZiAoKGFjX190eXBlX25ld18gKikgMCkKKyAgcmV0dXJuIDA7CitpZiAoc2l6ZW9mIChhY19fdHlwZV9uZXdfKSkKKyAgcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgYWNfY3ZfdHlwZV9fQm9vbD15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX2N2X3R5cGVfX0Jvb2w9bm8KK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfX0Jvb2wiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfX0Jvb2wiID4mNjsgfQoraWYgdGVzdCAkYWNfY3ZfdHlwZV9fQm9vbCA9IHllczsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfX0JPT0wgMQorX0FDRU9GCisKKworZmkKKworICAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaCA9IHllczsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUREJPT0xfSCAxCitfQUNFT0YKKworICAgZmkKKworICBHTlVMSUJfR0VUU1VCT1BUPTA7CisgIEdOVUxJQl9NS0RURU1QPTA7CisgIEdOVUxJQl9NS1NURU1QPTA7CisgICAgSEFWRV9HRVRTVUJPUFQ9MTsKKyAgSEFWRV9NS0RURU1QPTE7CisgIFJFUExBQ0VfTUtTVEVNUD0wOworCisKKworCisgIEdOVUxJQl9NRU1NRU09MDsKKyAgR05VTElCX01FTVBDUFk9MDsKKyAgR05VTElCX01FTVJDSFI9MDsKKyAgR05VTElCX1NUUENQWT0wOworICBHTlVMSUJfU1RQTkNQWT0wOworICBHTlVMSUJfU1RSQ0hSTlVMPTA7CisgIEdOVUxJQl9TVFJEVVA9MDsKKyAgR05VTElCX1NUUk5EVVA9MDsKKyAgR05VTElCX1NUUk5MRU49MDsKKyAgR05VTElCX1NUUlBCUks9MDsKKyAgR05VTElCX1NUUlNFUD0wOworICBHTlVMSUJfU1RSQ0FTRVNUUj0wOworICBHTlVMSUJfU1RSVE9LX1I9MDsKKyAgR05VTElCX01CU0xFTj0wOworICBHTlVMSUJfTUJTQ0hSPTA7CisgIEdOVUxJQl9NQlNSQ0hSPTA7CisgIEdOVUxJQl9NQlNTVFI9MDsKKyAgR05VTElCX01CU0NBU0VDTVA9MDsKKyAgR05VTElCX01CU05DQVNFQ01QPTA7CisgIEdOVUxJQl9NQlNQQ0FTRUNNUD0wOworICBHTlVMSUJfTUJTQ0FTRVNUUj0wOworICBHTlVMSUJfTUJTQ1NQTj0wOworICBHTlVMSUJfTUJTUEJSSz0wOworICBHTlVMSUJfTUJTU1BOPTA7CisgIEdOVUxJQl9NQlNTRVA9MDsKKyAgR05VTElCX01CU1RPS19SPTA7CisgICAgSEFWRV9ERUNMX01FTU1FTT0xOworICBIQVZFX01FTVBDUFk9MTsKKyAgSEFWRV9ERUNMX01FTVJDSFI9MTsKKyAgSEFWRV9TVFBDUFk9MTsKKyAgSEFWRV9TVFBOQ1BZPTE7CisgIEhBVkVfU1RSQ0FTRUNNUD0xOworICBIQVZFX0RFQ0xfU1RSTkNBU0VDTVA9MTsKKyAgSEFWRV9TVFJDSFJOVUw9MTsKKyAgSEFWRV9ERUNMX1NUUkRVUD0xOworICBIQVZFX1NUUk5EVVA9MTsKKyAgSEFWRV9ERUNMX1NUUk5EVVA9MTsKKyAgSEFWRV9ERUNMX1NUUk5MRU49MTsKKyAgSEFWRV9TVFJQQlJLPTE7CisgIEhBVkVfU1RSU0VQPTE7CisgIEhBVkVfU1RSQ0FTRVNUUj0xOworICBIQVZFX0RFQ0xfU1RSVE9LX1I9MTsKKworCisKKworCisKKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBhYnNvbHV0ZSBuYW1lIG9mIDxzdHJpbmcuaD4iID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBhYnNvbHV0ZSBuYW1lIG9mIDxzdHJpbmcuaD4uLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2dsX2N2X2Fic29sdXRlX3N0cmluZ19oK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKKworCisKKworICAgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdHJpbmdfaCA9IHllczsgdGhlbgorICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RyaW5nLmg+CitfQUNFT0YKKyAgICAgIGdsX2N2X2Fic29sdXRlX3N0cmluZ19oPWAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CitzZWQgLW4gJ1wjL3N0cmluZy5oI3tzIy4qIlwoLiovc3RyaW5nLmhcKSIuKiNcMSM7cyNeL1teL10jLy8mIztwO3E7fSdgCisgICAgZmkKKworZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGdsX2N2X2Fic29sdXRlX3N0cmluZ19oIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRnbF9jdl9hYnNvbHV0ZV9zdHJpbmdfaCIgPiY2OyB9CitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEFCU09MVVRFX1NUUklOR19IICIkZ2xfY3ZfYWJzb2x1dGVfc3RyaW5nX2giCitfQUNFT0YKKworCisgIEFCU09MVVRFX1NUUklOR19IPVwiJGdsX2N2X2Fic29sdXRlX3N0cmluZ19oXCIKKworCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHN0cm5kdXAgaXMgZGVjbGFyZWQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHN0cm5kdXAgaXMgZGVjbGFyZWQuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2hhdmVfZGVjbF9zdHJuZHVwK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworI2lmbmRlZiBzdHJuZHVwCisgICh2b2lkKSBzdHJuZHVwOworI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICBhY19jdl9oYXZlX2RlY2xfc3RybmR1cD15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX2N2X2hhdmVfZGVjbF9zdHJuZHVwPW5vCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfc3RybmR1cCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX3N0cm5kdXAiID4mNjsgfQoraWYgdGVzdCAkYWNfY3ZfaGF2ZV9kZWNsX3N0cm5kdXAgPSB5ZXM7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0RFQ0xfU1RSTkRVUCAxCitfQUNFT0YKKworCitlbHNlCisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9ERUNMX1NUUk5EVVAgMAorX0FDRU9GCisKKworZmkKKworCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHN0cm5sZW4gaXMgZGVjbGFyZWQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHN0cm5sZW4gaXMgZGVjbGFyZWQuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2hhdmVfZGVjbF9zdHJubGVuK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworI2lmbmRlZiBzdHJubGVuCisgICh2b2lkKSBzdHJubGVuOworI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICBhY19jdl9oYXZlX2RlY2xfc3Rybmxlbj15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX2N2X2hhdmVfZGVjbF9zdHJubGVuPW5vCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfc3RybmxlbiIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX3N0cm5sZW4iID4mNjsgfQoraWYgdGVzdCAkYWNfY3ZfaGF2ZV9kZWNsX3N0cm5sZW4gPSB5ZXM7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0RFQ0xfU1RSTkxFTiAxCitfQUNFT0YKKworCitlbHNlCisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9ERUNMX1NUUk5MRU4gMAorX0FDRU9GCisKKworZmkKKworCisKKyAgR05VTElCX0NIT1dOPTA7CisgIEdOVUxJQl9EVVAyPTA7CisgIEdOVUxJQl9GQ0hESVI9MDsKKyAgR05VTElCX0ZUUlVOQ0FURT0wOworICBHTlVMSUJfR0VUQ1dEPTA7CisgIEdOVUxJQl9HRVRMT0dJTl9SPTA7CisgIEdOVUxJQl9SRUFETElOSz0wOworICBHTlVMSUJfU0xFRVA9MDsKKyAgICBIQVZFX0RVUDI9MTsKKyAgSEFWRV9GVFJVTkNBVEU9MTsKKyAgSEFWRV9SRUFETElOSz0xOworICBIQVZFX1NMRUVQPTE7CisgIEhBVkVfREVDTF9HRVRMT0dJTl9SPTE7CisgIFJFUExBQ0VfQ0hPV049MDsKKyAgUkVQTEFDRV9GQ0hESVI9MDsKKyAgUkVQTEFDRV9HRVRDV0Q9MDsKKworCisKKworCisKKworCisKKworCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHV0aW1lIGFjY2VwdHMgYSBudWxsIGFyZ3VtZW50IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB1dGltZSBhY2NlcHRzIGEgbnVsbCBhcmd1bWVudC4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfZnVuY191dGltZV9udWxsK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIHJtIC1mIGNvbmZ0ZXN0LmRhdGE7ID5jb25mdGVzdC5kYXRhCisjIFNlcXVlbnQgaW50ZXJwcmV0cyB1dGltZShmaWxlLCAwKSB0byBtZWFuIHVzZSBzdGFydCBvZiBlcG9jaC4gIFdyb25nLgoraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgYWNfY3ZfZnVuY191dGltZV9udWxsPW5vCitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKKwkgICAgICAgI2lmZGVmIEhBVkVfVVRJTUVfSAorCSAgICAgICAjIGluY2x1ZGUgPHV0aW1lLmg+CisJICAgICAgICNlbmRpZgoraW50CittYWluICgpCit7CitzdHJ1Y3Qgc3RhdCBzLCB0OworICByZXR1cm4gISAoc3RhdCAoImNvbmZ0ZXN0LmRhdGEiLCAmcykgPT0gMAorCSAgICAmJiB1dGltZSAoImNvbmZ0ZXN0LmRhdGEiLCAwKSA9PSAwCisJICAgICYmIHN0YXQgKCJjb25mdGVzdC5kYXRhIiwgJnQpID09IDAKKwkgICAgJiYgdC5zdF9tdGltZSA+PSBzLnN0X210aW1lCisJICAgICYmIHQuc3RfbXRpbWUgLSBzLnN0X210aW1lIDwgMTIwKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3ZfZnVuY191dGltZV9udWxsPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworKCBleGl0ICRhY19zdGF0dXMgKQorYWNfY3ZfZnVuY191dGltZV9udWxsPW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorCisKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX3V0aW1lX251bGwiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2Z1bmNfdXRpbWVfbnVsbCIgPiY2OyB9CitpZiB0ZXN0ICRhY19jdl9mdW5jX3V0aW1lX251bGwgPSB5ZXM7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgSEFWRV9VVElNRV9OVUxMIDEKK19BQ0VPRgorCitmaQorcm0gLWYgY29uZnRlc3QuZGF0YQorCisKKworCisKKworCisKKworCisKKworICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3RydWN0IHV0aW1idWYiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3RydWN0IHV0aW1idWYuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2dsX2N2X3N5c19zdHJ1Y3RfdXRpbWJ1ZitzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpZiBIQVZFX1NZU19USU1FX0gKKwkgICAgICNpbmNsdWRlIDxzeXMvdGltZS5oPgorCSAgICAjZW5kaWYKKwkgICAgI2luY2x1ZGUgPHRpbWUuaD4KKwkgICAgI2lmZGVmIEhBVkVfVVRJTUVfSAorCSAgICAgI2luY2x1ZGUgPHV0aW1lLmg+CisJICAgICNlbmRpZgorCitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBzdHJ1Y3QgdXRpbWJ1ZiB4OyB4LmFjdGltZSA9IHgubW9kdGltZTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICBnbF9jdl9zeXNfc3RydWN0X3V0aW1idWY9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlnbF9jdl9zeXNfc3RydWN0X3V0aW1idWY9bm8KK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGdsX2N2X3N5c19zdHJ1Y3RfdXRpbWJ1ZiIgPiY1CitlY2hvICIke0VDSE9fVH0kZ2xfY3Zfc3lzX3N0cnVjdF91dGltYnVmIiA+JjY7IH0KKworICBpZiB0ZXN0ICRnbF9jdl9zeXNfc3RydWN0X3V0aW1idWYgPSB5ZXM7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfVVRJTUJVRiAxCitfQUNFT0YKKworICBmaQorCisKKworCisKKworCisKKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHdpbnRfdCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciB3aW50X3QuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2d0X2N2X2Nfd2ludF90K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBUcnU2NCB3aXRoIERlc2t0b3AgVG9vbGtpdCBDIGhhcyBhIGJ1ZzogPHN0ZGlvLmg+IG11c3QgYmUgaW5jbHVkZWQgYmVmb3JlCisgICA8d2NoYXIuaD4uCisgICBCU0QvT1MgNC4wLjEgaGFzIGEgYnVnOiA8c3RkZGVmLmg+LCA8c3RkaW8uaD4gYW5kIDx0aW1lLmg+IG11c3QgYmUgaW5jbHVkZWQKKyAgIGJlZm9yZSA8d2NoYXIuaD4uICAqLworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CisgICAgICAgd2ludF90IGZvbyA9ICh3Y2hhcl90KSdcMCc7CitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisgIGd0X2N2X2Nfd2ludF90PXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJZ3RfY3ZfY193aW50X3Q9bm8KK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGd0X2N2X2Nfd2ludF90IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRndF9jdl9jX3dpbnRfdCIgPiY2OyB9CisgIGlmIHRlc3QgJGd0X2N2X2Nfd2ludF90ID0geWVzOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIEhBVkVfV0lOVF9UIDEKK19BQ0VPRgorCisgIGZpCisKKworCisKKworICAgaWYgdHJ1ZTsgdGhlbgorICBHTF9DT05EX0xJQlRPT0xfVFJVRT0KKyAgR0xfQ09ORF9MSUJUT09MX0ZBTFNFPScjJworZWxzZQorICBHTF9DT05EX0xJQlRPT0xfVFJVRT0nIycKKyAgR0xfQ09ORF9MSUJUT09MX0ZBTFNFPQorZmkKKworICBnbF9jb25kX2xpYnRvb2w9dHJ1ZQorICBnbF9zb3VyY2VfYmFzZT0nbGliJworTFRBTExPQ0E9YGVjaG8gIiRBTExPQ0EiIHwgc2VkICdzL1wuW14uXSogLy5sbyAvZztzL1wuW14uXSokLy5sby8nYAorCisKKworCisKKworICBpZiB0ZXN0ICRhY19jdl9mdW5jX2FsbG9jYV93b3JrcyA9IG5vOyB0aGVuCisgICAgOgorICBmaQorCisgICMgRGVmaW5lIGFuIGFkZGl0aW9uYWwgdmFyaWFibGUgdXNlZCBpbiB0aGUgTWFrZWZpbGUgc3Vic3RpdHV0aW9uLgorICBpZiB0ZXN0ICRhY19jdl93b3JraW5nX2FsbG9jYV9oID0geWVzOyB0aGVuCisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGFsbG9jYSBhcyBhIGNvbXBpbGVyIGJ1aWx0LWluIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGFsbG9jYSBhcyBhIGNvbXBpbGVyIGJ1aWx0LWluLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHtnbF9jdl9ycGxfYWxsb2NhK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKKyAgICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaWYgZGVmaW5lZCBfX0dOVUNfXyB8fCBkZWZpbmVkIF9BSVggfHwgZGVmaW5lZCBfTVNDX1ZFUgorICAgICAgICBOZWVkIG93biBhbGxvY2EKKyNlbmRpZgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJOZWVkIG93biBhbGxvY2EiID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBnbF9jdl9ycGxfYWxsb2NhPXllcworZWxzZQorICBnbF9jdl9ycGxfYWxsb2NhPW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisKKworZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGdsX2N2X3JwbF9hbGxvY2EiID4mNQorZWNobyAiJHtFQ0hPX1R9JGdsX2N2X3JwbF9hbGxvY2EiID4mNjsgfQorICAgIGlmIHRlc3QgJGdsX2N2X3JwbF9hbGxvY2EgPSB5ZXM7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgSEFWRV9BTExPQ0EgMQorX0FDRU9GCisKKyAgICAgIEFMTE9DQV9IPWFsbG9jYS5oCisgICAgZWxzZQorICAgICAgICAgICAgICAgICAgQUxMT0NBX0g9CisgICAgZmkKKyAgZWxzZQorICAgIEFMTE9DQV9IPWFsbG9jYS5oCisgIGZpCisKKworCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBIQVZFX0FMTE9DQV9IIDEKK19BQ0VPRgorCisKKworICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRvIGVuYWJsZSBhc3NlcnRpb25zIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0byBlbmFibGUgYXNzZXJ0aW9ucy4uLiAkRUNIT19DIiA+JjY7IH0KKyAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWFzc2VydCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9hc3NlcnQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSRlbmFibGVfYXNzZXJ0OyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisKK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIE5ERUJVRyAxCitfQUNFT0YKKworZWxzZQorICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjY7IH0KKworZmkKKworCisKKworZm9yIGFjX2Z1bmMgaW4gYXRleGl0CitkbworYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHsgYXNfdmFyPSRhc19hY192YXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisvKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KKyAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKKworLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgorICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorCisjdW5kZWYgJGFjX2Z1bmMKKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciAkYWNfZnVuYyAoKTsKKy8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKKyAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAorICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworI2lmIGRlZmluZWQgX19zdHViXyRhY19mdW5jIHx8IGRlZmluZWQgX19zdHViX19fJGFjX2Z1bmMKK2Nob2tlIG1lCisjZW5kaWYKKworaW50CittYWluICgpCit7CityZXR1cm4gJGFjX2Z1bmMgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKyAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorICBldmFsICIkYXNfYWNfdmFyPXllcyIKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWV2YWwgIiRhc19hY192YXI9bm8iCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCithY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AKKwkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQoraWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitlbHNlCisgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTICRhY19mdW5jLiRhY19vYmpleHQiCitmaQorZG9uZQorCisgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfYXRleGl0ID0gbm87IHRoZW4KKworICA6CisKKyAgZmkKKworICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgR05VIGxpYmMgY29tcGF0aWJsZSBjYWxsb2MiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgR05VIGxpYmMgY29tcGF0aWJsZSBjYWxsb2MuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2Z1bmNfY2FsbG9jXzBfbm9ubnVsbCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICBhY19jdl9mdW5jX2NhbGxvY18wX25vbm51bGw9bm8KK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitleGl0ICghY2FsbG9jICgwLCAwKSB8fCBjYWxsb2MgKChzaXplX3QpIC0xIC8gOCArIDEsIDgpKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3ZfZnVuY19jYWxsb2NfMF9ub25udWxsPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworKCBleGl0ICRhY19zdGF0dXMgKQorYWNfY3ZfZnVuY19jYWxsb2NfMF9ub25udWxsPW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorCisKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX2NhbGxvY18wX25vbm51bGwiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2Z1bmNfY2FsbG9jXzBfbm9ubnVsbCIgPiY2OyB9CitpZiB0ZXN0ICRhY19jdl9mdW5jX2NhbGxvY18wX25vbm51bGwgPSB5ZXM7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgSEFWRV9DQUxMT0MgMQorX0FDRU9GCisKK2Vsc2UKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgSEFWRV9DQUxMT0MgMAorX0FDRU9GCisKKyAgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIGNhbGxvYy4kYWNfb2JqZXh0IgorCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBjYWxsb2MgcnBsX2NhbGxvYworX0FDRU9GCisKK2ZpCisKKworCisKKyAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgY2xvc2Utc3RyZWFtLiRhY19vYmpleHQiCisKKyAgICA6CisKKworCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBHTlVMSUJfQ0xPU0VfU1RSRUFNIDEKK19BQ0VPRgorCisKKworICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBjbG9zZW91dC4kYWNfb2JqZXh0IgorCisgICAgOgorCisKKworICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBiYXNlbmFtZS4kYWNfb2JqZXh0IgorICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBkaXJuYW1lLiRhY19vYmpleHQiCisgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIHN0cmlwc2xhc2guJGFjX29iamV4dCIKKworCisKKworCisKKworICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIC8vIGlzIGRpc3RpbmN0IGZyb20gLyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgLy8gaXMgZGlzdGluY3QgZnJvbSAvLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHtnbF9jdl9kb3VibGVfc2xhc2hfcm9vdCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICAgaWYgdGVzdCB4IiRjcm9zc19jb21waWxpbmciID0geHllcyA7IHRoZW4KKwkjIFdoZW4gY3Jvc3MtY29tcGlsaW5nLCB0aGVyZSBpcyBubyB3YXkgdG8gdGVsbCB3aGV0aGVyIC8vIGlzIHNwZWNpYWwKKwkjIHNob3J0IG9mIGEgbGlzdCBvZiBob3N0cy4gIEhvd2V2ZXIsIHRoZSBvbmx5IGtub3duIGhvc3RzIHRvIGRhdGUKKwkjIHRoYXQgaGF2ZSBhIGRpc3RpbmN0IC8vIGFyZSBBcG9sbG8gRG9tYWluT1MgKHRvbyBvbGQgdG8gcG9ydCB0byksCisJIyBDeWd3aW4sIGFuZCB6L09TLiAgSWYgYW55b25lIGtub3dzIG9mIGFub3RoZXIgc3lzdGVtIGZvciB3aGljaCAvLyBoYXMKKwkjIHNwZWNpYWwgc2VtYW50aWNzIGFuZCBpcyBkaXN0aW5jdCBmcm9tIC8sIHBsZWFzZSByZXBvcnQgaXQgdG8KKwkjIDxidWctZ251bGliQGdudS5vcmc+LgorCWNhc2UgJGhvc3QgaW4KKwkgICotY3lnd2luIHwgaTM3MC1pYm0tb3BlbmVkaXRpb24pCisJICAgIGdsX2N2X2RvdWJsZV9zbGFzaF9yb290PXllcyA7OworCSAgKikKKwkgICAgIyBCZSBvcHRpbWlzdGljIGFuZCBhc3N1bWUgdGhhdCAvIGFuZCAvLyBhcmUgdGhlIHNhbWUgd2hlbiB3ZQorCSAgICAjIGRvbid0IGtub3cuCisJICAgIGdsX2N2X2RvdWJsZV9zbGFzaF9yb290PSd1bmtub3duLCBhc3N1bWluZyBubycgOzsKKwllc2FjCisgICAgICBlbHNlCisJc2V0IHggYGxzIC1kaSAvIC8vYAorCWlmIHRlc3QgJDIgPSAkNCAmJiB3YyAvL2Rldi9udWxsID4vZGV2L251bGwgMj4mMTsgdGhlbgorCSAgZ2xfY3ZfZG91YmxlX3NsYXNoX3Jvb3Q9bm8KKwllbHNlCisJICBnbF9jdl9kb3VibGVfc2xhc2hfcm9vdD15ZXMKKwlmaQorICAgICAgZmkKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRnbF9jdl9kb3VibGVfc2xhc2hfcm9vdCIgPiY1CitlY2hvICIke0VDSE9fVH0kZ2xfY3ZfZG91YmxlX3NsYXNoX3Jvb3QiID4mNjsgfQorICBpZiB0ZXN0ICIkZ2xfY3ZfZG91YmxlX3NsYXNoX3Jvb3QiID0geWVzOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIERPVUJMRV9TTEFTSF9JU19ESVNUSU5DVF9ST09UIDEKK19BQ0VPRgorCisgIGZpCisKKworICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZXJyb3JfYXRfbGluZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBlcnJvcl9hdF9saW5lLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9saWJfZXJyb3JfYXRfbGluZStzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxlcnJvci5oPgoraW50CittYWluICgpCit7CitlcnJvcl9hdF9saW5lICgwLCAwLCAiIiwgMCwgImFuIGVycm9yIG9jY3VycmVkIik7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKyAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorICBhY19jdl9saWJfZXJyb3JfYXRfbGluZT15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX2N2X2xpYl9lcnJvcl9hdF9saW5lPW5vCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfZXJyb3JfYXRfbGluZSIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2Vycm9yX2F0X2xpbmUiID4mNjsgfQoraWYgdGVzdCAkYWNfY3ZfbGliX2Vycm9yX2F0X2xpbmUgPSBubzsgdGhlbgorICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBlcnJvci4kYWNfb2JqZXh0IgorZmkKKworCisKKyAgOgorCisKKworICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBleGl0ZmFpbC4kYWNfb2JqZXh0IgorCisgICAgOgorCisKKworCisKKworCisKKworZm9yIGFjX2Z1bmMgaW4gX19mcGVuZGluZworZG8KK2FzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB7IGFzX3Zhcj0kYXNfYWNfdmFyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCisgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKyNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCisKKy8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KKyAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKworI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKworI3VuZGVmICRhY19mdW5jCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgJGFjX2Z1bmMgKCk7CisvKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCisgICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKKyAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KKyNpZiBkZWZpbmVkIF9fc3R1Yl8kYWNfZnVuYyB8fCBkZWZpbmVkIF9fc3R1Yl9fXyRhY19mdW5jCitjaG9rZSBtZQorI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworcmV0dXJuICRhY19mdW5jICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlldmFsICIkYXNfYWNfdmFyPW5vIgorZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgCisJICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KK2lmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZWxzZQorICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyAkYWNfZnVuYy4kYWNfb2JqZXh0IgorZmkKK2RvbmUKKworICBmcF9oZWFkZXJzPScKKyMgICAgIGluY2x1ZGUgPHN0ZGlvLmg+CisjICAgICBpZiBIQVZFX1NURElPX0VYVF9ICisjICAgICAgaW5jbHVkZSA8c3RkaW9fZXh0Lmg+CisjICAgICBlbmRpZgorJworICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIF9fZnBlbmRpbmcgaXMgZGVjbGFyZWQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIF9fZnBlbmRpbmcgaXMgZGVjbGFyZWQuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2hhdmVfZGVjbF9fX2ZwZW5kaW5nK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGZwX2hlYWRlcnMKKworaW50CittYWluICgpCit7CisjaWZuZGVmIF9fZnBlbmRpbmcKKyAgKHZvaWQpIF9fZnBlbmRpbmc7CisjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisgIGFjX2N2X2hhdmVfZGVjbF9fX2ZwZW5kaW5nPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfY3ZfaGF2ZV9kZWNsX19fZnBlbmRpbmc9bm8KK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9fX2ZwZW5kaW5nIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfX19mcGVuZGluZyIgPiY2OyB9CitpZiB0ZXN0ICRhY19jdl9oYXZlX2RlY2xfX19mcGVuZGluZyA9IHllczsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfREVDTF9fX0ZQRU5ESU5HIDEKK19BQ0VPRgorCisKK2Vsc2UKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0RFQ0xfX19GUEVORElORyAwCitfQUNFT0YKKworCitmaQorCisKKyAgaWYgdGVzdCAkYWNfY3ZfZnVuY19fX2ZwZW5kaW5nID0gbm87IHRoZW4KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBob3cgdG8gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgcGVuZGluZyBvdXRwdXQgYnl0ZXMgb24gYSBzdHJlYW0iID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBob3cgdG8gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgcGVuZGluZyBvdXRwdXQgYnl0ZXMgb24gYSBzdHJlYW0uLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3N5c19wZW5kaW5nX291dHB1dF9uX2J5dGVzK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKKwlmb3IgYWNfZXhwciBpbgkJCQkJCVwKKwkJCQkJCQkJXAorCSAgICAnIyBnbGliYzInCQkJCQkJXAorCSAgICAnZnAtPl9JT193cml0ZV9wdHIgLSBmcC0+X0lPX3dyaXRlX2Jhc2UnCQlcCisJCQkJCQkJCVwKKwkgICAgJyMgdHJhZGl0aW9uYWwgVW5peCcJCQkJXAorCSAgICAnZnAtPl9wdHIgLSBmcC0+X2Jhc2UnCQkJCVwKKwkJCQkJCQkJXAorCSAgICAnIyBCU0QnCQkJCQkJXAorCSAgICAnZnAtPl9wIC0gZnAtPl9iZi5fYmFzZScJCQkJXAorCQkJCQkJCQlcCisJICAgICcjIFNDTywgVW5peHdhcmUnCQkJCQlcCisJICAgICcoZnAtPl9fcHRyID8gZnAtPl9fcHRyIC0gZnAtPl9fYmFzZSA6IDApJwkJXAorCQkJCQkJCQlcCisJICAgICcjIG9sZCBnbGliYz8nCQkJCQlcCisJICAgICdmcC0+X19idWZwIC0gZnAtPl9fYnVmZmVyJwkJCQlcCisJCQkJCQkJCVwKKwkgICAgJyMgb2xkIGdsaWJjIGlvc3RyZWFtPycJCQkJXAorCSAgICAnZnAtPl9wcHRyIC0gZnAtPl9wYmFzZScJCQkJXAorCQkJCQkJCQlcCisJICAgICcjIFZNUycJCQkJCQlcCisJICAgICcoKmZwKS0+X3B0ciAtICgqZnApLT5fYmFzZScJCQlcCisJCQkJCQkJCVwKKwkgICAgJyMgZS5nLiwgREdVWCBSNC4xMTsgdGhlIGluZm8gaXMgbm90IGF2YWlsYWJsZScJXAorCSAgICAxCQkJCQkJCVwKKwkgICAgOyBkbworCisJICAjIFNraXAgZWFjaCBlbWJlZGRlZCBjb21tZW50LgorCSAgY2FzZSAiJGFjX2V4cHIiIGluICcjJyopIGNvbnRpbnVlOzsgZXNhYworCisJICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRpby5oPgorCitpbnQKK21haW4gKCkKK3sKK0ZJTEUgKmZwID0gc3RkaW47ICh2b2lkKSAoJGFjX2V4cHIpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisgIGZwX2RvbmU9eWVzCisKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKwkgIHRlc3QgIiRmcF9kb25lIiA9IHllcyAmJiBicmVhaworCWRvbmUKKworCWFjX2N2X3N5c19wZW5kaW5nX291dHB1dF9uX2J5dGVzPSRhY19leHByCisKKworZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3N5c19wZW5kaW5nX291dHB1dF9uX2J5dGVzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9zeXNfcGVuZGluZ19vdXRwdXRfbl9ieXRlcyIgPiY2OyB9CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUEVORElOR19PVVRQVVRfTl9CWVRFUyAkYWNfY3Zfc3lzX3BlbmRpbmdfb3V0cHV0X25fYnl0ZXMKK19BQ0VPRgorCisgIGZpCisKKworICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIGZyZWUgKE5VTEwpIGlzIGtub3duIHRvIHdvcmsiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIGZyZWUgKE5VTEwpIGlzIGtub3duIHRvIHdvcmsuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2dsX2N2X2Z1bmNfZnJlZStzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDx1bmlzdGQuaD4KK2ludAorbWFpbiAoKQoreworI2lmIF9QT1NJWF9WRVJTSU9OIDwgMTk5MDA5TCAmJiBcCisJICAgICAgICAoZGVmaW5lZCB1bml4IHx8IGRlZmluZWQgX3VuaXggfHwgZGVmaW5lZCBfdW5peF8gXAorCSAgICAgICAgIHx8IGRlZmluZWQgX191bml4IHx8IGRlZmluZWQgX191bml4X18pCisJICAgICAgI2Vycm9yICInZnJlZSAoTlVMTCknIGlzIG5vdCBrbm93biB0byB3b3JrIgorCSAgICAjZW5kaWYKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICBnbF9jdl9mdW5jX2ZyZWU9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlnbF9jdl9mdW5jX2ZyZWU9bm8KK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGdsX2N2X2Z1bmNfZnJlZSIgPiY1CitlY2hvICIke0VDSE9fVH0kZ2xfY3ZfZnVuY19mcmVlIiA+JjY7IH0KKworICBpZiB0ZXN0ICRnbF9jdl9mdW5jX2ZyZWUgPSBubzsgdGhlbgorICAgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIGZyZWUuJGFjX29iamV4dCIKKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgZnJlZSBycGxfZnJlZQorX0FDRU9GCisKKyAgZmkKKworCisKKyAgaWYgdGVzdCAtbiAiJEdFVE9QVF9IIjsgdGhlbgorCisgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIGdldG9wdC4kYWNfb2JqZXh0IgorICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBnZXRvcHQxLiRhY19vYmpleHQiCisKKyAgR0VUT1BUX0g9Z2V0b3B0LmgKKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgX19HRVRPUFRfUFJFRklYIHJwbF8KK19BQ0VPRgorCisKKworCisKKworCisKKworCitmaQorCisKKworCisKKworCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdGhlIGNvbXBpbGVyIGdlbmVyYWxseSByZXNwZWN0cyBpbmxpbmUiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRoZSBjb21waWxlciBnZW5lcmFsbHkgcmVzcGVjdHMgaW5saW5lLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHtnbF9jdl9jX2lubGluZV9lZmZlY3RpdmUrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAkYWNfY3ZfY19pbmxpbmUgPSBubzsgdGhlbgorICAgICAgIGdsX2N2X2NfaW5saW5lX2VmZmVjdGl2ZT1ubworICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisjaWZkZWYgX19OT19JTkxJTkVfXworICAgICAgICAgICAgICAgI2Vycm9yICJpbmxpbmUgaXMgbm90IGVmZmVjdGl2ZSIKKyAgICAgICAgICAgICAjZW5kaWYKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICBnbF9jdl9jX2lubGluZV9lZmZlY3RpdmU9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlnbF9jdl9jX2lubGluZV9lZmZlY3RpdmU9bm8KK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICBmaQorCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkZ2xfY3ZfY19pbmxpbmVfZWZmZWN0aXZlIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRnbF9jdl9jX2lubGluZV9lZmZlY3RpdmUiID4mNjsgfQorICBpZiB0ZXN0ICRnbF9jdl9jX2lubGluZV9lZmZlY3RpdmUgPSB5ZXM7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgSEFWRV9JTkxJTkUgMQorX0FDRU9GCisKKyAgZmkKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKyAgICAgICAgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBpbnR0eXBlcy5oIGNvbmZvcm1zIHRvIEM5OSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgaW50dHlwZXMuaCBjb25mb3JtcyB0byBDOTkuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2dsX2N2X2hlYWRlcl93b3JraW5nX2ludHR5cGVzX2grc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgZ2xfY3ZfaGVhZGVyX3dvcmtpbmdfaW50dHlwZXNfaD1ubworICAgICBpZiB0ZXN0ICIkZ2xfY3ZfaGVhZGVyX3dvcmtpbmdfc3RkaW50X2giID0geWVzIFwKKwkmJiB0ZXN0ICRhY19jdl9oZWFkZXJfaW50dHlwZXNfaCA9IHllcyBcCisJJiYgdGVzdCAiJGFjX2N2X2hhdmVfZGVjbF9pbWF4YWJzIiA9IHllcyBcCisJJiYgdGVzdCAiJGFjX2N2X2hhdmVfZGVjbF9pbWF4ZGl2IiA9IHllcyBcCisJJiYgdGVzdCAiJGFjX2N2X2hhdmVfZGVjbF9zdHJ0b2ltYXgiID0geWVzIFwKKwkmJiB0ZXN0ICIkYWNfY3ZfaGF2ZV9kZWNsX3N0cnRvdW1heCIgPSB5ZXM7IHRoZW4KKyAgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKworCSAvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JPUyAxIC8qIHRvIG1ha2UgaXQgd29yayBhbHNvIGluIEMrKyBtb2RlICovCisjZGVmaW5lIF9fU1REQ19DT05TVEFOVF9NQUNST1MgMSAvKiB0byBtYWtlIGl0IHdvcmsgYWxzbyBpbiBDKysgbW9kZSAqLworI2RlZmluZSBfX1NURENfRk9STUFUX01BQ1JPUyAxIC8qIHRvIG1ha2UgaXQgd29yayBhbHNvIGluIEMrKyBtb2RlICovCisjaW5jbHVkZSBBQlNPTFVURV9JTlRUWVBFU19ICisKKy8qIE5vIG5lZWQgdG8gZHVwbGljYXRlIHRoZSB0ZXN0cyBvZiBzdGRpbnQubTQ7IHRoZXkgYXJlIHN1YnN1bWVkIGJ5CisgICAkZ2xfY3ZfaGVhZGVyX3dvcmtpbmdfc3RkaW50X2ggPSB5ZXMuICAqLworCisvKiBUZXN0cyBmb3IgbWFjcm9zIHN1cHBvc2VkIHRvIGJlIGRlZmluZWQgaW4gaW50dHlwZXMuaC4gICovCisKK2NvbnN0IGNoYXIgKmsgPSAvKiBpbXBsaWNpdCBzdHJpbmcgY29uY2F0ZW5hdGlvbiAqLworI2lmZGVmIElOVDhfTUFYCisgIFBSSWQ4IFBSSWk4CisjZW5kaWYKKyNpZmRlZiBVSU5UOF9NQVgKKyAgUFJJbzggUFJJdTggUFJJeDggUFJJWDgKKyNlbmRpZgorI2lmZGVmIElOVDE2X01BWAorICBQUklkMTYgUFJJaTE2CisjZW5kaWYKKyNpZmRlZiBVSU5UMTZfTUFYCisgIFBSSW8xNiBQUkl1MTYgUFJJeDE2IFBSSVgxNgorI2VuZGlmCisjaWZkZWYgSU5UMzJfTUFYCisgIFBSSWQzMiBQUklpMzIKKyNlbmRpZgorI2lmZGVmIFVJTlQzMl9NQVgKKyAgUFJJbzMyIFBSSXUzMiBQUkl4MzIgUFJJWDMyCisjZW5kaWYKKyNpZmRlZiBJTlQ2NF9NQVgKKyAgUFJJZDY0IFBSSWk2NAorI2VuZGlmCisjaWZkZWYgVUlOVDY0X01BWAorICBQUklvNjQgUFJJdTY0IFBSSXg2NCBQUklYNjQKKyNlbmRpZgorICBQUklkTEVBU1Q4IFBSSWlMRUFTVDggUFJJb0xFQVNUOCBQUkl1TEVBU1Q4IFBSSXhMRUFTVDggUFJJWExFQVNUOAorICBQUklkTEVBU1QxNiBQUklpTEVBU1QxNiBQUklvTEVBU1QxNiBQUkl1TEVBU1QxNiBQUkl4TEVBU1QxNiBQUklYTEVBU1QxNgorICBQUklkTEVBU1QzMiBQUklpTEVBU1QzMiBQUklvTEVBU1QzMiBQUkl1TEVBU1QzMiBQUkl4TEVBU1QzMiBQUklYTEVBU1QzMgorICBQUklkTEVBU1Q2NCBQUklpTEVBU1Q2NAorICBQUklvTEVBU1Q2NCBQUkl1TEVBU1Q2NCBQUkl4TEVBU1Q2NCBQUklYTEVBU1Q2NAorICBQUklkRkFTVDggUFJJaUZBU1Q4IFBSSW9GQVNUOCBQUkl1RkFTVDggUFJJeEZBU1Q4IFBSSVhGQVNUOAorICBQUklkRkFTVDE2IFBSSWlGQVNUMTYgUFJJb0ZBU1QxNiBQUkl1RkFTVDE2IFBSSXhGQVNUMTYgUFJJWEZBU1QxNgorICBQUklkRkFTVDMyIFBSSWlGQVNUMzIgUFJJb0ZBU1QzMiBQUkl1RkFTVDMyIFBSSXhGQVNUMzIgUFJJWEZBU1QzMgorICBQUklkRkFTVDY0IFBSSWlGQVNUNjQKKyAgUFJJb0ZBU1Q2NCBQUkl1RkFTVDY0IFBSSXhGQVNUNjQgUFJJWEZBU1Q2NAorICBQUklkTUFYIFBSSWlNQVggUFJJb01BWCBQUkl1TUFYIFBSSXhNQVggUFJJWE1BWAorI2lmZGVmIElOVFBUUl9NQVgKKyAgUFJJZFBUUiBQUklpUFRSCisjZW5kaWYKKyNpZmRlZiBVSU5UUFRSX01BWAorICBQUklvUFRSIFBSSXVQVFIgUFJJeFBUUiBQUklYUFRSCisjZW5kaWYKKyAgOworY29uc3QgY2hhciAqbCA9IC8qIGltcGxpY2l0IHN0cmluZyBjb25jYXRlbmF0aW9uICovCisjaWZkZWYgSU5UOF9NQVgKKyAgU0NOZDggU0NOaTgKKyNlbmRpZgorI2lmZGVmIFVJTlQ4X01BWAorICBTQ05vOCBTQ051OCBTQ054OAorI2VuZGlmCisjaWZkZWYgSU5UMTZfTUFYCisgIFNDTmQxNiBTQ05pMTYKKyNlbmRpZgorI2lmZGVmIFVJTlQxNl9NQVgKKyAgU0NObzE2IFNDTnUxNiBTQ054MTYKKyNlbmRpZgorI2lmZGVmIElOVDMyX01BWAorICBTQ05kMzIgU0NOaTMyCisjZW5kaWYKKyNpZmRlZiBVSU5UMzJfTUFYCisgIFNDTm8zMiBTQ051MzIgU0NOeDMyCisjZW5kaWYKKyNpZmRlZiBJTlQ2NF9NQVgKKyAgU0NOZDY0IFNDTmk2NAorI2VuZGlmCisjaWZkZWYgVUlOVDY0X01BWAorICBTQ05vNjQgU0NOdTY0IFNDTng2NAorI2VuZGlmCisgIFNDTmRMRUFTVDggU0NOaUxFQVNUOCBTQ05vTEVBU1Q4IFNDTnVMRUFTVDggU0NOeExFQVNUOAorICBTQ05kTEVBU1QxNiBTQ05pTEVBU1QxNiBTQ05vTEVBU1QxNiBTQ051TEVBU1QxNiBTQ054TEVBU1QxNgorICBTQ05kTEVBU1QzMiBTQ05pTEVBU1QzMiBTQ05vTEVBU1QzMiBTQ051TEVBU1QzMiBTQ054TEVBU1QzMgorICBTQ05kTEVBU1Q2NCBTQ05pTEVBU1Q2NAorICBTQ05vTEVBU1Q2NCBTQ051TEVBU1Q2NCBTQ054TEVBU1Q2NAorICBTQ05kRkFTVDggU0NOaUZBU1Q4IFNDTm9GQVNUOCBTQ051RkFTVDggU0NOeEZBU1Q4CisgIFNDTmRGQVNUMTYgU0NOaUZBU1QxNiBTQ05vRkFTVDE2IFNDTnVGQVNUMTYgU0NOeEZBU1QxNgorICBTQ05kRkFTVDMyIFNDTmlGQVNUMzIgU0NOb0ZBU1QzMiBTQ051RkFTVDMyIFNDTnhGQVNUMzIKKyAgU0NOZEZBU1Q2NCBTQ05pRkFTVDY0CisgIFNDTm9GQVNUNjQgU0NOdUZBU1Q2NCBTQ054RkFTVDY0CisgIFNDTmRNQVggU0NOaU1BWCBTQ05vTUFYIFNDTnVNQVggU0NOeE1BWAorI2lmZGVmIElOVFBUUl9NQVgKKyAgU0NOZFBUUiBTQ05pUFRSCisjZW5kaWYKKyNpZmRlZiBVSU5UUFRSX01BWAorICBTQ05vUFRSIFNDTnVQVFIgU0NOeFBUUgorI2VuZGlmCisgIDsKKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICBnbF9jdl9oZWFkZXJfd29ya2luZ19pbnR0eXBlc19oPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisKK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICBmaQorZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGdsX2N2X2hlYWRlcl93b3JraW5nX2ludHR5cGVzX2giID4mNQorZWNobyAiJHtFQ0hPX1R9JGdsX2N2X2hlYWRlcl93b3JraW5nX2ludHR5cGVzX2giID4mNjsgfQorCisgICAgaWYgZmFsc2UgJiYgdGVzdCAkZ2xfY3ZfaGVhZGVyX3dvcmtpbmdfaW50dHlwZXNfaCA9IHllczsgdGhlbgorICAgICAgICBJTlRUWVBFU19IPScnCisgIGVsc2UKKworCisgICAgICAgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9pbnR0eXBlc19oID0geWVzOyB0aGVuCisgICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGFic29sdXRlIG5hbWUgb2YgPGludHR5cGVzLmg+IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgYWJzb2x1dGUgbmFtZSBvZiA8aW50dHlwZXMuaD4uLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2dsX2N2X2Fic29sdXRlX2ludHR5cGVzX2grc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworCisKKworCisgICAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX2ludHR5cGVzX2ggPSB5ZXM7IHRoZW4KKyAgICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGludHR5cGVzLmg+CitfQUNFT0YKKyAgICAgIGdsX2N2X2Fic29sdXRlX2ludHR5cGVzX2g9YChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKK3NlZCAtbiAnXCMvaW50dHlwZXMuaCN7cyMuKiJcKC4qL2ludHR5cGVzLmhcKSIuKiNcMSM7cyNeL1teL10jLy8mIztwO3E7fSdgCisgICAgZmkKKworZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGdsX2N2X2Fic29sdXRlX2ludHR5cGVzX2giID4mNQorZWNobyAiJHtFQ0hPX1R9JGdsX2N2X2Fic29sdXRlX2ludHR5cGVzX2giID4mNjsgfQorY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBBQlNPTFVURV9JTlRUWVBFU19IICIkZ2xfY3ZfYWJzb2x1dGVfaW50dHlwZXNfaCIKK19BQ0VPRgorCisKKyAgICAgIEFCU09MVVRFX0lOVFRZUEVTX0g9XCIkZ2xfY3ZfYWJzb2x1dGVfaW50dHlwZXNfaFwiCisgICAgZWxzZQorICAgICAgQUJTT0xVVEVfSU5UVFlQRVNfSD1cIm5vL3N1Y2gvZmlsZS9pbnR0eXBlcy5oXCIKKyAgICBmaQorCisKKyAgICBQUklQVFJfUFJFRklYPQorICAgIGlmIHRlc3QgLW4gIiRTVERJTlRfSCI7IHRoZW4KKyAgICAgICAgICAgIFBSSVBUUl9QUkVGSVg9JyJsIicKKyAgICBlbHNlCisgICAgICAgICAgICBmb3IgZ2xwZnggaW4gJycgbCBsbCBJNjQ7IGRvCisgICAgICAgIGNhc2UgJGdscGZ4IGluCisgICAgICAgICAgJycpICBnbHR5cGUxPSdpbnQnOzsKKyAgICAgICAgICBsKSAgIGdsdHlwZTE9J2xvbmcgaW50Jzs7CisgICAgICAgICAgbGwpICBnbHR5cGUxPSdsb25nIGxvbmcgaW50Jzs7CisgICAgICAgICAgSTY0KSBnbHR5cGUxPSdfX2ludDY0Jzs7CisgICAgICAgIGVzYWMKKyAgICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RkaW50Lmg+CisgICAgICAgICAgICAgZXh0ZXJuIGludHB0cl90IGZvbzsKKyAgICAgICAgICAgICBleHRlcm4gJGdsdHlwZTEgZm9vOworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICBQUklQVFJfUFJFRklYPSciJyRnbHBmeCciJworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisKK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICB0ZXN0IC1uICIkUFJJUFRSX1BSRUZJWCIgJiYgYnJlYWsKKyAgICAgIGRvbmUKKyAgICBmaQorCisKKyAgICBpZiB0ZXN0ICIkYWNfY3ZfaGF2ZV9kZWNsX2ltYXhhYnMiID0geWVzOyB0aGVuCisgICAgICBIQVZFX0RFQ0xfSU1BWEFCUz0xCisgICAgZWxzZQorICAgICAgSEFWRV9ERUNMX0lNQVhBQlM9MAorICAgIGZpCisKKyAgICBpZiB0ZXN0ICIkYWNfY3ZfaGF2ZV9kZWNsX2ltYXhkaXYiID0geWVzOyB0aGVuCisgICAgICBIQVZFX0RFQ0xfSU1BWERJVj0xCisgICAgZWxzZQorICAgICAgSEFWRV9ERUNMX0lNQVhESVY9MAorICAgIGZpCisKKyAgICBpZiB0ZXN0ICIkYWNfY3ZfaGF2ZV9kZWNsX3N0cnRvaW1heCIgPSB5ZXM7IHRoZW4KKyAgICAgIEhBVkVfREVDTF9TVFJUT0lNQVg9MQorICAgIGVsc2UKKyAgICAgIEhBVkVfREVDTF9TVFJUT0lNQVg9MAorICAgIGZpCisKKyAgICBpZiB0ZXN0ICIkYWNfY3ZfaGF2ZV9kZWNsX3N0cnRvdW1heCIgPSB5ZXM7IHRoZW4KKyAgICAgIEhBVkVfREVDTF9TVFJUT1VNQVg9MQorICAgIGVsc2UKKyAgICAgIEhBVkVfREVDTF9TVFJUT1VNQVg9MAorICAgIGZpCisKKyAgICBJTlRUWVBFU19IPSdpbnR0eXBlcy5oJworICBmaQorCisKKworICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZmxhZyB0byBpZ25vcmUgdW51c2VkIGxpYnJhcmllcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBmbGFnIHRvIGlnbm9yZSB1bnVzZWQgbGlicmFyaWVzLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHtnbF9jdl9pZ25vcmVfdW51c2VkX2xpYnJhcmllcytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBnbF9jdl9pZ25vcmVfdW51c2VkX2xpYnJhcmllcz1ub25lCisgICAgIGdsX3NhdmVkX2xkZmxhZ3M9JExERkxBR1MKKyAgICAgZ2xfc2F2ZWRfbGlicz0kTElCUworICAgICAjIExpbmsgd2l0aCAtbG0gdG8gZGV0ZWN0IGJpbnV0aWxzIDIuMTYgYnVnIHdpdGggLS1hcy1uZWVkZWQ7IHNlZQorICAgICAjIDxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWdudWxpYi8yMDA2LTA2L21zZzAwMTMxLmh0bWw+LgorICAgICBMSUJTPSIkTElCUyAtbG0iCisgICAgICMgVXNlIGxvbmcgb3B0aW9uIHNlcXVlbmNlcyBsaWtlICcteiBpZ25vcmUnIHRvIHRlc3QgZm9yIHRoZSBmZWF0dXJlLAorICAgICAjIHRvIGZvcmVzdGFsbCBwcm9ibGVtcyB3aXRoIGxpbmtlcnMgdGhhdCBoYXZlIC16LCAtaSwgLWcsIC1uLCBldGMuIGZsYWdzLgorICAgICAjIEdDQyArIGJpbnV0aWxzIGxpa2VzICctV2wsLS1hcy1uZWVkZWQnLgorICAgICAjIEdDQyArIFNvbGFyaXMgbGQgbGlrZXMgJy1XbCwteixpZ25vcmUnLgorICAgICAjIFN1biBDIGxpa2VzICcteiBpZ25vcmUnLgorICAgICAjIERvbid0IHRyeSBiYXJlICctLWFzLW5lZWRlZCc7IG5vdGhpbmcgbGlrZXMgaXQgYW5kIHRoZSBIUC1VWCAxMS4xMQorICAgICAjIG5hdGl2ZSBjYyBpc3N1ZXMgYW5ub3lpbmcgd2FybmluZ3MgYW5kIHRoZW4gaWdub3JlcyBpdCwKKyAgICAgIyB3aGljaCB3b3VsZCBjYXVzZSB1cyB0byBpbmNvcnJlY3RseSBjb25jbHVkZSB0aGF0IGl0IHdvcmtlZC4KKyAgICAgZm9yIGdsX2ZsYWdzIGluIFwKKwknLVdsLC0tYXMtbmVlZGVkJyBcCisJJy1XbCwteixpZ25vcmUnIFwKKwknLXogaWdub3JlJworICAgICBkbworICAgICAgIExERkxBR1M9IiRnbF9mbGFncyAkTERGTEFHUyIKKyAgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgIGdsX2N2X2lnbm9yZV91bnVzZWRfbGlicmFyaWVzPSRnbF9mbGFncworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisKK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgIExERkxBR1M9JGdsX3NhdmVkX2xkZmxhZ3MKKyAgICAgICB0ZXN0ICIkZ2xfY3ZfaWdub3JlX3VudXNlZF9saWJyYXJpZXMiICE9IG5vbmUgJiYgYnJlYWsKKyAgICAgZG9uZQorICAgICBMSUJTPSRnbF9zYXZlZF9saWJzCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkZ2xfY3ZfaWdub3JlX3VudXNlZF9saWJyYXJpZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9JGdsX2N2X2lnbm9yZV91bnVzZWRfbGlicmFyaWVzIiA+JjY7IH0KKworICB0ZXN0ICIkZ2xfY3ZfaWdub3JlX3VudXNlZF9saWJyYXJpZXMiICE9IG5vbmUgJiYKKyAgICBMREZMQUdTPSIkTERGTEFHUyAkZ2xfY3ZfaWdub3JlX3VudXNlZF9saWJyYXJpZXMiCisKKworCisKKworCisKKworCisKKworCisgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIGxvbmctb3B0aW9ucy4kYWNfb2JqZXh0IgorCisKKworZm9yIGFjX2hlYWRlciBpbiBzdGRsaWIuaAorZG8KK2FzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAoraWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZmkKK2FjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CitlbHNlCisgICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjY7IH0KK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKKyNpbmNsdWRlIDwkYWNfaGVhZGVyPgorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisgIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX2hlYWRlcl9jb21waWxlcj1ubworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2OyB9CisKKyMgSXMgdGhlIGhlYWRlciBwcmVzZW50PworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2OyB9CitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDwkYWNfaGVhZGVyPgorX0FDRU9GCitpZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKwkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH07IHRoZW4KKyAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyAgYWNfaGVhZGVyX3ByZXByb2M9bm8KK2ZpCisKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Cit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNjsgfQorCisjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKyAgeWVzOm5vOiApCisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisgICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCisgICAgOzsKKyAgbm86eWVzOiogKQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CisgICAgKCBjYXQgPDxcX0FTQk9YCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1wYXJ0ZWRAZ251Lm9yZyAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCitfQVNCT1gKKyAgICAgKSB8IHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorICAgIDs7Citlc2FjCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCitmaQorYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCisJICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKworZmkKK2lmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBHTlUgbGliYyBjb21wYXRpYmxlIG1hbGxvYyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBHTlUgbGliYyBjb21wYXRpYmxlIG1hbGxvYy4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfZnVuY19tYWxsb2NfMF9ub25udWxsK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgIGFjX2N2X2Z1bmNfbWFsbG9jXzBfbm9ubnVsbD1ubworZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpZiBkZWZpbmVkIFNURENfSEVBREVSUyB8fCBkZWZpbmVkIEhBVkVfU1RETElCX0gKKyMgaW5jbHVkZSA8c3RkbGliLmg+CisjZWxzZQorY2hhciAqbWFsbG9jICgpOworI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworcmV0dXJuICEgbWFsbG9jICgwKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3ZfZnVuY19tYWxsb2NfMF9ub25udWxsPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworKCBleGl0ICRhY19zdGF0dXMgKQorYWNfY3ZfZnVuY19tYWxsb2NfMF9ub25udWxsPW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorCisKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX21hbGxvY18wX25vbm51bGwiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2Z1bmNfbWFsbG9jXzBfbm9ubnVsbCIgPiY2OyB9CitpZiB0ZXN0ICRhY19jdl9mdW5jX21hbGxvY18wX25vbm51bGwgPSB5ZXM7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgSEFWRV9NQUxMT0MgMQorX0FDRU9GCisKK2Vsc2UKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgSEFWRV9NQUxMT0MgMAorX0FDRU9GCisKKyAgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIG1hbGxvYy4kYWNfb2JqZXh0IgorCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBtYWxsb2MgcnBsX21hbGxvYworX0FDRU9GCisKK2ZpCisKKworCisKKworZm9yIGFjX2Z1bmMgaW4gbWVtY2hyCitkbworYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHsgYXNfdmFyPSRhc19hY192YXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisvKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KKyAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKKworLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgorICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorCisjdW5kZWYgJGFjX2Z1bmMKKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciAkYWNfZnVuYyAoKTsKKy8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKKyAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAorICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworI2lmIGRlZmluZWQgX19zdHViXyRhY19mdW5jIHx8IGRlZmluZWQgX19zdHViX19fJGFjX2Z1bmMKK2Nob2tlIG1lCisjZW5kaWYKKworaW50CittYWluICgpCit7CityZXR1cm4gJGFjX2Z1bmMgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKyAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorICBldmFsICIkYXNfYWNfdmFyPXllcyIKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWV2YWwgIiRhc19hY192YXI9bm8iCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCithY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AKKwkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQoraWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitlbHNlCisgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTICRhY19mdW5jLiRhY19vYmpleHQiCitmaQorZG9uZQorCisgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfbWVtY2hyID0gbm87IHRoZW4KKworCitmb3IgYWNfaGVhZGVyIGluIGJwLXN5bS5oCitkbworYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCitpZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitmaQorYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCisJICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KK2Vsc2UKKyAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/Cit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNjsgfQorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAorI2luY2x1ZGUgPCRhY19oZWFkZXI+CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfaGVhZGVyX2NvbXBpbGVyPW5vCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjY7IH0KKworIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/Cit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjY7IH0KK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPCRhY19oZWFkZXI+CitfQUNFT0YKK2lmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfTsgdGhlbgorICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworICBhY19oZWFkZXJfcHJlcHJvYz1ubworZmkKKworcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2OyB9CisKKyMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorICB5ZXM6bm86ICkKKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKyAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKyAgICA7OworICBubzp5ZXM6KiApCisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKyAgICAoIGNhdCA8PFxfQVNCT1gKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgUmVwb3J0IHRoaXMgdG8gYnVnLXBhcnRlZEBnbnUub3JnICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKK19BU0JPWAorICAgICApIHwgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCisgICAgOzsKK2VzYWMKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKK2ZpCithY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AKKwkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorCitmaQoraWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCisgIGZpCisKKworICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igd29ya2luZyBtZW1jbXAiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igd29ya2luZyBtZW1jbXAuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmcrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgYWNfY3ZfZnVuY19tZW1jbXBfd29ya2luZz1ubworZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKKworICAvKiBTb21lIHZlcnNpb25zIG9mIG1lbWNtcCBhcmUgbm90IDgtYml0IGNsZWFuLiAgKi8KKyAgY2hhciBjMCA9ICdcMTAwJywgYzEgPSAnXDIwMCcsIGMyID0gJ1wyMDEnOworICBpZiAobWVtY21wKCZjMCwgJmMyLCAxKSA+PSAwIHx8IG1lbWNtcCgmYzEsICZjMiwgMSkgPj0gMCkKKyAgICByZXR1cm4gMTsKKworICAvKiBUaGUgTmV4dCB4ODYgT3BlblN0ZXAgYnVnIHNob3dzIHVwIG9ubHkgd2hlbiBjb21wYXJpbmcgMTYgYnl0ZXMKKyAgICAgb3IgbW9yZSBhbmQgd2l0aCBhdCBsZWFzdCBvbmUgYnVmZmVyIG5vdCBzdGFydGluZyBvbiBhIDQtYnl0ZSBib3VuZGFyeS4KKyAgICAgV2lsbGlhbSBMZXdpcyBwcm92aWRlZCB0aGlzIHRlc3QgcHJvZ3JhbS4gICAqLworICB7CisgICAgY2hhciBmb29bMjFdOworICAgIGNoYXIgYmFyWzIxXTsKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorICAgICAgeworCWNoYXIgKmEgPSBmb28gKyBpOworCWNoYXIgKmIgPSBiYXIgKyBpOworCXN0cmNweSAoYSwgIi0tLS0tLS0tMDExMTExMTEiKTsKKwlzdHJjcHkgKGIsICItLS0tLS0tLTEwMDAwMDAwIik7CisJaWYgKG1lbWNtcCAoYSwgYiwgMTYpID49IDApCisJICByZXR1cm4gMTsKKyAgICAgIH0KKyAgICByZXR1cm4gMDsKKyAgfQorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCisgIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY190cnkiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmc9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1CitlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisoIGV4aXQgJGFjX3N0YXR1cyApCithY19jdl9mdW5jX21lbWNtcF93b3JraW5nPW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorCisKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX21lbWNtcF93b3JraW5nIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX21lbWNtcF93b3JraW5nIiA+JjY7IH0KK3Rlc3QgJGFjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmcgPSBubyAmJiBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBtZW1jbXAuJGFjX29iamV4dCIKKworICAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmcgPSBubzsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBtZW1jbXAgcnBsX21lbWNtcAorX0FDRU9GCisKKyAgICA6CisgIGZpCisKKworCitmb3IgYWNfZnVuYyBpbiBtZW1jcHkKK2RvCithc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgeyBhc192YXI9JGFzX2FjX3ZhcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgorICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCisjZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYworCisvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCisgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisKKyN1bmRlZiAkYWNfZnVuYworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyICRhY19mdW5jICgpOworLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCisgICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCisjaWYgZGVmaW5lZCBfX3N0dWJfJGFjX2Z1bmMgfHwgZGVmaW5lZCBfX3N0dWJfX18kYWNfZnVuYworY2hva2UgbWUKKyNlbmRpZgorCitpbnQKK21haW4gKCkKK3sKK3JldHVybiAkYWNfZnVuYyAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgIGV2YWwgIiRhc19hY192YXI9eWVzIgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJZXZhbCAiJGFzX2FjX3Zhcj1ubyIKK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2FjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYAorCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CitpZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2Vsc2UKKyAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgJGFjX2Z1bmMuJGFjX29iamV4dCIKK2ZpCitkb25lCisKKyAgaWYgdGVzdCAkYWNfY3ZfZnVuY19tZW1jcHkgPSBubzsgdGhlbgorCisgIDoKKworICBmaQorCisKKworZm9yIGFjX2Z1bmMgaW4gbWVtbW92ZQorZG8KK2FzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB7IGFzX3Zhcj0kYXNfYWNfdmFyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCisgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKyNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCisKKy8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KKyAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKworI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKworI3VuZGVmICRhY19mdW5jCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgJGFjX2Z1bmMgKCk7CisvKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCisgICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKKyAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KKyNpZiBkZWZpbmVkIF9fc3R1Yl8kYWNfZnVuYyB8fCBkZWZpbmVkIF9fc3R1Yl9fXyRhY19mdW5jCitjaG9rZSBtZQorI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworcmV0dXJuICRhY19mdW5jICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlldmFsICIkYXNfYWNfdmFyPW5vIgorZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgCisJICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KK2lmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZWxzZQorICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyAkYWNfZnVuYy4kYWNfb2JqZXh0IgorZmkKK2RvbmUKKworICBpZiB0ZXN0ICRhY19jdl9mdW5jX21lbW1vdmUgPSBubzsgdGhlbgorCisgIDoKKworICBmaQorCisKKworZm9yIGFjX2Z1bmMgaW4gbWVtc2V0CitkbworYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHsgYXNfdmFyPSRhc19hY192YXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisvKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KKyAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKKworLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgorICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorCisjdW5kZWYgJGFjX2Z1bmMKKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciAkYWNfZnVuYyAoKTsKKy8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKKyAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAorICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworI2lmIGRlZmluZWQgX19zdHViXyRhY19mdW5jIHx8IGRlZmluZWQgX19zdHViX19fJGFjX2Z1bmMKK2Nob2tlIG1lCisjZW5kaWYKKworaW50CittYWluICgpCit7CityZXR1cm4gJGFjX2Z1bmMgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKyAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorICBldmFsICIkYXNfYWNfdmFyPXllcyIKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWV2YWwgIiRhc19hY192YXI9bm8iCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCithY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AKKwkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQoraWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitlbHNlCisgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTICRhY19mdW5jLiRhY19vYmpleHQiCitmaQorZG9uZQorCisgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfbWVtc2V0ID0gbm87IHRoZW4KKworICA6CisKKyAgZmkKKworCisgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIHF1b3RlYXJnLiRhY19vYmpleHQiCisKKworCisKKworCisKKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIG1ic3RhdGVfdCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBtYnN0YXRlX3QuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3R5cGVfbWJzdGF0ZV90K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKKyMJICAgIGluY2x1ZGUgPHdjaGFyLmg+CitpbnQKK21haW4gKCkKK3sKK21ic3RhdGVfdCB4OyByZXR1cm4gc2l6ZW9mIHg7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgYWNfY3ZfdHlwZV9tYnN0YXRlX3Q9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19jdl90eXBlX21ic3RhdGVfdD1ubworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9tYnN0YXRlX3QiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfbWJzdGF0ZV90IiA+JjY7IH0KKyAgIGlmIHRlc3QgJGFjX2N2X3R5cGVfbWJzdGF0ZV90ID0geWVzOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIEhBVkVfTUJTVEFURV9UIDEKK19BQ0VPRgorCisgICBlbHNlCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIG1ic3RhdGVfdCBpbnQKK19BQ0VPRgorCisgICBmaQorCisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBtYnJ0b3djIGFuZCBtYnN0YXRlX3QgYXJlIHByb3Blcmx5IGRlY2xhcmVkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBtYnJ0b3djIGFuZCBtYnN0YXRlX3QgYXJlIHByb3Blcmx5IGRlY2xhcmVkLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHtnbF9jdl9mdW5jX21icnRvd2Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8d2NoYXIuaD4KK2ludAorbWFpbiAoKQoreword2NoYXJfdCB3YzsKKyAgICAgICAgICAgICAgY2hhciBjb25zdCBzW10gPSAiIjsKKyAgICAgICAgICAgICAgc2l6ZV90IG4gPSAxOworICAgICAgICAgICAgICBtYnN0YXRlX3Qgc3RhdGU7CisgICAgICAgICAgICAgIHJldHVybiAhIChzaXplb2Ygc3RhdGUgJiYgKG1icnRvd2MpICgmd2MsIHMsIG4sICZzdGF0ZSkpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgZ2xfY3ZfZnVuY19tYnJ0b3djPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJZ2xfY3ZfZnVuY19tYnJ0b3djPW5vCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRnbF9jdl9mdW5jX21icnRvd2MiID4mNQorZWNobyAiJHtFQ0hPX1R9JGdsX2N2X2Z1bmNfbWJydG93YyIgPiY2OyB9CisgIGlmIHRlc3QgJGdsX2N2X2Z1bmNfbWJydG93YyA9IHllczsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBIQVZFX01CUlRPV0MgMQorX0FDRU9GCisKKyAgZmkKKworCisKK2ZvciBhY19oZWFkZXIgaW4gc3RkbGliLmgKK2RvCithc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2lmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2ZpCithY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AKKwkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorZWxzZQorICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2OyB9CitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CisjaW5jbHVkZSA8JGFjX2hlYWRlcj4KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19oZWFkZXJfY29tcGlsZXI9bm8KK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNjsgfQorCisjIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNjsgfQorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8JGFjX2hlYWRlcj4KK19BQ0VPRgoraWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7CisJIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9OyB0aGVuCisgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisgIGFjX2hlYWRlcl9wcmVwcm9jPW5vCitmaQorCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjY7IH0KKworIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CitjYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCisgIHllczpubzogKQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworICAgIDs7CisgIG5vOnllczoqICkKKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorICAgICggY2F0IDw8XF9BU0JPWAorIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBSZXBvcnQgdGhpcyB0byBidWctcGFydGVkQGdudS5vcmcgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworX0FTQk9YCisgICAgICkgfCBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKyAgICA7OworZXNhYworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorZmkKK2FjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CisKK2ZpCitpZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgR05VIGxpYmMgY29tcGF0aWJsZSByZWFsbG9jIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIEdOVSBsaWJjIGNvbXBhdGlibGUgcmVhbGxvYy4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfZnVuY19yZWFsbG9jXzBfbm9ubnVsbCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICBhY19jdl9mdW5jX3JlYWxsb2NfMF9ub25udWxsPW5vCitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2lmIGRlZmluZWQgU1REQ19IRUFERVJTIHx8IGRlZmluZWQgSEFWRV9TVERMSUJfSAorIyBpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbHNlCitjaGFyICpyZWFsbG9jICgpOworI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworcmV0dXJuICEgcmVhbGxvYyAoMCwgMCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCisgIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY190cnkiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X2Z1bmNfcmVhbGxvY18wX25vbm51bGw9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1CitlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisoIGV4aXQgJGFjX3N0YXR1cyApCithY19jdl9mdW5jX3JlYWxsb2NfMF9ub25udWxsPW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorCisKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX3JlYWxsb2NfMF9ub25udWxsIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX3JlYWxsb2NfMF9ub25udWxsIiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X2Z1bmNfcmVhbGxvY18wX25vbm51bGwgPSB5ZXM7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgSEFWRV9SRUFMTE9DIDEKK19BQ0VPRgorCitlbHNlCisgIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIEhBVkVfUkVBTExPQyAwCitfQUNFT0YKKworICAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgcmVhbGxvYy4kYWNfb2JqZXh0IgorCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSByZWFsbG9jIHJwbF9yZWFsbG9jCitfQUNFT0YKKworZmkKKworCisKKworCisKKworCisKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtaW5jbHVkZWQtcmVnZXggd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2luY2x1ZGVkX3JlZ2V4K3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9JHdpdGhfaW5jbHVkZWRfcmVnZXg7CitmaQorCisKKyAgY2FzZSAkd2l0aF9pbmNsdWRlZF9yZWdleCBpbiAjKAorICB5ZXN8bm8pIGFjX3VzZV9pbmNsdWRlZF9yZWdleD0kd2l0aF9pbmNsdWRlZF9yZWdleAorCTs7CisgICcnKQorICAgICMgSWYgdGhlIHN5c3RlbSByZWdleCBzdXBwb3J0IGlzIGdvb2QgZW5vdWdoIHRoYXQgaXQgcGFzc2VzIHRoZQorICAgICMgZm9sbG93aW5nIHJ1biB0ZXN0LCB0aGVuIGRlZmF1bHQgdG8gKm5vdCogdXNpbmcgdGhlIGluY2x1ZGVkIHJlZ2V4LmMuCisgICAgIyBJZiBjcm9zcyBjb21waWxpbmcsIGFzc3VtZSB0aGUgdGVzdCB3b3VsZCBmYWlsIGFuZCB1c2UgdGhlIGluY2x1ZGVkCisgICAgIyByZWdleC5jLgorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB3b3JraW5nIHJlX2NvbXBpbGVfcGF0dGVybiIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciB3b3JraW5nIHJlX2NvbXBpbGVfcGF0dGVybi4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7Z2xfY3ZfZnVuY19yZV9jb21waWxlX3BhdHRlcm5fd29ya2luZytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICAgICAgICAgZ2xfY3ZfZnVuY19yZV9jb21waWxlX3BhdHRlcm5fd29ya2luZz1ubworZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CisJICAgI2lmIEhBVkVfTE9DQUxFX0gKKwkgICAgI2luY2x1ZGUgPGxvY2FsZS5oPgorCSAgICNlbmRpZgorCSAgICNpbmNsdWRlIDxsaW1pdHMuaD4KKwkgICAjaW5jbHVkZSA8cmVnZXguaD4KKworaW50CittYWluICgpCit7CitzdGF0aWMgc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyIHJlZ2V4OworCSAgICB1bnNpZ25lZCBjaGFyIGZvbGRlZF9jaGFyc1tVQ0hBUl9NQVggKyAxXTsKKwkgICAgaW50IGk7CisJICAgIGNvbnN0IGNoYXIgKnM7CisJICAgIHN0cnVjdCByZV9yZWdpc3RlcnMgcmVnczsKKworCSAgICAjaWYgSEFWRV9MT0NBTEVfSAorCSAgICAgIC8qIGh0dHA6Ly9zb3VyY2V3YXJlLm9yZy9tbC9saWJjLWhhY2tlci8yMDA2LTA5L21zZzAwMDA4Lmh0bWwKKwkJIFRoaXMgdGVzdCBuZWVkcyB2YWxncmluZCB0byBjYXRjaCB0aGUgYnVnIG9uIERlYmlhbgorCQkgR05VL0xpbnV4IDMuMSB4ODYsIGJ1dCBpdCBtaWdodCBjYXRjaCB0aGUgYnVnIGJldHRlcgorCQkgb24gb3RoZXIgcGxhdGZvcm1zIGFuZCBpdCBzaG91bGRuJ3QgaHVydCB0byB0cnkgdGhlCisJCSB0ZXN0IGhlcmUuICAqLworCSAgICAgIGlmIChzZXRsb2NhbGUgKExDX0FMTCwgImVuX1VTLlVURi04IikpCisJCXsKKwkJICBzdGF0aWMgY2hhciBjb25zdCBwYXRbXSA9ICJpbnNlcnQgaW50byI7CisJCSAgc3RhdGljIGNoYXIgY29uc3QgZGF0YVtdID0KKwkJICAgICJceEZGXDBceDEyXHhBMlx4QUFceEM0XHhCMSxLXHgxMlx4QzRceEIxKlx4QUNLIjsKKwkJICByZV9zZXRfc3ludGF4IChSRV9TWU5UQVhfR1JFUCB8IFJFX0hBVF9MSVNUU19OT1RfTkVXTElORQorCQkJCSB8IFJFX0lDQVNFKTsKKwkJICBtZW1zZXQgKCZyZWdleCwgMCwgc2l6ZW9mIHJlZ2V4KTsKKwkJICBzID0gcmVfY29tcGlsZV9wYXR0ZXJuIChwYXQsIHNpemVvZiBwYXQgLSAxLCAmcmVnZXgpOworCQkgIGlmIChzKQorCQkgICAgcmV0dXJuIDE7CisJCSAgaWYgKHJlX3NlYXJjaCAoJnJlZ2V4LCBkYXRhLCBzaXplb2YgZGF0YSAtIDEsCisJCQkJIDAsIHNpemVvZiBkYXRhIC0gMSwgJnJlZ3MpCisJCSAgICAgICE9IC0xKQorCQkgICAgcmV0dXJuIDE7CisJCSAgaWYgKCEgc2V0bG9jYWxlIChMQ19BTEwsICJDIikpCisJCSAgICByZXR1cm4gMTsKKwkJfQorCSAgICAjZW5kaWYKKworCSAgICAvKiBUaGlzIHRlc3QgaXMgZnJvbSBnbGliYyBidWcgMzk1NywgcmVwb3J0ZWQgYnkgQW5kcmV3IE1hY2tleS4gICovCisJICAgIHJlX3NldF9zeW50YXggKFJFX1NZTlRBWF9FR1JFUCB8IFJFX0hBVF9MSVNUU19OT1RfTkVXTElORSk7CisJICAgIG1lbXNldCAoJnJlZ2V4LCAwLCBzaXplb2YgcmVnZXgpOworCSAgICBzID0gcmVfY29tcGlsZV9wYXR0ZXJuICgiYVteeF1iIiwgNiwgJnJlZ2V4KTsKKwkgICAgaWYgKHMpCisJICAgICAgcmV0dXJuIDE7CisKKwkgICAgLyogVGhpcyBzaG91bGQgZmFpbCwgYnV0IHN1Y2NlZWRzIGZvciBnbGliYy0yLjUuICAqLworCSAgICBpZiAocmVfc2VhcmNoICgmcmVnZXgsICJhXG5iIiwgMywgMCwgMywgJnJlZ3MpICE9IC0xKQorCSAgICAgIHJldHVybiAxOworCisJICAgIC8qIFRoaXMgcmVndWxhciBleHByZXNzaW9uIGlzIGZyb20gU3BlbmNlciBlcmUgdGVzdCBudW1iZXIgNzUKKwkgICAgICAgaW4gZ3JlcC0yLjMuICAqLworCSAgICByZV9zZXRfc3ludGF4IChSRV9TWU5UQVhfUE9TSVhfRUdSRVApOworCSAgICBtZW1zZXQgKCZyZWdleCwgMCwgc2l6ZW9mIHJlZ2V4KTsKKwkgICAgZm9yIChpID0gMDsgaSA8PSBVQ0hBUl9NQVg7IGkrKykKKwkgICAgICBmb2xkZWRfY2hhcnNbaV0gPSBpOworCSAgICByZWdleC50cmFuc2xhdGUgPSBmb2xkZWRfY2hhcnM7CisJICAgIHMgPSByZV9jb21waWxlX3BhdHRlcm4gKCJhW1s6XTpdXWJcbiIsIDExLCAmcmVnZXgpOworCSAgICAvKiBUaGlzIHNob3VsZCBmYWlsIHdpdGggX0ludmFsaWQgY2hhcmFjdGVyIGNsYXNzIG5hbWVfIGVycm9yLiAgKi8KKwkgICAgaWYgKCFzKQorCSAgICAgIHJldHVybiAxOworCisJICAgIC8qIFRoaXMgc2hvdWxkIHN1Y2NlZWQsIGJ1dCBkb2VzIG5vdCBmb3IgZ2xpYmMtMi4xLjMuICAqLworCSAgICBtZW1zZXQgKCZyZWdleCwgMCwgc2l6ZW9mIHJlZ2V4KTsKKwkgICAgcyA9IHJlX2NvbXBpbGVfcGF0dGVybiAoInsxIiwgMiwgJnJlZ2V4KTsKKworCSAgICBpZiAocykKKwkgICAgICByZXR1cm4gMTsKKworCSAgICAvKiBUaGUgZm9sbG93aW5nIGV4YW1wbGUgaXMgZGVyaXZlZCBmcm9tIGEgcHJvYmxlbSByZXBvcnQKKwkgICAgICAgYWdhaW5zdCBnYXdrIGZyb20gSm9yZ2UgU3RvbGZpIDxzdG9sZmlAaWMudW5pY2FtcC5icj4uICAqLworCSAgICBtZW1zZXQgKCZyZWdleCwgMCwgc2l6ZW9mIHJlZ2V4KTsKKwkgICAgcyA9IHJlX2NvbXBpbGVfcGF0dGVybiAoIlthblwzNzFdKm4iLCA3LCAmcmVnZXgpOworCSAgICBpZiAocykKKwkgICAgICByZXR1cm4gMTsKKworCSAgICAvKiBUaGlzIHNob3VsZCBtYXRjaCwgYnV0IGRvZXMgbm90IGZvciBnbGliYy0yLjIuMS4gICovCisJICAgIGlmIChyZV9tYXRjaCAoJnJlZ2V4LCAiYW4iLCAyLCAwLCAmcmVncykgIT0gMikKKwkgICAgICByZXR1cm4gMTsKKworCSAgICBtZW1zZXQgKCZyZWdleCwgMCwgc2l6ZW9mIHJlZ2V4KTsKKwkgICAgcyA9IHJlX2NvbXBpbGVfcGF0dGVybiAoIngiLCAxLCAmcmVnZXgpOworCSAgICBpZiAocykKKwkgICAgICByZXR1cm4gMTsKKworCSAgICAvKiBnbGliYy0yLjIuOTMgZG9lcyBub3Qgd29yayB3aXRoIGEgbmVnYXRpdmUgUkFOR0UgYXJndW1lbnQuICAqLworCSAgICBpZiAocmVfc2VhcmNoICgmcmVnZXgsICJ3eHkiLCAzLCAyLCAtMiwgJnJlZ3MpICE9IDEpCisJICAgICAgcmV0dXJuIDE7CisKKwkgICAgLyogVGhlIHZlcnNpb24gb2YgcmVnZXguYyBpbiBvbGRlciB2ZXJzaW9ucyBvZiBnbnVsaWIKKwkgICAgICAgaWdub3JlZCBSRV9JQ0FTRS4gIERldGVjdCB0aGF0IHByb2JsZW0gdG9vLiAgKi8KKwkgICAgcmVfc2V0X3N5bnRheCAoUkVfU1lOVEFYX0VNQUNTIHwgUkVfSUNBU0UpOworCSAgICBtZW1zZXQgKCZyZWdleCwgMCwgc2l6ZW9mIHJlZ2V4KTsKKwkgICAgcyA9IHJlX2NvbXBpbGVfcGF0dGVybiAoIngiLCAxLCAmcmVnZXgpOworCSAgICBpZiAocykKKwkgICAgICByZXR1cm4gMTsKKworCSAgICBpZiAocmVfc2VhcmNoICgmcmVnZXgsICJXWFkiLCAzLCAwLCAzLCAmcmVncykgPCAwKQorCSAgICAgIHJldHVybiAxOworCisJICAgIC8qIFJFR19TVEFSVEVORCB3YXMgYWRkZWQgdG8gZ2xpYmMgb24gMjAwNC0wMS0xNS4KKwkgICAgICAgUmVqZWN0IG9sZGVyIHZlcnNpb25zLiAgKi8KKwkgICAgaWYgKCEgUkVHX1NUQVJURU5EKQorCSAgICAgIHJldHVybiAxOworCisJICAgIC8qIFJlamVjdCBob3N0cyB3aG9zZSByZWdvZmZfdCB2YWx1ZXMgYXJlIHRvbyBuYXJyb3cuCisJICAgICAgIFRoZXNlIGluY2x1ZGUgZ2xpYmMgMi4zLjUgb24gaG9zdHMgd2l0aCA2NC1iaXQgcHRyZGlmZl90CisJICAgICAgIGFuZCAzMi1iaXQgaW50LiAgKi8KKwkgICAgaWYgKHNpemVvZiAocmVnb2ZmX3QpIDwgc2l6ZW9mIChwdHJkaWZmX3QpCisJCXx8IHNpemVvZiAocmVnb2ZmX3QpIDwgc2l6ZW9mIChzc2l6ZV90KSkKKwkgICAgICByZXR1cm4gMTsKKworCSAgICByZXR1cm4gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgZ2xfY3ZfZnVuY19yZV9jb21waWxlX3BhdHRlcm5fd29ya2luZz15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKK2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyggZXhpdCAkYWNfc3RhdHVzICkKK2dsX2N2X2Z1bmNfcmVfY29tcGlsZV9wYXR0ZXJuX3dvcmtpbmc9bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKworZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGdsX2N2X2Z1bmNfcmVfY29tcGlsZV9wYXR0ZXJuX3dvcmtpbmciID4mNQorZWNobyAiJHtFQ0hPX1R9JGdsX2N2X2Z1bmNfcmVfY29tcGlsZV9wYXR0ZXJuX3dvcmtpbmciID4mNjsgfQorICAgIGNhc2UgJGdsX2N2X2Z1bmNfcmVfY29tcGlsZV9wYXR0ZXJuX3dvcmtpbmcgaW4gIygKKyAgICB5ZXMpIGFjX3VzZV9pbmNsdWRlZF9yZWdleD1ubzs7ICMoCisgICAgbm8pIGFjX3VzZV9pbmNsdWRlZF9yZWdleD15ZXM7OworICAgIGVzYWMKKyAgICA7OworICAqKSB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBJbnZhbGlkIHZhbHVlIGZvciAtLXdpdGgtaW5jbHVkZWQtcmVnZXg6ICR3aXRoX2luY2x1ZGVkX3JlZ2V4IiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IEludmFsaWQgdmFsdWUgZm9yIC0td2l0aC1pbmNsdWRlZC1yZWdleDogJHdpdGhfaW5jbHVkZWRfcmVnZXgiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICA7OworICBlc2FjCisKKyAgaWYgdGVzdCAkYWNfdXNlX2luY2x1ZGVkX3JlZ2V4ID0geWVzOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIF9SRUdFWF9MQVJHRV9PRkZTRVRTIDEKK19BQ0VPRgorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIHJlX3N5bnRheF9vcHRpb25zIHJwbF9yZV9zeW50YXhfb3B0aW9ucworX0FDRU9GCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgcmVfc2V0X3N5bnRheCBycGxfcmVfc2V0X3N5bnRheAorX0FDRU9GCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgcmVfY29tcGlsZV9wYXR0ZXJuIHJwbF9yZV9jb21waWxlX3BhdHRlcm4KK19BQ0VPRgorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIHJlX2NvbXBpbGVfZmFzdG1hcCBycGxfcmVfY29tcGlsZV9mYXN0bWFwCitfQUNFT0YKKworCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSByZV9zZWFyY2ggcnBsX3JlX3NlYXJjaAorX0FDRU9GCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgcmVfc2VhcmNoXzIgcnBsX3JlX3NlYXJjaF8yCitfQUNFT0YKKworCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSByZV9tYXRjaCBycGxfcmVfbWF0Y2gKK19BQ0VPRgorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIHJlX21hdGNoXzIgcnBsX3JlX21hdGNoXzIKK19BQ0VPRgorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIHJlX3NldF9yZWdpc3RlcnMgcnBsX3JlX3NldF9yZWdpc3RlcnMKK19BQ0VPRgorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIHJlX2NvbXAgcnBsX3JlX2NvbXAKK19BQ0VPRgorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIHJlX2V4ZWMgcnBsX3JlX2V4ZWMKK19BQ0VPRgorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIHJlZ2NvbXAgcnBsX3JlZ2NvbXAKK19BQ0VPRgorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIHJlZ2V4ZWMgcnBsX3JlZ2V4ZWMKK19BQ0VPRgorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIHJlZ2Vycm9yIHJwbF9yZWdlcnJvcgorX0FDRU9GCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgcmVnZnJlZSBycGxfcmVnZnJlZQorX0FDRU9GCisKKyAgICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyByZWdleC4kYWNfb2JqZXh0IgorCisKKworCisKKworCisKKworCisKKworCisKKworICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIGlzYmxhbmsgaXMgZGVjbGFyZWQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIGlzYmxhbmsgaXMgZGVjbGFyZWQuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2hhdmVfZGVjbF9pc2JsYW5rK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGN0eXBlLmg+CisKK2ludAorbWFpbiAoKQoreworI2lmbmRlZiBpc2JsYW5rCisgICh2b2lkKSBpc2JsYW5rOworI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICBhY19jdl9oYXZlX2RlY2xfaXNibGFuaz15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX2N2X2hhdmVfZGVjbF9pc2JsYW5rPW5vCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfaXNibGFuayIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX2lzYmxhbmsiID4mNjsgfQoraWYgdGVzdCAkYWNfY3ZfaGF2ZV9kZWNsX2lzYmxhbmsgPSB5ZXM7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0RFQ0xfSVNCTEFOSyAxCitfQUNFT0YKKworCitlbHNlCisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9ERUNMX0lTQkxBTksgMAorX0FDRU9GCisKKworZmkKKworCisKKyAgZmkKKworCisgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciByZW5hbWUgaXMgYnJva2VuIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciByZW5hbWUgaXMgYnJva2VuLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHtnbF9jdl9mdW5jX3JlbmFtZV90cmFpbGluZ19zbGFzaF9idWcrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworICAgIHJtIC1yZiBjb25mdGVzdC5kMSBjb25mdGVzdC5kMgorICAgIG1rZGlyIGNvbmZ0ZXN0LmQxIHx8CisgICAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY3JlYXRlIHRlbXBvcmFyeSBkaXJlY3RvcnkiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSB0ZW1wb3JhcnkgZGlyZWN0b3J5IiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgICAgICAgZ2xfY3ZfZnVuY19yZW5hbWVfdHJhaWxpbmdfc2xhc2hfYnVnPXllcworZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworIyAgICAgICBpbmNsdWRlIDxzdGRpby5oPgorIyAgICAgICBpbmNsdWRlIDxzdGRsaWIuaD4KKyAgICAgICAgaW50CisgICAgICAgIG1haW4gKCkKKyAgICAgICAgeworICAgICAgICAgIGV4aXQgKHJlbmFtZSAoImNvbmZ0ZXN0LmQxLyIsICJjb25mdGVzdC5kMiIpID8gMSA6IDApOworICAgICAgICB9CisKK19BQ0VPRgorcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgZ2xfY3ZfZnVuY19yZW5hbWVfdHJhaWxpbmdfc2xhc2hfYnVnPW5vCitlbHNlCisgIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1CitlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisoIGV4aXQgJGFjX3N0YXR1cyApCitnbF9jdl9mdW5jX3JlbmFtZV90cmFpbGluZ19zbGFzaF9idWc9eWVzCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorCisKKworICAgICAgcm0gLXJmIGNvbmZ0ZXN0LmQxIGNvbmZ0ZXN0LmQyCisKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRnbF9jdl9mdW5jX3JlbmFtZV90cmFpbGluZ19zbGFzaF9idWciID4mNQorZWNobyAiJHtFQ0hPX1R9JGdsX2N2X2Z1bmNfcmVuYW1lX3RyYWlsaW5nX3NsYXNoX2J1ZyIgPiY2OyB9CisgIGlmIHRlc3QgJGdsX2N2X2Z1bmNfcmVuYW1lX3RyYWlsaW5nX3NsYXNoX2J1ZyA9IHllczsgdGhlbgorICAgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIHJlbmFtZS4kYWNfb2JqZXh0IgorCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSByZW5hbWUgcnBsX3JlbmFtZQorX0FDRU9GCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgUkVOQU1FX1RSQUlMSU5HX1NMQVNIX0JVRyAxCitfQUNFT0YKKworICAgIDoKKyAgZmkKKworCisKK2ZvciBhY19mdW5jIGluIHJwbWF0Y2gKK2RvCithc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgeyBhc192YXI9JGFzX2FjX3ZhcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgorICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCisjZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYworCisvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCisgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisKKyN1bmRlZiAkYWNfZnVuYworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyICRhY19mdW5jICgpOworLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCisgICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCisjaWYgZGVmaW5lZCBfX3N0dWJfJGFjX2Z1bmMgfHwgZGVmaW5lZCBfX3N0dWJfX18kYWNfZnVuYworY2hva2UgbWUKKyNlbmRpZgorCitpbnQKK21haW4gKCkKK3sKK3JldHVybiAkYWNfZnVuYyAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgIGV2YWwgIiRhc19hY192YXI9eWVzIgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJZXZhbCAiJGFzX2FjX3Zhcj1ubyIKK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2FjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYAorCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CitpZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2Vsc2UKKyAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgJGFjX2Z1bmMuJGFjX29iamV4dCIKK2ZpCitkb25lCisKKyAgaWYgdGVzdCAkYWNfY3ZfZnVuY19ycG1hdGNoID0gbm87IHRoZW4KKyAgICA6CisgIGZpCisKKworICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBzYWZlLXJlYWQuJGFjX29iamV4dCIKKworCisKKworCisKKyAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgc2FmZS13cml0ZS4kYWNfb2JqZXh0IgorCisKKworCisKKworCisKKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHNzaXplX3QiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3NpemVfdC4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7Z3RfY3Zfc3NpemVfdCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KK2ludAorbWFpbiAoKQoreworaW50IHggPSBzaXplb2YgKHNzaXplX3QgKikgKyBzaXplb2YgKHNzaXplX3QpOworICAgICAgICByZXR1cm4gIXg7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgZ3RfY3Zfc3NpemVfdD15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWd0X2N2X3NzaXplX3Q9bm8KK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGd0X2N2X3NzaXplX3QiID4mNQorZWNobyAiJHtFQ0hPX1R9JGd0X2N2X3NzaXplX3QiID4mNjsgfQorICBpZiB0ZXN0ICRndF9jdl9zc2l6ZV90ID0gbm87IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgc3NpemVfdCBpbnQKK19BQ0VPRgorCisgIGZpCisKKworICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgdmFfY29weSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciB2YV9jb3B5Li4uICRFQ0hPX0MiID4mNjsgfQorICBpZiB0ZXN0ICIke2dsX2N2X2Z1bmNfdmFfY29weStzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorCisgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RkYXJnLmg+CitpbnQKK21haW4gKCkKK3sKKworI2lmbmRlZiB2YV9jb3B5Cit2b2lkICgqZnVuYykgKHZhX2xpc3QsIHZhX2xpc3QpID0gdmFfY29weTsKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgZ2xfY3ZfZnVuY192YV9jb3B5PXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJZ2xfY3ZfZnVuY192YV9jb3B5PW5vCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkZ2xfY3ZfZnVuY192YV9jb3B5IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRnbF9jdl9mdW5jX3ZhX2NvcHkiID4mNjsgfQorICBpZiB0ZXN0ICRnbF9jdl9mdW5jX3ZhX2NvcHkgPSBubzsgdGhlbgorICAgICMgUHJvdmlkZSBhIHN1YnN0aXR1dGUsIGVpdGhlciBfX3ZhX2NvcHkgb3IgYXMgYSBzaW1wbGUgYXNzaWdubWVudC4KKyAgICBpZiB0ZXN0ICIke2dsX2N2X2Z1bmNfX192YV9jb3B5K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKKyAgICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0ZGFyZy5oPgoraW50CittYWluICgpCit7CisKKyNpZm5kZWYgX192YV9jb3B5CitlcnJvciwgYmFpbCBvdXQKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgZ2xfY3ZfZnVuY19fX3ZhX2NvcHk9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlnbF9jdl9mdW5jX19fdmFfY29weT1ubworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorCisgICAgaWYgdGVzdCAkZ2xfY3ZfZnVuY19fX3ZhX2NvcHkgPSB5ZXM7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgdmFfY29weSBfX3ZhX2NvcHkKK19BQ0VPRgorCisgICAgZWxzZQorCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgdmFfY29weSBnbF92YV9jb3B5CitfQUNFT0YKKworICAgIGZpCisgIGZpCisKKworCisKKyAgIyBEZWZpbmUgdHdvIGFkZGl0aW9uYWwgdmFyaWFibGVzIHVzZWQgaW4gdGhlIE1ha2VmaWxlIHN1YnN0aXR1dGlvbi4KKworICBpZiB0ZXN0ICIkYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaCIgPSB5ZXM7IHRoZW4KKyAgICBTVERCT09MX0g9JycKKyAgZWxzZQorICAgIFNUREJPT0xfSD0nc3RkYm9vbC5oJworICBmaQorCisKKyAgaWYgdGVzdCAiJGFjX2N2X3R5cGVfX0Jvb2wiID0geWVzOyB0aGVuCisgICAgSEFWRV9fQk9PTD0xCisgIGVsc2UKKyAgICBIQVZFX19CT09MPTAKKyAgZmkKKworCisKKworCisgIGlmIHRlc3QgJGFjX2N2X3R5cGVfbG9uZ19sb25nX2ludCA9IHllczsgdGhlbgorICAgIEhBVkVfTE9OR19MT05HX0lOVD0xCisgIGVsc2UKKyAgICBIQVZFX0xPTkdfTE9OR19JTlQ9MAorICBmaQorCisKKyAgaWYgdGVzdCAkYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmdfaW50ID0geWVzOyB0aGVuCisgICAgSEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UPTEKKyAgZWxzZQorICAgIEhBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVD0wCisgIGZpCisKKworICAgICAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX2ludHR5cGVzX2ggPSB5ZXM7IHRoZW4KKyAgICBIQVZFX0lOVFRZUEVTX0g9MQorICBlbHNlCisgICAgSEFWRV9JTlRUWVBFU19IPTAKKyAgZmkKKworCisgICAgICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3lzX3R5cGVzX2ggPSB5ZXM7IHRoZW4KKyAgICBIQVZFX1NZU19UWVBFU19IPTEKKyAgZWxzZQorICAgIEhBVkVfU1lTX1RZUEVTX0g9MAorICBmaQorCisKKyAgICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkaW50X2ggPSB5ZXM7IHRoZW4KKyAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGFic29sdXRlIG5hbWUgb2YgPHN0ZGludC5oPiIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGFic29sdXRlIG5hbWUgb2YgPHN0ZGludC5oPi4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7Z2xfY3ZfYWJzb2x1dGVfc3RkaW50X2grc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworCisKKworCisgICAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGludF9oID0geWVzOyB0aGVuCisgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRpbnQuaD4KK19BQ0VPRgorICAgICAgZ2xfY3ZfYWJzb2x1dGVfc3RkaW50X2g9YChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKK3NlZCAtbiAnXCMvc3RkaW50Lmgje3MjLioiXCguKi9zdGRpbnQuaFwpIi4qI1wxIztzI14vW14vXSMvLyYjO3A7cTt9J2AKKyAgICBmaQorCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkZ2xfY3ZfYWJzb2x1dGVfc3RkaW50X2giID4mNQorZWNobyAiJHtFQ0hPX1R9JGdsX2N2X2Fic29sdXRlX3N0ZGludF9oIiA+JjY7IH0KK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgQUJTT0xVVEVfU1RESU5UX0ggIiRnbF9jdl9hYnNvbHV0ZV9zdGRpbnRfaCIKK19BQ0VPRgorCisKKyAgICBBQlNPTFVURV9TVERJTlRfSD1cIiRnbF9jdl9hYnNvbHV0ZV9zdGRpbnRfaFwiCisgICAgSEFWRV9TVERJTlRfSD0xCisgIGVsc2UKKyAgICBBQlNPTFVURV9TVERJTlRfSD1cIm5vL3N1Y2gvZmlsZS9zdGRpbnQuaFwiCisgICAgSEFWRV9TVERJTlRfSD0wCisgIGZpCisKKworCisgICAgICAgICAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGludF9oID0geWVzOyB0aGVuCisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBzdGRpbnQuaCBjb25mb3JtcyB0byBDOTkiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHN0ZGludC5oIGNvbmZvcm1zIHRvIEM5OS4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7Z2xfY3ZfaGVhZGVyX3dvcmtpbmdfc3RkaW50X2grc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgZ2xfY3ZfaGVhZGVyX3dvcmtpbmdfc3RkaW50X2g9bm8KKyAgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKworICAgICAgICAgLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisgIC8qIEJTRC9PUyA0LjAuMSBoYXMgYSBidWc6IDxzdGRkZWYuaD4sIDxzdGRpby5oPiBhbmQgPHRpbWUuaD4gbXVzdCBiZQorICAgICBpbmNsdWRlZCBiZWZvcmUgPHdjaGFyLmg+LiAgKi8KKyAgI2luY2x1ZGUgPHN0ZGRlZi5oPgorICAjaW5jbHVkZSA8c2lnbmFsLmg+CisgICNpbmNsdWRlIDxzdGRpby5oPgorICAjaW5jbHVkZSA8dGltZS5oPgorICAjaW5jbHVkZSA8d2NoYXIuaD4KKworCisjZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNST1MgMSAvKiB0byBtYWtlIGl0IHdvcmsgYWxzbyBpbiBDKysgbW9kZSAqLworI2RlZmluZSBfX1NURENfQ09OU1RBTlRfTUFDUk9TIDEgLyogdG8gbWFrZSBpdCB3b3JrIGFsc28gaW4gQysrIG1vZGUgKi8KKyNpbmNsdWRlIEFCU09MVVRFX1NURElOVF9ICisjaWZkZWYgSU5UOF9NQVgKK2ludDhfdCBhMSA9IElOVDhfTUFYOworaW50OF90IGExbWluID0gSU5UOF9NSU47CisjZW5kaWYKKyNpZmRlZiBJTlQxNl9NQVgKK2ludDE2X3QgYTIgPSBJTlQxNl9NQVg7CitpbnQxNl90IGEybWluID0gSU5UMTZfTUlOOworI2VuZGlmCisjaWZkZWYgSU5UMzJfTUFYCitpbnQzMl90IGEzID0gSU5UMzJfTUFYOworaW50MzJfdCBhM21pbiA9IElOVDMyX01JTjsKKyNlbmRpZgorI2lmZGVmIElOVDY0X01BWAoraW50NjRfdCBhNCA9IElOVDY0X01BWDsKK2ludDY0X3QgYTRtaW4gPSBJTlQ2NF9NSU47CisjZW5kaWYKKyNpZmRlZiBVSU5UOF9NQVgKK3VpbnQ4X3QgYjEgPSBVSU5UOF9NQVg7CisjZWxzZQordHlwZWRlZiBpbnQgYjFbKHVuc2lnbmVkIGNoYXIpIC0xICE9IDI1NSA/IDEgOiAtMV07CisjZW5kaWYKKyNpZmRlZiBVSU5UMTZfTUFYCit1aW50MTZfdCBiMiA9IFVJTlQxNl9NQVg7CisjZW5kaWYKKyNpZmRlZiBVSU5UMzJfTUFYCit1aW50MzJfdCBiMyA9IFVJTlQzMl9NQVg7CisjZW5kaWYKKyNpZmRlZiBVSU5UNjRfTUFYCit1aW50NjRfdCBiNCA9IFVJTlQ2NF9NQVg7CisjZW5kaWYKK2ludF9sZWFzdDhfdCBjMSA9IElOVDhfQyAoMHg3Zik7CitpbnRfbGVhc3Q4X3QgYzFtYXggPSBJTlRfTEVBU1Q4X01BWDsKK2ludF9sZWFzdDhfdCBjMW1pbiA9IElOVF9MRUFTVDhfTUlOOworaW50X2xlYXN0MTZfdCBjMiA9IElOVDE2X0MgKDB4N2ZmZik7CitpbnRfbGVhc3QxNl90IGMybWF4ID0gSU5UX0xFQVNUMTZfTUFYOworaW50X2xlYXN0MTZfdCBjMm1pbiA9IElOVF9MRUFTVDE2X01JTjsKK2ludF9sZWFzdDMyX3QgYzMgPSBJTlQzMl9DICgweDdmZmZmZmZmKTsKK2ludF9sZWFzdDMyX3QgYzNtYXggPSBJTlRfTEVBU1QzMl9NQVg7CitpbnRfbGVhc3QzMl90IGMzbWluID0gSU5UX0xFQVNUMzJfTUlOOworaW50X2xlYXN0NjRfdCBjNCA9IElOVDY0X0MgKDB4N2ZmZmZmZmZmZmZmZmZmZik7CitpbnRfbGVhc3Q2NF90IGM0bWF4ID0gSU5UX0xFQVNUNjRfTUFYOworaW50X2xlYXN0NjRfdCBjNG1pbiA9IElOVF9MRUFTVDY0X01JTjsKK3VpbnRfbGVhc3Q4X3QgZDEgPSBVSU5UOF9DICgweGZmKTsKK3VpbnRfbGVhc3Q4X3QgZDFtYXggPSBVSU5UX0xFQVNUOF9NQVg7Cit1aW50X2xlYXN0MTZfdCBkMiA9IFVJTlQxNl9DICgweGZmZmYpOwordWludF9sZWFzdDE2X3QgZDJtYXggPSBVSU5UX0xFQVNUMTZfTUFYOwordWludF9sZWFzdDMyX3QgZDMgPSBVSU5UMzJfQyAoMHhmZmZmZmZmZik7Cit1aW50X2xlYXN0MzJfdCBkM21heCA9IFVJTlRfTEVBU1QzMl9NQVg7Cit1aW50X2xlYXN0NjRfdCBkNCA9IFVJTlQ2NF9DICgweGZmZmZmZmZmZmZmZmZmZmYpOwordWludF9sZWFzdDY0X3QgZDRtYXggPSBVSU5UX0xFQVNUNjRfTUFYOworaW50X2Zhc3Q4X3QgZTEgPSBJTlRfRkFTVDhfTUFYOworaW50X2Zhc3Q4X3QgZTFtaW4gPSBJTlRfRkFTVDhfTUlOOworaW50X2Zhc3QxNl90IGUyID0gSU5UX0ZBU1QxNl9NQVg7CitpbnRfZmFzdDE2X3QgZTJtaW4gPSBJTlRfRkFTVDE2X01JTjsKK2ludF9mYXN0MzJfdCBlMyA9IElOVF9GQVNUMzJfTUFYOworaW50X2Zhc3QzMl90IGUzbWluID0gSU5UX0ZBU1QzMl9NSU47CitpbnRfZmFzdDY0X3QgZTQgPSBJTlRfRkFTVDY0X01BWDsKK2ludF9mYXN0NjRfdCBlNG1pbiA9IElOVF9GQVNUNjRfTUlOOwordWludF9mYXN0OF90IGYxID0gVUlOVF9GQVNUOF9NQVg7Cit1aW50X2Zhc3QxNl90IGYyID0gVUlOVF9GQVNUMTZfTUFYOwordWludF9mYXN0MzJfdCBmMyA9IFVJTlRfRkFTVDMyX01BWDsKK3VpbnRfZmFzdDY0X3QgZjQgPSBVSU5UX0ZBU1Q2NF9NQVg7CisjaWZkZWYgSU5UUFRSX01BWAoraW50cHRyX3QgZyA9IElOVFBUUl9NQVg7CitpbnRwdHJfdCBnbWluID0gSU5UUFRSX01JTjsKKyNlbmRpZgorI2lmZGVmIFVJTlRQVFJfTUFYCit1aW50cHRyX3QgaCA9IFVJTlRQVFJfTUFYOworI2VuZGlmCitpbnRtYXhfdCBpID0gSU5UTUFYX01BWDsKK3VpbnRtYXhfdCBqID0gVUlOVE1BWF9NQVg7CitzdHJ1Y3QgcyB7CisgIGludCBjaGVja19QVFJESUZGOiBQVFJESUZGX01JTiA8IChwdHJkaWZmX3QpIDAgJiYgKHB0cmRpZmZfdCkgMCA8IFBUUkRJRkZfTUFYID8gMSA6IC0xOworICBpbnQgY2hlY2tfU0lHX0FUT01JQzogU0lHX0FUT01JQ19NSU4gPD0gKHNpZ19hdG9taWNfdCkgMCAmJiAoc2lnX2F0b21pY190KSAwIDwgU0lHX0FUT01JQ19NQVggPyAxIDogLTE7CisgIGludCBjaGVja19TSVpFOiAoc2l6ZV90KSAwIDwgU0laRV9NQVggPyAxIDogLTE7CisgIGludCBjaGVja19XQ0hBUjogV0NIQVJfTUlOIDw9ICh3Y2hhcl90KSAwICYmICh3Y2hhcl90KSAwIDwgV0NIQVJfTUFYID8gMSA6IC0xOworICBpbnQgY2hlY2tfV0lOVDogV0lOVF9NSU4gPD0gKHdpbnRfdCkgMCAmJiAod2ludF90KSAwIDwgV0lOVF9NQVggPyAxIDogLTE7CisKKyAgLyogRGV0ZWN0IGJ1Z3MgaW4gZ2xpYmMgMi40IGFuZCBTb2xhcmlzIDEwIHN0ZGludC5oLCBhbW9uZyBvdGhlcnMuICAqLworICBpbnQgY2hlY2tfVUlOVDhfQzoKKyAgICAgICAgKC0xIDwgVUlOVDhfQyAoMCkpID09ICgtMSA8ICh1aW50X2xlYXN0OF90KSAwKSA/IDEgOiAtMTsKKyAgaW50IGNoZWNrX1VJTlQxNl9DOgorICAgICAgICAoLTEgPCBVSU5UMTZfQyAoMCkpID09ICgtMSA8ICh1aW50X2xlYXN0MTZfdCkgMCkgPyAxIDogLTE7CisKKyAgLyogRGV0ZWN0IGJ1Z3MgaW4gT3BlbkJTRCAzLjkgc3RkaW50LmguICAqLworI2lmZGVmIFVJTlQ4X01BWAorICBpbnQgY2hlY2tfdWludDg6ICh1aW50OF90KSAtMSA9PSBVSU5UOF9NQVggPyAxIDogLTE7CisjZW5kaWYKKyNpZmRlZiBVSU5UMTZfTUFYCisgIGludCBjaGVja191aW50MTY6ICh1aW50MTZfdCkgLTEgPT0gVUlOVDE2X01BWCA/IDEgOiAtMTsKKyNlbmRpZgorI2lmZGVmIFVJTlQzMl9NQVgKKyAgaW50IGNoZWNrX3VpbnQzMjogKHVpbnQzMl90KSAtMSA9PSBVSU5UMzJfTUFYID8gMSA6IC0xOworI2VuZGlmCisjaWZkZWYgVUlOVDY0X01BWAorICBpbnQgY2hlY2tfdWludDY0OiAodWludDY0X3QpIC0xID09IFVJTlQ2NF9NQVggPyAxIDogLTE7CisjZW5kaWYKKyAgaW50IGNoZWNrX3VpbnRfbGVhc3Q4OiAodWludF9sZWFzdDhfdCkgLTEgPT0gVUlOVF9MRUFTVDhfTUFYID8gMSA6IC0xOworICBpbnQgY2hlY2tfdWludF9sZWFzdDE2OiAodWludF9sZWFzdDE2X3QpIC0xID09IFVJTlRfTEVBU1QxNl9NQVggPyAxIDogLTE7CisgIGludCBjaGVja191aW50X2xlYXN0MzI6ICh1aW50X2xlYXN0MzJfdCkgLTEgPT0gVUlOVF9MRUFTVDMyX01BWCA/IDEgOiAtMTsKKyAgaW50IGNoZWNrX3VpbnRfbGVhc3Q2NDogKHVpbnRfbGVhc3Q2NF90KSAtMSA9PSBVSU5UX0xFQVNUNjRfTUFYID8gMSA6IC0xOworICBpbnQgY2hlY2tfdWludF9mYXN0ODogKHVpbnRfZmFzdDhfdCkgLTEgPT0gVUlOVF9GQVNUOF9NQVggPyAxIDogLTE7CisgIGludCBjaGVja191aW50X2Zhc3QxNjogKHVpbnRfZmFzdDE2X3QpIC0xID09IFVJTlRfRkFTVDE2X01BWCA/IDEgOiAtMTsKKyAgaW50IGNoZWNrX3VpbnRfZmFzdDMyOiAodWludF9mYXN0MzJfdCkgLTEgPT0gVUlOVF9GQVNUMzJfTUFYID8gMSA6IC0xOworICBpbnQgY2hlY2tfdWludF9mYXN0NjQ6ICh1aW50X2Zhc3Q2NF90KSAtMSA9PSBVSU5UX0ZBU1Q2NF9NQVggPyAxIDogLTE7CisgIGludCBjaGVja191aW50cHRyOiAodWludHB0cl90KSAtMSA9PSBVSU5UUFRSX01BWCA/IDEgOiAtMTsKKyAgaW50IGNoZWNrX3VpbnRtYXg6ICh1aW50bWF4X3QpIC0xID09IFVJTlRNQVhfTUFYID8gMSA6IC0xOworICBpbnQgY2hlY2tfc2l6ZTogKHNpemVfdCkgLTEgPT0gU0laRV9NQVggPyAxIDogLTE7Cit9OworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisgIGdsX2N2X2hlYWRlcl93b3JraW5nX3N0ZGludF9oPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisKK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGdsX2N2X2hlYWRlcl93b3JraW5nX3N0ZGludF9oIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRnbF9jdl9oZWFkZXJfd29ya2luZ19zdGRpbnRfaCIgPiY2OyB9CisgIGZpCisgIGlmIHRlc3QgIiRnbF9jdl9oZWFkZXJfd29ya2luZ19zdGRpbnRfaCIgPSB5ZXM7IHRoZW4KKyAgICBTVERJTlRfSD0KKyAgZWxzZQorCisKK2ZvciBhY19oZWFkZXIgaW4gc3lzL2ludHR5cGVzLmggc3lzL2JpdHlwZXMuaAorZG8KK2FzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAoraWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZmkKK2FjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CitlbHNlCisgICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjY7IH0KK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKKyNpbmNsdWRlIDwkYWNfaGVhZGVyPgorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisgIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX2hlYWRlcl9jb21waWxlcj1ubworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2OyB9CisKKyMgSXMgdGhlIGhlYWRlciBwcmVzZW50PworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2OyB9CitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDwkYWNfaGVhZGVyPgorX0FDRU9GCitpZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKwkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH07IHRoZW4KKyAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyAgYWNfaGVhZGVyX3ByZXByb2M9bm8KK2ZpCisKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Cit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNjsgfQorCisjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKyAgeWVzOm5vOiApCisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisgICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCisgICAgOzsKKyAgbm86eWVzOiogKQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CisgICAgKCBjYXQgPDxcX0FTQk9YCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1wYXJ0ZWRAZ251Lm9yZyAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCitfQVNCT1gKKyAgICAgKSB8IHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorICAgIDs7Citlc2FjCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCitmaQorYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCisJICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKworZmkKK2lmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKyAgICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3lzX2ludHR5cGVzX2ggPSB5ZXM7IHRoZW4KKyAgICAgIEhBVkVfU1lTX0lOVFRZUEVTX0g9MQorICAgIGVsc2UKKyAgICAgIEhBVkVfU1lTX0lOVFRZUEVTX0g9MAorICAgIGZpCisKKyAgICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3lzX2JpdHlwZXNfaCA9IHllczsgdGhlbgorICAgICAgSEFWRV9TWVNfQklUWVBFU19IPTEKKyAgICBlbHNlCisgICAgICBIQVZFX1NZU19CSVRZUEVTX0g9MAorICAgIGZpCisKKworCisKKworCisKKworCisKKyAgZm9yIGdsdHlwZSBpbiBwdHJkaWZmX3Qgc2lnX2F0b21pY190IHNpemVfdCB3Y2hhcl90IHdpbnRfdCA7IGRvCisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGJpdCBzaXplIG9mICRnbHR5cGUiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgYml0IHNpemUgb2YgJGdsdHlwZS4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHsgYXNfdmFyPWdsX2N2X2JpdHNpemVvZl8ke2dsdHlwZX07IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgIyBEZXBlbmRpbmcgdXBvbiB0aGUgc2l6ZSwgY29tcHV0ZSB0aGUgbG8gYW5kIGhpIGJvdW5kcy4KK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisgIC8qIEJTRC9PUyA0LjAuMSBoYXMgYSBidWc6IDxzdGRkZWYuaD4sIDxzdGRpby5oPiBhbmQgPHRpbWUuaD4gbXVzdCBiZQorICAgICBpbmNsdWRlZCBiZWZvcmUgPHdjaGFyLmg+LiAgKi8KKyAgI2luY2x1ZGUgPHN0ZGRlZi5oPgorICAjaW5jbHVkZSA8c2lnbmFsLmg+CisgICNpbmNsdWRlIDxzdGRpby5oPgorICAjaW5jbHVkZSA8dGltZS5oPgorICAjaW5jbHVkZSA8d2NoYXIuaD4KKworI2luY2x1ZGUgPGxpbWl0cy5oPgoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoc2l6ZW9mICgkZ2x0eXBlKSAqIENIQVJfQklUKSA+PSAwKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisgIGFjX2xvPTAgYWNfbWlkPTAKKyAgd2hpbGUgOjsgZG8KKyAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAvKiBCU0QvT1MgNC4wLjEgaGFzIGEgYnVnOiA8c3RkZGVmLmg+LCA8c3RkaW8uaD4gYW5kIDx0aW1lLmg+IG11c3QgYmUKKyAgICAgaW5jbHVkZWQgYmVmb3JlIDx3Y2hhci5oPi4gICovCisgICNpbmNsdWRlIDxzdGRkZWYuaD4KKyAgI2luY2x1ZGUgPHNpZ25hbC5oPgorICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgI2luY2x1ZGUgPHRpbWUuaD4KKyAgI2luY2x1ZGUgPHdjaGFyLmg+CisKKyNpbmNsdWRlIDxsaW1pdHMuaD4KK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKHNpemVvZiAoJGdsdHlwZSkgKiBDSEFSX0JJVCkgPD0gJGFjX21pZCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICBhY19oaT0kYWNfbWlkOyBicmVhaworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfbG89YGV4cHIgJGFjX21pZCArIDFgCisJCQlpZiB0ZXN0ICRhY19sbyAtbGUgJGFjX21pZDsgdGhlbgorCQkJICBhY19sbz0gYWNfaGk9CisJCQkgIGJyZWFrCisJCQlmaQorCQkJYWNfbWlkPWBleHByIDIgJyonICRhY19taWQgKyAxYAorZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGRvbmUKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisgIC8qIEJTRC9PUyA0LjAuMSBoYXMgYSBidWc6IDxzdGRkZWYuaD4sIDxzdGRpby5oPiBhbmQgPHRpbWUuaD4gbXVzdCBiZQorICAgICBpbmNsdWRlZCBiZWZvcmUgPHdjaGFyLmg+LiAgKi8KKyAgI2luY2x1ZGUgPHN0ZGRlZi5oPgorICAjaW5jbHVkZSA8c2lnbmFsLmg+CisgICNpbmNsdWRlIDxzdGRpby5oPgorICAjaW5jbHVkZSA8dGltZS5oPgorICAjaW5jbHVkZSA8d2NoYXIuaD4KKworI2luY2x1ZGUgPGxpbWl0cy5oPgoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoc2l6ZW9mICgkZ2x0eXBlKSAqIENIQVJfQklUKSA8IDApXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgYWNfaGk9LTEgYWNfbWlkPS0xCisgIHdoaWxlIDo7IGRvCisgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyAgLyogQlNEL09TIDQuMC4xIGhhcyBhIGJ1ZzogPHN0ZGRlZi5oPiwgPHN0ZGlvLmg+IGFuZCA8dGltZS5oPiBtdXN0IGJlCisgICAgIGluY2x1ZGVkIGJlZm9yZSA8d2NoYXIuaD4uICAqLworICAjaW5jbHVkZSA8c3RkZGVmLmg+CisgICNpbmNsdWRlIDxzaWduYWwuaD4KKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgICNpbmNsdWRlIDx0aW1lLmg+CisgICNpbmNsdWRlIDx3Y2hhci5oPgorCisjaW5jbHVkZSA8bGltaXRzLmg+CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKChzaXplb2YgKCRnbHR5cGUpICogQ0hBUl9CSVQpID49ICRhY19taWQpXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgYWNfbG89JGFjX21pZDsgYnJlYWsKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX2hpPWBleHByICcoJyAkYWNfbWlkICcpJyAtIDFgCisJCQlpZiB0ZXN0ICRhY19taWQgLWxlICRhY19oaTsgdGhlbgorCQkJICBhY19sbz0gYWNfaGk9CisJCQkgIGJyZWFrCisJCQlmaQorCQkJYWNfbWlkPWBleHByIDIgJyonICRhY19taWRgCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZG9uZQorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfbG89IGFjX2hpPQorZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyMgQmluYXJ5IHNlYXJjaCBiZXR3ZWVuIGxvIGFuZCBoaSBib3VuZHMuCit3aGlsZSB0ZXN0ICJ4JGFjX2xvIiAhPSAieCRhY19oaSI7IGRvCisgIGFjX21pZD1gZXhwciAnKCcgJGFjX2hpIC0gJGFjX2xvICcpJyAvIDIgKyAkYWNfbG9gCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisgIC8qIEJTRC9PUyA0LjAuMSBoYXMgYSBidWc6IDxzdGRkZWYuaD4sIDxzdGRpby5oPiBhbmQgPHRpbWUuaD4gbXVzdCBiZQorICAgICBpbmNsdWRlZCBiZWZvcmUgPHdjaGFyLmg+LiAgKi8KKyAgI2luY2x1ZGUgPHN0ZGRlZi5oPgorICAjaW5jbHVkZSA8c2lnbmFsLmg+CisgICNpbmNsdWRlIDxzdGRpby5oPgorICAjaW5jbHVkZSA8dGltZS5oPgorICAjaW5jbHVkZSA8d2NoYXIuaD4KKworI2luY2x1ZGUgPGxpbWl0cy5oPgoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoc2l6ZW9mICgkZ2x0eXBlKSAqIENIQVJfQklUKSA8PSAkYWNfbWlkKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisgIGFjX2hpPSRhY19taWQKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX2xvPWBleHByICcoJyAkYWNfbWlkICcpJyArIDFgCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2RvbmUKK2Nhc2UgJGFjX2xvIGluCis/KikgcmVzdWx0PSRhY19sbzs7CisnJykgcmVzdWx0PXVua25vd24gOzsKK2VzYWMKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyAgLyogQlNEL09TIDQuMC4xIGhhcyBhIGJ1ZzogPHN0ZGRlZi5oPiwgPHN0ZGlvLmg+IGFuZCA8dGltZS5oPiBtdXN0IGJlCisgICAgIGluY2x1ZGVkIGJlZm9yZSA8d2NoYXIuaD4uICAqLworICAjaW5jbHVkZSA8c3RkZGVmLmg+CisgICNpbmNsdWRlIDxzaWduYWwuaD4KKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgICNpbmNsdWRlIDx0aW1lLmg+CisgICNpbmNsdWRlIDx3Y2hhci5oPgorCisjaW5jbHVkZSA8bGltaXRzLmg+CitzdGF0aWMgbG9uZyBpbnQgbG9uZ3ZhbCAoKSB7IHJldHVybiBzaXplb2YgKCRnbHR5cGUpICogQ0hBUl9CSVQ7IH0KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGludCB1bG9uZ3ZhbCAoKSB7IHJldHVybiBzaXplb2YgKCRnbHR5cGUpICogQ0hBUl9CSVQ7IH0KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgoraW50CittYWluICgpCit7CisKKyAgRklMRSAqZiA9IGZvcGVuICgiY29uZnRlc3QudmFsIiwgInciKTsKKyAgaWYgKCEgZikKKyAgICByZXR1cm4gMTsKKyAgaWYgKChzaXplb2YgKCRnbHR5cGUpICogQ0hBUl9CSVQpIDwgMCkKKyAgICB7CisgICAgICBsb25nIGludCBpID0gbG9uZ3ZhbCAoKTsKKyAgICAgIGlmIChpICE9IChzaXplb2YgKCRnbHR5cGUpICogQ0hBUl9CSVQpKQorCXJldHVybiAxOworICAgICAgZnByaW50ZiAoZiwgIiVsZFxuIiwgaSk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgdW5zaWduZWQgbG9uZyBpbnQgaSA9IHVsb25ndmFsICgpOworICAgICAgaWYgKGkgIT0gKHNpemVvZiAoJGdsdHlwZSkgKiBDSEFSX0JJVCkpCisJcmV0dXJuIDE7CisgICAgICBmcHJpbnRmIChmLCAiJWx1XG4iLCBpKTsKKyAgICB9CisgIHJldHVybiBmZXJyb3IgKGYpIHx8IGZjbG9zZSAoZikgIT0gMDsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfdHJ5IikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICByZXN1bHQ9YGNhdCBjb25mdGVzdC52YWxgCitlbHNlCisgIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1CitlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisoIGV4aXQgJGFjX3N0YXR1cyApCityZXN1bHQ9dW5rbm93bgorZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvbmZ0ZXN0LnZhbAorICAgICAgIGV2YWwgZ2xfY3ZfYml0c2l6ZW9mXyR7Z2x0eXBlfT1cJHJlc3VsdAorCitmaQorYWNfcmVzPWBldmFsIGVjaG8gJyR7J2dsX2N2X2JpdHNpemVvZl8ke2dsdHlwZX0nfSdgCisJICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKyAgICBldmFsIHJlc3VsdD1cJGdsX2N2X2JpdHNpemVvZl8ke2dsdHlwZX0KKyAgICBpZiB0ZXN0ICRyZXN1bHQgPSB1bmtub3duOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ9MAorICAgIGZpCisgICAgR0xUWVBFPWBlY2hvICIkZ2x0eXBlIiB8IHRyICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiAnICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl8nYAorICAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgQklUU0laRU9GXyR7R0xUWVBFfSAkcmVzdWx0CitfQUNFT0YKKworICAgIGV2YWwgQklUU0laRU9GXyR7R0xUWVBFfT1cJHJlc3VsdAorICBkb25lCisKKworCisKKworCisKKyAgZm9yIGdsdHlwZSBpbiBzaWdfYXRvbWljX3Qgd2NoYXJfdCB3aW50X3QgOyBkbworICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgJGdsdHlwZSBpcyBzaWduZWQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyICRnbHR5cGUgaXMgc2lnbmVkLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgeyBhc192YXI9Z2xfY3ZfdHlwZV8ke2dsdHlwZX1fc2lnbmVkOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisgIC8qIEJTRC9PUyA0LjAuMSBoYXMgYSBidWc6IDxzdGRkZWYuaD4sIDxzdGRpby5oPiBhbmQgPHRpbWUuaD4gbXVzdCBiZQorICAgICBpbmNsdWRlZCBiZWZvcmUgPHdjaGFyLmg+LiAgKi8KKyAgI2luY2x1ZGUgPHN0ZGRlZi5oPgorICAjaW5jbHVkZSA8c2lnbmFsLmg+CisgICNpbmNsdWRlIDxzdGRpby5oPgorICAjaW5jbHVkZSA8dGltZS5oPgorICAjaW5jbHVkZSA8d2NoYXIuaD4KKworICAgICAgICAgICAgaW50IHZlcmlmeVsyICogKCgkZ2x0eXBlKSAtMSA8ICgkZ2x0eXBlKSAwKSAtIDFdOworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICByZXN1bHQ9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlyZXN1bHQ9bm8KK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgIGV2YWwgZ2xfY3ZfdHlwZV8ke2dsdHlwZX1fc2lnbmVkPVwkcmVzdWx0CisKK2ZpCithY19yZXM9YGV2YWwgZWNobyAnJHsnZ2xfY3ZfdHlwZV8ke2dsdHlwZX1fc2lnbmVkJ30nYAorCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CisgICAgZXZhbCByZXN1bHQ9XCRnbF9jdl90eXBlXyR7Z2x0eXBlfV9zaWduZWQKKyAgICBHTFRZUEU9YGVjaG8gJGdsdHlwZSB8IHRyICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiAnICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl8nYAorICAgIGlmIHRlc3QgIiRyZXN1bHQiID0geWVzOyB0aGVuCisgICAgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU0lHTkVEXyR7R0xUWVBFfSAxCitfQUNFT0YKKworICAgICAgZXZhbCBIQVZFX1NJR05FRF8ke0dMVFlQRX09MQorICAgIGVsc2UKKyAgICAgIGV2YWwgSEFWRV9TSUdORURfJHtHTFRZUEV9PTAKKyAgICBmaQorICBkb25lCisKKworICBnbF9jdl90eXBlX3B0cmRpZmZfdF9zaWduZWQ9eWVzCisgIGdsX2N2X3R5cGVfc2l6ZV90X3NpZ25lZD1ubworCisKKworCisKKworCisgIGZvciBnbHR5cGUgaW4gcHRyZGlmZl90IHNpZ19hdG9taWNfdCBzaXplX3Qgd2NoYXJfdCB3aW50X3QgOyBkbworICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkZ2x0eXBlIGludGVnZXIgbGl0ZXJhbCBzdWZmaXgiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGdsdHlwZSBpbnRlZ2VyIGxpdGVyYWwgc3VmZml4Li4uICRFQ0hPX0MiID4mNjsgfQoraWYgeyBhc192YXI9Z2xfY3ZfdHlwZV8ke2dsdHlwZX1fc3VmZml4OyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGV2YWwgZ2xfY3ZfdHlwZV8ke2dsdHlwZX1fc3VmZml4PW5vCisgICAgICAgZXZhbCByZXN1bHQ9XCRnbF9jdl90eXBlXyR7Z2x0eXBlfV9zaWduZWQKKyAgICAgICBpZiB0ZXN0ICIkcmVzdWx0IiA9IHllczsgdGhlbgorICAgICAgICAgZ2xzdWZ1PQorICAgICAgIGVsc2UKKyAgICAgICAgIGdsc3VmdT11CisgICAgICAgZmkKKyAgICAgICBmb3IgZ2xzdWYgaW4gIiRnbHN1ZnUiICR7Z2xzdWZ1fWwgJHtnbHN1ZnV9bGwgJHtnbHN1ZnV9aTY0OyBkbworICAgICAgICAgY2FzZSAkZ2xzdWYgaW4KKyAgICAgICAgICAgJycpICBnbHR5cGUxPSdpbnQnOzsKKyAgICAgICAgICAgbCkJZ2x0eXBlMT0nbG9uZyBpbnQnOzsKKyAgICAgICAgICAgbGwpCWdsdHlwZTE9J2xvbmcgbG9uZyBpbnQnOzsKKyAgICAgICAgICAgaTY0KQlnbHR5cGUxPSdfX2ludDY0Jzs7CisgICAgICAgICAgIHUpCWdsdHlwZTE9J3Vuc2lnbmVkIGludCc7OworICAgICAgICAgICB1bCkJZ2x0eXBlMT0ndW5zaWduZWQgbG9uZyBpbnQnOzsKKyAgICAgICAgICAgdWxsKQlnbHR5cGUxPSd1bnNpZ25lZCBsb25nIGxvbmcgaW50Jzs7CisgICAgICAgICAgIHVpNjQpZ2x0eXBlMT0ndW5zaWduZWQgX19pbnQ2NCc7OworICAgICAgICAgZXNhYworICAgICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyAgLyogQlNEL09TIDQuMC4xIGhhcyBhIGJ1ZzogPHN0ZGRlZi5oPiwgPHN0ZGlvLmg+IGFuZCA8dGltZS5oPiBtdXN0IGJlCisgICAgIGluY2x1ZGVkIGJlZm9yZSA8d2NoYXIuaD4uICAqLworICAjaW5jbHVkZSA8c3RkZGVmLmg+CisgICNpbmNsdWRlIDxzaWduYWwuaD4KKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgICNpbmNsdWRlIDx0aW1lLmg+CisgICNpbmNsdWRlIDx3Y2hhci5oPgorCisgICAgICAgICAgICAgIGV4dGVybiAkZ2x0eXBlIGZvbzsKKyAgICAgICAgICAgICAgZXh0ZXJuICRnbHR5cGUxIGZvbzsKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgZXZhbCBnbF9jdl90eXBlXyR7Z2x0eXBlfV9zdWZmaXg9XCRnbHN1ZgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisKK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICAgZXZhbCByZXN1bHQ9XCRnbF9jdl90eXBlXyR7Z2x0eXBlfV9zdWZmaXgKKyAgICAgICAgIHRlc3QgIiRyZXN1bHQiICE9IG5vICYmIGJyZWFrCisgICAgICAgZG9uZQorZmkKK2FjX3Jlcz1gZXZhbCBlY2hvICckeydnbF9jdl90eXBlXyR7Z2x0eXBlfV9zdWZmaXgnfSdgCisJICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKyAgICBHTFRZUEU9YGVjaG8gJGdsdHlwZSB8IHRyICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiAnICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl8nYAorICAgIGV2YWwgcmVzdWx0PVwkZ2xfY3ZfdHlwZV8ke2dsdHlwZX1fc3VmZml4CisgICAgdGVzdCAiJHJlc3VsdCIgPSBubyAmJiByZXN1bHQ9CisgICAgZXZhbCAke0dMVFlQRX1fU1VGRklYPVwkcmVzdWx0CisgICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSAke0dMVFlQRX1fU1VGRklYICRyZXN1bHQKK19BQ0VPRgorCisgIGRvbmUKKworCisKKyAgICBTVERJTlRfSD1zdGRpbnQuaAorICBmaQorCisKKworCisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgYWJzb2x1dGUgbmFtZSBvZiA8c3RkbGliLmg+IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgYWJzb2x1dGUgbmFtZSBvZiA8c3RkbGliLmg+Li4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHtnbF9jdl9hYnNvbHV0ZV9zdGRsaWJfaCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorCisKKworCisKKyAgICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkbGliX2ggPSB5ZXM7IHRoZW4KKyAgICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0ZGxpYi5oPgorX0FDRU9GCisgICAgICBnbF9jdl9hYnNvbHV0ZV9zdGRsaWJfaD1gKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorc2VkIC1uICdcIy9zdGRsaWIuaCN7cyMuKiJcKC4qL3N0ZGxpYi5oXCkiLiojXDEjO3MjXi9bXi9dIy8vJiM7cDtxO30nYAorICAgIGZpCisKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRnbF9jdl9hYnNvbHV0ZV9zdGRsaWJfaCIgPiY1CitlY2hvICIke0VDSE9fVH0kZ2xfY3ZfYWJzb2x1dGVfc3RkbGliX2giID4mNjsgfQorY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBBQlNPTFVURV9TVERMSUJfSCAiJGdsX2N2X2Fic29sdXRlX3N0ZGxpYl9oIgorX0FDRU9GCisKKworICBBQlNPTFVURV9TVERMSUJfSD1cIiRnbF9jdl9hYnNvbHV0ZV9zdGRsaWJfaFwiCisKKworCisKK2ZvciBhY19mdW5jIGluIHN0cmNzcG4KK2RvCithc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgeyBhc192YXI9JGFzX2FjX3ZhcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgorICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCisjZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYworCisvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCisgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisKKyN1bmRlZiAkYWNfZnVuYworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyICRhY19mdW5jICgpOworLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCisgICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCisjaWYgZGVmaW5lZCBfX3N0dWJfJGFjX2Z1bmMgfHwgZGVmaW5lZCBfX3N0dWJfX18kYWNfZnVuYworY2hva2UgbWUKKyNlbmRpZgorCitpbnQKK21haW4gKCkKK3sKK3JldHVybiAkYWNfZnVuYyAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgIGV2YWwgIiRhc19hY192YXI9eWVzIgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJZXZhbCAiJGFzX2FjX3Zhcj1ubyIKK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2FjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYAorCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CitpZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2Vsc2UKKyAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgJGFjX2Z1bmMuJGFjX29iamV4dCIKK2ZpCitkb25lCisKKyAgaWYgdGVzdCAkYWNfY3ZfZnVuY19zdHJjc3BuID0gbm87IHRoZW4KKyAgICA6CisgIGZpCisKKworCisKKworCisKKworCisKKworCisgIGlmIHRlc3QgJGFjX2N2X2hhdmVfZGVjbF9zdHJuZHVwID0gbm87IHRoZW4KKyAgICBIQVZFX0RFQ0xfU1RSTkRVUD0wCisgIGZpCisKKyAgIyBBSVggNC4zLjMsIEFJWCA1LjEgaGF2ZSBhIGZ1bmN0aW9uIHRoYXQgZmFpbHMgdG8gYWRkIHRoZSB0ZXJtaW5hdGluZyAnXDAnLgorICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igd29ya2luZyBzdHJuZHVwIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHdvcmtpbmcgc3RybmR1cC4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7Z2xfY3ZfZnVuY19zdHJuZHVwK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdHJuZHVwIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHN0cm5kdXAuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2Z1bmNfc3RybmR1cCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy8qIERlZmluZSBzdHJuZHVwIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgc3RybmR1cC4KKyAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworI2RlZmluZSBzdHJuZHVwIGlubm9jdW91c19zdHJuZHVwCisKKy8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIHN0cm5kdXAgKCk7IGJlbG93LgorICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorCisjdW5kZWYgc3RybmR1cAorCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHN0cm5kdXAgKCk7CisvKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCisgICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKKyAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KKyNpZiBkZWZpbmVkIF9fc3R1Yl9zdHJuZHVwIHx8IGRlZmluZWQgX19zdHViX19fc3RybmR1cAorY2hva2UgbWUKKyNlbmRpZgorCitpbnQKK21haW4gKCkKK3sKK3JldHVybiBzdHJuZHVwICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgYWNfY3ZfZnVuY19zdHJuZHVwPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfY3ZfZnVuY19zdHJuZHVwPW5vCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX3N0cm5kdXAiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2Z1bmNfc3RybmR1cCIgPiY2OyB9CitpZiB0ZXN0ICRhY19jdl9mdW5jX3N0cm5kdXAgPSB5ZXM7IHRoZW4KKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpZmRlZiBfQUlYCisgICAgICAgICAgICAgICB0b28gcmlza3kKKyNlbmRpZgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJ0b28gcmlza3kiID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBnbF9jdl9mdW5jX3N0cm5kdXA9bm8KK2Vsc2UKKyAgZ2xfY3ZfZnVuY19zdHJuZHVwPXllcworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCitlbHNlCisgIGdsX2N2X2Z1bmNfc3RybmR1cD1ubworZmkKKworZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKworICAgICAgIC8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKwkJIAkjaW5jbHVkZSA8c3RkbGliLmg+CitpbnQKK21haW4gKCkKK3sKKworI2lmbmRlZiBIQVZFX0RFQ0xfU1RSTkRVUAorICBleHRlcm4gY2hhciAqc3RybmR1cCAoY29uc3QgY2hhciAqLCBzaXplX3QpOworI2VuZGlmCisgIGNoYXIgKnM7CisgIHMgPSBzdHJuZHVwICgic29tZSBsb25nZXIgc3RyaW5nIiwgMTUpOworICBmcmVlIChzKTsKKyAgcyA9IHN0cm5kdXAgKCJzaG9ydGVyIHN0cmluZyIsIDEzKTsKKyAgcmV0dXJuIHNbMTNdICE9ICdcMCc7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCisgIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY190cnkiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGdsX2N2X2Z1bmNfc3RybmR1cD15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKK2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyggZXhpdCAkYWNfc3RhdHVzICkKK2dsX2N2X2Z1bmNfc3RybmR1cD1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKKworCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkZ2xfY3ZfZnVuY19zdHJuZHVwIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRnbF9jdl9mdW5jX3N0cm5kdXAiID4mNjsgfQorICBpZiB0ZXN0ICRnbF9jdl9mdW5jX3N0cm5kdXAgPSB5ZXM7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJORFVQIDEKK19BQ0VPRgorCisgIGVsc2UKKyAgICBIQVZFX1NUUk5EVVA9MAorICAgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIHN0cm5kdXAuJGFjX29iamV4dCIKKyAgICA6CisgIGZpCisKKworCisgIEdOVUxJQl9TVFJORFVQPTEKKworCisKKworCisKKworCisKKyAgaWYgdGVzdCAkYWNfY3ZfaGF2ZV9kZWNsX3N0cm5sZW4gPSBubzsgdGhlbgorICAgIEhBVkVfREVDTF9TVFJOTEVOPTAKKyAgZmkKKworICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igd29ya2luZyBzdHJubGVuIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHdvcmtpbmcgc3Rybmxlbi4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfZnVuY19zdHJubGVuX3dvcmtpbmcrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgYWNfY3ZfZnVuY19zdHJubGVuX3dvcmtpbmc9bm8KK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CisKKyNkZWZpbmUgUyAiZm9vYmFyIgorI2RlZmluZSBTX0xFTiAoc2l6ZW9mIFMgLSAxKQorCisgIC8qIEF0IGxlYXN0IG9uZSBpbXBsZW1lbnRhdGlvbiBpcyBidWdneTogdGhhdCBvZiBBSVggNC4zIHdvdWxkCisgICAgIGdpdmUgc3RybmxlbiAoUywgMSkgPT0gMy4gICovCisKKyAgaW50IGk7CisgIGZvciAoaSA9IDA7IGkgPCBTX0xFTiArIDE7ICsraSkKKyAgICB7CisgICAgICBpbnQgZXhwZWN0ZWQgPSBpIDw9IFNfTEVOID8gaSA6IFNfTEVOOworICAgICAgaWYgKHN0cm5sZW4gKFMsIGkpICE9IGV4cGVjdGVkKQorCXJldHVybiAxOworICAgIH0KKyAgcmV0dXJuIDA7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3ZfZnVuY19zdHJubGVuX3dvcmtpbmc9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1CitlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisoIGV4aXQgJGFjX3N0YXR1cyApCithY19jdl9mdW5jX3N0cm5sZW5fd29ya2luZz1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKKworCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19zdHJubGVuX3dvcmtpbmciID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2Z1bmNfc3Rybmxlbl93b3JraW5nIiA+JjY7IH0KK3Rlc3QgJGFjX2N2X2Z1bmNfc3Rybmxlbl93b3JraW5nID0gbm8gJiYgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgc3Rybmxlbi4kYWNfb2JqZXh0IgorCisgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfc3Rybmxlbl93b3JraW5nID0gbm87IHRoZW4KKyAgICAjIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgYXV0b21ha2UtMS42LjEgZG9lbnMndCB1bmRlcnN0YW5kCisgICAgIyB0aGF0IHRoZSBhYm92ZSB1c2Ugb2YgQUNfRlVOQ19TVFJOTEVOIG1lYW5zIHdlIG1heSBoYXZlIHRvIHVzZQorICAgICMgbGliL3N0cm5sZW4uYy4KKyAgICAjQUNfTElCT0JKKHN0cm5sZW4pCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIHN0cm5sZW4gcnBsX3N0cm5sZW4KK19BQ0VPRgorCisgICAgOgorICBmaQorCisKKworICBHTlVMSUJfU1RSTkxFTj0xCisKKworICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igd29ya2luZyBzdHJ0b2QiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igd29ya2luZyBzdHJ0b2QuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2Z1bmNfc3RydG9kK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgIGFjX2N2X2Z1bmNfc3RydG9kPW5vCitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCiskYWNfaW5jbHVkZXNfZGVmYXVsdAorI2lmbmRlZiBzdHJ0b2QKK2RvdWJsZSBzdHJ0b2QgKCk7CisjZW5kaWYKK2ludAorbWFpbigpCit7CisgIHsKKyAgICAvKiBTb21lIHZlcnNpb25zIG9mIExpbnV4IHN0cnRvZCBtaXMtcGFyc2Ugc3RyaW5ncyB3aXRoIGxlYWRpbmcgJysnLiAgKi8KKyAgICBjaGFyICpzdHJpbmcgPSAiICs2OSI7CisgICAgY2hhciAqdGVybTsKKyAgICBkb3VibGUgdmFsdWU7CisgICAgdmFsdWUgPSBzdHJ0b2QgKHN0cmluZywgJnRlcm0pOworICAgIGlmICh2YWx1ZSAhPSA2OSB8fCB0ZXJtICE9IChzdHJpbmcgKyA0KSkKKyAgICAgIHJldHVybiAxOworICB9CisKKyAgeworICAgIC8qIFVuZGVyIFNvbGFyaXMgMi40LCBzdHJ0b2QgcmV0dXJucyB0aGUgd3JvbmcgdmFsdWUgZm9yIHRoZQorICAgICAgIHRlcm1pbmF0aW5nIGNoYXJhY3RlciB1bmRlciBzb21lIGNvbmRpdGlvbnMuICAqLworICAgIGNoYXIgKnN0cmluZyA9ICJOYU4iOworICAgIGNoYXIgKnRlcm07CisgICAgc3RydG9kIChzdHJpbmcsICZ0ZXJtKTsKKyAgICBpZiAodGVybSAhPSBzdHJpbmcgJiYgKih0ZXJtIC0gMSkgPT0gMCkKKyAgICAgIHJldHVybiAxOworICB9CisgIHJldHVybiAwOworfQorCitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCisgIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY190cnkiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X2Z1bmNfc3RydG9kPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworKCBleGl0ICRhY19zdGF0dXMgKQorYWNfY3ZfZnVuY19zdHJ0b2Q9bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKworZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfc3RydG9kIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX3N0cnRvZCIgPiY2OyB9CitpZiB0ZXN0ICRhY19jdl9mdW5jX3N0cnRvZCA9IG5vOyB0aGVuCisgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIHN0cnRvZC4kYWNfb2JqZXh0IgoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHBvdyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBwb3cuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2Z1bmNfcG93K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworLyogRGVmaW5lIHBvdyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzIHBvdy4KKyAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworI2RlZmluZSBwb3cgaW5ub2N1b3VzX3BvdworCisvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciBwb3cgKCk7IGJlbG93LgorICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorCisjdW5kZWYgcG93CisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgcG93ICgpOworLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCisgICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCisjaWYgZGVmaW5lZCBfX3N0dWJfcG93IHx8IGRlZmluZWQgX19zdHViX19fcG93CitjaG9rZSBtZQorI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHBvdyAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgIGFjX2N2X2Z1bmNfcG93PXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfY3ZfZnVuY19wb3c9bm8KK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfcG93IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX3BvdyIgPiY2OyB9CisKK2lmIHRlc3QgJGFjX2N2X2Z1bmNfcG93ID0gbm87IHRoZW4KKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHBvdyBpbiAtbG0iID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgcG93IGluIC1sbS4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfbGliX21fcG93K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sbSAgJExJQlMiCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBwb3cgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBwb3cgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKyAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorICBhY19jdl9saWJfbV9wb3c9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19jdl9saWJfbV9wb3c9bm8KK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9tX3BvdyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX21fcG93IiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X2xpYl9tX3BvdyA9IHllczsgdGhlbgorICBQT1dfTElCPS1sbQorZWxzZQorICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBjYW5ub3QgZmluZCBsaWJyYXJ5IGNvbnRhaW5pbmcgZGVmaW5pdGlvbiBvZiBwb3ciID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiBjYW5ub3QgZmluZCBsaWJyYXJ5IGNvbnRhaW5pbmcgZGVmaW5pdGlvbiBvZiBwb3ciID4mMjt9CitmaQorCitmaQorCitmaQorCisgICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19zdHJ0b2QgPSBubzsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBzdHJ0b2QgcnBsX3N0cnRvZAorX0FDRU9GCisKKyAgICA6CisgIGZpCisKKworCitmb3IgYWNfZnVuYyBpbiBzdHJ0b2wKK2RvCithc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgeyBhc192YXI9JGFzX2FjX3ZhcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgorICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCisjZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYworCisvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCisgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisKKyN1bmRlZiAkYWNfZnVuYworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyICRhY19mdW5jICgpOworLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCisgICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCisjaWYgZGVmaW5lZCBfX3N0dWJfJGFjX2Z1bmMgfHwgZGVmaW5lZCBfX3N0dWJfX18kYWNfZnVuYworY2hva2UgbWUKKyNlbmRpZgorCitpbnQKK21haW4gKCkKK3sKK3JldHVybiAkYWNfZnVuYyAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgIGV2YWwgIiRhc19hY192YXI9eWVzIgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJZXZhbCAiJGFzX2FjX3Zhcj1ubyIKK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2FjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYAorCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CitpZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2Vsc2UKKyAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgJGFjX2Z1bmMuJGFjX29iamV4dCIKK2ZpCitkb25lCisKKworCisKKworCisKKworCisKKworICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfdW5pc3RkX2ggPSB5ZXM7IHRoZW4KKyAgICBIQVZFX1VOSVNURF9IPTEKKyAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGFic29sdXRlIG5hbWUgb2YgPHVuaXN0ZC5oPiIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGFic29sdXRlIG5hbWUgb2YgPHVuaXN0ZC5oPi4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7Z2xfY3ZfYWJzb2x1dGVfdW5pc3RkX2grc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworCisKKworCisgICAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3VuaXN0ZF9oID0geWVzOyB0aGVuCisgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDx1bmlzdGQuaD4KK19BQ0VPRgorICAgICAgZ2xfY3ZfYWJzb2x1dGVfdW5pc3RkX2g9YChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKK3NlZCAtbiAnXCMvdW5pc3RkLmgje3MjLioiXCguKi91bmlzdGQuaFwpIi4qI1wxIztzI14vW14vXSMvLyYjO3A7cTt9J2AKKyAgICBmaQorCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkZ2xfY3ZfYWJzb2x1dGVfdW5pc3RkX2giID4mNQorZWNobyAiJHtFQ0hPX1R9JGdsX2N2X2Fic29sdXRlX3VuaXN0ZF9oIiA+JjY7IH0KK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgQUJTT0xVVEVfVU5JU1REX0ggIiRnbF9jdl9hYnNvbHV0ZV91bmlzdGRfaCIKK19BQ0VPRgorCisKKyAgICBBQlNPTFVURV9VTklTVERfSD1cIiRnbF9jdl9hYnNvbHV0ZV91bmlzdGRfaFwiCisgIGVsc2UKKyAgICBIQVZFX1VOSVNURF9IPTAKKyAgZmkKKworCisKKworCisgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfdXRpbWVfbnVsbCA9IG5vOyB0aGVuCisgICAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgdXRpbWUuJGFjX29iamV4dCIKKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgdXRpbWUgcnBsX3V0aW1lCitfQUNFT0YKKworCisKKworCisKKworCisKKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB1dGltZXMgYWNjZXB0cyBhIG51bGwgYXJndW1lbnQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHV0aW1lcyBhY2NlcHRzIGEgbnVsbCBhcmd1bWVudC4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfZnVuY191dGltZXNfbnVsbCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBybSAtZiBjb25mdGVzdC5kYXRhOyA+IGNvbmZ0ZXN0LmRhdGEKK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgIGFjX2N2X2Z1bmNfdXRpbWVzX251bGw9bm8KK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIEluIGNhc2Ugc3RhdCBoYXMgYmVlbiBkZWZpbmVkIHRvIHJwbF9zdGF0LCB1bmRlZiBpdCBoZXJlLiAgKi8KKyN1bmRlZiBzdGF0CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgoraW50CittYWluICgpIHsKK3N0cnVjdCBzdGF0IHMsIHQ7CityZXR1cm4gISAoc3RhdCAoImNvbmZ0ZXN0LmRhdGEiLCAmcykgPT0gMAorCSAgJiYgdXRpbWVzICgiY29uZnRlc3QuZGF0YSIsIDApID09IDAKKwkgICYmIHN0YXQgKCJjb25mdGVzdC5kYXRhIiwgJnQpID09IDAKKwkgICYmIHQuc3RfbXRpbWUgPj0gcy5zdF9tdGltZQorCSAgJiYgdC5zdF9tdGltZSAtIHMuc3RfbXRpbWUgPCAxMjApKTsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3ZfZnVuY191dGltZXNfbnVsbD15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKK2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyggZXhpdCAkYWNfc3RhdHVzICkKK2FjX2N2X2Z1bmNfdXRpbWVzX251bGw9bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKworcm0gLWYgY29yZSBjb3JlLiogKi5jb3JlCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY191dGltZXNfbnVsbCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY191dGltZXNfbnVsbCIgPiY2OyB9CisKKyAgICBpZiB0ZXN0ICRhY19jdl9mdW5jX3V0aW1lc19udWxsID0geWVzOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIEhBVkVfVVRJTUVTX05VTEwgMQorX0FDRU9GCisKKyAgICBmaQorCisKKworICBmaQorCisKKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciA8d2NoYXIuaD4gaXMgc3RhbmRhbG9uZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgPHdjaGFyLmg+IGlzIHN0YW5kYWxvbmUuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2dsX2N2X2hlYWRlcl93Y2hhcl9oX3N0YW5kYWxvbmUrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjaW5jbHVkZSA8d2NoYXIuaD4KK3djaGFyX3QgdzsKK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICBnbF9jdl9oZWFkZXJfd2NoYXJfaF9zdGFuZGFsb25lPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJZ2xfY3ZfaGVhZGVyX3djaGFyX2hfc3RhbmRhbG9uZT1ubworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkZ2xfY3ZfaGVhZGVyX3djaGFyX2hfc3RhbmRhbG9uZSIgPiY1CitlY2hvICIke0VDSE9fVH0kZ2xfY3ZfaGVhZGVyX3djaGFyX2hfc3RhbmRhbG9uZSIgPiY2OyB9CisgIGlmIHRlc3QgJGdsX2N2X2hlYWRlcl93Y2hhcl9oX3N0YW5kYWxvbmUgPSB5ZXM7IHRoZW4KKyAgICBXQ0hBUl9IPQorICBlbHNlCisgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBhYnNvbHV0ZSBuYW1lIG9mIDx3Y2hhci5oPiIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGFic29sdXRlIG5hbWUgb2YgPHdjaGFyLmg+Li4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHtnbF9jdl9hYnNvbHV0ZV93Y2hhcl9oK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKKworCisKKworICAgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl93Y2hhcl9oID0geWVzOyB0aGVuCisgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDx3Y2hhci5oPgorX0FDRU9GCisgICAgICBnbF9jdl9hYnNvbHV0ZV93Y2hhcl9oPWAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CitzZWQgLW4gJ1wjL3djaGFyLmgje3MjLioiXCguKi93Y2hhci5oXCkiLiojXDEjO3MjXi9bXi9dIy8vJiM7cDtxO30nYAorICAgIGZpCisKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRnbF9jdl9hYnNvbHV0ZV93Y2hhcl9oIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRnbF9jdl9hYnNvbHV0ZV93Y2hhcl9oIiA+JjY7IH0KK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgQUJTT0xVVEVfV0NIQVJfSCAiJGdsX2N2X2Fic29sdXRlX3djaGFyX2giCitfQUNFT0YKKworCisgICAgQUJTT0xVVEVfV0NIQVJfSD1cIiRnbF9jdl9hYnNvbHV0ZV93Y2hhcl9oXCIKKyAgICBXQ0hBUl9IPXdjaGFyLmgKKyAgZmkKKworCisKKworCisKKworCisKKworICBpZiB0ZXN0ICRhY19jdl9mdW5jX2lzd2NudHJsID0geWVzOyB0aGVuCisgICAgSEFWRV9JU1dDTlRSTD0xCisgIGVsc2UKKyAgICBIQVZFX0lTV0NOVFJMPTAKKyAgZmkKKworCisKKworCisKKworCisKKworICBpZiB0ZXN0ICRndF9jdl9jX3dpbnRfdCA9IHllczsgdGhlbgorICAgIEhBVkVfV0lOVF9UPTEKKyAgZWxzZQorICAgIEhBVkVfV0lOVF9UPTAKKyAgZmkKKworCisgIFdDVFlQRV9IPXdjdHlwZS5oCisgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl93Y3R5cGVfaCA9IHllczsgdGhlbgorICAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfaXN3Y250cmwgPSB5ZXM7IHRoZW4KKyAgICAgIFdDVFlQRV9IPQorICAgIGZpCisgICAgICAgICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGFic29sdXRlIG5hbWUgb2YgPHdjdHlwZS5oPiIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGFic29sdXRlIG5hbWUgb2YgPHdjdHlwZS5oPi4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7Z2xfY3ZfYWJzb2x1dGVfd2N0eXBlX2grc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworCisKKworCisgICAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3djdHlwZV9oID0geWVzOyB0aGVuCisgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDx3Y3R5cGUuaD4KK19BQ0VPRgorICAgICAgZ2xfY3ZfYWJzb2x1dGVfd2N0eXBlX2g9YChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKK3NlZCAtbiAnXCMvd2N0eXBlLmgje3MjLioiXCguKi93Y3R5cGUuaFwpIi4qI1wxIztzI14vW14vXSMvLyYjO3A7cTt9J2AKKyAgICBmaQorCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkZ2xfY3ZfYWJzb2x1dGVfd2N0eXBlX2giID4mNQorZWNobyAiJHtFQ0hPX1R9JGdsX2N2X2Fic29sdXRlX3djdHlwZV9oIiA+JjY7IH0KK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgQUJTT0xVVEVfV0NUWVBFX0ggIiRnbF9jdl9hYnNvbHV0ZV93Y3R5cGVfaCIKK19BQ0VPRgorCisKKyAgICBBQlNPTFVURV9XQ1RZUEVfSD1cIiRnbF9jdl9hYnNvbHV0ZV93Y3R5cGVfaFwiCisgICAgSEFWRV9XQ1RZUEVfSD0xCisgIGVsc2UKKyAgICBBQlNPTFVURV9XQ1RZUEVfSD1cIm5vL3N1Y2gvZmlsZS93Y3R5cGUuaFwiCisgICAgSEFWRV9XQ1RZUEVfSD0wCisgIGZpCisKKworCisKKworICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyB4bWFsbG9jLiRhY19vYmpleHQiCisKKworCisgIDoKKworCisgIDoKKworCisKKworICA6CisKKworCisKKworCisKKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIG9mZl90IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG9mZl90Li4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl90eXBlX29mZl90K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisJI2luY2x1ZGUgPHN0ZGlvLmg+CisJI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCSNpbmNsdWRlIDx1bmlzdGQuaD4KKworCit0eXBlZGVmIG9mZl90IGFjX190eXBlX25ld187CitpbnQKK21haW4gKCkKK3sKK2lmICgoYWNfX3R5cGVfbmV3XyAqKSAwKQorICByZXR1cm4gMDsKK2lmIChzaXplb2YgKGFjX190eXBlX25ld18pKQorICByZXR1cm4gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICBhY19jdl90eXBlX29mZl90PXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfY3ZfdHlwZV9vZmZfdD1ubworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9vZmZfdCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9vZmZfdCIgPiY2OyB9CisKKyMgVGhlIGNhc3QgdG8gbG9uZyBpbnQgd29ya3MgYXJvdW5kIGEgYnVnIGluIHRoZSBIUCBDIENvbXBpbGVyCisjIHZlcnNpb24gSFA5MjQ1My0wMSBCLjExLjExLjIzNzA5LkdQLCB3aGljaCBpbmNvcnJlY3RseSByZWplY3RzCisjIGRlY2xhcmF0aW9ucyBsaWtlIGBpbnQgYTNbWyhzaXplb2YgKHVuc2lnbmVkIGNoYXIpKSA+PSAwXV07Jy4KKyMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBzaXplIG9mIG9mZl90IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgc2l6ZSBvZiBvZmZfdC4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3Zfc2l6ZW9mX29mZl90K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgICMgRGVwZW5kaW5nIHVwb24gdGhlIHNpemUsIGNvbXB1dGUgdGhlIGxvIGFuZCBoaSBib3VuZHMuCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCSNpbmNsdWRlIDxzdGRpby5oPgorCSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKwkjaW5jbHVkZSA8dW5pc3RkLmg+CisKKworICAgdHlwZWRlZiBvZmZfdCBhY19fdHlwZV9zaXplb2ZfOworaW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcgaW50KSAoc2l6ZW9mIChhY19fdHlwZV9zaXplb2ZfKSkpID49IDApXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgYWNfbG89MCBhY19taWQ9MAorICB3aGlsZSA6OyBkbworICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisJI2luY2x1ZGUgPHN0ZGlvLmg+CisJI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCSNpbmNsdWRlIDx1bmlzdGQuaD4KKworCisgICB0eXBlZGVmIG9mZl90IGFjX190eXBlX3NpemVvZl87CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZyBpbnQpIChzaXplb2YgKGFjX190eXBlX3NpemVvZl8pKSkgPD0gJGFjX21pZCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICBhY19oaT0kYWNfbWlkOyBicmVhaworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfbG89YGV4cHIgJGFjX21pZCArIDFgCisJCQlpZiB0ZXN0ICRhY19sbyAtbGUgJGFjX21pZDsgdGhlbgorCQkJICBhY19sbz0gYWNfaGk9CisJCQkgIGJyZWFrCisJCQlmaQorCQkJYWNfbWlkPWBleHByIDIgJyonICRhY19taWQgKyAxYAorZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGRvbmUKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisJI2luY2x1ZGUgPHN0ZGlvLmg+CisJI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCSNpbmNsdWRlIDx1bmlzdGQuaD4KKworCisgICB0eXBlZGVmIG9mZl90IGFjX190eXBlX3NpemVvZl87CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZyBpbnQpIChzaXplb2YgKGFjX190eXBlX3NpemVvZl8pKSkgPCAwKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisgIGFjX2hpPS0xIGFjX21pZD0tMQorICB3aGlsZSA6OyBkbworICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisJI2luY2x1ZGUgPHN0ZGlvLmg+CisJI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCSNpbmNsdWRlIDx1bmlzdGQuaD4KKworCisgICB0eXBlZGVmIG9mZl90IGFjX190eXBlX3NpemVvZl87CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZyBpbnQpIChzaXplb2YgKGFjX190eXBlX3NpemVvZl8pKSkgPj0gJGFjX21pZCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICBhY19sbz0kYWNfbWlkOyBicmVhaworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfaGk9YGV4cHIgJygnICRhY19taWQgJyknIC0gMWAKKwkJCWlmIHRlc3QgJGFjX21pZCAtbGUgJGFjX2hpOyB0aGVuCisJCQkgIGFjX2xvPSBhY19oaT0KKwkJCSAgYnJlYWsKKwkJCWZpCisJCQlhY19taWQ9YGV4cHIgMiAnKicgJGFjX21pZGAKK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBkb25lCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19sbz0gYWNfaGk9CitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIyBCaW5hcnkgc2VhcmNoIGJldHdlZW4gbG8gYW5kIGhpIGJvdW5kcy4KK3doaWxlIHRlc3QgIngkYWNfbG8iICE9ICJ4JGFjX2hpIjsgZG8KKyAgYWNfbWlkPWBleHByICcoJyAkYWNfaGkgLSAkYWNfbG8gJyknIC8gMiArICRhY19sb2AKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKwkjaW5jbHVkZSA8c3RkaW8uaD4KKwkjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisJI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisKKyAgIHR5cGVkZWYgb2ZmX3QgYWNfX3R5cGVfc2l6ZW9mXzsKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nIGludCkgKHNpemVvZiAoYWNfX3R5cGVfc2l6ZW9mXykpKSA8PSAkYWNfbWlkKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisgIGFjX2hpPSRhY19taWQKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX2xvPWBleHByICcoJyAkYWNfbWlkICcpJyArIDFgCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2RvbmUKK2Nhc2UgJGFjX2xvIGluCis/KikgYWNfY3Zfc2l6ZW9mX29mZl90PSRhY19sbzs7CisnJykgaWYgdGVzdCAiJGFjX2N2X3R5cGVfb2ZmX3QiID0geWVzOyB0aGVuCisgICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAob2ZmX3QpCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKG9mZl90KQorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9CisgICB7IChleGl0IDc3KTsgZXhpdCA3NzsgfTsgfQorICAgZWxzZQorICAgICBhY19jdl9zaXplb2Zfb2ZmX3Q9MAorICAgZmkgOzsKK2VzYWMKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKwkjaW5jbHVkZSA8c3RkaW8uaD4KKwkjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisJI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisKKyAgIHR5cGVkZWYgb2ZmX3QgYWNfX3R5cGVfc2l6ZW9mXzsKK3N0YXRpYyBsb25nIGludCBsb25ndmFsICgpIHsgcmV0dXJuIChsb25nIGludCkgKHNpemVvZiAoYWNfX3R5cGVfc2l6ZW9mXykpOyB9CitzdGF0aWMgdW5zaWduZWQgbG9uZyBpbnQgdWxvbmd2YWwgKCkgeyByZXR1cm4gKGxvbmcgaW50KSAoc2l6ZW9mIChhY19fdHlwZV9zaXplb2ZfKSk7IH0KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgoraW50CittYWluICgpCit7CisKKyAgRklMRSAqZiA9IGZvcGVuICgiY29uZnRlc3QudmFsIiwgInciKTsKKyAgaWYgKCEgZikKKyAgICByZXR1cm4gMTsKKyAgaWYgKCgobG9uZyBpbnQpIChzaXplb2YgKGFjX190eXBlX3NpemVvZl8pKSkgPCAwKQorICAgIHsKKyAgICAgIGxvbmcgaW50IGkgPSBsb25ndmFsICgpOworICAgICAgaWYgKGkgIT0gKChsb25nIGludCkgKHNpemVvZiAoYWNfX3R5cGVfc2l6ZW9mXykpKSkKKwlyZXR1cm4gMTsKKyAgICAgIGZwcmludGYgKGYsICIlbGRcbiIsIGkpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGxvbmcgaW50IGkgPSB1bG9uZ3ZhbCAoKTsKKyAgICAgIGlmIChpICE9ICgobG9uZyBpbnQpIChzaXplb2YgKGFjX190eXBlX3NpemVvZl8pKSkpCisJcmV0dXJuIDE7CisgICAgICBmcHJpbnRmIChmLCAiJWx1XG4iLCBpKTsKKyAgICB9CisgIHJldHVybiBmZXJyb3IgKGYpIHx8IGZjbG9zZSAoZikgIT0gMDsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfdHJ5IikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9zaXplb2Zfb2ZmX3Q9YGNhdCBjb25mdGVzdC52YWxgCitlbHNlCisgIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1CitlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisoIGV4aXQgJGFjX3N0YXR1cyApCitpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9vZmZfdCIgPSB5ZXM7IHRoZW4KKyAgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChvZmZfdCkKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAob2ZmX3QpCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KKyAgIHsgKGV4aXQgNzcpOyBleGl0IDc3OyB9OyB9CisgICBlbHNlCisgICAgIGFjX2N2X3NpemVvZl9vZmZfdD0wCisgICBmaQorZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvbmZ0ZXN0LnZhbAorZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3NpemVvZl9vZmZfdCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3Zfc2l6ZW9mX29mZl90IiA+JjY7IH0KKworCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgU0laRU9GX09GRl9UICRhY19jdl9zaXplb2Zfb2ZmX3QKK19BQ0VPRgorCisKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXNoYXJlZCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9zaGFyZWQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSRlbmFibGVfc2hhcmVkOyBwPSR7UEFDS0FHRS1kZWZhdWx0fQorICAgIGNhc2UgJGVuYWJsZXZhbCBpbgorICAgIHllcykgZW5hYmxlX3NoYXJlZD15ZXMgOzsKKyAgICBubykgZW5hYmxlX3NoYXJlZD1ubyA7OworICAgICopCisgICAgICBlbmFibGVfc2hhcmVkPW5vCisgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCisgICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKKyAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KKwlJRlM9IiRsdF9zYXZlX2lmcyIKKwlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgorCSAgZW5hYmxlX3NoYXJlZD15ZXMKKwlmaQorICAgICAgZG9uZQorICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICA7OworICAgIGVzYWMKK2Vsc2UKKyAgZW5hYmxlX3NoYXJlZD15ZXMKK2ZpCisKKworaWYgdGVzdCAiJE9TIiA9IGxpbnV4IC1hICRhY19jdl9zaXplb2Zfb2ZmX3QgLWx0IDg7IHRoZW4KKwkJCQkJeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogb2ZmX3QgaXMgbGVzcyB0aGFuIDggYnl0ZXMuICBVc2luZyBsbHNlZWsgc3lzY2FsbCIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6IG9mZl90IGlzIGxlc3MgdGhhbiA4IGJ5dGVzLiAgVXNpbmcgbGxzZWVrIHN5c2NhbGwiID4mMjt9CisJIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXNoYXJlZCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9zaGFyZWQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSRlbmFibGVfc2hhcmVkOyBwPSR7UEFDS0FHRS1kZWZhdWx0fQorICAgIGNhc2UgJGVuYWJsZXZhbCBpbgorICAgIHllcykgZW5hYmxlX3NoYXJlZD15ZXMgOzsKKyAgICBubykgZW5hYmxlX3NoYXJlZD1ubyA7OworICAgICopCisgICAgICBlbmFibGVfc2hhcmVkPW5vCisgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCisgICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKKyAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KKwlJRlM9IiRsdF9zYXZlX2lmcyIKKwlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgorCSAgZW5hYmxlX3NoYXJlZD15ZXMKKwlmaQorICAgICAgZG9uZQorICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICA7OworICAgIGVzYWMKK2Vsc2UKKyAgZW5hYmxlX3NoYXJlZD1ubworZmkKKworCisKK2ZpCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc3RhdGljIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3N0YXRpYytzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9JGVuYWJsZV9zdGF0aWM7IHA9JHtQQUNLQUdFLWRlZmF1bHR9CisgICAgY2FzZSAkZW5hYmxldmFsIGluCisgICAgeWVzKSBlbmFibGVfc3RhdGljPXllcyA7OworICAgIG5vKSBlbmFibGVfc3RhdGljPW5vIDs7CisgICAgKikKKyAgICAgZW5hYmxlX3N0YXRpYz1ubworICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgorICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCisgICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCisJSUZTPSIkbHRfc2F2ZV9pZnMiCisJaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KKwkgIGVuYWJsZV9zdGF0aWM9eWVzCisJZmkKKyAgICAgIGRvbmUKKyAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgICAgOzsKKyAgICBlc2FjCitlbHNlCisgIGVuYWJsZV9zdGF0aWM9eWVzCitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1mYXN0LWluc3RhbGwgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZmFzdF9pbnN0YWxsK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0kZW5hYmxlX2Zhc3RfaW5zdGFsbDsgcD0ke1BBQ0tBR0UtZGVmYXVsdH0KKyAgICBjYXNlICRlbmFibGV2YWwgaW4KKyAgICB5ZXMpIGVuYWJsZV9mYXN0X2luc3RhbGw9eWVzIDs7CisgICAgbm8pIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8gOzsKKyAgICAqKQorICAgICAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubworICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgorICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCisgICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCisJSUZTPSIkbHRfc2F2ZV9pZnMiCisJaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KKwkgIGVuYWJsZV9mYXN0X2luc3RhbGw9eWVzCisJZmkKKyAgICAgIGRvbmUKKyAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgICAgOzsKKyAgICBlc2FjCitlbHNlCisgIGVuYWJsZV9mYXN0X2luc3RhbGw9eWVzCitmaQorCisKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBhIHNlZCB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBhIHNlZCB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dC4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3ZfcGF0aF9TRUQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBzZWQgYW5kIGdzZWQuCisjIFRoZW4gdXNlIHRoYXQgbGlzdCBvZiBzZWQncyBhcyBvbmVzIHRvIHRlc3QgZm9yIHRydW5jYXRpb24uCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgIGZvciBsdF9hY19wcm9nIGluIHNlZCBnc2VkOyBkbworICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgICAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kbHRfYWNfcHJvZyRhY19leGVjX2V4dCI7IHRoZW4KKyAgICAgICAgbHRfYWNfc2VkX2xpc3Q9IiRsdF9hY19zZWRfbGlzdCAkYXNfZGlyLyRsdF9hY19wcm9nJGFjX2V4ZWNfZXh0IgorICAgICAgZmkKKyAgICBkb25lCisgIGRvbmUKK2RvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKK2x0X2FjX21heD0wCitsdF9hY19jb3VudD0wCisjIEFkZCAvdXNyL3hwZzQvYmluL3NlZCBhcyBpdCBpcyB0eXBpY2FsbHkgZm91bmQgb24gU29sYXJpcworIyBhbG9uZyB3aXRoIC9iaW4vc2VkIHRoYXQgdHJ1bmNhdGVzIG91dHB1dC4KK2ZvciBsdF9hY19zZWQgaW4gJGx0X2FjX3NlZF9saXN0IC91c3IveHBnNC9iaW4vc2VkOyBkbworICB0ZXN0ICEgLWYgJGx0X2FjX3NlZCAmJiBjb250aW51ZQorICBjYXQgL2Rldi9udWxsID4gY29uZnRlc3QuaW4KKyAgbHRfYWNfY291bnQ9MAorICBlY2hvICRFQ0hPX04gIjAxMjM0NTY3ODkkRUNIT19DIiA+Y29uZnRlc3QuaW4KKyAgIyBDaGVjayBmb3IgR05VIHNlZCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgorICBpZiAiJGx0X2FjX3NlZCIgLS12ZXJzaW9uIDI+JjEgPCAvZGV2L251bGwgfCBncmVwICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCisgICAgbHRfY3ZfcGF0aF9TRUQ9JGx0X2FjX3NlZAorICAgIGJyZWFrCisgIGZpCisgIHdoaWxlIHRydWU7IGRvCisgICAgY2F0IGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LmluID5jb25mdGVzdC50bXAKKyAgICBtdiBjb25mdGVzdC50bXAgY29uZnRlc3QuaW4KKyAgICBjcCBjb25mdGVzdC5pbiBjb25mdGVzdC5ubAorICAgIGVjaG8gPj5jb25mdGVzdC5ubAorICAgICRsdF9hY19zZWQgLWUgJ3MvYSQvLycgPCBjb25mdGVzdC5ubCA+Y29uZnRlc3Qub3V0IHx8IGJyZWFrCisgICAgY21wIC1zIGNvbmZ0ZXN0Lm91dCBjb25mdGVzdC5ubCB8fCBicmVhaworICAgICMgMTAwMDAgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAorICAgIHRlc3QgJGx0X2FjX2NvdW50IC1ndCAxMCAmJiBicmVhaworICAgIGx0X2FjX2NvdW50PWBleHByICRsdF9hY19jb3VudCArIDFgCisgICAgaWYgdGVzdCAkbHRfYWNfY291bnQgLWd0ICRsdF9hY19tYXg7IHRoZW4KKyAgICAgIGx0X2FjX21heD0kbHRfYWNfY291bnQKKyAgICAgIGx0X2N2X3BhdGhfU0VEPSRsdF9hY19zZWQKKyAgICBmaQorICBkb25lCitkb25lCisKK2ZpCisKK1NFRD0kbHRfY3ZfcGF0aF9TRUQKKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkU0VEIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRTRUQiID4mNjsgfQorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZ251LWxkIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9nbnVfbGQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0kd2l0aF9nbnVfbGQ7IHRlc3QgIiR3aXRodmFsIiA9IG5vIHx8IHdpdGhfZ251X2xkPXllcworZWxzZQorICB3aXRoX2dudV9sZD1ubworZmkKKworYWNfcHJvZz1sZAoraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgIyBDaGVjayBpZiBnY2MgLXByaW50LXByb2ctbmFtZT1sZCBnaXZlcyBhIHBhdGguCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBsZCB1c2VkIGJ5ICRDQyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBsZCB1c2VkIGJ5ICRDQy4uLiAkRUNIT19DIiA+JjY7IH0KKyAgY2FzZSAkaG9zdCBpbgorICAqLSotbWluZ3cqKQorICAgICMgZ2NjIGxlYXZlcyBhIHRyYWlsaW5nIGNhcnJpYWdlIHJldHVybiB3aGljaCB1cHNldHMgbWluZ3cKKyAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjUgfCB0ciAtZCAnXDAxNSdgIDs7CisgICopCisgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1YCA7OworICBlc2FjCisgIGNhc2UgJGFjX3Byb2cgaW4KKyAgICAjIEFjY2VwdCBhYnNvbHV0ZSBwYXRocy4KKyAgICBbXFwvXSogfCA/OltcXC9dKikKKyAgICAgIHJlX2RpcmVsdD0nL1teL11bXi9dKi9cLlwuLycKKyAgICAgICMgQ2Fub25pY2FsaXplIHRoZSBwYXRobmFtZSBvZiBsZAorICAgICAgYWNfcHJvZz1gZWNobyAkYWNfcHJvZ3wgJFNFRCAncyVcXFxcJS8lZydgCisgICAgICB3aGlsZSBlY2hvICRhY19wcm9nIHwgZ3JlcCAiJHJlX2RpcmVsdCIgPiAvZGV2L251bGwgMj4mMTsgZG8KKwlhY19wcm9nPWBlY2hvICRhY19wcm9nfCAkU0VEICJzJSRyZV9kaXJlbHQlLyUiYAorICAgICAgZG9uZQorICAgICAgdGVzdCAteiAiJExEIiAmJiBMRD0iJGFjX3Byb2ciCisgICAgICA7OworICAiIikKKyAgICAjIElmIGl0IGZhaWxzLCB0aGVuIHByZXRlbmQgd2UgYXJlbid0IHVzaW5nIEdDQy4KKyAgICBhY19wcm9nPWxkCisgICAgOzsKKyAgKikKKyAgICAjIElmIGl0IGlzIHJlbGF0aXZlLCB0aGVuIHNlYXJjaCBmb3IgdGhlIGZpcnN0IGxkIGluIFBBVEguCisgICAgd2l0aF9nbnVfbGQ9dW5rbm93bgorICAgIDs7CisgIGVzYWMKK2VsaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgR05VIGxkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIEdOVSBsZC4uLiAkRUNIT19DIiA+JjY7IH0KK2Vsc2UKKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igbm9uLUdOVSBsZC4uLiAkRUNIT19DIiA+JjY7IH0KK2ZpCitpZiB0ZXN0ICIke2x0X2N2X3BhdGhfTEQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAteiAiJExEIjsgdGhlbgorICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KKyAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ciIHx8IHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ckYWNfZXhlZXh0IjsgdGhlbgorICAgICAgbHRfY3ZfcGF0aF9MRD0iJGFjX2Rpci8kYWNfcHJvZyIKKyAgICAgICMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBwcm9ncmFtIGlzIEdOVSBsZC4gIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiwKKyAgICAgICMgYnV0IGFwcGFyZW50bHkgc29tZSB2YXJpYW50cyBvZiBHTlUgbGQgb25seSBhY2NlcHQgLXYuCisgICAgICAjIEJyZWFrIG9ubHkgaWYgaXQgd2FzIHRoZSBHTlUvbm9uLUdOVSBsZCB0aGF0IHdlIHByZWZlci4KKyAgICAgIGNhc2UgYCIkbHRfY3ZfcGF0aF9MRCIgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgorICAgICAgKkdOVSogfCAqJ3dpdGggQkZEJyopCisJdGVzdCAiJHdpdGhfZ251X2xkIiAhPSBubyAmJiBicmVhaworCTs7CisgICAgICAqKQorCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0geWVzICYmIGJyZWFrCisJOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICBkb25lCisgIElGUz0iJGx0X3NhdmVfaWZzIgorZWxzZQorICBsdF9jdl9wYXRoX0xEPSIkTEQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorZmkKK2ZpCisKK0xEPSIkbHRfY3ZfcGF0aF9MRCIKK2lmIHRlc3QgLW4gIiRMRCI7IHRoZW4KKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkTEQiID4mNQorZWNobyAiJHtFQ0hPX1R9JExEIiA+JjY7IH0KK2Vsc2UKKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CitmaQordGVzdCAteiAiJExEIiAmJiB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBubyBhY2NlcHRhYmxlIGxkIGZvdW5kIGluIFwkUEFUSCIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBubyBhY2NlcHRhYmxlIGxkIGZvdW5kIGluIFwkUEFUSCIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB0aGUgbGlua2VyICgkTEQpIGlzIEdOVSBsZC4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3ZfcHJvZ19nbnVfbGQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgIyBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24gaGVyZSwgYnV0IGFwcGFyZW50bHkgc29tZSBHTlUgbGRzIG9ubHkgYWNjZXB0IC12LgorY2FzZSBgJExEIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KKypHTlUqIHwgKid3aXRoIEJGRCcqKQorICBsdF9jdl9wcm9nX2dudV9sZD15ZXMKKyAgOzsKKyopCisgIGx0X2N2X3Byb2dfZ251X2xkPW5vCisgIDs7Citlc2FjCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfcHJvZ19nbnVfbGQiID4mNQorZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3Byb2dfZ251X2xkIiA+JjY7IH0KK3dpdGhfZ251X2xkPSRsdF9jdl9wcm9nX2dudV9sZAorCisKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9sZF9yZWxvYWRfZmxhZytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBsdF9jdl9sZF9yZWxvYWRfZmxhZz0nLXInCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfbGRfcmVsb2FkX2ZsYWciID4mNQorZWNobyAiJHtFQ0hPX1R9JGx0X2N2X2xkX3JlbG9hZF9mbGFnIiA+JjY7IH0KK3JlbG9hZF9mbGFnPSRsdF9jdl9sZF9yZWxvYWRfZmxhZworY2FzZSAkcmVsb2FkX2ZsYWcgaW4KKyIiIHwgIiAiKikgOzsKKyopIHJlbG9hZF9mbGFnPSIgJHJlbG9hZF9mbGFnIiA7OworZXNhYworcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworY2FzZSAkaG9zdF9vcyBpbgorICBkYXJ3aW4qKQorICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICByZWxvYWRfY21kcz0nJExUQ0MgJExUQ0ZMQUdTIC1ub3N0ZGxpYiAke3dsfS1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisgICAgZWxzZQorICAgICAgcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworICAgIGZpCisgICAgOzsKK2VzYWMKKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEJTRC1jb21wYXRpYmxlIG5tIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIEJTRC1jb21wYXRpYmxlIG5tLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9wYXRoX05NK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiROTSI7IHRoZW4KKyAgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisgIGx0X2N2X3BhdGhfTk09IiROTSIKK2Vsc2UKKyAgbHRfbm1fdG9fY2hlY2s9IiR7YWNfdG9vbF9wcmVmaXh9bm0iCisgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCIgJiYgdGVzdCAiJGJ1aWxkIiA9ICIkaG9zdCI7IHRoZW4KKyAgICBsdF9ubV90b19jaGVjaz0iJGx0X25tX3RvX2NoZWNrIG5tIgorICBmaQorICBmb3IgbHRfdG1wX25tIGluICRsdF9ubV90b19jaGVjazsgZG8KKyAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgICBmb3IgYWNfZGlyIGluICRQQVRIIC91c3IvY2NzL2Jpbi9lbGYgL3Vzci9jY3MvYmluIC91c3IvdWNiIC9iaW47IGRvCisgICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgICB0bXBfbm09IiRhY19kaXIvJGx0X3RtcF9ubSIKKyAgICAgIGlmIHRlc3QgLWYgIiR0bXBfbm0iIHx8IHRlc3QgLWYgIiR0bXBfbm0kYWNfZXhlZXh0IiA7IHRoZW4KKwkjIENoZWNrIHRvIHNlZSBpZiB0aGUgbm0gYWNjZXB0cyBhIEJTRC1jb21wYXQgZmxhZy4KKwkjIEFkZGluZyB0aGUgYHNlZCAxcScgcHJldmVudHMgZmFsc2UgcG9zaXRpdmVzIG9uIEhQLVVYLCB3aGljaCBzYXlzOgorCSMgICBubTogdW5rbm93biBvcHRpb24gIkIiIGlnbm9yZWQKKwkjIFRydTY0J3Mgbm0gY29tcGxhaW5zIHRoYXQgL2Rldi9udWxsIGlzIGFuIGludmFsaWQgb2JqZWN0IGZpbGUKKwljYXNlIGAiJHRtcF9ubSIgLUIgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KKwkqL2Rldi9udWxsKiB8IConSW52YWxpZCBmaWxlIG9yIG9iamVjdCB0eXBlJyopCisJICBsdF9jdl9wYXRoX05NPSIkdG1wX25tIC1CIgorCSAgYnJlYWsKKwkgIDs7CisJKikKKwkgIGNhc2UgYCIkdG1wX25tIiAtcCAvZGV2L251bGwgMj4mMSB8IHNlZCAnMXEnYCBpbgorCSAgKi9kZXYvbnVsbCopCisJICAgIGx0X2N2X3BhdGhfTk09IiR0bXBfbm0gLXAiCisJICAgIGJyZWFrCisJICAgIDs7CisJICAqKQorCSAgICBsdF9jdl9wYXRoX05NPSR7bHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSJ9ICMga2VlcCB0aGUgZmlyc3QgbWF0Y2gsIGJ1dAorCSAgICBjb250aW51ZSAjIHNvIHRoYXQgd2UgY2FuIHRyeSB0byBmaW5kIG9uZSB0aGF0IHN1cHBvcnRzIEJTRCBmbGFncworCSAgICA7OworCSAgZXNhYworCSAgOzsKKwllc2FjCisgICAgICBmaQorICAgIGRvbmUKKyAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgZG9uZQorICB0ZXN0IC16ICIkbHRfY3ZfcGF0aF9OTSIgJiYgbHRfY3ZfcGF0aF9OTT1ubQorZmkKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9wYXRoX05NIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRsdF9jdl9wYXRoX05NIiA+JjY7IH0KK05NPSIkbHRfY3ZfcGF0aF9OTSIKKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBsbiAtcyB3b3JrcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgbG4gLXMgd29ya3MuLi4gJEVDSE9fQyIgPiY2OyB9CitMTl9TPSRhc19sbl9zCitpZiB0ZXN0ICIkTE5fUyIgPSAibG4gLXMiOyB0aGVuCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKK2VjaG8gIiR7RUNIT19UfXllcyIgPiY2OyB9CitlbHNlCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8sIHVzaW5nICRMTl9TIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vLCB1c2luZyAkTE5fUyIgPiY2OyB9CitmaQorCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBob3cgdG8gcmVjb2duaXNlIGRlcGVuZGVudCBsaWJyYXJpZXMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBob3cgdG8gcmVjb2duaXNlIGRlcGVuZGVudCBsaWJyYXJpZXMuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckTUFHSUNfQ01EJworbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9CitsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0ndW5rbm93bicKKyMgTmVlZCB0byBzZXQgdGhlIHByZWNlZGluZyB2YXJpYWJsZSBvbiBhbGwgcGxhdGZvcm1zIHRoYXQgc3VwcG9ydAorIyBpbnRlcmxpYnJhcnkgZGVwZW5kZW5jaWVzLgorIyAnbm9uZScgLS0gZGVwZW5kZW5jaWVzIG5vdCBzdXBwb3J0ZWQuCisjIGB1bmtub3duJyAtLSBzYW1lIGFzIG5vbmUsIGJ1dCBkb2N1bWVudHMgdGhhdCB3ZSByZWFsbHkgZG9uJ3Qga25vdy4KKyMgJ3Bhc3NfYWxsJyAtLSBhbGwgZGVwZW5kZW5jaWVzIHBhc3NlZCB3aXRoIG5vIGNoZWNrcy4KKyMgJ3Rlc3RfY29tcGlsZScgLS0gY2hlY2sgYnkgbWFraW5nIHRlc3QgcHJvZ3JhbS4KKyMgJ2ZpbGVfbWFnaWMgW1tyZWdleF1dJyAtLSBjaGVjayBieSBsb29raW5nIGZvciBmaWxlcyBpbiBsaWJyYXJ5IHBhdGgKKyMgd2hpY2ggcmVzcG9uZHMgdG8gdGhlICRmaWxlX21hZ2ljX2NtZCB3aXRoIGEgZ2l2ZW4gZXh0ZW5kZWQgcmVnZXguCisjIElmIHlvdSBoYXZlIGBmaWxlJyBvciBlcXVpdmFsZW50IG9uIHlvdXIgc3lzdGVtIGFuZCB5b3UncmUgbm90IHN1cmUKKyMgd2hldGhlciBgcGFzc19hbGwnIHdpbGwgKmFsd2F5cyogd29yaywgeW91IHByb2JhYmx5IHdhbnQgdGhpcyBvbmUuCisKK2Nhc2UgJGhvc3Rfb3MgaW4KK2FpeDQqIHwgYWl4NSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2Jlb3MqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitic2RpWzQ1XSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbMC05XVswLTldKi1iaXQgW01MXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliKScKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy91c3IvYmluL2ZpbGUgLUwnCisgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS9zaGxpYi9saWJjLnNvCisgIDs7CisKK2N5Z3dpbiopCisgICMgZnVuY193aW4zMl9saWJpZCBpcyBhIHNoZWxsIGZ1bmN0aW9uIGRlZmluZWQgaW4gbHRtYWluLnNoCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJworICA7OworCittaW5ndyogfCBwdzMyKikKKyAgIyBCYXNlIE1TWVMvTWluR1cgZG8gbm90IHByb3ZpZGUgdGhlICdmaWxlJyBjb21tYW5kIG5lZWRlZCBieQorICAjIGZ1bmNfd2luMzJfbGliaWQgc2hlbGwgZnVuY3Rpb24sIHNvIHVzZSBhIHdlYWtlciB0ZXN0IGJhc2VkIG9uICdvYmpkdW1wJy4KKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgcGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT8nCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckT0JKRFVNUCAtZicKKyAgOzsKKworZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworZnJlZWJzZCogfCBrZnJlZWJzZCotZ251IHwgZHJhZ29uZmx5KikKKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KKyAgICBjYXNlICRob3N0X2NwdSBpbgorICAgIGkqODYgKQorICAgICAgIyBOb3Qgc3VyZSB3aGV0aGVyIHRoZSBwcmVzZW5jZSBvZiBPcGVuQlNEIGhlcmUgd2FzIGEgbWlzdGFrZS4KKyAgICAgICMgTGV0J3MgYWNjZXB0IGJvdGggb2YgdGhlbSB1bnRpbCB0aGlzIGlzIGNsZWFyZWQgdXAuCisgICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoRnJlZUJTRHxPcGVuQlNEfERyYWdvbkZseSkvaVszLTldODYgKGNvbXBhY3QgKT9kZW1hbmQgcGFnZWQgc2hhcmVkIGxpYnJhcnknCisgICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCisgICAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT1gZWNobyAvdXNyL2xpYi9saWJjLnNvLipgCisgICAgICA7OworICAgIGVzYWMKKyAgZWxzZQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIGZpCisgIDs7CisKK2dudSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2hwdXgxMC4yMCogfCBocHV4MTEqKQorICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCisgIGNhc2UgJGhvc3RfY3B1IGluCisgIGlhNjQqKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzWzAtOV1bMC05XVswLTldfEVMRi1bMC05XVswLTldKSBzaGFyZWQgb2JqZWN0IGZpbGUgLSBJQTY0JworICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2hwdXgzMi9saWJjLnNvCisgICAgOzsKKyAgaHBwYSo2NCopCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKHNbMC05XVswLTldWzAtOV18RUxGLVswLTldWzAtOV0pIHNoYXJlZCBvYmplY3QgZmlsZSAtIFBBLVJJU0MgWzAtOV0uWzAtOV0nCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvcGEyMF82NC9saWJjLnNsCisgICAgOzsKKyAgKikKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoc1swLTldWzAtOV1bMC05XXxQQS1SSVNDWzAtOV0uWzAtOV0pIHNoYXJlZCBsaWJyYXJ5JworICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2xpYmMuc2wKKyAgICA7OworICBlc2FjCisgIDs7CisKK2ludGVyaXgzKikKKyAgIyBQSUMgY29kZSBpcyBicm9rZW4gb24gSW50ZXJpeCAzLngsIHRoYXQncyB3aHkgfFwuYSBub3QgfF9waWNcLmEgaGVyZQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb3xcLmEpJCcKKyAgOzsKKworaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgY2FzZSAkTEQgaW4KKyAgKi0zMnwqIi0zMiAiKSBsaWJtYWdpYz0zMi1iaXQ7OworICAqLW4zMnwqIi1uMzIgIikgbGlibWFnaWM9TjMyOzsKKyAgKi02NHwqIi02NCAiKSBsaWJtYWdpYz02NC1iaXQ7OworICAqKSBsaWJtYWdpYz1uZXZlci1tYXRjaDs7CisgIGVzYWMKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgorbGludXgqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCituZXRic2QqKQorICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9dKyhcLnNvXC5bMC05XStcLlswLTldK3xfcGljXC5hKSQnCisgIGVsc2UKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb3xfcGljXC5hKSQnCisgIGZpCisgIDs7CisKK25ld29zNiopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbMC05XVswLTldKi1iaXQgW01MXVNCIChleGVjdXRhYmxlfGR5bmFtaWMgbGliKScKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9L3Vzci9iaW4vZmlsZQorICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9saWJubHMuc28KKyAgOzsKKworbnRvLXFueCopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KKyAgOzsKKworb3BlbmJzZCopCisgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9dKyhcLnNvXC5bMC05XStcLlswLTldK3xcLnNvfF9waWNcLmEpJCcKKyAgZWxzZQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9dKyhcLnNvXC5bMC05XStcLlswLTldK3xfcGljXC5hKSQnCisgIGZpCisgIDs7CisKK29zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworc29sYXJpcyopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK3N5c3Y0IHwgc3lzdjQuMyopCisgIGNhc2UgJGhvc3RfdmVuZG9yIGluCisgIG1vdG9yb2xhKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbMC05XVswLTldKi1iaXQgW01MXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliKSBNWzAtOV1bMC05XSogVmVyc2lvbiBbMC05XScKKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT1gZWNobyAvdXNyL2xpYi9saWJjLnNvKmAKKyAgICA7OworICBuY3IpCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgICA7OworICBzZXF1ZW50KQorICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPScvYmluL2ZpbGUnCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFswLTldWzAtOV0qLWJpdCBbTE1dU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIgKScKKyAgICA7OworICBzbmkpCisgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy9iaW4vZmlsZScKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0iZmlsZV9tYWdpYyBFTEYgWzAtOV1bMC05XSotYml0IFtMTV1TQiBkeW5hbWljIGxpYiIKKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vbGliL2xpYmMuc28KKyAgICA7OworICBzaWVtZW5zKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICAgOzsKKyAgcGMpCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgICA7OworICBlc2FjCisgIDs7CisKK3N5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworZXNhYworCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNQorZWNobyAiJHtFQ0hPX1R9JGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjY7IH0KK2ZpbGVfbWFnaWNfY21kPSRsdF9jdl9maWxlX21hZ2ljX2NtZAorZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kCit0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KKworCisKKworIyBJZiBubyBDIGNvbXBpbGVyIHdhcyBzcGVjaWZpZWQsIHVzZSBDQy4KK0xUQ0M9JHtMVENDLSIkQ0MifQorCisjIElmIG5vIEMgY29tcGlsZXIgZmxhZ3Mgd2VyZSBzcGVjaWZpZWQsIHVzZSBDRkxBR1MuCitMVENGTEFHUz0ke0xUQ0ZMQUdTLSIkQ0ZMQUdTIn0KKworIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KK2NvbXBpbGVyPSRDQworCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbGlidG9vbC1sb2NrIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2xpYnRvb2xfbG9jaytzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9JGVuYWJsZV9saWJ0b29sX2xvY2s7CitmaQorCit0ZXN0ICJ4JGVuYWJsZV9saWJ0b29sX2xvY2siICE9IHhubyAmJiBlbmFibGVfbGlidG9vbF9sb2NrPXllcworCisjIFNvbWUgZmxhZ3MgbmVlZCB0byBiZSBwcm9wYWdhdGVkIHRvIHRoZSBjb21waWxlciBvciBsaW5rZXIgZm9yIGdvb2QKKyMgbGlidG9vbCBzdXBwb3J0LgorY2FzZSAkaG9zdCBpbgoraWE2NC0qLWhwdXgqKQorICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCisgIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgorICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKyAgICAqRUxGLTMyKikKKyAgICAgIEhQVVhfSUE2NF9NT0RFPSIzMiIKKyAgICAgIDs7CisgICAgKkVMRi02NCopCisgICAgICBIUFVYX0lBNjRfTU9ERT0iNjQiCisgICAgICA7OworICAgIGVzYWMKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworKi0qLWlyaXg2KikKKyAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgorICBlY2hvICcjbGluZSAxNzU2NyAiY29uZmlndXJlIicgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgorICAgaWYgdGVzdCAiJGx0X2N2X3Byb2dfZ251X2xkIiA9IHllczsgdGhlbgorICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKyAgICAqMzItYml0KikKKyAgICAgIExEPSIke0xELWxkfSAtbWVsZjMyYnNtaXAiCisgICAgICA7OworICAgICpOMzIqKQorICAgICAgTEQ9IiR7TEQtbGR9IC1tZWxmMzJibWlwbjMyIgorICAgICAgOzsKKyAgICAqNjQtYml0KikKKyAgICAgIExEPSIke0xELWxkfSAtbWVsZjY0Ym1pcCIKKyAgICAgIDs7CisgICAgZXNhYworICAgZWxzZQorICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKyAgICAqMzItYml0KikKKyAgICAgIExEPSIke0xELWxkfSAtMzIiCisgICAgICA7OworICAgICpOMzIqKQorICAgICAgTEQ9IiR7TEQtbGR9IC1uMzIiCisgICAgICA7OworICAgICo2NC1iaXQqKQorICAgICAgTEQ9IiR7TEQtbGR9IC02NCIKKyAgICAgIDs7CisgICAgZXNhYworICAgZmkKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworCit4ODZfNjQtKmxpbnV4KnxwcGMqLSpsaW51eCp8cG93ZXJwYyotKmxpbnV4KnxzMzkwKi0qbGludXgqfHNwYXJjKi0qbGludXgqKQorICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCisgIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgorICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3Qub2AgaW4KKyAgICAqMzItYml0KikKKyAgICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgICAgeDg2XzY0LSpsaW51eCopCisgICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl9pMzg2IgorICAgICAgICAgIDs7CisgICAgICAgIHBwYzY0LSpsaW51eCp8cG93ZXJwYzY0LSpsaW51eCopCisgICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjMycHBjbGludXgiCisgICAgICAgICAgOzsKKyAgICAgICAgczM5MHgtKmxpbnV4KikKKyAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3MzOTAiCisgICAgICAgICAgOzsKKyAgICAgICAgc3BhcmM2NC0qbGludXgqKQorICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGYzMl9zcGFyYyIKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKyAgICAqNjQtYml0KikKKyAgICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgICAgeDg2XzY0LSpsaW51eCopCisgICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94ODZfNjQiCisgICAgICAgICAgOzsKKyAgICAgICAgcHBjKi0qbGludXgqfHBvd2VycGMqLSpsaW51eCopCisgICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0cHBjIgorICAgICAgICAgIDs7CisgICAgICAgIHMzOTAqLSpsaW51eCopCisgICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3MzOTAiCisgICAgICAgICAgOzsKKyAgICAgICAgc3BhcmMqLSpsaW51eCopCisgICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3NwYXJjIgorICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworICAgIGVzYWMKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworCisqLSotc2NvMy4ydjUqKQorICAjIE9uIFNDTyBPcGVuU2VydmVyIDUsIHdlIG5lZWQgLWJlbGYgdG8gZ2V0IGZ1bGwtZmVhdHVyZWQgYmluYXJpZXMuCisgIFNBVkVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICBDRkxBR1M9IiRDRkxBR1MgLWJlbGYiCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgbmVlZHMgLWJlbGYiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIG5lZWRzIC1iZWxmLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9jY19uZWVkc19iZWxmK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGFjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgIGx0X2N2X2NjX25lZWRzX2JlbGY9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlsdF9jdl9jY19uZWVkc19iZWxmPW5vCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfY2NfbmVlZHNfYmVsZiIgPiY1CitlY2hvICIke0VDSE9fVH0kbHRfY3ZfY2NfbmVlZHNfYmVsZiIgPiY2OyB9CisgIGlmIHRlc3QgeCIkbHRfY3ZfY2NfbmVlZHNfYmVsZiIgIT0geCJ5ZXMiOyB0aGVuCisgICAgIyB0aGlzIGlzIHByb2JhYmx5IGdjYyAyLjguMCwgZWdjcyAxLjAgb3IgbmV3ZXI7IG5vIG5lZWQgZm9yIC1iZWxmCisgICAgQ0ZMQUdTPSIkU0FWRV9DRkxBR1MiCisgIGZpCisgIDs7CitzcGFyYyotKnNvbGFyaXMqKQorICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCisgIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgorICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3Qub2AgaW4KKyAgICAqNjQtYml0KikKKyAgICAgIGNhc2UgJGx0X2N2X3Byb2dfZ251X2xkIGluCisgICAgICB5ZXMqKSBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfc3BhcmMiIDs7CisgICAgICAqKSAgICBMRD0iJHtMRC1sZH0gLTY0IiA7OworICAgICAgZXNhYworICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgOzsKKworCitlc2FjCisKK25lZWRfbG9ja3M9IiRlbmFibGVfbGlidG9vbF9sb2NrIgorCisKKworZm9yIGFjX2hlYWRlciBpbiBkbGZjbi5oCitkbworYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCitpZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitmaQorYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCisJICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KK2Vsc2UKKyAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/Cit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNjsgfQorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAorI2luY2x1ZGUgPCRhY19oZWFkZXI+CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfaGVhZGVyX2NvbXBpbGVyPW5vCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjY7IH0KKworIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/Cit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjY7IH0KK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPCRhY19oZWFkZXI+CitfQUNFT0YKK2lmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfTsgdGhlbgorICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworICBhY19oZWFkZXJfcHJlcHJvYz1ubworZmkKKworcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2OyB9CisKKyMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorICB5ZXM6bm86ICkKKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKyAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKyAgICA7OworICBubzp5ZXM6KiApCisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKyAgICAoIGNhdCA8PFxfQVNCT1gKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgUmVwb3J0IHRoaXMgdG8gYnVnLXBhcnRlZEBnbnUub3JnICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKK19BU0JPWAorICAgICApIHwgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCisgICAgOzsKK2VzYWMKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKK2ZpCithY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AKKwkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorCitmaQoraWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworYWNfZXh0PWNwcAorYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKK2lmIHRlc3QgLXogIiRDWFgiOyB0aGVuCisgIGlmIHRlc3QgLW4gIiRDQ0MiOyB0aGVuCisgICAgQ1hYPSRDQ0MKKyAgZWxzZQorICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgZm9yIGFjX3Byb2cgaW4gZysrIGMrKyBncHAgYUNDIENDIGN4eCBjYysrIGNsLmV4ZSBGQ0MgS0NDIFJDQyB4bENfciB4bEMKKyAgZG8KKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY190b29sX3ByZWZpeCRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX0NYWCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQ1hYIjsgdGhlbgorICBhY19jdl9wcm9nX0NYWD0iJENYWCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19DWFg9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgorICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCitkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorQ1hYPSRhY19jdl9wcm9nX0NYWAoraWYgdGVzdCAtbiAiJENYWCI7IHRoZW4KKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQ1hYIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRDWFgiID4mNjsgfQorZWxzZQorICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KK2ZpCisKKworICAgIHRlc3QgLW4gIiRDWFgiICYmIGJyZWFrCisgIGRvbmUKK2ZpCitpZiB0ZXN0IC16ICIkQ1hYIjsgdGhlbgorICBhY19jdF9DWFg9JENYWAorICBmb3IgYWNfcHJvZyBpbiBnKysgYysrIGdwcCBhQ0MgQ0MgY3h4IGNjKysgY2wuZXhlIEZDQyBLQ0MgUkNDIHhsQ19yIHhsQworZG8KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9DWFgrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0NYWCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9DWFg9IiRhY19jdF9DWFgiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfQ1hYPSIkYWNfcHJvZyIKKyAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0NYWD0kYWNfY3ZfcHJvZ19hY19jdF9DWFgKK2lmIHRlc3QgLW4gIiRhY19jdF9DWFgiOyB0aGVuCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X0NYWCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3RfQ1hYIiA+JjY7IH0KK2Vsc2UKKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CitmaQorCisKKyAgdGVzdCAtbiAiJGFjX2N0X0NYWCIgJiYgYnJlYWsKK2RvbmUKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0NYWCIgPSB4OyB0aGVuCisgICAgQ1hYPSJnKysiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCit3aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCitjb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scword2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcworY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBDWFg9JGFjX2N0X0NYWAorICBmaQorZmkKKworICBmaQorZmkKKyMgUHJvdmlkZSBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb21waWxlci4KK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgQysrIGNvbXBpbGVyIHZlcnNpb24iID4mNQorYWNfY29tcGlsZXI9YHNldCBYICRhY19jb21waWxlOyBlY2hvICQyYAoreyAoYWNfdHJ5PSIkYWNfY29tcGlsZXIgLS12ZXJzaW9uID4mNSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlciAtLXZlcnNpb24gPiY1IikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfQoreyAoYWNfdHJ5PSIkYWNfY29tcGlsZXIgLXYgPiY1IgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGVyIC12ID4mNSIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KK3sgKGFjX3RyeT0iJGFjX2NvbXBpbGVyIC1WID4mNSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlciAtViA+JjUiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9CisKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQysrIGNvbXBpbGVyIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDKysgY29tcGlsZXIuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2N4eF9jb21waWxlcl9nbnUrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworI2lmbmRlZiBfX0dOVUNfXworICAgICAgIGNob2tlIG1lCisjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY3h4X3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgYWNfY29tcGlsZXJfZ251PXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfY29tcGlsZXJfZ251PW5vCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2FjX2N2X2N4eF9jb21waWxlcl9nbnU9JGFjX2NvbXBpbGVyX2dudQorCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfY3h4X2NvbXBpbGVyX2dudSIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudSIgPiY2OyB9CitHWFg9YHRlc3QgJGFjX2NvbXBpbGVyX2dudSA9IHllcyAmJiBlY2hvIHllc2AKK2FjX3Rlc3RfQ1hYRkxBR1M9JHtDWFhGTEFHUytzZXR9CithY19zYXZlX0NYWEZMQUdTPSRDWFhGTEFHUworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAkQ1hYIGFjY2VwdHMgLWciID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyICRDWFggYWNjZXB0cyAtZy4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19jeHhfZytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhY19zYXZlX2N4eF93ZXJyb3JfZmxhZz0kYWNfY3h4X3dlcnJvcl9mbGFnCisgICBhY19jeHhfd2Vycm9yX2ZsYWc9eWVzCisgICBhY19jdl9wcm9nX2N4eF9nPW5vCisgICBDWFhGTEFHUz0iLWciCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisgIGFjX2N2X3Byb2dfY3h4X2c9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlDWFhGTEFHUz0iIgorICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jeHhfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICA6CitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19jeHhfd2Vycm9yX2ZsYWc9JGFjX3NhdmVfY3h4X3dlcnJvcl9mbGFnCisJIENYWEZMQUdTPSItZyIKKwkgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jeHhfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICBhY19jdl9wcm9nX2N4eF9nPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisKK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGFjX2N4eF93ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jeHhfd2Vycm9yX2ZsYWcKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wcm9nX2N4eF9nIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9wcm9nX2N4eF9nIiA+JjY7IH0KK2lmIHRlc3QgIiRhY190ZXN0X0NYWEZMQUdTIiA9IHNldDsgdGhlbgorICBDWFhGTEFHUz0kYWNfc2F2ZV9DWFhGTEFHUworZWxpZiB0ZXN0ICRhY19jdl9wcm9nX2N4eF9nID0geWVzOyB0aGVuCisgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgQ1hYRkxBR1M9Ii1nIC1PMiIKKyAgZWxzZQorICAgIENYWEZMQUdTPSItZyIKKyAgZmkKK2Vsc2UKKyAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgICBDWFhGTEFHUz0iLU8yIgorICBlbHNlCisgICAgQ1hYRkxBR1M9CisgIGZpCitmaQorYWNfZXh0PWNwcAorYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKKworZGVwY2M9IiRDWFgiICBhbV9jb21waWxlcl9saXN0PQorCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthbV9jdl9DWFhfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAteiAiJEFNREVQX1RSVUUiICYmIHRlc3QgLWYgIiRhbV9kZXBjb21wIjsgdGhlbgorICAjIFdlIG1ha2UgYSBzdWJkaXIgYW5kIGRvIHRoZSB0ZXN0cyB0aGVyZS4gIE90aGVyd2lzZSB3ZSBjYW4gZW5kIHVwCisgICMgbWFraW5nIGJvZ3VzIGZpbGVzIHRoYXQgd2UgZG9uJ3Qga25vdyBhYm91dCBhbmQgbmV2ZXIgcmVtb3ZlLiAgRm9yCisgICMgaW5zdGFuY2UgaXQgd2FzIHJlcG9ydGVkIHRoYXQgb24gSFAtVVggdGhlIGdjYyB0ZXN0IHdpbGwgZW5kIHVwCisgICMgbWFraW5nIGEgZHVtbXkgZmlsZSBuYW1lZCBgRCcgLS0gYmVjYXVzZSBgLU1EJyBtZWFucyBgcHV0IHRoZSBvdXRwdXQKKyAgIyBpbiBEJy4KKyAgbWtkaXIgY29uZnRlc3QuZGlyCisgICMgQ29weSBkZXBjb21wIHRvIHN1YmRpciBiZWNhdXNlIG90aGVyd2lzZSB3ZSB3b24ndCBmaW5kIGl0IGlmIHdlJ3JlCisgICMgdXNpbmcgYSByZWxhdGl2ZSBkaXJlY3RvcnkuCisgIGNwICIkYW1fZGVwY29tcCIgY29uZnRlc3QuZGlyCisgIGNkIGNvbmZ0ZXN0LmRpcgorICAjIFdlIHdpbGwgYnVpbGQgb2JqZWN0cyBhbmQgZGVwZW5kZW5jaWVzIGluIGEgc3ViZGlyZWN0b3J5IGJlY2F1c2UKKyAgIyBpdCBoZWxwcyB0byBkZXRlY3QgaW5hcHBsaWNhYmxlIGRlcGVuZGVuY3kgbW9kZXMuICBGb3IgaW5zdGFuY2UKKyAgIyBib3RoIFRydTY0J3MgY2MgYW5kIElDQyBzdXBwb3J0IC1NRCB0byBvdXRwdXQgZGVwZW5kZW5jaWVzIGFzIGEKKyAgIyBzaWRlIGVmZmVjdCBvZiBjb21waWxhdGlvbiwgYnV0IElDQyB3aWxsIHB1dCB0aGUgZGVwZW5kZW5jaWVzIGluCisgICMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHdoaWxlIFRydTY0IHdpbGwgcHV0IHRoZW0gaW4gdGhlIG9iamVjdAorICAjIGRpcmVjdG9yeS4KKyAgbWtkaXIgc3ViCisKKyAgYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPW5vbmUKKyAgaWYgdGVzdCAiJGFtX2NvbXBpbGVyX2xpc3QiID0gIiI7IHRoZW4KKyAgICAgYW1fY29tcGlsZXJfbGlzdD1gc2VkIC1uICdzL14jKlwoW2EtekEtWjAtOV0qXCkpJC9cMS9wJyA8IC4vZGVwY29tcGAKKyAgZmkKKyAgZm9yIGRlcG1vZGUgaW4gJGFtX2NvbXBpbGVyX2xpc3Q7IGRvCisgICAgIyBTZXR1cCBhIHNvdXJjZSB3aXRoIG1hbnkgZGVwZW5kZW5jaWVzLCBiZWNhdXNlIHNvbWUgY29tcGlsZXJzCisgICAgIyBsaWtlIHRvIHdyYXAgbGFyZ2UgZGVwZW5kZW5jeSBsaXN0cyBvbiBjb2x1bW4gODAgKHdpdGggXCksIGFuZAorICAgICMgd2Ugc2hvdWxkIG5vdCBjaG9vc2UgYSBkZXBjb21wIG1vZGUgd2hpY2ggaXMgY29uZnVzZWQgYnkgdGhpcy4KKyAgICAjCisgICAgIyBXZSBuZWVkIHRvIHJlY3JlYXRlIHRoZXNlIGZpbGVzIGZvciBlYWNoIHRlc3QsIGFzIHRoZSBjb21waWxlciBtYXkKKyAgICAjIG92ZXJ3cml0ZSBzb21lIG9mIHRoZW0gd2hlbiB0ZXN0aW5nIHdpdGggb2JzY3VyZSBjb21tYW5kIGxpbmVzLgorICAgICMgVGhpcyBoYXBwZW5zIGF0IGxlYXN0IHdpdGggdGhlIEFJWCBDIGNvbXBpbGVyLgorICAgIDogPiBzdWIvY29uZnRlc3QuYworICAgIGZvciBpIGluIDEgMiAzIDQgNSA2OyBkbworICAgICAgZWNobyAnI2luY2x1ZGUgImNvbmZ0c3QnJGknLmgiJyA+PiBzdWIvY29uZnRlc3QuYworICAgICAgIyBVc2luZyBgOiA+IHN1Yi9jb25mdHN0JGkuaCcgY3JlYXRlcyBvbmx5IHN1Yi9jb25mdHN0MS5oIHdpdGgKKyAgICAgICMgU29sYXJpcyA4J3Mgey91c3IsfS9iaW4vc2guCisgICAgICB0b3VjaCBzdWIvY29uZnRzdCRpLmgKKyAgICBkb25lCisgICAgZWNobyAiJHthbV9faW5jbHVkZX0gJHthbV9fcXVvdGV9c3ViL2NvbmZ0ZXN0LlBvJHthbV9fcXVvdGV9IiA+IGNvbmZtZgorCisgICAgY2FzZSAkZGVwbW9kZSBpbgorICAgIG5vc2lkZWVmZmVjdCkKKyAgICAgICMgYWZ0ZXIgdGhpcyB0YWcsIG1lY2hhbmlzbXMgYXJlIG5vdCBieSBzaWRlLWVmZmVjdCwgc28gdGhleSdsbAorICAgICAgIyBvbmx5IGJlIHVzZWQgd2hlbiBleHBsaWNpdGx5IHJlcXVlc3RlZAorICAgICAgaWYgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgPSB4eWVzOyB0aGVuCisJY29udGludWUKKyAgICAgIGVsc2UKKwlicmVhaworICAgICAgZmkKKyAgICAgIDs7CisgICAgbm9uZSkgYnJlYWsgOzsKKyAgICBlc2FjCisgICAgIyBXZSBjaGVjayB3aXRoIGAtYycgYW5kIGAtbycgZm9yIHRoZSBzYWtlIG9mIHRoZSAiZGFzaG1zdGRvdXQiCisgICAgIyBtb2RlLiAgSXQgdHVybnMgb3V0IHRoYXQgdGhlIFN1blBybyBDKysgY29tcGlsZXIgZG9lcyBub3QgcHJvcGVybHkKKyAgICAjIGhhbmRsZSBgLU0gLW8nLCBhbmQgd2UgbmVlZCB0byBkZXRlY3QgdGhpcy4KKyAgICBpZiBkZXBtb2RlPSRkZXBtb2RlIFwKKyAgICAgICBzb3VyY2U9c3ViL2NvbmZ0ZXN0LmMgb2JqZWN0PXN1Yi9jb25mdGVzdC4ke09CSkVYVC1vfSBcCisgICAgICAgZGVwZmlsZT1zdWIvY29uZnRlc3QuUG8gdG1wZGVwZmlsZT1zdWIvY29uZnRlc3QuVFBvIFwKKyAgICAgICAkU0hFTEwgLi9kZXBjb21wICRkZXBjYyAtYyAtbyBzdWIvY29uZnRlc3QuJHtPQkpFWFQtb30gc3ViL2NvbmZ0ZXN0LmMgXAorICAgICAgICAgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0LmVyciAmJgorICAgICAgIGdyZXAgc3ViL2NvbmZ0c3QxLmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKKyAgICAgICBncmVwIHN1Yi9jb25mdHN0Ni5oIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgZ3JlcCBzdWIvY29uZnRlc3QuJHtPQkpFWFQtb30gc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKKyAgICAgICAke01BS0UtbWFrZX0gLXMgLWYgY29uZm1mID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgICMgaWNjIGRvZXNuJ3QgY2hva2Ugb24gdW5rbm93biBvcHRpb25zLCBpdCB3aWxsIGp1c3QgaXNzdWUgd2FybmluZ3MKKyAgICAgICMgb3IgcmVtYXJrcyAoZXZlbiB3aXRoIC1XZXJyb3IpLiAgU28gd2UgZ3JlcCBzdGRlcnIgZm9yIGFueSBtZXNzYWdlCisgICAgICAjIHRoYXQgc2F5cyBhbiBvcHRpb24gd2FzIGlnbm9yZWQgb3Igbm90IHN1cHBvcnRlZC4KKyAgICAgICMgV2hlbiBnaXZlbiAtTVAsIGljYyA3LjAgYW5kIDcuMSBjb21wbGFpbiB0aHVzbHk6CisgICAgICAjICAgaWNjOiBDb21tYW5kIGxpbmUgd2FybmluZzogaWdub3Jpbmcgb3B0aW9uICctTSc7IG5vIGFyZ3VtZW50IHJlcXVpcmVkCisgICAgICAjIFRoZSBkaWFnbm9zaXMgY2hhbmdlZCBpbiBpY2MgOC4wOgorICAgICAgIyAgIGljYzogQ29tbWFuZCBsaW5lIHJlbWFyazogb3B0aW9uICctTVAnIG5vdCBzdXBwb3J0ZWQKKyAgICAgIGlmIChncmVwICdpZ25vcmluZyBvcHRpb24nIGNvbmZ0ZXN0LmVyciB8fAorICAgICAgICAgIGdyZXAgJ25vdCBzdXBwb3J0ZWQnIGNvbmZ0ZXN0LmVycikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDo7IGVsc2UKKyAgICAgICAgYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPSRkZXBtb2RlCisgICAgICAgIGJyZWFrCisgICAgICBmaQorICAgIGZpCisgIGRvbmUKKworICBjZCAuLgorICBybSAtcmYgY29uZnRlc3QuZGlyCitlbHNlCisgIGFtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT1ub25lCitmaQorCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhbV9jdl9DWFhfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID4mNjsgfQorQ1hYREVQTU9ERT1kZXBtb2RlPSRhbV9jdl9DWFhfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUKKworIGlmCisgIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubyBcCisgICYmIHRlc3QgIiRhbV9jdl9DWFhfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID0gZ2NjMzsgdGhlbgorICBhbV9fZmFzdGRlcENYWF9UUlVFPQorICBhbV9fZmFzdGRlcENYWF9GQUxTRT0nIycKK2Vsc2UKKyAgYW1fX2Zhc3RkZXBDWFhfVFJVRT0nIycKKyAgYW1fX2Zhc3RkZXBDWFhfRkFMU0U9CitmaQorCisKKworCitpZiB0ZXN0IC1uICIkQ1hYIiAmJiAoIHRlc3QgIlgkQ1hYIiAhPSAiWG5vIiAmJgorICAgICggKHRlc3QgIlgkQ1hYIiA9ICJYZysrIiAmJiBgZysrIC12ID4vZGV2L251bGwgMj4mMWAgKSB8fAorICAgICh0ZXN0ICJYJENYWCIgIT0gIlhnKysiKSkpIDsgdGhlbgorICBhY19leHQ9Y3BwCithY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQysrIHByZXByb2Nlc3NvciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMrKyBwcmVwcm9jZXNzb3IuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0IC16ICIkQ1hYQ1BQIjsgdGhlbgorICBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ1hYQ1BQK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgICAgICAjIERvdWJsZSBxdW90ZXMgYmVjYXVzZSBDWFhDUFAgbmVlZHMgdG8gYmUgZXhwYW5kZWQKKyAgICBmb3IgQ1hYQ1BQIGluICIkQ1hYIC1FIiAiL2xpYi9jcHAiCisgICAgZG8KKyAgICAgIGFjX3ByZXByb2Nfb2s9ZmFsc2UKK2ZvciBhY19jeHhfcHJlcHJvY193YXJuX2ZsYWcgaW4gJycgeWVzCitkbworICAjIFVzZSBhIGhlYWRlciBmaWxlIHRoYXQgY29tZXMgd2l0aCBnY2MsIHNvIGNvbmZpZ3VyaW5nIGdsaWJjCisgICMgd2l0aCBhIGZyZXNoIGNyb3NzLWNvbXBpbGVyIHdvcmtzLgorICAjIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgIyA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuCisgICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCisgICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisJCSAgICAgU3ludGF4IGVycm9yCitfQUNFT0YKK2lmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworCSB0ZXN0IC16ICIkYWNfY3h4X3ByZXByb2Nfd2Fybl9mbGFnJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH07IHRoZW4KKyAgOgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisgICMgQnJva2VuOiBmYWlscyBvbiB2YWxpZCBpbnB1dC4KK2NvbnRpbnVlCitmaQorCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorCisgICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub25leGlzdGVudCBoZWFkZXJzCisgICMgY2FuIGJlIGRldGVjdGVkIGFuZCBob3cuCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+CitfQUNFT0YKK2lmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworCSB0ZXN0IC16ICIkYWNfY3h4X3ByZXByb2Nfd2Fybl9mbGFnJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH07IHRoZW4KKyAgIyBCcm9rZW46IHN1Y2Nlc3Mgb24gaW52YWxpZCBpbnB1dC4KK2NvbnRpbnVlCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KK2FjX3ByZXByb2Nfb2s9OgorYnJlYWsKK2ZpCisKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisKK2RvbmUKKyMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK2lmICRhY19wcmVwcm9jX29rOyB0aGVuCisgIGJyZWFrCitmaQorCisgICAgZG9uZQorICAgIGFjX2N2X3Byb2dfQ1hYQ1BQPSRDWFhDUFAKKworZmkKKyAgQ1hYQ1BQPSRhY19jdl9wcm9nX0NYWENQUAorZWxzZQorICBhY19jdl9wcm9nX0NYWENQUD0kQ1hYQ1BQCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQ1hYQ1BQIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRDWFhDUFAiID4mNjsgfQorYWNfcHJlcHJvY19vaz1mYWxzZQorZm9yIGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKK2RvCisgICMgVXNlIGEgaGVhZGVyIGZpbGUgdGhhdCBjb21lcyB3aXRoIGdjYywgc28gY29uZmlndXJpbmcgZ2xpYmMKKyAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCisgICMgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAjIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4KKyAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKKyAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4gIlN5bnRheCBlcnJvciIgaXMgaGVyZSB0byBjYXRjaCB0aGlzIGNhc2UuCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKwkJICAgICBTeW50YXggZXJyb3IKK19BQ0VPRgoraWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7CisJIHRlc3QgLXogIiRhY19jeHhfcHJlcHJvY193YXJuX2ZsYWckYWNfY3h4X3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfTsgdGhlbgorICA6CitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgorY29udGludWUKK2ZpCisKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisKKyAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMKKyAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8YWNfbm9uZXhpc3RlbnQuaD4KK19BQ0VPRgoraWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7CisJIHRlc3QgLXogIiRhY19jeHhfcHJlcHJvY193YXJuX2ZsYWckYWNfY3h4X3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfTsgdGhlbgorICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgorY29udGludWUKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworICAjIFBhc3NlcyBib3RoIHRlc3RzLgorYWNfcHJlcHJvY19vaz06CiticmVhaworZmkKKworcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKworZG9uZQorIyBCZWNhdXNlIG9mIGBicmVhaycsIF9BQ19QUkVQUk9DX0lGRUxTRSdzIGNsZWFuaW5nIGNvZGUgd2FzIHNraXBwZWQuCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAoraWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4KKyAgOgorZWxzZQorICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBDKysgcHJlcHJvY2Vzc29yIFwiJENYWENQUFwiIGZhaWxzIHNhbml0eSBjaGVjaworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogQysrIHByZXByb2Nlc3NvciBcIiRDWFhDUFBcIiBmYWlscyBzYW5pdHkgY2hlY2sKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitmaQorCithY19leHQ9Y3BwCithY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQorCitmaQorCisKK2FjX2V4dD1mCithY19jb21waWxlPSckRjc3IC1jICRGRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckRjc3IC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkRkZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9mNzdfY29tcGlsZXJfZ251CitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgIGZvciBhY19wcm9nIGluIGc3NyB4bGYgZjc3IGZydCBwZ2Y3NyBjZjc3IGZvcnQ3NyBmbDMyIGFmNzcgeGxmOTAgZjkwIHBnZjkwIHBnaHBmIGVwY2Y5MCBnZm9ydHJhbiBnOTUgeGxmOTUgZjk1IGZvcnQgaWZvcnQgaWZjIGVmYyBwZ2Y5NSBsZjk1IGZ0bgorICBkbworICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfRjc3K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRGNzciOyB0aGVuCisgIGFjX2N2X3Byb2dfRjc3PSIkRjc3IiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX0Y3Nz0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCisgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKK2RvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitGNzc9JGFjX2N2X3Byb2dfRjc3CitpZiB0ZXN0IC1uICIkRjc3IjsgdGhlbgorICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRGNzciID4mNQorZWNobyAiJHtFQ0hPX1R9JEY3NyIgPiY2OyB9CitlbHNlCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorZmkKKworCisgICAgdGVzdCAtbiAiJEY3NyIgJiYgYnJlYWsKKyAgZG9uZQorZmkKK2lmIHRlc3QgLXogIiRGNzciOyB0aGVuCisgIGFjX2N0X0Y3Nz0kRjc3CisgIGZvciBhY19wcm9nIGluIGc3NyB4bGYgZjc3IGZydCBwZ2Y3NyBjZjc3IGZvcnQ3NyBmbDMyIGFmNzcgeGxmOTAgZjkwIHBnZjkwIHBnaHBmIGVwY2Y5MCBnZm9ydHJhbiBnOTUgeGxmOTUgZjk1IGZvcnQgaWZvcnQgaWZjIGVmYyBwZ2Y5NSBsZjk1IGZ0bgorZG8KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9GNzcrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0Y3NyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9GNzc9IiRhY19jdF9GNzciICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfRjc3PSIkYWNfcHJvZyIKKyAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0Y3Nz0kYWNfY3ZfcHJvZ19hY19jdF9GNzcKK2lmIHRlc3QgLW4gIiRhY19jdF9GNzciOyB0aGVuCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X0Y3NyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3RfRjc3IiA+JjY7IH0KK2Vsc2UKKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CitmaQorCisKKyAgdGVzdCAtbiAiJGFjX2N0X0Y3NyIgJiYgYnJlYWsKK2RvbmUKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0Y3NyIgPSB4OyB0aGVuCisgICAgRjc3PSIiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCit3aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCitjb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scword2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcworY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBGNzc9JGFjX2N0X0Y3NworICBmaQorZmkKKworCisjIFByb3ZpZGUgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29tcGlsZXIuCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEZvcnRyYW4gNzcgY29tcGlsZXIgdmVyc2lvbiIgPiY1CithY19jb21waWxlcj1gc2V0IFggJGFjX2NvbXBpbGU7IGVjaG8gJDJgCit7IChhY190cnk9IiRhY19jb21waWxlciAtLXZlcnNpb24gPiY1IgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGVyIC0tdmVyc2lvbiA+JjUiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9Cit7IChhY190cnk9IiRhY19jb21waWxlciAtdiA+JjUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZXIgLXYgPiY1IikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfQoreyAoYWNfdHJ5PSIkYWNfY29tcGlsZXIgLVYgPiY1IgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGVyIC1WID4mNSIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KK3JtIC1mIGEub3V0CisKKyMgSWYgd2UgZG9uJ3QgdXNlIGAuRicgYXMgZXh0ZW5zaW9uLCB0aGUgcHJlcHJvY2Vzc29yIGlzIG5vdCBydW4gb24gdGhlCisjIGlucHV0IGZpbGUuICAoTm90ZSB0aGF0IHRoaXMgb25seSBuZWVkcyB0byB3b3JrIGZvciBHTlUgY29tcGlsZXJzLikKK2FjX3NhdmVfZXh0PSRhY19leHQKK2FjX2V4dD1GCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEZvcnRyYW4gNzcgY29tcGlsZXIiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEZvcnRyYW4gNzcgY29tcGlsZXIuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2Y3N19jb21waWxlcl9nbnUrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgICAgICBwcm9ncmFtIG1haW4KKyNpZm5kZWYgX19HTlVDX18KKyAgICAgICBjaG9rZSBtZQorI2VuZGlmCisKKyAgICAgIGVuZAorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfZjc3X3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgYWNfY29tcGlsZXJfZ251PXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfY29tcGlsZXJfZ251PW5vCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2FjX2N2X2Y3N19jb21waWxlcl9nbnU9JGFjX2NvbXBpbGVyX2dudQorCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZjc3X2NvbXBpbGVyX2dudSIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfZjc3X2NvbXBpbGVyX2dudSIgPiY2OyB9CithY19leHQ9JGFjX3NhdmVfZXh0CithY190ZXN0X0ZGTEFHUz0ke0ZGTEFHUytzZXR9CithY19zYXZlX0ZGTEFHUz0kRkZMQUdTCitGRkxBR1M9Cit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyICRGNzcgYWNjZXB0cyAtZyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgJEY3NyBhY2NlcHRzIC1nLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2Y3N19nK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIEZGTEFHUz0tZworY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgICAgICBwcm9ncmFtIG1haW4KKworICAgICAgZW5kCitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19mNzdfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICBhY19jdl9wcm9nX2Y3N19nPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfY3ZfcHJvZ19mNzdfZz1ubworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wcm9nX2Y3N19nIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9wcm9nX2Y3N19nIiA+JjY7IH0KK2lmIHRlc3QgIiRhY190ZXN0X0ZGTEFHUyIgPSBzZXQ7IHRoZW4KKyAgRkZMQUdTPSRhY19zYXZlX0ZGTEFHUworZWxpZiB0ZXN0ICRhY19jdl9wcm9nX2Y3N19nID0geWVzOyB0aGVuCisgIGlmIHRlc3QgIngkYWNfY3ZfZjc3X2NvbXBpbGVyX2dudSIgPSB4eWVzOyB0aGVuCisgICAgRkZMQUdTPSItZyAtTzIiCisgIGVsc2UKKyAgICBGRkxBR1M9Ii1nIgorICBmaQorZWxzZQorICBpZiB0ZXN0ICJ4JGFjX2N2X2Y3N19jb21waWxlcl9nbnUiID0geHllczsgdGhlbgorICAgIEZGTEFHUz0iLU8yIgorICBlbHNlCisgICAgRkZMQUdTPQorICBmaQorZmkKKworRzc3PWB0ZXN0ICRhY19jb21waWxlcl9nbnUgPSB5ZXMgJiYgZWNobyB5ZXNgCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKKworCisjIEF1dG9jb25mIDIuMTMncyBBQ19PQkpFWFQgYW5kIEFDX0VYRUVYVCBtYWNyb3Mgb25seSB3b3JrcyBmb3IgQyBjb21waWxlcnMhCisKKyMgZmluZCB0aGUgbWF4aW11bSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB0aGUgbWF4aW11bSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3Zfc3lzX21heF9jbWRfbGVuK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgICAgaT0wCisgIHRlc3RzdHJpbmc9IkFCQ0QiCisKKyAgY2FzZSAkYnVpbGRfb3MgaW4KKyAgbXNkb3NkamdwcCopCisgICAgIyBPbiBESkdQUCwgdGhpcyB0ZXN0IGNhbiBibG93IHVwIHByZXR0eSBiYWRseSBkdWUgdG8gcHJvYmxlbXMgaW4gbGliYworICAgICMgKGFueSBzaW5nbGUgYXJndW1lbnQgZXhjZWVkaW5nIDIwMDAgYnl0ZXMgY2F1c2VzIGEgYnVmZmVyIG92ZXJydW4KKyAgICAjIGR1cmluZyBnbG9iIGV4cGFuc2lvbikuICBFdmVuIGlmIGl0IHdlcmUgZml4ZWQsIHRoZSByZXN1bHQgb2YgdGhpcworICAgICMgY2hlY2sgd291bGQgYmUgbGFyZ2VyIHRoYW4gaXQgc2hvdWxkIGJlLgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xMjI4ODsgICAgIyAxMksgaXMgYWJvdXQgcmlnaHQKKyAgICA7OworCisgIGdudSopCisgICAgIyBVbmRlciBHTlUgSHVyZCwgdGhpcyB0ZXN0IGlzIG5vdCByZXF1aXJlZCBiZWNhdXNlIHRoZXJlIGlzCisgICAgIyBubyBsaW1pdCB0byB0aGUgbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCisgICAgIyBMaWJ0b29sIHdpbGwgaW50ZXJwcmV0IC0xIGFzIG5vIGxpbWl0IHdoYXRzb2V2ZXIKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49LTE7CisgICAgOzsKKworICBjeWd3aW4qIHwgbWluZ3cqKQorICAgICMgT24gV2luOXgvTUUsIHRoaXMgdGVzdCBibG93cyB1cCAtLSBpdCBzdWNjZWVkcywgYnV0IHRha2VzCisgICAgIyBhYm91dCA1IG1pbnV0ZXMgYXMgdGhlIHRlc3RzdHJpbmcgZ3Jvd3MgZXhwb25lbnRpYWxseS4KKyAgICAjIFdvcnNlLCBzaW5jZSA5eC9NRSBhcmUgbm90IHByZS1lbXB0aXZlbHkgbXVsdGl0YXNraW5nLAorICAgICMgeW91IGVuZCB1cCB3aXRoIGEgImZyb3plbiIgY29tcHV0ZXIsIGV2ZW4gdGhvdWdoIHdpdGggcGF0aWVuY2UKKyAgICAjIHRoZSB0ZXN0IGV2ZW50dWFsbHkgc3VjY2VlZHMgKHdpdGggYSBtYXggbGluZSBsZW5ndGggb2YgMjU2aykuCisgICAgIyBJbnN0ZWFkLCBsZXQncyBqdXN0IHB1bnQ6IHVzZSB0aGUgbWluaW11bSBsaW5lbGVuZ3RoIHJlcG9ydGVkIGJ5CisgICAgIyBhbGwgb2YgdGhlIHN1cHBvcnRlZCBwbGF0Zm9ybXM6IDgxOTIgKG9uIE5ULzJLL1hQKS4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKKyAgICA7OworCisgIGFtaWdhb3MqKQorICAgICMgT24gQW1pZ2FPUyB3aXRoIHBka3NoLCB0aGlzIHRlc3QgdGFrZXMgaG91cnMsIGxpdGVyYWxseS4KKyAgICAjIFNvIHdlIGp1c3QgcHVudCBhbmQgdXNlIGEgbWluaW11bSBsaW5lIGxlbmd0aCBvZiA4MTkyLgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyOworICAgIDs7CisKKyAgbmV0YnNkKiB8IGZyZWVic2QqIHwgb3BlbmJzZCogfCBkYXJ3aW4qIHwgZHJhZ29uZmx5KikKKyAgICAjIFRoaXMgaGFzIGJlZW4gYXJvdW5kIHNpbmNlIDM4NkJTRCwgYXQgbGVhc3QuICBMaWtlbHkgZnVydGhlci4KKyAgICBpZiB0ZXN0IC14IC9zYmluL3N5c2N0bDsgdGhlbgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWAvc2Jpbi9zeXNjdGwgLW4ga2Vybi5hcmdtYXhgCisgICAgZWxpZiB0ZXN0IC14IC91c3Ivc2Jpbi9zeXNjdGw7IHRoZW4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gL3Vzci9zYmluL3N5c2N0bCAtbiBrZXJuLmFyZ21heGAKKyAgICBlbHNlCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49NjU1MzYJIyB1c2FibGUgZGVmYXVsdCBmb3IgYWxsIEJTRHMKKyAgICBmaQorICAgICMgQW5kIGFkZCBhIHNhZmV0eSB6b25lCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gNGAKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcKiAzYAorICAgIDs7CisKKyAgaW50ZXJpeCopCisgICAgIyBXZSBrbm93IHRoZSB2YWx1ZSAyNjIxNDQgYW5kIGhhcmRjb2RlIGl0IHdpdGggYSBzYWZldHkgem9uZSAobGlrZSBCU0QpCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTE5NjYwOAorICAgIDs7CisKKyAgb3NmKikKKyAgICAjIERyLiBIYW5zIEVra2VoYXJkIFBsZXNzZXIgcmVwb3J0cyBzZWVpbmcgYSBrZXJuZWwgcGFuaWMgcnVubmluZyBjb25maWd1cmUKKyAgICAjIGR1ZSB0byB0aGlzIHRlc3Qgd2hlbiBleGVjX2Rpc2FibGVfYXJnX2xpbWl0IGlzIDEgb24gVHJ1NjQuIEl0IGlzIG5vdAorICAgICMgbmljZSB0byBjYXVzZSBrZXJuZWwgcGFuaWNzIHNvIGxldHMgYXZvaWQgdGhlIGxvb3AgYmVsb3cuCisgICAgIyBGaXJzdCBzZXQgYSByZWFzb25hYmxlIGRlZmF1bHQuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTE2Mzg0CisgICAgIworICAgIGlmIHRlc3QgLXggL3NiaW4vc3lzY29uZmlnOyB0aGVuCisgICAgICBjYXNlIGAvc2Jpbi9zeXNjb25maWcgLXEgcHJvYyBleGVjX2Rpc2FibGVfYXJnX2xpbWl0YCBpbgorICAgICAgICAqMSopIGx0X2N2X3N5c19tYXhfY21kX2xlbj0tMSA7OworICAgICAgZXNhYworICAgIGZpCisgICAgOzsKKyAgc2NvMy4ydjUqKQorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xMDI0MDAKKyAgICA7OworICBzeXN2NSogfCBzY281djYqIHwgc3lzdjQuMnV3MiopCisgICAga2FyZ21heD1gZ3JlcCBBUkdfTUFYIC9ldGMvY29uZi9jZi5kL3N0dW5lIDI+L2Rldi9udWxsYAorICAgIGlmIHRlc3QgLW4gIiRrYXJnbWF4IjsgdGhlbgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBlY2hvICRrYXJnbWF4IHwgc2VkICdzLy4qWyAJXS8vJ2AKKyAgICBlbHNlCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MzI3NjgKKyAgICBmaQorICAgIDs7CisgICopCisgICAgIyBJZiB0ZXN0IGlzIG5vdCBhIHNoZWxsIGJ1aWx0LWluLCB3ZSdsbCBwcm9iYWJseSBlbmQgdXAgY29tcHV0aW5nIGEKKyAgICAjIG1heGltdW0gbGVuZ3RoIHRoYXQgaXMgb25seSBoYWxmIG9mIHRoZSBhY3R1YWwgbWF4aW11bSBsZW5ndGgsIGJ1dAorICAgICMgd2UgY2FuJ3QgdGVsbC4KKyAgICBTSEVMTD0ke1NIRUxMLSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9fQorICAgIHdoaWxlICh0ZXN0ICJYImAkU0hFTEwgJDAgLS1mYWxsYmFjay1lY2hvICJYJHRlc3RzdHJpbmciIDI+L2Rldi9udWxsYCBcCisJICAgICAgID0gIlhYJHRlc3RzdHJpbmciKSA+L2Rldi9udWxsIDI+JjEgJiYKKwkgICAgbmV3X3Jlc3VsdD1gZXhwciAiWCR0ZXN0c3RyaW5nIiA6ICIuKiIgMj4mMWAgJiYKKwkgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPSRuZXdfcmVzdWx0ICYmCisJICAgIHRlc3QgJGkgIT0gMTcgIyAxLzIgTUIgc2hvdWxkIGJlIGVub3VnaAorICAgIGRvCisgICAgICBpPWBleHByICRpICsgMWAKKyAgICAgIHRlc3RzdHJpbmc9JHRlc3RzdHJpbmckdGVzdHN0cmluZworICAgIGRvbmUKKyAgICB0ZXN0c3RyaW5nPQorICAgICMgQWRkIGEgc2lnbmlmaWNhbnQgc2FmZXR5IGZhY3RvciBiZWNhdXNlIEMrKyBjb21waWxlcnMgY2FuIHRhY2sgb24gbWFzc2l2ZQorICAgICMgYW1vdW50cyBvZiBhZGRpdGlvbmFsIGFyZ3VtZW50cyBiZWZvcmUgcGFzc2luZyB0aGVtIHRvIHRoZSBsaW5rZXIuCisgICAgIyBJdCBhcHBlYXJzIGFzIHRob3VnaCAxLzIgaXMgYSB1c2FibGUgdmFsdWUuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gMmAKKyAgICA7OworICBlc2FjCisKK2ZpCisKK2lmIHRlc3QgLW4gJGx0X2N2X3N5c19tYXhfY21kX2xlbiA7IHRoZW4KKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iID4mNjsgfQorZWxzZQorICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vbmUiID4mNQorZWNobyAiJHtFQ0hPX1R9bm9uZSIgPiY2OyB9CitmaQorCisKKworCisjIENoZWNrIGZvciBjb21tYW5kIHRvIGdyYWIgdGhlIHJhdyBzeW1ib2wgbmFtZSBmb2xsb3dlZCBieSBDIHN5bWJvbCBmcm9tIG5tLgoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgY29tbWFuZCB0byBwYXJzZSAkTk0gb3V0cHV0IGZyb20gJGNvbXBpbGVyIG9iamVjdCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGNvbW1hbmQgdG8gcGFyc2UgJE5NIG91dHB1dCBmcm9tICRjb21waWxlciBvYmplY3QuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworIyBUaGVzZSBhcmUgc2FuZSBkZWZhdWx0cyB0aGF0IHdvcmsgb24gYXQgbGVhc3QgYSBmZXcgb2xkIHN5c3RlbXMuCisjIFtUaGV5IGNvbWUgZnJvbSBVbHRyaXguICBXaGF0IGNvdWxkIGJlIG9sZGVyIHRoYW4gVWx0cml4PyEhIDspXQorCisjIENoYXJhY3RlciBjbGFzcyBkZXNjcmliaW5nIE5NIGdsb2JhbCBzeW1ib2wgY29kZXMuCitzeW1jb2RlPSdbQkNERUdSU1RdJworCisjIFJlZ2V4cCB0byBtYXRjaCBzeW1ib2xzIHRoYXQgY2FuIGJlIGFjY2Vzc2VkIGRpcmVjdGx5IGZyb20gQy4KK3N5bXBhdD0nXChbX0EtWmEtel1bX0EtWmEtejAtOV0qXCknCisKKyMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIGEgcHJvcGVyIEMgZGVjbGFyYXRpb24KK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4gLWUgJ3MvXi4gLiogXCguKlwpJC9leHRlcm4gaW50IFwxOy9wJyIKKworIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gc3ltYm9sIG5hbWUgYW5kIHN5bWJvbCBhZGRyZXNzCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKSAkLyAge1xcXCJcMVxcXCIsIChsdF9wdHIpIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUgXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJcMlwiLCAobHRfcHRyKSBcJlwyfSwvcCciCisKKyMgRGVmaW5lIHN5c3RlbS1zcGVjaWZpYyB2YXJpYWJsZXMuCitjYXNlICRob3N0X29zIGluCithaXgqKQorICBzeW1jb2RlPSdbQkNEVF0nCisgIDs7CitjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCisgIHN5bWNvZGU9J1tBQkNER0lTVFddJworICA7OworaHB1eCopICMgSXRzIGxpbmtlciBkaXN0aW5ndWlzaGVzIGRhdGEgZnJvbSBjb2RlIHN5bWJvbHMKKyAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICBzeW1jb2RlPSdbQUJDREVHUlNUXScKKyAgZmkKKyAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCcgLWUgJ3MvXiRzeW1jb2RlKiAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxOy9wJyIKKyAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXCkgJC8gIHtcXFwiXDFcXFwiLCAobHRfcHRyKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcIlwyXCIsIChsdF9wdHIpIFwmXDJ9LC9wJyIKKyAgOzsKK2xpbnV4KikKKyAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICBzeW1jb2RlPSdbQUJDREdJUlNUV10nCisgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCcgLWUgJ3MvXiRzeW1jb2RlKiAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxOy9wJyIKKyAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKSAkLyAge1xcXCJcMVxcXCIsIChsdF9wdHIpIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wiXDJcIiwgKGx0X3B0cikgXCZcMn0sL3AnIgorICBmaQorICA7OworaXJpeCogfCBub25zdG9wdXgqKQorICBzeW1jb2RlPSdbQkNERUdSU1RdJworICA7Oworb3NmKikKKyAgc3ltY29kZT0nW0JDREVHUVJTVF0nCisgIDs7Citzb2xhcmlzKikKKyAgc3ltY29kZT0nW0JEUlRdJworICA7Oworc2NvMy4ydjUqKQorICBzeW1jb2RlPSdbRFRdJworICA7Oworc3lzdjQuMnV3MiopCisgIHN5bWNvZGU9J1tEVF0nCisgIDs7CitzeXN2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqKQorICBzeW1jb2RlPSdbQUJEVF0nCisgIDs7CitzeXN2NCkKKyAgc3ltY29kZT0nW0RGTlNUVV0nCisgIDs7Citlc2FjCisKKyMgSGFuZGxlIENSTEYgaW4gbWluZ3cgdG9vbCBjaGFpbgorb3B0X2NyPQorY2FzZSAkYnVpbGRfb3MgaW4KK21pbmd3KikKKyAgb3B0X2NyPWBlY2hvICd4XHswLDFcfScgfCB0ciB4ICdcMDE1J2AgIyBvcHRpb24gY3IgaW4gcmVnZXhwCisgIDs7Citlc2FjCisKKyMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHVzZSBpdHMgc3RhbmRhcmQgc3ltYm9sIGNvZGVzLgorY2FzZSBgJE5NIC1WIDI+JjFgIGluCisqR05VKiB8ICond2l0aCBCRkQnKikKKyAgc3ltY29kZT0nW0FCQ0RHSVJTVFddJyA7OworZXNhYworCisjIFRyeSB3aXRob3V0IGEgcHJlZml4IHVuZGVyY29yZSwgdGhlbiB3aXRoIGl0LgorZm9yIGFjX3N5bXByZnggaW4gIiIgIl8iOyBkbworCisgICMgVHJhbnNmb3JtIHN5bWNvZGUsIHN5bXBhdCwgYW5kIHN5bXByZnggaW50byBhIHJhdyBzeW1ib2wgYW5kIGEgQyBzeW1ib2wuCisgIHN5bXhmcm09IlxcMSAkYWNfc3ltcHJmeFxcMiBcXDIiCisKKyAgIyBXcml0ZSB0aGUgcmF3IGFuZCBDIGlkZW50aWZpZXJzLgorICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSJzZWQgLW4gLWUgJ3MvXi4qWyAJXVwoJHN5bWNvZGUkc3ltY29kZSpcKVsgCV1bIAldKiRhY19zeW1wcmZ4JHN5bXBhdCRvcHRfY3IkLyRzeW14ZnJtL3AnIgorCisgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIHBpcGUgd29ya3MgY29ycmVjdGx5LgorICBwaXBlX3dvcmtzPW5vCisKKyAgcm0gLWYgY29uZnRlc3QqCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKK2NoYXIgbm1fdGVzdF92YXI7Cit2b2lkIG5tX3Rlc3RfZnVuYygpe30KKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCitpbnQgbWFpbigpe25tX3Rlc3RfdmFyPSdhJztubV90ZXN0X2Z1bmMoKTtyZXR1cm4oMCk7fQorRU9GCisKKyAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB0aGVuCisgICAgIyBOb3cgdHJ5IHRvIGdyYWIgdGhlIHN5bWJvbHMuCisgICAgbmxpc3Q9Y29uZnRlc3Qubm0KKyAgICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiROTSBjb25mdGVzdC4kYWNfb2JqZXh0IFx8ICRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIFw+ICRubGlzdFwiIikgPiY1CisgIChldmFsICROTSBjb25mdGVzdC4kYWNfb2JqZXh0IFx8ICRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIFw+ICRubGlzdCkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB0ZXN0IC1zICIkbmxpc3QiOyB0aGVuCisgICAgICAjIFRyeSBzb3J0aW5nIGFuZCB1bmlxdWlmeWluZyB0aGUgb3V0cHV0LgorICAgICAgaWYgc29ydCAiJG5saXN0IiB8IHVuaXEgPiAiJG5saXN0IlQ7IHRoZW4KKwltdiAtZiAiJG5saXN0IlQgIiRubGlzdCIKKyAgICAgIGVsc2UKKwlybSAtZiAiJG5saXN0IlQKKyAgICAgIGZpCisKKyAgICAgICMgTWFrZSBzdXJlIHRoYXQgd2Ugc25hZ2dlZCBhbGwgdGhlIHN5bWJvbHMgd2UgbmVlZC4KKyAgICAgIGlmIGdyZXAgJyBubV90ZXN0X3ZhciQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKwlpZiBncmVwICcgbm1fdGVzdF9mdW5jJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorCSAgY2F0IDw8RU9GID4gY29uZnRlc3QuJGFjX2V4dAorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCitFT0YKKwkgICMgTm93IGdlbmVyYXRlIHRoZSBzeW1ib2wgZmlsZS4KKwkgIGV2YWwgIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCInIDwgIiRubGlzdCIgfCBncmVwIC12IG1haW4gPj4gY29uZnRlc3QuJGFjX2V4dCcKKworCSAgY2F0IDw8RU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKKyNpZiBkZWZpbmVkIChfX1NURENfXykgJiYgX19TVERDX18KKyMgZGVmaW5lIGx0X3B0cl90IHZvaWQgKgorI2Vsc2UKKyMgZGVmaW5lIGx0X3B0cl90IGNoYXIgKgorIyBkZWZpbmUgY29uc3QKKyNlbmRpZgorCisvKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gKi8KK2NvbnN0IHN0cnVjdCB7CisgIGNvbnN0IGNoYXIgKm5hbWU7CisgIGx0X3B0cl90IGFkZHJlc3M7Cit9CitsdF9wcmVsb2FkZWRfc3ltYm9sc1tdID0KK3sKK0VPRgorCSAgJFNFRCAicy9eJHN5bWNvZGUkc3ltY29kZSogXCguKlwpIFwoLipcKSQvICB7XCJcMlwiLCAobHRfcHRyX3QpIFwmXDJ9LC8iIDwgIiRubGlzdCIgfCBncmVwIC12IG1haW4gPj4gY29uZnRlc3QuJGFjX2V4dAorCSAgY2F0IDw8XEVPRiA+PiBjb25mdGVzdC4kYWNfZXh0CisgIHswLCAobHRfcHRyX3QpIDB9Cit9OworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorRU9GCisJICAjIE5vdyB0cnkgbGlua2luZyB0aGUgdHdvIGZpbGVzLgorCSAgbXYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdHN0bS4kYWNfb2JqZXh0CisJICBsdF9zYXZlX0xJQlM9IiRMSUJTIgorCSAgbHRfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisJICBMSUJTPSJjb25mdHN0bS4kYWNfb2JqZXh0IgorCSAgQ0ZMQUdTPSIkQ0ZMQUdTJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIgorCSAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKwkgICAgcGlwZV93b3Jrcz15ZXMKKwkgIGZpCisJICBMSUJTPSIkbHRfc2F2ZV9MSUJTIgorCSAgQ0ZMQUdTPSIkbHRfc2F2ZV9DRkxBR1MiCisJZWxzZQorCSAgZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF9mdW5jIGluICRubGlzdCIgPiY1CisJZmkKKyAgICAgIGVsc2UKKwllY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X3ZhciBpbiAkbmxpc3QiID4mNQorICAgICAgZmkKKyAgICBlbHNlCisgICAgICBlY2hvICJjYW5ub3QgcnVuICRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiA+JjUKKyAgICBmaQorICBlbHNlCisgICAgZWNobyAiJHByb2duYW1lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgZmkKKyAgcm0gLWYgY29uZnRlc3QqIGNvbmZ0c3QqCisKKyAgIyBEbyBub3QgdXNlIHRoZSBnbG9iYWxfc3ltYm9sX3BpcGUgdW5sZXNzIGl0IHdvcmtzLgorICBpZiB0ZXN0ICIkcGlwZV93b3JrcyIgPSB5ZXM7IHRoZW4KKyAgICBicmVhaworICBlbHNlCisgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0KKyAgZmkKK2RvbmUKKworZmkKKworaWYgdGVzdCAteiAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCisgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPQorZmkKK2lmIHRlc3QgLXogIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIjsgdGhlbgorICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGZhaWxlZCIgPiY1CitlY2hvICIke0VDSE9fVH1mYWlsZWQiID4mNjsgfQorZWxzZQorICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG9rIiA+JjUKK2VjaG8gIiR7RUNIT19UfW9rIiA+JjY7IH0KK2ZpCisKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBvYmpkaXIiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igb2JqZGlyLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9vYmpkaXIrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgcm0gLWYgLmxpYnMgMj4vZGV2L251bGwKK21rZGlyIC5saWJzIDI+L2Rldi9udWxsCitpZiB0ZXN0IC1kIC5saWJzOyB0aGVuCisgIGx0X2N2X29iamRpcj0ubGlicworZWxzZQorICAjIE1TLURPUyBkb2VzIG5vdCBhbGxvdyBmaWxlbmFtZXMgdGhhdCBiZWdpbiB3aXRoIGEgZG90LgorICBsdF9jdl9vYmpkaXI9X2xpYnMKK2ZpCitybWRpciAubGlicyAyPi9kZXYvbnVsbAorZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X29iamRpciIgPiY1CitlY2hvICIke0VDSE9fVH0kbHRfY3Zfb2JqZGlyIiA+JjY7IH0KK29iamRpcj0kbHRfY3Zfb2JqZGlyCisKKworCisKKworY2FzZSAkaG9zdF9vcyBpbgorYWl4MyopCisgICMgQUlYIHNvbWV0aW1lcyBoYXMgcHJvYmxlbXMgd2l0aCB0aGUgR0NDIGNvbGxlY3QyIHByb2dyYW0uICBGb3Igc29tZQorICAjIHJlYXNvbiwgaWYgd2Ugc2V0IHRoZSBDT0xMRUNUX05BTUVTIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgcHJvYmxlbXMKKyAgIyB2YW5pc2ggaW4gYSBwdWZmIG9mIHNtb2tlLgorICBpZiB0ZXN0ICJYJHtDT0xMRUNUX05BTUVTK3NldH0iICE9IFhzZXQ7IHRoZW4KKyAgICBDT0xMRUNUX05BTUVTPQorICAgIGV4cG9ydCBDT0xMRUNUX05BTUVTCisgIGZpCisgIDs7Citlc2FjCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0IGhlbHBzIHVzIGRvIHJvYnVzdCBxdW90aW5nLiAgSXQgYmFja3NsYXNoaWZpZXMKKyMgbWV0YWNoYXJhY3RlcnMgdGhhdCBhcmUgc3RpbGwgYWN0aXZlIHdpdGhpbiBkb3VibGUtcXVvdGVkIHN0cmluZ3MuCitYc2VkPSdzZWQgLWUgMXMvXlgvLycKK3NlZF9xdW90ZV9zdWJzdD0ncy9cKFtcXCJcXGAkXFxcXF1cKS9cXFwxL2cnCisKKyMgU2FtZSBhcyBhYm92ZSwgYnV0IGRvIG5vdCBxdW90ZSB2YXJpYWJsZSByZWZlcmVuY2VzLgorZG91YmxlX3F1b3RlX3N1YnN0PSdzL1woW1xcIlxcYFxcXFxdXCkvXFxcMS9nJworCisjIFNlZCBzdWJzdGl0dXRpb24gdG8gZGVsYXkgZXhwYW5zaW9uIG9mIGFuIGVzY2FwZWQgc2hlbGwgdmFyaWFibGUgaW4gYQorIyBkb3VibGVfcXVvdGVfc3Vic3QnZWQgc3RyaW5nLgorZGVsYXlfdmFyaWFibGVfc3Vic3Q9J3MvXFxcXFxcXFxcXFwkL1xcXFxcXCQvZycKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGF2b2lkIGFjY2lkZW50YWwgZ2xvYmJpbmcgaW4gZXZhbGVkIGV4cHJlc3Npb25zCitub19nbG9iX3N1YnN0PSdzL1wqL1xcXCovZycKKworIyBDb25zdGFudHM6CitybT0icm0gLWYiCisKKyMgR2xvYmFsIHZhcmlhYmxlczoKK2RlZmF1bHRfb2ZpbGU9bGlidG9vbAorY2FuX2J1aWxkX3NoYXJlZD15ZXMKKworIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgYC5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE1TVkMsCisjIHdoaWNoIG5lZWRzICcubGliJykuCitsaWJleHQ9YQorbHRtYWluPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCitvZmlsZT0iJGRlZmF1bHRfb2ZpbGUiCit3aXRoX2dudV9sZD0iJGx0X2N2X3Byb2dfZ251X2xkIgorCitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1hciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1hcjsgYWNfd29yZD0kMgoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX0FSK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRBUiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19BUj0iJEFSIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX0FSPSIke2FjX3Rvb2xfcHJlZml4fWFyIgorICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCitkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorQVI9JGFjX2N2X3Byb2dfQVIKK2lmIHRlc3QgLW4gIiRBUiI7IHRoZW4KKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQVIiID4mNQorZWNobyAiJHtFQ0hPX1R9JEFSIiA+JjY7IH0KK2Vsc2UKKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19BUiI7IHRoZW4KKyAgYWNfY3RfQVI9JEFSCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiYXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGFyOyBhY193b3JkPSQyCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQVIrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0FSIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0FSPSIkYWNfY3RfQVIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfQVI9ImFyIgorICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCitkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfQVI9JGFjX2N2X3Byb2dfYWNfY3RfQVIKK2lmIHRlc3QgLW4gIiRhY19jdF9BUiI7IHRoZW4KKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfQVIiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N0X0FSIiA+JjY7IH0KK2Vsc2UKKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfQVIiID0geDsgdGhlbgorICAgIEFSPSJmYWxzZSIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKK3dob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKK2NvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCit3aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCitjb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIEFSPSRhY19jdF9BUgorICBmaQorZWxzZQorICBBUj0iJGFjX2N2X3Byb2dfQVIiCitmaQorCitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1yYW5saWIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9cmFubGliOyBhY193b3JkPSQyCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfUkFOTElCK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgIGFjX2N2X3Byb2dfUkFOTElCPSIkUkFOTElCIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX1JBTkxJQj0iJHthY190b29sX3ByZWZpeH1yYW5saWIiCisgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKK2RvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitSQU5MSUI9JGFjX2N2X3Byb2dfUkFOTElCCitpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRSQU5MSUIiID4mNQorZWNobyAiJHtFQ0hPX1R9JFJBTkxJQiIgPiY2OyB9CitlbHNlCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfUkFOTElCIjsgdGhlbgorICBhY19jdF9SQU5MSUI9JFJBTkxJQgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInJhbmxpYiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgcmFubGliOyBhY193b3JkPSQyCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfUkFOTElCK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9SQU5MSUIiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCPSIkYWNfY3RfUkFOTElCIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X1JBTkxJQj0icmFubGliIgorICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCitkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfUkFOTElCPSRhY19jdl9wcm9nX2FjX2N0X1JBTkxJQgoraWYgdGVzdCAtbiAiJGFjX2N0X1JBTkxJQiI7IHRoZW4KKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfUkFOTElCIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdF9SQU5MSUIiID4mNjsgfQorZWxzZQorICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9SQU5MSUIiID0geDsgdGhlbgorICAgIFJBTkxJQj0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKK3dob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKK2NvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCit3aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCitjb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIFJBTkxJQj0kYWNfY3RfUkFOTElCCisgIGZpCitlbHNlCisgIFJBTkxJQj0iJGFjX2N2X3Byb2dfUkFOTElCIgorZmkKKworaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9c3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9c3RyaXA7IGFjX3dvcmQ9JDIKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19TVFJJUCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCisgIGFjX2N2X3Byb2dfU1RSSVA9IiRTVFJJUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19TVFJJUD0iJHthY190b29sX3ByZWZpeH1zdHJpcCIKKyAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK1NUUklQPSRhY19jdl9wcm9nX1NUUklQCitpZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJFNUUklQIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRTVFJJUCIgPiY2OyB9CitlbHNlCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfU1RSSVAiOyB0aGVuCisgIGFjX2N0X1NUUklQPSRTVFJJUAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInN0cmlwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBzdHJpcDsgYWNfd29yZD0kMgoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X1NUUklQK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9TVFJJUCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9TVFJJUD0iJGFjX2N0X1NUUklQIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X1NUUklQPSJzdHJpcCIKKyAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X1NUUklQPSRhY19jdl9wcm9nX2FjX2N0X1NUUklQCitpZiB0ZXN0IC1uICIkYWNfY3RfU1RSSVAiOyB0aGVuCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X1NUUklQIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdF9TVFJJUCIgPiY2OyB9CitlbHNlCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X1NUUklQIiA9IHg7IHRoZW4KKyAgICBTVFJJUD0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKK3dob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKK2NvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCit3aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCitjb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIFNUUklQPSRhY19jdF9TVFJJUAorICBmaQorZWxzZQorICBTVFJJUD0iJGFjX2N2X3Byb2dfU1RSSVAiCitmaQorCisKK29sZF9DQz0iJENDIgorb2xkX0NGTEFHUz0iJENGTEFHUyIKKworIyBTZXQgc2FuZSBkZWZhdWx0cyBmb3IgdmFyaW91cyB2YXJpYWJsZXMKK3Rlc3QgLXogIiRBUiIgJiYgQVI9YXIKK3Rlc3QgLXogIiRBUl9GTEFHUyIgJiYgQVJfRkxBR1M9Y3J1Cit0ZXN0IC16ICIkQVMiICYmIEFTPWFzCit0ZXN0IC16ICIkQ0MiICYmIENDPWNjCit0ZXN0IC16ICIkTFRDQyIgJiYgTFRDQz0kQ0MKK3Rlc3QgLXogIiRMVENGTEFHUyIgJiYgTFRDRkxBR1M9JENGTEFHUwordGVzdCAteiAiJERMTFRPT0wiICYmIERMTFRPT0w9ZGxsdG9vbAordGVzdCAteiAiJExEIiAmJiBMRD1sZAordGVzdCAteiAiJExOX1MiICYmIExOX1M9ImxuIC1zIgordGVzdCAteiAiJE1BR0lDX0NNRCIgJiYgTUFHSUNfQ01EPWZpbGUKK3Rlc3QgLXogIiROTSIgJiYgTk09bm0KK3Rlc3QgLXogIiRTRUQiICYmIFNFRD1zZWQKK3Rlc3QgLXogIiRPQkpEVU1QIiAmJiBPQkpEVU1QPW9iamR1bXAKK3Rlc3QgLXogIiRSQU5MSUIiICYmIFJBTkxJQj06Cit0ZXN0IC16ICIkU1RSSVAiICYmIFNUUklQPToKK3Rlc3QgLXogIiRhY19vYmpleHQiICYmIGFjX29iamV4dD1vCisKKyMgRGV0ZXJtaW5lIGNvbW1hbmRzIHRvIGNyZWF0ZSBvbGQtc3R5bGUgc3RhdGljIGFyY2hpdmVzLgorb2xkX2FyY2hpdmVfY21kcz0nJEFSICRBUl9GTEFHUyAkb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCitvbGRfcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNjQ0ICRvbGRsaWInCitvbGRfcG9zdHVuaW5zdGFsbF9jbWRzPQorCitpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICBjYXNlICRob3N0X29zIGluCisgIG9wZW5ic2QqKQorICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSIkb2xkX3Bvc3RpbnN0YWxsX2NtZHN+XCRSQU5MSUIgLXQgXCRvbGRsaWIiCisgICAgOzsKKyAgKikKKyAgICBvbGRfcG9zdGluc3RhbGxfY21kcz0iJG9sZF9wb3N0aW5zdGFsbF9jbWRzflwkUkFOTElCIFwkb2xkbGliIgorICAgIDs7CisgIGVzYWMKKyAgb2xkX2FyY2hpdmVfY21kcz0iJG9sZF9hcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRvbGRsaWIiCitmaQorCitmb3IgY2NfdGVtcCBpbiAkY29tcGlsZXIiIjsgZG8KKyAgY2FzZSAkY2NfdGVtcCBpbgorICAgIGNvbXBpbGUgfCAqW1xcL11jb21waWxlIHwgY2NhY2hlIHwgKltcXC9dY2NhY2hlICkgOzsKKyAgICBkaXN0Y2MgfCAqW1xcL11kaXN0Y2MgfCBwdXJpZnkgfCAqW1xcL11wdXJpZnkgKSA7OworICAgIFwtKikgOzsKKyAgICAqKSBicmVhazs7CisgIGVzYWMKK2RvbmUKK2NjX2Jhc2VuYW1lPWAkZWNobyAiWCRjY190ZW1wIiB8ICRYc2VkIC1lICdzJS4qLyUlJyAtZSAicyVeJGhvc3RfYWxpYXMtJSUiYAorCisKKyMgT25seSBwZXJmb3JtIHRoZSBjaGVjayBmb3IgZmlsZSwgaWYgdGhlIGNoZWNrIG1ldGhvZCByZXF1aXJlcyBpdAorY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KK2ZpbGVfbWFnaWMqKQorICBpZiB0ZXN0ICIkZmlsZV9tYWdpY19jbWQiID0gJyRNQUdJQ19DTUQnOyB0aGVuCisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICR7YWNfdG9vbF9wcmVmaXh9ZmlsZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAke2FjX3Rvb2xfcHJlZml4fWZpbGUuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X3BhdGhfTUFHSUNfQ01EK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhc2UgJE1BR0lDX0NNRCBpbgorW1xcLypdIHwgID86W1xcL10qKQorICBsdF9jdl9wYXRoX01BR0lDX0NNRD0iJE1BR0lDX0NNRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisqKQorICBsdF9zYXZlX01BR0lDX0NNRD0iJE1BR0lDX0NNRCIKKyAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgIGFjX2R1bW15PSIvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRIIgorICBmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKyAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgJGFjX2Rpci8ke2FjX3Rvb2xfcHJlZml4fWZpbGU7IHRoZW4KKyAgICAgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSIkYWNfZGlyLyR7YWNfdG9vbF9wcmVmaXh9ZmlsZSIKKyAgICAgIGlmIHRlc3QgLW4gIiRmaWxlX21hZ2ljX3Rlc3RfZmlsZSI7IHRoZW4KKwljYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgorCSJmaWxlX21hZ2ljICIqKQorCSAgZmlsZV9tYWdpY19yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICJmaWxlX21hZ2ljIFwoLipcKSJgCisJICBNQUdJQ19DTUQ9IiRsdF9jdl9wYXRoX01BR0lDX0NNRCIKKwkgIGlmIGV2YWwgJGZpbGVfbWFnaWNfY21kIFwkZmlsZV9tYWdpY190ZXN0X2ZpbGUgMj4gL2Rldi9udWxsIHwKKwkgICAgJEVHUkVQICIkZmlsZV9tYWdpY19yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgOgorCSAgZWxzZQorCSAgICBjYXQgPDxFT0YgMT4mMgorCisqKiogV2FybmluZzogdGhlIGNvbW1hbmQgbGlidG9vbCB1c2VzIHRvIGRldGVjdCBzaGFyZWQgbGlicmFyaWVzLAorKioqICRmaWxlX21hZ2ljX2NtZCwgcHJvZHVjZXMgb3V0cHV0IHRoYXQgbGlidG9vbCBjYW5ub3QgcmVjb2duaXplLgorKioqIFRoZSByZXN1bHQgaXMgdGhhdCBsaWJ0b29sIG1heSBmYWlsIHRvIHJlY29nbml6ZSBzaGFyZWQgbGlicmFyaWVzCisqKiogYXMgc3VjaC4gIFRoaXMgd2lsbCBhZmZlY3QgdGhlIGNyZWF0aW9uIG9mIGxpYnRvb2wgbGlicmFyaWVzIHRoYXQKKyoqKiBkZXBlbmQgb24gc2hhcmVkIGxpYnJhcmllcywgYnV0IHByb2dyYW1zIGxpbmtlZCB3aXRoIHN1Y2ggbGlidG9vbAorKioqIGxpYnJhcmllcyB3aWxsIHdvcmsgcmVnYXJkbGVzcyBvZiB0aGlzIHByb2JsZW0uICBOZXZlcnRoZWxlc3MsIHlvdQorKioqIG1heSB3YW50IHRvIHJlcG9ydCB0aGUgcHJvYmxlbSB0byB5b3VyIHN5c3RlbSBtYW5hZ2VyIGFuZC9vciB0bworKioqIGJ1Zy1saWJ0b29sQGdudS5vcmcKKworRU9GCisJICBmaSA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBicmVhaworICAgIGZpCisgIGRvbmUKKyAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgIE1BR0lDX0NNRD0iJGx0X3NhdmVfTUFHSUNfQ01EIgorICA7OworZXNhYworZmkKKworTUFHSUNfQ01EPSIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiCitpZiB0ZXN0IC1uICIkTUFHSUNfQ01EIjsgdGhlbgorICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRNQUdJQ19DTUQiID4mNQorZWNobyAiJHtFQ0hPX1R9JE1BR0lDX0NNRCIgPiY2OyB9CitlbHNlCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorZmkKKworaWYgdGVzdCAteiAiJGx0X2N2X3BhdGhfTUFHSUNfQ01EIjsgdGhlbgorICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGZpbGUiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZmlsZS4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3ZfcGF0aF9NQUdJQ19DTUQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2FzZSAkTUFHSUNfQ01EIGluCitbXFwvKl0gfCAgPzpbXFwvXSopCisgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSIkTUFHSUNfQ01EIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyopCisgIGx0X3NhdmVfTUFHSUNfQ01EPSIkTUFHSUNfQ01EIgorICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgYWNfZHVtbXk9Ii91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgiCisgIGZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbworICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgaWYgdGVzdCAtZiAkYWNfZGlyL2ZpbGU7IHRoZW4KKyAgICAgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSIkYWNfZGlyL2ZpbGUiCisgICAgICBpZiB0ZXN0IC1uICIkZmlsZV9tYWdpY190ZXN0X2ZpbGUiOyB0aGVuCisJY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KKwkiZmlsZV9tYWdpYyAiKikKKwkgIGZpbGVfbWFnaWNfcmVnZXg9YGV4cHIgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgOiAiZmlsZV9tYWdpYyBcKC4qXCkiYAorCSAgTUFHSUNfQ01EPSIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiCisJICBpZiBldmFsICRmaWxlX21hZ2ljX2NtZCBcJGZpbGVfbWFnaWNfdGVzdF9maWxlIDI+IC9kZXYvbnVsbCB8CisJICAgICRFR1JFUCAiJGZpbGVfbWFnaWNfcmVnZXgiID4gL2Rldi9udWxsOyB0aGVuCisJICAgIDoKKwkgIGVsc2UKKwkgICAgY2F0IDw8RU9GIDE+JjIKKworKioqIFdhcm5pbmc6IHRoZSBjb21tYW5kIGxpYnRvb2wgdXNlcyB0byBkZXRlY3Qgc2hhcmVkIGxpYnJhcmllcywKKyoqKiAkZmlsZV9tYWdpY19jbWQsIHByb2R1Y2VzIG91dHB1dCB0aGF0IGxpYnRvb2wgY2Fubm90IHJlY29nbml6ZS4KKyoqKiBUaGUgcmVzdWx0IGlzIHRoYXQgbGlidG9vbCBtYXkgZmFpbCB0byByZWNvZ25pemUgc2hhcmVkIGxpYnJhcmllcworKioqIGFzIHN1Y2guICBUaGlzIHdpbGwgYWZmZWN0IHRoZSBjcmVhdGlvbiBvZiBsaWJ0b29sIGxpYnJhcmllcyB0aGF0CisqKiogZGVwZW5kIG9uIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dCBwcm9ncmFtcyBsaW5rZWQgd2l0aCBzdWNoIGxpYnRvb2wKKyoqKiBsaWJyYXJpZXMgd2lsbCB3b3JrIHJlZ2FyZGxlc3Mgb2YgdGhpcyBwcm9ibGVtLiAgTmV2ZXJ0aGVsZXNzLCB5b3UKKyoqKiBtYXkgd2FudCB0byByZXBvcnQgdGhlIHByb2JsZW0gdG8geW91ciBzeXN0ZW0gbWFuYWdlciBhbmQvb3IgdG8KKyoqKiBidWctbGlidG9vbEBnbnUub3JnCisKK0VPRgorCSAgZmkgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgYnJlYWsKKyAgICBmaQorICBkb25lCisgIElGUz0iJGx0X3NhdmVfaWZzIgorICBNQUdJQ19DTUQ9IiRsdF9zYXZlX01BR0lDX0NNRCIKKyAgOzsKK2VzYWMKK2ZpCisKK01BR0lDX0NNRD0iJGx0X2N2X3BhdGhfTUFHSUNfQ01EIgoraWYgdGVzdCAtbiAiJE1BR0lDX0NNRCI7IHRoZW4KKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkTUFHSUNfQ01EIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRNQUdJQ19DTUQiID4mNjsgfQorZWxzZQorICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KK2ZpCisKKyAgZWxzZQorICAgIE1BR0lDX0NNRD06CisgIGZpCitmaQorCisgIGZpCisgIDs7Citlc2FjCisKK2VuYWJsZV9kbG9wZW49bm8KK2VuYWJsZV93aW4zMl9kbGw9bm8KKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxpYnRvb2wtbG9jayB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9saWJ0b29sX2xvY2src2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSRlbmFibGVfbGlidG9vbF9sb2NrOworZmkKKwordGVzdCAieCRlbmFibGVfbGlidG9vbF9sb2NrIiAhPSB4bm8gJiYgZW5hYmxlX2xpYnRvb2xfbG9jaz15ZXMKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXBpYyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfcGljK3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9JHdpdGhfcGljOyBwaWNfbW9kZT0iJHdpdGh2YWwiCitlbHNlCisgIHBpY19tb2RlPWRlZmF1bHQKK2ZpCisKK3Rlc3QgLXogIiRwaWNfbW9kZSIgJiYgcGljX21vZGU9ZGVmYXVsdAorCisjIFVzZSBDIGZvciB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGluIHRoZSBsaWJ0b29sIHNjcmlwdAordGFnbmFtZT0KK2x0X3NhdmVfQ0M9IiRDQyIKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgQyB0ZXN0IHNvdXJjZXMuCithY19leHQ9YworCisjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgQyB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworb2JqZXh0PSRvYmpleHQKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKK2x0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iaW50IHNvbWVfdmFyaWFibGUgPSAwO1xuIgorCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cworbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSdpbnQgbWFpbigpe3JldHVybigwKTt9XG4nCisKKworIyBJZiBubyBDIGNvbXBpbGVyIHdhcyBzcGVjaWZpZWQsIHVzZSBDQy4KK0xUQ0M9JHtMVENDLSIkQ0MifQorCisjIElmIG5vIEMgY29tcGlsZXIgZmxhZ3Mgd2VyZSBzcGVjaWZpZWQsIHVzZSBDRkxBR1MuCitMVENGTEFHUz0ke0xUQ0ZMQUdTLSIkQ0ZMQUdTIn0KKworIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KK2NvbXBpbGVyPSRDQworCisKKyMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCithY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKK3ByaW50ZiAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKK2V2YWwgIiRhY19jb21waWxlIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgorX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAorJHJtIGNvbmZ0ZXN0KgorCithY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKK3ByaW50ZiAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKK2V2YWwgIiRhY19saW5rIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgorX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKKyRybSBjb25mdGVzdCoKKworCisKK2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPQorCitpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0nIC1mbm8tYnVpbHRpbicKKworCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucz1ubworICBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgIHByaW50ZiAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgICBsdF9jb21waWxlcl9mbGFnPSItZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zIgorICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKKyAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCisgICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCisgICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgorICAgIyBUaGUgb3B0aW9uIGlzIHJlZmVyZW5jZWQgdmlhIGEgdmFyaWFibGUgdG8gYXZvaWQgY29uZnVzaW5nIHNlZC4KKyAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAorICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAorICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZToxOTgyNDogJGx0X2NvbXBpbGVcIiIgPiY1KQorICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKKyAgIGFjX3N0YXR1cz0kPworICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZToxOTgyODogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zICIkYWNfb3V0ZmlsZSI7IHRoZW4KKyAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzIG90aGVyIHRoYW4gdGhlIHVzdWFsIG91dHB1dC4KKyAgICAgJGVjaG8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPmNvbmZ0ZXN0LmV4cAorICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKKyAgICAgaWYgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVyMiB8fCBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zPXllcworICAgICBmaQorICAgZmkKKyAgICRybSBjb25mdGVzdCoKKworZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucyIgPiY2OyB9CisKK2lmIHRlc3QgeCIkbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMiID0geHllczsgdGhlbgorICAgIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPSIkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyIKK2Vsc2UKKyAgICA6CitmaQorCitmaQorCitsdF9wcm9nX2NvbXBpbGVyX3dsPQorbHRfcHJvZ19jb21waWxlcl9waWM9CitsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0KKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAkRUNIT19DIiA+JjY7IH0KKworICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1zdGF0aWMnCisKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXgqKQorICAgICAgIyBBbGwgQUlYIGNvZGUgaXMgUElDLgorICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgorCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYW1pZ2FvcyopCisgICAgICAjIEZJWE1FOiB3ZSBuZWVkIGF0IGxlYXN0IDY4MDIwIGNvZGUgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcywgYnV0CisgICAgICAjIGFkZGluZyB0aGUgYC1tNjgwMjAnIGZsYWcgdG8gR0NDIHByZXZlbnRzIGJ1aWxkaW5nIGFueXRoaW5nIGJldHRlciwKKyAgICAgICMgbGlrZSBgLW02ODA0MCcuCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLW02ODAyMCAtcmVzaWRlbnQzMiAtbWFsd2F5cy1yZXN0b3JlLWE0JworICAgICAgOzsKKworICAgIGJlb3MqIHwgY3lnd2luKiB8IGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCogfCBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgT1Nlcy4KKyAgICAgIDs7CisKKyAgICBtaW5ndyogfCBwdzMyKiB8IG9zMiopCisgICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisgICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1ERExMX0VYUE9SVCcKKyAgICAgIDs7CisKKyAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQorICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcworICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mbm8tY29tbW9uJworICAgICAgOzsKKworICAgIGludGVyaXgzKikKKyAgICAgICMgSW50ZXJpeCAzLnggZ2NjIC1mcGljLy1mUElDIG9wdGlvbnMgZ2VuZXJhdGUgYnJva2VuIGNvZGUuCisgICAgICAjIEluc3RlYWQsIHdlIHJlbG9jYXRlIHNoYXJlZCBsaWJyYXJpZXMgYXQgcnVudGltZS4KKyAgICAgIDs7CisKKyAgICBtc2Rvc2RqZ3BwKikKKyAgICAgICMgSnVzdCBiZWNhdXNlIHdlIHVzZSBHQ0MgZG9lc24ndCBtZWFuIHdlIHN1ZGRlbmx5IGdldCBzaGFyZWQgbGlicmFyaWVzCisgICAgICAjIG9uIHN5c3RlbXMgdGhhdCBkb24ndCBzdXBwb3J0IHRoZW0uCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQ9bm8KKyAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KKyAgICAgIDs7CisKKyAgICBzeXN2NCpNUCopCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisJbHRfcHJvZ19jb21waWxlcl9waWM9LUtjb25mb3JtX3BpYworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBocHV4KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciBJQTY0IEhQLVVYIGFuZCA2NC1iaXQgSFAtVVgsIGJ1dAorICAgICAgIyBub3QgZm9yIFBBIEhQLVVYLgorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIGhwcGEqNjQqfGlhNjQqKQorCSMgK1ogdGhlIGRlZmF1bHQKKwk7OworICAgICAgKikKKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMnCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICAqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mUElDJworICAgICAgOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICAjIFBPUlRNRSBDaGVjayBmb3IgZmxhZyB0byBwYXNzIGxpbmtlciBmbGFncyB0aHJvdWdoIHRoZSBzeXN0ZW0gY29tcGlsZXIuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeCopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgorCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgIGVsc2UKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLWJuc28gLWJJOi9saWIvc3lzY2FsbHMuZXhwJworICAgICAgZmkKKyAgICAgIDs7CisgICAgICBkYXJ3aW4qKQorICAgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCisgICAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKKyAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgeGxjKikKKyAgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctcW5vY29tbW9uJworICAgICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKyAgICAgICAgIDs7CisgICAgICAgZXNhYworICAgICAgIDs7CisKKyAgICBtaW5ndyogfCBwdzMyKiB8IG9zMiopCisgICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisgICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1ERExMX0VYUE9SVCcKKyAgICAgIDs7CisKKyAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSUE2NCBIUC1VWCBhbmQgNjQtYml0IEhQLVVYLCBidXQKKyAgICAgICMgbm90IGZvciBQQSBIUC1VWC4KKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBocHBhKjY0KnxpYTY0KikKKwkjICtaIHRoZSBkZWZhdWx0CisJOzsKKyAgICAgICopCisJbHRfcHJvZ19jb21waWxlcl9waWM9JytaJworCTs7CisgICAgICBlc2FjCisgICAgICAjIElzIHRoZXJlIGEgYmV0dGVyIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIHRoYXQgd29ya3Mgd2l0aCB0aGUgYnVuZGxlZCBDQz8KKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPScke3dsfS1hICR7d2x9YXJjaGl2ZScKKyAgICAgIDs7CisKKyAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKyAgICAgICMgUElDICh3aXRoIC1LUElDKSBpcyB0aGUgZGVmYXVsdC4KKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctbm9uX3NoYXJlZCcKKyAgICAgIDs7CisKKyAgICBuZXdzb3M2KQorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgIGxpbnV4KikKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICBpY2MqIHwgZWNjKikKKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworCWx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLXN0YXRpYycKKyAgICAgICAgOzsKKyAgICAgIHBnY2MqIHwgcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqKQorICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVycyAoKm5vdCogdGhlIFBlbnRpdW0gZ2NjIGNvbXBpbGVyLAorCSMgd2hpY2ggbG9va3MgdG8gYmUgYSBkZWFkIHByb2plY3QpCisJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZwaWMnCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgICA7OworICAgICAgY2NjKikKKyAgICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKyAgICAgICAgIyBBbGwgQWxwaGEgY29kZSBpcyBQSUMuCisgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctbm9uX3NoYXJlZCcKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworICAgICAgIyBBbGwgT1NGLzEgY29kZSBpcyBQSUMuCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLW5vbl9zaGFyZWQnCisgICAgICA7OworCisgICAgc29sYXJpcyopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgZjc3KiB8IGY5MCogfCBmOTUqKQorCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1Rb3B0aW9uIGxkICc7OworICAgICAgKikKKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJzs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgc3Vub3M0KikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1Rb3B0aW9uIGxkICcKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctUElDJworICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgc3lzdjQqTVAqKQorICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYyA7dGhlbgorCWx0X3Byb2dfY29tcGlsZXJfcGljPSctS2NvbmZvcm1fcGljJworCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgc3lzdjUqIHwgdW5peHdhcmUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IE9wZW5VTklYKikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgdW5pY29zKikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQ9bm8KKyAgICAgIDs7CisKKyAgICB1dHM0KikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctcGljJworICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgICopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQ9bm8KKyAgICAgIDs7CisgICAgZXNhYworICBmaQorCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY1CitlY2hvICIke0VDSE9fVH0kbHRfcHJvZ19jb21waWxlcl9waWMiID4mNjsgfQorCisjCisjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCisjCitpZiB0ZXN0IC1uICIkbHRfcHJvZ19jb21waWxlcl9waWMiOyB0aGVuCisKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmICRjb21waWxlciBQSUMgZmxhZyAkbHRfcHJvZ19jb21waWxlcl9waWMgd29ya3MiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgUElDIGZsYWcgJGx0X3Byb2dfY29tcGlsZXJfcGljIHdvcmtzLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9wcm9nX2NvbXBpbGVyX3BpY193b3JrcytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBsdF9wcm9nX2NvbXBpbGVyX3BpY193b3Jrcz1ubworICBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgIHByaW50ZiAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgICBsdF9jb21waWxlcl9mbGFnPSIkbHRfcHJvZ19jb21waWxlcl9waWMgLURQSUMiCisgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgorICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KKyAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKKyAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCisgICAjIFRoZSBvcHRpb24gaXMgcmVmZXJlbmNlZCB2aWEgYSB2YXJpYWJsZSB0byBhdm9pZCBjb25mdXNpbmcgc2VkLgorICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCisgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCisgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjIwMDkyOiAkbHRfY29tcGlsZVwiIiA+JjUpCisgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQorICAgYWNfc3RhdHVzPSQ/CisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOjIwMDk2OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgIiRhY19vdXRmaWxlIjsgdGhlbgorICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3Mgb3RoZXIgdGhhbiB0aGUgdXN1YWwgb3V0cHV0LgorICAgICAkZWNobyAiWCRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+Y29uZnRlc3QuZXhwCisgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgorICAgICBpZiB0ZXN0ICEgLXMgY29uZnRlc3QuZXIyIHx8IGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfd29ya3M9eWVzCisgICAgIGZpCisgICBmaQorICAgJHJtIGNvbmZ0ZXN0KgorCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfcHJvZ19jb21waWxlcl9waWNfd29ya3MiID4mNQorZWNobyAiJHtFQ0hPX1R9JGx0X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzIiA+JjY7IH0KKworaWYgdGVzdCB4IiRsdF9wcm9nX2NvbXBpbGVyX3BpY193b3JrcyIgPSB4eWVzOyB0aGVuCisgICAgY2FzZSAkbHRfcHJvZ19jb21waWxlcl9waWMgaW4KKyAgICAgIiIgfCAiICIqKSA7OworICAgICAqKSBsdF9wcm9nX2NvbXBpbGVyX3BpYz0iICRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgOzsKKyAgICAgZXNhYworZWxzZQorICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPQorICAgICBsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQ9bm8KK2ZpCisKK2ZpCitjYXNlICRob3N0X29zIGluCisgICMgRm9yIHBsYXRmb3JtcyB3aGljaCBkbyBub3Qgc3VwcG9ydCBQSUMsIC1EUElDIGlzIG1lYW5pbmdsZXNzOgorICAqZGpncHAqKQorICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPQorICAgIDs7CisgICopCisgICAgbHRfcHJvZ19jb21waWxlcl9waWM9IiRsdF9wcm9nX2NvbXBpbGVyX3BpYyAtRFBJQyIKKyAgICA7OworZXNhYworCisjCisjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCisjCit3bD0kbHRfcHJvZ19jb21waWxlcl93bCBldmFsIGx0X3RtcF9zdGF0aWNfZmxhZz1cIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY1wiCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X3RtcF9zdGF0aWNfZmxhZyB3b3JrcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3JrcytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrcz1ubworICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKyAgIExERkxBR1M9IiRMREZMQUdTICRsdF90bXBfc3RhdGljX2ZsYWciCisgICBwcmludGYgIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgaWYgKGV2YWwgJGFjX2xpbmsgMj5jb25mdGVzdC5lcnIpICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgICAgICMgVGhlIGxpbmtlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKKyAgICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgICAjIEFwcGVuZCBhbnkgZXJyb3JzIHRvIHRoZSBjb25maWcubG9nLgorICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQorICAgICAgICRlY2hvICJYJF9sdF9saW5rZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+IGNvbmZ0ZXN0LmV4cAorICAgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgorICAgICAgIGlmIGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrcz15ZXMKKyAgICAgICBmaQorICAgICBlbHNlCisgICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3M9eWVzCisgICAgIGZpCisgICBmaQorICAgJHJtIGNvbmZ0ZXN0KgorICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKworZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3JrcyIgPiY2OyB9CisKK2lmIHRlc3QgeCIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MiID0geHllczsgdGhlbgorICAgIDoKK2Vsc2UKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0KK2ZpCisKKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfY19vK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vPW5vCisgICAkcm0gLXIgY29uZnRlc3QgMj4vZGV2L251bGwKKyAgIG1rZGlyIGNvbmZ0ZXN0CisgICBjZCBjb25mdGVzdAorICAgbWtkaXIgb3V0CisgICBwcmludGYgIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorCisgICBsdF9jb21waWxlcl9mbGFnPSItbyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQiCisgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgorICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KKyAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKKyAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCisgICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKKyAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKKyAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCisgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6MjAxOTY6ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQorICAgYWNfc3RhdHVzPSQ/CisgICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZToyMDIwMDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zIG91dC9jb25mdGVzdDIuJGFjX29iamV4dAorICAgdGhlbgorICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKKyAgICAgJGVjaG8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCisgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBvdXQvY29uZnRlc3QuZXJyID5vdXQvY29uZnRlc3QuZXIyCisgICAgIGlmIHRlc3QgISAtcyBvdXQvY29uZnRlc3QuZXIyIHx8IGRpZmYgb3V0L2NvbmZ0ZXN0LmV4cCBvdXQvY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz15ZXMKKyAgICAgZmkKKyAgIGZpCisgICBjaG1vZCB1K3cgLiAyPiY1CisgICAkcm0gY29uZnRlc3QqCisgICAjIFNHSSBDKysgY29tcGlsZXIgd2lsbCBjcmVhdGUgZGlyZWN0b3J5IG91dC9paV9maWxlcy8gZm9yCisgICAjIHRlbXBsYXRlIGluc3RhbnRpYXRpb24KKyAgIHRlc3QgLWQgb3V0L2lpX2ZpbGVzICYmICRybSBvdXQvaWlfZmlsZXMvKiAmJiBybWRpciBvdXQvaWlfZmlsZXMKKyAgICRybSBvdXQvKiAmJiBybWRpciBvdXQKKyAgIGNkIC4uCisgICBybWRpciBjb25mdGVzdAorICAgJHJtIGNvbmZ0ZXN0KgorCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID4mNQorZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiA+JjY7IH0KKworCitoYXJkX2xpbmtzPSJub3R0ZXN0ZWQiCitpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID0gbm8gJiYgdGVzdCAiJG5lZWRfbG9ja3MiICE9IG5vOyB0aGVuCisgICMgZG8gbm90IG92ZXJ3cml0ZSB0aGUgdmFsdWUgb2YgbmVlZF9sb2NrcyBwcm92aWRlZCBieSB0aGUgdXNlcgorICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3MiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3MuLi4gJEVDSE9fQyIgPiY2OyB9CisgIGhhcmRfbGlua3M9eWVzCisgICRybSBjb25mdGVzdCoKKyAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KKyAgdG91Y2ggY29uZnRlc3QuYQorICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4mNSB8fCBoYXJkX2xpbmtzPW5vCisgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGhhcmRfbGlua3MiID4mNQorZWNobyAiJHtFQ0hPX1R9JGhhcmRfbGlua3MiID4mNjsgfQorICBpZiB0ZXN0ICIkaGFyZF9saW5rcyIgPSBubzsgdGhlbgorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IFxgJENDJyBkb2VzIG5vdCBzdXBwb3J0IFxgLWMgLW8nLCBzbyBcYG1ha2UgLWonIG1heSBiZSB1bnNhZmUiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiBcYCRDQycgZG9lcyBub3Qgc3VwcG9ydCBcYC1jIC1vJywgc28gXGBtYWtlIC1qJyBtYXkgYmUgdW5zYWZlIiA+JjI7fQorICAgIG5lZWRfbG9ja3M9d2FybgorICBmaQorZWxzZQorICBuZWVkX2xvY2tzPW5vCitmaQorCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuLi4gJEVDSE9fQyIgPiY2OyB9CisKKyAgcnVucGF0aF92YXI9CisgIGFsbG93X3VuZGVmaW5lZF9mbGFnPQorICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPW5vCisgIGFyY2hpdmVfY21kcz0KKyAgYXJjaGl2ZV9leHBzeW1fY21kcz0KKyAgb2xkX2FyY2hpdmVfRnJvbV9uZXdfY21kcz0KKyAgb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHM9CisgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0KKyAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9CisgIHRocmVhZF9zYWZlX2ZsYWdfc3BlYz0KKyAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KKyAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0KKyAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0KKyAgaGFyZGNvZGVfZGlyZWN0PW5vCisgIGhhcmRjb2RlX21pbnVzX0w9bm8KKyAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj11bnN1cHBvcnRlZAorICBsaW5rX2FsbF9kZXBsaWJzPXVua25vd24KKyAgaGFyZGNvZGVfYXV0b21hdGljPW5vCisgIG1vZHVsZV9jbWRzPQorICBtb2R1bGVfZXhwc3ltX2NtZHM9CisgIGFsd2F5c19leHBvcnRfc3ltYm9scz1ubworICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgICMgaW5jbHVkZV9leHBzeW1zIHNob3VsZCBiZSBhIGxpc3Qgb2Ygc3BhY2Utc2VwYXJhdGVkIHN5bWJvbHMgdG8gYmUgKmFsd2F5cyoKKyAgIyBpbmNsdWRlZCBpbiB0aGUgc3ltYm9sIGxpc3QKKyAgaW5jbHVkZV9leHBzeW1zPQorICAjIGV4Y2x1ZGVfZXhwc3ltcyBjYW4gYmUgYW4gZXh0ZW5kZWQgcmVnZXhwIG9mIHN5bWJvbHMgdG8gZXhjbHVkZQorICAjIGl0IHdpbGwgYmUgd3JhcHBlZCBieSBgICgnIGFuZCBgKSQnLCBzbyBvbmUgbXVzdCBub3QgbWF0Y2ggYmVnaW5uaW5nIG9yCisgICMgZW5kIG9mIGxpbmUuICBFeGFtcGxlOiBgYXxiY3wuKmQuKicgd2lsbCBleGNsdWRlIHRoZSBzeW1ib2xzIGBhJyBhbmQgYGJjJywKKyAgIyBhcyB3ZWxsIGFzIGFueSBzeW1ib2wgdGhhdCBjb250YWlucyBgZCcuCisgIGV4Y2x1ZGVfZXhwc3ltcz0iX0dMT0JBTF9PRkZTRVRfVEFCTEVfIgorICAjIEFsdGhvdWdoIF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyBpcyBhIHZhbGlkIHN5bWJvbCBDIG5hbWUsIG1vc3QgYS5vdXQKKyAgIyBwbGF0Zm9ybXMgKGFiKXVzZSBpdCBpbiBQSUMgY29kZSwgYnV0IHRoZWlyIGxpbmtlcnMgZ2V0IGNvbmZ1c2VkIGlmCisgICMgdGhlIHN5bWJvbCBpcyBleHBsaWNpdGx5IHJlZmVyZW5jZWQuICBTaW5jZSBwb3J0YWJsZSBjb2RlIGNhbm5vdAorICAjIHJlbHkgb24gdGhpcyBzeW1ib2wgbmFtZSwgaXQncyBwcm9iYWJseSBmaW5lIHRvIG5ldmVyIGluY2x1ZGUgaXQgaW4KKyAgIyBwcmVsb2FkZWQgc3ltYm9sIHRhYmxlcy4KKyAgZXh0cmFjdF9leHBzeW1zX2NtZHM9CisgICMgSnVzdCBiZWluZyBwYXJhbm9pZCBhYm91dCBlbnN1cmluZyB0aGF0IGNjX2Jhc2VuYW1lIGlzIHNldC4KKyAgZm9yIGNjX3RlbXAgaW4gJGNvbXBpbGVyIiI7IGRvCisgIGNhc2UgJGNjX3RlbXAgaW4KKyAgICBjb21waWxlIHwgKltcXC9dY29tcGlsZSB8IGNjYWNoZSB8ICpbXFwvXWNjYWNoZSApIDs7CisgICAgZGlzdGNjIHwgKltcXC9dZGlzdGNjIHwgcHVyaWZ5IHwgKltcXC9dcHVyaWZ5ICkgOzsKKyAgICBcLSopIDs7CisgICAgKikgYnJlYWs7OworICBlc2FjCitkb25lCitjY19iYXNlbmFtZT1gJGVjaG8gIlgkY2NfdGVtcCIgfCAkWHNlZCAtZSAncyUuKi8lJScgLWUgInMlXiRob3N0X2FsaWFzLSUlImAKKworICBjYXNlICRob3N0X29zIGluCisgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKyAgICAjIEZJWE1FOiB0aGUgTVNWQysrIHBvcnQgaGFzbid0IGJlZW4gdGVzdGVkIGluIGEgbG9vb29uZyB0aW1lCisgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKKyAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgorICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorICAgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICBmaQorICAgIDs7CisgIGludGVyaXgqKQorICAgICMgd2UganVzdCBob3BlL2Fzc3VtZSB0aGlzIGlzIGdjYyBhbmQgbm90IGM4OSAoPSBNU1ZDKyspCisgICAgd2l0aF9nbnVfbGQ9eWVzCisgICAgOzsKKyAgb3BlbmJzZCopCisgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICA7OworICBlc2FjCisKKyAgbGRfc2hsaWJzPXllcworICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgICAgIyBJZiBhcmNoaXZlX2NtZHMgcnVucyBMRCwgbm90IENDLCB3bGFyYyBzaG91bGQgYmUgZW1wdHkKKyAgICB3bGFyYz0nJHt3bH0nCisKKyAgICAjIFNldCBzb21lIGRlZmF1bHRzIGZvciBHTlUgbGQgd2l0aCBzaGFyZWQgbGlicmFyeSBzdXBwb3J0LiBUaGVzZQorICAgICMgYXJlIHJlc2V0IGxhdGVyIGlmIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG5vdCBzdXBwb3J0ZWQuIFB1dHRpbmcgdGhlbQorICAgICMgaGVyZSBhbGxvd3MgdGhlbSB0byBiZSBvdmVycmlkZGVuIGlmIG5lY2Vzc2FyeS4KKyAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCisgICAgIyBhbmNpZW50IEdOVSBsZCBkaWRuJ3Qgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUgZXQuIGFsLgorICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJ25vLXdob2xlLWFyY2hpdmUnID4gL2Rldi9udWxsOyB0aGVuCisJd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9IiR3bGFyYyInLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICciJHdsYXJjIictLW5vLXdob2xlLWFyY2hpdmUnCisgICAgICBlbHNlCisgIAl3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0KKyAgICBmaQorICAgIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz1ubworICAgIGNhc2UgYCRMRCAtdiAyPi9kZXYvbnVsbGAgaW4KKyAgICAgICpcIFswMV0uKiB8ICpcIDIuWzAtOV0uKiB8ICpcIDIuMTAuKikgOzsgIyBjYXRjaCB2ZXJzaW9ucyA8IDIuMTEKKyAgICAgICpcIDIuMTEuOTMuMC4yXCAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7ICMgUkg3LjMgLi4uCisgICAgICAqXCAyLjExLjkyLjAuMTJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBNYW5kcmFrZSA4LjIgLi4uCisgICAgICAqXCAyLjExLiopIDs7ICMgb3RoZXIgMi4xMSB2ZXJzaW9ucworICAgICAgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OworICAgIGVzYWMKKworICAgICMgU2VlIGlmIEdOVSBsZCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBhaXgzKiB8IGFpeDQqIHwgYWl4NSopCisgICAgICAjIE9uIEFJWC9QUEMsIHRoZSBHTlUgbGlua2VyIGlzIHZlcnkgYnJva2VuCisgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQ7IHRoZW4KKwlsZF9zaGxpYnM9bm8KKwljYXQgPDxFT0YgMT4mMgorCisqKiogV2FybmluZzogdGhlIEdOVSBsaW5rZXIsIGF0IGxlYXN0IHVwIHRvIHJlbGVhc2UgMi45LjEsIGlzIHJlcG9ydGVkCisqKiogdG8gYmUgdW5hYmxlIHRvIHJlbGlhYmx5IGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIEFJWC4KKyoqKiBUaGVyZWZvcmUsIGxpYnRvb2wgaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIElmIHlvdQorKioqIHJlYWxseSBjYXJlIGZvciBzaGFyZWQgbGlicmFyaWVzLCB5b3UgbWF5IHdhbnQgdG8gbW9kaWZ5IHlvdXIgUEFUSAorKioqIHNvIHRoYXQgYSBub24tR05VIGxpbmtlciBpcyBmb3VuZCwgYW5kIHRoZW4gcmVzdGFydC4KKworRU9GCisgICAgICBmaQorICAgICAgOzsKKworICAgIGFtaWdhb3MqKQorICAgICAgYXJjaGl2ZV9jbWRzPSckcm0gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBOQU1FICRsaWJuYW1lIiA+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgTElCUkFSWV9JRCAxIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIFZFUlNJT04gJG1ham9yIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIFJFVklTSU9OICRyZXZpc2lvbiIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kQVIgJEFSX0ZMQUdTICRsaWIgJGxpYm9ianN+JFJBTkxJQiAkbGlifihjZCAkb3V0cHV0X29iamRpciAmJiBhMml4bGlicmFyeSAtMzIpJworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKworICAgICAgIyBTYW11ZWwgQS4gRmFsdm8gSUkgPGtjNXRqYUBkb2xwaGluLm9wZW5wcm9qZWN0cy5uZXQ+IHJlcG9ydHMKKyAgICAgICMgdGhhdCB0aGUgc2VtYW50aWNzIG9mIGR5bmFtaWMgbGlicmFyaWVzIG9uIEFtaWdhT1MsIGF0IGxlYXN0IHVwCisgICAgICAjIHRvIHZlcnNpb24gNCwgaXMgdG8gc2hhcmUgZGF0YSBhbW9uZyBtdWx0aXBsZSBwcm9ncmFtcyBsaW5rZWQKKyAgICAgICMgd2l0aCB0aGUgc2FtZSBkeW5hbWljIGxpYnJhcnkuICBTaW5jZSB0aGlzIGRvZXNuJ3QgbWF0Y2ggdGhlCisgICAgICAjIGJlaGF2aW9yIG9mIHNoYXJlZCBsaWJyYXJpZXMgb24gb3RoZXIgcGxhdGZvcm1zLCB3ZSBjYW4ndCB1c2UKKyAgICAgICMgdGhlbS4KKyAgICAgIGxkX3NobGlicz1ubworICAgICAgOzsKKworICAgIGJlb3MqKQorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKwkjIEpvc2VwaCBCZWNrZW5iYWNoIDxqcmIzQGJlc3QuY29tPiBzYXlzIHNvbWUgcmVsZWFzZXMgb2YgZ2NjCisJIyBzdXBwb3J0IC0tdW5kZWZpbmVkLiAgVGhpcyBkZXNlcnZlcyBzb21lIGludmVzdGlnYXRpb24uICBGSVhNRQorCWFyY2hpdmVfY21kcz0nJENDIC1ub3N0YXJ0ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgZWxzZQorCWxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCisgICAgICAjIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKKyAgICAgICMgYXMgdGhlcmUgaXMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPW5vCisgICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworICAgICAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdIC9zLy4qIFwoW14gXSpcKS9cMSBEQVRBLydcJycgfCAkU0VEIC1lICdcJycvXltBSVRXXSAvcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKworICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisJIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlICgxc3QgbGluZQorCSMgaXMgRVhQT1JUUyksIHVzZSBpdCBhcyBpczsgb3RoZXJ3aXNlLCBwcmVwZW5kLi4uCisJYXJjaGl2ZV9leHBzeW1fY21kcz0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKwkgIGNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKwllbHNlCisJICBlY2hvIEVYUE9SVFMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKwkgIGNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisJZml+CisJJENDIC1zaGFyZWQgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisgICAgICBlbHNlCisJbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIGludGVyaXgzKikKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tRScKKyAgICAgICMgSGFjazogT24gSW50ZXJpeCAzLngsIHdlIGNhbm5vdCBjb21waWxlIFBJQyBiZWNhdXNlIG9mIGEgYnJva2VuIGdjYy4KKyAgICAgICMgSW5zdGVhZCwgc2hhcmVkIGxpYnJhcmllcyBhcmUgbG9hZGVkIGF0IGFuIGltYWdlIGJhc2UgKDB4MTAwMDAwMDAgYnkKKyAgICAgICMgZGVmYXVsdCkgYW5kIHJlbG9jYXRlZCBpZiB0aGV5IGNvbmZsaWN0LCB3aGljaCBpcyBhIHNsb3cgdmVyeSBtZW1vcnkKKyAgICAgICMgY29uc3VtaW5nIGFuZCBmcmFnbWVudGluZyBwcm9jZXNzLiAgVG8gYXZvaWQgdGhpcywgd2UgcGljayBhIHJhbmRvbSwKKyAgICAgICMgMjU2IEtpQi1hbGlnbmVkIGltYWdlIGJhc2UgYmV0d2VlbiAweDUwMDAwMDAwIGFuZCAweDZGRkMwMDAwIGF0IGxpbmsKKyAgICAgICMgdGltZS4gIE1vdmluZyB1cCBmcm9tIDB4MTAwMDAwMDAgYWxzbyBhbGxvd3MgbW9yZSBzYnJrKDIpIHNwYWNlLgorICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJworICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nc2VkICJzLF4sXywiICRleHBvcnRfc3ltYm9scyA+JG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW1+JENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKyAgICAgIDs7CisKKyAgICBsaW51eCopCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwl0bXBfYWRkZmxhZz0KKwljYXNlICRjY19iYXNlbmFtZSwkaG9zdF9jcHUgaW4KKwlwZ2NjKikJCQkJIyBQb3J0bGFuZCBHcm91cCBDIGNvbXBpbGVyCisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJGVjaG8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCisJICA7OworCXBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KikJIyBQb3J0bGFuZCBHcm91cCBmNzcgYW5kIGY5MCBjb21waWxlcnMKKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkZWNobyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICB0bXBfYWRkZmxhZz0nICRwaWNfZmxhZyAtTW5vbWFpbicgOzsKKwllY2MqLGlhNjQqIHwgaWNjKixpYTY0KikJCSMgSW50ZWwgQyBjb21waWxlciBvbiBpYTY0CisJICB0bXBfYWRkZmxhZz0nIC1pX2R5bmFtaWMnIDs7CisJZWZjKixpYTY0KiB8IGlmb3J0KixpYTY0KikJIyBJbnRlbCBGb3J0cmFuIGNvbXBpbGVyIG9uIGlhNjQKKwkgIHRtcF9hZGRmbGFnPScgLWlfZHluYW1pYyAtbm9mb3JfbWFpbicgOzsKKwlpZmMqIHwgaWZvcnQqKQkJCSMgSW50ZWwgRm9ydHJhbiBjb21waWxlcgorCSAgdG1wX2FkZGZsYWc9JyAtbm9mb3JfbWFpbicgOzsKKwllc2FjCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCciJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisKKwlpZiB0ZXN0ICRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmcgPSB5ZXM7IHRoZW4KKwkgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgICRlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICRDQyAtc2hhcmVkJyIkdG1wX2FkZGZsYWciJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tdmVyc2lvbi1zY3JpcHQgJHt3bH0kb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKwlmaQorICAgICAgZWxzZQorCWxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBuZXRic2QqKQorICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorCWFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW8gJGxpYicKKwl3bGFyYz0KKyAgICAgIGVsc2UKKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzb2xhcmlzKikKKyAgICAgIGlmICRMRCAtdiAyPiYxIHwgZ3JlcCAnQkZEIDJcLjgnID4gL2Rldi9udWxsOyB0aGVuCisJbGRfc2hsaWJzPW5vCisJY2F0IDw8RU9GIDE+JjIKKworKioqIFdhcm5pbmc6IFRoZSByZWxlYXNlcyAyLjguKiBvZiB0aGUgR05VIGxpbmtlciBjYW5ub3QgcmVsaWFibHkKKyoqKiBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBTb2xhcmlzIHN5c3RlbXMuICBUaGVyZWZvcmUsIGxpYnRvb2wKKyoqKiBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgV2UgdXJnZSB5b3UgdG8gdXBncmFkZSBHTlUKKyoqKiBiaW51dGlscyB0byByZWxlYXNlIDIuOS4xIG9yIG5ld2VyLiAgQW5vdGhlciBvcHRpb24gaXMgdG8gbW9kaWZ5CisqKiogeW91ciBQQVRIIG9yIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gc28gdGhhdCB0aGUgbmF0aXZlIGxpbmtlciBpcworKioqIHVzZWQsIGFuZCB0aGVuIHJlc3RhcnQuCisKK0VPRgorICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgZWxzZQorCWxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqKQorICAgICAgY2FzZSBgJExEIC12IDI+JjFgIGluCisgICAgICAgICpcIFswMV0uKiB8ICpcIDIuWzAtOV0uKiB8ICpcIDIuMVswLTVdLiopCisJbGRfc2hsaWJzPW5vCisJY2F0IDw8X0xUX0VPRiAxPiYyCisKKyoqKiBXYXJuaW5nOiBSZWxlYXNlcyBvZiB0aGUgR05VIGxpbmtlciBwcmlvciB0byAyLjE2LjkxLjAuMyBjYW4gbm90CisqKiogcmVsaWFibHkgY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gU0NPIHN5c3RlbXMuICBUaGVyZWZvcmUsIGxpYnRvb2wKKyoqKiBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgV2UgdXJnZSB5b3UgdG8gdXBncmFkZSBHTlUKKyoqKiBiaW51dGlscyB0byByZWxlYXNlIDIuMTYuOTEuMC4zIG9yIG5ld2VyLiAgQW5vdGhlciBvcHRpb24gaXMgdG8gbW9kaWZ5CisqKiogeW91ciBQQVRIIG9yIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gc28gdGhhdCB0aGUgbmF0aXZlIGxpbmtlciBpcworKioqIHVzZWQsIGFuZCB0aGVuIHJlc3RhcnQuCisKK19MVF9FT0YKKwk7OworCSopCisJICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nYHRlc3QgLXogIiRTQ09BQlNQQVRIIiAmJiBlY2hvICR7d2x9LXJwYXRoLCRsaWJkaXJgJworCSAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYicKKwkgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSwtcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkgIGVsc2UKKwkgICAgbGRfc2hsaWJzPW5vCisJICBmaQorCTs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgc3Vub3M0KikKKyAgICAgIGFyY2hpdmVfY21kcz0nJExEIC1hc3NlcnQgcHVyZS10ZXh0IC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIHdsYXJjPQorICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgOzsKKworICAgICopCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgZWxzZQorCWxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgaWYgdGVzdCAiJGxkX3NobGlicyIgPSBubzsgdGhlbgorICAgICAgcnVucGF0aF92YXI9CisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQorICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPQorICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9CisgICAgZmkKKyAgZWxzZQorICAgICMgUE9SVE1FIGZpbGwgaW4gYSBkZXNjcmlwdGlvbiBvZiB5b3VyIHN5c3RlbSdzIGxpbmtlciAobm90IEdOVSBsZCkKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgYWl4MyopCisgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPXllcworICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJExEIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtYkU6JGV4cG9ydF9zeW1ib2xzIC1UNTEyIC1INTEyIC1iTTpTUkV+JEFSICRBUl9GTEFHUyAkbGliICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCisgICAgICAjIE5vdGU6IHRoaXMgbGlua2VyIGhhcmRjb2RlcyB0aGUgZGlyZWN0b3JpZXMgaW4gTElCUEFUSCBpZiB0aGVyZQorICAgICAgIyBhcmUgbm8gZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGJ5IC1MLgorICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgLXogIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyI7IHRoZW4KKwkjIE5laXRoZXIgZGlyZWN0IGhhcmRjb2Rpbmcgbm9yIHN0YXRpYyBsaW5raW5nIGlzIHN1cHBvcnRlZCB3aXRoIGEKKwkjIGJyb2tlbiBjb2xsZWN0Mi4KKwloYXJkY29kZV9kaXJlY3Q9dW5zdXBwb3J0ZWQKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYWl4NCogfCBhaXg1KikKKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAorCSMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgorCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKwlleHBfc3ltX2ZsYWc9Jy1CZXhwb3J0JworCW5vX2VudHJ5X2ZsYWc9IiIKKyAgICAgIGVsc2UKKwkjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB3ZSBkb24ndCB3YW50IHRoZSAiLUMiIG9wdGlvbi4KKwkjIC1DIG1lYW5zIGRlbWFuZ2xlIHRvIEFJWCBubSwgYnV0IG1lYW5zIGRvbid0IGRlbWFuZ2xlIHdpdGggR05VIG5tCisJaWYgJE5NIC1WIDI+JjEgfCBncmVwICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCisJICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gLUJwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQyID09ICJUIikgfHwgKFwkMiA9PSAiRCIpIHx8IChcJDIgPT0gIkIiKSkgJiYgKHN1YnN0cihcJDMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFwkMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKwllbHNlCisJICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gLUJDcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkMiA9PSAiVCIpIHx8IChcJDIgPT0gIkQiKSB8fCAoXCQyID09ICJCIikpICYmIChzdWJzdHIoXCQzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJDMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCisJZmkKKwlhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCisKKwkjIFRlc3QgaWYgd2UgYXJlIHRyeWluZyB0byB1c2UgcnVuIHRpbWUgbGlua2luZyBvciBub3JtYWwKKwkjIEFJWCBzdHlsZSBsaW5raW5nLiBJZiAtYnJ0bCBpcyBzb21ld2hlcmUgaW4gTERGTEFHUywgd2UKKwkjIG5lZWQgdG8gZG8gcnVudGltZSBsaW5raW5nLgorCWNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMjNdfGFpeDQuWzIzXS4qfGFpeDUqKQorCSAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCisgIAkgIGlmICh0ZXN0ICRsZF9mbGFnID0gIi1icnRsIiB8fCB0ZXN0ICRsZF9mbGFnID0gIi1XbCwtYnJ0bCIpOyB0aGVuCisgIAkgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKKyAgCSAgICBicmVhaworICAJICBmaQorCSAgZG9uZQorCSAgOzsKKwllc2FjCisKKwlleHBfc3ltX2ZsYWc9Jy1iZXhwb3J0JworCW5vX2VudHJ5X2ZsYWc9Jy1ibm9lbnRyeScKKyAgICAgIGZpCisKKyAgICAgICMgV2hlbiBsYXJnZSBleGVjdXRhYmxlcyBvciBzaGFyZWQgb2JqZWN0cyBhcmUgYnVpbHQsIEFJWCBsZCBjYW4KKyAgICAgICMgaGF2ZSBwcm9ibGVtcyBjcmVhdGluZyB0aGUgdGFibGUgb2YgY29udGVudHMuICBJZiBsaW5raW5nIGEgbGlicmFyeQorICAgICAgIyBvciBwcm9ncmFtIHJlc3VsdHMgaW4gImVycm9yIFRPQyBvdmVyZmxvdyIgYWRkIC1tbWluaW1hbC10b2MgdG8KKyAgICAgICMgQ1hYRkxBR1MvQ0ZMQUdTIGZvciBnKysvZ2NjLiAgSW4gdGhlIGNhc2VzIHdoZXJlIHRoYXQgaXMgbm90CisgICAgICAjIGVub3VnaCB0byBmaXggdGhlIHByb2JsZW0sIGFkZCAtV2wsLWJiaWd0b2MgdG8gTERGTEFHUy4KKworICAgICAgYXJjaGl2ZV9jbWRzPScnCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSc6JworICAgICAgbGlua19hbGxfZGVwbGlicz15ZXMKKworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwljYXNlICRob3N0X29zIGluIGFpeDQuWzAxMl18YWl4NC5bMDEyXS4qKQorCSMgV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgb24gQUlYIDQuMiBhbmQgbG93ZXIsIHRoZSBjaGVjaworCSMgYmVsb3cgZm9yIGJyb2tlbiBjb2xsZWN0MiBkb2Vzbid0IHdvcmsgdW5kZXIgNC4zKworCSAgY29sbGVjdDJuYW1lPWAke0NDfSAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAorCSAgaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYgXAorICAJICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCBncmVwIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAorCSAgdGhlbgorICAJICAjIFdlIGhhdmUgcmV3b3JrZWQgY29sbGVjdDIKKyAgCSAgaGFyZGNvZGVfZGlyZWN0PXllcworCSAgZWxzZQorICAJICAjIFdlIGhhdmUgb2xkIGNvbGxlY3QyCisgIAkgIGhhcmRjb2RlX2RpcmVjdD11bnN1cHBvcnRlZAorICAJICAjIEl0IGZhaWxzIHRvIGZpbmQgdW5pbnN0YWxsZWQgbGlicmFyaWVzIHdoZW4gdGhlIHVuaW5zdGFsbGVkCisgIAkgICMgcGF0aCBpcyBub3QgbGlzdGVkIGluIHRoZSBsaWJwYXRoLiAgU2V0dGluZyBoYXJkY29kZV9taW51c19MCisgIAkgICMgdG8gdW5zdXBwb3J0ZWQgZm9yY2VzIHJlbGlua2luZworICAJICBoYXJkY29kZV9taW51c19MPXllcworICAJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgIAkgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9CisJICBmaQorCSAgOzsKKwllc2FjCisJc2hhcmVkX2ZsYWc9Jy1zaGFyZWQnCisJaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisJICBzaGFyZWRfZmxhZz0iJHNoYXJlZF9mbGFnICInJHt3bH0tRycKKwlmaQorICAgICAgZWxzZQorCSMgbm90IHVzaW5nIGdjYworCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisgIAkjIFZpc3VhbEFnZSBDKyssIFZlcnNpb24gNS41IGZvciBBSVggNUwgZm9yIElBLTY0LCBCZXRhIDMgUmVsZWFzZQorICAJIyBjaG9rZXMgb24gLVdsLC1HLiBUaGUgZm9sbG93aW5nIGxpbmUgaXMgY29ycmVjdDoKKwkgIHNoYXJlZF9mbGFnPSctRycKKwllbHNlCisJICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKwkgICAgc2hhcmVkX2ZsYWc9JyR7d2x9LUcnCisJICBlbHNlCisJICAgIHNoYXJlZF9mbGFnPScke3dsfS1iTTpTUkUnCisJICBmaQorCWZpCisgICAgICBmaQorCisgICAgICAjIEl0IHNlZW1zIHRoYXQgLWJleHBhbGwgZG9lcyBub3QgZXhwb3J0IHN5bWJvbHMgYmVnaW5uaW5nIHdpdGgKKyAgICAgICMgdW5kZXJzY29yZSAoXyksIHNvIGl0IGlzIGJldHRlciB0byBnZW5lcmF0ZSBhIGxpc3Qgb2Ygc3ltYm9scyB0byBleHBvcnQuCisgICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9eWVzCisgICAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKwkjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW50aW1lIGxvYWRpbmcgZmxhZ3MgKC1icnRsKSwKKwkjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCisJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9Jy1iZXJvaycKKyAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4gZW1wdHkgZXhlY3V0YWJsZS4KKyAgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisKK2FpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgJy9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsgL14wLyB7IHMvXjAgICpcKC4qXCkkL1wxLzsgcDsgfQorfSdgCisjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCitpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgJy9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsgL14wLyB7IHMvXjAgICpcKC4qXCkkL1wxLzsgcDsgfQorfSdgOyBmaQorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisKK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAoraWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisKKyAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorCWFyY2hpdmVfZXhwc3ltX2NtZHM9IlwkQ0MiJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGVjaG8gIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCisgICAgICAgZWxzZQorCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1SICRsaWJkaXI6L3Vzci9saWI6L2xpYicKKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnPSIteiBub2RlZnMiCisJICBhcmNoaXZlX2V4cHN5bV9jbWRzPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyAke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzIgorCWVsc2UKKwkgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuIGVtcHR5IGV4ZWN1dGFibGUuCisJIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKworYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAnL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geyAvXjAvIHsgcy9eMCAgKlwoLipcKSQvXDEvOyBwOyB9Cit9J2AKKyMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KK2lmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAnL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geyAvXjAvIHsgcy9eMCAgKlwoLipcKSQvXDEvOyBwOyB9Cit9J2A7IGZpCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKworCSBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorCSAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKKwkgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KKwkgIG5vX3VuZGVmaW5lZF9mbGFnPScgJHt3bH0tYmVybm90b2snCisJICBhbGxvd191bmRlZmluZWRfZmxhZz0nICR7d2x9LWJlcm9rJworCSAgIyBFeHBvcnRlZCBzeW1ib2xzIGNhbiBiZSBwdWxsZWQgaW50byBzaGFyZWQgb2JqZWN0cyBmcm9tIGFyY2hpdmVzCisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJGNvbnZlbmllbmNlJworCSAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9eWVzCisJICAjIFRoaXMgaXMgc2ltaWxhciB0byBob3cgQUlYIHRyYWRpdGlvbmFsbHkgYnVpbGRzIGl0cyBzaGFyZWQgbGlicmFyaWVzLgorCSAgYXJjaGl2ZV9leHBzeW1fY21kcz0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICR7d2x9LWJub2VudHJ5ICRjb21waWxlcl9mbGFncyAke3dsfS1iRTokZXhwb3J0X3N5bWJvbHMke2FsbG93X3VuZGVmaW5lZF9mbGFnfX4kQVIgJEFSX0ZMQUdTICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lJHJlbGVhc2UuYSAkb3V0cHV0X29iamRpci8kc29uYW1lJworCWZpCisgICAgICBmaQorICAgICAgOzsKKworICAgIGFtaWdhb3MqKQorICAgICAgYXJjaGl2ZV9jbWRzPSckcm0gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBOQU1FICRsaWJuYW1lIiA+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgTElCUkFSWV9JRCAxIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIFZFUlNJT04gJG1ham9yIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIFJFVklTSU9OICRyZXZpc2lvbiIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kQVIgJEFSX0ZMQUdTICRsaWIgJGxpYm9ianN+JFJBTkxJQiAkbGlifihjZCAkb3V0cHV0X29iamRpciAmJiBhMml4bGlicmFyeSAtMzIpJworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgZGlmZmVyZW50IHNlbWFudGljcyBvbiB0aGUgR05VIGxkIHNlY3Rpb24KKyAgICAgIGxkX3NobGlicz1ubworICAgICAgOzsKKworICAgIGJzZGlbNDVdKikKKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0tcmR5bmFtaWMKKyAgICAgIDs7CisKKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCisgICAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZworICAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICAgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKKyAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKyAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisgICAgICBsaWJleHQ9bGliCisgICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKyAgICAgIHNocmV4dF9jbWRzPSIuZGxsIgorICAgICAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGVjaG8gIiRkZXBsaWJzIiB8ICRTRUQgLWUgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKKyAgICAgICMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCisgICAgICBvbGRfYXJjaGl2ZV9Gcm9tX25ld19jbWRzPSd0cnVlJworICAgICAgIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KKyAgICAgIG9sZF9hcmNoaXZlX2NtZHM9J2xpYiAvT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKyAgICAgIGZpeF9zcmNmaWxlX3BhdGg9J2BjeWdwYXRoIC13ICIkc3JjZmlsZSJgJworICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKyAgICAgIDs7CisKKyAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgICByaGFwc29keSogfCBkYXJ3aW4xLlswMTJdKQorICAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJworICAgICAgICAgOzsKKyAgICAgICAqKSAjIERhcndpbiAxLjMgb24KKyAgICAgICAgIGlmIHRlc3QgLXogJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVR9IDsgdGhlbgorICAgICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnCisgICAgICAgICBlbHNlCisgICAgICAgICAgIGNhc2UgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVR9IGluCisgICAgICAgICAgICAgMTAuWzAxMl0pCisgICAgICAgICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnCisgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgIDEwLiopCisgICAgICAgICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz0nJHt3bH0tdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnCisgICAgICAgICAgICAgICA7OworICAgICAgICAgICBlc2FjCisgICAgICAgICBmaQorICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjPW5vCisgICAgICBoYXJkY29kZV9kaXJlY3Q9bm8KKyAgICAgIGhhcmRjb2RlX2F1dG9tYXRpYz15ZXMKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9dW5zdXBwb3J0ZWQKKyAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScnCisgICAgICBsaW5rX2FsbF9kZXBsaWJzPXllcworICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzIDsgdGhlbgorICAgIAlvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKKyAgICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLWR5bmFtaWNsaWIgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgJHJwYXRoLyRzb25hbWUgJHZlcnN0cmluZycKKyAgICAgIG1vZHVsZV9jbWRzPSckQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFncycKKyAgICAgICMgRG9uJ3QgZml4IHRoaXMgYnkgdXNpbmcgdGhlIGxkIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgZmxhZywgaXQgZG9lc24ndCBleGlzdCBpbiBvbGRlciBkYXJ3aW4gbGRzCisgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAtZHluYW1pY2xpYiAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSAkcnBhdGgvJHNvbmFtZSAkdmVyc3RyaW5nfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKKyAgICAgIG1vZHVsZV9leHBzeW1fY21kcz0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnICAtbyAkbGliIC1idW5kbGUgJGxpYm9ianMgJGRlcGxpYnMkY29tcGlsZXJfZmxhZ3N+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JworICAgIGVsc2UKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgIHhsYyopCisgICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKKyAgICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1xbWtzaHJvYmogJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWluc3RhbGxfbmFtZSAke3dsfWBlY2hvICRycGF0aC8kc29uYW1lYCAkdmVyc3RyaW5nJworICAgICAgICAgbW9kdWxlX2NtZHM9JyRDQyAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAtYnVuZGxlICRsaWJvYmpzICRkZXBsaWJzJGNvbXBpbGVyX2ZsYWdzJworICAgICAgICAgICMgRG9uJ3QgZml4IHRoaXMgYnkgdXNpbmcgdGhlIGxkIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgZmxhZywgaXQgZG9lc24ndCBleGlzdCBpbiBvbGRlciBkYXJ3aW4gbGRzCisgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAtcW1rc2hyb2JqICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1pbnN0YWxsX25hbWUgJHt3bH0kcnBhdGgvJHNvbmFtZSAkdmVyc3RyaW5nfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKKyAgICAgICAgICBtb2R1bGVfZXhwc3ltX2NtZHM9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDICRhbGxvd191bmRlZmluZWRfZmxhZyAgLW8gJGxpYiAtYnVuZGxlICRsaWJvYmpzICRkZXBsaWJzJGNvbXBpbGVyX2ZsYWdzfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKKyAgICAgICAgICA7OworICAgICAgICopCisgICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgIGZpCisgICAgICA7OworCisgICAgZGd1eCopCisgICAgICBhcmNoaXZlX2NtZHM9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIDs7CisKKyAgICBmcmVlYnNkMSopCisgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIDs7CisKKyAgICAjIEZyZWVCU0QgMi4yLlswMTJdIGFsbG93cyB1cyB0byBpbmNsdWRlIGMrK3J0MC5vIHRvIGdldCBDKysgY29uc3RydWN0b3IKKyAgICAjIHN1cHBvcnQuICBGdXR1cmUgdmVyc2lvbnMgZG8gdGhpcyBhdXRvbWF0aWNhbGx5LCBidXQgYW4gZXhwbGljaXQgYysrcnQwLm8KKyAgICAjIGRvZXMgbm90IGJyZWFrIGFueXRoaW5nLCBhbmQgaGVscHMgc2lnbmlmaWNhbnRseSAoYXQgdGhlIGNvc3Qgb2YgYSBsaXR0bGUKKyAgICAjIGV4dHJhIHNwYWNlKS4KKyAgICBmcmVlYnNkMi4yKikKKyAgICAgIGFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAvdXNyL2xpYi9jKytydDAubycKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIDs7CisKKyAgICAjIFVuZm9ydHVuYXRlbHksIG9sZGVyIHZlcnNpb25zIG9mIEZyZWVCU0QgMiBkbyBub3QgaGF2ZSB0aGlzIGZlYXR1cmUuCisgICAgZnJlZWJzZDIqKQorICAgICAgYXJjaGl2ZV9jbWRzPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIDs7CisKKyAgICAjIEZyZWVCU0QgMyBhbmQgZ3JlYXRlciB1c2VzIGdjYyAtc2hhcmVkIHRvIGRvIHNoYXJlZCBsaWJyYXJpZXMuCisgICAgZnJlZWJzZCogfCBrZnJlZWJzZCotZ251IHwgZHJhZ29uZmx5KikKKyAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICA7OworCisgICAgaHB1eDkqKQorICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwlhcmNoaXZlX2NtZHM9JyRybSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICBlbHNlCisJYXJjaGl2ZV9jbWRzPSckcm0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgIGZpCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfStiICR7d2x9JGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworCisgICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1FJworICAgICAgOzsKKworICAgIGhwdXgxMCopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAtYSAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCWFyY2hpdmVfY21kcz0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfStiICR7d2x9JGxpYmRpcicKKwloYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKworCWhhcmRjb2RlX2RpcmVjdD15ZXMKKwlleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LUUnCisKKwkjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorCSMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCWhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICBmaQorICAgICAgOzsKKworICAgIGhwdXgxMSopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAtYSAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJY2FzZSAkaG9zdF9jcHUgaW4KKwlocHBhKjY0KikKKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCWlhNjQqKQorCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJKikKKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJZXNhYworICAgICAgZWxzZQorCWNhc2UgJGhvc3RfY3B1IGluCisJaHBwYSo2NCopCisJICBhcmNoaXZlX2NtZHM9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJaWE2NCopCisJICBhcmNoaXZlX2NtZHM9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJKikKKwkgIGFyY2hpdmVfY21kcz0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfStiICR7d2x9JGxpYmRpcicKKwloYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKworCWNhc2UgJGhvc3RfY3B1IGluCisJaHBwYSo2NCp8aWE2NCopCisJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPScrYiAkbGliZGlyJworCSAgaGFyZGNvZGVfZGlyZWN0PW5vCisJICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisJICA7OworCSopCisJICBoYXJkY29kZV9kaXJlY3Q9eWVzCisJICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LUUnCisKKwkgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCisJICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKwkgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisJICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICA7OworCisgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmdgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgICAgICBlbHNlCisJYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9Jy1ycGF0aCAkbGliZGlyJworICAgICAgZmkKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgbGlua19hbGxfZGVwbGlicz15ZXMKKyAgICAgIDs7CisKKyAgICBuZXRic2QqKQorICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorCWFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycgICMgYS5vdXQKKyAgICAgIGVsc2UKKwlhcmNoaXZlX2NtZHM9JyRMRCAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycgICAgICAjIEVMRgorICAgICAgZmkKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIDs7CisKKyAgICBuZXdzb3M2KQorICAgICAgYXJjaGl2ZV9jbWRzPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIDs7CisKKyAgICBvcGVuYnNkKikKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scycKKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCwkbGliZGlyJworCWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tRScKKyAgICAgIGVsc2UKKyAgICAgICBjYXNlICRob3N0X29zIGluCisJIG9wZW5ic2RbMDFdLiogfCBvcGVuYnNkMi5bMC03XSB8IG9wZW5ic2QyLlswLTddLiopCisJICAgYXJjaGl2ZV9jbWRzPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKwkgICA7OworCSAqKQorCSAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJICAgOzsKKyAgICAgICBlc2FjCisgICAgICBmaQorICAgICAgOzsKKworICAgIG9zMiopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKyAgICAgIGFyY2hpdmVfY21kcz0nJGVjaG8gIkxJQlJBUlkgJGxpYm5hbWUgSU5JVElOU1RBTkNFIiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kZWNobyAiREVTQ1JJUFRJT04gXCIkbGlibmFtZVwiIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JGVjaG8gREFUQSA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JGVjaG8gIiBTSU5HTEUgTk9OU0hBUkVEIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JGVjaG8gRVhQT1JUUyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+ZW14ZXhwICRsaWJvYmpzID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kQ0MgLVpkbGwgLVpjcnRkbGwgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJworICAgICAgb2xkX2FyY2hpdmVfRnJvbV9uZXdfY21kcz0nZW14aW1wIC1vICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmEgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJworICAgICAgOzsKKworICAgIG9zZjMqKQorICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwlhbGxvd191bmRlZmluZWRfZmxhZz0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlhbGxvd191bmRlZmluZWRfZmxhZz0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKKwlhcmNoaXZlX2NtZHM9JyRMRCAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAgICAgIGZpCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgIDs7CisKKyAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBlbHNlCisJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCisJYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nZm9yIGkgaW4gYGNhdCAkZXhwb3J0X3N5bWJvbHNgOyBkbyBwcmludGYgIiVzICVzXFxuIiAtZXhwb3J0ZWRfc3ltYm9sICJcJGkiID4+ICRsaWIuZXhwOyBkb25lOyBlY2hvICItaGlkZGVuIj4+ICRsaWIuZXhwfgorCSRMRCAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWlucHV0ICRsaWIuZXhwICRsaW5rZXJfZmxhZ3MgJGxpYm9ianMgJGRlcGxpYnMgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWJ+JHJtICRsaWIuZXhwJworCisJIyBCb3RoIGMgYW5kIGN4eCBjb21waWxlciBzdXBwb3J0IC1ycGF0aCBkaXJlY3RseQorCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1ycGF0aCAkbGliZGlyJworICAgICAgZmkKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgOzsKKworICAgIHNvbGFyaXMqKQorICAgICAgbm9fdW5kZWZpbmVkX2ZsYWc9JyAteiB0ZXh0JworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwl3bGFyYz0nJHt3bH0nCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH4kZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkgICRDQyAtc2hhcmVkICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kcm0gJGxpYi5leHAnCisgICAgICBlbHNlCisJd2xhcmM9JycKKwlhcmNoaXZlX2NtZHM9JyRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfiRlY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorICAJJExEIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLU0gJGxpYi5leHAgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+JHJtICRsaWIuZXhwJworICAgICAgZmkKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIHNvbGFyaXMyLlswLTVdIHwgc29sYXJpczIuWzAtNV0uKikgOzsKKyAgICAgICopCisgCSMgVGhlIGNvbXBpbGVyIGRyaXZlciB3aWxsIGNvbWJpbmUgbGlua2VyIG9wdGlvbnMgc28gd2UKKyAJIyBjYW5ub3QganVzdCBwYXNzIHRoZSBjb252aWVuY2UgbGlicmFyeSBuYW1lcyB0aHJvdWdoCisgCSMgd2l0aG91dCAkd2wsIGlmZiB3ZSBkbyBub3QgbGluayB3aXRoICRMRC4KKyAJIyBMdWNraWx5LCBnY2Mgc3VwcG9ydHMgdGhlIHNhbWUgc3ludGF4IHdlIG5lZWQgZm9yIFN1biBTdHVkaW8uCisgCSMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCisgCWNhc2UgJHdsYXJjIGluCisgCScnKQorIAkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScteiBhbGxleHRyYWN0JGNvbnZlbmllbmNlIC16IGRlZmF1bHRleHRyYWN0JyA7OworIAkqKQorIAkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScke3dsfS16ICR7d2x9YWxsZXh0cmFjdGBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0IC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7ICRlY2hvIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS16ICR7d2x9ZGVmYXVsdGV4dHJhY3QnIDs7CisgCWVzYWMgOzsKKyAgICAgIGVzYWMKKyAgICAgIGxpbmtfYWxsX2RlcGxpYnM9eWVzCisgICAgICA7OworCisgICAgc3Vub3M0KikKKyAgICAgIGlmIHRlc3QgIngkaG9zdF92ZW5kb3IiID0geHNlcXVlbnQ7IHRoZW4KKwkjIFVzZSAkQ0MgdG8gbGluayB1bmRlciBzZXF1ZW50LCBiZWNhdXNlIGl0IHRocm93cyBpbiBzb21lIGV4dHJhIC5vCisJIyBmaWxlcyB0aGF0IG1ha2UgLmluaXQgYW5kIC5maW5pIHNlY3Rpb25zIHdvcmsuCisJYXJjaGl2ZV9jbWRzPSckQ0MgLUcgJHt3bH0taCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCWFyY2hpdmVfY21kcz0nJExEIC1hc3NlcnQgcHVyZS10ZXh0IC1Cc3RhdGljIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGZpCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgOzsKKworICAgIHN5c3Y0KQorICAgICAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKwlzbmkpCisJICBhcmNoaXZlX2NtZHM9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgIGhhcmRjb2RlX2RpcmVjdD15ZXMgIyBpcyB0aGlzIHJlYWxseSB0cnVlPz8/CisJOzsKKwlzaWVtZW5zKQorCSAgIyMgTEQgaXMgbGQgaXQgbWFrZXMgYSBQTEFNTElCCisJICAjIyBDQyBqdXN0IG1ha2VzIGEgR3Jvc3NNb2R1bGUuCisJICBhcmNoaXZlX2NtZHM9JyRMRCAtRyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICByZWxvYWRfY21kcz0nJENDIC1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisJICBoYXJkY29kZV9kaXJlY3Q9bm8KKyAgICAgICAgOzsKKwltb3Rvcm9sYSkKKwkgIGFyY2hpdmVfY21kcz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgaGFyZGNvZGVfZGlyZWN0PW5vICNNb3Rvcm9sYSBtYW51YWwgc2F5cyB5ZXMsIGJ1dCBteSB0ZXN0cyBzYXkgdGhleSBsaWUKKwk7OworICAgICAgZXNhYworICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgOzsKKworICAgIHN5c3Y0LjMqKQorICAgICAgYXJjaGl2ZV9jbWRzPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9Jy1CZXhwb3J0JworICAgICAgOzsKKworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KKwlhcmNoaXZlX2NtZHM9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwloYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisJcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKwloYXJkY29kZV9ydW5wYXRoX3Zhcj15ZXMKKwlsZF9zaGxpYnM9eWVzCisgICAgICBmaQorICAgICAgOzsKKworICAgIHN5c3Y0KnV3MiogfCBzeXN2NU9wZW5VTklYKiB8IHN5c3Y1VW5peFdhcmU3LlswMV0uWzEwXSogfCB1bml4d2FyZTcqKQorICAgICAgbm9fdW5kZWZpbmVkX2ZsYWc9JyR7d2x9LXosdGV4dCcKKyAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjPW5vCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCWFyY2hpdmVfY21kcz0nJENDIC1HICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqKQorICAgICAgIyBOb3RlOiBXZSBjYW4gTk9UIHVzZSAteiBkZWZzIGFzIHdlIG1pZ2h0IGRlc2lyZSwgYmVjYXVzZSB3ZSBkbyBub3QKKyAgICAgICMgbGluayB3aXRoIC1sYywgYW5kIHRoYXQgd291bGQgY2F1c2UgYW55IHN5bWJvbHMgdXNlZCBmcm9tIGxpYmMgdG8KKyAgICAgICMgYWx3YXlzIGJlIHVucmVzb2x2ZWQsIHdoaWNoIG1lYW5zIGp1c3QgYWJvdXQgbm8gbGlicmFyeSB3b3VsZAorICAgICAgIyBldmVyIGxpbmsgY29ycmVjdGx5LiAgSWYgd2UncmUgbm90IHVzaW5nIEdOVSBsZCB3ZSB1c2UgLXogdGV4dAorICAgICAgIyB0aG91Z2gsIHdoaWNoIGRvZXMgY2F0Y2ggc29tZSBiYWQgc3ltYm9scyBidXQgaXNuJ3QgYXMgaGVhdnktaGFuZGVkCisgICAgICAjIGFzIC16IGRlZnMuCisgICAgICBub191bmRlZmluZWRfZmxhZz0nJHt3bH0teix0ZXh0JworICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyR7d2x9LXosbm9kZWZzJworICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9bm8KKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9J2B0ZXN0IC16ICIkU0NPQUJTUEFUSCIgJiYgZWNobyAke3dsfS1SLCRsaWJkaXJgJworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0nOicKKyAgICAgIGxpbmtfYWxsX2RlcGxpYnM9eWVzCisgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LUJleHBvcnQnCisgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBlbHNlCisJYXJjaGl2ZV9jbWRzPSckQ0MgLUcgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgdXRzNCopCisgICAgICBhcmNoaXZlX2NtZHM9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIDs7CisKKyAgICAqKQorICAgICAgbGRfc2hsaWJzPW5vCisgICAgICA7OworICAgIGVzYWMKKyAgZmkKKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbGRfc2hsaWJzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRsZF9zaGxpYnMiID4mNjsgfQordGVzdCAiJGxkX3NobGlicyIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCisKKyMKKyMgRG8gd2UgbmVlZCB0byBleHBsaWNpdGx5IGxpbmsgbGliYz8KKyMKK2Nhc2UgIngkYXJjaGl2ZV9jbWRzX25lZWRfbGMiIGluCit4fHh5ZXMpCisgICMgQXNzdW1lIC1sYyBzaG91bGQgYmUgYWRkZWQKKyAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9eWVzCisKKyAgaWYgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgY2FzZSAkYXJjaGl2ZV9jbWRzIGluCisgICAgKid+JyopCisgICAgICAjIEZJWE1FOiB3ZSBtYXkgaGF2ZSB0byBkZWFsIHdpdGggbXVsdGktY29tbWFuZCBzZXF1ZW5jZXMuCisgICAgICA7OworICAgICckQ0MgJyopCisgICAgICAjIFRlc3Qgd2hldGhlciB0aGUgY29tcGlsZXIgaW1wbGljaXRseSBsaW5rcyB3aXRoIC1sYyBzaW5jZSBvbiBzb21lCisgICAgICAjIHN5c3RlbXMsIC1sZ2NjIGhhcyB0byBjb21lIGJlZm9yZSAtbGMuIElmIGdjYyBhbHJlYWR5IHBhc3NlcyAtbGMKKyAgICAgICMgdG8gbGQsIGRvbid0IGFkZCAtbGMgYmVmb3JlIC1sZ2NjLgorICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluLi4uICRFQ0hPX0MiID4mNjsgfQorICAgICAgJHJtIGNvbmZ0ZXN0KgorICAgICAgcHJpbnRmICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKworICAgICAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9IDI+Y29uZnRlc3QuZXJyOyB0aGVuCisgICAgICAgIHNvbmFtZT1jb25mdGVzdAorICAgICAgICBsaWI9Y29uZnRlc3QKKyAgICAgICAgbGlib2Jqcz1jb25mdGVzdC4kYWNfb2JqZXh0CisgICAgICAgIGRlcGxpYnM9CisgICAgICAgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsCisJcGljX2ZsYWc9JGx0X3Byb2dfY29tcGlsZXJfcGljCisgICAgICAgIGNvbXBpbGVyX2ZsYWdzPS12CisgICAgICAgIGxpbmtlcl9mbGFncz0tdgorICAgICAgICB2ZXJzdHJpbmc9CisgICAgICAgIG91dHB1dF9vYmpkaXI9LgorICAgICAgICBsaWJuYW1lPWNvbmZ0ZXN0CisgICAgICAgIGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGFsbG93X3VuZGVmaW5lZF9mbGFnCisgICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPQorICAgICAgICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhcmNoaXZlX2NtZHMgMlw+XCYxIFx8IGdyZXAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMVwiIikgPiY1CisgIChldmFsICRhcmNoaXZlX2NtZHMgMlw+XCYxIFx8IGdyZXAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfQorICAgICAgICB0aGVuCisJICBhcmNoaXZlX2NtZHNfbmVlZF9sYz1ubworICAgICAgICBlbHNlCisJICBhcmNoaXZlX2NtZHNfbmVlZF9sYz15ZXMKKyAgICAgICAgZmkKKyAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWcKKyAgICAgIGVsc2UKKyAgICAgICAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1CisgICAgICBmaQorICAgICAgJHJtIGNvbmZ0ZXN0KgorICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYXJjaGl2ZV9jbWRzX25lZWRfbGMiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFyY2hpdmVfY21kc19uZWVkX2xjIiA+JjY7IH0KKyAgICAgIDs7CisgICAgZXNhYworICBmaQorICA7OworZXNhYworCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3MiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3MuLi4gJEVDSE9fQyIgPiY2OyB9CitsaWJyYXJ5X25hbWVzX3NwZWM9CitsaWJuYW1lX3NwZWM9J2xpYiRuYW1lJworc29uYW1lX3NwZWM9CitzaHJleHRfY21kcz0iLnNvIgorcG9zdGluc3RhbGxfY21kcz0KK3Bvc3R1bmluc3RhbGxfY21kcz0KK2ZpbmlzaF9jbWRzPQorZmluaXNoX2V2YWw9CitzaGxpYnBhdGhfdmFyPQorc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXVua25vd24KK3ZlcnNpb25fdHlwZT1ub25lCitkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCitzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiIKK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJENDIC1wcmludC1zZWFyY2gtZGlycyB8IGdyZXAgIl5saWJyYXJpZXM6IiB8ICRTRUQgLWUgInMvXmxpYnJhcmllczovLyIgLWUgInMsPS8sLyxnImAKKyAgaWYgZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBncmVwICc7JyA+L2Rldi9udWxsIDsgdGhlbgorICAgICMgaWYgdGhlIHBhdGggY29udGFpbnMgIjsiIHRoZW4gd2UgYXNzdW1lIGl0IHRvIGJlIHRoZSBzZXBhcmF0b3IKKyAgICAjIG90aGVyd2lzZSBkZWZhdWx0IHRvIHRoZSBzdGFuZGFyZCBwYXRoIHNlcGFyYXRvciAoaS5lLiAiOiIpIC0gaXQgaXMKKyAgICAjIGFzc3VtZWQgdGhhdCBubyBwYXJ0IG9mIGEgbm9ybWFsIHBhdGhuYW1lIGNvbnRhaW5zICI7IiBidXQgdGhhdCBzaG91bGQKKyAgICAjIG9rYXkgaW4gdGhlIHJlYWwgd29ybGQgd2hlcmUgIjsiIGluIGRpcnBhdGhzIGlzIGl0c2VsZiBwcm9ibGVtYXRpYy4KKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGVjaG8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCisgIGVsc2UKKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGVjaG8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisgIGZpCitlbHNlCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiIKK2ZpCituZWVkX2xpYl9wcmVmaXg9dW5rbm93bgoraGFyZGNvZGVfaW50b19saWJzPW5vCisKKyMgd2hlbiB5b3Ugc2V0IG5lZWRfdmVyc2lvbiB0byBubywgbWFrZSBzdXJlIGl0IGRvZXMgbm90IGNhdXNlIC1zZXRfdmVyc2lvbgorIyBmbGFncyB0byBiZSBsZWZ0IHdpdGhvdXQgYXJndW1lbnRzCituZWVkX3ZlcnNpb249dW5rbm93bgorCitjYXNlICRob3N0X29zIGluCithaXgzKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZS5hJworICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKKworICAjIEFJWCAzIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIHdlIGFwcGVuZCBhIG1ham9yIHZlcnNpb24gdG8gdGhlIG5hbWUuCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIDs7CisKK2FpeDQqIHwgYWl4NSopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICAjIEFJWCA1IHN1cHBvcnRzIElBNjQKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBlbHNlCisgICAgIyBXaXRoIEdDQyB1cCB0byAyLjk1LngsIGNvbGxlY3QyIHdvdWxkIGNyZWF0ZSBhbiBpbXBvcnQgZmlsZQorICAgICMgZm9yIGRlcGVuZGVuY2UgbGlicmFyaWVzLiAgVGhlIGltcG9ydCBmaWxlIHdvdWxkIHN0YXJ0IHdpdGgKKyAgICAjIHRoZSBsaW5lIGAjISAuJy4gIFRoaXMgd291bGQgY2F1c2UgdGhlIGdlbmVyYXRlZCBsaWJyYXJ5IHRvCisgICAgIyBkZXBlbmQgb24gYC4nLCBhbHdheXMgYW4gaW52YWxpZCBsaWJyYXJ5LiAgVGhpcyB3YXMgZml4ZWQgaW4KKyAgICAjIGRldmVsb3BtZW50IHNuYXBzaG90cyBvZiBHQ0MgcHJpb3IgdG8gMy4wLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeDQgfCBhaXg0LlswMV0gfCBhaXg0LlswMV0uKikKKyAgICAgIGlmIHsgZWNobyAnI2lmIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA5NyknCisJICAgZWNobyAnIHllcyAnCisJICAgZWNobyAnI2VuZGlmJzsgfSB8ICR7Q0N9IC1FIC0gfCBncmVwIHllcyA+IC9kZXYvbnVsbDsgdGhlbgorCToKKyAgICAgIGVsc2UKKwljYW5fYnVpbGRfc2hhcmVkPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBlc2FjCisgICAgIyBBSVggKG9uIFBvd2VyKikgaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gY3VycmVudGx5IHdlIGNhbiBub3QgaGFyZGNvZGUgY29ycmVjdAorICAgICMgc29uYW1lIGludG8gZXhlY3V0YWJsZS4gUHJvYmFibHkgd2UgY2FuIGFkZCB2ZXJzaW9uaW5nIHN1cHBvcnQgdG8KKyAgICAjIGNvbGxlY3QyLCBzbyBhZGRpdGlvbmFsIGxpbmtzIGNhbiBiZSB1c2VmdWwgaW4gZnV0dXJlLgorICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorICAgICAgIyBJZiB1c2luZyBydW4gdGltZSBsaW5raW5nIChvbiBBSVggNC4yIG9yIGxhdGVyKSB1c2UgbGliPG5hbWU+LnNvCisgICAgICAjIGluc3RlYWQgb2YgbGliPG5hbWU+LmEgdG8gbGV0IHBlb3BsZSBrbm93IHRoYXQgdGhlc2UgYXJlIG5vdAorICAgICAgIyB0eXBpY2FsIEFJWCBzaGFyZWQgbGlicmFyaWVzLgorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgZWxzZQorICAgICAgIyBXZSBwcmVzZXJ2ZSAuYSBhcyBleHRlbnNpb24gZm9yIHNoYXJlZCBsaWJyYXJpZXMgdGhyb3VnaCBBSVg0LjIKKyAgICAgICMgYW5kIGxhdGVyIHdoZW4gd2UgYXJlIG5vdCBkb2luZyBydW4gdGltZSBsaW5raW5nLgorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfS5hICRsaWJuYW1lLmEnCisgICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIGZpCisgICAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICisgIGZpCisgIDs7CisKK2FtaWdhb3MqKQorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLml4bGlicmFyeSAkbGlibmFtZS5hJworICAjIENyZWF0ZSAke2xpYm5hbWV9X2l4bGlicmFyeS5hIGVudHJpZXMgaW4gL3N5cy9saWJzLgorICBmaW5pc2hfZXZhbD0nZm9yIGxpYiBpbiBgbHMgJGxpYmRpci8qLml4bGlicmFyeSAyPi9kZXYvbnVsbGA7IGRvIGxpYm5hbWU9YCRlY2hvICJYJGxpYiIgfCAkWHNlZCAtZSAnXCcncyVeLiovXChbXi9dKlwpXC5peGxpYnJhcnkkJVwxJSdcJydgOyB0ZXN0ICRybSAvc3lzL2xpYnMvJHtsaWJuYW1lfV9peGxpYnJhcnkuYTsgJHNob3cgImNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEiOyBjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIHx8IGV4aXQgMTsgZG9uZScKKyAgOzsKKworYmVvcyopCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKKyAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgOzsKKworYnNkaVs0NV0qKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9zaGxpYiAvdXNyL2xpYiAvdXNyL1gxMS9saWIgL3Vzci9jb250cmliL2xpYiAvbGliIC91c3IvbG9jYWwvbGliIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliIgorICAjIHRoZSBkZWZhdWx0IGxkLnNvLmNvbmYgYWxzbyBjb250YWlucyAvdXNyL2NvbnRyaWIvbGliIGFuZAorICAjIC91c3IvWDExUjYvbGliICgvdXNyL1gxMSBpcyBhIGxpbmsgdG8gL3Vzci9YMTFSNiksIGJ1dCBsZXQgdXMgYWxsb3cKKyAgIyBsaWJ0b29sIHRvIGhhcmQtY29kZSB0aGVzZSBpbnRvIHByb2dyYW1zCisgIDs7CisKK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKyAgdmVyc2lvbl90eXBlPXdpbmRvd3MKKyAgc2hyZXh0X2NtZHM9Ii5kbGwiCisgIG5lZWRfdmVyc2lvbj1ubworICBuZWVkX2xpYl9wcmVmaXg9bm8KKworICBjYXNlICRHQ0MsJGhvc3Rfb3MgaW4KKyAgeWVzLGN5Z3dpbiogfCB5ZXMsbWluZ3cqIHwgeWVzLHB3MzIqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCisgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7ZWNobyBcJGRsbmFtZSdcJydgfgorICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgorICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CisgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWV+CisgICAgICBjaG1vZCBhK3ggXCRkbGRpci8kZGxuYW1lJworICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgorICAgICAgICRybSBcJGRscGF0aCcKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgY3lnd2luKikKKyAgICAgICMgQ3lnd2luIERMTHMgdXNlICdjeWcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJworICAgICAgc29uYW1lX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9jeWcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiAvbGliL3czMmFwaSAvbGliIC91c3IvbG9jYWwvbGliIgorICAgICAgOzsKKyAgICBtaW5ndyopCisgICAgICAjIE1pbkdXIERMTHMgdXNlIHRyYWRpdGlvbmFsICdsaWInIHByZWZpeAorICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgZ3JlcCAiXmxpYnJhcmllczoiIHwgJFNFRCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAicyw9LywvLGciYAorICAgICAgaWYgZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBncmVwICc7W2MtekMtWl06LycgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAjIEl0IGlzIG1vc3QgcHJvYmFibHkgYSBXaW5kb3dzIGZvcm1hdCBQQVRIIHByaW50ZWQgYnkKKyAgICAgICAgIyBtaW5ndyBnY2MsIGJ1dCB3ZSBhcmUgcnVubmluZyBvbiBDeWd3aW4uIEdjYyBwcmludHMgaXRzIHNlYXJjaAorICAgICAgICAjIHBhdGggd2l0aCA7IHNlcGFyYXRvcnMsIGFuZCB3aXRoIGRyaXZlIGxldHRlcnMuIFdlIGNhbiBoYW5kbGUgdGhlCisgICAgICAgICMgZHJpdmUgbGV0dGVycyAoY3lnd2luIGZpbGV1dGlscyB1bmRlcnN0YW5kcyB0aGVtKSwgc28gbGVhdmUgdGhlbSwKKyAgICAgICAgIyBlc3BlY2lhbGx5IGFzIHdlIG1pZ2h0IHBhc3MgZmlsZXMgZm91bmQgdGhlcmUgdG8gYSBtaW5ndyBvYmpkdW1wLAorICAgICAgICAjIHdoaWNoIHdvdWxkbid0IHVuZGVyc3RhbmQgYSBjeWd3aW5pZmllZCBwYXRoLiBBaGguCisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKKyAgICAgIGVsc2UKKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorICAgICAgZmkKKyAgICAgIDs7CisgICAgcHczMiopCisgICAgICAjIHB3MzIgRExMcyB1c2UgJ3B3JyBwcmVmaXggcmF0aGVyIHRoYW4gJ2xpYicKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKyAgICAgIDs7CisgICAgZXNhYworICAgIDs7CisKKyAgKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKKyAgICA7OworICBlc2FjCisgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICMgRklYTUU6IGZpcnN0IHdlIHNob3VsZCBzZWFyY2ggLiBhbmQgdGhlIGRpcmVjdG9yeSB0aGUgZXhlY3V0YWJsZSBpcyBpbgorICBzaGxpYnBhdGhfdmFyPVBBVEgKKyAgOzsKKworZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGR5bGQiCisgIHZlcnNpb25fdHlwZT1kYXJ3aW4KKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHt2ZXJzdWZmaXh9JHNoYXJlZF9leHQgJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0ICR7bGlibmFtZX0kc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCcKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBzaGxpYnBhdGhfdmFyPURZTERfTElCUkFSWV9QQVRICisgIHNocmV4dF9jbWRzPSdgdGVzdCAuJG1vZHVsZSA9IC55ZXMgJiYgZWNobyAuc28gfHwgZWNobyAuZHlsaWJgJworICAjIEFwcGxlJ3MgZ2NjIHByaW50cyAnZ2NjIC1wcmludC1zZWFyY2gtZGlycycgZG9lc24ndCBvcGVyYXRlIHRoZSBzYW1lLgorICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJENDIC1wcmludC1zZWFyY2gtZGlycyB8IHRyICJcbiIgIiRQQVRIX1NFUEFSQVRPUiIgfCBzZWQgLWUgJ3MvbGlicmFyaWVzOi9AbGlicmFyaWVzOi8nIHwgdHIgIkAiICJcbiIgfCBncmVwICJebGlicmFyaWVzOiIgfCBzZWQgLWUgInMvXmxpYnJhcmllczovLyIgLWUgInMsPS8sLyxnIiAtZSAicywkUEFUSF9TRVBBUkFUT1IsICxnIiAtZSAicywuKiwmIC9saWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIsZyJgCisgIGVsc2UKKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy9saWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWInCisgIGZpCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvbGliIC91c3IvbGliJworICA7OworCitkZ3V4KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICA7OworCitmcmVlYnNkMSopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7CisKK2tmcmVlYnNkKi1nbnUpCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGR5bmFtaWNfbGlua2VyPSdHTlUgbGQuc28nCisgIDs7CisKK2ZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgIyBEcmFnb25GbHkgZG9lcyBub3QgaGF2ZSBhb3V0LiAgV2hlbi9pZiB0aGV5IGltcGxlbWVudCBhIG5ldworICAjIHZlcnNpb25pbmcgbWVjaGFuaXNtLCBhZGp1c3QgdGhpcy4KKyAgaWYgdGVzdCAteCAvdXNyL2Jpbi9vYmpmb3JtYXQ7IHRoZW4KKyAgICBvYmpmb3JtYXQ9YC91c3IvYmluL29iamZvcm1hdGAKKyAgZWxzZQorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBmcmVlYnNkWzEyM10qKSBvYmpmb3JtYXQ9YW91dCA7OworICAgICopIG9iamZvcm1hdD1lbGYgOzsKKyAgICBlc2FjCisgIGZpCisgIHZlcnNpb25fdHlwZT1mcmVlYnNkLSRvYmpmb3JtYXQKKyAgY2FzZSAkdmVyc2lvbl90eXBlIGluCisgICAgZnJlZWJzZC1lbGYqKQorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgICBuZWVkX3ZlcnNpb249bm8KKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgOzsKKyAgICBmcmVlYnNkLSopCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgICAgIG5lZWRfdmVyc2lvbj15ZXMKKyAgICAgIDs7CisgIGVzYWMKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBmcmVlYnNkMiopCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIDs7CisgIGZyZWVic2QzLlswMV0qIHwgZnJlZWJzZGVsZjMuWzAxXSopCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICA7OworICBmcmVlYnNkMy5bMi05XSogfCBmcmVlYnNkZWxmMy5bMi05XSogfCBcCisgIGZyZWVic2Q0LlswLTVdIHwgZnJlZWJzZGVsZjQuWzAtNV0gfCBmcmVlYnNkNC4xLjEgfCBmcmVlYnNkZWxmNC4xLjEpCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIDs7CisgIGZyZWVic2QqKSAjIGZyb20gNC42IG9uCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICA7OworICBlc2FjCisgIDs7CisKK2dudSopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0ke21ham9yfSAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCitocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKyAgIyBHaXZlIGEgc29uYW1lIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1ham9yIHZlcnNpb24gc28gdGhhdCBkbGQuc2wgcmVmdXNlcyB0bworICAjIGxpbmsgYWdhaW5zdCBvdGhlciB2ZXJzaW9ucy4KKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgaWE2NCopCisgICAgc2hyZXh0X2NtZHM9Jy5zbycKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbyIKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIGlmIHRlc3QgIlgkSFBVWF9JQTY0X01PREUiID0gWDMyOyB0aGVuCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIiCisgICAgZWxzZQorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9ocHV4NjQgL3Vzci9sb2NhbC9saWIvaHB1eDY0IgorICAgIGZpCisgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYworICAgIDs7CisgICBocHBhKjY0KikKKyAgICAgc2hyZXh0X2NtZHM9Jy5zbCcKKyAgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgorICAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSCAjIEhvdyBzaG91bGQgd2UgaGFuZGxlIFNITElCX1BBVEgKKyAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgorICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9wYTIwXzY0IC91c3IvY2NzL2xpYi9wYTIwXzY0IgorICAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisgICAgIDs7CisgICAqKQorICAgIHNocmV4dF9jbWRzPScuc2wnCisgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKKyAgICBzaGxpYnBhdGhfdmFyPVNITElCX1BBVEgKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8gIyArcyBpcyByZXF1aXJlZCB0byBlbmFibGUgU0hMSUJfUEFUSAorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgOzsKKyAgZXNhYworICAjIEhQLVVYIHJ1bnMgKnJlYWxseSogc2xvd2x5IHVubGVzcyBzaGFyZWQgbGlicmFyaWVzIGFyZSBtb2RlIDU1NS4KKyAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNTU1ICRsaWInCisgIDs7CisKK2ludGVyaXgzKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgZHluYW1pY19saW5rZXI9J0ludGVyaXggMy54IGxkLnNvLjEgKFBFLCBsaWtlIEVMRiknCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK2lyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBub25zdG9wdXgqKSB2ZXJzaW9uX3R5cGU9bm9uc3RvcHV4IDs7CisgICAgKikKKwlpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19nbnVfbGQiID0geWVzOyB0aGVuCisJCXZlcnNpb25fdHlwZT1saW51eAorCWVsc2UKKwkJdmVyc2lvbl90eXBlPWlyaXgKKwlmaSA7OworICBlc2FjCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBjYXNlICRob3N0X29zIGluCisgIGlyaXg1KiB8IG5vbnN0b3B1eCopCisgICAgbGlic3VmZj0gc2hsaWJzdWZmPQorICAgIDs7CisgICopCisgICAgY2FzZSAkTEQgaW4gIyBsaWJ0b29sLm00IHdpbGwgYWRkIG9uZSBvZiB0aGVzZSBzd2l0Y2hlcyB0byBMRAorICAgICotMzJ8KiItMzIgInwqLW1lbGYzMmJzbWlwfCoiLW1lbGYzMmJzbWlwICIpCisgICAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPTMyLWJpdDs7CisgICAgKi1uMzJ8KiItbjMyICJ8Ki1tZWxmMzJibWlwbjMyfCoiLW1lbGYzMmJtaXBuMzIgIikKKyAgICAgIGxpYnN1ZmY9MzIgc2hsaWJzdWZmPU4zMiBsaWJtYWdpYz1OMzI7OworICAgICotNjR8KiItNjQgInwqLW1lbGY2NGJtaXB8KiItbWVsZjY0Ym1pcCAiKQorICAgICAgbGlic3VmZj02NCBzaGxpYnN1ZmY9NjQgbGlibWFnaWM9NjQtYml0OzsKKyAgICAqKSBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPW5ldmVyLW1hdGNoOzsKKyAgICBlc2FjCisgICAgOzsKKyAgZXNhYworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUlkke3NobGlic3VmZn1fUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0gL3Vzci9sb2NhbC9saWIke2xpYnN1ZmZ9IgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IgorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKKyMgTm8gc2hhcmVkIGxpYiBzdXBwb3J0IGZvciBMaW51eCBvbGRsZCwgYW91dCwgb3IgY29mZi4KK2xpbnV4Km9sZGxkKiB8IGxpbnV4KmFvdXQqIHwgbGludXgqY29mZiopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7CisKKyMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KK2xpbnV4KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1uICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAjIFRoaXMgaW1wbGllcyBubyBmYXN0X2luc3RhbGwsIHdoaWNoIGlzIHVuYWNjZXB0YWJsZS4KKyAgIyBTb21lIHJld29yayB3aWxsIGJlIG5lZWRlZCB0byBhbGxvdyBmb3IgZmFzdF9pbnN0YWxsCisgICMgYmVmb3JlIHRoaXMgY2FuIGJlIGVuYWJsZWQuCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKworICAjIGZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcKKyAgbGlic3VmZj0KKyAgY2FzZSAiJGhvc3RfY3B1IiBpbgorICB4ODZfNjQqfHMzOTB4Knxwb3dlcnBjNjQqKQorICAgIGVjaG8gJyNsaW5lIDIxNjYxICJjb25maWd1cmUiJyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KKyAgICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKyAgICAgICo2NC1iaXQqKQorICAgICAgICBsaWJzdWZmPTY0CisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiR7bGlic3VmZn0gL3Vzci9saWIke2xpYnN1ZmZ9IC91c3IvbG9jYWwvbGliJHtsaWJzdWZmfSIKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICAgIHJtIC1yZiBjb25mdGVzdCoKKyAgICA7OworICBlc2FjCisKKyAgIyBBcHBlbmQgbGQuc28uY29uZiBjb250ZW50cyB0byB0aGUgc2VhcmNoIHBhdGgKKyAgaWYgdGVzdCAtZiAvZXRjL2xkLnNvLmNvbmY7IHRoZW4KKyAgICBsdF9sZF9leHRyYT1gYXdrICcvXmluY2x1ZGUgLyB7IHN5c3RlbShzcHJpbnRmKCJjZCAvZXRjOyBjYXQgJXMgMj4vZGV2L251bGwiLCBcJDIpKTsgc2tpcCA9IDE7IH0geyBpZiAoIXNraXApIHByaW50IFwkMDsgc2tpcCA9IDA7IH0nIDwgL2V0Yy9sZC5zby5jb25mIHwgJFNFRCAtZSAncy9eCSAqLy87cy8jLiovLzsvXlteXC9dL2Q7cy9bOiwJXS8gL2c7cy89W149XSokLy87cy89W149IF0qIC8gL2c7L14kL2QnIHwgdHIgJ1xuJyAnICdgCisgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWIke2xpYnN1ZmZ9IC91c3IvbGliJHtsaWJzdWZmfSAkbHRfbGRfZXh0cmEiCisgIGZpCisKKyAgIyBXZSB1c2VkIHRvIHRlc3QgZm9yIC9saWIvbGQuc28uMSBhbmQgZGlzYWJsZSBzaGFyZWQgbGlicmFyaWVzIG9uCisgICMgcG93ZXJwYywgYmVjYXVzZSBNa0xpbnV4IG9ubHkgc3VwcG9ydGVkIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB0aGUKKyAgIyBHTlUgZHluYW1pYyBsaW5rZXIuICBTaW5jZSB0aGlzIHdhcyBicm9rZW4gd2l0aCBjcm9zcyBjb21waWxlcnMsCisgICMgbW9zdCBwb3dlcnBjLWxpbnV4IGJveGVzIHN1cHBvcnQgZHluYW1pYyBsaW5raW5nIHRoZXNlIGRheXMgYW5kCisgICMgcGVvcGxlIGNhbiBhbHdheXMgLS1kaXNhYmxlLXNoYXJlZCwgdGhlIHRlc3Qgd2FzIHJlbW92ZWQsIGFuZCB3ZQorICAjIGFzc3VtZSB0aGUgR05VL0xpbnV4IGR5bmFtaWMgbGlua2VyIGlzIGluIHVzZS4KKyAgZHluYW1pY19saW5rZXI9J0dOVS9MaW51eCBsZC5zbycKKyAgOzsKKwora25ldGJzZCotZ251KQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICBkeW5hbWljX2xpbmtlcj0nR05VIGxkLnNvJworICA7OworCituZXRic2QqKQorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJworICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgKGEub3V0KSBsZC5zbycKKyAgZWxzZQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIGxkLmVsZl9zbycKKyAgZmkKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK25ld3NvczYpCisgIHZlcnNpb25fdHlwZT1saW51eAorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICA7OworCitudG8tcW54KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgOzsKKworb3BlbmJzZCopCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIiCisgIG5lZWRfbGliX3ByZWZpeD1ubworICAjIFNvbWUgb2xkZXIgdmVyc2lvbnMgb2YgT3BlbkJTRCAoMy4zIGF0IGxlYXN0KSAqZG8qIG5lZWQgdmVyc2lvbmVkIGxpYnMuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBvcGVuYnNkMy4zIHwgb3BlbmJzZDMuMy4qKSBuZWVkX3ZlcnNpb249eWVzIDs7CisgICAgKikgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZF92ZXJzaW9uPW5vICA7OworICBlc2FjCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIG9wZW5ic2QyLls4OV0gfCBvcGVuYnNkMi5bODldLiopCisJc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisJOzsKKyAgICAgICopCisJc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworCTs7CisgICAgICBlc2FjCisgIGVsc2UKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGZpCisgIDs7CisKK29zMiopCisgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisgIHNocmV4dF9jbWRzPSIuZGxsIgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUuYScKKyAgZHluYW1pY19saW5rZXI9J09TLzIgbGQuZXhlJworICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKKyAgOzsKKworb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICB2ZXJzaW9uX3R5cGU9b3NmCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9zaGxpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIvY21wbHJzL2NjIC91c3IvbGliIC91c3IvbG9jYWwvbGliIC92YXIvc2hsaWIiCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIgorICA7OworCitzb2xhcmlzKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAjIGxkZCBjb21wbGFpbnMgdW5sZXNzIGxpYnJhcmllcyBhcmUgZXhlY3V0YWJsZQorICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCAreCAkbGliJworICA7OworCitzdW5vczQqKQorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovdXNyL2V0YyIgbGRjb25maWcgJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgICAgbmVlZF9saWJfcHJlZml4PW5vCisgIGZpCisgIG5lZWRfdmVyc2lvbj15ZXMKKyAgOzsKKworc3lzdjQgfCBzeXN2NC4zKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBjYXNlICRob3N0X3ZlbmRvciBpbgorICAgIHNuaSkKKyAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LUJsYXJnZWR5bnN5bScKKyAgICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICisgICAgICA7OworICAgIHNpZW1lbnMpCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIDs7CisgICAgbW90b3JvbGEpCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIG5lZWRfdmVyc2lvbj1ubworICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy9saWIgL3Vzci9saWIgL3Vzci9jY3MvbGliJworICAgICAgOzsKKyAgZXNhYworICA7OworCitzeXN2NCpNUCopCisgIGlmIHRlc3QgLWQgL3Vzci9uZWMgO3RoZW4KKyAgICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0uJG1ham9yJworICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGZpCisgIDs7CisKK3N5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQorICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC1lbGYKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvdXNyL2dudS9saWIgL3Vzci9jY3MvbGliIC91c3IvbGliIC9saWInCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGVsc2UKKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvY2NzL2xpYiAvdXNyL2xpYicKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgc2NvMy4ydjUqKQorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgL2xpYiIKKwk7OworICAgIGVzYWMKKyAgZmkKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbGliJworICA7OworCit1dHM0KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICA7OworCisqKQorICBkeW5hbWljX2xpbmtlcj1ubworICA7OworZXNhYworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkZHluYW1pY19saW5rZXIiID4mNQorZWNobyAiJHtFQ0hPX1R9JGR5bmFtaWNfbGlua2VyIiA+JjY7IH0KK3Rlc3QgIiRkeW5hbWljX2xpbmtlciIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCisKK3ZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSJQQVRIICRzaGxpYnBhdGhfdmFyICRydW5wYXRoX3ZhciIKK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgIHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsgR0NDX0VYRUNfUFJFRklYIENPTVBJTEVSX1BBVEggTElCUkFSWV9QQVRIIgorZmkKKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGhvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXMuLi4gJEVDSE9fQyIgPiY2OyB9CitoYXJkY29kZV9hY3Rpb249CitpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgfHwgXAorICAgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIiB8fCBcCisgICB0ZXN0ICJYJGhhcmRjb2RlX2F1dG9tYXRpYyIgPSAiWHllcyIgOyB0aGVuCisKKyAgIyBXZSBjYW4gaGFyZGNvZGUgbm9uLWV4aXN0YW50IGRpcmVjdG9yaWVzLgorICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0IiAhPSBubyAmJgorICAgICAjIElmIHRoZSBvbmx5IG1lY2hhbmlzbSB0byBhdm9pZCBoYXJkY29kaW5nIGlzIHNobGlicGF0aF92YXIsIHdlCisgICAgICMgaGF2ZSB0byByZWxpbmssIG90aGVyd2lzZSB3ZSBtaWdodCBsaW5rIHdpdGggYW4gaW5zdGFsbGVkIGxpYnJhcnkKKyAgICAgIyB3aGVuIHdlIHNob3VsZCBiZSBsaW5raW5nIHdpdGggYSB5ZXQtdG8tYmUtaW5zdGFsbGVkIG9uZQorICAgICAjIyB0ZXN0ICIkX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCApIiAhPSBubyAmJgorICAgICB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTCIgIT0gbm87IHRoZW4KKyAgICAjIExpbmtpbmcgYWx3YXlzIGhhcmRjb2RlcyB0aGUgdGVtcG9yYXJ5IGxpYnJhcnkgZGlyZWN0b3J5LgorICAgIGhhcmRjb2RlX2FjdGlvbj1yZWxpbmsKKyAgZWxzZQorICAgICMgV2UgY2FuIGxpbmsgd2l0aG91dCBoYXJkY29kaW5nLCBhbmQgd2UgY2FuIGhhcmRjb2RlIG5vbmV4aXN0aW5nIGRpcnMuCisgICAgaGFyZGNvZGVfYWN0aW9uPWltbWVkaWF0ZQorICBmaQorZWxzZQorICAjIFdlIGNhbm5vdCBoYXJkY29kZSBhbnl0aGluZywgb3IgZWxzZSB3ZSBjYW4gb25seSBoYXJkY29kZSBleGlzdGluZworICAjIGRpcmVjdG9yaWVzLgorICBoYXJkY29kZV9hY3Rpb249dW5zdXBwb3J0ZWQKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRoYXJkY29kZV9hY3Rpb24iID4mNQorZWNobyAiJHtFQ0hPX1R9JGhhcmRjb2RlX2FjdGlvbiIgPiY2OyB9CisKK2lmIHRlc3QgIiRoYXJkY29kZV9hY3Rpb24iID0gcmVsaW5rOyB0aGVuCisgICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IHN1cHBvcnRlZAorICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCitlbGlmIHRlc3QgIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiID0geWVzIHx8CisgICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IG5vOyB0aGVuCisgICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IG5lY2Vzc2FyeQorICBlbmFibGVfZmFzdF9pbnN0YWxsPW5lZWRsZXNzCitmaQorCitzdHJpcGxpYj0KK29sZF9zdHJpcGxpYj0KK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgc3RyaXBwaW5nIGxpYnJhcmllcyBpcyBwb3NzaWJsZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgc3RyaXBwaW5nIGxpYnJhcmllcyBpcyBwb3NzaWJsZS4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgLW4gIiRTVFJJUCIgJiYgJFNUUklQIC1WIDI+JjEgfCBncmVwICJHTlUgc3RyaXAiID4vZGV2L251bGw7IHRoZW4KKyAgdGVzdCAteiAiJG9sZF9zdHJpcGxpYiIgJiYgb2xkX3N0cmlwbGliPSIkU1RSSVAgLS1zdHJpcC1kZWJ1ZyIKKyAgdGVzdCAteiAiJHN0cmlwbGliIiAmJiBzdHJpcGxpYj0iJFNUUklQIC0tc3RyaXAtdW5uZWVkZWQiCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKK2VjaG8gIiR7RUNIT19UfXllcyIgPiY2OyB9CitlbHNlCisjIEZJWE1FIC0gaW5zZXJ0IHNvbWUgcmVhbCB0ZXN0cywgaG9zdF9vcyBpc24ndCByZWFsbHkgZ29vZCBlbm91Z2gKKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgZGFyd2luKikKKyAgICAgICBpZiB0ZXN0IC1uICIkU1RSSVAiIDsgdGhlbgorICAgICAgICAgc3RyaXBsaWI9IiRTVFJJUCAteCIKKyAgICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKK2VjaG8gIiR7RUNIT19UfXllcyIgPiY2OyB9CisgICAgICAgZWxzZQorICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KK2ZpCisgICAgICAgOzsKKyAgICopCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorICAgIDs7CisgIGVzYWMKK2ZpCisKK2lmIHRlc3QgIngkZW5hYmxlX2Rsb3BlbiIgIT0geHllczsgdGhlbgorICBlbmFibGVfZGxvcGVuPXVua25vd24KKyAgZW5hYmxlX2Rsb3Blbl9zZWxmPXVua25vd24KKyAgZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz11bmtub3duCitlbHNlCisgIGx0X2N2X2Rsb3Blbj1ubworICBsdF9jdl9kbG9wZW5fbGlicz0KKworICBjYXNlICRob3N0X29zIGluCisgIGJlb3MqKQorICAgIGx0X2N2X2Rsb3Blbj0ibG9hZF9hZGRfb24iCisgICAgbHRfY3ZfZGxvcGVuX2xpYnM9CisgICAgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzCisgICAgOzsKKworICBtaW5ndyogfCBwdzMyKikKKyAgICBsdF9jdl9kbG9wZW49IkxvYWRMaWJyYXJ5IgorICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgOzsKKworICBjeWd3aW4qKQorICAgIGx0X2N2X2Rsb3Blbj0iZGxvcGVuIgorICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgOzsKKworICBkYXJ3aW4qKQorICAjIGlmIGxpYmRsIGlzIGluc3RhbGxlZCB3ZSBuZWVkIHRvIGxpbmsgYWdhaW5zdCBpdAorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbC4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfbGliX2RsX2Rsb3BlbitzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGRsICAkTElCUyIKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGRsb3BlbiAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGRsb3BlbiAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgIGFjX2N2X2xpYl9kbF9kbG9wZW49eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19jdl9saWJfZGxfZGxvcGVuPW5vCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X2xpYl9kbF9kbG9wZW4gPSB5ZXM7IHRoZW4KKyAgbHRfY3ZfZGxvcGVuPSJkbG9wZW4iIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsIgorZWxzZQorCisgICAgbHRfY3ZfZGxvcGVuPSJkeWxkIgorICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgIGx0X2N2X2Rsb3Blbl9zZWxmPXllcworCitmaQorCisgICA7OworCisgICopCisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHNobF9sb2FkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHNobF9sb2FkLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9mdW5jX3NobF9sb2FkK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworLyogRGVmaW5lIHNobF9sb2FkIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgc2hsX2xvYWQuCisgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKyNkZWZpbmUgc2hsX2xvYWQgaW5ub2N1b3VzX3NobF9sb2FkCisKKy8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIHNobF9sb2FkICgpOyBiZWxvdy4KKyAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKworI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKworI3VuZGVmIHNobF9sb2FkCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgc2hsX2xvYWQgKCk7CisvKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCisgICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKKyAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KKyNpZiBkZWZpbmVkIF9fc3R1Yl9zaGxfbG9hZCB8fCBkZWZpbmVkIF9fc3R1Yl9fX3NobF9sb2FkCitjaG9rZSBtZQorI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHNobF9sb2FkICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgYWNfY3ZfZnVuY19zaGxfbG9hZD15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX2N2X2Z1bmNfc2hsX2xvYWQ9bm8KK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfc2hsX2xvYWQiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2Z1bmNfc2hsX2xvYWQiID4mNjsgfQoraWYgdGVzdCAkYWNfY3ZfZnVuY19zaGxfbG9hZCA9IHllczsgdGhlbgorICBsdF9jdl9kbG9wZW49InNobF9sb2FkIgorZWxzZQorICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc2hsX2xvYWQgaW4gLWxkbGQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc2hsX2xvYWQgaW4gLWxkbGQuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9kbGRfc2hsX2xvYWQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxkbGQgICRMSUJTIgorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgc2hsX2xvYWQgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBzaGxfbG9hZCAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgIGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQ9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19jdl9saWJfZGxkX3NobF9sb2FkPW5vCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfZGxkX3NobF9sb2FkIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfZGxkX3NobF9sb2FkIiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQgPSB5ZXM7IHRoZW4KKyAgbHRfY3ZfZGxvcGVuPSJzaGxfbG9hZCIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1kbGQiCitlbHNlCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBkbG9wZW4iID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZGxvcGVuLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9mdW5jX2Rsb3BlbitzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy8qIERlZmluZSBkbG9wZW4gdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyBkbG9wZW4uCisgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKyNkZWZpbmUgZGxvcGVuIGlubm9jdW91c19kbG9wZW4KKworLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgZGxvcGVuICgpOyBiZWxvdy4KKyAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKworI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKworI3VuZGVmIGRsb3BlbgorCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGRsb3BlbiAoKTsKKy8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKKyAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAorICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworI2lmIGRlZmluZWQgX19zdHViX2Rsb3BlbiB8fCBkZWZpbmVkIF9fc3R1Yl9fX2Rsb3BlbgorY2hva2UgbWUKKyNlbmRpZgorCitpbnQKK21haW4gKCkKK3sKK3JldHVybiBkbG9wZW4gKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKyAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorICBhY19jdl9mdW5jX2Rsb3Blbj15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX2N2X2Z1bmNfZGxvcGVuPW5vCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX2Rsb3BlbiIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY19kbG9wZW4iID4mNjsgfQoraWYgdGVzdCAkYWNfY3ZfZnVuY19kbG9wZW4gPSB5ZXM7IHRoZW4KKyAgbHRfY3ZfZGxvcGVuPSJkbG9wZW4iCitlbHNlCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbC4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfbGliX2RsX2Rsb3BlbitzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGRsICAkTElCUyIKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGRsb3BlbiAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGRsb3BlbiAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgIGFjX2N2X2xpYl9kbF9kbG9wZW49eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19jdl9saWJfZGxfZGxvcGVuPW5vCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X2xpYl9kbF9kbG9wZW4gPSB5ZXM7IHRoZW4KKyAgbHRfY3ZfZGxvcGVuPSJkbG9wZW4iIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsIgorZWxzZQorICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sc3ZsZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxzdmxkLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9saWJfc3ZsZF9kbG9wZW4rc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxzdmxkICAkTElCUyIKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGRsb3BlbiAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGRsb3BlbiAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgIGFjX2N2X2xpYl9zdmxkX2Rsb3Blbj15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX2N2X2xpYl9zdmxkX2Rsb3Blbj1ubworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX3N2bGRfZGxvcGVuIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfc3ZsZF9kbG9wZW4iID4mNjsgfQoraWYgdGVzdCAkYWNfY3ZfbGliX3N2bGRfZGxvcGVuID0geWVzOyB0aGVuCisgIGx0X2N2X2Rsb3Blbj0iZGxvcGVuIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxzdmxkIgorZWxzZQorICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZGxkX2xpbmsgaW4gLWxkbGQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZGxkX2xpbmsgaW4gLWxkbGQuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9kbGRfZGxkX2xpbmsrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxkbGQgICRMSUJTIgorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZGxkX2xpbmsgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBkbGRfbGluayAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgIGFjX2N2X2xpYl9kbGRfZGxkX2xpbms9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19jdl9saWJfZGxkX2RsZF9saW5rPW5vCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfZGxkX2RsZF9saW5rIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfZGxkX2RsZF9saW5rIiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X2xpYl9kbGRfZGxkX2xpbmsgPSB5ZXM7IHRoZW4KKyAgbHRfY3ZfZGxvcGVuPSJkbGRfbGluayIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1kbGQiCitmaQorCisKK2ZpCisKKworZmkKKworCitmaQorCisKK2ZpCisKKworZmkKKworICAgIDs7CisgIGVzYWMKKworICBpZiB0ZXN0ICJ4JGx0X2N2X2Rsb3BlbiIgIT0geG5vOyB0aGVuCisgICAgZW5hYmxlX2Rsb3Blbj15ZXMKKyAgZWxzZQorICAgIGVuYWJsZV9kbG9wZW49bm8KKyAgZmkKKworICBjYXNlICRsdF9jdl9kbG9wZW4gaW4KKyAgZGxvcGVuKQorICAgIHNhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKyAgICB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9kbGZjbl9oIiA9IHh5ZXMgJiYgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtREhBVkVfRExGQ05fSCIKKworICAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisgICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBMREZMQUdTPVwiXCRMREZMQUdTICRleHBvcnRfZHluYW1pY19mbGFnX3NwZWNcIgorCisgICAgc2F2ZV9MSUJTPSIkTElCUyIKKyAgICBMSUJTPSIkbHRfY3ZfZGxvcGVuX2xpYnMgJExJQlMiCisKKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIGEgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZiIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgYSBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9kbG9wZW5fc2VsZitzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICAJICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIGx0X2N2X2Rsb3Blbl9zZWxmPWNyb3NzCitlbHNlCisgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKKyAgbHRfc3RhdHVzPSRsdF9kbHVua25vd24KKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMjI1MjUgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaWYgSEFWRV9ETEZDTl9ICisjaW5jbHVkZSA8ZGxmY24uaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lmZGVmIFJUTERfR0xPQkFMCisjICBkZWZpbmUgTFRfRExHTE9CQUwJCVJUTERfR0xPQkFMCisjZWxzZQorIyAgaWZkZWYgRExfR0xPQkFMCisjICAgIGRlZmluZSBMVF9ETEdMT0JBTAkJRExfR0xPQkFMCisjICBlbHNlCisjICAgIGRlZmluZSBMVF9ETEdMT0JBTAkJMAorIyAgZW5kaWYKKyNlbmRpZgorCisvKiBXZSBtYXkgaGF2ZSB0byBkZWZpbmUgTFRfRExMQVpZX09SX05PVyBpbiB0aGUgY29tbWFuZCBsaW5lIGlmIHdlCisgICBmaW5kIG91dCBpdCBkb2VzIG5vdCB3b3JrIGluIHNvbWUgcGxhdGZvcm0uICovCisjaWZuZGVmIExUX0RMTEFaWV9PUl9OT1cKKyMgIGlmZGVmIFJUTERfTEFaWQorIyAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkJUlRMRF9MQVpZCisjICBlbHNlCisjICAgIGlmZGVmIERMX0xBWlkKKyMgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkJRExfTEFaWQorIyAgICBlbHNlCisjICAgICAgaWZkZWYgUlRMRF9OT1cKKyMgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCVJUTERfTk9XCisjICAgICAgZWxzZQorIyAgICAgICAgaWZkZWYgRExfTk9XCisjICAgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCURMX05PVworIyAgICAgICAgZWxzZQorIyAgICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkwCisjICAgICAgICBlbmRpZgorIyAgICAgIGVuZGlmCisjICAgIGVuZGlmCisjICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB2b2lkIGV4aXQgKGludCk7CisjZW5kaWYKKwordm9pZCBmbm9yZCgpIHsgaW50IGk9NDI7fQoraW50IG1haW4gKCkKK3sKKyAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CisgIGludCBzdGF0dXMgPSAkbHRfZGx1bmtub3duOworCisgIGlmIChzZWxmKQorICAgIHsKKyAgICAgIGlmIChkbHN5bSAoc2VsZiwiZm5vcmQiKSkgICAgICAgc3RhdHVzID0gJGx0X2Rsbm9fdXNjb3JlOworICAgICAgZWxzZSBpZiAoZGxzeW0oIHNlbGYsIl9mbm9yZCIpKSBzdGF0dXMgPSAkbHRfZGxuZWVkX3VzY29yZTsKKyAgICAgIC8qIGRsY2xvc2UgKHNlbGYpOyAqLworICAgIH0KKyAgZWxzZQorICAgIHB1dHMgKGRsZXJyb3IgKCkpOworCisgICAgZXhpdCAoc3RhdHVzKTsKK30KK0VPRgorICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAyPi9kZXYvbnVsbDsgdGhlbgorICAgICguL2NvbmZ0ZXN0OyBleGl0OyApID4mNSAyPi9kZXYvbnVsbAorICAgIGx0X3N0YXR1cz0kPworICAgIGNhc2UgeCRsdF9zdGF0dXMgaW4KKyAgICAgIHgkbHRfZGxub191c2NvcmUpIGx0X2N2X2Rsb3Blbl9zZWxmPXllcyA7OworICAgICAgeCRsdF9kbG5lZWRfdXNjb3JlKSBsdF9jdl9kbG9wZW5fc2VsZj15ZXMgOzsKKyAgICAgIHgkbHRfZGx1bmtub3dufHgqKSBsdF9jdl9kbG9wZW5fc2VsZj1ubyA7OworICAgIGVzYWMKKyAgZWxzZSA6CisgICAgIyBjb21waWxhdGlvbiBmYWlsZWQKKyAgICBsdF9jdl9kbG9wZW5fc2VsZj1ubworICBmaQorZmkKK3JtIC1mciBjb25mdGVzdCoKKworCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfZGxvcGVuX3NlbGYiID4mNQorZWNobyAiJHtFQ0hPX1R9JGx0X2N2X2Rsb3Blbl9zZWxmIiA+JjY7IH0KKworICAgIGlmIHRlc3QgIngkbHRfY3ZfZGxvcGVuX3NlbGYiID0geHllczsgdGhlbgorICAgICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBMREZMQUdTPVwiXCRMREZMQUdTICRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY1wiCisgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIGEgc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZiIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgYSBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgCSAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9Y3Jvc3MKK2Vsc2UKKyAgbHRfZGx1bmtub3duPTA7IGx0X2Rsbm9fdXNjb3JlPTE7IGx0X2RsbmVlZF91c2NvcmU9MgorICBsdF9zdGF0dXM9JGx0X2RsdW5rbm93bgorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSAyMjYyNSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpZiBIQVZFX0RMRkNOX0gKKyNpbmNsdWRlIDxkbGZjbi5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaWZkZWYgUlRMRF9HTE9CQUwKKyMgIGRlZmluZSBMVF9ETEdMT0JBTAkJUlRMRF9HTE9CQUwKKyNlbHNlCisjICBpZmRlZiBETF9HTE9CQUwKKyMgICAgZGVmaW5lIExUX0RMR0xPQkFMCQlETF9HTE9CQUwKKyMgIGVsc2UKKyMgICAgZGVmaW5lIExUX0RMR0xPQkFMCQkwCisjICBlbmRpZgorI2VuZGlmCisKKy8qIFdlIG1heSBoYXZlIHRvIGRlZmluZSBMVF9ETExBWllfT1JfTk9XIGluIHRoZSBjb21tYW5kIGxpbmUgaWYgd2UKKyAgIGZpbmQgb3V0IGl0IGRvZXMgbm90IHdvcmsgaW4gc29tZSBwbGF0Zm9ybS4gKi8KKyNpZm5kZWYgTFRfRExMQVpZX09SX05PVworIyAgaWZkZWYgUlRMRF9MQVpZCisjICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCQlSVExEX0xBWlkKKyMgIGVsc2UKKyMgICAgaWZkZWYgRExfTEFaWQorIyAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCQlETF9MQVpZCisjICAgIGVsc2UKKyMgICAgICBpZmRlZiBSVExEX05PVworIyAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJUlRMRF9OT1cKKyMgICAgICBlbHNlCisjICAgICAgICBpZmRlZiBETF9OT1cKKyMgICAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJRExfTk9XCisjICAgICAgICBlbHNlCisjICAgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCTAKKyMgICAgICAgIGVuZGlmCisjICAgICAgZW5kaWYKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHZvaWQgZXhpdCAoaW50KTsKKyNlbmRpZgorCit2b2lkIGZub3JkKCkgeyBpbnQgaT00Mjt9CitpbnQgbWFpbiAoKQoreworICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKKyAgaW50IHN0YXR1cyA9ICRsdF9kbHVua25vd247CisKKyAgaWYgKHNlbGYpCisgICAgeworICAgICAgaWYgKGRsc3ltIChzZWxmLCJmbm9yZCIpKSAgICAgICBzdGF0dXMgPSAkbHRfZGxub191c2NvcmU7CisgICAgICBlbHNlIGlmIChkbHN5bSggc2VsZiwiX2Zub3JkIikpIHN0YXR1cyA9ICRsdF9kbG5lZWRfdXNjb3JlOworICAgICAgLyogZGxjbG9zZSAoc2VsZik7ICovCisgICAgfQorICBlbHNlCisgICAgcHV0cyAoZGxlcnJvciAoKSk7CisKKyAgICBleGl0IChzdGF0dXMpOworfQorRU9GCisgIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9IDI+L2Rldi9udWxsOyB0aGVuCisgICAgKC4vY29uZnRlc3Q7IGV4aXQ7ICkgPiY1IDI+L2Rldi9udWxsCisgICAgbHRfc3RhdHVzPSQ/CisgICAgY2FzZSB4JGx0X3N0YXR1cyBpbgorICAgICAgeCRsdF9kbG5vX3VzY29yZSkgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPXllcyA7OworICAgICAgeCRsdF9kbG5lZWRfdXNjb3JlKSBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9eWVzIDs7CisgICAgICB4JGx0X2RsdW5rbm93bnx4KikgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPW5vIDs7CisgICAgZXNhYworICBlbHNlIDoKKyAgICAjIGNvbXBpbGF0aW9uIGZhaWxlZAorICAgIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz1ubworICBmaQorZmkKK3JtIC1mciBjb25mdGVzdCoKKworCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMiID4mNjsgfQorICAgIGZpCisKKyAgICBDUFBGTEFHUz0iJHNhdmVfQ1BQRkxBR1MiCisgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKyAgICBMSUJTPSIkc2F2ZV9MSUJTIgorICAgIDs7CisgIGVzYWMKKworICBjYXNlICRsdF9jdl9kbG9wZW5fc2VsZiBpbgorICB5ZXN8bm8pIGVuYWJsZV9kbG9wZW5fc2VsZj0kbHRfY3ZfZGxvcGVuX3NlbGYgOzsKKyAgKikgZW5hYmxlX2Rsb3Blbl9zZWxmPXVua25vd24gOzsKKyAgZXNhYworCisgIGNhc2UgJGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYyBpbgorICB5ZXN8bm8pIGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9JGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYyA7OworICAqKSBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPXVua25vd24gOzsKKyAgZXNhYworZmkKKworCisjIFJlcG9ydCB3aGljaCBsaWJyYXJ5IHR5cGVzIHdpbGwgYWN0dWFsbHkgYmUgYnVpbHQKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4uLiAkRUNIT19DIiA+JjY7IH0KK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGNhbl9idWlsZF9zaGFyZWQiID4mNQorZWNobyAiJHtFQ0hPX1R9JGNhbl9idWlsZF9zaGFyZWQiID4mNjsgfQorCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMuLi4gJEVDSE9fQyIgPiY2OyB9Cit0ZXN0ICIkY2FuX2J1aWxkX3NoYXJlZCIgPSAibm8iICYmIGVuYWJsZV9zaGFyZWQ9bm8KKworIyBPbiBBSVgsIHNoYXJlZCBsaWJyYXJpZXMgYW5kIHN0YXRpYyBsaWJyYXJpZXMgdXNlIHRoZSBzYW1lIG5hbWVzcGFjZSwgYW5kCisjIGFyZSBhbGwgYnVpbHQgZnJvbSBQSUMuCitjYXNlICRob3N0X29zIGluCithaXgzKikKKyAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KKyAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgICBhcmNoaXZlX2NtZHM9IiRhcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRsaWIiCisgICAgcG9zdGluc3RhbGxfY21kcz0nJFJBTkxJQiAkbGliJworICBmaQorICA7OworCithaXg0KiB8IGFpeDUqKQorICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQgJiYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0gbm8gOyB0aGVuCisgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KKyAgZmkKKyAgICA7OworZXNhYworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkZW5hYmxlX3NoYXJlZCIgPiY1CitlY2hvICIke0VDSE9fVH0kZW5hYmxlX3NoYXJlZCIgPiY2OyB9CisKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcy4uLiAkRUNIT19DIiA+JjY7IH0KKyMgTWFrZSBzdXJlIGVpdGhlciBlbmFibGVfc2hhcmVkIG9yIGVuYWJsZV9zdGF0aWMgaXMgeWVzLgordGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzIHx8IGVuYWJsZV9zdGF0aWM9eWVzCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRlbmFibGVfc3RhdGljIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRlbmFibGVfc3RhdGljIiA+JjY7IH0KKworIyBUaGUgZWxzZSBjbGF1c2Ugc2hvdWxkIG9ubHkgZmlyZSB3aGVuIGJvb3RzdHJhcHBpbmcgdGhlCisjIGxpYnRvb2wgZGlzdHJpYnV0aW9uLCBvdGhlcndpc2UgeW91IGZvcmdvdCB0byBzaGlwIGx0bWFpbi5zaAorIyB3aXRoIHlvdXIgcGFja2FnZSwgYW5kIHlvdSB3aWxsIGdldCBjb21wbGFpbnRzIHRoYXQgdGhlcmUgYXJlCisjIG5vIHJ1bGVzIHRvIGdlbmVyYXRlIGx0bWFpbi5zaC4KK2lmIHRlc3QgLWYgIiRsdG1haW4iOyB0aGVuCisgICMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB3aGljaCBhbGxvdyBvdXIgY29tbWFuZHMgdGhyb3VnaAorICAjIHdpdGhvdXQgcmVtb3ZhbCBvZiBcIGVzY2FwZXMuCisgIGlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgOyB0aGVuCisgICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKKyAgZmkKKyAgIyBOb3cgcXVvdGUgYWxsIHRoZSB0aGluZ3MgdGhhdCBtYXkgY29udGFpbiBtZXRhY2hhcmFjdGVycyB3aGlsZSBiZWluZworICAjIGNhcmVmdWwgbm90IHRvIG92ZXJxdW90ZSB0aGUgQUNfU1VCU1RlZCB2YWx1ZXMuICBXZSB0YWtlIGNvcGllcyBvZiB0aGUKKyAgIyB2YXJpYWJsZXMgYW5kIHF1b3RlIHRoZSBjb3BpZXMgZm9yIGdlbmVyYXRpb24gb2YgdGhlIGxpYnRvb2wgc2NyaXB0LgorICBmb3IgdmFyIGluIGVjaG8gb2xkX0NDIG9sZF9DRkxBR1MgQVIgQVJfRkxBR1MgRUdSRVAgUkFOTElCIExOX1MgTFRDQyBMVENGTEFHUyBOTSBcCisgICAgU0VEIFNIRUxMIFNUUklQIFwKKyAgICBsaWJuYW1lX3NwZWMgbGlicmFyeV9uYW1lc19zcGVjIHNvbmFtZV9zcGVjIGV4dHJhY3RfZXhwc3ltc19jbWRzIFwKKyAgICBvbGRfc3RyaXBsaWIgc3RyaXBsaWIgZmlsZV9tYWdpY19jbWQgZmluaXNoX2NtZHMgZmluaXNoX2V2YWwgXAorICAgIGRlcGxpYnNfY2hlY2tfbWV0aG9kIHJlbG9hZF9mbGFnIHJlbG9hZF9jbWRzIG5lZWRfbG9ja3MgXAorICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wgXAorICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIFwKKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMgXAorICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzIG9sZF9wb3N0dW5pbnN0YWxsX2NtZHMgXAorICAgIGNvbXBpbGVyIFwKKyAgICBDQyBcCisgICAgTEQgXAorICAgIGx0X3Byb2dfY29tcGlsZXJfd2wgXAorICAgIGx0X3Byb2dfY29tcGlsZXJfcGljIFwKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyBcCisgICAgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcgXAorICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYyBcCisgICAgdGhyZWFkX3NhZmVfZmxhZ19zcGVjIFwKKyAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyBcCisgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcyBcCisgICAgb2xkX2FyY2hpdmVfY21kcyBcCisgICAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcyBcCisgICAgcHJlZGVwX29iamVjdHMgXAorICAgIHBvc3RkZXBfb2JqZWN0cyBcCisgICAgcHJlZGVwcyBcCisgICAgcG9zdGRlcHMgXAorICAgIGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCBcCisgICAgYXJjaGl2ZV9jbWRzIFwKKyAgICBhcmNoaXZlX2V4cHN5bV9jbWRzIFwKKyAgICBwb3N0aW5zdGFsbF9jbWRzIFwKKyAgICBwb3N0dW5pbnN0YWxsX2NtZHMgXAorICAgIG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzIFwKKyAgICBhbGxvd191bmRlZmluZWRfZmxhZyBcCisgICAgbm9fdW5kZWZpbmVkX2ZsYWcgXAorICAgIGV4cG9ydF9zeW1ib2xzX2NtZHMgXAorICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgXAorICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQgXAorICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgXAorICAgIGhhcmRjb2RlX2F1dG9tYXRpYyBcCisgICAgbW9kdWxlX2NtZHMgXAorICAgIG1vZHVsZV9leHBzeW1fY21kcyBcCisgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX28gXAorICAgIGV4Y2x1ZGVfZXhwc3ltcyBcCisgICAgaW5jbHVkZV9leHBzeW1zOyBkbworCisgICAgY2FzZSAkdmFyIGluCisgICAgb2xkX2FyY2hpdmVfY21kcyB8IFwKKyAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzIHwgXAorICAgIGFyY2hpdmVfY21kcyB8IFwKKyAgICBhcmNoaXZlX2V4cHN5bV9jbWRzIHwgXAorICAgIG1vZHVsZV9jbWRzIHwgXAorICAgIG1vZHVsZV9leHBzeW1fY21kcyB8IFwKKyAgICBvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcyB8IFwKKyAgICBleHBvcnRfc3ltYm9sc19jbWRzIHwgXAorICAgIGV4dHJhY3RfZXhwc3ltc19jbWRzIHwgcmVsb2FkX2NtZHMgfCBmaW5pc2hfY21kcyB8IFwKKyAgICBwb3N0aW5zdGFsbF9jbWRzIHwgcG9zdHVuaW5zdGFsbF9jbWRzIHwgXAorICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzIHwgb2xkX3Bvc3R1bmluc3RhbGxfY21kcyB8IFwKKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgfCBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYykKKyAgICAgICMgRG91YmxlLXF1b3RlIGRvdWJsZS1ldmFsZWQgc3RyaW5ncy4KKyAgICAgIGV2YWwgImx0XyR2YXI9XFxcIlxgXCRlY2hvIFwiWFwkJHZhclwiIHwgXCRYc2VkIC1lIFwiXCRkb3VibGVfcXVvdGVfc3Vic3RcIiAtZSBcIlwkc2VkX3F1b3RlX3N1YnN0XCIgLWUgXCJcJGRlbGF5X3ZhcmlhYmxlX3N1YnN0XCJcYFxcXCIiCisgICAgICA7OworICAgICopCisgICAgICBldmFsICJsdF8kdmFyPVxcXCJcYFwkZWNobyBcIlhcJCR2YXJcIiB8IFwkWHNlZCAtZSBcIlwkc2VkX3F1b3RlX3N1YnN0XCJcYFxcXCIiCisgICAgICA7OworICAgIGVzYWMKKyAgZG9uZQorCisgIGNhc2UgJGx0X2VjaG8gaW4KKyAgKidcJDAgLS1mYWxsYmFjay1lY2hvIicpCisgICAgbHRfZWNobz1gJGVjaG8gIlgkbHRfZWNobyIgfCAkWHNlZCAtZSAncy9cXFxcXFxcJDAgLS1mYWxsYmFjay1lY2hvIiQvJDAgLS1mYWxsYmFjay1lY2hvIi8nYAorICAgIDs7CisgIGVzYWMKKworY2ZnZmlsZT0iJHtvZmlsZX1UIgorICB0cmFwICIkcm0gXCIkY2ZnZmlsZVwiOyBleGl0IDEiIDEgMiAxNQorICAkcm0gLWYgIiRjZmdmaWxlIgorICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjcmVhdGluZyAkb2ZpbGUiID4mNQorZWNobyAiJGFzX21lOiBjcmVhdGluZyAkb2ZpbGUiID4mNjt9CisKKyAgY2F0IDw8X19FT0ZfXyA+PiAiJGNmZ2ZpbGUiCisjISAkU0hFTEwKKworIyBgJGVjaG8gIiRjZmdmaWxlIiB8IHNlZCAncyVeLiovJSUnYCAtIFByb3ZpZGUgZ2VuZXJhbGl6ZWQgbGlicmFyeS1idWlsZGluZyBzdXBwb3J0IHNlcnZpY2VzLgorIyBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFICRWRVJTSU9OJFRJTUVTVEFNUCkKKyMgTk9URTogQ2hhbmdlcyBtYWRlIHRvIHRoaXMgZmlsZSB3aWxsIGJlIGxvc3Q6IGxvb2sgYXQgbHRtYWluLnNoLgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEKKyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBMaWJ0b29sOgorIyBPcmlnaW5hbGx5IGJ5IEdvcmRvbiBNYXR6aWdrZWl0IDxnb3JkQGdudS5haS5taXQuZWR1PiwgMTk5NgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyMKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKKyMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKyMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCisjIEEgc2VkIHByb2dyYW0gdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXQuCitTRUQ9JGx0X1NFRAorCisjIFNlZCB0aGF0IGhlbHBzIHVzIGF2b2lkIGFjY2lkZW50YWxseSB0cmlnZ2VyaW5nIGVjaG8oMSkgb3B0aW9ucyBsaWtlIC1uLgorWHNlZD0iJFNFRCAtZSAxcy9eWC8vIgorCisjIFRoZSBIUC1VWCBrc2ggYW5kIFBPU0lYIHNoZWxsIHByaW50IHRoZSB0YXJnZXQgZGlyZWN0b3J5IHRvIHN0ZG91dAorIyBpZiBDRFBBVEggaXMgc2V0LgorKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAorCisjIFRoZSBuYW1lcyBvZiB0aGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHN1cHBvcnRlZCBieSB0aGlzIHNjcmlwdC4KK2F2YWlsYWJsZV90YWdzPQorCisjICMjIyBCRUdJTiBMSUJUT09MIENPTkZJRworCisjIExpYnRvb2wgd2FzIGNvbmZpZ3VyZWQgb24gaG9zdCBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWA6CisKKyMgU2hlbGwgdG8gdXNlIHdoZW4gaW52b2tpbmcgc2hlbGwgc2NyaXB0cy4KK1NIRUxMPSRsdF9TSEVMTAorCisjIFdoZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMuCitidWlsZF9saWJ0b29sX2xpYnM9JGVuYWJsZV9zaGFyZWQKKworIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzLgorYnVpbGRfb2xkX2xpYnM9JGVuYWJsZV9zdGF0aWMKKworIyBXaGV0aGVyIG9yIG5vdCB0byBhZGQgLWxjIGZvciBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzLgorYnVpbGRfbGlidG9vbF9uZWVkX2xjPSRhcmNoaXZlX2NtZHNfbmVlZF9sYworCisjIFdoZXRoZXIgb3Igbm90IHRvIGRpc2FsbG93IHNoYXJlZCBsaWJzIHdoZW4gcnVudGltZSBsaWJzIGFyZSBzdGF0aWMKK2FsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcz0kZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcworCisjIFdoZXRoZXIgb3Igbm90IHRvIG9wdGltaXplIGZvciBmYXN0IGluc3RhbGxhdGlvbi4KK2Zhc3RfaW5zdGFsbD0kZW5hYmxlX2Zhc3RfaW5zdGFsbAorCisjIFRoZSBob3N0IHN5c3RlbS4KK2hvc3RfYWxpYXM9JGhvc3RfYWxpYXMKK2hvc3Q9JGhvc3QKK2hvc3Rfb3M9JGhvc3Rfb3MKKworIyBUaGUgYnVpbGQgc3lzdGVtLgorYnVpbGRfYWxpYXM9JGJ1aWxkX2FsaWFzCitidWlsZD0kYnVpbGQKK2J1aWxkX29zPSRidWlsZF9vcworCisjIEFuIGVjaG8gcHJvZ3JhbSB0aGF0IGRvZXMgbm90IGludGVycHJldCBiYWNrc2xhc2hlcy4KK2VjaG89JGx0X2VjaG8KKworIyBUaGUgYXJjaGl2ZXIuCitBUj0kbHRfQVIKK0FSX0ZMQUdTPSRsdF9BUl9GTEFHUworCisjIEEgQyBjb21waWxlci4KK0xUQ0M9JGx0X0xUQ0MKKworIyBMVENDIGNvbXBpbGVyIGZsYWdzLgorTFRDRkxBR1M9JGx0X0xUQ0ZMQUdTCisKKyMgQSBsYW5ndWFnZS1zcGVjaWZpYyBjb21waWxlci4KK0NDPSRsdF9jb21waWxlcgorCisjIElzIHRoZSBjb21waWxlciB0aGUgR05VIEMgY29tcGlsZXI/Cit3aXRoX2djYz0kR0NDCisKKyMgQW4gRVJFIG1hdGNoZXIuCitFR1JFUD0kbHRfRUdSRVAKKworIyBUaGUgbGlua2VyIHVzZWQgdG8gYnVpbGQgbGlicmFyaWVzLgorTEQ9JGx0X0xECisKKyMgV2hldGhlciB3ZSBuZWVkIGhhcmQgb3Igc29mdCBsaW5rcy4KK0xOX1M9JGx0X0xOX1MKKworIyBBIEJTRC1jb21wYXRpYmxlIG5tIHByb2dyYW0uCitOTT0kbHRfTk0KKworIyBBIHN5bWJvbCBzdHJpcHBpbmcgcHJvZ3JhbQorU1RSSVA9JGx0X1NUUklQCisKKyMgVXNlZCB0byBleGFtaW5lIGxpYnJhcmllcyB3aGVuIGZpbGVfbWFnaWNfY21kIGJlZ2lucyAiZmlsZSIKK01BR0lDX0NNRD0kTUFHSUNfQ01ECisKKyMgVXNlZCBvbiBjeWd3aW46IERMTCBjcmVhdGlvbiBwcm9ncmFtLgorRExMVE9PTD0iJERMTFRPT0wiCisKKyMgVXNlZCBvbiBjeWd3aW46IG9iamVjdCBkdW1wZXIuCitPQkpEVU1QPSIkT0JKRFVNUCIKKworIyBVc2VkIG9uIGN5Z3dpbjogYXNzZW1ibGVyLgorQVM9IiRBUyIKKworIyBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXMuCitvYmpkaXI9JG9iamRpcgorCisjIEhvdyB0byBjcmVhdGUgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMuCityZWxvYWRfZmxhZz0kbHRfcmVsb2FkX2ZsYWcKK3JlbG9hZF9jbWRzPSRsdF9yZWxvYWRfY21kcworCisjIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCit3bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bAorCisjIE9iamVjdCBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIm8iKS4KK29iamV4dD0iJGFjX29iamV4dCIKKworIyBPbGQgYXJjaGl2ZSBzdWZmaXggKG5vcm1hbGx5ICJhIikuCitsaWJleHQ9IiRsaWJleHQiCisKKyMgU2hhcmVkIGxpYnJhcnkgc3VmZml4IChub3JtYWxseSAiLnNvIikuCitzaHJleHRfY21kcz0nJHNocmV4dF9jbWRzJworCisjIEV4ZWN1dGFibGUgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICIiKS4KK2V4ZWV4dD0iJGV4ZWV4dCIKKworIyBBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHMuCitwaWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9waWMKK3BpY19tb2RlPSRwaWNfbW9kZQorCisjIFdoYXQgaXMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgY29tbWFuZD8KK21heF9jbWRfbGVuPSRsdF9jdl9zeXNfbWF4X2NtZF9sZW4KKworIyBEb2VzIGNvbXBpbGVyIHNpbXVsdGFuZW91c2x5IHN1cHBvcnQgLWMgYW5kIC1vIG9wdGlvbnM/Citjb21waWxlcl9jX289JGx0X2x0X2N2X3Byb2dfY29tcGlsZXJfY19vCisKKyMgTXVzdCB3ZSBsb2NrIGZpbGVzIHdoZW4gZG9pbmcgY29tcGlsYXRpb24/CituZWVkX2xvY2tzPSRsdF9uZWVkX2xvY2tzCisKKyMgRG8gd2UgbmVlZCB0aGUgbGliIHByZWZpeCBmb3IgbW9kdWxlcz8KK25lZWRfbGliX3ByZWZpeD0kbmVlZF9saWJfcHJlZml4CisKKyMgRG8gd2UgbmVlZCBhIHZlcnNpb24gZm9yIGxpYnJhcmllcz8KK25lZWRfdmVyc2lvbj0kbmVlZF92ZXJzaW9uCisKKyMgV2hldGhlciBkbG9wZW4gaXMgc3VwcG9ydGVkLgorZGxvcGVuX3N1cHBvcnQ9JGVuYWJsZV9kbG9wZW4KKworIyBXaGV0aGVyIGRsb3BlbiBvZiBwcm9ncmFtcyBpcyBzdXBwb3J0ZWQuCitkbG9wZW5fc2VsZj0kZW5hYmxlX2Rsb3Blbl9zZWxmCisKKyMgV2hldGhlciBkbG9wZW4gb2Ygc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkLgorZGxvcGVuX3NlbGZfc3RhdGljPSRlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljCisKKyMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KK2xpbmtfc3RhdGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfc3RhdGljCisKKyMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4KK25vX2J1aWx0aW5fZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcKKworIyBDb21waWxlciBmbGFnIHRvIGFsbG93IHJlZmxleGl2ZSBkbG9wZW5zLgorZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSRsdF9leHBvcnRfZHluYW1pY19mbGFnX3NwZWMKKworIyBDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHNoYXJlZCBvYmplY3RzIGRpcmVjdGx5IGZyb20gYXJjaGl2ZXMuCit3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0kbHRfd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMKKworIyBDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHRocmVhZC1zYWZlIG9iamVjdHMuCit0aHJlYWRfc2FmZV9mbGFnX3NwZWM9JGx0X3RocmVhZF9zYWZlX2ZsYWdfc3BlYworCisjIExpYnJhcnkgdmVyc2lvbmluZyB0eXBlLgordmVyc2lvbl90eXBlPSR2ZXJzaW9uX3R5cGUKKworIyBGb3JtYXQgb2YgbGlicmFyeSBuYW1lIHByZWZpeC4KK2xpYm5hbWVfc3BlYz0kbHRfbGlibmFtZV9zcGVjCisKKyMgTGlzdCBvZiBhcmNoaXZlIG5hbWVzLiAgRmlyc3QgbmFtZSBpcyB0aGUgcmVhbCBvbmUsIHRoZSByZXN0IGFyZSBsaW5rcy4KKyMgVGhlIGxhc3QgbmFtZSBpcyB0aGUgb25lIHRoYXQgdGhlIGxpbmtlciBmaW5kcyB3aXRoIC1sTkFNRS4KK2xpYnJhcnlfbmFtZXNfc3BlYz0kbHRfbGlicmFyeV9uYW1lc19zcGVjCisKKyMgVGhlIGNvZGVkIG5hbWUgb2YgdGhlIGxpYnJhcnksIGlmIGRpZmZlcmVudCBmcm9tIHRoZSByZWFsIG5hbWUuCitzb25hbWVfc3BlYz0kbHRfc29uYW1lX3NwZWMKKworIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuZCBpbnN0YWxsIGFuIG9sZC1zdHlsZSBhcmNoaXZlLgorUkFOTElCPSRsdF9SQU5MSUIKK29sZF9hcmNoaXZlX2NtZHM9JGx0X29sZF9hcmNoaXZlX2NtZHMKK29sZF9wb3N0aW5zdGFsbF9jbWRzPSRsdF9vbGRfcG9zdGluc3RhbGxfY21kcworb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0kbHRfb2xkX3Bvc3R1bmluc3RhbGxfY21kcworCisjIENyZWF0ZSBhbiBvbGQtc3R5bGUgYXJjaGl2ZSBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCitvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSRsdF9vbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzCisKKyMgQ3JlYXRlIGEgdGVtcG9yYXJ5IG9sZC1zdHlsZSBhcmNoaXZlIHRvIGxpbmsgaW5zdGVhZCBvZiBhIHNoYXJlZCBhcmNoaXZlLgorb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHM9JGx0X29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzCisKKyMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhbmQgaW5zdGFsbCBhIHNoYXJlZCBhcmNoaXZlLgorYXJjaGl2ZV9jbWRzPSRsdF9hcmNoaXZlX2NtZHMKK2FyY2hpdmVfZXhwc3ltX2NtZHM9JGx0X2FyY2hpdmVfZXhwc3ltX2NtZHMKK3Bvc3RpbnN0YWxsX2NtZHM9JGx0X3Bvc3RpbnN0YWxsX2NtZHMKK3Bvc3R1bmluc3RhbGxfY21kcz0kbHRfcG9zdHVuaW5zdGFsbF9jbWRzCisKKyMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIGxvYWRhYmxlIG1vZHVsZSAoYXNzdW1lZCBzYW1lIGFzIGFib3ZlIGlmIGVtcHR5KQorbW9kdWxlX2NtZHM9JGx0X21vZHVsZV9jbWRzCittb2R1bGVfZXhwc3ltX2NtZHM9JGx0X21vZHVsZV9leHBzeW1fY21kcworCisjIENvbW1hbmRzIHRvIHN0cmlwIGxpYnJhcmllcy4KK29sZF9zdHJpcGxpYj0kbHRfb2xkX3N0cmlwbGliCitzdHJpcGxpYj0kbHRfc3RyaXBsaWIKKworIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQorIyBzaGFyZWQgbGlicmFyeS4KK3ByZWRlcF9vYmplY3RzPSRsdF9wcmVkZXBfb2JqZWN0cworCisjIERlcGVuZGVuY2llcyB0byBwbGFjZSBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKKyMgc2hhcmVkIGxpYnJhcnkuCitwb3N0ZGVwX29iamVjdHM9JGx0X3Bvc3RkZXBfb2JqZWN0cworCisjIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCisjIHNoYXJlZCBsaWJyYXJ5LgorcHJlZGVwcz0kbHRfcHJlZGVwcworCisjIERlcGVuZGVuY2llcyB0byBwbGFjZSBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKKyMgc2hhcmVkIGxpYnJhcnkuCitwb3N0ZGVwcz0kbHRfcG9zdGRlcHMKKworIyBUaGUgbGlicmFyeSBzZWFyY2ggcGF0aCB1c2VkIGludGVybmFsbHkgYnkgdGhlIGNvbXBpbGVyIHdoZW4gbGlua2luZworIyBhIHNoYXJlZCBsaWJyYXJ5LgorY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoPSRsdF9jb21waWxlcl9saWJfc2VhcmNoX3BhdGgKKworIyBNZXRob2QgdG8gY2hlY2sgd2hldGhlciBkZXBlbmRlbnQgbGlicmFyaWVzIGFyZSBzaGFyZWQgb2JqZWN0cy4KK2RlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9kZXBsaWJzX2NoZWNrX21ldGhvZAorCisjIENvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPT0gZmlsZV9tYWdpYy4KK2ZpbGVfbWFnaWNfY21kPSRsdF9maWxlX21hZ2ljX2NtZAorCisjIEZsYWcgdGhhdCBhbGxvd3Mgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHVuZGVmaW5lZCBzeW1ib2xzIHRvIGJlIGJ1aWx0LgorYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGx0X2FsbG93X3VuZGVmaW5lZF9mbGFnCisKKyMgRmxhZyB0aGF0IGZvcmNlcyBubyB1bmRlZmluZWQgc3ltYm9scy4KK25vX3VuZGVmaW5lZF9mbGFnPSRsdF9ub191bmRlZmluZWRfZmxhZworCisjIENvbW1hbmRzIHVzZWQgdG8gZmluaXNoIGEgbGlidG9vbCBsaWJyYXJ5IGluc3RhbGxhdGlvbiBpbiBhIGRpcmVjdG9yeS4KK2ZpbmlzaF9jbWRzPSRsdF9maW5pc2hfY21kcworCisjIFNhbWUgYXMgYWJvdmUsIGJ1dCBhIHNpbmdsZSBzY3JpcHQgZnJhZ21lbnQgdG8gYmUgZXZhbGVkIGJ1dCBub3Qgc2hvd24uCitmaW5pc2hfZXZhbD0kbHRfZmluaXNoX2V2YWwKKworIyBUYWtlIHRoZSBvdXRwdXQgb2Ygbm0gYW5kIHByb2R1Y2UgYSBsaXN0aW5nIG9mIHJhdyBzeW1ib2xzIGFuZCBDIG5hbWVzLgorZ2xvYmFsX3N5bWJvbF9waXBlPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlCisKKyMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbgorZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wKKworIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIKK2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzCisKKyMgVGhpcyBpcyB0aGUgc2hhcmVkIGxpYnJhcnkgcnVudGltZSBwYXRoIHZhcmlhYmxlLgorcnVucGF0aF92YXI9JHJ1bnBhdGhfdmFyCisKKyMgVGhpcyBpcyB0aGUgc2hhcmVkIGxpYnJhcnkgcGF0aCB2YXJpYWJsZS4KK3NobGlicGF0aF92YXI9JHNobGlicGF0aF92YXIKKworIyBJcyBzaGxpYnBhdGggc2VhcmNoZWQgYmVmb3JlIHRoZSBoYXJkLWNvZGVkIGxpYnJhcnkgc2VhcmNoIHBhdGg/CitzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9JHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aAorCisjIEhvdyB0byBoYXJkY29kZSBhIHNoYXJlZCBsaWJyYXJ5IHBhdGggaW50byBhbiBleGVjdXRhYmxlLgoraGFyZGNvZGVfYWN0aW9uPSRoYXJkY29kZV9hY3Rpb24KKworIyBXaGV0aGVyIHdlIHNob3VsZCBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gbGlicmFyaWVzLgoraGFyZGNvZGVfaW50b19saWJzPSRoYXJkY29kZV9pbnRvX2xpYnMKKworIyBGbGFnIHRvIGhhcmRjb2RlIFwkbGliZGlyIGludG8gYSBiaW5hcnkgZHVyaW5nIGxpbmtpbmcuCisjIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgXCRsaWJkaXIgZG9lcyBub3QgZXhpc3QuCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSRsdF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjCisKKyMgSWYgbGQgaXMgdXNlZCB3aGVuIGxpbmtpbmcsIGZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50bworIyBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4gVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzCisjIG5vdCBleGlzdC4KK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9JGx0X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQKKworIyBXaGV0aGVyIHdlIG5lZWQgYSBzaW5nbGUgLXJwYXRoIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudC4KK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JGx0X2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IKKworIyBTZXQgdG8geWVzIGlmIHVzaW5nIERJUi9saWJOQU1FJHtzaGFyZWRfZXh0fSBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCisjIHJlc3VsdGluZyBiaW5hcnkuCitoYXJkY29kZV9kaXJlY3Q9JGhhcmRjb2RlX2RpcmVjdAorCisjIFNldCB0byB5ZXMgaWYgdXNpbmcgdGhlIC1MRElSIGZsYWcgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQorIyByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfbWludXNfTD0kaGFyZGNvZGVfbWludXNfTAorCisjIFNldCB0byB5ZXMgaWYgdXNpbmcgU0hMSUJQQVRIX1ZBUj1ESVIgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvCisjIHRoZSByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0kaGFyZGNvZGVfc2hsaWJwYXRoX3ZhcgorCisjIFNldCB0byB5ZXMgaWYgYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGhhcmRjb2RlcyBESVIgaW50byB0aGUgbGlicmFyeQorIyBhbmQgYWxsIHN1YnNlcXVlbnQgbGlicmFyaWVzIGFuZCBleGVjdXRhYmxlcyBsaW5rZWQgYWdhaW5zdCBpdC4KK2hhcmRjb2RlX2F1dG9tYXRpYz0kaGFyZGNvZGVfYXV0b21hdGljCisKKyMgVmFyaWFibGVzIHdob3NlIHZhbHVlcyBzaG91bGQgYmUgc2F2ZWQgaW4gbGlidG9vbCB3cmFwcGVyIHNjcmlwdHMgYW5kCisjIHJlc3RvcmVkIGF0IHJlbGluayB0aW1lLgordmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayIKKworIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCitsaW5rX2FsbF9kZXBsaWJzPSRsaW5rX2FsbF9kZXBsaWJzCisKKyMgQ29tcGlsZS10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzCitzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9JGx0X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYworCisjIFJ1bi10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzCitzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kbHRfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMKKworIyBGaXggdGhlIHNoZWxsIHZhcmlhYmxlIFwkc3JjZmlsZSBmb3IgdGhlIGNvbXBpbGVyLgorZml4X3NyY2ZpbGVfcGF0aD0iJGZpeF9zcmNmaWxlX3BhdGgiCisKKyMgU2V0IHRvIHllcyBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZC4KK2Fsd2F5c19leHBvcnRfc3ltYm9scz0kYWx3YXlzX2V4cG9ydF9zeW1ib2xzCisKKyMgVGhlIGNvbW1hbmRzIHRvIGxpc3QgZXhwb3J0ZWQgc3ltYm9scy4KK2V4cG9ydF9zeW1ib2xzX2NtZHM9JGx0X2V4cG9ydF9zeW1ib2xzX2NtZHMKKworIyBUaGUgY29tbWFuZHMgdG8gZXh0cmFjdCB0aGUgZXhwb3J0ZWQgc3ltYm9sIGxpc3QgZnJvbSBhIHNoYXJlZCBhcmNoaXZlLgorZXh0cmFjdF9leHBzeW1zX2NtZHM9JGx0X2V4dHJhY3RfZXhwc3ltc19jbWRzCisKKyMgU3ltYm9scyB0aGF0IHNob3VsZCBub3QgYmUgbGlzdGVkIGluIHRoZSBwcmVsb2FkZWQgc3ltYm9scy4KK2V4Y2x1ZGVfZXhwc3ltcz0kbHRfZXhjbHVkZV9leHBzeW1zCisKKyMgU3ltYm9scyB0aGF0IG11c3QgYWx3YXlzIGJlIGV4cG9ydGVkLgoraW5jbHVkZV9leHBzeW1zPSRsdF9pbmNsdWRlX2V4cHN5bXMKKworIyAjIyMgRU5EIExJQlRPT0wgQ09ORklHCisKK19fRU9GX18KKworCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgYWl4MyopCisgICAgY2F0IDw8XEVPRiA+PiAiJGNmZ2ZpbGUiCisKKyMgQUlYIHNvbWV0aW1lcyBoYXMgcHJvYmxlbXMgd2l0aCB0aGUgR0NDIGNvbGxlY3QyIHByb2dyYW0uICBGb3Igc29tZQorIyByZWFzb24sIGlmIHdlIHNldCB0aGUgQ09MTEVDVF9OQU1FUyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHByb2JsZW1zCisjIHZhbmlzaCBpbiBhIHB1ZmYgb2Ygc21va2UuCitpZiB0ZXN0ICJYJHtDT0xMRUNUX05BTUVTK3NldH0iICE9IFhzZXQ7IHRoZW4KKyAgQ09MTEVDVF9OQU1FUz0KKyAgZXhwb3J0IENPTExFQ1RfTkFNRVMKK2ZpCitFT0YKKyAgICA7OworICBlc2FjCisKKyAgIyBXZSB1c2Ugc2VkIGluc3RlYWQgb2YgY2F0IGJlY2F1c2UgYmFzaCBvbiBESkdQUCBnZXRzIGNvbmZ1c2VkIGlmCisgICMgaWYgZmluZHMgbWl4ZWQgQ1IvTEYgYW5kIExGLW9ubHkgbGluZXMuICBTaW5jZSBzZWQgb3BlcmF0ZXMgaW4KKyAgIyB0ZXh0IG1vZGUsIGl0IHByb3Blcmx5IGNvbnZlcnRzIGxpbmVzIHRvIENSL0xGLiAgVGhpcyBiYXNoIHByb2JsZW0KKyAgIyBpcyByZXBvcnRlZGx5IGZpeGVkLCBidXQgd2h5IG5vdCBydW4gb24gb2xkIHZlcnNpb25zIHRvbz8KKyAgc2VkICckcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKworICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8IFwKKyAgICAocm0gLWYgIiRvZmlsZSIgJiYgY3AgIiRjZmdmaWxlIiAiJG9maWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUiKQorICBjaG1vZCAreCAiJG9maWxlIgorCitlbHNlCisgICMgSWYgdGhlcmUgaXMgbm8gTWFrZWZpbGUgeWV0LCB3ZSByZWx5IG9uIGEgbWFrZSBydWxlIHRvIGV4ZWN1dGUKKyAgIyBgY29uZmlnLnN0YXR1cyAtLXJlY2hlY2snIHRvIHJlcnVuIHRoZXNlIHRlc3RzIGFuZCBjcmVhdGUgdGhlCisgICMgbGlidG9vbCBzY3JpcHQgdGhlbi4KKyAgbHRtYWluX2luPWBlY2hvICRsdG1haW4gfCBzZWQgLWUgJ3MvXC5zaCQvLmluLydgCisgIGlmIHRlc3QgLWYgIiRsdG1haW5faW4iOyB0aGVuCisgICAgdGVzdCAtZiBNYWtlZmlsZSAmJiBtYWtlICIkbHRtYWluIgorICBmaQorZmkKKworCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKK0NDPSIkbHRfc2F2ZV9DQyIKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXRhZ3Mgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3RhZ3Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0kd2l0aF90YWdzOyB0YWduYW1lcz0iJHdpdGh2YWwiCitmaQorCisKK2lmIHRlc3QgLWYgIiRsdG1haW4iICYmIHRlc3QgLW4gIiR0YWduYW1lcyI7IHRoZW4KKyAgaWYgdGVzdCAhIC1mICIke29maWxlfSI7IHRoZW4KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBvdXRwdXQgZmlsZSBcYCRvZmlsZScgZG9lcyBub3QgZXhpc3QiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiBvdXRwdXQgZmlsZSBcYCRvZmlsZScgZG9lcyBub3QgZXhpc3QiID4mMjt9CisgIGZpCisKKyAgaWYgdGVzdCAteiAiJExUQ0MiOyB0aGVuCisgICAgZXZhbCAiYCRTSEVMTCAke29maWxlfSAtLWNvbmZpZyB8IGdyZXAgJ15MVENDPSdgIgorICAgIGlmIHRlc3QgLXogIiRMVENDIjsgdGhlbgorICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogb3V0cHV0IGZpbGUgXGAkb2ZpbGUnIGRvZXMgbm90IGxvb2sgbGlrZSBhIGxpYnRvb2wgc2NyaXB0IiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogb3V0cHV0IGZpbGUgXGAkb2ZpbGUnIGRvZXMgbm90IGxvb2sgbGlrZSBhIGxpYnRvb2wgc2NyaXB0IiA+JjI7fQorICAgIGVsc2UKKyAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHVzaW5nIFxgTFRDQz0kTFRDQycsIGV4dHJhY3RlZCBmcm9tIFxgJG9maWxlJyIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIFxgTFRDQz0kTFRDQycsIGV4dHJhY3RlZCBmcm9tIFxgJG9maWxlJyIgPiYyO30KKyAgICBmaQorICBmaQorICBpZiB0ZXN0IC16ICIkTFRDRkxBR1MiOyB0aGVuCisgICAgZXZhbCAiYCRTSEVMTCAke29maWxlfSAtLWNvbmZpZyB8IGdyZXAgJ15MVENGTEFHUz0nYCIKKyAgZmkKKworICAjIEV4dHJhY3QgbGlzdCBvZiBhdmFpbGFibGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIGluICRvZmlsZS4KKyAgIyBOb3RlIHRoYXQgdGhpcyBhc3N1bWVzIHRoZSBlbnRpcmUgbGlzdCBpcyBvbiBvbmUgbGluZS4KKyAgYXZhaWxhYmxlX3RhZ3M9YGdyZXAgIl5hdmFpbGFibGVfdGFncz0iICIke29maWxlfSIgfCAkU0VEIC1lICdzL2F2YWlsYWJsZV90YWdzPVwoLiokXCkvXDEvJyAtZSAncy9cIi8vZydgCisKKyAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCisgIGZvciB0YWduYW1lIGluICR0YWduYW1lczsgZG8KKyAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAjIENoZWNrIHdoZXRoZXIgdGFnbmFtZSBjb250YWlucyBvbmx5IHZhbGlkIGNoYXJhY3RlcnMKKyAgICBjYXNlIGAkZWNobyAiWCR0YWduYW1lIiB8ICRYc2VkIC1lICdzOlstX0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoxMjM0NTY3ODkwLC9dOjpnJ2AgaW4KKyAgICAiIikgOzsKKyAgICAqKSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogaW52YWxpZCB0YWcgbmFtZTogJHRhZ25hbWUiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCB0YWcgbmFtZTogJHRhZ25hbWUiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKwk7OworICAgIGVzYWMKKworICAgIGlmIGdyZXAgIl4jICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICR0YWduYW1lJCIgPCAiJHtvZmlsZX0iID4gL2Rldi9udWxsCisgICAgdGhlbgorICAgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogdGFnIG5hbWUgXCIkdGFnbmFtZVwiIGFscmVhZHkgZXhpc3RzIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IHRhZyBuYW1lIFwiJHRhZ25hbWVcIiBhbHJlYWR5IGV4aXN0cyIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgIGZpCisKKyAgICAjIFVwZGF0ZSB0aGUgbGlzdCBvZiBhdmFpbGFibGUgdGFncy4KKyAgICBpZiB0ZXN0IC1uICIkdGFnbmFtZSI7IHRoZW4KKyAgICAgIGVjaG8gYXBwZW5kaW5nIGNvbmZpZ3VyYXRpb24gdGFnIFwiJHRhZ25hbWVcIiB0byAkb2ZpbGUKKworICAgICAgY2FzZSAkdGFnbmFtZSBpbgorICAgICAgQ1hYKQorCWlmIHRlc3QgLW4gIiRDWFgiICYmICggdGVzdCAiWCRDWFgiICE9ICJYbm8iICYmCisJICAgICggKHRlc3QgIlgkQ1hYIiA9ICJYZysrIiAmJiBgZysrIC12ID4vZGV2L251bGwgMj4mMWAgKSB8fAorCSAgICAodGVzdCAiWCRDWFgiICE9ICJYZysrIikpKSA7IHRoZW4KKwkgIGFjX2V4dD1jcHAKK2FjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251CisKKworCisKK2FyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubworYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPQorYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0NYWD1ubworYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9CitleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPQoraGFyZGNvZGVfZGlyZWN0X0NYWD1ubworaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9CitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkX0NYWD0KK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPQoraGFyZGNvZGVfbWludXNfTF9DWFg9bm8KK2hhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPXVuc3VwcG9ydGVkCitoYXJkY29kZV9hdXRvbWF0aWNfQ1hYPW5vCittb2R1bGVfY21kc19DWFg9Cittb2R1bGVfZXhwc3ltX2NtZHNfQ1hYPQorbGlua19hbGxfZGVwbGlic19DWFg9dW5rbm93bgorb2xkX2FyY2hpdmVfY21kc19DWFg9JG9sZF9hcmNoaXZlX2NtZHMKK25vX3VuZGVmaW5lZF9mbGFnX0NYWD0KK3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0KK2VuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfQ1hYPW5vCisKKyMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG9iamVjdCBiZWluZyBsaW5rZWQ6CitwcmVkZXBfb2JqZWN0c19DWFg9Citwb3N0ZGVwX29iamVjdHNfQ1hYPQorcHJlZGVwc19DWFg9Citwb3N0ZGVwc19DWFg9Citjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYPQorCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgQysrIHRlc3Qgc291cmNlcy4KK2FjX2V4dD1jcHAKKworIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIEMrKyB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworb2JqZXh0X0NYWD0kb2JqZXh0CisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCitsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9ImludCBzb21lX3ZhcmlhYmxlID0gMDtcbiIKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKK2x0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0naW50IG1haW4oaW50LCBjaGFyICpbXSkgeyByZXR1cm4oMCk7IH1cbicKKworIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorCisjIElmIG5vIEMgY29tcGlsZXIgd2FzIHNwZWNpZmllZCwgdXNlIENDLgorTFRDQz0ke0xUQ0MtIiRDQyJ9CisKKyMgSWYgbm8gQyBjb21waWxlciBmbGFncyB3ZXJlIHNwZWNpZmllZCwgdXNlIENGTEFHUy4KK0xUQ0ZMQUdTPSR7TFRDRkxBR1MtIiRDRkxBR1MifQorCisjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorY29tcGlsZXI9JENDCisKKworIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKK2FjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorcHJpbnRmICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAorZXZhbCAiJGFjX2NvbXBpbGUiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCitfbHRfY29tcGlsZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCiskcm0gY29uZnRlc3QqCisKK2FjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorcHJpbnRmICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAorZXZhbCAiJGFjX2xpbmsiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCitfbHRfbGlua2VyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAorJHJtIGNvbmZ0ZXN0KgorCisKKyMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCitsdF9zYXZlX0NDPSRDQworbHRfc2F2ZV9MRD0kTEQKK2x0X3NhdmVfR0NDPSRHQ0MKK0dDQz0kR1hYCitsdF9zYXZlX3dpdGhfZ251X2xkPSR3aXRoX2dudV9sZAorbHRfc2F2ZV9wYXRoX0xEPSRsdF9jdl9wYXRoX0xECitpZiB0ZXN0IC1uICIke2x0X2N2X3Byb2dfZ251X2xkY3h4K3NldH0iOyB0aGVuCisgIGx0X2N2X3Byb2dfZ251X2xkPSRsdF9jdl9wcm9nX2dudV9sZGN4eAorZWxzZQorICAkYXNfdW5zZXQgbHRfY3ZfcHJvZ19nbnVfbGQKK2ZpCitpZiB0ZXN0IC1uICIke2x0X2N2X3BhdGhfTERDWFgrc2V0fSI7IHRoZW4KKyAgbHRfY3ZfcGF0aF9MRD0kbHRfY3ZfcGF0aF9MRENYWAorZWxzZQorICAkYXNfdW5zZXQgbHRfY3ZfcGF0aF9MRAorZmkKK3Rlc3QgLXogIiR7TERDWFgrc2V0fSIgfHwgTEQ9JExEQ1hYCitDQz0ke0NYWC0iYysrIn0KK2NvbXBpbGVyPSRDQworY29tcGlsZXJfQ1hYPSRDQworZm9yIGNjX3RlbXAgaW4gJGNvbXBpbGVyIiI7IGRvCisgIGNhc2UgJGNjX3RlbXAgaW4KKyAgICBjb21waWxlIHwgKltcXC9dY29tcGlsZSB8IGNjYWNoZSB8ICpbXFwvXWNjYWNoZSApIDs7CisgICAgZGlzdGNjIHwgKltcXC9dZGlzdGNjIHwgcHVyaWZ5IHwgKltcXC9dcHVyaWZ5ICkgOzsKKyAgICBcLSopIDs7CisgICAgKikgYnJlYWs7OworICBlc2FjCitkb25lCitjY19iYXNlbmFtZT1gJGVjaG8gIlgkY2NfdGVtcCIgfCAkWHNlZCAtZSAncyUuKi8lJScgLWUgInMlXiRob3N0X2FsaWFzLSUlImAKKworCisjIFdlIGRvbid0IHdhbnQgLWZuby1leGNlcHRpb24gd2VuIGNvbXBpbGluZyBDKysgY29kZSwgc28gc2V0IHRoZQorIyBub19idWlsdGluX2ZsYWcgc2VwYXJhdGVseQoraWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfQ1hYPScgLWZuby1idWlsdGluJworZWxzZQorICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19DWFg9CitmaQorCitpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorICAjIFNldCB1cCBkZWZhdWx0IEdOVSBDKysgY29uZmlndXJhdGlvbgorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZ251LWxkIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9nbnVfbGQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0kd2l0aF9nbnVfbGQ7IHRlc3QgIiR3aXRodmFsIiA9IG5vIHx8IHdpdGhfZ251X2xkPXllcworZWxzZQorICB3aXRoX2dudV9sZD1ubworZmkKKworYWNfcHJvZz1sZAoraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgIyBDaGVjayBpZiBnY2MgLXByaW50LXByb2ctbmFtZT1sZCBnaXZlcyBhIHBhdGguCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBsZCB1c2VkIGJ5ICRDQyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBsZCB1c2VkIGJ5ICRDQy4uLiAkRUNIT19DIiA+JjY7IH0KKyAgY2FzZSAkaG9zdCBpbgorICAqLSotbWluZ3cqKQorICAgICMgZ2NjIGxlYXZlcyBhIHRyYWlsaW5nIGNhcnJpYWdlIHJldHVybiB3aGljaCB1cHNldHMgbWluZ3cKKyAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjUgfCB0ciAtZCAnXDAxNSdgIDs7CisgICopCisgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1YCA7OworICBlc2FjCisgIGNhc2UgJGFjX3Byb2cgaW4KKyAgICAjIEFjY2VwdCBhYnNvbHV0ZSBwYXRocy4KKyAgICBbXFwvXSogfCA/OltcXC9dKikKKyAgICAgIHJlX2RpcmVsdD0nL1teL11bXi9dKi9cLlwuLycKKyAgICAgICMgQ2Fub25pY2FsaXplIHRoZSBwYXRobmFtZSBvZiBsZAorICAgICAgYWNfcHJvZz1gZWNobyAkYWNfcHJvZ3wgJFNFRCAncyVcXFxcJS8lZydgCisgICAgICB3aGlsZSBlY2hvICRhY19wcm9nIHwgZ3JlcCAiJHJlX2RpcmVsdCIgPiAvZGV2L251bGwgMj4mMTsgZG8KKwlhY19wcm9nPWBlY2hvICRhY19wcm9nfCAkU0VEICJzJSRyZV9kaXJlbHQlLyUiYAorICAgICAgZG9uZQorICAgICAgdGVzdCAteiAiJExEIiAmJiBMRD0iJGFjX3Byb2ciCisgICAgICA7OworICAiIikKKyAgICAjIElmIGl0IGZhaWxzLCB0aGVuIHByZXRlbmQgd2UgYXJlbid0IHVzaW5nIEdDQy4KKyAgICBhY19wcm9nPWxkCisgICAgOzsKKyAgKikKKyAgICAjIElmIGl0IGlzIHJlbGF0aXZlLCB0aGVuIHNlYXJjaCBmb3IgdGhlIGZpcnN0IGxkIGluIFBBVEguCisgICAgd2l0aF9nbnVfbGQ9dW5rbm93bgorICAgIDs7CisgIGVzYWMKK2VsaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgR05VIGxkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIEdOVSBsZC4uLiAkRUNIT19DIiA+JjY7IH0KK2Vsc2UKKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igbm9uLUdOVSBsZC4uLiAkRUNIT19DIiA+JjY7IH0KK2ZpCitpZiB0ZXN0ICIke2x0X2N2X3BhdGhfTEQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAteiAiJExEIjsgdGhlbgorICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KKyAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ciIHx8IHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ckYWNfZXhlZXh0IjsgdGhlbgorICAgICAgbHRfY3ZfcGF0aF9MRD0iJGFjX2Rpci8kYWNfcHJvZyIKKyAgICAgICMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBwcm9ncmFtIGlzIEdOVSBsZC4gIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiwKKyAgICAgICMgYnV0IGFwcGFyZW50bHkgc29tZSB2YXJpYW50cyBvZiBHTlUgbGQgb25seSBhY2NlcHQgLXYuCisgICAgICAjIEJyZWFrIG9ubHkgaWYgaXQgd2FzIHRoZSBHTlUvbm9uLUdOVSBsZCB0aGF0IHdlIHByZWZlci4KKyAgICAgIGNhc2UgYCIkbHRfY3ZfcGF0aF9MRCIgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgorICAgICAgKkdOVSogfCAqJ3dpdGggQkZEJyopCisJdGVzdCAiJHdpdGhfZ251X2xkIiAhPSBubyAmJiBicmVhaworCTs7CisgICAgICAqKQorCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0geWVzICYmIGJyZWFrCisJOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICBkb25lCisgIElGUz0iJGx0X3NhdmVfaWZzIgorZWxzZQorICBsdF9jdl9wYXRoX0xEPSIkTEQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorZmkKK2ZpCisKK0xEPSIkbHRfY3ZfcGF0aF9MRCIKK2lmIHRlc3QgLW4gIiRMRCI7IHRoZW4KKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkTEQiID4mNQorZWNobyAiJHtFQ0hPX1R9JExEIiA+JjY7IH0KK2Vsc2UKKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CitmaQordGVzdCAteiAiJExEIiAmJiB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBubyBhY2NlcHRhYmxlIGxkIGZvdW5kIGluIFwkUEFUSCIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBubyBhY2NlcHRhYmxlIGxkIGZvdW5kIGluIFwkUEFUSCIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB0aGUgbGlua2VyICgkTEQpIGlzIEdOVSBsZC4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3ZfcHJvZ19nbnVfbGQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgIyBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24gaGVyZSwgYnV0IGFwcGFyZW50bHkgc29tZSBHTlUgbGRzIG9ubHkgYWNjZXB0IC12LgorY2FzZSBgJExEIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KKypHTlUqIHwgKid3aXRoIEJGRCcqKQorICBsdF9jdl9wcm9nX2dudV9sZD15ZXMKKyAgOzsKKyopCisgIGx0X2N2X3Byb2dfZ251X2xkPW5vCisgIDs7Citlc2FjCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfcHJvZ19nbnVfbGQiID4mNQorZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3Byb2dfZ251X2xkIiA+JjY7IH0KK3dpdGhfZ251X2xkPSRsdF9jdl9wcm9nX2dudV9sZAorCisKKworICAjIENoZWNrIGlmIEdOVSBDKysgdXNlcyBHTlUgbGQgYXMgdGhlIHVuZGVybHlpbmcgbGlua2VyLCBzaW5jZSB0aGUKKyAgIyBhcmNoaXZpbmcgY29tbWFuZHMgYmVsb3cgYXNzdW1lIHRoYXQgR05VIGxkIGlzIGJlaW5nIHVzZWQuCisgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKworICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS0tcnBhdGggJHt3bH0kbGliZGlyJworICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKworICAgICMgSWYgYXJjaGl2ZV9jbWRzIHJ1bnMgTEQsIG5vdCBDQywgd2xhcmMgc2hvdWxkIGJlIGVtcHR5CisgICAgIyBYWFggSSB0aGluayB3bGFyYyBjYW4gYmUgZWxpbWluYXRlZCBpbiBsdGNmLWN4eCwgYnV0IEkgbmVlZCB0bworICAgICMgICAgIGludmVzdGlnYXRlIGl0IGEgbGl0dGxlIGJpdCBtb3JlLiAoTU0pCisgICAgd2xhcmM9JyR7d2x9JworCisgICAgIyBhbmNpZW50IEdOVSBsZCBkaWRuJ3Qgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUgZXQuIGFsLgorICAgIGlmIGV2YWwgImAkQ0MgLXByaW50LXByb2ctbmFtZT1sZGAgLS1oZWxwIDI+JjEiIHwgXAorCWdyZXAgJ25vLXdob2xlLWFyY2hpdmUnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9IiR3bGFyYyInLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICciJHdsYXJjIictLW5vLXdob2xlLWFyY2hpdmUnCisgICAgZWxzZQorICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPQorICAgIGZpCisgIGVsc2UKKyAgICB3aXRoX2dudV9sZD1ubworICAgIHdsYXJjPQorCisgICAgIyBBIGdlbmVyaWMgYW5kIHZlcnkgc2ltcGxlIGRlZmF1bHQgc2hhcmVkIGxpYnJhcnkgY3JlYXRpb24KKyAgICAjIGNvbW1hbmQgZm9yIEdOVSBDKysgZm9yIHRoZSBjYXNlIHdoZXJlIGl0IHVzZXMgdGhlIG5hdGl2ZQorICAgICMgbGlua2VyLCBpbnN0ZWFkIG9mIEdOVSBsZC4gIElmIHBvc3NpYmxlLCB0aGlzIHNldHRpbmcgc2hvdWxkCisgICAgIyBvdmVycmlkZGVuIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZSBuYXRpdmUgbGlua2VyIGZlYXR1cmVzIG9uCisgICAgIyB0aGUgcGxhdGZvcm0gaXQgaXMgYmVpbmcgdXNlZCBvbi4KKyAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRsaWInCisgIGZpCisKKyAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKyAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8IGdyZXAgIlwtTCInCisKK2Vsc2UKKyAgR1hYPW5vCisgIHdpdGhfZ251X2xkPW5vCisgIHdsYXJjPQorZmkKKworIyBQT1JUTUU6IGZpbGwgaW4gYSBkZXNjcmlwdGlvbiBvZiB5b3VyIHN5c3RlbSdzIEMrKyBsaW5rIGNoYXJhY3RlcmlzdGljcworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLi4uICRFQ0hPX0MiID4mNjsgfQorbGRfc2hsaWJzX0NYWD15ZXMKK2Nhc2UgJGhvc3Rfb3MgaW4KKyAgYWl4MyopCisgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgbGRfc2hsaWJzX0NYWD1ubworICAgIDs7CisgIGFpeDQqIHwgYWl4NSopCisgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICAgICMgT24gSUE2NCwgdGhlIGxpbmtlciBkb2VzIHJ1biB0aW1lIGxpbmtpbmcgYnkgZGVmYXVsdCwgc28gd2UgZG9uJ3QKKyAgICAgICMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgorICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworICAgICAgZXhwX3N5bV9mbGFnPSctQmV4cG9ydCcKKyAgICAgIG5vX2VudHJ5X2ZsYWc9IiIKKyAgICBlbHNlCisgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCisKKyAgICAgICMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAorICAgICAgIyBBSVggc3R5bGUgbGlua2luZy4gSWYgLWJydGwgaXMgc29tZXdoZXJlIGluIExERkxBR1MsIHdlCisgICAgICAjIG5lZWQgdG8gZG8gcnVudGltZSBsaW5raW5nLgorICAgICAgY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlsyM118YWl4NC5bMjNdLip8YWl4NSopCisJZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCisJICBjYXNlICRsZF9mbGFnIGluCisJICAqLWJydGwqKQorCSAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcworCSAgICBicmVhaworCSAgICA7OworCSAgZXNhYworCWRvbmUKKwk7OworICAgICAgZXNhYworCisgICAgICBleHBfc3ltX2ZsYWc9Jy1iZXhwb3J0JworICAgICAgbm9fZW50cnlfZmxhZz0nLWJub2VudHJ5JworICAgIGZpCisKKyAgICAjIFdoZW4gbGFyZ2UgZXhlY3V0YWJsZXMgb3Igc2hhcmVkIG9iamVjdHMgYXJlIGJ1aWx0LCBBSVggbGQgY2FuCisgICAgIyBoYXZlIHByb2JsZW1zIGNyZWF0aW5nIHRoZSB0YWJsZSBvZiBjb250ZW50cy4gIElmIGxpbmtpbmcgYSBsaWJyYXJ5CisgICAgIyBvciBwcm9ncmFtIHJlc3VsdHMgaW4gImVycm9yIFRPQyBvdmVyZmxvdyIgYWRkIC1tbWluaW1hbC10b2MgdG8KKyAgICAjIENYWEZMQUdTL0NGTEFHUyBmb3IgZysrL2djYy4gIEluIHRoZSBjYXNlcyB3aGVyZSB0aGF0IGlzIG5vdAorICAgICMgZW5vdWdoIHRvIGZpeCB0aGUgcHJvYmxlbSwgYWRkIC1XbCwtYmJpZ3RvYyB0byBMREZMQUdTLgorCisgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJworICAgIGhhcmRjb2RlX2RpcmVjdF9DWFg9eWVzCisgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9JzonCisgICAgbGlua19hbGxfZGVwbGlic19DWFg9eWVzCisKKyAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorICAgICAgY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlswMTJdfGFpeDQuWzAxMl0uKikKKyAgICAgICMgV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgb24gQUlYIDQuMiBhbmQgbG93ZXIsIHRoZSBjaGVjaworICAgICAgIyBiZWxvdyBmb3IgYnJva2VuIGNvbGxlY3QyIGRvZXNuJ3Qgd29yayB1bmRlciA0LjMrCisJY29sbGVjdDJuYW1lPWAke0NDfSAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAorCWlmIHRlc3QgLWYgIiRjb2xsZWN0Mm5hbWUiICYmIFwKKwkgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8IGdyZXAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCisJdGhlbgorCSAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCisJICBoYXJkY29kZV9kaXJlY3RfQ1hYPXllcworCWVsc2UKKwkgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKKwkgIGhhcmRjb2RlX2RpcmVjdF9DWFg9dW5zdXBwb3J0ZWQKKwkgICMgSXQgZmFpbHMgdG8gZmluZCB1bmluc3RhbGxlZCBsaWJyYXJpZXMgd2hlbiB0aGUgdW5pbnN0YWxsZWQKKwkgICMgcGF0aCBpcyBub3QgbGlzdGVkIGluIHRoZSBsaWJwYXRoLiAgU2V0dGluZyBoYXJkY29kZV9taW51c19MCisJICAjIHRvIHVuc3VwcG9ydGVkIGZvcmNlcyByZWxpbmtpbmcKKwkgIGhhcmRjb2RlX21pbnVzX0xfQ1hYPXllcworCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1MJGxpYmRpcicKKwkgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPQorCWZpCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIHNoYXJlZF9mbGFnPSctc2hhcmVkJworICAgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisJc2hhcmVkX2ZsYWc9IiRzaGFyZWRfZmxhZyAiJyR7d2x9LUcnCisgICAgICBmaQorICAgIGVsc2UKKyAgICAgICMgbm90IHVzaW5nIGdjYworICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkjIFZpc3VhbEFnZSBDKyssIFZlcnNpb24gNS41IGZvciBBSVggNUwgZm9yIElBLTY0LCBCZXRhIDMgUmVsZWFzZQorCSMgY2hva2VzIG9uIC1XbCwtRy4gVGhlIGZvbGxvd2luZyBsaW5lIGlzIGNvcnJlY3Q6CisJc2hhcmVkX2ZsYWc9Jy1HJworICAgICAgZWxzZQorCWlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorCSAgc2hhcmVkX2ZsYWc9JyR7d2x9LUcnCisJZWxzZQorCSAgc2hhcmVkX2ZsYWc9JyR7d2x9LWJNOlNSRScKKwlmaQorICAgICAgZmkKKyAgICBmaQorCisgICAgIyBJdCBzZWVtcyB0aGF0IC1iZXhwYWxsIGRvZXMgbm90IGV4cG9ydCBzeW1ib2xzIGJlZ2lubmluZyB3aXRoCisgICAgIyB1bmRlcnNjb3JlIChfKSwgc28gaXQgaXMgYmV0dGVyIHRvIGdlbmVyYXRlIGEgbGlzdCBvZiBzeW1ib2xzIHRvIGV4cG9ydC4KKyAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHNfQ1hYPXllcworICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorICAgICAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVudGltZSBsb2FkaW5nIGZsYWdzICgtYnJ0bCksCisgICAgICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCisgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9Jy1iZXJvaycKKyAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbiBlbXB0eSBleGVjdXRhYmxlLgorICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY3h4X3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisKK2FpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgJy9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsgL14wLyB7IHMvXjAgICpcKC4qXCkkL1wxLzsgcDsgfQorfSdgCisjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCitpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgJy9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsgL14wLyB7IHMvXjAgICpcKC4qXCkkL1wxLzsgcDsgfQorfSdgOyBmaQorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisKK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAoraWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorCisgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0iXCRDQyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZWNobyAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKKyAgICAgZWxzZQorICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tUiAkbGliZGlyOi91c3IvbGliOi9saWInCisJYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPSIteiBub2RlZnMiCisJYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzICR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30gJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMiCisgICAgICBlbHNlCisJIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuIGVtcHR5IGV4ZWN1dGFibGUuCisJY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY3h4X3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisKK2FpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgJy9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsgL14wLyB7IHMvXjAgICpcKC4qXCkkL1wxLzsgcDsgfQorfSdgCisjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCitpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgJy9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsgL14wLyB7IHMvXjAgICpcKC4qXCkkL1wxLzsgcDsgfQorfSdgOyBmaQorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisKK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAoraWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisKKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKwkjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorCSMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KKwlub191bmRlZmluZWRfZmxhZ19DWFg9JyAke3dsfS1iZXJub3RvaycKKwlhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9JyAke3dsfS1iZXJvaycKKwkjIEV4cG9ydGVkIHN5bWJvbHMgY2FuIGJlIHB1bGxlZCBpbnRvIHNoYXJlZCBvYmplY3RzIGZyb20gYXJjaGl2ZXMKKwl3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9JyRjb252ZW5pZW5jZScKKwlhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9eWVzCisJIyBUaGlzIGlzIHNpbWlsYXIgdG8gaG93IEFJWCB0cmFkaXRpb25hbGx5IGJ1aWxkcyBpdHMgc2hhcmVkIGxpYnJhcmllcy4KKwlhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICR7d2x9LWJub2VudHJ5ICRjb21waWxlcl9mbGFncyAke3dsfS1iRTokZXhwb3J0X3N5bWJvbHMke2FsbG93X3VuZGVmaW5lZF9mbGFnfX4kQVIgJEFSX0ZMQUdTICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lJHJlbGVhc2UuYSAkb3V0cHV0X29iamRpci8kc29uYW1lJworICAgICAgZmkKKyAgICBmaQorICAgIDs7CisKKyAgYmVvcyopCisgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9dW5zdXBwb3J0ZWQKKyAgICAgICMgSm9zZXBoIEJlY2tlbmJhY2ggPGpyYjNAYmVzdC5jb20+IHNheXMgc29tZSByZWxlYXNlcyBvZiBnY2MKKyAgICAgICMgc3VwcG9ydCAtLXVuZGVmaW5lZC4gIFRoaXMgZGVzZXJ2ZXMgc29tZSBpbnZlc3RpZ2F0aW9uLiAgRklYTUUKKyAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtbm9zdGFydCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICBlbHNlCisgICAgICBsZF9zaGxpYnNfQ1hYPW5vCisgICAgZmkKKyAgICA7OworCisgIGNob3J1cyopCisgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICopCisJIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJbGRfc2hsaWJzX0NYWD1ubworCTs7CisgICAgZXNhYworICAgIDs7CisKKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQorICAgICMgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCBDWFgpIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLAorICAgICMgYXMgdGhlcmUgaXMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1MJGxpYmRpcicKKyAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9dW5zdXBwb3J0ZWQKKyAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHNfQ1hYPW5vCisgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19DWFg9eWVzCisKKyAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKyAgICAgICMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSAoMXN0IGxpbmUKKyAgICAgICMgaXMgRVhQT1JUUyksIHVzZSBpdCBhcyBpczsgb3RoZXJ3aXNlLCBwcmVwZW5kLi4uCisgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKwljcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisgICAgICBlbHNlCisJZWNobyBFWFBPUlRTID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisJY2F0ICRleHBvcnRfc3ltYm9scyA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKyAgICAgIGZpfgorICAgICAgJENDIC1zaGFyZWQgLW5vc3RkbGliICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworICAgIGVsc2UKKyAgICAgIGxkX3NobGlic19DWFg9bm8KKyAgICBmaQorICA7OworICAgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgICAgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgICByaGFwc29keSogfCBkYXJ3aW4xLlswMTJdKQorICAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPScke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycKKyAgICAgICAgIDs7CisgICAgICAgKikgIyBEYXJ3aW4gMS4zIG9uCisgICAgICAgICBpZiB0ZXN0IC16ICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUfSA7IHRoZW4KKyAgICAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgY2FzZSAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVH0gaW4KKyAgICAgICAgICAgICAxMC5bMDEyXSkKKyAgICAgICAgICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnCisgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgIDEwLiopCisgICAgICAgICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9JyR7d2x9LXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJworICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgZXNhYworICAgICAgICAgZmkKKyAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubworICAgICAgaGFyZGNvZGVfZGlyZWN0X0NYWD1ubworICAgICAgaGFyZGNvZGVfYXV0b21hdGljX0NYWD15ZXMKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPXVuc3VwcG9ydGVkCisgICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9JycKKyAgICAgIGxpbmtfYWxsX2RlcGxpYnNfQ1hYPXllcworCisgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXMgOyB0aGVuCisgICAgICBsdF9pbnRfYXBwbGVfY2Nfc2luZ2xlX21vZD1ubworICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCisgICAgICBpZiAkQ0MgLWR1bXBzcGVjcyAyPiYxIHwgJEVHUkVQICdzaW5nbGVfbW9kdWxlJyA+L2Rldi9udWxsIDsgdGhlbgorICAgICAgIGx0X2ludF9hcHBsZV9jY19zaW5nbGVfbW9kPXllcworICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIlgkbHRfaW50X2FwcGxlX2NjX3NpbmdsZV9tb2QiID0gWHllcyA7IHRoZW4KKyAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLWR5bmFtaWNsaWIgLXNpbmdsZV9tb2R1bGUgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgJHJwYXRoLyRzb25hbWUgJHZlcnN0cmluZycKKyAgICAgIGVsc2UKKyAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXIgLWtlZXBfcHJpdmF0ZV9leHRlcm5zIC1ub3N0ZGxpYiAtbyAke2xpYn0tbWFzdGVyLm8gJGxpYm9ianN+JENDIC1keW5hbWljbGliICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICR7bGlifS1tYXN0ZXIubyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSAkcnBhdGgvJHNvbmFtZSAkdmVyc3RyaW5nJworICAgICAgICBmaQorICAgICAgICBtb2R1bGVfY21kc19DWFg9JyRDQyAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAtYnVuZGxlICRsaWJvYmpzICRkZXBsaWJzJGNvbXBpbGVyX2ZsYWdzJworICAgICAgICAjIERvbid0IGZpeCB0aGlzIGJ5IHVzaW5nIHRoZSBsZCAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGZsYWcsIGl0IGRvZXNuJ3QgZXhpc3QgaW4gb2xkZXIgZGFyd2luIGxkcworICAgICAgICAgIGlmIHRlc3QgIlgkbHRfaW50X2FwcGxlX2NjX3NpbmdsZV9tb2QiID0gWHllcyA7IHRoZW4KKyAgICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAtZHluYW1pY2xpYiAtc2luZ2xlX21vZHVsZSAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSAkcnBhdGgvJHNvbmFtZSAkdmVyc3RyaW5nfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgLXIgLWtlZXBfcHJpdmF0ZV9leHRlcm5zIC1ub3N0ZGxpYiAtbyAke2xpYn0tbWFzdGVyLm8gJGxpYm9ianN+JENDIC1keW5hbWljbGliICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICR7bGlifS1tYXN0ZXIubyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSAkcnBhdGgvJHNvbmFtZSAkdmVyc3RyaW5nfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKKyAgICAgICAgICBmaQorICAgICAgICAgICAgbW9kdWxlX2V4cHN5bV9jbWRzX0NYWD0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnICAtbyAkbGliIC1idW5kbGUgJGxpYm9ianMgJGRlcGxpYnMkY29tcGlsZXJfZmxhZ3N+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JworICAgICAgZWxzZQorICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgeGxjKikKKyAgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdlY2hvJworICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtcW1rc2hyb2JqICR7d2x9LXNpbmdsZV9tb2R1bGUgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWluc3RhbGxfbmFtZSAke3dsfWBlY2hvICRycGF0aC8kc29uYW1lYCAkdmVyc3RyaW5nJworICAgICAgICAgIG1vZHVsZV9jbWRzX0NYWD0nJENDICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliIC1idW5kbGUgJGxpYm9ianMgJGRlcGxpYnMkY29tcGlsZXJfZmxhZ3MnCisgICAgICAgICAgIyBEb24ndCBmaXggdGhpcyBieSB1c2luZyB0aGUgbGQgLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCBmbGFnLCBpdCBkb2Vzbid0IGV4aXN0IGluIG9sZGVyIGRhcndpbiBsZHMKKyAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgLXFta3Nocm9iaiAke3dsfS1zaW5nbGVfbW9kdWxlICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1pbnN0YWxsX25hbWUgJHt3bH0kcnBhdGgvJHNvbmFtZSAkdmVyc3RyaW5nfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKKyAgICAgICAgICBtb2R1bGVfZXhwc3ltX2NtZHNfQ1hYPSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFnc35ubWVkaXQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCisgICAgICAgICAgOzsKKyAgICAgICAqKQorICAgICAgICAgbGRfc2hsaWJzX0NYWD1ubworICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICBmaQorICAgICAgICA7OworCisgIGRndXgqKQorICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICBlYysrKikKKwkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwlsZF9zaGxpYnNfQ1hYPW5vCisJOzsKKyAgICAgIGdoY3gqKQorCSMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJbGRfc2hsaWJzX0NYWD1ubworCTs7CisgICAgICAqKQorCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCWxkX3NobGlic19DWFg9bm8KKwk7OworICAgIGVzYWMKKyAgICA7OworICBmcmVlYnNkWzEyXSopCisgICAgIyBDKysgc2hhcmVkIGxpYnJhcmllcyByZXBvcnRlZCB0byBiZSBmYWlybHkgYnJva2VuIGJlZm9yZSBzd2l0Y2ggdG8gRUxGCisgICAgbGRfc2hsaWJzX0NYWD1ubworICAgIDs7CisgIGZyZWVic2QtZWxmKikKKyAgICBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9bm8KKyAgICA7OworICBmcmVlYnNkKiB8IGtmcmVlYnNkKi1nbnUgfCBkcmFnb25mbHkqKQorICAgICMgRnJlZUJTRCAzIGFuZCBsYXRlciB1c2UgR05VIEMrKyBhbmQgR05VIGxkIHdpdGggc3RhbmRhcmQgRUxGCisgICAgIyBjb252ZW50aW9ucworICAgIGxkX3NobGlic19DWFg9eWVzCisgICAgOzsKKyAgZ251KikKKyAgICA7OworICBocHV4OSopCisgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKKyAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPScke3dsfS1FJworICAgIGhhcmRjb2RlX2RpcmVjdF9DWFg9eWVzCisgICAgaGFyZGNvZGVfbWludXNfTF9DWFg9eWVzICMgTm90IGluIHRoZSBzZWFyY2ggUEFUSCwKKwkJCQkjIGJ1dCBhcyB0aGUgZGVmYXVsdAorCQkJCSMgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisKKyAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgIENDKikKKyAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgbGRfc2hsaWJzX0NYWD1ubworICAgICAgOzsKKyAgICBhQ0MqKQorICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJHJtICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1iICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKyAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorICAgICAgIworICAgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQorICAgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKyAgICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKyAgICAgICMgZGVwZW5kZW5jaWVzLgorICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAoJENDIC1iICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxKSB8IGdyZXAgIlstXUwiYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGVjaG8gJGxpc3QnCisgICAgICA7OworICAgICopCisgICAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckcm0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgIGVsc2UKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgIGxkX3NobGlic19DWFg9bm8KKyAgICAgIGZpCisgICAgICA7OworICAgIGVzYWMKKyAgICA7OworICBocHV4MTAqfGhwdXgxMSopCisgICAgaWYgdGVzdCAkd2l0aF9nbnVfbGQgPSBubzsgdGhlbgorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9OgorCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgaHBwYSo2NCp8aWE2NCopCisJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZF9DWFg9JytiICRsaWJkaXInCisgICAgICAgIDs7CisgICAgICAqKQorCWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR7d2x9LUUnCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgZmkKKyAgICBjYXNlICRob3N0X2NwdSBpbgorICAgIGhwcGEqNjQqfGlhNjQqKQorICAgICAgaGFyZGNvZGVfZGlyZWN0X0NYWD1ubworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9bm8KKyAgICAgIDs7CisgICAgKikKKyAgICAgIGhhcmRjb2RlX2RpcmVjdF9DWFg9eWVzCisgICAgICBoYXJkY29kZV9taW51c19MX0NYWD15ZXMgIyBOb3QgaW4gdGhlIHNlYXJjaCBQQVRILAorCQkJCQkgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdAorCQkJCQkgICAgICAjIGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgQ0MqKQorCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCWxkX3NobGlic19DWFg9bm8KKwk7OworICAgICAgYUNDKikKKwljYXNlICRob3N0X2NwdSBpbgorCWhwcGEqNjQqKQorCSAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwlpYTY0KikKKwkgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJKikKKwkgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwllc2FjCisJIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSMKKwkjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisJIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKwkjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisJIyBkZXBlbmRlbmNpZXMuCisJb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAoJENDIC1iICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxKSB8IGdyZXAgIlwtTCJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZWNobyAkbGlzdCcKKwk7OworICAgICAgKikKKwlpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorCSAgaWYgdGVzdCAkd2l0aF9nbnVfbGQgPSBubzsgdGhlbgorCSAgICBjYXNlICRob3N0X2NwdSBpbgorCSAgICBocHBhKjY0KikKKwkgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgOzsKKwkgICAgaWE2NCopCisJICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgIDs7CisJICAgICopCisJICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgZmkKKwllbHNlCisJICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgIGxkX3NobGlic19DWFg9bm8KKwlmaQorCTs7CisgICAgZXNhYworICAgIDs7CisgIGludGVyaXgzKikKKyAgICBoYXJkY29kZV9kaXJlY3RfQ1hYPW5vCisgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9bm8KKyAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKyAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPScke3dsfS1FJworICAgICMgSGFjazogT24gSW50ZXJpeCAzLngsIHdlIGNhbm5vdCBjb21waWxlIFBJQyBiZWNhdXNlIG9mIGEgYnJva2VuIGdjYy4KKyAgICAjIEluc3RlYWQsIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGxvYWRlZCBhdCBhbiBpbWFnZSBiYXNlICgweDEwMDAwMDAwIGJ5CisgICAgIyBkZWZhdWx0KSBhbmQgcmVsb2NhdGVkIGlmIHRoZXkgY29uZmxpY3QsIHdoaWNoIGlzIGEgc2xvdyB2ZXJ5IG1lbW9yeQorICAgICMgY29uc3VtaW5nIGFuZCBmcmFnbWVudGluZyBwcm9jZXNzLiAgVG8gYXZvaWQgdGhpcywgd2UgcGljayBhIHJhbmRvbSwKKyAgICAjIDI1NiBLaUItYWxpZ25lZCBpbWFnZSBiYXNlIGJldHdlZW4gMHg1MDAwMDAwMCBhbmQgMHg2RkZDMDAwMCBhdCBsaW5rCisgICAgIyB0aW1lLiAgTW92aW5nIHVwIGZyb20gMHgxMDAwMDAwMCBhbHNvIGFsbG93cyBtb3JlIHNicmsoMikgc3BhY2UuCisgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKyAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nc2VkICJzLF4sXywiICRleHBvcnRfc3ltYm9scyA+JG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW1+JENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKyAgICA7OworICBpcml4NSogfCBpcml4NiopCisgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgIENDKikKKwkjIFNHSSBDKysKKwlhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtYWxsIC1tdWx0aWdvdCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisKKwkjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKwkjICJDQyAtYXIiLCB3aGVyZSAiQ0MiIGlzIHRoZSBJUklYIEMrKyBjb21waWxlci4gIFRoaXMgaXMKKwkjIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgaW5zdGFudGlhdGVkIHRlbXBsYXRlcyBhcmUgaW5jbHVkZWQKKwkjIGluIHRoZSBhcmNoaXZlLgorCW9sZF9hcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLWFyIC1XUiwtdSAtbyAkb2xkbGliICRvbGRvYmpzJworCTs7CisgICAgICAqKQorCWlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisJICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwkgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkgIGVsc2UKKwkgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgLW8gJGxpYicKKwkgIGZpCisJZmkKKwlsaW5rX2FsbF9kZXBsaWJzX0NYWD15ZXMKKwk7OworICAgIGVzYWMKKyAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKKyAgICA7OworICBsaW51eCopCisgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgIEtDQyopCisJIyBLdWNrIGFuZCBBc3NvY2lhdGVzLCBJbmMuIChLQUkpIEMrKyBDb21waWxlcgorCisJIyBLQ0Mgd2lsbCBvbmx5IGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5IGlmIHRoZSBvdXRwdXQgZmlsZQorCSMgZW5kcyB3aXRoICIuc28iIChvciAiLnNsIiBmb3IgSFAtVVgpLCBzbyByZW5hbWUgdGhlIGxpYnJhcnkKKwkjIHRvIGl0cyBwcm9wZXIgbmFtZSAod2l0aCB2ZXJzaW9uKSBhZnRlciBsaW5raW5nLgorCWFyY2hpdmVfY21kc19DWFg9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW14oKTAtOUEtWmEtent9XVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gJGxpYiB8ICRTRUQgLWUgInMvXCR7dGVtcGV4dH1cLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYjsgbXYgXCR0ZW1wbGliICRsaWInCisJYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW14oKTAtOUEtWmEtent9XVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gJGxpYiB8ICRTRUQgLWUgInMvXCR7dGVtcGV4dH1cLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYiAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9sczsgbXYgXCR0ZW1wbGliICRsaWInCisJIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSMKKwkjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisJIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKwkjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisJIyBkZXBlbmRlbmNpZXMuCisJb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IC1vIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQgMj4mMSB8IGdyZXAgImxkImA7IHJtIC1mIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQ7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBlY2hvICRsaXN0JworCisJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LS1ycGF0aCwkbGliZGlyJworCWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKworCSMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZworCSMgIkNDIC1Cc3RhdGljIiwgd2hlcmUgIkNDIiBpcyB0aGUgS0FJIEMrKyBjb21waWxlci4KKwlvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1Cc3RhdGljIC1vICRvbGRsaWIgJG9sZG9ianMnCisJOzsKKyAgICAgIGljcGMqKQorCSMgSW50ZWwgQysrCisJd2l0aF9nbnVfbGQ9eWVzCisJIyB2ZXJzaW9uIDguMCBhbmQgYWJvdmUgb2YgaWNwYyBjaG9rZSBvbiBtdWx0aXBseSBkZWZpbmVkIHN5bWJvbHMKKwkjIGlmIHdlIGFkZCAkcHJlZGVwX29iamVjdHMgYW5kICRwb3N0ZGVwX29iamVjdHMsIGhvd2V2ZXIgNy4xIGFuZAorCSMgZWFybGllciBkbyBub3QgYWRkIHRoZSBvYmplY3RzIHRoZW1zZWx2ZXMuCisJY2FzZSBgJENDIC1WIDI+JjFgIGluCisJKiJWZXJzaW9uIDcuIiopCisgIAkgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAJICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJICA7OworCSopICAjIFZlcnNpb24gOC4wIG9yIG5ld2VyCisJICB0bXBfaWR5bj0KKwkgIGNhc2UgJGhvc3RfY3B1IGluCisJICAgIGlhNjQqKSB0bXBfaWR5bj0nIC1pX2R5bmFtaWMnOzsKKwkgIGVzYWMKKyAgCSAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQnIiR0bXBfaWR5biInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCSAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtc2hhcmVkJyIkdG1wX2lkeW4iJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkgIDs7CisJZXNhYworCWFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubworCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ycGF0aCwkbGliZGlyJworCWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKwl3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9JyR7d2x9LS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCTs7CisgICAgICBwZ0NDKikKKyAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBDKysgY29tcGlsZXIKKwlhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgLW8gJGxpYicKKyAgCWFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCisJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LS1ycGF0aCAke3dsfSRsaWJkaXInCisJZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworCXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJGVjaG8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworICAgICAgICA7OworICAgICAgY3h4KikKKwkjIENvbXBhcSBDKysKKwlhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwlhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICAtbyAkbGliICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzJworCisJcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nLXJwYXRoICRsaWJkaXInCisJaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9OgorCisJIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSMKKwkjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisJIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKwkjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisJIyBkZXBlbmRlbmNpZXMuCisJb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8IGdyZXAgImxkImA7IHRlbXBsaXN0PWBlY2hvICR0ZW1wbGlzdCB8ICRTRUQgInMvXCheLipsZC4qXClcKCAuKmxkIC4qJFwpL1wxLyJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZWNobyAkbGlzdCcKKwk7OworICAgIGVzYWMKKyAgICA7OworICBseW54b3MqKQorICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgIGxkX3NobGlic19DWFg9bm8KKyAgICA7OworICBtODhrKikKKyAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICBsZF9zaGxpYnNfQ1hYPW5vCisgICAgOzsKKyAgbXZzKikKKyAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgY3h4KikKKwkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwlsZF9zaGxpYnNfQ1hYPW5vCisJOzsKKyAgICAgICopCisJIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJbGRfc2hsaWJzX0NYWD1ubworCTs7CisgICAgZXNhYworICAgIDs7CisgIG5ldGJzZCopCisgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJExEIC1Cc2hhcmVhYmxlICAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRsaW5rZXJfZmxhZ3MnCisgICAgICB3bGFyYz0KKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSctUiRsaWJkaXInCisgICAgICBoYXJkY29kZV9kaXJlY3RfQ1hYPXllcworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9bm8KKyAgICBmaQorICAgICMgV29ya2Fyb3VuZCBzb21lIGJyb2tlbiBwcmUtMS41IHRvb2xjaGFpbnMKKyAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCBncmVwIGNvbmZ0ZXN0LiRvYmpleHQgfCAkU0VEIC1lICJzOi1sZ2NjIC1sYyAtbGdjYzo6IicKKyAgICA7OworICBvcGVuYnNkMiopCisgICAgIyBDKysgc2hhcmVkIGxpYnJhcmllcyBhcmUgZmFpcmx5IGJyb2tlbgorICAgIGxkX3NobGlic19DWFg9bm8KKyAgICA7OworICBvcGVuYnNkKikKKyAgICBoYXJkY29kZV9kaXJlY3RfQ1hYPXllcworICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPW5vCisgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkbGliJworICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ycGF0aCwkbGliZGlyJworICAgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR7d2x9LUUnCisgICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9IiR3bGFyYyInLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICciJHdsYXJjIictLW5vLXdob2xlLWFyY2hpdmUnCisgICAgZmkKKyAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKKyAgICA7OworICBvc2YzKikKKyAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgS0NDKikKKwkjIEt1Y2sgYW5kIEFzc29jaWF0ZXMsIEluYy4gKEtBSSkgQysrIENvbXBpbGVyCisKKwkjIEtDQyB3aWxsIG9ubHkgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkgaWYgdGhlIG91dHB1dCBmaWxlCisJIyBlbmRzIHdpdGggIi5zbyIgKG9yICIuc2wiIGZvciBIUC1VWCksIHNvIHJlbmFtZSB0aGUgbGlicmFyeQorCSMgdG8gaXRzIHByb3BlciBuYW1lICh3aXRoIHZlcnNpb24pIGFmdGVyIGxpbmtpbmcuCisJYXJjaGl2ZV9jbWRzX0NYWD0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbXigpMC05QS1aYS16e31dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAkbGliIHwgJFNFRCAtZSAicy9cJHt0ZW1wZXh0fVwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliOyBtdiBcJHRlbXBsaWIgJGxpYicKKworCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ycGF0aCwkbGliZGlyJworCWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKKworCSMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZworCSMgIkNDIC1Cc3RhdGljIiwgd2hlcmUgIkNDIiBpcyB0aGUgS0FJIEMrKyBjb21waWxlci4KKwlvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1Cc3RhdGljIC1vICRvbGRsaWIgJG9sZG9ianMnCisKKwk7OworICAgICAgUkNDKikKKwkjIFJhdGlvbmFsIEMrKyAyLjQuMQorCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCWxkX3NobGlic19DWFg9bm8KKwk7OworICAgICAgY3h4KikKKwlhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworCWFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKworCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisJaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9OgorCisJIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSMKKwkjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisJIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKwkjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisJIyBkZXBlbmRlbmNpZXMuCisJb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8IGdyZXAgImxkIiB8IGdyZXAgLXYgImxkOiJgOyB0ZW1wbGlzdD1gZWNobyAkdGVtcGxpc3QgfCAkU0VEICJzL1woXi4qbGQuKlwpXCggLipsZC4qJFwpL1wxLyJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZWNobyAkbGlzdCcKKwk7OworICAgICAgKikKKwlpZiB0ZXN0ICIkR1hYIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCisJICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCisJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworCSAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9OgorCisJICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgZ3JlcCAiXC1MIicKKworCWVsc2UKKwkgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgbGRfc2hsaWJzX0NYWD1ubworCWZpCisJOzsKKyAgICBlc2FjCisgICAgOzsKKyAgb3NmNCogfCBvc2Y1KikKKyAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgS0NDKikKKwkjIEt1Y2sgYW5kIEFzc29jaWF0ZXMsIEluYy4gKEtBSSkgQysrIENvbXBpbGVyCisKKwkjIEtDQyB3aWxsIG9ubHkgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkgaWYgdGhlIG91dHB1dCBmaWxlCisJIyBlbmRzIHdpdGggIi5zbyIgKG9yICIuc2wiIGZvciBIUC1VWCksIHNvIHJlbmFtZSB0aGUgbGlicmFyeQorCSMgdG8gaXRzIHByb3BlciBuYW1lICh3aXRoIHZlcnNpb24pIGFmdGVyIGxpbmtpbmcuCisJYXJjaGl2ZV9jbWRzX0NYWD0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbXigpMC05QS1aYS16e31dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAkbGliIHwgJFNFRCAtZSAicy9cJHt0ZW1wZXh0fVwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliOyBtdiBcJHRlbXBsaWIgJGxpYicKKworCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ycGF0aCwkbGliZGlyJworCWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKKworCSMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZworCSMgdGhlIEtBSSBDKysgY29tcGlsZXIuCisJb2xkX2FyY2hpdmVfY21kc19DWFg9JyRDQyAtbyAkb2xkbGliICRvbGRvYmpzJworCTs7CisgICAgICBSQ0MqKQorCSMgUmF0aW9uYWwgQysrIDIuNC4xCisJIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJbGRfc2hsaWJzX0NYWD1ubworCTs7CisgICAgICBjeHgqKQorCWFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKKwlhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwlhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nZm9yIGkgaW4gYGNhdCAkZXhwb3J0X3N5bWJvbHNgOyBkbyBwcmludGYgIiVzICVzXFxuIiAtZXhwb3J0ZWRfc3ltYm9sICJcJGkiID4+ICRsaWIuZXhwOyBkb25lfgorCSAgZWNobyAiLWhpZGRlbiI+PiAkbGliLmV4cH4KKwkgICRDQyAtc2hhcmVkJGFsbG93X3VuZGVmaW5lZF9mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgLVdsLC1pbnB1dCAtV2wsJGxpYi5leHAgIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbgkkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWJ+CisJICAkcm0gJGxpYi5leHAnCisKKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nLXJwYXRoICRsaWJkaXInCisJaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9OgorCisJIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSMKKwkjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisJIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKwkjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisJIyBkZXBlbmRlbmNpZXMuCisJb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8IGdyZXAgImxkIiB8IGdyZXAgLXYgImxkOiJgOyB0ZW1wbGlzdD1gZWNobyAkdGVtcGxpc3QgfCAkU0VEICJzL1woXi4qbGQuKlwpXCggLipsZC4qJFwpL1wxLyJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZWNobyAkbGlzdCcKKwk7OworICAgICAgKikKKwlpZiB0ZXN0ICIkR1hYIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCisJIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKworCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKwkgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKKworCSAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8IGdyZXAgIlwtTCInCisKKwllbHNlCisJICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgIGxkX3NobGlic19DWFg9bm8KKwlmaQorCTs7CisgICAgZXNhYworICAgIDs7CisgIHBzb3MqKQorICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgIGxkX3NobGlic19DWFg9bm8KKyAgICA7OworICBzdW5vczQqKQorICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICBDQyopCisJIyBTdW4gQysrIDQueAorCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCWxkX3NobGlic19DWFg9bm8KKwk7OworICAgICAgbGNjKikKKwkjIEx1Y2lkCisJIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJbGRfc2hsaWJzX0NYWD1ubworCTs7CisgICAgICAqKQorCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCWxkX3NobGlic19DWFg9bm8KKwk7OworICAgIGVzYWMKKyAgICA7OworICBzb2xhcmlzKikKKyAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgQ0MqKQorCSMgU3VuIEMrKyA0LjIsIDUueCBhbmQgQ2VudGVybGluZSBDKysKKyAgICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPXllcworCW5vX3VuZGVmaW5lZF9mbGFnX0NYWD0nIC16ZGVmcycKKwlhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAgLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCWFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH4kZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkkQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAgJHt3bH0tTSAke3dsfSRsaWIuZXhwIC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kcm0gJGxpYi5leHAnCisKKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nLVIkbGliZGlyJworCWhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPW5vCisJY2FzZSAkaG9zdF9vcyBpbgorCSAgc29sYXJpczIuWzAtNV0gfCBzb2xhcmlzMi5bMC01XS4qKSA7OworCSAgKikKKwkgICAgIyBUaGUgQysrIGNvbXBpbGVyIGlzIHVzZWQgYXMgbGlua2VyIHNvIHdlIG11c3QgdXNlICR3bAorCSAgICAjIGZsYWcgdG8gcGFzcyB0aGUgY29tbWFuZHMgdG8gdGhlIHVuZGVybHlpbmcgc3lzdGVtCisJICAgICMgbGlua2VyLiBXZSBtdXN0IGFsc28gcGFzcyBlYWNoIGNvbnZpZW5jZSBsaWJyYXJ5IHRocm91Z2gKKwkgICAgIyB0byB0aGUgc3lzdGVtIGxpbmtlciBiZXR3ZWVuIGFsbGV4dHJhY3QvZGVmYXVsdGV4dHJhY3QuCisJICAgICMgVGhlIEMrKyBjb21waWxlciB3aWxsIGNvbWJpbmUgbGlua2VyIG9wdGlvbnMgc28gd2UKKwkgICAgIyBjYW5ub3QganVzdCBwYXNzIHRoZSBjb252aWVuY2UgbGlicmFyeSBuYW1lcyB0aHJvdWdoCisJICAgICMgd2l0aG91dCAkd2wuCisJICAgICMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCisJICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nJHt3bH0teiAke3dsfWFsbGV4dHJhY3RgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkZWNobyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0teiAke3dsfWRlZmF1bHRleHRyYWN0JworCSAgICA7OworCWVzYWMKKwlsaW5rX2FsbF9kZXBsaWJzX0NYWD15ZXMKKworCW91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdlY2hvJworCisJIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJIyAiQ0MgLXhhciIsIHdoZXJlICJDQyIgaXMgdGhlIFN1biBDKysgY29tcGlsZXIuICBUaGlzIGlzCisJIyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIGluc3RhbnRpYXRlZCB0ZW1wbGF0ZXMgYXJlIGluY2x1ZGVkCisJIyBpbiB0aGUgYXJjaGl2ZS4KKwlvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC14YXIgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwk7OworICAgICAgZ2N4KikKKwkjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorCWFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKKworCSMgVGhlIEMrKyBjb21waWxlciBtdXN0IGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBhcmNoaXZlLgorCW9sZF9hcmNoaXZlX2NtZHNfQ1hYPSckQ0MgJExERkxBR1MgLWFyY2hpdmUgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwk7OworICAgICAgKikKKwkjIEdOVSBDKysgY29tcGlsZXIgd2l0aCBTb2xhcmlzIGxpbmtlcgorCWlmIHRlc3QgIiRHWFgiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCSAgbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYPScgJHt3bH0teiAke3dsfWRlZnMnCisJICBpZiAkQ0MgLS12ZXJzaW9uIHwgZ3JlcCAtdiAnXjJcLjcnID4gL2Rldi9udWxsOyB0aGVuCisJICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkTERGTEFHUyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCAkd2wkc29uYW1lIC1vICRsaWInCisJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH4kZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkJJENDIC1zaGFyZWQgLW5vc3RkbGliICR7d2x9LU0gJHdsJGxpYi5leHAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JHJtICRsaWIuZXhwJworCisJICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0iJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCBncmVwIFwiXC1MXCIiCisJICBlbHNlCisJICAgICMgZysrIDIuNyBhcHBlYXJzIHRvIHJlcXVpcmUgYC1HJyBOT1QgYC1zaGFyZWQnIG9uIHRoaXMKKwkgICAgIyBwbGF0Zm9ybS4KKwkgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1HIC1ub3N0ZGxpYiAkTERGTEFHUyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCAkd2wkc29uYW1lIC1vICRsaWInCisJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH4kZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkJJENDIC1HIC1ub3N0ZGxpYiAke3dsfS1NICR3bCRsaWIuZXhwIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRybSAkbGliLmV4cCcKKworCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9IiRDQyAtRyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8IGdyZXAgXCJcLUxcIiIKKwkgIGZpCisKKwkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1SICR3bCRsaWJkaXInCisJZmkKKwk7OworICAgIGVzYWMKKyAgICA7OworICBzeXN2NCp1dzIqIHwgc3lzdjVPcGVuVU5JWCogfCBzeXN2NVVuaXhXYXJlNy5bMDFdLlsxMF0qIHwgdW5peHdhcmU3KiB8IHNjbzMuMnY1LjAuWzAyNF0qKQorICAgIG5vX3VuZGVmaW5lZF9mbGFnX0NYWD0nJHt3bH0teix0ZXh0JworICAgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubworICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPW5vCisgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworCisgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgIENDKikKKwlhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLUcgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCWFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCTs7CisgICAgICAqKQorCWFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCTs7CisgICAgZXNhYworICAgIDs7CisgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiopCisgICAgIyBOb3RlOiBXZSBjYW4gTk9UIHVzZSAteiBkZWZzIGFzIHdlIG1pZ2h0IGRlc2lyZSwgYmVjYXVzZSB3ZSBkbyBub3QKKyAgICAjIGxpbmsgd2l0aCAtbGMsIGFuZCB0aGF0IHdvdWxkIGNhdXNlIGFueSBzeW1ib2xzIHVzZWQgZnJvbSBsaWJjIHRvCisgICAgIyBhbHdheXMgYmUgdW5yZXNvbHZlZCwgd2hpY2ggbWVhbnMganVzdCBhYm91dCBubyBsaWJyYXJ5IHdvdWxkCisgICAgIyBldmVyIGxpbmsgY29ycmVjdGx5LiAgSWYgd2UncmUgbm90IHVzaW5nIEdOVSBsZCB3ZSB1c2UgLXogdGV4dAorICAgICMgdGhvdWdoLCB3aGljaCBkb2VzIGNhdGNoIHNvbWUgYmFkIHN5bWJvbHMgYnV0IGlzbid0IGFzIGhlYXZ5LWhhbmRlZAorICAgICMgYXMgLXogZGVmcy4KKyAgICAjIEZvciBzZWN1cml0eSByZWFzb25zLCBpdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgYWx3YXlzCisgICAgIyB1c2UgYWJzb2x1dGUgcGF0aHMgZm9yIG5hbWluZyBzaGFyZWQgbGlicmFyaWVzLCBhbmQgZXhjbHVkZSB0aGUKKyAgICAjIERUX1JVTlBBVEggdGFnIGZyb20gZXhlY3V0YWJsZXMgYW5kIGxpYnJhcmllcy4gIEJ1dCBkb2luZyBzbworICAgICMgcmVxdWlyZXMgdGhhdCB5b3UgY29tcGlsZSBldmVyeXRoaW5nIHR3aWNlLCB3aGljaCBpcyBhIHBhaW4uCisgICAgIyBTbyB0aGF0IGJlaGF2aW91ciBpcyBvbmx5IGVuYWJsZWQgaWYgU0NPQUJTUEFUSCBpcyBzZXQgdG8gYQorICAgICMgbm9uLWVtcHR5IHZhbHVlIGluIHRoZSBlbnZpcm9ubWVudC4gIE1vc3QgbGlrZWx5IG9ubHkgdXNlZnVsIGZvcgorICAgICMgY3JlYXRpbmcgb2ZmaWNpYWwgZGlzdHJpYnV0aW9ucyBvZiBwYWNrYWdlcy4KKyAgICAjIFRoaXMgaXMgYSBoYWNrIHVudGlsIGxpYnRvb2wgb2ZmaWNpYWxseSBzdXBwb3J0cyBhYnNvbHV0ZSBwYXRoCisgICAgIyBuYW1lcyBmb3Igc2hhcmVkIGxpYnJhcmllcy4KKyAgICBub191bmRlZmluZWRfZmxhZ19DWFg9JyR7d2x9LXosdGV4dCcKKyAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9JyR7d2x9LXosbm9kZWZzJworICAgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubworICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPW5vCisgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9J2B0ZXN0IC16ICIkU0NPQUJTUEFUSCIgJiYgZWNobyAke3dsfS1SLCRsaWJkaXJgJworICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPSc6JworICAgIGxpbmtfYWxsX2RlcGxpYnNfQ1hYPXllcworICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR7d2x9LUJleHBvcnQnCisgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworCisgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgIENDKikKKwlhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLUcgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJOzsKKyAgICAgICopCisJYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwk7OworICAgIGVzYWMKKyAgICA7OworICB0YW5kZW0qKQorICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICBOQ0MqKQorCSMgTm9uU3RvcC1VWCBOQ0MgMy4yMAorCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCWxkX3NobGlic19DWFg9bm8KKwk7OworICAgICAgKikKKwkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwlsZF9zaGxpYnNfQ1hYPW5vCisJOzsKKyAgICBlc2FjCisgICAgOzsKKyAgdnh3b3JrcyopCisgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgbGRfc2hsaWJzX0NYWD1ubworICAgIDs7CisgICopCisgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgbGRfc2hsaWJzX0NYWD1ubworICAgIDs7Citlc2FjCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsZF9zaGxpYnNfQ1hYIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRsZF9zaGxpYnNfQ1hYIiA+JjY7IH0KK3Rlc3QgIiRsZF9zaGxpYnNfQ1hYIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KKworR0NDX0NYWD0iJEdYWCIKK0xEX0NYWD0iJExEIgorCisKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKK2NsYXNzIEZvbworeworcHVibGljOgorICBGb28gKHZvaWQpIHsgYSA9IDA7IH0KK3ByaXZhdGU6CisgIGludCBhOworfTsKK0VPRgorCitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KKyAgIyBQYXJzZSB0aGUgY29tcGlsZXIgb3V0cHV0IGFuZCBleHRyYWN0IHRoZSBuZWNlc3NhcnkKKyAgIyBvYmplY3RzLCBsaWJyYXJpZXMgYW5kIGxpYnJhcnkgZmxhZ3MuCisKKyAgIyBTZW50aW5lbCB1c2VkIHRvIGtlZXAgdHJhY2sgb2Ygd2hldGhlciBvciBub3Qgd2UgYXJlIGJlZm9yZQorICAjIHRoZSBjb25mdGVzdCBvYmplY3QgZmlsZS4KKyAgcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZT1ubworCisgICMgVGhlIGAqJyBpbiB0aGUgY2FzZSBtYXRjaGVzIGZvciBhcmNoaXRlY3R1cmVzIHRoYXQgdXNlIGBjYXNlJyBpbgorICAjICRvdXRwdXRfdmVyYm9zZV9jbWQgY2FuIHRyaWdnZXIgZ2xvYiBleHBhbnNpb24gZHVyaW5nIHRoZSBsb29wCisgICMgZXZhbCB3aXRob3V0IHRoaXMgc3Vic3RpdHV0aW9uLgorICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD1gJGVjaG8gIlgkb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQiIHwgJFhzZWQgLWUgIiRub19nbG9iX3N1YnN0ImAKKworICBmb3IgcCBpbiBgZXZhbCAkb3V0cHV0X3ZlcmJvc2VfbGlua19jbWRgOyBkbworICAgIGNhc2UgJHAgaW4KKworICAgIC1MKiB8IC1SKiB8IC1sKikKKyAgICAgICAjIFNvbWUgY29tcGlsZXJzIHBsYWNlIHNwYWNlIGJldHdlZW4gIi17TCxSfSIgYW5kIHRoZSBwYXRoLgorICAgICAgICMgUmVtb3ZlIHRoZSBzcGFjZS4KKyAgICAgICBpZiB0ZXN0ICRwID0gIi1MIiBcCisJICB8fCB0ZXN0ICRwID0gIi1SIjsgdGhlbgorCSBwcmV2PSRwCisJIGNvbnRpbnVlCisgICAgICAgZWxzZQorCSBwcmV2PQorICAgICAgIGZpCisKKyAgICAgICBpZiB0ZXN0ICIkcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZSIgPSBubzsgdGhlbgorCSBjYXNlICRwIGluCisJIC1MKiB8IC1SKikKKwkgICAjIEludGVybmFsIGNvbXBpbGVyIGxpYnJhcnkgcGF0aHMgc2hvdWxkIGNvbWUgYWZ0ZXIgdGhvc2UKKwkgICAjIHByb3ZpZGVkIHRoZSB1c2VyLiAgVGhlIHBvc3RkZXBzIGFscmVhZHkgY29tZSBhZnRlciB0aGUKKwkgICAjIHVzZXIgc3VwcGxpZWQgbGlicyBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIHByb2Nlc3MgdGhlbS4KKwkgICBpZiB0ZXN0IC16ICIkY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWCI7IHRoZW4KKwkgICAgIGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFg9IiR7cHJldn0ke3B9IgorCSAgIGVsc2UKKwkgICAgIGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFg9IiR7Y29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWH0gJHtwcmV2fSR7cH0iCisJICAgZmkKKwkgICA7OworCSAjIFRoZSAiLWwiIGNhc2Ugd291bGQgbmV2ZXIgY29tZSBiZWZvcmUgdGhlIG9iamVjdCBiZWluZworCSAjIGxpbmtlZCwgc28gZG9uJ3QgYm90aGVyIGhhbmRsaW5nIHRoaXMgY2FzZS4KKwkgZXNhYworICAgICAgIGVsc2UKKwkgaWYgdGVzdCAteiAiJHBvc3RkZXBzX0NYWCI7IHRoZW4KKwkgICBwb3N0ZGVwc19DWFg9IiR7cHJldn0ke3B9IgorCSBlbHNlCisJICAgcG9zdGRlcHNfQ1hYPSIke3Bvc3RkZXBzX0NYWH0gJHtwcmV2fSR7cH0iCisJIGZpCisgICAgICAgZmkKKyAgICAgICA7OworCisgICAgKi4kb2JqZXh0KQorICAgICAgICMgVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHRlc3Qgb2JqZWN0IGZpbGUgb25seSBzaG93cyB1cAorICAgICAgICMgb25jZSBpbiB0aGUgY29tcGlsZXIgb3V0cHV0LgorICAgICAgIGlmIHRlc3QgIiRwIiA9ICJjb25mdGVzdC4kb2JqZXh0IjsgdGhlbgorCSBwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lPXllcworCSBjb250aW51ZQorICAgICAgIGZpCisKKyAgICAgICBpZiB0ZXN0ICIkcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZSIgPSBubzsgdGhlbgorCSBpZiB0ZXN0IC16ICIkcHJlZGVwX29iamVjdHNfQ1hYIjsgdGhlbgorCSAgIHByZWRlcF9vYmplY3RzX0NYWD0iJHAiCisJIGVsc2UKKwkgICBwcmVkZXBfb2JqZWN0c19DWFg9IiRwcmVkZXBfb2JqZWN0c19DWFggJHAiCisJIGZpCisgICAgICAgZWxzZQorCSBpZiB0ZXN0IC16ICIkcG9zdGRlcF9vYmplY3RzX0NYWCI7IHRoZW4KKwkgICBwb3N0ZGVwX29iamVjdHNfQ1hYPSIkcCIKKwkgZWxzZQorCSAgIHBvc3RkZXBfb2JqZWN0c19DWFg9IiRwb3N0ZGVwX29iamVjdHNfQ1hYICRwIgorCSBmaQorICAgICAgIGZpCisgICAgICAgOzsKKworICAgICopIDs7ICMgSWdub3JlIHRoZSByZXN0LgorCisgICAgZXNhYworICBkb25lCisKKyAgIyBDbGVhbiB1cC4KKyAgcm0gLWYgYS5vdXQgYS5leGUKK2Vsc2UKKyAgZWNobyAibGlidG9vbC5tNDogZXJyb3I6IHByb2JsZW0gY29tcGlsaW5nIENYWCB0ZXN0IHByb2dyYW0iCitmaQorCiskcm0gLWYgY29uZmVzdC4kb2JqZXh0CisKKyMgUE9SVE1FOiBvdmVycmlkZSBhYm92ZSB0ZXN0IG9uIHN5c3RlbXMgd2hlcmUgaXQgaXMgYnJva2VuCitjYXNlICRob3N0X29zIGluCitpbnRlcml4MyopCisgICMgSW50ZXJpeCAzLjUgaW5zdGFsbHMgY29tcGxldGVseSBob3NlZCAubGEgZmlsZXMgZm9yIEMrKywgc28gcmF0aGVyIHRoYW4KKyAgIyBoYWNrIGFsbCBhcm91bmQgaXQsIGxldCdzIGp1c3QgdHJ1c3QgImcrKyIgdG8gRFRSVC4KKyAgcHJlZGVwX29iamVjdHNfQ1hYPQorICBwb3N0ZGVwX29iamVjdHNfQ1hYPQorICBwb3N0ZGVwc19DWFg9CisgIDs7CisKK3NvbGFyaXMqKQorICBjYXNlICRjY19iYXNlbmFtZSBpbgorICBDQyopCisgICAgIyBBZGRpbmcgdGhpcyByZXF1aXJlcyBhIGtub3duLWdvb2Qgc2V0dXAgb2Ygc2hhcmVkIGxpYnJhcmllcyBmb3IKKyAgICAjIFN1biBjb21waWxlciB2ZXJzaW9ucyBiZWZvcmUgNS42LCBlbHNlIFBJQyBvYmplY3RzIGZyb20gYW4gb2xkCisgICAgIyBhcmNoaXZlIHdpbGwgYmUgbGlua2VkIGludG8gdGhlIG91dHB1dCwgbGVhZGluZyB0byBzdWJ0bGUgYnVncy4KKyAgICBwb3N0ZGVwc19DWFg9Jy1sQ3N0ZCAtbENydW4nCisgICAgOzsKKyAgZXNhYworICA7OworZXNhYworCisKK2Nhc2UgIiAkcG9zdGRlcHNfQ1hYICIgaW4KKyoiIC1sYyAiKikgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPW5vIDs7Citlc2FjCisKK2x0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPQorbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPQorbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPQorCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICRFQ0hPX0MiID4mNjsgfQorCisgICMgQysrIHNwZWNpZmljIGNhc2VzIGZvciBwaWMsIHN0YXRpYywgd2wsIGV0Yy4KKyAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1zdGF0aWMnCisKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgYWl4KikKKyAgICAgICMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1Cc3RhdGljJworICAgICAgZmkKKyAgICAgIDs7CisgICAgYW1pZ2FvcyopCisgICAgICAjIEZJWE1FOiB3ZSBuZWVkIGF0IGxlYXN0IDY4MDIwIGNvZGUgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcywgYnV0CisgICAgICAjIGFkZGluZyB0aGUgYC1tNjgwMjAnIGZsYWcgdG8gR0NDIHByZXZlbnRzIGJ1aWxkaW5nIGFueXRoaW5nIGJldHRlciwKKyAgICAgICMgbGlrZSBgLW02ODA0MCcuCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1tNjgwMjAgLXJlc2lkZW50MzIgLW1hbHdheXMtcmVzdG9yZS1hNCcKKyAgICAgIDs7CisgICAgYmVvcyogfCBjeWd3aW4qIHwgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KiB8IG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciB0aGVzZSBPU2VzLgorICAgICAgOzsKKyAgICBtaW5ndyogfCBvczIqIHwgcHczMiopCisgICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisgICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctRERMTF9FWFBPUlQnCisgICAgICA7OworICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCisgICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1mbm8tY29tbW9uJworICAgICAgOzsKKyAgICAqZGpncHAqKQorICAgICAgIyBESkdQUCBkb2VzIG5vdCBzdXBwb3J0IHNoYXJlZCBsaWJyYXJpZXMgYXQgYWxsCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9CisgICAgICA7OworICAgIGludGVyaXgzKikKKyAgICAgICMgSW50ZXJpeCAzLnggZ2NjIC1mcGljLy1mUElDIG9wdGlvbnMgZ2VuZXJhdGUgYnJva2VuIGNvZGUuCisgICAgICAjIEluc3RlYWQsIHdlIHJlbG9jYXRlIHNoYXJlZCBsaWJyYXJpZXMgYXQgcnVudGltZS4KKyAgICAgIDs7CisgICAgc3lzdjQqTVAqKQorICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgorCWx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0tS2NvbmZvcm1fcGljCisgICAgICBmaQorICAgICAgOzsKKyAgICBocHV4KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciBJQTY0IEhQLVVYIGFuZCA2NC1iaXQgSFAtVVgsIGJ1dAorICAgICAgIyBub3QgZm9yIFBBIEhQLVVYLgorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIGhwcGEqNjQqfGlhNjQqKQorCTs7CisgICAgICAqKQorCWx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLWZQSUMnCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLWZQSUMnCisgICAgICA7OworICAgIGVzYWMKKyAgZWxzZQorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeDQqIHwgYWl4NSopCisJIyBBbGwgQUlYIGNvZGUgaXMgUElDLgorCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJICAjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgorCSAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKKwllbHNlCisJICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1ibnNvIC1iSTovbGliL3N5c2NhbGxzLmV4cCcKKwlmaQorCTs7CisgICAgICBjaG9ydXMqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJY3hjaDY4KikKKwkgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJICAjIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsIENYWCk9Ii0tbm9fYXV0b19pbnN0YW50aWF0aW9uIC11IF9fbWFpbiAtdSBfX3ByZW1haW4gLXUgX2Fib3J0IC1yICRDT09MX0RJUi9saWIvbGliT3JiLmEgJE1WTUVfRElSL2xpYi9DQy9saWJDLmEgJE1WTUVfRElSL2xpYi9jbGFzc2l4L2xpYmN4LnMuYSIKKwkgIDs7CisJZXNhYworCTs7CisgICAgICAgZGFyd2luKikKKyAgICAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KKyAgICAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKKyAgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgIHhsYyopCisgICAgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLXFub2NvbW1vbicKKyAgICAgICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCisgICAgICAgICAgIDs7CisgICAgICAgICBlc2FjCisgICAgICAgOzsKKyAgICAgIGRndXgqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBlYysrKikKKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctS1BJQycKKwkgICAgOzsKKwkgIGdoY3gqKQorCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1waWMnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgZnJlZWJzZCogfCBrZnJlZWJzZCotZ251IHwgZHJhZ29uZmx5KikKKwkjIEZyZWVCU0QgdXNlcyBHTlUgQysrCisJOzsKKyAgICAgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBDQyopCisJICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9JyR7d2x9LWEgJHt3bH1hcmNoaXZlJworCSAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQ7IHRoZW4KKwkgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9JytaJworCSAgICBmaQorCSAgICA7OworCSAgYUNDKikKKwkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nJHt3bH0tYSAke3dsfWFyY2hpdmUnCisJICAgIGNhc2UgJGhvc3RfY3B1IGluCisJICAgIGhwcGEqNjQqfGlhNjQqKQorCSAgICAgICMgK1ogdGhlIGRlZmF1bHQKKwkgICAgICA7OworCSAgICAqKQorCSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nK1onCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIGludGVyaXgqKQorCSMgVGhpcyBpcyBjODksIHdoaWNoIGlzIE1TIFZpc3VhbCBDKysgKG5vIHNoYXJlZCBsaWJzKQorCSMgQW55b25lIHdhbnRzIHRvIGRvIGEgcG9ydD8KKwk7OworICAgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgQ0MqKQorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKKwkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctbm9uX3NoYXJlZCcKKwkgICAgIyBDQyBwaWMgZmxhZyAtS1BJQyBpcyB0aGUgZGVmYXVsdC4KKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBsaW51eCopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIEtDQyopCisJICAgICMgS0FJIEMrKyBDb21waWxlcgorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLS1iYWNrZW5kIC1XbCwnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLWZQSUMnCisJICAgIDs7CisJICBpY3BjKiB8IGVjcGMqKQorCSAgICAjIEludGVsIEMrKworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctS1BJQycKKwkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctc3RhdGljJworCSAgICA7OworCSAgcGdDQyopCisJICAgICMgUG9ydGxhbmQgR3JvdXAgQysrIGNvbXBpbGVyLgorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctZnBpYycKKwkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKKwkgICAgOzsKKwkgIGN4eCopCisJICAgICMgQ29tcGFxIEMrKworCSAgICAjIE1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgaXMgZW1wdHkuICBJdCBhcHBlYXJzIHRoYXQgYWxsIEFscGhhCisJICAgICMgTGludXggYW5kIENvbXBhcSBUcnU2NCBVbml4IG9iamVjdHMgYXJlIFBJQy4KKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPQorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1ub25fc2hhcmVkJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIGx5bnhvcyopCisJOzsKKyAgICAgIG04OGsqKQorCTs7CisgICAgICBtdnMqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBjeHgqKQorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1XIGMsZXhwb3J0YWxsJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIG5ldGJzZCopCisJOzsKKyAgICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgS0NDKikKKwkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy0tYmFja2VuZCAtV2wsJworCSAgICA7OworCSAgUkNDKikKKwkgICAgIyBSYXRpb25hbCBDKysgMi40LjEKKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctcGljJworCSAgICA7OworCSAgY3h4KikKKwkgICAgIyBEaWdpdGFsL0NvbXBhcSBDKysKKwkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCisJICAgICMgTWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBpcyBlbXB0eS4gIEl0IGFwcGVhcnMgdGhhdCBhbGwgQWxwaGEKKwkgICAgIyBMaW51eCBhbmQgQ29tcGFxIFRydTY0IFVuaXggb2JqZWN0cyBhcmUgUElDLgorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9CisJICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLW5vbl9zaGFyZWQnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgcHNvcyopCisJOzsKKyAgICAgIHNvbGFyaXMqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBDQyopCisJICAgICMgU3VuIEMrKyA0LjIsIDUueCBhbmQgQ2VudGVybGluZSBDKysKKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctS1BJQycKKwkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKKwkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1Rb3B0aW9uIGxkICcKKwkgICAgOzsKKwkgIGdjeCopCisJICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLVBJQycKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBzdW5vczQqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBDQyopCisJICAgICMgU3VuIEMrKyA0LngKKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctcGljJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1Cc3RhdGljJworCSAgICA7OworCSAgbGNjKikKKwkgICAgIyBMdWNpZAorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1waWMnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgdGFuZGVtKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgTkNDKikKKwkgICAgIyBOb25TdG9wLVVYIE5DQyAzLjIwCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLUtQSUMnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgc3lzdjUqIHwgdW5peHdhcmUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IE9wZW5VTklYKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgQ0MqKQorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctS1BJQycKKwkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIHZ4d29ya3MqKQorCTs7CisgICAgICAqKQorCWx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZF9DWFg9bm8KKwk7OworICAgIGVzYWMKKyAgZmkKKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFgiID4mNjsgfQorCisjCisjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCisjCitpZiB0ZXN0IC1uICIkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIjsgdGhlbgorCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiAkY29tcGlsZXIgUElDIGZsYWcgJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCB3b3JrcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmICRjb21waWxlciBQSUMgZmxhZyAkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIHdvcmtzLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19DWFgrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgbHRfcHJvZ19jb21waWxlcl9waWNfd29ya3NfQ1hYPW5vCisgIGFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorICAgcHJpbnRmICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGx0X2NvbXBpbGVyX2ZsYWc9IiRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFggLURQSUMiCisgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgorICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KKyAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKKyAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCisgICAjIFRoZSBvcHRpb24gaXMgcmVmZXJlbmNlZCB2aWEgYSB2YXJpYWJsZSB0byBhdm9pZCBjb25mdXNpbmcgc2VkLgorICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCisgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCisgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjI0OTYxOiAkbHRfY29tcGlsZVwiIiA+JjUpCisgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQorICAgYWNfc3RhdHVzPSQ/CisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOjI0OTY1OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgIiRhY19vdXRmaWxlIjsgdGhlbgorICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3Mgb3RoZXIgdGhhbiB0aGUgdXN1YWwgb3V0cHV0LgorICAgICAkZWNobyAiWCRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+Y29uZnRlc3QuZXhwCisgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgorICAgICBpZiB0ZXN0ICEgLXMgY29uZnRlc3QuZXIyIHx8IGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfd29ya3NfQ1hYPXllcworICAgICBmaQorICAgZmkKKyAgICRybSBjb25mdGVzdCoKKworZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0NYWCIgPiY1CitlY2hvICIke0VDSE9fVH0kbHRfcHJvZ19jb21waWxlcl9waWNfd29ya3NfQ1hYIiA+JjY7IH0KKworaWYgdGVzdCB4IiRsdF9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19DWFgiID0geHllczsgdGhlbgorICAgIGNhc2UgJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCBpbgorICAgICAiIiB8ICIgIiopIDs7CisgICAgICopIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0iICRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFgiIDs7CisgICAgIGVzYWMKK2Vsc2UKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9CisgICAgIGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZF9DWFg9bm8KK2ZpCisKK2ZpCitjYXNlICRob3N0X29zIGluCisgICMgRm9yIHBsYXRmb3JtcyB3aGljaCBkbyBub3Qgc3VwcG9ydCBQSUMsIC1EUElDIGlzIG1lYW5pbmdsZXNzOgorICAqZGpncHAqKQorICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0KKyAgICA7OworICAqKQorICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0iJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCAtRFBJQyIKKyAgICA7OworZXNhYworCisjCisjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCisjCit3bD0kbHRfcHJvZ19jb21waWxlcl93bF9DWFggZXZhbCBsdF90bXBfc3RhdGljX2ZsYWc9XCIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYXCIKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3MuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0NYWCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19DWFg9bm8KKyAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisgICBMREZMQUdTPSIkTERGTEFHUyAkbHRfdG1wX3N0YXRpY19mbGFnIgorICAgcHJpbnRmICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGlmIChldmFsICRhY19saW5rIDI+Y29uZnRlc3QuZXJyKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorICAgICAjIFRoZSBsaW5rZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCisgICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgICAgIyBBcHBlbmQgYW55IGVycm9ycyB0byB0aGUgY29uZmlnLmxvZy4KKyAgICAgICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKKyAgICAgICAkZWNobyAiWCRfbHRfbGlua2VyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPiBjb25mdGVzdC5leHAKKyAgICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKKyAgICAgICBpZiBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfQ1hYPXllcworICAgICAgIGZpCisgICAgIGVsc2UKKyAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19DWFg9eWVzCisgICAgIGZpCisgICBmaQorICAgJHJtIGNvbmZ0ZXN0KgorICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKworZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0NYWCIgPiY1CitlY2hvICIke0VDSE9fVH0kbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfQ1hYIiA+JjY7IH0KKworaWYgdGVzdCB4IiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19DWFgiID0geHllczsgdGhlbgorICAgIDoKK2Vsc2UKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9CitmaQorCisKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0Li4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFgrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYPW5vCisgICAkcm0gLXIgY29uZnRlc3QgMj4vZGV2L251bGwKKyAgIG1rZGlyIGNvbmZ0ZXN0CisgICBjZCBjb25mdGVzdAorICAgbWtkaXIgb3V0CisgICBwcmludGYgIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorCisgICBsdF9jb21waWxlcl9mbGFnPSItbyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQiCisgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgorICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KKyAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKKyAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCisgICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKKyAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKKyAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCisgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6MjUwNjU6ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQorICAgYWNfc3RhdHVzPSQ/CisgICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZToyNTA2OTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zIG91dC9jb25mdGVzdDIuJGFjX29iamV4dAorICAgdGhlbgorICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKKyAgICAgJGVjaG8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCisgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBvdXQvY29uZnRlc3QuZXJyID5vdXQvY29uZnRlc3QuZXIyCisgICAgIGlmIHRlc3QgISAtcyBvdXQvY29uZnRlc3QuZXIyIHx8IGRpZmYgb3V0L2NvbmZ0ZXN0LmV4cCBvdXQvY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFg9eWVzCisgICAgIGZpCisgICBmaQorICAgY2htb2QgdSt3IC4gMj4mNQorICAgJHJtIGNvbmZ0ZXN0KgorICAgIyBTR0kgQysrIGNvbXBpbGVyIHdpbGwgY3JlYXRlIGRpcmVjdG9yeSBvdXQvaWlfZmlsZXMvIGZvcgorICAgIyB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uCisgICB0ZXN0IC1kIG91dC9paV9maWxlcyAmJiAkcm0gb3V0L2lpX2ZpbGVzLyogJiYgcm1kaXIgb3V0L2lpX2ZpbGVzCisgICAkcm0gb3V0LyogJiYgcm1kaXIgb3V0CisgICBjZCAuLgorICAgcm1kaXIgY29uZnRlc3QKKyAgICRybSBjb25mdGVzdCoKKworZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCIgPiY1CitlY2hvICIke0VDSE9fVH0kbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYIiA+JjY7IH0KKworCitoYXJkX2xpbmtzPSJub3R0ZXN0ZWQiCitpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYIiA9IG5vICYmIHRlc3QgIiRuZWVkX2xvY2tzIiAhPSBubzsgdGhlbgorICAjIGRvIG5vdCBvdmVyd3JpdGUgdGhlIHZhbHVlIG9mIG5lZWRfbG9ja3MgcHJvdmlkZWQgYnkgdGhlIHVzZXIKKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzLi4uICRFQ0hPX0MiID4mNjsgfQorICBoYXJkX2xpbmtzPXllcworICAkcm0gY29uZnRlc3QqCisgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCisgIHRvdWNoIGNvbmZ0ZXN0LmEKKyAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+JjUgfHwgaGFyZF9saW5rcz1ubworICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubworICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRoYXJkX2xpbmtzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRoYXJkX2xpbmtzIiA+JjY7IH0KKyAgaWYgdGVzdCAiJGhhcmRfbGlua3MiID0gbm87IHRoZW4KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBcYCRDQycgZG9lcyBub3Qgc3VwcG9ydCBcYC1jIC1vJywgc28gXGBtYWtlIC1qJyBtYXkgYmUgdW5zYWZlIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogXGAkQ0MnIGRvZXMgbm90IHN1cHBvcnQgXGAtYyAtbycsIHNvIFxgbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiYyO30KKyAgICBuZWVkX2xvY2tzPXdhcm4KKyAgZmkKK2Vsc2UKKyAgbmVlZF9sb2Nrcz1ubworZmkKKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLi4uICRFQ0hPX0MiID4mNjsgfQorCisgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgYWl4NCogfCBhaXg1KikKKyAgICAjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB3ZSBkb24ndCB3YW50IHRoZSAiLUMiIG9wdGlvbi4KKyAgICAjIC1DIG1lYW5zIGRlbWFuZ2xlIHRvIEFJWCBubSwgYnV0IG1lYW5zIGRvbid0IGRlbWFuZ2xlIHdpdGggR05VIG5tCisgICAgaWYgJE5NIC1WIDI+JjEgfCBncmVwICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0nJE5NIC1CcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkMiA9PSAiVCIpIHx8IChcJDIgPT0gIkQiKSB8fCAoXCQyID09ICJCIikpICYmIChzdWJzdHIoXCQzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJDMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCisgICAgZWxzZQorICAgICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9JyROTSAtQkNwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQyID09ICJUIikgfHwgKFwkMiA9PSAiRCIpIHx8IChcJDIgPT0gIkIiKSkgJiYgKHN1YnN0cihcJDMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFwkMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKyAgICBmaQorICAgIDs7CisgIHB3MzIqKQorICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSIkbHRkbGxfY21kcyIKKyAgOzsKKyAgY3lnd2luKiB8IG1pbmd3KikKKyAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdIC9zLy4qIFwoW14gXSpcKS9cMSBEQVRBLzsvXi4qIF9fbm1fXy9zL14uKiBfX25tX19cKFteIF0qXCkgW14gXSovXDEgREFUQS87L15JIC9kOy9eW0FJVFddIC9zLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworICA7OworICAqKQorICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgIDs7CisgIGVzYWMKKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbGRfc2hsaWJzX0NYWCIgPiY1CitlY2hvICIke0VDSE9fVH0kbGRfc2hsaWJzX0NYWCIgPiY2OyB9Cit0ZXN0ICIkbGRfc2hsaWJzX0NYWCIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCisKKyMKKyMgRG8gd2UgbmVlZCB0byBleHBsaWNpdGx5IGxpbmsgbGliYz8KKyMKK2Nhc2UgIngkYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYIiBpbgoreHx4eWVzKQorICAjIEFzc3VtZSAtbGMgc2hvdWxkIGJlIGFkZGVkCisgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD15ZXMKKworICBpZiB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICBjYXNlICRhcmNoaXZlX2NtZHNfQ1hYIGluCisgICAgKid+JyopCisgICAgICAjIEZJWE1FOiB3ZSBtYXkgaGF2ZSB0byBkZWFsIHdpdGggbXVsdGktY29tbWFuZCBzZXF1ZW5jZXMuCisgICAgICA7OworICAgICckQ0MgJyopCisgICAgICAjIFRlc3Qgd2hldGhlciB0aGUgY29tcGlsZXIgaW1wbGljaXRseSBsaW5rcyB3aXRoIC1sYyBzaW5jZSBvbiBzb21lCisgICAgICAjIHN5c3RlbXMsIC1sZ2NjIGhhcyB0byBjb21lIGJlZm9yZSAtbGMuIElmIGdjYyBhbHJlYWR5IHBhc3NlcyAtbGMKKyAgICAgICMgdG8gbGQsIGRvbid0IGFkZCAtbGMgYmVmb3JlIC1sZ2NjLgorICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluLi4uICRFQ0hPX0MiID4mNjsgfQorICAgICAgJHJtIGNvbmZ0ZXN0KgorICAgICAgcHJpbnRmICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKworICAgICAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9IDI+Y29uZnRlc3QuZXJyOyB0aGVuCisgICAgICAgIHNvbmFtZT1jb25mdGVzdAorICAgICAgICBsaWI9Y29uZnRlc3QKKyAgICAgICAgbGlib2Jqcz1jb25mdGVzdC4kYWNfb2JqZXh0CisgICAgICAgIGRlcGxpYnM9CisgICAgICAgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWAorCXBpY19mbGFnPSRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFgKKyAgICAgICAgY29tcGlsZXJfZmxhZ3M9LXYKKyAgICAgICAgbGlua2VyX2ZsYWdzPS12CisgICAgICAgIHZlcnN0cmluZz0KKyAgICAgICAgb3V0cHV0X29iamRpcj0uCisgICAgICAgIGxpYm5hbWU9Y29uZnRlc3QKKyAgICAgICAgbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZz0kYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYCisgICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0KKyAgICAgICAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYXJjaGl2ZV9jbWRzX0NYWCAyXD5cJjEgXHwgZ3JlcCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxXCIiKSA+JjUKKyAgKGV2YWwgJGFyY2hpdmVfY21kc19DWFggMlw+XCYxIFx8IGdyZXAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfQorICAgICAgICB0aGVuCisJICBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9bm8KKyAgICAgICAgZWxzZQorCSAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPXllcworICAgICAgICBmaQorICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9JGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWcKKyAgICAgIGVsc2UKKyAgICAgICAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1CisgICAgICBmaQorICAgICAgJHJtIGNvbmZ0ZXN0KgorICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFgiID4mNjsgfQorICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisgIDs7Citlc2FjCisKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcy4uLiAkRUNIT19DIiA+JjY7IH0KK2xpYnJhcnlfbmFtZXNfc3BlYz0KK2xpYm5hbWVfc3BlYz0nbGliJG5hbWUnCitzb25hbWVfc3BlYz0KK3NocmV4dF9jbWRzPSIuc28iCitwb3N0aW5zdGFsbF9jbWRzPQorcG9zdHVuaW5zdGFsbF9jbWRzPQorZmluaXNoX2NtZHM9CitmaW5pc2hfZXZhbD0KK3NobGlicGF0aF92YXI9CitzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9dW5rbm93bgordmVyc2lvbl90eXBlPW5vbmUKK2R5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKK3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIgoraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgZ3JlcCAiXmxpYnJhcmllczoiIHwgJFNFRCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAicyw9LywvLGciYAorICBpZiBlY2hvICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IGdyZXAgJzsnID4vZGV2L251bGwgOyB0aGVuCisgICAgIyBpZiB0aGUgcGF0aCBjb250YWlucyAiOyIgdGhlbiB3ZSBhc3N1bWUgaXQgdG8gYmUgdGhlIHNlcGFyYXRvcgorICAgICMgb3RoZXJ3aXNlIGRlZmF1bHQgdG8gdGhlIHN0YW5kYXJkIHBhdGggc2VwYXJhdG9yIChpLmUuICI6IikgLSBpdCBpcworICAgICMgYXNzdW1lZCB0aGF0IG5vIHBhcnQgb2YgYSBub3JtYWwgcGF0aG5hbWUgY29udGFpbnMgIjsiIGJ1dCB0aGF0IHNob3VsZAorICAgICMgb2theSBpbiB0aGUgcmVhbCB3b3JsZCB3aGVyZSAiOyIgaW4gZGlycGF0aHMgaXMgaXRzZWxmIHByb2JsZW1hdGljLgorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKKyAgZWxzZQorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKyAgZmkKK2Vsc2UKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliIgorZmkKK25lZWRfbGliX3ByZWZpeD11bmtub3duCitoYXJkY29kZV9pbnRvX2xpYnM9bm8KKworIyB3aGVuIHlvdSBzZXQgbmVlZF92ZXJzaW9uIHRvIG5vLCBtYWtlIHN1cmUgaXQgZG9lcyBub3QgY2F1c2UgLXNldF92ZXJzaW9uCisjIGZsYWdzIHRvIGJlIGxlZnQgd2l0aG91dCBhcmd1bWVudHMKK25lZWRfdmVyc2lvbj11bmtub3duCisKK2Nhc2UgJGhvc3Rfb3MgaW4KK2FpeDMqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lLmEnCisgIHNobGlicGF0aF92YXI9TElCUEFUSAorCisgICMgQUlYIDMgaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gd2UgYXBwZW5kIGEgbWFqb3IgdmVyc2lvbiB0byB0aGUgbmFtZS4KKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgOzsKKworYWl4NCogfCBhaXg1KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICAgICMgQUlYIDUgc3VwcG9ydHMgSUE2NAorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGVsc2UKKyAgICAjIFdpdGggR0NDIHVwIHRvIDIuOTUueCwgY29sbGVjdDIgd291bGQgY3JlYXRlIGFuIGltcG9ydCBmaWxlCisgICAgIyBmb3IgZGVwZW5kZW5jZSBsaWJyYXJpZXMuICBUaGUgaW1wb3J0IGZpbGUgd291bGQgc3RhcnQgd2l0aAorICAgICMgdGhlIGxpbmUgYCMhIC4nLiAgVGhpcyB3b3VsZCBjYXVzZSB0aGUgZ2VuZXJhdGVkIGxpYnJhcnkgdG8KKyAgICAjIGRlcGVuZCBvbiBgLicsIGFsd2F5cyBhbiBpbnZhbGlkIGxpYnJhcnkuICBUaGlzIHdhcyBmaXhlZCBpbgorICAgICMgZGV2ZWxvcG1lbnQgc25hcHNob3RzIG9mIEdDQyBwcmlvciB0byAzLjAuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4NCB8IGFpeDQuWzAxXSB8IGFpeDQuWzAxXS4qKQorICAgICAgaWYgeyBlY2hvICcjaWYgX19HTlVDX18gPiAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fID49IDk3KScKKwkgICBlY2hvICcgeWVzICcKKwkgICBlY2hvICcjZW5kaWYnOyB9IHwgJHtDQ30gLUUgLSB8IGdyZXAgeWVzID4gL2Rldi9udWxsOyB0aGVuCisJOgorICAgICAgZWxzZQorCWNhbl9idWlsZF9zaGFyZWQ9bm8KKyAgICAgIGZpCisgICAgICA7OworICAgIGVzYWMKKyAgICAjIEFJWCAob24gUG93ZXIqKSBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyBjdXJyZW50bHkgd2UgY2FuIG5vdCBoYXJkY29kZSBjb3JyZWN0CisgICAgIyBzb25hbWUgaW50byBleGVjdXRhYmxlLiBQcm9iYWJseSB3ZSBjYW4gYWRkIHZlcnNpb25pbmcgc3VwcG9ydCB0bworICAgICMgY29sbGVjdDIsIHNvIGFkZGl0aW9uYWwgbGlua3MgY2FuIGJlIHVzZWZ1bCBpbiBmdXR1cmUuCisgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisgICAgICAjIElmIHVzaW5nIHJ1biB0aW1lIGxpbmtpbmcgKG9uIEFJWCA0LjIgb3IgbGF0ZXIpIHVzZSBsaWI8bmFtZT4uc28KKyAgICAgICMgaW5zdGVhZCBvZiBsaWI8bmFtZT4uYSB0byBsZXQgcGVvcGxlIGtub3cgdGhhdCB0aGVzZSBhcmUgbm90CisgICAgICAjIHR5cGljYWwgQUlYIHNoYXJlZCBsaWJyYXJpZXMuCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBlbHNlCisgICAgICAjIFdlIHByZXNlcnZlIC5hIGFzIGV4dGVuc2lvbiBmb3Igc2hhcmVkIGxpYnJhcmllcyB0aHJvdWdoIEFJWDQuMgorICAgICAgIyBhbmQgbGF0ZXIgd2hlbiB3ZSBhcmUgbm90IGRvaW5nIHJ1biB0aW1lIGxpbmtpbmcuCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LmEgJGxpYm5hbWUuYScKKyAgICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgZmkKKyAgICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKKyAgZmkKKyAgOzsKKworYW1pZ2FvcyopCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuaXhsaWJyYXJ5ICRsaWJuYW1lLmEnCisgICMgQ3JlYXRlICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgZW50cmllcyBpbiAvc3lzL2xpYnMuCisgIGZpbmlzaF9ldmFsPSdmb3IgbGliIGluIGBscyAkbGliZGlyLyouaXhsaWJyYXJ5IDI+L2Rldi9udWxsYDsgZG8gbGlibmFtZT1gJGVjaG8gIlgkbGliIiB8ICRYc2VkIC1lICdcJydzJV4uKi9cKFteL10qXClcLml4bGlicmFyeSQlXDElJ1wnJ2A7IHRlc3QgJHJtIC9zeXMvbGlicy8ke2xpYm5hbWV9X2l4bGlicmFyeS5hOyAkc2hvdyAiY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSI7IGNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgfHwgZXhpdCAxOyBkb25lJworICA7OworCitiZW9zKikKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgorICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAorICA7OworCitic2RpWzQ1XSopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvWDExL2xpYiAvdXNyL2NvbnRyaWIvbGliIC9saWIgL3Vzci9sb2NhbC9saWIiCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCisgICMgdGhlIGRlZmF1bHQgbGQuc28uY29uZiBhbHNvIGNvbnRhaW5zIC91c3IvY29udHJpYi9saWIgYW5kCisgICMgL3Vzci9YMTFSNi9saWIgKC91c3IvWDExIGlzIGEgbGluayB0byAvdXNyL1gxMVI2KSwgYnV0IGxldCB1cyBhbGxvdworICAjIGxpYnRvb2wgdG8gaGFyZC1jb2RlIHRoZXNlIGludG8gcHJvZ3JhbXMKKyAgOzsKKworY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQorICB2ZXJzaW9uX3R5cGU9d2luZG93cworICBzaHJleHRfY21kcz0iLmRsbCIKKyAgbmVlZF92ZXJzaW9uPW5vCisgIG5lZWRfbGliX3ByZWZpeD1ubworCisgIGNhc2UgJEdDQywkaG9zdF9vcyBpbgorICB5ZXMsY3lnd2luKiB8IHllcyxtaW5ndyogfCB5ZXMscHczMiopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYScKKyAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CisgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTtlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KKyAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZX4KKyAgICAgIGNobW9kIGEreCBcJGRsZGlyLyRkbG5hbWUnCisgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+CisgICAgICAgJHJtIFwkZGxwYXRoJworICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBjeWd3aW4qKQorICAgICAgIyBDeWd3aW4gRExMcyB1c2UgJ2N5ZycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCisgICAgICBzb25hbWVfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL2N5Zy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliIC9saWIvdzMyYXBpIC9saWIgL3Vzci9sb2NhbC9saWIiCisgICAgICA7OworICAgIG1pbmd3KikKKyAgICAgICMgTWluR1cgRExMcyB1c2UgdHJhZGl0aW9uYWwgJ2xpYicgcHJlZml4CisgICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRDQyAtcHJpbnQtc2VhcmNoLWRpcnMgfCBncmVwICJebGlicmFyaWVzOiIgfCAkU0VEIC1lICJzL15saWJyYXJpZXM6Ly8iIC1lICJzLD0vLC8sZyJgCisgICAgICBpZiBlY2hvICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IGdyZXAgJztbYy16Qy1aXTovJyA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEggcHJpbnRlZCBieQorICAgICAgICAjIG1pbmd3IGdjYywgYnV0IHdlIGFyZSBydW5uaW5nIG9uIEN5Z3dpbi4gR2NjIHByaW50cyBpdHMgc2VhcmNoCisgICAgICAgICMgcGF0aCB3aXRoIDsgc2VwYXJhdG9ycywgYW5kIHdpdGggZHJpdmUgbGV0dGVycy4gV2UgY2FuIGhhbmRsZSB0aGUKKyAgICAgICAgIyBkcml2ZSBsZXR0ZXJzIChjeWd3aW4gZmlsZXV0aWxzIHVuZGVyc3RhbmRzIHRoZW0pLCBzbyBsZWF2ZSB0aGVtLAorICAgICAgICAjIGVzcGVjaWFsbHkgYXMgd2UgbWlnaHQgcGFzcyBmaWxlcyBmb3VuZCB0aGVyZSB0byBhIG1pbmd3IG9iamR1bXAsCisgICAgICAgICMgd2hpY2ggd291bGRuJ3QgdW5kZXJzdGFuZCBhIGN5Z3dpbmlmaWVkIHBhdGguIEFoaC4KKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAorICAgICAgZWxzZQorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGVjaG8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisgICAgICBmaQorICAgICAgOzsKKyAgICBwdzMyKikKKyAgICAgICMgcHczMiBETExzIHVzZSAncHcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJworICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKKworICAqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUubGliJworICAgIDs7CisgIGVzYWMKKyAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgIyBGSVhNRTogZmlyc3Qgd2Ugc2hvdWxkIHNlYXJjaCAuIGFuZCB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlIGlzIGluCisgIHNobGlicGF0aF92YXI9UEFUSAorICA7OworCitkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZHlsZCIKKyAgdmVyc2lvbl90eXBlPWRhcndpbgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3ZlcnN1ZmZpeH0kc2hhcmVkX2V4dCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7bWFqb3J9JHNoYXJlZF9leHQgJHtsaWJuYW1lfSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0JworICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIHNobGlicGF0aF92YXI9RFlMRF9MSUJSQVJZX1BBVEgKKyAgc2hyZXh0X2NtZHM9J2B0ZXN0IC4kbW9kdWxlID0gLnllcyAmJiBlY2hvIC5zbyB8fCBlY2hvIC5keWxpYmAnCisgICMgQXBwbGUncyBnY2MgcHJpbnRzICdnY2MgLXByaW50LXNlYXJjaC1kaXJzJyBkb2Vzbid0IG9wZXJhdGUgdGhlIHNhbWUuCisgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgdHIgIlxuIiAiJFBBVEhfU0VQQVJBVE9SIiB8IHNlZCAtZSAncy9saWJyYXJpZXM6L0BsaWJyYXJpZXM6LycgfCB0ciAiQCIgIlxuIiB8IGdyZXAgIl5saWJyYXJpZXM6IiB8IHNlZCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAicyw9LywvLGciIC1lICJzLCRQQVRIX1NFUEFSQVRPUiwgLGciIC1lICJzLC4qLCYgL2xpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYixnImAKKyAgZWxzZQorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL2xpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYicKKyAgZmkKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC9saWIgL3Vzci9saWInCisgIDs7CisKK2RndXgqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIDs7CisKK2ZyZWVic2QxKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKKwora2ZyZWVic2QqLWdudSkKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgZHluYW1pY19saW5rZXI9J0dOVSBsZC5zbycKKyAgOzsKKworZnJlZWJzZCogfCBkcmFnb25mbHkqKQorICAjIERyYWdvbkZseSBkb2VzIG5vdCBoYXZlIGFvdXQuICBXaGVuL2lmIHRoZXkgaW1wbGVtZW50IGEgbmV3CisgICMgdmVyc2lvbmluZyBtZWNoYW5pc20sIGFkanVzdCB0aGlzLgorICBpZiB0ZXN0IC14IC91c3IvYmluL29iamZvcm1hdDsgdGhlbgorICAgIG9iamZvcm1hdD1gL3Vzci9iaW4vb2JqZm9ybWF0YAorICBlbHNlCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGZyZWVic2RbMTIzXSopIG9iamZvcm1hdD1hb3V0IDs7CisgICAgKikgb2JqZm9ybWF0PWVsZiA7OworICAgIGVzYWMKKyAgZmkKKyAgdmVyc2lvbl90eXBlPWZyZWVic2QtJG9iamZvcm1hdAorICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KKyAgICBmcmVlYnNkLWVsZiopCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICAgIG5lZWRfdmVyc2lvbj1ubworICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICA7OworICAgIGZyZWVic2QtKikKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICAgICAgbmVlZF92ZXJzaW9uPXllcworICAgICAgOzsKKyAgZXNhYworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBjYXNlICRob3N0X29zIGluCisgIGZyZWVic2QyKikKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgOzsKKyAgZnJlZWJzZDMuWzAxXSogfCBmcmVlYnNkZWxmMy5bMDFdKikKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIDs7CisgIGZyZWVic2QzLlsyLTldKiB8IGZyZWVic2RlbGYzLlsyLTldKiB8IFwKKyAgZnJlZWJzZDQuWzAtNV0gfCBmcmVlYnNkZWxmNC5bMC01XSB8IGZyZWVic2Q0LjEuMSB8IGZyZWVic2RlbGY0LjEuMSkKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgOzsKKyAgZnJlZWJzZCopICMgZnJvbSA0LjYgb24KKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIDs7CisgIGVzYWMKKyAgOzsKKworZ251KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR7bWFqb3J9ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK2hwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorICAjIEdpdmUgYSBzb25hbWUgY29ycmVzcG9uZGluZyB0byB0aGUgbWFqb3IgdmVyc2lvbiBzbyB0aGF0IGRsZC5zbCByZWZ1c2VzIHRvCisgICMgbGluayBhZ2FpbnN0IG90aGVyIHZlcnNpb25zLgorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBjYXNlICRob3N0X2NwdSBpbgorICBpYTY0KikKKyAgICBzaHJleHRfY21kcz0nLnNvJworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNvIgorICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgaWYgdGVzdCAiWCRIUFVYX0lBNjRfTU9ERSIgPSBYMzI7IHRoZW4KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYiIKKyAgICBlbHNlCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXg2NCAvdXNyL2xvY2FsL2xpYi9ocHV4NjQiCisgICAgZmkKKyAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisgICAgOzsKKyAgIGhwcGEqNjQqKQorICAgICBzaHJleHRfY21kcz0nLnNsJworICAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCisgICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRIICMgSG93IHNob3VsZCB3ZSBoYW5kbGUgU0hMSUJfUEFUSAorICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCisgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL3BhMjBfNjQgL3Vzci9jY3MvbGliL3BhMjBfNjQiCisgICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKKyAgICAgOzsKKyAgICopCisgICAgc2hyZXh0X2NtZHM9Jy5zbCcKKyAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgorICAgIHNobGlicGF0aF92YXI9U0hMSUJfUEFUSAorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubyAjICtzIGlzIHJlcXVpcmVkIHRvIGVuYWJsZSBTSExJQl9QQVRICisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICA7OworICBlc2FjCisgICMgSFAtVVggcnVucyAqcmVhbGx5KiBzbG93bHkgdW5sZXNzIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG1vZGUgNTU1LgorICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA1NTUgJGxpYicKKyAgOzsKKworaW50ZXJpeDMqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBkeW5hbWljX2xpbmtlcj0nSW50ZXJpeCAzLnggbGQuc28uMSAoUEUsIGxpa2UgRUxGKScKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIG5vbnN0b3B1eCopIHZlcnNpb25fdHlwZT1ub25zdG9wdXggOzsKKyAgICAqKQorCWlmIHRlc3QgIiRsdF9jdl9wcm9nX2dudV9sZCIgPSB5ZXM7IHRoZW4KKwkJdmVyc2lvbl90eXBlPWxpbnV4CisJZWxzZQorCQl2ZXJzaW9uX3R5cGU9aXJpeAorCWZpIDs7CisgIGVzYWMKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgaXJpeDUqIHwgbm9uc3RvcHV4KikKKyAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9CisgICAgOzsKKyAgKikKKyAgICBjYXNlICRMRCBpbiAjIGxpYnRvb2wubTQgd2lsbCBhZGQgb25lIG9mIHRoZXNlIHN3aXRjaGVzIHRvIExECisgICAgKi0zMnwqIi0zMiAifCotbWVsZjMyYnNtaXB8KiItbWVsZjMyYnNtaXAgIikKKyAgICAgIGxpYnN1ZmY9IHNobGlic3VmZj0gbGlibWFnaWM9MzItYml0OzsKKyAgICAqLW4zMnwqIi1uMzIgInwqLW1lbGYzMmJtaXBuMzJ8KiItbWVsZjMyYm1pcG4zMiAiKQorICAgICAgbGlic3VmZj0zMiBzaGxpYnN1ZmY9TjMyIGxpYm1hZ2ljPU4zMjs7CisgICAgKi02NHwqIi02NCAifCotbWVsZjY0Ym1pcHwqIi1tZWxmNjRibWlwICIpCisgICAgICBsaWJzdWZmPTY0IHNobGlic3VmZj02NCBsaWJtYWdpYz02NC1iaXQ7OworICAgICopIGxpYnN1ZmY9IHNobGlic3VmZj0gbGlibWFnaWM9bmV2ZXItbWF0Y2g7OworICAgIGVzYWMKKyAgICA7OworICBlc2FjCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWSR7c2hsaWJzdWZmfV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJHtsaWJzdWZmfSAvbGliJHtsaWJzdWZmfSAvdXNyL2xvY2FsL2xpYiR7bGlic3VmZn0iCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0iCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworIyBObyBzaGFyZWQgbGliIHN1cHBvcnQgZm9yIExpbnV4IG9sZGxkLCBhb3V0LCBvciBjb2ZmLgorbGludXgqb2xkbGQqIHwgbGludXgqYW91dCogfCBsaW51eCpjb2ZmKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKKworIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgorbGludXgqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW4gJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICMgVGhpcyBpbXBsaWVzIG5vIGZhc3RfaW5zdGFsbCwgd2hpY2ggaXMgdW5hY2NlcHRhYmxlLgorICAjIFNvbWUgcmV3b3JrIHdpbGwgYmUgbmVlZGVkIHRvIGFsbG93IGZvciBmYXN0X2luc3RhbGwKKyAgIyBiZWZvcmUgdGhpcyBjYW4gYmUgZW5hYmxlZC4KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworCisgICMgZmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZworICBsaWJzdWZmPQorICBjYXNlICIkaG9zdF9jcHUiIGluCisgIHg4Nl82NCp8czM5MHgqfHBvd2VycGM2NCopCisgICAgZWNobyAnI2xpbmUgMjU2MDEgImNvbmZpZ3VyZSInID4gY29uZnRlc3QuJGFjX2V4dAorICAgIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgorICAgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgorICAgICAgKjY0LWJpdCopCisgICAgICAgIGxpYnN1ZmY9NjQKKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvbGliJHtsaWJzdWZmfSAvdXNyL2xpYiR7bGlic3VmZn0gL3Vzci9sb2NhbC9saWIke2xpYnN1ZmZ9IgorICAgICAgICA7OworICAgICAgZXNhYworICAgIGZpCisgICAgcm0gLXJmIGNvbmZ0ZXN0KgorICAgIDs7CisgIGVzYWMKKworICAjIEFwcGVuZCBsZC5zby5jb25mIGNvbnRlbnRzIHRvIHRoZSBzZWFyY2ggcGF0aAorICBpZiB0ZXN0IC1mIC9ldGMvbGQuc28uY29uZjsgdGhlbgorICAgIGx0X2xkX2V4dHJhPWBhd2sgJy9eaW5jbHVkZSAvIHsgc3lzdGVtKHNwcmludGYoImNkIC9ldGM7IGNhdCAlcyAyPi9kZXYvbnVsbCIsIFwkMikpOyBza2lwID0gMTsgfSB7IGlmICghc2tpcCkgcHJpbnQgXCQwOyBza2lwID0gMDsgfScgPCAvZXRjL2xkLnNvLmNvbmYgfCAkU0VEIC1lICdzL14JICovLztzLyMuKi8vOy9eW15cL10vZDtzL1s6LAldLyAvZztzLz1bXj1dKiQvLztzLz1bXj0gXSogLyAvZzsvXiQvZCcgfCB0ciAnXG4nICcgJ2AKKyAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiR7bGlic3VmZn0gL3Vzci9saWIke2xpYnN1ZmZ9ICRsdF9sZF9leHRyYSIKKyAgZmkKKworICAjIFdlIHVzZWQgdG8gdGVzdCBmb3IgL2xpYi9sZC5zby4xIGFuZCBkaXNhYmxlIHNoYXJlZCBsaWJyYXJpZXMgb24KKyAgIyBwb3dlcnBjLCBiZWNhdXNlIE1rTGludXggb25seSBzdXBwb3J0ZWQgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHRoZQorICAjIEdOVSBkeW5hbWljIGxpbmtlci4gIFNpbmNlIHRoaXMgd2FzIGJyb2tlbiB3aXRoIGNyb3NzIGNvbXBpbGVycywKKyAgIyBtb3N0IHBvd2VycGMtbGludXggYm94ZXMgc3VwcG9ydCBkeW5hbWljIGxpbmtpbmcgdGhlc2UgZGF5cyBhbmQKKyAgIyBwZW9wbGUgY2FuIGFsd2F5cyAtLWRpc2FibGUtc2hhcmVkLCB0aGUgdGVzdCB3YXMgcmVtb3ZlZCwgYW5kIHdlCisgICMgYXNzdW1lIHRoZSBHTlUvTGludXggZHluYW1pYyBsaW5rZXIgaXMgaW4gdXNlLgorICBkeW5hbWljX2xpbmtlcj0nR05VL0xpbnV4IGxkLnNvJworICA7OworCitrbmV0YnNkKi1nbnUpCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGR5bmFtaWNfbGlua2VyPSdHTlUgbGQuc28nCisgIDs7CisKK25ldGJzZCopCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICAgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCisgICAgZHluYW1pY19saW5rZXI9J05ldEJTRCAoYS5vdXQpIGxkLnNvJworICBlbHNlCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgbGQuZWxmX3NvJworICBmaQorICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworbmV3c29zNikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIDs7CisKK250by1xbngqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICA7OworCitvcGVuYnNkKikKKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiIKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgICMgU29tZSBvbGRlciB2ZXJzaW9ucyBvZiBPcGVuQlNEICgzLjMgYXQgbGVhc3QpICpkbyogbmVlZCB2ZXJzaW9uZWQgbGlicy4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIG9wZW5ic2QzLjMgfCBvcGVuYnNkMy4zLiopIG5lZWRfdmVyc2lvbj15ZXMgOzsKKyAgICAqKSAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkX3ZlcnNpb249bm8gIDs7CisgIGVzYWMKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgb3BlbmJzZDIuWzg5XSB8IG9wZW5ic2QyLls4OV0uKikKKwlzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKwk7OworICAgICAgKikKKwlzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisJOzsKKyAgICAgIGVzYWMKKyAgZWxzZQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgZmkKKyAgOzsKKworb3MyKikKKyAgbGlibmFtZV9zcGVjPSckbmFtZScKKyAgc2hyZXh0X2NtZHM9Ii5kbGwiCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fSAkbGlibmFtZS5hJworICBkeW5hbWljX2xpbmtlcj0nT1MvMiBsZC5leGUnCisgIHNobGlicGF0aF92YXI9TElCUEFUSAorICA7OworCitvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgIHZlcnNpb25fdHlwZT1vc2YKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL3NobGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYi9jbXBscnMvY2MgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIgL3Zhci9zaGxpYiIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiCisgIDs7CisKK3NvbGFyaXMqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICMgbGRkIGNvbXBsYWlucyB1bmxlc3MgbGlicmFyaWVzIGFyZSBleGVjdXRhYmxlCisgIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kICt4ICRsaWInCisgIDs7CisKK3N1bm9zNCopCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi91c3IvZXRjIiBsZGNvbmZpZyAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgZmkKKyAgbmVlZF92ZXJzaW9uPXllcworICA7OworCitzeXN2NCB8IHN5c3Y0LjMqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGNhc2UgJGhvc3RfdmVuZG9yIGluCisgICAgc25pKQorICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tQmxhcmdlZHluc3ltJworICAgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKyAgICAgIDs7CisgICAgc2llbWVucykKKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgOzsKKyAgICBtb3Rvcm9sYSkKKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgbmVlZF92ZXJzaW9uPW5vCisgICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL2xpYiAvdXNyL2xpYiAvdXNyL2Njcy9saWInCisgICAgICA7OworICBlc2FjCisgIDs7CisKK3N5c3Y0Kk1QKikKKyAgaWYgdGVzdCAtZCAvdXNyL25lYyA7dGhlbgorICAgIHZlcnNpb25fdHlwZT1saW51eAorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9LiR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9LiRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kbWFqb3InCisgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgZmkKKyAgOzsKKworc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKiB8IHN5c3Y0KnV3MiopCisgIHZlcnNpb25fdHlwZT1mcmVlYnNkLWVsZgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC91c3IvZ251L2xpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIgL2xpYicKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgZWxzZQorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9jY3MvbGliIC91c3IvbGliJworICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBzY28zLjJ2NSopCisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAvbGliIgorCTs7CisgICAgZXNhYworICBmaQorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9saWInCisgIDs7CisKK3V0czQqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIDs7CisKKyopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7Citlc2FjCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRkeW5hbWljX2xpbmtlciIgPiY1CitlY2hvICIke0VDSE9fVH0kZHluYW1pY19saW5rZXIiID4mNjsgfQordGVzdCAiJGR5bmFtaWNfbGlua2VyIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KKwordmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IlBBVEggJHNobGlicGF0aF92YXIgJHJ1bnBhdGhfdmFyIgoraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayBHQ0NfRVhFQ19QUkVGSVggQ09NUElMRVJfUEFUSCBMSUJSQVJZX1BBVEgiCitmaQorCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtcy4uLiAkRUNIT19DIiA+JjY7IH0KK2hhcmRjb2RlX2FjdGlvbl9DWFg9CitpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFgiIHx8IFwKKyAgIHRlc3QgLW4gIiRydW5wYXRoX3Zhcl9DWFgiIHx8IFwKKyAgIHRlc3QgIlgkaGFyZGNvZGVfYXV0b21hdGljX0NYWCIgPSAiWHllcyIgOyB0aGVuCisKKyAgIyBXZSBjYW4gaGFyZGNvZGUgbm9uLWV4aXN0YW50IGRpcmVjdG9yaWVzLgorICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0X0NYWCIgIT0gbm8gJiYKKyAgICAgIyBJZiB0aGUgb25seSBtZWNoYW5pc20gdG8gYXZvaWQgaGFyZGNvZGluZyBpcyBzaGxpYnBhdGhfdmFyLCB3ZQorICAgICAjIGhhdmUgdG8gcmVsaW5rLCBvdGhlcndpc2Ugd2UgbWlnaHQgbGluayB3aXRoIGFuIGluc3RhbGxlZCBsaWJyYXJ5CisgICAgICMgd2hlbiB3ZSBzaG91bGQgYmUgbGlua2luZyB3aXRoIGEgeWV0LXRvLWJlLWluc3RhbGxlZCBvbmUKKyAgICAgIyMgdGVzdCAiJF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgQ1hYKSIgIT0gbm8gJiYKKyAgICAgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0xfQ1hYIiAhPSBubzsgdGhlbgorICAgICMgTGlua2luZyBhbHdheXMgaGFyZGNvZGVzIHRoZSB0ZW1wb3JhcnkgbGlicmFyeSBkaXJlY3RvcnkuCisgICAgaGFyZGNvZGVfYWN0aW9uX0NYWD1yZWxpbmsKKyAgZWxzZQorICAgICMgV2UgY2FuIGxpbmsgd2l0aG91dCBoYXJkY29kaW5nLCBhbmQgd2UgY2FuIGhhcmRjb2RlIG5vbmV4aXN0aW5nIGRpcnMuCisgICAgaGFyZGNvZGVfYWN0aW9uX0NYWD1pbW1lZGlhdGUKKyAgZmkKK2Vsc2UKKyAgIyBXZSBjYW5ub3QgaGFyZGNvZGUgYW55dGhpbmcsIG9yIGVsc2Ugd2UgY2FuIG9ubHkgaGFyZGNvZGUgZXhpc3RpbmcKKyAgIyBkaXJlY3Rvcmllcy4KKyAgaGFyZGNvZGVfYWN0aW9uX0NYWD11bnN1cHBvcnRlZAorZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGhhcmRjb2RlX2FjdGlvbl9DWFgiID4mNQorZWNobyAiJHtFQ0hPX1R9JGhhcmRjb2RlX2FjdGlvbl9DWFgiID4mNjsgfQorCitpZiB0ZXN0ICIkaGFyZGNvZGVfYWN0aW9uX0NYWCIgPSByZWxpbms7IHRoZW4KKyAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3Qgc3VwcG9ydGVkCisgIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8KK2VsaWYgdGVzdCAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgPSB5ZXMgfHwKKyAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0gbm87IHRoZW4KKyAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3QgbmVjZXNzYXJ5CisgIGVuYWJsZV9mYXN0X2luc3RhbGw9bmVlZGxlc3MKK2ZpCisKKworIyBUaGUgZWxzZSBjbGF1c2Ugc2hvdWxkIG9ubHkgZmlyZSB3aGVuIGJvb3RzdHJhcHBpbmcgdGhlCisjIGxpYnRvb2wgZGlzdHJpYnV0aW9uLCBvdGhlcndpc2UgeW91IGZvcmdvdCB0byBzaGlwIGx0bWFpbi5zaAorIyB3aXRoIHlvdXIgcGFja2FnZSwgYW5kIHlvdSB3aWxsIGdldCBjb21wbGFpbnRzIHRoYXQgdGhlcmUgYXJlCisjIG5vIHJ1bGVzIHRvIGdlbmVyYXRlIGx0bWFpbi5zaC4KK2lmIHRlc3QgLWYgIiRsdG1haW4iOyB0aGVuCisgICMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB3aGljaCBhbGxvdyBvdXIgY29tbWFuZHMgdGhyb3VnaAorICAjIHdpdGhvdXQgcmVtb3ZhbCBvZiBcIGVzY2FwZXMuCisgIGlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgOyB0aGVuCisgICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKKyAgZmkKKyAgIyBOb3cgcXVvdGUgYWxsIHRoZSB0aGluZ3MgdGhhdCBtYXkgY29udGFpbiBtZXRhY2hhcmFjdGVycyB3aGlsZSBiZWluZworICAjIGNhcmVmdWwgbm90IHRvIG92ZXJxdW90ZSB0aGUgQUNfU1VCU1RlZCB2YWx1ZXMuICBXZSB0YWtlIGNvcGllcyBvZiB0aGUKKyAgIyB2YXJpYWJsZXMgYW5kIHF1b3RlIHRoZSBjb3BpZXMgZm9yIGdlbmVyYXRpb24gb2YgdGhlIGxpYnRvb2wgc2NyaXB0LgorICBmb3IgdmFyIGluIGVjaG8gb2xkX0NDIG9sZF9DRkxBR1MgQVIgQVJfRkxBR1MgRUdSRVAgUkFOTElCIExOX1MgTFRDQyBMVENGTEFHUyBOTSBcCisgICAgU0VEIFNIRUxMIFNUUklQIFwKKyAgICBsaWJuYW1lX3NwZWMgbGlicmFyeV9uYW1lc19zcGVjIHNvbmFtZV9zcGVjIGV4dHJhY3RfZXhwc3ltc19jbWRzIFwKKyAgICBvbGRfc3RyaXBsaWIgc3RyaXBsaWIgZmlsZV9tYWdpY19jbWQgZmluaXNoX2NtZHMgZmluaXNoX2V2YWwgXAorICAgIGRlcGxpYnNfY2hlY2tfbWV0aG9kIHJlbG9hZF9mbGFnIHJlbG9hZF9jbWRzIG5lZWRfbG9ja3MgXAorICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wgXAorICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIFwKKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMgXAorICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzIG9sZF9wb3N0dW5pbnN0YWxsX2NtZHMgXAorICAgIGNvbXBpbGVyX0NYWCBcCisgICAgQ0NfQ1hYIFwKKyAgICBMRF9DWFggXAorICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYIFwKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFggXAorICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWCBcCisgICAgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfQ1hYIFwKKyAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYIFwKKyAgICB0aHJlYWRfc2FmZV9mbGFnX3NwZWNfQ1hYIFwKKyAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFggXAorICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfQ1hYIFwKKyAgICBvbGRfYXJjaGl2ZV9jbWRzX0NYWCBcCisgICAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kc19DWFggXAorICAgIHByZWRlcF9vYmplY3RzX0NYWCBcCisgICAgcG9zdGRlcF9vYmplY3RzX0NYWCBcCisgICAgcHJlZGVwc19DWFggXAorICAgIHBvc3RkZXBzX0NYWCBcCisgICAgY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWCBcCisgICAgYXJjaGl2ZV9jbWRzX0NYWCBcCisgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFggXAorICAgIHBvc3RpbnN0YWxsX2NtZHNfQ1hYIFwKKyAgICBwb3N0dW5pbnN0YWxsX2NtZHNfQ1hYIFwKKyAgICBvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc19DWFggXAorICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWCBcCisgICAgbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYIFwKKyAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWCBcCisgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFggXAorICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfQ1hYIFwKKyAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWCBcCisgICAgaGFyZGNvZGVfYXV0b21hdGljX0NYWCBcCisgICAgbW9kdWxlX2NtZHNfQ1hYIFwKKyAgICBtb2R1bGVfZXhwc3ltX2NtZHNfQ1hYIFwKKyAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFggXAorICAgIGV4Y2x1ZGVfZXhwc3ltc19DWFggXAorICAgIGluY2x1ZGVfZXhwc3ltc19DWFg7IGRvCisKKyAgICBjYXNlICR2YXIgaW4KKyAgICBvbGRfYXJjaGl2ZV9jbWRzX0NYWCB8IFwKKyAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX0NYWCB8IFwKKyAgICBhcmNoaXZlX2NtZHNfQ1hYIHwgXAorICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYIHwgXAorICAgIG1vZHVsZV9jbWRzX0NYWCB8IFwKKyAgICBtb2R1bGVfZXhwc3ltX2NtZHNfQ1hYIHwgXAorICAgIG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX0NYWCB8IFwKKyAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWCB8IFwKKyAgICBleHRyYWN0X2V4cHN5bXNfY21kcyB8IHJlbG9hZF9jbWRzIHwgZmluaXNoX2NtZHMgfCBcCisgICAgcG9zdGluc3RhbGxfY21kcyB8IHBvc3R1bmluc3RhbGxfY21kcyB8IFwKKyAgICBvbGRfcG9zdGluc3RhbGxfY21kcyB8IG9sZF9wb3N0dW5pbnN0YWxsX2NtZHMgfCBcCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIHwgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMpCisgICAgICAjIERvdWJsZS1xdW90ZSBkb3VibGUtZXZhbGVkIHN0cmluZ3MuCisgICAgICBldmFsICJsdF8kdmFyPVxcXCJcYFwkZWNobyBcIlhcJCR2YXJcIiB8IFwkWHNlZCAtZSBcIlwkZG91YmxlX3F1b3RlX3N1YnN0XCIgLWUgXCJcJHNlZF9xdW90ZV9zdWJzdFwiIC1lIFwiXCRkZWxheV92YXJpYWJsZV9zdWJzdFwiXGBcXFwiIgorICAgICAgOzsKKyAgICAqKQorICAgICAgZXZhbCAibHRfJHZhcj1cXFwiXGBcJGVjaG8gXCJYXCQkdmFyXCIgfCBcJFhzZWQgLWUgXCJcJHNlZF9xdW90ZV9zdWJzdFwiXGBcXFwiIgorICAgICAgOzsKKyAgICBlc2FjCisgIGRvbmUKKworICBjYXNlICRsdF9lY2hvIGluCisgIConXCQwIC0tZmFsbGJhY2stZWNobyInKQorICAgIGx0X2VjaG89YCRlY2hvICJYJGx0X2VjaG8iIHwgJFhzZWQgLWUgJ3MvXFxcXFxcXCQwIC0tZmFsbGJhY2stZWNobyIkLyQwIC0tZmFsbGJhY2stZWNobyIvJ2AKKyAgICA7OworICBlc2FjCisKK2NmZ2ZpbGU9IiRvZmlsZSIKKworICBjYXQgPDxfX0VPRl9fID4+ICIkY2ZnZmlsZSIKKyMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWUKKworIyBMaWJ0b29sIHdhcyBjb25maWd1cmVkIG9uIGhvc3QgYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgOgorCisjIFNoZWxsIHRvIHVzZSB3aGVuIGludm9raW5nIHNoZWxsIHNjcmlwdHMuCitTSEVMTD0kbHRfU0hFTEwKKworIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLgorYnVpbGRfbGlidG9vbF9saWJzPSRlbmFibGVfc2hhcmVkCisKKyMgV2hldGhlciBvciBub3QgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcy4KK2J1aWxkX29sZF9saWJzPSRlbmFibGVfc3RhdGljCisKKyMgV2hldGhlciBvciBub3QgdG8gYWRkIC1sYyBmb3IgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcy4KK2J1aWxkX2xpYnRvb2xfbmVlZF9sYz0kYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYCisKKyMgV2hldGhlciBvciBub3QgdG8gZGlzYWxsb3cgc2hhcmVkIGxpYnMgd2hlbiBydW50aW1lIGxpYnMgYXJlIHN0YXRpYworYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzPSRlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0NYWAorCisjIFdoZXRoZXIgb3Igbm90IHRvIG9wdGltaXplIGZvciBmYXN0IGluc3RhbGxhdGlvbi4KK2Zhc3RfaW5zdGFsbD0kZW5hYmxlX2Zhc3RfaW5zdGFsbAorCisjIFRoZSBob3N0IHN5c3RlbS4KK2hvc3RfYWxpYXM9JGhvc3RfYWxpYXMKK2hvc3Q9JGhvc3QKK2hvc3Rfb3M9JGhvc3Rfb3MKKworIyBUaGUgYnVpbGQgc3lzdGVtLgorYnVpbGRfYWxpYXM9JGJ1aWxkX2FsaWFzCitidWlsZD0kYnVpbGQKK2J1aWxkX29zPSRidWlsZF9vcworCisjIEFuIGVjaG8gcHJvZ3JhbSB0aGF0IGRvZXMgbm90IGludGVycHJldCBiYWNrc2xhc2hlcy4KK2VjaG89JGx0X2VjaG8KKworIyBUaGUgYXJjaGl2ZXIuCitBUj0kbHRfQVIKK0FSX0ZMQUdTPSRsdF9BUl9GTEFHUworCisjIEEgQyBjb21waWxlci4KK0xUQ0M9JGx0X0xUQ0MKKworIyBMVENDIGNvbXBpbGVyIGZsYWdzLgorTFRDRkxBR1M9JGx0X0xUQ0ZMQUdTCisKKyMgQSBsYW5ndWFnZS1zcGVjaWZpYyBjb21waWxlci4KK0NDPSRsdF9jb21waWxlcl9DWFgKKworIyBJcyB0aGUgY29tcGlsZXIgdGhlIEdOVSBDIGNvbXBpbGVyPword2l0aF9nY2M9JEdDQ19DWFgKKworIyBBbiBFUkUgbWF0Y2hlci4KK0VHUkVQPSRsdF9FR1JFUAorCisjIFRoZSBsaW5rZXIgdXNlZCB0byBidWlsZCBsaWJyYXJpZXMuCitMRD0kbHRfTERfQ1hYCisKKyMgV2hldGhlciB3ZSBuZWVkIGhhcmQgb3Igc29mdCBsaW5rcy4KK0xOX1M9JGx0X0xOX1MKKworIyBBIEJTRC1jb21wYXRpYmxlIG5tIHByb2dyYW0uCitOTT0kbHRfTk0KKworIyBBIHN5bWJvbCBzdHJpcHBpbmcgcHJvZ3JhbQorU1RSSVA9JGx0X1NUUklQCisKKyMgVXNlZCB0byBleGFtaW5lIGxpYnJhcmllcyB3aGVuIGZpbGVfbWFnaWNfY21kIGJlZ2lucyAiZmlsZSIKK01BR0lDX0NNRD0kTUFHSUNfQ01ECisKKyMgVXNlZCBvbiBjeWd3aW46IERMTCBjcmVhdGlvbiBwcm9ncmFtLgorRExMVE9PTD0iJERMTFRPT0wiCisKKyMgVXNlZCBvbiBjeWd3aW46IG9iamVjdCBkdW1wZXIuCitPQkpEVU1QPSIkT0JKRFVNUCIKKworIyBVc2VkIG9uIGN5Z3dpbjogYXNzZW1ibGVyLgorQVM9IiRBUyIKKworIyBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXMuCitvYmpkaXI9JG9iamRpcgorCisjIEhvdyB0byBjcmVhdGUgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMuCityZWxvYWRfZmxhZz0kbHRfcmVsb2FkX2ZsYWcKK3JlbG9hZF9jbWRzPSRsdF9yZWxvYWRfY21kcworCisjIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCit3bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bF9DWFgKKworIyBPYmplY3QgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICJvIikuCitvYmpleHQ9IiRhY19vYmpleHQiCisKKyMgT2xkIGFyY2hpdmUgc3VmZml4IChub3JtYWxseSAiYSIpLgorbGliZXh0PSIkbGliZXh0IgorCisjIFNoYXJlZCBsaWJyYXJ5IHN1ZmZpeCAobm9ybWFsbHkgIi5zbyIpLgorc2hyZXh0X2NtZHM9JyRzaHJleHRfY21kcycKKworIyBFeGVjdXRhYmxlIGZpbGUgc3VmZml4IChub3JtYWxseSAiIikuCitleGVleHQ9IiRleGVleHQiCisKKyMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgorcGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfcGljX0NYWAorcGljX21vZGU9JHBpY19tb2RlCisKKyMgV2hhdCBpcyB0aGUgbWF4aW11bSBsZW5ndGggb2YgYSBjb21tYW5kPworbWF4X2NtZF9sZW49JGx0X2N2X3N5c19tYXhfY21kX2xlbgorCisjIERvZXMgY29tcGlsZXIgc2ltdWx0YW5lb3VzbHkgc3VwcG9ydCAtYyBhbmQgLW8gb3B0aW9ucz8KK2NvbXBpbGVyX2Nfbz0kbHRfbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYCisKKyMgTXVzdCB3ZSBsb2NrIGZpbGVzIHdoZW4gZG9pbmcgY29tcGlsYXRpb24/CituZWVkX2xvY2tzPSRsdF9uZWVkX2xvY2tzCisKKyMgRG8gd2UgbmVlZCB0aGUgbGliIHByZWZpeCBmb3IgbW9kdWxlcz8KK25lZWRfbGliX3ByZWZpeD0kbmVlZF9saWJfcHJlZml4CisKKyMgRG8gd2UgbmVlZCBhIHZlcnNpb24gZm9yIGxpYnJhcmllcz8KK25lZWRfdmVyc2lvbj0kbmVlZF92ZXJzaW9uCisKKyMgV2hldGhlciBkbG9wZW4gaXMgc3VwcG9ydGVkLgorZGxvcGVuX3N1cHBvcnQ9JGVuYWJsZV9kbG9wZW4KKworIyBXaGV0aGVyIGRsb3BlbiBvZiBwcm9ncmFtcyBpcyBzdXBwb3J0ZWQuCitkbG9wZW5fc2VsZj0kZW5hYmxlX2Rsb3Blbl9zZWxmCisKKyMgV2hldGhlciBkbG9wZW4gb2Ygc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkLgorZGxvcGVuX3NlbGZfc3RhdGljPSRlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljCisKKyMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KK2xpbmtfc3RhdGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWAorCisjIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCitub19idWlsdGluX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWAorCisjIENvbXBpbGVyIGZsYWcgdG8gYWxsb3cgcmVmbGV4aXZlIGRsb3BlbnMuCitleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JGx0X2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFgKKworIyBDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHNoYXJlZCBvYmplY3RzIGRpcmVjdGx5IGZyb20gYXJjaGl2ZXMuCit3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0kbHRfd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYCisKKyMgQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSB0aHJlYWQtc2FmZSBvYmplY3RzLgordGhyZWFkX3NhZmVfZmxhZ19zcGVjPSRsdF90aHJlYWRfc2FmZV9mbGFnX3NwZWNfQ1hYCisKKyMgTGlicmFyeSB2ZXJzaW9uaW5nIHR5cGUuCit2ZXJzaW9uX3R5cGU9JHZlcnNpb25fdHlwZQorCisjIEZvcm1hdCBvZiBsaWJyYXJ5IG5hbWUgcHJlZml4LgorbGlibmFtZV9zcGVjPSRsdF9saWJuYW1lX3NwZWMKKworIyBMaXN0IG9mIGFyY2hpdmUgbmFtZXMuICBGaXJzdCBuYW1lIGlzIHRoZSByZWFsIG9uZSwgdGhlIHJlc3QgYXJlIGxpbmtzLgorIyBUaGUgbGFzdCBuYW1lIGlzIHRoZSBvbmUgdGhhdCB0aGUgbGlua2VyIGZpbmRzIHdpdGggLWxOQU1FLgorbGlicmFyeV9uYW1lc19zcGVjPSRsdF9saWJyYXJ5X25hbWVzX3NwZWMKKworIyBUaGUgY29kZWQgbmFtZSBvZiB0aGUgbGlicmFyeSwgaWYgZGlmZmVyZW50IGZyb20gdGhlIHJlYWwgbmFtZS4KK3NvbmFtZV9zcGVjPSRsdF9zb25hbWVfc3BlYworCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW5kIGluc3RhbGwgYW4gb2xkLXN0eWxlIGFyY2hpdmUuCitSQU5MSUI9JGx0X1JBTkxJQgorb2xkX2FyY2hpdmVfY21kcz0kbHRfb2xkX2FyY2hpdmVfY21kc19DWFgKK29sZF9wb3N0aW5zdGFsbF9jbWRzPSRsdF9vbGRfcG9zdGluc3RhbGxfY21kcworb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0kbHRfb2xkX3Bvc3R1bmluc3RhbGxfY21kcworCisjIENyZWF0ZSBhbiBvbGQtc3R5bGUgYXJjaGl2ZSBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCitvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSRsdF9vbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX0NYWAorCisjIENyZWF0ZSBhIHRlbXBvcmFyeSBvbGQtc3R5bGUgYXJjaGl2ZSB0byBsaW5rIGluc3RlYWQgb2YgYSBzaGFyZWQgYXJjaGl2ZS4KK29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzPSRsdF9vbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc19DWFgKKworIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuZCBpbnN0YWxsIGEgc2hhcmVkIGFyY2hpdmUuCithcmNoaXZlX2NtZHM9JGx0X2FyY2hpdmVfY21kc19DWFgKK2FyY2hpdmVfZXhwc3ltX2NtZHM9JGx0X2FyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYCitwb3N0aW5zdGFsbF9jbWRzPSRsdF9wb3N0aW5zdGFsbF9jbWRzCitwb3N0dW5pbnN0YWxsX2NtZHM9JGx0X3Bvc3R1bmluc3RhbGxfY21kcworCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBsb2FkYWJsZSBtb2R1bGUgKGFzc3VtZWQgc2FtZSBhcyBhYm92ZSBpZiBlbXB0eSkKK21vZHVsZV9jbWRzPSRsdF9tb2R1bGVfY21kc19DWFgKK21vZHVsZV9leHBzeW1fY21kcz0kbHRfbW9kdWxlX2V4cHN5bV9jbWRzX0NYWAorCisjIENvbW1hbmRzIHRvIHN0cmlwIGxpYnJhcmllcy4KK29sZF9zdHJpcGxpYj0kbHRfb2xkX3N0cmlwbGliCitzdHJpcGxpYj0kbHRfc3RyaXBsaWIKKworIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQorIyBzaGFyZWQgbGlicmFyeS4KK3ByZWRlcF9vYmplY3RzPSRsdF9wcmVkZXBfb2JqZWN0c19DWFgKKworIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYWZ0ZXIgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCisjIHNoYXJlZCBsaWJyYXJ5LgorcG9zdGRlcF9vYmplY3RzPSRsdF9wb3N0ZGVwX29iamVjdHNfQ1hYCisKKyMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKKyMgc2hhcmVkIGxpYnJhcnkuCitwcmVkZXBzPSRsdF9wcmVkZXBzX0NYWAorCisjIERlcGVuZGVuY2llcyB0byBwbGFjZSBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKKyMgc2hhcmVkIGxpYnJhcnkuCitwb3N0ZGVwcz0kbHRfcG9zdGRlcHNfQ1hYCisKKyMgVGhlIGxpYnJhcnkgc2VhcmNoIHBhdGggdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBjb21waWxlciB3aGVuIGxpbmtpbmcKKyMgYSBzaGFyZWQgbGlicmFyeS4KK2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aD0kbHRfY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWAorCisjIE1ldGhvZCB0byBjaGVjayB3aGV0aGVyIGRlcGVuZGVudCBsaWJyYXJpZXMgYXJlIHNoYXJlZCBvYmplY3RzLgorZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2RlcGxpYnNfY2hlY2tfbWV0aG9kCisKKyMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9PSBmaWxlX21hZ2ljLgorZmlsZV9tYWdpY19jbWQ9JGx0X2ZpbGVfbWFnaWNfY21kCisKKyMgRmxhZyB0aGF0IGFsbG93cyBzaGFyZWQgbGlicmFyaWVzIHdpdGggdW5kZWZpbmVkIHN5bWJvbHMgdG8gYmUgYnVpbHQuCithbGxvd191bmRlZmluZWRfZmxhZz0kbHRfYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYCisKKyMgRmxhZyB0aGF0IGZvcmNlcyBubyB1bmRlZmluZWQgc3ltYm9scy4KK25vX3VuZGVmaW5lZF9mbGFnPSRsdF9ub191bmRlZmluZWRfZmxhZ19DWFgKKworIyBDb21tYW5kcyB1c2VkIHRvIGZpbmlzaCBhIGxpYnRvb2wgbGlicmFyeSBpbnN0YWxsYXRpb24gaW4gYSBkaXJlY3RvcnkuCitmaW5pc2hfY21kcz0kbHRfZmluaXNoX2NtZHMKKworIyBTYW1lIGFzIGFib3ZlLCBidXQgYSBzaW5nbGUgc2NyaXB0IGZyYWdtZW50IHRvIGJlIGV2YWxlZCBidXQgbm90IHNob3duLgorZmluaXNoX2V2YWw9JGx0X2ZpbmlzaF9ldmFsCisKKyMgVGFrZSB0aGUgb3V0cHV0IG9mIG5tIGFuZCBwcm9kdWNlIGEgbGlzdGluZyBvZiByYXcgc3ltYm9scyBhbmQgQyBuYW1lcy4KK2dsb2JhbF9zeW1ib2xfcGlwZT0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZQorCisjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgcHJvcGVyIEMgZGVjbGFyYXRpb24KK2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsCisKKyMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyCitnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcworCisjIFRoaXMgaXMgdGhlIHNoYXJlZCBsaWJyYXJ5IHJ1bnRpbWUgcGF0aCB2YXJpYWJsZS4KK3J1bnBhdGhfdmFyPSRydW5wYXRoX3ZhcgorCisjIFRoaXMgaXMgdGhlIHNoYXJlZCBsaWJyYXJ5IHBhdGggdmFyaWFibGUuCitzaGxpYnBhdGhfdmFyPSRzaGxpYnBhdGhfdmFyCisKKyMgSXMgc2hsaWJwYXRoIHNlYXJjaGVkIGJlZm9yZSB0aGUgaGFyZC1jb2RlZCBsaWJyYXJ5IHNlYXJjaCBwYXRoPworc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPSRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgKKworIyBIb3cgdG8gaGFyZGNvZGUgYSBzaGFyZWQgbGlicmFyeSBwYXRoIGludG8gYW4gZXhlY3V0YWJsZS4KK2hhcmRjb2RlX2FjdGlvbj0kaGFyZGNvZGVfYWN0aW9uX0NYWAorCisjIFdoZXRoZXIgd2Ugc2hvdWxkIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBsaWJyYXJpZXMuCitoYXJkY29kZV9pbnRvX2xpYnM9JGhhcmRjb2RlX2ludG9fbGlicworCisjIEZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KKyMgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzIG5vdCBleGlzdC4KK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JGx0X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYCisKKyMgSWYgbGQgaXMgdXNlZCB3aGVuIGxpbmtpbmcsIGZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50bworIyBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4gVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzCisjIG5vdCBleGlzdC4KK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9JGx0X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfQ1hYCisKKyMgV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlIC1ycGF0aCBmbGFnIHdpdGggYSBzZXBhcmF0ZWQgYXJndW1lbnQuCitoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSRsdF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWAorCisjIFNldCB0byB5ZXMgaWYgdXNpbmcgRElSL2xpYk5BTUUke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKKyMgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX2RpcmVjdD0kaGFyZGNvZGVfZGlyZWN0X0NYWAorCisjIFNldCB0byB5ZXMgaWYgdXNpbmcgdGhlIC1MRElSIGZsYWcgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQorIyByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfbWludXNfTD0kaGFyZGNvZGVfbWludXNfTF9DWFgKKworIyBTZXQgdG8geWVzIGlmIHVzaW5nIFNITElCUEFUSF9WQVI9RElSIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50bworIyB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX3NobGlicGF0aF92YXI9JGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYCisKKyMgU2V0IHRvIHllcyBpZiBidWlsZGluZyBhIHNoYXJlZCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgaGFyZGNvZGVzIERJUiBpbnRvIHRoZSBsaWJyYXJ5CisjIGFuZCBhbGwgc3Vic2VxdWVudCBsaWJyYXJpZXMgYW5kIGV4ZWN1dGFibGVzIGxpbmtlZCBhZ2FpbnN0IGl0LgoraGFyZGNvZGVfYXV0b21hdGljPSRoYXJkY29kZV9hdXRvbWF0aWNfQ1hYCisKKyMgVmFyaWFibGVzIHdob3NlIHZhbHVlcyBzaG91bGQgYmUgc2F2ZWQgaW4gbGlidG9vbCB3cmFwcGVyIHNjcmlwdHMgYW5kCisjIHJlc3RvcmVkIGF0IHJlbGluayB0aW1lLgordmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayIKKworIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCitsaW5rX2FsbF9kZXBsaWJzPSRsaW5rX2FsbF9kZXBsaWJzX0NYWAorCisjIENvbXBpbGUtdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcworc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSRsdF9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKKworIyBSdW4tdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcworc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JGx0X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjCisKKyMgRml4IHRoZSBzaGVsbCB2YXJpYWJsZSBcJHNyY2ZpbGUgZm9yIHRoZSBjb21waWxlci4KK2ZpeF9zcmNmaWxlX3BhdGg9IiRmaXhfc3JjZmlsZV9wYXRoX0NYWCIKKworIyBTZXQgdG8geWVzIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgorYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRhbHdheXNfZXhwb3J0X3N5bWJvbHNfQ1hYCisKKyMgVGhlIGNvbW1hbmRzIHRvIGxpc3QgZXhwb3J0ZWQgc3ltYm9scy4KK2V4cG9ydF9zeW1ib2xzX2NtZHM9JGx0X2V4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYCisKKyMgVGhlIGNvbW1hbmRzIHRvIGV4dHJhY3QgdGhlIGV4cG9ydGVkIHN5bWJvbCBsaXN0IGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KK2V4dHJhY3RfZXhwc3ltc19jbWRzPSRsdF9leHRyYWN0X2V4cHN5bXNfY21kcworCisjIFN5bWJvbHMgdGhhdCBzaG91bGQgbm90IGJlIGxpc3RlZCBpbiB0aGUgcHJlbG9hZGVkIHN5bWJvbHMuCitleGNsdWRlX2V4cHN5bXM9JGx0X2V4Y2x1ZGVfZXhwc3ltc19DWFgKKworIyBTeW1ib2xzIHRoYXQgbXVzdCBhbHdheXMgYmUgZXhwb3J0ZWQuCitpbmNsdWRlX2V4cHN5bXM9JGx0X2luY2x1ZGVfZXhwc3ltc19DWFgKKworIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWUKKworX19FT0ZfXworCisKK2Vsc2UKKyAgIyBJZiB0aGVyZSBpcyBubyBNYWtlZmlsZSB5ZXQsIHdlIHJlbHkgb24gYSBtYWtlIHJ1bGUgdG8gZXhlY3V0ZQorICAjIGBjb25maWcuc3RhdHVzIC0tcmVjaGVjaycgdG8gcmVydW4gdGhlc2UgdGVzdHMgYW5kIGNyZWF0ZSB0aGUKKyAgIyBsaWJ0b29sIHNjcmlwdCB0aGVuLgorICBsdG1haW5faW49YGVjaG8gJGx0bWFpbiB8IHNlZCAtZSAncy9cLnNoJC8uaW4vJ2AKKyAgaWYgdGVzdCAtZiAiJGx0bWFpbl9pbiI7IHRoZW4KKyAgICB0ZXN0IC1mIE1ha2VmaWxlICYmIG1ha2UgIiRsdG1haW4iCisgIGZpCitmaQorCisKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworQ0M9JGx0X3NhdmVfQ0MKK0xEQ1hYPSRMRAorTEQ9JGx0X3NhdmVfTEQKK0dDQz0kbHRfc2F2ZV9HQ0MKK3dpdGhfZ251X2xkY3h4PSR3aXRoX2dudV9sZAord2l0aF9nbnVfbGQ9JGx0X3NhdmVfd2l0aF9nbnVfbGQKK2x0X2N2X3BhdGhfTERDWFg9JGx0X2N2X3BhdGhfTEQKK2x0X2N2X3BhdGhfTEQ9JGx0X3NhdmVfcGF0aF9MRAorbHRfY3ZfcHJvZ19nbnVfbGRjeHg9JGx0X2N2X3Byb2dfZ251X2xkCitsdF9jdl9wcm9nX2dudV9sZD0kbHRfc2F2ZV93aXRoX2dudV9sZAorCisJZWxzZQorCSAgdGFnbmFtZT0iIgorCWZpCisJOzsKKworICAgICAgRjc3KQorCWlmIHRlc3QgLW4gIiRGNzciICYmIHRlc3QgIlgkRjc3IiAhPSAiWG5vIjsgdGhlbgorCithY19leHQ9ZgorYWNfY29tcGlsZT0nJEY3NyAtYyAkRkZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJEY3NyAtbyBjb25mdGVzdCRhY19leGVleHQgJEZGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfZjc3X2NvbXBpbGVyX2dudQorCisKK2FyY2hpdmVfY21kc19uZWVkX2xjX0Y3Nz1ubworYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PQorYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0Y3Nz1ubworYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9CitleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfRjc3PQoraGFyZGNvZGVfZGlyZWN0X0Y3Nz1ubworaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9CitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkX0Y3Nz0KK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfRjc3PQoraGFyZGNvZGVfbWludXNfTF9GNzc9bm8KK2hhcmRjb2RlX2F1dG9tYXRpY19GNzc9bm8KK21vZHVsZV9jbWRzX0Y3Nz0KK21vZHVsZV9leHBzeW1fY21kc19GNzc9CitsaW5rX2FsbF9kZXBsaWJzX0Y3Nz11bmtub3duCitvbGRfYXJjaGl2ZV9jbWRzX0Y3Nz0kb2xkX2FyY2hpdmVfY21kcworbm9fdW5kZWZpbmVkX2ZsYWdfRjc3PQord2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfRjc3PQorZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19GNzc9bm8KKworIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIGY3NyB0ZXN0IHNvdXJjZXMuCithY19leHQ9ZgorCisjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgZjc3IHRlc3Qgc291cmNlcy4KK29iamV4dD1vCitvYmpleHRfRjc3PSRvYmpleHQKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKK2x0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iICAgICAgc3Vicm91dGluZSB0XG4gICAgICByZXR1cm5cbiAgICAgIGVuZFxuIgorCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cworbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSIgICAgICBwcm9ncmFtIHRcbiAgICAgIGVuZFxuIgorCisjIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCisKKyMgSWYgbm8gQyBjb21waWxlciB3YXMgc3BlY2lmaWVkLCB1c2UgQ0MuCitMVENDPSR7TFRDQy0iJENDIn0KKworIyBJZiBubyBDIGNvbXBpbGVyIGZsYWdzIHdlcmUgc3BlY2lmaWVkLCB1c2UgQ0ZMQUdTLgorTFRDRkxBR1M9JHtMVENGTEFHUy0iJENGTEFHUyJ9CisKKyMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCitjb21waWxlcj0kQ0MKKworCisjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0CitwcmludGYgIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0CitldmFsICIkYWNfY29tcGlsZSIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKK19sdF9jb21waWxlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKKyRybSBjb25mdGVzdCoKKworYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0CitwcmludGYgIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0CitldmFsICIkYWNfbGluayIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKK19sdF9saW5rZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCiskcm0gY29uZnRlc3QqCisKKworIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KK2x0X3NhdmVfQ0M9IiRDQyIKK0NDPSR7Rjc3LSJmNzcifQorY29tcGlsZXI9JENDCitjb21waWxlcl9GNzc9JENDCitmb3IgY2NfdGVtcCBpbiAkY29tcGlsZXIiIjsgZG8KKyAgY2FzZSAkY2NfdGVtcCBpbgorICAgIGNvbXBpbGUgfCAqW1xcL11jb21waWxlIHwgY2NhY2hlIHwgKltcXC9dY2NhY2hlICkgOzsKKyAgICBkaXN0Y2MgfCAqW1xcL11kaXN0Y2MgfCBwdXJpZnkgfCAqW1xcL11wdXJpZnkgKSA7OworICAgIFwtKikgOzsKKyAgICAqKSBicmVhazs7CisgIGVzYWMKK2RvbmUKK2NjX2Jhc2VuYW1lPWAkZWNobyAiWCRjY190ZW1wIiB8ICRYc2VkIC1lICdzJS4qLyUlJyAtZSAicyVeJGhvc3RfYWxpYXMtJSUiYAorCisKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4uLiAkRUNIT19DIiA+JjY7IH0KK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGNhbl9idWlsZF9zaGFyZWQiID4mNQorZWNobyAiJHtFQ0hPX1R9JGNhbl9idWlsZF9zaGFyZWQiID4mNjsgfQorCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMuLi4gJEVDSE9fQyIgPiY2OyB9Cit0ZXN0ICIkY2FuX2J1aWxkX3NoYXJlZCIgPSAibm8iICYmIGVuYWJsZV9zaGFyZWQ9bm8KKworIyBPbiBBSVgsIHNoYXJlZCBsaWJyYXJpZXMgYW5kIHN0YXRpYyBsaWJyYXJpZXMgdXNlIHRoZSBzYW1lIG5hbWVzcGFjZSwgYW5kCisjIGFyZSBhbGwgYnVpbHQgZnJvbSBQSUMuCitjYXNlICRob3N0X29zIGluCithaXgzKikKKyAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KKyAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgICBhcmNoaXZlX2NtZHM9IiRhcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRsaWIiCisgICAgcG9zdGluc3RhbGxfY21kcz0nJFJBTkxJQiAkbGliJworICBmaQorICA7OworYWl4NCogfCBhaXg1KikKKyAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0ICYmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IG5vIDsgdGhlbgorICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisgIGZpCisgIDs7Citlc2FjCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRlbmFibGVfc2hhcmVkIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRlbmFibGVfc2hhcmVkIiA+JjY7IH0KKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzLi4uICRFQ0hPX0MiID4mNjsgfQorIyBNYWtlIHN1cmUgZWl0aGVyIGVuYWJsZV9zaGFyZWQgb3IgZW5hYmxlX3N0YXRpYyBpcyB5ZXMuCit0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgfHwgZW5hYmxlX3N0YXRpYz15ZXMKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGVuYWJsZV9zdGF0aWMiID4mNQorZWNobyAiJHtFQ0hPX1R9JGVuYWJsZV9zdGF0aWMiID4mNjsgfQorCitHQ0NfRjc3PSIkRzc3IgorTERfRjc3PSIkTEQiCisKK2x0X3Byb2dfY29tcGlsZXJfd2xfRjc3PQorbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PQorbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PQorCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICRFQ0hPX0MiID4mNjsgfQorCisgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgbHRfcHJvZ19jb21waWxlcl93bF9GNzc9Jy1XbCwnCisgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PSctc3RhdGljJworCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4KikKKyAgICAgICMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1Cc3RhdGljJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhbWlnYW9zKikKKyAgICAgICMgRklYTUU6IHdlIG5lZWQgYXQgbGVhc3QgNjgwMjAgY29kZSB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLCBidXQKKyAgICAgICMgYWRkaW5nIHRoZSBgLW02ODAyMCcgZmxhZyB0byBHQ0MgcHJldmVudHMgYnVpbGRpbmcgYW55dGhpbmcgYmV0dGVyLAorICAgICAgIyBsaWtlIGAtbTY4MDQwJy4KKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0nLW02ODAyMCAtcmVzaWRlbnQzMiAtbWFsd2F5cy1yZXN0b3JlLWE0JworICAgICAgOzsKKworICAgIGJlb3MqIHwgY3lnd2luKiB8IGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCogfCBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgT1Nlcy4KKyAgICAgIDs7CisKKyAgICBtaW5ndyogfCBwdzMyKiB8IG9zMiopCisgICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisgICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSctRERMTF9FWFBPUlQnCisgICAgICA7OworCisgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KKyAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0nLWZuby1jb21tb24nCisgICAgICA7OworCisgICAgaW50ZXJpeDMqKQorICAgICAgIyBJbnRlcml4IDMueCBnY2MgLWZwaWMvLWZQSUMgb3B0aW9ucyBnZW5lcmF0ZSBicm9rZW4gY29kZS4KKyAgICAgICMgSW5zdGVhZCwgd2UgcmVsb2NhdGUgc2hhcmVkIGxpYnJhcmllcyBhdCBydW50aW1lLgorICAgICAgOzsKKworICAgIG1zZG9zZGpncHAqKQorICAgICAgIyBKdXN0IGJlY2F1c2Ugd2UgdXNlIEdDQyBkb2Vzbid0IG1lYW4gd2Ugc3VkZGVubHkgZ2V0IHNoYXJlZCBsaWJyYXJpZXMKKyAgICAgICMgb24gc3lzdGVtcyB0aGF0IGRvbid0IHN1cHBvcnQgdGhlbS4KKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZF9GNzc9bm8KKyAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KKyAgICAgIDs7CisKKyAgICBzeXN2NCpNUCopCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisJbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PS1LY29uZm9ybV9waWMKKyAgICAgIGZpCisgICAgICA7OworCisgICAgaHB1eCopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSUE2NCBIUC1VWCBhbmQgNjQtYml0IEhQLVVYLCBidXQKKyAgICAgICMgbm90IGZvciBQQSBIUC1VWC4KKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBocHBhKjY0KnxpYTY0KikKKwkjICtaIHRoZSBkZWZhdWx0CisJOzsKKyAgICAgICopCisJbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSctZlBJQycKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgICopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9Jy1mUElDJworICAgICAgOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICAjIFBPUlRNRSBDaGVjayBmb3IgZmxhZyB0byBwYXNzIGxpbmtlciBmbGFncyB0aHJvdWdoIHRoZSBzeXN0ZW0gY29tcGlsZXIuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeCopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0Y3Nz0nLVdsLCcKKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1Cc3RhdGljJworICAgICAgZWxzZQorCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3Nz0nLWJuc28gLWJJOi9saWIvc3lzY2FsbHMuZXhwJworICAgICAgZmkKKyAgICAgIDs7CisgICAgICBkYXJ3aW4qKQorICAgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCisgICAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKKyAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgeGxjKikKKyAgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0nLXFub2NvbW1vbicKKyAgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfRjc3PSctV2wsJworICAgICAgICAgOzsKKyAgICAgICBlc2FjCisgICAgICAgOzsKKworICAgIG1pbmd3KiB8IHB3MzIqIHwgb3MyKikKKyAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKKyAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9Jy1ERExMX0VYUE9SVCcKKyAgICAgIDs7CisKKyAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfRjc3PSctV2wsJworICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIElBNjQgSFAtVVggYW5kIDY0LWJpdCBIUC1VWCwgYnV0CisgICAgICAjIG5vdCBmb3IgUEEgSFAtVVguCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgaHBwYSo2NCp8aWE2NCopCisJIyArWiB0aGUgZGVmYXVsdAorCTs7CisgICAgICAqKQorCWx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0nK1onCisJOzsKKyAgICAgIGVzYWMKKyAgICAgICMgSXMgdGhlcmUgYSBiZXR0ZXIgbHRfcHJvZ19jb21waWxlcl9zdGF0aWMgdGhhdCB3b3JrcyB3aXRoIHRoZSBidW5kbGVkIENDPworICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PScke3dsfS1hICR7d2x9YXJjaGl2ZScKKyAgICAgIDs7CisKKyAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9GNzc9Jy1XbCwnCisgICAgICAjIFBJQyAod2l0aCAtS1BJQykgaXMgdGhlIGRlZmF1bHQuCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1ub25fc2hhcmVkJworICAgICAgOzsKKworICAgIG5ld3NvczYpCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9Jy1LUElDJworICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICBsaW51eCopCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgaWNjKiB8IGVjYyopCisJbHRfcHJvZ19jb21waWxlcl93bF9GNzc9Jy1XbCwnCisJbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSctS1BJQycKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1zdGF0aWMnCisgICAgICAgIDs7CisgICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KikKKyAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBjb21waWxlcnMgKCpub3QqIHRoZSBQZW50aXVtIGdjYyBjb21waWxlciwKKwkjIHdoaWNoIGxvb2tzIHRvIGJlIGEgZGVhZCBwcm9qZWN0KQorCWx0X3Byb2dfY29tcGlsZXJfd2xfRjc3PSctV2wsJworCWx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0nLWZwaWMnCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PSctQnN0YXRpYycKKyAgICAgICAgOzsKKyAgICAgIGNjYyopCisgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfRjc3PSctV2wsJworICAgICAgICAjIEFsbCBBbHBoYSBjb2RlIGlzIFBJQy4KKyAgICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PSctbm9uX3NoYXJlZCcKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0Y3Nz0nLVdsLCcKKyAgICAgICMgQWxsIE9TRi8xIGNvZGUgaXMgUElDLgorICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PSctbm9uX3NoYXJlZCcKKyAgICAgIDs7CisKKyAgICBzb2xhcmlzKikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0nLUtQSUMnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1Cc3RhdGljJworICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgIGY3NyogfCBmOTAqIHwgZjk1KikKKwlsdF9wcm9nX2NvbXBpbGVyX3dsX0Y3Nz0nLVFvcHRpb24gbGQgJzs7CisgICAgICAqKQorCWx0X3Byb2dfY29tcGlsZXJfd2xfRjc3PSctV2wsJzs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgc3Vub3M0KikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfRjc3PSctUW9wdGlvbiBsZCAnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9Jy1QSUMnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfRjc3PSctV2wsJworICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSctS1BJQycKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3Nz0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgc3lzdjQqTVAqKQorICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYyA7dGhlbgorCWx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0nLUtjb25mb3JtX3BpYycKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1Cc3RhdGljJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzeXN2NSogfCB1bml4d2FyZSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgT3BlblVOSVgqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9GNzc9Jy1XbCwnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9Jy1LUElDJworICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICB1bmljb3MqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9GNzc9Jy1XbCwnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWRfRjc3PW5vCisgICAgICA7OworCisgICAgdXRzNCopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9Jy1waWMnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgICopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWRfRjc3PW5vCisgICAgICA7OworICAgIGVzYWMKKyAgZmkKKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfcHJvZ19jb21waWxlcl9waWNfRjc3IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzciID4mNjsgfQorCisjCisjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCisjCitpZiB0ZXN0IC1uICIkbHRfcHJvZ19jb21waWxlcl9waWNfRjc3IjsgdGhlbgorCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiAkY29tcGlsZXIgUElDIGZsYWcgJGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3NyB3b3JrcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmICRjb21waWxlciBQSUMgZmxhZyAkbHRfcHJvZ19jb21waWxlcl9waWNfRjc3IHdvcmtzLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19GNzcrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgbHRfcHJvZ19jb21waWxlcl9waWNfd29ya3NfRjc3PW5vCisgIGFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorICAgcHJpbnRmICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGx0X2NvbXBpbGVyX2ZsYWc9IiRsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzciCisgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgorICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KKyAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKKyAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCisgICAjIFRoZSBvcHRpb24gaXMgcmVmZXJlbmNlZCB2aWEgYSB2YXJpYWJsZSB0byBhdm9pZCBjb25mdXNpbmcgc2VkLgorICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCisgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCisgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjI2NjU2OiAkbHRfY29tcGlsZVwiIiA+JjUpCisgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQorICAgYWNfc3RhdHVzPSQ/CisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOjI2NjYwOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgIiRhY19vdXRmaWxlIjsgdGhlbgorICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3Mgb3RoZXIgdGhhbiB0aGUgdXN1YWwgb3V0cHV0LgorICAgICAkZWNobyAiWCRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+Y29uZnRlc3QuZXhwCisgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgorICAgICBpZiB0ZXN0ICEgLXMgY29uZnRlc3QuZXIyIHx8IGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfd29ya3NfRjc3PXllcworICAgICBmaQorICAgZmkKKyAgICRybSBjb25mdGVzdCoKKworZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0Y3NyIgPiY1CitlY2hvICIke0VDSE9fVH0kbHRfcHJvZ19jb21waWxlcl9waWNfd29ya3NfRjc3IiA+JjY7IH0KKworaWYgdGVzdCB4IiRsdF9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19GNzciID0geHllczsgdGhlbgorICAgIGNhc2UgJGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3NyBpbgorICAgICAiIiB8ICIgIiopIDs7CisgICAgICopIGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0iICRsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzciIDs7CisgICAgIGVzYWMKK2Vsc2UKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9CisgICAgIGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZF9GNzc9bm8KK2ZpCisKK2ZpCitjYXNlICRob3N0X29zIGluCisgICMgRm9yIHBsYXRmb3JtcyB3aGljaCBkbyBub3Qgc3VwcG9ydCBQSUMsIC1EUElDIGlzIG1lYW5pbmdsZXNzOgorICAqZGpncHAqKQorICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0KKyAgICA7OworICAqKQorICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0iJGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3NyIKKyAgICA7OworZXNhYworCisjCisjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCisjCit3bD0kbHRfcHJvZ19jb21waWxlcl93bF9GNzcgZXZhbCBsdF90bXBfc3RhdGljX2ZsYWc9XCIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3XCIKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3MuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0Y3NytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19GNzc9bm8KKyAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisgICBMREZMQUdTPSIkTERGTEFHUyAkbHRfdG1wX3N0YXRpY19mbGFnIgorICAgcHJpbnRmICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGlmIChldmFsICRhY19saW5rIDI+Y29uZnRlc3QuZXJyKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorICAgICAjIFRoZSBsaW5rZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCisgICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgICAgIyBBcHBlbmQgYW55IGVycm9ycyB0byB0aGUgY29uZmlnLmxvZy4KKyAgICAgICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKKyAgICAgICAkZWNobyAiWCRfbHRfbGlua2VyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPiBjb25mdGVzdC5leHAKKyAgICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKKyAgICAgICBpZiBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfRjc3PXllcworICAgICAgIGZpCisgICAgIGVsc2UKKyAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19GNzc9eWVzCisgICAgIGZpCisgICBmaQorICAgJHJtIGNvbmZ0ZXN0KgorICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKworZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0Y3NyIgPiY1CitlY2hvICIke0VDSE9fVH0kbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfRjc3IiA+JjY7IH0KKworaWYgdGVzdCB4IiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19GNzciID0geHllczsgdGhlbgorICAgIDoKK2Vsc2UKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9CitmaQorCisKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0Li4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19GNzcrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fRjc3PW5vCisgICAkcm0gLXIgY29uZnRlc3QgMj4vZGV2L251bGwKKyAgIG1rZGlyIGNvbmZ0ZXN0CisgICBjZCBjb25mdGVzdAorICAgbWtkaXIgb3V0CisgICBwcmludGYgIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorCisgICBsdF9jb21waWxlcl9mbGFnPSItbyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQiCisgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgorICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KKyAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKKyAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCisgICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKKyAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKKyAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCisgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6MjY3NjA6ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQorICAgYWNfc3RhdHVzPSQ/CisgICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZToyNjc2NDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zIG91dC9jb25mdGVzdDIuJGFjX29iamV4dAorICAgdGhlbgorICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKKyAgICAgJGVjaG8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCisgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBvdXQvY29uZnRlc3QuZXJyID5vdXQvY29uZnRlc3QuZXIyCisgICAgIGlmIHRlc3QgISAtcyBvdXQvY29uZnRlc3QuZXIyIHx8IGRpZmYgb3V0L2NvbmZ0ZXN0LmV4cCBvdXQvY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19GNzc9eWVzCisgICAgIGZpCisgICBmaQorICAgY2htb2QgdSt3IC4gMj4mNQorICAgJHJtIGNvbmZ0ZXN0KgorICAgIyBTR0kgQysrIGNvbXBpbGVyIHdpbGwgY3JlYXRlIGRpcmVjdG9yeSBvdXQvaWlfZmlsZXMvIGZvcgorICAgIyB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uCisgICB0ZXN0IC1kIG91dC9paV9maWxlcyAmJiAkcm0gb3V0L2lpX2ZpbGVzLyogJiYgcm1kaXIgb3V0L2lpX2ZpbGVzCisgICAkcm0gb3V0LyogJiYgcm1kaXIgb3V0CisgICBjZCAuLgorICAgcm1kaXIgY29uZnRlc3QKKyAgICRybSBjb25mdGVzdCoKKworZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0Y3NyIgPiY1CitlY2hvICIke0VDSE9fVH0kbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fRjc3IiA+JjY7IH0KKworCitoYXJkX2xpbmtzPSJub3R0ZXN0ZWQiCitpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fRjc3IiA9IG5vICYmIHRlc3QgIiRuZWVkX2xvY2tzIiAhPSBubzsgdGhlbgorICAjIGRvIG5vdCBvdmVyd3JpdGUgdGhlIHZhbHVlIG9mIG5lZWRfbG9ja3MgcHJvdmlkZWQgYnkgdGhlIHVzZXIKKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzLi4uICRFQ0hPX0MiID4mNjsgfQorICBoYXJkX2xpbmtzPXllcworICAkcm0gY29uZnRlc3QqCisgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCisgIHRvdWNoIGNvbmZ0ZXN0LmEKKyAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+JjUgfHwgaGFyZF9saW5rcz1ubworICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubworICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRoYXJkX2xpbmtzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRoYXJkX2xpbmtzIiA+JjY7IH0KKyAgaWYgdGVzdCAiJGhhcmRfbGlua3MiID0gbm87IHRoZW4KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBcYCRDQycgZG9lcyBub3Qgc3VwcG9ydCBcYC1jIC1vJywgc28gXGBtYWtlIC1qJyBtYXkgYmUgdW5zYWZlIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogXGAkQ0MnIGRvZXMgbm90IHN1cHBvcnQgXGAtYyAtbycsIHNvIFxgbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiYyO30KKyAgICBuZWVkX2xvY2tzPXdhcm4KKyAgZmkKK2Vsc2UKKyAgbmVlZF9sb2Nrcz1ubworZmkKKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLi4uICRFQ0hPX0MiID4mNjsgfQorCisgIHJ1bnBhdGhfdmFyPQorICBhbGxvd191bmRlZmluZWRfZmxhZ19GNzc9CisgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfRjc3PW5vCisgIGFyY2hpdmVfY21kc19GNzc9CisgIGFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3PQorICBvbGRfYXJjaGl2ZV9Gcm9tX25ld19jbWRzX0Y3Nz0KKyAgb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNfRjc3PQorICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfRjc3PQorICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19GNzc9CisgIHRocmVhZF9zYWZlX2ZsYWdfc3BlY19GNzc9CisgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PQorICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkX0Y3Nz0KKyAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9GNzc9CisgIGhhcmRjb2RlX2RpcmVjdF9GNzc9bm8KKyAgaGFyZGNvZGVfbWludXNfTF9GNzc9bm8KKyAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9GNzc9dW5zdXBwb3J0ZWQKKyAgbGlua19hbGxfZGVwbGlic19GNzc9dW5rbm93bgorICBoYXJkY29kZV9hdXRvbWF0aWNfRjc3PW5vCisgIG1vZHVsZV9jbWRzX0Y3Nz0KKyAgbW9kdWxlX2V4cHN5bV9jbWRzX0Y3Nz0KKyAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0Y3Nz1ubworICBleHBvcnRfc3ltYm9sc19jbWRzX0Y3Nz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworICAjIGluY2x1ZGVfZXhwc3ltcyBzaG91bGQgYmUgYSBsaXN0IG9mIHNwYWNlLXNlcGFyYXRlZCBzeW1ib2xzIHRvIGJlICphbHdheXMqCisgICMgaW5jbHVkZWQgaW4gdGhlIHN5bWJvbCBsaXN0CisgIGluY2x1ZGVfZXhwc3ltc19GNzc9CisgICMgZXhjbHVkZV9leHBzeW1zIGNhbiBiZSBhbiBleHRlbmRlZCByZWdleHAgb2Ygc3ltYm9scyB0byBleGNsdWRlCisgICMgaXQgd2lsbCBiZSB3cmFwcGVkIGJ5IGAgKCcgYW5kIGApJCcsIHNvIG9uZSBtdXN0IG5vdCBtYXRjaCBiZWdpbm5pbmcgb3IKKyAgIyBlbmQgb2YgbGluZS4gIEV4YW1wbGU6IGBhfGJjfC4qZC4qJyB3aWxsIGV4Y2x1ZGUgdGhlIHN5bWJvbHMgYGEnIGFuZCBgYmMnLAorICAjIGFzIHdlbGwgYXMgYW55IHN5bWJvbCB0aGF0IGNvbnRhaW5zIGBkJy4KKyAgZXhjbHVkZV9leHBzeW1zX0Y3Nz0iX0dMT0JBTF9PRkZTRVRfVEFCTEVfIgorICAjIEFsdGhvdWdoIF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyBpcyBhIHZhbGlkIHN5bWJvbCBDIG5hbWUsIG1vc3QgYS5vdXQKKyAgIyBwbGF0Zm9ybXMgKGFiKXVzZSBpdCBpbiBQSUMgY29kZSwgYnV0IHRoZWlyIGxpbmtlcnMgZ2V0IGNvbmZ1c2VkIGlmCisgICMgdGhlIHN5bWJvbCBpcyBleHBsaWNpdGx5IHJlZmVyZW5jZWQuICBTaW5jZSBwb3J0YWJsZSBjb2RlIGNhbm5vdAorICAjIHJlbHkgb24gdGhpcyBzeW1ib2wgbmFtZSwgaXQncyBwcm9iYWJseSBmaW5lIHRvIG5ldmVyIGluY2x1ZGUgaXQgaW4KKyAgIyBwcmVsb2FkZWQgc3ltYm9sIHRhYmxlcy4KKyAgZXh0cmFjdF9leHBzeW1zX2NtZHM9CisgICMgSnVzdCBiZWluZyBwYXJhbm9pZCBhYm91dCBlbnN1cmluZyB0aGF0IGNjX2Jhc2VuYW1lIGlzIHNldC4KKyAgZm9yIGNjX3RlbXAgaW4gJGNvbXBpbGVyIiI7IGRvCisgIGNhc2UgJGNjX3RlbXAgaW4KKyAgICBjb21waWxlIHwgKltcXC9dY29tcGlsZSB8IGNjYWNoZSB8ICpbXFwvXWNjYWNoZSApIDs7CisgICAgZGlzdGNjIHwgKltcXC9dZGlzdGNjIHwgcHVyaWZ5IHwgKltcXC9dcHVyaWZ5ICkgOzsKKyAgICBcLSopIDs7CisgICAgKikgYnJlYWs7OworICBlc2FjCitkb25lCitjY19iYXNlbmFtZT1gJGVjaG8gIlgkY2NfdGVtcCIgfCAkWHNlZCAtZSAncyUuKi8lJScgLWUgInMlXiRob3N0X2FsaWFzLSUlImAKKworICBjYXNlICRob3N0X29zIGluCisgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKyAgICAjIEZJWE1FOiB0aGUgTVNWQysrIHBvcnQgaGFzbid0IGJlZW4gdGVzdGVkIGluIGEgbG9vb29uZyB0aW1lCisgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKKyAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgorICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorICAgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICBmaQorICAgIDs7CisgIGludGVyaXgqKQorICAgICMgd2UganVzdCBob3BlL2Fzc3VtZSB0aGlzIGlzIGdjYyBhbmQgbm90IGM4OSAoPSBNU1ZDKyspCisgICAgd2l0aF9nbnVfbGQ9eWVzCisgICAgOzsKKyAgb3BlbmJzZCopCisgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICA7OworICBlc2FjCisKKyAgbGRfc2hsaWJzX0Y3Nz15ZXMKKyAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICAgICMgSWYgYXJjaGl2ZV9jbWRzIHJ1bnMgTEQsIG5vdCBDQywgd2xhcmMgc2hvdWxkIGJlIGVtcHR5CisgICAgd2xhcmM9JyR7d2x9JworCisgICAgIyBTZXQgc29tZSBkZWZhdWx0cyBmb3IgR05VIGxkIHdpdGggc2hhcmVkIGxpYnJhcnkgc3VwcG9ydC4gVGhlc2UKKyAgICAjIGFyZSByZXNldCBsYXRlciBpZiBzaGFyZWQgbGlicmFyaWVzIGFyZSBub3Qgc3VwcG9ydGVkLiBQdXR0aW5nIHRoZW0KKyAgICAjIGhlcmUgYWxsb3dzIHRoZW0gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWNlc3NhcnkuCisgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKyAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tLXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfRjc3PScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCisgICAgIyBhbmNpZW50IEdOVSBsZCBkaWRuJ3Qgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUgZXQuIGFsLgorICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJ25vLXdob2xlLWFyY2hpdmUnID4gL2Rldi9udWxsOyB0aGVuCisJd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfRjc3PSIkd2xhcmMiJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnIiR3bGFyYyInLS1uby13aG9sZS1hcmNoaXZlJworICAgICAgZWxzZQorICAJd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfRjc3PQorICAgIGZpCisgICAgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPW5vCisgICAgY2FzZSBgJExEIC12IDI+L2Rldi9udWxsYCBpbgorICAgICAgKlwgWzAxXS4qIHwgKlwgMi5bMC05XS4qIHwgKlwgMi4xMC4qKSA7OyAjIGNhdGNoIHZlcnNpb25zIDwgMi4xMQorICAgICAgKlwgMi4xMS45My4wLjJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBSSDcuMyAuLi4KKyAgICAgICpcIDIuMTEuOTIuMC4xMlwgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OyAjIE1hbmRyYWtlIDguMiAuLi4KKyAgICAgICpcIDIuMTEuKikgOzsgIyBvdGhlciAyLjExIHZlcnNpb25zCisgICAgICAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7CisgICAgZXNhYworCisgICAgIyBTZWUgaWYgR05VIGxkIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeDMqIHwgYWl4NCogfCBhaXg1KikKKyAgICAgICMgT24gQUlYL1BQQywgdGhlIEdOVSBsaW5rZXIgaXMgdmVyeSBicm9rZW4KKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NDsgdGhlbgorCWxkX3NobGlic19GNzc9bm8KKwljYXQgPDxFT0YgMT4mMgorCisqKiogV2FybmluZzogdGhlIEdOVSBsaW5rZXIsIGF0IGxlYXN0IHVwIHRvIHJlbGVhc2UgMi45LjEsIGlzIHJlcG9ydGVkCisqKiogdG8gYmUgdW5hYmxlIHRvIHJlbGlhYmx5IGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIEFJWC4KKyoqKiBUaGVyZWZvcmUsIGxpYnRvb2wgaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIElmIHlvdQorKioqIHJlYWxseSBjYXJlIGZvciBzaGFyZWQgbGlicmFyaWVzLCB5b3UgbWF5IHdhbnQgdG8gbW9kaWZ5IHlvdXIgUEFUSAorKioqIHNvIHRoYXQgYSBub24tR05VIGxpbmtlciBpcyBmb3VuZCwgYW5kIHRoZW4gcmVzdGFydC4KKworRU9GCisgICAgICBmaQorICAgICAgOzsKKworICAgIGFtaWdhb3MqKQorICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJHJtICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgTkFNRSAkbGlibmFtZSIgPiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIExJQlJBUllfSUQgMSIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBWRVJTSU9OICRtYWpvciIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBSRVZJU0lPTiAkcmV2aXNpb24iID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEFSICRBUl9GTEFHUyAkbGliICRsaWJvYmpzfiRSQU5MSUIgJGxpYn4oY2QgJG91dHB1dF9vYmpkaXIgJiYgYTJpeGxpYnJhcnkgLTMyKScKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PSctTCRsaWJkaXInCisgICAgICBoYXJkY29kZV9taW51c19MX0Y3Nz15ZXMKKworICAgICAgIyBTYW11ZWwgQS4gRmFsdm8gSUkgPGtjNXRqYUBkb2xwaGluLm9wZW5wcm9qZWN0cy5uZXQ+IHJlcG9ydHMKKyAgICAgICMgdGhhdCB0aGUgc2VtYW50aWNzIG9mIGR5bmFtaWMgbGlicmFyaWVzIG9uIEFtaWdhT1MsIGF0IGxlYXN0IHVwCisgICAgICAjIHRvIHZlcnNpb24gNCwgaXMgdG8gc2hhcmUgZGF0YSBhbW9uZyBtdWx0aXBsZSBwcm9ncmFtcyBsaW5rZWQKKyAgICAgICMgd2l0aCB0aGUgc2FtZSBkeW5hbWljIGxpYnJhcnkuICBTaW5jZSB0aGlzIGRvZXNuJ3QgbWF0Y2ggdGhlCisgICAgICAjIGJlaGF2aW9yIG9mIHNoYXJlZCBsaWJyYXJpZXMgb24gb3RoZXIgcGxhdGZvcm1zLCB3ZSBjYW4ndCB1c2UKKyAgICAgICMgdGhlbS4KKyAgICAgIGxkX3NobGlic19GNzc9bm8KKyAgICAgIDs7CisKKyAgICBiZW9zKikKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCWFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3Nz11bnN1cHBvcnRlZAorCSMgSm9zZXBoIEJlY2tlbmJhY2ggPGpyYjNAYmVzdC5jb20+IHNheXMgc29tZSByZWxlYXNlcyBvZiBnY2MKKwkjIHN1cHBvcnQgLS11bmRlZmluZWQuICBUaGlzIGRlc2VydmVzIHNvbWUgaW52ZXN0aWdhdGlvbi4gIEZJWE1FCisJYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1ub3N0YXJ0ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgZWxzZQorCWxkX3NobGlic19GNzc9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQorICAgICAgIyBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsIEY3NykgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCisgICAgICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9Jy1MJGxpYmRpcicKKyAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3Nz11bnN1cHBvcnRlZAorICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0Y3Nz1ubworICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19GNzc9eWVzCisgICAgICBleHBvcnRfc3ltYm9sc19jbWRzX0Y3Nz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdIC9zLy4qIFwoW14gXSpcKS9cMSBEQVRBLydcJycgfCAkU0VEIC1lICdcJycvXltBSVRXXSAvcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKworICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgIGFyY2hpdmVfY21kc19GNzc9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworCSMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSAoMXN0IGxpbmUKKwkjIGlzIEVYUE9SVFMpLCB1c2UgaXQgYXMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZC4uLgorCWFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3PSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorCSAgY3AgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworCWVsc2UKKwkgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworCSAgY2F0ICRleHBvcnRfc3ltYm9scyA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKwlmaX4KKwkkQ0MgLXNoYXJlZCAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKyAgICAgIGVsc2UKKwlsZF9zaGxpYnNfRjc3PW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIGludGVyaXgzKikKKyAgICAgIGhhcmRjb2RlX2RpcmVjdF9GNzc9bm8KKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PW5vCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19GNzc9JyR7d2x9LUUnCisgICAgICAjIEhhY2s6IE9uIEludGVyaXggMy54LCB3ZSBjYW5ub3QgY29tcGlsZSBQSUMgYmVjYXVzZSBvZiBhIGJyb2tlbiBnY2MuCisgICAgICAjIEluc3RlYWQsIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGxvYWRlZCBhdCBhbiBpbWFnZSBiYXNlICgweDEwMDAwMDAwIGJ5CisgICAgICAjIGRlZmF1bHQpIGFuZCByZWxvY2F0ZWQgaWYgdGhleSBjb25mbGljdCwgd2hpY2ggaXMgYSBzbG93IHZlcnkgbWVtb3J5CisgICAgICAjIGNvbnN1bWluZyBhbmQgZnJhZ21lbnRpbmcgcHJvY2Vzcy4gIFRvIGF2b2lkIHRoaXMsIHdlIHBpY2sgYSByYW5kb20sCisgICAgICAjIDI1NiBLaUItYWxpZ25lZCBpbWFnZSBiYXNlIGJldHdlZW4gMHg1MDAwMDAwMCBhbmQgMHg2RkZDMDAwMCBhdCBsaW5rCisgICAgICAjIHRpbWUuICBNb3ZpbmcgdXAgZnJvbSAweDEwMDAwMDAwIGFsc28gYWxsb3dzIG1vcmUgc2JyaygyKSBzcGFjZS4KKyAgICAgIGFyY2hpdmVfY21kc19GNzc9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0nc2VkICJzLF4sXywiICRleHBvcnRfc3ltYm9scyA+JG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW1+JENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKyAgICAgIDs7CisKKyAgICBsaW51eCopCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwl0bXBfYWRkZmxhZz0KKwljYXNlICRjY19iYXNlbmFtZSwkaG9zdF9jcHUgaW4KKwlwZ2NjKikJCQkJIyBQb3J0bGFuZCBHcm91cCBDIGNvbXBpbGVyCisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19GNzc9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7ICRlY2hvIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIHRtcF9hZGRmbGFnPScgJHBpY19mbGFnJworCSAgOzsKKwlwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSopCSMgUG9ydGxhbmQgR3JvdXAgZjc3IGFuZCBmOTAgY29tcGlsZXJzCisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19GNzc9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7ICRlY2hvIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIHRtcF9hZGRmbGFnPScgJHBpY19mbGFnIC1Nbm9tYWluJyA7OworCWVjYyosaWE2NCogfCBpY2MqLGlhNjQqKQkJIyBJbnRlbCBDIGNvbXBpbGVyIG9uIGlhNjQKKwkgIHRtcF9hZGRmbGFnPScgLWlfZHluYW1pYycgOzsKKwllZmMqLGlhNjQqIHwgaWZvcnQqLGlhNjQqKQkjIEludGVsIEZvcnRyYW4gY29tcGlsZXIgb24gaWE2NAorCSAgdG1wX2FkZGZsYWc9JyAtaV9keW5hbWljIC1ub2Zvcl9tYWluJyA7OworCWlmYyogfCBpZm9ydCopCQkJIyBJbnRlbCBGb3J0cmFuIGNvbXBpbGVyCisJICB0bXBfYWRkZmxhZz0nIC1ub2Zvcl9tYWluJyA7OworCWVzYWMKKwlhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCciJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisKKwlpZiB0ZXN0ICRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmcgPSB5ZXM7IHRoZW4KKwkgIGFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3PSckZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorICAkZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAkQ0MgLXNoYXJlZCciJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXZlcnNpb24tc2NyaXB0ICR7d2x9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisJZmkKKyAgICAgIGVsc2UKKwlsZF9zaGxpYnNfRjc3PW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIG5ldGJzZCopCisgICAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisJYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1Cc2hhcmVhYmxlICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW8gJGxpYicKKwl3bGFyYz0KKyAgICAgIGVsc2UKKwlhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwlhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICBmaQorICAgICAgOzsKKworICAgIHNvbGFyaXMqKQorICAgICAgaWYgJExEIC12IDI+JjEgfCBncmVwICdCRkQgMlwuOCcgPiAvZGV2L251bGw7IHRoZW4KKwlsZF9zaGxpYnNfRjc3PW5vCisJY2F0IDw8RU9GIDE+JjIKKworKioqIFdhcm5pbmc6IFRoZSByZWxlYXNlcyAyLjguKiBvZiB0aGUgR05VIGxpbmtlciBjYW5ub3QgcmVsaWFibHkKKyoqKiBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBTb2xhcmlzIHN5c3RlbXMuICBUaGVyZWZvcmUsIGxpYnRvb2wKKyoqKiBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgV2UgdXJnZSB5b3UgdG8gdXBncmFkZSBHTlUKKyoqKiBiaW51dGlscyB0byByZWxlYXNlIDIuOS4xIG9yIG5ld2VyLiAgQW5vdGhlciBvcHRpb24gaXMgdG8gbW9kaWZ5CisqKiogeW91ciBQQVRIIG9yIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gc28gdGhhdCB0aGUgbmF0aXZlIGxpbmtlciBpcworKioqIHVzZWQsIGFuZCB0aGVuIHJlc3RhcnQuCisKK0VPRgorICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwlhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwlhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICBlbHNlCisJbGRfc2hsaWJzX0Y3Nz1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqKQorICAgICAgY2FzZSBgJExEIC12IDI+JjFgIGluCisgICAgICAgICpcIFswMV0uKiB8ICpcIDIuWzAtOV0uKiB8ICpcIDIuMVswLTVdLiopCisJbGRfc2hsaWJzX0Y3Nz1ubworCWNhdCA8PF9MVF9FT0YgMT4mMgorCisqKiogV2FybmluZzogUmVsZWFzZXMgb2YgdGhlIEdOVSBsaW5rZXIgcHJpb3IgdG8gMi4xNi45MS4wLjMgY2FuIG5vdAorKioqIHJlbGlhYmx5IGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIFNDTyBzeXN0ZW1zLiAgVGhlcmVmb3JlLCBsaWJ0b29sCisqKiogaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIFdlIHVyZ2UgeW91IHRvIHVwZ3JhZGUgR05VCisqKiogYmludXRpbHMgdG8gcmVsZWFzZSAyLjE2LjkxLjAuMyBvciBuZXdlci4gIEFub3RoZXIgb3B0aW9uIGlzIHRvIG1vZGlmeQorKioqIHlvdXIgUEFUSCBvciBjb21waWxlciBjb25maWd1cmF0aW9uIHNvIHRoYXQgdGhlIG5hdGl2ZSBsaW5rZXIgaXMKKyoqKiB1c2VkLCBhbmQgdGhlbiByZXN0YXJ0LgorCitfTFRfRU9GCisJOzsKKwkqKQorCSAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PSdgdGVzdCAteiAiJFNDT0FCU1BBVEgiICYmIGVjaG8gJHt3bH0tcnBhdGgsJGxpYmRpcmAnCisJICAgIGFyY2hpdmVfY21kc19GNzc9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYicKKwkgICAgYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUsLXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJICBlbHNlCisJICAgIGxkX3NobGlic19GNzc9bm8KKwkgIGZpCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBzdW5vczQqKQorICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1hc3NlcnQgcHVyZS10ZXh0IC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIHdsYXJjPQorICAgICAgaGFyZGNvZGVfZGlyZWN0X0Y3Nz15ZXMKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PW5vCisgICAgICA7OworCisgICAgKikKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCWFyY2hpdmVfY21kc19GNzc9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCWFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlsZF9zaGxpYnNfRjc3PW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBpZiB0ZXN0ICIkbGRfc2hsaWJzX0Y3NyIgPSBubzsgdGhlbgorICAgICAgcnVucGF0aF92YXI9CisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0KKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19GNzc9CisgICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19GNzc9CisgICAgZmkKKyAgZWxzZQorICAgICMgUE9SVE1FIGZpbGwgaW4gYSBkZXNjcmlwdGlvbiBvZiB5b3VyIHN5c3RlbSdzIGxpbmtlciAobm90IEdOVSBsZCkKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgYWl4MyopCisgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19GNzc9dW5zdXBwb3J0ZWQKKyAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9sc19GNzc9eWVzCisgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0nJExEIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtYkU6JGV4cG9ydF9zeW1ib2xzIC1UNTEyIC1INTEyIC1iTTpTUkV+JEFSICRBUl9GTEFHUyAkbGliICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCisgICAgICAjIE5vdGU6IHRoaXMgbGlua2VyIGhhcmRjb2RlcyB0aGUgZGlyZWN0b3JpZXMgaW4gTElCUEFUSCBpZiB0aGVyZQorICAgICAgIyBhcmUgbm8gZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGJ5IC1MLgorICAgICAgaGFyZGNvZGVfbWludXNfTF9GNzc9eWVzCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0IC16ICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWMiOyB0aGVuCisJIyBOZWl0aGVyIGRpcmVjdCBoYXJkY29kaW5nIG5vciBzdGF0aWMgbGlua2luZyBpcyBzdXBwb3J0ZWQgd2l0aCBhCisJIyBicm9rZW4gY29sbGVjdDIuCisJaGFyZGNvZGVfZGlyZWN0X0Y3Nz11bnN1cHBvcnRlZAorICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhaXg0KiB8IGFpeDUqKQorICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkjIE9uIElBNjQsIHRoZSBsaW5rZXIgZG9lcyBydW4gdGltZSBsaW5raW5nIGJ5IGRlZmF1bHQsIHNvIHdlIGRvbid0CisJIyBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwuCisJYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworCWV4cF9zeW1fZmxhZz0nLUJleHBvcnQnCisJbm9fZW50cnlfZmxhZz0iIgorICAgICAgZWxzZQorCSMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHdlIGRvbid0IHdhbnQgdGhlICItQyIgb3B0aW9uLgorCSMgLUMgbWVhbnMgZGVtYW5nbGUgdG8gQUlYIG5tLCBidXQgbWVhbnMgZG9uJ3QgZGVtYW5nbGUgd2l0aCBHTlUgbm0KKwlpZiAkTk0gLVYgMj4mMSB8IGdyZXAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KKwkgIGV4cG9ydF9zeW1ib2xzX2NtZHNfRjc3PSckTk0gLUJwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQyID09ICJUIikgfHwgKFwkMiA9PSAiRCIpIHx8IChcJDIgPT0gIkIiKSkgJiYgKHN1YnN0cihcJDMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFwkMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKwllbHNlCisJICBleHBvcnRfc3ltYm9sc19jbWRzX0Y3Nz0nJE5NIC1CQ3BnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJDIgPT0gIlQiKSB8fCAoXCQyID09ICJEIikgfHwgKFwkMiA9PSAiQiIpKSAmJiAoc3Vic3RyKFwkMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJworCWZpCisJYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworCisJIyBUZXN0IGlmIHdlIGFyZSB0cnlpbmcgdG8gdXNlIHJ1biB0aW1lIGxpbmtpbmcgb3Igbm9ybWFsCisJIyBBSVggc3R5bGUgbGlua2luZy4gSWYgLWJydGwgaXMgc29tZXdoZXJlIGluIExERkxBR1MsIHdlCisJIyBuZWVkIHRvIGRvIHJ1bnRpbWUgbGlua2luZy4KKwljYXNlICRob3N0X29zIGluIGFpeDQuWzIzXXxhaXg0LlsyM10uKnxhaXg1KikKKwkgIGZvciBsZF9mbGFnIGluICRMREZMQUdTOyBkbworICAJICBpZiAodGVzdCAkbGRfZmxhZyA9ICItYnJ0bCIgfHwgdGVzdCAkbGRfZmxhZyA9ICItV2wsLWJydGwiKTsgdGhlbgorICAJICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCisgIAkgICAgYnJlYWsKKyAgCSAgZmkKKwkgIGRvbmUKKwkgIDs7CisJZXNhYworCisJZXhwX3N5bV9mbGFnPSctYmV4cG9ydCcKKwlub19lbnRyeV9mbGFnPSctYm5vZW50cnknCisgICAgICBmaQorCisgICAgICAjIFdoZW4gbGFyZ2UgZXhlY3V0YWJsZXMgb3Igc2hhcmVkIG9iamVjdHMgYXJlIGJ1aWx0LCBBSVggbGQgY2FuCisgICAgICAjIGhhdmUgcHJvYmxlbXMgY3JlYXRpbmcgdGhlIHRhYmxlIG9mIGNvbnRlbnRzLiAgSWYgbGlua2luZyBhIGxpYnJhcnkKKyAgICAgICMgb3IgcHJvZ3JhbSByZXN1bHRzIGluICJlcnJvciBUT0Mgb3ZlcmZsb3ciIGFkZCAtbW1pbmltYWwtdG9jIHRvCisgICAgICAjIENYWEZMQUdTL0NGTEFHUyBmb3IgZysrL2djYy4gIEluIHRoZSBjYXNlcyB3aGVyZSB0aGF0IGlzIG5vdAorICAgICAgIyBlbm91Z2ggdG8gZml4IHRoZSBwcm9ibGVtLCBhZGQgLVdsLC1iYmlndG9jIHRvIExERkxBR1MuCisKKyAgICAgIGFyY2hpdmVfY21kc19GNzc9JycKKyAgICAgIGhhcmRjb2RlX2RpcmVjdF9GNzc9eWVzCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0Y3Nz0nOicKKyAgICAgIGxpbmtfYWxsX2RlcGxpYnNfRjc3PXllcworCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCWNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMDEyXXxhaXg0LlswMTJdLiopCisJIyBXZSBvbmx5IHdhbnQgdG8gZG8gdGhpcyBvbiBBSVggNC4yIGFuZCBsb3dlciwgdGhlIGNoZWNrCisJIyBiZWxvdyBmb3IgYnJva2VuIGNvbGxlY3QyIGRvZXNuJ3Qgd29yayB1bmRlciA0LjMrCisJICBjb2xsZWN0Mm5hbWU9YCR7Q0N9IC1wcmludC1wcm9nLW5hbWU9Y29sbGVjdDJgCisJICBpZiB0ZXN0IC1mICIkY29sbGVjdDJuYW1lIiAmJiBcCisgIAkgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8IGdyZXAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCisJICB0aGVuCisgIAkgICMgV2UgaGF2ZSByZXdvcmtlZCBjb2xsZWN0MgorICAJICBoYXJkY29kZV9kaXJlY3RfRjc3PXllcworCSAgZWxzZQorICAJICAjIFdlIGhhdmUgb2xkIGNvbGxlY3QyCisgIAkgIGhhcmRjb2RlX2RpcmVjdF9GNzc9dW5zdXBwb3J0ZWQKKyAgCSAgIyBJdCBmYWlscyB0byBmaW5kIHVuaW5zdGFsbGVkIGxpYnJhcmllcyB3aGVuIHRoZSB1bmluc3RhbGxlZAorICAJICAjIHBhdGggaXMgbm90IGxpc3RlZCBpbiB0aGUgbGlicGF0aC4gIFNldHRpbmcgaGFyZGNvZGVfbWludXNfTAorICAJICAjIHRvIHVuc3VwcG9ydGVkIGZvcmNlcyByZWxpbmtpbmcKKyAgCSAgaGFyZGNvZGVfbWludXNfTF9GNzc9eWVzCisgIAkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PSctTCRsaWJkaXInCisgIAkgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfRjc3PQorCSAgZmkKKwkgIDs7CisJZXNhYworCXNoYXJlZF9mbGFnPSctc2hhcmVkJworCWlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorCSAgc2hhcmVkX2ZsYWc9IiRzaGFyZWRfZmxhZyAiJyR7d2x9LUcnCisJZmkKKyAgICAgIGVsc2UKKwkjIG5vdCB1c2luZyBnY2MKKwlpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICAJIyBWaXN1YWxBZ2UgQysrLCBWZXJzaW9uIDUuNSBmb3IgQUlYIDVMIGZvciBJQS02NCwgQmV0YSAzIFJlbGVhc2UKKyAgCSMgY2hva2VzIG9uIC1XbCwtRy4gVGhlIGZvbGxvd2luZyBsaW5lIGlzIGNvcnJlY3Q6CisJICBzaGFyZWRfZmxhZz0nLUcnCisJZWxzZQorCSAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisJICAgIHNoYXJlZF9mbGFnPScke3dsfS1HJworCSAgZWxzZQorCSAgICBzaGFyZWRfZmxhZz0nJHt3bH0tYk06U1JFJworCSAgZmkKKwlmaQorICAgICAgZmkKKworICAgICAgIyBJdCBzZWVtcyB0aGF0IC1iZXhwYWxsIGRvZXMgbm90IGV4cG9ydCBzeW1ib2xzIGJlZ2lubmluZyB3aXRoCisgICAgICAjIHVuZGVyc2NvcmUgKF8pLCBzbyBpdCBpcyBiZXR0ZXIgdG8gZ2VuZXJhdGUgYSBsaXN0IG9mIHN5bWJvbHMgdG8gZXhwb3J0LgorICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0Y3Nz15ZXMKKyAgICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorCSMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1bnRpbWUgbG9hZGluZyBmbGFncyAoLWJydGwpLAorCSMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KKwlhbGxvd191bmRlZmluZWRfZmxhZ19GNzc9Jy1iZXJvaycKKyAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4gZW1wdHkgZXhlY3V0YWJsZS4KKyAgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgICAgIHByb2dyYW0gbWFpbgorCisgICAgICBlbmQKK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19mNzdfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKworYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAnL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geyAvXjAvIHsgcy9eMCAgKlwoLipcKSQvXDEvOyBwOyB9Cit9J2AKKyMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KK2lmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAnL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geyAvXjAvIHsgcy9eMCAgKlwoLipcKSQvXDEvOyBwOyB9Cit9J2A7IGZpCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKworICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorCWFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3PSJcJENDIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiBlY2hvICIke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IjsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgorICAgICAgIGVsc2UKKwlpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9JyR7d2x9LVIgJGxpYmRpcjovdXNyL2xpYjovbGliJworCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PSIteiBub2RlZnMiCisJICBhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyIKKwllbHNlCisJICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbiBlbXB0eSBleGVjdXRhYmxlLgorCSBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgICAgIHByb2dyYW0gbWFpbgorCisgICAgICBlbmQKK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19mNzdfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKworYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAnL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geyAvXjAvIHsgcy9eMCAgKlwoLipcKSQvXDEvOyBwOyB9Cit9J2AKKyMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KK2lmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAnL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geyAvXjAvIHsgcy9eMCAgKlwoLipcKSQvXDEvOyBwOyB9Cit9J2A7IGZpCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKworCSBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKwkgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCisJICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCisJICBub191bmRlZmluZWRfZmxhZ19GNzc9JyAke3dsfS1iZXJub3RvaycKKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3Nz0nICR7d2x9LWJlcm9rJworCSAgIyBFeHBvcnRlZCBzeW1ib2xzIGNhbiBiZSBwdWxsZWQgaW50byBzaGFyZWQgb2JqZWN0cyBmcm9tIGFyY2hpdmVzCisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19GNzc9JyRjb252ZW5pZW5jZScKKwkgIGFyY2hpdmVfY21kc19uZWVkX2xjX0Y3Nz15ZXMKKwkgICMgVGhpcyBpcyBzaW1pbGFyIHRvIGhvdyBBSVggdHJhZGl0aW9uYWxseSBidWlsZHMgaXRzIHNoYXJlZCBsaWJyYXJpZXMuCisJICBhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICR7d2x9LWJub2VudHJ5ICRjb21waWxlcl9mbGFncyAke3dsfS1iRTokZXhwb3J0X3N5bWJvbHMke2FsbG93X3VuZGVmaW5lZF9mbGFnfX4kQVIgJEFSX0ZMQUdTICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lJHJlbGVhc2UuYSAkb3V0cHV0X29iamRpci8kc29uYW1lJworCWZpCisgICAgICBmaQorICAgICAgOzsKKworICAgIGFtaWdhb3MqKQorICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJHJtICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgTkFNRSAkbGlibmFtZSIgPiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIExJQlJBUllfSUQgMSIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBWRVJTSU9OICRtYWpvciIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBSRVZJU0lPTiAkcmV2aXNpb24iID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEFSICRBUl9GTEFHUyAkbGliICRsaWJvYmpzfiRSQU5MSUIgJGxpYn4oY2QgJG91dHB1dF9vYmpkaXIgJiYgYTJpeGxpYnJhcnkgLTMyKScKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PSctTCRsaWJkaXInCisgICAgICBoYXJkY29kZV9taW51c19MX0Y3Nz15ZXMKKyAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgZGlmZmVyZW50IHNlbWFudGljcyBvbiB0aGUgR05VIGxkIHNlY3Rpb24KKyAgICAgIGxkX3NobGlic19GNzc9bm8KKyAgICAgIDs7CisKKyAgICBic2RpWzQ1XSopCisgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfRjc3PS1yZHluYW1pYworICAgICAgOzsKKworICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKyAgICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCisgICAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgorICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PScgJworICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PXVuc3VwcG9ydGVkCisgICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorICAgICAgbGliZXh0PWxpYgorICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisgICAgICBzaHJleHRfY21kcz0iLmRsbCIKKyAgICAgICMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKyAgICAgIGFyY2hpdmVfY21kc19GNzc9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZWNobyAiJGRlcGxpYnMiIHwgJFNFRCAtZSAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JworICAgICAgIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KKyAgICAgIG9sZF9hcmNoaXZlX0Zyb21fbmV3X2NtZHNfRjc3PSd0cnVlJworICAgICAgIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KKyAgICAgIG9sZF9hcmNoaXZlX2NtZHNfRjc3PSdsaWIgL09VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCisgICAgICBmaXhfc3JjZmlsZV9wYXRoX0Y3Nz0nYGN5Z3BhdGggLXcgIiRzcmNmaWxlImAnCisgICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0Y3Nz15ZXMKKyAgICAgIDs7CisKKyAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgICByaGFwc29keSogfCBkYXJ3aW4xLlswMTJdKQorICAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PScke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycKKyAgICAgICAgIDs7CisgICAgICAgKikgIyBEYXJ3aW4gMS4zIG9uCisgICAgICAgICBpZiB0ZXN0IC16ICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUfSA7IHRoZW4KKyAgICAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgY2FzZSAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVH0gaW4KKyAgICAgICAgICAgICAxMC5bMDEyXSkKKyAgICAgICAgICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3Nz0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnCisgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgIDEwLiopCisgICAgICAgICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19GNzc9JyR7d2x9LXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJworICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgZXNhYworICAgICAgICAgZmkKKyAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sY19GNzc9bm8KKyAgICAgIGhhcmRjb2RlX2RpcmVjdF9GNzc9bm8KKyAgICAgIGhhcmRjb2RlX2F1dG9tYXRpY19GNzc9eWVzCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz11bnN1cHBvcnRlZAorICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfRjc3PScnCisgICAgICBsaW5rX2FsbF9kZXBsaWJzX0Y3Nz15ZXMKKyAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyA7IHRoZW4KKyAgICAJb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCisgICAgICAgIGFyY2hpdmVfY21kc19GNzc9JyRDQyAtZHluYW1pY2xpYiAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSAkcnBhdGgvJHNvbmFtZSAkdmVyc3RyaW5nJworICAgICAgbW9kdWxlX2NtZHNfRjc3PSckQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFncycKKyAgICAgICMgRG9uJ3QgZml4IHRoaXMgYnkgdXNpbmcgdGhlIGxkIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgZmxhZywgaXQgZG9lc24ndCBleGlzdCBpbiBvbGRlciBkYXJ3aW4gbGRzCisgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgLWR5bmFtaWNsaWIgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgJHJwYXRoLyRzb25hbWUgJHZlcnN0cmluZ35ubWVkaXQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCisgICAgICBtb2R1bGVfZXhwc3ltX2NtZHNfRjc3PSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFnc35ubWVkaXQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCisgICAgZWxzZQorICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgeGxjKikKKyAgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdlY2hvJworICAgICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1xbWtzaHJvYmogJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWluc3RhbGxfbmFtZSAke3dsfWBlY2hvICRycGF0aC8kc29uYW1lYCAkdmVyc3RyaW5nJworICAgICAgICAgbW9kdWxlX2NtZHNfRjc3PSckQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFncycKKyAgICAgICAgICAjIERvbid0IGZpeCB0aGlzIGJ5IHVzaW5nIHRoZSBsZCAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGZsYWcsIGl0IGRvZXNuJ3QgZXhpc3QgaW4gb2xkZXIgZGFyd2luIGxkcworICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDIC1xbWtzaHJvYmogJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWluc3RhbGxfbmFtZSAke3dsfSRycGF0aC8kc29uYW1lICR2ZXJzdHJpbmd+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JworICAgICAgICAgIG1vZHVsZV9leHBzeW1fY21kc19GNzc9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDICRhbGxvd191bmRlZmluZWRfZmxhZyAgLW8gJGxpYiAtYnVuZGxlICRsaWJvYmpzICRkZXBsaWJzJGNvbXBpbGVyX2ZsYWdzfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKKyAgICAgICAgICA7OworICAgICAgICopCisgICAgICAgICBsZF9zaGxpYnNfRjc3PW5vCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICAgICAgOzsKKworICAgIGRndXgqKQorICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9Jy1MJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PW5vCisgICAgICA7OworCisgICAgZnJlZWJzZDEqKQorICAgICAgbGRfc2hsaWJzX0Y3Nz1ubworICAgICAgOzsKKworICAgICMgRnJlZUJTRCAyLjIuWzAxMl0gYWxsb3dzIHVzIHRvIGluY2x1ZGUgYysrcnQwLm8gdG8gZ2V0IEMrKyBjb25zdHJ1Y3RvcgorICAgICMgc3VwcG9ydC4gIEZ1dHVyZSB2ZXJzaW9ucyBkbyB0aGlzIGF1dG9tYXRpY2FsbHksIGJ1dCBhbiBleHBsaWNpdCBjKytydDAubworICAgICMgZG9lcyBub3QgYnJlYWsgYW55dGhpbmcsIGFuZCBoZWxwcyBzaWduaWZpY2FudGx5IChhdCB0aGUgY29zdCBvZiBhIGxpdHRsZQorICAgICMgZXh0cmEgc3BhY2UpLgorICAgIGZyZWVic2QyLjIqKQorICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAvdXNyL2xpYi9jKytydDAubycKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PSctUiRsaWJkaXInCisgICAgICBoYXJkY29kZV9kaXJlY3RfRjc3PXllcworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9GNzc9bm8KKyAgICAgIDs7CisKKyAgICAjIFVuZm9ydHVuYXRlbHksIG9sZGVyIHZlcnNpb25zIG9mIEZyZWVCU0QgMiBkbyBub3QgaGF2ZSB0aGlzIGZlYXR1cmUuCisgICAgZnJlZWJzZDIqKQorICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGhhcmRjb2RlX2RpcmVjdF9GNzc9eWVzCisgICAgICBoYXJkY29kZV9taW51c19MX0Y3Nz15ZXMKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PW5vCisgICAgICA7OworCisgICAgIyBGcmVlQlNEIDMgYW5kIGdyZWF0ZXIgdXNlcyBnY2MgLXNoYXJlZCB0byBkbyBzaGFyZWQgbGlicmFyaWVzLgorICAgIGZyZWVic2QqIHwga2ZyZWVic2QqLWdudSB8IGRyYWdvbmZseSopCisgICAgICBhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PSctUiRsaWJkaXInCisgICAgICBoYXJkY29kZV9kaXJlY3RfRjc3PXllcworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9GNzc9bm8KKyAgICAgIDs7CisKKyAgICBocHV4OSopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCWFyY2hpdmVfY21kc19GNzc9JyRybSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICBlbHNlCisJYXJjaGl2ZV9jbWRzX0Y3Nz0nJHJtICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JExEIC1iICtiICRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICBmaQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9GNzc9OgorICAgICAgaGFyZGNvZGVfZGlyZWN0X0Y3Nz15ZXMKKworICAgICAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKKyAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICAgICAgaGFyZGNvZGVfbWludXNfTF9GNzc9eWVzCisgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfRjc3PScke3dsfS1FJworICAgICAgOzsKKworICAgIGhwdXgxMCopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAtYSAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGVsc2UKKwlhcmNoaXZlX2NtZHNfRjc3PSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PScke3dsfStiICR7d2x9JGxpYmRpcicKKwloYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0Y3Nz06CisKKwloYXJkY29kZV9kaXJlY3RfRjc3PXllcworCWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19GNzc9JyR7d2x9LUUnCisKKwkjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorCSMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCWhhcmRjb2RlX21pbnVzX0xfRjc3PXllcworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBocHV4MTEqKQorICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgLWEgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCWNhc2UgJGhvc3RfY3B1IGluCisJaHBwYSo2NCopCisJICBhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJaWE2NCopCisJICBhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJKikKKwkgIGFyY2hpdmVfY21kc19GNzc9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCWVzYWMKKyAgICAgIGVsc2UKKwljYXNlICRob3N0X2NwdSBpbgorCWhwcGEqNjQqKQorCSAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwlpYTY0KikKKwkgIGFyY2hpdmVfY21kc19GNzc9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJKikKKwkgIGFyY2hpdmVfY21kc19GNzc9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworCWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfRjc3PToKKworCWNhc2UgJGhvc3RfY3B1IGluCisJaHBwYSo2NCp8aWE2NCopCisJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkX0Y3Nz0nK2IgJGxpYmRpcicKKwkgIGhhcmRjb2RlX2RpcmVjdF9GNzc9bm8KKwkgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PW5vCisJICA7OworCSopCisJICBoYXJkY29kZV9kaXJlY3RfRjc3PXllcworCSAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tRScKKworCSAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKKwkgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCSAgaGFyZGNvZGVfbWludXNfTF9GNzc9eWVzCisJICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICA7OworCisgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworICAgICAgZWxzZQorCWFyY2hpdmVfY21kc19GNzc9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZF9GNzc9Jy1ycGF0aCAkbGliZGlyJworICAgICAgZmkKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0Y3Nz06CisgICAgICBsaW5rX2FsbF9kZXBsaWJzX0Y3Nz15ZXMKKyAgICAgIDs7CisKKyAgICBuZXRic2QqKQorICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorCWFyY2hpdmVfY21kc19GNzc9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnICAjIGEub3V0CisgICAgICBlbHNlCisJYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJyAgICAgICMgRUxGCisgICAgICBmaQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9Jy1SJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2RpcmVjdF9GNzc9eWVzCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz1ubworICAgICAgOzsKKworICAgIG5ld3NvczYpCisgICAgICBhcmNoaXZlX2NtZHNfRjc3PSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBoYXJkY29kZV9kaXJlY3RfRjc3PXllcworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfRjc3PToKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PW5vCisgICAgICA7OworCisgICAgb3BlbmJzZCopCisgICAgICBoYXJkY29kZV9kaXJlY3RfRjc3PXllcworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9GNzc9bm8KKyAgICAgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorCWFyY2hpdmVfY21kc19GNzc9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzJworCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PScke3dsfS1ycGF0aCwkbGliZGlyJworCWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19GNzc9JyR7d2x9LUUnCisgICAgICBlbHNlCisgICAgICAgY2FzZSAkaG9zdF9vcyBpbgorCSBvcGVuYnNkWzAxXS4qIHwgb3BlbmJzZDIuWzAtN10gfCBvcGVuYnNkMi5bMC03XS4qKQorCSAgIGFyY2hpdmVfY21kc19GNzc9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9Jy1SJGxpYmRpcicKKwkgICA7OworCSAqKQorCSAgIGFyY2hpdmVfY21kc19GNzc9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwkgICA7OworICAgICAgIGVzYWMKKyAgICAgIGZpCisgICAgICA7OworCisgICAgb3MyKikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PSctTCRsaWJkaXInCisgICAgICBoYXJkY29kZV9taW51c19MX0Y3Nz15ZXMKKyAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3Nz11bnN1cHBvcnRlZAorICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJGVjaG8gIkxJQlJBUlkgJGxpYm5hbWUgSU5JVElOU1RBTkNFIiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kZWNobyAiREVTQ1JJUFRJT04gXCIkbGlibmFtZVwiIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JGVjaG8gREFUQSA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JGVjaG8gIiBTSU5HTEUgTk9OU0hBUkVEIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JGVjaG8gRVhQT1JUUyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+ZW14ZXhwICRsaWJvYmpzID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kQ0MgLVpkbGwgLVpjcnRkbGwgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJworICAgICAgb2xkX2FyY2hpdmVfRnJvbV9uZXdfY21kc19GNzc9J2VteGltcCAtbyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5hICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKKyAgICAgIDs7CisKKyAgICBvc2YzKikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKwlhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlhbGxvd191bmRlZmluZWRfZmxhZ19GNzc9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCisJYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworICAgICAgZmkKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0Y3Nz06CisgICAgICA7OworCisgICAgb3NmNCogfCBvc2Y1KikJIyBhcyBvc2YzKiB3aXRoIHRoZSBhZGRpdGlvbiBvZiAtbXN5bSBmbGFnCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCWFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3Nz0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCisJYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgZWxzZQorCWFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3Nz0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKKwlhcmNoaXZlX2NtZHNfRjc3PSckTEQgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9J2ZvciBpIGluIGBjYXQgJGV4cG9ydF9zeW1ib2xzYDsgZG8gcHJpbnRmICIlcyAlc1xcbiIgLWV4cG9ydGVkX3N5bWJvbCAiXCRpIiA+PiAkbGliLmV4cDsgZG9uZTsgZWNobyAiLWhpZGRlbiI+PiAkbGliLmV4cH4KKwkkTEQgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1pbnB1dCAkbGliLmV4cCAkbGlua2VyX2ZsYWdzICRsaWJvYmpzICRkZXBsaWJzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGlifiRybSAkbGliLmV4cCcKKworCSMgQm90aCBjIGFuZCBjeHggY29tcGlsZXIgc3VwcG9ydCAtcnBhdGggZGlyZWN0bHkKKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nLXJwYXRoICRsaWJkaXInCisgICAgICBmaQorICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9GNzc9OgorICAgICAgOzsKKworICAgIHNvbGFyaXMqKQorICAgICAgbm9fdW5kZWZpbmVkX2ZsYWdfRjc3PScgLXogdGV4dCcKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJd2xhcmM9JyR7d2x9JworCWFyY2hpdmVfY21kc19GNzc9JyRDQyAtc2hhcmVkICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCWFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3PSckZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH4kZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkgICRDQyAtc2hhcmVkICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kcm0gJGxpYi5leHAnCisgICAgICBlbHNlCisJd2xhcmM9JycKKwlhcmNoaXZlX2NtZHNfRjc3PSckTEQgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwlhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0nJGVjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+JGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisgIAkkTEQgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtTSAkbGliLmV4cCAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc34kcm0gJGxpYi5leHAnCisgICAgICBmaQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9Jy1SJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PW5vCisgICAgICBjYXNlICRob3N0X29zIGluCisgICAgICBzb2xhcmlzMi5bMC01XSB8IHNvbGFyaXMyLlswLTVdLiopIDs7CisgICAgICAqKQorIAkjIFRoZSBjb21waWxlciBkcml2ZXIgd2lsbCBjb21iaW5lIGxpbmtlciBvcHRpb25zIHNvIHdlCisgCSMgY2Fubm90IGp1c3QgcGFzcyB0aGUgY29udmllbmNlIGxpYnJhcnkgbmFtZXMgdGhyb3VnaAorIAkjIHdpdGhvdXQgJHdsLCBpZmYgd2UgZG8gbm90IGxpbmsgd2l0aCAkTEQuCisgCSMgTHVja2lseSwgZ2NjIHN1cHBvcnRzIHRoZSBzYW1lIHN5bnRheCB3ZSBuZWVkIGZvciBTdW4gU3R1ZGlvLgorIAkjIFN1cHBvcnRlZCBzaW5jZSBTb2xhcmlzIDIuNiAobWF5YmUgMi41LjE/KQorIAljYXNlICR3bGFyYyBpbgorIAknJykKKyAJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19GNzc9Jy16IGFsbGV4dHJhY3QkY29udmVuaWVuY2UgLXogZGVmYXVsdGV4dHJhY3QnIDs7CisgCSopCisgCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfRjc3PScke3dsfS16ICR7d2x9YWxsZXh0cmFjdGBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0IC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7ICRlY2hvIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS16ICR7d2x9ZGVmYXVsdGV4dHJhY3QnIDs7CisgCWVzYWMgOzsKKyAgICAgIGVzYWMKKyAgICAgIGxpbmtfYWxsX2RlcGxpYnNfRjc3PXllcworICAgICAgOzsKKworICAgIHN1bm9zNCopCisgICAgICBpZiB0ZXN0ICJ4JGhvc3RfdmVuZG9yIiA9IHhzZXF1ZW50OyB0aGVuCisJIyBVc2UgJENDIHRvIGxpbmsgdW5kZXIgc2VxdWVudCwgYmVjYXVzZSBpdCB0aHJvd3MgaW4gc29tZSBleHRyYSAubworCSMgZmlsZXMgdGhhdCBtYWtlIC5pbml0IGFuZCAuZmluaSBzZWN0aW9ucyB3b3JrLgorCWFyY2hpdmVfY21kc19GNzc9JyRDQyAtRyAke3dsfS1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBlbHNlCisJYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1hc3NlcnQgcHVyZS10ZXh0IC1Cc3RhdGljIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGZpCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nLUwkbGliZGlyJworICAgICAgaGFyZGNvZGVfZGlyZWN0X0Y3Nz15ZXMKKyAgICAgIGhhcmRjb2RlX21pbnVzX0xfRjc3PXllcworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9GNzc9bm8KKyAgICAgIDs7CisKKyAgICBzeXN2NCkKKyAgICAgIGNhc2UgJGhvc3RfdmVuZG9yIGluCisJc25pKQorCSAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgaGFyZGNvZGVfZGlyZWN0X0Y3Nz15ZXMgIyBpcyB0aGlzIHJlYWxseSB0cnVlPz8/CisJOzsKKwlzaWVtZW5zKQorCSAgIyMgTEQgaXMgbGQgaXQgbWFrZXMgYSBQTEFNTElCCisJICAjIyBDQyBqdXN0IG1ha2VzIGEgR3Jvc3NNb2R1bGUuCisJICBhcmNoaXZlX2NtZHNfRjc3PSckTEQgLUcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgcmVsb2FkX2NtZHNfRjc3PSckQ0MgLXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKwkgIGhhcmRjb2RlX2RpcmVjdF9GNzc9bm8KKyAgICAgICAgOzsKKwltb3Rvcm9sYSkKKwkgIGFyY2hpdmVfY21kc19GNzc9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgIGhhcmRjb2RlX2RpcmVjdF9GNzc9bm8gI01vdG9yb2xhIG1hbnVhbCBzYXlzIHllcywgYnV0IG15IHRlc3RzIHNheSB0aGV5IGxpZQorCTs7CisgICAgICBlc2FjCisgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz1ubworICAgICAgOzsKKworICAgIHN5c3Y0LjMqKQorICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9GNzc9bm8KKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19GNzc9Jy1CZXhwb3J0JworICAgICAgOzsKKworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KKwlhcmNoaXZlX2NtZHNfRjc3PSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9GNzc9bm8KKwlydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorCWhhcmRjb2RlX3J1bnBhdGhfdmFyPXllcworCWxkX3NobGlic19GNzc9eWVzCisgICAgICBmaQorICAgICAgOzsKKworICAgIHN5c3Y0KnV3MiogfCBzeXN2NU9wZW5VTklYKiB8IHN5c3Y1VW5peFdhcmU3LlswMV0uWzEwXSogfCB1bml4d2FyZTcqKQorICAgICAgbm9fdW5kZWZpbmVkX2ZsYWdfRjc3PScke3dsfS16LHRleHQnCisgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sY19GNzc9bm8KKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PW5vCisgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCWFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBlbHNlCisJYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1HICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKKyAgICAgICMgTm90ZTogV2UgY2FuIE5PVCB1c2UgLXogZGVmcyBhcyB3ZSBtaWdodCBkZXNpcmUsIGJlY2F1c2Ugd2UgZG8gbm90CisgICAgICAjIGxpbmsgd2l0aCAtbGMsIGFuZCB0aGF0IHdvdWxkIGNhdXNlIGFueSBzeW1ib2xzIHVzZWQgZnJvbSBsaWJjIHRvCisgICAgICAjIGFsd2F5cyBiZSB1bnJlc29sdmVkLCB3aGljaCBtZWFucyBqdXN0IGFib3V0IG5vIGxpYnJhcnkgd291bGQKKyAgICAgICMgZXZlciBsaW5rIGNvcnJlY3RseS4gIElmIHdlJ3JlIG5vdCB1c2luZyBHTlUgbGQgd2UgdXNlIC16IHRleHQKKyAgICAgICMgdGhvdWdoLCB3aGljaCBkb2VzIGNhdGNoIHNvbWUgYmFkIHN5bWJvbHMgYnV0IGlzbid0IGFzIGhlYXZ5LWhhbmRlZAorICAgICAgIyBhcyAteiBkZWZzLgorICAgICAgbm9fdW5kZWZpbmVkX2ZsYWdfRjc3PScke3dsfS16LHRleHQnCisgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19GNzc9JyR7d2x9LXosbm9kZWZzJworICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfRjc3PW5vCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz1ubworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9J2B0ZXN0IC16ICIkU0NPQUJTUEFUSCIgJiYgZWNobyAke3dsfS1SLCRsaWJkaXJgJworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9GNzc9JzonCisgICAgICBsaW5rX2FsbF9kZXBsaWJzX0Y3Nz15ZXMKKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19GNzc9JyR7d2x9LUJleHBvcnQnCisgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGVsc2UKKwlhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLUcgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBmaQorICAgICAgOzsKKworICAgIHV0czQqKQorICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9Jy1MJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PW5vCisgICAgICA7OworCisgICAgKikKKyAgICAgIGxkX3NobGlic19GNzc9bm8KKyAgICAgIDs7CisgICAgZXNhYworICBmaQorCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsZF9zaGxpYnNfRjc3IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRsZF9zaGxpYnNfRjc3IiA+JjY7IH0KK3Rlc3QgIiRsZF9zaGxpYnNfRjc3IiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KKworIworIyBEbyB3ZSBuZWVkIHRvIGV4cGxpY2l0bHkgbGluayBsaWJjPworIworY2FzZSAieCRhcmNoaXZlX2NtZHNfbmVlZF9sY19GNzciIGluCit4fHh5ZXMpCisgICMgQXNzdW1lIC1sYyBzaG91bGQgYmUgYWRkZWQKKyAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfRjc3PXllcworCisgIGlmIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIGNhc2UgJGFyY2hpdmVfY21kc19GNzcgaW4KKyAgICAqJ34nKikKKyAgICAgICMgRklYTUU6IHdlIG1heSBoYXZlIHRvIGRlYWwgd2l0aCBtdWx0aS1jb21tYW5kIHNlcXVlbmNlcy4KKyAgICAgIDs7CisgICAgJyRDQyAnKikKKyAgICAgICMgVGVzdCB3aGV0aGVyIHRoZSBjb21waWxlciBpbXBsaWNpdGx5IGxpbmtzIHdpdGggLWxjIHNpbmNlIG9uIHNvbWUKKyAgICAgICMgc3lzdGVtcywgLWxnY2MgaGFzIHRvIGNvbWUgYmVmb3JlIC1sYy4gSWYgZ2NjIGFscmVhZHkgcGFzc2VzIC1sYworICAgICAgIyB0byBsZCwgZG9uJ3QgYWRkIC1sYyBiZWZvcmUgLWxnY2MuCisgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW4iID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW4uLi4gJEVDSE9fQyIgPiY2OyB9CisgICAgICAkcm0gY29uZnRlc3QqCisgICAgICBwcmludGYgIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorCisgICAgICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gMj5jb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgICAgc29uYW1lPWNvbmZ0ZXN0CisgICAgICAgIGxpYj1jb25mdGVzdAorICAgICAgICBsaWJvYmpzPWNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgICAgICAgZGVwbGlicz0KKyAgICAgICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2xfRjc3CisJcGljX2ZsYWc9JGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3NworICAgICAgICBjb21waWxlcl9mbGFncz0tdgorICAgICAgICBsaW5rZXJfZmxhZ3M9LXYKKyAgICAgICAgdmVyc3RyaW5nPQorICAgICAgICBvdXRwdXRfb2JqZGlyPS4KKyAgICAgICAgbGlibmFtZT1jb25mdGVzdAorICAgICAgICBsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnPSRhbGxvd191bmRlZmluZWRfZmxhZ19GNzcKKyAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PQorICAgICAgICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhcmNoaXZlX2NtZHNfRjc3IDJcPlwmMSBcfCBncmVwIFwiIC1sYyBcIiBcPi9kZXYvbnVsbCAyXD5cJjFcIiIpID4mNQorICAoZXZhbCAkYXJjaGl2ZV9jbWRzX0Y3NyAyXD5cJjEgXHwgZ3JlcCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9CisgICAgICAgIHRoZW4KKwkgIGFyY2hpdmVfY21kc19uZWVkX2xjX0Y3Nz1ubworICAgICAgICBlbHNlCisJICBhcmNoaXZlX2NtZHNfbmVlZF9sY19GNzc9eWVzCisgICAgICAgIGZpCisgICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3Nz0kbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZworICAgICAgZWxzZQorICAgICAgICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKKyAgICAgIGZpCisgICAgICAkcm0gY29uZnRlc3QqCisgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhcmNoaXZlX2NtZHNfbmVlZF9sY19GNzciID4mNQorZWNobyAiJHtFQ0hPX1R9JGFyY2hpdmVfY21kc19uZWVkX2xjX0Y3NyIgPiY2OyB9CisgICAgICA7OworICAgIGVzYWMKKyAgZmkKKyAgOzsKK2VzYWMKKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzLi4uICRFQ0hPX0MiID4mNjsgfQorbGlicmFyeV9uYW1lc19zcGVjPQorbGlibmFtZV9zcGVjPSdsaWIkbmFtZScKK3NvbmFtZV9zcGVjPQorc2hyZXh0X2NtZHM9Ii5zbyIKK3Bvc3RpbnN0YWxsX2NtZHM9Citwb3N0dW5pbnN0YWxsX2NtZHM9CitmaW5pc2hfY21kcz0KK2ZpbmlzaF9ldmFsPQorc2hsaWJwYXRoX3Zhcj0KK3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD11bmtub3duCit2ZXJzaW9uX3R5cGU9bm9uZQorZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgorc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIiCitpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRDQyAtcHJpbnQtc2VhcmNoLWRpcnMgfCBncmVwICJebGlicmFyaWVzOiIgfCAkU0VEIC1lICJzL15saWJyYXJpZXM6Ly8iIC1lICJzLD0vLC8sZyJgCisgIGlmIGVjaG8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgZ3JlcCAnOycgPi9kZXYvbnVsbCA7IHRoZW4KKyAgICAjIGlmIHRoZSBwYXRoIGNvbnRhaW5zICI7IiB0aGVuIHdlIGFzc3VtZSBpdCB0byBiZSB0aGUgc2VwYXJhdG9yCisgICAgIyBvdGhlcndpc2UgZGVmYXVsdCB0byB0aGUgc3RhbmRhcmQgcGF0aCBzZXBhcmF0b3IgKGkuZS4gIjoiKSAtIGl0IGlzCisgICAgIyBhc3N1bWVkIHRoYXQgbm8gcGFydCBvZiBhIG5vcm1hbCBwYXRobmFtZSBjb250YWlucyAiOyIgYnV0IHRoYXQgc2hvdWxkCisgICAgIyBva2F5IGluIHRoZSByZWFsIHdvcmxkIHdoZXJlICI7IiBpbiBkaXJwYXRocyBpcyBpdHNlbGYgcHJvYmxlbWF0aWMuCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAorICBlbHNlCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorICBmaQorZWxzZQorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCitmaQorbmVlZF9saWJfcHJlZml4PXVua25vd24KK2hhcmRjb2RlX2ludG9fbGlicz1ubworCisjIHdoZW4geW91IHNldCBuZWVkX3ZlcnNpb24gdG8gbm8sIG1ha2Ugc3VyZSBpdCBkb2VzIG5vdCBjYXVzZSAtc2V0X3ZlcnNpb24KKyMgZmxhZ3MgdG8gYmUgbGVmdCB3aXRob3V0IGFyZ3VtZW50cworbmVlZF92ZXJzaW9uPXVua25vd24KKworY2FzZSAkaG9zdF9vcyBpbgorYWl4MyopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUuYScKKyAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICisKKyAgIyBBSVggMyBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyB3ZSBhcHBlbmQgYSBtYWpvciB2ZXJzaW9uIHRvIHRoZSBuYW1lLgorICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICA7OworCithaXg0KiB8IGFpeDUqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisgICAgIyBBSVggNSBzdXBwb3J0cyBJQTY0CisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgZWxzZQorICAgICMgV2l0aCBHQ0MgdXAgdG8gMi45NS54LCBjb2xsZWN0MiB3b3VsZCBjcmVhdGUgYW4gaW1wb3J0IGZpbGUKKyAgICAjIGZvciBkZXBlbmRlbmNlIGxpYnJhcmllcy4gIFRoZSBpbXBvcnQgZmlsZSB3b3VsZCBzdGFydCB3aXRoCisgICAgIyB0aGUgbGluZSBgIyEgLicuICBUaGlzIHdvdWxkIGNhdXNlIHRoZSBnZW5lcmF0ZWQgbGlicmFyeSB0bworICAgICMgZGVwZW5kIG9uIGAuJywgYWx3YXlzIGFuIGludmFsaWQgbGlicmFyeS4gIFRoaXMgd2FzIGZpeGVkIGluCisgICAgIyBkZXZlbG9wbWVudCBzbmFwc2hvdHMgb2YgR0NDIHByaW9yIHRvIDMuMC4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXg0IHwgYWl4NC5bMDFdIHwgYWl4NC5bMDFdLiopCisgICAgICBpZiB7IGVjaG8gJyNpZiBfX0dOVUNfXyA+IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gOTcpJworCSAgIGVjaG8gJyB5ZXMgJworCSAgIGVjaG8gJyNlbmRpZic7IH0gfCAke0NDfSAtRSAtIHwgZ3JlcCB5ZXMgPiAvZGV2L251bGw7IHRoZW4KKwk6CisgICAgICBlbHNlCisJY2FuX2J1aWxkX3NoYXJlZD1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgZXNhYworICAgICMgQUlYIChvbiBQb3dlciopIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIGN1cnJlbnRseSB3ZSBjYW4gbm90IGhhcmRjb2RlIGNvcnJlY3QKKyAgICAjIHNvbmFtZSBpbnRvIGV4ZWN1dGFibGUuIFByb2JhYmx5IHdlIGNhbiBhZGQgdmVyc2lvbmluZyBzdXBwb3J0IHRvCisgICAgIyBjb2xsZWN0Miwgc28gYWRkaXRpb25hbCBsaW5rcyBjYW4gYmUgdXNlZnVsIGluIGZ1dHVyZS4KKyAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKyAgICAgICMgSWYgdXNpbmcgcnVuIHRpbWUgbGlua2luZyAob24gQUlYIDQuMiBvciBsYXRlcikgdXNlIGxpYjxuYW1lPi5zbworICAgICAgIyBpbnN0ZWFkIG9mIGxpYjxuYW1lPi5hIHRvIGxldCBwZW9wbGUga25vdyB0aGF0IHRoZXNlIGFyZSBub3QKKyAgICAgICMgdHlwaWNhbCBBSVggc2hhcmVkIGxpYnJhcmllcy4KKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIGVsc2UKKyAgICAgICMgV2UgcHJlc2VydmUgLmEgYXMgZXh0ZW5zaW9uIGZvciBzaGFyZWQgbGlicmFyaWVzIHRocm91Z2ggQUlYNC4yCisgICAgICAjIGFuZCBsYXRlciB3aGVuIHdlIGFyZSBub3QgZG9pbmcgcnVuIHRpbWUgbGlua2luZy4KKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uYSAkbGlibmFtZS5hJworICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICBmaQorICAgIHNobGlicGF0aF92YXI9TElCUEFUSAorICBmaQorICA7OworCithbWlnYW9zKikKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5peGxpYnJhcnkgJGxpYm5hbWUuYScKKyAgIyBDcmVhdGUgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSBlbnRyaWVzIGluIC9zeXMvbGlicy4KKyAgZmluaXNoX2V2YWw9J2ZvciBsaWIgaW4gYGxzICRsaWJkaXIvKi5peGxpYnJhcnkgMj4vZGV2L251bGxgOyBkbyBsaWJuYW1lPWAkZWNobyAiWCRsaWIiIHwgJFhzZWQgLWUgJ1wnJ3MlXi4qL1woW14vXSpcKVwuaXhsaWJyYXJ5JCVcMSUnXCcnYDsgdGVzdCAkcm0gL3N5cy9saWJzLyR7bGlibmFtZX1faXhsaWJyYXJ5LmE7ICRzaG93ICJjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIjsgY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSB8fCBleGl0IDE7IGRvbmUnCisgIDs7CisKK2Jlb3MqKQorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCisgIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICisgIDs7CisKK2JzZGlbNDVdKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9YMTEvbGliIC91c3IvY29udHJpYi9saWIgL2xpYiAvdXNyL2xvY2FsL2xpYiIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9zaGxpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiIKKyAgIyB0aGUgZGVmYXVsdCBsZC5zby5jb25mIGFsc28gY29udGFpbnMgL3Vzci9jb250cmliL2xpYiBhbmQKKyAgIyAvdXNyL1gxMVI2L2xpYiAoL3Vzci9YMTEgaXMgYSBsaW5rIHRvIC91c3IvWDExUjYpLCBidXQgbGV0IHVzIGFsbG93CisgICMgbGlidG9vbCB0byBoYXJkLWNvZGUgdGhlc2UgaW50byBwcm9ncmFtcworICA7OworCitjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCisgIHZlcnNpb25fdHlwZT13aW5kb3dzCisgIHNocmV4dF9jbWRzPSIuZGxsIgorICBuZWVkX3ZlcnNpb249bm8KKyAgbmVlZF9saWJfcHJlZml4PW5vCisKKyAgY2FzZSAkR0NDLCRob3N0X29zIGluCisgIHllcyxjeWd3aW4qIHwgeWVzLG1pbmd3KiB8IHllcyxwdzMyKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJworICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KKyAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCR7YmFzZV9maWxlfSdcJydpO2VjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KKyAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgorICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lfgorICAgICAgY2htb2QgYSt4IFwkZGxkaXIvJGRsbmFtZScKKyAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgorICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KKyAgICAgICAkcm0gXCRkbHBhdGgnCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGN5Z3dpbiopCisgICAgICAjIEN5Z3dpbiBETExzIHVzZSAnY3lnJyBwcmVmaXggcmF0aGVyIHRoYW4gJ2xpYicKKyAgICAgIHNvbmFtZV9zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvY3lnLydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIgL2xpYi93MzJhcGkgL2xpYiAvdXNyL2xvY2FsL2xpYiIKKyAgICAgIDs7CisgICAgbWluZ3cqKQorICAgICAgIyBNaW5HVyBETExzIHVzZSB0cmFkaXRpb25hbCAnbGliJyBwcmVmaXgKKyAgICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJENDIC1wcmludC1zZWFyY2gtZGlycyB8IGdyZXAgIl5saWJyYXJpZXM6IiB8ICRTRUQgLWUgInMvXmxpYnJhcmllczovLyIgLWUgInMsPS8sLyxnImAKKyAgICAgIGlmIGVjaG8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgZ3JlcCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSCBwcmludGVkIGJ5CisgICAgICAgICMgbWluZ3cgZ2NjLCBidXQgd2UgYXJlIHJ1bm5pbmcgb24gQ3lnd2luLiBHY2MgcHJpbnRzIGl0cyBzZWFyY2gKKyAgICAgICAgIyBwYXRoIHdpdGggOyBzZXBhcmF0b3JzLCBhbmQgd2l0aCBkcml2ZSBsZXR0ZXJzLiBXZSBjYW4gaGFuZGxlIHRoZQorICAgICAgICAjIGRyaXZlIGxldHRlcnMgKGN5Z3dpbiBmaWxldXRpbHMgdW5kZXJzdGFuZHMgdGhlbSksIHNvIGxlYXZlIHRoZW0sCisgICAgICAgICMgZXNwZWNpYWxseSBhcyB3ZSBtaWdodCBwYXNzIGZpbGVzIGZvdW5kIHRoZXJlIHRvIGEgbWluZ3cgb2JqZHVtcCwKKyAgICAgICAgIyB3aGljaCB3b3VsZG4ndCB1bmRlcnN0YW5kIGEgY3lnd2luaWZpZWQgcGF0aC4gQWhoLgorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGVjaG8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCisgICAgICBlbHNlCisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKyAgICAgIGZpCisgICAgICA7OworICAgIHB3MzIqKQorICAgICAgIyBwdzMyIERMTHMgdXNlICdwdycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICA7OworICAgIGVzYWMKKyAgICA7OworCisgICopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fSAkbGlibmFtZS5saWInCisgICAgOzsKKyAgZXNhYworICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KKyAgc2hsaWJwYXRoX3Zhcj1QQVRICisgIDs7CisKK2RhcndpbiogfCByaGFwc29keSopCisgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkeWxkIgorICB2ZXJzaW9uX3R5cGU9ZGFyd2luCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7dmVyc3VmZml4fSRzaGFyZWRfZXh0ICR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCAke2xpYm5hbWV9JHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7bWFqb3J9JHNoYXJlZF9leHQnCisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgc2hsaWJwYXRoX3Zhcj1EWUxEX0xJQlJBUllfUEFUSAorICBzaHJleHRfY21kcz0nYHRlc3QgLiRtb2R1bGUgPSAueWVzICYmIGVjaG8gLnNvIHx8IGVjaG8gLmR5bGliYCcKKyAgIyBBcHBsZSdzIGdjYyBwcmludHMgJ2djYyAtcHJpbnQtc2VhcmNoLWRpcnMnIGRvZXNuJ3Qgb3BlcmF0ZSB0aGUgc2FtZS4KKyAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRDQyAtcHJpbnQtc2VhcmNoLWRpcnMgfCB0ciAiXG4iICIkUEFUSF9TRVBBUkFUT1IiIHwgc2VkIC1lICdzL2xpYnJhcmllczovQGxpYnJhcmllczovJyB8IHRyICJAIiAiXG4iIHwgZ3JlcCAiXmxpYnJhcmllczoiIHwgc2VkIC1lICJzL15saWJyYXJpZXM6Ly8iIC1lICJzLD0vLC8sZyIgLWUgInMsJFBBVEhfU0VQQVJBVE9SLCAsZyIgLWUgInMsLiosJiAvbGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliLGciYAorICBlbHNlCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvbGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliJworICBmaQorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9sb2NhbC9saWIgL2xpYiAvdXNyL2xpYicKKyAgOzsKKworZGd1eCopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgOzsKKworZnJlZWJzZDEqKQorICBkeW5hbWljX2xpbmtlcj1ubworICA7OworCitrZnJlZWJzZCotZ251KQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICBkeW5hbWljX2xpbmtlcj0nR05VIGxkLnNvJworICA7OworCitmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICMgRHJhZ29uRmx5IGRvZXMgbm90IGhhdmUgYW91dC4gIFdoZW4vaWYgdGhleSBpbXBsZW1lbnQgYSBuZXcKKyAgIyB2ZXJzaW9uaW5nIG1lY2hhbmlzbSwgYWRqdXN0IHRoaXMuCisgIGlmIHRlc3QgLXggL3Vzci9iaW4vb2JqZm9ybWF0OyB0aGVuCisgICAgb2JqZm9ybWF0PWAvdXNyL2Jpbi9vYmpmb3JtYXRgCisgIGVsc2UKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgZnJlZWJzZFsxMjNdKikgb2JqZm9ybWF0PWFvdXQgOzsKKyAgICAqKSBvYmpmb3JtYXQ9ZWxmIDs7CisgICAgZXNhYworICBmaQorICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC0kb2JqZm9ybWF0CisgIGNhc2UgJHZlcnNpb25fdHlwZSBpbgorICAgIGZyZWVic2QtZWxmKikKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgICAgbmVlZF92ZXJzaW9uPW5vCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIDs7CisgICAgZnJlZWJzZC0qKQorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCisgICAgICBuZWVkX3ZlcnNpb249eWVzCisgICAgICA7OworICBlc2FjCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgZnJlZWJzZDIqKQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICA7OworICBmcmVlYnNkMy5bMDFdKiB8IGZyZWVic2RlbGYzLlswMV0qKQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgOzsKKyAgZnJlZWJzZDMuWzItOV0qIHwgZnJlZWJzZGVsZjMuWzItOV0qIHwgXAorICBmcmVlYnNkNC5bMC01XSB8IGZyZWVic2RlbGY0LlswLTVdIHwgZnJlZWJzZDQuMS4xIHwgZnJlZWJzZGVsZjQuMS4xKQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICA7OworICBmcmVlYnNkKikgIyBmcm9tIDQuNiBvbgorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgOzsKKyAgZXNhYworICA7OworCitnbnUqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHttYWpvcn0gJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCisgICMgR2l2ZSBhIHNvbmFtZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBtYWpvciB2ZXJzaW9uIHNvIHRoYXQgZGxkLnNsIHJlZnVzZXMgdG8KKyAgIyBsaW5rIGFnYWluc3Qgb3RoZXIgdmVyc2lvbnMuCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGNhc2UgJGhvc3RfY3B1IGluCisgIGlhNjQqKQorICAgIHNocmV4dF9jbWRzPScuc28nCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc28iCisgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICBpZiB0ZXN0ICJYJEhQVVhfSUE2NF9NT0RFIiA9IFgzMjsgdGhlbgorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliIgorICAgIGVsc2UKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvaHB1eDY0IC91c3IvbG9jYWwvbGliL2hwdXg2NCIKKyAgICBmaQorICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKKyAgICA7OworICAgaHBwYSo2NCopCisgICAgIHNocmV4dF9jbWRzPScuc2wnCisgICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKKyAgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEggIyBIb3cgc2hvdWxkIHdlIGhhbmRsZSBTSExJQl9QQVRICisgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KKyAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvcGEyMF82NCAvdXNyL2Njcy9saWIvcGEyMF82NCIKKyAgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYworICAgICA7OworICAgKikKKyAgICBzaHJleHRfY21kcz0nLnNsJworICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCisgICAgc2hsaWJwYXRoX3Zhcj1TSExJQl9QQVRICisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vICMgK3MgaXMgcmVxdWlyZWQgdG8gZW5hYmxlIFNITElCX1BBVEgKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIDs7CisgIGVzYWMKKyAgIyBIUC1VWCBydW5zICpyZWFsbHkqIHNsb3dseSB1bmxlc3Mgc2hhcmVkIGxpYnJhcmllcyBhcmUgbW9kZSA1NTUuCisgIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDU1NSAkbGliJworICA7OworCitpbnRlcml4MyopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGR5bmFtaWNfbGlua2VyPSdJbnRlcml4IDMueCBsZC5zby4xIChQRSwgbGlrZSBFTEYpJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCitpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICBjYXNlICRob3N0X29zIGluCisgICAgbm9uc3RvcHV4KikgdmVyc2lvbl90eXBlPW5vbnN0b3B1eCA7OworICAgICopCisJaWYgdGVzdCAiJGx0X2N2X3Byb2dfZ251X2xkIiA9IHllczsgdGhlbgorCQl2ZXJzaW9uX3R5cGU9bGludXgKKwllbHNlCisJCXZlcnNpb25fdHlwZT1pcml4CisJZmkgOzsKKyAgZXNhYworICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBpcml4NSogfCBub25zdG9wdXgqKQorICAgIGxpYnN1ZmY9IHNobGlic3VmZj0KKyAgICA7OworICAqKQorICAgIGNhc2UgJExEIGluICMgbGlidG9vbC5tNCB3aWxsIGFkZCBvbmUgb2YgdGhlc2Ugc3dpdGNoZXMgdG8gTEQKKyAgICAqLTMyfCoiLTMyICJ8Ki1tZWxmMzJic21pcHwqIi1tZWxmMzJic21pcCAiKQorICAgICAgbGlic3VmZj0gc2hsaWJzdWZmPSBsaWJtYWdpYz0zMi1iaXQ7OworICAgICotbjMyfCoiLW4zMiAifCotbWVsZjMyYm1pcG4zMnwqIi1tZWxmMzJibWlwbjMyICIpCisgICAgICBsaWJzdWZmPTMyIHNobGlic3VmZj1OMzIgbGlibWFnaWM9TjMyOzsKKyAgICAqLTY0fCoiLTY0ICJ8Ki1tZWxmNjRibWlwfCoiLW1lbGY2NGJtaXAgIikKKyAgICAgIGxpYnN1ZmY9NjQgc2hsaWJzdWZmPTY0IGxpYm1hZ2ljPTY0LWJpdDs7CisgICAgKikgbGlic3VmZj0gc2hsaWJzdWZmPSBsaWJtYWdpYz1uZXZlci1tYXRjaDs7CisgICAgZXNhYworICAgIDs7CisgIGVzYWMKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZJHtzaGxpYnN1ZmZ9X1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IC91c3IvbG9jYWwvbGliJHtsaWJzdWZmfSIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJHtsaWJzdWZmfSAvbGliJHtsaWJzdWZmfSIKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCisjIE5vIHNoYXJlZCBsaWIgc3VwcG9ydCBmb3IgTGludXggb2xkbGQsIGFvdXQsIG9yIGNvZmYuCitsaW51eCpvbGRsZCogfCBsaW51eCphb3V0KiB8IGxpbnV4KmNvZmYqKQorICBkeW5hbWljX2xpbmtlcj1ubworICA7OworCisjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCitsaW51eCopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbiAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgIyBUaGlzIGltcGxpZXMgbm8gZmFzdF9pbnN0YWxsLCB3aGljaCBpcyB1bmFjY2VwdGFibGUuCisgICMgU29tZSByZXdvcmsgd2lsbCBiZSBuZWVkZWQgdG8gYWxsb3cgZm9yIGZhc3RfaW5zdGFsbAorICAjIGJlZm9yZSB0aGlzIGNhbiBiZSBlbmFibGVkLgorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisKKyAgIyBmaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nCisgIGxpYnN1ZmY9CisgIGNhc2UgIiRob3N0X2NwdSIgaW4KKyAgeDg2XzY0KnxzMzkweCp8cG93ZXJwYzY0KikKKyAgICBlY2hvICcjbGluZSAyODIwNSAiY29uZmlndXJlIicgPiBjb25mdGVzdC4kYWNfZXh0CisgICAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB0aGVuCisgICAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisgICAgICAqNjQtYml0KikKKyAgICAgICAgbGlic3VmZj02NAorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9saWIke2xpYnN1ZmZ9IC91c3IvbGliJHtsaWJzdWZmfSAvdXNyL2xvY2FsL2xpYiR7bGlic3VmZn0iCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgZmkKKyAgICBybSAtcmYgY29uZnRlc3QqCisgICAgOzsKKyAgZXNhYworCisgICMgQXBwZW5kIGxkLnNvLmNvbmYgY29udGVudHMgdG8gdGhlIHNlYXJjaCBwYXRoCisgIGlmIHRlc3QgLWYgL2V0Yy9sZC5zby5jb25mOyB0aGVuCisgICAgbHRfbGRfZXh0cmE9YGF3ayAnL15pbmNsdWRlIC8geyBzeXN0ZW0oc3ByaW50ZigiY2QgL2V0YzsgY2F0ICVzIDI+L2Rldi9udWxsIiwgXCQyKSk7IHNraXAgPSAxOyB9IHsgaWYgKCFza2lwKSBwcmludCBcJDA7IHNraXAgPSAwOyB9JyA8IC9ldGMvbGQuc28uY29uZiB8ICRTRUQgLWUgJ3MvXgkgKi8vO3MvIy4qLy87L15bXlwvXS9kO3MvWzosCV0vIC9nO3MvPVtePV0qJC8vO3MvPVtePSBdKiAvIC9nOy9eJC9kJyB8IHRyICdcbicgJyAnYAorICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliJHtsaWJzdWZmfSAvdXNyL2xpYiR7bGlic3VmZn0gJGx0X2xkX2V4dHJhIgorICBmaQorCisgICMgV2UgdXNlZCB0byB0ZXN0IGZvciAvbGliL2xkLnNvLjEgYW5kIGRpc2FibGUgc2hhcmVkIGxpYnJhcmllcyBvbgorICAjIHBvd2VycGMsIGJlY2F1c2UgTWtMaW51eCBvbmx5IHN1cHBvcnRlZCBzaGFyZWQgbGlicmFyaWVzIHdpdGggdGhlCisgICMgR05VIGR5bmFtaWMgbGlua2VyLiAgU2luY2UgdGhpcyB3YXMgYnJva2VuIHdpdGggY3Jvc3MgY29tcGlsZXJzLAorICAjIG1vc3QgcG93ZXJwYy1saW51eCBib3hlcyBzdXBwb3J0IGR5bmFtaWMgbGlua2luZyB0aGVzZSBkYXlzIGFuZAorICAjIHBlb3BsZSBjYW4gYWx3YXlzIC0tZGlzYWJsZS1zaGFyZWQsIHRoZSB0ZXN0IHdhcyByZW1vdmVkLCBhbmQgd2UKKyAgIyBhc3N1bWUgdGhlIEdOVS9MaW51eCBkeW5hbWljIGxpbmtlciBpcyBpbiB1c2UuCisgIGR5bmFtaWNfbGlua2VyPSdHTlUvTGludXggbGQuc28nCisgIDs7CisKK2tuZXRic2QqLWdudSkKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgZHluYW1pY19saW5rZXI9J0dOVSBsZC5zbycKKyAgOzsKKworbmV0YnNkKikKKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCisgICAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKKyAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIChhLm91dCkgbGQuc28nCisgIGVsc2UKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgZHluYW1pY19saW5rZXI9J05ldEJTRCBsZC5lbGZfc28nCisgIGZpCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCituZXdzb3M2KQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgOzsKKworbnRvLXFueCopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIDs7CisKK29wZW5ic2QqKQorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliIgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgIyBTb21lIG9sZGVyIHZlcnNpb25zIG9mIE9wZW5CU0QgKDMuMyBhdCBsZWFzdCkgKmRvKiBuZWVkIHZlcnNpb25lZCBsaWJzLgorICBjYXNlICRob3N0X29zIGluCisgICAgb3BlbmJzZDMuMyB8IG9wZW5ic2QzLjMuKikgbmVlZF92ZXJzaW9uPXllcyA7OworICAgICopICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRfdmVyc2lvbj1ubyAgOzsKKyAgZXNhYworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBvcGVuYnNkMi5bODldIHwgb3BlbmJzZDIuWzg5XS4qKQorCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworCTs7CisgICAgICAqKQorCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKwk7OworICAgICAgZXNhYworICBlbHNlCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBmaQorICA7OworCitvczIqKQorICBsaWJuYW1lX3NwZWM9JyRuYW1lJworICBzaHJleHRfY21kcz0iLmRsbCIKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9ICRsaWJuYW1lLmEnCisgIGR5bmFtaWNfbGlua2VyPSdPUy8yIGxkLmV4ZScKKyAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICisgIDs7CisKK29zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgdmVyc2lvbl90eXBlPW9zZgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3Ivc2hsaWIgL3Vzci9jY3MvbGliIC91c3IvbGliL2NtcGxycy9jYyAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiAvdmFyL3NobGliIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKKyAgOzsKKworc29sYXJpcyopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgIyBsZGQgY29tcGxhaW5zIHVubGVzcyBsaWJyYXJpZXMgYXJlIGV4ZWN1dGFibGUKKyAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgK3ggJGxpYicKKyAgOzsKKworc3Vub3M0KikKKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3Vzci9ldGMiIGxkY29uZmlnICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICAgIG5lZWRfbGliX3ByZWZpeD1ubworICBmaQorICBuZWVkX3ZlcnNpb249eWVzCisgIDs7CisKK3N5c3Y0IHwgc3lzdjQuMyopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKyAgICBzbmkpCisgICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1CbGFyZ2VkeW5zeW0nCisgICAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorICAgICAgOzsKKyAgICBzaWVtZW5zKQorICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICA7OworICAgIG1vdG9yb2xhKQorICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICBuZWVkX3ZlcnNpb249bm8KKyAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvbGliIC91c3IvbGliIC91c3IvY2NzL2xpYicKKyAgICAgIDs7CisgIGVzYWMKKyAgOzsKKworc3lzdjQqTVAqKQorICBpZiB0ZXN0IC1kIC91c3IvbmVjIDt0aGVuCisgICAgdmVyc2lvbl90eXBlPWxpbnV4CisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0uJHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0uJG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9LiRtYWpvcicKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBmaQorICA7OworCitzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKKyAgdmVyc2lvbl90eXBlPWZyZWVic2QtZWxmCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9sb2NhbC9saWIgL3Vzci9nbnUvbGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYiAvbGliJworICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBlbHNlCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2Njcy9saWIgL3Vzci9saWInCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIHNjbzMuMnY1KikKKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC9saWIiCisJOzsKKyAgICBlc2FjCisgIGZpCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xpYicKKyAgOzsKKwordXRzNCopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgOzsKKworKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKK2VzYWMKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGR5bmFtaWNfbGlua2VyIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRkeW5hbWljX2xpbmtlciIgPiY2OyB9Cit0ZXN0ICIkZHluYW1pY19saW5rZXIiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubworCit2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iUEFUSCAkc2hsaWJwYXRoX3ZhciAkcnVucGF0aF92YXIiCitpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIEdDQ19FWEVDX1BSRUZJWCBDT01QSUxFUl9QQVRIIExJQlJBUllfUEFUSCIKK2ZpCisKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGhvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zLi4uICRFQ0hPX0MiID4mNjsgfQoraGFyZGNvZGVfYWN0aW9uX0Y3Nz0KK2lmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3NyIgfHwgXAorICAgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyX0Y3NyIgfHwgXAorICAgdGVzdCAiWCRoYXJkY29kZV9hdXRvbWF0aWNfRjc3IiA9ICJYeWVzIiA7IHRoZW4KKworICAjIFdlIGNhbiBoYXJkY29kZSBub24tZXhpc3RhbnQgZGlyZWN0b3JpZXMuCisgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3RfRjc3IiAhPSBubyAmJgorICAgICAjIElmIHRoZSBvbmx5IG1lY2hhbmlzbSB0byBhdm9pZCBoYXJkY29kaW5nIGlzIHNobGlicGF0aF92YXIsIHdlCisgICAgICMgaGF2ZSB0byByZWxpbmssIG90aGVyd2lzZSB3ZSBtaWdodCBsaW5rIHdpdGggYW4gaW5zdGFsbGVkIGxpYnJhcnkKKyAgICAgIyB3aGVuIHdlIHNob3VsZCBiZSBsaW5raW5nIHdpdGggYSB5ZXQtdG8tYmUtaW5zdGFsbGVkIG9uZQorICAgICAjIyB0ZXN0ICIkX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCBGNzcpIiAhPSBubyAmJgorICAgICB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTF9GNzciICE9IG5vOyB0aGVuCisgICAgIyBMaW5raW5nIGFsd2F5cyBoYXJkY29kZXMgdGhlIHRlbXBvcmFyeSBsaWJyYXJ5IGRpcmVjdG9yeS4KKyAgICBoYXJkY29kZV9hY3Rpb25fRjc3PXJlbGluaworICBlbHNlCisgICAgIyBXZSBjYW4gbGluayB3aXRob3V0IGhhcmRjb2RpbmcsIGFuZCB3ZSBjYW4gaGFyZGNvZGUgbm9uZXhpc3RpbmcgZGlycy4KKyAgICBoYXJkY29kZV9hY3Rpb25fRjc3PWltbWVkaWF0ZQorICBmaQorZWxzZQorICAjIFdlIGNhbm5vdCBoYXJkY29kZSBhbnl0aGluZywgb3IgZWxzZSB3ZSBjYW4gb25seSBoYXJkY29kZSBleGlzdGluZworICAjIGRpcmVjdG9yaWVzLgorICBoYXJkY29kZV9hY3Rpb25fRjc3PXVuc3VwcG9ydGVkCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkaGFyZGNvZGVfYWN0aW9uX0Y3NyIgPiY1CitlY2hvICIke0VDSE9fVH0kaGFyZGNvZGVfYWN0aW9uX0Y3NyIgPiY2OyB9CisKK2lmIHRlc3QgIiRoYXJkY29kZV9hY3Rpb25fRjc3IiA9IHJlbGluazsgdGhlbgorICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQKKyAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubworZWxpZiB0ZXN0ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiA9IHllcyB8fAorICAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSBubzsgdGhlbgorICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBuZWNlc3NhcnkKKyAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1uZWVkbGVzcworZmkKKworCisjIFRoZSBlbHNlIGNsYXVzZSBzaG91bGQgb25seSBmaXJlIHdoZW4gYm9vdHN0cmFwcGluZyB0aGUKKyMgbGlidG9vbCBkaXN0cmlidXRpb24sIG90aGVyd2lzZSB5b3UgZm9yZ290IHRvIHNoaXAgbHRtYWluLnNoCisjIHdpdGggeW91ciBwYWNrYWdlLCBhbmQgeW91IHdpbGwgZ2V0IGNvbXBsYWludHMgdGhhdCB0aGVyZSBhcmUKKyMgbm8gcnVsZXMgdG8gZ2VuZXJhdGUgbHRtYWluLnNoLgoraWYgdGVzdCAtZiAiJGx0bWFpbiI7IHRoZW4KKyAgIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHdoaWNoIGFsbG93IG91ciBjb21tYW5kcyB0aHJvdWdoCisgICMgd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcy4KKyAgaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiA7IHRoZW4KKyAgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorICBmaQorICAjIE5vdyBxdW90ZSBhbGwgdGhlIHRoaW5ncyB0aGF0IG1heSBjb250YWluIG1ldGFjaGFyYWN0ZXJzIHdoaWxlIGJlaW5nCisgICMgY2FyZWZ1bCBub3QgdG8gb3ZlcnF1b3RlIHRoZSBBQ19TVUJTVGVkIHZhbHVlcy4gIFdlIHRha2UgY29waWVzIG9mIHRoZQorICAjIHZhcmlhYmxlcyBhbmQgcXVvdGUgdGhlIGNvcGllcyBmb3IgZ2VuZXJhdGlvbiBvZiB0aGUgbGlidG9vbCBzY3JpcHQuCisgIGZvciB2YXIgaW4gZWNobyBvbGRfQ0Mgb2xkX0NGTEFHUyBBUiBBUl9GTEFHUyBFR1JFUCBSQU5MSUIgTE5fUyBMVENDIExUQ0ZMQUdTIE5NIFwKKyAgICBTRUQgU0hFTEwgU1RSSVAgXAorICAgIGxpYm5hbWVfc3BlYyBsaWJyYXJ5X25hbWVzX3NwZWMgc29uYW1lX3NwZWMgZXh0cmFjdF9leHBzeW1zX2NtZHMgXAorICAgIG9sZF9zdHJpcGxpYiBzdHJpcGxpYiBmaWxlX21hZ2ljX2NtZCBmaW5pc2hfY21kcyBmaW5pc2hfZXZhbCBcCisgICAgZGVwbGlic19jaGVja19tZXRob2QgcmVsb2FkX2ZsYWcgcmVsb2FkX2NtZHMgbmVlZF9sb2NrcyBcCisgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCBcCisgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MgXAorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyBcCisgICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHMgb2xkX3Bvc3R1bmluc3RhbGxfY21kcyBcCisgICAgY29tcGlsZXJfRjc3IFwKKyAgICBDQ19GNzcgXAorICAgIExEX0Y3NyBcCisgICAgbHRfcHJvZ19jb21waWxlcl93bF9GNzcgXAorICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3NyBcCisgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3IFwKKyAgICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19GNzcgXAorICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19GNzcgXAorICAgIHRocmVhZF9zYWZlX2ZsYWdfc3BlY19GNzcgXAorICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0Y3NyBcCisgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19GNzcgXAorICAgIG9sZF9hcmNoaXZlX2NtZHNfRjc3IFwKKyAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX0Y3NyBcCisgICAgcHJlZGVwX29iamVjdHNfRjc3IFwKKyAgICBwb3N0ZGVwX29iamVjdHNfRjc3IFwKKyAgICBwcmVkZXBzX0Y3NyBcCisgICAgcG9zdGRlcHNfRjc3IFwKKyAgICBjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfRjc3IFwKKyAgICBhcmNoaXZlX2NtZHNfRjc3IFwKKyAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3NyBcCisgICAgcG9zdGluc3RhbGxfY21kc19GNzcgXAorICAgIHBvc3R1bmluc3RhbGxfY21kc19GNzcgXAorICAgIG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX0Y3NyBcCisgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3IFwKKyAgICBub191bmRlZmluZWRfZmxhZ19GNzcgXAorICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfRjc3IFwKKyAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3NyBcCisgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZF9GNzcgXAorICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfRjc3IFwKKyAgICBoYXJkY29kZV9hdXRvbWF0aWNfRjc3IFwKKyAgICBtb2R1bGVfY21kc19GNzcgXAorICAgIG1vZHVsZV9leHBzeW1fY21kc19GNzcgXAorICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0Y3NyBcCisgICAgZXhjbHVkZV9leHBzeW1zX0Y3NyBcCisgICAgaW5jbHVkZV9leHBzeW1zX0Y3NzsgZG8KKworICAgIGNhc2UgJHZhciBpbgorICAgIG9sZF9hcmNoaXZlX2NtZHNfRjc3IHwgXAorICAgIG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNfRjc3IHwgXAorICAgIGFyY2hpdmVfY21kc19GNzcgfCBcCisgICAgYXJjaGl2ZV9leHBzeW1fY21kc19GNzcgfCBcCisgICAgbW9kdWxlX2NtZHNfRjc3IHwgXAorICAgIG1vZHVsZV9leHBzeW1fY21kc19GNzcgfCBcCisgICAgb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNfRjc3IHwgXAorICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfRjc3IHwgXAorICAgIGV4dHJhY3RfZXhwc3ltc19jbWRzIHwgcmVsb2FkX2NtZHMgfCBmaW5pc2hfY21kcyB8IFwKKyAgICBwb3N0aW5zdGFsbF9jbWRzIHwgcG9zdHVuaW5zdGFsbF9jbWRzIHwgXAorICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzIHwgb2xkX3Bvc3R1bmluc3RhbGxfY21kcyB8IFwKKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgfCBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYykKKyAgICAgICMgRG91YmxlLXF1b3RlIGRvdWJsZS1ldmFsZWQgc3RyaW5ncy4KKyAgICAgIGV2YWwgImx0XyR2YXI9XFxcIlxgXCRlY2hvIFwiWFwkJHZhclwiIHwgXCRYc2VkIC1lIFwiXCRkb3VibGVfcXVvdGVfc3Vic3RcIiAtZSBcIlwkc2VkX3F1b3RlX3N1YnN0XCIgLWUgXCJcJGRlbGF5X3ZhcmlhYmxlX3N1YnN0XCJcYFxcXCIiCisgICAgICA7OworICAgICopCisgICAgICBldmFsICJsdF8kdmFyPVxcXCJcYFwkZWNobyBcIlhcJCR2YXJcIiB8IFwkWHNlZCAtZSBcIlwkc2VkX3F1b3RlX3N1YnN0XCJcYFxcXCIiCisgICAgICA7OworICAgIGVzYWMKKyAgZG9uZQorCisgIGNhc2UgJGx0X2VjaG8gaW4KKyAgKidcJDAgLS1mYWxsYmFjay1lY2hvIicpCisgICAgbHRfZWNobz1gJGVjaG8gIlgkbHRfZWNobyIgfCAkWHNlZCAtZSAncy9cXFxcXFxcJDAgLS1mYWxsYmFjay1lY2hvIiQvJDAgLS1mYWxsYmFjay1lY2hvIi8nYAorICAgIDs7CisgIGVzYWMKKworY2ZnZmlsZT0iJG9maWxlIgorCisgIGNhdCA8PF9fRU9GX18gPj4gIiRjZmdmaWxlIgorIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAkdGFnbmFtZQorCisjIExpYnRvb2wgd2FzIGNvbmZpZ3VyZWQgb24gaG9zdCBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWA6CisKKyMgU2hlbGwgdG8gdXNlIHdoZW4gaW52b2tpbmcgc2hlbGwgc2NyaXB0cy4KK1NIRUxMPSRsdF9TSEVMTAorCisjIFdoZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMuCitidWlsZF9saWJ0b29sX2xpYnM9JGVuYWJsZV9zaGFyZWQKKworIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzLgorYnVpbGRfb2xkX2xpYnM9JGVuYWJsZV9zdGF0aWMKKworIyBXaGV0aGVyIG9yIG5vdCB0byBhZGQgLWxjIGZvciBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzLgorYnVpbGRfbGlidG9vbF9uZWVkX2xjPSRhcmNoaXZlX2NtZHNfbmVlZF9sY19GNzcKKworIyBXaGV0aGVyIG9yIG5vdCB0byBkaXNhbGxvdyBzaGFyZWQgbGlicyB3aGVuIHJ1bnRpbWUgbGlicyBhcmUgc3RhdGljCithbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXM9JGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfRjc3CisKKyMgV2hldGhlciBvciBub3QgdG8gb3B0aW1pemUgZm9yIGZhc3QgaW5zdGFsbGF0aW9uLgorZmFzdF9pbnN0YWxsPSRlbmFibGVfZmFzdF9pbnN0YWxsCisKKyMgVGhlIGhvc3Qgc3lzdGVtLgoraG9zdF9hbGlhcz0kaG9zdF9hbGlhcworaG9zdD0kaG9zdAoraG9zdF9vcz0kaG9zdF9vcworCisjIFRoZSBidWlsZCBzeXN0ZW0uCitidWlsZF9hbGlhcz0kYnVpbGRfYWxpYXMKK2J1aWxkPSRidWlsZAorYnVpbGRfb3M9JGJ1aWxkX29zCisKKyMgQW4gZWNobyBwcm9ncmFtIHRoYXQgZG9lcyBub3QgaW50ZXJwcmV0IGJhY2tzbGFzaGVzLgorZWNobz0kbHRfZWNobworCisjIFRoZSBhcmNoaXZlci4KK0FSPSRsdF9BUgorQVJfRkxBR1M9JGx0X0FSX0ZMQUdTCisKKyMgQSBDIGNvbXBpbGVyLgorTFRDQz0kbHRfTFRDQworCisjIExUQ0MgY29tcGlsZXIgZmxhZ3MuCitMVENGTEFHUz0kbHRfTFRDRkxBR1MKKworIyBBIGxhbmd1YWdlLXNwZWNpZmljIGNvbXBpbGVyLgorQ0M9JGx0X2NvbXBpbGVyX0Y3NworCisjIElzIHRoZSBjb21waWxlciB0aGUgR05VIEMgY29tcGlsZXI/Cit3aXRoX2djYz0kR0NDX0Y3NworCisjIEFuIEVSRSBtYXRjaGVyLgorRUdSRVA9JGx0X0VHUkVQCisKKyMgVGhlIGxpbmtlciB1c2VkIHRvIGJ1aWxkIGxpYnJhcmllcy4KK0xEPSRsdF9MRF9GNzcKKworIyBXaGV0aGVyIHdlIG5lZWQgaGFyZCBvciBzb2Z0IGxpbmtzLgorTE5fUz0kbHRfTE5fUworCisjIEEgQlNELWNvbXBhdGlibGUgbm0gcHJvZ3JhbS4KK05NPSRsdF9OTQorCisjIEEgc3ltYm9sIHN0cmlwcGluZyBwcm9ncmFtCitTVFJJUD0kbHRfU1RSSVAKKworIyBVc2VkIHRvIGV4YW1pbmUgbGlicmFyaWVzIHdoZW4gZmlsZV9tYWdpY19jbWQgYmVnaW5zICJmaWxlIgorTUFHSUNfQ01EPSRNQUdJQ19DTUQKKworIyBVc2VkIG9uIGN5Z3dpbjogRExMIGNyZWF0aW9uIHByb2dyYW0uCitETExUT09MPSIkRExMVE9PTCIKKworIyBVc2VkIG9uIGN5Z3dpbjogb2JqZWN0IGR1bXBlci4KK09CSkRVTVA9IiRPQkpEVU1QIgorCisjIFVzZWQgb24gY3lnd2luOiBhc3NlbWJsZXIuCitBUz0iJEFTIgorCisjIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlcy4KK29iamRpcj0kb2JqZGlyCisKKyMgSG93IHRvIGNyZWF0ZSByZWxvYWRhYmxlIG9iamVjdCBmaWxlcy4KK3JlbG9hZF9mbGFnPSRsdF9yZWxvYWRfZmxhZworcmVsb2FkX2NtZHM9JGx0X3JlbG9hZF9jbWRzCisKKyMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KK3dsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsX0Y3NworCisjIE9iamVjdCBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIm8iKS4KK29iamV4dD0iJGFjX29iamV4dCIKKworIyBPbGQgYXJjaGl2ZSBzdWZmaXggKG5vcm1hbGx5ICJhIikuCitsaWJleHQ9IiRsaWJleHQiCisKKyMgU2hhcmVkIGxpYnJhcnkgc3VmZml4IChub3JtYWxseSAiLnNvIikuCitzaHJleHRfY21kcz0nJHNocmV4dF9jbWRzJworCisjIEV4ZWN1dGFibGUgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICIiKS4KK2V4ZWV4dD0iJGV4ZWV4dCIKKworIyBBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHMuCitwaWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9waWNfRjc3CitwaWNfbW9kZT0kcGljX21vZGUKKworIyBXaGF0IGlzIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIGNvbW1hbmQ/CittYXhfY21kX2xlbj0kbHRfY3Zfc3lzX21heF9jbWRfbGVuCisKKyMgRG9lcyBjb21waWxlciBzaW11bHRhbmVvdXNseSBzdXBwb3J0IC1jIGFuZCAtbyBvcHRpb25zPworY29tcGlsZXJfY19vPSRsdF9sdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19GNzcKKworIyBNdXN0IHdlIGxvY2sgZmlsZXMgd2hlbiBkb2luZyBjb21waWxhdGlvbj8KK25lZWRfbG9ja3M9JGx0X25lZWRfbG9ja3MKKworIyBEbyB3ZSBuZWVkIHRoZSBsaWIgcHJlZml4IGZvciBtb2R1bGVzPworbmVlZF9saWJfcHJlZml4PSRuZWVkX2xpYl9wcmVmaXgKKworIyBEbyB3ZSBuZWVkIGEgdmVyc2lvbiBmb3IgbGlicmFyaWVzPworbmVlZF92ZXJzaW9uPSRuZWVkX3ZlcnNpb24KKworIyBXaGV0aGVyIGRsb3BlbiBpcyBzdXBwb3J0ZWQuCitkbG9wZW5fc3VwcG9ydD0kZW5hYmxlX2Rsb3BlbgorCisjIFdoZXRoZXIgZGxvcGVuIG9mIHByb2dyYW1zIGlzIHN1cHBvcnRlZC4KK2Rsb3Blbl9zZWxmPSRlbmFibGVfZGxvcGVuX3NlbGYKKworIyBXaGV0aGVyIGRsb3BlbiBvZiBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtcyBpcyBzdXBwb3J0ZWQuCitkbG9wZW5fc2VsZl9zdGF0aWM9JGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWMKKworIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nLgorbGlua19zdGF0aWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3CisKKyMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4KK25vX2J1aWx0aW5fZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfRjc3CisKKyMgQ29tcGlsZXIgZmxhZyB0byBhbGxvdyByZWZsZXhpdmUgZGxvcGVucy4KK2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0kbHRfZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0Y3NworCisjIENvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgc2hhcmVkIG9iamVjdHMgZGlyZWN0bHkgZnJvbSBhcmNoaXZlcy4KK3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSRsdF93aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19GNzcKKworIyBDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHRocmVhZC1zYWZlIG9iamVjdHMuCit0aHJlYWRfc2FmZV9mbGFnX3NwZWM9JGx0X3RocmVhZF9zYWZlX2ZsYWdfc3BlY19GNzcKKworIyBMaWJyYXJ5IHZlcnNpb25pbmcgdHlwZS4KK3ZlcnNpb25fdHlwZT0kdmVyc2lvbl90eXBlCisKKyMgRm9ybWF0IG9mIGxpYnJhcnkgbmFtZSBwcmVmaXguCitsaWJuYW1lX3NwZWM9JGx0X2xpYm5hbWVfc3BlYworCisjIExpc3Qgb2YgYXJjaGl2ZSBuYW1lcy4gIEZpcnN0IG5hbWUgaXMgdGhlIHJlYWwgb25lLCB0aGUgcmVzdCBhcmUgbGlua3MuCisjIFRoZSBsYXN0IG5hbWUgaXMgdGhlIG9uZSB0aGF0IHRoZSBsaW5rZXIgZmluZHMgd2l0aCAtbE5BTUUuCitsaWJyYXJ5X25hbWVzX3NwZWM9JGx0X2xpYnJhcnlfbmFtZXNfc3BlYworCisjIFRoZSBjb2RlZCBuYW1lIG9mIHRoZSBsaWJyYXJ5LCBpZiBkaWZmZXJlbnQgZnJvbSB0aGUgcmVhbCBuYW1lLgorc29uYW1lX3NwZWM9JGx0X3NvbmFtZV9zcGVjCisKKyMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhbmQgaW5zdGFsbCBhbiBvbGQtc3R5bGUgYXJjaGl2ZS4KK1JBTkxJQj0kbHRfUkFOTElCCitvbGRfYXJjaGl2ZV9jbWRzPSRsdF9vbGRfYXJjaGl2ZV9jbWRzX0Y3Nworb2xkX3Bvc3RpbnN0YWxsX2NtZHM9JGx0X29sZF9wb3N0aW5zdGFsbF9jbWRzCitvbGRfcG9zdHVuaW5zdGFsbF9jbWRzPSRsdF9vbGRfcG9zdHVuaW5zdGFsbF9jbWRzCisKKyMgQ3JlYXRlIGFuIG9sZC1zdHlsZSBhcmNoaXZlIGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KK29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9JGx0X29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNfRjc3CisKKyMgQ3JlYXRlIGEgdGVtcG9yYXJ5IG9sZC1zdHlsZSBhcmNoaXZlIHRvIGxpbmsgaW5zdGVhZCBvZiBhIHNoYXJlZCBhcmNoaXZlLgorb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHM9JGx0X29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX0Y3NworCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW5kIGluc3RhbGwgYSBzaGFyZWQgYXJjaGl2ZS4KK2FyY2hpdmVfY21kcz0kbHRfYXJjaGl2ZV9jbWRzX0Y3NworYXJjaGl2ZV9leHBzeW1fY21kcz0kbHRfYXJjaGl2ZV9leHBzeW1fY21kc19GNzcKK3Bvc3RpbnN0YWxsX2NtZHM9JGx0X3Bvc3RpbnN0YWxsX2NtZHMKK3Bvc3R1bmluc3RhbGxfY21kcz0kbHRfcG9zdHVuaW5zdGFsbF9jbWRzCisKKyMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIGxvYWRhYmxlIG1vZHVsZSAoYXNzdW1lZCBzYW1lIGFzIGFib3ZlIGlmIGVtcHR5KQorbW9kdWxlX2NtZHM9JGx0X21vZHVsZV9jbWRzX0Y3NworbW9kdWxlX2V4cHN5bV9jbWRzPSRsdF9tb2R1bGVfZXhwc3ltX2NtZHNfRjc3CisKKyMgQ29tbWFuZHMgdG8gc3RyaXAgbGlicmFyaWVzLgorb2xkX3N0cmlwbGliPSRsdF9vbGRfc3RyaXBsaWIKK3N0cmlwbGliPSRsdF9zdHJpcGxpYgorCisjIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCisjIHNoYXJlZCBsaWJyYXJ5LgorcHJlZGVwX29iamVjdHM9JGx0X3ByZWRlcF9vYmplY3RzX0Y3NworCisjIERlcGVuZGVuY2llcyB0byBwbGFjZSBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKKyMgc2hhcmVkIGxpYnJhcnkuCitwb3N0ZGVwX29iamVjdHM9JGx0X3Bvc3RkZXBfb2JqZWN0c19GNzcKKworIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQorIyBzaGFyZWQgbGlicmFyeS4KK3ByZWRlcHM9JGx0X3ByZWRlcHNfRjc3CisKKyMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGFmdGVyIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQorIyBzaGFyZWQgbGlicmFyeS4KK3Bvc3RkZXBzPSRsdF9wb3N0ZGVwc19GNzcKKworIyBUaGUgbGlicmFyeSBzZWFyY2ggcGF0aCB1c2VkIGludGVybmFsbHkgYnkgdGhlIGNvbXBpbGVyIHdoZW4gbGlua2luZworIyBhIHNoYXJlZCBsaWJyYXJ5LgorY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoPSRsdF9jb21waWxlcl9saWJfc2VhcmNoX3BhdGhfRjc3CisKKyMgTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHMuCitkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfZGVwbGlic19jaGVja19tZXRob2QKKworIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID09IGZpbGVfbWFnaWMuCitmaWxlX21hZ2ljX2NtZD0kbHRfZmlsZV9tYWdpY19jbWQKKworIyBGbGFnIHRoYXQgYWxsb3dzIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB1bmRlZmluZWQgc3ltYm9scyB0byBiZSBidWlsdC4KK2FsbG93X3VuZGVmaW5lZF9mbGFnPSRsdF9hbGxvd191bmRlZmluZWRfZmxhZ19GNzcKKworIyBGbGFnIHRoYXQgZm9yY2VzIG5vIHVuZGVmaW5lZCBzeW1ib2xzLgorbm9fdW5kZWZpbmVkX2ZsYWc9JGx0X25vX3VuZGVmaW5lZF9mbGFnX0Y3NworCisjIENvbW1hbmRzIHVzZWQgdG8gZmluaXNoIGEgbGlidG9vbCBsaWJyYXJ5IGluc3RhbGxhdGlvbiBpbiBhIGRpcmVjdG9yeS4KK2ZpbmlzaF9jbWRzPSRsdF9maW5pc2hfY21kcworCisjIFNhbWUgYXMgYWJvdmUsIGJ1dCBhIHNpbmdsZSBzY3JpcHQgZnJhZ21lbnQgdG8gYmUgZXZhbGVkIGJ1dCBub3Qgc2hvd24uCitmaW5pc2hfZXZhbD0kbHRfZmluaXNoX2V2YWwKKworIyBUYWtlIHRoZSBvdXRwdXQgb2Ygbm0gYW5kIHByb2R1Y2UgYSBsaXN0aW5nIG9mIHJhdyBzeW1ib2xzIGFuZCBDIG5hbWVzLgorZ2xvYmFsX3N5bWJvbF9waXBlPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlCisKKyMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbgorZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wKKworIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIKK2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzCisKKyMgVGhpcyBpcyB0aGUgc2hhcmVkIGxpYnJhcnkgcnVudGltZSBwYXRoIHZhcmlhYmxlLgorcnVucGF0aF92YXI9JHJ1bnBhdGhfdmFyCisKKyMgVGhpcyBpcyB0aGUgc2hhcmVkIGxpYnJhcnkgcGF0aCB2YXJpYWJsZS4KK3NobGlicGF0aF92YXI9JHNobGlicGF0aF92YXIKKworIyBJcyBzaGxpYnBhdGggc2VhcmNoZWQgYmVmb3JlIHRoZSBoYXJkLWNvZGVkIGxpYnJhcnkgc2VhcmNoIHBhdGg/CitzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9JHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aAorCisjIEhvdyB0byBoYXJkY29kZSBhIHNoYXJlZCBsaWJyYXJ5IHBhdGggaW50byBhbiBleGVjdXRhYmxlLgoraGFyZGNvZGVfYWN0aW9uPSRoYXJkY29kZV9hY3Rpb25fRjc3CisKKyMgV2hldGhlciB3ZSBzaG91bGQgaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIGxpYnJhcmllcy4KK2hhcmRjb2RlX2ludG9fbGlicz0kaGFyZGNvZGVfaW50b19saWJzCisKKyMgRmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgorIyBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMgbm90IGV4aXN0LgoraGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0kbHRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzcKKworIyBJZiBsZCBpcyB1c2VkIHdoZW4gbGlua2luZywgZmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvCisjIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLiBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMKKyMgbm90IGV4aXN0LgoraGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0kbHRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZF9GNzcKKworIyBXaGV0aGVyIHdlIG5lZWQgYSBzaW5nbGUgLXJwYXRoIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudC4KK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JGx0X2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfRjc3CisKKyMgU2V0IHRvIHllcyBpZiB1c2luZyBESVIvbGliTkFNRSR7c2hhcmVkX2V4dH0gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQorIyByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfZGlyZWN0PSRoYXJkY29kZV9kaXJlY3RfRjc3CisKKyMgU2V0IHRvIHllcyBpZiB1c2luZyB0aGUgLUxESVIgZmxhZyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCisjIHJlc3VsdGluZyBiaW5hcnkuCitoYXJkY29kZV9taW51c19MPSRoYXJkY29kZV9taW51c19MX0Y3NworCisjIFNldCB0byB5ZXMgaWYgdXNpbmcgU0hMSUJQQVRIX1ZBUj1ESVIgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvCisjIHRoZSByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0kaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9GNzcKKworIyBTZXQgdG8geWVzIGlmIGJ1aWxkaW5nIGEgc2hhcmVkIGxpYnJhcnkgYXV0b21hdGljYWxseSBoYXJkY29kZXMgRElSIGludG8gdGhlIGxpYnJhcnkKKyMgYW5kIGFsbCBzdWJzZXF1ZW50IGxpYnJhcmllcyBhbmQgZXhlY3V0YWJsZXMgbGlua2VkIGFnYWluc3QgaXQuCitoYXJkY29kZV9hdXRvbWF0aWM9JGhhcmRjb2RlX2F1dG9tYXRpY19GNzcKKworIyBWYXJpYWJsZXMgd2hvc2UgdmFsdWVzIHNob3VsZCBiZSBzYXZlZCBpbiBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0cyBhbmQKKyMgcmVzdG9yZWQgYXQgcmVsaW5rIHRpbWUuCit2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIgorCisjIFdoZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllcy4KK2xpbmtfYWxsX2RlcGxpYnM9JGxpbmtfYWxsX2RlcGxpYnNfRjc3CisKKyMgQ29tcGlsZS10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzCitzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9JGx0X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYworCisjIFJ1bi10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzCitzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kbHRfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMKKworIyBGaXggdGhlIHNoZWxsIHZhcmlhYmxlIFwkc3JjZmlsZSBmb3IgdGhlIGNvbXBpbGVyLgorZml4X3NyY2ZpbGVfcGF0aD0iJGZpeF9zcmNmaWxlX3BhdGhfRjc3IgorCisjIFNldCB0byB5ZXMgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCithbHdheXNfZXhwb3J0X3N5bWJvbHM9JGFsd2F5c19leHBvcnRfc3ltYm9sc19GNzcKKworIyBUaGUgY29tbWFuZHMgdG8gbGlzdCBleHBvcnRlZCBzeW1ib2xzLgorZXhwb3J0X3N5bWJvbHNfY21kcz0kbHRfZXhwb3J0X3N5bWJvbHNfY21kc19GNzcKKworIyBUaGUgY29tbWFuZHMgdG8gZXh0cmFjdCB0aGUgZXhwb3J0ZWQgc3ltYm9sIGxpc3QgZnJvbSBhIHNoYXJlZCBhcmNoaXZlLgorZXh0cmFjdF9leHBzeW1zX2NtZHM9JGx0X2V4dHJhY3RfZXhwc3ltc19jbWRzCisKKyMgU3ltYm9scyB0aGF0IHNob3VsZCBub3QgYmUgbGlzdGVkIGluIHRoZSBwcmVsb2FkZWQgc3ltYm9scy4KK2V4Y2x1ZGVfZXhwc3ltcz0kbHRfZXhjbHVkZV9leHBzeW1zX0Y3NworCisjIFN5bWJvbHMgdGhhdCBtdXN0IGFsd2F5cyBiZSBleHBvcnRlZC4KK2luY2x1ZGVfZXhwc3ltcz0kbHRfaW5jbHVkZV9leHBzeW1zX0Y3NworCisjICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiAkdGFnbmFtZQorCitfX0VPRl9fCisKKworZWxzZQorICAjIElmIHRoZXJlIGlzIG5vIE1ha2VmaWxlIHlldCwgd2UgcmVseSBvbiBhIG1ha2UgcnVsZSB0byBleGVjdXRlCisgICMgYGNvbmZpZy5zdGF0dXMgLS1yZWNoZWNrJyB0byByZXJ1biB0aGVzZSB0ZXN0cyBhbmQgY3JlYXRlIHRoZQorICAjIGxpYnRvb2wgc2NyaXB0IHRoZW4uCisgIGx0bWFpbl9pbj1gZWNobyAkbHRtYWluIHwgc2VkIC1lICdzL1wuc2gkLy5pbi8nYAorICBpZiB0ZXN0IC1mICIkbHRtYWluX2luIjsgdGhlbgorICAgIHRlc3QgLWYgTWFrZWZpbGUgJiYgbWFrZSAiJGx0bWFpbiIKKyAgZmkKK2ZpCisKKworYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCitDQz0iJGx0X3NhdmVfQ0MiCisKKwllbHNlCisJICB0YWduYW1lPSIiCisJZmkKKwk7OworCisgICAgICBHQ0opCisJaWYgdGVzdCAtbiAiJEdDSiIgJiYgdGVzdCAiWCRHQ0oiICE9ICJYbm8iOyB0aGVuCisKKworIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIEphdmEgdGVzdCBzb3VyY2VzLgorYWNfZXh0PWphdmEKKworIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIEphdmEgdGVzdCBzb3VyY2VzLgorb2JqZXh0PW8KK29iamV4dF9HQ0o9JG9iamV4dAorCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJjbGFzcyBmb28ge31cbiIKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKK2x0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0ncHVibGljIGNsYXNzIGNvbmZ0ZXN0IHsgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJndikge307IH1cbicKKworIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorCisjIElmIG5vIEMgY29tcGlsZXIgd2FzIHNwZWNpZmllZCwgdXNlIENDLgorTFRDQz0ke0xUQ0MtIiRDQyJ9CisKKyMgSWYgbm8gQyBjb21waWxlciBmbGFncyB3ZXJlIHNwZWNpZmllZCwgdXNlIENGTEFHUy4KK0xUQ0ZMQUdTPSR7TFRDRkxBR1MtIiRDRkxBR1MifQorCisjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorY29tcGlsZXI9JENDCisKKworIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKK2FjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorcHJpbnRmICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAorZXZhbCAiJGFjX2NvbXBpbGUiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCitfbHRfY29tcGlsZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCiskcm0gY29uZnRlc3QqCisKK2FjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorcHJpbnRmICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAorZXZhbCAiJGFjX2xpbmsiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCitfbHRfbGlua2VyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAorJHJtIGNvbmZ0ZXN0KgorCisKKyMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCitsdF9zYXZlX0NDPSIkQ0MiCitDQz0ke0dDSi0iZ2NqIn0KK2NvbXBpbGVyPSRDQworY29tcGlsZXJfR0NKPSRDQworZm9yIGNjX3RlbXAgaW4gJGNvbXBpbGVyIiI7IGRvCisgIGNhc2UgJGNjX3RlbXAgaW4KKyAgICBjb21waWxlIHwgKltcXC9dY29tcGlsZSB8IGNjYWNoZSB8ICpbXFwvXWNjYWNoZSApIDs7CisgICAgZGlzdGNjIHwgKltcXC9dZGlzdGNjIHwgcHVyaWZ5IHwgKltcXC9dcHVyaWZ5ICkgOzsKKyAgICBcLSopIDs7CisgICAgKikgYnJlYWs7OworICBlc2FjCitkb25lCitjY19iYXNlbmFtZT1gJGVjaG8gIlgkY2NfdGVtcCIgfCAkWHNlZCAtZSAncyUuKi8lJScgLWUgInMlXiRob3N0X2FsaWFzLSUlImAKKworCisjIEdDSiBkaWQgbm90IGV4aXN0IGF0IHRoZSB0aW1lIEdDQyBkaWRuJ3QgaW1wbGljaXRseSBsaW5rIGxpYmMgaW4uCithcmNoaXZlX2NtZHNfbmVlZF9sY19HQ0o9bm8KKworb2xkX2FyY2hpdmVfY21kc19HQ0o9JG9sZF9hcmNoaXZlX2NtZHMKKworCitsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19HQ0o9CisKK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0dDSj0nIC1mbm8tYnVpbHRpbicKKworCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucz1ubworICBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgIHByaW50ZiAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgICBsdF9jb21waWxlcl9mbGFnPSItZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zIgorICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKKyAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCisgICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCisgICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgorICAgIyBUaGUgb3B0aW9uIGlzIHJlZmVyZW5jZWQgdmlhIGEgdmFyaWFibGUgdG8gYXZvaWQgY29uZnVzaW5nIHNlZC4KKyAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAorICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAorICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZToyODk3OTogJGx0X2NvbXBpbGVcIiIgPiY1KQorICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKKyAgIGFjX3N0YXR1cz0kPworICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZToyODk4MzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zICIkYWNfb3V0ZmlsZSI7IHRoZW4KKyAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzIG90aGVyIHRoYW4gdGhlIHVzdWFsIG91dHB1dC4KKyAgICAgJGVjaG8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPmNvbmZ0ZXN0LmV4cAorICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKKyAgICAgaWYgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVyMiB8fCBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zPXllcworICAgICBmaQorICAgZmkKKyAgICRybSBjb25mdGVzdCoKKworZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucyIgPiY2OyB9CisKK2lmIHRlc3QgeCIkbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMiID0geHllczsgdGhlbgorICAgIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0dDSj0iJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0dDSiAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zIgorZWxzZQorICAgIDoKK2ZpCisKK2ZpCisKK2x0X3Byb2dfY29tcGlsZXJfd2xfR0NKPQorbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPQorbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPQorCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICRFQ0hPX0MiID4mNjsgfQorCisgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgbHRfcHJvZ19jb21waWxlcl93bF9HQ0o9Jy1XbCwnCisgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPSctc3RhdGljJworCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4KikKKyAgICAgICMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1Cc3RhdGljJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhbWlnYW9zKikKKyAgICAgICMgRklYTUU6IHdlIG5lZWQgYXQgbGVhc3QgNjgwMjAgY29kZSB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLCBidXQKKyAgICAgICMgYWRkaW5nIHRoZSBgLW02ODAyMCcgZmxhZyB0byBHQ0MgcHJldmVudHMgYnVpbGRpbmcgYW55dGhpbmcgYmV0dGVyLAorICAgICAgIyBsaWtlIGAtbTY4MDQwJy4KKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0nLW02ODAyMCAtcmVzaWRlbnQzMiAtbWFsd2F5cy1yZXN0b3JlLWE0JworICAgICAgOzsKKworICAgIGJlb3MqIHwgY3lnd2luKiB8IGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCogfCBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgT1Nlcy4KKyAgICAgIDs7CisKKyAgICBtaW5ndyogfCBwdzMyKiB8IG9zMiopCisgICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisgICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSctRERMTF9FWFBPUlQnCisgICAgICA7OworCisgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KKyAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0nLWZuby1jb21tb24nCisgICAgICA7OworCisgICAgaW50ZXJpeDMqKQorICAgICAgIyBJbnRlcml4IDMueCBnY2MgLWZwaWMvLWZQSUMgb3B0aW9ucyBnZW5lcmF0ZSBicm9rZW4gY29kZS4KKyAgICAgICMgSW5zdGVhZCwgd2UgcmVsb2NhdGUgc2hhcmVkIGxpYnJhcmllcyBhdCBydW50aW1lLgorICAgICAgOzsKKworICAgIG1zZG9zZGpncHAqKQorICAgICAgIyBKdXN0IGJlY2F1c2Ugd2UgdXNlIEdDQyBkb2Vzbid0IG1lYW4gd2Ugc3VkZGVubHkgZ2V0IHNoYXJlZCBsaWJyYXJpZXMKKyAgICAgICMgb24gc3lzdGVtcyB0aGF0IGRvbid0IHN1cHBvcnQgdGhlbS4KKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZF9HQ0o9bm8KKyAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KKyAgICAgIDs7CisKKyAgICBzeXN2NCpNUCopCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisJbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPS1LY29uZm9ybV9waWMKKyAgICAgIGZpCisgICAgICA7OworCisgICAgaHB1eCopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSUE2NCBIUC1VWCBhbmQgNjQtYml0IEhQLVVYLCBidXQKKyAgICAgICMgbm90IGZvciBQQSBIUC1VWC4KKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBocHBhKjY0KnxpYTY0KikKKwkjICtaIHRoZSBkZWZhdWx0CisJOzsKKyAgICAgICopCisJbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSctZlBJQycKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgICopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9Jy1mUElDJworICAgICAgOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICAjIFBPUlRNRSBDaGVjayBmb3IgZmxhZyB0byBwYXNzIGxpbmtlciBmbGFncyB0aHJvdWdoIHRoZSBzeXN0ZW0gY29tcGlsZXIuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeCopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0dDSj0nLVdsLCcKKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1Cc3RhdGljJworICAgICAgZWxzZQorCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0dDSj0nLWJuc28gLWJJOi9saWIvc3lzY2FsbHMuZXhwJworICAgICAgZmkKKyAgICAgIDs7CisgICAgICBkYXJ3aW4qKQorICAgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCisgICAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKKyAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgeGxjKikKKyAgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0nLXFub2NvbW1vbicKKyAgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfR0NKPSctV2wsJworICAgICAgICAgOzsKKyAgICAgICBlc2FjCisgICAgICAgOzsKKworICAgIG1pbmd3KiB8IHB3MzIqIHwgb3MyKikKKyAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKKyAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9Jy1ERExMX0VYUE9SVCcKKyAgICAgIDs7CisKKyAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfR0NKPSctV2wsJworICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIElBNjQgSFAtVVggYW5kIDY0LWJpdCBIUC1VWCwgYnV0CisgICAgICAjIG5vdCBmb3IgUEEgSFAtVVguCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgaHBwYSo2NCp8aWE2NCopCisJIyArWiB0aGUgZGVmYXVsdAorCTs7CisgICAgICAqKQorCWx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0nK1onCisJOzsKKyAgICAgIGVzYWMKKyAgICAgICMgSXMgdGhlcmUgYSBiZXR0ZXIgbHRfcHJvZ19jb21waWxlcl9zdGF0aWMgdGhhdCB3b3JrcyB3aXRoIHRoZSBidW5kbGVkIENDPworICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPScke3dsfS1hICR7d2x9YXJjaGl2ZScKKyAgICAgIDs7CisKKyAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9HQ0o9Jy1XbCwnCisgICAgICAjIFBJQyAod2l0aCAtS1BJQykgaXMgdGhlIGRlZmF1bHQuCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1ub25fc2hhcmVkJworICAgICAgOzsKKworICAgIG5ld3NvczYpCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9Jy1LUElDJworICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICBsaW51eCopCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgaWNjKiB8IGVjYyopCisJbHRfcHJvZ19jb21waWxlcl93bF9HQ0o9Jy1XbCwnCisJbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSctS1BJQycKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1zdGF0aWMnCisgICAgICAgIDs7CisgICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KikKKyAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBjb21waWxlcnMgKCpub3QqIHRoZSBQZW50aXVtIGdjYyBjb21waWxlciwKKwkjIHdoaWNoIGxvb2tzIHRvIGJlIGEgZGVhZCBwcm9qZWN0KQorCWx0X3Byb2dfY29tcGlsZXJfd2xfR0NKPSctV2wsJworCWx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0nLWZwaWMnCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPSctQnN0YXRpYycKKyAgICAgICAgOzsKKyAgICAgIGNjYyopCisgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfR0NKPSctV2wsJworICAgICAgICAjIEFsbCBBbHBoYSBjb2RlIGlzIFBJQy4KKyAgICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPSctbm9uX3NoYXJlZCcKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0dDSj0nLVdsLCcKKyAgICAgICMgQWxsIE9TRi8xIGNvZGUgaXMgUElDLgorICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPSctbm9uX3NoYXJlZCcKKyAgICAgIDs7CisKKyAgICBzb2xhcmlzKikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0nLUtQSUMnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1Cc3RhdGljJworICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgIGY3NyogfCBmOTAqIHwgZjk1KikKKwlsdF9wcm9nX2NvbXBpbGVyX3dsX0dDSj0nLVFvcHRpb24gbGQgJzs7CisgICAgICAqKQorCWx0X3Byb2dfY29tcGlsZXJfd2xfR0NKPSctV2wsJzs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgc3Vub3M0KikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfR0NKPSctUW9wdGlvbiBsZCAnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9Jy1QSUMnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfR0NKPSctV2wsJworICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSctS1BJQycKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0dDSj0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgc3lzdjQqTVAqKQorICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYyA7dGhlbgorCWx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0nLUtjb25mb3JtX3BpYycKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1Cc3RhdGljJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzeXN2NSogfCB1bml4d2FyZSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgT3BlblVOSVgqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9HQ0o9Jy1XbCwnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9Jy1LUElDJworICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICB1bmljb3MqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9HQ0o9Jy1XbCwnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWRfR0NKPW5vCisgICAgICA7OworCisgICAgdXRzNCopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9Jy1waWMnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgICopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWRfR0NKPW5vCisgICAgICA7OworICAgIGVzYWMKKyAgZmkKKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfcHJvZ19jb21waWxlcl9waWNfR0NKIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0oiID4mNjsgfQorCisjCisjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCisjCitpZiB0ZXN0IC1uICIkbHRfcHJvZ19jb21waWxlcl9waWNfR0NKIjsgdGhlbgorCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiAkY29tcGlsZXIgUElDIGZsYWcgJGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSiB3b3JrcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmICRjb21waWxlciBQSUMgZmxhZyAkbHRfcHJvZ19jb21waWxlcl9waWNfR0NKIHdvcmtzLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19HQ0orc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgbHRfcHJvZ19jb21waWxlcl9waWNfd29ya3NfR0NKPW5vCisgIGFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorICAgcHJpbnRmICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGx0X2NvbXBpbGVyX2ZsYWc9IiRsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0oiCisgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgorICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KKyAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKKyAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCisgICAjIFRoZSBvcHRpb24gaXMgcmVmZXJlbmNlZCB2aWEgYSB2YXJpYWJsZSB0byBhdm9pZCBjb25mdXNpbmcgc2VkLgorICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCisgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCisgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjI5MjQ3OiAkbHRfY29tcGlsZVwiIiA+JjUpCisgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQorICAgYWNfc3RhdHVzPSQ/CisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOjI5MjUxOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgIiRhY19vdXRmaWxlIjsgdGhlbgorICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3Mgb3RoZXIgdGhhbiB0aGUgdXN1YWwgb3V0cHV0LgorICAgICAkZWNobyAiWCRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+Y29uZnRlc3QuZXhwCisgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgorICAgICBpZiB0ZXN0ICEgLXMgY29uZnRlc3QuZXIyIHx8IGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfd29ya3NfR0NKPXllcworICAgICBmaQorICAgZmkKKyAgICRybSBjb25mdGVzdCoKKworZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0dDSiIgPiY1CitlY2hvICIke0VDSE9fVH0kbHRfcHJvZ19jb21waWxlcl9waWNfd29ya3NfR0NKIiA+JjY7IH0KKworaWYgdGVzdCB4IiRsdF9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19HQ0oiID0geHllczsgdGhlbgorICAgIGNhc2UgJGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSiBpbgorICAgICAiIiB8ICIgIiopIDs7CisgICAgICopIGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0iICRsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0oiIDs7CisgICAgIGVzYWMKK2Vsc2UKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9CisgICAgIGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZF9HQ0o9bm8KK2ZpCisKK2ZpCitjYXNlICRob3N0X29zIGluCisgICMgRm9yIHBsYXRmb3JtcyB3aGljaCBkbyBub3Qgc3VwcG9ydCBQSUMsIC1EUElDIGlzIG1lYW5pbmdsZXNzOgorICAqZGpncHAqKQorICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0KKyAgICA7OworICAqKQorICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0iJGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSiIKKyAgICA7OworZXNhYworCisjCisjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCisjCit3bD0kbHRfcHJvZ19jb21waWxlcl93bF9HQ0ogZXZhbCBsdF90bXBfc3RhdGljX2ZsYWc9XCIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKXCIKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3MuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0dDSitzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19HQ0o9bm8KKyAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisgICBMREZMQUdTPSIkTERGTEFHUyAkbHRfdG1wX3N0YXRpY19mbGFnIgorICAgcHJpbnRmICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGlmIChldmFsICRhY19saW5rIDI+Y29uZnRlc3QuZXJyKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorICAgICAjIFRoZSBsaW5rZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCisgICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgICAgIyBBcHBlbmQgYW55IGVycm9ycyB0byB0aGUgY29uZmlnLmxvZy4KKyAgICAgICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKKyAgICAgICAkZWNobyAiWCRfbHRfbGlua2VyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPiBjb25mdGVzdC5leHAKKyAgICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKKyAgICAgICBpZiBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfR0NKPXllcworICAgICAgIGZpCisgICAgIGVsc2UKKyAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19HQ0o9eWVzCisgICAgIGZpCisgICBmaQorICAgJHJtIGNvbmZ0ZXN0KgorICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKworZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0dDSiIgPiY1CitlY2hvICIke0VDSE9fVH0kbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfR0NKIiA+JjY7IH0KKworaWYgdGVzdCB4IiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19HQ0oiID0geHllczsgdGhlbgorICAgIDoKK2Vsc2UKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9CitmaQorCisKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0Li4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19HQ0orc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fR0NKPW5vCisgICAkcm0gLXIgY29uZnRlc3QgMj4vZGV2L251bGwKKyAgIG1rZGlyIGNvbmZ0ZXN0CisgICBjZCBjb25mdGVzdAorICAgbWtkaXIgb3V0CisgICBwcmludGYgIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorCisgICBsdF9jb21waWxlcl9mbGFnPSItbyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQiCisgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgorICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KKyAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKKyAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCisgICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKKyAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKKyAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCisgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6MjkzNTE6ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQorICAgYWNfc3RhdHVzPSQ/CisgICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZToyOTM1NTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zIG91dC9jb25mdGVzdDIuJGFjX29iamV4dAorICAgdGhlbgorICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKKyAgICAgJGVjaG8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCisgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBvdXQvY29uZnRlc3QuZXJyID5vdXQvY29uZnRlc3QuZXIyCisgICAgIGlmIHRlc3QgISAtcyBvdXQvY29uZnRlc3QuZXIyIHx8IGRpZmYgb3V0L2NvbmZ0ZXN0LmV4cCBvdXQvY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19HQ0o9eWVzCisgICAgIGZpCisgICBmaQorICAgY2htb2QgdSt3IC4gMj4mNQorICAgJHJtIGNvbmZ0ZXN0KgorICAgIyBTR0kgQysrIGNvbXBpbGVyIHdpbGwgY3JlYXRlIGRpcmVjdG9yeSBvdXQvaWlfZmlsZXMvIGZvcgorICAgIyB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uCisgICB0ZXN0IC1kIG91dC9paV9maWxlcyAmJiAkcm0gb3V0L2lpX2ZpbGVzLyogJiYgcm1kaXIgb3V0L2lpX2ZpbGVzCisgICAkcm0gb3V0LyogJiYgcm1kaXIgb3V0CisgICBjZCAuLgorICAgcm1kaXIgY29uZnRlc3QKKyAgICRybSBjb25mdGVzdCoKKworZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0dDSiIgPiY1CitlY2hvICIke0VDSE9fVH0kbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fR0NKIiA+JjY7IH0KKworCitoYXJkX2xpbmtzPSJub3R0ZXN0ZWQiCitpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fR0NKIiA9IG5vICYmIHRlc3QgIiRuZWVkX2xvY2tzIiAhPSBubzsgdGhlbgorICAjIGRvIG5vdCBvdmVyd3JpdGUgdGhlIHZhbHVlIG9mIG5lZWRfbG9ja3MgcHJvdmlkZWQgYnkgdGhlIHVzZXIKKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzLi4uICRFQ0hPX0MiID4mNjsgfQorICBoYXJkX2xpbmtzPXllcworICAkcm0gY29uZnRlc3QqCisgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCisgIHRvdWNoIGNvbmZ0ZXN0LmEKKyAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+JjUgfHwgaGFyZF9saW5rcz1ubworICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubworICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRoYXJkX2xpbmtzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRoYXJkX2xpbmtzIiA+JjY7IH0KKyAgaWYgdGVzdCAiJGhhcmRfbGlua3MiID0gbm87IHRoZW4KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBcYCRDQycgZG9lcyBub3Qgc3VwcG9ydCBcYC1jIC1vJywgc28gXGBtYWtlIC1qJyBtYXkgYmUgdW5zYWZlIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogXGAkQ0MnIGRvZXMgbm90IHN1cHBvcnQgXGAtYyAtbycsIHNvIFxgbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiYyO30KKyAgICBuZWVkX2xvY2tzPXdhcm4KKyAgZmkKK2Vsc2UKKyAgbmVlZF9sb2Nrcz1ubworZmkKKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLi4uICRFQ0hPX0MiID4mNjsgfQorCisgIHJ1bnBhdGhfdmFyPQorICBhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9CisgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfR0NKPW5vCisgIGFyY2hpdmVfY21kc19HQ0o9CisgIGFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPQorICBvbGRfYXJjaGl2ZV9Gcm9tX25ld19jbWRzX0dDSj0KKyAgb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNfR0NKPQorICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfR0NKPQorICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19HQ0o9CisgIHRocmVhZF9zYWZlX2ZsYWdfc3BlY19HQ0o9CisgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPQorICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkX0dDSj0KKyAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9HQ0o9CisgIGhhcmRjb2RlX2RpcmVjdF9HQ0o9bm8KKyAgaGFyZGNvZGVfbWludXNfTF9HQ0o9bm8KKyAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9dW5zdXBwb3J0ZWQKKyAgbGlua19hbGxfZGVwbGlic19HQ0o9dW5rbm93bgorICBoYXJkY29kZV9hdXRvbWF0aWNfR0NKPW5vCisgIG1vZHVsZV9jbWRzX0dDSj0KKyAgbW9kdWxlX2V4cHN5bV9jbWRzX0dDSj0KKyAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0dDSj1ubworICBleHBvcnRfc3ltYm9sc19jbWRzX0dDSj0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworICAjIGluY2x1ZGVfZXhwc3ltcyBzaG91bGQgYmUgYSBsaXN0IG9mIHNwYWNlLXNlcGFyYXRlZCBzeW1ib2xzIHRvIGJlICphbHdheXMqCisgICMgaW5jbHVkZWQgaW4gdGhlIHN5bWJvbCBsaXN0CisgIGluY2x1ZGVfZXhwc3ltc19HQ0o9CisgICMgZXhjbHVkZV9leHBzeW1zIGNhbiBiZSBhbiBleHRlbmRlZCByZWdleHAgb2Ygc3ltYm9scyB0byBleGNsdWRlCisgICMgaXQgd2lsbCBiZSB3cmFwcGVkIGJ5IGAgKCcgYW5kIGApJCcsIHNvIG9uZSBtdXN0IG5vdCBtYXRjaCBiZWdpbm5pbmcgb3IKKyAgIyBlbmQgb2YgbGluZS4gIEV4YW1wbGU6IGBhfGJjfC4qZC4qJyB3aWxsIGV4Y2x1ZGUgdGhlIHN5bWJvbHMgYGEnIGFuZCBgYmMnLAorICAjIGFzIHdlbGwgYXMgYW55IHN5bWJvbCB0aGF0IGNvbnRhaW5zIGBkJy4KKyAgZXhjbHVkZV9leHBzeW1zX0dDSj0iX0dMT0JBTF9PRkZTRVRfVEFCTEVfIgorICAjIEFsdGhvdWdoIF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyBpcyBhIHZhbGlkIHN5bWJvbCBDIG5hbWUsIG1vc3QgYS5vdXQKKyAgIyBwbGF0Zm9ybXMgKGFiKXVzZSBpdCBpbiBQSUMgY29kZSwgYnV0IHRoZWlyIGxpbmtlcnMgZ2V0IGNvbmZ1c2VkIGlmCisgICMgdGhlIHN5bWJvbCBpcyBleHBsaWNpdGx5IHJlZmVyZW5jZWQuICBTaW5jZSBwb3J0YWJsZSBjb2RlIGNhbm5vdAorICAjIHJlbHkgb24gdGhpcyBzeW1ib2wgbmFtZSwgaXQncyBwcm9iYWJseSBmaW5lIHRvIG5ldmVyIGluY2x1ZGUgaXQgaW4KKyAgIyBwcmVsb2FkZWQgc3ltYm9sIHRhYmxlcy4KKyAgZXh0cmFjdF9leHBzeW1zX2NtZHM9CisgICMgSnVzdCBiZWluZyBwYXJhbm9pZCBhYm91dCBlbnN1cmluZyB0aGF0IGNjX2Jhc2VuYW1lIGlzIHNldC4KKyAgZm9yIGNjX3RlbXAgaW4gJGNvbXBpbGVyIiI7IGRvCisgIGNhc2UgJGNjX3RlbXAgaW4KKyAgICBjb21waWxlIHwgKltcXC9dY29tcGlsZSB8IGNjYWNoZSB8ICpbXFwvXWNjYWNoZSApIDs7CisgICAgZGlzdGNjIHwgKltcXC9dZGlzdGNjIHwgcHVyaWZ5IHwgKltcXC9dcHVyaWZ5ICkgOzsKKyAgICBcLSopIDs7CisgICAgKikgYnJlYWs7OworICBlc2FjCitkb25lCitjY19iYXNlbmFtZT1gJGVjaG8gIlgkY2NfdGVtcCIgfCAkWHNlZCAtZSAncyUuKi8lJScgLWUgInMlXiRob3N0X2FsaWFzLSUlImAKKworICBjYXNlICRob3N0X29zIGluCisgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKyAgICAjIEZJWE1FOiB0aGUgTVNWQysrIHBvcnQgaGFzbid0IGJlZW4gdGVzdGVkIGluIGEgbG9vb29uZyB0aW1lCisgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKKyAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgorICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorICAgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICBmaQorICAgIDs7CisgIGludGVyaXgqKQorICAgICMgd2UganVzdCBob3BlL2Fzc3VtZSB0aGlzIGlzIGdjYyBhbmQgbm90IGM4OSAoPSBNU1ZDKyspCisgICAgd2l0aF9nbnVfbGQ9eWVzCisgICAgOzsKKyAgb3BlbmJzZCopCisgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICA7OworICBlc2FjCisKKyAgbGRfc2hsaWJzX0dDSj15ZXMKKyAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICAgICMgSWYgYXJjaGl2ZV9jbWRzIHJ1bnMgTEQsIG5vdCBDQywgd2xhcmMgc2hvdWxkIGJlIGVtcHR5CisgICAgd2xhcmM9JyR7d2x9JworCisgICAgIyBTZXQgc29tZSBkZWZhdWx0cyBmb3IgR05VIGxkIHdpdGggc2hhcmVkIGxpYnJhcnkgc3VwcG9ydC4gVGhlc2UKKyAgICAjIGFyZSByZXNldCBsYXRlciBpZiBzaGFyZWQgbGlicmFyaWVzIGFyZSBub3Qgc3VwcG9ydGVkLiBQdXR0aW5nIHRoZW0KKyAgICAjIGhlcmUgYWxsb3dzIHRoZW0gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWNlc3NhcnkuCisgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKyAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nJHt3bH0tLXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfR0NKPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCisgICAgIyBhbmNpZW50IEdOVSBsZCBkaWRuJ3Qgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUgZXQuIGFsLgorICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJ25vLXdob2xlLWFyY2hpdmUnID4gL2Rldi9udWxsOyB0aGVuCisJd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfR0NKPSIkd2xhcmMiJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnIiR3bGFyYyInLS1uby13aG9sZS1hcmNoaXZlJworICAgICAgZWxzZQorICAJd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfR0NKPQorICAgIGZpCisgICAgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPW5vCisgICAgY2FzZSBgJExEIC12IDI+L2Rldi9udWxsYCBpbgorICAgICAgKlwgWzAxXS4qIHwgKlwgMi5bMC05XS4qIHwgKlwgMi4xMC4qKSA7OyAjIGNhdGNoIHZlcnNpb25zIDwgMi4xMQorICAgICAgKlwgMi4xMS45My4wLjJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBSSDcuMyAuLi4KKyAgICAgICpcIDIuMTEuOTIuMC4xMlwgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OyAjIE1hbmRyYWtlIDguMiAuLi4KKyAgICAgICpcIDIuMTEuKikgOzsgIyBvdGhlciAyLjExIHZlcnNpb25zCisgICAgICAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7CisgICAgZXNhYworCisgICAgIyBTZWUgaWYgR05VIGxkIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeDMqIHwgYWl4NCogfCBhaXg1KikKKyAgICAgICMgT24gQUlYL1BQQywgdGhlIEdOVSBsaW5rZXIgaXMgdmVyeSBicm9rZW4KKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NDsgdGhlbgorCWxkX3NobGlic19HQ0o9bm8KKwljYXQgPDxFT0YgMT4mMgorCisqKiogV2FybmluZzogdGhlIEdOVSBsaW5rZXIsIGF0IGxlYXN0IHVwIHRvIHJlbGVhc2UgMi45LjEsIGlzIHJlcG9ydGVkCisqKiogdG8gYmUgdW5hYmxlIHRvIHJlbGlhYmx5IGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIEFJWC4KKyoqKiBUaGVyZWZvcmUsIGxpYnRvb2wgaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIElmIHlvdQorKioqIHJlYWxseSBjYXJlIGZvciBzaGFyZWQgbGlicmFyaWVzLCB5b3UgbWF5IHdhbnQgdG8gbW9kaWZ5IHlvdXIgUEFUSAorKioqIHNvIHRoYXQgYSBub24tR05VIGxpbmtlciBpcyBmb3VuZCwgYW5kIHRoZW4gcmVzdGFydC4KKworRU9GCisgICAgICBmaQorICAgICAgOzsKKworICAgIGFtaWdhb3MqKQorICAgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJHJtICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgTkFNRSAkbGlibmFtZSIgPiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIExJQlJBUllfSUQgMSIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBWRVJTSU9OICRtYWpvciIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBSRVZJU0lPTiAkcmV2aXNpb24iID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEFSICRBUl9GTEFHUyAkbGliICRsaWJvYmpzfiRSQU5MSUIgJGxpYn4oY2QgJG91dHB1dF9vYmpkaXIgJiYgYTJpeGxpYnJhcnkgLTMyKScKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPSctTCRsaWJkaXInCisgICAgICBoYXJkY29kZV9taW51c19MX0dDSj15ZXMKKworICAgICAgIyBTYW11ZWwgQS4gRmFsdm8gSUkgPGtjNXRqYUBkb2xwaGluLm9wZW5wcm9qZWN0cy5uZXQ+IHJlcG9ydHMKKyAgICAgICMgdGhhdCB0aGUgc2VtYW50aWNzIG9mIGR5bmFtaWMgbGlicmFyaWVzIG9uIEFtaWdhT1MsIGF0IGxlYXN0IHVwCisgICAgICAjIHRvIHZlcnNpb24gNCwgaXMgdG8gc2hhcmUgZGF0YSBhbW9uZyBtdWx0aXBsZSBwcm9ncmFtcyBsaW5rZWQKKyAgICAgICMgd2l0aCB0aGUgc2FtZSBkeW5hbWljIGxpYnJhcnkuICBTaW5jZSB0aGlzIGRvZXNuJ3QgbWF0Y2ggdGhlCisgICAgICAjIGJlaGF2aW9yIG9mIHNoYXJlZCBsaWJyYXJpZXMgb24gb3RoZXIgcGxhdGZvcm1zLCB3ZSBjYW4ndCB1c2UKKyAgICAgICMgdGhlbS4KKyAgICAgIGxkX3NobGlic19HQ0o9bm8KKyAgICAgIDs7CisKKyAgICBiZW9zKikKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCWFsbG93X3VuZGVmaW5lZF9mbGFnX0dDSj11bnN1cHBvcnRlZAorCSMgSm9zZXBoIEJlY2tlbmJhY2ggPGpyYjNAYmVzdC5jb20+IHNheXMgc29tZSByZWxlYXNlcyBvZiBnY2MKKwkjIHN1cHBvcnQgLS11bmRlZmluZWQuICBUaGlzIGRlc2VydmVzIHNvbWUgaW52ZXN0aWdhdGlvbi4gIEZJWE1FCisJYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1ub3N0YXJ0ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgZWxzZQorCWxkX3NobGlic19HQ0o9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQorICAgICAgIyBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsIEdDSikgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCisgICAgICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9Jy1MJGxpYmRpcicKKyAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0dDSj11bnN1cHBvcnRlZAorICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0dDSj1ubworICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19HQ0o9eWVzCisgICAgICBleHBvcnRfc3ltYm9sc19jbWRzX0dDSj0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdIC9zLy4qIFwoW14gXSpcKS9cMSBEQVRBLydcJycgfCAkU0VEIC1lICdcJycvXltBSVRXXSAvcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKworICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgIGFyY2hpdmVfY21kc19HQ0o9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworCSMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSAoMXN0IGxpbmUKKwkjIGlzIEVYUE9SVFMpLCB1c2UgaXQgYXMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZC4uLgorCWFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorCSAgY3AgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworCWVsc2UKKwkgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworCSAgY2F0ICRleHBvcnRfc3ltYm9scyA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKwlmaX4KKwkkQ0MgLXNoYXJlZCAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKyAgICAgIGVsc2UKKwlsZF9zaGxpYnNfR0NKPW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIGludGVyaXgzKikKKyAgICAgIGhhcmRjb2RlX2RpcmVjdF9HQ0o9bm8KKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPW5vCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LUUnCisgICAgICAjIEhhY2s6IE9uIEludGVyaXggMy54LCB3ZSBjYW5ub3QgY29tcGlsZSBQSUMgYmVjYXVzZSBvZiBhIGJyb2tlbiBnY2MuCisgICAgICAjIEluc3RlYWQsIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGxvYWRlZCBhdCBhbiBpbWFnZSBiYXNlICgweDEwMDAwMDAwIGJ5CisgICAgICAjIGRlZmF1bHQpIGFuZCByZWxvY2F0ZWQgaWYgdGhleSBjb25mbGljdCwgd2hpY2ggaXMgYSBzbG93IHZlcnkgbWVtb3J5CisgICAgICAjIGNvbnN1bWluZyBhbmQgZnJhZ21lbnRpbmcgcHJvY2Vzcy4gIFRvIGF2b2lkIHRoaXMsIHdlIHBpY2sgYSByYW5kb20sCisgICAgICAjIDI1NiBLaUItYWxpZ25lZCBpbWFnZSBiYXNlIGJldHdlZW4gMHg1MDAwMDAwMCBhbmQgMHg2RkZDMDAwMCBhdCBsaW5rCisgICAgICAjIHRpbWUuICBNb3ZpbmcgdXAgZnJvbSAweDEwMDAwMDAwIGFsc28gYWxsb3dzIG1vcmUgc2JyaygyKSBzcGFjZS4KKyAgICAgIGFyY2hpdmVfY21kc19HQ0o9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0nc2VkICJzLF4sXywiICRleHBvcnRfc3ltYm9scyA+JG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW1+JENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKyAgICAgIDs7CisKKyAgICBsaW51eCopCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwl0bXBfYWRkZmxhZz0KKwljYXNlICRjY19iYXNlbmFtZSwkaG9zdF9jcHUgaW4KKwlwZ2NjKikJCQkJIyBQb3J0bGFuZCBHcm91cCBDIGNvbXBpbGVyCisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7ICRlY2hvIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIHRtcF9hZGRmbGFnPScgJHBpY19mbGFnJworCSAgOzsKKwlwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSopCSMgUG9ydGxhbmQgR3JvdXAgZjc3IGFuZCBmOTAgY29tcGlsZXJzCisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7ICRlY2hvIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIHRtcF9hZGRmbGFnPScgJHBpY19mbGFnIC1Nbm9tYWluJyA7OworCWVjYyosaWE2NCogfCBpY2MqLGlhNjQqKQkJIyBJbnRlbCBDIGNvbXBpbGVyIG9uIGlhNjQKKwkgIHRtcF9hZGRmbGFnPScgLWlfZHluYW1pYycgOzsKKwllZmMqLGlhNjQqIHwgaWZvcnQqLGlhNjQqKQkjIEludGVsIEZvcnRyYW4gY29tcGlsZXIgb24gaWE2NAorCSAgdG1wX2FkZGZsYWc9JyAtaV9keW5hbWljIC1ub2Zvcl9tYWluJyA7OworCWlmYyogfCBpZm9ydCopCQkJIyBJbnRlbCBGb3J0cmFuIGNvbXBpbGVyCisJICB0bXBfYWRkZmxhZz0nIC1ub2Zvcl9tYWluJyA7OworCWVzYWMKKwlhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCciJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisKKwlpZiB0ZXN0ICRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmcgPSB5ZXM7IHRoZW4KKwkgIGFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSckZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorICAkZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAkQ0MgLXNoYXJlZCciJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXZlcnNpb24tc2NyaXB0ICR7d2x9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisJZmkKKyAgICAgIGVsc2UKKwlsZF9zaGxpYnNfR0NKPW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIG5ldGJzZCopCisgICAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisJYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1Cc2hhcmVhYmxlICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW8gJGxpYicKKwl3bGFyYz0KKyAgICAgIGVsc2UKKwlhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwlhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICBmaQorICAgICAgOzsKKworICAgIHNvbGFyaXMqKQorICAgICAgaWYgJExEIC12IDI+JjEgfCBncmVwICdCRkQgMlwuOCcgPiAvZGV2L251bGw7IHRoZW4KKwlsZF9zaGxpYnNfR0NKPW5vCisJY2F0IDw8RU9GIDE+JjIKKworKioqIFdhcm5pbmc6IFRoZSByZWxlYXNlcyAyLjguKiBvZiB0aGUgR05VIGxpbmtlciBjYW5ub3QgcmVsaWFibHkKKyoqKiBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBTb2xhcmlzIHN5c3RlbXMuICBUaGVyZWZvcmUsIGxpYnRvb2wKKyoqKiBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgV2UgdXJnZSB5b3UgdG8gdXBncmFkZSBHTlUKKyoqKiBiaW51dGlscyB0byByZWxlYXNlIDIuOS4xIG9yIG5ld2VyLiAgQW5vdGhlciBvcHRpb24gaXMgdG8gbW9kaWZ5CisqKiogeW91ciBQQVRIIG9yIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gc28gdGhhdCB0aGUgbmF0aXZlIGxpbmtlciBpcworKioqIHVzZWQsIGFuZCB0aGVuIHJlc3RhcnQuCisKK0VPRgorICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwlhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwlhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICBlbHNlCisJbGRfc2hsaWJzX0dDSj1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqKQorICAgICAgY2FzZSBgJExEIC12IDI+JjFgIGluCisgICAgICAgICpcIFswMV0uKiB8ICpcIDIuWzAtOV0uKiB8ICpcIDIuMVswLTVdLiopCisJbGRfc2hsaWJzX0dDSj1ubworCWNhdCA8PF9MVF9FT0YgMT4mMgorCisqKiogV2FybmluZzogUmVsZWFzZXMgb2YgdGhlIEdOVSBsaW5rZXIgcHJpb3IgdG8gMi4xNi45MS4wLjMgY2FuIG5vdAorKioqIHJlbGlhYmx5IGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIFNDTyBzeXN0ZW1zLiAgVGhlcmVmb3JlLCBsaWJ0b29sCisqKiogaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIFdlIHVyZ2UgeW91IHRvIHVwZ3JhZGUgR05VCisqKiogYmludXRpbHMgdG8gcmVsZWFzZSAyLjE2LjkxLjAuMyBvciBuZXdlci4gIEFub3RoZXIgb3B0aW9uIGlzIHRvIG1vZGlmeQorKioqIHlvdXIgUEFUSCBvciBjb21waWxlciBjb25maWd1cmF0aW9uIHNvIHRoYXQgdGhlIG5hdGl2ZSBsaW5rZXIgaXMKKyoqKiB1c2VkLCBhbmQgdGhlbiByZXN0YXJ0LgorCitfTFRfRU9GCisJOzsKKwkqKQorCSAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPSdgdGVzdCAteiAiJFNDT0FCU1BBVEgiICYmIGVjaG8gJHt3bH0tcnBhdGgsJGxpYmRpcmAnCisJICAgIGFyY2hpdmVfY21kc19HQ0o9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYicKKwkgICAgYXJjaGl2ZV9leHBzeW1fY21kc19HQ0o9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUsLXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJICBlbHNlCisJICAgIGxkX3NobGlic19HQ0o9bm8KKwkgIGZpCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBzdW5vczQqKQorICAgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1hc3NlcnQgcHVyZS10ZXh0IC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIHdsYXJjPQorICAgICAgaGFyZGNvZGVfZGlyZWN0X0dDSj15ZXMKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPW5vCisgICAgICA7OworCisgICAgKikKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCWFyY2hpdmVfY21kc19HQ0o9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCWFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlsZF9zaGxpYnNfR0NKPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBpZiB0ZXN0ICIkbGRfc2hsaWJzX0dDSiIgPSBubzsgdGhlbgorICAgICAgcnVucGF0aF92YXI9CisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0KKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19HQ0o9CisgICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19HQ0o9CisgICAgZmkKKyAgZWxzZQorICAgICMgUE9SVE1FIGZpbGwgaW4gYSBkZXNjcmlwdGlvbiBvZiB5b3VyIHN5c3RlbSdzIGxpbmtlciAobm90IEdOVSBsZCkKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgYWl4MyopCisgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9dW5zdXBwb3J0ZWQKKyAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9sc19HQ0o9eWVzCisgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0nJExEIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtYkU6JGV4cG9ydF9zeW1ib2xzIC1UNTEyIC1INTEyIC1iTTpTUkV+JEFSICRBUl9GTEFHUyAkbGliICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCisgICAgICAjIE5vdGU6IHRoaXMgbGlua2VyIGhhcmRjb2RlcyB0aGUgZGlyZWN0b3JpZXMgaW4gTElCUEFUSCBpZiB0aGVyZQorICAgICAgIyBhcmUgbm8gZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGJ5IC1MLgorICAgICAgaGFyZGNvZGVfbWludXNfTF9HQ0o9eWVzCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0IC16ICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWMiOyB0aGVuCisJIyBOZWl0aGVyIGRpcmVjdCBoYXJkY29kaW5nIG5vciBzdGF0aWMgbGlua2luZyBpcyBzdXBwb3J0ZWQgd2l0aCBhCisJIyBicm9rZW4gY29sbGVjdDIuCisJaGFyZGNvZGVfZGlyZWN0X0dDSj11bnN1cHBvcnRlZAorICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhaXg0KiB8IGFpeDUqKQorICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkjIE9uIElBNjQsIHRoZSBsaW5rZXIgZG9lcyBydW4gdGltZSBsaW5raW5nIGJ5IGRlZmF1bHQsIHNvIHdlIGRvbid0CisJIyBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwuCisJYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworCWV4cF9zeW1fZmxhZz0nLUJleHBvcnQnCisJbm9fZW50cnlfZmxhZz0iIgorICAgICAgZWxzZQorCSMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHdlIGRvbid0IHdhbnQgdGhlICItQyIgb3B0aW9uLgorCSMgLUMgbWVhbnMgZGVtYW5nbGUgdG8gQUlYIG5tLCBidXQgbWVhbnMgZG9uJ3QgZGVtYW5nbGUgd2l0aCBHTlUgbm0KKwlpZiAkTk0gLVYgMj4mMSB8IGdyZXAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KKwkgIGV4cG9ydF9zeW1ib2xzX2NtZHNfR0NKPSckTk0gLUJwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQyID09ICJUIikgfHwgKFwkMiA9PSAiRCIpIHx8IChcJDIgPT0gIkIiKSkgJiYgKHN1YnN0cihcJDMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFwkMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKwllbHNlCisJICBleHBvcnRfc3ltYm9sc19jbWRzX0dDSj0nJE5NIC1CQ3BnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJDIgPT0gIlQiKSB8fCAoXCQyID09ICJEIikgfHwgKFwkMiA9PSAiQiIpKSAmJiAoc3Vic3RyKFwkMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJworCWZpCisJYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworCisJIyBUZXN0IGlmIHdlIGFyZSB0cnlpbmcgdG8gdXNlIHJ1biB0aW1lIGxpbmtpbmcgb3Igbm9ybWFsCisJIyBBSVggc3R5bGUgbGlua2luZy4gSWYgLWJydGwgaXMgc29tZXdoZXJlIGluIExERkxBR1MsIHdlCisJIyBuZWVkIHRvIGRvIHJ1bnRpbWUgbGlua2luZy4KKwljYXNlICRob3N0X29zIGluIGFpeDQuWzIzXXxhaXg0LlsyM10uKnxhaXg1KikKKwkgIGZvciBsZF9mbGFnIGluICRMREZMQUdTOyBkbworICAJICBpZiAodGVzdCAkbGRfZmxhZyA9ICItYnJ0bCIgfHwgdGVzdCAkbGRfZmxhZyA9ICItV2wsLWJydGwiKTsgdGhlbgorICAJICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCisgIAkgICAgYnJlYWsKKyAgCSAgZmkKKwkgIGRvbmUKKwkgIDs7CisJZXNhYworCisJZXhwX3N5bV9mbGFnPSctYmV4cG9ydCcKKwlub19lbnRyeV9mbGFnPSctYm5vZW50cnknCisgICAgICBmaQorCisgICAgICAjIFdoZW4gbGFyZ2UgZXhlY3V0YWJsZXMgb3Igc2hhcmVkIG9iamVjdHMgYXJlIGJ1aWx0LCBBSVggbGQgY2FuCisgICAgICAjIGhhdmUgcHJvYmxlbXMgY3JlYXRpbmcgdGhlIHRhYmxlIG9mIGNvbnRlbnRzLiAgSWYgbGlua2luZyBhIGxpYnJhcnkKKyAgICAgICMgb3IgcHJvZ3JhbSByZXN1bHRzIGluICJlcnJvciBUT0Mgb3ZlcmZsb3ciIGFkZCAtbW1pbmltYWwtdG9jIHRvCisgICAgICAjIENYWEZMQUdTL0NGTEFHUyBmb3IgZysrL2djYy4gIEluIHRoZSBjYXNlcyB3aGVyZSB0aGF0IGlzIG5vdAorICAgICAgIyBlbm91Z2ggdG8gZml4IHRoZSBwcm9ibGVtLCBhZGQgLVdsLC1iYmlndG9jIHRvIExERkxBR1MuCisKKyAgICAgIGFyY2hpdmVfY21kc19HQ0o9JycKKyAgICAgIGhhcmRjb2RlX2RpcmVjdF9HQ0o9eWVzCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0dDSj0nOicKKyAgICAgIGxpbmtfYWxsX2RlcGxpYnNfR0NKPXllcworCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCWNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMDEyXXxhaXg0LlswMTJdLiopCisJIyBXZSBvbmx5IHdhbnQgdG8gZG8gdGhpcyBvbiBBSVggNC4yIGFuZCBsb3dlciwgdGhlIGNoZWNrCisJIyBiZWxvdyBmb3IgYnJva2VuIGNvbGxlY3QyIGRvZXNuJ3Qgd29yayB1bmRlciA0LjMrCisJICBjb2xsZWN0Mm5hbWU9YCR7Q0N9IC1wcmludC1wcm9nLW5hbWU9Y29sbGVjdDJgCisJICBpZiB0ZXN0IC1mICIkY29sbGVjdDJuYW1lIiAmJiBcCisgIAkgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8IGdyZXAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCisJICB0aGVuCisgIAkgICMgV2UgaGF2ZSByZXdvcmtlZCBjb2xsZWN0MgorICAJICBoYXJkY29kZV9kaXJlY3RfR0NKPXllcworCSAgZWxzZQorICAJICAjIFdlIGhhdmUgb2xkIGNvbGxlY3QyCisgIAkgIGhhcmRjb2RlX2RpcmVjdF9HQ0o9dW5zdXBwb3J0ZWQKKyAgCSAgIyBJdCBmYWlscyB0byBmaW5kIHVuaW5zdGFsbGVkIGxpYnJhcmllcyB3aGVuIHRoZSB1bmluc3RhbGxlZAorICAJICAjIHBhdGggaXMgbm90IGxpc3RlZCBpbiB0aGUgbGlicGF0aC4gIFNldHRpbmcgaGFyZGNvZGVfbWludXNfTAorICAJICAjIHRvIHVuc3VwcG9ydGVkIGZvcmNlcyByZWxpbmtpbmcKKyAgCSAgaGFyZGNvZGVfbWludXNfTF9HQ0o9eWVzCisgIAkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPSctTCRsaWJkaXInCisgIAkgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfR0NKPQorCSAgZmkKKwkgIDs7CisJZXNhYworCXNoYXJlZF9mbGFnPSctc2hhcmVkJworCWlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorCSAgc2hhcmVkX2ZsYWc9IiRzaGFyZWRfZmxhZyAiJyR7d2x9LUcnCisJZmkKKyAgICAgIGVsc2UKKwkjIG5vdCB1c2luZyBnY2MKKwlpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICAJIyBWaXN1YWxBZ2UgQysrLCBWZXJzaW9uIDUuNSBmb3IgQUlYIDVMIGZvciBJQS02NCwgQmV0YSAzIFJlbGVhc2UKKyAgCSMgY2hva2VzIG9uIC1XbCwtRy4gVGhlIGZvbGxvd2luZyBsaW5lIGlzIGNvcnJlY3Q6CisJICBzaGFyZWRfZmxhZz0nLUcnCisJZWxzZQorCSAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisJICAgIHNoYXJlZF9mbGFnPScke3dsfS1HJworCSAgZWxzZQorCSAgICBzaGFyZWRfZmxhZz0nJHt3bH0tYk06U1JFJworCSAgZmkKKwlmaQorICAgICAgZmkKKworICAgICAgIyBJdCBzZWVtcyB0aGF0IC1iZXhwYWxsIGRvZXMgbm90IGV4cG9ydCBzeW1ib2xzIGJlZ2lubmluZyB3aXRoCisgICAgICAjIHVuZGVyc2NvcmUgKF8pLCBzbyBpdCBpcyBiZXR0ZXIgdG8gZ2VuZXJhdGUgYSBsaXN0IG9mIHN5bWJvbHMgdG8gZXhwb3J0LgorICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0dDSj15ZXMKKyAgICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorCSMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1bnRpbWUgbG9hZGluZyBmbGFncyAoLWJydGwpLAorCSMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KKwlhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9Jy1iZXJvaycKKyAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4gZW1wdHkgZXhlY3V0YWJsZS4KKyAgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisKK2FpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgJy9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsgL14wLyB7IHMvXjAgICpcKC4qXCkkL1wxLzsgcDsgfQorfSdgCisjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCitpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgJy9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsgL14wLyB7IHMvXjAgICpcKC4qXCkkL1wxLzsgcDsgfQorfSdgOyBmaQorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisKK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAoraWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisKKyAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKwlhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0iXCRDQyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZWNobyAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKKyAgICAgICBlbHNlCisJaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPScke3dsfS1SICRsaWJkaXI6L3Vzci9saWI6L2xpYicKKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0dDSj0iLXogbm9kZWZzIgorCSAgYXJjaGl2ZV9leHBzeW1fY21kc19HQ0o9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzICR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30gJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMiCisJZWxzZQorCSAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4gZW1wdHkgZXhlY3V0YWJsZS4KKwkgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKyAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorCithaXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICcvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7IC9eMC8geyBzL14wICAqXCguKlwpJC9cMS87IHA7IH0KK30nYAorIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgoraWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICcvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7IC9eMC8geyBzL14wICAqXCguKlwpJC9cMS87IHA7IH0KK30nYDsgZmkKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2lmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorCisJIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorCSAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKKwkgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KKwkgIG5vX3VuZGVmaW5lZF9mbGFnX0dDSj0nICR7d2x9LWJlcm5vdG9rJworCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKPScgJHt3bH0tYmVyb2snCisJICAjIEV4cG9ydGVkIHN5bWJvbHMgY2FuIGJlIHB1bGxlZCBpbnRvIHNoYXJlZCBvYmplY3RzIGZyb20gYXJjaGl2ZXMKKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0dDSj0nJGNvbnZlbmllbmNlJworCSAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfR0NKPXllcworCSAgIyBUaGlzIGlzIHNpbWlsYXIgdG8gaG93IEFJWCB0cmFkaXRpb25hbGx5IGJ1aWxkcyBpdHMgc2hhcmVkIGxpYnJhcmllcy4KKwkgIGFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHt3bH0tYm5vZW50cnkgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWJFOiRleHBvcnRfc3ltYm9scyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9fiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFzZS5hICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCisJZmkKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYW1pZ2FvcyopCisgICAgICBhcmNoaXZlX2NtZHNfR0NKPSckcm0gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBOQU1FICRsaWJuYW1lIiA+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgTElCUkFSWV9JRCAxIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIFZFUlNJT04gJG1ham9yIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIFJFVklTSU9OICRyZXZpc2lvbiIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kQVIgJEFSX0ZMQUdTICRsaWIgJGxpYm9ianN+JFJBTkxJQiAkbGlifihjZCAkb3V0cHV0X29iamRpciAmJiBhMml4bGlicmFyeSAtMzIpJworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9Jy1MJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX21pbnVzX0xfR0NKPXllcworICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBkaWZmZXJlbnQgc2VtYW50aWNzIG9uIHRoZSBHTlUgbGQgc2VjdGlvbgorICAgICAgbGRfc2hsaWJzX0dDSj1ubworICAgICAgOzsKKworICAgIGJzZGlbNDVdKikKKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19HQ0o9LXJkeW5hbWljCisgICAgICA7OworCisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQorICAgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKKyAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisgICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9JyAnCisgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9dW5zdXBwb3J0ZWQKKyAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisgICAgICBsaWJleHQ9bGliCisgICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKyAgICAgIHNocmV4dF9jbWRzPSIuZGxsIgorICAgICAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorICAgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBlY2hvICIkZGVwbGlicyIgfCAkU0VEIC1lICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCisgICAgICAjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgorICAgICAgb2xkX2FyY2hpdmVfRnJvbV9uZXdfY21kc19HQ0o9J3RydWUnCisgICAgICAjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgorICAgICAgb2xkX2FyY2hpdmVfY21kc19HQ0o9J2xpYiAvT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKyAgICAgIGZpeF9zcmNmaWxlX3BhdGhfR0NKPSdgY3lncGF0aCAtdyAiJHNyY2ZpbGUiYCcKKyAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfR0NKPXllcworICAgICAgOzsKKworICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICBjYXNlICRob3N0X29zIGluCisgICAgICAgIHJoYXBzb2R5KiB8IGRhcndpbjEuWzAxMl0pCisgICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9JyR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJworICAgICAgICAgOzsKKyAgICAgICAqKSAjIERhcndpbiAxLjMgb24KKyAgICAgICAgIGlmIHRlc3QgLXogJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVR9IDsgdGhlbgorICAgICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9JyR7d2x9LWZsYXRfbmFtZXNwYWNlICR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJworICAgICAgICAgZWxzZQorICAgICAgICAgICBjYXNlICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUfSBpbgorICAgICAgICAgICAgIDEwLlswMTJdKQorICAgICAgICAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKPScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycKKyAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgMTAuKikKKyAgICAgICAgICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0dDSj0nJHt3bH0tdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnCisgICAgICAgICAgICAgICA7OworICAgICAgICAgICBlc2FjCisgICAgICAgICBmaQorICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjX0dDSj1ubworICAgICAgaGFyZGNvZGVfZGlyZWN0X0dDSj1ubworICAgICAgaGFyZGNvZGVfYXV0b21hdGljX0dDSj15ZXMKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPXVuc3VwcG9ydGVkCisgICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19HQ0o9JycKKyAgICAgIGxpbmtfYWxsX2RlcGxpYnNfR0NKPXllcworICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzIDsgdGhlbgorICAgIAlvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKKyAgICAgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1keW5hbWljbGliICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lICRycGF0aC8kc29uYW1lICR2ZXJzdHJpbmcnCisgICAgICBtb2R1bGVfY21kc19HQ0o9JyRDQyAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAtYnVuZGxlICRsaWJvYmpzICRkZXBsaWJzJGNvbXBpbGVyX2ZsYWdzJworICAgICAgIyBEb24ndCBmaXggdGhpcyBieSB1c2luZyB0aGUgbGQgLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCBmbGFnLCBpdCBkb2Vzbid0IGV4aXN0IGluIG9sZGVyIGRhcndpbiBsZHMKKyAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAtZHluYW1pY2xpYiAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSAkcnBhdGgvJHNvbmFtZSAkdmVyc3RyaW5nfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKKyAgICAgIG1vZHVsZV9leHBzeW1fY21kc19HQ0o9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDICRhbGxvd191bmRlZmluZWRfZmxhZyAgLW8gJGxpYiAtYnVuZGxlICRsaWJvYmpzICRkZXBsaWJzJGNvbXBpbGVyX2ZsYWdzfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKKyAgICBlbHNlCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICB4bGMqKQorICAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCisgICAgICAgICBhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXFta3Nocm9iaiAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taW5zdGFsbF9uYW1lICR7d2x9YGVjaG8gJHJwYXRoLyRzb25hbWVgICR2ZXJzdHJpbmcnCisgICAgICAgICBtb2R1bGVfY21kc19HQ0o9JyRDQyAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAtYnVuZGxlICRsaWJvYmpzICRkZXBsaWJzJGNvbXBpbGVyX2ZsYWdzJworICAgICAgICAgICMgRG9uJ3QgZml4IHRoaXMgYnkgdXNpbmcgdGhlIGxkIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgZmxhZywgaXQgZG9lc24ndCBleGlzdCBpbiBvbGRlciBkYXJ3aW4gbGRzCisgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgLXFta3Nocm9iaiAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taW5zdGFsbF9uYW1lICR7d2x9JHJwYXRoLyRzb25hbWUgJHZlcnN0cmluZ35ubWVkaXQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCisgICAgICAgICAgbW9kdWxlX2V4cHN5bV9jbWRzX0dDSj0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnICAtbyAkbGliIC1idW5kbGUgJGxpYm9ianMgJGRlcGxpYnMkY29tcGlsZXJfZmxhZ3N+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JworICAgICAgICAgIDs7CisgICAgICAgKikKKyAgICAgICAgIGxkX3NobGlic19HQ0o9bm8KKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgIGZpCisgICAgICA7OworCisgICAgZGd1eCopCisgICAgICBhcmNoaXZlX2NtZHNfR0NKPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nLUwkbGliZGlyJworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9bm8KKyAgICAgIDs7CisKKyAgICBmcmVlYnNkMSopCisgICAgICBsZF9zaGxpYnNfR0NKPW5vCisgICAgICA7OworCisgICAgIyBGcmVlQlNEIDIuMi5bMDEyXSBhbGxvd3MgdXMgdG8gaW5jbHVkZSBjKytydDAubyB0byBnZXQgQysrIGNvbnN0cnVjdG9yCisgICAgIyBzdXBwb3J0LiAgRnV0dXJlIHZlcnNpb25zIGRvIHRoaXMgYXV0b21hdGljYWxseSwgYnV0IGFuIGV4cGxpY2l0IGMrK3J0MC5vCisgICAgIyBkb2VzIG5vdCBicmVhayBhbnl0aGluZywgYW5kIGhlbHBzIHNpZ25pZmljYW50bHkgKGF0IHRoZSBjb3N0IG9mIGEgbGl0dGxlCisgICAgIyBleHRyYSBzcGFjZSkuCisgICAgZnJlZWJzZDIuMiopCisgICAgICBhcmNoaXZlX2NtZHNfR0NKPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC91c3IvbGliL2MrK3J0MC5vJworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9Jy1SJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2RpcmVjdF9HQ0o9eWVzCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0dDSj1ubworICAgICAgOzsKKworICAgICMgVW5mb3J0dW5hdGVseSwgb2xkZXIgdmVyc2lvbnMgb2YgRnJlZUJTRCAyIGRvIG5vdCBoYXZlIHRoaXMgZmVhdHVyZS4KKyAgICBmcmVlYnNkMiopCisgICAgICBhcmNoaXZlX2NtZHNfR0NKPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgaGFyZGNvZGVfZGlyZWN0X0dDSj15ZXMKKyAgICAgIGhhcmRjb2RlX21pbnVzX0xfR0NKPXllcworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9bm8KKyAgICAgIDs7CisKKyAgICAjIEZyZWVCU0QgMyBhbmQgZ3JlYXRlciB1c2VzIGdjYyAtc2hhcmVkIHRvIGRvIHNoYXJlZCBsaWJyYXJpZXMuCisgICAgZnJlZWJzZCogfCBrZnJlZWJzZCotZ251IHwgZHJhZ29uZmx5KikKKyAgICAgIGFyY2hpdmVfY21kc19HQ0o9JyRDQyAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9Jy1SJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2RpcmVjdF9HQ0o9eWVzCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0dDSj1ubworICAgICAgOzsKKworICAgIGhwdXg5KikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJYXJjaGl2ZV9jbWRzX0dDSj0nJHJtICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLWZQSUMgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgIGVsc2UKKwlhcmNoaXZlX2NtZHNfR0NKPSckcm0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgIGZpCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0dDSj06CisgICAgICBoYXJkY29kZV9kaXJlY3RfR0NKPXllcworCisgICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisgICAgICBoYXJkY29kZV9taW51c19MX0dDSj15ZXMKKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LUUnCisgICAgICA7OworCisgICAgaHB1eDEwKikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzIC1hICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwlhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCWFyY2hpdmVfY21kc19HQ0o9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBmaQorICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworCWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfR0NKPToKKworCWhhcmRjb2RlX2RpcmVjdF9HQ0o9eWVzCisJZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0dDSj0nJHt3bH0tRScKKworCSMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCisJIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisJaGFyZGNvZGVfbWludXNfTF9HQ0o9eWVzCisgICAgICBmaQorICAgICAgOzsKKworICAgIGhwdXgxMSopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAtYSAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJY2FzZSAkaG9zdF9jcHUgaW4KKwlocHBhKjY0KikKKwkgIGFyY2hpdmVfY21kc19HQ0o9JyRDQyAtc2hhcmVkICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwlpYTY0KikKKwkgIGFyY2hpdmVfY21kc19HQ0o9JyRDQyAtc2hhcmVkICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwkqKQorCSAgYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJZXNhYworICAgICAgZWxzZQorCWNhc2UgJGhvc3RfY3B1IGluCisJaHBwYSo2NCopCisJICBhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCWlhNjQqKQorCSAgYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwkqKQorCSAgYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisJaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9HQ0o9OgorCisJY2FzZSAkaG9zdF9jcHUgaW4KKwlocHBhKjY0KnxpYTY0KikKKwkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfR0NKPScrYiAkbGliZGlyJworCSAgaGFyZGNvZGVfZGlyZWN0X0dDSj1ubworCSAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9bm8KKwkgIDs7CisJKikKKwkgIGhhcmRjb2RlX2RpcmVjdF9HQ0o9eWVzCisJICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfR0NKPScke3dsfS1FJworCisJICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorCSAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisJICBoYXJkY29kZV9taW51c19MX0dDSj15ZXMKKwkgIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwlhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmdgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgICAgICBlbHNlCisJYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkX0dDSj0nLXJwYXRoICRsaWJkaXInCisgICAgICBmaQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfR0NKPToKKyAgICAgIGxpbmtfYWxsX2RlcGxpYnNfR0NKPXllcworICAgICAgOzsKKworICAgIG5ldGJzZCopCisgICAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisJYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycgICMgYS5vdXQKKyAgICAgIGVsc2UKKwlhcmNoaXZlX2NtZHNfR0NKPSckTEQgLXNoYXJlZCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnICAgICAgIyBFTEYKKyAgICAgIGZpCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nLVIkbGliZGlyJworICAgICAgaGFyZGNvZGVfZGlyZWN0X0dDSj15ZXMKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPW5vCisgICAgICA7OworCisgICAgbmV3c29zNikKKyAgICAgIGFyY2hpdmVfY21kc19HQ0o9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGhhcmRjb2RlX2RpcmVjdF9HQ0o9eWVzCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9HQ0o9OgorICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9bm8KKyAgICAgIDs7CisKKyAgICBvcGVuYnNkKikKKyAgICAgIGhhcmRjb2RlX2RpcmVjdF9HQ0o9eWVzCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0dDSj1ubworICAgICAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisJYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCWFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMnCisJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0dDSj0nJHt3bH0tRScKKyAgICAgIGVsc2UKKyAgICAgICBjYXNlICRob3N0X29zIGluCisJIG9wZW5ic2RbMDFdLiogfCBvcGVuYnNkMi5bMC03XSB8IG9wZW5ic2QyLlswLTddLiopCisJICAgYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nLVIkbGliZGlyJworCSAgIDs7CisJICopCisJICAgYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPScke3dsfS1ycGF0aCwkbGliZGlyJworCSAgIDs7CisgICAgICAgZXNhYworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBvczIqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9Jy1MJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX21pbnVzX0xfR0NKPXllcworICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKPXVuc3VwcG9ydGVkCisgICAgICBhcmNoaXZlX2NtZHNfR0NKPSckZWNobyAiTElCUkFSWSAkbGlibmFtZSBJTklUSU5TVEFOQ0UiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRlY2hvICJERVNDUklQVElPTiBcIiRsaWJuYW1lXCIiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kZWNobyBEQVRBID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kZWNobyAiIFNJTkdMRSBOT05TSEFSRUQiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kZWNobyBFWFBPUlRTID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn5lbXhleHAgJGxpYm9ianMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRDQyAtWmRsbCAtWmNydGRsbCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCisgICAgICBvbGRfYXJjaGl2ZV9Gcm9tX25ld19jbWRzX0dDSj0nZW14aW1wIC1vICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmEgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJworICAgICAgOzsKKworICAgIG9zZjMqKQorICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwlhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworCWFyY2hpdmVfY21kc19HQ0o9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworICAgICAgZWxzZQorCWFsbG93X3VuZGVmaW5lZF9mbGFnX0dDSj0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKKwlhcmNoaXZlX2NtZHNfR0NKPSckTEQgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgICAgICBmaQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfR0NKPToKKyAgICAgIDs7CisKKyAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKwlhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBlbHNlCisJYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworCWFyY2hpdmVfY21kc19HQ0o9JyRMRCAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwlhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0nZm9yIGkgaW4gYGNhdCAkZXhwb3J0X3N5bWJvbHNgOyBkbyBwcmludGYgIiVzICVzXFxuIiAtZXhwb3J0ZWRfc3ltYm9sICJcJGkiID4+ICRsaWIuZXhwOyBkb25lOyBlY2hvICItaGlkZGVuIj4+ICRsaWIuZXhwfgorCSRMRCAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWlucHV0ICRsaWIuZXhwICRsaW5rZXJfZmxhZ3MgJGxpYm9ianMgJGRlcGxpYnMgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWJ+JHJtICRsaWIuZXhwJworCisJIyBCb3RoIGMgYW5kIGN4eCBjb21waWxlciBzdXBwb3J0IC1ycGF0aCBkaXJlY3RseQorCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPSctcnBhdGggJGxpYmRpcicKKyAgICAgIGZpCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0dDSj06CisgICAgICA7OworCisgICAgc29sYXJpcyopCisgICAgICBub191bmRlZmluZWRfZmxhZ19HQ0o9JyAteiB0ZXh0JworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwl3bGFyYz0nJHt3bH0nCisJYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJYXJjaGl2ZV9leHBzeW1fY21kc19HQ0o9JyRlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfiRlY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorCSAgJENDIC1zaGFyZWQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRybSAkbGliLmV4cCcKKyAgICAgIGVsc2UKKwl3bGFyYz0nJworCWFyY2hpdmVfY21kc19HQ0o9JyRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCWFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSckZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH4kZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKyAgCSRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1NICRsaWIuZXhwIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfiRybSAkbGliLmV4cCcKKyAgICAgIGZpCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nLVIkbGliZGlyJworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9bm8KKyAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIHNvbGFyaXMyLlswLTVdIHwgc29sYXJpczIuWzAtNV0uKikgOzsKKyAgICAgICopCisgCSMgVGhlIGNvbXBpbGVyIGRyaXZlciB3aWxsIGNvbWJpbmUgbGlua2VyIG9wdGlvbnMgc28gd2UKKyAJIyBjYW5ub3QganVzdCBwYXNzIHRoZSBjb252aWVuY2UgbGlicmFyeSBuYW1lcyB0aHJvdWdoCisgCSMgd2l0aG91dCAkd2wsIGlmZiB3ZSBkbyBub3QgbGluayB3aXRoICRMRC4KKyAJIyBMdWNraWx5LCBnY2Mgc3VwcG9ydHMgdGhlIHNhbWUgc3ludGF4IHdlIG5lZWQgZm9yIFN1biBTdHVkaW8uCisgCSMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCisgCWNhc2UgJHdsYXJjIGluCisgCScnKQorIAkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0dDSj0nLXogYWxsZXh0cmFjdCRjb252ZW5pZW5jZSAteiBkZWZhdWx0ZXh0cmFjdCcgOzsKKyAJKikKKyAJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LXogJHt3bH1hbGxleHRyYWN0YGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJGVjaG8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LXogJHt3bH1kZWZhdWx0ZXh0cmFjdCcgOzsKKyAJZXNhYyA7OworICAgICAgZXNhYworICAgICAgbGlua19hbGxfZGVwbGlic19HQ0o9eWVzCisgICAgICA7OworCisgICAgc3Vub3M0KikKKyAgICAgIGlmIHRlc3QgIngkaG9zdF92ZW5kb3IiID0geHNlcXVlbnQ7IHRoZW4KKwkjIFVzZSAkQ0MgdG8gbGluayB1bmRlciBzZXF1ZW50LCBiZWNhdXNlIGl0IHRocm93cyBpbiBzb21lIGV4dHJhIC5vCisJIyBmaWxlcyB0aGF0IG1ha2UgLmluaXQgYW5kIC5maW5pIHNlY3Rpb25zIHdvcmsuCisJYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1HICR7d2x9LWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGVsc2UKKwlhcmNoaXZlX2NtZHNfR0NKPSckTEQgLWFzc2VydCBwdXJlLXRleHQgLUJzdGF0aWMgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgZmkKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPSctTCRsaWJkaXInCisgICAgICBoYXJkY29kZV9kaXJlY3RfR0NKPXllcworICAgICAgaGFyZGNvZGVfbWludXNfTF9HQ0o9eWVzCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0dDSj1ubworICAgICAgOzsKKworICAgIHN5c3Y0KQorICAgICAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKwlzbmkpCisJICBhcmNoaXZlX2NtZHNfR0NKPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICBoYXJkY29kZV9kaXJlY3RfR0NKPXllcyAjIGlzIHRoaXMgcmVhbGx5IHRydWU/Pz8KKwk7OworCXNpZW1lbnMpCisJICAjIyBMRCBpcyBsZCBpdCBtYWtlcyBhIFBMQU1MSUIKKwkgICMjIENDIGp1c3QgbWFrZXMgYSBHcm9zc01vZHVsZS4KKwkgIGFyY2hpdmVfY21kc19HQ0o9JyRMRCAtRyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICByZWxvYWRfY21kc19HQ0o9JyRDQyAtciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworCSAgaGFyZGNvZGVfZGlyZWN0X0dDSj1ubworICAgICAgICA7OworCW1vdG9yb2xhKQorCSAgYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgaGFyZGNvZGVfZGlyZWN0X0dDSj1ubyAjTW90b3JvbGEgbWFudWFsIHNheXMgeWVzLCBidXQgbXkgdGVzdHMgc2F5IHRoZXkgbGllCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPW5vCisgICAgICA7OworCisgICAgc3lzdjQuMyopCisgICAgICBhcmNoaXZlX2NtZHNfR0NKPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0dDSj1ubworICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0dDSj0nLUJleHBvcnQnCisgICAgICA7OworCisgICAgc3lzdjQqTVAqKQorICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgorCWFyY2hpdmVfY21kc19HQ0o9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwloYXJkY29kZV9zaGxpYnBhdGhfdmFyX0dDSj1ubworCXJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICisJaGFyZGNvZGVfcnVucGF0aF92YXI9eWVzCisJbGRfc2hsaWJzX0dDSj15ZXMKKyAgICAgIGZpCisgICAgICA7OworCisgICAgc3lzdjQqdXcyKiB8IHN5c3Y1T3BlblVOSVgqIHwgc3lzdjVVbml4V2FyZTcuWzAxXS5bMTBdKiB8IHVuaXh3YXJlNyopCisgICAgICBub191bmRlZmluZWRfZmxhZ19HQ0o9JyR7d2x9LXosdGV4dCcKKyAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjX0dDSj1ubworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9bm8KKyAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKKworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwlhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJYXJjaGl2ZV9leHBzeW1fY21kc19HQ0o9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGVsc2UKKwlhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLUcgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCWFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqKQorICAgICAgIyBOb3RlOiBXZSBjYW4gTk9UIHVzZSAteiBkZWZzIGFzIHdlIG1pZ2h0IGRlc2lyZSwgYmVjYXVzZSB3ZSBkbyBub3QKKyAgICAgICMgbGluayB3aXRoIC1sYywgYW5kIHRoYXQgd291bGQgY2F1c2UgYW55IHN5bWJvbHMgdXNlZCBmcm9tIGxpYmMgdG8KKyAgICAgICMgYWx3YXlzIGJlIHVucmVzb2x2ZWQsIHdoaWNoIG1lYW5zIGp1c3QgYWJvdXQgbm8gbGlicmFyeSB3b3VsZAorICAgICAgIyBldmVyIGxpbmsgY29ycmVjdGx5LiAgSWYgd2UncmUgbm90IHVzaW5nIEdOVSBsZCB3ZSB1c2UgLXogdGV4dAorICAgICAgIyB0aG91Z2gsIHdoaWNoIGRvZXMgY2F0Y2ggc29tZSBiYWQgc3ltYm9scyBidXQgaXNuJ3QgYXMgaGVhdnktaGFuZGVkCisgICAgICAjIGFzIC16IGRlZnMuCisgICAgICBub191bmRlZmluZWRfZmxhZ19HQ0o9JyR7d2x9LXosdGV4dCcKKyAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0dDSj0nJHt3bH0teixub2RlZnMnCisgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sY19HQ0o9bm8KKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPW5vCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nYHRlc3QgLXogIiRTQ09BQlNQQVRIIiAmJiBlY2hvICR7d2x9LVIsJGxpYmRpcmAnCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0dDSj0nOicKKyAgICAgIGxpbmtfYWxsX2RlcGxpYnNfR0NKPXllcworICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0dDSj0nJHt3bH0tQmV4cG9ydCcKKyAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKKworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwlhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCWFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCWFyY2hpdmVfY21kc19HQ0o9JyRDQyAtRyAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCWFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgdXRzNCopCisgICAgICBhcmNoaXZlX2NtZHNfR0NKPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nLUwkbGliZGlyJworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9bm8KKyAgICAgIDs7CisKKyAgICAqKQorICAgICAgbGRfc2hsaWJzX0dDSj1ubworICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGxkX3NobGlic19HQ0oiID4mNQorZWNobyAiJHtFQ0hPX1R9JGxkX3NobGlic19HQ0oiID4mNjsgfQordGVzdCAiJGxkX3NobGlic19HQ0oiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubworCisjCisjIERvIHdlIG5lZWQgdG8gZXhwbGljaXRseSBsaW5rIGxpYmM/CisjCitjYXNlICJ4JGFyY2hpdmVfY21kc19uZWVkX2xjX0dDSiIgaW4KK3h8eHllcykKKyAgIyBBc3N1bWUgLWxjIHNob3VsZCBiZSBhZGRlZAorICBhcmNoaXZlX2NtZHNfbmVlZF9sY19HQ0o9eWVzCisKKyAgaWYgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgY2FzZSAkYXJjaGl2ZV9jbWRzX0dDSiBpbgorICAgIConficqKQorICAgICAgIyBGSVhNRTogd2UgbWF5IGhhdmUgdG8gZGVhbCB3aXRoIG11bHRpLWNvbW1hbmQgc2VxdWVuY2VzLgorICAgICAgOzsKKyAgICAnJENDICcqKQorICAgICAgIyBUZXN0IHdoZXRoZXIgdGhlIGNvbXBpbGVyIGltcGxpY2l0bHkgbGlua3Mgd2l0aCAtbGMgc2luY2Ugb24gc29tZQorICAgICAgIyBzeXN0ZW1zLCAtbGdjYyBoYXMgdG8gY29tZSBiZWZvcmUgLWxjLiBJZiBnY2MgYWxyZWFkeSBwYXNzZXMgLWxjCisgICAgICAjIHRvIGxkLCBkb24ndCBhZGQgLWxjIGJlZm9yZSAtbGdjYy4KKyAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbiIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbi4uLiAkRUNIT19DIiA+JjY7IH0KKyAgICAgICRybSBjb25mdGVzdCoKKyAgICAgIHByaW50ZiAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisKKyAgICAgIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAyPmNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICAgICBzb25hbWU9Y29uZnRlc3QKKyAgICAgICAgbGliPWNvbmZ0ZXN0CisgICAgICAgIGxpYm9ianM9Y29uZnRlc3QuJGFjX29iamV4dAorICAgICAgICBkZXBsaWJzPQorICAgICAgICB3bD0kbHRfcHJvZ19jb21waWxlcl93bF9HQ0oKKwlwaWNfZmxhZz0kbHRfcHJvZ19jb21waWxlcl9waWNfR0NKCisgICAgICAgIGNvbXBpbGVyX2ZsYWdzPS12CisgICAgICAgIGxpbmtlcl9mbGFncz0tdgorICAgICAgICB2ZXJzdHJpbmc9CisgICAgICAgIG91dHB1dF9vYmpkaXI9LgorICAgICAgICBsaWJuYW1lPWNvbmZ0ZXN0CisgICAgICAgIGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGFsbG93X3VuZGVmaW5lZF9mbGFnX0dDSgorICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9CisgICAgICAgIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFyY2hpdmVfY21kc19HQ0ogMlw+XCYxIFx8IGdyZXAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMVwiIikgPiY1CisgIChldmFsICRhcmNoaXZlX2NtZHNfR0NKIDJcPlwmMSBcfCBncmVwIFwiIC1sYyBcIiBcPi9kZXYvbnVsbCAyXD5cJjEpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KKyAgICAgICAgdGhlbgorCSAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfR0NKPW5vCisgICAgICAgIGVsc2UKKwkgIGFyY2hpdmVfY21kc19uZWVkX2xjX0dDSj15ZXMKKyAgICAgICAgZmkKKyAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKPSRsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnCisgICAgICBlbHNlCisgICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQorICAgICAgZmkKKyAgICAgICRybSBjb25mdGVzdCoKKyAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFyY2hpdmVfY21kc19uZWVkX2xjX0dDSiIgPiY1CitlY2hvICIke0VDSE9fVH0kYXJjaGl2ZV9jbWRzX25lZWRfbGNfR0NKIiA+JjY7IH0KKyAgICAgIDs7CisgICAgZXNhYworICBmaQorICA7OworZXNhYworCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3MiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3MuLi4gJEVDSE9fQyIgPiY2OyB9CitsaWJyYXJ5X25hbWVzX3NwZWM9CitsaWJuYW1lX3NwZWM9J2xpYiRuYW1lJworc29uYW1lX3NwZWM9CitzaHJleHRfY21kcz0iLnNvIgorcG9zdGluc3RhbGxfY21kcz0KK3Bvc3R1bmluc3RhbGxfY21kcz0KK2ZpbmlzaF9jbWRzPQorZmluaXNoX2V2YWw9CitzaGxpYnBhdGhfdmFyPQorc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXVua25vd24KK3ZlcnNpb25fdHlwZT1ub25lCitkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCitzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiIKK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJENDIC1wcmludC1zZWFyY2gtZGlycyB8IGdyZXAgIl5saWJyYXJpZXM6IiB8ICRTRUQgLWUgInMvXmxpYnJhcmllczovLyIgLWUgInMsPS8sLyxnImAKKyAgaWYgZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBncmVwICc7JyA+L2Rldi9udWxsIDsgdGhlbgorICAgICMgaWYgdGhlIHBhdGggY29udGFpbnMgIjsiIHRoZW4gd2UgYXNzdW1lIGl0IHRvIGJlIHRoZSBzZXBhcmF0b3IKKyAgICAjIG90aGVyd2lzZSBkZWZhdWx0IHRvIHRoZSBzdGFuZGFyZCBwYXRoIHNlcGFyYXRvciAoaS5lLiAiOiIpIC0gaXQgaXMKKyAgICAjIGFzc3VtZWQgdGhhdCBubyBwYXJ0IG9mIGEgbm9ybWFsIHBhdGhuYW1lIGNvbnRhaW5zICI7IiBidXQgdGhhdCBzaG91bGQKKyAgICAjIG9rYXkgaW4gdGhlIHJlYWwgd29ybGQgd2hlcmUgIjsiIGluIGRpcnBhdGhzIGlzIGl0c2VsZiBwcm9ibGVtYXRpYy4KKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGVjaG8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCisgIGVsc2UKKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGVjaG8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisgIGZpCitlbHNlCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiIKK2ZpCituZWVkX2xpYl9wcmVmaXg9dW5rbm93bgoraGFyZGNvZGVfaW50b19saWJzPW5vCisKKyMgd2hlbiB5b3Ugc2V0IG5lZWRfdmVyc2lvbiB0byBubywgbWFrZSBzdXJlIGl0IGRvZXMgbm90IGNhdXNlIC1zZXRfdmVyc2lvbgorIyBmbGFncyB0byBiZSBsZWZ0IHdpdGhvdXQgYXJndW1lbnRzCituZWVkX3ZlcnNpb249dW5rbm93bgorCitjYXNlICRob3N0X29zIGluCithaXgzKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZS5hJworICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKKworICAjIEFJWCAzIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIHdlIGFwcGVuZCBhIG1ham9yIHZlcnNpb24gdG8gdGhlIG5hbWUuCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIDs7CisKK2FpeDQqIHwgYWl4NSopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICAjIEFJWCA1IHN1cHBvcnRzIElBNjQKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBlbHNlCisgICAgIyBXaXRoIEdDQyB1cCB0byAyLjk1LngsIGNvbGxlY3QyIHdvdWxkIGNyZWF0ZSBhbiBpbXBvcnQgZmlsZQorICAgICMgZm9yIGRlcGVuZGVuY2UgbGlicmFyaWVzLiAgVGhlIGltcG9ydCBmaWxlIHdvdWxkIHN0YXJ0IHdpdGgKKyAgICAjIHRoZSBsaW5lIGAjISAuJy4gIFRoaXMgd291bGQgY2F1c2UgdGhlIGdlbmVyYXRlZCBsaWJyYXJ5IHRvCisgICAgIyBkZXBlbmQgb24gYC4nLCBhbHdheXMgYW4gaW52YWxpZCBsaWJyYXJ5LiAgVGhpcyB3YXMgZml4ZWQgaW4KKyAgICAjIGRldmVsb3BtZW50IHNuYXBzaG90cyBvZiBHQ0MgcHJpb3IgdG8gMy4wLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeDQgfCBhaXg0LlswMV0gfCBhaXg0LlswMV0uKikKKyAgICAgIGlmIHsgZWNobyAnI2lmIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA5NyknCisJICAgZWNobyAnIHllcyAnCisJICAgZWNobyAnI2VuZGlmJzsgfSB8ICR7Q0N9IC1FIC0gfCBncmVwIHllcyA+IC9kZXYvbnVsbDsgdGhlbgorCToKKyAgICAgIGVsc2UKKwljYW5fYnVpbGRfc2hhcmVkPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBlc2FjCisgICAgIyBBSVggKG9uIFBvd2VyKikgaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gY3VycmVudGx5IHdlIGNhbiBub3QgaGFyZGNvZGUgY29ycmVjdAorICAgICMgc29uYW1lIGludG8gZXhlY3V0YWJsZS4gUHJvYmFibHkgd2UgY2FuIGFkZCB2ZXJzaW9uaW5nIHN1cHBvcnQgdG8KKyAgICAjIGNvbGxlY3QyLCBzbyBhZGRpdGlvbmFsIGxpbmtzIGNhbiBiZSB1c2VmdWwgaW4gZnV0dXJlLgorICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorICAgICAgIyBJZiB1c2luZyBydW4gdGltZSBsaW5raW5nIChvbiBBSVggNC4yIG9yIGxhdGVyKSB1c2UgbGliPG5hbWU+LnNvCisgICAgICAjIGluc3RlYWQgb2YgbGliPG5hbWU+LmEgdG8gbGV0IHBlb3BsZSBrbm93IHRoYXQgdGhlc2UgYXJlIG5vdAorICAgICAgIyB0eXBpY2FsIEFJWCBzaGFyZWQgbGlicmFyaWVzLgorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgZWxzZQorICAgICAgIyBXZSBwcmVzZXJ2ZSAuYSBhcyBleHRlbnNpb24gZm9yIHNoYXJlZCBsaWJyYXJpZXMgdGhyb3VnaCBBSVg0LjIKKyAgICAgICMgYW5kIGxhdGVyIHdoZW4gd2UgYXJlIG5vdCBkb2luZyBydW4gdGltZSBsaW5raW5nLgorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfS5hICRsaWJuYW1lLmEnCisgICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIGZpCisgICAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICisgIGZpCisgIDs7CisKK2FtaWdhb3MqKQorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLml4bGlicmFyeSAkbGlibmFtZS5hJworICAjIENyZWF0ZSAke2xpYm5hbWV9X2l4bGlicmFyeS5hIGVudHJpZXMgaW4gL3N5cy9saWJzLgorICBmaW5pc2hfZXZhbD0nZm9yIGxpYiBpbiBgbHMgJGxpYmRpci8qLml4bGlicmFyeSAyPi9kZXYvbnVsbGA7IGRvIGxpYm5hbWU9YCRlY2hvICJYJGxpYiIgfCAkWHNlZCAtZSAnXCcncyVeLiovXChbXi9dKlwpXC5peGxpYnJhcnkkJVwxJSdcJydgOyB0ZXN0ICRybSAvc3lzL2xpYnMvJHtsaWJuYW1lfV9peGxpYnJhcnkuYTsgJHNob3cgImNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEiOyBjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIHx8IGV4aXQgMTsgZG9uZScKKyAgOzsKKworYmVvcyopCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKKyAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgOzsKKworYnNkaVs0NV0qKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9zaGxpYiAvdXNyL2xpYiAvdXNyL1gxMS9saWIgL3Vzci9jb250cmliL2xpYiAvbGliIC91c3IvbG9jYWwvbGliIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliIgorICAjIHRoZSBkZWZhdWx0IGxkLnNvLmNvbmYgYWxzbyBjb250YWlucyAvdXNyL2NvbnRyaWIvbGliIGFuZAorICAjIC91c3IvWDExUjYvbGliICgvdXNyL1gxMSBpcyBhIGxpbmsgdG8gL3Vzci9YMTFSNiksIGJ1dCBsZXQgdXMgYWxsb3cKKyAgIyBsaWJ0b29sIHRvIGhhcmQtY29kZSB0aGVzZSBpbnRvIHByb2dyYW1zCisgIDs7CisKK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKyAgdmVyc2lvbl90eXBlPXdpbmRvd3MKKyAgc2hyZXh0X2NtZHM9Ii5kbGwiCisgIG5lZWRfdmVyc2lvbj1ubworICBuZWVkX2xpYl9wcmVmaXg9bm8KKworICBjYXNlICRHQ0MsJGhvc3Rfb3MgaW4KKyAgeWVzLGN5Z3dpbiogfCB5ZXMsbWluZ3cqIHwgeWVzLHB3MzIqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCisgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7ZWNobyBcJGRsbmFtZSdcJydgfgorICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgorICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CisgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWV+CisgICAgICBjaG1vZCBhK3ggXCRkbGRpci8kZGxuYW1lJworICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgorICAgICAgICRybSBcJGRscGF0aCcKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgY3lnd2luKikKKyAgICAgICMgQ3lnd2luIERMTHMgdXNlICdjeWcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJworICAgICAgc29uYW1lX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9jeWcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiAvbGliL3czMmFwaSAvbGliIC91c3IvbG9jYWwvbGliIgorICAgICAgOzsKKyAgICBtaW5ndyopCisgICAgICAjIE1pbkdXIERMTHMgdXNlIHRyYWRpdGlvbmFsICdsaWInIHByZWZpeAorICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgZ3JlcCAiXmxpYnJhcmllczoiIHwgJFNFRCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAicyw9LywvLGciYAorICAgICAgaWYgZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBncmVwICc7W2MtekMtWl06LycgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAjIEl0IGlzIG1vc3QgcHJvYmFibHkgYSBXaW5kb3dzIGZvcm1hdCBQQVRIIHByaW50ZWQgYnkKKyAgICAgICAgIyBtaW5ndyBnY2MsIGJ1dCB3ZSBhcmUgcnVubmluZyBvbiBDeWd3aW4uIEdjYyBwcmludHMgaXRzIHNlYXJjaAorICAgICAgICAjIHBhdGggd2l0aCA7IHNlcGFyYXRvcnMsIGFuZCB3aXRoIGRyaXZlIGxldHRlcnMuIFdlIGNhbiBoYW5kbGUgdGhlCisgICAgICAgICMgZHJpdmUgbGV0dGVycyAoY3lnd2luIGZpbGV1dGlscyB1bmRlcnN0YW5kcyB0aGVtKSwgc28gbGVhdmUgdGhlbSwKKyAgICAgICAgIyBlc3BlY2lhbGx5IGFzIHdlIG1pZ2h0IHBhc3MgZmlsZXMgZm91bmQgdGhlcmUgdG8gYSBtaW5ndyBvYmpkdW1wLAorICAgICAgICAjIHdoaWNoIHdvdWxkbid0IHVuZGVyc3RhbmQgYSBjeWd3aW5pZmllZCBwYXRoLiBBaGguCisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKKyAgICAgIGVsc2UKKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorICAgICAgZmkKKyAgICAgIDs7CisgICAgcHczMiopCisgICAgICAjIHB3MzIgRExMcyB1c2UgJ3B3JyBwcmVmaXggcmF0aGVyIHRoYW4gJ2xpYicKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKyAgICAgIDs7CisgICAgZXNhYworICAgIDs7CisKKyAgKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKKyAgICA7OworICBlc2FjCisgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICMgRklYTUU6IGZpcnN0IHdlIHNob3VsZCBzZWFyY2ggLiBhbmQgdGhlIGRpcmVjdG9yeSB0aGUgZXhlY3V0YWJsZSBpcyBpbgorICBzaGxpYnBhdGhfdmFyPVBBVEgKKyAgOzsKKworZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGR5bGQiCisgIHZlcnNpb25fdHlwZT1kYXJ3aW4KKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHt2ZXJzdWZmaXh9JHNoYXJlZF9leHQgJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0ICR7bGlibmFtZX0kc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCcKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBzaGxpYnBhdGhfdmFyPURZTERfTElCUkFSWV9QQVRICisgIHNocmV4dF9jbWRzPSdgdGVzdCAuJG1vZHVsZSA9IC55ZXMgJiYgZWNobyAuc28gfHwgZWNobyAuZHlsaWJgJworICAjIEFwcGxlJ3MgZ2NjIHByaW50cyAnZ2NjIC1wcmludC1zZWFyY2gtZGlycycgZG9lc24ndCBvcGVyYXRlIHRoZSBzYW1lLgorICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJENDIC1wcmludC1zZWFyY2gtZGlycyB8IHRyICJcbiIgIiRQQVRIX1NFUEFSQVRPUiIgfCBzZWQgLWUgJ3MvbGlicmFyaWVzOi9AbGlicmFyaWVzOi8nIHwgdHIgIkAiICJcbiIgfCBncmVwICJebGlicmFyaWVzOiIgfCBzZWQgLWUgInMvXmxpYnJhcmllczovLyIgLWUgInMsPS8sLyxnIiAtZSAicywkUEFUSF9TRVBBUkFUT1IsICxnIiAtZSAicywuKiwmIC9saWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIsZyJgCisgIGVsc2UKKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy9saWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWInCisgIGZpCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvbGliIC91c3IvbGliJworICA7OworCitkZ3V4KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICA7OworCitmcmVlYnNkMSopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7CisKK2tmcmVlYnNkKi1nbnUpCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGR5bmFtaWNfbGlua2VyPSdHTlUgbGQuc28nCisgIDs7CisKK2ZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgIyBEcmFnb25GbHkgZG9lcyBub3QgaGF2ZSBhb3V0LiAgV2hlbi9pZiB0aGV5IGltcGxlbWVudCBhIG5ldworICAjIHZlcnNpb25pbmcgbWVjaGFuaXNtLCBhZGp1c3QgdGhpcy4KKyAgaWYgdGVzdCAteCAvdXNyL2Jpbi9vYmpmb3JtYXQ7IHRoZW4KKyAgICBvYmpmb3JtYXQ9YC91c3IvYmluL29iamZvcm1hdGAKKyAgZWxzZQorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBmcmVlYnNkWzEyM10qKSBvYmpmb3JtYXQ9YW91dCA7OworICAgICopIG9iamZvcm1hdD1lbGYgOzsKKyAgICBlc2FjCisgIGZpCisgIHZlcnNpb25fdHlwZT1mcmVlYnNkLSRvYmpmb3JtYXQKKyAgY2FzZSAkdmVyc2lvbl90eXBlIGluCisgICAgZnJlZWJzZC1lbGYqKQorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgICBuZWVkX3ZlcnNpb249bm8KKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgOzsKKyAgICBmcmVlYnNkLSopCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgICAgIG5lZWRfdmVyc2lvbj15ZXMKKyAgICAgIDs7CisgIGVzYWMKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBmcmVlYnNkMiopCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIDs7CisgIGZyZWVic2QzLlswMV0qIHwgZnJlZWJzZGVsZjMuWzAxXSopCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICA7OworICBmcmVlYnNkMy5bMi05XSogfCBmcmVlYnNkZWxmMy5bMi05XSogfCBcCisgIGZyZWVic2Q0LlswLTVdIHwgZnJlZWJzZGVsZjQuWzAtNV0gfCBmcmVlYnNkNC4xLjEgfCBmcmVlYnNkZWxmNC4xLjEpCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIDs7CisgIGZyZWVic2QqKSAjIGZyb20gNC42IG9uCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICA7OworICBlc2FjCisgIDs7CisKK2dudSopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0ke21ham9yfSAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCitocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKyAgIyBHaXZlIGEgc29uYW1lIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1ham9yIHZlcnNpb24gc28gdGhhdCBkbGQuc2wgcmVmdXNlcyB0bworICAjIGxpbmsgYWdhaW5zdCBvdGhlciB2ZXJzaW9ucy4KKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgaWE2NCopCisgICAgc2hyZXh0X2NtZHM9Jy5zbycKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbyIKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIGlmIHRlc3QgIlgkSFBVWF9JQTY0X01PREUiID0gWDMyOyB0aGVuCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIiCisgICAgZWxzZQorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9ocHV4NjQgL3Vzci9sb2NhbC9saWIvaHB1eDY0IgorICAgIGZpCisgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYworICAgIDs7CisgICBocHBhKjY0KikKKyAgICAgc2hyZXh0X2NtZHM9Jy5zbCcKKyAgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgorICAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSCAjIEhvdyBzaG91bGQgd2UgaGFuZGxlIFNITElCX1BBVEgKKyAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgorICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9wYTIwXzY0IC91c3IvY2NzL2xpYi9wYTIwXzY0IgorICAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisgICAgIDs7CisgICAqKQorICAgIHNocmV4dF9jbWRzPScuc2wnCisgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKKyAgICBzaGxpYnBhdGhfdmFyPVNITElCX1BBVEgKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8gIyArcyBpcyByZXF1aXJlZCB0byBlbmFibGUgU0hMSUJfUEFUSAorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgOzsKKyAgZXNhYworICAjIEhQLVVYIHJ1bnMgKnJlYWxseSogc2xvd2x5IHVubGVzcyBzaGFyZWQgbGlicmFyaWVzIGFyZSBtb2RlIDU1NS4KKyAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNTU1ICRsaWInCisgIDs7CisKK2ludGVyaXgzKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgZHluYW1pY19saW5rZXI9J0ludGVyaXggMy54IGxkLnNvLjEgKFBFLCBsaWtlIEVMRiknCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK2lyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBub25zdG9wdXgqKSB2ZXJzaW9uX3R5cGU9bm9uc3RvcHV4IDs7CisgICAgKikKKwlpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19nbnVfbGQiID0geWVzOyB0aGVuCisJCXZlcnNpb25fdHlwZT1saW51eAorCWVsc2UKKwkJdmVyc2lvbl90eXBlPWlyaXgKKwlmaSA7OworICBlc2FjCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBjYXNlICRob3N0X29zIGluCisgIGlyaXg1KiB8IG5vbnN0b3B1eCopCisgICAgbGlic3VmZj0gc2hsaWJzdWZmPQorICAgIDs7CisgICopCisgICAgY2FzZSAkTEQgaW4gIyBsaWJ0b29sLm00IHdpbGwgYWRkIG9uZSBvZiB0aGVzZSBzd2l0Y2hlcyB0byBMRAorICAgICotMzJ8KiItMzIgInwqLW1lbGYzMmJzbWlwfCoiLW1lbGYzMmJzbWlwICIpCisgICAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPTMyLWJpdDs7CisgICAgKi1uMzJ8KiItbjMyICJ8Ki1tZWxmMzJibWlwbjMyfCoiLW1lbGYzMmJtaXBuMzIgIikKKyAgICAgIGxpYnN1ZmY9MzIgc2hsaWJzdWZmPU4zMiBsaWJtYWdpYz1OMzI7OworICAgICotNjR8KiItNjQgInwqLW1lbGY2NGJtaXB8KiItbWVsZjY0Ym1pcCAiKQorICAgICAgbGlic3VmZj02NCBzaGxpYnN1ZmY9NjQgbGlibWFnaWM9NjQtYml0OzsKKyAgICAqKSBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPW5ldmVyLW1hdGNoOzsKKyAgICBlc2FjCisgICAgOzsKKyAgZXNhYworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUlkke3NobGlic3VmZn1fUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0gL3Vzci9sb2NhbC9saWIke2xpYnN1ZmZ9IgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IgorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKKyMgTm8gc2hhcmVkIGxpYiBzdXBwb3J0IGZvciBMaW51eCBvbGRsZCwgYW91dCwgb3IgY29mZi4KK2xpbnV4Km9sZGxkKiB8IGxpbnV4KmFvdXQqIHwgbGludXgqY29mZiopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7CisKKyMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KK2xpbnV4KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1uICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAjIFRoaXMgaW1wbGllcyBubyBmYXN0X2luc3RhbGwsIHdoaWNoIGlzIHVuYWNjZXB0YWJsZS4KKyAgIyBTb21lIHJld29yayB3aWxsIGJlIG5lZWRlZCB0byBhbGxvdyBmb3IgZmFzdF9pbnN0YWxsCisgICMgYmVmb3JlIHRoaXMgY2FuIGJlIGVuYWJsZWQuCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKworICAjIGZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcKKyAgbGlic3VmZj0KKyAgY2FzZSAiJGhvc3RfY3B1IiBpbgorICB4ODZfNjQqfHMzOTB4Knxwb3dlcnBjNjQqKQorICAgIGVjaG8gJyNsaW5lIDMwODE2ICJjb25maWd1cmUiJyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KKyAgICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKyAgICAgICo2NC1iaXQqKQorICAgICAgICBsaWJzdWZmPTY0CisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiR7bGlic3VmZn0gL3Vzci9saWIke2xpYnN1ZmZ9IC91c3IvbG9jYWwvbGliJHtsaWJzdWZmfSIKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICAgIHJtIC1yZiBjb25mdGVzdCoKKyAgICA7OworICBlc2FjCisKKyAgIyBBcHBlbmQgbGQuc28uY29uZiBjb250ZW50cyB0byB0aGUgc2VhcmNoIHBhdGgKKyAgaWYgdGVzdCAtZiAvZXRjL2xkLnNvLmNvbmY7IHRoZW4KKyAgICBsdF9sZF9leHRyYT1gYXdrICcvXmluY2x1ZGUgLyB7IHN5c3RlbShzcHJpbnRmKCJjZCAvZXRjOyBjYXQgJXMgMj4vZGV2L251bGwiLCBcJDIpKTsgc2tpcCA9IDE7IH0geyBpZiAoIXNraXApIHByaW50IFwkMDsgc2tpcCA9IDA7IH0nIDwgL2V0Yy9sZC5zby5jb25mIHwgJFNFRCAtZSAncy9eCSAqLy87cy8jLiovLzsvXlteXC9dL2Q7cy9bOiwJXS8gL2c7cy89W149XSokLy87cy89W149IF0qIC8gL2c7L14kL2QnIHwgdHIgJ1xuJyAnICdgCisgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWIke2xpYnN1ZmZ9IC91c3IvbGliJHtsaWJzdWZmfSAkbHRfbGRfZXh0cmEiCisgIGZpCisKKyAgIyBXZSB1c2VkIHRvIHRlc3QgZm9yIC9saWIvbGQuc28uMSBhbmQgZGlzYWJsZSBzaGFyZWQgbGlicmFyaWVzIG9uCisgICMgcG93ZXJwYywgYmVjYXVzZSBNa0xpbnV4IG9ubHkgc3VwcG9ydGVkIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB0aGUKKyAgIyBHTlUgZHluYW1pYyBsaW5rZXIuICBTaW5jZSB0aGlzIHdhcyBicm9rZW4gd2l0aCBjcm9zcyBjb21waWxlcnMsCisgICMgbW9zdCBwb3dlcnBjLWxpbnV4IGJveGVzIHN1cHBvcnQgZHluYW1pYyBsaW5raW5nIHRoZXNlIGRheXMgYW5kCisgICMgcGVvcGxlIGNhbiBhbHdheXMgLS1kaXNhYmxlLXNoYXJlZCwgdGhlIHRlc3Qgd2FzIHJlbW92ZWQsIGFuZCB3ZQorICAjIGFzc3VtZSB0aGUgR05VL0xpbnV4IGR5bmFtaWMgbGlua2VyIGlzIGluIHVzZS4KKyAgZHluYW1pY19saW5rZXI9J0dOVS9MaW51eCBsZC5zbycKKyAgOzsKKwora25ldGJzZCotZ251KQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICBkeW5hbWljX2xpbmtlcj0nR05VIGxkLnNvJworICA7OworCituZXRic2QqKQorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJworICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgKGEub3V0KSBsZC5zbycKKyAgZWxzZQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIGxkLmVsZl9zbycKKyAgZmkKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK25ld3NvczYpCisgIHZlcnNpb25fdHlwZT1saW51eAorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICA7OworCitudG8tcW54KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgOzsKKworb3BlbmJzZCopCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIiCisgIG5lZWRfbGliX3ByZWZpeD1ubworICAjIFNvbWUgb2xkZXIgdmVyc2lvbnMgb2YgT3BlbkJTRCAoMy4zIGF0IGxlYXN0KSAqZG8qIG5lZWQgdmVyc2lvbmVkIGxpYnMuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBvcGVuYnNkMy4zIHwgb3BlbmJzZDMuMy4qKSBuZWVkX3ZlcnNpb249eWVzIDs7CisgICAgKikgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZF92ZXJzaW9uPW5vICA7OworICBlc2FjCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIG9wZW5ic2QyLls4OV0gfCBvcGVuYnNkMi5bODldLiopCisJc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisJOzsKKyAgICAgICopCisJc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworCTs7CisgICAgICBlc2FjCisgIGVsc2UKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGZpCisgIDs7CisKK29zMiopCisgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisgIHNocmV4dF9jbWRzPSIuZGxsIgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUuYScKKyAgZHluYW1pY19saW5rZXI9J09TLzIgbGQuZXhlJworICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKKyAgOzsKKworb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICB2ZXJzaW9uX3R5cGU9b3NmCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9zaGxpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIvY21wbHJzL2NjIC91c3IvbGliIC91c3IvbG9jYWwvbGliIC92YXIvc2hsaWIiCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIgorICA7OworCitzb2xhcmlzKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAjIGxkZCBjb21wbGFpbnMgdW5sZXNzIGxpYnJhcmllcyBhcmUgZXhlY3V0YWJsZQorICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCAreCAkbGliJworICA7OworCitzdW5vczQqKQorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovdXNyL2V0YyIgbGRjb25maWcgJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgICAgbmVlZF9saWJfcHJlZml4PW5vCisgIGZpCisgIG5lZWRfdmVyc2lvbj15ZXMKKyAgOzsKKworc3lzdjQgfCBzeXN2NC4zKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBjYXNlICRob3N0X3ZlbmRvciBpbgorICAgIHNuaSkKKyAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LUJsYXJnZWR5bnN5bScKKyAgICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICisgICAgICA7OworICAgIHNpZW1lbnMpCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIDs7CisgICAgbW90b3JvbGEpCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIG5lZWRfdmVyc2lvbj1ubworICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy9saWIgL3Vzci9saWIgL3Vzci9jY3MvbGliJworICAgICAgOzsKKyAgZXNhYworICA7OworCitzeXN2NCpNUCopCisgIGlmIHRlc3QgLWQgL3Vzci9uZWMgO3RoZW4KKyAgICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0uJG1ham9yJworICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGZpCisgIDs7CisKK3N5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQorICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC1lbGYKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvdXNyL2dudS9saWIgL3Vzci9jY3MvbGliIC91c3IvbGliIC9saWInCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGVsc2UKKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvY2NzL2xpYiAvdXNyL2xpYicKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgc2NvMy4ydjUqKQorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgL2xpYiIKKwk7OworICAgIGVzYWMKKyAgZmkKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbGliJworICA7OworCit1dHM0KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICA7OworCisqKQorICBkeW5hbWljX2xpbmtlcj1ubworICA7OworZXNhYworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkZHluYW1pY19saW5rZXIiID4mNQorZWNobyAiJHtFQ0hPX1R9JGR5bmFtaWNfbGlua2VyIiA+JjY7IH0KK3Rlc3QgIiRkeW5hbWljX2xpbmtlciIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCisKK3ZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSJQQVRIICRzaGxpYnBhdGhfdmFyICRydW5wYXRoX3ZhciIKK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgIHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsgR0NDX0VYRUNfUFJFRklYIENPTVBJTEVSX1BBVEggTElCUkFSWV9QQVRIIgorZmkKKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGhvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXMuLi4gJEVDSE9fQyIgPiY2OyB9CitoYXJkY29kZV9hY3Rpb25fR0NKPQoraWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKIiB8fCBcCisgICB0ZXN0IC1uICIkcnVucGF0aF92YXJfR0NKIiB8fCBcCisgICB0ZXN0ICJYJGhhcmRjb2RlX2F1dG9tYXRpY19HQ0oiID0gIlh5ZXMiIDsgdGhlbgorCisgICMgV2UgY2FuIGhhcmRjb2RlIG5vbi1leGlzdGFudCBkaXJlY3Rvcmllcy4KKyAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdF9HQ0oiICE9IG5vICYmCisgICAgICMgSWYgdGhlIG9ubHkgbWVjaGFuaXNtIHRvIGF2b2lkIGhhcmRjb2RpbmcgaXMgc2hsaWJwYXRoX3Zhciwgd2UKKyAgICAgIyBoYXZlIHRvIHJlbGluaywgb3RoZXJ3aXNlIHdlIG1pZ2h0IGxpbmsgd2l0aCBhbiBpbnN0YWxsZWQgbGlicmFyeQorICAgICAjIHdoZW4gd2Ugc2hvdWxkIGJlIGxpbmtpbmcgd2l0aCBhIHlldC10by1iZS1pbnN0YWxsZWQgb25lCisgICAgICMjIHRlc3QgIiRfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsIEdDSikiICE9IG5vICYmCisgICAgIHRlc3QgIiRoYXJkY29kZV9taW51c19MX0dDSiIgIT0gbm87IHRoZW4KKyAgICAjIExpbmtpbmcgYWx3YXlzIGhhcmRjb2RlcyB0aGUgdGVtcG9yYXJ5IGxpYnJhcnkgZGlyZWN0b3J5LgorICAgIGhhcmRjb2RlX2FjdGlvbl9HQ0o9cmVsaW5rCisgIGVsc2UKKyAgICAjIFdlIGNhbiBsaW5rIHdpdGhvdXQgaGFyZGNvZGluZywgYW5kIHdlIGNhbiBoYXJkY29kZSBub25leGlzdGluZyBkaXJzLgorICAgIGhhcmRjb2RlX2FjdGlvbl9HQ0o9aW1tZWRpYXRlCisgIGZpCitlbHNlCisgICMgV2UgY2Fubm90IGhhcmRjb2RlIGFueXRoaW5nLCBvciBlbHNlIHdlIGNhbiBvbmx5IGhhcmRjb2RlIGV4aXN0aW5nCisgICMgZGlyZWN0b3JpZXMuCisgIGhhcmRjb2RlX2FjdGlvbl9HQ0o9dW5zdXBwb3J0ZWQKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRoYXJkY29kZV9hY3Rpb25fR0NKIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRoYXJkY29kZV9hY3Rpb25fR0NKIiA+JjY7IH0KKworaWYgdGVzdCAiJGhhcmRjb2RlX2FjdGlvbl9HQ0oiID0gcmVsaW5rOyB0aGVuCisgICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IHN1cHBvcnRlZAorICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCitlbGlmIHRlc3QgIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiID0geWVzIHx8CisgICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IG5vOyB0aGVuCisgICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IG5lY2Vzc2FyeQorICBlbmFibGVfZmFzdF9pbnN0YWxsPW5lZWRsZXNzCitmaQorCisKKyMgVGhlIGVsc2UgY2xhdXNlIHNob3VsZCBvbmx5IGZpcmUgd2hlbiBib290c3RyYXBwaW5nIHRoZQorIyBsaWJ0b29sIGRpc3RyaWJ1dGlvbiwgb3RoZXJ3aXNlIHlvdSBmb3Jnb3QgdG8gc2hpcCBsdG1haW4uc2gKKyMgd2l0aCB5b3VyIHBhY2thZ2UsIGFuZCB5b3Ugd2lsbCBnZXQgY29tcGxhaW50cyB0aGF0IHRoZXJlIGFyZQorIyBubyBydWxlcyB0byBnZW5lcmF0ZSBsdG1haW4uc2guCitpZiB0ZXN0IC1mICIkbHRtYWluIjsgdGhlbgorICAjIFNlZSBpZiB3ZSBhcmUgcnVubmluZyBvbiB6c2gsIGFuZCBzZXQgdGhlIG9wdGlvbnMgd2hpY2ggYWxsb3cgb3VyIGNvbW1hbmRzIHRocm91Z2gKKyAgIyB3aXRob3V0IHJlbW92YWwgb2YgXCBlc2NhcGVzLgorICBpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgorICAgIHNldG9wdCBOT19HTE9CX1NVQlNUCisgIGZpCisgICMgTm93IHF1b3RlIGFsbCB0aGUgdGhpbmdzIHRoYXQgbWF5IGNvbnRhaW4gbWV0YWNoYXJhY3RlcnMgd2hpbGUgYmVpbmcKKyAgIyBjYXJlZnVsIG5vdCB0byBvdmVycXVvdGUgdGhlIEFDX1NVQlNUZWQgdmFsdWVzLiAgV2UgdGFrZSBjb3BpZXMgb2YgdGhlCisgICMgdmFyaWFibGVzIGFuZCBxdW90ZSB0aGUgY29waWVzIGZvciBnZW5lcmF0aW9uIG9mIHRoZSBsaWJ0b29sIHNjcmlwdC4KKyAgZm9yIHZhciBpbiBlY2hvIG9sZF9DQyBvbGRfQ0ZMQUdTIEFSIEFSX0ZMQUdTIEVHUkVQIFJBTkxJQiBMTl9TIExUQ0MgTFRDRkxBR1MgTk0gXAorICAgIFNFRCBTSEVMTCBTVFJJUCBcCisgICAgbGlibmFtZV9zcGVjIGxpYnJhcnlfbmFtZXNfc3BlYyBzb25hbWVfc3BlYyBleHRyYWN0X2V4cHN5bXNfY21kcyBcCisgICAgb2xkX3N0cmlwbGliIHN0cmlwbGliIGZpbGVfbWFnaWNfY21kIGZpbmlzaF9jbWRzIGZpbmlzaF9ldmFsIFwKKyAgICBkZXBsaWJzX2NoZWNrX21ldGhvZCByZWxvYWRfZmxhZyByZWxvYWRfY21kcyBuZWVkX2xvY2tzIFwKKyAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIFwKKyAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyBcCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjIFwKKyAgICBvbGRfcG9zdGluc3RhbGxfY21kcyBvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIFwKKyAgICBjb21waWxlcl9HQ0ogXAorICAgIENDX0dDSiBcCisgICAgTERfR0NKIFwKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0dDSiBcCisgICAgbHRfcHJvZ19jb21waWxlcl9waWNfR0NKIFwKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0ogXAorICAgIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0dDSiBcCisgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0dDSiBcCisgICAgdGhyZWFkX3NhZmVfZmxhZ19zcGVjX0dDSiBcCisgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfR0NKIFwKKyAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0dDSiBcCisgICAgb2xkX2FyY2hpdmVfY21kc19HQ0ogXAorICAgIG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNfR0NKIFwKKyAgICBwcmVkZXBfb2JqZWN0c19HQ0ogXAorICAgIHBvc3RkZXBfb2JqZWN0c19HQ0ogXAorICAgIHByZWRlcHNfR0NKIFwKKyAgICBwb3N0ZGVwc19HQ0ogXAorICAgIGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9HQ0ogXAorICAgIGFyY2hpdmVfY21kc19HQ0ogXAorICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKIFwKKyAgICBwb3N0aW5zdGFsbF9jbWRzX0dDSiBcCisgICAgcG9zdHVuaW5zdGFsbF9jbWRzX0dDSiBcCisgICAgb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNfR0NKIFwKKyAgICBhbGxvd191bmRlZmluZWRfZmxhZ19HQ0ogXAorICAgIG5vX3VuZGVmaW5lZF9mbGFnX0dDSiBcCisgICAgZXhwb3J0X3N5bWJvbHNfY21kc19HQ0ogXAorICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKIFwKKyAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkX0dDSiBcCisgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9HQ0ogXAorICAgIGhhcmRjb2RlX2F1dG9tYXRpY19HQ0ogXAorICAgIG1vZHVsZV9jbWRzX0dDSiBcCisgICAgbW9kdWxlX2V4cHN5bV9jbWRzX0dDSiBcCisgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fR0NKIFwKKyAgICBleGNsdWRlX2V4cHN5bXNfR0NKIFwKKyAgICBpbmNsdWRlX2V4cHN5bXNfR0NKOyBkbworCisgICAgY2FzZSAkdmFyIGluCisgICAgb2xkX2FyY2hpdmVfY21kc19HQ0ogfCBcCisgICAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kc19HQ0ogfCBcCisgICAgYXJjaGl2ZV9jbWRzX0dDSiB8IFwKKyAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSiB8IFwKKyAgICBtb2R1bGVfY21kc19HQ0ogfCBcCisgICAgbW9kdWxlX2V4cHN5bV9jbWRzX0dDSiB8IFwKKyAgICBvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc19HQ0ogfCBcCisgICAgZXhwb3J0X3N5bWJvbHNfY21kc19HQ0ogfCBcCisgICAgZXh0cmFjdF9leHBzeW1zX2NtZHMgfCByZWxvYWRfY21kcyB8IGZpbmlzaF9jbWRzIHwgXAorICAgIHBvc3RpbnN0YWxsX2NtZHMgfCBwb3N0dW5pbnN0YWxsX2NtZHMgfCBcCisgICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHMgfCBvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIHwgXAorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyB8IHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjKQorICAgICAgIyBEb3VibGUtcXVvdGUgZG91YmxlLWV2YWxlZCBzdHJpbmdzLgorICAgICAgZXZhbCAibHRfJHZhcj1cXFwiXGBcJGVjaG8gXCJYXCQkdmFyXCIgfCBcJFhzZWQgLWUgXCJcJGRvdWJsZV9xdW90ZV9zdWJzdFwiIC1lIFwiXCRzZWRfcXVvdGVfc3Vic3RcIiAtZSBcIlwkZGVsYXlfdmFyaWFibGVfc3Vic3RcIlxgXFxcIiIKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGV2YWwgImx0XyR2YXI9XFxcIlxgXCRlY2hvIFwiWFwkJHZhclwiIHwgXCRYc2VkIC1lIFwiXCRzZWRfcXVvdGVfc3Vic3RcIlxgXFxcIiIKKyAgICAgIDs7CisgICAgZXNhYworICBkb25lCisKKyAgY2FzZSAkbHRfZWNobyBpbgorICAqJ1wkMCAtLWZhbGxiYWNrLWVjaG8iJykKKyAgICBsdF9lY2hvPWAkZWNobyAiWCRsdF9lY2hvIiB8ICRYc2VkIC1lICdzL1xcXFxcXFwkMCAtLWZhbGxiYWNrLWVjaG8iJC8kMCAtLWZhbGxiYWNrLWVjaG8iLydgCisgICAgOzsKKyAgZXNhYworCitjZmdmaWxlPSIkb2ZpbGUiCisKKyAgY2F0IDw8X19FT0ZfXyA+PiAiJGNmZ2ZpbGUiCisjICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICR0YWduYW1lCisKKyMgTGlidG9vbCB3YXMgY29uZmlndXJlZCBvbiBob3N0IGAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYDoKKworIyBTaGVsbCB0byB1c2Ugd2hlbiBpbnZva2luZyBzaGVsbCBzY3JpcHRzLgorU0hFTEw9JGx0X1NIRUxMCisKKyMgV2hldGhlciBvciBub3QgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcy4KK2J1aWxkX2xpYnRvb2xfbGlicz0kZW5hYmxlX3NoYXJlZAorCisjIFdoZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMuCitidWlsZF9vbGRfbGlicz0kZW5hYmxlX3N0YXRpYworCisjIFdoZXRoZXIgb3Igbm90IHRvIGFkZCAtbGMgZm9yIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMuCitidWlsZF9saWJ0b29sX25lZWRfbGM9JGFyY2hpdmVfY21kc19uZWVkX2xjX0dDSgorCisjIFdoZXRoZXIgb3Igbm90IHRvIGRpc2FsbG93IHNoYXJlZCBsaWJzIHdoZW4gcnVudGltZSBsaWJzIGFyZSBzdGF0aWMKK2FsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcz0kZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19HQ0oKKworIyBXaGV0aGVyIG9yIG5vdCB0byBvcHRpbWl6ZSBmb3IgZmFzdCBpbnN0YWxsYXRpb24uCitmYXN0X2luc3RhbGw9JGVuYWJsZV9mYXN0X2luc3RhbGwKKworIyBUaGUgaG9zdCBzeXN0ZW0uCitob3N0X2FsaWFzPSRob3N0X2FsaWFzCitob3N0PSRob3N0Citob3N0X29zPSRob3N0X29zCisKKyMgVGhlIGJ1aWxkIHN5c3RlbS4KK2J1aWxkX2FsaWFzPSRidWlsZF9hbGlhcworYnVpbGQ9JGJ1aWxkCitidWlsZF9vcz0kYnVpbGRfb3MKKworIyBBbiBlY2hvIHByb2dyYW0gdGhhdCBkb2VzIG5vdCBpbnRlcnByZXQgYmFja3NsYXNoZXMuCitlY2hvPSRsdF9lY2hvCisKKyMgVGhlIGFyY2hpdmVyLgorQVI9JGx0X0FSCitBUl9GTEFHUz0kbHRfQVJfRkxBR1MKKworIyBBIEMgY29tcGlsZXIuCitMVENDPSRsdF9MVENDCisKKyMgTFRDQyBjb21waWxlciBmbGFncy4KK0xUQ0ZMQUdTPSRsdF9MVENGTEFHUworCisjIEEgbGFuZ3VhZ2Utc3BlY2lmaWMgY29tcGlsZXIuCitDQz0kbHRfY29tcGlsZXJfR0NKCisKKyMgSXMgdGhlIGNvbXBpbGVyIHRoZSBHTlUgQyBjb21waWxlcj8KK3dpdGhfZ2NjPSRHQ0NfR0NKCisKKyMgQW4gRVJFIG1hdGNoZXIuCitFR1JFUD0kbHRfRUdSRVAKKworIyBUaGUgbGlua2VyIHVzZWQgdG8gYnVpbGQgbGlicmFyaWVzLgorTEQ9JGx0X0xEX0dDSgorCisjIFdoZXRoZXIgd2UgbmVlZCBoYXJkIG9yIHNvZnQgbGlua3MuCitMTl9TPSRsdF9MTl9TCisKKyMgQSBCU0QtY29tcGF0aWJsZSBubSBwcm9ncmFtLgorTk09JGx0X05NCisKKyMgQSBzeW1ib2wgc3RyaXBwaW5nIHByb2dyYW0KK1NUUklQPSRsdF9TVFJJUAorCisjIFVzZWQgdG8gZXhhbWluZSBsaWJyYXJpZXMgd2hlbiBmaWxlX21hZ2ljX2NtZCBiZWdpbnMgImZpbGUiCitNQUdJQ19DTUQ9JE1BR0lDX0NNRAorCisjIFVzZWQgb24gY3lnd2luOiBETEwgY3JlYXRpb24gcHJvZ3JhbS4KK0RMTFRPT0w9IiRETExUT09MIgorCisjIFVzZWQgb24gY3lnd2luOiBvYmplY3QgZHVtcGVyLgorT0JKRFVNUD0iJE9CSkRVTVAiCisKKyMgVXNlZCBvbiBjeWd3aW46IGFzc2VtYmxlci4KK0FTPSIkQVMiCisKKyMgVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRlbXBvcmFyeSBsaWJ0b29sIGZpbGVzLgorb2JqZGlyPSRvYmpkaXIKKworIyBIb3cgdG8gY3JlYXRlIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzLgorcmVsb2FkX2ZsYWc9JGx0X3JlbG9hZF9mbGFnCityZWxvYWRfY21kcz0kbHRfcmVsb2FkX2NtZHMKKworIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgord2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2xfR0NKCisKKyMgT2JqZWN0IGZpbGUgc3VmZml4IChub3JtYWxseSAibyIpLgorb2JqZXh0PSIkYWNfb2JqZXh0IgorCisjIE9sZCBhcmNoaXZlIHN1ZmZpeCAobm9ybWFsbHkgImEiKS4KK2xpYmV4dD0iJGxpYmV4dCIKKworIyBTaGFyZWQgbGlicmFyeSBzdWZmaXggKG5vcm1hbGx5ICIuc28iKS4KK3NocmV4dF9jbWRzPSckc2hyZXh0X2NtZHMnCisKKyMgRXhlY3V0YWJsZSBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIiIpLgorZXhlZXh0PSIkZXhlZXh0IgorCisjIEFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4KK3BpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0oKK3BpY19tb2RlPSRwaWNfbW9kZQorCisjIFdoYXQgaXMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgY29tbWFuZD8KK21heF9jbWRfbGVuPSRsdF9jdl9zeXNfbWF4X2NtZF9sZW4KKworIyBEb2VzIGNvbXBpbGVyIHNpbXVsdGFuZW91c2x5IHN1cHBvcnQgLWMgYW5kIC1vIG9wdGlvbnM/Citjb21waWxlcl9jX289JGx0X2x0X2N2X3Byb2dfY29tcGlsZXJfY19vX0dDSgorCisjIE11c3Qgd2UgbG9jayBmaWxlcyB3aGVuIGRvaW5nIGNvbXBpbGF0aW9uPworbmVlZF9sb2Nrcz0kbHRfbmVlZF9sb2NrcworCisjIERvIHdlIG5lZWQgdGhlIGxpYiBwcmVmaXggZm9yIG1vZHVsZXM/CituZWVkX2xpYl9wcmVmaXg9JG5lZWRfbGliX3ByZWZpeAorCisjIERvIHdlIG5lZWQgYSB2ZXJzaW9uIGZvciBsaWJyYXJpZXM/CituZWVkX3ZlcnNpb249JG5lZWRfdmVyc2lvbgorCisjIFdoZXRoZXIgZGxvcGVuIGlzIHN1cHBvcnRlZC4KK2Rsb3Blbl9zdXBwb3J0PSRlbmFibGVfZGxvcGVuCisKKyMgV2hldGhlciBkbG9wZW4gb2YgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkLgorZGxvcGVuX3NlbGY9JGVuYWJsZV9kbG9wZW5fc2VsZgorCisjIFdoZXRoZXIgZGxvcGVuIG9mIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW1zIGlzIHN1cHBvcnRlZC4KK2Rsb3Blbl9zZWxmX3N0YXRpYz0kZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYworCisjIENvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmcuCitsaW5rX3N0YXRpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0oKKworIyBDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zLgorbm9fYnVpbHRpbl9mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19HQ0oKKworIyBDb21waWxlciBmbGFnIHRvIGFsbG93IHJlZmxleGl2ZSBkbG9wZW5zLgorZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSRsdF9leHBvcnRfZHluYW1pY19mbGFnX3NwZWNfR0NKCisKKyMgQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSBzaGFyZWQgb2JqZWN0cyBkaXJlY3RseSBmcm9tIGFyY2hpdmVzLgord2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JGx0X3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0dDSgorCisjIENvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgdGhyZWFkLXNhZmUgb2JqZWN0cy4KK3RocmVhZF9zYWZlX2ZsYWdfc3BlYz0kbHRfdGhyZWFkX3NhZmVfZmxhZ19zcGVjX0dDSgorCisjIExpYnJhcnkgdmVyc2lvbmluZyB0eXBlLgordmVyc2lvbl90eXBlPSR2ZXJzaW9uX3R5cGUKKworIyBGb3JtYXQgb2YgbGlicmFyeSBuYW1lIHByZWZpeC4KK2xpYm5hbWVfc3BlYz0kbHRfbGlibmFtZV9zcGVjCisKKyMgTGlzdCBvZiBhcmNoaXZlIG5hbWVzLiAgRmlyc3QgbmFtZSBpcyB0aGUgcmVhbCBvbmUsIHRoZSByZXN0IGFyZSBsaW5rcy4KKyMgVGhlIGxhc3QgbmFtZSBpcyB0aGUgb25lIHRoYXQgdGhlIGxpbmtlciBmaW5kcyB3aXRoIC1sTkFNRS4KK2xpYnJhcnlfbmFtZXNfc3BlYz0kbHRfbGlicmFyeV9uYW1lc19zcGVjCisKKyMgVGhlIGNvZGVkIG5hbWUgb2YgdGhlIGxpYnJhcnksIGlmIGRpZmZlcmVudCBmcm9tIHRoZSByZWFsIG5hbWUuCitzb25hbWVfc3BlYz0kbHRfc29uYW1lX3NwZWMKKworIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuZCBpbnN0YWxsIGFuIG9sZC1zdHlsZSBhcmNoaXZlLgorUkFOTElCPSRsdF9SQU5MSUIKK29sZF9hcmNoaXZlX2NtZHM9JGx0X29sZF9hcmNoaXZlX2NtZHNfR0NKCitvbGRfcG9zdGluc3RhbGxfY21kcz0kbHRfb2xkX3Bvc3RpbnN0YWxsX2NtZHMKK29sZF9wb3N0dW5pbnN0YWxsX2NtZHM9JGx0X29sZF9wb3N0dW5pbnN0YWxsX2NtZHMKKworIyBDcmVhdGUgYW4gb2xkLXN0eWxlIGFyY2hpdmUgZnJvbSBhIHNoYXJlZCBhcmNoaXZlLgorb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0kbHRfb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kc19HQ0oKKworIyBDcmVhdGUgYSB0ZW1wb3Jhcnkgb2xkLXN0eWxlIGFyY2hpdmUgdG8gbGluayBpbnN0ZWFkIG9mIGEgc2hhcmVkIGFyY2hpdmUuCitvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcz0kbHRfb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNfR0NKCisKKyMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhbmQgaW5zdGFsbCBhIHNoYXJlZCBhcmNoaXZlLgorYXJjaGl2ZV9jbWRzPSRsdF9hcmNoaXZlX2NtZHNfR0NKCithcmNoaXZlX2V4cHN5bV9jbWRzPSRsdF9hcmNoaXZlX2V4cHN5bV9jbWRzX0dDSgorcG9zdGluc3RhbGxfY21kcz0kbHRfcG9zdGluc3RhbGxfY21kcworcG9zdHVuaW5zdGFsbF9jbWRzPSRsdF9wb3N0dW5pbnN0YWxsX2NtZHMKKworIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEgbG9hZGFibGUgbW9kdWxlIChhc3N1bWVkIHNhbWUgYXMgYWJvdmUgaWYgZW1wdHkpCittb2R1bGVfY21kcz0kbHRfbW9kdWxlX2NtZHNfR0NKCittb2R1bGVfZXhwc3ltX2NtZHM9JGx0X21vZHVsZV9leHBzeW1fY21kc19HQ0oKKworIyBDb21tYW5kcyB0byBzdHJpcCBsaWJyYXJpZXMuCitvbGRfc3RyaXBsaWI9JGx0X29sZF9zdHJpcGxpYgorc3RyaXBsaWI9JGx0X3N0cmlwbGliCisKKyMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKKyMgc2hhcmVkIGxpYnJhcnkuCitwcmVkZXBfb2JqZWN0cz0kbHRfcHJlZGVwX29iamVjdHNfR0NKCisKKyMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGFmdGVyIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQorIyBzaGFyZWQgbGlicmFyeS4KK3Bvc3RkZXBfb2JqZWN0cz0kbHRfcG9zdGRlcF9vYmplY3RzX0dDSgorCisjIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCisjIHNoYXJlZCBsaWJyYXJ5LgorcHJlZGVwcz0kbHRfcHJlZGVwc19HQ0oKKworIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYWZ0ZXIgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCisjIHNoYXJlZCBsaWJyYXJ5LgorcG9zdGRlcHM9JGx0X3Bvc3RkZXBzX0dDSgorCisjIFRoZSBsaWJyYXJ5IHNlYXJjaCBwYXRoIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgY29tcGlsZXIgd2hlbiBsaW5raW5nCisjIGEgc2hhcmVkIGxpYnJhcnkuCitjb21waWxlcl9saWJfc2VhcmNoX3BhdGg9JGx0X2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9HQ0oKKworIyBNZXRob2QgdG8gY2hlY2sgd2hldGhlciBkZXBlbmRlbnQgbGlicmFyaWVzIGFyZSBzaGFyZWQgb2JqZWN0cy4KK2RlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9kZXBsaWJzX2NoZWNrX21ldGhvZAorCisjIENvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPT0gZmlsZV9tYWdpYy4KK2ZpbGVfbWFnaWNfY21kPSRsdF9maWxlX21hZ2ljX2NtZAorCisjIEZsYWcgdGhhdCBhbGxvd3Mgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHVuZGVmaW5lZCBzeW1ib2xzIHRvIGJlIGJ1aWx0LgorYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGx0X2FsbG93X3VuZGVmaW5lZF9mbGFnX0dDSgorCisjIEZsYWcgdGhhdCBmb3JjZXMgbm8gdW5kZWZpbmVkIHN5bWJvbHMuCitub191bmRlZmluZWRfZmxhZz0kbHRfbm9fdW5kZWZpbmVkX2ZsYWdfR0NKCisKKyMgQ29tbWFuZHMgdXNlZCB0byBmaW5pc2ggYSBsaWJ0b29sIGxpYnJhcnkgaW5zdGFsbGF0aW9uIGluIGEgZGlyZWN0b3J5LgorZmluaXNoX2NtZHM9JGx0X2ZpbmlzaF9jbWRzCisKKyMgU2FtZSBhcyBhYm92ZSwgYnV0IGEgc2luZ2xlIHNjcmlwdCBmcmFnbWVudCB0byBiZSBldmFsZWQgYnV0IG5vdCBzaG93bi4KK2ZpbmlzaF9ldmFsPSRsdF9maW5pc2hfZXZhbAorCisjIFRha2UgdGhlIG91dHB1dCBvZiBubSBhbmQgcHJvZHVjZSBhIGxpc3Rpbmcgb2YgcmF3IHN5bWJvbHMgYW5kIEMgbmFtZXMuCitnbG9iYWxfc3ltYm9sX3BpcGU9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUKKworIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIHByb3BlciBDIGRlY2xhcmF0aW9uCitnbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbAorCisjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpcgorZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MKKworIyBUaGlzIGlzIHRoZSBzaGFyZWQgbGlicmFyeSBydW50aW1lIHBhdGggdmFyaWFibGUuCitydW5wYXRoX3Zhcj0kcnVucGF0aF92YXIKKworIyBUaGlzIGlzIHRoZSBzaGFyZWQgbGlicmFyeSBwYXRoIHZhcmlhYmxlLgorc2hsaWJwYXRoX3Zhcj0kc2hsaWJwYXRoX3ZhcgorCisjIElzIHNobGlicGF0aCBzZWFyY2hlZCBiZWZvcmUgdGhlIGhhcmQtY29kZWQgbGlicmFyeSBzZWFyY2ggcGF0aD8KK3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD0kc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoCisKKyMgSG93IHRvIGhhcmRjb2RlIGEgc2hhcmVkIGxpYnJhcnkgcGF0aCBpbnRvIGFuIGV4ZWN1dGFibGUuCitoYXJkY29kZV9hY3Rpb249JGhhcmRjb2RlX2FjdGlvbl9HQ0oKKworIyBXaGV0aGVyIHdlIHNob3VsZCBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gbGlicmFyaWVzLgoraGFyZGNvZGVfaW50b19saWJzPSRoYXJkY29kZV9pbnRvX2xpYnMKKworIyBGbGFnIHRvIGhhcmRjb2RlIFwkbGliZGlyIGludG8gYSBiaW5hcnkgZHVyaW5nIGxpbmtpbmcuCisjIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgXCRsaWJkaXIgZG9lcyBub3QgZXhpc3QuCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSRsdF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSgorCisjIElmIGxkIGlzIHVzZWQgd2hlbiBsaW5raW5nLCBmbGFnIHRvIGhhcmRjb2RlIFwkbGliZGlyIGludG8KKyMgYSBiaW5hcnkgZHVyaW5nIGxpbmtpbmcuIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgXCRsaWJkaXIgZG9lcworIyBub3QgZXhpc3QuCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPSRsdF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkX0dDSgorCisjIFdoZXRoZXIgd2UgbmVlZCBhIHNpbmdsZSAtcnBhdGggZmxhZyB3aXRoIGEgc2VwYXJhdGVkIGFyZ3VtZW50LgoraGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0kbHRfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9HQ0oKKworIyBTZXQgdG8geWVzIGlmIHVzaW5nIERJUi9saWJOQU1FJHtzaGFyZWRfZXh0fSBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCisjIHJlc3VsdGluZyBiaW5hcnkuCitoYXJkY29kZV9kaXJlY3Q9JGhhcmRjb2RlX2RpcmVjdF9HQ0oKKworIyBTZXQgdG8geWVzIGlmIHVzaW5nIHRoZSAtTERJUiBmbGFnIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKKyMgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX21pbnVzX0w9JGhhcmRjb2RlX21pbnVzX0xfR0NKCisKKyMgU2V0IHRvIHllcyBpZiB1c2luZyBTSExJQlBBVEhfVkFSPURJUiBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8KKyMgdGhlIHJlc3VsdGluZyBiaW5hcnkuCitoYXJkY29kZV9zaGxpYnBhdGhfdmFyPSRoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0dDSgorCisjIFNldCB0byB5ZXMgaWYgYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGhhcmRjb2RlcyBESVIgaW50byB0aGUgbGlicmFyeQorIyBhbmQgYWxsIHN1YnNlcXVlbnQgbGlicmFyaWVzIGFuZCBleGVjdXRhYmxlcyBsaW5rZWQgYWdhaW5zdCBpdC4KK2hhcmRjb2RlX2F1dG9tYXRpYz0kaGFyZGNvZGVfYXV0b21hdGljX0dDSgorCisjIFZhcmlhYmxlcyB3aG9zZSB2YWx1ZXMgc2hvdWxkIGJlIHNhdmVkIGluIGxpYnRvb2wgd3JhcHBlciBzY3JpcHRzIGFuZAorIyByZXN0b3JlZCBhdCByZWxpbmsgdGltZS4KK3ZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsiCisKKyMgV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgorbGlua19hbGxfZGVwbGlicz0kbGlua19hbGxfZGVwbGlic19HQ0oKKworIyBDb21waWxlLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXMKK3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0kbHRfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisKKyMgUnVuLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXMKK3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRsdF9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYworCisjIEZpeCB0aGUgc2hlbGwgdmFyaWFibGUgXCRzcmNmaWxlIGZvciB0aGUgY29tcGlsZXIuCitmaXhfc3JjZmlsZV9wYXRoPSIkZml4X3NyY2ZpbGVfcGF0aF9HQ0oiCisKKyMgU2V0IHRvIHllcyBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZC4KK2Fsd2F5c19leHBvcnRfc3ltYm9scz0kYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0dDSgorCisjIFRoZSBjb21tYW5kcyB0byBsaXN0IGV4cG9ydGVkIHN5bWJvbHMuCitleHBvcnRfc3ltYm9sc19jbWRzPSRsdF9leHBvcnRfc3ltYm9sc19jbWRzX0dDSgorCisjIFRoZSBjb21tYW5kcyB0byBleHRyYWN0IHRoZSBleHBvcnRlZCBzeW1ib2wgbGlzdCBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCitleHRyYWN0X2V4cHN5bXNfY21kcz0kbHRfZXh0cmFjdF9leHBzeW1zX2NtZHMKKworIyBTeW1ib2xzIHRoYXQgc2hvdWxkIG5vdCBiZSBsaXN0ZWQgaW4gdGhlIHByZWxvYWRlZCBzeW1ib2xzLgorZXhjbHVkZV9leHBzeW1zPSRsdF9leGNsdWRlX2V4cHN5bXNfR0NKCisKKyMgU3ltYm9scyB0aGF0IG11c3QgYWx3YXlzIGJlIGV4cG9ydGVkLgoraW5jbHVkZV9leHBzeW1zPSRsdF9pbmNsdWRlX2V4cHN5bXNfR0NKCisKKyMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6ICR0YWduYW1lCisKK19fRU9GX18KKworCitlbHNlCisgICMgSWYgdGhlcmUgaXMgbm8gTWFrZWZpbGUgeWV0LCB3ZSByZWx5IG9uIGEgbWFrZSBydWxlIHRvIGV4ZWN1dGUKKyAgIyBgY29uZmlnLnN0YXR1cyAtLXJlY2hlY2snIHRvIHJlcnVuIHRoZXNlIHRlc3RzIGFuZCBjcmVhdGUgdGhlCisgICMgbGlidG9vbCBzY3JpcHQgdGhlbi4KKyAgbHRtYWluX2luPWBlY2hvICRsdG1haW4gfCBzZWQgLWUgJ3MvXC5zaCQvLmluLydgCisgIGlmIHRlc3QgLWYgIiRsdG1haW5faW4iOyB0aGVuCisgICAgdGVzdCAtZiBNYWtlZmlsZSAmJiBtYWtlICIkbHRtYWluIgorICBmaQorZmkKKworCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKK0NDPSIkbHRfc2F2ZV9DQyIKKworCWVsc2UKKwkgIHRhZ25hbWU9IiIKKwlmaQorCTs7CisKKyAgICAgIFJDKQorCisKKyMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBSQyB0ZXN0IHNvdXJjZXMuCithY19leHQ9cmMKKworIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIFJDIHRlc3Qgc291cmNlcy4KK29iamV4dD1vCitvYmpleHRfUkM9JG9iamV4dAorCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSdzYW1wbGUgTUVOVSB7IE1FTlVJVEVNICImU291cCIsIDEwMCwgQ0hFQ0tFRCB9XG4nCisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCitsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9IiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiCisKKyMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KKworIyBJZiBubyBDIGNvbXBpbGVyIHdhcyBzcGVjaWZpZWQsIHVzZSBDQy4KK0xUQ0M9JHtMVENDLSIkQ0MifQorCisjIElmIG5vIEMgY29tcGlsZXIgZmxhZ3Mgd2VyZSBzcGVjaWZpZWQsIHVzZSBDRkxBR1MuCitMVENGTEFHUz0ke0xUQ0ZMQUdTLSIkQ0ZMQUdTIn0KKworIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KK2NvbXBpbGVyPSRDQworCisKKyMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCithY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKK3ByaW50ZiAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKK2V2YWwgIiRhY19jb21waWxlIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgorX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAorJHJtIGNvbmZ0ZXN0KgorCithY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKK3ByaW50ZiAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKK2V2YWwgIiRhY19saW5rIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgorX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKKyRybSBjb25mdGVzdCoKKworCisjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorbHRfc2F2ZV9DQz0iJENDIgorQ0M9JHtSQy0id2luZHJlcyJ9Citjb21waWxlcj0kQ0MKK2NvbXBpbGVyX1JDPSRDQworZm9yIGNjX3RlbXAgaW4gJGNvbXBpbGVyIiI7IGRvCisgIGNhc2UgJGNjX3RlbXAgaW4KKyAgICBjb21waWxlIHwgKltcXC9dY29tcGlsZSB8IGNjYWNoZSB8ICpbXFwvXWNjYWNoZSApIDs7CisgICAgZGlzdGNjIHwgKltcXC9dZGlzdGNjIHwgcHVyaWZ5IHwgKltcXC9dcHVyaWZ5ICkgOzsKKyAgICBcLSopIDs7CisgICAgKikgYnJlYWs7OworICBlc2FjCitkb25lCitjY19iYXNlbmFtZT1gJGVjaG8gIlgkY2NfdGVtcCIgfCAkWHNlZCAtZSAncyUuKi8lJScgLWUgInMlXiRob3N0X2FsaWFzLSUlImAKKworbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fUkM9eWVzCisKKyMgVGhlIGVsc2UgY2xhdXNlIHNob3VsZCBvbmx5IGZpcmUgd2hlbiBib290c3RyYXBwaW5nIHRoZQorIyBsaWJ0b29sIGRpc3RyaWJ1dGlvbiwgb3RoZXJ3aXNlIHlvdSBmb3Jnb3QgdG8gc2hpcCBsdG1haW4uc2gKKyMgd2l0aCB5b3VyIHBhY2thZ2UsIGFuZCB5b3Ugd2lsbCBnZXQgY29tcGxhaW50cyB0aGF0IHRoZXJlIGFyZQorIyBubyBydWxlcyB0byBnZW5lcmF0ZSBsdG1haW4uc2guCitpZiB0ZXN0IC1mICIkbHRtYWluIjsgdGhlbgorICAjIFNlZSBpZiB3ZSBhcmUgcnVubmluZyBvbiB6c2gsIGFuZCBzZXQgdGhlIG9wdGlvbnMgd2hpY2ggYWxsb3cgb3VyIGNvbW1hbmRzIHRocm91Z2gKKyAgIyB3aXRob3V0IHJlbW92YWwgb2YgXCBlc2NhcGVzLgorICBpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgorICAgIHNldG9wdCBOT19HTE9CX1NVQlNUCisgIGZpCisgICMgTm93IHF1b3RlIGFsbCB0aGUgdGhpbmdzIHRoYXQgbWF5IGNvbnRhaW4gbWV0YWNoYXJhY3RlcnMgd2hpbGUgYmVpbmcKKyAgIyBjYXJlZnVsIG5vdCB0byBvdmVycXVvdGUgdGhlIEFDX1NVQlNUZWQgdmFsdWVzLiAgV2UgdGFrZSBjb3BpZXMgb2YgdGhlCisgICMgdmFyaWFibGVzIGFuZCBxdW90ZSB0aGUgY29waWVzIGZvciBnZW5lcmF0aW9uIG9mIHRoZSBsaWJ0b29sIHNjcmlwdC4KKyAgZm9yIHZhciBpbiBlY2hvIG9sZF9DQyBvbGRfQ0ZMQUdTIEFSIEFSX0ZMQUdTIEVHUkVQIFJBTkxJQiBMTl9TIExUQ0MgTFRDRkxBR1MgTk0gXAorICAgIFNFRCBTSEVMTCBTVFJJUCBcCisgICAgbGlibmFtZV9zcGVjIGxpYnJhcnlfbmFtZXNfc3BlYyBzb25hbWVfc3BlYyBleHRyYWN0X2V4cHN5bXNfY21kcyBcCisgICAgb2xkX3N0cmlwbGliIHN0cmlwbGliIGZpbGVfbWFnaWNfY21kIGZpbmlzaF9jbWRzIGZpbmlzaF9ldmFsIFwKKyAgICBkZXBsaWJzX2NoZWNrX21ldGhvZCByZWxvYWRfZmxhZyByZWxvYWRfY21kcyBuZWVkX2xvY2tzIFwKKyAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIFwKKyAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyBcCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjIFwKKyAgICBvbGRfcG9zdGluc3RhbGxfY21kcyBvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIFwKKyAgICBjb21waWxlcl9SQyBcCisgICAgQ0NfUkMgXAorICAgIExEX1JDIFwKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX1JDIFwKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19SQyBcCisgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfUkMgXAorICAgIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX1JDIFwKKyAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfUkMgXAorICAgIHRocmVhZF9zYWZlX2ZsYWdfc3BlY19SQyBcCisgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfUkMgXAorICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfUkMgXAorICAgIG9sZF9hcmNoaXZlX2NtZHNfUkMgXAorICAgIG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNfUkMgXAorICAgIHByZWRlcF9vYmplY3RzX1JDIFwKKyAgICBwb3N0ZGVwX29iamVjdHNfUkMgXAorICAgIHByZWRlcHNfUkMgXAorICAgIHBvc3RkZXBzX1JDIFwKKyAgICBjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfUkMgXAorICAgIGFyY2hpdmVfY21kc19SQyBcCisgICAgYXJjaGl2ZV9leHBzeW1fY21kc19SQyBcCisgICAgcG9zdGluc3RhbGxfY21kc19SQyBcCisgICAgcG9zdHVuaW5zdGFsbF9jbWRzX1JDIFwKKyAgICBvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc19SQyBcCisgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfUkMgXAorICAgIG5vX3VuZGVmaW5lZF9mbGFnX1JDIFwKKyAgICBleHBvcnRfc3ltYm9sc19jbWRzX1JDIFwKKyAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX1JDIFwKKyAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkX1JDIFwKKyAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX1JDIFwKKyAgICBoYXJkY29kZV9hdXRvbWF0aWNfUkMgXAorICAgIG1vZHVsZV9jbWRzX1JDIFwKKyAgICBtb2R1bGVfZXhwc3ltX2NtZHNfUkMgXAorICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX1JDIFwKKyAgICBleGNsdWRlX2V4cHN5bXNfUkMgXAorICAgIGluY2x1ZGVfZXhwc3ltc19SQzsgZG8KKworICAgIGNhc2UgJHZhciBpbgorICAgIG9sZF9hcmNoaXZlX2NtZHNfUkMgfCBcCisgICAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kc19SQyB8IFwKKyAgICBhcmNoaXZlX2NtZHNfUkMgfCBcCisgICAgYXJjaGl2ZV9leHBzeW1fY21kc19SQyB8IFwKKyAgICBtb2R1bGVfY21kc19SQyB8IFwKKyAgICBtb2R1bGVfZXhwc3ltX2NtZHNfUkMgfCBcCisgICAgb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNfUkMgfCBcCisgICAgZXhwb3J0X3N5bWJvbHNfY21kc19SQyB8IFwKKyAgICBleHRyYWN0X2V4cHN5bXNfY21kcyB8IHJlbG9hZF9jbWRzIHwgZmluaXNoX2NtZHMgfCBcCisgICAgcG9zdGluc3RhbGxfY21kcyB8IHBvc3R1bmluc3RhbGxfY21kcyB8IFwKKyAgICBvbGRfcG9zdGluc3RhbGxfY21kcyB8IG9sZF9wb3N0dW5pbnN0YWxsX2NtZHMgfCBcCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIHwgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMpCisgICAgICAjIERvdWJsZS1xdW90ZSBkb3VibGUtZXZhbGVkIHN0cmluZ3MuCisgICAgICBldmFsICJsdF8kdmFyPVxcXCJcYFwkZWNobyBcIlhcJCR2YXJcIiB8IFwkWHNlZCAtZSBcIlwkZG91YmxlX3F1b3RlX3N1YnN0XCIgLWUgXCJcJHNlZF9xdW90ZV9zdWJzdFwiIC1lIFwiXCRkZWxheV92YXJpYWJsZV9zdWJzdFwiXGBcXFwiIgorICAgICAgOzsKKyAgICAqKQorICAgICAgZXZhbCAibHRfJHZhcj1cXFwiXGBcJGVjaG8gXCJYXCQkdmFyXCIgfCBcJFhzZWQgLWUgXCJcJHNlZF9xdW90ZV9zdWJzdFwiXGBcXFwiIgorICAgICAgOzsKKyAgICBlc2FjCisgIGRvbmUKKworICBjYXNlICRsdF9lY2hvIGluCisgIConXCQwIC0tZmFsbGJhY2stZWNobyInKQorICAgIGx0X2VjaG89YCRlY2hvICJYJGx0X2VjaG8iIHwgJFhzZWQgLWUgJ3MvXFxcXFxcXCQwIC0tZmFsbGJhY2stZWNobyIkLyQwIC0tZmFsbGJhY2stZWNobyIvJ2AKKyAgICA7OworICBlc2FjCisKK2NmZ2ZpbGU9IiRvZmlsZSIKKworICBjYXQgPDxfX0VPRl9fID4+ICIkY2ZnZmlsZSIKKyMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWUKKworIyBMaWJ0b29sIHdhcyBjb25maWd1cmVkIG9uIGhvc3QgYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgOgorCisjIFNoZWxsIHRvIHVzZSB3aGVuIGludm9raW5nIHNoZWxsIHNjcmlwdHMuCitTSEVMTD0kbHRfU0hFTEwKKworIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLgorYnVpbGRfbGlidG9vbF9saWJzPSRlbmFibGVfc2hhcmVkCisKKyMgV2hldGhlciBvciBub3QgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcy4KK2J1aWxkX29sZF9saWJzPSRlbmFibGVfc3RhdGljCisKKyMgV2hldGhlciBvciBub3QgdG8gYWRkIC1sYyBmb3IgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcy4KK2J1aWxkX2xpYnRvb2xfbmVlZF9sYz0kYXJjaGl2ZV9jbWRzX25lZWRfbGNfUkMKKworIyBXaGV0aGVyIG9yIG5vdCB0byBkaXNhbGxvdyBzaGFyZWQgbGlicyB3aGVuIHJ1bnRpbWUgbGlicyBhcmUgc3RhdGljCithbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXM9JGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfUkMKKworIyBXaGV0aGVyIG9yIG5vdCB0byBvcHRpbWl6ZSBmb3IgZmFzdCBpbnN0YWxsYXRpb24uCitmYXN0X2luc3RhbGw9JGVuYWJsZV9mYXN0X2luc3RhbGwKKworIyBUaGUgaG9zdCBzeXN0ZW0uCitob3N0X2FsaWFzPSRob3N0X2FsaWFzCitob3N0PSRob3N0Citob3N0X29zPSRob3N0X29zCisKKyMgVGhlIGJ1aWxkIHN5c3RlbS4KK2J1aWxkX2FsaWFzPSRidWlsZF9hbGlhcworYnVpbGQ9JGJ1aWxkCitidWlsZF9vcz0kYnVpbGRfb3MKKworIyBBbiBlY2hvIHByb2dyYW0gdGhhdCBkb2VzIG5vdCBpbnRlcnByZXQgYmFja3NsYXNoZXMuCitlY2hvPSRsdF9lY2hvCisKKyMgVGhlIGFyY2hpdmVyLgorQVI9JGx0X0FSCitBUl9GTEFHUz0kbHRfQVJfRkxBR1MKKworIyBBIEMgY29tcGlsZXIuCitMVENDPSRsdF9MVENDCisKKyMgTFRDQyBjb21waWxlciBmbGFncy4KK0xUQ0ZMQUdTPSRsdF9MVENGTEFHUworCisjIEEgbGFuZ3VhZ2Utc3BlY2lmaWMgY29tcGlsZXIuCitDQz0kbHRfY29tcGlsZXJfUkMKKworIyBJcyB0aGUgY29tcGlsZXIgdGhlIEdOVSBDIGNvbXBpbGVyPword2l0aF9nY2M9JEdDQ19SQworCisjIEFuIEVSRSBtYXRjaGVyLgorRUdSRVA9JGx0X0VHUkVQCisKKyMgVGhlIGxpbmtlciB1c2VkIHRvIGJ1aWxkIGxpYnJhcmllcy4KK0xEPSRsdF9MRF9SQworCisjIFdoZXRoZXIgd2UgbmVlZCBoYXJkIG9yIHNvZnQgbGlua3MuCitMTl9TPSRsdF9MTl9TCisKKyMgQSBCU0QtY29tcGF0aWJsZSBubSBwcm9ncmFtLgorTk09JGx0X05NCisKKyMgQSBzeW1ib2wgc3RyaXBwaW5nIHByb2dyYW0KK1NUUklQPSRsdF9TVFJJUAorCisjIFVzZWQgdG8gZXhhbWluZSBsaWJyYXJpZXMgd2hlbiBmaWxlX21hZ2ljX2NtZCBiZWdpbnMgImZpbGUiCitNQUdJQ19DTUQ9JE1BR0lDX0NNRAorCisjIFVzZWQgb24gY3lnd2luOiBETEwgY3JlYXRpb24gcHJvZ3JhbS4KK0RMTFRPT0w9IiRETExUT09MIgorCisjIFVzZWQgb24gY3lnd2luOiBvYmplY3QgZHVtcGVyLgorT0JKRFVNUD0iJE9CSkRVTVAiCisKKyMgVXNlZCBvbiBjeWd3aW46IGFzc2VtYmxlci4KK0FTPSIkQVMiCisKKyMgVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRlbXBvcmFyeSBsaWJ0b29sIGZpbGVzLgorb2JqZGlyPSRvYmpkaXIKKworIyBIb3cgdG8gY3JlYXRlIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzLgorcmVsb2FkX2ZsYWc9JGx0X3JlbG9hZF9mbGFnCityZWxvYWRfY21kcz0kbHRfcmVsb2FkX2NtZHMKKworIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgord2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2xfUkMKKworIyBPYmplY3QgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICJvIikuCitvYmpleHQ9IiRhY19vYmpleHQiCisKKyMgT2xkIGFyY2hpdmUgc3VmZml4IChub3JtYWxseSAiYSIpLgorbGliZXh0PSIkbGliZXh0IgorCisjIFNoYXJlZCBsaWJyYXJ5IHN1ZmZpeCAobm9ybWFsbHkgIi5zbyIpLgorc2hyZXh0X2NtZHM9JyRzaHJleHRfY21kcycKKworIyBFeGVjdXRhYmxlIGZpbGUgc3VmZml4IChub3JtYWxseSAiIikuCitleGVleHQ9IiRleGVleHQiCisKKyMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgorcGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfcGljX1JDCitwaWNfbW9kZT0kcGljX21vZGUKKworIyBXaGF0IGlzIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIGNvbW1hbmQ/CittYXhfY21kX2xlbj0kbHRfY3Zfc3lzX21heF9jbWRfbGVuCisKKyMgRG9lcyBjb21waWxlciBzaW11bHRhbmVvdXNseSBzdXBwb3J0IC1jIGFuZCAtbyBvcHRpb25zPworY29tcGlsZXJfY19vPSRsdF9sdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19SQworCisjIE11c3Qgd2UgbG9jayBmaWxlcyB3aGVuIGRvaW5nIGNvbXBpbGF0aW9uPworbmVlZF9sb2Nrcz0kbHRfbmVlZF9sb2NrcworCisjIERvIHdlIG5lZWQgdGhlIGxpYiBwcmVmaXggZm9yIG1vZHVsZXM/CituZWVkX2xpYl9wcmVmaXg9JG5lZWRfbGliX3ByZWZpeAorCisjIERvIHdlIG5lZWQgYSB2ZXJzaW9uIGZvciBsaWJyYXJpZXM/CituZWVkX3ZlcnNpb249JG5lZWRfdmVyc2lvbgorCisjIFdoZXRoZXIgZGxvcGVuIGlzIHN1cHBvcnRlZC4KK2Rsb3Blbl9zdXBwb3J0PSRlbmFibGVfZGxvcGVuCisKKyMgV2hldGhlciBkbG9wZW4gb2YgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkLgorZGxvcGVuX3NlbGY9JGVuYWJsZV9kbG9wZW5fc2VsZgorCisjIFdoZXRoZXIgZGxvcGVuIG9mIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW1zIGlzIHN1cHBvcnRlZC4KK2Rsb3Blbl9zZWxmX3N0YXRpYz0kZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYworCisjIENvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmcuCitsaW5rX3N0YXRpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19SQworCisjIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCitub19idWlsdGluX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX1JDCisKKyMgQ29tcGlsZXIgZmxhZyB0byBhbGxvdyByZWZsZXhpdmUgZGxvcGVucy4KK2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0kbHRfZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX1JDCisKKyMgQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSBzaGFyZWQgb2JqZWN0cyBkaXJlY3RseSBmcm9tIGFyY2hpdmVzLgord2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JGx0X3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjX1JDCisKKyMgQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSB0aHJlYWQtc2FmZSBvYmplY3RzLgordGhyZWFkX3NhZmVfZmxhZ19zcGVjPSRsdF90aHJlYWRfc2FmZV9mbGFnX3NwZWNfUkMKKworIyBMaWJyYXJ5IHZlcnNpb25pbmcgdHlwZS4KK3ZlcnNpb25fdHlwZT0kdmVyc2lvbl90eXBlCisKKyMgRm9ybWF0IG9mIGxpYnJhcnkgbmFtZSBwcmVmaXguCitsaWJuYW1lX3NwZWM9JGx0X2xpYm5hbWVfc3BlYworCisjIExpc3Qgb2YgYXJjaGl2ZSBuYW1lcy4gIEZpcnN0IG5hbWUgaXMgdGhlIHJlYWwgb25lLCB0aGUgcmVzdCBhcmUgbGlua3MuCisjIFRoZSBsYXN0IG5hbWUgaXMgdGhlIG9uZSB0aGF0IHRoZSBsaW5rZXIgZmluZHMgd2l0aCAtbE5BTUUuCitsaWJyYXJ5X25hbWVzX3NwZWM9JGx0X2xpYnJhcnlfbmFtZXNfc3BlYworCisjIFRoZSBjb2RlZCBuYW1lIG9mIHRoZSBsaWJyYXJ5LCBpZiBkaWZmZXJlbnQgZnJvbSB0aGUgcmVhbCBuYW1lLgorc29uYW1lX3NwZWM9JGx0X3NvbmFtZV9zcGVjCisKKyMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhbmQgaW5zdGFsbCBhbiBvbGQtc3R5bGUgYXJjaGl2ZS4KK1JBTkxJQj0kbHRfUkFOTElCCitvbGRfYXJjaGl2ZV9jbWRzPSRsdF9vbGRfYXJjaGl2ZV9jbWRzX1JDCitvbGRfcG9zdGluc3RhbGxfY21kcz0kbHRfb2xkX3Bvc3RpbnN0YWxsX2NtZHMKK29sZF9wb3N0dW5pbnN0YWxsX2NtZHM9JGx0X29sZF9wb3N0dW5pbnN0YWxsX2NtZHMKKworIyBDcmVhdGUgYW4gb2xkLXN0eWxlIGFyY2hpdmUgZnJvbSBhIHNoYXJlZCBhcmNoaXZlLgorb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0kbHRfb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kc19SQworCisjIENyZWF0ZSBhIHRlbXBvcmFyeSBvbGQtc3R5bGUgYXJjaGl2ZSB0byBsaW5rIGluc3RlYWQgb2YgYSBzaGFyZWQgYXJjaGl2ZS4KK29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzPSRsdF9vbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc19SQworCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW5kIGluc3RhbGwgYSBzaGFyZWQgYXJjaGl2ZS4KK2FyY2hpdmVfY21kcz0kbHRfYXJjaGl2ZV9jbWRzX1JDCithcmNoaXZlX2V4cHN5bV9jbWRzPSRsdF9hcmNoaXZlX2V4cHN5bV9jbWRzX1JDCitwb3N0aW5zdGFsbF9jbWRzPSRsdF9wb3N0aW5zdGFsbF9jbWRzCitwb3N0dW5pbnN0YWxsX2NtZHM9JGx0X3Bvc3R1bmluc3RhbGxfY21kcworCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBsb2FkYWJsZSBtb2R1bGUgKGFzc3VtZWQgc2FtZSBhcyBhYm92ZSBpZiBlbXB0eSkKK21vZHVsZV9jbWRzPSRsdF9tb2R1bGVfY21kc19SQworbW9kdWxlX2V4cHN5bV9jbWRzPSRsdF9tb2R1bGVfZXhwc3ltX2NtZHNfUkMKKworIyBDb21tYW5kcyB0byBzdHJpcCBsaWJyYXJpZXMuCitvbGRfc3RyaXBsaWI9JGx0X29sZF9zdHJpcGxpYgorc3RyaXBsaWI9JGx0X3N0cmlwbGliCisKKyMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKKyMgc2hhcmVkIGxpYnJhcnkuCitwcmVkZXBfb2JqZWN0cz0kbHRfcHJlZGVwX29iamVjdHNfUkMKKworIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYWZ0ZXIgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCisjIHNoYXJlZCBsaWJyYXJ5LgorcG9zdGRlcF9vYmplY3RzPSRsdF9wb3N0ZGVwX29iamVjdHNfUkMKKworIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQorIyBzaGFyZWQgbGlicmFyeS4KK3ByZWRlcHM9JGx0X3ByZWRlcHNfUkMKKworIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYWZ0ZXIgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCisjIHNoYXJlZCBsaWJyYXJ5LgorcG9zdGRlcHM9JGx0X3Bvc3RkZXBzX1JDCisKKyMgVGhlIGxpYnJhcnkgc2VhcmNoIHBhdGggdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBjb21waWxlciB3aGVuIGxpbmtpbmcKKyMgYSBzaGFyZWQgbGlicmFyeS4KK2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aD0kbHRfY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX1JDCisKKyMgTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHMuCitkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfZGVwbGlic19jaGVja19tZXRob2QKKworIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID09IGZpbGVfbWFnaWMuCitmaWxlX21hZ2ljX2NtZD0kbHRfZmlsZV9tYWdpY19jbWQKKworIyBGbGFnIHRoYXQgYWxsb3dzIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB1bmRlZmluZWQgc3ltYm9scyB0byBiZSBidWlsdC4KK2FsbG93X3VuZGVmaW5lZF9mbGFnPSRsdF9hbGxvd191bmRlZmluZWRfZmxhZ19SQworCisjIEZsYWcgdGhhdCBmb3JjZXMgbm8gdW5kZWZpbmVkIHN5bWJvbHMuCitub191bmRlZmluZWRfZmxhZz0kbHRfbm9fdW5kZWZpbmVkX2ZsYWdfUkMKKworIyBDb21tYW5kcyB1c2VkIHRvIGZpbmlzaCBhIGxpYnRvb2wgbGlicmFyeSBpbnN0YWxsYXRpb24gaW4gYSBkaXJlY3RvcnkuCitmaW5pc2hfY21kcz0kbHRfZmluaXNoX2NtZHMKKworIyBTYW1lIGFzIGFib3ZlLCBidXQgYSBzaW5nbGUgc2NyaXB0IGZyYWdtZW50IHRvIGJlIGV2YWxlZCBidXQgbm90IHNob3duLgorZmluaXNoX2V2YWw9JGx0X2ZpbmlzaF9ldmFsCisKKyMgVGFrZSB0aGUgb3V0cHV0IG9mIG5tIGFuZCBwcm9kdWNlIGEgbGlzdGluZyBvZiByYXcgc3ltYm9scyBhbmQgQyBuYW1lcy4KK2dsb2JhbF9zeW1ib2xfcGlwZT0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZQorCisjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgcHJvcGVyIEMgZGVjbGFyYXRpb24KK2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsCisKKyMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyCitnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcworCisjIFRoaXMgaXMgdGhlIHNoYXJlZCBsaWJyYXJ5IHJ1bnRpbWUgcGF0aCB2YXJpYWJsZS4KK3J1bnBhdGhfdmFyPSRydW5wYXRoX3ZhcgorCisjIFRoaXMgaXMgdGhlIHNoYXJlZCBsaWJyYXJ5IHBhdGggdmFyaWFibGUuCitzaGxpYnBhdGhfdmFyPSRzaGxpYnBhdGhfdmFyCisKKyMgSXMgc2hsaWJwYXRoIHNlYXJjaGVkIGJlZm9yZSB0aGUgaGFyZC1jb2RlZCBsaWJyYXJ5IHNlYXJjaCBwYXRoPworc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPSRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgKKworIyBIb3cgdG8gaGFyZGNvZGUgYSBzaGFyZWQgbGlicmFyeSBwYXRoIGludG8gYW4gZXhlY3V0YWJsZS4KK2hhcmRjb2RlX2FjdGlvbj0kaGFyZGNvZGVfYWN0aW9uX1JDCisKKyMgV2hldGhlciB3ZSBzaG91bGQgaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIGxpYnJhcmllcy4KK2hhcmRjb2RlX2ludG9fbGlicz0kaGFyZGNvZGVfaW50b19saWJzCisKKyMgRmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgorIyBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMgbm90IGV4aXN0LgoraGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0kbHRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19SQworCisjIElmIGxkIGlzIHVzZWQgd2hlbiBsaW5raW5nLCBmbGFnIHRvIGhhcmRjb2RlIFwkbGliZGlyIGludG8KKyMgYSBiaW5hcnkgZHVyaW5nIGxpbmtpbmcuIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgXCRsaWJkaXIgZG9lcworIyBub3QgZXhpc3QuCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPSRsdF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkX1JDCisKKyMgV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlIC1ycGF0aCBmbGFnIHdpdGggYSBzZXBhcmF0ZWQgYXJndW1lbnQuCitoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSRsdF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX1JDCisKKyMgU2V0IHRvIHllcyBpZiB1c2luZyBESVIvbGliTkFNRSR7c2hhcmVkX2V4dH0gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQorIyByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfZGlyZWN0PSRoYXJkY29kZV9kaXJlY3RfUkMKKworIyBTZXQgdG8geWVzIGlmIHVzaW5nIHRoZSAtTERJUiBmbGFnIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKKyMgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX21pbnVzX0w9JGhhcmRjb2RlX21pbnVzX0xfUkMKKworIyBTZXQgdG8geWVzIGlmIHVzaW5nIFNITElCUEFUSF9WQVI9RElSIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50bworIyB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX3NobGlicGF0aF92YXI9JGhhcmRjb2RlX3NobGlicGF0aF92YXJfUkMKKworIyBTZXQgdG8geWVzIGlmIGJ1aWxkaW5nIGEgc2hhcmVkIGxpYnJhcnkgYXV0b21hdGljYWxseSBoYXJkY29kZXMgRElSIGludG8gdGhlIGxpYnJhcnkKKyMgYW5kIGFsbCBzdWJzZXF1ZW50IGxpYnJhcmllcyBhbmQgZXhlY3V0YWJsZXMgbGlua2VkIGFnYWluc3QgaXQuCitoYXJkY29kZV9hdXRvbWF0aWM9JGhhcmRjb2RlX2F1dG9tYXRpY19SQworCisjIFZhcmlhYmxlcyB3aG9zZSB2YWx1ZXMgc2hvdWxkIGJlIHNhdmVkIGluIGxpYnRvb2wgd3JhcHBlciBzY3JpcHRzIGFuZAorIyByZXN0b3JlZCBhdCByZWxpbmsgdGltZS4KK3ZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsiCisKKyMgV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgorbGlua19hbGxfZGVwbGlicz0kbGlua19hbGxfZGVwbGlic19SQworCisjIENvbXBpbGUtdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcworc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSRsdF9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKKworIyBSdW4tdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcworc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JGx0X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjCisKKyMgRml4IHRoZSBzaGVsbCB2YXJpYWJsZSBcJHNyY2ZpbGUgZm9yIHRoZSBjb21waWxlci4KK2ZpeF9zcmNmaWxlX3BhdGg9IiRmaXhfc3JjZmlsZV9wYXRoX1JDIgorCisjIFNldCB0byB5ZXMgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCithbHdheXNfZXhwb3J0X3N5bWJvbHM9JGFsd2F5c19leHBvcnRfc3ltYm9sc19SQworCisjIFRoZSBjb21tYW5kcyB0byBsaXN0IGV4cG9ydGVkIHN5bWJvbHMuCitleHBvcnRfc3ltYm9sc19jbWRzPSRsdF9leHBvcnRfc3ltYm9sc19jbWRzX1JDCisKKyMgVGhlIGNvbW1hbmRzIHRvIGV4dHJhY3QgdGhlIGV4cG9ydGVkIHN5bWJvbCBsaXN0IGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KK2V4dHJhY3RfZXhwc3ltc19jbWRzPSRsdF9leHRyYWN0X2V4cHN5bXNfY21kcworCisjIFN5bWJvbHMgdGhhdCBzaG91bGQgbm90IGJlIGxpc3RlZCBpbiB0aGUgcHJlbG9hZGVkIHN5bWJvbHMuCitleGNsdWRlX2V4cHN5bXM9JGx0X2V4Y2x1ZGVfZXhwc3ltc19SQworCisjIFN5bWJvbHMgdGhhdCBtdXN0IGFsd2F5cyBiZSBleHBvcnRlZC4KK2luY2x1ZGVfZXhwc3ltcz0kbHRfaW5jbHVkZV9leHBzeW1zX1JDCisKKyMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6ICR0YWduYW1lCisKK19fRU9GX18KKworCitlbHNlCisgICMgSWYgdGhlcmUgaXMgbm8gTWFrZWZpbGUgeWV0LCB3ZSByZWx5IG9uIGEgbWFrZSBydWxlIHRvIGV4ZWN1dGUKKyAgIyBgY29uZmlnLnN0YXR1cyAtLXJlY2hlY2snIHRvIHJlcnVuIHRoZXNlIHRlc3RzIGFuZCBjcmVhdGUgdGhlCisgICMgbGlidG9vbCBzY3JpcHQgdGhlbi4KKyAgbHRtYWluX2luPWBlY2hvICRsdG1haW4gfCBzZWQgLWUgJ3MvXC5zaCQvLmluLydgCisgIGlmIHRlc3QgLWYgIiRsdG1haW5faW4iOyB0aGVuCisgICAgdGVzdCAtZiBNYWtlZmlsZSAmJiBtYWtlICIkbHRtYWluIgorICBmaQorZmkKKworCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKK0NDPSIkbHRfc2F2ZV9DQyIKKworCTs7CisKKyAgICAgICopCisJeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogVW5zdXBwb3J0ZWQgdGFnIG5hbWU6ICR0YWduYW1lIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IFVuc3VwcG9ydGVkIHRhZyBuYW1lOiAkdGFnbmFtZSIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorCTs7CisgICAgICBlc2FjCisKKyAgICAgICMgQXBwZW5kIHRoZSBuZXcgdGFnIG5hbWUgdG8gdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIHRhZ3MuCisgICAgICBpZiB0ZXN0IC1uICIkdGFnbmFtZSIgOyB0aGVuCisgICAgICBhdmFpbGFibGVfdGFncz0iJGF2YWlsYWJsZV90YWdzICR0YWduYW1lIgorICAgIGZpCisgICAgZmkKKyAgZG9uZQorICBJRlM9IiRsdF9zYXZlX2lmcyIKKworICAjIE5vdyBzdWJzdGl0dXRlIHRoZSB1cGRhdGVkIGxpc3Qgb2YgYXZhaWxhYmxlIHRhZ3MuCisgIGlmIGV2YWwgInNlZCAtZSAncy9eYXZhaWxhYmxlX3RhZ3M9LipcJC9hdmFpbGFibGVfdGFncz1cIiRhdmFpbGFibGVfdGFnc1wiLycgXCIkb2ZpbGVcIiA+IFwiJHtvZmlsZX1UXCIiOyB0aGVuCisgICAgbXYgIiR7b2ZpbGV9VCIgIiRvZmlsZSIKKyAgICBjaG1vZCAreCAiJG9maWxlIgorICBlbHNlCisgICAgcm0gLWYgIiR7b2ZpbGV9VCIKKyAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiB1bmFibGUgdG8gdXBkYXRlIGxpc3Qgb2YgYXZhaWxhYmxlIHRhZ2dlZCBjb25maWd1cmF0aW9ucy4iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogdW5hYmxlIHRvIHVwZGF0ZSBsaXN0IG9mIGF2YWlsYWJsZSB0YWdnZWQgY29uZmlndXJhdGlvbnMuIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgIGZpCitmaQorCisKKworIyBUaGlzIGNhbiBiZSB1c2VkIHRvIHJlYnVpbGQgbGlidG9vbCB3aGVuIG5lZWRlZAorTElCVE9PTF9ERVBTPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCisKKyMgQWx3YXlzIHVzZSBvdXIgb3duIGxpYnRvb2wuCitMSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpcikvbGlidG9vbCcKKworIyBQcmV2ZW50IG11bHRpcGxlIGV4cGFuc2lvbgorCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBOTFMgaXMgcmVxdWVzdGVkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBOTFMgaXMgcmVxdWVzdGVkLi4uICRFQ0hPX0MiID4mNjsgfQorICAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1ubHMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbmxzK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0kZW5hYmxlX25sczsgVVNFX05MUz0kZW5hYmxldmFsCitlbHNlCisgIFVTRV9OTFM9eWVzCitmaQorCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJFVTRV9OTFMiID4mNQorZWNobyAiJHtFQ0hPX1R9JFVTRV9OTFMiID4mNjsgfQorCisKKworCisKKworIyBQcmVwYXJlIFBBVEhfU0VQQVJBVE9SLgorIyBUaGUgdXNlciBpcyBhbHdheXMgcmlnaHQuCitpZiB0ZXN0ICIke1BBVEhfU0VQQVJBVE9SK3NldH0iICE9IHNldDsgdGhlbgorICBlY2hvICIjISAvYmluL3NoIiA+Y29uZiQkLnNoCisgIGVjaG8gICJleGl0IDAiICAgPj5jb25mJCQuc2gKKyAgY2htb2QgK3ggY29uZiQkLnNoCisgIGlmIChQQVRIPSIvbm9uZXhpc3RlbnQ7LiI7IGNvbmYkJC5zaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgUEFUSF9TRVBBUkFUT1I9JzsnCisgIGVsc2UKKyAgICBQQVRIX1NFUEFSQVRPUj06CisgIGZpCisgIHJtIC1mIGNvbmYkJC5zaAorZmkKKworIyBGaW5kIG91dCBob3cgdG8gdGVzdCBmb3IgZXhlY3V0YWJsZSBmaWxlcy4gRG9uJ3QgdXNlIGEgemVyby1ieXRlIGZpbGUsCisjIGFzIHN5c3RlbXMgbWF5IHVzZSBtZXRob2RzIG90aGVyIHRoYW4gbW9kZSBiaXRzIHRvIGRldGVybWluZSBleGVjdXRhYmlsaXR5LgorY2F0ID5jb25mJCQuZmlsZSA8PF9BU0VPRgorIyEgL2Jpbi9zaAorZXhpdCAwCitfQVNFT0YKK2NobW9kICt4IGNvbmYkJC5maWxlCitpZiB0ZXN0IC14IGNvbmYkJC5maWxlID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhY19leGVjdXRhYmxlX3A9InRlc3QgLXgiCitlbHNlCisgIGFjX2V4ZWN1dGFibGVfcD0idGVzdCAtZiIKK2ZpCitybSAtZiBjb25mJCQuZmlsZQorCisjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm1zZ2ZtdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgbXNnZm10OyBhY193b3JkPSQyCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3BhdGhfTVNHRk1UK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhc2UgIiRNU0dGTVQiIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICAgIGFjX2N2X3BhdGhfTVNHRk1UPSIkTVNHRk1UIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgICA7OworICAqKQorICAgIGFjX3NhdmVfSUZTPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICAgIGZvciBhY19kaXIgaW4gJFBBVEg7IGRvCisgICAgICBJRlM9IiRhY19zYXZlX0lGUyIKKyAgICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgICAgICAgaWYgJGFjX2V4ZWN1dGFibGVfcCAiJGFjX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICAgICAgICBlY2hvICIkYXNfbWU6IHRyeWluZyAkYWNfZGlyLyRhY193b3JkLi4uIiA+JjUKKyAgICAgICAgICBpZiAkYWNfZGlyLyRhY193b3JkIC0tc3RhdGlzdGljcyAvZGV2L251bGwgPiY1IDI+JjEgJiYKKyAgICAgKGlmICRhY19kaXIvJGFjX3dvcmQgLS1zdGF0aXN0aWNzIC9kZXYvbnVsbCAyPiYxID4vZGV2L251bGwgfCBncmVwIHVzYWdlID4vZGV2L251bGw7IHRoZW4gZXhpdCAxOyBlbHNlIGV4aXQgMDsgZmkpOyB0aGVuCisgICAgICAgICAgICBhY19jdl9wYXRoX01TR0ZNVD0iJGFjX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAgICAgICAgIGJyZWFrIDIKKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgZG9uZQorICAgIGRvbmUKKyAgICBJRlM9IiRhY19zYXZlX0lGUyIKKyAgdGVzdCAteiAiJGFjX2N2X3BhdGhfTVNHRk1UIiAmJiBhY19jdl9wYXRoX01TR0ZNVD0iOiIKKyAgICA7OworZXNhYworZmkKK01TR0ZNVD0iJGFjX2N2X3BhdGhfTVNHRk1UIgoraWYgdGVzdCAiJE1TR0ZNVCIgIT0gIjoiOyB0aGVuCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJE1TR0ZNVCIgPiY1CitlY2hvICIke0VDSE9fVH0kTVNHRk1UIiA+JjY7IH0KK2Vsc2UKKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CitmaQorCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZ21zZ2ZtdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgZ21zZ2ZtdDsgYWNfd29yZD0kMgoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wYXRoX0dNU0dGTVQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2FzZSAkR01TR0ZNVCBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9HTVNHRk1UPSIkR01TR0ZNVCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wYXRoX0dNU0dGTVQ9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKK2RvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9HTVNHRk1UIiAmJiBhY19jdl9wYXRoX0dNU0dGTVQ9IiRNU0dGTVQiCisgIDs7Citlc2FjCitmaQorR01TR0ZNVD0kYWNfY3ZfcGF0aF9HTVNHRk1UCitpZiB0ZXN0IC1uICIkR01TR0ZNVCI7IHRoZW4KKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkR01TR0ZNVCIgPiY1CitlY2hvICIke0VDSE9fVH0kR01TR0ZNVCIgPiY2OyB9CitlbHNlCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorZmkKKworCisKKyAgICBjYXNlIGAkTVNHRk1UIC0tdmVyc2lvbiB8IHNlZCAxcSB8IHNlZCAtZSAncyxeW14wLTldKiwsJ2AgaW4KKyAgICAnJyB8IDAuWzAtOV0gfCAwLlswLTldLiogfCAwLjFbMC00XSB8IDAuMVswLTRdLiopIE1TR0ZNVF8wMTU9OiA7OworICAgICopIE1TR0ZNVF8wMTU9JE1TR0ZNVCA7OworICBlc2FjCisKKyAgY2FzZSBgJEdNU0dGTVQgLS12ZXJzaW9uIHwgc2VkIDFxIHwgc2VkIC1lICdzLF5bXjAtOV0qLCwnYCBpbgorICAgICcnIHwgMC5bMC05XSB8IDAuWzAtOV0uKiB8IDAuMVswLTRdIHwgMC4xWzAtNF0uKikgR01TR0ZNVF8wMTU9OiA7OworICAgICopIEdNU0dGTVRfMDE1PSRHTVNHRk1UIDs7CisgIGVzYWMKKworCisKKyMgUHJlcGFyZSBQQVRIX1NFUEFSQVRPUi4KKyMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgoraWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KKyAgZWNobyAiIyEgL2Jpbi9zaCIgPmNvbmYkJC5zaAorICBlY2hvICAiZXhpdCAwIiAgID4+Y29uZiQkLnNoCisgIGNobW9kICt4IGNvbmYkJC5zaAorICBpZiAoUEFUSD0iL25vbmV4aXN0ZW50Oy4iOyBjb25mJCQuc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgIFBBVEhfU0VQQVJBVE9SPSc7JworICBlbHNlCisgICAgUEFUSF9TRVBBUkFUT1I9OgorICBmaQorICBybSAtZiBjb25mJCQuc2gKK2ZpCisKKyMgRmluZCBvdXQgaG93IHRvIHRlc3QgZm9yIGV4ZWN1dGFibGUgZmlsZXMuIERvbid0IHVzZSBhIHplcm8tYnl0ZSBmaWxlLAorIyBhcyBzeXN0ZW1zIG1heSB1c2UgbWV0aG9kcyBvdGhlciB0aGFuIG1vZGUgYml0cyB0byBkZXRlcm1pbmUgZXhlY3V0YWJpbGl0eS4KK2NhdCA+Y29uZiQkLmZpbGUgPDxfQVNFT0YKKyMhIC9iaW4vc2gKK2V4aXQgMAorX0FTRU9GCitjaG1vZCAreCBjb25mJCQuZmlsZQoraWYgdGVzdCAteCBjb25mJCQuZmlsZSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYWNfZXhlY3V0YWJsZV9wPSJ0ZXN0IC14IgorZWxzZQorICBhY19leGVjdXRhYmxlX3A9InRlc3QgLWYiCitmaQorcm0gLWYgY29uZiQkLmZpbGUKKworIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJ4Z2V0dGV4dCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgeGdldHRleHQ7IGFjX3dvcmQ9JDIKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9YR0VUVEVYVCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXNlICIkWEdFVFRFWFQiIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICAgIGFjX2N2X3BhdGhfWEdFVFRFWFQ9IiRYR0VUVEVYVCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgICAgOzsKKyAgKikKKyAgICBhY19zYXZlX0lGUz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgICBmb3IgYWNfZGlyIGluICRQQVRIOyBkbworICAgICAgSUZTPSIkYWNfc2F2ZV9JRlMiCisgICAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICAgICAgIGlmICRhY19leGVjdXRhYmxlX3AgIiRhY19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgICAgICAgZWNobyAiJGFzX21lOiB0cnlpbmcgJGFjX2Rpci8kYWNfd29yZC4uLiIgPiY1CisgICAgICAgICAgaWYgJGFjX2Rpci8kYWNfd29yZCAtLW9taXQtaGVhZGVyIC0tY29weXJpZ2h0LWhvbGRlcj0gLS1tc2dpZC1idWdzLWFkZHJlc3M9IC9kZXYvbnVsbCA+JjUgMj4mMSAmJgorICAgICAoaWYgJGFjX2Rpci8kYWNfd29yZCAtLW9taXQtaGVhZGVyIC0tY29weXJpZ2h0LWhvbGRlcj0gLS1tc2dpZC1idWdzLWFkZHJlc3M9IC9kZXYvbnVsbCAyPiYxID4vZGV2L251bGwgfCBncmVwIHVzYWdlID4vZGV2L251bGw7IHRoZW4gZXhpdCAxOyBlbHNlIGV4aXQgMDsgZmkpOyB0aGVuCisgICAgICAgICAgICBhY19jdl9wYXRoX1hHRVRURVhUPSIkYWNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICAgICAgICAgYnJlYWsgMgorICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICBkb25lCisgICAgZG9uZQorICAgIElGUz0iJGFjX3NhdmVfSUZTIgorICB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9YR0VUVEVYVCIgJiYgYWNfY3ZfcGF0aF9YR0VUVEVYVD0iOiIKKyAgICA7OworZXNhYworZmkKK1hHRVRURVhUPSIkYWNfY3ZfcGF0aF9YR0VUVEVYVCIKK2lmIHRlc3QgIiRYR0VUVEVYVCIgIT0gIjoiOyB0aGVuCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJFhHRVRURVhUIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRYR0VUVEVYVCIgPiY2OyB9CitlbHNlCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorZmkKKworICAgIHJtIC1mIG1lc3NhZ2VzLnBvCisKKyAgICBjYXNlIGAkWEdFVFRFWFQgLS12ZXJzaW9uIHwgc2VkIDFxIHwgc2VkIC1lICdzLF5bXjAtOV0qLCwnYCBpbgorICAgICcnIHwgMC5bMC05XSB8IDAuWzAtOV0uKiB8IDAuMVswLTRdIHwgMC4xWzAtNF0uKikgWEdFVFRFWFRfMDE1PTogOzsKKyAgICAqKSBYR0VUVEVYVF8wMTU9JFhHRVRURVhUIDs7CisgIGVzYWMKKworCisKKyMgUHJlcGFyZSBQQVRIX1NFUEFSQVRPUi4KKyMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgoraWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KKyAgZWNobyAiIyEgL2Jpbi9zaCIgPmNvbmYkJC5zaAorICBlY2hvICAiZXhpdCAwIiAgID4+Y29uZiQkLnNoCisgIGNobW9kICt4IGNvbmYkJC5zaAorICBpZiAoUEFUSD0iL25vbmV4aXN0ZW50Oy4iOyBjb25mJCQuc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgIFBBVEhfU0VQQVJBVE9SPSc7JworICBlbHNlCisgICAgUEFUSF9TRVBBUkFUT1I9OgorICBmaQorICBybSAtZiBjb25mJCQuc2gKK2ZpCisKKyMgRmluZCBvdXQgaG93IHRvIHRlc3QgZm9yIGV4ZWN1dGFibGUgZmlsZXMuIERvbid0IHVzZSBhIHplcm8tYnl0ZSBmaWxlLAorIyBhcyBzeXN0ZW1zIG1heSB1c2UgbWV0aG9kcyBvdGhlciB0aGFuIG1vZGUgYml0cyB0byBkZXRlcm1pbmUgZXhlY3V0YWJpbGl0eS4KK2NhdCA+Y29uZiQkLmZpbGUgPDxfQVNFT0YKKyMhIC9iaW4vc2gKK2V4aXQgMAorX0FTRU9GCitjaG1vZCAreCBjb25mJCQuZmlsZQoraWYgdGVzdCAteCBjb25mJCQuZmlsZSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYWNfZXhlY3V0YWJsZV9wPSJ0ZXN0IC14IgorZWxzZQorICBhY19leGVjdXRhYmxlX3A9InRlc3QgLWYiCitmaQorcm0gLWYgY29uZiQkLmZpbGUKKworIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJtc2dtZXJnZSIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgbXNnbWVyZ2U7IGFjX3dvcmQ9JDIKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9NU0dNRVJHRStzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXNlICIkTVNHTUVSR0UiIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICAgIGFjX2N2X3BhdGhfTVNHTUVSR0U9IiRNU0dNRVJHRSIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgICAgOzsKKyAgKikKKyAgICBhY19zYXZlX0lGUz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgICBmb3IgYWNfZGlyIGluICRQQVRIOyBkbworICAgICAgSUZTPSIkYWNfc2F2ZV9JRlMiCisgICAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICAgICAgIGlmICRhY19leGVjdXRhYmxlX3AgIiRhY19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgICAgICAgZWNobyAiJGFzX21lOiB0cnlpbmcgJGFjX2Rpci8kYWNfd29yZC4uLiIgPiY1CisgICAgICAgICAgaWYgJGFjX2Rpci8kYWNfd29yZCAtLXVwZGF0ZSAtcSAvZGV2L251bGwgL2Rldi9udWxsID4mNSAyPiYxOyB0aGVuCisgICAgICAgICAgICBhY19jdl9wYXRoX01TR01FUkdFPSIkYWNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICAgICAgICAgYnJlYWsgMgorICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICBkb25lCisgICAgZG9uZQorICAgIElGUz0iJGFjX3NhdmVfSUZTIgorICB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9NU0dNRVJHRSIgJiYgYWNfY3ZfcGF0aF9NU0dNRVJHRT0iOiIKKyAgICA7OworZXNhYworZmkKK01TR01FUkdFPSIkYWNfY3ZfcGF0aF9NU0dNRVJHRSIKK2lmIHRlc3QgIiRNU0dNRVJHRSIgIT0gIjoiOyB0aGVuCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJE1TR01FUkdFIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRNU0dNRVJHRSIgPiY2OyB9CitlbHNlCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorZmkKKworCisgICAgICAgIHRlc3QgLW4gIiRsb2NhbGVkaXIiIHx8IGxvY2FsZWRpcj0nJHtkYXRhZGlyfS9sb2NhbGUnCisKKworICBhY19jb25maWdfY29tbWFuZHM9IiRhY19jb25maWdfY29tbWFuZHMgcG8tZGlyZWN0b3JpZXMiCisKKworCisgICAgICBpZiB0ZXN0ICJYJHByZWZpeCIgPSAiWE5PTkUiOyB0aGVuCisgICAgYWNsX2ZpbmFsX3ByZWZpeD0iJGFjX2RlZmF1bHRfcHJlZml4IgorICBlbHNlCisgICAgYWNsX2ZpbmFsX3ByZWZpeD0iJHByZWZpeCIKKyAgZmkKKyAgaWYgdGVzdCAiWCRleGVjX3ByZWZpeCIgPSAiWE5PTkUiOyB0aGVuCisgICAgYWNsX2ZpbmFsX2V4ZWNfcHJlZml4PScke3ByZWZpeH0nCisgIGVsc2UKKyAgICBhY2xfZmluYWxfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCIKKyAgZmkKKyAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4IgorICBwcmVmaXg9IiRhY2xfZmluYWxfcHJlZml4IgorICBldmFsIGFjbF9maW5hbF9leGVjX3ByZWZpeD1cIiRhY2xfZmluYWxfZXhlY19wcmVmaXhcIgorICBwcmVmaXg9IiRhY2xfc2F2ZV9wcmVmaXgiCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1nbnUtbGQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2dudV9sZCtzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSR3aXRoX2dudV9sZDsgdGVzdCAiJHdpdGh2YWwiID0gbm8gfHwgd2l0aF9nbnVfbGQ9eWVzCitlbHNlCisgIHdpdGhfZ251X2xkPW5vCitmaQorCisjIFByZXBhcmUgUEFUSF9TRVBBUkFUT1IuCisjIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KK2lmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCisgIGVjaG8gIiMhIC9iaW4vc2giID5jb25mJCQuc2gKKyAgZWNobyAgImV4aXQgMCIgICA+PmNvbmYkJC5zaAorICBjaG1vZCAreCBjb25mJCQuc2gKKyAgaWYgKFBBVEg9Ii9ub25leGlzdGVudDsuIjsgY29uZiQkLnNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICBQQVRIX1NFUEFSQVRPUj0nOycKKyAgZWxzZQorICAgIFBBVEhfU0VQQVJBVE9SPToKKyAgZmkKKyAgcm0gLWYgY29uZiQkLnNoCitmaQorYWNfcHJvZz1sZAoraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgIyBDaGVjayBpZiBnY2MgLXByaW50LXByb2ctbmFtZT1sZCBnaXZlcyBhIHBhdGguCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBsZCB1c2VkIGJ5IEdDQyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBsZCB1c2VkIGJ5IEdDQy4uLiAkRUNIT19DIiA+JjY7IH0KKyAgY2FzZSAkaG9zdCBpbgorICAqLSotbWluZ3cqKQorICAgICMgZ2NjIGxlYXZlcyBhIHRyYWlsaW5nIGNhcnJpYWdlIHJldHVybiB3aGljaCB1cHNldHMgbWluZ3cKKyAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjUgfCB0ciAtZCAnXDAxNSdgIDs7CisgICopCisgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1YCA7OworICBlc2FjCisgIGNhc2UgJGFjX3Byb2cgaW4KKyAgICAjIEFjY2VwdCBhYnNvbHV0ZSBwYXRocy4KKyAgICBbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopCisgICAgICByZV9kaXJlbHQ9Jy9bXi9dW14vXSovXC5cLi8nCisgICAgICAjIENhbm9uaWNhbGl6ZSB0aGUgcGF0aCBvZiBsZAorICAgICAgYWNfcHJvZz1gZWNobyAkYWNfcHJvZ3wgc2VkICdzJVxcXFwlLyVnJ2AKKyAgICAgIHdoaWxlIGVjaG8gJGFjX3Byb2cgfCBncmVwICIkcmVfZGlyZWx0IiA+IC9kZXYvbnVsbCAyPiYxOyBkbworCWFjX3Byb2c9YGVjaG8gJGFjX3Byb2d8IHNlZCAicyUkcmVfZGlyZWx0JS8lImAKKyAgICAgIGRvbmUKKyAgICAgIHRlc3QgLXogIiRMRCIgJiYgTEQ9IiRhY19wcm9nIgorICAgICAgOzsKKyAgIiIpCisgICAgIyBJZiBpdCBmYWlscywgdGhlbiBwcmV0ZW5kIHdlIGFyZW4ndCB1c2luZyBHQ0MuCisgICAgYWNfcHJvZz1sZAorICAgIDs7CisgICopCisgICAgIyBJZiBpdCBpcyByZWxhdGl2ZSwgdGhlbiBzZWFyY2ggZm9yIHRoZSBmaXJzdCBsZCBpbiBQQVRILgorICAgIHdpdGhfZ251X2xkPXVua25vd24KKyAgICA7OworICBlc2FjCitlbGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEdOVSBsZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBHTlUgbGQuLi4gJEVDSE9fQyIgPiY2OyB9CitlbHNlCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBub24tR05VIGxkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQuLi4gJEVDSE9fQyIgPiY2OyB9CitmaQoraWYgdGVzdCAiJHthY2xfY3ZfcGF0aF9MRCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC16ICIkTEQiOyB0aGVuCisgIElGUz0iJHtJRlM9IAl9IjsgYWNfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSR7UEFUSF9TRVBBUkFUT1ItOn0iCisgIGZvciBhY19kaXIgaW4gJFBBVEg7IGRvCisgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICBpZiB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nIiB8fCB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nJGFjX2V4ZWV4dCI7IHRoZW4KKyAgICAgIGFjbF9jdl9wYXRoX0xEPSIkYWNfZGlyLyRhY19wcm9nIgorICAgICAgIyBDaGVjayB0byBzZWUgaWYgdGhlIHByb2dyYW0gaXMgR05VIGxkLiAgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uLAorICAgICAgIyBidXQgYXBwYXJlbnRseSBzb21lIEdOVSBsZCdzIG9ubHkgYWNjZXB0IC12LgorICAgICAgIyBCcmVhayBvbmx5IGlmIGl0IHdhcyB0aGUgR05VL25vbi1HTlUgbGQgdGhhdCB3ZSBwcmVmZXIuCisgICAgICBjYXNlIGAiJGFjbF9jdl9wYXRoX0xEIiAtdiAyPiYxIDwgL2Rldi9udWxsYCBpbgorICAgICAgKkdOVSogfCAqJ3dpdGggQkZEJyopCisJdGVzdCAiJHdpdGhfZ251X2xkIiAhPSBubyAmJiBicmVhayA7OworICAgICAgKikKKwl0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IHllcyAmJiBicmVhayA7OworICAgICAgZXNhYworICAgIGZpCisgIGRvbmUKKyAgSUZTPSIkYWNfc2F2ZV9pZnMiCitlbHNlCisgIGFjbF9jdl9wYXRoX0xEPSIkTEQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorZmkKK2ZpCisKK0xEPSIkYWNsX2N2X3BhdGhfTEQiCitpZiB0ZXN0IC1uICIkTEQiOyB0aGVuCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJExEIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRMRCIgPiY2OyB9CitlbHNlCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorZmkKK3Rlc3QgLXogIiRMRCIgJiYgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogbm8gYWNjZXB0YWJsZSBsZCBmb3VuZCBpbiBcJFBBVEgiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogbm8gYWNjZXB0YWJsZSBsZCBmb3VuZCBpbiBcJFBBVEgiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjbF9jdl9wcm9nX2dudV9sZCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICAjIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiBoZXJlLCBidXQgYXBwYXJlbnRseSBzb21lIEdOVSBsZCdzIG9ubHkgYWNjZXB0IC12LgorY2FzZSBgJExEIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KKypHTlUqIHwgKid3aXRoIEJGRCcqKQorICBhY2xfY3ZfcHJvZ19nbnVfbGQ9eWVzIDs7CisqKQorICBhY2xfY3ZfcHJvZ19nbnVfbGQ9bm8gOzsKK2VzYWMKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY2xfY3ZfcHJvZ19nbnVfbGQiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjbF9jdl9wcm9nX2dudV9sZCIgPiY2OyB9Cit3aXRoX2dudV9sZD0kYWNsX2N2X3Byb2dfZ251X2xkCisKKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzaGFyZWQgbGlicmFyeSBydW4gcGF0aCBvcmlnaW4iID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc2hhcmVkIGxpYnJhcnkgcnVuIHBhdGggb3JpZ2luLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY2xfY3ZfcnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworICAgIENDPSIkQ0MiIEdDQz0iJEdDQyIgTERGTEFHUz0iJExERkxBR1MiIExEPSIkTEQiIHdpdGhfZ251X2xkPSIkd2l0aF9nbnVfbGQiIFwKKyAgICAke0NPTkZJR19TSEVMTC0vYmluL3NofSAiJGFjX2F1eF9kaXIvY29uZmlnLnJwYXRoIiAiJGhvc3QiID4gY29uZnRlc3Quc2gKKyAgICAuIC4vY29uZnRlc3Quc2gKKyAgICBybSAtZiAuL2NvbmZ0ZXN0LnNoCisgICAgYWNsX2N2X3JwYXRoPWRvbmUKKworZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjbF9jdl9ycGF0aCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNsX2N2X3JwYXRoIiA+JjY7IH0KKyAgd2w9IiRhY2xfY3Zfd2wiCisgIGFjbF9saWJleHQ9IiRhY2xfY3ZfbGliZXh0IgorICBhY2xfc2hsaWJleHQ9IiRhY2xfY3Zfc2hsaWJleHQiCisgIGFjbF9saWJuYW1lX3NwZWM9IiRhY2xfY3ZfbGlibmFtZV9zcGVjIgorICBhY2xfbGlicmFyeV9uYW1lc19zcGVjPSIkYWNsX2N2X2xpYnJhcnlfbmFtZXNfc3BlYyIKKyAgYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9IiRhY2xfY3ZfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIKKyAgYWNsX2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9IiRhY2xfY3ZfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIKKyAgYWNsX2hhcmRjb2RlX2RpcmVjdD0iJGFjbF9jdl9oYXJkY29kZV9kaXJlY3QiCisgIGFjbF9oYXJkY29kZV9taW51c19MPSIkYWNsX2N2X2hhcmRjb2RlX21pbnVzX0wiCisgICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXJwYXRoIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3JwYXRoK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0kZW5hYmxlX3JwYXRoOyA6CitlbHNlCisgIGVuYWJsZV9ycGF0aD15ZXMKK2ZpCisKKworCisgICAgICAgICAgICAgICAgICBhY2xfbGliZGlyc3RlbT1saWIKKyAgc2VhcmNocGF0aD1gKExDX0FMTD1DICRDQyAtcHJpbnQtc2VhcmNoLWRpcnMpIDI+L2Rldi9udWxsIHwgc2VkIC1uIC1lICdzLF5saWJyYXJpZXM6ICwscCcgfCBzZWQgLWUgJ3MsXj0sLCdgCisgIGlmIHRlc3QgLW4gIiRzZWFyY2hwYXRoIjsgdGhlbgorICAgIGFjbF9zYXZlX0lGUz0iJHtJRlM9IAl9IjsgSUZTPSI6IgorICAgIGZvciBzZWFyY2hkaXIgaW4gJHNlYXJjaHBhdGg7IGRvCisgICAgICBpZiB0ZXN0IC1kICIkc2VhcmNoZGlyIjsgdGhlbgorICAgICAgICBjYXNlICIkc2VhcmNoZGlyIiBpbgorICAgICAgICAgICovbGliNjQvIHwgKi9saWI2NCApIGFjbF9saWJkaXJzdGVtPWxpYjY0IDs7CisgICAgICAgICAgKikgc2VhcmNoZGlyPWBjZCAiJHNlYXJjaGRpciIgJiYgcHdkYAorICAgICAgICAgICAgIGNhc2UgIiRzZWFyY2hkaXIiIGluCisgICAgICAgICAgICAgICAqL2xpYjY0ICkgYWNsX2xpYmRpcnN0ZW09bGliNjQgOzsKKyAgICAgICAgICAgICBlc2FjIDs7CisgICAgICAgIGVzYWMKKyAgICAgIGZpCisgICAgZG9uZQorICAgIElGUz0iJGFjbF9zYXZlX0lGUyIKKyAgZmkKKworCisKKworCisKKworCisKKyAgICB1c2VfYWRkaXRpb25hbD15ZXMKKworICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCisgIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCisgIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCisgIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4IgorCisgICAgZXZhbCBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9XCIkaW5jbHVkZWRpclwiCisgICAgZXZhbCBhZGRpdGlvbmFsX2xpYmRpcj1cIiRsaWJkaXJcIgorCisgIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhlY19wcmVmaXgiCisgIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWxpYmljb252LXByZWZpeCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfbGliaWNvbnZfcHJlZml4K3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9JHdpdGhfbGliaWNvbnZfcHJlZml4OworICAgIGlmIHRlc3QgIlgkd2l0aHZhbCIgPSAiWG5vIjsgdGhlbgorICAgICAgdXNlX2FkZGl0aW9uYWw9bm8KKyAgICBlbHNlCisgICAgICBpZiB0ZXN0ICJYJHdpdGh2YWwiID0gIlgiOyB0aGVuCisKKyAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4IgorICBwcmVmaXg9IiRhY2xfZmluYWxfcHJlZml4IgorICBhY2xfc2F2ZV9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgorICBleGVjX3ByZWZpeD0iJGFjbF9maW5hbF9leGVjX3ByZWZpeCIKKworICAgICAgICAgIGV2YWwgYWRkaXRpb25hbF9pbmNsdWRlZGlyPVwiJGluY2x1ZGVkaXJcIgorICAgICAgICAgIGV2YWwgYWRkaXRpb25hbF9saWJkaXI9XCIkbGliZGlyXCIKKworICBleGVjX3ByZWZpeD0iJGFjbF9zYXZlX2V4ZWNfcHJlZml4IgorICBwcmVmaXg9IiRhY2xfc2F2ZV9wcmVmaXgiCisKKyAgICAgIGVsc2UKKyAgICAgICAgYWRkaXRpb25hbF9pbmNsdWRlZGlyPSIkd2l0aHZhbC9pbmNsdWRlIgorICAgICAgICBhZGRpdGlvbmFsX2xpYmRpcj0iJHdpdGh2YWwvJGFjbF9saWJkaXJzdGVtIgorICAgICAgZmkKKyAgICBmaQorCitmaQorCisgICAgICBMSUJJQ09OVj0KKyAgTFRMSUJJQ09OVj0KKyAgSU5DSUNPTlY9CisgIExJQklDT05WX1BSRUZJWD0KKyAgcnBhdGhkaXJzPQorICBsdHJwYXRoZGlycz0KKyAgbmFtZXNfYWxyZWFkeV9oYW5kbGVkPQorICBuYW1lc19uZXh0X3JvdW5kPSdpY29udiAnCisgIHdoaWxlIHRlc3QgLW4gIiRuYW1lc19uZXh0X3JvdW5kIjsgZG8KKyAgICBuYW1lc190aGlzX3JvdW5kPSIkbmFtZXNfbmV4dF9yb3VuZCIKKyAgICBuYW1lc19uZXh0X3JvdW5kPQorICAgIGZvciBuYW1lIGluICRuYW1lc190aGlzX3JvdW5kOyBkbworICAgICAgYWxyZWFkeV9oYW5kbGVkPQorICAgICAgZm9yIG4gaW4gJG5hbWVzX2FscmVhZHlfaGFuZGxlZDsgZG8KKyAgICAgICAgaWYgdGVzdCAiJG4iID0gIiRuYW1lIjsgdGhlbgorICAgICAgICAgIGFscmVhZHlfaGFuZGxlZD15ZXMKKyAgICAgICAgICBicmVhaworICAgICAgICBmaQorICAgICAgZG9uZQorICAgICAgaWYgdGVzdCAteiAiJGFscmVhZHlfaGFuZGxlZCI7IHRoZW4KKyAgICAgICAgbmFtZXNfYWxyZWFkeV9oYW5kbGVkPSIkbmFtZXNfYWxyZWFkeV9oYW5kbGVkICRuYW1lIgorICAgICAgICAgICAgICAgICAgICAgICAgdXBwZXJuYW1lPWBlY2hvICIkbmFtZSIgfCBzZWQgLWUgJ3l8YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy18QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX198J2AKKyAgICAgICAgZXZhbCB2YWx1ZT1cIlwkSEFWRV9MSUIkdXBwZXJuYW1lXCIKKyAgICAgICAgaWYgdGVzdCAtbiAiJHZhbHVlIjsgdGhlbgorICAgICAgICAgIGlmIHRlc3QgIiR2YWx1ZSIgPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgIGV2YWwgdmFsdWU9XCJcJExJQiR1cHBlcm5hbWVcIgorICAgICAgICAgICAgdGVzdCAteiAiJHZhbHVlIiB8fCBMSUJJQ09OVj0iJHtMSUJJQ09OVn0ke0xJQklDT05WOisgfSR2YWx1ZSIKKyAgICAgICAgICAgIGV2YWwgdmFsdWU9XCJcJExUTElCJHVwcGVybmFtZVwiCisgICAgICAgICAgICB0ZXN0IC16ICIkdmFsdWUiIHx8IExUTElCSUNPTlY9IiR7TFRMSUJJQ09OVn0ke0xUTElCSUNPTlY6KyB9JHZhbHVlIgorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoKKyAgICAgICAgICBmaQorICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9CisgICAgICAgICAgZm91bmRfbGE9CisgICAgICAgICAgZm91bmRfc289CisgICAgICAgICAgZm91bmRfYT0KKyAgICAgICAgICBldmFsIGxpYm5hbWU9XCIkYWNsX2xpYm5hbWVfc3BlY1wiICAgICMgdHlwaWNhbGx5OiBsaWJuYW1lPWxpYiRuYW1lCisgICAgICAgICAgaWYgdGVzdCAtbiAiJGFjbF9zaGxpYmV4dCI7IHRoZW4KKyAgICAgICAgICAgIHNocmV4dD0iLiRhY2xfc2hsaWJleHQiICAgICAgICAgICAgICMgdHlwaWNhbGx5OiBzaHJleHQ9LnNvCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgc2hyZXh0PQorICAgICAgICAgIGZpCisgICAgICAgICAgaWYgdGVzdCAkdXNlX2FkZGl0aW9uYWwgPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgIGRpcj0iJGFkZGl0aW9uYWxfbGliZGlyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJGFjbF9zaGxpYmV4dCI7IHRoZW4KKyAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZSRzaHJleHQiOyB0aGVuCisgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRsaWJuYW1lJHNocmV4dCIKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRhY2xfbGlicmFyeV9uYW1lc19zcGVjIiA9ICckbGlibmFtZSRzaHJleHQkdmVyc3VmZml4JzsgdGhlbgorICAgICAgICAgICAgICAgICAgdmVyPWAoY2QgIiRkaXIiICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmIGluICIkbGlibmFtZSRzaHJleHQiLio7IGRvIGVjaG8gIiRmIjsgZG9uZSBcCisgICAgICAgICAgICAgICAgICAgICAgICB8IHNlZCAtZSAicyxeJGxpYm5hbWUkc2hyZXh0XFxcXC4sLCIgXAorICAgICAgICAgICAgICAgICAgICAgICAgfCBzb3J0IC10ICcuJyAtbiAtciAtazEsMSAtazIsMiAtazMsMyAtazQsNCAtazUsNSBcCisgICAgICAgICAgICAgICAgICAgICAgICB8IHNlZCAxcSApIDI+L2Rldi9udWxsYAorICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJHZlciIgJiYgdGVzdCAtZiAiJGRpci8kbGlibmFtZSRzaHJleHQuJHZlciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kbGlibmFtZSRzaHJleHQuJHZlciIKKyAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgZXZhbCBsaWJyYXJ5X25hbWVzPVwiJGFjbF9saWJyYXJ5X25hbWVzX3NwZWNcIgorICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gJGxpYnJhcnlfbmFtZXM7IGRvCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGYiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRmIgorICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgPSAiWCI7IHRoZW4KKyAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZS4kYWNsX2xpYmV4dCI7IHRoZW4KKyAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisgICAgICAgICAgICAgICAgZm91bmRfYT0iJGRpci8kbGlibmFtZS4kYWNsX2xpYmV4dCIKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgIT0gIlgiOyB0aGVuCisgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUubGEiOyB0aGVuCisgICAgICAgICAgICAgICAgZm91bmRfbGE9IiRkaXIvJGxpYm5hbWUubGEiCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBmaQorICAgICAgICAgIGZpCisgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiID0gIlgiOyB0aGVuCisgICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTFRMSUJJQ09OVjsgZG8KKworICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCisgIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCisgIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCisgIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4IgorICBldmFsIHg9XCIkeFwiCisgIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhlY19wcmVmaXgiCisgIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKKworICAgICAgICAgICAgICBjYXNlICIkeCIgaW4KKyAgICAgICAgICAgICAgICAtTCopCisgICAgICAgICAgICAgICAgICBkaXI9YGVjaG8gIlgkeCIgfCBzZWQgLWUgJ3MvXlgtTC8vJ2AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY2xfc2hsaWJleHQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUkc2hyZXh0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kbGlibmFtZSRzaHJleHQiCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkYWNsX2xpYnJhcnlfbmFtZXNfc3BlYyIgPSAnJGxpYm5hbWUkc2hyZXh0JHZlcnN1ZmZpeCc7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcj1gKGNkICIkZGlyIiAmJiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiAiJGxpYm5hbWUkc2hyZXh0Ii4qOyBkbyBlY2hvICIkZiI7IGRvbmUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZWQgLWUgInMsXiRsaWJuYW1lJHNocmV4dFxcXFwuLCwiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc29ydCAtdCAnLicgLW4gLXIgLWsxLDEgLWsyLDIgLWszLDMgLWs0LDQgLWs1LDUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZWQgMXEgKSAyPi9kZXYvbnVsbGAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiR2ZXIiICYmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUkc2hyZXh0LiR2ZXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGxpYm5hbWUkc2hyZXh0LiR2ZXIiCisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwgbGlicmFyeV9uYW1lcz1cIiRhY2xfbGlicmFyeV9uYW1lc19zcGVjXCIKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmIGluICRsaWJyYXJ5X25hbWVzOyBkbworICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRmIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kZiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiID0gIlgiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUuJGFjbF9saWJleHQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2E9IiRkaXIvJGxpYm5hbWUuJGFjbF9saWJleHQiCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiICE9ICJYIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lLmxhIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2xhPSIkZGlyLyRsaWJuYW1lLmxhIgorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiICE9ICJYIjsgdGhlbgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBkb25lCisgICAgICAgICAgZmkKKyAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgIT0gIlgiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBMVExJQklDT05WPSIke0xUTElCSUNPTlZ9JHtMVExJQklDT05WOisgfS1MJGZvdW5kX2RpciAtbCRuYW1lIgorICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9zbyIgIT0gIlgiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRlbmFibGVfcnBhdGgiID0gbm8gfHwgdGVzdCAiWCRmb3VuZF9kaXIiID0gIlgvdXNyLyRhY2xfbGliZGlyc3RlbSI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCSUNPTlY9IiR7TElCSUNPTlZ9JHtMSUJJQ09OVjorIH0kZm91bmRfc28iCisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorICAgICAgICAgICAgICAgIGZvciB4IGluICRsdHJwYXRoZGlyczsgZG8KKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRmb3VuZF9kaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICBsdHJwYXRoZGlycz0iJGx0cnBhdGhkaXJzICRmb3VuZF9kaXIiCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGFjbF9oYXJkY29kZV9kaXJlY3QiID0geWVzOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJJQ09OVj0iJHtMSUJJQ09OVn0ke0xJQklDT05WOisgfSRmb3VuZF9zbyIKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiICYmIHRlc3QgIiRhY2xfaGFyZGNvZGVfbWludXNfTCIgPSBubzsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCSUNPTlY9IiR7TElCSUNPTlZ9JHtMSUJJQ09OVjorIH0kZm91bmRfc28iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRycGF0aGRpcnM7IGRvCisgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGZvdW5kX2RpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIHJwYXRoZGlycz0iJHJwYXRoZGlycyAkZm91bmRfZGlyIgorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRMREZMQUdTICRMSUJJQ09OVjsgZG8KKworICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCisgIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCisgIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCisgIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4IgorICBldmFsIHg9XCIkeFwiCisgIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhlY19wcmVmaXgiCisgIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKKworICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1MJGZvdW5kX2RpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIExJQklDT05WPSIke0xJQklDT05WfSR7TElCSUNPTlY6KyB9LUwkZm91bmRfZGlyIgorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkYWNsX2hhcmRjb2RlX21pbnVzX0wiICE9IG5vOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCSUNPTlY9IiR7TElCSUNPTlZ9JHtMSUJJQ09OVjorIH0kZm91bmRfc28iCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCSUNPTlY9IiR7TElCSUNPTlZ9JHtMSUJJQ09OVjorIH0tbCRuYW1lIgorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2EiICE9ICJYIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJJQ09OVj0iJHtMSUJJQ09OVn0ke0xJQklDT05WOisgfSRmb3VuZF9hIgorICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJJQ09OVj0iJHtMSUJJQ09OVn0ke0xJQklDT05WOisgfS1MJGZvdW5kX2RpciAtbCRuYW1lIgorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj0KKyAgICAgICAgICAgIGNhc2UgIiRmb3VuZF9kaXIiIGluCisgICAgICAgICAgICAgICovJGFjbF9saWJkaXJzdGVtIHwgKi8kYWNsX2xpYmRpcnN0ZW0vKQorICAgICAgICAgICAgICAgIGJhc2VkaXI9YGVjaG8gIlgkZm91bmRfZGlyIiB8IHNlZCAtZSAncyxeWCwsJyAtZSAicywvJGFjbF9saWJkaXJzdGVtLyInKiQsLCdgCisgICAgICAgICAgICAgICAgTElCSUNPTlZfUFJFRklYPSIkYmFzZWRpciIKKyAgICAgICAgICAgICAgICBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9IiRiYXNlZGlyL2luY2x1ZGUiCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiAhPSAiWCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIgIT0gIlgvdXNyL2luY2x1ZGUiOyB0aGVuCisgICAgICAgICAgICAgICAgaGF2ZWl0PQorICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiA9ICJYL3Vzci9sb2NhbC9pbmNsdWRlIjsgdGhlbgorICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJEdDQyI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgICAgICAgICAgICAgICAgIGxpbnV4KiB8IGdudSogfCBrKmJzZCotZ251KSBoYXZlaXQ9eWVzOzsKKyAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkQ1BQRkxBR1MgJElOQ0lDT05WOyBkbworCisgIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCIKKyAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZpeCIKKyAgYWNsX3NhdmVfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCIKKyAgZXhlY19wcmVmaXg9IiRhY2xfZmluYWxfZXhlY19wcmVmaXgiCisgIGV2YWwgeD1cIiR4XCIKKyAgZXhlY19wcmVmaXg9IiRhY2xfc2F2ZV9leGVjX3ByZWZpeCIKKyAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4IgorCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1JJGFkZGl0aW9uYWxfaW5jbHVkZWRpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOQ0lDT05WPSIke0lOQ0lDT05WfSR7SU5DSUNPTlY6KyB9LUkkYWRkaXRpb25hbF9pbmNsdWRlZGlyIgorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRmb3VuZF9sYSI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZV9saWJkaXI9IiRsaWJkaXIiCisgICAgICAgICAgICAgIGNhc2UgIiRmb3VuZF9sYSIgaW4KKyAgICAgICAgICAgICAgICAqLyogfCAqXFwqKSAuICIkZm91bmRfbGEiIDs7CisgICAgICAgICAgICAgICAgKikgLiAiLi8kZm91bmRfbGEiIDs7CisgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgbGliZGlyPSIkc2F2ZV9saWJkaXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGRlcCBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworICAgICAgICAgICAgICAgIGNhc2UgIiRkZXAiIGluCisgICAgICAgICAgICAgICAgICAtTCopCisgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxfbGliZGlyPWBlY2hvICJYJGRlcCIgfCBzZWQgLWUgJ3MvXlgtTC8vJ2AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiAhPSAiWC91c3IvJGFjbF9saWJkaXJzdGVtIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiA9ICJYL3Vzci9sb2NhbC8kYWNsX2xpYmRpcnN0ZW0iOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkR0NDIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICRob3N0X29zIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGludXgqIHwgZ251KiB8IGsqYnNkKi1nbnUpIGhhdmVpdD15ZXM7OworICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRMREZMQUdTICRMSUJJQ09OVjsgZG8KKworICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCisgIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCisgIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCisgIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4IgorICBldmFsIHg9XCIkeFwiCisgIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhlY19wcmVmaXgiCisgIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKKworICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtTCRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCSUNPTlY9IiR7TElCSUNPTlZ9JHtMSUJJQ09OVjorIH0tTCRhZGRpdGlvbmFsX2xpYmRpciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTFRMSUJJQ09OVjsgZG8KKworICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCisgIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCisgIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCisgIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4IgorICBldmFsIHg9XCIkeFwiCisgIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhlY19wcmVmaXgiCisgIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKKworICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtTCRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRMSUJJQ09OVj0iJHtMVExJQklDT05WfSR7TFRMSUJJQ09OVjorIH0tTCRhZGRpdGlvbmFsX2xpYmRpciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgIC1SKikKKyAgICAgICAgICAgICAgICAgICAgZGlyPWBlY2hvICJYJGRlcCIgfCBzZWQgLWUgJ3MvXlgtUi8vJ2AKKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGVuYWJsZV9ycGF0aCIgIT0gbm87IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKyAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkcnBhdGhkaXJzOyBkbworICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGRpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJwYXRoZGlycz0iJHJwYXRoZGlycyAkZGlyIgorICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJGx0cnBhdGhkaXJzOyBkbworICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGRpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGx0cnBhdGhkaXJzPSIkbHRycGF0aGRpcnMgJGRpciIKKyAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgLWwqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzX25leHRfcm91bmQ9IiRuYW1lc19uZXh0X3JvdW5kICJgZWNobyAiWCRkZXAiIHwgc2VkIC1lICdzL15YLWwvLydgCisgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAqLmxhKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lc19uZXh0X3JvdW5kPSIkbmFtZXNfbmV4dF9yb3VuZCAiYGVjaG8gIlgkZGVwIiB8IHNlZCAtZSAncyxeWC4qLywsJyAtZSAncyxebGliLCwnIC1lICdzLFwubGEkLCwnYAorICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJJQ09OVj0iJHtMSUJJQ09OVn0ke0xJQklDT05WOisgfSRkZXAiCisgICAgICAgICAgICAgICAgICAgIExUTElCSUNPTlY9IiR7TFRMSUJJQ09OVn0ke0xUTElCSUNPTlY6KyB9JGRlcCIKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCSUNPTlY9IiR7TElCSUNPTlZ9JHtMSUJJQ09OVjorIH0tbCRuYW1lIgorICAgICAgICAgICAgTFRMSUJJQ09OVj0iJHtMVExJQklDT05WfSR7TFRMSUJJQ09OVjorIH0tbCRuYW1lIgorICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICBmaQorICAgIGRvbmUKKyAgZG9uZQorICBpZiB0ZXN0ICJYJHJwYXRoZGlycyIgIT0gIlgiOyB0aGVuCisgICAgaWYgdGVzdCAtbiAiJGFjbF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgYWxsZGlycz0KKyAgICAgIGZvciBmb3VuZF9kaXIgaW4gJHJwYXRoZGlyczsgZG8KKyAgICAgICAgYWxsZGlycz0iJHthbGxkaXJzfSR7YWxsZGlyczorJGFjbF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yfSRmb3VuZF9kaXIiCisgICAgICBkb25lCisgICAgICAgICAgICBhY2xfc2F2ZV9saWJkaXI9IiRsaWJkaXIiCisgICAgICBsaWJkaXI9IiRhbGxkaXJzIgorICAgICAgZXZhbCBmbGFnPVwiJGFjbF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKyAgICAgIGxpYmRpcj0iJGFjbF9zYXZlX2xpYmRpciIKKyAgICAgIExJQklDT05WPSIke0xJQklDT05WfSR7TElCSUNPTlY6KyB9JGZsYWciCisgICAgZWxzZQorICAgICAgICAgICAgZm9yIGZvdW5kX2RpciBpbiAkcnBhdGhkaXJzOyBkbworICAgICAgICBhY2xfc2F2ZV9saWJkaXI9IiRsaWJkaXIiCisgICAgICAgIGxpYmRpcj0iJGZvdW5kX2RpciIKKyAgICAgICAgZXZhbCBmbGFnPVwiJGFjbF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKyAgICAgICAgbGliZGlyPSIkYWNsX3NhdmVfbGliZGlyIgorICAgICAgICBMSUJJQ09OVj0iJHtMSUJJQ09OVn0ke0xJQklDT05WOisgfSRmbGFnIgorICAgICAgZG9uZQorICAgIGZpCisgIGZpCisgIGlmIHRlc3QgIlgkbHRycGF0aGRpcnMiICE9ICJYIjsgdGhlbgorICAgICAgICAgICAgZm9yIGZvdW5kX2RpciBpbiAkbHRycGF0aGRpcnM7IGRvCisgICAgICBMVExJQklDT05WPSIke0xUTElCSUNPTlZ9JHtMVExJQklDT05WOisgfS1SJGZvdW5kX2RpciIKKyAgICBkb25lCisgIGZpCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBDRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHtndF9jdl9mdW5jX0NGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWUrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgZ3Rfc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgTElCUz0iJExJQlMgLVdsLC1mcmFtZXdvcmsgLVdsLENvcmVGb3VuZGF0aW9uIgorICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9DRlByZWZlcmVuY2VzLmg+CitpbnQKK21haW4gKCkKK3sKK0NGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWUoTlVMTCwgTlVMTCkKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgIGd0X2N2X2Z1bmNfQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZT15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWd0X2N2X2Z1bmNfQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZT1ubworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgIExJQlM9IiRndF9zYXZlX0xJQlMiCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkZ3RfY3ZfZnVuY19DRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRndF9jdl9mdW5jX0NGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWUiID4mNjsgfQorICBpZiB0ZXN0ICRndF9jdl9mdW5jX0NGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWUgPSB5ZXM7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgSEFWRV9DRlBSRUZFUkVOQ0VTQ09QWUFQUFZBTFVFIDEKK19BQ0VPRgorCisgIGZpCisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIENGTG9jYWxlQ29weUN1cnJlbnQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgQ0ZMb2NhbGVDb3B5Q3VycmVudC4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7Z3RfY3ZfZnVuY19DRkxvY2FsZUNvcHlDdXJyZW50K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGd0X3NhdmVfTElCUz0iJExJQlMiCisgICAgIExJQlM9IiRMSUJTIC1XbCwtZnJhbWV3b3JrIC1XbCxDb3JlRm91bmRhdGlvbiIKKyAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ0ZMb2NhbGUuaD4KK2ludAorbWFpbiAoKQoreworQ0ZMb2NhbGVDb3B5Q3VycmVudCgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgZ3RfY3ZfZnVuY19DRkxvY2FsZUNvcHlDdXJyZW50PXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJZ3RfY3ZfZnVuY19DRkxvY2FsZUNvcHlDdXJyZW50PW5vCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgTElCUz0iJGd0X3NhdmVfTElCUyIKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRndF9jdl9mdW5jX0NGTG9jYWxlQ29weUN1cnJlbnQiID4mNQorZWNobyAiJHtFQ0hPX1R9JGd0X2N2X2Z1bmNfQ0ZMb2NhbGVDb3B5Q3VycmVudCIgPiY2OyB9CisgIGlmIHRlc3QgJGd0X2N2X2Z1bmNfQ0ZMb2NhbGVDb3B5Q3VycmVudCA9IHllczsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBIQVZFX0NGTE9DQUxFQ09QWUNVUlJFTlQgMQorX0FDRU9GCisKKyAgZmkKKyAgSU5UTF9NQUNPU1hfTElCUz0KKyAgaWYgdGVzdCAkZ3RfY3ZfZnVuY19DRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlID0geWVzIHx8IHRlc3QgJGd0X2N2X2Z1bmNfQ0ZMb2NhbGVDb3B5Q3VycmVudCA9IHllczsgdGhlbgorICAgIElOVExfTUFDT1NYX0xJQlM9Ii1XbCwtZnJhbWV3b3JrIC1XbCxDb3JlRm91bmRhdGlvbiIKKyAgZmkKKworCisKKworCisKKyAgTElCSU5UTD0KKyAgTFRMSUJJTlRMPQorICBQT1NVQj0KKworICAgIGNhc2UgIiAkZ3RfbmVlZHMgIiBpbgorICAgICoiIG5lZWQtZm9ybWF0c3RyaW5nLW1hY3JvcyAiKikgZ3RfYXBpX3ZlcnNpb249MyA7OworICAgICoiIG5lZWQtbmdldHRleHQgIiopIGd0X2FwaV92ZXJzaW9uPTIgOzsKKyAgICAqKSBndF9hcGlfdmVyc2lvbj0xIDs7CisgIGVzYWMKKyAgZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmM9Imd0X2N2X2Z1bmNfZ251Z2V0dGV4dCR7Z3RfYXBpX3ZlcnNpb259X2xpYmMiCisgIGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsPSJndF9jdl9mdW5jX2dudWdldHRleHQke2d0X2FwaV92ZXJzaW9ufV9saWJpbnRsIgorCisgICAgaWYgdGVzdCAiJFVTRV9OTFMiID0gInllcyI7IHRoZW4KKyAgICBndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQ9bm8KKworCisgICAgICAgIGlmIHRlc3QgJGd0X2FwaV92ZXJzaW9uIC1nZSAzOyB0aGVuCisgICAgICAgICAgZ3RfcmV2aXNpb25fdGVzdF9jb2RlPScKKyNpZm5kZWYgX19HTlVfR0VUVEVYVF9TVVBQT1JURURfUkVWSVNJT04KKyNkZWZpbmUgX19HTlVfR0VUVEVYVF9TVVBQT1JURURfUkVWSVNJT04obWFqb3IpICgobWFqb3IpID09IDAgPyAwIDogLTEpCisjZW5kaWYKK3R5cGVkZWYgaW50IGFycmF5IFsyICogKF9fR05VX0dFVFRFWFRfU1VQUE9SVEVEX1JFVklTSU9OKDApID49IDEpIC0gMV07CisnCisgICAgICAgIGVsc2UKKyAgICAgICAgICBndF9yZXZpc2lvbl90ZXN0X2NvZGU9CisgICAgICAgIGZpCisgICAgICAgIGlmIHRlc3QgJGd0X2FwaV92ZXJzaW9uIC1nZSAyOyB0aGVuCisgICAgICAgICAgZ3RfZXhwcmVzc2lvbl90ZXN0X2NvZGU9JyArICogbmdldHRleHQgKCIiLCAiIiwgMCknCisgICAgICAgIGVsc2UKKyAgICAgICAgICBndF9leHByZXNzaW9uX3Rlc3RfY29kZT0KKyAgICAgICAgZmkKKworICAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgR05VIGdldHRleHQgaW4gbGliYyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBHTlUgZ2V0dGV4dCBpbiBsaWJjLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgeyBhc192YXI9JGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJjOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGxpYmludGwuaD4KKyRndF9yZXZpc2lvbl90ZXN0X2NvZGUKK2V4dGVybiBpbnQgX25sX21zZ19jYXRfY250cjsKK2V4dGVybiBpbnQgKl9ubF9kb21haW5fYmluZGluZ3M7CitpbnQKK21haW4gKCkKK3sKK2JpbmR0ZXh0ZG9tYWluICgiIiwgIiIpOworcmV0dXJuICogZ2V0dGV4dCAoIiIpJGd0X2V4cHJlc3Npb25fdGVzdF9jb2RlICsgX25sX21zZ19jYXRfY250ciArICpfbmxfZG9tYWluX2JpbmRpbmdzCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKyAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorICBldmFsICIkZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmM9eWVzIgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJZXZhbCAiJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJjPW5vIgorZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRndF9mdW5jX2dudWdldHRleHRfbGliYyd9J2AKKwkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorCisgICAgICAgIGlmIHsgZXZhbCAiZ3RfdmFsPVwkJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJjIjsgdGVzdCAiJGd0X3ZhbCIgIT0gInllcyI7IH07IHRoZW4KKworCisKKworCisgICAgICAgICAgYW1fc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorCisgIGZvciBlbGVtZW50IGluICRJTkNJQ09OVjsgZG8KKyAgICBoYXZlaXQ9CisgICAgZm9yIHggaW4gJENQUEZMQUdTOyBkbworCisgIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCIKKyAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZpeCIKKyAgYWNsX3NhdmVfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCIKKyAgZXhlY19wcmVmaXg9IiRhY2xfZmluYWxfZXhlY19wcmVmaXgiCisgIGV2YWwgeD1cIiR4XCIKKyAgZXhlY19wcmVmaXg9IiRhY2xfc2F2ZV9leGVjX3ByZWZpeCIKKyAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4IgorCisgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZWxlbWVudCI7IHRoZW4KKyAgICAgICAgaGF2ZWl0PXllcworICAgICAgICBicmVhaworICAgICAgZmkKKyAgICBkb25lCisgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgIENQUEZMQUdTPSIke0NQUEZMQUdTfSR7Q1BQRkxBR1M6KyB9JGVsZW1lbnQiCisgICAgZmkKKyAgZG9uZQorCisKKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGljb252IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGljb252Li4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthbV9jdl9mdW5jX2ljb252K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKKyAgICBhbV9jdl9mdW5jX2ljb252PSJubywgY29uc2lkZXIgaW5zdGFsbGluZyBHTlUgbGliaWNvbnYiCisgICAgYW1fY3ZfbGliX2ljb252PW5vCisgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8aWNvbnYuaD4KK2ludAorbWFpbiAoKQoreworaWNvbnZfdCBjZCA9IGljb252X29wZW4oIiIsIiIpOworICAgICAgIGljb252KGNkLE5VTEwsTlVMTCxOVUxMLE5VTEwpOworICAgICAgIGljb252X2Nsb3NlKGNkKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgIGFtX2N2X2Z1bmNfaWNvbnY9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgaWYgdGVzdCAiJGFtX2N2X2Z1bmNfaWNvbnYiICE9IHllczsgdGhlbgorICAgICAgYW1fc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgIExJQlM9IiRMSUJTICRMSUJJQ09OViIKKyAgICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGljb252Lmg+CitpbnQKK21haW4gKCkKK3sKK2ljb252X3QgY2QgPSBpY29udl9vcGVuKCIiLCIiKTsKKyAgICAgICAgIGljb252KGNkLE5VTEwsTlVMTCxOVUxMLE5VTEwpOworICAgICAgICAgaWNvbnZfY2xvc2UoY2QpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgYW1fY3ZfbGliX2ljb252PXllcworICAgICAgICBhbV9jdl9mdW5jX2ljb252PXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisKK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgTElCUz0iJGFtX3NhdmVfTElCUyIKKyAgICBmaQorCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYW1fY3ZfZnVuY19pY29udiIgPiY1CitlY2hvICIke0VDSE9fVH0kYW1fY3ZfZnVuY19pY29udiIgPiY2OyB9CisgIGlmIHRlc3QgIiRhbV9jdl9mdW5jX2ljb252IiA9IHllczsgdGhlbgorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB3b3JraW5nIGljb252IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHdvcmtpbmcgaWNvbnYuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FtX2N2X2Z1bmNfaWNvbnZfd29ya3Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworICAgICAgICAgICAgYW1fc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgIGlmIHRlc3QgJGFtX2N2X2xpYl9pY29udiA9IHllczsgdGhlbgorICAgICAgICBMSUJTPSIkTElCUyAkTElCSUNPTlYiCisgICAgICBmaQorICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgIGFpeCogfCBocHV4KikgYW1fY3ZfZnVuY19pY29udl93b3Jrcz0iZ3Vlc3Npbmcgbm8iIDs7CisgICAgICAgICAgICopICAgICAgICAgICAgYW1fY3ZfZnVuY19pY29udl93b3Jrcz0iZ3Vlc3NpbmcgeWVzIiA7OworICAgICAgICAgZXNhYworZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPGljb252Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CitpbnQgbWFpbiAoKQoreworICAvKiBUZXN0IGFnYWluc3QgQUlYIDUuMSBidWc6IEZhaWx1cmVzIGFyZSBub3QgZGlzdGluZ3Vpc2hhYmxlIGZyb20gc3VjY2Vzc2Z1bAorICAgICByZXR1cm5zLiAgKi8KKyAgeworICAgIGljb252X3QgY2RfdXRmOF90b184ODU5MSA9IGljb252X29wZW4gKCJJU084ODU5LTEiLCAiVVRGLTgiKTsKKyAgICBpZiAoY2RfdXRmOF90b184ODU5MSAhPSAoaWNvbnZfdCkoLTEpKQorICAgICAgeworICAgICAgICBzdGF0aWMgY29uc3QgY2hhciBpbnB1dFtdID0gIlwzNDJcMjAyXDI1NCI7IC8qIEVVUk8gU0lHTiAqLworICAgICAgICBjaGFyIGJ1ZlsxMF07CisgICAgICAgIGNvbnN0IGNoYXIgKmlucHRyID0gaW5wdXQ7CisgICAgICAgIHNpemVfdCBpbmJ5dGVzbGVmdCA9IHN0cmxlbiAoaW5wdXQpOworICAgICAgICBjaGFyICpvdXRwdHIgPSBidWY7CisgICAgICAgIHNpemVfdCBvdXRieXRlc2xlZnQgPSBzaXplb2YgKGJ1Zik7CisgICAgICAgIHNpemVfdCByZXMgPSBpY29udiAoY2RfdXRmOF90b184ODU5MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKikgJmlucHRyLCAmaW5ieXRlc2xlZnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm91dHB0ciwgJm91dGJ5dGVzbGVmdCk7CisgICAgICAgIGlmIChyZXMgPT0gMCkKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKyAgfQorI2lmIDAgLyogVGhpcyBidWcgY291bGQgYmUgd29ya2VkIGFyb3VuZCBieSB0aGUgY2FsbGVyLiAgKi8KKyAgLyogVGVzdCBhZ2FpbnN0IEhQLVVYIDExLjExIGJ1ZzogUG9zaXRpdmUgcmV0dXJuIHZhbHVlIGluc3RlYWQgb2YgMC4gICovCisgIHsKKyAgICBpY29udl90IGNkXzg4NTkxX3RvX3V0ZjggPSBpY29udl9vcGVuICgidXRmOCIsICJpc284ODU5MSIpOworICAgIGlmIChjZF84ODU5MV90b191dGY4ICE9IChpY29udl90KSgtMSkpCisgICAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyIGlucHV0W10gPSAiXDMwNHJnZXIgbWl0IGJcMzY2c2VuIEJcMzc0YmNoZW4gb2huZSBBdWdlbm1hXDMzNyI7CisgICAgICAgIGNoYXIgYnVmWzUwXTsKKyAgICAgICAgY29uc3QgY2hhciAqaW5wdHIgPSBpbnB1dDsKKyAgICAgICAgc2l6ZV90IGluYnl0ZXNsZWZ0ID0gc3RybGVuIChpbnB1dCk7CisgICAgICAgIGNoYXIgKm91dHB0ciA9IGJ1ZjsKKyAgICAgICAgc2l6ZV90IG91dGJ5dGVzbGVmdCA9IHNpemVvZiAoYnVmKTsKKyAgICAgICAgc2l6ZV90IHJlcyA9IGljb252IChjZF84ODU5MV90b191dGY4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICoqKSAmaW5wdHIsICZpbmJ5dGVzbGVmdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3V0cHRyLCAmb3V0Ynl0ZXNsZWZ0KTsKKyAgICAgICAgaWYgKChpbnQpcmVzID4gMCkKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKyAgfQorI2VuZGlmCisgIC8qIFRlc3QgYWdhaW5zdCBIUC1VWCAxMS4xMSBidWc6IE5vIGNvbnZlcnRlciBmcm9tIEVVQy1KUCB0byBVVEYtOCBpcworICAgICBwcm92aWRlZC4gICovCisgIGlmICgvKiBUcnkgc3RhbmRhcmRpemVkIG5hbWVzLiAgKi8KKyAgICAgIGljb252X29wZW4gKCJVVEYtOCIsICJFVUMtSlAiKSA9PSAoaWNvbnZfdCkoLTEpCisgICAgICAvKiBUcnkgSVJJWCwgT1NGLzEgbmFtZXMuICAqLworICAgICAgJiYgaWNvbnZfb3BlbiAoIlVURi04IiwgImV1Y0pQIikgPT0gKGljb252X3QpKC0xKQorICAgICAgLyogVHJ5IEFJWCBuYW1lcy4gICovCisgICAgICAmJiBpY29udl9vcGVuICgiVVRGLTgiLCAiSUJNLWV1Y0pQIikgPT0gKGljb252X3QpKC0xKQorICAgICAgLyogVHJ5IEhQLVVYIG5hbWVzLiAgKi8KKyAgICAgICYmIGljb252X29wZW4gKCJ1dGY4IiwgImV1Y0pQIikgPT0gKGljb252X3QpKC0xKSkKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCisgIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY190cnkiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFtX2N2X2Z1bmNfaWNvbnZfd29ya3M9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1CitlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisoIGV4aXQgJGFjX3N0YXR1cyApCithbV9jdl9mdW5jX2ljb252X3dvcmtzPW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorCisKKyAgICAgIExJQlM9IiRhbV9zYXZlX0xJQlMiCisKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhbV9jdl9mdW5jX2ljb252X3dvcmtzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhbV9jdl9mdW5jX2ljb252X3dvcmtzIiA+JjY7IH0KKyAgICBjYXNlICIkYW1fY3ZfZnVuY19pY29udl93b3JrcyIgaW4KKyAgICAgICpubykgYW1fZnVuY19pY29udj1ubyBhbV9jdl9saWJfaWNvbnY9bm8gOzsKKyAgICAgICopICAgYW1fZnVuY19pY29udj15ZXMgOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICBhbV9mdW5jX2ljb252PW5vIGFtX2N2X2xpYl9pY29udj1ubworICBmaQorICBpZiB0ZXN0ICIkYW1fZnVuY19pY29udiIgPSB5ZXM7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgSEFWRV9JQ09OViAxCitfQUNFT0YKKworICBmaQorICBpZiB0ZXN0ICIkYW1fY3ZfbGliX2ljb252IiA9IHllczsgdGhlbgorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGhvdyB0byBsaW5rIHdpdGggbGliaWNvbnYiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBob3cgdG8gbGluayB3aXRoIGxpYmljb252Li4uICRFQ0hPX0MiID4mNjsgfQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJExJQklDT05WIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRMSUJJQ09OViIgPiY2OyB9CisgIGVsc2UKKyAgICAgICAgICAgIENQUEZMQUdTPSIkYW1fc2F2ZV9DUFBGTEFHUyIKKyAgICBMSUJJQ09OVj0KKyAgICBMVExJQklDT05WPQorICBmaQorCisKKworCisKKworCisKKyAgICB1c2VfYWRkaXRpb25hbD15ZXMKKworICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCisgIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCisgIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCisgIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4IgorCisgICAgZXZhbCBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9XCIkaW5jbHVkZWRpclwiCisgICAgZXZhbCBhZGRpdGlvbmFsX2xpYmRpcj1cIiRsaWJkaXJcIgorCisgIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhlY19wcmVmaXgiCisgIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWxpYmludGwtcHJlZml4IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9saWJpbnRsX3ByZWZpeCtzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSR3aXRoX2xpYmludGxfcHJlZml4OworICAgIGlmIHRlc3QgIlgkd2l0aHZhbCIgPSAiWG5vIjsgdGhlbgorICAgICAgdXNlX2FkZGl0aW9uYWw9bm8KKyAgICBlbHNlCisgICAgICBpZiB0ZXN0ICJYJHdpdGh2YWwiID0gIlgiOyB0aGVuCisKKyAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4IgorICBwcmVmaXg9IiRhY2xfZmluYWxfcHJlZml4IgorICBhY2xfc2F2ZV9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgorICBleGVjX3ByZWZpeD0iJGFjbF9maW5hbF9leGVjX3ByZWZpeCIKKworICAgICAgICAgIGV2YWwgYWRkaXRpb25hbF9pbmNsdWRlZGlyPVwiJGluY2x1ZGVkaXJcIgorICAgICAgICAgIGV2YWwgYWRkaXRpb25hbF9saWJkaXI9XCIkbGliZGlyXCIKKworICBleGVjX3ByZWZpeD0iJGFjbF9zYXZlX2V4ZWNfcHJlZml4IgorICBwcmVmaXg9IiRhY2xfc2F2ZV9wcmVmaXgiCisKKyAgICAgIGVsc2UKKyAgICAgICAgYWRkaXRpb25hbF9pbmNsdWRlZGlyPSIkd2l0aHZhbC9pbmNsdWRlIgorICAgICAgICBhZGRpdGlvbmFsX2xpYmRpcj0iJHdpdGh2YWwvJGFjbF9saWJkaXJzdGVtIgorICAgICAgZmkKKyAgICBmaQorCitmaQorCisgICAgICBMSUJJTlRMPQorICBMVExJQklOVEw9CisgIElOQ0lOVEw9CisgIExJQklOVExfUFJFRklYPQorICBycGF0aGRpcnM9CisgIGx0cnBhdGhkaXJzPQorICBuYW1lc19hbHJlYWR5X2hhbmRsZWQ9CisgIG5hbWVzX25leHRfcm91bmQ9J2ludGwgJworICB3aGlsZSB0ZXN0IC1uICIkbmFtZXNfbmV4dF9yb3VuZCI7IGRvCisgICAgbmFtZXNfdGhpc19yb3VuZD0iJG5hbWVzX25leHRfcm91bmQiCisgICAgbmFtZXNfbmV4dF9yb3VuZD0KKyAgICBmb3IgbmFtZSBpbiAkbmFtZXNfdGhpc19yb3VuZDsgZG8KKyAgICAgIGFscmVhZHlfaGFuZGxlZD0KKyAgICAgIGZvciBuIGluICRuYW1lc19hbHJlYWR5X2hhbmRsZWQ7IGRvCisgICAgICAgIGlmIHRlc3QgIiRuIiA9ICIkbmFtZSI7IHRoZW4KKyAgICAgICAgICBhbHJlYWR5X2hhbmRsZWQ9eWVzCisgICAgICAgICAgYnJlYWsKKyAgICAgICAgZmkKKyAgICAgIGRvbmUKKyAgICAgIGlmIHRlc3QgLXogIiRhbHJlYWR5X2hhbmRsZWQiOyB0aGVuCisgICAgICAgIG5hbWVzX2FscmVhZHlfaGFuZGxlZD0iJG5hbWVzX2FscmVhZHlfaGFuZGxlZCAkbmFtZSIKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwcGVybmFtZT1gZWNobyAiJG5hbWUiIHwgc2VkIC1lICd5fGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tfEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19ffCdgCisgICAgICAgIGV2YWwgdmFsdWU9XCJcJEhBVkVfTElCJHVwcGVybmFtZVwiCisgICAgICAgIGlmIHRlc3QgLW4gIiR2YWx1ZSI7IHRoZW4KKyAgICAgICAgICBpZiB0ZXN0ICIkdmFsdWUiID0geWVzOyB0aGVuCisgICAgICAgICAgICBldmFsIHZhbHVlPVwiXCRMSUIkdXBwZXJuYW1lXCIKKyAgICAgICAgICAgIHRlc3QgLXogIiR2YWx1ZSIgfHwgTElCSU5UTD0iJHtMSUJJTlRMfSR7TElCSU5UTDorIH0kdmFsdWUiCisgICAgICAgICAgICBldmFsIHZhbHVlPVwiXCRMVExJQiR1cHBlcm5hbWVcIgorICAgICAgICAgICAgdGVzdCAteiAiJHZhbHVlIiB8fCBMVExJQklOVEw9IiR7TFRMSUJJTlRMfSR7TFRMSUJJTlRMOisgfSR2YWx1ZSIKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6CisgICAgICAgICAgZmkKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPQorICAgICAgICAgIGZvdW5kX2xhPQorICAgICAgICAgIGZvdW5kX3NvPQorICAgICAgICAgIGZvdW5kX2E9CisgICAgICAgICAgZXZhbCBsaWJuYW1lPVwiJGFjbF9saWJuYW1lX3NwZWNcIiAgICAjIHR5cGljYWxseTogbGlibmFtZT1saWIkbmFtZQorICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY2xfc2hsaWJleHQiOyB0aGVuCisgICAgICAgICAgICBzaHJleHQ9Ii4kYWNsX3NobGliZXh0IiAgICAgICAgICAgICAjIHR5cGljYWxseTogc2hyZXh0PS5zbworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNocmV4dD0KKyAgICAgICAgICBmaQorICAgICAgICAgIGlmIHRlc3QgJHVzZV9hZGRpdGlvbmFsID0geWVzOyB0aGVuCisgICAgICAgICAgICBkaXI9IiRhZGRpdGlvbmFsX2xpYmRpciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY2xfc2hsaWJleHQiOyB0aGVuCisgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUkc2hyZXh0IjsgdGhlbgorICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKyAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kbGlibmFtZSRzaHJleHQiCisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkYWNsX2xpYnJhcnlfbmFtZXNfc3BlYyIgPSAnJGxpYm5hbWUkc2hyZXh0JHZlcnN1ZmZpeCc7IHRoZW4KKyAgICAgICAgICAgICAgICAgIHZlcj1gKGNkICIkZGlyIiAmJiBcCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiAiJGxpYm5hbWUkc2hyZXh0Ii4qOyBkbyBlY2hvICIkZiI7IGRvbmUgXAorICAgICAgICAgICAgICAgICAgICAgICAgfCBzZWQgLWUgInMsXiRsaWJuYW1lJHNocmV4dFxcXFwuLCwiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgc29ydCAtdCAnLicgLW4gLXIgLWsxLDEgLWsyLDIgLWszLDMgLWs0LDQgLWs1LDUgXAorICAgICAgICAgICAgICAgICAgICAgICAgfCBzZWQgMXEgKSAyPi9kZXYvbnVsbGAKKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiR2ZXIiICYmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUkc2hyZXh0LiR2ZXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKyAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGxpYm5hbWUkc2hyZXh0LiR2ZXIiCisgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIGV2YWwgbGlicmFyeV9uYW1lcz1cIiRhY2xfbGlicmFyeV9uYW1lc19zcGVjXCIKKyAgICAgICAgICAgICAgICAgIGZvciBmIGluICRsaWJyYXJ5X25hbWVzOyBkbworICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRmIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kZiIKKyAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiID0gIlgiOyB0aGVuCisgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUuJGFjbF9saWJleHQiOyB0aGVuCisgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorICAgICAgICAgICAgICAgIGZvdW5kX2E9IiRkaXIvJGxpYm5hbWUuJGFjbF9saWJleHQiCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiICE9ICJYIjsgdGhlbgorICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lLmxhIjsgdGhlbgorICAgICAgICAgICAgICAgIGZvdW5kX2xhPSIkZGlyLyRsaWJuYW1lLmxhIgorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZmkKKyAgICAgICAgICBmaQorICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiA9ICJYIjsgdGhlbgorICAgICAgICAgICAgZm9yIHggaW4gJExERkxBR1MgJExUTElCSU5UTDsgZG8KKworICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCisgIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCisgIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCisgIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4IgorICBldmFsIHg9XCIkeFwiCisgIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhlY19wcmVmaXgiCisgIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKKworICAgICAgICAgICAgICBjYXNlICIkeCIgaW4KKyAgICAgICAgICAgICAgICAtTCopCisgICAgICAgICAgICAgICAgICBkaXI9YGVjaG8gIlgkeCIgfCBzZWQgLWUgJ3MvXlgtTC8vJ2AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY2xfc2hsaWJleHQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUkc2hyZXh0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kbGlibmFtZSRzaHJleHQiCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkYWNsX2xpYnJhcnlfbmFtZXNfc3BlYyIgPSAnJGxpYm5hbWUkc2hyZXh0JHZlcnN1ZmZpeCc7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcj1gKGNkICIkZGlyIiAmJiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiAiJGxpYm5hbWUkc2hyZXh0Ii4qOyBkbyBlY2hvICIkZiI7IGRvbmUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZWQgLWUgInMsXiRsaWJuYW1lJHNocmV4dFxcXFwuLCwiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc29ydCAtdCAnLicgLW4gLXIgLWsxLDEgLWsyLDIgLWszLDMgLWs0LDQgLWs1LDUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZWQgMXEgKSAyPi9kZXYvbnVsbGAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiR2ZXIiICYmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUkc2hyZXh0LiR2ZXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGxpYm5hbWUkc2hyZXh0LiR2ZXIiCisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwgbGlicmFyeV9uYW1lcz1cIiRhY2xfbGlicmFyeV9uYW1lc19zcGVjXCIKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmIGluICRsaWJyYXJ5X25hbWVzOyBkbworICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRmIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kZiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiID0gIlgiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUuJGFjbF9saWJleHQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2E9IiRkaXIvJGxpYm5hbWUuJGFjbF9saWJleHQiCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiICE9ICJYIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lLmxhIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2xhPSIkZGlyLyRsaWJuYW1lLmxhIgorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiICE9ICJYIjsgdGhlbgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBkb25lCisgICAgICAgICAgZmkKKyAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgIT0gIlgiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBMVExJQklOVEw9IiR7TFRMSUJJTlRMfSR7TFRMSUJJTlRMOisgfS1MJGZvdW5kX2RpciAtbCRuYW1lIgorICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9zbyIgIT0gIlgiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRlbmFibGVfcnBhdGgiID0gbm8gfHwgdGVzdCAiWCRmb3VuZF9kaXIiID0gIlgvdXNyLyRhY2xfbGliZGlyc3RlbSI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCSU5UTD0iJHtMSUJJTlRMfSR7TElCSU5UTDorIH0kZm91bmRfc28iCisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorICAgICAgICAgICAgICAgIGZvciB4IGluICRsdHJwYXRoZGlyczsgZG8KKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRmb3VuZF9kaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICBsdHJwYXRoZGlycz0iJGx0cnBhdGhkaXJzICRmb3VuZF9kaXIiCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGFjbF9oYXJkY29kZV9kaXJlY3QiID0geWVzOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJJTlRMPSIke0xJQklOVEx9JHtMSUJJTlRMOisgfSRmb3VuZF9zbyIKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiICYmIHRlc3QgIiRhY2xfaGFyZGNvZGVfbWludXNfTCIgPSBubzsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCSU5UTD0iJHtMSUJJTlRMfSR7TElCSU5UTDorIH0kZm91bmRfc28iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRycGF0aGRpcnM7IGRvCisgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGZvdW5kX2RpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIHJwYXRoZGlycz0iJHJwYXRoZGlycyAkZm91bmRfZGlyIgorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRMREZMQUdTICRMSUJJTlRMOyBkbworCisgIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCIKKyAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZpeCIKKyAgYWNsX3NhdmVfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCIKKyAgZXhlY19wcmVmaXg9IiRhY2xfZmluYWxfZXhlY19wcmVmaXgiCisgIGV2YWwgeD1cIiR4XCIKKyAgZXhlY19wcmVmaXg9IiRhY2xfc2F2ZV9leGVjX3ByZWZpeCIKKyAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4IgorCisgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUwkZm91bmRfZGlyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgTElCSU5UTD0iJHtMSUJJTlRMfSR7TElCSU5UTDorIH0tTCRmb3VuZF9kaXIiCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRhY2xfaGFyZGNvZGVfbWludXNfTCIgIT0gbm87IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJJTlRMPSIke0xJQklOVEx9JHtMSUJJTlRMOisgfSRmb3VuZF9zbyIKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJJTlRMPSIke0xJQklOVEx9JHtMSUJJTlRMOisgfS1sJG5hbWUiCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfYSIgIT0gIlgiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQklOVEw9IiR7TElCSU5UTH0ke0xJQklOVEw6KyB9JGZvdW5kX2EiCisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQklOVEw9IiR7TElCSU5UTH0ke0xJQklOVEw6KyB9LUwkZm91bmRfZGlyIC1sJG5hbWUiCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbF9pbmNsdWRlZGlyPQorICAgICAgICAgICAgY2FzZSAiJGZvdW5kX2RpciIgaW4KKyAgICAgICAgICAgICAgKi8kYWNsX2xpYmRpcnN0ZW0gfCAqLyRhY2xfbGliZGlyc3RlbS8pCisgICAgICAgICAgICAgICAgYmFzZWRpcj1gZWNobyAiWCRmb3VuZF9kaXIiIHwgc2VkIC1lICdzLF5YLCwnIC1lICJzLC8kYWNsX2xpYmRpcnN0ZW0vIicqJCwsJ2AKKyAgICAgICAgICAgICAgICBMSUJJTlRMX1BSRUZJWD0iJGJhc2VkaXIiCisgICAgICAgICAgICAgICAgYWRkaXRpb25hbF9pbmNsdWRlZGlyPSIkYmFzZWRpci9pbmNsdWRlIgorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIgIT0gIlgiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiICE9ICJYL3Vzci9pbmNsdWRlIjsgdGhlbgorICAgICAgICAgICAgICAgIGhhdmVpdD0KKyAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIgPSAiWC91c3IvbG9jYWwvaW5jbHVkZSI7IHRoZW4KKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRHQ0MiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgICAgICAgICAgICAgICAgICBsaW51eCogfCBnbnUqIHwgaypic2QqLWdudSkgaGF2ZWl0PXllczs7CisgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJENQUEZMQUdTICRJTkNJTlRMOyBkbworCisgIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCIKKyAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZpeCIKKyAgYWNsX3NhdmVfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCIKKyAgZXhlY19wcmVmaXg9IiRhY2xfZmluYWxfZXhlY19wcmVmaXgiCisgIGV2YWwgeD1cIiR4XCIKKyAgZXhlY19wcmVmaXg9IiRhY2xfc2F2ZV9leGVjX3ByZWZpeCIKKyAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4IgorCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1JJGFkZGl0aW9uYWxfaW5jbHVkZWRpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOQ0lOVEw9IiR7SU5DSU5UTH0ke0lOQ0lOVEw6KyB9LUkkYWRkaXRpb25hbF9pbmNsdWRlZGlyIgorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRmb3VuZF9sYSI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZV9saWJkaXI9IiRsaWJkaXIiCisgICAgICAgICAgICAgIGNhc2UgIiRmb3VuZF9sYSIgaW4KKyAgICAgICAgICAgICAgICAqLyogfCAqXFwqKSAuICIkZm91bmRfbGEiIDs7CisgICAgICAgICAgICAgICAgKikgLiAiLi8kZm91bmRfbGEiIDs7CisgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgbGliZGlyPSIkc2F2ZV9saWJkaXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGRlcCBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworICAgICAgICAgICAgICAgIGNhc2UgIiRkZXAiIGluCisgICAgICAgICAgICAgICAgICAtTCopCisgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxfbGliZGlyPWBlY2hvICJYJGRlcCIgfCBzZWQgLWUgJ3MvXlgtTC8vJ2AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiAhPSAiWC91c3IvJGFjbF9saWJkaXJzdGVtIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiA9ICJYL3Vzci9sb2NhbC8kYWNsX2xpYmRpcnN0ZW0iOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkR0NDIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICRob3N0X29zIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGludXgqIHwgZ251KiB8IGsqYnNkKi1nbnUpIGhhdmVpdD15ZXM7OworICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRMREZMQUdTICRMSUJJTlRMOyBkbworCisgIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCIKKyAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZpeCIKKyAgYWNsX3NhdmVfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCIKKyAgZXhlY19wcmVmaXg9IiRhY2xfZmluYWxfZXhlY19wcmVmaXgiCisgIGV2YWwgeD1cIiR4XCIKKyAgZXhlY19wcmVmaXg9IiRhY2xfc2F2ZV9leGVjX3ByZWZpeCIKKyAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4IgorCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1MJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZCAiJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJJTlRMPSIke0xJQklOVEx9JHtMSUJJTlRMOisgfS1MJGFkZGl0aW9uYWxfbGliZGlyIgorICAgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRMREZMQUdTICRMVExJQklOVEw7IGRvCisKKyAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4IgorICBwcmVmaXg9IiRhY2xfZmluYWxfcHJlZml4IgorICBhY2xfc2F2ZV9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgorICBleGVjX3ByZWZpeD0iJGFjbF9maW5hbF9leGVjX3ByZWZpeCIKKyAgZXZhbCB4PVwiJHhcIgorICBleGVjX3ByZWZpeD0iJGFjbF9zYXZlX2V4ZWNfcHJlZml4IgorICBwcmVmaXg9IiRhY2xfc2F2ZV9wcmVmaXgiCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUwkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1kICIkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUTElCSU5UTD0iJHtMVExJQklOVEx9JHtMVExJQklOVEw6KyB9LUwkYWRkaXRpb25hbF9saWJkaXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAtUiopCisgICAgICAgICAgICAgICAgICAgIGRpcj1gZWNobyAiWCRkZXAiIHwgc2VkIC1lICdzL15YLVIvLydgCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRlbmFibGVfcnBhdGgiICE9IG5vOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJHJwYXRoZGlyczsgZG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRkaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBycGF0aGRpcnM9IiRycGF0aGRpcnMgJGRpciIKKyAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorICAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRsdHJwYXRoZGlyczsgZG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRkaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBsdHJwYXRoZGlycz0iJGx0cnBhdGhkaXJzICRkaXIiCisgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgIC1sKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lc19uZXh0X3JvdW5kPSIkbmFtZXNfbmV4dF9yb3VuZCAiYGVjaG8gIlgkZGVwIiB8IHNlZCAtZSAncy9eWC1sLy8nYAorICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgKi5sYSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNfbmV4dF9yb3VuZD0iJG5hbWVzX25leHRfcm91bmQgImBlY2hvICJYJGRlcCIgfCBzZWQgLWUgJ3MsXlguKi8sLCcgLWUgJ3MsXmxpYiwsJyAtZSAncyxcLmxhJCwsJ2AKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCSU5UTD0iJHtMSUJJTlRMfSR7TElCSU5UTDorIH0kZGVwIgorICAgICAgICAgICAgICAgICAgICBMVExJQklOVEw9IiR7TFRMSUJJTlRMfSR7TFRMSUJJTlRMOisgfSRkZXAiCisgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICBmaQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQklOVEw9IiR7TElCSU5UTH0ke0xJQklOVEw6KyB9LWwkbmFtZSIKKyAgICAgICAgICAgIExUTElCSU5UTD0iJHtMVExJQklOVEx9JHtMVExJQklOVEw6KyB9LWwkbmFtZSIKKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgZmkKKyAgICBkb25lCisgIGRvbmUKKyAgaWYgdGVzdCAiWCRycGF0aGRpcnMiICE9ICJYIjsgdGhlbgorICAgIGlmIHRlc3QgLW4gIiRhY2xfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGFsbGRpcnM9CisgICAgICBmb3IgZm91bmRfZGlyIGluICRycGF0aGRpcnM7IGRvCisgICAgICAgIGFsbGRpcnM9IiR7YWxsZGlyc30ke2FsbGRpcnM6KyRhY2xfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcn0kZm91bmRfZGlyIgorICAgICAgZG9uZQorICAgICAgICAgICAgYWNsX3NhdmVfbGliZGlyPSIkbGliZGlyIgorICAgICAgbGliZGlyPSIkYWxsZGlycyIKKyAgICAgIGV2YWwgZmxhZz1cIiRhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisgICAgICBsaWJkaXI9IiRhY2xfc2F2ZV9saWJkaXIiCisgICAgICBMSUJJTlRMPSIke0xJQklOVEx9JHtMSUJJTlRMOisgfSRmbGFnIgorICAgIGVsc2UKKyAgICAgICAgICAgIGZvciBmb3VuZF9kaXIgaW4gJHJwYXRoZGlyczsgZG8KKyAgICAgICAgYWNsX3NhdmVfbGliZGlyPSIkbGliZGlyIgorICAgICAgICBsaWJkaXI9IiRmb3VuZF9kaXIiCisgICAgICAgIGV2YWwgZmxhZz1cIiRhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisgICAgICAgIGxpYmRpcj0iJGFjbF9zYXZlX2xpYmRpciIKKyAgICAgICAgTElCSU5UTD0iJHtMSUJJTlRMfSR7TElCSU5UTDorIH0kZmxhZyIKKyAgICAgIGRvbmUKKyAgICBmaQorICBmaQorICBpZiB0ZXN0ICJYJGx0cnBhdGhkaXJzIiAhPSAiWCI7IHRoZW4KKyAgICAgICAgICAgIGZvciBmb3VuZF9kaXIgaW4gJGx0cnBhdGhkaXJzOyBkbworICAgICAgTFRMSUJJTlRMPSIke0xUTElCSU5UTH0ke0xUTElCSU5UTDorIH0tUiRmb3VuZF9kaXIiCisgICAgZG9uZQorICBmaQorCisgICAgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEdOVSBnZXR0ZXh0IGluIGxpYmludGwiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgR05VIGdldHRleHQgaW4gbGliaW50bC4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHsgYXNfdmFyPSRndF9mdW5jX2dudWdldHRleHRfbGliaW50bDsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBndF9zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisgICAgICAgICAgICBDUFBGTEFHUz0iJENQUEZMQUdTICRJTkNJTlRMIgorICAgICAgICAgICAgZ3Rfc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgICAgICAgIExJQlM9IiRMSUJTICRMSUJJTlRMIgorICAgICAgICAgICAgICAgICAgICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8bGliaW50bC5oPgorJGd0X3JldmlzaW9uX3Rlc3RfY29kZQorZXh0ZXJuIGludCBfbmxfbXNnX2NhdF9jbnRyOworZXh0ZXJuCisjaWZkZWYgX19jcGx1c3BsdXMKKyJDIgorI2VuZGlmCitjb25zdCBjaGFyICpfbmxfZXhwYW5kX2FsaWFzIChjb25zdCBjaGFyICopOworaW50CittYWluICgpCit7CitiaW5kdGV4dGRvbWFpbiAoIiIsICIiKTsKK3JldHVybiAqIGdldHRleHQgKCIiKSRndF9leHByZXNzaW9uX3Rlc3RfY29kZSArIF9ubF9tc2dfY2F0X2NudHIgKyAqX25sX2V4cGFuZF9hbGlhcyAoIiIpCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKyAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorICBldmFsICIkZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmludGw9eWVzIgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJZXZhbCAiJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsPW5vIgorZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgICAgICAgICAgICAgICAgICBpZiB7IGV2YWwgImd0X3ZhbD1cJCRndF9mdW5jX2dudWdldHRleHRfbGliaW50bCI7IHRlc3QgIiRndF92YWwiICE9IHllczsgfSAmJiB0ZXN0IC1uICIkTElCSUNPTlYiOyB0aGVuCisgICAgICAgICAgICAgIExJQlM9IiRMSUJTICRMSUJJQ09OViIKKyAgICAgICAgICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8bGliaW50bC5oPgorJGd0X3JldmlzaW9uX3Rlc3RfY29kZQorZXh0ZXJuIGludCBfbmxfbXNnX2NhdF9jbnRyOworZXh0ZXJuCisjaWZkZWYgX19jcGx1c3BsdXMKKyJDIgorI2VuZGlmCitjb25zdCBjaGFyICpfbmxfZXhwYW5kX2FsaWFzIChjb25zdCBjaGFyICopOworaW50CittYWluICgpCit7CitiaW5kdGV4dGRvbWFpbiAoIiIsICIiKTsKK3JldHVybiAqIGdldHRleHQgKCIiKSRndF9leHByZXNzaW9uX3Rlc3RfY29kZSArIF9ubF9tc2dfY2F0X2NudHIgKyAqX25sX2V4cGFuZF9hbGlhcyAoIiIpCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKyAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorICBMSUJJTlRMPSIkTElCSU5UTCAkTElCSUNPTlYiCisgICAgICAgICAgICAgICAgTFRMSUJJTlRMPSIkTFRMSUJJTlRMICRMVExJQklDT05WIgorICAgICAgICAgICAgICAgIGV2YWwgIiRndF9mdW5jX2dudWdldHRleHRfbGliaW50bD15ZXMiCisKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBDUFBGTEFHUz0iJGd0X3NhdmVfQ1BQRkxBR1MiCisgICAgICAgICAgICBMSUJTPSIkZ3Rfc2F2ZV9MSUJTIgorZmkKK2FjX3Jlcz1gZXZhbCBlY2hvICckeyckZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmludGwnfSdgCisJICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKyAgICAgICAgZmkKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHsgZXZhbCAiZ3RfdmFsPVwkJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJjIjsgdGVzdCAiJGd0X3ZhbCIgPSAieWVzIjsgfSBcCisgICAgICAgICAgIHx8IHsgeyBldmFsICJndF92YWw9XCQkZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmludGwiOyB0ZXN0ICIkZ3RfdmFsIiA9ICJ5ZXMiOyB9IFwKKyAgICAgICAgICAgICAgICAmJiB0ZXN0ICIkUEFDS0FHRSIgIT0gZ2V0dGV4dC1ydW50aW1lIFwKKyAgICAgICAgICAgICAgICAmJiB0ZXN0ICIkUEFDS0FHRSIgIT0gZ2V0dGV4dC10b29sczsgfTsgdGhlbgorICAgICAgICAgIGd0X3VzZV9wcmVpbnN0YWxsZWRfZ251Z2V0dGV4dD15ZXMKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBMSUJJTlRMPQorICAgICAgICAgIExUTElCSU5UTD0KKyAgICAgICAgICBJTkNJTlRMPQorICAgICAgICBmaQorCisKKworICAgIGlmIHRlc3QgLW4gIiRJTlRMX01BQ09TWF9MSUJTIjsgdGhlbgorICAgICAgaWYgdGVzdCAiJGd0X3VzZV9wcmVpbnN0YWxsZWRfZ251Z2V0dGV4dCIgPSAieWVzIiBcCisgICAgICAgICB8fCB0ZXN0ICIkbmxzX2N2X3VzZV9nbnVfZ2V0dGV4dCIgPSAieWVzIjsgdGhlbgorICAgICAgICAgICAgICAgIExJQklOVEw9IiRMSUJJTlRMICRJTlRMX01BQ09TWF9MSUJTIgorICAgICAgICBMVExJQklOVEw9IiRMVExJQklOVEwgJElOVExfTUFDT1NYX0xJQlMiCisgICAgICBmaQorICAgIGZpCisKKyAgICBpZiB0ZXN0ICIkZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0IiA9ICJ5ZXMiIFwKKyAgICAgICB8fCB0ZXN0ICIkbmxzX2N2X3VzZV9nbnVfZ2V0dGV4dCIgPSAieWVzIjsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBFTkFCTEVfTkxTIDEKK19BQ0VPRgorCisgICAgZWxzZQorICAgICAgVVNFX05MUz1ubworICAgIGZpCisgIGZpCisKKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0byB1c2UgTkxTIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0byB1c2UgTkxTLi4uICRFQ0hPX0MiID4mNjsgfQorICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRVU0VfTkxTIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRVU0VfTkxTIiA+JjY7IH0KKyAgaWYgdGVzdCAiJFVTRV9OTFMiID0gInllcyI7IHRoZW4KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGVyZSB0aGUgZ2V0dGV4dCBmdW5jdGlvbiBjb21lcyBmcm9tIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hlcmUgdGhlIGdldHRleHQgZnVuY3Rpb24gY29tZXMgZnJvbS4uLiAkRUNIT19DIiA+JjY7IH0KKyAgICBpZiB0ZXN0ICIkZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0IiA9ICJ5ZXMiOyB0aGVuCisgICAgICBpZiB7IGV2YWwgImd0X3ZhbD1cJCRndF9mdW5jX2dudWdldHRleHRfbGliaW50bCI7IHRlc3QgIiRndF92YWwiID0gInllcyI7IH07IHRoZW4KKyAgICAgICAgZ3Rfc291cmNlPSJleHRlcm5hbCBsaWJpbnRsIgorICAgICAgZWxzZQorICAgICAgICBndF9zb3VyY2U9ImxpYmMiCisgICAgICBmaQorICAgIGVsc2UKKyAgICAgIGd0X3NvdXJjZT0iaW5jbHVkZWQgaW50bCBkaXJlY3RvcnkiCisgICAgZmkKKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRndF9zb3VyY2UiID4mNQorZWNobyAiJHtFQ0hPX1R9JGd0X3NvdXJjZSIgPiY2OyB9CisgIGZpCisKKyAgaWYgdGVzdCAiJFVTRV9OTFMiID0gInllcyI7IHRoZW4KKworICAgIGlmIHRlc3QgIiRndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQiID0gInllcyI7IHRoZW4KKyAgICAgIGlmIHsgZXZhbCAiZ3RfdmFsPVwkJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsIjsgdGVzdCAiJGd0X3ZhbCIgPSAieWVzIjsgfTsgdGhlbgorICAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBob3cgdG8gbGluayB3aXRoIGxpYmludGwiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBob3cgdG8gbGluayB3aXRoIGxpYmludGwuLi4gJEVDSE9fQyIgPiY2OyB9CisgICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJExJQklOVEwiID4mNQorZWNobyAiJHtFQ0hPX1R9JExJQklOVEwiID4mNjsgfQorCisgIGZvciBlbGVtZW50IGluICRJTkNJTlRMOyBkbworICAgIGhhdmVpdD0KKyAgICBmb3IgeCBpbiAkQ1BQRkxBR1M7IGRvCisKKyAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4IgorICBwcmVmaXg9IiRhY2xfZmluYWxfcHJlZml4IgorICBhY2xfc2F2ZV9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgorICBleGVjX3ByZWZpeD0iJGFjbF9maW5hbF9leGVjX3ByZWZpeCIKKyAgZXZhbCB4PVwiJHhcIgorICBleGVjX3ByZWZpeD0iJGFjbF9zYXZlX2V4ZWNfcHJlZml4IgorICBwcmVmaXg9IiRhY2xfc2F2ZV9wcmVmaXgiCisKKyAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRlbGVtZW50IjsgdGhlbgorICAgICAgICBoYXZlaXQ9eWVzCisgICAgICAgIGJyZWFrCisgICAgICBmaQorICAgIGRvbmUKKyAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgQ1BQRkxBR1M9IiR7Q1BQRkxBR1N9JHtDUFBGTEFHUzorIH0kZWxlbWVudCIKKyAgICBmaQorICBkb25lCisKKyAgICAgIGZpCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgSEFWRV9HRVRURVhUIDEKK19BQ0VPRgorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIEhBVkVfRENHRVRURVhUIDEKK19BQ0VPRgorCisgICAgZmkKKworICAgICAgICBQT1NVQj1wbworICBmaQorCisKKworICAgIElOVExMSUJTPSIkTElCSU5UTCIKKworCisKKworCisKK2lmIHRlc3QgIiRVU0VfSU5DTFVERURfTElCSU5UTCIgPSAieWVzIjsgdGhlbgorCXsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IEdOVSBQYXJ0ZWQgcmVxdWlyZXMgZ2V0dGV4dCB0byBiZSBpbnN0YWxsZWQgZm9yIGNvbXBpbGF0aW9uIC0KK2lmIG5hdGl2ZSBsYW5ndWFnZSBzdXBwb3J0IGlzIGRlc2lyZWQuICBFaXRoZXIgZGlzYWJsZSBuYXRpdmUgbGFuZ3VhZ2Ugc3VwcG9ydAord2l0aDoKKwkkIC4vY29uZmlndXJlIC0tZGlzYWJsZS1ubHMKK09yIGluc3RhbGwgZ2V0dGV4dC4gIEdOVSBnZXR0ZXh0IGlzIGF2YWlsYWJsZSBmcm9tCisJaHR0cDovL2Z0cC5nbnUub3JnL2dudS9nZXR0ZXh0CisiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogR05VIFBhcnRlZCByZXF1aXJlcyBnZXR0ZXh0IHRvIGJlIGluc3RhbGxlZCBmb3IgY29tcGlsYXRpb24gLQoraWYgbmF0aXZlIGxhbmd1YWdlIHN1cHBvcnQgaXMgZGVzaXJlZC4gIEVpdGhlciBkaXNhYmxlIG5hdGl2ZSBsYW5ndWFnZSBzdXBwb3J0Cit3aXRoOgorCSQgLi9jb25maWd1cmUgLS1kaXNhYmxlLW5scworT3IgaW5zdGFsbCBnZXR0ZXh0LiAgR05VIGdldHRleHQgaXMgYXZhaWxhYmxlIGZyb20KKwlodHRwOi8vZnRwLmdudS5vcmcvZ251L2dldHRleHQKKyIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorCWV4aXQKK2ZpCisKK0RMX0xJQlM9IiIKK2lmIHRlc3QgIiRlbmFibGVfZHluYW1pY19sb2FkaW5nIiA9IHllczsgdGhlbgorCXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbC4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfbGliX2RsX2Rsb3BlbitzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGRsICAkTElCUyIKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGRsb3BlbiAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGRsb3BlbiAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgIGFjX2N2X2xpYl9kbF9kbG9wZW49eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19jdl9saWJfZGxfZGxvcGVuPW5vCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X2xpYl9kbF9kbG9wZW4gPSB5ZXM7IHRoZW4KKyAgRExfTElCUz0iLWxkbCIKKwkJUEFSVEVEX0xJQlM9IiRQQVJURURfTElCUyAtbGRsIgorCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBEWU5BTUlDX0xPQURJTkcgMQorX0FDRU9GCisKK2Vsc2UKKyAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogLWxkbCBub3QgZm91bmQhICBUcnkgdXNpbmcgLS1kaXNhYmxlLWR5bmFtaWMtbG9hZGluZworCQkiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogLWxkbCBub3QgZm91bmQhICBUcnkgdXNpbmcgLS1kaXNhYmxlLWR5bmFtaWMtbG9hZGluZworCQkiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKwkJZXhpdAorCitmaQorCitmaQorCisKK1VVSURfTElCUz0iIgoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHV1aWRfZ2VuZXJhdGUgaW4gLWx1dWlkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHV1aWRfZ2VuZXJhdGUgaW4gLWx1dWlkLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9saWJfdXVpZF91dWlkX2dlbmVyYXRlK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sdXVpZCAgJExJQlMiCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciB1dWlkX2dlbmVyYXRlICgpOworaW50CittYWluICgpCit7CityZXR1cm4gdXVpZF9nZW5lcmF0ZSAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgIGFjX2N2X2xpYl91dWlkX3V1aWRfZ2VuZXJhdGU9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19jdl9saWJfdXVpZF91dWlkX2dlbmVyYXRlPW5vCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfdXVpZF91dWlkX2dlbmVyYXRlIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfdXVpZF91dWlkX2dlbmVyYXRlIiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X2xpYl91dWlkX3V1aWRfZ2VuZXJhdGUgPSB5ZXM7IHRoZW4KKyAgVVVJRF9MSUJTPSItbHV1aWQiCitlbHNlCisgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IEdOVSBQYXJ0ZWQgcmVxdWlyZXMgbGlidXVpZCAtIGEgcGFydCBvZiB0aGUgZTJmc3Byb2dzIHBhY2thZ2UgKGJ1dAorc29tZXRpbWVzIGRpc3RyaWJ1dGVkIHNlcGFyYXRlbHkgaW4gdXVpZC1kZXZlbCBvciBzaW1pbGFyKQorVGhpcyBjYW4gcHJvYmFibHkgYmUgZm91bmQgb24geW91ciBkaXN0cmlidXRpb24ncyBDRCBvciBGVFAgc2l0ZSBvciBhdDoKKyAgICAgICAgIGh0dHA6Ly93ZWIubWl0LmVkdS90eXRzby93d3cvbGludXgvZTJmc3Byb2dzLmh0bWwKK05vdGU6IGlmIHlvdSBhcmUgdXNpbmcgcHJlY29tcGlsZWQgcGFja2FnZXMgeW91IHdpbGwgYWxzbyBuZWVkIHRoZSBkZXZlbG9wbWVudAorcGFja2FnZSBhcyB3ZWxsICh3aGljaCBtYXkgYmUgY2FsbGVkIGUyZnNwcm9ncy1kZXZlbCBvciBzb21ldGhpbmcgc2ltaWxhcikuCitJZiB5b3UgY29tcGlsZSBlMmZzcHJvZ3MgeW91cnNlbGYgdGhlbiB5b3UgbmVlZCB0byBkbyAnbWFrZSBpbnN0YWxsJyBhbmQKKydtYWtlIGluc3RhbGwtbGlicycuCisJIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IEdOVSBQYXJ0ZWQgcmVxdWlyZXMgbGlidXVpZCAtIGEgcGFydCBvZiB0aGUgZTJmc3Byb2dzIHBhY2thZ2UgKGJ1dAorc29tZXRpbWVzIGRpc3RyaWJ1dGVkIHNlcGFyYXRlbHkgaW4gdXVpZC1kZXZlbCBvciBzaW1pbGFyKQorVGhpcyBjYW4gcHJvYmFibHkgYmUgZm91bmQgb24geW91ciBkaXN0cmlidXRpb24ncyBDRCBvciBGVFAgc2l0ZSBvciBhdDoKKyAgICAgICAgIGh0dHA6Ly93ZWIubWl0LmVkdS90eXRzby93d3cvbGludXgvZTJmc3Byb2dzLmh0bWwKK05vdGU6IGlmIHlvdSBhcmUgdXNpbmcgcHJlY29tcGlsZWQgcGFja2FnZXMgeW91IHdpbGwgYWxzbyBuZWVkIHRoZSBkZXZlbG9wbWVudAorcGFja2FnZSBhcyB3ZWxsICh3aGljaCBtYXkgYmUgY2FsbGVkIGUyZnNwcm9ncy1kZXZlbCBvciBzb21ldGhpbmcgc2ltaWxhcikuCitJZiB5b3UgY29tcGlsZSBlMmZzcHJvZ3MgeW91cnNlbGYgdGhlbiB5b3UgbmVlZCB0byBkbyAnbWFrZSBpbnN0YWxsJyBhbmQKKydtYWtlIGluc3RhbGwtbGlicycuCisJIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisJZXhpdAorCitmaQorCisKKworRE1fTElCUz0iIgoraWYgdGVzdCAiJGVuYWJsZV9kZXZpY2VfbWFwcGVyIiA9IHllczsgdGhlbgorCXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBkbV90YXNrX2NyZWF0ZSBpbiAtbGRldm1hcHBlciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBkbV90YXNrX2NyZWF0ZSBpbiAtbGRldm1hcHBlci4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfbGliX2Rldm1hcHBlcl9kbV90YXNrX2NyZWF0ZStzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGRldm1hcHBlciAgJExJQlMiCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBkbV90YXNrX2NyZWF0ZSAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGRtX3Rhc2tfY3JlYXRlICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgYWNfY3ZfbGliX2Rldm1hcHBlcl9kbV90YXNrX2NyZWF0ZT15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX2N2X2xpYl9kZXZtYXBwZXJfZG1fdGFza19jcmVhdGU9bm8KK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9kZXZtYXBwZXJfZG1fdGFza19jcmVhdGUiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9kZXZtYXBwZXJfZG1fdGFza19jcmVhdGUiID4mNjsgfQoraWYgdGVzdCAkYWNfY3ZfbGliX2Rldm1hcHBlcl9kbV90YXNrX2NyZWF0ZSA9IHllczsgdGhlbgorICBETV9MSUJTPSItbGRldm1hcHBlciIKK2Vsc2UKKyAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogbGliZGV2bWFwcGVyIG5vdCBmb3VuZCEgIFRyeSB1c2luZyAtLWRpc2FibGUtZGV2aWNlLW1hcHBlcgorCQkiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogbGliZGV2bWFwcGVyIG5vdCBmb3VuZCEgIFRyeSB1c2luZyAtLWRpc2FibGUtZGV2aWNlLW1hcHBlcgorCQkiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKwkJZXhpdAorCitmaQorCitmaQorCisKK1NFTElOVVhfTElCUz0iIgoraWYgdGVzdCAiJGVuYWJsZV9zZWxpbnV4IiA9IHllczsgdGhlbgorCVNFTElOVVhfTElCUz0iLWxzZWxpbnV4IC1sc2Vwb2wiCitmaQorCisKK1JFSVNFUl9MSUJTPSIiCitpZiB0ZXN0ICIkZW5hYmxlX2R5bmFtaWNfbG9hZGluZyIgPSBubyAtYSAiJGVuYWJsZV9kaXNjb3Zlcl9vbmx5IiA9IG5vOyB0aGVuCisJT0xEX0xJQlM9IiRMSUJTIgorCXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBkYWxfZXF1YWxzIGluIC1sZGFsIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGRhbF9lcXVhbHMgaW4gLWxkYWwuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9kYWxfZGFsX2VxdWFscytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGRhbCAgJExJQlMiCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBkYWxfZXF1YWxzICgpOworaW50CittYWluICgpCit7CityZXR1cm4gZGFsX2VxdWFscyAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgIGFjX2N2X2xpYl9kYWxfZGFsX2VxdWFscz15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX2N2X2xpYl9kYWxfZGFsX2VxdWFscz1ubworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX2RhbF9kYWxfZXF1YWxzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfZGFsX2RhbF9lcXVhbHMiID4mNjsgfQoraWYgdGVzdCAkYWNfY3ZfbGliX2RhbF9kYWxfZXF1YWxzID0geWVzOyB0aGVuCisgIExJQlM9Ii1sZGFsIgorCQl7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgcmVpc2VyZnNfZnNfcHJvYmUgaW4gLWxyZWlzZXJmcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciByZWlzZXJmc19mc19wcm9iZSBpbiAtbHJlaXNlcmZzLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9saWJfcmVpc2VyZnNfcmVpc2VyZnNfZnNfcHJvYmUrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxyZWlzZXJmcyAgJExJQlMiCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciByZWlzZXJmc19mc19wcm9iZSAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHJlaXNlcmZzX2ZzX3Byb2JlICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgYWNfY3ZfbGliX3JlaXNlcmZzX3JlaXNlcmZzX2ZzX3Byb2JlPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfY3ZfbGliX3JlaXNlcmZzX3JlaXNlcmZzX2ZzX3Byb2JlPW5vCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfcmVpc2VyZnNfcmVpc2VyZnNfZnNfcHJvYmUiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9yZWlzZXJmc19yZWlzZXJmc19mc19wcm9iZSIgPiY2OyB9CitpZiB0ZXN0ICRhY19jdl9saWJfcmVpc2VyZnNfcmVpc2VyZnNfZnNfcHJvYmUgPSB5ZXM7IHRoZW4KKyAgUkVJU0VSX0xJQlM9Ii1sZGFsIC1scmVpc2VyZnMiCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIEhBVkVfTElCUkVJU0VSRlMgMQorX0FDRU9GCisKKworZmkKKworCQl7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgcmVpc2VyZnNfZnNfY2hlY2sgaW4gLWxyZWlzZXJmcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciByZWlzZXJmc19mc19jaGVjayBpbiAtbHJlaXNlcmZzLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9saWJfcmVpc2VyZnNfcmVpc2VyZnNfZnNfY2hlY2src2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxyZWlzZXJmcyAgJExJQlMiCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciByZWlzZXJmc19mc19jaGVjayAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHJlaXNlcmZzX2ZzX2NoZWNrICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgYWNfY3ZfbGliX3JlaXNlcmZzX3JlaXNlcmZzX2ZzX2NoZWNrPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfY3ZfbGliX3JlaXNlcmZzX3JlaXNlcmZzX2ZzX2NoZWNrPW5vCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfcmVpc2VyZnNfcmVpc2VyZnNfZnNfY2hlY2siID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9yZWlzZXJmc19yZWlzZXJmc19mc19jaGVjayIgPiY2OyB9CitpZiB0ZXN0ICRhY19jdl9saWJfcmVpc2VyZnNfcmVpc2VyZnNfZnNfY2hlY2sgPSB5ZXM7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgSEFWRV9SRUlTRVJGU19GU19DSEVDSyAxCitfQUNFT0YKKworCitmaQorCisKK2ZpCisKKwlMSUJTPSIkT0xEX0xJQlMiCitmaQorCisKK2lmIHRlc3QgIiR3aXRoX3JlYWRsaW5lIiA9IHllczsgdGhlbgorCU9MRF9MSUJTPSIkTElCUyIKKwlMSUJTPSIiCisJeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyB0Z2V0ZW50IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyB0Z2V0ZW50Li4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9zZWFyY2hfdGdldGVudCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlM9JExJQlMKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHRnZXRlbnQgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiB0Z2V0ZW50ICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitmb3IgYWNfbGliIGluICcnIHRpbmZvIG5jdXJzZXMgY3Vyc2VzIHRlcm1jYXAgdGVybWxpYjsgZG8KKyAgaWYgdGVzdCAteiAiJGFjX2xpYiI7IHRoZW4KKyAgICBhY19yZXM9Im5vbmUgcmVxdWlyZWQiCisgIGVsc2UKKyAgICBhY19yZXM9LWwkYWNfbGliCisgICAgTElCUz0iLWwkYWNfbGliICAkYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTIgorICBmaQorICBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgYWNfY3Zfc2VhcmNoX3RnZXRlbnQ9JGFjX3JlcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisKK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisgICAgICBjb25mdGVzdCRhY19leGVleHQKKyAgaWYgdGVzdCAiJHthY19jdl9zZWFyY2hfdGdldGVudCtzZXR9IiA9IHNldDsgdGhlbgorICBicmVhaworZmkKK2RvbmUKK2lmIHRlc3QgIiR7YWNfY3Zfc2VhcmNoX3RnZXRlbnQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgOgorZWxzZQorICBhY19jdl9zZWFyY2hfdGdldGVudD1ubworZmkKK3JtIGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUworZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3NlYXJjaF90Z2V0ZW50IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9zZWFyY2hfdGdldGVudCIgPiY2OyB9CithY19yZXM9JGFjX2N2X3NlYXJjaF90Z2V0ZW50CitpZiB0ZXN0ICIkYWNfcmVzIiAhPSBubzsgdGhlbgorICB0ZXN0ICIkYWNfcmVzIiA9ICJub25lIHJlcXVpcmVkIiB8fCBMSUJTPSIkYWNfcmVzICRMSUJTIgorICBQQVJURURfTElCUz0iJFBBUlRFRF9MSUJTICRMSUJTIgorZWxzZQorICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiB0ZXJtY2FwIGNvdWxkIG5vdCBiZSBmb3VuZCB3aGljaCBpcyByZXF1aXJlZCBmb3IgdGhlCistLXdpdGgtcmVhZGxpbmUgb3B0aW9uICh3aGljaCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQpLiAgRWl0aGVyIGRpc2FibGUgcmVhZGxpbmUKK3N1cHBvcnQgd2l0aCAtLXdpdGhvdXQtcmVhZGxpbmUgb3IgZG93bmxvYWQgYW5kIGluc3RhbGwgdGVybWNhcCBmcm9tOgorCWZ0cC5nbnUub3JnL2dudS90ZXJtY2FwCitOb3RlOiBpZiB5b3UgYXJlIHVzaW5nIHByZWNvbXBpbGVkIHBhY2thZ2VzIHlvdSB3aWxsIGFsc28gbmVlZCB0aGUgZGV2ZWxvcG1lbnQKKyAgcGFja2FnZSBhcyB3ZWxsICh3aGljaCBtYXkgYmUgY2FsbGVkIHRlcm1jYXAtZGV2ZWwgb3Igc29tZXRoaW5nIHNpbWlsYXIpLgorTm90ZTogKG4pY3Vyc2VzIGFsc28gc2VlbXMgdG8gd29yayBhcyBhIHN1YnN0aXR1dGUgZm9yIHRlcm1jYXAuICBUaGlzIHdhcworICBub3QgZm91bmQgZWl0aGVyIC0gYnV0IHlvdSBjb3VsZCB0cnkgaW5zdGFsbGluZyB0aGF0IGFzIHdlbGwuCisiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogdGVybWNhcCBjb3VsZCBub3QgYmUgZm91bmQgd2hpY2ggaXMgcmVxdWlyZWQgZm9yIHRoZQorLS13aXRoLXJlYWRsaW5lIG9wdGlvbiAod2hpY2ggaXMgZW5hYmxlZCBieSBkZWZhdWx0KS4gIEVpdGhlciBkaXNhYmxlIHJlYWRsaW5lCitzdXBwb3J0IHdpdGggLS13aXRob3V0LXJlYWRsaW5lIG9yIGRvd25sb2FkIGFuZCBpbnN0YWxsIHRlcm1jYXAgZnJvbToKKwlmdHAuZ251Lm9yZy9nbnUvdGVybWNhcAorTm90ZTogaWYgeW91IGFyZSB1c2luZyBwcmVjb21waWxlZCBwYWNrYWdlcyB5b3Ugd2lsbCBhbHNvIG5lZWQgdGhlIGRldmVsb3BtZW50CisgIHBhY2thZ2UgYXMgd2VsbCAod2hpY2ggbWF5IGJlIGNhbGxlZCB0ZXJtY2FwLWRldmVsIG9yIHNvbWV0aGluZyBzaW1pbGFyKS4KK05vdGU6IChuKWN1cnNlcyBhbHNvIHNlZW1zIHRvIHdvcmsgYXMgYSBzdWJzdGl0dXRlIGZvciB0ZXJtY2FwLiAgVGhpcyB3YXMKKyAgbm90IGZvdW5kIGVpdGhlciAtIGJ1dCB5b3UgY291bGQgdHJ5IGluc3RhbGxpbmcgdGhhdCBhcyB3ZWxsLgorIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisJZXhpdAorCitmaQorCisJTElCUz0iJE9MRF9MSUJTIgorZmkKKworaWYgdGVzdCAiJHdpdGhfcmVhZGxpbmUiID0geWVzOyB0aGVuCisJT0xEX0xJQlM9IiRMSUJTIgorCUxJQlM9IiRMSUJTICRQQVJURURfTElCUyIKKwl7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgcmVhZGxpbmUgaW4gLWxyZWFkbGluZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciByZWFkbGluZSBpbiAtbHJlYWRsaW5lLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9saWJfcmVhZGxpbmVfcmVhZGxpbmUrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxyZWFkbGluZSAkUEFSVEVEX0xJQlMKKwkgJExJQlMiCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciByZWFkbGluZSAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHJlYWRsaW5lICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgYWNfY3ZfbGliX3JlYWRsaW5lX3JlYWRsaW5lPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfY3ZfbGliX3JlYWRsaW5lX3JlYWRsaW5lPW5vCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfcmVhZGxpbmVfcmVhZGxpbmUiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9yZWFkbGluZV9yZWFkbGluZSIgPiY2OyB9CitpZiB0ZXN0ICRhY19jdl9saWJfcmVhZGxpbmVfcmVhZGxpbmUgPSB5ZXM7IHRoZW4KKyAgUEFSVEVEX0xJQlM9Ii1scmVhZGxpbmUgJFBBUlRFRF9MSUJTIgorCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBIQVZFX0xJQlJFQURMSU5FIDEKK19BQ0VPRgorCitlbHNlCisgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IEdOVSBSZWFkbGluZSBjb3VsZCBub3QgYmUgZm91bmQgd2hpY2ggaXMgcmVxdWlyZWQgZm9yIHRoZQorLS13aXRoLXJlYWRsaW5lICh3aGljaCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQpLiAgRWl0aGVyIGRpc2FibGUgcmVhZGxpbmUgc3VwcG9ydCB3aXRoCistLXdpdGhvdXQtcmVhZGxpbmUgb3IgZG93bmxvYWRlZCBhbmQgaW5zdGFsbCBpdCBmcm9tOgorICAgICAgICBmdHAuZ251Lm9yZy9nbnUvcmVhZGxpbmUKK05vdGU6IGlmIHlvdSBhcmUgdXNpbmcgcHJlY29tcGlsZWQgcGFja2FnZXMgeW91IHdpbGwgYWxzbyBuZWVkIHRoZSBkZXZlbG9wbWVudAorcGFja2FnZSBhcyB3ZWxsICh3aGljaCBtYXkgYmUgY2FsbGVkIHJlYWRsaW5lLWRldmVsIG9yIHNvbWV0aGluZyBzaW1pbGFyKS4KKyIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBHTlUgUmVhZGxpbmUgY291bGQgbm90IGJlIGZvdW5kIHdoaWNoIGlzIHJlcXVpcmVkIGZvciB0aGUKKy0td2l0aC1yZWFkbGluZSAod2hpY2ggaXMgZW5hYmxlZCBieSBkZWZhdWx0KS4gIEVpdGhlciBkaXNhYmxlIHJlYWRsaW5lIHN1cHBvcnQgd2l0aAorLS13aXRob3V0LXJlYWRsaW5lIG9yIGRvd25sb2FkZWQgYW5kIGluc3RhbGwgaXQgZnJvbToKKyAgICAgICAgZnRwLmdudS5vcmcvZ251L3JlYWRsaW5lCitOb3RlOiBpZiB5b3UgYXJlIHVzaW5nIHByZWNvbXBpbGVkIHBhY2thZ2VzIHlvdSB3aWxsIGFsc28gbmVlZCB0aGUgZGV2ZWxvcG1lbnQKK3BhY2thZ2UgYXMgd2VsbCAod2hpY2ggbWF5IGJlIGNhbGxlZCByZWFkbGluZS1kZXZlbCBvciBzb21ldGhpbmcgc2ltaWxhcikuCisiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKwkJZXhpdAorZmkKKworIAlMSUJTPSIkT0xEX0xJQlMiCitmaQorCisKKworCitpZiB0ZXN0ICIkT1MiID0gZ251OyB0aGVuCisJeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHZtX2RlYWxsb2NhdGUgaW4gLWxzaG91bGRiZWlubGliYyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciB2bV9kZWFsbG9jYXRlIGluIC1sc2hvdWxkYmVpbmxpYmMuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9zaG91bGRiZWlubGliY192bV9kZWFsbG9jYXRlK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sc2hvdWxkYmVpbmxpYmMgICRMSUJTIgorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgdm1fZGVhbGxvY2F0ZSAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHZtX2RlYWxsb2NhdGUgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKyAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorICBhY19jdl9saWJfc2hvdWxkYmVpbmxpYmNfdm1fZGVhbGxvY2F0ZT15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX2N2X2xpYl9zaG91bGRiZWlubGliY192bV9kZWFsbG9jYXRlPW5vCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfc2hvdWxkYmVpbmxpYmNfdm1fZGVhbGxvY2F0ZSIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX3Nob3VsZGJlaW5saWJjX3ZtX2RlYWxsb2NhdGUiID4mNjsgfQoraWYgdGVzdCAkYWNfY3ZfbGliX3Nob3VsZGJlaW5saWJjX3ZtX2RlYWxsb2NhdGUgPSB5ZXM7IHRoZW4KKyAgT1NfTElCUz0iJE9TX0xJQlMgLWxzaG91bGRiZWlubGliYyIKK2Vsc2UKKyAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogR05VIFBhcnRlZCByZXF1aXJlcyBsaWJzaG91bGRiZWlubGliYyB3aGVuIHJ1bm5pbmcgb24KK0dOVS9IdXJkIHN5c3RlbXMuICBJdCBpcyBhIHN0YW5kYXJkIHBhcnQgb2YgYSBHTlUvSHVyZCBzeXN0ZW0uCisJCSIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBHTlUgUGFydGVkIHJlcXVpcmVzIGxpYnNob3VsZGJlaW5saWJjIHdoZW4gcnVubmluZyBvbgorR05VL0h1cmQgc3lzdGVtcy4gIEl0IGlzIGEgc3RhbmRhcmQgcGFydCBvZiBhIEdOVS9IdXJkIHN5c3RlbS4KKwkJIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisJCWV4aXQKKworZmkKKworCisJT0xEX0xJQlM9IiRMSUJTIgorCUxJQlM9CisKKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHBlZF9kZXZpY2VfcmVhZCBpbiAtbHBhcnRlZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBwZWRfZGV2aWNlX3JlYWQgaW4gLWxwYXJ0ZWQuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9wYXJ0ZWRfcGVkX2RldmljZV9yZWFkK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1scGFydGVkICAkTElCUyIKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHBlZF9kZXZpY2VfcmVhZCAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHBlZF9kZXZpY2VfcmVhZCAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgIGFjX2N2X2xpYl9wYXJ0ZWRfcGVkX2RldmljZV9yZWFkPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfY3ZfbGliX3BhcnRlZF9wZWRfZGV2aWNlX3JlYWQ9bm8KK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9wYXJ0ZWRfcGVkX2RldmljZV9yZWFkIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfcGFydGVkX3BlZF9kZXZpY2VfcmVhZCIgPiY2OyB9CitpZiB0ZXN0ICRhY19jdl9saWJfcGFydGVkX3BlZF9kZXZpY2VfcmVhZCA9IHllczsgdGhlbgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfTElCUEFSVEVEIDEKK19BQ0VPRgorCisgIExJQlM9Ii1scGFydGVkICRMSUJTIgorCitmaQorCisKKwl7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3RvcmVfb3BlbiBpbiAtbHN0b3JlIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHN0b3JlX29wZW4gaW4gLWxzdG9yZS4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfbGliX3N0b3JlX3N0b3JlX29wZW4rc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxzdG9yZSAkT1NfTElCUyAkVVVJRF9MSUJTICRETV9MSUJTICRMSUJTCisJICRMSUJTIgorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgc3RvcmVfb3BlbiAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHN0b3JlX29wZW4gKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKyAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorICBhY19jdl9saWJfc3RvcmVfc3RvcmVfb3Blbj15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX2N2X2xpYl9zdG9yZV9zdG9yZV9vcGVuPW5vCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfc3RvcmVfc3RvcmVfb3BlbiIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX3N0b3JlX3N0b3JlX29wZW4iID4mNjsgfQoraWYgdGVzdCAkYWNfY3ZfbGliX3N0b3JlX3N0b3JlX29wZW4gPSB5ZXM7IHRoZW4KKyAgT1NfTElCUz0iJE9TX0xJQlMgLWxzdG9yZSIKK2Vsc2UKKyAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogR05VIFBhcnRlZCByZXF1aXJlcyBsaWJzdG9yZSB3aGVuIHJ1bm5pbmcgb24gR05VL0h1cmQKK3N5c3RlbXMuICBJdCBpcyBhIHN0YW5kYXJkIHBhcnQgb2YgYSBHTlUvSHVyZCBzeXN0ZW0uCisJCSIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBHTlUgUGFydGVkIHJlcXVpcmVzIGxpYnN0b3JlIHdoZW4gcnVubmluZyBvbiBHTlUvSHVyZAorc3lzdGVtcy4gIEl0IGlzIGEgc3RhbmRhcmQgcGFydCBvZiBhIEdOVS9IdXJkIHN5c3RlbS4KKwkJIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisJCWV4aXQKK2ZpCisKKwlMSUJTPSIkT0xEX0xJQlMiCitmaQorCisKK2lmIHRlc3QgIiRPUyIgPSBiZW9zOyB0aGVuCisJCQlPU19MSUJTPSIkT1NfTElCUyAtbHNvY2tldCIKK2ZpCisKKworCisKKworCitpZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl91dWlkX3V1aWRfaCtzZXR9IiA9IHNldDsgdGhlbgorICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgdXVpZC91dWlkLmgiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgdXVpZC91dWlkLmguLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl91dWlkX3V1aWRfaCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hlYWRlcl91dWlkX3V1aWRfaCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGVhZGVyX3V1aWRfdXVpZF9oIiA+JjY7IH0KK2Vsc2UKKyAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/Cit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB1dWlkL3V1aWQuaCB1c2FiaWxpdHkiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB1dWlkL3V1aWQuaCB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2OyB9CitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CisjaW5jbHVkZSA8dXVpZC91dWlkLmg+CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfaGVhZGVyX2NvbXBpbGVyPW5vCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjY7IH0KKworIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/Cit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB1dWlkL3V1aWQuaCBwcmVzZW5jZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHV1aWQvdXVpZC5oIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNjsgfQorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8dXVpZC91dWlkLmg+CitfQUNFT0YKK2lmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfTsgdGhlbgorICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworICBhY19oZWFkZXJfcHJlcHJvYz1ubworZmkKKworcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2OyB9CisKKyMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorICB5ZXM6bm86ICkKKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiB1dWlkL3V1aWQuaDogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6IHV1aWQvdXVpZC5oOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHV1aWQvdXVpZC5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogdXVpZC91dWlkLmg6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisgICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCisgICAgOzsKKyAgbm86eWVzOiogKQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHV1aWQvdXVpZC5oOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1dWlkL3V1aWQuaDogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHV1aWQvdXVpZC5oOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogdXVpZC91dWlkLmg6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogdXVpZC91dWlkLmg6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6IHV1aWQvdXVpZC5oOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogdXVpZC91dWlkLmg6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1dWlkL3V1aWQuaDogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiB1dWlkL3V1aWQuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1dWlkL3V1aWQuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogdXVpZC91dWlkLmg6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6IHV1aWQvdXVpZC5oOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CisgICAgKCBjYXQgPDxcX0FTQk9YCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1wYXJ0ZWRAZ251Lm9yZyAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCitfQVNCT1gKKyAgICAgKSB8IHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorICAgIDs7Citlc2FjCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgdXVpZC91dWlkLmgiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgdXVpZC91dWlkLmguLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl91dWlkX3V1aWRfaCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhY19jdl9oZWFkZXJfdXVpZF91dWlkX2g9JGFjX2hlYWRlcl9wcmVwcm9jCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3V1aWRfdXVpZF9oIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9oZWFkZXJfdXVpZF91dWlkX2giID4mNjsgfQorCitmaQoraWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3V1aWRfdXVpZF9oID0geWVzOyB0aGVuCisgIDoKK2Vsc2UKKyAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogR05VIFBhcnRlZCByZXF1aXJlcyBsaWJ1dWlkIC0gYSBwYXJ0IG9mIHRoZSBlMmZzcHJvZ3MgcGFja2FnZS4KK1lvdSBzZWVtIHRvIGhhdmUgdGhlIGxpYnJhcnkgaW5zdGFsbGVkIGJ1dCBub3QgdGhlIGhlYWRlcnMuICBUaGVzZSBhcmUgdXN1YWxseQorZm91bmQgaW4gYSBjb3JyZXNwb25kaW5nIGRldmVsb3BtZW50IHBhY2thZ2UgKHVzdWFsbHkgY2FsbGVkIGUyZnNwcm9ncy1kZXZlbCkuCitJZiB5b3UgY2FuJ3QgZmluZCBvbmUgdHJ5OgorICAgICAgICBodHRwOi8vd2ViLm1pdC5lZHUvdHl0c28vd3d3L2xpbnV4L2UyZnNwcm9ncy5odG1sCisiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogR05VIFBhcnRlZCByZXF1aXJlcyBsaWJ1dWlkIC0gYSBwYXJ0IG9mIHRoZSBlMmZzcHJvZ3MgcGFja2FnZS4KK1lvdSBzZWVtIHRvIGhhdmUgdGhlIGxpYnJhcnkgaW5zdGFsbGVkIGJ1dCBub3QgdGhlIGhlYWRlcnMuICBUaGVzZSBhcmUgdXN1YWxseQorZm91bmQgaW4gYSBjb3JyZXNwb25kaW5nIGRldmVsb3BtZW50IHBhY2thZ2UgKHVzdWFsbHkgY2FsbGVkIGUyZnNwcm9ncy1kZXZlbCkuCitJZiB5b3UgY2FuJ3QgZmluZCBvbmUgdHJ5OgorICAgICAgICBodHRwOi8vd2ViLm1pdC5lZHUvdHl0c28vd3d3L2xpbnV4L2UyZnNwcm9ncy5odG1sCisiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKwlleGl0CisKK2ZpCisKKworCisKK2ZvciBhY19oZWFkZXIgaW4gZ2V0b3B0LmgKK2RvCithc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2lmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2ZpCithY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AKKwkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorZWxzZQorICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2OyB9CitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CisjaW5jbHVkZSA8JGFjX2hlYWRlcj4KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19oZWFkZXJfY29tcGlsZXI9bm8KK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNjsgfQorCisjIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNjsgfQorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8JGFjX2hlYWRlcj4KK19BQ0VPRgoraWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7CisJIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9OyB0aGVuCisgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisgIGFjX2hlYWRlcl9wcmVwcm9jPW5vCitmaQorCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjY7IH0KKworIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CitjYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCisgIHllczpubzogKQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworICAgIDs7CisgIG5vOnllczoqICkKKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorICAgICggY2F0IDw8XF9BU0JPWAorIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBSZXBvcnQgdGhpcyB0byBidWctcGFydGVkQGdudS5vcmcgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworX0FTQk9YCisgICAgICkgfCBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKyAgICA7OworZXNhYworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorZmkKK2FjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CisKK2ZpCitpZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKK2lmIHRlc3QgIiRPUyIgPSBsaW51eDsgdGhlbgorCWlmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX2xpbnV4X3VuaXN0ZF9oK3NldH0iID0gc2V0OyB0aGVuCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBsaW51eC91bmlzdGQuaCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBsaW51eC91bmlzdGQuaC4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX2xpbnV4X3VuaXN0ZF9oK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX2xpbnV4X3VuaXN0ZF9oIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9oZWFkZXJfbGludXhfdW5pc3RkX2giID4mNjsgfQorZWxzZQorICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGxpbnV4L3VuaXN0ZC5oIHVzYWJpbGl0eSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGxpbnV4L3VuaXN0ZC5oIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjY7IH0KK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKKyNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19oZWFkZXJfY29tcGlsZXI9bm8KK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNjsgfQorCisjIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGxpbnV4L3VuaXN0ZC5oIHByZXNlbmNlIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgbGludXgvdW5pc3RkLmggcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2OyB9CitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KK19BQ0VPRgoraWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7CisJIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9OyB0aGVuCisgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisgIGFjX2hlYWRlcl9wcmVwcm9jPW5vCitmaQorCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjY7IH0KKworIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CitjYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCisgIHllczpubzogKQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IGxpbnV4L3VuaXN0ZC5oOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogbGludXgvdW5pc3RkLmg6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogbGludXgvdW5pc3RkLmg6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiBsaW51eC91bmlzdGQuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKyAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKyAgICA7OworICBubzp5ZXM6KiApCisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogbGludXgvdW5pc3RkLmg6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6IGxpbnV4L3VuaXN0ZC5oOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogbGludXgvdW5pc3RkLmg6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiBsaW51eC91bmlzdGQuaDogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBsaW51eC91bmlzdGQuaDogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogbGludXgvdW5pc3RkLmg6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBsaW51eC91bmlzdGQuaDogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6IGxpbnV4L3VuaXN0ZC5oOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IGxpbnV4L3VuaXN0ZC5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6IGxpbnV4L3VuaXN0ZC5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBsaW51eC91bmlzdGQuaDogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogbGludXgvdW5pc3RkLmg6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKyAgICAoIGNhdCA8PFxfQVNCT1gKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgUmVwb3J0IHRoaXMgdG8gYnVnLXBhcnRlZEBnbnUub3JnICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKK19BU0JPWAorICAgICApIHwgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCisgICAgOzsKK2VzYWMKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBsaW51eC91bmlzdGQuaCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBsaW51eC91bmlzdGQuaC4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX2xpbnV4X3VuaXN0ZF9oK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGFjX2N2X2hlYWRlcl9saW51eF91bmlzdGRfaD0kYWNfaGVhZGVyX3ByZXByb2MKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfbGludXhfdW5pc3RkX2giID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hlYWRlcl9saW51eF91bmlzdGRfaCIgPiY2OyB9CisKK2ZpCisKKworZmkKKworaWYgdGVzdCAiJHdpdGhfcmVhZGxpbmUiID0geWVzOyB0aGVuCisKKworZm9yIGFjX2hlYWRlciBpbiByZWFkbGluZS9yZWFkbGluZS5oIHJlYWRsaW5lL2hpc3RvcnkuaAorZG8KK2FzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAoraWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZmkKK2FjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CitlbHNlCisgICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjY7IH0KK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKKyNpbmNsdWRlIDwkYWNfaGVhZGVyPgorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisgIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX2hlYWRlcl9jb21waWxlcj1ubworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2OyB9CisKKyMgSXMgdGhlIGhlYWRlciBwcmVzZW50PworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2OyB9CitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDwkYWNfaGVhZGVyPgorX0FDRU9GCitpZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKwkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH07IHRoZW4KKyAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyAgYWNfaGVhZGVyX3ByZXByb2M9bm8KK2ZpCisKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Cit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNjsgfQorCisjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKyAgeWVzOm5vOiApCisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisgICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCisgICAgOzsKKyAgbm86eWVzOiogKQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CisgICAgKCBjYXQgPDxcX0FTQk9YCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1wYXJ0ZWRAZ251Lm9yZyAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCitfQVNCT1gKKyAgICAgKSB8IHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorICAgIDs7Citlc2FjCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCitmaQorYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCisJICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKworZmkKK2lmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitlbHNlCisgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IFRoZSBoZWFkZXJzIGZvciBHTlUgUmVhZGxpbmUgY291bGQgbm90IGJlIGZvdW5kIHdoaWNoCithcmUgcmVxdWlyZWQgZm9yIHRoZSAtLXdpdGgtcmVhZGxpbmUgb3B0aW9uLiAgWW91IHNlZW0gdG8gaGF2ZSB0aGUgR05VIHJlYWRsaW5lCitsaWJyYXJ5IGluc3RhbGxlZCBidXQgbm90IHRoZSBoZWFkZXJzLiAgVGhlc2UgYXJlIHVzdWFsbHkgZm91bmQgaW4gYQorY29ycmVzcG9uZGluZyBkZXZlbG9wbWVudCBwYWNrYWdlICh1c3VhbGx5IGNhbGxlZCByZWFkbGluZS1kZXZlbCkuICBJZiB5b3UgY2FuJ3QKK2ZpbmQgb25lIHRyeToKKyAgICAgICAgZnRwLmdudS5vcmcvZ251L3JlYWRsaW5lCitBbHRlcm5hdGl2ZWx5IHlvdSBjYW4gZGlzYWJsZSByZWFkbGluZSBzdXBwb3J0IHdpdGggLS13aXRob3V0LXJlYWRsaW5lCisiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogVGhlIGhlYWRlcnMgZm9yIEdOVSBSZWFkbGluZSBjb3VsZCBub3QgYmUgZm91bmQgd2hpY2gKK2FyZSByZXF1aXJlZCBmb3IgdGhlIC0td2l0aC1yZWFkbGluZSBvcHRpb24uICBZb3Ugc2VlbSB0byBoYXZlIHRoZSBHTlUgcmVhZGxpbmUKK2xpYnJhcnkgaW5zdGFsbGVkIGJ1dCBub3QgdGhlIGhlYWRlcnMuICBUaGVzZSBhcmUgdXN1YWxseSBmb3VuZCBpbiBhCitjb3JyZXNwb25kaW5nIGRldmVsb3BtZW50IHBhY2thZ2UgKHVzdWFsbHkgY2FsbGVkIHJlYWRsaW5lLWRldmVsKS4gIElmIHlvdSBjYW4ndAorZmluZCBvbmUgdHJ5OgorICAgICAgICBmdHAuZ251Lm9yZy9nbnUvcmVhZGxpbmUKK0FsdGVybmF0aXZlbHkgeW91IGNhbiBkaXNhYmxlIHJlYWRsaW5lIHN1cHBvcnQgd2l0aCAtLXdpdGhvdXQtcmVhZGxpbmUKKyIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorCWV4aXQKKworZmkKKworZG9uZQorCitmaQorCisKK2ZvciBhY19oZWFkZXIgaW4gdGVybWNhcC5oCitkbworYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCitpZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitmaQorYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCisJICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KK2Vsc2UKKyAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/Cit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNjsgfQorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAorI2luY2x1ZGUgPCRhY19oZWFkZXI+CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfaGVhZGVyX2NvbXBpbGVyPW5vCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjY7IH0KKworIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/Cit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjY7IH0KK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPCRhY19oZWFkZXI+CitfQUNFT0YKK2lmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfTsgdGhlbgorICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworICBhY19oZWFkZXJfcHJlcHJvYz1ubworZmkKKworcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2OyB9CisKKyMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorICB5ZXM6bm86ICkKKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKyAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKyAgICA7OworICBubzp5ZXM6KiApCisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKyAgICAoIGNhdCA8PFxfQVNCT1gKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgUmVwb3J0IHRoaXMgdG8gYnVnLXBhcnRlZEBnbnUub3JnICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKK19BU0JPWAorICAgICApIHwgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCisgICAgOzsKK2VzYWMKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKK2ZpCithY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AKKwkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorCitmaQoraWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCitpZiB0ZXN0ICIkVVNFX05MUyIgPSB5ZXM7IHRoZW4KKworZm9yIGFjX2hlYWRlciBpbiB3Y3R5cGUuaAorZG8KK2FzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAoraWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZmkKK2FjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CitlbHNlCisgICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjY7IH0KK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKKyNpbmNsdWRlIDwkYWNfaGVhZGVyPgorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisgIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX2hlYWRlcl9jb21waWxlcj1ubworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2OyB9CisKKyMgSXMgdGhlIGhlYWRlciBwcmVzZW50PworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2OyB9CitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDwkYWNfaGVhZGVyPgorX0FDRU9GCitpZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKwkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH07IHRoZW4KKyAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyAgYWNfaGVhZGVyX3ByZXByb2M9bm8KK2ZpCisKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Cit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNjsgfQorCisjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKyAgeWVzOm5vOiApCisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisgICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCisgICAgOzsKKyAgbm86eWVzOiogKQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CisgICAgKCBjYXQgPDxcX0FTQk9YCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1wYXJ0ZWRAZ251Lm9yZyAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCitfQVNCT1gKKyAgICAgKSB8IHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorICAgIDs7Citlc2FjCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCitmaQorYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCisJICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKworZmkKK2lmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitlbHNlCisgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IE9uZSBvciBtb3JlIG9mIHRoZSBoZWFkZXIgZmlsZXMgdGhhdCBhcmUgcmVxdWlyZWQgZm9yCituYXRpdmUgbGFuZ3VhZ2Ugc3VwcG9ydCAod2N0eXBlLmgpIGNvdWxkIG5vdCBiZSBmb3VuZC4gIEVpdGhlciBnZXQgYSBuZXdlcgordmVyc2lvbiBvZiBHTlUgbGliYyBhbmQgaXRzIGhlYWRlcnMgLSB3aGljaCBjYW4gYmUgb2J0YWluZWQgZnJvbToKKwlmdHAuZ251Lm9yZy9nbnUvZ2xpYmMKK09yIGRpc2FibGUgbmF0aXZlIGxhbmd1YWdlIHN1cHBvcnQgd2l0aCB0aGUgLS1kaXNhYmxlLW5scyBvcHRpb24KKyIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBPbmUgb3IgbW9yZSBvZiB0aGUgaGVhZGVyIGZpbGVzIHRoYXQgYXJlIHJlcXVpcmVkIGZvcgorbmF0aXZlIGxhbmd1YWdlIHN1cHBvcnQgKHdjdHlwZS5oKSBjb3VsZCBub3QgYmUgZm91bmQuICBFaXRoZXIgZ2V0IGEgbmV3ZXIKK3ZlcnNpb24gb2YgR05VIGxpYmMgYW5kIGl0cyBoZWFkZXJzIC0gd2hpY2ggY2FuIGJlIG9idGFpbmVkIGZyb206CisJZnRwLmdudS5vcmcvZ251L2dsaWJjCitPciBkaXNhYmxlIG5hdGl2ZSBsYW5ndWFnZSBzdXBwb3J0IHdpdGggdGhlIC0tZGlzYWJsZS1ubHMgb3B0aW9uCisiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKwlleGl0CisKK2ZpCisKK2RvbmUKKworZmkKKworaWYgdGVzdCAiJHthY19jdl9oZWFkZXJfZXhlY2luZm9faCtzZXR9IiA9IHNldDsgdGhlbgorICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZXhlY2luZm8uaCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBleGVjaW5mby5oLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9oZWFkZXJfZXhlY2luZm9faCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9leGVjaW5mb19oIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9oZWFkZXJfZXhlY2luZm9faCIgPiY2OyB9CitlbHNlCisgICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZXhlY2luZm8uaCB1c2FiaWxpdHkiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBleGVjaW5mby5oIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjY7IH0KK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKKyNpbmNsdWRlIDxleGVjaW5mby5oPgorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisgIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX2hlYWRlcl9jb21waWxlcj1ubworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2OyB9CisKKyMgSXMgdGhlIGhlYWRlciBwcmVzZW50PworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZXhlY2luZm8uaCBwcmVzZW5jZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGV4ZWNpbmZvLmggcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2OyB9CitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxleGVjaW5mby5oPgorX0FDRU9GCitpZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKwkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH07IHRoZW4KKyAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyAgYWNfaGVhZGVyX3ByZXByb2M9bm8KK2ZpCisKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Cit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNjsgfQorCisjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKyAgeWVzOm5vOiApCisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogZXhlY2luZm8uaDogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6IGV4ZWNpbmZvLmg6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogZXhlY2luZm8uaDogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6IGV4ZWNpbmZvLmg6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisgICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCisgICAgOzsKKyAgbm86eWVzOiogKQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IGV4ZWNpbmZvLmg6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6IGV4ZWNpbmZvLmg6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBleGVjaW5mby5oOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogZXhlY2luZm8uaDogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBleGVjaW5mby5oOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiBleGVjaW5mby5oOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogZXhlY2luZm8uaDogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6IGV4ZWNpbmZvLmg6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogZXhlY2luZm8uaDogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiBleGVjaW5mby5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBleGVjaW5mby5oOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiBleGVjaW5mby5oOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CisgICAgKCBjYXQgPDxcX0FTQk9YCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1wYXJ0ZWRAZ251Lm9yZyAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCitfQVNCT1gKKyAgICAgKSB8IHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorICAgIDs7Citlc2FjCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZXhlY2luZm8uaCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBleGVjaW5mby5oLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9oZWFkZXJfZXhlY2luZm9faCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhY19jdl9oZWFkZXJfZXhlY2luZm9faD0kYWNfaGVhZGVyX3ByZXByb2MKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfZXhlY2luZm9faCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGVhZGVyX2V4ZWNpbmZvX2giID4mNjsgfQorCitmaQoraWYgdGVzdCAkYWNfY3ZfaGVhZGVyX2V4ZWNpbmZvX2ggPSB5ZXM7IHRoZW4KKworCXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBiYWNrdHJhY2UgaW4gLWxjIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGJhY2t0cmFjZSBpbiAtbGMuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9jX2JhY2t0cmFjZStzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGMgICRMSUJTIgorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgYmFja3RyYWNlICgpOworaW50CittYWluICgpCit7CityZXR1cm4gYmFja3RyYWNlICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgYWNfY3ZfbGliX2NfYmFja3RyYWNlPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfY3ZfbGliX2NfYmFja3RyYWNlPW5vCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfY19iYWNrdHJhY2UiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9jX2JhY2t0cmFjZSIgPiY2OyB9CitpZiB0ZXN0ICRhY19jdl9saWJfY19iYWNrdHJhY2UgPSB5ZXM7IHRoZW4KKworCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBIQVZFX0JBQ0tUUkFDRSAxCitfQUNFT0YKKworCQlMREZMQUdTPSIkTERGTEFHUyAtcmR5bmFtaWMiCisKK2ZpCisKKworZmkKKworCisKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorCisJLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisJI2lmIGRlZmluZWQgX19zMzkwX18gfHwgZGVmaW5lZCBfX3MzOTB4X18KKwkjICBtZXNzYWdlIHMzOTAgZGVmaW5lZAorCSNlbmRpZgorCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisgIGNvbXBpbGVfZm9yX3MzOTA9Im5vIgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJY29tcGlsZV9mb3JfczM5MD0ieWVzIgorZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgaWYgdGVzdCAiJGNvbXBpbGVfZm9yX3MzOTAiID0gInllcyI7IHRoZW4KKyAgQ09NUElMRV9GT1JfUzM5MF9UUlVFPQorICBDT01QSUxFX0ZPUl9TMzkwX0ZBTFNFPScjJworZWxzZQorICBDT01QSUxFX0ZPUl9TMzkwX1RSVUU9JyMnCisgIENPTVBJTEVfRk9SX1MzOTBfRkFMU0U9CitmaQorCisKKworCitpZiB0ZXN0ICJ4JGFjX2N2X2Vudl9QS0dfQ09ORklHX3NldCIgIT0gInhzZXQiOyB0aGVuCisJaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9cGtnLWNvbmZpZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1wa2ctY29uZmlnOyBhY193b3JkPSQyCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3BhdGhfUEtHX0NPTkZJRytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXNlICRQS0dfQ09ORklHIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX1BLR19DT05GSUc9IiRQS0dfQ09ORklHIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhfUEtHX0NPTkZJRz0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIDs7Citlc2FjCitmaQorUEtHX0NPTkZJRz0kYWNfY3ZfcGF0aF9QS0dfQ09ORklHCitpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkUEtHX0NPTkZJRyIgPiY1CitlY2hvICIke0VDSE9fVH0kUEtHX0NPTkZJRyIgPiY2OyB9CitlbHNlCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfUEtHX0NPTkZJRyI7IHRoZW4KKyAgYWNfcHRfUEtHX0NPTkZJRz0kUEtHX0NPTkZJRworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInBrZy1jb25maWciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IHBrZy1jb25maWc7IGFjX3dvcmQ9JDIKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9hY19wdF9QS0dfQ09ORklHK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhc2UgJGFjX3B0X1BLR19DT05GSUcgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfYWNfcHRfUEtHX0NPTkZJRz0iJGFjX3B0X1BLR19DT05GSUciICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcGF0aF9hY19wdF9QS0dfQ09ORklHPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCitkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgOzsKK2VzYWMKK2ZpCithY19wdF9QS0dfQ09ORklHPSRhY19jdl9wYXRoX2FjX3B0X1BLR19DT05GSUcKK2lmIHRlc3QgLW4gIiRhY19wdF9QS0dfQ09ORklHIjsgdGhlbgorICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19wdF9QS0dfQ09ORklHIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19wdF9QS0dfQ09ORklHIiA+JjY7IH0KK2Vsc2UKKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfcHRfUEtHX0NPTkZJRyIgPSB4OyB0aGVuCisgICAgUEtHX0NPTkZJRz0iIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scword2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcworY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKK3dob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKK2NvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgUEtHX0NPTkZJRz0kYWNfcHRfUEtHX0NPTkZJRworICBmaQorZWxzZQorICBQS0dfQ09ORklHPSIkYWNfY3ZfcGF0aF9QS0dfQ09ORklHIgorZmkKKworZmkKK2lmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgorCV9wa2dfbWluX3ZlcnNpb249MC45LjAKKwl7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBwa2ctY29uZmlnIGlzIGF0IGxlYXN0IHZlcnNpb24gJF9wa2dfbWluX3ZlcnNpb24iID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBwa2ctY29uZmlnIGlzIGF0IGxlYXN0IHZlcnNpb24gJF9wa2dfbWluX3ZlcnNpb24uLi4gJEVDSE9fQyIgPiY2OyB9CisJaWYgJFBLR19DT05GSUcgLS1hdGxlYXN0LXBrZ2NvbmZpZy12ZXJzaW9uICRfcGtnX21pbl92ZXJzaW9uOyB0aGVuCisJCXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKK2VjaG8gIiR7RUNIT19UfXllcyIgPiY2OyB9CisJZWxzZQorCQl7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKwkJUEtHX0NPTkZJRz0iIgorCWZpCisKK2ZpCisKK3BrZ19mYWlsZWQ9bm8KK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBDSEVDSyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBDSEVDSy4uLiAkRUNIT19DIiA+JjY7IH0KKworaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCisgICAgaWYgdGVzdCAtbiAiJENIRUNLX0NGTEFHUyI7IHRoZW4KKyAgICAgICAgcGtnX2N2X0NIRUNLX0NGTEFHUz0iJENIRUNLX0NGTEFHUyIKKyAgICBlbHNlCisgICAgICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCisgICAgeyAoZWNobyAiJGFzX21lOiRMSU5FTk86IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcImNoZWNrID49IDAuOS4zXCIiKSA+JjUKKyAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICJjaGVjayA+PSAwLjkuMyIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KKyAgcGtnX2N2X0NIRUNLX0NGTEFHUz1gJFBLR19DT05GSUcgLS1jZmxhZ3MgImNoZWNrID49IDAuOS4zIiAyPi9kZXYvbnVsbGAKK2Vsc2UKKyAgcGtnX2ZhaWxlZD15ZXMKK2ZpCisgICAgZmkKK2Vsc2UKKwlwa2dfZmFpbGVkPXVudHJpZWQKK2ZpCitpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KKyAgICBpZiB0ZXN0IC1uICIkQ0hFQ0tfTElCUyI7IHRoZW4KKyAgICAgICAgcGtnX2N2X0NIRUNLX0xJQlM9IiRDSEVDS19MSUJTIgorICAgIGVsc2UKKyAgICAgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKKyAgICB7IChlY2hvICIkYXNfbWU6JExJTkVOTzogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwiY2hlY2sgPj0gMC45LjNcIiIpID4mNQorICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgImNoZWNrID49IDAuOS4zIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgorICBwa2dfY3ZfQ0hFQ0tfTElCUz1gJFBLR19DT05GSUcgLS1saWJzICJjaGVjayA+PSAwLjkuMyIgMj4vZGV2L251bGxgCitlbHNlCisgIHBrZ19mYWlsZWQ9eWVzCitmaQorICAgIGZpCitlbHNlCisJcGtnX2ZhaWxlZD11bnRyaWVkCitmaQorCisKKworaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHllczsgdGhlbgorCitpZiAkUEtHX0NPTkZJRyAtLWF0bGVhc3QtcGtnY29uZmlnLXZlcnNpb24gMC4yMDsgdGhlbgorICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9eWVzCitlbHNlCisgICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD1ubworZmkKKyAgICAgICAgaWYgdGVzdCAkX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkID0geWVzOyB0aGVuCisJICAgICAgICBDSEVDS19QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLXNob3J0LWVycm9ycyAtLWVycm9ycy10by1zdGRvdXQgLS1wcmludC1lcnJvcnMgImNoZWNrID49IDAuOS4zImAKKyAgICAgICAgZWxzZQorCSAgICAgICAgQ0hFQ0tfUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1lcnJvcnMtdG8tc3Rkb3V0IC0tcHJpbnQtZXJyb3JzICJjaGVjayA+PSAwLjkuMyJgCisgICAgICAgIGZpCisJIyBQdXQgdGhlIG5hc3R5IGVycm9yIG1lc3NhZ2UgaW4gY29uZmlnLmxvZyB3aGVyZSBpdCBiZWxvbmdzCisJZWNobyAiJENIRUNLX1BLR19FUlJPUlMiID4mNQorCisJeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisgICAgICAgICAgICAgICAgaGF2ZV9jaGVjaz1ubworZWxpZiB0ZXN0ICRwa2dfZmFpbGVkID0gdW50cmllZDsgdGhlbgorCWhhdmVfY2hlY2s9bm8KK2Vsc2UKKwlDSEVDS19DRkxBR1M9JHBrZ19jdl9DSEVDS19DRkxBR1MKKwlDSEVDS19MSUJTPSRwa2dfY3ZfQ0hFQ0tfTElCUworICAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1CitlY2hvICIke0VDSE9fVH15ZXMiID4mNjsgfQorCWhhdmVfY2hlY2s9eWVzCitmaQoraWYgdGVzdCAiJGhhdmVfc2NpbnRpbGxhIiAhPSAieWVzIjsgdGhlbgorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogVW5hYmxlIHRvIGxvY2F0ZSBjaGVjayB2ZXJzaW9uIDAuOS4zIG9yIGhpZ2hlcjogbm90IGJ1aWxkaW5nIiA+JjUKK2VjaG8gIiR7RUNIT19UfVVuYWJsZSB0byBsb2NhdGUgY2hlY2sgdmVyc2lvbiAwLjkuMyBvciBoaWdoZXI6IG5vdCBidWlsZGluZyIgPiY2OyB9CitmaQorIGlmIHRlc3QgIiRoYXZlX2NoZWNrIiA9IHllczsgdGhlbgorICBIQVZFX0NIRUNLX1RSVUU9CisgIEhBVkVfQ0hFQ0tfRkFMU0U9JyMnCitlbHNlCisgIEhBVkVfQ0hFQ0tfVFJVRT0nIycKKyAgSEFWRV9DSEVDS19GQUxTRT0KK2ZpCisKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWdudS1sZCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfZ251X2xkK3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9JHdpdGhfZ251X2xkOyB0ZXN0ICIkd2l0aHZhbCIgPSBubyB8fCB3aXRoX2dudV9sZD15ZXMKK2Vsc2UKKyAgd2l0aF9nbnVfbGQ9bm8KK2ZpCisKK2FjX3Byb2c9bGQKK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICMgQ2hlY2sgaWYgZ2NjIC1wcmludC1wcm9nLW5hbWU9bGQgZ2l2ZXMgYSBwYXRoLgorICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgbGQgdXNlZCBieSAkQ0MiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbGQgdXNlZCBieSAkQ0MuLi4gJEVDSE9fQyIgPiY2OyB9CisgIGNhc2UgJGhvc3QgaW4KKyAgKi0qLW1pbmd3KikKKyAgICAjIGdjYyBsZWF2ZXMgYSB0cmFpbGluZyBjYXJyaWFnZSByZXR1cm4gd2hpY2ggdXBzZXRzIG1pbmd3CisgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1IHwgdHIgLWQgJ1wwMTUnYCA7OworICAqKQorICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNWAgOzsKKyAgZXNhYworICBjYXNlICRhY19wcm9nIGluCisgICAgIyBBY2NlcHQgYWJzb2x1dGUgcGF0aHMuCisgICAgW1xcL10qIHwgPzpbXFwvXSopCisgICAgICByZV9kaXJlbHQ9Jy9bXi9dW14vXSovXC5cLi8nCisgICAgICAjIENhbm9uaWNhbGl6ZSB0aGUgcGF0aG5hbWUgb2YgbGQKKyAgICAgIGFjX3Byb2c9YGVjaG8gJGFjX3Byb2d8ICRTRUQgJ3MlXFxcXCUvJWcnYAorICAgICAgd2hpbGUgZWNobyAkYWNfcHJvZyB8IGdyZXAgIiRyZV9kaXJlbHQiID4gL2Rldi9udWxsIDI+JjE7IGRvCisJYWNfcHJvZz1gZWNobyAkYWNfcHJvZ3wgJFNFRCAicyUkcmVfZGlyZWx0JS8lImAKKyAgICAgIGRvbmUKKyAgICAgIHRlc3QgLXogIiRMRCIgJiYgTEQ9IiRhY19wcm9nIgorICAgICAgOzsKKyAgIiIpCisgICAgIyBJZiBpdCBmYWlscywgdGhlbiBwcmV0ZW5kIHdlIGFyZW4ndCB1c2luZyBHQ0MuCisgICAgYWNfcHJvZz1sZAorICAgIDs7CisgICopCisgICAgIyBJZiBpdCBpcyByZWxhdGl2ZSwgdGhlbiBzZWFyY2ggZm9yIHRoZSBmaXJzdCBsZCBpbiBQQVRILgorICAgIHdpdGhfZ251X2xkPXVua25vd24KKyAgICA7OworICBlc2FjCitlbGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEdOVSBsZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBHTlUgbGQuLi4gJEVDSE9fQyIgPiY2OyB9CitlbHNlCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBub24tR05VIGxkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQuLi4gJEVDSE9fQyIgPiY2OyB9CitmaQoraWYgdGVzdCAiJHtsdF9jdl9wYXRoX0xEK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgLXogIiRMRCI7IHRoZW4KKyAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgIGZvciBhY19kaXIgaW4gJFBBVEg7IGRvCisgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICBpZiB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nIiB8fCB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nJGFjX2V4ZWV4dCI7IHRoZW4KKyAgICAgIGx0X2N2X3BhdGhfTEQ9IiRhY19kaXIvJGFjX3Byb2ciCisgICAgICAjIENoZWNrIHRvIHNlZSBpZiB0aGUgcHJvZ3JhbSBpcyBHTlUgbGQuICBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24sCisgICAgICAjIGJ1dCBhcHBhcmVudGx5IHNvbWUgdmFyaWFudHMgb2YgR05VIGxkIG9ubHkgYWNjZXB0IC12LgorICAgICAgIyBCcmVhayBvbmx5IGlmIGl0IHdhcyB0aGUgR05VL25vbi1HTlUgbGQgdGhhdCB3ZSBwcmVmZXIuCisgICAgICBjYXNlIGAiJGx0X2N2X3BhdGhfTEQiIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KKyAgICAgICpHTlUqIHwgKid3aXRoIEJGRCcqKQorCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0gbm8gJiYgYnJlYWsKKwk7OworICAgICAgKikKKwl0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IHllcyAmJiBicmVhaworCTs7CisgICAgICBlc2FjCisgICAgZmkKKyAgZG9uZQorICBJRlM9IiRsdF9zYXZlX2lmcyIKK2Vsc2UKKyAgbHRfY3ZfcGF0aF9MRD0iJExEIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KK2ZpCitmaQorCitMRD0iJGx0X2N2X3BhdGhfTEQiCitpZiB0ZXN0IC1uICIkTEQiOyB0aGVuCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJExEIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRMRCIgPiY2OyB9CitlbHNlCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorZmkKK3Rlc3QgLXogIiRMRCIgJiYgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogbm8gYWNjZXB0YWJsZSBsZCBmb3VuZCBpbiBcJFBBVEgiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogbm8gYWNjZXB0YWJsZSBsZCBmb3VuZCBpbiBcJFBBVEgiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X3Byb2dfZ251X2xkK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgICMgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uIGhlcmUsIGJ1dCBhcHBhcmVudGx5IHNvbWUgR05VIGxkcyBvbmx5IGFjY2VwdCAtdi4KK2Nhc2UgYCRMRCAtdiAyPiYxIDwvZGV2L251bGxgIGluCisqR05VKiB8ICond2l0aCBCRkQnKikKKyAgbHRfY3ZfcHJvZ19nbnVfbGQ9eWVzCisgIDs7CisqKQorICBsdF9jdl9wcm9nX2dudV9sZD1ubworICA7OworZXNhYworZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3Byb2dfZ251X2xkIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRsdF9jdl9wcm9nX2dudV9sZCIgPiY2OyB9Cit3aXRoX2dudV9sZD0kbHRfY3ZfcHJvZ19nbnVfbGQKKworCisKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgYnl0ZSBvcmRlcmluZyBpcyBiaWdlbmRpYW4iID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIGJ5dGUgb3JkZXJpbmcgaXMgYmlnZW5kaWFuLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9jX2JpZ2VuZGlhbitzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICAjIFNlZSBpZiBzeXMvcGFyYW0uaCBkZWZpbmVzIHRoZSBCWVRFX09SREVSIG1hY3JvLgorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisKK2ludAorbWFpbiAoKQoreworI2lmICAhIChkZWZpbmVkIEJZVEVfT1JERVIgJiYgZGVmaW5lZCBCSUdfRU5ESUFOICYmIGRlZmluZWQgTElUVExFX0VORElBTiBcCisJJiYgQllURV9PUkRFUiAmJiBCSUdfRU5ESUFOICYmIExJVFRMRV9FTkRJQU4pCisgYm9ndXMgZW5kaWFuIG1hY3JvcworI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICAjIEl0IGRvZXM7IG5vdyBzZWUgd2hldGhlciBpdCBkZWZpbmVkIHRvIEJJR19FTkRJQU4gb3Igbm90LgorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisKK2ludAorbWFpbiAoKQoreworI2lmIEJZVEVfT1JERVIgIT0gQklHX0VORElBTgorIG5vdCBiaWcgZW5kaWFuCisjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisgIGFjX2N2X2NfYmlnZW5kaWFuPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfY3ZfY19iaWdlbmRpYW49bm8KK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJIyBJdCBkb2VzIG5vdDsgY29tcGlsZSBhIHRlc3QgcHJvZ3JhbS4KK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgICMgdHJ5IHRvIGd1ZXNzIHRoZSBlbmRpYW5uZXNzIGJ5IGdyZXBwaW5nIHZhbHVlcyBpbnRvIGFuIG9iamVjdCBmaWxlCisgIGFjX2N2X2NfYmlnZW5kaWFuPXVua25vd24KKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCitzaG9ydCBpbnQgYXNjaWlfbW1bXSA9IHsgMHg0MjQ5LCAweDQ3NjUsIDB4NkU0NCwgMHg2OTYxLCAweDZFNTMsIDB4Nzk1MywgMCB9Oworc2hvcnQgaW50IGFzY2lpX2lpW10gPSB7IDB4Njk0QywgMHg1NDU0LCAweDY1NkMsIDB4NkU0NSwgMHg2OTQ0LCAweDZFNjEsIDAgfTsKK3ZvaWQgX2FzY2lpICgpIHsgY2hhciAqcyA9IChjaGFyICopIGFzY2lpX21tOyBzID0gKGNoYXIgKikgYXNjaWlfaWk7IH0KK3Nob3J0IGludCBlYmNkaWNfaWlbXSA9IHsgMHg4OUQzLCAweEUzRTMsIDB4ODU5MywgMHg5NUM1LCAweDg5QzQsIDB4OTU4MSwgMCB9Oworc2hvcnQgaW50IGViY2RpY19tbVtdID0geyAweEMyQzksIDB4Qzc4NSwgMHg5NUM0LCAweDg5ODEsIDB4OTVFMiwgMHhBOEUyLCAwIH07Cit2b2lkIF9lYmNkaWMgKCkgeyBjaGFyICpzID0gKGNoYXIgKikgZWJjZGljX21tOyBzID0gKGNoYXIgKikgZWJjZGljX2lpOyB9CitpbnQKK21haW4gKCkKK3sKKyBfYXNjaWkgKCk7IF9lYmNkaWMgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgaWYgZ3JlcCBCSUdlbkRpYW5TeVMgY29uZnRlc3QuJGFjX29iamV4dCA+L2Rldi9udWxsIDsgdGhlbgorICBhY19jdl9jX2JpZ2VuZGlhbj15ZXMKK2ZpCitpZiBncmVwIExpVFRsZUVuRGlhbiBjb25mdGVzdC4kYWNfb2JqZXh0ID4vZGV2L251bGwgOyB0aGVuCisgIGlmIHRlc3QgIiRhY19jdl9jX2JpZ2VuZGlhbiIgPSB1bmtub3duOyB0aGVuCisgICAgYWNfY3ZfY19iaWdlbmRpYW49bm8KKyAgZWxzZQorICAgICMgZmluZGluZyBib3RoIHN0cmluZ3MgaXMgdW5saWtlbHkgdG8gaGFwcGVuLCBidXQgd2hvIGtub3dzPworICAgIGFjX2N2X2NfYmlnZW5kaWFuPXVua25vd24KKyAgZmkKK2ZpCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworCisgIC8qIEFyZSB3ZSBsaXR0bGUgb3IgYmlnIGVuZGlhbj8gIEZyb20gSGFyYmlzb24mU3RlZWxlLiAgKi8KKyAgdW5pb24KKyAgeworICAgIGxvbmcgaW50IGw7CisgICAgY2hhciBjW3NpemVvZiAobG9uZyBpbnQpXTsKKyAgfSB1OworICB1LmwgPSAxOworICByZXR1cm4gdS5jW3NpemVvZiAobG9uZyBpbnQpIC0gMV0gPT0gMTsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfdHJ5IikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9jX2JpZ2VuZGlhbj1ubworZWxzZQorICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworKCBleGl0ICRhY19zdGF0dXMgKQorYWNfY3ZfY19iaWdlbmRpYW49eWVzCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorCisKK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2NfYmlnZW5kaWFuIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9jX2JpZ2VuZGlhbiIgPiY2OyB9CitjYXNlICRhY19jdl9jX2JpZ2VuZGlhbiBpbgorICB5ZXMpCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIFdPUkRTX0JJR0VORElBTiAxCitfQUNFT0YKKyA7OworICBubykKKyAgICAgOzsKKyAgKikKKyAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiB1bmtub3duIGVuZGlhbm5lc3MKK3ByZXNldHRpbmcgYWNfY3ZfY19iaWdlbmRpYW49bm8gKG9yIHllcykgd2lsbCBoZWxwIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IHVua25vd24gZW5kaWFubmVzcworcHJlc2V0dGluZyBhY19jdl9jX2JpZ2VuZGlhbj1ubyAob3IgeWVzKSB3aWxsIGhlbHAiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0gOzsKK2VzYWMKKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGlubGluZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBpbmxpbmUuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2NfaW5saW5lK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGFjX2N2X2NfaW5saW5lPW5vCitmb3IgYWNfa3cgaW4gaW5saW5lIF9faW5saW5lX18gX19pbmxpbmU7IGRvCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2lmbmRlZiBfX2NwbHVzcGx1cwordHlwZWRlZiBpbnQgZm9vX3Q7CitzdGF0aWMgJGFjX2t3IGZvb190IHN0YXRpY19mb28gKCkge3JldHVybiAwOyB9CiskYWNfa3cgZm9vX3QgZm9vICgpIHtyZXR1cm4gMDsgfQorI2VuZGlmCisKK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICBhY19jdl9jX2lubGluZT0kYWNfa3cKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgdGVzdCAiJGFjX2N2X2NfaW5saW5lIiAhPSBubyAmJiBicmVhaworZG9uZQorCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfY19pbmxpbmUiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2NfaW5saW5lIiA+JjY7IH0KKworCitjYXNlICRhY19jdl9jX2lubGluZSBpbgorICBpbmxpbmUgfCB5ZXMpIDs7CisgICopCisgICAgY2FzZSAkYWNfY3ZfY19pbmxpbmUgaW4KKyAgICAgIG5vKSBhY192YWw9OzsKKyAgICAgICopIGFjX3ZhbD0kYWNfY3ZfY19pbmxpbmU7OworICAgIGVzYWMKKyAgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjaWZuZGVmIF9fY3BsdXNwbHVzCisjZGVmaW5lIGlubGluZSAkYWNfdmFsCisjZW5kaWYKK19BQ0VPRgorICAgIDs7Citlc2FjCisKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBhbiBBTlNJIEMtY29uZm9ybWluZyBjb25zdCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBhbiBBTlNJIEMtY29uZm9ybWluZyBjb25zdC4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfY19jb25zdCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisvKiBGSVhNRTogSW5jbHVkZSB0aGUgY29tbWVudHMgc3VnZ2VzdGVkIGJ5IFBhdWwuICovCisjaWZuZGVmIF9fY3BsdXNwbHVzCisgIC8qIFVsdHJpeCBtaXBzIGNjIHJlamVjdHMgdGhpcy4gICovCisgIHR5cGVkZWYgaW50IGNoYXJzZXRbMl07CisgIGNvbnN0IGNoYXJzZXQgY3M7CisgIC8qIFN1bk9TIDQuMS4xIGNjIHJlamVjdHMgdGhpcy4gICovCisgIGNoYXIgY29uc3QgKmNvbnN0ICpwY3BjYzsKKyAgY2hhciAqKnBwYzsKKyAgLyogTkVDIFNWUjQuMC4yIG1pcHMgY2MgcmVqZWN0cyB0aGlzLiAgKi8KKyAgc3RydWN0IHBvaW50IHtpbnQgeCwgeTt9OworICBzdGF0aWMgc3RydWN0IHBvaW50IGNvbnN0IHplcm8gPSB7MCwwfTsKKyAgLyogQUlYIFhMIEMgMS4wMi4wLjAgcmVqZWN0cyB0aGlzLgorICAgICBJdCBkb2VzIG5vdCBsZXQgeW91IHN1YnRyYWN0IG9uZSBjb25zdCBYKiBwb2ludGVyIGZyb20gYW5vdGhlciBpbgorICAgICBhbiBhcm0gb2YgYW4gaWYtZXhwcmVzc2lvbiB3aG9zZSBpZi1wYXJ0IGlzIG5vdCBhIGNvbnN0YW50CisgICAgIGV4cHJlc3Npb24gKi8KKyAgY29uc3QgY2hhciAqZyA9ICJzdHJpbmciOworICBwY3BjYyA9ICZnICsgKGcgPyBnLWcgOiAwKTsKKyAgLyogSFBVWCA3LjAgY2MgcmVqZWN0cyB0aGVzZS4gKi8KKyAgKytwY3BjYzsKKyAgcHBjID0gKGNoYXIqKikgcGNwY2M7CisgIHBjcGNjID0gKGNoYXIgY29uc3QgKmNvbnN0ICopIHBwYzsKKyAgeyAvKiBTQ08gMy4ydjQgY2MgcmVqZWN0cyB0aGlzLiAgKi8KKyAgICBjaGFyICp0OworICAgIGNoYXIgY29uc3QgKnMgPSAwID8gKGNoYXIgKikgMCA6IChjaGFyIGNvbnN0ICopIDA7CisKKyAgICAqdCsrID0gMDsKKyAgICBpZiAocykgcmV0dXJuIDA7CisgIH0KKyAgeyAvKiBTb21lb25lIHRoaW5rcyB0aGUgU3VuIHN1cHBvc2VkbHktQU5TSSBjb21waWxlciB3aWxsIHJlamVjdCB0aGlzLiAgKi8KKyAgICBpbnQgeFtdID0gezI1LCAxN307CisgICAgY29uc3QgaW50ICpmb28gPSAmeFswXTsKKyAgICArK2ZvbzsKKyAgfQorICB7IC8qIFN1biBTQzEuMCBBTlNJIGNvbXBpbGVyIHJlamVjdHMgdGhpcyAtLSBidXQgbm90IHRoZSBhYm92ZS4gKi8KKyAgICB0eXBlZGVmIGNvbnN0IGludCAqaXB0cjsKKyAgICBpcHRyIHAgPSAwOworICAgICsrcDsKKyAgfQorICB7IC8qIEFJWCBYTCBDIDEuMDIuMC4wIHJlamVjdHMgdGhpcyBzYXlpbmcKKyAgICAgICAiay5jIiwgbGluZSAyLjI3OiAxNTA2LTAyNSAoUykgT3BlcmFuZCBtdXN0IGJlIGEgbW9kaWZpYWJsZSBsdmFsdWUuICovCisgICAgc3RydWN0IHMgeyBpbnQgajsgY29uc3QgaW50ICphcFszXTsgfTsKKyAgICBzdHJ1Y3QgcyAqYjsgYi0+aiA9IDU7CisgIH0KKyAgeyAvKiBVTFRSSVgtMzIgVjMuMSAoUmV2IDkpIHZjYyByZWplY3RzIHRoaXMgKi8KKyAgICBjb25zdCBpbnQgZm9vID0gMTA7CisgICAgaWYgKCFmb28pIHJldHVybiAwOworICB9CisgIHJldHVybiAhY3NbMF0gJiYgIXplcm8ueDsKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgYWNfY3ZfY19jb25zdD15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX2N2X2NfY29uc3Q9bm8KK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2NfY29uc3QiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2NfY29uc3QiID4mNjsgfQoraWYgdGVzdCAkYWNfY3ZfY19jb25zdCA9IG5vOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIGNvbnN0CitfQUNFT0YKKworZmkKKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEMvQysrIHJlc3RyaWN0IGtleXdvcmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgQy9DKysgcmVzdHJpY3Qga2V5d29yZC4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfY19yZXN0cmljdCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhY19jdl9jX3Jlc3RyaWN0PW5vCisgICAjIFRyeSB0aGUgb2ZmaWNpYWwgcmVzdHJpY3Qga2V5d29yZCwgdGhlbiBnY2MncyBfX3Jlc3RyaWN0LCBhbmQKKyAgICMgdGhlIGxlc3MgY29tbW9uIHZhcmlhbnRzLgorICAgZm9yIGFjX2t3IGluIHJlc3RyaWN0IF9fcmVzdHJpY3QgX19yZXN0cmljdF9fIF9SZXN0cmljdDsgZG8KKyAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCit0eXBlZGVmIGludCAqIGludF9wdHI7CisgICAgICAgIGludCBmb28gKGludF9wdHIgJGFjX2t3IGlwKSB7CisgICAgICAgIHJldHVybiBpcFswXTsKKyAgICAgICB9CitpbnQKK21haW4gKCkKK3sKK2ludCBzWzFdOworICAgICAgICBpbnQgKiAkYWNfa3cgdCA9IHM7CisgICAgICAgIHRbMF0gPSAwOworICAgICAgICByZXR1cm4gZm9vKHQpCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgYWNfY3ZfY19yZXN0cmljdD0kYWNfa3cKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgdGVzdCAiJGFjX2N2X2NfcmVzdHJpY3QiICE9IG5vICYmIGJyZWFrCisgICBkb25lCisKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9jX3Jlc3RyaWN0IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9jX3Jlc3RyaWN0IiA+JjY7IH0KKyBjYXNlICRhY19jdl9jX3Jlc3RyaWN0IGluCisgICByZXN0cmljdCkgOzsKKyAgIG5vKQorY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgcmVzdHJpY3QKK19BQ0VPRgorIDs7CisgICAqKSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSByZXN0cmljdCAkYWNfY3ZfY19yZXN0cmljdAorX0FDRU9GCisgOzsKKyBlc2FjCisKKworCisKK2ZvciBhY19mdW5jIGluIHNpZ2FjdGlvbgorZG8KK2FzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB7IGFzX3Zhcj0kYXNfYWNfdmFyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCisgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKyNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCisKKy8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KKyAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKworI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKworI3VuZGVmICRhY19mdW5jCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgJGFjX2Z1bmMgKCk7CisvKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCisgICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKKyAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KKyNpZiBkZWZpbmVkIF9fc3R1Yl8kYWNfZnVuYyB8fCBkZWZpbmVkIF9fc3R1Yl9fXyRhY19mdW5jCitjaG9rZSBtZQorI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworcmV0dXJuICRhY19mdW5jICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlldmFsICIkYXNfYWNfdmFyPW5vIgorZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgCisJICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KK2lmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKK2RvbmUKKworCitmb3IgYWNfZnVuYyBpbiBnZXR1aWQKK2RvCithc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgeyBhc192YXI9JGFzX2FjX3ZhcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgorICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCisjZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYworCisvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCisgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisKKyN1bmRlZiAkYWNfZnVuYworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyICRhY19mdW5jICgpOworLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCisgICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCisjaWYgZGVmaW5lZCBfX3N0dWJfJGFjX2Z1bmMgfHwgZGVmaW5lZCBfX3N0dWJfX18kYWNfZnVuYworY2hva2UgbWUKKyNlbmRpZgorCitpbnQKK21haW4gKCkKK3sKK3JldHVybiAkYWNfZnVuYyAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgIGV2YWwgIiRhc19hY192YXI9eWVzIgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJZXZhbCAiJGFzX2FjX3Zhcj1ubyIKK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2FjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYAorCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CitpZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCitkb25lCisKKworaWYgdGVzdCAiJHdpdGhfcmVhZGxpbmUiID0geWVzOyB0aGVuCisJT0xEX0xJQlM9IiRMSUJTIgorCUxJQlM9IiRMSUJTICRQQVJURURfTElCUyAtbHJlYWRsaW5lIgorCitmb3IgYWNfZnVuYyBpbiBybF9jb21wbGV0aW9uX21hdGNoZXMKK2RvCithc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgeyBhc192YXI9JGFzX2FjX3ZhcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgorICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCisjZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYworCisvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCisgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisKKyN1bmRlZiAkYWNfZnVuYworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyICRhY19mdW5jICgpOworLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCisgICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCisjaWYgZGVmaW5lZCBfX3N0dWJfJGFjX2Z1bmMgfHwgZGVmaW5lZCBfX3N0dWJfX18kYWNfZnVuYworY2hva2UgbWUKKyNlbmRpZgorCitpbnQKK21haW4gKCkKK3sKK3JldHVybiAkYWNfZnVuYyAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgIGV2YWwgIiRhc19hY192YXI9eWVzIgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJZXZhbCAiJGFzX2FjX3Zhcj1ubyIKK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2FjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYAorCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CitpZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCitkb25lCisKKwlMSUJTPSIkT0xEX0xJQlMiCitmaQorCisKK2ZvciBhY19mdW5jIGluIGNhbm9uaWNhbGl6ZV9maWxlX25hbWUKK2RvCithc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgeyBhc192YXI9JGFzX2FjX3ZhcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgorICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCisjZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYworCisvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCisgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisKKyN1bmRlZiAkYWNfZnVuYworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyICRhY19mdW5jICgpOworLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCisgICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCisjaWYgZGVmaW5lZCBfX3N0dWJfJGFjX2Z1bmMgfHwgZGVmaW5lZCBfX3N0dWJfX18kYWNfZnVuYworY2hva2UgbWUKKyNlbmRpZgorCitpbnQKK21haW4gKCkKK3sKK3JldHVybiAkYWNfZnVuYyAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgIGV2YWwgIiRhc19hY192YXI9eWVzIgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJZXZhbCAiJGFzX2FjX3Zhcj1ubyIKK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2FjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYAorCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CitpZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCitkb25lCisKKworIyBDRkxBR1M9IiRDRkxBR1MgLVcgLVdhbGwgLVduby11bnVzZWQgLVduby1zd2l0Y2ggLVduby1mb3JtYXQiCisKK2lmIHRlc3QgIiRlbmFibGVfV2Vycm9yIiA9IHllczsgdGhlbgorCUNGTEFHUz0iJENGTEFHUyAtV2Vycm9yIgorZmkKKworREFURT0kKGRhdGUgJyslZCAlYiAlWSAlSDolTScpCitVU0VSPSQod2hvYW1pKQorSE9TVD0kKGhvc3RuYW1lKQorQlVJTERJTkZPPSIkVVNFUkAkSE9TVCwgJERBVEUiCisKKworYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIE1ha2VmaWxlIGxpYi9NYWtlZmlsZSBpbmNsdWRlL01ha2VmaWxlIGluY2x1ZGUvcGFydGVkL01ha2VmaWxlIGxpYnBhcnRlZC9NYWtlZmlsZSBsaWJwYXJ0ZWQvbGFiZWxzL01ha2VmaWxlIGxpYnBhcnRlZC9mcy9NYWtlZmlsZSBsaWJwYXJ0ZWQvZnMvYW1pZ2EvTWFrZWZpbGUgbGlicGFydGVkL2ZzL2V4dDIvTWFrZWZpbGUgbGlicGFydGVkL2ZzL2ZhdC9NYWtlZmlsZSBsaWJwYXJ0ZWQvZnMvaGZzL01ha2VmaWxlIGxpYnBhcnRlZC9mcy9qZnMvTWFrZWZpbGUgbGlicGFydGVkL2ZzL2xpbnV4X3N3YXAvTWFrZWZpbGUgbGlicGFydGVkL2ZzL250ZnMvTWFrZWZpbGUgbGlicGFydGVkL2ZzL3JlaXNlcmZzL01ha2VmaWxlIGxpYnBhcnRlZC9mcy91ZnMvTWFrZWZpbGUgbGlicGFydGVkL2ZzL3hmcy9NYWtlZmlsZSBsaWJwYXJ0ZWQvdGVzdHMvTWFrZWZpbGUgbGlicGFydGVkLnBjIHBhcnRlZC9NYWtlZmlsZSBwYXJ0cHJvYmUvTWFrZWZpbGUgZG9jL01ha2VmaWxlIGRvYy9DL01ha2VmaWxlIGRvYy9wdF9CUi9NYWtlZmlsZSBkZWJ1Zy9NYWtlZmlsZSBkZWJ1Zy9jbGVhcmZhdC9NYWtlZmlsZSBkZWJ1Zy90ZXN0L01ha2VmaWxlIHRlc3RzL01ha2VmaWxlIHBvL01ha2VmaWxlLmluIgorCitjYXQgPmNvbmZjYWNoZSA8PFxfQUNFT0YKKyMgVGhpcyBmaWxlIGlzIGEgc2hlbGwgc2NyaXB0IHRoYXQgY2FjaGVzIHRoZSByZXN1bHRzIG9mIGNvbmZpZ3VyZQorIyB0ZXN0cyBydW4gb24gdGhpcyBzeXN0ZW0gc28gdGhleSBjYW4gYmUgc2hhcmVkIGJldHdlZW4gY29uZmlndXJlCisjIHNjcmlwdHMgYW5kIGNvbmZpZ3VyZSBydW5zLCBzZWUgY29uZmlndXJlJ3Mgb3B0aW9uIC0tY29uZmlnLWNhY2hlLgorIyBJdCBpcyBub3QgdXNlZnVsIG9uIG90aGVyIHN5c3RlbXMuICBJZiBpdCBjb250YWlucyByZXN1bHRzIHlvdSBkb24ndAorIyB3YW50IHRvIGtlZXAsIHlvdSBtYXkgcmVtb3ZlIG9yIGVkaXQgaXQuCisjCisjIGNvbmZpZy5zdGF0dXMgb25seSBwYXlzIGF0dGVudGlvbiB0byB0aGUgY2FjaGUgZmlsZSBpZiB5b3UgZ2l2ZSBpdAorIyB0aGUgLS1yZWNoZWNrIG9wdGlvbiB0byByZXJ1biBjb25maWd1cmUuCisjCisjIGBhY19jdl9lbnZfZm9vJyB2YXJpYWJsZXMgKHNldCBvciB1bnNldCkgd2lsbCBiZSBvdmVycmlkZGVuIHdoZW4KKyMgbG9hZGluZyB0aGlzIGZpbGUsIG90aGVyICp1bnNldCogYGFjX2N2X2Zvbycgd2lsbCBiZSBhc3NpZ25lZCB0aGUKKyMgZm9sbG93aW5nIHZhbHVlcy4KKworX0FDRU9GCisKKyMgVGhlIGZvbGxvd2luZyB3YXkgb2Ygd3JpdGluZyB0aGUgY2FjaGUgbWlzaGFuZGxlcyBuZXdsaW5lcyBpbiB2YWx1ZXMsCisjIGJ1dCB3ZSBrbm93IG9mIG5vIHdvcmthcm91bmQgdGhhdCBpcyBzaW1wbGUsIHBvcnRhYmxlLCBhbmQgZWZmaWNpZW50LgorIyBTbywgd2Uga2lsbCB2YXJpYWJsZXMgY29udGFpbmluZyBuZXdsaW5lcy4KKyMgVWx0cml4IHNoIHNldCB3cml0ZXMgdG8gc3RkZXJyIGFuZCBjYW4ndCBiZSByZWRpcmVjdGVkIGRpcmVjdGx5LAorIyBhbmQgc2V0cyB0aGUgaGlnaCBiaXQgaW4gdGhlIGNhY2hlIGZpbGUgdW5sZXNzIHdlIGFzc2lnbiB0byB0aGUgdmFycy4KKygKKyAgZm9yIGFjX3ZhciBpbiBgKHNldCkgMj4mMSB8IHNlZCAtbiAncy9eXChbYS16QS1aX11bYS16QS1aMC05X10qXCk9LiovXDEvcCdgOyBkbworICAgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorICAgIGNhc2UgJGFjX3ZhbCBpbiAjKAorICAgICoke2FzX25sfSopCisgICAgICBjYXNlICRhY192YXIgaW4gIygKKyAgICAgICpfY3ZfKikgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogQ2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUuIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogQ2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUuIiA+JjI7fSA7OworICAgICAgZXNhYworICAgICAgY2FzZSAkYWNfdmFyIGluICMoCisgICAgICBfIHwgSUZTIHwgYXNfbmwpIDs7ICMoCisgICAgICAqKSAkYXNfdW5zZXQgJGFjX3ZhciA7OworICAgICAgZXNhYyA7OworICAgIGVzYWMKKyAgZG9uZQorCisgIChzZXQpIDI+JjEgfAorICAgIGNhc2UgJGFzX25sYChhY19zcGFjZT0nICc7IHNldCkgMj4mMWAgaW4gIygKKyAgICAqJHthc19ubH1hY19zcGFjZT1cICopCisgICAgICAjIGBzZXQnIGRvZXMgbm90IHF1b3RlIGNvcnJlY3RseSwgc28gYWRkIHF1b3RlcyAoZG91YmxlLXF1b3RlCisgICAgICAjIHN1YnN0aXR1dGlvbiB0dXJucyBcXFxcIGludG8gXFwsIGFuZCBzZWQgdHVybnMgXFwgaW50byBcKS4KKyAgICAgIHNlZCAtbiBcCisJInMvJy8nXFxcXCcnL2c7CisJICBzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPSdcXDInL3AiCisgICAgICA7OyAjKAorICAgICopCisgICAgICAjIGBzZXQnIHF1b3RlcyBjb3JyZWN0bHkgYXMgcmVxdWlyZWQgYnkgUE9TSVgsIHNvIGRvIG5vdCBhZGQgcXVvdGVzLgorICAgICAgc2VkIC1uICIvXltfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKj0vcCIKKyAgICAgIDs7CisgICAgZXNhYyB8CisgICAgc29ydAorKSB8CisgIHNlZCAnCisgICAgIC9eYWNfY3ZfZW52Xy9iIGVuZAorICAgICB0IGNsZWFyCisgICAgIDpjbGVhcgorICAgICBzL15cKFtePV0qXCk9XCguKlt7fV0uKlwpJC90ZXN0ICIke1wxK3NldH0iID0gc2V0IHx8ICYvCisgICAgIHQgZW5kCisgICAgIHMvXlwoW149XSpcKT1cKC4qXCkkL1wxPSR7XDE9XDJ9LworICAgICA6ZW5kJyA+PmNvbmZjYWNoZQoraWYgZGlmZiAiJGNhY2hlX2ZpbGUiIGNvbmZjYWNoZSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOjsgZWxzZQorICBpZiB0ZXN0IC13ICIkY2FjaGVfZmlsZSI7IHRoZW4KKyAgICB0ZXN0ICJ4JGNhY2hlX2ZpbGUiICE9ICJ4L2Rldi9udWxsIiAmJgorICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogdXBkYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorZWNobyAiJGFzX21lOiB1cGRhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKyAgICBjYXQgY29uZmNhY2hlID4kY2FjaGVfZmlsZQorICBlbHNlCisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogbm90IHVwZGF0aW5nIHVud3JpdGFibGUgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorZWNobyAiJGFzX21lOiBub3QgdXBkYXRpbmcgdW53cml0YWJsZSBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKyAgZmkKK2ZpCitybSAtZiBjb25mY2FjaGUKKwordGVzdCAieCRwcmVmaXgiID0geE5PTkUgJiYgcHJlZml4PSRhY19kZWZhdWx0X3ByZWZpeAorIyBMZXQgbWFrZSBleHBhbmQgZXhlY19wcmVmaXguCit0ZXN0ICJ4JGV4ZWNfcHJlZml4IiA9IHhOT05FICYmIGV4ZWNfcHJlZml4PScke3ByZWZpeH0nCisKK0RFRlM9LURIQVZFX0NPTkZJR19ICisKK2FjX2xpYm9ianM9CithY19sdGxpYm9ianM9Citmb3IgYWNfaSBpbiA6ICRMSUJPQkpTOyBkbyB0ZXN0ICJ4JGFjX2kiID0geDogJiYgY29udGludWUKKyAgIyAxLiBSZW1vdmUgdGhlIGV4dGVuc2lvbiwgYW5kICRVIGlmIGFscmVhZHkgaW5zdGFsbGVkLgorICBhY19zY3JpcHQ9J3MvXCRVXC4vLi87cy9cLm8kLy87cy9cLm9iaiQvLycKKyAgYWNfaT1gZWNobyAiJGFjX2kiIHwgc2VkICIkYWNfc2NyaXB0ImAKKyAgIyAyLiBQcmVwZW5kIExJQk9CSkRJUi4gIFdoZW4gdXNlZCB3aXRoIGF1dG9tYWtlPj0xLjEwIExJQk9CSkRJUgorICAjICAgIHdpbGwgYmUgc2V0IHRvIHRoZSBkaXJlY3Rvcnkgd2hlcmUgTElCT0JKUyBvYmplY3RzIGFyZSBidWlsdC4KKyAgYWNfbGlib2Jqcz0iJGFjX2xpYm9ianMgXCR7TElCT0JKRElSfSRhY19pXCRVLiRhY19vYmpleHQiCisgIGFjX2x0bGlib2Jqcz0iJGFjX2x0bGlib2JqcyBcJHtMSUJPQkpESVJ9JGFjX2kiJyRVLmxvJworZG9uZQorTElCT0JKUz0kYWNfbGlib2JqcworCitMVExJQk9CSlM9JGFjX2x0bGlib2JqcworCisKK2lmIHRlc3QgLXogIiR7QU1ERVBfVFJVRX0iICYmIHRlc3QgLXogIiR7QU1ERVBfRkFMU0V9IjsgdGhlbgorICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb25kaXRpb25hbCBcIkFNREVQXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY29uZGl0aW9uYWwgXCJBTURFUFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitmaQoraWYgdGVzdCAteiAiJHthbV9fZmFzdGRlcENDX1RSVUV9IiAmJiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ0NfRkFMU0V9IjsgdGhlbgorICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb25kaXRpb25hbCBcImFtX19mYXN0ZGVwQ0NcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjb25kaXRpb25hbCBcImFtX19mYXN0ZGVwQ0NcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorZmkKK2lmIHRlc3QgLXogIiR7YW1fX2Zhc3RkZXBDQ19UUlVFfSIgJiYgdGVzdCAteiAiJHthbV9fZmFzdGRlcENDX0ZBTFNFfSI7IHRoZW4KKyAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZGl0aW9uYWwgXCJhbV9fZmFzdGRlcENDXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY29uZGl0aW9uYWwgXCJhbV9fZmFzdGRlcENDXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2ZpCitpZiB0ZXN0IC16ICIke0dMX0NPTkRfTElCVE9PTF9UUlVFfSIgJiYgdGVzdCAteiAiJHtHTF9DT05EX0xJQlRPT0xfRkFMU0V9IjsgdGhlbgorICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb25kaXRpb25hbCBcIkdMX0NPTkRfTElCVE9PTFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNvbmRpdGlvbmFsIFwiR0xfQ09ORF9MSUJUT09MXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2ZpCit0ZXN0ICJYJERFRlMiID0gWC1ESEFWRV9DT05GSUdfSCAmJiBERUZTPQorCisgICAgZ2xfbGlib2Jqcz0KKyAgICBnbF9sdGxpYm9ianM9CisgICAgaWYgdGVzdCAtbiAiJGdsX0xJQk9CSlMiOyB0aGVuCisgICAgICAjIFJlbW92ZSB0aGUgZXh0ZW5zaW9uLgorICAgICAgc2VkX2Ryb3Bfb2JqZXh0PSdzL1wubyQvLztzL1wub2JqJC8vJworICAgICAgZm9yIGkgaW4gYGZvciBpIGluICRnbF9MSUJPQkpTOyBkbyBlY2hvICIkaSI7IGRvbmUgfCBzZWQgIiRzZWRfZHJvcF9vYmpleHQiIHwgc29ydCB8IHVuaXFgOyBkbworICAgICAgICBnbF9saWJvYmpzPSIkZ2xfbGlib2JqcyAkaS4kYWNfb2JqZXh0IgorICAgICAgICBnbF9sdGxpYm9ianM9IiRnbF9sdGxpYm9ianMgJGkubG8iCisgICAgICBkb25lCisgICAgZmkKKyAgICBnbF9MSUJPQkpTPSRnbF9saWJvYmpzCisKKyAgICBnbF9MVExJQk9CSlM9JGdsX2x0bGlib2JqcworCisKK2lmIHRlc3QgLXogIiR7YW1fX2Zhc3RkZXBDWFhfVFJVRX0iICYmIHRlc3QgLXogIiR7YW1fX2Zhc3RkZXBDWFhfRkFMU0V9IjsgdGhlbgorICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb25kaXRpb25hbCBcImFtX19mYXN0ZGVwQ1hYXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY29uZGl0aW9uYWwgXCJhbV9fZmFzdGRlcENYWFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitmaQoraWYgdGVzdCAteiAiJHtDT01QSUxFX0ZPUl9TMzkwX1RSVUV9IiAmJiB0ZXN0IC16ICIke0NPTVBJTEVfRk9SX1MzOTBfRkFMU0V9IjsgdGhlbgorICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb25kaXRpb25hbCBcIkNPTVBJTEVfRk9SX1MzOTBcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjb25kaXRpb25hbCBcIkNPTVBJTEVfRk9SX1MzOTBcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorZmkKK2lmIHRlc3QgLXogIiR7SEFWRV9DSEVDS19UUlVFfSIgJiYgdGVzdCAteiAiJHtIQVZFX0NIRUNLX0ZBTFNFfSI7IHRoZW4KKyAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZGl0aW9uYWwgXCJIQVZFX0NIRUNLXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY29uZGl0aW9uYWwgXCJIQVZFX0NIRUNLXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2ZpCisKKzogJHtDT05GSUdfU1RBVFVTPS4vY29uZmlnLnN0YXR1c30KK2FjX2NsZWFuX2ZpbGVzX3NhdmU9JGFjX2NsZWFuX2ZpbGVzCithY19jbGVhbl9maWxlcz0iJGFjX2NsZWFuX2ZpbGVzICRDT05GSUdfU1RBVFVTIgoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY3JlYXRpbmcgJENPTkZJR19TVEFUVVMiID4mNQorZWNobyAiJGFzX21lOiBjcmVhdGluZyAkQ09ORklHX1NUQVRVUyIgPiY2O30KK2NhdCA+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YKKyMhICRTSEVMTAorIyBHZW5lcmF0ZWQgYnkgJGFzX21lLgorIyBSdW4gdGhpcyBmaWxlIHRvIHJlY3JlYXRlIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uCisjIENvbXBpbGVyIG91dHB1dCBwcm9kdWNlZCBieSBjb25maWd1cmUsIHVzZWZ1bCBmb3IgZGVidWdnaW5nCisjIGNvbmZpZ3VyZSwgaXMgaW4gY29uZmlnLmxvZyBpZiBpdCBleGlzdHMuCisKK2RlYnVnPWZhbHNlCithY19jc19yZWNoZWNrPWZhbHNlCithY19jc19zaWxlbnQ9ZmFsc2UKK1NIRUxMPVwke0NPTkZJR19TSEVMTC0kU0hFTEx9CitfQUNFT0YKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE00c2ggSW5pdGlhbGl6YXRpb24uICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgQmUgbW9yZSBCb3VybmUgY29tcGF0aWJsZQorRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAoraWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGVtdWxhdGUgc2gKKyAgTlVMTENNRD06CisgICMgWnNoIDMueCBhbmQgNC54IHBlcmZvcm1zIHdvcmQgc3BsaXR0aW5nIG9uICR7MSsiJEAifSwgd2hpY2gKKyAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KKyAgYWxpYXMgLWcgJyR7MSsiJEAifSc9JyIkQCInCisgIHNldG9wdCBOT19HTE9CX1NVQlNUCitlbHNlCisgIGNhc2UgYChzZXQgLW8pIDI+L2Rldi9udWxsYCBpbgorICAqcG9zaXgqKSBzZXQgLW8gcG9zaXggOzsKK2VzYWMKKworZmkKKworCisKKworIyBQQVRIIG5lZWRzIENSCisjIEF2b2lkIGRlcGVuZGluZyB1cG9uIENoYXJhY3RlciBSYW5nZXMuCithc19jcl9sZXR0ZXJzPSdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicKK2FzX2NyX0xFVFRFUlM9J0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJworYXNfY3JfTGV0dGVycz0kYXNfY3JfbGV0dGVycyRhc19jcl9MRVRURVJTCithc19jcl9kaWdpdHM9JzAxMjM0NTY3ODknCithc19jcl9hbG51bT0kYXNfY3JfTGV0dGVycyRhc19jcl9kaWdpdHMKKworIyBUaGUgdXNlciBpcyBhbHdheXMgcmlnaHQuCitpZiB0ZXN0ICIke1BBVEhfU0VQQVJBVE9SK3NldH0iICE9IHNldDsgdGhlbgorICBlY2hvICIjISAvYmluL3NoIiA+Y29uZiQkLnNoCisgIGVjaG8gICJleGl0IDAiICAgPj5jb25mJCQuc2gKKyAgY2htb2QgK3ggY29uZiQkLnNoCisgIGlmIChQQVRIPSIvbm9uZXhpc3RlbnQ7LiI7IGNvbmYkJC5zaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgUEFUSF9TRVBBUkFUT1I9JzsnCisgIGVsc2UKKyAgICBQQVRIX1NFUEFSQVRPUj06CisgIGZpCisgIHJtIC1mIGNvbmYkJC5zaAorZmkKKworIyBTdXBwb3J0IHVuc2V0IHdoZW4gcG9zc2libGUuCitpZiAoIChNQUlMPTYwOyB1bnNldCBNQUlMKSB8fCBleGl0KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYXNfdW5zZXQ9dW5zZXQKK2Vsc2UKKyAgYXNfdW5zZXQ9ZmFsc2UKK2ZpCisKKworIyBJRlMKKyMgV2UgbmVlZCBzcGFjZSwgdGFiIGFuZCBuZXcgbGluZSwgaW4gcHJlY2lzZWx5IHRoYXQgb3JkZXIuICBRdW90aW5nIGlzCisjIHRoZXJlIHRvIHByZXZlbnQgZWRpdG9ycyBmcm9tIGNvbXBsYWluaW5nIGFib3V0IHNwYWNlLXRhYi4KKyMgKElmIF9BU19QQVRIX1dBTEsgd2VyZSBjYWxsZWQgd2l0aCBJRlMgdW5zZXQsIGl0IHdvdWxkIGRpc2FibGUgd29yZAorIyBzcGxpdHRpbmcgYnkgc2V0dGluZyBJRlMgdG8gZW1wdHkgdmFsdWUuKQorYXNfbmw9JworJworSUZTPSIgIiIJJGFzX25sIgorCisjIEZpbmQgd2hvIHdlIGFyZS4gIExvb2sgaW4gdGhlIHBhdGggaWYgd2UgY29udGFpbiBubyBkaXJlY3Rvcnkgc2VwYXJhdG9yLgorY2FzZSAkMCBpbgorICAqW1xcL10qICkgYXNfbXlzZWxmPSQwIDs7CisgICopIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgdGVzdCAtciAiJGFzX2Rpci8kMCIgJiYgYXNfbXlzZWxmPSRhc19kaXIvJDAgJiYgYnJlYWsKK2RvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICAgICA7OworZXNhYworIyBXZSBkaWQgbm90IGZpbmQgb3Vyc2VsdmVzLCBtb3N0IHByb2JhYmx5IHdlIHdlcmUgcnVuIGFzIGBzaCBDT01NQU5EJworIyBpbiB3aGljaCBjYXNlIHdlIGFyZSBub3QgdG8gYmUgZm91bmQgaW4gdGhlIHBhdGguCitpZiB0ZXN0ICJ4JGFzX215c2VsZiIgPSB4OyB0aGVuCisgIGFzX215c2VsZj0kMAorZmkKK2lmIHRlc3QgISAtZiAiJGFzX215c2VsZiI7IHRoZW4KKyAgZWNobyAiJGFzX215c2VsZjogZXJyb3I6IGNhbm5vdCBmaW5kIG15c2VsZjsgcmVydW4gd2l0aCBhbiBhYnNvbHV0ZSBmaWxlIG5hbWUiID4mMgorICB7IChleGl0IDEpOyBleGl0IDE7IH0KK2ZpCisKKyMgV29yayBhcm91bmQgYnVncyBpbiBwcmUtMy4wIFVXSU4ga3NoLgorZm9yIGFzX3ZhciBpbiBFTlYgTUFJTCBNQUlMUEFUSAorZG8gKCRhc191bnNldCAkYXNfdmFyKSA+L2Rldi9udWxsIDI+JjEgJiYgJGFzX3Vuc2V0ICRhc192YXIKK2RvbmUKK1BTMT0nJCAnCitQUzI9Jz4gJworUFM0PScrICcKKworIyBOTFMgbnVpc2FuY2VzLgorZm9yIGFzX3ZhciBpbiBcCisgIExBTkcgTEFOR1VBR0UgTENfQUREUkVTUyBMQ19BTEwgTENfQ09MTEFURSBMQ19DVFlQRSBMQ19JREVOVElGSUNBVElPTiBcCisgIExDX01FQVNVUkVNRU5UIExDX01FU1NBR0VTIExDX01PTkVUQVJZIExDX05BTUUgTENfTlVNRVJJQyBMQ19QQVBFUiBcCisgIExDX1RFTEVQSE9ORSBMQ19USU1FCitkbworICBpZiAoc2V0ICt4OyB0ZXN0IC16ICJgKGV2YWwgJGFzX3Zhcj1DOyBleHBvcnQgJGFzX3ZhcikgMj4mMWAiKTsgdGhlbgorICAgIGV2YWwgJGFzX3Zhcj1DOyBleHBvcnQgJGFzX3ZhcgorICBlbHNlCisgICAgKCRhc191bnNldCAkYXNfdmFyKSA+L2Rldi9udWxsIDI+JjEgJiYgJGFzX3Vuc2V0ICRhc192YXIKKyAgZmkKK2RvbmUKKworIyBSZXF1aXJlZCB0byB1c2UgYmFzZW5hbWUuCitpZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMSAmJgorICAgdGVzdCAiWGBleHByIDAwMDAxIDogJy4qXCguLi5cKSdgIiA9IFgwMDE7IHRoZW4KKyAgYXNfZXhwcj1leHByCitlbHNlCisgIGFzX2V4cHI9ZmFsc2UKK2ZpCisKK2lmIChiYXNlbmFtZSAtLSAvKSA+L2Rldi9udWxsIDI+JjEgJiYgdGVzdCAiWGBiYXNlbmFtZSAtLSAvIDI+JjFgIiA9ICJYLyI7IHRoZW4KKyAgYXNfYmFzZW5hbWU9YmFzZW5hbWUKK2Vsc2UKKyAgYXNfYmFzZW5hbWU9ZmFsc2UKK2ZpCisKKworIyBOYW1lIG9mIHRoZSBleGVjdXRhYmxlLgorYXNfbWU9YCRhc19iYXNlbmFtZSAtLSAiJDAiIHx8CiskYXNfZXhwciBYLyIkMCIgOiAnLiovXChbXi9dW14vXSpcKS8qJCcgXHwgXAorCSBYIiQwIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiQwIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKK2VjaG8gWC8iJDAiIHwKKyAgICBzZWQgJy9eLipcL1woW14vXVteL10qXClcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwvXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwvXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgCisKKyMgQ0RQQVRILgorJGFzX3Vuc2V0IENEUEFUSAorCisKKworICBhc19saW5lbm9fMT0kTElORU5PCisgIGFzX2xpbmVub18yPSRMSU5FTk8KKyAgdGVzdCAieCRhc19saW5lbm9fMSIgIT0gIngkYXNfbGluZW5vXzIiICYmCisgIHRlc3QgInhgZXhwciAkYXNfbGluZW5vXzEgKyAxYCIgPSAieCRhc19saW5lbm9fMiIgfHwgeworCisgICMgQ3JlYXRlICRhc19tZS5saW5lbm8gYXMgYSBjb3B5IG9mICRhc19teXNlbGYsIGJ1dCB3aXRoICRMSU5FTk8KKyAgIyB1bmlmb3JtbHkgcmVwbGFjZWQgYnkgdGhlIGxpbmUgbnVtYmVyLiAgVGhlIGZpcnN0ICdzZWQnIGluc2VydHMgYQorICAjIGxpbmUtbnVtYmVyIGxpbmUgYWZ0ZXIgZWFjaCBsaW5lIHVzaW5nICRMSU5FTk87IHRoZSBzZWNvbmQgJ3NlZCcKKyAgIyBkb2VzIHRoZSByZWFsIHdvcmsuICBUaGUgc2Vjb25kIHNjcmlwdCB1c2VzICdOJyB0byBwYWlyIGVhY2gKKyAgIyBsaW5lLW51bWJlciBsaW5lIHdpdGggdGhlIGxpbmUgY29udGFpbmluZyAkTElORU5PLCBhbmQgYXBwZW5kcworICAjIHRyYWlsaW5nICctJyBkdXJpbmcgc3Vic3RpdHV0aW9uIHNvIHRoYXQgJExJTkVOTyBpcyBub3QgYSBzcGVjaWFsCisgICMgY2FzZSBhdCBsaW5lIGVuZC4KKyAgIyAoUmFqYSBSIEhhcmluYXRoIHN1Z2dlc3RlZCBzZWQgJz0nLCBhbmQgUGF1bCBFZ2dlcnQgd3JvdGUgdGhlCisgICMgc2NyaXB0cyB3aXRoIG9wdGltaXphdGlvbiBoZWxwIGZyb20gUGFvbG8gQm9uemluaS4gIEJsYW1lIExlZQorICAjIEUuIE1jTWFob24gKDE5MzEtMTk4OSkgZm9yIHNlZCdzIHN5bnRheC4gIDotKQorICBzZWQgLW4gJworICAgIHAKKyAgICAvWyRdTElORU5PLz0KKyAgJyA8JGFzX215c2VsZiB8CisgICAgc2VkICcKKyAgICAgIHMvWyRdTElORU5PLiovJi0vCisgICAgICB0IGxpbmVubworICAgICAgYgorICAgICAgOmxpbmVubworICAgICAgTgorICAgICAgOmxvb3AKKyAgICAgIHMvWyRdTElORU5PXChbXickYXNfY3JfYWxudW0nX10uKlxuXClcKC4qXCkvXDJcMVwyLworICAgICAgdCBsb29wCisgICAgICBzLy1cbi4qLy8KKyAgICAnID4kYXNfbWUubGluZW5vICYmCisgIGNobW9kICt4ICIkYXNfbWUubGluZW5vIiB8fAorICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSAkYXNfbWUubGluZW5vOyByZXJ1biB3aXRoIGEgUE9TSVggc2hlbGwiID4mMgorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisKKyAgIyBEb24ndCB0cnkgdG8gZXhlYyBhcyBpdCBjaGFuZ2VzICRbMF0sIGNhdXNpbmcgYWxsIHNvcnQgb2YgcHJvYmxlbXMKKyAgIyAodGhlIGRpcm5hbWUgb2YgJFswXSBpcyBub3QgdGhlIHBsYWNlIHdoZXJlIHdlIG1pZ2h0IGZpbmQgdGhlCisgICMgb3JpZ2luYWwgYW5kIHNvIG9uLiAgQXV0b2NvbmYgaXMgZXNwZWNpYWxseSBzZW5zaXRpdmUgdG8gdGhpcykuCisgIC4gIi4vJGFzX21lLmxpbmVubyIKKyAgIyBFeGl0IHN0YXR1cyBpcyB0aGF0IG9mIHRoZSBsYXN0IGNvbW1hbmQuCisgIGV4aXQKK30KKworCitpZiAoYXNfZGlyPWBkaXJuYW1lIC0tIC9gICYmIHRlc3QgIlgkYXNfZGlyIiA9IFgvKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYXNfZGlybmFtZT1kaXJuYW1lCitlbHNlCisgIGFzX2Rpcm5hbWU9ZmFsc2UKK2ZpCisKK0VDSE9fQz0gRUNIT19OPSBFQ0hPX1Q9CitjYXNlIGBlY2hvIC1uIHhgIGluCistbiopCisgIGNhc2UgYGVjaG8gJ3hcYydgIGluCisgICpjKikgRUNIT19UPScJJzs7CSMgRUNIT19UIGlzIHNpbmdsZSB0YWIgY2hhcmFjdGVyLgorICAqKSAgIEVDSE9fQz0nXGMnOzsKKyAgZXNhYzs7CisqKQorICBFQ0hPX049Jy1uJzs7Citlc2FjCisKK2lmIGV4cHIgYSA6ICdcKGFcKScgPi9kZXYvbnVsbCAyPiYxICYmCisgICB0ZXN0ICJYYGV4cHIgMDAwMDEgOiAnLipcKC4uLlwpJ2AiID0gWDAwMTsgdGhlbgorICBhc19leHByPWV4cHIKK2Vsc2UKKyAgYXNfZXhwcj1mYWxzZQorZmkKKworcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmZpbGUKK2lmIHRlc3QgLWQgY29uZiQkLmRpcjsgdGhlbgorICBybSAtZiBjb25mJCQuZGlyL2NvbmYkJC5maWxlCitlbHNlCisgIHJtIC1mIGNvbmYkJC5kaXIKKyAgbWtkaXIgY29uZiQkLmRpcgorZmkKK2VjaG8gPmNvbmYkJC5maWxlCitpZiBsbiAtcyBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KKyAgYXNfbG5fcz0nbG4gLXMnCisgICMgLi4uIGJ1dCB0aGVyZSBhcmUgdHdvIGdvdGNoYXM6CisgICMgMSkgT24gTVNZUywgYm90aCBgbG4gLXMgZmlsZSBkaXInIGFuZCBgbG4gZmlsZSBkaXInIGZhaWwuCisgICMgMikgREpHUFAgPCAyLjA0IGhhcyBubyBzeW1saW5rczsgYGxuIC1zJyBjcmVhdGVzIGEgd3JhcHBlciBleGVjdXRhYmxlLgorICAjIEluIGJvdGggY2FzZXMsIHdlIGhhdmUgdG8gZGVmYXVsdCB0byBgY3AgLXAnLgorICBsbiAtcyBjb25mJCQuZmlsZSBjb25mJCQuZGlyIDI+L2Rldi9udWxsICYmIHRlc3QgISAtZiBjb25mJCQuZXhlIHx8CisgICAgYXNfbG5fcz0nY3AgLXAnCitlbGlmIGxuIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgorICBhc19sbl9zPWxuCitlbHNlCisgIGFzX2xuX3M9J2NwIC1wJworZmkKK3JtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5kaXIvY29uZiQkLmZpbGUgY29uZiQkLmZpbGUKK3JtZGlyIGNvbmYkJC5kaXIgMj4vZGV2L251bGwKKworaWYgbWtkaXIgLXAgLiAyPi9kZXYvbnVsbDsgdGhlbgorICBhc19ta2Rpcl9wPToKK2Vsc2UKKyAgdGVzdCAtZCAuLy1wICYmIHJtZGlyIC4vLXAKKyAgYXNfbWtkaXJfcD1mYWxzZQorZmkKKworaWYgdGVzdCAteCAvID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhc190ZXN0X3g9J3Rlc3QgLXgnCitlbHNlCisgIGlmIGxzIC1kTCAvID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgIGFzX2xzX0xfb3B0aW9uPUwKKyAgZWxzZQorICAgIGFzX2xzX0xfb3B0aW9uPQorICBmaQorICBhc190ZXN0X3g9JworICAgIGV2YWwgc2ggLWMgJ1wnJworICAgICAgaWYgdGVzdCAtZCAiJDEiOyB0aGVuCisgICAgICAgIHRlc3QgLWQgIiQxLy4iOworICAgICAgZWxzZQorCWNhc2UgJDEgaW4KKyAgICAgICAgLSopc2V0ICIuLyQxIjs7CisJZXNhYzsKKwljYXNlIGBscyAtbGQnJGFzX2xzX0xfb3B0aW9uJyAiJDEiIDI+L2Rldi9udWxsYCBpbgorCT8/P1tzeF0qKTo7OyopZmFsc2U7O2VzYWM7ZmkKKyAgICAnXCcnIHNoCisgICcKK2ZpCithc19leGVjdXRhYmxlX3A9JGFzX3Rlc3RfeAorCisjIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgQ1BQIG5hbWUuCithc190cl9jcHA9ImV2YWwgc2VkICd5JSokYXNfY3JfbGV0dGVycyVQJGFzX2NyX0xFVFRFUlMlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgorCisjIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgdmFyaWFibGUgbmFtZS4KK2FzX3RyX3NoPSJldmFsIHNlZCAneSUqKyVwcCU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCisKKworZXhlYyA2PiYxCisKKyMgU2F2ZSB0aGUgbG9nIG1lc3NhZ2UsIHRvIGtlZXAgJFswXSBhbmQgc28gb24gbWVhbmluZ2Z1bCwgYW5kIHRvCisjIHJlcG9ydCBhY3R1YWwgaW5wdXQgdmFsdWVzIG9mIENPTkZJR19GSUxFUyBldGMuIGluc3RlYWQgb2YgdGhlaXIKKyMgdmFsdWVzIGFmdGVyIG9wdGlvbnMgaGFuZGxpbmcuCithY19sb2c9IgorVGhpcyBmaWxlIHdhcyBleHRlbmRlZCBieSBHTlUgcGFydGVkICRhc19tZSAxLjguNywgd2hpY2ggd2FzCitnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjEuICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKKworICBDT05GSUdfRklMRVMgICAgPSAkQ09ORklHX0ZJTEVTCisgIENPTkZJR19IRUFERVJTICA9ICRDT05GSUdfSEVBREVSUworICBDT05GSUdfTElOS1MgICAgPSAkQ09ORklHX0xJTktTCisgIENPTkZJR19DT01NQU5EUyA9ICRDT05GSUdfQ09NTUFORFMKKyAgJCAkMCAkQAorCitvbiBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWAKKyIKKworX0FDRU9GCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCisjIEZpbGVzIHRoYXQgY29uZmlnLnN0YXR1cyB3YXMgbWFkZSBmb3IuCitjb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMiCitjb25maWdfaGVhZGVycz0iJGFjX2NvbmZpZ19oZWFkZXJzIgorY29uZmlnX2NvbW1hbmRzPSIkYWNfY29uZmlnX2NvbW1hbmRzIgorCitfQUNFT0YKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCithY19jc191c2FnZT0iXAorXGAkYXNfbWUnIGluc3RhbnRpYXRlcyBmaWxlcyBmcm9tIHRlbXBsYXRlcyBhY2NvcmRpbmcgdG8gdGhlCitjdXJyZW50IGNvbmZpZ3VyYXRpb24uCisKK1VzYWdlOiAkMCBbT1BUSU9OU10gW0ZJTEVdLi4uCisKKyAgLWgsIC0taGVscCAgICAgICBwcmludCB0aGlzIGhlbHAsIHRoZW4gZXhpdAorICAtViwgLS12ZXJzaW9uICAgIHByaW50IHZlcnNpb24gbnVtYmVyIGFuZCBjb25maWd1cmF0aW9uIHNldHRpbmdzLCB0aGVuIGV4aXQKKyAgLXEsIC0tcXVpZXQgICAgICBkbyBub3QgcHJpbnQgcHJvZ3Jlc3MgbWVzc2FnZXMKKyAgLWQsIC0tZGVidWcgICAgICBkb24ndCByZW1vdmUgdGVtcG9yYXJ5IGZpbGVzCisgICAgICAtLXJlY2hlY2sgICAgdXBkYXRlICRhc19tZSBieSByZWNvbmZpZ3VyaW5nIGluIHRoZSBzYW1lIGNvbmRpdGlvbnMKKyAgLS1maWxlPUZJTEVbOlRFTVBMQVRFXQorCQkgICBpbnN0YW50aWF0ZSB0aGUgY29uZmlndXJhdGlvbiBmaWxlIEZJTEUKKyAgLS1oZWFkZXI9RklMRVs6VEVNUExBVEVdCisJCSAgIGluc3RhbnRpYXRlIHRoZSBjb25maWd1cmF0aW9uIGhlYWRlciBGSUxFCisKK0NvbmZpZ3VyYXRpb24gZmlsZXM6CiskY29uZmlnX2ZpbGVzCisKK0NvbmZpZ3VyYXRpb24gaGVhZGVyczoKKyRjb25maWdfaGVhZGVycworCitDb25maWd1cmF0aW9uIGNvbW1hbmRzOgorJGNvbmZpZ19jb21tYW5kcworCitSZXBvcnQgYnVncyB0byA8YnVnLWF1dG9jb25mQGdudS5vcmc+LiIKKworX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgorYWNfY3NfdmVyc2lvbj0iXFwKK0dOVSBwYXJ0ZWQgY29uZmlnLnN0YXR1cyAxLjguNworY29uZmlndXJlZCBieSAkMCwgZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjYxLAorICB3aXRoIG9wdGlvbnMgXFwiYGVjaG8gIiRhY19jb25maWd1cmVfYXJncyIgfCBzZWQgJ3MvXiAvLzsgcy9bXFwiIlxgXCRdL1xcXFwmL2cnYFxcIgorCitDb3B5cmlnaHQgKEMpIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitUaGlzIGNvbmZpZy5zdGF0dXMgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2dpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4iCisKK2FjX3B3ZD0nJGFjX3B3ZCcKK3NyY2Rpcj0nJHNyY2RpcicKK0lOU1RBTEw9JyRJTlNUQUxMJworTUtESVJfUD0nJE1LRElSX1AnCitfQUNFT0YKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCisjIElmIG5vIGZpbGUgYXJlIHNwZWNpZmllZCBieSB0aGUgdXNlciwgdGhlbiB3ZSBuZWVkIHRvIHByb3ZpZGUgZGVmYXVsdAorIyB2YWx1ZS4gIEJ5IHdlIG5lZWQgdG8ga25vdyBpZiBmaWxlcyB3ZXJlIHNwZWNpZmllZCBieSB0aGUgdXNlci4KK2FjX25lZWRfZGVmYXVsdHM9Ogord2hpbGUgdGVzdCAkIyAhPSAwCitkbworICBjYXNlICQxIGluCisgIC0tKj0qKQorICAgIGFjX29wdGlvbj1gZXhwciAiWCQxIiA6ICdYXChbXj1dKlwpPSdgCisgICAgYWNfb3B0YXJnPWBleHByICJYJDEiIDogJ1hbXj1dKj1cKC4qXCknYAorICAgIGFjX3NoaWZ0PToKKyAgICA7OworICAqKQorICAgIGFjX29wdGlvbj0kMQorICAgIGFjX29wdGFyZz0kMgorICAgIGFjX3NoaWZ0PXNoaWZ0CisgICAgOzsKKyAgZXNhYworCisgIGNhc2UgJGFjX29wdGlvbiBpbgorICAjIEhhbmRsaW5nIG9mIHRoZSBvcHRpb25zLgorICAtcmVjaGVjayB8IC0tcmVjaGVjayB8IC0tcmVjaGVjIHwgLS1yZWNoZSB8IC0tcmVjaCB8IC0tcmVjIHwgLS1yZSB8IC0tcikKKyAgICBhY19jc19yZWNoZWNrPTogOzsKKyAgLS12ZXJzaW9uIHwgLS12ZXJzaW8gfCAtLXZlcnNpIHwgLS12ZXJzIHwgLS12ZXIgfCAtLXZlIHwgLS12IHwgLVYgKQorICAgIGVjaG8gIiRhY19jc192ZXJzaW9uIjsgZXhpdCA7OworICAtLWRlYnVnIHwgLS1kZWJ1IHwgLS1kZWIgfCAtLWRlIHwgLS1kIHwgLWQgKQorICAgIGRlYnVnPTogOzsKKyAgLS1maWxlIHwgLS1maWwgfCAtLWZpIHwgLS1mICkKKyAgICAkYWNfc2hpZnQKKyAgICBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgJGFjX29wdGFyZyIKKyAgICBhY19uZWVkX2RlZmF1bHRzPWZhbHNlOzsKKyAgLS1oZWFkZXIgfCAtLWhlYWRlIHwgLS1oZWFkIHwgLS1oZWEgKQorICAgICRhY19zaGlmdAorICAgIENPTkZJR19IRUFERVJTPSIkQ09ORklHX0hFQURFUlMgJGFjX29wdGFyZyIKKyAgICBhY19uZWVkX2RlZmF1bHRzPWZhbHNlOzsKKyAgLS1oZSB8IC0taCkKKyAgICAjIENvbmZsaWN0IGJldHdlZW4gLS1oZWxwIGFuZCAtLWhlYWRlcgorICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogYW1iaWd1b3VzIG9wdGlvbjogJDEKK1RyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiA+JjIKKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTs7CisgIC0taGVscCB8IC0taGVsIHwgLWggKQorICAgIGVjaG8gIiRhY19jc191c2FnZSI7IGV4aXQgOzsKKyAgLXEgfCAtcXVpZXQgfCAtLXF1aWV0IHwgLS1xdWllIHwgLS1xdWkgfCAtLXF1IHwgLS1xIFwKKyAgfCAtc2lsZW50IHwgLS1zaWxlbnQgfCAtLXNpbGVuIHwgLS1zaWxlIHwgLS1zaWwgfCAtLXNpIHwgLS1zKQorICAgIGFjX2NzX3NpbGVudD06IDs7CisKKyAgIyBUaGlzIGlzIGFuIGVycm9yLgorICAtKikgeyBlY2hvICIkYXNfbWU6IGVycm9yOiB1bnJlY29nbml6ZWQgb3B0aW9uOiAkMQorVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iID4mMgorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7CisKKyAgKikgYWNfY29uZmlnX3RhcmdldHM9IiRhY19jb25maWdfdGFyZ2V0cyAkMSIKKyAgICAgYWNfbmVlZF9kZWZhdWx0cz1mYWxzZSA7OworCisgIGVzYWMKKyAgc2hpZnQKK2RvbmUKKworYWNfY29uZmlndXJlX2V4dHJhX2FyZ3M9CisKK2lmICRhY19jc19zaWxlbnQ7IHRoZW4KKyAgZXhlYyA2Pi9kZXYvbnVsbAorICBhY19jb25maWd1cmVfZXh0cmFfYXJncz0iJGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzIC0tc2lsZW50IgorZmkKKworX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgoraWYgXCRhY19jc19yZWNoZWNrOyB0aGVuCisgIGVjaG8gInJ1bm5pbmcgQ09ORklHX1NIRUxMPSRTSEVMTCAkU0hFTEwgJDAgIiRhY19jb25maWd1cmVfYXJncyBcJGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzICIgLS1uby1jcmVhdGUgLS1uby1yZWN1cnNpb24iID4mNgorICBDT05GSUdfU0hFTEw9JFNIRUxMCisgIGV4cG9ydCBDT05GSUdfU0hFTEwKKyAgZXhlYyAkU0hFTEwgIiQwIiRhY19jb25maWd1cmVfYXJncyBcJGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzIC0tbm8tY3JlYXRlIC0tbm8tcmVjdXJzaW9uCitmaQorCitfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgorZXhlYyA1Pj5jb25maWcubG9nCit7CisgIGVjaG8KKyAgc2VkICdoO3MvLi8tL2c7cy9eLi4uLyMjIC87cy8uLi4kLyAjIy87cDt4O3A7eCcgPDxfQVNCT1gKKyMjIFJ1bm5pbmcgJGFzX21lLiAjIworX0FTQk9YCisgIGVjaG8gIiRhY19sb2ciCit9ID4mNQorCitfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCisjCisjIElOSVQtQ09NTUFORFMKKyMKK0FNREVQX1RSVUU9IiRBTURFUF9UUlVFIiBhY19hdXhfZGlyPSIkYWNfYXV4X2RpciIKKyMgQ2FwdHVyZSB0aGUgdmFsdWUgb2Ygb2Jzb2xldGUgQUxMX0xJTkdVQVMgYmVjYXVzZSB3ZSBuZWVkIGl0IHRvIGNvbXB1dGUKKyAgICAjIFBPRklMRVMsIFVQREFURVBPRklMRVMsIERVTU1ZUE9GSUxFUywgR01PRklMRVMsIENBVEFMT0dTLiBCdXQgaGlkZSBpdAorICAgICMgZnJvbSBhdXRvbWFrZSA8IDEuNS4KKyAgICBldmFsICdPQlNPTEVURV9BTExfTElOR1VBUycnPSIkQUxMX0xJTkdVQVMiJworICAgICMgQ2FwdHVyZSB0aGUgdmFsdWUgb2YgTElOR1VBUyBiZWNhdXNlIHdlIG5lZWQgaXQgdG8gY29tcHV0ZSBDQVRBTE9HUy4KKyAgICBMSU5HVUFTPSIke0xJTkdVQVMtJVVOU0VUJX0iCisKKworX0FDRU9GCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgorCisjIEhhbmRsaW5nIG9mIGFyZ3VtZW50cy4KK2ZvciBhY19jb25maWdfdGFyZ2V0IGluICRhY19jb25maWdfdGFyZ2V0cworZG8KKyAgY2FzZSAkYWNfY29uZmlnX3RhcmdldCBpbgorICAgICJsaWIvY29uZmlnLmgiKSBDT05GSUdfSEVBREVSUz0iJENPTkZJR19IRUFERVJTIGxpYi9jb25maWcuaDpsaWIvY29uZmlnLmguaW4iIDs7CisgICAgImRlcGZpbGVzIikgQ09ORklHX0NPTU1BTkRTPSIkQ09ORklHX0NPTU1BTkRTIGRlcGZpbGVzIiA7OworICAgICJwby1kaXJlY3RvcmllcyIpIENPTkZJR19DT01NQU5EUz0iJENPTkZJR19DT01NQU5EUyBwby1kaXJlY3RvcmllcyIgOzsKKyAgICAiTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgTWFrZWZpbGUiIDs7CisgICAgImxpYi9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBsaWIvTWFrZWZpbGUiIDs7CisgICAgImluY2x1ZGUvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgaW5jbHVkZS9NYWtlZmlsZSIgOzsKKyAgICAiaW5jbHVkZS9wYXJ0ZWQvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgaW5jbHVkZS9wYXJ0ZWQvTWFrZWZpbGUiIDs7CisgICAgImxpYnBhcnRlZC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBsaWJwYXJ0ZWQvTWFrZWZpbGUiIDs7CisgICAgImxpYnBhcnRlZC9sYWJlbHMvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgbGlicGFydGVkL2xhYmVscy9NYWtlZmlsZSIgOzsKKyAgICAibGlicGFydGVkL2ZzL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGxpYnBhcnRlZC9mcy9NYWtlZmlsZSIgOzsKKyAgICAibGlicGFydGVkL2ZzL2FtaWdhL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGxpYnBhcnRlZC9mcy9hbWlnYS9NYWtlZmlsZSIgOzsKKyAgICAibGlicGFydGVkL2ZzL2V4dDIvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgbGlicGFydGVkL2ZzL2V4dDIvTWFrZWZpbGUiIDs7CisgICAgImxpYnBhcnRlZC9mcy9mYXQvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgbGlicGFydGVkL2ZzL2ZhdC9NYWtlZmlsZSIgOzsKKyAgICAibGlicGFydGVkL2ZzL2hmcy9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBsaWJwYXJ0ZWQvZnMvaGZzL01ha2VmaWxlIiA7OworICAgICJsaWJwYXJ0ZWQvZnMvamZzL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGxpYnBhcnRlZC9mcy9qZnMvTWFrZWZpbGUiIDs7CisgICAgImxpYnBhcnRlZC9mcy9saW51eF9zd2FwL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGxpYnBhcnRlZC9mcy9saW51eF9zd2FwL01ha2VmaWxlIiA7OworICAgICJsaWJwYXJ0ZWQvZnMvbnRmcy9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBsaWJwYXJ0ZWQvZnMvbnRmcy9NYWtlZmlsZSIgOzsKKyAgICAibGlicGFydGVkL2ZzL3JlaXNlcmZzL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9NYWtlZmlsZSIgOzsKKyAgICAibGlicGFydGVkL2ZzL3Vmcy9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBsaWJwYXJ0ZWQvZnMvdWZzL01ha2VmaWxlIiA7OworICAgICJsaWJwYXJ0ZWQvZnMveGZzL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGxpYnBhcnRlZC9mcy94ZnMvTWFrZWZpbGUiIDs7CisgICAgImxpYnBhcnRlZC90ZXN0cy9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBsaWJwYXJ0ZWQvdGVzdHMvTWFrZWZpbGUiIDs7CisgICAgImxpYnBhcnRlZC5wYyIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBsaWJwYXJ0ZWQucGMiIDs7CisgICAgInBhcnRlZC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBwYXJ0ZWQvTWFrZWZpbGUiIDs7CisgICAgInBhcnRwcm9iZS9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBwYXJ0cHJvYmUvTWFrZWZpbGUiIDs7CisgICAgImRvYy9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBkb2MvTWFrZWZpbGUiIDs7CisgICAgImRvYy9DL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGRvYy9DL01ha2VmaWxlIiA7OworICAgICJkb2MvcHRfQlIvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZG9jL3B0X0JSL01ha2VmaWxlIiA7OworICAgICJkZWJ1Zy9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBkZWJ1Zy9NYWtlZmlsZSIgOzsKKyAgICAiZGVidWcvY2xlYXJmYXQvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZGVidWcvY2xlYXJmYXQvTWFrZWZpbGUiIDs7CisgICAgImRlYnVnL3Rlc3QvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZGVidWcvdGVzdC9NYWtlZmlsZSIgOzsKKyAgICAidGVzdHMvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdGVzdHMvTWFrZWZpbGUiIDs7CisgICAgInBvL01ha2VmaWxlLmluIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHBvL01ha2VmaWxlLmluIiA7OworCisgICopIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGludmFsaWQgYXJndW1lbnQ6ICRhY19jb25maWdfdGFyZ2V0IiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgYXJndW1lbnQ6ICRhY19jb25maWdfdGFyZ2V0IiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKKyAgZXNhYworZG9uZQorCisKKyMgSWYgdGhlIHVzZXIgZGlkIG5vdCB1c2UgdGhlIGFyZ3VtZW50cyB0byBzcGVjaWZ5IHRoZSBpdGVtcyB0byBpbnN0YW50aWF0ZSwKKyMgdGhlbiB0aGUgZW52dmFyIGludGVyZmFjZSBpcyB1c2VkLiAgU2V0IG9ubHkgdGhvc2UgdGhhdCBhcmUgbm90LgorIyBXZSB1c2UgdGhlIGxvbmcgZm9ybSBmb3IgdGhlIGRlZmF1bHQgYXNzaWdubWVudCBiZWNhdXNlIG9mIGFuIGV4dHJlbWVseQorIyBiaXphcnJlIGJ1ZyBvbiBTdW5PUyA0LjEuMy4KK2lmICRhY19uZWVkX2RlZmF1bHRzOyB0aGVuCisgIHRlc3QgIiR7Q09ORklHX0ZJTEVTK3NldH0iID0gc2V0IHx8IENPTkZJR19GSUxFUz0kY29uZmlnX2ZpbGVzCisgIHRlc3QgIiR7Q09ORklHX0hFQURFUlMrc2V0fSIgPSBzZXQgfHwgQ09ORklHX0hFQURFUlM9JGNvbmZpZ19oZWFkZXJzCisgIHRlc3QgIiR7Q09ORklHX0NPTU1BTkRTK3NldH0iID0gc2V0IHx8IENPTkZJR19DT01NQU5EUz0kY29uZmlnX2NvbW1hbmRzCitmaQorCisjIEhhdmUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGZvciBjb252ZW5pZW5jZS4gIE1ha2UgaXQgaW4gdGhlIGJ1aWxkIHRyZWUKKyMgc2ltcGx5IGJlY2F1c2UgdGhlcmUgaXMgbm8gcmVhc29uIGFnYWluc3QgaGF2aW5nIGl0IGhlcmUsIGFuZCBpbiBhZGRpdGlvbiwKKyMgY3JlYXRpbmcgYW5kIG1vdmluZyBmaWxlcyBmcm9tIC90bXAgY2FuIHNvbWV0aW1lcyBjYXVzZSBwcm9ibGVtcy4KKyMgSG9vayBmb3IgaXRzIHJlbW92YWwgdW5sZXNzIGRlYnVnZ2luZy4KKyMgTm90ZSB0aGF0IHRoZXJlIGlzIGEgc21hbGwgd2luZG93IGluIHdoaWNoIHRoZSBkaXJlY3Rvcnkgd2lsbCBub3QgYmUgY2xlYW5lZDoKKyMgYWZ0ZXIgaXRzIGNyZWF0aW9uIGJ1dCBiZWZvcmUgaXRzIG5hbWUgaGFzIGJlZW4gYXNzaWduZWQgdG8gYCR0bXAnLgorJGRlYnVnIHx8Cit7CisgIHRtcD0KKyAgdHJhcCAnZXhpdF9zdGF0dXM9JD8KKyAgeyB0ZXN0IC16ICIkdG1wIiB8fCB0ZXN0ICEgLWQgIiR0bXAiIHx8IHJtIC1mciAiJHRtcCI7IH0gJiYgZXhpdCAkZXhpdF9zdGF0dXMKKycgMAorICB0cmFwICd7IChleGl0IDEpOyBleGl0IDE7IH0nIDEgMiAxMyAxNQorfQorIyBDcmVhdGUgYSAoc2VjdXJlKSB0bXAgZGlyZWN0b3J5IGZvciB0bXAgZmlsZXMuCisKK3sKKyAgdG1wPWAodW1hc2sgMDc3ICYmIG1rdGVtcCAtZCAiLi9jb25mWFhYWFhYIikgMj4vZGV2L251bGxgICYmCisgIHRlc3QgLW4gIiR0bXAiICYmIHRlc3QgLWQgIiR0bXAiCit9ICB8fAoreworICB0bXA9Li9jb25mJCQtJFJBTkRPTQorICAodW1hc2sgMDc3ICYmIG1rZGlyICIkdG1wIikKK30gfHwKK3sKKyAgIGVjaG8gIiRtZTogY2Fubm90IGNyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgaW4gLiIgPiYyCisgICB7IChleGl0IDEpOyBleGl0IDE7IH0KK30KKworIworIyBTZXQgdXAgdGhlIHNlZCBzY3JpcHRzIGZvciBDT05GSUdfRklMRVMgc2VjdGlvbi4KKyMKKworIyBObyBuZWVkIHRvIGdlbmVyYXRlIHRoZSBzY3JpcHRzIGlmIHRoZXJlIGFyZSBubyBDT05GSUdfRklMRVMuCisjIFRoaXMgaGFwcGVucyBmb3IgaW5zdGFuY2Ugd2hlbiAuL2NvbmZpZy5zdGF0dXMgY29uZmlnLmgKK2lmIHRlc3QgLW4gIiRDT05GSUdfRklMRVMiOyB0aGVuCisKK19BQ0VPRgorCisKKworYWNfZGVsaW09JyUhXyEjICcKK2ZvciBhY19sYXN0X3RyeSBpbiBmYWxzZSBmYWxzZSBmYWxzZSBmYWxzZSBmYWxzZSA6OyBkbworICBjYXQgPmNvbmYkJHN1YnMuc2VkIDw8X0FDRU9GCitTSEVMTCEkU0hFTEwkYWNfZGVsaW0KK1BBVEhfU0VQQVJBVE9SISRQQVRIX1NFUEFSQVRPUiRhY19kZWxpbQorUEFDS0FHRV9OQU1FISRQQUNLQUdFX05BTUUkYWNfZGVsaW0KK1BBQ0tBR0VfVEFSTkFNRSEkUEFDS0FHRV9UQVJOQU1FJGFjX2RlbGltCitQQUNLQUdFX1ZFUlNJT04hJFBBQ0tBR0VfVkVSU0lPTiRhY19kZWxpbQorUEFDS0FHRV9TVFJJTkchJFBBQ0tBR0VfU1RSSU5HJGFjX2RlbGltCitQQUNLQUdFX0JVR1JFUE9SVCEkUEFDS0FHRV9CVUdSRVBPUlQkYWNfZGVsaW0KK2V4ZWNfcHJlZml4ISRleGVjX3ByZWZpeCRhY19kZWxpbQorcHJlZml4ISRwcmVmaXgkYWNfZGVsaW0KK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUhJHByb2dyYW1fdHJhbnNmb3JtX25hbWUkYWNfZGVsaW0KK2JpbmRpciEkYmluZGlyJGFjX2RlbGltCitzYmluZGlyISRzYmluZGlyJGFjX2RlbGltCitsaWJleGVjZGlyISRsaWJleGVjZGlyJGFjX2RlbGltCitkYXRhcm9vdGRpciEkZGF0YXJvb3RkaXIkYWNfZGVsaW0KK2RhdGFkaXIhJGRhdGFkaXIkYWNfZGVsaW0KK3N5c2NvbmZkaXIhJHN5c2NvbmZkaXIkYWNfZGVsaW0KK3NoYXJlZHN0YXRlZGlyISRzaGFyZWRzdGF0ZWRpciRhY19kZWxpbQorbG9jYWxzdGF0ZWRpciEkbG9jYWxzdGF0ZWRpciRhY19kZWxpbQoraW5jbHVkZWRpciEkaW5jbHVkZWRpciRhY19kZWxpbQorb2xkaW5jbHVkZWRpciEkb2xkaW5jbHVkZWRpciRhY19kZWxpbQorZG9jZGlyISRkb2NkaXIkYWNfZGVsaW0KK2luZm9kaXIhJGluZm9kaXIkYWNfZGVsaW0KK2h0bWxkaXIhJGh0bWxkaXIkYWNfZGVsaW0KK2R2aWRpciEkZHZpZGlyJGFjX2RlbGltCitwZGZkaXIhJHBkZmRpciRhY19kZWxpbQorcHNkaXIhJHBzZGlyJGFjX2RlbGltCitsaWJkaXIhJGxpYmRpciRhY19kZWxpbQorbG9jYWxlZGlyISRsb2NhbGVkaXIkYWNfZGVsaW0KK21hbmRpciEkbWFuZGlyJGFjX2RlbGltCitERUZTISRERUZTJGFjX2RlbGltCitFQ0hPX0MhJEVDSE9fQyRhY19kZWxpbQorRUNIT19OISRFQ0hPX04kYWNfZGVsaW0KK0VDSE9fVCEkRUNIT19UJGFjX2RlbGltCitMSUJTISRMSUJTJGFjX2RlbGltCitidWlsZF9hbGlhcyEkYnVpbGRfYWxpYXMkYWNfZGVsaW0KK2hvc3RfYWxpYXMhJGhvc3RfYWxpYXMkYWNfZGVsaW0KK3RhcmdldF9hbGlhcyEkdGFyZ2V0X2FsaWFzJGFjX2RlbGltCitMVF9SRUxFQVNFISRMVF9SRUxFQVNFJGFjX2RlbGltCitMVF9DVVJSRU5UISRMVF9DVVJSRU5UJGFjX2RlbGltCitMVF9SRVZJU0lPTiEkTFRfUkVWSVNJT04kYWNfZGVsaW0KK0xUX0FHRSEkTFRfQUdFJGFjX2RlbGltCitJTlNUQUxMX1BST0dSQU0hJElOU1RBTExfUFJPR1JBTSRhY19kZWxpbQorSU5TVEFMTF9TQ1JJUFQhJElOU1RBTExfU0NSSVBUJGFjX2RlbGltCitJTlNUQUxMX0RBVEEhJElOU1RBTExfREFUQSRhY19kZWxpbQorYW1fX2lzcmMhJGFtX19pc3JjJGFjX2RlbGltCitDWUdQQVRIX1chJENZR1BBVEhfVyRhY19kZWxpbQorUEFDS0FHRSEkUEFDS0FHRSRhY19kZWxpbQorVkVSU0lPTiEkVkVSU0lPTiRhY19kZWxpbQorQUNMT0NBTCEkQUNMT0NBTCRhY19kZWxpbQorQVVUT0NPTkYhJEFVVE9DT05GJGFjX2RlbGltCitBVVRPTUFLRSEkQVVUT01BS0UkYWNfZGVsaW0KK0FVVE9IRUFERVIhJEFVVE9IRUFERVIkYWNfZGVsaW0KK01BS0VJTkZPISRNQUtFSU5GTyRhY19kZWxpbQoraW5zdGFsbF9zaCEkaW5zdGFsbF9zaCRhY19kZWxpbQorU1RSSVAhJFNUUklQJGFjX2RlbGltCitJTlNUQUxMX1NUUklQX1BST0dSQU0hJElOU1RBTExfU1RSSVBfUFJPR1JBTSRhY19kZWxpbQorbWtkaXJfcCEkbWtkaXJfcCRhY19kZWxpbQorQVdLISRBV0skYWNfZGVsaW0KK1NFVF9NQUtFISRTRVRfTUFLRSRhY19kZWxpbQorYW1fX2xlYWRpbmdfZG90ISRhbV9fbGVhZGluZ19kb3QkYWNfZGVsaW0KK0FNVEFSISRBTVRBUiRhY19kZWxpbQorYW1fX3RhciEkYW1fX3RhciRhY19kZWxpbQorYW1fX3VudGFyISRhbV9fdW50YXIkYWNfZGVsaW0KK2J1aWxkISRidWlsZCRhY19kZWxpbQorYnVpbGRfY3B1ISRidWlsZF9jcHUkYWNfZGVsaW0KK2J1aWxkX3ZlbmRvciEkYnVpbGRfdmVuZG9yJGFjX2RlbGltCitidWlsZF9vcyEkYnVpbGRfb3MkYWNfZGVsaW0KK2hvc3QhJGhvc3QkYWNfZGVsaW0KK2hvc3RfY3B1ISRob3N0X2NwdSRhY19kZWxpbQoraG9zdF92ZW5kb3IhJGhvc3RfdmVuZG9yJGFjX2RlbGltCitob3N0X29zISRob3N0X29zJGFjX2RlbGltCitPUyEkT1MkYWNfZGVsaW0KK1BBUlRFRExERkxBR1MhJFBBUlRFRExERkxBR1MkYWNfZGVsaW0KK0NDISRDQyRhY19kZWxpbQorQ0ZMQUdTISRDRkxBR1MkYWNfZGVsaW0KK0xERkxBR1MhJExERkxBR1MkYWNfZGVsaW0KK0NQUEZMQUdTISRDUFBGTEFHUyRhY19kZWxpbQorYWNfY3RfQ0MhJGFjX2N0X0NDJGFjX2RlbGltCitFWEVFWFQhJEVYRUVYVCRhY19kZWxpbQorT0JKRVhUISRPQkpFWFQkYWNfZGVsaW0KK0RFUERJUiEkREVQRElSJGFjX2RlbGltCithbV9faW5jbHVkZSEkYW1fX2luY2x1ZGUkYWNfZGVsaW0KK2FtX19xdW90ZSEkYW1fX3F1b3RlJGFjX2RlbGltCitBTURFUF9UUlVFISRBTURFUF9UUlVFJGFjX2RlbGltCitBTURFUF9GQUxTRSEkQU1ERVBfRkFMU0UkYWNfZGVsaW0KK0FNREVQQkFDS1NMQVNIISRBTURFUEJBQ0tTTEFTSCRhY19kZWxpbQorQ0NERVBNT0RFISRDQ0RFUE1PREUkYWNfZGVsaW0KK2FtX19mYXN0ZGVwQ0NfVFJVRSEkYW1fX2Zhc3RkZXBDQ19UUlVFJGFjX2RlbGltCithbV9fZmFzdGRlcENDX0ZBTFNFISRhbV9fZmFzdGRlcENDX0ZBTFNFJGFjX2RlbGltCitDUFAhJENQUCRhY19kZWxpbQorR1JFUCEkR1JFUCRhY19kZWxpbQorRUdSRVAhJEVHUkVQJGFjX2RlbGltCitSQU5MSUIhJFJBTkxJQiRhY19kZWxpbQorR0xfQ09ORF9MSUJUT09MX1RSVUUhJEdMX0NPTkRfTElCVE9PTF9UUlVFJGFjX2RlbGltCitHTF9DT05EX0xJQlRPT0xfRkFMU0UhJEdMX0NPTkRfTElCVE9PTF9GQUxTRSRhY19kZWxpbQorTFRBTExPQ0EhJExUQUxMT0NBJGFjX2RlbGltCitBTExPQ0EhJEFMTE9DQSRhY19kZWxpbQorX0FDRU9GCisKKyAgaWYgdGVzdCBgc2VkIC1uICJzLy4qJGFjX2RlbGltXCQvWC9wIiBjb25mJCRzdWJzLnNlZCB8IGdyZXAgLWMgWGAgPSA5NzsgdGhlbgorICAgIGJyZWFrCisgIGVsaWYgJGFjX2xhc3RfdHJ5OyB0aGVuCisgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgZWxzZQorICAgIGFjX2RlbGltPSIkYWNfZGVsaW0hJGFjX2RlbGltIF8kYWNfZGVsaW0hISAiCisgIGZpCitkb25lCisKK2FjX2VvZj1gc2VkIC1uICcvXkNFT0ZbMC05XSokL3MvQ0VPRi8wL3AnIGNvbmYkJHN1YnMuc2VkYAoraWYgdGVzdCAtbiAiJGFjX2VvZiI7IHRoZW4KKyAgYWNfZW9mPWBlY2hvICIkYWNfZW9mIiB8IHNvcnQgLW5ydSB8IHNlZCAxcWAKKyAgYWNfZW9mPWBleHByICRhY19lb2YgKyAxYAorZmkKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YKK2NhdCA+IlwkdG1wL3N1YnMtMS5zZWQiIDw8XENFT0YkYWNfZW9mCisvQFthLXpBLVpfXVthLXpBLVpfMC05XSpALyFiCitfQUNFT0YKK3NlZCAnCitzL1ssXFwmXS9cXCYvZzsgcy9AL0B8I18hIV8jfC9nCitzL14vcyxALzsgcy8hL0AsfCNfISFfI3wvCis6bgordCBuCitzLyciJGFjX2RlbGltIickLyxnLzsgdAorcy8kL1xcLzsgcAorTjsgcy9eLipcbi8vOyBzL1ssXFwmXS9cXCYvZzsgcy9AL0B8I18hIV8jfC9nOyBiIG4KKycgPj4kQ09ORklHX1NUQVRVUyA8Y29uZiQkc3Vicy5zZWQKK3JtIC1mIGNvbmYkJHN1YnMuc2VkCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgorQ0VPRiRhY19lb2YKK19BQ0VPRgorCisKK2FjX2RlbGltPSclIV8hIyAnCitmb3IgYWNfbGFzdF90cnkgaW4gZmFsc2UgZmFsc2UgZmFsc2UgZmFsc2UgZmFsc2UgOjsgZG8KKyAgY2F0ID5jb25mJCRzdWJzLnNlZCA8PF9BQ0VPRgorQUxMT0NBX0ghJEFMTE9DQV9IJGFjX2RlbGltCitHRVRPUFRfSCEkR0VUT1BUX0gkYWNfZGVsaW0KK0xJQklOVEwhJExJQklOVEwkYWNfZGVsaW0KK0xUTElCSU5UTCEkTFRMSUJJTlRMJGFjX2RlbGltCitIQVZFX0xPTkdfTE9OR19JTlQhJEhBVkVfTE9OR19MT05HX0lOVCRhY19kZWxpbQorSEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UISRIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlQkYWNfZGVsaW0KK0hBVkVfSU5UVFlQRVNfSCEkSEFWRV9JTlRUWVBFU19IJGFjX2RlbGltCitIQVZFX1NZU19UWVBFU19IISRIQVZFX1NZU19UWVBFU19IJGFjX2RlbGltCitBQlNPTFVURV9TVERJTlRfSCEkQUJTT0xVVEVfU1RESU5UX0gkYWNfZGVsaW0KK0hBVkVfU1RESU5UX0ghJEhBVkVfU1RESU5UX0gkYWNfZGVsaW0KK0hBVkVfU1lTX0lOVFRZUEVTX0ghJEhBVkVfU1lTX0lOVFRZUEVTX0gkYWNfZGVsaW0KK0hBVkVfU1lTX0JJVFlQRVNfSCEkSEFWRV9TWVNfQklUWVBFU19IJGFjX2RlbGltCitCSVRTSVpFT0ZfUFRSRElGRl9UISRCSVRTSVpFT0ZfUFRSRElGRl9UJGFjX2RlbGltCitCSVRTSVpFT0ZfU0lHX0FUT01JQ19UISRCSVRTSVpFT0ZfU0lHX0FUT01JQ19UJGFjX2RlbGltCitCSVRTSVpFT0ZfU0laRV9UISRCSVRTSVpFT0ZfU0laRV9UJGFjX2RlbGltCitCSVRTSVpFT0ZfV0NIQVJfVCEkQklUU0laRU9GX1dDSEFSX1QkYWNfZGVsaW0KK0JJVFNJWkVPRl9XSU5UX1QhJEJJVFNJWkVPRl9XSU5UX1QkYWNfZGVsaW0KK0hBVkVfU0lHTkVEX1NJR19BVE9NSUNfVCEkSEFWRV9TSUdORURfU0lHX0FUT01JQ19UJGFjX2RlbGltCitIQVZFX1NJR05FRF9XQ0hBUl9UISRIQVZFX1NJR05FRF9XQ0hBUl9UJGFjX2RlbGltCitIQVZFX1NJR05FRF9XSU5UX1QhJEhBVkVfU0lHTkVEX1dJTlRfVCRhY19kZWxpbQorUFRSRElGRl9UX1NVRkZJWCEkUFRSRElGRl9UX1NVRkZJWCRhY19kZWxpbQorU0lHX0FUT01JQ19UX1NVRkZJWCEkU0lHX0FUT01JQ19UX1NVRkZJWCRhY19kZWxpbQorU0laRV9UX1NVRkZJWCEkU0laRV9UX1NVRkZJWCRhY19kZWxpbQorV0NIQVJfVF9TVUZGSVghJFdDSEFSX1RfU1VGRklYJGFjX2RlbGltCitXSU5UX1RfU1VGRklYISRXSU5UX1RfU1VGRklYJGFjX2RlbGltCitTVERJTlRfSCEkU1RESU5UX0gkYWNfZGVsaW0KK1BSSV9NQUNST1NfQlJPS0VOISRQUklfTUFDUk9TX0JST0tFTiRhY19kZWxpbQorR05VTElCX0lNQVhBQlMhJEdOVUxJQl9JTUFYQUJTJGFjX2RlbGltCitHTlVMSUJfSU1BWERJViEkR05VTElCX0lNQVhESVYkYWNfZGVsaW0KK0dOVUxJQl9TVFJUT0lNQVghJEdOVUxJQl9TVFJUT0lNQVgkYWNfZGVsaW0KK0dOVUxJQl9TVFJUT1VNQVghJEdOVUxJQl9TVFJUT1VNQVgkYWNfZGVsaW0KK0hBVkVfREVDTF9JTUFYQUJTISRIQVZFX0RFQ0xfSU1BWEFCUyRhY19kZWxpbQorSEFWRV9ERUNMX0lNQVhESVYhJEhBVkVfREVDTF9JTUFYRElWJGFjX2RlbGltCitIQVZFX0RFQ0xfU1RSVE9JTUFYISRIQVZFX0RFQ0xfU1RSVE9JTUFYJGFjX2RlbGltCitIQVZFX0RFQ0xfU1RSVE9VTUFYISRIQVZFX0RFQ0xfU1RSVE9VTUFYJGFjX2RlbGltCitBQlNPTFVURV9JTlRUWVBFU19IISRBQlNPTFVURV9JTlRUWVBFU19IJGFjX2RlbGltCitQUklQVFJfUFJFRklYISRQUklQVFJfUFJFRklYJGFjX2RlbGltCitJTlRUWVBFU19IISRJTlRUWVBFU19IJGFjX2RlbGltCitHTElCQzIxISRHTElCQzIxJGFjX2RlbGltCitTVERCT09MX0ghJFNUREJPT0xfSCRhY19kZWxpbQorSEFWRV9fQk9PTCEkSEFWRV9fQk9PTCRhY19kZWxpbQorR05VTElCX0dFVFNVQk9QVCEkR05VTElCX0dFVFNVQk9QVCRhY19kZWxpbQorR05VTElCX01LRFRFTVAhJEdOVUxJQl9NS0RURU1QJGFjX2RlbGltCitHTlVMSUJfTUtTVEVNUCEkR05VTElCX01LU1RFTVAkYWNfZGVsaW0KK0hBVkVfR0VUU1VCT1BUISRIQVZFX0dFVFNVQk9QVCRhY19kZWxpbQorSEFWRV9NS0RURU1QISRIQVZFX01LRFRFTVAkYWNfZGVsaW0KK1JFUExBQ0VfTUtTVEVNUCEkUkVQTEFDRV9NS1NURU1QJGFjX2RlbGltCitBQlNPTFVURV9TVERMSUJfSCEkQUJTT0xVVEVfU1RETElCX0gkYWNfZGVsaW0KK0dOVUxJQl9NRU1NRU0hJEdOVUxJQl9NRU1NRU0kYWNfZGVsaW0KK0dOVUxJQl9NRU1QQ1BZISRHTlVMSUJfTUVNUENQWSRhY19kZWxpbQorR05VTElCX01FTVJDSFIhJEdOVUxJQl9NRU1SQ0hSJGFjX2RlbGltCitHTlVMSUJfU1RQQ1BZISRHTlVMSUJfU1RQQ1BZJGFjX2RlbGltCitHTlVMSUJfU1RQTkNQWSEkR05VTElCX1NUUE5DUFkkYWNfZGVsaW0KK0dOVUxJQl9TVFJDSFJOVUwhJEdOVUxJQl9TVFJDSFJOVUwkYWNfZGVsaW0KK0dOVUxJQl9TVFJEVVAhJEdOVUxJQl9TVFJEVVAkYWNfZGVsaW0KK0dOVUxJQl9TVFJORFVQISRHTlVMSUJfU1RSTkRVUCRhY19kZWxpbQorR05VTElCX1NUUk5MRU4hJEdOVUxJQl9TVFJOTEVOJGFjX2RlbGltCitHTlVMSUJfU1RSUEJSSyEkR05VTElCX1NUUlBCUkskYWNfZGVsaW0KK0dOVUxJQl9TVFJTRVAhJEdOVUxJQl9TVFJTRVAkYWNfZGVsaW0KK0dOVUxJQl9TVFJDQVNFU1RSISRHTlVMSUJfU1RSQ0FTRVNUUiRhY19kZWxpbQorR05VTElCX1NUUlRPS19SISRHTlVMSUJfU1RSVE9LX1IkYWNfZGVsaW0KK0dOVUxJQl9NQlNMRU4hJEdOVUxJQl9NQlNMRU4kYWNfZGVsaW0KK0dOVUxJQl9NQlNDSFIhJEdOVUxJQl9NQlNDSFIkYWNfZGVsaW0KK0dOVUxJQl9NQlNSQ0hSISRHTlVMSUJfTUJTUkNIUiRhY19kZWxpbQorR05VTElCX01CU1NUUiEkR05VTElCX01CU1NUUiRhY19kZWxpbQorR05VTElCX01CU0NBU0VDTVAhJEdOVUxJQl9NQlNDQVNFQ01QJGFjX2RlbGltCitHTlVMSUJfTUJTTkNBU0VDTVAhJEdOVUxJQl9NQlNOQ0FTRUNNUCRhY19kZWxpbQorR05VTElCX01CU1BDQVNFQ01QISRHTlVMSUJfTUJTUENBU0VDTVAkYWNfZGVsaW0KK0dOVUxJQl9NQlNDQVNFU1RSISRHTlVMSUJfTUJTQ0FTRVNUUiRhY19kZWxpbQorR05VTElCX01CU0NTUE4hJEdOVUxJQl9NQlNDU1BOJGFjX2RlbGltCitHTlVMSUJfTUJTUEJSSyEkR05VTElCX01CU1BCUkskYWNfZGVsaW0KK0dOVUxJQl9NQlNTUE4hJEdOVUxJQl9NQlNTUE4kYWNfZGVsaW0KK0dOVUxJQl9NQlNTRVAhJEdOVUxJQl9NQlNTRVAkYWNfZGVsaW0KK0dOVUxJQl9NQlNUT0tfUiEkR05VTElCX01CU1RPS19SJGFjX2RlbGltCitIQVZFX0RFQ0xfTUVNTUVNISRIQVZFX0RFQ0xfTUVNTUVNJGFjX2RlbGltCitIQVZFX01FTVBDUFkhJEhBVkVfTUVNUENQWSRhY19kZWxpbQorSEFWRV9ERUNMX01FTVJDSFIhJEhBVkVfREVDTF9NRU1SQ0hSJGFjX2RlbGltCitIQVZFX1NUUENQWSEkSEFWRV9TVFBDUFkkYWNfZGVsaW0KK0hBVkVfU1RQTkNQWSEkSEFWRV9TVFBOQ1BZJGFjX2RlbGltCitIQVZFX1NUUkNBU0VDTVAhJEhBVkVfU1RSQ0FTRUNNUCRhY19kZWxpbQorSEFWRV9ERUNMX1NUUk5DQVNFQ01QISRIQVZFX0RFQ0xfU1RSTkNBU0VDTVAkYWNfZGVsaW0KK0hBVkVfU1RSQ0hSTlVMISRIQVZFX1NUUkNIUk5VTCRhY19kZWxpbQorSEFWRV9ERUNMX1NUUkRVUCEkSEFWRV9ERUNMX1NUUkRVUCRhY19kZWxpbQorSEFWRV9TVFJORFVQISRIQVZFX1NUUk5EVVAkYWNfZGVsaW0KK0hBVkVfREVDTF9TVFJORFVQISRIQVZFX0RFQ0xfU1RSTkRVUCRhY19kZWxpbQorSEFWRV9ERUNMX1NUUk5MRU4hJEhBVkVfREVDTF9TVFJOTEVOJGFjX2RlbGltCitIQVZFX1NUUlBCUkshJEhBVkVfU1RSUEJSSyRhY19kZWxpbQorSEFWRV9TVFJTRVAhJEhBVkVfU1RSU0VQJGFjX2RlbGltCitIQVZFX1NUUkNBU0VTVFIhJEhBVkVfU1RSQ0FTRVNUUiRhY19kZWxpbQorSEFWRV9ERUNMX1NUUlRPS19SISRIQVZFX0RFQ0xfU1RSVE9LX1IkYWNfZGVsaW0KK0FCU09MVVRFX1NUUklOR19IISRBQlNPTFVURV9TVFJJTkdfSCRhY19kZWxpbQorUE9XX0xJQiEkUE9XX0xJQiRhY19kZWxpbQorR05VTElCX0NIT1dOISRHTlVMSUJfQ0hPV04kYWNfZGVsaW0KK0dOVUxJQl9EVVAyISRHTlVMSUJfRFVQMiRhY19kZWxpbQorR05VTElCX0ZDSERJUiEkR05VTElCX0ZDSERJUiRhY19kZWxpbQorR05VTElCX0ZUUlVOQ0FURSEkR05VTElCX0ZUUlVOQ0FURSRhY19kZWxpbQorR05VTElCX0dFVENXRCEkR05VTElCX0dFVENXRCRhY19kZWxpbQorX0FDRU9GCisKKyAgaWYgdGVzdCBgc2VkIC1uICJzLy4qJGFjX2RlbGltXCQvWC9wIiBjb25mJCRzdWJzLnNlZCB8IGdyZXAgLWMgWGAgPSA5NzsgdGhlbgorICAgIGJyZWFrCisgIGVsaWYgJGFjX2xhc3RfdHJ5OyB0aGVuCisgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgZWxzZQorICAgIGFjX2RlbGltPSIkYWNfZGVsaW0hJGFjX2RlbGltIF8kYWNfZGVsaW0hISAiCisgIGZpCitkb25lCisKK2FjX2VvZj1gc2VkIC1uICcvXkNFT0ZbMC05XSokL3MvQ0VPRi8wL3AnIGNvbmYkJHN1YnMuc2VkYAoraWYgdGVzdCAtbiAiJGFjX2VvZiI7IHRoZW4KKyAgYWNfZW9mPWBlY2hvICIkYWNfZW9mIiB8IHNvcnQgLW5ydSB8IHNlZCAxcWAKKyAgYWNfZW9mPWBleHByICRhY19lb2YgKyAxYAorZmkKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YKK2NhdCA+IlwkdG1wL3N1YnMtMi5zZWQiIDw8XENFT0YkYWNfZW9mCisvQFthLXpBLVpfXVthLXpBLVpfMC05XSpALyFiCitfQUNFT0YKK3NlZCAnCitzL1ssXFwmXS9cXCYvZzsgcy9AL0B8I18hIV8jfC9nCitzL14vcyxALzsgcy8hL0AsfCNfISFfI3wvCis6bgordCBuCitzLyciJGFjX2RlbGltIickLyxnLzsgdAorcy8kL1xcLzsgcAorTjsgcy9eLipcbi8vOyBzL1ssXFwmXS9cXCYvZzsgcy9AL0B8I18hIV8jfC9nOyBiIG4KKycgPj4kQ09ORklHX1NUQVRVUyA8Y29uZiQkc3Vicy5zZWQKK3JtIC1mIGNvbmYkJHN1YnMuc2VkCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgorQ0VPRiRhY19lb2YKK19BQ0VPRgorCisKK2FjX2RlbGltPSclIV8hIyAnCitmb3IgYWNfbGFzdF90cnkgaW4gZmFsc2UgZmFsc2UgZmFsc2UgZmFsc2UgZmFsc2UgOjsgZG8KKyAgY2F0ID5jb25mJCRzdWJzLnNlZCA8PF9BQ0VPRgorR05VTElCX0dFVExPR0lOX1IhJEdOVUxJQl9HRVRMT0dJTl9SJGFjX2RlbGltCitHTlVMSUJfUkVBRExJTkshJEdOVUxJQl9SRUFETElOSyRhY19kZWxpbQorR05VTElCX1NMRUVQISRHTlVMSUJfU0xFRVAkYWNfZGVsaW0KK0hBVkVfRFVQMiEkSEFWRV9EVVAyJGFjX2RlbGltCitIQVZFX0ZUUlVOQ0FURSEkSEFWRV9GVFJVTkNBVEUkYWNfZGVsaW0KK0hBVkVfUkVBRExJTkshJEhBVkVfUkVBRExJTkskYWNfZGVsaW0KK0hBVkVfU0xFRVAhJEhBVkVfU0xFRVAkYWNfZGVsaW0KK0hBVkVfREVDTF9HRVRMT0dJTl9SISRIQVZFX0RFQ0xfR0VUTE9HSU5fUiRhY19kZWxpbQorUkVQTEFDRV9DSE9XTiEkUkVQTEFDRV9DSE9XTiRhY19kZWxpbQorUkVQTEFDRV9GQ0hESVIhJFJFUExBQ0VfRkNIRElSJGFjX2RlbGltCitSRVBMQUNFX0dFVENXRCEkUkVQTEFDRV9HRVRDV0QkYWNfZGVsaW0KK0hBVkVfVU5JU1REX0ghJEhBVkVfVU5JU1REX0gkYWNfZGVsaW0KK0FCU09MVVRFX1VOSVNURF9IISRBQlNPTFVURV9VTklTVERfSCRhY19kZWxpbQorQUJTT0xVVEVfV0NIQVJfSCEkQUJTT0xVVEVfV0NIQVJfSCRhY19kZWxpbQorV0NIQVJfSCEkV0NIQVJfSCRhY19kZWxpbQorSEFWRV9JU1dDTlRSTCEkSEFWRV9JU1dDTlRSTCRhY19kZWxpbQorSEFWRV9XSU5UX1QhJEhBVkVfV0lOVF9UJGFjX2RlbGltCitBQlNPTFVURV9XQ1RZUEVfSCEkQUJTT0xVVEVfV0NUWVBFX0gkYWNfZGVsaW0KK0hBVkVfV0NUWVBFX0ghJEhBVkVfV0NUWVBFX0gkYWNfZGVsaW0KK1dDVFlQRV9IISRXQ1RZUEVfSCRhY19kZWxpbQorU0VEISRTRUQkYWNfZGVsaW0KK0xOX1MhJExOX1MkYWNfZGVsaW0KK0VDSE8hJEVDSE8kYWNfZGVsaW0KK0FSISRBUiRhY19kZWxpbQorQ1hYISRDWFgkYWNfZGVsaW0KK0NYWEZMQUdTISRDWFhGTEFHUyRhY19kZWxpbQorYWNfY3RfQ1hYISRhY19jdF9DWFgkYWNfZGVsaW0KK0NYWERFUE1PREUhJENYWERFUE1PREUkYWNfZGVsaW0KK2FtX19mYXN0ZGVwQ1hYX1RSVUUhJGFtX19mYXN0ZGVwQ1hYX1RSVUUkYWNfZGVsaW0KK2FtX19mYXN0ZGVwQ1hYX0ZBTFNFISRhbV9fZmFzdGRlcENYWF9GQUxTRSRhY19kZWxpbQorQ1hYQ1BQISRDWFhDUFAkYWNfZGVsaW0KK0Y3NyEkRjc3JGFjX2RlbGltCitGRkxBR1MhJEZGTEFHUyRhY19kZWxpbQorYWNfY3RfRjc3ISRhY19jdF9GNzckYWNfZGVsaW0KK0xJQlRPT0whJExJQlRPT0wkYWNfZGVsaW0KK1VTRV9OTFMhJFVTRV9OTFMkYWNfZGVsaW0KK01TR0ZNVCEkTVNHRk1UJGFjX2RlbGltCitHTVNHRk1UISRHTVNHRk1UJGFjX2RlbGltCitNU0dGTVRfMDE1ISRNU0dGTVRfMDE1JGFjX2RlbGltCitHTVNHRk1UXzAxNSEkR01TR0ZNVF8wMTUkYWNfZGVsaW0KK1hHRVRURVhUISRYR0VUVEVYVCRhY19kZWxpbQorWEdFVFRFWFRfMDE1ISRYR0VUVEVYVF8wMTUkYWNfZGVsaW0KK01TR01FUkdFISRNU0dNRVJHRSRhY19kZWxpbQorSU5UTF9NQUNPU1hfTElCUyEkSU5UTF9NQUNPU1hfTElCUyRhY19kZWxpbQorTElCSUNPTlYhJExJQklDT05WJGFjX2RlbGltCitMVExJQklDT05WISRMVExJQklDT05WJGFjX2RlbGltCitJTlRMTElCUyEkSU5UTExJQlMkYWNfZGVsaW0KK1BPU1VCISRQT1NVQiRhY19kZWxpbQorRExfTElCUyEkRExfTElCUyRhY19kZWxpbQorVVVJRF9MSUJTISRVVUlEX0xJQlMkYWNfZGVsaW0KK0RNX0xJQlMhJERNX0xJQlMkYWNfZGVsaW0KK1NFTElOVVhfTElCUyEkU0VMSU5VWF9MSUJTJGFjX2RlbGltCitSRUlTRVJfTElCUyEkUkVJU0VSX0xJQlMkYWNfZGVsaW0KK1BBUlRFRF9MSUJTISRQQVJURURfTElCUyRhY19kZWxpbQorT1NfTElCUyEkT1NfTElCUyRhY19kZWxpbQorSU5UTElOQ1MhJElOVExJTkNTJGFjX2RlbGltCitDT01QSUxFX0ZPUl9TMzkwX1RSVUUhJENPTVBJTEVfRk9SX1MzOTBfVFJVRSRhY19kZWxpbQorQ09NUElMRV9GT1JfUzM5MF9GQUxTRSEkQ09NUElMRV9GT1JfUzM5MF9GQUxTRSRhY19kZWxpbQorUEtHX0NPTkZJRyEkUEtHX0NPTkZJRyRhY19kZWxpbQorQ0hFQ0tfQ0ZMQUdTISRDSEVDS19DRkxBR1MkYWNfZGVsaW0KK0NIRUNLX0xJQlMhJENIRUNLX0xJQlMkYWNfZGVsaW0KK0hBVkVfQ0hFQ0tfVFJVRSEkSEFWRV9DSEVDS19UUlVFJGFjX2RlbGltCitIQVZFX0NIRUNLX0ZBTFNFISRIQVZFX0NIRUNLX0ZBTFNFJGFjX2RlbGltCitCVUlMRElORk8hJEJVSUxESU5GTyRhY19kZWxpbQorTElCT0JKUyEkTElCT0JKUyRhY19kZWxpbQorTFRMSUJPQkpTISRMVExJQk9CSlMkYWNfZGVsaW0KK2dsX0xJQk9CSlMhJGdsX0xJQk9CSlMkYWNfZGVsaW0KK2dsX0xUTElCT0JKUyEkZ2xfTFRMSUJPQkpTJGFjX2RlbGltCitfQUNFT0YKKworICBpZiB0ZXN0IGBzZWQgLW4gInMvLiokYWNfZGVsaW1cJC9YL3AiIGNvbmYkJHN1YnMuc2VkIHwgZ3JlcCAtYyBYYCA9IDY4OyB0aGVuCisgICAgYnJlYWsKKyAgZWxpZiAkYWNfbGFzdF90cnk7IHRoZW4KKyAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb3VsZCBub3QgbWFrZSAkQ09ORklHX1NUQVRVUyIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjb3VsZCBub3QgbWFrZSAkQ09ORklHX1NUQVRVUyIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICBlbHNlCisgICAgYWNfZGVsaW09IiRhY19kZWxpbSEkYWNfZGVsaW0gXyRhY19kZWxpbSEhICIKKyAgZmkKK2RvbmUKKworYWNfZW9mPWBzZWQgLW4gJy9eQ0VPRlswLTldKiQvcy9DRU9GLzAvcCcgY29uZiQkc3Vicy5zZWRgCitpZiB0ZXN0IC1uICIkYWNfZW9mIjsgdGhlbgorICBhY19lb2Y9YGVjaG8gIiRhY19lb2YiIHwgc29ydCAtbnJ1IHwgc2VkIDFxYAorICBhY19lb2Y9YGV4cHIgJGFjX2VvZiArIDFgCitmaQorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgorY2F0ID4iXCR0bXAvc3Vicy0zLnNlZCIgPDxcQ0VPRiRhY19lb2YKKy9AW2EtekEtWl9dW2EtekEtWl8wLTldKkAvIWIgZW5kCitfQUNFT0YKK3NlZCAnCitzL1ssXFwmXS9cXCYvZzsgcy9AL0B8I18hIV8jfC9nCitzL14vcyxALzsgcy8hL0AsfCNfISFfI3wvCis6bgordCBuCitzLyciJGFjX2RlbGltIickLyxnLzsgdAorcy8kL1xcLzsgcAorTjsgcy9eLipcbi8vOyBzL1ssXFwmXS9cXCYvZzsgcy9AL0B8I18hIV8jfC9nOyBiIG4KKycgPj4kQ09ORklHX1NUQVRVUyA8Y29uZiQkc3Vicy5zZWQKK3JtIC1mIGNvbmYkJHN1YnMuc2VkCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgorOmVuZAorcy98I18hIV8jfC8vZworQ0VPRiRhY19lb2YKK19BQ0VPRgorCisKKyMgVlBBVEggbWF5IGNhdXNlIHRyb3VibGUgd2l0aCBzb21lIG1ha2VzLCBzbyB3ZSByZW1vdmUgJChzcmNkaXIpLAorIyAke3NyY2Rpcn0gYW5kIEBzcmNkaXJAIGZyb20gVlBBVEggaWYgc3JjZGlyIGlzICIuIiwgc3RyaXAgbGVhZGluZyBhbmQKKyMgdHJhaWxpbmcgY29sb25zIGFuZCB0aGVuIHJlbW92ZSB0aGUgd2hvbGUgbGluZSBpZiBWUEFUSCBiZWNvbWVzIGVtcHR5CisjIChhY3R1YWxseSB3ZSBsZWF2ZSBhbiBlbXB0eSBsaW5lIHRvIHByZXNlcnZlIGxpbmUgbnVtYmVycykuCitpZiB0ZXN0ICJ4JHNyY2RpciIgPSB4LjsgdGhlbgorICBhY192cHN1Yj0nL15bCSBdKlZQQVRIWwkgXSo9L3sKK3MvOipcJChzcmNkaXIpOiovOi8KK3MvOipcJHtzcmNkaXJ9OiovOi8KK3MvOipAc3JjZGlyQDoqLzovCitzL15cKFtePV0qPVsJIF0qXCk6Ki9cMS8KK3MvOiokLy8KK3MvXltePV0qPVsJIF0qJC8vCit9JworZmkKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCitmaSAjIHRlc3QgLW4gIiRDT05GSUdfRklMRVMiCisKKworZm9yIGFjX3RhZyBpbiAgOkYgJENPTkZJR19GSUxFUyAgOkggJENPTkZJR19IRUFERVJTICAgIDpDICRDT05GSUdfQ09NTUFORFMKK2RvCisgIGNhc2UgJGFjX3RhZyBpbgorICA6W0ZITENdKSBhY19tb2RlPSRhY190YWc7IGNvbnRpbnVlOzsKKyAgZXNhYworICBjYXNlICRhY19tb2RlJGFjX3RhZyBpbgorICA6W0ZITF0qOiopOzsKKyAgOkwqIHwgOkMqOiopIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IEludmFsaWQgdGFnICRhY190YWcuIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IEludmFsaWQgdGFnICRhY190YWcuIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKKyAgOltGSF0tKSBhY190YWc9LTotOzsKKyAgOltGSF0qKSBhY190YWc9JGFjX3RhZzokYWNfdGFnLmluOzsKKyAgZXNhYworICBhY19zYXZlX0lGUz0kSUZTCisgIElGUz06CisgIHNldCB4ICRhY190YWcKKyAgSUZTPSRhY19zYXZlX0lGUworICBzaGlmdAorICBhY19maWxlPSQxCisgIHNoaWZ0CisKKyAgY2FzZSAkYWNfbW9kZSBpbgorICA6TCkgYWNfc291cmNlPSQxOzsKKyAgOltGSF0pCisgICAgYWNfZmlsZV9pbnB1dHM9CisgICAgZm9yIGFjX2YKKyAgICBkbworICAgICAgY2FzZSAkYWNfZiBpbgorICAgICAgLSkgYWNfZj0iJHRtcC9zdGRpbiI7OworICAgICAgKikgIyBMb29rIGZvciB0aGUgZmlsZSBmaXJzdCBpbiB0aGUgYnVpbGQgdHJlZSwgdGhlbiBpbiB0aGUgc291cmNlIHRyZWUKKwkgIyAoaWYgdGhlIHBhdGggaXMgbm90IGFic29sdXRlKS4gIFRoZSBhYnNvbHV0ZSBwYXRoIGNhbm5vdCBiZSBET1Mtc3R5bGUsCisJICMgYmVjYXVzZSAkYWNfZiBjYW5ub3QgY29udGFpbiBgOicuCisJIHRlc3QgLWYgIiRhY19mIiB8fAorCSAgIGNhc2UgJGFjX2YgaW4KKwkgICBbXFwvJF0qKSBmYWxzZTs7CisJICAgKikgdGVzdCAtZiAiJHNyY2Rpci8kYWNfZiIgJiYgYWNfZj0iJHNyY2Rpci8kYWNfZiI7OworCSAgIGVzYWMgfHwKKwkgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkYWNfZiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkYWNfZiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTs7CisgICAgICBlc2FjCisgICAgICBhY19maWxlX2lucHV0cz0iJGFjX2ZpbGVfaW5wdXRzICRhY19mIgorICAgIGRvbmUKKworICAgICMgTGV0J3Mgc3RpbGwgcHJldGVuZCBpdCBpcyBgY29uZmlndXJlJyB3aGljaCBpbnN0YW50aWF0ZXMgKGkuZS4sIGRvbid0CisgICAgIyB1c2UgJGFzX21lKSwgcGVvcGxlIHdvdWxkIGJlIHN1cnByaXNlZCB0byByZWFkOgorICAgICMgICAgLyogY29uZmlnLmguICBHZW5lcmF0ZWQgYnkgY29uZmlnLnN0YXR1cy4gICovCisgICAgY29uZmlndXJlX2lucHV0PSJHZW5lcmF0ZWQgZnJvbSAiYElGUz06CisJICBlY2hvICQqIHwgc2VkICdzfF5bXjpdKi98fDtzfDpbXjpdKi98LCB8ZydgIiBieSBjb25maWd1cmUuIgorICAgIGlmIHRlc3QgeCIkYWNfZmlsZSIgIT0geC07IHRoZW4KKyAgICAgIGNvbmZpZ3VyZV9pbnB1dD0iJGFjX2ZpbGUuICAkY29uZmlndXJlX2lucHV0IgorICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNQorZWNobyAiJGFzX21lOiBjcmVhdGluZyAkYWNfZmlsZSIgPiY2O30KKyAgICBmaQorCisgICAgY2FzZSAkYWNfdGFnIGluCisgICAgKjotOiogfCAqOi0pIGNhdCA+IiR0bXAvc3RkaW4iOzsKKyAgICBlc2FjCisgICAgOzsKKyAgZXNhYworCisgIGFjX2Rpcj1gJGFzX2Rpcm5hbWUgLS0gIiRhY19maWxlIiB8fAorJGFzX2V4cHIgWCIkYWNfZmlsZSIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkYWNfZmlsZSIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CitlY2hvIFgiJGFjX2ZpbGUiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXClbXi9dLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYAorICB7IGFzX2Rpcj0iJGFjX2RpciIKKyAgY2FzZSAkYXNfZGlyIGluICMoCisgIC0qKSBhc19kaXI9Li8kYXNfZGlyOzsKKyAgZXNhYworICB0ZXN0IC1kICIkYXNfZGlyIiB8fCB7ICRhc19ta2Rpcl9wICYmIG1rZGlyIC1wICIkYXNfZGlyIjsgfSB8fCB7CisgICAgYXNfZGlycz0KKyAgICB3aGlsZSA6OyBkbworICAgICAgY2FzZSAkYXNfZGlyIGluICMoCisgICAgICAqXCcqKSBhc19xZGlyPWBlY2hvICIkYXNfZGlyIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYDs7ICMoCisgICAgICAqKSBhc19xZGlyPSRhc19kaXI7OworICAgICAgZXNhYworICAgICAgYXNfZGlycz0iJyRhc19xZGlyJyAkYXNfZGlycyIKKyAgICAgIGFzX2Rpcj1gJGFzX2Rpcm5hbWUgLS0gIiRhc19kaXIiIHx8CiskYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorZWNobyBYIiRhc19kaXIiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXClbXi9dLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYAorICAgICAgdGVzdCAtZCAiJGFzX2RpciIgJiYgYnJlYWsKKyAgICBkb25lCisgICAgdGVzdCAteiAiJGFzX2RpcnMiIHx8IGV2YWwgIm1rZGlyICRhc19kaXJzIgorICB9IHx8IHRlc3QgLWQgIiRhc19kaXIiIHx8IHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5ICRhc19kaXIiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgJGFzX2RpciIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTsgfQorICBhY19idWlsZGRpcj0uCisKK2Nhc2UgIiRhY19kaXIiIGluCisuKSBhY19kaXJfc3VmZml4PSBhY190b3BfYnVpbGRkaXJfc3ViPS4gYWNfdG9wX2J1aWxkX3ByZWZpeD0gOzsKKyopCisgIGFjX2Rpcl9zdWZmaXg9L2BlY2hvICIkYWNfZGlyIiB8IHNlZCAncyxeXC5bXFwvXSwsJ2AKKyAgIyBBICIuLiIgZm9yIGVhY2ggZGlyZWN0b3J5IGluICRhY19kaXJfc3VmZml4LgorICBhY190b3BfYnVpbGRkaXJfc3ViPWBlY2hvICIkYWNfZGlyX3N1ZmZpeCIgfCBzZWQgJ3MsL1teXFwvXSosLy4uLGc7cywvLCwnYAorICBjYXNlICRhY190b3BfYnVpbGRkaXJfc3ViIGluCisgICIiKSBhY190b3BfYnVpbGRkaXJfc3ViPS4gYWNfdG9wX2J1aWxkX3ByZWZpeD0gOzsKKyAgKikgIGFjX3RvcF9idWlsZF9wcmVmaXg9JGFjX3RvcF9idWlsZGRpcl9zdWIvIDs7CisgIGVzYWMgOzsKK2VzYWMKK2FjX2Fic190b3BfYnVpbGRkaXI9JGFjX3B3ZAorYWNfYWJzX2J1aWxkZGlyPSRhY19wd2QkYWNfZGlyX3N1ZmZpeAorIyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eToKK2FjX3RvcF9idWlsZGRpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeAorCitjYXNlICRzcmNkaXIgaW4KKyAgLikgICMgV2UgYXJlIGJ1aWxkaW5nIGluIHBsYWNlLgorICAgIGFjX3NyY2Rpcj0uCisgICAgYWNfdG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyX3N1YgorICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QgOzsKKyAgW1xcL10qIHwgPzpbXFwvXSogKSAgIyBBYnNvbHV0ZSBuYW1lLgorICAgIGFjX3NyY2Rpcj0kc3JjZGlyJGFjX2Rpcl9zdWZmaXg7CisgICAgYWNfdG9wX3NyY2Rpcj0kc3JjZGlyCisgICAgYWNfYWJzX3RvcF9zcmNkaXI9JHNyY2RpciA7OworICAqKSAjIFJlbGF0aXZlIG5hbWUuCisgICAgYWNfc3JjZGlyPSRhY190b3BfYnVpbGRfcHJlZml4JHNyY2RpciRhY19kaXJfc3VmZml4CisgICAgYWNfdG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeCRzcmNkaXIKKyAgICBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfcHdkLyRzcmNkaXIgOzsKK2VzYWMKK2FjX2Fic19zcmNkaXI9JGFjX2Fic190b3Bfc3JjZGlyJGFjX2Rpcl9zdWZmaXgKKworCisgIGNhc2UgJGFjX21vZGUgaW4KKyAgOkYpCisgICMKKyAgIyBDT05GSUdfRklMRQorICAjCisKKyAgY2FzZSAkSU5TVEFMTCBpbgorICBbXFwvJF0qIHwgPzpbXFwvXSogKSBhY19JTlNUQUxMPSRJTlNUQUxMIDs7CisgICopIGFjX0lOU1RBTEw9JGFjX3RvcF9idWlsZF9wcmVmaXgkSU5TVEFMTCA7OworICBlc2FjCisgIGFjX01LRElSX1A9JE1LRElSX1AKKyAgY2FzZSAkTUtESVJfUCBpbgorICBbXFwvJF0qIHwgPzpbXFwvXSogKSA7OworICAqLyopIGFjX01LRElSX1A9JGFjX3RvcF9idWlsZF9wcmVmaXgkTUtESVJfUCA7OworICBlc2FjCitfQUNFT0YKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCisjIElmIHRoZSB0ZW1wbGF0ZSBkb2VzIG5vdCBrbm93IGFib3V0IGRhdGFyb290ZGlyLCBleHBhbmQgaXQuCisjIEZJWE1FOiBUaGlzIGhhY2sgc2hvdWxkIGJlIHJlbW92ZWQgYSBmZXcgeWVhcnMgYWZ0ZXIgMi42MC4KK2FjX2RhdGFyb290ZGlyX2hhY2s9OyBhY19kYXRhcm9vdGRpcl9zZWVuPQorCitjYXNlIGBzZWQgLW4gJy9kYXRhcm9vdGRpci8geworICBwCisgIHEKK30KKy9AZGF0YWRpckAvcAorL0Bkb2NkaXJAL3AKKy9AaW5mb2RpckAvcAorL0Bsb2NhbGVkaXJAL3AKKy9AbWFuZGlyQC9wCisnICRhY19maWxlX2lucHV0c2AgaW4KKypkYXRhcm9vdGRpciopIGFjX2RhdGFyb290ZGlyX3NlZW49eWVzOzsKKypAZGF0YWRpckAqfCpAZG9jZGlyQCp8KkBpbmZvZGlyQCp8KkBsb2NhbGVkaXJAKnwqQG1hbmRpckAqKQorICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfZmlsZV9pbnB1dHMgc2VlbXMgdG8gaWdub3JlIHRoZSAtLWRhdGFyb290ZGlyIHNldHRpbmciID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfZmlsZV9pbnB1dHMgc2VlbXMgdG8gaWdub3JlIHRoZSAtLWRhdGFyb290ZGlyIHNldHRpbmciID4mMjt9CitfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCisgIGFjX2RhdGFyb290ZGlyX2hhY2s9JworICBzJkBkYXRhZGlyQCYkZGF0YWRpciZnCisgIHMmQGRvY2RpckAmJGRvY2RpciZnCisgIHMmQGluZm9kaXJAJiRpbmZvZGlyJmcKKyAgcyZAbG9jYWxlZGlyQCYkbG9jYWxlZGlyJmcKKyAgcyZAbWFuZGlyQCYkbWFuZGlyJmcKKyAgICBzJlxcXCR7ZGF0YXJvb3RkaXJ9JiRkYXRhcm9vdGRpciZnJyA7OworZXNhYworX0FDRU9GCisKKyMgTmV1dHJhbGl6ZSBWUEFUSCB3aGVuIGAkc3JjZGlyJyA9IGAuJy4KKyMgU2hlbGwgY29kZSBpbiBjb25maWd1cmUuYWMgbWlnaHQgc2V0IGV4dHJhc3ViLgorIyBGSVhNRTogZG8gd2UgcmVhbGx5IHdhbnQgdG8gbWFpbnRhaW4gdGhpcyBmZWF0dXJlPworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YKKyAgc2VkICIkYWNfdnBzdWIKKyRleHRyYXN1YgorX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKKzp0CisvQFthLXpBLVpfXVthLXpBLVpfMC05XSpALyFiCitzJkBjb25maWd1cmVfaW5wdXRAJiRjb25maWd1cmVfaW5wdXQmO3QgdAorcyZAdG9wX2J1aWxkZGlyQCYkYWNfdG9wX2J1aWxkZGlyX3N1YiY7dCB0CitzJkBzcmNkaXJAJiRhY19zcmNkaXImO3QgdAorcyZAYWJzX3NyY2RpckAmJGFjX2Fic19zcmNkaXImO3QgdAorcyZAdG9wX3NyY2RpckAmJGFjX3RvcF9zcmNkaXImO3QgdAorcyZAYWJzX3RvcF9zcmNkaXJAJiRhY19hYnNfdG9wX3NyY2RpciY7dCB0CitzJkBidWlsZGRpckAmJGFjX2J1aWxkZGlyJjt0IHQKK3MmQGFic19idWlsZGRpckAmJGFjX2Fic19idWlsZGRpciY7dCB0CitzJkBhYnNfdG9wX2J1aWxkZGlyQCYkYWNfYWJzX3RvcF9idWlsZGRpciY7dCB0CitzJkBJTlNUQUxMQCYkYWNfSU5TVEFMTCY7dCB0CitzJkBNS0RJUl9QQCYkYWNfTUtESVJfUCY7dCB0CiskYWNfZGF0YXJvb3RkaXJfaGFjaworIiAkYWNfZmlsZV9pbnB1dHMgfCBzZWQgLWYgIiR0bXAvc3Vicy0xLnNlZCIgfCBzZWQgLWYgIiR0bXAvc3Vicy0yLnNlZCIgfCBzZWQgLWYgIiR0bXAvc3Vicy0zLnNlZCIgPiR0bXAvb3V0CisKK3Rlc3QgLXogIiRhY19kYXRhcm9vdGRpcl9oYWNrJGFjX2RhdGFyb290ZGlyX3NlZW4iICYmCisgIHsgYWNfb3V0PWBzZWQgLW4gJy9cJHtkYXRhcm9vdGRpcn0vcCcgIiR0bXAvb3V0ImA7IHRlc3QgLW4gIiRhY19vdXQiOyB9ICYmCisgIHsgYWNfb3V0PWBzZWQgLW4gJy9eWwkgXSpkYXRhcm9vdGRpclsJIF0qOio9L3AnICIkdG1wL291dCJgOyB0ZXN0IC16ICIkYWNfb3V0IjsgfSAmJgorICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfZmlsZSBjb250YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgdmFyaWFibGUgXGBkYXRhcm9vdGRpcicKK3doaWNoIHNlZW1zIHRvIGJlIHVuZGVmaW5lZC4gIFBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgZGVmaW5lZC4iID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfZmlsZSBjb250YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgdmFyaWFibGUgXGBkYXRhcm9vdGRpcicKK3doaWNoIHNlZW1zIHRvIGJlIHVuZGVmaW5lZC4gIFBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgZGVmaW5lZC4iID4mMjt9CisKKyAgcm0gLWYgIiR0bXAvc3RkaW4iCisgIGNhc2UgJGFjX2ZpbGUgaW4KKyAgLSkgY2F0ICIkdG1wL291dCI7IHJtIC1mICIkdG1wL291dCI7OworICAqKSBybSAtZiAiJGFjX2ZpbGUiOyBtdiAiJHRtcC9vdXQiICRhY19maWxlOzsKKyAgZXNhYworIDs7CisgIDpIKQorICAjCisgICMgQ09ORklHX0hFQURFUgorICAjCitfQUNFT0YKKworIyBUcmFuc2Zvcm0gY29uZmRlZnMuaCBpbnRvIGEgc2VkIHNjcmlwdCBgY29uZnRlc3QuZGVmaW5lcycsIHRoYXQKKyMgc3Vic3RpdHV0ZXMgdGhlIHByb3BlciB2YWx1ZXMgaW50byBjb25maWcuaC5pbiB0byBwcm9kdWNlIGNvbmZpZy5oLgorcm0gLWYgY29uZnRlc3QuZGVmaW5lcyBjb25mdGVzdC50YWlsCisjIEZpcnN0LCBhcHBlbmQgYSBzcGFjZSB0byBldmVyeSB1bmRlZi9kZWZpbmUgbGluZSwgdG8gZWFzZSBtYXRjaGluZy4KK2VjaG8gJ3MvJC8gLycgPmNvbmZ0ZXN0LmRlZmluZXMKKyMgVGhlbiwgcHJvdGVjdCBhZ2FpbnN0IGJlaW5nIG9uIHRoZSByaWdodCBzaWRlIG9mIGEgc2VkIHN1YnN0LCBvciBpbgorIyBhbiB1bnF1b3RlZCBoZXJlIGRvY3VtZW50LCBpbiBjb25maWcuc3RhdHVzLiAgSWYgc29tZSBtYWNyb3Mgd2VyZQorIyBjYWxsZWQgc2V2ZXJhbCB0aW1lcyB0aGVyZSBtaWdodCBiZSBzZXZlcmFsICNkZWZpbmVzIGZvciB0aGUgc2FtZQorIyBzeW1ib2wsIHdoaWNoIGlzIHVzZWxlc3MuICBCdXQgZG8gbm90IHNvcnQgdGhlbSwgc2luY2UgdGhlIGxhc3QKKyMgQUNfREVGSU5FIG11c3QgYmUgaG9ub3JlZC4KK2FjX3dvcmRfcmU9W18kYXNfY3JfTGV0dGVyc11bXyRhc19jcl9hbG51bV0qCisjIFRoZXNlIHNlZCBjb21tYW5kcyBhcmUgcGFzc2VkIHRvIHNlZCBhcyAiQSBOQU1FIEIgUEFSQU1TIEMgVkFMVUUgRCIsIHdoZXJlCisjIE5BTUUgaXMgdGhlIGNwcCBtYWNybyBiZWluZyBkZWZpbmVkLCBWQUxVRSBpcyB0aGUgdmFsdWUgaXQgaXMgYmVpbmcgZ2l2ZW4uCisjIFBBUkFNUyBpcyB0aGUgcGFyYW1ldGVyIGxpc3QgaW4gdGhlIG1hY3JvIGRlZmluaXRpb24tLWluIG1vc3QgY2FzZXMsIGl0J3MKKyMganVzdCBhbiBlbXB0eSBzdHJpbmcuCithY19kQT0ncyxeXFwoWwkgI10qXFwpW14JIF0qXFwoWwkgXSonCithY19kQj0nXFwpWwkgKF0uKixcXDFkZWZpbmVcXDInCithY19kQz0nICcKK2FjX2REPScgLCcKKwordW5pcSBjb25mZGVmcy5oIHwKKyAgc2VkIC1uICcKKwl0IHJzZXQKKwk6cnNldAorCXMvXlsJIF0qI1sJIF0qZGVmaW5lWwkgXVsJIF0qLy8KKwl0IG9rCisJZAorCTpvaworCXMvW1xcJixdL1xcJi9nCisJcy9eXCgnIiRhY193b3JkX3JlIidcKVwoKFteKCldKilcKVsJIF0qXCguKlwpLyAnIiRhY19kQSInXDEnIiRhY19kQiInXDInIiR7YWNfZEN9IidcMyciJGFjX2REIicvcAorCXMvXlwoJyIkYWNfd29yZF9yZSInXClbCSBdKlwoLipcKS8nIiRhY19kQSInXDEnIiRhY19kQiRhY19kQyInXDInIiRhY19kRCInL3AKKyAgJyA+PmNvbmZ0ZXN0LmRlZmluZXMKKworIyBSZW1vdmUgdGhlIHNwYWNlIHRoYXQgd2FzIGFwcGVuZGVkIHRvIGVhc2UgbWF0Y2hpbmcuCisjIFRoZW4gcmVwbGFjZSAjdW5kZWYgd2l0aCBjb21tZW50cy4gIFRoaXMgaXMgbmVjZXNzYXJ5LCBmb3IKKyMgZXhhbXBsZSwgaW4gdGhlIGNhc2Ugb2YgX1BPU0lYX1NPVVJDRSwgd2hpY2ggaXMgcHJlZGVmaW5lZCBhbmQgcmVxdWlyZWQKKyMgb24gc29tZSBzeXN0ZW1zIHdoZXJlIGNvbmZpZ3VyZSB3aWxsIG5vdCBkZWNpZGUgdG8gZGVmaW5lIGl0LgorIyAoVGhlIHJlZ2V4cCBjYW4gYmUgc2hvcnQsIHNpbmNlIHRoZSBsaW5lIGNvbnRhaW5zIGVpdGhlciAjZGVmaW5lIG9yICN1bmRlZi4pCitlY2hvICdzLyAkLy8KK3MsXlsJICNdKnUuKiwvKiAmICovLCcgPj5jb25mdGVzdC5kZWZpbmVzCisKKyMgQnJlYWsgdXAgY29uZnRlc3QuZGVmaW5lczoKK2FjX21heF9zZWRfbGluZXM9NTAKKworIyBGaXJzdCBzZWQgY29tbWFuZCBpczoJIHNlZCAtZiBkZWZpbmVzLnNlZCAkYWNfZmlsZV9pbnB1dHMgPiIkdG1wL291dDEiCisjIFNlY29uZCBvbmUgaXM6CSBzZWQgLWYgZGVmaW5lcy5zZWQgIiR0bXAvb3V0MSIgPiIkdG1wL291dDIiCisjIFRoaXJkIG9uZSB3aWxsIGJlOgkgc2VkIC1mIGRlZmluZXMuc2VkICIkdG1wL291dDIiID4iJHRtcC9vdXQxIgorIyBldCBjZXRlcmEuCithY19pbj0nJGFjX2ZpbGVfaW5wdXRzJworYWNfb3V0PSciJHRtcC9vdXQxIicKK2FjX254dD0nIiR0bXAvb3V0MiInCisKK3doaWxlIDoKK2RvCisgICMgV3JpdGUgYSBoZXJlIGRvY3VtZW50OgorICAgIGNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCisgICAgIyBGaXJzdCwgY2hlY2sgdGhlIGZvcm1hdCBvZiB0aGUgbGluZToKKyAgICBjYXQgPiJcJHRtcC9kZWZpbmVzLnNlZCIgPDxcXENFT0YKKy9eWwkgXSojWwkgXSp1bmRlZlsJIF1bCSBdKiRhY193b3JkX3JlWwkgXSpcJC9iIGRlZgorL15bCSBdKiNbCSBdKmRlZmluZVsJIF1bCSBdKiRhY193b3JkX3JlWygJIF0vYiBkZWYKK2IKKzpkZWYKK19BQ0VPRgorICBzZWQgJHthY19tYXhfc2VkX2xpbmVzfXEgY29uZnRlc3QuZGVmaW5lcyA+PiRDT05GSUdfU1RBVFVTCisgIGVjaG8gJ0NFT0YKKyAgICBzZWQgLWYgIiR0bXAvZGVmaW5lcy5zZWQiJyAiJGFjX2luID4kYWNfb3V0IiA+PiRDT05GSUdfU1RBVFVTCisgIGFjX2luPSRhY19vdXQ7IGFjX291dD0kYWNfbnh0OyBhY19ueHQ9JGFjX2luCisgIHNlZCAxLCR7YWNfbWF4X3NlZF9saW5lc31kIGNvbmZ0ZXN0LmRlZmluZXMgPmNvbmZ0ZXN0LnRhaWwKKyAgZ3JlcCAuIGNvbmZ0ZXN0LnRhaWwgPi9kZXYvbnVsbCB8fCBicmVhaworICBybSAtZiBjb25mdGVzdC5kZWZpbmVzCisgIG12IGNvbmZ0ZXN0LnRhaWwgY29uZnRlc3QuZGVmaW5lcworZG9uZQorcm0gLWYgY29uZnRlc3QuZGVmaW5lcyBjb25mdGVzdC50YWlsCisKK2VjaG8gImFjX3Jlc3VsdD0kYWNfaW4iID4+JENPTkZJR19TVEFUVVMKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgorICBpZiB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtOyB0aGVuCisgICAgZWNobyAiLyogJGNvbmZpZ3VyZV9pbnB1dCAgKi8iID4iJHRtcC9jb25maWcuaCIKKyAgICBjYXQgIiRhY19yZXN1bHQiID4+IiR0bXAvY29uZmlnLmgiCisgICAgaWYgZGlmZiAkYWNfZmlsZSAiJHRtcC9jb25maWcuaCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiAkYWNfZmlsZSBpcyB1bmNoYW5nZWQiID4mNQorZWNobyAiJGFzX21lOiAkYWNfZmlsZSBpcyB1bmNoYW5nZWQiID4mNjt9CisgICAgZWxzZQorICAgICAgcm0gLWYgJGFjX2ZpbGUKKyAgICAgIG12ICIkdG1wL2NvbmZpZy5oIiAkYWNfZmlsZQorICAgIGZpCisgIGVsc2UKKyAgICBlY2hvICIvKiAkY29uZmlndXJlX2lucHV0ICAqLyIKKyAgICBjYXQgIiRhY19yZXN1bHQiCisgIGZpCisgIHJtIC1mICIkdG1wL291dDEyIgorIyBDb21wdXRlICRhY19maWxlJ3MgaW5kZXggaW4gJGNvbmZpZ19oZWFkZXJzLgorX2FtX3N0YW1wX2NvdW50PTEKK2ZvciBfYW1faGVhZGVyIGluICRjb25maWdfaGVhZGVycyA6OyBkbworICBjYXNlICRfYW1faGVhZGVyIGluCisgICAgJGFjX2ZpbGUgfCAkYWNfZmlsZToqICkKKyAgICAgIGJyZWFrIDs7CisgICAgKiApCisgICAgICBfYW1fc3RhbXBfY291bnQ9YGV4cHIgJF9hbV9zdGFtcF9jb3VudCArIDFgIDs7CisgIGVzYWMKK2RvbmUKK2VjaG8gInRpbWVzdGFtcCBmb3IgJGFjX2ZpbGUiID5gJGFzX2Rpcm5hbWUgLS0gJGFjX2ZpbGUgfHwKKyRhc19leHByIFgkYWNfZmlsZSA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorCSBYJGFjX2ZpbGUgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCRhY19maWxlIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgkYWNfZmlsZSA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKK2VjaG8gWCRhY19maWxlIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXClbXi9dLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYC9zdGFtcC1oJF9hbV9zdGFtcF9jb3VudAorIDs7CisKKyAgOkMpICB7IGVjaG8gIiRhc19tZTokTElORU5POiBleGVjdXRpbmcgJGFjX2ZpbGUgY29tbWFuZHMiID4mNQorZWNobyAiJGFzX21lOiBleGVjdXRpbmcgJGFjX2ZpbGUgY29tbWFuZHMiID4mNjt9CisgOzsKKyAgZXNhYworCisKKyAgY2FzZSAkYWNfZmlsZSRhY19tb2RlIGluCisgICAgImRlcGZpbGVzIjpDKSB0ZXN0IHgiJEFNREVQX1RSVUUiICE9IHgiIiB8fCBmb3IgbWYgaW4gJENPTkZJR19GSUxFUzsgZG8KKyAgIyBTdHJpcCBNRiBzbyB3ZSBlbmQgdXAgd2l0aCB0aGUgbmFtZSBvZiB0aGUgZmlsZS4KKyAgbWY9YGVjaG8gIiRtZiIgfCBzZWQgLWUgJ3MvOi4qJC8vJ2AKKyAgIyBDaGVjayB3aGV0aGVyIHRoaXMgaXMgYW4gQXV0b21ha2UgZ2VuZXJhdGVkIE1ha2VmaWxlIG9yIG5vdC4KKyAgIyBXZSB1c2VkIHRvIG1hdGNoIG9ubHkgdGhlIGZpbGVzIG5hbWVkIGBNYWtlZmlsZS5pbicsIGJ1dAorICAjIHNvbWUgcGVvcGxlIHJlbmFtZSB0aGVtOyBzbyBpbnN0ZWFkIHdlIGxvb2sgYXQgdGhlIGZpbGUgY29udGVudC4KKyAgIyBHcmVwJ2luZyB0aGUgZmlyc3QgbGluZSBpcyBub3QgZW5vdWdoOiBzb21lIHBlb3BsZSBwb3N0LXByb2Nlc3MKKyAgIyBlYWNoIE1ha2VmaWxlLmluIGFuZCBhZGQgYSBuZXcgbGluZSBvbiB0b3Agb2YgZWFjaCBmaWxlIHRvIHNheSBzby4KKyAgIyBHcmVwJ2luZyB0aGUgd2hvbGUgZmlsZSBpcyBub3QgZ29vZCBlaXRoZXI6IEFJWCBncmVwIGhhcyBhIGxpbmUKKyAgIyBsaW1pdCBvZiAyMDQ4LCBidXQgYWxsIHNlZCdzIHdlIGtub3cgaGF2ZSB1bmRlcnN0YW5kIGF0IGxlYXN0IDQwMDAuCisgIGlmIHNlZCAxMHEgIiRtZiIgfCBncmVwICdeIy4qZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlJyA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgZGlycGFydD1gJGFzX2Rpcm5hbWUgLS0gIiRtZiIgfHwKKyRhc19leHByIFgiJG1mIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorCSBYIiRtZiIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkbWYiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJG1mIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKK2VjaG8gWCIkbWYiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXClbXi9dLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYAorICBlbHNlCisgICAgY29udGludWUKKyAgZmkKKyAgIyBFeHRyYWN0IHRoZSBkZWZpbml0aW9uIG9mIERFUERJUiwgYW1fX2luY2x1ZGUsIGFuZCBhbV9fcXVvdGUKKyAgIyBmcm9tIHRoZSBNYWtlZmlsZSB3aXRob3V0IHJ1bm5pbmcgYG1ha2UnLgorICBERVBESVI9YHNlZCAtbiAncy9eREVQRElSID0gLy9wJyA8ICIkbWYiYAorICB0ZXN0IC16ICIkREVQRElSIiAmJiBjb250aW51ZQorICBhbV9faW5jbHVkZT1gc2VkIC1uICdzL15hbV9faW5jbHVkZSA9IC8vcCcgPCAiJG1mImAKKyAgdGVzdCAteiAiYW1fX2luY2x1ZGUiICYmIGNvbnRpbnVlCisgIGFtX19xdW90ZT1gc2VkIC1uICdzL15hbV9fcXVvdGUgPSAvL3AnIDwgIiRtZiJgCisgICMgV2hlbiB1c2luZyBhbnNpMmtuciwgVSBtYXkgYmUgZW1wdHkgb3IgYW4gdW5kZXJzY29yZTsgZXhwYW5kIGl0CisgIFU9YHNlZCAtbiAncy9eVSA9IC8vcCcgPCAiJG1mImAKKyAgIyBGaW5kIGFsbCBkZXBlbmRlbmN5IG91dHB1dCBmaWxlcywgdGhleSBhcmUgaW5jbHVkZWQgZmlsZXMgd2l0aAorICAjICQoREVQRElSKSBpbiB0aGVpciBuYW1lcy4gIFdlIGludm9rZSBzZWQgdHdpY2UgYmVjYXVzZSBpdCBpcyB0aGUKKyAgIyBzaW1wbGVzdCBhcHByb2FjaCB0byBjaGFuZ2luZyAkKERFUERJUikgdG8gaXRzIGFjdHVhbCB2YWx1ZSBpbiB0aGUKKyAgIyBleHBhbnNpb24uCisgIGZvciBmaWxlIGluIGBzZWQgLW4gIgorICAgIHMvXiRhbV9faW5jbHVkZSAkYW1fX3F1b3RlXCguKihERVBESVIpLipcKSRhbV9fcXVvdGUiJyQvXDEvcCcgPCIkbWYiIHwgXAorICAgICAgIHNlZCAtZSAncy9cJChERVBESVIpLyciJERFUERJUiInL2cnIC1lICdzL1wkVS8nIiRVIicvZydgOyBkbworICAgICMgTWFrZSBzdXJlIHRoZSBkaXJlY3RvcnkgZXhpc3RzLgorICAgIHRlc3QgLWYgIiRkaXJwYXJ0LyRmaWxlIiAmJiBjb250aW51ZQorICAgIGZkaXI9YCRhc19kaXJuYW1lIC0tICIkZmlsZSIgfHwKKyRhc19leHByIFgiJGZpbGUiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJGZpbGUiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFgiJGZpbGUiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGZpbGUiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorZWNobyBYIiRmaWxlIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2AKKyAgICB7IGFzX2Rpcj0kZGlycGFydC8kZmRpcgorICBjYXNlICRhc19kaXIgaW4gIygKKyAgLSopIGFzX2Rpcj0uLyRhc19kaXI7OworICBlc2FjCisgIHRlc3QgLWQgIiRhc19kaXIiIHx8IHsgJGFzX21rZGlyX3AgJiYgbWtkaXIgLXAgIiRhc19kaXIiOyB9IHx8IHsKKyAgICBhc19kaXJzPQorICAgIHdoaWxlIDo7IGRvCisgICAgICBjYXNlICRhc19kaXIgaW4gIygKKyAgICAgICpcJyopIGFzX3FkaXI9YGVjaG8gIiRhc19kaXIiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsgIygKKyAgICAgICopIGFzX3FkaXI9JGFzX2Rpcjs7CisgICAgICBlc2FjCisgICAgICBhc19kaXJzPSInJGFzX3FkaXInICRhc19kaXJzIgorICAgICAgYXNfZGlyPWAkYXNfZGlybmFtZSAtLSAiJGFzX2RpciIgfHwKKyRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CitlY2hvIFgiJGFzX2RpciIgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKVteL10uKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKSQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgCisgICAgICB0ZXN0IC1kICIkYXNfZGlyIiAmJiBicmVhaworICAgIGRvbmUKKyAgICB0ZXN0IC16ICIkYXNfZGlycyIgfHwgZXZhbCAibWtkaXIgJGFzX2RpcnMiCisgIH0gfHwgdGVzdCAtZCAiJGFzX2RpciIgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgJGFzX2RpciIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSAkYXNfZGlyIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OyB9CisgICAgIyBlY2hvICJjcmVhdGluZyAkZGlycGFydC8kZmlsZSIKKyAgICBlY2hvICcjIGR1bW15JyA+ICIkZGlycGFydC8kZmlsZSIKKyAgZG9uZQorZG9uZQorIDs7CisgICAgInBvLWRpcmVjdG9yaWVzIjpDKQorICAgIGZvciBhY19maWxlIGluICRDT05GSUdfRklMRVM7IGRvCisgICAgICAjIFN1cHBvcnQgIm91dGZpbGVbOmluZmlsZVs6aW5maWxlLi4uXV0iCisgICAgICBjYXNlICIkYWNfZmlsZSIgaW4KKyAgICAgICAgKjoqKSBhY19maWxlPWBlY2hvICIkYWNfZmlsZSJ8c2VkICdzJTouKiUlJ2AgOzsKKyAgICAgIGVzYWMKKyAgICAgICMgUE8gZGlyZWN0b3JpZXMgaGF2ZSBhIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBmcm9tIE1ha2VmaWxlLmluLmluLgorICAgICAgY2FzZSAiJGFjX2ZpbGUiIGluICovTWFrZWZpbGUuaW4pCisgICAgICAgICMgQWRqdXN0IGEgcmVsYXRpdmUgc3JjZGlyLgorICAgICAgICBhY19kaXI9YGVjaG8gIiRhY19maWxlInxzZWQgJ3MlL1teL11bXi9dKiQlJSdgCisgICAgICAgIGFjX2Rpcl9zdWZmaXg9Ii9gZWNobyAiJGFjX2RpciJ8c2VkICdzJV5cLi8lJSdgIgorICAgICAgICBhY19kb3RzPWBlY2hvICIkYWNfZGlyX3N1ZmZpeCJ8c2VkICdzJS9bXi9dKiUuLi8lZydgCisgICAgICAgICMgSW4gYXV0b2NvbmYtMi4xMyBpdCBpcyBjYWxsZWQgJGFjX2dpdmVuX3NyY2Rpci4KKyAgICAgICAgIyBJbiBhdXRvY29uZi0yLjUwIGl0IGlzIGNhbGxlZCAkc3JjZGlyLgorICAgICAgICB0ZXN0IC1uICIkYWNfZ2l2ZW5fc3JjZGlyIiB8fCBhY19naXZlbl9zcmNkaXI9IiRzcmNkaXIiCisgICAgICAgIGNhc2UgIiRhY19naXZlbl9zcmNkaXIiIGluCisgICAgICAgICAgLikgIHRvcF9zcmNkaXI9YGVjaG8gJGFjX2RvdHN8c2VkICdzJS8kJSUnYCA7OworICAgICAgICAgIC8qKSB0b3Bfc3JjZGlyPSIkYWNfZ2l2ZW5fc3JjZGlyIiA7OworICAgICAgICAgICopICB0b3Bfc3JjZGlyPSIkYWNfZG90cyRhY19naXZlbl9zcmNkaXIiIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgIyBUcmVhdCBhIGRpcmVjdG9yeSBhcyBhIFBPIGRpcmVjdG9yeSBpZiBhbmQgb25seSBpZiBpdCBoYXMgYQorICAgICAgICAjIFBPVEZJTEVTLmluIGZpbGUuIFRoaXMgYWxsb3dzIHBhY2thZ2VzIHRvIGhhdmUgbXVsdGlwbGUgUE8KKyAgICAgICAgIyBkaXJlY3RvcmllcyB1bmRlciBkaWZmZXJlbnQgbmFtZXMgb3IgaW4gZGlmZmVyZW50IGxvY2F0aW9ucy4KKyAgICAgICAgaWYgdGVzdCAtZiAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL1BPVEZJTEVTLmluIjsgdGhlbgorICAgICAgICAgIHJtIC1mICIkYWNfZGlyL1BPVEZJTEVTIgorICAgICAgICAgIHRlc3QgLW4gIiRhc19tZSIgJiYgZWNobyAiJGFzX21lOiBjcmVhdGluZyAkYWNfZGlyL1BPVEZJTEVTIiB8fCBlY2hvICJjcmVhdGluZyAkYWNfZGlyL1BPVEZJTEVTIgorICAgICAgICAgIGNhdCAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL1BPVEZJTEVTLmluIiB8IHNlZCAtZSAiL14jL2QiIC1lICIvXlsgCV0qXCQvZCIgLWUgInMsLiosICAgICAkdG9wX3NyY2Rpci8mIFxcXFwsIiB8IHNlZCAtZSAiXCRzL1woLipcKSBcXFxcL1wxLyIgPiAiJGFjX2Rpci9QT1RGSUxFUyIKKyAgICAgICAgICBQT01BS0VGSUxFREVQUz0iUE9URklMRVMuaW4iCisgICAgICAgICAgIyBBTExfTElOR1VBUywgUE9GSUxFUywgVVBEQVRFUE9GSUxFUywgRFVNTVlQT0ZJTEVTLCBHTU9GSUxFUyBkZXBlbmQKKyAgICAgICAgICAjIG9uICRhY19kaXIgYnV0IGRvbid0IGRlcGVuZCBvbiB1c2VyLXNwZWNpZmllZCBjb25maWd1cmF0aW9uCisgICAgICAgICAgIyBwYXJhbWV0ZXJzLgorICAgICAgICAgIGlmIHRlc3QgLWYgIiRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9MSU5HVUFTIjsgdGhlbgorICAgICAgICAgICAgIyBUaGUgTElOR1VBUyBmaWxlIGNvbnRhaW5zIHRoZSBzZXQgb2YgYXZhaWxhYmxlIGxhbmd1YWdlcy4KKyAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRPQlNPTEVURV9BTExfTElOR1VBUyI7IHRoZW4KKyAgICAgICAgICAgICAgdGVzdCAtbiAiJGFzX21lIiAmJiBlY2hvICIkYXNfbWU6IHNldHRpbmcgQUxMX0xJTkdVQVMgaW4gY29uZmlndXJlLmluIGlzIG9ic29sZXRlIiB8fCBlY2hvICJzZXR0aW5nIEFMTF9MSU5HVUFTIGluIGNvbmZpZ3VyZS5pbiBpcyBvYnNvbGV0ZSIKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBBTExfTElOR1VBU189YHNlZCAtZSAiL14jL2QiIC1lICJzLyMuKi8vIiAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL0xJTkdVQVMiYAorICAgICAgICAgICAgIyBIaWRlIHRoZSBBTExfTElOR1VBUyBhc3NpZ21lbnQgZnJvbSBhdXRvbWFrZSA8IDEuNS4KKyAgICAgICAgICAgIGV2YWwgJ0FMTF9MSU5HVUFTJyc9JEFMTF9MSU5HVUFTXycKKyAgICAgICAgICAgIFBPTUFLRUZJTEVERVBTPSIkUE9NQUtFRklMRURFUFMgTElOR1VBUyIKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICAjIFRoZSBzZXQgb2YgYXZhaWxhYmxlIGxhbmd1YWdlcyB3YXMgZ2l2ZW4gaW4gY29uZmlndXJlLmluLgorICAgICAgICAgICAgIyBIaWRlIHRoZSBBTExfTElOR1VBUyBhc3NpZ21lbnQgZnJvbSBhdXRvbWFrZSA8IDEuNS4KKyAgICAgICAgICAgIGV2YWwgJ0FMTF9MSU5HVUFTJyc9JE9CU09MRVRFX0FMTF9MSU5HVUFTJworICAgICAgICAgIGZpCisgICAgICAgICAgIyBDb21wdXRlIFBPRklMRVMKKyAgICAgICAgICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHNyY2RpcikvJChsYW5nKS5wbykKKyAgICAgICAgICAjIENvbXB1dGUgVVBEQVRFUE9GSUxFUworICAgICAgICAgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQobGFuZykucG8tdXBkYXRlKQorICAgICAgICAgICMgQ29tcHV0ZSBEVU1NWVBPRklMRVMKKyAgICAgICAgICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKGxhbmcpLm5vcCkKKyAgICAgICAgICAjIENvbXB1dGUgR01PRklMRVMKKyAgICAgICAgICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHNyY2RpcikvJChsYW5nKS5nbW8pCisgICAgICAgICAgY2FzZSAiJGFjX2dpdmVuX3NyY2RpciIgaW4KKyAgICAgICAgICAgIC4pIHNyY2RpcnByZT0gOzsKKyAgICAgICAgICAgICopIHNyY2RpcnByZT0nJChzcmNkaXIpLycgOzsKKyAgICAgICAgICBlc2FjCisgICAgICAgICAgUE9GSUxFUz0KKyAgICAgICAgICBVUERBVEVQT0ZJTEVTPQorICAgICAgICAgIERVTU1ZUE9GSUxFUz0KKyAgICAgICAgICBHTU9GSUxFUz0KKyAgICAgICAgICBmb3IgbGFuZyBpbiAkQUxMX0xJTkdVQVM7IGRvCisgICAgICAgICAgICBQT0ZJTEVTPSIkUE9GSUxFUyAkc3JjZGlycHJlJGxhbmcucG8iCisgICAgICAgICAgICBVUERBVEVQT0ZJTEVTPSIkVVBEQVRFUE9GSUxFUyAkbGFuZy5wby11cGRhdGUiCisgICAgICAgICAgICBEVU1NWVBPRklMRVM9IiREVU1NWVBPRklMRVMgJGxhbmcubm9wIgorICAgICAgICAgICAgR01PRklMRVM9IiRHTU9GSUxFUyAkc3JjZGlycHJlJGxhbmcuZ21vIgorICAgICAgICAgIGRvbmUKKyAgICAgICAgICAjIENBVEFMT0dTIGRlcGVuZHMgb24gYm90aCAkYWNfZGlyIGFuZCB0aGUgdXNlcidzIExJTkdVQVMKKyAgICAgICAgICAjIGVudmlyb25tZW50IHZhcmlhYmxlLgorICAgICAgICAgIElOU1RfTElOR1VBUz0KKyAgICAgICAgICBpZiB0ZXN0IC1uICIkQUxMX0xJTkdVQVMiOyB0aGVuCisgICAgICAgICAgICBmb3IgcHJlc2VudGxhbmcgaW4gJEFMTF9MSU5HVUFTOyBkbworICAgICAgICAgICAgICB1c2VpdD1ubworICAgICAgICAgICAgICBpZiB0ZXN0ICIlVU5TRVQlIiAhPSAiJExJTkdVQVMiOyB0aGVuCisgICAgICAgICAgICAgICAgZGVzaXJlZGxhbmd1YWdlcz0iJExJTkdVQVMiCisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBkZXNpcmVkbGFuZ3VhZ2VzPSIkQUxMX0xJTkdVQVMiCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgIGZvciBkZXNpcmVkbGFuZyBpbiAkZGVzaXJlZGxhbmd1YWdlczsgZG8KKyAgICAgICAgICAgICAgICAjIFVzZSB0aGUgcHJlc2VudGxhbmcgY2F0YWxvZyBpZiBkZXNpcmVkbGFuZyBpcworICAgICAgICAgICAgICAgICMgICBhLiBlcXVhbCB0byBwcmVzZW50bGFuZywgb3IKKyAgICAgICAgICAgICAgICAjICAgYi4gYSB2YXJpYW50IG9mIHByZXNlbnRsYW5nIChiZWNhdXNlIGluIHRoaXMgY2FzZSwKKyAgICAgICAgICAgICAgICAjICAgICAgcHJlc2VudGxhbmcgY2FuIGJlIHVzZWQgYXMgYSBmYWxsYmFjayBmb3IgbWVzc2FnZXMKKyAgICAgICAgICAgICAgICAjICAgICAgd2hpY2ggYXJlIG5vdCB0cmFuc2xhdGVkIGluIHRoZSBkZXNpcmVkbGFuZyBjYXRhbG9nKS4KKyAgICAgICAgICAgICAgICBjYXNlICIkZGVzaXJlZGxhbmciIGluCisgICAgICAgICAgICAgICAgICAiJHByZXNlbnRsYW5nIiopIHVzZWl0PXllczs7CisgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgIGlmIHRlc3QgJHVzZWl0ID0geWVzOyB0aGVuCisgICAgICAgICAgICAgICAgSU5TVF9MSU5HVUFTPSIkSU5TVF9MSU5HVUFTICRwcmVzZW50bGFuZyIKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICBmaQorICAgICAgICAgIENBVEFMT0dTPQorICAgICAgICAgIGlmIHRlc3QgLW4gIiRJTlNUX0xJTkdVQVMiOyB0aGVuCisgICAgICAgICAgICBmb3IgbGFuZyBpbiAkSU5TVF9MSU5HVUFTOyBkbworICAgICAgICAgICAgICBDQVRBTE9HUz0iJENBVEFMT0dTICRsYW5nLmdtbyIKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICBmaQorICAgICAgICAgIHRlc3QgLW4gIiRhc19tZSIgJiYgZWNobyAiJGFzX21lOiBjcmVhdGluZyAkYWNfZGlyL01ha2VmaWxlIiB8fCBlY2hvICJjcmVhdGluZyAkYWNfZGlyL01ha2VmaWxlIgorICAgICAgICAgIHNlZCAtZSAiL15QT1RGSUxFUyA9L3IgJGFjX2Rpci9QT1RGSUxFUyIgLWUgIi9eIyBNYWtldmFycy9yICRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9NYWtldmFycyIgLWUgInN8QFBPRklMRVNAfCRQT0ZJTEVTfGciIC1lICJzfEBVUERBVEVQT0ZJTEVTQHwkVVBEQVRFUE9GSUxFU3xnIiAtZSAic3xARFVNTVlQT0ZJTEVTQHwkRFVNTVlQT0ZJTEVTfGciIC1lICJzfEBHTU9GSUxFU0B8JEdNT0ZJTEVTfGciIC1lICJzfEBDQVRBTE9HU0B8JENBVEFMT0dTfGciIC1lICJzfEBQT01BS0VGSUxFREVQU0B8JFBPTUFLRUZJTEVERVBTfGciICIkYWNfZGlyL01ha2VmaWxlLmluIiA+ICIkYWNfZGlyL01ha2VmaWxlIgorICAgICAgICAgIGZvciBmIGluICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIiL1J1bGVzLSo7IGRvCisgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZiI7IHRoZW4KKyAgICAgICAgICAgICAgY2FzZSAiJGYiIGluCisgICAgICAgICAgICAgICAgKi5vcmlnIHwgKi5iYWsgfCAqfikgOzsKKyAgICAgICAgICAgICAgICAqKSBjYXQgIiRmIiA+PiAiJGFjX2Rpci9NYWtlZmlsZSIgOzsKKyAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgZmkKKyAgICAgICAgICBkb25lCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgZG9uZSA7OworCisgIGVzYWMKK2RvbmUgIyBmb3IgYWNfdGFnCisKKworeyAoZXhpdCAwKTsgZXhpdCAwOyB9CitfQUNFT0YKK2NobW9kICt4ICRDT05GSUdfU1RBVFVTCithY19jbGVhbl9maWxlcz0kYWNfY2xlYW5fZmlsZXNfc2F2ZQorCisKKyMgY29uZmlndXJlIGlzIHdyaXRpbmcgdG8gY29uZmlnLmxvZywgYW5kIHRoZW4gY2FsbHMgY29uZmlnLnN0YXR1cy4KKyMgY29uZmlnLnN0YXR1cyBkb2VzIGl0cyBvd24gcmVkaXJlY3Rpb24sIGFwcGVuZGluZyB0byBjb25maWcubG9nLgorIyBVbmZvcnR1bmF0ZWx5LCBvbiBET1MgdGhpcyBmYWlscywgYXMgY29uZmlnLmxvZyBpcyBzdGlsbCBrZXB0IG9wZW4KKyMgYnkgY29uZmlndXJlLCBzbyBjb25maWcuc3RhdHVzIHdvbid0IGJlIGFibGUgdG8gd3JpdGUgdG8gaXQ7IGl0cworIyBvdXRwdXQgaXMgc2ltcGx5IGRpc2NhcmRlZC4gIFNvIHdlIGV4ZWMgdGhlIEZEIHRvIC9kZXYvbnVsbCwKKyMgZWZmZWN0aXZlbHkgY2xvc2luZyBjb25maWcubG9nLCBzbyBpdCBjYW4gYmUgcHJvcGVybHkgKHJlKW9wZW5lZCBhbmQKKyMgYXBwZW5kZWQgdG8gYnkgY29uZmlnLnN0YXR1cy4gIFdoZW4gY29taW5nIGJhY2sgdG8gY29uZmlndXJlLCB3ZQorIyBuZWVkIHRvIG1ha2UgdGhlIEZEIGF2YWlsYWJsZSBhZ2Fpbi4KK2lmIHRlc3QgIiRub19jcmVhdGUiICE9IHllczsgdGhlbgorICBhY19jc19zdWNjZXNzPToKKyAgYWNfY29uZmlnX3N0YXR1c19hcmdzPQorICB0ZXN0ICIkc2lsZW50IiA9IHllcyAmJgorICAgIGFjX2NvbmZpZ19zdGF0dXNfYXJncz0iJGFjX2NvbmZpZ19zdGF0dXNfYXJncyAtLXF1aWV0IgorICBleGVjIDU+L2Rldi9udWxsCisgICRTSEVMTCAkQ09ORklHX1NUQVRVUyAkYWNfY29uZmlnX3N0YXR1c19hcmdzIHx8IGFjX2NzX3N1Y2Nlc3M9ZmFsc2UKKyAgZXhlYyA1Pj5jb25maWcubG9nCisgICMgVXNlIHx8LCBub3QgJiYsIHRvIGF2b2lkIGV4aXRpbmcgZnJvbSB0aGUgaWYgd2l0aCAkPyA9IDEsIHdoaWNoCisgICMgd291bGQgbWFrZSBjb25maWd1cmUgZmFpbCBpZiB0aGlzIGlzIHRoZSBsYXN0IGluc3RydWN0aW9uLgorICAkYWNfY3Nfc3VjY2VzcyB8fCB7IChleGl0IDEpOyBleGl0IDE7IH0KK2ZpCisKKworZWNobworZWNobyBUeXBlIFwnbWFrZVwnIHRvIGNvbXBpbGUgcGFydGVkLgpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2NvbmZpZ3VyZS5hYyBiL3BhcnRlZC0xLjguNy9jb25maWd1cmUuYWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmMwOGNjNQotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9jb25maWd1cmUuYWMKQEAgLTAsMCArMSw1MjUgQEAKK2RubCBHTlUgUGFydGVkIC0gYSBsaWJyYXJ5IGFuZCBmcm9udCBlbmQgZm9yIG1hbmlwdWxhdGlvbiBoYXJkIGRpc2sgcGFydGl0aW9ucworZG5sIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwNSwgMjAwNiwgMjAwNworZG5sIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sCitkbmwgVGhpcyBmaWxlIG1heSBiZSBtb2RpZmllZCBhbmQvb3IgZGlzdHJpYnV0ZWQgd2l0aG91dCByZXN0cmljdGlvbi4KKworQUNfUFJFUkVRKDIuNjEpCitBQ19JTklUKFtHTlUgcGFydGVkXSxbMS44LjddLFtidWctcGFydGVkQGdudS5vcmddKQorCitBQ19DT05GSUdfU1JDRElSKGluY2x1ZGUvcGFydGVkL3BhcnRlZC5oKQorCitBQ19DT05GSUdfSEVBREVSUyhbbGliL2NvbmZpZy5oOmxpYi9jb25maWcuaC5pbl0pCitBQ19DT05GSUdfQVVYX0RJUihidWlsZC1hdXgpCisKK2RubCBWZXJzaW9uaW5nCitkbmwgU2hhbWVsZXNzbHkgcHVsbGVkIHN0cmFpZ2h0IGZyb20gZ2xpYidzIGNvbmZpZ3VyZS5pbiAuLi4KK2RubCBNYWtpbmcgcmVsZWFzZXM6CitkbmwgICAgUEVEX01JQ1JPX1ZFUlNJT04gKz0gMTsKK2RubCAgICBQRURfSU5URVJGQUNFX0FHRSArPSAxOworZG5sICAgIFBFRF9CSU5BUllfQUdFICs9IDE7CitkbmwgaWYgYW55IGZ1bmN0aW9ucyBoYXZlIGJlZW4gYWRkZWQsIHNldCBQRURfSU5URVJGQUNFX0FHRSB0byAwLgorZG5sIGlmIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGhhcyBiZWVuIGJyb2tlbiAoZWcuIGZ1bmN0aW9ucyByZW1vdmVkLAorZG5sIGZ1bmN0aW9uIHNpZ25hdHVyZXMgY2hhbmdlZCksCitkbmwgc2V0IFBFRF9CSU5BUllfQUdFIF9hbmRfIFBFRF9JTlRFUkZBQ0VfQUdFIHRvIDAuCitQRURfTUFKT1JfVkVSU0lPTj0xCitQRURfTUlOT1JfVkVSU0lPTj04CitQRURfTUlDUk9fVkVSU0lPTj03CitQRURfSU5URVJGQUNFX0FHRT0wCitQRURfQklOQVJZX0FHRT0wCitQRURfVkVSU0lPTl9TVUZGSVg9CitQRURfVkVSU0lPTj0kUEVEX01BSk9SX1ZFUlNJT04uJFBFRF9NSU5PUl9WRVJTSU9OLiRQRURfTUlDUk9fVkVSU0lPTiRQRURfVkVSU0lPTl9TVUZGSVgKKworTFRfUkVMRUFTRT0kUEVEX01BSk9SX1ZFUlNJT04uJFBFRF9NSU5PUl9WRVJTSU9OCitMVF9DVVJSRU5UPWBleHByICRQRURfTUlDUk9fVkVSU0lPTiAtICRQRURfSU5URVJGQUNFX0FHRWAKK0xUX1JFVklTSU9OPSRQRURfSU5URVJGQUNFX0FHRQorTFRfQUdFPWBleHByICRQRURfQklOQVJZX0FHRSAtICRQRURfSU5URVJGQUNFX0FHRWAKK0FDX1NVQlNUKExUX1JFTEVBU0UpCitBQ19TVUJTVChMVF9DVVJSRU5UKQorQUNfU1VCU1QoTFRfUkVWSVNJT04pCitBQ19TVUJTVChMVF9BR0UpCisKKyMgRW5zdXJlIHRoYXQgdGhlIFBFRF8qLXNwZWNpZmllZCB2ZXJzaW9uIGlzIHRoZSBzYW1lIGFzIHRoZSBsaXRlcmFsCisjIGluIHRoZSBBQ19JTklUIGxpbmUsIGFib3ZlLgordGVzdCAkUEFDS0FHRV9WRVJTSU9OID0gJFBFRF9WRVJTSU9OIHx8CisgIEFDX01TR19FUlJPUihjb25maWd1cmUuYWM6IHZlcnNpb24gbWlzbWF0Y2g6ICRQQUNLQUdFX1ZFUlNJT04gIT0gJFBFRF9WRVJTSU9OKQorCitBTV9JTklUX0FVVE9NQUtFKFsxLjEwIGRpc3QtYnppcDJdKQorCitBQ19DQU5PTklDQUxfSE9TVAorY2FzZSAiJGhvc3Rfb3MiIGluCisJbGludXgqKSBPUz1saW51eCA7OworCWdudSopCU9TPWdudSA7OworCWJlb3MqKQlPUz1iZW9zIDs7CisJKikJQUNfTVNHX0VSUk9SKFtVbmtub3duIG9yIHVuc3VwcG9ydGVkIE9TICIkaG9zdF9vcyIuICBPbmx5ICJsaW51eCIsICJnbnUiIGFuZCAiYmVvcyIgYXJlIHN1cHBvcnRlZCBpbiB0aGlzIHZlcnNpb24gb2YgR05VIFBhcnRlZC5dKSA7OworZXNhYworQUNfU1VCU1QoT1MpCisKK2RubCBDb21tYW5kLWxpbmUgb3B0aW9ucworQUNfQVJHX1dJVEgocmVhZGxpbmUsCisJWyAgLS13aXRoLXJlYWRsaW5lICAgICAgICAgc3VwcG9ydCBmYW5jeSBjb21tYW5kIGxpbmUgZWRpdGluZ10sICwKKwl3aXRoX3JlYWRsaW5lPXllcworKQorCitBQ19BUkdfRU5BQkxFKG10cmFjZSwKKwlbICAtLWVuYWJsZS1tdHJhY2UgICAgICAgICBlbmFibGUgbWFsbG9jKCkgZGVidWdnaW5nXSwgLAorCWVuYWJsZV9tdHJhY2U9bm8KKykKK2lmIHRlc3QgIiRlbmFibGVfbXRyYWNlIiA9IHllczsgdGhlbgorCUFDX0RFRklORShFTkFCTEVfTVRSQUNFLCAxLCBbTXRyYWNlIG1hbGxvYygpIGRlYnVnZ2luZ10pCitmaQorCitBQ19BUkdfRU5BQkxFKGRldmljZS1tYXBwZXIsCisJWyAgLS1lbmFibGUtZGV2aWNlLW1hcHBlciAgZW5hYmxlIGRldmljZSBtYXBwZXIgc3VwcG9ydCBbZGVmYXVsdD1ub11dLCAsCisJZW5hYmxlX2RldmljZV9tYXBwZXI9bm8KKykKK2lmIHRlc3QgIiRlbmFibGVfZGV2aWNlX21hcHBlciIgPSB5ZXM7IHRoZW4KKwlBQ19ERUZJTkUoRU5BQkxFX0RFVklDRV9NQVBQRVIsIDEsIFtkZXZpY2UgbWFwcGVyIChsaWJkZXZtYXBwZXIpIHN1cHBvcnRdKQorZmkKKworQUNfQVJHX0VOQUJMRShzZWxpbnV4LAorCVsgIC0tZW5hYmxlLXNlbGludXggICAgICAgIGVuYWJsZSBTRUxpbnV4IHN1cHBvcnQgW2RlZmF1bHQ9bm9dXSwgLAorCWVuYWJsZV9zZWxpbnV4PW5vCispCisKK0FDX0FSR19FTkFCTEUoZGlzY292ZXItb25seSwKKwlbICAtLWVuYWJsZS1kaXNjb3Zlci1vbmx5ICBzdXBwb3J0IG9ubHkgcmVhZGluZy9wcm9iaW5nIFtkZWZhdWx0PW5vXV0sICwKKwllbmFibGVfZGlzY292ZXJfb25seT1ubworKQoraWYgdGVzdCAiJGVuYWJsZV9kaXNjb3Zlcl9vbmx5IiA9IHllczsgdGhlbgorCUFDX0RFRklORShESVNDT1ZFUl9PTkxZLCAxLCBbUHJvYmluZyBmdW5jdGlvbmFsaXR5IG9ubHldKQorZmkKKworUEFSVEVEX0xJQlM9IiIKK0FDX0FSR19FTkFCTEUoZHluYW1pYy1sb2FkaW5nLAorWyAgLS1lbmFibGUtZHluYW1pYy1sb2FkaW5nICBzdXBwb3J0IGR5bmFtaWMgZnMgbGlicmFyaWVzIFtkZWZhdWx0PXllc11dLCAsCisJaWYgdGVzdCAiJGVuYWJsZV9kaXNjb3Zlcl9vbmx5IiA9IHllczsgdGhlbgorCQllbmFibGVfZHluYW1pY19sb2FkaW5nPW5vCisJZWxzZQorCQllbmFibGVfZHluYW1pY19sb2FkaW5nPXllcworCWZpCispCitpZiB0ZXN0ICIkZW5hYmxlX2Rpc2NvdmVyX29ubHkiID0geWVzIC1hICIkZW5hYmxlX2R5bmFtaWNfbG9hZGluZyIgPSB5ZXM7IHRoZW4KKwlBQ19NU0dfRVJST1IoCitbWW91IGNhbid0IHVzZSAtLWVuYWJsZS1keW5hbWljLWxvYWRpbmcgYW5kIC0tZGlzYWJsZS1kaXNjb3Zlci1vbmx5IHRvZ2V0aGVyXQorCSkKK2ZpCisKK0FDX0FSR19FTkFCTEUoZnMsCisJWyAgLS1lbmFibGUtZnMgICAgICAgICAgICAgaW5jbHVkZSBmaWxlc3lzdGVtIHN1cHBvcnQgW2RlZmF1bHQ9eWVzXV0sICwKKwllbmFibGVfZnM9eWVzCispCitpZiB0ZXN0ICIkZW5hYmxlX2ZzIiA9IHllczsgdGhlbgorCUFDX0RFRklORShFTkFCTEVfRlMsIDEsCisJCSAgW0luY2x1ZGUgZmlsZSBzeXN0ZW0gc3VwcG9ydC4gIGkuZS4gbGlicGFydGVkL2ZzXy4uLl0pCitmaQorCitBQ19BUkdfRU5BQkxFKGRlYnVnLAorCVsgIC0tZW5hYmxlLWRlYnVnICAgICAgICAgIGNvbXBpbGUgaW4gYXNzZXJ0aW9ucyBbZGVmYXVsdD15ZXNdXSwgLAorCWVuYWJsZV9kZWJ1Zz15ZXMKKykKKworaWYgdGVzdCAiJGVuYWJsZV9kZWJ1ZyIgPSB5ZXM7IHRoZW4KKwlBQ19ERUZJTkUoREVCVUcsIDEsIFtFbmFibGUgYXNzZXJ0aW9ucywgZXRjLl0pCitmaQorCitBQ19BUkdfRU5BQkxFKHJlYWQtb25seSwKKwlbICAtLWVuYWJsZS1yZWFkLW9ubHkgICAgICBkaXNhYmxlIHdyaXRpbmcgKGZvciBkZWJ1Z2dpbmcpIFtkZWZhdWx0PW5vXV0KKwksICwKKwllbmFibGVfcmVhZF9vbmx5PW5vCispCitpZiB0ZXN0ICIkZW5hYmxlX3JlYWRfb25seSIgPSB5ZXM7IHRoZW4KKwlBQ19ERUZJTkUoUkVBRF9PTkxZLCAxLCBbRGlzYWJsZSBhbGwgd3JpdGluZyBjb2RlXSkKK2ZpCisKK1BBUlRFRExERkxBR1M9CitBQ19TVUJTVChQQVJURURMREZMQUdTKQorCitBQ19BUkdfRU5BQkxFKHBjOTgsCisJWyAgLS1lbmFibGUtcGM5OCAgICAgICAgICBidWlsZCB3aXRoIHBjOTggc3VwcG9ydCBbZGVmYXVsdD15ZXNdXSwgLAorCWVuYWJsZV9wYzk4PXllcworKQoraWYgdGVzdCAiJGVuYWJsZV9wYzk4IiA9IHllczsgdGhlbgorCUFDX0RFRklORShFTkFCTEVfUEM5OCwgMSwKKwkJICBbSW5jbHVkZSBQQzk4IHBhcnRpdGlvbiB0YWJsZXMuICAoU29tZXRpbWVzIGV4Y2x1ZGVkIHRvIGF2b2lkCisJCSAgIGNvbGxpc2lvbnMgd2l0aCBtc2RvcyBwYXJ0aXRpb24gdGFibGVzXSkKK2ZpCisKK0FDX0FSR19FTkFCTEUoV2Vycm9yLAorCVsgIC0tZW5hYmxlLVdlcnJvciAgICAgICAgIGJ1aWxkIHdpdGggZ2NjIC1XZXJyb3IgW2RlZmF1bHQ9eWVzXV0sICwKKwllbmFibGVfV2Vycm9yPXllcworKQorCitBQ19BUkdfRU5BQkxFKGhmcy1leHRyYWN0LWZzLAorCVsgIC0tZW5hYmxlLWhmcy1leHRyYWN0LWZzIEV4dHJhY3Qgc3BlY2lhbCBIRlMgZmlsZXMgZm9yIGRlYnVnZ2luZyBbZGVmYXVsdD1ub11dLCAsCisJZW5hYmxlX2hmc19leHRyYWN0X2ZzPW5vCispCitpZiB0ZXN0ICIkZW5hYmxlX2hmc19leHRyYWN0X2ZzIiA9IHllczsgdGhlbgorICAgICAgIEFDX0RFRklORShIRlNfRVhUUkFDVF9GUywgMSwKKyAgICAgICAgICAgICAgICAgW0V4dHJhY3QgbG93IGxldmVsIHNwZWNpYWwgSEZTKCspIGZpbGVzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMKKyAgICAgICAgICAgICAgICAgIHdoZW4gdXNpbmcgdGhlICJjaGVjayIgY29tbWFuZCAoTk9UIEZPUiBQQUNLQUdJTkcpXSkKK2ZpCisKK2RubCBtYWtlIGxpYmMgdGhyZWFkc2FmZSAobm90IHJlcXVpcmVkIGZvciB1cywgYnV0IHVzZWZ1bCBvdGhlciB1c2VycyBvZgorZG5sIGxpYnBhcnRlZCkKK0FNX0NQUEZMQUdTPSIkQU1fQ1BQRkxBR1MgLURfUkVFTlRSQU5UIgorCitkbmwgQ2hlY2sgZm9yIHByb2dyYW1zLgorQUNfSVNDX1BPU0lYCitBQ19QUk9HX0NDCitBQ19QUk9HX0dDQ19UUkFESVRJT05BTAorQU1fUFJPR19DQ19DX08KKworZ2xfRUFSTFkKKworZG5sIFRoaXMgdGVzdCBtdXN0IGNvbWUgYXMgZWFybHkgYXMgcG9zc2libGUgYWZ0ZXIgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24KK2RubCB0ZXN0cywgYmVjYXVzZSB0aGUgY2hvaWNlIG9mIHRoZSBmaWxlIG1vZGVsIGNhbiAoaW4gcHJpbmNpcGxlKSBhZmZlY3QKK2RubCB3aGV0aGVyIGZ1bmN0aW9ucyBhbmQgaGVhZGVycyBhcmUgYXZhaWxhYmxlLCB3aGV0aGVyIHRoZXkgd29yaywgZXRjLgorQUNfU1lTX0xBUkdFRklMRQorCitnbF9JTklUCisKK0FDX0NIRUNLX1NJWkVPRihvZmZfdCwgNjQsIFsKKwkjaW5jbHVkZSA8c3RkaW8uaD4KKwkjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisJI2luY2x1ZGUgPHVuaXN0ZC5oPgorXSkKKworQU1fRU5BQkxFX1NIQVJFRAoraWYgdGVzdCAiJE9TIiA9IGxpbnV4IC1hICRhY19jdl9zaXplb2Zfb2ZmX3QgLWx0IDg7IHRoZW4KKwlkbmwgTmVlZCB0byBkaXNhYmxlIHNoYXJlZCBsaWJyYXJpZXMsIHRvIGdldCBsbHNlZWsoKSB0byB3b3JrLiAgTG9uZworCWRubCBzdG9yeS4gIFRoZSBzaG9ydCBzdG9yeSBpczogbHNlZWsoKSBpc24ndCBpbiBnbGliYywgc28gYSBzeXNjYWxsCisJZG5sIG11c3QgYmUgbWFkZS4gIHN5c2NhbGxzIGNhbid0IGJlIG1hZGUgZnJvbSB3aXRoaW4gc2hhcmVkIGxpYnJhcmllcywKKwlkbmwgYmVjYXVzZSBvZiBhIGJ1ZyAoPykgaW4gZ2NjLgorCUFDX01TR19XQVJOKAorb2ZmX3QgaXMgbGVzcyB0aGFuIDggYnl0ZXMuICBVc2luZyBsbHNlZWsgc3lzY2FsbCwgYW5kIGRpc2FibGluZyBzaGFyZWQKK2xpYnJhcmllcy4pCisJQU1fRElTQUJMRV9TSEFSRUQKK2ZpCitBTV9QUk9HX0xJQlRPT0wKKworQU1fR05VX0dFVFRFWFRfVkVSU0lPTihbMC4xNV0pCitBTV9HTlVfR0VUVEVYVChbZXh0ZXJuYWxdKQoraWYgdGVzdCAiJFVTRV9JTkNMVURFRF9MSUJJTlRMIiA9ICJ5ZXMiOyB0aGVuCisJQUNfTVNHX0VSUk9SKAorR05VIFBhcnRlZCByZXF1aXJlcyBnZXR0ZXh0IHRvIGJlIGluc3RhbGxlZCBmb3IgY29tcGlsYXRpb24gLQoraWYgbmF0aXZlIGxhbmd1YWdlIHN1cHBvcnQgaXMgZGVzaXJlZC4gIEVpdGhlciBkaXNhYmxlIG5hdGl2ZSBsYW5ndWFnZSBzdXBwb3J0Cit3aXRoOgorCSQgLi9jb25maWd1cmUgLS1kaXNhYmxlLW5scworT3IgaW5zdGFsbCBnZXR0ZXh0LiAgR05VIGdldHRleHQgaXMgYXZhaWxhYmxlIGZyb20KKwlodHRwOi8vZnRwLmdudS5vcmcvZ251L2dldHRleHQKKykKKwlleGl0CitmaQorCitkbmwgQ2hlY2sgZm9yIGxpYmRsLCBpZiB3ZSBhcmUgZG9pbmcgZHluYW1pYyBsb2FkaW5nCitETF9MSUJTPSIiCitpZiB0ZXN0ICIkZW5hYmxlX2R5bmFtaWNfbG9hZGluZyIgPSB5ZXM7IHRoZW4KKwlBQ19DSEVDS19MSUIoZGwsIGRsb3BlbiwKKwkJRExfTElCUz0iLWxkbCIKKwkJUEFSVEVEX0xJQlM9IiRQQVJURURfTElCUyAtbGRsIgorCQlBQ19ERUZJTkUoRFlOQU1JQ19MT0FESU5HLCAxLCBbTGF6eSBsaW5raW5nIHRvIGZzIGxpYnNdKSwKKwkJQUNfTVNHX0VSUk9SKAorCQkJWy1sZGwgbm90IGZvdW5kISAgVHJ5IHVzaW5nIC0tZGlzYWJsZS1keW5hbWljLWxvYWRpbmddCisJCSkKKwkJZXhpdAorCSkKK2ZpCitBQ19TVUJTVChETF9MSUJTKQorCitkbmwgQ2hlY2sgZm9yIGxpYnV1aWQKK1VVSURfTElCUz0iIgorQUNfQ0hFQ0tfTElCKHV1aWQsIHV1aWRfZ2VuZXJhdGUsIFVVSURfTElCUz0iLWx1dWlkIiwKKwlBQ19NU0dfRVJST1IoCitHTlUgUGFydGVkIHJlcXVpcmVzIGxpYnV1aWQgLSBhIHBhcnQgb2YgdGhlIGUyZnNwcm9ncyBwYWNrYWdlIChidXQKK3NvbWV0aW1lcyBkaXN0cmlidXRlZCBzZXBhcmF0ZWx5IGluIHV1aWQtZGV2ZWwgb3Igc2ltaWxhcikKK1RoaXMgY2FuIHByb2JhYmx5IGJlIGZvdW5kIG9uIHlvdXIgZGlzdHJpYnV0aW9uJ3MgQ0Qgb3IgRlRQIHNpdGUgb3IgYXQ6CisgICAgICAgICBodHRwOi8vd2ViLm1pdC5lZHUvdHl0c28vd3d3L2xpbnV4L2UyZnNwcm9ncy5odG1sCitOb3RlOiBpZiB5b3UgYXJlIHVzaW5nIHByZWNvbXBpbGVkIHBhY2thZ2VzIHlvdSB3aWxsIGFsc28gbmVlZCB0aGUgZGV2ZWxvcG1lbnQKK3BhY2thZ2UgYXMgd2VsbCAod2hpY2ggbWF5IGJlIGNhbGxlZCBlMmZzcHJvZ3MtZGV2ZWwgb3Igc29tZXRoaW5nIHNpbWlsYXIpLgorSWYgeW91IGNvbXBpbGUgZTJmc3Byb2dzIHlvdXJzZWxmIHRoZW4geW91IG5lZWQgdG8gZG8gJ21ha2UgaW5zdGFsbCcgYW5kCisnbWFrZSBpbnN0YWxsLWxpYnMnLgorCSkKKwlleGl0CispCitBQ19TVUJTVChVVUlEX0xJQlMpCisKK2RubCBDaGVjayBmb3IgbGliZGV2bWFwcGVyCitETV9MSUJTPSIiCitpZiB0ZXN0ICIkZW5hYmxlX2RldmljZV9tYXBwZXIiID0geWVzOyB0aGVuCisJQUNfQ0hFQ0tfTElCKGRldm1hcHBlciwgZG1fdGFza19jcmVhdGUsCisJCURNX0xJQlM9Ii1sZGV2bWFwcGVyIiwKKwkJQUNfTVNHX0VSUk9SKAorCQkJW2xpYmRldm1hcHBlciBub3QgZm91bmQhICBUcnkgdXNpbmcgLS1kaXNhYmxlLWRldmljZS1tYXBwZXJdCisJCSkKKwkJZXhpdAorCSkKK2ZpCitBQ19TVUJTVChETV9MSUJTKQorCitkbmwgQ2hlY2sgZm9yIFNFTGludXgKK1NFTElOVVhfTElCUz0iIgoraWYgdGVzdCAiJGVuYWJsZV9zZWxpbnV4IiA9IHllczsgdGhlbgorCVNFTElOVVhfTElCUz0iLWxzZWxpbnV4IC1sc2Vwb2wiCitmaQorQUNfU1VCU1QoU0VMSU5VWF9MSUJTKQorCitkbmwgQ2hlY2sgZm9yIGxpYnJlaXNlcmZzCitSRUlTRVJfTElCUz0iIgoraWYgdGVzdCAiJGVuYWJsZV9keW5hbWljX2xvYWRpbmciID0gbm8gLWEgIiRlbmFibGVfZGlzY292ZXJfb25seSIgPSBubzsgdGhlbgorCU9MRF9MSUJTPSIkTElCUyIKKwlBQ19DSEVDS19MSUIoZGFsLCBkYWxfZXF1YWxzLAorCQlMSUJTPSItbGRhbCIKKwkJQUNfQ0hFQ0tfTElCKHJlaXNlcmZzLCByZWlzZXJmc19mc19wcm9iZSwKKwkJCVJFSVNFUl9MSUJTPSItbGRhbCAtbHJlaXNlcmZzIgorCQkJQUNfREVGSU5FKEhBVkVfTElCUkVJU0VSRlMsIDEsIFtIYXZlIGxpYnJlaXNlcmZzXSkKKwkJKQorCQlBQ19DSEVDS19MSUIocmVpc2VyZnMsIHJlaXNlcmZzX2ZzX2NoZWNrLAorCQkJQUNfREVGSU5FKEhBVkVfUkVJU0VSRlNfRlNfQ0hFQ0ssIDEsIFtIYXZlIHJlaXNlcmZzX2ZzX2NoZWNrKCldKQorCQkpCisJKQorCUxJQlM9IiRPTERfTElCUyIKK2ZpCitBQ19TVUJTVChSRUlTRVJfTElCUykKKworZG5sIENoZWNrIGZvciB0ZXJtY2FwCitpZiB0ZXN0ICIkd2l0aF9yZWFkbGluZSIgPSB5ZXM7IHRoZW4KKwlPTERfTElCUz0iJExJQlMiCisJTElCUz0iIgorCUFDX1NFQVJDSF9MSUJTKHRnZXRlbnQsIHRpbmZvIG5jdXJzZXMgY3Vyc2VzIHRlcm1jYXAgdGVybWxpYiwKKwkJUEFSVEVEX0xJQlM9IiRQQVJURURfTElCUyAkTElCUyIsCisJCUFDX01TR19FUlJPUigKK3Rlcm1jYXAgY291bGQgbm90IGJlIGZvdW5kIHdoaWNoIGlzIHJlcXVpcmVkIGZvciB0aGUKKy0td2l0aC1yZWFkbGluZSBvcHRpb24gKHdoaWNoIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCkuICBFaXRoZXIgZGlzYWJsZSByZWFkbGluZQorc3VwcG9ydCB3aXRoIC0td2l0aG91dC1yZWFkbGluZSBvciBkb3dubG9hZCBhbmQgaW5zdGFsbCB0ZXJtY2FwIGZyb206CisJZnRwLmdudS5vcmcvZ251L3Rlcm1jYXAKK05vdGU6IGlmIHlvdSBhcmUgdXNpbmcgcHJlY29tcGlsZWQgcGFja2FnZXMgeW91IHdpbGwgYWxzbyBuZWVkIHRoZSBkZXZlbG9wbWVudAorICBwYWNrYWdlIGFzIHdlbGwgKHdoaWNoIG1heSBiZSBjYWxsZWQgdGVybWNhcC1kZXZlbCBvciBzb21ldGhpbmcgc2ltaWxhcikuCitOb3RlOiAobiljdXJzZXMgYWxzbyBzZWVtcyB0byB3b3JrIGFzIGEgc3Vic3RpdHV0ZSBmb3IgdGVybWNhcC4gIFRoaXMgd2FzCisgIG5vdCBmb3VuZCBlaXRoZXIgLSBidXQgeW91IGNvdWxkIHRyeSBpbnN0YWxsaW5nIHRoYXQgYXMgd2VsbC4KKykKKwlleGl0CisJKQorCUxJQlM9IiRPTERfTElCUyIKK2ZpCisKK2RubCBDaGVjayBmb3IgcmVhZGxpbmUKK2RubCBOT1RFOiBXZSBuZWVkIHRvIHJlbW92ZSB0aGUgZ2xfY3ZfaWdub3JlX3VudXNlZF9saWJyYXJpZXMgZmxhZyBpZiB3ZQorZG5sIGRldGVjdGVkIG9uZSBlYXJsaWVyLiAgbGlicmVhZGxpbmUgb24gc29tZSBwbGF0Zm9ybXMgKGUuZy4sIFJIRUwgYW5kCitkbmwgRmVkb3JhKSBpcyBsZWZ0IHdpdGggCitpZiB0ZXN0ICIkd2l0aF9yZWFkbGluZSIgPSB5ZXM7IHRoZW4KKwlPTERfTElCUz0iJExJQlMiCisJTElCUz0iJExJQlMgJFBBUlRFRF9MSUJTIgorCUFDX0NIRUNLX0xJQihyZWFkbGluZSwgcmVhZGxpbmUsCisJCVBBUlRFRF9MSUJTPSItbHJlYWRsaW5lICRQQVJURURfTElCUyIKKwkJQUNfREVGSU5FKEhBVkVfTElCUkVBRExJTkUsIDEsIFtoYXZlIHJlYWRsaW5lXSksCisJCUFDX01TR19FUlJPUigKK0dOVSBSZWFkbGluZSBjb3VsZCBub3QgYmUgZm91bmQgd2hpY2ggaXMgcmVxdWlyZWQgZm9yIHRoZQorLS13aXRoLXJlYWRsaW5lICh3aGljaCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQpLiAgRWl0aGVyIGRpc2FibGUgcmVhZGxpbmUgc3VwcG9ydCB3aXRoCistLXdpdGhvdXQtcmVhZGxpbmUgb3IgZG93bmxvYWRlZCBhbmQgaW5zdGFsbCBpdCBmcm9tOgorICAgICAgICBmdHAuZ251Lm9yZy9nbnUvcmVhZGxpbmUKK05vdGU6IGlmIHlvdSBhcmUgdXNpbmcgcHJlY29tcGlsZWQgcGFja2FnZXMgeW91IHdpbGwgYWxzbyBuZWVkIHRoZSBkZXZlbG9wbWVudAorcGFja2FnZSBhcyB3ZWxsICh3aGljaCBtYXkgYmUgY2FsbGVkIHJlYWRsaW5lLWRldmVsIG9yIHNvbWV0aGluZyBzaW1pbGFyKS4KKykKKwkJZXhpdCwKKwkJJFBBUlRFRF9MSUJTCisJKQorIAlMSUJTPSIkT0xEX0xJQlMiCitmaQorCitBQ19TVUJTVChQQVJURURfTElCUykKKworZG5sIENoZWNrIGZvciBPUyBzcGVjaWZpYyBsaWJyYXJpZXMKKworZG5sIEdOVS9IdXJkOgoraWYgdGVzdCAiJE9TIiA9IGdudTsgdGhlbgorZG5sIGxpYnNob3VsZGJlaW5saWJjCisJQUNfQ0hFQ0tfTElCKHNob3VsZGJlaW5saWJjLCB2bV9kZWFsbG9jYXRlLAorCQlPU19MSUJTPSIkT1NfTElCUyAtbHNob3VsZGJlaW5saWJjIiwKKwkJQUNfTVNHX0VSUk9SKAorR05VIFBhcnRlZCByZXF1aXJlcyBsaWJzaG91bGRiZWlubGliYyB3aGVuIHJ1bm5pbmcgb24KK0dOVS9IdXJkIHN5c3RlbXMuICBJdCBpcyBhIHN0YW5kYXJkIHBhcnQgb2YgYSBHTlUvSHVyZCBzeXN0ZW0uCisJCSkKKwkJZXhpdAorCSkKKworZG5sIGxpYnN0b3JlIG1heSBkZXBlbmQgb24gbGlicGFydGVkIGJlaW5nIHByZXNlbnQuCitkbmwgQXJlbid0IGNpcmN1bGFyIGRlcGVuZGVuY2llcyB3b25kZXJmdWw/CisJT0xEX0xJQlM9IiRMSUJTIgorCUxJQlM9CisKKwlBQ19DSEVDS19MSUIocGFydGVkLCBwZWRfZGV2aWNlX3JlYWQpCisKK2RubCBsaWJzdG9yZQorCUFDX0NIRUNLX0xJQihzdG9yZSwgc3RvcmVfb3BlbiwKKwkJT1NfTElCUz0iJE9TX0xJQlMgLWxzdG9yZSIsCisJCUFDX01TR19FUlJPUigKK0dOVSBQYXJ0ZWQgcmVxdWlyZXMgbGlic3RvcmUgd2hlbiBydW5uaW5nIG9uIEdOVS9IdXJkCitzeXN0ZW1zLiAgSXQgaXMgYSBzdGFuZGFyZCBwYXJ0IG9mIGEgR05VL0h1cmQgc3lzdGVtLgorCQkpCisJCWV4aXQsCisJCSRPU19MSUJTICRVVUlEX0xJQlMgJERNX0xJQlMgJExJQlMKKwkpCisJTElCUz0iJE9MRF9MSUJTIgorZmkKKworZG5sIEJlT1MvWkVUQS9IYWlrdToKKworaWYgdGVzdCAiJE9TIiA9IGJlb3M7IHRoZW4KKwlkbmwgSW5jbHVkZSB0aGUgc29ja2V0IGxpYnJhcnksIGFzIGl0IGlzIGEgZGVwZWRlbmN5IG9mIGxpYnV1aWQKKwlkbmwgYW5kIHNvIGFsc28gb2YgdXMgKGR1ZSB0byBzb2NrZXQoKSBjYWxsIGluIGxpYnV1aWQpCisJT1NfTElCUz0iJE9TX0xJQlMgLWxzb2NrZXQiCitmaQorCitBQ19TVUJTVChPU19MSUJTKQorCitkbmwgT25lIGRheSwgZ2V0dGV4dCBtaWdodCBzdXBwb3J0IGxpYnRvb2wuLi4KK2RubCBpZiB0ZXN0ICIkVVNFX0lOQ0xVREVEX0xJQklOVEwiID0gInllcyI7IHRoZW4KK2RubAlJTlRMSU5DUz0nLUkkKHRvcF9zcmNkaXIpL2ludGwnCitkbmwgZmkKK0FDX1NVQlNUKElOVExJTkNTKQorCisKK2RubCBDaGVja3MgZm9yIGhlYWRlciBmaWxlcy4KK0FDX0NIRUNLX0hFQURFUih1dWlkL3V1aWQuaCwgLAorCUFDX01TR19FUlJPUigKK0dOVSBQYXJ0ZWQgcmVxdWlyZXMgbGlidXVpZCAtIGEgcGFydCBvZiB0aGUgZTJmc3Byb2dzIHBhY2thZ2UuCitZb3Ugc2VlbSB0byBoYXZlIHRoZSBsaWJyYXJ5IGluc3RhbGxlZCBidXQgbm90IHRoZSBoZWFkZXJzLiAgVGhlc2UgYXJlIHVzdWFsbHkKK2ZvdW5kIGluIGEgY29ycmVzcG9uZGluZyBkZXZlbG9wbWVudCBwYWNrYWdlICh1c3VhbGx5IGNhbGxlZCBlMmZzcHJvZ3MtZGV2ZWwpLgorSWYgeW91IGNhbid0IGZpbmQgb25lIHRyeToKKyAgICAgICAgaHR0cDovL3dlYi5taXQuZWR1L3R5dHNvL3d3dy9saW51eC9lMmZzcHJvZ3MuaHRtbAorKQorCWV4aXQKKykKKworQUNfQ0hFQ0tfSEVBREVSUyhnZXRvcHQuaCkKKworZG5sIHJlcXVpcmVkIGZvciBsaWJwYXJ0ZWQvbGxzZWVrLmMgIChUT0RPOiBtYWtlIGxpbnV4LXg4NiBvbmx5KQoraWYgdGVzdCAiJE9TIiA9IGxpbnV4OyB0aGVuCisJQUNfQ0hFQ0tfSEVBREVSKGxpbnV4L3VuaXN0ZC5oKQorZmkKKworaWYgdGVzdCAiJHdpdGhfcmVhZGxpbmUiID0geWVzOyB0aGVuCisJQUNfQ0hFQ0tfSEVBREVSUyhyZWFkbGluZS9yZWFkbGluZS5oIHJlYWRsaW5lL2hpc3RvcnkuaCwgLAorCQlBQ19NU0dfRVJST1IoCitUaGUgaGVhZGVycyBmb3IgR05VIFJlYWRsaW5lIGNvdWxkIG5vdCBiZSBmb3VuZCB3aGljaAorYXJlIHJlcXVpcmVkIGZvciB0aGUgLS13aXRoLXJlYWRsaW5lIG9wdGlvbi4gIFlvdSBzZWVtIHRvIGhhdmUgdGhlIEdOVSByZWFkbGluZQorbGlicmFyeSBpbnN0YWxsZWQgYnV0IG5vdCB0aGUgaGVhZGVycy4gIFRoZXNlIGFyZSB1c3VhbGx5IGZvdW5kIGluIGEKK2NvcnJlc3BvbmRpbmcgZGV2ZWxvcG1lbnQgcGFja2FnZSAodXN1YWxseSBjYWxsZWQgcmVhZGxpbmUtZGV2ZWwpLiAgSWYgeW91IGNhbid0CitmaW5kIG9uZSB0cnk6CisgICAgICAgIGZ0cC5nbnUub3JnL2dudS9yZWFkbGluZQorQWx0ZXJuYXRpdmVseSB5b3UgY2FuIGRpc2FibGUgcmVhZGxpbmUgc3VwcG9ydCB3aXRoIC0td2l0aG91dC1yZWFkbGluZQorKQorCWV4aXQKKwkpCitmaQorCitBQ19DSEVDS19IRUFERVJTKHRlcm1jYXAuaCkKKworaWYgdGVzdCAiJFVTRV9OTFMiID0geWVzOyB0aGVuCisJQUNfQ0hFQ0tfSEVBREVSUyh3Y3R5cGUuaCwgLAorCQlBQ19NU0dfRVJST1IoCitPbmUgb3IgbW9yZSBvZiB0aGUgaGVhZGVyIGZpbGVzIHRoYXQgYXJlIHJlcXVpcmVkIGZvcgorbmF0aXZlIGxhbmd1YWdlIHN1cHBvcnQgKHdjdHlwZS5oKSBjb3VsZCBub3QgYmUgZm91bmQuICBFaXRoZXIgZ2V0IGEgbmV3ZXIKK3ZlcnNpb24gb2YgR05VIGxpYmMgYW5kIGl0cyBoZWFkZXJzIC0gd2hpY2ggY2FuIGJlIG9idGFpbmVkIGZyb206CisJZnRwLmdudS5vcmcvZ251L2dsaWJjCitPciBkaXNhYmxlIG5hdGl2ZSBsYW5ndWFnZSBzdXBwb3J0IHdpdGggdGhlIC0tZGlzYWJsZS1ubHMgb3B0aW9uCispCisJZXhpdAorCSkKK2ZpCisKK0FDX0NIRUNLX0hFQURFUihbZXhlY2luZm8uaF0sIFsKKwlBQ19DSEVDS19MSUIoYywgYmFja3RyYWNlLCBbCisJCUFDX0RFRklORShIQVZFX0JBQ0tUUkFDRSwgMSwgW0hhcyBiYWNrdHJhY2Ugc3VwcG9ydF0pCisJCUxERkxBR1M9IiRMREZMQUdTIC1yZHluYW1pYyIKKwldKQorXSkKKworZG5sIENoZWNrcyBmb3IgI2RlZmluZXMuCitBQ19DT01QSUxFX0lGRUxTRShbCisJQUNfTEFOR19QUk9HUkFNKFtbCisJI2lmIGRlZmluZWQgX19zMzkwX18gfHwgZGVmaW5lZCBfX3MzOTB4X18KKwkjICBtZXNzYWdlIHMzOTAgZGVmaW5lZAorCSNlbmRpZgorCV1dKV0sIFtjb21waWxlX2Zvcl9zMzkwPSJubyJdLCBbY29tcGlsZV9mb3JfczM5MD0ieWVzIl0pCitBTV9DT05ESVRJT05BTChbQ09NUElMRV9GT1JfUzM5MF0sIFt0ZXN0ICIkY29tcGlsZV9mb3JfczM5MCIgPSAieWVzIl0pCisKK2RubCBjaGVjayBmb3IgImNoZWNrIiwgdW5pdCB0ZXN0aW5nIGxpYnJhcnkvaGVhZGVyCitQS0dfQ0hFQ0tfTU9EVUxFUyhbQ0hFQ0tdLCBbY2hlY2sgPj0gMC45LjNdLCBoYXZlX2NoZWNrPXllcywgaGF2ZV9jaGVjaz1ubykKK2lmIHRlc3QgIiRoYXZlX3NjaW50aWxsYSIgIT0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFtVbmFibGUgdG8gbG9jYXRlIGNoZWNrIHZlcnNpb24gMC45LjMgb3IgaGlnaGVyOiBub3QgYnVpbGRpbmddKQorZmkKK0FNX0NPTkRJVElPTkFMKFtIQVZFX0NIRUNLXSwgW3Rlc3QgIiRoYXZlX2NoZWNrIiA9IHllc10pCisKK2RubCBDaGVja3MgZm9yIHR5cGVkZWZzLCBzdHJ1Y3R1cmVzIGFuZCBjb21waWxlciBjaGFyYWN0ZXJpc3RpY3MuCitBQ19QUk9HX0xECisKK0FDX0NfQklHRU5ESUFOCitBQ19DX0lOTElORQorQUNfQ19DT05TVAorQUNfQ19SRVNUUklDVAorCisKK2RubCBDaGVja3MgZm9yIGxpYnJhcnkgZnVuY3Rpb25zLgorQUNfQ0hFQ0tfRlVOQ1Moc2lnYWN0aW9uKQorQUNfQ0hFQ0tfRlVOQ1MoZ2V0dWlkKQorCitkbmwgTk9URTogV2UgbmVlZCB0byByZW1vdmUgdGhlIGdsX2N2X2lnbm9yZV91bnVzZWRfbGlicmFyaWVzIGZsYWcgaWYgd2UKK2RubCBkZXRlY3RlZCBvbmUgZWFybGllci4gIGxpYnJlYWRsaW5lIG9uIHNvbWUgcGxhdGZvcm1zIChlLmcuLCBSSEVMIGFuZAorZG5sIEZlZG9yYSkgaXMgbGVmdCB3aXRoIAoraWYgdGVzdCAiJHdpdGhfcmVhZGxpbmUiID0geWVzOyB0aGVuCisJT0xEX0xJQlM9IiRMSUJTIgorCUxJQlM9IiRMSUJTICRQQVJURURfTElCUyAtbHJlYWRsaW5lIgorCUFDX0NIRUNLX0ZVTkNTKHJsX2NvbXBsZXRpb25fbWF0Y2hlcykKKwlMSUJTPSIkT0xEX0xJQlMiCitmaQorCitBQ19DSEVDS19GVU5DUyhjYW5vbmljYWxpemVfZmlsZV9uYW1lKQorCisjIENGTEFHUz0iJENGTEFHUyAtVyAtV2FsbCAtV25vLXVudXNlZCAtV25vLXN3aXRjaCAtV25vLWZvcm1hdCIKKworaWYgdGVzdCAiJGVuYWJsZV9XZXJyb3IiID0geWVzOyB0aGVuCisJQ0ZMQUdTPSIkQ0ZMQUdTIC1XZXJyb3IiCitmaQorCitEQVRFPSQoZGF0ZSAnKyVkICViICVZICVIOiVNJykKK1VTRVI9JCh3aG9hbWkpCitIT1NUPSQoaG9zdG5hbWUpCitCVUlMRElORk89IiRVU0VSQCRIT1NULCAkREFURSIKK0FDX1NVQlNUKEJVSUxESU5GTykKKworQUNfT1VUUFVUKFsKK01ha2VmaWxlCitsaWIvTWFrZWZpbGUKK2luY2x1ZGUvTWFrZWZpbGUKK2luY2x1ZGUvcGFydGVkL01ha2VmaWxlCitsaWJwYXJ0ZWQvTWFrZWZpbGUKK2xpYnBhcnRlZC9sYWJlbHMvTWFrZWZpbGUKK2xpYnBhcnRlZC9mcy9NYWtlZmlsZQorbGlicGFydGVkL2ZzL2FtaWdhL01ha2VmaWxlCitsaWJwYXJ0ZWQvZnMvZXh0Mi9NYWtlZmlsZQorbGlicGFydGVkL2ZzL2ZhdC9NYWtlZmlsZQorbGlicGFydGVkL2ZzL2hmcy9NYWtlZmlsZQorbGlicGFydGVkL2ZzL2pmcy9NYWtlZmlsZQorbGlicGFydGVkL2ZzL2xpbnV4X3N3YXAvTWFrZWZpbGUKK2xpYnBhcnRlZC9mcy9udGZzL01ha2VmaWxlCitsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvTWFrZWZpbGUKK2xpYnBhcnRlZC9mcy91ZnMvTWFrZWZpbGUKK2xpYnBhcnRlZC9mcy94ZnMvTWFrZWZpbGUKK2xpYnBhcnRlZC90ZXN0cy9NYWtlZmlsZQorbGlicGFydGVkLnBjCitwYXJ0ZWQvTWFrZWZpbGUKK3BhcnRwcm9iZS9NYWtlZmlsZQorZG9jL01ha2VmaWxlCitkb2MvQy9NYWtlZmlsZQorZG9jL3B0X0JSL01ha2VmaWxlCitkZWJ1Zy9NYWtlZmlsZQorZGVidWcvY2xlYXJmYXQvTWFrZWZpbGUKK2RlYnVnL3Rlc3QvTWFrZWZpbGUKK3Rlc3RzL01ha2VmaWxlCitwby9NYWtlZmlsZS5pbgorXSkKKworZWNobworZWNobyBUeXBlIFwnbWFrZVwnIHRvIGNvbXBpbGUgcGFydGVkLgpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2RlYnVnL01ha2VmaWxlLmFtIGIvcGFydGVkLTEuOC43L2RlYnVnL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhMWU0NTIKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvZGVidWcvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSwzIEBACitTVUJESVJTID0gY2xlYXJmYXQgdGVzdAorCitNQUlOVEFJTkVSQ0xFQU5GSUxFUyA9IE1ha2VmaWxlLmluCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvZGVidWcvTWFrZWZpbGUuaW4gYi9wYXJ0ZWQtMS44LjcvZGVidWcvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIyMjg4MAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9kZWJ1Zy9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDY3MSBAQAorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xMCBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorc3ViZGlyID0gZGVidWcKK0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbgorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvbTQvYWJzb2x1dGUtaGVhZGVyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2FsbG9jYS5tNCAkKHRvcF9zcmNkaXIpL200L2Fzc2VydC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9hdGV4aXQubTQgJCh0b3Bfc3JjZGlyKS9tNC9jYWxsb2MubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY2xvc2Utc3RyZWFtLm00ICQodG9wX3NyY2RpcikvbTQvY2xvc2VvdXQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY29kZXNldC5tNCAkKHRvcF9zcmNkaXIpL200L2NvbmZpZy1oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2Rpcm5hbWUubTQgJCh0b3Bfc3JjZGlyKS9tNC9kb3MubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZG91YmxlLXNsYXNoLXJvb3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZXJyb3IubTQgJCh0b3Bfc3JjZGlyKS9tNC9leGl0ZmFpbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9leHRlbnNpb25zLm00ICQodG9wX3NyY2RpcikvbTQvZnBlbmRpbmcubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZnJlZS5tNCAkKHRvcF9zcmNkaXIpL200L2dldG9wdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00ICQodG9wX3NyY2RpcikvbTQvZ2xpYmMyMS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9nbnVsaWItY29tbW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2dudWxpYi1jb21wLm00ICQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaW5saW5lLm00ICQodG9wX3NyY2RpcikvbTQvaW50dHlwZXMtcHJpLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ludHR5cGVzLm00ICQodG9wX3NyY2RpcikvbTQvbGliLWlnbm9yZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xvY2FsY2hhcnNldC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sb25nLW9wdGlvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9sb25nbG9uZy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tYnJ0b3djLm00ICQodG9wX3NyY2RpcikvbTQvbWJzdGF0ZV90Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21lbWNoci5tNCAkKHRvcF9zcmNkaXIpL200L21lbWNtcC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tZW1jcHkubTQgJCh0b3Bfc3JjZGlyKS9tNC9tZW1tb3ZlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21lbXNldC5tNCAkKHRvcF9zcmNkaXIpL200L25scy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCAkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3F1b3RlYXJnLm00ICQodG9wX3NyY2RpcikvbTQvcmVnZXgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcmVuYW1lLm00ICQodG9wX3NyY2RpcikvbTQvcnBtYXRjaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zYWZlLXJlYWQubTQgJCh0b3Bfc3JjZGlyKS9tNC9zYWZlLXdyaXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3NzaXplX3QubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGRhcmcubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RkYm9vbC5tNCAkKHRvcF9zcmNkaXIpL200L3N0ZGludC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdGRsaWJfaC5tNCAkKHRvcF9zcmNkaXIpL200L3N0cmNzcG4ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RyaW5nX2gubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHJuZHVwLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0cm5sZW4ubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHJ0b2QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RydG9sLm00ICQodG9wX3NyY2RpcikvbTQvdW5pc3RkX2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdXRpbWJ1Zi5tNCAkKHRvcF9zcmNkaXIpL200L3V0aW1lLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3V0aW1lcy1udWxsLm00ICQodG9wX3NyY2RpcikvbTQvd2NoYXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvd2N0eXBlLm00ICQodG9wX3NyY2RpcikvbTQvd2ludF90Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3hhbGxvYy5tNCAkKHRvcF9zcmNkaXIpL200L3hzdHJuZHVwLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitTT1VSQ0VTID0KK0RJU1RfU09VUkNFUyA9CitSRUNVUlNJVkVfVEFSR0VUUyA9IGFsbC1yZWN1cnNpdmUgY2hlY2stcmVjdXJzaXZlIGR2aS1yZWN1cnNpdmUgXAorCWh0bWwtcmVjdXJzaXZlIGluZm8tcmVjdXJzaXZlIGluc3RhbGwtZGF0YS1yZWN1cnNpdmUgXAorCWluc3RhbGwtZHZpLXJlY3Vyc2l2ZSBpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlIFwKKwlpbnN0YWxsLWh0bWwtcmVjdXJzaXZlIGluc3RhbGwtaW5mby1yZWN1cnNpdmUgXAorCWluc3RhbGwtcGRmLXJlY3Vyc2l2ZSBpbnN0YWxsLXBzLXJlY3Vyc2l2ZSBpbnN0YWxsLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZSBpbnN0YWxsZGlycy1yZWN1cnNpdmUgcGRmLXJlY3Vyc2l2ZSBcCisJcHMtcmVjdXJzaXZlIHVuaW5zdGFsbC1yZWN1cnNpdmUKK1JFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTID0gbW9zdGx5Y2xlYW4tcmVjdXJzaXZlIGNsZWFuLXJlY3Vyc2l2ZQlcCisgIGRpc3RjbGVhbi1yZWN1cnNpdmUgbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUKK0VUQUdTID0gZXRhZ3MKK0NUQUdTID0gY3RhZ3MKK0RJU1RfU1VCRElSUyA9ICQoU1VCRElSUykKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitBQlNPTFVURV9JTlRUWVBFU19IID0gQEFCU09MVVRFX0lOVFRZUEVTX0hACitBQlNPTFVURV9TVERJTlRfSCA9IEBBQlNPTFVURV9TVERJTlRfSEAKK0FCU09MVVRFX1NURExJQl9IID0gQEFCU09MVVRFX1NURExJQl9IQAorQUJTT0xVVEVfU1RSSU5HX0ggPSBAQUJTT0xVVEVfU1RSSU5HX0hACitBQlNPTFVURV9VTklTVERfSCA9IEBBQlNPTFVURV9VTklTVERfSEAKK0FCU09MVVRFX1dDSEFSX0ggPSBAQUJTT0xVVEVfV0NIQVJfSEAKK0FCU09MVVRFX1dDVFlQRV9IID0gQEFCU09MVVRFX1dDVFlQRV9IQAorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQUxMT0NBID0gQEFMTE9DQUAKK0FMTE9DQV9IID0gQEFMTE9DQV9IQAorQU1UQVIgPSBAQU1UQVJACitBUiA9IEBBUkAKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBV0sgPSBAQVdLQAorQklUU0laRU9GX1BUUkRJRkZfVCA9IEBCSVRTSVpFT0ZfUFRSRElGRl9UQAorQklUU0laRU9GX1NJR19BVE9NSUNfVCA9IEBCSVRTSVpFT0ZfU0lHX0FUT01JQ19UQAorQklUU0laRU9GX1NJWkVfVCA9IEBCSVRTSVpFT0ZfU0laRV9UQAorQklUU0laRU9GX1dDSEFSX1QgPSBAQklUU0laRU9GX1dDSEFSX1RACitCSVRTSVpFT0ZfV0lOVF9UID0gQEJJVFNJWkVPRl9XSU5UX1RACitCVUlMRElORk8gPSBAQlVJTERJTkZPQAorQ0MgPSBAQ0NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NIRUNLX0NGTEFHUyA9IEBDSEVDS19DRkxBR1NACitDSEVDS19MSUJTID0gQENIRUNLX0xJQlNACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitETF9MSUJTID0gQERMX0xJQlNACitETV9MSUJTID0gQERNX0xJQlNACitFQ0hPID0gQEVDSE9ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VYRUVYVCA9IEBFWEVFWFRACitGNzcgPSBARjc3QAorRkZMQUdTID0gQEZGTEFHU0AKK0dFVE9QVF9IID0gQEdFVE9QVF9IQAorR0xJQkMyMSA9IEBHTElCQzIxQAorR01TR0ZNVCA9IEBHTVNHRk1UQAorR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACitHTlVMSUJfQ0hPV04gPSBAR05VTElCX0NIT1dOQAorR05VTElCX0RVUDIgPSBAR05VTElCX0RVUDJACitHTlVMSUJfRkNIRElSID0gQEdOVUxJQl9GQ0hESVJACitHTlVMSUJfRlRSVU5DQVRFID0gQEdOVUxJQl9GVFJVTkNBVEVACitHTlVMSUJfR0VUQ1dEID0gQEdOVUxJQl9HRVRDV0RACitHTlVMSUJfR0VUTE9HSU5fUiA9IEBHTlVMSUJfR0VUTE9HSU5fUkAKK0dOVUxJQl9HRVRTVUJPUFQgPSBAR05VTElCX0dFVFNVQk9QVEAKK0dOVUxJQl9JTUFYQUJTID0gQEdOVUxJQl9JTUFYQUJTQAorR05VTElCX0lNQVhESVYgPSBAR05VTElCX0lNQVhESVZACitHTlVMSUJfTUJTQ0FTRUNNUCA9IEBHTlVMSUJfTUJTQ0FTRUNNUEAKK0dOVUxJQl9NQlNDQVNFU1RSID0gQEdOVUxJQl9NQlNDQVNFU1RSQAorR05VTElCX01CU0NIUiA9IEBHTlVMSUJfTUJTQ0hSQAorR05VTElCX01CU0NTUE4gPSBAR05VTElCX01CU0NTUE5ACitHTlVMSUJfTUJTTEVOID0gQEdOVUxJQl9NQlNMRU5ACitHTlVMSUJfTUJTTkNBU0VDTVAgPSBAR05VTElCX01CU05DQVNFQ01QQAorR05VTElCX01CU1BCUksgPSBAR05VTElCX01CU1BCUktACitHTlVMSUJfTUJTUENBU0VDTVAgPSBAR05VTElCX01CU1BDQVNFQ01QQAorR05VTElCX01CU1JDSFIgPSBAR05VTElCX01CU1JDSFJACitHTlVMSUJfTUJTU0VQID0gQEdOVUxJQl9NQlNTRVBACitHTlVMSUJfTUJTU1BOID0gQEdOVUxJQl9NQlNTUE5ACitHTlVMSUJfTUJTU1RSID0gQEdOVUxJQl9NQlNTVFJACitHTlVMSUJfTUJTVE9LX1IgPSBAR05VTElCX01CU1RPS19SQAorR05VTElCX01FTU1FTSA9IEBHTlVMSUJfTUVNTUVNQAorR05VTElCX01FTVBDUFkgPSBAR05VTElCX01FTVBDUFlACitHTlVMSUJfTUVNUkNIUiA9IEBHTlVMSUJfTUVNUkNIUkAKK0dOVUxJQl9NS0RURU1QID0gQEdOVUxJQl9NS0RURU1QQAorR05VTElCX01LU1RFTVAgPSBAR05VTElCX01LU1RFTVBACitHTlVMSUJfUkVBRExJTksgPSBAR05VTElCX1JFQURMSU5LQAorR05VTElCX1NMRUVQID0gQEdOVUxJQl9TTEVFUEAKK0dOVUxJQl9TVFBDUFkgPSBAR05VTElCX1NUUENQWUAKK0dOVUxJQl9TVFBOQ1BZID0gQEdOVUxJQl9TVFBOQ1BZQAorR05VTElCX1NUUkNBU0VTVFIgPSBAR05VTElCX1NUUkNBU0VTVFJACitHTlVMSUJfU1RSQ0hSTlVMID0gQEdOVUxJQl9TVFJDSFJOVUxACitHTlVMSUJfU1RSRFVQID0gQEdOVUxJQl9TVFJEVVBACitHTlVMSUJfU1RSTkRVUCA9IEBHTlVMSUJfU1RSTkRVUEAKK0dOVUxJQl9TVFJOTEVOID0gQEdOVUxJQl9TVFJOTEVOQAorR05VTElCX1NUUlBCUksgPSBAR05VTElCX1NUUlBCUktACitHTlVMSUJfU1RSU0VQID0gQEdOVUxJQl9TVFJTRVBACitHTlVMSUJfU1RSVE9JTUFYID0gQEdOVUxJQl9TVFJUT0lNQVhACitHTlVMSUJfU1RSVE9LX1IgPSBAR05VTElCX1NUUlRPS19SQAorR05VTElCX1NUUlRPVU1BWCA9IEBHTlVMSUJfU1RSVE9VTUFYQAorR1JFUCA9IEBHUkVQQAorSEFWRV9ERUNMX0dFVExPR0lOX1IgPSBASEFWRV9ERUNMX0dFVExPR0lOX1JACitIQVZFX0RFQ0xfSU1BWEFCUyA9IEBIQVZFX0RFQ0xfSU1BWEFCU0AKK0hBVkVfREVDTF9JTUFYRElWID0gQEhBVkVfREVDTF9JTUFYRElWQAorSEFWRV9ERUNMX01FTU1FTSA9IEBIQVZFX0RFQ0xfTUVNTUVNQAorSEFWRV9ERUNMX01FTVJDSFIgPSBASEFWRV9ERUNMX01FTVJDSFJACitIQVZFX0RFQ0xfU1RSRFVQID0gQEhBVkVfREVDTF9TVFJEVVBACitIQVZFX0RFQ0xfU1RSTkNBU0VDTVAgPSBASEFWRV9ERUNMX1NUUk5DQVNFQ01QQAorSEFWRV9ERUNMX1NUUk5EVVAgPSBASEFWRV9ERUNMX1NUUk5EVVBACitIQVZFX0RFQ0xfU1RSTkxFTiA9IEBIQVZFX0RFQ0xfU1RSTkxFTkAKK0hBVkVfREVDTF9TVFJUT0lNQVggPSBASEFWRV9ERUNMX1NUUlRPSU1BWEAKK0hBVkVfREVDTF9TVFJUT0tfUiA9IEBIQVZFX0RFQ0xfU1RSVE9LX1JACitIQVZFX0RFQ0xfU1RSVE9VTUFYID0gQEhBVkVfREVDTF9TVFJUT1VNQVhACitIQVZFX0RVUDIgPSBASEFWRV9EVVAyQAorSEFWRV9GVFJVTkNBVEUgPSBASEFWRV9GVFJVTkNBVEVACitIQVZFX0dFVFNVQk9QVCA9IEBIQVZFX0dFVFNVQk9QVEAKK0hBVkVfSU5UVFlQRVNfSCA9IEBIQVZFX0lOVFRZUEVTX0hACitIQVZFX0lTV0NOVFJMID0gQEhBVkVfSVNXQ05UUkxACitIQVZFX0xPTkdfTE9OR19JTlQgPSBASEFWRV9MT05HX0xPTkdfSU5UQAorSEFWRV9NRU1QQ1BZID0gQEhBVkVfTUVNUENQWUAKK0hBVkVfTUtEVEVNUCA9IEBIQVZFX01LRFRFTVBACitIQVZFX1JFQURMSU5LID0gQEhBVkVfUkVBRExJTktACitIQVZFX1NJR05FRF9TSUdfQVRPTUlDX1QgPSBASEFWRV9TSUdORURfU0lHX0FUT01JQ19UQAorSEFWRV9TSUdORURfV0NIQVJfVCA9IEBIQVZFX1NJR05FRF9XQ0hBUl9UQAorSEFWRV9TSUdORURfV0lOVF9UID0gQEhBVkVfU0lHTkVEX1dJTlRfVEAKK0hBVkVfU0xFRVAgPSBASEFWRV9TTEVFUEAKK0hBVkVfU1RESU5UX0ggPSBASEFWRV9TVERJTlRfSEAKK0hBVkVfU1RQQ1BZID0gQEhBVkVfU1RQQ1BZQAorSEFWRV9TVFBOQ1BZID0gQEhBVkVfU1RQTkNQWUAKK0hBVkVfU1RSQ0FTRUNNUCA9IEBIQVZFX1NUUkNBU0VDTVBACitIQVZFX1NUUkNBU0VTVFIgPSBASEFWRV9TVFJDQVNFU1RSQAorSEFWRV9TVFJDSFJOVUwgPSBASEFWRV9TVFJDSFJOVUxACitIQVZFX1NUUk5EVVAgPSBASEFWRV9TVFJORFVQQAorSEFWRV9TVFJQQlJLID0gQEhBVkVfU1RSUEJSS0AKK0hBVkVfU1RSU0VQID0gQEhBVkVfU1RSU0VQQAorSEFWRV9TWVNfQklUWVBFU19IID0gQEhBVkVfU1lTX0JJVFlQRVNfSEAKK0hBVkVfU1lTX0lOVFRZUEVTX0ggPSBASEFWRV9TWVNfSU5UVFlQRVNfSEAKK0hBVkVfU1lTX1RZUEVTX0ggPSBASEFWRV9TWVNfVFlQRVNfSEAKK0hBVkVfVU5JU1REX0ggPSBASEFWRV9VTklTVERfSEAKK0hBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVCA9IEBIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlRACitIQVZFX1dDVFlQRV9IID0gQEhBVkVfV0NUWVBFX0hACitIQVZFX1dJTlRfVCA9IEBIQVZFX1dJTlRfVEAKK0hBVkVfX0JPT0wgPSBASEFWRV9fQk9PTEAKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSU5UTElOQ1MgPSBASU5UTElOQ1NACitJTlRMTElCUyA9IEBJTlRMTElCU0AKK0lOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKK0lOVFRZUEVTX0ggPSBASU5UVFlQRVNfSEAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQklDT05WID0gQExJQklDT05WQAorTElCSU5UTCA9IEBMSUJJTlRMQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTE5fUyA9IEBMTl9TQAorTFRBTExPQ0EgPSBATFRBTExPQ0FACitMVExJQklDT05WID0gQExUTElCSUNPTlZACitMVExJQklOVEwgPSBATFRMSUJJTlRMQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK0xUX0FHRSA9IEBMVF9BR0VACitMVF9DVVJSRU5UID0gQExUX0NVUlJFTlRACitMVF9SRUxFQVNFID0gQExUX1JFTEVBU0VACitMVF9SRVZJU0lPTiA9IEBMVF9SRVZJU0lPTkAKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTVNHRk1UID0gQE1TR0ZNVEAKK01TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKK01TR01FUkdFID0gQE1TR01FUkdFQAorT0JKRVhUID0gQE9CSkVYVEAKK09TID0gQE9TQAorT1NfTElCUyA9IEBPU19MSUJTQAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBUlRFRExERkxBR1MgPSBAUEFSVEVETERGTEFHU0AKK1BBUlRFRF9MSUJTID0gQFBBUlRFRF9MSUJTQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQT1NVQiA9IEBQT1NVQkAKK1BPV19MSUIgPSBAUE9XX0xJQkAKK1BSSVBUUl9QUkVGSVggPSBAUFJJUFRSX1BSRUZJWEAKK1BSSV9NQUNST1NfQlJPS0VOID0gQFBSSV9NQUNST1NfQlJPS0VOQAorUFRSRElGRl9UX1NVRkZJWCA9IEBQVFJESUZGX1RfU1VGRklYQAorUkFOTElCID0gQFJBTkxJQkAKK1JFSVNFUl9MSUJTID0gQFJFSVNFUl9MSUJTQAorUkVQTEFDRV9DSE9XTiA9IEBSRVBMQUNFX0NIT1dOQAorUkVQTEFDRV9GQ0hESVIgPSBAUkVQTEFDRV9GQ0hESVJACitSRVBMQUNFX0dFVENXRCA9IEBSRVBMQUNFX0dFVENXREAKK1JFUExBQ0VfTUtTVEVNUCA9IEBSRVBMQUNFX01LU1RFTVBACitTRUQgPSBAU0VEQAorU0VMSU5VWF9MSUJTID0gQFNFTElOVVhfTElCU0AKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTSUdfQVRPTUlDX1RfU1VGRklYID0gQFNJR19BVE9NSUNfVF9TVUZGSVhACitTSVpFX1RfU1VGRklYID0gQFNJWkVfVF9TVUZGSVhACitTVERCT09MX0ggPSBAU1REQk9PTF9IQAorU1RESU5UX0ggPSBAU1RESU5UX0hACitTVFJJUCA9IEBTVFJJUEAKK1VTRV9OTFMgPSBAVVNFX05MU0AKK1VVSURfTElCUyA9IEBVVUlEX0xJQlNACitWRVJTSU9OID0gQFZFUlNJT05ACitXQ0hBUl9IID0gQFdDSEFSX0hACitXQ0hBUl9UX1NVRkZJWCA9IEBXQ0hBUl9UX1NVRkZJWEAKK1dDVFlQRV9IID0gQFdDVFlQRV9IQAorV0lOVF9UX1NVRkZJWCA9IEBXSU5UX1RfU1VGRklYQAorWEdFVFRFWFQgPSBAWEdFVFRFWFRACitYR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9DWFggPSBAYWNfY3RfQ1hYQAorYWNfY3RfRjc3ID0gQGFjX2N0X0Y3N0AKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitnbF9MSUJPQkpTID0gQGdsX0xJQk9CSlNACitnbF9MVExJQk9CSlMgPSBAZ2xfTFRMSUJPQkpTQAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK1NVQkRJUlMgPSBjbGVhcmZhdCB0ZXN0CitNQUlOVEFJTkVSQ0xFQU5GSUxFUyA9IE1ha2VmaWxlLmluCithbGw6IGFsbC1yZWN1cnNpdmUKKworLlNVRkZJWEVTOgorJChzcmNkaXIpL01ha2VmaWxlLmluOiAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggXAorCQkmJiBleGl0IDA7IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251ICBkZWJ1Zy9NYWtlZmlsZSc7IFwKKwljZCAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZ251ICBkZWJ1Zy9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKKworIyBUaGlzIGRpcmVjdG9yeSdzIHN1YmRpcmVjdG9yaWVzIGFyZSBtb3N0bHkgaW5kZXBlbmRlbnQ7IHlvdSBjYW4gY2QKKyMgaW50byB0aGVtIGFuZCBydW4gYG1ha2UnIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCB0aGlzIE1ha2VmaWxlLgorIyBUbyBjaGFuZ2UgdGhlIHZhbHVlcyBvZiBgbWFrZScgdmFyaWFibGVzOiBpbnN0ZWFkIG9mIGVkaXRpbmcgTWFrZWZpbGVzLAorIyAoMSkgaWYgdGhlIHZhcmlhYmxlIGlzIHNldCBpbiBgY29uZmlnLnN0YXR1cycsIGVkaXQgYGNvbmZpZy5zdGF0dXMnCisjICAgICAod2hpY2ggd2lsbCBjYXVzZSB0aGUgTWFrZWZpbGVzIHRvIGJlIHJlZ2VuZXJhdGVkIHdoZW4geW91IHJ1biBgbWFrZScpOworIyAoMikgb3RoZXJ3aXNlLCBwYXNzIHRoZSBkZXNpcmVkIHZhbHVlcyBvbiB0aGUgYG1ha2UnIGNvbW1hbmQgbGluZS4KKyQoUkVDVVJTSVZFX1RBUkdFVFMpOgorCUBmYWlsY29tPSdleGl0IDEnOyBcCisJZm9yIGYgaW4geCAkJE1BS0VGTEFHUzsgZG8gXAorCSAgY2FzZSAkJGYgaW4gXAorCSAgICAqPSogfCAtLVsha10qKTs7IFwKKwkgICAgKmsqKSBmYWlsY29tPSdmYWlsPXllcyc7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWRvdF9zZWVuPW5vOyBcCisJdGFyZ2V0PWBlY2hvICRAIHwgc2VkIHMvLXJlY3Vyc2l2ZS8vYDsgXAorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgZWNobyAiTWFraW5nICQkdGFyZ2V0IGluICQkc3ViZGlyIjsgXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIFwKKwkgICAgZG90X3NlZW49eWVzOyBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQtYW0iOyBcCisJICBlbHNlIFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKKwkgIGZpOyBcCisJICAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRsb2NhbF90YXJnZXQpIFwKKwkgIHx8IGV2YWwgJCRmYWlsY29tOyBcCisJZG9uZTsgXAorCWlmIHRlc3QgIiQkZG90X3NlZW4iID0gIm5vIjsgdGhlbiBcCisJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAiJCR0YXJnZXQtYW0iIHx8IGV4aXQgMTsgXAorCWZpOyB0ZXN0IC16ICIkJGZhaWwiCisKKyQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpOgorCUBmYWlsY29tPSdleGl0IDEnOyBcCisJZm9yIGYgaW4geCAkJE1BS0VGTEFHUzsgZG8gXAorCSAgY2FzZSAkJGYgaW4gXAorCSAgICAqPSogfCAtLVsha10qKTs7IFwKKwkgICAgKmsqKSBmYWlsY29tPSdmYWlsPXllcyc7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWRvdF9zZWVuPW5vOyBcCisJY2FzZSAiJEAiIGluIFwKKwkgIGRpc3RjbGVhbi0qIHwgbWFpbnRhaW5lci1jbGVhbi0qKSBsaXN0PSckKERJU1RfU1VCRElSUyknIDs7IFwKKwkgICopIGxpc3Q9JyQoU1VCRElSUyknIDs7IFwKKwllc2FjOyBcCisJcmV2PScnOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIDo7IGVsc2UgXAorCSAgICByZXY9IiQkc3ViZGlyICQkcmV2IjsgXAorCSAgZmk7IFwKKwlkb25lOyBcCisJcmV2PSIkJHJldiAuIjsgXAorCXRhcmdldD1gZWNobyAkQCB8IHNlZCBzLy1yZWN1cnNpdmUvL2A7IFwKKwlmb3Igc3ViZGlyIGluICQkcmV2OyBkbyBcCisJICBlY2hvICJNYWtpbmcgJCR0YXJnZXQgaW4gJCRzdWJkaXIiOyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0LWFtIjsgXAorCSAgZWxzZSBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQiOyBcCisJICBmaTsgXAorCSAgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCisJICB8fCBldmFsICQkZmFpbGNvbTsgXAorCWRvbmUgJiYgdGVzdCAteiAiJCRmYWlsIgordGFncy1yZWN1cnNpdmU6CisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICB0ZXN0ICIkJHN1YmRpciIgPSAuIHx8IChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSB0YWdzKTsgXAorCWRvbmUKK2N0YWdzLXJlY3Vyc2l2ZToKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGN0YWdzKTsgXAorCWRvbmUKKworSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAorCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAorCW1raWQgLWZJRCAkJHVuaXF1ZQordGFnczogVEFHUworCitUQUdTOiB0YWdzLXJlY3Vyc2l2ZSAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJdGFncz07IFwKKwloZXJlPWBwd2RgOyBcCisJaWYgKCQoRVRBR1MpIC0tZXRhZ3MtaW5jbHVkZSAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCisJICBpbmNsdWRlX29wdGlvbj0tLWV0YWdzLWluY2x1ZGU7IFwKKwkgIGVtcHR5X2ZpeD0uOyBcCisJZWxzZSBcCisJICBpbmNsdWRlX29wdGlvbj0tLWluY2x1ZGU7IFwKKwkgIGVtcHR5X2ZpeD07IFwKKwlmaTsgXAorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgdGVzdCAhIC1mICQkc3ViZGlyL1RBR1MgfHwgXAorCSAgICAgIHRhZ3M9IiQkdGFncyAkJGluY2x1ZGVfb3B0aW9uPSQkaGVyZS8kJHN1YmRpci9UQUdTIjsgXAorCSAgZmk7IFwKKwlkb25lOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKwkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKKwkgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgJCR0YWdzICQkdW5pcXVlOyBcCisJZmkKK2N0YWdzOiBDVEFHUworQ1RBR1M6IGN0YWdzLXJlY3Vyc2l2ZSAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJdGFncz07IFwKKwloZXJlPWBwd2RgOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIiBcCisJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCisJICAgICAkJHRhZ3MgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmIGNkICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAkJGhlcmUKKworZGlzdGNsZWFuLXRhZ3M6CisJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1wUiAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLXBSICQkZC8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgJChkaXN0ZGlyKS8kJGZpbGUgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICQoZGlzdGRpcikvJCRmaWxlIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKKwlsaXN0PSckKERJU1RfU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAorCSAgICB8fCAkKE1LRElSX1ApICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgICBkaXN0ZGlyPWAkKGFtX19jZCkgJChkaXN0ZGlyKSAmJiBwd2RgOyBcCisJICAgIHRvcF9kaXN0ZGlyPWAkKGFtX19jZCkgJCh0b3BfZGlzdGRpcikgJiYgcHdkYDsgXAorCSAgICAoY2QgJCRzdWJkaXIgJiYgXAorCSAgICAgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIFwKKwkgICAgICAgIHRvcF9kaXN0ZGlyPSIkJHRvcF9kaXN0ZGlyIiBcCisJICAgICAgICBkaXN0ZGlyPSIkJGRpc3RkaXIvJCRzdWJkaXIiIFwKKwkJYW1fX3JlbW92ZV9kaXN0ZGlyPTogXAorCQlhbV9fc2tpcF9sZW5ndGhfY2hlY2s9OiBcCisJICAgICAgICBkaXN0ZGlyKSBcCisJICAgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1yZWN1cnNpdmUKK2FsbC1hbTogTWFrZWZpbGUKK2luc3RhbGxkaXJzOiBpbnN0YWxsZGlycy1yZWN1cnNpdmUKK2luc3RhbGxkaXJzLWFtOgoraW5zdGFsbDogaW5zdGFsbC1yZWN1cnNpdmUKK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLXJlY3Vyc2l2ZQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtcmVjdXJzaXZlCit1bmluc3RhbGw6IHVuaW5zdGFsbC1yZWN1cnNpdmUKKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stcmVjdXJzaXZlCitpbnN0YWxsLXN0cmlwOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorCS10ZXN0IC16ICIkKE1BSU5UQUlORVJDTEVBTkZJTEVTKSIgfHwgcm0gLWYgJChNQUlOVEFJTkVSQ0xFQU5GSUxFUykKK2NsZWFuOiBjbGVhbi1yZWN1cnNpdmUKKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBtb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1yZWN1cnNpdmUKKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktcmVjdXJzaXZlCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1yZWN1cnNpdmUKKworaW5mbzogaW5mby1yZWN1cnNpdmUKKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktcmVjdXJzaXZlCisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtcmVjdXJzaXZlCisKK2luc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZQorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLXJlY3Vyc2l2ZQorCitpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLXJlY3Vyc2l2ZQorCitpbnN0YWxsY2hlY2stYW06CisKK21haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1yZWN1cnNpdmUKKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1yZWN1cnNpdmUKKworcGRmLWFtOgorCitwczogcHMtcmVjdXJzaXZlCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06CisKKy5NQUtFOiAkKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTKSAkKFJFQ1VSU0lWRV9UQVJHRVRTKSBpbnN0YWxsLWFtIFwKKwlpbnN0YWxsLXN0cmlwCisKKy5QSE9OWTogJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUykgJChSRUNVUlNJVkVfVEFSR0VUUykgQ1RBR1MgR1RBR1MgXAorCWFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIFwKKwljdGFncyBjdGFncy1yZWN1cnNpdmUgZGlzdGNsZWFuIGRpc3RjbGVhbi1nZW5lcmljIFwKKwlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCisJaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCisJaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBcCisJaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIFwKKwlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gXAorCWluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBcCisJaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIGluc3RhbGxkaXJzLWFtIG1haW50YWluZXItY2xlYW4gXAorCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1nZW5lcmljIFwKKwltb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB0YWdzLXJlY3Vyc2l2ZSBcCisJdW5pbnN0YWxsIHVuaW5zdGFsbC1hbQorCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvZGVidWcvY2xlYXJmYXQvTWFrZWZpbGUuYW0gYi9wYXJ0ZWQtMS44LjcvZGVidWcvY2xlYXJmYXQvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQwOWY0NQotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9kZWJ1Zy9jbGVhcmZhdC9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDE1IEBACitub2luc3RfUFJPR1JBTVMJPSBjbGVhcmZhdAorCitjbGVhcmZhdF9TT1VSQ0VTID0gY2xlYXJmYXQuYworCitjbGVhcmZhdF9MREFERCA9IFwKKyAgJCh0b3BfYnVpbGRkaXIpL2xpYi9saWJwYXJ0ZWQubGEgXAorICAkKHRvcF9idWlsZGRpcikvbGlicGFydGVkL2xpYnBhcnRlZC5sYSBcCisgICQoSU5UTExJQlMpICQoTElCUykgXAorICAkKFBBUlRFRF9MSUJTKQorCitwYXJ0ZWRpbmNsdWRlZGlyCT0gLUkkKHRvcF9zcmNkaXIpL2xpYiAtSSQodG9wX3NyY2RpcikvaW5jbHVkZQorCitJTkNMVURFUyAJCT0gJChwYXJ0ZWRpbmNsdWRlZGlyKSAkKElOVExJTkNTKQorCitNQUlOVEFJTkVSQ0xFQU5GSUxFUyA9IE1ha2VmaWxlLmluCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvZGVidWcvY2xlYXJmYXQvTWFrZWZpbGUuaW4gYi9wYXJ0ZWQtMS44LjcvZGVidWcvY2xlYXJmYXQvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM4NGMzOAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9kZWJ1Zy9jbGVhcmZhdC9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDYzMiBAQAorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xMCBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACisKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitub2luc3RfUFJPR1JBTVMgPSBjbGVhcmZhdCQoRVhFRVhUKQorc3ViZGlyID0gZGVidWcvY2xlYXJmYXQKK0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbgorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvbTQvYWJzb2x1dGUtaGVhZGVyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2FsbG9jYS5tNCAkKHRvcF9zcmNkaXIpL200L2Fzc2VydC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9hdGV4aXQubTQgJCh0b3Bfc3JjZGlyKS9tNC9jYWxsb2MubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY2xvc2Utc3RyZWFtLm00ICQodG9wX3NyY2RpcikvbTQvY2xvc2VvdXQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY29kZXNldC5tNCAkKHRvcF9zcmNkaXIpL200L2NvbmZpZy1oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2Rpcm5hbWUubTQgJCh0b3Bfc3JjZGlyKS9tNC9kb3MubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZG91YmxlLXNsYXNoLXJvb3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZXJyb3IubTQgJCh0b3Bfc3JjZGlyKS9tNC9leGl0ZmFpbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9leHRlbnNpb25zLm00ICQodG9wX3NyY2RpcikvbTQvZnBlbmRpbmcubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZnJlZS5tNCAkKHRvcF9zcmNkaXIpL200L2dldG9wdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00ICQodG9wX3NyY2RpcikvbTQvZ2xpYmMyMS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9nbnVsaWItY29tbW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2dudWxpYi1jb21wLm00ICQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaW5saW5lLm00ICQodG9wX3NyY2RpcikvbTQvaW50dHlwZXMtcHJpLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ludHR5cGVzLm00ICQodG9wX3NyY2RpcikvbTQvbGliLWlnbm9yZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xvY2FsY2hhcnNldC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sb25nLW9wdGlvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9sb25nbG9uZy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tYnJ0b3djLm00ICQodG9wX3NyY2RpcikvbTQvbWJzdGF0ZV90Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21lbWNoci5tNCAkKHRvcF9zcmNkaXIpL200L21lbWNtcC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tZW1jcHkubTQgJCh0b3Bfc3JjZGlyKS9tNC9tZW1tb3ZlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21lbXNldC5tNCAkKHRvcF9zcmNkaXIpL200L25scy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCAkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3F1b3RlYXJnLm00ICQodG9wX3NyY2RpcikvbTQvcmVnZXgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcmVuYW1lLm00ICQodG9wX3NyY2RpcikvbTQvcnBtYXRjaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zYWZlLXJlYWQubTQgJCh0b3Bfc3JjZGlyKS9tNC9zYWZlLXdyaXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3NzaXplX3QubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGRhcmcubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RkYm9vbC5tNCAkKHRvcF9zcmNkaXIpL200L3N0ZGludC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdGRsaWJfaC5tNCAkKHRvcF9zcmNkaXIpL200L3N0cmNzcG4ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RyaW5nX2gubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHJuZHVwLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0cm5sZW4ubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHJ0b2QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RydG9sLm00ICQodG9wX3NyY2RpcikvbTQvdW5pc3RkX2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdXRpbWJ1Zi5tNCAkKHRvcF9zcmNkaXIpL200L3V0aW1lLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3V0aW1lcy1udWxsLm00ICQodG9wX3NyY2RpcikvbTQvd2NoYXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvd2N0eXBlLm00ICQodG9wX3NyY2RpcikvbTQvd2ludF90Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3hhbGxvYy5tNCAkKHRvcF9zcmNkaXIpL200L3hzdHJuZHVwLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitQUk9HUkFNUyA9ICQobm9pbnN0X1BST0dSQU1TKQorYW1fY2xlYXJmYXRfT0JKRUNUUyA9IGNsZWFyZmF0LiQoT0JKRVhUKQorY2xlYXJmYXRfT0JKRUNUUyA9ICQoYW1fY2xlYXJmYXRfT0JKRUNUUykKK2FtX19ERVBFTkRFTkNJRVNfMSA9CitjbGVhcmZhdF9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGliL2xpYnBhcnRlZC5sYSBcCisJJCh0b3BfYnVpbGRkaXIpL2xpYnBhcnRlZC9saWJwYXJ0ZWQubGEgJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKKwkkKGFtX19ERVBFTkRFTkNJRVNfMSkgJChhbV9fREVQRU5ERU5DSUVTXzEpCitERUZBVUxUX0lOQ0xVREVTID0gLUkuIC1JJCh0b3BfYnVpbGRkaXIpL2xpYkBhbV9faXNyY0AKK2RlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9kZXBjb21wCithbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcworQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCisJJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorTFRDT01QSUxFID0gJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIFwKKwktLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgXAorCSQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0NDTEQgPSAkKENDKQorTElOSyA9ICQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCisJLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgXAorCSQoTERGTEFHUykgLW8gJEAKK1NPVVJDRVMgPSAkKGNsZWFyZmF0X1NPVVJDRVMpCitESVNUX1NPVVJDRVMgPSAkKGNsZWFyZmF0X1NPVVJDRVMpCitFVEFHUyA9IGV0YWdzCitDVEFHUyA9IGN0YWdzCitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUJTT0xVVEVfSU5UVFlQRVNfSCA9IEBBQlNPTFVURV9JTlRUWVBFU19IQAorQUJTT0xVVEVfU1RESU5UX0ggPSBAQUJTT0xVVEVfU1RESU5UX0hACitBQlNPTFVURV9TVERMSUJfSCA9IEBBQlNPTFVURV9TVERMSUJfSEAKK0FCU09MVVRFX1NUUklOR19IID0gQEFCU09MVVRFX1NUUklOR19IQAorQUJTT0xVVEVfVU5JU1REX0ggPSBAQUJTT0xVVEVfVU5JU1REX0hACitBQlNPTFVURV9XQ0hBUl9IID0gQEFCU09MVVRFX1dDSEFSX0hACitBQlNPTFVURV9XQ1RZUEVfSCA9IEBBQlNPTFVURV9XQ1RZUEVfSEAKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FMTE9DQSA9IEBBTExPQ0FACitBTExPQ0FfSCA9IEBBTExPQ0FfSEAKK0FNVEFSID0gQEFNVEFSQAorQVIgPSBAQVJACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0JJVFNJWkVPRl9QVFJESUZGX1QgPSBAQklUU0laRU9GX1BUUkRJRkZfVEAKK0JJVFNJWkVPRl9TSUdfQVRPTUlDX1QgPSBAQklUU0laRU9GX1NJR19BVE9NSUNfVEAKK0JJVFNJWkVPRl9TSVpFX1QgPSBAQklUU0laRU9GX1NJWkVfVEAKK0JJVFNJWkVPRl9XQ0hBUl9UID0gQEJJVFNJWkVPRl9XQ0hBUl9UQAorQklUU0laRU9GX1dJTlRfVCA9IEBCSVRTSVpFT0ZfV0lOVF9UQAorQlVJTERJTkZPID0gQEJVSUxESU5GT0AKK0NDID0gQENDQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDSEVDS19DRkxBR1MgPSBAQ0hFQ0tfQ0ZMQUdTQAorQ0hFQ0tfTElCUyA9IEBDSEVDS19MSUJTQAorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ1hYID0gQENYWEAKK0NYWENQUCA9IEBDWFhDUFBACitDWFhERVBNT0RFID0gQENYWERFUE1PREVACitDWFhGTEFHUyA9IEBDWFhGTEFHU0AKK0NZR1BBVEhfVyA9IEBDWUdQQVRIX1dACitERUZTID0gQERFRlNACitERVBESVIgPSBAREVQRElSQAorRExfTElCUyA9IEBETF9MSUJTQAorRE1fTElCUyA9IEBETV9MSUJTQAorRUNITyA9IEBFQ0hPQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFWEVFWFQgPSBARVhFRVhUQAorRjc3ID0gQEY3N0AKK0ZGTEFHUyA9IEBGRkxBR1NACitHRVRPUFRfSCA9IEBHRVRPUFRfSEAKK0dMSUJDMjEgPSBAR0xJQkMyMUAKK0dNU0dGTVQgPSBAR01TR0ZNVEAKK0dNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAorR05VTElCX0NIT1dOID0gQEdOVUxJQl9DSE9XTkAKK0dOVUxJQl9EVVAyID0gQEdOVUxJQl9EVVAyQAorR05VTElCX0ZDSERJUiA9IEBHTlVMSUJfRkNIRElSQAorR05VTElCX0ZUUlVOQ0FURSA9IEBHTlVMSUJfRlRSVU5DQVRFQAorR05VTElCX0dFVENXRCA9IEBHTlVMSUJfR0VUQ1dEQAorR05VTElCX0dFVExPR0lOX1IgPSBAR05VTElCX0dFVExPR0lOX1JACitHTlVMSUJfR0VUU1VCT1BUID0gQEdOVUxJQl9HRVRTVUJPUFRACitHTlVMSUJfSU1BWEFCUyA9IEBHTlVMSUJfSU1BWEFCU0AKK0dOVUxJQl9JTUFYRElWID0gQEdOVUxJQl9JTUFYRElWQAorR05VTElCX01CU0NBU0VDTVAgPSBAR05VTElCX01CU0NBU0VDTVBACitHTlVMSUJfTUJTQ0FTRVNUUiA9IEBHTlVMSUJfTUJTQ0FTRVNUUkAKK0dOVUxJQl9NQlNDSFIgPSBAR05VTElCX01CU0NIUkAKK0dOVUxJQl9NQlNDU1BOID0gQEdOVUxJQl9NQlNDU1BOQAorR05VTElCX01CU0xFTiA9IEBHTlVMSUJfTUJTTEVOQAorR05VTElCX01CU05DQVNFQ01QID0gQEdOVUxJQl9NQlNOQ0FTRUNNUEAKK0dOVUxJQl9NQlNQQlJLID0gQEdOVUxJQl9NQlNQQlJLQAorR05VTElCX01CU1BDQVNFQ01QID0gQEdOVUxJQl9NQlNQQ0FTRUNNUEAKK0dOVUxJQl9NQlNSQ0hSID0gQEdOVUxJQl9NQlNSQ0hSQAorR05VTElCX01CU1NFUCA9IEBHTlVMSUJfTUJTU0VQQAorR05VTElCX01CU1NQTiA9IEBHTlVMSUJfTUJTU1BOQAorR05VTElCX01CU1NUUiA9IEBHTlVMSUJfTUJTU1RSQAorR05VTElCX01CU1RPS19SID0gQEdOVUxJQl9NQlNUT0tfUkAKK0dOVUxJQl9NRU1NRU0gPSBAR05VTElCX01FTU1FTUAKK0dOVUxJQl9NRU1QQ1BZID0gQEdOVUxJQl9NRU1QQ1BZQAorR05VTElCX01FTVJDSFIgPSBAR05VTElCX01FTVJDSFJACitHTlVMSUJfTUtEVEVNUCA9IEBHTlVMSUJfTUtEVEVNUEAKK0dOVUxJQl9NS1NURU1QID0gQEdOVUxJQl9NS1NURU1QQAorR05VTElCX1JFQURMSU5LID0gQEdOVUxJQl9SRUFETElOS0AKK0dOVUxJQl9TTEVFUCA9IEBHTlVMSUJfU0xFRVBACitHTlVMSUJfU1RQQ1BZID0gQEdOVUxJQl9TVFBDUFlACitHTlVMSUJfU1RQTkNQWSA9IEBHTlVMSUJfU1RQTkNQWUAKK0dOVUxJQl9TVFJDQVNFU1RSID0gQEdOVUxJQl9TVFJDQVNFU1RSQAorR05VTElCX1NUUkNIUk5VTCA9IEBHTlVMSUJfU1RSQ0hSTlVMQAorR05VTElCX1NUUkRVUCA9IEBHTlVMSUJfU1RSRFVQQAorR05VTElCX1NUUk5EVVAgPSBAR05VTElCX1NUUk5EVVBACitHTlVMSUJfU1RSTkxFTiA9IEBHTlVMSUJfU1RSTkxFTkAKK0dOVUxJQl9TVFJQQlJLID0gQEdOVUxJQl9TVFJQQlJLQAorR05VTElCX1NUUlNFUCA9IEBHTlVMSUJfU1RSU0VQQAorR05VTElCX1NUUlRPSU1BWCA9IEBHTlVMSUJfU1RSVE9JTUFYQAorR05VTElCX1NUUlRPS19SID0gQEdOVUxJQl9TVFJUT0tfUkAKK0dOVUxJQl9TVFJUT1VNQVggPSBAR05VTElCX1NUUlRPVU1BWEAKK0dSRVAgPSBAR1JFUEAKK0hBVkVfREVDTF9HRVRMT0dJTl9SID0gQEhBVkVfREVDTF9HRVRMT0dJTl9SQAorSEFWRV9ERUNMX0lNQVhBQlMgPSBASEFWRV9ERUNMX0lNQVhBQlNACitIQVZFX0RFQ0xfSU1BWERJViA9IEBIQVZFX0RFQ0xfSU1BWERJVkAKK0hBVkVfREVDTF9NRU1NRU0gPSBASEFWRV9ERUNMX01FTU1FTUAKK0hBVkVfREVDTF9NRU1SQ0hSID0gQEhBVkVfREVDTF9NRU1SQ0hSQAorSEFWRV9ERUNMX1NUUkRVUCA9IEBIQVZFX0RFQ0xfU1RSRFVQQAorSEFWRV9ERUNMX1NUUk5DQVNFQ01QID0gQEhBVkVfREVDTF9TVFJOQ0FTRUNNUEAKK0hBVkVfREVDTF9TVFJORFVQID0gQEhBVkVfREVDTF9TVFJORFVQQAorSEFWRV9ERUNMX1NUUk5MRU4gPSBASEFWRV9ERUNMX1NUUk5MRU5ACitIQVZFX0RFQ0xfU1RSVE9JTUFYID0gQEhBVkVfREVDTF9TVFJUT0lNQVhACitIQVZFX0RFQ0xfU1RSVE9LX1IgPSBASEFWRV9ERUNMX1NUUlRPS19SQAorSEFWRV9ERUNMX1NUUlRPVU1BWCA9IEBIQVZFX0RFQ0xfU1RSVE9VTUFYQAorSEFWRV9EVVAyID0gQEhBVkVfRFVQMkAKK0hBVkVfRlRSVU5DQVRFID0gQEhBVkVfRlRSVU5DQVRFQAorSEFWRV9HRVRTVUJPUFQgPSBASEFWRV9HRVRTVUJPUFRACitIQVZFX0lOVFRZUEVTX0ggPSBASEFWRV9JTlRUWVBFU19IQAorSEFWRV9JU1dDTlRSTCA9IEBIQVZFX0lTV0NOVFJMQAorSEFWRV9MT05HX0xPTkdfSU5UID0gQEhBVkVfTE9OR19MT05HX0lOVEAKK0hBVkVfTUVNUENQWSA9IEBIQVZFX01FTVBDUFlACitIQVZFX01LRFRFTVAgPSBASEFWRV9NS0RURU1QQAorSEFWRV9SRUFETElOSyA9IEBIQVZFX1JFQURMSU5LQAorSEFWRV9TSUdORURfU0lHX0FUT01JQ19UID0gQEhBVkVfU0lHTkVEX1NJR19BVE9NSUNfVEAKK0hBVkVfU0lHTkVEX1dDSEFSX1QgPSBASEFWRV9TSUdORURfV0NIQVJfVEAKK0hBVkVfU0lHTkVEX1dJTlRfVCA9IEBIQVZFX1NJR05FRF9XSU5UX1RACitIQVZFX1NMRUVQID0gQEhBVkVfU0xFRVBACitIQVZFX1NURElOVF9IID0gQEhBVkVfU1RESU5UX0hACitIQVZFX1NUUENQWSA9IEBIQVZFX1NUUENQWUAKK0hBVkVfU1RQTkNQWSA9IEBIQVZFX1NUUE5DUFlACitIQVZFX1NUUkNBU0VDTVAgPSBASEFWRV9TVFJDQVNFQ01QQAorSEFWRV9TVFJDQVNFU1RSID0gQEhBVkVfU1RSQ0FTRVNUUkAKK0hBVkVfU1RSQ0hSTlVMID0gQEhBVkVfU1RSQ0hSTlVMQAorSEFWRV9TVFJORFVQID0gQEhBVkVfU1RSTkRVUEAKK0hBVkVfU1RSUEJSSyA9IEBIQVZFX1NUUlBCUktACitIQVZFX1NUUlNFUCA9IEBIQVZFX1NUUlNFUEAKK0hBVkVfU1lTX0JJVFlQRVNfSCA9IEBIQVZFX1NZU19CSVRZUEVTX0hACitIQVZFX1NZU19JTlRUWVBFU19IID0gQEhBVkVfU1lTX0lOVFRZUEVTX0hACitIQVZFX1NZU19UWVBFU19IID0gQEhBVkVfU1lTX1RZUEVTX0hACitIQVZFX1VOSVNURF9IID0gQEhBVkVfVU5JU1REX0hACitIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlQgPSBASEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UQAorSEFWRV9XQ1RZUEVfSCA9IEBIQVZFX1dDVFlQRV9IQAorSEFWRV9XSU5UX1QgPSBASEFWRV9XSU5UX1RACitIQVZFX19CT09MID0gQEhBVkVfX0JPT0xACitJTlNUQUxMID0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lOVExJTkNTID0gQElOVExJTkNTQAorSU5UTExJQlMgPSBASU5UTExJQlNACitJTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACitJTlRUWVBFU19IID0gQElOVFRZUEVTX0hACitMREZMQUdTID0gQExERkxBR1NACitMSUJJQ09OViA9IEBMSUJJQ09OVkAKK0xJQklOVEwgPSBATElCSU5UTEAKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xOX1MgPSBATE5fU0AKK0xUQUxMT0NBID0gQExUQUxMT0NBQAorTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAorTFRMSUJJTlRMID0gQExUTElCSU5UTEAKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitMVF9BR0UgPSBATFRfQUdFQAorTFRfQ1VSUkVOVCA9IEBMVF9DVVJSRU5UQAorTFRfUkVMRUFTRSA9IEBMVF9SRUxFQVNFQAorTFRfUkVWSVNJT04gPSBATFRfUkVWSVNJT05ACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01LRElSX1AgPSBATUtESVJfUEAKK01TR0ZNVCA9IEBNU0dGTVRACitNU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACitNU0dNRVJHRSA9IEBNU0dNRVJHRUAKK09CSkVYVCA9IEBPQkpFWFRACitPUyA9IEBPU0AKK09TX0xJQlMgPSBAT1NfTElCU0AKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQVJURURMREZMQUdTID0gQFBBUlRFRExERkxBR1NACitQQVJURURfTElCUyA9IEBQQVJURURfTElCU0AKK1BBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAorUE9TVUIgPSBAUE9TVUJACitQT1dfTElCID0gQFBPV19MSUJACitQUklQVFJfUFJFRklYID0gQFBSSVBUUl9QUkVGSVhACitQUklfTUFDUk9TX0JST0tFTiA9IEBQUklfTUFDUk9TX0JST0tFTkAKK1BUUkRJRkZfVF9TVUZGSVggPSBAUFRSRElGRl9UX1NVRkZJWEAKK1JBTkxJQiA9IEBSQU5MSUJACitSRUlTRVJfTElCUyA9IEBSRUlTRVJfTElCU0AKK1JFUExBQ0VfQ0hPV04gPSBAUkVQTEFDRV9DSE9XTkAKK1JFUExBQ0VfRkNIRElSID0gQFJFUExBQ0VfRkNIRElSQAorUkVQTEFDRV9HRVRDV0QgPSBAUkVQTEFDRV9HRVRDV0RACitSRVBMQUNFX01LU1RFTVAgPSBAUkVQTEFDRV9NS1NURU1QQAorU0VEID0gQFNFREAKK1NFTElOVVhfTElCUyA9IEBTRUxJTlVYX0xJQlNACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU0lHX0FUT01JQ19UX1NVRkZJWCA9IEBTSUdfQVRPTUlDX1RfU1VGRklYQAorU0laRV9UX1NVRkZJWCA9IEBTSVpFX1RfU1VGRklYQAorU1REQk9PTF9IID0gQFNUREJPT0xfSEAKK1NURElOVF9IID0gQFNURElOVF9IQAorU1RSSVAgPSBAU1RSSVBACitVU0VfTkxTID0gQFVTRV9OTFNACitVVUlEX0xJQlMgPSBAVVVJRF9MSUJTQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorV0NIQVJfSCA9IEBXQ0hBUl9IQAorV0NIQVJfVF9TVUZGSVggPSBAV0NIQVJfVF9TVUZGSVhACitXQ1RZUEVfSCA9IEBXQ1RZUEVfSEAKK1dJTlRfVF9TVUZGSVggPSBAV0lOVF9UX1NVRkZJWEAKK1hHRVRURVhUID0gQFhHRVRURVhUQAorWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKK2Fic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACithYnNfc3JjZGlyID0gQGFic19zcmNkaXJACithYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACithYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKK2FjX2N0X0Y3NyA9IEBhY19jdF9GNzdACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAorZ2xfTElCT0JKUyA9IEBnbF9MSUJPQkpTQAorZ2xfTFRMSUJPQkpTID0gQGdsX0xUTElCT0JKU0AKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3BzZGlyID0gQHBzZGlyQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzcmNkaXIgPSBAc3JjZGlyQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKK3RvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitjbGVhcmZhdF9TT1VSQ0VTID0gY2xlYXJmYXQuYworY2xlYXJmYXRfTERBREQgPSBcCisgICQodG9wX2J1aWxkZGlyKS9saWIvbGlicGFydGVkLmxhIFwKKyAgJCh0b3BfYnVpbGRkaXIpL2xpYnBhcnRlZC9saWJwYXJ0ZWQubGEgXAorICAkKElOVExMSUJTKSAkKExJQlMpIFwKKyAgJChQQVJURURfTElCUykKKworcGFydGVkaW5jbHVkZWRpciA9IC1JJCh0b3Bfc3JjZGlyKS9saWIgLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUKK0lOQ0xVREVTID0gJChwYXJ0ZWRpbmNsdWRlZGlyKSAkKElOVExJTkNTKQorTUFJTlRBSU5FUkNMRUFORklMRVMgPSBNYWtlZmlsZS5pbgorYWxsOiBhbGwtYW0KKworLlNVRkZJWEVTOgorLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagorJChzcmNkaXIpL01ha2VmaWxlLmluOiAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggXAorCQkmJiBleGl0IDA7IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251ICBkZWJ1Zy9jbGVhcmZhdC9NYWtlZmlsZSc7IFwKKwljZCAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZ251ICBkZWJ1Zy9jbGVhcmZhdC9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworY2xlYW4tbm9pbnN0UFJPR1JBTVM6CisJQGxpc3Q9JyQobm9pbnN0X1BST0dSQU1TKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgZj1gZWNobyAkJHB8c2VkICdzLyQoRVhFRVhUKSQkLy8nYDsgXAorCSAgZWNobyAiIHJtIC1mICQkcCAkJGYiOyBcCisJICBybSAtZiAkJHAgJCRmIDsgXAorCWRvbmUKK2NsZWFyZmF0JChFWEVFWFQpOiAkKGNsZWFyZmF0X09CSkVDVFMpICQoY2xlYXJmYXRfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgY2xlYXJmYXQkKEVYRUVYVCkKKwkkKExJTkspICQoY2xlYXJmYXRfT0JKRUNUUykgJChjbGVhcmZhdF9MREFERCkgJChMSUJTKQorCittb3N0bHljbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLiQoT0JKRVhUKQorCitkaXN0Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi50YWIuYworCitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvY2xlYXJmYXQuUG9AYW1fX3F1b3RlQAorCisuYy5vOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jICQ8CisKKy5jLm9iajoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jIGAkKENZR1BBVEhfVykgJyQ8J2AKKworLmMubG86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKKworSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAorCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAorCW1raWQgLWZJRCAkJHVuaXF1ZQordGFnczogVEFHUworCitUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXRhZ3M9OyBcCisJaGVyZT1gcHdkYDsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAorCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAorCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisJICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCisJICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICQkdGFncyAkJHVuaXF1ZTsgXAorCWZpCitjdGFnczogQ1RBR1MKK0NUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXRhZ3M9OyBcCisJaGVyZT1gcHdkYDsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAorCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAorCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSIgXAorCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorCSAgICAgJCR0YWdzICQkdW5pcXVlCisKK0dUQUdTOgorCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCisJICAmJiBjZCAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgJCRoZXJlCisKK2Rpc3RjbGVhbi10YWdzOgorCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgXAorCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKKwkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCisJICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAorCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKKwkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKKwkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKKwkJCSAgIHNvcnQgLXVgIDs7IFwKKwllc2FjOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtcFIgJChzcmNkaXIpLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1wUiAkJGQvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICQoZGlzdGRpcikvJCRmaWxlIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAkKGRpc3RkaXIpLyQkZmlsZSBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUgJChQUk9HUkFNUykKK2luc3RhbGxkaXJzOgoraW5zdGFsbDogaW5zdGFsbC1hbQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCit1bmluc3RhbGw6IHVuaW5zdGFsbC1hbQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQoraW5zdGFsbC1zdHJpcDoKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKKwkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKKwktdGVzdCAteiAiJChNQUlOVEFJTkVSQ0xFQU5GSUxFUykiIHx8IHJtIC1mICQoTUFJTlRBSU5FUkNMRUFORklMRVMpCitjbGVhbjogY2xlYW4tYW0KKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1ub2luc3RQUk9HUkFNUyBcCisJbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKKwlkaXN0Y2xlYW4tdGFncworCitkdmk6IGR2aS1hbQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtYW0KKworaW5mbzogaW5mby1hbQorCitpbmZvLWFtOgorCitpbnN0YWxsLWRhdGEtYW06CisKK2luc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQorCitpbnN0YWxsLWV4ZWMtYW06CisKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCisKK2luc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQorCitpbnN0YWxsY2hlY2stYW06CisKK21haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKKwltb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLWFtCisKK3BkZi1hbToKKworcHM6IHBzLWFtCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06CisKKy5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKKworLlBIT05ZOiBDVEFHUyBHVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAorCWNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0UFJPR1JBTVMgY3RhZ3MgZGlzdGNsZWFuIFwKKwlkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBcCisJZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gXAorCWluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIFwKKwlpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBcCisJaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gXAorCWluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCisJaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKKwltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBcCisJbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgXAorCXBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB1bmluc3RhbGwgdW5pbnN0YWxsLWFtCisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9kZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jIGIvcGFydGVkLTEuOC43L2RlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ5ODAyNAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9kZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jCkBAIC0wLDAgKzEsMzQ2IEBACisvKgorICAgIGNsZWFyX2ZhdCAtIGEgdG9vbCB0byBjbGVhciB1bnVzZWQgc3BhY2UgKGZvciB0ZXN0aW5nIHB1cnBvc2VzKQorICAgIENvcHlyaWdodCAoQykgMjAwMCwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKKyovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8Z2V0b3B0Lmg+CisjaW5jbHVkZSAiY2xvc2VvdXQuaCIKKyNpbmNsdWRlICJjb25maWdtYWtlLmgiCisjaW5jbHVkZSAiZXJyb3IuaCIKKyNpbmNsdWRlICJsb25nLW9wdGlvbnMuaCIKKworI2luY2x1ZGUgIi4uLy4uL2xpYnBhcnRlZC9mcy9mYXQvZmF0LmgiCisKKyNpbmNsdWRlIDxsb2NhbGUuaD4KKworLyogVGFrZSBjYXJlIG9mIE5MUyBtYXR0ZXJzLiAgKi8KKworI2luY2x1ZGUgImdldHRleHQuaCIKKyNpZiAhIEVOQUJMRV9OTFMKKyMgdW5kZWYgdGV4dGRvbWFpbgorIyBkZWZpbmUgdGV4dGRvbWFpbihEb21haW5uYW1lKSAvKiBlbXB0eSAqLworIyB1bmRlZiBiaW5kdGV4dGRvbWFpbgorIyBkZWZpbmUgYmluZHRleHRkb21haW4oRG9tYWlubmFtZSwgRGlybmFtZSkgLyogZW1wdHkgKi8KKyNlbmRpZgorCisjdW5kZWYgXworI2RlZmluZSBfKG1zZ2lkKSBnZXR0ZXh0IChtc2dpZCkKKworI2lmbmRlZiBESVNDT1ZFUl9PTkxZCisKKy8qIFRoZSBvZmZpY2lhbCBuYW1lIG9mIHRoaXMgcHJvZ3JhbSAoZS5nLiwgbm8gYGcnIHByZWZpeCkuICAqLworI2RlZmluZSBQUk9HUkFNX05BTUUgImNsZWFyZmF0IgorCisjZGVmaW5lIEFVVEhPUlMgXAorICAiPGh0dHA6Ly9wYXJ0ZWQuYWxpb3RoLmRlYmlhbi5vcmcvY2dpLWJpbi90cmFjLmNnaS9icm93c2VyL0FVVEhPUlM+IgorCisvKiBUaGUgbmFtZSB0aGlzIHByb2dyYW0gd2FzIHJ1biB3aXRoLiAqLworY2hhciAqcHJvZ3JhbV9uYW1lOworCit2b2lkCit1c2FnZSAoaW50IHN0YXR1cykKK3sKKyAgaWYgKHN0YXR1cyAhPSBFWElUX1NVQ0NFU1MpCisgICAgZnByaW50ZiAoc3RkZXJyLCBfKCJUcnkgYCVzIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4iKSwKKwkgICAgIHByb2dyYW1fbmFtZSk7CisgIGVsc2UKKyAgICB7CisgICAgICBwcmludGYgKF8oIlwKK1VzYWdlOiAlcyBbT1BUSU9OXVxuXAorICBvcjogICVzIERFVklDRSBNSU5PUlxuIiksIFBST0dSQU1fTkFNRSwgUFJPR1JBTV9OQU1FKTsKKyAgICAgIGZwdXRzIChfKCJcCitDbGVhciB1bnVzZWQgc3BhY2Ugb24gYSBGQVQgcGFydGl0aW9uIChhIEdOVSBQYXJ0ZWQgdGVzdGluZyB0b29sKS5cblwKK1xuXAorIiksIHN0ZG91dCk7CisgICAgICBmcHV0cyAoXygiICAgICAgLS1oZWxwICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdFxuIiksIHN0ZG91dCk7CisgICAgICBmcHV0cyAoXygiICAgICAgLS12ZXJzaW9uICBvdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdFxuIiksCisgICAgICAgICAgICAgc3Rkb3V0KTsKKyAgICAgIHByaW50ZiAoXygiXG5SZXBvcnQgYnVncyB0byA8JXM+LlxuIiksIFBBQ0tBR0VfQlVHUkVQT1JUKTsKKyAgICB9CisgIGV4aXQgKHN0YXR1cyk7Cit9CisKKyNkZWZpbmUgQ0xFQVJfQlVGRkVSX1NJWkUJCSgxMDI0ICogMTAyNCkKKyNkZWZpbmUgQ0xFQVJfQlVGRkVSX1NFQ1RPUlMJCShDTEVBUl9CVUZGRVJfU0laRS81MTIpCisKK3N0YXRpYyBjaGFyIGJ1ZmZlciBbQ0xFQVJfQlVGRkVSX1NJWkVdOworCisvKiBnZW5lcmljIGNsZWFyaW5nIGNvZGUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50CitfY2xlYXJfc2VjdG9ycyAoUGVkR2VvbWV0cnkqIGdlb20sIFBlZFNlY3RvciBzdGFydCwgUGVkU2VjdG9yIGNvdW50KQoreworCVBlZFNlY3RvcgkJcG9zOworCVBlZFNlY3RvcgkJdG9fZ28gPSBjb3VudDsKKworCWZvciAocG9zID0gc3RhcnQ7CisJICAgICBwb3MgPCBzdGFydCArIGNvdW50OworCSAgICAgcG9zICs9IENMRUFSX0JVRkZFUl9TRUNUT1JTLCB0b19nbyAtPSBDTEVBUl9CVUZGRVJfU0VDVE9SUykgeworCQlpZiAoIXBlZF9nZW9tZXRyeV93cml0ZSAoZ2VvbSwgYnVmZmVyLCBzdGFydCwKKwkJCQkJIFBFRF9NSU4gKENMRUFSX0JVRkZFUl9TRUNUT1JTLCB0b19nbykpKQorCQkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK19jbGVhcl9zZWN0b3JfcmFuZ2UgKFBlZEdlb21ldHJ5KiBnZW9tLCBQZWRTZWN0b3Igc3RhcnQsIFBlZFNlY3RvciBlbmQpCit7CisJcmV0dXJuIF9jbGVhcl9zZWN0b3JzIChnZW9tLCBzdGFydCwgZW5kIC0gc3RhcnQgKyAxKTsKK30KKworc3RhdGljIGludAorX2NsZWFyX3NlY3RvciAoUGVkR2VvbWV0cnkqIGdlb20sIFBlZFNlY3RvciBzZWN0b3IpCit7CisJcmV0dXJuIF9jbGVhcl9zZWN0b3JzIChnZW9tLCBzZWN0b3IsIDEpOworfQorCitzdGF0aWMgaW50CitfY2xlYXJfcGFydGlhbF9zZWN0b3IgKFBlZEdlb21ldHJ5KiBnZW9tLCBQZWRTZWN0b3Igc2VjdG9yLAorCQkgICAgICAgaW50IG9mZnNldCwgaW50IGNvdW50KQoreworCWlmICghcGVkX2dlb21ldHJ5X3JlYWQgKGdlb20sIGJ1ZmZlciwgc2VjdG9yLCAxKSkKKwkJZ290byBlcnJvcjsKKwltZW1zZXQgKGJ1ZmZlciArIG9mZnNldCwgMCwgY291bnQpOworCWlmICghcGVkX2dlb21ldHJ5X3dyaXRlIChnZW9tLCBidWZmZXIsIHNlY3RvciwgMSkpCisJCWdvdG8gZXJyb3I7CisKKwltZW1zZXQgKGJ1ZmZlciwgMCwgNTEyKTsKKwlyZXR1cm4gMTsKKworZXJyb3I6CisJbWVtc2V0IChidWZmZXIsIDAsIDUxMik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK19jbGVhcl9wYXJ0aWFsX3JhbmdlIChQZWRHZW9tZXRyeSogZ2VvbSwgUGVkU2VjdG9yIHNlY3RvciwgaW50IHN0YXJ0LCBpbnQgZW5kKQoreworCXJldHVybiBfY2xlYXJfcGFydGlhbF9zZWN0b3IgKGdlb20sIHNlY3Rvciwgc3RhcnQsIGVuZCAtIHN0YXJ0ICsgMSk7Cit9CisKK3N0YXRpYyBpbnQKK19jbGVhcl9jbHVzdGVycyAoUGVkRmlsZVN5c3RlbSogZnMsIEZhdENsdXN0ZXIgc3RhcnQsIEZhdENsdXN0ZXIgY291bnQpCit7CisJRmF0U3BlY2lmaWMqCWZzX2luZm8gPSBGQVRfU1BFQ0lGSUMgKGZzKTsKKwlyZXR1cm4gX2NsZWFyX3NlY3RvcnMgKGZzLT5nZW9tLCBmYXRfY2x1c3Rlcl90b19zZWN0b3IoZnMsIHN0YXJ0KSwKKwkJCSAgICAgICBjb3VudCAqIGZzX2luZm8tPmNsdXN0ZXJfc2VjdG9ycyk7Cit9CisKKy8qIEZBVCBjb2RlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQKK19jbGVhcl9iZWZvcmVfZmF0IChQZWRGaWxlU3lzdGVtKiBmcykKK3sKKwlGYXRTcGVjaWZpYyoJZnNfaW5mbyA9IEZBVF9TUEVDSUZJQyAoZnMpOworCVBlZFNlY3RvcglzZWN0b3I7CisKKwlmb3IgKHNlY3RvciA9IDE7IHNlY3RvciA8IGZzX2luZm8tPmZhdF9vZmZzZXQ7IHNlY3RvcisrKSB7CisJCWlmIChzZWN0b3IgPT0gZnNfaW5mby0+aW5mb19zZWN0b3Jfb2Zmc2V0KQorCQkJY29udGludWU7CisJCWlmIChzZWN0b3IgPT0gZnNfaW5mby0+Ym9vdF9zZWN0b3JfYmFja3VwX29mZnNldCkKKwkJCWNvbnRpbnVlOworCQlfY2xlYXJfc2VjdG9yIChmcy0+Z2VvbSwgc2VjdG9yKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK19jYWxjX2ZhdF9lbnRyeV9vZmZzZXQgKFBlZEZpbGVTeXN0ZW0qIGZzLCBGYXRDbHVzdGVyIGNsdXN0ZXIpCit7CisJRmF0U3BlY2lmaWMqCWZzX2luZm8gPSBGQVRfU1BFQ0lGSUMgKGZzKTsKKworCXN3aXRjaCAoZnNfaW5mby0+ZmF0X3R5cGUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEZBVF9UWVBFX0ZBVDEyOgorICAgICAgICAgICAgICAgICAgICAgICAgUEVEX0FTU0VSVCAoMCwgKHZvaWQpIDApOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJY2FzZSBGQVRfVFlQRV9GQVQxNjoKKwkJCXJldHVybiBjbHVzdGVyICogMjsKKworCQljYXNlIEZBVF9UWVBFX0ZBVDMyOgorCQkJcmV0dXJuIGNsdXN0ZXIgKiA0OworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK19jbGVhcl91bnVzZWRfZmF0cyAoUGVkRmlsZVN5c3RlbSogZnMpCit7CisJRmF0U3BlY2lmaWMqCWZzX2luZm8gPSBGQVRfU1BFQ0lGSUMgKGZzKTsKKwlQZWRTZWN0b3IJdGFibGVfc3RhcnQ7CisJaW50CQl0YWJsZV9udW07CisJaW50CQlsYXN0X2FjdGl2ZV9vZmZzZXQ7CisJUGVkU2VjdG9yCWxhc3RfYWN0aXZlX3NlY3RvcjsKKwlpbnQJCWxhc3RfYWN0aXZlX3NlY3Rvcl9vZmZzZXQ7CisKKwlsYXN0X2FjdGl2ZV9vZmZzZXQKKwkJPSBfY2FsY19mYXRfZW50cnlfb2Zmc2V0IChmcywgZnNfaW5mby0+ZmF0LT5jbHVzdGVyX2NvdW50KTsKKwlsYXN0X2FjdGl2ZV9zZWN0b3IgPSBsYXN0X2FjdGl2ZV9vZmZzZXQgLyA1MTI7CisJbGFzdF9hY3RpdmVfc2VjdG9yX29mZnNldCA9IGxhc3RfYWN0aXZlX29mZnNldCAlIDUxMiArIDQ7CisKKwlmb3IgKHRhYmxlX251bSA9IDA7IHRhYmxlX251bSA8IGZzX2luZm8tPmZhdF90YWJsZV9jb3VudDsgdGFibGVfbnVtKyspIHsKKwkJdGFibGVfc3RhcnQgPSBmc19pbmZvLT5mYXRfb2Zmc2V0CisJCQkgICAgICArIHRhYmxlX251bSAqIGZzX2luZm8tPmZhdF9zZWN0b3JzOworCisJCWlmIChsYXN0X2FjdGl2ZV9zZWN0b3Jfb2Zmc2V0IDwgNTEyKSB7CisJCQlfY2xlYXJfcGFydGlhbF9yYW5nZSAoCisJCQkJZnMtPmdlb20sCisJCQkJdGFibGVfc3RhcnQgKyBsYXN0X2FjdGl2ZV9zZWN0b3IsCisJCQkJbGFzdF9hY3RpdmVfc2VjdG9yX29mZnNldCwKKwkJCQk1MTIpOworCQl9CisKKwkJaWYgKGxhc3RfYWN0aXZlX3NlY3RvciA8IGZzX2luZm8tPmZhdF9zZWN0b3JzIC0gMikgeworCQkJX2NsZWFyX3NlY3Rvcl9yYW5nZSAoCisJCQkJZnMtPmdlb20sCisJCQkJdGFibGVfc3RhcnQgKyBsYXN0X2FjdGl2ZV9zZWN0b3IgKyAxLAorCQkJCXRhYmxlX3N0YXJ0ICsgZnNfaW5mby0+ZmF0X3NlY3RvcnMgLSAxKTsKKwkJfQorCX0KK30KKworc3RhdGljIGludAorX2NsZWFyX3VudXNlZF9jbHVzdGVycyAoUGVkRmlsZVN5c3RlbSogZnMpCit7CisJRmF0U3BlY2lmaWMqCWZzX2luZm8gPSBGQVRfU1BFQ0lGSUMgKGZzKTsKKwlGYXRDbHVzdGVyCWNsdXN0ZXI7CisJRmF0Q2x1c3RlcglydW5fc3RhcnQgPSAwOyAvKiBzaHV0IGdjYyB1cCEgKi8KKwlGYXRDbHVzdGVyCXJ1bl9sZW5ndGggPSAwOworCisJZm9yIChjbHVzdGVyID0gMjsgY2x1c3RlciA8IGZzX2luZm8tPmNsdXN0ZXJfY291bnQgKyAyOyBjbHVzdGVyKyspIHsKKwkJaWYgKGZhdF90YWJsZV9pc19hdmFpbGFibGUgKGZzX2luZm8tPmZhdCwgY2x1c3RlcikpIHsKKwkJCWlmICghcnVuX2xlbmd0aCkgeworCQkJCXJ1bl9zdGFydCA9IGNsdXN0ZXI7CisJCQkJcnVuX2xlbmd0aCA9IDE7CisJCQl9IGVsc2UgeworCQkJCXJ1bl9sZW5ndGgrKzsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChydW5fbGVuZ3RoKQorCQkJCV9jbGVhcl9jbHVzdGVycyAoZnMsIHJ1bl9zdGFydCwgcnVuX2xlbmd0aCk7CisJCQlydW5fbGVuZ3RoID0gMDsKKwkJfQorCX0KKworCWlmIChydW5fbGVuZ3RoKQorCQlfY2xlYXJfY2x1c3RlcnMgKGZzLCBydW5fc3RhcnQsIHJ1bl9sZW5ndGgpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCitfY2xlYXJfdW51c2VkX2ZhdCAoUGVkRmlsZVN5c3RlbSogZnMpCit7CisJbWVtc2V0IChidWZmZXIsIDAsIENMRUFSX0JVRkZFUl9TSVpFKTsKKworCV9jbGVhcl9iZWZvcmVfZmF0IChmcyk7CisJX2NsZWFyX3VudXNlZF9mYXRzIChmcyk7CisJX2NsZWFyX3VudXNlZF9jbHVzdGVycyAoZnMpOworfQorCisvKiBidXJlYXVjcmFjeSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludAorbWFpbiAoaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKK3sKKwlQZWREZXZpY2UqCQlkZXY7CisJUGVkRGlzayoJCWRpc2s7CisJUGVkUGFydGl0aW9uKgkJcGFydDsKKwlQZWRGaWxlU3lzdGVtKgkJZnM7CisKKyAgICAgICAgcHJvZ3JhbV9uYW1lID0gYXJndlswXTsKKyAgICAgICAgc2V0bG9jYWxlIChMQ19BTEwsICIiKTsKKyAgICAgICAgYmluZHRleHRkb21haW4gKFBBQ0tBR0UsIExPQ0FMRURJUik7CisgICAgICAgIHRleHRkb21haW4gKFBBQ0tBR0UpOworCisJYXRleGl0IChjbG9zZV9zdGRvdXQpOworCisJcGFyc2VfbG9uZ19vcHRpb25zIChhcmdjLCBhcmd2LCBQUk9HUkFNX05BTUUsIFBBQ0tBR0UsIFZFUlNJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNhZ2UsIEFVVEhPUlMsIChjaGFyIGNvbnN0ICopIE5VTEwpOworCWlmIChnZXRvcHRfbG9uZyAoYXJnYywgYXJndiwgIiIsIE5VTEwsIE5VTEwpICE9IC0xKQorCSAgdXNhZ2UgKEVYSVRfRkFJTFVSRSk7CisKKwlpZiAoYXJnYyAtIG9wdGluZCA8IDIpCisgICAgICAgICAgeworICAgICAgICAgICAgZXJyb3IgKDAsIDAsIF8oInRvbyBmZXcgYXJndW1lbnRzIikpOworICAgICAgICAgICAgdXNhZ2UgKEVYSVRfRkFJTFVSRSk7CisgICAgICAgICAgfQorCWlmICgyIDwgYXJnYyAtIG9wdGluZCkKKyAgICAgICAgICB7CisgICAgICAgICAgICBlcnJvciAoMCwgMCwgXygidG9vIG1hbnkgYXJndW1lbnRzIikpOworICAgICAgICAgICAgdXNhZ2UgKEVYSVRfRkFJTFVSRSk7CisgICAgICAgICAgfQorCisJZGV2ID0gcGVkX2RldmljZV9nZXQgKGFyZ3YgWzFdKTsKKwlpZiAoIWRldikKKwkJZ290byBlcnJvcjsKKwlpZiAoIXBlZF9kZXZpY2Vfb3BlbiAoZGV2KSkKKwkJZ290byBlcnJvcjsKKworCWRpc2sgPSBwZWRfZGlza19uZXcgKGRldik7CisJaWYgKCFkaXNrKQorCQlnb3RvIGVycm9yX2Nsb3NlX2RldjsKKyAKKwlwYXJ0ID0gcGVkX2Rpc2tfZ2V0X3BhcnRpdGlvbiAoZGlzaywgYXRvaSAoYXJndlsyXSkpOworCWlmICghcGFydCkgeworCQlwcmludGYgKCJDb3VsZG4ndCBmaW5kIHBhcnRpdGlvbiBgJXMnXG4iLCBhcmd2WzJdKTsKKwkJZ290byBlcnJvcl9kZXN0cm95X2Rpc2s7CisJfQorCisJZnMgPSBwZWRfZmlsZV9zeXN0ZW1fb3BlbiAoJnBhcnQtPmdlb20pOworCWlmICghZnMpCisJCWdvdG8gZXJyb3JfZGVzdHJveV9kaXNrOworCisJaWYgKHN0cm5jbXAgKGZzLT50eXBlLT5uYW1lLCAiZmF0IiwgMykpIHsKKwkJcHJpbnRmICgiTm90IGEgRkFUIGZpbGUgc3lzdGVtIVxuIik7CisJCWdvdG8gZXJyb3JfY2xvc2VfZnM7CisJfQorCisJX2NsZWFyX3VudXNlZF9mYXQgKGZzKTsKKworCXBlZF9maWxlX3N5c3RlbV9jbG9zZSAoZnMpOworCXBlZF9kaXNrX2Rlc3Ryb3kgKGRpc2spOworCXBlZF9kZXZpY2VfY2xvc2UgKGRldik7CisJcmV0dXJuIDA7CisKK2Vycm9yX2Nsb3NlX2ZzOgorCXBlZF9maWxlX3N5c3RlbV9jbG9zZSAoZnMpOworZXJyb3JfZGVzdHJveV9kaXNrOgorCXBlZF9kaXNrX2Rlc3Ryb3kgKGRpc2spOworZXJyb3JfY2xvc2VfZGV2OgorCXBlZF9kZXZpY2VfY2xvc2UgKGRldik7CitlcnJvcjoKKwlyZXR1cm4gMTsKK30KKworI2Vsc2UgLyogRElTQ09WRVJfT05MWSAqLworCisvKiBoYWNrISAqLworaW50CittYWluKCkKK3sKKwlwcmludGYgKCJZb3UgbXVzdCBjb21waWxlIGxpYnBhcnRlZCB3aXRoIGZ1bGwgcmVhZC93cml0ZSBzdXBwb3J0XG4iKTsKKwlyZXR1cm4gMTsKK30KKworI2VuZGlmIC8qIERJU0NPVkVSX09OTFkgKi8KZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9kZWJ1Zy90ZXN0L0hPV1RPIGIvcGFydGVkLTEuOC43L2RlYnVnL3Rlc3QvSE9XVE8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQzYWEwZAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9kZWJ1Zy90ZXN0L0hPV1RPCkBAIC0wLDAgKzEsMjQxIEBACis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJCVBBUlRFRCBSRUdSRVNTSU9OIFRFU1QgSE9XVE8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJYnkgQW5kcmV3IENsYXVzZW4KKworCUNvcHlyaWdodCAoQykgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKwlUaGlzIGRvY3VtZW50IG1heSBiZSBkaXN0cmlidXRlZCBhbmQvb3IgbW9kaWZpZWQKKwl3aXRob3V0IHJlc3RyaWN0aW9uCisKKworQ09OVEVOVFMKKy0tLS0tLS0tCisKKzEJSW50cm9kdWN0aW9uCisyCVdoYXQgeW91IG5lZWQKKzMJU2V0dGluZyB1cCB0ZXN0cmMKKzQJUnVubmluZyB0aGUgdGVzdHMKKworNQlIb3cgdGhlIHRlc3RzIHdvcmsKKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzEJSU5UUk9EVUNUSU9OCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgaG93IHRvIHNhZmVseSBjb25maWd1cmUgYW5kIHJ1biB0aGUgR05VIFBhcnRlZAorcmVncmVzc2lvbiB0ZXN0cy4KKworUmVncmVzc2lvbiB0ZXN0cyBhcmUgYSBzZXQgb2YgInRlc3QgY2FzZXMiIChvciBwcm9ncmFtIGlucHV0cywgd2hhdGV2ZXIpLAordGhhdCBoYXZlIGEgd2VsbCBkZWZpbmVkICJjb3JyZWN0IiBhbmQgImJyb2tlbiIuICBUaGUgaWRlYSBpcyB0byBydW4KK3JlZ3Jlc3Npb24gdGVzdHMgYWZ0ZXIgbWFraW5nIGNoYW5nZXMsIHRvIGNoZWNrIHlvdSBkaWRuJ3QgYnJlYWsgYW55dGhpbmcuCitUaGV5IGFyZSBhbHNvIHVzZWZ1bCBmb3IgdGVzdGluZyBQYXJ0ZWQgaW4gYSBuZXcgZW52aXJvbm1lbnQuLi4gcGVyaGFwcworeW91J3JlIGNvbXB1dGVyIGhhcyBzb21ldGhpbmcgcGVjdWxpYXIgdGhhdCBicmVha3MgaXQuCisKK1RoZXJlZm9yZSwgaXQncyBoZWxwZnVsIGZvciB5b3UgdG8gcnVuIFBhcnRlZCByZWdyZXNzaW9uIHRlc3RzLgorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMglXSEFUIFlPVSBORUVECistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWW91IG5lZWQ6CisgKiBhIHNwYXJlIGhhcmQgZHJpdmUgKGZvciBHTlUvTGludXguLi4gaGF2ZW4ndCB0cmllZCBHTlUvSHVyZCkKKyAgIFRoaXMgaXMgYmVjYXVzZSBvbmx5IGdlbmRpc2sgYmxvY2sgZGV2aWNlcyBjYW4gaGF2ZSBwYXJ0aXRpb24gdGFibGVzLgorICogbXNkb3MgcGFydGl0aW9uIHRhYmxlIHN1cHBvcnQgaW4gdGhlIGtlcm5lbCAoZm9yIExpbnV4KS4gIChGSVhNRTogY2FuCisgICB1c2Ugb3VyIHNoaW55IG5ldyBwYXJ0cHJvYmUhKQorICogZmlsZSBzeXN0ZW0gc3VwcG9ydCBmb3IgZXh0MiBhbmQgZmF0CisgKiBhIHJlYXNvbmFibHkgc3RhbmRhcmQgR05VIHN5c3RlbSwgd2l0aCBkaWZmKDEpLCBiYXNoKDEpLCBlMmZzY2soOCksCisgICBkb3Nmc2NrKDgpLCBldGMuCisgKiBwYXJ0ZWQsIGNvbXBpbGVkIGluIGl0J3Mgc291cmNlIGRpcmVjdG9yeS4gIGkuZS4gLi9jb25maWd1cmUgJiYgbWFrZQorICogYSB0ZXN0IGRhdGEgc291cmNlLCBiZXR3ZWVuIDEwMCBhbmQgMTUwIE1iLCB0aGF0IGNvbnRhaW5zIGFsbAorICAgbG93ZXItY2FzZSBmaWxlbmFtZXMsIGFuZCBubyBzeW1saW5rcy4gIEl0IG11c3QgaGF2ZSBhIHNpZ25pZmljYW50CisgICAoaS5lLiBhdCBsZWFzdCA1JSkgYW1vdW50IG9mIGRhdGEgaW4gYSBzdWJkaXJlY3RvcnkuCisJWW91IGNhbiBjb252ZXJ0IGZpbGVuYW1lcyB0byBsb3dlcmNhc2Ugd2l0aDoKKworCWNkIC9kYXRhLXNvdXJjZQorCWVjaG8gJ212ICQxICQoIGVjaG8gJDEgfCB0ciBBLVogYS16ICknID4gdG9sb3dlcgorCWNobW9kIGEreCB0b2xvd2VyCisJZmluZCB8IGdyZXAgW0EtWl0gfCB4YXJncyAtbDEgLi90b2xvd2VyCisJcm0gdG9sb3dlcgorCisJKEhpbnQ6IGlmIHlvdSBkb24ndCB0cnVzdCBtZSwgc3RpY2sgYW4gImVjaG8iIGJlZm9yZSBtdiwgYW5kCisJaXQnbGwgcHJpbnQgb3V0IHdoYXQgaXQncyBnb2luZyB0byBkbyA7KQorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMwlTRVRUSU5HIFVQIFRFU1RSQworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSB0ZXN0cmMgbXVzdCBiZSBjb25maWd1cmVkIGZvciB5b3VyIHN5c3RlbS4gIFRoZSB0ZXN0cyB3aWxsIHJlZnVzZQordG8gcnVuIGlmIHlvdSBkb24ndC4gIEknbGwgd29yayBmcm9tIHRvcC10by1ib3R0b20sIGRlc2NyaWJpbmcgaG93Cit0byBmaWxsIGluIGVhY2ggdmFsdWU6CisKKworMy4xCVRFU1RfSE9TVAorLS0tLS0tLS0tLS0tLS0tLS0KK1RoaXMgZmllbGQgbXVzdCBtYXRjaCB0aGUgb3V0cHV0IG9mIGhvc3RuYW1lKDEpLiAgVGhpcyBpcyBqdXN0IGEgc2FmZXR5CitjaGVjaywgc28geW91IGRvbid0IHVzZSB0aGUgd3JvbmcgdGVzdHJjIGZpbGUsIGFuZCBkZXN0cm95IHRoZSB3cm9uZworZGF0YSA7KQorCitFeGFtcGxlOgorCVRFU1RfSE9TVD1taXJrd29vZAorCiszLjIJVEVTVF9QQVJURURfQkFTRQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGlzIGlzIHRoZSBkaXJlY3Rvcnkgd2hlcmUgeW91IHVudGFycmVkIGFuZCBjb21waWxlZCBwYXJ0ZWQ6CisKK0V4YW1wbGU6CisJVEVTVF9QQVJURURfQkFTRT1+Y2xhdXNlbi9wYXJ0ZWQtMS40LjIwCisKKzMuMwlURVNUX1BBUlRFRF9DT01NQU5ECistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1lvdSBzaG91bGRuJ3QgbmVlZCB0byBjaGFuZ2UgdGhpcy4gIEl0J3MganVzdCB3aGVyZSB0byBmaW5kIHBhcnRlZC4KKworRXhhbXBsZToKKwlURVNUX1BBUlRFRF9DT01NQU5EPSRURVNUX1BBUlRFRF9CQVNFL3BhcnRlZC9wYXJ0ZWQKKworMy40CVRFU1RfUEFSVEVEX0NMRUFSRkFUCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitZb3Ugc2hvdWxkbid0IG5lZWQgdG8gY2hhbmdlIHRoaXMuICBJdCdzIGp1c3Qgd2hlcmUgdG8gZmluZCBjbGVhcmZhdCwKK2Egc3BlY2lhbCB0b29sIHRvIGhlbHAgdGVzdCBQYXJ0ZWQncyBmYXQgY29kZS4gIEFsbCBpdCBkb2VzIGlzIHplcm8KK291dCB1bnVzZWQgKG1ldGEpZGF0YS4gIChUaGVyZSB3ZXJlIGNhc2VzIGluIHRoZSBwYXN0IHdoZXJlIHN0YWxlCittZXRhZGF0YSB3YXMgbWFraW5nIGl0IGFwcGVhciB0aGF0IHBhcnRlZCB3YXMgd29ya2luZywgd2hlbiBpdCB3YXNuJ3QpCisKK0V4YW1wbGU6CisJVEVTVF9QQVJURURfQ0xFQVJGQVQ9JFRFU1RfUEFSVEVEX0JBU0UvZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQKKworMy41CVRFU1RfRFJJVkUKKy0tLS0tLS0tLS0tLS0tLS0tLQorVGhlIGRyaXZlIHRvIGJlIGNvbXBsZXRlbHkgY2xvYmJlcmVkISAgaS5lLiB3aGVyZSB0ZXN0aW5nIHdpbGwgb2NjdXIuCitOZWVkbGVzcyB0byBzYXksIEkgaG9wZSB5b3UgZG9uJ3QgaGF2ZSBhbnl0aGluZyBpbXBvcnRhbnQgdGhlcmUuCitFeGFtcGxlOgorCitFeGFtcGxlOgorCVRFU1RfRFJJVkU9L2Rldi9oZGMKKworMy42CVRFU1RfRFJJVkUKKy0tLS0tLS0tLS0tLS0tLS0tLQorVGhlIHNpemUgb2YgdGhlIGRpc2ssIGluIG1lZ2FieXRlcywgZXhjbHVkaW5nIHRoZSBmcmFjdGlvbmFsIHBhcnQgKGRlY2ltYWwKK3BvaW50KS4gIFlvdSBjYW4gZ2V0IHRoaXMgZnJvbSBQYXJ0ZWQncyBwcmludCBvdXRwdXQuICAoR2VvbWV0cnkgb2YKKy9kZXYvaGRjIGlzIDAuMC0qVEhJUyBJUyBJVCopLgorCitFeGFtcGxlOgorCVRFU1RfRFJJVkVfU0laRT04MDYzCisKKzMuNwlURVNUX01PVU5UX1BPSU5UCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0EgbW91bnQgcG9pbnQgdGhhdCB0aGUgdGVzdHMgY2FuIHVzZSwgdG8gbW91bnQgJFRFU1RfRFJJVkUuICBPYnZpb3VzbHksIHlvdQorbmVlZCB0byBjcmVhdGUgaXQgd2l0aCBta2RpcigxKS4KKworRXhhbXBsZToKKwlURVNUX01PVU5UX1BPSU5UPS9tbnQvdGVzdAorCiszLjgJVEVTVF9EQVRBCistLS0tLS0tLS0tLS0tLS0tLQorV2hlcmUgdG8gZ2V0IHRlc3QgZGF0YSBmcm9tLiAgU2VlIGFkdmljZSBpbiBzZWN0aW9uIDIgZm9yIHJlcXVpcmVtZW50cworb24gdGhlIHRlc3QgZGF0YS4KKworRXhhbXBsZToKKwlURVNUX0RBVEE9L3Zhci93d3cKKworMy45CVRFU1RfREFUQV9IT0xFCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBIGRpcmVjdG9yeSBpbnNpZGUgJFRFU1RfREFUQSwgdGhhdCB3aWxsIGJlIGRlbGV0ZWQgdG8gY3JlYXRlIHNvbWUKK2ZyYWdtZW50YXRpb24uICBJdCBzaG91bGQgYmUgYXQgbGVhc3QgNSUgYW5kIGF0IG1vc3QgODAlIG9mIHRoZQordGVzdCBkYXRhLgorCitFeGFtcGxlOgorCVRFU1RfREFUQV9IT0xFPWljb25zCisKKzMuMTAJVEVTVF9GU19VU0VfRElTS19MQUJFTAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitXaGljaCBkaXNrIGxhYmVsIHRvIHVzZSBmb3IgdGVzdGluZyBmaWxlIHN5c3RlbXMuICBBdCB0aGUgbW9tZW50LCBvbmx5Cittc2RvcyBpcyBzdXBwb3J0ZWQvdGVzdGVkLCBhbHRob3VnaCBtb3N0IHNob3VsZCB3b3JrLgorCitFeGFtcGxlOgorCVRFU1RfRlNfVVNFX0RJU0tfTEFCRUw9bXNkb3MKKworMy4xMQlRVUlFVF9LRVJORUwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCitTZXQgdG8gMSBpZiB5b3Ugd2FudCB0byBzaHV0IHVwIHRoZSBrZXJuZWwncyBhbm5veWluZyBtZXNzYWdlcworCitFeGFtcGxlOgorCVFVSUVUX0tFUk5FTD0xCisKKzMuMTIJVkVSQk9TRV9MT0dTCistLS0tLS0tLS0tLS0tLS0tLS0tLQorU2V0IHRvIDEgaWYgeW91IHdhbnQgbG9nZ2luZyBvZiBldmVyeXRoaW5nLCBpbmNsdWRpbmcgc3VjY2Vzc2Z1bCB0ZXN0cy4KKworRXhhbXBsZToKKwlWRVJCT1NFX0xPR1M9MQorCiszLjEzCU1BTExPQ19UUkFDRQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1VuY29tbWVudCB0aGlzIGlmIHlvdSB3YW50IHRvIGRvIG1hbGxvYygpIGRlYnVnZ2luZyB3aXRoIG10cmFjZS4KK1RPRE86IGRvY3VtZW50IHRoaXMuCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis0CVJVTk5JTkcgVEhFIFRFU1RTCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworNC4xCVN0YXJ0aW5nIHRoZSB0ZXN0cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RvIHJ1biB0aGUgdGVzdHMsIHlvdSBtdXN0IGJlIHJvb3QuICBUbyBydW4gYWxsIHRlc3RzLCB0eXBlOgorCisJLi90ZXN0CisKK1RvIHJ1biBhIHN1YnNldCBvZiB0ZXN0cywgeW91IGNhbiB0eXBlIHBhcnQgb2YgdGhlIGZpbGUgbmFtZSBvZgordGhvc2UgdGVzdHMuICBGb3IgZXhhbXBsZSwgdG8gcnVuIGFsbCBwYXJ0aXRpb24gdGFibGUgdGVzdHMsIHR5cGU6CisKKwkuL3Rlc3QgZGlzaworCitPciB0aGUgRkFUIHRlc3RzOgorCisJLi90ZXN0IGZhdAorCis0LjIJU3RvcHBpbmcgdGhlIHRlc3RzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSWYgeW91IHdhbnQgdG8gaW50ZXJydXB0IHRoZSB0ZXN0cywgdGhlIGVhc2llc3Qgd2F5IGlzOgorCisJKDEpIGhpdCBjdHJsLXogb24gdGhlIGNvbnRyb2xsaW5nIHZpcnR1YWwgY29uc29sZSAvIHRlcm1pbmFsCisJKDIpIHJ1biAicHMiLCB3aXRoIG5vIGFyZ3VtZW50cworCSgzKSBydW4gImtpbGwgLTkgW1BJRF0iLCB3aGVyZSBbUElEXSBpcyB0aGUgcHJvY2VzcyBpZCBvZgorCSAgICAidGVzdCIKKworNC4zCUV4YW1pbmluZyB0aGUgbG9ncworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0luIHByb2dyZXNzIGxvZ3MgYXJlIHdyaXR0ZW4gdG8gdGVzdF9vdXQuICBBZnRlciBlYWNoIHRlc3QgY29tcGxldGVzLAoraXQncyBvdXRwdXQgKGZyb20gdGVzdF9vdXQpLCBhbW9uZyBvdGhlciB0aGluZ3MgaXMgYXBwZW5kZWQgdG8gdGVzdF9sb2cKKworVG8gY2hlY2sgaWYgYW55IHRlc3RzIGZhaWxlZCwgdHlwZToKKworCWdyZXAgZmFpbGVkIHRlc3RfbG9nID4gL2Rldi9udWxsICYmIGVjaG8gRkFJTEVEIHx8IGVjaG8gUEFTU0VECisKK0lmIHNvbWUgdGVzdHMgZmFpbGVkLCBjaGVjayB0aGUgbG9ncyB0byBzZWUgd2hhdCB0aGUgcHJvYmxlbSBpcy4gIFlvdQorbWF5IGhhdmUgc2V0IHVwIHRoZSByZWdyZXNzaW9uIHRlc3RzIGluY29ycmVjdGx5LgorCis0LjQJU2VuZGluZyBidWcgcmVwb3J0cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJZiB5b3UgdGhpbmsgaXQncyBhIGJ1ZyAob3IgeW91J3JlIG5vdCBzdXJlKSwgZW1haWwgdXMhCisKKwlidWctcGFydGVkQGdudS5vcmcKKworUGxlYXNlIGF0dGFjaCB0aGUgdGVzdF9sb2cuICBHemlwIGl0IGZpcnN0IDspCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis1CUhPVyBUSEUgVEVTVFMgV09SSworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1BhcnRlZCBoYXMgcmVncmVzc2lvbiB0ZXN0cyBmb3IgYWxsIHBhcnRpdGlvbiB0YWJsZSBmb3JtYXRzLCBhbmQgZm9yCit0aGUgZXh0MiwgZmF0IGFuZCBsaW51eHN3YXAuICBUaGUgcGFydGl0aW9uIHRhYmxlIHRlc3RzIGFyZSBtYWlubHkKKyJDcmVhdGUgcHJvYmxlbSBYIGFuZCB0ZXN0IHRoYXQgcGFydGVkIGNvbXBsYWlucyBhYm91dCBpdCIuICBJdAorZG9lc24ndCBjb21wYXJlIG91dHB1dC4uLiBvbmx5IGlmIHBhcnRlZCByZXBvcnRzIGVycm9yLCBhbmQgdGhhdCBpdAorZG9lc24ndCBzZWdmYXVsdC4KKwlUaGUgZmlsZSBzeXN0ZW0gdGVzdHMgYXJlIG1haW5seSAiZG8gc29tZSBvcGVyYXRpb24gb24gdGhlCitmaWxlIHN5c3RlbSwgYW5kIGNoZWNrIGl0J3Mgc3RpbGwgZ290IHRoZSBzYW1lIGRhdGEiLCB2aWEgZGlmZigxKS4KK0Fsc28sIGl0IHJ1bnMgZG9zZnNjaygxKSBhbmQgZTJmc2NrKDEpLgorCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvZGVidWcvdGVzdC9NYWtlZmlsZS5hbSBiL3BhcnRlZC0xLjguNy9kZWJ1Zy90ZXN0L01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjYjNlMzMKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvZGVidWcvdGVzdC9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDE5IEBACitub2luc3RfU0NSSVBUUwk9IHRlc3QJCQlcCisJCSAgdGVzdF9kaXNrX2JzZAkJXAorCQkgIHRlc3RfZGlza19kb3MJCVwKKwkJICB0ZXN0X2Rpc2tfZHZoCQlcCisJCSAgdGVzdF9kaXNrX2dwdAkJXAorCQkgIHRlc3RfZGlza19wYzk4CVwKKwkJICB0ZXN0X2Rpc2tfbWFjCQlcCisJCSAgdGVzdF9kaXNrX3N1bgkJXAorCQkgIHRlc3RfZnNfZXh0MgkJXAorCQkgIHRlc3RfZnNfZmF0CQlcCisJCSAgdGVzdF9mc19saW51eF9zd2FwCVwKKwkJICB0ZXN0X2ZzX3JlaXNlcmZzCVwKKwkJICBidWlsZF9sZWFrX2xpc3QKKworRVhUUkFfRElTVAk9IEhPV1RPIHRlc3RyYyAkKG5vaW5zdF9TQ1JJUFRTKQorCitDTEVBTkZJTEVTCT0gdGVzdF9sb2cgdGVzdF9vdXQKKworTUFJTlRBSU5FUkNMRUFORklMRVMgPSBNYWtlZmlsZS5pbgpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2RlYnVnL3Rlc3QvTWFrZWZpbGUuaW4gYi9wYXJ0ZWQtMS44LjcvZGVidWcvdGVzdC9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGFlYjg1Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2RlYnVnL3Rlc3QvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw1MzAgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTAgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorCitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorc3ViZGlyID0gZGVidWcvdGVzdAorRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9hYnNvbHV0ZS1oZWFkZXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvYWxsb2NhLm00ICQodG9wX3NyY2RpcikvbTQvYXNzZXJ0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2F0ZXhpdC5tNCAkKHRvcF9zcmNkaXIpL200L2NhbGxvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jbG9zZS1zdHJlYW0ubTQgJCh0b3Bfc3JjZGlyKS9tNC9jbG9zZW91dC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jb2Rlc2V0Lm00ICQodG9wX3NyY2RpcikvbTQvY29uZmlnLWgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZGlybmFtZS5tNCAkKHRvcF9zcmNkaXIpL200L2Rvcy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9kb3VibGUtc2xhc2gtcm9vdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9lcnJvci5tNCAkKHRvcF9zcmNkaXIpL200L2V4aXRmYWlsLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2V4dGVuc2lvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9mcGVuZGluZy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9mcmVlLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0b3B0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgJCh0b3Bfc3JjZGlyKS9tNC9nbGliYzIxLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2dudWxpYi1jb21tb24ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZ251bGliLWNvbXAubTQgJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pbmxpbmUubTQgJCh0b3Bfc3JjZGlyKS9tNC9pbnR0eXBlcy1wcmkubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaW50dHlwZXMubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItaWdub3JlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbG9jYWxjaGFyc2V0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xvbmctb3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2xvbmdsb25nLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21icnRvd2MubTQgJCh0b3Bfc3JjZGlyKS9tNC9tYnN0YXRlX3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWVtY2hyLm00ICQodG9wX3NyY2RpcikvbTQvbWVtY21wLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21lbWNweS5tNCAkKHRvcF9zcmNkaXIpL200L21lbW1vdmUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWVtc2V0Lm00ICQodG9wX3NyY2RpcikvbTQvbmxzLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3BvLm00ICQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcXVvdGVhcmcubTQgJCh0b3Bfc3JjZGlyKS9tNC9yZWdleC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9yZW5hbWUubTQgJCh0b3Bfc3JjZGlyKS9tNC9ycG1hdGNoLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3NhZmUtcmVhZC5tNCAkKHRvcF9zcmNkaXIpL200L3NhZmUtd3JpdGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3NpemVfdC5tNCAkKHRvcF9zcmNkaXIpL200L3N0ZGFyZy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdGRib29sLm00ICQodG9wX3NyY2RpcikvbTQvc3RkaW50Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0ZGxpYl9oLm00ICQodG9wX3NyY2RpcikvbTQvc3RyY3Nwbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdHJpbmdfaC5tNCAkKHRvcF9zcmNkaXIpL200L3N0cm5kdXAubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3Rybmxlbi5tNCAkKHRvcF9zcmNkaXIpL200L3N0cnRvZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdHJ0b2wubTQgJCh0b3Bfc3JjZGlyKS9tNC91bmlzdGRfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC91dGltYnVmLm00ICQodG9wX3NyY2RpcikvbTQvdXRpbWUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdXRpbWVzLW51bGwubTQgJCh0b3Bfc3JjZGlyKS9tNC93Y2hhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC93Y3R5cGUubTQgJCh0b3Bfc3JjZGlyKS9tNC93aW50X3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQveGFsbG9jLm00ICQodG9wX3NyY2RpcikvbTQveHN0cm5kdXAubTQgXAorCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCithbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorCSQoQUNMT0NBTF9NNCkKK21raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK1NDUklQVFMgPSAkKG5vaW5zdF9TQ1JJUFRTKQorU09VUkNFUyA9CitESVNUX1NPVVJDRVMgPQorRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FCU09MVVRFX0lOVFRZUEVTX0ggPSBAQUJTT0xVVEVfSU5UVFlQRVNfSEAKK0FCU09MVVRFX1NURElOVF9IID0gQEFCU09MVVRFX1NURElOVF9IQAorQUJTT0xVVEVfU1RETElCX0ggPSBAQUJTT0xVVEVfU1RETElCX0hACitBQlNPTFVURV9TVFJJTkdfSCA9IEBBQlNPTFVURV9TVFJJTkdfSEAKK0FCU09MVVRFX1VOSVNURF9IID0gQEFCU09MVVRFX1VOSVNURF9IQAorQUJTT0xVVEVfV0NIQVJfSCA9IEBBQlNPTFVURV9XQ0hBUl9IQAorQUJTT0xVVEVfV0NUWVBFX0ggPSBAQUJTT0xVVEVfV0NUWVBFX0hACitBQ0xPQ0FMID0gQEFDTE9DQUxACitBTExPQ0EgPSBAQUxMT0NBQAorQUxMT0NBX0ggPSBAQUxMT0NBX0hACitBTVRBUiA9IEBBTVRBUkAKK0FSID0gQEFSQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitCSVRTSVpFT0ZfUFRSRElGRl9UID0gQEJJVFNJWkVPRl9QVFJESUZGX1RACitCSVRTSVpFT0ZfU0lHX0FUT01JQ19UID0gQEJJVFNJWkVPRl9TSUdfQVRPTUlDX1RACitCSVRTSVpFT0ZfU0laRV9UID0gQEJJVFNJWkVPRl9TSVpFX1RACitCSVRTSVpFT0ZfV0NIQVJfVCA9IEBCSVRTSVpFT0ZfV0NIQVJfVEAKK0JJVFNJWkVPRl9XSU5UX1QgPSBAQklUU0laRU9GX1dJTlRfVEAKK0JVSUxESU5GTyA9IEBCVUlMRElORk9ACitDQyA9IEBDQ0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ0hFQ0tfQ0ZMQUdTID0gQENIRUNLX0NGTEFHU0AKK0NIRUNLX0xJQlMgPSBAQ0hFQ0tfTElCU0AKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RMX0xJQlMgPSBARExfTElCU0AKK0RNX0xJQlMgPSBARE1fTElCU0AKK0VDSE8gPSBARUNIT0AKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRVhFRVhUID0gQEVYRUVYVEAKK0Y3NyA9IEBGNzdACitGRkxBR1MgPSBARkZMQUdTQAorR0VUT1BUX0ggPSBAR0VUT1BUX0hACitHTElCQzIxID0gQEdMSUJDMjFACitHTVNHRk1UID0gQEdNU0dGTVRACitHTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKK0dOVUxJQl9DSE9XTiA9IEBHTlVMSUJfQ0hPV05ACitHTlVMSUJfRFVQMiA9IEBHTlVMSUJfRFVQMkAKK0dOVUxJQl9GQ0hESVIgPSBAR05VTElCX0ZDSERJUkAKK0dOVUxJQl9GVFJVTkNBVEUgPSBAR05VTElCX0ZUUlVOQ0FURUAKK0dOVUxJQl9HRVRDV0QgPSBAR05VTElCX0dFVENXREAKK0dOVUxJQl9HRVRMT0dJTl9SID0gQEdOVUxJQl9HRVRMT0dJTl9SQAorR05VTElCX0dFVFNVQk9QVCA9IEBHTlVMSUJfR0VUU1VCT1BUQAorR05VTElCX0lNQVhBQlMgPSBAR05VTElCX0lNQVhBQlNACitHTlVMSUJfSU1BWERJViA9IEBHTlVMSUJfSU1BWERJVkAKK0dOVUxJQl9NQlNDQVNFQ01QID0gQEdOVUxJQl9NQlNDQVNFQ01QQAorR05VTElCX01CU0NBU0VTVFIgPSBAR05VTElCX01CU0NBU0VTVFJACitHTlVMSUJfTUJTQ0hSID0gQEdOVUxJQl9NQlNDSFJACitHTlVMSUJfTUJTQ1NQTiA9IEBHTlVMSUJfTUJTQ1NQTkAKK0dOVUxJQl9NQlNMRU4gPSBAR05VTElCX01CU0xFTkAKK0dOVUxJQl9NQlNOQ0FTRUNNUCA9IEBHTlVMSUJfTUJTTkNBU0VDTVBACitHTlVMSUJfTUJTUEJSSyA9IEBHTlVMSUJfTUJTUEJSS0AKK0dOVUxJQl9NQlNQQ0FTRUNNUCA9IEBHTlVMSUJfTUJTUENBU0VDTVBACitHTlVMSUJfTUJTUkNIUiA9IEBHTlVMSUJfTUJTUkNIUkAKK0dOVUxJQl9NQlNTRVAgPSBAR05VTElCX01CU1NFUEAKK0dOVUxJQl9NQlNTUE4gPSBAR05VTElCX01CU1NQTkAKK0dOVUxJQl9NQlNTVFIgPSBAR05VTElCX01CU1NUUkAKK0dOVUxJQl9NQlNUT0tfUiA9IEBHTlVMSUJfTUJTVE9LX1JACitHTlVMSUJfTUVNTUVNID0gQEdOVUxJQl9NRU1NRU1ACitHTlVMSUJfTUVNUENQWSA9IEBHTlVMSUJfTUVNUENQWUAKK0dOVUxJQl9NRU1SQ0hSID0gQEdOVUxJQl9NRU1SQ0hSQAorR05VTElCX01LRFRFTVAgPSBAR05VTElCX01LRFRFTVBACitHTlVMSUJfTUtTVEVNUCA9IEBHTlVMSUJfTUtTVEVNUEAKK0dOVUxJQl9SRUFETElOSyA9IEBHTlVMSUJfUkVBRExJTktACitHTlVMSUJfU0xFRVAgPSBAR05VTElCX1NMRUVQQAorR05VTElCX1NUUENQWSA9IEBHTlVMSUJfU1RQQ1BZQAorR05VTElCX1NUUE5DUFkgPSBAR05VTElCX1NUUE5DUFlACitHTlVMSUJfU1RSQ0FTRVNUUiA9IEBHTlVMSUJfU1RSQ0FTRVNUUkAKK0dOVUxJQl9TVFJDSFJOVUwgPSBAR05VTElCX1NUUkNIUk5VTEAKK0dOVUxJQl9TVFJEVVAgPSBAR05VTElCX1NUUkRVUEAKK0dOVUxJQl9TVFJORFVQID0gQEdOVUxJQl9TVFJORFVQQAorR05VTElCX1NUUk5MRU4gPSBAR05VTElCX1NUUk5MRU5ACitHTlVMSUJfU1RSUEJSSyA9IEBHTlVMSUJfU1RSUEJSS0AKK0dOVUxJQl9TVFJTRVAgPSBAR05VTElCX1NUUlNFUEAKK0dOVUxJQl9TVFJUT0lNQVggPSBAR05VTElCX1NUUlRPSU1BWEAKK0dOVUxJQl9TVFJUT0tfUiA9IEBHTlVMSUJfU1RSVE9LX1JACitHTlVMSUJfU1RSVE9VTUFYID0gQEdOVUxJQl9TVFJUT1VNQVhACitHUkVQID0gQEdSRVBACitIQVZFX0RFQ0xfR0VUTE9HSU5fUiA9IEBIQVZFX0RFQ0xfR0VUTE9HSU5fUkAKK0hBVkVfREVDTF9JTUFYQUJTID0gQEhBVkVfREVDTF9JTUFYQUJTQAorSEFWRV9ERUNMX0lNQVhESVYgPSBASEFWRV9ERUNMX0lNQVhESVZACitIQVZFX0RFQ0xfTUVNTUVNID0gQEhBVkVfREVDTF9NRU1NRU1ACitIQVZFX0RFQ0xfTUVNUkNIUiA9IEBIQVZFX0RFQ0xfTUVNUkNIUkAKK0hBVkVfREVDTF9TVFJEVVAgPSBASEFWRV9ERUNMX1NUUkRVUEAKK0hBVkVfREVDTF9TVFJOQ0FTRUNNUCA9IEBIQVZFX0RFQ0xfU1RSTkNBU0VDTVBACitIQVZFX0RFQ0xfU1RSTkRVUCA9IEBIQVZFX0RFQ0xfU1RSTkRVUEAKK0hBVkVfREVDTF9TVFJOTEVOID0gQEhBVkVfREVDTF9TVFJOTEVOQAorSEFWRV9ERUNMX1NUUlRPSU1BWCA9IEBIQVZFX0RFQ0xfU1RSVE9JTUFYQAorSEFWRV9ERUNMX1NUUlRPS19SID0gQEhBVkVfREVDTF9TVFJUT0tfUkAKK0hBVkVfREVDTF9TVFJUT1VNQVggPSBASEFWRV9ERUNMX1NUUlRPVU1BWEAKK0hBVkVfRFVQMiA9IEBIQVZFX0RVUDJACitIQVZFX0ZUUlVOQ0FURSA9IEBIQVZFX0ZUUlVOQ0FURUAKK0hBVkVfR0VUU1VCT1BUID0gQEhBVkVfR0VUU1VCT1BUQAorSEFWRV9JTlRUWVBFU19IID0gQEhBVkVfSU5UVFlQRVNfSEAKK0hBVkVfSVNXQ05UUkwgPSBASEFWRV9JU1dDTlRSTEAKK0hBVkVfTE9OR19MT05HX0lOVCA9IEBIQVZFX0xPTkdfTE9OR19JTlRACitIQVZFX01FTVBDUFkgPSBASEFWRV9NRU1QQ1BZQAorSEFWRV9NS0RURU1QID0gQEhBVkVfTUtEVEVNUEAKK0hBVkVfUkVBRExJTksgPSBASEFWRV9SRUFETElOS0AKK0hBVkVfU0lHTkVEX1NJR19BVE9NSUNfVCA9IEBIQVZFX1NJR05FRF9TSUdfQVRPTUlDX1RACitIQVZFX1NJR05FRF9XQ0hBUl9UID0gQEhBVkVfU0lHTkVEX1dDSEFSX1RACitIQVZFX1NJR05FRF9XSU5UX1QgPSBASEFWRV9TSUdORURfV0lOVF9UQAorSEFWRV9TTEVFUCA9IEBIQVZFX1NMRUVQQAorSEFWRV9TVERJTlRfSCA9IEBIQVZFX1NURElOVF9IQAorSEFWRV9TVFBDUFkgPSBASEFWRV9TVFBDUFlACitIQVZFX1NUUE5DUFkgPSBASEFWRV9TVFBOQ1BZQAorSEFWRV9TVFJDQVNFQ01QID0gQEhBVkVfU1RSQ0FTRUNNUEAKK0hBVkVfU1RSQ0FTRVNUUiA9IEBIQVZFX1NUUkNBU0VTVFJACitIQVZFX1NUUkNIUk5VTCA9IEBIQVZFX1NUUkNIUk5VTEAKK0hBVkVfU1RSTkRVUCA9IEBIQVZFX1NUUk5EVVBACitIQVZFX1NUUlBCUksgPSBASEFWRV9TVFJQQlJLQAorSEFWRV9TVFJTRVAgPSBASEFWRV9TVFJTRVBACitIQVZFX1NZU19CSVRZUEVTX0ggPSBASEFWRV9TWVNfQklUWVBFU19IQAorSEFWRV9TWVNfSU5UVFlQRVNfSCA9IEBIQVZFX1NZU19JTlRUWVBFU19IQAorSEFWRV9TWVNfVFlQRVNfSCA9IEBIQVZFX1NZU19UWVBFU19IQAorSEFWRV9VTklTVERfSCA9IEBIQVZFX1VOSVNURF9IQAorSEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UID0gQEhBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVEAKK0hBVkVfV0NUWVBFX0ggPSBASEFWRV9XQ1RZUEVfSEAKK0hBVkVfV0lOVF9UID0gQEhBVkVfV0lOVF9UQAorSEFWRV9fQk9PTCA9IEBIQVZFX19CT09MQAorSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitJTlRMSU5DUyA9IEBJTlRMSU5DU0AKK0lOVExMSUJTID0gQElOVExMSUJTQAorSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAorSU5UVFlQRVNfSCA9IEBJTlRUWVBFU19IQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCSUNPTlYgPSBATElCSUNPTlZACitMSUJJTlRMID0gQExJQklOVExACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQExJQlNACitMSUJUT09MID0gQExJQlRPT0xACitMTl9TID0gQExOX1NACitMVEFMTE9DQSA9IEBMVEFMTE9DQUAKK0xUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKK0xUTElCSU5UTCA9IEBMVExJQklOVExACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTFRfQUdFID0gQExUX0FHRUAKK0xUX0NVUlJFTlQgPSBATFRfQ1VSUkVOVEAKK0xUX1JFTEVBU0UgPSBATFRfUkVMRUFTRUAKK0xUX1JFVklTSU9OID0gQExUX1JFVklTSU9OQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitNS0RJUl9QID0gQE1LRElSX1BACitNU0dGTVQgPSBATVNHRk1UQAorTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAorTVNHTUVSR0UgPSBATVNHTUVSR0VACitPQkpFWFQgPSBAT0JKRVhUQAorT1MgPSBAT1NACitPU19MSUJTID0gQE9TX0xJQlNACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFSVEVETERGTEFHUyA9IEBQQVJURURMREZMQUdTQAorUEFSVEVEX0xJQlMgPSBAUEFSVEVEX0xJQlNACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKK1BPU1VCID0gQFBPU1VCQAorUE9XX0xJQiA9IEBQT1dfTElCQAorUFJJUFRSX1BSRUZJWCA9IEBQUklQVFJfUFJFRklYQAorUFJJX01BQ1JPU19CUk9LRU4gPSBAUFJJX01BQ1JPU19CUk9LRU5ACitQVFJESUZGX1RfU1VGRklYID0gQFBUUkRJRkZfVF9TVUZGSVhACitSQU5MSUIgPSBAUkFOTElCQAorUkVJU0VSX0xJQlMgPSBAUkVJU0VSX0xJQlNACitSRVBMQUNFX0NIT1dOID0gQFJFUExBQ0VfQ0hPV05ACitSRVBMQUNFX0ZDSERJUiA9IEBSRVBMQUNFX0ZDSERJUkAKK1JFUExBQ0VfR0VUQ1dEID0gQFJFUExBQ0VfR0VUQ1dEQAorUkVQTEFDRV9NS1NURU1QID0gQFJFUExBQ0VfTUtTVEVNUEAKK1NFRCA9IEBTRURACitTRUxJTlVYX0xJQlMgPSBAU0VMSU5VWF9MSUJTQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NJR19BVE9NSUNfVF9TVUZGSVggPSBAU0lHX0FUT01JQ19UX1NVRkZJWEAKK1NJWkVfVF9TVUZGSVggPSBAU0laRV9UX1NVRkZJWEAKK1NUREJPT0xfSCA9IEBTVERCT09MX0hACitTVERJTlRfSCA9IEBTVERJTlRfSEAKK1NUUklQID0gQFNUUklQQAorVVNFX05MUyA9IEBVU0VfTkxTQAorVVVJRF9MSUJTID0gQFVVSURfTElCU0AKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1dDSEFSX0ggPSBAV0NIQVJfSEAKK1dDSEFSX1RfU1VGRklYID0gQFdDSEFSX1RfU1VGRklYQAorV0NUWVBFX0ggPSBAV0NUWVBFX0hACitXSU5UX1RfU1VGRklYID0gQFdJTlRfVF9TVUZGSVhACitYR0VUVEVYVCA9IEBYR0VUVEVYVEAKK1hHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9GNzcgPSBAYWNfY3RfRjc3QAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitidWlsZGRpciA9IEBidWlsZGRpckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZG9jZGlyID0gQGRvY2RpckAKK2R2aWRpciA9IEBkdmlkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2dsX0xJQk9CSlMgPSBAZ2xfTElCT0JKU0AKK2dsX0xUTElCT0JKUyA9IEBnbF9MVExJQk9CSlNACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorbm9pbnN0X1NDUklQVFMgPSB0ZXN0CQkJXAorCQkgIHRlc3RfZGlza19ic2QJCVwKKwkJICB0ZXN0X2Rpc2tfZG9zCQlcCisJCSAgdGVzdF9kaXNrX2R2aAkJXAorCQkgIHRlc3RfZGlza19ncHQJCVwKKwkJICB0ZXN0X2Rpc2tfcGM5OAlcCisJCSAgdGVzdF9kaXNrX21hYwkJXAorCQkgIHRlc3RfZGlza19zdW4JCVwKKwkJICB0ZXN0X2ZzX2V4dDIJCVwKKwkJICB0ZXN0X2ZzX2ZhdAkJXAorCQkgIHRlc3RfZnNfbGludXhfc3dhcAlcCisJCSAgdGVzdF9mc19yZWlzZXJmcwlcCisJCSAgYnVpbGRfbGVha19saXN0CisKK0VYVFJBX0RJU1QgPSBIT1dUTyB0ZXN0cmMgJChub2luc3RfU0NSSVBUUykKK0NMRUFORklMRVMgPSB0ZXN0X2xvZyB0ZXN0X291dAorTUFJTlRBSU5FUkNMRUFORklMRVMgPSBNYWtlZmlsZS5pbgorYWxsOiBhbGwtYW0KKworLlNVRkZJWEVTOgorJChzcmNkaXIpL01ha2VmaWxlLmluOiAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggXAorCQkmJiBleGl0IDA7IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251ICBkZWJ1Zy90ZXN0L01ha2VmaWxlJzsgXAorCWNkICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1nbnUgIGRlYnVnL3Rlc3QvTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6ICAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6ICAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKK21vc3RseWNsZWFuLWxpYnRvb2w6CisJLXJtIC1mICoubG8KKworY2xlYW4tbGlidG9vbDoKKwktcm0gLXJmIC5saWJzIF9saWJzCit0YWdzOiBUQUdTCitUQUdTOgorCitjdGFnczogQ1RBR1MKK0NUQUdTOgorCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgXAorCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKKwkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCisJICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAorCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKKwkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKKwkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKKwkJCSAgIHNvcnQgLXVgIDs7IFwKKwllc2FjOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtcFIgJChzcmNkaXIpLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1wUiAkJGQvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICQoZGlzdGRpcikvJCRmaWxlIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAkKGRpc3RkaXIpLyQkZmlsZSBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUgJChTQ1JJUFRTKQoraW5zdGFsbGRpcnM6CitpbnN0YWxsOiBpbnN0YWxsLWFtCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KK3VuaW5zdGFsbDogdW5pbnN0YWxsLWFtCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCitpbnN0YWxsLXN0cmlwOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDTEVBTkZJTEVTKSIgfHwgcm0gLWYgJChDTEVBTkZJTEVTKQorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCisJLXRlc3QgLXogIiQoTUFJTlRBSU5FUkNMRUFORklMRVMpIiB8fCBybSAtZiAkKE1BSU5UQUlORVJDTEVBTkZJTEVTKQorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWdlbmVyaWMKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1leGVjLWFtOgorCitpbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLWFtCisKK3BkZi1hbToKKworcHM6IHBzLWFtCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06CisKKy5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKKworLlBIT05ZOiBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBcCisJZGlzdGNsZWFuIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIGRpc3RkaXIgZHZpIFwKKwlkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gXAorCWluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gXAorCWluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBcCisJaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBcCisJaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgXAorCWluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBcCisJbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtCisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9kZWJ1Zy90ZXN0L2J1aWxkX2xlYWtfbGlzdCBiL3BhcnRlZC0xLjguNy9kZWJ1Zy90ZXN0L2J1aWxkX2xlYWtfbGlzdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mMjE3ZWZmCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2RlYnVnL3Rlc3QvYnVpbGRfbGVha19saXN0CkBAIC0wLDAgKzEsMTIgQEAKKyMhIC9iaW4vc2gKKworaWYgdGVzdCAieCRURVNUX1BBUlRFRF9CQVNFIiA9ICJ4IjsgdGhlbgorCVRFU1RfUEFSVEVEX0JBU0U9fnBhcnRlZC9wYXJ0ZWQtZGV2CitmaQorCittdHJhY2UgJFRFU1RfUEFSVEVEX0JBU0UvcGFydGVkLy5saWJzL3BhcnRlZCAkTUFMTE9DX1RSQUNFIFwKKwl8IGdyZXAgbGlicGFydGVkIFwKKwl8IHNlZCAncy8gIGF0LiovLycgXAorCXwgc2VkICdzL15cKDB4WzAtOWEtZl1cK1wpIFwrXCgweFswLTlhLWZdXCtcKSAqLyB7XDEsIFwyfSwvJyBcCisJfCBsZXNzCisKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9kZWJ1Zy90ZXN0L3Rlc3QgYi9wYXJ0ZWQtMS44LjcvZGVidWcvdGVzdC90ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk0MWQyNTIKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvZGVidWcvdGVzdC90ZXN0CkBAIC0wLDAgKzEsMjYyIEBACisjISAvYmluL2Jhc2gKKworZG9faGVscCgpCit7CisJZWNobyBZb3UgbmVlZCB0byBmaWxsIG91dCB0aGUgdGVzdHJjIHdpdGggeW91ciBtYWNoaW5lXCdzIGRldGFpbHMgYmVmb3JlCisJZWNobyB1c2luZyB0aGlzIHNjcmlwdC4KKwlleGl0OworfQorCitkb190ZXN0KCkKK3sKKwl0ZXN0X3Byb2c9JDEKKwl0ZXN0X25hbWU9YGVjaG8gLW4gJHRlc3RfcHJvZyB8IHNlZCAicy90ZXN0Xy8vIiB8IHNlZCAicy9fLyAvIiBcCisJCSAgIHwgdHIgJ1s6bG93ZXI6XScgJ1s6dXBwZXI6XSdgCisKKwllY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKwllY2hvICJURVNUSU5HICR0ZXN0X25hbWUuLi4iCisJZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCisKKwllY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSJcCisJCT4+IHRlc3RfbG9nCisJZWNobyAiVEVTVElORyAkdGVzdF9uYW1lLi4uIiA+PiB0ZXN0X2xvZworCWVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIlwKKwkJPj4gdGVzdF9sb2cKKworCWlmIFsgLWUgY29yZSogXTsgdGhlbgorCQlybSBjb3JlKgorCWZpCisJLi8kdGVzdF9wcm9nCisJaWYgWyAtZSB0ZXN0X291dCBdOyB0aGVuCisJCWVjaG8gPiB0ZXN0X291dAorCWZpCit9CisKK2RvX3Rlc3RzKCkKK3sKKwlmb3Igd2FsayBpbiAkVEVTVF9MSVNUOyBkbworCQlpZiBbIC14ICR3YWxrIF07IHRoZW4KKwkJCWRvX3Rlc3QgJHdhbGsKKwkJZmkKKwlkb25lCit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBHTE9CQUwgSEVMUEVSIEZVTkNUSU9OUworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3BlZF90ZXN0aW5nKCkKK3sKKwllY2hvIC1uICJ0ZXN0aW5nICQxLi4uICIKKwllY2hvIC1uICJ0ZXN0aW5nICQxLi4uICIgPj4gdGVzdF9sb2cKK30KKworcGVkX3Rlc3RpbmdfZXhwZWN0X2ZhaWwoKQoreworCWVjaG8gLW4gInRlc3RpbmcgZm9yIGZhaWx1cmUgb24gJDEuLi4gIgorCWVjaG8gLW4gInRlc3RpbmcgZm9yIGZhaWx1cmUgb24gJDEuLi4gIiA+PiB0ZXN0X2xvZworfQorCitwZWRfdGVzdF9vaygpCit7CisJZWNobyAib2siCisJZWNobyAib2siID4+IHRlc3RfbG9nCisKKwlpZiBbICJ4JFZFUkJPU0VfTE9HUyIgPSAieDEiIF07IHRoZW4KKwkJY2F0IHRlc3Rfb3V0ID4+IHRlc3RfbG9nCisJCWVjaG8gPj4gdGVzdF9sb2cKKwlmaQorCisJZXhwb3J0IE9LX0NPVU5UPSRbICRPS19DT1VOVCArIDEgXQorfQorCitwZWRfdGVzdF9mYWlsZWQoKQoreworCWVjaG8gImZhaWxlZCIKKwllY2hvICJmYWlsZWQiID4+IHRlc3RfbG9nCisKKwljYXQgdGVzdF9vdXQgPj4gdGVzdF9sb2cKKwllY2hvID4+IHRlc3RfbG9nCisKKwlleHBvcnQgRkFJTEVEX0NPVU5UPSRbICRGQUlMRURfQ09VTlQgKyAxIF0KKworCWlmIFsgLWUgY29yZSBdOyB0aGVuCisJCWVjaG8gY29yZSBkdW1wZWQsIHNhdmluZyB0byBjb3JlLSRDT1JFX0NPVU5URVJcCisJCQk+PiB0ZXN0X2xvZworCQllY2hvID4+IHRlc3RfbG9nCisJCW12IGNvcmUgY29yZS0kQ09SRV9DT1VOVEVSCisJCWV4cG9ydCBDT1JFX0NPVU5URVI9JFsgJENPUkVfQ09VTlRFUiArIDEgXQorCWZpCit9CisKK2NoZWNrX2xlYWtzKCkKK3sKKwlpZiB0ZXN0ICJ4JE1BTExPQ19UUkFDRSIgIT0gIngiOyB0aGVuCisJCS4vYnVpbGRfbGVha19saXN0ID4gbGVha3MKKwkJaWYgdGVzdCAtcyBsZWFrczsgdGhlbgorCQkJcHJpbnRmIFwKKydGb3VuZCBtZW1vcnkgbGVha3M6IChhZGQgdGhpcyBsaXN0IHRvIGRvZGdleV9tYWxsb2NfbGlzdCBpblxuJ1wKKydsaWJwYXJ0ZWQvbGlicGFydGVkLmMgdG8gZGVidWcgdGhlbSlcbicgXAorCQkJCT4+IHRlc3Rfb3V0CisJCQljYXQgbGVha3MgPj4gdGVzdF9vdXQKKwkJCXJldHVybiAwCisJCWZpCisJCXJtIGxlYWtzCisJZmkKKworCXJldHVybiAxCit9CisKK3BlZF90ZXN0X2dldF92YWwoKQoreworCXBvc3RfY29tbWFuZD0kMgorCWlmIHRlc3QgIngkaW5wdXQiID0gIngiOyB0aGVuCisJCWlucHV0PSJDYW5jZWwiCisJZmkKKwlpZiB0ZXN0ICJ4JHBvc3RfY29tbWFuZCIgPSAieCI7IHRoZW4KKwkJcG9zdF9jb21tYW5kPSJ0cnVlIgorCWZpCisKKwlpZiB0ZXN0IC1lIGxlYWtzOyB0aGVuCisJCXJtIGxlYWtzCisJZmkKKwlpZiB0ZXN0ICJ4JE1BTExPQ19UUkFDRSIgIT0gIngiOyB0aGVuCisJCWlmIHRlc3QgLWUgJE1BTExPQ19UUkFDRTsgdGhlbgorCQkJcm0gJE1BTExPQ19UUkFDRQorCQlmaQorCWZpCisKKwlpZiAkVEVTVF9QQVJURURfQ09NTUFORCAtcyAkVEVTVF9EUklWRSAkMSAyPiYxID4gdGVzdF9vdXQ7IHRoZW4KKwkJaWYgWyAtZSBjb3JlIF07IHRoZW4KKwkJCXJldHVybiAwCisJCWZpCisKKwkJaWYgY2hlY2tfbGVha3M7IHRoZW4KKwkJCXJldHVybiAwCisJCWZpCisKKwkJaWYgKCBlY2hvID4+IHRlc3Rfb3V0IDsgKCBldmFsICRwb3N0X2NvbW1hbmQgKSAyPiYxID4+IHRlc3Rfb3V0ICk7IHRoZW4KKwkJCXJldHVybiAxCisJCWVsc2UKKwkJCXJldHVybiAwCisJCWZpCisJZWxzZQorCQlyZXR1cm4gMAorCWZpCit9CisKK3BlZF90ZXN0KCkKK3sKKwlwZWRfdGVzdGluZyAiJDEiCisJaWYgcGVkX3Rlc3RfZ2V0X3ZhbCAiJDIiICIkMyI7IHRoZW4KKwkJcGVkX3Rlc3RfZmFpbGVkCQorCQlyZXR1cm4gMQorCWVsc2UKKwkJcGVkX3Rlc3Rfb2sKKwkJcmV0dXJuIDAKKwlmaQorfQorCitwZWRfdGVzdF9leHBlY3RfZmFpbCgpCit7CisJcGVkX3Rlc3RpbmdfZXhwZWN0X2ZhaWwgIiQxIgorCWlmIHBlZF90ZXN0X2dldF92YWwgIiQyIiAiJDMiOyB0aGVuCisKKwkjIHdlIGV4cGVjdCBhIENMRUFOIGZhaWwgOi0pCisJCWlmIFsgLWUgY29yZSBdOyB0aGVuCisJCQlwZWRfdGVzdF9mYWlsZWQKKwkJCXJldHVybiAxCisJCWZpCisJCWlmIGNoZWNrX2xlYWtzOyB0aGVuCisJCQlwZWRfdGVzdF9mYWlsZWQKKwkJCXJldHVybiAxCisJCWZpCisKKwkJcGVkX3Rlc3Rfb2sKKwkJcmV0dXJuIDAKKwllbHNlCisJCXBlZF90ZXN0X2ZhaWxlZAorCQlyZXR1cm4gMQorCWZpCit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyB0aGUgcmVzdC4uLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2luaXRfZW52aXJvbm1lbnQoKQoreworCWlmIFsgIngkVUlEIiAhPSAieDAiIF07IHRoZW4KKwkJZWNobyBXYXJuaW5nOiB5b3Ugc2hvdWxkIHByb2JhYmx5IGJlIHJ1bm5pbmcgdGhpcyBhcyByb290LgorCQllY2hvCisJZmkKKworCS4gdGVzdHJjCisJYGNhdCB0ZXN0cmMgfCBncmVwICJeW14jXS4qPSIgfCBzZWQgInMvPS4qLy8iIHwgc2VkICJzL14vZXhwb3J0IC8iIGAKKworCWlmIFsgIngkSE9TVE5BTUUiICE9ICJ4JFRFU1RfSE9TVCIgXTsgdGhlbgorCQlkb19oZWxwCisJZmkKKworCWV4cG9ydCBPTERfS0VSTkVMX1BSSU5USz1gY2F0IC9wcm9jL3N5cy9rZXJuZWwvcHJpbnRrYAorCisJaWYgWyAieCRRVUlFVF9LRVJORUwiID0gIngxIiBdOyB0aGVuCisJCWVjaG8gMSAxIDEgMSA+IC9wcm9jL3N5cy9rZXJuZWwvcHJpbnRrCisJZmkKKworCXJlbmljZSAyMCAkJCA+IC9kZXYvbnVsbAorCisJZXhwb3J0IENPUkVfQ09VTlRFUj0xCisJZXhwb3J0IE9LX0NPVU5UPTAKKwlleHBvcnQgRkFJTEVEX0NPVU5UPTAKKworCWV4cG9ydCAtZiBwZWRfdGVzdGluZworCWV4cG9ydCAtZiBwZWRfdGVzdGluZ19leHBlY3RfZmFpbAorCWV4cG9ydCAtZiBwZWRfdGVzdF9vaworCWV4cG9ydCAtZiBwZWRfdGVzdF9mYWlsZWQKKwlleHBvcnQgLWYgcGVkX3Rlc3RfZ2V0X3ZhbAorCWV4cG9ydCAtZiBwZWRfdGVzdAorCWV4cG9ydCAtZiBwZWRfdGVzdF9leHBlY3RfZmFpbAorCWV4cG9ydCAtZiBjaGVja19sZWFrcworfQorCitkb25lX2Vudmlyb25tZW50KCkKK3sKKwllY2hvICRPTERfS0VSTkVMX1BSSU5USyA+IC9wcm9jL3N5cy9rZXJuZWwvcHJpbnRrCit9CisKK29wZW5fbG9nKCkKK3sKKwlpZiBbIC1lIHRlc3RfbG9nIF07IHRoZW4KKwkJZWNobyAtbiA+IHRlc3RfbG9nOworCWZpCit9CisKK3ByaW50X3ZlcnNpb24oKQoreworCWVjaG8gLW4gIlRlc3RpbmcgIgorCSRURVNUX1BBUlRFRF9DT01NQU5EIC0tdmVyc2lvbgorCWVjaG8KKworCWVjaG8gLW4gIlRlc3RpbmcgIiA+PiB0ZXN0X2xvZworCSRURVNUX1BBUlRFRF9DT01NQU5EIC0tdmVyc2lvbiA+PiB0ZXN0X2xvZworCWVjaG8gPj4gdGVzdF9sb2cKK30KKworbWFpbigpCit7CisJaW5pdF9lbnZpcm9ubWVudAorCW9wZW5fbG9nCisJcHJpbnRfdmVyc2lvbgorCWRvX3Rlc3RzCisJZG9uZV9lbnZpcm9ubWVudAorfQorCitpZiBbICJ4JDEiICE9ICAieCIgXTsgdGhlbgorCWV4cG9ydCBURVNUX0xJU1Q9InRlc3RfKiQxKiIKK2Vsc2UKKwlleHBvcnQgVEVTVF9MSVNUPSJ0ZXN0XyoiCitmaQorCittYWluCisKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9kZWJ1Zy90ZXN0L3Rlc3RfZGlza19ic2QgYi9wYXJ0ZWQtMS44LjcvZGVidWcvdGVzdC90ZXN0X2Rpc2tfYnNkCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNiY2YwZjAKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvZGVidWcvdGVzdC90ZXN0X2Rpc2tfYnNkCkBAIC0wLDAgKzEsOTQgQEAKKyMhIC9iaW4vYmFzaAorCit0ZXN0X21rbGFiZWwoKQoreworCXBlZF90ZXN0ICJta2xhYmVsIiAibWtsYWJlbCBic2QiCit9CisKK3Rlc3RfbWtwYXJ0KCkKK3sKKwlwZWRfdGVzdCAibWtwYXJ0IiAibWtsYWJlbCBic2QgbWtwYXJ0IHByaW1hcnkgZXh0MiAxMCAyMCIKK30KKwordGVzdF9ta3BhcnRmcygpCit7CisJcGVkX3Rlc3QgIm1rcGFydGZzIiAibWtsYWJlbCBic2QgbWtwYXJ0ZnMgcHJpbWFyeSBleHQyIDEwIDIwIgorfQorCit0ZXN0X3JtKCkKK3sKKwlwZWRfdGVzdCAicm0iICJta2xhYmVsIGJzZCBta3BhcnQgcHJpbWFyeSBleHQyIDEwIDIwIHJtIDEiCit9CisKK3Rlc3RfdG9vX21hbnlfcHJpbWFyeSgpCit7CisJcGVkX3Rlc3RfZXhwZWN0X2ZhaWwgInRvbyBtYW55IHByaW1hcnkgcGFydGl0aW9ucyIgXAorCQkibWtsYWJlbCBic2QgXAorCQkgbWtwYXJ0IHByaW1hcnkgZXh0MiAxMCAyMCBcCisJCSBta3BhcnQgcHJpbWFyeSBleHQyIDIwIDMwIFwKKwkJIG1rcGFydCBwcmltYXJ5IGV4dDIgMzAgNDAgXAorCQkgbWtwYXJ0IHByaW1hcnkgZXh0MiA0MCA1MCBcCisJCSBta3BhcnQgcHJpbWFyeSBleHQyIDUwIDYwIFwKKwkJIG1rcGFydCBwcmltYXJ5IGV4dDIgNjAgNzAgXAorCQkgbWtwYXJ0IHByaW1hcnkgZXh0MiA3MCA4MCBcCisJCSBta3BhcnQgcHJpbWFyeSBleHQyIDgwIDkwIFwKKwkJIG1rcGFydCBwcmltYXJ5IGV4dDIgOTAgMTAwIgorfQorCit0ZXN0X3ByaW1hcnlfb3ZlcmxhcCgpCit7CisJcGVkX3Rlc3QgImNvcnJlY3Rpb24gb2YgcGFydGl0aW9uIG92ZXJsYXBwaW5nIlwKKwkJIm1rbGFiZWwgYnNkIFwKKwkJIG1rcGFydCBwcmltYXJ5IGV4dDIgMCAxMDBcCisJCSBta3BhcnQgcHJpbWFyeSBleHQyIDUwIDE1MCIKK30KKwordGVzdF9ub25leGlzdGVudF9yZW1vdmUoKQoreworCXBlZF90ZXN0X2V4cGVjdF9mYWlsICJyZW1vdmFsIG9mIG5vbi1leGlzdGVudCBwYXJ0aXRpb24iXAorCQkibWtsYWJlbCBic2QgXAorCQkgcm0gMSIKK30KKwordGVzdF9jcmVhdGVfZXh0ZW5kZWQoKQoreworCXBlZF90ZXN0X2V4cGVjdF9mYWlsICJjcmVhdGlvbiBvZiBleHRlbmRlZCBwYXJ0aXRpb24iXAorCQkibWtsYWJlbCBic2QgXAorCQkgbWtwYXJ0IGV4dGVuZGVkIDAgMTAwIgorfQorCit0ZXN0X2NyZWF0ZV9zbWFsbCgpCit7CisJcGVkX3Rlc3QgImNyZWF0ZSBzbWFsbCBwYXJ0aXRpb24iXAorCQkibWtsYWJlbCBic2QgXAorCQkgbWtwYXJ0ZnMgcHJpbWFyeSBleHQyIDEgMiIKK30KKwordGVzdF9tb3ZlKCkKK3sKKwlwZWRfdGVzdCAibW92ZSBwYXJ0aXRpb24iXAorCQkibWtsYWJlbCBic2QgXAorCQkgbWtwYXJ0ZnMgcHJpbWFyeSBleHQyIDAgMTAwIFwKKwkJIG1rcGFydGZzIHByaW1hcnkgZXh0MiAxMDEgMjAwIFwKKwkJIG1vdmUgMSAyMDEgMzAxIgorfQorCittYWluKCkKK3sKKwlpZiAhIHRlc3RfbWtsYWJlbDsgdGhlbgorCQlleGl0IDEKKwlmaQorCisJdGVzdF9ta3BhcnQKKwl0ZXN0X21rcGFydGZzCisJdGVzdF9ybQorCXRlc3RfdG9vX21hbnlfcHJpbWFyeQorCXRlc3RfcHJpbWFyeV9vdmVybGFwCisJdGVzdF9ub25leGlzdGVudF9yZW1vdmUKKwl0ZXN0X2NyZWF0ZV9leHRlbmRlZAorCXRlc3RfY3JlYXRlX3NtYWxsCisJdGVzdF9tb3ZlCit9CisKK21haW4KKwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2RlYnVnL3Rlc3QvdGVzdF9kaXNrX2RvcyBiL3BhcnRlZC0xLjguNy9kZWJ1Zy90ZXN0L3Rlc3RfZGlza19kb3MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDhjNWQ3ZgotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9kZWJ1Zy90ZXN0L3Rlc3RfZGlza19kb3MKQEAgLTAsMCArMSwxNzMgQEAKKyMhIC9iaW4vYmFzaAorCit0ZXN0X21rbGFiZWwoKQoreworCXBlZF90ZXN0ICJta2xhYmVsIiAibWtsYWJlbCBtc2RvcyIKK30KKwordGVzdF9ta3BhcnQoKQoreworCXBlZF90ZXN0ICJta3BhcnQiICJta2xhYmVsIG1zZG9zIG1rcGFydCBwcmltYXJ5IGV4dDIgMTAgMjAiCit9CisKK3Rlc3RfY3JlYXRlX2V4dGVuZGVkX2F0X3N0YXJ0KCkKK3sKKwlwZWRfdGVzdCAiY3JlYXRpbmcgYW4gZXh0ZW5kZWQgcGFydGl0aW9uIGF0IHRoZSBzdGFydCBvZiB0aGUgZGlzayJcCisJCSJta2xhYmVsIG1zZG9zIFwKKwkJIG1rcGFydCBleHRlbmRlZCAwIDUwMCIKK30KKworCit0ZXN0X21rcGFydGZzKCkKK3sKKwlwZWRfdGVzdCAibWtwYXJ0ZnMiICJta2xhYmVsIG1zZG9zIG1rcGFydGZzIHByaW1hcnkgZXh0MiAxMCAyMCIKK30KKwordGVzdF9ybSgpCit7CisJcGVkX3Rlc3QgInJtIiAibWtsYWJlbCBtc2RvcyBta3BhcnQgcHJpbWFyeSBleHQyIDEwIDIwIHJtIDEiCit9CisKK3Rlc3RfdG9vX21hbnlfcHJpbWFyeSgpCit7CisJcGVkX3Rlc3RfZXhwZWN0X2ZhaWwgInRvbyBtYW55IHByaW1hcnkgcGFydGl0aW9ucyIgXAorCQkibWtsYWJlbCBtc2RvcyBcCisJCSBta3BhcnQgcHJpbWFyeSBleHQyIDEwIDIwIFwKKwkJIG1rcGFydCBwcmltYXJ5IGV4dDIgMjAgMzAgXAorCQkgbWtwYXJ0IHByaW1hcnkgZXh0MiAzMCA0MCBcCisJCSBta3BhcnQgcHJpbWFyeSBleHQyIDQwIDUwIFwKKwkJIG1rcGFydCBwcmltYXJ5IGV4dDIgNTAgNjAiCit9CisKK3Rlc3RfbG9naWNhbF93aXRob3V0X2V4dGVuZGVkKCkKK3sKKwlwZWRfdGVzdF9leHBlY3RfZmFpbCAibG9naWNhbCBwYXJ0aXRpb25zIHdpdGhvdXQgZXh0ZW5kZWQgcGFydGl0aW9uIlwKKwkJIm1rbGFiZWwgbXNkb3MgXAorCQkgbWtwYXJ0IGxvZ2ljYWwgZXh0MiAxMCAyMCIKK30KKworIyBQYXJ0ZWQncyBjb25zdHJhaW50IHNvbHZlciAiY29ycmVjdHMiIHRoaXMuICBIbW1tLi4uIGlzIHRoaXMgd2lzZT8KK3Rlc3RfbG9naWNhbF9vdXRzaWRlX2V4dGVuZGVkKCkKK3sKKwlwZWRfdGVzdCAiY29ycmVjdGlvbiBvZiBsb2dpY2FsIHBhcnRpdGlvbnMgb3V0c2lkZSBleHRlbmRlZCBwYXJ0aXRpb24iXAorCQkibWtsYWJlbCBtc2RvcyBcCisJCSBta3BhcnQgZXh0ZW5kZWQgNTAgMTAwXAorCQkgbWtwYXJ0IGxvZ2ljYWwgZXh0MiA5MCAxNTAiCit9CisKK3Rlc3Rfc2hyaW5rX2V4dGVuZGVkX3Rvb19mYXIoKQoreworCXBlZF90ZXN0ICJjb3JyZWN0aW9uIG9mIGV4Y2Vzc2l2ZSBleHRlbmRlZCBwYXJ0aXRpb24gc2hyaW5rIlwKKwkJIm1rbGFiZWwgbXNkb3MgXAorCQkgbWtwYXJ0IGV4dGVuZGVkIDUwIDE1MFwKKwkJIG1rcGFydCBsb2dpY2FsIGV4dDIgOTAgMTEwXAorCQkgcmVzaXplIDEgNTAgMTAwIgorfQorCit0ZXN0X3Nocmlua19leHRlbmRlZCgpCit7CisJcGVkX3Rlc3QgImV4dGVuZGVkIHBhcnRpdGlvbiBzaHJpbmsiXAorCQkibWtsYWJlbCBtc2RvcyBcCisJCSBta3BhcnQgZXh0ZW5kZWQgNTAgMTUwXAorCQkgbWtwYXJ0IGxvZ2ljYWwgZXh0MiA5MCAxMTBcCisJCSByZXNpemUgMSA4MCAxMTAiCit9CisKK3Rlc3RfbWFueV9sb2dpY2FsKCkKK3sKKwlwZWRfdGVzdCAibWFueSBsb2dpY2FsIHBhcnRpdGlvbnMiXAorCQkibWtsYWJlbCBtc2RvcyBcCisJCSBta3BhcnQgZXh0ZW5kZWQgMTAwIDEwMDAgXAorCQkgbWtwYXJ0IGxvZ2ljYWwgZXh0MiAxMDAgMjAwIFwKKwkJIG1rcGFydCBsb2dpY2FsIGV4dDIgMjAwIDMwMCBcCisJCSBta3BhcnQgbG9naWNhbCBleHQyIDMwMCA0MDAgXAorCQkgbWtwYXJ0IGxvZ2ljYWwgZXh0MiA0MDAgNTAwIFwKKwkJIG1rcGFydCBsb2dpY2FsIGV4dDIgNTAwIDYwMCBcCisJCSBta3BhcnQgbG9naWNhbCBleHQyIDYwMCA3MDAgXAorCQkgbWtwYXJ0IGxvZ2ljYWwgZXh0MiA3MDAgODAwIgorfQorCit0ZXN0X3ByaW1hcnlfb3ZlcmxhcCgpCit7CisJcGVkX3Rlc3QgImNvcnJlY3Rpb24gb2YgcHJpbWFyeSBwYXJ0aXRpb24gb3ZlcmxhcHBpbmciXAorCQkibWtsYWJlbCBtc2RvcyBcCisJCSBta3BhcnQgcHJpbWFyeSBleHQyIDAgMTAwXAorCQkgbWtwYXJ0IHByaW1hcnkgZXh0MiA1MCAxNTAiCit9CisKK3Rlc3RfZXh0ZW5kZWRfcHJpbWFyeV9vdmVybGFwKCkKK3sKKwlwZWRfdGVzdCAiY29ycmVjdGlvbiBvZiBwcmltYXJ5IHdpdGggZXh0ZW5kZWQgcGFydGl0aW9uIG92ZXJsYXBwaW5nIlwKKwkJIm1rbGFiZWwgbXNkb3MgXAorCQkgbWtwYXJ0IGV4dGVuZGVkIDEgMTAwXAorCQkgbWtwYXJ0IHByaW1hcnkgZXh0MiA1MCAxNTAiCit9CisKK3Rlc3Rfbm9uZXhpc3RlbnRfcmVtb3ZlKCkKK3sKKwlwZWRfdGVzdF9leHBlY3RfZmFpbCAicmVtb3ZhbCBvZiBub24tZXhpc3RlbnQgcGFydGl0aW9uIlwKKwkJIm1rbGFiZWwgbXNkb3MgXAorCQkgcm0gMSIKK30KKwordGVzdF9jcmVhdGVfc21hbGwoKQoreworCXBlZF90ZXN0ICJjcmVhdGUgc21hbGwgcGFydGl0aW9uIlwKKwkJIm1rbGFiZWwgbXNkb3MgXAorCQkgbWtwYXJ0ZnMgcHJpbWFyeSBleHQyIDEgMiIKK30KKwordGVzdF9tb3ZlX3ByaW1hcnkoKQoreworCXBlZF90ZXN0ICJtb3ZlIHByaW1hcnkgcGFydGl0aW9uIlwKKwkJIm1rbGFiZWwgbXNkb3MgXAorCQkgbWtwYXJ0ZnMgcHJpbWFyeSBmYXQxNiAwIDEwMCBcCisJCSBta3BhcnRmcyBwcmltYXJ5IGZhdDE2IDEwMCAyMDAgXAorCQkgbW92ZSAxIDIwMCAzMDAiCit9CisKK3Rlc3RfbW92ZV9sb2dpY2FsKCkKK3sKKwlwZWRfdGVzdCAibW92ZSBsb2dpY2FsIHBhcnRpdGlvbiJcCisJCSJta2xhYmVsIG1zZG9zIFwKKwkJIG1rcGFydCBleHRlbmRlZCAwIDUwMAorCQkgbWtwYXJ0ZnMgbG9naWNhbCBmYXQxNiAwIDEwMCBcCisJCSBta3BhcnRmcyBsb2dpY2FsIGZhdDE2IDEwMCAyMDAgXAorCQkgbW92ZSA1IDIwMCAzMDAiCit9CisKK3Rlc3RfY3JlYXRlX2VuZCgpCit7CisgICAgICAgcGVkX3Rlc3QgImNyZWF0ZSBwYXJ0aXRpb24gYXQgZW5kLW9mLWRpc2siXAorCSAgICAgICAibWtsYWJlbCBtc2RvcyBcCisJCW1rcGFydGZzIHByaW1hcnkgZXh0MiBcCisJCSRbVEVTVF9EUklWRV9TSVpFIC0gMTBdICRbVEVTVF9EUklWRV9TSVpFXSIKK30KKworbWFpbigpCit7CisJaWYgISB0ZXN0X21rbGFiZWw7IHRoZW4KKwkJZXhpdCAxCisJZmkKKworCXRlc3RfbWtwYXJ0CisJdGVzdF9jcmVhdGVfZXh0ZW5kZWRfYXRfc3RhcnQKKwl0ZXN0X21rcGFydGZzCisJdGVzdF9ybQorCXRlc3RfdG9vX21hbnlfcHJpbWFyeQorCXRlc3RfbG9naWNhbF93aXRob3V0X2V4dGVuZGVkCisJdGVzdF9sb2dpY2FsX291dHNpZGVfZXh0ZW5kZWQKKwl0ZXN0X3Nocmlua19leHRlbmRlZF90b29fZmFyCisJdGVzdF9zaHJpbmtfZXh0ZW5kZWQKKwl0ZXN0X21hbnlfbG9naWNhbAorCXRlc3RfcHJpbWFyeV9vdmVybGFwCisJdGVzdF9leHRlbmRlZF9wcmltYXJ5X292ZXJsYXAKKwl0ZXN0X25vbmV4aXN0ZW50X3JlbW92ZQorCXRlc3RfY3JlYXRlX3NtYWxsCisJdGVzdF9tb3ZlX3ByaW1hcnkKKwl0ZXN0X21vdmVfbG9naWNhbAorCXRlc3RfY3JlYXRlX2VuZAorfQorCittYWluCisKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9kZWJ1Zy90ZXN0L3Rlc3RfZGlza19kdmggYi9wYXJ0ZWQtMS44LjcvZGVidWcvdGVzdC90ZXN0X2Rpc2tfZHZoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI5Y2FmMWYKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvZGVidWcvdGVzdC90ZXN0X2Rpc2tfZHZoCkBAIC0wLDAgKzEsOTQgQEAKKyMhIC9iaW4vYmFzaAorCit0ZXN0X21rbGFiZWwoKQoreworCXBlZF90ZXN0ICJta2xhYmVsIiAibWtsYWJlbCBtaXBzIgorfQorCit0ZXN0X21rcGFydCgpCit7CisJcGVkX3Rlc3QgIm1rcGFydCIgIm1rbGFiZWwgbWlwcyBta3BhcnQgcHJpbWFyeSBleHQyIDExIDIwIgorfQorCit0ZXN0X21rcGFydGZzKCkKK3sKKwlwZWRfdGVzdCAibWtwYXJ0ZnMiICJta2xhYmVsIG1pcHMgbWtwYXJ0ZnMgcHJpbWFyeSBleHQyIDExIDIwIgorfQorCit0ZXN0X3JtKCkKK3sKKwlwZWRfdGVzdCAicm0iICJta2xhYmVsIG1pcHMgbWtwYXJ0IHByaW1hcnkgZXh0MiAxMCAyMCBybSAyIgorfQorCit0ZXN0X3Rvb19tYW55X3ByaW1hcnkoKQoreworCXBlZF90ZXN0X2V4cGVjdF9mYWlsICJ0b28gbWFueSBwcmltYXJ5IHBhcnRpdGlvbnMiIFwKKwkJIm1rbGFiZWwgbWlwcyBcCisJCSBta3BhcnQgcHJpbWFyeSBleHQyIDEwIDIwIFwKKwkJIG1rcGFydCBwcmltYXJ5IGV4dDIgMjAgMzAgXAorCQkgbWtwYXJ0IHByaW1hcnkgZXh0MiAzMCA0MCBcCisJCSBta3BhcnQgcHJpbWFyeSBleHQyIDQwIDUwIFwKKwkJIG1rcGFydCBwcmltYXJ5IGV4dDIgNTAgNjAgXAorCQkgbWtwYXJ0IHByaW1hcnkgZXh0MiA2MCA3MCBcCisJCSBta3BhcnQgcHJpbWFyeSBleHQyIDcwIDgwIFwKKwkJIG1rcGFydCBwcmltYXJ5IGV4dDIgODAgOTAgXAorCQkgbWtwYXJ0IHByaW1hcnkgZXh0MiA5MCAxMDAgXAorCQkgbWtwYXJ0IHByaW1hcnkgZXh0MiAxMDAgMTEwIFwKKwkJIG1rcGFydCBwcmltYXJ5IGV4dDIgMTEwIDEyMCBcCisJCSBta3BhcnQgcHJpbWFyeSBleHQyIDEyMCAxMzAgXAorCQkgbWtwYXJ0IHByaW1hcnkgZXh0MiAxMzAgMTQwIFwKKwkJIG1rcGFydCBwcmltYXJ5IGV4dDIgMTQwIDE1MCBcCisJCSBta3BhcnQgcHJpbWFyeSBleHQyIDE1MCAxNjAgXAorCQkgbWtwYXJ0IHByaW1hcnkgZXh0MiAxNjAgMTcwIFwKKwkJIG1rcGFydCBwcmltYXJ5IGV4dDIgMTcwIDE4MCIKK30KKwordGVzdF9wcmltYXJ5X292ZXJsYXAoKQoreworCXBlZF90ZXN0ICJjb3JyZWN0aW9uIG9mIHByaW1hcnkgcGFydGl0aW9uIG92ZXJsYXBwaW5nIlwKKwkJIm1rbGFiZWwgbWlwcyBcCisJCSBta3BhcnQgcHJpbWFyeSBleHQyIDEgMTAwXAorCQkgbWtwYXJ0IHByaW1hcnkgZXh0MiA1MCAxNTAiCit9CisKK3Rlc3Rfbm9uZXhpc3RlbnRfcmVtb3ZlKCkKK3sKKwlwZWRfdGVzdF9leHBlY3RfZmFpbCAicmVtb3ZhbCBvZiBub24tZXhpc3RlbnQgcGFydGl0aW9uIlwKKwkJIm1rbGFiZWwgbWlwcyBcCisJCSBybSAyIgorfQorCit0ZXN0X2NyZWF0ZV9zbWFsbCgpCit7CisJcGVkX3Rlc3QgImNyZWF0ZSBzbWFsbCBwYXJ0aXRpb24iXAorCQkibWtsYWJlbCBtaXBzIFwKKwkJIG1rcGFydGZzIHByaW1hcnkgZXh0MiAxIDIiCit9CisKK3Rlc3RfbW92ZSgpCit7CisJcGVkX3Rlc3QgIm1vdmUgcGFydGl0aW9uIlwKKwkJIm1rbGFiZWwgbWlwcyBcCisJCSBta3BhcnRmcyBwcmltYXJ5IGV4dDIgMSAxMDAgXAorCQkgbWtwYXJ0ZnMgcHJpbWFyeSBleHQyIDEwMSAyMDAgXAorCQkgbW92ZSAyIDIwMSAzMDEiCit9CisKK21haW4oKQoreworCWlmICEgdGVzdF9ta2xhYmVsOyB0aGVuCisJCWV4aXQgMQorCWZpCisKKwl0ZXN0X21rcGFydAorCXRlc3RfbWtwYXJ0ZnMKKwl0ZXN0X3JtCisJdGVzdF90b29fbWFueV9wcmltYXJ5CisJdGVzdF9wcmltYXJ5X292ZXJsYXAKKwl0ZXN0X25vbmV4aXN0ZW50X3JlbW92ZQorCXRlc3RfY3JlYXRlX3NtYWxsCisJdGVzdF9tb3ZlCit9CisKK21haW4KKwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2RlYnVnL3Rlc3QvdGVzdF9kaXNrX2dwdCBiL3BhcnRlZC0xLjguNy9kZWJ1Zy90ZXN0L3Rlc3RfZGlza19ncHQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGU4NmY3OQotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9kZWJ1Zy90ZXN0L3Rlc3RfZGlza19ncHQKQEAgLTAsMCArMSw3OCBAQAorIyEgL2Jpbi9iYXNoCisKK3Rlc3RfbWtsYWJlbCgpCit7CisJcGVkX3Rlc3QgIm1rbGFiZWwiICJta2xhYmVsIGdwdCIKK30KKwordGVzdF9ta3BhcnQoKQoreworCXBlZF90ZXN0ICJta3BhcnQiICJta2xhYmVsIGdwdCBta3BhcnQgcHJpbWFyeSBleHQyIDEwIDIwIgorfQorCit0ZXN0X21rcGFydGZzKCkKK3sKKwlwZWRfdGVzdCAibWtwYXJ0ZnMiICJta2xhYmVsIGdwdCBta3BhcnRmcyBwcmltYXJ5IGV4dDIgMTAgMjAiCit9CisKK3Rlc3Rfcm0oKQoreworCXBlZF90ZXN0ICJybSIgIm1rbGFiZWwgZ3B0IG1rcGFydCBwcmltYXJ5IGV4dDIgMTAgMjAgcm0gMSIKK30KKwordGVzdF9wcmltYXJ5X292ZXJsYXAoKQoreworCXBlZF90ZXN0ICJjb3JyZWN0aW9uIG9mIHByaW1hcnkgcGFydGl0aW9uIG92ZXJsYXBwaW5nIlwKKwkJIm1rbGFiZWwgZ3B0IFwKKwkJIG1rcGFydCBwcmltYXJ5IGV4dDIgMCAxMDBcCisJCSBta3BhcnQgcHJpbWFyeSBleHQyIDUwIDE1MCIKK30KKwordGVzdF9ub25leGlzdGVudF9yZW1vdmUoKQoreworCXBlZF90ZXN0X2V4cGVjdF9mYWlsICJyZW1vdmFsIG9mIG5vbi1leGlzdGVudCBwYXJ0aXRpb24iXAorCQkibWtsYWJlbCBncHQgXAorCQkgcm0gMSIKK30KKwordGVzdF9jcmVhdGVfZXh0ZW5kZWQoKQoreworCXBlZF90ZXN0X2V4cGVjdF9mYWlsICJjcmVhdGlvbiBvZiBleHRlbmRlZCBwYXJ0aXRpb24iXAorCQkibWtsYWJlbCBncHQgXAorCQkgbWtwYXJ0IGV4dGVuZGVkIDAgMTAwIgorfQorCit0ZXN0X2NyZWF0ZV9zbWFsbCgpCit7CisJcGVkX3Rlc3QgImNyZWF0ZSBzbWFsbCBwYXJ0aXRpb24iXAorCQkibWtsYWJlbCBncHQgXAorCQkgbWtwYXJ0ZnMgcHJpbWFyeSBleHQyIDEgMiIKK30KKwordGVzdF9tb3ZlKCkKK3sKKwlwZWRfdGVzdCAibW92ZSBwYXJ0aXRpb24iXAorCQkibWtsYWJlbCBncHQgXAorCQkgbWtwYXJ0ZnMgcHJpbWFyeSBleHQyIDAgMTAwIFwKKwkJIG1rcGFydGZzIHByaW1hcnkgZXh0MiAxMDEgMjAwIFwKKwkJIG1vdmUgMSAyMDEgMzAxIgorfQorCittYWluKCkKK3sKKwlpZiAhIHRlc3RfbWtsYWJlbDsgdGhlbgorCQlleGl0IDEKKwlmaQorCisJdGVzdF9ta3BhcnQKKwl0ZXN0X21rcGFydGZzCisJdGVzdF9ybQorCXRlc3RfcHJpbWFyeV9vdmVybGFwCisJdGVzdF9ub25leGlzdGVudF9yZW1vdmUKKwl0ZXN0X2NyZWF0ZV9leHRlbmRlZAorCXRlc3RfY3JlYXRlX3NtYWxsCisJdGVzdF9tb3ZlCit9CisKK21haW4KKwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2RlYnVnL3Rlc3QvdGVzdF9kaXNrX21hYyBiL3BhcnRlZC0xLjguNy9kZWJ1Zy90ZXN0L3Rlc3RfZGlza19tYWMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWQwZTg5NAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9kZWJ1Zy90ZXN0L3Rlc3RfZGlza19tYWMKQEAgLTAsMCArMSw3OCBAQAorIyEgL2Jpbi9iYXNoCisKK3Rlc3RfbWtsYWJlbCgpCit7CisJcGVkX3Rlc3QgIm1rbGFiZWwiICJta2xhYmVsIG1hYyIKK30KKwordGVzdF9ta3BhcnQoKQoreworCXBlZF90ZXN0ICJta3BhcnQiICJta2xhYmVsIG1hYyBta3BhcnQgcHJpbWFyeSBleHQyIDEwIDIwIgorfQorCit0ZXN0X21rcGFydGZzKCkKK3sKKwlwZWRfdGVzdCAibWtwYXJ0ZnMiICJta2xhYmVsIG1hYyBta3BhcnRmcyBwcmltYXJ5IGV4dDIgMTAgMjAiCit9CisKK3Rlc3Rfcm0oKQoreworCXBlZF90ZXN0ICJybSIgIm1rbGFiZWwgbWFjIG1rcGFydCBwcmltYXJ5IGV4dDIgMTAgMjAgcm0gMiIKK30KKwordGVzdF9wcmltYXJ5X292ZXJsYXAoKQoreworCXBlZF90ZXN0ICJjb3JyZWN0aW9uIG9mIHByaW1hcnkgcGFydGl0aW9uIG92ZXJsYXBwaW5nIlwKKwkJIm1rbGFiZWwgbWFjIFwKKwkJIG1rcGFydCBwcmltYXJ5IGV4dDIgMC4wMSAxMDBcCisJCSBta3BhcnQgcHJpbWFyeSBleHQyIDUwIDE1MCIKK30KKwordGVzdF9ub25leGlzdGVudF9yZW1vdmUoKQoreworCXBlZF90ZXN0X2V4cGVjdF9mYWlsICJyZW1vdmFsIG9mIG5vbi1leGlzdGVudCBwYXJ0aXRpb24iXAorCQkibWtsYWJlbCBtYWMgXAorCQkgcm0gMiIKK30KKwordGVzdF9jcmVhdGVfZXh0ZW5kZWQoKQoreworCXBlZF90ZXN0X2V4cGVjdF9mYWlsICJjcmVhdGlvbiBvZiBleHRlbmRlZCBwYXJ0aXRpb24iXAorCQkibWtsYWJlbCBtYWMgXAorCQkgbWtwYXJ0IGV4dGVuZGVkIDAuMDEgMTAwIgorfQorCit0ZXN0X2NyZWF0ZV9zbWFsbCgpCit7CisJcGVkX3Rlc3QgImNyZWF0ZSBzbWFsbCBwYXJ0aXRpb24iXAorCQkibWtsYWJlbCBtYWMgXAorCQkgbWtwYXJ0ZnMgcHJpbWFyeSBleHQyIDEgMiIKK30KKwordGVzdF9tb3ZlKCkKK3sKKwlwZWRfdGVzdCAibW92ZSBwYXJ0aXRpb24iXAorCQkibWtsYWJlbCBtYWMgXAorCQkgbWtwYXJ0ZnMgcHJpbWFyeSBleHQyIDEgMTAwIFwKKwkJIG1rcGFydGZzIHByaW1hcnkgZXh0MiAxMDEgMjAwIFwKKwkJIG1vdmUgMiAyMDEgMzAxIgorfQorCittYWluKCkKK3sKKwlpZiAhIHRlc3RfbWtsYWJlbDsgdGhlbgorCQlleGl0IDEKKwlmaQorCisJdGVzdF9ta3BhcnQKKwl0ZXN0X21rcGFydGZzCisJdGVzdF9ybQorCXRlc3RfcHJpbWFyeV9vdmVybGFwCisJdGVzdF9ub25leGlzdGVudF9yZW1vdmUKKwl0ZXN0X2NyZWF0ZV9leHRlbmRlZAorCXRlc3RfY3JlYXRlX3NtYWxsCisJdGVzdF9tb3ZlCit9CisKK21haW4KKwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2RlYnVnL3Rlc3QvdGVzdF9kaXNrX3BjOTggYi9wYXJ0ZWQtMS44LjcvZGVidWcvdGVzdC90ZXN0X2Rpc2tfcGM5OApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43NDg0MjRlCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2RlYnVnL3Rlc3QvdGVzdF9kaXNrX3BjOTgKQEAgLTAsMCArMSwxMDIgQEAKKyMhIC9iaW4vYmFzaAorCit0ZXN0X21rbGFiZWwoKQoreworCXBlZF90ZXN0ICJta2xhYmVsIiAibWtsYWJlbCBwYzk4IgorfQorCit0ZXN0X21rcGFydCgpCit7CisJcGVkX3Rlc3QgIm1rcGFydCIgIm1rbGFiZWwgcGM5OCBta3BhcnQgcHJpbWFyeSBleHQyIDEwIDIwIgorfQorCit0ZXN0X21rcGFydGZzKCkKK3sKKwlwZWRfdGVzdCAibWtwYXJ0ZnMiICJta2xhYmVsIHBjOTggbWtwYXJ0ZnMgcHJpbWFyeSBleHQyIDEwIDIwIgorfQorCit0ZXN0X3JtKCkKK3sKKwlwZWRfdGVzdCAicm0iICJta2xhYmVsIHBjOTggbWtwYXJ0IHByaW1hcnkgZXh0MiAxMCAyMCBybSAxIgorfQorCit0ZXN0X3Rvb19tYW55X3ByaW1hcnkoKQoreworCXBlZF90ZXN0X2V4cGVjdF9mYWlsICJ0b28gbWFueSBwcmltYXJ5IHBhcnRpdGlvbnMiIFwKKwkJIm1rbGFiZWwgcGM5OCBcCisJCSBta3BhcnQgcHJpbWFyeSBleHQyIDEwIDIwIFwKKwkJIG1rcGFydCBwcmltYXJ5IGV4dDIgMjAgMzAgXAorCQkgbWtwYXJ0IHByaW1hcnkgZXh0MiAzMCA0MCBcCisJCSBta3BhcnQgcHJpbWFyeSBleHQyIDQwIDUwIFwKKwkJIG1rcGFydCBwcmltYXJ5IGV4dDIgNTAgNjAgXAorCQkgbWtwYXJ0IHByaW1hcnkgZXh0MiA2MCA3MCBcCisJCSBta3BhcnQgcHJpbWFyeSBleHQyIDcwIDgwIFwKKwkJIG1rcGFydCBwcmltYXJ5IGV4dDIgODAgOTAgXAorCQkgbWtwYXJ0IHByaW1hcnkgZXh0MiA5MCAxMDAgXAorCQkgbWtwYXJ0IHByaW1hcnkgZXh0MiAxMDAgMTEwIFwKKwkJIG1rcGFydCBwcmltYXJ5IGV4dDIgMTEwIDEyMCBcCisJCSBta3BhcnQgcHJpbWFyeSBleHQyIDEyMCAxMzAgXAorCQkgbWtwYXJ0IHByaW1hcnkgZXh0MiAxMzAgMTQwIFwKKwkJIG1rcGFydCBwcmltYXJ5IGV4dDIgMTQwIDE1MCBcCisJCSBta3BhcnQgcHJpbWFyeSBleHQyIDE1MCAxNjAgXAorCQkgbWtwYXJ0IHByaW1hcnkgZXh0MiAxNjAgMTcwIFwKKwkJIG1rcGFydCBwcmltYXJ5IGV4dDIgMTcwIDE4MCAiCit9CisKK3Rlc3RfcHJpbWFyeV9vdmVybGFwKCkKK3sKKwlwZWRfdGVzdCAiY29ycmVjdGlvbiBvZiBwcmltYXJ5IHBhcnRpdGlvbiBvdmVybGFwcGluZyJcCisJCSJta2xhYmVsIHBjOTggXAorCQkgbWtwYXJ0IHByaW1hcnkgZXh0MiAwIDEwMFwKKwkJIG1rcGFydCBwcmltYXJ5IGV4dDIgNTAgMTUwIgorfQorCit0ZXN0X25vbmV4aXN0ZW50X3JlbW92ZSgpCit7CisJcGVkX3Rlc3RfZXhwZWN0X2ZhaWwgInJlbW92YWwgb2Ygbm9uLWV4aXN0ZW50IHBhcnRpdGlvbiJcCisJCSJta2xhYmVsIHBjOTggXAorCQkgcm0gMSIKK30KKwordGVzdF9jcmVhdGVfZXh0ZW5kZWQoKQoreworCXBlZF90ZXN0X2V4cGVjdF9mYWlsICJjcmVhdGlvbiBvZiBleHRlbmRlZCBwYXJ0aXRpb24iXAorCQkibWtsYWJlbCBwYzk4IFwKKwkJIG1rcGFydCBleHRlbmRlZCAwIDEwMCIKK30KKwordGVzdF9jcmVhdGVfc21hbGwoKQoreworCXBlZF90ZXN0ICJjcmVhdGUgc21hbGwgcGFydGl0aW9uIlwKKwkJIm1rbGFiZWwgcGM5OCBcCisJCSBta3BhcnRmcyBwcmltYXJ5IGV4dDIgMSAyIgorfQorCit0ZXN0X21vdmUoKQoreworCXBlZF90ZXN0ICJtb3ZlIHBhcnRpdGlvbiJcCisJCSJta2xhYmVsIHBjOTggXAorCQkgbWtwYXJ0ZnMgcHJpbWFyeSBmYXQxNiAwIDEwMCBcCisJCSBta3BhcnRmcyBwcmltYXJ5IGZhdDE2IDEwMCAyMDAgXAorCQkgbW92ZSAxIDIwMCAzMDAiCit9CisKK21haW4oKQoreworCWlmICEgdGVzdF9ta2xhYmVsOyB0aGVuCisJCWV4aXQgMQorCWZpCisKKwl0ZXN0X21rcGFydAorCXRlc3RfbWtwYXJ0ZnMKKwl0ZXN0X3JtCisJdGVzdF90b29fbWFueV9wcmltYXJ5CisJdGVzdF9wcmltYXJ5X292ZXJsYXAKKwl0ZXN0X25vbmV4aXN0ZW50X3JlbW92ZQorCXRlc3RfY3JlYXRlX2V4dGVuZGVkCisJdGVzdF9jcmVhdGVfc21hbGwKKwl0ZXN0X21vdmUKK30KKworbWFpbgorCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvZGVidWcvdGVzdC90ZXN0X2Rpc2tfc3VuIGIvcGFydGVkLTEuOC43L2RlYnVnL3Rlc3QvdGVzdF9kaXNrX3N1bgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iOWQ3ZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2RlYnVnL3Rlc3QvdGVzdF9kaXNrX3N1bgpAQCAtMCwwICsxLDk0IEBACisjISAvYmluL2Jhc2gKKwordGVzdF9ta2xhYmVsKCkKK3sKKwlwZWRfdGVzdCAibWtsYWJlbCIgIm1rbGFiZWwgc3VuIgorfQorCit0ZXN0X21rcGFydCgpCit7CisJcGVkX3Rlc3QgIm1rcGFydCIgIm1rbGFiZWwgc3VuIG1rcGFydCBwcmltYXJ5IGV4dDIgMTAgMjAiCit9CisKK3Rlc3RfbWtwYXJ0ZnMoKQoreworCXBlZF90ZXN0ICJta3BhcnRmcyIgIm1rbGFiZWwgc3VuIG1rcGFydGZzIHByaW1hcnkgZXh0MiAxMCAyMCIKK30KKwordGVzdF9ybSgpCit7CisJcGVkX3Rlc3QgInJtIiAibWtsYWJlbCBzdW4gbWtwYXJ0IHByaW1hcnkgZXh0MiAxMCAyMCBybSAxIgorfQorCit0ZXN0X3Rvb19tYW55X3ByaW1hcnkoKQoreworCXBlZF90ZXN0X2V4cGVjdF9mYWlsICJ0b28gbWFueSBwcmltYXJ5IHBhcnRpdGlvbnMiIFwKKwkJIm1rbGFiZWwgc3VuIFwKKwkJIG1rcGFydCBwcmltYXJ5IGV4dDIgMTAgMjAgXAorCQkgbWtwYXJ0IHByaW1hcnkgZXh0MiAyMCAzMCBcCisJCSBta3BhcnQgcHJpbWFyeSBleHQyIDMwIDQwIFwKKwkJIG1rcGFydCBwcmltYXJ5IGV4dDIgNDAgNTAgXAorCQkgbWtwYXJ0IHByaW1hcnkgZXh0MiA1MCA2MCBcCisJCSBta3BhcnQgcHJpbWFyeSBleHQyIDYwIDcwIFwKKwkJIG1rcGFydCBwcmltYXJ5IGV4dDIgNzAgODAgXAorCQkgbWtwYXJ0IHByaW1hcnkgZXh0MiA4MCA5MCBcCisJCSBta3BhcnQgcHJpbWFyeSBleHQyIDkwIDEwMCIKK30KKwordGVzdF9wcmltYXJ5X292ZXJsYXAoKQoreworCXBlZF90ZXN0ICJjb3JyZWN0aW9uIHByaW1hcnkgcGFydGl0aW9uIG92ZXJsYXBwaW5nIlwKKwkJIm1rbGFiZWwgc3VuIFwKKwkJIG1rcGFydCBwcmltYXJ5IGV4dDIgMCAxMDBcCisJCSBta3BhcnQgcHJpbWFyeSBleHQyIDUwIDE1MCIKK30KKwordGVzdF9ub25leGlzdGVudF9yZW1vdmUoKQoreworCXBlZF90ZXN0X2V4cGVjdF9mYWlsICJyZW1vdmFsIG9mIG5vbi1leGlzdGVudCBwYXJ0aXRpb24iXAorCQkibWtsYWJlbCBzdW4gXAorCQkgcm0gMSIKK30KKwordGVzdF9jcmVhdGVfZXh0ZW5kZWQoKQoreworCXBlZF90ZXN0X2V4cGVjdF9mYWlsICJjcmVhdGlvbiBvZiBleHRlbmRlZCBwYXJ0aXRpb24iXAorCQkibWtsYWJlbCBzdW4gXAorCQkgbWtwYXJ0IGV4dGVuZGVkIDAgMTAwIgorfQorCit0ZXN0X2NyZWF0ZV9zbWFsbCgpCit7CisJcGVkX3Rlc3QgImNyZWF0ZSBzbWFsbCBwYXJ0aXRpb24iXAorCQkibWtsYWJlbCBzdW4gXAorCQkgbWtwYXJ0ZnMgcHJpbWFyeSBleHQyIDEgMiIKK30KKwordGVzdF9tb3ZlKCkKK3sKKwlwZWRfdGVzdCAibW92ZSBwYXJ0aXRpb24iXAorCQkibWtsYWJlbCBzdW4gXAorCQkgbWtwYXJ0ZnMgcHJpbWFyeSBleHQyIDAgMTAwIFwKKwkJIG1rcGFydGZzIHByaW1hcnkgZXh0MiAxMDEgMjAwIFwKKwkJIG1vdmUgMSAyMDEgMzAxIgorfQorCittYWluKCkKK3sKKwlpZiAhIHRlc3RfbWtsYWJlbDsgdGhlbgorCQlleGl0IDEKKwlmaQorCisJdGVzdF9ta3BhcnQKKwl0ZXN0X21rcGFydGZzCisJdGVzdF9ybQorCXRlc3RfdG9vX21hbnlfcHJpbWFyeQorCXRlc3RfcHJpbWFyeV9vdmVybGFwCisJdGVzdF9ub25leGlzdGVudF9yZW1vdmUKKwl0ZXN0X2NyZWF0ZV9leHRlbmRlZAorCXRlc3RfY3JlYXRlX3NtYWxsCisJdGVzdF9tb3ZlCit9CisKK21haW4KKwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2RlYnVnL3Rlc3QvdGVzdF9mc19leHQyIGIvcGFydGVkLTEuOC43L2RlYnVnL3Rlc3QvdGVzdF9mc19leHQyCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjliYjkxNDEKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvZGVidWcvdGVzdC90ZXN0X2ZzX2V4dDIKQEAgLTAsMCArMSw5OCBAQAorIyEgL2Jpbi9iYXNoCisKK2RvX2RpZmYoKQoreworCW1vdW50ICIke1RFU1RfRFJJVkV9MSIgJFRFU1RfTU9VTlRfUE9JTlQgLXQgZXh0MiA+IC9kZXYvbnVsbAorCisJaWYgZGlmZiAtcnEgJDEgJDIgLS1leGNsdWRlIGxvc3QrZm91bmQgPj4gdGVzdF9sb2c7IHRoZW4KKwkJcGVkX3Rlc3Rfb2sKKwllbHNlCisJCXBlZF90ZXN0X2ZhaWxlZAorCWZpCisKKwl1bW91bnQgJFRFU1RfTU9VTlRfUE9JTlQgMj4mMSA+IC9kZXYvbnVsbAorfQorCitkb190ZXN0X2RpZmYoKQoreworCXBlZF90ZXN0aW5nICIkMSIKKwlpZiBwZWRfdGVzdF9nZXRfdmFsICIkNCIgIiQ1IiAiJDYiOyB0aGVuCisJCXBlZF90ZXN0X2ZhaWxlZAorCQlyZXR1cm4gMQorCWZpCisJZG9fZGlmZiAiJDIiICIkMyIKK30KKwordGVzdF9ta3BhcnRmcygpCit7CisJcGVkX3Rlc3QgIm1rcGFydGZzIDEgZXh0MiAxIDEiXAorCQkibWtsYWJlbCAkVEVTVF9GU19VU0VfRElTS19MQUJFTFwKKwkJIG1rcGFydGZzIDEgZXh0MiAxIDFcCisJCSBjaGVjayAxIlwKKwkJIi9zYmluL2UyZnNjayAtbiAtZiAke1RFU1RfRFJJVkV9MSIKKworCXBlZF90ZXN0ICJta3BhcnRmcyJcCisJCSJta2xhYmVsICRURVNUX0ZTX1VTRV9ESVNLX0xBQkVMXAorCQlta3BhcnRmcyBwcmltYXJ5IGV4dDIgMSAkREVGQVVMVF9FTkRcCisJCWNoZWNrIDEiXAorCQkiL3NiaW4vZTJmc2NrIC1uIC1mICR7VEVTVF9EUklWRX0xIgorCisJcGVkX3Rlc3QgIm1rZnMiXAorCQkibWtmcyAxIGV4dDJcCisJCSBjaGVjayAxIlwKKwkJIi9zYmluL2UyZnNjayAtbiAtZiAke1RFU1RfRFJJVkV9MSIKK30KKworcHJlcGFyZV9yZXNpemVfdGVzdHMoKQoreworCXBhcnRfbnVtPTEKKwlwYXJ0PSRURVNUX0RSSVZFJHBhcnRfbnVtCisKKwl1bW91bnQgJFRFU1RfTU9VTlRfUE9JTlQgMj4mMSA+IC9kZXYvbnVsbAorCisJbW91bnQgJHBhcnQgJFRFU1RfTU9VTlRfUE9JTlQgLXQgZXh0MiBcCisJJiYgY3AgJFRFU1RfREFUQS8qICRURVNUX01PVU5UX1BPSU5UIC1yCisJdW1vdW50ICRURVNUX01PVU5UX1BPSU5UIDI+JjEgPiAvZGV2L251bGwKK30KKwordGVzdF9yZXNpemVfbW92ZV9lbmRfZm9yd2FyZCgpCit7CisJZG9fdGVzdF9kaWZmICJyZXNpemU6IG1vdmUgZW5kIGZvcndhcmQiXAorCQkkVEVTVF9EQVRBICRURVNUX01PVU5UX1BPSU5UIFwKKwkJInJlc2l6ZSAxIDEgJFsgJERFRkFVTFRfRU5EICsgNSBdIGNoZWNrIDEiXAorCQkiL3NiaW4vZTJmc2NrIC1uIC1mICR7VEVTVF9EUklWRX0xIgorfQorCit0ZXN0X3Jlc2l6ZV9tb3ZlX2VuZF9mb3J3YXJkX2JpZygpCit7CisJZG9fdGVzdF9kaWZmICJyZXNpemU6IG1vdmUgZW5kIGZvcndhcmQgKGJpZykiXAorCQkkVEVTVF9EQVRBICRURVNUX01PVU5UX1BPSU5UIFwKKwkJInJlc2l6ZSAxIDEgJFsgJERFRkFVTFRfRU5EICsgMjAwIF0gY2hlY2sgMSJcCisJCSIvc2Jpbi9lMmZzY2sgLW4gLWYgJHtURVNUX0RSSVZFfTEiCit9CisKK3Rlc3RfcmVzaXplX21vdmVfZW5kX2JhY2t3YXJkKCkKK3sKKwlkb190ZXN0X2RpZmYgInJlc2l6ZTogbW92ZSBlbmQgYmFja3dhcmQiXAorCQkkVEVTVF9EQVRBICRURVNUX01PVU5UX1BPSU5UIFwKKwkJInJlc2l6ZSAxIDEgJERFRkFVTFRfRU5EIGNoZWNrIDEiXAorCQkiL3NiaW4vZTJmc2NrIC1uIC1mICR7VEVTVF9EUklWRX0xIgorfQorCittYWluKCkKK3sKKwlleHBvcnQgREVGQVVMVF9FTkQ9MjAwCisKKwlpZiAhIHRlc3RfbWtwYXJ0ZnM7IHRoZW4KKwkJcmV0dXJuIDEKKwlmaQorCisJcHJlcGFyZV9yZXNpemVfdGVzdHMKKwl0ZXN0X3Jlc2l6ZV9tb3ZlX2VuZF9mb3J3YXJkCisJdGVzdF9yZXNpemVfbW92ZV9lbmRfYmFja3dhcmQKKwl0ZXN0X3Jlc2l6ZV9tb3ZlX2VuZF9mb3J3YXJkX2JpZworCXRlc3RfcmVzaXplX21vdmVfZW5kX2JhY2t3YXJkCit9CisKK21haW4KKwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2RlYnVnL3Rlc3QvdGVzdF9mc19mYXQgYi9wYXJ0ZWQtMS44LjcvZGVidWcvdGVzdC90ZXN0X2ZzX2ZhdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43YTUxZTRlCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2RlYnVnL3Rlc3QvdGVzdF9mc19mYXQKQEAgLTAsMCArMSwxODEgQEAKKyMhIC9iaW4vYmFzaAorCitkb19kaWZmKCkKK3sKKwltb3VudCAtdCB2ZmF0ICR7VEVTVF9EUklWRX0xICRURVNUX01PVU5UX1BPSU5UID4gL2Rldi9udWxsCisKKwlpZiBkaWZmIC1ycSAkMSAkMiA+PiB0ZXN0X2xvZzsgdGhlbgorCQlwZWRfdGVzdF9vaworCWVsc2UKKwkJcGVkX3Rlc3RfZmFpbGVkCisJZmkKKworCXVtb3VudCAkVEVTVF9NT1VOVF9QT0lOVCAyPiYxID4gL2Rldi9udWxsCit9CisKK2RvX3Rlc3RfZGlmZigpCit7CisJcGVkX3Rlc3RpbmcgIiQxIgorCWlmIHBlZF90ZXN0X2dldF92YWwgIiQ0IiAiJDUiICIkNiIgIiQ3IjsgdGhlbgorCQlwZWRfdGVzdF9mYWlsZWQKKwkJcmV0dXJuIDEKKwlmaQorCWRvX2RpZmYgIiQyIiAiJDMiCit9CisKK3Rlc3RfbWtwYXJ0ZnMoKQoreworCXBlZF90ZXN0ICJta3BhcnRmcyBmYXQxNiBtaW5pbXVtIHNpemUiXAorCQkibWtsYWJlbCAkVEVTVF9GU19VU0VfRElTS19MQUJFTFwKKwkJbWtwYXJ0ZnMgcHJpbWFyeSBmYXQxNiAwIDFcCisJCWNoZWNrIDEiXAorCQkiL3NiaW4vZG9zZnNjayAke1RFU1RfRFJJVkV9MSIKKworCXBlZF90ZXN0ICJta3BhcnRmcyBmYXQzMiBtaW5pbXVtIHNpemUiXAorCQkibWtsYWJlbCAkVEVTVF9GU19VU0VfRElTS19MQUJFTFwKKwkJbWtwYXJ0ZnMgcHJpbWFyeSBmYXQzMiAwIDFcCisJCWNoZWNrIDEiXAorCQkiL3NiaW4vZG9zZnNjayAke1RFU1RfRFJJVkV9MSIKKworCXBlZF90ZXN0ICJta3BhcnRmcyJcCisJCSJta2xhYmVsICRURVNUX0ZTX1VTRV9ESVNLX0xBQkVMXAorCQlta3BhcnRmcyBwcmltYXJ5IGZhdDMyIDEgJERFRkFVTFRfRU5EXAorCQljaGVjayAxIlwKKwkJIi9zYmluL2Rvc2ZzY2sgJHtURVNUX0RSSVZFfTEiCisKKwlwZWRfdGVzdCAibWtmcyJcCisJCSJta2ZzIDEgZmF0MzJcCisJCSBjaGVjayAxIlwKKwkJIi9zYmluL2Rvc2ZzY2sgJHtURVNUX0RSSVZFfTEiCit9CisKK3ByZXBhcmVfcmVzaXplX3Rlc3RzKCkKK3sKKwlwYXJ0X251bT0xCisJcGFydD0kVEVTVF9EUklWRSRwYXJ0X251bQorCWhvbGVfcGFyZW50PWBlY2hvICRURVNUX0RBVEFfSE9MRSB8IHNlZCAtZSAicy9bLV8uYS16QS1aMC05XStcLy8vZyJgCisKKwl1bW91bnQgJFRFU1RfTU9VTlRfUE9JTlQgMj4mMSA+IC9kZXYvbnVsbAorCisJbW91bnQgJHBhcnQgJFRFU1RfTU9VTlRfUE9JTlQgLXQgdmZhdCBcCisJJiYgY3AgLXIgJFRFU1RfREFUQS8qICRURVNUX01PVU5UX1BPSU5UIFwKKwkmJiBjcCAtciAkVEVTVF9EQVRBICRURVNUX01PVU5UX1BPSU5UL3RtcF9jb3B5IFwKKwkmJiBybSAtcmYgJFRFU1RfTU9VTlRfUE9JTlQvJFRFU1RfREFUQV9IT0xFIFwKKwkmJiBtdiAkVEVTVF9NT1VOVF9QT0lOVC90bXBfY29weS8kVEVTVF9EQVRBX0hPTEUgXAorCSAgICAgICRURVNUX01PVU5UX1BPSU5ULyRob2xlX3BhcmVudCBcCisJJiYgcm0gLXJmICRURVNUX01PVU5UX1BPSU5UL3RtcF9jb3B5CisJdW1vdW50ICRURVNUX01PVU5UX1BPSU5UCit9CisKK2NsZWFyZmF0KCkKK3sKKwkkVEVTVF9QQVJURURfQ0xFQVJGQVQgJFRFU1RfRFJJVkUgJDEKK30KKwordGVzdF9yZXNpemVfbW92ZV9zdGFydF9mb3J3YXJkKCkKK3sKKyMgZ2VvbWV0cnkgYmVmb3JlaGFuZDogIDEgdG8gJERFRkFVTFRfRU5ECisJZG9fdGVzdF9kaWZmICJyZXNpemU6IG1vdmUgc3RhcnQgZm9yd2FyZCJcCisJCSRURVNUX0RBVEEgJFRFU1RfTU9VTlRfUE9JTlQgXAorCQkicmVzaXplIDEgNSAkREVGQVVMVF9FTkQgY2hlY2sgMSJcCisJCSIvc2Jpbi9kb3Nmc2NrICR7VEVTVF9EUklWRX0xIgorCWNsZWFyZmF0IDEKK30KKwordGVzdF9yZXNpemVfbW92ZV9zdGFydF9iYWNrd2FyZCgpCit7CisjIGdlb21ldHJ5IGJlZm9yZWhhbmQ6IDUgdG8gJERFRkFVTFRfRU5ECisJZG9fdGVzdF9kaWZmICJyZXNpemU6IG1vdmUgc3RhcnQgYmFja3dhcmQiXAorCQkkVEVTVF9EQVRBICRURVNUX01PVU5UX1BPSU5UIFwKKwkJInJlc2l6ZSAxIDEgJERFRkFVTFRfRU5EIGNoZWNrIDEiXAorCQkiL3NiaW4vZG9zZnNjayAke1RFU1RfRFJJVkV9MSIKKwljbGVhcmZhdCAxCit9CisKK3Rlc3RfcmVzaXplX21vdmVfZW5kX2ZvcndhcmQoKQoreworIyBnZW9tZXRyeSBiZWZvcmVoYW5kOiAxIHRvICRERUZBVUxUX0VORAorCWRvX3Rlc3RfZGlmZiAicmVzaXplOiBtb3ZlIGVuZCBmb3J3YXJkIlwKKwkJJFRFU1RfREFUQSAkVEVTVF9NT1VOVF9QT0lOVCBcCisJCSJyZXNpemUgMSAxICRbICRERUZBVUxUX0VORCArIDUgXSBjaGVjayAxIlwKKwkJIi9zYmluL2Rvc2ZzY2sgJHtURVNUX0RSSVZFfTEiCisJY2xlYXJmYXQgMQorfQorCit0ZXN0X3Jlc2l6ZV9tb3ZlX2VuZF9iYWNrd2FyZCgpCit7CisjIGdlb21ldHJ5IGJlZm9yZWhhbmQ6ICAxIHRvICRbJERFRkFVTFRfRU5EICsgNV0KKwlkb190ZXN0X2RpZmYgInJlc2l6ZTogbW92ZSBlbmQgYmFja3dhcmQiXAorCQkkVEVTVF9EQVRBICRURVNUX01PVU5UX1BPSU5UIFwKKwkJInJlc2l6ZSAxIDEgJERFRkFVTFRfRU5EIGNoZWNrIDEiXAorCQkiL3NiaW4vZG9zZnNjayAke1RFU1RfRFJJVkV9MSIKKwljbGVhcmZhdCAxCit9CisKK3Rlc3RfY29udmVydF9mYXQxNl9mYXQzMl9zaHJpbmtfY2x1c3RlcigpCit7CisjIGdlb21ldHJ5IGJlZm9yZWhhbmQ6ICAxIHRvICRERUZBVUxUX0VORAorCWRvX3Rlc3RfZGlmZiBcCisJInJlc2l6ZTogY29udmVydCBmcm9tIEZBVDE2IHRvIEZBVDMyLCBzaHJpbmtpbmcgdGhlIGNsdXN0ZXIgc2l6ZSJcCisJCSRURVNUX0RBVEEgJFRFU1RfTU9VTlRfUE9JTlQgXAorCQkicmVzaXplIDEgMSAkRkFUMzJfRU5EIGNoZWNrIDEiXAorCQkiL3NiaW4vZG9zZnNjayAke1RFU1RfRFJJVkV9MSIKKwljbGVhcmZhdCAxCit9CisKK3Rlc3RfY29udmVydF9mYXQzMl9mYXQxNigpCit7CisjIGdlb21ldHJ5IGJlZm9yZWhhbmQ6ICAxIHRvICRGQVQxNl9TTUFMTF9FTkQKKwlkb190ZXN0X2RpZmYgInJlc2l6ZTogY29udmVydCBmcm9tIEZBVDMyIHRvIEZBVDE2IlwKKwkJJFRFU1RfREFUQSAkVEVTVF9NT1VOVF9QT0lOVCBcCisJCSJyZXNpemUgMSAxICRGQVQzMl9FTkQgY2hlY2sgMSJcCisJCSIvc2Jpbi9kb3Nmc2NrICR7VEVTVF9EUklWRX0xIgorCWNsZWFyZmF0IDEKK30KKwordGVzdF9jb252ZXJ0X2ZhdDE2X2ZhdDMyKCkKK3sKKyMgZ2VvbWV0cnkgYmVmb3JlaGFuZDogIDEgdG8gJEZBVDMyX0VORAorCWRvX3Rlc3RfZGlmZiAicmVzaXplOiBjb252ZXJ0IGZyb20gRkFUMTYgdG8gRkFUMzIiXAorCQkkVEVTVF9EQVRBICRURVNUX01PVU5UX1BPSU5UIFwKKwkJInJlc2l6ZSAxIDEgJEZBVDE2X1NNQUxMX0VORCBjaGVjayAxIlwKKwkJIi9zYmluL2Rvc2ZzY2sgJHtURVNUX0RSSVZFfTEiCisJY2xlYXJmYXQgMQorfQorCisjdGVzdF9jb252ZXJ0X2ZhdDMyX2ZhdDE2X3Nocmlua19jbHVzdGVyKCkKKyN7CisjfQorCisjdGVzdF9mYXQxNl9zaHJpbmtfY2x1c3RlcigpCisjeworI30KKworI3Rlc3RfZmF0MzJfc2hyaW5rX2NsdXN0ZXIoKQorI3sKKyN9CisKK21haW4oKQoreworCWV4cG9ydCBERUZBVUxUX0VORD0zMDAKKwlleHBvcnQgRkFUMzJfRU5EPTYwMAorCWV4cG9ydCBGQVQxNl9TTUFMTF9FTkQ9MjAwCisKKwlpZiAhIHRlc3RfbWtwYXJ0ZnM7IHRoZW4KKwkJcmV0dXJuIDEKKwlmaQorCisJcHJlcGFyZV9yZXNpemVfdGVzdHMKKwl0ZXN0X3Jlc2l6ZV9tb3ZlX3N0YXJ0X2ZvcndhcmQKKwl0ZXN0X3Jlc2l6ZV9tb3ZlX3N0YXJ0X2JhY2t3YXJkCisJdGVzdF9yZXNpemVfbW92ZV9lbmRfZm9yd2FyZAorCXRlc3RfcmVzaXplX21vdmVfZW5kX2JhY2t3YXJkCisKKyMJcHJlcGFyZV9yZXNpemVfdGVzdHMKKwl0ZXN0X2NvbnZlcnRfZmF0MTZfZmF0MzJfc2hyaW5rX2NsdXN0ZXIKKwl0ZXN0X2NvbnZlcnRfZmF0MzJfZmF0MTYKKwl0ZXN0X2NvbnZlcnRfZmF0MTZfZmF0MzIKK30KKworbWFpbgorCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvZGVidWcvdGVzdC90ZXN0X2ZzX2xpbnV4X3N3YXAgYi9wYXJ0ZWQtMS44LjcvZGVidWcvdGVzdC90ZXN0X2ZzX2xpbnV4X3N3YXAKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmZiMzAyOAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9kZWJ1Zy90ZXN0L3Rlc3RfZnNfbGludXhfc3dhcApAQCAtMCwwICsxLDY5IEBACisjISAvYmluL2Jhc2gKKwordGVzdF9ta3BhcnRmcygpCit7CisJcGVkX3Rlc3QgIm1rcGFydGZzIlwKKwkJIm1rbGFiZWwgJFRFU1RfRlNfVVNFX0RJU0tfTEFCRUxcCisJCW1rcGFydGZzIHByaW1hcnkgbGludXgtc3dhcCAxICRERUZBVUxUX0VORFwKKwkJY2hlY2sgMSIKKworCXBlZF90ZXN0ICJta2ZzIlwKKwkJIm1rZnMgMSBsaW51eC1zd2FwXAorCQkgY2hlY2sgMSIKK30KKworZG9fdGVzdF9zd2FwKCkKK3sKKwlwZWRfdGVzdGluZyAiJDEiCisJaWYgcGVkX3Rlc3RfZ2V0X3ZhbCAiJDIiICIkMyI7IHRoZW4KKwkJcGVkX3Rlc3RfZmFpbGVkCisJCXJldHVybiAxCisJZmkKKwlpZiAvc2Jpbi9zd2Fwb24gIiR7VEVTVF9EUklWRX0xIjsgdGhlbgorCQkvc2Jpbi9zd2Fwb2ZmICIke1RFU1RfRFJJVkV9MSIKKwkJcGVkX3Rlc3Rfb2sKKwllbHNlCisJCXBlZF90ZXN0X2ZhaWxlZAorCWZpCit9CisKK3Rlc3RfcmVzaXplX21vdmVfc3RhcnRfZm9yd2FyZCgpCit7CisJZG9fdGVzdF9zd2FwICJyZXNpemU6IG1vdmUgc3RhcnQgZm9yd2FyZCJcCisJCSJyZXNpemUgMSA1ICRERUZBVUxUX0VORCBjaGVjayAxIgorfQorCit0ZXN0X3Jlc2l6ZV9tb3ZlX3N0YXJ0X2JhY2t3YXJkKCkKK3sKKwlkb190ZXN0X3N3YXAgInJlc2l6ZTogbW92ZSBzdGFydCBiYWNrd2FyZCJcCisJCSJyZXNpemUgMSAxICRERUZBVUxUX0VORCBjaGVjayAxIgorfQorCit0ZXN0X3Jlc2l6ZV9tb3ZlX2VuZF9mb3J3YXJkKCkKK3sKKwlkb190ZXN0X3N3YXAgInJlc2l6ZTogbW92ZSBlbmQgZm9yd2FyZCJcCisJCSJyZXNpemUgMSAxICRbICRERUZBVUxUX0VORCArIDUgXSBjaGVjayAxIgorfQorCit0ZXN0X3Jlc2l6ZV9tb3ZlX2VuZF9iYWNrd2FyZCgpCit7CisJZG9fdGVzdF9zd2FwICJyZXNpemU6IG1vdmUgZW5kIGJhY2t3YXJkIlwKKwkJInJlc2l6ZSAxIDEgJERFRkFVTFRfRU5EIGNoZWNrIDEiCit9CisKK21haW4oKQoreworCWV4cG9ydCBERUZBVUxUX0VORD0yMDAKKworCWlmICEgdGVzdF9ta3BhcnRmczsgdGhlbgorCQlyZXR1cm4gMQorCWZpCisKKwl0ZXN0X3Jlc2l6ZV9tb3ZlX3N0YXJ0X2ZvcndhcmQKKwl0ZXN0X3Jlc2l6ZV9tb3ZlX3N0YXJ0X2JhY2t3YXJkCisJdGVzdF9yZXNpemVfbW92ZV9lbmRfZm9yd2FyZAorCXRlc3RfcmVzaXplX21vdmVfZW5kX2JhY2t3YXJkCit9CisKK21haW4KKwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2RlYnVnL3Rlc3QvdGVzdF9mc19yZWlzZXJmcyBiL3BhcnRlZC0xLjguNy9kZWJ1Zy90ZXN0L3Rlc3RfZnNfcmVpc2VyZnMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjlhMWU2MAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9kZWJ1Zy90ZXN0L3Rlc3RfZnNfcmVpc2VyZnMKQEAgLTAsMCArMSw5OCBAQAorIyEgL2Jpbi9iYXNoCisKK2RvX2RpZmYoKQoreworCW1vdW50ICIke1RFU1RfRFJJVkV9MSIgJFRFU1RfTU9VTlRfUE9JTlQgLXQgcmVpc2VyZnMgPiAvZGV2L251bGwKKworCWlmIGRpZmYgLXJxICQxICQyIC0tZXhjbHVkZSBsb3N0K2ZvdW5kID4+IHRlc3RfbG9nOyB0aGVuCisJCXBlZF90ZXN0X29rCisJZWxzZQorCQlwZWRfdGVzdF9mYWlsZWQKKwlmaQorCisJdW1vdW50ICRURVNUX01PVU5UX1BPSU5UIDI+JjEgPiAvZGV2L251bGwKK30KKworZG9fdGVzdF9kaWZmKCkKK3sKKwlwZWRfdGVzdGluZyAiJDEiCisJaWYgcGVkX3Rlc3RfZ2V0X3ZhbCAiJDQiICIkNSIgIiQ2IjsgdGhlbgorCQlwZWRfdGVzdF9mYWlsZWQKKwkJcmV0dXJuIDEKKwlmaQorCWRvX2RpZmYgIiQyIiAiJDMiCit9CisKK3Rlc3RfbWtwYXJ0ZnMoKQoreworCXBlZF90ZXN0ICJta3BhcnRmcyBwcmltYXJ5IHJlaXNlcmZzIDEgMSJcCisJCSJta2xhYmVsICRURVNUX0ZTX1VTRV9ESVNLX0xBQkVMXAorCQkgbWtwYXJ0ZnMgcHJpbWFyeSByZWlzZXJmcyAxIDFcCisJCSBjaGVjayAxIlwKKwkJImVjaG8gWWVzIHwgL3NiaW4vcmVpc2VyZnNjayAtcSAke1RFU1RfRFJJVkV9MSAyPiYxIgorCisJcGVkX3Rlc3QgIm1rcGFydGZzIlwKKwkJIm1rbGFiZWwgJFRFU1RfRlNfVVNFX0RJU0tfTEFCRUxcCisJCW1rcGFydGZzIHByaW1hcnkgcmVpc2VyZnMgMSAkREVGQVVMVF9FTkRcCisJCWNoZWNrIDEiXAorCQkiZWNobyBZZXMgfCAvc2Jpbi9yZWlzZXJmc2NrIC1xICR7VEVTVF9EUklWRX0xIDI+JjEiCisKKwlwZWRfdGVzdCAibWtmcyJcCisJCSJta2ZzIDEgcmVpc2VyZnNcCisJCSBjaGVjayAxIlwKKwkJImVjaG8gWWVzIHwgL3NiaW4vcmVpc2VyZnNjayAtcSAke1RFU1RfRFJJVkV9MSAyPiYxIgorfQorCitwcmVwYXJlX3Jlc2l6ZV90ZXN0cygpCit7CisJcGFydF9udW09MQorCXBhcnQ9JFRFU1RfRFJJVkUkcGFydF9udW0KKworCXVtb3VudCAkVEVTVF9NT1VOVF9QT0lOVCAyPiYxID4gL2Rldi9udWxsCisKKwltb3VudCAkcGFydCAkVEVTVF9NT1VOVF9QT0lOVCAtdCByZWlzZXJmcyBcCisJJiYgY3AgJFRFU1RfREFUQS8qICRURVNUX01PVU5UX1BPSU5UIC1yCisJdW1vdW50ICRURVNUX01PVU5UX1BPSU5UIDI+JjEgPiAvZGV2L251bGwKK30KKwordGVzdF9yZXNpemVfbW92ZV9lbmRfZm9yd2FyZCgpCit7CisJZG9fdGVzdF9kaWZmICJyZXNpemU6IG1vdmUgZW5kIGZvcndhcmQiXAorCQkkVEVTVF9EQVRBICRURVNUX01PVU5UX1BPSU5UIFwKKwkJInJlc2l6ZSAxIDEgJFsgJERFRkFVTFRfRU5EICsgNSBdIGNoZWNrIDEiXAorCQkiZWNobyBZZXMgfCAvc2Jpbi9yZWlzZXJmc2NrIC1xICR7VEVTVF9EUklWRX0xIDI+JjEiCit9CisKK3Rlc3RfcmVzaXplX21vdmVfZW5kX2ZvcndhcmRfYmlnKCkKK3sKKwlkb190ZXN0X2RpZmYgInJlc2l6ZTogbW92ZSBlbmQgZm9yd2FyZCAoYmlnKSJcCisJCSRURVNUX0RBVEEgJFRFU1RfTU9VTlRfUE9JTlQgXAorCQkicmVzaXplIDEgMSAkWyAkREVGQVVMVF9FTkQgKyAyMDAgXSBjaGVjayAxIlwKKwkJImVjaG8gWWVzIHwgL3NiaW4vcmVpc2VyZnNjayAtcSAke1RFU1RfRFJJVkV9MSAyPiYxIgorfQorCit0ZXN0X3Jlc2l6ZV9tb3ZlX2VuZF9iYWNrd2FyZCgpCit7CisJZG9fdGVzdF9kaWZmICJyZXNpemU6IG1vdmUgZW5kIGJhY2t3YXJkIlwKKwkJJFRFU1RfREFUQSAkVEVTVF9NT1VOVF9QT0lOVCBcCisJCSJyZXNpemUgMSAxICRERUZBVUxUX0VORCBjaGVjayAxIlwKKwkJImVjaG8gWWVzIHwgL3NiaW4vcmVpc2VyZnNjayAtcSAke1RFU1RfRFJJVkV9MSAyPiYxIgorfQorCittYWluKCkKK3sKKwlleHBvcnQgREVGQVVMVF9FTkQ9MjAwCisKKwlpZiAhIHRlc3RfbWtwYXJ0ZnM7IHRoZW4KKwkJcmV0dXJuIDEKKwlmaQorCisJcHJlcGFyZV9yZXNpemVfdGVzdHMKKwl0ZXN0X3Jlc2l6ZV9tb3ZlX2VuZF9mb3J3YXJkCisJdGVzdF9yZXNpemVfbW92ZV9lbmRfYmFja3dhcmQKKwl0ZXN0X3Jlc2l6ZV9tb3ZlX2VuZF9mb3J3YXJkX2JpZworCXRlc3RfcmVzaXplX21vdmVfZW5kX2JhY2t3YXJkCit9CisKK21haW4KKwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2RlYnVnL3Rlc3QvdGVzdHJjIGIvcGFydGVkLTEuOC43L2RlYnVnL3Rlc3QvdGVzdHJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0ZGZmMDAKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvZGVidWcvdGVzdC90ZXN0cmMKQEAgLTAsMCArMSw0MSBAQAorIyBmaWxsIHRoaXMgaW4hICBJdCdsbCByZWZ1c2UgdG8gcnVuIGlmIHlvdSBkb24ndC4gIEkgZG9uJ3Qgd2FudCB0aGlzCisjIGNvbmZpZ3VyYXRpb24gdXNlZCB0byBjbG9iYmVyIHlvdXIgbWFjaGluZSA6LSkKK1RFU1RfSE9TVD1zYXRpc2ZhY3RvcnkKKworIyBQYXJ0ZWQgZGlzdHJpYnV0aW9uIGJhc2UKKyMgVEVTVF9QQVJURURfQkFTRT0uLi8uLgorVEVTVF9QQVJURURfQkFTRT0vaG9tZS9wYXJ0ZWQvY3ZzL3N0YWJsZQorCisjIHdoZXJlIHRvIGZpbmQgR05VIHBhcnRlZAorVEVTVF9QQVJURURfQ09NTUFORD0kVEVTVF9QQVJURURfQkFTRS9wYXJ0ZWQvcGFydGVkCisKKyMgd2hlcmUgdG8gZmluZCBjbGVhcmZhdAorVEVTVF9QQVJURURfQ0xFQVJGQVQ9JFRFU1RfUEFSVEVEX0JBU0UvZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQKKworIyB0aGUgZHJpdmUgdG8gYmUgY29tcGxldGVseSBjbG9iYmVyZWQhCitURVNUX0RSSVZFPS9kZXYvaGRiCisKKyMgVGhlIHNpemUgb2YgdGhlIGRpc2ssIGluIG1lZ2FieXRlcworVEVTVF9EUklWRV9TSVpFPTE5MDkyCisKKyMgd2hlcmUgVEVTVF9EUklWRSBnZXRzIG1vdW50ZWQKK1RFU1RfTU9VTlRfUE9JTlQ9L21udC90ZXN0CisKKyMgd2hlcmUgdG8gZ2V0IHRlc3QgZGF0YSBmcm9tLiAgQ2xlYXIgdGV4dCBpcyBuaWNlIC0gZWFzaWVyIHRvIGRlYnVnLgorVEVTVF9EQVRBPS91c3Ivc3JjL2tlcm5lbC1zb3VyY2UtMi40LjIwCisKKyMgZGF0YSB0byBkZWxldGUgYW5kIHJlcGxhY2UsIHRvICJmcmFnbWVudCIgdGhlIGRyaXZlLgorVEVTVF9EQVRBX0hPTEU9aW5jbHVkZQorCisjIHdoaWNoIGRpc2sgbGFiZWwgdG8gdXNlIGZvciB0ZXN0aW5nIGZpbGUgc3lzdGVtcworVEVTVF9GU19VU0VfRElTS19MQUJFTD1tc2RvcworCisjIHNldCB0byAxIGlmIHlvdSB3YW50IHRvIHNodXQgdXAgdGhlIGtlcm5lbCdzIGFubm95aW5nIG1lc3NhZ2VzCitRVUlFVF9LRVJORUw9MQorCisjIHNldCB0byAxIGlmIHlvdSB3YW50IGxvZ2dpbmcgb2YgZXZlcnl0aGluZywgaW5jbHVkaW5nIHN1Y2Nlc3NmdWwgdGVzdHMKK1ZFUkJPU0VfTE9HUz0xCisKKyMgc2V0IHRoaXMgaWYgeW91IHdhbnQgdG8gZG8gbWFsbG9jKCkgZGVidWdnaW5nIHdpdGggbXRyYWNlCisjTUFMTE9DX1RSQUNFPW1hbGxvYy10cmFjZQorCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvZG9jL0FQSSBiL3BhcnRlZC0xLjguNy9kb2MvQVBJCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwZWUwZjQKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvZG9jL0FQSQpAQCAtMCwwICsxLDI4OCBAQAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOVSBsaWJwYXJ0ZWQgQVBJCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworCisKKworCisKKworICAgICAgICAgICAgICAgIDw8PCBUaGlzIGZpbGUgaXMgZGVwcmVjYXRlZCBhbmQgYmVpbmcgY29udmVydGVkCisgICAgICAgICAgICAgICAgICAgICAgIHRvIERveHlnZW4gaW4tbGluZSBkb2N1bWVudGF0aW9uLgorICAgICAgICAgICAgICAgICAgVW50aWwgdGhpcyBpcyBmaW5pc2hlZCwgYm90aCBhcmUgaW5jb21wbGV0ZQorICAgICAgICAgICAgICAgICAgICBidXQgZnVsbHkgZG9jdW1lbnQgdGhlIEFQSSB0b2dldGhlci4gPj4+CisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICggc2Nyb2xsIGRvd24gdG8gcmVhZCApCisKKworCisKKworICAgICAgYnkgQW5kcmV3IENsYXVzZW4gPGNsYXVzZW5AZ251Lm9yZz4sCisgICAgICAgICBMZXNsaWUgUC4gUG9semVyIDxwb2x6ZXJAZ251Lm9yZz4KKworICAgICAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA1LCAyMDA2LCAyMDA3CisgICAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgICAgUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50CisgICAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjEKKyAgICAgIG9yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworICAgICAgd2l0aCB0aGUgbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIHRoZSBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kCisgICAgICB3aXRoIG5vIEJhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCisgICAgICBmaWxlLCBDT1BZSU5HLkRPQy4KKworCitDT05URU5UUworLS0tLS0tLS0KKworMQlJbnRyb2R1Y3Rpb24KKzIJSW5pdGlhbGlzaW5nIGxpYnBhcnRlZAorMwlQZWREZXZpY2UKKzQJUGVkRGlzaywgUGVkRGlza1R5cGUKKzUJUGVkR2VvbWV0cnkKKzYJUGVkUGFydGl0aW9uLCBQZWRQYXJ0aXRpb25UeXBlCis3CVBlZEZpbGVTeXN0ZW0sIFBlZEZpbGVTeXN0ZW1UeXBlCis4CVBlZENvbnN0cmFpbnQsIFBlZEFsaWdubWVudAorOQlQZWRUaW1lcgorMTAJUGVkVW5pdAorMTEJRXhjZXB0aW9ucworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisxCUlOVFJPRFVDVElPTgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitHTlUgUGFydGVkIGlzIGJ1aWx0IG9uIHRvcCBvZiBsaWJwYXJ0ZWQsIHdoaWNoIGRvZXMgYWxsIG9mIHRoZSByZWFsIHdvcmsuCitsaWJwYXJ0ZWQgcHJvdmlkZXMgYW4gQVBJIGNhcGFibGUgb2YgbWFuaXB1bGF0aW5nIHBhcnRpdGlvbiB0YWJsZXMsIGFuZAordGhlIGZpbGVzeXN0ZW1zIG9uIHRoZW0uCisKK1RoZSBtYWluIG1vdGl2YXRpb24gZm9yIHNlcGFyYXRpbmcgdGhlIGJhY2stZW5kIGludG8gYSBzZXBhcmF0ZSBsaWJyYXJ5IHdhcwordG8gZW5jb3VyYWdlIGRpZmZlcmVudCBHTlUvTGludXggZGlzdHJpYnV0aW9ucyB0byBlbmNvcnBvcmF0ZSB0aGVpciBvd24KK2N1c3RvbWl6ZWQgZnJvbnQtZW5kIGludG8gdGhlIGluc3RhbGwgcHJvY2Vzcy4KKworVGhpcyBkb2N1bWVudHMgdGhlIEFQSSAtLSBub3QgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgbGlicGFydGVkLgorRG9jdW1lbnRhdGlvbiB0aGF0IGlzIG5vdCByZWxldmFudCB0byBwcm9ncmFtcyB1c2luZyB0aGUgQVBJIGFyZSBtYXJrZWQgd2l0aAorSU5URVJOQUwuICBBcGFydCBmcm9tIHRoaXMgZmlsZSwgYSBnb29kIHBsYWNlIHRvIGxvb2sgd291bGQgYmUKK3BhcnRlZC9wYXJ0ZWQuYywgdGhlIGZyb250LWVuZCdzIHNvdXJjZSwgYW5kIHRoZSBUVVRPUklBTCBmaWxlIChub3QgZmluaXNoZWQKK3lldCEpLgorCitUaGlzIGRvY3VtZW50YXRpb24gaXNuJ3QgYXMgY29tcGxldGUgYXMgaXQgc2hvdWxkIGJlLiAgRmVlbCBmcmVlIHRvIGFzaworcXVlc3Rpb25zLCBlaXRoZXIgdG8gbWUgcGVyc29uYWxseSAoY2xhdXNlbkBnbnUub3JnKSwgb3IgdG8gdGhlIG1haWxpbmcgbGlzdAorKGJ1Zy1wYXJ0ZWRAZ251Lm9yZykuCisKKzEuMQlURVJNSU5PTE9HWQorLS0tLS0tLS0tLS0tLS0tLS0tLQorU29tZSBvZiB0aGUgdGVybWlub2xvZ3kgaXMgYSBiaXQgd2VpcmQsIHNvIHlvdSBtaWdodCB3YW50IHRvIHJlYWQgdGhpcy4KKworQ09OU1RSQUlOVAkJYSBzZXQgb2YgY29uZGl0aW9ucyB0aGF0IG11c3QgYmUgc2F0aXNmaWVkLCBmb3IKKwkJCWEgZ2l2ZW4gR0VPTUVUUlkgb2YgYSBQQVJUSVRJT04uCisKK0RFVklDRQkJCWEgc3RvcmFnZSBkZXZpY2UuCisKK0RJU0sJCQlhIHN0b3JhZ2UgZGV2aWNlLCB3aXRoIGEgdmFsaWQgcGFydGl0aW9uIHRhYmxlLgorCitFWENFUFRJT04JCWFuIGV2ZW50IHRoYXQgbmVlZHMgYXR0ZW50aW9uLgorCitFWFRFTkRFRCBQQVJUSVRJT04JYSBQUklNQVJZIFBBUlRJVElPTiwgdGhhdCBtYXkgY29udGFpbiBMT0dJQ0FMCisJCQlQQVJUSVRJT05TIGluc3RlYWQgb2YgYSBmaWxlIHN5c3RlbS4gIFRoZXJlIGlzIGF0IG1vc3QKKwkJCW9uZSBleHRlbmRlZCBwYXJ0aXRpb24uCisKK0ZJTEUgU1lTVEVNCQlhbnkgZGF0YSB0aGF0IHJlc2lkZXMgb24gYSBwYXJ0aXRpb24uICBGb3IgdGhlIHB1cnBvc2VzCisJCQlmb3IgR05VIFBhcnRlZCwgdGhpcyBpbmNsdWRlcyBzd2FwIGRldmljZXMuCisKK0dFT01FVFJZCQlhIGRlc2NyaXB0aW9uIG9mIGEgY29udGludW91cyByZWdpb24gb24gYSBkaXNrLiAgZWcsCisJCQlwYXJ0aXRpb25zIGhhdmUgYSBnZW9tZXRyeS4KKworSElEREVOIFBBUlRJVElPTglhIHBhcnRpdGlvbiB0aGF0IGlzIGhpZGRlbiBmcm9tIE1TIG9wZXJhdGluZyBzeXN0ZW1zLgorCQkJT25seSBGQVQgcGFydGl0aW9ucyBtYXkgYmUgaGlkZGVuLgorCitMT0dJQ0FMIFBBUlRJVElPTglsaWtlIG5vcm1hbCBwYXJ0aXRpb25zLCBidXQgdGhleSBsaWUgaW5zaWRlIHRoZQorCQkJZXh0ZW5kZWQgcGFydGl0aW9uLgorCitQQVJUSVRJT04JCWEgY29udGludW91cyByZWdpb24gb24gYSBkaXNrIHdoZXJlIGEgZmlsZSBzeXN0ZW0gbWF5CisJCQlyZXNpZGUuCisKK1BSSU1BUlkgUEFSVElUSU9OCWEgbm9ybWFsLCB2YW5pbGxhLCBwYXJ0aXRpb24uCisKK1BBUlRJVElPTiBUQUJMRQkJYWxzbywgRElTSyBMQUJFTC4gIEEgZGVzY3JpcHRpb24gb2Ygd2hlcmUgdGhlCisJCQlwYXJ0aXRpb25zIGxpZSwgYW5kIGluZm9ybWF0aW9uIGFib3V0IHRob3NlIHBhcnRpdGlvbnMuCisJCQlGb3IgZXhhbXBsZSwgd2hhdCB0eXBlIG9mIGZpbGUgc3lzdGVtIHJlc2lkZXMgb24gdGhlbS4KKwkJCVRoZSBwYXJ0aXRpb24gdGFibGUgaXMgdXN1YWxseSBhdCB0aGUgc3RhcnQgb2YgdGhlCisJCQlkaXNrLgorCitUSU1FUgkJCWEgcHJvZ3Jlc3MgbWV0ZXIuICBJdCBpcyBhbiBlbnRpdHkgdGhhdCBrZWVwcyB0cmFjaworCQkJb2YgdGltZSwgYW5kIHdobyB0byBpbmZvcm0gd2hlbiBzb21ldGhpbmcgaW50ZXJlc3RpbmcKKwkJCWhhcHBlbnMuCisKKzEuMglERVNJR04KKy0tLS0tLS0tLS0tLS0tCitsaWJwYXJ0ZWQgaGFzIGEgZmFpcmx5IG9iamVjdC1vcmllbnRlZCBkZXNpZ24uICBUaGUgbW9zdCBpbXBvcnRhbnQgb2JqZWN0cyBhcmU6CisKK1BlZEFyY2hpdGVjdHVyZQkJZGVzY3JpYmVzIHN1cHBvcnQgZm9yIGFuICJhcmNoaWN0dXJlIiwgd2hpY2ggaXMgc29ydAorCQkJb2YgbGlrZSAib3BlcmF0aW5nIHN5c3RlbSIsIGJ1dCBjb3VsZCBhbHNvIGJlLAorCQkJZm9yIGV4YW1wbGUsIGFub3RoZXIgbGlicGFydGVkIGVudmlyb25tZW50LCBFVk1TLCBldGMuCitQZWRDb25zdHJhaW50CQlhIGNvbnN0cmFpbnQgb24gdGhlIGdlb21ldHJ5IG9mIGEgcGFydGl0aW9uCitQZWREZXZpY2UJCWEgc3RvcmFnZSBkZXZpY2UKK1BlZERpc2sJCQlhIGRldmljZSArIHBhcnRpdGlvbiB0YWJsZQorUGVkRmlsZVN5c3RlbQkJYSBmaWxlc3lzdGVtLCBhc3NvY2lhdGVkIHdpdGggYSBQZWRHZW9tZXRyeSwgTk9UIGEKKwkJCVBlZFBhcnRpdGlvbi4KK1BlZEdlb21ldHJ5CQlhIGNvbnRpbmlvdXMgcmVnaW9uIG9uIGEgZGV2aWNlCitQZWRQYXJ0aXRpb24JCWEgcGFydGl0aW9uIChiYXNpY2FsbHkgUGVkR2VvbWV0cnkgcGx1cyBzb21lIGF0dHJpYnV0ZXMpCitQZWRUaW1lcgkJYSB0aW1lciBrZWVwcyB0cmFjayBvZiBwcm9ncmVzcyBhbmQgdGltZQorCitBbGwgZnVuY3Rpb25zIHJldHVybiAwIChvciBOVUxMKSBvbiBmYWlsdXJlIGFuZCBub24temVybyAob3Igbm9uLU5VTEwpIG9uCitzdWNjZXNzLiAgSWYgYSBmdW5jdGlvbiBmYWlscywgYW4gZXhjZXB0aW9uIGlzIHRocm93bi4gIFRoaXMgbWF5IGJlIGhhbmRsZWQgYnkKK2VpdGhlciBhbiBleGNlcHRpb24gaGFuZGxlciwgb3IgdGhlIGNhbGxpbmcgZnVuY3Rpb24gKHNlZSB0aGUgc2VjdGlvbiBvbgorZXhjZXB0aW9ucykuCisKK0FsbCBvYmplY3RzIHNob3VsZCBiZSBjb25zaWRlcmVkIHJlYWQtb25seTsgdGhleSBzaG91bGQgb25seSBiZSBtb2RpZmllZCBieQorY2FsbHMgdG8gbGlicGFydGVkJ3MgQVBJLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisyCUlOSVRJQUxJU0lORyBMSUJQQVJURUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSGVhZGVycyBmb3IgbGlicGFydGVkIGNhbiBiZSBpbmNsdWRlZCB3aXRoOgorCisjaW5jbHVkZSA8cGFydGVkL3BhcnRlZC5oPgorCitQYXJ0ZWQgYXV0b21hdGljYWxseSBpbml0aWFsaXNlcyBpdHNlbGYgdmlhIGFuIF9fYXR0cmlidXRlX18gKChjb25zdHJ1Y3RvcikpCitmdW5jdGlvbi4KKworSG93ZXZlciwgeW91IG1pZ2h0IHdhbnQgdG8gc2V0IHRoZSBleGNlcHRpb24gaGFuZGxlciB3aXRoCitwZWRfZXhjZXB0aW9uX3NldF9oYW5kbGVyKCkuICBsaWJwYXJ0ZWQgZG9lcyBjb21lIHdpdGggYSBkZWZhdWx0IGV4Y2VwdGlvbgoraGFuZGxlciwgaWYgeW91J3JlIGZlZWxpbmcgbGF6eS4KKworSGVyZSdzIGEgbWluaW1hbCBleGFtcGxlOgorCisjaW5jbHVkZSA8cGFydGVkL3BhcnRlZC5oPgorCitpbnQKK21haW4oKQoreworCS8qIGF1dG9tYXRpY2FsbHkgaW5pdGlhbGl6ZWQgKi8KKwlwZWRfZXhjZXB0aW9uX3NldF9oYW5kbGVyKGV4Y2VwdGlvbl9oYW5kbGVyKTsJLyogc2VlIHNlY3Rpb24gNyAqLworCXJldHVybiAwOworCS8qIGF1dG9tYXRpY2FsbHkgY2xlYW5lZCB1cCAqLworfQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorNQlQRURHRU9NRVRSWQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworNS4xCUZJRUxEUworLS0tLS0tLS0tLS0tLS0KKworNS4yCUZVTkNUSU9OUworLS0tLS0tLS0tLS0tLS0tLS0KKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorNglQRURQQVJUSVRJT04sIFBFRFBBUlRJVElPTlRZUEUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2ludGVyZmFjZToJCTxwYXJ0ZWQvZGlzay5oPgoraW1wbGVtZW50YXRpb246CQlsaWJwYXJ0ZWQvZGlzay5jCisKK0EgUGVkUGFydGl0aW9uIHJlcHJlc2VudHMgYSBwYXJ0aXRpb24gKHN1cnByaXNlISkuICBQZWRQYXJ0aXRpb25zIGhhdmUgd2VpcmQKK3JlbGF0aW9uc2hpcHMgd2l0aCBQZWREaXNrcy4gIEhlbmNlLCBtYW55IGZ1bmN0aW9ucyBmb3IgbWFuaXB1bGF0aW5nIHBhcnRpdGlvbnMKK3dpbGwgYmUgY2FsbGVkIHBlZF9kaXNrXyogLSBzbyBoYXZlIGEgbG9vayBhdCB0aGUgUGVkRGlzayBkb2N1bWVudGF0aW9uIGFzIHdlbGwuCisKK1BhcnRlZCBjcmVhdGVzICJpbWFnaW5hcnkiIGZyZWUgc3BhY2UgYW5kIG1ldGFkYXRhIHBhcnRpdGlvbnMuICBZb3UgY2FuJ3QKK2RvIGFueSBvcGVyYXRpb25zIG9uIHRoZXNlIHBhcnRpdGlvbnMgKGxpa2Ugc2V0X2dlb21ldHJ5LCB7c2V0LGdldH1fZmxhZywgZXRjLikKK1BhcnRpdGlvbnMgdGhhdCBhcmUgbm90IGZyZWUgc3BhY2Ugb3IgbWV0YWRhdGEgcGFydGl0aW9ucyBhcmUgc2FpZCB0bworYmUgImFjdGl2ZSIgcGFydGl0aW9ucy4gIFlvdSBjYW4gdXNlIHBlZF9wYXJ0aXRpb25faXNfYWN0aXZlKCkgdG8gY2hlY2suCisKKzYuMQlGSUVMRFMKKy0tLS0tLS0tLS0tLS0tCisKKworNi4yCUZVTkNUSU9OUworLS0tLS0tLS0tLS0tLS0tLS0KKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorNwlQRURGSUxFU1lTVEVNLCBQRURGSUxFU1lTVEVNVFlQRQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCis3LjEJRklFTERTCistLS0tLS0tLS0tLS0tLQorCisKKzcuMglGVU5DVElPTlMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzgJUEVEQ09OU1RSQUlOVCwgUEVEQUxJR05NRU5UCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKKyJBbGlnbm1lbnRzIiBhcmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBsb2NhdGlvbiBvZiBhIHNlY3RvciBpbiB0aGUgZm9ybSBvZjoKKworCXNlY3RvciA9IG9mZnNldCArIFggKiBncmFpbl9zaXplCisKK0ZvciBleGFtcGxlLCBsb2dpY2FsIHBhcnRpdGlvbnMgb24gbXNkb3MgZGlzayBsYWJlbHMgdXN1YWxseSBoYXZlIGEgY29uc3RyYWludAord2l0aCBvZmZzZXQgPSA2MyBhbmQgZ3JhaW5fc2l6ZSA9IDE2MDY1IChMb25nIHN0b3J5ISkuICBBbiBpbXBvcnRhbnQKKyhhbmQgbm9uLW9idmlvdXMhKSBwcm9wZXJ0eSBvZiBhbGlnbm1lbnQgcmVzdHJpY3Rpb25zIGlzIHRoZXkgYXJlIGNsb3NlZAordW5kZXIgaW50ZXJzZWN0aW9uLCAgaS5lLiBpZiB5b3UgdGFrZSB0d28gY29uc3RyYWludHMsIGxpa2UgKG9mZnNldCwgZ3JhaW5fc2l6ZSkKKz0gKDYzLCAxNjA2NSkgYW5kICgwLCA0KSwgdGhlbiBlaXRoZXI6CisgICogdGhlcmUgYXJlIG5vIHZhbGlkIHNvbHV0aW9ucworICAqIGFsbCBzb2x1dGlvbnMgY2FuIGJlIGV4cHJlc3NlZCBpbiB0aGUgZm9ybSBvZiAob2Zmc2V0ICsgWCAqIGdyYWluX3NpemUpCitJbiB0aGUgZXhhbXBsZSwgdGhlIGludGVyc2VjdGlvbiBvZiB0aGUgY29uc3RyYWludCBpcyAoMTYxMjgsIDY0MjYwKS4KKworRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIG1hdGhzLCBzZWUgdGhlIHNvdXJjZSAtLSB0aGVyZSdzIGEgbGFyZ2UgY29tbWVudAorY29udGFpbmluZyBwcm9vZnMgYWJvdmUgcGVkX2FsaWdubWVudF9pbnRlcnNlY3QoKSBpbiBsaWJwYXJ0ZWQvbmF0bWF0aC5jCisKK1RoZSByZXN0cmljdGlvbnMgb24gdGhlIGxvY2F0aW9uIG9mIHRoZSBzdGFydCBhbmQgZW5kIGFyZSBpbiB0aGUgZm9ybSBvZiAKK1BlZEdlb21ldHJ5IG9iamVjdHMgLS0gY29udGlub3VzIHJlZ2lvbnMgaW4gd2hpY2ggdGhlIHN0YXJ0IGFuZCBlbmQgbXVzdCBsaWUuCitPYnZpb3VzbHksIHRoZXNlIHJlc3RyaWN0aW9ucyBhcmUgYWxzbyBjbG9zZWQgdW5kZXIgaW50ZXJzZWN0aW9uLgorCitUaGUgb3RoZXIgcmVzdHJpY3Rpb24gLS0gdGhlIG1pbmltdW0gc2l6ZSAtLSBpcyBhbHNvIGNsb3NlZCB1bmRlciBpbnRlcnNlY3Rpb24uCisoVGhlIGludGVyc2VjdGlvbiBvZiAyIG1pbmltdW0gc2l6ZSByZXN0cmljdGlvbnMgaXMgdGhlIG1heGltdW0gb2YgdGhlCisyIHZhbHVlcykKKworRklYTUU6IG1lbnRpb24gcGVkX2FsaWdubWVudF9hbnkKKworOC4yCUZVTkNUSU9OUworLS0tLS0tLS0tLS0tLS0tLS0KKworCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis5CVBFRFRJTUVSCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCis5LjEJRklFTERTCistLS0tLS0tLS0tLS0tLQorCit0eXBlZGVmIHZvaWQgUGVkVGltZXJIYW5kbGVyIChQZWRUaW1lciogdGltZXIsIHZvaWQqIGNvbnRleHQpOworCisKKzkuMglGVU5DVElPTlMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzEwCVBFRFVOSVQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworMTAuMQlDT05TVEFOVFMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKzEwLjIJRlVOQ1RJT05TCistLS0tLS0tLS0tLS0tLS0tLQorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisxMQlFWENFUFRJT05TCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisxMS4xCUZJRUxEUworLS0tLS0tLS0tLS0tLS0KKworCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvZG9jL0MvTWFrZWZpbGUuYW0gYi9wYXJ0ZWQtMS44LjcvZG9jL0MvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ3ZWI3NAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9kb2MvQy9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDMwIEBACisjIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9tYWtlIHRvIHByb2R1Y2UgTWFrZWZpbGUuaW4KKworZGlzdF9tYW5fTUFOUyA9IFwKKwlwYXJ0ZWQuOCBcCisJcGFydHByb2JlLjgKKworbWFuX01BTlMgPSAkKGRpc3RfbWFuX01BTlMpCisKKy5QSE9OWTogdXBkYXRlcG8KKyMgVXBkYXRlIHRoZSBQT1QgaW4gc3JjZGlyCisjIE1ha2Ugc3VyZSB0aGUgdXBkYXRlIGRvZXMgbm90IG9ubHkgY29uc2lzdCBpbiBhIG5ldyBQT1QtQ3JlYXRpb24tRGF0ZQorIyBEb24ndCBkbyBhbnl0aGluZyBpZiAkKHNyY2RpcikgaXMgcmVhZC1vbmx5IChpLmUuLCBmb3IgIm1ha2UgZGlzdGNoZWNrIikuCit1cGRhdGVwbzoKKwljZCAkKHNyY2Rpcik7IFwKKwl0ZXN0IC13IC4gfHwgZXhpdCAwOyBcCisJZm9yIG5hbWUgaW4gJChkaXN0X21hbl9NQU5TKTsgZG8gXAorCQllY2hvICQkbmFtZTsgXAorCQljcCBwby8kJG5hbWUucG90IHBvLyQkbmFtZS5uZXcucG90OyBcCisJCXBvNGEtdXBkYXRlcG8gLWYgbWFuIC1tICQkbmFtZSAtcCBwby8kJG5hbWUubmV3LnBvdDsgXAorCQlkaWZmIC1JICdeXCJQT1QtQ3JlYXRpb24tRGF0ZTogJyBwby8kJG5hbWUucG90IHBvLyQkbmFtZS5uZXcucG90IDI+JjEgPiAvZGV2L251bGw7IFwKKwkJaWYgWyAkJD8gXTsgdGhlbiBcCisJCQltdiBwby8kJG5hbWUubmV3LnBvdCBwby8kJG5hbWUucG90OyBcCisJCWVsc2UgXAorCQkJcm0gLWYgcG8vJCRuYW1lLm5ldy5wb3Q7IFwKKwkJZmk7IFwKKwlkb25lCisKK2Rpc3QtaG9vazogdXBkYXRlcG8KKworTUFJTlRBSU5FUkNMRUFORklMRVMgPSBNYWtlZmlsZS5pbgpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2RvYy9DL01ha2VmaWxlLmluIGIvcGFydGVkLTEuOC43L2RvYy9DL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNWZlMWEKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvZG9jL0MvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw1OTYgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTAgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK3N1YmRpciA9IGRvYy9DCitESVNUX0NPTU1PTiA9ICQoZGlzdF9tYW5fTUFOUykgJChzcmNkaXIpL01ha2VmaWxlLmFtIFwKKwkkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200L2Fic29sdXRlLWhlYWRlci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9hbGxvY2EubTQgJCh0b3Bfc3JjZGlyKS9tNC9hc3NlcnQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvYXRleGl0Lm00ICQodG9wX3NyY2RpcikvbTQvY2FsbG9jLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2Nsb3NlLXN0cmVhbS5tNCAkKHRvcF9zcmNkaXIpL200L2Nsb3Nlb3V0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NvZGVzZXQubTQgJCh0b3Bfc3JjZGlyKS9tNC9jb25maWctaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9kaXJuYW1lLm00ICQodG9wX3NyY2RpcikvbTQvZG9zLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2RvdWJsZS1zbGFzaC1yb290Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2Vycm9yLm00ICQodG9wX3NyY2RpcikvbTQvZXhpdGZhaWwubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZXh0ZW5zaW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2ZwZW5kaW5nLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ZyZWUubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXRvcHQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCAkKHRvcF9zcmNkaXIpL200L2dsaWJjMjEubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZ251bGliLWNvbW1vbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9nbnVsaWItY29tcC5tNCAkKHRvcF9zcmNkaXIpL200L2ljb252Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2lubGluZS5tNCAkKHRvcF9zcmNkaXIpL200L2ludHR5cGVzLXByaS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pbnR0eXBlcy5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1pZ25vcmUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sb2NhbGNoYXJzZXQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbG9uZy1vcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbG9uZ2xvbmcubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWJydG93Yy5tNCAkKHRvcF9zcmNkaXIpL200L21ic3RhdGVfdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tZW1jaHIubTQgJCh0b3Bfc3JjZGlyKS9tNC9tZW1jbXAubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWVtY3B5Lm00ICQodG9wX3NyY2RpcikvbTQvbWVtbW92ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tZW1zZXQubTQgJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcG8ubTQgJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9xdW90ZWFyZy5tNCAkKHRvcF9zcmNkaXIpL200L3JlZ2V4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3JlbmFtZS5tNCAkKHRvcF9zcmNkaXIpL200L3JwbWF0Y2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc2FmZS1yZWFkLm00ICQodG9wX3NyY2RpcikvbTQvc2FmZS13cml0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zc2l6ZV90Lm00ICQodG9wX3NyY2RpcikvbTQvc3RkYXJnLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0ZGJvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGRpbnQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RkbGliX2gubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHJjc3BuLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0cmluZ19oLm00ICQodG9wX3NyY2RpcikvbTQvc3RybmR1cC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdHJubGVuLm00ICQodG9wX3NyY2RpcikvbTQvc3RydG9kLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0cnRvbC5tNCAkKHRvcF9zcmNkaXIpL200L3VuaXN0ZF9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3V0aW1idWYubTQgJCh0b3Bfc3JjZGlyKS9tNC91dGltZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC91dGltZXMtbnVsbC5tNCAkKHRvcF9zcmNkaXIpL200L3djaGFyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3djdHlwZS5tNCAkKHRvcF9zcmNkaXIpL200L3dpbnRfdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC94YWxsb2MubTQgJCh0b3Bfc3JjZGlyKS9tNC94c3RybmR1cC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oCitDT05GSUdfQ0xFQU5fRklMRVMgPQorU09VUkNFUyA9CitESVNUX1NPVVJDRVMgPQorbWFuOGRpciA9ICQobWFuZGlyKS9tYW44CithbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQobWFuOGRpcikiCitOUk9GRiA9IG5yb2ZmCitNQU5TID0gJChkaXN0X21hbl9NQU5TKSAkKG1hbl9NQU5TKQorRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FCU09MVVRFX0lOVFRZUEVTX0ggPSBAQUJTT0xVVEVfSU5UVFlQRVNfSEAKK0FCU09MVVRFX1NURElOVF9IID0gQEFCU09MVVRFX1NURElOVF9IQAorQUJTT0xVVEVfU1RETElCX0ggPSBAQUJTT0xVVEVfU1RETElCX0hACitBQlNPTFVURV9TVFJJTkdfSCA9IEBBQlNPTFVURV9TVFJJTkdfSEAKK0FCU09MVVRFX1VOSVNURF9IID0gQEFCU09MVVRFX1VOSVNURF9IQAorQUJTT0xVVEVfV0NIQVJfSCA9IEBBQlNPTFVURV9XQ0hBUl9IQAorQUJTT0xVVEVfV0NUWVBFX0ggPSBAQUJTT0xVVEVfV0NUWVBFX0hACitBQ0xPQ0FMID0gQEFDTE9DQUxACitBTExPQ0EgPSBAQUxMT0NBQAorQUxMT0NBX0ggPSBAQUxMT0NBX0hACitBTVRBUiA9IEBBTVRBUkAKK0FSID0gQEFSQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitCSVRTSVpFT0ZfUFRSRElGRl9UID0gQEJJVFNJWkVPRl9QVFJESUZGX1RACitCSVRTSVpFT0ZfU0lHX0FUT01JQ19UID0gQEJJVFNJWkVPRl9TSUdfQVRPTUlDX1RACitCSVRTSVpFT0ZfU0laRV9UID0gQEJJVFNJWkVPRl9TSVpFX1RACitCSVRTSVpFT0ZfV0NIQVJfVCA9IEBCSVRTSVpFT0ZfV0NIQVJfVEAKK0JJVFNJWkVPRl9XSU5UX1QgPSBAQklUU0laRU9GX1dJTlRfVEAKK0JVSUxESU5GTyA9IEBCVUlMRElORk9ACitDQyA9IEBDQ0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ0hFQ0tfQ0ZMQUdTID0gQENIRUNLX0NGTEFHU0AKK0NIRUNLX0xJQlMgPSBAQ0hFQ0tfTElCU0AKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RMX0xJQlMgPSBARExfTElCU0AKK0RNX0xJQlMgPSBARE1fTElCU0AKK0VDSE8gPSBARUNIT0AKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRVhFRVhUID0gQEVYRUVYVEAKK0Y3NyA9IEBGNzdACitGRkxBR1MgPSBARkZMQUdTQAorR0VUT1BUX0ggPSBAR0VUT1BUX0hACitHTElCQzIxID0gQEdMSUJDMjFACitHTVNHRk1UID0gQEdNU0dGTVRACitHTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKK0dOVUxJQl9DSE9XTiA9IEBHTlVMSUJfQ0hPV05ACitHTlVMSUJfRFVQMiA9IEBHTlVMSUJfRFVQMkAKK0dOVUxJQl9GQ0hESVIgPSBAR05VTElCX0ZDSERJUkAKK0dOVUxJQl9GVFJVTkNBVEUgPSBAR05VTElCX0ZUUlVOQ0FURUAKK0dOVUxJQl9HRVRDV0QgPSBAR05VTElCX0dFVENXREAKK0dOVUxJQl9HRVRMT0dJTl9SID0gQEdOVUxJQl9HRVRMT0dJTl9SQAorR05VTElCX0dFVFNVQk9QVCA9IEBHTlVMSUJfR0VUU1VCT1BUQAorR05VTElCX0lNQVhBQlMgPSBAR05VTElCX0lNQVhBQlNACitHTlVMSUJfSU1BWERJViA9IEBHTlVMSUJfSU1BWERJVkAKK0dOVUxJQl9NQlNDQVNFQ01QID0gQEdOVUxJQl9NQlNDQVNFQ01QQAorR05VTElCX01CU0NBU0VTVFIgPSBAR05VTElCX01CU0NBU0VTVFJACitHTlVMSUJfTUJTQ0hSID0gQEdOVUxJQl9NQlNDSFJACitHTlVMSUJfTUJTQ1NQTiA9IEBHTlVMSUJfTUJTQ1NQTkAKK0dOVUxJQl9NQlNMRU4gPSBAR05VTElCX01CU0xFTkAKK0dOVUxJQl9NQlNOQ0FTRUNNUCA9IEBHTlVMSUJfTUJTTkNBU0VDTVBACitHTlVMSUJfTUJTUEJSSyA9IEBHTlVMSUJfTUJTUEJSS0AKK0dOVUxJQl9NQlNQQ0FTRUNNUCA9IEBHTlVMSUJfTUJTUENBU0VDTVBACitHTlVMSUJfTUJTUkNIUiA9IEBHTlVMSUJfTUJTUkNIUkAKK0dOVUxJQl9NQlNTRVAgPSBAR05VTElCX01CU1NFUEAKK0dOVUxJQl9NQlNTUE4gPSBAR05VTElCX01CU1NQTkAKK0dOVUxJQl9NQlNTVFIgPSBAR05VTElCX01CU1NUUkAKK0dOVUxJQl9NQlNUT0tfUiA9IEBHTlVMSUJfTUJTVE9LX1JACitHTlVMSUJfTUVNTUVNID0gQEdOVUxJQl9NRU1NRU1ACitHTlVMSUJfTUVNUENQWSA9IEBHTlVMSUJfTUVNUENQWUAKK0dOVUxJQl9NRU1SQ0hSID0gQEdOVUxJQl9NRU1SQ0hSQAorR05VTElCX01LRFRFTVAgPSBAR05VTElCX01LRFRFTVBACitHTlVMSUJfTUtTVEVNUCA9IEBHTlVMSUJfTUtTVEVNUEAKK0dOVUxJQl9SRUFETElOSyA9IEBHTlVMSUJfUkVBRExJTktACitHTlVMSUJfU0xFRVAgPSBAR05VTElCX1NMRUVQQAorR05VTElCX1NUUENQWSA9IEBHTlVMSUJfU1RQQ1BZQAorR05VTElCX1NUUE5DUFkgPSBAR05VTElCX1NUUE5DUFlACitHTlVMSUJfU1RSQ0FTRVNUUiA9IEBHTlVMSUJfU1RSQ0FTRVNUUkAKK0dOVUxJQl9TVFJDSFJOVUwgPSBAR05VTElCX1NUUkNIUk5VTEAKK0dOVUxJQl9TVFJEVVAgPSBAR05VTElCX1NUUkRVUEAKK0dOVUxJQl9TVFJORFVQID0gQEdOVUxJQl9TVFJORFVQQAorR05VTElCX1NUUk5MRU4gPSBAR05VTElCX1NUUk5MRU5ACitHTlVMSUJfU1RSUEJSSyA9IEBHTlVMSUJfU1RSUEJSS0AKK0dOVUxJQl9TVFJTRVAgPSBAR05VTElCX1NUUlNFUEAKK0dOVUxJQl9TVFJUT0lNQVggPSBAR05VTElCX1NUUlRPSU1BWEAKK0dOVUxJQl9TVFJUT0tfUiA9IEBHTlVMSUJfU1RSVE9LX1JACitHTlVMSUJfU1RSVE9VTUFYID0gQEdOVUxJQl9TVFJUT1VNQVhACitHUkVQID0gQEdSRVBACitIQVZFX0RFQ0xfR0VUTE9HSU5fUiA9IEBIQVZFX0RFQ0xfR0VUTE9HSU5fUkAKK0hBVkVfREVDTF9JTUFYQUJTID0gQEhBVkVfREVDTF9JTUFYQUJTQAorSEFWRV9ERUNMX0lNQVhESVYgPSBASEFWRV9ERUNMX0lNQVhESVZACitIQVZFX0RFQ0xfTUVNTUVNID0gQEhBVkVfREVDTF9NRU1NRU1ACitIQVZFX0RFQ0xfTUVNUkNIUiA9IEBIQVZFX0RFQ0xfTUVNUkNIUkAKK0hBVkVfREVDTF9TVFJEVVAgPSBASEFWRV9ERUNMX1NUUkRVUEAKK0hBVkVfREVDTF9TVFJOQ0FTRUNNUCA9IEBIQVZFX0RFQ0xfU1RSTkNBU0VDTVBACitIQVZFX0RFQ0xfU1RSTkRVUCA9IEBIQVZFX0RFQ0xfU1RSTkRVUEAKK0hBVkVfREVDTF9TVFJOTEVOID0gQEhBVkVfREVDTF9TVFJOTEVOQAorSEFWRV9ERUNMX1NUUlRPSU1BWCA9IEBIQVZFX0RFQ0xfU1RSVE9JTUFYQAorSEFWRV9ERUNMX1NUUlRPS19SID0gQEhBVkVfREVDTF9TVFJUT0tfUkAKK0hBVkVfREVDTF9TVFJUT1VNQVggPSBASEFWRV9ERUNMX1NUUlRPVU1BWEAKK0hBVkVfRFVQMiA9IEBIQVZFX0RVUDJACitIQVZFX0ZUUlVOQ0FURSA9IEBIQVZFX0ZUUlVOQ0FURUAKK0hBVkVfR0VUU1VCT1BUID0gQEhBVkVfR0VUU1VCT1BUQAorSEFWRV9JTlRUWVBFU19IID0gQEhBVkVfSU5UVFlQRVNfSEAKK0hBVkVfSVNXQ05UUkwgPSBASEFWRV9JU1dDTlRSTEAKK0hBVkVfTE9OR19MT05HX0lOVCA9IEBIQVZFX0xPTkdfTE9OR19JTlRACitIQVZFX01FTVBDUFkgPSBASEFWRV9NRU1QQ1BZQAorSEFWRV9NS0RURU1QID0gQEhBVkVfTUtEVEVNUEAKK0hBVkVfUkVBRExJTksgPSBASEFWRV9SRUFETElOS0AKK0hBVkVfU0lHTkVEX1NJR19BVE9NSUNfVCA9IEBIQVZFX1NJR05FRF9TSUdfQVRPTUlDX1RACitIQVZFX1NJR05FRF9XQ0hBUl9UID0gQEhBVkVfU0lHTkVEX1dDSEFSX1RACitIQVZFX1NJR05FRF9XSU5UX1QgPSBASEFWRV9TSUdORURfV0lOVF9UQAorSEFWRV9TTEVFUCA9IEBIQVZFX1NMRUVQQAorSEFWRV9TVERJTlRfSCA9IEBIQVZFX1NURElOVF9IQAorSEFWRV9TVFBDUFkgPSBASEFWRV9TVFBDUFlACitIQVZFX1NUUE5DUFkgPSBASEFWRV9TVFBOQ1BZQAorSEFWRV9TVFJDQVNFQ01QID0gQEhBVkVfU1RSQ0FTRUNNUEAKK0hBVkVfU1RSQ0FTRVNUUiA9IEBIQVZFX1NUUkNBU0VTVFJACitIQVZFX1NUUkNIUk5VTCA9IEBIQVZFX1NUUkNIUk5VTEAKK0hBVkVfU1RSTkRVUCA9IEBIQVZFX1NUUk5EVVBACitIQVZFX1NUUlBCUksgPSBASEFWRV9TVFJQQlJLQAorSEFWRV9TVFJTRVAgPSBASEFWRV9TVFJTRVBACitIQVZFX1NZU19CSVRZUEVTX0ggPSBASEFWRV9TWVNfQklUWVBFU19IQAorSEFWRV9TWVNfSU5UVFlQRVNfSCA9IEBIQVZFX1NZU19JTlRUWVBFU19IQAorSEFWRV9TWVNfVFlQRVNfSCA9IEBIQVZFX1NZU19UWVBFU19IQAorSEFWRV9VTklTVERfSCA9IEBIQVZFX1VOSVNURF9IQAorSEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UID0gQEhBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVEAKK0hBVkVfV0NUWVBFX0ggPSBASEFWRV9XQ1RZUEVfSEAKK0hBVkVfV0lOVF9UID0gQEhBVkVfV0lOVF9UQAorSEFWRV9fQk9PTCA9IEBIQVZFX19CT09MQAorSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitJTlRMSU5DUyA9IEBJTlRMSU5DU0AKK0lOVExMSUJTID0gQElOVExMSUJTQAorSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAorSU5UVFlQRVNfSCA9IEBJTlRUWVBFU19IQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCSUNPTlYgPSBATElCSUNPTlZACitMSUJJTlRMID0gQExJQklOVExACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQExJQlNACitMSUJUT09MID0gQExJQlRPT0xACitMTl9TID0gQExOX1NACitMVEFMTE9DQSA9IEBMVEFMTE9DQUAKK0xUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKK0xUTElCSU5UTCA9IEBMVExJQklOVExACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTFRfQUdFID0gQExUX0FHRUAKK0xUX0NVUlJFTlQgPSBATFRfQ1VSUkVOVEAKK0xUX1JFTEVBU0UgPSBATFRfUkVMRUFTRUAKK0xUX1JFVklTSU9OID0gQExUX1JFVklTSU9OQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitNS0RJUl9QID0gQE1LRElSX1BACitNU0dGTVQgPSBATVNHRk1UQAorTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAorTVNHTUVSR0UgPSBATVNHTUVSR0VACitPQkpFWFQgPSBAT0JKRVhUQAorT1MgPSBAT1NACitPU19MSUJTID0gQE9TX0xJQlNACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFSVEVETERGTEFHUyA9IEBQQVJURURMREZMQUdTQAorUEFSVEVEX0xJQlMgPSBAUEFSVEVEX0xJQlNACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKK1BPU1VCID0gQFBPU1VCQAorUE9XX0xJQiA9IEBQT1dfTElCQAorUFJJUFRSX1BSRUZJWCA9IEBQUklQVFJfUFJFRklYQAorUFJJX01BQ1JPU19CUk9LRU4gPSBAUFJJX01BQ1JPU19CUk9LRU5ACitQVFJESUZGX1RfU1VGRklYID0gQFBUUkRJRkZfVF9TVUZGSVhACitSQU5MSUIgPSBAUkFOTElCQAorUkVJU0VSX0xJQlMgPSBAUkVJU0VSX0xJQlNACitSRVBMQUNFX0NIT1dOID0gQFJFUExBQ0VfQ0hPV05ACitSRVBMQUNFX0ZDSERJUiA9IEBSRVBMQUNFX0ZDSERJUkAKK1JFUExBQ0VfR0VUQ1dEID0gQFJFUExBQ0VfR0VUQ1dEQAorUkVQTEFDRV9NS1NURU1QID0gQFJFUExBQ0VfTUtTVEVNUEAKK1NFRCA9IEBTRURACitTRUxJTlVYX0xJQlMgPSBAU0VMSU5VWF9MSUJTQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NJR19BVE9NSUNfVF9TVUZGSVggPSBAU0lHX0FUT01JQ19UX1NVRkZJWEAKK1NJWkVfVF9TVUZGSVggPSBAU0laRV9UX1NVRkZJWEAKK1NUREJPT0xfSCA9IEBTVERCT09MX0hACitTVERJTlRfSCA9IEBTVERJTlRfSEAKK1NUUklQID0gQFNUUklQQAorVVNFX05MUyA9IEBVU0VfTkxTQAorVVVJRF9MSUJTID0gQFVVSURfTElCU0AKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1dDSEFSX0ggPSBAV0NIQVJfSEAKK1dDSEFSX1RfU1VGRklYID0gQFdDSEFSX1RfU1VGRklYQAorV0NUWVBFX0ggPSBAV0NUWVBFX0hACitXSU5UX1RfU1VGRklYID0gQFdJTlRfVF9TVUZGSVhACitYR0VUVEVYVCA9IEBYR0VUVEVYVEAKK1hHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9GNzcgPSBAYWNfY3RfRjc3QAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitidWlsZGRpciA9IEBidWlsZGRpckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZG9jZGlyID0gQGRvY2RpckAKK2R2aWRpciA9IEBkdmlkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2dsX0xJQk9CSlMgPSBAZ2xfTElCT0JKU0AKK2dsX0xUTElCT0JKUyA9IEBnbF9MVExJQk9CSlNACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorZGlzdF9tYW5fTUFOUyA9IFwKKwlwYXJ0ZWQuOCBcCisJcGFydHByb2JlLjgKKworbWFuX01BTlMgPSAkKGRpc3RfbWFuX01BTlMpCitNQUlOVEFJTkVSQ0xFQU5GSUxFUyA9IE1ha2VmaWxlLmluCithbGw6IGFsbC1hbQorCisuU1VGRklYRVM6CiskKHNyY2RpcikvTWFrZWZpbGUuaW46ICAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCBcCisJCSYmIGV4aXQgMDsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgIGRvYy9DL01ha2VmaWxlJzsgXAorCWNkICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1nbnUgIGRvYy9DL01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworaW5zdGFsbC1tYW44OiAkKG1hbjhfTUFOUykgJChtYW5fTUFOUykKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwl0ZXN0IC16ICIkKG1hbjhkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJChtYW44ZGlyKSIKKwlAbGlzdD0nJChtYW44X01BTlMpICQoZGlzdF9tYW44X01BTlMpICQobm9kaXN0X21hbjhfTUFOUyknOyBcCisJbDI9JyQobWFuX01BTlMpICQoZGlzdF9tYW5fTUFOUykgJChub2Rpc3RfbWFuX01BTlMpJzsgXAorCWZvciBpIGluICQkbDI7IGRvIFwKKwkgIGNhc2UgIiQkaSIgaW4gXAorCSAgICAqLjgqKSBsaXN0PSIkJGxpc3QgJCRpIiA7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAtZiAkKHNyY2RpcikvJCRpOyB0aGVuIGZpbGU9JChzcmNkaXIpLyQkaTsgXAorCSAgZWxzZSBmaWxlPSQkaTsgZmk7IFwKKwkgIGV4dD1gZWNobyAkJGkgfCBzZWQgLWUgJ3MvXi4qXFwuLy8nYDsgXAorCSAgY2FzZSAiJCRleHQiIGluIFwKKwkgICAgOCopIDs7IFwKKwkgICAgKikgZXh0PSc4JyA7OyBcCisJICBlc2FjOyBcCisJICBpbnN0PWBlY2hvICQkaSB8IHNlZCAtZSAncy9cXC5bMC05YS16XSokJC8vJ2A7IFwKKwkgIGluc3Q9YGVjaG8gJCRpbnN0IHwgc2VkIC1lICdzL14uKlwvLy8nYDsgXAorCSAgaW5zdD1gZWNobyAkJGluc3QgfCBzZWQgJyQodHJhbnNmb3JtKSdgLiQkZXh0OyBcCisJICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICckJGZpbGUnICckKERFU1RESVIpJChtYW44ZGlyKS8kJGluc3QnIjsgXAorCSAgJChJTlNUQUxMX0RBVEEpICIkJGZpbGUiICIkKERFU1RESVIpJChtYW44ZGlyKS8kJGluc3QiOyBcCisJZG9uZQordW5pbnN0YWxsLW1hbjg6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChtYW44X01BTlMpICQoZGlzdF9tYW44X01BTlMpICQobm9kaXN0X21hbjhfTUFOUyknOyBcCisJbDI9JyQobWFuX01BTlMpICQoZGlzdF9tYW5fTUFOUykgJChub2Rpc3RfbWFuX01BTlMpJzsgXAorCWZvciBpIGluICQkbDI7IGRvIFwKKwkgIGNhc2UgIiQkaSIgaW4gXAorCSAgICAqLjgqKSBsaXN0PSIkJGxpc3QgJCRpIiA7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgZXh0PWBlY2hvICQkaSB8IHNlZCAtZSAncy9eLipcXC4vLydgOyBcCisJICBjYXNlICIkJGV4dCIgaW4gXAorCSAgICA4KikgOzsgXAorCSAgICAqKSBleHQ9JzgnIDs7IFwKKwkgIGVzYWM7IFwKKwkgIGluc3Q9YGVjaG8gJCRpIHwgc2VkIC1lICdzL1xcLlswLTlhLXpdKiQkLy8nYDsgXAorCSAgaW5zdD1gZWNobyAkJGluc3QgfCBzZWQgLWUgJ3MvXi4qXC8vLydgOyBcCisJICBpbnN0PWBlY2hvICQkaW5zdCB8IHNlZCAnJCh0cmFuc2Zvcm0pJ2AuJCRleHQ7IFwKKwkgIGVjaG8gIiBybSAtZiAnJChERVNURElSKSQobWFuOGRpcikvJCRpbnN0JyI7IFwKKwkgIHJtIC1mICIkKERFU1RESVIpJChtYW44ZGlyKS8kJGluc3QiOyBcCisJZG9uZQordGFnczogVEFHUworVEFHUzoKKworY3RhZ3M6IENUQUdTCitDVEFHUzoKKworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLXBSICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtcFIgJCRkLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAkKGRpc3RkaXIpLyQkZmlsZSBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgJChkaXN0ZGlyKS8kJGZpbGUgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIFwKKwkgIHRvcF9kaXN0ZGlyPSIkKHRvcF9kaXN0ZGlyKSIgZGlzdGRpcj0iJChkaXN0ZGlyKSIgXAorCSAgZGlzdC1ob29rCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUgJChNQU5TKQoraW5zdGFsbGRpcnM6CisJZm9yIGRpciBpbiAiJChERVNURElSKSQobWFuOGRpcikiOyBkbyBcCisJICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCisJZG9uZQoraW5zdGFsbDogaW5zdGFsbC1hbQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCit1bmluc3RhbGw6IHVuaW5zdGFsbC1hbQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQoraW5zdGFsbC1zdHJpcDoKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKKwkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKKwktdGVzdCAteiAiJChNQUlOVEFJTkVSQ0xFQU5GSUxFUykiIHx8IHJtIC1mICQoTUFJTlRBSU5FUkNMRUFORklMRVMpCitjbGVhbjogY2xlYW4tYW0KKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBtb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tZ2VuZXJpYworCitkdmk6IGR2aS1hbQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtYW0KKworaW5mbzogaW5mby1hbQorCitpbmZvLWFtOgorCitpbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtbWFuCisKK2luc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQorCitpbnN0YWxsLWV4ZWMtYW06CisKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCisKK2luc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCisKK2luc3RhbGwtbWFuOiBpbnN0YWxsLW1hbjgKKworaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLWFtCisKK3BkZi1hbToKKworcHM6IHBzLWFtCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06IHVuaW5zdGFsbC1tYW4KKwordW5pbnN0YWxsLW1hbjogdW5pbnN0YWxsLW1hbjgKKworLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAorCisuUEhPTlk6IGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIFwKKwlkaXN0LWhvb2sgZGlzdGNsZWFuIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIFwKKwlkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIFwKKwlpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgXAorCWluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIFwKKwlpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBcCisJaW5zdGFsbC1tYW44IGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgXAorCWluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIFwKKwlpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gXAorCXBzIHBzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gdW5pbnN0YWxsLW1hbiB1bmluc3RhbGwtbWFuOAorCisKKy5QSE9OWTogdXBkYXRlcG8KKyMgVXBkYXRlIHRoZSBQT1QgaW4gc3JjZGlyCisjIE1ha2Ugc3VyZSB0aGUgdXBkYXRlIGRvZXMgbm90IG9ubHkgY29uc2lzdCBpbiBhIG5ldyBQT1QtQ3JlYXRpb24tRGF0ZQorIyBEb24ndCBkbyBhbnl0aGluZyBpZiAkKHNyY2RpcikgaXMgcmVhZC1vbmx5IChpLmUuLCBmb3IgIm1ha2UgZGlzdGNoZWNrIikuCit1cGRhdGVwbzoKKwljZCAkKHNyY2Rpcik7IFwKKwl0ZXN0IC13IC4gfHwgZXhpdCAwOyBcCisJZm9yIG5hbWUgaW4gJChkaXN0X21hbl9NQU5TKTsgZG8gXAorCQllY2hvICQkbmFtZTsgXAorCQljcCBwby8kJG5hbWUucG90IHBvLyQkbmFtZS5uZXcucG90OyBcCisJCXBvNGEtdXBkYXRlcG8gLWYgbWFuIC1tICQkbmFtZSAtcCBwby8kJG5hbWUubmV3LnBvdDsgXAorCQlkaWZmIC1JICdeXCJQT1QtQ3JlYXRpb24tRGF0ZTogJyBwby8kJG5hbWUucG90IHBvLyQkbmFtZS5uZXcucG90IDI+JjEgPiAvZGV2L251bGw7IFwKKwkJaWYgWyAkJD8gXTsgdGhlbiBcCisJCQltdiBwby8kJG5hbWUubmV3LnBvdCBwby8kJG5hbWUucG90OyBcCisJCWVsc2UgXAorCQkJcm0gLWYgcG8vJCRuYW1lLm5ldy5wb3Q7IFwKKwkJZmk7IFwKKwlkb25lCisKK2Rpc3QtaG9vazogdXBkYXRlcG8KKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9kb2MvQy9wYXJ0ZWQuOCBiL3BhcnRlZC0xLjguNy9kb2MvQy9wYXJ0ZWQuOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDQwNDAyCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2RvYy9DL3BhcnRlZC44CkBAIC0wLDAgKzEsMTM5IEBACisuVEggUEFSVEVEIDggIjIwMDcgTWFyY2ggMjkiIHBhcnRlZCAiR05VIFBhcnRlZCBNYW51YWwiCisuU0ggTkFNRQorR05VIFBhcnRlZCBcLSBhIHBhcnRpdGlvbiBtYW5pcHVsYXRpb24gcHJvZ3JhbQorLlNIIFNZTk9QU0lTCisuQiBwYXJ0ZWQKK1tvcHRpb25zXSBbZGV2aWNlIFtjb21tYW5kIFtvcHRpb25zLi4uXS4uLl1dCisuU0ggREVTQ1JJUFRJT04KKy5CIHBhcnRlZAoraXMgYSBkaXNrIHBhcnRpdGlvbmluZyBhbmQgcGFydGl0aW9uIHJlc2l6aW5nIHByb2dyYW0uICBJdCBhbGxvd3MgeW91IHRvCitjcmVhdGUsIGRlc3Ryb3ksIHJlc2l6ZSwgbW92ZSBhbmQgY29weSBleHQyLCBleHQzLCBsaW51eC1zd2FwLCBGQVQsIEZBVDMyLCBhbmQgcmVpc2VyZnMKK3BhcnRpdGlvbnMuICBJdCBjYW4gY3JlYXRlLCByZXNpemUsIGFuZCBtb3ZlIE1hY2ludG9zaCBIRlMgcGFydGl0aW9ucywgYXMgd2VsbCBhcyBkZXRlY3QgamZzLAorbnRmcywgdWZzLCBhbmQgeGZzIHBhcnRpdGlvbnMuICBJdCBpcyB1c2VmdWwgZm9yIGNyZWF0aW5nIHNwYWNlIGZvciBuZXcgb3BlcmF0aW5nIHN5c3RlbXMsCityZW9yZ2FuaXNpbmcgZGlzayB1c2FnZSwgYW5kIGNvcHlpbmcgZGF0YSB0byBuZXcgaGFyZCBkaXNrcy4KKy5QUAorVGhpcyBtYW51YWwgcGFnZSBkb2N1bWVudHMgXGZCcGFydGVkXGZQIGJyaWVmbHkuICBDb21wbGV0ZSBkb2N1bWVudGF0aW9uIGlzCitkaXN0cmlidXRlZCB3aXRoIHRoZSBwYWNrYWdlIGluIEdOVSBJbmZvIGZvcm1hdDsgc2VlIG5lYXIgdGhlIGJvdHRvbS4KKy5TSCBPUFRJT05TCisuVFAKKy5CIC1oLCAtLWhlbHAKK2Rpc3BsYXlzIGEgaGVscCBtZXNzYWdlCisuVFAKKy5CIC1pLCAtLWludGVyYWN0aXZlCitwcm9tcHRzIGZvciB1c2VyIGludGVydmVudGlvbgorLlRQCisuQiAtbCwgLS1saXN0CitsaXN0cyBwYXJ0aXRpb24gbGF5b3V0IG9uIGFsbCBibG9jayBkZXZpY2VzCisuVFAKKy5CIC1tLCAtLW1hY2hpbmUKK2Rpc3BsYXlzIG1hY2hpbmUgcGFyc2VhYmxlIG91dHB1dAorLlRQCisuQiAtcywgLS1zY3JpcHQKK25ldmVyIHByb21wdHMgZm9yIHVzZXIgaW50ZXJ2ZW50aW9uCisuVFAKKy5CIC12LCAtLXZlcnNpb24KK2Rpc3BsYXlzIHRoZSB2ZXJzaW9uCisuU0ggQ09NTUFORFMKKy5UUAorLkIgW2RldmljZV0KK1RoZSBibG9jayBkZXZpY2UgdG8gYmUgdXNlZC4gIFdoZW4gbm9uZSBpcyBnaXZlbiwgXGZCcGFydGVkXGZQIHdpbGwgdXNlIHRoZQorZmlyc3QgYmxvY2sgZGV2aWNlIGl0IGZpbmRzLgorLlRQCisuQiBbY29tbWFuZCBbb3B0aW9uc11dCitTcGVjaWZpZXMgdGhlIGNvbW1hbmQgdG8gYmUgZXhlY3V0ZWQuICBJZiBubyBjb21tYW5kIGlzIGdpdmVuLAorLkJSIHBhcnRlZAord2lsbCBwcmVzZW50IGEgY29tbWFuZCBwcm9tcHQuICBQb3NzaWJsZSBjb21tYW5kcyBhcmU6CisuUlMKKy5UUAorLkIgY2hlY2sgXGZJcGFydGl0aW9uXGZQCitEbyBhIHNpbXBsZSBjaGVjayBvbiBcZklwYXJ0aXRpb25cZlAuCisuVFAKKy5CIGNwIFxmSVtzb3VyY2UtZGV2aWNlXVxmUCBcZklzb3VyY2VcZlAgXGZJZGVzdFxmUAorQ29weSB0aGUgXGZJc291cmNlXGZQIHBhcnRpdGlvbidzIGZpbGVzeXN0ZW0gb24gXGZJc291cmNlLWRldmljZVxmUCAob3IgdGhlCitjdXJyZW50IGRldmljZSBpZiBubyBvdGhlciBkZXZpY2Ugd2FzIHNwZWNpZmllZCkgdG8gdGhlIFxmSWRlc3RcZlAgcGFydGl0aW9uCitvbiB0aGUgY3VycmVudCBkZXZpY2UuCisuVFAKKy5CIGhlbHAgXGZJW2NvbW1hbmRdXGZQCitQcmludCBnZW5lcmFsIGhlbHAsIG9yIGhlbHAgb24gXGZJY29tbWFuZFxmUCBpZiBzcGVjaWZpZWQuCisuVFAKKy5CIG1rZnMgXGZJcGFydGl0aW9uXGZQIFxmSWZzLXR5cGVcZlAKK01ha2UgYSBmaWxlc3lzdGVtIFxmSWZzLXR5cGVcZlAgb24gXGZJcGFydGl0aW9uXGZQLiBcZklmcy10eXBlXGZQIGNhbiBiZSBvbmUKK29mICJmYXQxNiIsICJmYXQzMiIsICJleHQyIiwgImxpbnV4LXN3YXAiLCBvciAicmVpc2VyZnMiLgorLlRQCisuQiBta2xhYmVsIFxmSWxhYmVsLXR5cGVcZlAKK0NyZWF0ZSBhIG5ldyBkaXNrbGFiZWwgKHBhcnRpdGlvbiB0YWJsZSkgb2YgXGZJbGFiZWwtdHlwZVxmUC4KK1xmSWxhYmVsLXR5cGVcZlAgc2hvdWxkIGJlIG9uZSBvZiAiYnNkIiwgImR2aCIsICJncHQiLCAibG9vcCIsICJtYWMiLCAibXNkb3MiLAorInBjOTgiLCBvciAic3VuIi4KKy5UUAorLkIgbWtwYXJ0IFxmSXBhcnQtdHlwZVxmUCBcZklbZnMtdHlwZV1cZlAgXGZJc3RhcnRcZlAgXGZJZW5kXGZQCitNYWtlIGEgXGZJcGFydC10eXBlXGZQIHBhcnRpdGlvbiB3aXRoIGZpbGVzeXN0ZW0gXGZJZnMtdHlwZVxmUCAoaWYgc3BlY2lmaWVkKSwKK2JlZ2lubmluZyBhdCBcZklzdGFydFxmUCBhbmQgZW5kaW5nIGF0IFxmSWVuZFxmUCAoYnkgZGVmYXVsdCBpbiBtZWdhYnl0ZXMpLgorXGZJZnMtdHlwZVxmUCBjYW4gYmUgb25lIG9mIAorImZhdDE2IiwgImZhdDMyIiwgImV4dDIiLCAiSEZTIiwgImxpbnV4LXN3YXAiLCAiTlRGUyIsICJyZWlzZXJmcyIsIG9yICJ1ZnMiLgorXGZJcGFydC10eXBlXGZQIHNob3VsZCBiZSBvbmUgb2YgInByaW1hcnkiLCAibG9naWNhbCIsIG9yICJleHRlbmRlZCIuCisuVFAKKy5CIG1rcGFydGZzIFxmSXBhcnQtdHlwZVxmUCBcZklmcy10eXBlXGZQIFxmSXN0YXJ0XGZQIFxmSWVuZFxmUAorTWFrZSBhIFxmSXBhcnQtdHlwZVxmUCBwYXJ0aXRpb24gd2l0aCBmaWxlc3lzdGVtIFxmSWZzLXR5cGVcZlAgYmVnaW5uaW5nIGF0CitcZklzdGFydFxmUCBhbmQgZW5kaW5nIGF0IFxmSWVuZFxmUCAoYnkgZGVmYXVsdCBpbiBtZWdhYnl0ZXMpLgorLlRQCisuQiBtb3ZlIFxmSXBhcnRpdGlvblxmUCBcZklzdGFydFxmUCBcZkllbmRcZlAKK01vdmUgXGZJcGFydGl0aW9uXGZQIHNvIHRoYXQgaXQgYmVnaW5zIGF0IFxmSXN0YXJ0XGZQIGFuZCBlbmRzIGF0IFxmSWVuZFxmUC4KK05vdGU6IFxmQm1vdmVcZlAgbmV2ZXIgY2hhbmdlcyB0aGUgbWlub3IgbnVtYmVyLgorLlRQCisuQiBuYW1lIFxmSXBhcnRpdGlvblxmUCBcZkluYW1lXGZQCitTZXQgdGhlIG5hbWUgb2YgXGZJcGFydGl0aW9uXGZQIHRvIFxmSW5hbWVcZlAuIFRoaXMgb3B0aW9uIHdvcmtzIG9ubHkgb24gTWFjLAorUEM5OCwgYW5kIEdQVCBkaXNrbGFiZWxzLiBUaGUgbmFtZSBjYW4gYmUgcGxhY2VkIGluIHF1b3RlcywgaWYgbmVjZXNzYXJ5LgorLlRQCisuQiBwcmludAorRGlzcGxheSB0aGUgcGFydGl0aW9uIHRhYmxlLgorLlRQCisuQiBxdWl0CitFeGl0IGZyb20gXGZCcGFydGVkXGZQLgorLlRQCisuQiByZXNjdWUgXGZJc3RhcnRcZlAgXGZJZW5kXGZQCitSZXNjdWUgYSBsb3N0IHBhcnRpdGlvbiB0aGF0IHdhcyBsb2NhdGVkIHNvbWV3aGVyZSBiZXR3ZWVuIFxmSXN0YXJ0XGZQIGFuZAorXGZJZW5kXGZQLiAgSWYgYSBwYXJ0aXRpb24gaXMgZm91bmQsIFxmQnBhcnRlZFxmUCB3aWxsIGFzayBpZiB5b3Ugd2FudCB0bworY3JlYXRlIGFuIGVudHJ5IGZvciBpdCBpbiB0aGUgcGFydGl0aW9uIHRhYmxlLgorLlRQCisuQiByZXNpemUgXGZJcGFydGl0aW9uXGZQIFxmSXN0YXJ0XGZQIFxmSWVuZFxmUAorUmVzaXplIHRoZSBmaWxlc3lzdGVtIG9uIFxmSXBhcnRpdGlvblxmUCBzbyB0aGF0IGl0IGJlZ2lucyBhdCBcZklzdGFydFxmUCBhbmQKK2VuZHMgYXQgXGZJZW5kXGZQIChieSBkZWZhdWx0IGluIG1lZ2FieXRlcykuCisuVFAKKy5CIHJtIFxmSXBhcnRpdGlvblxmUAorRGVsZXRlIFxmSXBhcnRpdGlvblxmUC4KKy5UUAorLkIgc2VsZWN0IFxmSWRldmljZVxmUAorQ2hvb3NlIFxmSWRldmljZVxmUCBhcyB0aGUgY3VycmVudCBkZXZpY2UgdG8gZWRpdC4gXGZJZGV2aWNlXGZQIHNob3VsZCB1c3VhbGx5CitiZSBhIExpbnV4IGhhcmQgZGlzayBkZXZpY2UsIGJ1dCBpdCBjYW4gYmUgYSBwYXJ0aXRpb24sIHNvZnR3YXJlIHJhaWQgZGV2aWNlLAorb3IgYW4gTFZNIGxvZ2ljYWwgdm9sdW1lIGlmIG5lY2Vzc2FyeS4KKy5UUAorLkIgc2V0IFxmSXBhcnRpdGlvblxmUCBcZklmbGFnXGZQIFxmSXN0YXRlXGZQCitDaGFuZ2UgdGhlIHN0YXRlIG9mIHRoZSBcZklmbGFnXGZQIG9uIFxmSXBhcnRpdGlvblxmUCB0byBcZklzdGF0ZVxmUC4KK1N1cHBvcnRlZCBmbGFncyBhcmU6ICJib290IiwgInJvb3QiLCAic3dhcCIsICJoaWRkZW4iLCAicmFpZCIsICJsdm0iLCAibGJhIiwKK2FuZCAicGFsbyIuCitcZklzdGF0ZVxmUCBzaG91bGQgYmUgZWl0aGVyICJvbiIgb3IgIm9mZiIuCisuVFAKKy5CIHVuaXQgXGZJdW5pdFxmUAorU2V0IFxmSXVuaXRcZlAgYXMgdGhlIHVuaXQgdG8gdXNlIHdoZW4gZGlzcGxheWluZyBsb2NhdGlvbnMgYW5kIHNpemVzLAorYW5kIGZvciBpbnRlcnByZXRpbmcgdGhvc2UgZ2l2ZW4gYnkgdGhlIHVzZXIgd2hlbiBub3Qgc3VmZml4ZWQgd2l0aCBhbgorZXhwbGljaXQgdW5pdC4gIFxmSXVuaXRcZlAgY2FuIGJlIG9uZSBvZiAicyIgKHNlY3RvcnMpLCAiQiIgKGJ5dGVzKSwgImtCIiwKKyJNQiIsICJHQiIsICJUQiIsICIlIiAocGVyY2VudGFnZSBvZiBkZXZpY2Ugc2l6ZSksICJjeWwiIChjeWxpbmRlcnMpLAorImNocyIgKGN5bGluZGVycywgaGVhZHMsIHNlY3RvcnMpLCBvciAiY29tcGFjdCIgKG1lZ2FieXRlcyBmb3IgaW5wdXQsCithbmQgYSBodW1hbi1mcmllbmRseSBmb3JtIGZvciBvdXRwdXQpLgorLlRQCisuQiB2ZXJzaW9uCitEaXNwbGF5IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGEgY29weXJpZ2h0IG1lc3NhZ2UuCisuUkUKKy5TSCBSRVBPUlRJTkcgQlVHUworUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1wYXJ0ZWRAZ251Lm9yZz4KKy5TSCBTRUUgQUxTTworLkJSIGZkaXNrICg4KSwKKy5CUiBta2ZzICg4KSwKK1RoZSBcZklwYXJ0ZWRcZlAgcHJvZ3JhbSBpcyBmdWxseSBkb2N1bWVudGVkIGluIHRoZQorLkJSIGluZm8oMSkgCitmb3JtYXQKKy5JUiAiR05VIHBhcnRpdGlvbmluZyBzb2Z0d2FyZSIKK21hbnVhbC4KKy5TSCBBVVRIT1IKK1RoaXMgbWFudWFsIHBhZ2Ugd2FzIHdyaXR0ZW4gYnkgVGltc2hlbCBLbm9sbCA8dGltc2hlbEBkZWJpYW4ub3JnPiwKK2ZvciB0aGUgRGViaWFuIEdOVS9MaW51eCBzeXN0ZW0gKGJ1dCBtYXkgYmUgdXNlZCBieSBvdGhlcnMpLgpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2RvYy9DL3BhcnRwcm9iZS44IGIvcGFydGVkLTEuOC43L2RvYy9DL3BhcnRwcm9iZS44Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczODVmZWIKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvZG9jL0MvcGFydHByb2JlLjgKQEAgLTAsMCArMSw1NCBAQAorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIZXksIEVNQUNTOiAtKi0gbnJvZmYgLSotCisuXCIgRmlyc3QgcGFyYW1ldGVyLCBOQU1FLCBzaG91bGQgYmUgYWxsIGNhcHMKKy5cIiBTZWNvbmQgcGFyYW1ldGVyLCBTRUNUSU9OLCBzaG91bGQgYmUgMS04LCBtYXliZSB3LyBzdWJzZWN0aW9uCisuXCIgb3RoZXIgcGFyYW1ldGVycyBhcmUgYWxsb3dlZDogc2VlIG1hbig3KSwgbWFuKDEpCisuVEggUEFSVFBST0JFIDggIk1hcmNoIDE4LCAyMDAyIiBwYXJ0ZWQgIkdOVSBQYXJ0ZWQgTWFudWFsIgorLlwiIFBsZWFzZSBhZGp1c3QgdGhpcyBkYXRlIHdoZW5ldmVyIHJldmlzaW5nIHRoZSBtYW5wYWdlLgorLlwiCisuXCIgU29tZSByb2ZmIG1hY3JvcywgZm9yIHJlZmVyZW5jZToKKy5cIiAubmggICAgICAgIGRpc2FibGUgaHlwaGVuYXRpb24KKy5cIiAuaHkgICAgICAgIGVuYWJsZSBoeXBoZW5hdGlvbgorLlwiIC5hZCBsICAgICAgbGVmdCBqdXN0aWZ5CisuXCIgLmFkIGIgICAgICBqdXN0aWZ5IHRvIGJvdGggbGVmdCBhbmQgcmlnaHQgbWFyZ2lucworLlwiIC5uZiAgICAgICAgZGlzYWJsZSBmaWxsaW5nCisuXCIgLmZpICAgICAgICBlbmFibGUgZmlsbGluZworLlwiIC5iciAgICAgICAgaW5zZXJ0IGxpbmUgYnJlYWsKKy5cIiAuc3AgPG4+ICAgIGluc2VydCBuKzEgZW1wdHkgbGluZXMKKy5cIiBmb3IgbWFucGFnZS1zcGVjaWZpYyBtYWNyb3MsIHNlZSBtYW4oNykKKy5TSCBOQU1FCitwYXJ0cHJvYmUgXC0gaW5mb3JtIHRoZSBPUyBvZiBwYXJ0aXRpb24gdGFibGUgY2hhbmdlcworLlNIIFNZTk9QU0lTCisuQiBwYXJ0cHJvYmUKKy5SSSBbIC1kIF0KKy5SSSBbIC1zIF0KKy5SSSBbIGRldmljZXMuLi4gXQorLlNIIERFU0NSSVBUSU9OCitUaGlzIG1hbnVhbCBwYWdlIGRvY3VtZW50cyBicmllZmx5IHRoZQorLkIgcGFydHByb2JlCitjb21tYW5kLgorLlBQCisuXCIgVGVYIHVzZXJzIG1heSBiZSBtb3JlIGNvbWZvcnRhYmxlIHdpdGggdGhlIFxmQjx3aGF0ZXZlcj5cZlAgYW5kCisuXCIgXGZJPHdoYXRldmVyPlxmUCBlc2NhcGUgc2VxdWVuY2VzIHRvIGludm9kZSBib2xkIGZhY2UgYW5kIGl0YWxpY3MsIAorLlwiIHJlc3BlY3RpdmVseS4KK1xmQnBhcnRwcm9iZVxmUCBpcyBhIHByb2dyYW0gdGhhdCBpbmZvcm1zIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGtlcm5lbCBvZgorcGFydGl0aW9uIHRhYmxlIGNoYW5nZXMsIGJ5IHJlcXVlc3RpbmcgdGhhdCB0aGUgb3BlcmF0aW5nIHN5c3RlbSByZS1yZWFkCit0aGUgcGFydGl0aW9uIHRhYmxlLgorLlNIIE9QVElPTlMKK1RoaXMgcHJvZ3JhbSB1c2VzIHNob3J0IFVOSVggc3R5bGUgb3B0aW9ucy4KKy5UUAorLkIgXC1kCitEb24ndCB1cGRhdGUgdGhlIGtlcm5lbC4KKy5UUAorLkIgXC1zCitTaG93IGEgc3VtbWFyeSBvZiBkZXZpY2VzIGFuZCB0aGVpciBwYXJ0aXRpb25zLgorLlRQCisuQiBcLWgKK1Nob3cgc3VtbWFyeSBvZiBvcHRpb25zLgorLlRQCisuQiBcLXYKK1Nob3cgdmVyc2lvbiBvZiBwcm9ncmFtLgorLlNIIFNFRSBBTFNPCisuQlIgcGFydGVkICg4KS4KKy5TSCBBVVRIT1IKK1RoaXMgbWFudWFsIHBhZ2Ugd2FzIHdyaXR0ZW4gYnkgVGltc2hlbCBLbm9sbCA8dGltc2hlbEBkZWJpYW4ub3JnPiwKK2ZvciB0aGUgRGViaWFuIEdOVS9MaW51eCBzeXN0ZW0gKGJ1dCBtYXkgYmUgdXNlZCBieSBvdGhlcnMpLgpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2RvYy9GQVQgYi9wYXJ0ZWQtMS44LjcvZG9jL0ZBVApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzUyY2E1Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2RvYy9GQVQKQEAgLTAsMCArMSw3NjEgQEAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJR05VIFBhcnRlZCBGQVQgZmlsZSBzeXN0ZW0gZG9jdW1lbnRhdGlvbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgICBieSBBbmRyZXcgQ2xhdXNlbiA8Y2xhdXNlbkBnbnUub3JnPgorCisgICAgICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgICAgIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAorICAgICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4xCisgICAgICBvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAgICAgIHdpdGggdGhlIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCB0aGUgbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZAorICAgICAgd2l0aCBubyBCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorICAgICAgZmlsZSwgQ09QWUlORy5ET0MuCisKKworQ09OVEVOVFMKKy0tLS0tLS0tCisKKwkJUEFSVCBJIC0gVEhFIEZBVCBGSUxFIFNZU1RFTQorCisxCUludHJvZHVjdGlvbgorCisyCU92ZXJ2aWV3CisKKzMJVGhlIEJvb3QgU2VjdG9yCiszLjEJRGF0YSBMYXlvdXQKKzMuMglEZXNjcmlwdGlvbnMgb2YgRmllbGRzCiszLjMJQ2FsY3VsYXRpbmcgdGhlIGlnbm9yZWQgZmllbGRzCiszLjQJRE9TL1dpbmRvd3MgYm9vdHN0cmFwIHByb2Nlc3MKKworNAlUaGUgSW5mbyBTZWN0b3IKKzQuMQlEYXRhIExheW91dAorNC4yCURlc2NyaXB0aW9ucyBvZiBGaWVsZHMKKworNQlGaWxlIEFsbG9jYXRpb24gVGFibGVzCisKKzYJRGlyZWN0b3J5IHRyZWUKKzYuMQlEaXJlY3RvcnkgZW50cmllcworCisJCVBBUlQgSUkgLSBHTlUgUEFSVEVEJ1MgRkFUIElNUExFTUVOVEFUSU9OCisKKzcJUmVzaXppbmcgImlzc3VlcyIKKworOAlPdmVydmlldyBvZiBHTlUgUGFydGVkJ3MgU3RyYXRlZ3kKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQkJUEFSVCBJICAtICBUSEUgRkFUIEZJTEUgU1lTVEVNCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzEJSU5UUk9EVUNUSU9OCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBGQVQgZmlsZXN5c3RlbSwgYW5kIEdOVSBQYXJ0ZWQncyBzdXBwb3J0IGZvciBpdC4KKworVW5mb3J0dW5hdGVseSwgdGhlcmUgYXJlIG5vIHBhcnRpY3VsYXJseSBnb29kIHNvdXJjZXMgb2YgaW5mb3JtYXRpb24gb24gdGhlIEZBVAorZmlsZXN5c3RlbS4gIFRoZSBpbmZvcm1hdGlvbiBoZXJlIHdhcyBkZWR1Y2VkIGZyb20gdGhlIHNvdXJjZSBjb2RlIG9mIGFib3V0IDEwCitkaWZmZXJlbnQgcHJvZ3JhbXMsIGRvY3VtZW50YXRpb24gZnJvbSBhYm91dCAyMCBkaWZmZXJlbnQgc291cmNlcyBhbmQgdGVzdGluZy4KK1RoZXJlIGFyZSBtYW55IGNhc2VzIHdoZXJlIGRvY3VtZW50YXRpb24gZm9yIEZBVCBmcm9tIHZhcmlvdXMgc291cmNlcworKGluY2x1ZGluZyBNaWNyb3NvZnQpIGFyZSBtaXNsZWFkaW5nLCBvciBqdXN0IHBsYWluIHdyb25nLiAgRm9yIHVzLAorZG9jdW1lbnRhdGlvbiBpcyBjb3JyZWN0IGlmIGl0IG1hdGNoZXMgdGhlIGJlaGF2aW91ciBvZiBNaWNyb3NvZnQncworaW1wbGVtZW50YXRpb24uCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMglPVkVSVklFVworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGQVQgaXMgYSBmaWxlc3lzdGVtIHRoYXQgaXMgbWFpbmx5IHVzZWQgYnkgTWljcm9zb2Z0IERPUywgV2luZG93cyA5NSwKK1dpbmRvd3MgOTggYW5kIFdpbmRvd3MgMjAwMC4gIEZBVCBhbHNvIHN0YW5kcyBmb3IgRmlsZSBBbGxvY2F0aW9uIFRhYmxlIC0gYQorcGFydCBvZiB0aGUgRkFUIGZpbGVzeXN0ZW0uCisKK0ZBVCBjb21lcyBpbiB0aHJlZSBmbGF2b3JzOiBGQVQxMiwgRkFUMTYgYW5kIEZBVDMyLgorRkFUMTIgaXMgdXNlZCBvbiBmbG9wcHkgZGlza3MsIGFuZCBSRUFMTFkgb2xkIGhhcmQgZHJpdmVzIDwzMk1iLiAgRkFUMTYgaXMKK3R5cGljYWxseSB1c2VkIG9uIHNtYWxsIGhhcmQgZHJpdmVzIDw1MDBNYiwgYW5kIGlzIHZlcnkgaW5lZmZpY2llbnQgZm9yIGxhcmdlCitoYXJkIGRyaXZlcy4gIEZBVDMyIGlzIHVzZWQgb24gaGFyZCBkcml2ZXMgPjUwME1iIHVuZGVyIFdpbmRvd3MgOTUgT1NSMiBhbmQKK2xhdGVyIGFuZCBXaW5kb3dzIDIwMDAuICBUaGVzZSB0aHJlZSBmbGF2b3JzIGhhdmUgaW1wb3J0YW50IGRpZmZlcmVuY2VzIChub3QKK0pVU1QgYW4gaW5jcmVhc2UgaW4gdGhlIG1heGltdW0gcG9zc2libGUgbnVtYmVyIG9mIGNsdXN0ZXJzKS4gIE9uIEZBVDEyIGFuZAorRkFUMTYgY2x1c3RlciBzaXplIGRpcmVjdGx5IHJlbGF0ZXMgdG8gdGhlIGZpbGVzeXN0ZW0gc2l6ZTogdGhlIG51bWJlciBvZgorY2x1c3RlcnMgaXMgYWx3YXlzIGJldHdlZW4gMjA0MSBhbmQgNDA4MCByZXNwLiAzMjc2MSBhbmQgNjU1MjAuCisKK1RoZSBGQVQgZmlsZXN5c3RlbSBoYXMgdGhlc2UgcGFydHMgKG9uIGRpc2ssIGluIHRoaXMgb3JkZXIpOgorICAqIGEgYm9vdHNlY3Rvci4gIFRoaXMgY29udGFpbnMgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZmlsZXN5c3RlbQorLSB3aGV0aGVyIGl0J3MgRkFUMTIsIEZBVDE2IG9yIEZBVDMyLCBob3cgYmlnIGl0IGlzLCBldGMuCisKKyAgKiBhbiBpbmZvcm1hdGlvbiBzZWN0b3IgKEZBVDMyIG9ubHkpLiAgVGhpcyBjb250YWlucyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCit0aGF0IGNvdWxkbid0IGZpdCBpbiB0aGUgYm9vdCBzZWN0b3IuCisKKyAgKiBmaWxlIGFsbG9jYXRpb24gdGFibGVzIChGQVRzKS4gIFRoZXJlIGFyZSB1c3VhbGx5IHR3byBpZGVudGljYWwgY29waWVzLgorVGhpcyBpcyB1c2VkIHRvIHN0b3JlIHRoZSBzZXF1ZW5jZSBvZiBjbHVzdGVycyB0aGF0IG1ha2Ugb2YgZmlsZXMuICBFc3NlbnRpYWxseSwKK2lmIHlvdSB3YW50IHRvIGtub3cgdGhlIG51bWJlciBvZiB0aGUgY2x1c3RlciB0aGF0IGNvbWVzIGFmdGVyIGNsdXN0ZXIgWAoraW4gYSBmaWxlLCB5b3UgbG9vayB1cCB0aGUgbnVtYmVyIGZvciBYLiAgSWYgWCBpcyBhIG1hZ2ljIG51bWJlciwgaXQgbWVhbnMKK2l0J3MgdGhlIGVuZCBvZiB0aGUgZmlsZS4KKworICAqIGNsdXN0ZXJzLiAgVGhlIGRhdGEgaW5zaWRlIGZpbGVzIGFyZSBzdG9yZWQgaW4gY2x1c3RlcnMuICBNb3N0IGRpcmVjdG9yeQoraW5mb3JtYXRpb24gaXMgc3RvcmVkIGluIGNsdXN0ZXJzIChleGNlcHQgdGhlIHJvb3QgZGlyZWN0b3J5IGluIEZBVDEyIGFuZAorRkFUMTYpLiAgIENsdXN0ZXJzIG1heSBiZSAxLCAyLCA0LCA4LCBldGMuIHNlY3RvcnMuICBDbHVzdGVycyBhcmUgbnVtYmVyZWQsCitjb3VudGluZyBmcm9tIDIuCisKKyAgKiBkaXJlY3RvcnkgdHJlZS4gIFRoZSBGQVQgZmlsZXN5c3RlbSBoYXMgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIChubyBuYW1lZAorcGlwZXMsIGxpbmtzLCBvciBhbnl0aGluZyBmYW5jeSBsaWtlIHRoYXQpLCB0aGF0IGFyZSBzdG9yZWQgaW4gY2x1c3RlcnMuICBUaGUKK3Jvb3QgZGlyZWN0b3J5IG9uIEZBVDEyIGFuZCBGQVQxNiBpcyBzdG9yZWQgc2VwYXJhdGVseS4gIEluIEZBVDMyLCB0aGUgcm9vdAorZGlyZWN0b3J5IGlzIHN0b3JlZCBpbnNpZGUgYSBub3JtYWwgY2x1c3RlciwganVzdCBsaWtlIGV2ZXJ5dGhpbmcgZWxzZS4KKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiszCVRIRSBCT09UIFNFQ1RPUgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgYm9vdCBzZWN0b3IgY29udGFpbnMgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZmlsZXN5c3RlbQorLSB3aGV0aGVyIGl0J3MgRkFUMTIsIEZBVDE2IG9yIEZBVDMyLCBob3cgYmlnIGl0IGlzLCBldGMuICBJdCBhbHNvIGNvbnRhaW5zCit0aGUgYm9vdCBsb2FkZXIgZm9yIHRoZSBvcGVyYXRpbmcgc3lzdGVtLCBpZiB0aGVyZSBpcyBhbiBvcGVyYXRpbmcgc3lzdGVtCitvbiB0aGUgZmlsZSBzeXN0ZW0uICBJdCBpcyBhbHdheXMgdGhlIGZpcnN0IHRoaW5nIHRvIGFwcGVhciBpbiB0aGUgZmlsZXN5c3RlbQorLSBpLmUuIGl0J3MgZm91bmQgYXQgc2VjdG9yIDAuCisKK0Egd29yZCBvZiB3YXJuaW5nOiB3aGlsZSB0aGUgdmFsdWVzIGluc2lkZSB0aGUgYm9vdCBzZWN0b3Igd2lsbCBhbHdheXMgYmUKK2NvbnNpc3RlbnQgd2l0aCB0aGUgZmlsZSBzeXN0ZW0sIG1hbnkgb2YgdGhlc2UgdmFsdWVzIGFyZSBub3QgcmVhZCBieQorTWljcm9zb2Z0J3MgaW1wbGVtZW50YXRpb24gLSB0aGV5IGFyZSBjYWxjdWxhdGVkIGluZGVwZW5kZW50bHkuCisKKworMy4xCVRoZSBEYXRhIExheW91dAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUYWtlbiBmcm9tIGxpYnBhcnRlZC9mc19mYXQvYm9vdHNlY3Rvci5oOgorCitzdHJ1Y3QgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIF9GYXRCb290U2VjdG9yIHsKKyAgICAgICAgX191OCAgICBib290X2p1bXBbM107ICAgLyogMDA6IEJvb3Qgc3RyYXAgc2hvcnQgb3IgbmVhciBqdW1wICovCisgICAgICAgIF9fdTggICAgc3lzdGVtX2lkWzhdOyAgIC8qIDAzOiBzeXN0ZW0gbmFtZSAqLworICAgICAgICBfX3UxNiAgIHNlY3Rvcl9zaXplOyAgICAvKiAwYjogYnl0ZXMgcGVyIGxvZ2ljYWwgc2VjdG9yICovCisgICAgICAgIF9fdTggICAgY2x1c3Rlcl9zaXplOyAgIC8qIDBkOiBzZWN0b3JzL2NsdXN0ZXIgKi8KKyAgICAgICAgX191MTYgICByZXNlcnZlZDsgICAgICAgLyogMGU6IHJlc2VydmVkIHNlY3RvcnMgKi8KKyAgICAgICAgX191OCAgICBmYXRzOyAgICAgICAgICAgLyogMTA6IG51bWJlciBvZiBGQVRzICovCisgICAgICAgIF9fdTE2ICAgZGlyX2VudHJpZXM7ICAgIC8qIDExOiBudW1iZXIgb2Ygcm9vdCBkaXJlY3RvcnkgZW50cmllcyAqLworICAgICAgICBfX3UxNiAgIHNlY3RvcnM7ICAgICAgICAvKiAxMzogaWYgMCwgc2VjdG9yX2NvdW50IHN1cGVyc2VkZXMgKi8KKyAgICAgICAgX191OCAgICBtZWRpYTsgICAgICAgICAgLyogMTU6IG1lZGlhIGNvZGUgKi8KKyAgICAgICAgX191MTYgICBmYXRfbGVuZ3RoOyAgICAgLyogMTY6IHNlY3RvcnMvRkFUIGZvciBGQVQxMi8xNiAqLworICAgICAgICBfX3UxNiAgIHNlY3NfdHJhY2s7ICAgICAvKiAxODogc2VjdG9ycyBwZXIgdHJhY2sgKi8KKyAgICAgICAgX191MTYgICBoZWFkczsgICAgICAgICAgLyogMWE6IG51bWJlciBvZiBoZWFkcyAqLworICAgICAgICBfX3UzMiAgIGhpZGRlbjsgICAgICAgICAvKiAxYzogaGlkZGVuIHNlY3RvcnMgKHBhcnRpdGlvbiBzdGFydCkgKi8KKyAgICAgICAgX191MzIgICBzZWN0b3JfY291bnQ7ICAgLyogMjA6IG5vLiBvZiBzZWN0b3JzIChpZiBzZWN0b3JzID09IDApICovCisKKyAgICAgICAgdW5pb24gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHsKKyAgICAgICAgICAgICAgICAvKiBGQVQxNiBmaWVsZHMgKi8KKyAgICAgICAgICAgICAgICBzdHJ1Y3QgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIF9fdTggICAgZHJpdmVfbnVtOyAgICAgIC8qIDI0OiAqLworICAgICAgICAgICAgICAgICAgICAgICAgX191OCAgICBlbXB0eV8xOyAgICAgICAgLyogMjU6ICovCisgICAgICAgICAgICAgICAgICAgICAgICBfX3U4ICAgIGV4dF9zaWduYXR1cmU7ICAvKiAyNjogYWx3YXlzIDB4MjkgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIF9fdTMyICAgc2VyaWFsX251bWJlcjsgIC8qIDI3OiAqLworICAgICAgICAgICAgICAgICAgICAgICAgX191OCAgICB2b2x1bWVfbmFtZSBbMTFdOyAgICAgICAvKiAyYjogKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIF9fdTggICAgZmF0X25hbWUgWzhdOyAgIC8qIDM3OiAqLworICAgICAgICAgICAgICAgICAgICAgICAgX191OCAgICBib290X2NvZGVbNDQ4XTsgLyogM2Y6IEJvb3QgY29kZSAob3IgbWVzc2FnZSkgKi8KKyAgICAgICAgICAgICAgICB9IGZhdDE2OworICAgICAgICAgICAgICAgIC8qIEZBVDMyIGZpZWxkcyAqLworICAgICAgICAgICAgICAgIHN0cnVjdCBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgX191MzIgICBmYXRfbGVuZ3RoOyAgICAgLyogMjQ6IHNpemUgb2YgRkFUIGluIHNlY3RvcnMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIF9fdTE2ICAgZmxhZ3M7ICAgICAgICAgIC8qIDI4OiBiaXQ4OiBmYXQgbWlycm9yaW5nLCBsb3c0OiBhY3RpdmUgZmF0ICovCisgICAgICAgICAgICAgICAgICAgICAgICBfX3UxNiAgIHZlcnNpb247ICAgICAgICAvKiAyYTogbWlub3IgKiAyNTYgKyBtYWpvciAqLworICAgICAgICAgICAgICAgICAgICAgICAgX191MzIgICByb290X2Rpcl9jbHVzdGVyOyAgICAgICAvKiAyYzogKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIF9fdTE2ICAgaW5mb19zZWN0b3I7ICAgIC8qIDMwOiAqLworICAgICAgICAgICAgICAgICAgICAgICAgX191MTYgICBiYWNrdXBfc2VjdG9yOyAgLyogMzI6ICovCisgICAgICAgICAgICAgICAgICAgICAgICBfX3U4ICAgIGVtcHR5XzEgWzEyXTsgICAvKiAzNDogKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIF9fdTE2ICAgZHJpdmVfbnVtOyAgICAgIC8qIDQwOiAqLworICAgICAgICAgICAgICAgICAgICAgICAgX191OCAgICBleHRfc2lnbmF0dXJlOyAgLyogNDI6IGFsd2F5cyAweDI5ICovCisgICAgICAgICAgICAgICAgICAgICAgICBfX3UzMiAgIHNlcmlhbF9udW1iZXI7ICAvKiA0MzogKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIF9fdTggICAgdm9sdW1lX25hbWUgWzExXTsgICAgICAgLyogNDc6ICovCisgICAgICAgICAgICAgICAgICAgICAgICBfX3U4ICAgIGZhdF9uYW1lIFs4XTsgICAvKiA1MjogKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIF9fdTggICAgYm9vdF9jb2RlWzQyMF07IC8qIDVhOiBCb290IGNvZGUgKG9yIG1lc3NhZ2UpICovCisgICAgICAgICAgICAgICAgfSBmYXQzMjsKKyAgICAgICAgfSB1OworCisgICAgICAgIF9fdTE2ICAgYm9vdF9zaWduOyAgICAgIC8qIDFmZTogYWx3YXlzIDB4QUE1NSAqLworfTsKKworCiszLjIJRGVzY3JpcHRpb25zIG9mIEZpZWxkcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiszLjIuMQlGaWVsZHMgY29tbW9uIHRvIEZBVDEyLCBGQVQxNiBhbmQgRkFUMzIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIF9fdTggICAgYm9vdF9qdW1wWzNdOyAgIC8qIDAwOiBCb290IHN0cmFwIHNob3J0IG9yIG5lYXIganVtcCAqLworVGhpcyBjb250YWlucyB0aGUgSW50ZWwgeDg2IGluc3RydWN0aW9uIHRvICJqdW1wIiB0byBmdXJ0aGVyIGRvd24gaW4gdGhlCitib290IHNlY3Rvci4gIFRoaXMgaXMgbmVjZXNzYXJ5LCBiZWNhdXNlIG9uIFBDIHN5c3RlbXMsIHRoZSBmaXJzdCBzZWN0b3Igb2YKK3RoZSBkaXNrIGlzIGxvYWRlZCBhbmQgZXhlY3V0ZWQuICBPbiBoYXJkIGRpc2tzIG9mIFBDIHN5c3RlbXMsIHRoZSBmaXJzdAorc2VjdG9yIG9mIHRoZSBkaXNrIGlzIGluIGZhY3QgdGhlIE1hc3RlciBCb290IFJlY29yZCAtIHdoaWNoIGNvbnRhaW5zIHRoZQorcGFydGl0aW9uIHRhYmxlLiAgVGhlIG1hc3RlciBib290IHJlY29yZCBsb2FkcyB0aGUgZmlyc3Qgc2VjdG9yIG9mIHRoZSBib290CitwYXJ0aXRpb24sIHNvIHRoZSBlbmQgcmVzdWx0IGlzIHRoZSBzYW1lIGZvciBmbG9wcHkncyBhbmQgaGFyZCBkaXNrcy4KKworCisJX191OCAgICBzeXN0ZW1faWRbOF07ICAgLyogMDM6IHN5c3RlbSBuYW1lICovCitUaGlzIGNvbnRhaW5zIHRoZSBuYW1lIG9mIHRoZSBwcm9ncmFtIG9yIG9wZXJhdGluZ3Mgc3lzdGVtIHRoYXQgY3JlYXRlZCB0aGUKK2ZpbGUgc3lzdGVtLiAgRm9yIEZBVDMyLCBpdCBzZWVtcyB5b3UgbXVzdCBoYXZlICJNU1dJTjQuMSIgaGVyZS4KK0lmIHRoaXMgaXMgIk1TRE1GMy4yIiAoYWZhaWsgb25seSB0aGUgIk1TRE1GIiBpcyBjaGVja2VkIikgdGhlIHBhcnRpdGlvbgorY2FuJ3QgYmUgd3JpdHRlbiB1bmRlciBXaW5kb3dzIDl4LCBXaW5kb3dzIE5UIGFuZCBXaW5kb3dzIDIwMDAuICBUaGlzIGlzCitob3cgTWljcm9zb2Z0IHJlYWxpemVzIHJlYWQtb25seSBpbnN0YWxsYXRpb24gb3IgZGlzdHJpYnV0aW9uIGZsb3BweSBkaXNrcy4KKworCisJX191MTYgICBzZWN0b3Jfc2l6ZTsgICAgLyogMGI6IGJ5dGVzIHBlciBsb2dpY2FsIHNlY3RvciAqLworVGhpcyBpcyBiaXphcnJlLiAgU2VjdG9ycyBhcmUgYWx3YXlzIDUxMiBieXRlcy4gIEhvd2V2ZXIsIGEgImxvZ2ljYWwiIHNlY3RvcgoraXMgYSBoYWNrIHRoYXQgYWxsb3dzIHNlY3RvcnMgdG8gYmUgYmlnZ2VyIChhIG11bHRpcGxlIG9mIDUxMiBieXRlcykuICBUaGlzCitpcyByYXJlbHkgdXNlZCwgYW5kIHVudGVzdGVkIGluIEdOVSBQYXJ0ZWQgYXQgdGhlIG1vbWVudC4gIChTaWRlIG5vdGU6IGlzCitpdCBwb3NzaWJsZSB0byB1c2UgdGhpcyB0byBhdm9pZCByZXF1aXJpbmcgYSBjbHVzdGVyIHJlc2l6ZT8pCisKKworCV9fdTggICAgY2x1c3Rlcl9zaXplOyAgIC8qIDBkOiBzZWN0b3JzL2NsdXN0ZXIgKi8KK1RISVMgSVMgSUdOT1JFRCBCWSBNSUNST1NPRlQnUyBJTVBMRU1FTlRBVElPTiBPRiBGQVQxMiBBTkQgRkFUMTYhICAoU2VlIHNlY3Rpb24KKzMuMykgICBUaGlzIGNvbnRhaW5zIHRoZSBzaXplIG9mIGFsbCBjbHVzdGVycywgZ2l2ZW4gaW4gc2VjdG9ycy4gIFRoaXMgdmFsdWUgaXMKKyJyZWFkLW9ubHkiLgorCisKKwlfX3UxNiAgIHJlc2VydmVkOyAgICAgICAvKiAwZTogcmVzZXJ2ZWQgc2VjdG9ycyAqLworVGhlIG51bWJlciBvZiBzZWN0b3JzIGJlZm9yZSB0aGUgZmlsZSBhbGxvY2F0aW9uIHRhYmxlcyBiZWdpbi4gIGkuZS4gVGhlCitudW1iZXIgb2YgdGhlIGZpcnN0IHNlY3RvciBvZiB0aGUgZmlyc3QgZmlsZSBhbGxvY2F0aW9uIHRhYmxlLgorCisKKwlfX3U4ICAgIGZhdHM7ICAgICAgICAgICAvKiAxMDogbnVtYmVyIG9mIEZBVHMgKi8KK1RoZSBudW1iZXIgb2YgZmlsZSBhbGxvY2F0aW9uIHRhYmxlcyAodXN1YWxseSAyKS4KKworCisJX191MTYgICBkaXJfZW50cmllczsgICAgLyogMTE6IG51bWJlciBvZiByb290IGRpcmVjdG9yeSBlbnRyaWVzICovCitUaGUgc2l6ZSBvZiB0aGUgcm9vdCBkaXJlY3RvcnkgKEZBVDEyIGFuZCBGQVQxNiBvbmx5KSwgaW4gImRpcmVjdG9yeSBlbnRyaWVzIgorKDMyIGJ5dGVzKS4gIFRoZSByb290IGRpcmVjdG9yeSBpcyBpbW1lZGlhdGVseSBhZnRlciB0aGUgRkFUcyAoRkFUMTIgYW5kCitGQVQxNiBvbmx5KS4gIFRoZSBmaXJzdCBjbHVzdGVyIChpLmUuIGNsdXN0ZXIgbnVtYmVyIDIpIHN0YXJ0cyBpbW1lZGlhdGVseQorYWZ0ZXIgdGhlIHJvb3QgZGlyZWN0b3J5IChvciBhZnRlciB0aGUgRkFUcyBmb3IgRkFUMzIpLgorCisKKwlfX3UxNiAgIHNlY3RvcnM7ICAgICAgICAvKiAxMzogaWYgMCwgc2VjdG9yX2NvdW50IHN1cGVyc2VkZXMgKi8KK1RISVMgSVMgSUdOT1JFRCBCWSBNSUNST1NPRlQnUyBJTVBMRU1FTlRBVElPTiEgIFRoZSB0b3RhbCBzaXplIG9mIHRoZSBmaWxlCitzeXN0ZW0uICBJZiB0aGUgZmlsZSBzeXN0ZW0gaXMgYmlnZ2VyIHRoYW4gNjU1MzYgc2VjdG9ycywgdGhpcyBpcyBzZXQgdG8gMCwKK2FuZCBhIDMyIGJpdCBmaWVsZCBpcyB1c2VkIGluc3RlYWQuICBNaWNyb3NvZnQncyBpbXBsZW1lbnRhdGlvbiBnZXRzIHRoaXMKK3ZhbHVlcyBmcm9tIGhhcmR3YXJlIChmb3IgZmxvcHB5IGRpc2tzKSwgb3IgdGhlIHBhcnRpdGlvbiB0YWJsZSAoZm9yIGhhcmQKK2Rpc2tzKSwgcmF0aGVyIHRoYW4gcmVhZGluZyBpdCBvZmYgZGlzay4KKworCisJX191OCAgICBtZWRpYTsgICAgICAgICAgLyogMTU6IG1lZGlhIGNvZGUgKi8KK0ZvciBoYXJkIGRpc2tzLCB0aGlzIHNob3VsZCBhbHdheXMgYmUgMHhmOC4KKworCisJX191MTYgICBmYXRfbGVuZ3RoOyAgICAgLyogMTY6IHNlY3RvcnMvRkFUIGZvciBGQVQxMi8xNiAqLworVEhJUyBJUyBJR05PUkVEIEJZIE1JQ1JPU09GVCdTIElNUExFTUVOVEFUSU9OISAgKFNlZSBzZWN0aW9uIDMuMykgIFRoZSBzaXplIGluCitzZWN0b3JzIG9mIGVhY2ggZmlsZSBhbGxvY2F0aW9uIHRhYmxlIChGQVQxMiBhbmQgRkFUMTYgb25seSkuICBBIDMyLWJpdCBmaWVsZAoraXMgdXNlZCBmb3IgRkFUMzIuICBUaGlzIHZhbHVlIGlzICJyZWFkLW9ubHkiLgorCisKKworCV9fdTE2ICAgc2Vjc190cmFjazsgICAgIC8qIDE4OiBzZWN0b3JzIHBlciB0cmFjayAqLworCV9fdTE2ICAgaGVhZHM7ICAgICAgICAgIC8qIDFhOiBudW1iZXIgb2YgaGVhZHMgKi8KK1RoZXNlIHNob3VsZCBtYXRjaCB0aGUgQklPUyBnZW9tZXRyeS4gIFRoZSBHTlUgUGFydGVkIFJFQURNRSBmaWxlIGV4cGxhaW5zCitCSU9TIGdlb21ldHJ5LgorCisKKwlfX3UzMiAgIGhpZGRlbjsgICAgICAgICAvKiAxYzogaGlkZGVuIHNlY3RvcnMgKHBhcnRpdGlvbiBzdGFydCkgKi8KK09uIGEgaGFyZCBkaXNrLCB0aGlzIHNob3VsZCBiZSB0aGUgbnVtYmVyIG9mIHNlY3RvcnMgZnJvbSB0aGUgc3RhcnQgb2YgdGhlCitoZWFkIChpbiB0ZXJtcyBvZiBCSU9TIGdlb21ldHJ5KSB0byB0aGUgc3RhcnQgb2YgdGhlIHBhcnRpdGlvbi4gIGkuZS4gdGhlCitTIGluIHRoZSBDSFMgcGFydGl0aW9uIHN0YXJ0LgorCisKKwlfX3UzMiAgIHNlY3Rvcl9jb3VudDsgICAvKiAyMDogbm8uIG9mIHNlY3RvcnMgKGlmIHNlY3RvcnMgPT0gMCkgKi8KK1RoZSBzaXplIG9mIHRoZSBmaWxlIHN5c3RlbSBpbiBzZWN0b3JzIChpZiBzZWN0b3JzIGlzIDApLgorCisKKyAgICAgICAgX191MTYgICBib290X3NpZ247ICAgICAgLyogMWZlOiBhbHdheXMgMHhBQTU1ICovCitCb290IHNlY3RvciBzaWduYXR1cmUuICBEb24ndCB1c2UgdGhpcyBleGNsdXNpdmVseSB0byBkZXRlY3QgRkFUIGZpbGUgc3lzdGVtcyEKK0l0J3MgYWxzbyB0aGUgc2lnbmF0dXJlIGZvciBwYXJ0aXRpb24gdGFibGUgc2VjdG9ycyAoYW5kIGl0IGFwcGVhcnMgaW4gdGhlCitzYW1lIHBsYWNlIHRvbyEpICBJZGlvdHMuCisKKzMuMi4yCUZpZWxkcyBpbiBGQVQxMiBhbmQgRkFUMTYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICAgIF9fdTggICAgZHJpdmVfbnVtOyAgICAgIC8qIDI0OiAqLworQWx3YXlzIDB4ODAuCisKKworICAgICAgICBfX3U4ICAgIGV4dF9zaWduYXR1cmU7ICAvKiAyNjogYWx3YXlzIDB4MjkgKi8KK0Fsd2F5cyAweDI5LgorCisKKyAgICAgICAgX191MzIgICBzZXJpYWxfbnVtYmVyOyAgLyogMjc6ICovCitTZXJpYWwgbnVtYmVyOiBVc2VkIHRvIGRldGVjdCBtZWRpYSBjaGFuZ2Ugb24gZmxvcHB5IGRpc2sgYW5kIHJlbW92YWJsZSBkcml2ZXMuCisKKworICAgICAgICBfX3U4ICAgIHZvbHVtZV9uYW1lIFsxMV07ICAgICAgIC8qIDJiOiAqLworVGhlIGRpc2sgbGFiZWwuCisKKworICAgICAgICBfX3U4ICAgIGZhdF9uYW1lIFs4XTsgICAvKiAzNzogKi8KKyJGQVQxMlwwXDBcMCIgb3IgIkZBVDE2XDBcMFwwIi4KKworCiszLjIuMwlGaWVsZHMgaW4gRkFUMzIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgICAgX191MzIgICBmYXRfbGVuZ3RoOyAgICAgLyogMjQ6IHNpemUgb2YgRkFUIGluIHNlY3RvcnMgKi8KK1RoZSBzaXplIGluIHNlY3RvcnMgb2YgZWFjaCBmaWxlIGFsbG9jYXRpb24gdGFibGUuCisKKworICAgICAgICBfX3UxNiAgIGZsYWdzOyAgICAgICAgICAvKiAyODogYml0ODogZmF0IG1pcnJvcmluZywgbG93NDogYWN0aXZlIGZhdCAqLworTm8gaWRlYSB3aGF0IHRoZXNlIGFyZS4KKworCisgICAgICAgIF9fdTE2ICAgdmVyc2lvbjsgICAgICAgIC8qIDJhOiBtaW5vciAqIDI1NiArIG1ham9yICovCitTZWVtcyB0byBiZSAwICg/KQorCisKKyAgICAgICAgX191MzIgICByb290X2Rpcl9jbHVzdGVyOyAgICAgICAvKiAyYzogKi8KK1RoZSBudW1iZXIgb2YgdGhlIGZpcnN0IGNsdXN0ZXIgaW4gdGhlIHJvb3QgZGlyZWN0b3J5LgorCisKKyAgICAgICAgX191MTYgICBpbmZvX3NlY3RvcjsgICAgLyogMzA6ICovCitUaGUgbnVtYmVyIG9mIHRoZSBpbmZvcm1hdGlvbiBzZWN0b3IuCisKKworICAgICAgICBfX3UxNiAgIGJhY2t1cF9zZWN0b3I7ICAvKiAzMjogKi8KK1RoZSBudW1iZXIgb2YgdGhlIGJhY2t1cCBvZiB0aGUgYm9vdCBzZWN0b3IgKGkuZS4gdGhpcyBzZWN0b3IpLgorCisKKyAgICAgICAgX191MTYgICBkcml2ZV9udW07ICAgICAgLyogNDA6ICovCitBbHdheXMgMHg4MC4KKworCisgICAgICAgIF9fdTggICAgZXh0X3NpZ25hdHVyZTsgIC8qIDQyOiBhbHdheXMgMHgyOSAqLworQWx3YXlzIDB4MjkuCisKKworICAgICAgICBfX3UzMiAgIHNlcmlhbF9udW1iZXI7ICAvKiA0MzogKi8KK1NlcmlhbCBudW1iZXIgKGZvciBFY2hlbG9uLCBvciBzb21ldGhpbmcpCisKKworICAgICAgICBfX3U4ICAgIHZvbHVtZV9uYW1lIFsxMV07ICAgICAgIC8qIDQ3OiAqLworVGhlIGRpc2sgbGFiZWwuCisKKworICAgICAgICBfX3U4ICAgIGZhdF9uYW1lIFs4XTsgICAvKiA1MjogKi8KKyJGQVQzMlwwXDBcMCIuCisKKworMy4zCUNhbGN1bGF0aW5nIHRoZSBpZ25vcmVkIGZpZWxkcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlIGNsdXN0ZXJfc2l6ZSBhbmQgZmF0X2xlbmd0aCBmaWVsZHMgYXJlIGlnbm9yZWQgYnkgTWljcm9zb2Z0J3MKK2ltcGxlbWVudGF0aW9uIG9mIEZBVDEyIGFuZCBGQVQxNiwgYnV0IE5PVCBGQVQzMi4gIFRoYXQgaXMsIHRoZXkgYXJlIHdyaXR0ZW4gb3V0Citjb3JyZWN0bHksIGJ1dCBOT1QgUkVBRCBJTi4gIChOb3RlOiBpZiBGQVQzMiBmaWxlIHN5c3RlbSBpcyBjb25maWd1cmVkIHRvCitoYXZlIGxlc3MgdGhhbiA2NTUyMCBjbHVzdGVycywgdGhlbiBXaW5kb3dzIGFzc3VtZXMgaXQncyBGQVQxNikKKworU2luY2UgdGhlc2UgdmFsdWVzIGRvbid0IHVzdWFsbHkgY2hhbmdlIHVubGVzcyB5b3UgcmVzaXplIGEgZmlsZXN5c3RlbSwgdGhpcworY2F1c2VzIG5vIHByb2JsZW1zLiAgSG93ZXZlciwgaWYgeW91IHdhbnQgdG8gcmVzaXplIHRoZSBmaWxlc3lzdGVtLCB5b3UgaGF2ZSB0bworY2FsY3VsYXRlIHRoZXNlIHZhbHVlcyB0byB3aGF0IE1pY3Jvc29mdCBjYWxjdWxhdGVzIHRoZW0gdG8sIGZyb20gdGhlIHNpemUgb2YKK3RoZSBmaWxlc3lzdGVtLiAgSXQgdG9vayBtZSAyIG1vbnRocyB0byBmaWd1cmUgdGhpcyBvdXQgKEkgd2FudCB0byBLSUxMCitzb21lYm9keS4uLikKKworSGVyZSdzIHRoZSBhbGdvcml0aG0gSSBjYW1lIHVwIHdpdGggdGhhdCBzZWVtZWQgdG8gbWF0Y2ggYWxsIG15IHRlc3QgZGF0YToKKyhmcm9tIGxpYnBhcnRlZC9mc19mYXQvY2FsYy5jKQorCitGYXRDbHVzdGVyCitmYXRfbWF4X2NsdXN0ZXJfY291bnQgKEZhdFR5cGUgZmF0X3R5cGUpIHsKKyAgICAgICAgc3dpdGNoIChmYXRfdHlwZSkgeworICAgICAgICAgICAgICAgIGNhc2UgRkFUX1RZUEVfRkFUMTI6IHJldHVybiAweGZmMDsKKyAgICAgICAgICAgICAgICBjYXNlIEZBVF9UWVBFX0ZBVDE2OiByZXR1cm4gMHhmZmYwOworICAgICAgICAgICAgICAgIGNhc2UgRkFUX1RZUEVfRkFUMzI6IHJldHVybiAweDBmZmZmZmYwOworICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworfQorCitGYXRDbHVzdGVyCitmYXRfbWluX2NsdXN0ZXJfY291bnQgKEZhdFR5cGUgZmF0X3R5cGUpIHsKKyAgICAgICAgc3dpdGNoIChmYXRfdHlwZSkgeworICAgICAgICAgICAgICAgIGNhc2UgRkFUX1RZUEVfRkFUMTI6CisgICAgICAgICAgICAgICAgY2FzZSBGQVRfVFlQRV9GQVQxNjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYXRfbWF4X2NsdXN0ZXJfY291bnQgKGZhdF90eXBlKSAvIDI7CisKKyAgICAgICAgICAgICAgICBjYXNlIEZBVF9UWVBFX0ZBVDMyOiByZXR1cm4gMHhmZmYwOworICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitjYWxjX3NpemVzIChQZWRHZW9tZXRyeSogZ2VvbSwgUGVkU2VjdG9yIGFsaWduLCBpbnQgY2x1c3Rlcl9zaXplLAorICAgICAgICAgICAgUGVkU2VjdG9yIHJvb3RfZGlyX3NlY3RvcnMsIEZhdENsdXN0ZXIqIG91dF9jbHVzdGVyX2NvdW50LAorICAgICAgICAgICAgUGVkU2VjdG9yKiBvdXRfZmF0X3NpemUsIEZhdFR5cGUgZmF0X3R5cGUpCit7CisgICAgICAgIFBlZFNlY3RvciAgICAgICBkYXRhX2ZhdF9zaXplOworICAgICAgICBQZWRTZWN0b3IgICAgICAgZmF0X3NlY3RvcnM7CisgICAgICAgIFBlZFNlY3RvciAgICAgICBjbHVzdGVyX3NlY3RvcnM7CisgICAgICAgIEZhdENsdXN0ZXIgICAgICBjbHVzdGVyX2NvdW50OworICAgICAgICBpbnQgICAgICAgICAgICAgaTsKKworICAgICAgICBkYXRhX2ZhdF9zaXplID0gZ2VvbS0+bGVuZ3RoIC0gZmF0X21pbl9yZXNlcnZlZF9zZWN0b3JfY291bnQgKGZhdF90eXBlKQorICAgICAgICAgICAgICAgICAgICAgICAgLSBhbGlnbjsKKyAgICAgICAgaWYgKGZhdF90eXBlID09IEZBVF9UWVBFX0ZBVDE2KQorICAgICAgICAgICAgICAgIGRhdGFfZmF0X3NpemUgLT0gcm9vdF9kaXJfc2VjdG9yczsKKworICAgICAgICBmYXRfc2VjdG9ycyA9IDA7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoZmF0X3R5cGUgPT0gRkFUX1RZUEVfRkFUMzIpCisgICAgICAgICAgICAgICAgICAgICAgICBjbHVzdGVyX3NlY3RvcnMgPSBkYXRhX2ZhdF9zaXplIC0gZmF0X3NlY3RvcnM7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgY2x1c3Rlcl9zZWN0b3JzID0gZGF0YV9mYXRfc2l6ZSAtIDIgKiBmYXRfc2VjdG9yczsKKworICAgICAgICAgICAgICAgIGNsdXN0ZXJfY291bnQgPSBjbHVzdGVyX3NlY3RvcnMgLyAoY2x1c3Rlcl9zaXplIC8gNTEyKTsKKyAgICAgICAgICAgICAgICBmYXRfc2VjdG9ycyA9IGRpdl9yb3VuZF91cCAoY2x1c3Rlcl9jb3VudCArIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJpZXNfcGVyX3NlY3RvciAoZmF0X3R5cGUpKTsKKyAgICAgICAgfQorCisgICAgICAgIGNsdXN0ZXJfc2VjdG9ycyA9IGRhdGFfZmF0X3NpemUgLSAyICogZmF0X3NlY3RvcnM7CisgICAgICAgIGNsdXN0ZXJfY291bnQgPSBjbHVzdGVyX3NlY3RvcnMgLyAoY2x1c3Rlcl9zaXplIC8gNTEyKTsKKworICAgICAgICBpZiAoY2x1c3Rlcl9jb3VudCA+IGZhdF9tYXhfY2x1c3Rlcl9jb3VudCAoZmF0X3R5cGUpCisgICAgICAgICAgICB8fCBjbHVzdGVyX2NvdW50IDwgZmF0X21pbl9jbHVzdGVyX2NvdW50IChmYXRfdHlwZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgKm91dF9jbHVzdGVyX2NvdW50ID0gY2x1c3Rlcl9jb3VudDsKKyAgICAgICAgKm91dF9mYXRfc2l6ZSA9IGZhdF9zZWN0b3JzOworCisgICAgICAgIHJldHVybiAxOworfQorCitGSVhNRTogdGhpcyBpcyB0aGUgInRyaWFsIGFuZCBlcnJvciIgYWxnb3JpdGhtLiAgV2hhdCBoYXBwZW5lZCB0byBteSBzaW1wbGUsCit0ZXN0IG9uZT8KKworSWYgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgYWJvdmUgY29kZSBhcmVuJ3QgdGhhdCBjbGVhciwgaGVyZSBhcmUgc29tZSBvZgordGhlbToKKyAgKiBmb3IgRkFUMTYsIHRoZSBtaW5pbXVtIG51bWJlciBvZiBjbHVzdGVycyBpcyAzMjc2MC4KKyAgKiB0aGUgY2x1c3RlciBzaXplIGlzIGNvbXBsZXRlbHkgZGV0ZXJtaW5lZCBieSB0aGUgc2l6ZSBvZiB0aGUgZmlsZSBzeXN0ZW0sCitmb3IgRkFUMTYuICBUaGF0IG1lYW5zLCBpZiBhIGZpbGUgc3lzdGVtIGlzIHRvIGJlIHJlc2l6ZWQsIGl0IGlzIHF1aXRlCitwb3NzaWJsZSB0aGF0IHRoZSBjbHVzdGVyIHNpemUgbXVzdCBiZSBjaGFuZ2VkIGp1c3QgdG8gYmUgY29tcGF0aWJsZQord2l0aCBNaWNyb3NvZnQncyBpbXBsZW1lbnRhdGlvbiAgKExpbnV4LCBmb3IgZXhhbXBsZSwgZG9lc24ndCBjYWxjdWxhdGUgdGhlCitudW1iZXJzIGluZGVwZW5kZW50bHksIHNvIGl0IHdvdWxkIHdvcmsgZmluZS4gIFNvIGFsd2F5cyB0ZXN0IHlvdXIgY29kZSBvbgorTWljcm9zb2Z0IGFzIHdlbGwgYXMgTGludXgpCisKKworMy40CURPUy9XaW5kb3dzIGJvb3RzdHJhcCBwcm9jZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBbGwgb2YgdGhlIGluZm9ybWF0aW9uIHRoYXQgZm9sbG93cyBpcyBmcm9tIG1lIHJldmVyc2UtZW5naW5lZXJpbmcgZGlmZmVyZW50Cit2ZXJzaW9ucyBvZiBNaWNyb3NvZnQncyBib290IHNlY3RvcnMuICBJdCdzIHByZXR0eSB3ZWlyZCBjb2RlIChhcyB5b3UgY2FuCitpbWFnaW5lLi4uKSwgc28gdGhlcmUgbWlnaHQgYmUgbWlzdGFrZXMgaGVyZS4KKwlUaGVyZSBhcmUgbWFueSBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgdGhlIGJvb3Qgc2VjdG9yOgorKiBXaW5kb3dzIDk4LzIwMDAvTUUgRkFUMTIvRkFUMTYgKHN1cHBvcnRzIENIUyBhbmQgTEJBKQorKiBXaW5kb3dzIDk4LzIwMDAvTUUgRkFUMzIgKHN1cHBvcnRzIENIUyBhbmQgTEJBKQorCisoMSkgVGhlIE1CUiwgTElMTywgb3Igd2hhdGV2ZXIgbG9hZHMgaW4gdGhlIGZpcnN0IHNlY3RvciBvZiB0aGUgRkFUCitwYXJ0aXRpb24gaW50byAwMDAwOjdjMDAsIGFuZCBleGVjdXRlcyBpdC4KKworKDIpIFRoZSBmaXJzdCBzZWN0b3Igb2YgdGhlIEZBVCBwYXJ0aXRpb24gKHRoZSAiYm9vdCBzZWN0b3IiKSBkb2VzOgorICAgIChhKSBsb2FkcyB0aGUgTWFzdGVyIEJvb3QgUmVjb3JkIChzZWN0b3IgMCBvZiB0aGUgZGlzaykgdXNpbmcgdGhlCisgICAgQklPUydzIENIUyBjYWxscywgYW5kIGZpbmRzIHRoZSBib290IHBhcnRpdGlvbi4gIElmIHRoZSBib290IHBhcnRpdGlvbgorICAgIGhhcyB0aGUgTEJBIGZsYWcgbWFya2VkLCBpdCB3cml0ZXMgMHhlIHRvIFticCsyXSAoMDAwMDo3YzAyKS4gIFRoZSAicmVhZAorICAgIHNlY3RvcnMiIGZ1bmN0aW9uIGluIHRoZSBib290IGxvYWRlciBjaGVja3MgZm9yIDB4ZSBoZXJlLCBhbmQgdXNlcyBMQkEgaWYKKyAgICBpdCBmaW5kcyBpdCwgYW5kIENIUyBvdGhlcndpc2UuCisKKyAgICAoYikgSWYgaXQgaXMgdGhlIEZBVDMyIHZlcnNpb24gb2YgdGhlIGJvb3Qgc2VjdG9yLCBpdCBsb2FkcyBzZWN0b3JzIDEKKyAgICB0aHJvdWdoIDMgb2YgdGhlIHBhcnRpdGlvbiAoaXQgZmluZHMgdGhpcyBmcm9tIHRoZSAiaGlkZGVuIiBmaWVsZCBpbiB0aGUKKyAgICBGQVQgYm9vdCBzZWN0b3IsIHRoYXQgd2FzIGxvYWRlZCBieSB0aGUgTUJSL0xJTE8pIGF0IGFkZHJlc3MgMDAwMDo3ZTAwLCBhbmQKKyAgICBjb250aW51ZXMgZXhlY3V0aW5nIGF0IDAwMDA6ODAwMC4gIE5vdGU6IHRoZSBGQVQxNiB2ZXJzaW9uIGRvZXNuJ3QgcmVxdWlyZQorICAgIGFueSBtb3JlIHNlY3RvcnMgdG8gYmUgcmVhZCAodGhleSBjcmFtbWVkIGl0IGFsbCBpbiEpLCBhbmQgaXQgZ29lcworICAgIGRpcmVjdGx5IHRvIHN0ZXAgMy4KKworKDMpIFRoZSBjb2RlIGxvYWRzIElPLlNZUyAoc3RhcnRpbmcgYXQgYWRkcmVzcyAwMDAwOjA3MDApLCBvZmYgdGhlIHNhbWUKK3BhcnRpdGlvbiwgYW5kIGV4ZWN1dGVzIGl0LCBiZWdpbm5pbmcgZXhlY3V0aW9uIGF0IDAwNzA6MDIwMC4gIChOb3RlOgorQWNjb3JkaW5nIHRvIHRoZSB4ODYgcmVhbCBtb2RlIHNlZ21lbnRhdGlvbiBzY2hlbWUsIDAwNzA6MDIwMCByZWZlcnMgdG8gdGhlCitzYW1lIHBoeXNpY2FsIG1lbW9yeSBhcyAwMDAwOjA5MDApCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorNAlUSEUgSU5GTyBTRUNUT1IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGluZm8gc2VjdG9yIGlzIHVzZWQgaW4gRkFUMzIgdG8gc3RvcmUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUKK2ZpbGUgc3lzdGVtLgorCisKKzQuMQlEYXRhIExheW91dAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitzdHJ1Y3QgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIF9GYXRJbmZvU2VjdG9yIHsKKyAgICAgICAgX191MzIgICBzaWduYXR1cmVfMTsgICAgLyogc2hvdWxkIGJlIDB4NDE2MTUyNTIgKi8KKyAgICAgICAgX191OCAgICB1bnVzZWQgWzQ4MF07CisgICAgICAgIF9fdTMyICAgc2lnbmF0dXJlXzI7ICAgIC8qIHNob3VsZCBiZSAweDYxNDE3MjcyICovCisgICAgICAgIF9fdTMyICAgZnJlZV9jbHVzdGVyczsKKyAgICAgICAgX191MzIgICBuZXh0X2NsdXN0ZXI7ICAgLyogbW9zdCByZWNlbnRseSBhbGxvY2F0ZWQgY2x1c3RlciAqLworICAgICAgICBfX3U4ICAgIHVudXNlZDIgWzB4ZV07CisgICAgICAgIF9fdTE2ICAgc2lnbmF0dXJlXzM7ICAgIC8qIHNob3VsZCBiZSAweGFhNTUgKi8KK307CisKKworNC4yCURlc2NyaXB0aW9ucyBvZiBGaWVsZHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgICBfX3UzMiAgIHNpZ25hdHVyZV8xOyAgICAvKiBzaG91bGQgYmUgMHg0MTYxNTI1MiAqLworQWx3YXlzIDB4NDE2MTUyNTIgICgiQWFSUiIpCisKKworICAgICAgICBfX3UzMiAgIHNpZ25hdHVyZV8yOyAgICAvKiBzaG91bGQgYmUgMHg2MTQxNzI3MiAqLworQWx3YXlzIDB4NjE0MTcyNzIgICgiYUFyciIpCisKKworICAgICAgICBfX3UzMiAgIGZyZWVfY2x1c3RlcnM7CitUaGUgbnVtYmVyIG9mIGZyZWUgY2x1c3RlcnMuICBUaGlzIGNvdWxkIGJlIGNhbGN1bGF0ZWQgYnkgZ29pbmcgdGhyb3VnaCB0aGUKK0ZBVHMsIGJ1dCB0aGlzIGlzIHN0b3JlZCBvbiBzaHV0ZG93biB0byBzcGVlZCB0aGluZ3MgdXAuCisKKworICAgICAgICBfX3UzMiAgIG5leHRfY2x1c3RlcjsgICAvKiBtb3N0IHJlY2VudGx5IGFsbG9jYXRlZCBjbHVzdGVyICovCitUaGlzIGNvbnRhaW5zIHRoZSBudW1iZXIgb2YgdGhlIGxhc3QgY2x1c3RlciBhbGxvY2F0ZWQuICBUaGlzIHNwZWVkcyB1cAorY2x1c3RlciBhbGxvY2F0aW9uLCBiZWNhdXNlIGZyZWUgY2x1c3RlcnMgdXN1YWxseSBjb21lIGluIGNodW5rcywgc28geW91CitjYW4gc2NhbiByaWdodCBmb3IgZnJlZSBjbHVzdGVycyBpbiB0aGUgRkFULgorCisKKyAgICAgICAgX191MTYgICBzaWduYXR1cmVfMzsgICAgLyogc2hvdWxkIGJlIDB4YWE1NSAqLworQWx3YXlzIDB4YWE1NS4KKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis1CUZJTEUgQUxMT0NBVElPTiBUQUJMRVMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRmlsZSBhbGxvY2F0aW9uIHRhYmxlIChGQVQpIGlzIGEgc3RyYW5nZSBuYW1lLCBjb21lIHRvIHRoaW5rIG9mIGl0LiAgUGVyaGFwcyBpdAorc2hvdWxkIGJlIGNhbGxlZCBjbHVzdGVyIGFsbG9jYXRpb24gdGFibGUsIG9yIHNvbWV0aGluZyAoPykuICBFc3NlbnRpYWxseSwKK2l0IGlzIHVzZWQgdG8gcmVwcmVzZW50IGZpbGUgY2hhaW5zIChpLmUuIGxpbmtlZCBsaXN0cykgZm9yIGZpbGVzIGFuZAorZGlyZWN0b3JpZXMuICBUaGVyZSBhcmUgdXN1YWxseSB0d28gRkFUcyAob25lIGlzIGEgYmFja3VwLCBhbmQgc2hvdWxkIGJlCitpZGVudGljYWwpLiAKKworQW55d2F5LCBhIEZBVCBpcyBlc3NlbnRpYWxseSBhbiBhcnJheS4gIEluIEZBVDEyLCBlYWNoIGVudHJ5IGlzIDEyIGJpdHMsCitGQVQxNiAtIDE2IGJpdHMsIEZBVDMyIC0gMzIgYml0cy4gIEhlbmNlIHRoZSBuYW1lcy4KKworVGhlIGZpcnN0IGJ5dGUgb2YgZWFjaCBGQVQgbXVzdCBtYXRjaCB0aGUgIm1lZGlhIiBmaWVsZCBpbiB0aGUgYm9vdCBzZWN0b3IuCitUaGUgcmVzdCBvZiB0aGUgZmlyc3QgMiBlbnRyaWVzIGFyZSBmaWxsZWQgd2l0aCAweGZmLgorCitBbGwgcmVtYWluaW5nIGVudHJpZXMgLSBmcm9tIDIgb253YXJkcyAtIGNvcnJlc3BvbmQgdG8gYSBjbHVzdGVyLiAgaS5lLgordGhlIHNlY29uZCBlbnRyeSBjb3JyZXNwb25kcyB0byBjbHVzdGVyIDIuICBDbHVzdGVycyBhcmUgbnVtYmVyZWQgZnJvbSAyIG9ud2FyZHMKKyhpLmUuIHRoZXJlIGlzIG5vIGNsdXN0ZXIgMSkuCisKK1RoZSBudW1iZXIgaW4gZWFjaCBlbnRyeSBnaXZlcyB0aGUgbnVtYmVyIG9mIHRoZSBjbHVzdGVyIHRoYXQgb2NjdXJzIG5leHQgaW4KK3RoZSBmaWxlIGNoYWluIChsaW5rZWQgbGlzdCkuICBIb3dldmVyLCB0aGVyZSBhcmUgYSBmZXcgbWFnaWMgbnVtYmVyczoKKworICAqIHVudXNlZCAoMCkuICBJbmRpY2F0ZXMgdGhlIGNsdXN0ZXIgaXMgdW51c2VkLgorICAqIGVuZCBvZiBmaWxlICgweGZmMCBmb3IgRkFUMTIsIDB4ZmZmMCBmb3IgRkFUMTYsIDB4MGZmZmZmZjAgZm9yIEZBVDMyKS4KK0luZGljYXRlcyB0aGlzIGlzIHRoZSBsYXN0IGNsdXN0ZXIgaW4gdGhlIGZpbGUgb3IgZGlyZWN0b3J5LiAgT2J2aW91c2xseSBmb3IKK0ZBVDMyLCB0aGUgbnVtYmVyIG9mIGNsdXN0ZXJzIG11c3QgYmUgPCAweDBmZmZmZmYwLiAgU28gaXQgc2hvdWxkIGJlIGNhbGxlZAorRkFUMjgsIHBlcmhhcHMuLi4KKyAgKiBiYWQgY2x1c3RlciAoMHhmZjcgZm9yIEZBVDEyLCAweGZmZjcgZm9yIEZBVDE2LCAweDBmZmZmZmY3IGZvciBGQVQzMikuCitJbmRpY2F0ZXMgdGhlIGRpc2sgaXMgcGh5c2ljYWxseSBkYW1hZ2VkIHdoZXJlIHRoZSBjbHVzdGVyIGlzIHN0b3JlZC4KKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis2CURJUkVDVE9SWSBUUkVFCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBkaXJlY3RvcnkgdHJlZSBpcyBzaW1wbGU6IHRoZXJlIGFyZSBmaWxlcyBhbmQgZGlyZWN0b3JpZXMuICBGaWxlcyBhbmQKK2RpcmVjdG9yaWVzIGFyZSBzdG9yZWQgaW4gY2x1c3RlcnMgKGV4Y2VwdCB0aGUgcm9vdCBkaXJlY3Rvcnkgb24gRkFUMTIgYW5kCitGQVQxNikuICBEaXJlY3RvcmllcyBhcmUgZXNzZW50aWFsbHkgc3BlY2lhbCBmaWxlcyB0aGF0IGNvbnRhaW4gZGlyZWN0b3J5CitlbnRyaWVzLgorCitJbiBGQVQxMiBhbmQgRkFUMTYsIHRoZSByb290IGRpcmVjdG9yeSBpcyBzdG9yZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIEZBVHMuCitJbiBGQVQzMiwgdGhlIGZpcnN0IGNsdXN0ZXIgb2YgdGhlIHJvb3QgZGlyZWN0b3J5IGlzIGdpdmVuIGluIHRoZSBGQVQuICAoVG8KK2dldCB0aGUgc2Vjb25kIGNsdXN0ZXIgLSBpZiB0aGVyZSBpcyBvbmUgLSB5b3UganVzdCBsb29rIHVwIHRoZSBGQVQpCisKKworNi4xCURpcmVjdG9yeSBFbnRyaWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0RpcmVjdG9yaWVzIGFyZSBtYWRlIHVwIG9mIGRpcmVjdG9yeSBlbnRyaWVzLCBlYWNoIG9mIHdoaWNoIHJlcHJlc2VudCBhIGZpbGUsCithIGRpcmVjdG9yeSBvciBwYXJ0IG9mIGEgZmlsZSBuYW1lICh0aGUgVkZBVCBleHRlbnNpb24gLSBZVUNLISEhKS4KKworRWFjaCBkaXJlY3RvcnkgKGV4Y2VwdCB0aGUgcm9vdCBkaXJlY3RvcnkpIGNvbnRhaW5zIGEgJy4nICh0aGlzIGRpcmVjdG9yeSkgYW5kCisnLi4nIChwYXJlbnQgZGlyZWN0b3J5KSBlbnRyeS4KKworNi4xLjEJRmllbGRzCistLS0tLS0tLS0tLS0tLQorCitGcm9tIGxpYnBhcnRlZC9mc19mYXQvZmF0Lmg6CisKK3N0cnVjdCBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgX0ZhdERpckVudHJ5IHsKKyAgICAgICAgX191OCAgICAgICAgICAgIG5hbWVbOF07CisgICAgICAgIF9fdTggICAgICAgICAgICBleHRlbnNpb25bM107CisgICAgICAgIF9fdTggICAgICAgICAgICBhdHRyaWJ1dGVzOworICAgICAgICBfX3U4ICAgICAgICAgICAgaXNfdXBwZXJfY2FzZV9uYW1lOworICAgICAgICBfX3U4ICAgICAgICAgICAgY3JlYXRpb25fdGltZV9sb3c7ICAgICAgLyogbWlsbGlzZWNvbmRzICovCisgICAgICAgIF9fdTE2ICAgICAgICAgICBjcmVhdGlvbl90aW1lX2hpZ2g7CisgICAgICAgIF9fdTE2ICAgICAgICAgICBjcmVhdGlvbl9kYXRlOworICAgICAgICBfX3UxNiAgICAgICAgICAgYWNjZXNzX2RhdGU7CisgICAgICAgIF9fdTE2ICAgICAgICAgICBmaXJzdF9jbHVzdGVyX2hpZ2g7ICAgICAvKiBmb3IgRkFUMzIgKi8KKyAgICAgICAgX191MTYgICAgICAgICAgIHRpbWU7CisgICAgICAgIF9fdTE2ICAgICAgICAgICBkYXRlOworICAgICAgICBfX3UxNiAgICAgICAgICAgZmlyc3RfY2x1c3RlcjsKKyAgICAgICAgX191MzIgICAgICAgICAgIGxlbmd0aDsKK307CisKKzYuMS4yCUZpZWxkIERlc2NyaXB0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgICBfX3U4ICAgICAgICAgICAgbmFtZVs4XTsKK1RoZSBmaXJzdCBwYXJ0IG9mIHRoZSBmaWxlIG5hbWUuICBFZywgZm9yIGEgZmlsZSBjYWxsZWQgUkVBRE1FLlRYVCwgdGhpcyBpcworUkVBRE1FLiAgRmlsZXMgd2l0aCBuYW1lcyBsb25nZXIgdGhhbiA4IGNoYXJhY3RlcnMgdXNlIHRoZSBWRkFUIGV4dGVuc2lvbiAobm90CitkZXNjcmliZWQgaGVyZSkuICBXaGVuIGEgZmlsZSBpcyBkZWxldGVkLCB0aGUgZmlyc3QgY2hhcmFjdGVyIGlzIHNldCB0byAweGU1LgorSWYgdGhlIGZpcnN0IGNoYXJhY3RlciBpcyAweDAsIHRoZW4gdGhlIGVudGlyZSBkaXJlY3RvcnkgZW50cnkgaXMgdW51c2VkLgorCisKKyAgICAgICAgX191OCAgICAgICAgICAgIGV4dGVuc2lvblszXTsKK1RoZSBsYXN0IHBhcnQgb2YgdGhlIGZpbGUgbmFtZS4gIEVnLCBmb3IgYSBmaWxlIGNhbGxlZCBSRUFETUUuVFhULCB0aGlzIGlzIFRYVC4KK1RoaXMgZXhwbGFpbnMgYWxsIHRob3NlIC5IVE0gZmlsZXMgYXJvdW5kIHRoZSBwbGFjZS4uLgorCisKKyAgICAgICAgX191OCAgICAgICAgICAgIGF0dHJpYnV0ZXM7CitJZiB0aGlzIGlzIDB4MGYsIHRoZW4gdGhpcyBkaXJlY3RvcnkgZW50cnkgaXMgYSBWRkFUIGVudHJ5LCBhbmQgc3RvcmVzIHBhcnQKK29mIGEgZmlsZSBuYW1lLiAgT3RoZXJ3aXNlLCBpdCdzIHRyZWF0ZWQgYXMgdmFyaW91cyBiaXQgZmllbGRzOgorCisJCTB4MQkJcmVhZC1vbmx5CisJCTB4MgkJaGlkZGVuCisJCTB4NAkJc3lzdGVtCisJCTB4OAkJdm9sdW1lIGxhYmVsCisJCTB4MTAJCWRpcmVjdG9yeQorCQkweDIwCQlhcmNoaXZlZAorCisKKyAgICAgICAgX191OCAgICAgICAgICAgIGlzX3VwcGVyX2Nhc2VfbmFtZTsKK0EgTWljcm9zb2Z0IGNsdWRnZTogY3JlYXRlIGEgZmlsZSB3aXRoIDguMyBuYW1lIEJVVCBjb250YWluaW5nIHNtYWxsIGxldHRlcnMKKyhsaWtlIFJlYWRNZS5UeHQpIHdoaWNoIGlzIHRyZWF0ZWQgYXMgYW4gTEZOIChsb25nIGZpbGUgbmFtZSkgYW5kIG9jY3VwaWVzCit0aHJlZSBkaXJlY3RvcnkgZW50cmllcy4gIE5vdyB3aGVuIHlvdSByZW5hbWUgdGhpcyBmaWxlIHRvIGFsbCB1cHBlcmNhc2UKK1JFQURNRS5UWFQsLSB1bmRlciBXaW5kb3dzIE5UIDQgdGhlIHRoZW4gc3VwZXJmbHVvdXMgTEZOLVZGQVQgZW50cmllcyBhcmUKK3JlbW92ZWQsIHJlc3VsdGluZyBpbiBhIHNtYWxsZXIgZGlyZWN0b3J5LCBidXQgdW5kZXIgV2luZG93cyA5eCB0aGUgTEZOLVZGQVQKK2VudHJpZXMgYXJlIGp1c3QgdXBkLSBhbmQgdGhpcyBmbGFnIGlzIHNldC4gIEV4ZWN1dGluZyBERUZSQUcgb24gc3VjaCBlbnRyaWVzCitNSUdIVCB0aGVuIHJlbW92ZSB0aGUgc3VwZXJmbHVvdXMgTEZOLVZGQVQgZW50cmllcyBhbmQgc2hyaW5rIHRoZSBkaXJlY3RvcnkuCisKKworICAgICAgICBfX3U4ICAgICAgICAgICAgY3JlYXRpb25fdGltZV9sb3c7ICAgICAgLyogbWlsbGlzZWNvbmRzICovCisgICAgICAgIF9fdTE2ICAgICAgICAgICBjcmVhdGlvbl90aW1lX2hpZ2g7CisgICAgICAgIF9fdTE2ICAgICAgICAgICBjcmVhdGlvbl9kYXRlOworQ3JlYXRpb24gdGltZSBhbmQgZGF0ZS4gIE5vdCB1c2VkIHdpaCBNUy1ET1MgPDcuMCEKKworCisgICAgICAgIF9fdTE2ICAgICAgICAgICBhY2Nlc3NfZGF0ZTsKK0xhc3QgYWNjZXNzIGRhdGUuICBOb3QgdXNlZCB3aWggTVMtRE9TIDw3LjAhCisKKworICAgICAgICBfX3UxNiAgICAgICAgICAgZmlyc3RfY2x1c3Rlcl9oaWdoOyAgICAgLyogZm9yIEZBVDMyICovCitIaWdoIDMyIGJpdHMgb2YgdGhlIGZpcnN0IGNsdXN0ZXIgaW4gdGhlIGZpbGUgb3IgZGlyZWN0b3J5IChGQVQzMiBvbmx5KQorCisKKyAgICAgICAgX191MTYgICAgICAgICAgIHRpbWU7CisgICAgICAgIF9fdTE2ICAgICAgICAgICBkYXRlOworPworCisKKyAgICAgICAgX191MTYgICAgICAgICAgIGZpcnN0X2NsdXN0ZXI7CitMb3cgMTYgYml0cyBvZiBmaXJzdCBjbHVzdGVyLgorCisKKyAgICAgICAgX191MzIgICAgICAgICAgIGxlbmd0aDsKK0xlbmd0aCBvZiBmaWxlIGluIGJ5dGVzLgorCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQlQQVJUIElJIC0gR05VIFBBUlRFRCdTIEZBVCBJTVBMRU1FTlRBVElPTgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis3CVJFU0laSU5HICJJU1NVRVMiCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RvIHJlc2l6ZSBhIEZBVCBmaWxlIHN5c3RlbSwgYSBwcm9ncmFtIG11c3Q6CisgICogY29weSBhbGwgdXNlZCBjbHVzdGVycyB0aGF0IGxpZSBvdXRzaWRlIG9mIHRoZSBuZXcgcGFydGl0aW9uIG9udG8gZnJlZQorc3BhY2Ugb24gdGhhdCBwYXJ0aXRpb24uICBUaGUgZGlyZWN0b3J5IHRyZWUgYW5kIEZBVHMgbXVzdCBiZSB1cGRhdGVkIHRvCityZWZsZWN0IHRoaXMuCisgICogZ3JvdyBvciBzaHJpbmsgdGhlIGZpbGUgYWxsb2NhdGlvbiB0YWJsZShzKSB0byB0aGUgc2l6ZSBjb3JyZXNwb25kaW5nCit0byB0aGUgc2l6ZSBvZiB0aGUgcGFydGl0aW9uLgorICAqIGNvbnZlcnQgYmV0d2VlbiBGQVQxNiBhbmQgRkFUMzIgaWYgbmVjZXNzYXJ5LiAgVGhpcyBpbnZvbHZlczoKKyAgICAtIGNoYW5naW5nIHRoZSBmb3JtIG9mIHRoZSByb290IGRpcmVjdG9yeSAoRkFUMTYgaGFzIGl0J3MgYmVmb3JlIHRoZQorICAgICAgY2x1c3RlcnMgd2hlcmVhcyBGQVQzMiBzdG9yZXMgaXQgaW4gbm9ybWFsIGNsdXN0ZXJzKS4KKyAgICAtIGNyZWF0aW5nIHNwYWNlIGZvciB0aGUgYmFja3VwIGJvb3Qgc2VjdG9yIGFuZCBpbmZvIHNlY3Rvci4KKyAgICAtIHVwZGF0aW5nIHRoZSBkaXJlY3RvcnkgdHJlZSB0byB1c2UgMzIgYml0IGZpcnN0IGNsdXN0ZXIgZW50cmllcy4KKyAgKiBhbGlnbiB0aGUgc3RhcnQgb2YgdGhlIGNsdXN0ZXJzICh1c2luZyB0aGUgInJlc2VydmVkIiBmaWVsZCBpbiB0aGUKK2Jvb3Qgc2VjdG9yKSwgc28gdGhhdCB0aGUgY2x1c3RlcnMgdGhhdCBhcmUgY29tbW9uIHRvIHRoZSBvbGQgYW5kIG5ldworcGFydGl0aW9uIGNhbiBiZSBwcmVzZXJ2ZWQuCisgICogcmUtbnVtYmVyIGNsdXN0ZXJzLiAgZS5nLiBpZiB5b3UgY2hvcCBvdXQgc29tZSBjbHVzdGVycyBmcm9tIHRoZSBiZWdpbm5pbmcKKyhpLmUuIG1vdmUgdGhlIHN0YXJ0IGZvcndhcmQpLCB0aGVuIHRoZSBmaXJzdCBjbHVzdGVyIChpLmUuIG51bWJlciAyKSB3aWxsCitiZSByZWZlciB0byBhIGRpZmZlcmVudCBjbHVzdGVyIG9uIHRoZSBkaXNrLiAgVGhlIGRpcmVjdG9yeSB0cmVlIGFuZCBGQVRzIG11c3QKK2JlIHVwZGF0ZWQgdG8gcmVmbGVjdCB0aGlzLgorICAqIGNyZWF0ZSBhIG5ldyBib290IHNlY3RvciAoYW5kIHRoZSBpbmZvIHNlY3RvciBhbmQgYmFja3VwIGJvb3Qgc2VjdG9yIGZvcgorRkFUMzIpCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOAlPVkVSVklFVyBPRiBHTlUgUEFSVEVEJ1MgU1RSQVRFR1kKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworR05VIFBhcnRlZCBjb3BpZXMgYWxsIGNsdXN0ZXJzIHRoYXQgYXJlIG5vdCBhY2Nlc3NpYmxlIGZyb20gdGhlIG5ldyBmaWxlIHN5c3RlbQorKGVpdGhlciBiZWNhdXNlIGl0IGxpZXMgb3V0c2lkZSB0aGUgZmlsZSBzeXN0ZW0sIG9yIGZpbGUgc3lzdGVtIG1ldGEtZGF0YSBtdXN0CityZXNpZGUgdGhlcmUgaW5zdGVhZCkgdG8gYW4gYWNjZXNzaWJsZSBwbGFjZS4KKworU2luY2UgYWxsIGNsdXN0ZXJzIG11c3QgYmUgcmVudW1iZXJlZCAoaW4gbW9zdCBjYXNlcyksIHRoZSBlbnRpcmUgZGlyZWN0b3J5Cit0cmVlIG11c3QgYmUgdXBkYXRlZC4gIEhvd2V2ZXIgY29udmVydGluZyB0aGUgZGlyZWN0b3J5IHRyZWUgZnJvbSBvbmUgbnVtYmVyaW5nCitzeXN0ZW0gdG8gYW5vdGhlciB3b3VsZCBicmVhayB0aGUgZmlsZSBzeXN0ZW0gaWYgaXQgd2FzIGludGVycnVwdGVkIGhhbGZ3YXkKK3Rocm91Z2guICBJbnN0ZWFkLCBHTlUgUGFydGVkIGR1cGxpY2F0ZXMgdGhlIGRpcmVjdG9yeSB0cmVlIChleGNlcHQgdGhlIHJvb3QKK2RpcmVjdG9yeSBmb3IgRkFUMTYpIGFsb25nIHdpdGggY2x1c3RlcnMgdGhhdCBuZWVkIHRvIGJlIGNvcGllZCBiZWNhdXNlIHRoZXkKK2xpZSBvdXRzaWRlIHRoZSBuZXcgZmlsZSBzeXN0ZW0uICBUaGUgZGlyZWN0b3J5IHRyZWUgaXMgZHVwbGljYXRlZCBhdCB0aGUgc2FtZQordGltZSBhcyBpbmFjY2Vzc2libGUgY2x1c3RlcnMgYXJlLiAgVGhlIHJlbGV2YW50IGZ1bmN0aW9uLAorbmVlZHNfZHVwbGljYXRpbmcoKSBpbiBsaWJwYXJ0ZWQvZnNfZmF0L2Nsc3RkdXAuYyBpczoKKworCXN0YXRpYyBpbnQKKwluZWVkc19kdXBsaWNhdGluZyAoRmF0T3BDb250ZXh0KiBjdHgsIEZhdENsdXN0ZXIgY2x1c3RlcikKKwl7CisJCUZhdFNwZWNpZmljKiAgICBmc19pbmZvID0gRkFUX1NQRUNJRklDIChjdHgtPm9sZF9mcyk7CisKKwkJcmV0dXJuIChmc19pbmZvLT5mYXRfZmxhZ19tYXAgW2NsdXN0ZXJdID09IEZBVF9GTEFHX0ZJTEUKKwkJCSYmICFmYXRfb3BfY29udGV4dF9tYXBfc3RhdGljX2NsdXN0ZXIgKGN0eCwgY2x1c3RlcikpCisJCQl8fCBmc19pbmZvLT5mYXRfZmxhZ19tYXAgW2NsdXN0ZXJdCisJCQkJPT0gRkFUX0ZMQUdfRElSRUNUT1JZOworCX0KKworCisKK0EgZ29vZCBvdmVydmlldyBvZiB0aGlzIGltcGxlbWVudGF0aW9uIGlzIGluIHRoZSBmYXRfcmVzaXplKCkgZnVuY3Rpb24sIGluCitsaWJwYXJ0ZWQvZnNfZmF0L3Jlc2l6ZS5jIChzbGlnaHRseSBlZGl0ZWQpOgorCisJaW50CisJZmF0X3Jlc2l6ZSAoUGVkRmlsZVN5c3RlbSogZnMsIFBlZEdlb21ldHJ5KiBnZW9tKQorCXsKKwkJRmF0U3BlY2lmaWMqCWZzX2luZm8gPSBGQVRfU1BFQ0lGSUMgKGZzKTsKKwkJRmF0U3BlY2lmaWMqCW5ld19mc19pbmZvOworCQlGYXRPcENvbnRleHQqCWN0eDsKKwkJUGVkRmlsZVN5c3RlbSoJbmV3X2ZzOworCisJCWN0eCA9IGNyZWF0ZV9yZXNpemVfY29udGV4dCAoZnMsIGdlb20pOworCQlpZiAoIWN0eCkKKwkJCXJldHVybiAwOworCQluZXdfZnMgPSBjdHgtPm5ld19mczsKKwkJbmV3X2ZzX2luZm8gPSBGQVRfU1BFQ0lGSUMgKG5ld19mcyk7CisKKwkJaWYgKCFmYXRfZHVwbGljYXRlX2NsdXN0ZXJzIChjdHgpKQorCQkJcmV0dXJuIDA7CisJCWlmIChmc19pbmZvLT5mYXRfdHlwZSA9PSBGQVRfVFlQRV9GQVQxNgorCQkJCSYmIG5ld19mc19pbmZvLT5mYXRfdHlwZSA9PSBGQVRfVFlQRV9GQVQzMikgeworCQkJaWYgKCFhbGxvY19yb290X2RpciAoY3R4KSkKKwkJCQlyZXR1cm4gMDsKKwkJfQorCQlpZiAoIWZhdF9jb25zdHJ1Y3RfbmV3X2ZhdCAoY3R4KSkKKwkJCXJldHVybiAwOworCQlpZiAoIWZhdF9jb25zdHJ1Y3RfZGlyX3RyZWUgKGN0eCkpCisJCQlyZXR1cm4gMDsKKwkJaWYgKCFmYXRfdGFibGVfd3JpdGVfYWxsIChuZXdfZnNfaW5mby0+ZmF0LCBuZXdfZnMpKQorCQkJcmV0dXJuIDA7CisKKwkJaWYgKCFmYXRfYm9vdF9zZWN0b3JfZ2VuZXJhdGUgKCZuZXdfZnNfaW5mby0+Ym9vdF9zZWN0b3IsCisJCQkJCSAgICAgICBuZXdfZnMpKQorCQkJcmV0dXJuIDA7CisJCWlmICghZmF0X2Jvb3Rfc2VjdG9yX3dyaXRlICgmbmV3X2ZzX2luZm8tPmJvb3Rfc2VjdG9yLCBuZXdfZnMpKQorCQkJcmV0dXJuIDA7CisJCWlmIChuZXdfZnNfaW5mby0+ZmF0X3R5cGUgPT0gRkFUX1RZUEVfRkFUMzIpIHsKKwkJCWlmICghZmF0X2luZm9fc2VjdG9yX2dlbmVyYXRlICgKKwkJCQkJJm5ld19mc19pbmZvLT5pbmZvX3NlY3RvciwgbmV3X2ZzKSkKKwkJCQlyZXR1cm4gMDsKKwkJCWlmICghZmF0X2luZm9fc2VjdG9yX3dyaXRlICgmbmV3X2ZzX2luZm8tPmluZm9fc2VjdG9yLAorCQkJCQkJICAgIG5ld19mcykpCisJCQkJcmV0dXJuIDA7CisJCX0KKworCQlpZiAoIXJlc2l6ZV9jb250ZXh0X2Fzc2ltaWxhdGUgKGN0eCkpCisJCQlyZXR1cm4gMDsKKworCQlyZXR1cm4gMTsKKwl9CisKKwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2RvYy9NYWtlZmlsZS5hbSBiL3BhcnRlZC0xLjguNy9kb2MvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJlMzVmNQotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9kb2MvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSwyMSBAQAorIyBDIG11c3QgYmUgdGhlIGZpcnN0IHN1Yi1kaXJlY3RvcnkgYmVjYXVzZSBpdCBjb250YWlucyB0aGUgUE9UIGZpbGVzLgorU1VCRElSUyA9IEMgcHRfQlIKKworaW5mb19URVhJTkZPUyA9IHBhcnRlZC50ZXhpCitNQUtFSU5GTyA9IG1ha2VpbmZvIC0tbm8tc3BsaXQKKworRVhUUkFfRElTVCA9IEZBVAkJXAorCQkJIFVTRVIuanAJXAorCQkJIEFQSQkJXAorCQkJIGZkbC50ZXhpCVwKKwkJCSBwYXJ0ZWQtcHRfQlIudGV4aQorCisuUEhPTlk6IHVwZGF0ZXBvCit1cGRhdGVwbzoKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIGRpciBpbiAkJGxpc3Q7IGRvIFwKKwkJJChNQUtFKSAtQyAiJCRkaXIiIHVwZGF0ZXBvOyBcCisJZG9uZQorCitNQUlOVEFJTkVSQ0xFQU5GSUxFUyA9IE1ha2VmaWxlLmluIFwKKyAgICAgICAgICAgICAgICAgICAgICAgbWRhdGUtc2ggICAgXAorICAgICAgICAgICAgICAgICAgICAgICB0ZXhpbmZvLnRleApkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2RvYy9NYWtlZmlsZS5pbiBiL3BhcnRlZC0xLjguNy9kb2MvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM0ZmEyMAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9kb2MvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw5NTYgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTAgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK3N1YmRpciA9IGRvYworRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluIFwKKwkkKHNyY2Rpcikvc3RhbXAtdnRpICQoc3JjZGlyKS92ZXJzaW9uLnRleGkKK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200L2Fic29sdXRlLWhlYWRlci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9hbGxvY2EubTQgJCh0b3Bfc3JjZGlyKS9tNC9hc3NlcnQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvYXRleGl0Lm00ICQodG9wX3NyY2RpcikvbTQvY2FsbG9jLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2Nsb3NlLXN0cmVhbS5tNCAkKHRvcF9zcmNkaXIpL200L2Nsb3Nlb3V0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NvZGVzZXQubTQgJCh0b3Bfc3JjZGlyKS9tNC9jb25maWctaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9kaXJuYW1lLm00ICQodG9wX3NyY2RpcikvbTQvZG9zLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2RvdWJsZS1zbGFzaC1yb290Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2Vycm9yLm00ICQodG9wX3NyY2RpcikvbTQvZXhpdGZhaWwubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZXh0ZW5zaW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2ZwZW5kaW5nLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ZyZWUubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXRvcHQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCAkKHRvcF9zcmNkaXIpL200L2dsaWJjMjEubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZ251bGliLWNvbW1vbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9nbnVsaWItY29tcC5tNCAkKHRvcF9zcmNkaXIpL200L2ljb252Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2lubGluZS5tNCAkKHRvcF9zcmNkaXIpL200L2ludHR5cGVzLXByaS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pbnR0eXBlcy5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1pZ25vcmUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sb2NhbGNoYXJzZXQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbG9uZy1vcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbG9uZ2xvbmcubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWJydG93Yy5tNCAkKHRvcF9zcmNkaXIpL200L21ic3RhdGVfdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tZW1jaHIubTQgJCh0b3Bfc3JjZGlyKS9tNC9tZW1jbXAubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWVtY3B5Lm00ICQodG9wX3NyY2RpcikvbTQvbWVtbW92ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tZW1zZXQubTQgJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcG8ubTQgJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9xdW90ZWFyZy5tNCAkKHRvcF9zcmNkaXIpL200L3JlZ2V4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3JlbmFtZS5tNCAkKHRvcF9zcmNkaXIpL200L3JwbWF0Y2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc2FmZS1yZWFkLm00ICQodG9wX3NyY2RpcikvbTQvc2FmZS13cml0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zc2l6ZV90Lm00ICQodG9wX3NyY2RpcikvbTQvc3RkYXJnLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0ZGJvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGRpbnQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RkbGliX2gubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHJjc3BuLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0cmluZ19oLm00ICQodG9wX3NyY2RpcikvbTQvc3RybmR1cC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdHJubGVuLm00ICQodG9wX3NyY2RpcikvbTQvc3RydG9kLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0cnRvbC5tNCAkKHRvcF9zcmNkaXIpL200L3VuaXN0ZF9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3V0aW1idWYubTQgJCh0b3Bfc3JjZGlyKS9tNC91dGltZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC91dGltZXMtbnVsbC5tNCAkKHRvcF9zcmNkaXIpL200L3djaGFyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3djdHlwZS5tNCAkKHRvcF9zcmNkaXIpL200L3dpbnRfdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC94YWxsb2MubTQgJCh0b3Bfc3JjZGlyKS9tNC94c3RybmR1cC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oCitDT05GSUdfQ0xFQU5fRklMRVMgPQorU09VUkNFUyA9CitESVNUX1NPVVJDRVMgPQorSU5GT19ERVBTID0gJChzcmNkaXIpL3BhcnRlZC5pbmZvCitURVhJTkZPX1RFWCA9ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L3RleGluZm8udGV4CithbV9fVEVYSU5GT19URVhfRElSID0gJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgKK0RWSVMgPSBwYXJ0ZWQuZHZpCitQREZTID0gcGFydGVkLnBkZgorUFNTID0gcGFydGVkLnBzCitIVE1MUyA9IHBhcnRlZC5odG1sCitURVhJTkZPUyA9IHBhcnRlZC50ZXhpCitURVhJMkRWSSA9IHRleGkyZHZpCitURVhJMlBERiA9ICQoVEVYSTJEVkkpIC0tcGRmIC0tYmF0Y2gKK01BS0VJTkZPSFRNTCA9ICQoTUFLRUlORk8pIC0taHRtbAorQU1fTUFLRUlORk9IVE1MRkxBR1MgPSAkKEFNX01BS0VJTkZPRkxBR1MpCitEVklQUyA9IGR2aXBzCitSRUNVUlNJVkVfVEFSR0VUUyA9IGFsbC1yZWN1cnNpdmUgY2hlY2stcmVjdXJzaXZlIGR2aS1yZWN1cnNpdmUgXAorCWh0bWwtcmVjdXJzaXZlIGluZm8tcmVjdXJzaXZlIGluc3RhbGwtZGF0YS1yZWN1cnNpdmUgXAorCWluc3RhbGwtZHZpLXJlY3Vyc2l2ZSBpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlIFwKKwlpbnN0YWxsLWh0bWwtcmVjdXJzaXZlIGluc3RhbGwtaW5mby1yZWN1cnNpdmUgXAorCWluc3RhbGwtcGRmLXJlY3Vyc2l2ZSBpbnN0YWxsLXBzLXJlY3Vyc2l2ZSBpbnN0YWxsLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZSBpbnN0YWxsZGlycy1yZWN1cnNpdmUgcGRmLXJlY3Vyc2l2ZSBcCisJcHMtcmVjdXJzaXZlIHVuaW5zdGFsbC1yZWN1cnNpdmUKK2FtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChpbmZvZGlyKSIKK2FtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOworYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKKyAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAorICAgICopIGY9JCRwOzsgXAorICBlc2FjOworYW1fX3N0cmlwX2RpciA9IGBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKK1JFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTID0gbW9zdGx5Y2xlYW4tcmVjdXJzaXZlIGNsZWFuLXJlY3Vyc2l2ZQlcCisgIGRpc3RjbGVhbi1yZWN1cnNpdmUgbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUKK0VUQUdTID0gZXRhZ3MKK0NUQUdTID0gY3RhZ3MKK0RJU1RfU1VCRElSUyA9ICQoU1VCRElSUykKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitBQlNPTFVURV9JTlRUWVBFU19IID0gQEFCU09MVVRFX0lOVFRZUEVTX0hACitBQlNPTFVURV9TVERJTlRfSCA9IEBBQlNPTFVURV9TVERJTlRfSEAKK0FCU09MVVRFX1NURExJQl9IID0gQEFCU09MVVRFX1NURExJQl9IQAorQUJTT0xVVEVfU1RSSU5HX0ggPSBAQUJTT0xVVEVfU1RSSU5HX0hACitBQlNPTFVURV9VTklTVERfSCA9IEBBQlNPTFVURV9VTklTVERfSEAKK0FCU09MVVRFX1dDSEFSX0ggPSBAQUJTT0xVVEVfV0NIQVJfSEAKK0FCU09MVVRFX1dDVFlQRV9IID0gQEFCU09MVVRFX1dDVFlQRV9IQAorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQUxMT0NBID0gQEFMTE9DQUAKK0FMTE9DQV9IID0gQEFMTE9DQV9IQAorQU1UQVIgPSBAQU1UQVJACitBUiA9IEBBUkAKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBV0sgPSBAQVdLQAorQklUU0laRU9GX1BUUkRJRkZfVCA9IEBCSVRTSVpFT0ZfUFRSRElGRl9UQAorQklUU0laRU9GX1NJR19BVE9NSUNfVCA9IEBCSVRTSVpFT0ZfU0lHX0FUT01JQ19UQAorQklUU0laRU9GX1NJWkVfVCA9IEBCSVRTSVpFT0ZfU0laRV9UQAorQklUU0laRU9GX1dDSEFSX1QgPSBAQklUU0laRU9GX1dDSEFSX1RACitCSVRTSVpFT0ZfV0lOVF9UID0gQEJJVFNJWkVPRl9XSU5UX1RACitCVUlMRElORk8gPSBAQlVJTERJTkZPQAorQ0MgPSBAQ0NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NIRUNLX0NGTEFHUyA9IEBDSEVDS19DRkxBR1NACitDSEVDS19MSUJTID0gQENIRUNLX0xJQlNACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitETF9MSUJTID0gQERMX0xJQlNACitETV9MSUJTID0gQERNX0xJQlNACitFQ0hPID0gQEVDSE9ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VYRUVYVCA9IEBFWEVFWFRACitGNzcgPSBARjc3QAorRkZMQUdTID0gQEZGTEFHU0AKK0dFVE9QVF9IID0gQEdFVE9QVF9IQAorR0xJQkMyMSA9IEBHTElCQzIxQAorR01TR0ZNVCA9IEBHTVNHRk1UQAorR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACitHTlVMSUJfQ0hPV04gPSBAR05VTElCX0NIT1dOQAorR05VTElCX0RVUDIgPSBAR05VTElCX0RVUDJACitHTlVMSUJfRkNIRElSID0gQEdOVUxJQl9GQ0hESVJACitHTlVMSUJfRlRSVU5DQVRFID0gQEdOVUxJQl9GVFJVTkNBVEVACitHTlVMSUJfR0VUQ1dEID0gQEdOVUxJQl9HRVRDV0RACitHTlVMSUJfR0VUTE9HSU5fUiA9IEBHTlVMSUJfR0VUTE9HSU5fUkAKK0dOVUxJQl9HRVRTVUJPUFQgPSBAR05VTElCX0dFVFNVQk9QVEAKK0dOVUxJQl9JTUFYQUJTID0gQEdOVUxJQl9JTUFYQUJTQAorR05VTElCX0lNQVhESVYgPSBAR05VTElCX0lNQVhESVZACitHTlVMSUJfTUJTQ0FTRUNNUCA9IEBHTlVMSUJfTUJTQ0FTRUNNUEAKK0dOVUxJQl9NQlNDQVNFU1RSID0gQEdOVUxJQl9NQlNDQVNFU1RSQAorR05VTElCX01CU0NIUiA9IEBHTlVMSUJfTUJTQ0hSQAorR05VTElCX01CU0NTUE4gPSBAR05VTElCX01CU0NTUE5ACitHTlVMSUJfTUJTTEVOID0gQEdOVUxJQl9NQlNMRU5ACitHTlVMSUJfTUJTTkNBU0VDTVAgPSBAR05VTElCX01CU05DQVNFQ01QQAorR05VTElCX01CU1BCUksgPSBAR05VTElCX01CU1BCUktACitHTlVMSUJfTUJTUENBU0VDTVAgPSBAR05VTElCX01CU1BDQVNFQ01QQAorR05VTElCX01CU1JDSFIgPSBAR05VTElCX01CU1JDSFJACitHTlVMSUJfTUJTU0VQID0gQEdOVUxJQl9NQlNTRVBACitHTlVMSUJfTUJTU1BOID0gQEdOVUxJQl9NQlNTUE5ACitHTlVMSUJfTUJTU1RSID0gQEdOVUxJQl9NQlNTVFJACitHTlVMSUJfTUJTVE9LX1IgPSBAR05VTElCX01CU1RPS19SQAorR05VTElCX01FTU1FTSA9IEBHTlVMSUJfTUVNTUVNQAorR05VTElCX01FTVBDUFkgPSBAR05VTElCX01FTVBDUFlACitHTlVMSUJfTUVNUkNIUiA9IEBHTlVMSUJfTUVNUkNIUkAKK0dOVUxJQl9NS0RURU1QID0gQEdOVUxJQl9NS0RURU1QQAorR05VTElCX01LU1RFTVAgPSBAR05VTElCX01LU1RFTVBACitHTlVMSUJfUkVBRExJTksgPSBAR05VTElCX1JFQURMSU5LQAorR05VTElCX1NMRUVQID0gQEdOVUxJQl9TTEVFUEAKK0dOVUxJQl9TVFBDUFkgPSBAR05VTElCX1NUUENQWUAKK0dOVUxJQl9TVFBOQ1BZID0gQEdOVUxJQl9TVFBOQ1BZQAorR05VTElCX1NUUkNBU0VTVFIgPSBAR05VTElCX1NUUkNBU0VTVFJACitHTlVMSUJfU1RSQ0hSTlVMID0gQEdOVUxJQl9TVFJDSFJOVUxACitHTlVMSUJfU1RSRFVQID0gQEdOVUxJQl9TVFJEVVBACitHTlVMSUJfU1RSTkRVUCA9IEBHTlVMSUJfU1RSTkRVUEAKK0dOVUxJQl9TVFJOTEVOID0gQEdOVUxJQl9TVFJOTEVOQAorR05VTElCX1NUUlBCUksgPSBAR05VTElCX1NUUlBCUktACitHTlVMSUJfU1RSU0VQID0gQEdOVUxJQl9TVFJTRVBACitHTlVMSUJfU1RSVE9JTUFYID0gQEdOVUxJQl9TVFJUT0lNQVhACitHTlVMSUJfU1RSVE9LX1IgPSBAR05VTElCX1NUUlRPS19SQAorR05VTElCX1NUUlRPVU1BWCA9IEBHTlVMSUJfU1RSVE9VTUFYQAorR1JFUCA9IEBHUkVQQAorSEFWRV9ERUNMX0dFVExPR0lOX1IgPSBASEFWRV9ERUNMX0dFVExPR0lOX1JACitIQVZFX0RFQ0xfSU1BWEFCUyA9IEBIQVZFX0RFQ0xfSU1BWEFCU0AKK0hBVkVfREVDTF9JTUFYRElWID0gQEhBVkVfREVDTF9JTUFYRElWQAorSEFWRV9ERUNMX01FTU1FTSA9IEBIQVZFX0RFQ0xfTUVNTUVNQAorSEFWRV9ERUNMX01FTVJDSFIgPSBASEFWRV9ERUNMX01FTVJDSFJACitIQVZFX0RFQ0xfU1RSRFVQID0gQEhBVkVfREVDTF9TVFJEVVBACitIQVZFX0RFQ0xfU1RSTkNBU0VDTVAgPSBASEFWRV9ERUNMX1NUUk5DQVNFQ01QQAorSEFWRV9ERUNMX1NUUk5EVVAgPSBASEFWRV9ERUNMX1NUUk5EVVBACitIQVZFX0RFQ0xfU1RSTkxFTiA9IEBIQVZFX0RFQ0xfU1RSTkxFTkAKK0hBVkVfREVDTF9TVFJUT0lNQVggPSBASEFWRV9ERUNMX1NUUlRPSU1BWEAKK0hBVkVfREVDTF9TVFJUT0tfUiA9IEBIQVZFX0RFQ0xfU1RSVE9LX1JACitIQVZFX0RFQ0xfU1RSVE9VTUFYID0gQEhBVkVfREVDTF9TVFJUT1VNQVhACitIQVZFX0RVUDIgPSBASEFWRV9EVVAyQAorSEFWRV9GVFJVTkNBVEUgPSBASEFWRV9GVFJVTkNBVEVACitIQVZFX0dFVFNVQk9QVCA9IEBIQVZFX0dFVFNVQk9QVEAKK0hBVkVfSU5UVFlQRVNfSCA9IEBIQVZFX0lOVFRZUEVTX0hACitIQVZFX0lTV0NOVFJMID0gQEhBVkVfSVNXQ05UUkxACitIQVZFX0xPTkdfTE9OR19JTlQgPSBASEFWRV9MT05HX0xPTkdfSU5UQAorSEFWRV9NRU1QQ1BZID0gQEhBVkVfTUVNUENQWUAKK0hBVkVfTUtEVEVNUCA9IEBIQVZFX01LRFRFTVBACitIQVZFX1JFQURMSU5LID0gQEhBVkVfUkVBRExJTktACitIQVZFX1NJR05FRF9TSUdfQVRPTUlDX1QgPSBASEFWRV9TSUdORURfU0lHX0FUT01JQ19UQAorSEFWRV9TSUdORURfV0NIQVJfVCA9IEBIQVZFX1NJR05FRF9XQ0hBUl9UQAorSEFWRV9TSUdORURfV0lOVF9UID0gQEhBVkVfU0lHTkVEX1dJTlRfVEAKK0hBVkVfU0xFRVAgPSBASEFWRV9TTEVFUEAKK0hBVkVfU1RESU5UX0ggPSBASEFWRV9TVERJTlRfSEAKK0hBVkVfU1RQQ1BZID0gQEhBVkVfU1RQQ1BZQAorSEFWRV9TVFBOQ1BZID0gQEhBVkVfU1RQTkNQWUAKK0hBVkVfU1RSQ0FTRUNNUCA9IEBIQVZFX1NUUkNBU0VDTVBACitIQVZFX1NUUkNBU0VTVFIgPSBASEFWRV9TVFJDQVNFU1RSQAorSEFWRV9TVFJDSFJOVUwgPSBASEFWRV9TVFJDSFJOVUxACitIQVZFX1NUUk5EVVAgPSBASEFWRV9TVFJORFVQQAorSEFWRV9TVFJQQlJLID0gQEhBVkVfU1RSUEJSS0AKK0hBVkVfU1RSU0VQID0gQEhBVkVfU1RSU0VQQAorSEFWRV9TWVNfQklUWVBFU19IID0gQEhBVkVfU1lTX0JJVFlQRVNfSEAKK0hBVkVfU1lTX0lOVFRZUEVTX0ggPSBASEFWRV9TWVNfSU5UVFlQRVNfSEAKK0hBVkVfU1lTX1RZUEVTX0ggPSBASEFWRV9TWVNfVFlQRVNfSEAKK0hBVkVfVU5JU1REX0ggPSBASEFWRV9VTklTVERfSEAKK0hBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVCA9IEBIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlRACitIQVZFX1dDVFlQRV9IID0gQEhBVkVfV0NUWVBFX0hACitIQVZFX1dJTlRfVCA9IEBIQVZFX1dJTlRfVEAKK0hBVkVfX0JPT0wgPSBASEFWRV9fQk9PTEAKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSU5UTElOQ1MgPSBASU5UTElOQ1NACitJTlRMTElCUyA9IEBJTlRMTElCU0AKK0lOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKK0lOVFRZUEVTX0ggPSBASU5UVFlQRVNfSEAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQklDT05WID0gQExJQklDT05WQAorTElCSU5UTCA9IEBMSUJJTlRMQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTE5fUyA9IEBMTl9TQAorTFRBTExPQ0EgPSBATFRBTExPQ0FACitMVExJQklDT05WID0gQExUTElCSUNPTlZACitMVExJQklOVEwgPSBATFRMSUJJTlRMQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK0xUX0FHRSA9IEBMVF9BR0VACitMVF9DVVJSRU5UID0gQExUX0NVUlJFTlRACitMVF9SRUxFQVNFID0gQExUX1JFTEVBU0VACitMVF9SRVZJU0lPTiA9IEBMVF9SRVZJU0lPTkAKK01BS0VJTkZPID0gbWFrZWluZm8gLS1uby1zcGxpdAorTUtESVJfUCA9IEBNS0RJUl9QQAorTVNHRk1UID0gQE1TR0ZNVEAKK01TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKK01TR01FUkdFID0gQE1TR01FUkdFQAorT0JKRVhUID0gQE9CSkVYVEAKK09TID0gQE9TQAorT1NfTElCUyA9IEBPU19MSUJTQAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBUlRFRExERkxBR1MgPSBAUEFSVEVETERGTEFHU0AKK1BBUlRFRF9MSUJTID0gQFBBUlRFRF9MSUJTQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQT1NVQiA9IEBQT1NVQkAKK1BPV19MSUIgPSBAUE9XX0xJQkAKK1BSSVBUUl9QUkVGSVggPSBAUFJJUFRSX1BSRUZJWEAKK1BSSV9NQUNST1NfQlJPS0VOID0gQFBSSV9NQUNST1NfQlJPS0VOQAorUFRSRElGRl9UX1NVRkZJWCA9IEBQVFJESUZGX1RfU1VGRklYQAorUkFOTElCID0gQFJBTkxJQkAKK1JFSVNFUl9MSUJTID0gQFJFSVNFUl9MSUJTQAorUkVQTEFDRV9DSE9XTiA9IEBSRVBMQUNFX0NIT1dOQAorUkVQTEFDRV9GQ0hESVIgPSBAUkVQTEFDRV9GQ0hESVJACitSRVBMQUNFX0dFVENXRCA9IEBSRVBMQUNFX0dFVENXREAKK1JFUExBQ0VfTUtTVEVNUCA9IEBSRVBMQUNFX01LU1RFTVBACitTRUQgPSBAU0VEQAorU0VMSU5VWF9MSUJTID0gQFNFTElOVVhfTElCU0AKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTSUdfQVRPTUlDX1RfU1VGRklYID0gQFNJR19BVE9NSUNfVF9TVUZGSVhACitTSVpFX1RfU1VGRklYID0gQFNJWkVfVF9TVUZGSVhACitTVERCT09MX0ggPSBAU1REQk9PTF9IQAorU1RESU5UX0ggPSBAU1RESU5UX0hACitTVFJJUCA9IEBTVFJJUEAKK1VTRV9OTFMgPSBAVVNFX05MU0AKK1VVSURfTElCUyA9IEBVVUlEX0xJQlNACitWRVJTSU9OID0gQFZFUlNJT05ACitXQ0hBUl9IID0gQFdDSEFSX0hACitXQ0hBUl9UX1NVRkZJWCA9IEBXQ0hBUl9UX1NVRkZJWEAKK1dDVFlQRV9IID0gQFdDVFlQRV9IQAorV0lOVF9UX1NVRkZJWCA9IEBXSU5UX1RfU1VGRklYQAorWEdFVFRFWFQgPSBAWEdFVFRFWFRACitYR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9DWFggPSBAYWNfY3RfQ1hYQAorYWNfY3RfRjc3ID0gQGFjX2N0X0Y3N0AKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitnbF9MSUJPQkpTID0gQGdsX0xJQk9CSlNACitnbF9MVExJQk9CSlMgPSBAZ2xfTFRMSUJPQkpTQAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKKworIyBDIG11c3QgYmUgdGhlIGZpcnN0IHN1Yi1kaXJlY3RvcnkgYmVjYXVzZSBpdCBjb250YWlucyB0aGUgUE9UIGZpbGVzLgorU1VCRElSUyA9IEMgcHRfQlIKK2luZm9fVEVYSU5GT1MgPSBwYXJ0ZWQudGV4aQorRVhUUkFfRElTVCA9IEZBVAkJXAorCQkJIFVTRVIuanAJXAorCQkJIEFQSQkJXAorCQkJIGZkbC50ZXhpCVwKKwkJCSBwYXJ0ZWQtcHRfQlIudGV4aQorCitNQUlOVEFJTkVSQ0xFQU5GSUxFUyA9IE1ha2VmaWxlLmluIFwKKyAgICAgICAgICAgICAgICAgICAgICAgbWRhdGUtc2ggICAgXAorICAgICAgICAgICAgICAgICAgICAgICB0ZXhpbmZvLnRleAorCithbGw6IGFsbC1yZWN1cnNpdmUKKworLlNVRkZJWEVTOgorLlNVRkZJWEVTOiAuZHZpIC5odG1sIC5pbmZvIC5wZGYgLnBzIC50ZXhpCiskKHNyY2RpcikvTWFrZWZpbGUuaW46ICAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCBcCisJCSYmIGV4aXQgMDsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgIGRvYy9NYWtlZmlsZSc7IFwKKwljZCAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZ251ICBkb2MvTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6ICAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6ICAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKK21vc3RseWNsZWFuLWxpYnRvb2w6CisJLXJtIC1mICoubG8KKworY2xlYW4tbGlidG9vbDoKKwktcm0gLXJmIC5saWJzIF9saWJzCisKKy50ZXhpLmluZm86CisJcmVzdG9yZT06ICYmIGJhY2t1cGRpcj0iJChhbV9fbGVhZGluZ19kb3QpYW0kJCQkIiAmJiBcCisJYW1fX2N3ZD1gcHdkYCAmJiBjZCAkKHNyY2RpcikgJiYgXAorCXJtIC1yZiAkJGJhY2t1cGRpciAmJiBta2RpciAkJGJhY2t1cGRpciAmJiBcCisJaWYgKCQoTUFLRUlORk8pIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKKwkgIGZvciBmIGluICRAICRALVswLTldICRALVswLTldWzAtOV0gJChAOi5pbmZvPSkuaVswLTldICQoQDouaW5mbz0pLmlbMC05XVswLTldOyBkbyBcCisJICAgIGlmIHRlc3QgLWYgJCRmOyB0aGVuIG12ICQkZiAkJGJhY2t1cGRpcjsgcmVzdG9yZT1tdjsgZWxzZSA6OyBmaTsgXAorCSAgZG9uZTsgXAorCWVsc2UgOjsgZmkgJiYgXAorCWNkICIkJGFtX19jd2QiOyBcCisJaWYgJChNQUtFSU5GTykgJChBTV9NQUtFSU5GT0ZMQUdTKSAkKE1BS0VJTkZPRkxBR1MpIC1JICQoc3JjZGlyKSBcCisJIC1vICRAICQ8OyBcCisJdGhlbiBcCisJICByYz0wOyBcCisJICBjZCAkKHNyY2Rpcik7IFwKKwllbHNlIFwKKwkgIHJjPSQkPzsgXAorCSAgY2QgJChzcmNkaXIpICYmIFwKKwkgICQkcmVzdG9yZSAkJGJhY2t1cGRpci8qIGBlY2hvICIuLyRAIiB8IHNlZCAnc3xbXi9dKiQkfHwnYDsgXAorCWZpOyBcCisJcm0gLXJmICQkYmFja3VwZGlyOyBleGl0ICQkcmMKKworLnRleGkuZHZpOgorCVRFWElOUFVUUz0iJChhbV9fVEVYSU5GT19URVhfRElSKSQoUEFUSF9TRVBBUkFUT1IpJCRURVhJTlBVVFMiIFwKKwlNQUtFSU5GTz0nJChNQUtFSU5GTykgJChBTV9NQUtFSU5GT0ZMQUdTKSAkKE1BS0VJTkZPRkxBR1MpIC1JICQoc3JjZGlyKScgXAorCSQoVEVYSTJEVkkpICQ8CisKKy50ZXhpLnBkZjoKKwlURVhJTlBVVFM9IiQoYW1fX1RFWElORk9fVEVYX0RJUikkKFBBVEhfU0VQQVJBVE9SKSQkVEVYSU5QVVRTIiBcCisJTUFLRUlORk89JyQoTUFLRUlORk8pICQoQU1fTUFLRUlORk9GTEFHUykgJChNQUtFSU5GT0ZMQUdTKSAtSSAkKHNyY2RpciknIFwKKwkkKFRFWEkyUERGKSAkPAorCisudGV4aS5odG1sOgorCXJtIC1yZiAkKEA6Lmh0bWw9Lmh0cCkKKwlpZiAkKE1BS0VJTkZPSFRNTCkgJChBTV9NQUtFSU5GT0hUTUxGTEFHUykgJChNQUtFSU5GT0ZMQUdTKSAtSSAkKHNyY2RpcikgXAorCSAtbyAkKEA6Lmh0bWw9Lmh0cCkgJDw7IFwKKwl0aGVuIFwKKwkgIHJtIC1yZiAkQDsgXAorCSAgaWYgdGVzdCAhIC1kICQoQDouaHRtbD0uaHRwKSAmJiB0ZXN0IC1kICQoQDouaHRtbD0pOyB0aGVuIFwKKwkgICAgbXYgJChAOi5odG1sPSkgJEA7IGVsc2UgbXYgJChAOi5odG1sPS5odHApICRAOyBmaTsgXAorCWVsc2UgXAorCSAgaWYgdGVzdCAhIC1kICQoQDouaHRtbD0uaHRwKSAmJiB0ZXN0IC1kICQoQDouaHRtbD0pOyB0aGVuIFwKKwkgICAgcm0gLXJmICQoQDouaHRtbD0pOyBlbHNlIHJtIC1SZiAkKEA6Lmh0bWw9Lmh0cCkgJEA7IGZpOyBcCisJICBleGl0IDE7IFwKKwlmaQorJChzcmNkaXIpL3BhcnRlZC5pbmZvOiBwYXJ0ZWQudGV4aSAkKHNyY2RpcikvdmVyc2lvbi50ZXhpCitwYXJ0ZWQuZHZpOiBwYXJ0ZWQudGV4aSAkKHNyY2RpcikvdmVyc2lvbi50ZXhpCitwYXJ0ZWQucGRmOiBwYXJ0ZWQudGV4aSAkKHNyY2RpcikvdmVyc2lvbi50ZXhpCitwYXJ0ZWQuaHRtbDogcGFydGVkLnRleGkgJChzcmNkaXIpL3ZlcnNpb24udGV4aQorJChzcmNkaXIpL3ZlcnNpb24udGV4aTogICQoc3JjZGlyKS9zdGFtcC12dGkKKyQoc3JjZGlyKS9zdGFtcC12dGk6IHBhcnRlZC50ZXhpICQodG9wX3NyY2RpcikvY29uZmlndXJlCisJQChkaXI9LjsgdGVzdCAtZiAuL3BhcnRlZC50ZXhpIHx8IGRpcj0kKHNyY2Rpcik7IFwKKwlzZXQgYCQoU0hFTEwpICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L21kYXRlLXNoICQkZGlyL3BhcnRlZC50ZXhpYDsgXAorCWVjaG8gIkBzZXQgVVBEQVRFRCAkJDEgJCQyICQkMyI7IFwKKwllY2hvICJAc2V0IFVQREFURUQtTU9OVEggJCQyICQkMyI7IFwKKwllY2hvICJAc2V0IEVESVRJT04gJChWRVJTSU9OKSI7IFwKKwllY2hvICJAc2V0IFZFUlNJT04gJChWRVJTSU9OKSIpID4gdnRpLnRtcAorCUBjbXAgLXMgdnRpLnRtcCAkKHNyY2RpcikvdmVyc2lvbi50ZXhpIFwKKwkgIHx8IChlY2hvICJVcGRhdGluZyAkKHNyY2RpcikvdmVyc2lvbi50ZXhpIjsgXAorCSAgICAgIGNwIHZ0aS50bXAgJChzcmNkaXIpL3ZlcnNpb24udGV4aSkKKwktQHJtIC1mIHZ0aS50bXAKKwlAY3AgJChzcmNkaXIpL3ZlcnNpb24udGV4aSAkQAorCittb3N0bHljbGVhbi12dGk6CisJLXJtIC1mIHZ0aS50bXAKKworbWFpbnRhaW5lci1jbGVhbi12dGk6CisJLXJtIC1mICQoc3JjZGlyKS9zdGFtcC12dGkgJChzcmNkaXIpL3ZlcnNpb24udGV4aQorLmR2aS5wczoKKwlURVhJTlBVVFM9IiQoYW1fX1RFWElORk9fVEVYX0RJUikkKFBBVEhfU0VQQVJBVE9SKSQkVEVYSU5QVVRTIiBcCisJJChEVklQUykgLW8gJEAgJDwKKwordW5pbnN0YWxsLWR2aS1hbToKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKERWSVMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBmPSQoYW1fX3N0cmlwX2RpcikgXAorCSAgZWNobyAiIHJtIC1mICckKERFU1RESVIpJChkdmlkaXIpLyQkZiciOyBcCisJICBybSAtZiAiJChERVNURElSKSQoZHZpZGlyKS8kJGYiOyBcCisJZG9uZQorCit1bmluc3RhbGwtaHRtbC1hbToKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKEhUTUxTKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgZj0kKGFtX19zdHJpcF9kaXIpIFwKKwkgIGVjaG8gIiBybSAtcmYgJyQoREVTVERJUikkKGh0bWxkaXIpLyQkZiciOyBcCisJICBybSAtcmYgIiQoREVTVERJUikkKGh0bWxkaXIpLyQkZiI7IFwKKwlkb25lCisKK3VuaW5zdGFsbC1pbmZvLWFtOgorCUAkKFBSRV9VTklOU1RBTEwpCisJQGlmIHRlc3QgLWQgJyQoREVTVERJUikkKGluZm9kaXIpJyAmJiBcCisJICAgIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uICYmIFwKKwkgICAgIGluc3RhbGwtaW5mbyAtLXZlcnNpb24gMj4mMSB8IHNlZCAxcSB8IGdyZXAgLWkgLXYgZGViaWFuKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXAorCSAgbGlzdD0nJChJTkZPX0RFUFMpJzsgXAorCSAgZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBcCisJICAgIHJlbGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgJ3N8Xi4qL3x8J2A7IFwKKwkgICAgZWNobyAiIGluc3RhbGwtaW5mbyAtLWluZm8tZGlyPSckKERFU1RESVIpJChpbmZvZGlyKScgLS1yZW1vdmUgJyQoREVTVERJUikkKGluZm9kaXIpLyQkcmVsZmlsZSciOyBcCisJICAgIGluc3RhbGwtaW5mbyAtLWluZm8tZGlyPSIkKERFU1RESVIpJChpbmZvZGlyKSIgLS1yZW1vdmUgIiQoREVTVERJUikkKGluZm9kaXIpLyQkcmVsZmlsZSI7IFwKKwkgIGRvbmU7IFwKKwllbHNlIDo7IGZpCisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChJTkZPX0RFUFMpJzsgXAorCWZvciBmaWxlIGluICQkbGlzdDsgZG8gXAorCSAgcmVsZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAnc3xeLiovfHwnYDsgXAorCSAgcmVsZmlsZV9pPWBlY2hvICIkJHJlbGZpbGUiIHwgc2VkICdzfFwuaW5mbyQkfHw7c3wkJHwuaXwnYDsgXAorCSAgKGlmIHRlc3QgLWQgIiQoREVTVERJUikkKGluZm9kaXIpIiAmJiBjZCAiJChERVNURElSKSQoaW5mb2RpcikiOyB0aGVuIFwKKwkgICAgIGVjaG8gIiBjZCAnJChERVNURElSKSQoaW5mb2RpciknICYmIHJtIC1mICQkcmVsZmlsZSAkJHJlbGZpbGUtWzAtOV0gJCRyZWxmaWxlLVswLTldWzAtOV0gJCRyZWxmaWxlX2lbMC05XSAkJHJlbGZpbGVfaVswLTldWzAtOV0iOyBcCisJICAgICBybSAtZiAkJHJlbGZpbGUgJCRyZWxmaWxlLVswLTldICQkcmVsZmlsZS1bMC05XVswLTldICQkcmVsZmlsZV9pWzAtOV0gJCRyZWxmaWxlX2lbMC05XVswLTldOyBcCisJICAgZWxzZSA6OyBmaSk7IFwKKwlkb25lCisKK3VuaW5zdGFsbC1wZGYtYW06CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChQREZTKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgZj0kKGFtX19zdHJpcF9kaXIpIFwKKwkgIGVjaG8gIiBybSAtZiAnJChERVNURElSKSQocGRmZGlyKS8kJGYnIjsgXAorCSAgcm0gLWYgIiQoREVTVERJUikkKHBkZmRpcikvJCRmIjsgXAorCWRvbmUKKwordW5pbnN0YWxsLXBzLWFtOgorCUAkKE5PUk1BTF9VTklOU1RBTEwpCisJQGxpc3Q9JyQoUFNTKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgZj0kKGFtX19zdHJpcF9kaXIpIFwKKwkgIGVjaG8gIiBybSAtZiAnJChERVNURElSKSQocHNkaXIpLyQkZiciOyBcCisJICBybSAtZiAiJChERVNURElSKSQocHNkaXIpLyQkZiI7IFwKKwlkb25lCisKK2Rpc3QtaW5mbzogJChJTkZPX0RFUFMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKKwlsaXN0PSckKElORk9fREVQUyknOyBcCisJZm9yIGJhc2UgaW4gJCRsaXN0OyBkbyBcCisJICBjYXNlICQkYmFzZSBpbiBcCisJICAgICQoc3JjZGlyKS8qKSBiYXNlPWBlY2hvICIkJGJhc2UiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCisJICBlc2FjOyBcCisJICBpZiB0ZXN0IC1mICQkYmFzZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBiYXNlX2k9YGVjaG8gIiQkYmFzZSIgfCBzZWQgJ3N8XC5pbmZvJCR8fDtzfCQkfC5pfCdgOyBcCisJICBmb3IgZmlsZSBpbiAkJGQvJCRiYXNlICQkZC8kJGJhc2UtWzAtOV0gJCRkLyQkYmFzZS1bMC05XVswLTldICQkZC8kJGJhc2VfaVswLTldICQkZC8kJGJhc2VfaVswLTldWzAtOV07IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAkJGZpbGU7IHRoZW4gXAorCSAgICAgIHJlbGZpbGU9YGV4cHIgIiQkZmlsZSIgOiAiJCRkL1woLipcKSJgOyBcCisJICAgICAgdGVzdCAtZiAkKGRpc3RkaXIpLyQkcmVsZmlsZSB8fCBcCisJCWNwIC1wICQkZmlsZSAkKGRpc3RkaXIpLyQkcmVsZmlsZTsgXAorCSAgICBlbHNlIDo7IGZpOyBcCisJICBkb25lOyBcCisJZG9uZQorCittb3N0bHljbGVhbi1hbWluZm86CisJLXJtIC1yZiBwYXJ0ZWQuYXV4IHBhcnRlZC5jcCBwYXJ0ZWQuY3BzIHBhcnRlZC5mbiBwYXJ0ZWQuZm5zIHBhcnRlZC5reSBcCisJICBwYXJ0ZWQua3lzIHBhcnRlZC5sb2cgcGFydGVkLnBnIHBhcnRlZC5wZ3MgcGFydGVkLnRtcCBcCisJICBwYXJ0ZWQudG9jIHBhcnRlZC50cCBwYXJ0ZWQudHBzIHBhcnRlZC52ciBwYXJ0ZWQudnJzIFwKKwkgIHBhcnRlZC5kdmkgcGFydGVkLnBkZiBwYXJ0ZWQucHMgcGFydGVkLmh0bWwKKworbWFpbnRhaW5lci1jbGVhbi1hbWluZm86CisJQGxpc3Q9JyQoSU5GT19ERVBTKSc7IGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgaV9pPWBlY2hvICIkJGkiIHwgc2VkICdzfFwuaW5mbyQkfHw7c3wkJHwuaXwnYDsgXAorCSAgZWNobyAiIHJtIC1mICQkaSAkJGktWzAtOV0gJCRpLVswLTldWzAtOV0gJCRpX2lbMC05XSAkJGlfaVswLTldWzAtOV0iOyBcCisJICBybSAtZiAkJGkgJCRpLVswLTldICQkaS1bMC05XVswLTldICQkaV9pWzAtOV0gJCRpX2lbMC05XVswLTldOyBcCisJZG9uZQorCisjIFRoaXMgZGlyZWN0b3J5J3Mgc3ViZGlyZWN0b3JpZXMgYXJlIG1vc3RseSBpbmRlcGVuZGVudDsgeW91IGNhbiBjZAorIyBpbnRvIHRoZW0gYW5kIHJ1biBgbWFrZScgd2l0aG91dCBnb2luZyB0aHJvdWdoIHRoaXMgTWFrZWZpbGUuCisjIFRvIGNoYW5nZSB0aGUgdmFsdWVzIG9mIGBtYWtlJyB2YXJpYWJsZXM6IGluc3RlYWQgb2YgZWRpdGluZyBNYWtlZmlsZXMsCisjICgxKSBpZiB0aGUgdmFyaWFibGUgaXMgc2V0IGluIGBjb25maWcuc3RhdHVzJywgZWRpdCBgY29uZmlnLnN0YXR1cycKKyMgICAgICh3aGljaCB3aWxsIGNhdXNlIHRoZSBNYWtlZmlsZXMgdG8gYmUgcmVnZW5lcmF0ZWQgd2hlbiB5b3UgcnVuIGBtYWtlJyk7CisjICgyKSBvdGhlcndpc2UsIHBhc3MgdGhlIGRlc2lyZWQgdmFsdWVzIG9uIHRoZSBgbWFrZScgY29tbWFuZCBsaW5lLgorJChSRUNVUlNJVkVfVEFSR0VUUyk6CisJQGZhaWxjb209J2V4aXQgMSc7IFwKKwlmb3IgZiBpbiB4ICQkTUFLRUZMQUdTOyBkbyBcCisJICBjYXNlICQkZiBpbiBcCisJICAgICo9KiB8IC0tWyFrXSopOzsgXAorCSAgICAqayopIGZhaWxjb209J2ZhaWw9eWVzJzs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZG90X3NlZW49bm87IFwKKwl0YXJnZXQ9YGVjaG8gJEAgfCBzZWQgcy8tcmVjdXJzaXZlLy9gOyBcCisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBlY2hvICJNYWtpbmcgJCR0YXJnZXQgaW4gJCRzdWJkaXIiOyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gXAorCSAgICBkb3Rfc2Vlbj15ZXM7IFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldC1hbSI7IFwKKwkgIGVsc2UgXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0IjsgXAorCSAgZmk7IFwKKwkgIChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkJGxvY2FsX3RhcmdldCkgXAorCSAgfHwgZXZhbCAkJGZhaWxjb207IFwKKwlkb25lOyBcCisJaWYgdGVzdCAiJCRkb3Rfc2VlbiIgPSAibm8iOyB0aGVuIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICIkJHRhcmdldC1hbSIgfHwgZXhpdCAxOyBcCisJZmk7IHRlc3QgLXogIiQkZmFpbCIKKworJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUyk6CisJQGZhaWxjb209J2V4aXQgMSc7IFwKKwlmb3IgZiBpbiB4ICQkTUFLRUZMQUdTOyBkbyBcCisJICBjYXNlICQkZiBpbiBcCisJICAgICo9KiB8IC0tWyFrXSopOzsgXAorCSAgICAqayopIGZhaWxjb209J2ZhaWw9eWVzJzs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZG90X3NlZW49bm87IFwKKwljYXNlICIkQCIgaW4gXAorCSAgZGlzdGNsZWFuLSogfCBtYWludGFpbmVyLWNsZWFuLSopIGxpc3Q9JyQoRElTVF9TVUJESVJTKScgOzsgXAorCSAgKikgbGlzdD0nJChTVUJESVJTKScgOzsgXAorCWVzYWM7IFwKKwlyZXY9Jyc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gOjsgZWxzZSBcCisJICAgIHJldj0iJCRzdWJkaXIgJCRyZXYiOyBcCisJICBmaTsgXAorCWRvbmU7IFwKKwlyZXY9IiQkcmV2IC4iOyBcCisJdGFyZ2V0PWBlY2hvICRAIHwgc2VkIHMvLXJlY3Vyc2l2ZS8vYDsgXAorCWZvciBzdWJkaXIgaW4gJCRyZXY7IGRvIFwKKwkgIGVjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQtYW0iOyBcCisJICBlbHNlIFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKKwkgIGZpOyBcCisJICAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRsb2NhbF90YXJnZXQpIFwKKwkgIHx8IGV2YWwgJCRmYWlsY29tOyBcCisJZG9uZSAmJiB0ZXN0IC16ICIkJGZhaWwiCit0YWdzLXJlY3Vyc2l2ZToKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHRhZ3MpOyBcCisJZG9uZQorY3RhZ3MtcmVjdXJzaXZlOgorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgdGVzdCAiJCRzdWJkaXIiID0gLiB8fCAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY3RhZ3MpOyBcCisJZG9uZQorCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJbWtpZCAtZklEICQkdW5pcXVlCit0YWdzOiBUQUdTCisKK1RBR1M6IHRhZ3MtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwl0YWdzPTsgXAorCWhlcmU9YHB3ZGA7IFwKKwlpZiAoJChFVEFHUykgLS1ldGFncy1pbmNsdWRlIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKKwkgIGluY2x1ZGVfb3B0aW9uPS0tZXRhZ3MtaW5jbHVkZTsgXAorCSAgZW1wdHlfZml4PS47IFwKKwllbHNlIFwKKwkgIGluY2x1ZGVfb3B0aW9uPS0taW5jbHVkZTsgXAorCSAgZW1wdHlfZml4PTsgXAorCWZpOyBcCisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAorCSAgICB0ZXN0ICEgLWYgJCRzdWJkaXIvVEFHUyB8fCBcCisJICAgICAgdGFncz0iJCR0YWdzICQkaW5jbHVkZV9vcHRpb249JCRoZXJlLyQkc3ViZGlyL1RBR1MiOyBcCisJICBmaTsgXAorCWRvbmU7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKKwkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorCSAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAkJHRhZ3MgJCR1bmlxdWU7IFwKKwlmaQorY3RhZ3M6IENUQUdTCitDVEFHUzogY3RhZ3MtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwl0YWdzPTsgXAorCWhlcmU9YHB3ZGA7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKKwkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKKwl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiIFwKKwkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKKwkgICAgICQkdGFncyAkJHVuaXF1ZQorCitHVEFHUzoKKwloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorCSAgJiYgY2QgJCh0b3Bfc3JjZGlyKSBcCisJICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICQkaGVyZQorCitkaXN0Y2xlYW4tdGFnczoKKwktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLXBSICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtcFIgJCRkLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAkKGRpc3RkaXIpLyQkZmlsZSBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgJChkaXN0ZGlyKS8kJGZpbGUgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorCWxpc3Q9JyQoRElTVF9TVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAorCSAgICB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCisJICAgIHx8ICQoTUtESVJfUCkgIiQoZGlzdGRpcikvJCRzdWJkaXIiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICAgIGRpc3RkaXI9YCQoYW1fX2NkKSAkKGRpc3RkaXIpICYmIHB3ZGA7IFwKKwkgICAgdG9wX2Rpc3RkaXI9YCQoYW1fX2NkKSAkKHRvcF9kaXN0ZGlyKSAmJiBwd2RgOyBcCisJICAgIChjZCAkJHN1YmRpciAmJiBcCisJICAgICAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgXAorCSAgICAgICAgdG9wX2Rpc3RkaXI9IiQkdG9wX2Rpc3RkaXIiIFwKKwkgICAgICAgIGRpc3RkaXI9IiQkZGlzdGRpci8kJHN1YmRpciIgXAorCQlhbV9fcmVtb3ZlX2Rpc3RkaXI9OiBcCisJCWFtX19za2lwX2xlbmd0aF9jaGVjaz06IFwKKwkgICAgICAgIGRpc3RkaXIpIFwKKwkgICAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIFwKKwkgIHRvcF9kaXN0ZGlyPSIkKHRvcF9kaXN0ZGlyKSIgZGlzdGRpcj0iJChkaXN0ZGlyKSIgXAorCSAgZGlzdC1pbmZvCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stcmVjdXJzaXZlCithbGwtYW06IE1ha2VmaWxlICQoSU5GT19ERVBTKQoraW5zdGFsbGRpcnM6IGluc3RhbGxkaXJzLXJlY3Vyc2l2ZQoraW5zdGFsbGRpcnMtYW06CisJZm9yIGRpciBpbiAiJChERVNURElSKSQoaW5mb2RpcikiOyBkbyBcCisJICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCisJZG9uZQoraW5zdGFsbDogaW5zdGFsbC1yZWN1cnNpdmUKK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLXJlY3Vyc2l2ZQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtcmVjdXJzaXZlCit1bmluc3RhbGw6IHVuaW5zdGFsbC1yZWN1cnNpdmUKKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stcmVjdXJzaXZlCitpbnN0YWxsLXN0cmlwOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorCS10ZXN0IC16ICIkKE1BSU5UQUlORVJDTEVBTkZJTEVTKSIgfHwgcm0gLWYgJChNQUlOVEFJTkVSQ0xFQU5GSUxFUykKK2NsZWFuOiBjbGVhbi1yZWN1cnNpdmUKKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBtb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1yZWN1cnNpdmUKKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktcmVjdXJzaXZlCisKK2R2aS1hbTogJChEVklTKQorCitodG1sOiBodG1sLXJlY3Vyc2l2ZQorCitodG1sLWFtOiAkKEhUTUxTKQorCitpbmZvOiBpbmZvLXJlY3Vyc2l2ZQorCitpbmZvLWFtOiAkKElORk9fREVQUykKKworaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLXJlY3Vyc2l2ZQorCitpbnN0YWxsLWR2aS1hbTogJChEVklTKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQoZHZpZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQoZHZpZGlyKSIKKwlAbGlzdD0nJChEVklTKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKKwkgIGY9JChhbV9fc3RyaXBfZGlyKSBcCisJICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICckJGQkJHAnICckKERFU1RESVIpJChkdmlkaXIpLyQkZiciOyBcCisJICAkKElOU1RBTExfREFUQSkgIiQkZCQkcCIgIiQoREVTVERJUikkKGR2aWRpcikvJCRmIjsgXAorCWRvbmUKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtcmVjdXJzaXZlCisKK2luc3RhbGwtaHRtbC1hbTogJChIVE1MUykKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwl0ZXN0IC16ICIkKGh0bWxkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJChodG1sZGlyKSIKKwlAbGlzdD0nJChIVE1MUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgIiQkcCIgfHwgdGVzdCAtZCAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKKwkgIGY9JChhbV9fc3RyaXBfZGlyKSBcCisJICBpZiB0ZXN0IC1kICIkJGQkJHAiOyB0aGVuIFwKKwkgICAgZWNobyAiICQoTUtESVJfUCkgJyQoREVTVERJUikkKGh0bWxkaXIpLyQkZiciOyBcCisJICAgICQoTUtESVJfUCkgIiQoREVTVERJUikkKGh0bWxkaXIpLyQkZiIgfHwgZXhpdCAxOyBcCisJICAgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJyQkZCQkcCcvKiAnJChERVNURElSKSQoaHRtbGRpcikvJCRmJyI7IFwKKwkgICAgJChJTlNUQUxMX0RBVEEpICIkJGQkJHAiLyogIiQoREVTVERJUikkKGh0bWxkaXIpLyQkZiI7IFwKKwkgIGVsc2UgXAorCSAgICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICckJGQkJHAnICckKERFU1RESVIpJChodG1sZGlyKS8kJGYnIjsgXAorCSAgICAkKElOU1RBTExfREFUQSkgIiQkZCQkcCIgIiQoREVTVERJUikkKGh0bWxkaXIpLyQkZiI7IFwKKwkgIGZpOyBcCisJZG9uZQoraW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tcmVjdXJzaXZlCisKK2luc3RhbGwtaW5mby1hbTogJChJTkZPX0RFUFMpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJdGVzdCAteiAiJChpbmZvZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQoaW5mb2RpcikiCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKKwlsaXN0PSckKElORk9fREVQUyknOyBcCisJZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBcCisJICBjYXNlICQkZmlsZSBpbiBcCisJICAgICQoc3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCisJICBlc2FjOyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBmaWxlX2k9YGVjaG8gIiQkZmlsZSIgfCBzZWQgJ3N8XC5pbmZvJCR8fDtzfCQkfC5pfCdgOyBcCisJICBmb3IgaWZpbGUgaW4gJCRkLyQkZmlsZSAkJGQvJCRmaWxlLVswLTldICQkZC8kJGZpbGUtWzAtOV1bMC05XSBcCisgICAgICAgICAgICAgICAgICAgICAgICQkZC8kJGZpbGVfaVswLTldICQkZC8kJGZpbGVfaVswLTldWzAtOV0gOyBkbyBcCisJICAgIGlmIHRlc3QgLWYgJCRpZmlsZTsgdGhlbiBcCisJICAgICAgcmVsZmlsZT1gZWNobyAiJCRpZmlsZSIgfCBzZWQgJ3N8Xi4qL3x8J2A7IFwKKwkgICAgICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICckJGlmaWxlJyAnJChERVNURElSKSQoaW5mb2RpcikvJCRyZWxmaWxlJyI7IFwKKwkgICAgICAkKElOU1RBTExfREFUQSkgIiQkaWZpbGUiICIkKERFU1RESVIpJChpbmZvZGlyKS8kJHJlbGZpbGUiOyBcCisJICAgIGVsc2UgOiA7IGZpOyBcCisJICBkb25lOyBcCisJZG9uZQorCUAkKFBPU1RfSU5TVEFMTCkKKwlAaWYgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24gJiYgXAorCSAgICAgaW5zdGFsbC1pbmZvIC0tdmVyc2lvbiAyPiYxIHwgc2VkIDFxIHwgZ3JlcCAtaSAtdiBkZWJpYW4pID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCisJICBsaXN0PSckKElORk9fREVQUyknOyBcCisJICBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgcmVsZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAnc3xeLiovfHwnYDsgXAorCSAgICBlY2hvICIgaW5zdGFsbC1pbmZvIC0taW5mby1kaXI9JyQoREVTVERJUikkKGluZm9kaXIpJyAnJChERVNURElSKSQoaW5mb2RpcikvJCRyZWxmaWxlJyI7XAorCSAgICBpbnN0YWxsLWluZm8gLS1pbmZvLWRpcj0iJChERVNURElSKSQoaW5mb2RpcikiICIkKERFU1RESVIpJChpbmZvZGlyKS8kJHJlbGZpbGUiIHx8IDo7XAorCSAgZG9uZTsgXAorCWVsc2UgOiA7IGZpCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLXJlY3Vyc2l2ZQorCitpbnN0YWxsLXBkZi1hbTogJChQREZTKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQocGRmZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQocGRmZGlyKSIKKwlAbGlzdD0nJChQREZTKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKKwkgIGY9JChhbV9fc3RyaXBfZGlyKSBcCisJICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICckJGQkJHAnICckKERFU1RESVIpJChwZGZkaXIpLyQkZiciOyBcCisJICAkKElOU1RBTExfREFUQSkgIiQkZCQkcCIgIiQoREVTVERJUikkKHBkZmRpcikvJCRmIjsgXAorCWRvbmUKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtcmVjdXJzaXZlCisKK2luc3RhbGwtcHMtYW06ICQoUFNTKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQocHNkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJChwc2RpcikiCisJQGxpc3Q9JyQoUFNTKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKKwkgIGY9JChhbV9fc3RyaXBfZGlyKSBcCisJICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICckJGQkJHAnICckKERFU1RESVIpJChwc2RpcikvJCRmJyI7IFwKKwkgICQoSU5TVEFMTF9EQVRBKSAiJCRkJCRwIiAiJChERVNURElSKSQocHNkaXIpLyQkZiI7IFwKKwlkb25lCitpbnN0YWxsY2hlY2stYW06CisKK21haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1hbWluZm8gXAorCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtYWludGFpbmVyLWNsZWFuLXZ0aQorCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tcmVjdXJzaXZlCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1hbWluZm8gbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbCBtb3N0bHljbGVhbi12dGkKKworcGRmOiBwZGYtcmVjdXJzaXZlCisKK3BkZi1hbTogJChQREZTKQorCitwczogcHMtcmVjdXJzaXZlCisKK3BzLWFtOiAkKFBTUykKKwordW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtZHZpLWFtIHVuaW5zdGFsbC1odG1sLWFtIHVuaW5zdGFsbC1pbmZvLWFtIFwKKwl1bmluc3RhbGwtcGRmLWFtIHVuaW5zdGFsbC1wcy1hbQorCisuTUFLRTogJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUykgJChSRUNVUlNJVkVfVEFSR0VUUykgaW5zdGFsbC1hbSBcCisJaW5zdGFsbC1zdHJpcAorCisuUEhPTlk6ICQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpICQoUkVDVVJTSVZFX1RBUkdFVFMpIENUQUdTIEdUQUdTIFwKKwlhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBcCisJY3RhZ3MgY3RhZ3MtcmVjdXJzaXZlIGRpc3QtaW5mbyBkaXN0Y2xlYW4gZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIFwKKwlodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIFwKKwlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIFwKKwlpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gXAorCWluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBcCisJaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIFwKKwlpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgaW5zdGFsbGRpcnMtYW0gbWFpbnRhaW5lci1jbGVhbiBcCisJbWFpbnRhaW5lci1jbGVhbi1hbWluZm8gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIFwKKwltYWludGFpbmVyLWNsZWFuLXZ0aSBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1hbWluZm8gXAorCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBtb3N0bHljbGVhbi12dGkgcGRmIFwKKwlwZGYtYW0gcHMgcHMtYW0gdGFncyB0YWdzLXJlY3Vyc2l2ZSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIFwKKwl1bmluc3RhbGwtZHZpLWFtIHVuaW5zdGFsbC1odG1sLWFtIHVuaW5zdGFsbC1pbmZvLWFtIFwKKwl1bmluc3RhbGwtcGRmLWFtIHVuaW5zdGFsbC1wcy1hbQorCisKKy5QSE9OWTogdXBkYXRlcG8KK3VwZGF0ZXBvOgorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3IgZGlyIGluICQkbGlzdDsgZG8gXAorCQkkKE1BS0UpIC1DICIkJGRpciIgdXBkYXRlcG87IFwKKwlkb25lCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvZG9jL1VTRVIuanAgYi9wYXJ0ZWQtMS44LjcvZG9jL1VTRVIuanAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYyYWMwNwotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9kb2MvVVNFUi5qcApAQCAtMCwwICsxLDE3ODggQEAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQkJR05VIFBhcnRlZCDG/MvcuOzIxworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAgIHdyaXR0ZW4gYnkgQW5kcmV3IENsYXVzZW4gPGNsYXVzZW5AZ251Lm9yZz4KKyAgICAgIHRyYW5zbGF0ZWQgYnkgWW9zaGlub3JpIEsuIE9rdWppIDxva3VqaUBnbnUub3JnPgorCisgICAgICBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAgICBDb3B5cmlnaHQgKEMpIDIwMDEgWW9zaGlub3JpIEsuIE9rdWppCisKKyAgICAgIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAorICAgICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4xCisgICAgICBvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAgICAgIHdpdGggdGhlIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCB0aGUgbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZAorICAgICAgd2l0aCBubyBCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorICAgICAgZmlsZSwgQ09QWUlORy5ET0MuCisKKworzNy8oQorLS0tLS0tLS0KKworMQnGs8b+CisyCVBhcnRlZCCkzrvIzdEKKzMJQklPUyCkyKXVpaGhvKXgpaalp6WiCis0CaXWobylyKGmpe2hvKXACis1CaWqpdql7KG8pcalo6XzpbChpqW3pbmlxqXgCis2CaXVpaGlpKXroaalt6W5pcal4AorNwlMVk2hoqW9pdWlyKWmpaeloiBSQUlEIKTIIMS+wNzFqqTKpdWloaWkpeuhpqW3pbmlxqXgpNikzqWipa+lu6W5Cis4CaXHpaOluaWvoaalpKXhobyluKXzpbAKKzkJpLWk6aTKpOu+8MrzpMi02M+ipb2l1aXIpaalp6WiCisKKworMQnGs8b+CisxLjEJyazN16TKpb2l1aXIpaalp6WiCisxLjIJpbWl3aG8pciktaTspOul16XppcOlyKXbobyl4AorMS4zCaXppaSlu6XzpbkKKzEuNAmls6XzpdGlpKXrCisxLjUJR05VIFBhcnRlZCCl1qG8pcihpqXHpaOluaWvCisKKzIJUGFydGVkIKTOu8jN0QorMi4xCVBhcnRlZCCkzrzCudQKKzIuMgmlqqXXpbel56XzCisyLjMJpbOl3qXzpcmkzrO1zdcKKzIuNAmls6XepfOlyaTOvty62aTKsvLA4gorMi41CbzCzuMKKworMwlCSU9TIKTIpdWloaG8peClpqWnpaIKKzMuMQlQQyBCSU9TCiszLjIJTWFjaW50b3NoIE9wZW5GaXJtd2FyZQorMy4zCVBDOTggQklPUworCis0CaXWobylyKGmpe2hvKXACis0LjEJTElMTyAoTGludXggTG9hZGVyKQorNC4yCUdOVSBHUlVCIChHUmFuZCBVbmlmaWVkIEJvb3Rsb2FkZXIpCis0LjMJTVMgRE9ToaJNUyBXaW5kb3dzIDl4oaJNUyBXaW5kb3dzIE1FCis0LjQJTVMgV2luZG93cyBOVAorNC41CU1TIFdpbmRvd3MgMjAwMAorNC42CVF1aWsKKzQuNwlZYWJvb3QKKworNQmlqqXapeyhvKXGpaOl86Wwoaalt6W5pcal4AorNS4xCUdOVS9MaW51eCCkyCBGcmVlQlNECis1LjIJTVMgV2luZG93cyCkyCBPUy8yCis1LjMJTWFjT1MKKworNgml1aWhpaSl66GmpbeluaXGpeAKKzYuMQlFeHQyCis2LjIJRkFUMTYgpMggRkFUMzIKKzYuMwlSZWlzZXJmcworCis3CUxWTaGipb2l1aXIpaalp6WiIFJBSUQgpMggxL7A3MWqpMql1aWhpaSl66GmpbeluaXGpeCk2KTOpaKlr6W7pbkKKzcuMQmlvaXVpcilpqWnpaIgUkFJRCCk5CBMVk0gpdGhvKXGpaOlt6XnpfOkzrruwK4KKzcuMgmlvaXVpcilpqWnpaIgUkFJRCCk5CBMVk0gz8DN/aXcpeql5aG8peC+5aTOpdWloaWkpeuhpqW3pbmlxqXgweC67gorCis4CaXHpaOluaWvoaalpKXhobyluKXzpbAKKworOQmktaTppMqk677wyvOkyLTYz6KlvaXVpcilpqWnpaIKKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzEJxrPG/gorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0dOVSBQYXJ0ZWQgpM+l0aG8pcalo6W3peel86TkpL2kzr7lpMvD26SrpOyk66XVpaGlpKXrpbeluaXGpeCk8rruwK6kt6S/pOqhogorx8u0/qS3pL+k6qGiwuekraS1pPLK0bm5pLekv6TqoaK4obq6pLekv6TqoaLKo8C9pLmk66S/pOGkzqXXpe2lsKXppeCkx6S5oaMKKworv7ekt6Skpaql2qXsobylxqWjpfOlsKGmpbeluaXGpeCkzs7OsOik8rruwK6kt6S/pOqhoqXHpaOluaWvpM67yM3Ry6Gk8gorusbK1MCupLekv6TqoaKlz6G8pcmhpqXHpaOluaWvtNakx6XHobylv6TypbOl1KG8pLekv6TqoaKkv6SvpLWk86TOCiuls6XzpdSl5aG8pb+ky7erpOrK1qS3paSl86W5pcihvKXrpLWk7KS/tMS2raTyyqPAvaS5pOuh1qXHpaOluaWvoaYKK6WkpeGhvKW4pfOlsKHXpPK51KSmpM6ky6GipLOk7KTPzPKky86ppMGk3qS5oaMKKworpLOkzrLywOKkx6TPoaKl0aG8pcalo6W3peel86TkpdWloaWkpeult6W5pcal4KTLtNikuaTrw868saTysr7E6qS3pMakpKTepLmhoworpOKkt6SzpOyk6aTypOKkw6TIytm2r6S3pL+ksaTspNCholBhcnRpdGlvbiBtaW5pLUhPV1RPIKTyxsmk4KTIzsmkpKTHpLek56SmoaMKKworpL2k7KTPpK2kw6TIpKKkyqS/pM6lx6WjpbmlyKXqpdOl5aG8pbel56XzpMu03qTepOykxqSkpOukq6GisMqyvKSrpOkKK834zdGyxMe9pMekuToKKworCWh0dHA6Ly93d3cubGludXhkb2Mub3JnL0hPV1RPL21pbmkvUGFydGl0aW9uL2luZGV4Lmh0bWwKKworR05VIFBhcnRlZCCkz6XHobylv6TOwru8uqTOssTHvcCtpPK6x76uuMKky86xpOGk66TopKaky8Dft9ektaTspN6kt6S/oaMKK87jpKik0KGiKMXFzs/J1MKtpM6k6KSmpMopIL7js7KkzrTWpMulx6G8pb+kzsK7vLqkrLWvpK2k66TOpPLI8qSxpOsKK6TopKaky8Dft9ektaTsoaLCv6SvpM6wwsG0uKG6uqTyudSkpKTepLmho6S3pKukt6GiUGFydGVkIKTLpdClsKSspKKk6worpKuk4qS3pOykyqSkpM6kx6GivcXN16TKpdWloaWkpeuk8qXQpcOlr6WipcOl16S3pMakqqSvpNmkraTHpLmhoworCitHTlUgUGFydGVkIKTOpduhvKXgpdqhvKW4pM8gd3d3LmdudS5vcmcvc29mdHdhcmUvcGFydGVkIKTHpLmhoworZnRwLmdudS5vcmcvZ251L3BhcnRlZCCkq6TppcClpqXzpe2hvKXJpMekraTepLmhoworCitQYXJ0ZWQgpM6l4aWkpeql86Wwoaal6qW5pcikzyBwYXJ0ZWRAZ251Lm9yZyCkx6S5oaO52MbJpLmk66TLpM+hosLqzL6kyworodZzdWJzY3JpYmWh16TIvfGkpKTGIGJ1Zy1wYXJ0ZWQtcmVxdWVzdEBnbnUub3JnIKTLpeGhvKXrpPK90KS3pMakr6TApLWkpKGjCiu52MbJpM6+8MrzpOSloqG8paulpKXWpM+wyrK8pKuk6c34zdGyxMe9pMekuToKKworCWh0dHA6Ly9tYWlsLmdudS5vcmcvbWFpbG1hbi9saXN0aW5mby9idWctcGFydGVkCisKK6XQpbCkzsrzufCk8iBidWctcGFydGVkQGdudS5vcmcgpMvB96TDpMakr6TApLWkpKGjpdClsMrzufCk8sH3pOukyKStoaIKK0dOVSBQYXJ0ZWQgpM6l0KG8pbil56XzpPK03qThpMakr6TApLWkpKGjpOKkt6S9pM6l0KWwpKyl0aG8pcalo6W3peel86GmCiulxqG8pdal66TLtNi3uKS3pMakpKTrpMqk6aGivKGkzqWzpd6l86XJpKuk6aTOvdDOz6Tyxv6k7KTGpK+kwKS1pKQ6CisKKwkjIGZkaXNrIC9kZXYvaGRhIC1sCisJIyBmZGlzayAvZGV2L2hkYQorCUNvbW1hbmQgKG0gZm9yIGhlbHApOiBwCisJQ29tbWFuZCAobSBmb3IgaGVscCk6IHgKKwlFeHRlbmRlZCBjb21tYW5kIChtIGZvciBoZWxwKTogcAorCiu1pLPapMuks6TOpeqluaXIpMu99aSxpPK14aThpMakr6TApLWkpCAtIKTepLqkoqTKpL+kzrzBzOSkrKSzpLOkx8X6pKik6aTsCiukxqSkpMqkpKSzpMik8rPOx6ekt6TGpK+kwKS1pKSho6TipLey8sDipKzKrKSrpOmkyqSxpOyk0KGipOKkw6TIvuW86qSvCivA4szApMekraTrpOikpqGisuahuaTLtrWkqKTGpK+kwKS1pKSho7DsyMzFqqTKxa+z2DogpOKkt6SipMqkv6SsvfWksaTyCiu14aThpOvJrM3XpKykoqTrpMqk6aGipKKkyqS/ICik5MK+pM6/zaG5KSCkrL31pLGk8rXhpOGk68mszdekrKTKpKSk6KSmpMuhogorsr+kq6TyvaTAtaS5pOvJrM3XpKykoqTqpN6kuaGjCisKK6TepL+horLmobmkz6SipMqkv6TOsNW4q6TypMikxqTiyrmkraS/pK+716TDpMakpKTepLkgOi0pCisKKworMS4xCcmszdekyqW9pdWlyKWmpaelogorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICogZTJmc3Byb2dzIKXRpcOlsaG8pbikzrDsyfSkx6SipOuhomxpYnV1aWSho6TipLeks6TspPK7/aTDpMakpKTKpKSkyqTpoaIKKworCWh0dHA6Ly93ZWIubWl0LmVkdS90eXRzby93d3cvbGludXgvZTJmc3Byb2dzLmh0bWwKKworICAgIKSrpOnG/rzqpMekraTepLmhoworCiuk4qS3IFBhcnRlZKGipL2kt6TGIGUyZnNwcm9ncyCk8qWzpfOl0aWkpeukt6S/pKSkyqTpoaJlMmZzcHJvZ3MgpPIgIm1ha2UKK2luc3RhbGwiIKTIICJtYWtlIGluc3RhbGwtbGlicyIgpLmk68mszdekrKSipOuks6TIpMvD7bDVpLekxqSvpMCktaSkoaMKKworICAqIEdOVSBSZWFkbGluZSAox6Sw1SmhogorCisJZnRwOi8vZnRwLmdudS5vcmcvZ251L3JlYWRsaW5lCisKKyAgICCkq6Tpxv686qTHpK2k3qS5oaMKKworpOKktyBQYXJ0ZWQgpPKls6XzpdGlpKXrpLekxqSkpMahonJlYWRsaW5lIKTyu/2kw6TGpKSkyqSkpMqk6aGiUGFydGVkIKTOCityZWFkbGluZSCltaXdobylyKTyIC4vY29uZmlndXJlIKTYpM4gLS1kaXNhYmxlLXJlYWRsaW5lIKWqpdelt6XnpfOkx8y1uPoKK6TLpMekraTepLmhoworCisgICogpOKkt7nxut2yvaW1pd2hvKXIpKzLvqTepOyk66TKpOmhoqWzpfOl0aWkpevN0aTLIEdOVSBnZXR0ZXh0CisgICAgKKSipOukpKTPoaK437S5pb2l1aXIpaalp6WiKaGjCisKKwlmdHA6Ly9mdHAuZ251Lm9yZy9nbnUvZ2V0dGV4dAorCisKKzEuMgmltaXdobylyKS1pOyk66XXpemlw6XIpduhvKXgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK8u+pOCk6aSvpM+hoqSzpM6w7M33yb2krKS6pMOkyMH9wuekuaTrpLOkyKTyoaOk4qS3pLOk7KTppM6l16XppcOlyKXbobyl4AorpM6w7KTEpPK7/aTDpMakpKTKpKSkyqTpICi6o6TOpMiks6TtpM8gTGludXghKaGipdahvKXIoaalx6Wjpbmlr6Ssu8ikqKTepLkKKyilu6Wvpbel56XzIDEuNSCk8ruyvsgpCisKKyAgKiBMaW51eCA+PSAyLjAueCwgMi4yLnggKEFscGhhoaJ4ODYgUEOholBDOTihok1hY2ludG9zaCBQb3dlclBDoaJTdW4pCisKKworw+2w1TogR05VIGxpYmMgMi4xILDKvuWkrMmszdekx6S5oaOkqqS9pOmkryAtLWRpc2FibGUtbmxzIKWqpdelt6XnpfOk8rvIzdEKK6S5pOuks6TIpMuk6KTDpMahoqTipMOkyLjFpKSl0KG8pbil56XzpPLN+M3RpMekraTepLmhoyAow/A6IKSzpM7JrM3XwK2k8qTiCiukz6TkwNqk6s3upMikt6S/pMi716SkpN6kuaGjIKTkpOuk2aStpLOkyDogbGliYyAyLjAgpKzGsKSvpKuzzsenpLmk6yEpCisKKworMS4zCaXppaSlu6XzpbkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR05VIFBhcnRlZCCkz6XVpeqhvKW9pdWlyKWmpaeloqTHpKKk6qGiR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK6XQobyluKXnpfMypKzFrM3RpLWk7KTGpKSk3qS5oaOks6TspM8gUGFydGVkIMfbydvKqqTIpMik4qTLoaJDT1BZSU5HCiul1aWhpaSl66TLtN6k4aTppOykxqSkpOukz6S6pMekuaGjpOKkt6TKpLGk7KTQoaIKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQorpMu86rvmpPK98aSkpMakr6TApLWkpKGjCisKK8PtvOE6IGxpYnBhcnRlZCCkzyBHTlUgUGFydGVkIKTOsOzJ9KTIuc2kqKTppOykxqSkpN6kuaGjpL2k7KTPIEdOVSBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSCky6TopMOkxsrduO6ktaTspMakpKTepLmho6S9pOykzyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIChMR1BMKSCkzrK8pMekz6XqpeqhvKW5pLWk7KTGodikpKTepLuk86HZoaMKKworCisxLjQJpbOl86XRpaSl6worLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitHTlUgUGFydGVkIKTypbOl86XRpaSl66S3pL+ksaTspNChosTMvu+ks6TOpOikpqTLpLekxrnUpO+k7KTepLk6CisKKwkkIC4vY29uZmlndXJlCisJJCBtYWtlCisKK6S3pKukt6GiLi9jb25maWd1cmUgpMvC0KS3pMa/9LjEpM6lqqXXpbel56XzpKzN0bDVpLWk7KTGpKSk3qS5OgorCisgIC0td2l0aG91dC1yZWFkbGluZQkJcmVhZGxpbmUgpPK7yM3RpLek3qS7pPOho6SzpOykz6SipN6k6gorCQkJCcK/pK+kzqXppaSl1qXppeqkrM34zdGkx6StpMqkpKTopKakyqGiCisJCQkJttu13s3Rpcelo6W5pa+kyqTJpPK67sCupLmk66TOpMvK2M34pMekuaGjCisKKyAgLS1kaXNhYmxlLW5scwkJCcrsufG47KW1pd2hvKXIpPK86KTqvsOkt6TepLmho6SzpOykzworCQkJCWdsaWJjIKTOuMWkpKXQobyluKXnpfOk5Lbbtd7N0aXHpaOluaWvpMsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgxaykt6S/oaK1oce9pPK677i6pLekv2dsaWJjIKTIsOy976TLu8jN0QorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICCkuaTrpM6ky8rYzfikx6S5oaMKKworICAtLWRpc2FibGUtc2hhcmVkCQm2ps2tpemlpKXWpeml6qTyzLW4+qTLpLek3qS5oaOks6TspM+k4qS3CisJCQkJodaks6TvpLWk7KS/peyluKW5pb8gKHNwaWxsZWQgcmVnaXN0ZXIpodcKKwkJCQmky7TYpLmk66WzpfOl0aWkpeuhpqWopemhvKTyvPWksbzopMOkv6TpoaIKKwkJCQlHTlUgbGliYyCkzrjFpKSl0KG8pbil56XzpMiw7L3vpMu7yKSmpL+k4QorCQkJCaTLyazN16TLpMqk66SrpOKkt6TspN6ku6TzoaOl1qG8pcgvttu13s3RCisJCQkJpcelo6W5pa+ky6Tiza3N0aTHpLek56SmoaMKKworICAtLWVuYWJsZS1hbGwtc3RhdGljCQm0sMG0pMvAxcWqpMql0KWkpcql6qTIpLekxqGiUGFydGVkIKTOpdClpAorCQkJCaXKpeqk8rm9w9ukt6TepLmho6SzpOykz6XWobylyKGmpcelo6W5pa+kyworCQkJCcrYzfikx6GipMikpKSmpM6k4qGipKSkq6TKpOul6aWkpdal6aXqpOIKKwkJCQml1qG8pcihpqXHpaOluaWvvuWky6WkpfOluaXIobyl66S5pOvJrM3XpKwKKwkJCQmkyqSkpKuk6aTHpLkgKMK+pM6l16XtpbCl6aXgpKzJrM3XpMikuaTrpKsKKwkJCQmk4qS3pOykyqSkpLGkyS4uLimho8PtsNU6IHN0cmlwKDEpIKTiwfak6QorCQkJCaS7pL+kpKTHpLek56SmoaMKKworCisxLjUJR05VIFBhcnRlZCCl1qG8pcihpqXHpaOluaWvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dOVS9MaW51eCCk8qWkpfOluaXIobyl66S3pMakpKTKpKSl3qW3pfOkxyBQYXJ0ZWQgpPK8wrnUpLekv6SkoaKkoqTrpKSkz6GiCiul66G8pcihpqXRobylxqWjpbel56XzpOSl1qG8pcihpqXRobylxqWjpbel56XzpM7C56StpLWk8srRubmkt6S/pKSkyqTpoaIKK6XWobylyKGmpcelo6W5pa+k8rvIzdGkuaTryazN16SspKKk66THpLek56SmoaMKKworpdahvKXIoaalx6Wjpbmlr6TOpaSl4aG8pbikz7DKsrykq6Tpxv686rLEx72kx6S5OgorCisJZnRwOi8vZnRwLmdudS5vcmcvZ251L3BhcnRlZC9ib290ZGlzay9wYXJ0Ym9vdC5pbWcKKworvMK63aTLpdahvKXIoaalx6Wjpbmlr6Tyuu7ArqS5pOuky6TPoaIoR05VL0xpbnV4IKTHpM8pIKSzpKbCx6TBuf6k86THCiukr6TApLWkpDoKKworCSMgZGQgaWY9cGFydGJvb3QuaW1nIG9mPS9kZXYvZmQwIGJzPTE0NDBrCisKK6SipOukpKTPoaJET1MgpMcgUkFXUklURS5FWEUgpPK7yKTDpMakr6TApLWkpKGjCisKK8nUsb+ky6TioaKkvaTOpdahvKXIoaalx6Wjpbmlr6TPpKKk3qTqua3Iz7DPpM6lz6G8pcmlpqWnpaKk8qW1pd2hvKXIpLekxgorpKSk3qS7pPOho6TipLekoqTKpL+kzqXPobylyaGmpcelo6W5pa+krKW1pd2hvKXIpLWk7KTGpKSkyqSkpMqk6aGivKvKrMDszdEKK6TOpdahvKXIoaalx6Wjpbmlr6Tyuu6k68mszdekrKSipOukx6S3pOekpqGjcGFydGVkIKTOpdClpKXKpeqk8iBwYXJ0ZWQgpM4KK6XWobylyKGmpcelo6W5pa+kq6Tpwr6kzqXHpaOluaWvpNils6XUobykuaTrICjK/cuhpM+wyrK8pMfA4szAKSCks6TIpKykx6StCiuk3qS5pLehosK+pM6l1qG8pcihpqXHpaOluaWvpPK77qS3pL+k6qGivKvKrMDszdGkzqTipM6k8rrupOuks6TIpOKkx6StpN6kuaGjCiukoqTEpOmkqKTOIHBhcnRlZCCl1qG8pcihpqXHpaOluaWvpPK67qTrpL+k4aTOpbelp6XroaaluaWvpeql16XIoaJta3BhcnRlZAorpKzK2M34pKuk4qS3pOyk3qS7pPOho6S9pOykz6SzpLOkq6Tpxv686qTHpK2k3qS5OgorCisJZnRwOi8vZnRwLnR1eC5vcmcvcHViL3Blb3BsZS9rZW50LXJvYm90dGkvbWtwYXJ0ZWQKKworpdahvKXIoaalx6Wjpbmlr6SrpOnCvqTOpcelo6W5pa+k2CBwYXJ0ZWQgpPKls6XUobykuaTrpMukzzoKKygxKSBQYXJ0ZWQgpM6l1qG8pcihpqXHpaOluaWvpMe1r8awpLek3qS5oaMKKygyKSDCvqTOIChleHQyIKTOKSCl1aXtpcOl1KWjoaalx6Wjpbmlr6Tywd7G/qS3pN6kuaGjpOKkt6S9pOykrKXVpamhvKXepcOlyAorpLWk7KTGpKSkyqSkpMqk6aGiInBhcnRlZCAvZGV2L2ZkMCBta2xhYmVsIGxvb3AgbWtmcyAxIGV4dDIiIKTHCiul1aWhpaSl66W3pbmlxqXgpPK67sCupMekraTepLmhoworKDMpIKS9pM6l1aXtpcOl1KWjoaalx6Wjpbmlr6Typd6lpqXzpcikt6TepLmhoworKCJtb3VudCAtdCBleHQyIC9kZXYvZmQwIC9tbnQvZmxvcHB5IikKKyg0KSAvc2Jpbi9wYXJ0ZWQgpPKkvaTOpdWl7aXDpdSlo6TLpbOl1KG8pLek3qS5oaMKKygiY3AgL3NiaW4vcGFydGVkIC9tbnQvZmxvcHB5IikKKyg1KSAvbGliLyogpPKkvaTOpdWl7aXDpdSlo6TLpbOl1KG8pLek3qS5oaMgKCJjcCAvbGliLyogL21udC9mbG9wcHkpCisoNikgpL2kzqXVpe2lw6XUpaOk8qWipfOl3qWmpfOlyKS3pN6kuaGjICgidW1vdW50IC9tbnQvZmxvcHB5IikKKyg3KSCkoqTKpL+kzqXPobylyaGmpcelo6W5pa+k8qW1pd2hvKXIodikt6TGpKSk66HZpdahvKXIoaalx6Wjpbmlr6TyuKvJ1aSxCiuk3qS5oaMgKKXSpfOlyDogwuekraTKpd+l6aG8oaaltaWkpci+5aTHpLWk3qS2pN6kyqXHpaOluaXIpeql06Xlobylt6XnpfOkq6TpCiu227XezdGlx6Wjpbmlr6Tyw7Wkt6TGpN+k6KSmpMikt6TKpLWkpCkKKyg4KSCkoqTKpL+kzrbbtd7N0aXHpaOluaWvpMe1r8awpLek3qS5oaMgUGFydGVkIKTypbOl1KG8pLekv6XHpaOluaWvpPIKK6Xepaal86XIpLek3qS5oaMKKyg5KSBQYXJ0ZWQgpPK8wrnUpLek3qS5OgorCSMgY2QgL21udC9mbG9wcHkKKwkjIExEX0xJQlJBUllfUEFUSD0uIC4vcGFydGVkCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisyCVBhcnRlZCCkzrvIzdEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorpKKkpKTLpK+hoqXHpaOluaWvpM7KrLPkpM+09sqsuq6k38b+pMOkxqSkpN6kuaGjpLOk7KTPuc3OuKTLxv6k7KTryazN16TOCiukoqTroaKkv6SvpLWk86TOsNukyqTDpL+lt6W5pcal4LTWpMekzsHquN+67s3RpKykoqTrpKuk6aTHpLk6CisKKyAgKiBCSU9TIKTkpdWloaG8peClpqWnpaIgLSCl4aXipeqkzqXBpaelw6WvpMqkyaTyudSkpqGipKKkyqS/pM6ls6XzpdSl5aG8pb8KK8bipM4gUk9NIKXBpcOl16TLwcik37n+pN6k7KS/pdel7aWwpeml4KGjpLOkzqW3pbmlxqXgpM6l16XtpbCl6aXgpPIozcaw16TLpM8pCivK0bm5pMekraTepLuk86GjQklPUyCk5KXVpaGhvKXgpaalp6Wioaal16XtpbCl6aXgpM7O4zogQW1pQklPU6GiQXdhcmShogorUGhvZW5peKGiT3BlbkZpcm13YXJloaOks6TspOmkzqXXpe2lsKXppeCkzqSmpMGhorDspMSkwKSxpPK7/aTDpMakpKTrpMekt6TnpKahoworCisgICogpdahvKXIoaal7aG8pcAgLSC7yKSkpL+kpKWqpdql7KG8pcalo6XzpbChpqW3pbmlxqXgpPLBqsLypLmk66SzpMik8gorssTHvaTLpLehoqS9pM6lqqXapeyhvKXGpaOl86Wwoaalt6W5pcal4KType2hvKXJpLmk66XXpe2lsKXppeCho87jOiBMSUxPoaIKK0dSVUKhollhYm9vdKGiUXVpa6GjxsOky8qjv/SkzrzvzuCkzqWqpdql7KG8pcalo6XzpbChpqW3pbmlxqXgpPKlpKXzpbmlyKG8pesKK6S3pMakpKTrpMqk6aGiyqO/9KTOpdahvKXIoaal7aG8pcCk8qWkpfOluaXIobyl66S3pMakpKTrpKuk4qS3pOyk3qS7pPMKKworICAqIFBhcnRlZCCk8sawuu6ktaS7pOulqqXapeyhvKXGpaOl86Wwoaalt6W5pcal4CAoxfa6wqTPoaKks6TspM8gR05VL0xpbnV4Ciuky7DjpKSkoqTqpN6ku6TzKaGipL2kt6TGoaKkoqTKpL+krLvIzdGkuaTrwr6kzqWqpdql7KG8pcalo6XzpbChpqW3pbmlxqXgoaMKKworICAqIKXVpaGlpKXroaalt6W5pcal4KTOvO/O4CAtIKXHobylv6SspdGhvKXGpaOlt6XnpfOky7PKx7yktaTspOu86sPKoaMKK6SzpOyk6aTOzuOkzzogZXh0MqGiZmF0oaJoZnOhonJlaXNlcmZzoaOkt6TQpLek0LDbpMqk66XVpaGlpKXroaalt6W5pcal4KTOCiu8787gpPK03qTgpdGhvKXGpaOlt6XnpfOk8rv9pMOkxqSkpOukx6S3pOekpqGjCisKK1BhcnRlZCCkz77lta2kzqS/pK+ktaTzpM7ByKTfueek76S7pPKltaXdobylyKS3pMakqqTqoaK+rc3opM+k4qTDpMiltaXdobylyAorpLmk66THpLek56SmoaOkvaTspOakqKGiM77PpKwgQklPUyCky7TYpLekxqGiNL7PpKyl1qG8pcihpqXtobylwKTLpMSkpKTGoaIKKzW+z6Sspaql2qXsobylxqWjpfOlsKGmpbeluaXGpeCky6TEpKSkxqGipL2kt6TGoaI2vs+krKXVpaGlpKXroaalt6W5pcal4KTLCiukxKSkpMa98aSrpOykxqSkpN6kuaGjCisJpLOkzr7PpM8gUGFydGVkIKTOu8jN0cuhpPK1rb3SpLekxqSqpOqhoqSzpOykz6TJpPOkyqW3pbmlxqXgpPK7yKTDCiukxqSkpOukq6TLpKukq6TvpOmkuqGiwufCzsaxpLikx6S5oaOks6TOvs+k8sbJpN+hoqS9pLekxqGiM6GiNKGiNaTINr7PoaIKK6S9pOykvqTspPLGyaTgpNmkraTHpLmho6S3pKukt6GipKKkyqS/pMu02Le4pKykoqTrpbulr6W3peel86TApLGk8sbJpODJrM3XCiukrKSipOqk3qS5oaPO46SopNChoqTipLel1qG8pcihpqXtobylwKTIpLekxiBMSUxPIKTApLGk8rvIpMOkxqSkpOukyqTpoaIKK8azxv6kyKGiNL7PpM4gTElMTyCky7TYpLmk66W7pa+lt6XnpfOkwKSxpPLGyaTgyazN16SspKKk6qTepLmhoworCisKKzIuMQlQYXJ0ZWQgpM68wrnUCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUGFydGVkIKTPxvOkxKTOzc28sKGipbOl3qXzpcmhpqXppaSl86TIwtDPw7e/pPK7/aTDpMakpKTepLmho1BhcnRlZCCkz77vpMsKK6SzpM6k6KSmpMuzq7vPpLWk7KTrpNmkraTHpLk6CisKKwkjIHBhcnRlZCBERVZJQ0UKKworpLOks6THoaJERVZJQ0UgpM/K1L24pLmk66XPobylyaGmpcelo6W5pa+hpqXJpemlpKXWpMekuaGjKKTipLekoqTKpL+krMLVpLEKK6TGpKSk66TKpOmholBhcnRlZCCkz6TJpM6lx6XQpaSluaTyy76k86THpKSk66TOpKuhor/kwqykt6TopKakyLvupN+k3qS5oaMpCisKK6Wzpd6l86XJoaal6aWkpfOkzqXiobylyaTHpM+hoqSzpM645aTLsOykxKSrpL2k7LDKvuWkzqWzpd6l86XJpPLCs6SxpN6kuaGjCivO4zoKKworCSMgcGFydGVkIC9kZXYvc2RhIHJlc2l6ZSAxIDUyIDEwNCBta2ZzIDIgZmF0CisKKygtLWhlbHAgpM6k6KSmpMopIKWqpdelt6XnpfOkz6Wzpd6l86XJoaal6aWkpfO+5aTHpM6k37vYxOqkuaTrpLOkyKSspMekraTepLmhoworCivC0M/Dt7+l4qG8pcmkx6TPoaKls6XepfOlyaTPsOzF2aTLsOykxKS6pMSl16XtpfOl16XIpMvG/s7PpLWk7KTepLmho87jOgorCisJKHBhcnRlZCkgcmVzaXplIDEgNTIuMDAwNSAxMDQuNQorCShwYXJ0ZWQpIG1rZnMgMiBmYXQKKwor26PL5qTHpMqkpL7Kzqykz7X2pLWk7KTepLmho87jpKik0KGiodZwcmludKHXpM7C5aTvpOqky6HWcKHXpPKhoqHWcmVzaXplodcKK6TOwuWk76TqpMuh1nJlodek8sLHpMSks6TIpKykx6StpN6kuaGjpbOl3qXzpcmkz7HRuOykx6TioaKkoqTKpL+kzsrsufG47KTHpOIKK8LHpMG5/qThpN6kuSAopOKkt6SipMqkv6TOuMC47KSsy93M9aS1pOykxqSkpOukyqTpKaGjpLOkzqSzpMikrNujy+aktaTywLik3worvdCkuaSrpOKkt6TspN6ku6TzoaMKKworpN6kv6GipdGhvKXGpaOlt6XnpfOkzrDMw9aky8LQsf6kuaTrv/S7+qTLvq6/9LDMpPK72MTqpMekraTrpLOkyKTLw+2w1aS3pMYKK6SvpMCktaSkICil4aWspdClpKXIw7GwzKTHKaGjCisKKworMi4yCaWqpdelt6XnpfMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLWgsIC0taGVscCAgICAgICAgICAgICAgICAgICAgpdil66XXoaal4aXDpbuhvKW4pPLJvbyopLek3qS5CistaSwgLS1pbnRlcmFjdGl2ZSAgICAgICAgICAgICDJrM3XpMq+7MzMpMehoqXmobyltqTOtLO+xKTyusXCpaS3pN6kuQorLXMsIC0tc2NyaXB0ICAgICAgICAgICAgICAgICAgt+ikt6TGpeahvKW2pM60s77EpPLCpaS3pN6ku6TzCistdiwgLS12ZXJzaW9uICAgICAgICAgICAgICAgICCl0KG8pbil56XzpPLJvbyopLek3qS5CisKKworMi4zCaWzpd6l86XJpM6ztc3XCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2NoZWNrIE1JTk9SICAgICAgICAgICAgICAgICAgIKXVpaGlpKXrpbeluaXGpeCky7TKw7Gkyrihurqk8rnUpKSk3qS5CitjcCBbRlJPTS1ERVZJQ0VdIEZST00tTUlOT1IgVE8tTUlOT1IgICAgICCl1aWhpaSl66W3pbmlxqXgpPLCvqTOpdGhvKXGpaMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIKW3peel86TLpbOl1KG8pLek3qS5CitoZWxwIFtDT01NQU5EXSAgICAgICAgICAgICAgICCw7MjMxaqkyqXYpeul16SroaJDT01NQU5EIKTLtNikuaTrpdil66XXpPIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIMm9vKikt6TepLkKK21rbGFiZWwgTEFCRUwtVFlQRSAgICAgICAgICAgIL+3pLekpKXHpaOluaWvoaal6aXZpesopdGhvKXGpaOlt6XnpfOhpgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgpcahvKXWpesppPK67sCupLek3qS5Citta2ZzIE1JTk9SIEZTLVRZUEUgICAgICAgICAgICCl0aG8pcalo6W3peel8yBNSU5PUiC+5aTLpdWloaWkpeult6W5pcal4AorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlMtVFlQRSCk8rruwK6kt6TepLkKK21rcGFydCBQQVJULVRZUEUgW0ZTLVRZUEVdIFNUQVJUIEVORCAgICAgIKXRobylxqWjpbel56XzpPK67sCupLek3qS5Citta3BhcnRmcyBQQVJULVRZUEUgRlMtVFlQRSBTVEFSVCBFTkQgICAgICCl1aWhpaSl66GmpbeluaXGpeCkyLDsve+ky6XRobwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIKXGpaOlt6XnpfOk8rruwK6kt6TepLkKK21vdmUgTUlOT1IgU1RBUlQgRU5EICAgICAgICAgIKXRobylxqWjpbel56XzIE1JTk9SIKTysNzGsKS3pN6kuQorbmFtZSBNSU5PUiBOQU1FICAgICAgICAgICAgICAgpdGhvKXGpaOlt6XnpfMgTUlOT1IgpPIgTkFNRSCkyMy+ydWksaTepLkKK3ByaW50ICAgICAgICAgICAgICAgICAgICAgICAgIKXRobylxqWjpbel56XzoaalxqG8pdal66Tyyb28qKS3pN6kuQorcXVpdCAgICAgICAgICAgICAgICAgICAgICAgICAgpdel7aWwpeml4KTyvarOu6S3pN6kuQorcmVzaXplIE1JTk9SIFNUQVJUIEVORCAgICAgICAgpdGhvKXGpaOlt6XnpfMgTUlOT1IgvuWkzqXVpaGlpKXrpbeluaXGpeCkzgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgwuekraS1pPLK0bm5pLek3qS5CitybSBNSU5PUiAgICAgICAgICAgICAgICAgICAgICCl0aG8pcalo6W3peel8yBNSU5PUiCk8rrvvfykt6TepLkKK3NlbGVjdCBERVZJQ0UgICAgICAgICAgICAgICAgIMrUvbikuaTrpcel0KWkpbmk8sGqpNOk3qS5CitzZXQgTUlOT1IgRkxBRyBTVEFURSAgICAgICAgICCl0aG8pcalo6W3peel8yBNSU5PUiC+5aTOpdWl6aWwpPLK0bm5pLek3qS5CisKK0ZMQUcgpM8gYm9vdKGicm9vdKGic3dhcKGiaGlkZGVuoaJyYWlkoaJsdm2homxiYSCkzqSmpMGkzrDspMSkx6S5oaMKKworRlMtVFlQRSCkzyBleHQyoaJGQVShomhmc6GibGludXgtc3dhcKGibnRmc6GicmVpc2VyZnMgpM6kpqTBpM6w7KTEpMekuaGjCisKK0xBQkVMLVRZUEUgpM8gc3VuoaJic2Shom1hY6GibG9vcKGicGM5OKGibXNkb3OhomdwdCCkzqSmpMGkzrDspMSkx6S5oaMKKworTUlOT1IgpM8gTGludXggpMu7yKTvpOyk66XRobylxqWjpbel56XzyNa55qTHpLmhoworCitQQVJULVRZUEUgpM8gcHJpbWFyeaGibG9naWNhbKGiZXh0ZW5kZWQgpM6kpqTBpM6w7KTEpMekuaGjCiu08MvcIChwcmltYXJ5KSCl0aG8pcalo6W3peel86TPybi94MWqpMqhorPIxKXAraTOpMqkpKXRobylxqWjpbel56XzpMekuaGjCiuzyMSlIChleHRlbmRlZCkgpdGhvKXGpaOlt6XnpfOkz6S/pMDCvqTOpdGhvKXGpaOlt6XnpfOhosC1s86ky6TPz8DN/QorKGxvZ2ljYWwpIKXRobylxqWjpbel56XzoaKk8rTepOCkwKSxpM6l0aG8pcalo6W3peel86THpLmho6S1pOmky6TopOrAtbPOCiuky6TPoaKzyMSlpdGhvKXGpaOlt6XnpfOkz6XHpaOluaWvoaalyaXppaSl1qTOpOikpqTLub3D26S1pOykxqSqpOqhogoroda08Mvcodel0aG8pcalo6W3peel8yAoz8DN/aXRobylxqWjpbel56XzKSCkyKGix6Sw1aTHoaLKzKTOodazyMSlodcKK6XRobylxqWjpbel56XzpPLK3bv9pLehoqS9pOykrLrGpNO62cqspLWk7KTGIC4uLgorusfC56THpOKzyMSlpdGhvKXGpaOlt6XnpfOkz7DspMSkx6TKpLGk7KTQpMqk6aTKpK+kxqGisOykxKTOtPDL3AorpdGhvKXGpaOlt6XnpfOkzs7OsOik8sDqpOGk3qS5oaOk4qS3IG1zZG9zIKXHpaOluaWvoaal6aXZpeuk8rvIpMOkxgorpKSkyqSkpMqk6aGitPDL3KXRobylxqWjpbel56XzpMCksaTyu/2kxKSzpMikrKTHpK2k3qS5oaMKKworU1RBUlQgpMggRU5EIKTPpbyl7aSrpOm7z6TepOuhoqXhpayl0KWkpcikx8m9pLWk7KTepLmho76uv/Sk8rvIpMOkxqTiCiu5vaSkpN6ku6TzICjO4zogMTI1OC45KaGjCisKKworMi40CaWzpd6l86XJpM6+3LrZpMqy8sDiCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworMi40LjEJY2hlY2sKKy0tLS0tLS0tLS0tLS0KKwljaGVjayBNSU5PUiAgICAgICAgICAgICAgICAgICCl1aWhpaSl66W3pbmlxqXgpMu0ysOxpMq4obq6pPK51KSkpN6kuQorCitjaGVjayCls6XepfOlyaTPpdWloaWkpeult6W5pcal4KTLpail6aG8pKykoqTrpKukyaSmpKuk8rihurqkt6TepLmhoworCivO4zoKKworCShwYXJ0ZWQpIGNoZWNrIDEKKworCisyLjQuMgljcAorLS0tLS0tLS0tLQorCWNwIFtGUk9NLURFVklDRV0gRlJPTS1NSU5PUiBUTy1NSU5PUiAgICAgIKXVpaGlpKXrpbeluaXGpeCk8sK+pM4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgpdGhvKXGpaOlt6XnpfOky6WzpdShvKS3pN6kuQorCiul0aG8pcalo6W3peel86Tywr6kzqXRobylxqWjpbel56XzpMuls6XUobykt6GipL2kzszcxaqkzqXRobylxqWjpbel56XzpM4KK7i1obmkoqTDpL/D5r/IpPK67738pLek3qS5oaO6x73ppM4gTUlOT1IgyNa55qTPuLWkzqXRobylxqWjpbel56XzpPK72KS3oaIKK8bzyNbM3KTPzNzFqqTOpdGhvKXGpaOlt6XnpfOk8rvYpLek3qS5oaMKKworx6Sw1aTOpdGl6aXhobylv6TIpLekxqGipcel0KWkpbmk8s2/pKik66SzpMikrKTHpK2hoqS9pOykz8zcxaqkzgorpdGhvKXGpaOlt6XnpfOkrKTJpM6lx6XQpaSlub7lpMukoqTrpKuk8rvYxOqkt6TepLmhoworCiultaXdobylyKS1pOykxqSkpOul1aWhpaSl66W3pbmlxqXgOgorICAqIGV4dDIgKMzcxaqkzqXRobylxqWjpbel56XzpKy4taTOpdGhvKXGpaOlt6XnpfOk6KTqpOLC56StpKSkyKSkpKa+8rfvpMcpCisgICogRkFUCisgICogbGludXgtc3dhcAkozNzFqqXRobylxqWjpbel56XzpMukqqSxpOsgbWtmcyCkyMX5ssEpCisKK87jOgorCisJKHBhcnRlZCkgY3AgL2Rldi9oZGIgMiAzCisKKwkvZGV2L2hkYiCkzqXRobylxqWjpbel56XzMiAopMSk3qTqoaIvZGV2L2hkYjIpIKTyoaJQYXJ0ZWQgpKyl7aG8pckKKwmkuaTrpMikraTLu8ikw6S/pcel0KWkpbmkzqXRobylxqWjpbel56XzM6TLpbOl1KG8pLehoqXRobylxqWjpbel56XzMworCaTOsMrBsKTOxuLNxqTyx8uy9aS3pN6kuaGjCisKKworMi40LjMJaGVscAorLS0tLS0tLS0tLS0tCisJaGVscCBbQ09NTUFORF0gICAgICAgICAgICAgICAgsOzIzMWqpMql2KXrpdekq6GiQ09NTUFORCCky7TYpLmk6worCQkJCSAgICAgIKXYpeul16Tyyb28qKS3pN6kuQorCivO4zoKKworCShwYXJ0ZWQpIGhlbHAgcmVzaXplCisKKworMi40LjQJbWtsYWJlbAorLS0tLS0tLS0tLS0tLS0tCisJbWtsYWJlbCBMQUJFTC1UWVBFICAgICAgICAgICAgv7ekt6Skpcelo6W5pa+hpqXppdml6yil0aG8pcalo6W3peel86GmCisJCQkJICAgICAgpcahvKXWpesppPK67sCupLek3qS5CisKK7+3pLekpKXHpaOluaWvoaal6aXZpeuk8qGipb+lpKXXIExBQkVMLVRZUEUgpMe67sCupLek3qS5oaO/t6S3pKSlx6Wjpbmlr6GmCiul6aXZpeukz6XRobylxqWjpbel56XzpPKw7KTEpOK7/aTBpN6ku6TzoaOks6TOpbOl3qXzpcmkzyAoxMy+76TPKaGitbu90cWqpMsKK7jApMOkxqGipcehvKW/pPLHy7L1pLek3qS7pPOkrKGitPDL3MWqpMvN+M3RydTHvaTLpLekxqS3pN6kpKGipdGhvKXGpaOlt6XnpfMKK6TyvaTJ/KS5pOuky6TPoaJncGFydCAopbulr6W3peel8yA5IKTyu7K+yCkgpM6k6KSmpMql16XtpbCl6aXgpPLN+M3RpLmk68mszdcKK6SspKKk66THpLek56SmoaMou+SkzsPOpOu4wqTqKSBncGFydCCkzyBtc2RvcyClx6Wjpbmlr6Gmpeml2aXrpMukwKSxu8ikqKTepLmhoworsuahuaTOpLOkzrWhx72k8iBQYXJ0ZWQgpMuyw6SopOukq6TipLek7KTepLuk86GipKKk66SkpM+hoqS5pOuk2aStpMekt6TnpKahoworCivD7bzhOiCk36TzpMqhoqHWpcelo6W5pa+hpqXppdml66HXpMuw46SmuMDN1aTyu8ikpqTopKakx6S5IC0gsMqyvKTPwbSkxsaxpLgKK6TipM6kx6S5OiCl0aG8pcalo6W3peel86GmpcahvKXWpeuhoqXRobylxqWjpbel56Xzoaal3qXDpdeho6TepL+hong4NiCl3qW3pfMKK77lpM6l3qW5pb+hvKGmpdahvKXIoaal7KWzobylyaTPpdGhvKXGpaOlt6XnpfOhpqXGobyl1qXrpMjGsaS4pbulr6W/pMu8/aThpOkKK6TspMakpKTepLkgKFBhcnRlZCCk8rvIzdGkuaTrpM6ky6SzpM6ks6TIpPLDzqTryazN16TPpKKk6qTepLuk8ymhoworCiultaXdobylyKS1pOykxqSkpOulx6Wjpbmlr6Gmpeml2aXrOgorICAqIGJzZAorICAqIGxvb3AgKMS+wNzFqqTKpcelo6W5pa+hpqWipa+lu6W5KQorICAqIGdwdAorICAqIG1hYworICAqIG1zZG9zCisgICogcGM5OAorICAqIHN1bgorCivO4zoKKworCShwYXJ0ZWQpIG1rbGFiZWwgbXNkb3MKKworCisyLjQuNQlta2ZzCistLS0tLS0tLS0tLS0KKwlta2ZzIE1JTk9SIEZTLVRZUEUgICAgICAgICAgICCl0aG8pcalo6W3peel8yBNSU5PUiC+5aTLpdWloaWkpeult6W5pcal4AorCQkJCSAgICAgIEZTLVRZUEUgpPK67sCupLek3qS5CisKK6XRobylxqWjpbel56XzvuWky7+3pLekpKXVpaGlpKXrpbeluaXGpeCk8rruwK6kt6GipL2kzqXRobylxqWjpbel56XzpMsKK8K4ut+kuaTrpcehvKW/pPLBtKTGx8uy9aS3pN6kuaGjCisKK6W1pd2hvKXIpLWk7KTGpKSk66XVpaGlpKXroaalt6W5pcal4DoKKyAgKiBleHQyCisgICogRkFUCisgICogbGludXgtc3dhcAorCivO4zoKKworCShwYXJ0ZWQpIG1rZnMgMiBmYXQKKworCisyLjQuNglta3BhcnQKKy0tLS0tLS0tLS0tLS0tCisJbWtwYXJ0IFBBUlQtVFlQRSBbRlMtVFlQRV0gU1RBUlQgRU5EICAgICAgKL+3taykziml1aWhpaSl66W3pbmlxqXgpPIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAguu6k6aS6pMul0aG8pcalo6W3peel86Tyuu4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgwK6kt6TepLmho6XHobylv6GmpdGhvKXGpaMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgpbel56XzpMekz6GiRlMtVFlQRSCkrMmszdcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgpMiktaTspN6kuQorCiu/t6S3pKSl1aWhpaSl66W3pbmlxqXgpPK67sCuodiku6S6pMuh2aGiv7ekt6SkpdGhvKXGpaOlt6XnpfOk8rruwK6kt6TepLmhoworpLOk7KTPtvbBs6TLuu+9/KS3pMakt6TepMOkv6XRobylxqWjpbel56XzpPKy88n8pLmk66TOpMvM8qTLzqmkwaTepLmhoworCitQQVJULVRZUEUgpM+ks6TOpKakwaTOsOykxKTHpLk6IHByaW1hcnkgKLTwy9wpoaJleHRlbmRlZCAos8jEpSmhogorbG9naWNhbCAoz8DN/Smho2V4dGVuZGVkIKTIIGxvZ2ljYWwgpM8gbXNkb3Mgpcelo6W5pa+hpqXppdml66TLwtCkt6TGpM6k3woru8jN0aS3pN6kuaGjCisKK6W1pd2hvKXIpLWk7KTGpKSk66XVpaGlpKXroaalt6W5pcal4DoKKyAgKiBleHQyCisgICogRkFUCisgICogSEZTCisgICogbGludXgtc3dhcAorICAqIE5URlMKKyAgKiByZWlzZXJmcworCivO4zoKKworCShwYXJ0ZWQpIG1rcGFydCBsb2dpY2FsIGV4dDIgMC4wIDY5Mi4xCisKKworMi40LjcJbWtwYXJ0ZnMKKy0tLS0tLS0tLS0tLS0tLS0KKwlta3BhcnRmcyBQQVJULVRZUEUgRlMtVFlQRSBTVEFSVCBFTkQgICAgICCl1aWhpaSl66W3pbmlxqXgpMiw7L3vpMsKKwkJCQkJCSAgpdGhvKXGpaOlt6XnpfOk8rruwK6kt6TepLkKKworCiu/t6S3pKSl1aWhpaSl66W3pbmlxqXgydWkraTHv7ekt6SkpdGhvKXGpaOlt6XnpfOk8rruwK6kt6TepLmho7rvvfykt6TGCiukt6TepMOkv6XRobylxqWjpbel56XzpPKy88n8pLWku6TrpM6ky6GipLOkzqWzpd6l86XJpPK7yKTvpMqkpKTHpK+kwKS1pKQKKyjC5aTvpOqkyyBta3BhcnQgpPK7yKTDpMakr6TApLWkpCmhoworCitQQVJULVRZUEUgpM+ks6TOpKakwaTOsOykxKTHpLk6IHByaW1hcnkgKLTwy9wpoaJleHRlbmRlZCAos8jEpSmhogorbG9naWNhbCAoz8DN/Smho2V4dGVuZGVkIKTIIGxvZ2ljYWwgpM8gbXNkb3Mgpcelo6W5pa+hpqXppdml66TLwtCkt6TGpM6k3woru8jN0aS3pN6kuaGjCisKK6W1pd2hvKXIpLWk7KTGpKSk66XVpaGlpKXroaalt6W5pcal4DoKKyAgKiBleHQyCisgICogRkFUCisgICogbGludXgtc3dhcAorCivO4zoKKworCShwYXJ0ZWQpIG1rcGFydGZzIGxvZ2ljYWwgZXh0MiA0NDAgNjcwCisKKworMi40LjgJbW92ZQorLS0tLS0tLS0tLS0tCisJbW92ZSBNSU5PUiBTVEFSVCBbRU5EXSAgICAgICAgpdGhvKXGpaOlt6XnpfMgTUlOT1IgpPKw3MawpLek3qS5CisKK6XRobylxqWjpbel56XzpPKw3MawpLek3qS5oaMgw+06IG1vdmUgpM+36KS3pMal3qWkpcqhvMjWueak8srRubmkt6TepLuk86GjCisKK6TipLcgRU5EIKSsu9jE6qS1pOykyqSxpOyk0KGipdGhvKXGpaOlt6XnpfOkzsLnpK2ktaTPxrGkuKTepN6ky6TKpOqk3qS5oaMKKworpbWl3aG8pciktaTspMakpKTrpdWloaWkpeuhpqW3pbmlxqXgOgorICAqIGV4dDIgKMzcxaqkzqXRobylxqWjpbel56XzpKy4taTOpdGhvKXGpaOlt6XnpfOk6KTqwuekraSkpMikpKSmvvK376THKQorICAqIEZBVAorICAqIGxpbnV4LXN3YXAKKworCisyLjQuOQluYW1lCistLS0tLS0tLS0tLS0KKwluYW1lIE1JTk9SIE5BTUUgICAgICAgICAgICAgICCl0aG8pcalo6W3peel8yBNSU5PUiCk8iBOQU1FIKTIzL7J1aSxCisJCQkJICAgICAgpN6kuQorCiul0aG8pcalo6W3peel86TLzL7BsKTyydWksaTepLkgKE1hYyCkyCBQQzk4IKTApLEpoaMgzL7BsKTPpa+lpqWpobylyKTHsM+k4QorpN6kuaGjIM7jOgorCisJKHBhcnRlZCkgbmFtZSAyICdTZWNyZXQgRG9jdW1lbnRzJworCisKKzIuNC4xMAlwcmludAorLS0tLS0tLS0tLS0tLQorCXByaW50ICAgICAgICAgICAgICAgICAgICAgICAgIKXRobylxqWjpbel56XzoaalxqG8pdal66Tyyb28qKS3pN6kuQorCiul0aG8pcalo6W3peel86GmpcahvKXWpeuk8sm9vKikt6TepLmhoworCivO4zoKKworCShwYXJ0ZWQpIHByaW50CisJRGlzayBnZW9tZXRyeSBmb3IgL2Rldi9oZGE6IDAuMDAwLTI0NDUuNjc5IG1lZ2FieXRlcworCURpc2sgbGFiZWwgdHlwZTogbXNkb3MKKwlNaW5vciAgICBTdGFydCAgICAgICBFbmQgICAgIFR5cGUgICAgICBGaWxlc3lzdGVtICBGbGFncworCTEgICAgICAgICAgMC4wMzEgICAgOTQ1LjAwMCAgcHJpbWFyeSAgIEZBVCAgICAgICAgIGJvb3QsIGxiYQorCTIgICAgICAgIDk0NS4wMDAgICAyMzU4LjU2MiAgcHJpbWFyeSAgIGV4dDIKKwkzICAgICAgIDIzNTguNTYyICAgMjQ0NS4xODcgIHByaW1hcnkgICBsaW51eC1zd2FwCisKKworMi40LjExCXJlc2l6ZQorLS0tLS0tLS0tLS0tLS0KKwlyZXNpemUgTUlOT1IgU1RBUlQgRU5EICAgICAgICCl0aG8pcalo6W3peel8yBNSU5PUiC+5aTOpdWloaWkpesKKwkJCQkgICAgICClt6W5pcal4KTOwuekraS1pPLK0bm5pLek3qS5CisKK6XRobylxqWjpbel56XzpM7C56StpLWk8srRubmkt6TepLmhoyDD7TogcmVzaXplIKTPt+ikt6TGpd6lpKXKobzI1rnmpPLK0bm5Ciukt6TepLuk86Gjusak06Giw+06IL+3pLekpLPIxKWl0aG8pcalo6W3peel86SstLDBtKTLwbSkxqTOz8DN/aXRobylxqWjpbel56XzCiuk8rTepPOkx6SkpOu4wqTqoaKzyMSlpdGhvKXGpaOlt6XnpfOkzsLnpK2ktaTyytG5uaTHpK2k3qS5oaMKKworUGFydGVkIKTPpdWloaWkpeuhpqW3pbmlxqXgpKyh1qXHpdWl6aWwodektaTspMakpKTrpLOkyKTyzde14aS3pMqkpKSzpMikyworw+2w1aS3pMakr6TApLWkpCAoyazN16TKpOmholBhcnRlZCCkz7DCwbSky6XHobylv6TysNzGsKTHpK2k3qS5KaGjpcel1aXppbAKK6S5pOukzqTPu/601qTOzLXCzKTHpLmho7zZy+Kkt6TKpKSkxyEKKworpbWl3aG8pciktaTspMakpKTrpdWloaWkpeuhpqW3pbmlxqXgOgorICAqIGV4dDIgLSDAqbjCOiC/t6S3pKQgU1RBUlQgpM+4xaSkIFNUQVJUIKTIxrGkuKTHpMqksaTspNCkyqTqpN6ku6TzCisgICogRkFUCisgICogbGludXgtc3dhcAorCivO4zoKKworCShwYXJ0ZWQpIHJlc2l6ZSAzIDIwMCA4NTAKKworCisyLjQuMTIJcm0KKy0tLS0tLS0tLS0KKwlybSBNSU5PUiAgICAgICAgICAgICAgICAgICAgICCl0aG8pcalo6W3peel8yBNSU5PUiCk8rrvvfykt6TepLkKKworpdGhvKXGpaOlt6XnpfOk8r38te6kt6TepLmho6TipLe29sGzpMuks6TOpbOl3qXzpcmkx6XRobylxqWjpbel56XzpPIKK7rvvfykt6TGpLek3qTDpL+k6aGivOik6szhpLmkv6ThpMsgbWtwYXJ0IKTyu8ikw6TGpK+kwKS1pKQgKG1rcGFydGZzIKTHpM8KK6HYpKKk6qTepLuk86HZKaGjpN6kv6Giwru9/aTyvPWksaS/pcelo6W5pa+hpqXppdml66TysvPJ/KS1pLuk66S/pOGky6GiCitncGFydCCl16XtpbCl6aXgpPK7yKSmpLOkyKTissTHvaTHpLkgKDa+z6Tyu7K+yCmhoworCittc2RvcyClx6Wjpbmlr6Gmpeml2aXrpM6kv6ThpM7D7bDVOiCk4qS3z8DN/aXRobylxqWjpbel56XzpPK67738pLmk7KTQoaIKK6TopOrC56StpKSl3qWkpcqhvMjWueakzsnVpKSkv8/Azf2l0aG8pcalo6W3peel86TPwbTJ9MjWueakrMnVpLHEvqS1pOyk6worpMekt6TnpKaho87jpKik0KGipOKktyA2IKTOpd6lpKXKobzI1rnmpM7PwM39pdGhvKXGpaOlt6XnpfOk8rrvvfykuaTspNChogoryNa55qSsIDehojihojkgpMCkw6S/IGxvZ2ljYWwgpdGhvKXGpaOlt6XnpfOkz6S9pOykvqTsIDahojehojggpMukyqTqpN6kuaGjCiuks6TOpLOkyKTOpL+k4aTLoaIvZXRjL2ZzdGFiIKTyubm/t6S3pMqksaTspNCkyqTqpN6ku6TzoaMKKworzuM6CisKKwkocGFydGVkKSBybSAzCisKKworMi40LjEzCXNlbGVjdAorLS0tLS0tLS0tLS0tLS0KKwlzZWxlY3QgREVWSUNFICAgICAgICAgICAgICAgICDK1L24pLmk66XHpdClpKW5pPLBqsLypLek3qS5CisKK1BhcnRlZCCkrMrUvbikuaTrpcel0KWkpbmk8sGqwvKkt6TepLmho6XHpdClpKW5pM/EzL7vIExpbnV4IKTOpc+hvKXJoaalx6WjCiuluaWvoaalx6XQpaSluaSroaKkoqTrpKSkz6GipOKkt6XVpaGlpKXroaalt6W5pcal4KTYpM7EvsDcpaKlr6W7pbmkrM3XteGktQorpOyk66TKpOmhoqXRobylxqWjpbel56XzpOShoqW9pdWlyKWmpaeloiBSQUlEIKXHpdClpKW5oaJMVk0gz8DN/aXcpeql5aG8peAKK6THpLek56SmoaMKKworzuM6CisKKwkocGFydGVkKSBzZWxlY3QgL2Rldi9oZGIKKworCisyLjQuMTQJc2V0CistLS0tLS0tLS0tLQorCXNldCBNSU5PUiBGTEFHIFNUQVRFICAgICAgICAgIKXRobylxqWjpbel56XzIE1JTk9SIL7lpM6l1aXppbCk8gorCQkJCSAgICAgIMrRubmkt6TepLkKKworpdGhvKXGpaOlt6XnpfO+5aTOpdWl6aWwpPLK0bm5pLek3qS5oaOl1aXppbCkz6HWb26h16SrodZvZmah16TOpMmkwaTppKukxworpLmho6SzpOyk6aTOpdWl6aWwpM6w7Mn0oaKkoqTrpKSkz6GiwbTJ9KSsoaKkoqTKpL+krLvIpMOkxqSkpOulx6Wjpbmlr6GmpekKK6XZpeuky7H+pLikxqGizfjN0aTHpK2k66THpLek56SmOgorICAqIGJvb3QgKE1hY6GiTVNET1OholBDOTgpIC0gpL2kzqXRobylxqWjpbel56XzpKuk6bWvxrCkt6S/pLGk7KTQoaLNrbj6pMsKK6S1pOyk66TZpK2kx6S5oaOkvaTOsNXMo6TPpcelo6W5pa+hpqXppdml67TWpMektaTepLak3qTHpLmho01TRE9TIKXHpaOluaWvoaYKK6Xppdml66THpM+hoqS/pMCw7KTEpM6l0aG8pcalo6W3peel86TApLGkrLWvxrCyxMe9pMukyqTqxsCk3qS5oaOk4qS3pdGhvKXGpaMKK6W3peel86TLIExJTE8gpPKlpKXzpbmlyKG8peukt6TGpKSk66TKpOmhoqS9pM6l0aG8pcalo6W3peel86TPta/GsLLEx72kx6TKpLEKK6TspNCkyqTqpN6ku6TzoaNQQzk4IKXHpaOluaWvoaal6aXZpeukx6TPoaLBtKTGpM4gZXh0MiCl0aG8pcalo6W3peel86Ssta/GsAorssTHvaTHpMqksaTspNCkyqTqpN6ku6TzICiks6TspM8gUGFydGVkIKTLtq/AqaS1pOyk3qS5KaGjCisgICogbGJhIChNU0RPUykgLSBNU0RPU6GiTVMgV2luZG93cyA5eCCk5CBNUyBXaW5kb3dzIE1FIKTytPDL3KTIpLmk66Wqpdql7KG8CiulxqWjpfOlsKGmpbeluaXGpeCky6XqpculoiAoTEJBKSCl4qG8pcmk8rvIpKak6KSmpMu72LyopLmk66S/pOGky6GipLOkzqXVpemlsAorpM/Nrbj6pMukx6StpN6kuaGjCisgICogcm9vdCAoTWFjKSAtIKS9pM6l0aG8pcalo6W3peel86SsIExpbnV4IKTLpOikw6TGu8jN0aS1pOyk66XrobylyKGmpcel0KWkCiuluaTKpOmhoqSzpM6l1aXppbCk8s2tuPqky6S5pNmkraTHpLmhoworICAqIHN3YXAgKE1hYykgLSCkvaTOpdGhvKXGpaOlt6XnpfOkrCBMaW51eCCky6TopMOkxrvIzdGktaTspOuluaXvpcOl16Gmpcel0AorpaSluaTKpOmhoqSzpM6l1aXppbCk8s2tuPqky6S5pNmkraTHpLmhoworICAqIGhpZGRlbiAoTVNET1MsIFBDOTgpIC0gpd6lpKWvpe2lvaXVpcikzqWqpdql7KG8pcalo6XzpbChpqW3pbmlxqXgpKuk6QorpdGhvKXGpaOlt6XnpfOk8rGjpLmkv6ThpMuhoqSzpM6l1aXppbCk8s2tuPqky6THpK2k3qS5oaMKKyAgKiByYWlkIChNU0RPUykgLSBMaW51eCCky6S9pM6l0aG8pcalo6W3peel86Sspb2l1aXIpaalp6WiIFJBSUQgpdGhvKXGpaMKK6W3peel86THpKKk66SzpMik8ra1pKik66S/pOGky6GipLOkzqXVpemlsKTyza24+qTHpK2k3qS5oaMKKyAgKiBMVk0gKE1TRE9TKSAtIExpbnV4IKTLpL2kzqXRobylxqWjpbel56XzpKzKqs39pdyl6qXlobyl4KTHpKKk66SzpMik8ra1pKgKK6TrpL+k4aTLoaKks6TOpdWl6aWwpPLNrbj6pMukx6StpN6kuaGjCisKK3ByaW50IKWzpd6l86XJpM+zxqXRobylxqWjpbel56XzpMvC0KS3pMbNrbj6pMuktaTspMakpKTrpdWl6aWwwbSkxqTyyb28qKS3Ciuk3qS5oaMKKworzuM6CisKKwkocGFydGVkKSBzZXQgMSBib290IG9uCisKKworMi40LjE1CXF1aXQKKy0tLS0tLS0tLS0tLQorCXF1aXQgICAgICAgICAgICAgICAgICAgICAgICAgIKXXpe2lsKXppeCk8r2qzrukt6TepLkKKworUGFydGVkIKTyvarOu6S1pLuk3qS5oaNMaW51eCClq6G8pc2l66SsIFBhcnRlZCCkrKXHpaOluaWvpMvC0KS3pMa51KTDpL8KK8rRubmk8sPOpOukzqTPoaJQYXJ0ZWQgpKy9qs67pLekv7jlpMCksaTHpLmho6S3pKukt6TKpKyk6aGipbOl3qXzpcmk8sLHpMEKK7n+pPOkx7D6pK21r6SzpLWk7KTrytG5uaTPodikqqS9pOmkr6HZoaKls6XepfOlyaTywsekxqTQpLmksKS1pN6lx6Wjpbmlr6TLCivIv7HHpLWk7KTrpMekt6TnpKaho6THpOKhokxpbnV4IKTOpa2l46XDpbel5aTkpcelo6W5pa+kzqXPobylyaWmpaeloqGmCiulraXjpcOlt6XlpKyks6TspPLD2bHkpLWku6TrpKuk4qS3pOyk3qS7pPOhoworCisKKzIuNQm8ws7jCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworsMqyvKTOzuOkx6Giusek4qSipOqk1aTspL++9ba3pPLK8bTepLmk66TopKaky7vupN+k3qS5oaPO47OwpM+lx6Wjpbmlr6GmCiulpKXhobyluKXzpbCkx6GipL2k7KTPOL7PpMewt6TvpOykxqSkpN6kuaGjCisKKzIuNS4xCc7jIDEKKy0tLS0tLS0tLS0tLS0tLS0tCisKK771trcKKworpKKkyqS/pM6lx6Wjpbmlr6TOs+Sk6sX2pMakrLyhpM6k6KSmpMekoqTrpMi5zaSopMakr6TApLWkpDoKKworCShwYXJ0ZWQpIHByaW50CisJRGlzayBnZW9tZXRyeSBmb3IgL2Rldi9oZGE6IDAuMDAwLTEwMDAuMDAwIG1lZ2FieXRlcworCURpc2sgbGFiZWwgdHlwZTogbXNkb3MKKwlNaW5vciAgICBTdGFydCAgICAgICBFbmQgICAgIFR5cGUgICAgICBGaWxlc3lzdGVtICBGbGFncworCTEgICAgICAgICAgMC4wNjMgICAgNTAwLjAwMCAgcHJpbWFyeSAgIGV4dDIKKwkyICAgICAgICA1MDAuMDAwICAgIDYyNS4wMDAgIHByaW1hcnkgICBsaW51eC1zd2FwCisKK6S9pM6lx6Wjpbmlr6TOuse45aTLICil0aG8pcalo6W3peel8yAyIKTOuOWkyykgMzc1IE1iIKTOtvWkrc7OsOikrKSipOqk3qS5oaMKK6XRobylxqWjpbel56XzIDEgpM8gZXh0MiCl1aWhpaSl66GmpbeluaXGpeCk8rv9pMGhoqS9pOykrKXrobylyKGmpcel0KWkpbmkxworpLmho6XRobylxqWjpbel56XzIDIgpM+luaXvpcOl16Gmpcel0KWkpbmkx6S5oaMKKworpL2kzqXHpaOluaWvpM66x7jlpM629aStzs6w6KTypdGhvKXGpaOlt6XnpfMgMSC+5aTOpdWloaWkpeuhpqW3pbmlxqXgzdGky7vICiukpKS/pKukw6S/pMikt6TepLmhoworCiu86r3npM64q8vcCisKKygxKSCwyrK8pM7DyrOspMehoqXRobylxqWjpbel56XzIDEgvuWkzqXrobylyKGmpdWloaWkpeuhpqW3pbmlxqXgpMil0aG8pcaloworpbel56XzIDIgvuWkzqW5pe+lw6XXoaalx6XQpaSluaTOzr7K/aTyvaTAtaS3pN6kuaGjpL2k7KTmpKihoqTJpMGk6aTOpdGhvAorpcalo6W3peel86TypOK7yM3RpLekxqSkpMakz6SkpLGk3qS7pPOho8K/yqwgUGFydGVkIKTOpdahvKXIoaalx6Wjpbmlr6TyCiu7yM3RpLmk66TZpK2kx6S5ICilu6Wvpbel56XzIDEuNSCk8ruyvsgpoaOkvaTOpdahvKXIoaalx6Wjpbmlr6SrpOmholBhcnRlZAorpPK8wrnUpLek3qS5OgorCisJIyBwYXJ0ZWQgL2Rldi9oZGEKKworKDIpIKXRobylxqWjpbel56XzIDIgKKW5pe+lw6XXoaal0aG8pcalo6W3peel8ykgpPK9/LXupLek3qS5oaPJ4cTMoaKlx6G8pb8KK6Ssvuikw6TGpKSk66XRobylxqWjpbel56XzpPK67738pLekv6SvpM+kyqSkpMekt6TnpKaho6S3pKukt6GiodaluaXvpcOl16GmCiulqqXzodcgKKXepaal86XIKSCktaTspMakpKTKpKSkyKStoaKluaXvpcOl16GmpdGhvKXGpaOlt6XnpfOkz6XHobylv6TytN6k8worpMekpKTepLuk86TOpMehoqS9pOyk8r38te6kt6GiwuWk76TqpM6luaXvpcOl16GmpdGhvKXGpaOlt6XnpfOk8rjlpMe67qTrpLOkyAorpKykx6StpN6kuaGjCisKKwkocGFydGVkKSBybSAyCisKKygzKSCkvaTOpcelo6W5pa+kzrrHuOWky7+3pLekpKW5pe+lw6XXoaal0aG8pcalo6W3peel86Tyuu7ArqS3pN6kuToKKworCShwYXJ0ZWQpIG1rcGFydGZzIHByaW1hcnkgbGludXgtc3dhcCA4NzUgOTk5LjkKKwkocGFydGVkKSBwcmludAorCURpc2sgZ2VvbWV0cnkgZm9yIC9kZXYvaGRhOiAwLjAwMC0xMDAwLjAwMCBtZWdhYnl0ZXMKKwlEaXNrIGxhYmVsIHR5cGU6IG1zZG9zCisJTWlub3IgICAgU3RhcnQgICAgICAgRW5kICAgICBUeXBlICAgICAgRmlsZXN5c3RlbSAgRmxhZ3MKKwkxICAgICAgICAgIDAuMDYzICAgIDUwMC4wMDAgIHByaW1hcnkgICBleHQyCisJMiAgICAgICAgODc1LjAwMCAgIDEwMDAuMDAwICBwcmltYXJ5ICAgbGludXgtc3dhcAorCisoNCkgtuHA3KS3pL+29aStzs6w6KTLuP6kq6TDpMahoqXRobylxqWjpbel56XzIDEgpPLB/cLnpLWku6TepLk6CisKKwkocGFydGVkKSByZXNpemUgMSAwLjA2MyA4NzQuOQorCiu9qqTvpOqk3qS3pL8hCisKKwkocGFydGVkKSBwcmludAorCURpc2sgZ2VvbWV0cnkgZm9yIC9kZXYvaGRhOiAwLjAwMC0xMDAwLjAwMCBtZWdhYnl0ZXMKKwlEaXNrIGxhYmVsIHR5cGU6IG1zZG9zCisJTWlub3IgICAgU3RhcnQgICAgICAgRW5kICAgICBUeXBlICAgICAgRmlsZXN5c3RlbSAgRmxhZ3MKKwkxICAgICAgICAgIDAuMDYzICAgIDg3NC45OTkgIHByaW1hcnkgICBleHQyCisJMiAgICAgICAgODc1LjAwMCAgIDEwMDAuMDAwICBwcmltYXJ5ICAgbGludXgtc3dhcAorCisKKzIuNS4yCc7jIDIKKy0tLS0tLS0tLS0tLS0tLS0tCisKK771trcKKworpKKkyqS/pM6lx6Wjpbmlr6TOs+Sk6rC4pMakrKSzpM6k6KSmpMukyqTDpMakpKTrpMi5zaSopMakr6TApLWkpDoKKworCURpc2sgZ2VvbWV0cnkgZm9yIC9kZXYvaGRhOiAwLTgwNjMuNSBtZWdhYnl0ZXMKKwlEaXNrIGxhYmVsIHR5cGU6IG1zZG9zCisJTWlub3IgICBTdGFydCAgICAgRW5kICAgIFR5cGUgICAgICAgICAgICBGaWxlc3lzdGVtICAgICBGbGFncworCTEgICAgICAgICAgMC4wICAgICAyMy41ICBwcmltYXJ5ICAgICAgICAgZXh0MiAgICAgICAgICAgYm9vdAorCTIgICAgICAgICAyMy41ICAgODA1Ni4wICBleHRlbmRlZAorCTUgICAgICAgICAyMy42ICAgMzU0NS42ICBsb2dpY2FsICAgICAgICAgZXh0MgorCTYgICAgICAgMzU0NS42ICAgNzA2Ny43ICBsb2dpY2FsICAgICAgICAgZXh0MgorCTcgICAgICAgNzA2Ny43ICAgNzMyNi41ICBsb2dpY2FsICAgICAgICAgZXh0MgorCTggICAgICAgNzMyNi41ICAgNzU4NS40ICBsb2dpY2FsICAgICAgICAgZXh0MgorCTkgICAgICAgNzU4NS40ICAgNzg0NC4yICBsb2dpY2FsICAgICAgICAgbGludXgtc3dhcAorCisJRmlsZXN5c3RlbSAgICAgICAgICAgIFNpemUgIFVzZWQgQXZhaWwgVXNlJSBNb3VudGVkIG9uCisJL2Rldi9oZGE4ICAgICAgICAgICAgIDI1MU0gICAzMU0gIDIwN00gIDEzJSAvCisJL2Rldi9oZGExICAgICAgICAgICAgICAyM00gIDIuNE0gICAxOU0gIDExJSAvYm9vdAorCS9kZXYvaGRhNSAgICAgICAgICAgICAzLjRHICA1NzdNICAyLjdHICAxOCUgL3VzcgorCS9kZXYvaGRhNiAgICAgICAgICAgICAzLjRHICAyODlNICAyLjlHICAgOSUgL2hvbWUKKwkvZGV2L2hkYTcgICAgICAgICAgICAgMjUxTSAgIDEyTSAgMjI2TSAgIDUlIC92YXIKKworL2hvbWUgKC9kZXYvaGRhNikgpM7OzrDopPK7yKTDpMahoi92YXIgpdGhvKXGpaOlt6XnpfMgKC9kZXYvaGRhNykgpPIgMUdCIKTLCivB/aTkpLekv6SrpMOkv6TIpLek3qS5oaMKKworUGFydGVkIKTHpdGhvKXGpaOlt6XnpfOkzsLnpK2ktaTyytG5uaS5pOukzqTLoaJyZXNpemUgpbOl3qXzpcmk8rvIzdGkt6TepLk6CisKKwkocGFydGVkKSByZXNpemUgUEFSVElUSU9OX05VTUJFUiBORVdfU1RBUlQgTkVXX0VORAorCitORVdfU1RBUlQgpM8gKKSipKSky6SvKSBleHQyIKXRobylxqWjpbel56XzpMekz7DKwbCkzrOru8/FwKTIxrGkuKTHpMqksaTspNAKK6TKpOqk3qS7pPOho6TApKuk6aGipLOkzrzqwrOkraTPpKukyqTqyqO7qKTLpMqk6qTepLmho6S9pOykz7LEx72kx6TPpKKk6qTepLkKK6SsIDotKQorCivD7TogpOKktyAoRkFUIKXRobylxqWjpbel56XzpMekx6StpOuk6KSmpMspIFBhcnRlZCCkrCBleHQyIKXRobylxqWjpbel56XzpM4KK7Oru8/FwKTOsNzGsKTypbWl3aG8pcikt6TGpKSkv6TppMqk6aGipL2k7KTPvOik66TLwq2k6qTKpKukw6S/pMekt6TnpKY6CisKKwkocGFydGVkKSByZXNpemUgNiAzNTQ1LjYgNjIwMAorCShwYXJ0ZWQpIHJlc2l6ZSA3IDYyMDAgNzMyNi41CisKK7zqveekzriry9w6CisKKygxKSAvaG9tZSCl0aG8pcalo6W3peel8yAoL2Rldi9oZGE2KSCk8iA1MDBNQiC9zKThpN6kuToKKworCSMgcGFydGVkIC9kZXYvaGRhCisJKHBhcnRlZCkgcmVzaXplIDYgMzU0NS42IDYyMDAKKworKDIpIKS9pM6+7L3qpMu/t6S3pKSl0aG8pcalo6W3peel86Tyuu7ArqS3pN6kuaGjpLOk7KTPuse9qsWqpMukzyAvdmFyIKTLCiukyqTrpMiks6TtpMekuaGjpLOkzr+3pLekpKXRobylxqWjpbel56XzpM8gMTAgpMjI1rnmydWksaS1pOyk3qS5oaMKKworCShwYXJ0ZWQpIG1rcGFydGZzIGxvZ2ljYWwgZXh0MiA2MjAwIDcwNjcuNworCisoMykgsMrBsKTOIC92YXIgpdGhvKXGpaOlt6XnpfMgKC9kZXYvaGRhNykgpPK/t6S3pKTK/SAoL2Rldi9oZGExMCkgpNils6XUobwKK6S3pN6kuaGjCisKKwkocGFydGVkKSBjcCA3IDEwCisKKyg0KSCwysGwpM4gL3ZhciCk8rrvvfykt6TepLmhoworCisgICAgICAgIChwYXJ0ZWQpIHJtIDcKKworCiuks6TOu/7FwKTHoaLBtKTGpM4gNyCwyrnfpM7PwM39pdGhvKXGpaOlt6XnpfOkz8jWueakrMrRpO+kw6S/pMiks6TtpMekuaGjCiukwKSrpOmhojihojmhojEwIKTPpL2k7KS+pOwgN6GiOKGiOSCky6TKpOqk3qS5oaMKKworpLOkzsjWueakzrrGs+Sk6sX2pMakz6GipLOkzqXHpaOluaWvvuWkzrK/pOmkq6TOpdGhvKXGpaOlt6XnpfOkrKXepaal86XICiuktaTspMakpKTrtNaky6TPudSk76TspN6ku6TzICiks6TspM+6xrWvxrCkuaTrpMikraTLta+kraTepLkpoaOkvaTOt9m58AorpeGlw6W7obyluKSsuOykw6TGpKSk66TOpM+ks6TOpLOkyKTHpLmho6TApKuk6aGipOKkt6SzpM6l4aXDpbuhvKW4pPK89aSxCiu86KTDpL+kyqTpoaJQYXJ0ZWQgpMuk6KTDpMaxxrbBpPLNv6SopOmk7KS/IChQYXJ0ZWQgpMuk6KTDpMbC56StpLWkrMrRubkKK6S1pOykv6TqoaK67sCupLWk7KS/pOqkt6S/KSCl1aWhpaSl66W3pbmlxqXgpPKhorrGta/GsLDKwbCky6Xepaal86XIpLek6KSmCiukyLvupN+kxqTPwOTC0KSkpLGk3qS7pPOhoworCisoNSkgKLqjpMekzyA5IKTIyNa55snVpLGk6aTspL8pIL+3pLekpCAvdmFyIKXRobylxqWjpbel56XzpM7C56StpLWk8qGiCiuwysGwpM4gL3ZhciCl0aG8pcalo6W3peel86TyxMmyw6S5pOuks6TIpMehosrRubmkt6TepLk6CisJKHBhcnRlZCkgcmVzaXplIDkgNjIwMCA3MzI2LjUKKwkocGFydGVkKSBxdWl0CisJV2FybmluZzogVGhlIGtlcm5lbCB3YXMgdW5hYmxlIHRvIHJlLXJlYWQgdGhlIHBhcnRpdGlvbiB0YWJsZSBvbgorCS9kZXYvaGRhIChEZXZpY2Ugb3IgcmVzb3VyY2UgYnVzeSkuICBUaGlzIG1lYW5zIExpbnV4IGtub3dzIG5vdGhpbmcKKwlhYm91dCBhbnkgbW9kaWZpY2F0aW9ucyB5b3UgbWFkZS4gIFlvdSBzaG91bGQgcmVib290IHlvdXIgY29tcHV0ZXIKKwliZWZvcmUgZG9pbmcgYW55dGhpbmcgd2l0aCAvZGV2L2hkYS4KKworKDYpIKXRobylxqWjpbel56XzyNa55qSsytG5uaS1pOykv6TOpMehoi9ldGMvZnN0YWIgpPK5ub+3pLekyqSxpOyk0KTKpOoKK6TepLuk86GjpeuhvKXIoaalx6XQpaSluaTPIFBhcnRlZCCky6TopMOkxrHGtsGktaTspMqkq6TDpL+kzqTHoaKks6TspM8KK7rGta/GsKS5pOvBsKTLudSkqKTepLmhoyik4qS3IFBhcnRlZCCk8rvIpMOkxqXrobylyKGmpcel0KWkpbmky7K/pKuk8gorpLekv6SkpM6kx6SipOyk0KGipdahvKXIoaalx6Wjpbmlr6Tyu8ikpsmszdekrKSipOqk3qS5KaGjCisKK6TipLe6o6TepMekziAvZXRjL2ZzdGFiIKSspLOk86TKtLakuKTApMOkv6TpOgorCisvZGV2L2hkYTggICAgICAgICAgICAgICAvICAgICAgICAgICAgICAgICAgICAgICBleHQyICAgIGRlZmF1bHRzICAgICAgICAxIDEKKy9kZXYvaGRhMSAgICAgICAgICAgICAgIC9ib290ICAgICAgICAgICAgICAgICAgIGV4dDIgICAgZGVmYXVsdHMgICAgICAgIDEgMgorL2Rldi9oZGE2ICAvaG9tZSAgZXh0MiAgZ3JwcXVvdGEsdXNycXVvdGEgIDAgIDIKKy9kZXYvY2Ryb20gICAgICAgICAgICAgIC9tbnQvY2Ryb20gICAgICAgICAgICAgIGlzbzk2NjAgbm9hdXRvLG93bmVyLHJvIDAgMAorL2Rldi9oZGE1ICAgICAgICAgICAgICAgL3VzciAgICAgICAgICAgICAgICAgICAgZXh0MiAgICBkZWZhdWx0cyAgICAgICAgMSAyCisvZGV2L2hkYTcgIC92YXIgIGV4dDIgIGdycHF1b3RhLHVzcnF1b3RhICAwICAyCisvZGV2L2ZkMCAgICAgICAgICAgICAgICAvbW50L2Zsb3BweSAgICAgICAgICAgICBhdXRvICAgIG5vYXV0byxvd25lciAgICAwIDAKK25vbmUgICAgICAgICAgICAgICAgICAgIC9wcm9jICAgICAgICAgICAgICAgICAgIHByb2MgICAgZGVmYXVsdHMgICAgICAgIDAgMAorbm9uZSAgICAgICAgICAgICAgICAgICAgL2Rldi9wdHMgICAgICAgICAgICAgICAgZGV2cHRzICBnaWQ9NSxtb2RlPTYyMCAgMCAwCisvZGV2L2hkYTkgICAgICAgICAgICAgICBzd2FwICAgICAgICAgICAgICAgICAgICBzd2FwICAgIGRlZmF1bHRzICAgICAgICAwIDAKKworv/S51KTyytG5uaS5pOvJrM3XpKykoqTqpN6kuToKKyAgKiAvdmFyIKTPuqOkx6TPIC9kZXYvaGRhOSCkx6S5ICi/t6S3pKSl0aG8pcalo6W3peel86TLpbOl1KG8pLekv6SrpOkpCisgICogL2Rldi9oZGE4ICil66G8pcihpqXHpdClpKW5KSCkzyAvZGV2L2hkYTcgpMvI1rnmpKzK0bm5pLWk7KTGpKSk3qS5CisgICogL2Rldi9oZGE5ICiluaXvpcOl16Gmpcel0KWkpbkpIKTPIC9kZXYvaGRhOCCky8jWueakrMrRubmktaTspMakpKTepLkKKworv7ekt6SkIC9ldGMvZnN0YWIgpM+ks6TzpMq0tqS4pMekuToKKworL2Rldi9oZGE3ICAgICAgICAgICAgICAgLyAgICAgICAgICAgICAgICAgICAgICAgZXh0MiAgICBkZWZhdWx0cyAgICAgICAgMSAxCisvZGV2L2hkYTEgICAgICAgICAgICAgICAvYm9vdCAgICAgICAgICAgICAgICAgICBleHQyICAgIGRlZmF1bHRzICAgICAgICAxIDIKKy9kZXYvaGRhNiAgL2hvbWUgIGV4dDIgIGdycHF1b3RhLHVzcnF1b3RhICAwICAyCisvZGV2L2Nkcm9tICAgICAgICAgICAgICAvbW50L2Nkcm9tICAgICAgICAgICAgICBpc285NjYwIG5vYXV0byxvd25lcixybyAwIDAKKy9kZXYvaGRhNSAgICAgICAgICAgICAgIC91c3IgICAgICAgICAgICAgICAgICAgIGV4dDIgICAgZGVmYXVsdHMgICAgICAgIDEgMgorL2Rldi9oZGE5ICAvdmFyICBleHQyICBncnBxdW90YSx1c3JxdW90YSAgMCAgMgorL2Rldi9mZDAgICAgICAgICAgICAgICAgL21udC9mbG9wcHkgICAgICAgICAgICAgYXV0byAgICBub2F1dG8sb3duZXIgICAgMCAwCitub25lICAgICAgICAgICAgICAgICAgICAvcHJvYyAgICAgICAgICAgICAgICAgICBwcm9jICAgIGRlZmF1bHRzICAgICAgICAwIDAKK25vbmUgICAgICAgICAgICAgICAgICAgIC9kZXYvcHRzICAgICAgICAgICAgICAgIGRldnB0cyAgZ2lkPTUsbW9kZT02MjAgIDAgMAorL2Rldi9oZGE4ICAgICAgICAgICAgICAgc3dhcCAgICAgICAgICAgICAgICAgICAgc3dhcCAgICBkZWZhdWx0cyAgICAgICAgMCAwCisKKyg3KSC6xrWvxrCkt6TGpK+kwKS1pKSho6SzpOykx6SqpLek3qSkoaoKKworW8z1w+06IKS3pKukt6SzpOykwKTIoaK4taG5IC92YXIgpM6koqTDpL+kyKSzpO2kz8yku8jN0aTOpN6k3rvEpLWk7KTGpLek3qSmCiukzqTHoaKkwaTnpMOkyKTipMOkv6SkpMqkpLWkpKykuaTrLi4uIKS/pMOkv6TONSWkt6Sru8ikw6TGpKSkyqSkpPOkwKSrpOmhogordGFyIKTHuMek4aTGoaIvaG9tZSCky6THpOLD1qSkpMikpKTGoaKl0aG8pcalo6W3peel86Tyuu6k6sS+pLekxqGidGFyCiukx8n8uLWkt6S/yv2krM7JpKSkzqTHpM+hqV0KKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzMJQklPUyCkyKXVpaGhvKXgpaalp6WiCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK6HWQklPU6HXICi08Mvcxv690M7PpbeluaXGpeApIKTIodal1aWhobyl4KWmpaeloqHXpM/GsaS4pOKkzqTysNXMo6S3pN6kuaGjCiukt6SrpLeholBDIKTkIFBDOTggpMu08KTFpK+ls6XzpdSl5aG8pb+kx6TPoaJCSU9TIKTIpKSkprjAzdWkzsr9pKzJ4cTMpMekuaGjCitBcHBsZSBNYWNpbnRvc2ggpOQgU3VuIKTOpbOl86XUpeWhvKW/pMekz6Giodal1aWhobyl4KWmpaeloqHXpMikpKSmuMDN1aTOyv0KK6SsyeHEzKTHpLmhoworCUJJT1MgpOSl1aWhobyl4KWmpaeloqTOpdel7aWwpeml4KTPpbOl86XUpeWhvKW/xuLJ9KTOIFJPTSClwaXDpdekyworwcik37n+pN6k7KTGpKqk6qGipeGl4qXqpM64obq6pMqkyaTyudSkpKTepLmho6SzpM6l16XtpbCl6aXgpM8gKM3GsNeky6TPKQorytG5uaTHpK2k3qS7pPOho7qjxvykziBCSU9TIKTPsOzIzMWqpMsgMjAgx6/BsKTLu8ik76TspL8gQklPUyCkyLjftLmkyqTOpMehogorpLOk7KTppM6l16XtpbCl6aXgpM+4xaThpKukt6SkwN+316THpKKk67e5uP6krKSipOqk3qS5oaOyv8evpMuk4sXPpMOkxqGiCivIv8S+tNHFqqTKyv3LoaTHtaHHvaSsxMmyw6S1pOykxqStpMakqqTqoaK6o8b8pMekz8K/pK+kzrquzfCk8qTipL+k6aS5oaIKK6SipN6k6qTLyNG7qKTKpbeluaXGpeCky8azpKSkxqS3pN6kw6TGpKSk3qS5oaMKKworMy4xCVBDIEJJT1MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorv/S876TOyeG12qS3pL8gUEMgQklPUyCkrKSipOqk3qS5OiBBbWlCSU9ToaJBd2FyZKGiUGhvZW5peCCk5MK+pM6k4qTOpMekuaGjCiukvaTspOmkz8G0pMa796S/pOikpqTKpOSk6sr9pMfGsLrupLek3qS5oaOks6TspOmkziBCSU9TIKTPpMmk7KTipdGhvKXGpaMKK6W3peel86GmpcahvKXWpeuk8s39svKkt6S/pOqhosPOpMOkxqSkpL+k6qTPpLek3qS7pPOho6S9pOyk6aTPtNbA3MWqpMul0aG8CiulxqWjpbel56XLpfOlsKTLsca2waS3pN6kuaGjCisJpKKkyqS/pM6ls6XzpdSl5aG8pb+krLWvxrCkuaTrpMikrToKKygxKSCks6TspOmkziBCSU9TIKTPpc+hvKXJoaalx6Wjpbmlr77lpM4gTUJSICil3qW5pb+hvKGmpdahvKXIoaal7KWzobylySkKK6TLvP2k4aTppOykv6GipdahvKXIoaal7aG8pcChpqXXpe2lsKXppeCkzrrHvemkzqTvpLqkq6TKyfTKrKType2hvKXJpLek3qS5oaMKKygyKSBCSU9TIKTPpL2kzqXWobylyKGmpe2hvKXApM66x73ppM6k76S6pKukysn0yqyk8rzCudSkt6TepLmhoworKDMpIKS9pM6l1qG8pcihpqXtobylwKGmpdel7aWwpeml4KTPpL2k7Lyrv8ikzrvEpOqk8qXtobylyaS5pOukzqTLoaJCSU9TIKTyCiu7yM3RpLek3qS5oaMKKyg0KSCkvaTOpdahvKXIoaal7aG8pcCkz6Wqpdql7KG8pcalo6XzpbChpqW3pbmlxqXgICikoqTrpKSkz6Giwr6kzqXWobylyKGmCiul7aG8pcChoqS9pM6+7LnnpM+luaXGpcOl1yAyIKTLusak08zhpOqk3qS5KSCk8qXtobylyaS5pOukzqTLoaJCSU9TIKTyu8jN0QorpLek3qS5oaMKKyg1KSCkvaTOpaql2qXsobylxqWjpfOlsKGmpbeluaXGpeCkz8TMvu+kzqXVpaGlpKXroaalt6W5pcal4KTYpM6loqWvpbuluaTyCiu51KSmpM6ky6GiQklPUyCk8rvIzdGkt6S/pOqhoqS3pMqkq6TDpL+k6qS3pN6kuaGjIChXaW5kb3dzIKTPyeHEzLnUpKShokxpbnV4Ciuk5CBCU0QgpM+kt6TepLuk8ykKKworCaW5pcalw6XXICgzKSCkq6TpICg1KSCkz6Gipcelo6W5pa+ky8/DpLekq6SxpOuk6KSmpMvN17XhpLmk66TOpMuhogorQklPUyCkyMTMv66kuaTrpdel7aWwpeml4KTytN6k36TepLmho0JJT1MgpMvPw6S3pKuksaTrpM6ky8bzpMSkzqTkpOrK/aSsCiukoqTqpN6kuTogQ0hTICilt6XqpfOlwKGipdilw6XJoaKkvaS3pMahoqW7pa+lvykgpPK7yKTDpMahoqSipOukpKTPoaJMQkEKKyil6qXLpaKhpqXWpe2lw6WvoaaloqXJpeylw6W3pfOlsCkgpPK7yKTDpMaho7jFpOGkziBCSU9TIKTPIENIUyCkwKSxpPKltQorpd2hvKXIpLek3qS5oaNDSFMgpbWl3aG8pcikz76tzei+w6Sote6k66SrpOKkt6TspN6ku6TzpKyhor+3pLekpCBCSU9TIKTPCivJ4cTMIExCQSCkyCBDSFMgpM7Ovsr9pPKltaXdobylyKS3pMakpKTepLmhoyAoQ0hTIKTPs7Wkt6TGpKqkvqTepLekpLDkyqqkxworpKKk66TIuc2kqKTppOykxqSkpN6kuSkgKMz1w+06IL7DpKi17qTrpLOkyKTPpMqkpKTHpLek56SmoaJQQyCkrKSipOu4wqTqKQorCaXWobylyKGmpe2hvKXApMuk6KTDpMa51KTvpOyk66GipbmlxqXDpdcgKDMpIKTIICg0KSCkz77vpMvGsaS4paKlrworpbulubzqy6Gk8rvIpKakx6S3pOekpiAtIL7vpMsgTEJBIKSroaK+76TLIENIUyCkx6GjV2luZG93cyCkzqXWobylyKGmpe2hvKXACiukzr7sueehoqSzpOykzyBXaW5kb3dzIKTOpdahvKXIoaal0aG8pcalo6W3peel877lpM4gTEJBIKXVpemlsKTLpOikw6TGt+jE6gorpLWk7KTepLmhoyil1aXppbCky7TYpLmk677wyvOkz6GiMi40LjE0IKTyu7K+yCmhoyBMaW51eCCkzr7sueehoqSqpL2k6aSvCitMSUxPIKSrIEdSVUIgpPKl1qG8pcihpqXtobylwKTIpLekxrvIzdGkt6TGpKSk66THpLek56SmoaMgR1JVQiCkz834zdGyxMe9pMoKK6TpoaJMQkEgpPK7yKSkoaKktaTipMqksaTspNAgQ0hTIKTyu8ikpKTepLmhoyBMSUxPIKTPpaSl86W5pcihvKXrpLmk66TIpK2hogorwarC8qS5pOuks6TIpPLN17XhpLek3qS5IChsaW5lYXKhoqSipOukpKTPIGxiYTMyIKWqpdelt6XnpfOkxymhoworCaW5pcalw6XXICg1KSAtIKWqpdql7KG8pcalo6XzpbChpqW3pbmlxqXgpMuk6KTDpMbG/r3Qzs+krLnUpO+k7KTrIC0KK1dpbmRvd3MgpMCksaSsIEJJT1MgpMuk6KTDpMbG/r3Qzs+k8rnUpKSk3qS5oaMgW7Lmobmkz6TepMCkvaTOzOTC6qTLpMSkpKTGCiu9vcqspMukz8qspKuk6qTepLuk86SsoaJXaW5kb3dzIKTPIENIUyCl4qG8pcmkx6S9pOy8q7/IpM7M5MLqpPLK+qSopMakpKTrCiuk6KSmpMu4q6SopN6kuaGjv82huaTPIFdpbmRvd3MgpKykvaTsvKu/yKTOpdWloaWkpeuhpqW3pbmlxqXgpMqkyaTywszM3KTLCiukuaTrvuy556TLpMSkpKTGtrWkqKTGpK+k7KTepLekv6GjsuahuaTLpM+horK/pKy1r6StpMakpKTrpM6kq6Tyw86k66TOpKzL3MX2Ciuky7qkxvGkx6S5oaOkx6StpOuks6TIpMqk6aGiTEJBIKTyu8ikpqSzpMik8ravpK+0q6ThpN6kuSFdCisJpMCkq6TpoaK7sKTEpM6+9ba3pKykoqTqpKihoqS9pOyk6aTPwbSkxqSzpLOkx6WrpdChvKS1pOykxqSkpN6kuToKKygxKSBDSFMgpeKhvKXJpPK7yKTDpMakpKTGoaKkoqTKpL+kziBCSU9TIKTPIENIUyCl4qG8pcmkwKSxpPKltaXdobylyKS3pMYKK6SkpN6kuaGjCisoMikgQ0hTIKXiobylyaTyu8ikw6TGpKSkxqGipKKkyqS/pM4gQklPUyCkzyBDSFMgpMggTEJBIKTOzr7K/aTypbWl3aG8pciktworpMakpKTepLmho6TApKuk6aGiQ0hTIKXiobylyaSrpOkgTEJBIKXiobylyaTYoaKyxMe9pMq4wqTqweGkr6GiytG0uaS3pL+kpAorpMekuaGjCisoMykgTEJBIKXiobylyaTypLmkx6TLu8ikw6TGpKSk3qS5oaMKKworMy4xLjEJQ0hTIKXiobylyaTHpM4gUGFydGVkIKTOu8jN0QorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGludXggpM/EzL7vIEJJT1MgpM6luKWqpeGlyKXqpPK8q8awxaqky7ihvdCkt6TepLmho6S3pKukt6GipMikraTJpK201rDjpKSk8goryMikt6TepLmho6SzpM6+7LnnoaJMaW51eCCk2KXRpeml4aG8pb+k8sXPpLmks6TIpMuk6KTDpMahoryryqykx7a1pKikxqSipLKk6worpNmkraTHpLmho87jpKik0KGiTGludXggpKylz6G8pcmhpqXJpemlpKXWIC9kZXYvaGRhIKTPpbilqqXhpcil6iAyNTYvNjQvNjMKK6Tyu/2kxKTIuc2kqKGiQklPUyCkzsDfxOql16XtpbCl6aXgpM+kvaTOpbilqqXhpcil6qTPIDUxMi8zMi82MyCkwKTIvfGkpKTGpKQKK6TrpMqk6aGipLOkzqXRpeml4aG8pb+k8iBMaW51eCCky8XPpLmkyM7JpKSkx6S3pOekpjoKKworCWhkYT01MTIsMzIsNjMKKworpdGl6aXhobylv6TPoaKkyaTzpMql1qG8pcihpqXtobylwKTyu8ikw6TGpKSk66SrpMuwzaTqoaKw26TDpL/K/cuhpMfFz6S1pOwKK6TepLmho6SqpL2k6aSvIExJTE8gpPK7yKTDpMakpKTepLmho6SzpM6+7LnnoaK8oaTOudSk8iAvZXRjL2xpbG8uY29uZiCky8TJssMKK6S3pN6kuTogKKS9pLekxqGipL2kzsrRubmkrMi/scektaTspOuk6KSmpMuhoi9zYmluL2xpbG8gpPK8wrnUpLehorrGta/GsKS5pOsKK8mszdekrKSipOqk3qS5KQorCisJYXBwZW5kPSJoZGE9NTEyLDMyLDYzIgorCitQYXJ0ZWQgpM/J4cTMIExpbnV4IKSstNaw46TDpL+luKWqpeGlyKXqpPK4ob3QpLekv6SrpMmkpqSrpPK4ob3QpMekraTepLmhoworpLekq6S3oaKlx6Wjpbmlr6TOpdGhvKXGpaOlt6XnpfOkrKTKpKSkyKGipLOk7KTPpMekraTepLuk86GjpLOkzr7sueehoryryqykxworuKG6uqS5pOuk2aStpMekuaGjpLOk7KTyudSkpqTOpM/I877vpMu9xc3XpMekuaGjCisJpMikraTJpK2holBhcnRlZCCkz6XRobylxqWjpbel56XzpKylt6XqpfOlwLats6aky8K3pMOkxqSkpMqkpKTIyri25worpPK4wKSmpMekt6TnpKaho1BhcnRlZCCkz8y1u+ukuaTrpL+k4aTOpaql16W3peel86TyxPO2oaS5pOukx6S3pOekpqGjpOKktworzLW766S5pOukyqTpoaJQYXJ0ZWQgpM+l0aG8pcalo6W3peel86GmpcahvKXWpeuky6SkpK+kxKSrpM633cX2pPK51KSmpMekt6TnpKahoworTGludXggpMukz7K/pM7M5MLqpOKkyqSkpMekt6TnpKaho0RPUyCk5CBXaW5kb3dzIKTPoaKk4qS3IExCQSCl4qG8pcmk8rvIpMOkxgorpKSk66TKpOmhoszkwuqkyqSkpMekt6TnpKaho6TipLcgRE9TL1dpbmRvd3MgpKwgQ0hTIKXiobylyaTyu8ikw6TGpKSk66TKpOmhogorpL2kzqXWobylyKGmpe2hvKXApPK6xqWkpfOluaXIobyl66S5pOyk0CAopbulr6W3peel8yA0LjMgpPK7sr7IKaGipMmk86TKzOTC6gorpOKy8rfopLmk66TPpLqkx6S5IC0gpMek4qGiTEJBIKXiobylyaTYpM7A2qTqtLmkqKSsy76k3qS3pKSkx6S5ICiwyrK8pM6hogorMy4xLjIgpPK7sr7IKaGjCisJpdahvKXIsuHE+KTLtNi3uKS5pOul0aG8pcalo6W3peel86TPoaKk4qS3IENIUyCl4qG8pcmkrLvIpO+k7KTGpKSk6worpMqk6aGipbel6qXzpcAgMTAyNCCk6KTqwbCkx72qpO+kw6TGpKSkyqSxpOyk0KTKpOqk3qS7pPOho6SipOul0aG8pcalo6W3peel8worpKyl1qG8pciy4cT4pMu02Le4pLekxqSkpOukq6TJpKakq6Tyt+jE6qS5pOukzqTLoaKl1qG8pcihpqXtobylwKTLtNikuaTrpbulrworpbel56XzpPK4q6TGpK+kwKS1pKSho8W1t7/FqqTKwN/E6qTPoaK+rqS1pMogTGludXggpM4gL2Jvb3QgpdGhvKXGpaOlt6XnpfOhogorV2luZG93cyCkzqXRobylxqWjpbel56XzoaKkvaS3pMahokxpbnV4IKTOpdGhvKXGpaOlt6XnpfOk8rv9pMOkxqSkpOuk4qTOpMekuaGjCisKKzMuMS4yCUNIUyCkq6TpIExCQSCk2KTOytG0uQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorV2luZG93cyCkzqXWobylyKGmpe2hvKXAoaK12qTToaKlqqXapeyhvKXGpaOl86Wwoaalt6W5pcal4KTLIExCQSCl4qG8pcmk8goru8ik76S7pOuky6TPoaLBtKTGpM4gRkFUIKXRobylxqWjpbel56XzvuWkziBMQkEgpdWl6aWwpPLOqaTGpOukwKSxpMekuQorKKW7pa+lt6XnpfMgMi40LjE0IKTyu7K+yCmho7K/pOLM5MLqpMqkpKTPpLqkx6S5oaOk4qS3IFdpbmRvd3MgpPK1r8awpLmk6worpM6ky8zkwuqkrKSipOyk0KGiV2luZG93cyCkzqXWobylyKGmpe2hvKXApPK6xqWkpfOluaXIobyl66S5pOuks6TIpMuk6KTDpMYKK8S+pLuk3qS5ICilu6Wvpbel56XzIDQuMyCk8ruyvsgpoaMKKwlMaW51eCCkz8b+vdDOz6TLIEJJT1MgpPK7yKSkpN6ku6TzoaOkt6SrpLehoqXWobylyKGmpe2hvKXAIChMSUxPIKTkCitHUlVCKSCkz6S5pOukq6TipLek7KTepLuk86GjpOKkt7LEx72kyqTpoaJHUlVCIKTPvKvGsMWqpMsgTEJBIKTyu8ikpKTepLmhoworTElMTyCkz6HWbGluZWFyodek5KHWbGJhMzKh16Wqpdelt6XnpfOk8smszdekyKS3pN6kuaGjpMCkq6TpoaKk4qS3IExJTE8gpKwKKy9ldGMvbGlsby5jb25mIKTyytG5uaS3oaIvc2Jpbi9saWxvIKTHusalpKXzpbmlyKG8pesgKKW7pa+lt6XnpfMgNC4xIKTyu7K+yCkKK6S3pL+45aTHpOK1r8awpLmk66TKpOmhosG0yfS9qqTvpMOkxqTepLkhICik4qS3zOTC6qSspKKk7KTQoaKh1mxpbmVhcqHXpOQKK6HWbGJhMzKh16Tyuu+9/KS3oaKl1qG8pcihpqXHpaOluaWvpKuk6SBMSUxPIKTyusalpKXzpbmlyKG8peukuaTrpLOkyKTLpOikw6TGoaIKK0NIUyCky8zhpLekxqSvpMCktaSkKQorCiu6o6TkIExCQSCk8rvIpMOkxqSkpOukzqTHoaLGyaTfv8qk86THpK+kwKS1pKQuLi4KKworMy4xLjMJTEJBIKXiobylyQorLS0tLS0tLS0tLS0tLS0tLQorTEJBIKTPIENIUyCkzszkwuqkzsG0pMak8rLyt+ikt6TepLmho6S3pKukt6GiTGludXggpOQgUGFydGVkIKSsIExCQSCk8rvIpMMKK6TGpKSk66SzpMik8riryqyksaTroaK/rs3qpMekraTryv3LoaTPpMqkpKTOpMeholBhcnRlZCCkz8K3pMOkxqSkpMqkpKW3peql86XACiuk5KGizLe94qS3pL8gQklPUyCluKWqpeGlyKXqpMukxKSkpMa32bnwpPLNv6SopOukq6TipLek7KTepLuk86GjpOKktyBMQkEKK6XiobylyaTyu8ikw6TGpKSk66TKpOmhoqSzpOyk6aTOpeGlw6W7obyluKTPzLW766S3pMakq6TepKSk3qS7pPOhoyAoUGFydGVkCiukzrjFpKSl0KG8pbil56XzpMekz8zkwuqkrKSipOqk3qS3pL+krKGipL2k7KTppM/BtKTGsvK36LrRpN+kx6S5KQorCiuk4qS3pcelo6W5pa+krCBMQkEgpeKhvKXJpMekoqTrpMqk6aGiUGFydGVkICik5MK+pM6k26TIpPOkyaTOpdel7aWwpeml4CkgpM8KK0NIUyCluKWqpeGlyKXqpM8gWC8yNTUvNjMgpMekoqTrpMjJvbi9pLmk66THpLek56SmIC0gQ0hTIKSrpOkgTEJBIKTLwNqk6rS5pKgKK6S/pM6kx6TKpLGk7KTQoaMKKworMy4yCU1hY2ludG9zaCBPcGVuRmlybXdhcmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUG93ZXJNYWMgpM4gT3BlbkZpcm13YXJlIKTLpM/G86TEpM68583XpMql0KG8pbil56XzpKykoqTqpN6kuSAtIKHWuMWkpMCks6ah1worKG9sZCB3b3JsZCkgpMe7yKTvpOykxqSkpOuk4qTOpMihoqHWv7ekt6SkwKSzpqHXIChuZXcgd29ybGQpIKTOIFBvd2VyTWFjIKTHCiukzqTipM6kx6S5oaOkvaTspOmky6TPvcXC56TKsOOkpKSspKKk6qTepLmho6S3pKukt6Gizr7K/aTIpOKl0aG8pcalo6W3peel86GmCiulxqG8pdal66Tyzf2y8qS3pN6kuaGjCisJzr7K/aTIpOKhoqXmobyltqSsuLfMqaTLsOykxKTOpdGhvKXGpaOlt6XnpfOk8qXWobylyKGmpdGhvKXGpaOlt6XnpfMKKyil1qG8pcihpqXtobylwKTOpKKk66XRobylxqWjpbel56XzKSCky8GqpNaks6TIpPLN17XhpLek3qS5oaOkt6SrpLehoqSzpOyk8gorudSkpqTOpMuhoqS9pOyk6aTPsOOkw6S/u8XByKTfpPLN0aSkpN6kuaGjCisKKzMuMi4xCbjFpKTApLOmpM4gT3BlbkZpcm13YXJlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK7WvxrCkuaTrpOikpqTLwaqk0KTspL+l0aG8pcalo6W3peel86TPoaJRdWlrIKTOpOikpqTKoaKktaTepLak3qTKpdahvKXIoaYKK6XtobylwKTLpOikw6TGwN/E6qS1pOyk3qS5oaOkwKSrpOmhoqSipMqkv6TPsr+k4qS3pMqkr6TGzsmkpKTPpLqkx6S5oaOy5qG5pM8KK6SzpOyky8LQpLmk66W1pd2hvKXIpPIgUGFydGVkIKTLxMmyw6S5pOukx6S3pOekpqGipOKkt8OvpKu9vcqspMvB+6SspLekr7arpPMKK6TApOkuLi4KKworMy4yLjIJv7ekt6SkwKSzpqTOIE9wZW5GaXJtd2FyZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiu/t6S3pKTApLOmpM4gT3BlbkZpcm13YXJlIKTPpdahvKXIoaal0aG8pcalo6W3peel86SsIEhGUyCkx6SipOqhoqXWobylyKGmCiul0aG8pcalo6W3peel86TIpLekxrD1pKzJ1aSxpOmk7KTGpKSk66SzpMik8smszdekyKS3pN6kuaGjpdahvKXIoaal0aG8pcaloworpbel56XzpMikt6TGsPWk8snVpLGk66TOpMuhorDbpMqk67vFwcik36Tyu8ikpKTepLmho6SzpOykzyBQYXJ0ZWQgpM6h1mJvb3Sh1worpdWl6aWwpMe0yc39pLek3qS5oaPO46SopNA6CisKKwkocGFydGVkKSBzZXQgMiBib290IG9uCisKKworMy4zCVBDOTggQklPUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitQQzk4IEJJT1MgpM+kpKSvpMSkzqXRobylxqWjpbel56XzpMukx6TioaK1r8awssTHvaTApMiw9aTyydWksaTppOyk66TopKakyworpLekxqSkpN6kuaGjUGFydGVkIKTOodZib290odel1aXppbCkx6GipdGhvKXGpaOlt6XnpfOk8rWvxrCyxMe9pMCkyLD1pPLJ1aSxCiukv6TqoaKzsKS3pL+k6qTHpK2k3qS5oaPO46SopNA6CisKKwkocGFydGVkKSBzZXQgMiBib290IG9mZgorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorNAml1qG8pcihpqXtobylwAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiul1qG8pcihpqXtobylwKTPoaK7yKSkpL+kpKWqpdql7KG8pcalo6XzpbChpqW3pbmlxqXgpPLBqqTzpMCk6qGipL2kzqWqpdoKK6XsobylxqWjpfOlsKGmpbeluaXGpeCk8qXtobylyaS5pOuks6TIpPKyxMe9pMukuaTrpdel7aWwpeml4KTHpLmho8bDpMuhogorpOKkt8qjv/SkzrzvzuCkzqWqpdql7KG8pcalo6XzpbChpqW3pbmlxqXgpPKlpKXzpbmlyKG8peukt6TGpKSk66TKpOmhosqjv/QKK6TOpdahvKXIoaal7aG8pcCk8qWkpfOluaXIobyl66S3pMakpKTrpKuk4qS3pOyk3qS7pPOho6XWobylyKGmpe2hvKXApMukyKTDpMahogorwr6kzqXWobylyKGmpe2hvKXApPKl7aG8pcmkx6StpOukzqTPxfakv6TqwbCkzqSzpMikx6S5oaMKKworpdGhvKXGpaOlt6XnpfOkzsLnpK2ktaTyytG5uaS5pOukyKStoaLCv87MpM6lx6G8pb+krLDcxrCktaS7pOmk7KTepLmho8K/pK+kzgorpdahvKXIoaal7aG8pcCkz6XVpaGlpKXroaalt6W5pcal4KTyzf2y8qS3pN6ku6TzoaOkvaTspOmkz8OxpMvJrM3XpMiktaTspOsKK6XWobylyKGmpe2hvKXApM6+8MrzpKylx6Wjpbmlr77lpM6kyaSzpMukoqTrpKuk8rWtsrGkt6TGpKSk66TApLGkx6S5oaOk4qS3Ciuks6TOvvDK86SsxrCkq6S1pOykv6TpoaKkvaTspKykyaSzpMuw3MawpLWku6TppOykv6SrtrWkqKTGpKKksqTKpLGk7KTQpMqk6gorpN6ku6TzoaOks6TspM+kvaTOpdahvKXIoaal7aG8pcCk8rrGpaSl86W5pcihvKXrpLmk66SzpMiky6TopMOkxrnUpO+k7KTepLkKKyikxKTepOqhoqS9pM6l1qG8pcihpqXtobylwKTOpaSl86W5pcihvKXpoaal16XtpbCl6aXgpPK6xqTTwfak6aS7pOuhoqS9pOykzworxMy+76W3pael66THw7Gw7KTOpbOl3qXzpcmk8sivudSkuaTrpLOkyKTyyazN16TIpLek3qS5KaGjpKKk6aTmpOul1qG8pcihpgorpe2hvKXApKyks6TOpLOkyKTyyazN16TIpLmk66TvpLGkx6TPpKKk6qTepLuk86GjCisKKzQuMQlMSUxPIChMaW51eCBMb2FkZXIpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xJTE8gpM8geDg2IM3RpM7Nrcy+pMql1qG8pcihpqXtobylwKTHpLmho0xJTE8gpM6l1qG8pcihpqXtobylwKTPxMy+77DKsrykxworpaSl86W5pcihvKXrpLWk7KTepLk6CisKKwkjIC9zYmluL2xpbG8KKworpOKkt6XWobylyKGmpcelo6W5pa+k8rvIpMOkxqSkpOukyqTpoaLC5aTvpOqky7yhpPK51KSmpNmkraTHpLk6ICiks6SzpMehogorL2Rldi9oZGExIKTPpKKkyqS/pM6l66G8pcihpqXHpdClpKW5pMjD1qSttLmkqKTrpNmkraTHpLkpCisKKwkjIG1vdW50IC9kZXYvaGRhMSAvbW50CisJIyBjaHJvb3QgL21udCAvc2Jpbi9saWxvCisJIyB1bW91bnQgL2Rldi9oZGExCisKK0xJTE8gpM4gKKS9pOyk26TJpMekz6TKpKSkrCkguMWkpKXQobyluKXnpfOkzyBMQkEgpeKhvKXJpPKltaXdobylyKS3pMakpKTeCiuku6TzICilu6Wvpbel56XzIDMuMSCk8ruyvsgpoaNMQkEgpeKhvKXJpM8gL2V0Yy9saWxvLmNvbmYgpMehomxiYTMyIKTkCitsaW5lYXIgpaql16W3peel86TLpOikw6TGza24+rK9pLWk7KTepLkgKKTipMOkyL7wyvOk8sbApOukzqTLoaJMSUxPIKTOsvLA4gorpPK7sr7IpLekxqSvpMCktaSkKaGjCisJpOKktyBMQkEgpeKhvKXJpPK7yKSmpMqk6aGipKKkyqS/pM4gQklPUyCkrCBMQkEgpPKltaXdobylyKS3pMakpKTrCiu4wqTqoaKyv6TizOTC6qTKpKSkz6S6pMekuaGjCisJpOKktyBDSFMgpeKhvKXJpPK7yKSmpMqk6aGiL2Jvb3Qgpcelo6Xspa+lyKXqpPK7/aTEpdGhvKXGpaOlt6XnpfOkzworpbel6qXzpcAgMTAyNCDG4qTLvP2k3qTDpMakpKTKpLGk7KTQpMqk6qTepLuk86GjpMCkq6TpoaKk4qS3wuekraTKpcelo6W5pa8KKyi4wKTDpMak36TspNChojggpa6lrMS2KSCk8rv9pMOkxqSkpOukyqTpoaKlx6Wjpbmlr6TOvemk4crVpOqky6GiL2Jvb3QgpdGhvAorpcalo6W3peel86Tyu/2kw6TGpKSk66TZpK2kx6S5oaMKKworNC4yCUdOVSBHUlVCIChHUmFuZCBVbmlmaWVkIEJvb3Rsb2FkZXIpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitHUlVCIKTPIHg4NiDN0aTOoaLI5rPTxaq/t6S3pKSl1qG8pcihpqXtobylwKTHpLmho6TJpKak5KTDpMYgR1JVQiCkrKWkpfOluQorpcihvKXrpLWk7KTGpKSk66SrpMuk6KTDpMahoqS9pOykz6XVpaGlpKXroaalt6W5pcal4KTyzf2y8qS5pOukq6TipLek7KTKpKQKK6S3oaLDsaTLta/GsKXVpaGlpKXrpKy8/aThpOmk7KTGpKSk66SrpPKz0KSopMakpKTrpMCksaSrpOKkt6TspN6ku6TzoaMKK6HWU3RhZ2UgMS41odek8rvIpMOkxqSkpOukyqTpoaKl1aWhpaSl66GmpbeluaXGpeCk8s39svKkt6TepLmho6TipLcgU3RhZ2UgMS41Ciuk8rvIpMOkxqSkpMqkpKSroaKl0aG8pcalo6W3peel88jWueakrMrRpO+kw6S/pOmholN0YWdlIDIgpPK6xqWkpfOluaXIobyl6worpLmk68mszdekrKSipOqk3qS5IChHUlVCIKTOsvLA4qTyxsmk86THpK+kwKS1pKQpoaOkvaSmpMekyqSkpMqk6aGisr+k4qS3pMoKK6SvpMa5vaSkpN6ku6TzoaMKKwlHUlVCIKTPIExCQSCkrM34zdGyxMe9pKuhoryrxrDFqqTLuKG90KS3oaKk4qS3zfjN0bLEx72kyqTpoaKkvaTspPIKK7vIpKakx6S3pOekpiAoTElMTyCkzqHWbGJhMzKh16Wqpdelt6XnpfOkyMaxxfkpoaMKKworNC4zCU1TIERPU6GiTVMgV2luZG93cyA5eKGiTVMgV2luZG93cyBNRQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0RPUyCkyCBXaW5kb3dzIKTPoaKk4qS3pdahvKXIoaal0aG8pcalo6W3peel86TOIEZBVCCkzrzvzuAgKEZBVDE2IKSrIEZBVDMyKQorpPLK0bm5pLmk7KTQoaKkvaTOpdahvKXIoaal7aG8pcCk8rrGpaSl86W5pcihvKXrpLmk66SzpMik8s3XteGkt6TepLmhoworUGFydGVkIKTPpLOk7KTyudSkqqSmpMi77qTfpOvBsKTLt9m58KS5pOukx6S3pOekpqGjpL2kzqXWobylyKGmpe2hvKXApPK6xgorpaSl86W5pcihvKXrpLmk66S/pOGky6GipdahvKXIoaalx6Wjpbmlr6Tyuu7ArqS5pOukq6GipdahvKXIIENEUk9NIKTyu8jN0QorpMekraTepLmho6XWobylyKGmpcelo6W5pa+kzsr9y6GkzyBXaW5kb3dzIE1FIKTHpM/Gr6StpN6ku6TzoaMKKworpdahvKXIoaalx6Wjpbmlr6TOyv3LoTogIChET1MvV2luZG93cyA5eCkKKworICgxKSBXaW5kb3dzIKXWobylyKGmpcelo6W5pa+kzrruwK4KKwkqIFdpbmRvd3MgpPK1r8awpLek3qS5oaOh2KSzpM6ks6TIpM8gUGFydGVkIKTyu8ikpsGwpMuhoqXWobylyKGmCiulx6Wjpbmlr6Tyuu6k66TZpK2kx6SipOukyLDVzKOkt6TGpKSk3qS5oaOh2QorCSogV2luZG93cyClqKWvpbml16Xtobyl6aTOpdWl7aXDpdSlo6Gmpcml6aWkpdakx7Gmpa+l6qXDpa+kt6TepLmhoworCSogodal1aWpobyl3qXDpcih16Typa+l6qXDpa+kt6TepLmhoworCSogodalt6W5pcal4KGmpdWloaWkpeuk8qWzpdShvKS5pOuh16TLsPWk8snVpLGk3qS5oaMKKwkqIKHWpdWlqaG8pd6lw6XIodek8qWvpeqlw6WvpLek3qS5oaMKKwkqIEM6XFdJTkRPV1NcQ09NTUFORFxTWVMuQ09NIKTyIEE6XCCky6WzpdShvKS3pN6kuaGjw+06IEM6XFdJTkRPV1MKKwmkz8rMpM7MvsGwpMfGyaTzpMekpKTrpKuk4qS3pOyk3qS7pPOhokM6XFdJTjk4IKTOpOikpqTKoaMKKyAoMikgta/GsKS5pOukyKStpMul1aXtpcOl1KWjoaalyaXppaSl1qTLpL2kzqXWobylyKGmpcelo6W5pa+k8rvEpLekxqSqpKSkxqGiCitXaW5kb3dzIKTOpdahvKXIoaalx6Wjpbmlr6SrpOm1r8awpLek3qS5oaMKKyAoMykgRE9TIKXXpe2l86XXpcikx7yhpPLCx6TBpN6kuToKKwlBOlw+c3lzIGM6CisKK8z1w+06IMz1vNSkz7XXpLekr8b8y9y47MjHIFdpbmRvd3MgpPK/qKTDpL+ks6TIpKykyqSkpM6kx6GizPW47KSsxfakw6TGpMqkpKSrCiuk4qS3pOyk3qS7pPOho7DjpMOkxqS/pOmhora1pKikxqSvpMCktaSkoaMKKworQ0RST00gpM7K/cuhOiAgKFdpbmRvd3MgOXgvTUUpCisKKyAoMSkgV2luZG93cyCkziBDRFJPTSCk8sHepLehoqS9pOykq6Tpta/GsKS3pN6kuaGjKKHWQ0RST00gpbWl3aG8pcikyqS3pMcKK7WvxrCh16Tywaqk06TepLkpCisgKDIpILyhpM6k6KSmpMvCx6TBpN6kuToKKwlBOlw+YzoKKwlDOlw+Y2QgXHdpbmRvd3NcY29tbWFuZAkJKFx3aW45OFxjb21tYW5kIKTku/ekv6TopKakyqTipM6kq6TiKQorCUM6XFdJTkRPV1NcQ09NTUFORD5zeXMgYzoKKworCiuk3qS/oaJET1MgpOQgV2luZG93cyCkz7/0uMSkzsCpuMKk8rKhpLfJ1aSxpN6kuToKKworICAqIKXWobylyKGmpdGhvKXGpaOlt6XnpfOkz6HWYm9vdKHXpdWl6aWwpMfBqsLypLWk7KTGpKSk66TZpK2kx6S5oaOkv6TDpL8KK7DspMSkzqXWobylyKGmpdGhvKXGpaOlt6XnpfOkwKSxpKzBqsLypLWk7MbApN6kuSAopMikraTJpK2h1qWipa+lxqWjpdah1worKGFjdGl2ZSkgpdGhvKXGpaOlt6XnpfOkyLjGpNCk7KTepLkpoaPO46SopNChoqXRobylxqWjpbel56XzIDMgpPKl1qG8pcihpgorpdGhvKXGpaOlt6XnpfOky8DfxOqkuaTrpMukz6GipLOkpqS3pN6kuToKKworCShwYXJ0ZWQpIHNldCAzIGJvb3Qgb24KKworICAqIE1TIERPUyCk5CBNUyBXaW5kb3dzIDl4L01FIKTPuse96aTOIEZBVCCl0aG8pcalo6W3peel86SrpOmkt6Srta/GsKTHpK0KK6TepLuk86GjpLmkyqTvpMGhorDsyNa+rqS1pKSh2KXepaSlyqG8odnI1rnmpPK7/aTEoaKxo6S1pOykxqSkpMqkpCBGQVQgpdGhvAorpcalo6W3peel86THpLmho0dSVUIgpOQgTElMTyCkzqTopKakyqXWobylyKGmpe2hvKXAICikvaS3pMahoqSkpK+kxKSrpM4gQklPUykKK6TPpLOkzr+2pOvJ8aSkpPLK0bm5pMekraTrpLOkyKTLw+2w1aS3pMakr6TApLWkpC4uLgorCisgICogpOKktyAoTEJBIKWipcml7KXDpbel86WwpMekz6TKpK8pIENIUyCloqXJpeylw6W3pfOlsKTyu8ikw6TGpKSk66TKpOmhogorpdahvKXIoaal0aG8pcalo6W3peel86TOs6u7z8XApM+lt6XqpfOlwCAxMDI0IKTopOqk4r6upLWkr6TKpLGk7KTQpMqk6qTepLuk86GjCiul1qG8pcihpqXRobylxqWjpbel56XzvuWkziBMQkEgpdWl6aWwpPLNrbj6pMukt6S/pOqhosy1uPqky6S5pOuks6TIpMuk6KTDpMahogorTVMgRE9TIKTLIExCQSCloqXJpeylw6W3pfOlsKTyu8ikpiAopKKk66SkpM+horvIpO+kyqSkKSCk6KSmpMu2taSopOuks6TIpKwKK6THpK2k3qS5oaPO46SopNChoqXRobylxqWjpbel56XzIDIgvuWkziBMQkEgpdWl6aWwpPLNrbj6pLmk66TLpM+hoqSzpKakt6TepLk6CisKKwkocGFydGVkKSBzZXQgMiBsYmEgb24KKworw+06IExCQSCloqXJpeylw6W3pfOlsKTPoaJQQy1ET1MgpM7BtKTGpdChvKW4peel86TApLGkx6TKpK+hok1TLURPUyA2LjIyIKTkCiukvaTssMrBsKTHpM+ltaXdobylyKS1pOykxqSkpN6ku6TzoaMKKwort9m58DogpKSkr6TEpKukziBCSU9TIKTHpM+hokJJT1MgpMek4s2tuPqky6S3pMqkpKTIoaJMQkEgpaKlyaXspcOlt6XzpbCkrAorza24+qTLpMqk6aTKpKSkx6S3pOekpqGjsr+k6aSrpM7N/c2zpMeholdpbmRvd3MgpKyks6TOpdWl6aWwpPLK0bm5pLekv7jlpMsKK7WvxrCkt6TKpKSkyqTpoaKks6TspKykqqS9pOmkr6S9pM7M5MLqpMekuaGjCisKKyAgKiCh1svcxfakzqHXTVMtRE9TICikxKTepOqhoqXQobyluKXnpfMgNi4yMiCk3qTHKSCkyCBNUy1ET1MgNy4wICikxKTepOqhogorV2luZG93cyA5NS85NWEpIKTPIEZBVDMyIKTyw86k6qTepLuk86GjpL2kzqS/pOGhoqHYuse96aTOodkgRkFUIKXRobylxqWjCiult6XnpfOkrCBGQVQzMiCkzqTIpK2hoqS9pOyk6aTyIKHYxvPI1szcpM6h2SBGQVQgKKTipMGk7aTzoaJGQVQxNiCkzqTfKQorpdGhvKXGpaOlt6XnpfOkq6Tpta/GsKS5pOuks6TIpKyyxMe9pMekuaGjzr7K/aTIpOK08MvcpdGhvKXGpaOlt6XnpfOkx6TKpLEKK6TspNCkyqTppLqhorWvxrCkt6S/pKTK/aTypaKlr6XGpaOl1qGmpdGhvKXGpaOlt6XnpfOky8DfxOqkuaTryazN16SspKKk6worpMekt6TnpKahoworCis0LjQJTVMgV2luZG93cyBOVAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1dpbmRvd3MgTlQgpM8gRkFUMzIgpdGhvKXGpaOlt6XnpfOk8sbJpPOkwKTqoaK1r8awpLmk66SzpMikrKTHpK2k3qS7pPOhoworpL2k7KTmpKihoqTipLcgV2luZG93cyBOVCCkx7vIpKSkv6SkpMqk6aGiRkFUMTYgpdGhvKXGpaOlt6XnpfOkq6TpIEZBVDMyCiul0aG8pcalo6W3peel86TLytG5uaS3pMakz8DkwtCkpKSxpN6ku6TzoaMKKworNC41CU1TIFdpbmRvd3MgMjAwMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1dpbmRvd3MgMjAwMCCkz6GipbeluaXGpeChpqXRobylxqWjpbel56XzpM4gRkFUIKTOvO/O4CAoRkFUMTYgpKsgRkFUMzIpCiuk8srRubmkt6S/pOmhoqS9pM6l1qG8pcihpqXtobylwKTyusalpKXzpbmlyKG8peukuaTrpLOkyKTyzde14aS3pN6kuaGjUGFydGVkCiukz6SzpOyk8rnUpKqkpqTIu+6k36TrwbCky7fZufCkuaTrpMekt6TnpKaho6S9pM6l1qG8pcihpqXtobylwKTyusalpKXzpbmlyKG8Ciul66S5pOuky6TPoaK8oaTOpOikpqTLpLek3qS5OgorICgxKSBXaW5kb3dzIDIwMDAgpM4gQ0QgpKuk6bWvxrCkt6TepLmhoworICgyKSClpKXzpbmlyKG8peuky7zopOqkq6SrpOqkv6SkpKukyaSmpKuk8r/WpK+kx6S3pOekpqGjRW50ZXIgpPLCx6TBpN6kuaGjCisgKDMpIKS9pLekxqGiv7ekt6SkpbeluaXGpeCk8qWkpfOluaXIobyl66S3pL+kpKSroaLCuLrfpLmk66W3pbmlxqXgpPK9pMn8pLcKK6S/pKSkq6Tyv9KkzaTrpMekt6TnpKaho7jlvNSk8sGqpNOk3qS5ICih1lKh16TysqGkt6TGKaGjCisgKDQpILyrxrC9pMn8pPK51KSkpL+kpKSroaLJ/LXspbOl86W9obyl6yAocmVjb3ZlcnkgY29uc29sZSkgpPK7yKSkpL+kpKSrpPIKK7/WpK+kx6S3pOekpqGjyfy17KWzpfOlvaG8peuk8rvIpKakyMGqwvKkt6TepLmhoworICg1KSCkvaTOpbOl86W9obyl66THoaKks6SmwsekwaTepLk6CisKKwlDOlw+Zml4Ym9vdAorCitOVC8yMDAwIKTOpdahvKXIoaal7aG8pcCkz6TepL+wyrK8pPLJrM3XpMikt6TepLk6CisgICogodi08MvcodkgRkFUMTKhokZBVDE2oaKkoqTrpKSkz6GiTlRGUyCl0aG8pcalo6W3peel8yAoV2luZG93cyAyMDAwIKTHpM8KK0ZBVDMyIKTissTHvSmhoqS9pOykz6HWpbeluaXGpeChpqXRobylxqWjpbel56XzodekyLjGpNCk7KTepLmkrKGipL2kzsPmpMuhogorpL2k7Lyrv8ikzqXWobylyKGmpbulr6W/pM6ls6G8pcmkrKSipOuks6TIoaOks6TOpdGhvKXGpaOlt6XnpfOkz6HWYm9vdKHXCiul1aXppbCkrCBQYXJ0ZWQgpMfOqaTGpOmk7KTGpKSk66TZpK2kx6S5oaMKKyAgKiCl1aWhpaSl6yBOVExEUqGiQk9PVC5JTkkgpMggTlRERVRFQ1QuQ09NIKSspbeluaXGpeChpqXRobylxqWjpbel56XzxuKkyworpKKk66SzpMiho0JPT1QuSU5JIKTPtPDL3KXRobylxqWjpbel56XzpM7Kqs39sMzD1qTkodal1qG8pcihpqXRobylxqWjpbel56XzodcKK6TIuMak0KTspOuholdpbmRvd3MgTlQgpKylpKXzpbmlyKG8peuktaTspL/PwM39pcml6aWkpdaky6TEpKSkxqTOvvDK86Tyyt27/QorpLek3qS5oaOl1qG8pcihpqXRobylxqWjpbel56XzpMilt6W5pcal4KGmpdGhvKXGpaOlt6XnpfOkz7DspMSkzrTwy9yl0aG8pcaloworpbel56XzpMuw7L3vpMvA38PWpLekxqTipKuk3qSkpN6ku6TzoaMKKyAgKiDHpLDVpMehoqXVpaGlpKXrIE5UQk9PVERELlNZUyCkrKW3pbmlxqXgoaal0aG8pcalo6W3peel88bipMukoqTrpLOkyKGiCiukvaTspM+horyrv8ikziBCSU9TIKTyu/2kv6TKpKQgKKSipOukpKTPoaKkvaTOIEJJT1MgpKzC56StpMqlx6Wjpbmlr6TLpaKlrworpbuluaTHpK2kyqSkKSCkyKStpM6holNDU0kgpOQgSURFIKWzpfOlyKXtobyl6aTOzL7BsKTyytGkqKTppOykv6XHpaOluaWvoaYKK6XJpemlpKXQpMekuaGjCisgICogTVMgV2luZG93cyBOVCCkx6TPoaKlt6W5pcal4KGmpdGhvKXGpaOlt6XnpfOkz6W3peql86XAIDEwMjQgsMrBsKTHvaqk76TrCiuk2aStpMehoqW3peql86XAIDEwMjQgsMrBsKTLs6u7z6S3odikyqSxpOyk0KTKpOqk3qS7pPOh2aGjpOKkt6W3peql86XAIDEwMjQKK7DKud+kx72qpO+k6qGita/GsKTLyazN16TKpdWloaWkpeukrKSzpM62rbOmsMq536TLxrCkq6S1pOykv6TpoaJNUyBXaW5kb3dzCitOVCCkz6TipM+k5LOru8+kt6TKpKSkx6S3pOekpiEKKyAgKiCl1qG8pcikyKW3pbmlxqXgoaal0aG8pcalo6W3peel86TOzr7K/aTPoaKkvaTOwr6kzsrRubmkyqS3pMuhosLnpK2ktaTyCivK0bm5pLWk7KTGpOKkq6TepKSk3qS7pPOhoworICAqIKTipLel1qG8pcihpqXRobylxqWjpbel56XzpM7I1rnmICikxKTepOqhoqS9pM6h2KXepaSlyqG8odnI1rnmKSCkrMrRubkKK6S1pOyk7KTQoaJCT09ULklOSVQgpPK5ub+3pLekyqSxpOyk0KTKpOqk3qS7pPOhoworCis0LjYJUXVpaworLS0tLS0tLS0tLS0tCitRdWlrIKTPoda17MCks6YgKG9sZCB3b3JsZCmh16TOIE1hY2ludG9zaCBQb3dlclBDIM3RpM6hosnhtdqkt6S/pdahvKXIoaYKK6XtobylwKTHpLmho6TipLdleHQyIKXRobylxqWjpbel56XzpM7C56StpLWk8srRpKikv6TpoaJRdWlrIKTyusalpKXzpbmlyKG8Ciul66S5pOvJrM3XpKykoqTqpN6kuToKKworCSMgL3NiaW4vcXVpaworCis0LjcJWWFib290CistLS0tLS0tLS0tLS0tLQorWWFib290IKTPoda/t8Cks6YgKG5ldyB3b3JsZCmh16TOIE1hY2ludG9zaCBQb3dlclBDIM3RpM6hosnhtdqkt6S/pdahvKXIoaYKK6XtobylwKTHpLmhoyih1r+3wKSzpqHXpM8gMTk5OSCkq6TpwL3CpKS1pOykxqSkpOuhor+npM7J1aSkpL8gUG93ZXJQQyCkyworwrCkt6TGpKSk3qS5KQorCVlhYm9vdCCkz6Givq+kyqSvpMik4iA4MDBrIKTKpLGk7KTQpMqk6aTKpKShoqS9pOy8q7/IpM61r8awpdGhvKXGpaMKK6W3peel86TyyazN16TIpLek3qS5oaOkwKSrpOmhoqTipLcgR05VL0xpbnV4IKTyv7+kw7+3pKuk6aWkpfOluaXIobyl66S3pMakpAorpOukyqTpoaKks6TOpOikpqTKpLOkyKTypLmk66THpLek56SmOgorCisJKHBhcnRlZCkgbWtsYWJlbCBtYWMKKwkocGFydGVkKSBwcmludAorCURpc2sgZ2VvbWV0cnkgZm9yIC9kZXYvc2RhOiAwLjAwMC02MTQ5Ljg4MiBtZWdhYnl0ZXMKKwlEaXNrIGxhYmVsIHR5cGU6IG1hYworCU1pbm9yICAgIFN0YXJ0ICAgICAgIEVuZCAgICAgRmlsZXN5c3RlbSAgTmFtZSAgICAgICAgICAgICAgICAgIEZsYWdzCisJMSAgICAgICAgICAwLjAwMCAgICAgIDAuMDMxICAgICAgICAgICAgICBBcHBsZQorCShwYXJ0ZWQpIG1rcGFydCBwcmltYXJ5IGhmcyAwLjAzMiAxCisJKHBhcnRlZCkgcHJpbnQKKwlEaXNrIGdlb21ldHJ5IGZvciAvZGV2L2hkYjogMC4wMDAtNjE0OS44ODIgbWVnYWJ5dGVzCisJRGlzayBsYWJlbCB0eXBlOiBtYWMKKwlNaW5vciAgICBTdGFydCAgICAgICBFbmQgICAgIEZpbGVzeXN0ZW0gIE5hbWUgICAgICAgICAgICAgICAgICBGbGFncworCTEgICAgICAgICAgMC4wMDAgICAgICAwLjAzMSAgICAgICAgICAgICAgQXBwbGUKKwkyICAgICAgICAgIDAuMDMxICAgICAgMS4wMDAKKwkocGFydGVkKSBzZXQgMiBib290IG9uCisJKHBhcnRlZCkgcHJpbnQKKwlEaXNrIGdlb21ldHJ5IGZvciAvZGV2L2hkYjogMC4wMDAtNjE0OS44ODIgbWVnYWJ5dGVzCisJRGlzayBsYWJlbCB0eXBlOiBtYWMKKwlNaW5vciAgICBTdGFydCAgICAgICBFbmQgICAgIEZpbGVzeXN0ZW0gIE5hbWUgICAgICAgICAgICAgICAgICBGbGFncworCTEgICAgICAgICAgMC4wMDAgICAgICAwLjAzMSAgICAgICAgICAgICAgQXBwbGUKKwkyICAgICAgICAgIDAuMDMxICAgICAgMS4wMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib290CisKKwml0aG8pcalo6W3peel86TOwuekraS1pPLK0bm5pLekv7jlpMsgWWFib290IKTyusalpKXzpbmlyKG8peukuaTrCivJrM3XpM+koqTqpN6ku6TzoaNZYWJvb3QgpM8geWJpbiCkx6WkpfOluaXIobyl66S1pOyk3qS5oaMKKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzUJpaql2qXsobylxqWjpfOlsKGmpbeluaXGpeAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoruqOkzqTIpLOk7aGiUGFydGVkIKTPIEdOVS9MaW51eCCkzrK8pMekzqTfxrC67qS3pN6kuaGjpLekq6S3oaLCvqTOpaql2qXsobwKK6XGpaOl86Wwoaalt6W5pcal4KTLpOikw6TGu8ik76TspMakpKTroaKkoqTrpKSkz6GitqbNraS1pOykv6XRobylxqWjpbel56XzCiukzsLnpK2ktaTyytG5uaS5pOukzqTLzfjN0aTHpK2k3qS5oaMKKworpdWloaWkpeuhpqW3pbmlxqXgpM7C56StpLWk8srRubmkt6S/pKSkyKStoaKl3qWmpfOlyKS1pOykxqSkpMqkpKSzpMik8rPOx6cKK6S3pMakr6TApLWkpKGjUGFydGVkIKTPpd6lpqXzpciktaTspL+l0aG8pcalo6W3peel86TOwuekraS1pPLK0bm5pMekraTepLuk8worKKSzpOykz76tzejK0aTvpOukq6TipLek7KTepLuk8y4uLikKKworpOKkt6XrobylyKTkpdahvKXIoaal0aG8pcalo6W3peel86TOwuekraS1pPLK0bm5pLekv6SkpMqk6aGipdahvKXIoaalx6WjpbmlrworpPK7yKSmICilu6Wvpbel56XzIDEuNSCk8ruyvsgpIKSroaJleHQycmVzaXplIKXRpcOlsaG8pbiky7TepN6k7KTGpKSk66GiCitBbmRyZWFzIERpbGdlciCkziBvbmxpbmUgZXh0MiByZXNpemVyICi+3KS3pK+kz6GiNr7PpPK7sr7IKSCk8rvIpMOkxqSvpMCktaSkoaMKKworpOKkt6Xepaal86XIpLWk7KS/pdGhvKXGpaOlt6XnpfOkrKSipOulx6Wjpbmlr6TOpdGhvKXGpaOlt6XnpfOhpqXGobyl1qXrpPIKK72kwLWkuaTrpMqk6aGipLmksKTLusa1r8awpLmk66TZpK2kx6S5oaNMaW51eCCkz6XRobylxqWjpbel56XzoaalxqG8pdal66TLCiuyw6SopL/K0bm5pMukxKSkpMbKrKSrpOmkyqSkpMekt6TnpKahoyAopLOk7KTPpauhvKXNpesgMi40IKTHoaKkvaTspM6ltaXdobwKK6XIpPLEybLDpLmk66TIpK2ky8S+pLWk7KTrpMekt6TnpKYpCisKKworNS4xCUdOVS9MaW51eCCkyCBGcmVlQlNECistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK86+yv2kzqW3pbmlxqXgpM+lx6Wjpbmlr6Gmpeml2aXrpMukz6SrpMqk6r3AxvCkx6GipL+kr6S1pPOkzrDbpMqk66XHpaOluaWvoaYKK6Xppdml66TOvO/O4KTypbWl3aG8pcikt6TGpKSk3qS5oaMKKwlGcmVlQlNEIKTPoaJNU0RPUyCl0aG8pcalo6W3peel86GmpcahvKXWpeukyKTPuN+0ucCtpM6kyqSkoaIKK6XHpaOluaWvoaal6aXZpeuhpqW3pbmlxqXgpMihok1TRE9TIKXRobylxqWjpbel56XzoaalxqG8pdal66TIuN+0uaTKoaIKK6XRobylxqWjpbel56XzoaaluaXppaSluaGmpbeluaXGpeCk8rv9pMGk3qS5oaNQYXJ0ZWQgpM8gQlNEIKXHpaOluaWvoaYKK6Xppdml66GmpbeluaXGpeCkwKSxpPKltaXdobylyKS3pN6kuaGjpL2kzqXRobylxqWjpbel56XzoaaluaXppaSluaGmpbeluaXGpeAKK6TypbWl3aG8pcikuaTrpLOkyKTPpKKk6qS9pKaky6TKpK+hoqTKpLykyqTpoaKkvaTOsNXMo8/ApM+kpKS1pLWkq7TxzK+kx6GiCiuh1snhxMykzqHXpdGhvKXGpaOlt6XnpfOhpqXGobyl1qXrpKyk5KTrpOikpqTLpM/Gr6SrpMqkpKSrpOmkx6S5oaMKKworCis1LjIJTVMgV2luZG93cyCkyCBPUy8yCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK01TIFdpbmRvd3MgpMggT1MvMiCkzyBtc2RvcyClx6Wjpbmlr6Gmpeml2aXrpMCksaTypbWl3aG8pcikt6TGpKSk3qS5oaOkvaTspOYKK6SooaKk4qS3v7ekt6Skpcelo6W5pa+hpqXppdml66Tyuu7ArqS5pOukyqTpoaKwyrK8pPK7yM3RpLmk66TZpK2kx6S5OgorCisJKHBhcnRlZCkgbWtsYWJlbCBtc2RvcworCisKKzUuMwlNYWNPUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitNYWNPUyAopMggT3BlbkZpcm13YXJlKSCkzyBtYWMgpcelo6W5pa+hpqXppdml66TApLGk8s39svKkt6TepLmho6S9pOyk5qSooaIKK6TipLe/t6S3pKSlx6Wjpbmlr6Gmpeml2aXrpPK67sCupLmk66TKpOmhorDKsryk8rvIzdGkuaTrpNmkraTHpLk6CisKKwkocGFydGVkKSBta2xhYmVsIG1hYworCivD7TogTWFjIKXRobylxqWjpbel56Xzoaal3qXDpdekx6TPoaK29aStzs6w6KTPpdGhvKXGpaOlt6XnpfOhpqXepcOl16TOueDM3AorpPKkyKTDpMakt6TepKYgKKS9pLekxqGiTGludXggpM8gMTUgpPLEtqSopOu54MzcpPK7/aTEpLOkyKTyuaWk3qTKpKQpIKTOpMehogortvWkrc7OsOik8rvEpLmkzqTyyPKksaTrpNmkraTHpLmho87jpKik0KGipOKkt7DKsryk8rnUpKik0DoKKworCShwYXJ0ZWQpIHByaW50CisJRGlzayBnZW9tZXRyeSBmb3IgL2Rldi9zZGE6IDAuMDAwLTYxNDkuODgyIG1lZ2FieXRlcworCURpc2sgbGFiZWwgdHlwZTogbWFjCisJTWlub3IgICAgU3RhcnQgICAgICAgRW5kICAgICBGaWxlc3lzdGVtICBOYW1lICAgICAgICAgICAgICAgICAgRmxhZ3MKKwkxICAgICAgICAgIDAuMDAwICAgICAgMC4wMzEgICAgICAgICAgICAgIEFwcGxlCisJMiAgICAgICAgICAwLjAzMSAgICAgIDEuMDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vdAorCTMgICAgICAgICAgMS4wMDAgICAxMDAwLjAwMCAgZXh0MiAgICAgICAgcm9vdCAgICAgICAgICAgICAgICAgIHJvb3QKKwkocGFydGVkKSBta3BhcnRmcyBwcmltYXJ5IGV4dDIgMTAwMSAyMDAwCisJKHBhcnRlZCkgcHJpbnQKKwlEaXNrIGdlb21ldHJ5IGZvciAvZGV2L3NkYTogMC4wMDAtNjE0OS44ODIgbWVnYWJ5dGVzCisJRGlzayBsYWJlbCB0eXBlOiBtYWMKKwlNaW5vciAgICBTdGFydCAgICAgICBFbmQgICAgIEZpbGVzeXN0ZW0gIE5hbWUgICAgICAgICAgICAgICAgICBGbGFncworCTEgICAgICAgICAgMC4wMDAgICAgICAwLjAzMSAgICAgICAgICAgICAgQXBwbGUKKwkyICAgICAgICAgIDAuMDMxICAgICAgMS4wMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib290CisJMyAgICAgICAgICAxLjAwMCAgIDEwMDAuMDAwICBleHQyICAgICAgICByb290ICAgICAgICAgICAgICAgICAgcm9vdAorCTQgICAgICAgMTAwMS4wMDAgICAyMDAwLjAwMCAgZXh0MgorCiul0aG8pcalo6W3peel8yAzIKTIIDQgpM601qTLoaIxIKXhpayl0KWkpcikzrb1pK3OzrDopKykoqTqpN6kuaGjpdGhvKXGpaMKK6W3peel86TyIDAuMU0gzqWkt6TGuu7ArqS5pOuks6TIpMuk6KTDpMahoqSzpOyk8sjypLGk6aTspN6kuSAopLOkzr7sueehogorUGFydGVkIKTPvKvGsMWqpMukvaTspOmk8rDsve+ky6HWsqGkt7n+pN+h16TepLkpoaOkwKSrpOmhor7lpM7O46THpM+hosrRpO+k6gorpMu8oaTyudSkpqTZpK2kx6S5OgorCisJKHBhcnRlZCkgbWtwYXJ0ZnMgcHJpbWFyeSBleHQyIDEwMDAuMSAyMDAwCisJKHBhcnRlZCkgcHJpbnQKKwlEaXNrIGdlb21ldHJ5IGZvciAvZGV2L3NkYTogMC4wMDAtNjE0OS44ODIgbWVnYWJ5dGVzCisJRGlzayBsYWJlbCB0eXBlOiBtYWMKKwlNaW5vciAgICBTdGFydCAgICAgICBFbmQgICAgIEZpbGVzeXN0ZW0gIE5hbWUgICAgICAgICAgICAgICAgICBGbGFncworCTEgICAgICAgICAgMC4wMDAgICAgICAwLjAzMSAgICAgICAgICAgICAgQXBwbGUKKwkyICAgICAgICAgIDAuMDMxICAgICAgMS4wMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib290CisJMyAgICAgICAgICAxLjAwMCAgIDEwMDAuMDAwICBleHQyICAgICAgICByb290ICAgICAgICAgICAgICAgICAgcm9vdAorCTQgICAgICAgMTAwMC4wMDAgICAyMDAwLjAwMCAgZXh0MgorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorNgml1aWhpaSl66GmpbeluaXGpeAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQYXJ0ZWQgpM+wyrK8pM7B4LrupMvC0KS5pOultaXdobylyKTyu/2kw6TGpKSk3qS5OgorCiul1aWhpaSl66GmpbeluaXGpeAJuKG90Am67sCuCcLnpK2ktcrRubkJpbOl1KG8CcXAuKEKK2V4dDIJCQkqCSoJKjEJCSoyCSozCitleHQzCQkJKgkJKjEJCSoyCSozCitmYXQJCQkqCSoJKjQJCSo0CSoKK2hmcwkJCSoKK2pmcwkJCSoKK2xpbnV4LXN3YXAJCSoJKgkqCQkqCSoKK250ZnMJCQkqCityZWlzZXJmcwkJKgordWZzCQkJKgoreGZzCQkJKgorCivD7ToKKygxKSBleHQyIKTIIGV4dDMgpMekz6GipdGhvKXGpaOlt6XnpfOkzrOru8/FwKTPuMfE6qS1pOykxqSkpMqksaTspNCkyqTqpN6ku6TzoaMKKworKDIpIKWzpdShvMDopM6l0aG8pcalo6W3peel86TPoaKls6XUoby4taTOpdGhvKXGpaOlt6XnpfOk6KTqwuekraSvICikoqTrpKSkz6GiCiu0sMG0pMvGsaS4pbWlpKW6KSCkyqSxpOyk0KTKpOqk3qS7pPOhoworCisoMykgpdWloaWkpeuhpqW3pbmlxqXgpKyzq6SrpOyk66TIpK2ky6GiuMLE6qS1pOykv8XAuKGkrLnUpO+k7KTepLmho6SzpOykrAoruqOkzqTIpLOk7c2jsOykzsXAuKGkx6S5oaOk4qS3pdWloaWkpeuhpqW3pbmlxqXgpMuyv6TppKukzrjtpOoopL2kt6TGoaKw7MjMCiuky7jtpOqkzsLnyL4pIKSspKKk7KTQoaIocmVzaXplIKTytN6k4CkgwbSkxqTOpbOl3qXzpcmkz6S9pM68usfUpPK+5bzqpK+96M39Ciukt6GipL2kzqXVpaGlpKXroaalt6W5pcal4KTPvOrJ1aSrpLqkzqTepN6ky6TKpOqk3qS5oaMKKworKDQpIGZhdCCkx6TPoaLC56StpLWkzsrRubmk5KWzpdShvKTOuOWhor+3pLekpKXRobylxqWjpbel56XzpM7C56StpLWkz6WvpekKK6W5pb+kzsLnpK2ktaTLwKm4wqS1pOyk3qS5ICi856TLIEZBVDE2IKTLsca2waS3pN6kuSmho6SzpOykz6SipMqkv6Ssuc2kqKTrCiuk6KTqpOKwraSvpMahoqTIpKSkpqTOpOKhoqWvpemluaW/pM7C56StpLWk8sGqpNaks6TIpM+kx6StpMqkpKSrpOmkx6S5CisopL2k7KTPIFdpbmRvd3MgpM6l0KWwpMekuaSsoaK437S5wK2kz83fpLekpKGipL2kpqTHpLmk6KTNPykKKwmkwKSrpOmhorzCut3FqqTLpM+hoihQYXJ0ZWQgpM+lr6Xppbmlv6TOwuekraS1pPK9zL6upMekraTrpM6kxykgpdGhvAorpcalo6W3peel86Tyvu+ky73Mvq6kuaTrpLOkyKSspMekraTepLmkrKGipKKkyqS/pKzN36S5pOvC56StpLWky6GipdGhvKXGpaMKK6W3peel86Tywf3C56S1pLuk66SzpMikz6THpK2kyqSkpKuk4qS3pOyk3qS7pPOho6TipLcgRkFUMzIgpPK7yKSmpLOkyKTLsr+k4gorzOTC6qSspMqkpKTKpOmhor7vpMukoqTKpL+krM3fpLmk68LnpK2ktaTLpdGhvKXGpaOlt6XnpfOk8sH9wuektaS7pOmk7KTrpMcKK6S3pOekpqGjCisJzdfM8zogpKSkxKTHpOKl0aG8pcalo6W3peel86Tyvcy+rqTHpK2k3qS5oaOk4qS3sr+k6aSrpM7N/c2zpMcgRkFUMzIKK6Tyu8ikqKTKpKSkyqTpoaKl0aG8pcalo6W3peel86Tywf3C56S1pLuk6aTspMqkpKSrpOKkt6TspN6ku6TzoaMKKworCis2LjEJRXh0MgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitQYXJ0ZWQgpM8gKKTepMApIGV4dDIgpdWloaWkpeuhpqW3pbmlxqXgpM6ls6XUobyk8sS+wNykz6W1pd2hvKXIpLekxqSkpN6ku6TzoaMKK6S3pKukt6TKpKyk6aGipLOk7KTysNmkub/rpLKk68r9y6GkrL6vpLekwKSxpKKk6qTepLk6CisgICogUGFydGVkIKTOIG1rZnMgpbOl3qXzpckgKKSrIG1rZnMuZXh0MikgpPK7yKSkoaKkvaTspKuk6aW3pael66THCiuwyrK8pPK8wrnUpLek3qS5OgorCcS+pLekxqSvpOyhqqGqIKSzpOykz6SipN6k6r7lvOqkr7nUpKukyqSkIC0gpMek4sLnxPGkzr/NpMukz8LnvubJ1worCaTKpM+kui4uLgorCisJIyBtb3VudCAtdCBleHQyIC9kZXYvaGRhMiAvbW50L2RzdAorCSMgZmluZCAvbW50L3NyYyAtZGVwdGggfCBjcGlvIC1wbSAvbW50L2RzdAorCisgICogpOKkt8qjwL2kzqXRobylxqWjpbel56XzpKy4taTopOqk4sLnpK2kr6TKpOukyqTpoaKks6SmpLmk66SzpMik4qTHpK2k3qS5OgorpN6kuqGiv7ekt6SkIGV4dDIgpdGhvKXGpaOlt6XnpfOk8rruwK6kt6TepLmho6S9pOykq6TpOgorCisJIyBkZCBpZj0vZGV2L3NyYy1kZXZpY2Ugb2Y9L2Rldi9kc3QtZGV2aWNlIGJzPTEwMjQgY291bnQ9KE9MRCBTSVpFKQorCSMgcGFydGVkIC9kZXYvaGRhIHJlc2l6ZSAyIChTVEFSVCkgKEVORCkKKworpLOks6THoaIoT0xEIFNJWkUpIKTPuLWkzqXRobylxqWjpbel56XzpPKlraXtpdClpKXIpMfJvaS3pL/C56StpLWkx6S5oaMKKyhTVEFSVCkgpMggKEVORCkgpM/Ko8C9pdGhvKXGpaOlt6XnpfOky8LQpLmk66Giv7ekt6Sks6u7z8XApMi9qsO8pMekuaGjCisKKworNi4yCUZBVDE2IKTIIEZBVDMyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1BhcnRlZCCkzyAopN6kwCkgRkFUIKXVpaGlpKXroaalt6W5pcal4KTOpa+l6aW5pb+kzsLnpK2ktaTywf3C56S1pLuk6aTspN6kuworpPOho6SzpM6ks6TIpM6kv6ThpMuhoqXRobylxqWjpbel56XzpM7C56StpLWkzsrRubmk5KWzpdShvKTLwKm4wqSswN+ksaTppOyk3gorpLmho6SzpOykz6S3pNCkt6TQwbSkr7Txsvikx6GipMikpKSmpM6k4qGiUGFydGVkIKTPIEZBVDE2IKTIIEZBVDMyIKTOpdWloaWkCiul66GmpbeluaXGpeCk8srRtLmkx6StpOukq6TppMehoqWvpemluaW/pM7C56StpLWkrKTJpOyk26TJpMukyqTqxsCk66SrpMukxKSkCiukxqGisNukyqTrwKm4wqSspKKk6qTepLmhoworCivO46SopNChoqWvpemluaW/pM7C56StpLWkrCA0ayCkx6SipOsgMTAwTWIgpM6l0aG8pcalo6W3peel86SspKKk66TIpLekxqTfpN4KK6S3pOekpqGjpLOkzqXRobylxqWjpbel56XzpPIgNDAwTWIgpMvK0bm5pLmk66SzpMikz6THpK2k3qS7pPOho6TKpLykyqTpoaKkvQorpM6lr6Xppbmlv6TOwuekraS1pPIgMTZrIKTLytG5uaS5pOvJrM3XpKykoqTrpKuk6aTHpLmho6S3pKukt6GipOKktyBGQVQzMgorpPK7yKSopNChoqS9pOykzyA2MDBNYiCky8rRubmkuaTrpLOkyKSspMekraTepLmhozYwME1iIKTOIEZBVDMyIKXVpaGlpKXroaaltworpbmlxqXgpMvC0KS3pMahorXVpOLArqTqzqmkwaTepLmhoworCivD7TogpdWloaWkpeuhpqW3pbmlxqXgpPKls6XUobykt6S/pOqhosLnpK2ktaTyytG5uaS5pOukyKStoaJQYXJ0ZWQgpM8gKKTipLcKK7LEx72kyqTpKSBGQVQxNiCkyCBGQVQzMiCkzrTWpMfK0bS5pLekv6SkpKu/0qTNpOukx6S3pOekpqGjpL2k7KTmpKihoqSipOsKK6XRobylxqWjpbel56XzpPIgKMLnpK2ktaTyytG5uaS7pLqkyykgRkFUMzIgpMvK0bS5pLekv6SkpMCksaTKpOmhoqS9pM6l0aG8CiulxqWjpbel56XzpPLGsaS4wuekraS1pMvK0bm5pLmk66TApLGkx6THpK2k3qS5oaMKKworNi4yLjEJTVMgRHJpdmVTcGFjZSCl0aG8pcalo6W3peel8worLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK01TIERyaXZlU3BhY2UgpM8gTVMgV2luZG93cyA5NSCky8nVwrCkt6TGpKSk66XXpe2lsKXppeCkx6GiRkFUIKXVpaGlpKXroaYKK6W3pbmlxqXgpPKwtb3MpLmk66TOpMu7yM3RpMekraTepLmho7vkpM+ks6TspM8gRG91YmxlU3BhY2UgpMjGsaS4pOikpqTLxrC67gorpLmk66TIuc2kqKTGpKSk66TOpMehoqSzpLOky73xpKuk7KTGpKSk66SzpMikz6TJpOykx6TiIERvdWJsZVNwYWNlIKTLpOLF9qTGCiukz6TepOukz6S6pMekuaGjCisKK6SzpOyk6aTOpdGhvKXGpaOlt6XnpfOkzsLnpK2ktaTyytG5uaS3pL+k6qWzpdShvKS5pOukv6ThpMsgUGFydGVkIKTyu8jN0aS5pOsKK6SzpMikz7LEx72kx6S5pKyhojKhojOhos2+yqyky6TkpOmkyqSkpMikpKSxpN6ku6TzLi4uCisKKzYuMi4xLjEJRHJpdmVTcGFjZSCl0aG8pcalo6W3peel86TOwf3C5worLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKygxKSCl0aG8pcalo6W3peel86Tyy76k36TOwuekraS1pMvB/cLnpLWku6TrpM6ky6GiUGFydGVkIKTOIHJlc2l6ZSCls6XepfOlyQorpPK7yKSkpN6kuaGjCisKKygyKSC29aStzs6w6KTypduluaXIoaalyaXppaSl1qSrpOmwtb3Mpcml6aWkpdak2LDcpLmkv6ThpMuhok1TIERyaXZlU3BhY2UKK6Tyu8jN0aS3pN6kuaGjCisKKzYuMi4xLjIJRHJpdmVTcGFjZSCl0aG8pcalo6W3peel86TOvcy+rgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKDEpILC1vcylyaXppaSl1qSrpOml26W5pcihpqXJpemlpKXWpNi29aStzs6w6KTysNykuaS/pOGky6GiTVMgRHJpdmVTcGFjZQorpPK7yM3RpLek3qS5oaOw3KS1pOyk67b1pK3OzrDopM7OzKTPpdGhvKXGpaOlt6XnpfOk8r3Mvq6kuaTroaLLvqTfpM7OzKTICiuw7MPXpLek3qS5oaMKKworKDIpIKXRobylxqWjpbel56XzpPLLvqTfpM7C56StpLWky73Mvq6kuaTrpL+k4aTLoaJQYXJ0ZWQgpM4gcmVzaXplIKWzpd6l86XJCiuk8rvIzdGkt6TepLmho8PtOiBQYXJ0ZWQgpM+kvaTOpdGhvKXGpaOlt6XnpfOk8qTJpOykwKSxvcy+rqS5pOukzqSrpKzKrKSrpOsKK6TopKahoqS9pM6/9Lv6pPK+5bzqpK/K1qS3pMakz6SvpOyk3qS7pPOho6SzpOykz6TkpOuk2aStpLOkyKTOpeqluaXIpMu186SyCiuk6aTspMakpKTepLmhoworCis2LjIuMS4zCURyaXZlU3BhY2UgpdGhvKXGpaOlt6XnpfOkzqWzpdShvAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK6TipLcgRHJpdmVTcGFjZSCl0aG8pcalo6W3peel86TypOKkw6TIwuekraSkpdGhvKXGpaOlt6XnpfOky6WzpdShvKS3pL+kpKTKpOmhogory76k36TOpdGhvKXGpaOlt6XnpfOkzsLnpK2ktaTyytGkqKTrpM6kx6TPpMqkr6WzpdShvKS5pOuks6TIpPK9/KSkpMahogorRHJpdmVTcGFjZSCl0aG8pcalo6W3peel86TOwf3C583RpM7A4szApMu9vqTDpMakr6TApLWkpKGjpL2kt6TGoaJEcml2ZVNwYWNlCiukx6TOv7ekt6SkpdGhvKXGpaOlt6XnpfOk8rvIpMOkxqSkpOuks6TIpPKzzsenpLekxqSvpMCktaSkoaMKKworpLekq6S3oaKk4qS3IERyaXZlU3BhY2UgpdGhvKXGpaOlt6XnpfOk8qTopOq+rqS1pMql0aG8pcalo6W3peel86TLpbOl1KG8Ciukt6S/pKSkyqTpoaLKqrv2pM++r6G5yqO7qKTLpMqk6qTepLk6CisKKygxKSCwtb3Mpcml6aWkpdakq6TpuLukx6SipOul26W5pcihpqXJpemlpKXWpMu29aStzs6w6KTysNykuaS/pOGky6GiTVMKK0RyaXZlU3BhY2UgpPK7yKSkpN6kuaGjsNyktaTspOvOzrDopM7OzKTPuLWkzqXRobylxqWjpbel56XzpMjKo8C9pdGhvKXGpaMKK6W3peel86TOy76k36TOwuekraS1pM66uaTopOqk4sLnpK2kr6SipOuk2aStpMekuaGjCisKKygyKSC4taTOpdGhvKXGpaOlt6XnpfOk8sqjwL2kzqXRobylxqWjpbel56XzpNils6XUobykuaTrpL+k4aGiUGFydGVkIKTyu8ikpAorpN6kuaGjCisKKygzKSC4taTOpduluaXIoaalyaXppaSl1qSrpOmwtb3Mpcml6aWkpdak2Lb1pK3OzrDopPLM4aS5pL+k4aGiTVMgRHJpdmVTcGFjZQorpPK7yKSkpN6kuaGjCisKKyg0KSDKo8C9pduluaXIoaalyaXppaSl1qSrpOmwtb3Mpcml6aWkpdak2Lb1pK3OzrDopPLM4aS5pL+k4aGiTVMgRHJpdmVTcGFjZQorpPK7yKSkpN6kuaGjCisKKzYuMwlSZWlzZXJmcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitQYXJ0ZWQgpM8gcmVpc2VyZnMgpPKltaXdobylyKS3pMakpKTepLuk86GjpLekq6S3oaJyZWlzZXJmcyCky6TPpL2k7Lyrv8ikzgorwuekraS1ytG5uaXEobyl66GicmVzaXplX3JlaXNlcmZzIKSsydWkpKTGpKSk3qS5oaOkv6TApKKkyqS/pM7DzqTppLuk66S/pOEKK6TApLGkyyA7LSkKKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzcJTFZNoaJSQUlEIKTIxL7A3MWqpMql1aWhpaSl66GmpbeluaXGpeCk2KTOpaKlr6W7pbkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitMVk0gKM/Azf2l3KXqpeWhvKXgoaal3qXNobyluKXjKSCkz6XRobylxqWjpbel56XLpfOlsKTOwuXC2KW3pbmlxqXgpMekuaGjpL2k7AorpM/PwM39pdyl6qXlobyl4CAopMSk3qTqoaKh1rK+wdul0aG8pcalo6W3peel86HXKSCkrKS/pK+ktaTzpM7Kqs39pdyl6qXlobyl4AorKKTEpN6k6qGipc+hvKXJoaalx6Wjpbmlr6TkpdGhvKXGpaOlt6XnpfMpIKTLua2krKTrpLOkyKTytfakt6TepLmho0xWTSCkzworTGludXggpdChvKW4peel8yAyLjQgpKukvaTssMq536THpbWl3aG8pciktaTspMakpKTepLmhoworCitSQUlEICiwwrLBpMqlx6Wjpbmlr6TOvunEuaTKx9vO8ykgpM+kv6SvpLWk86TOpcelo6W5pa+k5KXRobylxqWjpbel56XzpPKw7L3vCiuky6GiodayvsHbpdGhvKXGpaOlt6XnpfOh16TIpLekxrvIpKakv6ThpM6lt6W5pcal4KTHpLmho6W9pdWlyKWmpaeloiBSQUlEIKTyCivN+M3RpLmk66TOpMuhor/0vO+kzrDbpMqk66XiobylyaSspKKk6qGiy9y8wcWqpMukzzoKKyAgKiDArce9pPK4/r7lpLWku6GiwbTOzrDopPLDsbDspM6l1aWhpaSl66GmpbeluaXGpeC+5aTHzfjN0aTHpK2k66TopKaky6S5pOsKK6S/pOGhosqjv/SkziAovq6ktaTKKSClx6Wjpbmlr6Tyw7Gw7KTOpdWloaWkpeuhpqW3pbmlxqXgpM6kv6ThpMu7yM3RoaMKKyAgKiC/rs3qwK2kyMCtx72k8rj+vuWktaS7pOukv6ThoaK+8MrzpM6+6cS5pMqls6XUobyk8rz9pOGk66TOpMvKo7/0pM6lx6WjpbkKK6WvpPK7yM3RoaMKK6W9pdWlyKWmpaeloiBSQUlEIKTPIExpbnV4IKXQobyluKXnpfMgMi4wIKSrpL2k7LDKud+kx6W1pd2hvKXIpLWk7KTGpKSk3qS5oaMKKworpc+hvKXJpaalp6WiIFJBSUQgpM+k1aTEpKakyyBQYXJ0ZWQgpMeltaXdobylyKS1pOyk3qS5IC0gpMCkq6TpoaKk4qS3ICilvaXVCiulyKWmpaeloiBSQUlEIKTLwtCkt6TGKSClz6G8pcmlpqWnpaIgUkFJRCCk8rvIpMOkxqSkpOukyqTpoaKks6TOpbulr6W3peel86TyCivGyaTgyazN16TPpKKk6qTepLuk86GjCisKK0xWTaGipb2l1aXIpaalp6WiIFJBSUQgpOSl0aG8pcalo6W3peel86TPpLek0KS3pNDGsbv+pMu7yM3RpLWk7KTepLmkrKGipL2k7KTpCiukz8G0pMbGyM6ppMu7yKTvpOzGwKTepLk6CisgICogTFZNIKTIpb2l1aXIpaalp6WiIFJBSUQgpM+kt6TQpLek0KGiwLikzqXPobylyaGmpcelo6W5pa+kx6TPpMqkr6GipdGhvAorpcalo6W3peel86SrpOnArqTqzqmkwaTepLmhoworICAqICEhISDEvqS3pMakr6TsICjD7TogTFZNIL7lpMe7yKTvpOykvyBSQUlEIKTPpN6kwCBMaW51eCCkx6W1pd2hvKXIpLWk7KTGCiukpKTKpKQgKD8pKQorCitHTlUgUGFydGVkIKTPIExWTSCk5KW9pdWlyKWmpaeloiBSQUlEIKTytLDBtKTLpM+ltaXdobylyKS3pMakpKTepLuk86SsoaKkvaTsCiuk6aTOuMShuaTOpcShvKXrpMjByKTfueek76S7pMa7yKSmpMikraGipL2k7KTHpOKkyqSqza3N0aTHpLmho1BhcnRlZCCkz7DKsrykzgoruu62yKTLzPKky86ppMGk3qS5OgorICAqIKW9pdWlyKWmpaeloiBSQUlEIKTkIExWTSCl0aG8pcalo6W3peel86TOuu7ArgorICAqIM/Azf2l3KXqpeWhvKXgICikoqTrpKSkz6GiodayvsHbpdGhvKXGpaOlt6XnpfOh1ykgvuWkzqXVpaGlpKXroaalt6W5pcal4AorpM667sCuoaLC56StpLXK0bm5pOSls6XUobwKKworCis3LjEJUkFJRCCk5CBMVk0gpdGhvKXGpaOlt6XnpfOkzrruwK4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUkFJRCCk5CBMVk0gpdGhvKXGpaOlt6XnpfOk8rruwK6kuaTrpL+k4aTLoaKwyrK8pPKkt6TKpLGk7KTQpMqk6qTepLuk8zoKKygxKSBta3BhcnQgpbOl3qXzpcmkx6XRobylxqWjpbel56XzpPK67sCupLek3qS5oaMKKygyKSCkvaTOpdGhvKXGpaOlt6XnpfO+5aTOIExWTSCk5CBSQUlEIKXVpemlsKTyzqmkxqTepLmhoworCivO46SopNA6CisKKwkocGFydGVkKSBta3BhcnQgcHJpbWFyeSBleHQyIDAgNDAwMAorCShwYXJ0ZWQpIHNldCAxIGx2bSBvbgorCivD7TogpL2kziBMVk0gpOQgUkFJRCCl0aG8pcalo6W3peel86TPpN6kwLvIzdG94Mj3pKzAsKTDpMakpKTKpKSkx6S3pOekpqGjCiukvaTspMek4qTkpM+k6qGiUkFJRCCky8LQpLekxqTPIG1rcmFpZCg4KSCk8rzCudSkt6S/pOqhosqqzf2l3KXqpeWhvKXgpPK96bT8CiuyvaS3pL+k6qGiz8DN/aWwpeuhvKXXpPK67sCupLmk66TKpMmkzqS/pOGky6GiTFZNIKXEobyl66Tyu8ikpsmszdekrKSipOqk3qS5oaMKKworCis3LjIJpb2l1aXIpaalp6WiIFJBSUQgpOQgTFZNIM/Azf2l3KXqpeWhvKXgvuWkzqXVpaGlpKXroaalt6W5pcal4MHguu4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUGFydGVkIKTPIFJBSUQgpOQgTFZNIKTyzf2y8qS3pN6ku6TzpKyholJBSUQgpOQgTFZNIM/Azf2l3KXqpeWhvKXgpPLB4LrupLmk6worpLOkyKSspMekraTepLmho6S9pOykzyBMaW51eCCkziBSQUlEIKTkIExWTSCkzqW1pd2hvKXIpPLN+M3RpLek3qS5oaOkvaTspOakqKGiCiukoqTKpL+kziBMaW51eCClq6G8pc2l66SsIFJBSUQgpOQgTFZNIKTypbWl3aG8pcikt6TGpKSk677sueeky7jCpOqhoqSzpOyk6aTOCivK/cuhpPK7yKSopN6kuaGjCisKK1JBSUQgpOQgTFZNIM/Azf2l3KXqpeWhvKXgICikoqTrpKSkz6GipL2k7KSsvcXN16TKpOmhosC4pM6l0aG8pcalo6W3peel8ykgvuUKK6TOpdWloaWkpeuhpqW3pbmlxqXgpPLB4LrupLmk66S/pOGky6Giz8DN/aXcpeql5aG8peAgKKXRobylxqWjpbel56XzKSClx6XQpaQKK6W5pPLBqqTWpLOkyKTLpOikw6TGoaJwYXJ0ZWQgpPKzq7vPpMekraTepLmho87jpKik0DoKKworCSMgcGFydGVkIC9kZXYvbWQwCisKK6SzpM6+z6TOu8Sk6qTHpM+hoqHWsr7B26XHpdClpKW5odekzyBQYXJ0ZWQgpKzK1L24pLekxqSkpOulx6XQpaSluaTyu9ikuaTHCiukt6TnpKYgKKS5pLC+5aTOzuOkx6TPOiAvZGV2L21kMCmhoworCisKKzcuMi4xCaXVpaGlpKXroaalt6W5pcal4KTOuu7ArgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisoMSkgbG9vcCClx6Wjpbmlr6Gmpeml2aXrpPK67sCupLek3qS5oaOks6TspM+1tqTOpcelo6W5pa+hpqXppdml66THoaIKK1BhcnRlZCCky7K+wdulx6XQpaSluaTyw7Gw7KTOpdWloaWkpeuhpqW3pbmlxqXgpMikt6TGsLekpqTopKaky7a1pKik3qS5oaMKK6SzpM61tqTOpcelo6W5pa+hpqXppdml66THpM+hoqW8pe2hoqTepL+kz6GisOykxKTOpdGhvKXGpaOlt6XnpfOkrKSipOqk3qS5oaMKKworCShwYXJ0ZWQpIG1rbGFiZWwgbG9vcAorCisoMikgUGFydGVkIKTOIG1rcGFydGZzIKWzpd6l86XJpPK7yKTDpMahoqS9pM6l1aWhpaSl66GmpbeluaXGpeCk8rruwK6kt6TepLmhoworpL2kzqXVpaGlpKXroaalt6W5pcal4KTOs6u7z8XApPKlvKXtpMukuaTrpNmkraTHpLmho6S9pM6l0aG8pcalo6W3peel86TPsr7B2worpcel0KWkpbnG4qTOpMmks6THvaqk76TDpMak4qSrpN6kpKTepLuk86Gjsr7B26XHpdClpKW5pM7C56StpLWkzyBwcmludCCls6XeCiul86XJpMe4q73QpLmks6TIpKykx6StpN6kuaGjzuM6CisKKwkocGFydGVkKSBwcmludAorCURpc2sgZ2VvbWV0cnkgZm9yIC9kZXYvbWQwOiAwLjAwMC00Ny4wNjUgbWVnYWJ5dGVzCisJRGlzayBsYWJlbCB0eXBlOiBsb29wCisJTWlub3IgICAgU3RhcnQgICAgICAgRW5kICAgICBGaWxlc3lzdGVtICBGbGFncworCShwYXJ0ZWQpIG1rcGFydGZzIHByaW1hcnkgZXh0MiAwIDQ3LjA2NQorCShwYXJ0ZWQpIHByaW50CisJRGlzayBnZW9tZXRyeSBmb3IgL2Rldi9tZDA6IDAuMDAwLTQ3LjA2NSBtZWdhYnl0ZXMKKwlEaXNrIGxhYmVsIHR5cGU6IGxvb3AKKwlNaW5vciAgICBTdGFydCAgICAgICBFbmQgICAgIEZpbGVzeXN0ZW0gIEZsYWdzCisJMSAgICAgICAgICAwLjAwMCAgICAgNDcuMDY1ICBleHQyCisKKzcuMi4yCaXVpaGlpKXroaalt6W5pcal4KTOwuekraS1ytG5uQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCivEzL7voaKyvsHbpcel0KWkpbmkzsLnpK2ktaTyytG5uaS5pOukzqTIxrGkuLv+pMuhoqXVpaGlpKXroaalt6W5pcal4KTOwuekraS1Ciuk8srRubmkt6TepLmho6TipLel1aWhpaSl66GmpbeluaXGpeCkyLK+wdulx6XQpaSluaTOwuekraS1pPLB/cLnpLWku6TGpKSk6worpMqk6aGipN6kuqS9pM6lx6XQpaSluaTyIChSQUlEIKTkIExWTSClxKG8peukxykgwf3C56S1pLuk66TZpK2kx6GipL2kt6TGpL2kzgorpdWloaWkpeuhpqW3pbmlxqXgpPLB/cLnpLWku6TepLmho6TipLel1aWhpaSl66GmpbeluaXGpeCkyLK+wdulx6XQpaSluaTyvcy+rgorpLekxqSkpOukyqTpoaKk3qS6pL2kzqXVpaGlpKXroaalt6W5pcal4KTyvcy+rqS1pLuhoqS9pLekxqGipL2kzrK+wdulx6XQpaSluQorpPK45aTHudSkpqTZpK2kx6S5oaMKKworUGFydGVkIKTHpdWloaWkpeuhpqW3pbmlxqXgpM7C56StpLWk8srRubmkuaTrpL+k4aTLoaJyZXNpemUgpbOl3qXzpcmk8rvIpKQKK6TepLmho87jpKik0DoKKworCShwYXJ0ZWQpIHNlbGVjdCAvZGV2L21kMAorCShwYXJ0ZWQpIHJlc2l6ZSAxIDAgMjAKKworNy4yLjMJsr7B26XHpdClpKW5pKuk6aXRobylxqWjpbel56XzpNikzqXVpaGlpKXroaalt6W5pcal4KTOpbOl1KG8CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK8OxpMsgY3AgpbOl3qXzpcmk8rvIpKSk3qS5oaPO46SopNA6CisKKwkocGFydGVkKSBzZWxlY3QgL2Rldi9oZGEKKwkocGFydGVkKSBjcCAvZGV2L21kMCAxIDMKKworNy4yLjQJpdWloaWkpeuhpqW3pbmlxqXgpKuk6bK+wdulx6XQpaSluaTYpM6l1aWhpaSl66GmpbeluaXGpeCkzqWzpdShvAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKDEpILK+wdulx6XQpaSlub7lpMsgbG9vcCClx6Wjpbmlr6Gmpeml2aXrpPK67sCupLek3qS5oaPO46SopNA6CisKKwkocGFydGVkKSBzZWxlY3QgL2Rldi9tZDAKKwkocGFydGVkKSBta2xhYmVsIGxvb3AKKworKDIpIG1rcGFydGZzIKWzpd6l86XJpPK7yKTDpMahorK+wdulx6XQpaSlub7lpMul1aWhpaSl66GmpbeluaXGpeCk8rruwK6kt6TepLmhoworzuOkqKTQOgorCisJKHBhcnRlZCkgbWtwYXJ0ZnMgcHJpbWFyeSBleHQyIDAgNDcuMDY1CisKKygzKSBjcCCls6XepfOlyaTHpdGhvKXGpaOlt6XnpfOk8qWzpdShvKS3pN6kuToKKworCShwYXJ0ZWQpIHNlbGVjdCAvZGV2L2hkYQorCShwYXJ0ZWQpIGNwIC9kZXYvbWQwIDMgMQorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOAmlx6Wjpbmlr6GmpaSl4aG8pbil86WwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworpcelo6W5pa+hpqWkpeGhvKW4pfOlsKTPwuC2/qTKIFdpbmRvd3MgpM6lpKXzpbmlyKG8peu67rbIpPKy88jypLmk66S/pOGkzgorvOrLoaTHpLmho87jpKik0KGipOKktyBXaW5kb3dzIKTIIE9mZmljZSCk8iAxMDAwIKXepbel86TLpaSl86W5pcihvKXrpLekv6SkCiukyqTpoaLCv8qsIDEwMDAgu/601qTOzPMgNSDH3KSwpOmkpKSrpKuk66THpLek56SmoaNHTlUvTGludXggpMCkyKGiUmVkIEhhdAorpM4ga2lja3N0YXJ0IKTOpOikpqTKpdel7aWwpeml4KSspKKk66TOpMehoqS9pPOkyqTLpNKkyaSvpM+koqTqpN6ku6TzoaMKK6S9pM6l16XtpbCl6aXgpM/CvqTOpdel7aWwpeml4KTOpaSl86W5pcihvKXrpOShorzCut3FqqTLpM+hoqSipMqkv6SspOSk6woryazN16TOpKKk66SzpMik8rK/pMek4ryrxrCyvaS5pOuks6TIpKykx6StpN6kuaGjpL2kzqS/pOGhoqXHpaOluaWvoaYKK6WkpeGhvKW4pfOlsKTPy9zF9qTLIFdpbmRvd3Mgpd6lt6XzpMCksaTOpL+k4aTLu8ik76TspMakpKTepLmho8zApOmkq6TLoaIKK7LmobmkzyBXaW5kb3dzICik5KGipKSkq6TKpOu8q82zpMekyqSkpb2l1aXIpaalp6WiKSCk8sG0pK+7yKTvpMqkpKTopKakywortKuk4aTGpKSk3qS5pKyhoqTbpMik86TJpM7ByL+lpMekz6Gizr7K/aTOpbeluaXGpeCkrM34zdGkx6StpOu+9cLWpMukoqTrCiuw3LnUtPyk8rfQpOuks6TIpMqkr6GiV2luZG93cyCkq6TpIEdOVS9MaW51eCAopOTCvqTOpdWl6qG8pb2l1aXIpaalp6WiKQorpMvA2qTqtLmkqKTrpLOkyKSspMekraTKpKSks6TIpPLN/bLypLekxqSkpN6kuaGjCisKK6XHpaOluaWvoaalpKXhobyluKXzpbCk8rvIpKik0KGipdahvKXIoaalx6Wjpbmlr6TIIENEIKTywd6kt7n+pN+hoqS9pOyk8goryPSk0KS5pLOkyKTLpOikw6TGoaJXaW5kb3dzIKTIIE9mZmljZSCk8rTepOCl0aG8pcalo6W3peel86TOpcelo6W5pa+hpqWkCiul4aG8pbik8iBDRCCky77GpK2hoqS9pM6l0aG8pcalo6W3peel86TyxL7A3MG0pMakzqWzpfOl1KXlobylv6TOpc+hvKXJoaYKK6XHpaOluaWvpMuls6XUobykuaTrpLOkyKSspMekraTepLmho6S3pKuktyBXaW5kb3dzIKTOpcelo6W5pa++5aTOpdGhvKXGpaMKK6W3peel86TPpKqkvaTppK+k4qTDpMjC56StpK+kyqTrpMekt6TnpKakq6TpoaKkvaTOpdGhvKXGpaOlt6XnpfOkz6TepL/C5worpK2ktaTyytG5uaS1pOykzaTQpMqk6aTKpKSkx6S3pOekpqGju+Skz7K/v82k4qTOv82huaSspLOkzr3ow9ak8iBMaW51eCCkzgorpdahvKXIoaal1aXtpcOl1KWjpMggUGFydGVkIKTyu8ikw6TGpKak3qSvvKvGsLK9pLekv6TIyrmkpKTGpKSk3qS5oaOkvaTOCiul1aXtpcOl1KWjpPIgQ0QgvuWkzqXWobylyKGmpaSl4aG8pbikyKS3pMbN+M3RpLmk66SzpMiky6TopMOkxqGiQ0RST00gpMAKK6SxpPK7yKSmpLOkyKTissTHvaTHpLmho6TopOrCv6SvpM6+8MrzpPLDzqTrpL+k4aTLIENEIHdyaXRpbmcgSE9XVE8gpPLGyaTzCiukx6SvpMCktaSkoaOks6SmpLekv6SzpMjBtMLOpPLGr6SrpLuk66S/pOGky6TkpOmkyqSkpMikpKSxpMqkpMnUssS717XEpMoKK6SzpMikrL6vpLekoqTqpN6kuSAopL2k7KTppM+8oaTOsMLE6rfPzvOkx8S+pLWk7KTrpMekt6TnpKYpoaOkpKS6pOyky6S7pOihogorsMqyvKSssOzIzMWqpMrK/cuhpMekuToKKworKDEpIMu+pN+kzsDfxOqkx6GipKKk66Xepbel86TLIFdpbmRvd3MgpPKlpKXzpbmlyKG8peukt6TepLmhozY0MCBNYiCwyr7lCiu7yKTvpLqhorSwwbSkyiBMaW51eCCkzqWkpfOluaXIobyl66TIIENEIKTOpaSl4aG8pbjG86TEyqykzqWzpdShvM3RpM4KKzEzMDAgTWIgpM6kv6ThpMu9vcqspMrNvsPPpPK7xKS5uMKk6qGipL2kzqXRobylxqWjpbel56XzpPK5paStpMqkwKSxwuekraSvCiukt6TGub2kpKTepLuk86GjCisKKygyKSCkvaTOpd6lt6XzpMsgTGludXggpPKlpKXzpbmlyKG8peukt6TepLmhoworCisoMykgpL2kziBDRCCkzqWkpeGhvKW4pM6kv6ThpM6lx6Wjpeylr6XIpeqk8rrupOqk3qS5ICjO4zogL3Jvb3QvY2RpbWFnZS8poaMKKworKDQpIKS9pM4gQ0QgpM6lpKXhobyluKTOpcelo6Xspa+lyKXqpMsgNjQwIE1iIKTOpcelo6W5pa+hpqWkpeGhvKW4pM6l1aWhpaSl6worKM7jOiAvcm9vdC9jZGltYWdlL2Rpc2tpbWFnZSkgpPK67sCupLek3qS5OgorCisgICAgICAgICMgZGQgaWY9L2Rldi96ZXJvIG9mPS9yb290L2NkaW1hZ2UvZGlza2ltYWdlIGJzPTFNIGNvdW50PTY0MCAKKworKDUpIFdpbmRvd3MgpdGhvKXGpaOlt6XnpfOk8qXHpaOluaWvoaalpKXhobyluKTYpbOl1KG8pLmk66S/pOGholBhcnRlZCCk8gorzfjN0aS3pN6kuToKKworICAgICAgICAjIHBhcnRlZCAvcm9vdC9jZGltYWdlL2Rpc2tpbWFnZSBta2xhYmVsIG1zZG9zIG1rcGFydCBwcmltYXJ5IGZhdCAwIDYzOQorCSMgcGFydGVkIC9yb290L2NkaW1hZ2UvZGlza2ltYWdlIGNwIC9kZXYvaGRhIDEgMQorCisoNikgpL2kziBDRCCkzqWkpeGhvKW4pM6lx6Wjpeylr6XIpeqkq6TpIENEIKWkpeGhvKW4pPK67sCupLehoqS9pOyk8qSipMqkvworuaWk36TOIENEIL3xpK25/qTfpcShvKXrpMcgQ0QgpMu+xqStpN6kuaGjCisKKyg3KSDK7LnxuOyltaXdobylyKTIIHJlYWRsaW5lIKW1pd2hvKXIpPLMtbj6pMukt6S/oaJQYXJ0ZWQgpM7Gw8rMpMql0KG8pbil56XzCiuk8qWzpfOl0aWkpeukt6TepLkgKKSipOukpKTPoaJGcmVzaG1lYXQgpKuk6cbDysykyiBSUE0gpPKlwKWmpfOl7aG8pcmkt6TepLkpOgorCisgICAgICAgIGxvY2FsaG9zdDp+L3BhcnRlZC0xLjAuMCMgLi9jb25maWd1cmUgLS1kaXNhYmxlLW5scworICAgICAgICAtLXdpdGhvdXQtcmVhZGxpbmUgLS1kaXNhYmxlLXNoYXJlZDsgbWFrZSAKKworKDgpIExpbnV4IKTOpdahvKXIoaalx6Wjpbmlr6Tyuu7ArqS3pN6kuSAoQm9vdGRpc2sgSE9XVE8gpPK7sr7IKaGjCisKKyg5KSCkvaTOpdahvKXIoaalx6WjpbmlryAopKvK5L28pM6l66G8pcihpqXHpaOluaWvKSCky77KzqzIx6TOIFBhcnRlZCCk8gorw9akraTepLmhoworCisoMTApILDKsryk8rnUpKalt6WnpeuhpqW5pa+l6qXXpcik8r3xpK2k3qS5OgorCisgICAgICAgIG1vdW50IC9kZXYvY2Ryb20gL21udC9jZHJvbQorICAgICAgICBwYXJ0ZWQgLS1zY3JpcHQgL2Rldi9oZGEgbWtsYWJlbCBtc2RvcyBta3BhcnRmcyBwcmltYXJ5IGZhdCAwIFNPTUUtU0laRQorCXBhcnRlZCAtLXNjcmlwdCAvZGV2L2hkYSBjcCAvbW50L2Nkcm9tL2Rpc2tpbWFnZSAxIDEKKwlwYXJ0ZWQgLS1zY3JpcHQgL2Rldi9oZGEgc2V0IDEgYm9vdCBvbgorICAgICAgICAvc2Jpbi9oYWx0IAorCisoMTEpIKWkpfOluaXIobyl67Oru8+hqiCkvaTOpdWl7aXDpdSlo6TIIENEIKTys8als6XzpdSl5aG8pb+ky8HepLe5/qTfoaIKK6S9pOyk8rLzpLekxqSkpK2k3qS5Li4uCisKK8zApOmkq6TLoaK75KTPpLOkzsr9y6Gk8qS6pMOkyLTKw7Gky6S5pOuks6TIpKykx6StpN6kuaS3oaKkvaSmpLmk66THpLek56SmoaMKK7Lmobmkz6SzpOyk8rnUpKakzqTLvq63v6TOpcelo6W5pcil6qXTpeWhvKW3peel86Tyuu6k7aSmpMi5zaSopMakpKTrpMiks6TtCiukx6S5oaO75KTLpM+kvaSmpKSkpqTipM6k8rTJzf2kuaTru/601qSspKKk6qTepLuk86Giza271qTPpKSk3qS7pPOkq6GpCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis5CaS1pOmkyqTrvvDK86TItNjPoqW9pdWlyKWmpaelogorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK6TipLek4qTDpMikv6SvpLWk86TOvvDK86TyyK+4q6S3pL+k6aGitaS32qTLIHBhcnRlZEBnbnUub3JnIKTLvMHM5KTywfekw6TGCiukr6TApLWkpKGjKCEpIKTPpKqkvaTppK+koqTKpL+kzqXHpaOluaXIpeql06Xlobylt6XnpfOky7TepN6k7KTGpKSk677wyvOkqworpb2l1aXIpaalp6WipPK8qKS3pMakpKTepLmhoworCitHTlUgUGFydGVkIMfbydvKqsPmpM6ks6TspOmkzqXVpaGlpKXrpM+ktaTppMqk677wyvOk8rTepPOkx6SkpN6kuToKKyAgKiBBQk9VVC1OTFMgLSDK7LnxuOyltaXdobylyKTOu8jN0aTIIEZyZWUgVHJhbnNsYXRpb24gUHJvamVjdCCky6TEpKSkxqTOCiu+8MrzCisgICogQVBJIC0gbGlicGFydGVkIKTOIEFQSSCkzrLywOIKKyAgKiBBVVRIT1JTIC0gw6+krLK/pPK98aSkpL+kqworICAqIEJVR1MgLSDMpLLyt+ikzqXQpbAKKyAgKiBDaGFuZ2VMb2cgLSBHTlUgUGFydGVkIKTLpMqktaTspL/K0bm5pM7N+s7yCisgICogQ09QWUlORyAtIEdOVSBQYXJ0ZWQgpM7H28nbvvK376THpKKk66GiR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgKiBDT1BZSU5HLkRPQyAtIFBhcnRlZCCkzrLywOK98aSsx9vJ26S1pOykxqTopKS+8rfvpMekoqTroaJHTlUgRnJlZQorRG9jdW1lbnRhdGlvbiBMaWNlbmNlCisgICogRkFUIC0gRkFUIKTOwuekraS1ytG5uaXXpe2lsKXppeCkzsawuu6kzrvFwciky7TYpLmk677wyvMgKKXXpe2lsKXppd7N0SkKKyAgKiBJTlNUQUxMIC0gR05VIFBhcnRlZCCk5CDCvqTOpNukyKTzpMmkzqXVpeqhvKW9pdWlyKWmpaeloqTOpbOl86XRpaSl68r9y6EKKyAgKiBUT0RPIC0gpN6kwLzCwfWktaTspMakpKTKpKShorfXsujD5qTOxsPEpworCiuwyrK8pM6y8sDivfGkzyBHTlUgUGFydGVkIKTIpM+w7L3vpMvH28nbpLWk7KTGpKSk3qS7pPOkrKGizPKky86ppMSkq6TiCiukt6TspN6ku6TzoaOks6TspOmkzqSmpMGhoqTbpMik86TJpM/Cv8qspKKkyqS/pM6lx6WjpbmlyKXqpdOl5aG8pbel56XzpMsKK8b+pMOkxqSkpOukx6S3pOekpqGjzuOkqKTQoaJSZWQgSGF0IExpbnV4IKTHpM+hokNEIL7lpM4gL2RvYy9IT1dUTyCkyAorL2RvYy9GQVEgpPK4q6TGpK+kwKS1pKShoworCitbzPXD7Togwr+kr6TOIExEUCClyaWtpeWl4aXzpcikz82tu9akzrzqpMuk6KTqxvzL3LjspMvL3cz1pLWk7KTGpKqk6qGiSkYKK6TOpdqhvKW4pKuk6aXApaal86XtobylyaTHpK2k3qS5OgorCWh0dHA6Ly9qZi5saW51eC5vci5qcC8KK7DKsrykx6TPpaql6qW4pcql66TOVVJMpM6k3qTepMukt6TGpKqkraTepLmho10KKworICAqIEZpbGVzeXN0ZW1zIEhPV1RPICAgaHR0cDovL3Blbmd1aW4uY3ovfm1oaS9mcy8KKyAgKiBIYXJkIERpc2sgVXBncmFkZSBtaW5pLUhPV1RPICghKTogICBodHRwOi8vc3Vuc2l0ZS51bmMuZWR1L0xEUC9IT1dUTworICAqIExhcmdlIERpc2sgSE9XVE8gICBodHRwOi8vd3d3Lndpbi50dWUubmwvfmFlYi9saW51eC9MYXJnZS1EaXNrLmh0bWwKKyAgKiBMSUxPIG1pbmktSE9XVE8gKCEpICAgaHR0cDovL3N1bnNpdGUudW5jLmVkdS9MRFAvSE9XVE8KKyAgKiBNSUxPIEhPV1RPICghKSAgIGh0dHA6Ly9zdW5zaXRlLnVuYy5lZHUvTERQL0hPV1RPCisgICogTGludXgrT1MgbWluaS1IT1dUT3MgKCEpOiBMaW51eCtET1MrV2luOTUrT1MyLCBMaW51eCtGcmVlQlNELW1pbmktSE9XVE8sCitMaW51eCtXaW45NSwgTGludXgrRnJlZUJTRCwgTGludXgrTlQtTG9hZGVyLiAgpLOk7KTppM+wyrK8pKuk6cb+vOqkx6StpN6kuToKKyAgICAgIGh0dHA6Ly9zdW5zaXRlLnVuYy5lZHUvTERQL0hPV1RPCisgICogUGFydGl0aW9uIG1pbmktSE9XVE8gKCEpOgorICAgICAgaHR0cDovL3d3dy5saW51eGRvYy5vcmcvSE9XVE8vbWluaS9QYXJ0aXRpb24vaW5kZXguaHRtbAorICAqIFBhcnRpdGlvbiBUYWJsZSBIT1dUTworICAgICAgaHR0cDovL3d3dy53aW4udHVlLm5sL35hZWIvcGFydGl0aW9ucy9wYXJ0aXRpb25fdGFibGVzLmh0bWwKKyAgKiBQYXJ0aXRpb24gVHlwZXMgbGlzdAorICAgICAgaHR0cDovL3d3dy53aW4udHVlLm5sL35hZWIvcGFydGl0aW9ucy9wYXJ0aXRpb25fdHlwZXMuaHRtbAorICAqIFNvZnR3YXJlIFJBSUQgSE9XVE8KKyAgICAgIGh0dHA6Ly9saW5hcy5vcmcvbGludXgvU29mdHdhcmUtUkFJRC9Tb2Z0d2FyZS1SQUlELmh0bWwKKworpLOks6THwr6kzrTYz6Kkt6S/pdel7aWwpeml4KTytfOksqTepLmho6SzpOyk6aTOsOzJ9KTiza3N0aTKsvLA4qTyu/2kw6TGCiukpKTepLk6CisgICogRGlzayBEcmFrZS4gIHd3dy5saW51eC1tYW5kcmFrZS5jb20vZGlza2RyYWtlLiAgpLOk7KTPIFBhcnRlZCCkyLWhx73FqqTLCivO4Lv3pLekxqSkpN6kuaGjRGlzayBEcmFrZSCkziBGQVQgpbOhvKXJpM+y5qG5pM4gUGFydGVkIKTOpbOhvKXJpPK08KTLpLekxqSkCiuk3qS5oaOktaSioaJEaXNrIERyYWtlIKSspMmkzqTopKakyyBQYXJ0ZWQgpMvJpMWopLmk66SruKukxqTfpN6kt6TnpKY6ICiy5qG5CivOvrzUpKzGsbDVpLekxqSkpN6kuSA6LSkgRGlzayBEcmFrZSCkzzoKKworCS0gu8ikpqTOpKyk4qTDpMi0ysOxpMehorTWsOOkpKTyyMiktaTKpKSk6KSmpMu86aTDpMakr6TspN6kuQorCS0gpOKkw6TItLDArsXZpM654qSkzOTC6rLyt+i86suhICgvZXRjL2ZzdGFioaJsaWxvIKTKpMmk8r3ozf2kt6TepLkpCisJLSBGQVQgpM6ltaXdobylyKTPpOKkw6TIyc+85SAoRkFUMTahokZBVDMyILTWpMfK0bS5pMekraTKpKSkt6GiCisJICCl0aG8pcalo6W3peel86TypbOl1KG8pMekraTepLuk8ykKKwktIGV4dDIgpM6ltaXdobylyKTPpOKkw6TIyc+85SAouqOkzqTIpLOk7aTPKQorCS0gKLXszeikzikgRE9TIKTkIFdpbmRvd3MgpbeluaXGpeCkyKTOuN+0ucCtpPKkoqTzpN6k6rnNzrikt6TGpN6ku6TzCisJLSDI8yBQQyCloqG8pa2lxqWvpcGl46TLpM+ltaXdobylyKTKpLcKKworICAqIGRvc2ZzY2sKKyAgKiBlMmZzY2ssIHJlc2l6ZTJmcyBlMmZzcHJvZ3MgKCEpCisgIAlodHRwOi8vd2ViLm1pdC5lZHUvdHl0c28vd3d3L2xpbnV4L2UyZnNwcm9ncy5odG1sCisgICogZXh0MnJlc2l6ZSAtIFBhcnRlZCCkyMaxpLils6G8pcmk8rvIpKSk3qS5pKyhoqWipfOl3qWmpfOlyKTyyazN16TIpLekyqSkoaIKK29ubGluZSBleHQyIHJlc2l6ZXIgpM6k6KSmpMqhosK+pM6kpKSkpOKkzqTypKSkr6TEpKu03qTzpMekpKTepLmhoworCWh0dHA6Ly9leHQycmVzaXplLnNvdXJjZWZvcmdlLm5ldAorICAqIGZkaXNrICghKQorICAqIEZJUFMgKCEpIChGaXJzdCBJbnRlcmFjdGl2ZSBQYXJ0aXRpb24gU3BsaXR0ZXIpCisgICAgICBodHRwOi8vd3d3LmlnZC5maGcuZGUvfmFzY2hhZWZlL2ZpcHMvCisgICogR1BhcnQgLSCy9aTspL+l0aG8pcalo6W3peel86GmpcahvKXWpeuk8rLzyfyktaS7pN6kuaGjCisgICAgICBodHRwOi8vd3d3LnN0dWQudW5pLWhhbm5vdmVyLmRlL3VzZXIvNzYyMDEvZ3BhcnQKKyAgKiBHTlUgR1JVQiAtIEdSYW5kIFVuaWZpZWQgQm9vdGxvYWRlcgorICAgICAgaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2dydWIvZ3J1Yi5odG1sCisgICogTElMTyAoISkgKExJbnV4IExPYWRlcikgICBmdHA6Ly90c3gtMTEubWl0LmVkdS9wdWIvbGludXgvcGFja2FnZXMvbGlsby8KKyAgKiBMVk0gICBodHRwOi8vbGludXgubXNlZGUuY29tL2x2bQorICAqIG1rZG9zZnMgKCEpICAopMikraTJpK0gbWtmcy5tc2RvcyCkyLjGpNCk7KTepLkpCisgICogbWtlMmZzICghKSAgKKTIpK2kyaStIG1rZnMuZXh0MiCkyLjGpNCk7KTepLkpCisgICogbWtmcyAoISkKKyAgKiBta3N3YXAgKCEpCisgICogcXVpayAoISkKKyAgKiByZWlzZXJmczogw+06IHJlaXNlcmZzIKTOwuekraS1ytG5uaXEobyl66TPxMy+76TOIHJlaXNlcmZzIMfbydvKqqTLtN6k3gorpOykxqSkpN6kuaGjCisJaHR0cDovL2RldmxpbnV4LmNvbS9wcm9qZWN0cy9yZWlzZXJmcworICAqIHlhYm9vdCAoISkgIGh0dHA6Ly9wcGNsaW51eC5hcHBsZS5jb20vfmJlbmgvCisKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9kb2MvZmRsLnRleGkgYi9wYXJ0ZWQtMS44LjcvZG9jL2ZkbC50ZXhpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhYTBmM2IKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvZG9jL2ZkbC50ZXhpCkBAIC0wLDAgKzEsNDAzIEBACisKK0Bub2RlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZQorQGFwcGVuZGl4c2VjIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZQorCitAY2luZGV4IEZETCwgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlCitAY2VudGVyIFZlcnNpb24gMS4xLCBNYXJjaCAyMDAwCisKK0BkaXNwbGF5CitDb3B5cmlnaHQgQGNvcHlyaWdodHt9IDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCis1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCisKK0V2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCitAZW5kIGRpc3BsYXkKKworQGVudW1lcmF0ZSAwCitAaXRlbQorUFJFQU1CTEUKKworVGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlIGlzIHRvIG1ha2UgYSBtYW51YWwsIHRleHRib29rLCBvciBvdGhlcgord3JpdHRlbiBkb2N1bWVudCBAZGZue2ZyZWV9IGluIHRoZSBzZW5zZSBvZiBmcmVlZG9tOiB0byBhc3N1cmUgZXZlcnlvbmUKK3RoZSBlZmZlY3RpdmUgZnJlZWRvbSB0byBjb3B5IGFuZCByZWRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorbW9kaWZ5aW5nIGl0LCBlaXRoZXIgY29tbWVyY2lhbGx5IG9yIG5vbmNvbW1lcmNpYWxseS4gIFNlY29uZGFyaWx5LAordGhpcyBMaWNlbnNlIHByZXNlcnZlcyBmb3IgdGhlIGF1dGhvciBhbmQgcHVibGlzaGVyIGEgd2F5IHRvIGdldAorY3JlZGl0IGZvciB0aGVpciB3b3JrLCB3aGlsZSBub3QgYmVpbmcgY29uc2lkZXJlZCByZXNwb25zaWJsZSBmb3IKK21vZGlmaWNhdGlvbnMgbWFkZSBieSBvdGhlcnMuCisKK1RoaXMgTGljZW5zZSBpcyBhIGtpbmQgb2YgYGBjb3B5bGVmdCcnLCB3aGljaCBtZWFucyB0aGF0IGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSBkb2N1bWVudCBtdXN0IHRoZW1zZWx2ZXMgYmUgZnJlZSBpbiB0aGUgc2FtZSBzZW5zZS4gIEl0Citjb21wbGVtZW50cyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHdoaWNoIGlzIGEgY29weWxlZnQKK2xpY2Vuc2UgZGVzaWduZWQgZm9yIGZyZWUgc29mdHdhcmUuCisKK1dlIGhhdmUgZGVzaWduZWQgdGhpcyBMaWNlbnNlIGluIG9yZGVyIHRvIHVzZSBpdCBmb3IgbWFudWFscyBmb3IgZnJlZQorc29mdHdhcmUsIGJlY2F1c2UgZnJlZSBzb2Z0d2FyZSBuZWVkcyBmcmVlIGRvY3VtZW50YXRpb246IGEgZnJlZQorcHJvZ3JhbSBzaG91bGQgY29tZSB3aXRoIG1hbnVhbHMgcHJvdmlkaW5nIHRoZSBzYW1lIGZyZWVkb21zIHRoYXQgdGhlCitzb2Z0d2FyZSBkb2VzLiAgQnV0IHRoaXMgTGljZW5zZSBpcyBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBtYW51YWxzOworaXQgY2FuIGJlIHVzZWQgZm9yIGFueSB0ZXh0dWFsIHdvcmssIHJlZ2FyZGxlc3Mgb2Ygc3ViamVjdCBtYXR0ZXIgb3IKK3doZXRoZXIgaXQgaXMgcHVibGlzaGVkIGFzIGEgcHJpbnRlZCBib29rLiAgV2UgcmVjb21tZW5kIHRoaXMgTGljZW5zZQorcHJpbmNpcGFsbHkgZm9yIHdvcmtzIHdob3NlIHB1cnBvc2UgaXMgaW5zdHJ1Y3Rpb24gb3IgcmVmZXJlbmNlLgorCitAaXRlbQorQVBQTElDQUJJTElUWSBBTkQgREVGSU5JVElPTlMKKworVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IG1hbnVhbCBvciBvdGhlciB3b3JrIHRoYXQgY29udGFpbnMgYQorbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgY2FuIGJlIGRpc3RyaWJ1dGVkCit1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiAgVGhlIGBgRG9jdW1lbnQnJywgYmVsb3csIHJlZmVycyB0byBhbnkKK3N1Y2ggbWFudWFsIG9yIHdvcmsuICBBbnkgbWVtYmVyIG9mIHRoZSBwdWJsaWMgaXMgYSBsaWNlbnNlZSwgYW5kIGlzCithZGRyZXNzZWQgYXMgYGB5b3UnJy4KKworQSBgYE1vZGlmaWVkIFZlcnNpb24nJyBvZiB0aGUgRG9jdW1lbnQgbWVhbnMgYW55IHdvcmsgY29udGFpbmluZyB0aGUKK0RvY3VtZW50IG9yIGEgcG9ydGlvbiBvZiBpdCwgZWl0aGVyIGNvcGllZCB2ZXJiYXRpbSwgb3Igd2l0aAorbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuCisKK0EgYGBTZWNvbmRhcnkgU2VjdGlvbicnIGlzIGEgbmFtZWQgYXBwZW5kaXggb3IgYSBmcm9udC1tYXR0ZXIgc2VjdGlvbiBvZgordGhlIERvY3VtZW50IHRoYXQgZGVhbHMgZXhjbHVzaXZlbHkgd2l0aCB0aGUgcmVsYXRpb25zaGlwIG9mIHRoZQorcHVibGlzaGVycyBvciBhdXRob3JzIG9mIHRoZSBEb2N1bWVudCB0byB0aGUgRG9jdW1lbnQncyBvdmVyYWxsIHN1YmplY3QKKyhvciB0byByZWxhdGVkIG1hdHRlcnMpIGFuZCBjb250YWlucyBub3RoaW5nIHRoYXQgY291bGQgZmFsbCBkaXJlY3RseQord2l0aGluIHRoYXQgb3ZlcmFsbCBzdWJqZWN0LiAgKEZvciBleGFtcGxlLCBpZiB0aGUgRG9jdW1lbnQgaXMgaW4gcGFydCBhCit0ZXh0Ym9vayBvZiBtYXRoZW1hdGljcywgYSBTZWNvbmRhcnkgU2VjdGlvbiBtYXkgbm90IGV4cGxhaW4gYW55CittYXRoZW1hdGljcy4pICBUaGUgcmVsYXRpb25zaGlwIGNvdWxkIGJlIGEgbWF0dGVyIG9mIGhpc3RvcmljYWwKK2Nvbm5lY3Rpb24gd2l0aCB0aGUgc3ViamVjdCBvciB3aXRoIHJlbGF0ZWQgbWF0dGVycywgb3Igb2YgbGVnYWwsCitjb21tZXJjaWFsLCBwaGlsb3NvcGhpY2FsLCBldGhpY2FsIG9yIHBvbGl0aWNhbCBwb3NpdGlvbiByZWdhcmRpbmcKK3RoZW0uCisKK1RoZSBgYEludmFyaWFudCBTZWN0aW9ucycnIGFyZSBjZXJ0YWluIFNlY29uZGFyeSBTZWN0aW9ucyB3aG9zZSB0aXRsZXMKK2FyZSBkZXNpZ25hdGVkLCBhcyBiZWluZyB0aG9zZSBvZiBJbnZhcmlhbnQgU2VjdGlvbnMsIGluIHRoZSBub3RpY2UKK3RoYXQgc2F5cyB0aGF0IHRoZSBEb2N1bWVudCBpcyByZWxlYXNlZCB1bmRlciB0aGlzIExpY2Vuc2UuCisKK1RoZSBgYENvdmVyIFRleHRzJycgYXJlIGNlcnRhaW4gc2hvcnQgcGFzc2FnZXMgb2YgdGV4dCB0aGF0IGFyZSBsaXN0ZWQsCithcyBGcm9udC1Db3ZlciBUZXh0cyBvciBCYWNrLUNvdmVyIFRleHRzLCBpbiB0aGUgbm90aWNlIHRoYXQgc2F5cyB0aGF0Cit0aGUgRG9jdW1lbnQgaXMgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlLgorCitBIGBgVHJhbnNwYXJlbnQnJyBjb3B5IG9mIHRoZSBEb2N1bWVudCBtZWFucyBhIG1hY2hpbmUtcmVhZGFibGUgY29weSwKK3JlcHJlc2VudGVkIGluIGEgZm9ybWF0IHdob3NlIHNwZWNpZmljYXRpb24gaXMgYXZhaWxhYmxlIHRvIHRoZQorZ2VuZXJhbCBwdWJsaWMsIHdob3NlIGNvbnRlbnRzIGNhbiBiZSB2aWV3ZWQgYW5kIGVkaXRlZCBkaXJlY3RseSBhbmQKK3N0cmFpZ2h0Zm9yd2FyZGx5IHdpdGggZ2VuZXJpYyB0ZXh0IGVkaXRvcnMgb3IgKGZvciBpbWFnZXMgY29tcG9zZWQgb2YKK3BpeGVscykgZ2VuZXJpYyBwYWludCBwcm9ncmFtcyBvciAoZm9yIGRyYXdpbmdzKSBzb21lIHdpZGVseSBhdmFpbGFibGUKK2RyYXdpbmcgZWRpdG9yLCBhbmQgdGhhdCBpcyBzdWl0YWJsZSBmb3IgaW5wdXQgdG8gdGV4dCBmb3JtYXR0ZXJzIG9yCitmb3IgYXV0b21hdGljIHRyYW5zbGF0aW9uIHRvIGEgdmFyaWV0eSBvZiBmb3JtYXRzIHN1aXRhYmxlIGZvciBpbnB1dAordG8gdGV4dCBmb3JtYXR0ZXJzLiAgQSBjb3B5IG1hZGUgaW4gYW4gb3RoZXJ3aXNlIFRyYW5zcGFyZW50IGZpbGUKK2Zvcm1hdCB3aG9zZSBtYXJrdXAgaGFzIGJlZW4gZGVzaWduZWQgdG8gdGh3YXJ0IG9yIGRpc2NvdXJhZ2UKK3N1YnNlcXVlbnQgbW9kaWZpY2F0aW9uIGJ5IHJlYWRlcnMgaXMgbm90IFRyYW5zcGFyZW50LiAgQSBjb3B5IHRoYXQgaXMKK25vdCBgYFRyYW5zcGFyZW50JycgaXMgY2FsbGVkIGBgT3BhcXVlJycuCisKK0V4YW1wbGVzIG9mIHN1aXRhYmxlIGZvcm1hdHMgZm9yIFRyYW5zcGFyZW50IGNvcGllcyBpbmNsdWRlIHBsYWluCitAc2N7YXNjaWl9IHdpdGhvdXQgbWFya3VwLCBUZXhpbmZvIGlucHV0IGZvcm1hdCwgTGFAVGVYe30gaW5wdXQgZm9ybWF0LAorQGFjcm9ueW17U0dNTH0gb3IgQGFjcm9ueW17WE1MfSB1c2luZyBhIHB1YmxpY2x5IGF2YWlsYWJsZQorQGFjcm9ueW17RFREfSwgYW5kIHN0YW5kYXJkLWNvbmZvcm1pbmcgc2ltcGxlIEBhY3Jvbnlte0hUTUx9IGRlc2lnbmVkCitmb3IgaHVtYW4gbW9kaWZpY2F0aW9uLiAgT3BhcXVlIGZvcm1hdHMgaW5jbHVkZSBQb3N0U2NyaXB0LAorQGFjcm9ueW17UERGfSwgcHJvcHJpZXRhcnkgZm9ybWF0cyB0aGF0IGNhbiBiZSByZWFkIGFuZCBlZGl0ZWQgb25seSBieQorcHJvcHJpZXRhcnkgd29yZCBwcm9jZXNzb3JzLCBAYWNyb255bXtTR01MfSBvciBAYWNyb255bXtYTUx9IGZvciB3aGljaAordGhlIEBhY3Jvbnlte0RURH0gYW5kL29yIHByb2Nlc3NpbmcgdG9vbHMgYXJlIG5vdCBnZW5lcmFsbHkgYXZhaWxhYmxlLAorYW5kIHRoZSBtYWNoaW5lLWdlbmVyYXRlZCBAYWNyb255bXtIVE1MfSBwcm9kdWNlZCBieSBzb21lIHdvcmQKK3Byb2Nlc3NvcnMgZm9yIG91dHB1dCBwdXJwb3NlcyBvbmx5LgorCitUaGUgYGBUaXRsZSBQYWdlJycgbWVhbnMsIGZvciBhIHByaW50ZWQgYm9vaywgdGhlIHRpdGxlIHBhZ2UgaXRzZWxmLAorcGx1cyBzdWNoIGZvbGxvd2luZyBwYWdlcyBhcyBhcmUgbmVlZGVkIHRvIGhvbGQsIGxlZ2libHksIHRoZSBtYXRlcmlhbAordGhpcyBMaWNlbnNlIHJlcXVpcmVzIHRvIGFwcGVhciBpbiB0aGUgdGl0bGUgcGFnZS4gIEZvciB3b3JrcyBpbgorZm9ybWF0cyB3aGljaCBkbyBub3QgaGF2ZSBhbnkgdGl0bGUgcGFnZSBhcyBzdWNoLCBgYFRpdGxlIFBhZ2UnJyBtZWFucwordGhlIHRleHQgbmVhciB0aGUgbW9zdCBwcm9taW5lbnQgYXBwZWFyYW5jZSBvZiB0aGUgd29yaydzIHRpdGxlLAorcHJlY2VkaW5nIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJvZHkgb2YgdGhlIHRleHQuCisKK0BpdGVtCitWRVJCQVRJTSBDT1BZSU5HCisKK1lvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgRG9jdW1lbnQgaW4gYW55IG1lZGl1bSwgZWl0aGVyCitjb21tZXJjaWFsbHkgb3Igbm9uY29tbWVyY2lhbGx5LCBwcm92aWRlZCB0aGF0IHRoaXMgTGljZW5zZSwgdGhlCitjb3B5cmlnaHQgbm90aWNlcywgYW5kIHRoZSBsaWNlbnNlIG5vdGljZSBzYXlpbmcgdGhpcyBMaWNlbnNlIGFwcGxpZXMKK3RvIHRoZSBEb2N1bWVudCBhcmUgcmVwcm9kdWNlZCBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCB5b3UgYWRkIG5vIG90aGVyCitjb25kaXRpb25zIHdoYXRzb2V2ZXIgdG8gdGhvc2Ugb2YgdGhpcyBMaWNlbnNlLiAgWW91IG1heSBub3QgdXNlCit0ZWNobmljYWwgbWVhc3VyZXMgdG8gb2JzdHJ1Y3Qgb3IgY29udHJvbCB0aGUgcmVhZGluZyBvciBmdXJ0aGVyCitjb3B5aW5nIG9mIHRoZSBjb3BpZXMgeW91IG1ha2Ugb3IgZGlzdHJpYnV0ZS4gIEhvd2V2ZXIsIHlvdSBtYXkgYWNjZXB0Citjb21wZW5zYXRpb24gaW4gZXhjaGFuZ2UgZm9yIGNvcGllcy4gIElmIHlvdSBkaXN0cmlidXRlIGEgbGFyZ2UgZW5vdWdoCitudW1iZXIgb2YgY29waWVzIHlvdSBtdXN0IGFsc28gZm9sbG93IHRoZSBjb25kaXRpb25zIGluIHNlY3Rpb24gMy4KKworWW91IG1heSBhbHNvIGxlbmQgY29waWVzLCB1bmRlciB0aGUgc2FtZSBjb25kaXRpb25zIHN0YXRlZCBhYm92ZSwgYW5kCit5b3UgbWF5IHB1YmxpY2x5IGRpc3BsYXkgY29waWVzLgorCitAaXRlbQorQ09QWUlORyBJTiBRVUFOVElUWQorCitJZiB5b3UgcHVibGlzaCBwcmludGVkIGNvcGllcyBvZiB0aGUgRG9jdW1lbnQgbnVtYmVyaW5nIG1vcmUgdGhhbiAxMDAsCithbmQgdGhlIERvY3VtZW50J3MgbGljZW5zZSBub3RpY2UgcmVxdWlyZXMgQ292ZXIgVGV4dHMsIHlvdSBtdXN0IGVuY2xvc2UKK3RoZSBjb3BpZXMgaW4gY292ZXJzIHRoYXQgY2FycnksIGNsZWFybHkgYW5kIGxlZ2libHksIGFsbCB0aGVzZSBDb3ZlcgorVGV4dHM6IEZyb250LUNvdmVyIFRleHRzIG9uIHRoZSBmcm9udCBjb3ZlciwgYW5kIEJhY2stQ292ZXIgVGV4dHMgb24KK3RoZSBiYWNrIGNvdmVyLiAgQm90aCBjb3ZlcnMgbXVzdCBhbHNvIGNsZWFybHkgYW5kIGxlZ2libHkgaWRlbnRpZnkKK3lvdSBhcyB0aGUgcHVibGlzaGVyIG9mIHRoZXNlIGNvcGllcy4gIFRoZSBmcm9udCBjb3ZlciBtdXN0IHByZXNlbnQKK3RoZSBmdWxsIHRpdGxlIHdpdGggYWxsIHdvcmRzIG9mIHRoZSB0aXRsZSBlcXVhbGx5IHByb21pbmVudCBhbmQKK3Zpc2libGUuICBZb3UgbWF5IGFkZCBvdGhlciBtYXRlcmlhbCBvbiB0aGUgY292ZXJzIGluIGFkZGl0aW9uLgorQ29weWluZyB3aXRoIGNoYW5nZXMgbGltaXRlZCB0byB0aGUgY292ZXJzLCBhcyBsb25nIGFzIHRoZXkgcHJlc2VydmUKK3RoZSB0aXRsZSBvZiB0aGUgRG9jdW1lbnQgYW5kIHNhdGlzZnkgdGhlc2UgY29uZGl0aW9ucywgY2FuIGJlIHRyZWF0ZWQKK2FzIHZlcmJhdGltIGNvcHlpbmcgaW4gb3RoZXIgcmVzcGVjdHMuCisKK0lmIHRoZSByZXF1aXJlZCB0ZXh0cyBmb3IgZWl0aGVyIGNvdmVyIGFyZSB0b28gdm9sdW1pbm91cyB0byBmaXQKK2xlZ2libHksIHlvdSBzaG91bGQgcHV0IHRoZSBmaXJzdCBvbmVzIGxpc3RlZCAoYXMgbWFueSBhcyBmaXQKK3JlYXNvbmFibHkpIG9uIHRoZSBhY3R1YWwgY292ZXIsIGFuZCBjb250aW51ZSB0aGUgcmVzdCBvbnRvIGFkamFjZW50CitwYWdlcy4KKworSWYgeW91IHB1Ymxpc2ggb3IgZGlzdHJpYnV0ZSBPcGFxdWUgY29waWVzIG9mIHRoZSBEb2N1bWVudCBudW1iZXJpbmcKK21vcmUgdGhhbiAxMDAsIHlvdSBtdXN0IGVpdGhlciBpbmNsdWRlIGEgbWFjaGluZS1yZWFkYWJsZSBUcmFuc3BhcmVudAorY29weSBhbG9uZyB3aXRoIGVhY2ggT3BhcXVlIGNvcHksIG9yIHN0YXRlIGluIG9yIHdpdGggZWFjaCBPcGFxdWUgY29weQorYSBwdWJsaWNseS1hY2Nlc3NpYmxlIGNvbXB1dGVyLW5ldHdvcmsgbG9jYXRpb24gY29udGFpbmluZyBhIGNvbXBsZXRlCitUcmFuc3BhcmVudCBjb3B5IG9mIHRoZSBEb2N1bWVudCwgZnJlZSBvZiBhZGRlZCBtYXRlcmlhbCwgd2hpY2ggdGhlCitnZW5lcmFsIG5ldHdvcmstdXNpbmcgcHVibGljIGhhcyBhY2Nlc3MgdG8gZG93bmxvYWQgYW5vbnltb3VzbHkgYXQgbm8KK2NoYXJnZSB1c2luZyBwdWJsaWMtc3RhbmRhcmQgbmV0d29yayBwcm90b2NvbHMuICBJZiB5b3UgdXNlIHRoZSBsYXR0ZXIKK29wdGlvbiwgeW91IG11c3QgdGFrZSByZWFzb25hYmx5IHBydWRlbnQgc3RlcHMsIHdoZW4geW91IGJlZ2luCitkaXN0cmlidXRpb24gb2YgT3BhcXVlIGNvcGllcyBpbiBxdWFudGl0eSwgdG8gZW5zdXJlIHRoYXQgdGhpcworVHJhbnNwYXJlbnQgY29weSB3aWxsIHJlbWFpbiB0aHVzIGFjY2Vzc2libGUgYXQgdGhlIHN0YXRlZCBsb2NhdGlvbgordW50aWwgYXQgbGVhc3Qgb25lIHllYXIgYWZ0ZXIgdGhlIGxhc3QgdGltZSB5b3UgZGlzdHJpYnV0ZSBhbiBPcGFxdWUKK2NvcHkgKGRpcmVjdGx5IG9yIHRocm91Z2ggeW91ciBhZ2VudHMgb3IgcmV0YWlsZXJzKSBvZiB0aGF0IGVkaXRpb24gdG8KK3RoZSBwdWJsaWMuCisKK0l0IGlzIHJlcXVlc3RlZCwgYnV0IG5vdCByZXF1aXJlZCwgdGhhdCB5b3UgY29udGFjdCB0aGUgYXV0aG9ycyBvZiB0aGUKK0RvY3VtZW50IHdlbGwgYmVmb3JlIHJlZGlzdHJpYnV0aW5nIGFueSBsYXJnZSBudW1iZXIgb2YgY29waWVzLCB0byBnaXZlCit0aGVtIGEgY2hhbmNlIHRvIHByb3ZpZGUgeW91IHdpdGggYW4gdXBkYXRlZCB2ZXJzaW9uIG9mIHRoZSBEb2N1bWVudC4KKworQGl0ZW0KK01PRElGSUNBVElPTlMKKworWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIGEgTW9kaWZpZWQgVmVyc2lvbiBvZiB0aGUgRG9jdW1lbnQgdW5kZXIKK3RoZSBjb25kaXRpb25zIG9mIHNlY3Rpb25zIDIgYW5kIDMgYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IHJlbGVhc2UKK3RoZSBNb2RpZmllZCBWZXJzaW9uIHVuZGVyIHByZWNpc2VseSB0aGlzIExpY2Vuc2UsIHdpdGggdGhlIE1vZGlmaWVkCitWZXJzaW9uIGZpbGxpbmcgdGhlIHJvbGUgb2YgdGhlIERvY3VtZW50LCB0aHVzIGxpY2Vuc2luZyBkaXN0cmlidXRpb24KK2FuZCBtb2RpZmljYXRpb24gb2YgdGhlIE1vZGlmaWVkIFZlcnNpb24gdG8gd2hvZXZlciBwb3NzZXNzZXMgYSBjb3B5CitvZiBpdC4gIEluIGFkZGl0aW9uLCB5b3UgbXVzdCBkbyB0aGVzZSB0aGluZ3MgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb246CisKK0BlbnVtZXJhdGUgQQorQGl0ZW0KK1VzZSBpbiB0aGUgVGl0bGUgUGFnZSAoYW5kIG9uIHRoZSBjb3ZlcnMsIGlmIGFueSkgYSB0aXRsZSBkaXN0aW5jdAorZnJvbSB0aGF0IG9mIHRoZSBEb2N1bWVudCwgYW5kIGZyb20gdGhvc2Ugb2YgcHJldmlvdXMgdmVyc2lvbnMKKyh3aGljaCBzaG91bGQsIGlmIHRoZXJlIHdlcmUgYW55LCBiZSBsaXN0ZWQgaW4gdGhlIEhpc3Rvcnkgc2VjdGlvbgorb2YgdGhlIERvY3VtZW50KS4gIFlvdSBtYXkgdXNlIHRoZSBzYW1lIHRpdGxlIGFzIGEgcHJldmlvdXMgdmVyc2lvbgoraWYgdGhlIG9yaWdpbmFsIHB1Ymxpc2hlciBvZiB0aGF0IHZlcnNpb24gZ2l2ZXMgcGVybWlzc2lvbi4KKworQGl0ZW0KK0xpc3Qgb24gdGhlIFRpdGxlIFBhZ2UsIGFzIGF1dGhvcnMsIG9uZSBvciBtb3JlIHBlcnNvbnMgb3IgZW50aXRpZXMKK3Jlc3BvbnNpYmxlIGZvciBhdXRob3JzaGlwIG9mIHRoZSBtb2RpZmljYXRpb25zIGluIHRoZSBNb2RpZmllZAorVmVyc2lvbiwgdG9nZXRoZXIgd2l0aCBhdCBsZWFzdCBmaXZlIG9mIHRoZSBwcmluY2lwYWwgYXV0aG9ycyBvZiB0aGUKK0RvY3VtZW50IChhbGwgb2YgaXRzIHByaW5jaXBhbCBhdXRob3JzLCBpZiBpdCBoYXMgbGVzcyB0aGFuIGZpdmUpLgorCitAaXRlbQorU3RhdGUgb24gdGhlIFRpdGxlIHBhZ2UgdGhlIG5hbWUgb2YgdGhlIHB1Ymxpc2hlciBvZiB0aGUKK01vZGlmaWVkIFZlcnNpb24sIGFzIHRoZSBwdWJsaXNoZXIuCisKK0BpdGVtCitQcmVzZXJ2ZSBhbGwgdGhlIGNvcHlyaWdodCBub3RpY2VzIG9mIHRoZSBEb2N1bWVudC4KKworQGl0ZW0KK0FkZCBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGZvciB5b3VyIG1vZGlmaWNhdGlvbnMKK2FkamFjZW50IHRvIHRoZSBvdGhlciBjb3B5cmlnaHQgbm90aWNlcy4KKworQGl0ZW0KK0luY2x1ZGUsIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBjb3B5cmlnaHQgbm90aWNlcywgYSBsaWNlbnNlIG5vdGljZQorZ2l2aW5nIHRoZSBwdWJsaWMgcGVybWlzc2lvbiB0byB1c2UgdGhlIE1vZGlmaWVkIFZlcnNpb24gdW5kZXIgdGhlCit0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluIHRoZSBmb3JtIHNob3duIGluIHRoZSBBZGRlbmR1bSBiZWxvdy4KKworQGl0ZW0KK1ByZXNlcnZlIGluIHRoYXQgbGljZW5zZSBub3RpY2UgdGhlIGZ1bGwgbGlzdHMgb2YgSW52YXJpYW50IFNlY3Rpb25zCithbmQgcmVxdWlyZWQgQ292ZXIgVGV4dHMgZ2l2ZW4gaW4gdGhlIERvY3VtZW50J3MgbGljZW5zZSBub3RpY2UuCisKK0BpdGVtCitJbmNsdWRlIGFuIHVuYWx0ZXJlZCBjb3B5IG9mIHRoaXMgTGljZW5zZS4KKworQGl0ZW0KK1ByZXNlcnZlIHRoZSBzZWN0aW9uIGVudGl0bGVkIGBgSGlzdG9yeScnLCBhbmQgaXRzIHRpdGxlLCBhbmQgYWRkIHRvCitpdCBhbiBpdGVtIHN0YXRpbmcgYXQgbGVhc3QgdGhlIHRpdGxlLCB5ZWFyLCBuZXcgYXV0aG9ycywgYW5kCitwdWJsaXNoZXIgb2YgdGhlIE1vZGlmaWVkIFZlcnNpb24gYXMgZ2l2ZW4gb24gdGhlIFRpdGxlIFBhZ2UuICBJZgordGhlcmUgaXMgbm8gc2VjdGlvbiBlbnRpdGxlZCBgYEhpc3RvcnknJyBpbiB0aGUgRG9jdW1lbnQsIGNyZWF0ZSBvbmUKK3N0YXRpbmcgdGhlIHRpdGxlLCB5ZWFyLCBhdXRob3JzLCBhbmQgcHVibGlzaGVyIG9mIHRoZSBEb2N1bWVudCBhcworZ2l2ZW4gb24gaXRzIFRpdGxlIFBhZ2UsIHRoZW4gYWRkIGFuIGl0ZW0gZGVzY3JpYmluZyB0aGUgTW9kaWZpZWQKK1ZlcnNpb24gYXMgc3RhdGVkIGluIHRoZSBwcmV2aW91cyBzZW50ZW5jZS4KKworQGl0ZW0KK1ByZXNlcnZlIHRoZSBuZXR3b3JrIGxvY2F0aW9uLCBpZiBhbnksIGdpdmVuIGluIHRoZSBEb2N1bWVudCBmb3IKK3B1YmxpYyBhY2Nlc3MgdG8gYSBUcmFuc3BhcmVudCBjb3B5IG9mIHRoZSBEb2N1bWVudCwgYW5kIGxpa2V3aXNlCit0aGUgbmV0d29yayBsb2NhdGlvbnMgZ2l2ZW4gaW4gdGhlIERvY3VtZW50IGZvciBwcmV2aW91cyB2ZXJzaW9ucworaXQgd2FzIGJhc2VkIG9uLiAgVGhlc2UgbWF5IGJlIHBsYWNlZCBpbiB0aGUgYGBIaXN0b3J5Jycgc2VjdGlvbi4KK1lvdSBtYXkgb21pdCBhIG5ldHdvcmsgbG9jYXRpb24gZm9yIGEgd29yayB0aGF0IHdhcyBwdWJsaXNoZWQgYXQKK2xlYXN0IGZvdXIgeWVhcnMgYmVmb3JlIHRoZSBEb2N1bWVudCBpdHNlbGYsIG9yIGlmIHRoZSBvcmlnaW5hbAorcHVibGlzaGVyIG9mIHRoZSB2ZXJzaW9uIGl0IHJlZmVycyB0byBnaXZlcyBwZXJtaXNzaW9uLgorCitAaXRlbQorSW4gYW55IHNlY3Rpb24gZW50aXRsZWQgYGBBY2tub3dsZWRnbWVudHMnJyBvciBgYERlZGljYXRpb25zJycsCitwcmVzZXJ2ZSB0aGUgc2VjdGlvbidzIHRpdGxlLCBhbmQgcHJlc2VydmUgaW4gdGhlIHNlY3Rpb24gYWxsIHRoZQorc3Vic3RhbmNlIGFuZCB0b25lIG9mIGVhY2ggb2YgdGhlIGNvbnRyaWJ1dG9yIGFja25vd2xlZGdtZW50cworYW5kL29yIGRlZGljYXRpb25zIGdpdmVuIHRoZXJlaW4uCisKK0BpdGVtCitQcmVzZXJ2ZSBhbGwgdGhlIEludmFyaWFudCBTZWN0aW9ucyBvZiB0aGUgRG9jdW1lbnQsCit1bmFsdGVyZWQgaW4gdGhlaXIgdGV4dCBhbmQgaW4gdGhlaXIgdGl0bGVzLiAgU2VjdGlvbiBudW1iZXJzCitvciB0aGUgZXF1aXZhbGVudCBhcmUgbm90IGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgc2VjdGlvbiB0aXRsZXMuCisKK0BpdGVtCitEZWxldGUgYW55IHNlY3Rpb24gZW50aXRsZWQgYGBFbmRvcnNlbWVudHMnJy4gIFN1Y2ggYSBzZWN0aW9uCittYXkgbm90IGJlIGluY2x1ZGVkIGluIHRoZSBNb2RpZmllZCBWZXJzaW9uLgorCitAaXRlbQorRG8gbm90IHJldGl0bGUgYW55IGV4aXN0aW5nIHNlY3Rpb24gYXMgYGBFbmRvcnNlbWVudHMnJworb3IgdG8gY29uZmxpY3QgaW4gdGl0bGUgd2l0aCBhbnkgSW52YXJpYW50IFNlY3Rpb24uCitAZW5kIGVudW1lcmF0ZQorCitJZiB0aGUgTW9kaWZpZWQgVmVyc2lvbiBpbmNsdWRlcyBuZXcgZnJvbnQtbWF0dGVyIHNlY3Rpb25zIG9yCithcHBlbmRpY2VzIHRoYXQgcXVhbGlmeSBhcyBTZWNvbmRhcnkgU2VjdGlvbnMgYW5kIGNvbnRhaW4gbm8gbWF0ZXJpYWwKK2NvcGllZCBmcm9tIHRoZSBEb2N1bWVudCwgeW91IG1heSBhdCB5b3VyIG9wdGlvbiBkZXNpZ25hdGUgc29tZSBvciBhbGwKK29mIHRoZXNlIHNlY3Rpb25zIGFzIGludmFyaWFudC4gIFRvIGRvIHRoaXMsIGFkZCB0aGVpciB0aXRsZXMgdG8gdGhlCitsaXN0IG9mIEludmFyaWFudCBTZWN0aW9ucyBpbiB0aGUgTW9kaWZpZWQgVmVyc2lvbidzIGxpY2Vuc2Ugbm90aWNlLgorVGhlc2UgdGl0bGVzIG11c3QgYmUgZGlzdGluY3QgZnJvbSBhbnkgb3RoZXIgc2VjdGlvbiB0aXRsZXMuCisKK1lvdSBtYXkgYWRkIGEgc2VjdGlvbiBlbnRpdGxlZCBgYEVuZG9yc2VtZW50cycnLCBwcm92aWRlZCBpdCBjb250YWlucworbm90aGluZyBidXQgZW5kb3JzZW1lbnRzIG9mIHlvdXIgTW9kaWZpZWQgVmVyc2lvbiBieSB2YXJpb3VzCitwYXJ0aWVzLS0tZm9yIGV4YW1wbGUsIHN0YXRlbWVudHMgb2YgcGVlciByZXZpZXcgb3IgdGhhdCB0aGUgdGV4dCBoYXMKK2JlZW4gYXBwcm92ZWQgYnkgYW4gb3JnYW5pemF0aW9uIGFzIHRoZSBhdXRob3JpdGF0aXZlIGRlZmluaXRpb24gb2YgYQorc3RhbmRhcmQuCisKK1lvdSBtYXkgYWRkIGEgcGFzc2FnZSBvZiB1cCB0byBmaXZlIHdvcmRzIGFzIGEgRnJvbnQtQ292ZXIgVGV4dCwgYW5kIGEKK3Bhc3NhZ2Ugb2YgdXAgdG8gMjUgd29yZHMgYXMgYSBCYWNrLUNvdmVyIFRleHQsIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QKK29mIENvdmVyIFRleHRzIGluIHRoZSBNb2RpZmllZCBWZXJzaW9uLiAgT25seSBvbmUgcGFzc2FnZSBvZgorRnJvbnQtQ292ZXIgVGV4dCBhbmQgb25lIG9mIEJhY2stQ292ZXIgVGV4dCBtYXkgYmUgYWRkZWQgYnkgKG9yCit0aHJvdWdoIGFycmFuZ2VtZW50cyBtYWRlIGJ5KSBhbnkgb25lIGVudGl0eS4gIElmIHRoZSBEb2N1bWVudCBhbHJlYWR5CitpbmNsdWRlcyBhIGNvdmVyIHRleHQgZm9yIHRoZSBzYW1lIGNvdmVyLCBwcmV2aW91c2x5IGFkZGVkIGJ5IHlvdSBvcgorYnkgYXJyYW5nZW1lbnQgbWFkZSBieSB0aGUgc2FtZSBlbnRpdHkgeW91IGFyZSBhY3Rpbmcgb24gYmVoYWxmIG9mLAoreW91IG1heSBub3QgYWRkIGFub3RoZXI7IGJ1dCB5b3UgbWF5IHJlcGxhY2UgdGhlIG9sZCBvbmUsIG9uIGV4cGxpY2l0CitwZXJtaXNzaW9uIGZyb20gdGhlIHByZXZpb3VzIHB1Ymxpc2hlciB0aGF0IGFkZGVkIHRoZSBvbGQgb25lLgorCitUaGUgYXV0aG9yKHMpIGFuZCBwdWJsaXNoZXIocykgb2YgdGhlIERvY3VtZW50IGRvIG5vdCBieSB0aGlzIExpY2Vuc2UKK2dpdmUgcGVybWlzc2lvbiB0byB1c2UgdGhlaXIgbmFtZXMgZm9yIHB1YmxpY2l0eSBmb3Igb3IgdG8gYXNzZXJ0IG9yCitpbXBseSBlbmRvcnNlbWVudCBvZiBhbnkgTW9kaWZpZWQgVmVyc2lvbi4KKworQGl0ZW0KK0NPTUJJTklORyBET0NVTUVOVFMKKworWW91IG1heSBjb21iaW5lIHRoZSBEb2N1bWVudCB3aXRoIG90aGVyIGRvY3VtZW50cyByZWxlYXNlZCB1bmRlciB0aGlzCitMaWNlbnNlLCB1bmRlciB0aGUgdGVybXMgZGVmaW5lZCBpbiBzZWN0aW9uIDQgYWJvdmUgZm9yIG1vZGlmaWVkCit2ZXJzaW9ucywgcHJvdmlkZWQgdGhhdCB5b3UgaW5jbHVkZSBpbiB0aGUgY29tYmluYXRpb24gYWxsIG9mIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIG9mIGFsbCBvZiB0aGUgb3JpZ2luYWwgZG9jdW1lbnRzLCB1bm1vZGlmaWVkLCBhbmQKK2xpc3QgdGhlbSBhbGwgYXMgSW52YXJpYW50IFNlY3Rpb25zIG9mIHlvdXIgY29tYmluZWQgd29yayBpbiBpdHMKK2xpY2Vuc2Ugbm90aWNlLgorCitUaGUgY29tYmluZWQgd29yayBuZWVkIG9ubHkgY29udGFpbiBvbmUgY29weSBvZiB0aGlzIExpY2Vuc2UsIGFuZAorbXVsdGlwbGUgaWRlbnRpY2FsIEludmFyaWFudCBTZWN0aW9ucyBtYXkgYmUgcmVwbGFjZWQgd2l0aCBhIHNpbmdsZQorY29weS4gIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBJbnZhcmlhbnQgU2VjdGlvbnMgd2l0aCB0aGUgc2FtZSBuYW1lIGJ1dAorZGlmZmVyZW50IGNvbnRlbnRzLCBtYWtlIHRoZSB0aXRsZSBvZiBlYWNoIHN1Y2ggc2VjdGlvbiB1bmlxdWUgYnkKK2FkZGluZyBhdCB0aGUgZW5kIG9mIGl0LCBpbiBwYXJlbnRoZXNlcywgdGhlIG5hbWUgb2YgdGhlIG9yaWdpbmFsCithdXRob3Igb3IgcHVibGlzaGVyIG9mIHRoYXQgc2VjdGlvbiBpZiBrbm93biwgb3IgZWxzZSBhIHVuaXF1ZSBudW1iZXIuCitNYWtlIHRoZSBzYW1lIGFkanVzdG1lbnQgdG8gdGhlIHNlY3Rpb24gdGl0bGVzIGluIHRoZSBsaXN0IG9mCitJbnZhcmlhbnQgU2VjdGlvbnMgaW4gdGhlIGxpY2Vuc2Ugbm90aWNlIG9mIHRoZSBjb21iaW5lZCB3b3JrLgorCitJbiB0aGUgY29tYmluYXRpb24sIHlvdSBtdXN0IGNvbWJpbmUgYW55IHNlY3Rpb25zIGVudGl0bGVkIGBgSGlzdG9yeScnCitpbiB0aGUgdmFyaW91cyBvcmlnaW5hbCBkb2N1bWVudHMsIGZvcm1pbmcgb25lIHNlY3Rpb24gZW50aXRsZWQKK2BgSGlzdG9yeScnOyBsaWtld2lzZSBjb21iaW5lIGFueSBzZWN0aW9ucyBlbnRpdGxlZCBgYEFja25vd2xlZGdtZW50cycnLAorYW5kIGFueSBzZWN0aW9ucyBlbnRpdGxlZCBgYERlZGljYXRpb25zJycuICBZb3UgbXVzdCBkZWxldGUgYWxsIHNlY3Rpb25zCitlbnRpdGxlZCBgYEVuZG9yc2VtZW50cy4nJworCitAaXRlbQorQ09MTEVDVElPTlMgT0YgRE9DVU1FTlRTCisKK1lvdSBtYXkgbWFrZSBhIGNvbGxlY3Rpb24gY29uc2lzdGluZyBvZiB0aGUgRG9jdW1lbnQgYW5kIG90aGVyIGRvY3VtZW50cworcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgcmVwbGFjZSB0aGUgaW5kaXZpZHVhbCBjb3BpZXMgb2YgdGhpcworTGljZW5zZSBpbiB0aGUgdmFyaW91cyBkb2N1bWVudHMgd2l0aCBhIHNpbmdsZSBjb3B5IHRoYXQgaXMgaW5jbHVkZWQgaW4KK3RoZSBjb2xsZWN0aW9uLCBwcm92aWRlZCB0aGF0IHlvdSBmb2xsb3cgdGhlIHJ1bGVzIG9mIHRoaXMgTGljZW5zZSBmb3IKK3ZlcmJhdGltIGNvcHlpbmcgb2YgZWFjaCBvZiB0aGUgZG9jdW1lbnRzIGluIGFsbCBvdGhlciByZXNwZWN0cy4KKworWW91IG1heSBleHRyYWN0IGEgc2luZ2xlIGRvY3VtZW50IGZyb20gc3VjaCBhIGNvbGxlY3Rpb24sIGFuZCBkaXN0cmlidXRlCitpdCBpbmRpdmlkdWFsbHkgdW5kZXIgdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB5b3UgaW5zZXJ0IGEgY29weSBvZiB0aGlzCitMaWNlbnNlIGludG8gdGhlIGV4dHJhY3RlZCBkb2N1bWVudCwgYW5kIGZvbGxvdyB0aGlzIExpY2Vuc2UgaW4gYWxsCitvdGhlciByZXNwZWN0cyByZWdhcmRpbmcgdmVyYmF0aW0gY29weWluZyBvZiB0aGF0IGRvY3VtZW50LgorCitAaXRlbQorQUdHUkVHQVRJT04gV0lUSCBJTkRFUEVOREVOVCBXT1JLUworCitBIGNvbXBpbGF0aW9uIG9mIHRoZSBEb2N1bWVudCBvciBpdHMgZGVyaXZhdGl2ZXMgd2l0aCBvdGhlciBzZXBhcmF0ZQorYW5kIGluZGVwZW5kZW50IGRvY3VtZW50cyBvciB3b3JrcywgaW4gb3Igb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yCitkaXN0cmlidXRpb24gbWVkaXVtLCBkb2VzIG5vdCBhcyBhIHdob2xlIGNvdW50IGFzIGEgTW9kaWZpZWQgVmVyc2lvbgorb2YgdGhlIERvY3VtZW50LCBwcm92aWRlZCBubyBjb21waWxhdGlvbiBjb3B5cmlnaHQgaXMgY2xhaW1lZCBmb3IgdGhlCitjb21waWxhdGlvbi4gIFN1Y2ggYSBjb21waWxhdGlvbiBpcyBjYWxsZWQgYW4gYGBhZ2dyZWdhdGUnJywgYW5kIHRoaXMKK0xpY2Vuc2UgZG9lcyBub3QgYXBwbHkgdG8gdGhlIG90aGVyIHNlbGYtY29udGFpbmVkIHdvcmtzIHRodXMgY29tcGlsZWQKK3dpdGggdGhlIERvY3VtZW50LCBvbiBhY2NvdW50IG9mIHRoZWlyIGJlaW5nIHRodXMgY29tcGlsZWQsIGlmIHRoZXkKK2FyZSBub3QgdGhlbXNlbHZlcyBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBEb2N1bWVudC4KKworSWYgdGhlIENvdmVyIFRleHQgcmVxdWlyZW1lbnQgb2Ygc2VjdGlvbiAzIGlzIGFwcGxpY2FibGUgdG8gdGhlc2UKK2NvcGllcyBvZiB0aGUgRG9jdW1lbnQsIHRoZW4gaWYgdGhlIERvY3VtZW50IGlzIGxlc3MgdGhhbiBvbmUgcXVhcnRlcgorb2YgdGhlIGVudGlyZSBhZ2dyZWdhdGUsIHRoZSBEb2N1bWVudCdzIENvdmVyIFRleHRzIG1heSBiZSBwbGFjZWQgb24KK2NvdmVycyB0aGF0IHN1cnJvdW5kIG9ubHkgdGhlIERvY3VtZW50IHdpdGhpbiB0aGUgYWdncmVnYXRlLgorT3RoZXJ3aXNlIHRoZXkgbXVzdCBhcHBlYXIgb24gY292ZXJzIGFyb3VuZCB0aGUgd2hvbGUgYWdncmVnYXRlLgorCitAaXRlbQorVFJBTlNMQVRJT04KKworVHJhbnNsYXRpb24gaXMgY29uc2lkZXJlZCBhIGtpbmQgb2YgbW9kaWZpY2F0aW9uLCBzbyB5b3UgbWF5CitkaXN0cmlidXRlIHRyYW5zbGF0aW9ucyBvZiB0aGUgRG9jdW1lbnQgdW5kZXIgdGhlIHRlcm1zIG9mIHNlY3Rpb24gNC4KK1JlcGxhY2luZyBJbnZhcmlhbnQgU2VjdGlvbnMgd2l0aCB0cmFuc2xhdGlvbnMgcmVxdWlyZXMgc3BlY2lhbAorcGVybWlzc2lvbiBmcm9tIHRoZWlyIGNvcHlyaWdodCBob2xkZXJzLCBidXQgeW91IG1heSBpbmNsdWRlCit0cmFuc2xhdGlvbnMgb2Ygc29tZSBvciBhbGwgSW52YXJpYW50IFNlY3Rpb25zIGluIGFkZGl0aW9uIHRvIHRoZQorb3JpZ2luYWwgdmVyc2lvbnMgb2YgdGhlc2UgSW52YXJpYW50IFNlY3Rpb25zLiAgWW91IG1heSBpbmNsdWRlIGEKK3RyYW5zbGF0aW9uIG9mIHRoaXMgTGljZW5zZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGluY2x1ZGUgdGhlCitvcmlnaW5hbCBFbmdsaXNoIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlLiAgSW4gY2FzZSBvZiBhIGRpc2FncmVlbWVudAorYmV0d2VlbiB0aGUgdHJhbnNsYXRpb24gYW5kIHRoZSBvcmlnaW5hbCBFbmdsaXNoIHZlcnNpb24gb2YgdGhpcworTGljZW5zZSwgdGhlIG9yaWdpbmFsIEVuZ2xpc2ggdmVyc2lvbiB3aWxsIHByZXZhaWwuCisKK0BpdGVtCitURVJNSU5BVElPTgorCitZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIERvY3VtZW50IGV4Y2VwdAorYXMgZXhwcmVzc2x5IHByb3ZpZGVkIGZvciB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgb3RoZXIgYXR0ZW1wdCB0bworY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIERvY3VtZW50IGlzIHZvaWQsIGFuZCB3aWxsCithdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuICBIb3dldmVyLAorcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIgdGhpcworTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCitwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKK0BpdGVtCitGVVRVUkUgUkVWSVNJT05TIE9GIFRISVMgTElDRU5TRQorCitUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIG5ldywgcmV2aXNlZCB2ZXJzaW9ucworb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3Cit2ZXJzaW9ucyB3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkKK2RpZmZlciBpbiBkZXRhaWwgdG8gYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuICBTZWUKK0B1cmVme2h0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC99LgorCitFYWNoIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4KK0lmIHRoZSBEb2N1bWVudCBzcGVjaWZpZXMgdGhhdCBhIHBhcnRpY3VsYXIgbnVtYmVyZWQgdmVyc2lvbiBvZiB0aGlzCitMaWNlbnNlIGBgb3IgYW55IGxhdGVyIHZlcnNpb24nJyBhcHBsaWVzIHRvIGl0LCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mCitmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHNwZWNpZmllZCB2ZXJzaW9uIG9yCitvZiBhbnkgbGF0ZXIgdmVyc2lvbiB0aGF0IGhhcyBiZWVuIHB1Ymxpc2hlZCAobm90IGFzIGEgZHJhZnQpIGJ5IHRoZQorRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIERvY3VtZW50IGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uCitudW1iZXIgb2YgdGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCAobm90CithcyBhIGRyYWZ0KSBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorQGVuZCBlbnVtZXJhdGUKKworQHBhZ2UKK0BhcHBlbmRpeHN1YnNlYyBBRERFTkRVTTogSG93IHRvIHVzZSB0aGlzIExpY2Vuc2UgZm9yIHlvdXIgZG9jdW1lbnRzCisKK1RvIHVzZSB0aGlzIExpY2Vuc2UgaW4gYSBkb2N1bWVudCB5b3UgaGF2ZSB3cml0dGVuLCBpbmNsdWRlIGEgY29weSBvZgordGhlIExpY2Vuc2UgaW4gdGhlIGRvY3VtZW50IGFuZCBwdXQgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgYW5kCitsaWNlbnNlIG5vdGljZXMganVzdCBhZnRlciB0aGUgdGl0bGUgcGFnZToKKworQHNtYWxsZXhhbXBsZQorQGdyb3VwCisgIENvcHlyaWdodCAoQykgIEB2YXJ7eWVhcn0gIEB2YXJ7eW91ciBuYW1lfS4KKyAgUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMQorICBvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAgd2l0aCB0aGUgSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIEB2YXJ7bGlzdCB0aGVpciB0aXRsZXN9LCB3aXRoIHRoZQorICBGcm9udC1Db3ZlciBUZXh0cyBiZWluZyBAdmFye2xpc3R9LCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyBAdmFye2xpc3R9LgorICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQgYGBHTlUKKyAgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KK0BlbmQgZ3JvdXAKK0BlbmQgc21hbGxleGFtcGxlCisKK0lmIHlvdSBoYXZlIG5vIEludmFyaWFudCBTZWN0aW9ucywgd3JpdGUgYGB3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucycnCitpbnN0ZWFkIG9mIHNheWluZyB3aGljaCBvbmVzIGFyZSBpbnZhcmlhbnQuICBJZiB5b3UgaGF2ZSBubworRnJvbnQtQ292ZXIgVGV4dHMsIHdyaXRlIGBgbm8gRnJvbnQtQ292ZXIgVGV4dHMnJyBpbnN0ZWFkIG9mCitgYEZyb250LUNvdmVyIFRleHRzIGJlaW5nIEB2YXJ7bGlzdH0nJzsgbGlrZXdpc2UgZm9yIEJhY2stQ292ZXIgVGV4dHMuCisKK0lmIHlvdXIgZG9jdW1lbnQgY29udGFpbnMgbm9udHJpdmlhbCBleGFtcGxlcyBvZiBwcm9ncmFtIGNvZGUsIHdlCityZWNvbW1lbmQgcmVsZWFzaW5nIHRoZXNlIGV4YW1wbGVzIGluIHBhcmFsbGVsIHVuZGVyIHlvdXIgY2hvaWNlIG9mCitmcmVlIHNvZnR3YXJlIGxpY2Vuc2UsIHN1Y2ggYXMgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAordG8gcGVybWl0IHRoZWlyIHVzZSBpbiBmcmVlIHNvZnR3YXJlLgorCitAYyBMb2NhbCBWYXJpYWJsZXM6CitAYyBpc3BlbGwtbG9jYWwtcGRpY3Q6ICJpc3BlbGwtZGljdCIKK0BjIEVuZDoKKwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2RvYy9wYXJ0ZWQtcHRfQlIudGV4aSBiL3BhcnRlZC0xLjguNy9kb2MvcGFydGVkLXB0X0JSLnRleGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZmYWJiYgotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9kb2MvcGFydGVkLXB0X0JSLnRleGkKQEAgLTAsMCArMSwyOTAzIEBACitcaW5wdXQgdGV4aW5mbyAgICBAYyAtKi10ZXhpbmZvLSotCitAYyAlKipzdGFydCBvZiBoZWFkZXIKK0BzZXRmaWxlbmFtZSBwYXJ0ZWQtcHRfQlIuaW5mbworQHNldHRpdGxlIE1hbnVhbCBkbyBVc3XhcmlvIGRvIFBhcnRlZAorQGMgJSoqZW5kIG9mIGhlYWRlcgorCitAYyBSTUs6IGZvciBkZWZpbml0aW9ucyBhbmQgZGlzY3Vzc2lvbiBvZiBteSBtZXRob2RzLCBza2lwIHRvIHRoZSBlbmQKK0BjIG9mIHRoZSBmaWxlLCBhZnRlciAgdGhlICJieWUiIGRpcmVjdGl2ZS4KKworQGluY2x1ZGUgdmVyc2lvbi50ZXhpCisKK0BwYXJhZ3JhcGhpbmRlbnQgNAorCitAZGlyZW50cnkKKyogcGFydGVkOiAocGFydGVkKS4gICAgICAgICAgICAgICAgICAgICAgICBzb2Z0d2FyZSBkZSBwYXJ0aWNpb25hbWVudG8gR05VCitAYyBSTUs6IHRoZSBmb2xsb3dpbmcgZG9lc24ndCB3b3JrLiAgJ2luZm8gLS11c2FnZScgaXMgaW1wcm9wZXJseSBkb2N1bWVudGVkLgorQGMgKiBDaGFtYW5kbyBvIHBhcnRlZDogKHBhcnRlZClDaGFtYW5kbyBvIFBhcnRlZC4gICAgT3Dn9WVzIGRlIGxpbmhhIGRlIGNvbWFuZG8gZSBjb21hbmRvcworQGVuZCBkaXJlbnRyeQorCitAYyBSTUs6IHRleGk6IGFuIGluZm8gc2VjdGlvbiBkZXNjcmliaW5nIHRoZSBmaWxlIGlzIHRleGluZm8gY3VzdG9tLgorQGlmaW5mbworVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgdXNlIG9mIEdOVSBQYXJ0ZWQsIGEgcHJvZ3JhbSBmb3IgY3JlYXRpbmcsCityZXNpc2luZywgY2hlY2tpbmcgYW5kIGNvcHkgcGFydGl0aW9ucywgYW5kIGZpbGUgc3lzdGVtcyBvbiB0aGVtLgorCitDb3B5cmlnaHQgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjEgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIHRoZSBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24KK2VudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKK0BlbmQgaWZpbmZvCisKK0BjIFJNSzogdGV4aSA6IHRoZSB0aXRsZXBhZ2Ugc2VjdGlvbiBpcyB0ZXhpbmZvIGN1c3RvbS4KK0B0aXRsZXBhZ2UKK0B0aXRsZSBNYW51YWwgZG8gR05VIFBhcnRlZAorQHN1YnRpdGxlIEdOVSBQYXJ0ZWQsIHZlcnPjbyBAdmFsdWV7VkVSU0lPTn0sIEB2YWx1ZXtVUERBVEVEfQorQGF1dGhvciBBbmRyZXcgQ2xhdXNlbiBAZW1haWx7Y2xhdXNlbkBAZ251Lm9yZ30KK0BjIEZETDogRm9sbG93aW5nIHNlY3Rpb24gNC5CIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsCitAYyBJIGFtIHJlcXVpcmVkIHRvIGxpc3QgbXlzZWxmIGFzIGFuIGF1dGhvciBvZiB0aGlzIHdvcmsuCitAYXV0aG9yIFJpY2hhcmQgTS4gS3JldXRlciBAZW1haWx7a3JldXRlckBAYW5kdXJpbC5ydXRnZXJzLmVkdX0KK0BhdXRob3IgQmVybmFyZG8gSm/jbyBUb3JyZXMgZGEgU2lsdmVpcmEgKFRyYWR15+NvIFBvcnR1Z3Vlc2EpIEBlbWFpbHtiZXJuYXJkb2p0c0BAaWcuY29tLmJyfQorCitAcGFnZQorQHZza2lwIDBwdCBwbHVzIDFmaWxsbAorCitDb3B5cmlnaHQgQGNvcHlyaWdodHt9IDE5OTksIDIwMDAsIDIwMDEsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4xIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCBubworSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubyBCYWNrLUNvdmVyCitUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZCBgYEdOVQorRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KK0BlbmQgdGl0bGVwYWdlCisKK0BpZm5vdHRleAorQG5vZGUgVG9wCitAdG9wIFRJVExFCisKK0BjIFJNSzogYWRkZWQgVG9wIG5vZGUgZGVzY3JpYmluZyB0aGlzIG1hbnVhbCBTaG91bGQgaXQgYmUgbW9yZSB2ZXJib3NlPworVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIHVzZSBvZiBHTlUgUGFydGVkLCBhIHByb2dyYW0gZm9yIGNyZWF0aW5nLAorZGVzdHJveWluZywgcmVzaXppbmcsIGNoZWNraW5nIGFuZCBjb3B5aW5nIGhhcmQgZHJpdmUgcGFydGl0aW9ucywgYW5kCit0aGUgZmlsZSBzeXN0ZW1zIG9uIHRoZW0uCisKK1RoaXMgZG9jdW1lbnQgYXBwbGllcyB0byBAdmFsdWV7VkVSU0lPTn0gb2YgR05VIFBhcnRlZC4gIEl0cyBjb250ZW50IGlzCitzdWJzdGFudGlhbGx5IHNpbWlsYXIgdG8gdGhlIHVzZXIncyBtYW51YWwgaW5jbHVkZWQgaW4gdGhlIHNvdXJjZQorZGlzdHJpYnV0aW9uIG9mIEdOVSBQYXJ0ZWQgQHZhbHVle1ZFUlNJT059LiAgVGhhdCBmaWxlIHdhcyB3cml0dGVuIGJ5CitBbmRyZXcgQ2xhdXNlbi4KK0BlbmQgaWZub3R0ZXgKKworQGMgaWYgd2UgZG9uJ3QgZ2V0IG1lbnVzIChlZzogSFRNTCksIHVzZSBjb250ZW50cyBpbnN0ZWFkCitAc2hvcnRjb250ZW50cworCitAbWVudQorKiBJbnN0cm9kdefjbzo6ICAgICAgICAgICAgICAgICBPdmVydmlldworKiBVc2FuZG8gbyBQYXJ0ZWQ6OiAgICAgICAgICAgICBQYXJ0aWNpb25hbmRvIHVtIERpc2NvIFLtZ2lkbworKiBCSU9TZXMgZSBGaXJtd2FyZXM6OiAgICAgICAgICBFbnRyZSBsaWdhciBlIGNhcnJlZ2FyCisqIENhcnJlZ2Fkb3JlcyBkZSBCb290OjogICAgICAgIENvbW8gbyBzaXN0ZW1hIG9wZXJhY2lvbmFsIGluaWNpYQorKiBTaXN0ZW1hcyBPcGVyYWNpb25haXM6OiAgICAgICBTaXN0ZW1hcyBPcGVyYWNpb25haXMgZSBzaXN0ZW1hcyBkZSBhcnF1aXZvCisqIFNpc3RlbWFzIGRlIEFycXVpdm86OiAgICAgICAgIFNpc3RlbWFzIGRlIGFycXVpdm8gc3Vwb3J0YWRvcywgZSBzZXVzIHRydXF1ZXMKKyogTFZNIGUgUkFJRDo6ICAgICAgICAgICAgICAgICAgVm9sdW1lcyB2aXJ0dWFpcyBkZSBkaXNjbworKiBFc3BlbGhhbWVudG8gZGUgRGlzY286OiAgICAgICBDbG9uYW5kbyBpbnN0YWxh5/VlcworKiBTb2Z0d2FyZSBSZWxhY2lvbmFkbzo6ICAgICAgICBMZWl0dXJhIHBvc3RlcmlvciBlbSB083BpY29zIHJlbGFjaW9uYWRvcworKiBDb3BpYW5kbyBlc3NlIE1hbnVhbDo6ICAgICAgICAgQ29tbyBmYXplciBj83BpYXMgZGVzc2UgbWFudWFsCisqIEhpc3TzcmlhOjogICAgICAgICAgICAgICAgICAgICBBIGhpc3TzcmlhIGRlc3NlIG1hbnVhbAorQGlmbm90cGxhaW50ZXh0CisqIM1uZGljZTo6ICAgICAgICAgICAgICAgICAgICAgICDNbmRpY2UgZGUgY29uY2VpdG9zIGNpdGFkb3MKK0BlbmQgaWZub3RwbGFpbnRleHQKK0BlbmQgbWVudQorCitAbm9kZSAgICBJbnRyb2R15+NvCitAY2hhcHRlciBJbnRyb2R15+NvCisKK0BtZW51CisqIE92ZXJ2aWV3OjogICAgICAgICAgICAgICAgICAgIEdOVSBQYXJ0ZWQgZSBjb25oZWNpbWVudG9zIG5lY2Vzc+FyaW9zCisqIFNvZnR3YXJlIE5lY2Vzc+FyaW86OiAgICAgICAgIERlcGVuZOpuY2lhcyBkZSBzb2Z0d2FyZSBkbyBHTlUgUGFydGVkCisqIFBsYXRhZm9ybWFzIFN1cG9ydGFkYXM6OiAgICAgIEFvbmRlIHZvY+ogcG9kZSB1c2FyIG8gR05VIFBhcnRlZAorKiBMaWNlbudhOjogICAgICAgICAgICAgICAgICAgICBPIHF1ZSB2b2PqIHBvZGUgZSBvIHF1ZSBu428gcG9kZSBjb20gbyBHTlUgUGFydGVkCisqIENvbXBpbGFuZG86OiAgICAgICAgICAgICAgICAgIENvbW8gY29tcGlsYXIgbyBHTlUgUGFydGVkCisqIERpc2NvcyBkZSBib290IGRvIFBhcnRlZDo6ICAgIENvbW8gdXNhciBvIFBhcnRlZCBlbSBwbGF0YWZvcm1hcyBu428gc3Vwb3J0YWRhcworQGVuZCBtZW51CisKK0Bub2RlIE92ZXJ2aWV3CitAc2VjdGlvbiBPdmVydmlldyBkbyBHTlUgUGFydGVkCitAY2luZGV4IGRlc2NyaefjbyBkbyBwYXJ0ZWQKK0BjaW5kZXggb3ZlcnZpZXcKK0BjaW5kZXggZGVzY3Jp5+NvIGRvIHBhcnRlZAorQGNpbmRleCBidWdzLCBjb21vIHJlbGF0YXIKK0BjaW5kZXggcmVsYXRhbmRvIGJ1Z3MKK0BjaW5kZXggZmFsYW5kbyBjb20gb3MgZGVzZW52b2x2ZWRvcmVzCisKK08gR05VIFBhcnRlZCDpIHVtIHByb2dyYW1hIHBhcmEgY3JpYXIsIGRlc3RydWlyLCByZWRpbWVuc2lvbmFyLAorY2hlY2FyIGUgY29waWFyIHBhcnRp5/VlcywgZSBvcyBzaXN0ZW1hcyBkZSBhcnF1aXZvcyBuZWxhcy4KK0VsZSDpIPp0aWwgcGFyYSBjcmlhciBlc3Bh528gcGFyYSBub3ZvcyBzaXN0ZW1hcyBvcGVyYWNpb25haXMsCityZW9yZ2FuaXphciBvIHVzbyBkZSBkaXNjbywgY29waWFyIGRhZG9zIGVudHJlIGRpc2NvcyBy7WdpZG9zLCBlCitgYGVzcGVsaGFtZW50byBkZSBkaXNjb3MnJyAtLS0gY2xvbmFyIGluc3RhbGHn9WVzIGVtIG11aXRvcworY29tcHV0YWRvcmVzLgorCitFc3RhIGRvY3VtZW50YefjbyBhc3N1bWUgcXVlIHZvY+ogY29uaGVjZSBwYXJ0aef1ZXMgZSBzaXN0ZW1hcyBkZQorYXJxdWl2b3MuIFNlIHZvY+ogcG9kZSBxdWVyZXIgYXByZW5kZXIgbWFpcyBzb2JyZSBlbGVzLCBhIFBhcnRpdGlvbgorbWluaS1IT1dUTyDpIGxlaXR1cmEgcmVjb21lbmRhZGEuIEVsYSBwcm92YXZlbG1lbnRlIHZlbSBjb20gYSBzdWEKK2Rpc3RyaWJ1aefjbywgb3UgZXN04SBkaXNwb27tdmVsIGVtCisKK0BjIEZJWE1FOiBzdGFuZGFyZHM6IGhvd3RvIGxhYmVsbGVkIG5vbi1mcmVlIGJ5IExEUAorQHVyZWZ7aHR0cDovL3d3dy5saW51eGRvYy5vcmcvSE9XVE8vbWluaS9QYXJ0aXRpb24vaW5kZXguaHRtbH0KKworTyBHTlUgUGFydGVkIGZvaSBmZWl0byBwYXJhIG1pbml6YXIgYXMgY2hhbmNlcyBkZSBwZXJkYXMgZGUgZGFkb3MuCitQb3IgZXhlbXBsbywgZWxlIGZvaSBmZWl0byBwYXJhIGV2aXRhciBwZXJkYSBkZSBkYWRvcyBkdXJhbnRlCitpbnRlcnJ1cOf1ZXMgKGNvbW8gZmFsdGEgZGUgbHV6KSBlIHJlYWxpemEgbXVpdGFzIGNoZWNhZ2VucyBkZSBlcnJvLgorQ29udHVkbyBwb2RlbSBleGlzdGlyIGJ1Z3Mgbm8gUGFydGVkLCBlbnTjbyB2b2PqIGRldmUgZmF6ZXIgYmFja3VwIGRlCithcnF1aXZvcyBpbXBvcnRhbnRlcy4KKworQSBw4WdpbmEgZG8gR05VIFBhcnRlZCDpIEB1cmVme3d3dy5nbnUub3JnL3NvZnR3YXJlL3BhcnRlZH0uICBFbGUgcG9kZQorc2VyIGJhaXhhZG8gZW0gQHVyZWZ7ZnRwLmdudS5vcmcvZ251L3BhcnRlZH0uCisKK0EgbGlzdGEgZGUgZS1tYWlscyBkbyBQYXJ0ZWQg6SBAZW1haWx7cGFydGVkQEBnbnUub3JnfS4gIFBhcmEgc2UKK2luc2NyZXZlciwgZXNjcmV2ZSBwYXJhIEBlbWFpbHtidWctcGFydGVkLXJlcXVlc3RAQGdudS5vcmd9IGNvbSBAc2FtcHtzdWJzY3JpYmV9IG5vIGFzc3VudG8uICBJbmZvcm1h5/VlcyBwYXJhIGluc2NyaefjbyBlIG9zIGFycXVpdm9zIGVzdONvIGRpc3Bvbu12ZWlzIGVtOgorCitAdXJlZntodHRwOi8vbWFpbC5nbnUub3JnL21haWxtYW4vbGlzdGluZm8vYnVnLXBhcnRlZH0KKworUG9yIGZhdm9yIG1hbmRlIHJlbGF0b3MgZGUgYnVncyBwYXJhIEBlbWFpbHtidWctcGFydGVkQEBnbnUub3JnfS4KK1F1YW5kbyBlbnZpYXIgcmVsYXRvcyBkZSBidWdzLCBwb3IgZmF2b3IgaW5jbHVhIGEgdmVyc+NvIGRvIEdOVSBQYXJ0ZWQuCitTZSBvIGJ1ZyDpIHJlbGF0aXZvIGEgdGFiZWxhcyBkZSBwYXJ0aefjbywgZW50428gcG9yIGZhdm9yIGluY2x1YSBhCitzYe1kYSBkZXNzZXMgY29tYW5kb3M6CisKK0BleGFtcGxlCitAZ3JvdXAKKyMgQGtiZHtmZGlzayAvZGV2L2hkYSAtbH0KKyMgQGtiZHtmZGlzayAvZGV2L2hkYX0KK0NvbW1hbmQgKG0gZm9yIGhlbHApOiBAa2Jke3B9CitDb21tYW5kIChtIGZvciBoZWxwKTogQGtiZHt4fQorRXh0ZW5kZWQgY29tbWFuZCAobSBmb3IgaGVscCk6IEBrYmR7cH0KK0BlbmQgZ3JvdXAKK0BlbmQgZXhhbXBsZQorCitTaW50YS1zZSDgIHZvbnRhZGUgcGFyYSBwZWRpciBhanVkYSBuZXNzYSBsaXN0YSAtLS0gc29tZW50ZSBjb25maXJhIHNlCithIHN1YSBwZXJndW50YSBu428gZm9pIHJlc3BvbmRpZGEgYXF1aSBhaW5kYS4gIFNlIHZvY+ogbuNvIGVudGVuZGUgYQorZG9jdW1lbnRh5+NvLCBwb3IgZmF2b3Igbm9zIGRpZ2EsIHBhcmEgcXVlIHBvc3NhbW9zIGV4cGxpY2FyIG1lbGhvci4KK05vc3NhIGZpbG9zb2ZpYSDpOiBzZSB2b2PqIHByZWNpc2FyIHBlZGlyIHBvciBhanVkYSwgZW50428gYWxnbyBwcmVjaXNhCitzZXIgYWp1c3RhZG8gcGFyYSBxdWUgdm9j6iAoZSBvdXRyb3MpIG7jbyBwcmVjaXNlbSBwZWRpciBwb3IgYWp1ZGEuCisKK0RvIG1lc21vIG1vZG8sIGFkb3Jhcu1hbW9zIG91dmlyIHN1YXMgaWTpaWFzIDotKQorCitAbm9kZSBTb2Z0d2FyZSBOZWNlc3PhcmlvCitAc2VjdGlvbiBTb2Z0d2FyZSBuZWNlc3PhcmlvIHBhcmEgdXNhciBvIFBhcnRlZAorQGNpbmRleCBkZXBlbmTqbmNpYXMgZGUgc29mdHdhcmUKK0BjaW5kZXggc29mdHdhcmUgbmVjZXNz4XJpbworQGNpbmRleCBsaWJ1dWlkCitAY2luZGV4IGUyZnNwcm9ncworQGNpbmRleCByZWFkbGluZQorQGNpbmRleCBnZXR0ZXh0CisKK08gR05VIFBhcnRlZCBkZXBlbmRlIGRvcyBzZWd1aW50ZXMgcGFjb3RlcyBwYXJhIGNvbXBpbGFyIGNvcnJldGFtZW50ZToKKworQGl0ZW1pemUgQGJ1bGxldAorCitAaXRlbSBsaWJ1dWlkLCBwYXJ0IG9mIHRoZSBlMmZzcHJvZ3MgcGFja2FnZS4gIFNlIHZvY+ogbuNvIHRlbSwgdm9j6gorcG9kZSBwZWfhLWxhIGVtOgorCisJQHVyZWZ7aHR0cDovL3dlYi5taXQuZWR1L3R5dHNvL3d3dy9saW51eC9lMmZzcHJvZ3MuaHRtbH0KKworU2Ugdm9j6iBxdWVyIGNvbXBpbGFyIG8gUGFydGVkIGUgYSBlMmZzcHJvZ3MsIG5vdGUgcXVlIHZvY+ogdmFpCitwcmVkY2lzYXIgZmF6ZXIgQGtiZHttYWtlIGluc3RhbGx9IGFuZCBAa2Jke21ha2UgaW5zdGFsbC1saWJzfSBlMmZzcHJvZ3MuCisKK0BpdGVtIEdOVSBSZWFkbGluZSAob3BjaW9uYWwpLCBkaXNwb27tdmVsIGVtCisKKwlAdXJlZntmdHA6Ly9mdHAuZ251Lm9yZy9nbnUvcmVhZGxpbmV9CisKK1NlIHZvY+ogZXN04SBjb21waWxhbmRvIG8gUGFydGVkLCBlIHZvY+ogbuNvIHRlbSByZWFkbGluZSwgdm9j6gorcG9kZSBkZXNhYmlsaXRhciBvIHN1cG9ydGUgZG8gUGFydGVkIGEgcmVhZGxpbmUgY29tIG8gYSBvcOfjbworQGtiZHstLWRpc2FibGUtcmVhZGxpbmV9IHBhcmEgbyBAY29tbWFuZHtjb25maWd1cmV9LgorCitAaXRlbSBHTlUgZ2V0dGV4dCAob3Ugc29mdHdhcmUgY29tcGF07XZlbCkgcGFyYSBjb21waWxh5+NvLCBzZQordm9j6iBkZXNlIHN1cG9ydGUgYSBpbnRlcm5hY2lvbmFsaXph5+NvLgorCisJQHVyZWZ7ZnRwOi8vZnRwLmdudS5vcmcvZ251L2dldHRleHR9CisKK0BpdGVtIGxpYnJlaXNlcmZzLCBzZSB2b2PKIHF1aXNlciBzdXBvcnRlIGEgcmVpc2VyZnM6CisKKwlAdXJlZntodHRwOi8vcmVpc2VyZnMubGludXgua2lldi51YX0KKworUHJlc3RlIGF0ZW7n428gcXVlIG8gcGFydGVkIHZhaSBhdXRvbWF0aWNhbWVudGUgZGV0ZWN0YXIgYSBsaWJyZWlzZXJmcworcXVhbmRvIHJvZGFyLCBlIHZhaSBoYWJpbGl0YXIgbyBzdXBvcnRlIGEgcmVpc2VyZnMuICBBIGxpYnJlaXNlcmZzIOkKK25vdmEgZSBu428gZm9pIG11aXRvIHRlc3RhZGEgYWluZGEuCisKK0BlbmQgaXRlbWl6ZQorCitAbm9kZSBQbGF0YWZvcm1hcyBTdXBvcnRhZGFzCitAc2VjdGlvbiBQbGF0Zm9ybWFzIGFvbmRlIG8gR05VIFBhcnRlZCByb2RhCitAY2luZGV4IHBsYXRhZm9ybWFzIHN1cG9ydGFkYXMKK0BjaW5kZXggcGxhdGZvcm1hcywgc3Vwb3J0YWRhcworCitFc3BlcmFtb3MgcXVlIGVzc2EgbGlzdGEgY3Jlc+dhIGJhc3RhbnRlLiBTZSB2b2PqIG7jbyB0ZW0gdW1hIGRlc3NhcworcGxhdGFmb3JtYXMgKExpbnV4IG5vIG1vbWVudG8hKSwgZW50428gdm9j6iBwcmVjaXNhciB1c2FyIHVtIGRpc2NvIGRlCitib290LiBAeHJlZntEaXNjb3MgZGUgYm9vdCBkbyBQYXJ0ZWQsIFVzYW5kbyBvcyBEaXNjb3MgZGUgQm9vdCBkbyBQYXJ0ZWR9LgorCitAdGFibGUgQGFzaXMKK0BpdGVtIEdOVS9MaW51eAorTGludXggdmVyc/VlcyAyLjAgcGFyYSBjaW1hLCBubyBBbHBoYSwgUENzIHg4NiwgUEM5OCwgTWFjaW50b3NoIFBvd2VyUEMsIGUgU3VuLgorCitAYyBSTUs6IHZlcmFjaWRhZGU6IGJlbSwgKkV1KiBudW5jYSB1c3NlaSBvIHBhcnRlZCBudW0gR05VL0h1cmQgLi4uIDopCitAaXRlbSBHTlUvSHVyZAorU3Vwb3J0ZSBleHBlcmltZW50YWwuCisKK0BlbmQgdGFibGUKKworQSBHTlUgbGliYyAyLjEgb3Ugc3VwZXJpb3Ig6SBuZWNlc3PhcmlhLiBWb2PqIHByb3ZhdmVsbWVudGUgcG9kZSB1c2FyCit2ZXJz9WVzIGFudGVyaW9yZXMgdXNhbmRvIGEgb3Dn428gQHNhbXB7LS1kaXNhYmxlLW5sc30uIAorQHhyZWZ7Q29tcGlsYW5kbyBvIEdOVSBQYXJ0ZWR9LiAoTm90YTogRXUgYWNobyBxdWUgbvNzIGrhIHRpcmFtb3MgZXNzYQorbmVjZXNzaWRhZGUuICDBIGZhemVyOiBjaGVjYXIgc2UgZnVuY2lvbmEgbmEgbGliYyAyLjAhKQorCitAbm9kZSBMaWNlbudhCitAc2VjdGlvbiBUZXJtb3MgZGUgZGlzdHJpYnVp5+NvIHBhcmEgbyBHTlUgUGFydGVkCitAY2luZGV4IHRlcm1vcyBkYSBsaWNlbudhCitAY2luZGV4IHRlcm1zIGRhIGRpc3RyaWJ1aefjbworQGNpbmRleCBnbnUgZ3BsCitAY2luZGV4IGdwbAorCitPIEdOVSBQYXJ0ZWQg6SBzb2Z0d2FyZSBsaXZyZSwgcHJldmlzdG8gcGVsYSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2VzZSBWZXJzaW9uIDIuIEVsYSBkZXZlIHZpciBjb20gYSBkaXN0cmlidWnn428gZG8gUGFydGVkLCBubyBhcnF1aXZvCitDT1BZSU5HLiBTZSBu428sIGVzY3JldmEgcGFyYSBhIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKzUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKK0xpYnBhcnRlZCDpIGNvbnNpZGVyYWRhIHBhcnRlIGRvIEdOVSBQYXJ0ZWQuIEVsYSDpIHByZXZpc3RhIHBlbGEgR05VCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiBOw08g6SBsYW7nYWRhIHNvYnJlIGEgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworTGljZW5zZSAoTEdQTCkuCisKK0Bub2RlIENvbXBpbGFuZG8KK0BzZWN0aW9uIENvbXBpbGFuZG8gbyBHTlUgUGFydGVkCitAY2luZGV4IGNvbXBpbGFuZG8gbyBwYXJ0ZWQKK0BjaW5kZXggY29tcGlsYW5kbyBvIHBhcnRlZAorCitTZSB2b2PqIHF1ZXIgY29tcGlsYXIgbyBHTlUgUGFydGVkLCBnZXJhbG1lbnRlIOkgZmVpdG8gY29tOgorCitAZXhhbXBsZQorQGdyb3VwCiskIEBrYmR7Li9jb25maWd1cmV9CiskIEBrYmR7bWFrZX0KK0BlbmQgZ3JvdXAKK0BlbmQgZXhhbXBsZQorCitDb250dWRvIGjhIGFsZ3VtYXMgb3Dn9WVzIHBhcmEgbyBAY29tbWFuZHtjb25maWd1cmV9OgorCitAdGFibGUgQGNvZGUKK0BpdGVtIC0td2l0aG91dC1yZWFkbGluZQkJCitkZXNsaWdhIG8gdXNvIGRlIHJlYWRsaW5lLiBJc3NvIOkg+nRpbCBwYXJhIGZhemVyIGRpc2NvcyBkZSBib290LAorZXRjLiwgb25kZSBwb3VjYXMgYmlibGlvdGVjYXMgZXN0428gZGlzcG9u7XZlaXMuCisKK0BpdGVtIC0tZGlzYWJsZS1kZWJ1ZworbuNvIGluY2x1aSBz7W1ib2xvcyBwYXJhIGRlYnVnYXIKKworQGl0ZW0gLS1kaXNhYmxlLWR5bmFtaWMtbG9hZGluZworZGVzYWJpbGl0YSBvIGNhcnJlZ2FtZW50byBkaW7ibWljbyBkZSBhbGd1bWFzIGJpYmxpb3RlYXMgKHNvbWVudGUKK3JlaXNlcmZzIG5vIG1vbWVudG8sIGFwZXNhciBkZSBoYXZlciBwcmV0ZW5z9WVzIGRlIGV4cGFuc+NvKS4gQ2FycmVnYW1lbnRvCitkaW7ibWljbyDpIPp0aWwgcG9ycXVlIGVsZSBwZXJtaXRlIHZvY+ogcmV1c2FyIGFzIGJpYmxpb3RlY2FzIGNvbXBhcnRpbGhhZGFzCitkbyBsaWJwYXJ0ZWQgbWVzbW8gcXVhbmRvIHZvY+ogbuNvIHNhYmUgc2UgYWxndW1hcyBiaWJsaW90ZWNhcyB2428gZXN0YXIKK2Rpc3Bvbu12ZWlzLiBJc3NvIHRlbSB1bSBwZXF1ZW5vIGF1bWVudG8gKHByaW5jaXBhbG1lbnRlIGxpZ2FuZG8gY29tIGEKK2xpYmRsKSwgZW50428gcG9kZSBzZXIg+nRpbCBkZXNhYmlsaXRhciBpc3NvIGVtIGRpc2NvcyBkZSBib290IHNlIHZvY+oKK27jbyBwcmVjaXNhIGRlIGZsZXhpYmlsaWRhZGUuCisKK0BpdGVtIC0tZGlzYWJsZS1mcworZGVzYWJpbGl0YSBvIHN1cG9ydGUgYSB0b2RvcyBvcyBzaXN0ZW1hcyBkZSBhcnF1aXZvCisKK0BpdGVtIC0tZGlzYWJsZS1ubHMJCQkKK2Rlc2F0aXZhIG8gc3Vwb3J0ZSBhIGztbmd1YSBuYXRpdmEuIElzc28g6SD6dGlsIHBhciB1c2FyIGNvbSB2ZXJz9WVzCithbnRpZ2FzIGRhIGdsaWJjLCBvdSB1bWEgdmVyc+NvIHJlZHV6aWRhIGRhIGdsaWJjIGJvYSBwYXJhIGRpc2NvcyBkZQorYm9vdC4KKworQGl0ZW0gLS1kaXNhYmxlLXNoYXJlZAkJCitkZXNhYmlsaXRhIG8gdXNvIGRlIGJpYmxpb3RlY2FzIGNvbXBhcnRpbGhhZGFzLiBFbGEgcG9kZSBzZXIgbmVjZXNz4XJpYQorcGFyYSB1c28gY29tIHZlcnP1ZXMgYW50aWdhcyBkYSBHTlUgbGliYywgc2Ugdm9j6iByZWNlYmVyIHVtIGVycm8gc29icmUKK2FsZ3VtIGBgcmVnaXN0cmFkb3IgY3VzcGlkbycnLiAgVGFtYultIPp0aWwgcGFyYSBkaXNjb3MgZGUgYm9vdC4KKworQGl0ZW0gLS1kaXNhYmxlLVdlcnJvcgoraWdub3JhciBhdmlzb3MgbmEgY29tcGlsYefjbworCitAaXRlbSAtLWVuYWJsZS1hbGwtc3RhdGljCQkKK2NvbXBpbGEgbyBleGVjdXThdmVsIGRvIFBhcnRlZCBjb21vIHVtIGJpbuFyaW8gY29tcGxldGFtZW50ZSBlc3ThdGljbworSXN0byDpIGNvbnZlbmllbnRlIHBhcmEgZGlzY29zIGRlIGJvb3QsIHBvcnF1ZSB2b2PqIG7jbyBwcmVjaXNhIGluc3RhbGFyCitxdWFscXVlciBiaWJsaW90ZWNhcyBubyBkaXNjbyBkZSBib290IChjb250dWRvLCBhbGd1bnMgcHJvZ3JhbWFzIHBvZGVtCitwcmVjaXNhciBkZWxhc0Bkb3Rze30pIE5vdGE6IHZvY+ogdGFtYultIHZhaSBwcmVjaXNhciByb2RhciBvIHN0cmlwKDEpLgorCitAaXRlbSAtLWVuYWJsZS1kaXNjb3Zlci1vbmx5CitzdXBvcnRhIHNvbWVudGUgbGVpdHVyYS9jaGVjYWdlbQorCitAaXRlbSAtLWVuYWJsZS1tdHJhY2UKK2hhYmlsaXRhIGRlYnVnYXIgb3MgbWFsbG9jKCkncworCitAaXRlbSAtLWVuYWJsZS1yZWFkLW9ubHkKK2Rlc2FiaWxpdGEgZXNjcml0YSAocGFyYSBkZWJ1Z2FyKQorCitAZW5kIHRhYmxlCisKK0Bub2RlIERpc2NvcyBkZSBCb290IGRvIFBhcnRlZAorQHNlY3Rpb24gVXNhbmRvIHVtIERpc2NvIGRlIEJvb3QgZG8gUGFydGVkCitAY2luZGV4IGRpc2NvIGRlIGJvb3QKK0BjaW5kZXggZGlzcXVldGUgZGUgYm9vdAorQGNpbmRleCBwbGF0YWZvcm1hcyBu428tc3Vwb3J0YWRhcworCitTZSB2b2PqIHF1ZXIgcm9kYXIgbyBQYXJ0ZWQgbnVtYSBt4XF1aW5hIHNlbSBvIEdOVS9MaW51eCBpbnN0YWxhZG8sIG91Cit2b+ogcXVlciByZWRpbWVuc2lvbmFyIHVtYSBwYXJ0aefjbyByYe16IG91IGRlIGJvb3QsIHZvY+ogdmFpIHByZWNpc2FyCit1c2FyIHVtIGRpc2NvIGRlIGJvb3QuCisKK1VtYSBpbWFnZW0gcGFyYSB1bSBkaXNjbyBkZSBib290IGVzdOEgZGlzcG9u7XZlbCBlbToKKworQHVyZWZ7ZnRwOi8vZnRwLmdudS5vcmcvZ251L3BhcnRlZC9ib290ZGlzay9wYXJ0Ym9vdC5pbWd9CisKK0BjIFJNSzogcHJpbnRpbmc6IGFkZGVkIHNvbWUgd29yZGluZyBoZXJlIHRvIG1ha2UgdGhlIHBhcmFncmFwaCBsb29rCitAYyBhY2NlcHRhYmxlIGluIHByaW50CitQYXJhIGNyaWFyIG9zIGRpc2NvcyBkZSBib290LCBhIGltYWdlbSBkZSBkaXNjbyBkZXZlIHNlciBlc2NyaXRhIHBhcmEKK3VtIGRpc3F1ZXRlIGRlIGJvb3QuIE5vIEdOVS9MaW51eCwgaXNzbyBwb2RlIHNlciBmZWl0byBjb20KKworQGV4YW1wbGUKKyMgQGtiZHtkZCBpZj1wYXJ0Ym9vdC5pbWcgb2Y9L2Rldi9mZDAgYnM9MTQ0MGt9CitAZW5kIGV4YW1wbGUKKworQG5vaW5kZW50IE91IHVzZSBvIFJBV1JJVEUuRVhFIGRlbnRybyBkbyBET1MuCisKK0luZmVsaXptZW50ZSwgbyBkaXNjbyBkZSBib290IG7jbyBk4SBzdXBvcnRlIGEgduFyaW9zIHRpcG9zIGRlIGhhcmR3YXJlLgorU2UgbyBzZXUgZGlzY28gcu1naWRvIG7jbyDpIHN1cG9ydGFkbywgZW50428gdm9j6iB2YWkgcHJlY2lzYXIgZmF6ZXIgbworc2V1IHBy83ByaW8gZGlzY28gZGUgYm9vdC4gVm9j6iBwb2RlIGNvcGlhciBvIGJpbuFyaW8gZG8gcGFydGVkIGRvIGRpc2NvCitkZSBib290IGRvIHBhcnRlZCBwYXJhIG91dHJvIGRpc2NvLCBvdSB0ZW50YXIgb3V0cm9zIGRpc2NvcyBkZSBib290LCBvdQorZmF6ZXIgbyBzZXUgcHLzcHJpby4gVm9j6iBwb2RlIGFjaGFyIG8gbWtwYXJ0ZWQg+nRpbCwgcXVlIOkgdW0gc2NyaXB0CitzaGVsbCBwYXJhIGZhemVyIHNldXMgcHLzcHJpb3MgZGlzY29zIGRlIGJvb3QgZG8gcGFydGVkLiBFbGUgZXN04QorZGlzcG9u7XZlbCBlbToKKworQHVyZWZ7ZnRwOi8vZnRwLnR1eC5vcmcvcHViL3Blb3BsZS9rZW50LXJvYm90dGkvbWtwYXJ0ZWR9CisKK1BhcmEgY29waWFyIG8gcGFydGVkIGRvIGRpc2NvIGRlIGJvb3QgcGFyYSBvdXRybyBkaXNjbzoKKworQGVudW1lcmF0ZQorQGl0ZW0gRmF6ZXIgbyBCb290IGRlIHVtIGRpc2NvIGRlIGJvb3QgZG8gUGFydGVkLgorCitAaXRlbSBJbnNpcmEgb3V0cm8gZGlzcXVldGUgZGUgYm9vdCBmb3JtYXRhZG8gZW0gZXh0Mi4gU2UgZWxlIG7jbyBlc3ThCitmb3JtYXRhZG8sIHZvY+ogcG9kZSBjcmlhciB1bSBzaXN0ZW1hIGRlIGFycXVpdm8gY29tLCBwb3IgZXhlbXBsbzoKKworQGV4YW1wbGUKKyQgQGtiZHtwYXJ0ZWQgL2Rldi9mZDAgbWtsYWJlbCBsb29wIG1rcGFydGZzIHByaW1hcnkgZXh0MiAwIDEuNH0KK0BlbmQgZXhhbXBsZQorCitAaXRlbSBNb250ZSBvIGRpc3F1ZXRlLCBleDoKKworQGV4YW1wbGUKKyQgQGtiZHttb3VudCAtdCBleHQyIC9kZXYvZmQwIC9tbnQvZmxvcHB5fQorQGVuZCBleGFtcGxlCisKK0BpdGVtIENvcGllIG8gQGZpbGV7L3NiaW4vcGFydGVkfSBwYXJhIG8gZGlzcXVldGUsIGV4OgorCitAZXhhbXBsZQorJCBAa2Jke2NwIC9zYmluL3BhcnRlZCAvbW50L2Zsb3BweX0KK0BlbmQgZXhhbXBsZQorCitAaXRlbSBDb3BpZSBAZmlsZXsvbGliLyp9IHBhcmEgbyBkaXNxdWV0ZSwgZXg6CisKK0BleGFtcGxlCiskIEBrYmR7Y3AgL2xpYi8qIC9tbnQvZmxvcHB5fQorQGVuZCBleGFtcGxlCisKK0BpdGVtIERlc21vbnRlIG8gZGlzcXVldGUsIGV4OgorCitAZXhhbXBsZQorJCBAa2Jke3Vtb3VudCAvbW50L2Zsb3BweX0KK0BlbmQgZXhhbXBsZQorCitAaXRlbSBBY2hlIHVtIGRpc3F1ZXRlIGRlIGJvb3QgcXVlIEBlbXBoe3JlYWxtZW50ZX0gc3Vwb3J0ZSBvIHNldQorZGlzY28gcu1naWRvcy4gKERpY2E6IHRyeSBsb29raW5nIGZvciByZXNjdWUgZGlza3MgZnJvbSB2YXJpb3VzCitkaXN0cmlidXRpb25zIG9uIGJpZyBtaXJyb3Igc2l0ZXMpCisKK0BpdGVtIFRpcmUgbyBzZXUgZGlzcXVldGUgZGUgYm9vdC4gIE1vbnRlIG8gZGlzcXVldGUgYW9uZGUgdm9j6iBjb3Bpb3UgbyBQYXJ0ZWQuCisKK0BpdGVtIFJvZGUgbyBQYXJ0ZWQuIFBvciBleGVtcGxvLAorCitAZXhhbXBsZQorIyBAa2Jke2NkIC9tbnQvZmxvcHB5fQorIyBAa2Jke0xEX0xJQlJBUllfUEFUSD0uIC4vcGFydGVkfQorQGVuZCBleGFtcGxlCitAZW5kIGVudW1lcmF0ZQorCitAbm9kZSAgICBVc2FuZG8gbyBQYXJ0ZWQKK0BjaGFwdGVyIFVzYW5kbyBvIFBhcnRlZAorQGNpbmRleCBjb21hbmRvcworCitAbWVudQorKiBQYXJ0aWNpb25hbmRvOjogICAgICAgICAgICAgICAgICAgUGFydGljaW9uYW1lbnRvIGRlIGRpc2NvIG5vIGNvbnRleHQKKyogUm9kYW5kbyBvIFBhcnRlZDo6ICAgICAgICAgICAgICAgIFBhcnRpY2lvbmFtZW50byBjb20gbyBQYXJ0ZWQKKyogQ2hhbWFuZG8gbyBQYXJ0ZWQ6OiAgICAgICAgICAgICAgIENoYW1hbmRvIG8gcGFydGVkIGUgc3VhcyBvcOf1ZXMKKyogRXhwbGljYefjbyBkb3MgY29tbWFuZDo6ICAgICAgICAgIEV4cGxpY2Hn428gY29tcGxldGEgZG9zIGNvbWFuZG9zIGRvIHBhcnRlZAorKiBFeGVtcGxvczo6ICAgICAgICAgICAgICAgICAgICAgICAgU2Vzc/VlcyBkZSBleGVtcGxvIGRvIFBhcnRlZAorQGVuZCBtZW51CisKK0Bub2RlIFBhcnRpY2lvbmFuZG8KK0BzZWN0aW9uIENvbmNlaXRvcyBkZSBQYXJ0aWNpb25hbWVudG8KK0BjaW5kZXggb3ZlcnZpZXcgZG8gcGFydGljaW9uYW1lbnRvCisKK0luZmVsaXptZW50ZSwgcGFydGljaW9uYXIgbyBkaXNjbyDpIG1haXMgY29tcGxpY2Fkby4gSXN0byDpIHBvcnF1ZQorZXhpc3N0ZW0gaW50ZXJh5/VlcyBlbnRyZSBtdWl0b3Mgc2lzdGVtYXMgb3BlcmFjaW9uYWlzIGRpZmVyZW50ZXMKK3F1ZSBwcmVjaXNhbSBzZXIgbGV2YWRhcyBlbSBjb250YToKKworQGl0ZW1pemUgQGJ1bGxldAorQGl0ZW0KK0EgQklPUyBvdSBmaXJtd2FyZSAtIG8gcHJvZ3JhbWEgcXVlIOkgY29sb2NhZG8gbnVtYSBST20gZGVudHJvIGRvIHNldQorY29tcHV0YWRvciwgcXVlIGZheiBjaGVjYWdlbSBkZSBtZW3zcmlhLCBldGMuIFZvY+ogbuNvIHBvZGUgKGZhY2lsbWVudGUpCittdWRhciBvcyBwcm9ncmFtYXMgbmVzc2Ugc2lzdGVtYS4gRXhlbXBsb3MgZGUgQklPUyBvdSBwcm9ncmFtYXMgZmlybXdhcmU6CitBbWlCSU9TLCBBd2FyZCwgUGhvZW5peCwgT3BlbkZpcm13YXJlLiBWb2PqIHNvbWVudGUgdmFpIHRlciB1bSBkZXNzZXMKK3Byb2dyYW1hcy4KKworQGl0ZW0KK08gY2FycmVnYWRvciBkZSBib290IC0gbyBwcm9ncmFtYSBxdWUgcGVybWl0ZSB2b2PqIHNlbGVjaW9uYXIgcXVhbAorc2lzdGVtYSBvcGVyYWNpb25hbCBxdWUgdm9j6iBxdWVyIHVzYXIsIGUgY2FycmVnYSBhcXVlbGUgc2lzdGVtYQorb3BlcmFjaW9uYWwuIEV4ZW1wbG9zOiBMSUxPLCBHUlVCLCBZYWJvb3QsIFF1aWsuIFZvY+ogcG9kZSB0ZXIgbWFpcyBkZQordW0gY2FycmVnYWRvciBkZSBib290IGluc3RhbGFkbywgZXNwZWNpYWxtZW50ZSBzZSB2b2PqIHRlbSBtYWlzIGRlIHVtCit0aXBvIGRlIHNpc3RlbWEgb3BlcmFjaW9uYWwgaW5zdGFsYWRvLgorCitAaXRlbQorTyBzaXN0ZW1hIG9wZXJhY2lvbmFsIChuZXNzZSBtb21lbnRvLCBlc3RlIGRldmUgc2VyIG8gR05VL0xpbnV4KSBxdWUKK3JvZGUgUGFydGVkIGUgb3V0cm9zIHNpc3RlbWFzIG9wZXJhY2lvbmFpcyBxdWUgdm9j6iB1c2UuCisKK0BpdGVtCitPcyB0aXBvcyBkZSBzaXN0ZW1hcyBkZSBhcnF1aXZvIC0gYSBtYW5laXJhIGNvbW8gb3MgZGFkb3MgZGV2ZW0gc2VyCitndWFyZGFkb3MgbmFzIHBhcnRp5/Vlcy4gRXhlbXBsb3MgZGVsZXMgc+NvOiBleHQyLCBmYXQzMiwgaGZzLCByZWlzZXJmcy4KK1ZvY+ogZnJlcfxlbnRlbWVudGUgdGVyIHBhcnRp5/VlcyBkZSBzaXN0ZW1hcyBkZSBhcnF1aXZvIGRpZmVyZW50ZS4KK0BlbmQgaXRlbWl6ZQorCitPIFBhcnRlZCBzdXBvcnRhIG11aXRhcyBjb21iaW5h5/VlcyBkZSBCSU9TLCBjYXJyZWdhZG9yZXMgZGUgYm9vdCwKK3Npc3RlbWFzIG9wZXJhY2lvbmFpcywgZSBzaXN0ZW1hcyBkZSBhcnF1aXZvLCBlIHZhaSBzdXBvcnRhciBtYWlzCithaW5kYSBubyBmdXR1cm8uIFBhcmEgbWVsaG9yIGVudGVuZGVyIGFzIHJlZ3JhcyBkZSBjYWRhLCBwb3IgZmF2b3IKK3ZlamEgQHJlZntCSU9TZXMgYW5kIEZpcm13YXJlfSwgQHJlZntCb290IExvYWRlcnN9LCAKK0ByZWZ7U2lzdGVtYXMgb3BlcmFjaW9uYWlzfSwgZSBAcmVme1Npc3RlbWFzIGRlIGFycXVpdm99LgorCitFc3RlIGNhcO10dWxvIGRlc2NyZXZlIGNvbW8gdXNhciBvIFBhcnRlZCwgcXVlIOkgc2VtcHJlIG8gbWVzbW8sIG7jbworaW1wb3J0YSBxdWUgc2lzdGVtYXMgcXVlIHZvY+ogZXN04SB1c2FuZG8uIFZvY+ogZGV2ZSBsZXIgZXNzZSBjYXDtdHVsbywKK2VudONvIGNhZGEgdW0gZG9zIGNhcO10dWxvcyBzb2JyZSBCSU9TJ3MsIGNhcnJlZ2Fkb3JlcyBkZSBib290LCBzaXN0ZW1hcworb3BlcmFjaW9uYWlzLCBlIHNpc3RlbWFzIGRlIGFycXVpdm8uIENvbnR1ZG8sIHZvY+ogc/MgcHJlY2lzYSBsZXIgYXMKK3Nl5/VlcyBxdWUgc+NvIHJlbGV2YW50ZXMgcHJhIHZvY+ouIFBvciBleGVtcGxvLCBzZSB2b2PqIHPzIHVzYSBvIExJTE8KK2NvbW8gY2FycmVnYWRvciBkZSBib290LCB2b2PqIHPzIHByZWNpc2FyIGxlciBhIGludHJvZHXn428gZSAKK0ByZWZ7TElMTywgdGhlIHNlY3Rpb24gb24gTElMT30uCisKK0Bub2RlIFJvZGFuZG8gbyBQYXJ0ZWQKK0BzZWN0aW9uIFVzYW5kbyBvIEdOVSBQYXJ0ZWQKK0BjaW5kZXggbW9kb3MgZGUgdXNvCisKK08gUGFydGVkIHRlbSBkb2lzIG1vZG9zOiBsaW5oYSBkZSBjb21hbmRvIGUgaW50ZXJhdGl2by4gTyBQYXJ0ZWQKK3NlbXByZSBkZXZlIGNvbWXnYXIgY29tOgorCitAZXhhbXBsZQorIyBAa2Jke3BhcnRlZCBAdmFye2RldmljZX19CitAZW5kIGV4YW1wbGUKKworQG5vaW5kZW50IGFvbmRlIEB2YXJ7ZGV2aWNlfSBvIGRpc3Bvc2l0aXZvIGRlIGRpc2NvIHLtZ2lkbyBxdWUgdm9j6gorcXVlciBlZGl0YXIuIChTZSB2b2PqIOkgbWFsYW5kcm8sIG8gUGFydGVkIHZhaSB0ZW50YXIgYWRpdmluaGFyIHF1YWwKK2Rpc3Bvc2l0aXZvIHZvY+ogcXVlci4pCisKK05vIG1vZG8gZGUgbGluaGEgZGUgY29tYW5kbywgZWxlIOkgc2VndWlkbyBwb3IgdW0gb3UgbWFpcyBjb21hbmRvcy4KK1BvciBleGVtcGxvOgorCitAZXhhbXBsZQorIyBAa2Jke3BhcnRlZCAvZGV2L3NkYSByZXNpemUgMSA1MiAxMDQgbWtmcyAyIGZhdDE2fQorQGVuZCBleGFtcGxlCisKK0Bub2luZGVudCBPcOf1ZXMgKGNvbW8gQGtiZHstLWhlbHB9KSBz8yBwb2RlbSBzZXIgZXNwZWNpZmljYWRhcyBuYQorbGluaGEgZGUgY29tYW5kby4KKworTm8gbW9kbyBpbnRlcmF0aXZvLCBvcyBjb21hbmRvcyBz428gaW5zZXJpZG9zIHVtIGRlIGNhZGEgdmV6IG51bSBwcm9tcHQsCitlIHZvY+ogbW9kaWZpY2EgbyBkaXNjbyBpbWVkaWF0YW1lbnRlLiBQb3IgZXhlbXBsbzoKKworQGV4YW1wbGUKKyhwYXJ0ZWQpIEBrYmR7cmVzaXplIDEgNTIuMDAwNSAxMDQuNX0KKyhwYXJ0ZWQpIEBrYmR7bWtmcyAyIGZhdDE2fQorQGVuZCBleGFtcGxlCisKK0BjIFJNSyBNQVJLCisKK0Bub2luZGVudCBBYnJldmlh5/VlcyBu428tYW1i7Wd1YXMgc+NvIHBlcm1pdGlkYXMuIFBvciBleGVtcGxvLCB2b2PqIHBvZGUKK2RpZ2l0YXIgYGBwJycgYW8gaW526XMgZGUgYGBwcmludCcnLCBlIGBgcmUnJyBhbyBpbnbpcyBkZSBgYHJlc2l6ZScnLgorQ29tYW5kb3MgcG9kZW0gc2VyIGRpZ2l0YWRvcywgdGFudG8gZW0gaW5nbOpzLCBvdSBlbSBwb3J0dWd16nMuIElzdG8KK3BvZGUgY3JpYXIgYW1iaWd1aWRhZGVzLgorCitUYW1i6W0gcGVyY2ViYSBxdWUgdm9j6iBwb2RlIHNwZWNpZmljYXIgY2FzYXMgZGVjaW1haXMgbm9zIG76bWVyb3MKK2NvcnJlc3BvbmRlbnRlcyAoZW0gbWVnYWJ5dGVzKS4gTvptZXJvcyBuZWdhdGl2b3Mgc+NvIGNvbnRhZG9zIGEgcGFydGlyCitkbyBmaW5hbCBkbyBkaXNjbywgY29tICItMCIgc2VuZG8gbyBmaW5hbCBkbyBkaXNjby4KKworU2Ugdm9j6iBu428gZGVyIHVtIHBhcmFt6nRybyBwYXJhIHVtIGNvbWFuZG8sIG8gUGFydGVkIHZhaSBwZXJndW50YXIgcGFyYQordm9j6i4gUG9yIGV4ZW1wbG86CisKK0BleGFtcGxlCisocGFydGVkKSBAa2Jke3Jlc2l6ZSAxfQorU3RhcnQ/IEBrYmR7MH0KK0VuZD8gQGtiZHs0MDB9CitAZW5kIGV4YW1wbGUKKworTyBQYXJ0ZWQgc2VtcHJlIHZhaSBhdmlzYXIgdm9j6iBhbnRlcyBkZSBmYXplciBhbGdvIHF1ZSDpIHBvdGVuY2lhbG1lbnRlCitwZXJpZ29zbywgYSBu428gc2VyIHF1ZSBhbGdvIHNlamEgYWxnbyBvYnZpYW1lbnRlIHBlcmlnb3NvIChwb3IgZXhlbXBsbzoKK3JtLCBta2xhYmVsLCBta2ZzKS4gUG9yIGV4ZW1wbG8sIHNlIHZvY+ogdGVudGEgZGltaW51aXIgYGBtdWl0bycnIHVtYQorcGFydGnn428gKHBvciBleGVtcGxvLCBtZW5vcyBxdWUgbyBlc3Bh528gZGlzcG9u7XZlbCksIG8gUGFydGVkIHZhaQorYXV0b21hdGljYW1lbnRlIHJlZGltZW5zaW9uYXIgcGFyYSBvIG3tbmltbyBxdWUgZWxlIHBvZGUgZmF6ZXIgc2VtIHBlcmRlcgorZGFkb3MuIFNlIGVzdGUgbe1uaW1vIOkgbXVpdG8gZGlmZXJlbnRlIGRvIHF1ZSB2b2PqIHBlZGl1LCBlbGUgdmFpIGF2aXNhcgorcXVlIHZhaSBmYXplciB1bWEgY29pc2Egc2lnbmlmaWNhbnRlbWVudGUgZGlmZXJlbnRlIGRvIHF1ZSB2b2PqIHBlZGl1LgorUG9yIGNhdXNhIGRvcyBzaXN0ZW1hcyBkZSBwYXJ0aWNpb25hbWVudG8gdGVyZW0gcmVzdHJp5/VlcyBjb21wbGljYWRhcywKK28gUGFydGVkIGdlcmFsbWVudGUgdmFpIGZhemVyIGFsZ28gZGlmZXJlbnRlIGRvIHF1ZSB2b2PqIHBlZGl1IChQb3IKK2V4ZW1wbG8sIGNyaWFyIHVtIHBhcnRpY2lvbmFtZW50byBjb21l52FuZG8gZW0gMTAuMzUyLCBlIG7jbyAxMC40KS4KKworQG5vZGUgQ2hhbWFuZG8gbyBQYXJ0ZWQKK0BzZWN0aW9uIE9w5/VlcyBkZSBMaW5oYSBkZSBDb21hbmRvCitAY2luZGV4IG9w5/VlcyBuYSBjaGFtYWRhCitAY2luZGV4IGNvbWFuZG9zLCBvdmVydmlldworQGNpbmRleCBvcOf1ZXMgbmEgY2hhbWFkYQorCitRdWFuZG8gY2hhbWFkbyBuYSBsaW5oYSBkZSBjb21hbmRvLCBvIHBhcnRlZCBzdXBvcnRhIGEgc2VndWludGUgc2ludGF4ZToKKworQGV4YW1wbGUKKyMgQGtiZHtwYXJ0ZWQgW0B2YXJ7b3Dn4299XSBAdmFye2Rpc3Bvc2l0aXZvfSBbQHZhcntjb21hbmRvfSBbQHZhcnthcmd1bWVudG99XV19CitAZW5kIGV4YW1wbGUKKworQXMgc2VndWludGVzIG9w5/VlcyBlIGNvbWFuZG9zIGVzdONvIGRpc3Bvbu12ZWlzLiBQYXJhIGV4cGxpY2Hn9WVzCitkZXRhbGhhZGFzIGRvIHVzbyBkb3MgY29tYW5kb3MgZG8gcGFydGVkLCB2ZWphIEByZWZ7Q29tbWFuZCBleHBsYW5hdGlvbnN9LgorT3Dn9WVzIGNvbWXnYW0gY29tIHVtIGjtZmVuLCBlIGNvbWFuZG9zIG7jbzoKKworT3Dn9WVzCisKK0B0YWJsZSBAc2FtcAorQGl0ZW0gLWgKK0BpdGVteCAtLWhlbHAKK21vc3RyYSB1bWEgbWVuc2FnZW0gZGUgYWp1ZGEKKworQGl0ZW0gLWkKK0BpdGVteCAtLWludGVyYWN0aXZlCitxdWFuZG8gbmVjZXNz4XJpbywgcGVkZSBhbyB1c3XhcmlvIHBvciBpbnRlcnZlbufjbworCitAaXRlbSAtcworQGl0ZW14IC0tc2NyaXB0CitudW5jYSBwZWRlIHBlbGEgaW50ZXJ2ZW7n428gZG8gdXN14XJpbworCitAaXRlbSAtdgorQGl0ZW14IC0tdmVyc2lvbgorbW9zdHJhIGEgdmVyc+NvCitkaXNwbGF5IHRoZSB2ZXNpb24KK0BlbmQgdGFibGUKKworQG5vZGUgRXhwbGljYefjbyBkb3MgY29tYW5kb3MKK0BzZWN0aW9uIENvbWFuZG9zIGRlIFNlc3PjbyBubyBQYXJ0ZWQKK0BjaW5kZXggc2ludGF4ZSBkb3MgY29tYW5kb3MKK0BjaW5kZXggbGlzdGFnZW0gZGV0YWxoYWRhIGRvcyBjb21hbmRvcworQGNpbmRleCBjb21hbmRvcywgbGlzdGEgZGV0YWxoYWRhCisKK08gR05VIFBhcnRlZCBub3MgZOEgb3Mgc2VndWludGVzIGNvbWFuZG9zOgorCitAbWVudQorKiBjaGVjazo6CisqIGNwOjoKKyogaGVscDo6CisqIG1rbGFiZWw6OgorKiBta2ZzOjoKKyogbWtwYXJ0OjoKKyogbWtwYXJ0ZnM6OgorKiBtb3ZlOjoKKyogbmFtZTo6CisqIHByaW50OjoKKyogcXVpdDo6CisqIHJlc2N1ZTo6CisqIHJlc2l6ZTo6CisqIHJtOjoKKyogc2VsZWN0OjoKKyogc2V0OjoKK0BlbmQgbWVudQorCitAbm9kZSBjaGVjaworQHN1YnNlY3Rpb24gY2hlY2sKK0BjaW5kZXggY2hlY2ssIGRlc2NyaefjbyBkbyBjb21hbmRvCitAY2luZGV4IGRlc2NyaefjbyBkbyBjb21hbmRvLCBjaGVjaworCitAZGVmZm4gQ29tYW5kbyBjaGVjayBAdmFye21pbm9yfQorCitDaGVjYSBzZSBvIHNpc3RlbWFzIGRlIGFycXVpdm8gbmEgcGFydGnn428gQHZhcnttaW5vcn0KK3RlbSBhbGd1bSBlcnJvLgorCitFeGVtcGxvOgorCitAZXhhbXBsZQorKHBhcnRlZCkgQGtiZHtjaGVjayAxfQorQGVuZCBleGFtcGxlCisKK0NoZWNhIG8gc2lzdGVtYSBuYSBwYXJ0aefjbyAxLgorQGVuZCBkZWZmbgorCitAbm9kZSBjcAorQHN1YnNlY3Rpb24gY3AKK0BjaW5kZXggY3AsIGRlc2NyaefjbyBkbyBjb21hbmRvCitAY2luZGV4IGRlc2NyaefjbyBkbyBjb21hbmRvLCBjcAorCitAZGVmZm4gQ29tYW5kbyBjcCBbQHZhcntxdWFsLWRpc3Bvc2l0aXZvfV0gQHZhcntmcm9tLW1pbm9yfSBAdmFye3RvLW1pbm9yfQorCitDb3BpYSBvIHNpc3RlbWFzIGRlIGFycXVpdm8gbmEgcGFydGnn428gQHZhcntmcm9tLW1pbm9yfSBwYXJhIGEgcGFydGnn428KK0B2YXJ7dG8tbWlub3J9LCBhcGFnYW5kbyBvIGNvbnRl+mRvIG9yaWdpbmFsIGRhIHBhcnRp5+NvIGRlIGRlc3Rpbm8uCisKK1VtIHBhcuJtZXRybyBvcGNpb25hbCBwb2RlIHNlciBkYWRvLCBAdmFye3F1YWwtZGlzcG9zaXRpdm99LCBxdWUKK2VzcGVjaWZpY2EgZGUgcXVhbCBkaXNwb3NpdGl2byBhIHBhcnRp5+NvIGRlIG9yaWdlbSDpLgorCitTaXN0ZW1hcyBkZSBhcnF1aXZvIHN1cG9ydGFkb3MKK0BpdGVtaXplCitAaXRlbSBleHQyLCBleHQzCisoZGVzZGUgcXVlIGEgcGFydGnn428gZGUgZGVzdGlubyDpIG1haW9yIHF1ZSBhIHBhcnRp5+NvIGRlIG9yaWdlbSkKKworQGl0ZW0gZmF0MTYsIGZhdDMyCitAaXRlbSBsaW51eC1zd2FwCQorKGVxdWl2YWxlbnRlIGFvIG1rc3dhcCBuYSBwYXJ0aefjbyBkZSBkZXN0aW5vKQorQGl0ZW0gcmVpc2VyZnMgKHNlIGEgbGlicmVpc2VyZnMgZXN04SBpbnN0YWxhZGEpCisKK0BlbmQgaXRlbWl6ZQorCitFeGVtcGxvOgorCitAZXhhbXBsZQorKHBhcnRlZCkgQGtiZHtjcCAvZGV2L2hkYiAyIDN9CitAZW5kIGV4YW1wbGUKKworQGMgRklYTUU6IHRoaXMgZG9lc24ndCBmb3JtYXQgcmlnaHQuCisKK0NvcGlhIGEgcGFydGnn428gMiBkbyBAZmlsZXsvZGV2L2hkYn0gKHBvciBleGVtcGxvLCBAZmlsZXsvZGV2L2hkYjJ9KQorcGFyYSBhIHBhcnRp5+NvIGVtIDMsIG5vIGRpc3Bvc2l0aXZvIGFvbmRlIG8gUGFydGVkIGZvaSBjYXJyZWdhZG8sCitkZXN0cnVpbmRvIG8gY29udGX6ZG8gb3JpZ2luYWwgZGEgcGFydGnn428gMy4KK0BlbmQgZGVmZm4KKworQG5vZGUgaGVscAorQHN1YnNlY3Rpb24gaGVscAorQGNpbmRleCBoZWxwLCBkZXNjcmnn428gZG8gY29tYW5kbworQGNpbmRleCBkZXNjcmnn428gZG8gY29tYW5kbywgaGVscAorCitAZGVmZm4gQ29tYW5kbyBoZWxwIFtAdmFye2NvbWFuZG99XQorCitNb3N0cmEgYSBhanVkYSBnZXJhbCwgb3UgYSBhanVkYSBubyBAdmFye2NvbWFuZG99LgorCitFeGVtcGxvOgorCitAZXhhbXBsZQorKHBhcnRlZCkgQGtiZHtoZWxwIHJlc2l6ZX0KK0BlbmQgZXhhbXBsZQorCitNb3N0cmEgYSBhanVkYSBwYXJhIG8gY29tYW5kbyByZXNpemUuCitAZW5kIGRlZmZuCisKK0Bub2RlIG1rbGFiZWwKK0BzdWJzZWN0aW9uIG1rbGFiZWwKK0BjaW5kZXggbWtsYWJlbCwgZGVzY3Jp5+NvIGRvIGNvbWFuZG8KK0BjaW5kZXggZGVzY3Jp5+NvIGRvIGNvbWFuZG8sIG1raW5kZXgKKworQGRlZmZuIENvbWFuZG8gbWtsYWJlbCBAdmFye3RpcG8tZGUtZXRpcXVldGF9CisKK0NyaWEgdW1hIG5vdmEgZXRpcXVldGEgZGUgZGlzY28sIGRvIHRpcG8gQHZhcnt0aXBvLWRlLWV0aXF1ZXRhfS4gQSBub3ZhCitldGlxdWV0YSBkZSBkaXNjbyBu428gdmFpIHRlciBwYXJ0aef1ZXMuIEVzdGUgY29tYW5kbyAobm9ybWFsbWVudGUpIG7jbwordmFpIHRlY25pY2FtZW50ZSBkZXN0cnVpciBzZXVzIGRhZG9zLCBtYXMgdmFpIGZheuotbG9zIGludXRpbGl64XZlaXMsCitlIHZvY+ogdmFpIHByZWNpc2FyIHVzYXIgbyBjb21hbmRvIHJlc2N1ZSAoQHB4cmVme1NvZnR3YXJlcyBSZWxhY2lvbmFkb3N9KQorcGFyYSByZWN1cGVyYXIgcXVhbHF1ZXIgcGFydGnn428uIEdwYXJ0IHPzIHRyYWJhbGhhIGNvbSBldGlxdWV0YXMgZGUKK2Rpc2NvIGRvIG1zZG9zIChBRkFJSyksIG1hcyDpIG11aXRvIG1lbGhvciBxdWUgbyBwYXJ0ZWQgcGFyYSByZWN1cGVyYXIKK3BhcnRp5/Vlcy4gTyBQYXJ0ZWQgZnVuY2lvbmEgZW0gdG9kYXMgYXMgdGFiZWxhcyBkZSBwYXJ0aefjby4KK0Bmb290bm90ZXtUb2RvIG11bmRvIHBhcmVjZSB0ZXIgZGlmZXJlbnRlcyBwYWxhdnJhcyBwYXJhIGBgZXRpcXVldGEKK2RlIGRpc2NvJycgLS0tIHRvZGFzIGVzc2FzIHBhbGF2cmFzIHNpZ25pZmljYW0gYSBtZXNtYSBjb2lzYTogdGFiZWxhCitkZSBwYXJ0aef1ZXMsIG1hcGEgZGFzIHBhcnRp5/Vlcy4gVGFtYultIG8gUmVnaXN0cm8gTWVzdHJlIGRvIEJvb3QgZW0KK23hcXVpbmFzIHg4NiDpIGd1YXJkYWRvIG5vIG1lc21vIHNldG9yIGRhcyBUYWJlbGFzIGRlIFBhcnRp5+NvICh2b2PqCitu428gcHJlY2lzYSBzYWJlciBkaXNzbyBwYXJhIHVzYXIgbyBQYXJ0ZWQpLn0KKworQHZhcnt0aXBvLWRlLWV0aXF1ZXRhfSBkZXZlIHNlciBkZSB1bSBkZXNzZXMgdGlwb3MgZGUgdGFiZWxhcyBkZSBwYXJ0aefjbyBzdXBvcnRhZG9zOgorQGl0ZW1pemUKK0BpdGVtIGJzZAorQGl0ZW0gbG9vcCAoYWNlc3NvIGJydXRvIGFvIGRpc2NvKQorQGl0ZW0gZ3B0CitAaXRlbSBtYWMKK0BpdGVtIG1zZG9zCitAaXRlbSBwYzk4CitAaXRlbSBzdW4KK0BlbmQgaXRlbWl6ZQorCitFeGVtcGxvOgorCitAZXhhbXBsZQorKHBhcnRlZCkgQGtiZHtta2xhYmVsIG1zZG9zfQorQGVuZCBleGFtcGxlCisKK0NyaWEgdW1hIGV0aXF1ZXRhIGRlIGRpc2NvIGFvIGVzdGlsbyBtc2Rvcy4KK0BlbmQgZGVmZm4KKworQG5vZGUgbWtmcworQHN1YnNlY3Rpb24gbWtmcworQGNpbmRleCBta2ZzLCBkZXNjcmnn428gZG8gY29tYW5kbworQGNpbmRleCBkZXNjcmnn428gZG8gY29tYW5kbywgbWtmcworCitAZGVmZm4gQ29tbWFuZCBta2ZzIEB2YXJ7bWlub3J9IEB2YXJ7dGlwby1kZS1zaXN0ZW1hLWRlLWFycXVpdm99CisKK0ZheiB1bSBzaXN0ZW1hcyBkZSBhcnF1aXZvIEB2YXJ7dGlwby1kZS1zaXN0ZW1hLWRlLWFycXVpdm99IG5hIHBhcnRp5+NvCitAdmFye21pbm9yfSwgZGVzdHJ1aW5kbyB0b2RvcyBvcyBkYWRvcyBxdWUgcmVzaWRlbSBuYXF1ZWxhIHBhcnRp5+NvLgorCitUaXBvcyBkZSBhcnF1aXZvIHN1cG9ydGFkb3M6CitAaXRlbWl6ZQorQGl0ZW0gZXh0MgorQGl0ZW0gbWlwcworQGl0ZW0gZmF0MTYKK0BpdGVtIGZhdDMyCitAaXRlbSBsaW51eC1zd2FwCitAaXRlbSByZWlzZXJmcyAoc2UgYSBsaWJyZWlzZXJmcyBlc3RpdmVyIGluc3RhbGFkYSkKK0BlbmQgaXRlbWl6ZQorCitFeGVtcGxvOgorCitAZXhhbXBsZQorKHBhcnRlZCkgQGtiZHtta2ZzIDIgZmF0MzJ9CitAZW5kIGV4YW1wbGUKKworRmF6IHVtIHNpc3RlbWFzIGRlIGFycXVpdm8gQHZhcntmYXQzMn0gbmEgcGFydGnn428gMi4KK0BlbmQgZGVmZm4KKworQG5vZGUgbWtwYXJ0CitAc3Vic2VjdGlvbiBta3BhcnQKK0BjaW5kZXggbWtwYXJ0LCBkZXNjcmnn428gZG8gY29tYW5kbworQGNpbmRleCBkZXNjcmnn428gZG8gY29tYW5kbywgbWtwYXJ0CisKK0BkZWZmbiBDb21hbmRvIG1rcGFydCBAdmFye3RpcG8tZGUtcGFydGnn4299IFtAdmFye3RpcG8tZGUtc2lzdGVtYXMtZGUtYXJxdWl2b31dIEB2YXJ7Y29tZedvfSBAdmFye2ZpbX0KKworQ3JpYSB1bWEgbm92YSBwYXJ0aefjbywgQGVtcGh7c2VtfSBjcmlhciB1bSBub3ZvIHNpc3RlbWFzIGRlIGFycXVpdm8KK25hIHBhcnRp5+NvLiBFbGEg6SD6dGlsIHBhcmEgY3JpYXIgcGFydGnn9WVzIHBhcmEgc2lzdGVtYXMgZGUgYXJxdWl2bworKG91IExWTSwgZXRjLikgcXVlIG8gUGFydGVkIG7jbyBzdXBvcnRhLiBWb2PqIHBvZGUgZXNwZWNpZmljYXIgdGlwbworZGUgc2lzdGVtYXMgZGUgYXJxdWl2bywgcGFyYSBkZWZpbmlyIG8gY/NkaWdvIGRlIHBhcnRp5+NvIGFwcm9wcmlhZG8KK25hIHRhYmVsYSBkZSBwYXJ0aef1ZXMgcGFyYSBhIG5vdmEgcGFydGnn428uIEB2YXJ7dGlwby1kZS1zaXN0ZW1hcy1kZS1hcnF1aXZvfQor6SBuZWNlc3PhcmlvIHBhcmEgcGFydGnn9WVzIGRlIGRhZG9zIChwb3IgZXhlbXBsbywgcGFydGnn9WVzIG7jby0KK2V4dGVuZGlkYXMpLiBAdmFye2NvbWXnb30gZSBAdmFye2ZpbX0gc+NvIGEgZGlzdOJuY2lhIGRvIGNvbWXnbyBkbworZGlkY28sIGlzdG8g6SwgYSBgYGRpc3TibmNpYScnIGRvIGNvbWXnbyBkbyBkaXNjby4gCisKK0B2YXJ7dGlwby1kZS1wYXJ0aefjb30g6SB1bWEgZGVzc2FzOiBwcmltYXJ5IChwcmlt4XJpYSksIGV4dGVuZGVkCisoZXh0ZW5kaWRhKSwgbG9naWNhbCAobPNnaWNhKS4gRXh0ZW5kaWRhIGUgbPNnaWNhIHNvbWVudGUgc+NvIHVzYWRhcworcGFyYSB0YWJlbGFzIGRlIHBhcnRp5+NvIGRvIHRpcG8gbXNkb3MgZSBtaXBzLgorCitAdmFye3RpcG8tZGUtc2lzdGVtYXMtZGUtYXJxdWl2b30gZGV2ZSBzZXIgdW0gZG9zIHN1cG9ydGFkb3M6CitAaXRlbWl6ZQorQGl0ZW0gZXh0MgorQGl0ZW0gZmF0MzIKK0BpdGVtIGZhdDE2CitAaXRlbSBIRlMKK0BpdGVtIGxpbnV4LXN3YXAKK0BpdGVtIE5URlMKK0BpdGVtIHJlaXNlcmZzCitAaXRlbSB1ZnMKK0BlbmQgaXRlbWl6ZQorCitFeGVtcGxvOgorCitAZXhhbXBsZQorKHBhcnRlZCkgQGtiZHtta3BhcnQgbG9naWNhbCAwLjAgNjkyLjF9CitAZW5kIGV4YW1wbGUKKworQ3JpYSB1bWEgcGFydGnn428gbPNnaWNhIHF1ZSB2YWkgY29udGVyIHVtIHNpc3RlbWFzIGRlIGFycXVpdm8gZXh0Mi4KK0EgcGFydGnn428gdmFpIGNvbWXnYXIgbm8gY29tZedvIGRvIGRpc2NvLCBlIGZpbmFsaXphciBlbSA2OTIuMQorbWVnYWJ5dGVzIG5hcXVlbGUgZGlzY28uCisKK0BlbmQgZGVmZm4KKworQG5vZGUgbWtwYXJ0ZnMKK0BzdWJzZWN0aW9uIG1rcGFydGZzCitAY2luZGV4IG1rcGFydGZzLCBkZXNjcmnn428gZG8gY29tYW5kbworQGNpbmRleCBkZXNjcmnn428gZG8gY29tYW5kbywgbWtwYXJ0ZnMKKworQGRlZmZuIENvbWFuZG8gbWtwYXJ0ZnMgQHZhcnt0aXBvLWRlLXBhcnRp5+NvfSBAdmFye3RpcG8tZGUtc2lzdGVtYXMtZGUtYXJxdWl2b3N9IEB2YXJ7Y29tZedvfSBAdmFye2ZpbX0KKworQ3JpYSB1bWEgbm92YSBwYXJ0aefjbyBkbyB0aXBvIEB2YXJ7dGlwby1kZS1wYXJ0aefjb30gY29tIHVtIG5vdm8KK3Npc3RlbWFzIGRlIGFycXVpdm8gZG8gdGlwbyBAdmFye3RpcG8tZGUtc2lzdGVtYXMtZGUtYXJxdWl2b30gbmVsZS4KK2Egbm92YSBwYXJ0aefjbyB2YWkgY29tZedhciBlbSBAdmFye2NvbWXnb30gbWVnYWJ5dGVzLCBlIHRlbSBmaW0gZW0KK0B2YXJ7ZmltfSBtZWdhYnl0ZXMgZG8gY29tZedvIGRvIGRpc2NvLgorTuNvIHVzZSBlc3NlIGNvbWFuZG8gcGFyYSByZWN1cGVyYXIgdW1hIHBhcnRp5+NvICh1c2UgbWtwYXJ0IGFvIGludulzCitkaXNzbykuCisKK0B2YXJ7dGlwby1kZS1wYXJ0aefjb30g6SB1bWEgZGVzc2FzOiBwcmltYXJ5IChwcmlt4XJpYSksIGV4dGVuZGVkCisoZXh0ZW5kaWRhKSwgbG9naWNhbCAobPNnaWNhKS4gRXh0ZW5kaWRhIGUgbPNnaWNhIHPjbyBzb21lbnRlIHVzYWRhcworcG9yIHRhYmVsYXMgZGUgcGFydGnn428gZG8gdGlwbyBtc2RvcyBlIG1pcHMuCisKK0B2YXJ7dGlwby1kZS1zaXN0ZW1hcy1kZS1hcnF1aXZvfSBkZXZlIHNlciB1bSBkb3Mgc2VndWludGVzIHN1cG9ydGFkb3M6CitAaXRlbWl6ZQorQGl0ZW0gZXh0MgorQGl0ZW0gZmF0MzIKK0BpdGVtIGZhdDE2CitAaXRlbSBsaW51eC1zd2FwCitAaXRlbSByZWlzZXJmcyAoc2UgYSBsaWJyZWlzZXJmcyBlc3ThIGluc3RhbGFkYSkKK0BlbmQgaXRlbWl6ZQorCitFeGVtcGxvOgorCitAZXhhbXBsZQorKHBhcnRlZCkgQGtiZHtta3BhcnRmcyBsb2dpY2FsIGV4dDIgNDQwIDY3MH0KK0BlbmQgZXhhbXBsZQorCitDcmlhIHVtYSBwYXJ0aefjbyBs82dpY2EgZSBjb2xvY2EgdW0gc2lzdGVtYXMgZGUgYXJxdWl2byBkbyB0aXBvCitleHQyLCBjb21l52FuZG8gZW0gNDQwIG1lZ2FieXRlcyBlIGZpbmFsaXphbmRvIGVtIDY3MCBtZWdhYnl0ZXMKK2RvIGNvbWXnbyBkbyBkaXNjby4KK0BlbmQgZGVmZm4KKworQG5vZGUgbW92ZQorQHN1YnNlY3Rpb24gbW92ZQorQGNpbmRleCBtb3ZlLCBkZXNjcmnn428gZG8gY29tYW5kbworQGNpbmRleCBkZXNjcmnn428gZG8gY29tYW5kbywgbW92ZQorCitAZGVmZm4gQ29tYW5kbyBtb3ZlIEB2YXJ7bWlub3J9IEB2YXJ7Y29tZedvfSBbQHZhcntmaW19XQorCitNb3ZlIGEgcGFydGnn428gbm8gZGlzY28sIG1vdmVuZG8gc2V1IGNvbWXnbyBwYXJhIEB2YXJ7Y29tZedvfS4KK05vdGE6IG1vdmVyIG51bmNhIG11ZGEgbyBu+m1lcm8gZG8gbWlub3IuCisKK1NlIG5lbmh1bSBAdmFye2ZpbX0g6SBkYWRvLCBvIHRhbWFuaG8gZGEgcGFydGnn428gcGVybWFuZWNlIG8gbWVzbW8uCisKK1Npc3RlbWFzIGRlIGFycXVpdm8gc3Vwb3J0YWRvczoKK0BpdGVtaXplCitAaXRlbSBleHQyLCBleHQzCisoZGVzZGUgcXVlIGEgcGFydGnn428gZGUgZGVzdGlubyDpIG1haW9yIHF1ZSBhIHBhcnRp5+NvIGRlIG9yaWdlbSkKK0BpdGVtIGZhdDMyCitAaXRlbSBmYXQxNgorQGl0ZW0gbGludXgtc3dhcAorQGl0ZW0gcmVpc2VyZnMgKHNlIGEgbGlicmVpc2VyZnMgZXN04SBpbnN0YWxhZGEpCitAZW5kIGl0ZW1pemUKKworRXhlbXBsbzoKKworQGV4YW1wbGUKKyhwYXJ0ZWQpIG1vdmUgMiAxNTAKK0BlbmQgZXhhbXBsZQorCitNb3ZlIGEgcGFydGnn428gY29tIG8gbWlub3IgbvptZXJvIDIgcGFyYSBxdWUgZWxhIGNvbWVjZSAxNTAgbWVnYWJ5dGVzCitkbyBpbu1jaW8gZG8gZGlzY28uCisKK0BlbmQgZGVmZm4KKworQG5vZGUgbmFtZQorQHN1YnNlY3Rpb24gbmFtZQorQGNpbmRleCBuYW1lLCBkZXNjcmnn428gZG8gY29tYW5kbworQGNpbmRleCBkZXNjcmnn428gZG8gY29tYW5kbywgbmFtZQorCitAZGVmZm4gQ29tYW5kbyBuYW1lIEB2YXJ7bWlub3J9IEB2YXJ7bm9tZX0KKworRGVmaW5lIHVtIG5vbWUgcGFyYSBhIHBhcnRp5+NvIEB2YXJ7bWlub3J9IChNYWMgZSBQQzk4IHNvbWVudGUpLiBPCitub21lIHBvZGVyIHNlciBjb2xvY2FkbyBlbnRyZSBhc3Bhcy4KKworRXhlbXBsbzoKKworQGV4YW1wbGUKKyhwYXJ0ZWQpIEBrYmR7bmFtZSAyICdTZWNyZXRvJ30KK0BlbmQgZXhhbXBsZQorCitEZWZpbmUgbyBub21lIGRhIHBhcnRp5+NvIDIgcGFyYSBgU2VjcmV0bycuCitAZW5kIGRlZmZuCisKK0Bub2RlIHByaW50CitAc3Vic2VjdGlvbiBwcmludAorQGNpbmRleCBwcmludCwgZGVzY3Jp5+NvIGRvIGNvbWFuZG8KK0BjaW5kZXggZGVzY3Jp5+NvIGRvIGNvbWFuZG8sIHByaW50CisKK0BkZWZmbiBDb21hbmRvIHByaW50CisKK01vc3RyYSBhIHRhYmVsYSBkZSBwYXJ0aef1ZXMgcXVlIG8gcGFydGVkIGVzdOEgZWRpdGFuZG8uCisKK0V4ZW1wbG86CisKK0BleGFtcGxlCitAZ3JvdXAKKyhwYXJ0ZWQpIEBrYmR7cHJpbnR9CitEaXNrIGdlb21ldHJ5IGZvciAvZGV2L2hkYTogMC4wMDAtMjQ0NS42NzkgbWVnYWJ5dGVzCitEaXNrIGxhYmVsIHR5cGU6IG1zZG9zCitNaW5vciAgICBTdGFydCAgICAgICBFbmQgICAgIFR5cGUgICAgICBGaWxlc3lzdGVtICBGbGFncworMSAgICAgICAgICAwLjAzMSAgICA5NDUuMDAwICBwcmltYXJ5ICAgRkFUICAgICAgICAgYm9vdCwgbGJhCisyICAgICAgICA5NDUuMDAwICAgMjM1OC41NjIgIHByaW1hcnkgICBleHQyCiszICAgICAgIDIzNTguNTYyICAgMjQ0NS4xODcgIHByaW1hcnkgICBsaW51eC1zd2FwCitAZW5kIGdyb3VwCitAZW5kIGV4YW1wbGUKK0BlbmQgZGVmZm4KKworQG5vZGUgcXVpdAorQHN1YnNlY3Rpb24gcXVpdAorQGNpbmRleCBxdWl0LCBkZXNjcmnn428gZG8gY29tYW5kbworQGNpbmRleCBkZXNjcmnn428gZG8gY29tYW5kbywgcXVpdAorCitAZGVmZm4gQ29tYW5kbyBxdWl0CisKK1NhaSBkbyBQYXJ0ZWQuCisKK0BjIFJNSzogZ2VuZXJhbGl0eTogdGhlIGZvbGxvd2luZyB3aWxsIGFwcGx5IHRvIGFueSBvcGVyYXRpbmcgc3lzdGVtIG9uCitAYyB3aGljaCBwYXJ0ZWQgd2lsbCBydW4sIG5vdCBvbmx5IExpbnV4LWJhc2VkIG9uZXMuCitAYyBjbGF1c2VuOiB5ZWFoLi4uIGp1c3QgdGhhdCB0aGUgd2F5IGh1cmQgYW5kIGxpbnV4IHdvcmsgYXJlIHRvdGFsbHkKK0BjIGRpZmZlcmVudCwgYW5kIGl0J3MgYWN0dWFsbHkgdmVyeSBoYXJkIHRvIHNwZWFrIGluIGdlbmVyYWwuICBOZWVkIHRvCitAYyBkaXNjdXNzIHRoaXMgbW9yZQorySBzb21lbnRlIGRlcG9pcyBxdWUgbyBQYXJ0ZWQgc2FpIHF1ZSBvIGtlcm5lbCBkbyBMaW51eCBmaWNhIHNhYmVuZG8KK2RhcyBtdWRhbudhcyBxdWUgbyBQYXJ0ZWQgZmV6IG5vcyBkaXNjb3MuIENvbnR1ZG8sIGFzIG11ZGFu52FzIGNhdXNhZGFzCitxdWFuZG8gdm9j6iBkaWdpdGEgdW0gY29tYW5kbyB2YWkgQGVtcGh7cHJvdmF2ZWxtZW50ZX0gc2VyZW0gZmVpdGFzIHBhcmEKK28gZGlzY28gaW1lZGlhdGFtZW50ZSBhcPNzIGRpZ2l0YXIgdW0gY29tYW5kby4gTWFzLCBMaW51eCDpIGNhY2hlLCBlIG8KK2NhY2hlIGRvIGhhcmR3YXJlIGRvIGRpc2NvIHBvZGUgcG9yIHVtYSBkZW1vcmEgbmlzc28uCitAZW5kIGRlZmZuCisKK0Bub2RlIHJlc2N1ZQorQHN1YnNlY3Rpb24gcmVzY3VlCitAY2luZGV4IHJlc2N1ZSwgZGVzY3Jp5+NvIGRvIGNvbWFuZG8KK0BjaW5kZXggZGVzY3Jp5+NvIGRvIGNvbWFuZG8sIHJlc2N1ZQorCitAZGVmZm4gQ29tYW5kbyByZXNjdWUgQHZhcntjb21l5299IEB2YXJ7ZmltfQorcmVzZ2F0YSBwYXJ0aef1ZXMgcGVyZGlkYXMgZW50cmUgQHZhcntjb21l5299IGUgQHZhcntmaW19CitQcm9jdXJhIGVudHJlIEB2YXJ7Y29tZedvfSBlIEB2YXJ7ZmltfSBwb3IgYXNzaW5hdHVyYXMgZGUgc2lzdGVtYXMgZGUKK2FycXVpdm8uIFNlIGFsZ3VtYSDpIGVuY29udHJhZGEsIGVsZSB2YWkgcGVyZ3VudGFyIHNlIHZvY+ogcXVlciBjcmlhcgordW1hIHBhcnRp5+NvIHByYSBlbGUuIElzdG8g6SD6dGlsIHF1YW5kbyB2b2PqIGFjaWRlbnRhbG1lbnRlIGFwYWdvdSB1bWEKK3BhcnRp5+NvIGNvbSBvIGNvbWFuZG8gcm0gZG8gcGFydGVkLCBwb3IgZXhlbXBsby4KKworSW5mZWxpem1lbnRlIG7jbyBo4SB1bWEgYmFycmEgZGUgcHJvZ3Jlc3NvLCBwb3JxdWUg6SBkaWbtY2lsICh1bWEKK3Bvc3PtdmVsIGNvcnJl5+NvISkgcGFyYSBkaXplciBxdWFudG8gdmFpIGRlbW9yYXIuIFNlIG8gUGFydGVkIG7jbyBhY2hhCituYWRhLCBlbGUgdmFpIGRlbW9yYXIgbXVpdG8gdGVtcG8gcHJvY3VyYW5kbyAobyBxdWUg6SB1bSBidWcgcXVlIGRldmUKK3NlciBjb3JyaWdpZG8pLiBObyBlbnRhbnRvLCBubyBleGVtcGxvIGFiYWl4bywgYSBwYXJ0aefjbyDpCitpbnN0YW50YW5lYW1lbnRlIHJlY3VwZXJhZGEuCisKK0V4ZW1wbG86CisKK0BleGFtcGxlCisocGFydGVkKSBAa2Jke3ByaW50fQorQGdyb3VwCitEaXNrIGdlb21ldHJ5IGZvciAvZGV2L2hkYzogMC4wMDAtODA2My41MDcgbWVnYWJ5dGVzCitEaXNrIGxhYmVsIHR5cGU6IG1zZG9zCitNaW5vciAgICBTdGFydCAgICAgICBFbmQgICAgIFR5cGUgICAgICBGaWxlc3lzdGVtICBGbGFncworMSAgICAgICAgICAwLjAzMSAgIDgwNTYuMDMyICBwcmltYXJ5ICAgZXh0MworQGVuZCBncm91cAorKHBhcnRlZCkgQGtiZHtybX0KK1BhcnRpdGlvbiBudW1iZXI/IDEKKyhwYXJ0ZWQpIEBrYmR7cHJpbnR9CitAZ3JvdXAKK0Rpc2sgZ2VvbWV0cnkgZm9yIC9kZXYvaGRjOiAwLjAwMC04MDYzLjUwNyBtZWdhYnl0ZXMKK0Rpc2sgbGFiZWwgdHlwZTogbXNkb3MKK01pbm9yICAgIFN0YXJ0ICAgICAgIEVuZCAgICAgVHlwZSAgICAgIEZpbGVzeXN0ZW0gIEZsYWdzCitAZW5kIGdyb3VwCitAZW5kIGV4YW1wbGUKKworQUkhIE7zcyBkZWxldGFtb3MgYSBub3NzYSBwYXJ0aefjbyBleHQzISEhIFBhcnRlZCB2ZW0gcGFyYSBub3Mgc2FsdmFyLi4uCisKK0BleGFtcGxlCisocGFydGVkKSBAa2Jke3Jlc2N1ZX0KK1N0YXJ0PyAwLjAwMDU/CitFbmQ/IDgwNjMuNTA3Mz8KK0luZm9ybWF0aW9uOiBBIGV4dDMgcHJpbWFyeSBwYXJ0aXRpb24gd2FzIGZvdW5kIGF0IDAuMDMxTWIgLT4KKzgwNTYuMDMwTWIuICBEbyB5b3Ugd2FudCB0byBhZGQgaXQgdG8gdGhlIHBhcnRpdGlvbiB0YWJsZT8KK1llcy9Oby9DYW5jZWw/IEBrYmR7eX0KKyhwYXJ0ZWQpIEBrYmR7cHJpbnR9CitAZ3JvdXAKK0Rpc2sgZ2VvbWV0cnkgZm9yIC9kZXYvaGRjOiAwLjAwMC04MDYzLjUwNyBtZWdhYnl0ZXMKK0Rpc2sgbGFiZWwgdHlwZTogbXNkb3MKK01pbm9yICAgIFN0YXJ0ICAgICAgIEVuZCAgICAgVHlwZSAgICAgIEZpbGVzeXN0ZW0gIEZsYWdzCisxICAgICAgICAgIDAuMDMxICAgODA1Ni4wMzIgIHByaW1hcnkgICBleHQzCitAZW5kIGdyb3VwCitAZW5kIGV4YW1wbGUKKworRXN04SBkZSB2b2x0YSEgIDopCisKK0BlbmQgZGVmZm4KKworQG5vZGUgcmVzaXplCitAc3Vic2VjdGlvbiByZXNpemUKK0BjaW5kZXggcmVzaXplLCBkZXNjcmnn428gZG8gY29tYW5kbworQGNpbmRleCBkZXNjcmnn428gZG8gY29tYW5kbywgcmVzaXplCisKK0BkZWZmbiBDb21hbmRvIHJlc2l6ZSBAdmFye21pbm9yfSBAdmFye2NvbWXnb30gQHZhcntmaW19CisKK1JlZGltZW5zaW9uYSBhIHBhcnRp5+NvIGNvbSBvIG76bWVybyBAdmFye21pbm9yfS4gQSBwYXJ0aefjbyB2YWkgY29tZedhcgorZW0gQHZhcntjb21l5299IGRvIGNvbWXnbyBkbyBkaXNjbywgZSB0ZXJtaW5hciBlbSBAdmFye2ZpbX0gZG8gY29tZedvIGRvCitkaXNjby4gTyByZXNpemUgbnVuY2EgbXVkYSBvIG76bWVybyBkbyBtaW5vci4gUGFydGnn9WVzIGV4dGVuZGlkYXMgcG9kZW0KK3NlciByZWRpbWVuc2lvbmFkYXMsIGRlc2RlIHF1ZSBhIG5vdmEgcGFydGnn428gZW50ZW5kaWRhIGNvbnRlbmhhCit0b2RhcyBhcyBwYXJ0aef1ZXMgbPNnaWNhcy4KKworTm90ZSBxdWUgbyBQYXJ0ZWQgbuNvIHJlcXVlciBxdWUgdW0gc2lzdGVtYSBzZWphIGBgZGVzZnJhZ21lbnRhZG8nJworKFBhcnRlZCBwb2RlIG1vdmVyIG9zIGRhZG9zIHNlZ3VyYW1lbnRlIHNlIG5lY2Vzc+FyaW8pLiDJIHVtYSBwZXJkYQorZGUgdGVtcG8gZGVzZnJhbWVudGFyLiBO428gc2UgcHJlb2N1cGUhCisKK1Npc3RlbWFzIGRlIGFycXVpdm8gc3Vwb3J0YWRvczoKK0BpdGVtaXplCitAaXRlbSBleHQyLCBleHQzIC0gcmVzdHJp5+NvOiBvIG5vdm8gQHZhcntjb21l5299IGRldmUgc2VyIG8gbWVzbW8gZG8gYW50aWdvIEB2YXJ7Y29tZedvfS4KKworQGl0ZW0gZmF0MTYsIGZhdDMyCisKK0BpdGVtIGxpbnV4LXN3YXAKK0BpdGVtIHJlaXNlcmZzIChzZSBhIGxpYnJlaXNlcmZzIGVzdGl2ZXIgaW5zdGFsYWRhKQorQGVuZCBpdGVtaXplCisKK0V4ZW1wbG86CisKK0BleGFtcGxlCisocGFydGVkKSBAa2Jke3Jlc2l6ZSAzIDIwMCA4NTB9CitAZW5kIGV4YW1wbGUKKworUmVkaW1lbnNpb25hIGEgcGFydGnn428gMywgcGFyYSBxdWUgZWxhIGNvbWXnYSBlbSAyMDAgbWVnYWJ5dGVzCitlIHRlcm1pbmUgZW0gODUwIG1lZ2FieXRlcyBkbyBjb21l528gZG8gZGlzY28uCitAZW5kIGRlZmZuCisKK0Bub2RlIHJtCitAc3Vic2VjdGlvbiBybQorQGNpbmRleCBybSwgZGVzY3Jp5+NvIGRvIGNvbWFuZG8KK0BjaW5kZXggZGVzY3Jp5+NvIGRvIGNvbWFuZG8sIHJtCisKKworQGRlZmZuIENvbWFuZG8gcm0gQHZhcnttaW5vcn0KKworUmVtb3ZlIGEgcGFydGnn428gY29tIG76bWVybyBAdmFye21pbm9yfS4gU2Ugdm9j6iBhY2lkZW50YWxtZW50ZSBhcGFnYXIKK2EgcGFydGnn428gY29tIGVzc2UgY29tYW5kbywgdXNlIG8gbWtwYXJ0IChAZW1waHtu4299IG8gbWtwYXJ0ZnMpIHBhcmEKK3JlY3VwZXLhLWxhLiBWb2PqIHRhbWLpbSBwb2RlIHVzYXIgbyBwcm9ncmFtYSBncGFydCAoQHB4cmVme1Byb2dyYW1hcworUmVsYWNpb25hZG9zfSkgcGFyYSByZWN1cGVyYXIgdGFiZWxhcyBkZSBwYXJ0aefjbyBkYW5pZmljYWRhcy4KKworTm90YSBwYXJhIHRhYmVsYXMgZGUgcGFydGnn428gZG8gdGlwbyBtc2Rvczogc2Ugdm9j6iBhcGFnYXIgdW1hIHBhcnRp5+NvCits82dpY2EsIHRvZGFzIGFzIHBhcnRp5/VlcyBs82dpY2FzIGNvbSB1bSBu+m1lcm8gbWFpb3IgcXVlIGVzc2EgduNvIHNlcgorYXBhZ2Fkb3MuIFBvciBleGVtcGxvLCBzZSB2b2PqIGFwYWdhciB1bWEgcGFydGnn428gbPNnaWNhIGNvbSB1bSBu+m1lcm8KK21pbm9yIDYsIGVudONvIGFzIHBhcnRp5/VlcyBxdWUgZXJhbSBu+m1lcm8gNywgOCBlIDkgZGV2ZW0gc2VyIHJlbnVtZXJhZGFzCitwYXJhIDYsIDcgZSA4IHJlc3BlY3RpdmFtZW50ZS4gSXN0byBzaWduaWZpY2EgcXVlIHZvY+ogZGV2ZSBhdHVhbGl6YXIgYQorQGZpbGV7L2V0Yy9mc3RhYn0gZW0gc2lzdGVtYXMgR05VL0xpbnV4LgorCitFeGVtcGxvOgorCitAZXhhbXBsZQorKHBhcnRlZCkgQGtiZHtybSAzfQorQGVuZCBleGFtcGxlCisKK1JlbW92ZSBhIHBhcnRp5+NvIDMuCitAZW5kIGRlZmZuCisKK0Bub2RlIHNlbGVjdAorQHN1YnNlY3Rpb24gc2VsZWN0CitAY2luZGV4IHNlbGVjdCwgZGVzY3Jp5+NvIGRvIGNvbWFuZG8KK0BjaW5kZXggZGVzY3Jp5+NvIGRvIGNvbWFuZG8sIHNlbGVjdAorCitAZGVmZm4gQ29tYW5kbyBzZWxlY3QgQHZhcntkaXNwb3NpdGl2b30KKworU2VsZWNpb25hIG8gZGlzcG9zaXRpdm8sIEB2YXJ7ZGlzcG9zaXRpdm99LCBwYXJhIG8gUGFydGVkIGVkaXRhci4gTworZGlzcG9zaXRpdm8gZ2VyYWxtZW50ZSDpIHVtIGRpc3Bvc2l0aXZvIGRlIGRpc2NvIHLtZ2lkbyBkbyBMaW51eCwgb3UsCitzZSBhY2Vzc28gZGlyZXRvIGEgdW0gYXJxdWl2byDpIG5lY2Vzc+FyaW8gLS0tIHVtYSBwYXJ0aefjbywgZGlzcG9zaXRpdm8KK1JBSUQgZW0gc29mdHdhcmUsIG91IHVtIHZvbHVtZSBs82dpY28gTFZNLgorCitFeGVtcGxvOgorCitAZXhhbXBsZQorKHBhcnRlZCkgQGtiZHtzZWxlY3QgL2Rldi9oZGJ9CitAZW5kIGV4YW1wbGUKKworU2VsZWNpb25hIEBmaWxley9kZXYvaGRifSAobyBkaXNjbyBzbGF2ZSBuYSBwcmltZWlyYSBjb250cm9sYWRvcmEgaWRlCitubyBMaW51eCkgY29tbyB1bSBkaXNwb3NpdGl2byBwYXJhIGVkaXRhci4KK0BlbmQgZGVmZm4KKworQG5vZGUgc2V0CitAc3Vic2VjdGlvbiBzZXQKK0BjaW5kZXggc2V0LCBkZXNjcmnn428gZG8gY29tYW5kbworQGNpbmRleCBkZXNjcmnn428gZG8gY29tYW5kbywgc2V0CisKK0BkZWZmbiBDb21hbmRvIHNldCBAdmFye21pbm9yfSBAdmFye3NpbmFsaXphZG9yfSBAdmFye2VzdGFkb30KKworTXVkYSB1bSBzaW5hbGl6YWRvciBuYSBwYXJ0aefjbyBkZSBu+m1lcm8gQHZhcnttaW5vcn0uIFVtIAorc2luYWxpemFkb3IgcG9kZSBzZXIgYGBvbicnIG91IGBgb2ZmJycuIEFsZ3VtYXMgb3UgdG9kYXMgZXNzYXMgCitmbGFncyBlc3RhcuNvIGRpc3Bvbu12ZWlzLCBkZXBlbmRlbmRvIHF1YWwgdGFiZWxhIGRlIHBhcnRp5/Vlcwordm9j6iBlc3ThIHVzYW5kbzoKKworQHRhYmxlIEBzYW1wCitAaXRlbSBib290CisoTWFjLCBNU0RPUywgUEM5OCkgLSBz8yBkZXZlIHNlciBoYWJpbGl0YWRhIHNlIHZvY+ogcXVlciBmYXplcgorYm9vdCBkYSBwYXJ0aefjby4gQSBzZW3ibnRpY2EgcG9kZXIgdmFyaWFyIGVudHJlIGFzIHRhYmVsYXMgZGUKK3BhcnRp5+NvLiBQYXJhIHRhYmVsYXMgZGUgcGFydGnn428gZG8gTVNET1MsIHNvbWVudGUgdW1hIHBhcnRp5+NvCitwb2RlIHNlciBjYXJyZWfhdmVsLiBTZSB2b2PqIGVzdOEgaW5zdGFsYW5kbyBMSUxPIG51bWEgcGFydGnn428KKyhAcHhyZWZ7TElMT30pLCBlbnTjbyBhcXVlbGEgcGFydGnn428gZGV2ZSBzZXIgY2FycmVn4XZlbC4gUGFyYSB0YWJlbGFzCitkZSBwYXJ0aefjbyBkbyBQQzk4LCB0b2RhcyBhcyBwYXJ0aef1ZXMgZXh0MiBkZXZlbSBzZXIgY2FycmVn4XZlaXMKKyhJc3RvIOkgcmVmb3LnYWRvIHBlbG8gUGFydGVkKS4KKworQGl0ZW0gbGJhCisoTVNET1MpIC0gZXN0ZSBzaW5hbGl6YWRvciBwb2RlIHNlciBoYWJpbGl0YWRvLCBwYXJhIGRpemVyIGFvIE1TIERPUywKK28gTVMgV2luZG93cyA5eCBhbyBNUyBXaW5kb3dzIE1FIGUgb3V0cm9zIHNpc3RlbWFzIGJhc2VhZG9zIG5lbGVzCitwYXJhIHVzYXIgbyBtb2RvIExpbmVhciAoTEJBKS4KKworQGl0ZW0gcm9vdAorKE1hYykgLSBlc3RlIHNpbmFsaXphZG9yIGRldmUgc2VyIGhhYmlsaXRhZG8gc2UgYSBwYXJ0aefjbyBlc3ThIG5hCitwYXJ0aefjbyByYWl6IGEgc2VyIHVzYWRhIHBlbG8gTGludXguCisKK0BpdGVtIHN3YXAKKyhNYWMpIC0gZXN0ZSBzaW5hbGl6YWRvciBkZXZlIHNlciBoYWJpbGl0YWRvIHNlIGEgcGFydGnn428g6SBhIHN3YXAKK3F1ZSB2YWkgc2VyIHVzYWRhIHBlbG8gTGludXguCisKK0BpdGVtIGhpZGRlbgorKE1TRE9TLCBQQzk4KSAtIGVzdGEgZmxhZyBkZXZlIHNlciBoYWJpbGl0YWRhIHBhcmEgZXNjb25kZXIgcGFydGnn9WVzCitkZSBzaXN0ZW1hcyBvcGVyYWNpb25haXMgTWljcm9zb2Z0LgorCitAaXRlbSByYWlkCisoTVNET1MpIC0gZXN0ZSBzaW5hbGl6YWRvciBwb2RlIHNlciBoYWJpbGl0YWRvIHBhcmEgZGl6ZXIgYW8gTGludXggcXVlCitlc3NhIHBhcnRp5+NvIOkgdW1hIHBhcnRp5+NvIGRlIHNvZnR3YXJlIFJBSUQgQHhyZWZ7TFZNIGUgUkFJRH0uCisKK0BpdGVtIExWTQorKE1TRE9TKSAtIGVzdGUgc2luYWxpemFkb3IgcG9kZSBzZXIgaGFiaWxpdGFkbyBwYXJhIGRpemVyIOAgcGFydGnn428KK2xpbnV4IHF1ZSBhIHBhcnRp5+NvIOkgdW0gdm9sdW1lIGbtc2ljby4KKworQGVuZCB0YWJsZQorCitPIGNvbWFuZG8gcHJpbnQgbW9zdHJhIHRvZGFzIG9zIHNpbmFsaXphZG9yZXMgcGFyYSBjYWRhIHBhcnRp5+NvLgorCitFeGVtcGxvOgorCitAZXhhbXBsZQorKHBhcnRlZCkgQGtiZHtzZXQgMSBib290IG9ufQorQGVuZCBleGFtcGxlCisKK0RlZmluZSBvIHNpbmFsaXphZG9yIGRlIEBzYW1we2Jvb3R9IG5hIHBhcnRp5+NvIDEuCitAZW5kIGRlZmZuCisKK0Bub2RlIEV4ZXhtcGxvcworQHNlY3Rpb24gU2Vzc/VlcyBkZSBFeGVtcGxvIGRvIFBhcnRlZAorQGNpbmRleCBzZXNz9WVzIGRlIGV4ZW1wbG8gZG8gcGFydGVkCitAY2luZGV4IHNlc3P1ZXMgZGUgZXhlbXBsbyBkbyBwYXJ0ZWQKKworRXN0ZXMgZXhlbXBsb3MgdGVudGEgY29icmlyIGEgbWFpb3IgcGFydGUgZGFzIGNpcmN1bnN04m5jaWFzLCBjb20gYQorZXhjZefjbyBkZSBlc3BlbGhhbWVudG8gZGUgZGlzY28sIHF1ZSDpIGRpc2N1dGlkbyBlbSBAcmVme0VzcGVsaGFtZW50bworZGUgZGlzY299LgorCitAbWVudQorKiBBdW1lbnRhbmRvIHVtYSBwYXJ0aefjbyB1c2FuZG8gZXNwYedvIG7jby11c2Fkbzo6CisqIFJlZGltZW5zaW9uYW5kbyB1bWEgcGFydGnn428gZXh0MiBudW0gZGlzY28gY2hlaW86OgorQGVuZCBtZW51CisKK0Bub2RlIEF1bWVudGFuZG8gdW1hIHBhcnRp5+NvIHVzYW5kbyBlc3Bh528gaW51c2FkbworQHN1YnNlY3Rpb24gRXhlbXBsbzogQXVtZW50YW5kbyB1bWEgcGFydGnn428gcGFyYSB1c2FyIGVzcGHnbyBpbnVzYWRvCitAY2luZGV4IGF1bWVudGFuZG8gdW1hIHBhcnRp5+NvLCBleGVtcGxvCitAY2luZGV4IGV4ZW1wbG8sIGF1bWVudGFuZG8gdW1hIHBhcnRp5+NvCisKK1N1cG9uaOMgcXVlIHNldSBkaXNjbyBzZSBwYXJl52EgY29tIGlzc286CisKK0BleGFtcGxlCitAZ3JvdXAKKyhwYXJ0ZWQpIEBrYmR7cHJpbnR9CitEaXNrIGdlb21ldHJ5IGZvciAvZGV2L2hkYTogMC4wMDAtMTAwMC4wMDAgbWVnYWJ5dGVzCitEaXNrIGxhYmVsIHR5cGU6IG1zZG9zCitNaW5vciAgICBTdGFydCAgICAgICBFbmQgICAgIFR5cGUgICAgICBGaWxlc3lzdGVtICBGbGFncworMSAgICAgICAgICAwLjA2MyAgICA1MDAuMDAwICBwcmltYXJ5ICAgZXh0MgorMiAgICAgICAgNTAwLjAwMCAgICA2MjUuMDAwICBwcmltYXJ5ICAgbGludXgtc3dhcAorQGVuZCBncm91cAorQGVuZCBleGFtcGxlCisKK0Bub2luZGVudCBFeGlzdGVtIDM3NSBNYiBkZSBlc3Bh528gbGl2cmUgbm8gZmluYWwgZG8gZGlzY28gKGRlcG9pcyBkYQorcGFydGnn428gMikuIEEgUGFydGnn428gMSB0ZW0gdW0gc2lzdGVtYXMgZGUgYXJxdWl2byBleHQyLCBxdWUg6SBvCitkaXNwb3NpdGl2byByaWF6LiBBIHBhcnRp5+NvIDIg6SB1bSBkaXNwb3NpdGl2byBkZSBzd2FwLgorCitTdXBvbmhhIHF1ZSB2b2PqIHF1ZWlyYSB1c2FyIG8gZXNwYedvIGxpdnJlIG5vIGZpbmFsIGRvIGRpc2NvIHBhcmEgbworc2lzdGVtYXMgZGUgYXJxdWl2byBuYSBwYXJ0aefjbyAxLiBWb2PqIHBvZGUgZmF6ZXIgbyBzZWd1aW50ZToKKworQGVudW1lcmF0ZQorQGl0ZW0gRXN0ZXMgcGFzc29zIHbjbyBtb2RpZmljYXIgdGFudG8gbyBzaXN0ZW1hcyBkZSBhcnF1aXZvIHJhaXogbmEKK3BhcnRp5+NvIDEsIHF1YW50byBvIGRpc3Bvc2l0aXZvIGRlIHN3YXAgbmEgcGFydGnn428gMi4gUG9ydGFudG8sIHZvY+oKK27jbyBkZXZlcmlhIGVzdGFyIHVzYW5kbyBuZW5odW1hIGRhcyBkdWFzIHBhcnRp5/Vlcy4gVm9j6iBwcm92YXZlbG1lbnRlCitkZXZlIHVzYXIgdW0gZGlzY28gZGUgYm9vdCBkbyBQYXJ0ZWQuIEB4cmVme0Rpc2NvcyBkZSBib290IGRvIFBhcnRlZH0uCitEbyBkaXNjbyBkZSBib290LCByb2RlIG8gUGFydGVkOgorCitAZXhhbXBsZQorIyBAa2Jke3BhcnRlZCAvZGV2L2hkYX0KK0BlbmQgZXhhbXBsZQorCitAaXRlbSBSZW1vdmUgYSBwYXJ0aefjbyAyIChhIHBhcnRp5+NvIGRlIHN3YXApLiBOb3JtYWxtZW50ZSwgdm9j6iBu428KK2lhIHF1ZXJlciBhcGFnYXIgdW1hIHBhcnRp5+NvIGNvbSBkYWRvcyBuZWxhLiBNYXMsIHVtYSBwYXJ0aefjbyBu428KK2NvbnTpbSBkYWRvcyBlbnF1YW50byBu428gZXN04SBtb250YWRhLCBlbnTjbyB2b2PqIHBvZGUgcmVtb3bqLWxhLCBlCitjcmlhciB1bWEgb3V0cmEgcGFydGnn428gZGUgc3dhcCBubyBzZXUgbHVnYXIuCisKK0BleGFtcGxlCisocGFydGVkKSBAa2Jke3JtIDJ9CitAZW5kIGV4YW1wbGUKKworQGl0ZW0gQ3JpYSB1bWEgbm92YSBwYXJ0aefjbyBkZSBzd2FwIG5vIGZpbSBkbyBkaXNjbzoKKworQGV4YW1wbGUKK0Bncm91cAorKHBhcnRlZCkgQGtiZHtta3BhcnRmcyBwcmltYXJ5IGxpbnV4LXN3YXAgODc1IDk5OS45fQorKHBhcnRlZCkgQGtiZHtwcmludH0KK0Rpc2sgZ2VvbWV0cnkgZm9yIC9kZXYvaGRhOiAwLjAwMC0xMDAwLjAwMCBtZWdhYnl0ZXMKK0Rpc2sgbGFiZWwgdHlwZTogbXNkb3MKK01pbm9yICAgIFN0YXJ0ICAgICAgIEVuZCAgICAgVHlwZSAgICAgIEZpbGVzeXN0ZW0gIEZsYWdzCisxICAgICAgICAgIDAuMDYzICAgIDUwMC4wMDAgIHByaW1hcnkgICBleHQyCisyICAgICAgICA4NzUuMDAwICAgMTAwMC4wMDAgIHByaW1hcnkgICBsaW51eC1zd2FwCitAZW5kIGdyb3VwCitAZW5kIGV4YW1wbGUKKworQGl0ZW0gQXVtZW50YSBhIHBhcnRp5+NvIDEgbm8gZXNwYedvIHF1ZSBlc3ThIHNvYnJhbmRvCisKK0BleGFtcGxlCisocGFydGVkKSBAa2Jke3Jlc2l6ZSAxIDAuMDYzIDg3NC45fQorQGVuZCBleGFtcGxlCisKK1R1ZG8gZmVpdG8hCisKK0BleGFtcGxlCitAZ3JvdXAKKyhwYXJ0ZWQpIEBrYmR7cHJpbnR9CitEaXNrIGdlb21ldHJ5IGZvciAvZGV2L2hkYTogMC4wMDAtMTAwMC4wMDAgbWVnYWJ5dGVzCitEaXNrIGxhYmVsIHR5cGU6IG1zZG9zCitNaW5vciAgICBTdGFydCAgICAgICBFbmQgICAgIFR5cGUgICAgICBGaWxlc3lzdGVtICBGbGFncworMSAgICAgICAgICAwLjA2MyAgICA4NzQuOTk5ICBwcmltYXJ5ICAgZXh0MgorMiAgICAgICAgODc1LjAwMCAgIDEwMDAuMDAwICBwcmltYXJ5ICAgbGludXgtc3dhcAorQGVuZCBncm91cAorQGVuZCBleGFtcGxlCitAZW5kIGVudW1lcmF0ZQorCisKK0Bub2RlIFJlZGltZW5zaW9uYW5kbyB1bWEgcGFydGnn428gZXh0MiBlbSB1bSBkaXNjbyBjaGVpbworQHN1YnNlY3Rpb24gRXhlbXBsbzogUmVkaW1lbnNpb25hbmRvIHVtYSBwYXJ0aefjbyBleHQyIG51bSBkaXNjbyBjaGVpbworQGNpbmRleCByZWRpbWVuc2lvbmFuZG8gdW1hIHBhcnRp5+NvIG51bSBkaXNjbyBjaGVpbywgZXhlbXBsbworQGNpbmRleCBleGVtcGxvLCByZWRpbWVuc2lvbmFuZG8gdW1hIHBhcnRp5+NvIG51bSBkaXNjbyBjaGVpbworCitTdXBvbmhhIHF1ZSBvIHNldSBkaXNjbyBzZSBwYXJl52EgY29tIGlzc286CisKK0BleGFtcGxlCitAZ3JvdXAKKyhwYXJ0ZWQpIEBrYmR7cHJpbnR9CitEaXNrIGdlb21ldHJ5IGZvciAvZGV2L2hkYTogMC04MDYzLjUgbWVnYWJ5dGVzCitEaXNrIGxhYmVsIHR5cGU6IG1zZG9zCitNaW5vciAgIFN0YXJ0ICAgICBFbmQgICAgVHlwZSAgICAgICAgICAgIEZpbGVzeXN0ZW0gICAgIEZsYWdzCisxICAgICAgICAgIDAuMCAgICAgMjMuNSAgcHJpbWFyeSAgICAgICAgIGV4dDIgICAgICAgICAgIGJvb3QKKzIgICAgICAgICAyMy41ICAgODA1Ni4wICBleHRlbmRlZAorNSAgICAgICAgIDIzLjYgICAzNTQ1LjYgIGxvZ2ljYWwgICAgICAgICBleHQyCis2ICAgICAgIDM1NDUuNiAgIDcwNjcuNyAgbG9naWNhbCAgICAgICAgIGV4dDIKKzcgICAgICAgNzA2Ny43ICAgNzMyNi41ICBsb2dpY2FsICAgICAgICAgZXh0MgorOCAgICAgICA3MzI2LjUgICA3NTg1LjQgIGxvZ2ljYWwgICAgICAgICBleHQyCis5ICAgICAgIDc1ODUuNCAgIDc4NDQuMiAgbG9naWNhbCAgICAgICAgIGxpbnV4LXN3YXAKK0BlbmQgZ3JvdXAKKworQGdyb3VwCiskIEBrYmR7ZGYgLWh9CitGaWxlc3lzdGVtICAgICAgICAgICAgU2l6ZSAgVXNlZCBBdmFpbCBVc2UlIE1vdW50ZWQgb24KKy9kZXYvaGRhOCAgICAgICAgICAgICAyNTFNICAgMzFNICAyMDdNICAxMyUgLworL2Rldi9oZGExICAgICAgICAgICAgICAyM00gIDIuNE0gICAxOU0gIDExJSAvYm9vdAorL2Rldi9oZGE1ICAgICAgICAgICAgIDMuNEcgIDU3N00gIDIuN0cgIDE4JSAvdXNyCisvZGV2L2hkYTYgICAgICAgICAgICAgMy40RyAgMjg5TSAgMi45RyAgIDklIC9ob21lCisvZGV2L2hkYTcgICAgICAgICAgICAgMjUxTSAgIDEyTSAgMjI2TSAgIDUlIC92YXIKK0BlbmQgZ3JvdXAKK0BlbmQgZXhhbXBsZQorCitTdXBvbmhhIHF1ZSB2b2PqIHF1ZWlyYSBhdW1lbnRhciBhIHBhcnRp5+NvIGRvIEBmaWxley92YXJ9CitAZmlsZXsvZGV2L2hkYTd9KSBwYXJhIDFHQiwgdXNhbmRvIGFsZ3VtIGVzcGHnbyBkYSBwYXJ0aefjbworZG8gQGZpbGV7L2hvbWV9IChAZmlsZXsvZGV2L2hkYTZ9KS4KKworUGFyYSByZWRpbWVuc2lvbmFyIHVtYSBwYXJ0aefjbyB1c2FuZG8gbyBQYXJ0ZWQsIHZvY+ogcG9kZSB1c2FyCitvIGNvbWFuZG8gcmVzaXplOgorCitAZXhhbXBsZQorKHBhcnRlZCkgcmVzaXplIEB2YXJ7bnVtZXJvLWRhLXBhcnRpY2FvfSBAdmFye25vdm8tY29tZedvfSBAdmFye25vdm8tZmltfQorQGVuZCBleGFtcGxlCisKK0Bub2luZGVudCBAdmFye25vdm8gY29tZedvfSBkZXZlIHNlciBvIG1lc21vIHF1ZSBvIGFudGlnbyBjb21l528gZW0KK3BhcnRp5/VlcyBleHQyIChpbmZlbGl6bWVudGUpLiBFbnTjbyBlc3NlIHByb2Nlc3NvIHZhaSBmaWNhciBtYWlzCitjb21wbGljYWRvLiBAZW1waHvJfSBwb3Nz7XZlbCwgcG9ydGFudG8uIEBmb290bm90ZXtTZSBvIFBhcnRlZCBzdXBvcnRhc3NlCittb3ZlciBvIGNvbWXnbyBkZSBwYXJ0aef1ZXMgZXh0MiAoY29tbyBlbGUgZmF6IGNvbSBwYXJ0aef1ZXMgRkFUKSwgZW50428KK3NlcmlhIG11aXRvIG1haXMgc2ltcGxlczoKKworQGV4YW1wbGUKK0Bncm91cAorKHBhcnRlZCkgQGtiZHtyZXNpemUgNiAzNTQ1LjYgNjIwMH0KKyhwYXJ0ZWQpIEBrYmR7cmVzaXplIDcgNjIwMCA3MzI2LjV9CitAZW5kIGdyb3VwCitAZW5kIGV4YW1wbGUKK30KKworQGVudW1lcmF0ZQorQGl0ZW0gRGltaW51aXIgYSBwYXJ0aefjbyBkbyBAZmlsZXsvaG9tZX0gKEBmaWxley9kZXYvaGRhNn0pIGVtIDUwME1COgorCitAZXhhbXBsZQorIyBAa2Jke3BhcnRlZCAvZGV2L2hkYX0KKyhwYXJ0ZWQpIEBrYmR7cmVzaXplIDYgMzU0NS42IDYyMDB9CitAZW5kIGV4YW1wbGUKKworQGl0ZW0gQ3JpYSB1bWEgbm92YSBwYXJ0aefjbyBubyBzZXUgbHVnYXIuIEFsaSDpIG9uZGUgQGZpbGV7L3Zhcn0gdmFpCitlc3RhciwgZXZlbnR1YWxtZW50ZS4gRXN0YSBub3ZhIHBhcnRp5+NvIHZhaSBzZXIgbnVtZXJhZGEgY29tbyAxMC4KKworQGV4YW1wbGUKKyhwYXJ0ZWQpIEBrYmR7bWtwYXJ0ZnMgbG9naWNhbCBleHQyIDYyMDAgNzA2Ny43fQorQGVuZCBleGFtcGxlCisKK0BpdGVtIENvcGlhIGEgYW50aWdhIHBhcnRp5+NvIGRvIEBmaWxley92YXJ9IChAZmlsZXsvZGV2L2hkYTd9KSBwYXJhCithIG5vdmEgKEBmaWxley9kZXYvaGRhMTB9KS4KKworQGV4YW1wbGUKKyhwYXJ0ZWQpIEBrYmR7Y3AgNyAxMH0KK0BlbmQgZXhhbXBsZQorCitAaXRlbSBBcGFnYSBhIGFudGlnYSBAZmlsZXsvdmFyfQorCitAZXhhbXBsZQorKHBhcnRlZCkgcm0gNworQGVuZCBleGFtcGxlCisKK05lc3NlIG1vbWVudG86IHRvZGFzIGFzIHBhcnRp5/VlcyBs82dpY2FzIGNvbSBu+m1lcm8gbWFpb3IgcXVlIDcKK211ZGFyYW0gZGUgbvptZXJvLiBFbnTjbyA4LCA5IGUgMTAgdmlyYXJhbSA3LCA4IGUgOSByZXNwZWN0aXZhbWVudGUuCisKK0VzdGEgcmVudW1lcmHn428gbuNvIHZhaSBhY29udGVjZXIgZGUgdmVyZGFkZSBlbnF1YW50byBxdWFscXVlciB1bWEgZGVsYXMKK2VzdGl2ZXIgbW9udGFkYXMgbmFxdWVsZSBkaXNjbyAoc/MgdmFpIGFjb250ZWNlciBxdWFuZG8gdm9j6iByZWluaWNpYXIpLgorSXN0byDpIGRvIHF1ZSBlc3NhIG1lbnNhZ2VtIGRlIGF2aXNvIHRyYXRhLiBFbnTjbyB2b2PqIEBlbXBoe251bmNhfSBkZXZlCit0ZW50YXIgbW9udGFyIHVtIHNpc3RlbWFzIGRlIGFycXVpdm8gdG9jYWRvIHBlbG8gUGFydGVkIChyZWRpbWVuc2lvbmFkbworb3UgY3JpYWRvIHBlbG8gUGFydGVkKSwgYW50ZXMgZGUgcmVpbmljaWFyIHNlIHZvY+ogcmVjZWJlciBlc3NhIG1lbnNhZ2VtLgorCitAaXRlbSBSZWRpbWVuc2lvbmEgYSBub3ZhIHBhcnRp5+NvIGRvIEBmaWxley92YXJ9IChhZ29yYSBudW1lcmFkYSBwYXJhIDkpLAorYWRpY2lvbmFuZG8gbyBlc3Bh528gZGEgYW50aWdhIHBhcnRp5+NvIGRvIEBmaWxley92YXJ9OgorCitAZXhhbXBsZQorQGdyb3VwCisocGFydGVkKSBAa2Jke3Jlc2l6ZSA5IDYyMDAgNzMyNi41fQorKHBhcnRlZCkgQGtiZHtxdWl0fQorV2FybmluZzogVGhlIGtlcm5lbCB3YXMgdW5hYmxlIHRvIHJlLXJlYWQgdGhlIHBhcnRpdGlvbiB0YWJsZSBvbgorL2Rldi9oZGEgKERldmljZSBvciByZXNvdXJjZSBidXN5KS4gIFRoaXMgbWVhbnMgTGludXgga25vd3Mgbm90aGluZworYWJvdXQgYW55IG1vZGlmaWNhdGlvbnMgeW91IG1hZGUuICBZb3Ugc2hvdWxkIHJlYm9vdCB5b3VyIGNvbXB1dGVyCitiZWZvcmUgZG9pbmcgYW55dGhpbmcgd2l0aCAvZGV2L2hkYS4KK0BlbmQgZ3JvdXAKK0BlbmQgZXhhbXBsZQorCitAaXRlbSBQZWxvcyBu+m1lcm9zIGRhcyBwYXJ0aef1ZXMgdGVyZW0gbXVkYWRvLCBhIEBmaWxley9ldGMvZnN0YWJ9IGRldmUKK3NlciBhdHVhbGl6YWRhLiBJc3RvIHBvZGUgc2VyIGZlaXRvIGFudGVzIGRlIHJlaW5pY2lhciwgcG9ycXVlIGEgcGFydGnn428KK3JhaXogbuNvIGZvaSB0b2NhZGEgcGVsbyBQYXJ0ZWQuIChTZSB2b2PqIHF1ZXIgcXVlIG8gUGFydGVkIGZh52EgYWxnbyBjb20KK2EgcGFydGnn428gcmFpeiwgdm9j6iBwcmVjaXNhIHVzYXIgbyBkaXNjbyBkZSBib290KS4KKworU2UgYSBhbnRpZ2EgQGZpbGV7L2V0Yy9mc3RhYn0gc2UgcGFyZWNlIGNvbSBpc3NvOgorCitAZXhhbXBsZQorQGdyb3VwCisvZGV2L2hkYTggICAgICAvICAgICAgICAgICAgZXh0MiAgICBkZWZhdWx0cyAgICAgICAgMSAxCisvZGV2L2hkYTEgICAgICAvYm9vdCAgICAgICAgZXh0MiAgICBkZWZhdWx0cyAgICAgICAgMSAyCisvZGV2L2hkYTYgICAgICAvaG9tZSAgICAgICAgZXh0MiAgICBncnBxdW90YSx1c3JxdW90YSAgMCAgMgorL2Rldi9jZHJvbSAgICAgL21udC9jZHJvbSAgIGlzbzk2NjAgbm9hdXRvLG93bmVyLHJvIDAgMAorL2Rldi9oZGE1ICAgICAgL3VzciAgICAgICAgIGV4dDIgICAgZGVmYXVsdHMgICAgICAgIDEgMgorL2Rldi9oZGE3ICAgICAgL3ZhciAgICAgICAgIGV4dDIgICAgZ3JwcXVvdGEsdXNycXVvdGEgIDAgIDIKKy9kZXYvZmQwICAgICAgIC9tbnQvZmxvcHB5ICBhdXRvICAgIG5vYXV0byxvd25lciAgICAwIDAKK25vbmUgICAgICAgICAgIC9wcm9jICAgICAgICBwcm9jICAgIGRlZmF1bHRzICAgICAgICAwIDAKK25vbmUgICAgICAgICAgIC9kZXYvcHRzICAgICBkZXZwdHMgIGdpZD01LG1vZGU9NjIwICAwIDAKKy9kZXYvaGRhOSAgICAgIHN3YXAgICAgICAgICBzd2FwICAgIGRlZmF1bHRzICAgICAgICAwIDAKK0BlbmQgZ3JvdXAKK0BlbmQgZXhhbXBsZQorCitBbGd1bWFzIGxpbmhhcyBwcmVjaXNhbSBzZXIgYWx0ZXJhZGFzOgorQSBmZXcgbGluZXMgbmVlZCB0byBiZSBjaGFuZ2VkOgorQGl0ZW1pemUKK0BpdGVtIEBmaWxley92YXJ9IGlzIG5vdyAvZGV2L2hkYTkgKGJlY2F1c2Ugd2UgY29waWVkIGl0IHRvIGEgbmV3CitwYXJ0aXRpb24pCisKK0BpdGVtIEBmaWxley9kZXYvaGRhOH0gKHRoZSByb290IGRldmljZSkgaGFzIGJlZW4gcmVudW1iZXJlZCB0bworQGZpbGV7L2Rldi9oZGE3fQorCitAaXRlbSBAZmlsZXsvZGV2L2hkYTl9ICh0aGUgc3dhcCBkZXZpY2UpIGhhcyBiZWVuIHJlbnVtYmVyZWQgdG8KK0BmaWxley9kZXYvaGRhOH0KK0BlbmQgaXRlbWl6ZQorCitUaGUgbmV3IEBmaWxley9ldGMvZnN0YWJ9IGxvb2tzIGxpa2UgdGhpczoKKworQGV4YW1wbGUKK0Bncm91cAorL2Rldi9oZGE3ICAgICAgLyAgICAgICAgICAgIGV4dDIgICAgZGVmYXVsdHMgICAgICAgIDEgMQorL2Rldi9oZGExICAgICAgL2Jvb3QgICAgICAgIGV4dDIgICAgZGVmYXVsdHMgICAgICAgIDEgMgorL2Rldi9oZGE2ICAgICAgL2hvbWUgICAgICAgIGV4dDIgICAgZ3JwcXVvdGEsdXNycXVvdGEgIDAgIDIKKy9kZXYvY2Ryb20gICAgIC9tbnQvY2Ryb20gICBpc285NjYwIG5vYXV0byxvd25lcixybyAwIDAKKy9kZXYvaGRhNSAgICAgIC91c3IgICAgICAgICBleHQyICAgIGRlZmF1bHRzICAgICAgICAxIDIKKy9kZXYvaGRhOSAgICAgIC92YXIgICAgICAgICBleHQyICAgIGdycHF1b3RhLHVzcnF1b3RhICAwICAyCisvZGV2L2ZkMCAgICAgICAvbW50L2Zsb3BweSAgYXV0byAgICBub2F1dG8sb3duZXIgICAgMCAwCitub25lICAgICAgICAgICAvcHJvYyAgICAgICAgcHJvYyAgICBkZWZhdWx0cyAgICAgICAgMCAwCitub25lICAgICAgICAgICAvZGV2L3B0cyAgICAgZGV2cHRzICBnaWQ9NSxtb2RlPTYyMCAgMCAwCisvZGV2L2hkYTggICAgICBzd2FwICAgICAgICAgc3dhcCAgICBkZWZhdWx0cyAgICAgICAgMCAwCitAZW5kIGdyb3VwCitAZW5kIGV4YW1wbGUKKworQGl0ZW0gUmVib290LiAgVGhhdCdzIGl0IQorQGVuZCBlbnVtZXJhdGUKKworQG5vZGUgICAgQklPU2VzIGFuZCBGaXJtd2FyZQorQGNoYXB0ZXIgQklPU2VzIGFuZCBGaXJtd2FyZQorQGNpbmRleCBiaW9zCitAY2luZGV4IGZpcm13YXJlCisKK2BgQklPUycnIChCYXNpYyBJbnB1dC9PdXRwdXQgU3lzdGVtKSBhbmQgYGBmaXJtd2FyZScnIG1lYW4gdGhlIHNhbWUKK3RoaW5nLiAgSG93ZXZlciwgb24gUEMgYW5kIFBDOTggYmFzZWQgY29tcHV0ZXJzLCB0aGUgd29yZCBCSU9TIGlzIG1vcmUKK2NvbW1vbi4gIE9uIEFwcGxlIE1hY2ludG9zaCBhbmQgU3VuIGNvbXB1dGVycywgdGhlIHdvcmQgYGBmaXJtd2FyZScnIGlzCittb3JlIGNvbW1vbi4gIFRoZSBCSU9TIG9yIGZpcm13YXJlIHByb2dyYW0gaXMgYnVpbHQgaW50byBhIFJPTSBjaGlwCitpbnNpZGUgeW91ciBjb21wdXRlciwgdGhhdCBkb2VzIG1lbW9yeSBjaGVja3MsIGV0Yy4gIFlvdSBjYW4gbm90CisoZWFzaWx5KSBjaGFuZ2UgdGhpcyBwcm9ncmFtLiAgU2luY2UgQklPU2VzIHRvZGF5IGFyZSBnZW5lcmFsbHkKK2NvbXBhdGlibGUgd2l0aCBCSU9TZXMgaW4gdXNlIDIwIHllYXJzIGFnbywgdGhlc2UgcHJvZ3JhbXMgdGVuZCB0byBoYXZlCithbiBhbnRpcXVhdGVkIGRlc2lnbi4gIEZlYXR1cmVzIGhhdmUgYmVlbiBhZGRlZCBpbiBjb3VudGVyLWludHVpdGl2ZQord2F5cyBvdmVyIHRoZSB5ZWFycywgbGVhZGluZyB0byBvdmVybHkgY29tcGxpY2F0ZWQgc3lzdGVtcyB0aGF0IGNhdXNlIGEKK2xvdCBvZiBjb25mdXNpb24gdG9kYXkuCisKK0BtZW51CisqIFBDIEJJT1Nlczo6ICAgICAgICAgICAgICAgICAgIFRoZSBMZWdhY3kgb2YgSUJNCisqIE1hY2ludG9zaCBPcGVuRmlybXdhcmU6OiAgICAgIEdvIEZvcnRoLCBZb3VuZyBIYWNrZXIhCisqIFBDOTggQklPUzo6ICAgICAgICAgICAgICAgICAgIFRoZSBCSU9TIG9mIHRoZSBQQzk4IGNvbXB1dGVyCisqIFNHSSAvIE1JUFMgRmlybXdhcmU6OiAgICAgICAgIFRoZSBmaXJtd2FyZSBvZiBTR0kgTUlQUyBjb21wdXRlcnMKK0BlbmQgbWVudQorCitAbm9kZSBQQyBCSU9TZXMKK0BzZWN0aW9uIFRoZSBQQyBCSU9TCitAY2luZGV4IHBjIGJpb3MKK0BjaW5kZXggYmlvcywgcGMKKworVGhlcmUgYXJlIGEgZmV3IHBvcHVsYXIgUEMgQklPU2VzOiBBbWlCSU9TLCBBd2FyZCwgUGhvZW5peCwgYW5kIG90aGVycy4KK1RoZXkgYWxsIHdvcmsgaW4gYSBzaW1pbGFyIHdheS4gIE5vbmUgb2YgdGhlc2UgQklPU2VzIHVuZGVyc3RhbmQgb3Iga25vdworYWJvdXQgcGFydGl0aW9uIHRhYmxlcy4gIFRoZXkgYWZmZWN0IHBhcnRpdGlvbmluZyBpbmRpcmVjdGx5LgorCitUaGVyZSBhcmUgYSBmZXcgcG9wdWxhciBQQyBCSU9TZXM6IEFtaUJJT1MsIEF3YXJkLCBQaG9lbml4LCBhbmQgb3RoZXJzLgorVGhleSBhbGwgd29yayBpbiBhIHNpbWlsYXIgd2F5LiAgTm9uZSBvZiB0aGVzZSBCSU9TZXMgdW5kZXJzdGFuZCBvciBrbm93CithYm91dCBwYXJ0aXRpb24gdGFibGVzLiAgVGhleSBhZmZlY3QgcGFydGl0aW9uaW5nIGluZGlyZWN0bHkuCisKK291dHJhcy4gRWxhcyB0b2RhcyB0cmFiYWxoYW0gZGUgbW9kbyBzZW1lbGhhbnRlLiBOZW5obWEgZGVzc2FzIEJJT1NzCitlbnRlbmRlIG91IGNvbmhlY2VtIHNvYnJlIHRhYmVsYXMgZGUgcGFydGnn428sIG1hcyBlbGFzIGEgYWZldGFtCitpbmRpcmV0YW1lbnRlLgorCitPIHNlZ3VpbnRlIG9jb3JyZSBxdWFuZG8gbyBzZXUgY29tcHV0YWRvciDpIGxpZ2FkbzoKKworQGVudW1lcmF0ZQorQGl0ZW0gRXN0YXMgQklPU3MgY2FycmVnYW0gbyBwcmltZWlybyBiaXQgZG8gcHJvZ3JhbWEgY2FycmVnYWRvciBkZSBib290LAorZ3VhcmRhZG8gbmEgTUJSIChNYXN0ZXIgQm9vdCBSZWNvcmQgLSBSZWdpc3RybyBNZXN0cmUgZG8gQm9vdCkgbm8KK2Rpc2NvIHLtZ2lkby4KKworQGl0ZW0gQSBCSU9TIGV4ZWN1dGUgbyBwcmltZWlybyBiaXQgZG8gY2FycmVnYWRvciBkZSBib290LCBndWFyZGFkbyBuYSBNQlIKKyhNYXN0ZXIgQm9vdCBSZWNvcmQgLSBSZWdpc3RybyBNZXN0cmUgZG8gQm9vdCkgbm8gZGlzY28gcu1naWRvLgorCitAaXRlbSBPIHByb2dyYW1hIGNhcnJlZ2Fkb3IgZGUgYm9vdCB1c2EgYSBCSU9TIHBhcmEgY2FycmVnYXIgbyByZXN0byBkbworcHLzcHJpbyBwcm9ncmFtYS4KKworQGl0ZW0gTyBjYXJyZWdhZG9yIGRlIGJvb3QgdXNhIGEgQklPUyBwYXJhIGNhcnJlZ2FyIG8gc2lzdGVtYSBvcGVyYWNpb25hbAorKG91IHF1ZW0gc2FiZSwgb3V0cm8gY2FycmVnYWRvciBkZSBib290LCBuZXNzZSBjYXNvLCB2b2PqIHZhaSBwYXJhIG8gcGFzc28KKzIgZGUgbm92bykuCisKK0BpdGVtIE8gc2lzdGVtYSBvcGVyYWNpb25hbCBwb2RlIG91IG7jbyB1c2FyIGEgYmlvcyBwYXJhIGFjZXNzYXIgYXJxdWl2b3MKKyhvIFdpbmRvd3MgZ2VyYWxtZW50ZSB1c2EsIG8gTGludXggb3UgbyBCU2QgbuNvKS4KK0BlbmQgZW51bWVyYXRlCisKK0BjIFJNSzogRklYTUU6IGxlYXJuIGhvdyB0byByZWZlciB0byBlbnRyaWVzIGluIHRoZSBhYm92ZSBsaXN0LCBzbyB0aGF0CitAYyB0aGUgZm9sbG93aW5nIHBhcmFncmFwaHMgZG9lc24ndCBkZXBlbmQgb24gdGhlIG9yZGVyIGRldGFpbHMgb2YgdGhlCitAYyBsaXN0LgorCitPcyBwYXNzb3MgKDMpIGEgKDUpIGludm9sdmVtIHByb2dyYW1hcyBjb211bmljYW5kby1zZSBjb20gYSBCSU9TLCBwYXJhCitwZWRpciBwYXJhIGZhbGFyIGNvbSBvcyBkaXNjb3MuIEV4aXN0ZW0gZHVhcyBtYW5laXJhcyBkZSBzZSBjb211bmljYXIKK2NvbSBhIEJJT1MgcGFyYSBmYXplciBpc3NvOiB1c2FuZG8gQ0hTIChDeWxpbmRlcnMgSGVhZHMgYW5kIFNlY3RvcnMgLQorQ2lsaW5kcm9zIFRyaWxoYXMgZSBTZXRvcmVzKSBvdSBMQkEgKExpbmVhciBCbG9jayBBZGRyZXNzaW5nIC0KK0VuZGVyZedhbWVudG8gZGUgQmxvY29zIExpbmVhcikuIEJJT1NzIGFudGlnYXMgc29tZW50ZSB2428gc3Vwb3J0YXIgQ0hTLgorQXMgbm92YXMgQklPU3MgZ2VyYWxtZW50ZSBzdXBvcnRhbSB0YW50byBMQkEgcXVhbnRvIENIUywgYXBlc2FyIGRvCitzdXBvcnRlIGEgQ0hTIHNlciBpbnRlcnJvbXBpZG8gbm8gZnV0dXJvLiAobyBDSFMg6SBjb25zaWRlcmFkbyB1bSBzaXN0ZW1hCitsZWdhZG8gaG9ycu12ZWwuKQorCitQYXNzb3MgKDMpIGUgKDQpLCBmZWl0b3MgcGVsbyBjYXJyZWdhZG9yIGRlYm9vdCwgc2VtcHJlIHbjbyB1c2FyIG8gbWVzbW8KK23pdG9kbyBkZSBhY2Vzc28gLS0tIHNlbXByZSBMQkEgb3Ugc2VtcHJlIENIUy4gTm8gY2FzbyBkbyBjYXJyZWdhZG9yIGRlCitib290IGRvIFdpbmRvd3MsIGVsZSDpIGRldGVybWluYWRvIHBlbG8gaW5kaWNhZG9yIGRlIExCQSBuYSBwYXJ0aefjbyBkZQorYm9vdCBkbyBXaW5kb3dzIChAcHhyZWZ7ZGVmaW5pZGF9IHBhcmEgaW5mb3JtYef1ZXMgc29icmUgaW5kaWNhZG9yZXMpLgorTm8gY2FzbyBkbyBMaW51eCwgdm9j6iBwcm92YXZlbG1lbnRlIGVzdGFy4SB1c2FuZG8gTElMTyBvdSBHUlVCIGNvbW8KK2NhcnJlZ2Fkb3IgZGUgYm9vdC4gTyBHUlVCIHVzYSBMQkEgc2UgZXN0aXZlciBkaXNwb27tdmVsLCBlIENIUyBzZSBu428uCitPIExJTE8gcmVxdWVyIHF1ZSB2b2PqIGVzY29saGEgcXVhbmRvIHZvY+ogaW5zdGFsYSBlbGUgKGNvbSBhcyBvcOf1ZXMKKyJsaW5lYXIiIG91ICJsYmEzMiIpLgorCitAYyBSTUs6IEZJWE1FOiBmaW5kIHdheSB0byByZWZlciB0byBhYm92ZSBzdGVwcyBieSBALWNvbW1hbmQKK1Bhc3NvICg1KSAtIEUvUyBmZWl0YSBwZWxvIHNpc3RlbWEgb3BlcmFjaW9uYWwgLSBzb21lbnRlIG8gV2luZG93cworZmF6IEUvUyBwZWxhIEJJT1MuIFtO83MgYWluZGEgbuNvIHNhYmVtb3MgbyBzdWZpY2llbnRlIHNvYnJlIG9zCitwcm9ibGVtYXMsIG1hcyBwYXJlY2UgcXVlIG8gV2luZG93cyBwb2RlIHRlciBzZXVzIHBy83ByaW9zIHByb2JsZW1hcworY29tIG8gbW9kbyBDSFMuIEFzIHBlc3NvYXMgbm9zIGRpc3NlcmFtIGRlIHZlemVzIGVtIHF1ZSBvIFdpbmRvd3MKK2NvcnJvbXBlIHNldSBwcvNwcmlvIHNpc3RlbWFzIGRlIGFycXVpdm8sIGV0Yy4gySByZWFsbWVudGUgZGlm7WNpbAorcGFyYSBu83Mgc2FiZXIgbyBxdWUgZXN04SBhY29udGVjZW5kby4gTvNzIHJlY29tZW5kYW1vcyBmb3J0ZW1lbnRlCitxdWUgdm9j6iB1c2UgTEJBLCBzZSB2b2PqIHBvZGUhXQorCitFbnTjbyBleGlzdGVtIDMgcG9zc+12ZWlzIHNpdHVh5/VlcywgdG9kYXMgZGlzY3V0aWRhcyBhcXVpOgorCitAZW51bWVyYXRlCitAaXRlbSBWb2PqIGVzdOEgdXNhbmRvIG8gbW9kbyBDSFMsIGUgYSBzdWEgQklPUyBz8yBzdXBvcnRhIG8gbW9kbyBDSFMuCitAaXRlbSBWb2PqIGVzdOEgdXNhbmRvIG8gbW9kbyBDSFMsIGUgYSBzdWEgQklPUyBzdXBvcnRhIHRhbnRvIExCQSBxdWFudG8gQ0hTLgorRW50428sIHZvY+ogcXVlciBjb252ZXJ0ZXIgZG8gbW9kbyBDSFMgcGFyYSBMQkEgTyBNYWlzIFLhcGlkbyBQb3Nz7XZlbAorQHNje3RtfS4KK0BpdGVtIFZvY+ogauEgZXN04SB1c2FuZG8gbyBtb2RvIExCQS4KK0BlbmQgZW51bWVyYXRlCisKK0BtZW51CisqIE8gUGFydGVkIGUgbyBtb2RvIENIUzo6ICAgICAgICAgVXNhbmRvIG8gUGFydGVkIGVtIEJJT1NzIGNvbSBtb2RvIENIUworKiBEbyBtb2RvIENIUyBwYXJhIExCQTo6ICAgICAgICAgIENvbnZlcnRlbmRvIGEgQklPUyBkbyBtb2RvIENIUyBwYXJhIExCQQorKiBPIFBhcnRlZCBlIG8gbW9kbyBMQkE6OiAgICAgICAgIFVzYW5kbyBvIFBhcnRlZCBjb20gbyBtb2RvIExCQQorQGVuZCBtZW51CisKK0Bub2RlIE8gUGFydGVkIGUgbyBtb2RvIENIUworQHN1YnNlY3Rpb24gVXNhbmRvIG8gUGFydGVkIGVtIEJJT1MgZG8gbW9kbyBDSFMKK0BjaW5kZXggYmlvcyBkZSBtb2RvIGNocworQGNpbmRleCBjaHMsIGJpb3MgY29tIGdlb21ldHJpYSBkZSBkaXNjbyBkbyBtb2RvCisKK08gTGludXggbm9ybWFsbWVudGUgZGV0ZWN0YSBhIGdlb21ldHJpYSBkYSBCSU9TIGF1dG9tYXRpY2FtZW50ZS4gQ29udHVkbywKK+BzIHZlemVzIGlzc28gZOEgZXJyYWRvLiBOZXN0ZSBjYXNvLCB2b2PqIG1lc21vIGRldmUgZGl6ZXIgYW8gTGludXgsCitwYXNzYW5kbyB1bSBwYXLibWV0cm8gcGFyYSBlbGUuIFBvciBleGVtcGxvLCBzZSBvIExpbnV4IHBlbnNhIHF1ZSBvIHNldQorZGlzY28gcu1naWRvIEBmaWxley9kZXYvaGRhfSB0ZW0gYSBnZW9tZXRyaWEgMjU2LzY0LzYzLCBtYXMgbyBwcm9ncmFtYQorZGUgY29uZmlndXJh5+NvIGRhIEJJT1MgZGl6IHF1ZSBhIGdlb21ldHJpYSDpIDUxMi8zMi82MywgZW50428gdm9j6iBkZXZlCitwYXNzYXIgZXNzZSBwYXLibWV0cm8gYW8gTGludXg6CisKK0BleGFtcGxlCitAa2Jke2hkYT01MTIsMzIsNjN9CitAZW5kIGV4YW1wbGUKKworT3MgcGFy4m1ldHJvcyBz428gcGFzc2Fkb3MgZGUgZGl2ZXJzYXMgbWFuZWlyYXMsIGRlcGVuZGVuZG8gZG8gY2FycmVnYWRvcgorZGUgYm9vdCBxdWUgdm9j6iBlc3ThIHVzYW5kby4gVm9j6iBwcm92YXZlbG1lbnRlIGVzdOEgdXNhbmRvIG8gTElMTy4gTmVzdGUKK2Nhc28sIHZvY+ogYWRpY2lvbmEgYSBzZWd1aW50ZSBsaW5oYSBwYXJhIG8gQGZpbGV7L2V0Yy9saWxvLmNvbmZ9OiAoVm9j6gorZW50428gcHJlY2lzYSByb2RhciBvIEBjb21tYW5key9zYmluL2xpbG99LCBlIHJlaW5pY2lhciBwYXJhIGFzIG11ZGFu52FzCit0ZXJlbSBlZmVpdG8pCisKK0BjIFJNSzogRklYTUU6IGNhbid0IGdldCB0aGUgcXVvdGVzIHJpZ2h0OiB0ZXhpbmZvIGRvdWJsZSBxdW90ZXMgYGAnJyBkb24ndAorQGMgd29yayBpbiBleGFtcGxlJ3MsIGFuZCBrZXlib2FyZCBkb3VibGUgcXVvdGVzICIiIGRvbid0IGxvb2sgcmlnaHQgaW4gdGV4dC4KK0BleGFtcGxlCithcHBlbmQ9ImhkYT01MTIsMzIsNjMiCitAZW5kIGV4YW1wbGUKKworTyBQYXJ0ZWQgZ2VyYWxtZW50ZSBwb2RlIGRldGVjdGFyIHNlIG8gTGludXggZGV0ZWN0b3UgYSBnZW9tZXRyaWEgaW5jb3JyZXRhLgorQ29udHVkbywgZWxlIG7jbyBwb2RlIGZhemVyIGlzc28gc2UgbuNvIGV4aXN0ZW0gcGFydGnn9WVzIG5vIGRpc2NvLiBOZXN0ZQorY2Fzbywgdm9j6iBtZXNtbyBwb2RlIGNoZWNhci4gySBtdWl0byBpbXBvcnRhbnRlIHF1ZSB2b2PqIGZh52EgaXNzby4KKworQWxndW1hcyB2ZXplcywgbyBQYXJ0ZWQgdmFpIHJlY2xhbWFyIHF1ZSBhcyBwYXJ0aef1ZXMgbuNvIGVzdONvIGFsaW5oYWRhcworYW9zIGxpbWl0ZXMgZG9zIGNpbGluZHJvcy4gTyBQYXJ0ZWQgdmFpIHRlIGRhciBhIG9w5+NvIGRlIGlnbm9yYXIuIFNlIHZvY+oKK2lnbm9yYXIsIGVudONvIG8gUGFydGVkIHZpYSBmYXplciBhbGd1bnMgdHJ1cXVlcyBjb20gYSBzdWEgdGFiZWxhIGRlCitwYXJ0aef1ZXMuIE5vIExpbnV4IG7jbyB2YWkgdGVyIHByb2JsZW1hcy4gTm8gRE9TIGUgbm8gV2luZG93cyBu428gduNvIHRlcgorcHJvYmxlbWFzIHNlIGVsZXMgZXN0428gdXNhbmRvIG8gbW9kbyBMQkEuIFNlIG8gRE9TL1dpbmRvd3MgZXN04SB1c2FuZG8KK28gbW9kbyBDSFMsIGVudONvIHJlaW5zdGFsYXIgbyBnZXJlbmNpYWRvciBkZSBib290IChAcHhyZWZ7TVMgRE9TCitNUyBXaW5kb3dzIDl4IE1TIFdpbmRvd3MgTUV9KSBkZXZlIHJlc29sdmVyIHF1YWxxdWVyIHByb2JsZW1hIC0gbWFzIG11ZGFyCitwcm8gbW9kbyBMQkEg6SBwcmVmZXLtdmVsICh2ZWphIEBweHJlZntEbyBtb2RvIENIUyBwYXJhIExCQX0pLgorCitQYXJ0aef1ZXMgcXVlIGVzdONvIGVudm9sdmlkYXMgbm8gcHJvY2Vzc28gZGUgYm9vdCBkZXZlbSBmaW5hbGl6YXIgYW50ZXMKK2RvIGNpbGluZHJvIDEwMjQsIHNlIG8gbW9kbyBDSFMgZXN04SBzZW5kbyB1c2Fkby4gVmVqYSBhIHNl5+NvIHNvYnJlCitvIHByb2Nlc3NvIGRlIGJvb3QgcGFyYSBkZXRlcm1pbmFyIHNlIGEgcGFydGnn428gZXN04SBlbnZvbHZpZGEgbm8KK3Byb2Nlc3NvIGRlIGJvb3QuIEEgY29uZmlndXJh5+NvIHTtcGljYSDpIHRlciB1bWEgcGVxdWVuYSBwYXJ0aefjbworTGludXggcGFyYSBvIEBmaWxley9ib290fSwgdW1hIHBhcnRp5+NvIFdpbmRvd3MsIGUgZW50428gYShzKQorcGFydGnn428o9WVzKSBMaW51eC4KKworQG5vZGUgRG8gbW9kbyBDSFMgcGFyYSBvIExCQQorQHN1YnNlY3Rpb24gQ29udmVydGVuZG8gZG8gbW9kbyBDSFMgcGFyYSBvIExCQQorQGNpbmRleCBjaHMgcGFyYSBsYmEsIGNvbnZlcnRpbmcgZGUKKworUGFyYSBmYXplciBjb20gcXVlIG8gY2FycmVnYWRvciBkZSBib290IGRvIFdpbmRvd3MgZSBvIHNpc3RlbWEKK29wZXJhY2lvbmFsIHVzYXJlbSBvIG1vZG8gTEJBLCBzb21lbnRlIGRlZmluYSBvIGluZGljYWRvciBMQkEgZW0gdG9kYXMKK2FzIHBhcnRp5/VlcyBGQVQgQHJlZntzZXR9LiBWb2PqIG7jbyBkZXZlIHRlciBwcm9ibGVtYXMuIFNlIHZvY+oKK3RpdmVyIHByb2JsZW1hcyBjYXJyZWdhbmRvIG8gV2luZG93cywgZW50428gcmVpbnN0YWxhciBvIGNhcnJlZ2Fkb3IKK2RlIGJvb3QgZG8gV2luZG93cyB2YWkgY29uc2VydGFyIGlzc28gQHJlZntNUyBET1MgTVMgV2luZG93cyA5eCBNUworV2luZG93cyBNRX0uCisKK08gTGludXggbuNvIHVzYSBhIEJJT1MgcGFyYSBFL1MuIENvbnR1ZG8sIG8gY2FycmVnYWRvciBkZSBib290IChMSUxPCitvdSBHUlVCKSBwb2RlLiBPIEdSVUIgYXV0b21hdGljYW1lbnRlIHVzYSBMQkEsIGNhc28gZXN0ZWphIGRpc3Bvbu12ZWwuCitPIExJTE8gZXhpZ2UgYSBvcOfjbyBgYGxpbmVhcicnIG91IGBgbGJhMzInJy4gRW50428sIHNlIG8gTElMTyBhaW5kYQorY2FycmVnYSBhcPNzIG11ZGFyIG8gQGZpbGV7L2V0Yy9saWxvLmNvbmZ9IGUgcm9kYXIgbyBAY29tbWFuZHsvc2Jpbi9saWxvfSwKK2VudONvIGVzdOEgdHVkbyBmZWl0byEgQHhyZWZ7TElMT30uIChTZSB2b2PqIHRpdmVyIHByb2JsZW1hcywgcmV2ZXJ0YQorcGFyYSBDSFMgZGUgdm9sdGEsIHJlbW92ZW5kbyBhIG9w5+NvIGBgbGluZWFyJycgb3UgYGBsYmEzMicnLCBlCityZWluc3RhbGFuZG8gbyBsaWxvIGRvIGRpc2NvIGRlIGJvb3QuKQorCitBZ29yYSBxdWUgdm9j6iBlc3ThIHVzYW5kbyBMQkEgY29udGludWUgbGVuZG9AZG90c3t9CisKK0Bub2RlIE8gUGFydGVkIGUgbyBtb2RvIExCQQorQHN1YnNlY3Rpb24gVXNhbmRvIG8gUGFydGVkIG5vIG1vZG8gTEJBCitAY2luZGV4IG1vZG8gbGJhCitAY2luZGV4IGxiYSwgZ2VvbWV0cmlhIGRlIGRpc2NvIGRvIG1vZG8KKworTyBtb2RvIExCQSByZXNvbHZlIHRvZG9zIG9zIHByb2JsZW1hcyBkbyBDSFMuIENvbnR1ZG8sIG7jbyBleGlzdGUgdW1hCittYW5laXJhIGNvbmZp4XZlbCBwYXJhIG8gTGludXggb3UgbyBQYXJ0ZWQgc2FiZXIgcXVlIHZvY+ogZXN04SB1c2FuZG8KK0xCQSwgZW50428gbyBQYXJ0ZWQgcG9kZSB0ZSBkYXIgYXZpc29zIHNvYnJlIGNpbGluZHJvcyBu428gYWxpbmhhZG9zLAorb3UgYSBnZW9tZXRyaWEgZGEgQklPUyBzZXIgaW5jb25zaXN0ZW50ZSwgZXRjLiBWb2PqIHBvZGUgaWdub3JhciBlc3NhcworbWVuc2FnZW5zLCBzZSB2b2PqIGVzdOEgdXNhbmRvIG8gbW9kbyBMQkEuIChWZXJz9WVzIGFudGlnYXMgZG8gUGFydGVkCit0aW5oYW0gcHJvYmxlbWFzLCBtYXMgdG9kb3MgZm9yYW0gcmVzb2x2aWRvcykuCisKK1F1YW5kbyBvIHNldSBkaXNjbyBlc3ThIG5vIG1vZG8gTEJBLCBvIFBhcnRlZCAoZSBhIG1haW9yaWEgZG9zIG91dHJvcworcHJvZ3JhbWFzKSB2YWkgZGl6ZXIgcXVlIGEgc3VhIGdlb21ldHJpYSDpIFgvMjU1LzYzIC0gYSBtZW5vcyBxdWUKK3ZvY+ogdGVuaGEgbXVkYWRvIGRvIENIUyBwYXJhIExCQS4KKworQG5vZGUgTWFjaW50b3NoIE9wZW5GaXJtd2FyZQorQHNlY3Rpb24gT3BlbkZpcm13YXJlIGRvIHRoZSBBcHBsZSBNYWNpbnRvc2gKK0BjaW5kZXggb3BlbiBmaXJtd2FyZSwgbWFjaW50b3NoCitAY2luZGV4IG1hY2ludG9zaCBvcGVuIGZpcm13YXJlCisKK0V4aXN0ZW0gZHVhcyB2ZXJz9WVzIGRvIE9wZW5GaXJtd2FyZSBkbyBQb3dlck1hYyAtIHVtYSB1c2FkYSBubworYGBhbnRpZ28gbXVuZG8nJyBkbyBQb3dlck1hYywgZSBvdXRyYSB1c2FkYSBubyBgYG5vdm8gbXVuZG8nJy4gTworYGBOb3ZvIG11bmRvJycgc2UgcmVmZXJlIGFvcyBQb3dlclBDcyBjb2xvcmlkb3MgZmVpdG9zIGRlc2RlIDE5OTkuCitFbGVzIHRlbSBkaWZlcmVu52FzIHNpZ25pZmljYW50ZXMuIENvbnR1ZG8sIGFtYm9zIGVudGVuZGVtIHRhYmVsYXMKK2RlIHBhcnRp5+NvLgorCitBbWJhcyByZXF1ZXJlbSBxdWUgbyB1c3XhcmlvIGVzY29saGEgZXhhdGFtZW50ZSB1bWEgcGFydGnn428gcGFyYSBzZXIKK2EgcGFydGnn428gZGUgYm9vdCAoYSBwYXJ0aefjbyBjb20gbyBjYXJyZWdhZG9yIGRlIGJvb3QpLiBDb250dWRvLAorZWxlcyB1c2FtIG1lY2FuaXNtb3MgZGlmZXJlbnRlcyBwYXJhIGZhemVyIGlzc28uCisKK0BtZW51CisqIFZlbGhvIE11bmRvOjoKKyogTm92byBNdW5kbzo6CitAZW5kIG1lbnUKKworQG5vZGUgVmVsaG8gTXVuZG8KK0BzdWJzZWN0aW9uIE9wZW5GaXJ3YXJlIE1hY2ludG9zaCBkbyBWZWxobyBNdW5kbworQGNpbmRleCBmaXJtd2FyZSBtYWNpbnRvc2ggZG8gdmVsaG8gbXVuZG8KK0BjaW5kZXggdmVsaG8gbXVuZG8sIGZpcm13YXJlIG1hY2ludG9zaCBkbworQGNpbmRleCBmaXJtd2FyZSBtYWNpbnRvc2ggZG8gdmVsaG8gbXVuZG8KKworQSBwYXJ0aefjbyBlc2NvbGhpZGEgcGFyYSBkYXIgYm9vdCDpIGRlZmluaWRhIHBvciB24XJpb3MgY2FycmVnYWRvcmVzCitkZSBib290LCBjb21vIG8gUXVpay4gRW50428sIHZvY+ogbuNvIGRldmUgcHJlY2lzYXIgZmF6ZXIgbmFkYS4gTvNzCitwb2Rlcu1hbW9zIGFkaWNpb25hciBzdXBvcnRlIGEgaXNzbyBubyBQYXJ0ZWQsIHNlIGFsZ3XpbSBncml0YXIgbXVpdG8KK2FsdG9AZG90c3t9CisKK0Bub2RlIE5vdm8gTXVuZG8KK0BzdWJzZWN0aW9uIE9wZW5GaXJ3YXJlIE1hY2ludG9zaCBkbyBOb3ZvIE11bmRvCitAY2luZGV4IGZpcndhcmUgbWFjaW50b3NoIGRvIHZlbGhvIG11bmRvCitAY2luZGV4IG5vdm8gbXVuZG8sIGZpcndhcmVtIG1hY2ludG9zaCBkbworQGNpbmRleCBmaXJ3YXJlbSBtYWNpbnRvc2ggZG8gbm92byBtdW5kbworCitAYyBSTUs6IGNvbXBsZXRlbmVzczogZG8gd2UgaGF2ZSBhIGRlc2NyaXB0aW9uIG9mIEhGUyBhbnl3aGVyZSBoZXJlPworT3BlbkZpcm13YXJlIGRvIG5vdm8gbXVuZG8gcmVxdWVyIHF1ZSBhIHBhcnRp5+NvIHF1ZSBk4SBib290IHNlamEgSEZTCitlIG1hcmNhZGEgY29tbyBwYXJ0aefjbyBkZSBib290LiBFbGEgdXNhIHVtIG1lY2FuaXNtbyBkaWZlcmVudGUgcGFyYQorc2VyIG1hcmNhZGEgY29tbyBhIHBhcnRp5+NvIGRlIGJvb3QuIElzdG8g6SBjb250cm9sYWRvIGNvbSBvIGluZGljYWRvcgorYGBib290Jycgbm8gUGFydGVkLiBQb3IgZXhlbXBsbzoKKworQGV4YW1wbGUKKyhwYXJ0ZWQpIEBrYmR7c2V0IDIgYm9vdCBvbn0KK0BlbmQgZXhhbXBsZQorCitAbm9kZSBCSU9TIGRvcyBQQzk4CitAc2VjdGlvbiBBcyBCSU9TIGRvcyBQQzk4CitAY2luZGV4IGJpb3MgZG8gcGM5OAorCitAYyBSTUs6IGNvbXBsZXRlbmVzcyA6IHNob3VsZCB3ZSBkZXNjcmliZSB3aGF0IG1hY2hpbmVzIGFyZSBsaWtlbHkgdG8KK0BjIGhhdmUgYSBQQyA5OCBiaW9zPworQGMgUk1LOiBpbGxpdGVyYWN5OiB0aGUgb25seSBwYWdlcyBJIGZvdW5kIGZvciBQQzk4IGluZm8gd2VyZSBpbiBKYXBhbmVzZSwKK0BjIHdoaWNoIEkgY2FuJ3QgcmVhZCA6KAorQSBCSU9TIGRvcyBQQzk4IHBlcm1pdGVtIGEgdm9j6iBtYXJjYXIgcXVhbHF1ZXIgbvptZXJvIGRlIHBhcnRp5+NvCitjb21vIGJvb3ThdmVsLiBWb2PqIHBvZGUgZGVzbWFyY2FyIG91IG1hcmNhciB1bWEgcGFydGnn428gY29tbyBib2904XZlbAorY29tIG8gaW5kaWNhZG9yIGBgYm9vdCcnIGRvIFBhcnRlZC4gUG9yIGV4ZW1wbG86CisKK0BleGFtcGxlCisocGFydGVkKSBAa2Jke3NldCAyIGJvb3Qgb2ZmfQorQGVuZCBleGFtcGxlCisKKworQG5vZGUgRmlybXdhcmVzIGRvcyBTR0kgLyBNSVBTCitAc2VjdGlvbiBGaXJtd2FyZSBkb3MgU0dJIC8gTUlQUworQGNpbmRleCBmaXJtd2FyZSBkb3Mgc2dpCitAY2luZGV4IGZpcm13YXJlIGRvcyBtaXBzCisKKworCitPIGZpcm13YXJlIGRvcyBTR0kgLyBNSVBTIHBlcm1pdGUgdm9j6iBmYXplciBvIGJvb3QgZGUgYXJxdWl2b3MgZGUKK2Jvb3QgZXNwZWNpYWlzLCBxdWUgc+NvIGdlcmVuY2lhZG9zIHBlbGEgdGFiZWxhIGRlIHBhcnRp5/Vlcy4gTm8KK1BhcnRlZCwgZXNzZXMgYXJxdWl2b3MgZGUgYm9vdCBz428gdHJhdGFkb3MgY29tbyBwYXJ0aef1ZXMgbPNnaWNhcworZGVudHJvIGRhcyBwYXJ0aef1ZXMgZXh0ZW5kaWRhcy4KKworUG9yIGV4ZW1wbG86CisKK0BleGFtcGxlCitEaXNrIGxhYmVsIHR5cGU6IG1pcHMKK01pbm9yICAgIFN0YXJ0ICAgICAgIEVuZCAgICAgVHlwZSAgICAgIEZpbGVzeXN0ZW0gIE5hbWUgICAgICAgIEZsYWdzCis5ICAgICAgICAgIDAuMDAwICAgICAgMi43MzIgIGV4dGVuZGVkCisxNyAgICAgICAgIDAuMDAyICAgICAgMC4wMDIgIGxvZ2ljYWwgICAgICAgICAgICAgICBzZ2lsYWJlbAorMTggICAgICAgICAwLjAwMyAgICAgIDEuMTYyICBsb2dpY2FsICAgICAgICAgICAgICAgc3ltbW9uCisxOSAgICAgICAgIDEuNDA0ICAgICAgMS42NzAgIGxvZ2ljYWwgICAgICAgICAgICAgICBzYXNoCisxICAgICAgICAgIDIuNzMyICAgODU1NS4yMTIgIHByaW1hcnkgICB4ZnMgICAgICAgICAgICAgICAgICAgICByb290CisyICAgICAgIDg1NTUuMjEzICAgODY4Mi4yNzAgIHByaW1hcnkgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2FwCitAZW5kIGV4YW1wbGUKKworQSBQYXJ0aefjbyA5IOkgYSBwYXJ0aefjbyBleHRlbmRpZGEgKHVtIGNhYmXnYWxobyBkZSB2b2x1bWUsIG5hIHRlcm1pbm9sb2dpYQorZG9zIFNHSS9NSVBTKSBhb25kZSBvIGFycXVpdm8gZGUgYm9vdCBwb2RlIGZpY2FyLiBBcyBwYXJ0aef1ZXMgMTcsIDE4IGUgMTkKK3PjbyBvcyBhcnF1aXZvcyBkZSBib290LiBTZXVzIG5vbWVzIHBvZGVtIHNlciBtYW5pcHVsYWRvcyBjb20gbyBjb21hbmRvIG5hbWUKK2RvIFBhcnRlZC4gQSBwYXJ0aefjbyAxIGUgMiBz428gcGFydGnn9WVzIG5vcm1haXMuIEVsYXMgbuNvIHBvZGVtIHRlciBub21lcy4KKworTm90ZSBxdWUgbyBMaW51eCBu428gduogb3MgYXJxdWl2b3MgZGUgYm9vdCBjb21vIHBhcnRp5/VlcyAodGFsdmV6IGRldmVzc2U/KS4KK0VudONvIG8gL2Rldi9oZGExNyBu428gZXhpc3RlIG5vIExpbnV4LiBWb2PqIGRldmUgdXNhciBvIGR2aHRvb2woOCkgcGFyYQorbWFuaXB1bGFyIGFycXVpdm9zIGRlIGJvb3QuCisKK0Bub2RlICAgIENhcnJlZ2Fkb3JlcyBkZSBCb290CitAY2hhcHRlciBDYXJyZWdhZG9yZXMgZGUgQm9vdAorQGNpbmRleCBjYXJyZWdhZG9yZXMgZGUgYm9vdAorCitPIGNhcnJlZ2Fkb3IgZGUgYm9vdCDpIG8gcHJvZ3JhbWEgcXVlIHBlcm1pdGUgcXVlIHZvY+ogc2VsZWNpb25lIHF1YWwKK3Npc3RlbWEgb3BlcmFjaW9uYWwgdm9j6iBxdWVyIHVzYXIsIGUgY2FycmVnYSBhcXVlbGUgc2lzdGVtYSBvcGVyYWNpb25hbC4KK1ZvY+ogcG9kZSB0ZXIgbWFpcyBkZSB1bSBjYXJyZWdhZG9yIGRlIGJvb3QgaW5zdGFsYWRvLCBlc3BlY2lhbG1lbnRlIHNlCit2b2PqIHRlbSBtYWlzIGRlIHVtIHRpcG8gZGUgc2lzdGVtYSBvcGVyYWNpb25hbCBpbnN0YWxhZG8uIMkgY29tdW0gcGFyYQorY2FycmVnYWRvcmVzIGRlIGJvb3QgcG9kZXJlbSBjYXJyZWdhciBvdXRyb3MgY2FycmVnYWRvcmVzIGRlIGJvb3QuCisKK1F1YW5kbyBzZSByZWRpbWVuc2lvbmEgdW1hIHBhcnRp5+NvLCBtdWl0b3MgZGFkb3Mgc2UgbW92ZW0uIE11aXRvcworY2FycmVnYWRvcmVzIGRlIGJvb3QgbuNvIGVudGVuZGVtIG8gc2lzdGVtYXMgZGUgYXJxdWl2by4gRWxlcyBz8yBsZW1icmFtCithb25kZSBxdWUgYXMgaW5mb3JtYef1ZXMgbmVjZXNz4XJpYXMgcGFyYSBvIGNhcnJlZ2Fkb3IgZGUgYm9vdCByZXNpZGUuCitTZSBlc3RhIGluZm9ybWHn428g6SBtb3ZpZGEsIGRldmUtc2UgZGl6ZXIgYW8gY2FycmVnYWRvciBkZSBib290IHByYQorb25kZSBlbGFzIHNlIG1vdmVyYW0uIElzdG8g6SBmZWl0byByZWluc3RhbGFuZG8gbyBjYXJyZWdhZG9yIGRlIGJvb3QKKyhwb3IgZXhlbXBsbywgcm9kYW5kbyBub3ZhbWVudGUgbyBwcm9ncmFtYSBpbnN0YWxhZG9yIGRvIGNhcnJlZ2Fkb3IgZGUKK2Jvb3QsIHF1ZSBub3JtYWxtZW50ZSBlbnZvbHZlIGRpZ2l0YXIgdW0g+m5pY28gY29tYW5kbyBuYSBzaGVsbCkuIE5lbQordG9kb3Mgb3MgY2FycmVnYWRvcmVzIGRlIGJvb3QgZXhpZ2VtIGlzc28uCisKK0BtZW51CisqIExJTE86OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPIExJbnV4IExPYWRlcgorKiBHTlUgR1JVQjo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR05VIEdSYW5kIFVuaWZpZWQgQm9vdC1sb2FkZXIKKyogTVMgRE9TIE1TIFdpbmRvd3MgOXggTVMgV2luZG93cyBNRTo6ICAgICAgICAgIFNvZnR3YXJlIExlZ2FkbyBkYSBNUworKiBNUyBXaW5kb3dzIE5UOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FycmVnYWRvciBkbyBNUyBXaW5kb3dzIE5UCisqIE1TIFdpbmRvd3MgMjAwMDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYXJyZWdhZG9yIGRvIE1TIFdpbmRvd3MgMjAwMAorKiBRdWlrOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUXVpaworKiBZYWJvb3Q6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWWFib290CisKK0BlbmQgbWVudQorCitAbm9kZSBMSUxPCitAc2VjdGlvbiBMSUxPOiB1bSBjYXJyZWdhZG9yIGRlIGJvb3QgcGFyYSBvIGtlcm5lbCBkbyBMaW51eAorQGNpbmRleCBsaWxvCisKK0xJTE8g6SB1bSBjYXJyZWdhZG9yIGRlIGJvb3QgcG9wdWxhciBwYXJhIG9zIHg4Ni4gTyBjYXJyZWdhZG9yIGRlCitib290IGRvIExJTE8g6SBnZXJhbG1lbnRlIGluc3RhbGFkbyBjb206CisKK0BleGFtcGxlCisjIEBrYmR7L3NiaW4vbGlsb30KK0BlbmQgZXhhbXBsZQorCitTZSB2b2PqIGVzdOEgdXNhbmRvIHVtIGRpc2NvIGRlIGJvb3QsIGVudONvIHZvY+ogZGV2ZSBmYXplciBpc3NvOgorKGFvbmRlIEBmaWxley9kZXYvaGRhMX0gZGV2ZSBzZXIgc3Vic3RpdHXtZG8gY29tIGEgcGFydGnn428gcmFpeikKKworQGV4YW1wbGUKKyMgQGtiZHttb3VudCAvZGV2L2hkYTEgL21udH0KKyMgQGtiZHtjaHJvb3QgL21udCAvc2Jpbi9saWxvfQorIyBAa2Jke3Vtb3VudCAvZGV2L2hkYTF9CitAZW5kIGV4YW1wbGUKKworVmVyc/VlcyBhbnRpZ2FzIGRvIExJTE8gbuNvIHN1cG9ydGFtIG8gbW9kbyBMQkEgKEBweHJlZntCSU9TcyBkZSBQQ30pLgorTyBtb2RvIExCQSDpIGhhYmlsaXRhZG8gY29tIGFzIG9w5/VlcyBsYmEzMiBvdSBsaW5lYXIsIG5vIEBmaWxley9ldGMvbGlsby5jb25mfQorKHZlamEgYSBkb2N1bWVudGHn428gZG8gTElMTyBwYXJhIG1haW9yZXMgaW5mb3JtYef1ZXMpLgorCitTZSB2b2PqIHVzYSBvIG1vZG8gTEJBLCB2b2PqIG7jbyBkZXZlIHRlciBwcm9ibGVtYXMsIGNvbnRhbnRvIHF1ZSBhCitzdWEgQklPUyBzdXBvcnRlIExCQS4KKworU2Ugdm9j6iB1c2EgbyBtb2RvIENIUywgZW50428gYSBwYXJ0aefjbyBjb20gbyBkaXJldPNyaW8gQGZpbGV7L2Jvb3R9CitkZXZlIGFjYWJhciBhbnRlcyBkbyBjaWxpbmRybyAxMDI0LiBFbnTjbywgc2Ugdm9j6iB0ZW0gdW0gZGlzY28gZ3JhbmRlCisodmFtb3MgZGl6ZXIsIGNvbSBtYWlzIGRlIDggZ2lnYWJ5dGVzKSwgdm9j6iBkZXZlIHRlciB1bSBwYXJ0aefjbyBwYXJhCitvIEBmaWxley9ib290fSBwcvN4aW1vIGFvIGNvbWXnbyBkbyBkaXNjby4KKworQG5vZGUgR05VIEdSVUIKK0BzZWN0aW9uIEdSVUI6IE8gR05VIEdSYW5kIFVuaWZpZWQgQm9vdGxvYWRlcgorQGNpbmRleCBncnViCisKK0dSVUIg6SB1bSBjYXJyZWdhZG9yIGRlIGJvb3QgcmVsYXRpdmFtZW50ZSBub3ZvLCBwYXJhIHg4Ni4gRGVwZW5kZW5kbworZGUgY29tbyBvIEdSVUIg6SBpbnN0YWxhZG8sIGVsZSBwb2RlIGVudGVuZGVyIG8gc2lzdGVtYXMgZGUgYXJxdWl2bywKK291IHNpbXBsZXNtZW50ZSBsZW1icmFyIGFvbmRlIG9zIGFycXVpdm9zIGRlIGJvb3QgZXN0428gZ3VhcmRhZG9zLiBFbGUKK2VudGVuZGUgbyBzaXN0ZW1hcyBkZSBhcnF1aXZvIHNlIGVsZSBlc3ThIHVzYW5kbyBgYFN0YWdlMS41JycuIFNlIGVsZQorbuNvIGVzdOEgdXNhbmRvIFN0YWdlMS41LCBvdSBvIG76bWVybyBkYSBwYXJ0aefjbyBtdWRhLCBlbnTjbyB2b2PqIHByZWNpc2EKK3JlaW5zdGFsYXIgbyBTdGFnZTIgKHBvciBmYXZvciB2ZWphIGEgZG9jdW1lbnRh5+NvIGRvIEdSVUIpLiBEbyBtb2RvCitjb250cuFyaW8sIHZvY+ogbuNvIHByZWNpc2EgZmF6ZXIgbmFkYS4KKworTyBHUlVCIGF1dG9tYXRpY2FtZW50ZSBkZXRlY3RhIHNlIExCQSBlc3ThIGRpc3Bvbu12ZWwsIGUgdmFpICB1c+EtbG8KK3NlIGVsZSBlc3ThIGRpc3Bvbu12ZWwgKGVxdWl2YWxlbnRlIOAgb3Dn428gYGBsYmEzMicnIGRvIExJTE8pLgorCitAbm9kZSBNUyBET1MgTVMgV2luZG93cyA5eCBNUyBXaW5kb3dzIE1FCitAc2VjdGlvbiBDYXJyZWdhZG9yZXMgZGUgQm9vdCBMZWdhZG9zIGRvcyBTaXN0ZW1hcyBPcGVyYWNpb25haXMgTWljcm9zb2Z0CitAY2luZGV4IGNhcnJlZ2Fkb3IgZGUgYm9vdCBkbyB3aW4zMgorQGNpbmRleCBjYXJyZWdhZG9yIGRlIGJvb3QgbGVnYWRvIGRvcyBzaXN0ZW1hcyBvcGVyYWNpbmFpcyBtaWNyb3NvZnQKKworTyBET1MgZSBXaW5kb3dzIHJlcXVlcmVtIHF1ZSB2b2PqIHJlaW5zdGFsZSBvIGNhcnJlZ2Fkb3IgZGUgYm9vdCBzZSB2b2PqCittdWRhciBvIHRpcG8gZGUgRkFUIChGQVQxNiBvdSBGQVQzMikgZGEgcGFydGnn428gZGUgYm9vdC4gTyBQYXJ0ZWQgdmFpCithdmlzYXIgdm9j6iBhbnRlcyBkZSBmYXplciBpc3NvLiBQYXJhIHJlaW5zdGFsYXIgbyBjYXJyZWdhZG9yIGRlIGJvb3QsCit2b2PqIHBvZGUgdGFudG8gY3JpYXIgdW0gZGlzY28gZGUgYm9vdCwgb3UgdXNhciBvIENEUk9NIGRlIGJvb3QuIE8KK23pdG9kbyBkbyBkaXNjbyBkZSBib290IG7jbyBmdW5jaW9uYSBjb20gbyBXaW5kb3dzIE1FLgorCitAaXRlbWl6ZSBAbWludXMKK0BpdGVtIE3JVE9ETyBETyBESVNDTyBERSBCT09UICAoRE9TL1dpbmRvd3MgOXgpCisKK0BlbnVtZXJhdGUKKworQGl0ZW0gQ3JpYXIgdW0gZGlzY28gZGUgYm9vdCBkbyBXaW5kb3dzCisKK0BpdGVtaXplIEBidWxsZXQKKworQGl0ZW0gQ2FycmVndWUgbyBXaW5kb3dzLiBAZW1waHtJc3RvIGltcGxpY2EgcXVlIHZvY+ogZGV2ZQorZmF6ZXIgdW0gZGlzY28gZGUgYm9vdCBhbnRlcyBkZSB1c2FyIG8gcGFydGVkfS4KKworQGl0ZW0gQ2xpcXVlIGNvbSBvIGRpcmVpdG8gbm8gZHJpdmUgZGUgZGlzcXVldGUgbm8gV2luZG93cyBFeHBsb3Jlci4KKworQGl0ZW0gQ2xpcXVlIGVtIGBgRm9ybWF0YXInJy4KKworQGl0ZW0gU2VsZWNpb25lIGBgQ29waWFyIHNvbWVudGUgb3MgYXJxdWl2b3MgZGUgc2lzdGVtYScnLgorCitAaXRlbSBDbGlxdWUgZW0gYGBGb3JtYXRhcicnLgorCitAaXRlbSBDb3BpZSBvIEM6XFdJTkRPV1NcQ09NTUFORFxTWVMuQ09NIHBhcmEgbyBBOlwgTm90YTogdm9j6iBkZXZlCit0ZXIgY2hhbWFkbyBvIEM6XFdJTkRPV1MgZGUgYWxnbyBtYWlzLCBjb21vIEM6XFdJTjk4LgorCitAZW5kIGl0ZW1pemUKKworQGl0ZW0gQ2FycmVndWUgbyBkaXNjbyBkZSBib290IGRvIFdpbmRvd3MsIGRlaXhhbmRvIG8gZGlzY28gZGUgYm9vdCBubworZHJpdmUgZGUgZGlzcXVldGUgcXVhbmRvIGNhcnJlZ2FyLiBWb2PqIHBvZGUgcHJlY2lzYXIgZGl6ZXIg4CBzdWEgQklPUworcGFyYSB1c2FyIG8gZGlzcXVldGUgY29tbyBib290LgorCitAaXRlbSBEaWdpdGUgbyBzZWd1aW50ZSBubyBwcm9tcHQgZG8gRE9TOgorCitAZXhhbXBsZQorQTpcPkBrYmR7c3lzIGM6fQorQGVuZCBleGFtcGxlCisKK0BlbmQgZW51bWVyYXRlCisKK0BpdGVtIE3JVE9ETyBETyBDRFJPTTogIChXaW5kb3dzIDl4L01FKQorCitAZW51bWVyYXRlCisKK0BpdGVtIEluc2lyYSBvIENEUk9NIGRvIFdpbmRvd3MsIGUgZmHnYSBib290IGRlbGUuIChTZWxlY2lvbmUgYGBib290IHNlbQorc3Vwb3J0ZSBhIENEUk9NJycpLgorCitAaXRlbSBEaWdpdGU6CisKK0BleGFtcGxlCitBOlw+QGtiZHtjOn0KK0M6XD5Aa2Jke2NkIFx3aW5kb3dzXGNvbW1hbmR9ICAgIChwb2RlIHNlciBcd2luOThcY29tbWFuZCwgb3Ugc2ltaWxhcikKK0M6XFdJTkRPV1NcQ09NTUFORD5Aa2Jke3N5cyBjOn0KK0BlbmQgZXhhbXBsZQorCitJc3RvIOkgdHVkby4KKworQGVuZCBlbnVtZXJhdGUKK0BlbmQgaXRlbWl6ZQorCitBbOltIGRpc3NvLCBvIERPUyBlIFdpbmRvd3MgaW1w9WUgYWxndW1hcyByZXN0cmnn9WVzOgorCitAaXRlbWl6ZSBAYnVsbGV0CisKK0BpdGVtIEEgcGFydGnn428gZGUgYm9vdCBkZXZlIHNlciBzZWxlY2lvbmFkYSBjb20gbyBpbmRpY2Fkb3IgYGBib290JycuCitTb21lbnRlIHVtYSBwYXJ0aefjbyBwb2RlbSBzZXIgc2VsZWNpb25hZGFzIChhbGd1bWFzIHZlemVzIGNoYW1hZGFzIGRlCitwYXJ0aef1ZXMgYGBhdGl2YXMnJykuIFBvciBleGVtcGxvLCBwYXJhIGRlZmluaXIgYSBwYXJ0aefjbyAzIGNvbW8gYQorcGFydGnn428gZGUgYm9vdCBmYedhOgorCitAZXhhbXBsZQorKHBhcnRlZCkgQGtiZHtzZXQgMyBib290IG9ufQorQGVuZCBleGFtcGxlCisKK0BpdGVtIE8gTVMgRE9TIGUgbyBNUyBXaW5kb3dzIDl4L01FIHPzIHBvZGVtIGZhemVyIGJvb3QgZGEgcHJpbWVpcmEKK3BhcnRp5+NvIEZBVC4gSXN0byDpLCBhIHBhcnRp5+NvIEZBVCBjb20gbyBtZW5vciBu+m1lcm8gZGUgcGFydGnn428sCitxdWUgbuNvIGVzdOEgb2N1bHRhLiBOb3RlIHF1ZSBvcyBjYXJyZWdhZG9yZXMgZGUgYm9vdCBjb21vIG8gR1JVQiBlIG8KK0xJTE8gKGUgYWxndW1hcyBCSU9TcykgcG9kZW0gbXVkYXIgZXNzZSBjb21wb3J0YW1lbnRvQGRvdHN7fQorCitAaXRlbSBTZSB2b2PqIGVzdOEgdXNhbmRvIGVuZGVyZedhbWVudG8gQ0hTIChhbyBpbnbpcyBkZSBlbmRlcmXnYW1lbnRvCitMQkEpLCBlbnTjbyBvIGlu7WNpbyBkYSBwYXJ0aefjbyBkZSBib290IGRldmUgc2VyIGFudGVzIGRvIGNpbGluZHJvIDEwMjQuCitWb2PqIHBvZGUgZGl6ZXIgYW8gTVMgRE9TIHBhcmEgdXNhciAob3UgbuNvIHVzYXIpIG8gZW5kZXJl52FtZW50byBMQkEsCitoYWJpbGl0YW5kbyBvdSBkZXNhYmlsaXRhbmRvIG8gaW5kaWNhZG9yIExCQSBuYSBwYXJ0aefjbyBkZSBib290LiBQb3IKK2V4ZW1wbG8sIGhhYmlsaXRhciBvIGluZGljYWRvciBMQkEgbmEgcGFydGnn428gMiwgZmHnYToKKworQGV4YW1wbGUKKyhwYXJ0ZWQpIEBrYmR7c2V0IDIgbGJhIG9ufQorQGVuZCBleGFtcGxlCisKK05vdGE6IG8gZW5kZXJl52FtZW50byBMQkEgbuNvIOkgc3Vwb3J0YWRvIHBlbG8gTVMtRE9TIDYuMjIgb3UgaW5mZXJpb3IsCitiZW0gY29tbyB0b2RhcyBhcyB2ZXJz9WVzIGRvIFBDLURPUy4KKworQXZpc286IGFsZ3VtYXMgQklPU3MgbuNvIHbjbyBoYWJpbGl0YXIgbyBlbmRlcmXnYW1lbnRvIExCQSwgYW8gbWVub3MKK3F1ZSB2b2PqIGhhYmlsaXRlIG5hIEJJT1MgdGFtYultLiBTZSwgcG9yIGFsZ3VtYSByYXrjbywgbyBXaW5kb3dzIG7jbworaW5pY2lhbGl6YXIgYXDzcyBtdWRhciBlc3NlIGluZGljYWRvciwgZW50428gZXN0ZSDpIHByb3ZhdmVsbWVudGUgbworcHJvYmxlbWEuCisKK0BpdGVtIG8gTVMtRE9TIGBgcmVhbCcnIChwb3IgZXhlbXBsbywgdmVyc+NvIDYuMiBwcmEgY2ltYSkgZSBvIE1TLURPUworNy4wIChwb3IgZXhlbXBsbywgbyBXaW5kb3dzIDk1Lzk4YSkgbuNvIGNvbmhlY2VtIEZBVDMyLiBFbnTjbyDpIHBvc3PtdmVsCitpbmljaWFsaXphciBlbGVzIGRhIEBlbXBoe3NlZ3VuZGEgcGFydGnn428gZmF0fSAoc29tZW50ZSBGQVQxNiwgY2xhcm8pLAorcXVhbmRvIEBlbXBoe2EgcHJpbWVpcmEgcGFydGnn428gZmF0fSDpIEZBVDMyLiBBbWJhcyB0ZW0gcXVlIHNlciBwYXJ0aef1ZXMKK3ByaW3hcmlhcywgZW50428gdm9j6iBwcm92YXZlbG1lbnRlIHZhaSB0ZXIgcXVlIGRlZmluaXIgcXVhbCB2b2PqIHF1ZXIKK2luaWNpYWxpemFyIGNvbW8gcGFydGnn428gYXRpdmEuCisKK0BlbmQgaXRlbWl6ZQorCitAbm9kZSBNUyBXaW5kb3dzIE5UCitAc2VjdGlvbiBPIENhcnJlZ2Fkb3IgZGUgQm9vdCBkbyBNaWNyb3NvZnQgV2luZG93cyBOVAorQGNpbmRleCBjYXJyZWdhZG9yIGRlIGJvb3QgZG8gbWljcm9zb2Z0IHdpbmRvd3MgbnQKKworTyBXaW5kb3dzIE5UIG7jbyBwb2RlIGxlciBvdSBpbmljaWFsaXphciBkZSBwYXJ0aef1ZXMgRkFUMzIuIFBvcnRhbnRvLAordm9j6iBu428gZGV2ZSBudW5jYSBjb252ZXJ0ZXIgcGFydGnn9WVzIEZBVDE2IHBhcmEgRkFUMzIsIHNlIHZvY+ogcXVlcgordXPhLWxhcyBjb20gbyBXaW5kb3dzIE5ULgorCitAbm9kZSBNUyBXaW5kb3dzIDIwMDAKK0BzZWN0aW9uIE8gQ2FycmVnYWRvciBkZSBCb290IGRvIE1pY3Jvc29mdCBXaW5kb3dzIDIwMDAKK0BjaW5kZXggY2FycmVnYWRvciBkZSBib290IGRvIG1pY3Jvc29mdCB3aW5kb3dzIDIwMDAKKworTyBXaW5kb3dzIDIwMDAgcmVxdWVyIHF1ZSB2b2PqIHJlaW5zdGFsZSBvIGNhcnJlZ2Fkb3IgZGUgYm9vdCBzZSB2b2PqCittdWRhciBvIHRpcG8gZGUgRkFUIChGQVQxNiBvdSBGQVQzMikgZG8gc2lzdGVtYXMgZGUgcGFydGnn9WVzLiBPIFBhcnRlZAordmFpIGF2aXNhciB2b2PqIGFudGVzIGRlIHRlbnRhciBmYXplciBpc3NvLiBQYXJhIHJlaW5zdGFsYXIgbyBjYXJyZWdhZG9yCitkZSBib290LCBmYedhOgorCitAZW51bWVyYXRlCitAaXRlbSBGYedhIGJvb3QgZG8gQ0QgZG8gV2luZG93cyAyMDAwLgorQGl0ZW0gRWxlIHZhaSBwZXJndW50YXIgc2Ugdm9j6iBxdWVyIGNvbnRpbnVhci4gQXBlcnRlIEVudGVyLgorQGl0ZW0gRWxlIGVudONvIHZhaSBwZXJndW50YXIgc2Ugdm9j6iBxdWVyIGluc3RhbGFyIHVtIG5vdm8gc2lzdGVtYSwgb3UKK0NvbnNlcnRhciB1bSBzaXN0ZW1hIHBy6S1leGlzdGVudGUuIEVzY29saGEgYSD6bHRpbWEgKGFwZXJ0YW5kbyBgYFInJykuCitFbGUgdmFpIHBlcmd1bnRhciBzZSB2b2PqIHF1ZXIgcmVwYXJhciBhdXRvbWF0aWNhbWVudGUsIG91IHNlIHZvY+ogcXVlcgordXNhciBvIGNvbnNvbGUgZGUgcmVjdXBlcmHn428uIEVzY29saGEgdXNhciBvIGNvbnNvbGUgZGUgcmVjdXBlcmHn428uCitAaXRlbSBObyBjb25zb2xlLCBkaWdpdGU6CisKK0BleGFtcGxlCitDOlw+QGtiZHtmaXhib290fQorQGVuZCBleGFtcGxlCisKK08gc2lzdGVtYSBkZXZlIGluaWNpYWxpemFyIGNvbSBzdWNlc3NvIGFnb3JhLgorQGVuZCBlbnVtZXJhdGUKKworTyBjYXJyZWdhZG9yIGRlIGJvb3QgZG8gTlQvMjAwMCB0YW1i6W0gcHJlY2lzYToKKworQGl0ZW1pemUgQGJ1bGxldAorCitAaXRlbSBzZXUgcHLzcHJpbyBj82RpZ28gbm8gc2V0b3IgZGUgYm9vdCBkZSB1bWEgcGFydGnn428gUFJJTcFSSUEKK0ZBVDEyLCBGQVQxNiBvdSBOVEZTIChGQVQzMiDpIHBvc3PtdmVsIGNvbSBvIFdpbmRvd3MgMjAwMCksIHF1ZSDpCitjaGFtYWRhIGRlIGBgcGFydGnn428gZGUgc2lzdGVtYScnLiBFc3RhIHBhcnRp5+NvIGRldmUgc2VyIG1hcmNhZGEKK2NvbSBvIGluZGljYWRvciBkZSBgYGJvb3QnJyBubyBQYXJ0ZWQuCisKK0BpdGVtIG9zIGFycXVpdm9zIE5UTERSLCBCT09ULklOSSBlIE5UREVURUNULkNPTSBkZW50cm8gZG8gc2lzdGVtYQorZGEgcGFydGnn428uIE8gQk9PVC5JTkkgZ3VhcmRhIHRvZGEgYSBpbmZvcm1h5+NvIHNvYnJlIGEgbG9jYWxpemHn428KK2btc2ljYSBkYSBwcmltZWlyYSBwYXJ0aefjbyBvdSBkZSB1bSBkcml2ZSBs82dpY28gYW9uZGUgbyBXaW5kb3dzIE5UCitmb2kgaW5zdGFsYWRvLCBjaGFtYWRvIGRlIGBgcGFydGnn428gZGUgYm9vdCcnLiBBIHBhcnRp5+NvIGRlIGJvb3QgZQorYSBwYXJ0aefjbyBkZSBzaXN0ZW1hIHBvZGVtIGVzdGFyIGxvY2FsaXphZGFzIGp1bnRhcyBudW1hIHBhcnRp5+NvCitwcmlt4XJpYS4KKworQGMgUk1LOiB1c2FnZTogYW1iaWd1b3VzIHVzZSBvZiAndGhpcyc6IGl0IHJlZmVycyB0byBkaXNrIGNvbnRyb2xsZXI/CitAaXRlbSBvcGNpb25hbG1lbnRlLCBvIGFycXVpdm8gTlRCT09UREQuU1lTIGRlbnRybyBkbyBzaXN0ZW1hcyBkZQorcGFydGnn9WVzIHF1ZSDpIHJlbm9tZWFkbyBkcml2ZXIgZGUgZGlzY28gcGFyYSBvIHNldSBjb250cm9sYWRvciBTQ1NJCitvdSBJREUsIHF1YW5kbyBlbGUgbuNvIHRlbSBCSU9TIHBy83ByaWEgKG91IHN1YSBCSU9TIG7jbyBhY2Vzc2EgZGlzY29zCitncmFuZGVzKS4KKworQGl0ZW0gY29tIG8gTVMgV2luZG93cyBOVCwgbyBzaXN0ZW1hcyBkZSBwYXJ0aef1ZXMgZGV2ZSB0ZXJtaW5hciBhbnRlcworZG8gY2lsaW5kcm8gMTAyNCBlIEBlbXBoe2RldmV9IGNvbWXnYXIgYW50ZXMgZG8gY2lsaW5kcm8gMTAyNC4gU2UgZWxlCit0ZXJtaW5hIGFudGVzIGRvIGNpbGluZHJvIDEwMjQgZSBvcyBhcnF1aXZvcyBuZWNlc3PhcmlvcyBwYXJhIGEKK2luaWNpYWxpemHn428gc+NvIG1vdmlkb3MgZGVwb2lzIGRlc3NhIGJvcmRhLCBvIE1TIFdpbmRvd3MgTlQgbuNvIHZhaSBtYWlzCitpbmljaWFsaXphci4KK0BpdGVtIGFtYm9zIGEgcGFydGnn428gZGUgYm9vdCBlIGRlIHNpc3RlbWFzIGRldmUgc2VyIHJlZGltZW5zaW9uYWRhLCBzZW0KK2EgbmVjZXNzaWRhZGUgZGUgcXVhbHF1ZXIgb3V0cmEgbXVkYW7nYS4KKworQGl0ZW0gc2UgbyBu+m1lcm8gZGEgcGFydGnn428gZGUgYm9vdCBtdWRhIChwb3IgZXhlbXBsbywgc2V1IG76bWVybworZGUgcGFydGnn428pLCBlbnTjbyBvIEJPT1QuSU5JIGRldmUgc2VyIGF0dWFsaXphZG8uCisKK0BlbmQgaXRlbWl6ZQorCitAbm9kZSBRdWlrCitAc2VjdGlvbiBRdWlrOiB1bSBjYXJyZWdhZG9yIGRlIGJvb3QgcGFyYSBQb3dlclBDcyBNYWNpbnRvc2gKK0BjaW5kZXggY2FycmVnYWRvciBkZSBib290IHBhcmEgbWFjaW50b3NocyBkbyB2ZWxobyBtdW5kbworQGNpbmRleCB2ZWxobyBtdW5kbywgY2FycmVnYWRvciBkZSBib290IGRvIG1hY2ludG9zaCBkbworCitPIFF1aWsg6SB1bSBjYXJyZWdhZG9yIGRlIGJvb3QgcG9wdWxhciBwYXJhIFBvd2VyUENzIE1hY2ludG9zaCBkbworYGBWZWxobyBNdW5kbycnLiBWb2PqIHByZWNpc2EgcmVpbnN0YWxhciBvIFF1aWsgc2Ugdm9j6iByZWRpbWVuc2lvbmFyCit1bWEgcGFydGnn428gZXh0MiwgdXNhbmRvOgorCitAZXhhbXBsZQorIyBAa2Jkey9zYmluL3F1aWt9CitAZW5kIGV4YW1wbGUKKworQG5vZGUgWWFib290CitAc2VjdGlvbiBZYWJvb3Q6IHVtIGNhcnJlZ2Fkb3IgZGUgYm9vdCBwYXJhIFBvd2VyUENzIE1hY2ludG9zaAorQGNpbmRleCBjYXJyZWdhZG9yIGRlIGJvb3QgcGFyYSBtYWNpbnRvc2hzIGRvIHZlbGhvIG11bmRvCitAY2luZGV4IHZlbGhvIG11bmRvLCBjYXJyZWdhZG9yZXMgZGUgYm9vdCBwYXJhIG1hY2ludG9zaHMgZG8KK08gWWFib290IOkgdW0gY2FycmVnYWRvciBkZSBib290IHBvcHVsYXIgcGFyYSBQb3dlciBQQ3MgTWFjaW50b3NoCitkbyBgYHZlbGhvIG11bmRvJycuIChgYE5vdm8tbXVuZG8nJyBzZSByZWZlcmUgYW9zIFBvd2VyUENzIGNvbG9yaWRvcworZmFicmljYWRvcyBkZXNkZSAxOTk5LikKKworTyBZYWJvb3QgcHJlY2lzYSBkZSBzdWEgcGFydGnn428gZGUgYm9vdCBxdWUgZGV2ZSBzZXIgcGVsbyBtZW5vcyA4MDBrLgorRW50428sIHNlIHZvY+ogZXN04SBpbnN0YWxhbmRvIG8gR05VL0xpbnV4IGRvIHplcm8sIHZvY+ogZmFyaWEgYWxnbworY29tbyBpc3NvOgorCitAZXhhbXBsZQorKHBhcnRlZCkgQGtiZHtta2xhYmVsIG1hY30KK0Bncm91cAorKHBhcnRlZCkgQGtiZHtwcmludH0KK0Rpc2sgZ2VvbWV0cnkgZm9yIC9kZXYvc2RhOiAwLjAwMC02MTQ5Ljg4MiBtZWdhYnl0ZXMKK0Rpc2sgbGFiZWwgdHlwZTogbWFjCitNaW5vciAgICBTdGFydCAgICAgICBFbmQgICAgIEZpbGVzeXN0ZW0gIE5hbWUgICAgICAgICAgRmxhZ3MKKzEgICAgICAgICAgMC4wMDAgICAgICAwLjAzMSAgICAgICAgICAgICAgQXBwbGUKK0BlbmQgZ3JvdXAKKyhwYXJ0ZWQpIEBrYmR7bWtwYXJ0IHByaW1hcnkgaGZzIDAuMDMyIDF9CitAZ3JvdXAKKyhwYXJ0ZWQpIEBrYmR7cHJpbnR9CitEaXNrIGdlb21ldHJ5IGZvciAvZGV2L2hkYjogMC4wMDAtNjE0OS44ODIgbWVnYWJ5dGVzCitEaXNrIGxhYmVsIHR5cGU6IG1hYworTWlub3IgICAgU3RhcnQgICAgICAgRW5kICAgICBGaWxlc3lzdGVtICBOYW1lICAgICAgICAgIEZsYWdzCisxICAgICAgICAgIDAuMDAwICAgICAgMC4wMzEgICAgICAgICAgICAgIEFwcGxlCisyICAgICAgICAgIDAuMDMxICAgICAgMS4wMDAKK0BlbmQgZ3JvdXAKKyhwYXJ0ZWQpIEBrYmR7c2V0IDIgYm9vdCBvbn0KK0Bncm91cAorKHBhcnRlZCkgQGtiZHtwcmludH0KK0Rpc2sgZ2VvbWV0cnkgZm9yIC9kZXYvaGRiOiAwLjAwMC02MTQ5Ljg4MiBtZWdhYnl0ZXMKK0Rpc2sgbGFiZWwgdHlwZTogbWFjCitNaW5vciAgICBTdGFydCAgICAgICBFbmQgICAgIEZpbGVzeXN0ZW0gIE5hbWUgICAgICAgICAgRmxhZ3MKKzEgICAgICAgICAgMC4wMDAgICAgICAwLjAzMSAgICAgICAgICAgICAgQXBwbGUKKzIgICAgICAgICAgMC4wMzEgICAgICAxLjAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICBib290CitAZW5kIGdyb3VwCitAZW5kIGV4YW1wbGUKKworVm9j6iBu428gcHJlY2lzYSByZWluc3RhbGFyIG8gWWFib290IGRlcG9pcyBkZSByZWRpbWVuc2lvbmFyIHVtYSBwYXJ0aefjby4KK08gWWFib290IOkgaW5zdGFsYWRvIGNvbSBvIHliaW4gQHJlZntTb2Z0d2FyZSBSZWxhY2lvbmFkb30uCisKK0Bub2RlIFNpc3RlbWFzIE9wZXJhY2lvbmFpcworQGNoYXB0ZXIgU2lzdGVtYXMgT3BlcmFjaW9uYWlzCitAY2luZGV4IHNpc3RlbWFzIG9wZXJhY2lvbmFpcworCitPIFBhcnRlZCBzb21lbnRlIHJvZGEgc29iIG8gR05VL0xpbnV4IGUgbyBHTlUvSHVyZCwgbm8gbW9tZW50by4gQ29udHVkbywKK2VsZSBwb2RlIHNlciB1c2FkbyBwYXJhIHJlZGltZW5zaW9uYXIgcGFydGnn9WVzIHVzYWRhcyBwb3IsIG91Citjb21wYXJ0aWxoYWRhcyBjb20gb3V0cm9zIHNpc3RlbWFzIG9wZXJhY2lvbmFpcy4KKworUXVhbmRvIHZvY+ogcXVlciByZWRpbWVuc2lvbmFyIHVtIHNpc3RlbWFzIGRlIGFycXVpdm8sIGNlcnRpZmlxdWUtc2UKK2RlIHF1ZSBu428gZXN04SBtb250YWRvLiBPIFBhcnRlZCBu428gcG9kZSByZWRpbWVuc2lvbmFyIHBhcnRp5/VlcworbW9udGFkYXMgKGlzdG8gcG9kZSBtdWRhciBubyBmdXR1cm9AZG90c3t9KS4KK1NlIHZvY+ogbW9kaWZpY2FyIGEgdGFiZWxhIGRlIHBhcnRp5/VlcyBudW0gZGlzY28gY29tIHVtIHBhcnRp5+NvIG1vbnRhZGEKK25lbGEsIHZvY+ogZGV2ZSByZWluaWNpYXIgaW1lZGlhdGFtZW50ZS4gTyBMaW51eCBu428gdmFpIHNhYmVyIHNvYnJlIGFzCittdWRhbudhcyBxdWUgdm9j6iBmZXogbmEgdGFiZWxhIGRlIHBhcnRp5/Vlcy4gKElzdG8gdmFpIHNlciBjb3JyaWdpZG8sCitjb20gbyBrZXJuZWwgMi40LCBlIHF1YW5kbyBu83MgYWRpY2lvbmFybW9zIHN1cG9ydGUgYSBlbGUuKQorCitTZSB2b2PqIHF1ZXIgcmVkaW1lbnNpb25hciBzdWEgcGFydGnn428gcm9vdCBvdSBkZSBib290LCB1c2UgdW0gZGlzY28KK2RlIGJvb3QgQHhyZWZ7RGlzY29zIGRlIGJvb3QgZG8gUGFydGVkfSwgb3UgdXNlIG8gcmVkaW1lbnNpb25hZG9yCitvbmxpbmUgZG8gQW5kcmVhcyBEaWxnZXIsIGluY2x17WRvIG5vIHBhY290ZSBleHQycmVzaXplIEByZWZ7RXh0Mn0uCisKK0BtZW51CisqIEdOVS9MaW51eCBlIEZyZWVCU0Q6OiAgICAgU3Vwb3J0ZSBhIHRhYmVsYXMgZGUgcGFydGnn428gbmVzc2VzIHNpc3RlbWFzIGxpdnJlcworKiBNUyBXaW5kb3dzIGFuZCBPUy8yOjogICAgIFN1cG9ydGUgYSB0YWJlbGFzIGRlIHBhcnRp5+NvIG5lc3NlcyBzaXN0ZW1hcworKiBNYWNPUzo6ICAgICAgICAgICAgICAgICAgIEFzIHRhYmVsYXMgZGUgcGFydGnn428gc3Vwb3J0YWRhcyBwZWxvIE1hY09TCitAZW5kIG1lbnUKKworQG5vZGUgR05VL0xpbnV4IGUgRnJlZUJTRAorQHNlY3Rpb24gVGFiZWxhcyBkZSBwYXJ0aefjbyB1c2FkYXMgcGVsbyBHTlUvTGludXggZSBGcmVlQlNECitAY2luZGV4IHRhYmVsYXMgZGUgcGFydGnn428gZG8gZ251L2xpbnV4CitAY2luZGV4IHRhYmVsYXMgZGUgcGFydGnn428gZG8gZnJlZWJzZAorQGNpbmRleCBmcmVlYnNkLCB0YWJlbGFzIGRlIHBhcnRp5+NvIGRvCitAY2luZGV4IGxpbnV4LCB0YWJlbGFzIGRlIHBhcnRp5+NvIGRvCisKK0FtYm9zIG9zIHNpc3RlbWFzIEdOVS9MaW51eCBlIEZyZWVCU0Qgc+NvIG1haXMgbWFpcyBmbGV47XZlaXMgcXVhbnRvCithIHRhYmVsYXMgZGUgcGFydGnn428sIHN1cG9ydGFuZG8gbXVpdG9zIHRpcG9zIGRlIHRhYmVsYXMgZGUgcGFydGnn428uCisKK0BjIFJNSzogcGFkZGluZzogYWRkZWQgbm90ZXMgYWJvdXQgZGlza2xhYmVsIHN1cHBvcnQgZm9yIExpbnV4IGtlcm5lbAorUG9yIHNlciBtYWlzIGRpZu1jaWwgcGFyYSB1bWEgbeFxdWluYSB1c2FyIGRpc2NvcyBy7WdpZG9zIGNvbSB0YWJlbGFzCitkZSBwYXJ0aefjbyBub3JtYWxtZW50ZSB1c2FkYXMgcG9yIG91dHJhcyBhcnF1aXRldHVyYXMsIGRpc3RyaWJ1aef1ZXMKK3BhZHLjbyBkbyBrZXJuZWwgZG8gTGludXggc29tZW50ZSBzdXBvcnRhbSBhcyB0YWJlbGFzIGRlIHBhcnRp5+NvCitwb3B1bGFyZXMgcGFyYSBhIGFycXVpdGV0dXJhIHBhcmEgYXMgcXVhaXMgZm9yYW0gY29tcGlsYWRhcy4gUG9yCitleGVtcGxvLCB1bSBrZXJuZWwgZG8gTGludXggcGFkcuNvIGNvbXBpbGFkbyBwYXJhIG8gUEMgcHJvdmF2ZWxtZW50ZQorbuNvIHZhaSB0ZXIgc3Vwb3J0ZSBhIHRhYmVsYXMgZGUgcGFydGnn428gZG8gTWFjIG91IGRhIFN1bi4gUGFyYSBhY2Vzc2FyCitvcyBzaXN0ZW1hcyBkZSBhcnF1aXZvIGVtIGRpc2NvcyBjb20gdGFiZWxhcyBkZSBwYXJ0aefjbyBu428gc3Vwb3J0YWRvcywKK28ga2VybmVsIHZhaSB0ZXIgcXVlIHNlciByZWNvbXBpbGFkby4KKworTyBGcmVlQlNEIHRlbSB1bSBzaXN0ZW1hcyBkZSB0YWJlbGFzIGRlIHBhcnRp5/VlcyBxdWUg6SBpbmNvbXBhdO12ZWwKK2NvbSBhcyB0YWJlbGFzIGRlIHBhcnRp5/VlcyBkbyBNU0RPUy4gTyBQYXJ0ZWQgc29tZW50ZSBzdXBvcnRhIG8KK3Npc3RlbWFzIGRlIHRhYmVsYXMgZGUgcGFydGnn428gZG9zIEJTRHMuIMkgaW1wcm924XZlbCBxdWUgc3Vwb3J0ZQorbyBzaXN0ZW1hcyBkZSBwYXJ0aef1ZXMgZW0gZmF0aWFzLCBwb3JxdWUgYSBzZW3ibnRpY2Eg6SBtdWl0byBlc3RyYW5oYSwKK2UgbuNvIHRyYWJhbGhhIGNvbW8gdGFiZWxhcyBkZSBwYXJ0aefjbyBgYG5vcm1haXMnJy4KKworQG5vZGUgTyBNUyBXaW5kb3dzIGUgbyBPUy8yCitAc2VjdGlvbiBUYWJlbGFzIGRlIHBhcnRp5+NvIGRlIGRpc2NvIHN1cG9ydGFkYXMgcG9yIHNpc3RlbWFzIE1pY3Jvc29mdCBlIG8gT1MvMgorQGNpbmRleCB0YWJlbGFzIGRlIHBhcnRp5+NvIGxlZ2FkYXMgcGVsYSBtaWNyb3NvZnQgZSBhIGlibQorQGNpbmRleCBtaWNyb3NvZnQgZSBpYm0sIHRhYmVsYXMgZGUgcGFydGnn428gbGVnYWRhcyBwZWxhCisKK08gTVMgV2luZG93cyBlIG8gT1MvMiBzb21lbnRlIHN1cG9ydGFtIGFzIHRhYmVsYXMgZGUgcGFydGnn428gZG8gTVNET1MuCitQb3J0YW50bywgc2Ugdm9j6iBjcmlhciB1bWEgbm92YSB0YWJlbGEgZGUgcGFydGnn9WVzLCB2b2PqIGRldmUgdXNhcjoKKworQGV4YW1wbGUKKyhwYXJ0ZWQpIEBrYmR7bWtsYWJlbCBtc2Rvc30KK0BlbmQgZXhhbXBsZQorCitAbm9kZSBNYWNPUworQHNlY3Rpb24gU3Vwb3J0ZSBhIFRhYmVsYXMgZGUgUGFydGnn428gbm8gU2lzdGVtYSBPcGVyYWNpb25hbCBNYWNpbnRvc2gKK0BjaW5kZXggdGFiZWxhcyBkZSBwYXJ0aefjbyBkbyBtYWNpbnRvc2gKK0BjaW5kZXggbWFjaW50b3NoLCB0YWJlbGFzIGRlIHBhcnRp5+NvIGRvCisKK0BjIFJNSzogY29tcGxldGVuZXNzOiBkb2VzIE1hYyBPUyBYIHVuZGVyc3RhbmQgbm9uLW1hYyBkaXNrbGFiZWxzPworTyBNYWNPUyAoZSBvIE9wZW5GaXJtd2FyZSkgc29tZW50ZSBlbnRlbmRlIGFzIHRhYmVsYXMgZGUgcGFydGnn428KK2RvIG1hYy4gUG9ydGFudG8gc2Ugdm9j6iBjcmlhciB1bWEgbm92YSB0YWJlbGFzIGRlIHBhcnRp5/VlcywKK3ZvY+ogZGV2ZSB1c2FyOgorCitAZXhhbXBsZQorKHBhcnRlZCkgQGtiZHtta2xhYmVsIG1hY30KK0BlbmQgZXhhbXBsZQorCitOb3RlIHF1ZSBwYXJhIHRhYmVsYXMgZGUgcGFydGnn428gZG8gTWFjLCB2b2PqIGRldmUgZXZpdGFyIGRlaXhhcgorZXNwYedvcyBsaXZyZXMgZW0gdm9sdGEsIHBvcnF1ZSBhcyByZWdp9WVzIGRlIGVzcGHnbyBsaXZyZSBkZWl4YW0KK2VudHJhZGFzIG5hIHRhYmVsYSBkZSBwYXJ0aef1ZXMgKGUgbyBMaW51eCBu428gZ29zdGEgZGUgdGVyIG1haXMgZGUKKzE1IGVudHJhZGFzKS4gUG9yIGV4ZW1wbG8sIHNlIHZvY+ogZml6ZXI6CisKK0BleGFtcGxlCitAZ3JvdXAKKyhwYXJ0ZWQpIEBrYmR7cHJpbnR9CitEaXNrIGdlb21ldHJ5IGZvciAvZGV2L3NkYTogMC4wMDAtNjE0OS44ODIgbWVnYWJ5dGVzCitEaXNrIGxhYmVsIHR5cGU6IG1hYworTWlub3IgICAgU3RhcnQgICAgICAgRW5kICAgICBGaWxlc3lzdGVtICBOYW1lICAgICAgICAgIEZsYWdzCisxICAgICAgICAgIDAuMDAwICAgICAgMC4wMzEgICAgICAgICAgICAgIEFwcGxlCisyICAgICAgICAgIDAuMDMxICAgICAgMS4wMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vdAorMyAgICAgICAgICAxLjAwMCAgIDEwMDAuMDAwICBleHQyICAgICAgICByb290ICAgICAgICAgIHJvb3QKK0BlbmQgZ3JvdXAKKyhwYXJ0ZWQpIEBrYmR7IG1rcGFydGZzIHByaW1hcnkgZXh0MiAxMDAxIDIwMDB9CitAZ3JvdXAKKyhwYXJ0ZWQpIEBrYmR7cHJpbnR9CitEaXNrIGdlb21ldHJ5IGZvciAvZGV2L3NkYTogMC4wMDAtNjE0OS44ODIgbWVnYWJ5dGVzCitEaXNrIGxhYmVsIHR5cGU6IG1hYworTWlub3IgICAgU3RhcnQgICAgICAgRW5kICAgICBGaWxlc3lzdGVtICBOYW1lICAgICAgICAgIEZsYWdzCisxICAgICAgICAgIDAuMDAwICAgICAgMC4wMzEgICAgICAgICAgICAgIEFwcGxlCisyICAgICAgICAgIDAuMDMxICAgICAgMS4wMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vdAorMyAgICAgICAgICAxLjAwMCAgIDEwMDAuMDAwICBleHQyICAgICAgICByb290ICAgICAgICAgIHJvb3QKKzQgICAgICAgMTAwMS4wMDAgICAyMDAwLjAwMCAgZXh0MgorQGVuZCBncm91cAorQGVuZCBleGFtcGxlCisKK0V4aXN0ZSAxIG1lZ2FieXRlIGRlIGVzcGHnbyBsaXZyZSBlbnRyZSBhcyBwYXJ0aef1ZXMgMyBlIDQuIFZvY+ogcG9kZQorZXZpdGFyIGlzc28sIGNyaWFuZG8gcGFydGnn9WVzIGRlIDAuMU0gKG5vIGNhc28sIG8gUGFydGVkIGF1dG9tYXRpY2FtZW50ZQorYGBqdW50YScnIGVsYXMpLiBFbnTjbywgbm8gZXhlbXBsbyBhY2ltYSwgdm9j6iBkZXZlcmlhIGZhemVyIGlzc28gYW8gaW526XM6CisKK0BleGFtcGxlCisocGFydGVkKSBAa2Jke21rcGFydGZzIHByaW1hcnkgZXh0MiAxMDAwLjEgMjAwMH0KK0Bncm91cAorKHBhcnRlZCkgQGtiZHtwcmludH0KK0Rpc2sgZ2VvbWV0cnkgZm9yIC9kZXYvc2RhOiAwLjAwMC02MTQ5Ljg4MiBtZWdhYnl0ZXMKK0Rpc2sgbGFiZWwgdHlwZTogbWFjCitNaW5vciAgICBTdGFydCAgICAgICBFbmQgICAgIEZpbGVzeXN0ZW0gIE5hbWUgICAgICAgICAgRmxhZ3MKKzEgICAgICAgICAgMC4wMDAgICAgICAwLjAzMSAgICAgICAgICAgICAgQXBwbGUKKzIgICAgICAgICAgMC4wMzEgICAgICAxLjAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICBib290CiszICAgICAgICAgIDEuMDAwICAgMTAwMC4wMDAgIGV4dDIgICAgICAgIHJvb3QgICAgICAgICAgcm9vdAorNCAgICAgICAxMDAwLjAwMCAgIDIwMDAuMDAwICBleHQyCitAZW5kIGdyb3VwCitAZW5kIGV4YW1wbGUKKworQG5vZGUgICAgU2lzdGVtYXMgZGUgQXJxdWl2bworQGNoYXB0ZXIgU2lzdGVtYXMgZGUgQXJxdWl2byBzdXBvcnRhZG9zIHBlbG8gUGFydGVkCitAY2luZGV4IHNpc3RlbWFzIGRlIGFycXVpdm8KKworQG1lbnUKKyogU2lzdGVtYXMgU3Vwb3J0YWRvczo6ICAgICAgRmlsZSBzeXN0ZW1zIG9wZXJhdGlvbnMgc3VwcG9ydGVkIGJ5IEdOVSBQYXJ0ZWQKKyogRXh0Mjo6ICAgICAgICAgICAgICAgICAgICAgU2lzdGVtYXMgZXh0MiBkbyBMaW51eCBubyBQYXJ0ZWQKKyogRkFUMTYgYW5kIEZBVDMyOjogICAgICAgICAgU2lzdGVtYXMgTGVnYWRvcyBlIG8gUGFydGVkIGRhIE1pY3Jvc29mdCBlIG8gUGFydGVkCisqIFJlaXNlcmZzOjogICAgICAgICAgICAgICAgIFNpc3RlbWEgam9ybmFs7XN0aWNvIFJlaXNlciBlIG8gUGFydGVkCitAZW5kIG1lbnUKKworQG5vZGUgU2lzdGVtYXMgZGUgQXJxdWl2byBTdXBvcnRhZG9zCitAc2VjdGlvbiBTaXN0ZW1hcyBkZSBBcnF1aXZvIFN1cG9ydGFkb3MgcGVsbyBHTlUgUGFydGVkCitAY2luZGV4IHNpc3RlbWFzIGRlIGFycXVpdm8gc3Vwb3J0YWRvcworQGNpbmRleCBzaXN0ZW1hcyBkZSBhcnF1aXZvIHN1cG9ydGFkb3MKKworTyBQYXJ0ZWQgdGVtIHN1cG9ydGUgYSBlc3NhcyBvcGVyYef1ZXM6CisKK0BjIFJNSzogRklYTUU6IGNhbiB3ZSBwdXQgaW4gbmljZXIgbWFya3MgZm9yICJ0cnVlIiwgYW5kIG5vdGUgbWFya2VycworQGMgdG8gYXNzb2NpYXRlIG5vdGVzIGJlbG93IHdpdGggZW50cmllcyBpbiB0aGlzIHRhYmxlPworCitAbXVsdGl0YWJsZSB7RmlsZXN5c3RlbX0ge2RldGVjdH0ge2NyZWF0ZX0ge3Jlc2l6ZX0ge2NvcHl9IHtjaGVja30KK0BpdGVtIFNpc3RlbWEgZGUgQXJxdWl2byBAdGFiIGRldGVjdGEgQHRhYiBjcmlhIEB0YWIgcmVkaW1lbnNpb25hIEB0YWIgY29waWEgQHRhYiBjaGVjYQorQGl0ZW0gZXh0MiBAdGFiICogQHRhYiAqIEB0YWIgKjEgQHRhYiAqMiBAdGFiICozCitAaXRlbSBleHQzIEB0YWIJKiBAdGFiIEB0YWIgKjEgQHRhYiAqMiBAdGFiICozCitAaXRlbSBmYXQxNiBAdGFiICogQHRhYiAqIEB0YWIgKjQgQHRhYiAqNCBAdGFiICoKK0BpdGVtIGZhdDMyIEB0YWIgKiBAdGFiICogQHRhYiAqIEB0YWIgKiBAdGFiICoKK0BpdGVtIGhmcyBAdGFiICogQHRhYiBAdGFiIEB0YWIgQHRhYgorQGl0ZW0gamZzIEB0YWIgKiBAdGFiIEB0YWIgQHRhYiBAdGFiCitAaXRlbSBsaW51eC1zd2FwIEB0YWIgKiBAdGFiICogQHRhYiAqIEB0YWIgKiBAdGFiICoKK0BpdGVtIG50ZnMgQHRhYiAqIEB0YWIgQHRhYiBAdGFiIEB0YWIKK0BpdGVtIHJlaXNlcmZzIEB0YWIgKiBAdGFiICo1IEB0YWIgKjEsNSBAdGFiICo1IEB0YWIgKjMsNQorQGl0ZW0gdWZzIEB0YWIgKiBAdGFiIEB0YWIgQHRhYiBAdGFiCitAaXRlbSB4ZnMgQHRhYiAqIEB0YWIgQHRhYiBAdGFiIEB0YWIKK0BlbmQgbXVsdGl0YWJsZQorCitAYyBSTUs6IG5vdGU6IHRoZSBmb2xsb3dpbmcgaXMgbm90IGFuIGVudW1lcmF0ZWQgbGlzdCwganVzdCBhIGJ1bmNoIG9mCitAYyBub3RlcyBhc3NvY2lhdGVkIHRvIGVudHJpZXMgaW4gdGhlIGFib3ZlIG1hdHJpeC4gIFRoYXQncyBiYWQuCisKK0Bub2luZGVudCBOT1RBUzoKKygxKSBPIGlu7WNpbyBkYSBwYXJ0aefjbyBkZXZlIGVzdGFyIGZpeGEgcGFyYSBleHQyLCBleHQzIGUgcmVpc2VyZnMuCisKKygyKSBBIHBhcnRp5+NvIHF1ZSB2b2PqIGNvcGlhIGRldmUgc2VyIG1haW9yIChvdSBleGF0YW1lbnQgbyBtZXNtbwordGFtYW5obykgZGEgcGFydGnn428gcXVlIHZvY+ogZXN04SBjb3BpYW5kby4KKworKDMpIENoZWNhZ2VtIGxpbWl0YWRhIOkgZmVpdGEgcXVhbmRvIG8gc2lzdGVtYXMgZGUgYXJxdWl2byDpIGFiZXJ0by4KK0VzdGEg6SBhIPpuaWNhIGNoZWNhZ2VtIG5vIG1vbWVudG8uIFRvZG9zIG9zIGNvbWFuZG9zIChpbmNsdWluZG8gbworcmVzaXplKSB2428gZmFsaGFyIGdyYWNpb3NhbWVudGUsIGRlaXhhbmRvIG8gc2lzdGVtYXMgZGUgYXJxdWl2bworaW50YWN0bywgc2UgbuNvIGV4aXN0aXIgZXJyb3Mgbm8gc2lzdGVtYXMgZGUgYXJxdWl2byAoZSBhIHZhc3RhIG1haW9yaWEKK2RlIGVycm9zIG5vIGdlcmFsKS4KKworKDQpIE8gdGFtYW5obyBkYSBub3ZhIHBhcnRp5+NvLCBhcPNzIHJlZGltZW5zaW9uYXIgb3UgY29waWFyLCDpIHJlc3RyaXRvCitwZWxvIHRhbWFuaG8gZGUgY2x1c3RlciBwYXJhIGEgZmF0IChwcmluY2lwYWxtZW50ZSBhZmV0YSBGQVQxNikuIElzdG8KK+kgcGlvciBkbyBxdWUgdm9j6iBwZW5zYSwgcG9ycXVlIHZvY+ogbuNvIGNoZWdhIGEgZXNjb2xoZXIgbyB0YW1hbmhvCitkbyBjbHVzdGVyIChpc3NvIOkgdW0gYnVnIG5vIFdpbmRvd3MsIG1hcyB2b2PqIHF1ZXIgY29tcGF0aWJpbGlkYWRlLAorY2VydG8/KS4KKworRW50428sIGVtIHBy4XRpY2EsIHZvY+ogc2VtcHJlIHBvZGUgZGltaW51aXIgc3VhIHBhcnRp5+NvIChwb3JxdWUgbworUGFydGVkIHBvZGUgZGltaW51aXIgbyB0YW1hbmhvIGRvIGNsdXN0ZXIpLCB2b2PqIG7jbyB2YWkgcG9kZXIgYXVtZW50YXIKK2EgcGFydGnn428gcHJvIHRhbWFuaG8gcXVlIHZvY+ogcXVlci4gU2Ugdm9j6iBu428gdGl2ZXIgcHJvYmxlbWFzIGVtCit1c2FyIEZBVDMyLCB2b2PqIHNlbXByZSB2YWkgcG9kZXIgYXVtZW50YXIgYSBwYXJ0aefjbyBwcm8gdGFtYW5obworcXVlIHZvY+ogcXVpc2VyLgorCitSZXN1bW86IHZvY+ogc2VtcHJlIHBvZGUgZGltaW51aXIgYSBzdWEgcGFydGnn428uIFNlIHZvY+ogbuNvIHBvZGUKK3VzYXIgRkFUMzIgcG9yIGFsZ3VtYSByYXrjbywgZW50428gdm9j6iBu428gdmFpIHBvZGVyIGF1bWVudGFyIHN1YQorcGFydGnn428uCisKKyg1KSBPIHN1cG9ydGUgYSByZWlzZXJmcyDpIGhhYmlsaXRhZG8gc2Ugdm9j6iBpbnN0YWxhciBsaWJyZWlzZXJmcywKK2Rpc3Bvbu12ZWwgZW0gQHVyZWZ7cmVpc2VyZnMubGludXgua2lldi51YX0uICjJIHByb3bhdmVsIHF1ZSBlc3RlamEKK2Rpc29u7XZlbCBsb2dvIGVtIHd3dy5uYW1lc3lzLmNvbS4uLiBub3MgZGlnYSBzZS9xdWFuZG8gaXNzbyBhY29udGVjZXIhKQorCitAbm9kZSBFeHQyCitAc2VjdGlvbiBPIEdOVSBQYXJ0ZWQgZSBvIFNlY29uZCBFeHRlbmRlZCBGaWxlc3lzdGVtCitAY2luZGV4IHN1cG9ydGUgYSBzaXN0ZW1hIGRlIGFycXVpdm8gZXh0MgorQGNpbmRleCBzdXBvcnRlIGEgc2lzdGVtYXMgc2Vjb25kIGV4dGVuZGVkCisKK08gUGFydGVkIG7jbyBzdXBvcnRhIGRpcmV0YW1lbnRlIGPzcGlhIGRlIHNpc3RlbWFzIGRlIGFycXVpdm8gZXh0MgorKGFpbmRhKS4gQ29udHVkbywgZXhpc3RlbSBhbGd1bWFzIG1hbmVpcmFzIGRlIHNlIGNvbnNlZ3VpciBpc3NvOgorCitAaXRlbWl6ZQorQGl0ZW0gVXNlIG8gY29tYW5kbyBta2ZzIChvdSBta2ZzLmV4dDIpLCBlIGVudONvIHJvZGUgbmEgc2hlbGw6CisKK01FIENPTlNFUlRFISEhIGlzdG8gYWluZGEgbuNvIGZ1bmNpb25hIG11aXRvIGJlbSAtIG1hcyBkZXZlIGVzdGFyIE9LCitwYXJhIGEgbWFpb3JpYSBkYXMgcGVzc29hc0Bkb3Rze30KKworQGV4YW1wbGUKKyMgQGtiZHttb3VudCAtdCBleHQyIC9kZXYvaGRhMiAvbW50L2RzdH0KKyMgQGtiZHtmaW5kIC9tbnQvc3JjIC1kZXB0aCB8IGNwaW8gLXBtIC9tbnQvZHN0fQorQGVuZCBleGFtcGxlCisKK0BpdGVtIFNlIHZvY+ogZHVwbGljYXIgdW1hIHBhcnRp5+NvIHF1ZSBzZXLhIG1haW9yIHF1ZSBvIG9yaWdpbmFsLAoraXN0byB0YW1i6W0gcG9kZSBzZXIgZmVpdG86IHByaW1laXJvLCBjcmllIHVtYSBub3ZhIHBhcnRp5+NvIGV4dDIuCitFbnTjbzoKKworQGV4YW1wbGUKKyMgQGtiZHtkZCBpZj0vZGV2L2RzcC1hbnRpZ28gb2Y9L2Rldi9kc3Atbm92byBicz0xMDI0IGNvdW50PUB2YXJ7dGFtX2FudH19CisjIEBrYmR7cGFydGVkIC9kZXYvaGRhIHJlc2l6ZSAyIEB2YXJ7aW7tY2lvfSBAdmFye2ZpbX19CitAZW5kIGV4YW1wbGUKKworQG5vaW5kZW50IGFvbmRlIEB2YXJ7dGFtX2FudH0g6SBvIHRhbWFuaG8gZGEgcGFydGnn428gb3JpZ2luYWwgZW0ga2lsb2J5dGVzLgorQHZhcntpbu1jaW99IGUgQHZhcntmaW19IHPjbyBvIG5vdm8gY29tZedvIGUgZmltIHBhcmEgYSBwYXJ0aefjbyBkdXBsaWNhZGEuCitAZW5kIGl0ZW1pemUKKworQG5vZGUgRkFUMTYgZSBGQVQzMgorQHNlY3Rpb24gU3Vwb3J0ZSBhIFNpc3RlbWFzIGRlIEFycXVpdm8gZGEgTWljcm9zb2Z0CitAY2luZGV4IHN1cG9ydGUgYSBzaXN0ZW1hcyBkZSBhcnF1aXZvIGZhdAorQGNpbmRleCBzdXBvcnRlIGEgc2lzdGVtYXMgZGUgYXJxdWl2byBsZWdhZG9zIGRhIG1pY3Jvc29mdAorCitPIFBhcnRlZCBu428gcG9kZSBhdW1lbnRhciBvIHRhbWFuaG8gZG8gY2x1c3RlciBkZSBzaXN0ZW1hcyBkZSBhcnF1aXZvCitGQVQgKGFpbmRhKS4gSXN0byBw9WUgcmVzdHJp5/VlcyBlbSByZWRpbWVuc2lvbmFyIGUgY29waWFyIHBhcnRp5/Vlcy4KK0lzdG8g6SBnZXJhbG1lbnRlIGJpemFycm8sIHBvcnF1ZSBvIFBhcnRlZCBwb2RlIGNvbnZlcnRlciBzaXN0ZW1hcyBkZQorYXJxdWl2byBlbnRyZSBGQVQxNiBlIEZBVDMyLCBxdWUgdGVtIHJlc3Ryaef1ZXMgZGlmZXJlbnRlcyBubyBxdWUgbwordGFtYW5obyBkbyBjbHVzdGVyIHBvZGUgc2VyLgorCitQb3IgZXhlbXBsbywgdmFtb3MgZGl6ZXIgcXVlIHVtYSBwYXJ0aefjbyBkZSAxMDBNYiBjb20gdW0gdGFtYW5obyBkZQorY2x1c3RlciBkZSA0ay4gRXN0YSBwYXJ0aefjbyBu428gcG9kZSBzZXIgcmVkaW1lbnNpb25hZG9zIHBhcmEgNDAwTWIsCitwb3JxdWUgbyB0YW1hbmhvIGRvIGNsdXN0ZXIgZGV2ZXJpYSBzZXIgbXVkYWRvIHBhcmEgMTZrLiBDb250dWRvLCBlbGUKK3BvZGUgc2VyIHJlZGltZW5zaW9uYWRvIHBhcmEgNjAwTWIgc2Ugdm9j6iB1c2FyIEZBVDMyLiBPIGNvbnRy4XJpbyDpCit2ZXJkYWRlIHBhcmEgc2lzdGVtYXMgZGUgYXJxdWl2byBGQVQzMiBkZSA2MDBNYi4KKworTm90ZTogcXVhbmRvIHZvY+ogY29waWEgb3UgcmVkaW1lbnNpb25hIHVtIHNpc3RlbWFzIGRlIGFycXVpdm8sIG8gUGFydGVkCit2YWkgcGVyZ3VudGFyIHNlIHZvY+ogcXVlciBjb252ZXJ0ZXIgZW50cmUgRkFUMTYgZSBGQVQzMiAoc2UgaXNzbyBmb3IKK3Bvc3PtdmVsKS4gUG9ydGFudG8sIHNlIHZvY+ogc/MgcXVlciBjb252ZXJ0ZXIgdW0gcGFydGnn428gcGFyYSBGQVQzMgorKHNlbSByZWRpbWVuc2lvbmFyKSwgdm9j6iBz8yBwcmVjaXNhIHJlZGltZW5zaW9uYXIgYSBwYXJ0aefjbyBwYXJhIG8KK21lc21vIHRhbWFuaG8uCisKK0BtZW51CisqIE1TIERyaXZlU3BhY2U6OiAgICAgICAgICAgICAgICAgICAgUGFydGnn9WVzIE1TIERyaXZlU3BhY2UKK0BlbmQgbWVudQorCisKK0Bub2RlIE1TIERyaXZlU3BhY2UKK0BzdWJzZWN0aW9uIFBhcnRp5/VlcyBNUyBEcml2ZVNwYWNlCitAY2luZGV4IHBhcnRp5/VlcyBkcml2ZXNwYWNlCisKK08gTVMgRHJpdmVTcGFjZSDpIHVtIHByb2dyYW1hIHF1ZSB2ZW0gY29tIG8gTVMgV2luZG93cyA5NSBxdWUgcGRvZSBzZXIKK3VzYWRvIHBhcmEgY29tcHJpbWlyIHNpc3RlbWFzIGRlIGFycXVpdm8gRkFULiBFdSBhY3JlZGl0byBxdWUgZWxlCitmdW5jaW9uZSBkbyBtZXNtbyBqZWl0byBxdWUgbyBEb3VibGVTcGFjZSwgZW50428gdHVkbyBkaXRvIGFxdWkgcG9kZQorc2VyIGFwbGljYWRvIG5vIERvdWJsZVNwYWNlIHRhbWLpbS4KKworySBwb3Nz7XZlbCBwYXJhIG8gUGFydGVkIHJlZGltZW5zaW9uYXIgZSBjb3BpYXIgZXNzYXMgcGFydGnn9WVzLCBtYXMKK3ZvY+ogdGVtIHF1ZSBmYXplciBhbGd1bWFzIGNvaXNhcyBhIG1haXNAZG90c3t9CisKK0BtZW51CisqIEF1bWVudGFuZG8gdW1hIHBhcnRp5+NvIERyaXZlU3BhY2U6OgorKiBEaW1pbnVpbmRvIHVtIHBhcnRp5+NvIERyaXZlU3BhY2U6OgorKiBDb3BpYW5kbyB1bWEgcGFydGnn428gRHJpdmVTcGFjZTo6CitAZW5kIG1lbnUKKworCitAbm9kZSBBdW1lbnRhbmRvIHVtYSBwYXJ0aefjbyBEcml2ZVNwYWNlCitAc3Vic2VjdGlvbiBBdW1lbnRhbmRvIHVtYSBwYXJ0aefjbyBEcml2ZVNwYWNlCitAY2luZGV4IHBhcnRp5+NvIGRyaXZlc3BhY2UsIGF1bWVudGFuZG8gdW1hCisKK1BhcmEgYXVtZW50YXIgbyB0YW1hbmhvIGRlIHVtYSBwYXJ0aefjbyBEcml2ZVNwYWNlLCBmYedhIG8gc2VndWludGUKK0BlbnVtZXJhdGUKK0BpdGVtIFVzZSBvIGNvbWFuZG8gcmVzaXplIGRvIFBhcnRlZCBwYXJhIGF1bWVudGFyIGEgcGFydGnn428gcGFyYSBvIHRhbWFuaG8gZGVzZWphZG8uCisKK0BpdGVtIFVzZSBvIE1TIERyaXZlU3BhY2UgcGFyYSBlbnZpYXIgbyBlc3Bh528gbGl2cmUgZG8gZHJpdmUgZGUgb3JpZ2VtCitwYXJhIG8gZHJpdmUgY29tcHJpbWlkby4KKworQGVuZCBlbnVtZXJhdGUKKworQG5vZGUgRGltaW51aW5kbyB1bWEgcGFydGnn428gRHJpdmVTcGFjZQorQHN1YnN1YnNlY3Rpb24gRGltaW51aW5kbyB1bWEgcGFydGnn428gRHJpdmVTcGFjZQorQGNpbmRleCBwYXJ0aefjbyBkcml2ZXNwYWNlLCBkaW1pbnVpbmRvIHVtYQorCitQYXJhIGF1bWVudGFyIG8gdGFtYW5obyBkZSB1bWEgcGFydGnn428gRHJpdmVTcGFjZSwgZmHnYSBvIHNlZ3VpbnRlOgorCitAZW51bWVyYXRlCitAaXRlbSBVc2UgbyBNUyBEcml2ZVNwYWNlIHBhcmEgam9nYXIgbyBlc3Bh528gbGl2cmUgZG8gZHJpdmUgY29tcHJpbWlkbworcGFyYSBvIGRyaXZlIGRlIG9yaWdlbS4gTyBu+m1lcm8gZGUgZXNwYedvIGpvZ2FkbyBjb3JyZXNwb25kZSBhbworbW9udGFudGUgcXVlIHNlIGRldmUgZGltaW51aXIgYSBwYXJ0aefjby4KKworQGMgUk1LOiB1c2FnZTogIlBhcnRlZCBkb2Vzbid0IGdpdmUgZ29vZCBmZWVkYmFjayBvbiB3aGF0IHRoZSBudWJtZXJzIiBodWg/CitAaXRlbSBVc2UgbyBjb21hbmRvIHJlc2l6ZSBkbyBQYXJ0ZWQgcGFyYSBkaW1pbnVpciB1bWEgcGFydGnn428gcGFyYSBvCit0YW1hbmhvIGRlc2VqYWRvLiBOT1RBOiBPIFBhcnRlZCBu428gdGVtIHVtYSBib2EgcmVzcG9zdGEgY29tIG9zIG76bWVyb3MKK3BlbG8gcXVhbCBzZSBwZWRlIHBhcmEgdW1hIHBhcnRp5+NvIGRpbWludWlyLiBJc3RvIGVzdOEgbmEgbGlzdGEgZGUKK2FmYXplcmVzLgorCitAZW5kIGVudW1lcmF0ZQorCitAbm9kZSBDb3BpYW5kbyB1bWEgcGFydGnn428gRHJpdmVTcGFjZQorQHN1YnN1YnNlY3Rpb24gQ29waWFuZG8gdW1hIHBhcnRp5+NvIERyaXZlU3BhY2UKK0BjaW5kZXggcGFydGnn428gZHJpdmVzcGFjZSwgY29waWFuZG8gdW1hCisKK1NlIHZvY+ogcXVlciBjb3BpYXIgdW1hIHBhcnRp5+NvIERyaXZlU3BhY2UgcGFyYSB1bWEgcGFydGnn428gcXVlIOkKK21haW9yLCBlbnTjbyB2b2PqIHBvZGUgc2VndWlyIGFzIGluc3Rydef1ZXMgcGFyYSBhdW1lbnRhciB1bWEgcGFydGnn428KK0RyaXZlU3BhY2UsIGV4Y2V0byBzZSB2b2PqIGNvcGlhciBhbyBpbnbpcyBkZSByZWRpbWVuc2lvbmFyIHBhcmEgYQorcGFydGnn428gZGVzZWphZGEsIGUgdGVyIGNlcnRlemEgZGUgcXVlIHZvY+ogdXNvdSBhIG5vdmEgcGFydGnn428gbm8KK0RyaXZlU3BhY2UuCisKK0NvbnR1ZG8sIHNlIHZvY+ogcXVlciBjb3BpYXIgdW1hIHBhcnRp5+NvIERyaXZlU3BhY2UgcXVlIOkgbWVub3IsIGFzCitjb2lzYXMgZmljYW0gdW0gcG91Y28gbWFpcyBjb21wbGljYWRhczoKKworQGVudW1lcmF0ZQorQGl0ZW0gVXNlIG8gTVMgRHJpdmVTcGFjZSBwYXJhIGVtcHVycmFyIG8gZXNwYedvIGxpdnJlIGRvIGRpc2NvCitjb21wcmltaWRvIHBhcmEgbyBkcml2ZSBkZSBvcmlnZW0uIE8gbW9udGFudGUgZGUgZGlzY28gZW1wdXJyYWRvIGRldmUgc2VyCittYWlzIHF1ZSBhIGRpZmVyZW7nYSBlbnRyZSBvIGRpc2NvIGRlIG9yaWdlbSBlIG8gdGFtYW5obyBkZXNlamFkbyBkZQordW1hIGRhcyBwYXJ0aef1ZXMgZHVwbGljYWRhcy4KKworQGl0ZW0gVXNlIG8gUGFydGVkIHBhcmEgY29waWFyIGEgcGFydGnn428gZGUgZGVzdGlubyBwYXJhIGEgcGFydGnn428KK2R1cGxpY2FkYS4KKworQGl0ZW0gVXNlIG8gTVMgRHJpdmVTcGFjZSBwYXJhIGVtcHVycmFyIG8gZXNwYedvIGxpdnJlIGRvIGRpc2NvIGRlCitvcmlnZW0gZGUgdm9sdGEgcGFyYSBvIGRpc2NvIGNvbXByaW1pZG8uCisKK0BpdGVtIFVzZSBvIE1TIERyaXZlU3BhY2UgcGFyYSBlbXB1cnJhciBvIGVzcGHnbyBsaXZyZSBkbyBkcml2ZSBkdXBsaWNhZG8KK2RlIHZvbHRhIHBhcmEgbyBkcml2ZSBjb21wcmltaWRvLgorQGVuZCBlbnVtZXJhdGUKKworCitAbm9kZSBSZWlzZXJmcworQHNlY3Rpb24gU2lzdGVtYXMgZGUgQXJxdWl2byBKb3JuYWztc3RpY28gUmVpc2VyZnMKK0BjaW5kZXggcmVpc2VyZnMKKworTyBQYXJ0ZWQgc3Vwb3J0YSByZWlzZXJmcyBzZSBhIGxpYnJlaXNlcmZzIGVzdOEgaW5zdGFsYWRhLiBPIFBhcnRlZAorZGV0ZWN0YSBpc3NvIGFvIHJvZGFyLCBlIGF1dG9tYXRpY2FtZW50ZSBhdGl2YSBvIHN1cG9ydGUuIFZvY+ogcG9kZQorYmFpeGFyIGEgbGlicmVpc2VyZnMgZW06CisKKwlAdXJlZntodHRwOi8vcmVpc2VyZnMubGludXgua2lldi51YX0KKworTm90ZSBxdWUgYSBsaWJyZWlzZXJmcyDpIHNvZnR3YXJlIG5vdm8sIGUgbuNvIGZvaSBsYXJnYW1lbnRlIHRlc3RhZG8uCisKKworQG5vZGUgICAgTFZNIGUgUkFJRAorQGNoYXB0ZXIgTFZNIGUgUkFJRAorQGNpbmRleCBsdm0gZSByYWlkCitAY2luZGV4IHJhaWQgZSBsdm0KKworQG1lbnUKKyogVmlz428gZ2VyYWwgZGEgTFZNIGUgUkFJRDo6ICAgICAgICAgICBWaXPjbyBnZXJhbCBkYSBMVk0gZSBSQUlECisqIENyaWFuZG8gcGFydGnn9WVzIFJBSUQgb3UgTFZNOjogICAgICAgQ29uZmlndXJhbmRvIHBhcnRp5/VlcyBSQUlEIGUgTFZNCisqIE1hbmlwdWxhbmRvIHVtIHZvbHVtZSBSQUlEIG91IExWTTo6ICAgT3BlcmHn9WVzIGVtIHBhcnRp5/VlcyBSQUlEIG91IExWTQorQGVuZCBtZW51CisKK0Bub2RlIFZpc+NvIGdlcmFsIGRvIExWTSBlIFJBSUQKK0BzZWN0aW9uIExvZ2ljYWwgVm9sdW1lIE1hbmFnZXIgZSBSZWR1bmRhbnQgQXJyYXlzIG9mIEluZXhwZW5zaXZlIERpc2tzCitAY2luZGV4IGx2bSBlIHJhaWQsIHZpc+NvIGdlcmFsIGRvCitAY2luZGV4IGx2dywgdmlz428gZ2VyYWwKK0BjaW5kZXggcmFpZCwgdmlz428gZ2VyYWwKKworTyBMVk0gKExvZ2ljYWwgVm9sdW1lIE1hbmFnZXIpIOkgdW0gc2lzdGVtYSBhbHRlcm5hdGl2byBwYXJhCitwYXJ0aWNpb25hbWVudG8uIEVsZSBwZXJtaXRlIHZvbHVtZXMgbPNnaWNvcyAocG9yIGV4ZW1wbG8sIGBgcGFydGnn9WVzCit2aXJ0dWFpcycnKSBhIHNlcmVtIGVzcGFsaGFkYXMgZW0gbXVpdG9zIHZvbHVtZXMgZu1zaWNvcyAocG9yIGV4ZW1wbG8sCitkaXNjb3MgZS9vdSBwYXJ0aef1ZXMpLiBPIExWTSDpIHN1cG9ydGFkbyBubyBMaW51eCB2ZXJz428gMi40IGUKK3N1cGVyaW9yLgorCitSQUlEIChSZWR1bmRhbnQgQXJyYXkgb2YgSW5leHBlbnNpdmUgRGlza3MgLSBPcmRlbSBSZWR1bmRhbnRlIGRlIERpc2NvcworQmFyYXRvcykg6SB1bSBzaXN0ZW1hIHBhcmEgdXNhciBtdWl0b3MgZGlzY29zIGUvb3UgcGFydGnn9WVzIGp1bnRhcywgY29tbwordW1hIGBgcGFydGnn428gdmlydHVhbCcnLiBFeGlzdGVtIG11aXRvIHBvdWNvcyBtb2RvcyBkZSB1c2FyIHNvZnR3YXJlCitSQUlELCBlIHPjbyBlc3NlbmNpYWxtZW50ZToKKworQGMgUk1LOiBpZiB0aGVyZSBhcmUgb25seSB0d28gb3B0aW9ucywgd2h5IG5vdCBwdXQgdGhlbSBpbnRvIGEgc2VudGVuY2U/CitAaXRlbWl6ZQorQGl0ZW0gdXNhciBt+mx0aXBsb3MgKHBlcXVlbm9zKSBkaXNjb3MgcGFyIHVtIPpuaWNvIHNpc3RlbWFzIGRlIGFycXVpdm8sCithdW1lbnRhciBhIHBlcmZvcm1hbmNlIGUgZmF6ZXIgdG9kbyBvIGVzcGHnbyBkaXNwb27tdmVsIHNlciBkaXNwb27tdmVsCitudW0g+m5pY28gc2lzdGVtYXMgZGUgYXJxdWl2by4KK0BpdGVtIHVzYXIgbfpsdGlwbG9zIGRpc2NvcyBwYXJhIGd1YXJkYXIgY/NwaWFzIHJlZHVuZGFudGVzIGRlIGluZm9ybWHn428sCitwYXJhIGF1bWVudGFyIGEgY29uZmlhbudhIGUgcGVyZm9ybWFuY2UuCitAZW5kIGl0ZW1pemUKK1JBSUQgcG9yIHNvZnR3YXJlIOkgc3Vwb3J0YWRvIG5vIExpbnV4IHZlcnPjbyAyLjAgZSBzdXBlcmlvci4KKworQGMgUk1LOiB1c2FnZTogd2hhdCBkb2VzIGBgaXMgc3VwcG9ydGVkIG5vcm1hbGx5IGJ5IFBhcnRlZCcnIG1lYW4/CitSQUlEIHBvciBoYXJkd2FyZSDpIG5vcm1hbG1lbnRlIHN1cG9ydGFkbyBwZWxvIFBhcnRlZCAtIGVudONvIHZvY+ogbuNvCitwcmVjaXNhIGxlciBlc3NhIHNl5+NvIHNlIHZvY+ogZXN04SB1c2FuZG8gUkFJRCBwb3IgaGFyZHdhcmUgKG8KK29wb3N0byBwYXJhIFJBSUQgcG9yIHNvZnR3YXJlKS4KKworTFZNLCBSQUlEIHBvciBzb2Z0d2FyZSBlIHBhcnRp5/VlcyBz428gY29tdW1lbnRlIHVzYWRhcyBzaW11bHRhbmVhbWVudGUsCittYXMgZWxhcyB0b2RhcyBwb2RlbSBzZXIgdXNhZGFzIGluZGVwZW5kZW50ZW1lbnRlLiBMVk0gZSBSQUlEIHBvcgorc29mdHdhcmUgc+NvIGdlcmFsbWVudGUgY29tcG9zdGFzIGRlIHBhcnRp5/VlcywgbWFpcyBkbyBxdWUgZGlzY29zCity7WdpZG9zLgorCitPIEdOVSBQYXJ0ZWQgbuNvIHN1cG9ydGEgTFZNIGUgUkFJRCBwb3Igc29mdHdhcmUgY29tcGxldGFtZW50ZSwKK21hcyBlbGUg6SBhaW5kYSD6dGlsIHF1YW5kbyB1c2FkbyBlbSBjb21iaW5h5+NvIGNvbSBzdWFzIGZlcnJhbWVudGFzCityZXNwZWN0aXZhcy4gTyBQYXJ0ZWQg6SD6dGlsIHBhcmEgZXNzYXMgdGFyZWZhczoKKworQGl0ZW1pemUKK0BpdGVtIGNyaWFyIHVtYSBwYXJ0aefjbyBSQUlEIG91IExWTSBkZSBzb2Z0d2FyZQorCitAaXRlbSBjcmlhbmRvLCByZWRpbWVuc2lvbmFuZG8gb3UgY29waWFuZG8gdW0gc2lzdGVtYSBkZSBhcnF1aXZvIG51bQordm9sdW1lIGzzZ2ljbyAob3UgYGBwYXJ0aefjbyBs82dpY2EnJykKK0BlbmQgaXRlbWl6ZQorCitAbm9kZSBDcmlhbmRvIHBhcnRp5/VlcyBMVk0gb3UgUkFJRAorQHNlY3Rpb24gQ3JpYW5kbyBwYXJ0aef1ZXMgTFZNIG91IFJBSUQKK0BjaW5kZXggY3JpYefjbyBkZSBwYXJ0aef1ZXMgbHZtCitAY2luZGV4IGNyaWHn428gZGUgcGFydGnn9WVzIHJhaWQKKworUGFyYSBjcmlhciB1bWEgcGFydGnn428gUkFJRCBvdSBMVk0sIHZvY+ogZGV2ZToKK0BlbnVtZXJhdGUKK0BpdGVtIENyaWFyIHVtYSBwYXJ0aefjbyBjb20gbyBjb21hbmRvIG1rcGFydAorQGl0ZW0gRGVmaW5pciBvIGluZGljYWRvciBMVk0gb3UgUkFJRCBuYSBwYXJ0aefjby4KK0BlbmQgZW51bWVyYXRlCisKK1BvciBleGVtcGxvOgorCitAZXhhbXBsZQorKHBhcnRlZCkgQGtiZHtta3BhcnQgcHJpbWFyeSBleHQyIDAgNDAwMH0KKyhwYXJ0ZWQpIEBrYmR7c2V0IDEgbHZtIG9ufQorQGVuZCBleGFtcGxlCisKK05vdGE6IGEgcGFydGnn428gTFZNIG91IFJBSUQgbuNvIHZhaSBlc3RhciBwcm9udGEgcGFyYSB1c28gYWluZGEuIFZvY+oKK2FpbmRhIHByZWNpc2Egcm9kYXIgbyBta3JhaWQoOCkgcGFyYSBSQUlEcywgb3UgdXNhciBhcyBmZXJyYW1lbnRhcyBkZQorTFZNIHBhcmEgaW5pY2lhbGl6YXIgbyB2b2x1bWUgZu1zaWNvLCBlIGNyaWFyIGdydXBvcyBs82dpY29zLCBldGMuCisKK0Bub2RlIE1hbmlwdWxhbmRvIHVtIHZvbHVtZSBSQUlEIG91IExWTQorQHNlY3Rpb24gTWFuaXB1bGFuZG8gdW0gU2lzdGVtYSBkZSBBcnF1aXZvIG51bSB2b2x1bWUgUkFJRCBvdSBMVk0KK0BjaW5kZXggb3BlcmHn428gZW0gcGFydGnn9WVzIHJhaWQKK0BjaW5kZXggb3BlcmHn9WVzIGVtIHBhcnRp5/VlcyBsdm0KKworTyBQYXJ0ZWQgcG9kZSBtYW5pcHVsYXIgdm9sdW1lcyBs82dpY29zIFJBSUQgZSBMVk0sIG1lc21vIG7jbyBlbnRlbmRlbmRvCitSQUlEIG91IExWTS4gRWxlIHV0aWxpemEgbyBzdXBvcnRlIGRvIExpbnV4IGEgUkFJRCBlIExWTS4gUG9ydGFudG8sIHZvY+oKK3NvbWVudGUgcG9kZSB1c2FyIGVzc2VzIG3pdG9kb3Mgc2UgbyBzZXUga2VybmVsIGRvIExpbnV4IHN1cG9ydGEgUkFJRAorZS9vdSBMVk0uCisKK1BhcmEgbWFuaXB1bGFyIHVtIHNpc3RlbWEgZGUgYXJxdWl2byBudW0gdm9sdW1lIGzzZ2ljbyBSQUlEIG91IExWTSAob3UsCit1bWEgcGFydGnn428gc296aW5oYSwgcGFyYSBlc3NlIGludHVpdG8pLCB2b2PqIHBvZGUgaW5pY2lhciBvIHBhcnRlZAorc2VsZWNpb25hbmRvIG8gZGlzcG9zaXRpdm8gZG8gdm9sdW1lIChwYXJ0aefjbykgbPNnaWNvLiBQb3IgZXhlbXBsbzoKKworQGV4YW1wbGUKKyMgQGtiZHtwYXJ0ZWQgL2Rldi9tZDB9CitAZW5kIGV4YW1wbGUKKworUGFyYSBvIHJlc3RvIGRlc3NlIGNhcO10dWxvLCBgYGRpc3Bvc2l0aXZvIHZpcnR1YWwnJyB2YWkgc2UgcmVmZXJpcgorYW8gZGlzcG9zaXRpdm8gcXVlIG8gUGFydGVkIGVzdOEgZWRpdGFuZG8gKG5vIG5vc3NvIGV4ZW1wbG8sIEBmaWxley9kZXYvbWQwfSkuCitGb3IgdGhlIHJlc3Qgb2YgdGhpcyBjaGFwdGVyLCBgYHZpcnR1YWwgZGV2aWNlJycgd2lsbCByZWZlciB0byB0aGUKK2RldmljZSBQYXJ0ZWQgaXMgZWRpdHRpbmcgKGluIG91ciBleGFtcGxlIGNhc2VzLCBAZmlsZXsvZGV2L21kMH0pLgorCitAbWVudQorKiBDcmlhbmRvIHVtIHNpc3RlbWEgZGUgYXJxdWl2byBudW0gZGlzcG9zaXRpdm8gUkFJRCBvdSBMVk06OgorKiBSZWRpbWVuc2lvbmFuZG8gdW0gc2lzdGVtYSBkZSBhcnF1aXZvOjoKKyogQ29waWFuZG8gdW0gc2lzdGVtYSBkZSBhcnF1aXZvIGRlIHVtIGRpc3Bvc2l0aXZvIHZpcnR1YWwgcGFyYSB1bWEgcGFydGnn4286OgorKiBDb3BpYW5kbyB1bSBzaXN0ZW1hIGRlIGFycXVpdm8gcGFyYSB1bSBkaXNwb3NpdGl2byB2aXJ0dWFsOjoKK0BlbmQgbWVudQorCitAbm9kZSBDcmlhbmRvIHVtIFNpc3RlbWEgZGUgQXJxdWl2byBudW0gZGlzcG9zaXRpdm8gUkFJRCBvdSBMVk0KK0BzdWJzZWN0aW9uIENyaWFuZG8gdW0gU2lzdGVtYSBkZSBBcnF1aXZvIG51bSBEaXNwb3NpdGl2byBWSXJ0dWFsIExWTSBvdSBSQUlECitAY2luZGV4IGx2bSwgY3JpYW5kbyB1bSBzaXN0ZW1hIGRlIGFycXVpdm8gZW0KK0BjaW5kZXggcmFpZCwgY3JpYW5kbyB1bSBzaXN0ZW1hIGRlIGFycXVpdm8gZW0KKworUGFyYSBjcmlhciB1bSBzaXN0ZW1hIGRlIGFycXVpdm8gbnVtIHZvbHVtZSBMVk0sIHVzZSBvcyBzZWd1aW50ZXMgcGFzc29zOgorCitAZW51bWVyYXRlCitAaXRlbSBDcmllIHVtYSB0YWJlbGFzIGRlIHBhcnRp5+NvIGRlIGxvb3AuIEVzdGUg6SB1bWEgdGFiZWxhIGRlIHBhcnRp5/VlcworZmFsc2EsIHF1ZSBkaXogYW8gUGFydGVkIHBhcmEgdHJhdGFyIG8gZGlzcG9zaXRpdm8gdmlydHVhbCBjb21vIHVtIPpuaWNvCitzaXN0ZW1hIGRlIGFycXVpdm8uIENvbSBlc3NhIGZhbHNhIHRhYmVsYSBkZSBwYXJ0aef1ZXMsIGV4aXN0ZSBvdSBuZW5odW1hCitvdSB1bWEgcGFydGnn428uCisKK0BleGFtcGxlCisocGFydGVkKSBAa2Jke21rbGFiZWwgbG9vcH0KK0BlbmQgZXhhbXBsZQorCitAaXRlbSBDcmllIG8gc2lzdGVtYSBkZSBhcnF1aXZvLCB1c2FuZG8gbyBjb21hbmRvIG1rcGFydGZzIGRvIFBhcnRlZC4KK1ZvY+ogZGV2ZSBkZWl4YXIgbyBpbu1jaW8gZG8gc2lzdGVtYSBkZSBhcnF1aXZvIDAuIEEgcGFydGnn428gcG9kZQordGVybWluYXIgZW0gcXVhbHF1ZXIgbHVnYXIgZGVudHJvIGRvIGRpc3Bvc2l0aXZvIHZpcnR1YWwuIFZvY+ogcG9kZQorZW5jb250cmFyIG8gdGFtYW5obyBkbyBkaXNwb3NpdGl2byB2aXJ0dWFsIGNvbSBvIGNvbWFuZG8gcHJpbnQuIFBvcgorZXhlbXBsbzoKKworQGV4YW1wbGUKKyhwYXJ0ZWQpIEBrYmR7cHJpbnR9CitAZ3JvdXAKK0Rpc2sgZ2VvbWV0cnkgZm9yIC9kZXYvbWQwOiAwLjAwMC00Ny4wNjUgbWVnYWJ5dGVzCitEaXNrIGxhYmVsIHR5cGU6IGxvb3AKK01pbm9yICAgIFN0YXJ0ICAgICAgIEVuZCAgICAgRmlsZXN5c3RlbSAgRmxhZ3MKK0BlbmQgZ3JvdXAKKyhwYXJ0ZWQpIEBrYmR7bWtwYXJ0ZnMgcHJpbWFyeSBleHQyIDAgNDcuMDY1fQorKHBhcnRlZCkgQGtiZHtwcmludH0KK0Bncm91cAorRGlzayBnZW9tZXRyeSBmb3IgL2Rldi9tZDA6IDAuMDAwLTQ3LjA2NSBtZWdhYnl0ZXMKK0Rpc2sgbGFiZWwgdHlwZTogbG9vcAorTWlub3IgICAgU3RhcnQgICAgICAgRW5kICAgICBGaWxlc3lzdGVtICBGbGFncworMSAgICAgICAgICAwLjAwMCAgICAgNDcuMDY1ICBleHQyCitAZW5kIGdyb3VwCitAZW5kIGV4YW1wbGUKK0BlbmQgZW51bWVyYXRlCisKK0Bub2RlIFJlZGltZW5zaW9uYW5kbyB1bSBzaXN0ZW1hcyBkZSBhcnF1aXZvCitAc3Vic2VjdGlvbiBSZWRpbWVuc2lvbmFuZG8gdW0gU2lzdGVtYSBkZSBBcnF1aXZvcyBudW0gRGlzcG9zaXRpdm8gVmlydHVhbCBMVk0gb3UgUkFJRAorQGNpbmRleCBsdm0sIHJlZGltZW5zaW9uYW5kbyB1bSBzaXN0ZW1hIGRlIGFycXVpdm8KK0BjaW5kZXggcmFpZCwgcmVkaW1lbnNpb25hbmRvIHVtIHNpc3RlbWEgZGUgYXJxdWl2bworCitWb2PqIGdlcmFsbWVudGUgcmVkaW1lbnNpb25hIG8gc2lzdGVtYSBkZSBhcnF1aXZvIGFvIG1lc21vIHRlbXBvIHF1ZQordm9j6iByZWRpbWVuc2lvbmEgbyBzZXUgZGlzcG9zaXRpdm8gdmlydHVhbC4gU2Ugdm9j6iBlc3ThIGF1bWVudGFuZG8KK28gc2lzdGVtYSBkZSBhcnF1aXZvIGUgbyBkaXNwb3NpdGl2byB2aXJ0dWFsLCB2b2PqIGRldmUgcHJpbWVpcm8KK2F1bWVudGFyIG8gZGlzcG9zaXRpdm8gdmlydHVhbCAoY29tIGFzIGZlcnJhbWVudGFzIFJBSUQgb3UgTFZNKSwgZSBlbnTjbworYXVtZW50YXIgbyBzaXN0ZW1hIGRlIGFycXVpdm8uIFNlIHZvY+ogZXN04SBkaW1pbnVpbmRvIG8gc2lzdGVtYSBkZQorYXJxdWl2byBlIG8gZGlzcG9zaXRpdm8gdmlydHVhbCwgdm9j6iBkZXZlIGRpbWludWlyIG8gc2lzdGVtYSBkZSBhcnF1aXZvCitwcmltZWlybywgZSBlbnTjbyBvIGRpc3Bvc2l0aXZvIHZpcnR1YWwuCisKK1BhcmEgcmVkaW1lbnNpb25hciBvIHNpc3RlbWEgZGUgYXJxdWl2byBubyBQYXJ0ZWQsIHVzZSBvIGNvbWFuZG8gcmVzaXplLgorUG9yIGV4ZW1wbG86CisKK0BleGFtcGxlCisocGFydGVkKSBAa2Jke3NlbGVjdCAvZGV2L21kMH0KKyhwYXJ0ZWQpIEBrYmR7cmVzaXplIDEgMCAyMH0KK0BlbmQgZXhhbXBsZQorCitAbm9kZSBDb3BpYW5kbyB1bSBzaXN0ZW1hIGRlIGFycXVpdm8gZGUgdW0gZGlzcG9zaXRpdm8gdmlydHVhbCBwYXJhIHVtYSBwYXJ0aefjbworQHN1YnNlY3Rpb24gQ29waWFuZG8gdW0gU2lzdGVtYSBkZSBBcnF1aXZvIGRlIHVtIERpc3Bvc2l0aXZvIExWTSBvdSBSQUlEIHBhcmEgdW1hIHBhcnRp5+NvCitAY2luZGV4IGx2bSwgY29waWFuZG8gZGUgdW0gbHZtIHBhcmEgdW1hIHBhcnRp5+NvCitAY2luZGV4IHJhaWQsIGNvcGlhbmRvIGRlIHVtIHJhaWQgcGFyYSB1bWEgcGFydGnn428KKworUGFyYSBjb3BpYXIgdW0gc2lzdGVtYSBkZSBhcnF1aXZvIGRlIHVtIGRpc3Bvc2l0aXZvIHZpcnR1YWwgTFZNIG91IFJBSUQsCivpIHPzIHVzYXIgbyBjb21hbmRvIGNwLiBQb3IgZXhlbXBsbzoKKworKHBhcnRlZCkgQGtiZHtzZWxlY3QgL2Rldi9oZGF9CisocGFydGVkKSBAa2Jke2NwIC9kZXYvbWQwIDEgM30KK0Bub2RlIENvcGlhbmRvIHVtIHNpc3RlbWEgZGUgYXJxdWl2byBwYXJhIHVtIGRpc3Bvc2l0aXZvIHZpcnR1YWwKK0BzdWJzZWN0aW9uIENvcGlhbmRvIHVtIFNpc3RlbWEgZGUgQXJxdWl2byBkZSB1bSBEaXNwb3NpdGl2byBWaXJ0dWFsIFJBSUQgb3UgTFZNCitAY2luZGV4IGx2bSwgY29waWFuZG8gZGUgdW1hIHBhcnRp5+NvIGx2bSBwYXJhIHVtIHZvbHVtZQorQGNpbmRleCByYWlkLCBjb3BpYW5kbyBkZSB1bWEgcGFydGnn428gcGFyYSB1bSB2b2x1bWUgcmFpZAorCitQYXJhIGNvcGlhciBvIHNpc3RlbWEgZGUgYXJxdWl2byBwYXJhIHVtIGRpc3Bvc2l0aXZvIHZpcnR1YWwgTFZNIG91IFJBSUQsCit1c2UgYSBzZWd1aW50ZSByZWNlaXRhOgorCitAZW51bWVyYXRlCitAaXRlbSBDcmllIGEgdGFiZWxhIGRlIHBhcnRp5/VlcyBkZSBsb29wIG5vIGRpc3Bvc2l0aXZvIHZpcnR1YWwuIFBvciBleGVtcGxvOgorCitAZXhhbXBsZQorKHBhcnRlZCkgQGtiZHtzZWxlY3QgL2Rldi9tZDB9CisocGFydGVkKSBAa2Jke21rbGFiZWwgbG9vcH0KK0BlbmQgZXhhbXBsZQorCitAaXRlbSBDcmllIHVtIHNpc3RlbWEgZGUgYXJxdWl2byBubyBkaXNwb3NpdGl2byB2aXJ0dWFsLCBjb20gbyBjb21hbmRvCitta3BhcnRmcy4gUG9yIGV4ZW1wbG86CisKK0BleGFtcGxlCisocGFydGVkKSBAa2Jke21rcGFydGZzIHByaW1hcnkgZXh0MiAwIDQ3LjA2NX0KK0BlbmQgZXhhbXBsZQorCitAaXRlbSBDb3BpZSBhIHBhcnRp5+NvIGNvbSBvIGNvbWFuZG8gY3A6CisKK0BleGFtcGxlCisocGFydGVkKSBAa2Jke3NlbGVjdCAvZGV2L2hkYX0KKyhwYXJ0ZWQpIEBrYmR7Y3AgL2Rldi9tZDAgMyAxfQorQGVuZCBleGFtcGxlCitAZW5kIGVudW1lcmF0ZQorCitAbm9kZSAgICBFc3BlbGhhbWVudG8gZGUgRGlzY29zCitAY2hhcHRlciBFc3BlbGhhbWVudG8gZGUgRGlzY29zCitAY2luZGV4IGVzcGVsaGFtZW50byBkZSBkaXNjb3MKKworRXNwZWxoYW1lbnRvIGRlIGRpc2NvIOkgbyBt6XRvZG8gcGFyYSBldml0YXIgbyB0ZWRpb3NvIHByb2Nlc3NvIGRlCitpbnN0YWxh5+NvIGRvIFdpbmRvd3MuIFBvciBleGVtcGxvLCBzZSB2b2PqIHF1ZXIgaW5zdGFsYXIgbyBXaW5kb3dzIGUKK28gT2ZmaWNlIGVtIDEwMDAgbeFxdWluYXMsIHZhaSBsZXZhciBwcm92YXZlbG1lbnRlIDUgdmV6ZXMgMTAwMCBob3Jhcy4KK0FzIGNvaXNhcyBu428gc+NvIHTjbyBydWlucyBjb20gbyBHTlUvTGludXgsIHBvcnF1ZSBleGlzdGVtIHByb2dyYW1hcworY29tbyBvIGtpY2tzdGFydCBkYSBSZWQgSGF0LCBxdWUgcGVybWl0ZSB2b2PqIGF1dG9tYXRpemFyIGEgaW5zdGFsYefjbworZGUgb3V0cm9zIHByb2dyYW1hcywgb3UgcHJhdGljYW1lbnRlIHF1YWxxdWVyIGNvaXNhIHF1ZSB2b2PqIHByZWNpc2UKK2ZhemVyLiBQb3J0YW50bywgbyBlc3BlbGhhbWVudG8gZGUgZGlzY28g6SBzb21lbnRlIHVzYWRvIHBhcmEgbeFxdWluYXMKK1dpbmRvd3MgKG91IHF1YWxxdWVyIHNvZnR3YXJlIG7jby1saXZyZSkgZW0gZ2VyYWwsIG1hcyBu83MgaW1hZ2luYW1vcworcXVlIGEgbWFpb3JpYSBkYXMgb3JnYW5pemHn9WVzIGFjaGFyaWFtIGltcG9zc+12ZWwgbWlncmFyIGRvIFdpbmRvd3MKK3BhcmEgbyBHTlUvTGludXggKG91IHF1YWxxdWVyIG91dHJvIHNvZnR3YXJlIGxpdnJlKSBzZW0gdW0gcGVy7W9kbyBkZQordHJhbnNp5+NvLCBhb25kZSBhbWJvcyBvcyBzaXN0ZW1hcyBlc3TjbyBkaXNwb27tdmVpcy4KKworQGMgRklYTUU6IHN0YW5kYXJkczogdGhlIENELVdyaXRpbmcgaG93dG8gaXMgbGlzdGVkIGFzIG5vbi1mcmVlIGJ5IExEUAorQ29tIG8gZXNwZWxoYW1lbnRvIGRlIGRpc2NvLCB2b2PqIHBvZGUgdG9ycmFyIHVtIENEIGNvbSB1bWEgaW1hZ2VtIGRlCitkaXNjbyBvdSBkZSB1bWEgcGFydGnn428gY29udGVuZG8gbyBXaW5kb3dzIGUgbyBPZmZpY2UsIGUgY29waWFyIGEKK3BhcnRp5+NvIGRpcmV0YW1lbnRlIG5vcyBkaXNjb3Mgcu1naWRvcyBkZSB0b2RvcyBvcyBjb21wdXRhZG9yZXMsCitjb2xvY2FuZG8gdW0gZGlzY28gZGUgYm9vdCBlIHVtIENELCBlIGRlaXhhbmRvIHJvbGFyLiBNYXMgYSBwYXJ0aefjbworbm8gZGlzY28gV2luZG93cyB2YWkgcHJvdmF2ZWxtZW50ZSBzZXIgbWFpb3IsIGVudONvIGEgcGFydGnn428gdGFtYultCit2YWkgdGVyIGRlIHNlciByZWRpbWVuc2lvbmFkYS4gRXUgauEgdmkgduFyaWFzIHBlc3NvYXMgY29tZW50YXJlbSBxdWUKK2VsYXMgZ2VyZW5jaWFyYW0gZXNzZSBwcm9jZXNzbyB1c2FuZG8gZGlzY29zIGRlIGJvb3QgZG8gTGludXggZSBvIFBhcnRlZC4KK8kgcG9zc+12ZWwgdXNhciBvIENEUk9NIHNvbWVudGUsIHVzYW5kbyBvIGRpc3F1ZXRlIGRlIGJvb3QgY29tbyBhIGltYWdlbQorZGUgYm9vdCBkbyBDRC4gTGVpYSBhIENEIHdyaXRpbmcgSE9XVE8gcGFyYSBtYWlvcmVzIGluZm9ybWHn9WVzLiBFeGlzdGVtCithbGd1bWFzIGNvaXNhcyBwZWN1bGlhcmVzIHF1ZSB2b2PqIHRlbSBxdWUgZmF6ZXIgcHJhIGNvaXNhIHRvZGEgZnVuY2lvbmFyCisocXVlIHZhaSBzZXIgcmVzb2x2aWRhIG5hIHBy83hpbWEgc+lyaWUgZXN04XZlbCBkbyBQYXJ0ZWQpLiBEZSBxdWFscXVlcgorbW9kbywgZXN0ZSDpIG8gcHJvY2Vzc28gZ2VyYWw6CisKK0BlbnVtZXJhdGUKK0BpdGVtIEluc3RhbGUgbyBXaW5kb3dzIG51bWEgbeFxdWluYSwgY29tIGEgY29uZmlndXJh5+NvIHF1ZSB2b2PqCitxdWlzZXIuIFZvY+ogcG9kZSB0ZXIgdW1hIHBhcnRp5+NvIGRvIHRhbWFuaG8gcXVlIHF1aXNlciwgY29udGFudG8KK3F1ZSBu428gdXNlIG1haXMgZGUgNjQwTWIsIGUgZGVpeGUgZXNwYedvIHBhcmEgdW0gaW5zdGFsYefjbyBjb21wbGV0YQorZG8gTGludXgsIGUgb3V0cm9zIDEzMDBNYiBwYXJhIGR1YXMgY/NwaWFzIGRhIGltYWdlbSBkZSBkaXNjby4KKworQGl0ZW0gSW5zdGFsZSBvIExpbnV4IG5hIG3hcXVpbmEuCisKK0BpdGVtIEZh52EgdW0gZGlyZXTzcmlvIHBhcmEgaW1hZ2VtIGRvIENEIChleGVtcGxvOiBAZmlsZXsvcm9vdC9pbWFnZW19KQorCitAaXRlbSBDcmllIHVtIGFycXVpdm8gZGUgaW1hZ2VtIGRlIGRpc2NvIChleGVtcGxvOiBAZmlsZXsvcm9vdC9pbWFnZW0vZGlzY299KQorbm8gZGlyZXTzcmlvIGRvIENEOgorCitAZXhhbXBsZQorIyBAa2Jke2RkIGlmPS9kZXYvemVybyBvZj0vcm9vdC9pbWFnZW0vZGlzY28gYnM9MU0gY291bnQ9NjQwfQorQGVuZCBleGFtcGxlCisKK0BpdGVtIFVzZSBvIFBhcnRlZCBwYXJhIGNvcGlhciBhIHBhcnRp5+NvIFdpbmRvd3MgcGFyYSBhIGltYWdlbSBkZSBkaXNjbzoKKworQGV4YW1wbGUKKyMgQGtiZHtwYXJ0ZWQgL3Jvb3QvY2RpbWFnZS9kaXNraW1hZ2UgbWtsYWJlbCBtc2Rvc30KKyMgQGtiZHtwYXJ0ZWQgL3Jvb3QvY2RpbWFnZS9kaXNraW1hZ2UgbWtwYXJ0IHByaW1hcnkgZmF0MzIgMCA2Mzl9CisjIEBrYmR7cGFydGVkIC9yb290L2NkaW1hZ2UvZGlza2ltYWdlIGNwIC9kZXYvaGRhIDEgMX0KK0BlbmQgZXhhbXBsZQorCitAaXRlbSBDcmllIHVtYSBpbWFnZW0gZGUgQ0QgZG8gZGlyZXTzcmlvIGRhIGltYWdlbSBkZSBDRCBlIHRvcnJlIGVzc2UKK0NEIGNvbSBhIHN1YSBmZXJyYW1lbnRhIGZhdm9yaXRhIGRlIGdyYXZh5+NvLgorCitAaXRlbSBDb21waWxlIHVtYSB2ZXJz428gZXNwZWNpYWwgZG8gUGFydGVkIHNlbSBzdXBvcnRlIGEgbO1uZ3VhCituYWNpb25hbCBlIHN1cG9ydGUgYSByZWFkbGluZSAob3UgYmFpeGUgYSBSUE0gZXNwZWNpYWwgZGEgRnJlc2htZWF0KToKKworQGV4YW1wbGUKK2xvY2FsaG9zdDp+L3BhcnRlZC0xLjAuMCMgQGtiZHsuL2NvbmZpZ3VyZSAtLWRpc2FibGUtbmxzIC0td2l0aG91dC1yZWFkbGluZSAtLWRpc2FibGUtc2hhcmVkOyBtYWtlfQorQGVuZCBleGFtcGxlCisKK0BjIEZJWE1FOiBzdGFuZGFyZHM6IExEUCBsYWJlbGxlZCB0aGUgQm9vdGRpc2sgSE9XVE8gbm9uLWZyZWUuCitAaXRlbSBDcmllIHVtIGRpc3F1ZXRlIGRlIGJvb3QgZG8gTGludXggKHZlamEgYSBCb290ZGlzayBIT1dUTykuCisKK0BpdGVtIFBvbmhhIGEgdmVyc+NvIHJlZHV6aWRhIGRvIFBhcnRlZCBubyBkaXNxdWV0ZSBkZSBib290IChvdQordW0gZGlzY28gcmFpeiBzdXBsZW1lbnRhcikuCisKK0BpdGVtIEVzY3JldmEgdW0gc2NyaXB0IHNoZWxsIHBhcmEgZmF6ZXIgbyBzZWd1aW50ZToKKworQGV4YW1wbGUKK0Bhc2lze21vdW50IC9kZXYvY2Ryb20gL21udC9jZHJvbX0KK0Bhc2lze3BhcnRlZCAtLXNjcmlwdCAvZGV2L2hkYSBta2xhYmVsIG1zZG9zfQorQGFzaXN7cGFydGVkIC0tc2NyaXB0IC9kZXYvaGRhIG1rcGFydGZzIHByaW1hcnkgZmF0IDAgQHZhcnthbGd1bS10YW1hbmhvfX0KK0Bhc2lze3BhcnRlZCAtLXNjcmlwdCAvZGV2L2hkYSBjcCAvbW50L2Nkcm9tL2Rpc2tpbWFnZSAxIDF9CitAYXNpc3twYXJ0ZWQgLS1zY3JpcHQgL2Rldi9oZGEgc2V0IDEgYm9vdCBvbn0KK0Bhc2lzey9zYmluL2hhbHR9CitAZW5kIGV4YW1wbGUKKworQHZhcnthbGd1bS10YW1hbmhvfSDpIG8gdGFtYW5obyBxdWUgdm9j6iBxdWVyIHF1ZSBhIHByaW1laXJhIHBhcnRp5+NvIHVzZS4KKworQGl0ZW0gSW5pY2llIGEgaW5zdGFsYefjbyEgUG9uaGEgbyBkaXNxdWV0ZSArIENEIGRlbnRybyBkZSBjYWRhIGNvbXB1dGFkb3IsCitlIGRlaXhlIHJvbGFyQGRvdHN7fQorQGVuZCBlbnVtZXJhdGUKKworT2J2aWFtZW50ZSBldSBwb3NzbyBlIHZvdSBmYXplciBlc3NlIHByb2Nlc3NvIG11aXRvIG1haXMgZuFjaWwuIE7zcworZXN0YW1vcyBjb25zaWRlcmFuZG8gZmF6ZXIgdW1hIG1pbmktZGlzdHJpYnVp5+NvIHBhcmEgZmF6ZXIgaXNzby4KK0V1IG7jbyB0ZXJpYSB0ZW1wbyBwYXJhIGZhemVyIGlzc28gLS0tIGFsZ3VtIHZvbHVudOFyaW8/CisKK0Bub2RlIFNvZnR3YXJlIFJlbGFjaW9uYWRvCitAY2hhcHRlciBTb2Z0d2FyZSBSZWxhY2lvbmFkbworQGNpbmRleCBzb2Z0d2FyZSByZWxhY2lvbmFkbworQGNpbmRleCBsZWl0dXJhIHBvc3RlcmlvcgorQGNpbmRleCBkb2N1bWVudGHn428gcmVsYWNpb25hZGEKKworU2Ugdm9j6iBxdWVyIHByb2N1cmFyIG1haXMgaW5mb3JtYef1ZXMsIHNpbnRhLXNlIOAgdm9udGFkZSBwYXJhIGVudmlhcgorcGVyZ3VudGFzIHBhcmEgQGVtYWlse3BhcnRlZEBAZ251Lm9yZ30uICghKSBpbmRpY2EgcXVlIGEgCitpbmZvcm1h5+NvL3NvZnR3YXJlIGVzdOEgcHJvdmF2ZWxtZW50ZSBpbmNsde1kYSBuYSBzdWEgZGlzdHJpYnVp5+NvLgorCitFc3RlcyBhcnF1aXZvcyBuYSBkaXN0cmlidWnn428gZG8gUGFydGVkIGNvbnTpbSBpbmZvcm1h5/VlcyBhZGljaW9uYWlzOgorCitAaXRlbWl6ZSBAYnVsbGV0CisKK0BpdGVtIEFCT1VULU5MUyAtIGluZm9ybWHn9WVzIHNvYnJlIHVzYXIgbyBTdXBvcnRlIGEgTO1uZ3VhIE5hdGl2YSwgZSBvIFByb2pldG8gZGUgVHJhZHXn428gTGl2cmUKKworQGl0ZW0gQVBJIC0gYSBkb2N1bWVudGHn428gc29icmUgYSBBUEkgZGEgbGlicGFydGVkCisKK0BpdGVtIEFVVEhPUlMgLSBxdWVtIGVzY3JldmV1IG8gcXVlCisKK0BpdGVtIEJVR1MgLSBlcnJvcyBu428gYXJydW1hZG9zCisKK0BpdGVtIENoYW5nZUxvZyAtIG11ZGFu52FzIGZlaXRhcyBubyBQYXJ0ZWQKKworQGl0ZW0gQ09QWUlORyAtIGEgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIG9zIHRlcm1vcyBwZWxvcyBxdWFpcyBvIEdOVSBQYXJ0ZWQgcG9kZSBzZXIgZGlzdHJpYnVpZG8KKworQGl0ZW0gQ09QWUlORy5ET0MgLSBhIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5jZSwgbyB0ZXJtbyBwZWxvIHF1YWwKK2EgZG9jdW1lbnRh5+NvIGRvIFBhcnRlZCBwb2RlIHNlciBkaXN0cmlide1kYS4KKworQGl0ZW0gRkFUIC0tIGluZm9ybWHn9WVzIHNvYnJlIGNvbW8gbyByZWRpbWVuc2lvbmFkb3IgZGUgRkFUIGZ1bmNpb25hIChwYXJhIHByb2dyYW1hZG9yZXMpCisKK0BpdGVtIElOU1RBTEwgLS0tIGNvbW8gY29tcGlsYXIgZSBpbnN0YWxhciBvIFBhcnRlZCwgZSBhIG1haW9yaWEgZG9zIG91dHJvcyBzb2Z0d2FyZXMgbGl2cmVzCisKK0BpdGVtIFRPRE8gLS0tIHJlY3Vyc29zIHBsYW5lamFkb3MgcXVlIGFpbmRhIG7jbyBmb3JhbSBpbXBsZW1lbnRhZG9zCitAZW5kIGl0ZW1pemUKKworRXN0ZXMgZG9jdW1lbnRvcyBu428gc+NvIGRpc3RyaWJ17WRvcyBjb20gbyBQYXJ0ZWQsIG1hcyB2b2PqIHBvZGUgYWNoYXIKK2VsZXMg+nRlaXMuIEEgbWFpb3JpYSBkZWxlcyBwcm92YXZlbG1lbnRlIHZhaSBlc3RhciBuYSBzdWEgZGlzdHJpYnVp5+NvLgorUG9yIGV4ZW1wbG8sIG5vIFJlZCBIYXQgTGludXgsIG9saGUgbm8gY2QgZGVudHJvIGRlIEBmaWxley9kb2MvSE9XVE99IGUKK0BmaWxley9kb2MvRkFRfS4KKworQGl0ZW1pemUgQGJ1bGxldAorCitAYyBSTUs6IHVzZWZ1bG5lc3M6IGF2YWlsYWJsZSBhdCB0aGUgTERQIC0tIHNob3VsZCB0aGVzZSB1cmxzIGJlIHVwZGF0ZWQ/CitAYyBSTUs6IHN0YW5kYXJkczogR1BMJ2QgZG9jdW1lbnRhdGlvbi4KK0BpdGVtIEZpbGVzeXN0ZW1zIEhPV1RPICAgQHVyZWZ7aHR0cDovL3Blbmd1aW4uY3ovfm1oaS9mc30KKworQGMgUk1LOiB1c2VmdWxuZXNzOiBhdmFpbGFibGUgYXQgdGhlIExEUCAtLSBzaG91bGQgdGhlc2UgdXJscyBiZSB1cGRhdGVkPworQGMgRklYTUU6IHN0YW5kYXJkczogTERQIGxhYmVsbGVkIHRoaXMgbm9uLWZyZWUKK0BpdGVtIEhhcmQgRGlzayBVcGdyYWRlIG1pbmktSE9XVE8gKCEpOiAgIEB1cmVme2h0dHA6Ly9zdW5zaXRlLnVuYy5lZHUvTERQL0hPV1RPfQorCitAYyBSTUs6IHVzZWZ1bG5lc3M6IGF2YWlsYWJsZSBhdCB0aGUgTERQIC0tIHNob3VsZCB0aGVzZSB1cmxzIGJlIHVwZGF0ZWQ/CitAYyBGSVhNRTogc3RhbmRhcmRzOiBMRFAgbGFiZWxsZWQgdGhpcyBub24tZnJlZQorQGl0ZW0gTGFyZ2UgRGlzayBIT1dUTyAgIEB1cmVme2h0dHA6Ly93d3cud2luLnR1ZS5ubC9+YWViL2xpbnV4L0xhcmdlLURpc2suaHRtbH0KKworQGl0ZW0gTElMTyBtaW5pLUhPV1RPICghKSAgIEB1cmVme2h0dHA6Ly9zdW5zaXRlLnVuYy5lZHUvTERQL0hPV1RPfQorCitAYyBSTUs6IHVzZWZ1bG5lc3M6IGF2YWlsYWJsZSBhdCB0aGUgTERQIC0tIHNob3VsZCB0aGVzZSB1cmxzIGJlIHVwZGF0ZWQ/CitAaXRlbSBNSUxPIEhPV1RPICghKSAgIEB1cmVme2h0dHA6Ly9zdW5zaXRlLnVuYy5lZHUvTERQL0hPV1RPfQorCitAYyBGSVhNRTogc3RhbmRhcmRzOiBpbiBzaG9ydCwgbm9uZSBvZiB0aGUgZm9sbG93aW5nIGlzIGZyZWUgZG9jdW1lbmF0aW9uCitAYyBGSVhNRTogc3RhbmRhcmRzOiBMaW51eCtET1MrV2luOTUrT1MyIGxhYmVsbGVkIG5vbi1mcmVlIGJ5IExEUAorQGMgRklYTUU6IHN0YW5kYXJkczogTGludXgrRnJlZUJTRC1taW5pIGxhYmVsbGVkIG5vbi1mcmVlIGJ5IExEUAorQGMgRklYTUU6IHJlZmVyZW5jZTogY2FuJ3QgZmluZCBhIExpbnV4K1dpbjk1LCBvbmx5IExpbnV4K1dpbjk1LW1pbmkKK0BjIEZJWE1FOiBzdGFuZGFyZHM6IExpbnV4K1dpbjk1LW1pbmkgbGFiZWxsZWQgbm9uLWZyZWUgYnkgTERQCitAYyBGSVhNRTogcmVmZXJlbmNlOiBjYW4ndCBmaW5kIGEgTGludXgrRnJlZUJTRCwgb25seSBMaW51eCtGcmVlQlNELW1pbmkKK0BjIEZJWE1FOiByZWZlcmVuY2U6IGNhbid0IGZpbmQgYSBMaW51eCtOVC1Mb2FkZXIsIG9ubHkgIk5UIE9TIExvYWRlciArCitAYyBMaW51eCBtaW5pCitAYyBGSVhNRTogc3RhbmRhcmRzOiBOVCBPUyBMb2FkZXIgKyBMaW51eCBtaW5pIGxhYmVsbGVkIG5vbi1mcmVlIGJ5IExEUAorQGl0ZW0gTGludXgrT1MgbWluaS1IT1dUT3MgKCEpOiBMaW51eCtET1MrV2luOTUrT1MyLCBMaW51eCtGcmVlQlNELW1pbmktSE9XVE8sCitMaW51eCtXaW45NSwgTGludXgrRnJlZUJTRCwgTGludXgrTlQtTG9hZGVyLiAgWW91IGNhbiBnZXQgdGhlc2UgZnJvbTogQHVyZWZ7aHR0cDovL3N1bnNpdGUudW5jLmVkdS9MRFAvSE9XVE99CisKK0BjIEZJWE1FOiBzdGFuZGFyZHM6IFBhcnRpdGlvbiBtaW5pICBsYWJlbGxlZCBub24tZnJlZSBieSBMRFAKK0BpdGVtIFBhcnRpdGlvbiBtaW5pLUhPV1RPICghKTogQHVyZWZ7aHR0cDovL3d3dy5saW51eGRvYy5vcmcvSE9XVE8vbWluaS9QYXJ0aXRpb24vaW5kZXguaHRtbH0KKworQGMgUk1LOiBzdGFuZGFyZHM6IG5vIGNsZWFyIGRpc3RyaWJ1dGlvbiB0ZXJtcworQGl0ZW0gUGFydGl0aW9uIFRhYmxlIEhPV1RPIEB1cmVme2h0dHA6Ly93d3cud2luLnR1ZS5ubC9+YWViL3BhcnRpdGlvbnMvcGFydGl0aW9uX3RhYmxlcy5odG1sfQorCitAYyBGSVhNRTogc3RhbmRhcmRzOiBubyBjbGVhciBkaXN0cmlidXRpb24gdGVybXMKK0BpdGVtIExpc3RhIGRlIFRpcG9zIGRlIFBhcnRp5/VlcyBAdXJlZntodHRwOi8vd3d3Lndpbi50dWUubmwvfmFlYi9wYXJ0aXRpb25zL3BhcnRpdGlvbl90eXBlcy5odG1sfQorCitAaXRlbSBTb2Z0d2FyZSBSQUlEIEhPV1RPIEB1cmVme2h0dHA6Ly9saW5hcy5vcmcvbGludXgvU29mdHdhcmUtUkFJRC9Tb2Z0d2FyZS1SQUlELmh0bWx9CisKK0BlbmQgaXRlbWl6ZQorCitPdXRyb3MgcHJvZ3JhbWFzIHJlbGFjaW9uYWRvcyBlc3TjbyBsaXN0YWRvcyBhcXVpLiBBbGd1bnMgZGVsZXMgdGFtYultCit0ZW0gZG9jdW1lbnRh5+NvIPp0aWw6CisKK0BpdGVtaXplIEBidWxsZXQKKworQGl0ZW0gRGlzayBEcmFrZS4gRGlzcG9u7XZlbCBlbSBAdXJlZnt3d3cubGludXgtbWFuZHJha2UuY29tL2Rpc2tkcmFrZX0KK0VsZSDpIHNpbXVsYXIgZW0gZnVuY2lvbmFsaWRhZGUgYW8gUGFydGVkLiBPIGPzZGlnbyBkZSBGQVQgbm8gRGlzayBEcmFrZQor6SBiYXNlYWRvIG5vIG5vc3NvIGPzZGlnbyBkbyBQYXJ0ZWQuIEFxdWkg6SBjb21vIG8gRGlzayBEcmFrZSBzZQorY29tcGFyYSBhbyBQYXJ0ZWQ6IChxdWUgYW1ib3MgY29uY29yZGFtb3MgOi0pIE8gRGlzayBEcmFrZSDpOgorCitAaXRlbWl6ZSBAbWludXMKK0BpdGVtIG1haXMgZuFjaWwgZGUgdXNhciwgdGUgcHJvdGVqZSBkZSBjb21ldGVyIGVuZ2Fub3MKK0BpdGVtIHVtYSBzb2x15+NvIG1haXMgY29tcGxldGEgKGxpZGEgY29tIG8gQGZpbGV7L2V0Yy9mc3RhYn0sIGxpbG8sIGV0Yy4pCitAaXRlbSBtZW5vcyBzdXBvcnRlIOAgRkFUIChu428gcG9kZSBjb252ZXJ0ZXIgRkFUMTY8LT5GQVQzMiwgbuNvIGNvcGlhIHBhcnRp5/VlcykKK0BpdGVtIG1lbm9zIHN1cG9ydGUgYSBleHQyIChubyBtb21lbnRvKQorQGl0ZW0gbWVub3MgYXRlbufjbyDgIGNvbXBhdGliaWxpZGFkZSBlbnRyZSBzaXN0ZW1hcyBET1MvV2luZG93cyAobWFpcyBhbnRpZ29zKQorQGl0ZW0gc2VtIHN1cG9ydGUgYSBhcnF1aXRldHVyYXMgbuNvLVBDCitAZW5kIGl0ZW1pemUKKworQGl0ZW0gZHZodG9vbCAocGFyYSBTR0kvTUlQUykgKCEpCisKK0BjIFJNSzogc3RhbmRhcmRzOiB1bmNoZWNrZWQKK0BpdGVtIGRvc2ZzY2sgKCEpCisKK0BpdGVtIGUyZnNjaywgcmVzaXplMmZzIGUyZnNwcm9ncyAoISkgQHVyZWZ7aHR0cDovL3dlYi5taXQuZWR1L3R5dHNvL3d3dy9saW51eC9lMmZzcHJvZ3MuaHRtbH0KKworQGl0ZW0gZXh0MnJlc2l6ZSAtIHVzYSBvIG1lc21vIGPzZGlnbyBkbyBQYXJ0ZWQsIG1hcyBpbmNsdWkgYWxndW1hcworb3V0cmFzIGNvaXNhcyB0YW1i6W0sIGNvbW8gdW0gcmVkaW1lbnNpb25hciBleHQyIG5hIGhvcmEsIHF1ZSBu428KK3JlcXVlciBkZXNtb250YWdlbS4gQHVyZWZ7aHR0cDovL2V4dDJyZXNpemUuc291cmNlZm9yZ2UubmV0fQorCitAaXRlbSBmZGlzayAoISkKKworQGl0ZW0gRklQUyAoISkgKEZpcnN0IEludGVyYWN0aXZlIFBhcnRpdGlvbiBTcGxpdHRlciAtIFByaW1laXJvIERpdmlzb3IgZGUgUGFydGnn9WVzIEludGVyYXRpdm8pIEB1cmVme2h0dHA6Ly93d3cuaWdkLmZoZy5kZS9+YXNjaGFlZmUvZmlwc30KKworQCBSTUs6IHN0YW5kYXJkczogR1BMJ2QKK0BpdGVtIEdQYXJ0IC0gcmVjdXBlcmEgdGFiZWxhcyBkZSBwYXJ0aefjbyBxdWVicmFkYXMuIEB1cmVme2h0dHA6Ly93d3cuc3R1ZC51bmktaGFubm92ZXIuZGUvdXNlci83NjIwMS9ncGFydH0KKworQGl0ZW0gR05VIEdSVUIgLSBHUmFuZCBVbmlmaWVkIEJvb3QtbG9hZGVyIEB1cmVme2h0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9ncnViL2dydWIuaHRtbH0KKworQGl0ZW0gTElMTyAoISkgKExJbnV4IExPYWRlcikgIEB1cmVme2Z0cDovL3RzeC0xMS5taXQuZWR1L3B1Yi9saW51eC9wYWNrYWdlcy9saWxvfQorCitAaXRlbSBMVk0gQHVyZWZ7aHR0cDovL2xpbnV4Lm1zZWRlLmNvbS9sdm19CisKK0BjIFJNSzogc3RhbmRhcmRzOiBpcyBta2Rvc2ZzIEZyZWU/CitAaXRlbSBta2Rvc2ZzICghKSAgKOBzIHZlemVzIGNoYW1hZGEgZGUgbWtmcy5tc2RvcykKKworQGl0ZW0gbWtlMmZzICghKSAgKOBzIHZlemVzIGNoYW1hZGEgZGUgbWtmcy5leHQyKQorCitAaXRlbSBta2ZzICghKQorCitAaXRlbSBta3N3YXAgKCEpCisKK0BpdGVtIHF1aWsgKCEpCisKK0BpdGVtIHJlaXNlcmZzOiBOT1RBOiB1bSByZWRpbWVuc2lvbmFkb3IgcmVpc2VyZnMg6SBpbmNsde1kbyBjb20gYQorZGlzdHJpYnVp5+NvIHJlaXNlcmZzIG5vcm1hbC4gQHVyZWZ7aHR0cDovL2RldmxpbnV4LmNvbS9wcm9qZWN0cy9yZWlzZXJmc30KK1RhbWLpbSwgdW1hIGltcGxlbWVudGHn428gaW5kZXBlbmRlbnRlIGRhIHJhaXNlcmZzIHVzZXJsYW5kIChxdWUgbyBwYXJ0ZWQKK3RhbWLpbSB1dGlsaXphKSBAdXJlZntodHRwOi8vcmVpc2VyZnMubGludXgua2lldi51YX0uICBFbGUgcG9kZSBzZXIgYWRvdGFkbworcG9yIG91dHJvcyB1c3XhcmlvcyBubyBmdXR1cm8uLi4KKworQGl0ZW0geWFib290ICghKSAgQHVyZWZ7aHR0cDovL3Blbmd1aW5wcGMub3JnL2Jvb3Rsb2FkZXJzL3lhYm9vdC99CisKK0BpdGVtIHliaW4gKCEpICBAdXJlZntodHRwOi8vcGVuZ3VpbnBwYy5vcmcvYm9vdGxvYWRlcnMveWFib290L30KKworQGVuZCBpdGVtaXplCisKK0Bub2RlIENvcGlhbmRvIEVzdGUgTWFudWFsCitAYXBwZW5kaXggQ29waWFuZG8gRXN0ZSBNYW51YWwKKworQG1lbnUKKyogR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlOjogIExpY2Vu52EgcGFyYSBjb3BpYXIgZXNzZSBtYW51YWwKK0BlbmQgbWVudQorCitAaW5jbHVkZSBmZGwudGV4aQorCitAYyBGREw6IEZETCA0Lkkgc3VnZ2VzdHMgYSBISVNUT1JZIHNlY3Rpb24gYmUgaW5jbHVkZWQgaW4KK0BjIHRoZSBkb2N1bWVudGF0aW9uLiAgSW4gdGhpcyBjYXNlIGl0IHNlZW1zIHN1cGVyZmx1b3VzLCBidXQKK0BjIGhlcmUncyBvbmUsIGluIGNhc2UgaXQgaXMgZGVzaXJlZC4gIEFzIGZhciBhcyBJJ20gY29uY2VybmVkLAorQGMgdGhpcyBub2RlIGRvZXNuJ3QgZml0IHdlbGwgaW50byB0aGUgc3RydWN0dXJlIG9mIHRoZSBkb2N1bWVudAorQGMgYXQgcHJlc2VudC4KK0Bub2RlIEhpc3TzcmlhCitAYXBwZW5kaXggQSBoaXN083JpYSBkZXNzZSBtYW51YWwKK0BjaW5kZXggIGEgaGlzdPNyaWEgZGVzc2UgbWFudWFsCisKK0Vzc2UgbWFudWFsIOkgYmFzZWFkbyBubyBhcnF1aXZvLCBVU0VSLCBpbmNsde1kbyBuYSB2ZXJz428gMS40LjIyLgorTyBj82RpZ28tZm9udGUgZG8gR05VIFBhcnRlZCBlc3ThIGRpc3Bvbu12ZWwgZW0gQHVyZWZ7ZnRwLmdudS5vcmcvZ251L3BhcnRlZH0uCisKK0Zvcm1hdGHn428gdGV4aW5mbyBwb3IgUmljaGFyZCBNLiBLcmV1dGVyLCAyMDAyLgorCitFc3RlIG1hbnVhbCDpIGRpc3RyaWJ17WRvIHNvYiBhIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwKK3ZlcnPjbyAxLjEgb3Ugc3VwZXJpb3IsIOAgc3VhIGRpc2Nyaefjbywgc2VtIFNl5/VlcyBJbnZhcmlhbnRlcywKK3NlbSBUZXh0b3MgbmEgQ2FwYSwgZSBzZW0gVGV4dG9zIG5hIENvbnRyYS1jYXBhLiBAeHJlZntDb3BpYW5kbworZXN0ZSBNYW51YWx9LCBwYXJhIG1haXMgZGV0YWxoZXMuCisKK0BjIEZJWE1FOiB3aHkgZG9lc24ndCB0aGlzIEBpZm5vdHBsYWludGV4dCB3b3JrPyEKK0BjIEBpZm5vdHBsYWludGV4dAorQG5vZGUgzW5kaWNlCitAdW5udW1iZXJlZCDNbmRpY2UKK0BwcmludGluZGV4IGNwCitAYyBAZW5kIGlmbm90cGxhaW50ZXh0CisKK0BieWUKKworQGlnbm9yZQorSSd2ZSAodGhhdCBpcywgUk1LKSBpbmNsdWRlZCAodG9vIG11Y2gpIGNvbW1lbnRhcnkgaW4gdGhpcyBmaWxlLgorCitMaW5lcyBvZiB0aGUgZm9ybQorCisgICAgRklYTUU6PGNhdGVnb3J5PjoKKworYXJlIGJ1Z3MsIGFuZCBzaG91bGQgYmUgZml4ZWQuICBUaGUgY2F0ZWdvcmllcyBhcmUgc29ydCBvZiB2YWd1ZSwgYnV0Cisic3RhbmRhcmRzIiBtZWFucyB0aGF0IHNvbWV0aGluZyBkb2VzbnQndCBtZWV0IHNvbWVib2R5J3MgKHByb2JhYmx5CitJJ3ZlIHRyaWVkIHRvIGNoZWNrIHRoZSBsaWNlbnNlIGZvciBlYWNoIHByb2dyYW0gYW5kIGRvY3VtZW50YXRpb24KK3JlZmVyZW5jZWQsIGJ1dCBoYXZlIG1pc3NlZCBzb21lLiAgQXMgYSBydWxlLCBpZiBhIEhvd3RvIG9yIG1pbmktSG93dG8KK2hhcyBiZWVuIGxhYmVsbGVkIGFzIG5vbi1mcmVlIGJ5IHRoZSBMRFAsIHRoZW4gSSd2ZSBhc3N1bWVkIGl0J3MgYWxzbworbm9uLUZyZWUgZm9yIEdOVSBwdXJwb3Nlcy4gIEkndmUgYWxzbyB0cmllZCB0byBub3RlIHRoZSBmcmVlIHNvZnR3YXJlCithbmQgZG9jdW1lbnRhdGlvbiwgc2luY2Ugb21pc3Npb24gb2Ygc3VjaCBub3RlcyBsZWFkIG1lIHRvIHJlY2hlY2sgdGhpbmdzCitJJ2QgZm9yZ290dGVuIEknZCBjaGVjaywgZXRjLgorCitNYW55IG5vZGVzIGdpdmUgc29tZSBkZXRhaWxlZCBleHBsYW5hdGlvbiBvZiBob3cgdG8gdXNlIHBhcnRlZCBhbG9uZword2l0aCBhIG5vbi1mcmVlIG9wZXJhdGluZyBzeXN0ZW0gdXNpbmcgbm9uLWZyZWUgdXRpbGl0aWVzIHRoYXQgYXJlIHBhcnQKK29mIHRoYXQgc3lzdGVtLiAgVGhpcyBtYXkgYmUgYSB2aW9sYXRpb24gb2YgdGhlIEdOVSBzdGFuZGFyZHMsCitub2RlL3NlY3Rpb24gIlJlZmVyZW5jZXMiLiAgSSd2ZSBtYXJrZWQgdXAgdGhlIHRleHQgYW55aG93LCBpbiBjYXNlIHRoZQorY29udGVudCBpcyBkZWVtZWQgYWNjZXB0YWJsZSBieSBkZWNpc2lvbiBtYWtlcnMsIGFuZCBob3BlIHRoYXQgbXkKK2NvbnRyaWJ1dGlvbiBoZXJlIGRvZXNuJ3Qgc3dheSBkZWNpc2lvbnMuCisKK0ZvciB3aGF0IGl0J3Mgd29ydGgsIEkndmUgbm90ZWQgcmVmZXJlbmNlcyB0byBub24tZnJlZSBzb2Z0d2FyZSBhcworImFjY2VwdGFibGUiIGluIGNhc2UgdGhlIHJlZmVyZW5jZSBpbmNsdWRlcyBhIGRlc2NyaXB0aW9uIG9mIHdoYXQgdGhlCitzb2Z0d2FyZSBjYW4ndCBkbyAoZS5nLiwgbm90IHN1Y2ssIG5vdCBoYXJtIG1hbmtpbmQpLiAgVGhpcyBpZGlvc3luY3JhdGljCithc3Nlc3NtZW50IG9mIHRoZSBwZXJtaXNzaWJpbGl0eSBvZiByZWZlcmVuY2Ugb2Ygbm9uLWZyZWUgc29mdHdhcmUgaXMKK21lYW50IHBhcnRseSBhcyBhIGpva2UuCisKK05vdGU6IHRoZXJlIGlzIGEgZnJlZSAoR1BMJ2QpIERPUyBjb21wYXRpYmxlIG9wZXJhdGluZyBzeXN0ZW0sIEZyZWVET1MsCit0aGF0IEkndmUgdGVzdGVkIGFuZCBmb3VuZCB0byB3b3JrIHByZXR0eSB3ZWxsLCBiZXR0ZXIgaW4gbWFueSByZXNwZWN0cwordGhhdCBNaWNyb3N+MSdzIERPUy4gIE1hbnkgb2YgdGhlIHRpcHMgYW5kIHRyaWNrcyBkZXNjcmliZWQgaW4gdGhlCittYW51YWwgbWlnaHQgd29yayB3aXRoIG9yIGJlIG5lZWRlZCBmb3IgYSBGcmVlRE9TIGJhc2VkIHN5c3RlbS4gIEluCitwcmluY2lwbGUsIG9uZSBjb3VsZCByZXdyaXRlIHRoZSBzZWN0aW9ucyBvZiB0aGlzIG1hbnVhbCB0byBtYWtlCityZWZlcmVuY2Ugb25seSB0byAnRE9TLWNvbXBhdGlibGUnIHN5c3RlbXMsIGFuZCByZWZlciBwZW9wbGUgdG8gRnJlZURPUy4KKworSSwgZm9yIG9uZSwgd291bGQgYmUgaGFwcHkgdG8gcmVmZXIgcGVvcGxlIHRvIEZyZWVET1MsIHNpbmNlIGl0J3MgYSBuaWNlCitwcm9qZWN0IHRoYXQgY291bGQgcGxheSBhIHZhbHVhYmxlIHJvbGUgYW1vbmcgZnJlZSBvcGVyYXRpbmcgc3lzdGVtcworKGFjdHVhbGx5LCBpdCBkb2VzOiBpdCdzIHRoZSBET1Mga2VybmVsIGZvciBET1NFTVUpLiAgQnV0IHdvdWxkCityZXdvcmtpbmcgcmVmZXJlbmNlcyB0byBNUyBET1MgYW5kIGl0cyBwcm9nZW55IHRvIHJlZmVyIHRvIEZyZWVET1MganVzdAorYmUgYSBjbGV2ZXIgaGFjayBhcm91bmQgdGhlIEdOVSBzdGFuZGFyZHM/ICBJIGR1bm5vLi4uCisKKzxTaWdoPiAgU2NyZWVkIG92ZXIuCisKK05vdGVzIG9uIHBvc3NpYmxlICh1bmltcGxlbWVudGVkISkgbW9kaWZpY2F0aW9uczoKKworVGhlIG91dHB1dCBzYW1wbGVzIGZyb20gcGFydGVkJ3MgcHJpbnQgY29tbWFuZCwgZmRpc2sncyBwIGNvbW1hbmQsIGV0Yy4sCittaWdodCBiZSBtYWRlIGludG8gdGFibGVzIChtdWx0aS1jb2x1bW4gdGFibGVzKSB0byBlbnN1cmUgc3BpZmZ5IGZvcm1hdHRpbmcuCisKK0knZCBsaWtlIHRvIGZpbmQgYSB3YXkgdG8gbWFrZSAqZW50cnk6IHNlZSAqc3lub255bSB0eXBlIHJlZmVyZW5jZXMgaW4KK3RoZSBpbmRleCwgc28sIGUuZy4sIHRvIHJlZmVyIHBlb3BsZSBsb29raW5nIGZvciBBcHBsZSB0byBNYWNpbnRvc2gsIGFuZAorUG93ZXJQQyB0byBNYWNpbnRvc2gsIGV0Yy4gIFByb2JhYmx5IHRleGluZm8gZG9lcyB0aGlzIGFscmVhZHk7IEkgZHVubm8uCisKKworTm90ZXMgb24gZ2VuZXJhbCBmaXhlczoKKworUk1LOiB1c2FnZTogZWcgLT4gZS5nLiAgKCJlLmcuIiBpcyBjdXN0b21hcmlseSBzcGVsbGVkIHRodXMpLgorCitSTUs6IHVzYWdlOiAiaXRzIiBpcyBFbmdsaXNoIHBvc3Nlc3NpdmUgdGhpcmQgcGVyc29uIHNpbmd1bGFyIGFkamVjdGl2ZQorKGNmICJzZWluL2lociIsICJzb24vc2Evc2VzIikuICAiaXQncyIgaXMgYSBjb250cmFjdGlvbiBvZiAiaXQgaXMiLAoraS5lLiwgdGhpcmQgcGVyc29uIHNpbmd1bGFyIHByZXNlbnQgYWN0aXZlIGluZGljYXRpdmUgb2YgInRvIGJlIiAoY2YKKyJkYXMgaXN0IiwgImlsIGVzdCIpLiAgSSBob3BlIHRoYXQgZGVzY3JpcHRpb24gZG9lc24ndCBjb21lIG9mZiB0b28KK3Nub3R0eS4gIEkndmUgY2hhbmdlZCAnaXQncycgdG8gJ2l0cycgbW9yZSB0aW1lcyB0aGFuIG5vdGVkIGFib3ZlLgorCitSTUs6IHVzYWdlIChwdW5jdHVhdGlvbik6IGluIEVuZ2xpc2gsIGNvbW1hcyBhcmUgb25seSB1c2VkIHRvIHNlcGFyYXRlCityZWxhdGl2ZSBjbGF1c2VzIHdoZW4gdGhlIGluZm9ybWF0aW9uIGluIHRoZSBjbGF1c2UgaXMgZGVlbWVkCitub24tZXNzZW50aWFsIGZvciBpZGVudGlmeWluZyB0aGUgcmVmZXJlbnQgb2YgdGhlIG5vdW4gb24gd2hpY2ggdGhlCitjbGF1c2UgZGVwZW5kcyAoR2VybWFuIHVzZXMgY29tbWFzIGFyb3VuZCBldmVyeSByZWxhdGl2ZSBjbGF1c2UsIGJ5Citjb250cmFzdCkuICBTbzogIkkgaGF2ZSByZWFkIHRoZSBib29rIHRoYXQgd2FzIGFzc2lnbmVkIiBkb2Vzbid0IGhhdmUgYQorY29tbWEgYmVjYXVzZSB0aGUgY2xhdXNlICd0aGF0IHdhcyBhc3NpZ25lZCcgaXMgbmVlZGVkIHRvIGlkZW50aWZ5IHdoaWNoCitib29rIGlzIHRoZSBvYmplY3Qgb2YgJ3JlYWQnLCB3aGVyZWFzICJJIGhhdmUgcmVhZCB0aGUgYm9vaywgd2hpY2gKK3dhc24ndCB2ZXJ5IGdvb2QiIGltcGxpZXMgdGhhdCB0aGUgZmFjdCB0aGF0IHRoZSBib29rIHdhc24ndCB2ZXJ5IGdvb2QKK2lzIGV4dHJhIGluZm9ybWF0aW9uLCBub3QgcmVxdWlyZWQgZm9yIHRoZSBpZGVudGlmaWNhdGlvbiBvZiB0aGUgYm9vaywKK2UuZy4gaXRzIGlkZW50aXR5IGhhcyBhbHJlYWR5IGJlZW4gZXN0YWJsaXNoZWQpLgorCitAZW5kIGlnbm9yZQorCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvZG9jL3BhcnRlZC5pbmZvIGIvcGFydGVkLTEuOC43L2RvYy9wYXJ0ZWQuaW5mbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmJlZTJlCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2RvYy9wYXJ0ZWQuaW5mbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvZG9jL3BhcnRlZC50ZXhpIGIvcGFydGVkLTEuOC43L2RvYy9wYXJ0ZWQudGV4aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTMxN2NmCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2RvYy9wYXJ0ZWQudGV4aQpAQCAtMCwwICsxLDEyNDYgQEAKK1xpbnB1dCB0ZXhpbmZvICAgIEBjIC0qLXRleGluZm8tKi0KK0BjICUqKnN0YXJ0IG9mIGhlYWRlcgorQHNldGZpbGVuYW1lIHBhcnRlZC5pbmZvCitAc2V0dGl0bGUgUGFydGVkIFVzZXIncyBNYW51YWwKK0BpbmNsdWRlIHZlcnNpb24udGV4aQorQHBhcmFncmFwaGluZGVudCAyCitAYyAlKiplbmQgb2YgaGVhZGVyCisKK0BpZmluZm8KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIHVzZSBvZiBHTlUgUGFydGVkLCBhIHByb2dyYW0gZm9yIGNyZWF0aW5nLAorcmVzaXppbmcsIGNoZWNraW5nIGFuZCBjb3B5IHBhcnRpdGlvbnMgYW5kIGZpbGUgc3lzdGVtcyBvbiB0aGVtLgorQGVuZCBpZmluZm8KKworQGlmbm90dGV4IEBjIHRleGkycGRmIGRvbid0IHVuZGVyc3RhbmQgY29weWluZyBhbmQgaW5zZXJ0Y29weWluZyA/Pz8KK0BjIG1vZGlmaWNhdGlvbnMgbXVzdCBhbHNvIGJlIGRvbmUgaW4gdGhlIHRpdGxlcGFnZQorQGNvcHlpbmcKK0NvcHlyaWdodCBAY29weXJpZ2h0e30gMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNgorRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4xIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCBubworSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubyBCYWNrLUNvdmVyCitUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZCBgYEdOVQorRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KK0BlbmQgY29weWluZworQGMgV1RGIGRvZXMgdGhlIGluZm8gZ2V0IHRoZSBjb3B5aW5nIG91dHB1dCBhbmQgdGhlIHBsYWludGV4dCBvdXRwdXQgbm90ID8/Pz8KK0BpZnBsYWludGV4dAorQGluc2VydGNvcHlpbmcKK0BlbmQgaWZwbGFpbnRleHQKK0BlbmQgaWZub3R0ZXgKKworQGRpcmVudHJ5CisqIHBhcnRlZDogKHBhcnRlZCkuICAgICAgICAgICAgICAgICAgICAgICAgIEdOVSBwYXJ0aXRpb25pbmcgc29mdHdhcmUKK0BlbmQgZGlyZW50cnkKKworQHRpdGxlcGFnZQorQHRpdGxlIEdOVSBQYXJ0ZWQgVXNlciBNYW51YWwKK0BzdWJ0aXRsZSBHTlUgUGFydGVkLCB2ZXJzaW9uIEB2YWx1ZXtWRVJTSU9OfSwgQHZhbHVle1VQREFURUR9CitAYXV0aG9yIEFuZHJldyBDbGF1c2VuIEBlbWFpbHtjbGF1c2VuQEBnbnUub3JnfQorQGF1dGhvciBSaWNoYXJkIE0uIEtyZXV0ZXIgQGVtYWlse2tyZXV0ZXJAQGFuZHVyaWwucnV0Z2Vycy5lZHV9CitAYXV0aG9yIExlc2xpZSBQYXRyaWNrIFBvbHplciBAZW1haWx7cG9semVyQEBnbnUub3JnfQorCisKK0BjIEBwYWdlCitAYyBAdnNraXAgMHB0IHBsdXMgMWZpbGxsCisKK0BjIG1vZGlmaWNhdGlvbnMgbXVzdCBhbHNvIGJlIGRvbmUgaW4gdGhlIGNvcHlpbmcgYmxvY2sKK0NvcHlyaWdodCBAY29weXJpZ2h0e30gMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNQorRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4xIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCBubworSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubyBCYWNrLUNvdmVyCitUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZCBgYEdOVQorRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KK0BlbmQgdGl0bGVwYWdlCisKK0BpZm5vdHRleAorQG5vZGUgVG9wCitAdG9wIEdOVSBQYXJ0ZWQgVXNlciBNYW51YWwKKworQGMgV1RGIGRvZXNuJ3QgdGV4aTJodG1sIGluY2x1ZGUgdGhlIHRpdGxlcGFnZT8KK0BpZmh0bWwKK0BpbnNlcnRjb3B5aW5nIAorQGVuZCBpZmh0bWwKKworVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIHVzZSBvZiBHTlUgUGFydGVkLCBhIHByb2dyYW0gZm9yIGNyZWF0aW5nLAorZGVzdHJveWluZywgcmVzaXppbmcsIGNoZWNraW5nIGFuZCBjb3B5aW5nIGhhcmQgZHJpdmUgcGFydGl0aW9ucywgYW5kCit0aGUgZmlsZSBzeXN0ZW1zIG9uIHRoZW0uCisKK1RoaXMgZG9jdW1lbnQgYXBwbGllcyByb3VnaGx5IHRvIHZlcnNpb24gQHN0cm9uZ3tAdmFsdWV7VkVSU0lPTn19IG9mIEdOVSBQYXJ0ZWQuCisKK1RoZSBvcmlnaW5hbCB2ZXJzaW9uIHdhcyB3cml0dGVuIGJ5IEFuZHJldyBDbGF1c2VuIGluIHRleHQgZm9ybWF0LgorUmljaGFyZCBNLiBLcmV1dGVyIHRyYW5zbGF0ZWQgaXQgaW50byBUZXhpbmZvIGZvcm1hdCBpbiAyMDAyLCB0byBiZSBoZWF2aWx5CitlZGl0ZWQgYnkgTGVzbGllIFAuIFBvbHplciBpbiAyMDA2LgorQGVuZCBpZm5vdHRleAorCitAc2hvcnRjb250ZW50cworCitAbWVudQorKiBJbnRyb2R1Y3Rpb246OiAgICAgICAgICAgICAgICBPdmVydmlldworKiBVc2luZyBQYXJ0ZWQ6OiAgICAgICAgICAgICAgICBQYXJ0aXRpb25pbmcgYSBIYXJkIERyaXZlCisqIFJlbGF0ZWQgaW5mb3JtYXRpb246OiAgICAgICAgIEZ1cnRoZXIgcmVhZGluZyBvbiByZWxhdGVkIHRvcGljcworKiBDb3B5aW5nIFRoaXMgTWFudWFsOjogICAgICAgICBIb3cgdG8gbWFrZSBjb3BpZXMgb2YgdGhpcyBtYW51YWwKKyogSGlzdG9yeTo6ICAgICAgICAgICAgICAgICAgICAgVGhpcyBtYW51YWwncyBoaXN0b3J5CitAaWZub3RwbGFpbnRleHQKKyogSW5kZXg6OiAgICAgICAgICAgICAgICAgICAgICAgSW5kZXggb2YgcmVmZXJlbmNlZCBjb25jZXB0cworQGVuZCBpZm5vdHBsYWludGV4dAorQGVuZCBtZW51CisKK0Bub2RlICAgIEludHJvZHVjdGlvbgorQGNoYXB0ZXIgSW50cm9kdWN0aW9uCisKK0BtZW51CisqIE92ZXJ2aWV3OjogICAgICAgICAgICAgICAgICAgIEdOVSBQYXJ0ZWQgYW5kIHByZXJlcXVpc2l0ZSBrbm93bGVkZ2UKKyogU29mdHdhcmUgUmVxdWlyZWQ6OiAgICAgICAgICAgR05VIFBhcnRlZCdzIHNvZnR3YXJlIGRlcGVuZGVuY2llcworKiBTdXBwb3J0ZWQgUGxhdGZvcm1zOjogICAgICAgICBXaGVyZSB5b3UgY2FuIHVzZSBHTlUgUGFydGVkCisqIExpY2Vuc2U6OiAgICAgICAgICAgICAgICAgICAgIFdoYXQgeW91IG1heSBhbmQgbWF5IG5vdCBkbyB3aXRoIEdOVSBQYXJ0ZWQKKyogQ29tcGlsaW5nOjogICAgICAgICAgICAgICAgICAgSG93IHRvIGJ1aWxkIEdOVSBQYXJ0ZWQKKyogU3RhdGljIGJpbmFyaWVzOjogICAgICAgICAgICAgSG93IHRvIGdldCBhbmQgdXNlIGEgc3RhdGljIHZlcnNpb24gb2YgR05VCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcnRlZAorQGVuZCBtZW51CisKK0Bub2RlIE92ZXJ2aWV3CitAc2VjdGlvbiBPdmVydmlldyBvZiBHTlUgUGFydGVkCitAY2luZGV4IGRlc2NyaXB0aW9uIG9mIHBhcnRlZAorQGNpbmRleCBvdmVydmlldworQGNpbmRleCBwYXJ0ZWQgZGVzY3JpcHRpb24KK0BjaW5kZXggYnVncywgcmVwb3J0aW5nCitAY2luZGV4IHJlcG9ydGluZyBidWdzCitAY2luZGV4IGNvbnRhY3RpbmcgZGV2ZWxvcGVycworCitHTlUgUGFydGVkIGlzIGEgcHJvZ3JhbSBmb3IgY3JlYXRpbmcsIGRlc3Ryb3lpbmcsIHJlc2l6aW5nLCBjaGVja2luZworYW5kIGNvcHlpbmcgcGFydGl0aW9ucywgYW5kIHRoZSBmaWxlIHN5c3RlbXMgb24gdGhlbS4KKworVGhpcyBpcyB1c2VmdWwgZm9yIGNyZWF0aW5nIHNwYWNlIGZvciBuZXcgb3BlcmF0aW5nIHN5c3RlbXMsIGZvcgorcmVvcmdhbml6aW5nIGRpc2sgdXNhZ2UsIGZvciBjb3B5aW5nIGRhdGEgYmV0d2VlbiBoYXJkIGRpc2tzIGFuZCBmb3IKK2BgZGlzayBpbWFnaW5nJycgLS0tIHJlcGxpY2F0aW5nIGFuIGluc3RhbGxhdGlvbiBvbiBhbm90aGVyIGNvbXB1dGVyLgorCitUaGlzIGRvY3VtZW50YXRpb24gaXMgd3JpdHRlbiB3aXRoIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIHJlYWRlcgoraGFzIHNvbWUgdW5kZXJzdGFuZGluZyBvZiBwYXJ0aXRpb25pbmcgYW5kIGZpbGUgc3lzdGVtcy4gIElmIHlvdSB3YW50IHRvCitsZWFybiBtb3JlIGFib3V0IHRoZXNlLCB0aGUgdXBjb21pbmcgR05VIFN0b3JhZ2UgR3VpZGUgaXMgcmVjb21tZW5kZWQKK3JlYWRpbmcuCisKK0dOVSBQYXJ0ZWQgd2FzIGRlc2lnbmVkIHRvIG1pbmltaXplIHRoZSBjaGFuY2Ugb2YgZGF0YSBsb3NzLiAgRm9yCitleGFtcGxlLCBpdCB3YXMgZGVzaWduZWQgdG8gYXZvaWQgZGF0YSBsb3NzIGR1cmluZyBpbnRlcnJ1cHRpb25zIChsaWtlCitwb3dlciBmYWlsdXJlKSBhbmQgcGVyZm9ybXMgbWFueSBzYWZldHkgY2hlY2tzLiAgSG93ZXZlciwgdGhlcmUgY291bGQKK2JlIGJ1Z3MgaW4gR05VIFBhcnRlZCwgc28geW91IHNob3VsZCBiYWNrIHVwIHlvdXIgaW1wb3J0YW50IGZpbGVzIGJlZm9yZQorcnVubmluZyBQYXJ0ZWQuCitBbHNvIG5vdGUgdGhhdCByZWlzZXJmcyBzdXBwb3J0IHJlbGllcyBvbiBsaWJyZWlzZXJmcywgd2hpY2ggZG9lcyBub3QKK2Z1bGZpbCB0aGUgYWZvcmVtZW50aW9uZWQgcmVxdWlyZW1lbnQuICBUaGUgc2FtZSBob2xkcyBmb3IgYW55IGV4dGVybmFsCit0b29scyBsaWtlIEBrYmR7bnRmc3Jlc2l6ZX0uCisKK1RoZSBHTlUgUGFydGVkIGhvbWVwYWdlIGlzIEB1cmVme2h0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9wYXJ0ZWR9LiAgVGhlCitsaWJyYXJ5IGFuZCBmcm9udGVuZCB0aGVtc2VsdmVzIGNhbiBiZSBkb3dubG9hZGVkIGZyb20KK0B1cmVme2Z0cDovL2Z0cC5nbnUub3JnL2dudS9wYXJ0ZWR9LgorWW91IGNhbiBhbHNvIGZpbmQgYSBsaXN0aW5nIG9mIG1haWxpbmcgbGlzdHMsIG5vdGVzIGZvciBjb250cmlidXRpbmcgYW5kCittb3JlIHVzZWZ1bCBpbmZvcm1hdGlvbiBvbiB0aGUgd2ViIHNpdGUuCisKK1BsZWFzZSBzZW5kIGJ1ZyByZXBvcnRzIHRvIEBlbWFpbHtidWctcGFydGVkQEBnbnUub3JnfS4gIFdoZW4gc2VuZGluZyBidWcKK3JlcG9ydHMsIHBsZWFzZSBpbmNsdWRlIHRoZSB2ZXJzaW9uIG9mIEdOVSBQYXJ0ZWQuCitQbGVhc2UgaW5jbHVkZSB0aGUgb3V0cHV0IGZyb20gdGhlc2UgY29tbWFuZHMgKGZvciBkaXNrIEBmaWxley9kZXYvaGRhfSk6CisKK0BleGFtcGxlCitAZ3JvdXAKKyMgQGtiZHtwYXJ0ZWQgL2Rldi9oZGEgcHJpbnQgdW5pdCBzIHByaW50IHVuaXQgY2hzIHByaW50fQorQGVuZCBncm91cAorQGVuZCBleGFtcGxlCisKK0ZlZWwgZnJlZSB0byBhc2sgZm9yIGhlbHAgb24gdGhpcyBsaXN0IC0tLSBqdXN0IGNoZWNrIHRoYXQgeW91ciBxdWVzdGlvbgoraXNuJ3QgYW5zd2VyZWQgaGVyZSBmaXJzdC4gIElmIHlvdSBkb24ndCB1bmRlcnN0YW5kIHRoZSBkb2N1bWVudGF0aW9uLAorcGxlYXNlIHRlbGwgdXMsIHNvIHdlIGNhbiBleHBsYWluIGl0IGJldHRlci4gIEdlbmVyYWwgcGhpbG9zb3BoeSBpczoKK2lmIHlvdSBuZWVkIHRvIGFzayBmb3IgaGVscCwgdGhlbiBzb21ldGhpbmcgbmVlZHMgdG8gYmUgZml4ZWQgc28geW91CisoYW5kIG90aGVycykgZG9uJ3QgbmVlZCB0byBhc2sgZm9yIGhlbHAuCisKK0Fsc28sIHdlJ2QgbG92ZSB0byBoZWFyIHlvdXIgaWRlYXMgOi0pCisKK0Bub2RlIFNvZnR3YXJlIFJlcXVpcmVkCitAc2VjdGlvbiBTb2Z0d2FyZSBSZXF1aXJlZCBmb3IgdGhlIHVzZSBvZiBQYXJ0ZWQKK0BjaW5kZXggc29mdHdhcmUgZGVwZW5kZW5jaWVzCitAY2luZGV4IHJlcXVpcmVkIHNvZnR3YXJlCitAY2luZGV4IGxpYnV1aWQKK0BjaW5kZXggZTJmc3Byb2dzCitAY2luZGV4IHJlYWRsaW5lCitAY2luZGV4IGdldHRleHQKKworSWYgeW91J3JlIGluc3RhbGxpbmcgb3IgY29tcGlsaW5nIFBhcnRlZCB5b3Vyc2VsZiwgeW91J2xsIG5lZWQgdG8KK2hhdmUgc29tZSBvdGhlciBwcm9ncmFtcyBpbnN0YWxsZWQuICBJZiB5b3UgYXJlIGNvbXBpbGluZyBQYXJ0ZWQsCit5b3Ugd2lsbCBuZWVkIGJvdGggdGhlIG5vcm1hbCBhbmQgZGV2ZWwgcGFja2FnZXMgb2YgdGhlc2UgcHJvZ3JhbXMKK2luc3RhbGxlZDoKKworQGl0ZW1pemUgQGJ1bGxldAorCitAaXRlbSBsaWJ1dWlkLCBwYXJ0IG9mIHRoZSBlMmZzcHJvZ3MgcGFja2FnZS4gIElmIHlvdSBkb24ndCBoYXZlIHRoaXMsCit5b3UgY2FuIGdldCBpdCBmcm9tOgorCisJQHVyZWZ7aHR0cDovL3dlYi5taXQuZWR1L3R5dHNvL3d3dy9saW51eC9lMmZzcHJvZ3MuaHRtbH0KKworSWYgeW91IHdhbnQgdG8gY29tcGlsZSBQYXJ0ZWQgYW5kIGUyZnNwcm9ncywgbm90ZSB0aGF0IHlvdSB3aWxsIG5lZWQgdG8KK0BrYmR7bWFrZSBpbnN0YWxsfSBhbmQgQGtiZHttYWtlIGluc3RhbGwtbGlic30gZTJmc3Byb2dzLgorCitAaXRlbSBHTlUgUmVhZGxpbmUgKG9wdGlvbmFsKSwgYXZhaWxhYmxlIGZyb20KKworCUB1cmVme2Z0cDovL2Z0cC5nbnUub3JnL2dudS9yZWFkbGluZX0KKworSWYgeW91IGFyZSBjb21waWxpbmcgUGFydGVkLCBhbmQgeW91IGRvbid0IGhhdmUgcmVhZGxpbmUsIHlvdSBjYW4KK2Rpc2FibGUgUGFydGVkJ3MgcmVhZGxpbmUgc3VwcG9ydCB3aXRoIHRoZSBAa2Jkey0tZGlzYWJsZS1yZWFkbGluZX0KK29wdGlvbiBmb3IgQGNvbW1hbmR7Y29uZmlndXJlfS4KKworQGl0ZW0gR05VIGdldHRleHQgKG9yIGNvbXBhdGlibGUgc29mdHdhcmUpIGZvciBjb21waWxhdGlvbiwgaWYKK2ludGVybmF0aW9uYWxpc2F0aW9uIHN1cHBvcnQgaXMgZGVzaXJlZC4KKworCUB1cmVme2Z0cDovL2Z0cC5nbnUub3JnL2dudS9nZXR0ZXh0fQorCitAaXRlbSBsaWJyZWlzZXJmcywgaWYgeW91IHdhbnQgcmVpc2VyZnMgc3VwcG9ydDoKKworCUB1cmVme2h0dHA6Ly9yZWlzZXJmcy5vc2RuLm9yZy51YX0KKworTm90ZSB0aGF0IHBhcnRlZCB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IGxpYnJlaXNlcmZzIGF0IHJ1bnRpbWUsIGFuZCBlbmFibGUKK3JlaXNlcmZzIHN1cHBvcnQuICBsaWJyZWlzZXJmcyBpcyBuZXcsIGFuZCBoYXNuJ3QgYmVlbiB3aWRlbHkgdGVzdGVkIHlldC4KKworQGVuZCBpdGVtaXplCisKK0Bub2RlIFN1cHBvcnRlZCBQbGF0Zm9ybXMKK0BzZWN0aW9uIFBsYXRmb3JtcyBvbiB3aGljaCBHTlUgUGFydGVkIHJ1bnMKK0BjaW5kZXggc3VwcG9ydGVkIHBsYXRmb3JtcworQGNpbmRleCBwbGF0Zm9ybXMsIHN1cHBvcnRlZAorCitIb3BlZnVsbHksIHRoaXMgbGlzdCB3aWxsIGdyb3cgYSBsb3QuICBJZiB5b3UgZG8gbm90IGhhdmUgb25lIG9mIHRoZXNlCitwbGF0Zm9ybXMsIHRoZW4geW91IGNhbiB1c2UgYSByZXNjdWUgZGlzayBhbmQgYSBzdGF0aWMgYmluYXJ5IG9mIEdOVSBQYXJ0ZWQuCitAeHJlZntTdGF0aWMgYmluYXJpZXN9LgorCitAdGFibGUgQGFzaXMKK0BpdGVtIEdOVS9MaW51eAorTGludXggdmVyc2lvbnMgMi4wIGFuZCB1cCwgb24gQWxwaGEsIHg4NiBQQ3MsIFBDOTgsIE1hY2ludG9zaCBQb3dlclBDLCBTdW4gaGFyZHdhcmUuCisKK0BpdGVtIEdOVS9IdXJkCitAZW5kIHRhYmxlCisKK0dOVSBsaWJjIDIuMSBvciBoaWdoZXIgaXMgcmVxdWlyZWQuICBZb3UgY2FuIHByb2JhYmx5IHVzZSBvbGRlciB2ZXJzaW9ucworYnkgdXNpbmcgdGhlIEBzYW1wey0tZGlzYWJsZS1ubHN9IG9wdGlvbi4gQHhyZWZ7Q29tcGlsaW5nLCBCdWlsZGluZyBHTlUKK1BhcnRlZH0uIChOb3RlOiBJIHRoaW5rIHdlIGhhdmUgbm93IGRyb3BwZWQgdGhpcyByZXF1aXJlbWVudC4gIFRPRE86CitjaGVjayBpZiBsaWJjIDIuMCB3b3JrcyEpCisKK0Bub2RlIExpY2Vuc2UKK0BzZWN0aW9uIFRlcm1zIG9mIGRpc3RyaWJ1dGlvbiBmb3IgR05VIFBhcnRlZAorQGNpbmRleCBsaWNlbnNlIHRlcm1zCitAY2luZGV4IHRlcm1zIG9mIGRpc3RyaWJ1dGlvbgorQGNpbmRleCBnbnUgZ3BsCitAY2luZGV4IGdwbAorCitHTlUgUGFydGVkIGlzIGZyZWUgc29mdHdhcmUsIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitWZXJzaW9uIDIuICBUaGlzIHNob3VsZCBoYXZlIGJlZW4gaW5jbHVkZWQgd2l0aCB0aGUgUGFydGVkIGRpc3RyaWJ1dGlvbiwKK2luIHRoZSBDT1BZSU5HIGZpbGUuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCitMaWJwYXJ0ZWQgaXMgY29uc2lkZXJlZCBwYXJ0IG9mIEdOVSBQYXJ0ZWQuICBJdCBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UuICBJdCBpcyBOT1QgcmVsZWFzZWQgdW5kZXIgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgKExHUEwpLgorCitAbm9kZSBDb21waWxpbmcKK0BzZWN0aW9uIEJ1aWxkaW5nIEdOVSBQYXJ0ZWQKK0BjaW5kZXggY29tcGlsaW5nIHBhcnRlZAorQGNpbmRleCBidWlsZGluZyBwYXJ0ZWQKKworSWYgeW91IHdhbnQgdG8gY29tcGlsZSBHTlUgUGFydGVkLCB0aGlzIGlzIGdlbmVyYWxseSBkb25lIHdpdGg6CisKK0BleGFtcGxlCitAZ3JvdXAKKyQgQGtiZHsuL2NvbmZpZ3VyZX0KKyQgQGtiZHttYWtlfQorQGVuZCBncm91cAorQGVuZCBleGFtcGxlCisKK0hvd2V2ZXIsIHRoZXJlIGFyZSBhIGZldyBvcHRpb25zIGZvciBAY29tbWFuZHtjb25maWd1cmV9OgorCitAdGFibGUgQGNvZGUKK0BpdGVtIC0td2l0aG91dC1yZWFkbGluZQkJCit0dXJucyBvZmYgdXNlIG9mIHJlYWRsaW5lLiAgVGhpcyBpcyB1c2VmdWwgZm9yIG1ha2luZyByZXNjdWUgZGlza3MsCitldGMuLCB3aGVyZSBmZXcgbGlicmFyaWVzIGFyZSBhdmFpbGFibGUuCisKK0BpdGVtIC0tZGlzYWJsZS1kZWJ1ZworZG9uJ3QgaW5jbHVkZSBhc3NlcnRpb25zCisKK0BpdGVtIC0tZGlzYWJsZS1keW5hbWljLWxvYWRpbmcKK2Rpc2FibGVzIGR5bmFtaWMgbG9hZGluZyBvZiBzb21lIGxpYnJhcmllcyAob25seSBsaWJyZWlzZXJmcyBmb3Igbm93LAorYWx0aG91Z2ggd2UgaG9wZSB0byBleHBhbmQgdGhpcykuICBEeW5hbWljIGxvYWRpbmcgaXMgdXNlZnVsIGJlY2F1c2UgaXQKK2FsbG93cyB5b3UgdG8gcmV1c2UgbGlicGFydGVkIHNoYXJlZCBsaWJyYXJpZXMgZXZlbiB3aGVuIHlvdSBkb24ndCBrbm93CitpZiBzb21lIGxpYnJhcmllcyB3aWxsIGJlIGF2YWlsYWJsZS4gIEl0IGhhcyBhIHNtYWxsIG92ZXJoZWFkIChtYWlubHkKK2xpbmtpbmcgd2l0aCBsaWJkbCksIHNvIGl0IG1heSBiZSB1c2VmdWwgdG8gZGlzYWJsZSBpdCBvbiBib290ZGlza3MgaWYKK3lvdSBkb24ndCBuZWVkIHRoZSBmbGV4aWJpbGl0eS4KKworQGl0ZW0gLS1kaXNhYmxlLWZzCitkaXNhYmxlIGFsbCBmaWxlIHN5c3RlbSBzdXBwb3J0CisKK0BpdGVtIC0tZGlzYWJsZS1ubHMJCQkKK3R1cm5zIG9mZiBuYXRpdmUgbGFuZ3VhZ2Ugc3VwcG9ydC4gIFRoaXMgaXMgdXNlZnVsIGZvciB1c2Ugd2l0aCBvbGQKK3ZlcnNpb25zIG9mIGdsaWJjLCBvciBhIHRyaW1tZWQgZG93biB2ZXJzaW9uIG9mIGdsaWJjIHN1aXRhYmxlIGZvcgorcmVzY3VlIGRpc2tzLgorCitAaXRlbSAtLWRpc2FibGUtc2hhcmVkCQkKK3R1cm5zIG9mZiBzaGFyZWQgbGlicmFyaWVzLiAgVGhpcyBtYXkgYmUgbmVjZXNzYXJ5IGZvciB1c2Ugd2l0aCBvbGQKK3ZlcnNpb25zIG9mIEdOVSBsaWJjLCBpZiB5b3UgZ2V0IGEgY29tcGlsZSBlcnJvciBhYm91dCBhIGBgc3BpbGxlZAorcmVnaXN0ZXInJy4gIEFsc28gdXNlZnVsIGZvciBib290L3Jlc2N1ZSBkaXNrcy4KKworQGl0ZW0gLS1kaXNhYmxlLVdlcnJvcgoraWdub3JlIHdhcm5pbmcgbWVzc2FnZXMgaW4gY29tcGlsYXRpb24KKworQGl0ZW0gLS1lbmFibGUtZGlzY292ZXItb25seQorc3VwcG9ydCBvbmx5IHJlYWRpbmcvcHJvYmluZyAocmVkdWNlcyBzaXplIGNvbnNpZGVyYWJseSkKKworQGl0ZW0gLS1lbmFibGUtbXRyYWNlCitlbmFibGUgbWFsbG9jKCkgZGVidWdnaW5nCisKK0BpdGVtIC0tZW5hYmxlLXJlYWQtb25seQorZGlzYWJsZSB3cml0aW5nIChmb3IgZGVidWdnaW5nKQorCitAZW5kIHRhYmxlCisKK0Bub2RlIFN0YXRpYyBiaW5hcmllcworQHNlY3Rpb24gVXNpbmcgc3RhdGljIGJpbmFyaWVzIG9mIEdOVSBQYXJ0ZWQKK0BjaW5kZXggc3RhdGljIGJpbmFyeSAKK0BjaW5kZXggdW5zdXBwb3J0ZWQgcGxhdGZvcm1zCitAY2luZGV4IHJlc2l6aW5nIHJvb3QgZGV2aWNlCisKK0BzdWJzZWN0aW9uIEludHJvZHVjdGlvbgorSWYgeW91IHdhbnQgdG8gcnVuIEdOVSBQYXJ0ZWQgb24gYSBtYWNoaW5lIHdpdGhvdXQgR05VL0xpbnV4IGluc3RhbGxlZCwgb3IgeW91Cit3YW50IHRvIHJlc2l6ZSBhIHJvb3Qgb3IgYm9vdCBwYXJ0aXRpb24sIHlvdSB3aWxsIG5lZWQgdG8gdXNlIGEgYm9vdCBkaXNrLgorCitTcGVjaWFsIGJvb3QgZGlzayBpbWFnZXMgZm9yIEdOVSBQYXJ0ZWQgdXNlZCB0byBiZSBhdmFpbGFibGUsIGJ1dCB3aXRoIHRoZQorZW1lcmdlbmNlIG9mIGEgcGxldGhvcmEgb2YgcmVzY3VlIGRpc2tzIGFuZCBMaXZlIENEcyB0aGF0IGFsbAoraW5jbHVkZSBHTlUgUGFydGVkIHRoaXMgaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeS4KK0hvd2V2ZXIsIHBsZWFzZSBub3RlIHRoYXQgdGhlc2UgZGlza3Mgb2Z0ZW4gc2hpcCB3aXRoIG91dC1vZi1kYXRlCit2ZXJzaW9ucyBvZiBQYXJ0ZWQuICBUbyBjb21wZW5zYXRlIGZvciB0aGlzIGEgc3RhdGljIGJpbmFyeQorb2YgdGhlIGxhdGVzdCBHTlUgUGFydGVkIHZlcnNpb24gaXMgYXZhaWxhYmxlLCB3aGljaCB5b3UgY2FuIHVzZSB0aHVzOgorCitAYyBUaGVyZSBzaG91bGQgYmUgaW5zdHJ1Y3Rpb25zIGZvciBDRCBhbmQgVVNCIGhlcmUuCisKK0BzdWJzZWN0aW9uIENyZWF0aW5nIHRoZSBQYXJ0ZWQgZGlzaworQGVudW1lcmF0ZQorQGl0ZW0gQm9vdCB5b3VyIHN5c3RlbSAKKworQGl0ZW0gRG93bmxvYWQgQGZpbGV7cGFydGVkLXN0YXRpYy1WRVJTSU9OLnRnen0gZnJvbSBAdXJlZntmdHA6Ly9mdHAuZ251Lm9yZy9nbnUvcGFydGVkL3N0YXRpY30KK0BpdGVtIFVucGFjayB0aGUgdGFyYmFsbCwgcmVzdWx0aW5nIGluIGEgZmlsZSBjYWxsZWQgYGBwYXJ0ZWQuc3RhdGljIi4KKworQGl0ZW0gSW5zZXJ0IGEgZmxvcHB5LgorCitAaXRlbSBEbyBhIGxvdy1sZXZlbCBmb3JtYXQgb24gaXQgKG9uIEdOVS9MaW51eCB0aGlzIGNhbiBiZSBhY2hpZXZlZCB3aXRoCisgICAgICB0aGUgdG9vbCBgYGZkZm9ybWF0IiBmcm9tIHRoZSBgYHV0aWwtbGludXgiIHBhY2thZ2UuCisgICAgICBUaGlzIGlzIGJhc2ljYWxseSBhIHNhbml0eSBjaGVjayBiZWNhdXNlIGZsb3BweSBkaXNrcyBvZnRlbiAKKyAgICAgIGNvbnRhaW4gYmFkIGJsb2Nrcy4KKworQGl0ZW0gQ3JlYXRlIGEgZmlsZSBzeXN0ZW0uIEV4YW1wbGU6CisKK0BleGFtcGxlCiskIEBrYmR7cGFydGVkIC9kZXYvZmQwIG1rbGFiZWwgbG9vcCBta3BhcnRmcyBwcmltYXJ5IGV4dDIgMCAxLjR9CitAZW5kIGV4YW1wbGUKKworQGl0ZW0gTW91bnQgdGhlIGZsb3BweSBkaXNrLCBlLmcuLAorCitAZXhhbXBsZQorJCBAa2Jke21vdW50IC10IGV4dDIgL2Rldi9mZDAgL21udC9mbG9wcHl9CitAZW5kIGV4YW1wbGUKKworQGl0ZW0gQ29weSBAZmlsZXtwYXJ0ZWQuc3RhdGljfSB0byB0aGUgZmxvcHB5LCBlLmcuLAorCitAZXhhbXBsZQorJCBAa2Jke2NwIHBhcnRlZC5zdGF0aWMgL21udC9mbG9wcHl9CitAZW5kIGV4YW1wbGUKKworQGl0ZW0gVW5tb3VudCB0aGUgZmxvcHB5LCBlLmcuLAorCitAZXhhbXBsZQorJCBAa2Jke3Vtb3VudCAvbW50L2Zsb3BweX0KK0BlbmQgZXhhbXBsZQorQGVuZCBlbnVtZXJhdGUKKworQHN1YnNlY3Rpb24gVXNpbmcgdGhlIFBhcnRlZCBkaXNrCitAZW51bWVyYXRlCitAaXRlbSBDaG9vc2UgYSByZXNjdWUgZGlzayB0aGF0IHN1aXRzIHlvdS4gCisKK0BpdGVtIEJvb3Qgb2ZmIHlvdXIgcmVzY3VlIGRpc2suICBNb3VudCB0aGUgZGlzayB5b3UgY29waWVkIFBhcnRlZCBvbnRvLgorCitAaXRlbSBSdW4gUGFydGVkLiAgRm9yIGV4YW1wbGUsCisKK0BleGFtcGxlCisjIEBrYmR7Y2QgL21udC9mbG9wcHl9CisjIEBrYmR7Li9wYXJ0ZWQtc3RhdGljfQorQGVuZCBleGFtcGxlCitAZW5kIGVudW1lcmF0ZQorCitAbm9kZSAgICBVc2luZyBQYXJ0ZWQKK0BjaGFwdGVyIFVzaW5nIFBhcnRlZAorQGNpbmRleCBjb21tYW5kcworCitAbWVudQorKiBQYXJ0aXRpb25pbmc6OiAgICAgICAgICAgICAgICAgICAgRGlzayBwYXJ0aXRpb25pbmcgaW4gY29udGV4dAorKiBSdW5uaW5nIFBhcnRlZDo6ICAgICAgICAgICAgICAgICAgUGFydGl0aW9uaW5nIHdpdGggUGFydGVkCisqIEludm9raW5nIFBhcnRlZDo6ICAgICAgICAgICAgICAgICBQYXJ0ZWQncyBpbnZvY2F0aW9uIG9wdGlvbnMgYW5kIGNvbW1hbmRzCisqIENvbW1hbmQgZXhwbGFuYXRpb25zOjogICAgICAgICAgICBGdWxsIGV4cGxhbmF0aW9uIG9mIHBhcnRlZCdzIGNvbW1hbmRzCitAZW5kIG1lbnUKKworQG5vZGUgUGFydGl0aW9uaW5nCitAc2VjdGlvbiBJbnRyb2R1Y3Rpb24gdG8gUGFydGl0aW9uaW5nIAorQGNpbmRleCBwYXJ0aXRpb25pbmcgb3ZlcnZpZXcKKworVW5mb3J0dW5hdGVseSwgcGFydGl0aW9uaW5nIHlvdXIgZGlzayBpcyByYXRoZXIgY29tcGxpY2F0ZWQuICBUaGlzIGlzCitiZWNhdXNlIHRoZXJlIGFyZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiBtYW55IGRpZmZlcmVudCBzeXN0ZW1zIHRoYXQgbmVlZAordG8gYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uLgorCitUaGlzIG1hbnVhbCB1c2VkIHRvIGludHJvZHVjZSB0aGUgcmVhZGVyIHRvIHRoZXNlIHN5c3RlbXMgYW5kIHRoZWlyCit3b3JraW5nLiAgVGhpcyBjb250ZW50IGhhcyBtb3ZlZCB0byB0aGUgR05VIFN0b3JhZ2UgR3VpZGUuCisKK0Bub2RlIFJ1bm5pbmcgUGFydGVkCitAc2VjdGlvbiBVc2luZyBHTlUgUGFydGVkCitAY2luZGV4IG1vZGVzIG9mIHVzZQorCitQYXJ0ZWQgaGFzIHR3byBtb2RlczogY29tbWFuZCBsaW5lIGFuZCBpbnRlcmFjdGl2ZS4gIFBhcnRlZCBzaG91bGQKK2Fsd2F5cyBiZSBzdGFydGVkIHdpdGg6CisKK0BleGFtcGxlCisjIEBrYmR7cGFydGVkIEB2YXJ7ZGV2aWNlfX0KK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQgd2hlcmUgQHZhcntkZXZpY2V9IGlzIHRoZSBoYXJkIGRpc2sgZGV2aWNlIHRvIGVkaXQuICAoSWYgeW91J3JlCitsYXp5IGFuZCBvbWl0IHRoZSBERVZJQ0UgYXJndW1lbnQsIFBhcnRlZCB3aWxsIGF0dGVtcHQgdG8gZ3Vlc3Mgd2hpY2gKK2RldmljZSB5b3Ugd2FudC4pCisKK0luIGNvbW1hbmQgbGluZSBtb2RlLCB0aGlzIGlzIGZvbGxvd2VkIGJ5IG9uZSBvciBtb3JlIGNvbW1hbmRzLiAgRm9yCitleGFtcGxlOgorCitAZXhhbXBsZQorIyBAa2Jke3BhcnRlZCAvZGV2L3NkYSByZXNpemUgMSA1Mk1iIDEwNE1iIG1rZnMgMiBmYXQxNn0KK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQgT3B0aW9ucyAobGlrZSBAa2Jkey0taGVscH0pIGNhbiBvbmx5IGJlIHNwZWNpZmllZCBvbiB0aGUKK2NvbW1hbmQgbGluZS4KKworSW4gaW50ZXJhY3RpdmUgbW9kZSwgY29tbWFuZHMgYXJlIGVudGVyZWQgb25lIGF0IGEgdGltZSBhdCBhIHByb21wdCwgYW5kCittb2RpZnkgdGhlIGRpc2sgaW1tZWRpYXRlbHkuICBGb3IgZXhhbXBsZToKKworQGV4YW1wbGUKKyhwYXJ0ZWQpIEBrYmR7cmVzaXplIDEgNTIuMDAwNU1iIDEwNC41TWJ9CisocGFydGVkKSBAa2Jke21rZnMgMiBmYXQxNn0KK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQgVW5hbWJpZ3VvdXMgYWJicmV2aWF0aW9ucyBhcmUgYWxsb3dlZC4gIEZvciBleGFtcGxlLCB5b3UgY2FuCit0eXBlIGBgcCcnIGluc3RlYWQgb2YgYGBwcmludCcnLCBhbmQgYGByZXNpJycgaW5zdGVhZCBvZiBgYHJlc2l6ZScnLgorQ29tbWFuZHMgY2FuIGJlIHR5cGVkIGVpdGhlciBpbiBFbmdsaXNoLCBvciB5b3VyIG5hdGl2ZSBsYW5ndWFnZSAoaWYKK3lvdXIgbGFuZ3VhZ2UgaGFzIGJlZW4gdHJhbnNsYXRlZCkuICBUaGlzIG1heSBjcmVhdGUgYW1iaWd1aXRpZXMuCitDb21tYW5kcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZS4KKworTnVtYmVycyBpbmRpY2F0aW5nIHBhcnRpdGlvbiBsb2NhdGlvbnMgY2FuIGJlIHdob2xlIG51bWJlcnMgb3IgZGVjaW1hbHMuCitUaGUgc3VmZml4IHNlbGVjdHMgdGhlIHVuaXQsIHdoaWNoIG1heSBiZSBvbmUgb2YgdGhvc2UgZGVzY3JpYmVkIGluCitAcmVme3VuaXR9LCBleGNlcHQgQ0hTIGFuZCBjb21wYWN0LiAgSWYgbm8gc3VmZml4IGlzIGdpdmVuLCB0aGVuIHRoZSBkZWZhdWx0Cit1bml0IGlzIGFzc3VtZWQuICBOZWdhdGl2ZSBudW1iZXJzIGNvdW50IGJhY2sgZnJvbSB0aGUgZW5kIG9mIHRoZSBkaXNrLAord2l0aCBgYC0xcycnIGluZGljYXRpbmcgdGhlIGVuZCBvZiB0aGUgZGlzay4gIFBhcnRlZCB3aWxsIGNvbXB1dGUgc2Vuc2libGUKK3JhbmdlcyBmb3IgdGhlIGxvY2F0aW9ucyB5b3Ugc3BlY2lmeSAoZS5nLiBhIHJhbmdlIG9mICsvLSA1MDAgTUIgd2hlbiB5b3UKK3NwZWNpZnkgdGhlIGxvY2F0aW9uIGluIGBgRycnKS4gVXNlIHRoZSBzZWN0b3IgdW5pdCBgYHMnJyB0byBzcGVjaWZ5IGV4YWN0Citsb2NhdGlvbnMuCisKK0lmIHlvdSBkb24ndCBnaXZlIGEgcGFyYW1ldGVyIHRvIGEgY29tbWFuZCwgUGFydGVkIHdpbGwgcHJvbXB0IHlvdSBmb3IgaXQuCitGb3IgZXhhbXBsZToKKworQGV4YW1wbGUKKyhwYXJ0ZWQpIEBrYmR7cmVzaXplIDF9CitTdGFydD8gQGtiZHswR2J9CitFbmQ/IEBrYmR7NDBHYn0KK0BlbmQgZXhhbXBsZQorCitQYXJ0ZWQgd2lsbCBhbHdheXMgd2FybiB5b3UgYmVmb3JlIGRvaW5nIHNvbWV0aGluZyB0aGF0IGlzIHBvdGVudGlhbGx5CitkYW5nZXJvdXMsIHVubGVzcyB0aGUgY29tbWFuZCBpcyBvbmUgb2YgdGhvc2UgdGhhdCBpcyBpbmhlcmVudGx5CitkYW5nZXJvdXMgKHZpei4sIHJtLCBta2xhYmVsIGFuZCBta2ZzKS4gIEZvciBleGFtcGxlLCBpZiB5b3UgYXR0ZW1wdCB0bworc2hyaW5rIGEgcGFydGl0aW9uIGBgdG9vIG11Y2gnJyAoaS5lLiwgYnkgbW9yZSB0aGFuIHRoZSBmcmVlIHNwYWNlCithdmFpbGFibGUpLCBQYXJ0ZWQgd2lsbCBhdXRvbWF0aWNhbGx5IHJlZHVjZSB0aGUgc2hyaW5rYWdlIHNvIHRoYXQgdGhlCitwYXJ0aXRpb24gaXMgdGhlIHNtYWxsZXN0IGl0IGNhbiBiZSB3aXRob3V0IGxvc2luZyBkYXRhLiAgSWYgdGhpcyBzaXplIGlzCitzaWduaWZpY2FudGx5IGRpZmZlcmVudCBmcm9tIHRoZSBzaXplIHJlcXVlc3RlZCwgUGFydGVkIHdpbGwgd2FybiB5b3UuCitTaW5jZSBtYW55IHBhcnRpdGlvbmluZyBzeXN0ZW1zIGhhdmUgY29tcGxpY2F0ZWQgY29uc3RyYWludHMsIFBhcnRlZCB3aWxsCit1c3VhbGx5IGRvIHNvbWV0aGluZyBzbGlnaHRseSBkaWZmZXJlbnQgdG8gd2hhdCB5b3UgYXNrZWQuICAoRm9yIGV4YW1wbGUsCitjcmVhdGUgYSBwYXJ0aXRpb24gc3RhcnRpbmcgYXQgMTAuMzUyTWIsIG5vdCAxMC40TWIpCitJZiB0aGUgY2FsY3VsYXRlZCB2YWx1ZXMgZGlmZmVyIHRvbyBtdWNoLCBQYXJ0ZWQgd2lsbCBhc2sgeW91IGZvcgorY29uZmlybWF0aW9uLgorCitAbm9kZSBJbnZva2luZyBQYXJ0ZWQKK0BzZWN0aW9uIENvbW1hbmQgTGluZSBPcHRpb25zCitAY2luZGV4IG9wdGlvbnMgYXQgaW52b2NhdGlvbgorQGNpbmRleCBjb21tYW5kcywgb3ZlcnZpZXcKK0BjaW5kZXggaW52b2NhdGlvbiBvcHRpb25zCisKK1doZW4gaW52b2tlZCBmcm9tIHRoZSBjb21tYW5kIGxpbmUsIFBhcnRlZCBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIHN5bnRheDoKKworQGV4YW1wbGUKKyMgQGtiZHtwYXJ0ZWQgW0B2YXJ7b3B0aW9ufV0gQHZhcntkZXZpY2V9IFtAdmFye2NvbW1hbmR9IFtAdmFye2FyZ3VtZW50fV1dfQorQGVuZCBleGFtcGxlCisKK0F2YWlsYWJsZSBvcHRpb25zIGFuZCBjb21tYW5kcyBmb2xsb3cuICBGb3IgZGV0YWlsZWQgZXhwbGFuYXRpb25zIG9mIHRoZQordXNlIG9mIFBhcnRlZCBjb21tYW5kcywgc2VlIEByZWZ7Q29tbWFuZCBleHBsYW5hdGlvbnN9LiBPcHRpb25zIGJlZ2luCit3aXRoIGEgaHlwaGVuLCBjb21tYW5kcyBkbyBub3Q6CisKK09wdGlvbnM6CisKK0B0YWJsZSBAc2FtcAorQGl0ZW0gLWgKK0BpdGVteCAtLWhlbHAKK2Rpc3BsYXkgYSBoZWxwIG1lc3NhZ2UKKworQGl0ZW0gLWkKK0BpdGVteCAtLWludGVyYWN0aXZlCitwcm9tcHQgZm9yIHVzZXIgaW50ZXJ2ZW50aW9uCisKK0BpdGVtIC1zCitAaXRlbXggLS1zY3JpcHQKK25ldmVyIHByb21wdCB0aGUgdXNlcgorCitAaXRlbSAtdgorQGl0ZW14IC0tdmVyc2lvbgorZGlzcGxheSB0aGUgdmVyc2lvbgorQGVuZCB0YWJsZQorCitAbm9kZSBDb21tYW5kIGV4cGxhbmF0aW9ucworQHNlY3Rpb24gUGFydGVkIFNlc3Npb24gQ29tbWFuZHMKK0BjaW5kZXggY29tbWFuZCBzeW50YXgKK0BjaW5kZXggZGV0YWlsZWQgY29tbWFuZCBsaXN0aW5nCitAY2luZGV4IGNvbW1hbmRzLCBkZXRhaWxlZCBsaXN0aW5nCisKK0dOVSBQYXJ0ZWQgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBjb21tYW5kczoKKworQG1lbnUKKyogY2hlY2s6OgorKiBjcDo6CisqIGhlbHA6OgorKiBta2xhYmVsOjoKKyogbWtmczo6CisqIG1rcGFydDo6CisqIG1rcGFydGZzOjoKKyogbW92ZTo6CisqIG5hbWU6OgorKiBwcmludDo6CisqIHF1aXQ6OgorKiByZXNjdWU6OgorKiByZXNpemU6OgorKiBybTo6CisqIHNlbGVjdDo6CisqIHNldDo6CisqIHVuaXQ6OgorQGVuZCBtZW51CisKK0Bub2RlIGNoZWNrCitAc3Vic2VjdGlvbiBjaGVjaworQGNpbmRleCBjaGVjaywgY29tbWFuZCBkZXNjcmlwdGlvbgorQGNpbmRleCBjb21tYW5kIGRlc2NyaXB0aW9uLCBjaGVjaworCitAZGVmZm4gQ29tbWFuZCBjaGVjayBAdmFye251bWJlcn0KKworQ2hlY2tzIGlmIHRoZSBmaWxlIHN5c3RlbSBvbiBwYXJ0aXRpb24gQHZhcntudW1iZXJ9IGhhcworYW55IGVycm9ycy4KKworRXhhbXBsZToKKworQGV4YW1wbGUKKyhwYXJ0ZWQpIEBrYmR7Y2hlY2sgMX0KK0BlbmQgZXhhbXBsZQorCitDaGVjayB0aGUgZmlsZSBzeXN0ZW0gb24gcGFydGl0aW9uIDEuCitAZW5kIGRlZmZuCisKK0Bub2RlIGNwCitAc3Vic2VjdGlvbiBjcAorQGNpbmRleCBjcCwgY29tbWFuZCBkZXNjcmlwdGlvbgorQGNpbmRleCBjb21tYW5kIGRlc2NyaXB0aW9uLCBjcAorCitAZGVmZm4gQ29tbWFuZCBjcCBbQHZhcntmcm9tLWRldmljZX1dIEB2YXJ7ZnJvbS1udW1iZXJ9IEB2YXJ7dG8tbnVtYmVyfQorCitDb3BpZXMgdGhlIGZpbGUgc3lzdGVtIG9uIHRoZSBwYXJ0aXRpb24gQHZhcntmcm9tLW51bWJlcn0gdG8gcGFydGl0aW9uCitAdmFye3RvLW51bWJlcn0sIGRlbGV0aW5nIHRoZSBvcmlnaW5hbCBjb250ZW50cyBvZiB0aGUgZGVzdGluYXRpb24KK3BhcnRpdGlvbi4KKworQW4gb3B0aW9uYWwgZGV2aWNlIHBhcmFtZXRlciwgQHZhcntmcm9tLWRldmljZX0gY2FuIGJlIGdpdmVuLCB3aGljaAorc3BlY2lmaWVzIHdoaWNoIGRldmljZSB0aGUgc291cmNlIHBhcnRpdGlvbiBpcyBvbi4KKworU3VwcG9ydGVkIGZpbGUgc3lzdGVtczoKK0BpdGVtaXplIEBidWxsZXQKK0BpdGVtIGV4dDIsIGV4dDMKKyhwcm92aWRlZCB0aGUgZGVzdGluYXRpb24gcGFydGl0aW9uIGlzIGxhcmdlciB0aGFuIHRoZSBzb3VyY2UgcGFydGl0aW9uKQorCitAaXRlbSBmYXQxNiwgZmF0MzIKK0BpdGVtIGxpbnV4LXN3YXAJCisoZXF1aXZhbGVudCB0byBta3N3YXAgb24gZGVzdGluYXRpb24gcGFydGl0aW9uKQorQGl0ZW0gcmVpc2VyZnMgKGlmIGxpYnJlaXNlcmZzIGlzIGluc3RhbGxlZCkKKworQGVuZCBpdGVtaXplCisKK0V4YW1wbGU6CisKK0BleGFtcGxlCisocGFydGVkKSBAa2Jke2NwIC9kZXYvaGRiIDIgM30KK0BlbmQgZXhhbXBsZQorCitAYyBGSVhNRTogdGhpcyBkb2Vzbid0IGZvcm1hdCByaWdodC4KK0NvcHkgcGFydGl0aW9uIDIgb2YgQGZpbGV7L2Rldi9oZGJ9IChpLmUuLCBAZmlsZXsvZGV2L2hkYjJ9KSB0byBwYXJ0aXRpb24KK29uIDMsIG9uIHRoZSBkZXZpY2UgUGFydGVkIHdhcyBsb2FkZWQgd2l0aCwgZGVzdHJveWluZyB0aGUgb3JpZ2luYWwKK2NvbnRlbnRzIG9mIHBhcnRpdGlvbiAzLgorQGVuZCBkZWZmbgorCitAbm9kZSBoZWxwCitAc3Vic2VjdGlvbiBoZWxwCitAY2luZGV4IGhlbHAsIGNvbW1hbmQgZGVzY3JpcHRpb24KK0BjaW5kZXggY29tbWFuZCBkZXNjcmlwdGlvbiwgaGVscAorCitAZGVmZm4gQ29tbWFuZCBoZWxwIFtAdmFye2NvbW1hbmR9XQorCitQcmludHMgZ2VuZXJhbCBoZWxwLCBvciBoZWxwIG9uIEB2YXJ7Y29tbWFuZH0uCisKK0V4YW1wbGU6CisKK0BleGFtcGxlCisocGFydGVkKSBAa2Jke2hlbHAgcmVzaXplfQorQGVuZCBleGFtcGxlCisKK1ByaW50IGhlbHAgZm9yIHRoZSByZXNpemUgY29tbWFuZC4KK0BlbmQgZGVmZm4KKworQG5vZGUgbWtsYWJlbAorQHN1YnNlY3Rpb24gbWtsYWJlbAorQGNpbmRleCBta2xhYmVsLCBjb21tYW5kIGRlc2NyaXB0aW9uCitAY2luZGV4IGNvbW1hbmQgZGVzY3JpcHRpb24sIG1raW5kZXgKKworQGRlZmZuIENvbW1hbmQgbWtsYWJlbCBAdmFye2xhYmVsLXR5cGV9CisKK0NyZWF0ZXMgYSBuZXcgZGlzayBsYWJlbCwgb2YgdHlwZSBAdmFye2xhYmVsLXR5cGV9LiAgVGhlIG5ldyBkaXNrIGxhYmVsCit3aWxsIGhhdmUgbm8gcGFydGl0aW9ucy4gIFRoaXMgY29tbWFuZCAobm9ybWFsbHkpIHdvbid0IHRlY2huaWNhbGx5CitkZXN0cm95IHlvdXIgZGF0YSwgYnV0IGl0IHdpbGwgbWFrZSBpdCBiYXNpY2FsbHkgdW51c2FibGUsCithbmQgeW91IHdpbGwgbmVlZCB0byB1c2UgdGhlIHJlc2N1ZSBjb21tYW5kIChAcHhyZWZ7UmVsYXRlZCBpbmZvcm1hdGlvbn0pCit0byByZWNvdmVyIGFueSBwYXJ0aXRpb25zLgorUGFydGVkIHdvcmtzIG9uIGFsbCBwYXJ0aXRpb24gdGFibGVzLiAgQGZvb3Rub3Rle0V2ZXJ5b25lIHNlZW1zIHRvCitoYXZlIGEgZGlmZmVyZW50IHdvcmQgZm9yIGBgZGlzayBsYWJlbCcnIC0tLSB0aGVzZSBhcmUgYWxsIHRoZSBzYW1lCit0aGluZzogcGFydGl0aW9uIHRhYmxlLCBwYXJ0aXRpb24gbWFwLn0KKworQHZhcntsYWJlbC10eXBlfSBtdXN0IGJlIG9uZSBvZiB0aGVzZSBzdXBwb3J0ZWQgZGlzayBsYWJlbHM6CitAaXRlbWl6ZSBAYnVsbGV0CitAaXRlbSBic2QKK0BpdGVtIGxvb3AgKHJhdyBkaXNrIGFjY2VzcykKK0BpdGVtIGdwdAorQGl0ZW0gbWFjCitAaXRlbSBtc2RvcworQGl0ZW0gcGM5OAorQGl0ZW0gc3VuCitAZW5kIGl0ZW1pemUKKworRXhhbXBsZToKKworQGV4YW1wbGUKKyhwYXJ0ZWQpIEBrYmR7bWtsYWJlbCBtc2Rvc30KK0BlbmQgZXhhbXBsZQorCitDcmVhdGUgYW4gTVMtRE9TIGRpc2sgbGFiZWwuICBUaGlzIGlzIHN0aWxsIHRoZSBtb3N0IGNvbW1vbiBkaXNrIGxhYmVsIGZvcgorUENzLgorQGVuZCBkZWZmbgorCitAbm9kZSBta2ZzCitAc3Vic2VjdGlvbiBta2ZzCitAY2luZGV4IG1rZnMsIGNvbW1hbmQgZGVzY3JpcHRpb24KK0BjaW5kZXggY29tbWFuZCBkZXNjcmlwdGlvbiwgbWtmcworCitAZGVmZm4gQ29tbWFuZCBta2ZzIEB2YXJ7bnVtYmVyfSBAdmFye2ZzLXR5cGV9CisKK01ha2VzIGEgZmlsZSBzeXN0ZW0gQHZhcntmcy10eXBlfSBvbiBwYXJ0aXRpb24gQHZhcntudW1iZXJ9LCBkZXN0cm95aW5nCithbGwgZGF0YSB0aGF0IHJlc2lkZXMgb24gdGhhdCBwYXJ0aXRpb24uCisKK1N1cHBvcnRlZCBmaWxlIHN5c3RlbXM6CitAaXRlbWl6ZSBAYnVsbGV0CitAaXRlbSBleHQyCitAaXRlbSBmYXQxNiwgZmF0MzIKK0BpdGVtIGxpbnV4LXN3YXAKK0BpdGVtIHJlaXNlcmZzIChpZiBsaWJyZWlzZXJmcyBpcyBpbnN0YWxsZWQpCitAZW5kIGl0ZW1pemUKKworRXhhbXBsZToKKworQGV4YW1wbGUKKyhwYXJ0ZWQpIEBrYmR7bWtmcyAyIGZhdDMyfQorQGVuZCBleGFtcGxlCisKK01ha2UgYSBAdmFye2ZhdDMyfSBmaWxlIHN5c3RlbSBvbiBwYXJ0aXRpb24gMi4KK0BlbmQgZGVmZm4KKworQG5vZGUgbWtwYXJ0CitAc3Vic2VjdGlvbiBta3BhcnQKK0BjaW5kZXggbWtwYXJ0LCBjb21tYW5kIGRlc2NyaXB0aW9uCitAY2luZGV4IGNvbW1hbmQgZGVzY3JpcHRpb24sIG1rcGFydAorCitAZGVmZm4gQ29tbWFuZCBta3BhcnQgQHZhcntwYXJ0LXR5cGV9IFtAdmFye2ZzLXR5cGV9XSBAdmFye3N0YXJ0fSBAdmFye2VuZH0KKworQ3JlYXRlcyBhIG5ldyBwYXJ0aXRpb24sIEBlbXBoe3dpdGhvdXR9IGNyZWF0aW5nIGEgbmV3IGZpbGUgc3lzdGVtIG9uCit0aGF0IHBhcnRpdGlvbi4gIFRoaXMgaXMgdXNlZnVsIGZvciBjcmVhdGluZyBwYXJ0aXRpb25zIGZvciBmaWxlIHN5c3RlbXMKKyhvciBMVk0sIGV0Yy4pIHRoYXQgUGFydGVkIGRvZXNuJ3Qgc3VwcG9ydC4gIFlvdSBtYXkgc3BlY2lmeSBhIGZpbGUKK3N5c3RlbSB0eXBlLCB0byBzZXQgdGhlIGFwcHJvcHJpYXRlIHBhcnRpdGlvbiBjb2RlIGluIHRoZSBwYXJ0aXRpb24KK3RhYmxlIGZvciB0aGUgbmV3IHBhcnRpdGlvbi4gIEB2YXJ7ZnMtdHlwZX0gaXMgcmVxdWlyZWQgZm9yIGRhdGEKK3BhcnRpdGlvbnMgKGkuZS4sIG5vbi1leHRlbmRlZCBwYXJ0aXRpb25zKS4gIEB2YXJ7c3RhcnR9IGFuZCBAdmFye2VuZH0KK2FyZSB0aGUgb2Zmc2V0IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgZGlzaywgdGhhdCBpcywgdGhlIGBgZGlzdGFuY2UnJworZnJvbSB0aGUgc3RhcnQgb2YgdGhlIGRpc2suCisKK0B2YXJ7cGFydC10eXBlfSBpcyBvbmUgb2Y6IHByaW1hcnksIGV4dGVuZGVkLCBsb2dpY2FsLiAgRXh0ZW5kZWQgYW5kCitsb2dpY2FsIGFyZSBvbmx5IHVzZWQgZm9yIG1zZG9zIGFuZCBkdmggZGlzayBsYWJlbHMuCisKK0B2YXJ7ZnMtdHlwZX0gbXVzdCBiZSBvbiBvZiB0aGVzZSBzdXBwb3J0ZWQgZmlsZSBzeXN0ZW1zOgorQGl0ZW1pemUgQGJ1bGxldAorQGl0ZW0gZXh0MgorQGl0ZW0gZmF0MTYsIGZhdDMyCitAaXRlbSBoZnMsIGhmcyssIGhmc3gKK0BpdGVtIGxpbnV4LXN3YXAKK0BpdGVtIE5URlMKK0BpdGVtIHJlaXNlcmZzCitAaXRlbSB1ZnMKK0BlbmQgaXRlbWl6ZQorCitFeGFtcGxlOgorCitAZXhhbXBsZQorKHBhcnRlZCkgQGtiZHtta3BhcnQgbG9naWNhbCAwLjAgNjkyLjF9CitAZW5kIGV4YW1wbGUKKworQ3JlYXRlIGEgbG9naWNhbCBwYXJ0aXRpb24gdGhhdCB3aWxsIGNvbnRhaW4gYW4gZXh0MiBmaWxlIHN5c3RlbS4gIFRoZQorcGFydGl0aW9uIHdpbGwgc3RhcnQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZGlzaywgYW5kIGVuZCA2OTIuMQorbWVnYWJ5dGVzIGludG8gdGhlIGRpc2suCisKK0BlbmQgZGVmZm4KKworQG5vZGUgbWtwYXJ0ZnMKK0BzdWJzZWN0aW9uIG1rcGFydGZzCitAY2luZGV4IG1rcGFydGZzLCBjb21tYW5kIGRlc2NyaXB0aW9uCitAY2luZGV4IGNvbW1hbmQgZGVzY3JpcHRpb24sIG1rcGFydGZzCisKK0BkZWZmbiBDb21tYW5kIG1rcGFydGZzIEB2YXJ7cGFydC10eXBlfSBAdmFye2ZzLXR5cGV9IEB2YXJ7c3RhcnR9IEB2YXJ7ZW5kfQorCitDcmVhdGVzIGEgbmV3IHBhcnRpdGlvbiBvZiB0eXBlIEB2YXJ7cGFydC10eXBlfSB3aXRoIGEgbmV3IGZpbGUgc3lzdGVtCitvZiB0eXBlIEB2YXJ7ZnMtdHlwZX0gb24gaXQuICBUaGUgbmV3IHBhcnRpdGlvbiB3aWxsIHN0YXJ0IEB2YXJ7c3RhcnR9CittZWdhYnl0ZXMsIGFuZCBlbmQgQHZhcntlbmR9IG1lZ2FieXRlcyBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRpc2suCitEbyBub3QgdXNlIHRoaXMgY29tbWFuZCB0byByZWNvdmVyIGEgZGVsZXRlZCBwYXJ0aXRpb24gKHVzZSBta3BhcnQKK2luc3RlYWQpLgorCitAdmFye3BhcnQtdHlwZX0gaXMgb25lIG9mOiBwcmltYXJ5LCBleHRlbmRlZCwgbG9naWNhbC4gIEV4dGVuZGVkIGFuZCBsb2dpY2FsCithcmUgb25seSB1c2VkIGZvciBtc2RvcyBhbmQgZHZoIGRpc2sgbGFiZWxzLgorCitAdmFye2ZzLXR5cGV9IG11c3QgYmUgb25lIG9mIHRoZXNlIHN1cHBvcnRlZCBmaWxlIHN5c3RlbXM6CitAaXRlbWl6ZSBAYnVsbGV0CitAaXRlbSBleHQyCitAaXRlbSBmYXQxNiwgZmF0MzIKK0BpdGVtIGxpbnV4LXN3YXAKK0BpdGVtIHJlaXNlcmZzIChpZiBsaWJyZWlzZXJmcyBpcyBpbnN0YWxsZWQpCitAZW5kIGl0ZW1pemUKKworRXhhbXBsZToKKworQGV4YW1wbGUKKyhwYXJ0ZWQpIEBrYmR7bWtwYXJ0ZnMgbG9naWNhbCBleHQyIDQ0MCA2NzB9CitAZW5kIGV4YW1wbGUKKworTWFrZSBhIGxvZ2ljYWwgcGFydGl0aW9uIGFuZCB3cml0ZSBhbiBleHQyIGZpbGUgc3lzdGVtLCBzdGFydGluZyA0NDAKK21lZ2FieXRlcyBhbmQgZW5kaW5nIDY3MCBtZWdhYnl0ZXMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkaXNrLgorQGVuZCBkZWZmbgorCitAbm9kZSBtb3ZlCitAc3Vic2VjdGlvbiBtb3ZlCitAY2luZGV4IG1vdmUsIGNvbW1hbmQgZGVzY3JpcHRpb24KK0BjaW5kZXggY29tbWFuZCBkZXNjcmlwdGlvbiwgbW92ZQorCitAZGVmZm4gQ29tbWFuZCBtb3ZlIEB2YXJ7bnVtYmVyfSBAdmFye3N0YXJ0fSBAdmFye2VuZH0KKworTW92ZXMgcGFydGl0aW9uIG9uIHRoZSBkaXNrLCBieSBtb3ZpbmcgaXRzIGJlZ2lubmluZyB0byBAdmFye3N0YXJ0fS4KK1lvdSBjYW4ndCBtb3ZlIGEgcGFydGl0aW9uIHNvIHRoYXQgdGhlIG9sZCBhbmQgbmV3IHBvc2l0aW9ucyBvdmVybGFwLgorVGhhdCBpcywgeW91IGNhbiBvbmx5IG1vdmUgcGFydGl0aW9ucyBpbnRvIGZyZWUgc3BhY2UuICBJZiB5b3Ugd2FudAordG8gcmVzaXplIGEgcGFydGl0aW9uIGluLXBsYWNlLCB1c2UgQGNvbW1hbmR7cmVzaXplfS4KKworTW92ZSBuZXZlciBjaGFuZ2VzIHRoZSBwYXJ0aXRpb24gbnVtYmVyLgorCitTdXBwb3J0ZWQgZmlsZSBzeXN0ZW1zOgorQGl0ZW1pemUgQGJ1bGxldAorQGl0ZW0gZXh0MiwgZXh0MworKHByb3ZpZGVkIHRoZSBkZXN0aW5hdGlvbiBwYXJ0aXRpb24gaXMgbGFyZ2VyIHRoYW4gdGhlIHNvdXJjZSBwYXJ0aXRpb24pCisKK0BpdGVtIGZhdDE2LCBmYXQzMgorCitAaXRlbSBsaW51eC1zd2FwCisKK0BpdGVtIHJlaXNlcmZzIChpZiBsaWJyZWlzZXJmcyBpcyBpbnN0YWxsZWQpCitAZW5kIGl0ZW1pemUKKworRXhhbXBsZToKKworQGV4YW1wbGUKKyhwYXJ0ZWQpIG1vdmUgMiAxNTBNIDUwME0KK0BlbmQgZXhhbXBsZQorCitNb3ZlIHRoZSBwYXJ0aXRpb24gbnVtYmVyZWQgMiBzbyB0aGF0IGl0IGJlZ2lucyAxNTAgbWVnYWJ5dGVzIGZyb20gdGhlIHN0YXJ0IG9mCit0aGUgZGlzaywgYW5kIGVuZHMgNTAwIG1lZ2FieXRlcyBmcm9tIHRoZSBzdGFydC4KKworQGVuZCBkZWZmbgorCitAbm9kZSBuYW1lCitAc3Vic2VjdGlvbiBuYW1lCitAY2luZGV4IG5hbWUsIGNvbW1hbmQgZGVzY3JpcHRpb24KK0BjaW5kZXggY29tbWFuZCBkZXNjcmlwdGlvbiwgbmFtZQorCitAZGVmZm4gQ29tbWFuZCBuYW1lIEB2YXJ7bnVtYmVyfSBAdmFye25hbWV9CisKK1NldHMgdGhlIG5hbWUgZm9yIHRoZSBwYXJ0aXRpb24gQHZhcntudW1iZXJ9IChHUFQsIE1hYywgTUlQUyBhbmQgUEM5OCBvbmx5KS4KK1RoZSBuYW1lIGNhbiBiZSBwbGFjZWQgaW4gcXVvdGVzLgorCitFeGFtcGxlOgorCitAZXhhbXBsZQorKHBhcnRlZCkgQGtiZHtuYW1lIDIgJ1NlY3JldCBEb2N1bWVudHMnfQorQGVuZCBleGFtcGxlCisKK1NldCB0aGUgbmFtZSBvZiBwYXJ0aXRpb24gMiB0byBgU2VjcmV0IERvY3VtZW50cycuCitAZW5kIGRlZmZuCisKK0Bub2RlIHByaW50CitAc3Vic2VjdGlvbiBwcmludAorQGNpbmRleCBwcmludCwgY29tbWFuZCBkZXNjcmlwdGlvbgorQGNpbmRleCBjb21tYW5kIGRlc2NyaXB0aW9uLCBwcmludAorCitAZGVmZm4gQ29tbWFuZCBwcmludCBbQHZhcntudW1iZXJ9XQorCitEaXNwbGF5cyB0aGUgcGFydGl0aW9uIHRhYmxlIG9uIHRoZSBkZXZpY2UgcGFydGVkIGlzIGVkaXRpbmcsIG9yCitkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCBhIHBhcnRpY3VsYXIgcGFydGl0aW9uLgorCitFeGFtcGxlOgorCitAZXhhbXBsZQorQGdyb3VwCisocGFydGVkKSBAa2Jke3ByaW50fQorRGlzayBnZW9tZXRyeSBmb3IgL2Rldi9oZGE6IDAuMDAwLTI0NDUuNjc5IG1lZ2FieXRlcworRGlzayBsYWJlbCB0eXBlOiBtc2RvcworTWlub3IgICAgU3RhcnQgICAgICAgRW5kICAgICBUeXBlICAgICAgRmlsZXN5c3RlbSAgRmxhZ3MKKzEgICAgICAgICAgMC4wMzEgICAgOTQ1LjAwMCAgcHJpbWFyeSAgIGZhdDMyICAgICAgIGJvb3QsIGxiYQorMiAgICAgICAgOTQ1LjAwMCAgIDIzNTguNTYyICBwcmltYXJ5ICAgZXh0MgorMyAgICAgICAyMzU4LjU2MiAgIDI0NDUuMTg3ICBwcmltYXJ5ICAgbGludXgtc3dhcAorKHBhcnRlZCkgQGtiZHtwcmludCAxfQorTWlub3I6IDEKK0ZsYWdzOiBib290LCBsYmEKK0ZpbGUgU3lzdGVtOiBmYXQzMgorU2l6ZTogICAgICAgICAgICA5NDUuMDAwTWIgKDAlKQorTWluaW11bSBzaXplOiAgICAgODQuMzYxTWIgKDAlKQorTWF4aW11bSBzaXplOiAgIDI0NDUuNjc5TWIgKDEwMCUpCitAZW5kIGdyb3VwCitAZW5kIGV4YW1wbGUKK0BlbmQgZGVmZm4KKworQG5vZGUgcXVpdAorQHN1YnNlY3Rpb24gcXVpdAorQGNpbmRleCBxdWl0LCBjb21tYW5kIGRlc2NyaXB0aW9uCitAY2luZGV4IGNvbW1hbmQgZGVzY3JpcHRpb24sIHF1aXQKKworQGRlZmZuIENvbW1hbmQgcXVpdAorCitRdWl0cyBQYXJ0ZWQuCisKK0BjIFJNSzogZ2VuZXJhbGl0eTogdGhlIGZvbGxvd2luZyB3aWxsIGFwcGx5IHRvIGFueSBvcGVyYXRpbmcgc3lzdGVtIG9uCitAYyB3aGljaCBwYXJ0ZWQgd2lsbCBydW4sIG5vdCBvbmx5IExpbnV4LWJhc2VkIG9uZXMuCitAYyBjbGF1c2VuOiB5ZWFoLi4uIGp1c3QgdGhhdCB0aGUgd2F5IGh1cmQgYW5kIGxpbnV4IHdvcmsgYXJlIHRvdGFsbHkKK0BjIGRpZmZlcmVudCwgYW5kIGl0J3MgYWN0dWFsbHkgdmVyeSBoYXJkIHRvIHNwZWFrIGluIGdlbmVyYWwuICBOZWVkIHRvCitAYyBkaXNjdXNzIHRoaXMgbW9yZQorSXQgaXMgb25seSBhZnRlciBQYXJ0ZWQgZXhpdHMgdGhhdCB0aGUgTGludXgga2VybmVsIGtub3dzIGFib3V0IHRoZSBjaGFuZ2VzCitQYXJ0ZWQgaGFzIG1hZGUgdG8gdGhlIGRpc2tzLiAgSG93ZXZlciwgdGhlIGNoYW5nZXMgY2F1c2VkIGJ5IHR5cGluZyB5b3VyCitjb21tYW5kcyB3aWxsIEBlbXBoe3Byb2JhYmx5fSBiZSBtYWRlIHRvIHRoZSBkaXNrIGltbWVkaWF0ZWx5IGFmdGVyIHR5cGluZyBhCitjb21tYW5kLiAgSG93ZXZlciwgdGhlIG9wZXJhdGluZyBzeXN0ZW0ncyBjYWNoZSBhbmQgdGhlIGRpc2sncyBoYXJkd2FyZSBjYWNoZQorbWF5IGRlbGF5IHRoaXMuCitAZW5kIGRlZmZuCisKK0Bub2RlIHJlc2N1ZQorQHN1YnNlY3Rpb24gcmVzY3VlCitAY2luZGV4IHJlc2N1ZSwgY29tbWFuZCBkZXNjcmlwdGlvbgorQGNpbmRleCBjb21tYW5kIGRlc2NyaXB0aW9uLCByZXNjdWUKKworQGRlZmZuIENvbW1hbmQgcmVzY3VlIEB2YXJ7c3RhcnR9IEB2YXJ7ZW5kfQorUmVzY3VlIGEgbG9zdCBwYXJ0aXRpb24gdGhhdCB1c2VkIHRvIGJlIGxvY2F0ZWQgYXBwcm94aW1hdGVseSBiZXR3ZWVuCitAdmFye3N0YXJ0fSBhbmQgQHZhcntlbmR9LiAgSWYgc3VjaCBhIHBhcnRpdGlvbiBpcyBmb3VuZCwgUGFydGVkIHdpbGwKK2FzayB5b3UgaWYgeW91IHdhbnQgdG8gY3JlYXRlIGEgcGFydGl0aW9uIGZvciBpdC4gIFRoaXMgaXMgdXNlZnVsIGlmIHlvdQorYWNjaWRlbnRseSBkZWxldGVkIGEgcGFydGl0aW9uIHdpdGggcGFydGVkJ3Mgcm0gY29tbWFuZCwgZm9yIGV4YW1wbGUuCisKK0V4YW1wbGU6CisKK0BleGFtcGxlCisocGFydGVkKSBAa2Jke3ByaW50fQorQGdyb3VwCitEaXNrIGdlb21ldHJ5IGZvciAvZGV2L2hkYzogMC4wMDAtODA2My41MDcgbWVnYWJ5dGVzCitEaXNrIGxhYmVsIHR5cGU6IG1zZG9zCitNaW5vciAgICBTdGFydCAgICAgICBFbmQgICAgIFR5cGUgICAgICBGaWxlc3lzdGVtICBGbGFncworMSAgICAgICAgICAwLjAzMSAgIDgwNTYuMDMyICBwcmltYXJ5ICAgZXh0MworQGVuZCBncm91cAorKHBhcnRlZCkgQGtiZHtybX0KK1BhcnRpdGlvbiBudW1iZXI/IDEKKyhwYXJ0ZWQpIEBrYmR7cHJpbnR9CitAZ3JvdXAKK0Rpc2sgZ2VvbWV0cnkgZm9yIC9kZXYvaGRjOiAwLjAwMC04MDYzLjUwNyBtZWdhYnl0ZXMKK0Rpc2sgbGFiZWwgdHlwZTogbXNkb3MKK01pbm9yICAgIFN0YXJ0ICAgICAgIEVuZCAgICAgVHlwZSAgICAgIEZpbGVzeXN0ZW0gIEZsYWdzCitAZW5kIGdyb3VwCitAZW5kIGV4YW1wbGUKKworT1VDSCEgIFdlIGRlbGV0ZWQgb3VyIGV4dDMgcGFydGl0aW9uISEhICBQYXJ0ZWQgY29tZXMgdG8gdGhlIHJlc2N1ZS4uLgorCitAZXhhbXBsZQorKHBhcnRlZCkgQGtiZHtyZXNjdWV9CitTdGFydD8gMAorRW5kPyA4MDU2CitJbmZvcm1hdGlvbjogQSBleHQzIHByaW1hcnkgcGFydGl0aW9uIHdhcyBmb3VuZCBhdCAwLjAzMU1CIC0+Cis4MDU2LjAzME1CLiAgRG8geW91IHdhbnQgdG8gYWRkIGl0IHRvIHRoZSBwYXJ0aXRpb24gdGFibGU/CitZZXMvTm8vQ2FuY2VsPyBAa2Jke3l9CisocGFydGVkKSBAa2Jke3ByaW50fQorQGdyb3VwCitEaXNrIGdlb21ldHJ5IGZvciAvZGV2L2hkYzogMC4wMDAtODA2My41MDcgbWVnYWJ5dGVzCitEaXNrIGxhYmVsIHR5cGU6IG1zZG9zCitNaW5vciAgICBTdGFydCAgICAgICBFbmQgICAgIFR5cGUgICAgICBGaWxlc3lzdGVtICBGbGFncworMSAgICAgICAgICAwLjAzMSAgIDgwNTYuMDMyICBwcmltYXJ5ICAgZXh0MworQGVuZCBncm91cAorQGVuZCBleGFtcGxlCisKK0l0J3MgYmFjayEgIDopCisKK0BlbmQgZGVmZm4KKworQG5vZGUgcmVzaXplCitAc3Vic2VjdGlvbiByZXNpemUKK0BjaW5kZXggcmVzaXplLCBjb21tYW5kIGRlc2NyaXB0aW9uCitAY2luZGV4IGNvbW1hbmQgZGVzY3JpcHRpb24sIHJlc2l6ZQorCitAZGVmZm4gQ29tbWFuZCByZXNpemUgQHZhcntudW1iZXJ9IEB2YXJ7c3RhcnR9IEB2YXJ7ZW5kfQorCitSZXNpemVzIHRoZSBwYXJ0aXRpb24gd2l0aCBudW1iZXIgQHZhcntudW1iZXJ9LiAgVGhlIHBhcnRpdGlvbiB3aWxsIHN0YXJ0CitAdmFye3N0YXJ0fSBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRpc2ssIGFuZCBlbmQgQHZhcntlbmR9IGZyb20gdGhlCitiZWdpbm5pbmcgb2YgdGhlIGRpc2suICByZXNpemUgbmV2ZXIgY2hhbmdlcyB0aGUgcGFydGl0aW9uIG51bWJlci4gIEV4dGVuZGVkCitwYXJ0aXRpb25zIGNhbiBiZSByZXNpemVkIG9ubHkgc28gbG9uZyBhcyB0aGUgbmV3IGV4dGVuZGVkIHBhcnRpdGlvbgorY29tcGxldGVseSBjb250YWlucyBhbGwgbG9naWNhbCBwYXJ0aXRpb25zLgorCitOb3RlIHRoYXQgUGFydGVkIGNhbiBtYW5pcHVsYXRlIHBhcnRpdGlvbnMgd2hldGhlciBvciBub3QgdGhleSBoYXZlIGJlZW4KK2RlZnJhZ21lbnRlZCwgc28geW91IGRvIG5vdCBuZWVkIHRvIGRlZnJhZ21lbnRpbmcgdGhlIGRpc2sgYmVmb3JlCit1c2luZyBQYXJ0ZWQuCisKK1N1cHBvcnRlZCBmaWxlIHN5c3RlbXM6CitAaXRlbWl6ZSBAYnVsbGV0CitAaXRlbSBleHQyLCBleHQzIC0tIHJlc3RyaWN0aW9uOiB0aGUgbmV3IEB2YXJ7c3RhcnR9IG11c3QgYmUgdGhlIHNhbWUgYXMKK3RoZSBvbGQgQHZhcntzdGFydH0uCitAaXRlbSBmYXQxNiwgZmF0MzIKK0BpdGVtIGhmcywgaGZzKywgaGZzeCAtLSByZXN0cmljdGlvbjogdGhlIG5ldyBAdmFye3N0YXJ0fSBtdXN0IGJlIHRoZSBzYW1lIGFzCit0aGUgb2xkIEB2YXJ7c3RhcnR9IGFuZCB0aGUgbmV3IEB2YXJ7ZW5kfSBtdXN0IGJlIHNtYWxsZXIgdGhhbiB0aGUgb2xkCitAdmFye2VuZH0uCitAaXRlbSBsaW51eC1zd2FwCitAaXRlbSByZWlzZXJmcyAoaWYgbGlicmVpc2VyZnMgaXMgaW5zdGFsbGVkKQorQGVuZCBpdGVtaXplCisKK0V4YW1wbGU6CisKK0BleGFtcGxlCisocGFydGVkKSBAa2Jke3Jlc2l6ZSAzIDIwME0gODUwTX0KK0BlbmQgZXhhbXBsZQorCitSZXNpemUgcGFydGl0aW9uIDMsIHNvIHRoYXQgaXQgYmVnaW5zIDIwMCBtZWdhYnl0ZXMgYW5kIGVuZHMgODUwCittZWdhYnl0ZXMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkaXNrLgorQGVuZCBkZWZmbgorCitAbm9kZSBybQorQHN1YnNlY3Rpb24gcm0KK0BjaW5kZXggcm0sIGNvbW1hbmQgZGVzY3JpcHRpb24KK0BjaW5kZXggY29tbWFuZCBkZXNjcmlwdGlvbiwgcm0KKworCitAZGVmZm4gQ29tbWFuZCBybSBAdmFye251bWJlcn0KKworUmVtb3ZlcyB0aGUgcGFydGl0aW9uIHdpdGggbnVtYmVyIEB2YXJ7bnVtYmVyfS4gIElmIHlvdSBhY2NpZGVudGx5IGRlbGV0ZQorYSBwYXJ0aXRpb24gd2l0aCB0aGlzIGNvbW1hbmQsIHVzZSBta3BhcnQgKEBlbXBoe25vdH0gbWtwYXJ0ZnMpIHRvCityZWNvdmVyIGl0LiAgQWxzbywgeW91IGNhbiB1c2UgdGhlIGdwYXJ0IHByb2dyYW0gKEBweHJlZntSZWxhdGVkIGluZm9ybWF0aW9ufSkKK3RvIHJlY292ZXIgZGFtYWdlZCBkaXNrIGxhYmVscy4KKworTm90ZSBmb3IgbXNkb3MgZGlzayBsYWJlbHM6IGlmIHlvdSBkZWxldGUgYSBsb2dpY2FsIHBhcnRpdGlvbiwgYWxsCitsb2dpY2FsIHBhcnRpdGlvbnMgd2l0aCBhIGxhcmdlciBwYXJ0aXRpb24gbnVtYmVyIHdpbGwgYmUgcmVudW1iZXJlZC4gIEZvcgorZXhhbXBsZSwgaWYgeW91IGRlbGV0ZSBhIGxvZ2ljYWwgcGFydGl0aW9uIHdpdGggYSBwYXJ0aXRpb24gbnVtYmVyIG9mIDYsCit0aGVuIGxvZ2ljYWwgcGFydGl0aW9ucyB0aGF0IHdlcmUgbnVtYmVyIDcsIDggYW5kIDkgd291bGQgYmUgcmVudW1iZXJlZAordG8gNiwgNyBhbmQgOCByZXNwZWN0aXZlbHkuICBUaGlzIG1lYW5zLCBmb3IgZXhhbXBsZSwgdGhhdCB5b3UgaGF2ZSB0bwordXBkYXRlIEBmaWxley9ldGMvZnN0YWJ9IG9uIEdOVS9MaW51eCBzeXN0ZW1zLgorCitFeGFtcGxlOgorCitAZXhhbXBsZQorKHBhcnRlZCkgQGtiZHtybSAzfQorQGVuZCBleGFtcGxlCisKK1JlbW92ZSBwYXJ0aXRpb24gMy4KK0BlbmQgZGVmZm4KKworQG5vZGUgc2VsZWN0CitAc3Vic2VjdGlvbiBzZWxlY3QKK0BjaW5kZXggc2VsZWN0LCBjb21tYW5kIGRlc2NyaXB0aW9uCitAY2luZGV4IGNvbW1hbmQgZGVzY3JpcHRpb24sIHNlbGVjdAorCitAZGVmZm4gQ29tbWFuZCBzZWxlY3QgQHZhcntkZXZpY2V9CisKK1NlbGVjdHMgdGhlIGRldmljZSwgQHZhcntkZXZpY2V9LCBmb3IgUGFydGVkIHRvIGVkaXQuICBUaGUgZGV2aWNlIGNhbgorYmUgYSBMaW51eCBoYXJkIGRpc2sgZGV2aWNlLCBhIHBhcnRpdGlvbiwgYSBzb2Z0d2FyZSBSQUlEIGRldmljZSBvcgorTFZNIGxvZ2ljYWwgdm9sdW1lLgorCitFeGFtcGxlOgorCitAZXhhbXBsZQorKHBhcnRlZCkgQGtiZHtzZWxlY3QgL2Rldi9oZGJ9CitAZW5kIGV4YW1wbGUKKworU2VsZWN0IEBmaWxley9kZXYvaGRifSAodGhlIHNsYXZlIGRldmljZSBvbiB0aGUgZmlyc3QgaWRlIGNvbnRyb2xsZXIgb24KK0xpbnV4KSBhcyB0aGUgZGV2aWNlIHRvIGVkaXQuCitAZW5kIGRlZmZuCisKK0Bub2RlIHNldAorQHN1YnNlY3Rpb24gc2V0CitAY2luZGV4IHNldCwgY29tbWFuZCBkZXNjcmlwdGlvbgorQGNpbmRleCBjb21tYW5kIGRlc2NyaXB0aW9uLCBzZXQKKworQGRlZmZuIENvbW1hbmQgc2V0IEB2YXJ7bnVtYmVyfSBAdmFye2ZsYWd9IEB2YXJ7c3RhdGV9CisKK0NoYW5nZXMgYSBmbGFnIG9uIHRoZSBwYXJ0aXRpb24gd2l0aCBudW1iZXIgQHZhcntudW1iZXJ9LiAgQSBmbGFnIGNhbiBiZQorZWl0aGVyIGBgb24nJyBvciBgYG9mZicnLiAgU29tZSBvciBhbGwgb2YgdGhlc2UgZmxhZ3Mgd2lsbCBiZSBhdmFpbGFibGUsCitkZXBlbmRpbmcgb24gd2hhdCBkaXNrIGxhYmVsIHlvdSBhcmUgdXNpbmc6CisKK0B0YWJsZSBAc2FtcAorQGl0ZW0gYm9vdAorKE1hYywgTVMtRE9TLCBQQzk4KSAtIHNob3VsZCBiZSBlbmFibGVkIGlmIHlvdSB3YW50IHRvIGJvb3Qgb2ZmIHRoZQorcGFydGl0aW9uLiAgVGhlIHNlbWFudGljcyB2YXJ5IGJldHdlZW4gZGlzayBsYWJlbHMuICBGb3IgTVMtRE9TIGRpc2sKK2xhYmVscywgb25seSBvbmUgcGFydGl0aW9uIGNhbiBiZSBib290YWJsZS4gIElmIHlvdSBhcmUgaW5zdGFsbGluZyBMSUxPCitvbiBhIHBhcnRpdGlvbiB0aGF0IHBhcnRpdGlvbiBtdXN0IGJlIGJvb3RhYmxlLgorRm9yIFBDOTggZGlzayBsYWJlbHMsIGFsbCBleHQyIHBhcnRpdGlvbnMgbXVzdCBiZSBib290YWJsZSAodGhpcyBpcworZW5mb3JjZWQgYnkgUGFydGVkKS4KKworQGl0ZW0gbGJhCisoTVMtRE9TKSAtIHRoaXMgZmxhZyBjYW4gYmUgZW5hYmxlZCB0byB0ZWxsIE1TIERPUywgTVMgV2luZG93cyA5eCBhbmQKK01TIFdpbmRvd3MgTUUgYmFzZWQgb3BlcmF0aW5nIHN5c3RlbXMgdG8gdXNlIExpbmVhciAoTEJBKSBtb2RlLgorCitAaXRlbSByb290CisoTWFjKSAtIHRoaXMgZmxhZyBzaG91bGQgYmUgZW5hYmxlZCBpZiB0aGUgcGFydGl0aW9uIGlzIHRoZSByb290IGRldmljZQordG8gYmUgdXNlZCBieSBMaW51eC4KKworQGl0ZW0gc3dhcAorKE1hYykgLSB0aGlzIGZsYWcgc2hvdWxkIGJlIGVuYWJsZWQgaWYgdGhlIHBhcnRpdGlvbiBpcyB0aGUgc3dhcAorZGV2aWNlIHRvIGJlIHVzZWQgYnkgTGludXguCisKK0BpdGVtIGhpZGRlbgorKE1TLURPUywgUEM5OCkgLSB0aGlzIGZsYWcgY2FuIGJlIGVuYWJsZWQgdG8gaGlkZSBwYXJ0aXRpb25zIGZyb20KK01pY3Jvc29mdCBvcGVyYXRpbmcgc3lzdGVtcy4KKworQGl0ZW0gcmFpZAorKE1TLURPUykgLSB0aGlzIGZsYWcgY2FuIGJlIGVuYWJsZWQgdG8gdGVsbCBsaW51eCB0aGUgcGFydGl0aW9uIGlzIGEKK3NvZnR3YXJlIFJBSUQgcGFydGl0aW9uLiAKKworQGl0ZW0gTFZNCisoTVMtRE9TKSAtIHRoaXMgZmxhZyBjYW4gYmUgZW5hYmxlZCB0byB0ZWxsIGxpbnV4IHRoZSBwYXJ0aXRpb24gaXMgYQorcGh5c2ljYWwgdm9sdW1lLgorCitAaXRlbSBQQUxPCisoTVMtRE9TKSAtIHRoaXMgZmxhZyBjYW4gYmUgZW5hYmxlZCBzbyB0aGF0IHRoZSBwYXJ0aXRpb24gY2FuIGJlIHVzZWQKK2J5IHRoZSBMaW51eC9QQS1SSVNDIGJvb3QgbG9hZGVyLCBwYWxvLgorCitAaXRlbSBQUkVQCisoTVMtRE9TKSAtIHRoaXMgZmxhZyBjYW4gYmUgZW5hYmxlZCBzbyB0aGF0IHRoZSBwYXJ0aXRpb24gY2FuIGJlIHVzZWQKK2FzIGEgUFJlUCBib290IHBhcnRpdGlvbiBvbiBQb3dlclBDIFBSZVAgb3IgSUJNIFJTNksvQ0hSUCBoYXJkd2FyZS4KKworQGVuZCB0YWJsZQorCitUaGUgcHJpbnQgY29tbWFuZCBkaXNwbGF5cyBhbGwgZW5hYmxlZCBmbGFncyBmb3IgZWFjaCBwYXJ0aXRpb24uCisKK0V4YW1wbGU6CisKK0BleGFtcGxlCisocGFydGVkKSBAa2Jke3NldCAxIGJvb3Qgb259CitAZW5kIGV4YW1wbGUKKworU2V0IHRoZSBAc2FtcHtib290fSBmbGFnIG9uIHBhcnRpdGlvbiAxLgorQGVuZCBkZWZmbgorCitAbm9kZSB1bml0CitAc3Vic2VjdGlvbiB1bml0CitAY2luZGV4IHVuaXQsIGNvbW1hbmQgZGVzY3JpcHRpb24KK0BjaW5kZXggY29tbWFuZCBkZXNjcmlwdGlvbiwgdW5pdAorCitAZGVmZm4gQ29tbWFuZCB1bml0IEB2YXJ7dW5pdH0KKworU2VsZWN0cyB0aGUgY3VycmVudCBkZWZhdWx0IHVuaXQgdGhhdCBQYXJ0ZWQgd2lsbCB1c2UgdG8gZGlzcGxheQorbG9jYXRpb25zIGFuZCBjYXBhY2l0aWVzIG9uIHRoZSBkaXNrIGFuZCB0byBpbnRlcnByZXQgdGhvc2UgZ2l2ZW4KK2J5IHRoZSB1c2VyIGlmIHRoZXkgYXJlIG5vdCBzdWZmaXhlZCBieSBhbiBAdmFye3VuaXR9LgorCitAdmFye3VuaXR9IG1heSBiZSBvbmUgb2Y6CisKK0B0YWJsZSBAc2FtcAorQGl0ZW0gcworc2VjdG9yIChuIGJ5dGVzIGRlcGVuZGluZyBvbiB0aGUgc2VjdG9yIHNpemUsIG9mdGVuIDUxMikKKworQGl0ZW0gQgorYnl0ZQorCitAaXRlbSBrQgora2lsb2J5dGUgKDEwMDAgYnl0ZXMpCisKK0BpdGVtIE1CCittZWdhYnl0ZSAoMTAwMDAwMCBieXRlcykKKworQGl0ZW0gR0IKK2dpZ2FieXRlICgxMDAwMDAwMDAwIGJ5dGVzKQorCitAaXRlbSBUQgordGVyYWJ5dGUgKDEwMDAwMDAwMDAwMDAgYnl0ZXMpCisKK0BpdGVtICUKK3BlcmNlbnRhZ2Ugb2YgdGhlIGRldmljZSAoYmV0d2VlbiAwIGFuZCAxMDApCisKK0BpdGVtIGN5bAorY3lsaW5kZXJzIChyZWxhdGVkIHRvIHRoZSBCSU9TIENIUyBnZW9tZXRyeSkKKworQGl0ZW0gY2hzCitjeWxpbmRlcnMsIGhlYWRzLCBzZWN0b3JzIGFkZHJlc3NpbmcgKHJlbGF0ZWQgdG8gdGhlIEJJT1MgQ0hTIGdlb21ldHJ5KQorCitAaXRlbSBjb21wYWN0CitUaGlzIGlzIGEgc3BlY2lhbCB1bml0IHRoYXQgZGVmYXVsdHMgdG8gbWVnYWJ5dGVzIGZvciBpbnB1dCwgYW5kIHBpY2tzIGEKK3VuaXQgdGhhdCBnaXZlcyBhIGNvbXBhY3QgaHVtYW4gcmVhZGFibGUgcmVwcmVzZW50YXRpb24gZm9yIG91dHB1dC4KK0BlbmQgdGFibGUKKworVGhlIGRlZmF1bHQgdW5pdCBhcHBseSBvbmx5IGZvciB0aGUgb3V0cHV0IGFuZCB3aGVuIG5vIHVuaXQgaXMKK3NwZWNpZmllZCBhZnRlciBhbiBpbnB1dCBudW1iZXIuICBJbnB1dCBudW1iZXJzIGNhbiBiZSBmb2xsb3dlZCBieQorYW4gdW5pdCAod2l0aG91dCBhbnkgc3BhY2Ugb3Igb3RoZXIgY2hhcmFjdGVyIGJldHdlZW4gdGhlbSksIGluCit3aGljaCBjYXNlIHRoaXMgdW5pdCBhcHBseSBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IHVuaXQgZm9yIHRoaXMKK3BhcnRpY3VsYXIgbnVtYmVyLCBidXQgQ0hTIGFuZCBjeWxpbmRlciB1bml0cyBhcmUgbm90IHN1cHBvcnRlZCBhcworYSBzdWZmaXguICBJZiBubyBzdWZmaXggaXMgZ2l2ZW4sIHRoZW4gdGhlIGRlZmF1bHQgdW5pdCBpcyBhc3N1bWVkLiAKK1BhcnRlZCB3aWxsIGNvbXB1dGUgc2Vuc2libGUgcmFuZ2VzIGZvciB0aGUgbG9jYXRpb25zIHlvdSBzcGVjaWZ5CisoZS5nLiBhIHJhbmdlIG9mICsvLSA1MDAgTUIgd2hlbiB5b3Ugc3BlY2lmeSB0aGUgbG9jYXRpb24gaW4gYGBHJycpCithbmQgd2lsbCBzZWxlY3QgdGhlIG5lYXJlc3QgbG9jYXRpb24gaW4gdGhpcyByYW5nZSBmcm9tIHRoZSBvbmUgeW91Cit3cm90ZSB0aGF0IHNhdGlzZmllcyBjb25zdHJhaW50cyBmcm9tIGJvdGggdGhlIG9wZXJhdGlvbiwgdGhlCitmaWxlc3lzdGVtIGJlaW5nIHdvcmtlZCBvbiwgdGhlIGRpc2sgbGFiZWwsIG90aGVyIHBhcnRpdGlvbnMgYW5kIHNvCitvbi4gIFVzZSB0aGUgc2VjdG9yIHVuaXQgYGBzJycgdG8gc3BlY2lmeSBleGFjdCBsb2NhdGlvbnMgKGlmIHRoZXkKK2RvIG5vdCBzYXRpc2Z5IGFsbCBvbnN0cmFpbnRzLCBQYXJ0ZWQgd2lsbCBhc2sgeW91IGZvciB0aGUgbmVhcmVzdCAKK3NvbHV0aW9uKS4gIE5vdGUgdGhhdCBuZWdhdGl2ZSBudW1iZXJzIGNvdW50IGJhY2sgZnJvbSB0aGUgZW5kIG9mCit0aGUgZGlzaywgd2l0aCBgYC0xcycnIHBvaW50aW5nIHRvIHRoZSBlbmQgb2YgdGhlIGRpc2suICAKKworRXhhbXBsZToKKworQGV4YW1wbGUKK0Bncm91cAorKHBhcnRlZCkgdW5pdCBjb21wYWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyhwYXJ0ZWQpIHByaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitEaXNrIGdlb21ldHJ5IGZvciAvZGV2L2hkYTogMGtCIC0gMTIzR0IKK0Rpc2sgbGFiZWwgdHlwZTogbXNkb3MKK051bWJlciAgU3RhcnQgICBFbmQgICAgIFNpemUgICAgVHlwZSAgICAgIEZpbGUgc3lzdGVtICBGbGFncworMSAgICAgICAzMmtCICAgIDEwNzhNQiAgMTA3N01CICBwcmltYXJ5ICAgcmVpc2VyZnMgICAgIGJvb3QKKzIgICAgICAgMTA3OE1CICAyMTU1TUIgIDEwNzhNQiAgcHJpbWFyeSAgIGxpbnV4LXN3YXAgICAKKzMgICAgICAgMjE1NU1CICAxMjNHQiAgIDEyMUdCICAgZXh0ZW5kZWQgICAgICAgICAgICAgICAKKzUgICAgICAgMjE1NU1CICA3NDUyTUIgIDUyOTdNQiAgbG9naWNhbCAgIHJlaXNlcmZzICAgICAKK0BlbmQgZ3JvdXAKK0Bncm91cAorKHBhcnRlZCkgdW5pdCBjaHMgcHJpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK0Rpc2sgZ2VvbWV0cnkgZm9yIC9kZXYvaGRhOiAwLDAsMCAtIDE0OTQ2LDIyNSw2MgorQklPUyBjeWxpbmRlcixoZWFkLHNlY3RvciBnZW9tZXRyeTogMTQ5NDYsMjU1LDYzLiAgRWFjaCBjeWxpbmRlcgoraXMgODIyNWtCLgorRGlzayBsYWJlbCB0eXBlOiBtc2RvcworTnVtYmVyICBTdGFydCAgICAgICBFbmQgICAgICAgICBUeXBlICAgICAgRmlsZSBzeXN0ZW0gIEZsYWdzCisxICAgICAgIDAsMSwwICAgICAgIDEzMCwyNTQsNjIgIHByaW1hcnkgICByZWlzZXJmcyAgICAgYm9vdAorMiAgICAgICAxMzEsMCwwICAgICAyNjEsMjU0LDYyICBwcmltYXJ5ICAgbGludXgtc3dhcCAgIAorMyAgICAgICAyNjIsMCwwICAgICAxNDk0NSwyNTQsNjIgZXh0ZW5kZWQgICAgICAgICAgICAgICAKKzUgICAgICAgMjYyLDIsMCAgICAgOTA1LDI1NCw2MiAgbG9naWNhbCAgIHJlaXNlcmZzICAgICAKK0BlbmQgZ3JvdXAKK0Bncm91cAorKHBhcnRlZCkgdW5pdCBtYiBwcmludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK0Rpc2sgZ2VvbWV0cnkgZm9yIC9kZXYvaGRhOiAwTUIgLSAxMjI5NDJNQgorRGlzayBsYWJlbCB0eXBlOiBtc2RvcworTnVtYmVyICBTdGFydCAgIEVuZCAgICAgU2l6ZSAgICBUeXBlICAgICAgRmlsZSBzeXN0ZW0gIEZsYWdzCisxICAgICAgIDBNQiAgICAgMTA3OE1CICAxMDc3TUIgIHByaW1hcnkgICByZWlzZXJmcyAgICAgYm9vdAorMiAgICAgICAxMDc4TUIgIDIxNTVNQiAgMTA3OE1CICBwcmltYXJ5ICAgbGludXgtc3dhcCAgIAorMyAgICAgICAyMTU1TUIgIDEyMjkzNU1CIDEyMDc4ME1CIGV4dGVuZGVkICAgICAgICAgICAgICAgCis1ICAgICAgIDIxNTVNQiAgNzQ1Mk1CICA1Mjk3TUIgIGxvZ2ljYWwgICByZWlzZXJmcyAgICAgCitAZW5kIGdyb3VwCitAZW5kIGV4YW1wbGUKKworQGVuZCBkZWZmbgorCitAbm9kZSBSZWxhdGVkIGluZm9ybWF0aW9uCitAY2hhcHRlciBSZWxhdGVkIGluZm9ybWF0aW9uIAorQGNpbmRleCBmdXJ0aGVyIHJlYWRpbmcKK0BjaW5kZXggcmVsYXRlZCBkb2N1bWVudGF0aW9uCisKK0lmIHlvdSB3YW50IHRvIGZpbmQgb3V0IG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBzZWUgdGhlIEdOVSBQYXJ0ZWQgd2ViIHNpdGUuCisKK1RoZXNlIGZpbGVzIGluIHRoZSBQYXJ0ZWQgZGlzdHJpYnV0aW9uIGNvbnRhaW4gZnVydGhlciBpbmZvcm1hdGlvbjoKKworQGl0ZW1pemUgQGJ1bGxldAorCitAaXRlbSBAa2Jke0FCT1VULU5MU30gLSBpbmZvcm1hdGlvbiBhYm91dCB1c2luZyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydCwgYW5kIHRoZSBGcmVlIFRyYW5zbGF0aW9uIFByb2plY3QuCisKK0BpdGVtIEBrYmR7QVVUSE9SU30gLSB3aG8gd3JvdGUgd2hhdC4KKworQGl0ZW0gQGtiZHtDaGFuZ2VMb2d9IC0gcmVjb3JkIG9mIGNoYW5nZXMgbWFkZSB0byBQYXJ0ZWQuCisKK0BpdGVtIEBrYmR7Q09QWUlOR30gLSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHRoZSB0ZXJtcyB1bmRlciB3aGljaCBHTlUgUGFydGVkIG1heSBiZSBkaXN0cmlidXRlZC4KKworQGl0ZW0gQGtiZHtDT1BZSU5HLkRPQ30gLSB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbmNlLCB0aGUgdGVybSB1bmRlcgord2hpY2ggUGFydGVkJ3MgZG9jdW1lbnRhdGlvbiBtYXkgYmUgZGlzdHJpYnV0ZWQuCisKK0BpdGVtIEBrYmR7SU5TVEFMTH0gLS0tIGhvdyB0byBjb21waWxlIGFuZCBpbnN0YWxsIFBhcnRlZCwgYW5kIG1vc3Qgb3RoZXIgZnJlZQorc29mdHdhcmUKKworQGVuZCBpdGVtaXplCisKK0Bub2RlIENvcHlpbmcgVGhpcyBNYW51YWwKK0BhcHBlbmRpeCBDb3B5aW5nIFRoaXMgTWFudWFsCisKK0BtZW51CisqIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZTo6ICBMaWNlbnNlIGZvciBjb3B5aW5nIHRoaXMgbWFudWFsCitAZW5kIG1lbnUKKworQGluY2x1ZGUgZmRsLnRleGkKKworQG5vZGUgSGlzdG9yeQorQGFwcGVuZGl4IFRoaXMgbWFudWFsJ3MgaGlzdG9yeQorQGNpbmRleCAgaGlzdG9yeSBvZiB0aGlzIG1hbnVhbAorCitUaGlzIG1hbnVhbCB3YXMgYmFzZWQgb24gdGhlIGZpbGUgQGtiZHtVU0VSfSBpbmNsdWRlZCBpbiBHTlUgUGFydGVkIHZlcnNpb24KKzEuNC4yMiBzb3VyY2UgZGlzdHJpYnV0aW9uLiAgVGhlIEdOVSBQYXJ0ZWQgc291cmNlIGRpc3RyaWJ1dGlvbiBpcworYXZhaWxhYmxlIGF0IEB1cmVme2Z0cC5nbnUub3JnL2dudS9wYXJ0ZWR9LgorCitJbml0aWFsIFRleGluZm8gZm9ybWF0dGluZyBieSBSaWNoYXJkIE0uIEtyZXV0ZXIsIDIwMDIuCisKK01haW50YWluYW5jZSBieSBBbmRyZXcgQ2xhdXNlbiBmcm9tIDIwMDIgdG8gMjAwNSBhbmQgYnkgTGVzbGllIFAuIFBvbHplcgorZnJvbSBKdWx5IDIwMDUgb253YXJkcy4KKworVGhpcyBtYW51YWwgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwKK3ZlcnNpb24gMS4xIG9yIGxhdGVyLCBhdCB5b3VyIGRpc2NyZXRpb24sIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZAorYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8KK0Zyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubyBCYWNrLUNvdmVyIFRleHRzLiAgQHhyZWZ7Q29weWluZworVGhpcyBNYW51YWx9LCBmb3IgZGV0YWlscy4KKworQGMgRklYTUU6IHdoeSBkb2Vzbid0IHRoaXMgQGlmbm90cGxhaW50ZXh0IHdvcms/IQorQGMgQGlmbm90cGxhaW50ZXh0CitAbm9kZSBJbmRleAorQHVubnVtYmVyZWQgSW5kZXgKK0BwcmludGluZGV4IGNwCitAYyBAZW5kIGlmbm90cGxhaW50ZXh0CisKK0BieWUKKworQGlnbm9yZQorCitOb3RlcyBieSBSTUs6CitOb3RlcyBvbiBwb3NzaWJsZSAodW5pbXBsZW1lbnRlZCEpIG1vZGlmaWNhdGlvbnM6CisKK1RoZSBvdXRwdXQgc2FtcGxlcyBmcm9tIHBhcnRlZCdzIHByaW50IGNvbW1hbmQsIGZkaXNrJ3MgcCBjb21tYW5kLCBldGMuLAorbWlnaHQgYmUgbWFkZSBpbnRvIHRhYmxlcyAobXVsdGktY29sdW1uIHRhYmxlcykgdG8gZW5zdXJlIHNwaWZmeSBmb3JtYXR0aW5nLgorCitJJ2QgbGlrZSB0byBmaW5kIGEgd2F5IHRvIG1ha2UgKmVudHJ5OiBzZWUgKnN5bm9ueW0gdHlwZSByZWZlcmVuY2VzIGluCit0aGUgaW5kZXgsIHNvLCBlLmcuLCB0byByZWZlciBwZW9wbGUgbG9va2luZyBmb3IgQXBwbGUgdG8gTWFjaW50b3NoLCBhbmQKK1Bvd2VyUEMgdG8gTWFjaW50b3NoLCBldGMuICBQcm9iYWJseSB0ZXhpbmZvIGRvZXMgdGhpcyBhbHJlYWR5OyBJIGR1bm5vLgorCitOb3RlcyBieSBMZXNsaWU6CisKK1RPRE86CisgICAgIC0gYWRkICJ2ZXJzaW9uIiBjb21tYW5kLgorICAgICAtIHJlYWQgdGhyb3VnaCBhbmQgY29ycmVjdC4KKyAgICAgLSByb2xlIG9mIEZyZWVET1M/CisKK0BlbmQgaWdub3JlCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvZG9jL3BvNGEubWsgYi9wYXJ0ZWQtMS44LjcvZG9jL3BvNGEubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ4NzZhYwotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9kb2MvcG80YS5tawpAQCAtMCwwICsxLDkxIEBACisjCisjIFlvdSBtdXN0IHNldCB0aGUgJChsYW5nKSB2YXJpYWJsZSB3aGVuIHlvdSBpbmNsdWRlIHRoaXMgbWFrZWZpbGUuCisjCisjIFlvdSBjYW4gdXNlIHRoZSAkKHBvNGFfdHJhbnNsYXRlX29wdGlvbnMpIHZhcmlhYmxlIHRvIHNwZWNpZnkgYWRkaXRpb25hbAorIyBvcHRpb25zIHRvIHBvNGEuCisjIEZvciBleGFtcGxlOiBwbzRhX3RyYW5zbGF0ZV9vcHRpb25zPS1MIEtPSTgtUiAtQSBLT0k4LVIKKyMKKyMKKyMgVGhpcyBtYWtlZmlsZSBkZWFscyB3aXRoIHRoZSBtYW5wYWdlcyBnZW5lcmF0ZWQgZnJvbSBQT3Mgd2l0aCBwbzRhLCBhbmQKKyMgc2hvdWxkIGJlIGluY2x1ZGVkIGluIGFuIGF1dG9tYWtlIE1ha2VmaWxlLmFtLgorIworIyBUaGUgcG8gbXVzdCBiZSBuYW1lZDoKKyMgICA8bWFuPi4kKGxhbmcpLnBvCisjIElmIGEgbWFuIHBhZ2UgcmVxdWlyZSBhbiBhZGRlbmR1bSwgeW91IG11c3QgbmFtZSBpdDoKKyMgICA8bWFuPi4kKGxhbmcpLnBvLmFkZGVuZHVtCisjIFdoZXJlIDxtYW4+IGNvcnJlc3BvbmRzIHRvIGEgZmlsZW5hbWUgaW4gdGhlIEMgZGlyZWN0b3J5ICh3aGljaCBjb250YWlucworIyB0aGUgRW5nbGlzaCBtYW4gcGFnZXMpLgorIworIyBUaGUgUE9zIHN1ZmZpeCBpcyAkKGxhbmcpLnBvIHRvIGFsbG93IGRsMTBuIHRvIGRldGVjdCB0aGUgb3V0ZGF0ZWQgUE9zLgorIworIworIyBJZiBhIG1hbiBwYWdlIGNhbm5vdCBiZSBnZW5lcmF0ZWQgKGl0IGlzIG5vdCBzdWZmaWNpZW50bHkgdHJhbnNsYXRlZDsgdGhlCisjIHRocmVzaG9sZCBpcyA4MCUpLCBpdCB3b24ndCBiZSBkaXN0cmlidXRlZCwgYW5kIHRoZSBidWlsZCB3b24ndCBmYWlsLgorIworCittYW5kaXIgPSBAbWFuZGlyQC8kKGxhbmcpCisKKyMgSW5mb3JtIGF1dG9tYWtlIHRoYXQgd2Ugd2FudCB0byBpbnN0YWxsIHNvbWUgbWFuIHBhZ2VzIGluIHNlY3Rpb24gMSwgNQorIyBhbmQgOC4KKyMgV2UgY2FuJ3Qgc2ltcGx5IHVzZToKKyMgZGlzdF9tYW5fTUFOUyA9ICQod2lsZGNhcmQgKi5bMS05XSkKKyMgQmVjYXVzZSB3aGVuIE1ha2VmaWxlLmluIGlzIGdlbmVyYXRlZCwgZGlzdF9tYW5fTUFOUyBpcyBlbXB0eSwgYW5kCisjIGF1dG9tYWtlIGRvIG5vdCBnZW5lcmF0ZSB0aGUgaW5zdGFsbC1tYW4gdGFyZ2V0cy4KK2Rpc3RfbWFuX01BTlMgPQorCisjIE92ZXJyaWRlIHRoZSBhdXRvbWFrZSdzIGluc3RhbGwtbWFuIHRhcmdldC4KKyMgQW5kIHNldCBkaXN0X21hbl9NQU5TIGFjY29yZGluZyB0byB0aGUgcGFnZXMgdGhhdCBjb3VsZCBiZSBnZW5lcmF0ZWQKKyMgd2hlbiB0aGlzIHRhcmdldCBpcyBjYWxsZWQuCitpbnN0YWxsLW1hbjogZGlzdF9tYW5fTUFOUyA9IHB0X0JSLXBhcnRlZC44CitpbnN0YWxsLW1hbjogaW5zdGFsbC1tYW4xIGluc3RhbGwtbWFuNSBpbnN0YWxsLW1hbjgKKworIyBGb3IgZWFjaCAucG8sIHRyeSB0byBnZW5lcmF0ZSB0aGUgbWFuIHBhZ2UKK2FsbC1sb2NhbDoKKwlmb3IgcG8gaW4gYGxzIC0xICQoc3JjZGlyKS8qLiQobGFuZykucG8gMj4vZGV2L251bGxgOyBkbyBcCisJCSQoTUFLRSkgJCQoYmFzZW5hbWUgJCR7cG8lLiQobGFuZykucG99KTsgXAorCWRvbmUKKworIyBSZW1vdmUgdGhlIG1hbiBwYWdlcyB0aGF0IHdlcmUgZ2VuZXJhdGVkIGZyb20gYSAucG8KK2NsZWFuLWxvY2FsOgorCWZvciBwbyBpbiBgbHMgLTEgJChzcmNkaXIpLyouJChsYW5nKS5wbyAyPi9kZXYvbnVsbGA7IGRvIFwKKwkJcm0gLWYgJCQoYmFzZW5hbWUgJCR7cG8lLiQobGFuZykucG99KTsgXAorCWRvbmUKKworLlBIT05ZOiB1cGRhdGVwbworIyBVcGRhdGUgdGhlIFBPIGluIHNyY2RpciwgYWNjb3JkaW5nIHRvIHRoZSBQT1QgaW4gQy4KKyMgQmFzZWQgb24gdGhlIGdldHRleHQgcG8vTWFrZWZpbGUuaW4uaW4KK3VwZGF0ZXBvOgorCXRtcGRpcj1gcHdkYDsgXAorCWNkICQoc3JjZGlyKTsgXAorCWZvciBwbyBpbiAqLiQobGFuZykucG87IGRvIFwKKwkgIGNhc2UgIiQkcG8iIGluICcqJyopIGNvbnRpbnVlOzsgZXNhYzsgXAorCSAgcG90PS4uL0MvcG8vJCR7cG8lJChsYW5nKS5wb31wb3Q7IFwKKwkgIGVjaG8gIiQoTVNHTUVSR0UpICQkcG8gJCRwb3QgLW8gJCR7cG8lcG99bmV3LnBvIjsgXAorCSAgaWYgJChNU0dNRVJHRSkgJCRwbyAkJHBvdCAtbyAkJHRtcGRpci8kJHtwbyVwb31uZXcucG87IHRoZW4gXAorCSAgICBpZiBjbXAgJCRwbyAkJHRtcGRpci8kJHtwbyVwb31uZXcucG8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKKwkgICAgICBybSAtZiAkJHRtcGRpci8kJHtwbyVwb31uZXcucG87IFwKKwkgICAgZWxzZSBcCisJICAgICAgaWYgbXYgLWYgJCR0bXBkaXIvJCR7cG8lcG99bmV3LnBvICQkcG87IHRoZW4gXAorCSAgICAgICAgOjsgXAorCSAgICAgIGVsc2UgXAorCSAgICAgICAgZWNobyAibXNnbWVyZ2UgZm9yICQkcG8gZmFpbGVkOiBjYW5ub3QgbW92ZSAkJHRtcGRpci8kJHtwbyVwb31uZXcucG8gdG8gJCRwbyIgMT4mMjsgXAorCSAgICAgICAgZXhpdCAxOyBcCisJICAgICAgZmk7IFwKKwkgICAgZmk7IFwKKwkgIGVsc2UgXAorCSAgICBlY2hvICJtc2dtZXJnZSBmb3IgJCRwbyBmYWlsZWQhIiAxPiYyOyBcCisJICAgIHJtIC1mICQkdG1wZGlyLyQke3BvJXBvfW5ldy5wbzsgXAorCSAgZmk7IFwKKwkgIG1zZ2ZtdCAtbyAvZGV2L251bGwgLS1zdGF0aXN0aWNzICQkcG87IFwKKwlkb25lCisKK2Rpc3QtaG9vazogdXBkYXRlcG8KKworIyBCdWlsZCB0aGUgcGFnZXMKK3BhcnRwcm9iZS44OgorCWZvciBsb2NhbGUgaW4gcHRfQlIgOyBkbyBcCisJCXBvNGEtdHJhbnNsYXRlIC1mIG1hbiAtbSAkKHNyY2RpcikvLi4vQy8kQCAtcCAkQC4kJGxvY2FsZS5wbyAtbCAkQCAkKHBvNGFfdHJhbnNsYXRlX29wdGlvbnMpIDsgXAorCQlpZiBbIC1mICQoc3JjZGlyKS8kQC4kJGxvY2FsZS5wby5hZGRlbmR1bSBdOyB0aGVuIFwKKwkJCXBvNGEtdHJhbnNsYXRlIC1mIG1hbiAtbSAkKHNyY2RpcikvLi4vQy8kQCAtcCAkQC4kJGxvY2FsZS5wbyAtbCAkQCAtYSAkKHNyY2RpcikvJEAuJCRsb2NhbGUucG8uYWRkZW5kdW0gJChwbzRhX3RyYW5zbGF0ZV9vcHRpb25zKSA7IFwKKwkJZmkgOyBcCisJZG9uZQpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2RvYy9wdF9CUi9NYWtlZmlsZS5hbSBiL3BhcnRlZC0xLjguNy9kb2MvcHRfQlIvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ3ODc3MwotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9kb2MvcHRfQlIvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSw3IEBACisjIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9tYWtlIHRvIHByb2R1Y2UgTWFrZWZpbGUuaW4KKworbGFuZz1wdF9CUgorCitpbmNsdWRlIC4uL3BvNGEubWsKKworTUFJTlRBSU5FUkNMRUFORklMRVMgPSBNYWtlZmlsZS5pbgpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2RvYy9wdF9CUi9NYWtlZmlsZS5pbiBiL3BhcnRlZC0xLjguNy9kb2MvcHRfQlIvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg2YWUxMgotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9kb2MvcHRfQlIvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw2MDUgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTAgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorCisjCisjIFlvdSBtdXN0IHNldCB0aGUgJChsYW5nKSB2YXJpYWJsZSB3aGVuIHlvdSBpbmNsdWRlIHRoaXMgbWFrZWZpbGUuCisjCisjIFlvdSBjYW4gdXNlIHRoZSAkKHBvNGFfdHJhbnNsYXRlX29wdGlvbnMpIHZhcmlhYmxlIHRvIHNwZWNpZnkgYWRkaXRpb25hbAorIyBvcHRpb25zIHRvIHBvNGEuCisjIEZvciBleGFtcGxlOiBwbzRhX3RyYW5zbGF0ZV9vcHRpb25zPS1MIEtPSTgtUiAtQSBLT0k4LVIKKyMKKyMKKyMgVGhpcyBtYWtlZmlsZSBkZWFscyB3aXRoIHRoZSBtYW5wYWdlcyBnZW5lcmF0ZWQgZnJvbSBQT3Mgd2l0aCBwbzRhLCBhbmQKKyMgc2hvdWxkIGJlIGluY2x1ZGVkIGluIGFuIGF1dG9tYWtlIE1ha2VmaWxlLmFtLgorIworIyBUaGUgcG8gbXVzdCBiZSBuYW1lZDoKKyMgICA8bWFuPi4kKGxhbmcpLnBvCisjIElmIGEgbWFuIHBhZ2UgcmVxdWlyZSBhbiBhZGRlbmR1bSwgeW91IG11c3QgbmFtZSBpdDoKKyMgICA8bWFuPi4kKGxhbmcpLnBvLmFkZGVuZHVtCisjIFdoZXJlIDxtYW4+IGNvcnJlc3BvbmRzIHRvIGEgZmlsZW5hbWUgaW4gdGhlIEMgZGlyZWN0b3J5ICh3aGljaCBjb250YWlucworIyB0aGUgRW5nbGlzaCBtYW4gcGFnZXMpLgorIworIyBUaGUgUE9zIHN1ZmZpeCBpcyAkKGxhbmcpLnBvIHRvIGFsbG93IGRsMTBuIHRvIGRldGVjdCB0aGUgb3V0ZGF0ZWQgUE9zLgorIworIworIyBJZiBhIG1hbiBwYWdlIGNhbm5vdCBiZSBnZW5lcmF0ZWQgKGl0IGlzIG5vdCBzdWZmaWNpZW50bHkgdHJhbnNsYXRlZDsgdGhlCisjIHRocmVzaG9sZCBpcyA4MCUpLCBpdCB3b24ndCBiZSBkaXN0cmlidXRlZCwgYW5kIHRoZSBidWlsZCB3b24ndCBmYWlsLgorIworVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK0RJU1RfQ09NTU9OID0gJChkaXN0X21hbl9NQU5TKSAkKHNyY2RpcikvLi4vcG80YS5tayBcCisJJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbgorc3ViZGlyID0gZG9jL3B0X0JSCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9hYnNvbHV0ZS1oZWFkZXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvYWxsb2NhLm00ICQodG9wX3NyY2RpcikvbTQvYXNzZXJ0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2F0ZXhpdC5tNCAkKHRvcF9zcmNkaXIpL200L2NhbGxvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jbG9zZS1zdHJlYW0ubTQgJCh0b3Bfc3JjZGlyKS9tNC9jbG9zZW91dC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jb2Rlc2V0Lm00ICQodG9wX3NyY2RpcikvbTQvY29uZmlnLWgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZGlybmFtZS5tNCAkKHRvcF9zcmNkaXIpL200L2Rvcy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9kb3VibGUtc2xhc2gtcm9vdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9lcnJvci5tNCAkKHRvcF9zcmNkaXIpL200L2V4aXRmYWlsLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2V4dGVuc2lvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9mcGVuZGluZy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9mcmVlLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0b3B0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgJCh0b3Bfc3JjZGlyKS9tNC9nbGliYzIxLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2dudWxpYi1jb21tb24ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZ251bGliLWNvbXAubTQgJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pbmxpbmUubTQgJCh0b3Bfc3JjZGlyKS9tNC9pbnR0eXBlcy1wcmkubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaW50dHlwZXMubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItaWdub3JlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbG9jYWxjaGFyc2V0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xvbmctb3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2xvbmdsb25nLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21icnRvd2MubTQgJCh0b3Bfc3JjZGlyKS9tNC9tYnN0YXRlX3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWVtY2hyLm00ICQodG9wX3NyY2RpcikvbTQvbWVtY21wLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21lbWNweS5tNCAkKHRvcF9zcmNkaXIpL200L21lbW1vdmUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWVtc2V0Lm00ICQodG9wX3NyY2RpcikvbTQvbmxzLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3BvLm00ICQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcXVvdGVhcmcubTQgJCh0b3Bfc3JjZGlyKS9tNC9yZWdleC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9yZW5hbWUubTQgJCh0b3Bfc3JjZGlyKS9tNC9ycG1hdGNoLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3NhZmUtcmVhZC5tNCAkKHRvcF9zcmNkaXIpL200L3NhZmUtd3JpdGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3NpemVfdC5tNCAkKHRvcF9zcmNkaXIpL200L3N0ZGFyZy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdGRib29sLm00ICQodG9wX3NyY2RpcikvbTQvc3RkaW50Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0ZGxpYl9oLm00ICQodG9wX3NyY2RpcikvbTQvc3RyY3Nwbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdHJpbmdfaC5tNCAkKHRvcF9zcmNkaXIpL200L3N0cm5kdXAubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3Rybmxlbi5tNCAkKHRvcF9zcmNkaXIpL200L3N0cnRvZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdHJ0b2wubTQgJCh0b3Bfc3JjZGlyKS9tNC91bmlzdGRfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC91dGltYnVmLm00ICQodG9wX3NyY2RpcikvbTQvdXRpbWUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdXRpbWVzLW51bGwubTQgJCh0b3Bfc3JjZGlyKS9tNC93Y2hhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC93Y3R5cGUubTQgJCh0b3Bfc3JjZGlyKS9tNC93aW50X3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQveGFsbG9jLm00ICQodG9wX3NyY2RpcikvbTQveHN0cm5kdXAubTQgXAorCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCithbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorCSQoQUNMT0NBTF9NNCkKK21raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK1NPVVJDRVMgPQorRElTVF9TT1VSQ0VTID0KK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitBQlNPTFVURV9JTlRUWVBFU19IID0gQEFCU09MVVRFX0lOVFRZUEVTX0hACitBQlNPTFVURV9TVERJTlRfSCA9IEBBQlNPTFVURV9TVERJTlRfSEAKK0FCU09MVVRFX1NURExJQl9IID0gQEFCU09MVVRFX1NURExJQl9IQAorQUJTT0xVVEVfU1RSSU5HX0ggPSBAQUJTT0xVVEVfU1RSSU5HX0hACitBQlNPTFVURV9VTklTVERfSCA9IEBBQlNPTFVURV9VTklTVERfSEAKK0FCU09MVVRFX1dDSEFSX0ggPSBAQUJTT0xVVEVfV0NIQVJfSEAKK0FCU09MVVRFX1dDVFlQRV9IID0gQEFCU09MVVRFX1dDVFlQRV9IQAorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQUxMT0NBID0gQEFMTE9DQUAKK0FMTE9DQV9IID0gQEFMTE9DQV9IQAorQU1UQVIgPSBAQU1UQVJACitBUiA9IEBBUkAKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBV0sgPSBAQVdLQAorQklUU0laRU9GX1BUUkRJRkZfVCA9IEBCSVRTSVpFT0ZfUFRSRElGRl9UQAorQklUU0laRU9GX1NJR19BVE9NSUNfVCA9IEBCSVRTSVpFT0ZfU0lHX0FUT01JQ19UQAorQklUU0laRU9GX1NJWkVfVCA9IEBCSVRTSVpFT0ZfU0laRV9UQAorQklUU0laRU9GX1dDSEFSX1QgPSBAQklUU0laRU9GX1dDSEFSX1RACitCSVRTSVpFT0ZfV0lOVF9UID0gQEJJVFNJWkVPRl9XSU5UX1RACitCVUlMRElORk8gPSBAQlVJTERJTkZPQAorQ0MgPSBAQ0NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NIRUNLX0NGTEFHUyA9IEBDSEVDS19DRkxBR1NACitDSEVDS19MSUJTID0gQENIRUNLX0xJQlNACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitETF9MSUJTID0gQERMX0xJQlNACitETV9MSUJTID0gQERNX0xJQlNACitFQ0hPID0gQEVDSE9ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VYRUVYVCA9IEBFWEVFWFRACitGNzcgPSBARjc3QAorRkZMQUdTID0gQEZGTEFHU0AKK0dFVE9QVF9IID0gQEdFVE9QVF9IQAorR0xJQkMyMSA9IEBHTElCQzIxQAorR01TR0ZNVCA9IEBHTVNHRk1UQAorR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACitHTlVMSUJfQ0hPV04gPSBAR05VTElCX0NIT1dOQAorR05VTElCX0RVUDIgPSBAR05VTElCX0RVUDJACitHTlVMSUJfRkNIRElSID0gQEdOVUxJQl9GQ0hESVJACitHTlVMSUJfRlRSVU5DQVRFID0gQEdOVUxJQl9GVFJVTkNBVEVACitHTlVMSUJfR0VUQ1dEID0gQEdOVUxJQl9HRVRDV0RACitHTlVMSUJfR0VUTE9HSU5fUiA9IEBHTlVMSUJfR0VUTE9HSU5fUkAKK0dOVUxJQl9HRVRTVUJPUFQgPSBAR05VTElCX0dFVFNVQk9QVEAKK0dOVUxJQl9JTUFYQUJTID0gQEdOVUxJQl9JTUFYQUJTQAorR05VTElCX0lNQVhESVYgPSBAR05VTElCX0lNQVhESVZACitHTlVMSUJfTUJTQ0FTRUNNUCA9IEBHTlVMSUJfTUJTQ0FTRUNNUEAKK0dOVUxJQl9NQlNDQVNFU1RSID0gQEdOVUxJQl9NQlNDQVNFU1RSQAorR05VTElCX01CU0NIUiA9IEBHTlVMSUJfTUJTQ0hSQAorR05VTElCX01CU0NTUE4gPSBAR05VTElCX01CU0NTUE5ACitHTlVMSUJfTUJTTEVOID0gQEdOVUxJQl9NQlNMRU5ACitHTlVMSUJfTUJTTkNBU0VDTVAgPSBAR05VTElCX01CU05DQVNFQ01QQAorR05VTElCX01CU1BCUksgPSBAR05VTElCX01CU1BCUktACitHTlVMSUJfTUJTUENBU0VDTVAgPSBAR05VTElCX01CU1BDQVNFQ01QQAorR05VTElCX01CU1JDSFIgPSBAR05VTElCX01CU1JDSFJACitHTlVMSUJfTUJTU0VQID0gQEdOVUxJQl9NQlNTRVBACitHTlVMSUJfTUJTU1BOID0gQEdOVUxJQl9NQlNTUE5ACitHTlVMSUJfTUJTU1RSID0gQEdOVUxJQl9NQlNTVFJACitHTlVMSUJfTUJTVE9LX1IgPSBAR05VTElCX01CU1RPS19SQAorR05VTElCX01FTU1FTSA9IEBHTlVMSUJfTUVNTUVNQAorR05VTElCX01FTVBDUFkgPSBAR05VTElCX01FTVBDUFlACitHTlVMSUJfTUVNUkNIUiA9IEBHTlVMSUJfTUVNUkNIUkAKK0dOVUxJQl9NS0RURU1QID0gQEdOVUxJQl9NS0RURU1QQAorR05VTElCX01LU1RFTVAgPSBAR05VTElCX01LU1RFTVBACitHTlVMSUJfUkVBRExJTksgPSBAR05VTElCX1JFQURMSU5LQAorR05VTElCX1NMRUVQID0gQEdOVUxJQl9TTEVFUEAKK0dOVUxJQl9TVFBDUFkgPSBAR05VTElCX1NUUENQWUAKK0dOVUxJQl9TVFBOQ1BZID0gQEdOVUxJQl9TVFBOQ1BZQAorR05VTElCX1NUUkNBU0VTVFIgPSBAR05VTElCX1NUUkNBU0VTVFJACitHTlVMSUJfU1RSQ0hSTlVMID0gQEdOVUxJQl9TVFJDSFJOVUxACitHTlVMSUJfU1RSRFVQID0gQEdOVUxJQl9TVFJEVVBACitHTlVMSUJfU1RSTkRVUCA9IEBHTlVMSUJfU1RSTkRVUEAKK0dOVUxJQl9TVFJOTEVOID0gQEdOVUxJQl9TVFJOTEVOQAorR05VTElCX1NUUlBCUksgPSBAR05VTElCX1NUUlBCUktACitHTlVMSUJfU1RSU0VQID0gQEdOVUxJQl9TVFJTRVBACitHTlVMSUJfU1RSVE9JTUFYID0gQEdOVUxJQl9TVFJUT0lNQVhACitHTlVMSUJfU1RSVE9LX1IgPSBAR05VTElCX1NUUlRPS19SQAorR05VTElCX1NUUlRPVU1BWCA9IEBHTlVMSUJfU1RSVE9VTUFYQAorR1JFUCA9IEBHUkVQQAorSEFWRV9ERUNMX0dFVExPR0lOX1IgPSBASEFWRV9ERUNMX0dFVExPR0lOX1JACitIQVZFX0RFQ0xfSU1BWEFCUyA9IEBIQVZFX0RFQ0xfSU1BWEFCU0AKK0hBVkVfREVDTF9JTUFYRElWID0gQEhBVkVfREVDTF9JTUFYRElWQAorSEFWRV9ERUNMX01FTU1FTSA9IEBIQVZFX0RFQ0xfTUVNTUVNQAorSEFWRV9ERUNMX01FTVJDSFIgPSBASEFWRV9ERUNMX01FTVJDSFJACitIQVZFX0RFQ0xfU1RSRFVQID0gQEhBVkVfREVDTF9TVFJEVVBACitIQVZFX0RFQ0xfU1RSTkNBU0VDTVAgPSBASEFWRV9ERUNMX1NUUk5DQVNFQ01QQAorSEFWRV9ERUNMX1NUUk5EVVAgPSBASEFWRV9ERUNMX1NUUk5EVVBACitIQVZFX0RFQ0xfU1RSTkxFTiA9IEBIQVZFX0RFQ0xfU1RSTkxFTkAKK0hBVkVfREVDTF9TVFJUT0lNQVggPSBASEFWRV9ERUNMX1NUUlRPSU1BWEAKK0hBVkVfREVDTF9TVFJUT0tfUiA9IEBIQVZFX0RFQ0xfU1RSVE9LX1JACitIQVZFX0RFQ0xfU1RSVE9VTUFYID0gQEhBVkVfREVDTF9TVFJUT1VNQVhACitIQVZFX0RVUDIgPSBASEFWRV9EVVAyQAorSEFWRV9GVFJVTkNBVEUgPSBASEFWRV9GVFJVTkNBVEVACitIQVZFX0dFVFNVQk9QVCA9IEBIQVZFX0dFVFNVQk9QVEAKK0hBVkVfSU5UVFlQRVNfSCA9IEBIQVZFX0lOVFRZUEVTX0hACitIQVZFX0lTV0NOVFJMID0gQEhBVkVfSVNXQ05UUkxACitIQVZFX0xPTkdfTE9OR19JTlQgPSBASEFWRV9MT05HX0xPTkdfSU5UQAorSEFWRV9NRU1QQ1BZID0gQEhBVkVfTUVNUENQWUAKK0hBVkVfTUtEVEVNUCA9IEBIQVZFX01LRFRFTVBACitIQVZFX1JFQURMSU5LID0gQEhBVkVfUkVBRExJTktACitIQVZFX1NJR05FRF9TSUdfQVRPTUlDX1QgPSBASEFWRV9TSUdORURfU0lHX0FUT01JQ19UQAorSEFWRV9TSUdORURfV0NIQVJfVCA9IEBIQVZFX1NJR05FRF9XQ0hBUl9UQAorSEFWRV9TSUdORURfV0lOVF9UID0gQEhBVkVfU0lHTkVEX1dJTlRfVEAKK0hBVkVfU0xFRVAgPSBASEFWRV9TTEVFUEAKK0hBVkVfU1RESU5UX0ggPSBASEFWRV9TVERJTlRfSEAKK0hBVkVfU1RQQ1BZID0gQEhBVkVfU1RQQ1BZQAorSEFWRV9TVFBOQ1BZID0gQEhBVkVfU1RQTkNQWUAKK0hBVkVfU1RSQ0FTRUNNUCA9IEBIQVZFX1NUUkNBU0VDTVBACitIQVZFX1NUUkNBU0VTVFIgPSBASEFWRV9TVFJDQVNFU1RSQAorSEFWRV9TVFJDSFJOVUwgPSBASEFWRV9TVFJDSFJOVUxACitIQVZFX1NUUk5EVVAgPSBASEFWRV9TVFJORFVQQAorSEFWRV9TVFJQQlJLID0gQEhBVkVfU1RSUEJSS0AKK0hBVkVfU1RSU0VQID0gQEhBVkVfU1RSU0VQQAorSEFWRV9TWVNfQklUWVBFU19IID0gQEhBVkVfU1lTX0JJVFlQRVNfSEAKK0hBVkVfU1lTX0lOVFRZUEVTX0ggPSBASEFWRV9TWVNfSU5UVFlQRVNfSEAKK0hBVkVfU1lTX1RZUEVTX0ggPSBASEFWRV9TWVNfVFlQRVNfSEAKK0hBVkVfVU5JU1REX0ggPSBASEFWRV9VTklTVERfSEAKK0hBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVCA9IEBIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlRACitIQVZFX1dDVFlQRV9IID0gQEhBVkVfV0NUWVBFX0hACitIQVZFX1dJTlRfVCA9IEBIQVZFX1dJTlRfVEAKK0hBVkVfX0JPT0wgPSBASEFWRV9fQk9PTEAKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSU5UTElOQ1MgPSBASU5UTElOQ1NACitJTlRMTElCUyA9IEBJTlRMTElCU0AKK0lOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKK0lOVFRZUEVTX0ggPSBASU5UVFlQRVNfSEAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQklDT05WID0gQExJQklDT05WQAorTElCSU5UTCA9IEBMSUJJTlRMQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTE5fUyA9IEBMTl9TQAorTFRBTExPQ0EgPSBATFRBTExPQ0FACitMVExJQklDT05WID0gQExUTElCSUNPTlZACitMVExJQklOVEwgPSBATFRMSUJJTlRMQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK0xUX0FHRSA9IEBMVF9BR0VACitMVF9DVVJSRU5UID0gQExUX0NVUlJFTlRACitMVF9SRUxFQVNFID0gQExUX1JFTEVBU0VACitMVF9SRVZJU0lPTiA9IEBMVF9SRVZJU0lPTkAKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTVNHRk1UID0gQE1TR0ZNVEAKK01TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKK01TR01FUkdFID0gQE1TR01FUkdFQAorT0JKRVhUID0gQE9CSkVYVEAKK09TID0gQE9TQAorT1NfTElCUyA9IEBPU19MSUJTQAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBUlRFRExERkxBR1MgPSBAUEFSVEVETERGTEFHU0AKK1BBUlRFRF9MSUJTID0gQFBBUlRFRF9MSUJTQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQT1NVQiA9IEBQT1NVQkAKK1BPV19MSUIgPSBAUE9XX0xJQkAKK1BSSVBUUl9QUkVGSVggPSBAUFJJUFRSX1BSRUZJWEAKK1BSSV9NQUNST1NfQlJPS0VOID0gQFBSSV9NQUNST1NfQlJPS0VOQAorUFRSRElGRl9UX1NVRkZJWCA9IEBQVFJESUZGX1RfU1VGRklYQAorUkFOTElCID0gQFJBTkxJQkAKK1JFSVNFUl9MSUJTID0gQFJFSVNFUl9MSUJTQAorUkVQTEFDRV9DSE9XTiA9IEBSRVBMQUNFX0NIT1dOQAorUkVQTEFDRV9GQ0hESVIgPSBAUkVQTEFDRV9GQ0hESVJACitSRVBMQUNFX0dFVENXRCA9IEBSRVBMQUNFX0dFVENXREAKK1JFUExBQ0VfTUtTVEVNUCA9IEBSRVBMQUNFX01LU1RFTVBACitTRUQgPSBAU0VEQAorU0VMSU5VWF9MSUJTID0gQFNFTElOVVhfTElCU0AKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTSUdfQVRPTUlDX1RfU1VGRklYID0gQFNJR19BVE9NSUNfVF9TVUZGSVhACitTSVpFX1RfU1VGRklYID0gQFNJWkVfVF9TVUZGSVhACitTVERCT09MX0ggPSBAU1REQk9PTF9IQAorU1RESU5UX0ggPSBAU1RESU5UX0hACitTVFJJUCA9IEBTVFJJUEAKK1VTRV9OTFMgPSBAVVNFX05MU0AKK1VVSURfTElCUyA9IEBVVUlEX0xJQlNACitWRVJTSU9OID0gQFZFUlNJT05ACitXQ0hBUl9IID0gQFdDSEFSX0hACitXQ0hBUl9UX1NVRkZJWCA9IEBXQ0hBUl9UX1NVRkZJWEAKK1dDVFlQRV9IID0gQFdDVFlQRV9IQAorV0lOVF9UX1NVRkZJWCA9IEBXSU5UX1RfU1VGRklYQAorWEdFVFRFWFQgPSBAWEdFVFRFWFRACitYR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9DWFggPSBAYWNfY3RfQ1hYQAorYWNfY3RfRjc3ID0gQGFjX2N0X0Y3N0AKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitnbF9MSUJPQkpTID0gQGdsX0xJQk9CSlNACitnbF9MVExJQk9CSlMgPSBAZ2xfTFRMSUJPQkpTQAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbWFuZGlyID0gQG1hbmRpckAvJChsYW5nKQorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorbGFuZyA9IHB0X0JSCisKKyMgSW5mb3JtIGF1dG9tYWtlIHRoYXQgd2Ugd2FudCB0byBpbnN0YWxsIHNvbWUgbWFuIHBhZ2VzIGluIHNlY3Rpb24gMSwgNQorIyBhbmQgOC4KKyMgV2UgY2FuJ3Qgc2ltcGx5IHVzZToKKyMgZGlzdF9tYW5fTUFOUyA9ICQod2lsZGNhcmQgKi5bMS05XSkKKyMgQmVjYXVzZSB3aGVuIE1ha2VmaWxlLmluIGlzIGdlbmVyYXRlZCwgZGlzdF9tYW5fTUFOUyBpcyBlbXB0eSwgYW5kCisjIGF1dG9tYWtlIGRvIG5vdCBnZW5lcmF0ZSB0aGUgaW5zdGFsbC1tYW4gdGFyZ2V0cy4KK2Rpc3RfbWFuX01BTlMgPSAKK01BSU5UQUlORVJDTEVBTkZJTEVTID0gTWFrZWZpbGUuaW4KK2FsbDogYWxsLWFtCisKKy5TVUZGSVhFUzoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvLi4vcG80YS5tayAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggXAorCQkmJiBleGl0IDA7IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251ICBkb2MvcHRfQlIvTWFrZWZpbGUnOyBcCisJY2QgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWdudSAgZG9jL3B0X0JSL01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicwordGFnczogVEFHUworVEFHUzoKKworY3RhZ3M6IENUQUdTCitDVEFHUzoKKworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLXBSICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtcFIgJCRkLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAkKGRpc3RkaXIpLyQkZmlsZSBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgJChkaXN0ZGlyKS8kJGZpbGUgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIFwKKwkgIHRvcF9kaXN0ZGlyPSIkKHRvcF9kaXN0ZGlyKSIgZGlzdGRpcj0iJChkaXN0ZGlyKSIgXAorCSAgZGlzdC1ob29rCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUgYWxsLWxvY2FsCitpbnN0YWxsZGlyczoKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCisJICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCisJLXRlc3QgLXogIiQoTUFJTlRBSU5FUkNMRUFORklMRVMpIiB8fCBybSAtZiAkKE1BSU5UQUlORVJDTEVBTkZJTEVTKQorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tbG9jYWwgbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWdlbmVyaWMKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1leGVjLWFtOgorCitpbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQorCitpbnN0YWxsY2hlY2stYW06CisKK21haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtYW0KKworcGRmLWFtOgorCitwczogcHMtYW0KKworcHMtYW06CisKK3VuaW5zdGFsbC1hbToKKworLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAorCisuUEhPTlk6IGFsbCBhbGwtYW0gYWxsLWxvY2FsIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAorCWNsZWFuLWxpYnRvb2wgY2xlYW4tbG9jYWwgZGlzdC1ob29rIGRpc3RjbGVhbiBcCisJZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAorCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAorCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgXAorCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBcCisJaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKKwlpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgXAorCWluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIFwKKwltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0KKworCisjIE92ZXJyaWRlIHRoZSBhdXRvbWFrZSdzIGluc3RhbGwtbWFuIHRhcmdldC4KKyMgQW5kIHNldCBkaXN0X21hbl9NQU5TIGFjY29yZGluZyB0byB0aGUgcGFnZXMgdGhhdCBjb3VsZCBiZSBnZW5lcmF0ZWQKKyMgd2hlbiB0aGlzIHRhcmdldCBpcyBjYWxsZWQuCitpbnN0YWxsLW1hbjogZGlzdF9tYW5fTUFOUyA9IHB0X0JSLXBhcnRlZC44CitpbnN0YWxsLW1hbjogaW5zdGFsbC1tYW4xIGluc3RhbGwtbWFuNSBpbnN0YWxsLW1hbjgKKworIyBGb3IgZWFjaCAucG8sIHRyeSB0byBnZW5lcmF0ZSB0aGUgbWFuIHBhZ2UKK2FsbC1sb2NhbDoKKwlmb3IgcG8gaW4gYGxzIC0xICQoc3JjZGlyKS8qLiQobGFuZykucG8gMj4vZGV2L251bGxgOyBkbyBcCisJCSQoTUFLRSkgJCQoYmFzZW5hbWUgJCR7cG8lLiQobGFuZykucG99KTsgXAorCWRvbmUKKworIyBSZW1vdmUgdGhlIG1hbiBwYWdlcyB0aGF0IHdlcmUgZ2VuZXJhdGVkIGZyb20gYSAucG8KK2NsZWFuLWxvY2FsOgorCWZvciBwbyBpbiBgbHMgLTEgJChzcmNkaXIpLyouJChsYW5nKS5wbyAyPi9kZXYvbnVsbGA7IGRvIFwKKwkJcm0gLWYgJCQoYmFzZW5hbWUgJCR7cG8lLiQobGFuZykucG99KTsgXAorCWRvbmUKKworLlBIT05ZOiB1cGRhdGVwbworIyBVcGRhdGUgdGhlIFBPIGluIHNyY2RpciwgYWNjb3JkaW5nIHRvIHRoZSBQT1QgaW4gQy4KKyMgQmFzZWQgb24gdGhlIGdldHRleHQgcG8vTWFrZWZpbGUuaW4uaW4KK3VwZGF0ZXBvOgorCXRtcGRpcj1gcHdkYDsgXAorCWNkICQoc3JjZGlyKTsgXAorCWZvciBwbyBpbiAqLiQobGFuZykucG87IGRvIFwKKwkgIGNhc2UgIiQkcG8iIGluICcqJyopIGNvbnRpbnVlOzsgZXNhYzsgXAorCSAgcG90PS4uL0MvcG8vJCR7cG8lJChsYW5nKS5wb31wb3Q7IFwKKwkgIGVjaG8gIiQoTVNHTUVSR0UpICQkcG8gJCRwb3QgLW8gJCR7cG8lcG99bmV3LnBvIjsgXAorCSAgaWYgJChNU0dNRVJHRSkgJCRwbyAkJHBvdCAtbyAkJHRtcGRpci8kJHtwbyVwb31uZXcucG87IHRoZW4gXAorCSAgICBpZiBjbXAgJCRwbyAkJHRtcGRpci8kJHtwbyVwb31uZXcucG8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKKwkgICAgICBybSAtZiAkJHRtcGRpci8kJHtwbyVwb31uZXcucG87IFwKKwkgICAgZWxzZSBcCisJICAgICAgaWYgbXYgLWYgJCR0bXBkaXIvJCR7cG8lcG99bmV3LnBvICQkcG87IHRoZW4gXAorCSAgICAgICAgOjsgXAorCSAgICAgIGVsc2UgXAorCSAgICAgICAgZWNobyAibXNnbWVyZ2UgZm9yICQkcG8gZmFpbGVkOiBjYW5ub3QgbW92ZSAkJHRtcGRpci8kJHtwbyVwb31uZXcucG8gdG8gJCRwbyIgMT4mMjsgXAorCSAgICAgICAgZXhpdCAxOyBcCisJICAgICAgZmk7IFwKKwkgICAgZmk7IFwKKwkgIGVsc2UgXAorCSAgICBlY2hvICJtc2dtZXJnZSBmb3IgJCRwbyBmYWlsZWQhIiAxPiYyOyBcCisJICAgIHJtIC1mICQkdG1wZGlyLyQke3BvJXBvfW5ldy5wbzsgXAorCSAgZmk7IFwKKwkgIG1zZ2ZtdCAtbyAvZGV2L251bGwgLS1zdGF0aXN0aWNzICQkcG87IFwKKwlkb25lCisKK2Rpc3QtaG9vazogdXBkYXRlcG8KKworIyBCdWlsZCB0aGUgcGFnZXMKK3BhcnRwcm9iZS44OgorCWZvciBsb2NhbGUgaW4gcHRfQlIgOyBkbyBcCisJCXBvNGEtdHJhbnNsYXRlIC1mIG1hbiAtbSAkKHNyY2RpcikvLi4vQy8kQCAtcCAkQC4kJGxvY2FsZS5wbyAtbCAkQCAkKHBvNGFfdHJhbnNsYXRlX29wdGlvbnMpIDsgXAorCQlpZiBbIC1mICQoc3JjZGlyKS8kQC4kJGxvY2FsZS5wby5hZGRlbmR1bSBdOyB0aGVuIFwKKwkJCXBvNGEtdHJhbnNsYXRlIC1mIG1hbiAtbSAkKHNyY2RpcikvLi4vQy8kQCAtcCAkQC4kJGxvY2FsZS5wbyAtbCAkQCAtYSAkKHNyY2RpcikvJEAuJCRsb2NhbGUucG8uYWRkZW5kdW0gJChwbzRhX3RyYW5zbGF0ZV9vcHRpb25zKSA7IFwKKwkJZmkgOyBcCisJZG9uZQorIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2RvYy9zdGFtcC12dGkgYi9wYXJ0ZWQtMS44LjcvZG9jL3N0YW1wLXZ0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzdjMjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2RvYy9zdGFtcC12dGkKQEAgLTAsMCArMSw0IEBACitAc2V0IFVQREFURUQgMTggQXByaWwgMjAwNworQHNldCBVUERBVEVELU1PTlRIIEFwcmlsIDIwMDcKK0BzZXQgRURJVElPTiAxLjguNworQHNldCBWRVJTSU9OIDEuOC43CmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvZG9jL3ZlcnNpb24udGV4aSBiL3BhcnRlZC0xLjguNy9kb2MvdmVyc2lvbi50ZXhpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzN2MyNDkKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvZG9jL3ZlcnNpb24udGV4aQpAQCAtMCwwICsxLDQgQEAKK0BzZXQgVVBEQVRFRCAxOCBBcHJpbCAyMDA3CitAc2V0IFVQREFURUQtTU9OVEggQXByaWwgMjAwNworQHNldCBFRElUSU9OIDEuOC43CitAc2V0IFZFUlNJT04gMS44LjcKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9pbmNsdWRlL01ha2VmaWxlLmFtIGIvcGFydGVkLTEuOC43L2luY2x1ZGUvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU3MTVjZQotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9pbmNsdWRlL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMyBAQAorU1VCRElSUyA9IHBhcnRlZAorCitNQUlOVEFJTkVSQ0xFQU5GSUxFUyA9IE1ha2VmaWxlLmluClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2luY2x1ZGUvTWFrZWZpbGUuaW4gYi9wYXJ0ZWQtMS44LjcvaW5jbHVkZS9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWQxNTk2Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2luY2x1ZGUvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw2NzEgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTAgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK3N1YmRpciA9IGluY2x1ZGUKK0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbgorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvbTQvYWJzb2x1dGUtaGVhZGVyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2FsbG9jYS5tNCAkKHRvcF9zcmNkaXIpL200L2Fzc2VydC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9hdGV4aXQubTQgJCh0b3Bfc3JjZGlyKS9tNC9jYWxsb2MubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY2xvc2Utc3RyZWFtLm00ICQodG9wX3NyY2RpcikvbTQvY2xvc2VvdXQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY29kZXNldC5tNCAkKHRvcF9zcmNkaXIpL200L2NvbmZpZy1oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2Rpcm5hbWUubTQgJCh0b3Bfc3JjZGlyKS9tNC9kb3MubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZG91YmxlLXNsYXNoLXJvb3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZXJyb3IubTQgJCh0b3Bfc3JjZGlyKS9tNC9leGl0ZmFpbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9leHRlbnNpb25zLm00ICQodG9wX3NyY2RpcikvbTQvZnBlbmRpbmcubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZnJlZS5tNCAkKHRvcF9zcmNkaXIpL200L2dldG9wdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00ICQodG9wX3NyY2RpcikvbTQvZ2xpYmMyMS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9nbnVsaWItY29tbW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2dudWxpYi1jb21wLm00ICQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaW5saW5lLm00ICQodG9wX3NyY2RpcikvbTQvaW50dHlwZXMtcHJpLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ludHR5cGVzLm00ICQodG9wX3NyY2RpcikvbTQvbGliLWlnbm9yZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xvY2FsY2hhcnNldC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sb25nLW9wdGlvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9sb25nbG9uZy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tYnJ0b3djLm00ICQodG9wX3NyY2RpcikvbTQvbWJzdGF0ZV90Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21lbWNoci5tNCAkKHRvcF9zcmNkaXIpL200L21lbWNtcC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tZW1jcHkubTQgJCh0b3Bfc3JjZGlyKS9tNC9tZW1tb3ZlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21lbXNldC5tNCAkKHRvcF9zcmNkaXIpL200L25scy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCAkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3F1b3RlYXJnLm00ICQodG9wX3NyY2RpcikvbTQvcmVnZXgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcmVuYW1lLm00ICQodG9wX3NyY2RpcikvbTQvcnBtYXRjaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zYWZlLXJlYWQubTQgJCh0b3Bfc3JjZGlyKS9tNC9zYWZlLXdyaXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3NzaXplX3QubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGRhcmcubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RkYm9vbC5tNCAkKHRvcF9zcmNkaXIpL200L3N0ZGludC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdGRsaWJfaC5tNCAkKHRvcF9zcmNkaXIpL200L3N0cmNzcG4ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RyaW5nX2gubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHJuZHVwLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0cm5sZW4ubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHJ0b2QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RydG9sLm00ICQodG9wX3NyY2RpcikvbTQvdW5pc3RkX2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdXRpbWJ1Zi5tNCAkKHRvcF9zcmNkaXIpL200L3V0aW1lLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3V0aW1lcy1udWxsLm00ICQodG9wX3NyY2RpcikvbTQvd2NoYXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvd2N0eXBlLm00ICQodG9wX3NyY2RpcikvbTQvd2ludF90Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3hhbGxvYy5tNCAkKHRvcF9zcmNkaXIpL200L3hzdHJuZHVwLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitTT1VSQ0VTID0KK0RJU1RfU09VUkNFUyA9CitSRUNVUlNJVkVfVEFSR0VUUyA9IGFsbC1yZWN1cnNpdmUgY2hlY2stcmVjdXJzaXZlIGR2aS1yZWN1cnNpdmUgXAorCWh0bWwtcmVjdXJzaXZlIGluZm8tcmVjdXJzaXZlIGluc3RhbGwtZGF0YS1yZWN1cnNpdmUgXAorCWluc3RhbGwtZHZpLXJlY3Vyc2l2ZSBpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlIFwKKwlpbnN0YWxsLWh0bWwtcmVjdXJzaXZlIGluc3RhbGwtaW5mby1yZWN1cnNpdmUgXAorCWluc3RhbGwtcGRmLXJlY3Vyc2l2ZSBpbnN0YWxsLXBzLXJlY3Vyc2l2ZSBpbnN0YWxsLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZSBpbnN0YWxsZGlycy1yZWN1cnNpdmUgcGRmLXJlY3Vyc2l2ZSBcCisJcHMtcmVjdXJzaXZlIHVuaW5zdGFsbC1yZWN1cnNpdmUKK1JFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTID0gbW9zdGx5Y2xlYW4tcmVjdXJzaXZlIGNsZWFuLXJlY3Vyc2l2ZQlcCisgIGRpc3RjbGVhbi1yZWN1cnNpdmUgbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUKK0VUQUdTID0gZXRhZ3MKK0NUQUdTID0gY3RhZ3MKK0RJU1RfU1VCRElSUyA9ICQoU1VCRElSUykKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitBQlNPTFVURV9JTlRUWVBFU19IID0gQEFCU09MVVRFX0lOVFRZUEVTX0hACitBQlNPTFVURV9TVERJTlRfSCA9IEBBQlNPTFVURV9TVERJTlRfSEAKK0FCU09MVVRFX1NURExJQl9IID0gQEFCU09MVVRFX1NURExJQl9IQAorQUJTT0xVVEVfU1RSSU5HX0ggPSBAQUJTT0xVVEVfU1RSSU5HX0hACitBQlNPTFVURV9VTklTVERfSCA9IEBBQlNPTFVURV9VTklTVERfSEAKK0FCU09MVVRFX1dDSEFSX0ggPSBAQUJTT0xVVEVfV0NIQVJfSEAKK0FCU09MVVRFX1dDVFlQRV9IID0gQEFCU09MVVRFX1dDVFlQRV9IQAorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQUxMT0NBID0gQEFMTE9DQUAKK0FMTE9DQV9IID0gQEFMTE9DQV9IQAorQU1UQVIgPSBAQU1UQVJACitBUiA9IEBBUkAKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBV0sgPSBAQVdLQAorQklUU0laRU9GX1BUUkRJRkZfVCA9IEBCSVRTSVpFT0ZfUFRSRElGRl9UQAorQklUU0laRU9GX1NJR19BVE9NSUNfVCA9IEBCSVRTSVpFT0ZfU0lHX0FUT01JQ19UQAorQklUU0laRU9GX1NJWkVfVCA9IEBCSVRTSVpFT0ZfU0laRV9UQAorQklUU0laRU9GX1dDSEFSX1QgPSBAQklUU0laRU9GX1dDSEFSX1RACitCSVRTSVpFT0ZfV0lOVF9UID0gQEJJVFNJWkVPRl9XSU5UX1RACitCVUlMRElORk8gPSBAQlVJTERJTkZPQAorQ0MgPSBAQ0NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NIRUNLX0NGTEFHUyA9IEBDSEVDS19DRkxBR1NACitDSEVDS19MSUJTID0gQENIRUNLX0xJQlNACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitETF9MSUJTID0gQERMX0xJQlNACitETV9MSUJTID0gQERNX0xJQlNACitFQ0hPID0gQEVDSE9ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VYRUVYVCA9IEBFWEVFWFRACitGNzcgPSBARjc3QAorRkZMQUdTID0gQEZGTEFHU0AKK0dFVE9QVF9IID0gQEdFVE9QVF9IQAorR0xJQkMyMSA9IEBHTElCQzIxQAorR01TR0ZNVCA9IEBHTVNHRk1UQAorR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACitHTlVMSUJfQ0hPV04gPSBAR05VTElCX0NIT1dOQAorR05VTElCX0RVUDIgPSBAR05VTElCX0RVUDJACitHTlVMSUJfRkNIRElSID0gQEdOVUxJQl9GQ0hESVJACitHTlVMSUJfRlRSVU5DQVRFID0gQEdOVUxJQl9GVFJVTkNBVEVACitHTlVMSUJfR0VUQ1dEID0gQEdOVUxJQl9HRVRDV0RACitHTlVMSUJfR0VUTE9HSU5fUiA9IEBHTlVMSUJfR0VUTE9HSU5fUkAKK0dOVUxJQl9HRVRTVUJPUFQgPSBAR05VTElCX0dFVFNVQk9QVEAKK0dOVUxJQl9JTUFYQUJTID0gQEdOVUxJQl9JTUFYQUJTQAorR05VTElCX0lNQVhESVYgPSBAR05VTElCX0lNQVhESVZACitHTlVMSUJfTUJTQ0FTRUNNUCA9IEBHTlVMSUJfTUJTQ0FTRUNNUEAKK0dOVUxJQl9NQlNDQVNFU1RSID0gQEdOVUxJQl9NQlNDQVNFU1RSQAorR05VTElCX01CU0NIUiA9IEBHTlVMSUJfTUJTQ0hSQAorR05VTElCX01CU0NTUE4gPSBAR05VTElCX01CU0NTUE5ACitHTlVMSUJfTUJTTEVOID0gQEdOVUxJQl9NQlNMRU5ACitHTlVMSUJfTUJTTkNBU0VDTVAgPSBAR05VTElCX01CU05DQVNFQ01QQAorR05VTElCX01CU1BCUksgPSBAR05VTElCX01CU1BCUktACitHTlVMSUJfTUJTUENBU0VDTVAgPSBAR05VTElCX01CU1BDQVNFQ01QQAorR05VTElCX01CU1JDSFIgPSBAR05VTElCX01CU1JDSFJACitHTlVMSUJfTUJTU0VQID0gQEdOVUxJQl9NQlNTRVBACitHTlVMSUJfTUJTU1BOID0gQEdOVUxJQl9NQlNTUE5ACitHTlVMSUJfTUJTU1RSID0gQEdOVUxJQl9NQlNTVFJACitHTlVMSUJfTUJTVE9LX1IgPSBAR05VTElCX01CU1RPS19SQAorR05VTElCX01FTU1FTSA9IEBHTlVMSUJfTUVNTUVNQAorR05VTElCX01FTVBDUFkgPSBAR05VTElCX01FTVBDUFlACitHTlVMSUJfTUVNUkNIUiA9IEBHTlVMSUJfTUVNUkNIUkAKK0dOVUxJQl9NS0RURU1QID0gQEdOVUxJQl9NS0RURU1QQAorR05VTElCX01LU1RFTVAgPSBAR05VTElCX01LU1RFTVBACitHTlVMSUJfUkVBRExJTksgPSBAR05VTElCX1JFQURMSU5LQAorR05VTElCX1NMRUVQID0gQEdOVUxJQl9TTEVFUEAKK0dOVUxJQl9TVFBDUFkgPSBAR05VTElCX1NUUENQWUAKK0dOVUxJQl9TVFBOQ1BZID0gQEdOVUxJQl9TVFBOQ1BZQAorR05VTElCX1NUUkNBU0VTVFIgPSBAR05VTElCX1NUUkNBU0VTVFJACitHTlVMSUJfU1RSQ0hSTlVMID0gQEdOVUxJQl9TVFJDSFJOVUxACitHTlVMSUJfU1RSRFVQID0gQEdOVUxJQl9TVFJEVVBACitHTlVMSUJfU1RSTkRVUCA9IEBHTlVMSUJfU1RSTkRVUEAKK0dOVUxJQl9TVFJOTEVOID0gQEdOVUxJQl9TVFJOTEVOQAorR05VTElCX1NUUlBCUksgPSBAR05VTElCX1NUUlBCUktACitHTlVMSUJfU1RSU0VQID0gQEdOVUxJQl9TVFJTRVBACitHTlVMSUJfU1RSVE9JTUFYID0gQEdOVUxJQl9TVFJUT0lNQVhACitHTlVMSUJfU1RSVE9LX1IgPSBAR05VTElCX1NUUlRPS19SQAorR05VTElCX1NUUlRPVU1BWCA9IEBHTlVMSUJfU1RSVE9VTUFYQAorR1JFUCA9IEBHUkVQQAorSEFWRV9ERUNMX0dFVExPR0lOX1IgPSBASEFWRV9ERUNMX0dFVExPR0lOX1JACitIQVZFX0RFQ0xfSU1BWEFCUyA9IEBIQVZFX0RFQ0xfSU1BWEFCU0AKK0hBVkVfREVDTF9JTUFYRElWID0gQEhBVkVfREVDTF9JTUFYRElWQAorSEFWRV9ERUNMX01FTU1FTSA9IEBIQVZFX0RFQ0xfTUVNTUVNQAorSEFWRV9ERUNMX01FTVJDSFIgPSBASEFWRV9ERUNMX01FTVJDSFJACitIQVZFX0RFQ0xfU1RSRFVQID0gQEhBVkVfREVDTF9TVFJEVVBACitIQVZFX0RFQ0xfU1RSTkNBU0VDTVAgPSBASEFWRV9ERUNMX1NUUk5DQVNFQ01QQAorSEFWRV9ERUNMX1NUUk5EVVAgPSBASEFWRV9ERUNMX1NUUk5EVVBACitIQVZFX0RFQ0xfU1RSTkxFTiA9IEBIQVZFX0RFQ0xfU1RSTkxFTkAKK0hBVkVfREVDTF9TVFJUT0lNQVggPSBASEFWRV9ERUNMX1NUUlRPSU1BWEAKK0hBVkVfREVDTF9TVFJUT0tfUiA9IEBIQVZFX0RFQ0xfU1RSVE9LX1JACitIQVZFX0RFQ0xfU1RSVE9VTUFYID0gQEhBVkVfREVDTF9TVFJUT1VNQVhACitIQVZFX0RVUDIgPSBASEFWRV9EVVAyQAorSEFWRV9GVFJVTkNBVEUgPSBASEFWRV9GVFJVTkNBVEVACitIQVZFX0dFVFNVQk9QVCA9IEBIQVZFX0dFVFNVQk9QVEAKK0hBVkVfSU5UVFlQRVNfSCA9IEBIQVZFX0lOVFRZUEVTX0hACitIQVZFX0lTV0NOVFJMID0gQEhBVkVfSVNXQ05UUkxACitIQVZFX0xPTkdfTE9OR19JTlQgPSBASEFWRV9MT05HX0xPTkdfSU5UQAorSEFWRV9NRU1QQ1BZID0gQEhBVkVfTUVNUENQWUAKK0hBVkVfTUtEVEVNUCA9IEBIQVZFX01LRFRFTVBACitIQVZFX1JFQURMSU5LID0gQEhBVkVfUkVBRExJTktACitIQVZFX1NJR05FRF9TSUdfQVRPTUlDX1QgPSBASEFWRV9TSUdORURfU0lHX0FUT01JQ19UQAorSEFWRV9TSUdORURfV0NIQVJfVCA9IEBIQVZFX1NJR05FRF9XQ0hBUl9UQAorSEFWRV9TSUdORURfV0lOVF9UID0gQEhBVkVfU0lHTkVEX1dJTlRfVEAKK0hBVkVfU0xFRVAgPSBASEFWRV9TTEVFUEAKK0hBVkVfU1RESU5UX0ggPSBASEFWRV9TVERJTlRfSEAKK0hBVkVfU1RQQ1BZID0gQEhBVkVfU1RQQ1BZQAorSEFWRV9TVFBOQ1BZID0gQEhBVkVfU1RQTkNQWUAKK0hBVkVfU1RSQ0FTRUNNUCA9IEBIQVZFX1NUUkNBU0VDTVBACitIQVZFX1NUUkNBU0VTVFIgPSBASEFWRV9TVFJDQVNFU1RSQAorSEFWRV9TVFJDSFJOVUwgPSBASEFWRV9TVFJDSFJOVUxACitIQVZFX1NUUk5EVVAgPSBASEFWRV9TVFJORFVQQAorSEFWRV9TVFJQQlJLID0gQEhBVkVfU1RSUEJSS0AKK0hBVkVfU1RSU0VQID0gQEhBVkVfU1RSU0VQQAorSEFWRV9TWVNfQklUWVBFU19IID0gQEhBVkVfU1lTX0JJVFlQRVNfSEAKK0hBVkVfU1lTX0lOVFRZUEVTX0ggPSBASEFWRV9TWVNfSU5UVFlQRVNfSEAKK0hBVkVfU1lTX1RZUEVTX0ggPSBASEFWRV9TWVNfVFlQRVNfSEAKK0hBVkVfVU5JU1REX0ggPSBASEFWRV9VTklTVERfSEAKK0hBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVCA9IEBIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlRACitIQVZFX1dDVFlQRV9IID0gQEhBVkVfV0NUWVBFX0hACitIQVZFX1dJTlRfVCA9IEBIQVZFX1dJTlRfVEAKK0hBVkVfX0JPT0wgPSBASEFWRV9fQk9PTEAKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSU5UTElOQ1MgPSBASU5UTElOQ1NACitJTlRMTElCUyA9IEBJTlRMTElCU0AKK0lOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKK0lOVFRZUEVTX0ggPSBASU5UVFlQRVNfSEAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQklDT05WID0gQExJQklDT05WQAorTElCSU5UTCA9IEBMSUJJTlRMQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTE5fUyA9IEBMTl9TQAorTFRBTExPQ0EgPSBATFRBTExPQ0FACitMVExJQklDT05WID0gQExUTElCSUNPTlZACitMVExJQklOVEwgPSBATFRMSUJJTlRMQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK0xUX0FHRSA9IEBMVF9BR0VACitMVF9DVVJSRU5UID0gQExUX0NVUlJFTlRACitMVF9SRUxFQVNFID0gQExUX1JFTEVBU0VACitMVF9SRVZJU0lPTiA9IEBMVF9SRVZJU0lPTkAKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTVNHRk1UID0gQE1TR0ZNVEAKK01TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKK01TR01FUkdFID0gQE1TR01FUkdFQAorT0JKRVhUID0gQE9CSkVYVEAKK09TID0gQE9TQAorT1NfTElCUyA9IEBPU19MSUJTQAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBUlRFRExERkxBR1MgPSBAUEFSVEVETERGTEFHU0AKK1BBUlRFRF9MSUJTID0gQFBBUlRFRF9MSUJTQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQT1NVQiA9IEBQT1NVQkAKK1BPV19MSUIgPSBAUE9XX0xJQkAKK1BSSVBUUl9QUkVGSVggPSBAUFJJUFRSX1BSRUZJWEAKK1BSSV9NQUNST1NfQlJPS0VOID0gQFBSSV9NQUNST1NfQlJPS0VOQAorUFRSRElGRl9UX1NVRkZJWCA9IEBQVFJESUZGX1RfU1VGRklYQAorUkFOTElCID0gQFJBTkxJQkAKK1JFSVNFUl9MSUJTID0gQFJFSVNFUl9MSUJTQAorUkVQTEFDRV9DSE9XTiA9IEBSRVBMQUNFX0NIT1dOQAorUkVQTEFDRV9GQ0hESVIgPSBAUkVQTEFDRV9GQ0hESVJACitSRVBMQUNFX0dFVENXRCA9IEBSRVBMQUNFX0dFVENXREAKK1JFUExBQ0VfTUtTVEVNUCA9IEBSRVBMQUNFX01LU1RFTVBACitTRUQgPSBAU0VEQAorU0VMSU5VWF9MSUJTID0gQFNFTElOVVhfTElCU0AKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTSUdfQVRPTUlDX1RfU1VGRklYID0gQFNJR19BVE9NSUNfVF9TVUZGSVhACitTSVpFX1RfU1VGRklYID0gQFNJWkVfVF9TVUZGSVhACitTVERCT09MX0ggPSBAU1REQk9PTF9IQAorU1RESU5UX0ggPSBAU1RESU5UX0hACitTVFJJUCA9IEBTVFJJUEAKK1VTRV9OTFMgPSBAVVNFX05MU0AKK1VVSURfTElCUyA9IEBVVUlEX0xJQlNACitWRVJTSU9OID0gQFZFUlNJT05ACitXQ0hBUl9IID0gQFdDSEFSX0hACitXQ0hBUl9UX1NVRkZJWCA9IEBXQ0hBUl9UX1NVRkZJWEAKK1dDVFlQRV9IID0gQFdDVFlQRV9IQAorV0lOVF9UX1NVRkZJWCA9IEBXSU5UX1RfU1VGRklYQAorWEdFVFRFWFQgPSBAWEdFVFRFWFRACitYR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9DWFggPSBAYWNfY3RfQ1hYQAorYWNfY3RfRjc3ID0gQGFjX2N0X0Y3N0AKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitnbF9MSUJPQkpTID0gQGdsX0xJQk9CSlNACitnbF9MVExJQk9CSlMgPSBAZ2xfTFRMSUJPQkpTQAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK1NVQkRJUlMgPSBwYXJ0ZWQKK01BSU5UQUlORVJDTEVBTkZJTEVTID0gTWFrZWZpbGUuaW4KK2FsbDogYWxsLXJlY3Vyc2l2ZQorCisuU1VGRklYRVM6CiskKHNyY2RpcikvTWFrZWZpbGUuaW46ICAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCBcCisJCSYmIGV4aXQgMDsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgIGluY2x1ZGUvTWFrZWZpbGUnOyBcCisJY2QgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWdudSAgaW5jbHVkZS9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKKworIyBUaGlzIGRpcmVjdG9yeSdzIHN1YmRpcmVjdG9yaWVzIGFyZSBtb3N0bHkgaW5kZXBlbmRlbnQ7IHlvdSBjYW4gY2QKKyMgaW50byB0aGVtIGFuZCBydW4gYG1ha2UnIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCB0aGlzIE1ha2VmaWxlLgorIyBUbyBjaGFuZ2UgdGhlIHZhbHVlcyBvZiBgbWFrZScgdmFyaWFibGVzOiBpbnN0ZWFkIG9mIGVkaXRpbmcgTWFrZWZpbGVzLAorIyAoMSkgaWYgdGhlIHZhcmlhYmxlIGlzIHNldCBpbiBgY29uZmlnLnN0YXR1cycsIGVkaXQgYGNvbmZpZy5zdGF0dXMnCisjICAgICAod2hpY2ggd2lsbCBjYXVzZSB0aGUgTWFrZWZpbGVzIHRvIGJlIHJlZ2VuZXJhdGVkIHdoZW4geW91IHJ1biBgbWFrZScpOworIyAoMikgb3RoZXJ3aXNlLCBwYXNzIHRoZSBkZXNpcmVkIHZhbHVlcyBvbiB0aGUgYG1ha2UnIGNvbW1hbmQgbGluZS4KKyQoUkVDVVJTSVZFX1RBUkdFVFMpOgorCUBmYWlsY29tPSdleGl0IDEnOyBcCisJZm9yIGYgaW4geCAkJE1BS0VGTEFHUzsgZG8gXAorCSAgY2FzZSAkJGYgaW4gXAorCSAgICAqPSogfCAtLVsha10qKTs7IFwKKwkgICAgKmsqKSBmYWlsY29tPSdmYWlsPXllcyc7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWRvdF9zZWVuPW5vOyBcCisJdGFyZ2V0PWBlY2hvICRAIHwgc2VkIHMvLXJlY3Vyc2l2ZS8vYDsgXAorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgZWNobyAiTWFraW5nICQkdGFyZ2V0IGluICQkc3ViZGlyIjsgXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIFwKKwkgICAgZG90X3NlZW49eWVzOyBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQtYW0iOyBcCisJICBlbHNlIFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKKwkgIGZpOyBcCisJICAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRsb2NhbF90YXJnZXQpIFwKKwkgIHx8IGV2YWwgJCRmYWlsY29tOyBcCisJZG9uZTsgXAorCWlmIHRlc3QgIiQkZG90X3NlZW4iID0gIm5vIjsgdGhlbiBcCisJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAiJCR0YXJnZXQtYW0iIHx8IGV4aXQgMTsgXAorCWZpOyB0ZXN0IC16ICIkJGZhaWwiCisKKyQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpOgorCUBmYWlsY29tPSdleGl0IDEnOyBcCisJZm9yIGYgaW4geCAkJE1BS0VGTEFHUzsgZG8gXAorCSAgY2FzZSAkJGYgaW4gXAorCSAgICAqPSogfCAtLVsha10qKTs7IFwKKwkgICAgKmsqKSBmYWlsY29tPSdmYWlsPXllcyc7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWRvdF9zZWVuPW5vOyBcCisJY2FzZSAiJEAiIGluIFwKKwkgIGRpc3RjbGVhbi0qIHwgbWFpbnRhaW5lci1jbGVhbi0qKSBsaXN0PSckKERJU1RfU1VCRElSUyknIDs7IFwKKwkgICopIGxpc3Q9JyQoU1VCRElSUyknIDs7IFwKKwllc2FjOyBcCisJcmV2PScnOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIDo7IGVsc2UgXAorCSAgICByZXY9IiQkc3ViZGlyICQkcmV2IjsgXAorCSAgZmk7IFwKKwlkb25lOyBcCisJcmV2PSIkJHJldiAuIjsgXAorCXRhcmdldD1gZWNobyAkQCB8IHNlZCBzLy1yZWN1cnNpdmUvL2A7IFwKKwlmb3Igc3ViZGlyIGluICQkcmV2OyBkbyBcCisJICBlY2hvICJNYWtpbmcgJCR0YXJnZXQgaW4gJCRzdWJkaXIiOyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0LWFtIjsgXAorCSAgZWxzZSBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQiOyBcCisJICBmaTsgXAorCSAgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCisJICB8fCBldmFsICQkZmFpbGNvbTsgXAorCWRvbmUgJiYgdGVzdCAteiAiJCRmYWlsIgordGFncy1yZWN1cnNpdmU6CisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICB0ZXN0ICIkJHN1YmRpciIgPSAuIHx8IChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSB0YWdzKTsgXAorCWRvbmUKK2N0YWdzLXJlY3Vyc2l2ZToKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGN0YWdzKTsgXAorCWRvbmUKKworSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAorCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAorCW1raWQgLWZJRCAkJHVuaXF1ZQordGFnczogVEFHUworCitUQUdTOiB0YWdzLXJlY3Vyc2l2ZSAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJdGFncz07IFwKKwloZXJlPWBwd2RgOyBcCisJaWYgKCQoRVRBR1MpIC0tZXRhZ3MtaW5jbHVkZSAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCisJICBpbmNsdWRlX29wdGlvbj0tLWV0YWdzLWluY2x1ZGU7IFwKKwkgIGVtcHR5X2ZpeD0uOyBcCisJZWxzZSBcCisJICBpbmNsdWRlX29wdGlvbj0tLWluY2x1ZGU7IFwKKwkgIGVtcHR5X2ZpeD07IFwKKwlmaTsgXAorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgdGVzdCAhIC1mICQkc3ViZGlyL1RBR1MgfHwgXAorCSAgICAgIHRhZ3M9IiQkdGFncyAkJGluY2x1ZGVfb3B0aW9uPSQkaGVyZS8kJHN1YmRpci9UQUdTIjsgXAorCSAgZmk7IFwKKwlkb25lOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKwkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKKwkgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgJCR0YWdzICQkdW5pcXVlOyBcCisJZmkKK2N0YWdzOiBDVEFHUworQ1RBR1M6IGN0YWdzLXJlY3Vyc2l2ZSAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJdGFncz07IFwKKwloZXJlPWBwd2RgOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIiBcCisJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCisJICAgICAkJHRhZ3MgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmIGNkICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAkJGhlcmUKKworZGlzdGNsZWFuLXRhZ3M6CisJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1wUiAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLXBSICQkZC8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgJChkaXN0ZGlyKS8kJGZpbGUgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICQoZGlzdGRpcikvJCRmaWxlIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKKwlsaXN0PSckKERJU1RfU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAorCSAgICB8fCAkKE1LRElSX1ApICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgICBkaXN0ZGlyPWAkKGFtX19jZCkgJChkaXN0ZGlyKSAmJiBwd2RgOyBcCisJICAgIHRvcF9kaXN0ZGlyPWAkKGFtX19jZCkgJCh0b3BfZGlzdGRpcikgJiYgcHdkYDsgXAorCSAgICAoY2QgJCRzdWJkaXIgJiYgXAorCSAgICAgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIFwKKwkgICAgICAgIHRvcF9kaXN0ZGlyPSIkJHRvcF9kaXN0ZGlyIiBcCisJICAgICAgICBkaXN0ZGlyPSIkJGRpc3RkaXIvJCRzdWJkaXIiIFwKKwkJYW1fX3JlbW92ZV9kaXN0ZGlyPTogXAorCQlhbV9fc2tpcF9sZW5ndGhfY2hlY2s9OiBcCisJICAgICAgICBkaXN0ZGlyKSBcCisJICAgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1yZWN1cnNpdmUKK2FsbC1hbTogTWFrZWZpbGUKK2luc3RhbGxkaXJzOiBpbnN0YWxsZGlycy1yZWN1cnNpdmUKK2luc3RhbGxkaXJzLWFtOgoraW5zdGFsbDogaW5zdGFsbC1yZWN1cnNpdmUKK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLXJlY3Vyc2l2ZQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtcmVjdXJzaXZlCit1bmluc3RhbGw6IHVuaW5zdGFsbC1yZWN1cnNpdmUKKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stcmVjdXJzaXZlCitpbnN0YWxsLXN0cmlwOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorCS10ZXN0IC16ICIkKE1BSU5UQUlORVJDTEVBTkZJTEVTKSIgfHwgcm0gLWYgJChNQUlOVEFJTkVSQ0xFQU5GSUxFUykKK2NsZWFuOiBjbGVhbi1yZWN1cnNpdmUKKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBtb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1yZWN1cnNpdmUKKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktcmVjdXJzaXZlCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1yZWN1cnNpdmUKKworaW5mbzogaW5mby1yZWN1cnNpdmUKKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktcmVjdXJzaXZlCisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtcmVjdXJzaXZlCisKK2luc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZQorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLXJlY3Vyc2l2ZQorCitpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLXJlY3Vyc2l2ZQorCitpbnN0YWxsY2hlY2stYW06CisKK21haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1yZWN1cnNpdmUKKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1yZWN1cnNpdmUKKworcGRmLWFtOgorCitwczogcHMtcmVjdXJzaXZlCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06CisKKy5NQUtFOiAkKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTKSAkKFJFQ1VSU0lWRV9UQVJHRVRTKSBpbnN0YWxsLWFtIFwKKwlpbnN0YWxsLXN0cmlwCisKKy5QSE9OWTogJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUykgJChSRUNVUlNJVkVfVEFSR0VUUykgQ1RBR1MgR1RBR1MgXAorCWFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIFwKKwljdGFncyBjdGFncy1yZWN1cnNpdmUgZGlzdGNsZWFuIGRpc3RjbGVhbi1nZW5lcmljIFwKKwlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCisJaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCisJaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBcCisJaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIFwKKwlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gXAorCWluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBcCisJaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIGluc3RhbGxkaXJzLWFtIG1haW50YWluZXItY2xlYW4gXAorCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1nZW5lcmljIFwKKwltb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB0YWdzLXJlY3Vyc2l2ZSBcCisJdW5pbnN0YWxsIHVuaW5zdGFsbC1hbQorCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvaW5jbHVkZS9wYXJ0ZWQvTWFrZWZpbGUuYW0gYi9wYXJ0ZWQtMS44LjcvaW5jbHVkZS9wYXJ0ZWQvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQwZTFkNAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9pbmNsdWRlL3BhcnRlZC9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDI3IEBACitpZiBDT01QSUxFX0ZPUl9TMzkwCitTMzkwX0hEUlMgPSBmZGFzZC5oIHZ0b2MuaAorZWxzZQorUzM5MF9IRFJTID0KK2VuZGlmCisKK3BhcnRlZGluY2x1ZGVkaXIgICAgICA9CSQoaW5jbHVkZWRpcikvcGFydGVkCisKK3BhcnRlZGluY2x1ZGVfSEVBREVSUyA9IGdudS5oCQlcCisJCQlsaW51eC5oCQlcCisJCQljb25zdHJhaW50LmgJXAorCQkJZGVidWcuaAkJXAorCQkJZGV2aWNlLmgJXAorCQkJZGlzay5oCQlcCisJCQlleGNlcHRpb24uaAlcCisJCQlmaWxlc3lzLmgJXAorCQkJZ2VvbS5oCQlcCisJCQluYXRtYXRoLmgJXAorCQkJdGltZXIuaAkJXAorCQkJdW5pdC5oCQlcCisJCQlwYXJ0ZWQuaCAgICAgICAgXAorCQkJJChTMzkwX0hEUlMpCisKK25vaW5zdF9IRUFERVJTCSAgICAgID0gY3JjMzIuaAkJXAorCQkJZW5kaWFuLmgKKworTUFJTlRBSU5FUkNMRUFORklMRVMgPSBNYWtlZmlsZS5pbgpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2luY2x1ZGUvcGFydGVkL01ha2VmaWxlLmluIGIvcGFydGVkLTEuOC43L2luY2x1ZGUvcGFydGVkL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYjZlMDUKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvaW5jbHVkZS9wYXJ0ZWQvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw2MTIgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTAgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorCitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorc3ViZGlyID0gaW5jbHVkZS9wYXJ0ZWQKK0RJU1RfQ09NTU9OID0gJChhbV9fcGFydGVkaW5jbHVkZV9IRUFERVJTX0RJU1QpICQobm9pbnN0X0hFQURFUlMpIFwKKwkkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9hYnNvbHV0ZS1oZWFkZXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvYWxsb2NhLm00ICQodG9wX3NyY2RpcikvbTQvYXNzZXJ0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2F0ZXhpdC5tNCAkKHRvcF9zcmNkaXIpL200L2NhbGxvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jbG9zZS1zdHJlYW0ubTQgJCh0b3Bfc3JjZGlyKS9tNC9jbG9zZW91dC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jb2Rlc2V0Lm00ICQodG9wX3NyY2RpcikvbTQvY29uZmlnLWgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZGlybmFtZS5tNCAkKHRvcF9zcmNkaXIpL200L2Rvcy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9kb3VibGUtc2xhc2gtcm9vdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9lcnJvci5tNCAkKHRvcF9zcmNkaXIpL200L2V4aXRmYWlsLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2V4dGVuc2lvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9mcGVuZGluZy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9mcmVlLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0b3B0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgJCh0b3Bfc3JjZGlyKS9tNC9nbGliYzIxLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2dudWxpYi1jb21tb24ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZ251bGliLWNvbXAubTQgJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pbmxpbmUubTQgJCh0b3Bfc3JjZGlyKS9tNC9pbnR0eXBlcy1wcmkubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaW50dHlwZXMubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItaWdub3JlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbG9jYWxjaGFyc2V0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xvbmctb3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2xvbmdsb25nLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21icnRvd2MubTQgJCh0b3Bfc3JjZGlyKS9tNC9tYnN0YXRlX3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWVtY2hyLm00ICQodG9wX3NyY2RpcikvbTQvbWVtY21wLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21lbWNweS5tNCAkKHRvcF9zcmNkaXIpL200L21lbW1vdmUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWVtc2V0Lm00ICQodG9wX3NyY2RpcikvbTQvbmxzLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3BvLm00ICQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcXVvdGVhcmcubTQgJCh0b3Bfc3JjZGlyKS9tNC9yZWdleC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9yZW5hbWUubTQgJCh0b3Bfc3JjZGlyKS9tNC9ycG1hdGNoLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3NhZmUtcmVhZC5tNCAkKHRvcF9zcmNkaXIpL200L3NhZmUtd3JpdGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3NpemVfdC5tNCAkKHRvcF9zcmNkaXIpL200L3N0ZGFyZy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdGRib29sLm00ICQodG9wX3NyY2RpcikvbTQvc3RkaW50Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0ZGxpYl9oLm00ICQodG9wX3NyY2RpcikvbTQvc3RyY3Nwbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdHJpbmdfaC5tNCAkKHRvcF9zcmNkaXIpL200L3N0cm5kdXAubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3Rybmxlbi5tNCAkKHRvcF9zcmNkaXIpL200L3N0cnRvZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdHJ0b2wubTQgJCh0b3Bfc3JjZGlyKS9tNC91bmlzdGRfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC91dGltYnVmLm00ICQodG9wX3NyY2RpcikvbTQvdXRpbWUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdXRpbWVzLW51bGwubTQgJCh0b3Bfc3JjZGlyKS9tNC93Y2hhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC93Y3R5cGUubTQgJCh0b3Bfc3JjZGlyKS9tNC93aW50X3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQveGFsbG9jLm00ICQodG9wX3NyY2RpcikvbTQveHN0cm5kdXAubTQgXAorCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCithbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorCSQoQUNMT0NBTF9NNCkKK21raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK1NPVVJDRVMgPQorRElTVF9TT1VSQ0VTID0KK2FtX19wYXJ0ZWRpbmNsdWRlX0hFQURFUlNfRElTVCA9IGdudS5oIGxpbnV4LmggY29uc3RyYWludC5oIGRlYnVnLmggXAorCWRldmljZS5oIGRpc2suaCBleGNlcHRpb24uaCBmaWxlc3lzLmggZ2VvbS5oIG5hdG1hdGguaCB0aW1lci5oIFwKKwl1bml0LmggcGFydGVkLmggZmRhc2QuaCB2dG9jLmgKK2FtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOworYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKKyAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAorICAgICopIGY9JCRwOzsgXAorICBlc2FjOworYW1fX3N0cmlwX2RpciA9IGBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKK2FtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChwYXJ0ZWRpbmNsdWRlZGlyKSIKK3BhcnRlZGluY2x1ZGVIRUFERVJTX0lOU1RBTEwgPSAkKElOU1RBTExfSEVBREVSKQorSEVBREVSUyA9ICQobm9pbnN0X0hFQURFUlMpICQocGFydGVkaW5jbHVkZV9IRUFERVJTKQorRVRBR1MgPSBldGFncworQ1RBR1MgPSBjdGFncworRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FCU09MVVRFX0lOVFRZUEVTX0ggPSBAQUJTT0xVVEVfSU5UVFlQRVNfSEAKK0FCU09MVVRFX1NURElOVF9IID0gQEFCU09MVVRFX1NURElOVF9IQAorQUJTT0xVVEVfU1RETElCX0ggPSBAQUJTT0xVVEVfU1RETElCX0hACitBQlNPTFVURV9TVFJJTkdfSCA9IEBBQlNPTFVURV9TVFJJTkdfSEAKK0FCU09MVVRFX1VOSVNURF9IID0gQEFCU09MVVRFX1VOSVNURF9IQAorQUJTT0xVVEVfV0NIQVJfSCA9IEBBQlNPTFVURV9XQ0hBUl9IQAorQUJTT0xVVEVfV0NUWVBFX0ggPSBAQUJTT0xVVEVfV0NUWVBFX0hACitBQ0xPQ0FMID0gQEFDTE9DQUxACitBTExPQ0EgPSBAQUxMT0NBQAorQUxMT0NBX0ggPSBAQUxMT0NBX0hACitBTVRBUiA9IEBBTVRBUkAKK0FSID0gQEFSQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitCSVRTSVpFT0ZfUFRSRElGRl9UID0gQEJJVFNJWkVPRl9QVFJESUZGX1RACitCSVRTSVpFT0ZfU0lHX0FUT01JQ19UID0gQEJJVFNJWkVPRl9TSUdfQVRPTUlDX1RACitCSVRTSVpFT0ZfU0laRV9UID0gQEJJVFNJWkVPRl9TSVpFX1RACitCSVRTSVpFT0ZfV0NIQVJfVCA9IEBCSVRTSVpFT0ZfV0NIQVJfVEAKK0JJVFNJWkVPRl9XSU5UX1QgPSBAQklUU0laRU9GX1dJTlRfVEAKK0JVSUxESU5GTyA9IEBCVUlMRElORk9ACitDQyA9IEBDQ0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ0hFQ0tfQ0ZMQUdTID0gQENIRUNLX0NGTEFHU0AKK0NIRUNLX0xJQlMgPSBAQ0hFQ0tfTElCU0AKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RMX0xJQlMgPSBARExfTElCU0AKK0RNX0xJQlMgPSBARE1fTElCU0AKK0VDSE8gPSBARUNIT0AKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRVhFRVhUID0gQEVYRUVYVEAKK0Y3NyA9IEBGNzdACitGRkxBR1MgPSBARkZMQUdTQAorR0VUT1BUX0ggPSBAR0VUT1BUX0hACitHTElCQzIxID0gQEdMSUJDMjFACitHTVNHRk1UID0gQEdNU0dGTVRACitHTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKK0dOVUxJQl9DSE9XTiA9IEBHTlVMSUJfQ0hPV05ACitHTlVMSUJfRFVQMiA9IEBHTlVMSUJfRFVQMkAKK0dOVUxJQl9GQ0hESVIgPSBAR05VTElCX0ZDSERJUkAKK0dOVUxJQl9GVFJVTkNBVEUgPSBAR05VTElCX0ZUUlVOQ0FURUAKK0dOVUxJQl9HRVRDV0QgPSBAR05VTElCX0dFVENXREAKK0dOVUxJQl9HRVRMT0dJTl9SID0gQEdOVUxJQl9HRVRMT0dJTl9SQAorR05VTElCX0dFVFNVQk9QVCA9IEBHTlVMSUJfR0VUU1VCT1BUQAorR05VTElCX0lNQVhBQlMgPSBAR05VTElCX0lNQVhBQlNACitHTlVMSUJfSU1BWERJViA9IEBHTlVMSUJfSU1BWERJVkAKK0dOVUxJQl9NQlNDQVNFQ01QID0gQEdOVUxJQl9NQlNDQVNFQ01QQAorR05VTElCX01CU0NBU0VTVFIgPSBAR05VTElCX01CU0NBU0VTVFJACitHTlVMSUJfTUJTQ0hSID0gQEdOVUxJQl9NQlNDSFJACitHTlVMSUJfTUJTQ1NQTiA9IEBHTlVMSUJfTUJTQ1NQTkAKK0dOVUxJQl9NQlNMRU4gPSBAR05VTElCX01CU0xFTkAKK0dOVUxJQl9NQlNOQ0FTRUNNUCA9IEBHTlVMSUJfTUJTTkNBU0VDTVBACitHTlVMSUJfTUJTUEJSSyA9IEBHTlVMSUJfTUJTUEJSS0AKK0dOVUxJQl9NQlNQQ0FTRUNNUCA9IEBHTlVMSUJfTUJTUENBU0VDTVBACitHTlVMSUJfTUJTUkNIUiA9IEBHTlVMSUJfTUJTUkNIUkAKK0dOVUxJQl9NQlNTRVAgPSBAR05VTElCX01CU1NFUEAKK0dOVUxJQl9NQlNTUE4gPSBAR05VTElCX01CU1NQTkAKK0dOVUxJQl9NQlNTVFIgPSBAR05VTElCX01CU1NUUkAKK0dOVUxJQl9NQlNUT0tfUiA9IEBHTlVMSUJfTUJTVE9LX1JACitHTlVMSUJfTUVNTUVNID0gQEdOVUxJQl9NRU1NRU1ACitHTlVMSUJfTUVNUENQWSA9IEBHTlVMSUJfTUVNUENQWUAKK0dOVUxJQl9NRU1SQ0hSID0gQEdOVUxJQl9NRU1SQ0hSQAorR05VTElCX01LRFRFTVAgPSBAR05VTElCX01LRFRFTVBACitHTlVMSUJfTUtTVEVNUCA9IEBHTlVMSUJfTUtTVEVNUEAKK0dOVUxJQl9SRUFETElOSyA9IEBHTlVMSUJfUkVBRExJTktACitHTlVMSUJfU0xFRVAgPSBAR05VTElCX1NMRUVQQAorR05VTElCX1NUUENQWSA9IEBHTlVMSUJfU1RQQ1BZQAorR05VTElCX1NUUE5DUFkgPSBAR05VTElCX1NUUE5DUFlACitHTlVMSUJfU1RSQ0FTRVNUUiA9IEBHTlVMSUJfU1RSQ0FTRVNUUkAKK0dOVUxJQl9TVFJDSFJOVUwgPSBAR05VTElCX1NUUkNIUk5VTEAKK0dOVUxJQl9TVFJEVVAgPSBAR05VTElCX1NUUkRVUEAKK0dOVUxJQl9TVFJORFVQID0gQEdOVUxJQl9TVFJORFVQQAorR05VTElCX1NUUk5MRU4gPSBAR05VTElCX1NUUk5MRU5ACitHTlVMSUJfU1RSUEJSSyA9IEBHTlVMSUJfU1RSUEJSS0AKK0dOVUxJQl9TVFJTRVAgPSBAR05VTElCX1NUUlNFUEAKK0dOVUxJQl9TVFJUT0lNQVggPSBAR05VTElCX1NUUlRPSU1BWEAKK0dOVUxJQl9TVFJUT0tfUiA9IEBHTlVMSUJfU1RSVE9LX1JACitHTlVMSUJfU1RSVE9VTUFYID0gQEdOVUxJQl9TVFJUT1VNQVhACitHUkVQID0gQEdSRVBACitIQVZFX0RFQ0xfR0VUTE9HSU5fUiA9IEBIQVZFX0RFQ0xfR0VUTE9HSU5fUkAKK0hBVkVfREVDTF9JTUFYQUJTID0gQEhBVkVfREVDTF9JTUFYQUJTQAorSEFWRV9ERUNMX0lNQVhESVYgPSBASEFWRV9ERUNMX0lNQVhESVZACitIQVZFX0RFQ0xfTUVNTUVNID0gQEhBVkVfREVDTF9NRU1NRU1ACitIQVZFX0RFQ0xfTUVNUkNIUiA9IEBIQVZFX0RFQ0xfTUVNUkNIUkAKK0hBVkVfREVDTF9TVFJEVVAgPSBASEFWRV9ERUNMX1NUUkRVUEAKK0hBVkVfREVDTF9TVFJOQ0FTRUNNUCA9IEBIQVZFX0RFQ0xfU1RSTkNBU0VDTVBACitIQVZFX0RFQ0xfU1RSTkRVUCA9IEBIQVZFX0RFQ0xfU1RSTkRVUEAKK0hBVkVfREVDTF9TVFJOTEVOID0gQEhBVkVfREVDTF9TVFJOTEVOQAorSEFWRV9ERUNMX1NUUlRPSU1BWCA9IEBIQVZFX0RFQ0xfU1RSVE9JTUFYQAorSEFWRV9ERUNMX1NUUlRPS19SID0gQEhBVkVfREVDTF9TVFJUT0tfUkAKK0hBVkVfREVDTF9TVFJUT1VNQVggPSBASEFWRV9ERUNMX1NUUlRPVU1BWEAKK0hBVkVfRFVQMiA9IEBIQVZFX0RVUDJACitIQVZFX0ZUUlVOQ0FURSA9IEBIQVZFX0ZUUlVOQ0FURUAKK0hBVkVfR0VUU1VCT1BUID0gQEhBVkVfR0VUU1VCT1BUQAorSEFWRV9JTlRUWVBFU19IID0gQEhBVkVfSU5UVFlQRVNfSEAKK0hBVkVfSVNXQ05UUkwgPSBASEFWRV9JU1dDTlRSTEAKK0hBVkVfTE9OR19MT05HX0lOVCA9IEBIQVZFX0xPTkdfTE9OR19JTlRACitIQVZFX01FTVBDUFkgPSBASEFWRV9NRU1QQ1BZQAorSEFWRV9NS0RURU1QID0gQEhBVkVfTUtEVEVNUEAKK0hBVkVfUkVBRExJTksgPSBASEFWRV9SRUFETElOS0AKK0hBVkVfU0lHTkVEX1NJR19BVE9NSUNfVCA9IEBIQVZFX1NJR05FRF9TSUdfQVRPTUlDX1RACitIQVZFX1NJR05FRF9XQ0hBUl9UID0gQEhBVkVfU0lHTkVEX1dDSEFSX1RACitIQVZFX1NJR05FRF9XSU5UX1QgPSBASEFWRV9TSUdORURfV0lOVF9UQAorSEFWRV9TTEVFUCA9IEBIQVZFX1NMRUVQQAorSEFWRV9TVERJTlRfSCA9IEBIQVZFX1NURElOVF9IQAorSEFWRV9TVFBDUFkgPSBASEFWRV9TVFBDUFlACitIQVZFX1NUUE5DUFkgPSBASEFWRV9TVFBOQ1BZQAorSEFWRV9TVFJDQVNFQ01QID0gQEhBVkVfU1RSQ0FTRUNNUEAKK0hBVkVfU1RSQ0FTRVNUUiA9IEBIQVZFX1NUUkNBU0VTVFJACitIQVZFX1NUUkNIUk5VTCA9IEBIQVZFX1NUUkNIUk5VTEAKK0hBVkVfU1RSTkRVUCA9IEBIQVZFX1NUUk5EVVBACitIQVZFX1NUUlBCUksgPSBASEFWRV9TVFJQQlJLQAorSEFWRV9TVFJTRVAgPSBASEFWRV9TVFJTRVBACitIQVZFX1NZU19CSVRZUEVTX0ggPSBASEFWRV9TWVNfQklUWVBFU19IQAorSEFWRV9TWVNfSU5UVFlQRVNfSCA9IEBIQVZFX1NZU19JTlRUWVBFU19IQAorSEFWRV9TWVNfVFlQRVNfSCA9IEBIQVZFX1NZU19UWVBFU19IQAorSEFWRV9VTklTVERfSCA9IEBIQVZFX1VOSVNURF9IQAorSEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UID0gQEhBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVEAKK0hBVkVfV0NUWVBFX0ggPSBASEFWRV9XQ1RZUEVfSEAKK0hBVkVfV0lOVF9UID0gQEhBVkVfV0lOVF9UQAorSEFWRV9fQk9PTCA9IEBIQVZFX19CT09MQAorSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitJTlRMSU5DUyA9IEBJTlRMSU5DU0AKK0lOVExMSUJTID0gQElOVExMSUJTQAorSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAorSU5UVFlQRVNfSCA9IEBJTlRUWVBFU19IQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCSUNPTlYgPSBATElCSUNPTlZACitMSUJJTlRMID0gQExJQklOVExACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQExJQlNACitMSUJUT09MID0gQExJQlRPT0xACitMTl9TID0gQExOX1NACitMVEFMTE9DQSA9IEBMVEFMTE9DQUAKK0xUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKK0xUTElCSU5UTCA9IEBMVExJQklOVExACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTFRfQUdFID0gQExUX0FHRUAKK0xUX0NVUlJFTlQgPSBATFRfQ1VSUkVOVEAKK0xUX1JFTEVBU0UgPSBATFRfUkVMRUFTRUAKK0xUX1JFVklTSU9OID0gQExUX1JFVklTSU9OQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitNS0RJUl9QID0gQE1LRElSX1BACitNU0dGTVQgPSBATVNHRk1UQAorTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAorTVNHTUVSR0UgPSBATVNHTUVSR0VACitPQkpFWFQgPSBAT0JKRVhUQAorT1MgPSBAT1NACitPU19MSUJTID0gQE9TX0xJQlNACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFSVEVETERGTEFHUyA9IEBQQVJURURMREZMQUdTQAorUEFSVEVEX0xJQlMgPSBAUEFSVEVEX0xJQlNACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKK1BPU1VCID0gQFBPU1VCQAorUE9XX0xJQiA9IEBQT1dfTElCQAorUFJJUFRSX1BSRUZJWCA9IEBQUklQVFJfUFJFRklYQAorUFJJX01BQ1JPU19CUk9LRU4gPSBAUFJJX01BQ1JPU19CUk9LRU5ACitQVFJESUZGX1RfU1VGRklYID0gQFBUUkRJRkZfVF9TVUZGSVhACitSQU5MSUIgPSBAUkFOTElCQAorUkVJU0VSX0xJQlMgPSBAUkVJU0VSX0xJQlNACitSRVBMQUNFX0NIT1dOID0gQFJFUExBQ0VfQ0hPV05ACitSRVBMQUNFX0ZDSERJUiA9IEBSRVBMQUNFX0ZDSERJUkAKK1JFUExBQ0VfR0VUQ1dEID0gQFJFUExBQ0VfR0VUQ1dEQAorUkVQTEFDRV9NS1NURU1QID0gQFJFUExBQ0VfTUtTVEVNUEAKK1NFRCA9IEBTRURACitTRUxJTlVYX0xJQlMgPSBAU0VMSU5VWF9MSUJTQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NJR19BVE9NSUNfVF9TVUZGSVggPSBAU0lHX0FUT01JQ19UX1NVRkZJWEAKK1NJWkVfVF9TVUZGSVggPSBAU0laRV9UX1NVRkZJWEAKK1NUREJPT0xfSCA9IEBTVERCT09MX0hACitTVERJTlRfSCA9IEBTVERJTlRfSEAKK1NUUklQID0gQFNUUklQQAorVVNFX05MUyA9IEBVU0VfTkxTQAorVVVJRF9MSUJTID0gQFVVSURfTElCU0AKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1dDSEFSX0ggPSBAV0NIQVJfSEAKK1dDSEFSX1RfU1VGRklYID0gQFdDSEFSX1RfU1VGRklYQAorV0NUWVBFX0ggPSBAV0NUWVBFX0hACitXSU5UX1RfU1VGRklYID0gQFdJTlRfVF9TVUZGSVhACitYR0VUVEVYVCA9IEBYR0VUVEVYVEAKK1hHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9GNzcgPSBAYWNfY3RfRjc3QAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitidWlsZGRpciA9IEBidWlsZGRpckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZG9jZGlyID0gQGRvY2RpckAKK2R2aWRpciA9IEBkdmlkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2dsX0xJQk9CSlMgPSBAZ2xfTElCT0JKU0AKK2dsX0xUTElCT0JKUyA9IEBnbF9MVExJQk9CSlNACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorQENPTVBJTEVfRk9SX1MzOTBfRkFMU0VAUzM5MF9IRFJTID0gCitAQ09NUElMRV9GT1JfUzM5MF9UUlVFQFMzOTBfSERSUyA9IGZkYXNkLmggdnRvYy5oCitwYXJ0ZWRpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9wYXJ0ZWQKK3BhcnRlZGluY2x1ZGVfSEVBREVSUyA9IGdudS5oCQlcCisJCQlsaW51eC5oCQlcCisJCQljb25zdHJhaW50LmgJXAorCQkJZGVidWcuaAkJXAorCQkJZGV2aWNlLmgJXAorCQkJZGlzay5oCQlcCisJCQlleGNlcHRpb24uaAlcCisJCQlmaWxlc3lzLmgJXAorCQkJZ2VvbS5oCQlcCisJCQluYXRtYXRoLmgJXAorCQkJdGltZXIuaAkJXAorCQkJdW5pdC5oCQlcCisJCQlwYXJ0ZWQuaCAgICAgICAgXAorCQkJJChTMzkwX0hEUlMpCisKK25vaW5zdF9IRUFERVJTID0gY3JjMzIuaAkJXAorCQkJZW5kaWFuLmgKKworTUFJTlRBSU5FUkNMRUFORklMRVMgPSBNYWtlZmlsZS5pbgorYWxsOiBhbGwtYW0KKworLlNVRkZJWEVTOgorJChzcmNkaXIpL01ha2VmaWxlLmluOiAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggXAorCQkmJiBleGl0IDA7IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251ICBpbmNsdWRlL3BhcnRlZC9NYWtlZmlsZSc7IFwKKwljZCAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZ251ICBpbmNsdWRlL3BhcnRlZC9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKK2luc3RhbGwtcGFydGVkaW5jbHVkZUhFQURFUlM6ICQocGFydGVkaW5jbHVkZV9IRUFERVJTKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQocGFydGVkaW5jbHVkZWRpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKHBhcnRlZGluY2x1ZGVkaXIpIgorCUBsaXN0PSckKHBhcnRlZGluY2x1ZGVfSEVBREVSUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICBmPSQoYW1fX3N0cmlwX2RpcikgXAorCSAgZWNobyAiICQocGFydGVkaW5jbHVkZUhFQURFUlNfSU5TVEFMTCkgJyQkZCQkcCcgJyQoREVTVERJUikkKHBhcnRlZGluY2x1ZGVkaXIpLyQkZiciOyBcCisJICAkKHBhcnRlZGluY2x1ZGVIRUFERVJTX0lOU1RBTEwpICIkJGQkJHAiICIkKERFU1RESVIpJChwYXJ0ZWRpbmNsdWRlZGlyKS8kJGYiOyBcCisJZG9uZQorCit1bmluc3RhbGwtcGFydGVkaW5jbHVkZUhFQURFUlM6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChwYXJ0ZWRpbmNsdWRlX0hFQURFUlMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBmPSQoYW1fX3N0cmlwX2RpcikgXAorCSAgZWNobyAiIHJtIC1mICckKERFU1RESVIpJChwYXJ0ZWRpbmNsdWRlZGlyKS8kJGYnIjsgXAorCSAgcm0gLWYgIiQoREVTVERJUikkKHBhcnRlZGluY2x1ZGVkaXIpLyQkZiI7IFwKKwlkb25lCisKK0lEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKKwkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKKwlta2lkIC1mSUQgJCR1bmlxdWUKK3RhZ3M6IFRBR1MKKworVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwl0YWdzPTsgXAorCWhlcmU9YHB3ZGA7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKKwkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorCSAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAkJHRhZ3MgJCR1bmlxdWU7IFwKKwlmaQorY3RhZ3M6IENUQUdTCitDVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwl0YWdzPTsgXAorCWhlcmU9YHB3ZGA7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKKwkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKKwl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiIFwKKwkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKKwkgICAgICQkdGFncyAkJHVuaXF1ZQorCitHVEFHUzoKKwloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorCSAgJiYgY2QgJCh0b3Bfc3JjZGlyKSBcCisJICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICQkaGVyZQorCitkaXN0Y2xlYW4tdGFnczoKKwktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLXBSICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtcFIgJCRkLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAkKGRpc3RkaXIpLyQkZmlsZSBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgJChkaXN0ZGlyKS8kJGZpbGUgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorY2hlY2stYW06IGFsbC1hbQorY2hlY2s6IGNoZWNrLWFtCithbGwtYW06IE1ha2VmaWxlICQoSEVBREVSUykKK2luc3RhbGxkaXJzOgorCWZvciBkaXIgaW4gIiQoREVTVERJUikkKHBhcnRlZGluY2x1ZGVkaXIpIjsgZG8gXAorCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAorCWRvbmUKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCisJICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCisJLXRlc3QgLXogIiQoTUFJTlRBSU5FUkNMRUFORklMRVMpIiB8fCBybSAtZiAkKE1BSU5UQUlORVJDTEVBTkZJTEVTKQorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLXBhcnRlZGluY2x1ZGVIRUFERVJTCisKK2luc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQorCitpbnN0YWxsLWV4ZWMtYW06CisKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCisKK2luc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQorCitpbnN0YWxsY2hlY2stYW06CisKK21haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtYW0KKworcGRmLWFtOgorCitwczogcHMtYW0KKworcHMtYW06CisKK3VuaW5zdGFsbC1hbTogdW5pbnN0YWxsLXBhcnRlZGluY2x1ZGVIRUFERVJTCisKKy5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKKworLlBIT05ZOiBDVEFHUyBHVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAorCWNsZWFuLWxpYnRvb2wgY3RhZ3MgZGlzdGNsZWFuIGRpc3RjbGVhbi1nZW5lcmljIFwKKwlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCisJaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCisJaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBcCisJaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIFwKKwlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1wYXJ0ZWRpbmNsdWRlSEVBREVSUyBcCisJaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKKwlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAorCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKKwltb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCisJdGFncyB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1wYXJ0ZWRpbmNsdWRlSEVBREVSUworCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvaW5jbHVkZS9wYXJ0ZWQvY29uc3RyYWludC5oIGIvcGFydGVkLTEuOC43L2luY2x1ZGUvcGFydGVkL2NvbnN0cmFpbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjljOGIzCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2luY2x1ZGUvcGFydGVkL2NvbnN0cmFpbnQuaApAQCAtMCwwICsxLDk3IEBACisvKgorICAgIGxpYnBhcnRlZCAtIGEgbGlicmFyeSBmb3IgbWFuaXB1bGF0aW5nIGRpc2sgcGFydGl0aW9ucworICAgIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKKyovCisKKyNpZm5kZWYgUEVEX0NPTlNUUkFJTlRfSF9JTkNMVURFRAorI2RlZmluZSBQRURfQ09OU1RSQUlOVF9IX0lOQ0xVREVECisKK3R5cGVkZWYgc3RydWN0IF9QZWRDb25zdHJhaW50CVBlZENvbnN0cmFpbnQ7CisKKyNpbmNsdWRlIDxwYXJ0ZWQvZGV2aWNlLmg+CisjaW5jbHVkZSA8cGFydGVkL25hdG1hdGguaD4KKworc3RydWN0IF9QZWRDb25zdHJhaW50IHsKKwlQZWRBbGlnbm1lbnQqCXN0YXJ0X2FsaWduOworCVBlZEFsaWdubWVudCoJZW5kX2FsaWduOworCVBlZEdlb21ldHJ5KglzdGFydF9yYW5nZTsKKwlQZWRHZW9tZXRyeSoJZW5kX3JhbmdlOworCVBlZFNlY3RvcgltaW5fc2l6ZTsKKwlQZWRTZWN0b3IJbWF4X3NpemU7Cit9OworCitleHRlcm4gaW50CitwZWRfY29uc3RyYWludF9pbml0ICgKKwlQZWRDb25zdHJhaW50KiBjb25zdHJhaW50LAorCWNvbnN0IFBlZEFsaWdubWVudCogc3RhcnRfYWxpZ24sCisJY29uc3QgUGVkQWxpZ25tZW50KiBlbmRfYWxpZ24sCisJY29uc3QgUGVkR2VvbWV0cnkqIHN0YXJ0X3JhbmdlLAorCWNvbnN0IFBlZEdlb21ldHJ5KiBlbmRfcmFuZ2UsCisJUGVkU2VjdG9yIG1pbl9zaXplLAorCVBlZFNlY3RvciBtYXhfc2l6ZSk7CisKK2V4dGVybiBQZWRDb25zdHJhaW50KgorcGVkX2NvbnN0cmFpbnRfbmV3ICgKKwljb25zdCBQZWRBbGlnbm1lbnQqIHN0YXJ0X2FsaWduLAorCWNvbnN0IFBlZEFsaWdubWVudCogZW5kX2FsaWduLAorCWNvbnN0IFBlZEdlb21ldHJ5KiBzdGFydF9yYW5nZSwKKwljb25zdCBQZWRHZW9tZXRyeSogZW5kX3JhbmdlLAorCVBlZFNlY3RvciBtaW5fc2l6ZSwKKwlQZWRTZWN0b3IgbWF4X3NpemUpOworCitleHRlcm4gUGVkQ29uc3RyYWludCoKK3BlZF9jb25zdHJhaW50X25ld19mcm9tX21pbl9tYXggKAorCWNvbnN0IFBlZEdlb21ldHJ5KiBtaW4sCisJY29uc3QgUGVkR2VvbWV0cnkqIG1heCk7CisKK2V4dGVybiBQZWRDb25zdHJhaW50KgorcGVkX2NvbnN0cmFpbnRfbmV3X2Zyb21fbWluIChjb25zdCBQZWRHZW9tZXRyeSogbWluKTsKKworZXh0ZXJuIFBlZENvbnN0cmFpbnQqCitwZWRfY29uc3RyYWludF9uZXdfZnJvbV9tYXggKGNvbnN0IFBlZEdlb21ldHJ5KiBtYXgpOworCitleHRlcm4gUGVkQ29uc3RyYWludCoKK3BlZF9jb25zdHJhaW50X2R1cGxpY2F0ZSAoY29uc3QgUGVkQ29uc3RyYWludCogY29uc3RyYWludCk7CisKK2V4dGVybiB2b2lkCitwZWRfY29uc3RyYWludF9kb25lIChQZWRDb25zdHJhaW50KiBjb25zdHJhaW50KTsKKworZXh0ZXJuIHZvaWQKK3BlZF9jb25zdHJhaW50X2Rlc3Ryb3kgKFBlZENvbnN0cmFpbnQqIGNvbnN0cmFpbnQpOworCitleHRlcm4gUGVkQ29uc3RyYWludCoKK3BlZF9jb25zdHJhaW50X2ludGVyc2VjdCAoY29uc3QgUGVkQ29uc3RyYWludCogYSwgY29uc3QgUGVkQ29uc3RyYWludCogYik7CisKK2V4dGVybiBQZWRHZW9tZXRyeSoKK3BlZF9jb25zdHJhaW50X3NvbHZlX21heCAoY29uc3QgUGVkQ29uc3RyYWludCogY29uc3RyYWludCk7CisKK2V4dGVybiBQZWRHZW9tZXRyeSoKK3BlZF9jb25zdHJhaW50X3NvbHZlX25lYXJlc3QgKAorCWNvbnN0IFBlZENvbnN0cmFpbnQqIGNvbnN0cmFpbnQsIGNvbnN0IFBlZEdlb21ldHJ5KiBnZW9tKTsKKworZXh0ZXJuIGludAorcGVkX2NvbnN0cmFpbnRfaXNfc29sdXRpb24gKGNvbnN0IFBlZENvbnN0cmFpbnQqIGNvbnN0cmFpbnQsCisJCQkgICAgY29uc3QgUGVkR2VvbWV0cnkqIGdlb20pOworCitleHRlcm4gUGVkQ29uc3RyYWludCoKK3BlZF9jb25zdHJhaW50X2FueSAoY29uc3QgUGVkRGV2aWNlKiBkZXYpOworCitleHRlcm4gUGVkQ29uc3RyYWludCoKK3BlZF9jb25zdHJhaW50X2V4YWN0IChjb25zdCBQZWRHZW9tZXRyeSogZ2VvbSk7CisKKyNlbmRpZiAvKiBQRURfQ09OU1RSQUlOVF9IX0lOQ0xVREVEICovCisKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9pbmNsdWRlL3BhcnRlZC9jcmMzMi5oIGIvcGFydGVkLTEuOC43L2luY2x1ZGUvcGFydGVkL2NyYzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjcxZDc3MwotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9pbmNsdWRlL3BhcnRlZC9jcmMzMi5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgICAgbGlicGFydGVkIC0gYSBsaWJyYXJ5IGZvciBtYW5pcHVsYXRpbmcgZGlzayBwYXJ0aXRpb25zCisgICAgQ29weXJpZ2h0IChDKSAxOTk4LTIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgICBjcmMzMi5oCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCisqLworCisjaWZuZGVmIF9DUkMzMl9ICisjZGVmaW5lIF9DUkMzMl9ICisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworLyoKKyAqIFRoaXMgY29tcHV0ZXMgYSAzMiBiaXQgQ1JDIG9mIHRoZSBkYXRhIGluIHRoZSBidWZmZXIsIGFuZCByZXR1cm5zIHRoZSBDUkMuCisgKiBUaGUgcG9seW5vbWlhbCB1c2VkIGlzIDB4ZWRiODgzMjAuCisgKi8KKworZXh0ZXJuIHVpbnQzMl90IF9fZWZpX2NyYzMyIChjb25zdCB2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgbGVuLAorCQkJICAgICB1aW50MzJfdCBzZWVkKTsKKworI2VuZGlmIC8qIF9DUkMzMl9IICovCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvaW5jbHVkZS9wYXJ0ZWQvZGVidWcuaCBiL3BhcnRlZC0xLjguNy9pbmNsdWRlL3BhcnRlZC9kZWJ1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmYTcwODIKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvaW5jbHVkZS9wYXJ0ZWQvZGVidWcuaApAQCAtMCwwICsxLDkyIEBACisvKgorICAgIGxpYnBhcnRlZCAtIGEgbGlicmFyeSBmb3IgbWFuaXB1bGF0aW5nIGRpc2sgcGFydGl0aW9ucworICAgIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKKyovCisKKyNpZm5kZWYgUEVEX0RFQlVHX0hfSU5DTFVERUQKKyNkZWZpbmUgUEVEX0RFQlVHX0hfSU5DTFVERUQKKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaW5jbHVkZSA8c3RkYXJnLmg+CisKKyNpZmRlZiBERUJVRworCit0eXBlZGVmIHZvaWQgKFBlZERlYnVnSGFuZGxlcikgKCBjb25zdCBpbnQgbGV2ZWwsIGNvbnN0IGNoYXIqIGZpbGUsIGludCBsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZnVuY3Rpb24sIGNvbnN0IGNoYXIqIG1zZyApOworCitleHRlcm4gdm9pZCBwZWRfZGVidWdfc2V0X2hhbmRsZXIgKFBlZERlYnVnSGFuZGxlciogaGFuZGxlcik7CitleHRlcm4gdm9pZCBwZWRfZGVidWcgKCBjb25zdCBpbnQgbGV2ZWwsIGNvbnN0IGNoYXIqIGZpbGUsIGludCBsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZnVuY3Rpb24sIGNvbnN0IGNoYXIqIG1zZywgLi4uICk7CisKK2V4dGVybiBpbnQgcGVkX2Fzc2VydCAoIGludCBjb25kLCBjb25zdCBjaGFyKiBjb25kX3RleHQsCisJICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyKiBmdW5jdGlvbiApOworCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoX19KU0ZUUkFDRV9fKQorCisjZGVmaW5lIFBFRF9ERUJVRyhsZXZlbCwgLi4uKSBcCisgICAgICAgIHBlZF9kZWJ1ZyAoIGxldmVsLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fUFJFVFRZX0ZVTkNUSU9OX18sIFwKKyAgICAgICAgICAgICAgICAgICAgX19WQV9BUkdTX18gKTsKKworI2RlZmluZSBQRURfQVNTRVJUKGNvbmQsIGFjdGlvbikJCQkJXAorCWRvIHsJCQkJCQkJXAorCWlmICghcGVkX2Fzc2VydCAoIGNvbmQsCQkJICAgICAgICAgICAgICAgIFwKKwkJCSAgI2NvbmQsCQkJCVwKKwkJCSAgX19GSUxFX18sCQkJCVwKKwkJCSAgX19MSU5FX18sCQkJCVwKKwkJCSAgX19QUkVUVFlfRlVOQ1RJT05fXyApKQkJXAorCXsJCQkJCQkJXAorCQlhY3Rpb247CQkJCQkJXAorCX0JCQkJCQkJXAorCX0gd2hpbGUgKDApCisKKyNlbHNlIC8qICFfX0dOVUNfXyAqLworCisvKiBmdW5jdGlvbiBiZWNhdXNlIHZhcmlhZGljIG1hY3JvcyBhcmUgQzk5ICovCitzdGF0aWMgdm9pZCBQRURfREVCVUcgKGludCBsZXZlbCwgLi4uKQoreworICAgICAgICB2YV9saXN0ICAgICAgICAgdmFfYXJnczsKKyAgICAgICAgCisgICAgICAgIHZhX3N0YXJ0ICh2YV9hcmdzLCBsZXZlbCk7CisgICAgICAgIHBlZF9kZWJ1ZyAoIGxldmVsLCAidW5rbm93biBmaWxlIiwgMCwgInVua25vd24gZnVuY3Rpb24iLCB2YV9hcmdzICk7CisgICAgICAgIHZhX2VuZCAodmFfYXJncyk7Cit9CisgICAgICAgIAorI2RlZmluZSBQRURfQVNTRVJUKGNvbmQsIGFjdGlvbikJCQkJXAorCWRvIHsJCQkJCQkJXAorCWlmICghcGVkX2Fzc2VydCAoIGNvbmQsICAgICAgICAgICAgICAgICAgICAgCQlcCisJCQkgICNjb25kLAkJCQlcCisJCQkgICJ1bmtub3duIiwJCQkJXAorCQkJICAwLAkJCQkJXAorCQkJICAidW5rbm93biIgKSkgCQkgICAgICAgIAlcCisJewkJCSAJCQkJXAorCQlhY3Rpb247CQkJCQkJXAorCX0JCQkJCQkJXAorCX0gd2hpbGUgKDApCisKKyNlbmRpZiAvKiBfX0dOVUNfXyAqLworCisjZWxzZSAvKiAhREVCVUcgKi8KKworI2RlZmluZSBQRURfQVNTRVJUKGNvbmQsIGFjdGlvbikJd2hpbGUgKDApIHt9CisjZGVmaW5lIFBFRF9ERUJVRyhsZXZlbCwgLi4uKSAgICAgICAgICAgd2hpbGUgKDApIHt9CisKKworI2VuZGlmIC8qIERFQlVHICovCisKKyNlbmRpZiAvKiBQRURfREVCVUdfSF9JTkNMVURFRCAqLworCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvaW5jbHVkZS9wYXJ0ZWQvZGV2aWNlLmggYi9wYXJ0ZWQtMS44LjcvaW5jbHVkZS9wYXJ0ZWQvZGV2aWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE5NmI1OQotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9pbmNsdWRlL3BhcnRlZC9kZXZpY2UuaApAQCAtMCwwICsxLDE1MSBAQAorLyoKKyAgICBsaWJwYXJ0ZWQgLSBhIGxpYnJhcnkgZm9yIG1hbmlwdWxhdGluZyBkaXNrIHBhcnRpdGlvbnMKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDAxLCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQorKi8KKworLyoqCisgKiBcYWRkdG9ncm91cCBQZWREZXZpY2UKKyAqIEB7CisgKi8KKworLyoqIFxmaWxlIGRldmljZS5oICovCisKKyNpZm5kZWYgUEVEX0RFVklDRV9IX0lOQ0xVREVECisjZGVmaW5lIFBFRF9ERVZJQ0VfSF9JTkNMVURFRAorCisjaW5jbHVkZSA8cGFydGVkL3RpbWVyLmg+CisKKy8qKiBXZSBjYW4gYWRkcmVzcyAyXjYzIHNlY3RvcnMgKi8KK3R5cGVkZWYgbG9uZyBsb25nIFBlZFNlY3RvcjsKKworLyoqIFxkZXByZWNhdGVkIFJlbW92YWwgZnJvbSBBUEkgcGxhbm5lZCAqLwordHlwZWRlZiBlbnVtIHsKKyAgICAgICAgUEVEX0RFVklDRV9VTktOT1dOICAgICAgPSAwLAorICAgICAgICBQRURfREVWSUNFX1NDU0kgICAgICAgICA9IDEsCisgICAgICAgIFBFRF9ERVZJQ0VfSURFICAgICAgICAgID0gMiwKKyAgICAgICAgUEVEX0RFVklDRV9EQUM5NjAgICAgICAgPSAzLAorICAgICAgICBQRURfREVWSUNFX0NQUUFSUkFZICAgICA9IDQsCisgICAgICAgIFBFRF9ERVZJQ0VfRklMRSAgICAgICAgID0gNSwKKyAgICAgICAgUEVEX0RFVklDRV9BVEFSQUlEICAgICAgPSA2LAorICAgICAgICBQRURfREVWSUNFX0kyTyAgICAgICAgICA9IDcsCisgICAgICAgIFBFRF9ERVZJQ0VfVUJEICAgICAgICAgID0gOCwKKyAgICAgICAgUEVEX0RFVklDRV9EQVNEICAgICAgICAgPSA5LAorICAgICAgICBQRURfREVWSUNFX1ZJT0RBU0QgICAgICA9IDEwLAorICAgICAgICBQRURfREVWSUNFX1NYOCAgICAgICAgICA9IDExCisjaWZkZWYgRU5BQkxFX0RFVklDRV9NQVBQRVIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwKKyAgICAgICAgUEVEX0RFVklDRV9ETSAgICAgICAgICAgPSAxMgorI2VuZGlmCit9IFBlZERldmljZVR5cGU7CisKK3R5cGVkZWYgc3RydWN0IF9QZWREZXZpY2UgUGVkRGV2aWNlOwordHlwZWRlZiBzdHJ1Y3QgX1BlZERldmljZUFyY2hPcHMgUGVkRGV2aWNlQXJjaE9wczsKK3R5cGVkZWYgc3RydWN0IF9QZWRDSFNHZW9tZXRyeSBQZWRDSFNHZW9tZXRyeTsKKworLyoqCisgKiBBIGN5bGluZGVyLWhlYWQtc2VjdG9yICJvbGQtc3R5bGUiIGdlb21ldHJ5LgorICogCisgKiBBIGRldmljZSBhZGRyZXNzZWQgaW4gdGhpcyB3YXkgaGFzIEMqSCpTIHNlY3RvcnMuCisgKi8KK3N0cnVjdCBfUGVkQ0hTR2VvbWV0cnkgeworICAgICAgICBpbnQgICAgICAgICAgICAgY3lsaW5kZXJzOworICAgICAgICBpbnQgICAgICAgICAgICAgaGVhZHM7CisgICAgICAgIGludCAgICAgICAgICAgICBzZWN0b3JzOworfTsKKworLyoqIEEgYmxvY2sgZGV2aWNlIC0gZm9yIGV4YW1wbGUsIC9kZXYvaGRhLCBub3QgL2Rldi9oZGEzICovCitzdHJ1Y3QgX1BlZERldmljZSB7CisgICAgICAgIFBlZERldmljZSogICAgICBuZXh0OworCisgICAgICAgIGNoYXIqICAgICAgICAgICBtb2RlbDsgICAgICAgICAgLyoqPCBcYnJpZWYgZGVzY3JpcHRpb24gb2YgaGFyZHdhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYW51ZmFjdHVyZXIsIG1vZGVsKSAqLworICAgICAgICBjaGFyKiAgICAgICAgICAgcGF0aDsgICAgICAgICAgIC8qKjwgZGV2aWNlIC9kZXYgZW50cnkgKi8KKworICAgICAgICBQZWREZXZpY2VUeXBlICAgdHlwZTsgICAgICAgICAgIC8qKjwgU0NTSSwgSURFLCBldGMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcZGVwcmVjYXRlZCBcc2EgUGVkRGV2aWNlVHlwZSAqLworICAgICAgICBsb25nIGxvbmcgICAgICAgc2VjdG9yX3NpemU7ICAgICAgICAgICAgLyoqPCBsb2dpY2FsIHNlY3RvciBzaXplICovCisgICAgICAgIGxvbmcgbG9uZyAgICAgICBwaHlzX3NlY3Rvcl9zaXplOyAgICAgICAvKio8IHBoeXNpY2FsIHNlY3RvciBzaXplICovCisgICAgICAgIFBlZFNlY3RvciAgICAgICBsZW5ndGg7ICAgICAgICAgICAgICAgICAvKio8IGRldmljZSBsZW5ndGggKExCQSkgKi8KKworICAgICAgICBpbnQgICAgICAgICAgICAgb3Blbl9jb3VudDsgLyoqPCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoaXMgZGV2aWNlIGhhcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWVuIG9wZW5lZCB3aXRoIHBlZF9kZXZpY2Vfb3BlbigpLiAqLworICAgICAgICBpbnQgICAgICAgICAgICAgcmVhZF9vbmx5OworICAgICAgICBpbnQgICAgICAgICAgICAgZXh0ZXJuYWxfbW9kZTsKKyAgICAgICAgaW50ICAgICAgICAgICAgIGRpcnR5OworICAgICAgICBpbnQgICAgICAgICAgICAgYm9vdF9kaXJ0eTsKKworICAgICAgICBQZWRDSFNHZW9tZXRyeSAgaHdfZ2VvbTsKKyAgICAgICAgUGVkQ0hTR2VvbWV0cnkgIGJpb3NfZ2VvbTsKKyAgICAgICAgc2hvcnQgICAgICAgICAgIGhvc3QsIGRpZDsKKworICAgICAgICB2b2lkKiAgICAgICAgICAgYXJjaF9zcGVjaWZpYzsKK307CisKKy8qKgorICogTGlzdCBvZiBmdW5jdGlvbnMgaW1wbGVtZW50aW5nIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBvcGVyYXRpb25zLgorICovCitzdHJ1Y3QgX1BlZERldmljZUFyY2hPcHMgeworICAgICAgICBQZWREZXZpY2UqICgqX25ldykgKGNvbnN0IGNoYXIqIHBhdGgpOworICAgICAgICB2b2lkICgqZGVzdHJveSkgKFBlZERldmljZSogZGV2KTsKKyAgICAgICAgaW50ICgqaXNfYnVzeSkgKFBlZERldmljZSogZGV2KTsKKyAgICAgICAgaW50ICgqb3BlbikgKFBlZERldmljZSogZGV2KTsKKyAgICAgICAgaW50ICgqcmVmcmVzaF9vcGVuKSAoUGVkRGV2aWNlKiBkZXYpOworICAgICAgICBpbnQgKCpjbG9zZSkgKFBlZERldmljZSogZGV2KTsKKyAgICAgICAgaW50ICgqcmVmcmVzaF9jbG9zZSkgKFBlZERldmljZSogZGV2KTsKKyAgICAgICAgaW50ICgqcmVhZCkgKGNvbnN0IFBlZERldmljZSogZGV2LCB2b2lkKiBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICBQZWRTZWN0b3Igc3RhcnQsIFBlZFNlY3RvciBjb3VudCk7CisgICAgICAgIGludCAoKndyaXRlKSAoUGVkRGV2aWNlKiBkZXYsIGNvbnN0IHZvaWQqIGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICBQZWRTZWN0b3Igc3RhcnQsIFBlZFNlY3RvciBjb3VudCk7CisgICAgICAgIGludCAoKnN5bmMpIChQZWREZXZpY2UqIGRldik7CisgICAgICAgIGludCAoKnN5bmNfZmFzdCkgKFBlZERldmljZSogZGV2KTsKKyAgICAgICAgUGVkU2VjdG9yICgqY2hlY2spIChQZWREZXZpY2UqIGRldiwgdm9pZCogYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBlZFNlY3RvciBzdGFydCwgUGVkU2VjdG9yIGNvdW50KTsKKyAgICAgICAgdm9pZCAoKnByb2JlX2FsbCkgKCk7Cit9OworCitleHRlcm4gdm9pZCBwZWRfZGV2aWNlX3Byb2JlX2FsbCAoKTsKK2V4dGVybiB2b2lkIHBlZF9kZXZpY2VfZnJlZV9hbGwgKCk7CisKK2V4dGVybiBQZWREZXZpY2UqIHBlZF9kZXZpY2VfZ2V0IChjb25zdCBjaGFyKiBuYW1lKTsKK2V4dGVybiBQZWREZXZpY2UqIHBlZF9kZXZpY2VfZ2V0X25leHQgKGNvbnN0IFBlZERldmljZSogZGV2KTsKK2V4dGVybiBpbnQgcGVkX2RldmljZV9pc19idXN5IChQZWREZXZpY2UqIGRldik7CitleHRlcm4gaW50IHBlZF9kZXZpY2Vfb3BlbiAoUGVkRGV2aWNlKiBkZXYpOworZXh0ZXJuIGludCBwZWRfZGV2aWNlX2Nsb3NlIChQZWREZXZpY2UqIGRldik7CitleHRlcm4gdm9pZCBwZWRfZGV2aWNlX2Rlc3Ryb3kgKFBlZERldmljZSogZGV2KTsKK2V4dGVybiB2b2lkIHBlZF9kZXZpY2VfY2FjaGVfcmVtb3ZlIChQZWREZXZpY2UqIGRldik7CisKK2V4dGVybiBpbnQgcGVkX2RldmljZV9iZWdpbl9leHRlcm5hbF9hY2Nlc3MgKFBlZERldmljZSogZGV2KTsKK2V4dGVybiBpbnQgcGVkX2RldmljZV9lbmRfZXh0ZXJuYWxfYWNjZXNzIChQZWREZXZpY2UqIGRldik7CisKK2V4dGVybiBpbnQgcGVkX2RldmljZV9yZWFkIChjb25zdCBQZWREZXZpY2UqIGRldiwgdm9pZCogYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBlZFNlY3RvciBzdGFydCwgUGVkU2VjdG9yIGNvdW50KTsKK2V4dGVybiBpbnQgcGVkX2RldmljZV93cml0ZSAoUGVkRGV2aWNlKiBkZXYsIGNvbnN0IHZvaWQqIGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGVkU2VjdG9yIHN0YXJ0LCBQZWRTZWN0b3IgY291bnQpOworZXh0ZXJuIGludCBwZWRfZGV2aWNlX3N5bmMgKFBlZERldmljZSogZGV2KTsKK2V4dGVybiBpbnQgcGVkX2RldmljZV9zeW5jX2Zhc3QgKFBlZERldmljZSogZGV2KTsKK2V4dGVybiBQZWRTZWN0b3IgcGVkX2RldmljZV9jaGVjayAoUGVkRGV2aWNlKiBkZXYsIHZvaWQqIGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGVkU2VjdG9yIHN0YXJ0LCBQZWRTZWN0b3IgY291bnQpOworZXh0ZXJuIFBlZENvbnN0cmFpbnQqIHBlZF9kZXZpY2VfZ2V0X2NvbnN0cmFpbnQgKFBlZERldmljZSogZGV2KTsKKworLyogcHJpdmF0ZSBzdHVmZiA7LSkgKi8KKworZXh0ZXJuIHZvaWQgX3BlZF9kZXZpY2VfcHJvYmUgKGNvbnN0IGNoYXIqIHBhdGgpOworCisjZW5kaWYgLyogUEVEX0RFVklDRV9IX0lOQ0xVREVEICovCisKKy8qKiBAfSAqLworCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvaW5jbHVkZS9wYXJ0ZWQvZGlzay5oIGIvcGFydGVkLTEuOC43L2luY2x1ZGUvcGFydGVkL2Rpc2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGQ4MWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2luY2x1ZGUvcGFydGVkL2Rpc2suaApAQCAtMCwwICsxLDM2MSBAQAorLyoKKyAgICBsaWJwYXJ0ZWQgLSBhIGxpYnJhcnkgZm9yIG1hbmlwdWxhdGluZyBkaXNrIHBhcnRpdGlvbnMKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCisqLworCisvKioKKyAqIFxhZGR0b2dyb3VwIFBlZERpc2sKKyAqIEB7CisgKi8KKworLyoqIFxmaWxlIGRpc2suaCAqLworCisjaWZuZGVmIFBFRF9ESVNLX0hfSU5DTFVERUQKKyNkZWZpbmUgUEVEX0RJU0tfSF9JTkNMVURFRAorCisvKioKKyAqIFBhcnRpdGlvbiB0eXBlcworICovCitlbnVtIF9QZWRQYXJ0aXRpb25UeXBlIHsKKyAgICAgICAgUEVEX1BBUlRJVElPTl9OT1JNQUwgICAgICAgICAgICA9IDB4MDAsCisgICAgICAgIFBFRF9QQVJUSVRJT05fTE9HSUNBTCAgICAgICAgICAgPSAweDAxLAorICAgICAgICBQRURfUEFSVElUSU9OX0VYVEVOREVEICAgICAgICAgID0gMHgwMiwKKyAgICAgICAgUEVEX1BBUlRJVElPTl9GUkVFU1BBQ0UgICAgICAgICA9IDB4MDQsCisgICAgICAgIFBFRF9QQVJUSVRJT05fTUVUQURBVEEgICAgICAgICAgPSAweDA4LAorICAgICAgICBQRURfUEFSVElUSU9OX1BST1RFQ1RFRCAgICAgICAgID0gMHgxMAorfTsKKworLyoqCisgKiBQYXJ0aXRpb24gZmxhZ3MuCisgKi8KK2VudW0gX1BlZFBhcnRpdGlvbkZsYWcgeworICAgICAgICBQRURfUEFSVElUSU9OX0JPT1Q9MSwKKyAgICAgICAgUEVEX1BBUlRJVElPTl9ST09UPTIsCisgICAgICAgIFBFRF9QQVJUSVRJT05fU1dBUD0zLAorICAgICAgICBQRURfUEFSVElUSU9OX0hJRERFTj00LAorICAgICAgICBQRURfUEFSVElUSU9OX1JBSUQ9NSwKKyAgICAgICAgUEVEX1BBUlRJVElPTl9MVk09NiwKKyAgICAgICAgUEVEX1BBUlRJVElPTl9MQkE9NywKKyAgICAgICAgUEVEX1BBUlRJVElPTl9IUFNFUlZJQ0U9OCwKKyAgICAgICAgUEVEX1BBUlRJVElPTl9QQUxPPTksCisgICAgICAgIFBFRF9QQVJUSVRJT05fUFJFUD0xMCwKKyAgICAgICAgUEVEX1BBUlRJVElPTl9NU0ZUX1JFU0VSVkVEPTExCit9OworI2RlZmluZSBQRURfUEFSVElUSU9OX0ZJUlNUX0ZMQUcgICAgICAgIFBFRF9QQVJUSVRJT05fQk9PVAorI2RlZmluZSBQRURfUEFSVElUSU9OX0xBU1RfRkxBRyAgICAgICAgIFBFRF9QQVJUSVRJT05fTVNGVF9SRVNFUlZFRAorCitlbnVtIF9QZWREaXNrVHlwZUZlYXR1cmUgeworICAgICAgICBQRURfRElTS19UWVBFX0VYVEVOREVEPTEsICAgICAgIC8qKjwgc3VwcG9ydHMgZXh0ZW5kZWQgcGFydGl0aW9ucyAqLworICAgICAgICBQRURfRElTS19UWVBFX1BBUlRJVElPTl9OQU1FPTIgIC8qKjwgc3VwcG9ydHMgcGFydGl0aW9uIG5hbWVzICovCit9OworI2RlZmluZSBQRURfRElTS19UWVBFX0ZJUlNUX0ZFQVRVUkUgICAgUEVEX0RJU0tfVFlQRV9FWFRFTkRFRAorI2RlZmluZSBQRURfRElTS19UWVBFX0xBU1RfRkVBVFVSRSAgICAgUEVEX0RJU0tfVFlQRV9QQVJUSVRJT05fTkFNRQorCitzdHJ1Y3QgX1BlZERpc2s7CitzdHJ1Y3QgX1BlZFBhcnRpdGlvbjsKK3N0cnVjdCBfUGVkRGlza09wczsKK3N0cnVjdCBfUGVkRGlza1R5cGU7CitzdHJ1Y3QgX1BlZERpc2tBcmNoT3BzOworCit0eXBlZGVmIGVudW0gX1BlZFBhcnRpdGlvblR5cGUgICAgICAgICAgUGVkUGFydGl0aW9uVHlwZTsKK3R5cGVkZWYgZW51bSBfUGVkUGFydGl0aW9uRmxhZyAgICAgICAgICBQZWRQYXJ0aXRpb25GbGFnOwordHlwZWRlZiBlbnVtIF9QZWREaXNrVHlwZUZlYXR1cmUgICAgICAgIFBlZERpc2tUeXBlRmVhdHVyZTsKK3R5cGVkZWYgc3RydWN0IF9QZWREaXNrICAgICAgICAgICAgICAgICBQZWREaXNrOwordHlwZWRlZiBzdHJ1Y3QgX1BlZFBhcnRpdGlvbiAgICAgICAgICAgIFBlZFBhcnRpdGlvbjsKK3R5cGVkZWYgY29uc3Qgc3RydWN0IF9QZWREaXNrT3BzICAgICAgICBQZWREaXNrT3BzOwordHlwZWRlZiBzdHJ1Y3QgX1BlZERpc2tUeXBlICAgICAgICAgICAgIFBlZERpc2tUeXBlOwordHlwZWRlZiBjb25zdCBzdHJ1Y3QgX1BlZERpc2tBcmNoT3BzICAgIFBlZERpc2tBcmNoT3BzOworCisjaW5jbHVkZSA8cGFydGVkL2RldmljZS5oPgorI2luY2x1ZGUgPHBhcnRlZC9maWxlc3lzLmg+CisjaW5jbHVkZSA8cGFydGVkL25hdG1hdGguaD4KKyNpbmNsdWRlIDxwYXJ0ZWQvZ2VvbS5oPgorCisvKiogQH0gKi8KKworLyoqCisgKiBcYWRkdG9ncm91cCBQZWRQYXJ0aXRpb24KKyAqIAorICogQHsKKyAqLworCisvKiogXGZpbGUgZGlzay5oICovCisKKy8qKgorICogUGVkUGFydGl0aW9uIHN0cnVjdHVyZSByZXByZXNlbnRzIGEgcGFydGl0aW9uLgorICovCitzdHJ1Y3QgX1BlZFBhcnRpdGlvbiB7CisgICAgICAgIFBlZFBhcnRpdGlvbiogICAgICAgICAgIHByZXY7CisgICAgICAgIFBlZFBhcnRpdGlvbiogICAgICAgICAgIG5leHQ7CisKKyAgICAgICAgLyoqPCB0aGUgcGFydGl0aW9uIHRhYmxlIG9mIHRoZSBwYXJ0aXRpb24gKi8KKyAgICAgICAgUGVkRGlzayogICAgICAgICAgICAgICAgZGlzazsKKyAgICAgICAgUGVkR2VvbWV0cnkgICAgICAgICAgICAgZ2VvbTsJLyoqPCBnZW9tZXRyeSBvZiB0aGUgcGFydGl0aW9uICovCisKKyAgICAgICAgLyoqPCB0aGUgcGFydGl0aW9uIG51bWJlcjogIEluIExpbnV4LCB0aGlzIGlzIHRoZQorICAgICAgICAgICAgIHNhbWUgYXMgdGhlIG1pbm9yIG51bWJlci4gTm8gYXNzdW1wdGlvbgorICAgICAgICAgICAgIHNob3VsZCBiZSBtYWRlIGFib3V0ICJudW0iIGFuZCAidHlwZSIgCisgICAgICAgICAgICAgLSBkaWZmZXJlbnQgZGlzayBsYWJlbHMgaGF2ZSBkaWZmZXJlbnQgcnVsZXMuICovCisKKyAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgbnVtOworICAgICAgICBQZWRQYXJ0aXRpb25UeXBlICAgICAgICB0eXBlOwkvKio8IHRoZSB0eXBlIG9mIHBhcnRpdGlvbjogYSBiaXQgZmllbGQgb2YKKwkJCQkJICAJUEVEX1BBUlRJVElPTl9MT0dJQ0FMLCBQRURfUEFSVElUSU9OX0VYVEVOREVELAorCQkJCQkJUEVEX1BBUlRJVElPTl9NRVRBREFUQSAKKwkJCQkJCWFuZCBQRURfUEFSVElUSU9OX0ZSRUVTUEFDRS4gIAorCQkJCQkJQm90aCB0aGUgZmlyc3QgdHdvLCBhbmQgdGhlIGxhc3QgdHdvIGFyZSAKKwkJCQkJCW11dHVhbGx5IGV4Y2x1c2l2ZS4KKwkJCQkJCQlBbiBleHRlbmRlZCBwYXJ0aXRpb24gaXMgYSBwcmltYXJ5IAorCQkJCQkJcGFydGl0aW9uIHRoYXQgbWF5IGNvbnRhaW4gbG9naWNhbCBwYXJ0aXRpb25zLgorCQkJCQkJVGhlcmUgaXMgYXQgbW9zdCBvbmUgZXh0ZW5kZWQgcGFydGl0aW9uIG9uIAorCQkJCQkJYSBkaXNrLgorCQkJCQkJCUEgbG9naWNhbCBwYXJ0aXRpb24gaXMgbGlrZSBhIHByaW1hcnkgCisJCQkJCQlwYXJ0aXRpb24sIGV4Y2VwdCBpdCdzIGluc2lkZSBhbiBleHRlbmRlZCAKKwkJCQkJCXBhcnRpdGlvbi4gSW50ZXJuYWxseSwgcHNldWRvIHBhcnRpdGlvbnMgYXJlCisJCQkJCQlhbGxvY2F0ZWQgdG8gcmVwcmVzZW50IGZyZWUgc3BhY2UsIG9yIGRpc2sKKwkJCQkJCWxhYmVsIG1ldGEtZGF0YS4gIFRoZXNlIGhhdmUgdGhlCisJCQkJCQlQRURfUEFSVElUSU9OX0ZSRUVTUEFDRSBvcgorCQkJCQkJUEVEX1BBUlRJVElPTl9NRVRBREFUQSBiaXQgc2V0LiAqLworCisgICAgICAgIC8qKjwgVGhlIHR5cGUgb2YgZmlsZSBzeXN0ZW0gb24gdGhlIHBhcnRpdGlvbi4gTlVMTCBpZiB1bmtub3duLiAqLworICAgICAgICBjb25zdCBQZWRGaWxlU3lzdGVtVHlwZSogZnNfdHlwZTsKKworICAgICAgICAvKio8IE9ubHkgdXNlZCBmb3IgYW4gZXh0ZW5kZWQgcGFydGl0aW9uLiAgVGhlIGxpc3Qgb2YgbG9naWNhbAorICAgICAgICAgICAgIHBhcnRpdGlvbnMgKGFuZCBmcmVlIHNwYWNlIGFuZCBtZXRhZGF0YSB3aXRoaW4gdGhlIGV4dGVuZGVkCisgICAgICAgICAgICAgcGFydGl0aW9uKS4gKi8KKyAgICAgICAgUGVkUGFydGl0aW9uKiAgICAgICAgICAgcGFydF9saXN0OworCisgICAgICAgIHZvaWQqICAgICAgICAgICAgICAgICAgIGRpc2tfc3BlY2lmaWM7Cit9OworCisvKiogQH0gKi8KKworLyoqCisgKiBcYWRkdG9ncm91cCBQZWREaXNrCisgKiBAeworICovCisKKy8qKgorICogUmVwcmVzZW50cyBhIGRpc2sgbGFiZWwgKHBhcnRpdGlvbiB0YWJsZSkuCisgKi8KK3N0cnVjdCBfUGVkRGlzayB7CisgICAgICAgIFBlZERldmljZSogICAgICAgICAgZGV2OyAgICAgICAgIC8qKjwgdGhlIGRldmljZSB3aGVyZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aXRpb24gdGFibGUgbGllcyAqLworICAgICAgICBjb25zdCBQZWREaXNrVHlwZSogIHR5cGU7ICAgICAgICAvKio8IHR5cGUgb2YgZGlzayBsYWJlbCAqLworICAgICAgICBjb25zdCBpbnQqICAgICAgICAgIGJsb2NrX3NpemVzOyAvKio8IGJsb2NrIHNpemVzIHN1cHBvcnRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5IHRoaXMgbGFiZWwgKi8KKyAgICAgICAgUGVkUGFydGl0aW9uKiAgICAgICBwYXJ0X2xpc3Q7ICAgLyoqPCBsaXN0IG9mIHBhcnRpdGlvbnMuIEFjY2VzcyB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVkX2Rpc2tfbmV4dF9wYXJ0aXRpb24oKSAqLworCisgICAgICAgIHZvaWQqICAgICAgICAgICAgICAgZGlza19zcGVjaWZpYzsKKworLyogb2ZmaWNlIHVzZSBvbmx5IDstKSAqLworICAgICAgICBpbnQgICAgICAgICAgICAgICAgIG5lZWRzX2Nsb2JiZXI7ICAgICAgLyoqPCBjbG9iYmVyIGJlZm9yZSB3cml0ZT8gKi8KKyAgICAgICAgaW50ICAgICAgICAgICAgICAgICB1cGRhdGVfbW9kZTsgICAgICAgIC8qKjwgbW9kZSB3aXRob3V0IGZyZWUvbWV0YWRhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpdGlvbnMsIGZvciBlYXNpZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZSAqLworfTsKKworc3RydWN0IF9QZWREaXNrT3BzIHsKKyAgICAgICAgLyogZGlzayBsYWJlbCBvcGVyYXRpb25zICovCisgICAgICAgIGludCAoKnByb2JlKSAoY29uc3QgUGVkRGV2aWNlICpkZXYpOworICAgICAgICBpbnQgKCpjbG9iYmVyKSAoUGVkRGV2aWNlKiBkZXYpOworICAgICAgICBQZWREaXNrKiAoKmFsbG9jKSAoY29uc3QgUGVkRGV2aWNlKiBkZXYpOworICAgICAgICBQZWREaXNrKiAoKmR1cGxpY2F0ZSkgKGNvbnN0IFBlZERpc2sqIGRpc2spOworICAgICAgICB2b2lkICgqZnJlZSkgKFBlZERpc2sqIGRpc2spOworICAgICAgICBpbnQgKCpyZWFkKSAoUGVkRGlzayogZGlzayk7CisgICAgICAgIGludCAoKndyaXRlKSAoY29uc3QgUGVkRGlzayogZGlzayk7CisgICAgICAgIC8qKiBcdG9kbyBhZGQgbGFiZWwgZ3Vlc3Npbmcgb3AgaGVyZSAqLworICAgICAgICAKKyAgICAgICAgLyogcGFydGl0aW9uIG9wZXJhdGlvbnMgKi8KKyAgICAgICAgUGVkUGFydGl0aW9uKiAoKnBhcnRpdGlvbl9uZXcpICgKKyAgICAgICAgICAgICAgICBjb25zdCBQZWREaXNrKiBkaXNrLAorICAgICAgICAgICAgICAgIFBlZFBhcnRpdGlvblR5cGUgcGFydF90eXBlLAorICAgICAgICAgICAgICAgIGNvbnN0IFBlZEZpbGVTeXN0ZW1UeXBlKiBmc190eXBlLAorICAgICAgICAgICAgICAgIFBlZFNlY3RvciBzdGFydCwKKyAgICAgICAgICAgICAgICBQZWRTZWN0b3IgZW5kKTsKKyAgICAgICAgUGVkUGFydGl0aW9uKiAoKnBhcnRpdGlvbl9kdXBsaWNhdGUpIChjb25zdCBQZWRQYXJ0aXRpb24qIHBhcnQpOworICAgICAgICB2b2lkICgqcGFydGl0aW9uX2Rlc3Ryb3kpIChQZWRQYXJ0aXRpb24qIHBhcnQpOworICAgICAgICBpbnQgKCpwYXJ0aXRpb25fc2V0X3N5c3RlbSkgKFBlZFBhcnRpdGlvbiogcGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQZWRGaWxlU3lzdGVtVHlwZSogZnNfdHlwZSk7CisgICAgICAgIGludCAoKnBhcnRpdGlvbl9zZXRfZmxhZykgKAorICAgICAgICAgICAgICAgIFBlZFBhcnRpdGlvbiogcGFydCwKKyAgICAgICAgICAgICAgICBQZWRQYXJ0aXRpb25GbGFnIGZsYWcsCisgICAgICAgICAgICAgICAgaW50IHN0YXRlKTsKKyAgICAgICAgaW50ICgqcGFydGl0aW9uX2dldF9mbGFnKSAoCisgICAgICAgICAgICAgICAgY29uc3QgUGVkUGFydGl0aW9uKiBwYXJ0LAorICAgICAgICAgICAgICAgIFBlZFBhcnRpdGlvbkZsYWcgZmxhZyk7CisgICAgICAgIGludCAoKnBhcnRpdGlvbl9pc19mbGFnX2F2YWlsYWJsZSkgKAorICAgICAgICAgICAgICAgIGNvbnN0IFBlZFBhcnRpdGlvbiogcGFydCwKKyAgICAgICAgICAgICAgICBQZWRQYXJ0aXRpb25GbGFnIGZsYWcpOworICAgICAgICB2b2lkICgqcGFydGl0aW9uX3NldF9uYW1lKSAoUGVkUGFydGl0aW9uKiBwYXJ0LCBjb25zdCBjaGFyKiBuYW1lKTsKKyAgICAgICAgY29uc3QgY2hhciogKCpwYXJ0aXRpb25fZ2V0X25hbWUpIChjb25zdCBQZWRQYXJ0aXRpb24qIHBhcnQpOworICAgICAgICBpbnQgKCpwYXJ0aXRpb25fYWxpZ24pIChQZWRQYXJ0aXRpb24qIHBhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBlZENvbnN0cmFpbnQqIGNvbnN0cmFpbnQpOworICAgICAgICBpbnQgKCpwYXJ0aXRpb25fZW51bWVyYXRlKSAoUGVkUGFydGl0aW9uKiBwYXJ0KTsKKworICAgICAgICAvKiBvdGhlciAqLworICAgICAgICBpbnQgKCphbGxvY19tZXRhZGF0YSkgKFBlZERpc2sqIGRpc2spOworICAgICAgICBpbnQgKCpnZXRfbWF4X3ByaW1hcnlfcGFydGl0aW9uX2NvdW50KSAoY29uc3QgUGVkRGlzayogZGlzayk7Cit9OworCitzdHJ1Y3QgX1BlZERpc2tUeXBlIHsKKyAgICAgICAgUGVkRGlza1R5cGUqICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgY29uc3QgY2hhciogICAgICAgICAgICAgbmFtZTsgLyoqPCB0aGUgbmFtZSBvZiB0aGUgcGFydGl0aW9uIHRhYmxlIHR5cGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHRvZG8gbm90IHZlcnkgaW50dWl0aXZlIG5hbWUgKi8KKyAgICAgICAgUGVkRGlza09wcyogY29uc3QgICAgICAgb3BzOworCisgICAgICAgIFBlZERpc2tUeXBlRmVhdHVyZSAgICAgIGZlYXR1cmVzOyAgIC8qKjwgYml0bWFwIG9mIHN1cHBvcnRlZCBmZWF0dXJlcyAqLworfTsKKworLyoqCisgKiBBcmNoaXRlY3R1cmUtc3BlY2lmaWMgb3BlcmF0aW9ucy4gIGkuZS4gY29tbXVuaWNhdGlvbiB3aXRoIGtlcm5lbCAob3IKKyAqIHdoYXRldmVyKSBhYm91dCBjaGFuZ2VzLCBldGMuCisgKi8KK3N0cnVjdCBfUGVkRGlza0FyY2hPcHMgeworICAgICAgICBjaGFyKiAoKnBhcnRpdGlvbl9nZXRfcGF0aCkgKGNvbnN0IFBlZFBhcnRpdGlvbiogcGFydCk7CisgICAgICAgIGludCAoKnBhcnRpdGlvbl9pc19idXN5KSAoY29uc3QgUGVkUGFydGl0aW9uKiBwYXJ0KTsKKyAgICAgICAgaW50ICgqZGlza19jb21taXQpIChQZWREaXNrKiBkaXNrKTsKK307CisKK2V4dGVybiB2b2lkIHBlZF9kaXNrX3R5cGVfcmVnaXN0ZXIgKFBlZERpc2tUeXBlKiB0eXBlKTsKK2V4dGVybiB2b2lkIHBlZF9kaXNrX3R5cGVfdW5yZWdpc3RlciAoUGVkRGlza1R5cGUqIHR5cGUpOworCisvKioKKyAqIERlcHJlY2F0ZWQ6IHVzZSBwZWRfZGlza190eXBlX3JlZ2lzdGVyLgorICovCitfX2F0dHJpYnV0ZV9fICgoZGVwcmVjYXRlZCkpCitleHRlcm4gdm9pZCBwZWRfcmVnaXN0ZXJfZGlza190eXBlIChQZWREaXNrVHlwZSogdHlwZSk7CisKKy8qKgorICogRGVwcmVjYXRlZDogdXNlIHBlZF9kaXNrX3R5cGVfdW5yZWdpc3Rlci4KKyAqLworX19hdHRyaWJ1dGVfXyAoKGRlcHJlY2F0ZWQpKQorZXh0ZXJuIHZvaWQgcGVkX3VucmVnaXN0ZXJfZGlza190eXBlIChQZWREaXNrVHlwZSogdHlwZSk7CisKK2V4dGVybiBQZWREaXNrVHlwZSogcGVkX2Rpc2tfdHlwZV9nZXRfbmV4dCAoUGVkRGlza1R5cGUqIHR5cGUpOworZXh0ZXJuIFBlZERpc2tUeXBlKiBwZWRfZGlza190eXBlX2dldCAoY29uc3QgY2hhciogbmFtZSk7CitleHRlcm4gaW50IHBlZF9kaXNrX3R5cGVfY2hlY2tfZmVhdHVyZSAoY29uc3QgUGVkRGlza1R5cGUqIGRpc2tfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQZWREaXNrVHlwZUZlYXR1cmUgZmVhdHVyZSk7CisKK2V4dGVybiBQZWREaXNrVHlwZSogcGVkX2Rpc2tfcHJvYmUgKFBlZERldmljZSogZGV2KTsKK2V4dGVybiBpbnQgcGVkX2Rpc2tfY2xvYmJlciAoUGVkRGV2aWNlKiBkZXYpOworZXh0ZXJuIGludCBwZWRfZGlza19jbG9iYmVyX2V4Y2x1ZGUgKFBlZERldmljZSogZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBlZERpc2tUeXBlKiBleGNsdWRlKTsKK2V4dGVybiBQZWREaXNrKiBwZWRfZGlza19uZXcgKFBlZERldmljZSogZGV2KTsKK2V4dGVybiBQZWREaXNrKiBwZWRfZGlza19uZXdfZnJlc2ggKFBlZERldmljZSogZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGVkRGlza1R5cGUqIGRpc2tfdHlwZSk7CitleHRlcm4gUGVkRGlzayogcGVkX2Rpc2tfZHVwbGljYXRlIChjb25zdCBQZWREaXNrKiBvbGRfZGlzayk7CitleHRlcm4gdm9pZCBwZWRfZGlza19kZXN0cm95IChQZWREaXNrKiBkaXNrKTsKK2V4dGVybiBpbnQgcGVkX2Rpc2tfY29tbWl0IChQZWREaXNrKiBkaXNrKTsKK2V4dGVybiBpbnQgcGVkX2Rpc2tfY29tbWl0X3RvX2RldiAoUGVkRGlzayogZGlzayk7CitleHRlcm4gaW50IHBlZF9kaXNrX2NvbW1pdF90b19vcyAoUGVkRGlzayogZGlzayk7CitleHRlcm4gaW50IHBlZF9kaXNrX2NoZWNrIChjb25zdCBQZWREaXNrKiBkaXNrKTsKK2V4dGVybiB2b2lkIHBlZF9kaXNrX3ByaW50IChjb25zdCBQZWREaXNrKiBkaXNrKTsKKworZXh0ZXJuIGludCBwZWRfZGlza19nZXRfcHJpbWFyeV9wYXJ0aXRpb25fY291bnQgKGNvbnN0IFBlZERpc2sqIGRpc2spOworZXh0ZXJuIGludCBwZWRfZGlza19nZXRfbGFzdF9wYXJ0aXRpb25fbnVtIChjb25zdCBQZWREaXNrKiBkaXNrKTsKK2V4dGVybiBpbnQgcGVkX2Rpc2tfZ2V0X21heF9wcmltYXJ5X3BhcnRpdGlvbl9jb3VudCAoY29uc3QgUGVkRGlzayogZGlzayk7CisKKy8qKiBAfSAqLworCisvKioKKyAqIFxhZGR0b2dyb3VwIFBlZFBhcnRpdGlvbgorICogCisgKiBAeworICovCisKK2V4dGVybiBQZWRQYXJ0aXRpb24qIHBlZF9wYXJ0aXRpb25fbmV3IChjb25zdCBQZWREaXNrKiBkaXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBlZFBhcnRpdGlvblR5cGUgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQZWRGaWxlU3lzdGVtVHlwZSogZnNfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQZWRTZWN0b3Igc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGVkU2VjdG9yIGVuZCk7CitleHRlcm4gdm9pZCBwZWRfcGFydGl0aW9uX2Rlc3Ryb3kgKFBlZFBhcnRpdGlvbiogcGFydCk7CitleHRlcm4gaW50IHBlZF9wYXJ0aXRpb25faXNfYWN0aXZlIChjb25zdCBQZWRQYXJ0aXRpb24qIHBhcnQpOworZXh0ZXJuIGludCBwZWRfcGFydGl0aW9uX3NldF9mbGFnIChQZWRQYXJ0aXRpb24qIHBhcnQsIFBlZFBhcnRpdGlvbkZsYWcgZmxhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXRlKTsKK2V4dGVybiBpbnQgcGVkX3BhcnRpdGlvbl9nZXRfZmxhZyAoY29uc3QgUGVkUGFydGl0aW9uKiBwYXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQZWRQYXJ0aXRpb25GbGFnIGZsYWcpOworZXh0ZXJuIGludCBwZWRfcGFydGl0aW9uX2lzX2ZsYWdfYXZhaWxhYmxlIChjb25zdCBQZWRQYXJ0aXRpb24qIHBhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBlZFBhcnRpdGlvbkZsYWcgZmxhZyk7CitleHRlcm4gaW50IHBlZF9wYXJ0aXRpb25fc2V0X3N5c3RlbSAoUGVkUGFydGl0aW9uKiBwYXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBlZEZpbGVTeXN0ZW1UeXBlKiBmc190eXBlKTsKK2V4dGVybiBpbnQgcGVkX3BhcnRpdGlvbl9zZXRfbmFtZSAoUGVkUGFydGl0aW9uKiBwYXJ0LCBjb25zdCBjaGFyKiBuYW1lKTsKK2V4dGVybiBjb25zdCBjaGFyKiBwZWRfcGFydGl0aW9uX2dldF9uYW1lIChjb25zdCBQZWRQYXJ0aXRpb24qIHBhcnQpOworZXh0ZXJuIGludCBwZWRfcGFydGl0aW9uX2lzX2J1c3kgKGNvbnN0IFBlZFBhcnRpdGlvbiogcGFydCk7CitleHRlcm4gY2hhciogcGVkX3BhcnRpdGlvbl9nZXRfcGF0aCAoY29uc3QgUGVkUGFydGl0aW9uKiBwYXJ0KTsKKworZXh0ZXJuIGNvbnN0IGNoYXIqIHBlZF9wYXJ0aXRpb25fdHlwZV9nZXRfbmFtZSAoUGVkUGFydGl0aW9uVHlwZSBwYXJ0X3R5cGUpOworZXh0ZXJuIGNvbnN0IGNoYXIqIHBlZF9wYXJ0aXRpb25fZmxhZ19nZXRfbmFtZSAoUGVkUGFydGl0aW9uRmxhZyBmbGFnKTsKK2V4dGVybiBQZWRQYXJ0aXRpb25GbGFnIHBlZF9wYXJ0aXRpb25fZmxhZ19nZXRfYnlfbmFtZSAoY29uc3QgY2hhciogbmFtZSk7CitleHRlcm4gUGVkUGFydGl0aW9uRmxhZyBwZWRfcGFydGl0aW9uX2ZsYWdfbmV4dCAoUGVkUGFydGl0aW9uRmxhZyBmbGFnKTsKKworLyoqIEB9ICovCisKKy8qKgorICogXGFkZHRvZ3JvdXAgUGVkRGlzaworICogQHsKKyAqLworCitleHRlcm4gaW50IHBlZF9kaXNrX2FkZF9wYXJ0aXRpb24gKFBlZERpc2sqIGRpc2ssIFBlZFBhcnRpdGlvbiogcGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGVkQ29uc3RyYWludCogY29uc3RyYWludCk7CitleHRlcm4gaW50IHBlZF9kaXNrX3JlbW92ZV9wYXJ0aXRpb24gKFBlZERpc2sqIGRpc2ssIFBlZFBhcnRpdGlvbiogcGFydCk7CitleHRlcm4gaW50IHBlZF9kaXNrX2RlbGV0ZV9wYXJ0aXRpb24gKFBlZERpc2sqIGRpc2ssIFBlZFBhcnRpdGlvbiogcGFydCk7CitleHRlcm4gaW50IHBlZF9kaXNrX2RlbGV0ZV9hbGwgKFBlZERpc2sqIGRpc2spOworZXh0ZXJuIGludCBwZWRfZGlza19zZXRfcGFydGl0aW9uX2dlb20gKFBlZERpc2sqIGRpc2ssIFBlZFBhcnRpdGlvbiogcGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQZWRDb25zdHJhaW50KiBjb25zdHJhaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBlZFNlY3RvciBzdGFydCwgUGVkU2VjdG9yIGVuZCk7CitleHRlcm4gaW50IHBlZF9kaXNrX21heGltaXplX3BhcnRpdGlvbiAoUGVkRGlzayogZGlzaywgUGVkUGFydGl0aW9uKiBwYXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBlZENvbnN0cmFpbnQqIGNvbnN0cmFpbnQpOworZXh0ZXJuIFBlZEdlb21ldHJ5KiBwZWRfZGlza19nZXRfbWF4X3BhcnRpdGlvbl9nZW9tZXRyeSAoUGVkRGlzayogZGlzaywKKyAgICAgICAgICAgICAgICBQZWRQYXJ0aXRpb24qIHBhcnQsIGNvbnN0IFBlZENvbnN0cmFpbnQqIGNvbnN0cmFpbnQpOworZXh0ZXJuIGludCBwZWRfZGlza19taW5pbWl6ZV9leHRlbmRlZF9wYXJ0aXRpb24gKFBlZERpc2sqIGRpc2spOworCitleHRlcm4gUGVkUGFydGl0aW9uKiBwZWRfZGlza19uZXh0X3BhcnRpdGlvbiAoY29uc3QgUGVkRGlzayogZGlzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQZWRQYXJ0aXRpb24qIHBhcnQpOworZXh0ZXJuIFBlZFBhcnRpdGlvbiogcGVkX2Rpc2tfZ2V0X3BhcnRpdGlvbiAoY29uc3QgUGVkRGlzayogZGlzaywgaW50IG51bSk7CitleHRlcm4gUGVkUGFydGl0aW9uKiBwZWRfZGlza19nZXRfcGFydGl0aW9uX2J5X3NlY3RvciAoY29uc3QgUGVkRGlzayogZGlzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQZWRTZWN0b3Igc2VjdCk7CitleHRlcm4gUGVkUGFydGl0aW9uKiBwZWRfZGlza19leHRlbmRlZF9wYXJ0aXRpb24gKGNvbnN0IFBlZERpc2sqIGRpc2spOworCisvKiBpbnRlcm5hbCBmdW5jdGlvbnMgKi8KK2V4dGVybiBQZWREaXNrKiBfcGVkX2Rpc2tfYWxsb2MgKGNvbnN0IFBlZERldmljZSogZGV2LCBjb25zdCBQZWREaXNrVHlwZSogdHlwZSk7CitleHRlcm4gdm9pZCBfcGVkX2Rpc2tfZnJlZSAoUGVkRGlzayogZGlzayk7CisKKworLyoqIEB9ICovCisKKy8qKgorICogXGFkZHRvZ3JvdXAgUGVkUGFydGl0aW9uCisgKgorICogQHsKKyAqLworCitleHRlcm4gUGVkUGFydGl0aW9uKiBfcGVkX3BhcnRpdGlvbl9hbGxvYyAoY29uc3QgUGVkRGlzayogZGlzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQZWRQYXJ0aXRpb25UeXBlIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGVkRmlsZVN5c3RlbVR5cGUqIGZzX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGVkU2VjdG9yIHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBlZFNlY3RvciBlbmQpOworZXh0ZXJuIHZvaWQgX3BlZF9wYXJ0aXRpb25fZnJlZSAoUGVkUGFydGl0aW9uKiBwYXJ0KTsKKworZXh0ZXJuIGludCBfcGVkX3BhcnRpdGlvbl9hdHRlbXB0X2FsaWduICgKKyAgICAgICAgICAgICAgICBQZWRQYXJ0aXRpb24qIHBhcnQsIGNvbnN0IFBlZENvbnN0cmFpbnQqIGV4dGVybmFsLAorICAgICAgICAgICAgICAgIFBlZENvbnN0cmFpbnQqIGludGVybmFsKTsKKworI2VuZGlmIC8qIFBFRF9ESVNLX0hfSU5DTFVERUQgKi8KKworLyoqIEB9ICovCisKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9pbmNsdWRlL3BhcnRlZC9lbmRpYW4uaCBiL3BhcnRlZC0xLjguNy9pbmNsdWRlL3BhcnRlZC9lbmRpYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTFiMTg3Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2luY2x1ZGUvcGFydGVkL2VuZGlhbi5oCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgICAgbGlicGFydGVkIC0gYSBsaWJyYXJ5IGZvciBtYW5pcHVsYXRpbmcgZGlzayBwYXJ0aXRpb25zCisgICAgQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQorKi8KKworLyogc2hvdWxkIG9ubHkgYmUgI2luY2x1ZGVkIGJ5IGZpbGVzIGluIGxpYnBhcnRlZCAqLworCisjaWZuZGVmIFBFRF9FTkRJQU5fSF9JTkNMVURFRAorI2RlZmluZSBQRURfRU5ESUFOX0hfSU5DTFVERUQKKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisvKiByZXR1cm5zIHRoZSBuJ3RoIGxlYXN0IHNpZ25pZmljYW50IGJ5dGUgKi8KKyNkZWZpbmUgX0dFVF9CWVRFKHgsIG4pCQkoICgoeCkgPj4gKDggKiAobikpKSAmIDB4ZmYgKQorCisjZGVmaW5lIF9QRURfU1dBUDE2KHgpCQkoIChfR0VUX0JZVEUoeCwgMCkgPDwgOCkJXAorCQkJCSsgKF9HRVRfQllURSh4LCAxKSA8PCAwKSApCisKKyNkZWZpbmUgX1BFRF9TV0FQMzIoeCkJCSggKF9HRVRfQllURSh4LCAwKSA8PCAyNCkJXAorCQkJCSsgKF9HRVRfQllURSh4LCAxKSA8PCAxNikJXAorCQkJCSsgKF9HRVRfQllURSh4LCAyKSA8PCA4KQlcCisJCQkJKyAoX0dFVF9CWVRFKHgsIDMpIDw8IDApICkKKworI2RlZmluZSBfUEVEX1NXQVA2NCh4KQkJKCAoX0dFVF9CWVRFKHgsIDApIDw8IDU2KQlcCisJCQkJKyAoX0dFVF9CWVRFKHgsIDEpIDw8IDQ4KQlcCisJCQkJKyAoX0dFVF9CWVRFKHgsIDIpIDw8IDQwKQlcCisJCQkJKyAoX0dFVF9CWVRFKHgsIDMpIDw8IDMyKQlcCisJCQkJKyAoX0dFVF9CWVRFKHgsIDQpIDw8IDI0KQlcCisJCQkJKyAoX0dFVF9CWVRFKHgsIDUpIDw8IDE2KQlcCisJCQkJKyAoX0dFVF9CWVRFKHgsIDYpIDw8IDgpCVwKKwkJCQkrIChfR0VUX0JZVEUoeCwgNykgPDwgMCkgKQorCisjZGVmaW5lIFBFRF9TV0FQMTYoeCkJCSgodWludDE2X3QpIF9QRURfU1dBUDE2KCAodWludDE2X3QpICh4KSApKQorI2RlZmluZSBQRURfU1dBUDMyKHgpCQkoKHVpbnQzMl90KSBfUEVEX1NXQVAzMiggKHVpbnQzMl90KSAoeCkgKSkKKyNkZWZpbmUgUEVEX1NXQVA2NCh4KQkJKCh1aW50NjRfdCkgX1BFRF9TV0FQNjQoICh1aW50NjRfdCkgKHgpICkpCisKKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKworI2RlZmluZSBQRURfQ1BVX1RPX0xFMTYoeCkJUEVEX1NXQVAxNih4KQorI2RlZmluZSBQRURfQ1BVX1RPX0JFMTYoeCkJKHgpCisjZGVmaW5lIFBFRF9DUFVfVE9fTEUzMih4KQlQRURfU1dBUDMyKHgpCisjZGVmaW5lIFBFRF9DUFVfVE9fQkUzMih4KQkoeCkKKyNkZWZpbmUgUEVEX0NQVV9UT19MRTY0KHgpCVBFRF9TV0FQNjQoeCkKKyNkZWZpbmUgUEVEX0NQVV9UT19CRTY0KHgpCSh4KQorCisjZGVmaW5lIFBFRF9MRTE2X1RPX0NQVSh4KQlQRURfU1dBUDE2KHgpCisjZGVmaW5lIFBFRF9CRTE2X1RPX0NQVSh4KQkoeCkKKyNkZWZpbmUgUEVEX0xFMzJfVE9fQ1BVKHgpCVBFRF9TV0FQMzIoeCkKKyNkZWZpbmUgUEVEX0JFMzJfVE9fQ1BVKHgpCSh4KQorI2RlZmluZSBQRURfTEU2NF9UT19DUFUoeCkJUEVEX1NXQVA2NCh4KQorI2RlZmluZSBQRURfQkU2NF9UT19DUFUoeCkJKHgpCisKKyNlbHNlIC8qICFXT1JEU19CSUdFTkRJQU4gKi8KKworI2RlZmluZSBQRURfQ1BVX1RPX0xFMTYoeCkJKHgpCisjZGVmaW5lIFBFRF9DUFVfVE9fQkUxNih4KQlQRURfU1dBUDE2KHgpCisjZGVmaW5lIFBFRF9DUFVfVE9fTEUzMih4KQkoeCkKKyNkZWZpbmUgUEVEX0NQVV9UT19CRTMyKHgpCVBFRF9TV0FQMzIoeCkKKyNkZWZpbmUgUEVEX0NQVV9UT19MRTY0KHgpCSh4KQorI2RlZmluZSBQRURfQ1BVX1RPX0JFNjQoeCkJUEVEX1NXQVA2NCh4KQorCisjZGVmaW5lIFBFRF9MRTE2X1RPX0NQVSh4KQkoeCkKKyNkZWZpbmUgUEVEX0JFMTZfVE9fQ1BVKHgpCVBFRF9TV0FQMTYoeCkKKyNkZWZpbmUgUEVEX0xFMzJfVE9fQ1BVKHgpCSh4KQorI2RlZmluZSBQRURfQkUzMl9UT19DUFUoeCkJUEVEX1NXQVAzMih4KQorI2RlZmluZSBQRURfTEU2NF9UT19DUFUoeCkJKHgpCisjZGVmaW5lIFBFRF9CRTY0X1RPX0NQVSh4KQlQRURfU1dBUDY0KHgpCisKKyNlbmRpZiAvKiAhV09SRFNfQklHRU5ESUFOICovCisKKyNlbmRpZiAvKiBQRURfRU5ESUFOX0hfSU5DTFVERUQgKi8KKwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2luY2x1ZGUvcGFydGVkL2V4Y2VwdGlvbi5oIGIvcGFydGVkLTEuOC43L2luY2x1ZGUvcGFydGVkL2V4Y2VwdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllY2Y1MDQKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvaW5jbHVkZS9wYXJ0ZWQvZXhjZXB0aW9uLmgKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgICAgbGlicGFydGVkIC0gYSBsaWJyYXJ5IGZvciBtYW5pcHVsYXRpbmcgZGlzayBwYXJ0aXRpb25zCisgICAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQorKi8KKworLyoqCisgKiBcYWRkdG9ncm91cCBQZWRFeGNlcHRpb24KKyAqIEB7CisgKi8KKworLyoqIFxmaWxlIGV4Y2VwdGlvbi5oICovCisKKyNpZm5kZWYgUEVEX0VYQ0VQVElPTl9IX0lOQ0xVREVECisjZGVmaW5lIFBFRF9FWENFUFRJT05fSF9JTkNMVURFRAorCit0eXBlZGVmIHN0cnVjdCBfUGVkRXhjZXB0aW9uIFBlZEV4Y2VwdGlvbjsKKworLyoqCisgKiBFeGNlcHRpb24gdHlwZQorICovCitlbnVtIF9QZWRFeGNlcHRpb25UeXBlIHsKKwlQRURfRVhDRVBUSU9OX0lORk9STUFUSU9OPTEsCisJUEVEX0VYQ0VQVElPTl9XQVJOSU5HPTIsCisJUEVEX0VYQ0VQVElPTl9FUlJPUj0zLAorCVBFRF9FWENFUFRJT05fRkFUQUw9NCwKKwlQRURfRVhDRVBUSU9OX0JVRz01LAorCVBFRF9FWENFUFRJT05fTk9fRkVBVFVSRT02LAorfTsKK3R5cGVkZWYgZW51bSBfUGVkRXhjZXB0aW9uVHlwZSBQZWRFeGNlcHRpb25UeXBlOworCisvKioKKyAqIE9wdGlvbiBmb3IgcmVzb2x2aW5nIHRoZSBleGNlcHRpb24KKyAqLworZW51bSBfUGVkRXhjZXB0aW9uT3B0aW9uIHsKKwlQRURfRVhDRVBUSU9OX1VOSEFORExFRD0wLAorCVBFRF9FWENFUFRJT05fRklYPTEsCisJUEVEX0VYQ0VQVElPTl9ZRVM9MiwKKwlQRURfRVhDRVBUSU9OX05PPTQsCisJUEVEX0VYQ0VQVElPTl9PSz04LAorCVBFRF9FWENFUFRJT05fUkVUUlk9MTYsCisJUEVEX0VYQ0VQVElPTl9JR05PUkU9MzIsCisJUEVEX0VYQ0VQVElPTl9DQU5DRUw9NjQsCit9OwordHlwZWRlZiBlbnVtIF9QZWRFeGNlcHRpb25PcHRpb24gUGVkRXhjZXB0aW9uT3B0aW9uOworI2RlZmluZSBQRURfRVhDRVBUSU9OX09LX0NBTkNFTAkgICAgKFBFRF9FWENFUFRJT05fT0sgKyBQRURfRVhDRVBUSU9OX0NBTkNFTCkKKyNkZWZpbmUgUEVEX0VYQ0VQVElPTl9ZRVNfTk8JICAgIChQRURfRVhDRVBUSU9OX1lFUyArIFBFRF9FWENFUFRJT05fTk8pCisjZGVmaW5lIFBFRF9FWENFUFRJT05fWUVTX05PX0NBTkNFTCAoUEVEX0VYQ0VQVElPTl9ZRVNfTk8gXAorCQkJCSAgICAgKyBQRURfRVhDRVBUSU9OX0NBTkNFTCkKKyNkZWZpbmUgUEVEX0VYQ0VQVElPTl9JR05PUkVfQ0FOQ0VMIChQRURfRVhDRVBUSU9OX0lHTk9SRSBcCisJCQkJICAgICArIFBFRF9FWENFUFRJT05fQ0FOQ0VMKQorI2RlZmluZSBQRURfRVhDRVBUSU9OX1JFVFJZX0NBTkNFTCAgKFBFRF9FWENFUFRJT05fUkVUUlkgKyBQRURfRVhDRVBUSU9OX0NBTkNFTCkKKyNkZWZpbmUgUEVEX0VYQ0VQVElPTl9SRVRSWV9JR05PUkVfQ0FOQ0VMIChQRURfRVhDRVBUSU9OX1JFVFJZIFwKKwkJCQkJICAgKyBQRURfRVhDRVBUSU9OX0lHTk9SRV9DQU5DRUwpCisjZGVmaW5lIFBFRF9FWENFUFRJT05fT1BUSU9OX0ZJUlNUIFBFRF9FWENFUFRJT05fRklYCisjZGVmaW5lIFBFRF9FWENFUFRJT05fT1BUSU9OX0xBU1QgUEVEX0VYQ0VQVElPTl9DQU5DRUwKKworLyoqCisgKiBTdHJ1Y3R1cmUgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCBleGNlcHRpb24KKyAqLworc3RydWN0IF9QZWRFeGNlcHRpb24geworCWNoYXIqCQkJbWVzc2FnZTsJLyoqPCB0ZXh0IGRlc2NyaWJpbmcgd2hhdCB0aGUgZXZlbnQgd2FzICovCisJUGVkRXhjZXB0aW9uVHlwZQl0eXBlOwkJLyoqPCB0eXBlIG9mIGV4Y2VwdGlvbiAqLworCVBlZEV4Y2VwdGlvbk9wdGlvbglvcHRpb25zOwkvKio8IE9SZWQgbGlzdCBvZiBvcHRpb25zIHRoYXQKKwkJCQkJCSAgIHRoZSBleGNlcHRpb24gaGFuZGxlciBjYW4KKwkJCQkJCSAgIHJldHVybiAodGhlIHdheXMgYW4gZXhjZXB0aW9uIAorCQkJCQkJICAgY2FuIGJlIHJlc29sdmVkKSAqLworfTsKKwordHlwZWRlZiBQZWRFeGNlcHRpb25PcHRpb24gKFBlZEV4Y2VwdGlvbkhhbmRsZXIpIChQZWRFeGNlcHRpb24qIGV4KTsKKworZXh0ZXJuIGludCBwZWRfZXhjZXB0aW9uOwkvKiBzZXQgdG8gdHJ1ZSBpZiB0aGVyZSdzIGFuIGV4Y2VwdGlvbiAqLworCitleHRlcm4gY2hhciogcGVkX2V4Y2VwdGlvbl9nZXRfdHlwZV9zdHJpbmcgKFBlZEV4Y2VwdGlvblR5cGUgZXhfdHlwZSk7CitleHRlcm4gY2hhciogcGVkX2V4Y2VwdGlvbl9nZXRfb3B0aW9uX3N0cmluZyAoUGVkRXhjZXB0aW9uT3B0aW9uIGV4X29wdCk7CisKK2V4dGVybiB2b2lkIHBlZF9leGNlcHRpb25fc2V0X2hhbmRsZXIgKFBlZEV4Y2VwdGlvbkhhbmRsZXIqIGhhbmRsZXIpOworZXh0ZXJuIFBlZEV4Y2VwdGlvbkhhbmRsZXIgKnBlZF9leGNlcHRpb25fZ2V0X2hhbmRsZXIodm9pZCk7CisKK2V4dGVybiBQZWRFeGNlcHRpb25PcHRpb24gcGVkX2V4Y2VwdGlvbl9kZWZhdWx0X2hhbmRsZXIgKFBlZEV4Y2VwdGlvbiogZXgpOworCitleHRlcm4gUGVkRXhjZXB0aW9uT3B0aW9uCXBlZF9leGNlcHRpb25fdGhyb3cgKFBlZEV4Y2VwdGlvblR5cGUgZXhfdHlwZSwKKwkJCQkJCSAgICAgUGVkRXhjZXB0aW9uT3B0aW9uIGV4X29wdCwKKwkJCQkJCSAgICAgY29uc3QgY2hhciogbWVzc2FnZSwKKwkJCQkJCSAgICAgLi4uKTsKKy8qIHJldGhyb3dzIGFuIGV4Y2VwdGlvbiAtIGkuZS4gY2FsbHMgdGhlIGV4Y2VwdGlvbiBoYW5kbGVyLCAob3IgcmV0dXJucyBhCisgICBjb2RlIHRvIHJldHVybiB0byBwYXNzIHVwIGhpZ2hlcikgKi8KK2V4dGVybiBQZWRFeGNlcHRpb25PcHRpb24JcGVkX2V4Y2VwdGlvbl9yZXRocm93ICgpOworCisvKiBmcmVlcyBhbiBleGNlcHRpb24sIGluZGljYXRpbmcgdGhhdCB0aGUgZXhjZXB0aW9uIGhhcyBiZWVuIGhhbmRsZWQuCisgICBDYWxsaW5nIGFuIGV4Y2VwdGlvbiBoYW5kbGVyIGNvdW50cy4gKi8KK2V4dGVybiB2b2lkCQkJcGVkX2V4Y2VwdGlvbl9jYXRjaCAoKTsKKworLyogaW5kaWNhdGUgdGhhdCBleGNlcHRpb25zIHNob3VsZCBub3QgZ28gdG8gdGhlIGV4Y2VwdGlvbiBoYW5kbGVyLCBidXQgcGFzc2VkCisgICB1cCB0byB0aGUgY2FsbGluZyBmdW5jdGlvbihzKSAqLworZXh0ZXJuIHZvaWQJCQlwZWRfZXhjZXB0aW9uX2ZldGNoX2FsbCAoKTsKKworLyogaW5kaWNhdGUgdGhhdCBleGNlcHRpb25zIHNob3VsZCBpbnZva2UgdGhlIGV4Y2VwdGlvbiBoYW5kbGVyICovCitleHRlcm4gdm9pZAkJCXBlZF9leGNlcHRpb25fbGVhdmVfYWxsICgpOworCisjZW5kaWYgLyogUEVEX0VYQ0VQVElPTl9IX0lOQ0xVREVEICovCisKKy8qKiBAfSAqLworCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvaW5jbHVkZS9wYXJ0ZWQvZmRhc2QuaCBiL3BhcnRlZC0xLjguNy9pbmNsdWRlL3BhcnRlZC9mZGFzZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2YjFlMzMKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvaW5jbHVkZS9wYXJ0ZWQvZmRhc2QuaApAQCAtMCwwICsxLDIzMSBAQAorLyoKKyAqIEZpbGUuLi4uLi4uLi4uLjogczM5MC10b29scy9mZGFzZC9mZGFzZC5oCisgKiBBdXRob3IocykuLi4uLi46IFZvbGtlciBTYW1lc2tlIDxzYW1lc2tlQGRlLmlibS5jb20+CisgKiAgICAgICAgICAgICAgICAgIEhvcnN0IEh1bW1lbCAgIDxIb3JzdC5IdW1tZWxAZGUuaWJtLmNvbT4KKyAqIEJ1Z3JlcG9ydHMudG8uLjogPExpbnV4MzkwQGRlLmlibS5jb20+CisgKiAoQykgSUJNIENvcnBvcmF0aW9uLCBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwgMjAwMS0yMDAyCisgKgorICogSGlzdG9yeSBvZiBjaGFuZ2VzIChzdGFydHMgTWFyY2ggMjAwMSkKKyAqIHZlcnNpb24gMS4wMSAtIG1lbnUgZW50cnkgJ3MnIHRvIHNob3cgbWFwcGluZyBkZXZub2RlIC0gRFMgbmFtZQorICogICAgICAgICAxLjAyIC0gRFMgbmFtZXMgY291bnQgbm93IGZyb20gMDAwMSBpbnN0ZWFkIGZyb20gMDAwMAorICogICAgICAgICAxLjAzIC0gdm9sc2VyIGNoZWNrczogJ0FBIEFBQScgdG8gJ0FBQUFBICcKKyAqICAgICAgICAgICAgICAtIHJlbW92ZWQgZGVwZW5kZW5jeSB0byBrZXJuZWwgaGVhZGVycy4KKyAqICAgICAgICAgMS4wNCAtIGFkZGVkIC1wIG9wdGlvbgorICogICAgICAgICAxLjA1IC0gbmV3IEFQSSBwb2xpY3ksIHNldCBpdCBiYWNrIHRvIDAKKyAqLworI2lmbmRlZiBGREFTRF9ICisjZGVmaW5lIEZEQVNEX0gKKworI2luY2x1ZGUgPHBhcnRlZC92dG9jLmg+CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU0VDVElPTjogRGVmaW5pdGlvbnMgbmVlZGVkIGZvciBEQVNELUFQSSAoc2VlIGRhc2QuaCkgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgREFTRF9JT0NUTF9MRVRURVIgJ0QnCisKKyNkZWZpbmUgREFTRF9QQVJUTl9CSVRTIDIKKworI2RlZmluZSBQQVJUSVRJT05fTElOVVhfU1dBUCAgICAweDgyCisjZGVmaW5lIFBBUlRJVElPTl9MSU5VWCAgICAgICAgIDB4ODMKKyNkZWZpbmUgUEFSVElUSU9OX0xJTlVYX0VYVCAgICAgMHg4NQorI2RlZmluZSBQQVJUSVRJT05fTElOVVhfTFZNICAgICAweDhlCisjZGVmaW5lIFBBUlRJVElPTl9MSU5VWF9SQUlEICAgIDB4ZmQKKyNkZWZpbmUgUEFSVElUSU9OX0xJTlVYX0xWTV9PTEQgMHhmZQorCisjZGVmaW5lIFBBUlRfVFlQRV9OQVRJVkUgIk5BVElWRSIKKyNkZWZpbmUgUEFSVF9UWVBFX1NXQVAgICAiU1dBUCAgIgorI2RlZmluZSBQQVJUX1RZUEVfUkFJRCAgICJSQUlEICAiCisjZGVmaW5lIFBBUlRfVFlQRV9MVk0gICAgIkxWTSAgICIKKworI2lmZGVmIERFQlVHX0RBU0QKKyNkZWZpbmUgUERFQlVHICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiVzXG4iLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgX19GSUxFX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgIF9fTElORV9fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBfX1BSRVRUWV9GVU5DVElPTl9fKTsKKyNlbHNlCisjZGVmaW5lIFBERUJVRworI2VuZGlmCisKKy8qIAorICogc3RydWN0IGRhc2RfaW5mb3JtYXRpb25fdAorICogcmVwcmVzZW50cyBhbnkgZGF0YSBhYm91dCB0aGUgZGV2aWNlLCB3aGljaCBpcyB2aXNpYmxlIHRvIHVzZXJzcGFjZS4KKyAqICBpbmNsdWRpbmcgZm9yYW10IGFuZCBmZWF0dWVyZXMuCisgKi8KK3R5cGVkZWYgc3RydWN0IGRhc2RfaW5mb3JtYXRpb25fdCB7CisJdW5zaWduZWQgaW50IGRldm5vOyAgICAgICAgICAgLyogUy8zOTAgZGV2bm8gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwl1bnNpZ25lZCBpbnQgcmVhbF9kZXZubzsgICAgICAvKiBmb3IgYWxpYXNlcyAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXVuc2lnbmVkIGludCBzY2hpZDsgICAgICAgICAgIC8qIFMvMzkwIHN1YmNoYW5uZWwgaWRlbnRpZmllciAgICAgICAgICovCisJdW5zaWduZWQgaW50IGN1X3R5cGUgIDogMTY7ICAgLyogZnJvbSBTZW5zZUlEICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwl1bnNpZ25lZCBpbnQgY3VfbW9kZWwgOiAgODsgICAvKiBmcm9tIFNlbnNlSUQgICAgICAgICAgICAgICAgICAgICAgICAqLworCXVuc2lnbmVkIGludCBkZXZfdHlwZSA6IDE2OyAgIC8qIGZyb20gU2Vuc2VJRCAgICAgICAgICAgICAgICAgICAgICAgICovCisJdW5zaWduZWQgaW50IGRldl9tb2RlbCA6IDg7ICAgLyogZnJvbSBTZW5zZUlEICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwl1bnNpZ25lZCBpbnQgb3Blbl9jb3VudDsgCisJdW5zaWduZWQgaW50IHJlcV9xdWV1ZV9sZW47IAorCXVuc2lnbmVkIGludCBjaGFucV9sZW47ICAgICAgIC8qIGxlbmd0aCBvZiBjaGFucSAgICAgICAgICAgICAgICAgICAgICovCisJY2hhciB0eXBlWzRdOyAgICAgICAgICAgICAgICAgLyogZnJvbSBkaXNjaXBsaW5lLm5hbWUsICdub25lJyBmb3IgICAgKi8KKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB1bmtub3duICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXVuc2lnbmVkIGludCBzdGF0dXM7ICAgICAgICAgIC8qIGN1cnJlbnQgZGV2aWNlIGxldmVsICAgICAgICAgICAgICAgICovCisJdW5zaWduZWQgaW50IGxhYmVsX2Jsb2NrOyAgICAgLyogd2hlcmUgdG8gZmluZCB0aGUgVk9MU0VSICAgICAgICAgICAgKi8KKwl1bnNpZ25lZCBpbnQgRkJBX2xheW91dDsgICAgICAvKiBmaXhlZCBibG9jayBzaXplIChsaWtlIEFJWFZPTCkgICAgICAqLworCXVuc2lnbmVkIGludCBjaGFyYWN0ZXJpc3RpY3Nfc2l6ZTsKKwl1bnNpZ25lZCBpbnQgY29uZmRhdGFfc2l6ZTsKKwljaGFyIGNoYXJhY3RlcmlzdGljc1s2NF07ICAgICAvKiBmcm9tIHJlYWRfZGV2aWNlX2NoYXJhY3RlcmlzdGljcyAgICAqLworCWNoYXIgY29uZmlndXJhdGlvbl9kYXRhWzI1Nl07IC8qIGZyb20gcmVhZF9jb25maWd1cmF0aW9uX2RhdGEgICAgICAgICovCit9IGRhc2RfaW5mb3JtYXRpb25fdDsKKworLyogCisgKiBzdHJ1Y3QgZm9ybWF0X2RhdGFfdAorICogcmVwcmVzZW50cyBhbGwgZGF0YSBuZWNlc3NhcnkgdG8gZm9ybWF0IGEgZGFzZAorICovCit0eXBlZGVmIHN0cnVjdCBmb3JtYXRfZGF0YV90IHsKKwlpbnQgc3RhcnRfdW5pdDsgLyogZnJvbSB0cmFjayAqLworCWludCBzdG9wX3VuaXQ7ICAvKiB0byB0cmFjayAqLworCWludCBibGtzaXplOyAgICAvKiBzZWN0b3JzaXplICovCisJaW50IGludGVuc2l0eTsgIAorfSBmb3JtYXRfZGF0YV90OworCisvKgorICogdmFsdWVzIHRvIGJlIHVzZWQgZm9yIGZvcm1hdF9kYXRhX3QuaW50ZW5zaXR5CisgKiAwLzg6IG5vcm1hbCBmb3JtYXQKKyAqIDEvOTogYWxzbyB3cml0ZSByZWNvcmQgemVybworICogMy8xMTogYWxzbyB3cml0ZSBob21lIGFkZHJlc3MKKyAqIDQvMTI6IGludmFsaWRhdGUgdHJhY2sKKyAqLworI2RlZmluZSBEQVNEX0ZNVF9JTlRfRk1UX1IwIDEgLyogd3JpdGUgcmVjb3JkIHplcm8gKi8KKyNkZWZpbmUgREFTRF9GTVRfSU5UX0ZNVF9IQSAyIC8qIHdyaXRlIGhvbWUgYWRkcmVzcywgYWxzbyBzZXQgRk1UX1IwICEgKi8KKyNkZWZpbmUgREFTRF9GTVRfSU5UX0lOVkFMICA0IC8qIGludmFsaWRhdGUgdHJhY2tzICovCisjZGVmaW5lIERBU0RfRk1UX0lOVF9DT01QQVQgOCAvKiB1c2UgT1MvMzkwIGNvbXBhdGlibGUgZGlzayBsYXlvdXQgKi8KKworCisvKiBEaXNhYmxlIHRoZSB2b2x1bWUgKGZvciBMaW51eCkgKi8KKyNkZWZpbmUgQklPREFTRERJU0FCTEUgX0lPKERBU0RfSU9DVExfTEVUVEVSLDApIAorLyogRW5hYmxlIHRoZSB2b2x1bWUgKGZvciBMaW51eCkgKi8KKyNkZWZpbmUgQklPREFTREVOQUJMRSAgX0lPKERBU0RfSU9DVExfTEVUVEVSLDEpICAKKworLyogcmV0cmlldmUgQVBJIHZlcnNpb24gbnVtYmVyICovCisjZGVmaW5lIERBU0RBUElWRVIgICAgIF9JT1IoREFTRF9JT0NUTF9MRVRURVIsMCxpbnQpCisvKiBHZXQgaW5mb3JtYXRpb24gb24gYSBkYXNkIGRldmljZSAoZW5oYW5jZWQpICovCisjZGVmaW5lIEJJT0RBU0RJTkZPICAgX0lPUihEQVNEX0lPQ1RMX0xFVFRFUiwxLGRhc2RfaW5mb3JtYXRpb25fdCkKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFNFQ1RJT046IEZ1cnRoZXIgSU9DVEwgRGVmaW5pdGlvbnMgIChzZWUgZnMuaCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogcmUtcmVhZCBwYXJ0aXRpb24gdGFibGUgKi8KKyNkZWZpbmUgQkxLUlJQQVJUICBfSU8oMHgxMiw5NSkJCisvKiBnZXQgYmxvY2sgZGV2aWNlIHNlY3RvciBzaXplICovCisjZGVmaW5lIEJMS1NTWkdFVCAgX0lPKDB4MTIsMTA0KQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFNFQ1RJT046IERlZmluaXRpb24gZnJvbSBoZHJlcS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdHJ1Y3QgZmRhc2RfaGRfZ2VvbWV0cnkgeworICAgICAgdW5zaWduZWQgY2hhciBoZWFkczsKKyAgICAgIHVuc2lnbmVkIGNoYXIgc2VjdG9yczsKKyAgICAgIHVuc2lnbmVkIHNob3J0IGN5bGluZGVyczsKKyAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQ7Cit9OworCisvKiBnZXQgZGV2aWNlIGdlb21ldHJ5ICovCisjZGVmaW5lIEhESU9fR0VUR0VPCQkweDAzMDEJCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU0VDVElPTjogRkRBU0QgaW50ZXJuYWwgdHlwZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgREFTRF9NSU5fQVBJX1ZFUlNJT04gMAorCisjZGVmaW5lIERFRkFVTFRfRkRBU0RfQ09ORiAiL2V0Yy9mZGFzZC5jb25mIiAvKiBkZWZhdWx0IGNvbmZpZyBmaWxlICovCisKKyNkZWZpbmUgUEFSVE5fTUFTSyAoKDEgPDwgREFTRF9QQVJUTl9CSVRTKSAtIDEpCisjZGVmaW5lIFVTQUJMRV9QQVJUSVRJT05TICgoMSA8PCBEQVNEX1BBUlROX0JJVFMpIC0gMSkKKworI2RlZmluZSBGREFTRF9WRVJTSU9OICIxLjA1IgorI2RlZmluZSBGREFTRF9FUlJPUiAiZmRhc2QgZXJyb3I6ICIKKyNkZWZpbmUgREVWSUNFICJkZXZpY2UiCisjZGVmaW5lIERJU0MgICAiZGlzYyIKKyNkZWZpbmUgUEFSVCAgICJwYXJ0IgorCisjZGVmaW5lIEFMVEVSTkFURV9DWUxJTkRFUlNfVVNFRCAweDEwCisKK3R5cGVkZWYgc3RydWN0IHBhcnRpdGlvbl9pbmZvIHsKKwl1X2ludDhfdCB1c2VkOworCXVuc2lnbmVkIGxvbmcgc3RhcnRfdHJrOworCXVuc2lnbmVkIGxvbmcgZW5kX3RyazsKKwl1bnNpZ25lZCBsb25nIGxlbl90cms7CisJdW5zaWduZWQgbG9uZyBmc3BhY2VfdHJrOworCWZvcm1hdDFfbGFiZWxfdCAqZjE7IAorCXN0cnVjdCBwYXJ0aXRpb25faW5mbyAqbmV4dDsKKwlzdHJ1Y3QgcGFydGl0aW9uX2luZm8gKnByZXY7CisJdV9pbnQ4X3QgdHlwZTsKK30gcGFydGl0aW9uX2luZm9fdDsKKwordHlwZWRlZiBzdHJ1Y3QgY29uZmlnX2RhdGEgeworCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBzdG9wOworfSBjb25maWdfZGF0YV90OworCit0eXBlZGVmIHN0cnVjdCBmZGFzZF9hbmNob3IgeworCWludCB2bGFiZWxfY2hhbmdlZDsKKwlpbnQgdnRvY19jaGFuZ2VkOworCWludCBkZXZuYW1lX3NwZWNpZmllZDsKKwlpbnQgdm9saWRfc3BlY2lmaWVkOworCWludCBjb25maWdfc3BlY2lmaWVkOworCWludCBhdXRvX3BhcnRpdGlvbjsKKwlpbnQgcHJpbnRfdGFibGU7CisJaW50IGJpZ19kaXNrOworCWludCBzaWxlbnQ7CisJaW50IHZlcmJvc2U7CisJaW50IGRldm5vOworCWludCBvcHRpb25fcmV1c2U7CisJaW50IG9wdGlvbl9yZWNyZWF0ZTsKKwlpbnQgcGFydG5vW1VTQUJMRV9QQVJUSVRJT05TXTsKKwl1X2ludDE2X3QgZGV2X3R5cGU7CisJdW5zaWduZWQgaW50IHVzZWRfcGFydGl0aW9uczsKKwl1bnNpZ25lZCBsb25nIGxhYmVsX3BvczsKKwl1bnNpZ25lZCBpbnQgIGJsa3NpemU7CisJdW5zaWduZWQgbG9uZyBmc3BhY2VfdHJrOworCWZvcm1hdDRfbGFiZWxfdCAgKmY0OworCWZvcm1hdDVfbGFiZWxfdCAgKmY1OworCWZvcm1hdDdfbGFiZWxfdCAgKmY3OworCXBhcnRpdGlvbl9pbmZvX3QgKmZpcnN0OworCXBhcnRpdGlvbl9pbmZvX3QgKmxhc3Q7CisJdm9sdW1lX2xhYmVsX3QgICAqdmxhYmVsOworCWNvbmZpZ19kYXRhX3QgY29uZmRhdGFbVVNBQkxFX1BBUlRJVElPTlNdOworCXN0cnVjdCBmZGFzZF9oZF9nZW9tZXRyeSBnZW87Cit9IGZkYXNkX2FuY2hvcl90OworCitlbnVtIG9mZnNldCB7bG93ZXIsIHVwcGVyfTsKKworZW51bSBmZGFzZF9mYWlsdXJlIHsKKwl1bmFibGVfdG9fb3Blbl9kaXNrLAorCXVuYWJsZV90b19zZWVrX2Rpc2ssCisJdW5hYmxlX3RvX3JlYWRfZGlzaywKKwlyZWFkX29ubHlfZGlzaywKKwl1bmFibGVfdG9faW9jdGwsCisJYXBpX3ZlcnNpb25fbWlzbWF0Y2gsCisJd3JvbmdfZGlza190eXBlLAorCXdyb25nX2Rpc2tfZm9ybWF0LAorCWRpc2tfaW5fdXNlLAorCWNvbmZpZ19zeW50YXhfZXJyb3IsCisJdmxhYmVsX2NvcnJ1cHRlZCwKKwlkc25hbWVfY29ycnVwdGVkLAorCW1hbGxvY19mYWlsZWQsCisJZGV2aWNlX3ZlcmlmaWNhdGlvbl9mYWlsZWQKK307CisKK3ZvaWQgZmRhc2RfY2xlYW51cCAoZmRhc2RfYW5jaG9yX3QgKmFuY2hvcik7Cit2b2lkIGZkYXNkX2luaXRpYWxpemVfYW5jaG9yIChmZGFzZF9hbmNob3JfdCAqIGFuYyk7Cit2b2lkIGZkYXNkX2dldF9nZW9tZXRyeSAoZmRhc2RfYW5jaG9yX3QgKmFuYywgaW50IGZkKTsKK3ZvaWQgZmRhc2RfY2hlY2tfYXBpX3ZlcnNpb24gKGZkYXNkX2FuY2hvcl90ICphbmMsIGludCBmZCk7CitpbnQgZmRhc2RfY2hlY2tfdm9sdW1lIChmZGFzZF9hbmNob3JfdCAqYW5jLCBpbnQgZmQpOworaW50IGZkYXNkX3dyaXRlX2xhYmVscyAoZmRhc2RfYW5jaG9yX3QgKmFuYywgaW50IGZkKTsKK2ludCBmZGFzZF9pbnZhbGlkX3Z0b2NfcG9pbnRlcihmZGFzZF9hbmNob3JfdCAqYW5jKTsKK3ZvaWQgZmRhc2RfcmVjcmVhdGVfdnRvYyhmZGFzZF9hbmNob3JfdCAqYW5jKTsKK3BhcnRpdGlvbl9pbmZvX3QgKiBmZGFzZF9hZGRfcGFydGl0aW9uIChmZGFzZF9hbmNob3JfdCAqYW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzdGFydCwgdW5zaWduZWQgaW50IHN0b3ApOworaW50IGZkYXNkX3ByZXBhcmVfbGFiZWxzIChmZGFzZF9hbmNob3JfdCAqYW5jLCBpbnQgZmQpIDsKKworI2VuZGlmIC8qIEZEQVNEX0ggKi8KZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9pbmNsdWRlL3BhcnRlZC9maWxlc3lzLmggYi9wYXJ0ZWQtMS44LjcvaW5jbHVkZS9wYXJ0ZWQvZmlsZXN5cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3YmM3Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvaW5jbHVkZS9wYXJ0ZWQvZmlsZXN5cy5oCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICAgIGxpYnBhcnRlZCAtIGEgbGlicmFyeSBmb3IgbWFuaXB1bGF0aW5nIGRpc2sgcGFydGl0aW9ucworICAgIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKKyovCisKKy8qKgorICogXGFkZHRvZ3JvdXAgUGVkRmlsZVN5c3RlbQorICogQHsKKyAqLworCisvKiogXGZpbGUgZmlsZXN5cy5oICovCisKKyNpZm5kZWYgUEVEX0ZJTEVTWVNfSF9JTkNMVURFRAorI2RlZmluZSBQRURfRklMRVNZU19IX0lOQ0xVREVECisKK3R5cGVkZWYgc3RydWN0IF9QZWRGaWxlU3lzdGVtCQlQZWRGaWxlU3lzdGVtOwordHlwZWRlZiBzdHJ1Y3QgX1BlZEZpbGVTeXN0ZW1UeXBlCVBlZEZpbGVTeXN0ZW1UeXBlOwordHlwZWRlZiBjb25zdCBzdHJ1Y3QgX1BlZEZpbGVTeXN0ZW1PcHMJUGVkRmlsZVN5c3RlbU9wczsKKworI2luY2x1ZGUgPHBhcnRlZC9nZW9tLmg+CisjaW5jbHVkZSA8cGFydGVkL2Rpc2suaD4KKyNpbmNsdWRlIDxwYXJ0ZWQvZXhjZXB0aW9uLmg+CisjaW5jbHVkZSA8cGFydGVkL2NvbnN0cmFpbnQuaD4KKyNpbmNsdWRlIDxwYXJ0ZWQvdGltZXIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCitzdHJ1Y3QgX1BlZEZpbGVTeXN0ZW1PcHMgeworCVBlZEdlb21ldHJ5KiAoKnByb2JlKSAoUGVkR2VvbWV0cnkqIGdlb20pOworCWludCAoKmNsb2JiZXIpIChQZWRHZW9tZXRyeSogZ2VvbSk7CisKKwlQZWRGaWxlU3lzdGVtKiAoKm9wZW4pIChQZWRHZW9tZXRyeSogZ2VvbSk7CisJUGVkRmlsZVN5c3RlbSogKCpjcmVhdGUpIChQZWRHZW9tZXRyeSogZ2VvbSwgUGVkVGltZXIqIHRpbWVyKTsKKwlpbnQgKCpjbG9zZSkgKFBlZEZpbGVTeXN0ZW0qIGZzKTsKKwlpbnQgKCpjaGVjaykgKFBlZEZpbGVTeXN0ZW0qIGZzLCBQZWRUaW1lciogdGltZXIpOworCVBlZEZpbGVTeXN0ZW0qICgqY29weSkgKGNvbnN0IFBlZEZpbGVTeXN0ZW0qIGZzLCBQZWRHZW9tZXRyeSogZ2VvbSwKKwkJCQlQZWRUaW1lciogdGltZXIpOworCWludCAoKnJlc2l6ZSkgKFBlZEZpbGVTeXN0ZW0qIGZzLCBQZWRHZW9tZXRyeSogZ2VvbSwgUGVkVGltZXIqIHRpbWVyKTsKKworCVBlZENvbnN0cmFpbnQqICgqZ2V0X2NyZWF0ZV9jb25zdHJhaW50KSAoY29uc3QgUGVkRGV2aWNlKiBkZXYpOworCVBlZENvbnN0cmFpbnQqICgqZ2V0X3Jlc2l6ZV9jb25zdHJhaW50KSAoY29uc3QgUGVkRmlsZVN5c3RlbSogZnMpOworCVBlZENvbnN0cmFpbnQqICgqZ2V0X2NvcHlfY29uc3RyYWludCkgKGNvbnN0IFBlZEZpbGVTeXN0ZW0qIGZzLAorCQkgICAgICAgCQkJICAgICAgIGNvbnN0IFBlZERldmljZSogZGV2KTsKK307CisKKy8qKgorICogU3RydWN0dXJlIGRlc2NyaWJpbmcgdHlwZSBvZiBmaWxlIHN5c3RlbSAKKyAqLworc3RydWN0IF9QZWRGaWxlU3lzdGVtVHlwZSB7CisJUGVkRmlsZVN5c3RlbVR5cGUqCW5leHQ7CisJY29uc3QgY2hhciogY29uc3QJbmFtZTsJCS8qKjwgbmFtZSBvZiB0aGUgZmlsZSBzeXN0ZW0gdHlwZSAqLworICAgICAgICBjb25zdCBpbnQqICAgICAgICAgICAgICBibG9ja19zaXplczsKKwlQZWRGaWxlU3lzdGVtT3BzKiBjb25zdAlvcHM7Cit9OworCisKKy8qKgorICogU3RydWN0dXJlIGRlc2NyaWJpbmcgZmlsZSBzeXN0ZW0KKyAqLworc3RydWN0IF9QZWRGaWxlU3lzdGVtIHsKKwlQZWRGaWxlU3lzdGVtVHlwZSoJdHlwZTsJCS8qKjwgdGhlIGZpbGUgc3lzdGVtIHR5cGUgKi8KKwlQZWRHZW9tZXRyeSoJCWdlb207CQkvKio8IHdoZXJlIHRoZSBmaWxlIHN5c3RlbSBhY3R1YWxseSBpcyAqLworCWludAkJCWNoZWNrZWQ7CS8qKjwgMSBpZiB0aGUgZmlsZSBzeXN0ZW0gaGFzIGJlZW4gY2hlY2tlZC4KKwkJCQkJCSAgICAgIDAgb3RoZXJ3aXNlLiAqLworCisJdm9pZCoJCQl0eXBlX3NwZWNpZmljOworCit9OworCitleHRlcm4gdm9pZCBwZWRfZmlsZV9zeXN0ZW1fdHlwZV9yZWdpc3RlciAoUGVkRmlsZVN5c3RlbVR5cGUqIHR5cGUpOworZXh0ZXJuIHZvaWQgcGVkX2ZpbGVfc3lzdGVtX3R5cGVfdW5yZWdpc3RlciAoUGVkRmlsZVN5c3RlbVR5cGUqIHR5cGUpOworCitleHRlcm4gUGVkRmlsZVN5c3RlbVR5cGUqIHBlZF9maWxlX3N5c3RlbV90eXBlX2dldCAoY29uc3QgY2hhciogbmFtZSk7CitleHRlcm4gUGVkRmlsZVN5c3RlbVR5cGUqCitwZWRfZmlsZV9zeXN0ZW1fdHlwZV9nZXRfbmV4dCAoY29uc3QgUGVkRmlsZVN5c3RlbVR5cGUqIGZzX3R5cGUpOworCitleHRlcm4gUGVkRmlsZVN5c3RlbVR5cGUqIHBlZF9maWxlX3N5c3RlbV9wcm9iZSAoUGVkR2VvbWV0cnkqIGdlb20pOworZXh0ZXJuIFBlZEdlb21ldHJ5KiBwZWRfZmlsZV9zeXN0ZW1fcHJvYmVfc3BlY2lmaWMgKAorCQkJY29uc3QgUGVkRmlsZVN5c3RlbVR5cGUqIGZzX3R5cGUsCisJCQlQZWRHZW9tZXRyeSogZ2VvbSk7CitleHRlcm4gaW50IHBlZF9maWxlX3N5c3RlbV9jbG9iYmVyIChQZWRHZW9tZXRyeSogZ2VvbSk7CisKK2V4dGVybiBQZWRGaWxlU3lzdGVtKiBwZWRfZmlsZV9zeXN0ZW1fb3BlbiAoUGVkR2VvbWV0cnkqIGdlb20pOworZXh0ZXJuIFBlZEZpbGVTeXN0ZW0qIHBlZF9maWxlX3N5c3RlbV9jcmVhdGUgKFBlZEdlb21ldHJ5KiBnZW9tLAorCQkJCQkgICAgICBjb25zdCBQZWRGaWxlU3lzdGVtVHlwZSogdHlwZSwKKwkJCQkJICAgICAgUGVkVGltZXIqIHRpbWVyKTsKK2V4dGVybiBpbnQgcGVkX2ZpbGVfc3lzdGVtX2Nsb3NlIChQZWRGaWxlU3lzdGVtKiBmcyk7CitleHRlcm4gaW50IHBlZF9maWxlX3N5c3RlbV9jaGVjayAoUGVkRmlsZVN5c3RlbSogZnMsIFBlZFRpbWVyKiB0aW1lcik7CitleHRlcm4gUGVkRmlsZVN5c3RlbSogcGVkX2ZpbGVfc3lzdGVtX2NvcHkgKFBlZEZpbGVTeXN0ZW0qIGZzLAorCQkJCQkgICAgUGVkR2VvbWV0cnkqIGdlb20sCisJCQkJCSAgICBQZWRUaW1lciogdGltZXIpOworZXh0ZXJuIGludCBwZWRfZmlsZV9zeXN0ZW1fcmVzaXplIChQZWRGaWxlU3lzdGVtKiBmcywgUGVkR2VvbWV0cnkqIGdlb20sCisJCQkJICAgUGVkVGltZXIqIHRpbWVyKTsKKworZXh0ZXJuIFBlZENvbnN0cmFpbnQqIHBlZF9maWxlX3N5c3RlbV9nZXRfY3JlYXRlX2NvbnN0cmFpbnQgKAorCQljb25zdCBQZWRGaWxlU3lzdGVtVHlwZSogZnNfdHlwZSwgY29uc3QgUGVkRGV2aWNlKiBkZXYpOworZXh0ZXJuIFBlZENvbnN0cmFpbnQqIHBlZF9maWxlX3N5c3RlbV9nZXRfcmVzaXplX2NvbnN0cmFpbnQgKAorCQljb25zdCBQZWRGaWxlU3lzdGVtKiBmcyk7CitleHRlcm4gUGVkQ29uc3RyYWludCogcGVkX2ZpbGVfc3lzdGVtX2dldF9jb3B5X2NvbnN0cmFpbnQgKAorCQljb25zdCBQZWRGaWxlU3lzdGVtKiBmcywgY29uc3QgUGVkRGV2aWNlKiBkZXYpOworCisjZW5kaWYgLyogUEVEX0ZJTEVTWVNfSF9JTkNMVURFRCAqLworCisvKiogQH0gKi8KZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9pbmNsdWRlL3BhcnRlZC9nZW9tLmggYi9wYXJ0ZWQtMS44LjcvaW5jbHVkZS9wYXJ0ZWQvZ2VvbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwZGM1YjIKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvaW5jbHVkZS9wYXJ0ZWQvZ2VvbS5oCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgICAgbGlicGFydGVkIC0gYSBsaWJyYXJ5IGZvciBtYW5pcHVsYXRpbmcgZGlzayBwYXJ0aXRpb25zCisgICAgQ29weXJpZ2h0IChDKSAxOTk4LTIwMDEsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCisqLworCisvKioKKyAqIFxhZGR0b2dyb3VwIFBlZEdlb21ldHJ5CisgKiBAeworICovCisKKy8qKiBcZmlsZSBnZW9tLmggKi8KKworI2lmbmRlZiBQRURfR0VPTV9IX0lOQ0xVREVECisjZGVmaW5lIFBFRF9HRU9NX0hfSU5DTFVERUQKKworI2luY2x1ZGUgPHBhcnRlZC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxwYXJ0ZWQvdGltZXIuaD4KKwordHlwZWRlZiBzdHJ1Y3QgX1BlZEdlb21ldHJ5CVBlZEdlb21ldHJ5OworCisvKioKKyAqIEdlb21ldHJ5IG9mIHRoZSBwYXJ0aXRpb24KKyAqLworc3RydWN0IF9QZWRHZW9tZXRyeSB7CisJUGVkRGV2aWNlKgkJZGV2OworCVBlZFNlY3RvcgkJc3RhcnQ7CisJUGVkU2VjdG9yCQlsZW5ndGg7CisJUGVkU2VjdG9yCQllbmQ7Cit9OworCitleHRlcm4gaW50IHBlZF9nZW9tZXRyeV9pbml0IChQZWRHZW9tZXRyeSogZ2VvbSwgY29uc3QgUGVkRGV2aWNlKiBkZXYsCisJCQkgICAgICBQZWRTZWN0b3Igc3RhcnQsIFBlZFNlY3RvciBsZW5ndGgpOworZXh0ZXJuIFBlZEdlb21ldHJ5KiBwZWRfZ2VvbWV0cnlfbmV3IChjb25zdCBQZWREZXZpY2UqIGRldiwgUGVkU2VjdG9yIHN0YXJ0LAorCQkJCSAgICAgIFBlZFNlY3RvciBsZW5ndGgpOworZXh0ZXJuIFBlZEdlb21ldHJ5KiBwZWRfZ2VvbWV0cnlfZHVwbGljYXRlIChjb25zdCBQZWRHZW9tZXRyeSogZ2VvbSk7CitleHRlcm4gUGVkR2VvbWV0cnkqIHBlZF9nZW9tZXRyeV9pbnRlcnNlY3QgKGNvbnN0IFBlZEdlb21ldHJ5KiBhLAorCSAgICAgICAJCQkJICAgIGNvbnN0IFBlZEdlb21ldHJ5KiBiKTsKK2V4dGVybiB2b2lkIHBlZF9nZW9tZXRyeV9kZXN0cm95IChQZWRHZW9tZXRyeSogZ2VvbSk7CitleHRlcm4gaW50IHBlZF9nZW9tZXRyeV9zZXQgKFBlZEdlb21ldHJ5KiBnZW9tLCBQZWRTZWN0b3Igc3RhcnQsCisJCQkgICAgIFBlZFNlY3RvciBsZW5ndGgpOworZXh0ZXJuIGludCBwZWRfZ2VvbWV0cnlfc2V0X3N0YXJ0IChQZWRHZW9tZXRyeSogZ2VvbSwgUGVkU2VjdG9yIHN0YXJ0KTsKK2V4dGVybiBpbnQgcGVkX2dlb21ldHJ5X3NldF9lbmQgKFBlZEdlb21ldHJ5KiBnZW9tLCBQZWRTZWN0b3IgZW5kKTsKK2V4dGVybiBpbnQgcGVkX2dlb21ldHJ5X3Rlc3Rfb3ZlcmxhcCAoY29uc3QgUGVkR2VvbWV0cnkqIGEsCisJICAgICAgIAkJCSAgICAgIGNvbnN0IFBlZEdlb21ldHJ5KiBiKTsKK2V4dGVybiBpbnQgcGVkX2dlb21ldHJ5X3Rlc3RfaW5zaWRlIChjb25zdCBQZWRHZW9tZXRyeSogYSwKKwkJCQkgICAgIGNvbnN0IFBlZEdlb21ldHJ5KiBiKTsKK2V4dGVybiBpbnQgcGVkX2dlb21ldHJ5X3Rlc3RfZXF1YWwgKGNvbnN0IFBlZEdlb21ldHJ5KiBhLCBjb25zdCBQZWRHZW9tZXRyeSogYik7CitleHRlcm4gaW50IHBlZF9nZW9tZXRyeV90ZXN0X3NlY3Rvcl9pbnNpZGUgKGNvbnN0IFBlZEdlb21ldHJ5KiBnZW9tLAorCSAgICAgICAJCQkJICAgIFBlZFNlY3RvciBzZWN0KTsKKworZXh0ZXJuIGludCBwZWRfZ2VvbWV0cnlfcmVhZCAoY29uc3QgUGVkR2VvbWV0cnkqIGdlb20sIHZvaWQqIGJ1ZmZlciwKKwkJCSAgICAgIFBlZFNlY3RvciBvZmZzZXQsIFBlZFNlY3RvciBjb3VudCk7CitleHRlcm4gaW50IHBlZF9nZW9tZXRyeV93cml0ZSAoUGVkR2VvbWV0cnkqIGdlb20sIGNvbnN0IHZvaWQqIGJ1ZmZlciwKKwkJCSAgICAgICBQZWRTZWN0b3Igb2Zmc2V0LCBQZWRTZWN0b3IgY291bnQpOworZXh0ZXJuIFBlZFNlY3RvciBwZWRfZ2VvbWV0cnlfY2hlY2sgKFBlZEdlb21ldHJ5KiBnZW9tLCB2b2lkKiBidWZmZXIsCisJCQkJICAgICBQZWRTZWN0b3IgYnVmZmVyX3NpemUsIFBlZFNlY3RvciBvZmZzZXQsCisJCQkJICAgICBQZWRTZWN0b3IgZ3JhbnVsYXJpdHksIFBlZFNlY3RvciBjb3VudCwKKwkJCQkgICAgIFBlZFRpbWVyKiB0aW1lcik7CitleHRlcm4gaW50IHBlZF9nZW9tZXRyeV9zeW5jIChQZWRHZW9tZXRyeSogZ2VvbSk7CitleHRlcm4gaW50IHBlZF9nZW9tZXRyeV9zeW5jX2Zhc3QgKFBlZEdlb21ldHJ5KiBnZW9tKTsKKworLyogcmV0dXJucyAtMSBpZiAic2VjdG9yIiBpcyBub3Qgd2l0aGluIGRlc3QncyBzcGFjZS4gKi8KK2V4dGVybiBQZWRTZWN0b3IgcGVkX2dlb21ldHJ5X21hcCAoY29uc3QgUGVkR2VvbWV0cnkqIGRzdCwKKwkJCQkgICBjb25zdCBQZWRHZW9tZXRyeSogc3JjLAorCQkJCSAgIFBlZFNlY3RvciBzZWN0b3IpOworCisjZW5kaWYgLyogUEVEX0dFT01fSF9JTkNMVURFRCAqLworCisvKiogQH0gKi8KKwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2luY2x1ZGUvcGFydGVkL2dudS5oIGIvcGFydGVkLTEuOC43L2luY2x1ZGUvcGFydGVkL2dudS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjZjQxMmEKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvaW5jbHVkZS9wYXJ0ZWQvZ251LmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAgICBsaWJwYXJ0ZWQgLSBhIGxpYnJhcnkgZm9yIG1hbmlwdWxhdGluZyBkaXNrIHBhcnRpdGlvbnMKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCisqLworCisjaWZuZGVmIFBFRF9HTlVfSF9JTkNMVURFRAorI2RlZmluZSBQRURfR05VX0hfSU5DTFVERUQKKworI2luY2x1ZGUgPHBhcnRlZC9wYXJ0ZWQuaD4KKworI2luY2x1ZGUgPGh1cmQvc3RvcmUuaD4KKworI2RlZmluZSBHTlVfU1BFQ0lGSUMoZGV2KQkoKEdOVVNwZWNpZmljKikgKGRldiktPmFyY2hfc3BlY2lmaWMpCisKK3R5cGVkZWYJc3RydWN0IF9HTlVTcGVjaWZpYwlHTlVTcGVjaWZpYzsKKworc3RydWN0IF9HTlVTcGVjaWZpYyB7CisJc3RydWN0IHN0b3JlKglzdG9yZTsKKwlpbnQgY29uc3VtZTsKK307CisKK2V4dGVybiBQZWRBcmNoaXRlY3R1cmUgcGVkX2dudV9hcmNoOworCisvKiBJbml0aWFsaXplIGEgUGVkRGV2aWNlIHVzaW5nIFNPVVJDRS4gIFRoZSBTT1VSQ0Ugd2lsbCBOT1QgYmUgZGVzdHJveWVkOworICAgdGhlIGNhbGxlciBjcmVhdGVkIGl0LCBpdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2lsYmlsaXR5IHRvIGZyZWUgaXQKKyAgIGFmdGVyIGl0IGNhbGxzIHBlZF9kZXZpY2VfZGVzdG9yeS4gIFNPVVJDRSBpcyBub3QgcmVnaXN0ZXJlZCBpbiBQYXJ0ZWQncworICAgbGlzdCBvZiBkZXZpY2VzLiAgKi8KK1BlZERldmljZSogcGVkX2RldmljZV9uZXdfZnJvbV9zdG9yZSAoc3RydWN0IHN0b3JlICpzb3VyY2UpOworCisjZW5kaWYgLyogUEVEX0dOVV9IX0lOQ0xVREVEICovCisKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9pbmNsdWRlL3BhcnRlZC9saW51eC5oIGIvcGFydGVkLTEuOC43L2luY2x1ZGUvcGFydGVkL2xpbnV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBkOTJjZgotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9pbmNsdWRlL3BhcnRlZC9saW51eC5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgICAgbGlicGFydGVkIC0gYSBsaWJyYXJ5IGZvciBtYW5pcHVsYXRpbmcgZGlzayBwYXJ0aXRpb25zCisgICAgQ29weXJpZ2h0IChDKSAyMDAxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQorKi8KKworI2lmbmRlZiBQRURfTElOVVhfSF9JTkNMVURFRAorI2RlZmluZSBQRURfTElOVVhfSF9JTkNMVURFRAorCisjaW5jbHVkZSA8cGFydGVkL3BhcnRlZC5oPgorI2luY2x1ZGUgPHBhcnRlZC9kZXZpY2UuaD4KKworI2lmIGRlZmluZWQgX19zMzkwX18gfHwgZGVmaW5lZCBfX3MzOTB4X18KKyMgIGluY2x1ZGUgPHBhcnRlZC9mZGFzZC5oPgorI2VuZGlmCisKKyNkZWZpbmUgTElOVVhfU1BFQ0lGSUMoZGV2KQkoKExpbnV4U3BlY2lmaWMqKSAoZGV2KS0+YXJjaF9zcGVjaWZpYykKKwordHlwZWRlZglzdHJ1Y3QgX0xpbnV4U3BlY2lmaWMJTGludXhTcGVjaWZpYzsKKworc3RydWN0IF9MaW51eFNwZWNpZmljIHsKKwlpbnQJZmQ7CisjaWYgZGVmaW5lZChfX3MzOTBfXykgfHwgZGVmaW5lZChfX3MzOTB4X18pCisJdW5zaWduZWQgaW50IHJlYWxfc2VjdG9yX3NpemU7CisJLyogSUJNIGludGVybmFsIGRhc2Qgc3RydWN0dXJlIChpIGd1ZXNzIDspLCByZXF1aXJlZC4gKi8KKwlzdHJ1Y3QgZmRhc2RfYW5jaG9yICphbmNob3I7CisjZW5kaWYKK307CisKK2V4dGVybiBQZWRBcmNoaXRlY3R1cmUgcGVkX2xpbnV4X2FyY2g7CisKKyNlbmRpZiAvKiBQRURfTElOVVhfSF9JTkNMVURFRCAqLworCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvaW5jbHVkZS9wYXJ0ZWQvbmF0bWF0aC5oIGIvcGFydGVkLTEuOC43L2luY2x1ZGUvcGFydGVkL25hdG1hdGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWIzMmFkCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2luY2x1ZGUvcGFydGVkL25hdG1hdGguaApAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAgICBsaWJwYXJ0ZWQgLSBhIGxpYnJhcnkgZm9yIG1hbmlwdWxhdGluZyBkaXNrIHBhcnRpdGlvbnMKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCisqLworCisvKioKKyAqIFxhZGR0b2dyb3VwIFBlZEFsaWdubWVudAorICogQHsKKyAqLworCisvKiogXGZpbGUgbmF0bWF0aC5oICovCisKKyNpZm5kZWYgUEVEX05BVE1BVEhfSF9JTkNMVURFRAorI2RlZmluZSBQRURfTkFUTUFUSF9IX0lOQ0xVREVECisKKwordHlwZWRlZiBzdHJ1Y3QgX1BlZEFsaWdubWVudAlQZWRBbGlnbm1lbnQ7CisKKyNpbmNsdWRlIDxwYXJ0ZWQvZGlzay5oPgorCisjZGVmaW5lIFBFRF9NSU4oYSwgYikJKCAoKGEpPChiKSkgPyAoYSkgOiAoYikgKQorI2RlZmluZSBQRURfTUFYKGEsIGIpCSggKChhKT4oYikpID8gKGEpIDogKGIpICkKKworLyogdGhpcyBpcyB3ZWlyZCAoSSdtIHN0aWxsIG5vdCBzdXJlIEkgc2hvdWxkIGJlIGRvaW5nIHRoaXMhKQorICogCisgKiBGb3IgdGhlIGZ1bmN0aW9uczogbmV3LCBkZXN0cm95LCBkdXBsaWNhdGUgYW5kIG1lcmdlOiB0aGUgZm9sbG93aW5nIHZhbHVlcworICogZm9yIGFsaWduIGFyZSB2YWxpZDoKKyAqIAkqIGFsaWduID09IE5VTEwgICghKSAgCQlyZXByZXNlbnRzIG5vIHNvbHV0aW9uCisgKiAJKiBhbGlnbi0+Z3JhaW5fc2l6ZSA9PSAwCXJlcHJlc2VudHMgYSBzaW5nbGUgc29sdXRpb24KKyAqIAkJCQkJKGFsaWduLT5vZmZzZXQpCisgKiAJKiBhbGlnbi0+Z3JhaW5fc2l6ZSA+IDAJCXJlcHJlc2VudHMgYSBzZXQgb2Ygc29sdXRpb25zCisgKgorICogVGhlc2UgYXJlIGludmFsaWQ6CisgKiAJKiBhbGlnbi0+b2Zmc2V0IDwgMAkJTm90ZTogdGhpcyBnZXRzICJub3JtYWxpemVkIgorICogCSogYWxpZ24tPmdyYWluX3NpemUgPCAwCisgKgorICogRm9yIHRoZSBhbGlnbl8qIG9wZXJhdGlvbnMsIHRoZXJlIG11c3QgYmUgYSBzb2x1dGlvbi4gIGkuZS4gYWxpZ24gIT0gTlVMTAorICogQWxsIHNvbHV0aW9ucyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLgorICovCisKK3N0cnVjdCBfUGVkQWxpZ25tZW50IHsKKwlQZWRTZWN0b3IJb2Zmc2V0OworCVBlZFNlY3RvcglncmFpbl9zaXplOworfTsKKworZXh0ZXJuIFBlZFNlY3RvciBwZWRfcm91bmRfdXBfdG8gKFBlZFNlY3RvciBzZWN0b3IsIFBlZFNlY3RvciBncmFpbl9zaXplKTsKK2V4dGVybiBQZWRTZWN0b3IgcGVkX3JvdW5kX2Rvd25fdG8gKFBlZFNlY3RvciBzZWN0b3IsIFBlZFNlY3RvciBncmFpbl9zaXplKTsKK2V4dGVybiBQZWRTZWN0b3IgcGVkX3JvdW5kX3RvX25lYXJlc3QgKFBlZFNlY3RvciBzZWN0b3IsIFBlZFNlY3RvciBncmFpbl9zaXplKTsKK2V4dGVybiBQZWRTZWN0b3IgcGVkX2dyZWF0ZXN0X2NvbW1vbl9kaXZpc29yIChQZWRTZWN0b3IgYSwgUGVkU2VjdG9yIGIpOworCitleHRlcm4gaW50IHBlZF9hbGlnbm1lbnRfaW5pdCAoUGVkQWxpZ25tZW50KiBhbGlnbiwgUGVkU2VjdG9yIG9mZnNldCwKKwkJCSAgICAgICBQZWRTZWN0b3IgZ3JhaW5fc2l6ZSk7CitleHRlcm4gUGVkQWxpZ25tZW50KiBwZWRfYWxpZ25tZW50X25ldyAoUGVkU2VjdG9yIG9mZnNldCwgUGVkU2VjdG9yIGdyYWluX3NpemUpOworZXh0ZXJuIHZvaWQgcGVkX2FsaWdubWVudF9kZXN0cm95IChQZWRBbGlnbm1lbnQqIGFsaWduKTsKK2V4dGVybiBQZWRBbGlnbm1lbnQqIHBlZF9hbGlnbm1lbnRfZHVwbGljYXRlIChjb25zdCBQZWRBbGlnbm1lbnQqIGFsaWduKTsKK2V4dGVybiBQZWRBbGlnbm1lbnQqIHBlZF9hbGlnbm1lbnRfaW50ZXJzZWN0IChjb25zdCBQZWRBbGlnbm1lbnQqIGEsCisJCQkJCSAgICAgIGNvbnN0IFBlZEFsaWdubWVudCogYik7CisKK2V4dGVybiBQZWRTZWN0b3IKK3BlZF9hbGlnbm1lbnRfYWxpZ25fdXAgKGNvbnN0IFBlZEFsaWdubWVudCogYWxpZ24sIGNvbnN0IFBlZEdlb21ldHJ5KiBnZW9tLAorCQkJUGVkU2VjdG9yIHNlY3Rvcik7CitleHRlcm4gUGVkU2VjdG9yCitwZWRfYWxpZ25tZW50X2FsaWduX2Rvd24gKGNvbnN0IFBlZEFsaWdubWVudCogYWxpZ24sIGNvbnN0IFBlZEdlb21ldHJ5KiBnZW9tLAorCQkJICBQZWRTZWN0b3Igc2VjdG9yKTsKK2V4dGVybiBQZWRTZWN0b3IKK3BlZF9hbGlnbm1lbnRfYWxpZ25fbmVhcmVzdCAoY29uc3QgUGVkQWxpZ25tZW50KiBhbGlnbiwgY29uc3QgUGVkR2VvbWV0cnkqIGdlb20sCisJCQkgICAgIFBlZFNlY3RvciBzZWN0b3IpOworCitleHRlcm4gaW50CitwZWRfYWxpZ25tZW50X2lzX2FsaWduZWQgKGNvbnN0IFBlZEFsaWdubWVudCogYWxpZ24sIGNvbnN0IFBlZEdlb21ldHJ5KiBnZW9tLAorCQkJICBQZWRTZWN0b3Igc2VjdG9yKTsKKworZXh0ZXJuIGNvbnN0IFBlZEFsaWdubWVudCogcGVkX2FsaWdubWVudF9hbnk7CitleHRlcm4gY29uc3QgUGVkQWxpZ25tZW50KiBwZWRfYWxpZ25tZW50X25vbmU7CisKK2V4dGVybiBQZWRTZWN0b3IKK3BlZF9kaXZfcm91bmRfdXAgKFBlZFNlY3RvciBudW1lcmF0b3IsIFBlZFNlY3RvciBkaXZpc29yKTsKKworZXh0ZXJuIFBlZFNlY3RvcgorcGVkX2Rpdl9yb3VuZF90b19uZWFyZXN0IChQZWRTZWN0b3IgbnVtZXJhdG9yLCBQZWRTZWN0b3IgZGl2aXNvcik7CisKKyNlbmRpZiAvKiBQRURfTkFUTUFUSF9IX0lOQ0xVREVEICovCisKKy8qKgorICogQH0KKyAqLworCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvaW5jbHVkZS9wYXJ0ZWQvcGFydGVkLmggYi9wYXJ0ZWQtMS44LjcvaW5jbHVkZS9wYXJ0ZWQvcGFydGVkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY0MGVkZQotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9pbmNsdWRlL3BhcnRlZC9wYXJ0ZWQuaApAQCAtMCwwICsxLDY0IEBACisvKgorICAgIGxpYnBhcnRlZCAtIGEgbGlicmFyeSBmb3IgbWFuaXB1bGF0aW5nIGRpc2sgcGFydGl0aW9ucworICAgIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKKyovCisKKyNpZm5kZWYgUEFSVEVEX0hfSU5DTFVERUQKKyNkZWZpbmUgUEFSVEVEX0hfSU5DTFVERUQKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBfUGVkQXJjaGl0ZWN0dXJlIFBlZEFyY2hpdGVjdHVyZTsKKworI2luY2x1ZGUgPHBhcnRlZC9jb25zdHJhaW50Lmg+CisjaW5jbHVkZSA8cGFydGVkL2RldmljZS5oPgorI2luY2x1ZGUgPHBhcnRlZC9kaXNrLmg+CisjaW5jbHVkZSA8cGFydGVkL2V4Y2VwdGlvbi5oPgorI2luY2x1ZGUgPHBhcnRlZC9maWxlc3lzLmg+CisjaW5jbHVkZSA8cGFydGVkL25hdG1hdGguaD4KKyNpbmNsdWRlIDxwYXJ0ZWQvdW5pdC5oPgorCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK3N0cnVjdCBfUGVkQXJjaGl0ZWN0dXJlIHsKKwlQZWREaXNrQXJjaE9wcyoJCWRpc2tfb3BzOworCVBlZERldmljZUFyY2hPcHMqCWRldl9vcHM7Cit9OworCitleHRlcm4gY29uc3QgUGVkQXJjaGl0ZWN0dXJlKglwZWRfYXJjaGl0ZWN0dXJlOworCisvKiB0aGUgYXJjaGl0ZWN0dXJlIGNhbid0IGJlIGNoYW5nZWQgaWYgdGhlcmUgYXJlIGFueSBQZWREZXZpY2Uncy4KKyAqIGkuZS4geW91IHNob3VsZCBvbmx5IGJlIGRvaW5nIHRoaXMgaWYgaXQncyB0aGUgRklSU1QgdGhpbmcgeW91IGRvLi4uCisgKi8KK2V4dGVybiBpbnQgcGVkX3NldF9hcmNoaXRlY3R1cmUgKGNvbnN0IFBlZEFyY2hpdGVjdHVyZSogYXJjaCk7CisKK2V4dGVybiBjb25zdCBjaGFyKiBwZWRfZ2V0X3ZlcnNpb24gKCk7CisKK2V4dGVybiB2b2lkKiBwZWRfbWFsbG9jIChzaXplX3Qgc2l6ZSk7CitleHRlcm4gdm9pZCogcGVkX2NhbGxvYyAoc2l6ZV90IHNpemUpOworZXh0ZXJuIGludCBwZWRfcmVhbGxvYyAodm9pZCoqIHB0ciwgc2l6ZV90IHNpemUpOworZXh0ZXJuIHZvaWQgcGVkX2ZyZWUgKHZvaWQqIHB0cik7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBQQVJURURfSF9JTkNMVURFRCAqLwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2luY2x1ZGUvcGFydGVkL3RpbWVyLmggYi9wYXJ0ZWQtMS44LjcvaW5jbHVkZS9wYXJ0ZWQvdGltZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2NiZDEwCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2luY2x1ZGUvcGFydGVkL3RpbWVyLmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAgICBsaWJwYXJ0ZWQgLSBhIGxpYnJhcnkgZm9yIG1hbmlwdWxhdGluZyBkaXNrIHBhcnRpdGlvbnMKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCisqLworCisvKioKKyAqIFxhZGR0b2dyb3VwIFBlZFRpbWVyCisgKiBAeworICovCisKKy8qKiBcZmlsZSB0aW1lci5oICovCisKKyNpZm5kZWYgUEVEX1RJTUVSX0hfSU5DTFVERUQKKyNkZWZpbmUgUEVEX1RJTUVSX0hfSU5DTFVERUQKKworI2luY2x1ZGUgPHRpbWUuaD4KKwordHlwZWRlZiBzdHJ1Y3QgX1BlZFRpbWVyIFBlZFRpbWVyOworCit0eXBlZGVmIHZvaWQgUGVkVGltZXJIYW5kbGVyIChQZWRUaW1lciogdGltZXIsIHZvaWQqIGNvbnRleHQpOworCisvKgorICogU3RydWN0dXJlIGtlZXBpbmcgdHJhY2sgb2YgcHJvZ3Jlc3MgYW5kIHRpbWUKKyAqLworc3RydWN0IF9QZWRUaW1lciB7CisJZmxvYXQJCQlmcmFjOwkJLyoqPCBmcmFjdGlvbiBvZiBvcGVyYXRpb24gZG9uZSAqLworCXRpbWVfdAkJCXN0YXJ0OwkJLyoqPCB0aW1lIG9mIHN0YXJ0IG9mIG9wICovCisJdGltZV90CQkJbm93OwkJLyoqPCB0aW1lIG9mIGxhc3QgdXBkYXRlIChub3chKSAqLworCXRpbWVfdAkJCXByZWRpY3RlZF9lbmQ7CS8qKjwgZXhwZWN0ZWQgZmluaXNoIHRpbWUgKi8KKwljb25zdCBjaGFyKgkJc3RhdGVfbmFtZTsJLyoqPCBlZzogImNvcHlpbmcgZGF0YSIgKi8KKwlQZWRUaW1lckhhbmRsZXIqCWhhbmRsZXI7CS8qKjwgd2hvIHRvIG5vdGlmeSBvbiB1cGRhdGVzICovCisJdm9pZCoJCQljb250ZXh0OwkvKio8IGNvbnRleHQgdG8gcGFzcyB0byBoYW5kbGVyICovCit9OworCitleHRlcm4gUGVkVGltZXIqIHBlZF90aW1lcl9uZXcgKFBlZFRpbWVySGFuZGxlciogaGFuZGxlciwgdm9pZCogY29udGV4dCk7CitleHRlcm4gdm9pZCBwZWRfdGltZXJfZGVzdHJveSAoUGVkVGltZXIqIHRpbWVyKTsKKworLyogYSBuZXN0ZWQgdGltZXIgYXV0b21hdGljYWxseSBub3RpZmllcyBpdCdzIHBhcmVudC4gIFlvdSBzaG91bGQgb25seQorICogY3JlYXRlIG9uZSB3aGVuIHlvdSBhcmUgZ29pbmcgdG8gdXNlIGl0IChub3QgYmVmb3JlKQorICovCitleHRlcm4gUGVkVGltZXIqIHBlZF90aW1lcl9uZXdfbmVzdGVkIChQZWRUaW1lciogcGFyZW50LCBmbG9hdCBuZXN0X2ZyYWMpOworZXh0ZXJuIHZvaWQgcGVkX3RpbWVyX2Rlc3Ryb3lfbmVzdGVkIChQZWRUaW1lciogdGltZXIpOworCitleHRlcm4gdm9pZCBwZWRfdGltZXJfdG91Y2ggKFBlZFRpbWVyKiB0aW1lcik7CitleHRlcm4gdm9pZCBwZWRfdGltZXJfcmVzZXQgKFBlZFRpbWVyKiB0aW1lcik7CitleHRlcm4gdm9pZCBwZWRfdGltZXJfdXBkYXRlIChQZWRUaW1lciogdGltZXIsIGZsb2F0IG5ld19mcmFjKTsKK2V4dGVybiB2b2lkIHBlZF90aW1lcl9zZXRfc3RhdGVfbmFtZSAoUGVkVGltZXIqIHRpbWVyLCBjb25zdCBjaGFyKiBzdGF0ZV9uYW1lKTsKKworI2VuZGlmIC8qIFBFRF9USU1FUl9IX0lOQ0xVREVEICovCisKKworLyoqIEB9ICovCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvaW5jbHVkZS9wYXJ0ZWQvdW5pdC5oIGIvcGFydGVkLTEuOC43L2luY2x1ZGUvcGFydGVkL3VuaXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2QzZDQxCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2luY2x1ZGUvcGFydGVkL3VuaXQuaApAQCAtMCwwICsxLDk0IEBACisvKgorICAgIGxpYnBhcnRlZCAtIGEgbGlicmFyeSBmb3IgbWFuaXB1bGF0aW5nIGRpc2sgcGFydGl0aW9ucworICAgIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKKyovCisKKy8qKgorICogXGFkZHRvZ3JvdXAgUGVkVW5pdAorICogQHsKKyAqLworCisvKiogXGZpbGUgdW5pdC5oICovCisKKyNpZm5kZWYgUEVEX1VOSVRfSF9JTkNMVURFRAorI2RlZmluZSBQRURfVU5JVF9IX0lOQ0xVREVECisKKyNpbmNsdWRlIDxwYXJ0ZWQvZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjZGVmaW5lIFBFRF9TRUNUT1JfU0laRV9ERUZBVUxUICAgNTEyTEwKKyNkZWZpbmUgUEVEX0tJTE9CWVRFX1NJWkUgMTAwMExMCisjZGVmaW5lIFBFRF9NRUdBQllURV9TSVpFIDEwMDAwMDBMTAorI2RlZmluZSBQRURfR0lHQUJZVEVfU0laRSAxMDAwMDAwMDAwTEwKKyNkZWZpbmUgUEVEX1RFUkFCWVRFX1NJWkUgMTAwMDAwMDAwMDAwMExMCisjZGVmaW5lIFBFRF9LSUJJQllURV9TSVpFIDEwMjRMTAorI2RlZmluZSBQRURfTUVCSUJZVEVfU0laRSAxMDQ4NTc2TEwKKyNkZWZpbmUgUEVEX0dJQklCWVRFX1NJWkUgMTA3Mzc0MTgyNExMCisjZGVmaW5lIFBFRF9URUJJQllURV9TSVpFIDEwOTk1MTE2Mjc3NzZMTAorCisvKioKKyAqIEh1bWFuLWZyaWVuZGx5IHVuaXQgZm9yIHJlcHJlc2VudGF0aW9uIG9mIGEgbG9jYXRpb24gd2l0aGluIGRldmljZQorICovCit0eXBlZGVmIGVudW0geworCVBFRF9VTklUX1NFQ1RPUiwKKwlQRURfVU5JVF9CWVRFLAorCVBFRF9VTklUX0tJTE9CWVRFLAorCVBFRF9VTklUX01FR0FCWVRFLAorCVBFRF9VTklUX0dJR0FCWVRFLAorCVBFRF9VTklUX1RFUkFCWVRFLAorCVBFRF9VTklUX0NPTVBBQ1QsCisJUEVEX1VOSVRfQ1lMSU5ERVIsCisJUEVEX1VOSVRfQ0hTLAorCVBFRF9VTklUX1BFUkNFTlQsCisJUEVEX1VOSVRfS0lCSUJZVEUsCisJUEVEX1VOSVRfTUVCSUJZVEUsCisJUEVEX1VOSVRfR0lCSUJZVEUsCisJUEVEX1VOSVRfVEVCSUJZVEUKK30gUGVkVW5pdDsKKworI2RlZmluZSBQRURfVU5JVF9GSVJTVCBQRURfVU5JVF9TRUNUT1IKKyNkZWZpbmUgUEVEX1VOSVRfTEFTVCBQRURfVU5JVF9URUJJQllURQorCitleHRlcm4gbG9uZyBsb25nIHBlZF91bml0X2dldF9zaXplIChjb25zdCBQZWREZXZpY2UqIGRldiwgUGVkVW5pdCB1bml0KTsKK2V4dGVybiBjb25zdCBjaGFyKiBwZWRfdW5pdF9nZXRfbmFtZSAoUGVkVW5pdCB1bml0KTsKK2V4dGVybiBQZWRVbml0IHBlZF91bml0X2dldF9ieV9uYW1lIChjb25zdCBjaGFyKiB1bml0X25hbWUpOworCitleHRlcm4gdm9pZCBwZWRfdW5pdF9zZXRfZGVmYXVsdCAoUGVkVW5pdCB1bml0KTsKK2V4dGVybiBQZWRVbml0IHBlZF91bml0X2dldF9kZWZhdWx0ICgpOworCitleHRlcm4gY2hhciogcGVkX3VuaXRfZm9ybWF0X2J5dGUgKGNvbnN0IFBlZERldmljZSogZGV2LCBQZWRTZWN0b3IgYnl0ZSk7CitleHRlcm4gY2hhciogcGVkX3VuaXRfZm9ybWF0X2N1c3RvbV9ieXRlIChjb25zdCBQZWREZXZpY2UqIGRldiwgUGVkU2VjdG9yIGJ5dGUsCisJCQkJCSAgUGVkVW5pdCB1bml0KTsKKworZXh0ZXJuIGNoYXIqIHBlZF91bml0X2Zvcm1hdCAoY29uc3QgUGVkRGV2aWNlKiBkZXYsIFBlZFNlY3RvciBzZWN0b3IpOworZXh0ZXJuIGNoYXIqIHBlZF91bml0X2Zvcm1hdF9jdXN0b20gKGNvbnN0IFBlZERldmljZSogZGV2LCBQZWRTZWN0b3Igc2VjdG9yLAorCQkJCSAgICAgUGVkVW5pdCB1bml0KTsKKworZXh0ZXJuIGludCBwZWRfdW5pdF9wYXJzZSAoY29uc3QgY2hhciogc3RyLCBjb25zdCBQZWREZXZpY2UqIGRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFBlZFNlY3Rvciogc2VjdG9yLAorCQkJICAgUGVkR2VvbWV0cnkqKiByYW5nZSk7CitleHRlcm4gaW50IHBlZF91bml0X3BhcnNlX2N1c3RvbSAoY29uc3QgY2hhciogc3RyLCBjb25zdCBQZWREZXZpY2UqIGRldiwKKwkJCQkgIFBlZFVuaXQgdW5pdCwgUGVkU2VjdG9yKiBzZWN0b3IsCisJCQkJICBQZWRHZW9tZXRyeSoqIHJhbmdlKTsKKworI2VuZGlmIC8qIFBFRF9VTklUX0hfSU5DTFVERUQgKi8KKworLyoqIEB9ICovCisKKwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2luY2x1ZGUvcGFydGVkL3Z0b2MuaCBiL3BhcnRlZC0xLjguNy9pbmNsdWRlL3BhcnRlZC92dG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U3OTQ3OAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9pbmNsdWRlL3BhcnRlZC92dG9jLmgKQEAgLTAsMCArMSwyODMgQEAKKy8qCisgKiBGaWxlLi4uLi4uLi4uLi46IHMzOTAtdG9vbHMvZGFzZHZpZXcvdnRvYy5oCisgKiBBdXRob3IocykuLi4uLi46IEhvcnN0IEh1bW1lbCA8aG9yc3QuaHVtbWVsQGRlLmlibS5jb20+CisgKiBCdWdyZXBvcnRzLnRvLi46IDxMaW51eDM5MEBkZS5pYm0uY29tPgorICoKKyAqIFRoaXMgaXMgYSB1c2VyLXNwYWNlIGNvcHkgb2YgdGhlIGtlcm5lbCB2dG9jLGguIAorICogCisgKiAoQykgSUJNIENvcnBvcmF0aW9uLCBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwgMjAwMgorICoKKyAqIEhpc3Rvcnkgb2YgY2hhbmdlcyAoc3RhcnRzIE1hcmNoIDIwMDIpCisgKiAyMDAyLTAzLTEyIGluaXRpYWwKKyAqLworCisjaWZuZGVmIFZUT0NfSAorI2RlZmluZSBWVE9DX0gKKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKworI2RlZmluZSBMSU5FX0xFTkdUSCA4MAorI2RlZmluZSBWVE9DX1NUQVJUX0NDIDB4MAorI2RlZmluZSBWVE9DX1NUQVJUX0hIIDB4MQorI2RlZmluZSBGSVJTVF9VU0FCTEVfQ1lMIDEKKyNkZWZpbmUgRklSU1RfVVNBQkxFX1RSSyAyCisKKyNkZWZpbmUgREFTRF8zMzgwX1RZUEUgMTMxNDgKKyNkZWZpbmUgREFTRF8zMzkwX1RZUEUgMTMyMDAKKyNkZWZpbmUgREFTRF85MzQ1X1RZUEUgMzc3MDEKKworI2RlZmluZSBEQVNEXzMzODBfVkFMVUUgMHhiYjYwCisjZGVmaW5lIERBU0RfMzM5MF9WQUxVRSAweGU1YTIKKyNkZWZpbmUgREFTRF85MzQ1X1ZBTFVFIDB4YmM5OAorCisjZGVmaW5lIFZPTFNFUl9MRU5HVEggNgorI2RlZmluZSBCSUdfRElTS19TSVpFIDB4MTAwMDAKKworI2RlZmluZSBWVE9DX0VSUk9SICJWVE9DIGVycm9yOiIKKwordHlwZWRlZiBzdHJ1Y3QgdHRyICAgICAgICAgICAgICB0dHJfdDsKK3R5cGVkZWYgc3RydWN0IGNjaGhiICAgICAgICAgICAgY2NoaGJfdDsKK3R5cGVkZWYgc3RydWN0IGNjaGggICAgICAgICAgICAgY2NoaF90OwordHlwZWRlZiBzdHJ1Y3QgbGFiZWxkYXRlICAgICAgICBsYWJlbGRhdGVfdDsKK3R5cGVkZWYgc3RydWN0IHZvbHVtZV9sYWJlbCAgICAgdm9sdW1lX2xhYmVsX3Q7Cit0eXBlZGVmIHN0cnVjdCBleHRlbnQgICAgICAgICAgIGV4dGVudF90OwordHlwZWRlZiBzdHJ1Y3QgZGV2X2NvbnN0ICAgICAgICBkZXZfY29uc3RfdDsKK3R5cGVkZWYgc3RydWN0IGZvcm1hdDFfbGFiZWwgICAgZm9ybWF0MV9sYWJlbF90OwordHlwZWRlZiBzdHJ1Y3QgZm9ybWF0NF9sYWJlbCAgICBmb3JtYXQ0X2xhYmVsX3Q7Cit0eXBlZGVmIHN0cnVjdCBkczVleHQgICAgICAgICAgIGRzNWV4dF90OwordHlwZWRlZiBzdHJ1Y3QgZm9ybWF0NV9sYWJlbCAgICBmb3JtYXQ1X2xhYmVsX3Q7Cit0eXBlZGVmIHN0cnVjdCBkczdleHQgICAgICAgICAgIGRzN2V4dF90OwordHlwZWRlZiBzdHJ1Y3QgZm9ybWF0N19sYWJlbCAgICBmb3JtYXQ3X2xhYmVsX3Q7CisKK3N0cnVjdCBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgdHRyIHsKKyAgICAgICAgdV9pbnQxNl90IHR0OworICAgICAgICB1X2ludDhfdCAgcjsKK307CisKK3N0cnVjdCAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGNjaGhiIHsKKyAgICAgICAgdV9pbnQxNl90IGNjOworICAgICAgICB1X2ludDE2X3QgaGg7CisgICAgICAgIHVfaW50OF90IGI7Cit9OworCitzdHJ1Y3QgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGNjaGggeworICAgICAgICB1X2ludDE2X3QgY2M7CisgICAgICAgIHVfaW50MTZfdCBoaDsKK307CisKK3N0cnVjdCBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgbGFiZWxkYXRlIHsKKyAgICAgICAgdV9pbnQ4X3QgIHllYXI7CisgICAgICAgIHVfaW50MTZfdCBkYXk7Cit9OworCitzdHJ1Y3QgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHZvbHVtZV9sYWJlbCB7CisJY2hhciB2b2xrZXlbNF07ICAgICAgICAgLyogdm9sdW1lIGtleSA9IHZvbHVtZSBsYWJlbCAgICAgICAgICAgICAgICAgKi8KKwljaGFyIHZvbGxibFs0XTsJICAgICAgICAvKiB2b2x1bWUgbGFiZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCWNoYXIgdm9saWRbNl07CSAgICAgICAgLyogdm9sdW1lIGlkZW50aWZpZXIgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwl1X2ludDhfdCBzZWN1cml0eTsJLyogc2VjdXJpdHkgYnl0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwljY2hoYl90IHZ0b2M7ICAgICAgICAgICAvKiBWVE9DIGFkZHJlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCWNoYXIgcmVzMVs1XTsJICAgICAgICAvKiByZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCWNoYXIgY2lzaXplWzRdOwkgICAgICAgIC8qIENJLXNpemUgZm9yIEZCQSwuLi4gICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC4uLmJsYW5rcyBmb3IgQ0tEICAgICAgICAgICAgICAgICAgICAgICAgICovCisJY2hhciBibGtwZXJjaVs0XTsgICAgICAgLyogbm8gb2YgYmxvY2tzIHBlciBDSSAoRkJBKSwgYmxhbmtzIGZvciBDS0QgKi8KKwljaGFyIGxhYnBlcmNpWzRdOyAgICAgICAvKiBubyBvZiBsYWJlbHMgcGVyIENJIChGQkEpLCBibGFua3MgZm9yIENLRCAqLworCWNoYXIgcmVzMls0XTsJICAgICAgICAvKiByZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCWNoYXIgbHZ0b2NbMTRdOwkgICAgICAgIC8qIG93bmVyIGNvZGUgZm9yIExWVE9DICAgICAgICAgICAgICAgICAgICAgICovCisJY2hhciByZXMzWzI5XTsJICAgICAgICAvKiByZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworfTsKKworc3RydWN0IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBleHRlbnQgeworICAgICAgICB1X2ludDhfdCAgdHlwZWluZDsgICAgICAvKiBleHRlbnQgdHlwZSBpbmRpY2F0b3IgKi8KKyAgICAgICAgdV9pbnQ4X3QgIHNlcW5vOyAgICAgICAgLyogZXh0ZW50IHNlcXVlbmNlIG51bWJlciAqLworICAgICAgICBjY2hoX3QgbGxpbWl0OyAgICAgICAgICAvKiBzdGFydGluZyBwb2ludCBvZiB0aGlzIGV4dGVudCAqLworICAgICAgICBjY2hoX3QgdWxpbWl0OyAgICAgICAgICAvKiBlbmRpbmcgcG9pbnQgb2YgdGhpcyBleHRlbnQgKi8KK307CisKK3N0cnVjdCBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgZGV2X2NvbnN0IHsKKyAgICAgICAgdV9pbnQxNl90IERTNERTQ1lMOyAgICAgLyogbnVtYmVyIG9mIGxvZ2ljYWwgY3lscyAqLworICAgICAgICB1X2ludDE2X3QgRFM0RFNUUks7ICAgICAvKiBudW1iZXIgb2YgdHJhY2tzIGluIGEgbG9naWNhbCBjeWxpbmRlciAgKi8KKyAgICAgICAgdV9pbnQxNl90IERTNERFVlRLOyAgICAgLyogZGV2aWNlIHRyYWNrIGxlbmd0aCAqLworICAgICAgICB1X2ludDhfdCAgRFM0REVWSTsgICAgICAvKiBub24tbGFzdCBrZXllZCByZWNvcmQgb3ZlcmhlYWQgKi8KKyAgICAgICAgdV9pbnQ4X3QgIERTNERFVkw7ICAgICAgLyogbGFzdCBrZXllZCByZWNvcmQgb3ZlcmhlYWQgKi8KKyAgICAgICAgdV9pbnQ4X3QgIERTNERFVks7ICAgICAgLyogbm9uLWtleWVkIHJlY29yZCBvdmVyaGVhZCBkaWZmZXJlbnRpYWwgKi8KKyAgICAgICAgdV9pbnQ4X3QgIERTNERFVkZHOyAgICAgLyogZmxhZyBieXRlICovCisgICAgICAgIHVfaW50MTZfdCBEUzRERVZUTDsgICAgIC8qIGRldmljZSB0b2xlcmFuY2UgKi8KKyAgICAgICAgdV9pbnQ4X3QgIERTNERFVkRUOyAgICAgLyogbnVtYmVyIG9mIERTQ0IncyBwZXIgdHJhY2sgKi8KKyAgICAgICAgdV9pbnQ4X3QgIERTNERFVkRCOyAgICAgLyogbnVtYmVyIG9mIGRpcmVjdG9yeSBibG9ja3MgcGVyIHRyYWNrICovCit9OworCitzdHJ1Y3QgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGZvcm1hdDFfbGFiZWwgeworCWNoYXIgIERTMURTTkFNWzQ0XTsgICAgIC8qIGRhdGEgc2V0IG5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXVfaW50OF90ICBEUzFGTVRJRDsgICAgIC8qIGZvcm1hdCBpZGVudGlmaWVyICAgICAgICAgICAgICAgICAgICAgICAqLworCWNoYXIgIERTMURTU05bNl07ICAgICAgIC8qIGRhdGEgc2V0IHNlcmlhbCBudW1iZXIgICAgICAgICAgICAgICAgICAqLworCXVfaW50MTZfdCBEUzFWT0xTUTsgICAgIC8qIHZvbHVtZSBzZXF1ZW5jZSBudW1iZXIgICAgICAgICAgICAgICAgICAqLworCWxhYmVsZGF0ZV90IERTMUNSRURUOyAgIC8qIGNyZWF0aW9uIGRhdGU6IHlkZCAgICAgICAgICAgICAgICAgICAgICAqLworCWxhYmVsZGF0ZV90IERTMUVYUERUOyAgIC8qIGV4cGlyYXRpb24gZGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXVfaW50OF90ICBEUzFOT0VQVjsgICAgIC8qIG51bWJlciBvZiBleHRlbnRzIG9uIHZvbHVtZSAgICAgICAgICAgICAqLworCXVfaW50OF90ICBEUzFOT0JEQjsgICAgIC8qIG5vLiBvZiBieXRlcyB1c2VkIGluIGxhc3QgZGlyZWN0aW9uIGJsayAqLworCXVfaW50OF90ICBEUzFGTEFHMTsgICAgIC8qIGZsYWcgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCWNoYXIgIERTMVNZU0NEWzEzXTsgICAgIC8qIHN5c3RlbSBjb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCWxhYmVsZGF0ZV90IERTMVJFRkQ7ICAgIC8qIGRhdGUgbGFzdCByZWZlcmVuY2VkICAgICAgICAgICAgICAgICAgICAqLworCXVfaW50OF90ICBEUzFTTVNGRzsgICAgIC8qIHN5c3RlbSBtYW5hZ2VkIHN0b3JhZ2UgaW5kaWNhdG9ycyAgICAgICAqLworCXVfaW50OF90ICBEUzFTQ1hURjsgICAgIC8qIHNlYy4gc3BhY2UgZXh0ZW5zaW9uIGZsYWcgYnl0ZSAgICAgICAgICAqLworCXVfaW50MTZfdCBEUzFTQ1hUVjsgICAgIC8qIHNlY29uZGFyeSBzcGFjZSBleHRlbnNpb24gdmFsdWUgICAgICAgICAqLworCXVfaW50OF90ICBEUzFEU1JHMTsgICAgIC8qIGRhdGEgc2V0IG9yZ2FuaXNhdGlvbiBieXRlIDEgICAgICAgICAgICAqLworCXVfaW50OF90ICBEUzFEU1JHMjsgICAgIC8qIGRhdGEgc2V0IG9yZ2FuaXNhdGlvbiBieXRlIDIgICAgICAgICAgICAqLworICAJdV9pbnQ4X3QgIERTMVJFQ0ZNOyAgICAgLyogcmVjb3JkIGZvcm1hdCAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJdV9pbnQ4X3QgIERTMU9QVENEOyAgICAgLyogb3B0aW9uIGNvZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJdV9pbnQxNl90IERTMUJMS0w7ICAgICAgLyogYmxvY2sgbGVuZ3RoICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJdV9pbnQxNl90IERTMUxSRUNMOyAgICAgLyogcmVjb3JkIGxlbmd0aCAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJdV9pbnQ4X3QgIERTMUtFWUw7ICAgICAgLyoga2V5IGxlbmd0aCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJdV9pbnQxNl90IERTMVJLUDsgICAgICAgLyogcmVsYXRpdmUga2V5IHBvc2l0aW9uICAgICAgICAgICAgICAgICAgICovCisJdV9pbnQ4X3QgIERTMURTSU5EOyAgICAgLyogZGF0YSBzZXQgaW5kaWNhdG9ycyAgICAgICAgICAgICAgICAgICAgICovCisJdV9pbnQ4X3QgIERTMVNDQUwxOyAgICAgLyogc2Vjb25kYXJ5IGFsbG9jYXRpb24gZmxhZyBieXRlICAgICAgICAgICovCisgIAljaGFyIERTMVNDQUwzWzNdOyAgICAgICAvKiBzZWNvbmRhcnkgYWxsb2NhdGlvbiBxdWFudGl0eSAgICAgICAgICAgKi8KKwl0dHJfdCBEUzFMU1RBUjsgICAgICAgICAvKiBsYXN0IHVzZWQgdHJhY2sgYW5kIGJsb2NrIG9uIHRyYWNrICAgICAgKi8KKwl1X2ludDE2X3QgRFMxVFJCQUw7ICAgICAvKiBzcGFjZSByZW1haW5pbmcgb24gbGFzdCB1c2VkIHRyYWNrICAgICAgKi8KKwl1X2ludDE2X3QgcmVzMTsgICAgICAgICAvKiByZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwlleHRlbnRfdCBEUzFFWFQxOyAgICAgICAvKiBmaXJzdCBleHRlbnQgZGVzY3JpcHRpb24gICAgICAgICAgICAgICAgKi8KKwlleHRlbnRfdCBEUzFFWFQyOyAgICAgICAvKiBzZWNvbmQgZXh0ZW50IGRlc2NyaXB0aW9uICAgICAgICAgICAgICAgKi8KKwlleHRlbnRfdCBEUzFFWFQzOyAgICAgICAvKiB0aGlyZCBleHRlbnQgZGVzY3JpcHRpb24gICAgICAgICAgICAgICAgKi8KKwljY2hoYl90IERTMVBUUkRTOyAgICAgICAvKiBwb3NzaWJsZSBwb2ludGVyIHRvIGYyIG9yIGYzIERTQ0IgICAgICAgKi8KK307CisKK3N0cnVjdCBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgZm9ybWF0NF9sYWJlbCB7CisJY2hhciAgRFM0S0VZQ0RbNDRdOyAgICAgLyoga2V5IGNvZGUgZm9yIFZUT0MgbGFiZWxzOiA0NCB0aW1lcyAweDA0ICovCisJdV9pbnQ4X3QgIERTNElERk1UOyAgICAgLyogZm9ybWF0IGlkZW50aWZpZXIgICAgICAgICAgICAgICAgICAgICAgICovCisJY2NoaGJfdCBEUzRIUENIUjsgICAgICAgLyogaGlnaGVzdCBhZGRyZXNzIG9mIGEgZm9ybWF0IDEgRFNDQiAgICAgICovCisJdV9pbnQxNl90IERTNERTUkVDOyAgICAgLyogbnVtYmVyIG9mIGF2YWlsYWJsZSBEU0NCJ3MgICAgICAgICAgICAgICovCisJY2NoaF90IERTNEhDQ0hIOyAgICAgICAgLyogQ0NISCBvZiBuZXh0IGF2YWlsYWJsZSBhbHRlcm5hdGUgdHJhY2sgICovCisJdV9pbnQxNl90IERTNE5PQVRLOyAgICAgLyogbnVtYmVyIG9mIHJlbWFpbmluZyBhbHRlcm5hdGUgdHJhY2tzICAgICovCisJdV9pbnQ4X3QgIERTNFZUT0NJOyAgICAgLyogVlRPQyBpbmRpY2F0b3JzICAgICAgICAgICAgICAgICAgICAgICAgICovCisJdV9pbnQ4X3QgIERTNE5PRVhUOyAgICAgLyogbnVtYmVyIG9mIGV4dGVudHMgaW4gVlRPQyAgICAgICAgICAgICAgICovCisJdV9pbnQ4X3QgIERTNFNNU0ZHOyAgICAgLyogc3lzdGVtIG1hbmFnZWQgc3RvcmFnZSBpbmRpY2F0b3JzICAgICAgICovCisJdV9pbnQ4X3QgIERTNERFVkFDOyAgICAgLyogbnVtYmVyIG9mIGFsdGVybmF0ZSBjeWxpbmRlcnMuIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdWJ0cmFjdCBmcm9tIGZpcnN0IHR3byBieXRlcyBvZiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFM0REVWU1ogdG8gZ2V0IG51bWJlciBvZiB1c2FibGUKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICBjeWxpbmRlcnMuIGNhbiBiZSB6ZXJvLiB2YWxpZAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ubHkgaWYgRFM0REVWQVYgb24uICAgICAgICAgICAgICAgICAgICAqLworCWRldl9jb25zdF90IERTNERFVkNUOyAgIC8qIGRldmljZSBjb25zdGFudHMgICAgICAgICAgICAgICAgICAgICAgICAqLworCWNoYXIgRFM0QU1USU1bOF07ICAgICAgIC8qIFZTQU0gdGltZSBzdGFtcCAgICAgICAgICAgICAgICAgICAgICAgICAqLworCWNoYXIgRFM0QU1DQVRbM107ICAgICAgIC8qIFZTQU0gY2F0YWxvZyBpbmRpY2F0b3IgICAgICAgICAgICAgICAgICAqLworCWNoYXIgRFM0UjJUSU1bOF07ICAgICAgIC8qIFZTQU0gdm9sdW1lL2NhdGFsb2cgbWF0Y2ggdGltZSBzdGFtcCAgICAqLworCWNoYXIgcmVzMVs1XTsgICAgICAgICAgIC8qIHJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCWNoYXIgRFM0RjZQVFJbNV07ICAgICAgIC8qIHBvaW50ZXIgdG8gZmlyc3QgZm9ybWF0IDYgRFNDQiAgICAgICAgICAqLworCWV4dGVudF90IERTNFZUT0NFOyAgICAgIC8qIFZUT0MgZXh0ZW50IGRlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAqLworCWNoYXIgcmVzMlsxMF07ICAgICAgICAgIC8qIHJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXVfaW50OF90IERTNEVGTFZMOyAgICAgIC8qIGV4dGVuZGVkIGZyZWUtc3BhY2UgbWFuYWdlbWVudCBsZXZlbCAgICAqLworCWNjaGhiX3QgRFM0RUZQVFI7ICAgICAgIC8qIHBvaW50ZXIgdG8gZXh0ZW5kZWQgZnJlZS1zcGFjZSBpbmZvICAgICAqLworCWNoYXIgcmVzM1s5XTsgICAgICAgICAgIC8qIHJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworfTsKKworc3RydWN0IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBkczVleHQgeworCXVfaW50MTZfdCB0OyAgICAgICAgICAgIC8qIFJUQSBvZiB0aGUgZmlyc3QgdHJhY2sgb2YgZnJlZSBleHRlbnQgICAqLworCXVfaW50MTZfdCBmYzsgICAgICAgICAgIC8qIG51bWJlciBvZiB3aG9sZSBjeWxpbmRlcnMgaW4gZnJlZSBleHQuICAqLworCXVfaW50OF90ICBmdDsgICAgICAgICAgIC8qIG51bWJlciBvZiByZW1haW5pbmcgZnJlZSB0cmFja3MgICAgICAgICAqLworfTsKKworc3RydWN0IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBmb3JtYXQ1X2xhYmVsIHsKKwljaGFyIERTNUtFWUlEWzRdOyAgICAgICAvKiBrZXkgaWRlbnRpZmllciAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwlkczVleHRfdCBEUzVBVkVYVDsgICAgICAvKiBmaXJzdCBhdmFpbGFibGUgKGZyZWUtc3BhY2UpIGV4dGVudC4gICAgKi8KKwlkczVleHRfdCBEUzVFWFRBVls3XTsgICAvKiBzZXZlbiBhdmFpbGFibGUgZXh0ZW50cyAgICAgICAgICAgICAgICAgKi8KKwl1X2ludDhfdCBEUzVGTVRJRDsgICAgICAvKiBmb3JtYXQgaWRlbnRpZmllciAgICAgICAgICAgICAgICAgICAgICAgKi8KKwlkczVleHRfdCBEUzVNQVZFVFsxOF07ICAvKiBlaWdodGVlbiBhdmFpbGFibGUgZXh0ZW50cyAgICAgICAgICAgICAgKi8KKwljY2hoYl90IERTNVBUUkRTOyAgICAgICAvKiBwb2ludGVyIHRvIG5leHQgZm9ybWF0NSBEU0NCICAgICAgICAgICAgKi8KK307CisKK3N0cnVjdCBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgZHM3ZXh0IHsKKwl1X2ludDMyX3QgYTsgICAgICAgICAgICAvKiBzdGFydGluZyBSVEEgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgKi8KKwl1X2ludDMyX3QgYjsgICAgICAgICAgICAvKiBlbmRpbmcgUlRBIHZhbHVlICsgMSAgICAgICAgICAgICAgICAgICAgKi8KK307CisKK3N0cnVjdCBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgZm9ybWF0N19sYWJlbCB7CisJY2hhciBEUzdLRVlJRFs0XTsgICAgICAgLyoga2V5IGlkZW50aWZpZXIgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJZHM3ZXh0X3QgRFM3RVhUTlRbNV07ICAgLyogc3BhY2UgZm9yIDUgZXh0ZW50IGRlc2NyaXB0aW9ucyAgICAgICAgICovCisJdV9pbnQ4X3QgRFM3Rk1USUQ7ICAgICAgLyogZm9ybWF0IGlkZW50aWZpZXIgICAgICAgICAgICAgICAgICAgICAgICovCisJZHM3ZXh0X3QgRFM3QURFWFRbMTFdOyAgLyogc3BhY2UgZm9yIDExIGV4dGVudCBkZXNjcmlwdGlvbnMgICAgICAgICovCisJY2hhciByZXMxWzJdOyAgICAgICAgICAgLyogcmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJY2NoaGJfdCBEUzdQVFJEUzsgICAgICAgLyogcG9pbnRlciB0byBuZXh0IEZNVDcgRFNDQiAgICAgICAgICAgICAgICovCit9OworCitjaGFyICogdnRvY19lYmNkaWNfZW5jIChjaGFyIHNvdXJjZVtMSU5FX0xFTkdUSF0sIGNoYXIgdGFyZ2V0W0xJTkVfTEVOR1RIXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBsKTsKK2NoYXIgKiB2dG9jX2ViY2RpY19kZWMgKGNoYXIgc291cmNlW0xJTkVfTEVOR1RIXSwgY2hhciB0YXJnZXRbTElORV9MRU5HVEhdLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IGwpOwordm9pZCB2dG9jX3NldF9leHRlbnQgKGV4dGVudF90ICogZXh0LCB1X2ludDhfdCB0eXBlaW5kLCB1X2ludDhfdCBzZXFubywKKyAgICAgICAgICAgICAgICAgICAgICBjY2hoX3QgKiBsb3dlciwgY2NoaF90ICogdXBwZXIpOwordm9pZCB2dG9jX3NldF9jY2hoIChjY2hoX3QgKiBhZGRyLCB1X2ludDE2X3QgY2MsIHVfaW50MTZfdCBoaCk7Cit2b2lkIHZ0b2Nfc2V0X2NjaGhiIChjY2hoYl90ICogYWRkciwgdV9pbnQxNl90IGNjLCB1X2ludDE2X3QgaGgsIHVfaW50OF90IGIpOwordm9pZCB2dG9jX3NldF9kYXRlIChsYWJlbGRhdGVfdCAqIGQsIHVfaW50OF90IHllYXIsIHVfaW50MTZfdCBkYXkpOworCit2b2lkIHZ0b2Nfdm9sdW1lX2xhYmVsX2luaXQgKHZvbHVtZV9sYWJlbF90ICp2bGFiZWwpOworCitpbnQgdnRvY19yZWFkX3ZvbHVtZV9sYWJlbCAoaW50IGZkLCB1bnNpZ25lZCBsb25nIHZsYWJlbF9zdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2x1bWVfbGFiZWxfdCAqIHZsYWJlbCk7CisKK2ludCB2dG9jX3dyaXRlX3ZvbHVtZV9sYWJlbCAoaW50IGZkLCB1bnNpZ25lZCBsb25nIHZsYWJlbF9zdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9sdW1lX2xhYmVsX3QgKnZsYWJlbCk7CisKK3ZvaWQgdnRvY192b2x1bWVfbGFiZWxfc2V0X3ZvbHNlciAodm9sdW1lX2xhYmVsX3QgKnZsYWJlbCwgY2hhciAqdm9sc2VyKTsKKworY2hhciAqdnRvY192b2x1bWVfbGFiZWxfZ2V0X3ZvbHNlciAodm9sdW1lX2xhYmVsX3QgKnZsYWJlbCwgY2hhciAqdm9sc2VyKTsKKwordm9pZCB2dG9jX3ZvbHVtZV9sYWJlbF9zZXRfa2V5ICh2b2x1bWVfbGFiZWxfdCAqdmxhYmVsLCBjaGFyICprZXkpOyAgICAgCisKK3ZvaWQgdnRvY192b2x1bWVfbGFiZWxfc2V0X2xhYmVsICh2b2x1bWVfbGFiZWxfdCAqdmxhYmVsLCBjaGFyICpsYmwpOworCitjaGFyICp2dG9jX3ZvbHVtZV9sYWJlbF9nZXRfbGFiZWwgKHZvbHVtZV9sYWJlbF90ICp2bGFiZWwsIGNoYXIgKmxibCk7CisKK3ZvaWQgdnRvY19yZWFkX2xhYmVsIChpbnQgZmQsIHVuc2lnbmVkIGxvbmcgcG9zaXRpb24sIGZvcm1hdDFfbGFiZWxfdCAqZjEsCisgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0NF9sYWJlbF90ICpmNCwgZm9ybWF0NV9sYWJlbF90ICpmNSwKKyAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ3X2xhYmVsX3QgKmY3KTsKKwordm9pZCB2dG9jX3dyaXRlX2xhYmVsIChpbnQgZmQsIHVuc2lnbmVkIGxvbmcgcG9zaXRpb24sIGZvcm1hdDFfbGFiZWxfdCAqZjEsCisgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDRfbGFiZWxfdCAqZjQsIGZvcm1hdDVfbGFiZWxfdCAqZjUsCisgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDdfbGFiZWxfdCAqZjcpOworCit2b2lkIHZ0b2NfaW5pdF9mb3JtYXQxX2xhYmVsIChjaGFyICp2b2xpZCwgdW5zaWduZWQgaW50IGJsa3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlbnRfdCAqcGFydF9leHRlbnQsIGZvcm1hdDFfbGFiZWxfdCAqZjEpOworCit2b2lkIHZ0b2NfaW5pdF9mb3JtYXQ0X2xhYmVsIChmb3JtYXQ0X2xhYmVsX3QgKmY0bGJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHVzYWJsZV9wYXJ0aXRpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGN5bGluZGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB0cmFja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYmxvY2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJsa3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludDE2X3QgZGV2X3R5cGUpOworCit2b2lkIHZ0b2NfdXBkYXRlX2Zvcm1hdDRfbGFiZWwgKGZvcm1hdDRfbGFiZWxfdCAqZjQsIGNjaGhiX3QgKmhpZ2hlc3RfZjEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50MTZfdCB1bnVzZWRfdXBkYXRlKTsKKwordm9pZCB2dG9jX2luaXRfZm9ybWF0NV9sYWJlbCAoZm9ybWF0NV9sYWJlbF90ICpmNSk7CisKK3ZvaWQgdnRvY191cGRhdGVfZm9ybWF0NV9sYWJlbF9hZGQgKGZvcm1hdDVfbGFiZWxfdCAqZjUsIGludCB2ZXJib3NlLCBpbnQgY3lsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRyaywgdV9pbnQxNl90IGEsIHVfaW50MTZfdCBiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQ4X3QgYyk7CisgCit2b2lkIHZ0b2NfdXBkYXRlX2Zvcm1hdDVfbGFiZWxfZGVsIChmb3JtYXQ1X2xhYmVsX3QgKmY1LCBpbnQgdmVyYm9zZSwgaW50IGN5bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0cmssIHVfaW50MTZfdCBhLCB1X2ludDE2X3QgYiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludDhfdCBjKTsKKwordm9pZCB2dG9jX2luaXRfZm9ybWF0N19sYWJlbCAoZm9ybWF0N19sYWJlbF90ICpmNyk7CisKK3ZvaWQgdnRvY191cGRhdGVfZm9ybWF0N19sYWJlbF9hZGQgKGZvcm1hdDdfbGFiZWxfdCAqZjcsIGludCB2ZXJib3NlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQzMl90IGEsIHVfaW50MzJfdCBiKTsKKwordm9pZCB2dG9jX3VwZGF0ZV9mb3JtYXQ3X2xhYmVsX2RlbCAoZm9ybWF0N19sYWJlbF90ICpmNywgaW50IHZlcmJvc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludDMyX3QgYSwgdV9pbnQzMl90IGIpOworCit2b2lkIHZ0b2Nfc2V0X2ZyZWVzcGFjZShmb3JtYXQ0X2xhYmVsX3QgKmY0LCBmb3JtYXQ1X2xhYmVsX3QgKmY1LAorICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0N19sYWJlbF90ICpmNywgY2hhciBjaCwgaW50IHZlcmJvc2UsCisgICAgICAgICAgICAgICAgICAgICAgICB1X2ludDMyX3Qgc3RhcnQsIHVfaW50MzJfdCBzdG9wLCBpbnQgY3lsLCBpbnQgdHJrKTsKKworI2VuZGlmIC8qIFZUT0NfSCAqLwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYi9NYWtlZmlsZS5hbSBiL3BhcnRlZC0xLjguNy9saWIvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjYzNWY3MAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWIvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSBAQAoraW5jbHVkZSBnbnVsaWIubWsKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWIvTWFrZWZpbGUuaW4gYi9wYXJ0ZWQtMS44LjcvbGliL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNmQyYTkKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGliL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMTA3MSBAQAorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xMCBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACisKKyMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKyMgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKyMgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKyMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKyMKKyMgR2VuZXJhdGVkIGJ5IGdudWxpYi10b29sLgorIyBSZXByb2R1Y2UgYnk6IGdudWxpYi10b29sIC0taW1wb3J0IC0tZGlyPS4gLS1sb2NhbC1kaXI9Z2wgLS1saWI9bGlicGFydGVkIC0tc291cmNlLWJhc2U9bGliIC0tbTQtYmFzZT1tNCAtLWRvYy1iYXNlPWRvYyAtLWF1eC1kaXI9YnVpbGQtYXV4IC0tYXZvaWQ9bG9jayAtLWF2b2lkPXNpemVfbWF4IC0tYXZvaWQ9eHNpemUgLS1hdm9pZD1jYW5vbmljYWxpemUtbGdwbCAtLWxpYnRvb2wgLS1tYWNyby1wcmVmaXg9Z2wgYWxsb2NhIGFubm91bmNlLWdlbiBhc3NlcnQgYXRleGl0IGNhbGxvYyBjbG9zZW91dCBjb25maWctaCBjb25maWdtYWtlIGZkbCBmcmVlIGdldHRleHQgZ251cGxvYWQgaW50dHlwZXMgbGliLWlnbm9yZSBsb25nLW9wdGlvbnMgbWFsbG9jIG1lbWNociBtZW1jbXAgbWVtY3B5IG1lbW1vdmUgbWVtc2V0IHJlYWxsb2MgcmVuYW1lIHJwbWF0Y2ggc2FmZS1yZWFkIHN0ZGJvb2wgc3RyY3NwbiBzdHJ0b2Qgc3RydG9sIHV0aW1lIHZlcnNpb24tZXRjLWZzZgorCisKKworVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK0RJU1RfQ09NTU9OID0gJChub2luc3RfSEVBREVSUykgJChzcmNkaXIpL01ha2VmaWxlLmFtIFwKKwkkKHNyY2RpcikvTWFrZWZpbGUuaW4gJChzcmNkaXIpL2NvbmZpZy5oLmluIFwKKwkkKHNyY2RpcikvZ251bGliLm1rIGFsbG9jYS5jCitzdWJkaXIgPSBsaWIKK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200L2Fic29sdXRlLWhlYWRlci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9hbGxvY2EubTQgJCh0b3Bfc3JjZGlyKS9tNC9hc3NlcnQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvYXRleGl0Lm00ICQodG9wX3NyY2RpcikvbTQvY2FsbG9jLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2Nsb3NlLXN0cmVhbS5tNCAkKHRvcF9zcmNkaXIpL200L2Nsb3Nlb3V0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NvZGVzZXQubTQgJCh0b3Bfc3JjZGlyKS9tNC9jb25maWctaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9kaXJuYW1lLm00ICQodG9wX3NyY2RpcikvbTQvZG9zLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2RvdWJsZS1zbGFzaC1yb290Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2Vycm9yLm00ICQodG9wX3NyY2RpcikvbTQvZXhpdGZhaWwubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZXh0ZW5zaW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2ZwZW5kaW5nLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ZyZWUubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXRvcHQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCAkKHRvcF9zcmNkaXIpL200L2dsaWJjMjEubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZ251bGliLWNvbW1vbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9nbnVsaWItY29tcC5tNCAkKHRvcF9zcmNkaXIpL200L2ljb252Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2lubGluZS5tNCAkKHRvcF9zcmNkaXIpL200L2ludHR5cGVzLXByaS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pbnR0eXBlcy5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1pZ25vcmUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sb2NhbGNoYXJzZXQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbG9uZy1vcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbG9uZ2xvbmcubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWJydG93Yy5tNCAkKHRvcF9zcmNkaXIpL200L21ic3RhdGVfdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tZW1jaHIubTQgJCh0b3Bfc3JjZGlyKS9tNC9tZW1jbXAubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWVtY3B5Lm00ICQodG9wX3NyY2RpcikvbTQvbWVtbW92ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tZW1zZXQubTQgJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcG8ubTQgJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9xdW90ZWFyZy5tNCAkKHRvcF9zcmNkaXIpL200L3JlZ2V4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3JlbmFtZS5tNCAkKHRvcF9zcmNkaXIpL200L3JwbWF0Y2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc2FmZS1yZWFkLm00ICQodG9wX3NyY2RpcikvbTQvc2FmZS13cml0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zc2l6ZV90Lm00ICQodG9wX3NyY2RpcikvbTQvc3RkYXJnLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0ZGJvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGRpbnQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RkbGliX2gubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHJjc3BuLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0cmluZ19oLm00ICQodG9wX3NyY2RpcikvbTQvc3RybmR1cC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdHJubGVuLm00ICQodG9wX3NyY2RpcikvbTQvc3RydG9kLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0cnRvbC5tNCAkKHRvcF9zcmNkaXIpL200L3VuaXN0ZF9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3V0aW1idWYubTQgJCh0b3Bfc3JjZGlyKS9tNC91dGltZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC91dGltZXMtbnVsbC5tNCAkKHRvcF9zcmNkaXIpL200L3djaGFyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3djdHlwZS5tNCAkKHRvcF9zcmNkaXIpL200L3dpbnRfdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC94YWxsb2MubTQgJCh0b3Bfc3JjZGlyKS9tNC94c3RybmR1cC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSBjb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK0xJQlJBUklFUyA9ICQobm9pbnN0X0xJQlJBUklFUykKK0xUTElCUkFSSUVTID0gJChub2luc3RfTFRMSUJSQVJJRVMpCithbV9fREVQRU5ERU5DSUVTXzEgPQorYW1fbGlicGFydGVkX2xhX09CSkVDVFMgPSBmdWxsLXdyaXRlLmxvIGxvY2FsY2hhcnNldC5sbyB2ZXJzaW9uLWV0Yy5sbyBcCisJdmVyc2lvbi1ldGMtZnNmLmxvIHhhbGxvYy1kaWUubG8geHN0cm5kdXAubG8KK2xpYnBhcnRlZF9sYV9PQkpFQ1RTID0gJChhbV9saWJwYXJ0ZWRfbGFfT0JKRUNUUykKK2xpYnBhcnRlZF9sYV9MSU5LID0gJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAorCSQobGlicGFydGVkX2xhX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKK0RFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNACitkZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvZGVwY29tcAorYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKK0NPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAorCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0xUQ09NUElMRSA9ICQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCisJLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpIFwKKwkkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitDQ0xEID0gJChDQykKK0xJTksgPSAkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorCS0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpIFwKKwkkKExERkxBR1MpIC1vICRACitTT1VSQ0VTID0gJChsaWJwYXJ0ZWRfbGFfU09VUkNFUykgJChFWFRSQV9saWJwYXJ0ZWRfbGFfU09VUkNFUykKK0RJU1RfU09VUkNFUyA9ICQobGlicGFydGVkX2xhX1NPVVJDRVMpICQoRVhUUkFfbGlicGFydGVkX2xhX1NPVVJDRVMpCitIRUFERVJTID0gJChub2luc3RfSEVBREVSUykKK0VUQUdTID0gZXRhZ3MKK0NUQUdTID0gY3RhZ3MKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitBQlNPTFVURV9JTlRUWVBFU19IID0gQEFCU09MVVRFX0lOVFRZUEVTX0hACitBQlNPTFVURV9TVERJTlRfSCA9IEBBQlNPTFVURV9TVERJTlRfSEAKK0FCU09MVVRFX1NURExJQl9IID0gQEFCU09MVVRFX1NURExJQl9IQAorQUJTT0xVVEVfU1RSSU5HX0ggPSBAQUJTT0xVVEVfU1RSSU5HX0hACitBQlNPTFVURV9VTklTVERfSCA9IEBBQlNPTFVURV9VTklTVERfSEAKK0FCU09MVVRFX1dDSEFSX0ggPSBAQUJTT0xVVEVfV0NIQVJfSEAKK0FCU09MVVRFX1dDVFlQRV9IID0gQEFCU09MVVRFX1dDVFlQRV9IQAorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQUxMT0NBID0gQEFMTE9DQUAKK0FMTE9DQV9IID0gQEFMTE9DQV9IQAorQU1UQVIgPSBAQU1UQVJACitBUiA9IEBBUkAKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBV0sgPSBAQVdLQAorQklUU0laRU9GX1BUUkRJRkZfVCA9IEBCSVRTSVpFT0ZfUFRSRElGRl9UQAorQklUU0laRU9GX1NJR19BVE9NSUNfVCA9IEBCSVRTSVpFT0ZfU0lHX0FUT01JQ19UQAorQklUU0laRU9GX1NJWkVfVCA9IEBCSVRTSVpFT0ZfU0laRV9UQAorQklUU0laRU9GX1dDSEFSX1QgPSBAQklUU0laRU9GX1dDSEFSX1RACitCSVRTSVpFT0ZfV0lOVF9UID0gQEJJVFNJWkVPRl9XSU5UX1RACitCVUlMRElORk8gPSBAQlVJTERJTkZPQAorQ0MgPSBAQ0NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NIRUNLX0NGTEFHUyA9IEBDSEVDS19DRkxBR1NACitDSEVDS19MSUJTID0gQENIRUNLX0xJQlNACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitETF9MSUJTID0gQERMX0xJQlNACitETV9MSUJTID0gQERNX0xJQlNACitFQ0hPID0gQEVDSE9ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VYRUVYVCA9IEBFWEVFWFRACitGNzcgPSBARjc3QAorRkZMQUdTID0gQEZGTEFHU0AKK0dFVE9QVF9IID0gQEdFVE9QVF9IQAorR0xJQkMyMSA9IEBHTElCQzIxQAorR01TR0ZNVCA9IEBHTVNHRk1UQAorR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACitHTlVMSUJfQ0hPV04gPSBAR05VTElCX0NIT1dOQAorR05VTElCX0RVUDIgPSBAR05VTElCX0RVUDJACitHTlVMSUJfRkNIRElSID0gQEdOVUxJQl9GQ0hESVJACitHTlVMSUJfRlRSVU5DQVRFID0gQEdOVUxJQl9GVFJVTkNBVEVACitHTlVMSUJfR0VUQ1dEID0gQEdOVUxJQl9HRVRDV0RACitHTlVMSUJfR0VUTE9HSU5fUiA9IEBHTlVMSUJfR0VUTE9HSU5fUkAKK0dOVUxJQl9HRVRTVUJPUFQgPSBAR05VTElCX0dFVFNVQk9QVEAKK0dOVUxJQl9JTUFYQUJTID0gQEdOVUxJQl9JTUFYQUJTQAorR05VTElCX0lNQVhESVYgPSBAR05VTElCX0lNQVhESVZACitHTlVMSUJfTUJTQ0FTRUNNUCA9IEBHTlVMSUJfTUJTQ0FTRUNNUEAKK0dOVUxJQl9NQlNDQVNFU1RSID0gQEdOVUxJQl9NQlNDQVNFU1RSQAorR05VTElCX01CU0NIUiA9IEBHTlVMSUJfTUJTQ0hSQAorR05VTElCX01CU0NTUE4gPSBAR05VTElCX01CU0NTUE5ACitHTlVMSUJfTUJTTEVOID0gQEdOVUxJQl9NQlNMRU5ACitHTlVMSUJfTUJTTkNBU0VDTVAgPSBAR05VTElCX01CU05DQVNFQ01QQAorR05VTElCX01CU1BCUksgPSBAR05VTElCX01CU1BCUktACitHTlVMSUJfTUJTUENBU0VDTVAgPSBAR05VTElCX01CU1BDQVNFQ01QQAorR05VTElCX01CU1JDSFIgPSBAR05VTElCX01CU1JDSFJACitHTlVMSUJfTUJTU0VQID0gQEdOVUxJQl9NQlNTRVBACitHTlVMSUJfTUJTU1BOID0gQEdOVUxJQl9NQlNTUE5ACitHTlVMSUJfTUJTU1RSID0gQEdOVUxJQl9NQlNTVFJACitHTlVMSUJfTUJTVE9LX1IgPSBAR05VTElCX01CU1RPS19SQAorR05VTElCX01FTU1FTSA9IEBHTlVMSUJfTUVNTUVNQAorR05VTElCX01FTVBDUFkgPSBAR05VTElCX01FTVBDUFlACitHTlVMSUJfTUVNUkNIUiA9IEBHTlVMSUJfTUVNUkNIUkAKK0dOVUxJQl9NS0RURU1QID0gQEdOVUxJQl9NS0RURU1QQAorR05VTElCX01LU1RFTVAgPSBAR05VTElCX01LU1RFTVBACitHTlVMSUJfUkVBRExJTksgPSBAR05VTElCX1JFQURMSU5LQAorR05VTElCX1NMRUVQID0gQEdOVUxJQl9TTEVFUEAKK0dOVUxJQl9TVFBDUFkgPSBAR05VTElCX1NUUENQWUAKK0dOVUxJQl9TVFBOQ1BZID0gQEdOVUxJQl9TVFBOQ1BZQAorR05VTElCX1NUUkNBU0VTVFIgPSBAR05VTElCX1NUUkNBU0VTVFJACitHTlVMSUJfU1RSQ0hSTlVMID0gQEdOVUxJQl9TVFJDSFJOVUxACitHTlVMSUJfU1RSRFVQID0gQEdOVUxJQl9TVFJEVVBACitHTlVMSUJfU1RSTkRVUCA9IEBHTlVMSUJfU1RSTkRVUEAKK0dOVUxJQl9TVFJOTEVOID0gQEdOVUxJQl9TVFJOTEVOQAorR05VTElCX1NUUlBCUksgPSBAR05VTElCX1NUUlBCUktACitHTlVMSUJfU1RSU0VQID0gQEdOVUxJQl9TVFJTRVBACitHTlVMSUJfU1RSVE9JTUFYID0gQEdOVUxJQl9TVFJUT0lNQVhACitHTlVMSUJfU1RSVE9LX1IgPSBAR05VTElCX1NUUlRPS19SQAorR05VTElCX1NUUlRPVU1BWCA9IEBHTlVMSUJfU1RSVE9VTUFYQAorR1JFUCA9IEBHUkVQQAorSEFWRV9ERUNMX0dFVExPR0lOX1IgPSBASEFWRV9ERUNMX0dFVExPR0lOX1JACitIQVZFX0RFQ0xfSU1BWEFCUyA9IEBIQVZFX0RFQ0xfSU1BWEFCU0AKK0hBVkVfREVDTF9JTUFYRElWID0gQEhBVkVfREVDTF9JTUFYRElWQAorSEFWRV9ERUNMX01FTU1FTSA9IEBIQVZFX0RFQ0xfTUVNTUVNQAorSEFWRV9ERUNMX01FTVJDSFIgPSBASEFWRV9ERUNMX01FTVJDSFJACitIQVZFX0RFQ0xfU1RSRFVQID0gQEhBVkVfREVDTF9TVFJEVVBACitIQVZFX0RFQ0xfU1RSTkNBU0VDTVAgPSBASEFWRV9ERUNMX1NUUk5DQVNFQ01QQAorSEFWRV9ERUNMX1NUUk5EVVAgPSBASEFWRV9ERUNMX1NUUk5EVVBACitIQVZFX0RFQ0xfU1RSTkxFTiA9IEBIQVZFX0RFQ0xfU1RSTkxFTkAKK0hBVkVfREVDTF9TVFJUT0lNQVggPSBASEFWRV9ERUNMX1NUUlRPSU1BWEAKK0hBVkVfREVDTF9TVFJUT0tfUiA9IEBIQVZFX0RFQ0xfU1RSVE9LX1JACitIQVZFX0RFQ0xfU1RSVE9VTUFYID0gQEhBVkVfREVDTF9TVFJUT1VNQVhACitIQVZFX0RVUDIgPSBASEFWRV9EVVAyQAorSEFWRV9GVFJVTkNBVEUgPSBASEFWRV9GVFJVTkNBVEVACitIQVZFX0dFVFNVQk9QVCA9IEBIQVZFX0dFVFNVQk9QVEAKK0hBVkVfSU5UVFlQRVNfSCA9IEBIQVZFX0lOVFRZUEVTX0hACitIQVZFX0lTV0NOVFJMID0gQEhBVkVfSVNXQ05UUkxACitIQVZFX0xPTkdfTE9OR19JTlQgPSBASEFWRV9MT05HX0xPTkdfSU5UQAorSEFWRV9NRU1QQ1BZID0gQEhBVkVfTUVNUENQWUAKK0hBVkVfTUtEVEVNUCA9IEBIQVZFX01LRFRFTVBACitIQVZFX1JFQURMSU5LID0gQEhBVkVfUkVBRExJTktACitIQVZFX1NJR05FRF9TSUdfQVRPTUlDX1QgPSBASEFWRV9TSUdORURfU0lHX0FUT01JQ19UQAorSEFWRV9TSUdORURfV0NIQVJfVCA9IEBIQVZFX1NJR05FRF9XQ0hBUl9UQAorSEFWRV9TSUdORURfV0lOVF9UID0gQEhBVkVfU0lHTkVEX1dJTlRfVEAKK0hBVkVfU0xFRVAgPSBASEFWRV9TTEVFUEAKK0hBVkVfU1RESU5UX0ggPSBASEFWRV9TVERJTlRfSEAKK0hBVkVfU1RQQ1BZID0gQEhBVkVfU1RQQ1BZQAorSEFWRV9TVFBOQ1BZID0gQEhBVkVfU1RQTkNQWUAKK0hBVkVfU1RSQ0FTRUNNUCA9IEBIQVZFX1NUUkNBU0VDTVBACitIQVZFX1NUUkNBU0VTVFIgPSBASEFWRV9TVFJDQVNFU1RSQAorSEFWRV9TVFJDSFJOVUwgPSBASEFWRV9TVFJDSFJOVUxACitIQVZFX1NUUk5EVVAgPSBASEFWRV9TVFJORFVQQAorSEFWRV9TVFJQQlJLID0gQEhBVkVfU1RSUEJSS0AKK0hBVkVfU1RSU0VQID0gQEhBVkVfU1RSU0VQQAorSEFWRV9TWVNfQklUWVBFU19IID0gQEhBVkVfU1lTX0JJVFlQRVNfSEAKK0hBVkVfU1lTX0lOVFRZUEVTX0ggPSBASEFWRV9TWVNfSU5UVFlQRVNfSEAKK0hBVkVfU1lTX1RZUEVTX0ggPSBASEFWRV9TWVNfVFlQRVNfSEAKK0hBVkVfVU5JU1REX0ggPSBASEFWRV9VTklTVERfSEAKK0hBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVCA9IEBIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlRACitIQVZFX1dDVFlQRV9IID0gQEhBVkVfV0NUWVBFX0hACitIQVZFX1dJTlRfVCA9IEBIQVZFX1dJTlRfVEAKK0hBVkVfX0JPT0wgPSBASEFWRV9fQk9PTEAKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSU5UTElOQ1MgPSBASU5UTElOQ1NACitJTlRMTElCUyA9IEBJTlRMTElCU0AKK0lOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKK0lOVFRZUEVTX0ggPSBASU5UVFlQRVNfSEAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQklDT05WID0gQExJQklDT05WQAorTElCSU5UTCA9IEBMSUJJTlRMQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQCAkKFBPV19MSUIpCitMSUJUT09MID0gQExJQlRPT0xACitMTl9TID0gQExOX1NACitMVEFMTE9DQSA9IEBMVEFMTE9DQUAKK0xUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKK0xUTElCSU5UTCA9IEBMVExJQklOVExACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTFRfQUdFID0gQExUX0FHRUAKK0xUX0NVUlJFTlQgPSBATFRfQ1VSUkVOVEAKK0xUX1JFTEVBU0UgPSBATFRfUkVMRUFTRUAKK0xUX1JFVklTSU9OID0gQExUX1JFVklTSU9OQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitNS0RJUl9QID0gQE1LRElSX1BACitNU0dGTVQgPSBATVNHRk1UQAorTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAorTVNHTUVSR0UgPSBATVNHTUVSR0VACitPQkpFWFQgPSBAT0JKRVhUQAorT1MgPSBAT1NACitPU19MSUJTID0gQE9TX0xJQlNACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFSVEVETERGTEFHUyA9IEBQQVJURURMREZMQUdTQAorUEFSVEVEX0xJQlMgPSBAUEFSVEVEX0xJQlNACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKK1BPU1VCID0gQFBPU1VCQAorUE9XX0xJQiA9IEBQT1dfTElCQAorUFJJUFRSX1BSRUZJWCA9IEBQUklQVFJfUFJFRklYQAorUFJJX01BQ1JPU19CUk9LRU4gPSBAUFJJX01BQ1JPU19CUk9LRU5ACitQVFJESUZGX1RfU1VGRklYID0gQFBUUkRJRkZfVF9TVUZGSVhACitSQU5MSUIgPSBAUkFOTElCQAorUkVJU0VSX0xJQlMgPSBAUkVJU0VSX0xJQlNACitSRVBMQUNFX0NIT1dOID0gQFJFUExBQ0VfQ0hPV05ACitSRVBMQUNFX0ZDSERJUiA9IEBSRVBMQUNFX0ZDSERJUkAKK1JFUExBQ0VfR0VUQ1dEID0gQFJFUExBQ0VfR0VUQ1dEQAorUkVQTEFDRV9NS1NURU1QID0gQFJFUExBQ0VfTUtTVEVNUEAKK1NFRCA9IEBTRURACitTRUxJTlVYX0xJQlMgPSBAU0VMSU5VWF9MSUJTQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NJR19BVE9NSUNfVF9TVUZGSVggPSBAU0lHX0FUT01JQ19UX1NVRkZJWEAKK1NJWkVfVF9TVUZGSVggPSBAU0laRV9UX1NVRkZJWEAKK1NUREJPT0xfSCA9IEBTVERCT09MX0hACitTVERJTlRfSCA9IEBTVERJTlRfSEAKK1NUUklQID0gQFNUUklQQAorVVNFX05MUyA9IEBVU0VfTkxTQAorVVVJRF9MSUJTID0gQFVVSURfTElCU0AKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1dDSEFSX0ggPSBAV0NIQVJfSEAKK1dDSEFSX1RfU1VGRklYID0gQFdDSEFSX1RfU1VGRklYQAorV0NUWVBFX0ggPSBAV0NUWVBFX0hACitXSU5UX1RfU1VGRklYID0gQFdJTlRfVF9TVUZGSVhACitYR0VUVEVYVCA9IEBYR0VUVEVYVEAKK1hHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9GNzcgPSBAYWNfY3RfRjc3QAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitidWlsZGRpciA9IEBidWlsZGRpckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZG9jZGlyID0gQGRvY2RpckAKK2R2aWRpciA9IEBkdmlkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2dsX0xJQk9CSlMgPSBAZ2xfTElCT0JKU0AKK2dsX0xUTElCT0JKUyA9IEBnbF9MVExJQk9CSlNACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorQVVUT01BS0VfT1BUSU9OUyA9IDEuNSBnbml0cworbm9pbnN0X0hFQURFUlMgPSAKK25vaW5zdF9MSUJSQVJJRVMgPSAKK25vaW5zdF9MVExJQlJBUklFUyA9IGxpYnBhcnRlZC5sYQorRVhUUkFfRElTVCA9IGFsbG9jYS5jIGFsbG9jYV8uaCBhdGV4aXQuYyBjYWxsb2MuYyBjbG9zZS1zdHJlYW0uYyBcCisJY2xvc2Utc3RyZWFtLmggY2xvc2VvdXQuYyBjbG9zZW91dC5oIGJhc2VuYW1lLmMgZGlybmFtZS5jIFwKKwlkaXJuYW1lLmggc3RyaXBzbGFzaC5jIGVycm9yLmMgZXJyb3IuaCBleGl0ZmFpbC5jIGV4aXRmYWlsLmggXAorCV9fZnBlbmRpbmcuYyBfX2ZwZW5kaW5nLmggZnJlZS5jIGdldG9wdC5jIGdldG9wdDEuYyBnZXRvcHRfLmggXAorCWdldG9wdF9pbnQuaCBpbnR0eXBlc18uaCBjb25maWcuY2hhcnNldCByZWYtYWRkLnNpbiBcCisJcmVmLWRlbC5zaW4gbG9uZy1vcHRpb25zLmMgbG9uZy1vcHRpb25zLmggbWFsbG9jLmMgbWVtY2hyLmMgXAorCW1lbWNtcC5jIG1lbWNweS5jIG1lbW1vdmUuYyBtZW1zZXQuYyBxdW90ZWFyZy5jIHF1b3RlYXJnLmggXAorCXJlYWxsb2MuYyByZWdjb21wLmMgcmVnZXguYyByZWdleC5oIHJlZ2V4X2ludGVybmFsLmMgXAorCXJlZ2V4X2ludGVybmFsLmggcmVnZXhlYy5jIHJlbmFtZS5jIHJwbWF0Y2guYyBzYWZlLXJlYWQuYyBcCisJc2FmZS1yZWFkLmggc2FmZS13cml0ZS5jIHNhZmUtd3JpdGUuaCBzdGRib29sXy5oIHN0ZGludF8uaCBcCisJc3RkbGliXy5oIHN0cmNzcG4uYyBzdHJpbmdfLmggc3RybmR1cC5jIHN0cm5sZW4uYyBzdHJ0b2QuYyBcCisJc3RydG9sLmMgdW5pc3RkXy5oIHV0aW1lLmMgd2NoYXJfLmggd2N0eXBlXy5oIHhhbGxvYy5oIFwKKwl4bWFsbG9jLmMKK0JVSUxUX1NPVVJDRVMgPSAkKEFMTE9DQV9IKSBjb25maWdtYWtlLmggJChHRVRPUFRfSCkgJChJTlRUWVBFU19IKSBcCisJJChTVERCT09MX0gpICQoU1RESU5UX0gpIHN0ZGxpYi5oIHN0cmluZy5oIHVuaXN0ZC5oICQoV0NIQVJfSCkgXAorCSQoV0NUWVBFX0gpCitTVUZGSVhFUyA9IC5zZWQgLnNpbgorTU9TVExZQ0xFQU5GSUxFUyA9IGNvcmUgKi5zdGFja2R1bXAgYWxsb2NhLmggYWxsb2NhLmgtdCBnZXRvcHQuaCBcCisJZ2V0b3B0LmgtdCBpbnR0eXBlcy5oIGludHR5cGVzLmgtdCBzdGRib29sLmggc3RkYm9vbC5oLXQgXAorCXN0ZGludC5oIHN0ZGludC5oLXQgc3RkbGliLmggc3RkbGliLmgtdCBzdHJpbmcuaCBzdHJpbmcuaC10IFwKKwl1bmlzdGQuaCB1bmlzdGQuaC10IHdjaGFyLmggd2NoYXIuaC10IHdjdHlwZS5oIHdjdHlwZS5oLXQKK01PU1RMWUNMRUFORElSUyA9IAorQ0xFQU5GSUxFUyA9IGNvbmZpZ21ha2UuaCBjb25maWdtYWtlLmgtdCBjaGFyc2V0LmFsaWFzIHJlZi1hZGQuc2VkIFwKKwlyZWYtZGVsLnNlZAorRElTVENMRUFORklMRVMgPSAKK01BSU5UQUlORVJDTEVBTkZJTEVTID0gCitBTV9DUFBGTEFHUyA9IAorCisjIFRoaXMgaXMgZm9yIHRob3NlIHByb2plY3RzIHdoaWNoIHVzZSAiZ2V0dGV4dGl6ZSAtLWludGwiIHRvIHB1dCBhIHNvdXJjZS1jb2RlCisjIGNvcHkgb2YgbGliaW50bCBpbnRvIHRoZWlyIHBhY2thZ2UuIEluIHN1Y2ggcHJvamVjdHMsIGV2ZXJ5IE1ha2VmaWxlLmFtIG5lZWRzCisjIC1JJCh0b3BfYnVpbGRkaXIpL2ludGwsIHNvIHRoYXQgPGxpYmludGwuaD4gY2FuIGJlIGZvdW5kIGluIHRoaXMgZGlyZWN0b3J5LgorIyBGb3IgdGhlIE1ha2VmaWxlLmFtcyBpbiBvdGhlciBkaXJlY3RvcmllcyBpdCBpcyB0aGUgbWFpbnRhaW5lcidzCisjIHJlc3BvbnNpYmlsaXR5OyBmb3IgdGhlIG9uZSBmcm9tIGdudWxpYiB3ZSBkbyBpdCBoZXJlLgorIyBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IHdoZW4gdGhlIHVzZXIgZGlzYWJsZXMgTkxTIChiZWNhdXNlIHRoZW4gdGhlIGludGwKKyMgZGlyZWN0b3J5IGNvbnRhaW5zIG5vIGxpYmludGwuaCBmaWxlKSBvciB3aGVuIHRoZSBwcm9qZWN0IGRvZXMgbm90IHVzZQorIyAiZ2V0dGV4dGl6ZSAtLWludGwiLgorI0FNX0NQUEZMQUdTICs9IC1JJCh0b3BfYnVpbGRkaXIpL2ludGwKK2xpYnBhcnRlZF9sYV9TT1VSQ0VTID0gZnVsbC13cml0ZS5oIGZ1bGwtd3JpdGUuYyBnZXR0ZXh0LmggXAorCWxvY2FsY2hhcnNldC5oIGxvY2FsY2hhcnNldC5jIHZlcnNpb24tZXRjLmggdmVyc2lvbi1ldGMuYyBcCisJdmVyc2lvbi1ldGMtZnNmLmMgeGFsbG9jLWRpZS5jIHhzdHJuZHVwLmggeHN0cm5kdXAuYworbGlicGFydGVkX2xhX0xJQkFERCA9ICQoZ2xfTFRMSUJPQkpTKSBATFRBTExPQ0FACitsaWJwYXJ0ZWRfbGFfREVQRU5ERU5DSUVTID0gJChnbF9MVExJQk9CSlMpIEBMVEFMTE9DQUAKK0VYVFJBX2xpYnBhcnRlZF9sYV9TT1VSQ0VTID0gYWxsb2NhLmMgYXRleGl0LmMgY2FsbG9jLmMgY2xvc2Utc3RyZWFtLmMgXAorCWNsb3Nlb3V0LmMgYmFzZW5hbWUuYyBkaXJuYW1lLmMgc3RyaXBzbGFzaC5jIGVycm9yLmMgXAorCWV4aXRmYWlsLmMgX19mcGVuZGluZy5jIGZyZWUuYyBnZXRvcHQuYyBnZXRvcHQxLmMgXAorCWxvbmctb3B0aW9ucy5jIG1hbGxvYy5jIG1lbWNoci5jIG1lbWNtcC5jIG1lbWNweS5jIG1lbW1vdmUuYyBcCisJbWVtc2V0LmMgcXVvdGVhcmcuYyByZWFsbG9jLmMgcmVnY29tcC5jIHJlZ2V4LmMgXAorCXJlZ2V4X2ludGVybmFsLmMgcmVnZXhlYy5jIHJlbmFtZS5jIHJwbWF0Y2guYyBzYWZlLXJlYWQuYyBcCisJc2FmZS13cml0ZS5jIHN0cmNzcG4uYyBzdHJuZHVwLmMgc3Rybmxlbi5jIHN0cnRvZC5jIHN0cnRvbC5jIFwKKwl1dGltZS5jIHhtYWxsb2MuYworbGlicGFydGVkX2xhX0xERkxBR1MgPSAkKEFNX0xERkxBR1MpCitMSU5LX1dBUk5JTkdfSCA9ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L2xpbmstd2FybmluZy5oCitjaGFyc2V0X2FsaWFzID0gJChERVNURElSKSQobGliZGlyKS9jaGFyc2V0LmFsaWFzCitjaGFyc2V0X3RtcCA9ICQoREVTVERJUikkKGxpYmRpcikvY2hhcnNldC50bXAKK2FsbDogJChCVUlMVF9TT1VSQ0VTKSBjb25maWcuaAorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFsbC1hbQorCisuU1VGRklYRVM6CisuU1VGRklYRVM6IC5zZWQgLnNpbiAuYyAubG8gLm8gLm9iagorJChzcmNkaXIpL01ha2VmaWxlLmluOiAgJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9nbnVsaWIubWsgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoIFwKKwkJJiYgZXhpdCAwOyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWduaXRzICBsaWIvTWFrZWZpbGUnOyBcCisJY2QgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWduaXRzICBsaWIvTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6ICAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6ICAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKK2NvbmZpZy5oOiBzdGFtcC1oMQorCUBpZiB0ZXN0ICEgLWYgJEA7IHRoZW4gXAorCSAgcm0gLWYgc3RhbXAtaDE7IFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHN0YW1wLWgxOyBcCisJZWxzZSA6OyBmaQorCitzdGFtcC1oMTogJChzcmNkaXIpL2NvbmZpZy5oLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQHJtIC1mIHN0YW1wLWgxCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyBsaWIvY29uZmlnLmgKKyQoc3JjZGlyKS9jb25maWcuaC5pbjogICQoYW1fX2NvbmZpZ3VyZV9kZXBzKSAKKwljZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT0hFQURFUikKKwlybSAtZiBzdGFtcC1oMQorCXRvdWNoICRACisKK2Rpc3RjbGVhbi1oZHI6CisJLXJtIC1mIGNvbmZpZy5oIHN0YW1wLWgxCisKK2NsZWFuLW5vaW5zdExJQlJBUklFUzoKKwktdGVzdCAteiAiJChub2luc3RfTElCUkFSSUVTKSIgfHwgcm0gLWYgJChub2luc3RfTElCUkFSSUVTKQorCitjbGVhbi1ub2luc3RMVExJQlJBUklFUzoKKwktdGVzdCAteiAiJChub2luc3RfTFRMSUJSQVJJRVMpIiB8fCBybSAtZiAkKG5vaW5zdF9MVExJQlJBUklFUykKKwlAbGlzdD0nJChub2luc3RfTFRMSUJSQVJJRVMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBkaXI9ImBlY2hvICQkcCB8IHNlZCAtZSAnc3wvW14vXSokJHx8J2AiOyBcCisJICB0ZXN0ICIkJGRpciIgIT0gIiQkcCIgfHwgZGlyPS47IFwKKwkgIGVjaG8gInJtIC1mIFwiJCR7ZGlyfS9zb19sb2NhdGlvbnNcIiI7IFwKKwkgIHJtIC1mICIkJHtkaXJ9L3NvX2xvY2F0aW9ucyI7IFwKKwlkb25lCitsaWJwYXJ0ZWQubGE6ICQobGlicGFydGVkX2xhX09CSkVDVFMpICQobGlicGFydGVkX2xhX0RFUEVOREVOQ0lFUykgCisJJChsaWJwYXJ0ZWRfbGFfTElOSykgICQobGlicGFydGVkX2xhX09CSkVDVFMpICQobGlicGFydGVkX2xhX0xJQkFERCkgJChMSUJTKQorCittb3N0bHljbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLiQoT0JKRVhUKQorCitkaXN0Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi50YWIuYworCitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAJChERVBESVIpL2FsbG9jYS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL19fZnBlbmRpbmcuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9hbGxvY2EuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9hdGV4aXQuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9iYXNlbmFtZS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2NhbGxvYy5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2Nsb3NlLXN0cmVhbS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2Nsb3Nlb3V0LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZGlybmFtZS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2Vycm9yLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZXhpdGZhaWwuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9mcmVlLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZnVsbC13cml0ZS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2dldG9wdC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2dldG9wdDEuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9sb2NhbGNoYXJzZXQuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9sb25nLW9wdGlvbnMuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9tYWxsb2MuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9tZW1jaHIuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9tZW1jbXAuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9tZW1jcHkuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9tZW1tb3ZlLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbWVtc2V0LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcXVvdGVhcmcuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9yZWFsbG9jLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcmVnY29tcC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3JlZ2V4LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcmVnZXhfaW50ZXJuYWwuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9yZWdleGVjLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcmVuYW1lLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcnBtYXRjaC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3NhZmUtcmVhZC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3NhZmUtd3JpdGUuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zdHJjc3BuLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc3RyaXBzbGFzaC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3N0cm5kdXAuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zdHJubGVuLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc3RydG9kLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc3RydG9sLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvdXRpbWUuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS92ZXJzaW9uLWV0Yy1mc2YuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS92ZXJzaW9uLWV0Yy5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3hhbGxvYy1kaWUuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS94bWFsbG9jLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikveHN0cm5kdXAuUGxvQGFtX19xdW90ZUAKKworLmMubzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyAkPAorCisuYy5vYmo6CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKK0BhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyBgJChDWUdQQVRIX1cpICckPCdgCisKKy5jLmxvOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMVENPTVBJTEUpIC1jIC1vICRAICQ8CisKK21vc3RseWNsZWFuLWxpYnRvb2w6CisJLXJtIC1mICoubG8KKworY2xlYW4tbGlidG9vbDoKKwktcm0gLXJmIC5saWJzIF9saWJzCisKK0lEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKKwkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKKwlta2lkIC1mSUQgJCR1bmlxdWUKK3RhZ3M6IFRBR1MKKworVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSBjb25maWcuaC5pbiAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXRhZ3M9OyBcCisJaGVyZT1gcHdkYDsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSBjb25maWcuaC5pbiAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKwkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKKwkgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgJCR0YWdzICQkdW5pcXVlOyBcCisJZmkKK2N0YWdzOiBDVEFHUworQ1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgY29uZmlnLmguaW4gJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwl0YWdzPTsgXAorCWhlcmU9YHB3ZGA7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgY29uZmlnLmguaW4gJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAorCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAorCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSIgXAorCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorCSAgICAgJCR0YWdzICQkdW5pcXVlCisKK0dUQUdTOgorCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCisJICAmJiBjZCAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgJCRoZXJlCisKK2Rpc3RjbGVhbi10YWdzOgorCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgXAorCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKKwkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCisJICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAorCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKKwkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKKwkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKKwkJCSAgIHNvcnQgLXVgIDs7IFwKKwllc2FjOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtcFIgJChzcmNkaXIpLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1wUiAkJGQvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICQoZGlzdGRpcikvJCRmaWxlIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAkKGRpc3RkaXIpLyQkZmlsZSBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogJChCVUlMVF9TT1VSQ0VTKQorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGNoZWNrLWFtCithbGwtYW06IE1ha2VmaWxlICQoTElCUkFSSUVTKSAkKExUTElCUkFSSUVTKSAkKEhFQURFUlMpIGNvbmZpZy5oIFwKKwkJYWxsLWxvY2FsCitpbnN0YWxsZGlyczoKK2luc3RhbGw6ICQoQlVJTFRfU09VUkNFUykKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWFtCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KK3VuaW5zdGFsbDogdW5pbnN0YWxsLWFtCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCitpbnN0YWxsLXN0cmlwOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChNT1NUTFlDTEVBTkZJTEVTKSIgfHwgcm0gLWYgJChNT1NUTFlDTEVBTkZJTEVTKQorCitjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENMRUFORklMRVMpIiB8fCBybSAtZiAkKENMRUFORklMRVMpCisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCS10ZXN0IC16ICIkKERJU1RDTEVBTkZJTEVTKSIgfHwgcm0gLWYgJChESVNUQ0xFQU5GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCisJLXRlc3QgLXogIiQoQlVJTFRfU09VUkNFUykiIHx8IHJtIC1mICQoQlVJTFRfU09VUkNFUykKKwktdGVzdCAteiAiJChNQUlOVEFJTkVSQ0xFQU5GSUxFUykiIHx8IHJtIC1mICQoTUFJTlRBSU5FUkNMRUFORklMRVMpCitjbGVhbjogY2xlYW4tYW0KKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1ub2luc3RMSUJSQVJJRVMgXAorCWNsZWFuLW5vaW5zdExUTElCUkFSSUVTIG1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1yZiAkKERFUERJUikgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi1oZHIgZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1leGVjLWFtOiBpbnN0YWxsLWV4ZWMtbG9jYWwKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1tYW46CisKK2luc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQorCitpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorCS1ybSAtcmYgJChERVBESVIpIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKKwltb3N0bHljbGVhbi1saWJ0b29sIG1vc3RseWNsZWFuLWxvY2FsCisKK3BkZjogcGRmLWFtCisKK3BkZi1hbToKKworcHM6IHBzLWFtCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06IHVuaW5zdGFsbC1sb2NhbAorCisuTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisKKy5QSE9OWTogQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBhbGwtbG9jYWwgY2hlY2sgY2hlY2stYW0gY2xlYW4gXAorCWNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1ub2luc3RMSUJSQVJJRVMgXAorCWNsZWFuLW5vaW5zdExUTElCUkFSSUVTIGN0YWdzIGRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBcCisJZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWhkciBkaXN0Y2xlYW4tbGlidG9vbCBcCisJZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gXAorCWluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIFwKKwlpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZXhlYy1sb2NhbCBcCisJaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIFwKKwlpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIFwKKwlpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBcCisJaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbCBtb3N0bHljbGVhbi1sb2NhbCBwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgXAorCXVuaW5zdGFsbCB1bmluc3RhbGwtYW0gdW5pbnN0YWxsLWxvY2FsCisKKworIyBXZSBuZWVkIHRoZSBmb2xsb3dpbmcgaW4gb3JkZXIgdG8gY3JlYXRlIDxhbGxvY2EuaD4gd2hlbiB0aGUgc3lzdGVtCisjIGRvZXNuJ3QgaGF2ZSBvbmUgdGhhdCB3b3JrcyB3aXRoIHRoZSBnaXZlbiBjb21waWxlci4KK2FsbG9jYS5oOiBhbGxvY2FfLmgKKwl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nOyBcCisJICBjYXQgJChzcmNkaXIpL2FsbG9jYV8uaDsgXAorCX0gPiAkQC10CisJbXYgLWYgJEAtdCAkQAorCisjIFJldHJpZXZlIHZhbHVlcyBvZiB0aGUgdmFyaWFibGVzIHRocm91Z2ggJ2NvbmZpZ3VyZScgZm9sbG93ZWQgYnkKKyMgJ21ha2UnLCBub3QgZGlyZWN0bHkgdGhyb3VnaCAnY29uZmlndXJlJywgc28gdGhhdCBhIHVzZXIgd2hvCisjIHNldHMgc29tZSBvZiB0aGVzZSB2YXJpYWJsZXMgY29uc2lzdGVudGx5IG9uIHRoZSAnbWFrZScgY29tbWFuZAorIyBsaW5lIGdldHMgY29ycmVjdCByZXN1bHRzLgorIworIyBPbmUgYWR2YW50YWdlIG9mIHRoaXMgYXBwcm9hY2gsIGNvbXBhcmVkIHRvIHRoZSBjbGFzc2ljYWwKKyMgYXBwcm9hY2ggb2YgYWRkaW5nIC1ETElCRElSPVwiJChsaWJkaXIpXCIgZXRjLiB0byBBTV9DUFBGTEFHUywKKyMgaXMgdGhhdCBpdCBwcm90ZWN0cyBhZ2FpbnN0IHRoZSB1c2Ugb2YgdW5kZWZpbmVkIHZhcmlhYmxlcy4KKyMgSWYsIHNheSwgJChsaWJkaXIpIGlzIG5vdCBzZXQgaW4gdGhlIE1ha2VmaWxlLCBMSUJESVIgaXMgbm90CisjIGRlZmluZWQgYnkgdGhpcyBtb2R1bGUsIGFuZCBjb2RlIHVzaW5nIExJQkRJUiBnaXZlcyBhCisjIGNvbXBpbGF0aW9uIGVycm9yLgorIworIyBBbm90aGVyIGFkdmFudGFnZSBpcyB0aGF0ICdtYWtlJyBvdXRwdXQgaXMgc2hvcnRlci4KKyMKKyMgTGlzdGVkIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSBHTlUgbWFrZWZpbGUgY29udmVudGlvbnMuCisjIFRoZSBBdXRvbWFrZS1kZWZpbmVkIHBrZyogbWFjcm9zIGFyZSBhcHBlbmRlZCwgaW4gdGhlIG9yZGVyCisjIGxpc3RlZCBpbiB0aGUgQXV0b21ha2UgMS4xMGErIGRvY3VtZW50YXRpb24uCitjb25maWdtYWtlLmg6IE1ha2VmaWxlCisJcm0gLWYgJEAtdCAkQAorCXsgZWNobyAnLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLyc7IFwKKwkgIGVjaG8gJyNkZWZpbmUgUFJFRklYICIkKHByZWZpeCkiJzsgXAorCSAgZWNobyAnI2RlZmluZSBFWEVDX1BSRUZJWCAiJChleGVjX3ByZWZpeCkiJzsgXAorCSAgZWNobyAnI2RlZmluZSBCSU5ESVIgIiQoYmluZGlyKSInOyBcCisJICBlY2hvICcjZGVmaW5lIFNCSU5ESVIgIiQoc2JpbmRpcikiJzsgXAorCSAgZWNobyAnI2RlZmluZSBMSUJFWEVDRElSICIkKGxpYmV4ZWNkaXIpIic7IFwKKwkgIGVjaG8gJyNkZWZpbmUgREFUQVJPT1RESVIgIiQoZGF0YXJvb3RkaXIpIic7IFwKKwkgIGVjaG8gJyNkZWZpbmUgREFUQURJUiAiJChkYXRhZGlyKSInOyBcCisJICBlY2hvICcjZGVmaW5lIFNZU0NPTkZESVIgIiQoc3lzY29uZmRpcikiJzsgXAorCSAgZWNobyAnI2RlZmluZSBTSEFSRURTVEFURURJUiAiJChzaGFyZWRzdGF0ZWRpcikiJzsgXAorCSAgZWNobyAnI2RlZmluZSBMT0NBTFNUQVRFRElSICIkKGxvY2Fsc3RhdGVkaXIpIic7IFwKKwkgIGVjaG8gJyNkZWZpbmUgSU5DTFVERURJUiAiJChpbmNsdWRlZGlyKSInOyBcCisJICBlY2hvICcjZGVmaW5lIE9MRElOQ0xVREVESVIgIiQob2xkaW5jbHVkZWRpcikiJzsgXAorCSAgZWNobyAnI2RlZmluZSBET0NESVIgIiQoZG9jZGlyKSInOyBcCisJICBlY2hvICcjZGVmaW5lIElORk9ESVIgIiQoaW5mb2RpcikiJzsgXAorCSAgZWNobyAnI2RlZmluZSBIVE1MRElSICIkKGh0bWxkaXIpIic7IFwKKwkgIGVjaG8gJyNkZWZpbmUgRFZJRElSICIkKGR2aWRpcikiJzsgXAorCSAgZWNobyAnI2RlZmluZSBQREZESVIgIiQocGRmZGlyKSInOyBcCisJICBlY2hvICcjZGVmaW5lIFBTRElSICIkKHBzZGlyKSInOyBcCisJICBlY2hvICcjZGVmaW5lIExJQkRJUiAiJChsaWJkaXIpIic7IFwKKwkgIGVjaG8gJyNkZWZpbmUgTElTUERJUiAiJChsaXNwZGlyKSInOyBcCisJICBlY2hvICcjZGVmaW5lIExPQ0FMRURJUiAiJChsb2NhbGVkaXIpIic7IFwKKwkgIGVjaG8gJyNkZWZpbmUgTUFORElSICIkKG1hbmRpcikiJzsgXAorCSAgZWNobyAnI2RlZmluZSBNQU5FWFQgIiQobWFuZXh0KSInOyBcCisJICBlY2hvICcjZGVmaW5lIFBLR0RBVEFESVIgIiQocGtnZGF0YWRpcikiJzsgXAorCSAgZWNobyAnI2RlZmluZSBQS0dJTkNMVURFRElSICIkKHBrZ2luY2x1ZGVkaXIpIic7IFwKKwkgIGVjaG8gJyNkZWZpbmUgUEtHTElCRElSICIkKHBrZ2xpYmRpcikiJzsgXAorCSAgZWNobyAnI2RlZmluZSBQS0dMSUJFWEVDRElSICIkKHBrZ2xpYmV4ZWNkaXIpIic7IFwKKwl9IHwgc2VkICcvIiIvZCcgPiAkQC10CisJbXYgJEAtdCAkQAorCisjIFdlIG5lZWQgdGhlIGZvbGxvd2luZyBpbiBvcmRlciB0byBjcmVhdGUgPGdldG9wdC5oPiB3aGVuIHRoZSBzeXN0ZW0KKyMgZG9lc24ndCBoYXZlIG9uZSB0aGF0IHdvcmtzIHdpdGggdGhlIGdpdmVuIGNvbXBpbGVyLgorZ2V0b3B0Lmg6IGdldG9wdF8uaAorCXsgZWNobyAnLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLyc7IFwKKwkgIGNhdCAkKHNyY2RpcikvZ2V0b3B0Xy5oOyBcCisJfSA+ICRALXQKKwltdiAtZiAkQC10ICRACisKKyMgV2UgbmVlZCB0aGUgZm9sbG93aW5nIGluIG9yZGVyIHRvIGNyZWF0ZSA8aW50dHlwZXMuaD4gd2hlbiB0aGUgc3lzdGVtCisjIGRvZXNuJ3QgaGF2ZSBvbmUgdGhhdCB3b3JrcyB3aXRoIHRoZSBnaXZlbiBjb21waWxlci4KK2ludHR5cGVzLmg6IGludHR5cGVzXy5oCisJcm0gLWYgJEAtdCAkQAorCXsgZWNobyAnLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLyc7IFwKKwkgIHNlZCAtZSAncy9AJydIQVZFX0lOVFRZUEVTX0gnJ0AvJChIQVZFX0lOVFRZUEVTX0gpL2cnIFwKKwkgICAgICAtZSAnc3xAJydBQlNPTFVURV9JTlRUWVBFU19IJydAfCQoQUJTT0xVVEVfSU5UVFlQRVNfSCl8ZycgXAorCSAgICAgIC1lICdzL0AnJ1BSSV9NQUNST1NfQlJPS0VOJydALyQoUFJJX01BQ1JPU19CUk9LRU4pL2cnIFwKKwkgICAgICAtZSAncy9AJydIQVZFX0xPTkdfTE9OR19JTlQnJ0AvJChIQVZFX0xPTkdfTE9OR19JTlQpL2cnIFwKKwkgICAgICAtZSAncy9AJydIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlQnJ0AvJChIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlQpL2cnIFwKKwkgICAgICAtZSAncy9AJydQUklQVFJfUFJFRklYJydALyQoUFJJUFRSX1BSRUZJWCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9JTUFYQUJTJydALyQoR05VTElCX0lNQVhBQlMpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfSU1BWERJVicnQC8kKEdOVUxJQl9JTUFYRElWKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUlRPSU1BWCcnQC8kKEdOVUxJQl9TVFJUT0lNQVgpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfU1RSVE9VTUFYJydALyQoR05VTElCX1NUUlRPVU1BWCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0hBVkVfREVDTF9JTUFYQUJTJydALyQoSEFWRV9ERUNMX0lNQVhBQlMpL2cnIFwKKwkgICAgICAtZSAncy9AJydIQVZFX0RFQ0xfSU1BWERJVicnQC8kKEhBVkVfREVDTF9JTUFYRElWKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnSEFWRV9ERUNMX1NUUlRPSU1BWCcnQC8kKEhBVkVfREVDTF9TVFJUT0lNQVgpL2cnIFwKKwkgICAgICAtZSAncy9AJydIQVZFX0RFQ0xfU1RSVE9VTUFYJydALyQoSEFWRV9ERUNMX1NUUlRPVU1BWCkvZycgXAorCSAgICAgIC1lICcvZGVmaW5pdGlvbiBvZiBHTF9MSU5LX1dBUk5JTkcvciAkKExJTktfV0FSTklOR19IKScgXAorCSAgICAgIDwgJChzcmNkaXIpL2ludHR5cGVzXy5oOyBcCisJfSA+ICRALXQKKwltdiAkQC10ICRACisKKyMgV2UgbmVlZCB0aGUgZm9sbG93aW5nIGluIG9yZGVyIHRvIGluc3RhbGwgYSBzaW1wbGUgZmlsZSBpbiAkKGxpYmRpcikKKyMgd2hpY2ggaXMgc2hhcmVkIHdpdGggb3RoZXIgaW5zdGFsbGVkIHBhY2thZ2VzLiBXZSB1c2UgYSBsaXN0IG9mIHJlZmVyZW5jaW5nCisjIHBhY2thZ2VzIHNvIHRoYXQgIm1ha2UgdW5pbnN0YWxsIiB3aWxsIHJlbW92ZSB0aGUgZmlsZSBpZiBhbmQgb25seSBpZiBpdAorIyBpcyBub3QgdXNlZCBieSBhbm90aGVyIGluc3RhbGxlZCBwYWNrYWdlLgorIyBPbiBzeXN0ZW1zIHdpdGggZ2xpYmMtMi4xIG9yIG5ld2VyLCB0aGUgZmlsZSBpcyByZWR1bmRhbnQsIHRoZXJlZm9yZSB3ZQorIyBhdm9pZCBpbnN0YWxsaW5nIGl0LgorCithbGwtbG9jYWw6IGNoYXJzZXQuYWxpYXMgcmVmLWFkZC5zZWQgcmVmLWRlbC5zZWQKK2luc3RhbGwtZXhlYy1sb2NhbDogYWxsLWxvY2FsCisJdGVzdCAkKEdMSUJDMjEpICE9IG5vIHx8ICQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQobGliZGlyKQorCWlmIHRlc3QgLWYgJChjaGFyc2V0X2FsaWFzKTsgdGhlbiBcCisJICBzZWQgLWYgcmVmLWFkZC5zZWQgJChjaGFyc2V0X2FsaWFzKSA+ICQoY2hhcnNldF90bXApIDsgXAorCSAgJChJTlNUQUxMX0RBVEEpICQoY2hhcnNldF90bXApICQoY2hhcnNldF9hbGlhcykgOyBcCisJICBybSAtZiAkKGNoYXJzZXRfdG1wKSA7IFwKKwllbHNlIFwKKwkgIGlmIHRlc3QgJChHTElCQzIxKSA9IG5vOyB0aGVuIFwKKwkgICAgc2VkIC1mIHJlZi1hZGQuc2VkIGNoYXJzZXQuYWxpYXMgPiAkKGNoYXJzZXRfdG1wKSA7IFwKKwkgICAgJChJTlNUQUxMX0RBVEEpICQoY2hhcnNldF90bXApICQoY2hhcnNldF9hbGlhcykgOyBcCisJICAgIHJtIC1mICQoY2hhcnNldF90bXApIDsgXAorCSAgZmkgOyBcCisJZmkKKwordW5pbnN0YWxsLWxvY2FsOiBhbGwtbG9jYWwKKwlpZiB0ZXN0IC1mICQoY2hhcnNldF9hbGlhcyk7IHRoZW4gXAorCSAgc2VkIC1mIHJlZi1kZWwuc2VkICQoY2hhcnNldF9hbGlhcykgPiAkKGNoYXJzZXRfdG1wKTsgXAorCSAgaWYgZ3JlcCAnXiMgUGFja2FnZXMgdXNpbmcgdGhpcyBmaWxlOiAkJCcgJChjaGFyc2V0X3RtcCkgXAorCSAgICAgID4gL2Rldi9udWxsOyB0aGVuIFwKKwkgICAgcm0gLWYgJChjaGFyc2V0X2FsaWFzKTsgXAorCSAgZWxzZSBcCisJICAgICQoSU5TVEFMTF9EQVRBKSAkKGNoYXJzZXRfdG1wKSAkKGNoYXJzZXRfYWxpYXMpOyBcCisJICBmaTsgXAorCSAgcm0gLWYgJChjaGFyc2V0X3RtcCk7IFwKKwlmaQorCitjaGFyc2V0LmFsaWFzOiBjb25maWcuY2hhcnNldAorCXJtIC1mIHQtJEAgJEAKKwkkKFNIRUxMKSAkKHNyY2RpcikvY29uZmlnLmNoYXJzZXQgJyQoaG9zdCknID4gdC0kQAorCW12IHQtJEAgJEAKKy5zaW4uc2VkOgorCXJtIC1mIHQtJEAgJEAKKwlzZWQgLWUgJy9eIy9kJyAtZSAncy9AJydQQUNLQUdFJydALyQoUEFDS0FHRSkvZycgJDwgPiB0LSRACisJbXYgdC0kQCAkQAorCisjIFdlIG5lZWQgdGhlIGZvbGxvd2luZyBpbiBvcmRlciB0byBjcmVhdGUgPHN0ZGJvb2wuaD4gd2hlbiB0aGUgc3lzdGVtCisjIGRvZXNuJ3QgaGF2ZSBvbmUgdGhhdCB3b3Jrcy4KK3N0ZGJvb2wuaDogc3RkYm9vbF8uaAorCXJtIC1mICRALXQgJEAKKwl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nOyBcCisJICBzZWQgLWUgJ3MvQCcnSEFWRV9fQk9PTCcnQC8kKEhBVkVfX0JPT0wpL2cnIDwgJChzcmNkaXIpL3N0ZGJvb2xfLmg7IFwKKwl9ID4gJEAtdAorCW12ICRALXQgJEAKKworIyBXZSBuZWVkIHRoZSBmb2xsb3dpbmcgaW4gb3JkZXIgdG8gY3JlYXRlIDxzdGRpbnQuaD4gd2hlbiB0aGUgc3lzdGVtCisjIGRvZXNuJ3QgaGF2ZSBvbmUgdGhhdCB3b3JrcyB3aXRoIHRoZSBnaXZlbiBjb21waWxlci4KK3N0ZGludC5oOiBzdGRpbnRfLmgKKwlybSAtZiAkQC10ICRACisJeyBlY2hvICcvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovJzsgXAorCSAgc2VkIC1lICdzL0AnJ0hBVkVfU1RESU5UX0gnJ0AvJChIQVZFX1NURElOVF9IKS9nJyBcCisJICAgICAgLWUgJ3N8QCcnQUJTT0xVVEVfU1RESU5UX0gnJ0B8JChBQlNPTFVURV9TVERJTlRfSCl8ZycgXAorCSAgICAgIC1lICdzL0AnJ0hBVkVfU1lTX1RZUEVTX0gnJ0AvJChIQVZFX1NZU19UWVBFU19IKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnSEFWRV9JTlRUWVBFU19IJydALyQoSEFWRV9JTlRUWVBFU19IKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnSEFWRV9TWVNfSU5UVFlQRVNfSCcnQC8kKEhBVkVfU1lTX0lOVFRZUEVTX0gpL2cnIFwKKwkgICAgICAtZSAncy9AJydIQVZFX1NZU19CSVRZUEVTX0gnJ0AvJChIQVZFX1NZU19CSVRZUEVTX0gpL2cnIFwKKwkgICAgICAtZSAncy9AJydIQVZFX0xPTkdfTE9OR19JTlQnJ0AvJChIQVZFX0xPTkdfTE9OR19JTlQpL2cnIFwKKwkgICAgICAtZSAncy9AJydIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlQnJ0AvJChIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlQpL2cnIFwKKwkgICAgICAtZSAncy9AJydCSVRTSVpFT0ZfUFRSRElGRl9UJydALyQoQklUU0laRU9GX1BUUkRJRkZfVCkvZycgXAorCSAgICAgIC1lICdzL0AnJ1BUUkRJRkZfVF9TVUZGSVgnJ0AvJChQVFJESUZGX1RfU1VGRklYKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnQklUU0laRU9GX1NJR19BVE9NSUNfVCcnQC8kKEJJVFNJWkVPRl9TSUdfQVRPTUlDX1QpL2cnIFwKKwkgICAgICAtZSAncy9AJydIQVZFX1NJR05FRF9TSUdfQVRPTUlDX1QnJ0AvJChIQVZFX1NJR05FRF9TSUdfQVRPTUlDX1QpL2cnIFwKKwkgICAgICAtZSAncy9AJydTSUdfQVRPTUlDX1RfU1VGRklYJydALyQoU0lHX0FUT01JQ19UX1NVRkZJWCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0JJVFNJWkVPRl9TSVpFX1QnJ0AvJChCSVRTSVpFT0ZfU0laRV9UKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnU0laRV9UX1NVRkZJWCcnQC8kKFNJWkVfVF9TVUZGSVgpL2cnIFwKKwkgICAgICAtZSAncy9AJydCSVRTSVpFT0ZfV0NIQVJfVCcnQC8kKEJJVFNJWkVPRl9XQ0hBUl9UKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnSEFWRV9TSUdORURfV0NIQVJfVCcnQC8kKEhBVkVfU0lHTkVEX1dDSEFSX1QpL2cnIFwKKwkgICAgICAtZSAncy9AJydXQ0hBUl9UX1NVRkZJWCcnQC8kKFdDSEFSX1RfU1VGRklYKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnQklUU0laRU9GX1dJTlRfVCcnQC8kKEJJVFNJWkVPRl9XSU5UX1QpL2cnIFwKKwkgICAgICAtZSAncy9AJydIQVZFX1NJR05FRF9XSU5UX1QnJ0AvJChIQVZFX1NJR05FRF9XSU5UX1QpL2cnIFwKKwkgICAgICAtZSAncy9AJydXSU5UX1RfU1VGRklYJydALyQoV0lOVF9UX1NVRkZJWCkvZycgXAorCSAgICAgIDwgJChzcmNkaXIpL3N0ZGludF8uaDsgXAorCX0gPiAkQC10CisJbXYgJEAtdCAkQAorCisjIFdlIG5lZWQgdGhlIGZvbGxvd2luZyBpbiBvcmRlciB0byBjcmVhdGUgPHN0ZGxpYi5oPiB3aGVuIHRoZSBzeXN0ZW0KKyMgZG9lc24ndCBoYXZlIG9uZSB0aGF0IHdvcmtzIHdpdGggdGhlIGdpdmVuIGNvbXBpbGVyLgorc3RkbGliLmg6IHN0ZGxpYl8uaAorCXJtIC1mICRALXQgJEAKKwl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nICYmIFwKKwkgIHNlZCAtZSAnc3xAJydBQlNPTFVURV9TVERMSUJfSCcnQHwkKEFCU09MVVRFX1NURExJQl9IKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnR05VTElCX0dFVFNVQk9QVCcnQHwkKEdOVUxJQl9HRVRTVUJPUFQpfGcnIFwKKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUtEVEVNUCcnQHwkKEdOVUxJQl9NS0RURU1QKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnR05VTElCX01LU1RFTVAnJ0B8JChHTlVMSUJfTUtTVEVNUCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfR0VUU1VCT1BUJydAfCQoSEFWRV9HRVRTVUJPUFQpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX01LRFRFTVAnJ0B8JChIQVZFX01LRFRFTVApfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX01LU1RFTVAnJ0B8JChSRVBMQUNFX01LU1RFTVApfGcnIFwKKwkgICAgICAtZSAnL2RlZmluaXRpb24gb2YgR0xfTElOS19XQVJOSU5HL3IgJChMSU5LX1dBUk5JTkdfSCknIFwKKwkgICAgICA8ICQoc3JjZGlyKS9zdGRsaWJfLmg7IFwKKwl9ID4gJEAtdAorCW12ICRALXQgJEAKKworIyBXZSBuZWVkIHRoZSBmb2xsb3dpbmcgaW4gb3JkZXIgdG8gY3JlYXRlIDxzdHJpbmcuaD4gd2hlbiB0aGUgc3lzdGVtCisjIGRvZXNuJ3QgaGF2ZSBvbmUgdGhhdCB3b3JrcyB3aXRoIHRoZSBnaXZlbiBjb21waWxlci4KK3N0cmluZy5oOiBzdHJpbmdfLmgKKwlybSAtZiAkQC10ICRACisJeyBlY2hvICcvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovJyAmJiBcCisJICBzZWQgLWUgJ3N8QCcnQUJTT0xVVEVfU1RSSU5HX0gnJ0B8JChBQlNPTFVURV9TVFJJTkdfSCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NQlNMRU4nJ0B8JChHTlVMSUJfTUJTTEVOKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnR05VTElCX01CU0NIUicnQHwkKEdOVUxJQl9NQlNDSFIpfGcnIFwKKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUJTUkNIUicnQHwkKEdOVUxJQl9NQlNSQ0hSKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnR05VTElCX01CU1NUUicnQHwkKEdOVUxJQl9NQlNTVFIpfGcnIFwKKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUJTQ0FTRUNNUCcnQHwkKEdOVUxJQl9NQlNDQVNFQ01QKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnR05VTElCX01CU05DQVNFQ01QJydAfCQoR05VTElCX01CU05DQVNFQ01QKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnR05VTElCX01CU1BDQVNFQ01QJydAfCQoR05VTElCX01CU1BDQVNFQ01QKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnR05VTElCX01CU0NBU0VTVFInJ0B8JChHTlVMSUJfTUJTQ0FTRVNUUil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NQlNDU1BOJydAfCQoR05VTElCX01CU0NTUE4pfGcnIFwKKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUJTUEJSSycnQHwkKEdOVUxJQl9NQlNQQlJLKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnR05VTElCX01CU1NQTicnQHwkKEdOVUxJQl9NQlNTUE4pfGcnIFwKKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUJTU0VQJydAfCQoR05VTElCX01CU1NFUCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NQlNUT0tfUicnQHwkKEdOVUxJQl9NQlNUT0tfUil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NRU1NRU0nJ0B8JChHTlVMSUJfTUVNTUVNKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnR05VTElCX01FTVBDUFknJ0B8JChHTlVMSUJfTUVNUENQWSl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NRU1SQ0hSJydAfCQoR05VTElCX01FTVJDSFIpfGcnIFwKKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RQQ1BZJydAfCQoR05VTElCX1NUUENQWSl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFBOQ1BZJydAfCQoR05VTElCX1NUUE5DUFkpfGcnIFwKKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RSQ0hSTlVMJydAfCQoR05VTElCX1NUUkNIUk5VTCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFJEVVAnJ0B8JChHTlVMSUJfU1RSRFVQKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnR05VTElCX1NUUk5EVVAnJ0B8JChHTlVMSUJfU1RSTkRVUCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFJOTEVOJydAfCQoR05VTElCX1NUUk5MRU4pfGcnIFwKKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RSUEJSSycnQHwkKEdOVUxJQl9TVFJQQlJLKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnR05VTElCX1NUUlNFUCcnQHwkKEdOVUxJQl9TVFJTRVApfGcnIFwKKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RSQ0FTRVNUUicnQHwkKEdOVUxJQl9TVFJDQVNFU1RSKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnR05VTElCX1NUUlRPS19SJydAfCQoR05VTElCX1NUUlRPS19SKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX01FTU1FTScnQHwkKEhBVkVfREVDTF9NRU1NRU0pfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX01FTVBDUFknJ0B8JChIQVZFX01FTVBDUFkpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfTUVNUkNIUicnQHwkKEhBVkVfREVDTF9NRU1SQ0hSKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9TVFBDUFknJ0B8JChIQVZFX1NUUENQWSl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfU1RQTkNQWScnQHwkKEhBVkVfU1RQTkNQWSl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfU1RSQ0FTRUNNUCcnQHwkKEhBVkVfU1RSQ0FTRUNNUCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9TVFJOQ0FTRUNNUCcnQHwkKEhBVkVfREVDTF9TVFJOQ0FTRUNNUCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfU1RSQ0hSTlVMJydAfCQoSEFWRV9TVFJDSFJOVUwpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfU1RSRFVQJydAfCQoSEFWRV9ERUNMX1NUUkRVUCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfU1RSTkRVUCcnQHwkKEhBVkVfU1RSTkRVUCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9TVFJORFVQJydAfCQoSEFWRV9ERUNMX1NUUk5EVVApfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfU1RSTkxFTicnQHwkKEhBVkVfREVDTF9TVFJOTEVOKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9TVFJQQlJLJydAfCQoSEFWRV9TVFJQQlJLKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9TVFJTRVAnJ0B8JChIQVZFX1NUUlNFUCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfU1RSQ0FTRVNUUicnQHwkKEhBVkVfU1RSQ0FTRVNUUil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9TVFJUT0tfUicnQHwkKEhBVkVfREVDTF9TVFJUT0tfUil8ZycgXAorCSAgICAgIC1lICcvZGVmaW5pdGlvbiBvZiBHTF9MSU5LX1dBUk5JTkcvciAkKExJTktfV0FSTklOR19IKScgXAorCSAgICAgIDwgJChzcmNkaXIpL3N0cmluZ18uaDsgXAorCX0gPiAkQC10CisJbXYgJEAtdCAkQAorCisjIFdlIG5lZWQgdGhlIGZvbGxvd2luZyBpbiBvcmRlciB0byBjcmVhdGUgYW4gZW1wdHkgcGxhY2Vob2xkZXIgZm9yCisjIDx1bmlzdGQuaD4gd2hlbiB0aGUgc3lzdGVtIGRvZXNuJ3QgaGF2ZSBvbmUuCit1bmlzdGQuaDogdW5pc3RkXy5oCisJcm0gLWYgJEAtdCAkQAorCXsgZWNobyAnLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLyc7IFwKKwkgIHNlZCAtZSAnc3xAJydIQVZFX1VOSVNURF9IJydAfCQoSEFWRV9VTklTVERfSCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0FCU09MVVRFX1VOSVNURF9IJydAfCQoQUJTT0xVVEVfVU5JU1REX0gpfGcnIFwKKwkgICAgICAtZSAnc3xAJydHTlVMSUJfQ0hPV04nJ0B8JChHTlVMSUJfQ0hPV04pfGcnIFwKKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRFVQMicnQHwkKEdOVUxJQl9EVVAyKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZDSERJUicnQHwkKEdOVUxJQl9GQ0hESVIpfGcnIFwKKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRlRSVU5DQVRFJydAfCQoR05VTElCX0ZUUlVOQ0FURSl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9HRVRDV0QnJ0B8JChHTlVMSUJfR0VUQ1dEKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnR05VTElCX0dFVExPR0lOX1InJ0B8JChHTlVMSUJfR0VUTE9HSU5fUil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9SRUFETElOSycnQHwkKEdOVUxJQl9SRUFETElOSyl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TTEVFUCcnQHwkKEdOVUxJQl9TTEVFUCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfRFVQMicnQHwkKEhBVkVfRFVQMil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfRlRSVU5DQVRFJydAfCQoSEFWRV9GVFJVTkNBVEUpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1JFQURMSU5LJydAfCQoSEFWRV9SRUFETElOSyl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfU0xFRVAnJ0B8JChIQVZFX1NMRUVQKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX0dFVExPR0lOX1InJ0B8JChIQVZFX0RFQ0xfR0VUTE9HSU5fUil8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfQ0hPV04nJ0B8JChSRVBMQUNFX0NIT1dOKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9GQ0hESVInJ0B8JChSRVBMQUNFX0ZDSERJUil8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfR0VUQ1dEJydAfCQoUkVQTEFDRV9HRVRDV0QpfGcnIFwKKwkgICAgICA8ICQoc3JjZGlyKS91bmlzdGRfLmg7IFwKKwl9ID4gJEAtdAorCW12ICRALXQgJEAKKworIyBXZSBuZWVkIHRoZSBmb2xsb3dpbmcgaW4gb3JkZXIgdG8gY3JlYXRlIDx3Y2hhci5oPiB3aGVuIHRoZSBzeXN0ZW0KKyMgdmVyc2lvbiBkb2VzIG5vdCB3b3JrIHN0YW5kYWxvbmUuCit3Y2hhci5oOiB3Y2hhcl8uaAorCXJtIC1mICRALXQgJEAKKwl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nOyBcCisJICBzZWQgLWUgJ3N8QCcnQUJTT0xVVEVfV0NIQVJfSCcnQHwkKEFCU09MVVRFX1dDSEFSX0gpfGcnIFwKKwkgICAgPCAkKHNyY2Rpcikvd2NoYXJfLmg7IFwKKwl9ID4gJEAtdAorCW12ICRALXQgJEAKKworIyBXZSBuZWVkIHRoZSBmb2xsb3dpbmcgaW4gb3JkZXIgdG8gY3JlYXRlIDx3Y3R5cGUuaD4gd2hlbiB0aGUgc3lzdGVtCisjIGRvZXNuJ3QgaGF2ZSBvbmUgdGhhdCB3b3JrcyB3aXRoIHRoZSBnaXZlbiBjb21waWxlci4KK3djdHlwZS5oOiB3Y3R5cGVfLmgKKwlybSAtZiAkQC10ICRACisJeyBlY2hvICcvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovJzsgXAorCSAgc2VkIC1lICdzL0AnJ0hBVkVfV0NUWVBFX0gnJ0AvJChIQVZFX1dDVFlQRV9IKS9nJyBcCisJICAgICAgLWUgJ3N8QCcnQUJTT0xVVEVfV0NUWVBFX0gnJ0B8JChBQlNPTFVURV9XQ1RZUEVfSCl8ZycgXAorCSAgICAgIC1lICdzL0AnJ0hBVkVfSVNXQ05UUkwnJ0AvJChIQVZFX0lTV0NOVFJMKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnSEFWRV9XSU5UX1QnJ0AvJChIQVZFX1dJTlRfVCkvZycgXAorCSAgICAgIDwgJChzcmNkaXIpL3djdHlwZV8uaDsgXAorCX0gPiAkQC10CisJbXYgJEAtdCAkQAorCittb3N0bHljbGVhbi1sb2NhbDogbW9zdGx5Y2xlYW4tZ2VuZXJpYworCUBmb3IgZGlyIGluICcnICQoTU9TVExZQ0xFQU5ESVJTKTsgZG8gXAorCSAgaWYgdGVzdCAtbiAiJCRkaXIiICYmIHRlc3QgLWQgJCRkaXI7IHRoZW4gXAorCSAgICBlY2hvICJybWRpciAkJGRpciI7IHJtZGlyICQkZGlyOyBcCisJICBmaTsgXAorCWRvbmUKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWIvX19mcGVuZGluZy5jIGIvcGFydGVkLTEuOC43L2xpYi9fX2ZwZW5kaW5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIxYWVlNgotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWIvX19mcGVuZGluZy5jCkBAIC0wLDAgKzEsMzAgQEAKKy8qIF9fZnBlbmRpbmcuYyAtLSByZXR1cm4gdGhlIG51bWJlciBvZiBwZW5kaW5nIG91dHB1dCBieXRlcyBvbiBhIHN0cmVhbQorICAgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDA0LCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKworLyogV3JpdHRlbiBieSBKaW0gTWV5ZXJpbmcuICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworI2luY2x1ZGUgIl9fZnBlbmRpbmcuaCIKKworLyogUmV0dXJuIHRoZSBudW1iZXIgb2YgcGVuZGluZyAoYWthIGJ1ZmZlcmVkLCB1bmZsdXNoZWQpCisgICBieXRlcyBvbiB0aGUgc3RyZWFtLCBGUCwgdGhhdCBpcyBvcGVuIGZvciB3cml0aW5nLiAgKi8KK3NpemVfdAorX19mcGVuZGluZyAoRklMRSAqZnApCit7CisgIHJldHVybiBQRU5ESU5HX09VVFBVVF9OX0JZVEVTOworfQpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYi9fX2ZwZW5kaW5nLmggYi9wYXJ0ZWQtMS44LjcvbGliL19fZnBlbmRpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YThhYWJjCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYi9fX2ZwZW5kaW5nLmgKQEAgLTAsMCArMSwzNCBAQAorLyogRGVjbGFyZSBfX2ZwZW5kaW5nLgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDMsIDIwMDUsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgIFdyaXR0ZW4gYnkgSmltIE1leWVyaW5nLiAgKi8KKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpZm5kZWYgSEFWRV9ERUNMX19fRlBFTkRJTkcKKyJ0aGlzIGNvbmZpZ3VyZS10aW1lIGRlY2xhcmF0aW9uIHRlc3Qgd2FzIG5vdCBydW4iCisjZW5kaWYKKworI2lmIEhBVkVfREVDTF9fX0ZQRU5ESU5HCisjIGlmIEhBVkVfU1RESU9fRVhUX0gKKyMgIGluY2x1ZGUgPHN0ZGlvX2V4dC5oPgorIyBlbmRpZgorI2Vsc2UKK3NpemVfdCBfX2ZwZW5kaW5nIChGSUxFICopOworI2VuZGlmCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGliL2FsbG9jYS5jIGIvcGFydGVkLTEuOC43L2xpYi9hbGxvY2EuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTFmNGUyCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYi9hbGxvY2EuYwpAQCAtMCwwICsxLDQ4OSBAQAorLyogYWxsb2NhLmMgLS0gYWxsb2NhdGUgYXV0b21hdGljYWxseSByZWNsYWltZWQgbWVtb3J5CisgICAoTW9zdGx5KSBwb3J0YWJsZSBwdWJsaWMtZG9tYWluIGltcGxlbWVudGF0aW9uIC0tIEQgQSBHd3luCisKKyAgIFRoaXMgaW1wbGVtZW50YXRpb24gb2YgdGhlIFBXQiBsaWJyYXJ5IGFsbG9jYSBmdW5jdGlvbiwKKyAgIHdoaWNoIGlzIHVzZWQgdG8gYWxsb2NhdGUgc3BhY2Ugb2ZmIHRoZSBydW4tdGltZSBzdGFjayBzbworICAgdGhhdCBpdCBpcyBhdXRvbWF0aWNhbGx5IHJlY2xhaW1lZCB1cG9uIHByb2NlZHVyZSBleGl0LAorICAgd2FzIGluc3BpcmVkIGJ5IGRpc2N1c3Npb25zIHdpdGggSi4gUS4gSm9obnNvbiBvZiBDb3JuZWxsLgorICAgSi5PdHRvIFRlbm5hbnQgPGpvdEBjcmF5LmNvbT4gY29udHJpYnV0ZWQgdGhlIENyYXkgc3VwcG9ydC4KKworICAgVGhlcmUgYXJlIHNvbWUgcHJlcHJvY2Vzc29yIGNvbnN0YW50cyB0aGF0IGNhbgorICAgYmUgZGVmaW5lZCB3aGVuIGNvbXBpbGluZyBmb3IgeW91ciBzcGVjaWZpYyBzeXN0ZW0sIGZvcgorICAgaW1wcm92ZWQgZWZmaWNpZW5jeTsgaG93ZXZlciwgdGhlIGRlZmF1bHRzIHNob3VsZCBiZSBva2F5LgorCisgICBUaGUgZ2VuZXJhbCBjb25jZXB0IG9mIHRoaXMgaW1wbGVtZW50YXRpb24gaXMgdG8ga2VlcAorICAgdHJhY2sgb2YgYWxsIGFsbG9jYS1hbGxvY2F0ZWQgYmxvY2tzLCBhbmQgcmVjbGFpbSBhbnkKKyAgIHRoYXQgYXJlIGZvdW5kIHRvIGJlIGRlZXBlciBpbiB0aGUgc3RhY2sgdGhhbiB0aGUgY3VycmVudAorICAgaW52b2NhdGlvbi4gIFRoaXMgaGV1cmlzdGljIGRvZXMgbm90IHJlY2xhaW0gc3RvcmFnZSBhcworICAgc29vbiBhcyBpdCBiZWNvbWVzIGludmFsaWQsIGJ1dCBpdCB3aWxsIGRvIHNvIGV2ZW50dWFsbHkuCisKKyAgIEFzIGEgc3BlY2lhbCBjYXNlLCBhbGxvY2EoMCkgcmVjbGFpbXMgc3RvcmFnZSB3aXRob3V0CisgICBhbGxvY2F0aW5nIGFueS4gIEl0IGlzIGEgZ29vZCBpZGVhIHRvIHVzZSBhbGxvY2EoMCkgaW4KKyAgIHlvdXIgbWFpbiBjb250cm9sIGxvb3AsIGV0Yy4gdG8gZm9yY2UgZ2FyYmFnZSBjb2xsZWN0aW9uLiAgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaW5jbHVkZSA8YWxsb2NhLmg+CisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2lmZGVmIGVtYWNzCisjIGluY2x1ZGUgImxpc3AuaCIKKyMgaW5jbHVkZSAiYmxvY2tpbnB1dC5oIgorIyBpZmRlZiBFTUFDU19GUkVFCisjICB1bmRlZiBmcmVlCisjICBkZWZpbmUgZnJlZSBFTUFDU19GUkVFCisjIGVuZGlmCisjZWxzZQorIyBkZWZpbmUgbWVtb3J5X2Z1bGwoKSBhYm9ydCAoKQorI2VuZGlmCisKKy8qIElmIGNvbXBpbGluZyB3aXRoIEdDQyAyLCB0aGlzIGZpbGUncyBub3QgbmVlZGVkLiAgKi8KKyNpZiAhZGVmaW5lZCAoX19HTlVDX18pIHx8IF9fR05VQ19fIDwgMgorCisvKiBJZiBzb21lb25lIGhhcyBkZWZpbmVkIGFsbG9jYSBhcyBhIG1hY3JvLAorICAgdGhlcmUgbXVzdCBiZSBzb21lIG90aGVyIHdheSBhbGxvY2EgaXMgc3VwcG9zZWQgdG8gd29yay4gICovCisjIGlmbmRlZiBhbGxvY2EKKworIyAgaWZkZWYgZW1hY3MKKyMgICBpZmRlZiBzdGF0aWMKKy8qIGFjdHVhbGx5LCBvbmx5IHdhbnQgdGhpcyBpZiBzdGF0aWMgaXMgZGVmaW5lZCBhcyAiIgorICAgLS0gdGhpcyBpcyBmb3IgdXNnLCBpbiB3aGljaCBlbWFjcyBtdXN0IHVuZGVmaW5lIHN0YXRpYworICAgaW4gb3JkZXIgdG8gbWFrZSB1bmV4ZWMgd29ya2FibGUKKyAgICovCisjICAgIGlmbmRlZiBTVEFDS19ESVJFQ1RJT04KK3lvdQorbG9zZQorLS0gbXVzdCBrbm93IFNUQUNLX0RJUkVDVElPTiBhdCBjb21waWxlLXRpbWUKKy8qIFVzaW5nICNlcnJvciBoZXJlIGlzIG5vdCB3aXNlIHNpbmNlIHRoaXMgZmlsZSBzaG91bGQgd29yayBmb3IKKyAgIG9sZCBhbmQgb2JzY3VyZSBjb21waWxlcnMuICAqLworIyAgICBlbmRpZiAvKiBTVEFDS19ESVJFQ1RJT04gdW5kZWZpbmVkICovCisjICAgZW5kaWYgLyogc3RhdGljICovCisjICBlbmRpZiAvKiBlbWFjcyAqLworCisvKiBJZiB5b3VyIHN0YWNrIGlzIGEgbGlua2VkIGxpc3Qgb2YgZnJhbWVzLCB5b3UgaGF2ZSB0bworICAgcHJvdmlkZSBhbiAiYWRkcmVzcyBtZXRyaWMiIEFERFJFU1NfRlVOQ1RJT04gbWFjcm8uICAqLworCisjICBpZiBkZWZpbmVkIChDUkFZKSAmJiBkZWZpbmVkIChDUkFZX1NUQUNLU0VHX0VORCkKK2xvbmcgaTAwYWZ1bmMgKCk7CisjICAgZGVmaW5lIEFERFJFU1NfRlVOQ1RJT04oYXJnKSAoY2hhciAqKSBpMDBhZnVuYyAoJihhcmcpKQorIyAgZWxzZQorIyAgIGRlZmluZSBBRERSRVNTX0ZVTkNUSU9OKGFyZykgJihhcmcpCisjICBlbmRpZgorCisvKiBEZWZpbmUgU1RBQ0tfRElSRUNUSU9OIGlmIHlvdSBrbm93IHRoZSBkaXJlY3Rpb24gb2Ygc3RhY2sKKyAgIGdyb3d0aCBmb3IgeW91ciBzeXN0ZW07IG90aGVyd2lzZSBpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkKKyAgIGRlZHVjZWQgYXQgcnVuLXRpbWUuCisKKyAgIFNUQUNLX0RJUkVDVElPTiA+IDAgPT4gZ3Jvd3MgdG93YXJkIGhpZ2hlciBhZGRyZXNzZXMKKyAgIFNUQUNLX0RJUkVDVElPTiA8IDAgPT4gZ3Jvd3MgdG93YXJkIGxvd2VyIGFkZHJlc3NlcworICAgU1RBQ0tfRElSRUNUSU9OID0gMCA9PiBkaXJlY3Rpb24gb2YgZ3Jvd3RoIHVua25vd24gICovCisKKyMgIGlmbmRlZiBTVEFDS19ESVJFQ1RJT04KKyMgICBkZWZpbmUgU1RBQ0tfRElSRUNUSU9OCTAJLyogRGlyZWN0aW9uIHVua25vd24uICAqLworIyAgZW5kaWYKKworIyAgaWYgU1RBQ0tfRElSRUNUSU9OICE9IDAKKworIyAgIGRlZmluZSBTVEFDS19ESVIJU1RBQ0tfRElSRUNUSU9OCS8qIEtub3duIGF0IGNvbXBpbGUtdGltZS4gICovCisKKyMgIGVsc2UgLyogU1RBQ0tfRElSRUNUSU9OID09IDA7IG5lZWQgcnVuLXRpbWUgY29kZS4gICovCisKK3N0YXRpYyBpbnQgc3RhY2tfZGlyOwkJLyogMSBvciAtMSBvbmNlIGtub3duLiAgKi8KKyMgICBkZWZpbmUgU1RBQ0tfRElSCXN0YWNrX2RpcgorCitzdGF0aWMgdm9pZAorZmluZF9zdGFja19kaXJlY3Rpb24gKHZvaWQpCit7CisgIHN0YXRpYyBjaGFyICphZGRyID0gTlVMTDsJLyogQWRkcmVzcyBvZiBmaXJzdCBgZHVtbXknLCBvbmNlIGtub3duLiAgKi8KKyAgYXV0byBjaGFyIGR1bW15OwkJLyogVG8gZ2V0IHN0YWNrIGFkZHJlc3MuICAqLworCisgIGlmIChhZGRyID09IE5VTEwpCisgICAgewkJCQkvKiBJbml0aWFsIGVudHJ5LiAgKi8KKyAgICAgIGFkZHIgPSBBRERSRVNTX0ZVTkNUSU9OIChkdW1teSk7CisKKyAgICAgIGZpbmRfc3RhY2tfZGlyZWN0aW9uICgpOwkvKiBSZWN1cnNlIG9uY2UuICAqLworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIFNlY29uZCBlbnRyeS4gICovCisgICAgICBpZiAoQUREUkVTU19GVU5DVElPTiAoZHVtbXkpID4gYWRkcikKKwlzdGFja19kaXIgPSAxOwkJLyogU3RhY2sgZ3JldyB1cHdhcmQuICAqLworICAgICAgZWxzZQorCXN0YWNrX2RpciA9IC0xOwkJLyogU3RhY2sgZ3JldyBkb3dud2FyZC4gICovCisgICAgfQorfQorCisjICBlbmRpZiAvKiBTVEFDS19ESVJFQ1RJT04gPT0gMCAqLworCisvKiBBbiAiYWxsb2NhIGhlYWRlciIgaXMgdXNlZCB0bzoKKyAgIChhKSBjaGFpbiB0b2dldGhlciBhbGwgYWxsb2NhJ2VkIGJsb2NrczsKKyAgIChiKSBrZWVwIHRyYWNrIG9mIHN0YWNrIGRlcHRoLgorCisgICBJdCBpcyB2ZXJ5IGltcG9ydGFudCB0aGF0IHNpemVvZihoZWFkZXIpIGFncmVlIHdpdGggbWFsbG9jCisgICBhbGlnbm1lbnQgY2h1bmsgc2l6ZS4gIFRoZSBmb2xsb3dpbmcgZGVmYXVsdCBzaG91bGQgd29yayBva2F5LiAgKi8KKworIyAgaWZuZGVmCUFMSUdOX1NJWkUKKyMgICBkZWZpbmUgQUxJR05fU0laRQlzaXplb2YoZG91YmxlKQorIyAgZW5kaWYKKwordHlwZWRlZiB1bmlvbiBoZHIKK3sKKyAgY2hhciBhbGlnbltBTElHTl9TSVpFXTsJLyogVG8gZm9yY2Ugc2l6ZW9mKGhlYWRlcikuICAqLworICBzdHJ1Y3QKKyAgICB7CisgICAgICB1bmlvbiBoZHIgKm5leHQ7CQkvKiBGb3IgY2hhaW5pbmcgaGVhZGVycy4gICovCisgICAgICBjaGFyICpkZWVwOwkJLyogRm9yIHN0YWNrIGRlcHRoIG1lYXN1cmUuICAqLworICAgIH0gaDsKK30gaGVhZGVyOworCitzdGF0aWMgaGVhZGVyICpsYXN0X2FsbG9jYV9oZWFkZXIgPSBOVUxMOwkvKiAtPiBsYXN0IGFsbG9jYSBoZWFkZXIuICAqLworCisvKiBSZXR1cm4gYSBwb2ludGVyIHRvIGF0IGxlYXN0IFNJWkUgYnl0ZXMgb2Ygc3RvcmFnZSwKKyAgIHdoaWNoIHdpbGwgYmUgYXV0b21hdGljYWxseSByZWNsYWltZWQgdXBvbiBleGl0IGZyb20KKyAgIHRoZSBwcm9jZWR1cmUgdGhhdCBjYWxsZWQgYWxsb2NhLiAgT3JpZ2luYWxseSwgdGhpcyBzcGFjZQorICAgd2FzIHN1cHBvc2VkIHRvIGJlIHRha2VuIGZyb20gdGhlIGN1cnJlbnQgc3RhY2sgZnJhbWUgb2YgdGhlCisgICBjYWxsZXIsIGJ1dCB0aGF0IG1ldGhvZCBjYW5ub3QgYmUgbWFkZSB0byB3b3JrIGZvciBzb21lCisgICBpbXBsZW1lbnRhdGlvbnMgb2YgQywgZm9yIGV4YW1wbGUgdW5kZXIgR291bGQncyBVVFgvMzIuICAqLworCit2b2lkICoKK2FsbG9jYSAoc2l6ZV90IHNpemUpCit7CisgIGF1dG8gY2hhciBwcm9iZTsJCS8qIFByb2JlcyBzdGFjayBkZXB0aDogKi8KKyAgcmVnaXN0ZXIgY2hhciAqZGVwdGggPSBBRERSRVNTX0ZVTkNUSU9OIChwcm9iZSk7CisKKyMgIGlmIFNUQUNLX0RJUkVDVElPTiA9PSAwCisgIGlmIChTVEFDS19ESVIgPT0gMCkJCS8qIFVua25vd24gZ3Jvd3RoIGRpcmVjdGlvbi4gICovCisgICAgZmluZF9zdGFja19kaXJlY3Rpb24gKCk7CisjICBlbmRpZgorCisgIC8qIFJlY2xhaW0gZ2FyYmFnZSwgZGVmaW5lZCBhcyBhbGwgYWxsb2NhJ2Qgc3RvcmFnZSB0aGF0CisgICAgIHdhcyBhbGxvY2F0ZWQgZnJvbSBkZWVwZXIgaW4gdGhlIHN0YWNrIHRoYW4gY3VycmVudGx5LiAgKi8KKworICB7CisgICAgcmVnaXN0ZXIgaGVhZGVyICpocDsJLyogVHJhdmVyc2VzIGxpbmtlZCBsaXN0LiAgKi8KKworIyAgaWZkZWYgZW1hY3MKKyAgICBCTE9DS19JTlBVVDsKKyMgIGVuZGlmCisKKyAgICBmb3IgKGhwID0gbGFzdF9hbGxvY2FfaGVhZGVyOyBocCAhPSBOVUxMOykKKyAgICAgIGlmICgoU1RBQ0tfRElSID4gMCAmJiBocC0+aC5kZWVwID4gZGVwdGgpCisJICB8fCAoU1RBQ0tfRElSIDwgMCAmJiBocC0+aC5kZWVwIDwgZGVwdGgpKQorCXsKKwkgIHJlZ2lzdGVyIGhlYWRlciAqbnAgPSBocC0+aC5uZXh0OworCisJICBmcmVlIChocCk7CQkvKiBDb2xsZWN0IGdhcmJhZ2UuICAqLworCisJICBocCA9IG5wOwkJLyogLT4gbmV4dCBoZWFkZXIuICAqLworCX0KKyAgICAgIGVsc2UKKwlicmVhazsJCQkvKiBSZXN0IGFyZSBub3QgZGVlcGVyLiAgKi8KKworICAgIGxhc3RfYWxsb2NhX2hlYWRlciA9IGhwOwkvKiAtPiBsYXN0IHZhbGlkIHN0b3JhZ2UuICAqLworCisjICBpZmRlZiBlbWFjcworICAgIFVOQkxPQ0tfSU5QVVQ7CisjICBlbmRpZgorICB9CisKKyAgaWYgKHNpemUgPT0gMCkKKyAgICByZXR1cm4gTlVMTDsJCS8qIE5vIGFsbG9jYXRpb24gcmVxdWlyZWQuICAqLworCisgIC8qIEFsbG9jYXRlIGNvbWJpbmVkIGhlYWRlciArIHVzZXIgZGF0YSBzdG9yYWdlLiAgKi8KKworICB7CisgICAgLyogQWRkcmVzcyBvZiBoZWFkZXIuICAqLworICAgIHJlZ2lzdGVyIGhlYWRlciAqbmV3OworCisgICAgc2l6ZV90IGNvbWJpbmVkX3NpemUgPSBzaXplb2YgKGhlYWRlcikgKyBzaXplOworICAgIGlmIChjb21iaW5lZF9zaXplIDwgc2l6ZW9mIChoZWFkZXIpKQorICAgICAgbWVtb3J5X2Z1bGwgKCk7CisKKyAgICBuZXcgPSBtYWxsb2MgKGNvbWJpbmVkX3NpemUpOworCisgICAgaWYgKCEgbmV3KQorICAgICAgbWVtb3J5X2Z1bGwgKCk7CisKKyAgICBuZXctPmgubmV4dCA9IGxhc3RfYWxsb2NhX2hlYWRlcjsKKyAgICBuZXctPmguZGVlcCA9IGRlcHRoOworCisgICAgbGFzdF9hbGxvY2FfaGVhZGVyID0gbmV3OworCisgICAgLyogVXNlciBzdG9yYWdlIGJlZ2lucyBqdXN0IGFmdGVyIGhlYWRlci4gICovCisKKyAgICByZXR1cm4gKHZvaWQgKikgKG5ldyArIDEpOworICB9Cit9CisKKyMgIGlmIGRlZmluZWQgKENSQVkpICYmIGRlZmluZWQgKENSQVlfU1RBQ0tTRUdfRU5EKQorCisjICAgaWZkZWYgREVCVUdfSTAwQUZVTkMKKyMgICAgaW5jbHVkZSA8c3RkaW8uaD4KKyMgICBlbmRpZgorCisjICAgaWZuZGVmIENSQVlfU1RBQ0sKKyMgICAgZGVmaW5lIENSQVlfU1RBQ0sKKyMgICAgaWZuZGVmIENSQVkyCisvKiBTdGFjayBzdHJ1Y3R1cmVzIGZvciBDUkFZLTEsIENSQVkgWC1NUCwgYW5kIENSQVkgWS1NUCAqLworc3RydWN0IHN0YWNrX2NvbnRyb2xfaGVhZGVyCisgIHsKKyAgICBsb25nIHNoZ3JvdzozMjsJCS8qIE51bWJlciBvZiB0aW1lcyBzdGFjayBoYXMgZ3Jvd24uICAqLworICAgIGxvbmcgc2hhc2VnOjMyOwkJLyogU2l6ZSBvZiBpbmNyZW1lbnRzIHRvIHN0YWNrLiAgKi8KKyAgICBsb25nIHNoaHdtOjMyOwkJLyogSGlnaCB3YXRlciBtYXJrIG9mIHN0YWNrLiAgKi8KKyAgICBsb25nIHNoc2l6ZTozMjsJCS8qIEN1cnJlbnQgc2l6ZSBvZiBzdGFjayAoYWxsIHNlZ21lbnRzKS4gICovCisgIH07CisKKy8qIFRoZSBzdGFjayBzZWdtZW50IGxpbmthZ2UgY29udHJvbCBpbmZvcm1hdGlvbiBvY2N1cnMgYXQKKyAgIHRoZSBoaWdoLWFkZHJlc3MgZW5kIG9mIGEgc3RhY2sgc2VnbWVudC4gIChUaGUgc3RhY2sKKyAgIGdyb3dzIGZyb20gbG93IGFkZHJlc3NlcyB0byBoaWdoIGFkZHJlc3Nlcy4pICBUaGUgaW5pdGlhbAorICAgcGFydCBvZiB0aGUgc3RhY2sgc2VnbWVudCBsaW5rYWdlIGNvbnRyb2wgaW5mb3JtYXRpb24gaXMKKyAgIDAyMDAgKG9jdGFsKSB3b3Jkcy4gIFRoaXMgcHJvdmlkZXMgZm9yIHJlZ2lzdGVyIHN0b3JhZ2UKKyAgIGZvciB0aGUgcm91dGluZSB3aGljaCBvdmVyZmxvd3MgdGhlIHN0YWNrLiAgKi8KKworc3RydWN0IHN0YWNrX3NlZ21lbnRfbGlua2FnZQorICB7CisgICAgbG9uZyBzc1swMjAwXTsJCS8qIDAyMDAgb3ZlcmZsb3cgd29yZHMuICAqLworICAgIGxvbmcgc3NzaXplOjMyOwkJLyogTnVtYmVyIG9mIHdvcmRzIGluIHRoaXMgc2VnbWVudC4gICovCisgICAgbG9uZyBzc2Jhc2U6MzI7CQkvKiBPZmZzZXQgdG8gc3RhY2sgYmFzZS4gICovCisgICAgbG9uZzozMjsKKyAgICBsb25nIHNzcHNlZzozMjsJCS8qIE9mZnNldCB0byBsaW5rYWdlIGNvbnRyb2wgb2YgcHJldmlvdXMKKwkJCQkgICBzZWdtZW50IG9mIHN0YWNrLiAgKi8KKyAgICBsb25nOjMyOworICAgIGxvbmcgc3N0Y3B0OjMyOwkJLyogUG9pbnRlciB0byB0YXNrIGNvbW1vbiBhZGRyZXNzIGJsb2NrLiAgKi8KKyAgICBsb25nIHNzY3NubTsJCS8qIFByaXZhdGUgY29udHJvbCBzdHJ1Y3R1cmUgbnVtYmVyIGZvcgorCQkJCSAgIG1pY3JvdGFza2luZy4gICovCisgICAgbG9uZyBzc3VzcjE7CQkvKiBSZXNlcnZlZCBmb3IgdXNlci4gICovCisgICAgbG9uZyBzc3VzcjI7CQkvKiBSZXNlcnZlZCBmb3IgdXNlci4gICovCisgICAgbG9uZyBzc3RwaWQ7CQkvKiBQcm9jZXNzIElEIGZvciBwaWQgYmFzZWQgbXVsdGktdGFza2luZy4gICovCisgICAgbG9uZyBzc2d2dXA7CQkvKiBQb2ludGVyIHRvIG11bHRpdGFza2luZyB0aHJlYWQgZ2l2ZXVwLiAgKi8KKyAgICBsb25nIHNzY3JheVs3XTsJCS8qIFJlc2VydmVkIGZvciBDcmF5IFJlc2VhcmNoLiAgKi8KKyAgICBsb25nIHNzYTA7CisgICAgbG9uZyBzc2ExOworICAgIGxvbmcgc3NhMjsKKyAgICBsb25nIHNzYTM7CisgICAgbG9uZyBzc2E0OworICAgIGxvbmcgc3NhNTsKKyAgICBsb25nIHNzYTY7CisgICAgbG9uZyBzc2E3OworICAgIGxvbmcgc3NzMDsKKyAgICBsb25nIHNzczE7CisgICAgbG9uZyBzc3MyOworICAgIGxvbmcgc3NzMzsKKyAgICBsb25nIHNzczQ7CisgICAgbG9uZyBzc3M1OworICAgIGxvbmcgc3NzNjsKKyAgICBsb25nIHNzczc7CisgIH07CisKKyMgICAgZWxzZSAvKiBDUkFZMiAqLworLyogVGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgZGVmaW5lcyB0aGUgdmVjdG9yIG9mIHdvcmRzCisgICByZXR1cm5lZCBieSB0aGUgU1RLU1RBVCBsaWJyYXJ5IHJvdXRpbmUuICAqLworc3RydWN0IHN0a19zdGF0CisgIHsKKyAgICBsb25nIG5vdzsJCQkvKiBDdXJyZW50IHRvdGFsIHN0YWNrIHNpemUuICAqLworICAgIGxvbmcgbWF4YzsJCQkvKiBBbW91bnQgb2YgY29udGlndW91cyBzcGFjZSB3aGljaCB3b3VsZAorCQkJCSAgIGJlIHJlcXVpcmVkIHRvIHNhdGlzZnkgdGhlIG1heGltdW0KKwkJCQkgICBzdGFjayBkZW1hbmQgdG8gZGF0ZS4gICovCisgICAgbG9uZyBoaWdoX3dhdGVyOwkJLyogU3RhY2sgaGlnaC13YXRlciBtYXJrLiAgKi8KKyAgICBsb25nIG92ZXJmbG93czsJCS8qIE51bWJlciBvZiBzdGFjayBvdmVyZmxvdyAoJFNUS09GRU4pIGNhbGxzLiAgKi8KKyAgICBsb25nIGhpdHM7CQkJLyogTnVtYmVyIG9mIGludGVybmFsIGJ1ZmZlciBoaXRzLiAgKi8KKyAgICBsb25nIGV4dGVuZHM7CQkvKiBOdW1iZXIgb2YgYmxvY2sgZXh0ZW5zaW9ucy4gICovCisgICAgbG9uZyBzdGtvX21hbGxvY3M7CQkvKiBCbG9jayBhbGxvY2F0aW9ucyBieSAkU1RLT0ZFTi4gICovCisgICAgbG9uZyB1bmRlcmZsb3dzOwkJLyogTnVtYmVyIG9mIHN0YWNrIHVuZGVyZmxvdyBjYWxscyAoJFNUS1JFVE4pLiAgKi8KKyAgICBsb25nIHN0a29fZnJlZTsJCS8qIE51bWJlciBvZiBkZWFsbG9jYXRpb25zIGJ5ICRTVEtSRVROLiAgKi8KKyAgICBsb25nIHN0a21fZnJlZTsJCS8qIE51bWJlciBvZiBkZWFsbG9jYXRpb25zIGJ5ICRTVEtNUkVULiAgKi8KKyAgICBsb25nIHNlZ21lbnRzOwkJLyogQ3VycmVudCBudW1iZXIgb2Ygc3RhY2sgc2VnbWVudHMuICAqLworICAgIGxvbmcgbWF4czsJCQkvKiBNYXhpbXVtIG51bWJlciBvZiBzdGFjayBzZWdtZW50cyBzbyBmYXIuICAqLworICAgIGxvbmcgcGFkX3NpemU7CQkvKiBTdGFjayBwYWQgc2l6ZS4gICovCisgICAgbG9uZyBjdXJyZW50X2FkZHJlc3M7CS8qIEN1cnJlbnQgc3RhY2sgc2VnbWVudCBhZGRyZXNzLiAgKi8KKyAgICBsb25nIGN1cnJlbnRfc2l6ZTsJCS8qIEN1cnJlbnQgc3RhY2sgc2VnbWVudCBzaXplLiAgVGhpcworCQkJCSAgIG51bWJlciBpcyBhY3R1YWxseSBjb3JydXB0ZWQgYnkgU1RLU1RBVCB0bworCQkJCSAgIGluY2x1ZGUgdGhlIGZpZnRlZW4gd29yZCB0cmFpbGVyIGFyZWEuICAqLworICAgIGxvbmcgaW5pdGlhbF9hZGRyZXNzOwkvKiBBZGRyZXNzIG9mIGluaXRpYWwgc2VnbWVudC4gICovCisgICAgbG9uZyBpbml0aWFsX3NpemU7CQkvKiBTaXplIG9mIGluaXRpYWwgc2VnbWVudC4gICovCisgIH07CisKKy8qIFRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIGRlc2NyaWJlcyB0aGUgZGF0YSBzdHJ1Y3R1cmUgd2hpY2ggdHJhaWxzCisgICBhbnkgc3RhY2sgc2VnbWVudC4gIEkgdGhpbmsgdGhhdCB0aGUgZGVzY3JpcHRpb24gaW4gJ2FzZGVmJyBpcworICAgb3V0IG9mIGRhdGUuICBJIG9ubHkgZGVzY3JpYmUgdGhlIHBhcnRzIHRoYXQgSSBhbSBzdXJlIGFib3V0LiAgKi8KKworc3RydWN0IHN0a190cmFpbGVyCisgIHsKKyAgICBsb25nIHRoaXNfYWRkcmVzczsJCS8qIEFkZHJlc3Mgb2YgdGhpcyBibG9jay4gICovCisgICAgbG9uZyB0aGlzX3NpemU7CQkvKiBTaXplIG9mIHRoaXMgYmxvY2sgKGRvZXMgbm90IGluY2x1ZGUKKwkJCQkgICB0aGlzIHRyYWlsZXIpLiAgKi8KKyAgICBsb25nIHVua25vd24yOworICAgIGxvbmcgdW5rbm93bjM7CisgICAgbG9uZyBsaW5rOwkJCS8qIEFkZHJlc3Mgb2YgdHJhaWxlciBibG9jayBvZiBwcmV2aW91cworCQkJCSAgIHNlZ21lbnQuICAqLworICAgIGxvbmcgdW5rbm93bjU7CisgICAgbG9uZyB1bmtub3duNjsKKyAgICBsb25nIHVua25vd243OworICAgIGxvbmcgdW5rbm93bjg7CisgICAgbG9uZyB1bmtub3duOTsKKyAgICBsb25nIHVua25vd24xMDsKKyAgICBsb25nIHVua25vd24xMTsKKyAgICBsb25nIHVua25vd24xMjsKKyAgICBsb25nIHVua25vd24xMzsKKyAgICBsb25nIHVua25vd24xNDsKKyAgfTsKKworIyAgICBlbmRpZiAvKiBDUkFZMiAqLworIyAgIGVuZGlmIC8qIG5vdCBDUkFZX1NUQUNLICovCisKKyMgICBpZmRlZiBDUkFZMgorLyogRGV0ZXJtaW5lIGEgInN0YWNrIG1lYXN1cmUiIGZvciBhbiBhcmJpdHJhcnkgQUREUkVTUy4KKyAgIEkgZG91YnQgdGhhdCAibGludCIgd2lsbCBsaWtlIHRoaXMgbXVjaC4gICovCisKK3N0YXRpYyBsb25nCitpMDBhZnVuYyAobG9uZyAqYWRkcmVzcykKK3sKKyAgc3RydWN0IHN0a19zdGF0IHN0YXR1czsKKyAgc3RydWN0IHN0a190cmFpbGVyICp0cmFpbGVyOworICBsb25nICpibG9jaywgc2l6ZTsKKyAgbG9uZyByZXN1bHQgPSAwOworCisgIC8qIFdlIHdhbnQgdG8gaXRlcmF0ZSB0aHJvdWdoIGFsbCBvZiB0aGUgc2VnbWVudHMuICBUaGUgZmlyc3QKKyAgICAgc3RlcCBpcyB0byBnZXQgdGhlIHN0YWNrIHN0YXR1cyBzdHJ1Y3R1cmUuICBXZSBjb3VsZCBkbyB0aGlzCisgICAgIG1vcmUgcXVpY2tseSBhbmQgbW9yZSBkaXJlY3RseSwgcGVyaGFwcywgYnkgcmVmZXJlbmNpbmcgdGhlCisgICAgICRMTTAwIGNvbW1vbiBibG9jaywgYnV0IEkga25vdyB0aGF0IHRoaXMgd29ya3MuICAqLworCisgIFNUS1NUQVQgKCZzdGF0dXMpOworCisgIC8qIFNldCB1cCB0aGUgaXRlcmF0aW9uLiAgKi8KKworICB0cmFpbGVyID0gKHN0cnVjdCBzdGtfdHJhaWxlciAqKSAoc3RhdHVzLmN1cnJlbnRfYWRkcmVzcworCQkJCSAgICArIHN0YXR1cy5jdXJyZW50X3NpemUKKwkJCQkgICAgLSAxNSk7CisKKyAgLyogVGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgc3RhY2sgc2VnbWVudC4gIFRoZXJlZm9yZSBpdCBpcworICAgICBhIGZhdGFsIGVycm9yIGlmICJ0cmFpbGVyIiBpcyBudWxsLiAgKi8KKworICBpZiAodHJhaWxlciA9PSAwKQorICAgIGFib3J0ICgpOworCisgIC8qIERpc2NhcmQgc2VnbWVudHMgdGhhdCBkbyBub3QgY29udGFpbiBvdXIgYXJndW1lbnQgYWRkcmVzcy4gICovCisKKyAgd2hpbGUgKHRyYWlsZXIgIT0gMCkKKyAgICB7CisgICAgICBibG9jayA9IChsb25nICopIHRyYWlsZXItPnRoaXNfYWRkcmVzczsKKyAgICAgIHNpemUgPSB0cmFpbGVyLT50aGlzX3NpemU7CisgICAgICBpZiAoYmxvY2sgPT0gMCB8fCBzaXplID09IDApCisJYWJvcnQgKCk7CisgICAgICB0cmFpbGVyID0gKHN0cnVjdCBzdGtfdHJhaWxlciAqKSB0cmFpbGVyLT5saW5rOworICAgICAgaWYgKChibG9jayA8PSBhZGRyZXNzKSAmJiAoYWRkcmVzcyA8IChibG9jayArIHNpemUpKSkKKwlicmVhazsKKyAgICB9CisKKyAgLyogU2V0IHRoZSByZXN1bHQgdG8gdGhlIG9mZnNldCBpbiB0aGlzIHNlZ21lbnQgYW5kIGFkZCB0aGUgc2l6ZXMKKyAgICAgb2YgYWxsIHByZWRlY2Vzc29yIHNlZ21lbnRzLiAgKi8KKworICByZXN1bHQgPSBhZGRyZXNzIC0gYmxvY2s7CisKKyAgaWYgKHRyYWlsZXIgPT0gMCkKKyAgICB7CisgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICBkbworICAgIHsKKyAgICAgIGlmICh0cmFpbGVyLT50aGlzX3NpemUgPD0gMCkKKwlhYm9ydCAoKTsKKyAgICAgIHJlc3VsdCArPSB0cmFpbGVyLT50aGlzX3NpemU7CisgICAgICB0cmFpbGVyID0gKHN0cnVjdCBzdGtfdHJhaWxlciAqKSB0cmFpbGVyLT5saW5rOworICAgIH0KKyAgd2hpbGUgKHRyYWlsZXIgIT0gMCk7CisKKyAgLyogV2UgYXJlIGRvbmUuICBOb3RlIHRoYXQgaWYgeW91IHByZXNlbnQgYSBib2d1cyBhZGRyZXNzIChvbmUKKyAgICAgbm90IGluIGFueSBzZWdtZW50KSwgeW91IHdpbGwgZ2V0IGEgZGlmZmVyZW50IG51bWJlciBiYWNrLCBmb3JtZWQKKyAgICAgZnJvbSBzdWJ0cmFjdGluZyB0aGUgYWRkcmVzcyBvZiB0aGUgZmlyc3QgYmxvY2suICBUaGlzIGlzIHByb2JhYmx5CisgICAgIG5vdCB3aGF0IHlvdSB3YW50LiAgKi8KKworICByZXR1cm4gKHJlc3VsdCk7Cit9CisKKyMgICBlbHNlIC8qIG5vdCBDUkFZMiAqLworLyogU3RhY2sgYWRkcmVzcyBmdW5jdGlvbiBmb3IgYSBDUkFZLTEsIENSQVkgWC1NUCwgb3IgQ1JBWSBZLU1QLgorICAgRGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgdGhlIGNlbGwgd2l0aGluIHRoZSBzdGFjaywKKyAgIGdpdmVuIHRoZSBhZGRyZXNzIG9mIHRoZSBjZWxsLiAgVGhlIHB1cnBvc2Ugb2YgdGhpcworICAgcm91dGluZSBpcyB0byBsaW5lYXJpemUsIGluIHNvbWUgc2Vuc2UsIHN0YWNrIGFkZHJlc3NlcworICAgZm9yIGFsbG9jYS4gICovCisKK3N0YXRpYyBsb25nCitpMDBhZnVuYyAobG9uZyBhZGRyZXNzKQoreworICBsb25nIHN0a2wgPSAwOworCisgIGxvbmcgc2l6ZSwgcHNlZywgdGhpc19zZWdtZW50LCBzdGFjazsKKyAgbG9uZyByZXN1bHQgPSAwOworCisgIHN0cnVjdCBzdGFja19zZWdtZW50X2xpbmthZ2UgKnNzcHRyOworCisgIC8qIFJlZ2lzdGVyIEI2NyBjb250YWlucyB0aGUgYWRkcmVzcyBvZiB0aGUgZW5kIG9mIHRoZQorICAgICBjdXJyZW50IHN0YWNrIHNlZ21lbnQuICBJZiB5b3UgKGFzIGEgc3VicHJvZ3JhbSkgc3RvcmUKKyAgICAgeW91ciByZWdpc3RlcnMgb24gdGhlIHN0YWNrIGFuZCBmaW5kIHRoYXQgeW91IGFyZSBwYXN0CisgICAgIHRoZSBjb250ZW50cyBvZiBCNjcsIHlvdSBoYXZlIG92ZXJmbG93ZWQgdGhlIHNlZ21lbnQuCisKKyAgICAgQjY3IGFsc28gcG9pbnRzIHRvIHRoZSBzdGFjayBzZWdtZW50IGxpbmthZ2UgY29udHJvbAorICAgICBhcmVhLCB3aGljaCBpcyB3aGF0IHdlIGFyZSByZWFsbHkgaW50ZXJlc3RlZCBpbi4gICovCisKKyAgc3RrbCA9IENSQVlfU1RBQ0tTRUdfRU5EICgpOworICBzc3B0ciA9IChzdHJ1Y3Qgc3RhY2tfc2VnbWVudF9saW5rYWdlICopIHN0a2w7CisKKyAgLyogSWYgb25lIHN1YnRyYWN0cyAnc2l6ZScgZnJvbSB0aGUgZW5kIG9mIHRoZSBzZWdtZW50LAorICAgICBvbmUgaGFzIHRoZSBhZGRyZXNzIG9mIHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBzZWdtZW50LgorCisgICAgIElmIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBzZWdtZW50LCAncHNlZycgd2lsbCBiZQorICAgICBub256ZXJvLiAgKi8KKworICBwc2VnID0gc3NwdHItPnNzcHNlZzsKKyAgc2l6ZSA9IHNzcHRyLT5zc3NpemU7CisKKyAgdGhpc19zZWdtZW50ID0gc3RrbCAtIHNpemU7CisKKyAgLyogSXQgaXMgcG9zc2libGUgdGhhdCBjYWxsaW5nIHRoaXMgcm91dGluZSBpdHNlbGYgY2F1c2VkCisgICAgIGEgc3RhY2sgb3ZlcmZsb3cuICBEaXNjYXJkIHN0YWNrIHNlZ21lbnRzIHdoaWNoIGRvIG5vdAorICAgICBjb250YWluIHRoZSB0YXJnZXQgYWRkcmVzcy4gICovCisKKyAgd2hpbGUgKCEodGhpc19zZWdtZW50IDw9IGFkZHJlc3MgJiYgYWRkcmVzcyA8PSBzdGtsKSkKKyAgICB7CisjICAgIGlmZGVmIERFQlVHX0kwMEFGVU5DCisgICAgICBmcHJpbnRmIChzdGRlcnIsICIlMDExbyAlMDExbyAlMDExb1xuIiwgdGhpc19zZWdtZW50LCBhZGRyZXNzLCBzdGtsKTsKKyMgICAgZW5kaWYKKyAgICAgIGlmIChwc2VnID09IDApCisJYnJlYWs7CisgICAgICBzdGtsID0gc3RrbCAtIHBzZWc7CisgICAgICBzc3B0ciA9IChzdHJ1Y3Qgc3RhY2tfc2VnbWVudF9saW5rYWdlICopIHN0a2w7CisgICAgICBzaXplID0gc3NwdHItPnNzc2l6ZTsKKyAgICAgIHBzZWcgPSBzc3B0ci0+c3Nwc2VnOworICAgICAgdGhpc19zZWdtZW50ID0gc3RrbCAtIHNpemU7CisgICAgfQorCisgIHJlc3VsdCA9IGFkZHJlc3MgLSB0aGlzX3NlZ21lbnQ7CisKKyAgLyogSWYgeW91IHN1YnRyYWN0IHBzZWcgZnJvbSB0aGUgY3VycmVudCBlbmQgb2YgdGhlIHN0YWNrLAorICAgICB5b3UgZ2V0IHRoZSBhZGRyZXNzIG9mIHRoZSBwcmV2aW91cyBzdGFjayBzZWdtZW50J3MgZW5kLgorICAgICBUaGlzIHNlZW1zIGEgbGl0dGxlIGNvbnZvbHV0ZWQgdG8gbWUsIGJ1dCBJJ2xsIGJldCB5b3Ugc2F2ZQorICAgICBhIGN5Y2xlIHNvbWV3aGVyZS4gICovCisKKyAgd2hpbGUgKHBzZWcgIT0gMCkKKyAgICB7CisjICAgIGlmZGVmIERFQlVHX0kwMEFGVU5DCisgICAgICBmcHJpbnRmIChzdGRlcnIsICIlMDExbyAlMDExb1xuIiwgcHNlZywgc2l6ZSk7CisjICAgIGVuZGlmCisgICAgICBzdGtsID0gc3RrbCAtIHBzZWc7CisgICAgICBzc3B0ciA9IChzdHJ1Y3Qgc3RhY2tfc2VnbWVudF9saW5rYWdlICopIHN0a2w7CisgICAgICBzaXplID0gc3NwdHItPnNzc2l6ZTsKKyAgICAgIHBzZWcgPSBzc3B0ci0+c3Nwc2VnOworICAgICAgcmVzdWx0ICs9IHNpemU7CisgICAgfQorICByZXR1cm4gKHJlc3VsdCk7Cit9CisKKyMgICBlbmRpZiAvKiBub3QgQ1JBWTIgKi8KKyMgIGVuZGlmIC8qIENSQVkgKi8KKworIyBlbmRpZiAvKiBubyBhbGxvY2EgKi8KKyNlbmRpZiAvKiBub3QgR0NDIHZlcnNpb24gMiAqLwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYi9hbGxvY2FfLmggYi9wYXJ0ZWQtMS44LjcvbGliL2FsbG9jYV8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjI3NGI5Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYi9hbGxvY2FfLmgKQEAgLTAsMCArMSw1NCBAQAorLyogTWVtb3J5IGFsbG9jYXRpb24gb24gdGhlIHN0YWNrLgorCisgICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTksIDIwMDEtMjAwNCwgMjAwNi0yMDA3IEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsCisgICBVU0EuICAqLworCisvKiBBdm9pZCB1c2luZyB0aGUgc3ltYm9sIF9BTExPQ0FfSCBoZXJlLCBhcyBCaXNvbiBhc3N1bWVzIF9BTExPQ0FfSAorICAgbWVhbnMgdGhlcmUgaXMgYSByZWFsIGFsbG9jYSBmdW5jdGlvbi4gICovCisjaWZuZGVmIF9HTF9BTExPQ0FfSAorI2RlZmluZSBfR0xfQUxMT0NBX0gKKworLyogYWxsb2NhIChOKSByZXR1cm5zIGEgcG9pbnRlciB0byBOIGJ5dGVzIG9mIG1lbW9yeQorICAgYWxsb2NhdGVkIG9uIHRoZSBzdGFjaywgd2hpY2ggd2lsbCBsYXN0IHVudGlsIHRoZSBmdW5jdGlvbiByZXR1cm5zLgorICAgVXNlIG9mIGFsbG9jYSBzaG91bGQgYmUgYXZvaWRlZDoKKyAgICAgLSBpbnNpZGUgYXJndW1lbnRzIG9mIGZ1bmN0aW9uIGNhbGxzIC0gdW5kZWZpbmVkIGJlaGF2aW91ciwKKyAgICAgLSBpbiBpbmxpbmUgZnVuY3Rpb25zIC0gdGhlIGFsbG9jYXRpb24gbWF5IGFjdHVhbGx5IGxhc3QgdW50aWwgdGhlCisgICAgICAgY2FsbGluZyBmdW5jdGlvbiByZXR1cm5zLAorICAgICAtIGZvciBodWdlIE4gKHNheSwgTiA+PSA2NTUzNikgLSB5b3UgbmV2ZXIga25vdyBob3cgbGFyZ2UgKG9yIHNtYWxsKQorICAgICAgIHRoZSBzdGFjayBpcywgYW5kIHdoZW4gdGhlIHN0YWNrIGNhbm5vdCBmdWxmaWxsIHRoZSBtZW1vcnkgYWxsb2NhdGlvbgorICAgICAgIHJlcXVlc3QsIHRoZSBwcm9ncmFtIGp1c3QgY3Jhc2hlcy4KKyAqLworCisjaWZuZGVmIGFsbG9jYQorIyBpZmRlZiBfX0dOVUNfXworIyAgZGVmaW5lIGFsbG9jYSBfX2J1aWx0aW5fYWxsb2NhCisjIGVsaWYgZGVmaW5lZCBfQUlYCisjICBkZWZpbmUgYWxsb2NhIF9fYWxsb2NhCisjIGVsaWYgZGVmaW5lZCBfTVNDX1ZFUgorIyAgaW5jbHVkZSA8bWFsbG9jLmg+CisjICBkZWZpbmUgYWxsb2NhIF9hbGxvY2EKKyMgZWxzZQorIyAgaW5jbHVkZSA8c3RkZGVmLmg+CisjICBpZmRlZiAgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyMgIGVuZGlmCit2b2lkICphbGxvY2EgKHNpemVfdCk7CisjIGVuZGlmCisjZW5kaWYKKworI2VuZGlmIC8qIF9HTF9BTExPQ0FfSCAqLwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYi9hdGV4aXQuYyBiL3BhcnRlZC0xLjguNy9saWIvYXRleGl0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVmMzNlNQotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWIvYXRleGl0LmMKQEAgLTAsMCArMSwxMyBAQAorLyogV3JhcHBlciB0byBpbXBsZW1lbnQgQU5TSSBDJ3MgYXRleGl0IHVzaW5nIFN1bk9TJ3Mgb25fZXhpdC4gKi8KKy8qIFRoaXMgZnVuY3Rpb24gaXMgaW4gdGhlIHB1YmxpYyBkb21haW4uICAtLU1pa2UgU3R1bXAuICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworaW50CithdGV4aXQgKHZvaWQgKCpmKSAodm9pZCkpCit7CisgIC8qIElmIHRoZSBzeXN0ZW0gZG9lc24ndCBwcm92aWRlIGEgZGVmaW5pdGlvbiBmb3IgYXRleGl0LCB1c2Ugb25fZXhpdAorICAgICBpZiB0aGUgc3lzdGVtIHByb3ZpZGVzIHRoYXQuICAqLworICBvbl9leGl0IChmLCAwKTsKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGliL2Jhc2VuYW1lLmMgYi9wYXJ0ZWQtMS44LjcvbGliL2Jhc2VuYW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJlMTdmZgotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWIvYmFzZW5hbWUuYwpAQCAtMCwwICsxLDEyOSBAQAorLyogYmFzZW5hbWUuYyAtLSByZXR1cm4gdGhlIGxhc3QgZWxlbWVudCBpbiBhIGZpbGUgbmFtZQorCisgICBDb3B5cmlnaHQgKEMpIDE5OTAsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaW5jbHVkZSAiZGlybmFtZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSAieGFsbG9jLmgiCisjaW5jbHVkZSAieHN0cm5kdXAuaCIKKworLyogUmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZSBsYXN0IGZpbGUgbmFtZSBjb21wb25lbnQgb2YgTkFNRS4gIElmCisgICBOQU1FIGhhcyBubyByZWxhdGl2ZSBmaWxlIG5hbWUgY29tcG9uZW50cyBiZWNhdXNlIGl0IGlzIGEgZmlsZQorICAgc3lzdGVtIHJvb3QsIHJldHVybiB0aGUgZW1wdHkgc3RyaW5nLiAgKi8KKworY2hhciAqCitsYXN0X2NvbXBvbmVudCAoY2hhciBjb25zdCAqbmFtZSkKK3sKKyAgY2hhciBjb25zdCAqYmFzZSA9IG5hbWUgKyBGSUxFX1NZU1RFTV9QUkVGSVhfTEVOIChuYW1lKTsKKyAgY2hhciBjb25zdCAqcDsKKyAgYm9vbCBzYXdfc2xhc2ggPSBmYWxzZTsKKworICB3aGlsZSAoSVNTTEFTSCAoKmJhc2UpKQorICAgIGJhc2UrKzsKKworICBmb3IgKHAgPSBiYXNlOyAqcDsgcCsrKQorICAgIHsKKyAgICAgIGlmIChJU1NMQVNIICgqcCkpCisJc2F3X3NsYXNoID0gdHJ1ZTsKKyAgICAgIGVsc2UgaWYgKHNhd19zbGFzaCkKKwl7CisJICBiYXNlID0gcDsKKwkgIHNhd19zbGFzaCA9IGZhbHNlOworCX0KKyAgICB9CisKKyAgcmV0dXJuIChjaGFyICopIGJhc2U7Cit9CisKKworLyogSW4gZ2VuZXJhbCwgd2UgY2FuJ3QgdXNlIHRoZSBidWlsdGluIGBiYXNlbmFtZScgZnVuY3Rpb24gaWYgYXZhaWxhYmxlLAorICAgc2luY2UgaXQgaGFzIGRpZmZlcmVudCBtZWFuaW5ncyBpbiBkaWZmZXJlbnQgZW52aXJvbm1lbnRzLgorICAgSW4gc29tZSBlbnZpcm9ubWVudHMgdGhlIGJ1aWx0aW4gYGJhc2VuYW1lJyBtb2RpZmllcyBpdHMgYXJndW1lbnQuCisKKyAgIFJldHVybiB0aGUgbGFzdCBmaWxlIG5hbWUgY29tcG9uZW50IG9mIE5BTUUsIGFsbG9jYXRlZCB3aXRoCisgICB4bWFsbG9jLiAgT24gc3lzdGVtcyB3aXRoIGRyaXZlIGxldHRlcnMsIGEgbGVhZGluZyAiLi8iCisgICBkaXN0aW5ndWlzaGVzIHJlbGF0aXZlIG5hbWVzIHRoYXQgd291bGQgb3RoZXJ3aXNlIGxvb2sgbGlrZSBhIGRyaXZlCisgICBsZXR0ZXIuICBVbmxpa2UgUE9TSVggYmFzZW5hbWUoKSwgTkFNRSBjYW5ub3QgYmUgTlVMTCwKKyAgIGJhc2VfbmFtZSgiIikgcmV0dXJucyAiIiwgYW5kIHRoZSBmaXJzdCB0cmFpbGluZyBzbGFzaCBpcyBub3QKKyAgIHN0cmlwcGVkLgorCisgICBJZiBsc3RhdCAoTkFNRSkgd291bGQgc3VjY2VlZCwgdGhlbiB7IGNoZGlyIChkaXJfbmFtZSAoTkFNRSkpOworICAgbHN0YXQgKGJhc2VfbmFtZSAoTkFNRSkpOyB9IHdpbGwgYWNjZXNzIHRoZSBzYW1lIGZpbGUuICBMaWtld2lzZSwKKyAgIGlmIHRoZSBzZXF1ZW5jZSB7IGNoZGlyIChkaXJfbmFtZSAoTkFNRSkpOworICAgcmVuYW1lIChiYXNlX25hbWUgKE5BTUUpLCAiZm9vIik7IH0gc3VjY2VlZHMsIHlvdSBoYXZlIHJlbmFtZWQgTkFNRQorICAgdG8gImZvbyIgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IE5BTUUgd2FzIGluLiAgKi8KKworY2hhciAqCitiYXNlX25hbWUgKGNoYXIgY29uc3QgKm5hbWUpCit7CisgIGNoYXIgY29uc3QgKmJhc2UgPSBsYXN0X2NvbXBvbmVudCAobmFtZSk7CisgIHNpemVfdCBsZW5ndGg7CisKKyAgLyogSWYgdGhlcmUgaXMgbm8gbGFzdCBjb21wb25lbnQsIHRoZW4gbmFtZSBpcyBhIGZpbGUgc3lzdGVtIHJvb3Qgb3IgdGhlCisgICAgIGVtcHR5IHN0cmluZy4gICovCisgIGlmICghICpiYXNlKQorICAgIHJldHVybiB4c3RybmR1cCAobmFtZSwgYmFzZV9sZW4gKG5hbWUpKTsKKworICAvKiBDb2xsYXBzZSBhIHNlcXVlbmNlIG9mIHRyYWlsaW5nIHNsYXNoZXMgaW50byBvbmUuICAqLworICBsZW5ndGggPSBiYXNlX2xlbiAoYmFzZSk7CisgIGlmIChJU1NMQVNIIChiYXNlW2xlbmd0aF0pKQorICAgIGxlbmd0aCsrOworCisgIC8qIE9uIHN5c3RlbXMgd2l0aCBkcml2ZSBsZXR0ZXJzLCBgYS9iOmMnIG11c3QgcmV0dXJuIGAuL2I6YycgcmF0aGVyCisgICAgIHRoYW4gYGI6YycgdG8gYXZvaWQgY29uZnVzaW9uIHdpdGggYSBkcml2ZSBsZXR0ZXIuICBPbiBzeXN0ZW1zCisgICAgIHdpdGggcHVyZSBQT1NJWCBzZW1hbnRpY3MsIHRoaXMgaXMgbm90IGFuIGlzc3VlLiAgKi8KKyAgaWYgKEZJTEVfU1lTVEVNX1BSRUZJWF9MRU4gKGJhc2UpKQorICAgIHsKKyAgICAgIGNoYXIgKnAgPSB4bWFsbG9jIChsZW5ndGggKyAzKTsKKyAgICAgIHBbMF0gPSAnLic7CisgICAgICBwWzFdID0gJy8nOworICAgICAgbWVtY3B5IChwICsgMiwgYmFzZSwgbGVuZ3RoKTsKKyAgICAgIHBbbGVuZ3RoICsgMl0gPSAnXDAnOworICAgICAgcmV0dXJuIHA7CisgICAgfQorCisgIC8qIEZpbmFsbHksIGNvcHkgdGhlIGJhc2VuYW1lLiAgKi8KKyAgcmV0dXJuIHhzdHJuZHVwIChiYXNlLCBsZW5ndGgpOworfQorCisvKiBSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgYmFzZW5hbWUgTkFNRS4gIFR5cGljYWxseSBOQU1FIGlzIHRoZQorICAgdmFsdWUgcmV0dXJuZWQgYnkgYmFzZV9uYW1lIG9yIGxhc3RfY29tcG9uZW50LiAgQWN0IGxpa2Ugc3RybGVuCisgICAoTkFNRSksIGV4Y2VwdCBvbWl0IGFsbCB0cmFpbGluZyBzbGFzaGVzLiAgKi8KKworc2l6ZV90CitiYXNlX2xlbiAoY2hhciBjb25zdCAqbmFtZSkKK3sKKyAgc2l6ZV90IGxlbjsKKyAgc2l6ZV90IHByZWZpeF9sZW4gPSBGSUxFX1NZU1RFTV9QUkVGSVhfTEVOIChuYW1lKTsKKworICBmb3IgKGxlbiA9IHN0cmxlbiAobmFtZSk7ICAxIDwgbGVuICYmIElTU0xBU0ggKG5hbWVbbGVuIC0gMV0pOyAgbGVuLS0pCisgICAgY29udGludWU7CisKKyAgaWYgKERPVUJMRV9TTEFTSF9JU19ESVNUSU5DVF9ST09UICYmIGxlbiA9PSAxCisgICAgICAmJiBJU1NMQVNIIChuYW1lWzBdKSAmJiBJU1NMQVNIIChuYW1lWzFdKSAmJiAhIG5hbWVbMl0pCisgICAgcmV0dXJuIDI7CisKKyAgaWYgKEZJTEVfU1lTVEVNX0RSSVZFX1BSRUZJWF9DQU5fQkVfUkVMQVRJVkUgJiYgcHJlZml4X2xlbgorICAgICAgJiYgbGVuID09IHByZWZpeF9sZW4gJiYgSVNTTEFTSCAobmFtZVtwcmVmaXhfbGVuXSkpCisgICAgcmV0dXJuIHByZWZpeF9sZW4gKyAxOworCisgIHJldHVybiBsZW47Cit9CmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGliL2NhbGxvYy5jIGIvcGFydGVkLTEuOC43L2xpYi9jYWxsb2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGIxZTFlCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYi9jYWxsb2MuYwpAQCAtMCwwICsxLDQ0IEBACisvKiBjYWxsb2MoKSBmdW5jdGlvbiB0aGF0IGlzIGdsaWJjIGNvbXBhdGlibGUuCisgICBUaGlzIHdyYXBwZXIgZnVuY3Rpb24gaXMgcmVxdWlyZWQgYXQgbGVhc3Qgb24gVHJ1NjQgVU5JWCA1LjEuCisgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworCisvKiB3cml0dGVuIGJ5IEppbSBNZXllcmluZyAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjdW5kZWYgY2FsbG9jCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworLyogQWxsb2NhdGUgYW5kIHplcm8tZmlsbCBhbiBOeFMtYnl0ZSBibG9jayBvZiBtZW1vcnkgZnJvbSB0aGUgaGVhcC4KKyAgIElmIE4gb3IgUyBpcyB6ZXJvLCBhbGxvY2F0ZSBhbmQgemVyby1maWxsIGEgMS1ieXRlIGJsb2NrLiAgKi8KKwordm9pZCAqCitycGxfY2FsbG9jIChzaXplX3Qgbiwgc2l6ZV90IHMpCit7CisgIHNpemVfdCBieXRlczsKKworICBpZiAobiA9PSAwIHx8IHMgPT0gMCkKKyAgICByZXR1cm4gY2FsbG9jICgxLCAxKTsKKworICAvKiBEZWZlbmQgYWdhaW5zdCBidWdneSBjYWxsb2MgaW1wbGVtZW50YXRpb25zIHRoYXQgbWlzaGFuZGxlCisgICAgIHNpemVfdCBvdmVyZmxvdy4gICovCisgIGJ5dGVzID0gbiAqIHM7CisgIGlmIChieXRlcyAvIHMgIT0gbikKKyAgICByZXR1cm4gTlVMTDsKKworICByZXR1cm4gY2FsbG9jIChuLCBzKTsKK30KZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWIvY2xvc2Utc3RyZWFtLmMgYi9wYXJ0ZWQtMS44LjcvbGliL2Nsb3NlLXN0cmVhbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZDBkNjgKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGliL2Nsb3NlLXN0cmVhbS5jCkBAIC0wLDAgKzEsNzYgQEAKKy8qIENsb3NlIGEgc3RyZWFtLCB3aXRoIG5pY2VyIGVycm9yIGNoZWNraW5nIHRoYW4gZmNsb3NlJ3MuCisKKyAgIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwNCwgMjAwNiBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpbmNsdWRlICJjbG9zZS1zdHJlYW0uaCIKKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkYm9vbC5oPgorCisjaW5jbHVkZSAiX19mcGVuZGluZy5oIgorCisjaWYgVVNFX1VOTE9DS0VEX0lPCisjIGluY2x1ZGUgInVubG9ja2VkLWlvLmgiCisjZW5kaWYKKworLyogQ2xvc2UgU1RSRUFNLiAgUmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bCwgRU9GIChzZXR0aW5nIGVycm5vKQorICAgb3RoZXJ3aXNlLiAgQSBmYWlsdXJlIG1pZ2h0IHNldCBlcnJubyB0byAwIGlmIHRoZSBlcnJvciBudW1iZXIKKyAgIGNhbm5vdCBiZSBkZXRlcm1pbmVkLgorCisgICBJZiBhIHByb2dyYW0gd3JpdGVzICphbnl0aGluZyogdG8gU1RSRUFNLCB0aGF0IHByb2dyYW0gc2hvdWxkIGNsb3NlCisgICBTVFJFQU0gYW5kIG1ha2Ugc3VyZSB0aGF0IGl0IHN1Y2NlZWRzIGJlZm9yZSBleGl0aW5nLiAgT3RoZXJ3aXNlLAorICAgc3VwcG9zZSB0aGF0IHlvdSBnbyB0byB0aGUgZXh0cmVtZSBvZiBjaGVja2luZyB0aGUgcmV0dXJuIHN0YXR1cworICAgb2YgZXZlcnkgZnVuY3Rpb24gdGhhdCBkb2VzIGFuIGV4cGxpY2l0IHdyaXRlIHRvIFNUUkVBTS4gIFRoZSBsYXN0CisgICBwcmludGYgY2FuIHN1Y2NlZWQgaW4gd3JpdGluZyB0byB0aGUgaW50ZXJuYWwgc3RyZWFtIGJ1ZmZlciwgYW5kIHlldAorICAgdGhlIGZjbG9zZShTVFJFQU0pIGNvdWxkIHN0aWxsIGZhaWwgKGR1ZSBlLmcuLCB0byBhIGRpc2sgZnVsbCBlcnJvcikKKyAgIHdoZW4gaXQgdHJpZXMgdG8gd3JpdGUgb3V0IHRoYXQgYnVmZmVyZWQgZGF0YS4gIFRodXMsIHlvdSB3b3VsZCBiZQorICAgbGVmdCB3aXRoIGFuIGluY29tcGxldGUgb3V0cHV0IGZpbGUgYW5kIHRoZSBvZmZlbmRpbmcgcHJvZ3JhbSB3b3VsZAorICAgZXhpdCBzdWNjZXNzZnVsbHkuICBFdmVuIGNhbGxpbmcgZmZsdXNoIGlzIG5vdCBhbHdheXMgc3VmZmljaWVudCwKKyAgIHNpbmNlIHNvbWUgZmlsZSBzeXN0ZW1zIChORlMgYW5kIENPREEpIGJ1ZmZlciB3cml0dGVuL2ZsdXNoZWQgZGF0YQorICAgdW50aWwgYW4gYWN0dWFsIGNsb3NlIGNhbGwuCisKKyAgIEJlc2lkZXMsIGl0J3Mgd2FzdGVmdWwgdG8gY2hlY2sgdGhlIHJldHVybiB2YWx1ZSBmcm9tIGV2ZXJ5IGNhbGwKKyAgIHRoYXQgd3JpdGVzIHRvIFNUUkVBTSAtLSBqdXN0IGxldCB0aGUgaW50ZXJuYWwgc3RyZWFtIHN0YXRlIHJlY29yZAorICAgdGhlIGZhaWx1cmUuICBUaGF0J3Mgd2hhdCB0aGUgZmVycm9yIHRlc3QgaXMgY2hlY2tpbmcgYmVsb3cuICAqLworCitpbnQKK2Nsb3NlX3N0cmVhbSAoRklMRSAqc3RyZWFtKQoreworICBib29sIHNvbWVfcGVuZGluZyA9IChfX2ZwZW5kaW5nIChzdHJlYW0pICE9IDApOworICBib29sIHByZXZfZmFpbCA9IChmZXJyb3IgKHN0cmVhbSkgIT0gMCk7CisgIGJvb2wgZmNsb3NlX2ZhaWwgPSAoZmNsb3NlIChzdHJlYW0pICE9IDApOworCisgIC8qIFJldHVybiBhbiBlcnJvciBpbmRpY2F0aW9uIGlmIHRoZXJlIHdhcyBhIHByZXZpb3VzIGZhaWx1cmUgb3IgaWYKKyAgICAgZmNsb3NlIGZhaWxlZCwgd2l0aCBvbmUgZXhjZXB0aW9uOiBpZ25vcmUgYW4gZmNsb3NlIGZhaWx1cmUgaWYKKyAgICAgdGhlcmUgd2FzIG5vIHByZXZpb3VzIGVycm9yLCBubyBkYXRhIHJlbWFpbnMgdG8gYmUgZmx1c2hlZCwgYW5kCisgICAgIGZjbG9zZSBmYWlsZWQgd2l0aCBFQkFERi4gIFRoYXQgY2FuIGhhcHBlbiB3aGVuIGEgcHJvZ3JhbSBsaWtlIGNwCisgICAgIGlzIGludm9rZWQgbGlrZSB0aGlzIGBjcCBhIGIgPiYtJyAoaS5lLiwgd2l0aCBzdGFuZGFyZCBvdXRwdXQKKyAgICAgY2xvc2VkKSBhbmQgZG9lc24ndCBnZW5lcmF0ZSBhbnkgb3V0cHV0IChoZW5jZSBubyBwcmV2aW91cyBlcnJvcgorICAgICBhbmQgbm90aGluZyB0byBiZSBmbHVzaGVkKS4gICovCisKKyAgaWYgKHByZXZfZmFpbCB8fCAoZmNsb3NlX2ZhaWwgJiYgKHNvbWVfcGVuZGluZyB8fCBlcnJubyAhPSBFQkFERikpKQorICAgIHsKKyAgICAgIGlmICghIGZjbG9zZV9mYWlsKQorCWVycm5vID0gMDsKKyAgICAgIHJldHVybiBFT0Y7CisgICAgfQorCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYi9jbG9zZS1zdHJlYW0uaCBiL3BhcnRlZC0xLjguNy9saWIvY2xvc2Utc3RyZWFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUzZDQxOQotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWIvY2xvc2Utc3RyZWFtLmgKQEAgLTAsMCArMSwyIEBACisjaW5jbHVkZSA8c3RkaW8uaD4KK2ludCBjbG9zZV9zdHJlYW0gKEZJTEUgKnN0cmVhbSk7CmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGliL2Nsb3Nlb3V0LmMgYi9wYXJ0ZWQtMS44LjcvbGliL2Nsb3Nlb3V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMwZjE2ZgotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWIvY2xvc2VvdXQuYwpAQCAtMCwwICsxLDg2IEBACisvKiBDbG9zZSBzdGFuZGFyZCBvdXRwdXQgYW5kIHN0YW5kYXJkIGVycm9yLCBleGl0aW5nIHdpdGggYSBkaWFnbm9zdGljIG9uIGVycm9yLgorCisgICBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDQsIDIwMDYgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaW5jbHVkZSAiY2xvc2VvdXQuaCIKKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgImdldHRleHQuaCIKKyNkZWZpbmUgXyhtc2dpZCkgZ2V0dGV4dCAobXNnaWQpCisKKyNpbmNsdWRlICJjbG9zZS1zdHJlYW0uaCIKKyNpbmNsdWRlICJlcnJvci5oIgorI2luY2x1ZGUgImV4aXRmYWlsLmgiCisjaW5jbHVkZSAicXVvdGVhcmcuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKmZpbGVfbmFtZTsKKworLyogU2V0IHRoZSBmaWxlIG5hbWUgdG8gYmUgcmVwb3J0ZWQgaW4gdGhlIGV2ZW50IGFuIGVycm9yIGlzIGRldGVjdGVkCisgICBieSBjbG9zZV9zdGRvdXQuICAqLwordm9pZAorY2xvc2Vfc3Rkb3V0X3NldF9maWxlX25hbWUgKGNvbnN0IGNoYXIgKmZpbGUpCit7CisgIGZpbGVfbmFtZSA9IGZpbGU7Cit9CisKKy8qIENsb3NlIHN0YW5kYXJkIG91dHB1dC4gIE9uIGVycm9yLCBpc3N1ZSBhIGRpYWdub3N0aWMgYW5kIF9leGl0CisgICB3aXRoIHN0YXR1cyAnZXhpdF9mYWlsdXJlJy4KKworICAgQWxzbyBjbG9zZSBzdGFuZGFyZCBlcnJvci4gIE9uIGVycm9yLCBfZXhpdCB3aXRoIHN0YXR1cyAnZXhpdF9mYWlsdXJlJy4KKworICAgU2luY2UgY2xvc2Vfc3Rkb3V0IGlzIGNvbW1vbmx5IHJlZ2lzdGVyZWQgdmlhICdhdGV4aXQnLCBQT1NJWAorICAgYW5kIHRoZSBDIHN0YW5kYXJkIGJvdGggc2F5IHRoYXQgaXQgc2hvdWxkIG5vdCBjYWxsICdleGl0JywKKyAgIGJlY2F1c2UgdGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZCBpZiAnZXhpdCcgaXMgY2FsbGVkIG1vcmUgdGhhbgorICAgb25jZS4gIFNvIGl0IGNhbGxzICdfZXhpdCcgaW5zdGVhZCBvZiAnZXhpdCcuICBJZiBjbG9zZV9zdGRvdXQKKyAgIGlzIHJlZ2lzdGVyZWQgdmlhIGF0ZXhpdCBiZWZvcmUgb3RoZXIgZnVuY3Rpb25zIGFyZSByZWdpc3RlcmVkLAorICAgdGhlIG90aGVyIGZ1bmN0aW9ucyBjYW4gYWN0IGJlZm9yZSB0aGlzIF9leGl0IGlzIGludm9rZWQuCisKKyAgIEFwcGxpY2F0aW9ucyB0aGF0IHVzZSBjbG9zZV9zdGRvdXQgc2hvdWxkIGZsdXNoIGFueSBzdHJlYW1zCisgICBvdGhlciB0aGFuIHN0ZG91dCBhbmQgc3RkZXJyIGJlZm9yZSBleGl0aW5nLCBzaW5jZSB0aGUgY2FsbCB0bworICAgX2V4aXQgd2lsbCBieXBhc3Mgb3RoZXIgYnVmZmVyIGZsdXNoaW5nLiAgQXBwbGljYXRpb25zIHNob3VsZAorICAgYmUgZmx1c2hpbmcgYW5kIGNsb3Npbmcgb3RoZXIgc3RyZWFtcyBhbnl3YXksIHRvIGNoZWNrIGZvciBJL08KKyAgIGVycm9ycy4gIEFsc28sIGFwcGxpY2F0aW9ucyBzaG91bGQgbm90IHVzZSB0bXBmaWxlLCBzaW5jZSBfZXhpdAorICAgY2FuIGJ5cGFzcyB0aGUgcmVtb3ZhbCBvZiB0aGVzZSBmaWxlcy4KKworICAgSXQncyBpbXBvcnRhbnQgdG8gZGV0ZWN0IHN1Y2ggZmFpbHVyZXMgYW5kIGV4aXQgbm9uemVybyBiZWNhdXNlIG1hbnkKKyAgIHRvb2xzIChtb3N0IG5vdGFibHkgYG1ha2UnIGFuZCBvdGhlciBidWlsZC1tYW5hZ2VtZW50IHN5c3RlbXMpIGRlcGVuZAorICAgb24gYmVpbmcgYWJsZSB0byBkZXRlY3QgZmFpbHVyZSBpbiBvdGhlciB0b29scyB2aWEgdGhlaXIgZXhpdCBzdGF0dXMuICAqLworCit2b2lkCitjbG9zZV9zdGRvdXQgKHZvaWQpCit7CisgIGlmIChjbG9zZV9zdHJlYW0gKHN0ZG91dCkgIT0gMCkKKyAgICB7CisgICAgICBjaGFyIGNvbnN0ICp3cml0ZV9lcnJvciA9IF8oIndyaXRlIGVycm9yIik7CisgICAgICBpZiAoZmlsZV9uYW1lKQorCWVycm9yICgwLCBlcnJubywgIiVzOiAlcyIsIHF1b3RlYXJnX2NvbG9uIChmaWxlX25hbWUpLAorCSAgICAgICB3cml0ZV9lcnJvcik7CisgICAgICBlbHNlCisJZXJyb3IgKDAsIGVycm5vLCAiJXMiLCB3cml0ZV9lcnJvcik7CisKKyAgICAgIF9leGl0IChleGl0X2ZhaWx1cmUpOworICAgIH0KKworICAgaWYgKGNsb3NlX3N0cmVhbSAoc3RkZXJyKSAhPSAwKQorICAgICBfZXhpdCAoZXhpdF9mYWlsdXJlKTsKK30KZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWIvY2xvc2VvdXQuaCBiL3BhcnRlZC0xLjguNy9saWIvY2xvc2VvdXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmVkMjNiCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYi9jbG9zZW91dC5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qIENsb3NlIHN0YW5kYXJkIG91dHB1dCBhbmQgc3RhbmRhcmQgZXJyb3IuCisKKyAgIENvcHlyaWdodCAoQykgMTk5OCwgMjAwMCwgMjAwMywgMjAwNCwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisKKyNpZm5kZWYgQ0xPU0VPVVRfSAorIyBkZWZpbmUgQ0xPU0VPVVRfSCAxCisKKyMgaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworIyBlbmRpZgorCit2b2lkIGNsb3NlX3N0ZG91dF9zZXRfZmlsZV9uYW1lIChjb25zdCBjaGFyICpmaWxlKTsKK3ZvaWQgY2xvc2Vfc3Rkb3V0ICh2b2lkKTsKKworIyBpZmRlZiBfX2NwbHVzcGx1cworfQorIyBlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWIvY29uZmlnLmNoYXJzZXQgYi9wYXJ0ZWQtMS44LjcvbGliL2NvbmZpZy5jaGFyc2V0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE0OGVhNDQKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGliL2NvbmZpZy5jaGFyc2V0CkBAIC0wLDAgKzEsNjM5IEBACisjISAvYmluL3NoCisjIE91dHB1dCBhIHN5c3RlbSBkZXBlbmRlbnQgdGFibGUgb2YgY2hhcmFjdGVyIGVuY29kaW5nIGFsaWFzZXMuCisjCisjICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDQsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyMgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyMKKyMgVGhlIHRhYmxlIGNvbnNpc3RzIG9mIGxpbmVzIG9mIHRoZSBmb3JtCisjICAgIEFMSUFTICBDQU5PTklDQUwKKyMKKyMgQUxJQVMgaXMgdGhlIChzeXN0ZW0gZGVwZW5kZW50KSByZXN1bHQgb2YgIm5sX2xhbmdpbmZvIChDT0RFU0VUKSIuCisjIEFMSUFTIGlzIGNvbXBhcmVkIGluIGEgY2FzZSBzZW5zaXRpdmUgd2F5LgorIworIyBDQU5PTklDQUwgaXMgdGhlIEdOVSBjYW5vbmljYWwgbmFtZSBmb3IgdGhpcyBjaGFyYWN0ZXIgZW5jb2RpbmcuCisjIEl0IG11c3QgYmUgYW4gZW5jb2Rpbmcgc3VwcG9ydGVkIGJ5IGxpYmljb252LiBTdXBwb3J0IGJ5IEdOVSBsaWJjIGlzCisjIGFsc28gZGVzaXJhYmxlLiBDQU5PTklDQUwgaXMgY2FzZSBpbnNlbnNpdGl2ZS4gVXN1YWxseSBhbiB1cHBlciBjYXNlCisjIE1JTUUgY2hhcnNldCBuYW1lIGlzIHByZWZlcnJlZC4KKyMgVGhlIGN1cnJlbnQgbGlzdCBvZiBHTlUgY2Fub25pY2FsIGNoYXJzZXQgbmFtZXMgaXMgYXMgZm9sbG93cy4KKyMKKyMgICAgICAgbmFtZSAgICAgICAgICAgICAgTUlNRT8gICAgICAgICAgICAgdXNlZCBieSB3aGljaCBzeXN0ZW1zCisjICAgQVNDSUksIEFOU0lfWDMuNC0xOTY4ICAgICAgIGdsaWJjIHNvbGFyaXMgZnJlZWJzZCBuZXRic2QgZGFyd2luCisjICAgSVNPLTg4NTktMSAgICAgICAgICAgICAgWSAgIGdsaWJjIGFpeCBocHV4IGlyaXggb3NmIHNvbGFyaXMgZnJlZWJzZCBuZXRic2QgZGFyd2luCisjICAgSVNPLTg4NTktMiAgICAgICAgICAgICAgWSAgIGdsaWJjIGFpeCBocHV4IGlyaXggb3NmIHNvbGFyaXMgZnJlZWJzZCBuZXRic2QgZGFyd2luCisjICAgSVNPLTg4NTktMyAgICAgICAgICAgICAgWSAgIGdsaWJjIHNvbGFyaXMKKyMgICBJU08tODg1OS00ICAgICAgICAgICAgICBZICAgb3NmIHNvbGFyaXMgZnJlZWJzZCBuZXRic2QgZGFyd2luCisjICAgSVNPLTg4NTktNSAgICAgICAgICAgICAgWSAgIGdsaWJjIGFpeCBocHV4IGlyaXggb3NmIHNvbGFyaXMgZnJlZWJzZCBuZXRic2QgZGFyd2luCisjICAgSVNPLTg4NTktNiAgICAgICAgICAgICAgWSAgIGdsaWJjIGFpeCBocHV4IHNvbGFyaXMKKyMgICBJU08tODg1OS03ICAgICAgICAgICAgICBZICAgZ2xpYmMgYWl4IGhwdXggaXJpeCBvc2Ygc29sYXJpcyBuZXRic2QgZGFyd2luCisjICAgSVNPLTg4NTktOCAgICAgICAgICAgICAgWSAgIGdsaWJjIGFpeCBocHV4IG9zZiBzb2xhcmlzCisjICAgSVNPLTg4NTktOSAgICAgICAgICAgICAgWSAgIGdsaWJjIGFpeCBocHV4IGlyaXggb3NmIHNvbGFyaXMgZGFyd2luCisjICAgSVNPLTg4NTktMTMgICAgICAgICAgICAgICAgIGdsaWJjIG5ldGJzZCBkYXJ3aW4KKyMgICBJU08tODg1OS0xNCAgICAgICAgICAgICAgICAgZ2xpYmMKKyMgICBJU08tODg1OS0xNSAgICAgICAgICAgICAgICAgZ2xpYmMgYWl4IG9zZiBzb2xhcmlzIGZyZWVic2QgZGFyd2luCisjICAgS09JOC1SICAgICAgICAgICAgICAgICAgWSAgIGdsaWJjIHNvbGFyaXMgZnJlZWJzZCBuZXRic2QgZGFyd2luCisjICAgS09JOC1VICAgICAgICAgICAgICAgICAgWSAgIGdsaWJjIGZyZWVic2QgbmV0YnNkIGRhcndpbgorIyAgIEtPSTgtVCAgICAgICAgICAgICAgICAgICAgICBnbGliYworIyAgIENQNDM3ICAgICAgICAgICAgICAgICAgICAgICBkb3MKKyMgICBDUDc3NSAgICAgICAgICAgICAgICAgICAgICAgZG9zCisjICAgQ1A4NTAgICAgICAgICAgICAgICAgICAgICAgIGFpeCBvc2YgZG9zCisjICAgQ1A4NTIgICAgICAgICAgICAgICAgICAgICAgIGRvcworIyAgIENQODU1ICAgICAgICAgICAgICAgICAgICAgICBkb3MKKyMgICBDUDg1NiAgICAgICAgICAgICAgICAgICAgICAgYWl4CisjICAgQ1A4NTcgICAgICAgICAgICAgICAgICAgICAgIGRvcworIyAgIENQODYxICAgICAgICAgICAgICAgICAgICAgICBkb3MKKyMgICBDUDg2MiAgICAgICAgICAgICAgICAgICAgICAgZG9zCisjICAgQ1A4NjQgICAgICAgICAgICAgICAgICAgICAgIGRvcworIyAgIENQODY1ICAgICAgICAgICAgICAgICAgICAgICBkb3MKKyMgICBDUDg2NiAgICAgICAgICAgICAgICAgICAgICAgZnJlZWJzZCBuZXRic2QgZGFyd2luIGRvcworIyAgIENQODY5ICAgICAgICAgICAgICAgICAgICAgICBkb3MKKyMgICBDUDg3NCAgICAgICAgICAgICAgICAgICAgICAgd29lMzIgZG9zCisjICAgQ1A5MjIgICAgICAgICAgICAgICAgICAgICAgIGFpeAorIyAgIENQOTMyICAgICAgICAgICAgICAgICAgICAgICBhaXggd29lMzIgZG9zCisjICAgQ1A5NDMgICAgICAgICAgICAgICAgICAgICAgIGFpeAorIyAgIENQOTQ5ICAgICAgICAgICAgICAgICAgICAgICBvc2Ygd29lMzIgZG9zCisjICAgQ1A5NTAgICAgICAgICAgICAgICAgICAgICAgIHdvZTMyIGRvcworIyAgIENQMTA0NiAgICAgICAgICAgICAgICAgICAgICBhaXgKKyMgICBDUDExMjQgICAgICAgICAgICAgICAgICAgICAgYWl4CisjICAgQ1AxMTI1ICAgICAgICAgICAgICAgICAgICAgIGRvcworIyAgIENQMTEyOSAgICAgICAgICAgICAgICAgICAgICBhaXgKKyMgICBDUDEyNTAgICAgICAgICAgICAgICAgICAgICAgd29lMzIKKyMgICBDUDEyNTEgICAgICAgICAgICAgICAgICAgICAgZ2xpYmMgc29sYXJpcyBuZXRic2QgZGFyd2luIHdvZTMyCisjICAgQ1AxMjUyICAgICAgICAgICAgICAgICAgICAgIGFpeCB3b2UzMgorIyAgIENQMTI1MyAgICAgICAgICAgICAgICAgICAgICB3b2UzMgorIyAgIENQMTI1NCAgICAgICAgICAgICAgICAgICAgICB3b2UzMgorIyAgIENQMTI1NSAgICAgICAgICAgICAgICAgICAgICBnbGliYyB3b2UzMgorIyAgIENQMTI1NiAgICAgICAgICAgICAgICAgICAgICB3b2UzMgorIyAgIENQMTI1NyAgICAgICAgICAgICAgICAgICAgICB3b2UzMgorIyAgIEdCMjMxMiAgICAgICAgICAgICAgICAgIFkgICBnbGliYyBhaXggaHB1eCBpcml4IHNvbGFyaXMgZnJlZWJzZCBuZXRic2QgZGFyd2luCisjICAgRVVDLUpQICAgICAgICAgICAgICAgICAgWSAgIGdsaWJjIGFpeCBocHV4IGlyaXggb3NmIHNvbGFyaXMgZnJlZWJzZCBuZXRic2QgZGFyd2luCisjICAgRVVDLUtSICAgICAgICAgICAgICAgICAgWSAgIGdsaWJjIGFpeCBocHV4IGlyaXggb3NmIHNvbGFyaXMgZnJlZWJzZCBuZXRic2QgZGFyd2luCisjICAgRVVDLVRXICAgICAgICAgICAgICAgICAgICAgIGdsaWJjIGFpeCBocHV4IGlyaXggb3NmIHNvbGFyaXMgbmV0YnNkCisjICAgQklHNSAgICAgICAgICAgICAgICAgICAgWSAgIGdsaWJjIGFpeCBocHV4IG9zZiBzb2xhcmlzIGZyZWVic2QgbmV0YnNkIGRhcndpbgorIyAgIEJJRzUtSEtTQ1MgICAgICAgICAgICAgICAgICBnbGliYyBzb2xhcmlzCisjICAgR0JLICAgICAgICAgICAgICAgICAgICAgICAgIGdsaWJjIGFpeCBvc2Ygc29sYXJpcyB3b2UzMiBkb3MKKyMgICBHQjE4MDMwICAgICAgICAgICAgICAgICAgICAgZ2xpYmMgc29sYXJpcyBuZXRic2QKKyMgICBTSElGVF9KSVMgICAgICAgICAgICAgICBZICAgaHB1eCBvc2Ygc29sYXJpcyBmcmVlYnNkIG5ldGJzZCBkYXJ3aW4KKyMgICBKT0hBQiAgICAgICAgICAgICAgICAgICAgICAgZ2xpYmMgc29sYXJpcyB3b2UzMgorIyAgIFRJUy02MjAgICAgICAgICAgICAgICAgICAgICBnbGliYyBhaXggaHB1eCBvc2Ygc29sYXJpcworIyAgIFZJU0NJSSAgICAgICAgICAgICAgICAgIFkgICBnbGliYworIyAgIFRDVk41NzEyLTEgICAgICAgICAgICAgICAgICBnbGliYworIyAgIEdFT1JHSUFOLVBTICAgICAgICAgICAgICAgICBnbGliYworIyAgIEhQLVJPTUFOOCAgICAgICAgICAgICAgICAgICBocHV4CisjICAgSFAtQVJBQklDOCAgICAgICAgICAgICAgICAgIGhwdXgKKyMgICBIUC1HUkVFSzggICAgICAgICAgICAgICAgICAgaHB1eAorIyAgIEhQLUhFQlJFVzggICAgICAgICAgICAgICAgICBocHV4CisjICAgSFAtVFVSS0lTSDggICAgICAgICAgICAgICAgIGhwdXgKKyMgICBIUC1LQU5BOCAgICAgICAgICAgICAgICAgICAgaHB1eAorIyAgIERFQy1LQU5KSSAgICAgICAgICAgICAgICAgICBvc2YKKyMgICBERUMtSEFOWVUgICAgICAgICAgICAgICAgICAgb3NmCisjICAgVVRGLTggICAgICAgICAgICAgICAgICAgWSAgIGdsaWJjIGFpeCBocHV4IG9zZiBzb2xhcmlzIG5ldGJzZCBkYXJ3aW4KKyMKKyMgTm90ZTogTmFtZXMgd2hpY2ggYXJlIG5vdCBtYXJrZWQgYXMgYmVpbmcgYSBNSU1FIG5hbWUgc2hvdWxkIG5vdCBiZSB1c2VkIGluCisjIEludGVybmV0IHByb3RvY29scyBmb3IgaW5mb3JtYXRpb24gaW50ZXJjaGFuZ2UgKG1haWwsIG5ld3MsIGV0Yy4pLgorIworIyBOb3RlOiBBU0NJSSBhbmQgQU5TSV9YMy40LTE5NjggYXJlIHN5bm9ueW1vdXMgY2Fub25pY2FsIG5hbWVzLiBBcHBsaWNhdGlvbnMKKyMgbXVzdCB1bmRlcnN0YW5kIGJvdGggbmFtZXMgYW5kIHRyZWF0IHRoZW0gYXMgZXF1aXZhbGVudC4KKyMKKyMgVGhlIGZpcnN0IGFyZ3VtZW50IHBhc3NlZCB0byB0aGlzIGZpbGUgaXMgdGhlIGNhbm9uaWNhbCBob3N0IHNwZWNpZmljYXRpb24sCisjICAgIENQVV9UWVBFLU1BTlVGQUNUVVJFUi1PUEVSQVRJTkdfU1lTVEVNCisjIG9yCisjICAgIENQVV9UWVBFLU1BTlVGQUNUVVJFUi1LRVJORUwtT1BFUkFUSU5HX1NZU1RFTQorCitob3N0PSIkMSIKK29zPWBlY2hvICIkaG9zdCIgfCBzZWQgLWUgJ3MvXlteLV0qLVteLV0qLVwoLipcKSQvXDEvJ2AKK2VjaG8gIiMgVGhpcyBmaWxlIGNvbnRhaW5zIGEgdGFibGUgb2YgY2hhcmFjdGVyIGVuY29kaW5nIGFsaWFzZXMsIgorZWNobyAiIyBzdWl0YWJsZSBmb3Igb3BlcmF0aW5nIHN5c3RlbSAnJHtvc30nLiIKK2VjaG8gIiMgSXQgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29uZmlnLmNoYXJzZXQuIgorIyBMaXN0IG9mIHJlZmVyZW5jZXMsIHVwZGF0ZWQgZHVyaW5nIGluc3RhbGxhdGlvbjoKK2VjaG8gIiMgUGFja2FnZXMgdXNpbmcgdGhpcyBmaWxlOiAiCitjYXNlICIkb3MiIGluCisgICAgbGludXgtZ251bGliYzEqKQorCSMgTGludXggbGliYzUgZG9lc24ndCBoYXZlIG5sX2xhbmdpbmZvKENPREVTRVQpOyB0aGVyZWZvcmUKKwkjIGxvY2FsY2hhcnNldC5jIGZhbGxzIGJhY2sgdG8gdXNpbmcgdGhlIGZ1bGwgbG9jYWxlIG5hbWUKKwkjIGZyb20gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcy4KKwllY2hvICJDIEFTQ0lJIgorCWVjaG8gIlBPU0lYIEFTQ0lJIgorCWZvciBsIGluIGFmIGFmX1pBIGNhIGNhX0VTIGRhIGRhX0RLIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xVIFwKKwkgICAgICAgICBlbiBlbl9BVSBlbl9CVyBlbl9DQSBlbl9ESyBlbl9HQiBlbl9JRSBlbl9OWiBlbl9VUyBlbl9aQSBcCisJICAgICAgICAgZW5fWlcgZXMgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfRE8gZXNfRUMgZXNfRVMgZXNfR1QgXAorCSAgICAgICAgIGVzX0hOIGVzX01YIGVzX1BBIGVzX1BFIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IFwKKwkgICAgICAgICBldF9FRSBldSBldV9FUyBmaSBmaV9GSSBmbyBmb19GTyBmciBmcl9CRSBmcl9DQSBmcl9DSCBmcl9GUiBcCisJICAgICAgICAgZnJfTFUgZ2EgZ2FfSUUgZ2wgZ2xfRVMgaWQgaWRfSUQgaW4gaW5fSUQgaXMgaXNfSVMgaXQgaXRfQ0ggXAorCSAgICAgICAgIGl0X0lUIGtsIGtsX0dMIG5sIG5sX0JFIG5sX05MIG5vIG5vX05PIHB0IHB0X0JSIHB0X1BUIHN2IFwKKwkgICAgICAgICBzdl9GSSBzdl9TRTsgZG8KKwkgIGVjaG8gIiRsIElTTy04ODU5LTEiCisJICBlY2hvICIkbC5pc28tODg1OS0xIElTTy04ODU5LTEiCisJICBlY2hvICIkbC5pc28tODg1OS0xNSBJU08tODg1OS0xNSIKKwkgIGVjaG8gIiRsLmlzby04ODU5LTE1QGV1cm8gSVNPLTg4NTktMTUiCisJICBlY2hvICIkbEBldXJvIElTTy04ODU5LTE1IgorCSAgZWNobyAiJGwuY3AtNDM3IENQNDM3IgorCSAgZWNobyAiJGwuY3AtODUwIENQODUwIgorCSAgZWNobyAiJGwuY3AtMTI1MiBDUDEyNTIiCisJICBlY2hvICIkbC5jcC0xMjUyQGV1cm8gQ1AxMjUyIgorCSAgI2VjaG8gIiRsLmF0YXJpLXN0IEFUQVJJLVNUIiAjIG5vdCBhIGNvbW1vbmx5IHVzZWQgZW5jb2RpbmcKKwkgIGVjaG8gIiRsLnV0Zi04IFVURi04IgorCSAgZWNobyAiJGwudXRmLThAZXVybyBVVEYtOCIKKwlkb25lCisJZm9yIGwgaW4gY3MgY3NfQ1ogaHIgaHJfSFIgaHUgaHVfSFUgcGwgcGxfUEwgcm8gcm9fUk8gc2sgc2tfU0sgc2wgXAorCSAgICAgICAgIHNsX1NJIHNyIHNyX0NTIHNyX1lVOyBkbworCSAgZWNobyAiJGwgSVNPLTg4NTktMiIKKwkgIGVjaG8gIiRsLmlzby04ODU5LTIgSVNPLTg4NTktMiIKKwkgIGVjaG8gIiRsLmNwLTg1MiBDUDg1MiIKKwkgIGVjaG8gIiRsLmNwLTEyNTAgQ1AxMjUwIgorCSAgZWNobyAiJGwudXRmLTggVVRGLTgiCisJZG9uZQorCWZvciBsIGluIG1rIG1rX01LIHJ1IHJ1X1JVOyBkbworCSAgZWNobyAiJGwgSVNPLTg4NTktNSIKKwkgIGVjaG8gIiRsLmlzby04ODU5LTUgSVNPLTg4NTktNSIKKwkgIGVjaG8gIiRsLmtvaTgtciBLT0k4LVIiCisJICBlY2hvICIkbC5jcC04NjYgQ1A4NjYiCisJICBlY2hvICIkbC5jcC0xMjUxIENQMTI1MSIKKwkgIGVjaG8gIiRsLnV0Zi04IFVURi04IgorCWRvbmUKKwlmb3IgbCBpbiBhciBhcl9TQTsgZG8KKwkgIGVjaG8gIiRsIElTTy04ODU5LTYiCisJICBlY2hvICIkbC5pc28tODg1OS02IElTTy04ODU5LTYiCisJICBlY2hvICIkbC5jcC04NjQgQ1A4NjQiCisJICAjZWNobyAiJGwuY3AtODY4IENQODY4IiAjIG5vdCBhIGNvbW1vbmx5IHVzZWQgZW5jb2RpbmcKKwkgIGVjaG8gIiRsLmNwLTEyNTYgQ1AxMjU2IgorCSAgZWNobyAiJGwudXRmLTggVVRGLTgiCisJZG9uZQorCWZvciBsIGluIGVsIGVsX0dSIGdyIGdyX0dSOyBkbworCSAgZWNobyAiJGwgSVNPLTg4NTktNyIKKwkgIGVjaG8gIiRsLmlzby04ODU5LTcgSVNPLTg4NTktNyIKKwkgIGVjaG8gIiRsLmNwLTg2OSBDUDg2OSIKKwkgIGVjaG8gIiRsLmNwLTEyNTMgQ1AxMjUzIgorCSAgZWNobyAiJGwuY3AtMTI1M0BldXJvIENQMTI1MyIKKwkgIGVjaG8gIiRsLnV0Zi04IFVURi04IgorCSAgZWNobyAiJGwudXRmLThAZXVybyBVVEYtOCIKKwlkb25lCisJZm9yIGwgaW4gaGUgaGVfSUwgaXcgaXdfSUw7IGRvCisJICBlY2hvICIkbCBJU08tODg1OS04IgorCSAgZWNobyAiJGwuaXNvLTg4NTktOCBJU08tODg1OS04IgorCSAgZWNobyAiJGwuY3AtODYyIENQODYyIgorCSAgZWNobyAiJGwuY3AtMTI1NSBDUDEyNTUiCisJICBlY2hvICIkbC51dGYtOCBVVEYtOCIKKwlkb25lCisJZm9yIGwgaW4gdHIgdHJfVFI7IGRvCisJICBlY2hvICIkbCBJU08tODg1OS05IgorCSAgZWNobyAiJGwuaXNvLTg4NTktOSBJU08tODg1OS05IgorCSAgZWNobyAiJGwuY3AtODU3IENQODU3IgorCSAgZWNobyAiJGwuY3AtMTI1NCBDUDEyNTQiCisJICBlY2hvICIkbC51dGYtOCBVVEYtOCIKKwlkb25lCisJZm9yIGwgaW4gbHQgbHRfTFQgbHYgbHZfTFY7IGRvCisJICAjZWNobyAiJGwgQkFMVElDIiAjIG5vdCBhIGNvbW1vbmx5IHVzZWQgZW5jb2RpbmcsIHdyb25nIGVuY29kaW5nIG5hbWUKKwkgIGVjaG8gIiRsIElTTy04ODU5LTEzIgorCWRvbmUKKwlmb3IgbCBpbiBydV9VQSB1ayB1a19VQTsgZG8KKwkgIGVjaG8gIiRsIEtPSTgtVSIKKwlkb25lCisJZm9yIGwgaW4gemggemhfQ047IGRvCisJICAjZWNobyAiJGwgR0JfMjMxMi04MCIgIyBub3QgYSBjb21tb25seSB1c2VkIGVuY29kaW5nLCB3cm9uZyBlbmNvZGluZyBuYW1lCisJICBlY2hvICIkbCBHQjIzMTIiCisJZG9uZQorCWZvciBsIGluIGphIGphX0pQIGphX0pQLkVVQzsgZG8KKwkgIGVjaG8gIiRsIEVVQy1KUCIKKwlkb25lCisJZm9yIGwgaW4ga28ga29fS1I7IGRvCisJICBlY2hvICIkbCBFVUMtS1IiCisJZG9uZQorCWZvciBsIGluIHRoIHRoX1RIOyBkbworCSAgZWNobyAiJGwgVElTLTYyMCIKKwlkb25lCisJZm9yIGwgaW4gZmEgZmFfSVI7IGRvCisJICAjZWNobyAiJGwgSVNJUkktMzM0MiIgIyBhIGJyb2tlbiBlbmNvZGluZworCSAgZWNobyAiJGwudXRmLTggVVRGLTgiCisJZG9uZQorCTs7CisgICAgbGludXgqIHwgKi1nbnUqKQorCSMgV2l0aCBnbGliYy0yLjEgb3IgbmV3ZXIsIHdlIGRvbid0IG5lZWQgYW55IGNhbm9uaWNhbGl6YXRpb24sCisJIyBiZWNhdXNlIGdsaWJjIGhhcyBpY29udiBhbmQgYm90aCBnbGliYyBhbmQgbGliaWNvbnYgc3VwcG9ydCBhbGwKKwkjIEdOVSBjYW5vbmljYWwgbmFtZXMgZGlyZWN0bHkuIFRoZXJlZm9yZSwgdGhlIE1ha2VmaWxlIGRvZXMgbm90CisJIyBuZWVkIHRvIGluc3RhbGwgdGhlIGFsaWFzIGZpbGUgYXQgYWxsLgorCSMgVGhlIGZvbGxvd2luZyBhcHBsaWVzIG9ubHkgdG8gZ2xpYmMtMi4wLnggYW5kIG9sZGVyIGxpYmNzLgorCWVjaG8gIklTT182NDYuSVJWOjE5ODMgQVNDSUkiCisJOzsKKyAgICBhaXgqKQorCWVjaG8gIklTTzg4NTktMSBJU08tODg1OS0xIgorCWVjaG8gIklTTzg4NTktMiBJU08tODg1OS0yIgorCWVjaG8gIklTTzg4NTktNSBJU08tODg1OS01IgorCWVjaG8gIklTTzg4NTktNiBJU08tODg1OS02IgorCWVjaG8gIklTTzg4NTktNyBJU08tODg1OS03IgorCWVjaG8gIklTTzg4NTktOCBJU08tODg1OS04IgorCWVjaG8gIklTTzg4NTktOSBJU08tODg1OS05IgorCWVjaG8gIklTTzg4NTktMTUgSVNPLTg4NTktMTUiCisJZWNobyAiSUJNLTg1MCBDUDg1MCIKKwllY2hvICJJQk0tODU2IENQODU2IgorCWVjaG8gIklCTS05MjEgSVNPLTg4NTktMTMiCisJZWNobyAiSUJNLTkyMiBDUDkyMiIKKwllY2hvICJJQk0tOTMyIENQOTMyIgorCWVjaG8gIklCTS05NDMgQ1A5NDMiCisJZWNobyAiSUJNLTEwNDYgQ1AxMDQ2IgorCWVjaG8gIklCTS0xMTI0IENQMTEyNCIKKwllY2hvICJJQk0tMTEyOSBDUDExMjkiCisJZWNobyAiSUJNLTEyNTIgQ1AxMjUyIgorCWVjaG8gIklCTS1ldWNDTiBHQjIzMTIiCisJZWNobyAiSUJNLWV1Y0pQIEVVQy1KUCIKKwllY2hvICJJQk0tZXVjS1IgRVVDLUtSIgorCWVjaG8gIklCTS1ldWNUVyBFVUMtVFciCisJZWNobyAiYmlnNSBCSUc1IgorCWVjaG8gIkdCSyBHQksiCisJZWNobyAiVElTLTYyMCBUSVMtNjIwIgorCWVjaG8gIlVURi04IFVURi04IgorCTs7CisgICAgaHB1eCopCisJZWNobyAiaXNvODg1OTEgSVNPLTg4NTktMSIKKwllY2hvICJpc284ODU5MiBJU08tODg1OS0yIgorCWVjaG8gImlzbzg4NTk1IElTTy04ODU5LTUiCisJZWNobyAiaXNvODg1OTYgSVNPLTg4NTktNiIKKwllY2hvICJpc284ODU5NyBJU08tODg1OS03IgorCWVjaG8gImlzbzg4NTk4IElTTy04ODU5LTgiCisJZWNobyAiaXNvODg1OTkgSVNPLTg4NTktOSIKKwllY2hvICJpc284ODU5MTUgSVNPLTg4NTktMTUiCisJZWNobyAicm9tYW44IEhQLVJPTUFOOCIKKwllY2hvICJhcmFiaWM4IEhQLUFSQUJJQzgiCisJZWNobyAiZ3JlZWs4IEhQLUdSRUVLOCIKKwllY2hvICJoZWJyZXc4IEhQLUhFQlJFVzgiCisJZWNobyAidHVya2lzaDggSFAtVFVSS0lTSDgiCisJZWNobyAia2FuYTggSFAtS0FOQTgiCisJZWNobyAidGlzNjIwIFRJUy02MjAiCisJZWNobyAiYmlnNSBCSUc1IgorCWVjaG8gImV1Y0pQIEVVQy1KUCIKKwllY2hvICJldWNLUiBFVUMtS1IiCisJZWNobyAiZXVjVFcgRVVDLVRXIgorCWVjaG8gImhwMTVDTiBHQjIzMTIiCisJI2VjaG8gImNjZGMgPyIgIyB3aGF0IGlzIHRoaXM/CisJZWNobyAiU0pJUyBTSElGVF9KSVMiCisJZWNobyAidXRmOCBVVEYtOCIKKwk7OworICAgIGlyaXgqKQorCWVjaG8gIklTTzg4NTktMSBJU08tODg1OS0xIgorCWVjaG8gIklTTzg4NTktMiBJU08tODg1OS0yIgorCWVjaG8gIklTTzg4NTktNSBJU08tODg1OS01IgorCWVjaG8gIklTTzg4NTktNyBJU08tODg1OS03IgorCWVjaG8gIklTTzg4NTktOSBJU08tODg1OS05IgorCWVjaG8gImV1Y0NOIEdCMjMxMiIKKwllY2hvICJldWNKUCBFVUMtSlAiCisJZWNobyAiZXVjS1IgRVVDLUtSIgorCWVjaG8gImV1Y1RXIEVVQy1UVyIKKwk7OworICAgIG9zZiopCisJZWNobyAiSVNPODg1OS0xIElTTy04ODU5LTEiCisJZWNobyAiSVNPODg1OS0yIElTTy04ODU5LTIiCisJZWNobyAiSVNPODg1OS00IElTTy04ODU5LTQiCisJZWNobyAiSVNPODg1OS01IElTTy04ODU5LTUiCisJZWNobyAiSVNPODg1OS03IElTTy04ODU5LTciCisJZWNobyAiSVNPODg1OS04IElTTy04ODU5LTgiCisJZWNobyAiSVNPODg1OS05IElTTy04ODU5LTkiCisJZWNobyAiSVNPODg1OS0xNSBJU08tODg1OS0xNSIKKwllY2hvICJjcDg1MCBDUDg1MCIKKwllY2hvICJiaWc1IEJJRzUiCisJZWNobyAiZGVjaGFueXUgREVDLUhBTllVIgorCWVjaG8gImRlY2hhbnppIEdCMjMxMiIKKwllY2hvICJkZWNrYW5qaSBERUMtS0FOSkkiCisJZWNobyAiZGVja29yZWFuIEVVQy1LUiIKKwllY2hvICJldWNKUCBFVUMtSlAiCisJZWNobyAiZXVjS1IgRVVDLUtSIgorCWVjaG8gImV1Y1RXIEVVQy1UVyIKKwllY2hvICJHQksgR0JLIgorCWVjaG8gIktTQzU2MDEgQ1A5NDkiCisJZWNobyAic2RlY2thbmppIEVVQy1KUCIKKwllY2hvICJTSklTIFNISUZUX0pJUyIKKwllY2hvICJUQUNUSVMgVElTLTYyMCIKKwllY2hvICJVVEYtOCBVVEYtOCIKKwk7OworICAgIHNvbGFyaXMqKQorCWVjaG8gIjY0NiBBU0NJSSIKKwllY2hvICJJU084ODU5LTEgSVNPLTg4NTktMSIKKwllY2hvICJJU084ODU5LTIgSVNPLTg4NTktMiIKKwllY2hvICJJU084ODU5LTMgSVNPLTg4NTktMyIKKwllY2hvICJJU084ODU5LTQgSVNPLTg4NTktNCIKKwllY2hvICJJU084ODU5LTUgSVNPLTg4NTktNSIKKwllY2hvICJJU084ODU5LTYgSVNPLTg4NTktNiIKKwllY2hvICJJU084ODU5LTcgSVNPLTg4NTktNyIKKwllY2hvICJJU084ODU5LTggSVNPLTg4NTktOCIKKwllY2hvICJJU084ODU5LTkgSVNPLTg4NTktOSIKKwllY2hvICJJU084ODU5LTE1IElTTy04ODU5LTE1IgorCWVjaG8gImtvaTgtciBLT0k4LVIiCisJZWNobyAiYW5zaS0xMjUxIENQMTI1MSIKKwllY2hvICJCSUc1IEJJRzUiCisJZWNobyAiQmlnNS1IS1NDUyBCSUc1LUhLU0NTIgorCWVjaG8gImdiMjMxMiBHQjIzMTIiCisJZWNobyAiR0JLIEdCSyIKKwllY2hvICJHQjE4MDMwIEdCMTgwMzAiCisJZWNobyAiY25zMTE2NDMgRVVDLVRXIgorCWVjaG8gIjU2MDEgRVVDLUtSIgorCWVjaG8gImtvX0tSLmpvaGFwOTIgSk9IQUIiCisJZWNobyAiZXVjSlAgRVVDLUpQIgorCWVjaG8gIlBDSyBTSElGVF9KSVMiCisJZWNobyAiVElTNjIwLjI1MzMgVElTLTYyMCIKKwkjZWNobyAic3VuX2V1X2dyZWVrID8iICMgd2hhdCBpcyB0aGlzPworCWVjaG8gIlVURi04IFVURi04IgorCTs7CisgICAgZnJlZWJzZCogfCBvczIqKQorCSMgRnJlZUJTRCA0LjIgZG9lc24ndCBoYXZlIG5sX2xhbmdpbmZvKENPREVTRVQpOyB0aGVyZWZvcmUKKwkjIGxvY2FsY2hhcnNldC5jIGZhbGxzIGJhY2sgdG8gdXNpbmcgdGhlIGZ1bGwgbG9jYWxlIG5hbWUKKwkjIGZyb20gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcy4KKwkjIExpa2V3aXNlIGZvciBPUy8yLiBPUy8yIGhhcyBYRnJlZTg2IGp1c3QgbGlrZSBGcmVlQlNELiBKdXN0CisJIyByZXVzZSBGcmVlQlNEJ3MgbG9jYWxlIGRhdGEgZm9yIE9TLzIuCisJZWNobyAiQyBBU0NJSSIKKwllY2hvICJVUy1BU0NJSSBBU0NJSSIKKwlmb3IgbCBpbiBsYV9MTiBsdF9MTjsgZG8KKwkgIGVjaG8gIiRsLkFTQ0lJIEFTQ0lJIgorCWRvbmUKKwlmb3IgbCBpbiBkYV9ESyBkZV9BVCBkZV9DSCBkZV9ERSBlbl9BVSBlbl9DQSBlbl9HQiBlbl9VUyBlc19FUyBcCisJICAgICAgICAgZmlfRkkgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgaXNfSVMgaXRfQ0ggaXRfSVQgbGFfTE4gXAorCSAgICAgICAgIGx0X0xOIG5sX0JFIG5sX05MIG5vX05PIHB0X1BUIHN2X1NFOyBkbworCSAgZWNobyAiJGwuSVNPXzg4NTktMSBJU08tODg1OS0xIgorCSAgZWNobyAiJGwuRElTXzg4NTktMTUgSVNPLTg4NTktMTUiCisJZG9uZQorCWZvciBsIGluIGNzX0NaIGhyX0hSIGh1X0hVIGxhX0xOIGx0X0xOIHBsX1BMIHNsX1NJOyBkbworCSAgZWNobyAiJGwuSVNPXzg4NTktMiBJU08tODg1OS0yIgorCWRvbmUKKwlmb3IgbCBpbiBsYV9MTiBsdF9MVDsgZG8KKwkgIGVjaG8gIiRsLklTT184ODU5LTQgSVNPLTg4NTktNCIKKwlkb25lCisJZm9yIGwgaW4gcnVfUlUgcnVfU1U7IGRvCisJICBlY2hvICIkbC5LT0k4LVIgS09JOC1SIgorCSAgZWNobyAiJGwuSVNPXzg4NTktNSBJU08tODg1OS01IgorCSAgZWNobyAiJGwuQ1A4NjYgQ1A4NjYiCisJZG9uZQorCWVjaG8gInVrX1VBLktPSTgtVSBLT0k4LVUiCisJZWNobyAiemhfVFcuQklHNSBCSUc1IgorCWVjaG8gInpoX1RXLkJpZzUgQklHNSIKKwllY2hvICJ6aF9DTi5FVUMgR0IyMzEyIgorCWVjaG8gImphX0pQLkVVQyBFVUMtSlAiCisJZWNobyAiamFfSlAuU0pJUyBTSElGVF9KSVMiCisJZWNobyAiamFfSlAuU2hpZnRfSklTIFNISUZUX0pJUyIKKwllY2hvICJrb19LUi5FVUMgRVVDLUtSIgorCTs7CisgICAgbmV0YnNkKikKKwllY2hvICI2NDYgQVNDSUkiCisJZWNobyAiSVNPODg1OS0xIElTTy04ODU5LTEiCisJZWNobyAiSVNPODg1OS0yIElTTy04ODU5LTIiCisJZWNobyAiSVNPODg1OS00IElTTy04ODU5LTQiCisJZWNobyAiSVNPODg1OS01IElTTy04ODU5LTUiCisJZWNobyAiSVNPODg1OS03IElTTy04ODU5LTciCisJZWNobyAiSVNPODg1OS0xMyBJU08tODg1OS0xMyIKKwllY2hvICJJU084ODU5LTE1IElTTy04ODU5LTE1IgorCWVjaG8gImV1Y0NOIEdCMjMxMiIKKwllY2hvICJldWNKUCBFVUMtSlAiCisJZWNobyAiZXVjS1IgRVVDLUtSIgorCWVjaG8gImV1Y1RXIEVVQy1UVyIKKwllY2hvICJCSUc1IEJJRzUiCisJZWNobyAiU0pJUyBTSElGVF9KSVMiCisJOzsKKyAgICBkYXJ3aW5bNTZdKikKKwkjIERhcndpbiA2LjggZG9lc24ndCBoYXZlIG5sX2xhbmdpbmZvKENPREVTRVQpOyB0aGVyZWZvcmUKKwkjIGxvY2FsY2hhcnNldC5jIGZhbGxzIGJhY2sgdG8gdXNpbmcgdGhlIGZ1bGwgbG9jYWxlIG5hbWUKKwkjIGZyb20gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcy4KKwllY2hvICJDIEFTQ0lJIgorCWZvciBsIGluIGVuX0FVIGVuX0NBIGVuX0dCIGVuX1VTIGxhX0xOOyBkbworCSAgZWNobyAiJGwuVVMtQVNDSUkgQVNDSUkiCisJZG9uZQorCWZvciBsIGluIGRhX0RLIGRlX0FUIGRlX0NIIGRlX0RFIGVuX0FVIGVuX0NBIGVuX0dCIGVuX1VTIGVzX0VTIFwKKwkgICAgICAgICBmaV9GSSBmcl9CRSBmcl9DQSBmcl9DSCBmcl9GUiBpc19JUyBpdF9DSCBpdF9JVCBubF9CRSBcCisJICAgICAgICAgbmxfTkwgbm9fTk8gcHRfUFQgc3ZfU0U7IGRvCisJICBlY2hvICIkbCBJU08tODg1OS0xIgorCSAgZWNobyAiJGwuSVNPODg1OS0xIElTTy04ODU5LTEiCisJICBlY2hvICIkbC5JU084ODU5LTE1IElTTy04ODU5LTE1IgorCWRvbmUKKwlmb3IgbCBpbiBsYV9MTjsgZG8KKwkgIGVjaG8gIiRsLklTTzg4NTktMSBJU08tODg1OS0xIgorCSAgZWNobyAiJGwuSVNPODg1OS0xNSBJU08tODg1OS0xNSIKKwlkb25lCisJZm9yIGwgaW4gY3NfQ1ogaHJfSFIgaHVfSFUgbGFfTE4gcGxfUEwgc2xfU0k7IGRvCisJICBlY2hvICIkbC5JU084ODU5LTIgSVNPLTg4NTktMiIKKwlkb25lCisJZm9yIGwgaW4gbGFfTE4gbHRfTFQ7IGRvCisJICBlY2hvICIkbC5JU084ODU5LTQgSVNPLTg4NTktNCIKKwlkb25lCisJZm9yIGwgaW4gcnVfUlU7IGRvCisJICBlY2hvICIkbC5LT0k4LVIgS09JOC1SIgorCSAgZWNobyAiJGwuSVNPODg1OS01IElTTy04ODU5LTUiCisJICBlY2hvICIkbC5DUDg2NiBDUDg2NiIKKwlkb25lCisJZm9yIGwgaW4gYmdfQkc7IGRvCisJICBlY2hvICIkbC5DUDEyNTEgQ1AxMjUxIgorCWRvbmUKKwllY2hvICJ1a19VQS5LT0k4LVUgS09JOC1VIgorCWVjaG8gInpoX1RXLkJJRzUgQklHNSIKKwllY2hvICJ6aF9UVy5CaWc1IEJJRzUiCisJZWNobyAiemhfQ04uRVVDIEdCMjMxMiIKKwllY2hvICJqYV9KUC5FVUMgRVVDLUpQIgorCWVjaG8gImphX0pQLlNKSVMgU0hJRlRfSklTIgorCWVjaG8gImtvX0tSLkVVQyBFVUMtS1IiCisJOzsKKyAgICBkYXJ3aW4qKQorCSMgRGFyd2luIDcuNSBoYXMgbmxfbGFuZ2luZm8oQ09ERVNFVCksIGJ1dCBpdCBpcyB1c2VsZXNzOgorCSMgLSBJdCByZXR1cm5zIHRoZSBlbXB0eSBzdHJpbmcgd2hlbiBMQU5HIGlzIHNldCB0byBhIGxvY2FsZSBvZiB0aGUKKwkjICAgZm9ybSBsbF9DQywgYWx0aG91Z2ggbGxfQ0MvTENfQ1RZUEUgaXMgYSBzeW1saW5rIHRvIGFuIFVURi04CisJIyAgIExDX0NUWVBFIGZpbGUuCisJIyAtIFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgTEFORywgTENfQ1RZUEUsIExDX0FMTCBhcmUgbm90IHNldCBieQorCSMgICB0aGUgc3lzdGVtOyBubF9sYW5naW5mbyhDT0RFU0VUKSByZXR1cm5zICJVUy1BU0NJSSIgaW4gdGhpcyBjYXNlLgorCSMgLSBUaGUgZG9jdW1lbnRhdGlvbiBzYXlzOgorCSMgICAgICIuLi4gYWxsIGNvZGUgdGhhdCBjYWxscyBCU0Qgc3lzdGVtIHJvdXRpbmVzIHNob3VsZCBlbnN1cmUKKwkjICAgICAgdGhhdCB0aGUgY29uc3QgKmNoYXIgcGFyYW1ldGVycyBvZiB0aGVzZSByb3V0aW5lcyBhcmUgaW4gVVRGLTgKKwkjICAgICAgZW5jb2RpbmcuIEFsbCBCU0Qgc3lzdGVtIGZ1bmN0aW9ucyBleHBlY3QgdGhlaXIgc3RyaW5nCisJIyAgICAgIHBhcmFtZXRlcnMgdG8gYmUgaW4gVVRGLTggZW5jb2RpbmcgYW5kIG5vdGhpbmcgZWxzZS4iCisJIyAgIEl0IGFsc28gc2F5cworCSMgICAgICJBbiBhZGRpdGlvbmFsIGNhdmVhdCBpcyB0aGF0IHN0cmluZyBwYXJhbWV0ZXJzIGZvciBmaWxlcywKKwkjICAgICAgcGF0aHMsIGFuZCBvdGhlciBmaWxlLXN5c3RlbSBlbnRpdGllcyBtdXN0IGJlIGluIGNhbm9uaWNhbAorCSMgICAgICBVVEYtOC4gSW4gYSBjYW5vbmljYWwgVVRGLTggVW5pY29kZSBzdHJpbmcsIGFsbCBkZWNvbXBvc2FibGUKKwkjICAgICAgY2hhcmFjdGVycyBhcmUgZGVjb21wb3NlZCAuLi4iCisJIyAgIGJ1dCB0aGlzIGlzIG5vdCB0cnVlOiBZb3UgY2FuIHBhc3Mgbm9uLWRlY29tcG9zZWQgVVRGLTggc3RyaW5ncworCSMgICB0byBmaWxlIHN5c3RlbSBmdW5jdGlvbnMsIGFuZCBpdCBpcyB0aGUgT1Mgd2hpY2ggd2lsbCBjb252ZXJ0CisJIyAgIHRoZW0gdG8gZGVjb21wb3NlZCBVVEYtOCBiZWZvcmUgYWNjZXNzaW5nIHRoZSBmaWxlIHN5c3RlbS4KKwkjIC0gVGhlIEFwcGxlIFRlcm1pbmFsIGFwcGxpY2F0aW9uIGRpc3BsYXlzIFVURi04IGJ5IGRlZmF1bHQuCisJIyAtIEhvd2V2ZXIsIG90aGVyIGFwcGxpY2F0aW9ucyBhcmUgZnJlZSB0byB1c2UgZGlmZmVyZW50IGVuY29kaW5nczoKKwkjICAgLSB4dGVybSB1c2VzIElTTy04ODU5LTEgYnkgZGVmYXVsdC4KKwkjICAgLSBUZXh0RWRpdCB1c2VzIE1hY1JvbWFuIGJ5IGRlZmF1bHQuCisJIyBXZSBwcmVmZXIgVVRGLTggb3ZlciBkZWNvbXBvc2VkIFVURi04LU1BQyBiZWNhdXNlIG9uZSBzaG91bGQKKwkjIG1pbmltaXplIHRoZSB1c2Ugb2YgZGVjb21wb3NlZCBVbmljb2RlLiBVbmZvcnR1bmF0ZWx5LCB0aHJvdWdoIHRoZQorCSMgRGFyd2luIGZpbGUgc3lzdGVtLCBkZWNvbXBvc2VkIFVURi04IHN0cmluZ3MgYXJlIGxlYWtlZCBpbnRvIHVzZXIKKwkjIHNwYWNlIG5ldmVydGhlbGVzcy4KKwllY2hvICIqIFVURi04IgorCTs7CisgICAgYmVvcyopCisJIyBCZU9TIGhhcyBhIHNpbmdsZSBsb2NhbGUsIGFuZCBpdCBoYXMgVVRGLTggZW5jb2RpbmcuCisJZWNobyAiKiBVVEYtOCIKKwk7OworICAgIG1zZG9zZGpncHAqKQorCSMgREpHUFAgMi4wMyBkb2Vzbid0IGhhdmUgbmxfbGFuZ2luZm8oQ09ERVNFVCk7IHRoZXJlZm9yZQorCSMgbG9jYWxjaGFyc2V0LmMgZmFsbHMgYmFjayB0byB1c2luZyB0aGUgZnVsbCBsb2NhbGUgbmFtZQorCSMgZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLgorCWVjaG8gIiMiCisJZWNobyAiIyBUaGUgZW5jb2RpbmdzIGdpdmVuIGhlcmUgbWF5IG5vdCBhbGwgYmUgY29ycmVjdC4iCisJZWNobyAiIyBJZiB5b3UgZmluZCB0aGF0IHRoZSBlbmNvZGluZyBnaXZlbiBmb3IgeW91ciBsYW5ndWFnZSBhbmQiCisJZWNobyAiIyBjb3VudHJ5IGlzIG5vdCB0aGUgb25lIHlvdXIgRE9TIG1hY2hpbmUgYWN0dWFsbHkgdXNlcywganVzdCIKKwllY2hvICIjIGNvcnJlY3QgaXQgaW4gdGhpcyBmaWxlLCBhbmQgc2VuZCBhIG1haWwgdG8iCisJZWNobyAiIyBKdWFuIE1hbnVlbCBHdWVycmVybyA8anVhbi5ndWVycmVyb0BnbXguZGU+IgorCWVjaG8gIiMgYW5kIEJydW5vIEhhaWJsZSA8YnJ1bm9AY2xpc3Aub3JnPi4iCisJZWNobyAiIyIKKwllY2hvICJDIEFTQ0lJIgorCSMgSVNPLTg4NTktMSBsYW5ndWFnZXMKKwllY2hvICJjYSBDUDg1MCIKKwllY2hvICJjYV9FUyBDUDg1MCIKKwllY2hvICJkYSBDUDg2NSIgICAgIyBub3QgQ1A4NTAgPz8KKwllY2hvICJkYV9ESyBDUDg2NSIgIyBub3QgQ1A4NTAgPz8KKwllY2hvICJkZSBDUDg1MCIKKwllY2hvICJkZV9BVCBDUDg1MCIKKwllY2hvICJkZV9DSCBDUDg1MCIKKwllY2hvICJkZV9ERSBDUDg1MCIKKwllY2hvICJlbiBDUDg1MCIKKwllY2hvICJlbl9BVSBDUDg1MCIgIyBub3QgQ1A0MzcgPz8KKwllY2hvICJlbl9DQSBDUDg1MCIKKwllY2hvICJlbl9HQiBDUDg1MCIKKwllY2hvICJlbl9OWiBDUDQzNyIKKwllY2hvICJlbl9VUyBDUDQzNyIKKwllY2hvICJlbl9aQSBDUDg1MCIgIyBub3QgQ1A0MzcgPz8KKwllY2hvICJlcyBDUDg1MCIKKwllY2hvICJlc19BUiBDUDg1MCIKKwllY2hvICJlc19CTyBDUDg1MCIKKwllY2hvICJlc19DTCBDUDg1MCIKKwllY2hvICJlc19DTyBDUDg1MCIKKwllY2hvICJlc19DUiBDUDg1MCIKKwllY2hvICJlc19DVSBDUDg1MCIKKwllY2hvICJlc19ETyBDUDg1MCIKKwllY2hvICJlc19FQyBDUDg1MCIKKwllY2hvICJlc19FUyBDUDg1MCIKKwllY2hvICJlc19HVCBDUDg1MCIKKwllY2hvICJlc19ITiBDUDg1MCIKKwllY2hvICJlc19NWCBDUDg1MCIKKwllY2hvICJlc19OSSBDUDg1MCIKKwllY2hvICJlc19QQSBDUDg1MCIKKwllY2hvICJlc19QWSBDUDg1MCIKKwllY2hvICJlc19QRSBDUDg1MCIKKwllY2hvICJlc19TViBDUDg1MCIKKwllY2hvICJlc19VWSBDUDg1MCIKKwllY2hvICJlc19WRSBDUDg1MCIKKwllY2hvICJldCBDUDg1MCIKKwllY2hvICJldF9FRSBDUDg1MCIKKwllY2hvICJldSBDUDg1MCIKKwllY2hvICJldV9FUyBDUDg1MCIKKwllY2hvICJmaSBDUDg1MCIKKwllY2hvICJmaV9GSSBDUDg1MCIKKwllY2hvICJmciBDUDg1MCIKKwllY2hvICJmcl9CRSBDUDg1MCIKKwllY2hvICJmcl9DQSBDUDg1MCIKKwllY2hvICJmcl9DSCBDUDg1MCIKKwllY2hvICJmcl9GUiBDUDg1MCIKKwllY2hvICJnYSBDUDg1MCIKKwllY2hvICJnYV9JRSBDUDg1MCIKKwllY2hvICJnZCBDUDg1MCIKKwllY2hvICJnZF9HQiBDUDg1MCIKKwllY2hvICJnbCBDUDg1MCIKKwllY2hvICJnbF9FUyBDUDg1MCIKKwllY2hvICJpZCBDUDg1MCIgICAgIyBub3QgQ1A0MzcgPz8KKwllY2hvICJpZF9JRCBDUDg1MCIgIyBub3QgQ1A0MzcgPz8KKwllY2hvICJpcyBDUDg2MSIgICAgIyBub3QgQ1A4NTAgPz8KKwllY2hvICJpc19JUyBDUDg2MSIgIyBub3QgQ1A4NTAgPz8KKwllY2hvICJpdCBDUDg1MCIKKwllY2hvICJpdF9DSCBDUDg1MCIKKwllY2hvICJpdF9JVCBDUDg1MCIKKwllY2hvICJsdCBDUDc3NSIKKwllY2hvICJsdF9MVCBDUDc3NSIKKwllY2hvICJsdiBDUDc3NSIKKwllY2hvICJsdl9MViBDUDc3NSIKKwllY2hvICJuYiBDUDg2NSIgICAgIyBub3QgQ1A4NTAgPz8KKwllY2hvICJuYl9OTyBDUDg2NSIgIyBub3QgQ1A4NTAgPz8KKwllY2hvICJubCBDUDg1MCIKKwllY2hvICJubF9CRSBDUDg1MCIKKwllY2hvICJubF9OTCBDUDg1MCIKKwllY2hvICJubiBDUDg2NSIgICAgIyBub3QgQ1A4NTAgPz8KKwllY2hvICJubl9OTyBDUDg2NSIgIyBub3QgQ1A4NTAgPz8KKwllY2hvICJubyBDUDg2NSIgICAgIyBub3QgQ1A4NTAgPz8KKwllY2hvICJub19OTyBDUDg2NSIgIyBub3QgQ1A4NTAgPz8KKwllY2hvICJwdCBDUDg1MCIKKwllY2hvICJwdF9CUiBDUDg1MCIKKwllY2hvICJwdF9QVCBDUDg1MCIKKwllY2hvICJzdiBDUDg1MCIKKwllY2hvICJzdl9TRSBDUDg1MCIKKwkjIElTTy04ODU5LTIgbGFuZ3VhZ2VzCisJZWNobyAiY3MgQ1A4NTIiCisJZWNobyAiY3NfQ1ogQ1A4NTIiCisJZWNobyAiaHIgQ1A4NTIiCisJZWNobyAiaHJfSFIgQ1A4NTIiCisJZWNobyAiaHUgQ1A4NTIiCisJZWNobyAiaHVfSFUgQ1A4NTIiCisJZWNobyAicGwgQ1A4NTIiCisJZWNobyAicGxfUEwgQ1A4NTIiCisJZWNobyAicm8gQ1A4NTIiCisJZWNobyAicm9fUk8gQ1A4NTIiCisJZWNobyAic2sgQ1A4NTIiCisJZWNobyAic2tfU0sgQ1A4NTIiCisJZWNobyAic2wgQ1A4NTIiCisJZWNobyAic2xfU0kgQ1A4NTIiCisJZWNobyAic3EgQ1A4NTIiCisJZWNobyAic3FfQUwgQ1A4NTIiCisJZWNobyAic3IgQ1A4NTIiICAgICMgQ1A4NTIgb3IgQ1A4NjYgb3IgQ1A4NTUgPz8KKwllY2hvICJzcl9DUyBDUDg1MiIgIyBDUDg1MiBvciBDUDg2NiBvciBDUDg1NSA/PworCWVjaG8gInNyX1lVIENQODUyIiAjIENQODUyIG9yIENQODY2IG9yIENQODU1ID8/CisJIyBJU08tODg1OS0zIGxhbmd1YWdlcworCWVjaG8gIm10IENQODUwIgorCWVjaG8gIm10X01UIENQODUwIgorCSMgSVNPLTg4NTktNSBsYW5ndWFnZXMKKwllY2hvICJiZSBDUDg2NiIKKwllY2hvICJiZV9CRSBDUDg2NiIKKwllY2hvICJiZyBDUDg2NiIgICAgIyBub3QgQ1A4NTUgPz8KKwllY2hvICJiZ19CRyBDUDg2NiIgIyBub3QgQ1A4NTUgPz8KKwllY2hvICJtayBDUDg2NiIgICAgIyBub3QgQ1A4NTUgPz8KKwllY2hvICJta19NSyBDUDg2NiIgIyBub3QgQ1A4NTUgPz8KKwllY2hvICJydSBDUDg2NiIKKwllY2hvICJydV9SVSBDUDg2NiIKKwllY2hvICJ1ayBDUDExMjUiCisJZWNobyAidWtfVUEgQ1AxMTI1IgorCSMgSVNPLTg4NTktNiBsYW5ndWFnZXMKKwllY2hvICJhciBDUDg2NCIKKwllY2hvICJhcl9BRSBDUDg2NCIKKwllY2hvICJhcl9EWiBDUDg2NCIKKwllY2hvICJhcl9FRyBDUDg2NCIKKwllY2hvICJhcl9JUSBDUDg2NCIKKwllY2hvICJhcl9JUiBDUDg2NCIKKwllY2hvICJhcl9KTyBDUDg2NCIKKwllY2hvICJhcl9LVyBDUDg2NCIKKwllY2hvICJhcl9NQSBDUDg2NCIKKwllY2hvICJhcl9PTSBDUDg2NCIKKwllY2hvICJhcl9RQSBDUDg2NCIKKwllY2hvICJhcl9TQSBDUDg2NCIKKwllY2hvICJhcl9TWSBDUDg2NCIKKwkjIElTTy04ODU5LTcgbGFuZ3VhZ2VzCisJZWNobyAiZWwgQ1A4NjkiCisJZWNobyAiZWxfR1IgQ1A4NjkiCisJIyBJU08tODg1OS04IGxhbmd1YWdlcworCWVjaG8gImhlIENQODYyIgorCWVjaG8gImhlX0lMIENQODYyIgorCSMgSVNPLTg4NTktOSBsYW5ndWFnZXMKKwllY2hvICJ0ciBDUDg1NyIKKwllY2hvICJ0cl9UUiBDUDg1NyIKKwkjIEphcGFuZXNlCisJZWNobyAiamEgQ1A5MzIiCisJZWNobyAiamFfSlAgQ1A5MzIiCisJIyBDaGluZXNlCisJZWNobyAiemhfQ04gR0JLIgorCWVjaG8gInpoX1RXIENQOTUwIiAjIG5vdCBDUDkzOCA/PworCSMgS29yZWFuCisJZWNobyAia3IgQ1A5NDkiICAgICMgbm90IENQOTM0ID8/CisJZWNobyAia3JfS1IgQ1A5NDkiICMgbm90IENQOTM0ID8/CisJIyBUaGFpCisJZWNobyAidGggQ1A4NzQiCisJZWNobyAidGhfVEggQ1A4NzQiCisJIyBPdGhlcgorCWVjaG8gImVvIENQODUwIgorCWVjaG8gImVvX0VPIENQODUwIgorCTs7Citlc2FjCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGliL2NvbmZpZy5oLmluIGIvcGFydGVkLTEuOC43L2xpYi9jb25maWcuaC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjIyZDI0Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYi9jb25maWcuaC5pbgpAQCAtMCwwICsxLDYwNCBAQAorLyogbGliL2NvbmZpZy5oLmluLiAgR2VuZXJhdGVkIGZyb20gY29uZmlndXJlLmFjIGJ5IGF1dG9oZWFkZXIuICAqLworCisvKiBEZWZpbmUgdGhpcyB0byBhbiBhYnNvbHV0ZSBuYW1lIG9mIDxpbnR0eXBlcy5oPi4gKi8KKyN1bmRlZiBBQlNPTFVURV9JTlRUWVBFU19ICisKKy8qIERlZmluZSB0aGlzIHRvIGFuIGFic29sdXRlIG5hbWUgb2YgPHN0ZGludC5oPi4gKi8KKyN1bmRlZiBBQlNPTFVURV9TVERJTlRfSAorCisvKiBEZWZpbmUgdGhpcyB0byBhbiBhYnNvbHV0ZSBuYW1lIG9mIDxzdGRsaWIuaD4uICovCisjdW5kZWYgQUJTT0xVVEVfU1RETElCX0gKKworLyogRGVmaW5lIHRoaXMgdG8gYW4gYWJzb2x1dGUgbmFtZSBvZiA8c3RyaW5nLmg+LiAqLworI3VuZGVmIEFCU09MVVRFX1NUUklOR19ICisKKy8qIERlZmluZSB0aGlzIHRvIGFuIGFic29sdXRlIG5hbWUgb2YgPHVuaXN0ZC5oPi4gKi8KKyN1bmRlZiBBQlNPTFVURV9VTklTVERfSAorCisvKiBEZWZpbmUgdGhpcyB0byBhbiBhYnNvbHV0ZSBuYW1lIG9mIDx3Y2hhci5oPi4gKi8KKyN1bmRlZiBBQlNPTFVURV9XQ0hBUl9ICisKKy8qIERlZmluZSB0aGlzIHRvIGFuIGFic29sdXRlIG5hbWUgb2YgPHdjdHlwZS5oPi4gKi8KKyN1bmRlZiBBQlNPTFVURV9XQ1RZUEVfSAorCisvKiBEZWZpbmUgdG8gdGhlIG51bWJlciBvZiBiaXRzIGluIHR5cGUgJ3B0cmRpZmZfdCcuICovCisjdW5kZWYgQklUU0laRU9GX1BUUkRJRkZfVAorCisvKiBEZWZpbmUgdG8gdGhlIG51bWJlciBvZiBiaXRzIGluIHR5cGUgJ3NpZ19hdG9taWNfdCcuICovCisjdW5kZWYgQklUU0laRU9GX1NJR19BVE9NSUNfVAorCisvKiBEZWZpbmUgdG8gdGhlIG51bWJlciBvZiBiaXRzIGluIHR5cGUgJ3NpemVfdCcuICovCisjdW5kZWYgQklUU0laRU9GX1NJWkVfVAorCisvKiBEZWZpbmUgdG8gdGhlIG51bWJlciBvZiBiaXRzIGluIHR5cGUgJ3djaGFyX3QnLiAqLworI3VuZGVmIEJJVFNJWkVPRl9XQ0hBUl9UCisKKy8qIERlZmluZSB0byB0aGUgbnVtYmVyIG9mIGJpdHMgaW4gdHlwZSAnd2ludF90Jy4gKi8KKyN1bmRlZiBCSVRTSVpFT0ZfV0lOVF9UCisKKy8qIERlZmluZSB0byBvbmUgb2YgYF9nZXRiNjcnLCBgR0VUQjY3JywgYGdldGI2NycgZm9yIENyYXktMiBhbmQgQ3JheS1ZTVAKKyAgIHN5c3RlbXMuIFRoaXMgZnVuY3Rpb24gaXMgcmVxdWlyZWQgZm9yIGBhbGxvY2EuYycgc3VwcG9ydCBvbiB0aG9zZSBzeXN0ZW1zLgorICAgKi8KKyN1bmRlZiBDUkFZX1NUQUNLU0VHX0VORAorCisvKiBEZWZpbmUgdG8gMSBpZiB1c2luZyBgYWxsb2NhLmMnLiAqLworI3VuZGVmIENfQUxMT0NBCisKKy8qIEVuYWJsZSBhc3NlcnRpb25zLCBldGMuICovCisjdW5kZWYgREVCVUcKKworLyogUHJvYmluZyBmdW5jdGlvbmFsaXR5IG9ubHkgKi8KKyN1bmRlZiBESVNDT1ZFUl9PTkxZCisKKy8qIERlZmluZSB0byAxIGlmIC8vIGlzIGEgZmlsZSBzeXN0ZW0gcm9vdCBkaXN0aW5jdCBmcm9tIC8uICovCisjdW5kZWYgRE9VQkxFX1NMQVNIX0lTX0RJU1RJTkNUX1JPT1QKKworLyogTGF6eSBsaW5raW5nIHRvIGZzIGxpYnMgKi8KKyN1bmRlZiBEWU5BTUlDX0xPQURJTkcKKworLyogZGV2aWNlIG1hcHBlciAobGliZGV2bWFwcGVyKSBzdXBwb3J0ICovCisjdW5kZWYgRU5BQkxFX0RFVklDRV9NQVBQRVIKKworLyogSW5jbHVkZSBmaWxlIHN5c3RlbSBzdXBwb3J0LiBpLmUuIGxpYnBhcnRlZC9mc18uLi4gKi8KKyN1bmRlZiBFTkFCTEVfRlMKKworLyogTXRyYWNlIG1hbGxvYygpIGRlYnVnZ2luZyAqLworI3VuZGVmIEVOQUJMRV9NVFJBQ0UKKworLyogRGVmaW5lIHRvIDEgaWYgdHJhbnNsYXRpb24gb2YgcHJvZ3JhbSBtZXNzYWdlcyB0byB0aGUgdXNlcidzIG5hdGl2ZQorICAgbGFuZ3VhZ2UgaXMgcmVxdWVzdGVkLiAqLworI3VuZGVmIEVOQUJMRV9OTFMKKworLyogSW5jbHVkZSBQQzk4IHBhcnRpdGlvbiB0YWJsZXMuIChTb21ldGltZXMgZXhjbHVkZWQgdG8gYXZvaWQgY29sbGlzaW9ucyB3aXRoCisgICBtc2RvcyBwYXJ0aXRpb24gdGFibGVzICovCisjdW5kZWYgRU5BQkxFX1BDOTgKKworLyogRGVmaW5lIG9uIHN5c3RlbXMgZm9yIHdoaWNoIGZpbGUgbmFtZXMgbWF5IGhhdmUgYSBzby1jYWxsZWQgYGRyaXZlIGxldHRlcicKKyAgIHByZWZpeCwgZGVmaW5lIHRoaXMgdG8gY29tcHV0ZSB0aGUgbGVuZ3RoIG9mIHRoYXQgcHJlZml4LCBpbmNsdWRpbmcgdGhlCisgICBjb2xvbi4gKi8KKyN1bmRlZiBGSUxFX1NZU1RFTV9BQ0NFUFRTX0RSSVZFX0xFVFRFUl9QUkVGSVgKKworLyogRGVmaW5lIGlmIHRoZSBiYWNrc2xhc2ggY2hhcmFjdGVyIG1heSBhbHNvIHNlcnZlIGFzIGEgZmlsZSBuYW1lIGNvbXBvbmVudAorICAgc2VwYXJhdG9yLiAqLworI3VuZGVmIEZJTEVfU1lTVEVNX0JBQ0tTTEFTSF9JU19GSUxFX05BTUVfU0VQQVJBVE9SCisKKy8qIERlZmluZSBpZiBhIGRyaXZlIGxldHRlciBwcmVmaXggZGVub3RlcyBhIHJlbGF0aXZlIHBhdGggaWYgaXQgaXMgbm90CisgICBmb2xsb3dlZCBieSBhIGZpbGUgbmFtZSBjb21wb25lbnQgc2VwYXJhdG9yLiAqLworI3VuZGVmIEZJTEVfU1lTVEVNX0RSSVZFX1BSRUZJWF9DQU5fQkVfUkVMQVRJVkUKKworLyogRGVmaW5lIHRvIDEgd2hlbiB1c2luZyB0aGUgZ251bGliIG1vZHVsZSBjbG9zZS1zdHJlYW0uICovCisjdW5kZWYgR05VTElCX0NMT1NFX1NUUkVBTQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSAnYWxsb2NhJyBhZnRlciBpbmNsdWRpbmcgPGFsbG9jYS5oPiwgYSBoZWFkZXIgdGhhdAorICAgbWF5IGJlIHN1cHBsaWVkIGJ5IHRoaXMgZGlzdHJpYnV0aW9uLiAqLworI3VuZGVmIEhBVkVfQUxMT0NBCisKKy8qIERlZmluZSBIQVZFX0FMTE9DQV9IIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgY29kZSB0aGF0CisgICBpbmNsdWRlcyA8YWxsb2NhLmg+IG9ubHkgaWYgSEFWRV9BTExPQ0FfSCBpcyBkZWZpbmVkLiAqLworI3VuZGVmIEhBVkVfQUxMT0NBX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBhdGV4aXQnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfQVRFWElUCisKKy8qIEhhcyBiYWNrdHJhY2Ugc3VwcG9ydCAqLworI3VuZGVmIEhBVkVfQkFDS1RSQUNFCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8YnAtc3ltLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfQlBfU1lNX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91ciBzeXN0ZW0gaGFzIGEgR05VIGxpYmMgY29tcGF0aWJsZSBgY2FsbG9jJyBmdW5jdGlvbiwgYW5kCisgICB0byAwIG90aGVyd2lzZS4gKi8KKyN1bmRlZiBIQVZFX0NBTExPQworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGNhbm9uaWNhbGl6ZV9maWxlX25hbWUnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgTWFjT1MgWCBmdW5jdGlvbiBDRkxvY2FsZUNvcHlDdXJyZW50IGluIHRoZQorICAgQ29yZUZvdW5kYXRpb24gZnJhbWV3b3JrLiAqLworI3VuZGVmIEhBVkVfQ0ZMT0NBTEVDT1BZQ1VSUkVOVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgTWFjT1MgWCBmdW5jdGlvbiBDRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlIGluCisgICB0aGUgQ29yZUZvdW5kYXRpb24gZnJhbWV3b3JrLiAqLworI3VuZGVmIEhBVkVfQ0ZQUkVGRVJFTkNFU0NPUFlBUFBWQUxVRQorCisvKiBEZWZpbmUgaWYgdGhlIEdOVSBkY2dldHRleHQoKSBmdW5jdGlvbiBpcyBhbHJlYWR5IHByZXNlbnQgb3IgcHJlaW5zdGFsbGVkLgorICAgKi8KKyN1bmRlZiBIQVZFX0RDR0VUVEVYVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYGdldGNfdW5sb2NrZWQnLCBhbmQgdG8gMCBpZiB5b3UKKyAgIGRvbid0LiAqLworI3VuZGVmIEhBVkVfREVDTF9HRVRDX1VOTE9DS0VECisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgZ2V0ZW52JywgYW5kIHRvIDAgaWYgeW91IGRvbid0LgorICAgKi8KKyN1bmRlZiBIQVZFX0RFQ0xfR0VURU5WCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgaW1heGFicycsIGFuZCB0byAwIGlmIHlvdQorICAgZG9uJ3QuICovCisjdW5kZWYgSEFWRV9ERUNMX0lNQVhBQlMKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBpbWF4ZGl2JywgYW5kIHRvIDAgaWYgeW91CisgICBkb24ndC4gKi8KKyN1bmRlZiBIQVZFX0RFQ0xfSU1BWERJVgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYGlzYmxhbmsnLCBhbmQgdG8gMCBpZiB5b3UKKyAgIGRvbid0LiAqLworI3VuZGVmIEhBVkVfREVDTF9JU0JMQU5LCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgc3RyZXJyb3JfcicsIGFuZCB0byAwIGlmIHlvdQorICAgZG9uJ3QuICovCisjdW5kZWYgSEFWRV9ERUNMX1NUUkVSUk9SX1IKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBzdHJuZHVwJywgYW5kIHRvIDAgaWYgeW91CisgICBkb24ndC4gKi8KKyN1bmRlZiBIQVZFX0RFQ0xfU1RSTkRVUAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYHN0cm5sZW4nLCBhbmQgdG8gMCBpZiB5b3UKKyAgIGRvbid0LiAqLworI3VuZGVmIEhBVkVfREVDTF9TVFJOTEVOCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgc3RydG9pbWF4JywgYW5kIHRvIDAgaWYgeW91CisgICBkb24ndC4gKi8KKyN1bmRlZiBIQVZFX0RFQ0xfU1RSVE9JTUFYCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgc3RydG91bWF4JywgYW5kIHRvIDAgaWYgeW91CisgICBkb24ndC4gKi8KKyN1bmRlZiBIQVZFX0RFQ0xfU1RSVE9VTUFYCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgX19mcGVuZGluZycsIGFuZCB0byAwIGlmIHlvdQorICAgZG9uJ3QuICovCisjdW5kZWYgSEFWRV9ERUNMX19fRlBFTkRJTkcKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxkbGZjbi5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0RMRkNOX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxnZXRvcHQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9HRVRPUFRfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldG9wdF9sb25nX29ubHknIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfR0VUT1BUX0xPTkdfT05MWQorCisvKiBEZWZpbmUgaWYgdGhlIEdOVSBnZXR0ZXh0KCkgZnVuY3Rpb24gaXMgYWxyZWFkeSBwcmVzZW50IG9yIHByZWluc3RhbGxlZC4gKi8KKyN1bmRlZiBIQVZFX0dFVFRFWFQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXR1aWQnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfR0VUVUlECisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgaWNvbnYoKSBmdW5jdGlvbiBhbmQgaXQgd29ya3MuICovCisjdW5kZWYgSEFWRV9JQ09OVgorCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgY29tcGlsZXIgc3VwcG9ydHMgb25lIG9mIHRoZSBrZXl3b3JkcyAnaW5saW5lJywKKyAgICdfX2lubGluZV9fJywgJ19faW5saW5lJyBhbmQgZWZmZWN0aXZlbHkgaW5saW5lcyBmdW5jdGlvbnMgbWFya2VkIGFzIHN1Y2guCisgICAqLworI3VuZGVmIEhBVkVfSU5MSU5FCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8aW50dHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9JTlRUWVBFU19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaXN3Y250cmwnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfSVNXQ05UUkwKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBpc3djdHlwZScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9JU1dDVFlQRQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgPGxhbmdpbmZvLmg+IGFuZCBubF9sYW5naW5mbyhDT0RFU0VUKS4gKi8KKyN1bmRlZiBIQVZFX0xBTkdJTkZPX0NPREVTRVQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwYXJ0ZWQnIGxpYnJhcnkgKC1scGFydGVkKS4gKi8KKyN1bmRlZiBIQVZFX0xJQlBBUlRFRAorCisvKiBoYXZlIHJlYWRsaW5lICovCisjdW5kZWYgSEFWRV9MSUJSRUFETElORQorCisvKiBIYXZlIGxpYnJlaXNlcmZzICovCisjdW5kZWYgSEFWRV9MSUJSRUlTRVJGUworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxvY2FsZS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0xPQ0FMRV9ICisKKy8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGBsb25nIGxvbmcgaW50Jy4gKi8KKyN1bmRlZiBIQVZFX0xPTkdfTE9OR19JTlQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91ciBzeXN0ZW0gaGFzIGEgR05VIGxpYmMgY29tcGF0aWJsZSBgbWFsbG9jJyBmdW5jdGlvbiwgYW5kCisgICB0byAwIG90aGVyd2lzZS4gKi8KKyN1bmRlZiBIQVZFX01BTExPQworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG1icnRvd2MnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfTUJSVE9XQworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG1ic2luaXQnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfTUJTSU5JVAorCisvKiBEZWZpbmUgdG8gMSBpZiA8d2NoYXIuaD4gZGVjbGFyZXMgbWJzdGF0ZV90LiAqLworI3VuZGVmIEhBVkVfTUJTVEFURV9UCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbWVtY2hyJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX01FTUNIUgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG1lbWNweScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9NRU1DUFkKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBtZW1tb3ZlJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX01FTU1PVkUKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxtZW1vcnkuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9NRU1PUllfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG1lbXNldCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9NRU1TRVQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxyZWFkbGluZS9oaXN0b3J5Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfUkVBRExJTkVfSElTVE9SWV9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8cmVhZGxpbmUvcmVhZGxpbmUuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9SRUFETElORV9SRUFETElORV9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdXIgc3lzdGVtIGhhcyBhIEdOVSBsaWJjIGNvbXBhdGlibGUgYHJlYWxsb2MnIGZ1bmN0aW9uLAorICAgYW5kIHRvIDAgb3RoZXJ3aXNlLiAqLworI3VuZGVmIEhBVkVfUkVBTExPQworCisvKiBIYXZlIHJlaXNlcmZzX2ZzX2NoZWNrKCkgKi8KKyN1bmRlZiBIQVZFX1JFSVNFUkZTX0ZTX0NIRUNLCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcmxfY29tcGxldGlvbl9tYXRjaGVzJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1JMX0NPTVBMRVRJT05fTUFUQ0hFUworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHJwbWF0Y2gnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfUlBNQVRDSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNpZ2FjdGlvbicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TSUdBQ1RJT04KKworLyogRGVmaW5lIHRvIDEgaWYgJ3NpZ19hdG9taWNfdCcgaXMgYSBzaWduZWQgaW50ZWdlciB0eXBlLiAqLworI3VuZGVmIEhBVkVfU0lHTkVEX1NJR19BVE9NSUNfVAorCisvKiBEZWZpbmUgdG8gMSBpZiAnd2NoYXJfdCcgaXMgYSBzaWduZWQgaW50ZWdlciB0eXBlLiAqLworI3VuZGVmIEhBVkVfU0lHTkVEX1dDSEFSX1QKKworLyogRGVmaW5lIHRvIDEgaWYgJ3dpbnRfdCcgaXMgYSBzaWduZWQgaW50ZWdlciB0eXBlLiAqLworI3VuZGVmIEhBVkVfU0lHTkVEX1dJTlRfVAorCisvKiBEZWZpbmUgdG8gMSBpZiBzdGRib29sLmggY29uZm9ybXMgdG8gQzk5LiAqLworI3VuZGVmIEhBVkVfU1REQk9PTF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkaW50Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1RESU5UX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRpb19leHQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TVERJT19FWFRfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGxpYi5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NURExJQl9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RyY3NwbicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TVFJDU1BOCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RyZXJyb3JfcicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TVFJFUlJPUl9SCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5ncy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NUUklOR1NfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0cmluZy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NUUklOR19ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc3RybmR1cCgpIGZ1bmN0aW9uIGFuZCBpdCB3b3Jrcy4gKi8KKyN1bmRlZiBIQVZFX1NUUk5EVVAKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJ0b2wnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU1RSVE9MCisKKy8qIERlZmluZSBpZiBzdHJ1Y3QgdXRpbWJ1ZiBpcyBkZWNsYXJlZCAtLSB1c3VhbGx5IGluIDx1dGltZS5oPi4gU29tZSBzeXN0ZW1zCisgICBoYXZlIHV0aW1lLmggYnV0IGRvbid0IGRlY2xhcmUgdGhlIHN0cnVjdCBhbnl3aGVyZS4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9VVElNQlVGCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL2JpdHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfQklUWVBFU19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL2ludHR5cGVzLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX0lOVFRZUEVTX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvc3RhdC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19TVEFUX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdGltZS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19USU1FX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfVFlQRVNfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHRlcm1jYXAuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9URVJNQ0FQX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx1bmlzdGQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9VTklTVERfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgdW5zaWduZWQgbG9uZyBsb25nIGludCcuICovCisjdW5kZWYgSEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UCisKKy8qIERlZmluZSBpZiB1dGltZXMgYWNjZXB0cyBhIG51bGwgYXJndW1lbnQgKi8KKyN1bmRlZiBIQVZFX1VUSU1FU19OVUxMCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dXRpbWUuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9VVElNRV9ICisKKy8qIERlZmluZSB0byAxIGlmIGB1dGltZShmaWxlLCBOVUxMKScgc2V0cyBmaWxlJ3MgdGltZXN0YW1wIHRvIHRoZSBwcmVzZW50LiAqLworI3VuZGVmIEhBVkVfVVRJTUVfTlVMTAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHdjaGFyLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfV0NIQVJfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHdjcnRvbWInIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfV0NSVE9NQgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHdjc2NvbGwnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfV0NTQ09MTAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHdjdHlwZS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1dDVFlQRV9ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ3dpbnRfdCcgdHlwZS4gKi8KKyN1bmRlZiBIQVZFX1dJTlRfVAorCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgX0Jvb2wnLiAqLworI3VuZGVmIEhBVkVfX0JPT0wKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfX2ZwZW5kaW5nJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX19fRlBFTkRJTkcKKworLyogRXh0cmFjdCBsb3cgbGV2ZWwgc3BlY2lhbCBIRlMoKykgZmlsZXMgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcyB3aGVuIHVzaW5nCisgICB0aGUgImNoZWNrIiBjb21tYW5kIChOT1QgRk9SIFBBQ0tBR0lORykgKi8KKyN1bmRlZiBIRlNfRVhUUkFDVF9GUworCisjaWYgRklMRV9TWVNURU1fQkFDS1NMQVNIX0lTX0ZJTEVfTkFNRV9TRVBBUkFUT1IKKyMgZGVmaW5lIElTU0xBU0goQykgKChDKSA9PSAnLycgfHwgKEMpID09ICdcXCcpCisjZWxzZQorIyBkZWZpbmUgSVNTTEFTSChDKSAoKEMpID09ICcvJykKKyNlbmRpZgorCisvKiBEZWZpbmUgdG8gMSBpZiBhc3NlcnRpb25zIHNob3VsZCBiZSBkaXNhYmxlZC4gKi8KKyN1bmRlZiBOREVCVUcKKworLyogRGVmaW5lIHRvIDEgaWYgeW91ciBDIGNvbXBpbGVyIGRvZXNuJ3QgYWNjZXB0IC1jIGFuZCAtbyB0b2dldGhlci4gKi8KKyN1bmRlZiBOT19NSU5VU19DX01JTlVTX08KKworLyogTmFtZSBvZiBwYWNrYWdlICovCisjdW5kZWYgUEFDS0FHRQorCisvKiBEZWZpbmUgdG8gdGhlIGFkZHJlc3Mgd2hlcmUgYnVnIHJlcG9ydHMgZm9yIHRoaXMgcGFja2FnZSBzaG91bGQgYmUgc2VudC4gKi8KKyN1bmRlZiBQQUNLQUdFX0JVR1JFUE9SVAorCisvKiBEZWZpbmUgdG8gdGhlIGZ1bGwgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICovCisjdW5kZWYgUEFDS0FHRV9OQU1FCisKKy8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIGFuZCB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KKyN1bmRlZiBQQUNLQUdFX1NUUklORworCisvKiBEZWZpbmUgdG8gdGhlIG9uZSBzeW1ib2wgc2hvcnQgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICovCisjdW5kZWYgUEFDS0FHRV9UQVJOQU1FCisKKy8qIERlZmluZSB0byB0aGUgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuICovCisjdW5kZWYgUEFDS0FHRV9WRVJTSU9OCisKKy8qIHRoZSBudW1iZXIgb2YgcGVuZGluZyBvdXRwdXQgYnl0ZXMgb24gc3RyZWFtIGBmcCcgKi8KKyN1bmRlZiBQRU5ESU5HX09VVFBVVF9OX0JZVEVTCisKKy8qIERlZmluZSBpZiA8aW50dHlwZXMuaD4gZXhpc3RzIGFuZCBkZWZpbmVzIHVudXNhYmxlIFBSSSogbWFjcm9zLiAqLworI3VuZGVmIFBSSV9NQUNST1NfQlJPS0VOCisKKy8qIERlZmluZSB0byBsLCBsbCwgdSwgdWwsIHVsbCwgZXRjLiwgYXMgc3VpdGFibGUgZm9yIGNvbnN0YW50cyBvZiB0eXBlCisgICAncHRyZGlmZl90Jy4gKi8KKyN1bmRlZiBQVFJESUZGX1RfU1VGRklYCisKKy8qIERpc2FibGUgYWxsIHdyaXRpbmcgY29kZSAqLworI3VuZGVmIFJFQURfT05MWQorCisvKiBEZWZpbmUgaWYgcmVuYW1lIGRvZXMgbm90IHdvcmsgZm9yIHNvdXJjZSBmaWxlIG5hbWVzIHdpdGggYSB0cmFpbGluZyBzbGFzaCwKKyAgIGxpa2UgdGhlIG9uZSBmcm9tIFN1bk9TIDQuMS4xX1UxLiAqLworI3VuZGVmIFJFTkFNRV9UUkFJTElOR19TTEFTSF9CVUcKKworLyogRGVmaW5lIHRvIGwsIGxsLCB1LCB1bCwgdWxsLCBldGMuLCBhcyBzdWl0YWJsZSBmb3IgY29uc3RhbnRzIG9mIHR5cGUKKyAgICdzaWdfYXRvbWljX3QnLiAqLworI3VuZGVmIFNJR19BVE9NSUNfVF9TVUZGSVgKKworLyogVGhlIHNpemUgb2YgYG9mZl90JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI3VuZGVmIFNJWkVPRl9PRkZfVAorCisvKiBEZWZpbmUgdG8gbCwgbGwsIHUsIHVsLCB1bGwsIGV0Yy4sIGFzIHN1aXRhYmxlIGZvciBjb25zdGFudHMgb2YgdHlwZQorICAgJ3NpemVfdCcuICovCisjdW5kZWYgU0laRV9UX1NVRkZJWAorCisvKiBJZiB1c2luZyB0aGUgQyBpbXBsZW1lbnRhdGlvbiBvZiBhbGxvY2EsIGRlZmluZSBpZiB5b3Uga25vdyB0aGUKKyAgIGRpcmVjdGlvbiBvZiBzdGFjayBncm93dGggZm9yIHlvdXIgc3lzdGVtOyBvdGhlcndpc2UgaXQgd2lsbCBiZQorICAgYXV0b21hdGljYWxseSBkZWR1Y2VkIGF0IHJ1bnRpbWUuCisJU1RBQ0tfRElSRUNUSU9OID4gMCA9PiBncm93cyB0b3dhcmQgaGlnaGVyIGFkZHJlc3NlcworCVNUQUNLX0RJUkVDVElPTiA8IDAgPT4gZ3Jvd3MgdG93YXJkIGxvd2VyIGFkZHJlc3NlcworCVNUQUNLX0RJUkVDVElPTiA9IDAgPT4gZGlyZWN0aW9uIG9mIGdyb3d0aCB1bmtub3duICovCisjdW5kZWYgU1RBQ0tfRElSRUNUSU9OCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBBTlNJIEMgaGVhZGVyIGZpbGVzLiAqLworI3VuZGVmIFNURENfSEVBREVSUworCisvKiBEZWZpbmUgdG8gMSBpZiBzdHJlcnJvcl9yIHJldHVybnMgY2hhciAqLiAqLworI3VuZGVmIFNUUkVSUk9SX1JfQ0hBUl9QCisKKy8qIFZlcnNpb24gbnVtYmVyIG9mIHBhY2thZ2UgKi8KKyN1bmRlZiBWRVJTSU9OCisKKy8qIERlZmluZSB0byBsLCBsbCwgdSwgdWwsIHVsbCwgZXRjLiwgYXMgc3VpdGFibGUgZm9yIGNvbnN0YW50cyBvZiB0eXBlCisgICAnd2NoYXJfdCcuICovCisjdW5kZWYgV0NIQVJfVF9TVUZGSVgKKworLyogRGVmaW5lIHRvIGwsIGxsLCB1LCB1bCwgdWxsLCBldGMuLCBhcyBzdWl0YWJsZSBmb3IgY29uc3RhbnRzIG9mIHR5cGUKKyAgICd3aW50X3QnLiAqLworI3VuZGVmIFdJTlRfVF9TVUZGSVgKKworLyogRGVmaW5lIHRvIDEgaWYgeW91ciBwcm9jZXNzb3Igc3RvcmVzIHdvcmRzIHdpdGggdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYnl0ZQorICAgZmlyc3QgKGxpa2UgTW90b3JvbGEgYW5kIFNQQVJDLCB1bmxpa2UgSW50ZWwgYW5kIFZBWCkuICovCisjdW5kZWYgV09SRFNfQklHRU5ESUFOCisKKy8qIERlZmluZSB0byAxIGlmIG9uIEFJWCAzLgorICAgU3lzdGVtIGhlYWRlcnMgc29tZXRpbWVzIGRlZmluZSB0aGlzLgorICAgV2UganVzdCB3YW50IHRvIGF2b2lkIGEgcmVkZWZpbml0aW9uIGVycm9yIG1lc3NhZ2UuICAqLworI2lmbmRlZiBfQUxMX1NPVVJDRQorIyB1bmRlZiBfQUxMX1NPVVJDRQorI2VuZGlmCisKKy8qIE51bWJlciBvZiBiaXRzIGluIGEgZmlsZSBvZmZzZXQsIG9uIGhvc3RzIHdoZXJlIHRoaXMgaXMgc2V0dGFibGUuICovCisjdW5kZWYgX0ZJTEVfT0ZGU0VUX0JJVFMKKworLyogRW5hYmxlIEdOVSBleHRlbnNpb25zIG9uIHN5c3RlbXMgdGhhdCBoYXZlIHRoZW0uICAqLworI2lmbmRlZiBfR05VX1NPVVJDRQorIyB1bmRlZiBfR05VX1NPVVJDRQorI2VuZGlmCisKKy8qIERlZmluZSBmb3IgbGFyZ2UgZmlsZXMsIG9uIEFJWC1zdHlsZSBob3N0cy4gKi8KKyN1bmRlZiBfTEFSR0VfRklMRVMKKworLyogRGVmaW5lIHRvIDEgaWYgb24gTUlOSVguICovCisjdW5kZWYgX01JTklYCisKKy8qIERlZmluZSB0byAyIGlmIHRoZSBzeXN0ZW0gZG9lcyBub3QgcHJvdmlkZSBQT1NJWC4xIGZlYXR1cmVzIGV4Y2VwdCB3aXRoCisgICB0aGlzIGRlZmluZWQuICovCisjdW5kZWYgX1BPU0lYXzFfU09VUkNFCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBuZWVkIHRvIGluIG9yZGVyIGZvciBgc3RhdCcgYW5kIG90aGVyIHRoaW5ncyB0byB3b3JrLiAqLworI3VuZGVmIF9QT1NJWF9TT1VSQ0UKKworLyogRGVmaW5lIGlmIHlvdSB3YW50IHJlZ29mZl90IHRvIGJlIGF0IGxlYXN0IGFzIHdpZGUgUE9TSVggcmVxdWlyZXMuICovCisjdW5kZWYgX1JFR0VYX0xBUkdFX09GRlNFVFMKKworLyogRW5hYmxlIGV4dGVuc2lvbnMgb24gU29sYXJpcy4gICovCisjaWZuZGVmIF9fRVhURU5TSU9OU19fCisjIHVuZGVmIF9fRVhURU5TSU9OU19fCisjZW5kaWYKKyNpZm5kZWYgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTCisjIHVuZGVmIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUworI2VuZGlmCisjaWZuZGVmIF9UQU5ERU1fU09VUkNFCisjIHVuZGVmIF9UQU5ERU1fU09VUkNFCisjZW5kaWYKKworLyogRGVmaW5lIHRvIHJwbF8gaWYgdGhlIGdldG9wdCByZXBsYWNlbWVudCBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcyBzaG91bGQgYmUKKyAgIHVzZWQuICovCisjdW5kZWYgX19HRVRPUFRfUFJFRklYCisKKy8qIERlZmluZSB0byBycGxfY2FsbG9jIGlmIHRoZSByZXBsYWNlbWVudCBmdW5jdGlvbiBzaG91bGQgYmUgdXNlZC4gKi8KKyN1bmRlZiBjYWxsb2MKKworLyogRGVmaW5lIHRvIGVtcHR5IGlmIGBjb25zdCcgZG9lcyBub3QgY29uZm9ybSB0byBBTlNJIEMuICovCisjdW5kZWYgY29uc3QKKworLyogRGVmaW5lIHRvIHJwbF9mcmVlIGlmIHRoZSByZXBsYWNlbWVudCBmdW5jdGlvbiBzaG91bGQgYmUgdXNlZC4gKi8KKyN1bmRlZiBmcmVlCisKKy8qIEEgcmVwbGFjZW1lbnQgZm9yIHZhX2NvcHksIGlmIG5lZWRlZC4gICovCisjZGVmaW5lIGdsX3ZhX2NvcHkoYSxiKSAoKGEpID0gKGIpKQorCisvKiBEZWZpbmUgdG8gYF9faW5saW5lX18nIG9yIGBfX2lubGluZScgaWYgdGhhdCdzIHdoYXQgdGhlIEMgY29tcGlsZXIKKyAgIGNhbGxzIGl0LCBvciB0byBub3RoaW5nIGlmICdpbmxpbmUnIGlzIG5vdCBzdXBwb3J0ZWQgdW5kZXIgYW55IG5hbWUuICAqLworI2lmbmRlZiBfX2NwbHVzcGx1cworI3VuZGVmIGlubGluZQorI2VuZGlmCisKKy8qIERlZmluZSB0byBycGxfbWFsbG9jIGlmIHRoZSByZXBsYWNlbWVudCBmdW5jdGlvbiBzaG91bGQgYmUgdXNlZC4gKi8KKyN1bmRlZiBtYWxsb2MKKworLyogRGVmaW5lIHRvIGEgdHlwZSBpZiA8d2NoYXIuaD4gZG9lcyBub3QgZGVmaW5lLiAqLworI3VuZGVmIG1ic3RhdGVfdAorCisvKiBEZWZpbmUgdG8gcnBsX21lbWNtcCBpZiB0aGUgcmVwbGFjZW1lbnQgZnVuY3Rpb24gc2hvdWxkIGJlIHVzZWQuICovCisjdW5kZWYgbWVtY21wCisKKy8qIERlZmluZSB0byBycGxfcmVfY29tcCBpZiB0aGUgcmVwbGFjZW1lbnQgc2hvdWxkIGJlIHVzZWQuICovCisjdW5kZWYgcmVfY29tcAorCisvKiBEZWZpbmUgdG8gcnBsX3JlX2NvbXBpbGVfZmFzdG1hcCBpZiB0aGUgcmVwbGFjZW1lbnQgc2hvdWxkIGJlIHVzZWQuICovCisjdW5kZWYgcmVfY29tcGlsZV9mYXN0bWFwCisKKy8qIERlZmluZSB0byBycGxfcmVfY29tcGlsZV9wYXR0ZXJuIGlmIHRoZSByZXBsYWNlbWVudCBzaG91bGQgYmUgdXNlZC4gKi8KKyN1bmRlZiByZV9jb21waWxlX3BhdHRlcm4KKworLyogRGVmaW5lIHRvIHJwbF9yZV9leGVjIGlmIHRoZSByZXBsYWNlbWVudCBzaG91bGQgYmUgdXNlZC4gKi8KKyN1bmRlZiByZV9leGVjCisKKy8qIERlZmluZSB0byBycGxfcmVfbWF0Y2ggaWYgdGhlIHJlcGxhY2VtZW50IHNob3VsZCBiZSB1c2VkLiAqLworI3VuZGVmIHJlX21hdGNoCisKKy8qIERlZmluZSB0byBycGxfcmVfbWF0Y2hfMiBpZiB0aGUgcmVwbGFjZW1lbnQgc2hvdWxkIGJlIHVzZWQuICovCisjdW5kZWYgcmVfbWF0Y2hfMgorCisvKiBEZWZpbmUgdG8gcnBsX3JlX3NlYXJjaCBpZiB0aGUgcmVwbGFjZW1lbnQgc2hvdWxkIGJlIHVzZWQuICovCisjdW5kZWYgcmVfc2VhcmNoCisKKy8qIERlZmluZSB0byBycGxfcmVfc2VhcmNoXzIgaWYgdGhlIHJlcGxhY2VtZW50IHNob3VsZCBiZSB1c2VkLiAqLworI3VuZGVmIHJlX3NlYXJjaF8yCisKKy8qIERlZmluZSB0byBycGxfcmVfc2V0X3JlZ2lzdGVycyBpZiB0aGUgcmVwbGFjZW1lbnQgc2hvdWxkIGJlIHVzZWQuICovCisjdW5kZWYgcmVfc2V0X3JlZ2lzdGVycworCisvKiBEZWZpbmUgdG8gcnBsX3JlX3NldF9zeW50YXggaWYgdGhlIHJlcGxhY2VtZW50IHNob3VsZCBiZSB1c2VkLiAqLworI3VuZGVmIHJlX3NldF9zeW50YXgKKworLyogRGVmaW5lIHRvIHJwbF9yZV9zeW50YXhfb3B0aW9ucyBpZiB0aGUgcmVwbGFjZW1lbnQgc2hvdWxkIGJlIHVzZWQuICovCisjdW5kZWYgcmVfc3ludGF4X29wdGlvbnMKKworLyogRGVmaW5lIHRvIHJwbF9yZWFsbG9jIGlmIHRoZSByZXBsYWNlbWVudCBmdW5jdGlvbiBzaG91bGQgYmUgdXNlZC4gKi8KKyN1bmRlZiByZWFsbG9jCisKKy8qIERlZmluZSB0byBycGxfcmVnY29tcCBpZiB0aGUgcmVwbGFjZW1lbnQgc2hvdWxkIGJlIHVzZWQuICovCisjdW5kZWYgcmVnY29tcAorCisvKiBEZWZpbmUgdG8gcnBsX3JlZ2Vycm9yIGlmIHRoZSByZXBsYWNlbWVudCBzaG91bGQgYmUgdXNlZC4gKi8KKyN1bmRlZiByZWdlcnJvcgorCisvKiBEZWZpbmUgdG8gcnBsX3JlZ2V4ZWMgaWYgdGhlIHJlcGxhY2VtZW50IHNob3VsZCBiZSB1c2VkLiAqLworI3VuZGVmIHJlZ2V4ZWMKKworLyogRGVmaW5lIHRvIHJwbF9yZWdmcmVlIGlmIHRoZSByZXBsYWNlbWVudCBzaG91bGQgYmUgdXNlZC4gKi8KKyN1bmRlZiByZWdmcmVlCisKKy8qIERlZmluZSB0byBycGxfcmVuYW1lIGlmIHRoZSByZXBsYWNlbWVudCBmdW5jdGlvbiBzaG91bGQgYmUgdXNlZC4gKi8KKyN1bmRlZiByZW5hbWUKKworLyogRGVmaW5lIHRvIGVxdWl2YWxlbnQgb2YgQzk5IHJlc3RyaWN0IGtleXdvcmQsIG9yIHRvIG5vdGhpbmcgaWYgdGhpcyBpcyBub3QKKyAgIHN1cHBvcnRlZC4gRG8gbm90IGRlZmluZSBpZiByZXN0cmljdCBpcyBzdXBwb3J0ZWQgZGlyZWN0bHkuICovCisjdW5kZWYgcmVzdHJpY3QKKworLyogRGVmaW5lIHRvIGB1bnNpZ25lZCBpbnQnIGlmIDxzeXMvdHlwZXMuaD4gZG9lcyBub3QgZGVmaW5lLiAqLworI3VuZGVmIHNpemVfdAorCisvKiBEZWZpbmUgYXMgYSBzaWduZWQgdHlwZSBvZiB0aGUgc2FtZSBzaXplIGFzIHNpemVfdC4gKi8KKyN1bmRlZiBzc2l6ZV90CisKKy8qIERlZmluZSB0byBycGxfc3RybmxlbiBpZiB0aGUgcmVwbGFjZW1lbnQgZnVuY3Rpb24gc2hvdWxkIGJlIHVzZWQuICovCisjdW5kZWYgc3RybmxlbgorCisvKiBEZWZpbmUgdG8gcnBsX3N0cnRvZCBpZiB0aGUgcmVwbGFjZW1lbnQgZnVuY3Rpb24gc2hvdWxkIGJlIHVzZWQuICovCisjdW5kZWYgc3RydG9kCisKKy8qIERlZmluZSB0byBycGxfdXRpbWUgaWYgdGhlIHJlcGxhY2VtZW50IGZ1bmN0aW9uIHNob3VsZCBiZSB1c2VkLiAqLworI3VuZGVmIHV0aW1lCisKKy8qIERlZmluZSBhcyBhIG1hY3JvIGZvciBjb3B5aW5nIHZhX2xpc3QgdmFyaWFibGVzLiAqLworI3VuZGVmIHZhX2NvcHkKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWIvZGlybmFtZS5jIGIvcGFydGVkLTEuOC43L2xpYi9kaXJuYW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY1NTJjNgotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWIvZGlybmFtZS5jCkBAIC0wLDAgKzEsODUgQEAKKy8qIGRpcm5hbWUuYyAtLSByZXR1cm4gYWxsIGJ1dCB0aGUgbGFzdCBlbGVtZW50IGluIGEgZmlsZSBuYW1lCisKKyAgIENvcHlyaWdodCAoQykgMTk5MCwgMTk5OCwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpbmNsdWRlICJkaXJuYW1lLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlICJ4YWxsb2MuaCIKKworLyogUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIHByZWZpeCBvZiBGSUxFIHRoYXQgd2lsbCBiZSB1c2VkIGJ5CisgICBkaXJfbmFtZS4gIElmIEZJTEUgaXMgaW4gdGhlIHdvcmtpbmcgZGlyZWN0b3J5LCB0aGlzIHJldHVybnMgemVybworICAgZXZlbiB0aG91Z2ggYGRpcl9uYW1lIChGSUxFKScgd2lsbCByZXR1cm4gIi4iLiAgV29ya3MgcHJvcGVybHkgZXZlbgorICAgaWYgdGhlcmUgYXJlIHRyYWlsaW5nIHNsYXNoZXMgKGJ5IGVmZmVjdGl2ZWx5IGlnbm9yaW5nIHRoZW0pLiAgKi8KKworc2l6ZV90CitkaXJfbGVuIChjaGFyIGNvbnN0ICpmaWxlKQoreworICBzaXplX3QgcHJlZml4X2xlbmd0aCA9IEZJTEVfU1lTVEVNX1BSRUZJWF9MRU4gKGZpbGUpOworICBzaXplX3QgbGVuZ3RoOworCisgIC8qIEFkdmFuY2UgcHJlZml4X2xlbmd0aCBiZXlvbmQgaW1wb3J0YW50IGxlYWRpbmcgc2xhc2hlcy4gICovCisgIHByZWZpeF9sZW5ndGggKz0gKHByZWZpeF9sZW5ndGggIT0gMAorCQkgICAgPyAoRklMRV9TWVNURU1fRFJJVkVfUFJFRklYX0NBTl9CRV9SRUxBVElWRQorCQkgICAgICAgJiYgSVNTTEFTSCAoZmlsZVtwcmVmaXhfbGVuZ3RoXSkpCisJCSAgICA6IChJU1NMQVNIIChmaWxlWzBdKQorCQkgICAgICAgPyAoKERPVUJMRV9TTEFTSF9JU19ESVNUSU5DVF9ST09UCisJCQkgICAmJiBJU1NMQVNIIChmaWxlWzFdKSAmJiAhIElTU0xBU0ggKGZpbGVbMl0pCisJCQkgICA/IDIgOiAxKSkKKwkJICAgICAgIDogMCkpOworCisgIC8qIFN0cmlwIHRoZSBiYXNlbmFtZSBhbmQgYW55IHJlZHVuZGFudCBzbGFzaGVzIGJlZm9yZSBpdC4gICovCisgIGZvciAobGVuZ3RoID0gbGFzdF9jb21wb25lbnQgKGZpbGUpIC0gZmlsZTsKKyAgICAgICBwcmVmaXhfbGVuZ3RoIDwgbGVuZ3RoOyBsZW5ndGgtLSkKKyAgICBpZiAoISBJU1NMQVNIIChmaWxlW2xlbmd0aCAtIDFdKSkKKyAgICAgIGJyZWFrOworICByZXR1cm4gbGVuZ3RoOworfQorCisKKy8qIEluIGdlbmVyYWwsIHdlIGNhbid0IHVzZSB0aGUgYnVpbHRpbiBgZGlybmFtZScgZnVuY3Rpb24gaWYgYXZhaWxhYmxlLAorICAgc2luY2UgaXQgaGFzIGRpZmZlcmVudCBtZWFuaW5ncyBpbiBkaWZmZXJlbnQgZW52aXJvbm1lbnRzLgorICAgSW4gc29tZSBlbnZpcm9ubWVudHMgdGhlIGJ1aWx0aW4gYGRpcm5hbWUnIG1vZGlmaWVzIGl0cyBhcmd1bWVudC4KKworICAgUmV0dXJuIHRoZSBsZWFkaW5nIGRpcmVjdG9yaWVzIHBhcnQgb2YgRklMRSwgYWxsb2NhdGVkIHdpdGggeG1hbGxvYy4KKyAgIFdvcmtzIHByb3Blcmx5IGV2ZW4gaWYgdGhlcmUgYXJlIHRyYWlsaW5nIHNsYXNoZXMgKGJ5IGVmZmVjdGl2ZWx5CisgICBpZ25vcmluZyB0aGVtKS4gIFVubGlrZSBQT1NJWCBkaXJuYW1lKCksIEZJTEUgY2Fubm90IGJlIE5VTEwuCisKKyAgIElmIGxzdGF0IChGSUxFKSB3b3VsZCBzdWNjZWVkLCB0aGVuIHsgY2hkaXIgKGRpcl9uYW1lIChGSUxFKSk7CisgICBsc3RhdCAoYmFzZV9uYW1lIChGSUxFKSk7IH0gd2lsbCBhY2Nlc3MgdGhlIHNhbWUgZmlsZS4gIExpa2V3aXNlLAorICAgaWYgdGhlIHNlcXVlbmNlIHsgY2hkaXIgKGRpcl9uYW1lIChGSUxFKSk7CisgICByZW5hbWUgKGJhc2VfbmFtZSAoRklMRSksICJmb28iKTsgfSBzdWNjZWVkcywgeW91IGhhdmUgcmVuYW1lZCBGSUxFCisgICB0byAiZm9vIiBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgRklMRSB3YXMgaW4uICAqLworCitjaGFyICoKK2Rpcl9uYW1lIChjaGFyIGNvbnN0ICpmaWxlKQoreworICBzaXplX3QgbGVuZ3RoID0gZGlyX2xlbiAoZmlsZSk7CisgIGJvb2wgYXBwZW5kX2RvdCA9IChsZW5ndGggPT0gMAorCQkgICAgIHx8IChGSUxFX1NZU1RFTV9EUklWRV9QUkVGSVhfQ0FOX0JFX1JFTEFUSVZFCisJCQkgJiYgbGVuZ3RoID09IEZJTEVfU1lTVEVNX1BSRUZJWF9MRU4gKGZpbGUpCisJCQkgJiYgZmlsZVsyXSAhPSAnXDAnICYmICEgSVNTTEFTSCAoZmlsZVsyXSkpKTsKKyAgY2hhciAqZGlyID0geG1hbGxvYyAobGVuZ3RoICsgYXBwZW5kX2RvdCArIDEpOworICBtZW1jcHkgKGRpciwgZmlsZSwgbGVuZ3RoKTsKKyAgaWYgKGFwcGVuZF9kb3QpCisgICAgZGlyW2xlbmd0aCsrXSA9ICcuJzsKKyAgZGlyW2xlbmd0aF0gPSAnXDAnOworICByZXR1cm4gZGlyOworfQpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYi9kaXJuYW1lLmggYi9wYXJ0ZWQtMS44LjcvbGliL2Rpcm5hbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWU3ZWQzCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYi9kaXJuYW1lLmgKQEAgLTAsMCArMSw3MCBAQAorLyogIFRha2UgZmlsZSBuYW1lcyBhcGFydCBpbnRvIGRpcmVjdG9yeSBhbmQgYmFzZSBuYW1lcy4KKworICAgIENvcHlyaWdodCAoQykgMTk5OCwgMjAwMSwgMjAwMy0yMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworCisjaWZuZGVmIERJUk5BTUVfSF8KKyMgZGVmaW5lIERJUk5BTUVfSF8gMQorCisjIGluY2x1ZGUgPHN0ZGJvb2wuaD4KKyMgaW5jbHVkZSA8c3RkZGVmLmg+CisKKyMgaWZuZGVmIERJUkVDVE9SWV9TRVBBUkFUT1IKKyMgIGRlZmluZSBESVJFQ1RPUllfU0VQQVJBVE9SICcvJworIyBlbmRpZgorCisjIGlmbmRlZiBJU1NMQVNICisjICBkZWZpbmUgSVNTTEFTSChDKSAoKEMpID09IERJUkVDVE9SWV9TRVBBUkFUT1IpCisjIGVuZGlmCisKKyMgaWZuZGVmIEZJTEVfU1lTVEVNX1BSRUZJWF9MRU4KKyMgIGlmIEZJTEVfU1lTVEVNX0FDQ0VQVFNfRFJJVkVfTEVUVEVSX1BSRUZJWAorICAgIC8qIFRoaXMgaW50ZXJuYWwgbWFjcm8gYXNzdW1lcyBBU0NJSSwgYnV0IGFsbCBob3N0cyB0aGF0IHN1cHBvcnQgZHJpdmUKKyAgICAgICBsZXR0ZXJzIHVzZSBBU0NJSS4gICovCisjICAgZGVmaW5lIF9JU19EUklWRV9MRVRURVIoYykgKCgodW5zaWduZWQgaW50KSAoYykgfCAoJ2EnIC0gJ0EnKSkgLSAnYScgXAorCQkJCTw9ICd6JyAtICdhJykKKyMgICBkZWZpbmUgRklMRV9TWVNURU1fUFJFRklYX0xFTihGaWxlbmFtZSkgXAorCSAgIChfSVNfRFJJVkVfTEVUVEVSICgoRmlsZW5hbWUpWzBdKSAmJiAoRmlsZW5hbWUpWzFdID09ICc6JyA/IDIgOiAwKQorIyAgZWxzZQorIyAgIGRlZmluZSBGSUxFX1NZU1RFTV9QUkVGSVhfTEVOKEZpbGVuYW1lKSAwCisjICBlbmRpZgorIyBlbmRpZgorCisjIGlmbmRlZiBGSUxFX1NZU1RFTV9EUklWRV9QUkVGSVhfQ0FOX0JFX1JFTEFUSVZFCisjICBkZWZpbmUgRklMRV9TWVNURU1fRFJJVkVfUFJFRklYX0NBTl9CRV9SRUxBVElWRSAwCisjIGVuZGlmCisKKyMgaWZuZGVmIERPVUJMRV9TTEFTSF9JU19ESVNUSU5DVF9ST09UCisjICBkZWZpbmUgRE9VQkxFX1NMQVNIX0lTX0RJU1RJTkNUX1JPT1QgMAorIyBlbmRpZgorCisjIGlmIEZJTEVfU1lTVEVNX0RSSVZFX1BSRUZJWF9DQU5fQkVfUkVMQVRJVkUKKyMgIGRlZmluZSBJU19BQlNPTFVURV9GSUxFX05BTUUoRikgSVNTTEFTSCAoKEYpW0ZJTEVfU1lTVEVNX1BSRUZJWF9MRU4gKEYpXSkKKyMgZWxzZQorIyAgZGVmaW5lIElTX0FCU09MVVRFX0ZJTEVfTkFNRShGKSBcCisJICAoSVNTTEFTSCAoKEYpWzBdKSB8fCAwIDwgRklMRV9TWVNURU1fUFJFRklYX0xFTiAoRikpCisjIGVuZGlmCisjIGRlZmluZSBJU19SRUxBVElWRV9GSUxFX05BTUUoRikgKCEgSVNfQUJTT0xVVEVfRklMRV9OQU1FIChGKSkKKworY2hhciAqYmFzZV9uYW1lIChjaGFyIGNvbnN0ICpmaWxlKTsKK2NoYXIgKmRpcl9uYW1lIChjaGFyIGNvbnN0ICpmaWxlKTsKK3NpemVfdCBiYXNlX2xlbiAoY2hhciBjb25zdCAqZmlsZSk7CitzaXplX3QgZGlyX2xlbiAoY2hhciBjb25zdCAqZmlsZSk7CitjaGFyICpsYXN0X2NvbXBvbmVudCAoY2hhciBjb25zdCAqZmlsZSk7CisKK2Jvb2wgc3RyaXBfdHJhaWxpbmdfc2xhc2hlcyAoY2hhciAqZmlsZSk7CisKKyNlbmRpZiAvKiBub3QgRElSTkFNRV9IXyAqLwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYi9lcnJvci5jIGIvcGFydGVkLTEuOC43L2xpYi9lcnJvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmODYzNDMKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGliL2Vycm9yLmMKQEAgLTAsMCArMSwzMzggQEAKKy8qIEVycm9yIGhhbmRsZXIgZm9yIG5vbmludGVyYWN0aXZlIHV0aWxpdGllcworICAgQ29weXJpZ2h0IChDKSAxOTkwLTE5OTgsIDIwMDAtMjAwNSwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKworLyogV3JpdHRlbiBieSBEYXZpZCBNYWNLZW56aWUgPGRqbUBnbnUuYWkubWl0LmVkdT4uICAqLworCisjaWYgIV9MSUJDCisjIGluY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJlcnJvci5oIgorCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmICFfTElCQyAmJiBFTkFCTEVfTkxTCisjIGluY2x1ZGUgImdldHRleHQuaCIKKyNlbmRpZgorCisjaWZkZWYgX0xJQkMKKyMgaW5jbHVkZSA8bGliaW50bC5oPgorIyBpbmNsdWRlIDxzdGRib29sLmg+CisjIGluY2x1ZGUgPHN0ZGludC5oPgorIyBpbmNsdWRlIDx3Y2hhci5oPgorIyBkZWZpbmUgbWJzcnRvd2NzIF9fbWJzcnRvd2NzCisjZW5kaWYKKworI2lmIFVTRV9VTkxPQ0tFRF9JTworIyBpbmNsdWRlICJ1bmxvY2tlZC1pby5oIgorI2VuZGlmCisKKyNpZm5kZWYgXworIyBkZWZpbmUgXyhTdHJpbmcpIFN0cmluZworI2VuZGlmCisKKy8qIElmIE5VTEwsIGVycm9yIHdpbGwgZmx1c2ggc3Rkb3V0LCB0aGVuIHByaW50IG9uIHN0ZGVyciB0aGUgcHJvZ3JhbQorICAgbmFtZSwgYSBjb2xvbiBhbmQgYSBzcGFjZS4gIE90aGVyd2lzZSwgZXJyb3Igd2lsbCBjYWxsIHRoaXMKKyAgIGZ1bmN0aW9uIHdpdGhvdXQgcGFyYW1ldGVycyBpbnN0ZWFkLiAgKi8KK3ZvaWQgKCplcnJvcl9wcmludF9wcm9nbmFtZSkgKHZvaWQpOworCisvKiBUaGlzIHZhcmlhYmxlIGlzIGluY3JlbWVudGVkIGVhY2ggdGltZSBgZXJyb3InIGlzIGNhbGxlZC4gICovCit1bnNpZ25lZCBpbnQgZXJyb3JfbWVzc2FnZV9jb3VudDsKKworI2lmZGVmIF9MSUJDCisvKiBJbiB0aGUgR05VIEMgbGlicmFyeSwgdGhlcmUgaXMgYSBwcmVkZWZpbmVkIHZhcmlhYmxlIGZvciB0aGlzLiAgKi8KKworIyBkZWZpbmUgcHJvZ3JhbV9uYW1lIHByb2dyYW1faW52b2NhdGlvbl9uYW1lCisjIGluY2x1ZGUgPGVycm5vLmg+CisjIGluY2x1ZGUgPGxpbWl0cy5oPgorIyBpbmNsdWRlIDxsaWJpby9saWJpb1AuaD4KKworLyogSW4gR05VIGxpYmMgd2Ugd2FudCBkbyBub3Qgd2FudCB0byB1c2UgdGhlIGNvbW1vbiBuYW1lIGBlcnJvcicgZGlyZWN0bHkuCisgICBJbnN0ZWFkIG1ha2UgaXQgYSB3ZWFrIGFsaWFzLiAgKi8KK2V4dGVybiB2b2lkIF9fZXJyb3IgKGludCBzdGF0dXMsIGludCBlcnJudW0sIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIC4uLikKKyAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDQpKSk7CitleHRlcm4gdm9pZCBfX2Vycm9yX2F0X2xpbmUgKGludCBzdGF0dXMsIGludCBlcnJudW0sIGNvbnN0IGNoYXIgKmZpbGVfbmFtZSwKKwkJCSAgICAgdW5zaWduZWQgaW50IGxpbmVfbnVtYmVyLCBjb25zdCBjaGFyICptZXNzYWdlLAorCQkJICAgICAuLi4pCisgICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCA1LCA2KSkpOzsKKyMgZGVmaW5lIGVycm9yIF9fZXJyb3IKKyMgZGVmaW5lIGVycm9yX2F0X2xpbmUgX19lcnJvcl9hdF9saW5lCisKKyMgaW5jbHVkZSA8bGliaW8vaW9saWJpby5oPgorIyBkZWZpbmUgZmZsdXNoKHMpIElOVFVTRShfSU9fZmZsdXNoKSAocykKKyMgdW5kZWYgcHV0YworIyBkZWZpbmUgcHV0YyhjLCBmcCkgSU5UVVNFKF9JT19wdXRjKSAoYywgZnApCisKKyMgaW5jbHVkZSA8Yml0cy9saWJjLWxvY2suaD4KKworI2Vsc2UgLyogbm90IF9MSUJDICovCisKKyMgaWYgIUhBVkVfREVDTF9TVFJFUlJPUl9SICYmIFNUUkVSUk9SX1JfQ0hBUl9QCisjICBpZm5kZWYgSEFWRV9ERUNMX1NUUkVSUk9SX1IKKyJ0aGlzIGNvbmZpZ3VyZS10aW1lIGRlY2xhcmF0aW9uIHRlc3Qgd2FzIG5vdCBydW4iCisjICBlbmRpZgorY2hhciAqc3RyZXJyb3JfciAoKTsKKyMgZW5kaWYKKworLyogVGhlIGNhbGxpbmcgcHJvZ3JhbSBzaG91bGQgZGVmaW5lIHByb2dyYW1fbmFtZSBhbmQgc2V0IGl0IHRvIHRoZQorICAgbmFtZSBvZiB0aGUgZXhlY3V0aW5nIHByb2dyYW0uICAqLworZXh0ZXJuIGNoYXIgKnByb2dyYW1fbmFtZTsKKworIyBpZiBIQVZFX1NUUkVSUk9SX1IgfHwgZGVmaW5lZCBzdHJlcnJvcl9yCisjICBkZWZpbmUgX19zdHJlcnJvcl9yIHN0cmVycm9yX3IKKyMgZW5kaWYJLyogSEFWRV9TVFJFUlJPUl9SIHx8IGRlZmluZWQgc3RyZXJyb3JfciAqLworI2VuZGlmCS8qIG5vdCBfTElCQyAqLworCitzdGF0aWMgdm9pZAorcHJpbnRfZXJybm9fbWVzc2FnZSAoaW50IGVycm51bSkKK3sKKyAgY2hhciBjb25zdCAqczsKKworI2lmIGRlZmluZWQgSEFWRV9TVFJFUlJPUl9SIHx8IF9MSUJDCisgIGNoYXIgZXJyYnVmWzEwMjRdOworIyBpZiBTVFJFUlJPUl9SX0NIQVJfUCB8fCBfTElCQworICBzID0gX19zdHJlcnJvcl9yIChlcnJudW0sIGVycmJ1Ziwgc2l6ZW9mIGVycmJ1Zik7CisjIGVsc2UKKyAgaWYgKF9fc3RyZXJyb3JfciAoZXJybnVtLCBlcnJidWYsIHNpemVvZiBlcnJidWYpID09IDApCisgICAgcyA9IGVycmJ1ZjsKKyAgZWxzZQorICAgIHMgPSAwOworIyBlbmRpZgorI2Vsc2UKKyAgcyA9IHN0cmVycm9yIChlcnJudW0pOworI2VuZGlmCisKKyNpZiAhX0xJQkMKKyAgaWYgKCEgcykKKyAgICBzID0gXygiVW5rbm93biBzeXN0ZW0gZXJyb3IiKTsKKyNlbmRpZgorCisjaWYgX0xJQkMKKyAgX19meHByaW50ZiAoTlVMTCwgIjogJXMiLCBzKTsKKyNlbHNlCisgIGZwcmludGYgKHN0ZGVyciwgIjogJXMiLCBzKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZAorZXJyb3JfdGFpbCAoaW50IHN0YXR1cywgaW50IGVycm51bSwgY29uc3QgY2hhciAqbWVzc2FnZSwgdmFfbGlzdCBhcmdzKQoreworI2lmIF9MSUJDCisgIGlmIChfSU9fZndpZGUgKHN0ZGVyciwgMCkgPiAwKQorICAgIHsKKyMgZGVmaW5lIEFMTE9DQV9MSU1JVCAyMDAwCisgICAgICBzaXplX3QgbGVuID0gc3RybGVuIChtZXNzYWdlKSArIDE7CisgICAgICB3Y2hhcl90ICp3bWVzc2FnZSA9IE5VTEw7CisgICAgICBtYnN0YXRlX3Qgc3Q7CisgICAgICBzaXplX3QgcmVzOworICAgICAgY29uc3QgY2hhciAqdG1wOworICAgICAgYm9vbCB1c2VfbWFsbG9jID0gZmFsc2U7CisKKyAgICAgIHdoaWxlICgxKQorCXsKKwkgIGlmIChfX2xpYmNfdXNlX2FsbG9jYSAobGVuICogc2l6ZW9mICh3Y2hhcl90KSkpCisJICAgIHdtZXNzYWdlID0gKHdjaGFyX3QgKikgYWxsb2NhIChsZW4gKiBzaXplb2YgKHdjaGFyX3QpKTsKKwkgIGVsc2UKKwkgICAgeworCSAgICAgIGlmICghdXNlX21hbGxvYykKKwkJd21lc3NhZ2UgPSBOVUxMOworCisJICAgICAgd2NoYXJfdCAqcCA9ICh3Y2hhcl90ICopIHJlYWxsb2MgKHdtZXNzYWdlLAorCQkJCQkJbGVuICogc2l6ZW9mICh3Y2hhcl90KSk7CisJICAgICAgaWYgKHAgPT0gTlVMTCkKKwkJeworCQkgIGZyZWUgKHdtZXNzYWdlKTsKKwkJICBmcHV0d3NfdW5sb2NrZWQgKEwib3V0IG9mIG1lbW9yeVxuIiwgc3RkZXJyKTsKKwkJICByZXR1cm47CisJCX0KKwkgICAgICB3bWVzc2FnZSA9IHA7CisJICAgICAgdXNlX21hbGxvYyA9IHRydWU7CisJICAgIH0KKworCSAgbWVtc2V0ICgmc3QsICdcMCcsIHNpemVvZiAoc3QpKTsKKwkgIHRtcCA9IG1lc3NhZ2U7CisKKwkgIHJlcyA9IG1ic3J0b3djcyAod21lc3NhZ2UsICZ0bXAsIGxlbiwgJnN0KTsKKwkgIGlmIChyZXMgIT0gbGVuKQorCSAgICBicmVhazsKKworCSAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGxlbiA+PSBTSVpFX01BWCAvIDIsIDApKQorCSAgICB7CisJICAgICAgLyogVGhpcyByZWFsbHkgc2hvdWxkIG5vdCBoYXBwZW4gaWYgZXZlcnl0aGluZyBpcyBmaW5lLiAgKi8KKwkgICAgICByZXMgPSAoc2l6ZV90KSAtMTsKKwkgICAgICBicmVhazsKKwkgICAgfQorCisJICBsZW4gKj0gMjsKKwl9CisKKyAgICAgIGlmIChyZXMgPT0gKHNpemVfdCkgLTEpCisJeworCSAgLyogVGhlIHN0cmluZyBjYW5ub3QgYmUgY29udmVydGVkLiAgKi8KKwkgIGlmICh1c2VfbWFsbG9jKQorCSAgICB7CisJICAgICAgZnJlZSAod21lc3NhZ2UpOworCSAgICAgIHVzZV9tYWxsb2MgPSBmYWxzZTsKKwkgICAgfQorCSAgd21lc3NhZ2UgPSAod2NoYXJfdCAqKSBMIj8/PyI7CisJfQorCisgICAgICBfX3Zmd3ByaW50ZiAoc3RkZXJyLCB3bWVzc2FnZSwgYXJncyk7CisKKyAgICAgIGlmICh1c2VfbWFsbG9jKQorCWZyZWUgKHdtZXNzYWdlKTsKKyAgICB9CisgIGVsc2UKKyNlbmRpZgorICAgIHZmcHJpbnRmIChzdGRlcnIsIG1lc3NhZ2UsIGFyZ3MpOworICB2YV9lbmQgKGFyZ3MpOworCisgICsrZXJyb3JfbWVzc2FnZV9jb3VudDsKKyAgaWYgKGVycm51bSkKKyAgICBwcmludF9lcnJub19tZXNzYWdlIChlcnJudW0pOworI2lmIF9MSUJDCisgIF9fZnhwcmludGYgKE5VTEwsICJcbiIpOworI2Vsc2UKKyAgcHV0YyAoJ1xuJywgc3RkZXJyKTsKKyNlbmRpZgorICBmZmx1c2ggKHN0ZGVycik7CisgIGlmIChzdGF0dXMpCisgICAgZXhpdCAoc3RhdHVzKTsKK30KKworCisvKiBQcmludCB0aGUgcHJvZ3JhbSBuYW1lIGFuZCBlcnJvciBtZXNzYWdlIE1FU1NBR0UsIHdoaWNoIGlzIGEgcHJpbnRmLXN0eWxlCisgICBmb3JtYXQgc3RyaW5nIHdpdGggb3B0aW9uYWwgYXJncy4KKyAgIElmIEVSUk5VTSBpcyBub256ZXJvLCBwcmludCBpdHMgY29ycmVzcG9uZGluZyBzeXN0ZW0gZXJyb3IgbWVzc2FnZS4KKyAgIEV4aXQgd2l0aCBzdGF0dXMgU1RBVFVTIGlmIGl0IGlzIG5vbnplcm8uICAqLwordm9pZAorZXJyb3IgKGludCBzdGF0dXMsIGludCBlcnJudW0sIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIC4uLikKK3sKKyAgdmFfbGlzdCBhcmdzOworCisjaWYgZGVmaW5lZCBfTElCQyAmJiBkZWZpbmVkIF9fbGliY19wdGZfY2FsbAorICAvKiBXZSBkbyBub3Qgd2FudCB0aGlzIGNhbGwgdG8gYmUgY3V0IHNob3J0IGJ5IGEgdGhyZWFkCisgICAgIGNhbmNlbGxhdGlvbi4gIFRoZXJlZm9yZSBkaXNhYmxlIGNhbmNlbGxhdGlvbiBmb3Igbm93LiAgKi8KKyAgaW50IHN0YXRlID0gUFRIUkVBRF9DQU5DRUxfRU5BQkxFOworICBfX2xpYmNfcHRmX2NhbGwgKHB0aHJlYWRfc2V0Y2FuY2Vsc3RhdGUsIChQVEhSRUFEX0NBTkNFTF9ESVNBQkxFLCAmc3RhdGUpLAorCQkgICAwKTsKKyNlbmRpZgorCisgIGZmbHVzaCAoc3Rkb3V0KTsKKyNpZmRlZiBfTElCQworICBfSU9fZmxvY2tmaWxlIChzdGRlcnIpOworI2VuZGlmCisgIGlmIChlcnJvcl9wcmludF9wcm9nbmFtZSkKKyAgICAoKmVycm9yX3ByaW50X3Byb2duYW1lKSAoKTsKKyAgZWxzZQorICAgIHsKKyNpZiBfTElCQworICAgICAgX19meHByaW50ZiAoTlVMTCwgIiVzOiAiLCBwcm9ncmFtX25hbWUpOworI2Vsc2UKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIiVzOiAiLCBwcm9ncmFtX25hbWUpOworI2VuZGlmCisgICAgfQorCisgIHZhX3N0YXJ0IChhcmdzLCBtZXNzYWdlKTsKKyAgZXJyb3JfdGFpbCAoc3RhdHVzLCBlcnJudW0sIG1lc3NhZ2UsIGFyZ3MpOworCisjaWZkZWYgX0xJQkMKKyAgX0lPX2Z1bmxvY2tmaWxlIChzdGRlcnIpOworIyBpZmRlZiBfX2xpYmNfcHRmX2NhbGwKKyAgX19saWJjX3B0Zl9jYWxsIChwdGhyZWFkX3NldGNhbmNlbHN0YXRlLCAoc3RhdGUsIE5VTEwpLCAwKTsKKyMgZW5kaWYKKyNlbmRpZgorfQorDAorLyogU29tZXRpbWVzIHdlIHdhbnQgdG8gaGF2ZSBhdCBtb3N0IG9uZSBlcnJvciBwZXIgbGluZS4gIFRoaXMKKyAgIHZhcmlhYmxlIGNvbnRyb2xzIHdoZXRoZXIgdGhpcyBtb2RlIGlzIHNlbGVjdGVkIG9yIG5vdC4gICovCitpbnQgZXJyb3Jfb25lX3Blcl9saW5lOworCit2b2lkCitlcnJvcl9hdF9saW5lIChpbnQgc3RhdHVzLCBpbnQgZXJybnVtLCBjb25zdCBjaGFyICpmaWxlX25hbWUsCisJICAgICAgIHVuc2lnbmVkIGludCBsaW5lX251bWJlciwgY29uc3QgY2hhciAqbWVzc2FnZSwgLi4uKQoreworICB2YV9saXN0IGFyZ3M7CisKKyAgaWYgKGVycm9yX29uZV9wZXJfbGluZSkKKyAgICB7CisgICAgICBzdGF0aWMgY29uc3QgY2hhciAqb2xkX2ZpbGVfbmFtZTsKKyAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgb2xkX2xpbmVfbnVtYmVyOworCisgICAgICBpZiAob2xkX2xpbmVfbnVtYmVyID09IGxpbmVfbnVtYmVyCisJICAmJiAoZmlsZV9uYW1lID09IG9sZF9maWxlX25hbWUKKwkgICAgICB8fCBzdHJjbXAgKG9sZF9maWxlX25hbWUsIGZpbGVfbmFtZSkgPT0gMCkpCisJLyogU2ltcGx5IHJldHVybiBhbmQgcHJpbnQgbm90aGluZy4gICovCisJcmV0dXJuOworCisgICAgICBvbGRfZmlsZV9uYW1lID0gZmlsZV9uYW1lOworICAgICAgb2xkX2xpbmVfbnVtYmVyID0gbGluZV9udW1iZXI7CisgICAgfQorCisjaWYgZGVmaW5lZCBfTElCQyAmJiBkZWZpbmVkIF9fbGliY19wdGZfY2FsbAorICAvKiBXZSBkbyBub3Qgd2FudCB0aGlzIGNhbGwgdG8gYmUgY3V0IHNob3J0IGJ5IGEgdGhyZWFkCisgICAgIGNhbmNlbGxhdGlvbi4gIFRoZXJlZm9yZSBkaXNhYmxlIGNhbmNlbGxhdGlvbiBmb3Igbm93LiAgKi8KKyAgaW50IHN0YXRlID0gUFRIUkVBRF9DQU5DRUxfRU5BQkxFOworICBfX2xpYmNfcHRmX2NhbGwgKHB0aHJlYWRfc2V0Y2FuY2Vsc3RhdGUsIChQVEhSRUFEX0NBTkNFTF9ESVNBQkxFLCAmc3RhdGUpLAorCQkgICAwKTsKKyNlbmRpZgorCisgIGZmbHVzaCAoc3Rkb3V0KTsKKyNpZmRlZiBfTElCQworICBfSU9fZmxvY2tmaWxlIChzdGRlcnIpOworI2VuZGlmCisgIGlmIChlcnJvcl9wcmludF9wcm9nbmFtZSkKKyAgICAoKmVycm9yX3ByaW50X3Byb2duYW1lKSAoKTsKKyAgZWxzZQorICAgIHsKKyNpZiBfTElCQworICAgICAgX19meHByaW50ZiAoTlVMTCwgIiVzOiIsIHByb2dyYW1fbmFtZSk7CisjZWxzZQorICAgICAgZnByaW50ZiAoc3RkZXJyLCAiJXM6IiwgcHJvZ3JhbV9uYW1lKTsKKyNlbmRpZgorICAgIH0KKworI2lmIF9MSUJDCisgIF9fZnhwcmludGYgKE5VTEwsIGZpbGVfbmFtZSAhPSBOVUxMID8gIiVzOiVkOiAiIDogIiAiLAorCSAgICAgIGZpbGVfbmFtZSwgbGluZV9udW1iZXIpOworI2Vsc2UKKyAgZnByaW50ZiAoc3RkZXJyLCBmaWxlX25hbWUgIT0gTlVMTCA/ICIlczolZDogIiA6ICIgIiwKKwkgICBmaWxlX25hbWUsIGxpbmVfbnVtYmVyKTsKKyNlbmRpZgorCisgIHZhX3N0YXJ0IChhcmdzLCBtZXNzYWdlKTsKKyAgZXJyb3JfdGFpbCAoc3RhdHVzLCBlcnJudW0sIG1lc3NhZ2UsIGFyZ3MpOworCisjaWZkZWYgX0xJQkMKKyAgX0lPX2Z1bmxvY2tmaWxlIChzdGRlcnIpOworIyBpZmRlZiBfX2xpYmNfcHRmX2NhbGwKKyAgX19saWJjX3B0Zl9jYWxsIChwdGhyZWFkX3NldGNhbmNlbHN0YXRlLCAoc3RhdGUsIE5VTEwpLCAwKTsKKyMgZW5kaWYKKyNlbmRpZgorfQorCisjaWZkZWYgX0xJQkMKKy8qIE1ha2UgdGhlIHdlYWsgYWxpYXMuICAqLworIyB1bmRlZiBlcnJvcgorIyB1bmRlZiBlcnJvcl9hdF9saW5lCit3ZWFrX2FsaWFzIChfX2Vycm9yLCBlcnJvcikKK3dlYWtfYWxpYXMgKF9fZXJyb3JfYXRfbGluZSwgZXJyb3JfYXRfbGluZSkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYi9lcnJvci5oIGIvcGFydGVkLTEuOC43L2xpYi9lcnJvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhNWYyNDcKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGliL2Vycm9yLmgKQEAgLTAsMCArMSw2NiBAQAorLyogRGVjbGFyYXRpb24gZm9yIGVycm9yLXJlcG9ydGluZyBmdW5jdGlvbgorICAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2LCAxOTk3LCAyMDAzLCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworCisjaWZuZGVmIF9FUlJPUl9ICisjZGVmaW5lIF9FUlJPUl9IIDEKKworI2lmbmRlZiBfX2F0dHJpYnV0ZV9fCisvKiBUaGlzIGZlYXR1cmUgaXMgYXZhaWxhYmxlIGluIGdjYyB2ZXJzaW9ucyAyLjUgYW5kIGxhdGVyLiAgKi8KKyMgaWYgX19HTlVDX18gPCAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fIDwgNSkgfHwgX19TVFJJQ1RfQU5TSV9fCisjICBkZWZpbmUgX19hdHRyaWJ1dGVfXyhTcGVjKSAvKiBlbXB0eSAqLworIyBlbmRpZgorLyogVGhlIF9fLXByb3RlY3RlZCB2YXJpYW50cyBvZiBgZm9ybWF0JyBhbmQgYHByaW50ZicgYXR0cmlidXRlcworICAgYXJlIGFjY2VwdGVkIGJ5IGdjYyB2ZXJzaW9ucyAyLjYuNCAoZWZmZWN0aXZlbHkgMi43KSBhbmQgbGF0ZXIuICAqLworIyBpZiBfX0dOVUNfXyA8IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPCA3KQorIyAgZGVmaW5lIF9fZm9ybWF0X18gZm9ybWF0CisjICBkZWZpbmUgX19wcmludGZfXyBwcmludGYKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYJX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIFByaW50IGEgbWVzc2FnZSB3aXRoIGBmcHJpbnRmIChzdGRlcnIsIEZPUk1BVCwgLi4uKSc7CisgICBpZiBFUlJOVU0gaXMgbm9uemVybywgZm9sbG93IGl0IHdpdGggIjogIiBhbmQgc3RyZXJyb3IgKEVSUk5VTSkuCisgICBJZiBTVEFUVVMgaXMgbm9uemVybywgdGVybWluYXRlIHRoZSBwcm9ncmFtIHdpdGggYGV4aXQgKFNUQVRVUyknLiAgKi8KKworZXh0ZXJuIHZvaWQgZXJyb3IgKGludCBfX3N0YXR1cywgaW50IF9fZXJybnVtLCBjb25zdCBjaGFyICpfX2Zvcm1hdCwgLi4uKQorICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgNCkpKTsKKworZXh0ZXJuIHZvaWQgZXJyb3JfYXRfbGluZSAoaW50IF9fc3RhdHVzLCBpbnQgX19lcnJudW0sIGNvbnN0IGNoYXIgKl9fZm5hbWUsCisJCQkgICB1bnNpZ25lZCBpbnQgX19saW5lbm8sIGNvbnN0IGNoYXIgKl9fZm9ybWF0LCAuLi4pCisgICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCA1LCA2KSkpOworCisvKiBJZiBOVUxMLCBlcnJvciB3aWxsIGZsdXNoIHN0ZG91dCwgdGhlbiBwcmludCBvbiBzdGRlcnIgdGhlIHByb2dyYW0KKyAgIG5hbWUsIGEgY29sb24gYW5kIGEgc3BhY2UuICBPdGhlcndpc2UsIGVycm9yIHdpbGwgY2FsbCB0aGlzCisgICBmdW5jdGlvbiB3aXRob3V0IHBhcmFtZXRlcnMgaW5zdGVhZC4gICovCitleHRlcm4gdm9pZCAoKmVycm9yX3ByaW50X3Byb2duYW1lKSAodm9pZCk7CisKKy8qIFRoaXMgdmFyaWFibGUgaXMgaW5jcmVtZW50ZWQgZWFjaCB0aW1lIGBlcnJvcicgaXMgY2FsbGVkLiAgKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgZXJyb3JfbWVzc2FnZV9jb3VudDsKKworLyogU29tZXRpbWVzIHdlIHdhbnQgdG8gaGF2ZSBhdCBtb3N0IG9uZSBlcnJvciBwZXIgbGluZS4gIFRoaXMKKyAgIHZhcmlhYmxlIGNvbnRyb2xzIHdoZXRoZXIgdGhpcyBtb2RlIGlzIHNlbGVjdGVkIG9yIG5vdC4gICovCitleHRlcm4gaW50IGVycm9yX29uZV9wZXJfbGluZTsKKworI2lmZGVmCV9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIGVycm9yLmggKi8KZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWIvZXhpdGZhaWwuYyBiL3BhcnRlZC0xLjguNy9saWIvZXhpdGZhaWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzNkMzI1Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYi9leGl0ZmFpbC5jCkBAIC0wLDAgKzEsMjYgQEAKKy8qIEZhaWx1cmUgZXhpdCBzdGF0dXMKKworICAgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzLCAyMDA1LCAyMDA2LCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorICAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpbmNsdWRlICJleGl0ZmFpbC5oIgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisKK2ludCB2b2xhdGlsZSBleGl0X2ZhaWx1cmUgPSBFWElUX0ZBSUxVUkU7CmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGliL2V4aXRmYWlsLmggYi9wYXJ0ZWQtMS44LjcvbGliL2V4aXRmYWlsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ2Y2Y5YwotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWIvZXhpdGZhaWwuaApAQCAtMCwwICsxLDIwIEBACisvKiBGYWlsdXJlIGV4aXQgc3RhdHVzCisKKyAgIENvcHlyaWdodCAoQykgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKworZXh0ZXJuIGludCB2b2xhdGlsZSBleGl0X2ZhaWx1cmU7CmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGliL2ZyZWUuYyBiL3BhcnRlZC0xLjguNy9saWIvZnJlZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczYTEyNWEKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGliL2ZyZWUuYwpAQCAtMCwwICsxLDMxIEBACisvKiBXb3JrIGFyb3VuZCBpbmNvbXBhdGliaWxpdHkgb24gb2xkZXIgc3lzdGVtcyB3aGVyZSBmcmVlIChOVUxMKSBmYWlscy4KKworICAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKworLyogd3JpdHRlbiBieSBQYXVsIEVnZ2VydCAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjdW5kZWYgZnJlZQorCisjaW5jbHVkZSA8c3RkbGliLmg+CisKK3ZvaWQKK3JwbF9mcmVlICh2b2lkICpwKQoreworICBpZiAocCkKKyAgICBmcmVlIChwKTsKK30KZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWIvZnVsbC13cml0ZS5jIGIvcGFydGVkLTEuOC43L2xpYi9mdWxsLXdyaXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2MxNjg3MgotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWIvZnVsbC13cml0ZS5jCkBAIC0wLDAgKzEsODEgQEAKKy8qIEFuIGludGVyZmFjZSB0byByZWFkIGFuZCB3cml0ZSB0aGF0IHJldHJpZXMgKGlmIG5lY2Vzc2FyeSkgdW50aWwgY29tcGxldGUuCisKKyAgIENvcHlyaWdodCAoQykgMTk5MywgMTk5NCwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywKKyAgIDIwMDQsIDIwMDUsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKy8qIFNwZWNpZmljYXRpb24uICAqLworI2lmZGVmIEZVTExfUkVBRAorIyBpbmNsdWRlICJmdWxsLXJlYWQuaCIKKyNlbHNlCisjIGluY2x1ZGUgImZ1bGwtd3JpdGUuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2lmZGVmIEZVTExfUkVBRAorIyBpbmNsdWRlICJzYWZlLXJlYWQuaCIKKyMgZGVmaW5lIHNhZmVfcncgc2FmZV9yZWFkCisjIGRlZmluZSBmdWxsX3J3IGZ1bGxfcmVhZAorIyB1bmRlZiBjb25zdAorIyBkZWZpbmUgY29uc3QgLyogZW1wdHkgKi8KKyNlbHNlCisjIGluY2x1ZGUgInNhZmUtd3JpdGUuaCIKKyMgZGVmaW5lIHNhZmVfcncgc2FmZV93cml0ZQorIyBkZWZpbmUgZnVsbF9ydyBmdWxsX3dyaXRlCisjZW5kaWYKKworI2lmZGVmIEZVTExfUkVBRAorLyogU2V0IGVycm5vIHRvIHplcm8gdXBvbiBFT0YuICAqLworIyBkZWZpbmUgWkVST19CWVRFX1RSQU5TRkVSX0VSUk5PIDAKKyNlbHNlCisvKiBTb21lIGJ1Z2d5IGRyaXZlcnMgcmV0dXJuIDAgd2hlbiBvbmUgdHJpZXMgdG8gd3JpdGUgYmV5b25kCisgICBhIGRldmljZSdzIGVuZC4gIChFeGFtcGxlOiBMaW51eCAxLjIuMTMgb24gL2Rldi9mZDAuKQorICAgU2V0IGVycm5vIHRvIEVOT1NQQyBzbyB0aGV5IGdldCBhIHNlbnNpYmxlIGRpYWdub3N0aWMuICAqLworIyBkZWZpbmUgWkVST19CWVRFX1RSQU5TRkVSX0VSUk5PIEVOT1NQQworI2VuZGlmCisKKy8qIFdyaXRlKHJlYWQpIENPVU5UIGJ5dGVzIGF0IEJVRiB0byhmcm9tKSBkZXNjcmlwdG9yIEZELCByZXRyeWluZyBpZgorICAgaW50ZXJydXB0ZWQgb3IgaWYgYSBwYXJ0aWFsIHdyaXRlKHJlYWQpIG9jY3Vycy4gIFJldHVybiB0aGUgbnVtYmVyCisgICBvZiBieXRlcyB0cmFuc2ZlcnJlZC4KKyAgIFdoZW4gd3JpdGluZywgc2V0IGVycm5vIGlmIGZld2VyIHRoYW4gQ09VTlQgYnl0ZXMgYXJlIHdyaXR0ZW4uCisgICBXaGVuIHJlYWRpbmcsIGlmIGZld2VyIHRoYW4gQ09VTlQgYnl0ZXMgYXJlIHJlYWQsIHlvdSBtdXN0IGV4YW1pbmUKKyAgIGVycm5vIHRvIGRpc3Rpbmd1aXNoIGZhaWx1cmUgZnJvbSBFT0YgKGVycm5vID09IDApLiAgKi8KK3NpemVfdAorZnVsbF9ydyAoaW50IGZkLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBjb3VudCkKK3sKKyAgc2l6ZV90IHRvdGFsID0gMDsKKyAgY29uc3QgY2hhciAqcHRyID0gKGNvbnN0IGNoYXIgKikgYnVmOworCisgIHdoaWxlIChjb3VudCA+IDApCisgICAgeworICAgICAgc2l6ZV90IG5fcncgPSBzYWZlX3J3IChmZCwgcHRyLCBjb3VudCk7CisgICAgICBpZiAobl9ydyA9PSAoc2l6ZV90KSAtMSkKKwlicmVhazsKKyAgICAgIGlmIChuX3J3ID09IDApCisJeworCSAgZXJybm8gPSBaRVJPX0JZVEVfVFJBTlNGRVJfRVJSTk87CisJICBicmVhazsKKwl9CisgICAgICB0b3RhbCArPSBuX3J3OworICAgICAgcHRyICs9IG5fcnc7CisgICAgICBjb3VudCAtPSBuX3J3OworICAgIH0KKworICByZXR1cm4gdG90YWw7Cit9CmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGliL2Z1bGwtd3JpdGUuaCBiL3BhcnRlZC0xLjguNy9saWIvZnVsbC13cml0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMGQyZmUKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGliL2Z1bGwtd3JpdGUuaApAQCAtMCwwICsxLDM1IEBACisvKiBBbiBpbnRlcmZhY2UgdG8gd3JpdGUoKSB0aGF0IHdyaXRlcyBhbGwgaXQgaXMgYXNrZWQgdG8gd3JpdGUuCisKKyAgIENvcHlyaWdodCAoQykgMjAwMi0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworCisvKiBXcml0ZSBDT1VOVCBieXRlcyBhdCBCVUYgdG8gZGVzY3JpcHRvciBGRCwgcmV0cnlpbmcgaWYgaW50ZXJydXB0ZWQKKyAgIG9yIGlmIHBhcnRpYWwgd3JpdGVzIG9jY3VyLiAgUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgc3VjY2Vzc2Z1bGx5CisgICB3cml0dGVuLCBzZXR0aW5nIGVycm5vIGlmIHRoYXQgaXMgbGVzcyB0aGFuIENPVU5ULiAgKi8KK2V4dGVybiBzaXplX3QgZnVsbF93cml0ZSAoaW50IGZkLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBjb3VudCk7CisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWIvZ2V0b3B0LmMgYi9wYXJ0ZWQtMS44LjcvbGliL2dldG9wdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ODBhZDgKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGliL2dldG9wdC5jCkBAIC0wLDAgKzEsMTE5MSBAQAorLyogR2V0b3B0IGZvciBHTlUuCisgICBOT1RFOiBnZXRvcHQgaXMgbm93IHBhcnQgb2YgdGhlIEMgbGlicmFyeSwgc28gaWYgeW91IGRvbid0IGtub3cgd2hhdAorICAgIktlZXAgdGhpcyBmaWxlIG5hbWUtc3BhY2UgY2xlYW4iIG1lYW5zLCB0YWxrIHRvIGRyZXBwZXJAZ251Lm9yZworICAgYmVmb3JlIGNoYW5naW5nIGl0IQorICAgQ29weXJpZ2h0IChDKSAxOTg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk2LDk4LDk5LDIwMDAsMjAwMSwyMDAyLDIwMDMsMjAwNCwyMDA2CisJRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAgIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisMCisjaWZuZGVmIF9MSUJDCisjIGluY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJnZXRvcHQuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpZmRlZiBfX1ZNUworIyBpbmNsdWRlIDx1bml4bGliLmg+CisjZW5kaWYKKworI2lmZGVmIF9MSUJDCisjIGluY2x1ZGUgPGxpYmludGwuaD4KKyNlbHNlCisjIGluY2x1ZGUgImdldHRleHQuaCIKKyMgZGVmaW5lIF8obXNnaWQpIGdldHRleHQgKG1zZ2lkKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkIF9MSUJDICYmIGRlZmluZWQgVVNFX0lOX0xJQklPCisjIGluY2x1ZGUgPHdjaGFyLmg+CisjZW5kaWYKKworI2lmbmRlZiBhdHRyaWJ1dGVfaGlkZGVuCisjIGRlZmluZSBhdHRyaWJ1dGVfaGlkZGVuCisjZW5kaWYKKworLyogVW5saWtlIHN0YW5kYXJkIFVuaXggYGdldG9wdCcsIGZ1bmN0aW9ucyBsaWtlIGBnZXRvcHRfbG9uZycKKyAgIGxldCB0aGUgdXNlciBpbnRlcnNwZXJzZSB0aGUgb3B0aW9ucyB3aXRoIHRoZSBvdGhlciBhcmd1bWVudHMuCisKKyAgIEFzIGBnZXRvcHRfbG9uZycgd29ya3MsIGl0IHBlcm11dGVzIHRoZSBlbGVtZW50cyBvZiBBUkdWIHNvIHRoYXQsCisgICB3aGVuIGl0IGlzIGRvbmUsIGFsbCB0aGUgb3B0aW9ucyBwcmVjZWRlIGV2ZXJ5dGhpbmcgZWxzZS4gIFRodXMKKyAgIGFsbCBhcHBsaWNhdGlvbiBwcm9ncmFtcyBhcmUgZXh0ZW5kZWQgdG8gaGFuZGxlIGZsZXhpYmxlIGFyZ3VtZW50IG9yZGVyLgorCisgICBVc2luZyBgZ2V0b3B0JyBvciBzZXR0aW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBQT1NJWExZX0NPUlJFQ1QKKyAgIGRpc2FibGVzIHBlcm11dGF0aW9uLgorICAgVGhlbiB0aGUgYXBwbGljYXRpb24ncyBiZWhhdmlvciBpcyBjb21wbGV0ZWx5IHN0YW5kYXJkLgorCisgICBHTlUgYXBwbGljYXRpb24gcHJvZ3JhbXMgY2FuIHVzZSBhIHRoaXJkIGFsdGVybmF0aXZlIG1vZGUgaW4gd2hpY2gKKyAgIHRoZXkgY2FuIGRpc3Rpbmd1aXNoIHRoZSByZWxhdGl2ZSBvcmRlciBvZiBvcHRpb25zIGFuZCBvdGhlciBhcmd1bWVudHMuICAqLworCisjaW5jbHVkZSAiZ2V0b3B0X2ludC5oIgorCisvKiBGb3IgY29tbXVuaWNhdGlvbiBmcm9tIGBnZXRvcHQnIHRvIHRoZSBjYWxsZXIuCisgICBXaGVuIGBnZXRvcHQnIGZpbmRzIGFuIG9wdGlvbiB0aGF0IHRha2VzIGFuIGFyZ3VtZW50LAorICAgdGhlIGFyZ3VtZW50IHZhbHVlIGlzIHJldHVybmVkIGhlcmUuCisgICBBbHNvLCB3aGVuIGBvcmRlcmluZycgaXMgUkVUVVJOX0lOX09SREVSLAorICAgZWFjaCBub24tb3B0aW9uIEFSR1YtZWxlbWVudCBpcyByZXR1cm5lZCBoZXJlLiAgKi8KKworY2hhciAqb3B0YXJnOworCisvKiBJbmRleCBpbiBBUkdWIG9mIHRoZSBuZXh0IGVsZW1lbnQgdG8gYmUgc2Nhbm5lZC4KKyAgIFRoaXMgaXMgdXNlZCBmb3IgY29tbXVuaWNhdGlvbiB0byBhbmQgZnJvbSB0aGUgY2FsbGVyCisgICBhbmQgZm9yIGNvbW11bmljYXRpb24gYmV0d2VlbiBzdWNjZXNzaXZlIGNhbGxzIHRvIGBnZXRvcHQnLgorCisgICBPbiBlbnRyeSB0byBgZ2V0b3B0JywgemVybyBtZWFucyB0aGlzIGlzIHRoZSBmaXJzdCBjYWxsOyBpbml0aWFsaXplLgorCisgICBXaGVuIGBnZXRvcHQnIHJldHVybnMgLTEsIHRoaXMgaXMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBvZiB0aGUKKyAgIG5vbi1vcHRpb24gZWxlbWVudHMgdGhhdCB0aGUgY2FsbGVyIHNob3VsZCBpdHNlbGYgc2Nhbi4KKworICAgT3RoZXJ3aXNlLCBgb3B0aW5kJyBjb21tdW5pY2F0ZXMgZnJvbSBvbmUgY2FsbCB0byB0aGUgbmV4dAorICAgaG93IG11Y2ggb2YgQVJHViBoYXMgYmVlbiBzY2FubmVkIHNvIGZhci4gICovCisKKy8qIDEwMDMuMiBzYXlzIHRoaXMgbXVzdCBiZSAxIGJlZm9yZSBhbnkgY2FsbC4gICovCitpbnQgb3B0aW5kID0gMTsKKworLyogQ2FsbGVycyBzdG9yZSB6ZXJvIGhlcmUgdG8gaW5oaWJpdCB0aGUgZXJyb3IgbWVzc2FnZQorICAgZm9yIHVucmVjb2duaXplZCBvcHRpb25zLiAgKi8KKworaW50IG9wdGVyciA9IDE7CisKKy8qIFNldCB0byBhbiBvcHRpb24gY2hhcmFjdGVyIHdoaWNoIHdhcyB1bnJlY29nbml6ZWQuCisgICBUaGlzIG11c3QgYmUgaW5pdGlhbGl6ZWQgb24gc29tZSBzeXN0ZW1zIHRvIGF2b2lkIGxpbmtpbmcgaW4gdGhlCisgICBzeXN0ZW0ncyBvd24gZ2V0b3B0IGltcGxlbWVudGF0aW9uLiAgKi8KKworaW50IG9wdG9wdCA9ICc/JzsKKworLyogS2VlcCBhIGdsb2JhbCBjb3B5IG9mIGFsbCBpbnRlcm5hbCBtZW1iZXJzIG9mIGdldG9wdF9kYXRhLiAgKi8KKworc3RhdGljIHN0cnVjdCBfZ2V0b3B0X2RhdGEgZ2V0b3B0X2RhdGE7CisKKwwKKyNpZiBkZWZpbmVkIEhBVkVfREVDTF9HRVRFTlYgJiYgIUhBVkVfREVDTF9HRVRFTlYKK2V4dGVybiBjaGFyICpnZXRlbnYgKCk7CisjZW5kaWYKKwwKKyNpZmRlZiBfTElCQworLyogU3RvcmVkIG9yaWdpbmFsIHBhcmFtZXRlcnMuCisgICBYWFggVGhpcyBpcyBubyBnb29kIHNvbHV0aW9uLiAgV2Ugc2hvdWxkIHJhdGhlciBjb3B5IHRoZSBhcmdzIHNvCisgICB0aGF0IHdlIGNhbiBjb21wYXJlIHRoZW0gbGF0ZXIuICBCdXQgd2UgbXVzdCBub3QgdXNlIG1hbGxvYygzKS4gICovCitleHRlcm4gaW50IF9fbGliY19hcmdjOworZXh0ZXJuIGNoYXIgKipfX2xpYmNfYXJndjsKKworLyogQmFzaCAyLjAgZ2l2ZXMgdXMgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgY29udGFpbmluZyBmbGFncworICAgaW5kaWNhdGluZyBBUkdWIGVsZW1lbnRzIHRoYXQgc2hvdWxkIG5vdCBiZSBjb25zaWRlcmVkIGFyZ3VtZW50cy4gICovCisKKyMgaWZkZWYgVVNFX05PTk9QVElPTl9GTEFHUworLyogRGVmaW5lZCBpbiBnZXRvcHRfaW5pdC5jICAqLworZXh0ZXJuIGNoYXIgKl9fZ2V0b3B0X25vbm9wdGlvbl9mbGFnczsKKyMgZW5kaWYKKworIyBpZmRlZiBVU0VfTk9OT1BUSU9OX0ZMQUdTCisjICBkZWZpbmUgU1dBUF9GTEFHUyhjaDEsIGNoMikgXAorICBpZiAoZC0+X19ub25vcHRpb25fZmxhZ3NfbGVuID4gMCkJCQkJCSAgICAgIFwKKyAgICB7CQkJCQkJCQkJICAgICAgXAorICAgICAgY2hhciBfX3RtcCA9IF9fZ2V0b3B0X25vbm9wdGlvbl9mbGFnc1tjaDFdOwkJCSAgICAgIFwKKyAgICAgIF9fZ2V0b3B0X25vbm9wdGlvbl9mbGFnc1tjaDFdID0gX19nZXRvcHRfbm9ub3B0aW9uX2ZsYWdzW2NoMl07CSAgICAgIFwKKyAgICAgIF9fZ2V0b3B0X25vbm9wdGlvbl9mbGFnc1tjaDJdID0gX190bXA7CQkJCSAgICAgIFwKKyAgICB9CisjIGVsc2UKKyMgIGRlZmluZSBTV0FQX0ZMQUdTKGNoMSwgY2gyKQorIyBlbmRpZgorI2Vsc2UJLyogIV9MSUJDICovCisjIGRlZmluZSBTV0FQX0ZMQUdTKGNoMSwgY2gyKQorI2VuZGlmCS8qIF9MSUJDICovCisKKy8qIEV4Y2hhbmdlIHR3byBhZGphY2VudCBzdWJzZXF1ZW5jZXMgb2YgQVJHVi4KKyAgIE9uZSBzdWJzZXF1ZW5jZSBpcyBlbGVtZW50cyBbZmlyc3Rfbm9ub3B0LGxhc3Rfbm9ub3B0KQorICAgd2hpY2ggY29udGFpbnMgYWxsIHRoZSBub24tb3B0aW9ucyB0aGF0IGhhdmUgYmVlbiBza2lwcGVkIHNvIGZhci4KKyAgIFRoZSBvdGhlciBpcyBlbGVtZW50cyBbbGFzdF9ub25vcHQsb3B0aW5kKSwgd2hpY2ggY29udGFpbnMgYWxsCisgICB0aGUgb3B0aW9ucyBwcm9jZXNzZWQgc2luY2UgdGhvc2Ugbm9uLW9wdGlvbnMgd2VyZSBza2lwcGVkLgorCisgICBgZmlyc3Rfbm9ub3B0JyBhbmQgYGxhc3Rfbm9ub3B0JyBhcmUgcmVsb2NhdGVkIHNvIHRoYXQgdGhleSBkZXNjcmliZQorICAgdGhlIG5ldyBpbmRpY2VzIG9mIHRoZSBub24tb3B0aW9ucyBpbiBBUkdWIGFmdGVyIHRoZXkgYXJlIG1vdmVkLiAgKi8KKworc3RhdGljIHZvaWQKK2V4Y2hhbmdlIChjaGFyICoqYXJndiwgc3RydWN0IF9nZXRvcHRfZGF0YSAqZCkKK3sKKyAgaW50IGJvdHRvbSA9IGQtPl9fZmlyc3Rfbm9ub3B0OworICBpbnQgbWlkZGxlID0gZC0+X19sYXN0X25vbm9wdDsKKyAgaW50IHRvcCA9IGQtPm9wdGluZDsKKyAgY2hhciAqdGVtOworCisgIC8qIEV4Y2hhbmdlIHRoZSBzaG9ydGVyIHNlZ21lbnQgd2l0aCB0aGUgZmFyIGVuZCBvZiB0aGUgbG9uZ2VyIHNlZ21lbnQuCisgICAgIFRoYXQgcHV0cyB0aGUgc2hvcnRlciBzZWdtZW50IGludG8gdGhlIHJpZ2h0IHBsYWNlLgorICAgICBJdCBsZWF2ZXMgdGhlIGxvbmdlciBzZWdtZW50IGluIHRoZSByaWdodCBwbGFjZSBvdmVyYWxsLAorICAgICBidXQgaXQgY29uc2lzdHMgb2YgdHdvIHBhcnRzIHRoYXQgbmVlZCB0byBiZSBzd2FwcGVkIG5leHQuICAqLworCisjaWYgZGVmaW5lZCBfTElCQyAmJiBkZWZpbmVkIFVTRV9OT05PUFRJT05fRkxBR1MKKyAgLyogRmlyc3QgbWFrZSBzdXJlIHRoZSBoYW5kbGluZyBvZiB0aGUgYF9fZ2V0b3B0X25vbm9wdGlvbl9mbGFncycKKyAgICAgc3RyaW5nIGNhbiB3b3JrIG5vcm1hbGx5LiAgT3VyIHRvcCBhcmd1bWVudCBtdXN0IGJlIGluIHRoZSByYW5nZQorICAgICBvZiB0aGUgc3RyaW5nLiAgKi8KKyAgaWYgKGQtPl9fbm9ub3B0aW9uX2ZsYWdzX2xlbiA+IDAgJiYgdG9wID49IGQtPl9fbm9ub3B0aW9uX2ZsYWdzX21heF9sZW4pCisgICAgeworICAgICAgLyogV2UgbXVzdCBleHRlbmQgdGhlIGFycmF5LiAgVGhlIHVzZXIgcGxheXMgZ2FtZXMgd2l0aCB1cyBhbmQKKwkgcHJlc2VudHMgbmV3IGFyZ3VtZW50cy4gICovCisgICAgICBjaGFyICpuZXdfc3RyID0gbWFsbG9jICh0b3AgKyAxKTsKKyAgICAgIGlmIChuZXdfc3RyID09IE5VTEwpCisJZC0+X19ub25vcHRpb25fZmxhZ3NfbGVuID0gZC0+X19ub25vcHRpb25fZmxhZ3NfbWF4X2xlbiA9IDA7CisgICAgICBlbHNlCisJeworCSAgbWVtc2V0IChfX21lbXBjcHkgKG5ld19zdHIsIF9fZ2V0b3B0X25vbm9wdGlvbl9mbGFncywKKwkJCSAgICAgZC0+X19ub25vcHRpb25fZmxhZ3NfbWF4X2xlbiksCisJCSAgJ1wwJywgdG9wICsgMSAtIGQtPl9fbm9ub3B0aW9uX2ZsYWdzX21heF9sZW4pOworCSAgZC0+X19ub25vcHRpb25fZmxhZ3NfbWF4X2xlbiA9IHRvcCArIDE7CisJICBfX2dldG9wdF9ub25vcHRpb25fZmxhZ3MgPSBuZXdfc3RyOworCX0KKyAgICB9CisjZW5kaWYKKworICB3aGlsZSAodG9wID4gbWlkZGxlICYmIG1pZGRsZSA+IGJvdHRvbSkKKyAgICB7CisgICAgICBpZiAodG9wIC0gbWlkZGxlID4gbWlkZGxlIC0gYm90dG9tKQorCXsKKwkgIC8qIEJvdHRvbSBzZWdtZW50IGlzIHRoZSBzaG9ydCBvbmUuICAqLworCSAgaW50IGxlbiA9IG1pZGRsZSAtIGJvdHRvbTsKKwkgIHJlZ2lzdGVyIGludCBpOworCisJICAvKiBTd2FwIGl0IHdpdGggdGhlIHRvcCBwYXJ0IG9mIHRoZSB0b3Agc2VnbWVudC4gICovCisJICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisJICAgIHsKKwkgICAgICB0ZW0gPSBhcmd2W2JvdHRvbSArIGldOworCSAgICAgIGFyZ3ZbYm90dG9tICsgaV0gPSBhcmd2W3RvcCAtIChtaWRkbGUgLSBib3R0b20pICsgaV07CisJICAgICAgYXJndlt0b3AgLSAobWlkZGxlIC0gYm90dG9tKSArIGldID0gdGVtOworCSAgICAgIFNXQVBfRkxBR1MgKGJvdHRvbSArIGksIHRvcCAtIChtaWRkbGUgLSBib3R0b20pICsgaSk7CisJICAgIH0KKwkgIC8qIEV4Y2x1ZGUgdGhlIG1vdmVkIGJvdHRvbSBzZWdtZW50IGZyb20gZnVydGhlciBzd2FwcGluZy4gICovCisJICB0b3AgLT0gbGVuOworCX0KKyAgICAgIGVsc2UKKwl7CisJICAvKiBUb3Agc2VnbWVudCBpcyB0aGUgc2hvcnQgb25lLiAgKi8KKwkgIGludCBsZW4gPSB0b3AgLSBtaWRkbGU7CisJICByZWdpc3RlciBpbnQgaTsKKworCSAgLyogU3dhcCBpdCB3aXRoIHRoZSBib3R0b20gcGFydCBvZiB0aGUgYm90dG9tIHNlZ21lbnQuICAqLworCSAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCSAgICB7CisJICAgICAgdGVtID0gYXJndltib3R0b20gKyBpXTsKKwkgICAgICBhcmd2W2JvdHRvbSArIGldID0gYXJndlttaWRkbGUgKyBpXTsKKwkgICAgICBhcmd2W21pZGRsZSArIGldID0gdGVtOworCSAgICAgIFNXQVBfRkxBR1MgKGJvdHRvbSArIGksIG1pZGRsZSArIGkpOworCSAgICB9CisJICAvKiBFeGNsdWRlIHRoZSBtb3ZlZCB0b3Agc2VnbWVudCBmcm9tIGZ1cnRoZXIgc3dhcHBpbmcuICAqLworCSAgYm90dG9tICs9IGxlbjsKKwl9CisgICAgfQorCisgIC8qIFVwZGF0ZSByZWNvcmRzIGZvciB0aGUgc2xvdHMgdGhlIG5vbi1vcHRpb25zIG5vdyBvY2N1cHkuICAqLworCisgIGQtPl9fZmlyc3Rfbm9ub3B0ICs9IChkLT5vcHRpbmQgLSBkLT5fX2xhc3Rfbm9ub3B0KTsKKyAgZC0+X19sYXN0X25vbm9wdCA9IGQtPm9wdGluZDsKK30KKworLyogSW5pdGlhbGl6ZSB0aGUgaW50ZXJuYWwgZGF0YSB3aGVuIHRoZSBmaXJzdCBjYWxsIGlzIG1hZGUuICAqLworCitzdGF0aWMgY29uc3QgY2hhciAqCitfZ2V0b3B0X2luaXRpYWxpemUgKGludCBhcmdjLCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqb3B0c3RyaW5nLAorCQkgICAgaW50IHBvc2l4bHlfY29ycmVjdCwgc3RydWN0IF9nZXRvcHRfZGF0YSAqZCkKK3sKKyAgLyogU3RhcnQgcHJvY2Vzc2luZyBvcHRpb25zIHdpdGggQVJHVi1lbGVtZW50IDEgKHNpbmNlIEFSR1YtZWxlbWVudCAwCisgICAgIGlzIHRoZSBwcm9ncmFtIG5hbWUpOyB0aGUgc2VxdWVuY2Ugb2YgcHJldmlvdXNseSBza2lwcGVkCisgICAgIG5vbi1vcHRpb24gQVJHVi1lbGVtZW50cyBpcyBlbXB0eS4gICovCisKKyAgZC0+X19maXJzdF9ub25vcHQgPSBkLT5fX2xhc3Rfbm9ub3B0ID0gZC0+b3B0aW5kOworCisgIGQtPl9fbmV4dGNoYXIgPSBOVUxMOworCisgIGQtPl9fcG9zaXhseV9jb3JyZWN0ID0gcG9zaXhseV9jb3JyZWN0IHx8ICEhZ2V0ZW52ICgiUE9TSVhMWV9DT1JSRUNUIik7CisKKyAgLyogRGV0ZXJtaW5lIGhvdyB0byBoYW5kbGUgdGhlIG9yZGVyaW5nIG9mIG9wdGlvbnMgYW5kIG5vbm9wdGlvbnMuICAqLworCisgIGlmIChvcHRzdHJpbmdbMF0gPT0gJy0nKQorICAgIHsKKyAgICAgIGQtPl9fb3JkZXJpbmcgPSBSRVRVUk5fSU5fT1JERVI7CisgICAgICArK29wdHN0cmluZzsKKyAgICB9CisgIGVsc2UgaWYgKG9wdHN0cmluZ1swXSA9PSAnKycpCisgICAgeworICAgICAgZC0+X19vcmRlcmluZyA9IFJFUVVJUkVfT1JERVI7CisgICAgICArK29wdHN0cmluZzsKKyAgICB9CisgIGVsc2UgaWYgKGQtPl9fcG9zaXhseV9jb3JyZWN0KQorICAgIGQtPl9fb3JkZXJpbmcgPSBSRVFVSVJFX09SREVSOworICBlbHNlCisgICAgZC0+X19vcmRlcmluZyA9IFBFUk1VVEU7CisKKyNpZiBkZWZpbmVkIF9MSUJDICYmIGRlZmluZWQgVVNFX05PTk9QVElPTl9GTEFHUworICBpZiAoIWQtPl9fcG9zaXhseV9jb3JyZWN0CisgICAgICAmJiBhcmdjID09IF9fbGliY19hcmdjICYmIGFyZ3YgPT0gX19saWJjX2FyZ3YpCisgICAgeworICAgICAgaWYgKGQtPl9fbm9ub3B0aW9uX2ZsYWdzX21heF9sZW4gPT0gMCkKKwl7CisJICBpZiAoX19nZXRvcHRfbm9ub3B0aW9uX2ZsYWdzID09IE5VTEwKKwkgICAgICB8fCBfX2dldG9wdF9ub25vcHRpb25fZmxhZ3NbMF0gPT0gJ1wwJykKKwkgICAgZC0+X19ub25vcHRpb25fZmxhZ3NfbWF4X2xlbiA9IC0xOworCSAgZWxzZQorCSAgICB7CisJICAgICAgY29uc3QgY2hhciAqb3JpZ19zdHIgPSBfX2dldG9wdF9ub25vcHRpb25fZmxhZ3M7CisJICAgICAgaW50IGxlbiA9IGQtPl9fbm9ub3B0aW9uX2ZsYWdzX21heF9sZW4gPSBzdHJsZW4gKG9yaWdfc3RyKTsKKwkgICAgICBpZiAoZC0+X19ub25vcHRpb25fZmxhZ3NfbWF4X2xlbiA8IGFyZ2MpCisJCWQtPl9fbm9ub3B0aW9uX2ZsYWdzX21heF9sZW4gPSBhcmdjOworCSAgICAgIF9fZ2V0b3B0X25vbm9wdGlvbl9mbGFncyA9CisJCShjaGFyICopIG1hbGxvYyAoZC0+X19ub25vcHRpb25fZmxhZ3NfbWF4X2xlbik7CisJICAgICAgaWYgKF9fZ2V0b3B0X25vbm9wdGlvbl9mbGFncyA9PSBOVUxMKQorCQlkLT5fX25vbm9wdGlvbl9mbGFnc19tYXhfbGVuID0gLTE7CisJICAgICAgZWxzZQorCQltZW1zZXQgKF9fbWVtcGNweSAoX19nZXRvcHRfbm9ub3B0aW9uX2ZsYWdzLCBvcmlnX3N0ciwgbGVuKSwKKwkJCSdcMCcsIGQtPl9fbm9ub3B0aW9uX2ZsYWdzX21heF9sZW4gLSBsZW4pOworCSAgICB9CisJfQorICAgICAgZC0+X19ub25vcHRpb25fZmxhZ3NfbGVuID0gZC0+X19ub25vcHRpb25fZmxhZ3NfbWF4X2xlbjsKKyAgICB9CisgIGVsc2UKKyAgICBkLT5fX25vbm9wdGlvbl9mbGFnc19sZW4gPSAwOworI2VuZGlmCisKKyAgcmV0dXJuIG9wdHN0cmluZzsKK30KKwwKKy8qIFNjYW4gZWxlbWVudHMgb2YgQVJHViAod2hvc2UgbGVuZ3RoIGlzIEFSR0MpIGZvciBvcHRpb24gY2hhcmFjdGVycworICAgZ2l2ZW4gaW4gT1BUU1RSSU5HLgorCisgICBJZiBhbiBlbGVtZW50IG9mIEFSR1Ygc3RhcnRzIHdpdGggJy0nLCBhbmQgaXMgbm90IGV4YWN0bHkgIi0iIG9yICItLSIsCisgICB0aGVuIGl0IGlzIGFuIG9wdGlvbiBlbGVtZW50LiAgVGhlIGNoYXJhY3RlcnMgb2YgdGhpcyBlbGVtZW50CisgICAoYXNpZGUgZnJvbSB0aGUgaW5pdGlhbCAnLScpIGFyZSBvcHRpb24gY2hhcmFjdGVycy4gIElmIGBnZXRvcHQnCisgICBpcyBjYWxsZWQgcmVwZWF0ZWRseSwgaXQgcmV0dXJucyBzdWNjZXNzaXZlbHkgZWFjaCBvZiB0aGUgb3B0aW9uIGNoYXJhY3RlcnMKKyAgIGZyb20gZWFjaCBvZiB0aGUgb3B0aW9uIGVsZW1lbnRzLgorCisgICBJZiBgZ2V0b3B0JyBmaW5kcyBhbm90aGVyIG9wdGlvbiBjaGFyYWN0ZXIsIGl0IHJldHVybnMgdGhhdCBjaGFyYWN0ZXIsCisgICB1cGRhdGluZyBgb3B0aW5kJyBhbmQgYG5leHRjaGFyJyBzbyB0aGF0IHRoZSBuZXh0IGNhbGwgdG8gYGdldG9wdCcgY2FuCisgICByZXN1bWUgdGhlIHNjYW4gd2l0aCB0aGUgZm9sbG93aW5nIG9wdGlvbiBjaGFyYWN0ZXIgb3IgQVJHVi1lbGVtZW50LgorCisgICBJZiB0aGVyZSBhcmUgbm8gbW9yZSBvcHRpb24gY2hhcmFjdGVycywgYGdldG9wdCcgcmV0dXJucyAtMS4KKyAgIFRoZW4gYG9wdGluZCcgaXMgdGhlIGluZGV4IGluIEFSR1Ygb2YgdGhlIGZpcnN0IEFSR1YtZWxlbWVudAorICAgdGhhdCBpcyBub3QgYW4gb3B0aW9uLiAgKFRoZSBBUkdWLWVsZW1lbnRzIGhhdmUgYmVlbiBwZXJtdXRlZAorICAgc28gdGhhdCB0aG9zZSB0aGF0IGFyZSBub3Qgb3B0aW9ucyBub3cgY29tZSBsYXN0LikKKworICAgT1BUU1RSSU5HIGlzIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGxlZ2l0aW1hdGUgb3B0aW9uIGNoYXJhY3RlcnMuCisgICBJZiBhbiBvcHRpb24gY2hhcmFjdGVyIGlzIHNlZW4gdGhhdCBpcyBub3QgbGlzdGVkIGluIE9QVFNUUklORywKKyAgIHJldHVybiAnPycgYWZ0ZXIgcHJpbnRpbmcgYW4gZXJyb3IgbWVzc2FnZS4gIElmIHlvdSBzZXQgYG9wdGVycicgdG8KKyAgIHplcm8sIHRoZSBlcnJvciBtZXNzYWdlIGlzIHN1cHByZXNzZWQgYnV0IHdlIHN0aWxsIHJldHVybiAnPycuCisKKyAgIElmIGEgY2hhciBpbiBPUFRTVFJJTkcgaXMgZm9sbG93ZWQgYnkgYSBjb2xvbiwgdGhhdCBtZWFucyBpdCB3YW50cyBhbiBhcmcsCisgICBzbyB0aGUgZm9sbG93aW5nIHRleHQgaW4gdGhlIHNhbWUgQVJHVi1lbGVtZW50LCBvciB0aGUgdGV4dCBvZiB0aGUgZm9sbG93aW5nCisgICBBUkdWLWVsZW1lbnQsIGlzIHJldHVybmVkIGluIGBvcHRhcmcnLiAgVHdvIGNvbG9ucyBtZWFuIGFuIG9wdGlvbiB0aGF0CisgICB3YW50cyBhbiBvcHRpb25hbCBhcmc7IGlmIHRoZXJlIGlzIHRleHQgaW4gdGhlIGN1cnJlbnQgQVJHVi1lbGVtZW50LAorICAgaXQgaXMgcmV0dXJuZWQgaW4gYG9wdGFyZycsIG90aGVyd2lzZSBgb3B0YXJnJyBpcyBzZXQgdG8gemVyby4KKworICAgSWYgT1BUU1RSSU5HIHN0YXJ0cyB3aXRoIGAtJyBvciBgKycsIGl0IHJlcXVlc3RzIGRpZmZlcmVudCBtZXRob2RzIG9mCisgICBoYW5kbGluZyB0aGUgbm9uLW9wdGlvbiBBUkdWLWVsZW1lbnRzLgorICAgU2VlIHRoZSBjb21tZW50cyBhYm91dCBSRVRVUk5fSU5fT1JERVIgYW5kIFJFUVVJUkVfT1JERVIsIGFib3ZlLgorCisgICBMb25nLW5hbWVkIG9wdGlvbnMgYmVnaW4gd2l0aCBgLS0nIGluc3RlYWQgb2YgYC0nLgorICAgVGhlaXIgbmFtZXMgbWF5IGJlIGFiYnJldmlhdGVkIGFzIGxvbmcgYXMgdGhlIGFiYnJldmlhdGlvbiBpcyB1bmlxdWUKKyAgIG9yIGlzIGFuIGV4YWN0IG1hdGNoIGZvciBzb21lIGRlZmluZWQgb3B0aW9uLiAgSWYgdGhleSBoYXZlIGFuCisgICBhcmd1bWVudCwgaXQgZm9sbG93cyB0aGUgb3B0aW9uIG5hbWUgaW4gdGhlIHNhbWUgQVJHVi1lbGVtZW50LCBzZXBhcmF0ZWQKKyAgIGZyb20gdGhlIG9wdGlvbiBuYW1lIGJ5IGEgYD0nLCBvciBlbHNlIHRoZSBpbiBuZXh0IEFSR1YtZWxlbWVudC4KKyAgIFdoZW4gYGdldG9wdCcgZmluZHMgYSBsb25nLW5hbWVkIG9wdGlvbiwgaXQgcmV0dXJucyAwIGlmIHRoYXQgb3B0aW9uJ3MKKyAgIGBmbGFnJyBmaWVsZCBpcyBub256ZXJvLCB0aGUgdmFsdWUgb2YgdGhlIG9wdGlvbidzIGB2YWwnIGZpZWxkCisgICBpZiB0aGUgYGZsYWcnIGZpZWxkIGlzIHplcm8uCisKKyAgIExPTkdPUFRTIGlzIGEgdmVjdG9yIG9mIGBzdHJ1Y3Qgb3B0aW9uJyB0ZXJtaW5hdGVkIGJ5IGFuCisgICBlbGVtZW50IGNvbnRhaW5pbmcgYSBuYW1lIHdoaWNoIGlzIHplcm8uCisKKyAgIExPTkdJTkQgcmV0dXJucyB0aGUgaW5kZXggaW4gTE9OR09QVCBvZiB0aGUgbG9uZy1uYW1lZCBvcHRpb24gZm91bmQuCisgICBJdCBpcyBvbmx5IHZhbGlkIHdoZW4gYSBsb25nLW5hbWVkIG9wdGlvbiBoYXMgYmVlbiBmb3VuZCBieSB0aGUgbW9zdAorICAgcmVjZW50IGNhbGwuCisKKyAgIElmIExPTkdfT05MWSBpcyBub256ZXJvLCAnLScgYXMgd2VsbCBhcyAnLS0nIGNhbiBpbnRyb2R1Y2UKKyAgIGxvbmctbmFtZWQgb3B0aW9ucy4KKworICAgSWYgUE9TSVhMWV9DT1JSRUNUIGlzIG5vbnplcm8sIGJlaGF2ZSBhcyBpZiB0aGUgUE9TSVhMWV9DT1JSRUNUCisgICBlbnZpcm9ubWVudCB2YXJpYWJsZSB3ZXJlIHNldC4gICovCisKK2ludAorX2dldG9wdF9pbnRlcm5hbF9yIChpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKm9wdHN0cmluZywKKwkJICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKmxvbmdvcHRzLCBpbnQgKmxvbmdpbmQsCisJCSAgICBpbnQgbG9uZ19vbmx5LCBpbnQgcG9zaXhseV9jb3JyZWN0LCBzdHJ1Y3QgX2dldG9wdF9kYXRhICpkKQoreworICBpbnQgcHJpbnRfZXJyb3JzID0gZC0+b3B0ZXJyOworICBpZiAob3B0c3RyaW5nWzBdID09ICc6JykKKyAgICBwcmludF9lcnJvcnMgPSAwOworCisgIGlmIChhcmdjIDwgMSkKKyAgICByZXR1cm4gLTE7CisKKyAgZC0+b3B0YXJnID0gTlVMTDsKKworICBpZiAoZC0+b3B0aW5kID09IDAgfHwgIWQtPl9faW5pdGlhbGl6ZWQpCisgICAgeworICAgICAgaWYgKGQtPm9wdGluZCA9PSAwKQorCWQtPm9wdGluZCA9IDE7CS8qIERvbid0IHNjYW4gQVJHVlswXSwgdGhlIHByb2dyYW0gbmFtZS4gICovCisgICAgICBvcHRzdHJpbmcgPSBfZ2V0b3B0X2luaXRpYWxpemUgKGFyZ2MsIGFyZ3YsIG9wdHN0cmluZywKKwkJCQkgICAgICBwb3NpeGx5X2NvcnJlY3QsIGQpOworICAgICAgZC0+X19pbml0aWFsaXplZCA9IDE7CisgICAgfQorCisgIC8qIFRlc3Qgd2hldGhlciBBUkdWW29wdGluZF0gcG9pbnRzIHRvIGEgbm9uLW9wdGlvbiBhcmd1bWVudC4KKyAgICAgRWl0aGVyIGl0IGRvZXMgbm90IGhhdmUgb3B0aW9uIHN5bnRheCwgb3IgdGhlcmUgaXMgYW4gZW52aXJvbm1lbnQgZmxhZworICAgICBmcm9tIHRoZSBzaGVsbCBpbmRpY2F0aW5nIGl0IGlzIG5vdCBhbiBvcHRpb24uICBUaGUgbGF0ZXIgaW5mb3JtYXRpb24KKyAgICAgaXMgb25seSB1c2VkIHdoZW4gdGhlIHVzZWQgaW4gdGhlIEdOVSBsaWJjLiAgKi8KKyNpZiBkZWZpbmVkIF9MSUJDICYmIGRlZmluZWQgVVNFX05PTk9QVElPTl9GTEFHUworIyBkZWZpbmUgTk9OT1BUSU9OX1AgKGFyZ3ZbZC0+b3B0aW5kXVswXSAhPSAnLScgfHwgYXJndltkLT5vcHRpbmRdWzFdID09ICdcMCcgXAorCQkgICAgICB8fCAoZC0+b3B0aW5kIDwgZC0+X19ub25vcHRpb25fZmxhZ3NfbGVuCQkgICAgICBcCisJCQkgICYmIF9fZ2V0b3B0X25vbm9wdGlvbl9mbGFnc1tkLT5vcHRpbmRdID09ICcxJykpCisjZWxzZQorIyBkZWZpbmUgTk9OT1BUSU9OX1AgKGFyZ3ZbZC0+b3B0aW5kXVswXSAhPSAnLScgfHwgYXJndltkLT5vcHRpbmRdWzFdID09ICdcMCcpCisjZW5kaWYKKworICBpZiAoZC0+X19uZXh0Y2hhciA9PSBOVUxMIHx8ICpkLT5fX25leHRjaGFyID09ICdcMCcpCisgICAgeworICAgICAgLyogQWR2YW5jZSB0byB0aGUgbmV4dCBBUkdWLWVsZW1lbnQuICAqLworCisgICAgICAvKiBHaXZlIEZJUlNUX05PTk9QVCAmIExBU1RfTk9OT1BUIHJhdGlvbmFsIHZhbHVlcyBpZiBPUFRJTkQgaGFzIGJlZW4KKwkgbW92ZWQgYmFjayBieSB0aGUgdXNlciAod2hvIG1heSBhbHNvIGhhdmUgY2hhbmdlZCB0aGUgYXJndW1lbnRzKS4gICovCisgICAgICBpZiAoZC0+X19sYXN0X25vbm9wdCA+IGQtPm9wdGluZCkKKwlkLT5fX2xhc3Rfbm9ub3B0ID0gZC0+b3B0aW5kOworICAgICAgaWYgKGQtPl9fZmlyc3Rfbm9ub3B0ID4gZC0+b3B0aW5kKQorCWQtPl9fZmlyc3Rfbm9ub3B0ID0gZC0+b3B0aW5kOworCisgICAgICBpZiAoZC0+X19vcmRlcmluZyA9PSBQRVJNVVRFKQorCXsKKwkgIC8qIElmIHdlIGhhdmUganVzdCBwcm9jZXNzZWQgc29tZSBvcHRpb25zIGZvbGxvd2luZyBzb21lIG5vbi1vcHRpb25zLAorCSAgICAgZXhjaGFuZ2UgdGhlbSBzbyB0aGF0IHRoZSBvcHRpb25zIGNvbWUgZmlyc3QuICAqLworCisJICBpZiAoZC0+X19maXJzdF9ub25vcHQgIT0gZC0+X19sYXN0X25vbm9wdAorCSAgICAgICYmIGQtPl9fbGFzdF9ub25vcHQgIT0gZC0+b3B0aW5kKQorCSAgICBleGNoYW5nZSAoKGNoYXIgKiopIGFyZ3YsIGQpOworCSAgZWxzZSBpZiAoZC0+X19sYXN0X25vbm9wdCAhPSBkLT5vcHRpbmQpCisJICAgIGQtPl9fZmlyc3Rfbm9ub3B0ID0gZC0+b3B0aW5kOworCisJICAvKiBTa2lwIGFueSBhZGRpdGlvbmFsIG5vbi1vcHRpb25zCisJICAgICBhbmQgZXh0ZW5kIHRoZSByYW5nZSBvZiBub24tb3B0aW9ucyBwcmV2aW91c2x5IHNraXBwZWQuICAqLworCisJICB3aGlsZSAoZC0+b3B0aW5kIDwgYXJnYyAmJiBOT05PUFRJT05fUCkKKwkgICAgZC0+b3B0aW5kKys7CisJICBkLT5fX2xhc3Rfbm9ub3B0ID0gZC0+b3B0aW5kOworCX0KKworICAgICAgLyogVGhlIHNwZWNpYWwgQVJHVi1lbGVtZW50IGAtLScgbWVhbnMgcHJlbWF0dXJlIGVuZCBvZiBvcHRpb25zLgorCSBTa2lwIGl0IGxpa2UgYSBudWxsIG9wdGlvbiwKKwkgdGhlbiBleGNoYW5nZSB3aXRoIHByZXZpb3VzIG5vbi1vcHRpb25zIGFzIGlmIGl0IHdlcmUgYW4gb3B0aW9uLAorCSB0aGVuIHNraXAgZXZlcnl0aGluZyBlbHNlIGxpa2UgYSBub24tb3B0aW9uLiAgKi8KKworICAgICAgaWYgKGQtPm9wdGluZCAhPSBhcmdjICYmICFzdHJjbXAgKGFyZ3ZbZC0+b3B0aW5kXSwgIi0tIikpCisJeworCSAgZC0+b3B0aW5kKys7CisKKwkgIGlmIChkLT5fX2ZpcnN0X25vbm9wdCAhPSBkLT5fX2xhc3Rfbm9ub3B0CisJICAgICAgJiYgZC0+X19sYXN0X25vbm9wdCAhPSBkLT5vcHRpbmQpCisJICAgIGV4Y2hhbmdlICgoY2hhciAqKikgYXJndiwgZCk7CisJICBlbHNlIGlmIChkLT5fX2ZpcnN0X25vbm9wdCA9PSBkLT5fX2xhc3Rfbm9ub3B0KQorCSAgICBkLT5fX2ZpcnN0X25vbm9wdCA9IGQtPm9wdGluZDsKKwkgIGQtPl9fbGFzdF9ub25vcHQgPSBhcmdjOworCisJICBkLT5vcHRpbmQgPSBhcmdjOworCX0KKworICAgICAgLyogSWYgd2UgaGF2ZSBkb25lIGFsbCB0aGUgQVJHVi1lbGVtZW50cywgc3RvcCB0aGUgc2NhbgorCSBhbmQgYmFjayBvdmVyIGFueSBub24tb3B0aW9ucyB0aGF0IHdlIHNraXBwZWQgYW5kIHBlcm11dGVkLiAgKi8KKworICAgICAgaWYgKGQtPm9wdGluZCA9PSBhcmdjKQorCXsKKwkgIC8qIFNldCB0aGUgbmV4dC1hcmctaW5kZXggdG8gcG9pbnQgYXQgdGhlIG5vbi1vcHRpb25zCisJICAgICB0aGF0IHdlIHByZXZpb3VzbHkgc2tpcHBlZCwgc28gdGhlIGNhbGxlciB3aWxsIGRpZ2VzdCB0aGVtLiAgKi8KKwkgIGlmIChkLT5fX2ZpcnN0X25vbm9wdCAhPSBkLT5fX2xhc3Rfbm9ub3B0KQorCSAgICBkLT5vcHRpbmQgPSBkLT5fX2ZpcnN0X25vbm9wdDsKKwkgIHJldHVybiAtMTsKKwl9CisKKyAgICAgIC8qIElmIHdlIGhhdmUgY29tZSB0byBhIG5vbi1vcHRpb24gYW5kIGRpZCBub3QgcGVybXV0ZSBpdCwKKwkgZWl0aGVyIHN0b3AgdGhlIHNjYW4gb3IgZGVzY3JpYmUgaXQgdG8gdGhlIGNhbGxlciBhbmQgcGFzcyBpdCBieS4gICovCisKKyAgICAgIGlmIChOT05PUFRJT05fUCkKKwl7CisJICBpZiAoZC0+X19vcmRlcmluZyA9PSBSRVFVSVJFX09SREVSKQorCSAgICByZXR1cm4gLTE7CisJICBkLT5vcHRhcmcgPSBhcmd2W2QtPm9wdGluZCsrXTsKKwkgIHJldHVybiAxOworCX0KKworICAgICAgLyogV2UgaGF2ZSBmb3VuZCBhbm90aGVyIG9wdGlvbi1BUkdWLWVsZW1lbnQuCisJIFNraXAgdGhlIGluaXRpYWwgcHVuY3R1YXRpb24uICAqLworCisgICAgICBkLT5fX25leHRjaGFyID0gKGFyZ3ZbZC0+b3B0aW5kXSArIDEKKwkJICArIChsb25nb3B0cyAhPSBOVUxMICYmIGFyZ3ZbZC0+b3B0aW5kXVsxXSA9PSAnLScpKTsKKyAgICB9CisKKyAgLyogRGVjb2RlIHRoZSBjdXJyZW50IG9wdGlvbi1BUkdWLWVsZW1lbnQuICAqLworCisgIC8qIENoZWNrIHdoZXRoZXIgdGhlIEFSR1YtZWxlbWVudCBpcyBhIGxvbmcgb3B0aW9uLgorCisgICAgIElmIGxvbmdfb25seSBhbmQgdGhlIEFSR1YtZWxlbWVudCBoYXMgdGhlIGZvcm0gIi1mIiwgd2hlcmUgZiBpcworICAgICBhIHZhbGlkIHNob3J0IG9wdGlvbiwgZG9uJ3QgY29uc2lkZXIgaXQgYW4gYWJicmV2aWF0ZWQgZm9ybSBvZgorICAgICBhIGxvbmcgb3B0aW9uIHRoYXQgc3RhcnRzIHdpdGggZi4gIE90aGVyd2lzZSB0aGVyZSB3b3VsZCBiZSBubworICAgICB3YXkgdG8gZ2l2ZSB0aGUgLWYgc2hvcnQgb3B0aW9uLgorCisgICAgIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB0aGVyZSdzIGEgbG9uZyBvcHRpb24gImZ1YmFyIiBhbmQKKyAgICAgdGhlIEFSR1YtZWxlbWVudCBpcyAiLWZ1IiwgZG8gY29uc2lkZXIgdGhhdCBhbiBhYmJyZXZpYXRpb24gb2YKKyAgICAgdGhlIGxvbmcgb3B0aW9uLCBqdXN0IGxpa2UgIi0tZnUiLCBhbmQgbm90ICItZiIgd2l0aCBhcmcgInUiLgorCisgICAgIFRoaXMgZGlzdGluY3Rpb24gc2VlbXMgdG8gYmUgdGhlIG1vc3QgdXNlZnVsIGFwcHJvYWNoLiAgKi8KKworICBpZiAobG9uZ29wdHMgIT0gTlVMTAorICAgICAgJiYgKGFyZ3ZbZC0+b3B0aW5kXVsxXSA9PSAnLScKKwkgIHx8IChsb25nX29ubHkgJiYgKGFyZ3ZbZC0+b3B0aW5kXVsyXQorCQkJICAgIHx8ICFzdHJjaHIgKG9wdHN0cmluZywgYXJndltkLT5vcHRpbmRdWzFdKSkpKSkKKyAgICB7CisgICAgICBjaGFyICpuYW1lZW5kOworICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqcDsKKyAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKnBmb3VuZCA9IE5VTEw7CisgICAgICBpbnQgZXhhY3QgPSAwOworICAgICAgaW50IGFtYmlnID0gMDsKKyAgICAgIGludCBpbmRmb3VuZCA9IC0xOworICAgICAgaW50IG9wdGlvbl9pbmRleDsKKworICAgICAgZm9yIChuYW1lZW5kID0gZC0+X19uZXh0Y2hhcjsgKm5hbWVlbmQgJiYgKm5hbWVlbmQgIT0gJz0nOyBuYW1lZW5kKyspCisJLyogRG8gbm90aGluZy4gICovIDsKKworICAgICAgLyogVGVzdCBhbGwgbG9uZyBvcHRpb25zIGZvciBlaXRoZXIgZXhhY3QgbWF0Y2gKKwkgb3IgYWJicmV2aWF0ZWQgbWF0Y2hlcy4gICovCisgICAgICBmb3IgKHAgPSBsb25nb3B0cywgb3B0aW9uX2luZGV4ID0gMDsgcC0+bmFtZTsgcCsrLCBvcHRpb25faW5kZXgrKykKKwlpZiAoIXN0cm5jbXAgKHAtPm5hbWUsIGQtPl9fbmV4dGNoYXIsIG5hbWVlbmQgLSBkLT5fX25leHRjaGFyKSkKKwkgIHsKKwkgICAgaWYgKCh1bnNpZ25lZCBpbnQpIChuYW1lZW5kIC0gZC0+X19uZXh0Y2hhcikKKwkJPT0gKHVuc2lnbmVkIGludCkgc3RybGVuIChwLT5uYW1lKSkKKwkgICAgICB7CisJCS8qIEV4YWN0IG1hdGNoIGZvdW5kLiAgKi8KKwkJcGZvdW5kID0gcDsKKwkJaW5kZm91bmQgPSBvcHRpb25faW5kZXg7CisJCWV4YWN0ID0gMTsKKwkJYnJlYWs7CisJICAgICAgfQorCSAgICBlbHNlIGlmIChwZm91bmQgPT0gTlVMTCkKKwkgICAgICB7CisJCS8qIEZpcnN0IG5vbmV4YWN0IG1hdGNoIGZvdW5kLiAgKi8KKwkJcGZvdW5kID0gcDsKKwkJaW5kZm91bmQgPSBvcHRpb25faW5kZXg7CisJICAgICAgfQorCSAgICBlbHNlIGlmIChsb25nX29ubHkKKwkJICAgICB8fCBwZm91bmQtPmhhc19hcmcgIT0gcC0+aGFzX2FyZworCQkgICAgIHx8IHBmb3VuZC0+ZmxhZyAhPSBwLT5mbGFnCisJCSAgICAgfHwgcGZvdW5kLT52YWwgIT0gcC0+dmFsKQorCSAgICAgIC8qIFNlY29uZCBvciBsYXRlciBub25leGFjdCBtYXRjaCBmb3VuZC4gICovCisJICAgICAgYW1iaWcgPSAxOworCSAgfQorCisgICAgICBpZiAoYW1iaWcgJiYgIWV4YWN0KQorCXsKKwkgIGlmIChwcmludF9lcnJvcnMpCisJICAgIHsKKyNpZiBkZWZpbmVkIF9MSUJDICYmIGRlZmluZWQgVVNFX0lOX0xJQklPCisJICAgICAgY2hhciAqYnVmOworCisJICAgICAgaWYgKF9fYXNwcmludGYgKCZidWYsIF8oIiVzOiBvcHRpb24gYCVzJyBpcyBhbWJpZ3VvdXNcbiIpLAorCQkJICAgICAgYXJndlswXSwgYXJndltkLT5vcHRpbmRdKSA+PSAwKQorCQl7CisJCSAgX0lPX2Zsb2NrZmlsZSAoc3RkZXJyKTsKKworCQkgIGludCBvbGRfZmxhZ3MyID0gKChfSU9fRklMRSAqKSBzdGRlcnIpLT5fZmxhZ3MyOworCQkgICgoX0lPX0ZJTEUgKikgc3RkZXJyKS0+X2ZsYWdzMiB8PSBfSU9fRkxBR1MyX05PVENBTkNFTDsKKworCQkgIF9fZnhwcmludGYgKE5VTEwsICIlcyIsIGJ1Zik7CisKKwkJICAoKF9JT19GSUxFICopIHN0ZGVyciktPl9mbGFnczIgPSBvbGRfZmxhZ3MyOworCQkgIF9JT19mdW5sb2NrZmlsZSAoc3RkZXJyKTsKKworCQkgIGZyZWUgKGJ1Zik7CisJCX0KKyNlbHNlCisJICAgICAgZnByaW50ZiAoc3RkZXJyLCBfKCIlczogb3B0aW9uIGAlcycgaXMgYW1iaWd1b3VzXG4iKSwKKwkJICAgICAgIGFyZ3ZbMF0sIGFyZ3ZbZC0+b3B0aW5kXSk7CisjZW5kaWYKKwkgICAgfQorCSAgZC0+X19uZXh0Y2hhciArPSBzdHJsZW4gKGQtPl9fbmV4dGNoYXIpOworCSAgZC0+b3B0aW5kKys7CisJICBkLT5vcHRvcHQgPSAwOworCSAgcmV0dXJuICc/JzsKKwl9CisKKyAgICAgIGlmIChwZm91bmQgIT0gTlVMTCkKKwl7CisJICBvcHRpb25faW5kZXggPSBpbmRmb3VuZDsKKwkgIGQtPm9wdGluZCsrOworCSAgaWYgKCpuYW1lZW5kKQorCSAgICB7CisJICAgICAgLyogRG9uJ3QgdGVzdCBoYXNfYXJnIHdpdGggPiwgYmVjYXVzZSBzb21lIEMgY29tcGlsZXJzIGRvbid0CisJCSBhbGxvdyBpdCB0byBiZSB1c2VkIG9uIGVudW1zLiAgKi8KKwkgICAgICBpZiAocGZvdW5kLT5oYXNfYXJnKQorCQlkLT5vcHRhcmcgPSBuYW1lZW5kICsgMTsKKwkgICAgICBlbHNlCisJCXsKKwkJICBpZiAocHJpbnRfZXJyb3JzKQorCQkgICAgeworI2lmIGRlZmluZWQgX0xJQkMgJiYgZGVmaW5lZCBVU0VfSU5fTElCSU8KKwkJICAgICAgY2hhciAqYnVmOworCQkgICAgICBpbnQgbjsKKyNlbmRpZgorCisJCSAgICAgIGlmIChhcmd2W2QtPm9wdGluZCAtIDFdWzFdID09ICctJykKKwkJCXsKKwkJCSAgLyogLS1vcHRpb24gKi8KKyNpZiBkZWZpbmVkIF9MSUJDICYmIGRlZmluZWQgVVNFX0lOX0xJQklPCisJCQkgIG4gPSBfX2FzcHJpbnRmICgmYnVmLCBfKCJcCislczogb3B0aW9uIGAtLSVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iKSwKKwkJCQkJICBhcmd2WzBdLCBwZm91bmQtPm5hbWUpOworI2Vsc2UKKwkJCSAgZnByaW50ZiAoc3RkZXJyLCBfKCJcCislczogb3B0aW9uIGAtLSVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iKSwKKwkJCQkgICBhcmd2WzBdLCBwZm91bmQtPm5hbWUpOworI2VuZGlmCisJCQl9CisJCSAgICAgIGVsc2UKKwkJCXsKKwkJCSAgLyogK29wdGlvbiBvciAtb3B0aW9uICovCisjaWYgZGVmaW5lZCBfTElCQyAmJiBkZWZpbmVkIFVTRV9JTl9MSUJJTworCQkJICBuID0gX19hc3ByaW50ZiAoJmJ1ZiwgXygiXAorJXM6IG9wdGlvbiBgJWMlcycgZG9lc24ndCBhbGxvdyBhbiBhcmd1bWVudFxuIiksCisJCQkJCSAgYXJndlswXSwgYXJndltkLT5vcHRpbmQgLSAxXVswXSwKKwkJCQkJICBwZm91bmQtPm5hbWUpOworI2Vsc2UKKwkJCSAgZnByaW50ZiAoc3RkZXJyLCBfKCJcCislczogb3B0aW9uIGAlYyVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iKSwKKwkJCQkgICBhcmd2WzBdLCBhcmd2W2QtPm9wdGluZCAtIDFdWzBdLAorCQkJCSAgIHBmb3VuZC0+bmFtZSk7CisjZW5kaWYKKwkJCX0KKworI2lmIGRlZmluZWQgX0xJQkMgJiYgZGVmaW5lZCBVU0VfSU5fTElCSU8KKwkJICAgICAgaWYgKG4gPj0gMCkKKwkJCXsKKwkJCSAgX0lPX2Zsb2NrZmlsZSAoc3RkZXJyKTsKKworCQkJICBpbnQgb2xkX2ZsYWdzMiA9ICgoX0lPX0ZJTEUgKikgc3RkZXJyKS0+X2ZsYWdzMjsKKwkJCSAgKChfSU9fRklMRSAqKSBzdGRlcnIpLT5fZmxhZ3MyCisJCQkgICAgfD0gX0lPX0ZMQUdTMl9OT1RDQU5DRUw7CisKKwkJCSAgX19meHByaW50ZiAoTlVMTCwgIiVzIiwgYnVmKTsKKworCQkJICAoKF9JT19GSUxFICopIHN0ZGVyciktPl9mbGFnczIgPSBvbGRfZmxhZ3MyOworCQkJICBfSU9fZnVubG9ja2ZpbGUgKHN0ZGVycik7CisKKwkJCSAgZnJlZSAoYnVmKTsKKwkJCX0KKyNlbmRpZgorCQkgICAgfQorCisJCSAgZC0+X19uZXh0Y2hhciArPSBzdHJsZW4gKGQtPl9fbmV4dGNoYXIpOworCisJCSAgZC0+b3B0b3B0ID0gcGZvdW5kLT52YWw7CisJCSAgcmV0dXJuICc/JzsKKwkJfQorCSAgICB9CisJICBlbHNlIGlmIChwZm91bmQtPmhhc19hcmcgPT0gMSkKKwkgICAgeworCSAgICAgIGlmIChkLT5vcHRpbmQgPCBhcmdjKQorCQlkLT5vcHRhcmcgPSBhcmd2W2QtPm9wdGluZCsrXTsKKwkgICAgICBlbHNlCisJCXsKKwkJICBpZiAocHJpbnRfZXJyb3JzKQorCQkgICAgeworI2lmIGRlZmluZWQgX0xJQkMgJiYgZGVmaW5lZCBVU0VfSU5fTElCSU8KKwkJICAgICAgY2hhciAqYnVmOworCisJCSAgICAgIGlmIChfX2FzcHJpbnRmICgmYnVmLCBfKCJcCislczogb3B0aW9uIGAlcycgcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIpLAorCQkJCSAgICAgIGFyZ3ZbMF0sIGFyZ3ZbZC0+b3B0aW5kIC0gMV0pID49IDApCisJCQl7CisJCQkgIF9JT19mbG9ja2ZpbGUgKHN0ZGVycik7CisKKwkJCSAgaW50IG9sZF9mbGFnczIgPSAoKF9JT19GSUxFICopIHN0ZGVyciktPl9mbGFnczI7CisJCQkgICgoX0lPX0ZJTEUgKikgc3RkZXJyKS0+X2ZsYWdzMgorCQkJICAgIHw9IF9JT19GTEFHUzJfTk9UQ0FOQ0VMOworCisJCQkgIF9fZnhwcmludGYgKE5VTEwsICIlcyIsIGJ1Zik7CisKKwkJCSAgKChfSU9fRklMRSAqKSBzdGRlcnIpLT5fZmxhZ3MyID0gb2xkX2ZsYWdzMjsKKwkJCSAgX0lPX2Z1bmxvY2tmaWxlIChzdGRlcnIpOworCisJCQkgIGZyZWUgKGJ1Zik7CisJCQl9CisjZWxzZQorCQkgICAgICBmcHJpbnRmIChzdGRlcnIsCisJCQkgICAgICAgXygiJXM6IG9wdGlvbiBgJXMnIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iKSwKKwkJCSAgICAgICBhcmd2WzBdLCBhcmd2W2QtPm9wdGluZCAtIDFdKTsKKyNlbmRpZgorCQkgICAgfQorCQkgIGQtPl9fbmV4dGNoYXIgKz0gc3RybGVuIChkLT5fX25leHRjaGFyKTsKKwkJICBkLT5vcHRvcHQgPSBwZm91bmQtPnZhbDsKKwkJICByZXR1cm4gb3B0c3RyaW5nWzBdID09ICc6JyA/ICc6JyA6ICc/JzsKKwkJfQorCSAgICB9CisJICBkLT5fX25leHRjaGFyICs9IHN0cmxlbiAoZC0+X19uZXh0Y2hhcik7CisJICBpZiAobG9uZ2luZCAhPSBOVUxMKQorCSAgICAqbG9uZ2luZCA9IG9wdGlvbl9pbmRleDsKKwkgIGlmIChwZm91bmQtPmZsYWcpCisJICAgIHsKKwkgICAgICAqKHBmb3VuZC0+ZmxhZykgPSBwZm91bmQtPnZhbDsKKwkgICAgICByZXR1cm4gMDsKKwkgICAgfQorCSAgcmV0dXJuIHBmb3VuZC0+dmFsOworCX0KKworICAgICAgLyogQ2FuJ3QgZmluZCBpdCBhcyBhIGxvbmcgb3B0aW9uLiAgSWYgdGhpcyBpcyBub3QgZ2V0b3B0X2xvbmdfb25seSwKKwkgb3IgdGhlIG9wdGlvbiBzdGFydHMgd2l0aCAnLS0nIG9yIGlzIG5vdCBhIHZhbGlkIHNob3J0CisJIG9wdGlvbiwgdGhlbiBpdCdzIGFuIGVycm9yLgorCSBPdGhlcndpc2UgaW50ZXJwcmV0IGl0IGFzIGEgc2hvcnQgb3B0aW9uLiAgKi8KKyAgICAgIGlmICghbG9uZ19vbmx5IHx8IGFyZ3ZbZC0+b3B0aW5kXVsxXSA9PSAnLScKKwkgIHx8IHN0cmNociAob3B0c3RyaW5nLCAqZC0+X19uZXh0Y2hhcikgPT0gTlVMTCkKKwl7CisJICBpZiAocHJpbnRfZXJyb3JzKQorCSAgICB7CisjaWYgZGVmaW5lZCBfTElCQyAmJiBkZWZpbmVkIFVTRV9JTl9MSUJJTworCSAgICAgIGNoYXIgKmJ1ZjsKKwkgICAgICBpbnQgbjsKKyNlbmRpZgorCisJICAgICAgaWYgKGFyZ3ZbZC0+b3B0aW5kXVsxXSA9PSAnLScpCisJCXsKKwkJICAvKiAtLW9wdGlvbiAqLworI2lmIGRlZmluZWQgX0xJQkMgJiYgZGVmaW5lZCBVU0VfSU5fTElCSU8KKwkJICBuID0gX19hc3ByaW50ZiAoJmJ1ZiwgXygiJXM6IHVucmVjb2duaXplZCBvcHRpb24gYC0tJXMnXG4iKSwKKwkJCQkgIGFyZ3ZbMF0sIGQtPl9fbmV4dGNoYXIpOworI2Vsc2UKKwkJICBmcHJpbnRmIChzdGRlcnIsIF8oIiVzOiB1bnJlY29nbml6ZWQgb3B0aW9uIGAtLSVzJ1xuIiksCisJCQkgICBhcmd2WzBdLCBkLT5fX25leHRjaGFyKTsKKyNlbmRpZgorCQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgLyogK29wdGlvbiBvciAtb3B0aW9uICovCisjaWYgZGVmaW5lZCBfTElCQyAmJiBkZWZpbmVkIFVTRV9JTl9MSUJJTworCQkgIG4gPSBfX2FzcHJpbnRmICgmYnVmLCBfKCIlczogdW5yZWNvZ25pemVkIG9wdGlvbiBgJWMlcydcbiIpLAorCQkJCSAgYXJndlswXSwgYXJndltkLT5vcHRpbmRdWzBdLCBkLT5fX25leHRjaGFyKTsKKyNlbHNlCisJCSAgZnByaW50ZiAoc3RkZXJyLCBfKCIlczogdW5yZWNvZ25pemVkIG9wdGlvbiBgJWMlcydcbiIpLAorCQkJICAgYXJndlswXSwgYXJndltkLT5vcHRpbmRdWzBdLCBkLT5fX25leHRjaGFyKTsKKyNlbmRpZgorCQl9CisKKyNpZiBkZWZpbmVkIF9MSUJDICYmIGRlZmluZWQgVVNFX0lOX0xJQklPCisJICAgICAgaWYgKG4gPj0gMCkKKwkJeworCQkgIF9JT19mbG9ja2ZpbGUgKHN0ZGVycik7CisKKwkJICBpbnQgb2xkX2ZsYWdzMiA9ICgoX0lPX0ZJTEUgKikgc3RkZXJyKS0+X2ZsYWdzMjsKKwkJICAoKF9JT19GSUxFICopIHN0ZGVyciktPl9mbGFnczIgfD0gX0lPX0ZMQUdTMl9OT1RDQU5DRUw7CisKKwkJICBfX2Z4cHJpbnRmIChOVUxMLCAiJXMiLCBidWYpOworCisJCSAgKChfSU9fRklMRSAqKSBzdGRlcnIpLT5fZmxhZ3MyID0gb2xkX2ZsYWdzMjsKKwkJICBfSU9fZnVubG9ja2ZpbGUgKHN0ZGVycik7CisKKwkJICBmcmVlIChidWYpOworCQl9CisjZW5kaWYKKwkgICAgfQorCSAgZC0+X19uZXh0Y2hhciA9IChjaGFyICopICIiOworCSAgZC0+b3B0aW5kKys7CisJICBkLT5vcHRvcHQgPSAwOworCSAgcmV0dXJuICc/JzsKKwl9CisgICAgfQorCisgIC8qIExvb2sgYXQgYW5kIGhhbmRsZSB0aGUgbmV4dCBzaG9ydCBvcHRpb24tY2hhcmFjdGVyLiAgKi8KKworICB7CisgICAgY2hhciBjID0gKmQtPl9fbmV4dGNoYXIrKzsKKyAgICBjaGFyICp0ZW1wID0gc3RyY2hyIChvcHRzdHJpbmcsIGMpOworCisgICAgLyogSW5jcmVtZW50IGBvcHRpbmQnIHdoZW4gd2Ugc3RhcnQgdG8gcHJvY2VzcyBpdHMgbGFzdCBjaGFyYWN0ZXIuICAqLworICAgIGlmICgqZC0+X19uZXh0Y2hhciA9PSAnXDAnKQorICAgICAgKytkLT5vcHRpbmQ7CisKKyAgICBpZiAodGVtcCA9PSBOVUxMIHx8IGMgPT0gJzonKQorICAgICAgeworCWlmIChwcmludF9lcnJvcnMpCisJICB7CisjaWYgZGVmaW5lZCBfTElCQyAmJiBkZWZpbmVkIFVTRV9JTl9MSUJJTworCSAgICAgIGNoYXIgKmJ1ZjsKKwkgICAgICBpbnQgbjsKKyNlbmRpZgorCisJICAgIGlmIChkLT5fX3Bvc2l4bHlfY29ycmVjdCkKKwkgICAgICB7CisJCS8qIDEwMDMuMiBzcGVjaWZpZXMgdGhlIGZvcm1hdCBvZiB0aGlzIG1lc3NhZ2UuICAqLworI2lmIGRlZmluZWQgX0xJQkMgJiYgZGVmaW5lZCBVU0VfSU5fTElCSU8KKwkJbiA9IF9fYXNwcmludGYgKCZidWYsIF8oIiVzOiBpbGxlZ2FsIG9wdGlvbiAtLSAlY1xuIiksCisJCQkJYXJndlswXSwgYyk7CisjZWxzZQorCQlmcHJpbnRmIChzdGRlcnIsIF8oIiVzOiBpbGxlZ2FsIG9wdGlvbiAtLSAlY1xuIiksIGFyZ3ZbMF0sIGMpOworI2VuZGlmCisJICAgICAgfQorCSAgICBlbHNlCisJICAgICAgeworI2lmIGRlZmluZWQgX0xJQkMgJiYgZGVmaW5lZCBVU0VfSU5fTElCSU8KKwkJbiA9IF9fYXNwcmludGYgKCZidWYsIF8oIiVzOiBpbnZhbGlkIG9wdGlvbiAtLSAlY1xuIiksCisJCQkJYXJndlswXSwgYyk7CisjZWxzZQorCQlmcHJpbnRmIChzdGRlcnIsIF8oIiVzOiBpbnZhbGlkIG9wdGlvbiAtLSAlY1xuIiksIGFyZ3ZbMF0sIGMpOworI2VuZGlmCisJICAgICAgfQorCisjaWYgZGVmaW5lZCBfTElCQyAmJiBkZWZpbmVkIFVTRV9JTl9MSUJJTworCSAgICBpZiAobiA+PSAwKQorCSAgICAgIHsKKwkJX0lPX2Zsb2NrZmlsZSAoc3RkZXJyKTsKKworCQlpbnQgb2xkX2ZsYWdzMiA9ICgoX0lPX0ZJTEUgKikgc3RkZXJyKS0+X2ZsYWdzMjsKKwkJKChfSU9fRklMRSAqKSBzdGRlcnIpLT5fZmxhZ3MyIHw9IF9JT19GTEFHUzJfTk9UQ0FOQ0VMOworCisJCV9fZnhwcmludGYgKE5VTEwsICIlcyIsIGJ1Zik7CisKKwkJKChfSU9fRklMRSAqKSBzdGRlcnIpLT5fZmxhZ3MyID0gb2xkX2ZsYWdzMjsKKwkJX0lPX2Z1bmxvY2tmaWxlIChzdGRlcnIpOworCisJCWZyZWUgKGJ1Zik7CisJICAgICAgfQorI2VuZGlmCisJICB9CisJZC0+b3B0b3B0ID0gYzsKKwlyZXR1cm4gJz8nOworICAgICAgfQorICAgIC8qIENvbnZlbmllbmNlLiBUcmVhdCBQT1NJWCAtVyBmb28gc2FtZSBhcyBsb25nIG9wdGlvbiAtLWZvbyAqLworICAgIGlmICh0ZW1wWzBdID09ICdXJyAmJiB0ZW1wWzFdID09ICc7JykKKyAgICAgIHsKKwljaGFyICpuYW1lZW5kOworCWNvbnN0IHN0cnVjdCBvcHRpb24gKnA7CisJY29uc3Qgc3RydWN0IG9wdGlvbiAqcGZvdW5kID0gTlVMTDsKKwlpbnQgZXhhY3QgPSAwOworCWludCBhbWJpZyA9IDA7CisJaW50IGluZGZvdW5kID0gMDsKKwlpbnQgb3B0aW9uX2luZGV4OworCisJLyogVGhpcyBpcyBhbiBvcHRpb24gdGhhdCByZXF1aXJlcyBhbiBhcmd1bWVudC4gICovCisJaWYgKCpkLT5fX25leHRjaGFyICE9ICdcMCcpCisJICB7CisJICAgIGQtPm9wdGFyZyA9IGQtPl9fbmV4dGNoYXI7CisJICAgIC8qIElmIHdlIGVuZCB0aGlzIEFSR1YtZWxlbWVudCBieSB0YWtpbmcgdGhlIHJlc3QgYXMgYW4gYXJnLAorCSAgICAgICB3ZSBtdXN0IGFkdmFuY2UgdG8gdGhlIG5leHQgZWxlbWVudCBub3cuICAqLworCSAgICBkLT5vcHRpbmQrKzsKKwkgIH0KKwllbHNlIGlmIChkLT5vcHRpbmQgPT0gYXJnYykKKwkgIHsKKwkgICAgaWYgKHByaW50X2Vycm9ycykKKwkgICAgICB7CisJCS8qIDEwMDMuMiBzcGVjaWZpZXMgdGhlIGZvcm1hdCBvZiB0aGlzIG1lc3NhZ2UuICAqLworI2lmIGRlZmluZWQgX0xJQkMgJiYgZGVmaW5lZCBVU0VfSU5fTElCSU8KKwkJY2hhciAqYnVmOworCisJCWlmIChfX2FzcHJpbnRmICgmYnVmLAorCQkJCV8oIiVzOiBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQgLS0gJWNcbiIpLAorCQkJCWFyZ3ZbMF0sIGMpID49IDApCisJCSAgeworCQkgICAgX0lPX2Zsb2NrZmlsZSAoc3RkZXJyKTsKKworCQkgICAgaW50IG9sZF9mbGFnczIgPSAoKF9JT19GSUxFICopIHN0ZGVyciktPl9mbGFnczI7CisJCSAgICAoKF9JT19GSUxFICopIHN0ZGVyciktPl9mbGFnczIgfD0gX0lPX0ZMQUdTMl9OT1RDQU5DRUw7CisKKwkJICAgIF9fZnhwcmludGYgKE5VTEwsICIlcyIsIGJ1Zik7CisKKwkJICAgICgoX0lPX0ZJTEUgKikgc3RkZXJyKS0+X2ZsYWdzMiA9IG9sZF9mbGFnczI7CisJCSAgICBfSU9fZnVubG9ja2ZpbGUgKHN0ZGVycik7CisKKwkJICAgIGZyZWUgKGJ1Zik7CisJCSAgfQorI2Vsc2UKKwkJZnByaW50ZiAoc3RkZXJyLCBfKCIlczogb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IC0tICVjXG4iKSwKKwkJCSBhcmd2WzBdLCBjKTsKKyNlbmRpZgorCSAgICAgIH0KKwkgICAgZC0+b3B0b3B0ID0gYzsKKwkgICAgaWYgKG9wdHN0cmluZ1swXSA9PSAnOicpCisJICAgICAgYyA9ICc6JzsKKwkgICAgZWxzZQorCSAgICAgIGMgPSAnPyc7CisJICAgIHJldHVybiBjOworCSAgfQorCWVsc2UKKwkgIC8qIFdlIGFscmVhZHkgaW5jcmVtZW50ZWQgYGQtPm9wdGluZCcgb25jZTsKKwkgICAgIGluY3JlbWVudCBpdCBhZ2FpbiB3aGVuIHRha2luZyBuZXh0IEFSR1YtZWx0IGFzIGFyZ3VtZW50LiAgKi8KKwkgIGQtPm9wdGFyZyA9IGFyZ3ZbZC0+b3B0aW5kKytdOworCisJLyogb3B0YXJnIGlzIG5vdyB0aGUgYXJndW1lbnQsIHNlZSBpZiBpdCdzIGluIHRoZQorCSAgIHRhYmxlIG9mIGxvbmdvcHRzLiAgKi8KKworCWZvciAoZC0+X19uZXh0Y2hhciA9IG5hbWVlbmQgPSBkLT5vcHRhcmc7ICpuYW1lZW5kICYmICpuYW1lZW5kICE9ICc9JzsKKwkgICAgIG5hbWVlbmQrKykKKwkgIC8qIERvIG5vdGhpbmcuICAqLyA7CisKKwkvKiBUZXN0IGFsbCBsb25nIG9wdGlvbnMgZm9yIGVpdGhlciBleGFjdCBtYXRjaAorCSAgIG9yIGFiYnJldmlhdGVkIG1hdGNoZXMuICAqLworCWZvciAocCA9IGxvbmdvcHRzLCBvcHRpb25faW5kZXggPSAwOyBwLT5uYW1lOyBwKyssIG9wdGlvbl9pbmRleCsrKQorCSAgaWYgKCFzdHJuY21wIChwLT5uYW1lLCBkLT5fX25leHRjaGFyLCBuYW1lZW5kIC0gZC0+X19uZXh0Y2hhcikpCisJICAgIHsKKwkgICAgICBpZiAoKHVuc2lnbmVkIGludCkgKG5hbWVlbmQgLSBkLT5fX25leHRjaGFyKSA9PSBzdHJsZW4gKHAtPm5hbWUpKQorCQl7CisJCSAgLyogRXhhY3QgbWF0Y2ggZm91bmQuICAqLworCQkgIHBmb3VuZCA9IHA7CisJCSAgaW5kZm91bmQgPSBvcHRpb25faW5kZXg7CisJCSAgZXhhY3QgPSAxOworCQkgIGJyZWFrOworCQl9CisJICAgICAgZWxzZSBpZiAocGZvdW5kID09IE5VTEwpCisJCXsKKwkJICAvKiBGaXJzdCBub25leGFjdCBtYXRjaCBmb3VuZC4gICovCisJCSAgcGZvdW5kID0gcDsKKwkJICBpbmRmb3VuZCA9IG9wdGlvbl9pbmRleDsKKwkJfQorCSAgICAgIGVsc2UKKwkJLyogU2Vjb25kIG9yIGxhdGVyIG5vbmV4YWN0IG1hdGNoIGZvdW5kLiAgKi8KKwkJYW1iaWcgPSAxOworCSAgICB9CisJaWYgKGFtYmlnICYmICFleGFjdCkKKwkgIHsKKwkgICAgaWYgKHByaW50X2Vycm9ycykKKwkgICAgICB7CisjaWYgZGVmaW5lZCBfTElCQyAmJiBkZWZpbmVkIFVTRV9JTl9MSUJJTworCQljaGFyICpidWY7CisKKwkJaWYgKF9fYXNwcmludGYgKCZidWYsIF8oIiVzOiBvcHRpb24gYC1XICVzJyBpcyBhbWJpZ3VvdXNcbiIpLAorCQkJCWFyZ3ZbMF0sIGFyZ3ZbZC0+b3B0aW5kXSkgPj0gMCkKKwkJICB7CisJCSAgICBfSU9fZmxvY2tmaWxlIChzdGRlcnIpOworCisJCSAgICBpbnQgb2xkX2ZsYWdzMiA9ICgoX0lPX0ZJTEUgKikgc3RkZXJyKS0+X2ZsYWdzMjsKKwkJICAgICgoX0lPX0ZJTEUgKikgc3RkZXJyKS0+X2ZsYWdzMiB8PSBfSU9fRkxBR1MyX05PVENBTkNFTDsKKworCQkgICAgX19meHByaW50ZiAoTlVMTCwgIiVzIiwgYnVmKTsKKworCQkgICAgKChfSU9fRklMRSAqKSBzdGRlcnIpLT5fZmxhZ3MyID0gb2xkX2ZsYWdzMjsKKwkJICAgIF9JT19mdW5sb2NrZmlsZSAoc3RkZXJyKTsKKworCQkgICAgZnJlZSAoYnVmKTsKKwkJICB9CisjZWxzZQorCQlmcHJpbnRmIChzdGRlcnIsIF8oIiVzOiBvcHRpb24gYC1XICVzJyBpcyBhbWJpZ3VvdXNcbiIpLAorCQkJIGFyZ3ZbMF0sIGFyZ3ZbZC0+b3B0aW5kXSk7CisjZW5kaWYKKwkgICAgICB9CisJICAgIGQtPl9fbmV4dGNoYXIgKz0gc3RybGVuIChkLT5fX25leHRjaGFyKTsKKwkgICAgZC0+b3B0aW5kKys7CisJICAgIHJldHVybiAnPyc7CisJICB9CisJaWYgKHBmb3VuZCAhPSBOVUxMKQorCSAgeworCSAgICBvcHRpb25faW5kZXggPSBpbmRmb3VuZDsKKwkgICAgaWYgKCpuYW1lZW5kKQorCSAgICAgIHsKKwkJLyogRG9uJ3QgdGVzdCBoYXNfYXJnIHdpdGggPiwgYmVjYXVzZSBzb21lIEMgY29tcGlsZXJzIGRvbid0CisJCSAgIGFsbG93IGl0IHRvIGJlIHVzZWQgb24gZW51bXMuICAqLworCQlpZiAocGZvdW5kLT5oYXNfYXJnKQorCQkgIGQtPm9wdGFyZyA9IG5hbWVlbmQgKyAxOworCQllbHNlCisJCSAgeworCQkgICAgaWYgKHByaW50X2Vycm9ycykKKwkJICAgICAgeworI2lmIGRlZmluZWQgX0xJQkMgJiYgZGVmaW5lZCBVU0VfSU5fTElCSU8KKwkJCWNoYXIgKmJ1ZjsKKworCQkJaWYgKF9fYXNwcmludGYgKCZidWYsIF8oIlwKKyVzOiBvcHRpb24gYC1XICVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iKSwKKwkJCQkJYXJndlswXSwgcGZvdW5kLT5uYW1lKSA+PSAwKQorCQkJICB7CisJCQkgICAgX0lPX2Zsb2NrZmlsZSAoc3RkZXJyKTsKKworCQkJICAgIGludCBvbGRfZmxhZ3MyID0gKChfSU9fRklMRSAqKSBzdGRlcnIpLT5fZmxhZ3MyOworCQkJICAgICgoX0lPX0ZJTEUgKikgc3RkZXJyKS0+X2ZsYWdzMgorCQkJICAgICAgfD0gX0lPX0ZMQUdTMl9OT1RDQU5DRUw7CisKKwkJCSAgICBfX2Z4cHJpbnRmIChOVUxMLCAiJXMiLCBidWYpOworCisJCQkgICAgKChfSU9fRklMRSAqKSBzdGRlcnIpLT5fZmxhZ3MyID0gb2xkX2ZsYWdzMjsKKwkJCSAgICBfSU9fZnVubG9ja2ZpbGUgKHN0ZGVycik7CisKKwkJCSAgICBmcmVlIChidWYpOworCQkJICB9CisjZWxzZQorCQkJZnByaW50ZiAoc3RkZXJyLCBfKCJcCislczogb3B0aW9uIGAtVyAlcycgZG9lc24ndCBhbGxvdyBhbiBhcmd1bWVudFxuIiksCisJCQkJIGFyZ3ZbMF0sIHBmb3VuZC0+bmFtZSk7CisjZW5kaWYKKwkJICAgICAgfQorCisJCSAgICBkLT5fX25leHRjaGFyICs9IHN0cmxlbiAoZC0+X19uZXh0Y2hhcik7CisJCSAgICByZXR1cm4gJz8nOworCQkgIH0KKwkgICAgICB9CisJICAgIGVsc2UgaWYgKHBmb3VuZC0+aGFzX2FyZyA9PSAxKQorCSAgICAgIHsKKwkJaWYgKGQtPm9wdGluZCA8IGFyZ2MpCisJCSAgZC0+b3B0YXJnID0gYXJndltkLT5vcHRpbmQrK107CisJCWVsc2UKKwkJICB7CisJCSAgICBpZiAocHJpbnRfZXJyb3JzKQorCQkgICAgICB7CisjaWYgZGVmaW5lZCBfTElCQyAmJiBkZWZpbmVkIFVTRV9JTl9MSUJJTworCQkJY2hhciAqYnVmOworCisJCQlpZiAoX19hc3ByaW50ZiAoJmJ1ZiwgXygiXAorJXM6IG9wdGlvbiBgJXMnIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iKSwKKwkJCQkJYXJndlswXSwgYXJndltkLT5vcHRpbmQgLSAxXSkgPj0gMCkKKwkJCSAgeworCQkJICAgIF9JT19mbG9ja2ZpbGUgKHN0ZGVycik7CisKKwkJCSAgICBpbnQgb2xkX2ZsYWdzMiA9ICgoX0lPX0ZJTEUgKikgc3RkZXJyKS0+X2ZsYWdzMjsKKwkJCSAgICAoKF9JT19GSUxFICopIHN0ZGVyciktPl9mbGFnczIKKwkJCSAgICAgIHw9IF9JT19GTEFHUzJfTk9UQ0FOQ0VMOworCisJCQkgICAgX19meHByaW50ZiAoTlVMTCwgIiVzIiwgYnVmKTsKKworCQkJICAgICgoX0lPX0ZJTEUgKikgc3RkZXJyKS0+X2ZsYWdzMiA9IG9sZF9mbGFnczI7CisJCQkgICAgX0lPX2Z1bmxvY2tmaWxlIChzdGRlcnIpOworCisJCQkgICAgZnJlZSAoYnVmKTsKKwkJCSAgfQorI2Vsc2UKKwkJCWZwcmludGYgKHN0ZGVyciwKKwkJCQkgXygiJXM6IG9wdGlvbiBgJXMnIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iKSwKKwkJCQkgYXJndlswXSwgYXJndltkLT5vcHRpbmQgLSAxXSk7CisjZW5kaWYKKwkJICAgICAgfQorCQkgICAgZC0+X19uZXh0Y2hhciArPSBzdHJsZW4gKGQtPl9fbmV4dGNoYXIpOworCQkgICAgcmV0dXJuIG9wdHN0cmluZ1swXSA9PSAnOicgPyAnOicgOiAnPyc7CisJCSAgfQorCSAgICAgIH0KKwkgICAgZC0+X19uZXh0Y2hhciArPSBzdHJsZW4gKGQtPl9fbmV4dGNoYXIpOworCSAgICBpZiAobG9uZ2luZCAhPSBOVUxMKQorCSAgICAgICpsb25naW5kID0gb3B0aW9uX2luZGV4OworCSAgICBpZiAocGZvdW5kLT5mbGFnKQorCSAgICAgIHsKKwkJKihwZm91bmQtPmZsYWcpID0gcGZvdW5kLT52YWw7CisJCXJldHVybiAwOworCSAgICAgIH0KKwkgICAgcmV0dXJuIHBmb3VuZC0+dmFsOworCSAgfQorCSAgZC0+X19uZXh0Y2hhciA9IE5VTEw7CisJICByZXR1cm4gJ1cnOwkvKiBMZXQgdGhlIGFwcGxpY2F0aW9uIGhhbmRsZSBpdC4gICAqLworICAgICAgfQorICAgIGlmICh0ZW1wWzFdID09ICc6JykKKyAgICAgIHsKKwlpZiAodGVtcFsyXSA9PSAnOicpCisJICB7CisJICAgIC8qIFRoaXMgaXMgYW4gb3B0aW9uIHRoYXQgYWNjZXB0cyBhbiBhcmd1bWVudCBvcHRpb25hbGx5LiAgKi8KKwkgICAgaWYgKCpkLT5fX25leHRjaGFyICE9ICdcMCcpCisJICAgICAgeworCQlkLT5vcHRhcmcgPSBkLT5fX25leHRjaGFyOworCQlkLT5vcHRpbmQrKzsKKwkgICAgICB9CisJICAgIGVsc2UKKwkgICAgICBkLT5vcHRhcmcgPSBOVUxMOworCSAgICBkLT5fX25leHRjaGFyID0gTlVMTDsKKwkgIH0KKwllbHNlCisJICB7CisJICAgIC8qIFRoaXMgaXMgYW4gb3B0aW9uIHRoYXQgcmVxdWlyZXMgYW4gYXJndW1lbnQuICAqLworCSAgICBpZiAoKmQtPl9fbmV4dGNoYXIgIT0gJ1wwJykKKwkgICAgICB7CisJCWQtPm9wdGFyZyA9IGQtPl9fbmV4dGNoYXI7CisJCS8qIElmIHdlIGVuZCB0aGlzIEFSR1YtZWxlbWVudCBieSB0YWtpbmcgdGhlIHJlc3QgYXMgYW4gYXJnLAorCQkgICB3ZSBtdXN0IGFkdmFuY2UgdG8gdGhlIG5leHQgZWxlbWVudCBub3cuICAqLworCQlkLT5vcHRpbmQrKzsKKwkgICAgICB9CisJICAgIGVsc2UgaWYgKGQtPm9wdGluZCA9PSBhcmdjKQorCSAgICAgIHsKKwkJaWYgKHByaW50X2Vycm9ycykKKwkJICB7CisJCSAgICAvKiAxMDAzLjIgc3BlY2lmaWVzIHRoZSBmb3JtYXQgb2YgdGhpcyBtZXNzYWdlLiAgKi8KKyNpZiBkZWZpbmVkIF9MSUJDICYmIGRlZmluZWQgVVNFX0lOX0xJQklPCisJCSAgICBjaGFyICpidWY7CisKKwkJICAgIGlmIChfX2FzcHJpbnRmICgmYnVmLCBfKCJcCislczogb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IC0tICVjXG4iKSwKKwkJCQkgICAgYXJndlswXSwgYykgPj0gMCkKKwkJICAgICAgeworCQkJX0lPX2Zsb2NrZmlsZSAoc3RkZXJyKTsKKworCQkJaW50IG9sZF9mbGFnczIgPSAoKF9JT19GSUxFICopIHN0ZGVyciktPl9mbGFnczI7CisJCQkoKF9JT19GSUxFICopIHN0ZGVyciktPl9mbGFnczIgfD0gX0lPX0ZMQUdTMl9OT1RDQU5DRUw7CisKKwkJCV9fZnhwcmludGYgKE5VTEwsICIlcyIsIGJ1Zik7CisKKwkJCSgoX0lPX0ZJTEUgKikgc3RkZXJyKS0+X2ZsYWdzMiA9IG9sZF9mbGFnczI7CisJCQlfSU9fZnVubG9ja2ZpbGUgKHN0ZGVycik7CisKKwkJCWZyZWUgKGJ1Zik7CisJCSAgICAgIH0KKyNlbHNlCisJCSAgICBmcHJpbnRmIChzdGRlcnIsCisJCQkgICAgIF8oIiVzOiBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQgLS0gJWNcbiIpLAorCQkJICAgICBhcmd2WzBdLCBjKTsKKyNlbmRpZgorCQkgIH0KKwkJZC0+b3B0b3B0ID0gYzsKKwkJaWYgKG9wdHN0cmluZ1swXSA9PSAnOicpCisJCSAgYyA9ICc6JzsKKwkJZWxzZQorCQkgIGMgPSAnPyc7CisJICAgICAgfQorCSAgICBlbHNlCisJICAgICAgLyogV2UgYWxyZWFkeSBpbmNyZW1lbnRlZCBgb3B0aW5kJyBvbmNlOworCQkgaW5jcmVtZW50IGl0IGFnYWluIHdoZW4gdGFraW5nIG5leHQgQVJHVi1lbHQgYXMgYXJndW1lbnQuICAqLworCSAgICAgIGQtPm9wdGFyZyA9IGFyZ3ZbZC0+b3B0aW5kKytdOworCSAgICBkLT5fX25leHRjaGFyID0gTlVMTDsKKwkgIH0KKyAgICAgIH0KKyAgICByZXR1cm4gYzsKKyAgfQorfQorCitpbnQKK19nZXRvcHRfaW50ZXJuYWwgKGludCBhcmdjLCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqb3B0c3RyaW5nLAorCQkgIGNvbnN0IHN0cnVjdCBvcHRpb24gKmxvbmdvcHRzLCBpbnQgKmxvbmdpbmQsCisJCSAgaW50IGxvbmdfb25seSwgaW50IHBvc2l4bHlfY29ycmVjdCkKK3sKKyAgaW50IHJlc3VsdDsKKworICBnZXRvcHRfZGF0YS5vcHRpbmQgPSBvcHRpbmQ7CisgIGdldG9wdF9kYXRhLm9wdGVyciA9IG9wdGVycjsKKworICByZXN1bHQgPSBfZ2V0b3B0X2ludGVybmFsX3IgKGFyZ2MsIGFyZ3YsIG9wdHN0cmluZywgbG9uZ29wdHMsIGxvbmdpbmQsCisJCQkgICAgICAgbG9uZ19vbmx5LCBwb3NpeGx5X2NvcnJlY3QsICZnZXRvcHRfZGF0YSk7CisKKyAgb3B0aW5kID0gZ2V0b3B0X2RhdGEub3B0aW5kOworICBvcHRhcmcgPSBnZXRvcHRfZGF0YS5vcHRhcmc7CisgIG9wdG9wdCA9IGdldG9wdF9kYXRhLm9wdG9wdDsKKworICByZXR1cm4gcmVzdWx0OworfQorCisvKiBnbGliYyBnZXRzIGEgTFNCLWNvbXBsaWFudCBnZXRvcHQuCisgICBTdGFuZGFsb25lIGFwcGxpY2F0aW9ucyBnZXQgYSBQT1NJWC1jb21wbGlhbnQgZ2V0b3B0LiAgKi8KKyNpZiBfTElCQworZW51bSB7IFBPU0lYTFlfQ09SUkVDVCA9IDAgfTsKKyNlbHNlCitlbnVtIHsgUE9TSVhMWV9DT1JSRUNUID0gMSB9OworI2VuZGlmCisKK2ludAorZ2V0b3B0IChpbnQgYXJnYywgY2hhciAqY29uc3QgKmFyZ3YsIGNvbnN0IGNoYXIgKm9wdHN0cmluZykKK3sKKyAgcmV0dXJuIF9nZXRvcHRfaW50ZXJuYWwgKGFyZ2MsIChjaGFyICoqKSBhcmd2LCBvcHRzdHJpbmcsIE5VTEwsIE5VTEwsIDAsCisJCQkgICBQT1NJWExZX0NPUlJFQ1QpOworfQorCisMCisjaWZkZWYgVEVTVAorCisvKiBDb21waWxlIHdpdGggLURURVNUIHRvIG1ha2UgYW4gZXhlY3V0YWJsZSBmb3IgdXNlIGluIHRlc3RpbmcKKyAgIHRoZSBhYm92ZSBkZWZpbml0aW9uIG9mIGBnZXRvcHQnLiAgKi8KKworaW50CittYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgIGludCBjOworICBpbnQgZGlnaXRfb3B0aW5kID0gMDsKKworICB3aGlsZSAoMSkKKyAgICB7CisgICAgICBpbnQgdGhpc19vcHRpb25fb3B0aW5kID0gb3B0aW5kID8gb3B0aW5kIDogMTsKKworICAgICAgYyA9IGdldG9wdCAoYXJnYywgYXJndiwgImFiYzpkOjAxMjM0NTY3ODkiKTsKKyAgICAgIGlmIChjID09IC0xKQorCWJyZWFrOworCisgICAgICBzd2l0Y2ggKGMpCisJeworCWNhc2UgJzAnOgorCWNhc2UgJzEnOgorCWNhc2UgJzInOgorCWNhc2UgJzMnOgorCWNhc2UgJzQnOgorCWNhc2UgJzUnOgorCWNhc2UgJzYnOgorCWNhc2UgJzcnOgorCWNhc2UgJzgnOgorCWNhc2UgJzknOgorCSAgaWYgKGRpZ2l0X29wdGluZCAhPSAwICYmIGRpZ2l0X29wdGluZCAhPSB0aGlzX29wdGlvbl9vcHRpbmQpCisJICAgIHByaW50ZiAoImRpZ2l0cyBvY2N1ciBpbiB0d28gZGlmZmVyZW50IGFyZ3YtZWxlbWVudHMuXG4iKTsKKwkgIGRpZ2l0X29wdGluZCA9IHRoaXNfb3B0aW9uX29wdGluZDsKKwkgIHByaW50ZiAoIm9wdGlvbiAlY1xuIiwgYyk7CisJICBicmVhazsKKworCWNhc2UgJ2EnOgorCSAgcHJpbnRmICgib3B0aW9uIGFcbiIpOworCSAgYnJlYWs7CisKKwljYXNlICdiJzoKKwkgIHByaW50ZiAoIm9wdGlvbiBiXG4iKTsKKwkgIGJyZWFrOworCisJY2FzZSAnYyc6CisJICBwcmludGYgKCJvcHRpb24gYyB3aXRoIHZhbHVlIGAlcydcbiIsIG9wdGFyZyk7CisJICBicmVhazsKKworCWNhc2UgJz8nOgorCSAgYnJlYWs7CisKKwlkZWZhdWx0OgorCSAgcHJpbnRmICgiPz8gZ2V0b3B0IHJldHVybmVkIGNoYXJhY3RlciBjb2RlIDAlbyA/P1xuIiwgYyk7CisJfQorICAgIH0KKworICBpZiAob3B0aW5kIDwgYXJnYykKKyAgICB7CisgICAgICBwcmludGYgKCJub24tb3B0aW9uIEFSR1YtZWxlbWVudHM6ICIpOworICAgICAgd2hpbGUgKG9wdGluZCA8IGFyZ2MpCisJcHJpbnRmICgiJXMgIiwgYXJndltvcHRpbmQrK10pOworICAgICAgcHJpbnRmICgiXG4iKTsKKyAgICB9CisKKyAgZXhpdCAoMCk7Cit9CisKKyNlbmRpZiAvKiBURVNUICovCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGliL2dldG9wdDEuYyBiL3BhcnRlZC0xLjguNy9saWIvZ2V0b3B0MS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMDc0NmUKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGliL2dldG9wdDEuYwpAQCAtMCwwICsxLDE3MSBAQAorLyogZ2V0b3B0X2xvbmcgYW5kIGdldG9wdF9sb25nX29ubHkgZW50cnkgcG9pbnRzIGZvciBHTlUgZ2V0b3B0LgorICAgQ29weXJpZ2h0IChDKSAxOTg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk2LDk3LDk4LDIwMDQsMjAwNgorICAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKwwKKyNpZmRlZiBfTElCQworIyBpbmNsdWRlIDxnZXRvcHQuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGNvbmZpZy5oPgorIyBpbmNsdWRlICJnZXRvcHQuaCIKKyNlbmRpZgorI2luY2x1ZGUgImdldG9wdF9pbnQuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKy8qIFRoaXMgbmVlZHMgdG8gY29tZSBhZnRlciBzb21lIGxpYnJhcnkgI2luY2x1ZGUKKyAgIHRvIGdldCBfX0dOVV9MSUJSQVJZX18gZGVmaW5lZC4gICovCisjaWZkZWYgX19HTlVfTElCUkFSWV9fCisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKworI2lmbmRlZglOVUxMCisjZGVmaW5lIE5VTEwgMAorI2VuZGlmCisKK2ludAorZ2V0b3B0X2xvbmcgKGludCBhcmdjLCBjaGFyICpfX2dldG9wdF9hcmd2X2NvbnN0ICphcmd2LCBjb25zdCBjaGFyICpvcHRpb25zLAorCSAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqbG9uZ19vcHRpb25zLCBpbnQgKm9wdF9pbmRleCkKK3sKKyAgcmV0dXJuIF9nZXRvcHRfaW50ZXJuYWwgKGFyZ2MsIChjaGFyICoqKSBhcmd2LCBvcHRpb25zLCBsb25nX29wdGlvbnMsCisJCQkgICBvcHRfaW5kZXgsIDAsIDApOworfQorCitpbnQKK19nZXRvcHRfbG9uZ19yIChpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKm9wdGlvbnMsCisJCWNvbnN0IHN0cnVjdCBvcHRpb24gKmxvbmdfb3B0aW9ucywgaW50ICpvcHRfaW5kZXgsCisJCXN0cnVjdCBfZ2V0b3B0X2RhdGEgKmQpCit7CisgIHJldHVybiBfZ2V0b3B0X2ludGVybmFsX3IgKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIGxvbmdfb3B0aW9ucywgb3B0X2luZGV4LAorCQkJICAgICAwLCAwLCBkKTsKK30KKworLyogTGlrZSBnZXRvcHRfbG9uZywgYnV0ICctJyBhcyB3ZWxsIGFzICctLScgY2FuIGluZGljYXRlIGEgbG9uZyBvcHRpb24uCisgICBJZiBhbiBvcHRpb24gdGhhdCBzdGFydHMgd2l0aCAnLScgKG5vdCAnLS0nKSBkb2Vzbid0IG1hdGNoIGEgbG9uZyBvcHRpb24sCisgICBidXQgZG9lcyBtYXRjaCBhIHNob3J0IG9wdGlvbiwgaXQgaXMgcGFyc2VkIGFzIGEgc2hvcnQgb3B0aW9uCisgICBpbnN0ZWFkLiAgKi8KKworaW50CitnZXRvcHRfbG9uZ19vbmx5IChpbnQgYXJnYywgY2hhciAqX19nZXRvcHRfYXJndl9jb25zdCAqYXJndiwKKwkJICBjb25zdCBjaGFyICpvcHRpb25zLAorCQkgIGNvbnN0IHN0cnVjdCBvcHRpb24gKmxvbmdfb3B0aW9ucywgaW50ICpvcHRfaW5kZXgpCit7CisgIHJldHVybiBfZ2V0b3B0X2ludGVybmFsIChhcmdjLCAoY2hhciAqKikgYXJndiwgb3B0aW9ucywgbG9uZ19vcHRpb25zLAorCQkJICAgb3B0X2luZGV4LCAxLCAwKTsKK30KKworaW50CitfZ2V0b3B0X2xvbmdfb25seV9yIChpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKm9wdGlvbnMsCisJCSAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqbG9uZ19vcHRpb25zLCBpbnQgKm9wdF9pbmRleCwKKwkJICAgICBzdHJ1Y3QgX2dldG9wdF9kYXRhICpkKQoreworICByZXR1cm4gX2dldG9wdF9pbnRlcm5hbF9yIChhcmdjLCBhcmd2LCBvcHRpb25zLCBsb25nX29wdGlvbnMsIG9wdF9pbmRleCwKKwkJCSAgICAgMSwgMCwgZCk7Cit9CisKKwwKKyNpZmRlZiBURVNUCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCitpbnQKK21haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgaW50IGM7CisgIGludCBkaWdpdF9vcHRpbmQgPSAwOworCisgIHdoaWxlICgxKQorICAgIHsKKyAgICAgIGludCB0aGlzX29wdGlvbl9vcHRpbmQgPSBvcHRpbmQgPyBvcHRpbmQgOiAxOworICAgICAgaW50IG9wdGlvbl9pbmRleCA9IDA7CisgICAgICBzdGF0aWMgc3RydWN0IG9wdGlvbiBsb25nX29wdGlvbnNbXSA9CisgICAgICB7CisJeyJhZGQiLCAxLCAwLCAwfSwKKwl7ImFwcGVuZCIsIDAsIDAsIDB9LAorCXsiZGVsZXRlIiwgMSwgMCwgMH0sCisJeyJ2ZXJib3NlIiwgMCwgMCwgMH0sCisJeyJjcmVhdGUiLCAwLCAwLCAwfSwKKwl7ImZpbGUiLCAxLCAwLCAwfSwKKwl7MCwgMCwgMCwgMH0KKyAgICAgIH07CisKKyAgICAgIGMgPSBnZXRvcHRfbG9uZyAoYXJnYywgYXJndiwgImFiYzpkOjAxMjM0NTY3ODkiLAorCQkgICAgICAgbG9uZ19vcHRpb25zLCAmb3B0aW9uX2luZGV4KTsKKyAgICAgIGlmIChjID09IC0xKQorCWJyZWFrOworCisgICAgICBzd2l0Y2ggKGMpCisJeworCWNhc2UgMDoKKwkgIHByaW50ZiAoIm9wdGlvbiAlcyIsIGxvbmdfb3B0aW9uc1tvcHRpb25faW5kZXhdLm5hbWUpOworCSAgaWYgKG9wdGFyZykKKwkgICAgcHJpbnRmICgiIHdpdGggYXJnICVzIiwgb3B0YXJnKTsKKwkgIHByaW50ZiAoIlxuIik7CisJICBicmVhazsKKworCWNhc2UgJzAnOgorCWNhc2UgJzEnOgorCWNhc2UgJzInOgorCWNhc2UgJzMnOgorCWNhc2UgJzQnOgorCWNhc2UgJzUnOgorCWNhc2UgJzYnOgorCWNhc2UgJzcnOgorCWNhc2UgJzgnOgorCWNhc2UgJzknOgorCSAgaWYgKGRpZ2l0X29wdGluZCAhPSAwICYmIGRpZ2l0X29wdGluZCAhPSB0aGlzX29wdGlvbl9vcHRpbmQpCisJICAgIHByaW50ZiAoImRpZ2l0cyBvY2N1ciBpbiB0d28gZGlmZmVyZW50IGFyZ3YtZWxlbWVudHMuXG4iKTsKKwkgIGRpZ2l0X29wdGluZCA9IHRoaXNfb3B0aW9uX29wdGluZDsKKwkgIHByaW50ZiAoIm9wdGlvbiAlY1xuIiwgYyk7CisJICBicmVhazsKKworCWNhc2UgJ2EnOgorCSAgcHJpbnRmICgib3B0aW9uIGFcbiIpOworCSAgYnJlYWs7CisKKwljYXNlICdiJzoKKwkgIHByaW50ZiAoIm9wdGlvbiBiXG4iKTsKKwkgIGJyZWFrOworCisJY2FzZSAnYyc6CisJICBwcmludGYgKCJvcHRpb24gYyB3aXRoIHZhbHVlIGAlcydcbiIsIG9wdGFyZyk7CisJICBicmVhazsKKworCWNhc2UgJ2QnOgorCSAgcHJpbnRmICgib3B0aW9uIGQgd2l0aCB2YWx1ZSBgJXMnXG4iLCBvcHRhcmcpOworCSAgYnJlYWs7CisKKwljYXNlICc/JzoKKwkgIGJyZWFrOworCisJZGVmYXVsdDoKKwkgIHByaW50ZiAoIj8/IGdldG9wdCByZXR1cm5lZCBjaGFyYWN0ZXIgY29kZSAwJW8gPz9cbiIsIGMpOworCX0KKyAgICB9CisKKyAgaWYgKG9wdGluZCA8IGFyZ2MpCisgICAgeworICAgICAgcHJpbnRmICgibm9uLW9wdGlvbiBBUkdWLWVsZW1lbnRzOiAiKTsKKyAgICAgIHdoaWxlIChvcHRpbmQgPCBhcmdjKQorCXByaW50ZiAoIiVzICIsIGFyZ3Zbb3B0aW5kKytdKTsKKyAgICAgIHByaW50ZiAoIlxuIik7CisgICAgfQorCisgIGV4aXQgKDApOworfQorCisjZW5kaWYgLyogVEVTVCAqLwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYi9nZXRvcHRfLmggYi9wYXJ0ZWQtMS44LjcvbGliL2dldG9wdF8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTVlZjlhCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYi9nZXRvcHRfLmgKQEAgLTAsMCArMSwyMjYgQEAKKy8qIERlY2xhcmF0aW9ucyBmb3IgZ2V0b3B0LgorICAgQ29weXJpZ2h0IChDKSAxOTg5LTE5OTQsMTk5Ni0xOTk5LDIwMDEsMjAwMywyMDA0LDIwMDUsMjAwNiwyMDA3CisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKworI2lmbmRlZiBfR0VUT1BUX0gKKworI2lmbmRlZiBfX25lZWRfZ2V0b3B0CisjIGRlZmluZSBfR0VUT1BUX0ggMQorI2VuZGlmCisKKy8qIFN0YW5kYWxvbmUgYXBwbGljYXRpb25zIHNob3VsZCAjZGVmaW5lIF9fR0VUT1BUX1BSRUZJWCB0byBhbgorICAgaWRlbnRpZmllciB0aGF0IHByZWZpeGVzIHRoZSBleHRlcm5hbCBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcworICAgZGVmaW5lZCBpbiB0aGlzIGhlYWRlci4gIFdoZW4gdGhpcyBoYXBwZW5zLCBpbmNsdWRlIHRoZQorICAgaGVhZGVycyB0aGF0IG1pZ2h0IGRlY2xhcmUgZ2V0b3B0IHNvIHRoYXQgdGhleSB3aWxsIG5vdCBjYXVzZQorICAgY29uZnVzaW9uIGlmIGluY2x1ZGVkIGFmdGVyIHRoaXMgZmlsZS4gIFRoZW4gc3lzdGVtYXRpY2FsbHkgcmVuYW1lCisgICBpZGVudGlmaWVycyBzbyB0aGF0IHRoZXkgZG8gbm90IGNvbGxpZGUgd2l0aCB0aGUgc3lzdGVtIGZ1bmN0aW9ucworICAgYW5kIHZhcmlhYmxlcy4gIFJlbmFtaW5nIGF2b2lkcyBwcm9ibGVtcyB3aXRoIHNvbWUgY29tcGlsZXJzIGFuZAorICAgbGlua2Vycy4gICovCisjaWYgZGVmaW5lZCBfX0dFVE9QVF9QUkVGSVggJiYgIWRlZmluZWQgX19uZWVkX2dldG9wdAorIyBpbmNsdWRlIDxzdGRsaWIuaD4KKyMgaW5jbHVkZSA8c3RkaW8uaD4KKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisjIHVuZGVmIF9fbmVlZF9nZXRvcHQKKyMgdW5kZWYgZ2V0b3B0CisjIHVuZGVmIGdldG9wdF9sb25nCisjIHVuZGVmIGdldG9wdF9sb25nX29ubHkKKyMgdW5kZWYgb3B0YXJnCisjIHVuZGVmIG9wdGVycgorIyB1bmRlZiBvcHRpbmQKKyMgdW5kZWYgb3B0b3B0CisjIGRlZmluZSBfX0dFVE9QVF9DT05DQVQoeCwgeSkgeCAjIyB5CisjIGRlZmluZSBfX0dFVE9QVF9YQ09OQ0FUKHgsIHkpIF9fR0VUT1BUX0NPTkNBVCAoeCwgeSkKKyMgZGVmaW5lIF9fR0VUT1BUX0lEKHkpIF9fR0VUT1BUX1hDT05DQVQgKF9fR0VUT1BUX1BSRUZJWCwgeSkKKyMgZGVmaW5lIGdldG9wdCBfX0dFVE9QVF9JRCAoZ2V0b3B0KQorIyBkZWZpbmUgZ2V0b3B0X2xvbmcgX19HRVRPUFRfSUQgKGdldG9wdF9sb25nKQorIyBkZWZpbmUgZ2V0b3B0X2xvbmdfb25seSBfX0dFVE9QVF9JRCAoZ2V0b3B0X2xvbmdfb25seSkKKyMgZGVmaW5lIG9wdGFyZyBfX0dFVE9QVF9JRCAob3B0YXJnKQorIyBkZWZpbmUgb3B0ZXJyIF9fR0VUT1BUX0lEIChvcHRlcnIpCisjIGRlZmluZSBvcHRpbmQgX19HRVRPUFRfSUQgKG9wdGluZCkKKyMgZGVmaW5lIG9wdG9wdCBfX0dFVE9QVF9JRCAob3B0b3B0KQorI2VuZGlmCisKKy8qIFN0YW5kYWxvbmUgYXBwbGljYXRpb25zIGdldCBjb3JyZWN0IHByb3RvdHlwZXMgZm9yIGdldG9wdF9sb25nIGFuZAorICAgZ2V0b3B0X2xvbmdfb25seTsgdGhleSBkZWNsYXJlICJjaGFyICoqYXJndiIuICBsaWJjIHVzZXMgcHJvdG90eXBlcworICAgd2l0aCAiY2hhciAqY29uc3QgKmFyZ3YiIHRoYXQgYXJlIGluY29ycmVjdCBiZWNhdXNlIGdldG9wdF9sb25nIGFuZAorICAgZ2V0b3B0X2xvbmdfb25seSBjYW4gcGVybXV0ZSBhcmd2OyB0aGlzIGlzIHJlcXVpcmVkIGZvciBiYWNrd2FyZAorICAgY29tcGF0aWJpbGl0eSAoZS5nLiwgZm9yIExTQiAyLjAuMSkuCisKKyAgIFRoaXMgdXNlZCB0byBiZSBgI2lmIGRlZmluZWQgX19HRVRPUFRfUFJFRklYICYmICFkZWZpbmVkIF9fbmVlZF9nZXRvcHQnLAorICAgYnV0IGl0IGNhdXNlZCByZWRlZmluaXRpb24gd2FybmluZ3MgaWYgYm90aCB1bmlzdGQuaCBhbmQgZ2V0b3B0Lmggd2VyZQorICAgaW5jbHVkZWQsIHNpbmNlIHVuaXN0ZC5oIGluY2x1ZGVzIGdldG9wdC5oIGhhdmluZyBwcmV2aW91c2x5IGRlZmluZWQKKyAgIF9fbmVlZF9nZXRvcHQuCisKKyAgIFRoZSBvbmx5IHBsYWNlIHdoZXJlIF9fZ2V0b3B0X2FyZ3ZfY29uc3QgaXMgdXNlZCBpcyBpbiBkZWZpbml0aW9ucworICAgb2YgZ2V0b3B0X2xvbmcgYW5kIGdldG9wdF9sb25nX29ubHkgYmVsb3csIGJ1dCB0aGVzZSBhcmUgdmlzaWJsZQorICAgb25seSBpZiBfX25lZWRfZ2V0b3B0IGlzIG5vdCBkZWZpbmVkLCBzbyBpdCBpcyBxdWl0ZSBzYWZlIHRvIHJld3JpdGUKKyAgIHRoZSBjb25kaXRpb25hbCBhcyBmb2xsb3dzOgorKi8KKyNpZiAhZGVmaW5lZCBfX25lZWRfZ2V0b3B0CisjIGlmIGRlZmluZWQgX19HRVRPUFRfUFJFRklYCisjICBkZWZpbmUgX19nZXRvcHRfYXJndl9jb25zdCAvKiBlbXB0eSAqLworIyBlbHNlCisjICBkZWZpbmUgX19nZXRvcHRfYXJndl9jb25zdCBjb25zdAorIyBlbmRpZgorI2VuZGlmCisKKy8qIElmIF9fR05VX0xJQlJBUllfXyBpcyBub3QgYWxyZWFkeSBkZWZpbmVkLCBlaXRoZXIgd2UgYXJlIGJlaW5nIHVzZWQKKyAgIHN0YW5kYWxvbmUsIG9yIHRoaXMgaXMgdGhlIGZpcnN0IGhlYWRlciBpbmNsdWRlZCBpbiB0aGUgc291cmNlIGZpbGUuCisgICBJZiB3ZSBhcmUgYmVpbmcgdXNlZCB3aXRoIGdsaWJjLCB3ZSBuZWVkIHRvIGluY2x1ZGUgPGZlYXR1cmVzLmg+LCBidXQKKyAgIHRoYXQgZG9lcyBub3QgZXhpc3QgaWYgd2UgYXJlIHN0YW5kYWxvbmUuICBTbzogaWYgX19HTlVfTElCUkFSWV9fIGlzCisgICBub3QgZGVmaW5lZCwgaW5jbHVkZSA8Y3R5cGUuaD4sIHdoaWNoIHdpbGwgcHVsbCBpbiA8ZmVhdHVyZXMuaD4gZm9yIHVzCisgICBpZiBpdCdzIGZyb20gZ2xpYmMuICAoV2h5IGN0eXBlLmg/ICBJdCdzIGd1YXJhbnRlZWQgdG8gZXhpc3QgYW5kIGl0CisgICBkb2Vzbid0IGZsb29kIHRoZSBuYW1lc3BhY2Ugd2l0aCBzdHVmZiB0aGUgd2F5IHNvbWUgb3RoZXIgaGVhZGVycyBkby4pICAqLworI2lmICFkZWZpbmVkIF9fR05VX0xJQlJBUllfXworIyBpbmNsdWRlIDxjdHlwZS5oPgorI2VuZGlmCisKKyNpZm5kZWYgX19USFJPVworIyBpZm5kZWYgX19HTlVDX1BSRVJFUQorIyAgZGVmaW5lIF9fR05VQ19QUkVSRVEobWFqLCBtaW4pICgwKQorIyBlbmRpZgorIyBpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIF9fR05VQ19QUkVSRVEgKDIsOCkKKyMgIGRlZmluZSBfX1RIUk9XCXRocm93ICgpCisjIGVsc2UKKyMgIGRlZmluZSBfX1RIUk9XCisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiBGb3IgY29tbXVuaWNhdGlvbiBmcm9tIGBnZXRvcHQnIHRvIHRoZSBjYWxsZXIuCisgICBXaGVuIGBnZXRvcHQnIGZpbmRzIGFuIG9wdGlvbiB0aGF0IHRha2VzIGFuIGFyZ3VtZW50LAorICAgdGhlIGFyZ3VtZW50IHZhbHVlIGlzIHJldHVybmVkIGhlcmUuCisgICBBbHNvLCB3aGVuIGBvcmRlcmluZycgaXMgUkVUVVJOX0lOX09SREVSLAorICAgZWFjaCBub24tb3B0aW9uIEFSR1YtZWxlbWVudCBpcyByZXR1cm5lZCBoZXJlLiAgKi8KKworZXh0ZXJuIGNoYXIgKm9wdGFyZzsKKworLyogSW5kZXggaW4gQVJHViBvZiB0aGUgbmV4dCBlbGVtZW50IHRvIGJlIHNjYW5uZWQuCisgICBUaGlzIGlzIHVzZWQgZm9yIGNvbW11bmljYXRpb24gdG8gYW5kIGZyb20gdGhlIGNhbGxlcgorICAgYW5kIGZvciBjb21tdW5pY2F0aW9uIGJldHdlZW4gc3VjY2Vzc2l2ZSBjYWxscyB0byBgZ2V0b3B0Jy4KKworICAgT24gZW50cnkgdG8gYGdldG9wdCcsIHplcm8gbWVhbnMgdGhpcyBpcyB0aGUgZmlyc3QgY2FsbDsgaW5pdGlhbGl6ZS4KKworICAgV2hlbiBgZ2V0b3B0JyByZXR1cm5zIC0xLCB0aGlzIGlzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3Qgb2YgdGhlCisgICBub24tb3B0aW9uIGVsZW1lbnRzIHRoYXQgdGhlIGNhbGxlciBzaG91bGQgaXRzZWxmIHNjYW4uCisKKyAgIE90aGVyd2lzZSwgYG9wdGluZCcgY29tbXVuaWNhdGVzIGZyb20gb25lIGNhbGwgdG8gdGhlIG5leHQKKyAgIGhvdyBtdWNoIG9mIEFSR1YgaGFzIGJlZW4gc2Nhbm5lZCBzbyBmYXIuICAqLworCitleHRlcm4gaW50IG9wdGluZDsKKworLyogQ2FsbGVycyBzdG9yZSB6ZXJvIGhlcmUgdG8gaW5oaWJpdCB0aGUgZXJyb3IgbWVzc2FnZSBgZ2V0b3B0JyBwcmludHMKKyAgIGZvciB1bnJlY29nbml6ZWQgb3B0aW9ucy4gICovCisKK2V4dGVybiBpbnQgb3B0ZXJyOworCisvKiBTZXQgdG8gYW4gb3B0aW9uIGNoYXJhY3RlciB3aGljaCB3YXMgdW5yZWNvZ25pemVkLiAgKi8KKworZXh0ZXJuIGludCBvcHRvcHQ7CisKKyNpZm5kZWYgX19uZWVkX2dldG9wdAorLyogRGVzY3JpYmUgdGhlIGxvbmctbmFtZWQgb3B0aW9ucyByZXF1ZXN0ZWQgYnkgdGhlIGFwcGxpY2F0aW9uLgorICAgVGhlIExPTkdfT1BUSU9OUyBhcmd1bWVudCB0byBnZXRvcHRfbG9uZyBvciBnZXRvcHRfbG9uZ19vbmx5IGlzIGEgdmVjdG9yCisgICBvZiBgc3RydWN0IG9wdGlvbicgdGVybWluYXRlZCBieSBhbiBlbGVtZW50IGNvbnRhaW5pbmcgYSBuYW1lIHdoaWNoIGlzCisgICB6ZXJvLgorCisgICBUaGUgZmllbGQgYGhhc19hcmcnIGlzOgorICAgbm9fYXJndW1lbnQJCShvciAwKSBpZiB0aGUgb3B0aW9uIGRvZXMgbm90IHRha2UgYW4gYXJndW1lbnQsCisgICByZXF1aXJlZF9hcmd1bWVudAkob3IgMSkgaWYgdGhlIG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCwKKyAgIG9wdGlvbmFsX2FyZ3VtZW50CShvciAyKSBpZiB0aGUgb3B0aW9uIHRha2VzIGFuIG9wdGlvbmFsIGFyZ3VtZW50LgorCisgICBJZiB0aGUgZmllbGQgYGZsYWcnIGlzIG5vdCBOVUxMLCBpdCBwb2ludHMgdG8gYSB2YXJpYWJsZSB0aGF0IGlzIHNldAorICAgdG8gdGhlIHZhbHVlIGdpdmVuIGluIHRoZSBmaWVsZCBgdmFsJyB3aGVuIHRoZSBvcHRpb24gaXMgZm91bmQsIGJ1dAorICAgbGVmdCB1bmNoYW5nZWQgaWYgdGhlIG9wdGlvbiBpcyBub3QgZm91bmQuCisKKyAgIFRvIGhhdmUgYSBsb25nLW5hbWVkIG9wdGlvbiBkbyBzb21ldGhpbmcgb3RoZXIgdGhhbiBzZXQgYW4gYGludCcgdG8KKyAgIGEgY29tcGlsZWQtaW4gY29uc3RhbnQsIHN1Y2ggYXMgc2V0IGEgdmFsdWUgZnJvbSBgb3B0YXJnJywgc2V0IHRoZQorICAgb3B0aW9uJ3MgYGZsYWcnIGZpZWxkIHRvIHplcm8gYW5kIGl0cyBgdmFsJyBmaWVsZCB0byBhIG5vbnplcm8KKyAgIHZhbHVlICh0aGUgZXF1aXZhbGVudCBzaW5nbGUtbGV0dGVyIG9wdGlvbiBjaGFyYWN0ZXIsIGlmIHRoZXJlIGlzCisgICBvbmUpLiAgRm9yIGxvbmcgb3B0aW9ucyB0aGF0IGhhdmUgYSB6ZXJvIGBmbGFnJyBmaWVsZCwgYGdldG9wdCcKKyAgIHJldHVybnMgdGhlIGNvbnRlbnRzIG9mIHRoZSBgdmFsJyBmaWVsZC4gICovCisKK3N0cnVjdCBvcHRpb24KK3sKKyAgY29uc3QgY2hhciAqbmFtZTsKKyAgLyogaGFzX2FyZyBjYW4ndCBiZSBhbiBlbnVtIGJlY2F1c2Ugc29tZSBjb21waWxlcnMgY29tcGxhaW4gYWJvdXQKKyAgICAgdHlwZSBtaXNtYXRjaGVzIGluIGFsbCB0aGUgY29kZSB0aGF0IGFzc3VtZXMgaXQgaXMgYW4gaW50LiAgKi8KKyAgaW50IGhhc19hcmc7CisgIGludCAqZmxhZzsKKyAgaW50IHZhbDsKK307CisKKy8qIE5hbWVzIGZvciB0aGUgdmFsdWVzIG9mIHRoZSBgaGFzX2FyZycgZmllbGQgb2YgYHN0cnVjdCBvcHRpb24nLiAgKi8KKworIyBkZWZpbmUgbm9fYXJndW1lbnQJCTAKKyMgZGVmaW5lIHJlcXVpcmVkX2FyZ3VtZW50CTEKKyMgZGVmaW5lIG9wdGlvbmFsX2FyZ3VtZW50CTIKKyNlbmRpZgkvKiBuZWVkIGdldG9wdCAqLworCisKKy8qIEdldCBkZWZpbml0aW9ucyBhbmQgcHJvdG90eXBlcyBmb3IgZnVuY3Rpb25zIHRvIHByb2Nlc3MgdGhlCisgICBhcmd1bWVudHMgaW4gQVJHViAoQVJHQyBvZiB0aGVtLCBtaW51cyB0aGUgcHJvZ3JhbSBuYW1lKSBmb3IKKyAgIG9wdGlvbnMgZ2l2ZW4gaW4gT1BUUy4KKworICAgUmV0dXJuIHRoZSBvcHRpb24gY2hhcmFjdGVyIGZyb20gT1BUUyBqdXN0IHJlYWQuICBSZXR1cm4gLTEgd2hlbgorICAgdGhlcmUgYXJlIG5vIG1vcmUgb3B0aW9ucy4gIEZvciB1bnJlY29nbml6ZWQgb3B0aW9ucywgb3Igb3B0aW9ucworICAgbWlzc2luZyBhcmd1bWVudHMsIGBvcHRvcHQnIGlzIHNldCB0byB0aGUgb3B0aW9uIGxldHRlciwgYW5kICc/JyBpcworICAgcmV0dXJuZWQuCisKKyAgIFRoZSBPUFRTIHN0cmluZyBpcyBhIGxpc3Qgb2YgY2hhcmFjdGVycyB3aGljaCBhcmUgcmVjb2duaXplZCBvcHRpb24KKyAgIGxldHRlcnMsIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkgY29sb25zLCBzcGVjaWZ5aW5nIHRoYXQgdGhhdCBsZXR0ZXIKKyAgIHRha2VzIGFuIGFyZ3VtZW50LCB0byBiZSBwbGFjZWQgaW4gYG9wdGFyZycuCisKKyAgIElmIGEgbGV0dGVyIGluIE9QVFMgaXMgZm9sbG93ZWQgYnkgdHdvIGNvbG9ucywgaXRzIGFyZ3VtZW50IGlzCisgICBvcHRpb25hbC4gIFRoaXMgYmVoYXZpb3IgaXMgc3BlY2lmaWMgdG8gdGhlIEdOVSBgZ2V0b3B0Jy4KKworICAgVGhlIGFyZ3VtZW50IGAtLScgY2F1c2VzIHByZW1hdHVyZSB0ZXJtaW5hdGlvbiBvZiBhcmd1bWVudAorICAgc2Nhbm5pbmcsIGV4cGxpY2l0bHkgdGVsbGluZyBgZ2V0b3B0JyB0aGF0IHRoZXJlIGFyZSBubyBtb3JlCisgICBvcHRpb25zLgorCisgICBJZiBPUFRTIGJlZ2lucyB3aXRoIGAtJywgdGhlbiBub24tb3B0aW9uIGFyZ3VtZW50cyBhcmUgdHJlYXRlZCBhcworICAgYXJndW1lbnRzIHRvIHRoZSBvcHRpb24gJ1wxJy4gIFRoaXMgYmVoYXZpb3IgaXMgc3BlY2lmaWMgdG8gdGhlIEdOVQorICAgYGdldG9wdCcuICBJZiBPUFRTIGJlZ2lucyB3aXRoIGArJywgb3IgUE9TSVhMWV9DT1JSRUNUIGlzIHNldCBpbgorICAgdGhlIGVudmlyb25tZW50LCB0aGVuIGRvIG5vdCBwZXJtdXRlIGFyZ3VtZW50cy4gICovCisKK2V4dGVybiBpbnQgZ2V0b3B0IChpbnQgX19fYXJnYywgY2hhciAqY29uc3QgKl9fX2FyZ3YsIGNvbnN0IGNoYXIgKl9fc2hvcnRvcHRzKQorICAgICAgIF9fVEhST1c7CisKKyNpZm5kZWYgX19uZWVkX2dldG9wdAorZXh0ZXJuIGludCBnZXRvcHRfbG9uZyAoaW50IF9fX2FyZ2MsIGNoYXIgKl9fZ2V0b3B0X2FyZ3ZfY29uc3QgKl9fX2FyZ3YsCisJCQljb25zdCBjaGFyICpfX3Nob3J0b3B0cywKKwkJICAgICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpfX2xvbmdvcHRzLCBpbnQgKl9fbG9uZ2luZCkKKyAgICAgICBfX1RIUk9XOworZXh0ZXJuIGludCBnZXRvcHRfbG9uZ19vbmx5IChpbnQgX19fYXJnYywgY2hhciAqX19nZXRvcHRfYXJndl9jb25zdCAqX19fYXJndiwKKwkJCSAgICAgY29uc3QgY2hhciAqX19zaG9ydG9wdHMsCisJCSAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpfX2xvbmdvcHRzLCBpbnQgKl9fbG9uZ2luZCkKKyAgICAgICBfX1RIUk9XOworCisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworLyogTWFrZSBzdXJlIHdlIGxhdGVyIGNhbiBnZXQgYWxsIHRoZSBkZWZpbml0aW9ucyBhbmQgZGVjbGFyYXRpb25zLiAgKi8KKyN1bmRlZiBfX25lZWRfZ2V0b3B0CisKKyNlbmRpZiAvKiBnZXRvcHQuaCAqLwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYi9nZXRvcHRfaW50LmggYi9wYXJ0ZWQtMS44LjcvbGliL2dldG9wdF9pbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDE1NzlmCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYi9nZXRvcHRfaW50LmgKQEAgLTAsMCArMSwxMzEgQEAKKy8qIEludGVybmFsIGRlY2xhcmF0aW9ucyBmb3IgZ2V0b3B0LgorICAgQ29weXJpZ2h0IChDKSAxOTg5LTE5OTQsMTk5Ni0xOTk5LDIwMDEsMjAwMywyMDA0CisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKworI2lmbmRlZiBfR0VUT1BUX0lOVF9ICisjZGVmaW5lIF9HRVRPUFRfSU5UX0gJMQorCitleHRlcm4gaW50IF9nZXRvcHRfaW50ZXJuYWwgKGludCBfX19hcmdjLCBjaGFyICoqX19fYXJndiwKKwkJCSAgICAgY29uc3QgY2hhciAqX19zaG9ydG9wdHMsCisJCSAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpfX2xvbmdvcHRzLCBpbnQgKl9fbG9uZ2luZCwKKwkJCSAgICAgaW50IF9fbG9uZ19vbmx5LCBpbnQgX19wb3NpeGx5X2NvcnJlY3QpOworCisMCisvKiBSZWVudHJhbnQgdmVyc2lvbnMgd2hpY2ggY2FuIGhhbmRsZSBwYXJzaW5nIG11bHRpcGxlIGFyZ3VtZW50CisgICB2ZWN0b3JzIGF0IHRoZSBzYW1lIHRpbWUuICAqLworCisvKiBEYXRhIHR5cGUgZm9yIHJlZW50cmFudCBmdW5jdGlvbnMuICAqLworc3RydWN0IF9nZXRvcHRfZGF0YQoreworICAvKiBUaGVzZSBoYXZlIGV4YWN0bHkgdGhlIHNhbWUgbWVhbmluZyBhcyB0aGUgY29ycmVzcG9uZGluZyBnbG9iYWwKKyAgICAgdmFyaWFibGVzLCBleGNlcHQgdGhhdCB0aGV5IGFyZSB1c2VkIGZvciB0aGUgcmVlbnRyYW50CisgICAgIHZlcnNpb25zIG9mIGdldG9wdC4gICovCisgIGludCBvcHRpbmQ7CisgIGludCBvcHRlcnI7CisgIGludCBvcHRvcHQ7CisgIGNoYXIgKm9wdGFyZzsKKworICAvKiBJbnRlcm5hbCBtZW1iZXJzLiAgKi8KKworICAvKiBUcnVlIGlmIHRoZSBpbnRlcm5hbCBtZW1iZXJzIGhhdmUgYmVlbiBpbml0aWFsaXplZC4gICovCisgIGludCBfX2luaXRpYWxpemVkOworCisgIC8qIFRoZSBuZXh0IGNoYXIgdG8gYmUgc2Nhbm5lZCBpbiB0aGUgb3B0aW9uLWVsZW1lbnQKKyAgICAgaW4gd2hpY2ggdGhlIGxhc3Qgb3B0aW9uIGNoYXJhY3RlciB3ZSByZXR1cm5lZCB3YXMgZm91bmQuCisgICAgIFRoaXMgYWxsb3dzIHVzIHRvIHBpY2sgdXAgdGhlIHNjYW4gd2hlcmUgd2UgbGVmdCBvZmYuCisKKyAgICAgSWYgdGhpcyBpcyB6ZXJvLCBvciBhIG51bGwgc3RyaW5nLCBpdCBtZWFucyByZXN1bWUgdGhlIHNjYW4KKyAgICAgYnkgYWR2YW5jaW5nIHRvIHRoZSBuZXh0IEFSR1YtZWxlbWVudC4gICovCisgIGNoYXIgKl9fbmV4dGNoYXI7CisKKyAgLyogRGVzY3JpYmUgaG93IHRvIGRlYWwgd2l0aCBvcHRpb25zIHRoYXQgZm9sbG93IG5vbi1vcHRpb24gQVJHVi1lbGVtZW50cy4KKworICAgICBJZiB0aGUgY2FsbGVyIGRpZCBub3Qgc3BlY2lmeSBhbnl0aGluZywKKyAgICAgdGhlIGRlZmF1bHQgaXMgUkVRVUlSRV9PUkRFUiBpZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUKKyAgICAgUE9TSVhMWV9DT1JSRUNUIGlzIGRlZmluZWQsIFBFUk1VVEUgb3RoZXJ3aXNlLgorCisgICAgIFJFUVVJUkVfT1JERVIgbWVhbnMgZG9uJ3QgcmVjb2duaXplIHRoZW0gYXMgb3B0aW9uczsKKyAgICAgc3RvcCBvcHRpb24gcHJvY2Vzc2luZyB3aGVuIHRoZSBmaXJzdCBub24tb3B0aW9uIGlzIHNlZW4uCisgICAgIFRoaXMgaXMgd2hhdCBVbml4IGRvZXMuCisgICAgIFRoaXMgbW9kZSBvZiBvcGVyYXRpb24gaXMgc2VsZWN0ZWQgYnkgZWl0aGVyIHNldHRpbmcgdGhlIGVudmlyb25tZW50CisgICAgIHZhcmlhYmxlIFBPU0lYTFlfQ09SUkVDVCwgb3IgdXNpbmcgYCsnIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIKKyAgICAgb2YgdGhlIGxpc3Qgb2Ygb3B0aW9uIGNoYXJhY3RlcnMsIG9yIGJ5IGNhbGxpbmcgZ2V0b3B0LgorCisgICAgIFBFUk1VVEUgaXMgdGhlIGRlZmF1bHQuICBXZSBwZXJtdXRlIHRoZSBjb250ZW50cyBvZiBBUkdWIGFzIHdlCisgICAgIHNjYW4sIHNvIHRoYXQgZXZlbnR1YWxseSBhbGwgdGhlIG5vbi1vcHRpb25zIGFyZSBhdCB0aGUgZW5kLgorICAgICBUaGlzIGFsbG93cyBvcHRpb25zIHRvIGJlIGdpdmVuIGluIGFueSBvcmRlciwgZXZlbiB3aXRoIHByb2dyYW1zCisgICAgIHRoYXQgd2VyZSBub3Qgd3JpdHRlbiB0byBleHBlY3QgdGhpcy4KKworICAgICBSRVRVUk5fSU5fT1JERVIgaXMgYW4gb3B0aW9uIGF2YWlsYWJsZSB0byBwcm9ncmFtcyB0aGF0IHdlcmUKKyAgICAgd3JpdHRlbiB0byBleHBlY3Qgb3B0aW9ucyBhbmQgb3RoZXIgQVJHVi1lbGVtZW50cyBpbiBhbnkgb3JkZXIKKyAgICAgYW5kIHRoYXQgY2FyZSBhYm91dCB0aGUgb3JkZXJpbmcgb2YgdGhlIHR3by4gIFdlIGRlc2NyaWJlIGVhY2gKKyAgICAgbm9uLW9wdGlvbiBBUkdWLWVsZW1lbnQgYXMgaWYgaXQgd2VyZSB0aGUgYXJndW1lbnQgb2YgYW4gb3B0aW9uCisgICAgIHdpdGggY2hhcmFjdGVyIGNvZGUgMS4gIFVzaW5nIGAtJyBhcyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZQorICAgICBsaXN0IG9mIG9wdGlvbiBjaGFyYWN0ZXJzIHNlbGVjdHMgdGhpcyBtb2RlIG9mIG9wZXJhdGlvbi4KKworICAgICBUaGUgc3BlY2lhbCBhcmd1bWVudCBgLS0nIGZvcmNlcyBhbiBlbmQgb2Ygb3B0aW9uLXNjYW5uaW5nIHJlZ2FyZGxlc3MKKyAgICAgb2YgdGhlIHZhbHVlIG9mIGBvcmRlcmluZycuICBJbiB0aGUgY2FzZSBvZiBSRVRVUk5fSU5fT1JERVIsIG9ubHkKKyAgICAgYC0tJyBjYW4gY2F1c2UgYGdldG9wdCcgdG8gcmV0dXJuIC0xIHdpdGggYG9wdGluZCcgIT0gQVJHQy4gICovCisKKyAgZW51bQorICAgIHsKKyAgICAgIFJFUVVJUkVfT1JERVIsIFBFUk1VVEUsIFJFVFVSTl9JTl9PUkRFUgorICAgIH0gX19vcmRlcmluZzsKKworICAvKiBJZiB0aGUgUE9TSVhMWV9DT1JSRUNUIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldAorICAgICBvciBnZXRvcHQgd2FzIGNhbGxlZC4gICovCisgIGludCBfX3Bvc2l4bHlfY29ycmVjdDsKKworCisgIC8qIEhhbmRsZSBwZXJtdXRhdGlvbiBvZiBhcmd1bWVudHMuICAqLworCisgIC8qIERlc2NyaWJlIHRoZSBwYXJ0IG9mIEFSR1YgdGhhdCBjb250YWlucyBub24tb3B0aW9ucyB0aGF0IGhhdmUKKyAgICAgYmVlbiBza2lwcGVkLiAgYGZpcnN0X25vbm9wdCcgaXMgdGhlIGluZGV4IGluIEFSR1Ygb2YgdGhlIGZpcnN0CisgICAgIG9mIHRoZW07IGBsYXN0X25vbm9wdCcgaXMgdGhlIGluZGV4IGFmdGVyIHRoZSBsYXN0IG9mIHRoZW0uICAqLworCisgIGludCBfX2ZpcnN0X25vbm9wdDsKKyAgaW50IF9fbGFzdF9ub25vcHQ7CisKKyNpZiBkZWZpbmVkIF9MSUJDICYmIGRlZmluZWQgVVNFX05PTk9QVElPTl9GTEFHUworICBpbnQgX19ub25vcHRpb25fZmxhZ3NfbWF4X2xlbjsKKyAgaW50IF9fbm9ub3B0aW9uX2ZsYWdzX2xlbjsKKyMgZW5kaWYKK307CisKKy8qIFRoZSBpbml0aWFsaXplciBpcyBuZWNlc3NhcnkgdG8gc2V0IE9QVElORCBhbmQgT1BURVJSIHRvIHRoZWlyCisgICBkZWZhdWx0IHZhbHVlcyBhbmQgdG8gY2xlYXIgdGhlIGluaXRpYWxpemF0aW9uIGZsYWcuICAqLworI2RlZmluZSBfR0VUT1BUX0RBVEFfSU5JVElBTElaRVIJeyAxLCAxIH0KKworZXh0ZXJuIGludCBfZ2V0b3B0X2ludGVybmFsX3IgKGludCBfX19hcmdjLCBjaGFyICoqX19fYXJndiwKKwkJCSAgICAgICBjb25zdCBjaGFyICpfX3Nob3J0b3B0cywKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpfX2xvbmdvcHRzLCBpbnQgKl9fbG9uZ2luZCwKKwkJCSAgICAgICBpbnQgX19sb25nX29ubHksIGludCBfX3Bvc2l4bHlfY29ycmVjdCwKKwkJCSAgICAgICBzdHJ1Y3QgX2dldG9wdF9kYXRhICpfX2RhdGEpOworCitleHRlcm4gaW50IF9nZXRvcHRfbG9uZ19yIChpbnQgX19fYXJnYywgY2hhciAqKl9fX2FyZ3YsCisJCQkgICBjb25zdCBjaGFyICpfX3Nob3J0b3B0cywKKwkJCSAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKl9fbG9uZ29wdHMsIGludCAqX19sb25naW5kLAorCQkJICAgc3RydWN0IF9nZXRvcHRfZGF0YSAqX19kYXRhKTsKKworZXh0ZXJuIGludCBfZ2V0b3B0X2xvbmdfb25seV9yIChpbnQgX19fYXJnYywgY2hhciAqKl9fX2FyZ3YsCisJCQkJY29uc3QgY2hhciAqX19zaG9ydG9wdHMsCisJCQkJY29uc3Qgc3RydWN0IG9wdGlvbiAqX19sb25nb3B0cywKKwkJCQlpbnQgKl9fbG9uZ2luZCwKKwkJCQlzdHJ1Y3QgX2dldG9wdF9kYXRhICpfX2RhdGEpOworCisjZW5kaWYgLyogZ2V0b3B0X2ludC5oICovCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGliL2dldHRleHQuaCBiL3BhcnRlZC0xLjguNy9saWIvZ2V0dGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkNzZlYzkKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGliL2dldHRleHQuaApAQCAtMCwwICsxLDI3MCBAQAorLyogQ29udmVuaWVuY2UgaGVhZGVyIGZvciBjb25kaXRpb25hbCB1c2Ugb2YgR05VIDxsaWJpbnRsLmg+LgorICAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTgsIDIwMDAtMjAwMiwgMjAwNC0yMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKworI2lmbmRlZiBfTElCR0VUVEVYVF9ICisjZGVmaW5lIF9MSUJHRVRURVhUX0ggMQorCisvKiBOTFMgY2FuIGJlIGRpc2FibGVkIHRocm91Z2ggdGhlIGNvbmZpZ3VyZSAtLWRpc2FibGUtbmxzIG9wdGlvbi4gICovCisjaWYgRU5BQkxFX05MUworCisvKiBHZXQgZGVjbGFyYXRpb25zIG9mIEdOVSBtZXNzYWdlIGNhdGFsb2cgZnVuY3Rpb25zLiAgKi8KKyMgaW5jbHVkZSA8bGliaW50bC5oPgorCisvKiBZb3UgY2FuIHNldCB0aGUgREVGQVVMVF9URVhUX0RPTUFJTiBtYWNybyB0byBzcGVjaWZ5IHRoZSBkb21haW4gdXNlZCBieQorICAgdGhlIGdldHRleHQoKSBhbmQgbmdldHRleHQoKSBtYWNyb3MuICBUaGlzIGlzIGFuIGFsdGVybmF0aXZlIHRvIGNhbGxpbmcKKyAgIHRleHRkb21haW4oKSwgYW5kIGlzIHVzZWZ1bCBmb3IgbGlicmFyaWVzLiAgKi8KKyMgaWZkZWYgREVGQVVMVF9URVhUX0RPTUFJTgorIyAgdW5kZWYgZ2V0dGV4dAorIyAgZGVmaW5lIGdldHRleHQoTXNnaWQpIFwKKyAgICAgZGdldHRleHQgKERFRkFVTFRfVEVYVF9ET01BSU4sIE1zZ2lkKQorIyAgdW5kZWYgbmdldHRleHQKKyMgIGRlZmluZSBuZ2V0dGV4dChNc2dpZDEsIE1zZ2lkMiwgTikgXAorICAgICBkbmdldHRleHQgKERFRkFVTFRfVEVYVF9ET01BSU4sIE1zZ2lkMSwgTXNnaWQyLCBOKQorIyBlbmRpZgorCisjZWxzZQorCisvKiBTb2xhcmlzIC91c3IvaW5jbHVkZS9sb2NhbGUuaCBpbmNsdWRlcyAvdXNyL2luY2x1ZGUvbGliaW50bC5oLCB3aGljaAorICAgY2hva2VzIGlmIGRjZ2V0dGV4dCBpcyBkZWZpbmVkIGFzIGEgbWFjcm8uICBTbyBpbmNsdWRlIGl0IG5vdywgdG8gbWFrZQorICAgbGF0ZXIgaW5jbHVzaW9ucyBvZiA8bG9jYWxlLmg+IGEgTk9QLiAgV2UgZG9uJ3QgaW5jbHVkZSA8bGliaW50bC5oPgorICAgYXMgd2VsbCBiZWNhdXNlIHBlb3BsZSB1c2luZyAiZ2V0dGV4dC5oIiB3aWxsIG5vdCBpbmNsdWRlIDxsaWJpbnRsLmg+LAorICAgYW5kIGFsc28gaW5jbHVkaW5nIDxsaWJpbnRsLmg+IHdvdWxkIGZhaWwgb24gU3VuT1MgNCwgd2hlcmVhcyA8bG9jYWxlLmg+CisgICBpcyBPSy4gICovCisjaWYgZGVmaW5lZChfX3N1bikKKyMgaW5jbHVkZSA8bG9jYWxlLmg+CisjZW5kaWYKKworLyogTWFueSBoZWFkZXIgZmlsZXMgZnJvbSB0aGUgbGlic3RkYysrIGNvbWluZyB3aXRoIGcrKyAzLjMgb3IgbmV3ZXIgaW5jbHVkZQorICAgPGxpYmludGwuaD4sIHdoaWNoIGNob2tlcyBpZiBkY2dldHRleHQgaXMgZGVmaW5lZCBhcyBhIG1hY3JvLiAgU28gaW5jbHVkZQorICAgaXQgbm93LCB0byBtYWtlIGxhdGVyIGluY2x1c2lvbnMgb2YgPGxpYmludGwuaD4gYSBOT1AuICAqLworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpICYmIGRlZmluZWQoX19HTlVHX18pICYmIChfX0dOVUNfXyA+PSAzKQorIyBpbmNsdWRlIDxjc3RkbGliPgorIyBpZiAoX19HTElCQ19fID49IDIpIHx8IF9HTElCQ1hYX0hBVkVfTElCSU5UTF9ICisjICBpbmNsdWRlIDxsaWJpbnRsLmg+CisjIGVuZGlmCisjZW5kaWYKKworLyogRGlzYWJsZWQgTkxTLgorICAgVGhlIGNhc3RzIHRvICdjb25zdCBjaGFyIConIHNlcnZlIHRoZSBwdXJwb3NlIG9mIHByb2R1Y2luZyB3YXJuaW5ncworICAgZm9yIGludmFsaWQgdXNlcyBvZiB0aGUgdmFsdWUgcmV0dXJuZWQgZnJvbSB0aGVzZSBmdW5jdGlvbnMuCisgICBPbiBwcmUtQU5TSSBzeXN0ZW1zIHdpdGhvdXQgJ2NvbnN0JywgdGhlIGNvbmZpZy5oIGZpbGUgaXMgc3VwcG9zZWQgdG8KKyAgIGNvbnRhaW4gIiNkZWZpbmUgY29uc3QiLiAgKi8KKyMgZGVmaW5lIGdldHRleHQoTXNnaWQpICgoY29uc3QgY2hhciAqKSAoTXNnaWQpKQorIyBkZWZpbmUgZGdldHRleHQoRG9tYWlubmFtZSwgTXNnaWQpICgodm9pZCkgKERvbWFpbm5hbWUpLCBnZXR0ZXh0IChNc2dpZCkpCisjIGRlZmluZSBkY2dldHRleHQoRG9tYWlubmFtZSwgTXNnaWQsIENhdGVnb3J5KSBcCisgICAgKCh2b2lkKSAoQ2F0ZWdvcnkpLCBkZ2V0dGV4dCAoRG9tYWlubmFtZSwgTXNnaWQpKQorIyBkZWZpbmUgbmdldHRleHQoTXNnaWQxLCBNc2dpZDIsIE4pIFwKKyAgICAoKE4pID09IDEgXAorICAgICA/ICgodm9pZCkgKE1zZ2lkMiksIChjb25zdCBjaGFyICopIChNc2dpZDEpKSBcCisgICAgIDogKCh2b2lkKSAoTXNnaWQxKSwgKGNvbnN0IGNoYXIgKikgKE1zZ2lkMikpKQorIyBkZWZpbmUgZG5nZXR0ZXh0KERvbWFpbm5hbWUsIE1zZ2lkMSwgTXNnaWQyLCBOKSBcCisgICAgKCh2b2lkKSAoRG9tYWlubmFtZSksIG5nZXR0ZXh0IChNc2dpZDEsIE1zZ2lkMiwgTikpCisjIGRlZmluZSBkY25nZXR0ZXh0KERvbWFpbm5hbWUsIE1zZ2lkMSwgTXNnaWQyLCBOLCBDYXRlZ29yeSkgXAorICAgICgodm9pZCkgKENhdGVnb3J5KSwgZG5nZXR0ZXh0KERvbWFpbm5hbWUsIE1zZ2lkMSwgTXNnaWQyLCBOKSkKKyMgZGVmaW5lIHRleHRkb21haW4oRG9tYWlubmFtZSkgKChjb25zdCBjaGFyICopIChEb21haW5uYW1lKSkKKyMgZGVmaW5lIGJpbmR0ZXh0ZG9tYWluKERvbWFpbm5hbWUsIERpcm5hbWUpIFwKKyAgICAoKHZvaWQpIChEb21haW5uYW1lKSwgKGNvbnN0IGNoYXIgKikgKERpcm5hbWUpKQorIyBkZWZpbmUgYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQoRG9tYWlubmFtZSwgQ29kZXNldCkgXAorICAgICgodm9pZCkgKERvbWFpbm5hbWUpLCAoY29uc3QgY2hhciAqKSAoQ29kZXNldCkpCisKKyNlbmRpZgorCisvKiBBIHBzZXVkbyBmdW5jdGlvbiBjYWxsIHRoYXQgc2VydmVzIGFzIGEgbWFya2VyIGZvciB0aGUgYXV0b21hdGVkCisgICBleHRyYWN0aW9uIG9mIG1lc3NhZ2VzLCBidXQgZG9lcyBub3QgY2FsbCBnZXR0ZXh0KCkuICBUaGUgcnVuLXRpbWUKKyAgIHRyYW5zbGF0aW9uIGlzIGRvbmUgYXQgYSBkaWZmZXJlbnQgcGxhY2UgaW4gdGhlIGNvZGUuCisgICBUaGUgYXJndW1lbnQsIFN0cmluZywgc2hvdWxkIGJlIGEgbGl0ZXJhbCBzdHJpbmcuICBDb25jYXRlbmF0ZWQgc3RyaW5ncworICAgYW5kIG90aGVyIHN0cmluZyBleHByZXNzaW9ucyB3b24ndCB3b3JrLgorICAgVGhlIG1hY3JvJ3MgZXhwYW5zaW9uIGlzIG5vdCBwYXJlbnRoZXNpemVkLCBzbyB0aGF0IGl0IGlzIHN1aXRhYmxlIGFzCisgICBpbml0aWFsaXplciBmb3Igc3RhdGljICdjaGFyW10nIG9yICdjb25zdCBjaGFyW10nIHZhcmlhYmxlcy4gICovCisjZGVmaW5lIGdldHRleHRfbm9vcChTdHJpbmcpIFN0cmluZworCisvKiBUaGUgc2VwYXJhdG9yIGJldHdlZW4gbXNnY3R4dCBhbmQgbXNnaWQgaW4gYSAubW8gZmlsZS4gICovCisjZGVmaW5lIEdFVFRFWFRfQ09OVEVYVF9HTFVFICJcMDA0IgorCisvKiBQc2V1ZG8gZnVuY3Rpb24gY2FsbHMsIHRha2luZyBhIE1TR0NUWFQgYW5kIGEgTVNHSUQgaW5zdGVhZCBvZiBqdXN0IGEKKyAgIE1TR0lELiAgTVNHQ1RYVCBhbmQgTVNHSUQgbXVzdCBiZSBzdHJpbmcgbGl0ZXJhbHMuICBNU0dDVFhUIHNob3VsZCBiZQorICAgc2hvcnQgYW5kIHJhcmVseSBuZWVkIHRvIGNoYW5nZS4KKyAgIFRoZSBsZXR0ZXIgJ3AnIHN0YW5kcyBmb3IgJ3BhcnRpY3VsYXInIG9yICdzcGVjaWFsJy4gICovCisjaWZkZWYgREVGQVVMVF9URVhUX0RPTUFJTgorIyBkZWZpbmUgcGdldHRleHQoTXNnY3R4dCwgTXNnaWQpIFwKKyAgIHBnZXR0ZXh0X2F1eCAoREVGQVVMVF9URVhUX0RPTUFJTiwgTXNnY3R4dCBHRVRURVhUX0NPTlRFWFRfR0xVRSBNc2dpZCwgTXNnaWQsIExDX01FU1NBR0VTKQorI2Vsc2UKKyMgZGVmaW5lIHBnZXR0ZXh0KE1zZ2N0eHQsIE1zZ2lkKSBcCisgICBwZ2V0dGV4dF9hdXggKE5VTEwsIE1zZ2N0eHQgR0VUVEVYVF9DT05URVhUX0dMVUUgTXNnaWQsIE1zZ2lkLCBMQ19NRVNTQUdFUykKKyNlbmRpZgorI2RlZmluZSBkcGdldHRleHQoRG9tYWlubmFtZSwgTXNnY3R4dCwgTXNnaWQpIFwKKyAgcGdldHRleHRfYXV4IChEb21haW5uYW1lLCBNc2djdHh0IEdFVFRFWFRfQ09OVEVYVF9HTFVFIE1zZ2lkLCBNc2dpZCwgTENfTUVTU0FHRVMpCisjZGVmaW5lIGRjcGdldHRleHQoRG9tYWlubmFtZSwgTXNnY3R4dCwgTXNnaWQsIENhdGVnb3J5KSBcCisgIHBnZXR0ZXh0X2F1eCAoRG9tYWlubmFtZSwgTXNnY3R4dCBHRVRURVhUX0NPTlRFWFRfR0xVRSBNc2dpZCwgTXNnaWQsIENhdGVnb3J5KQorI2lmZGVmIERFRkFVTFRfVEVYVF9ET01BSU4KKyMgZGVmaW5lIG5wZ2V0dGV4dChNc2djdHh0LCBNc2dpZCwgTXNnaWRQbHVyYWwsIE4pIFwKKyAgIG5wZ2V0dGV4dF9hdXggKERFRkFVTFRfVEVYVF9ET01BSU4sIE1zZ2N0eHQgR0VUVEVYVF9DT05URVhUX0dMVUUgTXNnaWQsIE1zZ2lkLCBNc2dpZFBsdXJhbCwgTiwgTENfTUVTU0FHRVMpCisjZWxzZQorIyBkZWZpbmUgbnBnZXR0ZXh0KE1zZ2N0eHQsIE1zZ2lkLCBNc2dpZFBsdXJhbCwgTikgXAorICAgbnBnZXR0ZXh0X2F1eCAoTlVMTCwgTXNnY3R4dCBHRVRURVhUX0NPTlRFWFRfR0xVRSBNc2dpZCwgTXNnaWQsIE1zZ2lkUGx1cmFsLCBOLCBMQ19NRVNTQUdFUykKKyNlbmRpZgorI2RlZmluZSBkbnBnZXR0ZXh0KERvbWFpbm5hbWUsIE1zZ2N0eHQsIE1zZ2lkLCBNc2dpZFBsdXJhbCwgTikgXAorICBucGdldHRleHRfYXV4IChEb21haW5uYW1lLCBNc2djdHh0IEdFVFRFWFRfQ09OVEVYVF9HTFVFIE1zZ2lkLCBNc2dpZCwgTXNnaWRQbHVyYWwsIE4sIExDX01FU1NBR0VTKQorI2RlZmluZSBkY25wZ2V0dGV4dChEb21haW5uYW1lLCBNc2djdHh0LCBNc2dpZCwgTXNnaWRQbHVyYWwsIE4sIENhdGVnb3J5KSBcCisgIG5wZ2V0dGV4dF9hdXggKERvbWFpbm5hbWUsIE1zZ2N0eHQgR0VUVEVYVF9DT05URVhUX0dMVUUgTXNnaWQsIE1zZ2lkLCBNc2dpZFBsdXJhbCwgTiwgQ2F0ZWdvcnkpCisKKyNpZmRlZiBfX0dOVUNfXworX19pbmxpbmUKKyNlbHNlCisjaWZkZWYgX19jcGx1c3BsdXMKK2lubGluZQorI2VuZGlmCisjZW5kaWYKK3N0YXRpYyBjb25zdCBjaGFyICoKK3BnZXR0ZXh0X2F1eCAoY29uc3QgY2hhciAqZG9tYWluLAorCSAgICAgIGNvbnN0IGNoYXIgKm1zZ19jdHh0X2lkLCBjb25zdCBjaGFyICptc2dpZCwKKwkgICAgICBpbnQgY2F0ZWdvcnkpCit7CisgIGNvbnN0IGNoYXIgKnRyYW5zbGF0aW9uID0gZGNnZXR0ZXh0IChkb21haW4sIG1zZ19jdHh0X2lkLCBjYXRlZ29yeSk7CisgIGlmICh0cmFuc2xhdGlvbiA9PSBtc2dfY3R4dF9pZCkKKyAgICByZXR1cm4gbXNnaWQ7CisgIGVsc2UKKyAgICByZXR1cm4gdHJhbnNsYXRpb247Cit9CisKKyNpZmRlZiBfX0dOVUNfXworX19pbmxpbmUKKyNlbHNlCisjaWZkZWYgX19jcGx1c3BsdXMKK2lubGluZQorI2VuZGlmCisjZW5kaWYKK3N0YXRpYyBjb25zdCBjaGFyICoKK25wZ2V0dGV4dF9hdXggKGNvbnN0IGNoYXIgKmRvbWFpbiwKKwkgICAgICAgY29uc3QgY2hhciAqbXNnX2N0eHRfaWQsIGNvbnN0IGNoYXIgKm1zZ2lkLAorCSAgICAgICBjb25zdCBjaGFyICptc2dpZF9wbHVyYWwsIHVuc2lnbmVkIGxvbmcgaW50IG4sCisJICAgICAgIGludCBjYXRlZ29yeSkKK3sKKyAgY29uc3QgY2hhciAqdHJhbnNsYXRpb24gPQorICAgIGRjbmdldHRleHQgKGRvbWFpbiwgbXNnX2N0eHRfaWQsIG1zZ2lkX3BsdXJhbCwgbiwgY2F0ZWdvcnkpOworICBpZiAodHJhbnNsYXRpb24gPT0gbXNnX2N0eHRfaWQgfHwgdHJhbnNsYXRpb24gPT0gbXNnaWRfcGx1cmFsKQorICAgIHJldHVybiAobiA9PSAxID8gbXNnaWQgOiBtc2dpZF9wbHVyYWwpOworICBlbHNlCisgICAgcmV0dXJuIHRyYW5zbGF0aW9uOworfQorCisvKiBUaGUgc2FtZSB0aGluZyBleHRlbmRlZCBmb3Igbm9uLWNvbnN0YW50IGFyZ3VtZW50cy4gIEhlcmUgTVNHQ1RYVCBhbmQgTVNHSUQKKyAgIGNhbiBiZSBhcmJpdHJhcnkgZXhwcmVzc2lvbnMuICBCdXQgZm9yIHN0cmluZyBsaXRlcmFscyB0aGVzZSBtYWNyb3MgYXJlCisgICBsZXNzIGVmZmljaWVudCB0aGFuIHRob3NlIGFib3ZlLiAgKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjZGVmaW5lIF9MSUJHRVRURVhUX0hBVkVfVkFSSUFCTEVfU0laRV9BUlJBWVMgXAorICAoKChfX0dOVUNfXyA+PSAzIHx8IF9fR05VR19fID49IDIpICYmICFfX1NUUklDVF9BTlNJX18pIFwKKyAgIC8qIHx8IF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTCAqLyApCisKKyNpZiAhX0xJQkdFVFRFWFRfSEFWRV9WQVJJQUJMRV9TSVpFX0FSUkFZUworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisKKyNkZWZpbmUgcGdldHRleHRfZXhwcihNc2djdHh0LCBNc2dpZCkgXAorICBkY3BnZXR0ZXh0X2V4cHIgKE5VTEwsIE1zZ2N0eHQsIE1zZ2lkLCBMQ19NRVNTQUdFUykKKyNkZWZpbmUgZHBnZXR0ZXh0X2V4cHIoRG9tYWlubmFtZSwgTXNnY3R4dCwgTXNnaWQpIFwKKyAgZGNwZ2V0dGV4dF9leHByIChEb21haW5uYW1lLCBNc2djdHh0LCBNc2dpZCwgTENfTUVTU0FHRVMpCisKKyNpZmRlZiBfX0dOVUNfXworX19pbmxpbmUKKyNlbHNlCisjaWZkZWYgX19jcGx1c3BsdXMKK2lubGluZQorI2VuZGlmCisjZW5kaWYKK3N0YXRpYyBjb25zdCBjaGFyICoKK2RjcGdldHRleHRfZXhwciAoY29uc3QgY2hhciAqZG9tYWluLAorCQkgY29uc3QgY2hhciAqbXNnY3R4dCwgY29uc3QgY2hhciAqbXNnaWQsCisJCSBpbnQgY2F0ZWdvcnkpCit7CisgIHNpemVfdCBtc2djdHh0X2xlbiA9IHN0cmxlbiAobXNnY3R4dCkgKyAxOworICBzaXplX3QgbXNnaWRfbGVuID0gc3RybGVuIChtc2dpZCkgKyAxOworICBjb25zdCBjaGFyICp0cmFuc2xhdGlvbjsKKyNpZiBfTElCR0VUVEVYVF9IQVZFX1ZBUklBQkxFX1NJWkVfQVJSQVlTCisgIGNoYXIgbXNnX2N0eHRfaWRbbXNnY3R4dF9sZW4gKyBtc2dpZF9sZW5dOworI2Vsc2UKKyAgY2hhciBidWZbMTAyNF07CisgIGNoYXIgKm1zZ19jdHh0X2lkID0KKyAgICAobXNnY3R4dF9sZW4gKyBtc2dpZF9sZW4gPD0gc2l6ZW9mIChidWYpCisgICAgID8gYnVmCisgICAgIDogKGNoYXIgKikgbWFsbG9jIChtc2djdHh0X2xlbiArIG1zZ2lkX2xlbikpOworICBpZiAobXNnX2N0eHRfaWQgIT0gTlVMTCkKKyNlbmRpZgorICAgIHsKKyAgICAgIG1lbWNweSAobXNnX2N0eHRfaWQsIG1zZ2N0eHQsIG1zZ2N0eHRfbGVuIC0gMSk7CisgICAgICBtc2dfY3R4dF9pZFttc2djdHh0X2xlbiAtIDFdID0gJ1wwMDQnOworICAgICAgbWVtY3B5IChtc2dfY3R4dF9pZCArIG1zZ2N0eHRfbGVuLCBtc2dpZCwgbXNnaWRfbGVuKTsKKyAgICAgIHRyYW5zbGF0aW9uID0gZGNnZXR0ZXh0IChkb21haW4sIG1zZ19jdHh0X2lkLCBjYXRlZ29yeSk7CisjaWYgIV9MSUJHRVRURVhUX0hBVkVfVkFSSUFCTEVfU0laRV9BUlJBWVMKKyAgICAgIGlmIChtc2dfY3R4dF9pZCAhPSBidWYpCisJZnJlZSAobXNnX2N0eHRfaWQpOworI2VuZGlmCisgICAgICBpZiAodHJhbnNsYXRpb24gIT0gbXNnX2N0eHRfaWQpCisJcmV0dXJuIHRyYW5zbGF0aW9uOworICAgIH0KKyAgcmV0dXJuIG1zZ2lkOworfQorCisjZGVmaW5lIG5wZ2V0dGV4dF9leHByKE1zZ2N0eHQsIE1zZ2lkLCBNc2dpZFBsdXJhbCwgTikgXAorICBkY25wZ2V0dGV4dF9leHByIChOVUxMLCBNc2djdHh0LCBNc2dpZCwgTXNnaWRQbHVyYWwsIE4sIExDX01FU1NBR0VTKQorI2RlZmluZSBkbnBnZXR0ZXh0X2V4cHIoRG9tYWlubmFtZSwgTXNnY3R4dCwgTXNnaWQsIE1zZ2lkUGx1cmFsLCBOKSBcCisgIGRjbnBnZXR0ZXh0X2V4cHIgKERvbWFpbm5hbWUsIE1zZ2N0eHQsIE1zZ2lkLCBNc2dpZFBsdXJhbCwgTiwgTENfTUVTU0FHRVMpCisKKyNpZmRlZiBfX0dOVUNfXworX19pbmxpbmUKKyNlbHNlCisjaWZkZWYgX19jcGx1c3BsdXMKK2lubGluZQorI2VuZGlmCisjZW5kaWYKK3N0YXRpYyBjb25zdCBjaGFyICoKK2RjbnBnZXR0ZXh0X2V4cHIgKGNvbnN0IGNoYXIgKmRvbWFpbiwKKwkJICBjb25zdCBjaGFyICptc2djdHh0LCBjb25zdCBjaGFyICptc2dpZCwKKwkJICBjb25zdCBjaGFyICptc2dpZF9wbHVyYWwsIHVuc2lnbmVkIGxvbmcgaW50IG4sCisJCSAgaW50IGNhdGVnb3J5KQoreworICBzaXplX3QgbXNnY3R4dF9sZW4gPSBzdHJsZW4gKG1zZ2N0eHQpICsgMTsKKyAgc2l6ZV90IG1zZ2lkX2xlbiA9IHN0cmxlbiAobXNnaWQpICsgMTsKKyAgY29uc3QgY2hhciAqdHJhbnNsYXRpb247CisjaWYgX0xJQkdFVFRFWFRfSEFWRV9WQVJJQUJMRV9TSVpFX0FSUkFZUworICBjaGFyIG1zZ19jdHh0X2lkW21zZ2N0eHRfbGVuICsgbXNnaWRfbGVuXTsKKyNlbHNlCisgIGNoYXIgYnVmWzEwMjRdOworICBjaGFyICptc2dfY3R4dF9pZCA9CisgICAgKG1zZ2N0eHRfbGVuICsgbXNnaWRfbGVuIDw9IHNpemVvZiAoYnVmKQorICAgICA/IGJ1ZgorICAgICA6IChjaGFyICopIG1hbGxvYyAobXNnY3R4dF9sZW4gKyBtc2dpZF9sZW4pKTsKKyAgaWYgKG1zZ19jdHh0X2lkICE9IE5VTEwpCisjZW5kaWYKKyAgICB7CisgICAgICBtZW1jcHkgKG1zZ19jdHh0X2lkLCBtc2djdHh0LCBtc2djdHh0X2xlbiAtIDEpOworICAgICAgbXNnX2N0eHRfaWRbbXNnY3R4dF9sZW4gLSAxXSA9ICdcMDA0JzsKKyAgICAgIG1lbWNweSAobXNnX2N0eHRfaWQgKyBtc2djdHh0X2xlbiwgbXNnaWQsIG1zZ2lkX2xlbik7CisgICAgICB0cmFuc2xhdGlvbiA9IGRjbmdldHRleHQgKGRvbWFpbiwgbXNnX2N0eHRfaWQsIG1zZ2lkX3BsdXJhbCwgbiwgY2F0ZWdvcnkpOworI2lmICFfTElCR0VUVEVYVF9IQVZFX1ZBUklBQkxFX1NJWkVfQVJSQVlTCisgICAgICBpZiAobXNnX2N0eHRfaWQgIT0gYnVmKQorCWZyZWUgKG1zZ19jdHh0X2lkKTsKKyNlbmRpZgorICAgICAgaWYgKCEodHJhbnNsYXRpb24gPT0gbXNnX2N0eHRfaWQgfHwgdHJhbnNsYXRpb24gPT0gbXNnaWRfcGx1cmFsKSkKKwlyZXR1cm4gdHJhbnNsYXRpb247CisgICAgfQorICByZXR1cm4gKG4gPT0gMSA/IG1zZ2lkIDogbXNnaWRfcGx1cmFsKTsKK30KKworI2VuZGlmIC8qIF9MSUJHRVRURVhUX0ggKi8KZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWIvZ251bGliLm1rIGIvcGFydGVkLTEuOC43L2xpYi9nbnVsaWIubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQwODAyMAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWIvZ251bGliLm1rCkBAIC0wLDAgKzEsNzg3IEBACisjIyBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhCisjIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9tYWtlIHRvIHByb2R1Y2UgTWFrZWZpbGUuaW4uCisjIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisjIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisjIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisjCisjIEdlbmVyYXRlZCBieSBnbnVsaWItdG9vbC4KKyMgUmVwcm9kdWNlIGJ5OiBnbnVsaWItdG9vbCAtLWltcG9ydCAtLWRpcj0uIC0tbG9jYWwtZGlyPWdsIC0tbGliPWxpYnBhcnRlZCAtLXNvdXJjZS1iYXNlPWxpYiAtLW00LWJhc2U9bTQgLS1kb2MtYmFzZT1kb2MgLS1hdXgtZGlyPWJ1aWxkLWF1eCAtLWF2b2lkPWxvY2sgLS1hdm9pZD1zaXplX21heCAtLWF2b2lkPXhzaXplIC0tYXZvaWQ9Y2Fub25pY2FsaXplLWxncGwgLS1saWJ0b29sIC0tbWFjcm8tcHJlZml4PWdsIGFsbG9jYSBhbm5vdW5jZS1nZW4gYXNzZXJ0IGF0ZXhpdCBjYWxsb2MgY2xvc2VvdXQgY29uZmlnLWggY29uZmlnbWFrZSBmZGwgZnJlZSBnZXR0ZXh0IGdudXBsb2FkIGludHR5cGVzIGxpYi1pZ25vcmUgbG9uZy1vcHRpb25zIG1hbGxvYyBtZW1jaHIgbWVtY21wIG1lbWNweSBtZW1tb3ZlIG1lbXNldCByZWFsbG9jIHJlbmFtZSBycG1hdGNoIHNhZmUtcmVhZCBzdGRib29sIHN0cmNzcG4gc3RydG9kIHN0cnRvbCB1dGltZSB2ZXJzaW9uLWV0Yy1mc2YKKworQVVUT01BS0VfT1BUSU9OUyA9IDEuNSBnbml0cworCitub2luc3RfSEVBREVSUyA9Citub2luc3RfTElCUkFSSUVTID0KK25vaW5zdF9MVExJQlJBUklFUyA9CitFWFRSQV9ESVNUID0KK0JVSUxUX1NPVVJDRVMgPQorU1VGRklYRVMgPQorTU9TVExZQ0xFQU5GSUxFUyA9IGNvcmUgKi5zdGFja2R1bXAKK01PU1RMWUNMRUFORElSUyA9CitDTEVBTkZJTEVTID0KK0RJU1RDTEVBTkZJTEVTID0KK01BSU5UQUlORVJDTEVBTkZJTEVTID0KKworQU1fQ1BQRkxBR1MgPQorCitub2luc3RfTFRMSUJSQVJJRVMgKz0gbGlicGFydGVkLmxhCisKK2xpYnBhcnRlZF9sYV9TT1VSQ0VTID0KK2xpYnBhcnRlZF9sYV9MSUJBREQgPSAkKGdsX0xUTElCT0JKUykKK2xpYnBhcnRlZF9sYV9ERVBFTkRFTkNJRVMgPSAkKGdsX0xUTElCT0JKUykKK0VYVFJBX2xpYnBhcnRlZF9sYV9TT1VSQ0VTID0KK2xpYnBhcnRlZF9sYV9MREZMQUdTID0gJChBTV9MREZMQUdTKQorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIGFsbG9jYQorCisKK0VYVFJBX0RJU1QgKz0gYWxsb2NhLmMKKworRVhUUkFfbGlicGFydGVkX2xhX1NPVVJDRVMgKz0gYWxsb2NhLmMKKworbGlicGFydGVkX2xhX0xJQkFERCArPSBATFRBTExPQ0FACitsaWJwYXJ0ZWRfbGFfREVQRU5ERU5DSUVTICs9IEBMVEFMTE9DQUAKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgYWxsb2NhCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgYWxsb2NhLW9wdAorCitCVUlMVF9TT1VSQ0VTICs9ICQoQUxMT0NBX0gpCisKKyMgV2UgbmVlZCB0aGUgZm9sbG93aW5nIGluIG9yZGVyIHRvIGNyZWF0ZSA8YWxsb2NhLmg+IHdoZW4gdGhlIHN5c3RlbQorIyBkb2Vzbid0IGhhdmUgb25lIHRoYXQgd29ya3Mgd2l0aCB0aGUgZ2l2ZW4gY29tcGlsZXIuCithbGxvY2EuaDogYWxsb2NhXy5oCisJeyBlY2hvICcvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovJzsgXAorCSAgY2F0ICQoc3JjZGlyKS9hbGxvY2FfLmg7IFwKKwl9ID4gJEAtdAorCW12IC1mICRALXQgJEAKK01PU1RMWUNMRUFORklMRVMgKz0gYWxsb2NhLmggYWxsb2NhLmgtdAorCitFWFRSQV9ESVNUICs9IGFsbG9jYV8uaAorCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIGFsbG9jYS1vcHQKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSBhdGV4aXQKKworCitFWFRSQV9ESVNUICs9IGF0ZXhpdC5jCisKK0VYVFJBX2xpYnBhcnRlZF9sYV9TT1VSQ0VTICs9IGF0ZXhpdC5jCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgYXRleGl0CisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgY2FsbG9jCisKKworRVhUUkFfRElTVCArPSBjYWxsb2MuYworCitFWFRSQV9saWJwYXJ0ZWRfbGFfU09VUkNFUyArPSBjYWxsb2MuYworCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIGNhbGxvYworCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIGNsb3NlLXN0cmVhbQorCisKK0VYVFJBX0RJU1QgKz0gY2xvc2Utc3RyZWFtLmMgY2xvc2Utc3RyZWFtLmgKKworRVhUUkFfbGlicGFydGVkX2xhX1NPVVJDRVMgKz0gY2xvc2Utc3RyZWFtLmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBjbG9zZS1zdHJlYW0KKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSBjbG9zZW91dAorCisKK0VYVFJBX0RJU1QgKz0gY2xvc2VvdXQuYyBjbG9zZW91dC5oCisKK0VYVFJBX2xpYnBhcnRlZF9sYV9TT1VSQ0VTICs9IGNsb3Nlb3V0LmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBjbG9zZW91dAorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIGNvbmZpZ21ha2UKKworIyBSZXRyaWV2ZSB2YWx1ZXMgb2YgdGhlIHZhcmlhYmxlcyB0aHJvdWdoICdjb25maWd1cmUnIGZvbGxvd2VkIGJ5CisjICdtYWtlJywgbm90IGRpcmVjdGx5IHRocm91Z2ggJ2NvbmZpZ3VyZScsIHNvIHRoYXQgYSB1c2VyIHdobworIyBzZXRzIHNvbWUgb2YgdGhlc2UgdmFyaWFibGVzIGNvbnNpc3RlbnRseSBvbiB0aGUgJ21ha2UnIGNvbW1hbmQKKyMgbGluZSBnZXRzIGNvcnJlY3QgcmVzdWx0cy4KKyMKKyMgT25lIGFkdmFudGFnZSBvZiB0aGlzIGFwcHJvYWNoLCBjb21wYXJlZCB0byB0aGUgY2xhc3NpY2FsCisjIGFwcHJvYWNoIG9mIGFkZGluZyAtRExJQkRJUj1cIiQobGliZGlyKVwiIGV0Yy4gdG8gQU1fQ1BQRkxBR1MsCisjIGlzIHRoYXQgaXQgcHJvdGVjdHMgYWdhaW5zdCB0aGUgdXNlIG9mIHVuZGVmaW5lZCB2YXJpYWJsZXMuCisjIElmLCBzYXksICQobGliZGlyKSBpcyBub3Qgc2V0IGluIHRoZSBNYWtlZmlsZSwgTElCRElSIGlzIG5vdAorIyBkZWZpbmVkIGJ5IHRoaXMgbW9kdWxlLCBhbmQgY29kZSB1c2luZyBMSUJESVIgZ2l2ZXMgYQorIyBjb21waWxhdGlvbiBlcnJvci4KKyMKKyMgQW5vdGhlciBhZHZhbnRhZ2UgaXMgdGhhdCAnbWFrZScgb3V0cHV0IGlzIHNob3J0ZXIuCisjCisjIExpc3RlZCBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUgR05VIG1ha2VmaWxlIGNvbnZlbnRpb25zLgorIyBUaGUgQXV0b21ha2UtZGVmaW5lZCBwa2cqIG1hY3JvcyBhcmUgYXBwZW5kZWQsIGluIHRoZSBvcmRlcgorIyBsaXN0ZWQgaW4gdGhlIEF1dG9tYWtlIDEuMTBhKyBkb2N1bWVudGF0aW9uLgorY29uZmlnbWFrZS5oOiBNYWtlZmlsZQorCXJtIC1mICRALXQgJEAKKwl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nOyBcCisJICBlY2hvICcjZGVmaW5lIFBSRUZJWCAiJChwcmVmaXgpIic7IFwKKwkgIGVjaG8gJyNkZWZpbmUgRVhFQ19QUkVGSVggIiQoZXhlY19wcmVmaXgpIic7IFwKKwkgIGVjaG8gJyNkZWZpbmUgQklORElSICIkKGJpbmRpcikiJzsgXAorCSAgZWNobyAnI2RlZmluZSBTQklORElSICIkKHNiaW5kaXIpIic7IFwKKwkgIGVjaG8gJyNkZWZpbmUgTElCRVhFQ0RJUiAiJChsaWJleGVjZGlyKSInOyBcCisJICBlY2hvICcjZGVmaW5lIERBVEFST09URElSICIkKGRhdGFyb290ZGlyKSInOyBcCisJICBlY2hvICcjZGVmaW5lIERBVEFESVIgIiQoZGF0YWRpcikiJzsgXAorCSAgZWNobyAnI2RlZmluZSBTWVNDT05GRElSICIkKHN5c2NvbmZkaXIpIic7IFwKKwkgIGVjaG8gJyNkZWZpbmUgU0hBUkVEU1RBVEVESVIgIiQoc2hhcmVkc3RhdGVkaXIpIic7IFwKKwkgIGVjaG8gJyNkZWZpbmUgTE9DQUxTVEFURURJUiAiJChsb2NhbHN0YXRlZGlyKSInOyBcCisJICBlY2hvICcjZGVmaW5lIElOQ0xVREVESVIgIiQoaW5jbHVkZWRpcikiJzsgXAorCSAgZWNobyAnI2RlZmluZSBPTERJTkNMVURFRElSICIkKG9sZGluY2x1ZGVkaXIpIic7IFwKKwkgIGVjaG8gJyNkZWZpbmUgRE9DRElSICIkKGRvY2RpcikiJzsgXAorCSAgZWNobyAnI2RlZmluZSBJTkZPRElSICIkKGluZm9kaXIpIic7IFwKKwkgIGVjaG8gJyNkZWZpbmUgSFRNTERJUiAiJChodG1sZGlyKSInOyBcCisJICBlY2hvICcjZGVmaW5lIERWSURJUiAiJChkdmlkaXIpIic7IFwKKwkgIGVjaG8gJyNkZWZpbmUgUERGRElSICIkKHBkZmRpcikiJzsgXAorCSAgZWNobyAnI2RlZmluZSBQU0RJUiAiJChwc2RpcikiJzsgXAorCSAgZWNobyAnI2RlZmluZSBMSUJESVIgIiQobGliZGlyKSInOyBcCisJICBlY2hvICcjZGVmaW5lIExJU1BESVIgIiQobGlzcGRpcikiJzsgXAorCSAgZWNobyAnI2RlZmluZSBMT0NBTEVESVIgIiQobG9jYWxlZGlyKSInOyBcCisJICBlY2hvICcjZGVmaW5lIE1BTkRJUiAiJChtYW5kaXIpIic7IFwKKwkgIGVjaG8gJyNkZWZpbmUgTUFORVhUICIkKG1hbmV4dCkiJzsgXAorCSAgZWNobyAnI2RlZmluZSBQS0dEQVRBRElSICIkKHBrZ2RhdGFkaXIpIic7IFwKKwkgIGVjaG8gJyNkZWZpbmUgUEtHSU5DTFVERURJUiAiJChwa2dpbmNsdWRlZGlyKSInOyBcCisJICBlY2hvICcjZGVmaW5lIFBLR0xJQkRJUiAiJChwa2dsaWJkaXIpIic7IFwKKwkgIGVjaG8gJyNkZWZpbmUgUEtHTElCRVhFQ0RJUiAiJChwa2dsaWJleGVjZGlyKSInOyBcCisJfSB8IHNlZCAnLyIiL2QnID4gJEAtdAorCW12ICRALXQgJEAKK0JVSUxUX1NPVVJDRVMgKz0gY29uZmlnbWFrZS5oCitDTEVBTkZJTEVTICs9IGNvbmZpZ21ha2UuaCBjb25maWdtYWtlLmgtdAorCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIGNvbmZpZ21ha2UKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSBkaXJuYW1lCisKKworRVhUUkFfRElTVCArPSBiYXNlbmFtZS5jIGRpcm5hbWUuYyBkaXJuYW1lLmggc3RyaXBzbGFzaC5jCisKK0VYVFJBX2xpYnBhcnRlZF9sYV9TT1VSQ0VTICs9IGJhc2VuYW1lLmMgZGlybmFtZS5jIHN0cmlwc2xhc2guYworCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIGRpcm5hbWUKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSBlcnJvcgorCisKK0VYVFJBX0RJU1QgKz0gZXJyb3IuYyBlcnJvci5oCisKK0VYVFJBX2xpYnBhcnRlZF9sYV9TT1VSQ0VTICs9IGVycm9yLmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBlcnJvcgorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIGV4aXRmYWlsCisKKworRVhUUkFfRElTVCArPSBleGl0ZmFpbC5jIGV4aXRmYWlsLmgKKworRVhUUkFfbGlicGFydGVkX2xhX1NPVVJDRVMgKz0gZXhpdGZhaWwuYworCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIGV4aXRmYWlsCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgZnBlbmRpbmcKKworCitFWFRSQV9ESVNUICs9IF9fZnBlbmRpbmcuYyBfX2ZwZW5kaW5nLmgKKworRVhUUkFfbGlicGFydGVkX2xhX1NPVVJDRVMgKz0gX19mcGVuZGluZy5jCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgZnBlbmRpbmcKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSBmcmVlCisKKworRVhUUkFfRElTVCArPSBmcmVlLmMKKworRVhUUkFfbGlicGFydGVkX2xhX1NPVVJDRVMgKz0gZnJlZS5jCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgZnJlZQorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIGZ1bGwtd3JpdGUKKworbGlicGFydGVkX2xhX1NPVVJDRVMgKz0gZnVsbC13cml0ZS5oIGZ1bGwtd3JpdGUuYworCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIGZ1bGwtd3JpdGUKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSBnZXRvcHQKKworQlVJTFRfU09VUkNFUyArPSAkKEdFVE9QVF9IKQorCisjIFdlIG5lZWQgdGhlIGZvbGxvd2luZyBpbiBvcmRlciB0byBjcmVhdGUgPGdldG9wdC5oPiB3aGVuIHRoZSBzeXN0ZW0KKyMgZG9lc24ndCBoYXZlIG9uZSB0aGF0IHdvcmtzIHdpdGggdGhlIGdpdmVuIGNvbXBpbGVyLgorZ2V0b3B0Lmg6IGdldG9wdF8uaAorCXsgZWNobyAnLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLyc7IFwKKwkgIGNhdCAkKHNyY2RpcikvZ2V0b3B0Xy5oOyBcCisJfSA+ICRALXQKKwltdiAtZiAkQC10ICRACitNT1NUTFlDTEVBTkZJTEVTICs9IGdldG9wdC5oIGdldG9wdC5oLXQKKworRVhUUkFfRElTVCArPSBnZXRvcHQuYyBnZXRvcHQxLmMgZ2V0b3B0Xy5oIGdldG9wdF9pbnQuaAorCitFWFRSQV9saWJwYXJ0ZWRfbGFfU09VUkNFUyArPSBnZXRvcHQuYyBnZXRvcHQxLmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBnZXRvcHQKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSBnZXR0ZXh0CisKKyMgVGhpcyBpcyBmb3IgdGhvc2UgcHJvamVjdHMgd2hpY2ggdXNlICJnZXR0ZXh0aXplIC0taW50bCIgdG8gcHV0IGEgc291cmNlLWNvZGUKKyMgY29weSBvZiBsaWJpbnRsIGludG8gdGhlaXIgcGFja2FnZS4gSW4gc3VjaCBwcm9qZWN0cywgZXZlcnkgTWFrZWZpbGUuYW0gbmVlZHMKKyMgLUkkKHRvcF9idWlsZGRpcikvaW50bCwgc28gdGhhdCA8bGliaW50bC5oPiBjYW4gYmUgZm91bmQgaW4gdGhpcyBkaXJlY3RvcnkuCisjIEZvciB0aGUgTWFrZWZpbGUuYW1zIGluIG90aGVyIGRpcmVjdG9yaWVzIGl0IGlzIHRoZSBtYWludGFpbmVyJ3MKKyMgcmVzcG9uc2liaWxpdHk7IGZvciB0aGUgb25lIGZyb20gZ251bGliIHdlIGRvIGl0IGhlcmUuCisjIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgd2hlbiB0aGUgdXNlciBkaXNhYmxlcyBOTFMgKGJlY2F1c2UgdGhlbiB0aGUgaW50bAorIyBkaXJlY3RvcnkgY29udGFpbnMgbm8gbGliaW50bC5oIGZpbGUpIG9yIHdoZW4gdGhlIHByb2plY3QgZG9lcyBub3QgdXNlCisjICJnZXR0ZXh0aXplIC0taW50bCIuCisjQU1fQ1BQRkxBR1MgKz0gLUkkKHRvcF9idWlsZGRpcikvaW50bAorCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIGdldHRleHQKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSBnZXR0ZXh0LWgKKworbGlicGFydGVkX2xhX1NPVVJDRVMgKz0gZ2V0dGV4dC5oCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgZ2V0dGV4dC1oCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgaW50dHlwZXMKKworQlVJTFRfU09VUkNFUyArPSAkKElOVFRZUEVTX0gpCisKKyMgV2UgbmVlZCB0aGUgZm9sbG93aW5nIGluIG9yZGVyIHRvIGNyZWF0ZSA8aW50dHlwZXMuaD4gd2hlbiB0aGUgc3lzdGVtCisjIGRvZXNuJ3QgaGF2ZSBvbmUgdGhhdCB3b3JrcyB3aXRoIHRoZSBnaXZlbiBjb21waWxlci4KK2ludHR5cGVzLmg6IGludHR5cGVzXy5oCisJcm0gLWYgJEAtdCAkQAorCXsgZWNobyAnLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLyc7IFwKKwkgIHNlZCAtZSAncy9AJydIQVZFX0lOVFRZUEVTX0gnJ0AvJChIQVZFX0lOVFRZUEVTX0gpL2cnIFwKKwkgICAgICAtZSAnc3xAJydBQlNPTFVURV9JTlRUWVBFU19IJydAfCQoQUJTT0xVVEVfSU5UVFlQRVNfSCl8ZycgXAorCSAgICAgIC1lICdzL0AnJ1BSSV9NQUNST1NfQlJPS0VOJydALyQoUFJJX01BQ1JPU19CUk9LRU4pL2cnIFwKKwkgICAgICAtZSAncy9AJydIQVZFX0xPTkdfTE9OR19JTlQnJ0AvJChIQVZFX0xPTkdfTE9OR19JTlQpL2cnIFwKKwkgICAgICAtZSAncy9AJydIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlQnJ0AvJChIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlQpL2cnIFwKKwkgICAgICAtZSAncy9AJydQUklQVFJfUFJFRklYJydALyQoUFJJUFRSX1BSRUZJWCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9JTUFYQUJTJydALyQoR05VTElCX0lNQVhBQlMpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfSU1BWERJVicnQC8kKEdOVUxJQl9JTUFYRElWKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUlRPSU1BWCcnQC8kKEdOVUxJQl9TVFJUT0lNQVgpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfU1RSVE9VTUFYJydALyQoR05VTElCX1NUUlRPVU1BWCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0hBVkVfREVDTF9JTUFYQUJTJydALyQoSEFWRV9ERUNMX0lNQVhBQlMpL2cnIFwKKwkgICAgICAtZSAncy9AJydIQVZFX0RFQ0xfSU1BWERJVicnQC8kKEhBVkVfREVDTF9JTUFYRElWKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnSEFWRV9ERUNMX1NUUlRPSU1BWCcnQC8kKEhBVkVfREVDTF9TVFJUT0lNQVgpL2cnIFwKKwkgICAgICAtZSAncy9AJydIQVZFX0RFQ0xfU1RSVE9VTUFYJydALyQoSEFWRV9ERUNMX1NUUlRPVU1BWCkvZycgXAorCSAgICAgIC1lICcvZGVmaW5pdGlvbiBvZiBHTF9MSU5LX1dBUk5JTkcvciAkKExJTktfV0FSTklOR19IKScgXAorCSAgICAgIDwgJChzcmNkaXIpL2ludHR5cGVzXy5oOyBcCisJfSA+ICRALXQKKwltdiAkQC10ICRACitNT1NUTFlDTEVBTkZJTEVTICs9IGludHR5cGVzLmggaW50dHlwZXMuaC10CisKK0VYVFJBX0RJU1QgKz0gaW50dHlwZXNfLmgKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBpbnR0eXBlcworCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIGxpbmstd2FybmluZworCitMSU5LX1dBUk5JTkdfSD0kKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9saW5rLXdhcm5pbmcuaAorCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIGxpbmstd2FybmluZworCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIGxvY2FsY2hhcnNldAorCitsaWJwYXJ0ZWRfbGFfU09VUkNFUyArPSBsb2NhbGNoYXJzZXQuaCBsb2NhbGNoYXJzZXQuYworCisjIFdlIG5lZWQgdGhlIGZvbGxvd2luZyBpbiBvcmRlciB0byBpbnN0YWxsIGEgc2ltcGxlIGZpbGUgaW4gJChsaWJkaXIpCisjIHdoaWNoIGlzIHNoYXJlZCB3aXRoIG90aGVyIGluc3RhbGxlZCBwYWNrYWdlcy4gV2UgdXNlIGEgbGlzdCBvZiByZWZlcmVuY2luZworIyBwYWNrYWdlcyBzbyB0aGF0ICJtYWtlIHVuaW5zdGFsbCIgd2lsbCByZW1vdmUgdGhlIGZpbGUgaWYgYW5kIG9ubHkgaWYgaXQKKyMgaXMgbm90IHVzZWQgYnkgYW5vdGhlciBpbnN0YWxsZWQgcGFja2FnZS4KKyMgT24gc3lzdGVtcyB3aXRoIGdsaWJjLTIuMSBvciBuZXdlciwgdGhlIGZpbGUgaXMgcmVkdW5kYW50LCB0aGVyZWZvcmUgd2UKKyMgYXZvaWQgaW5zdGFsbGluZyBpdC4KKworYWxsLWxvY2FsOiBjaGFyc2V0LmFsaWFzIHJlZi1hZGQuc2VkIHJlZi1kZWwuc2VkCisKK2NoYXJzZXRfYWxpYXMgPSAkKERFU1RESVIpJChsaWJkaXIpL2NoYXJzZXQuYWxpYXMKK2NoYXJzZXRfdG1wID0gJChERVNURElSKSQobGliZGlyKS9jaGFyc2V0LnRtcAoraW5zdGFsbC1leGVjLWxvY2FsOiBhbGwtbG9jYWwKKwl0ZXN0ICQoR0xJQkMyMSkgIT0gbm8gfHwgJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChsaWJkaXIpCisJaWYgdGVzdCAtZiAkKGNoYXJzZXRfYWxpYXMpOyB0aGVuIFwKKwkgIHNlZCAtZiByZWYtYWRkLnNlZCAkKGNoYXJzZXRfYWxpYXMpID4gJChjaGFyc2V0X3RtcCkgOyBcCisJICAkKElOU1RBTExfREFUQSkgJChjaGFyc2V0X3RtcCkgJChjaGFyc2V0X2FsaWFzKSA7IFwKKwkgIHJtIC1mICQoY2hhcnNldF90bXApIDsgXAorCWVsc2UgXAorCSAgaWYgdGVzdCAkKEdMSUJDMjEpID0gbm87IHRoZW4gXAorCSAgICBzZWQgLWYgcmVmLWFkZC5zZWQgY2hhcnNldC5hbGlhcyA+ICQoY2hhcnNldF90bXApIDsgXAorCSAgICAkKElOU1RBTExfREFUQSkgJChjaGFyc2V0X3RtcCkgJChjaGFyc2V0X2FsaWFzKSA7IFwKKwkgICAgcm0gLWYgJChjaGFyc2V0X3RtcCkgOyBcCisJICBmaSA7IFwKKwlmaQorCit1bmluc3RhbGwtbG9jYWw6IGFsbC1sb2NhbAorCWlmIHRlc3QgLWYgJChjaGFyc2V0X2FsaWFzKTsgdGhlbiBcCisJICBzZWQgLWYgcmVmLWRlbC5zZWQgJChjaGFyc2V0X2FsaWFzKSA+ICQoY2hhcnNldF90bXApOyBcCisJICBpZiBncmVwICdeIyBQYWNrYWdlcyB1c2luZyB0aGlzIGZpbGU6ICQkJyAkKGNoYXJzZXRfdG1wKSBcCisJICAgICAgPiAvZGV2L251bGw7IHRoZW4gXAorCSAgICBybSAtZiAkKGNoYXJzZXRfYWxpYXMpOyBcCisJICBlbHNlIFwKKwkgICAgJChJTlNUQUxMX0RBVEEpICQoY2hhcnNldF90bXApICQoY2hhcnNldF9hbGlhcyk7IFwKKwkgIGZpOyBcCisJICBybSAtZiAkKGNoYXJzZXRfdG1wKTsgXAorCWZpCisKK2NoYXJzZXQuYWxpYXM6IGNvbmZpZy5jaGFyc2V0CisJcm0gLWYgdC0kQCAkQAorCSQoU0hFTEwpICQoc3JjZGlyKS9jb25maWcuY2hhcnNldCAnJChob3N0KScgPiB0LSRACisJbXYgdC0kQCAkQAorCitTVUZGSVhFUyArPSAuc2VkIC5zaW4KKy5zaW4uc2VkOgorCXJtIC1mIHQtJEAgJEAKKwlzZWQgLWUgJy9eIy9kJyAtZSAncy9AJydQQUNLQUdFJydALyQoUEFDS0FHRSkvZycgJDwgPiB0LSRACisJbXYgdC0kQCAkQAorCitDTEVBTkZJTEVTICs9IGNoYXJzZXQuYWxpYXMgcmVmLWFkZC5zZWQgcmVmLWRlbC5zZWQKKworRVhUUkFfRElTVCArPSBjb25maWcuY2hhcnNldCByZWYtYWRkLnNpbiByZWYtZGVsLnNpbgorCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIGxvY2FsY2hhcnNldAorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIGxvbmctb3B0aW9ucworCisKK0VYVFJBX0RJU1QgKz0gbG9uZy1vcHRpb25zLmMgbG9uZy1vcHRpb25zLmgKKworRVhUUkFfbGlicGFydGVkX2xhX1NPVVJDRVMgKz0gbG9uZy1vcHRpb25zLmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBsb25nLW9wdGlvbnMKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSBtYWxsb2MKKworCitFWFRSQV9ESVNUICs9IG1hbGxvYy5jCisKK0VYVFJBX2xpYnBhcnRlZF9sYV9TT1VSQ0VTICs9IG1hbGxvYy5jCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgbWFsbG9jCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgbWVtY2hyCisKKworRVhUUkFfRElTVCArPSBtZW1jaHIuYworCitFWFRSQV9saWJwYXJ0ZWRfbGFfU09VUkNFUyArPSBtZW1jaHIuYworCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIG1lbWNocgorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIG1lbWNtcAorCisKK0VYVFJBX0RJU1QgKz0gbWVtY21wLmMKKworRVhUUkFfbGlicGFydGVkX2xhX1NPVVJDRVMgKz0gbWVtY21wLmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBtZW1jbXAKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSBtZW1jcHkKKworCitFWFRSQV9ESVNUICs9IG1lbWNweS5jCisKK0VYVFJBX2xpYnBhcnRlZF9sYV9TT1VSQ0VTICs9IG1lbWNweS5jCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgbWVtY3B5CisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgbWVtbW92ZQorCisKK0VYVFJBX0RJU1QgKz0gbWVtbW92ZS5jCisKK0VYVFJBX2xpYnBhcnRlZF9sYV9TT1VSQ0VTICs9IG1lbW1vdmUuYworCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIG1lbW1vdmUKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSBtZW1zZXQKKworCitFWFRSQV9ESVNUICs9IG1lbXNldC5jCisKK0VYVFJBX2xpYnBhcnRlZF9sYV9TT1VSQ0VTICs9IG1lbXNldC5jCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgbWVtc2V0CisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgcXVvdGVhcmcKKworCitFWFRSQV9ESVNUICs9IHF1b3RlYXJnLmMgcXVvdGVhcmcuaAorCitFWFRSQV9saWJwYXJ0ZWRfbGFfU09VUkNFUyArPSBxdW90ZWFyZy5jCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgcXVvdGVhcmcKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSByZWFsbG9jCisKKworRVhUUkFfRElTVCArPSByZWFsbG9jLmMKKworRVhUUkFfbGlicGFydGVkX2xhX1NPVVJDRVMgKz0gcmVhbGxvYy5jCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgcmVhbGxvYworCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHJlZ2V4CisKKworRVhUUkFfRElTVCArPSByZWdjb21wLmMgcmVnZXguYyByZWdleC5oIHJlZ2V4X2ludGVybmFsLmMgcmVnZXhfaW50ZXJuYWwuaCByZWdleGVjLmMKKworRVhUUkFfbGlicGFydGVkX2xhX1NPVVJDRVMgKz0gcmVnY29tcC5jIHJlZ2V4LmMgcmVnZXhfaW50ZXJuYWwuYyByZWdleGVjLmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSByZWdleAorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHJlbmFtZQorCisKK0VYVFJBX0RJU1QgKz0gcmVuYW1lLmMKKworRVhUUkFfbGlicGFydGVkX2xhX1NPVVJDRVMgKz0gcmVuYW1lLmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSByZW5hbWUKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSBycG1hdGNoCisKKworRVhUUkFfRElTVCArPSBycG1hdGNoLmMKKworRVhUUkFfbGlicGFydGVkX2xhX1NPVVJDRVMgKz0gcnBtYXRjaC5jCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgcnBtYXRjaAorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHNhZmUtcmVhZAorCisKK0VYVFJBX0RJU1QgKz0gc2FmZS1yZWFkLmMgc2FmZS1yZWFkLmgKKworRVhUUkFfbGlicGFydGVkX2xhX1NPVVJDRVMgKz0gc2FmZS1yZWFkLmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBzYWZlLXJlYWQKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSBzYWZlLXdyaXRlCisKKworRVhUUkFfRElTVCArPSBzYWZlLXdyaXRlLmMgc2FmZS13cml0ZS5oCisKK0VYVFJBX2xpYnBhcnRlZF9sYV9TT1VSQ0VTICs9IHNhZmUtd3JpdGUuYworCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHNhZmUtd3JpdGUKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSBzdGRib29sCisKK0JVSUxUX1NPVVJDRVMgKz0gJChTVERCT09MX0gpCisKKyMgV2UgbmVlZCB0aGUgZm9sbG93aW5nIGluIG9yZGVyIHRvIGNyZWF0ZSA8c3RkYm9vbC5oPiB3aGVuIHRoZSBzeXN0ZW0KKyMgZG9lc24ndCBoYXZlIG9uZSB0aGF0IHdvcmtzLgorc3RkYm9vbC5oOiBzdGRib29sXy5oCisJcm0gLWYgJEAtdCAkQAorCXsgZWNobyAnLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLyc7IFwKKwkgIHNlZCAtZSAncy9AJydIQVZFX19CT09MJydALyQoSEFWRV9fQk9PTCkvZycgPCAkKHNyY2Rpcikvc3RkYm9vbF8uaDsgXAorCX0gPiAkQC10CisJbXYgJEAtdCAkQAorTU9TVExZQ0xFQU5GSUxFUyArPSBzdGRib29sLmggc3RkYm9vbC5oLXQKKworRVhUUkFfRElTVCArPSBzdGRib29sXy5oCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgc3RkYm9vbAorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHN0ZGludAorCitCVUlMVF9TT1VSQ0VTICs9ICQoU1RESU5UX0gpCisKKyMgV2UgbmVlZCB0aGUgZm9sbG93aW5nIGluIG9yZGVyIHRvIGNyZWF0ZSA8c3RkaW50Lmg+IHdoZW4gdGhlIHN5c3RlbQorIyBkb2Vzbid0IGhhdmUgb25lIHRoYXQgd29ya3Mgd2l0aCB0aGUgZ2l2ZW4gY29tcGlsZXIuCitzdGRpbnQuaDogc3RkaW50Xy5oCisJcm0gLWYgJEAtdCAkQAorCXsgZWNobyAnLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLyc7IFwKKwkgIHNlZCAtZSAncy9AJydIQVZFX1NURElOVF9IJydALyQoSEFWRV9TVERJTlRfSCkvZycgXAorCSAgICAgIC1lICdzfEAnJ0FCU09MVVRFX1NURElOVF9IJydAfCQoQUJTT0xVVEVfU1RESU5UX0gpfGcnIFwKKwkgICAgICAtZSAncy9AJydIQVZFX1NZU19UWVBFU19IJydALyQoSEFWRV9TWVNfVFlQRVNfSCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0hBVkVfSU5UVFlQRVNfSCcnQC8kKEhBVkVfSU5UVFlQRVNfSCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0hBVkVfU1lTX0lOVFRZUEVTX0gnJ0AvJChIQVZFX1NZU19JTlRUWVBFU19IKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnSEFWRV9TWVNfQklUWVBFU19IJydALyQoSEFWRV9TWVNfQklUWVBFU19IKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnSEFWRV9MT05HX0xPTkdfSU5UJydALyQoSEFWRV9MT05HX0xPTkdfSU5UKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnSEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UJydALyQoSEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnQklUU0laRU9GX1BUUkRJRkZfVCcnQC8kKEJJVFNJWkVPRl9QVFJESUZGX1QpL2cnIFwKKwkgICAgICAtZSAncy9AJydQVFJESUZGX1RfU1VGRklYJydALyQoUFRSRElGRl9UX1NVRkZJWCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0JJVFNJWkVPRl9TSUdfQVRPTUlDX1QnJ0AvJChCSVRTSVpFT0ZfU0lHX0FUT01JQ19UKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnSEFWRV9TSUdORURfU0lHX0FUT01JQ19UJydALyQoSEFWRV9TSUdORURfU0lHX0FUT01JQ19UKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnU0lHX0FUT01JQ19UX1NVRkZJWCcnQC8kKFNJR19BVE9NSUNfVF9TVUZGSVgpL2cnIFwKKwkgICAgICAtZSAncy9AJydCSVRTSVpFT0ZfU0laRV9UJydALyQoQklUU0laRU9GX1NJWkVfVCkvZycgXAorCSAgICAgIC1lICdzL0AnJ1NJWkVfVF9TVUZGSVgnJ0AvJChTSVpFX1RfU1VGRklYKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnQklUU0laRU9GX1dDSEFSX1QnJ0AvJChCSVRTSVpFT0ZfV0NIQVJfVCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0hBVkVfU0lHTkVEX1dDSEFSX1QnJ0AvJChIQVZFX1NJR05FRF9XQ0hBUl9UKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnV0NIQVJfVF9TVUZGSVgnJ0AvJChXQ0hBUl9UX1NVRkZJWCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0JJVFNJWkVPRl9XSU5UX1QnJ0AvJChCSVRTSVpFT0ZfV0lOVF9UKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnSEFWRV9TSUdORURfV0lOVF9UJydALyQoSEFWRV9TSUdORURfV0lOVF9UKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnV0lOVF9UX1NVRkZJWCcnQC8kKFdJTlRfVF9TVUZGSVgpL2cnIFwKKwkgICAgICA8ICQoc3JjZGlyKS9zdGRpbnRfLmg7IFwKKwl9ID4gJEAtdAorCW12ICRALXQgJEAKK01PU1RMWUNMRUFORklMRVMgKz0gc3RkaW50Lmggc3RkaW50LmgtdAorCitFWFRSQV9ESVNUICs9IHN0ZGludF8uaAorCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHN0ZGludAorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHN0ZGxpYgorCitCVUlMVF9TT1VSQ0VTICs9IHN0ZGxpYi5oCisKKyMgV2UgbmVlZCB0aGUgZm9sbG93aW5nIGluIG9yZGVyIHRvIGNyZWF0ZSA8c3RkbGliLmg+IHdoZW4gdGhlIHN5c3RlbQorIyBkb2Vzbid0IGhhdmUgb25lIHRoYXQgd29ya3Mgd2l0aCB0aGUgZ2l2ZW4gY29tcGlsZXIuCitzdGRsaWIuaDogc3RkbGliXy5oCisJcm0gLWYgJEAtdCAkQAorCXsgZWNobyAnLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLycgJiYgXAorCSAgc2VkIC1lICdzfEAnJ0FCU09MVVRFX1NURExJQl9IJydAfCQoQUJTT0xVVEVfU1RETElCX0gpfGcnIFwKKwkgICAgICAtZSAnc3xAJydHTlVMSUJfR0VUU1VCT1BUJydAfCQoR05VTElCX0dFVFNVQk9QVCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NS0RURU1QJydAfCQoR05VTElCX01LRFRFTVApfGcnIFwKKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUtTVEVNUCcnQHwkKEdOVUxJQl9NS1NURU1QKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9HRVRTVUJPUFQnJ0B8JChIQVZFX0dFVFNVQk9QVCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfTUtEVEVNUCcnQHwkKEhBVkVfTUtEVEVNUCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfTUtTVEVNUCcnQHwkKFJFUExBQ0VfTUtTVEVNUCl8ZycgXAorCSAgICAgIC1lICcvZGVmaW5pdGlvbiBvZiBHTF9MSU5LX1dBUk5JTkcvciAkKExJTktfV0FSTklOR19IKScgXAorCSAgICAgIDwgJChzcmNkaXIpL3N0ZGxpYl8uaDsgXAorCX0gPiAkQC10CisJbXYgJEAtdCAkQAorTU9TVExZQ0xFQU5GSUxFUyArPSBzdGRsaWIuaCBzdGRsaWIuaC10CisKK0VYVFJBX0RJU1QgKz0gc3RkbGliXy5oCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgc3RkbGliCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgc3RyY3NwbgorCisKK0VYVFJBX0RJU1QgKz0gc3RyY3Nwbi5jCisKK0VYVFJBX2xpYnBhcnRlZF9sYV9TT1VSQ0VTICs9IHN0cmNzcG4uYworCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHN0cmNzcG4KKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSBzdHJpbmcKKworQlVJTFRfU09VUkNFUyArPSBzdHJpbmcuaAorCisjIFdlIG5lZWQgdGhlIGZvbGxvd2luZyBpbiBvcmRlciB0byBjcmVhdGUgPHN0cmluZy5oPiB3aGVuIHRoZSBzeXN0ZW0KKyMgZG9lc24ndCBoYXZlIG9uZSB0aGF0IHdvcmtzIHdpdGggdGhlIGdpdmVuIGNvbXBpbGVyLgorc3RyaW5nLmg6IHN0cmluZ18uaAorCXJtIC1mICRALXQgJEAKKwl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nICYmIFwKKwkgIHNlZCAtZSAnc3xAJydBQlNPTFVURV9TVFJJTkdfSCcnQHwkKEFCU09MVVRFX1NUUklOR19IKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnR05VTElCX01CU0xFTicnQHwkKEdOVUxJQl9NQlNMRU4pfGcnIFwKKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUJTQ0hSJydAfCQoR05VTElCX01CU0NIUil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NQlNSQ0hSJydAfCQoR05VTElCX01CU1JDSFIpfGcnIFwKKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUJTU1RSJydAfCQoR05VTElCX01CU1NUUil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NQlNDQVNFQ01QJydAfCQoR05VTElCX01CU0NBU0VDTVApfGcnIFwKKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUJTTkNBU0VDTVAnJ0B8JChHTlVMSUJfTUJTTkNBU0VDTVApfGcnIFwKKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUJTUENBU0VDTVAnJ0B8JChHTlVMSUJfTUJTUENBU0VDTVApfGcnIFwKKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUJTQ0FTRVNUUicnQHwkKEdOVUxJQl9NQlNDQVNFU1RSKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnR05VTElCX01CU0NTUE4nJ0B8JChHTlVMSUJfTUJTQ1NQTil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NQlNQQlJLJydAfCQoR05VTElCX01CU1BCUkspfGcnIFwKKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUJTU1BOJydAfCQoR05VTElCX01CU1NQTil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NQlNTRVAnJ0B8JChHTlVMSUJfTUJTU0VQKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnR05VTElCX01CU1RPS19SJydAfCQoR05VTElCX01CU1RPS19SKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnR05VTElCX01FTU1FTScnQHwkKEdOVUxJQl9NRU1NRU0pfGcnIFwKKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUVNUENQWScnQHwkKEdOVUxJQl9NRU1QQ1BZKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnR05VTElCX01FTVJDSFInJ0B8JChHTlVMSUJfTUVNUkNIUil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFBDUFknJ0B8JChHTlVMSUJfU1RQQ1BZKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnR05VTElCX1NUUE5DUFknJ0B8JChHTlVMSUJfU1RQTkNQWSl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFJDSFJOVUwnJ0B8JChHTlVMSUJfU1RSQ0hSTlVMKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnR05VTElCX1NUUkRVUCcnQHwkKEdOVUxJQl9TVFJEVVApfGcnIFwKKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RSTkRVUCcnQHwkKEdOVUxJQl9TVFJORFVQKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnR05VTElCX1NUUk5MRU4nJ0B8JChHTlVMSUJfU1RSTkxFTil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFJQQlJLJydAfCQoR05VTElCX1NUUlBCUkspfGcnIFwKKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RSU0VQJydAfCQoR05VTElCX1NUUlNFUCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFJDQVNFU1RSJydAfCQoR05VTElCX1NUUkNBU0VTVFIpfGcnIFwKKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RSVE9LX1InJ0B8JChHTlVMSUJfU1RSVE9LX1IpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfTUVNTUVNJydAfCQoSEFWRV9ERUNMX01FTU1FTSl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfTUVNUENQWScnQHwkKEhBVkVfTUVNUENQWSl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9NRU1SQ0hSJydAfCQoSEFWRV9ERUNMX01FTVJDSFIpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1NUUENQWScnQHwkKEhBVkVfU1RQQ1BZKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9TVFBOQ1BZJydAfCQoSEFWRV9TVFBOQ1BZKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9TVFJDQVNFQ01QJydAfCQoSEFWRV9TVFJDQVNFQ01QKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX1NUUk5DQVNFQ01QJydAfCQoSEFWRV9ERUNMX1NUUk5DQVNFQ01QKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9TVFJDSFJOVUwnJ0B8JChIQVZFX1NUUkNIUk5VTCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9TVFJEVVAnJ0B8JChIQVZFX0RFQ0xfU1RSRFVQKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9TVFJORFVQJydAfCQoSEFWRV9TVFJORFVQKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX1NUUk5EVVAnJ0B8JChIQVZFX0RFQ0xfU1RSTkRVUCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9TVFJOTEVOJydAfCQoSEFWRV9ERUNMX1NUUk5MRU4pfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1NUUlBCUksnJ0B8JChIQVZFX1NUUlBCUkspfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1NUUlNFUCcnQHwkKEhBVkVfU1RSU0VQKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9TVFJDQVNFU1RSJydAfCQoSEFWRV9TVFJDQVNFU1RSKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX1NUUlRPS19SJydAfCQoSEFWRV9ERUNMX1NUUlRPS19SKXxnJyBcCisJICAgICAgLWUgJy9kZWZpbml0aW9uIG9mIEdMX0xJTktfV0FSTklORy9yICQoTElOS19XQVJOSU5HX0gpJyBcCisJICAgICAgPCAkKHNyY2Rpcikvc3RyaW5nXy5oOyBcCisJfSA+ICRALXQKKwltdiAkQC10ICRACitNT1NUTFlDTEVBTkZJTEVTICs9IHN0cmluZy5oIHN0cmluZy5oLXQKKworRVhUUkFfRElTVCArPSBzdHJpbmdfLmgKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBzdHJpbmcKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSBzdHJuZHVwCisKKworRVhUUkFfRElTVCArPSBzdHJuZHVwLmMKKworRVhUUkFfbGlicGFydGVkX2xhX1NPVVJDRVMgKz0gc3RybmR1cC5jCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgc3RybmR1cAorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHN0cm5sZW4KKworCitFWFRSQV9ESVNUICs9IHN0cm5sZW4uYworCitFWFRSQV9saWJwYXJ0ZWRfbGFfU09VUkNFUyArPSBzdHJubGVuLmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBzdHJubGVuCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgc3RydG9kCisKK0xJQlMgKz0gJChQT1dfTElCKQorCitFWFRSQV9ESVNUICs9IHN0cnRvZC5jCisKK0VYVFJBX2xpYnBhcnRlZF9sYV9TT1VSQ0VTICs9IHN0cnRvZC5jCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgc3RydG9kCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgc3RydG9sCisKKworRVhUUkFfRElTVCArPSBzdHJ0b2wuYworCitFWFRSQV9saWJwYXJ0ZWRfbGFfU09VUkNFUyArPSBzdHJ0b2wuYworCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHN0cnRvbAorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHVuaXN0ZAorCitCVUlMVF9TT1VSQ0VTICs9IHVuaXN0ZC5oCisKKyMgV2UgbmVlZCB0aGUgZm9sbG93aW5nIGluIG9yZGVyIHRvIGNyZWF0ZSBhbiBlbXB0eSBwbGFjZWhvbGRlciBmb3IKKyMgPHVuaXN0ZC5oPiB3aGVuIHRoZSBzeXN0ZW0gZG9lc24ndCBoYXZlIG9uZS4KK3VuaXN0ZC5oOiB1bmlzdGRfLmgKKwlybSAtZiAkQC10ICRACisJeyBlY2hvICcvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovJzsgXAorCSAgc2VkIC1lICdzfEAnJ0hBVkVfVU5JU1REX0gnJ0B8JChIQVZFX1VOSVNURF9IKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnQUJTT0xVVEVfVU5JU1REX0gnJ0B8JChBQlNPTFVURV9VTklTVERfSCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9DSE9XTicnQHwkKEdOVUxJQl9DSE9XTil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9EVVAyJydAfCQoR05VTElCX0RVUDIpfGcnIFwKKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRkNIRElSJydAfCQoR05VTElCX0ZDSERJUil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GVFJVTkNBVEUnJ0B8JChHTlVMSUJfRlRSVU5DQVRFKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnR05VTElCX0dFVENXRCcnQHwkKEdOVUxJQl9HRVRDV0QpfGcnIFwKKwkgICAgICAtZSAnc3xAJydHTlVMSUJfR0VUTE9HSU5fUicnQHwkKEdOVUxJQl9HRVRMT0dJTl9SKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnR05VTElCX1JFQURMSU5LJydAfCQoR05VTElCX1JFQURMSU5LKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnR05VTElCX1NMRUVQJydAfCQoR05VTElCX1NMRUVQKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9EVVAyJydAfCQoSEFWRV9EVVAyKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9GVFJVTkNBVEUnJ0B8JChIQVZFX0ZUUlVOQ0FURSl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfUkVBRExJTksnJ0B8JChIQVZFX1JFQURMSU5LKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9TTEVFUCcnQHwkKEhBVkVfU0xFRVApfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfR0VUTE9HSU5fUicnQHwkKEhBVkVfREVDTF9HRVRMT0dJTl9SKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9DSE9XTicnQHwkKFJFUExBQ0VfQ0hPV04pfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0ZDSERJUicnQHwkKFJFUExBQ0VfRkNIRElSKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9HRVRDV0QnJ0B8JChSRVBMQUNFX0dFVENXRCl8ZycgXAorCSAgICAgIDwgJChzcmNkaXIpL3VuaXN0ZF8uaDsgXAorCX0gPiAkQC10CisJbXYgJEAtdCAkQAorTU9TVExZQ0xFQU5GSUxFUyArPSB1bmlzdGQuaCB1bmlzdGQuaC10CisKK0VYVFJBX0RJU1QgKz0gdW5pc3RkXy5oCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgdW5pc3RkCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgdXRpbWUKKworCitFWFRSQV9ESVNUICs9IHV0aW1lLmMKKworRVhUUkFfbGlicGFydGVkX2xhX1NPVVJDRVMgKz0gdXRpbWUuYworCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHV0aW1lCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgdmVyc2lvbi1ldGMKKworbGlicGFydGVkX2xhX1NPVVJDRVMgKz0gdmVyc2lvbi1ldGMuaCB2ZXJzaW9uLWV0Yy5jCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgdmVyc2lvbi1ldGMKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSB2ZXJzaW9uLWV0Yy1mc2YKKworbGlicGFydGVkX2xhX1NPVVJDRVMgKz0gdmVyc2lvbi1ldGMtZnNmLmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSB2ZXJzaW9uLWV0Yy1mc2YKKworIyMgYmVnaW4gZ251bGliIG1vZHVsZSB3Y2hhcgorCitCVUlMVF9TT1VSQ0VTICs9ICQoV0NIQVJfSCkKKworIyBXZSBuZWVkIHRoZSBmb2xsb3dpbmcgaW4gb3JkZXIgdG8gY3JlYXRlIDx3Y2hhci5oPiB3aGVuIHRoZSBzeXN0ZW0KKyMgdmVyc2lvbiBkb2VzIG5vdCB3b3JrIHN0YW5kYWxvbmUuCit3Y2hhci5oOiB3Y2hhcl8uaAorCXJtIC1mICRALXQgJEAKKwl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nOyBcCisJICBzZWQgLWUgJ3N8QCcnQUJTT0xVVEVfV0NIQVJfSCcnQHwkKEFCU09MVVRFX1dDSEFSX0gpfGcnIFwKKwkgICAgPCAkKHNyY2Rpcikvd2NoYXJfLmg7IFwKKwl9ID4gJEAtdAorCW12ICRALXQgJEAKK01PU1RMWUNMRUFORklMRVMgKz0gd2NoYXIuaCB3Y2hhci5oLXQKKworRVhUUkFfRElTVCArPSB3Y2hhcl8uaAorCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHdjaGFyCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgd2N0eXBlCisKK0JVSUxUX1NPVVJDRVMgKz0gJChXQ1RZUEVfSCkKKworIyBXZSBuZWVkIHRoZSBmb2xsb3dpbmcgaW4gb3JkZXIgdG8gY3JlYXRlIDx3Y3R5cGUuaD4gd2hlbiB0aGUgc3lzdGVtCisjIGRvZXNuJ3QgaGF2ZSBvbmUgdGhhdCB3b3JrcyB3aXRoIHRoZSBnaXZlbiBjb21waWxlci4KK3djdHlwZS5oOiB3Y3R5cGVfLmgKKwlybSAtZiAkQC10ICRACisJeyBlY2hvICcvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovJzsgXAorCSAgc2VkIC1lICdzL0AnJ0hBVkVfV0NUWVBFX0gnJ0AvJChIQVZFX1dDVFlQRV9IKS9nJyBcCisJICAgICAgLWUgJ3N8QCcnQUJTT0xVVEVfV0NUWVBFX0gnJ0B8JChBQlNPTFVURV9XQ1RZUEVfSCl8ZycgXAorCSAgICAgIC1lICdzL0AnJ0hBVkVfSVNXQ05UUkwnJ0AvJChIQVZFX0lTV0NOVFJMKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnSEFWRV9XSU5UX1QnJ0AvJChIQVZFX1dJTlRfVCkvZycgXAorCSAgICAgIDwgJChzcmNkaXIpL3djdHlwZV8uaDsgXAorCX0gPiAkQC10CisJbXYgJEAtdCAkQAorTU9TVExZQ0xFQU5GSUxFUyArPSB3Y3R5cGUuaCB3Y3R5cGUuaC10CisKK0VYVFJBX0RJU1QgKz0gd2N0eXBlXy5oCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgd2N0eXBlCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgeGFsbG9jCisKKworRVhUUkFfRElTVCArPSB4YWxsb2MuaCB4bWFsbG9jLmMKKworRVhUUkFfbGlicGFydGVkX2xhX1NPVVJDRVMgKz0geG1hbGxvYy5jCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgeGFsbG9jCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgeGFsbG9jLWRpZQorCitsaWJwYXJ0ZWRfbGFfU09VUkNFUyArPSB4YWxsb2MtZGllLmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSB4YWxsb2MtZGllCisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgeHN0cm5kdXAKKworbGlicGFydGVkX2xhX1NPVVJDRVMgKz0geHN0cm5kdXAuaCB4c3RybmR1cC5jCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgeHN0cm5kdXAKKworCittb3N0bHljbGVhbi1sb2NhbDogbW9zdGx5Y2xlYW4tZ2VuZXJpYworCUBmb3IgZGlyIGluICcnICQoTU9TVExZQ0xFQU5ESVJTKTsgZG8gXAorCSAgaWYgdGVzdCAtbiAiJCRkaXIiICYmIHRlc3QgLWQgJCRkaXI7IHRoZW4gXAorCSAgICBlY2hvICJybWRpciAkJGRpciI7IHJtZGlyICQkZGlyOyBcCisJICBmaTsgXAorCWRvbmUKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWIvaW50dHlwZXNfLmggYi9wYXJ0ZWQtMS44LjcvbGliL2ludHR5cGVzXy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjZjk1YjAKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGliL2ludHR5cGVzXy5oCkBAIC0wLDAgKzEsMTA5OSBAQAorLyogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBXcml0dGVuIGJ5IFBhdWwgRWdnZXJ0LCBCcnVubyBIYWlibGUsIERlcmVrIFByaWNlLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgZ251bGliLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisKKy8qIEluY2x1ZGUgdGhlIG9yaWdpbmFsIDxpbnR0eXBlcy5oPiBpZiBpdCBleGlzdHMsIGFuZCBpZiB0aGlzIGZpbGUKKyAgIGhhcyBub3QgYmVlbiBpbmNsdWRlZCB5ZXQgb3IgaWYgdGhpcyBmaWxlIGluY2x1ZGVzIGdudWxpYiBzdGRpbnQuaAorICAgd2hpY2ggaW4gdHVybiBpbmNsdWRlcyB0aGlzIGZpbGUuICAqLworI2lmICEgZGVmaW5lZCBJTlRUWVBFU19IIHx8IGRlZmluZWQgX0dMX0pVU1RfSU5DTFVERV9BQlNPTFVURV9JTlRUWVBFU19ICisjIGlmIEBIQVZFX0lOVFRZUEVTX0hACisjICBpZiBkZWZpbmVkIF9fREVDQyAmJiBfX0RFQ0NfVkVSID49IDYwMDAwMDAwCisjICAgaW5jbHVkZV9uZXh0IDxpbnR0eXBlcy5oPgorIyAgZWxzZQorIyAgIGluY2x1ZGUgQEFCU09MVVRFX0lOVFRZUEVTX0hACisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmCisKKyNpZiAhIGRlZmluZWQgSU5UVFlQRVNfSCAmJiAhIGRlZmluZWQgX0dMX0pVU1RfSU5DTFVERV9BQlNPTFVURV9JTlRUWVBFU19ICisjZGVmaW5lIElOVFRZUEVTX0gKKworLyoKKyAqIElTTyBDIDk5IDxpbnR0eXBlcy5oPiBmb3IgcGxhdGZvcm1zIHRoYXQgbGFjayBpdC4KKyAqIDxodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvc3VzdjN4YmQvaW50dHlwZXMuaC5odG1sPgorICovCisKKy8qIEluY2x1ZGUgPHN0ZGludC5oPiBvciB0aGUgZ251bGliIHJlcGxhY2VtZW50LiAgKi8KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKy8qIEdldCBDSEFSX0JJVC4gICovCisjaW5jbHVkZSA8bGltaXRzLmg+CisKKyNpZiAhKElOVF9NSU4gPT0gSU5UMzJfTUlOICYmIElOVF9NQVggPT0gSU5UMzJfTUFYKQorIyBlcnJvciAiVGhpcyBmaWxlIGFzc3VtZXMgdGhhdCAnaW50JyBoYXMgZXhhY3RseSAzMiBiaXRzLiBQbGVhc2UgcmVwb3J0IHlvdXIgcGxhdGZvcm0gYW5kIGNvbXBpbGVyIHRvIDxidWctZ251bGliQGdudS5vcmc+LiIKKyNlbmRpZgorCisvKiBUaGUgZGVmaW5pdGlvbiBvZiBHTF9MSU5LX1dBUk5JTkcgaXMgY29waWVkIGhlcmUuICAqLworCisvKiA3LjguMSBNYWNyb3MgZm9yIGZvcm1hdCBzcGVjaWZpZXJzICovCisKKyNpZiAhIGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfX1NURENfRk9STUFUX01BQ1JPUworCisjIGlmIGRlZmluZWQgX1ROU19SX1RBUkdFVAorICAgLyogVGFuZGVtIE5vblN0b3AgUiBzZXJpZXMgYW5kIGNvbXBhdGlibGUgcGxhdGZvcm1zIHJlbGVhc2VkIGJlZm9yZQorICAgICAgSnVseSAyMDA1IHN1cHBvcnQgJUxkIGJ1dCBub3QgJWxsZC4gICovCisjICBkZWZpbmUgX0xPTkdfTE9OR19GT1JNQVRfUFJFRklYICJMIgorIyBlbHNlCisjICBkZWZpbmUgX0xPTkdfTE9OR19GT1JNQVRfUFJFRklYICJsbCIKKyMgZW5kaWYKKworIyBpZiAhZGVmaW5lZCBQUklkOCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBQUklkOAorIyAgaWZkZWYgSU5UOF9NQVgKKyMgICBkZWZpbmUgUFJJZDggImQiCisjICBlbmRpZgorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBQUklpOCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBQUklpOAorIyAgaWZkZWYgSU5UOF9NQVgKKyMgICBkZWZpbmUgUFJJaTggImkiCisjICBlbmRpZgorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBQUklvOCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBQUklvOAorIyAgaWZkZWYgVUlOVDhfTUFYCisjICAgZGVmaW5lIFBSSW84ICJvIgorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgUFJJdTggfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgUFJJdTgKKyMgIGlmZGVmIFVJTlQ4X01BWAorIyAgIGRlZmluZSBQUkl1OCAidSIKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFBSSXg4IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgIHVuZGVmIFBSSXg4CisjICBpZmRlZiBVSU5UOF9NQVgKKyMgICBkZWZpbmUgUFJJeDggIngiCisjICBlbmRpZgorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBQUklYOCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBQUklYOAorIyAgaWZkZWYgVUlOVDhfTUFYCisjICAgZGVmaW5lIFBSSVg4ICJYIgorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgUFJJZDE2IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgIHVuZGVmIFBSSWQxNgorIyAgaWZkZWYgSU5UMTZfTUFYCisjICAgZGVmaW5lIFBSSWQxNiAiZCIKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFBSSWkxNiB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBQUklpMTYKKyMgIGlmZGVmIElOVDE2X01BWAorIyAgIGRlZmluZSBQUklpMTYgImkiCisjICBlbmRpZgorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBQUklvMTYgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgUFJJbzE2CisjICBpZmRlZiBVSU5UMTZfTUFYCisjICAgZGVmaW5lIFBSSW8xNiAibyIKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFBSSXUxNiB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBQUkl1MTYKKyMgIGlmZGVmIFVJTlQxNl9NQVgKKyMgICBkZWZpbmUgUFJJdTE2ICJ1IgorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgUFJJeDE2IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgIHVuZGVmIFBSSXgxNgorIyAgaWZkZWYgVUlOVDE2X01BWAorIyAgIGRlZmluZSBQUkl4MTYgIngiCisjICBlbmRpZgorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBQUklYMTYgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgUFJJWDE2CisjICBpZmRlZiBVSU5UMTZfTUFYCisjICAgZGVmaW5lIFBSSVgxNiAiWCIKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFBSSWQzMiB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBQUklkMzIKKyMgIGlmZGVmIElOVDMyX01BWAorIyAgIGRlZmluZSBQUklkMzIgImQiCisjICBlbmRpZgorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBQUklpMzIgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgUFJJaTMyCisjICBpZmRlZiBJTlQzMl9NQVgKKyMgICBkZWZpbmUgUFJJaTMyICJpIgorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgUFJJbzMyIHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgIHVuZGVmIFBSSW8zMgorIyAgaWZkZWYgVUlOVDMyX01BWAorIyAgIGRlZmluZSBQUklvMzIgIm8iCisjICBlbmRpZgorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBQUkl1MzIgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgUFJJdTMyCisjICBpZmRlZiBVSU5UMzJfTUFYCisjICAgZGVmaW5lIFBSSXUzMiAidSIKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFBSSXgzMiB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBQUkl4MzIKKyMgIGlmZGVmIFVJTlQzMl9NQVgKKyMgICBkZWZpbmUgUFJJeDMyICJ4IgorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgUFJJWDMyIHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgIHVuZGVmIFBSSVgzMgorIyAgaWZkZWYgVUlOVDMyX01BWAorIyAgIGRlZmluZSBQUklYMzIgIlgiCisjICBlbmRpZgorIyBlbmRpZgorIyBpZmRlZiBJTlQ2NF9NQVgKKyMgIGlmIElOVDY0X01BWCA9PSBMT05HX01BWAorIyAgIGRlZmluZSBfUFJJNjRfUFJFRklYICJsIgorIyAgZWxpZiBkZWZpbmVkIF9NU0NfVkVSIHx8IGRlZmluZWQgX19NSU5HVzMyX18KKyMgICBkZWZpbmUgX1BSSTY0X1BSRUZJWCAiSTY0IgorIyAgZWxpZiBASEFWRV9MT05HX0xPTkdfSU5UQCAmJiBMT05HX01BWCA+PiAzMCA9PSAxCisjICAgZGVmaW5lIF9QUkk2NF9QUkVGSVggX0xPTkdfTE9OR19GT1JNQVRfUFJFRklYCisjICBlbmRpZgorIyAgaWYgIWRlZmluZWQgUFJJZDY0IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgICB1bmRlZiBQUklkNjQKKyMgICBkZWZpbmUgUFJJZDY0IF9QUkk2NF9QUkVGSVggImQiCisjICBlbmRpZgorIyAgaWYgIWRlZmluZWQgUFJJaTY0IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgICB1bmRlZiBQUklpNjQKKyMgICBkZWZpbmUgUFJJaTY0IF9QUkk2NF9QUkVGSVggImkiCisjICBlbmRpZgorIyBlbmRpZgorIyBpZmRlZiBVSU5UNjRfTUFYCisjICBpZiBVSU5UNjRfTUFYID09IFVMT05HX01BWAorIyAgIGRlZmluZSBfUFJJdTY0X1BSRUZJWCAibCIKKyMgIGVsaWYgZGVmaW5lZCBfTVNDX1ZFUiB8fCBkZWZpbmVkIF9fTUlOR1czMl9fCisjICAgZGVmaW5lIF9QUkl1NjRfUFJFRklYICJJNjQiCisjICBlbGlmIEBIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlRAICYmIFVMT05HX01BWCA+PiAzMSA9PSAxCisjICAgZGVmaW5lIF9QUkl1NjRfUFJFRklYIF9MT05HX0xPTkdfRk9STUFUX1BSRUZJWAorIyAgZW5kaWYKKyMgIGlmICFkZWZpbmVkIFBSSW82NCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICAgdW5kZWYgUFJJbzY0CisjICAgZGVmaW5lIFBSSW82NCBfUFJJdTY0X1BSRUZJWCAibyIKKyMgIGVuZGlmCisjICBpZiAhZGVmaW5lZCBQUkl1NjQgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgIHVuZGVmIFBSSXU2NAorIyAgIGRlZmluZSBQUkl1NjQgX1BSSXU2NF9QUkVGSVggInUiCisjICBlbmRpZgorIyAgaWYgIWRlZmluZWQgUFJJeDY0IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgICB1bmRlZiBQUkl4NjQKKyMgICBkZWZpbmUgUFJJeDY0IF9QUkl1NjRfUFJFRklYICJ4IgorIyAgZW5kaWYKKyMgIGlmICFkZWZpbmVkIFBSSVg2NCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICAgdW5kZWYgUFJJWDY0CisjICAgZGVmaW5lIFBSSVg2NCBfUFJJdTY0X1BSRUZJWCAiWCIKKyMgIGVuZGlmCisjIGVuZGlmCisKKyMgaWYgIWRlZmluZWQgUFJJZExFQVNUOCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBQUklkTEVBU1Q4CisjICBkZWZpbmUgUFJJZExFQVNUOCAiZCIKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgUFJJaUxFQVNUOCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBQUklpTEVBU1Q4CisjICBkZWZpbmUgUFJJaUxFQVNUOCAiaSIKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgUFJJb0xFQVNUOCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBQUklvTEVBU1Q4CisjICBkZWZpbmUgUFJJb0xFQVNUOCAibyIKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgUFJJdUxFQVNUOCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBQUkl1TEVBU1Q4CisjICBkZWZpbmUgUFJJdUxFQVNUOCAidSIKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgUFJJeExFQVNUOCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBQUkl4TEVBU1Q4CisjICBkZWZpbmUgUFJJeExFQVNUOCAieCIKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgUFJJWExFQVNUOCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBQUklYTEVBU1Q4CisjICBkZWZpbmUgUFJJWExFQVNUOCAiWCIKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgUFJJZExFQVNUMTYgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgUFJJZExFQVNUMTYKKyMgIGRlZmluZSBQUklkTEVBU1QxNiAiZCIKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgUFJJaUxFQVNUMTYgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgUFJJaUxFQVNUMTYKKyMgIGRlZmluZSBQUklpTEVBU1QxNiAiaSIKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgUFJJb0xFQVNUMTYgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgUFJJb0xFQVNUMTYKKyMgIGRlZmluZSBQUklvTEVBU1QxNiAibyIKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgUFJJdUxFQVNUMTYgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgUFJJdUxFQVNUMTYKKyMgIGRlZmluZSBQUkl1TEVBU1QxNiAidSIKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgUFJJeExFQVNUMTYgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgUFJJeExFQVNUMTYKKyMgIGRlZmluZSBQUkl4TEVBU1QxNiAieCIKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgUFJJWExFQVNUMTYgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgUFJJWExFQVNUMTYKKyMgIGRlZmluZSBQUklYTEVBU1QxNiAiWCIKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgUFJJZExFQVNUMzIgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgUFJJZExFQVNUMzIKKyMgIGRlZmluZSBQUklkTEVBU1QzMiAiZCIKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgUFJJaUxFQVNUMzIgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgUFJJaUxFQVNUMzIKKyMgIGRlZmluZSBQUklpTEVBU1QzMiAiaSIKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgUFJJb0xFQVNUMzIgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgUFJJb0xFQVNUMzIKKyMgIGRlZmluZSBQUklvTEVBU1QzMiAibyIKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgUFJJdUxFQVNUMzIgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgUFJJdUxFQVNUMzIKKyMgIGRlZmluZSBQUkl1TEVBU1QzMiAidSIKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgUFJJeExFQVNUMzIgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgUFJJeExFQVNUMzIKKyMgIGRlZmluZSBQUkl4TEVBU1QzMiAieCIKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgUFJJWExFQVNUMzIgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgUFJJWExFQVNUMzIKKyMgIGRlZmluZSBQUklYTEVBU1QzMiAiWCIKKyMgZW5kaWYKKyMgaWZkZWYgSU5UNjRfTUFYCisjICBpZiAhZGVmaW5lZCBQUklkTEVBU1Q2NCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICAgdW5kZWYgUFJJZExFQVNUNjQKKyMgICBkZWZpbmUgUFJJZExFQVNUNjQgUFJJZDY0CisjICBlbmRpZgorIyAgaWYgIWRlZmluZWQgUFJJaUxFQVNUNjQgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgIHVuZGVmIFBSSWlMRUFTVDY0CisjICAgZGVmaW5lIFBSSWlMRUFTVDY0IFBSSWk2NAorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWZkZWYgVUlOVDY0X01BWAorIyAgaWYgIWRlZmluZWQgUFJJb0xFQVNUNjQgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgIHVuZGVmIFBSSW9MRUFTVDY0CisjICAgZGVmaW5lIFBSSW9MRUFTVDY0IFBSSW82NAorIyAgZW5kaWYKKyMgIGlmICFkZWZpbmVkIFBSSXVMRUFTVDY0IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgICB1bmRlZiBQUkl1TEVBU1Q2NAorIyAgIGRlZmluZSBQUkl1TEVBU1Q2NCBQUkl1NjQKKyMgIGVuZGlmCisjICBpZiAhZGVmaW5lZCBQUkl4TEVBU1Q2NCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICAgdW5kZWYgUFJJeExFQVNUNjQKKyMgICBkZWZpbmUgUFJJeExFQVNUNjQgUFJJeDY0CisjICBlbmRpZgorIyAgaWYgIWRlZmluZWQgUFJJWExFQVNUNjQgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgIHVuZGVmIFBSSVhMRUFTVDY0CisjICAgZGVmaW5lIFBSSVhMRUFTVDY0IFBSSVg2NAorIyAgZW5kaWYKKyMgZW5kaWYKKworIyBpZiAhZGVmaW5lZCBQUklkRkFTVDggfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgUFJJZEZBU1Q4CisjICBpZiBJTlRfRkFTVDhfTUFYID4gSU5UMzJfTUFYCisjICAgZGVmaW5lIFBSSWRGQVNUOCBQUklkNjQKKyMgIGVsc2UKKyMgICBkZWZpbmUgUFJJZEZBU1Q4ICJkIgorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgUFJJaUZBU1Q4IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgIHVuZGVmIFBSSWlGQVNUOAorIyAgaWYgSU5UX0ZBU1Q4X01BWCA+IElOVDMyX01BWAorIyAgIGRlZmluZSBQUklpRkFTVDggUFJJaTY0CisjICBlbHNlCisjICAgZGVmaW5lIFBSSWlGQVNUOCAiaSIKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFBSSW9GQVNUOCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBQUklvRkFTVDgKKyMgIGlmIFVJTlRfRkFTVDhfTUFYID4gVUlOVDMyX01BWAorIyAgIGRlZmluZSBQUklvRkFTVDggUFJJbzY0CisjICBlbHNlCisjICAgZGVmaW5lIFBSSW9GQVNUOCAibyIKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFBSSXVGQVNUOCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBQUkl1RkFTVDgKKyMgIGlmIFVJTlRfRkFTVDhfTUFYID4gVUlOVDMyX01BWAorIyAgIGRlZmluZSBQUkl1RkFTVDggUFJJdTY0CisjICBlbHNlCisjICAgZGVmaW5lIFBSSXVGQVNUOCAidSIKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFBSSXhGQVNUOCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBQUkl4RkFTVDgKKyMgIGlmIFVJTlRfRkFTVDhfTUFYID4gVUlOVDMyX01BWAorIyAgIGRlZmluZSBQUkl4RkFTVDggUFJJeDY0CisjICBlbHNlCisjICAgZGVmaW5lIFBSSXhGQVNUOCAieCIKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFBSSVhGQVNUOCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBQUklYRkFTVDgKKyMgIGlmIFVJTlRfRkFTVDhfTUFYID4gVUlOVDMyX01BWAorIyAgIGRlZmluZSBQUklYRkFTVDggUFJJWDY0CisjICBlbHNlCisjICAgZGVmaW5lIFBSSVhGQVNUOCAiWCIKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFBSSWRGQVNUMTYgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgUFJJZEZBU1QxNgorIyAgaWYgSU5UX0ZBU1QxNl9NQVggPiBJTlQzMl9NQVgKKyMgICBkZWZpbmUgUFJJZEZBU1QxNiBQUklkNjQKKyMgIGVsc2UKKyMgICBkZWZpbmUgUFJJZEZBU1QxNiAiZCIKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFBSSWlGQVNUMTYgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgUFJJaUZBU1QxNgorIyAgaWYgSU5UX0ZBU1QxNl9NQVggPiBJTlQzMl9NQVgKKyMgICBkZWZpbmUgUFJJaUZBU1QxNiBQUklpNjQKKyMgIGVsc2UKKyMgICBkZWZpbmUgUFJJaUZBU1QxNiAiaSIKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFBSSW9GQVNUMTYgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgUFJJb0ZBU1QxNgorIyAgaWYgVUlOVF9GQVNUMTZfTUFYID4gVUlOVDMyX01BWAorIyAgIGRlZmluZSBQUklvRkFTVDE2IFBSSW82NAorIyAgZWxzZQorIyAgIGRlZmluZSBQUklvRkFTVDE2ICJvIgorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgUFJJdUZBU1QxNiB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBQUkl1RkFTVDE2CisjICBpZiBVSU5UX0ZBU1QxNl9NQVggPiBVSU5UMzJfTUFYCisjICAgZGVmaW5lIFBSSXVGQVNUMTYgUFJJdTY0CisjICBlbHNlCisjICAgZGVmaW5lIFBSSXVGQVNUMTYgInUiCisjICBlbmRpZgorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBQUkl4RkFTVDE2IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgIHVuZGVmIFBSSXhGQVNUMTYKKyMgIGlmIFVJTlRfRkFTVDE2X01BWCA+IFVJTlQzMl9NQVgKKyMgICBkZWZpbmUgUFJJeEZBU1QxNiBQUkl4NjQKKyMgIGVsc2UKKyMgICBkZWZpbmUgUFJJeEZBU1QxNiAieCIKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFBSSVhGQVNUMTYgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgUFJJWEZBU1QxNgorIyAgaWYgVUlOVF9GQVNUMTZfTUFYID4gVUlOVDMyX01BWAorIyAgIGRlZmluZSBQUklYRkFTVDE2IFBSSVg2NAorIyAgZWxzZQorIyAgIGRlZmluZSBQUklYRkFTVDE2ICJYIgorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgUFJJZEZBU1QzMiB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBQUklkRkFTVDMyCisjICBpZiBJTlRfRkFTVDMyX01BWCA+IElOVDMyX01BWAorIyAgIGRlZmluZSBQUklkRkFTVDMyIFBSSWQ2NAorIyAgZWxzZQorIyAgIGRlZmluZSBQUklkRkFTVDMyICJkIgorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgUFJJaUZBU1QzMiB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBQUklpRkFTVDMyCisjICBpZiBJTlRfRkFTVDMyX01BWCA+IElOVDMyX01BWAorIyAgIGRlZmluZSBQUklpRkFTVDMyIFBSSWk2NAorIyAgZWxzZQorIyAgIGRlZmluZSBQUklpRkFTVDMyICJpIgorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgUFJJb0ZBU1QzMiB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBQUklvRkFTVDMyCisjICBpZiBVSU5UX0ZBU1QzMl9NQVggPiBVSU5UMzJfTUFYCisjICAgZGVmaW5lIFBSSW9GQVNUMzIgUFJJbzY0CisjICBlbHNlCisjICAgZGVmaW5lIFBSSW9GQVNUMzIgIm8iCisjICBlbmRpZgorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBQUkl1RkFTVDMyIHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgIHVuZGVmIFBSSXVGQVNUMzIKKyMgIGlmIFVJTlRfRkFTVDMyX01BWCA+IFVJTlQzMl9NQVgKKyMgICBkZWZpbmUgUFJJdUZBU1QzMiBQUkl1NjQKKyMgIGVsc2UKKyMgICBkZWZpbmUgUFJJdUZBU1QzMiAidSIKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFBSSXhGQVNUMzIgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgUFJJeEZBU1QzMgorIyAgaWYgVUlOVF9GQVNUMzJfTUFYID4gVUlOVDMyX01BWAorIyAgIGRlZmluZSBQUkl4RkFTVDMyIFBSSXg2NAorIyAgZWxzZQorIyAgIGRlZmluZSBQUkl4RkFTVDMyICJ4IgorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgUFJJWEZBU1QzMiB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBQUklYRkFTVDMyCisjICBpZiBVSU5UX0ZBU1QzMl9NQVggPiBVSU5UMzJfTUFYCisjICAgZGVmaW5lIFBSSVhGQVNUMzIgUFJJWDY0CisjICBlbHNlCisjICAgZGVmaW5lIFBSSVhGQVNUMzIgIlgiCisjICBlbmRpZgorIyBlbmRpZgorIyBpZmRlZiBJTlQ2NF9NQVgKKyMgIGlmICFkZWZpbmVkIFBSSWRGQVNUNjQgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgIHVuZGVmIFBSSWRGQVNUNjQKKyMgICBkZWZpbmUgUFJJZEZBU1Q2NCBQUklkNjQKKyMgIGVuZGlmCisjICBpZiAhZGVmaW5lZCBQUklpRkFTVDY0IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgICB1bmRlZiBQUklpRkFTVDY0CisjICAgZGVmaW5lIFBSSWlGQVNUNjQgUFJJaTY0CisjICBlbmRpZgorIyBlbmRpZgorIyBpZmRlZiBVSU5UNjRfTUFYCisjICBpZiAhZGVmaW5lZCBQUklvRkFTVDY0IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgICB1bmRlZiBQUklvRkFTVDY0CisjICAgZGVmaW5lIFBSSW9GQVNUNjQgUFJJbzY0CisjICBlbmRpZgorIyAgaWYgIWRlZmluZWQgUFJJdUZBU1Q2NCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICAgdW5kZWYgUFJJdUZBU1Q2NAorIyAgIGRlZmluZSBQUkl1RkFTVDY0IFBSSXU2NAorIyAgZW5kaWYKKyMgIGlmICFkZWZpbmVkIFBSSXhGQVNUNjQgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgIHVuZGVmIFBSSXhGQVNUNjQKKyMgICBkZWZpbmUgUFJJeEZBU1Q2NCBQUkl4NjQKKyMgIGVuZGlmCisjICBpZiAhZGVmaW5lZCBQUklYRkFTVDY0IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgICB1bmRlZiBQUklYRkFTVDY0CisjICAgZGVmaW5lIFBSSVhGQVNUNjQgUFJJWDY0CisjICBlbmRpZgorIyBlbmRpZgorCisjIGlmICFkZWZpbmVkIFBSSWRNQVggfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgUFJJZE1BWAorIyAgaWYgSU5UTUFYX01BWCA+IElOVDMyX01BWAorIyAgIGRlZmluZSBQUklkTUFYIFBSSWQ2NAorIyAgZWxzZQorIyAgIGRlZmluZSBQUklkTUFYICJsZCIKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFBSSWlNQVggfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgUFJJaU1BWAorIyAgaWYgSU5UTUFYX01BWCA+IElOVDMyX01BWAorIyAgIGRlZmluZSBQUklpTUFYIFBSSWk2NAorIyAgZWxzZQorIyAgIGRlZmluZSBQUklpTUFYICJsaSIKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFBSSW9NQVggfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgUFJJb01BWAorIyAgaWYgVUlOVE1BWF9NQVggPiBVSU5UMzJfTUFYCisjICAgZGVmaW5lIFBSSW9NQVggUFJJbzY0CisjICBlbHNlCisjICAgZGVmaW5lIFBSSW9NQVggImxvIgorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgUFJJdU1BWCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBQUkl1TUFYCisjICBpZiBVSU5UTUFYX01BWCA+IFVJTlQzMl9NQVgKKyMgICBkZWZpbmUgUFJJdU1BWCBQUkl1NjQKKyMgIGVsc2UKKyMgICBkZWZpbmUgUFJJdU1BWCAibHUiCisjICBlbmRpZgorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBQUkl4TUFYIHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgIHVuZGVmIFBSSXhNQVgKKyMgIGlmIFVJTlRNQVhfTUFYID4gVUlOVDMyX01BWAorIyAgIGRlZmluZSBQUkl4TUFYIFBSSXg2NAorIyAgZWxzZQorIyAgIGRlZmluZSBQUkl4TUFYICJseCIKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFBSSVhNQVggfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgUFJJWE1BWAorIyAgaWYgVUlOVE1BWF9NQVggPiBVSU5UMzJfTUFYCisjICAgZGVmaW5lIFBSSVhNQVggUFJJWDY0CisjICBlbHNlCisjICAgZGVmaW5lIFBSSVhNQVggImxYIgorIyAgZW5kaWYKKyMgZW5kaWYKKworIyBpZiAhZGVmaW5lZCBQUklkUFRSIHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgIHVuZGVmIFBSSWRQVFIKKyMgIGlmZGVmIElOVFBUUl9NQVgKKyMgICBkZWZpbmUgUFJJZFBUUiBAUFJJUFRSX1BSRUZJWEAgImQiCisjICBlbmRpZgorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBQUklpUFRSIHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgIHVuZGVmIFBSSWlQVFIKKyMgIGlmZGVmIElOVFBUUl9NQVgKKyMgICBkZWZpbmUgUFJJaVBUUiBAUFJJUFRSX1BSRUZJWEAgImkiCisjICBlbmRpZgorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBQUklvUFRSIHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgIHVuZGVmIFBSSW9QVFIKKyMgIGlmZGVmIFVJTlRQVFJfTUFYCisjICAgZGVmaW5lIFBSSW9QVFIgQFBSSVBUUl9QUkVGSVhAICJvIgorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgUFJJdVBUUiB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBQUkl1UFRSCisjICBpZmRlZiBVSU5UUFRSX01BWAorIyAgIGRlZmluZSBQUkl1UFRSIEBQUklQVFJfUFJFRklYQCAidSIKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFBSSXhQVFIgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgUFJJeFBUUgorIyAgaWZkZWYgVUlOVFBUUl9NQVgKKyMgICBkZWZpbmUgUFJJeFBUUiBAUFJJUFRSX1BSRUZJWEAgIngiCisjICBlbmRpZgorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBQUklYUFRSIHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgIHVuZGVmIFBSSVhQVFIKKyMgIGlmZGVmIFVJTlRQVFJfTUFYCisjICAgZGVmaW5lIFBSSVhQVFIgQFBSSVBUUl9QUkVGSVhAICJYIgorIyAgZW5kaWYKKyMgZW5kaWYKKworIyBpZiAhZGVmaW5lZCBTQ05kOCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBTQ05kOAorIyAgaWZkZWYgSU5UOF9NQVgKKyMgICBkZWZpbmUgU0NOZDggImhoZCIKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFNDTmk4IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgIHVuZGVmIFNDTmk4CisjICBpZmRlZiBJTlQ4X01BWAorIyAgIGRlZmluZSBTQ05pOCAiaGhpIgorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgU0NObzggfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgU0NObzgKKyMgIGlmZGVmIFVJTlQ4X01BWAorIyAgIGRlZmluZSBTQ05vOCAiaGhvIgorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgU0NOdTggfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgU0NOdTgKKyMgIGlmZGVmIFVJTlQ4X01BWAorIyAgIGRlZmluZSBTQ051OCAiaGh1IgorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgU0NOeDggfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgU0NOeDgKKyMgIGlmZGVmIFVJTlQ4X01BWAorIyAgIGRlZmluZSBTQ054OCAiaGh4IgorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgU0NOZDE2IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgIHVuZGVmIFNDTmQxNgorIyAgaWZkZWYgSU5UMTZfTUFYCisjICAgZGVmaW5lIFNDTmQxNiAiaGQiCisjICBlbmRpZgorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBTQ05pMTYgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgU0NOaTE2CisjICBpZmRlZiBJTlQxNl9NQVgKKyMgICBkZWZpbmUgU0NOaTE2ICJoaSIKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFNDTm8xNiB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBTQ05vMTYKKyMgIGlmZGVmIFVJTlQxNl9NQVgKKyMgICBkZWZpbmUgU0NObzE2ICJobyIKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFNDTnUxNiB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBTQ051MTYKKyMgIGlmZGVmIFVJTlQxNl9NQVgKKyMgICBkZWZpbmUgU0NOdTE2ICJodSIKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFNDTngxNiB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBTQ054MTYKKyMgIGlmZGVmIFVJTlQxNl9NQVgKKyMgICBkZWZpbmUgU0NOeDE2ICJoeCIKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFNDTmQzMiB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBTQ05kMzIKKyMgIGlmZGVmIElOVDMyX01BWAorIyAgIGRlZmluZSBTQ05kMzIgImQiCisjICBlbmRpZgorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBTQ05pMzIgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgU0NOaTMyCisjICBpZmRlZiBJTlQzMl9NQVgKKyMgICBkZWZpbmUgU0NOaTMyICJpIgorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgU0NObzMyIHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgIHVuZGVmIFNDTm8zMgorIyAgaWZkZWYgVUlOVDMyX01BWAorIyAgIGRlZmluZSBTQ05vMzIgIm8iCisjICBlbmRpZgorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBTQ051MzIgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgU0NOdTMyCisjICBpZmRlZiBVSU5UMzJfTUFYCisjICAgZGVmaW5lIFNDTnUzMiAidSIKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFNDTngzMiB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBTQ054MzIKKyMgIGlmZGVmIFVJTlQzMl9NQVgKKyMgICBkZWZpbmUgU0NOeDMyICJ4IgorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWZkZWYgSU5UNjRfTUFYCisjICBpZiBJTlQ2NF9NQVggPT0gTE9OR19NQVgKKyMgICBkZWZpbmUgX1NDTjY0X1BSRUZJWCAibCIKKyMgIGVsaWYgZGVmaW5lZCBfTVNDX1ZFUiB8fCBkZWZpbmVkIF9fTUlOR1czMl9fCisjICAgZGVmaW5lIF9TQ042NF9QUkVGSVggIkk2NCIKKyMgIGVsaWYgQEhBVkVfTE9OR19MT05HX0lOVEAgJiYgTE9OR19NQVggPj4gMzAgPT0gMQorIyAgIGRlZmluZSBfU0NONjRfUFJFRklYIF9MT05HX0xPTkdfRk9STUFUX1BSRUZJWAorIyAgZW5kaWYKKyMgIGlmICFkZWZpbmVkIFNDTmQ2NCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICAgdW5kZWYgU0NOZDY0CisjICAgZGVmaW5lIFNDTmQ2NCBfU0NONjRfUFJFRklYICJkIgorIyAgZW5kaWYKKyMgIGlmICFkZWZpbmVkIFNDTmk2NCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICAgdW5kZWYgU0NOaTY0CisjICAgZGVmaW5lIFNDTmk2NCBfU0NONjRfUFJFRklYICJpIgorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWZkZWYgVUlOVDY0X01BWAorIyAgaWYgVUlOVDY0X01BWCA9PSBVTE9OR19NQVgKKyMgICBkZWZpbmUgX1NDTnU2NF9QUkVGSVggImwiCisjICBlbGlmIGRlZmluZWQgX01TQ19WRVIgfHwgZGVmaW5lZCBfX01JTkdXMzJfXworIyAgIGRlZmluZSBfU0NOdTY0X1BSRUZJWCAiSTY0IgorIyAgZWxpZiBASEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UQCAmJiBVTE9OR19NQVggPj4gMzEgPT0gMQorIyAgIGRlZmluZSBfU0NOdTY0X1BSRUZJWCBfTE9OR19MT05HX0ZPUk1BVF9QUkVGSVgKKyMgIGVuZGlmCisjICBpZiAhZGVmaW5lZCBTQ05vNjQgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgIHVuZGVmIFNDTm82NAorIyAgIGRlZmluZSBTQ05vNjQgX1NDTnU2NF9QUkVGSVggIm8iCisjICBlbmRpZgorIyAgaWYgIWRlZmluZWQgU0NOdTY0IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgICB1bmRlZiBTQ051NjQKKyMgICBkZWZpbmUgU0NOdTY0IF9TQ051NjRfUFJFRklYICJ1IgorIyAgZW5kaWYKKyMgIGlmICFkZWZpbmVkIFNDTng2NCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICAgdW5kZWYgU0NOeDY0CisjICAgZGVmaW5lIFNDTng2NCBfU0NOdTY0X1BSRUZJWCAieCIKKyMgIGVuZGlmCisjIGVuZGlmCisKKyMgaWYgIWRlZmluZWQgU0NOZExFQVNUOCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBTQ05kTEVBU1Q4CisjICBkZWZpbmUgU0NOZExFQVNUOCAiaGhkIgorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBTQ05pTEVBU1Q4IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgIHVuZGVmIFNDTmlMRUFTVDgKKyMgIGRlZmluZSBTQ05pTEVBU1Q4ICJoaGkiCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFNDTm9MRUFTVDggfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgU0NOb0xFQVNUOAorIyAgZGVmaW5lIFNDTm9MRUFTVDggImhobyIKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgU0NOdUxFQVNUOCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBTQ051TEVBU1Q4CisjICBkZWZpbmUgU0NOdUxFQVNUOCAiaGh1IgorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBTQ054TEVBU1Q4IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgIHVuZGVmIFNDTnhMRUFTVDgKKyMgIGRlZmluZSBTQ054TEVBU1Q4ICJoaHgiCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFNDTmRMRUFTVDE2IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgIHVuZGVmIFNDTmRMRUFTVDE2CisjICBkZWZpbmUgU0NOZExFQVNUMTYgImhkIgorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBTQ05pTEVBU1QxNiB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBTQ05pTEVBU1QxNgorIyAgZGVmaW5lIFNDTmlMRUFTVDE2ICJoaSIKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgU0NOb0xFQVNUMTYgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgU0NOb0xFQVNUMTYKKyMgIGRlZmluZSBTQ05vTEVBU1QxNiAiaG8iCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFNDTnVMRUFTVDE2IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgIHVuZGVmIFNDTnVMRUFTVDE2CisjICBkZWZpbmUgU0NOdUxFQVNUMTYgImh1IgorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBTQ054TEVBU1QxNiB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBTQ054TEVBU1QxNgorIyAgZGVmaW5lIFNDTnhMRUFTVDE2ICJoeCIKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgU0NOZExFQVNUMzIgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgU0NOZExFQVNUMzIKKyMgIGRlZmluZSBTQ05kTEVBU1QzMiAiZCIKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgU0NOaUxFQVNUMzIgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgU0NOaUxFQVNUMzIKKyMgIGRlZmluZSBTQ05pTEVBU1QzMiAiaSIKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgU0NOb0xFQVNUMzIgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgU0NOb0xFQVNUMzIKKyMgIGRlZmluZSBTQ05vTEVBU1QzMiAibyIKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgU0NOdUxFQVNUMzIgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgU0NOdUxFQVNUMzIKKyMgIGRlZmluZSBTQ051TEVBU1QzMiAidSIKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgU0NOeExFQVNUMzIgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgU0NOeExFQVNUMzIKKyMgIGRlZmluZSBTQ054TEVBU1QzMiAieCIKKyMgZW5kaWYKKyMgaWZkZWYgSU5UNjRfTUFYCisjICBpZiAhZGVmaW5lZCBTQ05kTEVBU1Q2NCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICAgdW5kZWYgU0NOZExFQVNUNjQKKyMgICBkZWZpbmUgU0NOZExFQVNUNjQgU0NOZDY0CisjICBlbmRpZgorIyAgaWYgIWRlZmluZWQgU0NOaUxFQVNUNjQgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgIHVuZGVmIFNDTmlMRUFTVDY0CisjICAgZGVmaW5lIFNDTmlMRUFTVDY0IFNDTmk2NAorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWZkZWYgVUlOVDY0X01BWAorIyAgaWYgIWRlZmluZWQgU0NOb0xFQVNUNjQgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgIHVuZGVmIFNDTm9MRUFTVDY0CisjICAgZGVmaW5lIFNDTm9MRUFTVDY0IFNDTm82NAorIyAgZW5kaWYKKyMgIGlmICFkZWZpbmVkIFNDTnVMRUFTVDY0IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgICB1bmRlZiBTQ051TEVBU1Q2NAorIyAgIGRlZmluZSBTQ051TEVBU1Q2NCBTQ051NjQKKyMgIGVuZGlmCisjICBpZiAhZGVmaW5lZCBTQ054TEVBU1Q2NCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICAgdW5kZWYgU0NOeExFQVNUNjQKKyMgICBkZWZpbmUgU0NOeExFQVNUNjQgU0NOeDY0CisjICBlbmRpZgorIyBlbmRpZgorCisjIGlmICFkZWZpbmVkIFNDTmRGQVNUOCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBTQ05kRkFTVDgKKyMgIGlmIElOVF9GQVNUOF9NQVggPiBJTlQzMl9NQVgKKyMgICBkZWZpbmUgU0NOZEZBU1Q4IFNDTmQ2NAorIyAgZWxpZiBJTlRfRkFTVDhfTUFYID09IDB4N2ZmZgorIyAgIGRlZmluZSBTQ05kRkFTVDggImhkIgorIyAgZWxpZiBJTlRfRkFTVDhfTUFYID09IDB4N2YKKyMgICBkZWZpbmUgU0NOZEZBU1Q4ICJoaGQiCisjICBlbHNlCisjICAgZGVmaW5lIFNDTmRGQVNUOCAiZCIKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFNDTmlGQVNUOCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBTQ05pRkFTVDgKKyMgIGlmIElOVF9GQVNUOF9NQVggPiBJTlQzMl9NQVgKKyMgICBkZWZpbmUgU0NOaUZBU1Q4IFNDTmk2NAorIyAgZWxpZiBJTlRfRkFTVDhfTUFYID09IDB4N2ZmZgorIyAgIGRlZmluZSBTQ05pRkFTVDggImhpIgorIyAgZWxpZiBJTlRfRkFTVDhfTUFYID09IDB4N2YKKyMgICBkZWZpbmUgU0NOaUZBU1Q4ICJoaGkiCisjICBlbHNlCisjICAgZGVmaW5lIFNDTmlGQVNUOCAiaSIKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFNDTm9GQVNUOCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBTQ05vRkFTVDgKKyMgIGlmIFVJTlRfRkFTVDhfTUFYID4gVUlOVDMyX01BWAorIyAgIGRlZmluZSBTQ05vRkFTVDggU0NObzY0CisjICBlbGlmIFVJTlRfRkFTVDhfTUFYID09IDB4ZmZmZgorIyAgIGRlZmluZSBTQ05vRkFTVDggImhvIgorIyAgZWxpZiBVSU5UX0ZBU1Q4X01BWCA9PSAweGZmCisjICAgZGVmaW5lIFNDTm9GQVNUOCAiaGhvIgorIyAgZWxzZQorIyAgIGRlZmluZSBTQ05vRkFTVDggIm8iCisjICBlbmRpZgorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBTQ051RkFTVDggfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgU0NOdUZBU1Q4CisjICBpZiBVSU5UX0ZBU1Q4X01BWCA+IFVJTlQzMl9NQVgKKyMgICBkZWZpbmUgU0NOdUZBU1Q4IFNDTnU2NAorIyAgZWxpZiBVSU5UX0ZBU1Q4X01BWCA9PSAweGZmZmYKKyMgICBkZWZpbmUgU0NOdUZBU1Q4ICJodSIKKyMgIGVsaWYgVUlOVF9GQVNUOF9NQVggPT0gMHhmZgorIyAgIGRlZmluZSBTQ051RkFTVDggImhodSIKKyMgIGVsc2UKKyMgICBkZWZpbmUgU0NOdUZBU1Q4ICJ1IgorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgU0NOeEZBU1Q4IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgIHVuZGVmIFNDTnhGQVNUOAorIyAgaWYgVUlOVF9GQVNUOF9NQVggPiBVSU5UMzJfTUFYCisjICAgZGVmaW5lIFNDTnhGQVNUOCBTQ054NjQKKyMgIGVsaWYgVUlOVF9GQVNUOF9NQVggPT0gMHhmZmZmCisjICAgZGVmaW5lIFNDTnhGQVNUOCAiaHgiCisjICBlbGlmIFVJTlRfRkFTVDhfTUFYID09IDB4ZmYKKyMgICBkZWZpbmUgU0NOeEZBU1Q4ICJoaHgiCisjICBlbHNlCisjICAgZGVmaW5lIFNDTnhGQVNUOCAieCIKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFNDTmRGQVNUMTYgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgU0NOZEZBU1QxNgorIyAgaWYgSU5UX0ZBU1QxNl9NQVggPiBJTlQzMl9NQVgKKyMgICBkZWZpbmUgU0NOZEZBU1QxNiBTQ05kNjQKKyMgIGVsaWYgSU5UX0ZBU1QxNl9NQVggPT0gMHg3ZmZmCisjICAgZGVmaW5lIFNDTmRGQVNUMTYgImhkIgorIyAgZWxzZQorIyAgIGRlZmluZSBTQ05kRkFTVDE2ICJkIgorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgU0NOaUZBU1QxNiB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBTQ05pRkFTVDE2CisjICBpZiBJTlRfRkFTVDE2X01BWCA+IElOVDMyX01BWAorIyAgIGRlZmluZSBTQ05pRkFTVDE2IFNDTmk2NAorIyAgZWxpZiBJTlRfRkFTVDE2X01BWCA9PSAweDdmZmYKKyMgICBkZWZpbmUgU0NOaUZBU1QxNiAiaGkiCisjICBlbHNlCisjICAgZGVmaW5lIFNDTmlGQVNUMTYgImkiCisjICBlbmRpZgorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBTQ05vRkFTVDE2IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgIHVuZGVmIFNDTm9GQVNUMTYKKyMgIGlmIFVJTlRfRkFTVDE2X01BWCA+IFVJTlQzMl9NQVgKKyMgICBkZWZpbmUgU0NOb0ZBU1QxNiBTQ05vNjQKKyMgIGVsaWYgVUlOVF9GQVNUMTZfTUFYID09IDB4ZmZmZgorIyAgIGRlZmluZSBTQ05vRkFTVDE2ICJobyIKKyMgIGVsc2UKKyMgICBkZWZpbmUgU0NOb0ZBU1QxNiAibyIKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFNDTnVGQVNUMTYgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgU0NOdUZBU1QxNgorIyAgaWYgVUlOVF9GQVNUMTZfTUFYID4gVUlOVDMyX01BWAorIyAgIGRlZmluZSBTQ051RkFTVDE2IFNDTnU2NAorIyAgZWxpZiBVSU5UX0ZBU1QxNl9NQVggPT0gMHhmZmZmCisjICAgZGVmaW5lIFNDTnVGQVNUMTYgImh1IgorIyAgZWxzZQorIyAgIGRlZmluZSBTQ051RkFTVDE2ICJ1IgorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgU0NOeEZBU1QxNiB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBTQ054RkFTVDE2CisjICBpZiBVSU5UX0ZBU1QxNl9NQVggPiBVSU5UMzJfTUFYCisjICAgZGVmaW5lIFNDTnhGQVNUMTYgU0NOeDY0CisjICBlbGlmIFVJTlRfRkFTVDE2X01BWCA9PSAweGZmZmYKKyMgICBkZWZpbmUgU0NOeEZBU1QxNiAiaHgiCisjICBlbHNlCisjICAgZGVmaW5lIFNDTnhGQVNUMTYgIngiCisjICBlbmRpZgorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBTQ05kRkFTVDMyIHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgIHVuZGVmIFNDTmRGQVNUMzIKKyMgIGlmIElOVF9GQVNUMzJfTUFYID4gSU5UMzJfTUFYCisjICAgZGVmaW5lIFNDTmRGQVNUMzIgU0NOZDY0CisjICBlbHNlCisjICAgZGVmaW5lIFNDTmRGQVNUMzIgImQiCisjICBlbmRpZgorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBTQ05pRkFTVDMyIHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgIHVuZGVmIFNDTmlGQVNUMzIKKyMgIGlmIElOVF9GQVNUMzJfTUFYID4gSU5UMzJfTUFYCisjICAgZGVmaW5lIFNDTmlGQVNUMzIgU0NOaTY0CisjICBlbHNlCisjICAgZGVmaW5lIFNDTmlGQVNUMzIgImkiCisjICBlbmRpZgorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBTQ05vRkFTVDMyIHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgIHVuZGVmIFNDTm9GQVNUMzIKKyMgIGlmIFVJTlRfRkFTVDMyX01BWCA+IFVJTlQzMl9NQVgKKyMgICBkZWZpbmUgU0NOb0ZBU1QzMiBTQ05vNjQKKyMgIGVsc2UKKyMgICBkZWZpbmUgU0NOb0ZBU1QzMiAibyIKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFNDTnVGQVNUMzIgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgU0NOdUZBU1QzMgorIyAgaWYgVUlOVF9GQVNUMzJfTUFYID4gVUlOVDMyX01BWAorIyAgIGRlZmluZSBTQ051RkFTVDMyIFNDTnU2NAorIyAgZWxzZQorIyAgIGRlZmluZSBTQ051RkFTVDMyICJ1IgorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgU0NOeEZBU1QzMiB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBTQ054RkFTVDMyCisjICBpZiBVSU5UX0ZBU1QzMl9NQVggPiBVSU5UMzJfTUFYCisjICAgZGVmaW5lIFNDTnhGQVNUMzIgU0NOeDY0CisjICBlbHNlCisjICAgZGVmaW5lIFNDTnhGQVNUMzIgIngiCisjICBlbmRpZgorIyBlbmRpZgorIyBpZmRlZiBJTlQ2NF9NQVgKKyMgIGlmICFkZWZpbmVkIFNDTmRGQVNUNjQgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgIHVuZGVmIFNDTmRGQVNUNjQKKyMgICBkZWZpbmUgU0NOZEZBU1Q2NCBTQ05kNjQKKyMgIGVuZGlmCisjICBpZiAhZGVmaW5lZCBTQ05pRkFTVDY0IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgICB1bmRlZiBTQ05pRkFTVDY0CisjICAgZGVmaW5lIFNDTmlGQVNUNjQgU0NOaTY0CisjICBlbmRpZgorIyBlbmRpZgorIyBpZmRlZiBVSU5UNjRfTUFYCisjICBpZiAhZGVmaW5lZCBTQ05vRkFTVDY0IHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgICB1bmRlZiBTQ05vRkFTVDY0CisjICAgZGVmaW5lIFNDTm9GQVNUNjQgU0NObzY0CisjICBlbmRpZgorIyAgaWYgIWRlZmluZWQgU0NOdUZBU1Q2NCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICAgdW5kZWYgU0NOdUZBU1Q2NAorIyAgIGRlZmluZSBTQ051RkFTVDY0IFNDTnU2NAorIyAgZW5kaWYKKyMgIGlmICFkZWZpbmVkIFNDTnhGQVNUNjQgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgIHVuZGVmIFNDTnhGQVNUNjQKKyMgICBkZWZpbmUgU0NOeEZBU1Q2NCBTQ054NjQKKyMgIGVuZGlmCisjIGVuZGlmCisKKyMgaWYgIWRlZmluZWQgU0NOZE1BWCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBTQ05kTUFYCisjICBpZiBJTlRNQVhfTUFYID4gSU5UMzJfTUFYCisjICAgZGVmaW5lIFNDTmRNQVggU0NOZDY0CisjICBlbHNlCisjICAgZGVmaW5lIFNDTmRNQVggImxkIgorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgU0NOaU1BWCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBTQ05pTUFYCisjICBpZiBJTlRNQVhfTUFYID4gSU5UMzJfTUFYCisjICAgZGVmaW5lIFNDTmlNQVggU0NOaTY0CisjICBlbHNlCisjICAgZGVmaW5lIFNDTmlNQVggImxpIgorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgU0NOb01BWCB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBTQ05vTUFYCisjICBpZiBVSU5UTUFYX01BWCA+IFVJTlQzMl9NQVgKKyMgICBkZWZpbmUgU0NOb01BWCBTQ05vNjQKKyMgIGVsc2UKKyMgICBkZWZpbmUgU0NOb01BWCAibG8iCisjICBlbmRpZgorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBTQ051TUFYIHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgIHVuZGVmIFNDTnVNQVgKKyMgIGlmIFVJTlRNQVhfTUFYID4gVUlOVDMyX01BWAorIyAgIGRlZmluZSBTQ051TUFYIFNDTnU2NAorIyAgZWxzZQorIyAgIGRlZmluZSBTQ051TUFYICJsdSIKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFNDTnhNQVggfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgU0NOeE1BWAorIyAgaWYgVUlOVE1BWF9NQVggPiBVSU5UMzJfTUFYCisjICAgZGVmaW5lIFNDTnhNQVggU0NOeDY0CisjICBlbHNlCisjICAgZGVmaW5lIFNDTnhNQVggImx4IgorIyAgZW5kaWYKKyMgZW5kaWYKKworIyBpZiAhZGVmaW5lZCBTQ05kUFRSIHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgIHVuZGVmIFNDTmRQVFIKKyMgIGlmZGVmIElOVFBUUl9NQVgKKyMgICBkZWZpbmUgU0NOZFBUUiBAUFJJUFRSX1BSRUZJWEAgImQiCisjICBlbmRpZgorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBTQ05pUFRSIHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgIHVuZGVmIFNDTmlQVFIKKyMgIGlmZGVmIElOVFBUUl9NQVgKKyMgICBkZWZpbmUgU0NOaVBUUiBAUFJJUFRSX1BSRUZJWEAgImkiCisjICBlbmRpZgorIyBlbmRpZgorIyBpZiAhZGVmaW5lZCBTQ05vUFRSIHx8IEBQUklfTUFDUk9TX0JST0tFTkAKKyMgIHVuZGVmIFNDTm9QVFIKKyMgIGlmZGVmIFVJTlRQVFJfTUFYCisjICAgZGVmaW5lIFNDTm9QVFIgQFBSSVBUUl9QUkVGSVhAICJvIgorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgU0NOdVBUUiB8fCBAUFJJX01BQ1JPU19CUk9LRU5ACisjICB1bmRlZiBTQ051UFRSCisjICBpZmRlZiBVSU5UUFRSX01BWAorIyAgIGRlZmluZSBTQ051UFRSIEBQUklQVFJfUFJFRklYQCAidSIKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIFNDTnhQVFIgfHwgQFBSSV9NQUNST1NfQlJPS0VOQAorIyAgdW5kZWYgU0NOeFBUUgorIyAgaWZkZWYgVUlOVFBUUl9NQVgKKyMgICBkZWZpbmUgU0NOeFBUUiBAUFJJUFRSX1BSRUZJWEAgIngiCisjICBlbmRpZgorIyBlbmRpZgorCisjZW5kaWYKKworLyogNy44LjIgRnVuY3Rpb25zIGZvciBncmVhdGVzdC13aWR0aCBpbnRlZ2VyIHR5cGVzICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2lmIEBHTlVMSUJfSU1BWEFCU0AKKyMgaWYgIUBIQVZFX0RFQ0xfSU1BWEFCU0AKK2V4dGVybiBpbnRtYXhfdCBpbWF4YWJzIChpbnRtYXhfdCk7CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGltYXhhYnMKKyMgZGVmaW5lIGltYXhhYnMoYSkgXAorICAgIChHTF9MSU5LX1dBUk5JTkcgKCJpbWF4YWJzIGlzIHVucG9ydGFibGUgLSAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgaW1heGFicyBmb3IgcG9ydGFiaWxpdHkiKSwgXAorICAgICBpbWF4YWJzIChhKSkKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9JTUFYRElWQAorIyBpZiAhQEhBVkVfREVDTF9JTUFYRElWQAordHlwZWRlZiBzdHJ1Y3QgeyBpbnRtYXhfdCBxdW90OyBpbnRtYXhfdCByZW07IH0gaW1heGRpdl90OworZXh0ZXJuIGltYXhkaXZfdCBpbWF4ZGl2IChpbnRtYXhfdCwgaW50bWF4X3QpOworIyBlbmRpZgorI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBpbWF4ZGl2CisjIGRlZmluZSBpbWF4ZGl2KGEsYikgXAorICAgIChHTF9MSU5LX1dBUk5JTkcgKCJpbWF4ZGl2IGlzIHVucG9ydGFibGUgLSAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgaW1heGRpdiBmb3IgcG9ydGFiaWxpdHkiKSwgXAorICAgICBpbWF4ZGl2IChhLCBiKSkKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9TVFJUT0lNQVhACisjIGlmICFASEFWRV9ERUNMX1NUUlRPSU1BWEAKK2V4dGVybiBpbnRtYXhfdCBzdHJ0b2ltYXggKGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KTsKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgc3RydG9pbWF4CisjIGRlZmluZSBzdHJ0b2ltYXgocCxlLGIpIFwKKyAgICAoR0xfTElOS19XQVJOSU5HICgic3RydG9pbWF4IGlzIHVucG9ydGFibGUgLSAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc3RydG9pbWF4IGZvciBwb3J0YWJpbGl0eSIpLCBcCisgICAgIHN0cnRvaW1heCAocCwgZSwgYikpCisjZW5kaWYKKworI2lmIEBHTlVMSUJfU1RSVE9VTUFYQAorIyBpZiAhQEhBVkVfREVDTF9TVFJUT1VNQVhACitleHRlcm4gdWludG1heF90IHN0cnRvdW1heCAoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpOworIyBlbmRpZgorI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzdHJ0b3VtYXgKKyMgZGVmaW5lIHN0cnRvdW1heChwLGUsYikgXAorICAgIChHTF9MSU5LX1dBUk5JTkcgKCJzdHJ0b3VtYXggaXMgdW5wb3J0YWJsZSAtICIgXAorICAgICAgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBzdHJ0b3VtYXggZm9yIHBvcnRhYmlsaXR5IiksIFwKKyAgICAgc3RydG91bWF4IChwLCBlLCBiKSkKKyNlbmRpZgorCisvKiBEb24ndCBib3RoZXIgZGVmaW5pbmcgb3IgZGVjbGFyaW5nIHdjc3RvaW1heCBhbmQgd2NzdG91bWF4LCBzaW5jZQorICAgd2lkZS1jaGFyYWN0ZXIgZnVuY3Rpb25zIGxpa2UgdGhpcyBhcmUgaGFyZGx5IGV2ZXIgdXNlZnVsLiAgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIElOVFRZUEVTX0ggKi8KZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWIvbG9jYWxjaGFyc2V0LmMgYi9wYXJ0ZWQtMS44LjcvbGliL2xvY2FsY2hhcnNldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwZjdjY2EKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGliL2xvY2FsY2hhcnNldC5jCkBAIC0wLDAgKzEsNDYwIEBACisvKiBEZXRlcm1pbmUgYSBjYW5vbmljYWwgbmFtZSBmb3IgdGhlIGN1cnJlbnQgbG9jYWxlJ3MgY2hhcmFjdGVyIGVuY29kaW5nLgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAgIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisKKy8qIFdyaXR0ZW4gYnkgQnJ1bm8gSGFpYmxlIDxicnVub0BjbGlzcC5vcmc+LiAgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisvKiBTcGVjaWZpY2F0aW9uLiAgKi8KKyNpbmNsdWRlICJsb2NhbGNoYXJzZXQuaCIKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpZiBkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXworIyBkZWZpbmUgV0lOMzJfTkFUSVZFCisjZW5kaWYKKworI2lmIGRlZmluZWQgX19FTVhfXworLyogQXNzdW1lIEVNWCBwcm9ncmFtIHJ1bnMgb24gT1MvMiwgZXZlbiBpZiBjb21waWxlZCB1bmRlciBET1MuICAqLworIyBkZWZpbmUgT1MyCisjZW5kaWYKKworI2lmICFkZWZpbmVkIFdJTjMyX05BVElWRQorIyBpZiBIQVZFX0xBTkdJTkZPX0NPREVTRVQKKyMgIGluY2x1ZGUgPGxhbmdpbmZvLmg+CisjIGVsc2UKKyMgIGlmIDAgLyogc2VlIGNvbW1lbnQgYmVsb3cgKi8KKyMgICBpbmNsdWRlIDxsb2NhbGUuaD4KKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmZGVmIF9fQ1lHV0lOX18KKyMgIGRlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjICBpbmNsdWRlIDx3aW5kb3dzLmg+CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkIFdJTjMyX05BVElWRQorIyBkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorIyBpbmNsdWRlIDx3aW5kb3dzLmg+CisjZW5kaWYKKyNpZiBkZWZpbmVkIE9TMgorIyBkZWZpbmUgSU5DTF9ET1MKKyMgaW5jbHVkZSA8b3MyLmg+CisjZW5kaWYKKworI2lmIEVOQUJMRV9SRUxPQ0FUQUJMRQorIyBpbmNsdWRlICJyZWxvY2F0YWJsZS5oIgorI2Vsc2UKKyMgZGVmaW5lIHJlbG9jYXRlKHBhdGhuYW1lKSAocGF0aG5hbWUpCisjZW5kaWYKKworLyogR2V0IExJQkRJUi4gICovCisjaWZuZGVmIExJQkRJUgorIyBpbmNsdWRlICJjb25maWdtYWtlLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fIHx8IGRlZmluZWQgX19DWUdXSU5fXyB8fCBkZWZpbmVkIF9fRU1YX18gfHwgZGVmaW5lZCBfX0RKR1BQX18KKyAgLyogV2luMzIsIEN5Z3dpbiwgT1MvMiwgRE9TICovCisjIGRlZmluZSBJU1NMQVNIKEMpICgoQykgPT0gJy8nIHx8IChDKSA9PSAnXFwnKQorI2VuZGlmCisKKyNpZm5kZWYgRElSRUNUT1JZX1NFUEFSQVRPUgorIyBkZWZpbmUgRElSRUNUT1JZX1NFUEFSQVRPUiAnLycKKyNlbmRpZgorCisjaWZuZGVmIElTU0xBU0gKKyMgZGVmaW5lIElTU0xBU0goQykgKChDKSA9PSBESVJFQ1RPUllfU0VQQVJBVE9SKQorI2VuZGlmCisKKyNpZiBIQVZFX0RFQ0xfR0VUQ19VTkxPQ0tFRAorIyB1bmRlZiBnZXRjCisjIGRlZmluZSBnZXRjIGdldGNfdW5sb2NrZWQKKyNlbmRpZgorCisvKiBUaGUgZm9sbG93aW5nIHN0YXRpYyB2YXJpYWJsZSBpcyBkZWNsYXJlZCAndm9sYXRpbGUnIHRvIGF2b2lkIGEKKyAgIHBvc3NpYmxlIG11bHRpdGhyZWFkIHByb2JsZW0gaW4gdGhlIGZ1bmN0aW9uIGdldF9jaGFyc2V0X2FsaWFzZXMuIElmIHdlCisgICBhcmUgcnVubmluZyBpbiBhIHRocmVhZGVkIGVudmlyb25tZW50LCBhbmQgaWYgdHdvIHRocmVhZHMgaW5pdGlhbGl6ZQorICAgJ2NoYXJzZXRfYWxpYXNlcycgc2ltdWx0YW5lb3VzbHksIGJvdGggd2lsbCBwcm9kdWNlIHRoZSBzYW1lIHZhbHVlLAorICAgYW5kIGV2ZXJ5dGhpbmcgd2lsbCBiZSBvayBpZiB0aGUgdHdvIGFzc2lnbm1lbnRzIHRvICdjaGFyc2V0X2FsaWFzZXMnCisgICBhcmUgYXRvbWljLiBCdXQgSSBkb24ndCBrbm93IHdoYXQgd2lsbCBoYXBwZW4gaWYgdGhlIHR3byBhc3NpZ25tZW50cyBtaXguICAqLworI2lmIF9fU1REQ19fICE9IDEKKyMgZGVmaW5lIHZvbGF0aWxlIC8qIGVtcHR5ICovCisjZW5kaWYKKy8qIFBvaW50ZXIgdG8gdGhlIGNvbnRlbnRzIG9mIHRoZSBjaGFyc2V0LmFsaWFzIGZpbGUsIGlmIGl0IGhhcyBhbHJlYWR5IGJlZW4KKyAgIHJlYWQsIGVsc2UgTlVMTC4gIEl0cyBmb3JtYXQgaXM6CisgICBBTElBU18xICdcMCcgQ0FOT05JQ0FMXzEgJ1wwJyAuLi4gQUxJQVNfbiAnXDAnIENBTk9OSUNBTF9uICdcMCcgJ1wwJyAgKi8KK3N0YXRpYyBjb25zdCBjaGFyICogdm9sYXRpbGUgY2hhcnNldF9hbGlhc2VzOworCisvKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBjb250ZW50cyBvZiB0aGUgY2hhcnNldC5hbGlhcyBmaWxlLiAgKi8KK3N0YXRpYyBjb25zdCBjaGFyICoKK2dldF9jaGFyc2V0X2FsaWFzZXMgKHZvaWQpCit7CisgIGNvbnN0IGNoYXIgKmNwOworCisgIGNwID0gY2hhcnNldF9hbGlhc2VzOworICBpZiAoY3AgPT0gTlVMTCkKKyAgICB7CisjaWYgIShkZWZpbmVkIFZNUyB8fCBkZWZpbmVkIFdJTjMyX05BVElWRSB8fCBkZWZpbmVkIF9fQ1lHV0lOX18pCisgICAgICBGSUxFICpmcDsKKyAgICAgIGNvbnN0IGNoYXIgKmRpcjsKKyAgICAgIGNvbnN0IGNoYXIgKmJhc2UgPSAiY2hhcnNldC5hbGlhcyI7CisgICAgICBjaGFyICpmaWxlX25hbWU7CisKKyAgICAgIC8qIE1ha2UgaXQgcG9zc2libGUgdG8gb3ZlcnJpZGUgdGhlIGNoYXJzZXQuYWxpYXMgbG9jYXRpb24uICBUaGlzIGlzCisJIG5lY2Vzc2FyeSBmb3IgcnVubmluZyB0aGUgdGVzdHN1aXRlIGJlZm9yZSAibWFrZSBpbnN0YWxsIi4gICovCisgICAgICBkaXIgPSBnZXRlbnYgKCJDSEFSU0VUQUxJQVNESVIiKTsKKyAgICAgIGlmIChkaXIgPT0gTlVMTCB8fCBkaXJbMF0gPT0gJ1wwJykKKwlkaXIgPSByZWxvY2F0ZSAoTElCRElSKTsKKworICAgICAgLyogQ29uY2F0ZW5hdGUgZGlyIGFuZCBiYXNlIGludG8gZnJlc2hseSBhbGxvY2F0ZWQgZmlsZV9uYW1lLiAgKi8KKyAgICAgIHsKKwlzaXplX3QgZGlyX2xlbiA9IHN0cmxlbiAoZGlyKTsKKwlzaXplX3QgYmFzZV9sZW4gPSBzdHJsZW4gKGJhc2UpOworCWludCBhZGRfc2xhc2ggPSAoZGlyX2xlbiA+IDAgJiYgIUlTU0xBU0ggKGRpcltkaXJfbGVuIC0gMV0pKTsKKwlmaWxlX25hbWUgPSAoY2hhciAqKSBtYWxsb2MgKGRpcl9sZW4gKyBhZGRfc2xhc2ggKyBiYXNlX2xlbiArIDEpOworCWlmIChmaWxlX25hbWUgIT0gTlVMTCkKKwkgIHsKKwkgICAgbWVtY3B5IChmaWxlX25hbWUsIGRpciwgZGlyX2xlbik7CisJICAgIGlmIChhZGRfc2xhc2gpCisJICAgICAgZmlsZV9uYW1lW2Rpcl9sZW5dID0gRElSRUNUT1JZX1NFUEFSQVRPUjsKKwkgICAgbWVtY3B5IChmaWxlX25hbWUgKyBkaXJfbGVuICsgYWRkX3NsYXNoLCBiYXNlLCBiYXNlX2xlbiArIDEpOworCSAgfQorICAgICAgfQorCisgICAgICBpZiAoZmlsZV9uYW1lID09IE5VTEwgfHwgKGZwID0gZm9wZW4gKGZpbGVfbmFtZSwgInIiKSkgPT0gTlVMTCkKKwkvKiBPdXQgb2YgbWVtb3J5IG9yIGZpbGUgbm90IGZvdW5kLCB0cmVhdCBpdCBhcyBlbXB0eS4gICovCisJY3AgPSAiIjsKKyAgICAgIGVsc2UKKwl7CisJICAvKiBQYXJzZSB0aGUgZmlsZSdzIGNvbnRlbnRzLiAgKi8KKwkgIGNoYXIgKnJlc19wdHIgPSBOVUxMOworCSAgc2l6ZV90IHJlc19zaXplID0gMDsKKworCSAgZm9yICg7OykKKwkgICAgeworCSAgICAgIGludCBjOworCSAgICAgIGNoYXIgYnVmMVs1MCsxXTsKKwkgICAgICBjaGFyIGJ1ZjJbNTArMV07CisJICAgICAgc2l6ZV90IGwxLCBsMjsKKwkgICAgICBjaGFyICpvbGRfcmVzX3B0cjsKKworCSAgICAgIGMgPSBnZXRjIChmcCk7CisJICAgICAgaWYgKGMgPT0gRU9GKQorCQlicmVhazsKKwkgICAgICBpZiAoYyA9PSAnXG4nIHx8IGMgPT0gJyAnIHx8IGMgPT0gJ1x0JykKKwkJY29udGludWU7CisJICAgICAgaWYgKGMgPT0gJyMnKQorCQl7CisJCSAgLyogU2tpcCBjb21tZW50LCB0byBlbmQgb2YgbGluZS4gICovCisJCSAgZG8KKwkJICAgIGMgPSBnZXRjIChmcCk7CisJCSAgd2hpbGUgKCEoYyA9PSBFT0YgfHwgYyA9PSAnXG4nKSk7CisJCSAgaWYgKGMgPT0gRU9GKQorCQkgICAgYnJlYWs7CisJCSAgY29udGludWU7CisJCX0KKwkgICAgICB1bmdldGMgKGMsIGZwKTsKKwkgICAgICBpZiAoZnNjYW5mIChmcCwgIiU1MHMgJTUwcyIsIGJ1ZjEsIGJ1ZjIpIDwgMikKKwkJYnJlYWs7CisJICAgICAgbDEgPSBzdHJsZW4gKGJ1ZjEpOworCSAgICAgIGwyID0gc3RybGVuIChidWYyKTsKKwkgICAgICBvbGRfcmVzX3B0ciA9IHJlc19wdHI7CisJICAgICAgaWYgKHJlc19zaXplID09IDApCisJCXsKKwkJICByZXNfc2l6ZSA9IGwxICsgMSArIGwyICsgMTsKKwkJICByZXNfcHRyID0gKGNoYXIgKikgbWFsbG9jIChyZXNfc2l6ZSArIDEpOworCQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgcmVzX3NpemUgKz0gbDEgKyAxICsgbDIgKyAxOworCQkgIHJlc19wdHIgPSAoY2hhciAqKSByZWFsbG9jIChyZXNfcHRyLCByZXNfc2l6ZSArIDEpOworCQl9CisJICAgICAgaWYgKHJlc19wdHIgPT0gTlVMTCkKKwkJeworCQkgIC8qIE91dCBvZiBtZW1vcnkuICovCisJCSAgcmVzX3NpemUgPSAwOworCQkgIGlmIChvbGRfcmVzX3B0ciAhPSBOVUxMKQorCQkgICAgZnJlZSAob2xkX3Jlc19wdHIpOworCQkgIGJyZWFrOworCQl9CisJICAgICAgc3RyY3B5IChyZXNfcHRyICsgcmVzX3NpemUgLSAobDIgKyAxKSAtIChsMSArIDEpLCBidWYxKTsKKwkgICAgICBzdHJjcHkgKHJlc19wdHIgKyByZXNfc2l6ZSAtIChsMiArIDEpLCBidWYyKTsKKwkgICAgfQorCSAgZmNsb3NlIChmcCk7CisJICBpZiAocmVzX3NpemUgPT0gMCkKKwkgICAgY3AgPSAiIjsKKwkgIGVsc2UKKwkgICAgeworCSAgICAgICoocmVzX3B0ciArIHJlc19zaXplKSA9ICdcMCc7CisJICAgICAgY3AgPSByZXNfcHRyOworCSAgICB9CisJfQorCisgICAgICBpZiAoZmlsZV9uYW1lICE9IE5VTEwpCisJZnJlZSAoZmlsZV9uYW1lKTsKKworI2Vsc2UKKworIyBpZiBkZWZpbmVkIFZNUworICAgICAgLyogVG8gYXZvaWQgdGhlIHRyb3VibGVzIG9mIGFuIGV4dHJhIGZpbGUgY2hhcnNldC5hbGlhc192bXMgaW4gdGhlCisJIHNvdXJjZXMgb2YgbWFueSBHTlUgcGFja2FnZXMsIHNpbXBseSBpbmxpbmUgdGhlIGFsaWFzZXMgaGVyZS4gICovCisgICAgICAvKiBUaGUgbGlzdCBvZiBlbmNvZGluZ3MgaXMgdGFrZW4gZnJvbSB0aGUgT3BlblZNUyA3LjMtMSBkb2N1bWVudGF0aW9uCisJICJDb21wYXEgQyBSdW4tVGltZSBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWwgZm9yIE9wZW5WTVMgc3lzdGVtcyIKKwkgc2VjdGlvbiAxMC43ICJIYW5kbGluZyBEaWZmZXJlbnQgQ2hhcmFjdGVyIFNldHMiLiAgKi8KKyAgICAgIGNwID0gIklTTzg4NTktMSIgIlwwIiAiSVNPLTg4NTktMSIgIlwwIgorCSAgICJJU084ODU5LTIiICJcMCIgIklTTy04ODU5LTIiICJcMCIKKwkgICAiSVNPODg1OS01IiAiXDAiICJJU08tODg1OS01IiAiXDAiCisJICAgIklTTzg4NTktNyIgIlwwIiAiSVNPLTg4NTktNyIgIlwwIgorCSAgICJJU084ODU5LTgiICJcMCIgIklTTy04ODU5LTgiICJcMCIKKwkgICAiSVNPODg1OS05IiAiXDAiICJJU08tODg1OS05IiAiXDAiCisJICAgLyogSmFwYW5lc2UgKi8KKwkgICAiZXVjSlAiICJcMCIgIkVVQy1KUCIgIlwwIgorCSAgICJTSklTIiAiXDAiICJTSElGVF9KSVMiICJcMCIKKwkgICAiREVDS0FOSkkiICJcMCIgIkRFQy1LQU5KSSIgIlwwIgorCSAgICJTREVDS0FOSkkiICJcMCIgIkVVQy1KUCIgIlwwIgorCSAgIC8qIENoaW5lc2UgKi8KKwkgICAiZXVjVFciICJcMCIgIkVVQy1UVyIgIlwwIgorCSAgICJERUNIQU5ZVSIgIlwwIiAiREVDLUhBTllVIiAiXDAiCisJICAgIkRFQ0hBTlpJIiAiXDAiICJHQjIzMTIiICJcMCIKKwkgICAvKiBLb3JlYW4gKi8KKwkgICAiREVDS09SRUFOIiAiXDAiICJFVUMtS1IiICJcMCI7CisjIGVuZGlmCisKKyMgaWYgZGVmaW5lZCBXSU4zMl9OQVRJVkUgfHwgZGVmaW5lZCBfX0NZR1dJTl9fCisgICAgICAvKiBUbyBhdm9pZCB0aGUgdHJvdWJsZXMgb2YgaW5zdGFsbGluZyBhIHNlcGFyYXRlIGZpbGUgaW4gdGhlIHNhbWUKKwkgZGlyZWN0b3J5IGFzIHRoZSBETEwgYW5kIG9mIHJldHJpZXZpbmcgdGhlIERMTCdzIGRpcmVjdG9yeSBhdAorCSBydW50aW1lLCBzaW1wbHkgaW5saW5lIHRoZSBhbGlhc2VzIGhlcmUuICAqLworCisgICAgICBjcCA9ICJDUDkzNiIgIlwwIiAiR0JLIiAiXDAiCisJICAgIkNQMTM2MSIgIlwwIiAiSk9IQUIiICJcMCIKKwkgICAiQ1AyMDEyNyIgIlwwIiAiQVNDSUkiICJcMCIKKwkgICAiQ1AyMDg2NiIgIlwwIiAiS09JOC1SIiAiXDAiCisJICAgIkNQMjA5MzYiICJcMCIgIkdCMjMxMiIgIlwwIgorCSAgICJDUDIxODY2IiAiXDAiICJLT0k4LVJVIiAiXDAiCisJICAgIkNQMjg1OTEiICJcMCIgIklTTy04ODU5LTEiICJcMCIKKwkgICAiQ1AyODU5MiIgIlwwIiAiSVNPLTg4NTktMiIgIlwwIgorCSAgICJDUDI4NTkzIiAiXDAiICJJU08tODg1OS0zIiAiXDAiCisJICAgIkNQMjg1OTQiICJcMCIgIklTTy04ODU5LTQiICJcMCIKKwkgICAiQ1AyODU5NSIgIlwwIiAiSVNPLTg4NTktNSIgIlwwIgorCSAgICJDUDI4NTk2IiAiXDAiICJJU08tODg1OS02IiAiXDAiCisJICAgIkNQMjg1OTciICJcMCIgIklTTy04ODU5LTciICJcMCIKKwkgICAiQ1AyODU5OCIgIlwwIiAiSVNPLTg4NTktOCIgIlwwIgorCSAgICJDUDI4NTk5IiAiXDAiICJJU08tODg1OS05IiAiXDAiCisJICAgIkNQMjg2MDUiICJcMCIgIklTTy04ODU5LTE1IiAiXDAiCisJICAgIkNQMzg1OTgiICJcMCIgIklTTy04ODU5LTgiICJcMCIKKwkgICAiQ1A1MTkzMiIgIlwwIiAiRVVDLUpQIiAiXDAiCisJICAgIkNQNTE5MzYiICJcMCIgIkdCMjMxMiIgIlwwIgorCSAgICJDUDUxOTQ5IiAiXDAiICJFVUMtS1IiICJcMCIKKwkgICAiQ1A1MTk1MCIgIlwwIiAiRVVDLVRXIiAiXDAiCisJICAgIkNQNTQ5MzYiICJcMCIgIkdCMTgwMzAiICJcMCIKKwkgICAiQ1A2NTAwMSIgIlwwIiAiVVRGLTgiICJcMCI7CisjIGVuZGlmCisjZW5kaWYKKworICAgICAgY2hhcnNldF9hbGlhc2VzID0gY3A7CisgICAgfQorCisgIHJldHVybiBjcDsKK30KKworLyogRGV0ZXJtaW5lIHRoZSBjdXJyZW50IGxvY2FsZSdzIGNoYXJhY3RlciBlbmNvZGluZywgYW5kIGNhbm9uaWNhbGl6ZSBpdAorICAgaW50byBvbmUgb2YgdGhlIGNhbm9uaWNhbCBuYW1lcyBsaXN0ZWQgaW4gY29uZmlnLmNoYXJzZXQuCisgICBUaGUgcmVzdWx0IG11c3Qgbm90IGJlIGZyZWVkOyBpdCBpcyBzdGF0aWNhbGx5IGFsbG9jYXRlZC4KKyAgIElmIHRoZSBjYW5vbmljYWwgbmFtZSBjYW5ub3QgYmUgZGV0ZXJtaW5lZCwgdGhlIHJlc3VsdCBpcyBhIG5vbi1jYW5vbmljYWwKKyAgIG5hbWUuICAqLworCisjaWZkZWYgU1RBVElDCitTVEFUSUMKKyNlbmRpZgorY29uc3QgY2hhciAqCitsb2NhbGVfY2hhcnNldCAodm9pZCkKK3sKKyAgY29uc3QgY2hhciAqY29kZXNldDsKKyAgY29uc3QgY2hhciAqYWxpYXNlczsKKworI2lmICEoZGVmaW5lZCBXSU4zMl9OQVRJVkUgfHwgZGVmaW5lZCBPUzIpCisKKyMgaWYgSEFWRV9MQU5HSU5GT19DT0RFU0VUCisKKyAgLyogTW9zdCBzeXN0ZW1zIHN1cHBvcnQgbmxfbGFuZ2luZm8gKENPREVTRVQpIG5vd2FkYXlzLiAgKi8KKyAgY29kZXNldCA9IG5sX2xhbmdpbmZvIChDT0RFU0VUKTsKKworIyAgaWZkZWYgX19DWUdXSU5fXworICAvKiBDeWd3aW4gMjAwNiBkb2VzIG5vdCBoYXZlIGxvY2FsZXMuICBubF9sYW5naW5mbyAoQ09ERVNFVCkgYWx3YXlzCisgICAgIHJldHVybnMgIlVTLUFTQ0lJIi4gIEFzIGxvbmcgYXMgdGhpcyBpcyBub3QgZml4ZWQsIHJldHVybiB0aGUgc3VmZml4CisgICAgIG9mIHRoZSBsb2NhbGUgbmFtZSBmcm9tIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgKGlmIHByZXNlbnQpIG9yCisgICAgIHRoZSBjb2RlcGFnZSBhcyBhIG51bWJlci4gICovCisgIGlmIChjb2Rlc2V0ICE9IE5VTEwgJiYgc3RyY21wIChjb2Rlc2V0LCAiVVMtQVNDSUkiKSA9PSAwKQorICAgIHsKKyAgICAgIGNvbnN0IGNoYXIgKmxvY2FsZTsKKyAgICAgIHN0YXRpYyBjaGFyIGJ1ZlsyICsgMTAgKyAxXTsKKworICAgICAgbG9jYWxlID0gZ2V0ZW52ICgiTENfQUxMIik7CisgICAgICBpZiAobG9jYWxlID09IE5VTEwgfHwgbG9jYWxlWzBdID09ICdcMCcpCisJeworCSAgbG9jYWxlID0gZ2V0ZW52ICgiTENfQ1RZUEUiKTsKKwkgIGlmIChsb2NhbGUgPT0gTlVMTCB8fCBsb2NhbGVbMF0gPT0gJ1wwJykKKwkgICAgbG9jYWxlID0gZ2V0ZW52ICgiTEFORyIpOworCX0KKyAgICAgIGlmIChsb2NhbGUgIT0gTlVMTCAmJiBsb2NhbGVbMF0gIT0gJ1wwJykKKwl7CisJICAvKiBJZiB0aGUgbG9jYWxlIG5hbWUgY29udGFpbnMgYW4gZW5jb2RpbmcgYWZ0ZXIgdGhlIGRvdCwgcmV0dXJuCisJICAgICBpdC4gICovCisJICBjb25zdCBjaGFyICpkb3QgPSBzdHJjaHIgKGxvY2FsZSwgJy4nKTsKKworCSAgaWYgKGRvdCAhPSBOVUxMKQorCSAgICB7CisJICAgICAgY29uc3QgY2hhciAqbW9kaWZpZXI7CisKKwkgICAgICBkb3QrKzsKKwkgICAgICAvKiBMb29rIGZvciB0aGUgcG9zc2libGUgQC4uLiB0cmFpbGVyIGFuZCByZW1vdmUgaXQsIGlmIGFueS4gICovCisJICAgICAgbW9kaWZpZXIgPSBzdHJjaHIgKGRvdCwgJ0AnKTsKKwkgICAgICBpZiAobW9kaWZpZXIgPT0gTlVMTCkKKwkJcmV0dXJuIGRvdDsKKwkgICAgICBpZiAobW9kaWZpZXIgLSBkb3QgPCBzaXplb2YgKGJ1ZikpCisJCXsKKwkJICBtZW1jcHkgKGJ1ZiwgZG90LCBtb2RpZmllciAtIGRvdCk7CisJCSAgYnVmIFttb2RpZmllciAtIGRvdF0gPSAnXDAnOworCQkgIHJldHVybiBidWY7CisJCX0KKwkgICAgfQorCX0KKworICAgICAgLyogV29lMzIgaGFzIGEgZnVuY3Rpb24gcmV0dXJuaW5nIHRoZSBsb2NhbGUncyBjb2RlcGFnZSBhcyBhIG51bWJlci4gICovCisgICAgICBzcHJpbnRmIChidWYsICJDUCV1IiwgR2V0QUNQICgpKTsKKyAgICAgIGNvZGVzZXQgPSBidWY7CisgICAgfQorIyAgZW5kaWYKKworIyBlbHNlCisKKyAgLyogT24gb2xkIHN5c3RlbXMgd2hpY2ggbGFjayBpdCwgdXNlIHNldGxvY2FsZSBvciBnZXRlbnYuICAqLworICBjb25zdCBjaGFyICpsb2NhbGUgPSBOVUxMOworCisgIC8qIEJ1dCBtb3N0IG9sZCBzeXN0ZW1zIGRvbid0IGhhdmUgYSBjb21wbGV0ZSBzZXQgb2YgbG9jYWxlcy4gIFNvbWUKKyAgICAgKGxpa2UgU3VuT1MgNCBvciBESkdQUCkgaGF2ZSBvbmx5IHRoZSBDIGxvY2FsZS4gIFRoZXJlZm9yZSB3ZSBkb24ndAorICAgICB1c2Ugc2V0bG9jYWxlIGhlcmU7IGl0IHdvdWxkIHJldHVybiAiQyIgd2hlbiBpdCBkb2Vzbid0IHN1cHBvcnQgdGhlCisgICAgIGxvY2FsZSBuYW1lIHRoZSB1c2VyIGhhcyBzZXQuICAqLworIyAgaWYgMAorICBsb2NhbGUgPSBzZXRsb2NhbGUgKExDX0NUWVBFLCBOVUxMKTsKKyMgIGVuZGlmCisgIGlmIChsb2NhbGUgPT0gTlVMTCB8fCBsb2NhbGVbMF0gPT0gJ1wwJykKKyAgICB7CisgICAgICBsb2NhbGUgPSBnZXRlbnYgKCJMQ19BTEwiKTsKKyAgICAgIGlmIChsb2NhbGUgPT0gTlVMTCB8fCBsb2NhbGVbMF0gPT0gJ1wwJykKKwl7CisJICBsb2NhbGUgPSBnZXRlbnYgKCJMQ19DVFlQRSIpOworCSAgaWYgKGxvY2FsZSA9PSBOVUxMIHx8IGxvY2FsZVswXSA9PSAnXDAnKQorCSAgICBsb2NhbGUgPSBnZXRlbnYgKCJMQU5HIik7CisJfQorICAgIH0KKworICAvKiBPbiBzb21lIG9sZCBzeXN0ZW1zLCBvbmUgdXNlZCB0byBzZXQgbG9jYWxlID0gImlzbzg4NTlfMSIuIE9uIG90aGVycywKKyAgICAgeW91IHNldCBpdCB0byAibGFuZ3VhZ2VfQ09VTlRSWS5jaGFyc2V0Ii4gSW4gYW55IGNhc2UsIHdlIHJlc29sdmUgaXQKKyAgICAgdGhyb3VnaCB0aGUgY2hhcnNldC5hbGlhcyBmaWxlLiAgKi8KKyAgY29kZXNldCA9IGxvY2FsZTsKKworIyBlbmRpZgorCisjZWxpZiBkZWZpbmVkIFdJTjMyX05BVElWRQorCisgIHN0YXRpYyBjaGFyIGJ1ZlsyICsgMTAgKyAxXTsKKworICAvKiBXb2UzMiBoYXMgYSBmdW5jdGlvbiByZXR1cm5pbmcgdGhlIGxvY2FsZSdzIGNvZGVwYWdlIGFzIGEgbnVtYmVyLiAgKi8KKyAgc3ByaW50ZiAoYnVmLCAiQ1AldSIsIEdldEFDUCAoKSk7CisgIGNvZGVzZXQgPSBidWY7CisKKyNlbGlmIGRlZmluZWQgT1MyCisKKyAgY29uc3QgY2hhciAqbG9jYWxlOworICBzdGF0aWMgY2hhciBidWZbMiArIDEwICsgMV07CisgIFVMT05HIGNwWzNdOworICBVTE9ORyBjcGxlbjsKKworICAvKiBBbGxvdyB1c2VyIHRvIG92ZXJyaWRlIHRoZSBjb2Rlc2V0LCBhcyBzZXQgaW4gdGhlIG9wZXJhdGluZyBzeXN0ZW0sCisgICAgIHdpdGggc3RhbmRhcmQgbGFuZ3VhZ2UgZW52aXJvbm1lbnQgdmFyaWFibGVzLiAgKi8KKyAgbG9jYWxlID0gZ2V0ZW52ICgiTENfQUxMIik7CisgIGlmIChsb2NhbGUgPT0gTlVMTCB8fCBsb2NhbGVbMF0gPT0gJ1wwJykKKyAgICB7CisgICAgICBsb2NhbGUgPSBnZXRlbnYgKCJMQ19DVFlQRSIpOworICAgICAgaWYgKGxvY2FsZSA9PSBOVUxMIHx8IGxvY2FsZVswXSA9PSAnXDAnKQorCWxvY2FsZSA9IGdldGVudiAoIkxBTkciKTsKKyAgICB9CisgIGlmIChsb2NhbGUgIT0gTlVMTCAmJiBsb2NhbGVbMF0gIT0gJ1wwJykKKyAgICB7CisgICAgICAvKiBJZiB0aGUgbG9jYWxlIG5hbWUgY29udGFpbnMgYW4gZW5jb2RpbmcgYWZ0ZXIgdGhlIGRvdCwgcmV0dXJuIGl0LiAgKi8KKyAgICAgIGNvbnN0IGNoYXIgKmRvdCA9IHN0cmNociAobG9jYWxlLCAnLicpOworCisgICAgICBpZiAoZG90ICE9IE5VTEwpCisJeworCSAgY29uc3QgY2hhciAqbW9kaWZpZXI7CisKKwkgIGRvdCsrOworCSAgLyogTG9vayBmb3IgdGhlIHBvc3NpYmxlIEAuLi4gdHJhaWxlciBhbmQgcmVtb3ZlIGl0LCBpZiBhbnkuICAqLworCSAgbW9kaWZpZXIgPSBzdHJjaHIgKGRvdCwgJ0AnKTsKKwkgIGlmIChtb2RpZmllciA9PSBOVUxMKQorCSAgICByZXR1cm4gZG90OworCSAgaWYgKG1vZGlmaWVyIC0gZG90IDwgc2l6ZW9mIChidWYpKQorCSAgICB7CisJICAgICAgbWVtY3B5IChidWYsIGRvdCwgbW9kaWZpZXIgLSBkb3QpOworCSAgICAgIGJ1ZiBbbW9kaWZpZXIgLSBkb3RdID0gJ1wwJzsKKwkgICAgICByZXR1cm4gYnVmOworCSAgICB9CisJfQorCisgICAgICAvKiBSZXNvbHZlIHRocm91Z2ggdGhlIGNoYXJzZXQuYWxpYXMgZmlsZS4gICovCisgICAgICBjb2Rlc2V0ID0gbG9jYWxlOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIE9TLzIgaGFzIGEgZnVuY3Rpb24gcmV0dXJuaW5nIHRoZSBsb2NhbGUncyBjb2RlcGFnZSBhcyBhIG51bWJlci4gICovCisgICAgICBpZiAoRG9zUXVlcnlDcCAoc2l6ZW9mIChjcCksIGNwLCAmY3BsZW4pKQorCWNvZGVzZXQgPSAiIjsKKyAgICAgIGVsc2UKKwl7CisJICBzcHJpbnRmIChidWYsICJDUCV1IiwgY3BbMF0pOworCSAgY29kZXNldCA9IGJ1ZjsKKwl9CisgICAgfQorCisjZW5kaWYKKworICBpZiAoY29kZXNldCA9PSBOVUxMKQorICAgIC8qIFRoZSBjYW5vbmljYWwgbmFtZSBjYW5ub3QgYmUgZGV0ZXJtaW5lZC4gICovCisgICAgY29kZXNldCA9ICIiOworCisgIC8qIFJlc29sdmUgYWxpYXMuICovCisgIGZvciAoYWxpYXNlcyA9IGdldF9jaGFyc2V0X2FsaWFzZXMgKCk7CisgICAgICAgKmFsaWFzZXMgIT0gJ1wwJzsKKyAgICAgICBhbGlhc2VzICs9IHN0cmxlbiAoYWxpYXNlcykgKyAxLCBhbGlhc2VzICs9IHN0cmxlbiAoYWxpYXNlcykgKyAxKQorICAgIGlmIChzdHJjbXAgKGNvZGVzZXQsIGFsaWFzZXMpID09IDAKKwl8fCAoYWxpYXNlc1swXSA9PSAnKicgJiYgYWxpYXNlc1sxXSA9PSAnXDAnKSkKKyAgICAgIHsKKwljb2Rlc2V0ID0gYWxpYXNlcyArIHN0cmxlbiAoYWxpYXNlcykgKyAxOworCWJyZWFrOworICAgICAgfQorCisgIC8qIERvbid0IHJldHVybiBhbiBlbXB0eSBzdHJpbmcuICBHTlUgbGliYyBhbmQgR05VIGxpYmljb252IGludGVycHJldAorICAgICB0aGUgZW1wdHkgc3RyaW5nIGFzIGRlbm90aW5nICJ0aGUgbG9jYWxlJ3MgY2hhcmFjdGVyIGVuY29kaW5nIiwKKyAgICAgdGh1cyBHTlUgbGliaWNvbnYgd291bGQgY2FsbCB0aGlzIGZ1bmN0aW9uIGEgc2Vjb25kIHRpbWUuICAqLworICBpZiAoY29kZXNldFswXSA9PSAnXDAnKQorICAgIGNvZGVzZXQgPSAiQVNDSUkiOworCisgIHJldHVybiBjb2Rlc2V0OworfQpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYi9sb2NhbGNoYXJzZXQuaCBiL3BhcnRlZC0xLjguNy9saWIvbG9jYWxjaGFyc2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTAzMDIxMAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWIvbG9jYWxjaGFyc2V0LmgKQEAgLTAsMCArMSw0MSBAQAorLyogRGV0ZXJtaW5lIGEgY2Fub25pY2FsIG5hbWUgZm9yIHRoZSBjdXJyZW50IGxvY2FsZSdzIGNoYXJhY3RlciBlbmNvZGluZy4KKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDSEFSU0VUIExpYnJhcnkuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworCisjaWZuZGVmIF9MT0NBTENIQVJTRVRfSAorI2RlZmluZSBfTE9DQUxDSEFSU0VUX0gKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKworLyogRGV0ZXJtaW5lIHRoZSBjdXJyZW50IGxvY2FsZSdzIGNoYXJhY3RlciBlbmNvZGluZywgYW5kIGNhbm9uaWNhbGl6ZSBpdAorICAgaW50byBvbmUgb2YgdGhlIGNhbm9uaWNhbCBuYW1lcyBsaXN0ZWQgaW4gY29uZmlnLmNoYXJzZXQuCisgICBUaGUgcmVzdWx0IG11c3Qgbm90IGJlIGZyZWVkOyBpdCBpcyBzdGF0aWNhbGx5IGFsbG9jYXRlZC4KKyAgIElmIHRoZSBjYW5vbmljYWwgbmFtZSBjYW5ub3QgYmUgZGV0ZXJtaW5lZCwgdGhlIHJlc3VsdCBpcyBhIG5vbi1jYW5vbmljYWwKKyAgIG5hbWUuICAqLworZXh0ZXJuIGNvbnN0IGNoYXIgKiBsb2NhbGVfY2hhcnNldCAodm9pZCk7CisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworCisjZW5kaWYgLyogX0xPQ0FMQ0hBUlNFVF9IICovCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGliL2xvbmctb3B0aW9ucy5jIGIvcGFydGVkLTEuOC43L2xpYi9sb25nLW9wdGlvbnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjYxNjYxCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYi9sb25nLW9wdGlvbnMuYwpAQCAtMCwwICsxLDg5IEBACisvKiBVdGlsaXR5IHRvIGFjY2VwdCAtLWhlbHAgYW5kIC0tdmVyc2lvbiBvcHRpb25zIGFzIHVub2J0cnVzaXZlbHkgYXMgcG9zc2libGUuCisKKyAgIENvcHlyaWdodCAoQykgMTk5MywgMTk5NCwgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwKKyAgIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworCisvKiBXcml0dGVuIGJ5IEppbSBNZXllcmluZy4gICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworLyogU3BlY2lmaWNhdGlvbi4gICovCisjaW5jbHVkZSAibG9uZy1vcHRpb25zLmgiCisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGdldG9wdC5oPgorCisjaW5jbHVkZSAidmVyc2lvbi1ldGMuaCIKKworc3RhdGljIHN0cnVjdCBvcHRpb24gY29uc3QgbG9uZ19vcHRpb25zW10gPQoreworICB7ImhlbHAiLCBub19hcmd1bWVudCwgTlVMTCwgJ2gnfSwKKyAgeyJ2ZXJzaW9uIiwgbm9fYXJndW1lbnQsIE5VTEwsICd2J30sCisgIHtOVUxMLCAwLCBOVUxMLCAwfQorfTsKKworLyogUHJvY2VzcyBsb25nIG9wdGlvbnMgLS1oZWxwIGFuZCAtLXZlcnNpb24sIGJ1dCBvbmx5IGlmIGFyZ2MgPT0gMi4KKyAgIEJlIGNhcmVmdWwgbm90IHRvIGdvYmJsZSB1cCBgLS0nLiAgKi8KKwordm9pZAorcGFyc2VfbG9uZ19vcHRpb25zIChpbnQgYXJnYywKKwkJICAgIGNoYXIgKiphcmd2LAorCQkgICAgY29uc3QgY2hhciAqY29tbWFuZF9uYW1lLAorCQkgICAgY29uc3QgY2hhciAqcGFja2FnZSwKKwkJICAgIGNvbnN0IGNoYXIgKnZlcnNpb24sCisJCSAgICB2b2lkICgqdXNhZ2VfZnVuYykgKGludCksCisJCSAgICAvKiBjb25zdCBjaGFyICphdXRob3IxLCAuLi4qLyAuLi4pCit7CisgIGludCBjOworICBpbnQgc2F2ZWRfb3B0ZXJyOworCisgIHNhdmVkX29wdGVyciA9IG9wdGVycjsKKworICAvKiBEb24ndCBwcmludCBhbiBlcnJvciBtZXNzYWdlIGZvciB1bnJlY29nbml6ZWQgb3B0aW9ucy4gICovCisgIG9wdGVyciA9IDA7CisKKyAgaWYgKGFyZ2MgPT0gMgorICAgICAgJiYgKGMgPSBnZXRvcHRfbG9uZyAoYXJnYywgYXJndiwgIisiLCBsb25nX29wdGlvbnMsIE5VTEwpKSAhPSAtMSkKKyAgICB7CisgICAgICBzd2l0Y2ggKGMpCisJeworCWNhc2UgJ2gnOgorCSAgKCp1c2FnZV9mdW5jKSAoRVhJVF9TVUNDRVNTKTsKKworCWNhc2UgJ3YnOgorCSAgeworCSAgICB2YV9saXN0IGF1dGhvcnM7CisJICAgIHZhX3N0YXJ0IChhdXRob3JzLCB1c2FnZV9mdW5jKTsKKwkgICAgdmVyc2lvbl9ldGNfdmEgKHN0ZG91dCwgY29tbWFuZF9uYW1lLCBwYWNrYWdlLCB2ZXJzaW9uLCBhdXRob3JzKTsKKwkgICAgZXhpdCAoMCk7CisJICB9CisKKwlkZWZhdWx0OgorCSAgLyogRG9uJ3QgcHJvY2VzcyBhbnkgb3RoZXIgbG9uZy1uYW1lZCBvcHRpb25zLiAgKi8KKwkgIGJyZWFrOworCX0KKyAgICB9CisKKyAgLyogUmVzdG9yZSBwcmV2aW91cyB2YWx1ZS4gICovCisgIG9wdGVyciA9IHNhdmVkX29wdGVycjsKKworICAvKiBSZXNldCB0aGlzIHRvIHplcm8gc28gdGhhdCBnZXRvcHQgaW50ZXJuYWxzIGdldCBpbml0aWFsaXplZCBmcm9tCisgICAgIHRoZSBwcm9iYWJseS1uZXcgcGFyYW1ldGVycyB3aGVuL2lmIGdldG9wdCBpcyBjYWxsZWQgbGF0ZXIuICAqLworICBvcHRpbmQgPSAwOworfQpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYi9sb25nLW9wdGlvbnMuaCBiL3BhcnRlZC0xLjguNy9saWIvbG9uZy1vcHRpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMxMDZhOAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWIvbG9uZy1vcHRpb25zLmgKQEAgLTAsMCArMSwyNiBAQAorLyogbG9uZy1vcHRpb25zLmggLS0gZGVjbGFyYXRpb24gZm9yIC0taGVscC0gYW5kIC0tdmVyc2lvbi1oYW5kbGluZyBmdW5jdGlvbi4KKyAgIENvcHlyaWdodCAoQykgMTk5MywgMTk5NCwgMTk5OCwgMTk5OSwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisKKy8qIFdyaXR0ZW4gYnkgSmltIE1leWVyaW5nLiAgKi8KKwordm9pZCBwYXJzZV9sb25nX29wdGlvbnMgKGludCBfYXJnYywKKwkJCSBjaGFyICoqX2FyZ3YsCisJCQkgY29uc3QgY2hhciAqX2NvbW1hbmRfbmFtZSwKKwkJCSBjb25zdCBjaGFyICpfcGFja2FnZSwKKwkJCSBjb25zdCBjaGFyICpfdmVyc2lvbiwKKwkJCSB2b2lkICgqX3VzYWdlKSAoaW50KSwKKwkJCSAvKiBjb25zdCBjaGFyICphdXRob3IxLCAuLi4qLyAuLi4pOwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYi9tYWxsb2MuYyBiL3BhcnRlZC0xLjguNy9saWIvbWFsbG9jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRkYWUzZQotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWIvbWFsbG9jLmMKQEAgLTAsMCArMSwzNSBAQAorLyogbWFsbG9jKCkgZnVuY3Rpb24gdGhhdCBpcyBnbGliYyBjb21wYXRpYmxlLgorCisgICBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTgsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworCisvKiB3cml0dGVuIGJ5IEppbSBNZXllcmluZyAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjdW5kZWYgbWFsbG9jCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworLyogQWxsb2NhdGUgYW4gTi1ieXRlIGJsb2NrIG9mIG1lbW9yeSBmcm9tIHRoZSBoZWFwLgorICAgSWYgTiBpcyB6ZXJvLCBhbGxvY2F0ZSBhIDEtYnl0ZSBibG9jay4gICovCisKK3ZvaWQgKgorcnBsX21hbGxvYyAoc2l6ZV90IG4pCit7CisgIGlmIChuID09IDApCisgICAgbiA9IDE7CisgIHJldHVybiBtYWxsb2MgKG4pOworfQpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYi9tZW1jaHIuYyBiL3BhcnRlZC0xLjguNy9saWIvbWVtY2hyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ0YWQ2ZAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWIvbWVtY2hyLmMKQEAgLTAsMCArMSwyMDEgQEAKKy8qIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MywgMTk5NiwgMTk5NywgMTk5OSwgMjAwMCwgMjAwMywgMjAwNCwgMjAwNiBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIEJhc2VkIG9uIHN0cmxlbiBpbXBsZW1lbnRhdGlvbiBieSBUb3Jiam9ybiBHcmFubHVuZCAodGVnZUBzaWNzLnNlKSwKKyAgIHdpdGggaGVscCBmcm9tIERhbiBTYWhsaW4gKGRhbkBzaWNzLnNlKSBhbmQKKyAgIGNvbW1lbnRhcnkgYnkgSmltIEJsYW5keSAoamltYkBhaS5taXQuZWR1KTsKKyAgIGFkYXB0YXRpb24gdG8gbWVtY2hyIHN1Z2dlc3RlZCBieSBEaWNrIEthcnBpbnNraSAoZGlja0BjY2EudWNzZi5lZHUpLAorICAgYW5kIGltcGxlbWVudGVkIGJ5IFJvbGFuZCBNY0dyYXRoIChyb2xhbmRAYWkubWl0LmVkdSkuCisKK05PVEU6IFRoZSBjYW5vbmljYWwgc291cmNlIG9mIHRoaXMgZmlsZSBpcyBtYWludGFpbmVkIHdpdGggdGhlIEdOVSBDIExpYnJhcnkuCitCdWdzIGNhbiBiZSByZXBvcnRlZCB0byBidWctZ2xpYmNAcHJlcC5haS5taXQuZWR1LgorCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitsYXRlciB2ZXJzaW9uLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKworI2lmbmRlZiBfTElCQworIyBpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworI2lmIGRlZmluZWQgX0xJQkMKKyMgaW5jbHVkZSA8bWVtY29weS5oPgorI2Vsc2UKKyMgZGVmaW5lIHJlZ19jaGFyIGNoYXIKKyNlbmRpZgorCisjaW5jbHVkZSA8bGltaXRzLmg+CisKKyNpZiBIQVZFX0JQX1NZTV9IIHx8IGRlZmluZWQgX0xJQkMKKyMgaW5jbHVkZSA8YnAtc3ltLmg+CisjZWxzZQorIyBkZWZpbmUgQlBfU1lNKHN5bSkgc3ltCisjZW5kaWYKKworI3VuZGVmIG1lbWNocgorI3VuZGVmIF9fbWVtY2hyCisKKy8qIFNlYXJjaCBubyBtb3JlIHRoYW4gTiBieXRlcyBvZiBTIGZvciBDLiAgKi8KK3ZvaWQgKgorX19tZW1jaHIgKHZvaWQgY29uc3QgKnMsIGludCBjX2luLCBzaXplX3QgbikKK3sKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqY2hhcl9wdHI7CisgIGNvbnN0IHVuc2lnbmVkIGxvbmcgaW50ICpsb25nd29yZF9wdHI7CisgIHVuc2lnbmVkIGxvbmcgaW50IGxvbmd3b3JkLCBtYWdpY19iaXRzLCBjaGFybWFzazsKKyAgdW5zaWduZWQgcmVnX2NoYXIgYzsKKyAgaW50IGk7CisKKyAgYyA9ICh1bnNpZ25lZCBjaGFyKSBjX2luOworCisgIC8qIEhhbmRsZSB0aGUgZmlyc3QgZmV3IGNoYXJhY3RlcnMgYnkgcmVhZGluZyBvbmUgY2hhcmFjdGVyIGF0IGEgdGltZS4KKyAgICAgRG8gdGhpcyB1bnRpbCBDSEFSX1BUUiBpcyBhbGlnbmVkIG9uIGEgbG9uZ3dvcmQgYm91bmRhcnkuICAqLworICBmb3IgKGNoYXJfcHRyID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgczsKKyAgICAgICBuID4gMCAmJiAoc2l6ZV90KSBjaGFyX3B0ciAlIHNpemVvZiBsb25nd29yZCAhPSAwOworICAgICAgIC0tbiwgKytjaGFyX3B0cikKKyAgICBpZiAoKmNoYXJfcHRyID09IGMpCisgICAgICByZXR1cm4gKHZvaWQgKikgY2hhcl9wdHI7CisKKyAgLyogQWxsIHRoZXNlIGVsdWNpZGF0b3J5IGNvbW1lbnRzIHJlZmVyIHRvIDQtYnl0ZSBsb25nd29yZHMsCisgICAgIGJ1dCB0aGUgdGhlb3J5IGFwcGxpZXMgZXF1YWxseSB3ZWxsIHRvIGFueSBzaXplIGxvbmd3b3Jkcy4gICovCisKKyAgbG9uZ3dvcmRfcHRyID0gKGNvbnN0IHVuc2lnbmVkIGxvbmcgaW50ICopIGNoYXJfcHRyOworCisgIC8qIEJpdHMgMzEsIDI0LCAxNiwgYW5kIDggb2YgdGhpcyBudW1iZXIgYXJlIHplcm8uICBDYWxsIHRoZXNlIGJpdHMKKyAgICAgdGhlICJob2xlcy4iICBOb3RlIHRoYXQgdGhlcmUgaXMgYSBob2xlIGp1c3QgdG8gdGhlIGxlZnQgb2YKKyAgICAgZWFjaCBieXRlLCB3aXRoIGFuIGV4dHJhIGF0IHRoZSBlbmQ6CisKKyAgICAgYml0czogIDAxMTExMTEwIDExMTExMTEwIDExMTExMTEwIDExMTExMTExCisgICAgIGJ5dGVzOiBBQUFBQUFBQSBCQkJCQkJCQiBDQ0NDQ0NDQyBERERERERERAorCisgICAgIFRoZSAxLWJpdHMgbWFrZSBzdXJlIHRoYXQgY2FycmllcyBwcm9wYWdhdGUgdG8gdGhlIG5leHQgMC1iaXQuCisgICAgIFRoZSAwLWJpdHMgcHJvdmlkZSBob2xlcyBmb3IgY2FycmllcyB0byBmYWxsIGludG8uICAqLworCisgIC8qIFNldCBNQUdJQ19CSVRTIHRvIGJlIHRoaXMgcGF0dGVybiBvZiAxIGFuZCAwIGJpdHMuCisgICAgIFNldCBDSEFSTUFTSyB0byBiZSBhIGxvbmd3b3JkLCBlYWNoIG9mIHdob3NlIGJ5dGVzIGlzIEMuICAqLworCisgIG1hZ2ljX2JpdHMgPSAweGZlZmVmZWZlOworICBjaGFybWFzayA9IGMgfCAoYyA8PCA4KTsKKyAgY2hhcm1hc2sgfD0gY2hhcm1hc2sgPDwgMTY7CisjaWYgMHhmZmZmZmZmZlUgPCBVTE9OR19NQVgKKyAgbWFnaWNfYml0cyB8PSBtYWdpY19iaXRzIDw8IDMyOworICBjaGFybWFzayB8PSBjaGFybWFzayA8PCAzMjsKKyAgaWYgKDggPCBzaXplb2YgbG9uZ3dvcmQpCisgICAgZm9yIChpID0gNjQ7IGkgPCBzaXplb2YgbG9uZ3dvcmQgKiA4OyBpICo9IDIpCisgICAgICB7CisJbWFnaWNfYml0cyB8PSBtYWdpY19iaXRzIDw8IGk7CisJY2hhcm1hc2sgfD0gY2hhcm1hc2sgPDwgaTsKKyAgICAgIH0KKyNlbmRpZgorICBtYWdpY19iaXRzID0gKFVMT05HX01BWCA+PiAxKSAmIChtYWdpY19iaXRzIHwgMSk7CisKKyAgLyogSW5zdGVhZCBvZiB0aGUgdHJhZGl0aW9uYWwgbG9vcCB3aGljaCB0ZXN0cyBlYWNoIGNoYXJhY3RlciwKKyAgICAgd2Ugd2lsbCB0ZXN0IGEgbG9uZ3dvcmQgYXQgYSB0aW1lLiAgVGhlIHRyaWNreSBwYXJ0IGlzIHRlc3RpbmcKKyAgICAgaWYgKmFueSBvZiB0aGUgZm91ciogYnl0ZXMgaW4gdGhlIGxvbmd3b3JkIGluIHF1ZXN0aW9uIGFyZSB6ZXJvLiAgKi8KKyAgd2hpbGUgKG4gPj0gc2l6ZW9mIGxvbmd3b3JkKQorICAgIHsKKyAgICAgIC8qIFdlIHRlbnRhdGl2ZWx5IGV4aXQgdGhlIGxvb3AgaWYgYWRkaW5nIE1BR0lDX0JJVFMgdG8KKwkgTE9OR1dPUkQgZmFpbHMgdG8gY2hhbmdlIGFueSBvZiB0aGUgaG9sZSBiaXRzIG9mIExPTkdXT1JELgorCisJIDEpIElzIHRoaXMgc2FmZT8gIFdpbGwgaXQgY2F0Y2ggYWxsIHRoZSB6ZXJvIGJ5dGVzPworCSBTdXBwb3NlIHRoZXJlIGlzIGEgYnl0ZSB3aXRoIGFsbCB6ZXJvcy4gIEFueSBjYXJyeSBiaXRzCisJIHByb3BhZ2F0aW5nIGZyb20gaXRzIGxlZnQgd2lsbCBmYWxsIGludG8gdGhlIGhvbGUgYXQgaXRzCisJIGxlYXN0IHNpZ25pZmljYW50IGJpdCBhbmQgc3RvcC4gIFNpbmNlIHRoZXJlIHdpbGwgYmUgbm8KKwkgY2FycnkgZnJvbSBpdHMgbW9zdCBzaWduaWZpY2FudCBiaXQsIHRoZSBMU0Igb2YgdGhlCisJIGJ5dGUgdG8gdGhlIGxlZnQgd2lsbCBiZSB1bmNoYW5nZWQsIGFuZCB0aGUgemVybyB3aWxsIGJlCisJIGRldGVjdGVkLgorCisJIDIpIElzIHRoaXMgd29ydGh3aGlsZT8gIFdpbGwgaXQgaWdub3JlIGV2ZXJ5dGhpbmcgZXhjZXB0CisJIHplcm8gYnl0ZXM/ICBTdXBwb3NlIGV2ZXJ5IGJ5dGUgb2YgTE9OR1dPUkQgaGFzIGEgYml0IHNldAorCSBzb21ld2hlcmUuICBUaGVyZSB3aWxsIGJlIGEgY2FycnkgaW50byBiaXQgOC4gIElmIGJpdCA4CisJIGlzIHNldCwgdGhpcyB3aWxsIGNhcnJ5IGludG8gYml0IDE2LiAgSWYgYml0IDggaXMgY2xlYXIsCisJIG9uZSBvZiBiaXRzIDktMTUgbXVzdCBiZSBzZXQsIHNvIHRoZXJlIHdpbGwgYmUgYSBjYXJyeQorCSBpbnRvIGJpdCAxNi4gIFNpbWlsYXJseSwgdGhlcmUgd2lsbCBiZSBhIGNhcnJ5IGludG8gYml0CisJIDI0LiAgSWYgb25lIG9mIGJpdHMgMjQtMzAgaXMgc2V0LCB0aGVyZSB3aWxsIGJlIGEgY2FycnkKKwkgaW50byBiaXQgMzEsIHNvIGFsbCBvZiB0aGUgaG9sZSBiaXRzIHdpbGwgYmUgY2hhbmdlZC4KKworCSBUaGUgb25lIG1pc2ZpcmUgb2NjdXJzIHdoZW4gYml0cyAyNC0zMCBhcmUgY2xlYXIgYW5kIGJpdAorCSAzMSBpcyBzZXQ7IGluIHRoaXMgY2FzZSwgdGhlIGhvbGUgYXQgYml0IDMxIGlzIG5vdAorCSBjaGFuZ2VkLiAgSWYgd2UgaGFkIGFjY2VzcyB0byB0aGUgcHJvY2Vzc29yIGNhcnJ5IGZsYWcsCisJIHdlIGNvdWxkIGNsb3NlIHRoaXMgbG9vcGhvbGUgYnkgcHV0dGluZyB0aGUgZm91cnRoIGhvbGUKKwkgYXQgYml0IDMyIQorCisJIFNvIGl0IGlnbm9yZXMgZXZlcnl0aGluZyBleGNlcHQgMTI4J3MsIHdoZW4gdGhleSdyZSBhbGlnbmVkCisJIHByb3Blcmx5LgorCisJIDMpIEJ1dCB3YWl0ISAgQXJlbid0IHdlIGxvb2tpbmcgZm9yIEMsIG5vdCB6ZXJvPworCSBHb29kIHBvaW50LiAgU28gd2hhdCB3ZSBkbyBpcyBYT1IgTE9OR1dPUkQgd2l0aCBhIGxvbmd3b3JkLAorCSBlYWNoIG9mIHdob3NlIGJ5dGVzIGlzIEMuICBUaGlzIHR1cm5zIGVhY2ggYnl0ZSB0aGF0IGlzIEMKKwkgaW50byBhIHplcm8uICAqLworCisgICAgICBsb25nd29yZCA9ICpsb25nd29yZF9wdHIrKyBeIGNoYXJtYXNrOworCisgICAgICAvKiBBZGQgTUFHSUNfQklUUyB0byBMT05HV09SRC4gICovCisgICAgICBpZiAoKCgobG9uZ3dvcmQgKyBtYWdpY19iaXRzKQorCisJICAgIC8qIFNldCB0aG9zZSBiaXRzIHRoYXQgd2VyZSB1bmNoYW5nZWQgYnkgdGhlIGFkZGl0aW9uLiAgKi8KKwkgICAgXiB+bG9uZ3dvcmQpCisKKwkgICAvKiBMb29rIGF0IG9ubHkgdGhlIGhvbGUgYml0cy4gIElmIGFueSBvZiB0aGUgaG9sZSBiaXRzCisJICAgICAgYXJlIHVuY2hhbmdlZCwgbW9zdCBsaWtlbHkgb25lIG9mIHRoZSBieXRlcyB3YXMgYQorCSAgICAgIHplcm8uICAqLworCSAgICYgfm1hZ2ljX2JpdHMpICE9IDApCisJeworCSAgLyogV2hpY2ggb2YgdGhlIGJ5dGVzIHdhcyBDPyAgSWYgbm9uZSBvZiB0aGVtIHdlcmUsIGl0IHdhcworCSAgICAgYSBtaXNmaXJlOyBjb250aW51ZSB0aGUgc2VhcmNoLiAgKi8KKworCSAgY29uc3QgdW5zaWduZWQgY2hhciAqY3AgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKSAobG9uZ3dvcmRfcHRyIC0gMSk7CisKKwkgIGlmIChjcFswXSA9PSBjKQorCSAgICByZXR1cm4gKHZvaWQgKikgY3A7CisJICBpZiAoY3BbMV0gPT0gYykKKwkgICAgcmV0dXJuICh2b2lkICopICZjcFsxXTsKKwkgIGlmIChjcFsyXSA9PSBjKQorCSAgICByZXR1cm4gKHZvaWQgKikgJmNwWzJdOworCSAgaWYgKGNwWzNdID09IGMpCisJICAgIHJldHVybiAodm9pZCAqKSAmY3BbM107CisJICBpZiAoNCA8IHNpemVvZiBsb25nd29yZCAmJiBjcFs0XSA9PSBjKQorCSAgICByZXR1cm4gKHZvaWQgKikgJmNwWzRdOworCSAgaWYgKDUgPCBzaXplb2YgbG9uZ3dvcmQgJiYgY3BbNV0gPT0gYykKKwkgICAgcmV0dXJuICh2b2lkICopICZjcFs1XTsKKwkgIGlmICg2IDwgc2l6ZW9mIGxvbmd3b3JkICYmIGNwWzZdID09IGMpCisJICAgIHJldHVybiAodm9pZCAqKSAmY3BbNl07CisJICBpZiAoNyA8IHNpemVvZiBsb25nd29yZCAmJiBjcFs3XSA9PSBjKQorCSAgICByZXR1cm4gKHZvaWQgKikgJmNwWzddOworCSAgaWYgKDggPCBzaXplb2YgbG9uZ3dvcmQpCisJICAgIGZvciAoaSA9IDg7IGkgPCBzaXplb2YgbG9uZ3dvcmQ7IGkrKykKKwkgICAgICBpZiAoY3BbaV0gPT0gYykKKwkJcmV0dXJuICh2b2lkICopICZjcFtpXTsKKwl9CisKKyAgICAgIG4gLT0gc2l6ZW9mIGxvbmd3b3JkOworICAgIH0KKworICBjaGFyX3B0ciA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopIGxvbmd3b3JkX3B0cjsKKworICB3aGlsZSAobi0tID4gMCkKKyAgICB7CisgICAgICBpZiAoKmNoYXJfcHRyID09IGMpCisJcmV0dXJuICh2b2lkICopIGNoYXJfcHRyOworICAgICAgZWxzZQorCSsrY2hhcl9wdHI7CisgICAgfQorCisgIHJldHVybiAwOworfQorI2lmZGVmIHdlYWtfYWxpYXMKK3dlYWtfYWxpYXMgKF9fbWVtY2hyLCBCUF9TWU0gKG1lbWNocikpCisjZW5kaWYKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWIvbWVtY21wLmMgYi9wYXJ0ZWQtMS44LjcvbGliL21lbWNtcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmOThiZmEKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGliL21lbWNtcC5jCkBAIC0wLDAgKzEsMzYzIEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTMsIDE5OTUsIDE5OTcsIDE5OTgsIDIwMDMsIDIwMDYgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLgorCisgICBDb250cmlidXRlZCBieSBUb3Jiam9ybiBHcmFubHVuZCAodGVnZUBzaWNzLnNlKS4KKworICAgTk9URTogVGhlIGNhbm9uaWNhbCBzb3VyY2Ugb2YgdGhpcyBmaWxlIGlzIG1haW50YWluZWQgd2l0aCB0aGUgR05VIEMgTGlicmFyeS4KKyAgIEJ1Z3MgY2FuIGJlIHJlcG9ydGVkIHRvIGJ1Zy1nbGliY0BwcmVwLmFpLm1pdC5lZHUuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgIGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLAorICAgVVNBLiAgKi8KKworI2lmbmRlZiBfTElCQworIyBpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyN1bmRlZiBtZW1jbXAKKworI2lmZGVmIF9MSUJDCisKKyMgaW5jbHVkZSA8bWVtY29weS5oPgorIyBpbmNsdWRlIDxlbmRpYW4uaD4KKworIyBpZiBfX0JZVEVfT1JERVIgPT0gX19CSUdfRU5ESUFOCisjICBkZWZpbmUgV09SRFNfQklHRU5ESUFOCisjIGVuZGlmCisKKyNlbHNlCS8qIE5vdCBpbiB0aGUgR05VIEMgbGlicmFyeS4gICovCisKKyMgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKy8qIFR5cGUgdG8gdXNlIGZvciBhbGlnbmVkIG1lbW9yeSBvcGVyYXRpb25zLgorICAgVGhpcyBzaG91bGQgbm9ybWFsbHkgYmUgdGhlIGJpZ2dlc3QgdHlwZSBzdXBwb3J0ZWQgYnkgYSBzaW5nbGUgbG9hZAorICAgYW5kIHN0b3JlLiAgTXVzdCBiZSBhbiB1bnNpZ25lZCB0eXBlLiAgKi8KKyMgZGVmaW5lIG9wX3QJdW5zaWduZWQgbG9uZyBpbnQKKyMgZGVmaW5lIE9QU0laCShzaXplb2Yob3BfdCkpCisKKy8qIFRocmVzaG9sZCB2YWx1ZSBmb3Igd2hlbiB0byBlbnRlciB0aGUgdW5yb2xsZWQgbG9vcHMuICAqLworIyBkZWZpbmUgT1BfVF9USFJFUwkxNgorCisvKiBUeXBlIHRvIHVzZSBmb3IgdW5hbGlnbmVkIG9wZXJhdGlvbnMuICAqLwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIGJ5dGU7CisKKyMgaWZuZGVmIFdPUkRTX0JJR0VORElBTgorIyAgZGVmaW5lIE1FUkdFKHcwLCBzaF8xLCB3MSwgc2hfMikgKCgodzApID4+IChzaF8xKSkgfCAoKHcxKSA8PCAoc2hfMikpKQorIyBlbHNlCisjICBkZWZpbmUgTUVSR0UodzAsIHNoXzEsIHcxLCBzaF8yKSAoKCh3MCkgPDwgKHNoXzEpKSB8ICgodzEpID4+IChzaF8yKSkpCisjIGVuZGlmCisKKyNlbmRpZgkvKiBJbiB0aGUgR05VIEMgbGlicmFyeS4gICovCisKKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKyMgZGVmaW5lIENNUF9MVF9PUl9HVChhLCBiKSAoKGEpID4gKGIpID8gMSA6IC0xKQorI2Vsc2UKKyMgZGVmaW5lIENNUF9MVF9PUl9HVChhLCBiKSBtZW1jbXBfYnl0ZXMgKChhKSwgKGIpKQorI2VuZGlmCisKKy8qIEJFIFZFUlkgQ0FSRUZVTCBJRiBZT1UgQ0hBTkdFIFRISVMgQ09ERSEgICovCisKKy8qIFRoZSBzdHJhdGVneSBvZiB0aGlzIG1lbWNtcCBpczoKKworICAgMS4gQ29tcGFyZSBieXRlcyB1bnRpbCBvbmUgb2YgdGhlIGJsb2NrIHBvaW50ZXJzIGlzIGFsaWduZWQuCisKKyAgIDIuIENvbXBhcmUgdXNpbmcgbWVtY21wX2NvbW1vbl9hbGlnbm1lbnQgb3IKKyAgICAgIG1lbWNtcF9ub3RfY29tbW9uX2FsaWdubWVudCwgcmVnYXJkaW5nIHRoZSBhbGlnbm1lbnQgb2YgdGhlIG90aGVyCisgICAgICBibG9jayBhZnRlciB0aGUgaW5pdGlhbCBieXRlIG9wZXJhdGlvbnMuICBUaGUgbWF4aW11bSBudW1iZXIgb2YKKyAgICAgIGZ1bGwgd29yZHMgKG9mIHR5cGUgb3BfdCkgYXJlIGNvbXBhcmVkIGluIHRoaXMgd2F5LgorCisgICAzLiBDb21wYXJlIHRoZSBmZXcgcmVtYWluaW5nIGJ5dGVzLiAgKi8KKworI2lmbmRlZiBXT1JEU19CSUdFTkRJQU4KKy8qIG1lbWNtcF9ieXRlcyAtLSBDb21wYXJlIEEgYW5kIEIgYnl0ZXdpc2UgaW4gdGhlIGJ5dGUgb3JkZXIgb2YgdGhlIG1hY2hpbmUuCisgICBBIGFuZCBCIGFyZSBrbm93biB0byBiZSBkaWZmZXJlbnQuCisgICBUaGlzIGlzIG5lZWRlZCBvbmx5IG9uIGxpdHRsZS1lbmRpYW4gbWFjaGluZXMuICAqLworCisjIGlmZGVmICBfX0dOVUNfXworX19pbmxpbmUKKyMgZW5kaWYKK3N0YXRpYyBpbnQKK21lbWNtcF9ieXRlcyAobG9uZyB1bnNpZ25lZCBpbnQgYSwgbG9uZyB1bnNpZ25lZCBpbnQgYikKK3sKKyAgbG9uZyBpbnQgc3JjcDEgPSAobG9uZyBpbnQpICZhOworICBsb25nIGludCBzcmNwMiA9IChsb25nIGludCkgJmI7CisgIG9wX3QgYTAsIGIwOworCisgIGRvCisgICAgeworICAgICAgYTAgPSAoKGJ5dGUgKikgc3JjcDEpWzBdOworICAgICAgYjAgPSAoKGJ5dGUgKikgc3JjcDIpWzBdOworICAgICAgc3JjcDEgKz0gMTsKKyAgICAgIHNyY3AyICs9IDE7CisgICAgfQorICB3aGlsZSAoYTAgPT0gYjApOworICByZXR1cm4gYTAgLSBiMDsKK30KKyNlbmRpZgorCisvKiBtZW1jbXBfY29tbW9uX2FsaWdubWVudCAtLSBDb21wYXJlIGJsb2NrcyBhdCBTUkNQMSBhbmQgU1JDUDIgd2l0aCBMRU4gYG9wX3QnCisgICBvYmplY3RzIChub3QgTEVOIGJ5dGVzISkuICBCb3RoIFNSQ1AxIGFuZCBTUkNQMiBzaG91bGQgYmUgYWxpZ25lZCBmb3IKKyAgIG1lbW9yeSBvcGVyYXRpb25zIG9uIGBvcF90J3MuICAqLworI2lmZGVmCV9fR05VQ19fCitfX2lubGluZQorI2VuZGlmCitzdGF0aWMgaW50CittZW1jbXBfY29tbW9uX2FsaWdubWVudCAobG9uZyBpbnQgc3JjcDEsIGxvbmcgaW50IHNyY3AyLCBzaXplX3QgbGVuKQoreworICBvcF90IGEwLCBhMTsKKyAgb3BfdCBiMCwgYjE7CisKKyAgc3dpdGNoIChsZW4gJSA0KQorICAgIHsKKyAgICBkZWZhdWx0OiAvKiBBdm9pZCB3YXJuaW5nIGFib3V0IHVuaW5pdGlhbGl6ZWQgbG9jYWwgdmFyaWFibGVzLiAgKi8KKyAgICBjYXNlIDI6CisgICAgICBhMCA9ICgob3BfdCAqKSBzcmNwMSlbMF07CisgICAgICBiMCA9ICgob3BfdCAqKSBzcmNwMilbMF07CisgICAgICBzcmNwMSAtPSAyICogT1BTSVo7CisgICAgICBzcmNwMiAtPSAyICogT1BTSVo7CisgICAgICBsZW4gKz0gMjsKKyAgICAgIGdvdG8gZG8xOworICAgIGNhc2UgMzoKKyAgICAgIGExID0gKChvcF90ICopIHNyY3AxKVswXTsKKyAgICAgIGIxID0gKChvcF90ICopIHNyY3AyKVswXTsKKyAgICAgIHNyY3AxIC09IE9QU0laOworICAgICAgc3JjcDIgLT0gT1BTSVo7CisgICAgICBsZW4gKz0gMTsKKyAgICAgIGdvdG8gZG8yOworICAgIGNhc2UgMDoKKyAgICAgIGlmIChPUF9UX1RIUkVTIDw9IDMgKiBPUFNJWiAmJiBsZW4gPT0gMCkKKwlyZXR1cm4gMDsKKyAgICAgIGEwID0gKChvcF90ICopIHNyY3AxKVswXTsKKyAgICAgIGIwID0gKChvcF90ICopIHNyY3AyKVswXTsKKyAgICAgIGdvdG8gZG8zOworICAgIGNhc2UgMToKKyAgICAgIGExID0gKChvcF90ICopIHNyY3AxKVswXTsKKyAgICAgIGIxID0gKChvcF90ICopIHNyY3AyKVswXTsKKyAgICAgIHNyY3AxICs9IE9QU0laOworICAgICAgc3JjcDIgKz0gT1BTSVo7CisgICAgICBsZW4gLT0gMTsKKyAgICAgIGlmIChPUF9UX1RIUkVTIDw9IDMgKiBPUFNJWiAmJiBsZW4gPT0gMCkKKwlnb3RvIGRvMDsKKyAgICAgIC8qIEZhbGwgdGhyb3VnaC4gICovCisgICAgfQorCisgIGRvCisgICAgeworICAgICAgYTAgPSAoKG9wX3QgKikgc3JjcDEpWzBdOworICAgICAgYjAgPSAoKG9wX3QgKikgc3JjcDIpWzBdOworICAgICAgaWYgKGExICE9IGIxKQorCXJldHVybiBDTVBfTFRfT1JfR1QgKGExLCBiMSk7CisKKyAgICBkbzM6CisgICAgICBhMSA9ICgob3BfdCAqKSBzcmNwMSlbMV07CisgICAgICBiMSA9ICgob3BfdCAqKSBzcmNwMilbMV07CisgICAgICBpZiAoYTAgIT0gYjApCisJcmV0dXJuIENNUF9MVF9PUl9HVCAoYTAsIGIwKTsKKworICAgIGRvMjoKKyAgICAgIGEwID0gKChvcF90ICopIHNyY3AxKVsyXTsKKyAgICAgIGIwID0gKChvcF90ICopIHNyY3AyKVsyXTsKKyAgICAgIGlmIChhMSAhPSBiMSkKKwlyZXR1cm4gQ01QX0xUX09SX0dUIChhMSwgYjEpOworCisgICAgZG8xOgorICAgICAgYTEgPSAoKG9wX3QgKikgc3JjcDEpWzNdOworICAgICAgYjEgPSAoKG9wX3QgKikgc3JjcDIpWzNdOworICAgICAgaWYgKGEwICE9IGIwKQorCXJldHVybiBDTVBfTFRfT1JfR1QgKGEwLCBiMCk7CisKKyAgICAgIHNyY3AxICs9IDQgKiBPUFNJWjsKKyAgICAgIHNyY3AyICs9IDQgKiBPUFNJWjsKKyAgICAgIGxlbiAtPSA0OworICAgIH0KKyAgd2hpbGUgKGxlbiAhPSAwKTsKKworICAvKiBUaGlzIGlzIHRoZSByaWdodCBwb3NpdGlvbiBmb3IgZG8wLiAgUGxlYXNlIGRvbid0IG1vdmUKKyAgICAgaXQgaW50byB0aGUgbG9vcC4gICovCisgZG8wOgorICBpZiAoYTEgIT0gYjEpCisgICAgcmV0dXJuIENNUF9MVF9PUl9HVCAoYTEsIGIxKTsKKyAgcmV0dXJuIDA7Cit9CisKKy8qIG1lbWNtcF9ub3RfY29tbW9uX2FsaWdubWVudCAtLSBDb21wYXJlIGJsb2NrcyBhdCBTUkNQMSBhbmQgU1JDUDIgd2l0aCBMRU4KKyAgIGBvcF90JyBvYmplY3RzIChub3QgTEVOIGJ5dGVzISkuICBTUkNQMiBzaG91bGQgYmUgYWxpZ25lZCBmb3IgbWVtb3J5CisgICBvcGVyYXRpb25zIG9uIGBvcF90JywgYnV0IFNSQ1AxICpzaG91bGQgYmUgdW5hbGlnbmVkKi4gICovCisjaWZkZWYJX19HTlVDX18KK19faW5saW5lCisjZW5kaWYKK3N0YXRpYyBpbnQKK21lbWNtcF9ub3RfY29tbW9uX2FsaWdubWVudCAobG9uZyBpbnQgc3JjcDEsIGxvbmcgaW50IHNyY3AyLCBzaXplX3QgbGVuKQoreworICBvcF90IGEwLCBhMSwgYTIsIGEzOworICBvcF90IGIwLCBiMSwgYjIsIGIzOworICBvcF90IHg7CisgIGludCBzaGwsIHNocjsKKworICAvKiBDYWxjdWxhdGUgaG93IHRvIHNoaWZ0IGEgd29yZCByZWFkIGF0IHRoZSBtZW1vcnkgb3BlcmF0aW9uCisgICAgIGFsaWduZWQgc3JjcDEgdG8gbWFrZSBpdCBhbGlnbmVkIGZvciBjb21wYXJpc29uLiAgKi8KKworICBzaGwgPSA4ICogKHNyY3AxICUgT1BTSVopOworICBzaHIgPSA4ICogT1BTSVogLSBzaGw7CisKKyAgLyogTWFrZSBTUkNQMSBhbGlnbmVkIGJ5IHJvdW5kaW5nIGl0IGRvd24gdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgYG9wX3QnCisgICAgIGl0IHBvaW50cyBpbiB0aGUgbWlkZGxlIG9mLiAgKi8KKyAgc3JjcDEgJj0gLU9QU0laOworCisgIHN3aXRjaCAobGVuICUgNCkKKyAgICB7CisgICAgZGVmYXVsdDogLyogQXZvaWQgd2FybmluZyBhYm91dCB1bmluaXRpYWxpemVkIGxvY2FsIHZhcmlhYmxlcy4gICovCisgICAgY2FzZSAyOgorICAgICAgYTEgPSAoKG9wX3QgKikgc3JjcDEpWzBdOworICAgICAgYTIgPSAoKG9wX3QgKikgc3JjcDEpWzFdOworICAgICAgYjIgPSAoKG9wX3QgKikgc3JjcDIpWzBdOworICAgICAgc3JjcDEgLT0gMSAqIE9QU0laOworICAgICAgc3JjcDIgLT0gMiAqIE9QU0laOworICAgICAgbGVuICs9IDI7CisgICAgICBnb3RvIGRvMTsKKyAgICBjYXNlIDM6CisgICAgICBhMCA9ICgob3BfdCAqKSBzcmNwMSlbMF07CisgICAgICBhMSA9ICgob3BfdCAqKSBzcmNwMSlbMV07CisgICAgICBiMSA9ICgob3BfdCAqKSBzcmNwMilbMF07CisgICAgICBzcmNwMiAtPSAxICogT1BTSVo7CisgICAgICBsZW4gKz0gMTsKKyAgICAgIGdvdG8gZG8yOworICAgIGNhc2UgMDoKKyAgICAgIGlmIChPUF9UX1RIUkVTIDw9IDMgKiBPUFNJWiAmJiBsZW4gPT0gMCkKKwlyZXR1cm4gMDsKKyAgICAgIGEzID0gKChvcF90ICopIHNyY3AxKVswXTsKKyAgICAgIGEwID0gKChvcF90ICopIHNyY3AxKVsxXTsKKyAgICAgIGIwID0gKChvcF90ICopIHNyY3AyKVswXTsKKyAgICAgIHNyY3AxICs9IDEgKiBPUFNJWjsKKyAgICAgIGdvdG8gZG8zOworICAgIGNhc2UgMToKKyAgICAgIGEyID0gKChvcF90ICopIHNyY3AxKVswXTsKKyAgICAgIGEzID0gKChvcF90ICopIHNyY3AxKVsxXTsKKyAgICAgIGIzID0gKChvcF90ICopIHNyY3AyKVswXTsKKyAgICAgIHNyY3AxICs9IDIgKiBPUFNJWjsKKyAgICAgIHNyY3AyICs9IDEgKiBPUFNJWjsKKyAgICAgIGxlbiAtPSAxOworICAgICAgaWYgKE9QX1RfVEhSRVMgPD0gMyAqIE9QU0laICYmIGxlbiA9PSAwKQorCWdvdG8gZG8wOworICAgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KKyAgICB9CisKKyAgZG8KKyAgICB7CisgICAgICBhMCA9ICgob3BfdCAqKSBzcmNwMSlbMF07CisgICAgICBiMCA9ICgob3BfdCAqKSBzcmNwMilbMF07CisgICAgICB4ID0gTUVSR0UoYTIsIHNobCwgYTMsIHNocik7CisgICAgICBpZiAoeCAhPSBiMykKKwlyZXR1cm4gQ01QX0xUX09SX0dUICh4LCBiMyk7CisKKyAgICBkbzM6CisgICAgICBhMSA9ICgob3BfdCAqKSBzcmNwMSlbMV07CisgICAgICBiMSA9ICgob3BfdCAqKSBzcmNwMilbMV07CisgICAgICB4ID0gTUVSR0UoYTMsIHNobCwgYTAsIHNocik7CisgICAgICBpZiAoeCAhPSBiMCkKKwlyZXR1cm4gQ01QX0xUX09SX0dUICh4LCBiMCk7CisKKyAgICBkbzI6CisgICAgICBhMiA9ICgob3BfdCAqKSBzcmNwMSlbMl07CisgICAgICBiMiA9ICgob3BfdCAqKSBzcmNwMilbMl07CisgICAgICB4ID0gTUVSR0UoYTAsIHNobCwgYTEsIHNocik7CisgICAgICBpZiAoeCAhPSBiMSkKKwlyZXR1cm4gQ01QX0xUX09SX0dUICh4LCBiMSk7CisKKyAgICBkbzE6CisgICAgICBhMyA9ICgob3BfdCAqKSBzcmNwMSlbM107CisgICAgICBiMyA9ICgob3BfdCAqKSBzcmNwMilbM107CisgICAgICB4ID0gTUVSR0UoYTEsIHNobCwgYTIsIHNocik7CisgICAgICBpZiAoeCAhPSBiMikKKwlyZXR1cm4gQ01QX0xUX09SX0dUICh4LCBiMik7CisKKyAgICAgIHNyY3AxICs9IDQgKiBPUFNJWjsKKyAgICAgIHNyY3AyICs9IDQgKiBPUFNJWjsKKyAgICAgIGxlbiAtPSA0OworICAgIH0KKyAgd2hpbGUgKGxlbiAhPSAwKTsKKworICAvKiBUaGlzIGlzIHRoZSByaWdodCBwb3NpdGlvbiBmb3IgZG8wLiAgUGxlYXNlIGRvbid0IG1vdmUKKyAgICAgaXQgaW50byB0aGUgbG9vcC4gICovCisgZG8wOgorICB4ID0gTUVSR0UoYTIsIHNobCwgYTMsIHNocik7CisgIGlmICh4ICE9IGIzKQorICAgIHJldHVybiBDTVBfTFRfT1JfR1QgKHgsIGIzKTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorcnBsX21lbWNtcCAoY29uc3Qgdm9pZCAqczEsIGNvbnN0IHZvaWQgKnMyLCBzaXplX3QgbGVuKQoreworICBvcF90IGEwOworICBvcF90IGIwOworICBsb25nIGludCBzcmNwMSA9IChsb25nIGludCkgczE7CisgIGxvbmcgaW50IHNyY3AyID0gKGxvbmcgaW50KSBzMjsKKyAgb3BfdCByZXM7CisKKyAgaWYgKGxlbiA+PSBPUF9UX1RIUkVTKQorICAgIHsKKyAgICAgIC8qIFRoZXJlIGFyZSBhdCBsZWFzdCBzb21lIGJ5dGVzIHRvIGNvbXBhcmUuICBObyBuZWVkIHRvIHRlc3QKKwkgZm9yIExFTiA9PSAwIGluIHRoaXMgYWxpZ25tZW50IGxvb3AuICAqLworICAgICAgd2hpbGUgKHNyY3AyICUgT1BTSVogIT0gMCkKKwl7CisJICBhMCA9ICgoYnl0ZSAqKSBzcmNwMSlbMF07CisJICBiMCA9ICgoYnl0ZSAqKSBzcmNwMilbMF07CisJICBzcmNwMSArPSAxOworCSAgc3JjcDIgKz0gMTsKKwkgIHJlcyA9IGEwIC0gYjA7CisJICBpZiAocmVzICE9IDApCisJICAgIHJldHVybiByZXM7CisJICBsZW4gLT0gMTsKKwl9CisKKyAgICAgIC8qIFNSQ1AyIGlzIG5vdyBhbGlnbmVkIGZvciBtZW1vcnkgb3BlcmF0aW9ucyBvbiBgb3BfdCcuCisJIFNSQ1AxIGFsaWdubWVudCBkZXRlcm1pbmVzIGlmIHdlIGNhbiBkbyBhIHNpbXBsZSwKKwkgYWxpZ25lZCBjb21wYXJlIG9yIG5lZWQgdG8gc2h1ZmZsZSBiaXRzLiAgKi8KKworICAgICAgaWYgKHNyY3AxICUgT1BTSVogPT0gMCkKKwlyZXMgPSBtZW1jbXBfY29tbW9uX2FsaWdubWVudCAoc3JjcDEsIHNyY3AyLCBsZW4gLyBPUFNJWik7CisgICAgICBlbHNlCisJcmVzID0gbWVtY21wX25vdF9jb21tb25fYWxpZ25tZW50IChzcmNwMSwgc3JjcDIsIGxlbiAvIE9QU0laKTsKKyAgICAgIGlmIChyZXMgIT0gMCkKKwlyZXR1cm4gcmVzOworCisgICAgICAvKiBOdW1iZXIgb2YgYnl0ZXMgcmVtYWluaW5nIGluIHRoZSBpbnRlcnZhbCBbMC4uT1BTSVotMV0uICAqLworICAgICAgc3JjcDEgKz0gbGVuICYgLU9QU0laOworICAgICAgc3JjcDIgKz0gbGVuICYgLU9QU0laOworICAgICAgbGVuICU9IE9QU0laOworICAgIH0KKworICAvKiBUaGVyZSBhcmUganVzdCBhIGZldyBieXRlcyB0byBjb21wYXJlLiAgVXNlIGJ5dGUgbWVtb3J5IG9wZXJhdGlvbnMuICAqLworICB3aGlsZSAobGVuICE9IDApCisgICAgeworICAgICAgYTAgPSAoKGJ5dGUgKikgc3JjcDEpWzBdOworICAgICAgYjAgPSAoKGJ5dGUgKikgc3JjcDIpWzBdOworICAgICAgc3JjcDEgKz0gMTsKKyAgICAgIHNyY3AyICs9IDE7CisgICAgICByZXMgPSBhMCAtIGIwOworICAgICAgaWYgKHJlcyAhPSAwKQorCXJldHVybiByZXM7CisgICAgICBsZW4gLT0gMTsKKyAgICB9CisKKyAgcmV0dXJuIDA7Cit9CisKKyNpZmRlZiB3ZWFrX2FsaWFzCisjIHVuZGVmIGJjbXAKK3dlYWtfYWxpYXMgKG1lbWNtcCwgYmNtcCkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYi9tZW1jcHkuYyBiL3BhcnRlZC0xLjguNy9saWIvbWVtY3B5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFlNDljNgotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWIvbWVtY3B5LmMKQEAgLTAsMCArMSwzNiBAQAorLyogQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk3LCAyMDAwLCAyMDAzLCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKworLyogV3JpdHRlbiBieSBKaW0gTWV5ZXJpbmcgPG1leWVyaW5nQG5hLW5ldC5vcm5sLmdvdj4uICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworLyogQ29weSBMRU4gYnl0ZXMgc3RhcnRpbmcgYXQgU1JDQUREUiB0byBERVNUQUREUi4gIFJlc3VsdCB1bmRlZmluZWQKKyAgIGlmIHRoZSBzb3VyY2Ugb3ZlcmxhcHMgd2l0aCB0aGUgZGVzdGluYXRpb24uCisgICBSZXR1cm4gREVTVEFERFIuICovCisKK3ZvaWQgKgorbWVtY3B5ICh2b2lkICpkZXN0YWRkciwgdm9pZCBjb25zdCAqc3JjYWRkciwgc2l6ZV90IGxlbikKK3sKKyAgY2hhciAqZGVzdCA9IGRlc3RhZGRyOworICBjaGFyIGNvbnN0ICpzcmMgPSBzcmNhZGRyOworCisgIHdoaWxlIChsZW4tLSA+IDApCisgICAgKmRlc3QrKyA9ICpzcmMrKzsKKyAgcmV0dXJuIGRlc3RhZGRyOworfQpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYi9tZW1tb3ZlLmMgYi9wYXJ0ZWQtMS44LjcvbGliL21lbW1vdmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWZmOGI1Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYi9tZW1tb3ZlLmMKQEAgLTAsMCArMSwyNiBAQAorLyogbWVtbW92ZS5jIC0tIGNvcHkgbWVtb3J5LgorICAgQ29weSBMRU5HVEggYnl0ZXMgZnJvbSBTT1VSQ0UgdG8gREVTVC4gIERvZXMgbm90IG51bGwtdGVybWluYXRlLgorICAgSW4gdGhlIHB1YmxpYyBkb21haW4uCisgICBCeSBEYXZpZCBNYWNLZW56aWUgPGRqbUBnbnUuYWkubWl0LmVkdT4uICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKwordm9pZCAqCittZW1tb3ZlICh2b2lkICpkZXN0MCwgdm9pZCBjb25zdCAqc291cmNlMCwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgY2hhciAqZGVzdCA9IGRlc3QwOworICBjaGFyIGNvbnN0ICpzb3VyY2UgPSBzb3VyY2UwOworICBpZiAoc291cmNlIDwgZGVzdCkKKyAgICAvKiBNb3ZpbmcgZnJvbSBsb3cgbWVtIHRvIGhpIG1lbTsgc3RhcnQgYXQgZW5kLiAgKi8KKyAgICBmb3IgKHNvdXJjZSArPSBsZW5ndGgsIGRlc3QgKz0gbGVuZ3RoOyBsZW5ndGg7IC0tbGVuZ3RoKQorICAgICAgKi0tZGVzdCA9ICotLXNvdXJjZTsKKyAgZWxzZSBpZiAoc291cmNlICE9IGRlc3QpCisgICAgeworICAgICAgLyogTW92aW5nIGZyb20gaGkgbWVtIHRvIGxvdyBtZW07IHN0YXJ0IGF0IGJlZ2lubmluZy4gICovCisgICAgICBmb3IgKDsgbGVuZ3RoOyAtLWxlbmd0aCkKKwkqZGVzdCsrID0gKnNvdXJjZSsrOworICAgIH0KKyAgcmV0dXJuIGRlc3QwOworfQpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYi9tZW1zZXQuYyBiL3BhcnRlZC0xLjguNy9saWIvbWVtc2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODkwY2JmMQotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWIvbWVtc2V0LmMKQEAgLTAsMCArMSwyOCBAQAorLyogbWVtc2V0LmMgLS0gc2V0IGFuIGFyZWEgb2YgbWVtb3J5IHRvIGEgZ2l2ZW4gdmFsdWUKKyAgIENvcHlyaWdodCAoQykgMTk5MSwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKwordm9pZCAqCittZW1zZXQgKHZvaWQgKnN0ciwgaW50IGMsIHNpemVfdCBsZW4pCit7CisgIHJlZ2lzdGVyIGNoYXIgKnN0ID0gc3RyOworCisgIHdoaWxlIChsZW4tLSA+IDApCisgICAgKnN0KysgPSBjOworICByZXR1cm4gc3RyOworfQpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYi9xdW90ZWFyZy5jIGIvcGFydGVkLTEuOC43L2xpYi9xdW90ZWFyZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3ZjMyNmEKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGliL3F1b3RlYXJnLmMKQEAgLTAsMCArMSw2OTcgQEAKKy8qIHF1b3RlYXJnLmMgLSBxdW90ZSBhcmd1bWVudHMgZm9yIG91dHB1dAorCisgICBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKworLyogV3JpdHRlbiBieSBQYXVsIEVnZ2VydCA8ZWdnZXJ0QHR3aW5zdW4uY29tPiAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpbmNsdWRlICJxdW90ZWFyZy5oIgorCisjaW5jbHVkZSAieGFsbG9jLmgiCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CisjaW5jbHVkZSA8d2N0eXBlLmg+CisKKyNpbmNsdWRlICJnZXR0ZXh0LmgiCisjZGVmaW5lIF8obXNnaWQpIGdldHRleHQgKG1zZ2lkKQorI2RlZmluZSBOXyhtc2dpZCkgbXNnaWQKKworI2lmICFIQVZFX01CUlRPV0MKKy8qIERpc2FibGUgbXVsdGlieXRlIHByb2Nlc3NpbmcgZW50aXJlbHkuICBTaW5jZSBNQl9DVVJfTUFYIGlzIDEsIHRoZQorICAgb3RoZXIgbWFjcm9zIGFyZSBkZWZpbmVkIG9ubHkgZm9yIGRvY3VtZW50YXRpb24gYW5kIHRvIHNhdGlzZnkgQworICAgc3ludGF4LiAgKi8KKyMgdW5kZWYgTUJfQ1VSX01BWAorIyBkZWZpbmUgTUJfQ1VSX01BWCAxCisjIHVuZGVmIG1ic3RhdGVfdAorIyBkZWZpbmUgbWJzdGF0ZV90IGludAorIyBkZWZpbmUgbWJydG93Yyhwd2MsIHMsIG4sIHBzKSAoKCoocHdjKSA9ICoocykpICE9IDApCisjIGRlZmluZSBpc3dwcmludCh3YykgaXNwcmludCAoKHVuc2lnbmVkIGNoYXIpICh3YykpCisjIHVuZGVmIEhBVkVfTUJTSU5JVAorI2VuZGlmCisKKyNpZiAhZGVmaW5lZCBtYnNpbml0ICYmICFIQVZFX01CU0lOSVQKKyMgZGVmaW5lIG1ic2luaXQocHMpIDEKKyNlbmRpZgorCisjaWZuZGVmIFNJWkVfTUFYCisjIGRlZmluZSBTSVpFX01BWCAoKHNpemVfdCkgLTEpCisjZW5kaWYKKworI2RlZmluZSBJTlRfQklUUyAoc2l6ZW9mIChpbnQpICogQ0hBUl9CSVQpCisKK3N0cnVjdCBxdW90aW5nX29wdGlvbnMKK3sKKyAgLyogQmFzaWMgcXVvdGluZyBzdHlsZS4gICovCisgIGVudW0gcXVvdGluZ19zdHlsZSBzdHlsZTsKKworICAvKiBRdW90ZSB0aGUgY2hhcmFjdGVycyBpbmRpY2F0ZWQgYnkgdGhpcyBiaXQgdmVjdG9yIGV2ZW4gaWYgdGhlCisgICAgIHF1b3Rpbmcgc3R5bGUgd291bGQgbm90IG5vcm1hbGx5IHJlcXVpcmUgdGhlbSB0byBiZSBxdW90ZWQuICAqLworICB1bnNpZ25lZCBpbnQgcXVvdGVfdGhlc2VfdG9vWyhVQ0hBUl9NQVggLyBJTlRfQklUUykgKyAxXTsKK307CisKKy8qIE5hbWVzIG9mIHF1b3Rpbmcgc3R5bGVzLiAgKi8KK2NoYXIgY29uc3QgKmNvbnN0IHF1b3Rpbmdfc3R5bGVfYXJnc1tdID0KK3sKKyAgImxpdGVyYWwiLAorICAic2hlbGwiLAorICAic2hlbGwtYWx3YXlzIiwKKyAgImMiLAorICAiZXNjYXBlIiwKKyAgImxvY2FsZSIsCisgICJjbG9jYWxlIiwKKyAgMAorfTsKKworLyogQ29ycmVzcG9uZGVuY2VzIHRvIHF1b3Rpbmcgc3R5bGUgbmFtZXMuICAqLworZW51bSBxdW90aW5nX3N0eWxlIGNvbnN0IHF1b3Rpbmdfc3R5bGVfdmFsc1tdID0KK3sKKyAgbGl0ZXJhbF9xdW90aW5nX3N0eWxlLAorICBzaGVsbF9xdW90aW5nX3N0eWxlLAorICBzaGVsbF9hbHdheXNfcXVvdGluZ19zdHlsZSwKKyAgY19xdW90aW5nX3N0eWxlLAorICBlc2NhcGVfcXVvdGluZ19zdHlsZSwKKyAgbG9jYWxlX3F1b3Rpbmdfc3R5bGUsCisgIGNsb2NhbGVfcXVvdGluZ19zdHlsZQorfTsKKworLyogVGhlIGRlZmF1bHQgcXVvdGluZyBvcHRpb25zLiAgKi8KK3N0YXRpYyBzdHJ1Y3QgcXVvdGluZ19vcHRpb25zIGRlZmF1bHRfcXVvdGluZ19vcHRpb25zOworCisvKiBBbGxvY2F0ZSBhIG5ldyBzZXQgb2YgcXVvdGluZyBvcHRpb25zLCB3aXRoIGNvbnRlbnRzIGluaXRpYWxseSBpZGVudGljYWwKKyAgIHRvIE8gaWYgTyBpcyBub3QgbnVsbCwgb3IgdG8gdGhlIGRlZmF1bHQgaWYgTyBpcyBudWxsLgorICAgSXQgaXMgdGhlIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGZyZWUgdGhlIHJlc3VsdC4gICovCitzdHJ1Y3QgcXVvdGluZ19vcHRpb25zICoKK2Nsb25lX3F1b3Rpbmdfb3B0aW9ucyAoc3RydWN0IHF1b3Rpbmdfb3B0aW9ucyAqbykKK3sKKyAgaW50IGUgPSBlcnJubzsKKyAgc3RydWN0IHF1b3Rpbmdfb3B0aW9ucyAqcCA9IHhtZW1kdXAgKG8gPyBvIDogJmRlZmF1bHRfcXVvdGluZ19vcHRpb25zLAorCQkJCSAgICAgICBzaXplb2YgKm8pOworICBlcnJubyA9IGU7CisgIHJldHVybiBwOworfQorCisvKiBHZXQgdGhlIHZhbHVlIG9mIE8ncyBxdW90aW5nIHN0eWxlLiAgSWYgTyBpcyBudWxsLCB1c2UgdGhlIGRlZmF1bHQuICAqLworZW51bSBxdW90aW5nX3N0eWxlCitnZXRfcXVvdGluZ19zdHlsZSAoc3RydWN0IHF1b3Rpbmdfb3B0aW9ucyAqbykKK3sKKyAgcmV0dXJuIChvID8gbyA6ICZkZWZhdWx0X3F1b3Rpbmdfb3B0aW9ucyktPnN0eWxlOworfQorCisvKiBJbiBPIChvciBpbiB0aGUgZGVmYXVsdCBpZiBPIGlzIG51bGwpLAorICAgc2V0IHRoZSB2YWx1ZSBvZiB0aGUgcXVvdGluZyBzdHlsZSB0byBTLiAgKi8KK3ZvaWQKK3NldF9xdW90aW5nX3N0eWxlIChzdHJ1Y3QgcXVvdGluZ19vcHRpb25zICpvLCBlbnVtIHF1b3Rpbmdfc3R5bGUgcykKK3sKKyAgKG8gPyBvIDogJmRlZmF1bHRfcXVvdGluZ19vcHRpb25zKS0+c3R5bGUgPSBzOworfQorCisvKiBJbiBPIChvciBpbiB0aGUgZGVmYXVsdCBpZiBPIGlzIG51bGwpLAorICAgc2V0IHRoZSB2YWx1ZSBvZiB0aGUgcXVvdGluZyBvcHRpb25zIGZvciBjaGFyYWN0ZXIgQyB0byBJLgorICAgUmV0dXJuIHRoZSBvbGQgdmFsdWUuICBDdXJyZW50bHksIHRoZSBvbmx5IHZhbHVlcyBkZWZpbmVkIGZvciBJIGFyZQorICAgMCAodGhlIGRlZmF1bHQpIGFuZCAxICh3aGljaCBtZWFucyB0byBxdW90ZSB0aGUgY2hhcmFjdGVyIGV2ZW4gaWYKKyAgIGl0IHdvdWxkIG5vdCBvdGhlcndpc2UgYmUgcXVvdGVkKS4gICovCitpbnQKK3NldF9jaGFyX3F1b3RpbmcgKHN0cnVjdCBxdW90aW5nX29wdGlvbnMgKm8sIGNoYXIgYywgaW50IGkpCit7CisgIHVuc2lnbmVkIGNoYXIgdWMgPSBjOworICB1bnNpZ25lZCBpbnQgKnAgPQorICAgIChvID8gbyA6ICZkZWZhdWx0X3F1b3Rpbmdfb3B0aW9ucyktPnF1b3RlX3RoZXNlX3RvbyArIHVjIC8gSU5UX0JJVFM7CisgIGludCBzaGlmdCA9IHVjICUgSU5UX0JJVFM7CisgIGludCByID0gKCpwID4+IHNoaWZ0KSAmIDE7CisgICpwIF49ICgoaSAmIDEpIF4gcikgPDwgc2hpZnQ7CisgIHJldHVybiByOworfQorCisvKiBNU0dJRCBhcHByb3hpbWF0ZXMgYSBxdW90YXRpb24gbWFyay4gIFJldHVybiBpdHMgdHJhbnNsYXRpb24gaWYgaXQKKyAgIGhhcyBvbmU7IG90aGVyd2lzZSwgcmV0dXJuIGVpdGhlciBpdCBvciAiXCIiLCBkZXBlbmRpbmcgb24gUy4gICovCitzdGF0aWMgY2hhciBjb25zdCAqCitnZXR0ZXh0X3F1b3RlIChjaGFyIGNvbnN0ICptc2dpZCwgZW51bSBxdW90aW5nX3N0eWxlIHMpCit7CisgIGNoYXIgY29uc3QgKnRyYW5zbGF0aW9uID0gXyhtc2dpZCk7CisgIGlmICh0cmFuc2xhdGlvbiA9PSBtc2dpZCAmJiBzID09IGNsb2NhbGVfcXVvdGluZ19zdHlsZSkKKyAgICB0cmFuc2xhdGlvbiA9ICJcIiI7CisgIHJldHVybiB0cmFuc2xhdGlvbjsKK30KKworLyogUGxhY2UgaW50byBidWZmZXIgQlVGRkVSIChvZiBzaXplIEJVRkZFUlNJWkUpIGEgcXVvdGVkIHZlcnNpb24gb2YKKyAgIGFyZ3VtZW50IEFSRyAob2Ygc2l6ZSBBUkdTSVpFKSwgdXNpbmcgUVVPVElOR19TVFlMRSBhbmQgdGhlCisgICBub24tcXVvdGluZy1zdHlsZSBwYXJ0IG9mIE8gdG8gY29udHJvbCBxdW90aW5nLgorICAgVGVybWluYXRlIHRoZSBvdXRwdXQgd2l0aCBhIG51bGwgY2hhcmFjdGVyLCBhbmQgcmV0dXJuIHRoZSB3cml0dGVuCisgICBzaXplIG9mIHRoZSBvdXRwdXQsIG5vdCBjb3VudGluZyB0aGUgdGVybWluYXRpbmcgbnVsbC4KKyAgIElmIEJVRkZFUlNJWkUgaXMgdG9vIHNtYWxsIHRvIHN0b3JlIHRoZSBvdXRwdXQgc3RyaW5nLCByZXR1cm4gdGhlCisgICB2YWx1ZSB0aGF0IHdvdWxkIGhhdmUgYmVlbiByZXR1cm5lZCBoYWQgQlVGRkVSU0laRSBiZWVuIGxhcmdlIGVub3VnaC4KKyAgIElmIEFSR1NJWkUgaXMgU0laRV9NQVgsIHVzZSB0aGUgc3RyaW5nIGxlbmd0aCBvZiB0aGUgYXJndW1lbnQgZm9yIEFSR1NJWkUuCisKKyAgIFRoaXMgZnVuY3Rpb24gYWN0cyBsaWtlIHF1b3RlYXJnX2J1ZmZlciAoQlVGRkVSLCBCVUZGRVJTSVpFLCBBUkcsCisgICBBUkdTSVpFLCBPKSwgZXhjZXB0IGl0IHVzZXMgUVVPVElOR19TVFlMRSBpbnN0ZWFkIG9mIHRoZSBxdW90aW5nCisgICBzdHlsZSBzcGVjaWZpZWQgYnkgTywgYW5kIE8gbWF5IG5vdCBiZSBudWxsLiAgKi8KKworc3RhdGljIHNpemVfdAorcXVvdGVhcmdfYnVmZmVyX3Jlc3R5bGVkIChjaGFyICpidWZmZXIsIHNpemVfdCBidWZmZXJzaXplLAorCQkJICBjaGFyIGNvbnN0ICphcmcsIHNpemVfdCBhcmdzaXplLAorCQkJICBlbnVtIHF1b3Rpbmdfc3R5bGUgcXVvdGluZ19zdHlsZSwKKwkJCSAgc3RydWN0IHF1b3Rpbmdfb3B0aW9ucyBjb25zdCAqbykKK3sKKyAgc2l6ZV90IGk7CisgIHNpemVfdCBsZW4gPSAwOworICBjaGFyIGNvbnN0ICpxdW90ZV9zdHJpbmcgPSAwOworICBzaXplX3QgcXVvdGVfc3RyaW5nX2xlbiA9IDA7CisgIGJvb2wgYmFja3NsYXNoX2VzY2FwZXMgPSBmYWxzZTsKKyAgYm9vbCB1bmlieXRlX2xvY2FsZSA9IE1CX0NVUl9NQVggPT0gMTsKKworI2RlZmluZSBTVE9SRShjKSBcCisgICAgZG8gXAorICAgICAgeyBcCisJaWYgKGxlbiA8IGJ1ZmZlcnNpemUpIFwKKwkgIGJ1ZmZlcltsZW5dID0gKGMpOyBcCisJbGVuKys7IFwKKyAgICAgIH0gXAorICAgIHdoaWxlICgwKQorCisgIHN3aXRjaCAocXVvdGluZ19zdHlsZSkKKyAgICB7CisgICAgY2FzZSBjX3F1b3Rpbmdfc3R5bGU6CisgICAgICBTVE9SRSAoJyInKTsKKyAgICAgIGJhY2tzbGFzaF9lc2NhcGVzID0gdHJ1ZTsKKyAgICAgIHF1b3RlX3N0cmluZyA9ICJcIiI7CisgICAgICBxdW90ZV9zdHJpbmdfbGVuID0gMTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBlc2NhcGVfcXVvdGluZ19zdHlsZToKKyAgICAgIGJhY2tzbGFzaF9lc2NhcGVzID0gdHJ1ZTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBsb2NhbGVfcXVvdGluZ19zdHlsZToKKyAgICBjYXNlIGNsb2NhbGVfcXVvdGluZ19zdHlsZToKKyAgICAgIHsKKwkvKiBUUkFOU0xBVE9SUzoKKwkgICBHZXQgdHJhbnNsYXRpb25zIGZvciBvcGVuIGFuZCBjbG9zaW5nIHF1b3RhdGlvbiBtYXJrcy4KKworCSAgIFRoZSBtZXNzYWdlIGNhdGFsb2cgc2hvdWxkIHRyYW5zbGF0ZSAiYCIgdG8gYSBsZWZ0CisJICAgcXVvdGF0aW9uIG1hcmsgc3VpdGFibGUgZm9yIHRoZSBsb2NhbGUsIGFuZCBzaW1pbGFybHkgZm9yCisJICAgIiciLiAgSWYgdGhlIGNhdGFsb2cgaGFzIG5vIHRyYW5zbGF0aW9uLAorCSAgIGxvY2FsZV9xdW90aW5nX3N0eWxlIHF1b3RlcyBgbGlrZSB0aGlzJywgYW5kCisJICAgY2xvY2FsZV9xdW90aW5nX3N0eWxlIHF1b3RlcyAibGlrZSB0aGlzIi4KKworCSAgIEZvciBleGFtcGxlLCBhbiBBbWVyaWNhbiBFbmdsaXNoIFVuaWNvZGUgbG9jYWxlIHNob3VsZAorCSAgIHRyYW5zbGF0ZSAiYCIgdG8gVSsyMDFDIChMRUZUIERPVUJMRSBRVU9UQVRJT04gTUFSSyksIGFuZAorCSAgIHNob3VsZCB0cmFuc2xhdGUgIiciIHRvIFUrMjAxRCAoUklHSFQgRE9VQkxFIFFVT1RBVElPTgorCSAgIE1BUkspLiAgQSBCcml0aXNoIEVuZ2xpc2ggVW5pY29kZSBsb2NhbGUgc2hvdWxkIGluc3RlYWQKKwkgICB0cmFuc2xhdGUgdGhlc2UgdG8gVSsyMDE4IChMRUZUIFNJTkdMRSBRVU9UQVRJT04gTUFSSykgYW5kCisJICAgVSsyMDE5IChSSUdIVCBTSU5HTEUgUVVPVEFUSU9OIE1BUkspLCByZXNwZWN0aXZlbHkuCisKKwkgICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIHB1dCBoZXJlLCBwbGVhc2Ugc2VlCisJICAgPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUXVvdGF0aW9uX21hcmsjR2x5cGhzPgorCSAgIGFuZCB1c2UgZ2x5cGhzIHN1aXRhYmxlIGZvciB5b3VyIGxhbmd1YWdlLiAgKi8KKworCWNoYXIgY29uc3QgKmxlZnQgPSBnZXR0ZXh0X3F1b3RlIChOXygiYCIpLCBxdW90aW5nX3N0eWxlKTsKKwljaGFyIGNvbnN0ICpyaWdodCA9IGdldHRleHRfcXVvdGUgKE5fKCInIiksIHF1b3Rpbmdfc3R5bGUpOworCWZvciAocXVvdGVfc3RyaW5nID0gbGVmdDsgKnF1b3RlX3N0cmluZzsgcXVvdGVfc3RyaW5nKyspCisJICBTVE9SRSAoKnF1b3RlX3N0cmluZyk7CisJYmFja3NsYXNoX2VzY2FwZXMgPSB0cnVlOworCXF1b3RlX3N0cmluZyA9IHJpZ2h0OworCXF1b3RlX3N0cmluZ19sZW4gPSBzdHJsZW4gKHF1b3RlX3N0cmluZyk7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2Ugc2hlbGxfYWx3YXlzX3F1b3Rpbmdfc3R5bGU6CisgICAgICBTVE9SRSAoJ1wnJyk7CisgICAgICBxdW90ZV9zdHJpbmcgPSAiJyI7CisgICAgICBxdW90ZV9zdHJpbmdfbGVuID0gMTsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICAgIH0KKworICBmb3IgKGkgPSAwOyAgISAoYXJnc2l6ZSA9PSBTSVpFX01BWCA/IGFyZ1tpXSA9PSAnXDAnIDogaSA9PSBhcmdzaXplKTsgIGkrKykKKyAgICB7CisgICAgICB1bnNpZ25lZCBjaGFyIGM7CisgICAgICB1bnNpZ25lZCBjaGFyIGVzYzsKKworICAgICAgaWYgKGJhY2tzbGFzaF9lc2NhcGVzCisJICAmJiBxdW90ZV9zdHJpbmdfbGVuCisJICAmJiBpICsgcXVvdGVfc3RyaW5nX2xlbiA8PSBhcmdzaXplCisJICAmJiBtZW1jbXAgKGFyZyArIGksIHF1b3RlX3N0cmluZywgcXVvdGVfc3RyaW5nX2xlbikgPT0gMCkKKwlTVE9SRSAoJ1xcJyk7CisKKyAgICAgIGMgPSBhcmdbaV07CisgICAgICBzd2l0Y2ggKGMpCisJeworCWNhc2UgJ1wwJzoKKwkgIGlmIChiYWNrc2xhc2hfZXNjYXBlcykKKwkgICAgeworCSAgICAgIFNUT1JFICgnXFwnKTsKKwkgICAgICBTVE9SRSAoJzAnKTsKKwkgICAgICBTVE9SRSAoJzAnKTsKKwkgICAgICBjID0gJzAnOworCSAgICB9CisJICBicmVhazsKKworCWNhc2UgJz8nOgorCSAgc3dpdGNoIChxdW90aW5nX3N0eWxlKQorCSAgICB7CisJICAgIGNhc2Ugc2hlbGxfcXVvdGluZ19zdHlsZToKKwkgICAgICBnb3RvIHVzZV9zaGVsbF9hbHdheXNfcXVvdGluZ19zdHlsZTsKKworCSAgICBjYXNlIGNfcXVvdGluZ19zdHlsZToKKwkgICAgICBpZiAoaSArIDIgPCBhcmdzaXplICYmIGFyZ1tpICsgMV0gPT0gJz8nKQorCQlzd2l0Y2ggKGFyZ1tpICsgMl0pCisJCSAgeworCQkgIGNhc2UgJyEnOiBjYXNlICdcJyc6CisJCSAgY2FzZSAnKCc6IGNhc2UgJyknOiBjYXNlICctJzogY2FzZSAnLyc6CisJCSAgY2FzZSAnPCc6IGNhc2UgJz0nOiBjYXNlICc+JzoKKwkJICAgIC8qIEVzY2FwZSB0aGUgc2Vjb25kICc/JyBpbiB3aGF0IHdvdWxkIG90aGVyd2lzZSBiZQorCQkgICAgICAgYSB0cmlncmFwaC4gICovCisJCSAgICBjID0gYXJnW2kgKyAyXTsKKwkJICAgIGkgKz0gMjsKKwkJICAgIFNUT1JFICgnPycpOworCQkgICAgU1RPUkUgKCdcXCcpOworCQkgICAgU1RPUkUgKCc/Jyk7CisJCSAgICBicmVhazsKKworCQkgIGRlZmF1bHQ6CisJCSAgICBicmVhazsKKwkJICB9CisJICAgICAgYnJlYWs7CisKKwkgICAgZGVmYXVsdDoKKwkgICAgICBicmVhazsKKwkgICAgfQorCSAgYnJlYWs7CisKKwljYXNlICdcYSc6IGVzYyA9ICdhJzsgZ290byBjX2VzY2FwZTsKKwljYXNlICdcYic6IGVzYyA9ICdiJzsgZ290byBjX2VzY2FwZTsKKwljYXNlICdcZic6IGVzYyA9ICdmJzsgZ290byBjX2VzY2FwZTsKKwljYXNlICdcbic6IGVzYyA9ICduJzsgZ290byBjX2FuZF9zaGVsbF9lc2NhcGU7CisJY2FzZSAnXHInOiBlc2MgPSAncic7IGdvdG8gY19hbmRfc2hlbGxfZXNjYXBlOworCWNhc2UgJ1x0JzogZXNjID0gJ3QnOyBnb3RvIGNfYW5kX3NoZWxsX2VzY2FwZTsKKwljYXNlICdcdic6IGVzYyA9ICd2JzsgZ290byBjX2VzY2FwZTsKKwljYXNlICdcXCc6IGVzYyA9IGM7IGdvdG8gY19hbmRfc2hlbGxfZXNjYXBlOworCisJY19hbmRfc2hlbGxfZXNjYXBlOgorCSAgaWYgKHF1b3Rpbmdfc3R5bGUgPT0gc2hlbGxfcXVvdGluZ19zdHlsZSkKKwkgICAgZ290byB1c2Vfc2hlbGxfYWx3YXlzX3F1b3Rpbmdfc3R5bGU7CisJY19lc2NhcGU6CisJICBpZiAoYmFja3NsYXNoX2VzY2FwZXMpCisJICAgIHsKKwkgICAgICBjID0gZXNjOworCSAgICAgIGdvdG8gc3RvcmVfZXNjYXBlOworCSAgICB9CisJICBicmVhazsKKworCWNhc2UgJ3snOiBjYXNlICd9JzogLyogc29tZXRpbWVzIHNwZWNpYWwgaWYgaXNvbGF0ZWQgKi8KKwkgIGlmICghIChhcmdzaXplID09IFNJWkVfTUFYID8gYXJnWzFdID09ICdcMCcgOiBhcmdzaXplID09IDEpKQorCSAgICBicmVhazsKKwkgIC8qIEZhbGwgdGhyb3VnaC4gICovCisJY2FzZSAnIyc6IGNhc2UgJ34nOgorCSAgaWYgKGkgIT0gMCkKKwkgICAgYnJlYWs7CisJICAvKiBGYWxsIHRocm91Z2guICAqLworCWNhc2UgJyAnOgorCWNhc2UgJyEnOiAvKiBzcGVjaWFsIGluIGJhc2ggKi8KKwljYXNlICciJzogY2FzZSAnJCc6IGNhc2UgJyYnOgorCWNhc2UgJygnOiBjYXNlICcpJzogY2FzZSAnKic6IGNhc2UgJzsnOgorCWNhc2UgJzwnOgorCWNhc2UgJz0nOiAvKiBzb21ldGltZXMgc3BlY2lhbCBpbiAwdGggb3IgKHdpdGggInNldCAtayIpIGxhdGVyIGFyZ3MgKi8KKwljYXNlICc+JzogY2FzZSAnWyc6CisJY2FzZSAnXic6IC8qIHNwZWNpYWwgaW4gb2xkIC9iaW4vc2gsIGUuZy4gU3VuT1MgNC4xLjQgKi8KKwljYXNlICdgJzogY2FzZSAnfCc6CisJICAvKiBBIHNoZWxsIHNwZWNpYWwgY2hhcmFjdGVyLiAgSW4gdGhlb3J5LCAnJCcgYW5kICdgJyBjb3VsZAorCSAgICAgYmUgdGhlIGZpcnN0IGJ5dGVzIG9mIG11bHRpYnl0ZSBjaGFyYWN0ZXJzLCB3aGljaCBtZWFucworCSAgICAgd2Ugc2hvdWxkIGNoZWNrIHRoZW0gd2l0aCBtYnJ0b3djLCBidXQgaW4gcHJhY3RpY2UgdGhpcworCSAgICAgZG9lc24ndCBoYXBwZW4gc28gaXQncyBub3Qgd29ydGggd29ycnlpbmcgYWJvdXQuICAqLworCSAgaWYgKHF1b3Rpbmdfc3R5bGUgPT0gc2hlbGxfcXVvdGluZ19zdHlsZSkKKwkgICAgZ290byB1c2Vfc2hlbGxfYWx3YXlzX3F1b3Rpbmdfc3R5bGU7CisJICBicmVhazsKKworCWNhc2UgJ1wnJzoKKwkgIHN3aXRjaCAocXVvdGluZ19zdHlsZSkKKwkgICAgeworCSAgICBjYXNlIHNoZWxsX3F1b3Rpbmdfc3R5bGU6CisJICAgICAgZ290byB1c2Vfc2hlbGxfYWx3YXlzX3F1b3Rpbmdfc3R5bGU7CisKKwkgICAgY2FzZSBzaGVsbF9hbHdheXNfcXVvdGluZ19zdHlsZToKKwkgICAgICBTVE9SRSAoJ1wnJyk7CisJICAgICAgU1RPUkUgKCdcXCcpOworCSAgICAgIFNUT1JFICgnXCcnKTsKKwkgICAgICBicmVhazsKKworCSAgICBkZWZhdWx0OgorCSAgICAgIGJyZWFrOworCSAgICB9CisJICBicmVhazsKKworCWNhc2UgJyUnOiBjYXNlICcrJzogY2FzZSAnLCc6IGNhc2UgJy0nOiBjYXNlICcuJzogY2FzZSAnLyc6CisJY2FzZSAnMCc6IGNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOiBjYXNlICc1JzoKKwljYXNlICc2JzogY2FzZSAnNyc6IGNhc2UgJzgnOiBjYXNlICc5JzogY2FzZSAnOic6CisJY2FzZSAnQSc6IGNhc2UgJ0InOiBjYXNlICdDJzogY2FzZSAnRCc6IGNhc2UgJ0UnOiBjYXNlICdGJzoKKwljYXNlICdHJzogY2FzZSAnSCc6IGNhc2UgJ0knOiBjYXNlICdKJzogY2FzZSAnSyc6IGNhc2UgJ0wnOgorCWNhc2UgJ00nOiBjYXNlICdOJzogY2FzZSAnTyc6IGNhc2UgJ1AnOiBjYXNlICdRJzogY2FzZSAnUic6CisJY2FzZSAnUyc6IGNhc2UgJ1QnOiBjYXNlICdVJzogY2FzZSAnVic6IGNhc2UgJ1cnOiBjYXNlICdYJzoKKwljYXNlICdZJzogY2FzZSAnWic6IGNhc2UgJ10nOiBjYXNlICdfJzogY2FzZSAnYSc6IGNhc2UgJ2InOgorCWNhc2UgJ2MnOiBjYXNlICdkJzogY2FzZSAnZSc6IGNhc2UgJ2YnOiBjYXNlICdnJzogY2FzZSAnaCc6CisJY2FzZSAnaSc6IGNhc2UgJ2onOiBjYXNlICdrJzogY2FzZSAnbCc6IGNhc2UgJ20nOiBjYXNlICduJzoKKwljYXNlICdvJzogY2FzZSAncCc6IGNhc2UgJ3EnOiBjYXNlICdyJzogY2FzZSAncyc6IGNhc2UgJ3QnOgorCWNhc2UgJ3UnOiBjYXNlICd2JzogY2FzZSAndyc6IGNhc2UgJ3gnOiBjYXNlICd5JzogY2FzZSAneic6CisJICAvKiBUaGVzZSBjaGFyYWN0ZXJzIGRvbid0IGNhdXNlIHByb2JsZW1zLCBubyBtYXR0ZXIgd2hhdCB0aGUKKwkgICAgIHF1b3Rpbmcgc3R5bGUgaXMuICBUaGV5IGNhbm5vdCBzdGFydCBtdWx0aWJ5dGUgc2VxdWVuY2VzLiAgKi8KKwkgIGJyZWFrOworCisJZGVmYXVsdDoKKwkgIC8qIElmIHdlIGhhdmUgYSBtdWx0aWJ5dGUgc2VxdWVuY2UsIGNvcHkgaXQgdW50aWwgd2UgcmVhY2gKKwkgICAgIGl0cyBlbmQsIGZpbmQgYW4gZXJyb3IsIG9yIGNvbWUgYmFjayB0byB0aGUgaW5pdGlhbCBzaGlmdAorCSAgICAgc3RhdGUuICBGb3IgQy1saWtlIHN0eWxlcywgaWYgdGhlIHNlcXVlbmNlIGhhcworCSAgICAgdW5wcmludGFibGUgY2hhcmFjdGVycywgZXNjYXBlIHRoZSB3aG9sZSBzZXF1ZW5jZSwgc2luY2UKKwkgICAgIHdlIGNhbid0IGVhc2lseSBlc2NhcGUgc2luZ2xlIGNoYXJhY3RlcnMgd2l0aGluIGl0LiAgKi8KKwkgIHsKKwkgICAgLyogTGVuZ3RoIG9mIG11bHRpYnl0ZSBzZXF1ZW5jZSBmb3VuZCBzbyBmYXIuICAqLworCSAgICBzaXplX3QgbTsKKworCSAgICBib29sIHByaW50YWJsZTsKKworCSAgICBpZiAodW5pYnl0ZV9sb2NhbGUpCisJICAgICAgeworCQltID0gMTsKKwkJcHJpbnRhYmxlID0gaXNwcmludCAoYykgIT0gMDsKKwkgICAgICB9CisJICAgIGVsc2UKKwkgICAgICB7CisJCW1ic3RhdGVfdCBtYnN0YXRlOworCQltZW1zZXQgKCZtYnN0YXRlLCAwLCBzaXplb2YgbWJzdGF0ZSk7CisKKwkJbSA9IDA7CisJCXByaW50YWJsZSA9IHRydWU7CisJCWlmIChhcmdzaXplID09IFNJWkVfTUFYKQorCQkgIGFyZ3NpemUgPSBzdHJsZW4gKGFyZyk7CisKKwkJZG8KKwkJICB7CisJCSAgICB3Y2hhcl90IHc7CisJCSAgICBzaXplX3QgYnl0ZXMgPSBtYnJ0b3djICgmdywgJmFyZ1tpICsgbV0sCisJCQkJCSAgICBhcmdzaXplIC0gKGkgKyBtKSwgJm1ic3RhdGUpOworCQkgICAgaWYgKGJ5dGVzID09IDApCisJCSAgICAgIGJyZWFrOworCQkgICAgZWxzZSBpZiAoYnl0ZXMgPT0gKHNpemVfdCkgLTEpCisJCSAgICAgIHsKKwkJCXByaW50YWJsZSA9IGZhbHNlOworCQkJYnJlYWs7CisJCSAgICAgIH0KKwkJICAgIGVsc2UgaWYgKGJ5dGVzID09IChzaXplX3QpIC0yKQorCQkgICAgICB7CisJCQlwcmludGFibGUgPSBmYWxzZTsKKwkJCXdoaWxlIChpICsgbSA8IGFyZ3NpemUgJiYgYXJnW2kgKyBtXSkKKwkJCSAgbSsrOworCQkJYnJlYWs7CisJCSAgICAgIH0KKwkJICAgIGVsc2UKKwkJICAgICAgeworCQkJLyogV29yayBhcm91bmQgYSBidWcgd2l0aCBvbGRlciBzaGVsbHMgdGhhdCAic2VlIiBhICdcJworCQkJICAgdGhhdCBpcyByZWFsbHkgdGhlIDJuZCBieXRlIG9mIGEgbXVsdGlieXRlIGNoYXJhY3Rlci4KKwkJCSAgIEluIHByYWN0aWNlIHRoZSBwcm9ibGVtIGlzIGxpbWl0ZWQgdG8gQVNDSUkKKwkJCSAgIGNoYXJzID49ICdAJyB0aGF0IGFyZSBzaGVsbCBzcGVjaWFsIGNoYXJzLiAgKi8KKwkJCWlmICgnWycgPT0gMHg1YiAmJiBxdW90aW5nX3N0eWxlID09IHNoZWxsX3F1b3Rpbmdfc3R5bGUpCisJCQkgIHsKKwkJCSAgICBzaXplX3QgajsKKwkJCSAgICBmb3IgKGogPSAxOyBqIDwgYnl0ZXM7IGorKykKKwkJCSAgICAgIHN3aXRjaCAoYXJnW2kgKyBtICsgal0pCisJCQkJeworCQkJCWNhc2UgJ1snOiBjYXNlICdcXCc6IGNhc2UgJ14nOgorCQkJCWNhc2UgJ2AnOiBjYXNlICd8JzoKKwkJCQkgIGdvdG8gdXNlX3NoZWxsX2Fsd2F5c19xdW90aW5nX3N0eWxlOworCisJCQkJZGVmYXVsdDoKKwkJCQkgIGJyZWFrOworCQkJCX0KKwkJCSAgfQorCisJCQlpZiAoISBpc3dwcmludCAodykpCisJCQkgIHByaW50YWJsZSA9IGZhbHNlOworCQkJbSArPSBieXRlczsKKwkJICAgICAgfQorCQkgIH0KKwkJd2hpbGUgKCEgbWJzaW5pdCAoJm1ic3RhdGUpKTsKKwkgICAgICB9CisKKwkgICAgaWYgKDEgPCBtIHx8IChiYWNrc2xhc2hfZXNjYXBlcyAmJiAhIHByaW50YWJsZSkpCisJICAgICAgeworCQkvKiBPdXRwdXQgYSBtdWx0aWJ5dGUgc2VxdWVuY2UsIG9yIGFuIGVzY2FwZWQKKwkJICAgdW5wcmludGFibGUgdW5pYnl0ZSBjaGFyYWN0ZXIuICAqLworCQlzaXplX3QgaWxpbSA9IGkgKyBtOworCisJCWZvciAoOzspCisJCSAgeworCQkgICAgaWYgKGJhY2tzbGFzaF9lc2NhcGVzICYmICEgcHJpbnRhYmxlKQorCQkgICAgICB7CisJCQlTVE9SRSAoJ1xcJyk7CisJCQlTVE9SRSAoJzAnICsgKGMgPj4gNikpOworCQkJU1RPUkUgKCcwJyArICgoYyA+PiAzKSAmIDcpKTsKKwkJCWMgPSAnMCcgKyAoYyAmIDcpOworCQkgICAgICB9CisJCSAgICBpZiAoaWxpbSA8PSBpICsgMSkKKwkJICAgICAgYnJlYWs7CisJCSAgICBTVE9SRSAoYyk7CisJCSAgICBjID0gYXJnWysraV07CisJCSAgfQorCisJCWdvdG8gc3RvcmVfYzsKKwkgICAgICB9CisJICB9CisJfQorCisgICAgICBpZiAoISAoYmFja3NsYXNoX2VzY2FwZXMKKwkgICAgICYmIG8tPnF1b3RlX3RoZXNlX3Rvb1tjIC8gSU5UX0JJVFNdICYgKDEgPDwgKGMgJSBJTlRfQklUUykpKSkKKwlnb3RvIHN0b3JlX2M7CisKKyAgICBzdG9yZV9lc2NhcGU6CisgICAgICBTVE9SRSAoJ1xcJyk7CisKKyAgICBzdG9yZV9jOgorICAgICAgU1RPUkUgKGMpOworICAgIH0KKworICBpZiAoaSA9PSAwICYmIHF1b3Rpbmdfc3R5bGUgPT0gc2hlbGxfcXVvdGluZ19zdHlsZSkKKyAgICBnb3RvIHVzZV9zaGVsbF9hbHdheXNfcXVvdGluZ19zdHlsZTsKKworICBpZiAocXVvdGVfc3RyaW5nKQorICAgIGZvciAoOyAqcXVvdGVfc3RyaW5nOyBxdW90ZV9zdHJpbmcrKykKKyAgICAgIFNUT1JFICgqcXVvdGVfc3RyaW5nKTsKKworICBpZiAobGVuIDwgYnVmZmVyc2l6ZSkKKyAgICBidWZmZXJbbGVuXSA9ICdcMCc7CisgIHJldHVybiBsZW47CisKKyB1c2Vfc2hlbGxfYWx3YXlzX3F1b3Rpbmdfc3R5bGU6CisgIHJldHVybiBxdW90ZWFyZ19idWZmZXJfcmVzdHlsZWQgKGJ1ZmZlciwgYnVmZmVyc2l6ZSwgYXJnLCBhcmdzaXplLAorCQkJCSAgIHNoZWxsX2Fsd2F5c19xdW90aW5nX3N0eWxlLCBvKTsKK30KKworLyogUGxhY2UgaW50byBidWZmZXIgQlVGRkVSIChvZiBzaXplIEJVRkZFUlNJWkUpIGEgcXVvdGVkIHZlcnNpb24gb2YKKyAgIGFyZ3VtZW50IEFSRyAob2Ygc2l6ZSBBUkdTSVpFKSwgdXNpbmcgTyB0byBjb250cm9sIHF1b3RpbmcuCisgICBJZiBPIGlzIG51bGwsIHVzZSB0aGUgZGVmYXVsdC4KKyAgIFRlcm1pbmF0ZSB0aGUgb3V0cHV0IHdpdGggYSBudWxsIGNoYXJhY3RlciwgYW5kIHJldHVybiB0aGUgd3JpdHRlbgorICAgc2l6ZSBvZiB0aGUgb3V0cHV0LCBub3QgY291bnRpbmcgdGhlIHRlcm1pbmF0aW5nIG51bGwuCisgICBJZiBCVUZGRVJTSVpFIGlzIHRvbyBzbWFsbCB0byBzdG9yZSB0aGUgb3V0cHV0IHN0cmluZywgcmV0dXJuIHRoZQorICAgdmFsdWUgdGhhdCB3b3VsZCBoYXZlIGJlZW4gcmV0dXJuZWQgaGFkIEJVRkZFUlNJWkUgYmVlbiBsYXJnZSBlbm91Z2guCisgICBJZiBBUkdTSVpFIGlzIFNJWkVfTUFYLCB1c2UgdGhlIHN0cmluZyBsZW5ndGggb2YgdGhlIGFyZ3VtZW50IGZvcgorICAgQVJHU0laRS4gICovCitzaXplX3QKK3F1b3RlYXJnX2J1ZmZlciAoY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmZmVyc2l6ZSwKKwkJIGNoYXIgY29uc3QgKmFyZywgc2l6ZV90IGFyZ3NpemUsCisJCSBzdHJ1Y3QgcXVvdGluZ19vcHRpb25zIGNvbnN0ICpvKQoreworICBzdHJ1Y3QgcXVvdGluZ19vcHRpb25zIGNvbnN0ICpwID0gbyA/IG8gOiAmZGVmYXVsdF9xdW90aW5nX29wdGlvbnM7CisgIGludCBlID0gZXJybm87CisgIHNpemVfdCByID0gcXVvdGVhcmdfYnVmZmVyX3Jlc3R5bGVkIChidWZmZXIsIGJ1ZmZlcnNpemUsIGFyZywgYXJnc2l6ZSwKKwkJCQkgICAgICAgcC0+c3R5bGUsIHApOworICBlcnJubyA9IGU7CisgIHJldHVybiByOworfQorCisvKiBMaWtlIHF1b3RlYXJnX2J1ZmZlciAoLi4uLCBBUkcsIEFSR1NJWkUsIE8pLCBleGNlcHQgcmV0dXJuIG5ld2x5CisgICBhbGxvY2F0ZWQgc3RvcmFnZSBjb250YWluaW5nIHRoZSBxdW90ZWQgc3RyaW5nLiAgKi8KK2NoYXIgKgorcXVvdGVhcmdfYWxsb2MgKGNoYXIgY29uc3QgKmFyZywgc2l6ZV90IGFyZ3NpemUsCisJCXN0cnVjdCBxdW90aW5nX29wdGlvbnMgY29uc3QgKm8pCit7CisgIGludCBlID0gZXJybm87CisgIHNpemVfdCBidWZzaXplID0gcXVvdGVhcmdfYnVmZmVyICgwLCAwLCBhcmcsIGFyZ3NpemUsIG8pICsgMTsKKyAgY2hhciAqYnVmID0geGNoYXJhbGxvYyAoYnVmc2l6ZSk7CisgIHF1b3RlYXJnX2J1ZmZlciAoYnVmLCBidWZzaXplLCBhcmcsIGFyZ3NpemUsIG8pOworICBlcnJubyA9IGU7CisgIHJldHVybiBidWY7Cit9CisKKy8qIEEgc3RvcmFnZSBzbG90IHdpdGggc2l6ZSBhbmQgcG9pbnRlciB0byBhIHZhbHVlLiAgKi8KK3N0cnVjdCBzbG90dmVjCit7CisgIHNpemVfdCBzaXplOworICBjaGFyICp2YWw7Cit9OworCisvKiBQcmVhbGxvY2F0ZSBhIHNsb3QgMCBidWZmZXIsIHNvIHRoYXQgdGhlIGNhbGxlciBjYW4gYWx3YXlzIHF1b3RlCisgICBvbmUgc21hbGwgY29tcG9uZW50IG9mIGEgIm1lbW9yeSBleGhhdXN0ZWQiIG1lc3NhZ2UgaW4gc2xvdCAwLiAgKi8KK3N0YXRpYyBjaGFyIHNsb3QwWzI1Nl07CitzdGF0aWMgdW5zaWduZWQgaW50IG5zbG90cyA9IDE7CitzdGF0aWMgc3RydWN0IHNsb3R2ZWMgc2xvdHZlYzAgPSB7c2l6ZW9mIHNsb3QwLCBzbG90MH07CitzdGF0aWMgc3RydWN0IHNsb3R2ZWMgKnNsb3R2ZWMgPSAmc2xvdHZlYzA7CisKK3ZvaWQKK3F1b3RlYXJnX2ZyZWUgKHZvaWQpCit7CisgIHN0cnVjdCBzbG90dmVjICpzdiA9IHNsb3R2ZWM7CisgIHVuc2lnbmVkIGludCBpOworICBmb3IgKGkgPSAxOyBpIDwgbnNsb3RzOyBpKyspCisgICAgZnJlZSAoc3ZbaV0udmFsKTsKKyAgaWYgKHN2WzBdLnZhbCAhPSBzbG90MCkKKyAgICB7CisgICAgICBmcmVlIChzdlswXS52YWwpOworICAgICAgc2xvdHZlYzAuc2l6ZSA9IHNpemVvZiBzbG90MDsKKyAgICAgIHNsb3R2ZWMwLnZhbCA9IHNsb3QwOworICAgIH0KKyAgaWYgKHN2ICE9ICZzbG90dmVjMCkKKyAgICB7CisgICAgICBmcmVlIChzdik7CisgICAgICBzbG90dmVjID0gJnNsb3R2ZWMwOworICAgIH0KKyAgbnNsb3RzID0gMTsKK30KKworLyogVXNlIHN0b3JhZ2Ugc2xvdCBOIHRvIHJldHVybiBhIHF1b3RlZCB2ZXJzaW9uIG9mIGFyZ3VtZW50IEFSRy4KKyAgIEFSRyBpcyBvZiBzaXplIEFSR1NJWkUsIGJ1dCBpZiB0aGF0IGlzIFNJWkVfTUFYLCBBUkcgaXMgYQorICAgbnVsbC10ZXJtaW5hdGVkIHN0cmluZy4KKyAgIE9QVElPTlMgc3BlY2lmaWVzIHRoZSBxdW90aW5nIG9wdGlvbnMuCisgICBUaGUgcmV0dXJuZWQgdmFsdWUgcG9pbnRzIHRvIHN0YXRpYyBzdG9yYWdlIHRoYXQgY2FuIGJlCisgICByZXVzZWQgYnkgdGhlIG5leHQgY2FsbCB0byB0aGlzIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgdmFsdWUgb2YgTi4KKyAgIE4gbXVzdCBiZSBub25uZWdhdGl2ZS4gIE4gaXMgZGVsaWJlcmF0ZWx5IGRlY2xhcmVkIHdpdGggdHlwZSAiaW50IgorICAgdG8gYWxsb3cgZm9yIGZ1dHVyZSBleHRlbnNpb25zICh1c2luZyBuZWdhdGl2ZSB2YWx1ZXMpLiAgKi8KK3N0YXRpYyBjaGFyICoKK3F1b3RlYXJnX25fb3B0aW9ucyAoaW50IG4sIGNoYXIgY29uc3QgKmFyZywgc2l6ZV90IGFyZ3NpemUsCisJCSAgICBzdHJ1Y3QgcXVvdGluZ19vcHRpb25zIGNvbnN0ICpvcHRpb25zKQoreworICBpbnQgZSA9IGVycm5vOworCisgIHVuc2lnbmVkIGludCBuMCA9IG47CisgIHN0cnVjdCBzbG90dmVjICpzdiA9IHNsb3R2ZWM7CisKKyAgaWYgKG4gPCAwKQorICAgIGFib3J0ICgpOworCisgIGlmIChuc2xvdHMgPD0gbjApCisgICAgeworICAgICAgLyogRklYTUU6IHRlY2huaWNhbGx5LCB0aGUgdHlwZSBvZiBuMSBzaG91bGQgYmUgYHVuc2lnbmVkIGludCcsCisJIGJ1dCB0aGF0IGV2b2tlcyBhbiB1bnN1cHByZXNzaWJsZSB3YXJuaW5nIGZyb20gZ2NjLTQuMC4xIGFuZAorCSBvbGRlci4gIElmIGdjYyBldmVyIHByb3ZpZGVzIGFuIG9wdGlvbiB0byBzdXBwcmVzcyB0aGF0IHdhcm5pbmcsCisJIHJldmVydCB0byB0aGUgb3JpZ2luYWwgdHlwZSwgc28gdGhhdCB0aGUgdGVzdCBpbiB4YWxsb2Nfb3ZlcnNpemVkCisJIGlzIG9uY2UgYWdhaW4gcGVyZm9ybWVkIG9ubHkgYXQgY29tcGlsZSB0aW1lLiAgKi8KKyAgICAgIHNpemVfdCBuMSA9IG4wICsgMTsKKyAgICAgIGJvb2wgcHJlYWxsb2NhdGVkID0gKHN2ID09ICZzbG90dmVjMCk7CisKKyAgICAgIGlmICh4YWxsb2Nfb3ZlcnNpemVkIChuMSwgc2l6ZW9mICpzdikpCisJeGFsbG9jX2RpZSAoKTsKKworICAgICAgc2xvdHZlYyA9IHN2ID0geHJlYWxsb2MgKHByZWFsbG9jYXRlZCA/IE5VTEwgOiBzdiwgbjEgKiBzaXplb2YgKnN2KTsKKyAgICAgIGlmIChwcmVhbGxvY2F0ZWQpCisJKnN2ID0gc2xvdHZlYzA7CisgICAgICBtZW1zZXQgKHN2ICsgbnNsb3RzLCAwLCAobjEgLSBuc2xvdHMpICogc2l6ZW9mICpzdik7CisgICAgICBuc2xvdHMgPSBuMTsKKyAgICB9CisKKyAgeworICAgIHNpemVfdCBzaXplID0gc3Zbbl0uc2l6ZTsKKyAgICBjaGFyICp2YWwgPSBzdltuXS52YWw7CisgICAgc2l6ZV90IHFzaXplID0gcXVvdGVhcmdfYnVmZmVyICh2YWwsIHNpemUsIGFyZywgYXJnc2l6ZSwgb3B0aW9ucyk7CisKKyAgICBpZiAoc2l6ZSA8PSBxc2l6ZSkKKyAgICAgIHsKKwlzdltuXS5zaXplID0gc2l6ZSA9IHFzaXplICsgMTsKKwlpZiAodmFsICE9IHNsb3QwKQorCSAgZnJlZSAodmFsKTsKKwlzdltuXS52YWwgPSB2YWwgPSB4Y2hhcmFsbG9jIChzaXplKTsKKwlxdW90ZWFyZ19idWZmZXIgKHZhbCwgc2l6ZSwgYXJnLCBhcmdzaXplLCBvcHRpb25zKTsKKyAgICAgIH0KKworICAgIGVycm5vID0gZTsKKyAgICByZXR1cm4gdmFsOworICB9Cit9CisKK2NoYXIgKgorcXVvdGVhcmdfbiAoaW50IG4sIGNoYXIgY29uc3QgKmFyZykKK3sKKyAgcmV0dXJuIHF1b3RlYXJnX25fb3B0aW9ucyAobiwgYXJnLCBTSVpFX01BWCwgJmRlZmF1bHRfcXVvdGluZ19vcHRpb25zKTsKK30KKworY2hhciAqCitxdW90ZWFyZyAoY2hhciBjb25zdCAqYXJnKQoreworICByZXR1cm4gcXVvdGVhcmdfbiAoMCwgYXJnKTsKK30KKworLyogUmV0dXJuIHF1b3Rpbmcgb3B0aW9ucyBmb3IgU1RZTEUsIHdpdGggbm8gZXh0cmEgcXVvdGluZy4gICovCitzdGF0aWMgc3RydWN0IHF1b3Rpbmdfb3B0aW9ucworcXVvdGluZ19vcHRpb25zX2Zyb21fc3R5bGUgKGVudW0gcXVvdGluZ19zdHlsZSBzdHlsZSkKK3sKKyAgc3RydWN0IHF1b3Rpbmdfb3B0aW9ucyBvOworICBvLnN0eWxlID0gc3R5bGU7CisgIG1lbXNldCAoby5xdW90ZV90aGVzZV90b28sIDAsIHNpemVvZiBvLnF1b3RlX3RoZXNlX3Rvbyk7CisgIHJldHVybiBvOworfQorCitjaGFyICoKK3F1b3RlYXJnX25fc3R5bGUgKGludCBuLCBlbnVtIHF1b3Rpbmdfc3R5bGUgcywgY2hhciBjb25zdCAqYXJnKQoreworICBzdHJ1Y3QgcXVvdGluZ19vcHRpb25zIGNvbnN0IG8gPSBxdW90aW5nX29wdGlvbnNfZnJvbV9zdHlsZSAocyk7CisgIHJldHVybiBxdW90ZWFyZ19uX29wdGlvbnMgKG4sIGFyZywgU0laRV9NQVgsICZvKTsKK30KKworY2hhciAqCitxdW90ZWFyZ19uX3N0eWxlX21lbSAoaW50IG4sIGVudW0gcXVvdGluZ19zdHlsZSBzLAorCQkgICAgICBjaGFyIGNvbnN0ICphcmcsIHNpemVfdCBhcmdzaXplKQoreworICBzdHJ1Y3QgcXVvdGluZ19vcHRpb25zIGNvbnN0IG8gPSBxdW90aW5nX29wdGlvbnNfZnJvbV9zdHlsZSAocyk7CisgIHJldHVybiBxdW90ZWFyZ19uX29wdGlvbnMgKG4sIGFyZywgYXJnc2l6ZSwgJm8pOworfQorCitjaGFyICoKK3F1b3RlYXJnX3N0eWxlIChlbnVtIHF1b3Rpbmdfc3R5bGUgcywgY2hhciBjb25zdCAqYXJnKQoreworICByZXR1cm4gcXVvdGVhcmdfbl9zdHlsZSAoMCwgcywgYXJnKTsKK30KKworY2hhciAqCitxdW90ZWFyZ19jaGFyIChjaGFyIGNvbnN0ICphcmcsIGNoYXIgY2gpCit7CisgIHN0cnVjdCBxdW90aW5nX29wdGlvbnMgb3B0aW9uczsKKyAgb3B0aW9ucyA9IGRlZmF1bHRfcXVvdGluZ19vcHRpb25zOworICBzZXRfY2hhcl9xdW90aW5nICgmb3B0aW9ucywgY2gsIDEpOworICByZXR1cm4gcXVvdGVhcmdfbl9vcHRpb25zICgwLCBhcmcsIFNJWkVfTUFYLCAmb3B0aW9ucyk7Cit9CisKK2NoYXIgKgorcXVvdGVhcmdfY29sb24gKGNoYXIgY29uc3QgKmFyZykKK3sKKyAgcmV0dXJuIHF1b3RlYXJnX2NoYXIgKGFyZywgJzonKTsKK30KZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWIvcXVvdGVhcmcuaCBiL3BhcnRlZC0xLjguNy9saWIvcXVvdGVhcmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODg3ZGYzCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYi9xdW90ZWFyZy5oCkBAIC0wLDAgKzEsMTQwIEBACisvKiBxdW90ZWFyZy5oIC0gcXVvdGUgYXJndW1lbnRzIGZvciBvdXRwdXQKKworICAgQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDA0LCAyMDA2IEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisKKy8qIFdyaXR0ZW4gYnkgUGF1bCBFZ2dlcnQgPGVnZ2VydEB0d2luc3VuLmNvbT4gKi8KKworI2lmbmRlZiBRVU9URUFSR19IXworIyBkZWZpbmUgUVVPVEVBUkdfSF8gMQorCisjIGluY2x1ZGUgPHN0ZGRlZi5oPgorCisvKiBCYXNpYyBxdW90aW5nIHN0eWxlcy4gICovCitlbnVtIHF1b3Rpbmdfc3R5bGUKKyAgeworICAgIC8qIE91dHB1dCBuYW1lcyBhcy1pcyAobHMgLS1xdW90aW5nLXN0eWxlPWxpdGVyYWwpLiAgKi8KKyAgICBsaXRlcmFsX3F1b3Rpbmdfc3R5bGUsCisKKyAgICAvKiBRdW90ZSBuYW1lcyBmb3IgdGhlIHNoZWxsIGlmIHRoZXkgY29udGFpbiBzaGVsbCBtZXRhY2hhcmFjdGVycworICAgICAgIG9yIHdvdWxkIGNhdXNlIGFtYmlndW91cyBvdXRwdXQgKGxzIC0tcXVvdGluZy1zdHlsZT1zaGVsbCkuICAqLworICAgIHNoZWxsX3F1b3Rpbmdfc3R5bGUsCisKKyAgICAvKiBRdW90ZSBuYW1lcyBmb3IgdGhlIHNoZWxsLCBldmVuIGlmIHRoZXkgd291bGQgbm9ybWFsbHkgbm90CisgICAgICAgcmVxdWlyZSBxdW90aW5nIChscyAtLXF1b3Rpbmctc3R5bGU9c2hlbGwtYWx3YXlzKS4gICovCisgICAgc2hlbGxfYWx3YXlzX3F1b3Rpbmdfc3R5bGUsCisKKyAgICAvKiBRdW90ZSBuYW1lcyBhcyBmb3IgYSBDIGxhbmd1YWdlIHN0cmluZyAobHMgLS1xdW90aW5nLXN0eWxlPWMpLiAgKi8KKyAgICBjX3F1b3Rpbmdfc3R5bGUsCisKKyAgICAvKiBMaWtlIGNfcXVvdGluZ19zdHlsZSBleGNlcHQgb21pdCB0aGUgc3Vycm91bmRpbmcgZG91YmxlLXF1b3RlCisgICAgICAgY2hhcmFjdGVycyAobHMgLS1xdW90aW5nLXN0eWxlPWVzY2FwZSkuICAqLworICAgIGVzY2FwZV9xdW90aW5nX3N0eWxlLAorCisgICAgLyogTGlrZSBjbG9jYWxlX3F1b3Rpbmdfc3R5bGUsIGJ1dCBxdW90ZSBgbGlrZSB0aGlzJyBpbnN0ZWFkIG9mCisgICAgICAgImxpa2UgdGhpcyIgaW4gdGhlIGRlZmF1bHQgQyBsb2NhbGUgKGxzIC0tcXVvdGluZy1zdHlsZT1sb2NhbGUpLiAgKi8KKyAgICBsb2NhbGVfcXVvdGluZ19zdHlsZSwKKworICAgIC8qIExpa2UgY19xdW90aW5nX3N0eWxlIGV4Y2VwdCB1c2UgcXVvdGF0aW9uIG1hcmtzIGFwcHJvcHJpYXRlIGZvcgorICAgICAgIHRoZSBsb2NhbGUgKGxzIC0tcXVvdGluZy1zdHlsZT1jbG9jYWxlKS4gICovCisgICAgY2xvY2FsZV9xdW90aW5nX3N0eWxlCisgIH07CisKKy8qIEZvciBub3csIC0tcXVvdGluZy1zdHlsZT1saXRlcmFsIGlzIHRoZSBkZWZhdWx0LCBidXQgdGhpcyBtYXkgY2hhbmdlLiAgKi8KKyMgaWZuZGVmIERFRkFVTFRfUVVPVElOR19TVFlMRQorIyAgZGVmaW5lIERFRkFVTFRfUVVPVElOR19TVFlMRSBsaXRlcmFsX3F1b3Rpbmdfc3R5bGUKKyMgZW5kaWYKKworLyogTmFtZXMgb2YgcXVvdGluZyBzdHlsZXMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgdmFsdWVzLiAgKi8KK2V4dGVybiBjaGFyIGNvbnN0ICpjb25zdCBxdW90aW5nX3N0eWxlX2FyZ3NbXTsKK2V4dGVybiBlbnVtIHF1b3Rpbmdfc3R5bGUgY29uc3QgcXVvdGluZ19zdHlsZV92YWxzW107CisKK3N0cnVjdCBxdW90aW5nX29wdGlvbnM7CisKKy8qIFRoZSBmdW5jdGlvbnMgbGlzdGVkIGJlbG93IHNldCBhbmQgdXNlIGEgaGlkZGVuIHZhcmlhYmxlCisgICB0aGF0IGNvbnRhaW5zIHRoZSBkZWZhdWx0IHF1b3Rpbmcgc3R5bGUgb3B0aW9ucy4gICovCisKKy8qIEFsbG9jYXRlIGEgbmV3IHNldCBvZiBxdW90aW5nIG9wdGlvbnMsIHdpdGggY29udGVudHMgaW5pdGlhbGx5IGlkZW50aWNhbAorICAgdG8gTyBpZiBPIGlzIG5vdCBudWxsLCBvciB0byB0aGUgZGVmYXVsdCBpZiBPIGlzIG51bGwuCisgICBJdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gZnJlZSB0aGUgcmVzdWx0LiAgKi8KK3N0cnVjdCBxdW90aW5nX29wdGlvbnMgKmNsb25lX3F1b3Rpbmdfb3B0aW9ucyAoc3RydWN0IHF1b3Rpbmdfb3B0aW9ucyAqbyk7CisKKy8qIEdldCB0aGUgdmFsdWUgb2YgTydzIHF1b3Rpbmcgc3R5bGUuICBJZiBPIGlzIG51bGwsIHVzZSB0aGUgZGVmYXVsdC4gICovCitlbnVtIHF1b3Rpbmdfc3R5bGUgZ2V0X3F1b3Rpbmdfc3R5bGUgKHN0cnVjdCBxdW90aW5nX29wdGlvbnMgKm8pOworCisvKiBJbiBPIChvciBpbiB0aGUgZGVmYXVsdCBpZiBPIGlzIG51bGwpLAorICAgc2V0IHRoZSB2YWx1ZSBvZiB0aGUgcXVvdGluZyBzdHlsZSB0byBTLiAgKi8KK3ZvaWQgc2V0X3F1b3Rpbmdfc3R5bGUgKHN0cnVjdCBxdW90aW5nX29wdGlvbnMgKm8sIGVudW0gcXVvdGluZ19zdHlsZSBzKTsKKworLyogSW4gTyAob3IgaW4gdGhlIGRlZmF1bHQgaWYgTyBpcyBudWxsKSwKKyAgIHNldCB0aGUgdmFsdWUgb2YgdGhlIHF1b3Rpbmcgb3B0aW9ucyBmb3IgY2hhcmFjdGVyIEMgdG8gSS4KKyAgIFJldHVybiB0aGUgb2xkIHZhbHVlLiAgQ3VycmVudGx5LCB0aGUgb25seSB2YWx1ZXMgZGVmaW5lZCBmb3IgSSBhcmUKKyAgIDAgKHRoZSBkZWZhdWx0KSBhbmQgMSAod2hpY2ggbWVhbnMgdG8gcXVvdGUgdGhlIGNoYXJhY3RlciBldmVuIGlmCisgICBpdCB3b3VsZCBub3Qgb3RoZXJ3aXNlIGJlIHF1b3RlZCkuICAqLworaW50IHNldF9jaGFyX3F1b3RpbmcgKHN0cnVjdCBxdW90aW5nX29wdGlvbnMgKm8sIGNoYXIgYywgaW50IGkpOworCisvKiBQbGFjZSBpbnRvIGJ1ZmZlciBCVUZGRVIgKG9mIHNpemUgQlVGRkVSU0laRSkgYSBxdW90ZWQgdmVyc2lvbiBvZgorICAgYXJndW1lbnQgQVJHIChvZiBzaXplIEFSR1NJWkUpLCB1c2luZyBPIHRvIGNvbnRyb2wgcXVvdGluZy4KKyAgIElmIE8gaXMgbnVsbCwgdXNlIHRoZSBkZWZhdWx0LgorICAgVGVybWluYXRlIHRoZSBvdXRwdXQgd2l0aCBhIG51bGwgY2hhcmFjdGVyLCBhbmQgcmV0dXJuIHRoZSB3cml0dGVuCisgICBzaXplIG9mIHRoZSBvdXRwdXQsIG5vdCBjb3VudGluZyB0aGUgdGVybWluYXRpbmcgbnVsbC4KKyAgIElmIEJVRkZFUlNJWkUgaXMgdG9vIHNtYWxsIHRvIHN0b3JlIHRoZSBvdXRwdXQgc3RyaW5nLCByZXR1cm4gdGhlCisgICB2YWx1ZSB0aGF0IHdvdWxkIGhhdmUgYmVlbiByZXR1cm5lZCBoYWQgQlVGRkVSU0laRSBiZWVuIGxhcmdlIGVub3VnaC4KKyAgIElmIEFSR1NJWkUgaXMgLTEsIHVzZSB0aGUgc3RyaW5nIGxlbmd0aCBvZiB0aGUgYXJndW1lbnQgZm9yIEFSR1NJWkUuICAqLworc2l6ZV90IHF1b3RlYXJnX2J1ZmZlciAoY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmZmVyc2l6ZSwKKwkJCWNoYXIgY29uc3QgKmFyZywgc2l6ZV90IGFyZ3NpemUsCisJCQlzdHJ1Y3QgcXVvdGluZ19vcHRpb25zIGNvbnN0ICpvKTsKKworLyogTGlrZSBxdW90ZWFyZ19idWZmZXIsIGV4Y2VwdCByZXR1cm4gdGhlIHJlc3VsdCBpbiBhIG5ld2x5IGFsbG9jYXRlZAorICAgYnVmZmVyLiAgSXQgaXMgdGhlIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGZyZWUgdGhlIHJlc3VsdC4gICovCitjaGFyICpxdW90ZWFyZ19hbGxvYyAoY2hhciBjb25zdCAqYXJnLCBzaXplX3QgYXJnc2l6ZSwKKwkJICAgICAgc3RydWN0IHF1b3Rpbmdfb3B0aW9ucyBjb25zdCAqbyk7CisKKy8qIFVzZSBzdG9yYWdlIHNsb3QgTiB0byByZXR1cm4gYSBxdW90ZWQgdmVyc2lvbiBvZiB0aGUgc3RyaW5nIEFSRy4KKyAgIFVzZSB0aGUgZGVmYXVsdCBxdW90aW5nIG9wdGlvbnMuCisgICBUaGUgcmV0dXJuZWQgdmFsdWUgcG9pbnRzIHRvIHN0YXRpYyBzdG9yYWdlIHRoYXQgY2FuIGJlCisgICByZXVzZWQgYnkgdGhlIG5leHQgY2FsbCB0byB0aGlzIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgdmFsdWUgb2YgTi4KKyAgIE4gbXVzdCBiZSBub25uZWdhdGl2ZS4gICovCitjaGFyICpxdW90ZWFyZ19uIChpbnQgbiwgY2hhciBjb25zdCAqYXJnKTsKKworLyogRXF1aXZhbGVudCB0byBxdW90ZWFyZ19uICgwLCBBUkcpLiAgKi8KK2NoYXIgKnF1b3RlYXJnIChjaGFyIGNvbnN0ICphcmcpOworCisvKiBVc2Ugc3R5bGUgUyBhbmQgc3RvcmFnZSBzbG90IE4gdG8gcmV0dXJuIGEgcXVvdGVkIHZlcnNpb24gb2YgdGhlIHN0cmluZyBBUkcuCisgICBUaGlzIGlzIGxpa2UgcXVvdGVhcmdfbiAoTiwgQVJHKSwgZXhjZXB0IHRoYXQgaXQgdXNlcyBTIHdpdGggbm8gb3RoZXIKKyAgIG9wdGlvbnMgdG8gc3BlY2lmeSB0aGUgcXVvdGluZyBtZXRob2QuICAqLworY2hhciAqcXVvdGVhcmdfbl9zdHlsZSAoaW50IG4sIGVudW0gcXVvdGluZ19zdHlsZSBzLCBjaGFyIGNvbnN0ICphcmcpOworCisvKiBVc2Ugc3R5bGUgUyBhbmQgc3RvcmFnZSBzbG90IE4gdG8gcmV0dXJuIGEgcXVvdGVkIHZlcnNpb24gb2YgdGhlCisgICBhcmd1bWVudCBBUkcgb2Ygc2l6ZSBBUkdTSVpFLiAgVGhpcyBpcyBsaWtlIHF1b3RlYXJnX25fc3R5bGUKKyAgIChOLCBTLCBBUkcpLCBleGNlcHQgaXQgY2FuIHF1b3RlIG51bGwgYnl0ZXMuICAqLworY2hhciAqcXVvdGVhcmdfbl9zdHlsZV9tZW0gKGludCBuLCBlbnVtIHF1b3Rpbmdfc3R5bGUgcywKKwkJCSAgICBjaGFyIGNvbnN0ICphcmcsIHNpemVfdCBhcmdzaXplKTsKKworLyogRXF1aXZhbGVudCB0byBxdW90ZWFyZ19uX3N0eWxlICgwLCBTLCBBUkcpLiAgKi8KK2NoYXIgKnF1b3RlYXJnX3N0eWxlIChlbnVtIHF1b3Rpbmdfc3R5bGUgcywgY2hhciBjb25zdCAqYXJnKTsKKworLyogTGlrZSBxdW90ZWFyZyAoQVJHKSwgZXhjZXB0IGFsc28gcXVvdGUgYW55IGluc3RhbmNlcyBvZiBDSC4gICovCitjaGFyICpxdW90ZWFyZ19jaGFyIChjaGFyIGNvbnN0ICphcmcsIGNoYXIgY2gpOworCisvKiBFcXVpdmFsZW50IHRvIHF1b3RlYXJnX2NoYXIgKEFSRywgJzonKS4gICovCitjaGFyICpxdW90ZWFyZ19jb2xvbiAoY2hhciBjb25zdCAqYXJnKTsKKworLyogRnJlZSBhbnkgZHluYW1pY2FsbHkgYWxsb2NhdGVkIG1lbW9yeS4gICovCit2b2lkIHF1b3RlYXJnX2ZyZWUgKHZvaWQpOworCisjZW5kaWYgLyogIVFVT1RFQVJHX0hfICovCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGliL3JlYWxsb2MuYyBiL3BhcnRlZC0xLjguNy9saWIvcmVhbGxvYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxZmU5ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGliL3JlYWxsb2MuYwpAQCAtMCwwICsxLDQ1IEBACisvKiByZWFsbG9jKCkgZnVuY3Rpb24gdGhhdCBpcyBnbGliYyBjb21wYXRpYmxlLgorCisgICBDb3B5cmlnaHQgKEMpIDE5OTcsIDIwMDMsIDIwMDQsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworCisvKiB3cml0dGVuIGJ5IEppbSBNZXllcmluZyAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjdW5kZWYgcmVhbGxvYworCisjaW5jbHVkZSA8c3RkbGliLmg+CisKKy8qIENoYW5nZSB0aGUgc2l6ZSBvZiBhbiBhbGxvY2F0ZWQgYmxvY2sgb2YgbWVtb3J5IFAgdG8gTiBieXRlcywKKyAgIHdpdGggZXJyb3IgY2hlY2tpbmcuICBJZiBOIGlzIHplcm8sIGNoYW5nZSBpdCB0byAxLiAgSWYgUCBpcyBOVUxMLAorICAgdXNlIG1hbGxvYy4gICovCisKK3ZvaWQgKgorcnBsX3JlYWxsb2MgKHZvaWQgKnAsIHNpemVfdCBuKQoreworICBpZiAobiA9PSAwKQorICAgIHsKKyAgICAgIG4gPSAxOworCisgICAgICAvKiBJbiB0aGVvcnkgcmVhbGxvYyBtaWdodCBmYWlsLCBzbyBkb24ndCByZWx5IG9uIGl0IHRvIGZyZWUuICAqLworICAgICAgZnJlZSAocCk7CisgICAgICBwID0gTlVMTDsKKyAgICB9CisKKyAgaWYgKHAgPT0gTlVMTCkKKyAgICByZXR1cm4gbWFsbG9jIChuKTsKKyAgcmV0dXJuIHJlYWxsb2MgKHAsIG4pOworfQpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYi9yZWYtYWRkLnNpbiBiL3BhcnRlZC0xLjguNy9saWIvcmVmLWFkZC5zaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM1Y2M3OQotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWIvcmVmLWFkZC5zaW4KQEAgLTAsMCArMSwzMCBAQAorIyBBZGQgdGhpcyBwYWNrYWdlIHRvIGEgbGlzdCBvZiByZWZlcmVuY2VzIHN0b3JlZCBpbiBhIHRleHQgZmlsZS4KKyMKKyMgICBDb3B5cmlnaHQgKEMpIDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyMgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyMKKyMgV3JpdHRlbiBieSBCcnVubyBIYWlibGUgPGhhaWJsZUBjbGlzcC5jb25zLm9yZz4uCisjCisvXiMgUGFja2FnZXMgdXNpbmcgdGhpcyBmaWxlOiAvIHsKKyAgcy8jIFBhY2thZ2VzIHVzaW5nIHRoaXMgZmlsZTovLworICB0YQorICA6YQorICBzLyBAUEFDS0FHRUAgLyBAUEFDS0FHRUAgLworICB0YgorICBzLyAkLyBAUEFDS0FHRUAgLworICA6YgorICBzL14vIyBQYWNrYWdlcyB1c2luZyB0aGlzIGZpbGU6LworfQpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYi9yZWYtZGVsLnNpbiBiL3BhcnRlZC0xLjguNy9saWIvcmVmLWRlbC5zaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTkzMDFiZgotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWIvcmVmLWRlbC5zaW4KQEAgLTAsMCArMSwyNSBAQAorIyBSZW1vdmUgdGhpcyBwYWNrYWdlIGZyb20gYSBsaXN0IG9mIHJlZmVyZW5jZXMgc3RvcmVkIGluIGEgdGV4dCBmaWxlLgorIworIyAgIENvcHlyaWdodCAoQykgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyAgIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorIworIyBXcml0dGVuIGJ5IEJydW5vIEhhaWJsZSA8aGFpYmxlQGNsaXNwLmNvbnMub3JnPi4KKyMKKy9eIyBQYWNrYWdlcyB1c2luZyB0aGlzIGZpbGU6IC8geworICBzLyMgUGFja2FnZXMgdXNpbmcgdGhpcyBmaWxlOi8vCisgIHMvIEBQQUNLQUdFQCAvIC8KKyAgcy9eLyMgUGFja2FnZXMgdXNpbmcgdGhpcyBmaWxlOi8KK30KZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWIvcmVnY29tcC5jIGIvcGFydGVkLTEuOC43L2xpYi9yZWdjb21wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU0ZDI0MwotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWIvcmVnY29tcC5jCkBAIC0wLDAgKzEsMzgzMiBAQAorLyogRXh0ZW5kZWQgcmVndWxhciBleHByZXNzaW9uIG1hdGNoaW5nIGFuZCBzZWFyY2ggbGlicmFyeS4KKyAgIENvcHlyaWdodCAoQykgMjAwMiwyMDAzLDIwMDQsMjAwNSwyMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKyAgIENvbnRyaWJ1dGVkIGJ5IElzYW11IEhhc2VnYXdhIDxpc2FtdUB5YW1hdG8uaWJtLmNvbT4uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90IHJlX2NvbXBpbGVfaW50ZXJuYWwgKHJlZ2V4X3QgKnByZWcsIGNvbnN0IGNoYXIgKiBwYXR0ZXJuLAorCQkJCQkgIHNpemVfdCBsZW5ndGgsIHJlZ19zeW50YXhfdCBzeW50YXgpOworc3RhdGljIHZvaWQgcmVfY29tcGlsZV9mYXN0bWFwX2l0ZXIgKHJlZ2V4X3QgKmJ1ZnAsCisJCQkJICAgICBjb25zdCByZV9kZmFzdGF0ZV90ICppbml0X3N0YXRlLAorCQkJCSAgICAgY2hhciAqZmFzdG1hcCk7CitzdGF0aWMgcmVnX2VycmNvZGVfdCBpbml0X2RmYSAocmVfZGZhX3QgKmRmYSwgc2l6ZV90IHBhdF9sZW4pOworI2lmZGVmIFJFX0VOQUJMRV9JMThOCitzdGF0aWMgdm9pZCBmcmVlX2NoYXJzZXQgKHJlX2NoYXJzZXRfdCAqY3NldCk7CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KK3N0YXRpYyB2b2lkIGZyZWVfd29ya2FyZWFfY29tcGlsZSAocmVnZXhfdCAqcHJlZyk7CitzdGF0aWMgcmVnX2VycmNvZGVfdCBjcmVhdGVfaW5pdGlhbF9zdGF0ZSAocmVfZGZhX3QgKmRmYSk7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KK3N0YXRpYyB2b2lkIG9wdGltaXplX3V0ZjggKHJlX2RmYV90ICpkZmEpOworI2VuZGlmCitzdGF0aWMgcmVnX2VycmNvZGVfdCBhbmFseXplIChyZWdleF90ICpwcmVnKTsKK3N0YXRpYyByZWdfZXJyY29kZV90IHByZW9yZGVyIChiaW5fdHJlZV90ICpyb290LAorCQkJICAgICAgIHJlZ19lcnJjb2RlX3QgKGZuICh2b2lkICosIGJpbl90cmVlX3QgKikpLAorCQkJICAgICAgIHZvaWQgKmV4dHJhKTsKK3N0YXRpYyByZWdfZXJyY29kZV90IHBvc3RvcmRlciAoYmluX3RyZWVfdCAqcm9vdCwKKwkJCQlyZWdfZXJyY29kZV90IChmbiAodm9pZCAqLCBiaW5fdHJlZV90ICopKSwKKwkJCQl2b2lkICpleHRyYSk7CitzdGF0aWMgcmVnX2VycmNvZGVfdCBvcHRpbWl6ZV9zdWJleHBzICh2b2lkICpleHRyYSwgYmluX3RyZWVfdCAqbm9kZSk7CitzdGF0aWMgcmVnX2VycmNvZGVfdCBsb3dlcl9zdWJleHBzICh2b2lkICpleHRyYSwgYmluX3RyZWVfdCAqbm9kZSk7CitzdGF0aWMgYmluX3RyZWVfdCAqbG93ZXJfc3ViZXhwIChyZWdfZXJyY29kZV90ICplcnIsIHJlZ2V4X3QgKnByZWcsCisJCQkJIGJpbl90cmVlX3QgKm5vZGUpOworc3RhdGljIHJlZ19lcnJjb2RlX3QgY2FsY19maXJzdCAodm9pZCAqZXh0cmEsIGJpbl90cmVlX3QgKm5vZGUpOworc3RhdGljIHJlZ19lcnJjb2RlX3QgY2FsY19uZXh0ICh2b2lkICpleHRyYSwgYmluX3RyZWVfdCAqbm9kZSk7CitzdGF0aWMgcmVnX2VycmNvZGVfdCBsaW5rX25mYV9ub2RlcyAodm9pZCAqZXh0cmEsIGJpbl90cmVlX3QgKm5vZGUpOworc3RhdGljIElkeCBkdXBsaWNhdGVfbm9kZSAocmVfZGZhX3QgKmRmYSwgSWR4IG9yZ19pZHgsIHVuc2lnbmVkIGludCBjb25zdHJhaW50KTsKK3N0YXRpYyBJZHggc2VhcmNoX2R1cGxpY2F0ZWRfbm9kZSAoY29uc3QgcmVfZGZhX3QgKmRmYSwgSWR4IG9yZ19ub2RlLAorCQkJCSAgIHVuc2lnbmVkIGludCBjb25zdHJhaW50KTsKK3N0YXRpYyByZWdfZXJyY29kZV90IGNhbGNfZWNsb3N1cmUgKHJlX2RmYV90ICpkZmEpOworc3RhdGljIHJlZ19lcnJjb2RlX3QgY2FsY19lY2xvc3VyZV9pdGVyIChyZV9ub2RlX3NldCAqbmV3X3NldCwgcmVfZGZhX3QgKmRmYSwKKwkJCQkJIElkeCBub2RlLCBib29sIHJvb3QpOworc3RhdGljIHJlZ19lcnJjb2RlX3QgY2FsY19pbnZlY2xvc3VyZSAocmVfZGZhX3QgKmRmYSk7CitzdGF0aWMgSWR4IGZldGNoX251bWJlciAocmVfc3RyaW5nX3QgKmlucHV0LCByZV90b2tlbl90ICp0b2tlbiwKKwkJCSByZWdfc3ludGF4X3Qgc3ludGF4KTsKK3N0YXRpYyBpbnQgcGVla190b2tlbiAocmVfdG9rZW5fdCAqdG9rZW4sIHJlX3N0cmluZ190ICppbnB1dCwKKwkJCXJlZ19zeW50YXhfdCBzeW50YXgpIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIGJpbl90cmVlX3QgKnBhcnNlIChyZV9zdHJpbmdfdCAqcmVnZXhwLCByZWdleF90ICpwcmVnLAorCQkJICByZWdfc3ludGF4X3Qgc3ludGF4LCByZWdfZXJyY29kZV90ICplcnIpOworc3RhdGljIGJpbl90cmVlX3QgKnBhcnNlX3JlZ19leHAgKHJlX3N0cmluZ190ICpyZWdleHAsIHJlZ2V4X3QgKnByZWcsCisJCQkJICByZV90b2tlbl90ICp0b2tlbiwgcmVnX3N5bnRheF90IHN5bnRheCwKKwkJCQkgIElkeCBuZXN0LCByZWdfZXJyY29kZV90ICplcnIpOworc3RhdGljIGJpbl90cmVlX3QgKnBhcnNlX2JyYW5jaCAocmVfc3RyaW5nX3QgKnJlZ2V4cCwgcmVnZXhfdCAqcHJlZywKKwkJCQkgcmVfdG9rZW5fdCAqdG9rZW4sIHJlZ19zeW50YXhfdCBzeW50YXgsCisJCQkJIElkeCBuZXN0LCByZWdfZXJyY29kZV90ICplcnIpOworc3RhdGljIGJpbl90cmVlX3QgKnBhcnNlX2V4cHJlc3Npb24gKHJlX3N0cmluZ190ICpyZWdleHAsIHJlZ2V4X3QgKnByZWcsCisJCQkJICAgICByZV90b2tlbl90ICp0b2tlbiwgcmVnX3N5bnRheF90IHN5bnRheCwKKwkJCQkgICAgIElkeCBuZXN0LCByZWdfZXJyY29kZV90ICplcnIpOworc3RhdGljIGJpbl90cmVlX3QgKnBhcnNlX3N1Yl9leHAgKHJlX3N0cmluZ190ICpyZWdleHAsIHJlZ2V4X3QgKnByZWcsCisJCQkJICByZV90b2tlbl90ICp0b2tlbiwgcmVnX3N5bnRheF90IHN5bnRheCwKKwkJCQkgIElkeCBuZXN0LCByZWdfZXJyY29kZV90ICplcnIpOworc3RhdGljIGJpbl90cmVlX3QgKnBhcnNlX2R1cF9vcCAoYmluX3RyZWVfdCAqZHVwX2VsZW0sIHJlX3N0cmluZ190ICpyZWdleHAsCisJCQkJIHJlX2RmYV90ICpkZmEsIHJlX3Rva2VuX3QgKnRva2VuLAorCQkJCSByZWdfc3ludGF4X3Qgc3ludGF4LCByZWdfZXJyY29kZV90ICplcnIpOworc3RhdGljIGJpbl90cmVlX3QgKnBhcnNlX2JyYWNrZXRfZXhwIChyZV9zdHJpbmdfdCAqcmVnZXhwLCByZV9kZmFfdCAqZGZhLAorCQkJCSAgICAgIHJlX3Rva2VuX3QgKnRva2VuLCByZWdfc3ludGF4X3Qgc3ludGF4LAorCQkJCSAgICAgIHJlZ19lcnJjb2RlX3QgKmVycik7CitzdGF0aWMgcmVnX2VycmNvZGVfdCBwYXJzZV9icmFja2V0X2VsZW1lbnQgKGJyYWNrZXRfZWxlbV90ICplbGVtLAorCQkJCQkgICAgcmVfc3RyaW5nX3QgKnJlZ2V4cCwKKwkJCQkJICAgIHJlX3Rva2VuX3QgKnRva2VuLCBpbnQgdG9rZW5fbGVuLAorCQkJCQkgICAgcmVfZGZhX3QgKmRmYSwKKwkJCQkJICAgIHJlZ19zeW50YXhfdCBzeW50YXgsCisJCQkJCSAgICBib29sIGFjY2VwdF9oeXBoZW4pOworc3RhdGljIHJlZ19lcnJjb2RlX3QgcGFyc2VfYnJhY2tldF9zeW1ib2wgKGJyYWNrZXRfZWxlbV90ICplbGVtLAorCQkJCQkgIHJlX3N0cmluZ190ICpyZWdleHAsCisJCQkJCSAgcmVfdG9rZW5fdCAqdG9rZW4pOworI2lmZGVmIFJFX0VOQUJMRV9JMThOCitzdGF0aWMgcmVnX2VycmNvZGVfdCBidWlsZF9lcXVpdl9jbGFzcyAoYml0c2V0X3Qgc2Jjc2V0LAorCQkJCQlyZV9jaGFyc2V0X3QgKm1iY3NldCwKKwkJCQkJSWR4ICplcXVpdl9jbGFzc19hbGxvYywKKwkJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSk7CitzdGF0aWMgcmVnX2VycmNvZGVfdCBidWlsZF9jaGFyY2xhc3MgKFJFX1RSQU5TTEFURV9UWVBFIHRyYW5zLAorCQkJCSAgICAgIGJpdHNldF90IHNiY3NldCwKKwkJCQkgICAgICByZV9jaGFyc2V0X3QgKm1iY3NldCwKKwkJCQkgICAgICBJZHggKmNoYXJfY2xhc3NfYWxsb2MsCisJCQkJICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY2xhc3NfbmFtZSwKKwkJCQkgICAgICByZWdfc3ludGF4X3Qgc3ludGF4KTsKKyNlbHNlICAvKiBub3QgUkVfRU5BQkxFX0kxOE4gKi8KK3N0YXRpYyByZWdfZXJyY29kZV90IGJ1aWxkX2VxdWl2X2NsYXNzIChiaXRzZXRfdCBzYmNzZXQsCisJCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUpOworc3RhdGljIHJlZ19lcnJjb2RlX3QgYnVpbGRfY2hhcmNsYXNzIChSRV9UUkFOU0xBVEVfVFlQRSB0cmFucywKKwkJCQkgICAgICBiaXRzZXRfdCBzYmNzZXQsCisJCQkJICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY2xhc3NfbmFtZSwKKwkJCQkgICAgICByZWdfc3ludGF4X3Qgc3ludGF4KTsKKyNlbmRpZiAvKiBub3QgUkVfRU5BQkxFX0kxOE4gKi8KK3N0YXRpYyBiaW5fdHJlZV90ICpidWlsZF9jaGFyY2xhc3Nfb3AgKHJlX2RmYV90ICpkZmEsCisJCQkJICAgICAgIFJFX1RSQU5TTEFURV9UWVBFIHRyYW5zLAorCQkJCSAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpjbGFzc19uYW1lLAorCQkJCSAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpleHRyYSwKKwkJCQkgICAgICAgYm9vbCBub25fbWF0Y2gsIHJlZ19lcnJjb2RlX3QgKmVycik7CitzdGF0aWMgYmluX3RyZWVfdCAqY3JlYXRlX3RyZWUgKHJlX2RmYV90ICpkZmEsCisJCQkJYmluX3RyZWVfdCAqbGVmdCwgYmluX3RyZWVfdCAqcmlnaHQsCisJCQkJcmVfdG9rZW5fdHlwZV90IHR5cGUpOworc3RhdGljIGJpbl90cmVlX3QgKmNyZWF0ZV90b2tlbl90cmVlIChyZV9kZmFfdCAqZGZhLAorCQkJCSAgICAgIGJpbl90cmVlX3QgKmxlZnQsIGJpbl90cmVlX3QgKnJpZ2h0LAorCQkJCSAgICAgIGNvbnN0IHJlX3Rva2VuX3QgKnRva2VuKTsKK3N0YXRpYyBiaW5fdHJlZV90ICpkdXBsaWNhdGVfdHJlZSAoY29uc3QgYmluX3RyZWVfdCAqc3JjLCByZV9kZmFfdCAqZGZhKTsKK3N0YXRpYyB2b2lkIGZyZWVfdG9rZW4gKHJlX3Rva2VuX3QgKm5vZGUpOworc3RhdGljIHJlZ19lcnJjb2RlX3QgZnJlZV90cmVlICh2b2lkICpleHRyYSwgYmluX3RyZWVfdCAqbm9kZSk7CitzdGF0aWMgcmVnX2VycmNvZGVfdCBtYXJrX29wdF9zdWJleHAgKHZvaWQgKmV4dHJhLCBiaW5fdHJlZV90ICpub2RlKTsKKwwKKy8qIFRoaXMgdGFibGUgZ2l2ZXMgYW4gZXJyb3IgbWVzc2FnZSBmb3IgZWFjaCBvZiB0aGUgZXJyb3IgY29kZXMgbGlzdGVkCisgICBpbiByZWdleC5oLiAgT2J2aW91c2x5IHRoZSBvcmRlciBoZXJlIGhhcyB0byBiZSBzYW1lIGFzIHRoZXJlLgorICAgUE9TSVggZG9lc24ndCByZXF1aXJlIHRoYXQgd2UgZG8gYW55dGhpbmcgZm9yIFJFR19OT0VSUk9SLAorICAgYnV0IHdoeSBub3QgYmUgbmljZT8gICovCisKK3N0YXRpYyBjb25zdCBjaGFyIF9fcmVfZXJyb3JfbXNnaWRbXSA9CisgIHsKKyNkZWZpbmUgUkVHX05PRVJST1JfSURYCTAKKyAgICBnZXR0ZXh0X25vb3AgKCJTdWNjZXNzIikJLyogUkVHX05PRVJST1IgKi8KKyAgICAiXDAiCisjZGVmaW5lIFJFR19OT01BVENIX0lEWCAoUkVHX05PRVJST1JfSURYICsgc2l6ZW9mICJTdWNjZXNzIikKKyAgICBnZXR0ZXh0X25vb3AgKCJObyBtYXRjaCIpCS8qIFJFR19OT01BVENIICovCisgICAgIlwwIgorI2RlZmluZSBSRUdfQkFEUEFUX0lEWAkoUkVHX05PTUFUQ0hfSURYICsgc2l6ZW9mICJObyBtYXRjaCIpCisgICAgZ2V0dGV4dF9ub29wICgiSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb24iKSAvKiBSRUdfQkFEUEFUICovCisgICAgIlwwIgorI2RlZmluZSBSRUdfRUNPTExBVEVfSURYIChSRUdfQkFEUEFUX0lEWCArIHNpemVvZiAiSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb24iKQorICAgIGdldHRleHRfbm9vcCAoIkludmFsaWQgY29sbGF0aW9uIGNoYXJhY3RlciIpIC8qIFJFR19FQ09MTEFURSAqLworICAgICJcMCIKKyNkZWZpbmUgUkVHX0VDVFlQRV9JRFgJKFJFR19FQ09MTEFURV9JRFggKyBzaXplb2YgIkludmFsaWQgY29sbGF0aW9uIGNoYXJhY3RlciIpCisgICAgZ2V0dGV4dF9ub29wICgiSW52YWxpZCBjaGFyYWN0ZXIgY2xhc3MgbmFtZSIpIC8qIFJFR19FQ1RZUEUgKi8KKyAgICAiXDAiCisjZGVmaW5lIFJFR19FRVNDQVBFX0lEWAkoUkVHX0VDVFlQRV9JRFggKyBzaXplb2YgIkludmFsaWQgY2hhcmFjdGVyIGNsYXNzIG5hbWUiKQorICAgIGdldHRleHRfbm9vcCAoIlRyYWlsaW5nIGJhY2tzbGFzaCIpIC8qIFJFR19FRVNDQVBFICovCisgICAgIlwwIgorI2RlZmluZSBSRUdfRVNVQlJFR19JRFgJKFJFR19FRVNDQVBFX0lEWCArIHNpemVvZiAiVHJhaWxpbmcgYmFja3NsYXNoIikKKyAgICBnZXR0ZXh0X25vb3AgKCJJbnZhbGlkIGJhY2sgcmVmZXJlbmNlIikgLyogUkVHX0VTVUJSRUcgKi8KKyAgICAiXDAiCisjZGVmaW5lIFJFR19FQlJBQ0tfSURYCShSRUdfRVNVQlJFR19JRFggKyBzaXplb2YgIkludmFsaWQgYmFjayByZWZlcmVuY2UiKQorICAgIGdldHRleHRfbm9vcCAoIlVubWF0Y2hlZCBbIG9yIFteIikJLyogUkVHX0VCUkFDSyAqLworICAgICJcMCIKKyNkZWZpbmUgUkVHX0VQQVJFTl9JRFgJKFJFR19FQlJBQ0tfSURYICsgc2l6ZW9mICJVbm1hdGNoZWQgWyBvciBbXiIpCisgICAgZ2V0dGV4dF9ub29wICgiVW5tYXRjaGVkICggb3IgXFwoIikgLyogUkVHX0VQQVJFTiAqLworICAgICJcMCIKKyNkZWZpbmUgUkVHX0VCUkFDRV9JRFgJKFJFR19FUEFSRU5fSURYICsgc2l6ZW9mICJVbm1hdGNoZWQgKCBvciBcXCgiKQorICAgIGdldHRleHRfbm9vcCAoIlVubWF0Y2hlZCBcXHsiKSAvKiBSRUdfRUJSQUNFICovCisgICAgIlwwIgorI2RlZmluZSBSRUdfQkFEQlJfSURYCShSRUdfRUJSQUNFX0lEWCArIHNpemVvZiAiVW5tYXRjaGVkIFxceyIpCisgICAgZ2V0dGV4dF9ub29wICgiSW52YWxpZCBjb250ZW50IG9mIFxce1xcfSIpIC8qIFJFR19CQURCUiAqLworICAgICJcMCIKKyNkZWZpbmUgUkVHX0VSQU5HRV9JRFgJKFJFR19CQURCUl9JRFggKyBzaXplb2YgIkludmFsaWQgY29udGVudCBvZiBcXHtcXH0iKQorICAgIGdldHRleHRfbm9vcCAoIkludmFsaWQgcmFuZ2UgZW5kIikJLyogUkVHX0VSQU5HRSAqLworICAgICJcMCIKKyNkZWZpbmUgUkVHX0VTUEFDRV9JRFgJKFJFR19FUkFOR0VfSURYICsgc2l6ZW9mICJJbnZhbGlkIHJhbmdlIGVuZCIpCisgICAgZ2V0dGV4dF9ub29wICgiTWVtb3J5IGV4aGF1c3RlZCIpIC8qIFJFR19FU1BBQ0UgKi8KKyAgICAiXDAiCisjZGVmaW5lIFJFR19CQURSUFRfSURYCShSRUdfRVNQQUNFX0lEWCArIHNpemVvZiAiTWVtb3J5IGV4aGF1c3RlZCIpCisgICAgZ2V0dGV4dF9ub29wICgiSW52YWxpZCBwcmVjZWRpbmcgcmVndWxhciBleHByZXNzaW9uIikgLyogUkVHX0JBRFJQVCAqLworICAgICJcMCIKKyNkZWZpbmUgUkVHX0VFTkRfSURYCShSRUdfQkFEUlBUX0lEWCArIHNpemVvZiAiSW52YWxpZCBwcmVjZWRpbmcgcmVndWxhciBleHByZXNzaW9uIikKKyAgICBnZXR0ZXh0X25vb3AgKCJQcmVtYXR1cmUgZW5kIG9mIHJlZ3VsYXIgZXhwcmVzc2lvbiIpIC8qIFJFR19FRU5EICovCisgICAgIlwwIgorI2RlZmluZSBSRUdfRVNJWkVfSURYCShSRUdfRUVORF9JRFggKyBzaXplb2YgIlByZW1hdHVyZSBlbmQgb2YgcmVndWxhciBleHByZXNzaW9uIikKKyAgICBnZXR0ZXh0X25vb3AgKCJSZWd1bGFyIGV4cHJlc3Npb24gdG9vIGJpZyIpIC8qIFJFR19FU0laRSAqLworICAgICJcMCIKKyNkZWZpbmUgUkVHX0VSUEFSRU5fSURYCShSRUdfRVNJWkVfSURYICsgc2l6ZW9mICJSZWd1bGFyIGV4cHJlc3Npb24gdG9vIGJpZyIpCisgICAgZ2V0dGV4dF9ub29wICgiVW5tYXRjaGVkICkgb3IgXFwpIikgLyogUkVHX0VSUEFSRU4gKi8KKyAgfTsKKworc3RhdGljIGNvbnN0IHNpemVfdCBfX3JlX2Vycm9yX21zZ2lkX2lkeFtdID0KKyAgeworICAgIFJFR19OT0VSUk9SX0lEWCwKKyAgICBSRUdfTk9NQVRDSF9JRFgsCisgICAgUkVHX0JBRFBBVF9JRFgsCisgICAgUkVHX0VDT0xMQVRFX0lEWCwKKyAgICBSRUdfRUNUWVBFX0lEWCwKKyAgICBSRUdfRUVTQ0FQRV9JRFgsCisgICAgUkVHX0VTVUJSRUdfSURYLAorICAgIFJFR19FQlJBQ0tfSURYLAorICAgIFJFR19FUEFSRU5fSURYLAorICAgIFJFR19FQlJBQ0VfSURYLAorICAgIFJFR19CQURCUl9JRFgsCisgICAgUkVHX0VSQU5HRV9JRFgsCisgICAgUkVHX0VTUEFDRV9JRFgsCisgICAgUkVHX0JBRFJQVF9JRFgsCisgICAgUkVHX0VFTkRfSURYLAorICAgIFJFR19FU0laRV9JRFgsCisgICAgUkVHX0VSUEFSRU5fSURYCisgIH07CisMCisvKiBFbnRyeSBwb2ludHMgZm9yIEdOVSBjb2RlLiAgKi8KKworLyogcmVfY29tcGlsZV9wYXR0ZXJuIGlzIHRoZSBHTlUgcmVndWxhciBleHByZXNzaW9uIGNvbXBpbGVyOiBpdAorICAgY29tcGlsZXMgUEFUVEVSTiAob2YgbGVuZ3RoIExFTkdUSCkgYW5kIHB1dHMgdGhlIHJlc3VsdCBpbiBCVUZQLgorICAgUmV0dXJucyAwIGlmIHRoZSBwYXR0ZXJuIHdhcyB2YWxpZCwgb3RoZXJ3aXNlIGFuIGVycm9yIHN0cmluZy4KKworICAgQXNzdW1lcyB0aGUgYGFsbG9jYXRlZCcgKGFuZCBwZXJoYXBzIGBidWZmZXInKSBhbmQgYHRyYW5zbGF0ZScgZmllbGRzCisgICBhcmUgc2V0IGluIEJVRlAgb24gZW50cnkuICAqLworCisjaWZkZWYgX0xJQkMKK2NvbnN0IGNoYXIgKgorcmVfY29tcGlsZV9wYXR0ZXJuIChwYXR0ZXJuLCBsZW5ndGgsIGJ1ZnApCisgICAgY29uc3QgY2hhciAqcGF0dGVybjsKKyAgICBzaXplX3QgbGVuZ3RoOworICAgIHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcDsKKyNlbHNlIC8qIHNpemVfdCBtaWdodCBwcm9tb3RlICovCitjb25zdCBjaGFyICoKK3JlX2NvbXBpbGVfcGF0dGVybiAoY29uc3QgY2hhciAqcGF0dGVybiwgc2l6ZV90IGxlbmd0aCwKKwkJICAgIHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCkKKyNlbmRpZgoreworICByZWdfZXJyY29kZV90IHJldDsKKworICAvKiBBbmQgR05VIGNvZGUgZGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCB0byBnZXQgcmVnaXN0ZXIgaW5mb3JtYXRpb24KKyAgICAgYnkgcGFzc2luZyBudWxsIGZvciB0aGUgUkVHUyBhcmd1bWVudCB0byByZV9tYXRjaCwgZXRjLiwgbm90IGJ5CisgICAgIHNldHRpbmcgbm9fc3ViLCB1bmxlc3MgUkVfTk9fU1VCIGlzIHNldC4gICovCisgIGJ1ZnAtPm5vX3N1YiA9ICEhKHJlX3N5bnRheF9vcHRpb25zICYgUkVfTk9fU1VCKTsKKworICAvKiBNYXRjaCBhbmNob3JzIGF0IG5ld2xpbmUuICAqLworICBidWZwLT5uZXdsaW5lX2FuY2hvciA9IDE7CisKKyAgcmV0ID0gcmVfY29tcGlsZV9pbnRlcm5hbCAoYnVmcCwgcGF0dGVybiwgbGVuZ3RoLCByZV9zeW50YXhfb3B0aW9ucyk7CisKKyAgaWYgKCFyZXQpCisgICAgcmV0dXJuIE5VTEw7CisgIHJldHVybiBnZXR0ZXh0IChfX3JlX2Vycm9yX21zZ2lkICsgX19yZV9lcnJvcl9tc2dpZF9pZHhbKGludCkgcmV0XSk7Cit9CisjaWZkZWYgX0xJQkMKK3dlYWtfYWxpYXMgKF9fcmVfY29tcGlsZV9wYXR0ZXJuLCByZV9jb21waWxlX3BhdHRlcm4pCisjZW5kaWYKKworLyogU2V0IGJ5IGByZV9zZXRfc3ludGF4JyB0byB0aGUgY3VycmVudCByZWdleHAgc3ludGF4IHRvIHJlY29nbml6ZS4gIENhbgorICAgYWxzbyBiZSBhc3NpZ25lZCB0byBhcmJpdHJhcmlseTogZWFjaCBwYXR0ZXJuIGJ1ZmZlciBzdG9yZXMgaXRzIG93bgorICAgc3ludGF4LCBzbyBpdCBjYW4gYmUgY2hhbmdlZCBiZXR3ZWVuIHJlZ2V4IGNvbXBpbGF0aW9ucy4gICovCisvKiBUaGlzIGhhcyBubyBpbml0aWFsaXplciBiZWNhdXNlIGluaXRpYWxpemVkIHZhcmlhYmxlcyBpbiBFbWFjcworICAgYmVjb21lIHJlYWQtb25seSBhZnRlciBkdW1waW5nLiAgKi8KK3JlZ19zeW50YXhfdCByZV9zeW50YXhfb3B0aW9uczsKKworCisvKiBTcGVjaWZ5IHRoZSBwcmVjaXNlIHN5bnRheCBvZiByZWdleHBzIGZvciBjb21waWxhdGlvbi4gIFRoaXMgcHJvdmlkZXMKKyAgIGZvciBjb21wYXRpYmlsaXR5IGZvciB2YXJpb3VzIHV0aWxpdGllcyB3aGljaCBoaXN0b3JpY2FsbHkgaGF2ZQorICAgZGlmZmVyZW50LCBpbmNvbXBhdGlibGUgc3ludGF4ZXMuCisKKyAgIFRoZSBhcmd1bWVudCBTWU5UQVggaXMgYSBiaXQgbWFzayBjb21wcmlzZWQgb2YgdGhlIHZhcmlvdXMgYml0cworICAgZGVmaW5lZCBpbiByZWdleC5oLiAgV2UgcmV0dXJuIHRoZSBvbGQgc3ludGF4LiAgKi8KKworcmVnX3N5bnRheF90CityZV9zZXRfc3ludGF4IChzeW50YXgpCisgICAgcmVnX3N5bnRheF90IHN5bnRheDsKK3sKKyAgcmVnX3N5bnRheF90IHJldCA9IHJlX3N5bnRheF9vcHRpb25zOworCisgIHJlX3N5bnRheF9vcHRpb25zID0gc3ludGF4OworICByZXR1cm4gcmV0OworfQorI2lmZGVmIF9MSUJDCit3ZWFrX2FsaWFzIChfX3JlX3NldF9zeW50YXgsIHJlX3NldF9zeW50YXgpCisjZW5kaWYKKworaW50CityZV9jb21waWxlX2Zhc3RtYXAgKGJ1ZnApCisgICAgc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwOworeworICByZV9kZmFfdCAqZGZhID0gKHJlX2RmYV90ICopIGJ1ZnAtPmJ1ZmZlcjsKKyAgY2hhciAqZmFzdG1hcCA9IGJ1ZnAtPmZhc3RtYXA7CisKKyAgbWVtc2V0IChmYXN0bWFwLCAnXDAnLCBzaXplb2YgKGNoYXIpICogU0JDX01BWCk7CisgIHJlX2NvbXBpbGVfZmFzdG1hcF9pdGVyIChidWZwLCBkZmEtPmluaXRfc3RhdGUsIGZhc3RtYXApOworICBpZiAoZGZhLT5pbml0X3N0YXRlICE9IGRmYS0+aW5pdF9zdGF0ZV93b3JkKQorICAgIHJlX2NvbXBpbGVfZmFzdG1hcF9pdGVyIChidWZwLCBkZmEtPmluaXRfc3RhdGVfd29yZCwgZmFzdG1hcCk7CisgIGlmIChkZmEtPmluaXRfc3RhdGUgIT0gZGZhLT5pbml0X3N0YXRlX25sKQorICAgIHJlX2NvbXBpbGVfZmFzdG1hcF9pdGVyIChidWZwLCBkZmEtPmluaXRfc3RhdGVfbmwsIGZhc3RtYXApOworICBpZiAoZGZhLT5pbml0X3N0YXRlICE9IGRmYS0+aW5pdF9zdGF0ZV9iZWdidWYpCisgICAgcmVfY29tcGlsZV9mYXN0bWFwX2l0ZXIgKGJ1ZnAsIGRmYS0+aW5pdF9zdGF0ZV9iZWdidWYsIGZhc3RtYXApOworICBidWZwLT5mYXN0bWFwX2FjY3VyYXRlID0gMTsKKyAgcmV0dXJuIDA7Cit9CisjaWZkZWYgX0xJQkMKK3dlYWtfYWxpYXMgKF9fcmVfY29tcGlsZV9mYXN0bWFwLCByZV9jb21waWxlX2Zhc3RtYXApCisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkCitfX2F0dHJpYnV0ZSAoKGFsd2F5c19pbmxpbmUpKQorcmVfc2V0X2Zhc3RtYXAgKGNoYXIgKmZhc3RtYXAsIGJvb2wgaWNhc2UsIGludCBjaCkKK3sKKyAgZmFzdG1hcFtjaF0gPSAxOworICBpZiAoaWNhc2UpCisgICAgZmFzdG1hcFt0b2xvd2VyIChjaCldID0gMTsKK30KKworLyogSGVscGVyIGZ1bmN0aW9uIGZvciByZV9jb21waWxlX2Zhc3RtYXAuCisgICBDb21waWxlIGZhc3RtYXAgZm9yIHRoZSBpbml0aWFsX3N0YXRlIElOSVRfU1RBVEUuICAqLworCitzdGF0aWMgdm9pZAorcmVfY29tcGlsZV9mYXN0bWFwX2l0ZXIgKHJlZ2V4X3QgKmJ1ZnAsIGNvbnN0IHJlX2RmYXN0YXRlX3QgKmluaXRfc3RhdGUsCisJCQkgY2hhciAqZmFzdG1hcCkKK3sKKyAgcmVfZGZhX3QgKmRmYSA9IChyZV9kZmFfdCAqKSBidWZwLT5idWZmZXI7CisgIElkeCBub2RlX2NudDsKKyAgYm9vbCBpY2FzZSA9IChkZmEtPm1iX2N1cl9tYXggPT0gMSAmJiAoYnVmcC0+c3ludGF4ICYgUkVfSUNBU0UpKTsKKyAgZm9yIChub2RlX2NudCA9IDA7IG5vZGVfY250IDwgaW5pdF9zdGF0ZS0+bm9kZXMubmVsZW07ICsrbm9kZV9jbnQpCisgICAgeworICAgICAgSWR4IG5vZGUgPSBpbml0X3N0YXRlLT5ub2Rlcy5lbGVtc1tub2RlX2NudF07CisgICAgICByZV90b2tlbl90eXBlX3QgdHlwZSA9IGRmYS0+bm9kZXNbbm9kZV0udHlwZTsKKworICAgICAgaWYgKHR5cGUgPT0gQ0hBUkFDVEVSKQorCXsKKwkgIHJlX3NldF9mYXN0bWFwIChmYXN0bWFwLCBpY2FzZSwgZGZhLT5ub2Rlc1tub2RlXS5vcHIuYyk7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKwkgIGlmICgoYnVmcC0+c3ludGF4ICYgUkVfSUNBU0UpICYmIGRmYS0+bWJfY3VyX21heCA+IDEpCisJICAgIHsKKwkgICAgICB1bnNpZ25lZCBjaGFyIGJ1ZltNQl9MRU5fTUFYXTsKKwkgICAgICB1bnNpZ25lZCBjaGFyICpwOworCSAgICAgIHdjaGFyX3Qgd2M7CisJICAgICAgbWJzdGF0ZV90IHN0YXRlOworCisJICAgICAgcCA9IGJ1ZjsKKwkgICAgICAqcCsrID0gZGZhLT5ub2Rlc1tub2RlXS5vcHIuYzsKKwkgICAgICB3aGlsZSAoKytub2RlIDwgZGZhLT5ub2Rlc19sZW4KKwkJICAgICAmJglkZmEtPm5vZGVzW25vZGVdLnR5cGUgPT0gQ0hBUkFDVEVSCisJCSAgICAgJiYgZGZhLT5ub2Rlc1tub2RlXS5tYl9wYXJ0aWFsKQorCQkqcCsrID0gZGZhLT5ub2Rlc1tub2RlXS5vcHIuYzsKKwkgICAgICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mIChzdGF0ZSkpOworCSAgICAgIGlmIChtYnJ0b3djICgmd2MsIChjb25zdCBjaGFyICopIGJ1ZiwgcCAtIGJ1ZiwKKwkJCSAgICZzdGF0ZSkgPT0gcCAtIGJ1ZgorCQkgICYmIChfX3djcnRvbWIgKChjaGFyICopIGJ1ZiwgdG93bG93ZXIgKHdjKSwgJnN0YXRlKQorCQkgICAgICAhPSAoc2l6ZV90KSAtMSkpCisJCXJlX3NldF9mYXN0bWFwIChmYXN0bWFwLCBmYWxzZSwgYnVmWzBdKTsKKwkgICAgfQorI2VuZGlmCisJfQorICAgICAgZWxzZSBpZiAodHlwZSA9PSBTSU1QTEVfQlJBQ0tFVCkKKwl7CisJICBpbnQgaSwgY2g7CisJICBmb3IgKGkgPSAwLCBjaCA9IDA7IGkgPCBCSVRTRVRfV09SRFM7ICsraSkKKwkgICAgeworCSAgICAgIGludCBqOworCSAgICAgIGJpdHNldF93b3JkX3QgdyA9IGRmYS0+bm9kZXNbbm9kZV0ub3ByLnNiY3NldFtpXTsKKwkgICAgICBmb3IgKGogPSAwOyBqIDwgQklUU0VUX1dPUkRfQklUUzsgKytqLCArK2NoKQorCQlpZiAodyAmICgoYml0c2V0X3dvcmRfdCkgMSA8PCBqKSkKKwkJICByZV9zZXRfZmFzdG1hcCAoZmFzdG1hcCwgaWNhc2UsIGNoKTsKKwkgICAgfQorCX0KKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAgICAgZWxzZSBpZiAodHlwZSA9PSBDT01QTEVYX0JSQUNLRVQpCisJeworCSAgSWR4IGk7CisJICByZV9jaGFyc2V0X3QgKmNzZXQgPSBkZmEtPm5vZGVzW25vZGVdLm9wci5tYmNzZXQ7CisJICBpZiAoY3NldC0+bm9uX21hdGNoIHx8IGNzZXQtPm5jb2xsX3N5bXMgfHwgY3NldC0+bmVxdWl2X2NsYXNzZXMKKwkgICAgICB8fCBjc2V0LT5ucmFuZ2VzIHx8IGNzZXQtPm5jaGFyX2NsYXNzZXMpCisJICAgIHsKKyMgaWZkZWYgX0xJQkMKKwkgICAgICBpZiAoX05MX0NVUlJFTlRfV09SRCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfTlJVTEVTKSAhPSAwKQorCQl7CisJCSAgLyogSW4gdGhpcyBjYXNlIHdlIHdhbnQgdG8gY2F0Y2ggdGhlIGJ5dGVzIHdoaWNoIGFyZQorCQkgICAgIHRoZSBmaXJzdCBieXRlIG9mIGFueSBjb2xsYXRpb24gZWxlbWVudHMuCisJCSAgICAgZS5nLiBJbiBkYV9ESywgd2Ugd2FudCB0byBjYXRjaCAnYScgc2luY2UgImFhIgorCQkJICBpcyBhIHZhbGlkIGNvbGxhdGlvbiBlbGVtZW50LCBhbmQgZG9uJ3QgY2F0Y2gKKwkJCSAgJ2InIHNpbmNlICdiJyBpcyB0aGUgb25seSBjb2xsYXRpb24gZWxlbWVudAorCQkJICB3aGljaCBzdGFydHMgZnJvbSAnYicuICAqLworCQkgIGNvbnN0IGludDMyX3QgKnRhYmxlID0gKGNvbnN0IGludDMyX3QgKikKKwkJICAgIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9UQUJMRU1CKTsKKwkJICBmb3IgKGkgPSAwOyBpIDwgU0JDX01BWDsgKytpKQorCQkgICAgaWYgKHRhYmxlW2ldIDwgMCkKKwkJICAgICAgcmVfc2V0X2Zhc3RtYXAgKGZhc3RtYXAsIGljYXNlLCBpKTsKKwkJfQorIyBlbHNlCisJICAgICAgaWYgKGRmYS0+bWJfY3VyX21heCA+IDEpCisJCWZvciAoaSA9IDA7IGkgPCBTQkNfTUFYOyArK2kpCisJCSAgaWYgKF9fYnRvd2MgKGkpID09IFdFT0YpCisJCSAgICByZV9zZXRfZmFzdG1hcCAoZmFzdG1hcCwgaWNhc2UsIGkpOworIyBlbmRpZiAvKiBub3QgX0xJQkMgKi8KKwkgICAgfQorCSAgZm9yIChpID0gMDsgaSA8IGNzZXQtPm5tYmNoYXJzOyArK2kpCisJICAgIHsKKwkgICAgICBjaGFyIGJ1ZlsyNTZdOworCSAgICAgIG1ic3RhdGVfdCBzdGF0ZTsKKwkgICAgICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mIChzdGF0ZSkpOworCSAgICAgIGlmIChfX3djcnRvbWIgKGJ1ZiwgY3NldC0+bWJjaGFyc1tpXSwgJnN0YXRlKSAhPSAoc2l6ZV90KSAtMSkKKwkJcmVfc2V0X2Zhc3RtYXAgKGZhc3RtYXAsIGljYXNlLCAqKHVuc2lnbmVkIGNoYXIgKikgYnVmKTsKKwkgICAgICBpZiAoKGJ1ZnAtPnN5bnRheCAmIFJFX0lDQVNFKSAmJiBkZmEtPm1iX2N1cl9tYXggPiAxKQorCQl7CisJCSAgaWYgKF9fd2NydG9tYiAoYnVmLCB0b3dsb3dlciAoY3NldC0+bWJjaGFyc1tpXSksICZzdGF0ZSkKKwkJICAgICAgIT0gKHNpemVfdCkgLTEpCisJCSAgICByZV9zZXRfZmFzdG1hcCAoZmFzdG1hcCwgZmFsc2UsICoodW5zaWduZWQgY2hhciAqKSBidWYpOworCQl9CisJICAgIH0KKwl9CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKyAgICAgIGVsc2UgaWYgKHR5cGUgPT0gT1BfUEVSSU9ECisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKwkgICAgICAgfHwgdHlwZSA9PSBPUF9VVEY4X1BFUklPRAorI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisJICAgICAgIHx8IHR5cGUgPT0gRU5EX09GX1JFKQorCXsKKwkgIG1lbXNldCAoZmFzdG1hcCwgJ1wxJywgc2l6ZW9mIChjaGFyKSAqIFNCQ19NQVgpOworCSAgaWYgKHR5cGUgPT0gRU5EX09GX1JFKQorCSAgICBidWZwLT5jYW5fYmVfbnVsbCA9IDE7CisJICByZXR1cm47CisJfQorICAgIH0KK30KKwwKKy8qIEVudHJ5IHBvaW50IGZvciBQT1NJWCBjb2RlLiAgKi8KKy8qIHJlZ2NvbXAgdGFrZXMgYSByZWd1bGFyIGV4cHJlc3Npb24gYXMgYSBzdHJpbmcgYW5kIGNvbXBpbGVzIGl0LgorCisgICBQUkVHIGlzIGEgcmVnZXhfdCAqLiAgV2UgZG8gbm90IGV4cGVjdCBhbnkgZmllbGRzIHRvIGJlIGluaXRpYWxpemVkLAorICAgc2luY2UgUE9TSVggc2F5cyB3ZSBzaG91bGRuJ3QuICBUaHVzLCB3ZSBzZXQKKworICAgICBgYnVmZmVyJyB0byB0aGUgY29tcGlsZWQgcGF0dGVybjsKKyAgICAgYHVzZWQnIHRvIHRoZSBsZW5ndGggb2YgdGhlIGNvbXBpbGVkIHBhdHRlcm47CisgICAgIGBzeW50YXgnIHRvIFJFX1NZTlRBWF9QT1NJWF9FWFRFTkRFRCBpZiB0aGUKKyAgICAgICBSRUdfRVhURU5ERUQgYml0IGluIENGTEFHUyBpcyBzZXQ7IG90aGVyd2lzZSwgdG8KKyAgICAgICBSRV9TWU5UQVhfUE9TSVhfQkFTSUM7CisgICAgIGBuZXdsaW5lX2FuY2hvcicgdG8gUkVHX05FV0xJTkUgYmVpbmcgc2V0IGluIENGTEFHUzsKKyAgICAgYGZhc3RtYXAnIHRvIGFuIGFsbG9jYXRlZCBzcGFjZSBmb3IgdGhlIGZhc3RtYXA7CisgICAgIGBmYXN0bWFwX2FjY3VyYXRlJyB0byB6ZXJvOworICAgICBgcmVfbnN1YicgdG8gdGhlIG51bWJlciBvZiBzdWJleHByZXNzaW9ucyBpbiBQQVRURVJOLgorCisgICBQQVRURVJOIGlzIHRoZSBhZGRyZXNzIG9mIHRoZSBwYXR0ZXJuIHN0cmluZy4KKworICAgQ0ZMQUdTIGlzIGEgc2VyaWVzIG9mIGJpdHMgd2hpY2ggYWZmZWN0IGNvbXBpbGF0aW9uLgorCisgICAgIElmIFJFR19FWFRFTkRFRCBpcyBzZXQsIHdlIHVzZSBQT1NJWCBleHRlbmRlZCBzeW50YXg7IG90aGVyd2lzZSwgd2UKKyAgICAgdXNlIFBPU0lYIGJhc2ljIHN5bnRheC4KKworICAgICBJZiBSRUdfTkVXTElORSBpcyBzZXQsIHRoZW4gLiBhbmQgW14uLi5dIGRvbid0IG1hdGNoIG5ld2xpbmUuCisgICAgIEFsc28sIHJlZ2V4ZWMgd2lsbCB0cnkgYSBtYXRjaCBiZWdpbm5pbmcgYWZ0ZXIgZXZlcnkgbmV3bGluZS4KKworICAgICBJZiBSRUdfSUNBU0UgaXMgc2V0LCB0aGVuIHdlIGNvbnNpZGVycyB1cHBlci0gYW5kIGxvd2VyY2FzZQorICAgICB2ZXJzaW9ucyBvZiBsZXR0ZXJzIHRvIGJlIGVxdWl2YWxlbnQgd2hlbiBtYXRjaGluZy4KKworICAgICBJZiBSRUdfTk9TVUIgaXMgc2V0LCB0aGVuIHdoZW4gUFJFRyBpcyBwYXNzZWQgdG8gcmVnZXhlYywgdGhhdAorICAgICByb3V0aW5lIHdpbGwgcmVwb3J0IG9ubHkgc3VjY2VzcyBvciBmYWlsdXJlLCBhbmQgbm90aGluZyBhYm91dCB0aGUKKyAgICAgcmVnaXN0ZXJzLgorCisgICBJdCByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG5vbnplcm8gaWYgaXQgZG9lc24ndC4gIChTZWUgcmVnZXguaCBmb3IKKyAgIHRoZSByZXR1cm4gY29kZXMgYW5kIHRoZWlyIG1lYW5pbmdzLikgICovCisKK2ludAorcmVnY29tcCAocHJlZywgcGF0dGVybiwgY2ZsYWdzKQorICAgIHJlZ2V4X3QgKl9SZXN0cmljdF8gcHJlZzsKKyAgICBjb25zdCBjaGFyICpfUmVzdHJpY3RfIHBhdHRlcm47CisgICAgaW50IGNmbGFnczsKK3sKKyAgcmVnX2VycmNvZGVfdCByZXQ7CisgIHJlZ19zeW50YXhfdCBzeW50YXggPSAoKGNmbGFncyAmIFJFR19FWFRFTkRFRCkgPyBSRV9TWU5UQVhfUE9TSVhfRVhURU5ERUQKKwkJCSA6IFJFX1NZTlRBWF9QT1NJWF9CQVNJQyk7CisKKyAgcHJlZy0+YnVmZmVyID0gTlVMTDsKKyAgcHJlZy0+YWxsb2NhdGVkID0gMDsKKyAgcHJlZy0+dXNlZCA9IDA7CisKKyAgLyogVHJ5IHRvIGFsbG9jYXRlIHNwYWNlIGZvciB0aGUgZmFzdG1hcC4gICovCisgIHByZWctPmZhc3RtYXAgPSByZV9tYWxsb2MgKGNoYXIsIFNCQ19NQVgpOworICBpZiAoQkUgKHByZWctPmZhc3RtYXAgPT0gTlVMTCwgMCkpCisgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisKKyAgc3ludGF4IHw9IChjZmxhZ3MgJiBSRUdfSUNBU0UpID8gUkVfSUNBU0UgOiAwOworCisgIC8qIElmIFJFR19ORVdMSU5FIGlzIHNldCwgbmV3bGluZXMgYXJlIHRyZWF0ZWQgZGlmZmVyZW50bHkuICAqLworICBpZiAoY2ZsYWdzICYgUkVHX05FV0xJTkUpCisgICAgeyAvKiBSRUdfTkVXTElORSBpbXBsaWVzIG5laXRoZXIgLiBub3IgW14uLi5dIG1hdGNoIG5ld2xpbmUuICAqLworICAgICAgc3ludGF4ICY9IH5SRV9ET1RfTkVXTElORTsKKyAgICAgIHN5bnRheCB8PSBSRV9IQVRfTElTVFNfTk9UX05FV0xJTkU7CisgICAgICAvKiBJdCBhbHNvIGNoYW5nZXMgdGhlIG1hdGNoaW5nIGJlaGF2aW9yLiAgKi8KKyAgICAgIHByZWctPm5ld2xpbmVfYW5jaG9yID0gMTsKKyAgICB9CisgIGVsc2UKKyAgICBwcmVnLT5uZXdsaW5lX2FuY2hvciA9IDA7CisgIHByZWctPm5vX3N1YiA9ICEhKGNmbGFncyAmIFJFR19OT1NVQik7CisgIHByZWctPnRyYW5zbGF0ZSA9IE5VTEw7CisKKyAgcmV0ID0gcmVfY29tcGlsZV9pbnRlcm5hbCAocHJlZywgcGF0dGVybiwgc3RybGVuIChwYXR0ZXJuKSwgc3ludGF4KTsKKworICAvKiBQT1NJWCBkb2Vzbid0IGRpc3Rpbmd1aXNoIGJldHdlZW4gYW4gdW5tYXRjaGVkIG9wZW4tZ3JvdXAgYW5kIGFuCisgICAgIHVubWF0Y2hlZCBjbG9zZS1ncm91cDogYm90aCBhcmUgUkVHX0VQQVJFTi4gICovCisgIGlmIChyZXQgPT0gUkVHX0VSUEFSRU4pCisgICAgcmV0ID0gUkVHX0VQQVJFTjsKKworICAvKiBXZSBoYXZlIGFscmVhZHkgY2hlY2tlZCBwcmVnLT5mYXN0bWFwICE9IE5VTEwuICAqLworICBpZiAoQkUgKHJldCA9PSBSRUdfTk9FUlJPUiwgMSkpCisgICAgLyogQ29tcHV0ZSB0aGUgZmFzdG1hcCBub3csIHNpbmNlIHJlZ2V4ZWMgY2Fubm90IG1vZGlmeSB0aGUgcGF0dGVybgorICAgICAgIGJ1ZmZlci4gIFRoaXMgZnVuY3Rpb24gbmV2ZXIgZmFpbHMgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbi4gICovCisgICAgKHZvaWQpIHJlX2NvbXBpbGVfZmFzdG1hcCAocHJlZyk7CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBTb21lIGVycm9yIG9jY3VycmVkIHdoaWxlIGNvbXBpbGluZyB0aGUgZXhwcmVzc2lvbi4gICovCisgICAgICByZV9mcmVlIChwcmVnLT5mYXN0bWFwKTsKKyAgICAgIHByZWctPmZhc3RtYXAgPSBOVUxMOworICAgIH0KKworICByZXR1cm4gKGludCkgcmV0OworfQorI2lmZGVmIF9MSUJDCit3ZWFrX2FsaWFzIChfX3JlZ2NvbXAsIHJlZ2NvbXApCisjZW5kaWYKKworLyogUmV0dXJucyBhIG1lc3NhZ2UgY29ycmVzcG9uZGluZyB0byBhbiBlcnJvciBjb2RlLCBFUlJDT0RFLCByZXR1cm5lZAorICAgZnJvbSBlaXRoZXIgcmVnY29tcCBvciByZWdleGVjLiAgIFdlIGRvbid0IHVzZSBQUkVHIGhlcmUuICAqLworCisjaWZkZWYgX0xJQkMKK3NpemVfdAorcmVnZXJyb3IgKGVycmNvZGUsIHByZWcsIGVycmJ1ZiwgZXJyYnVmX3NpemUpCisgICAgaW50IGVycmNvZGU7CisgICAgY29uc3QgcmVnZXhfdCAqX1Jlc3RyaWN0XyBwcmVnOworICAgIGNoYXIgKl9SZXN0cmljdF8gZXJyYnVmOworICAgIHNpemVfdCBlcnJidWZfc2l6ZTsKKyNlbHNlIC8qIHNpemVfdCBtaWdodCBwcm9tb3RlICovCitzaXplX3QKK3JlZ2Vycm9yIChpbnQgZXJyY29kZSwgY29uc3QgcmVnZXhfdCAqX1Jlc3RyaWN0XyBwcmVnLAorCSAgY2hhciAqX1Jlc3RyaWN0XyBlcnJidWYsIHNpemVfdCBlcnJidWZfc2l6ZSkKKyNlbmRpZgoreworICBjb25zdCBjaGFyICptc2c7CisgIHNpemVfdCBtc2dfc2l6ZTsKKworICBpZiAoQkUgKGVycmNvZGUgPCAwCisJICB8fCBlcnJjb2RlID49IChpbnQpIChzaXplb2YgKF9fcmVfZXJyb3JfbXNnaWRfaWR4KQorCQkJICAgICAgIC8gc2l6ZW9mIChfX3JlX2Vycm9yX21zZ2lkX2lkeFswXSkpLCAwKSkKKyAgICAvKiBPbmx5IGVycm9yIGNvZGVzIHJldHVybmVkIGJ5IHRoZSByZXN0IG9mIHRoZSBjb2RlIHNob3VsZCBiZSBwYXNzZWQKKyAgICAgICB0byB0aGlzIHJvdXRpbmUuICBJZiB3ZSBhcmUgZ2l2ZW4gYW55dGhpbmcgZWxzZSwgb3IgaWYgb3RoZXIgcmVnZXgKKyAgICAgICBjb2RlIGdlbmVyYXRlcyBhbiBpbnZhbGlkIGVycm9yIGNvZGUsIHRoZW4gdGhlIHByb2dyYW0gaGFzIGEgYnVnLgorICAgICAgIER1bXAgY29yZSBzbyB3ZSBjYW4gZml4IGl0LiAgKi8KKyAgICBhYm9ydCAoKTsKKworICBtc2cgPSBnZXR0ZXh0IChfX3JlX2Vycm9yX21zZ2lkICsgX19yZV9lcnJvcl9tc2dpZF9pZHhbZXJyY29kZV0pOworCisgIG1zZ19zaXplID0gc3RybGVuIChtc2cpICsgMTsgLyogSW5jbHVkZXMgdGhlIG51bGwuICAqLworCisgIGlmIChCRSAoZXJyYnVmX3NpemUgIT0gMCwgMSkpCisgICAgeworICAgICAgc2l6ZV90IGNweV9zaXplID0gbXNnX3NpemU7CisgICAgICBpZiAoQkUgKG1zZ19zaXplID4gZXJyYnVmX3NpemUsIDApKQorCXsKKwkgIGNweV9zaXplID0gZXJyYnVmX3NpemUgLSAxOworCSAgZXJyYnVmW2NweV9zaXplXSA9ICdcMCc7CisJfQorICAgICAgbWVtY3B5IChlcnJidWYsIG1zZywgY3B5X3NpemUpOworICAgIH0KKworICByZXR1cm4gbXNnX3NpemU7Cit9CisjaWZkZWYgX0xJQkMKK3dlYWtfYWxpYXMgKF9fcmVnZXJyb3IsIHJlZ2Vycm9yKQorI2VuZGlmCisKKworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisvKiBUaGlzIHN0YXRpYyBhcnJheSBpcyB1c2VkIGZvciB0aGUgbWFwIHRvIHNpbmdsZS1ieXRlIGNoYXJhY3RlcnMgd2hlbgorICAgVVRGLTggaXMgdXNlZC4gIE90aGVyd2lzZSB3ZSB3b3VsZCBhbGxvY2F0ZSBtZW1vcnkganVzdCB0byBpbml0aWFsaXplCisgICBpdCB0aGUgc2FtZSBhbGwgdGhlIHRpbWUuICBVVEYtOCBpcyB0aGUgcHJlZmVycmVkIGVuY29kaW5nIHNvIHRoaXMgaXMKKyAgIGEgd29ydGh3aGlsZSBvcHRpbWl6YXRpb24uICAqLworc3RhdGljIGNvbnN0IGJpdHNldF90IHV0Zjhfc2JfbWFwID0KK3sKKyAgLyogU2V0IHRoZSBmaXJzdCAxMjggYml0cy4gICovCisjIGlmIDQgKiBCSVRTRVRfV09SRF9CSVRTIDwgQVNDSUlfQ0hBUlMKKyMgIGVycm9yICJiaXRzZXRfd29yZF90IGlzIG5hcnJvd2VyIHRoYW4gMzIgYml0cyIKKyMgZWxpZiAzICogQklUU0VUX1dPUkRfQklUUyA8IEFTQ0lJX0NIQVJTCisgIEJJVFNFVF9XT1JEX01BWCwgQklUU0VUX1dPUkRfTUFYLCBCSVRTRVRfV09SRF9NQVgsCisjIGVsaWYgMiAqIEJJVFNFVF9XT1JEX0JJVFMgPCBBU0NJSV9DSEFSUworICBCSVRTRVRfV09SRF9NQVgsIEJJVFNFVF9XT1JEX01BWCwKKyMgZWxpZiAxICogQklUU0VUX1dPUkRfQklUUyA8IEFTQ0lJX0NIQVJTCisgIEJJVFNFVF9XT1JEX01BWCwKKyMgZW5kaWYKKyAgKEJJVFNFVF9XT1JEX01BWAorICAgPj4gKFNCQ19NQVggJSBCSVRTRVRfV09SRF9CSVRTID09IDAKKyAgICAgICA/IDAKKyAgICAgICA6IEJJVFNFVF9XT1JEX0JJVFMgLSBTQkNfTUFYICUgQklUU0VUX1dPUkRfQklUUykpCit9OworI2VuZGlmCisKKworc3RhdGljIHZvaWQKK2ZyZWVfZGZhX2NvbnRlbnQgKHJlX2RmYV90ICpkZmEpCit7CisgIElkeCBpLCBqOworCisgIGlmIChkZmEtPm5vZGVzKQorICAgIGZvciAoaSA9IDA7IGkgPCBkZmEtPm5vZGVzX2xlbjsgKytpKQorICAgICAgZnJlZV90b2tlbiAoZGZhLT5ub2RlcyArIGkpOworICByZV9mcmVlIChkZmEtPm5leHRzKTsKKyAgZm9yIChpID0gMDsgaSA8IGRmYS0+bm9kZXNfbGVuOyArK2kpCisgICAgeworICAgICAgaWYgKGRmYS0+ZWNsb3N1cmVzICE9IE5VTEwpCisJcmVfbm9kZV9zZXRfZnJlZSAoZGZhLT5lY2xvc3VyZXMgKyBpKTsKKyAgICAgIGlmIChkZmEtPmludmVjbG9zdXJlcyAhPSBOVUxMKQorCXJlX25vZGVfc2V0X2ZyZWUgKGRmYS0+aW52ZWNsb3N1cmVzICsgaSk7CisgICAgICBpZiAoZGZhLT5lZGVzdHMgIT0gTlVMTCkKKwlyZV9ub2RlX3NldF9mcmVlIChkZmEtPmVkZXN0cyArIGkpOworICAgIH0KKyAgcmVfZnJlZSAoZGZhLT5lZGVzdHMpOworICByZV9mcmVlIChkZmEtPmVjbG9zdXJlcyk7CisgIHJlX2ZyZWUgKGRmYS0+aW52ZWNsb3N1cmVzKTsKKyAgcmVfZnJlZSAoZGZhLT5ub2Rlcyk7CisKKyAgaWYgKGRmYS0+c3RhdGVfdGFibGUpCisgICAgZm9yIChpID0gMDsgaSA8PSBkZmEtPnN0YXRlX2hhc2hfbWFzazsgKytpKQorICAgICAgeworCXN0cnVjdCByZV9zdGF0ZV90YWJsZV9lbnRyeSAqZW50cnkgPSBkZmEtPnN0YXRlX3RhYmxlICsgaTsKKwlmb3IgKGogPSAwOyBqIDwgZW50cnktPm51bTsgKytqKQorCSAgeworCSAgICByZV9kZmFzdGF0ZV90ICpzdGF0ZSA9IGVudHJ5LT5hcnJheVtqXTsKKwkgICAgZnJlZV9zdGF0ZSAoc3RhdGUpOworCSAgfQorICAgICAgICByZV9mcmVlIChlbnRyeS0+YXJyYXkpOworICAgICAgfQorICByZV9mcmVlIChkZmEtPnN0YXRlX3RhYmxlKTsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICBpZiAoZGZhLT5zYl9jaGFyICE9IHV0Zjhfc2JfbWFwKQorICAgIHJlX2ZyZWUgKGRmYS0+c2JfY2hhcik7CisjZW5kaWYKKyAgcmVfZnJlZSAoZGZhLT5zdWJleHBfbWFwKTsKKyNpZmRlZiBERUJVRworICByZV9mcmVlIChkZmEtPnJlX3N0cik7CisjZW5kaWYKKworICByZV9mcmVlIChkZmEpOworfQorCisKKy8qIEZyZWUgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHNwYWNlIHVzZWQgYnkgUFJFRy4gICovCisKK3ZvaWQKK3JlZ2ZyZWUgKHByZWcpCisgICAgcmVnZXhfdCAqcHJlZzsKK3sKKyAgcmVfZGZhX3QgKmRmYSA9IChyZV9kZmFfdCAqKSBwcmVnLT5idWZmZXI7CisgIGlmIChCRSAoZGZhICE9IE5VTEwsIDEpKQorICAgIGZyZWVfZGZhX2NvbnRlbnQgKGRmYSk7CisgIHByZWctPmJ1ZmZlciA9IE5VTEw7CisgIHByZWctPmFsbG9jYXRlZCA9IDA7CisKKyAgcmVfZnJlZSAocHJlZy0+ZmFzdG1hcCk7CisgIHByZWctPmZhc3RtYXAgPSBOVUxMOworCisgIHJlX2ZyZWUgKHByZWctPnRyYW5zbGF0ZSk7CisgIHByZWctPnRyYW5zbGF0ZSA9IE5VTEw7Cit9CisjaWZkZWYgX0xJQkMKK3dlYWtfYWxpYXMgKF9fcmVnZnJlZSwgcmVnZnJlZSkKKyNlbmRpZgorDAorLyogRW50cnkgcG9pbnRzIGNvbXBhdGlibGUgd2l0aCA0LjIgQlNEIHJlZ2V4IGxpYnJhcnkuICBXZSBkb24ndCBkZWZpbmUKKyAgIHRoZW0gdW5sZXNzIHNwZWNpZmljYWxseSByZXF1ZXN0ZWQuICAqLworCisjaWYgZGVmaW5lZCBfUkVHRVhfUkVfQ09NUCB8fCBkZWZpbmVkIF9MSUJDCisKKy8qIEJTRCBoYXMgb25lIGFuZCBvbmx5IG9uZSBwYXR0ZXJuIGJ1ZmZlci4gICovCitzdGF0aWMgc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyIHJlX2NvbXBfYnVmOworCitjaGFyICoKKyMgaWZkZWYgX0xJQkMKKy8qIE1ha2UgdGhlc2UgZGVmaW5pdGlvbnMgd2VhayBpbiBsaWJjLCBzbyBQT1NJWCBwcm9ncmFtcyBjYW4gcmVkZWZpbmUKKyAgIHRoZXNlIG5hbWVzIGlmIHRoZXkgZG9uJ3QgdXNlIG91ciBmdW5jdGlvbnMsIGFuZCBzdGlsbCB1c2UKKyAgIHJlZ2NvbXAvcmVnZXhlYyBhYm92ZSB3aXRob3V0IGxpbmsgZXJyb3JzLiAgKi8KK3dlYWtfZnVuY3Rpb24KKyMgZW5kaWYKK3JlX2NvbXAgKHMpCisgICAgIGNvbnN0IGNoYXIgKnM7Cit7CisgIHJlZ19lcnJjb2RlX3QgcmV0OworICBjaGFyICpmYXN0bWFwOworCisgIGlmICghcykKKyAgICB7CisgICAgICBpZiAoIXJlX2NvbXBfYnVmLmJ1ZmZlcikKKwlyZXR1cm4gZ2V0dGV4dCAoIk5vIHByZXZpb3VzIHJlZ3VsYXIgZXhwcmVzc2lvbiIpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgIGlmIChyZV9jb21wX2J1Zi5idWZmZXIpCisgICAgeworICAgICAgZmFzdG1hcCA9IHJlX2NvbXBfYnVmLmZhc3RtYXA7CisgICAgICByZV9jb21wX2J1Zi5mYXN0bWFwID0gTlVMTDsKKyAgICAgIF9fcmVnZnJlZSAoJnJlX2NvbXBfYnVmKTsKKyAgICAgIG1lbXNldCAoJnJlX2NvbXBfYnVmLCAnXDAnLCBzaXplb2YgKHJlX2NvbXBfYnVmKSk7CisgICAgICByZV9jb21wX2J1Zi5mYXN0bWFwID0gZmFzdG1hcDsKKyAgICB9CisKKyAgaWYgKHJlX2NvbXBfYnVmLmZhc3RtYXAgPT0gTlVMTCkKKyAgICB7CisgICAgICByZV9jb21wX2J1Zi5mYXN0bWFwID0gKGNoYXIgKikgbWFsbG9jIChTQkNfTUFYKTsKKyAgICAgIGlmIChyZV9jb21wX2J1Zi5mYXN0bWFwID09IE5VTEwpCisJcmV0dXJuIChjaGFyICopIGdldHRleHQgKF9fcmVfZXJyb3JfbXNnaWQKKwkJCQkgKyBfX3JlX2Vycm9yX21zZ2lkX2lkeFsoaW50KSBSRUdfRVNQQUNFXSk7CisgICAgfQorCisgIC8qIFNpbmNlIGByZV9leGVjJyBhbHdheXMgcGFzc2VzIE5VTEwgZm9yIHRoZSBgcmVncycgYXJndW1lbnQsIHdlCisgICAgIGRvbid0IG5lZWQgdG8gaW5pdGlhbGl6ZSB0aGUgcGF0dGVybiBidWZmZXIgZmllbGRzIHdoaWNoIGFmZmVjdCBpdC4gICovCisKKyAgLyogTWF0Y2ggYW5jaG9ycyBhdCBuZXdsaW5lcy4gICovCisgIHJlX2NvbXBfYnVmLm5ld2xpbmVfYW5jaG9yID0gMTsKKworICByZXQgPSByZV9jb21waWxlX2ludGVybmFsICgmcmVfY29tcF9idWYsIHMsIHN0cmxlbiAocyksIHJlX3N5bnRheF9vcHRpb25zKTsKKworICBpZiAoIXJldCkKKyAgICByZXR1cm4gTlVMTDsKKworICAvKiBZZXMsIHdlJ3JlIGRpc2NhcmRpbmcgYGNvbnN0JyBoZXJlIGlmICFIQVZFX0xJQklOVEwuICAqLworICByZXR1cm4gKGNoYXIgKikgZ2V0dGV4dCAoX19yZV9lcnJvcl9tc2dpZCArIF9fcmVfZXJyb3JfbXNnaWRfaWR4WyhpbnQpIHJldF0pOworfQorCisjaWZkZWYgX0xJQkMKK2xpYmNfZnJlZXJlc19mbiAoZnJlZV9tZW0pCit7CisgIF9fcmVnZnJlZSAoJnJlX2NvbXBfYnVmKTsKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX1JFR0VYX1JFX0NPTVAgKi8KKwwKKy8qIEludGVybmFsIGVudHJ5IHBvaW50LgorICAgQ29tcGlsZSB0aGUgcmVndWxhciBleHByZXNzaW9uIFBBVFRFUk4sIHdob3NlIGxlbmd0aCBpcyBMRU5HVEguCisgICBTWU5UQVggaW5kaWNhdGUgcmVndWxhciBleHByZXNzaW9uJ3Mgc3ludGF4LiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK3JlX2NvbXBpbGVfaW50ZXJuYWwgKHJlZ2V4X3QgKnByZWcsIGNvbnN0IGNoYXIgKiBwYXR0ZXJuLCBzaXplX3QgbGVuZ3RoLAorCQkgICAgIHJlZ19zeW50YXhfdCBzeW50YXgpCit7CisgIHJlZ19lcnJjb2RlX3QgZXJyID0gUkVHX05PRVJST1I7CisgIHJlX2RmYV90ICpkZmE7CisgIHJlX3N0cmluZ190IHJlZ2V4cDsKKworICAvKiBJbml0aWFsaXplIHRoZSBwYXR0ZXJuIGJ1ZmZlci4gICovCisgIHByZWctPmZhc3RtYXBfYWNjdXJhdGUgPSAwOworICBwcmVnLT5zeW50YXggPSBzeW50YXg7CisgIHByZWctPm5vdF9ib2wgPSBwcmVnLT5ub3RfZW9sID0gMDsKKyAgcHJlZy0+dXNlZCA9IDA7CisgIHByZWctPnJlX25zdWIgPSAwOworICBwcmVnLT5jYW5fYmVfbnVsbCA9IDA7CisgIHByZWctPnJlZ3NfYWxsb2NhdGVkID0gUkVHU19VTkFMTE9DQVRFRDsKKworICAvKiBJbml0aWFsaXplIHRoZSBkZmEuICAqLworICBkZmEgPSAocmVfZGZhX3QgKikgcHJlZy0+YnVmZmVyOworICBpZiAoQkUgKHByZWctPmFsbG9jYXRlZCA8IHNpemVvZiAocmVfZGZhX3QpLCAwKSkKKyAgICB7CisgICAgICAvKiBJZiB6ZXJvIGFsbG9jYXRlZCwgYnV0IGJ1ZmZlciBpcyBub24tbnVsbCwgdHJ5IHRvIHJlYWxsb2MKKwkgZW5vdWdoIHNwYWNlLiAgVGhpcyBsb3NlcyBpZiBidWZmZXIncyBhZGRyZXNzIGlzIGJvZ3VzLCBidXQKKwkgdGhhdCBpcyB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5LiAgSWYgLT5idWZmZXIgaXMgTlVMTCB0aGlzCisJIGlzIGEgc2ltcGxlIGFsbG9jYXRpb24uICAqLworICAgICAgZGZhID0gcmVfcmVhbGxvYyAocHJlZy0+YnVmZmVyLCByZV9kZmFfdCwgMSk7CisgICAgICBpZiAoZGZhID09IE5VTEwpCisJcmV0dXJuIFJFR19FU1BBQ0U7CisgICAgICBwcmVnLT5hbGxvY2F0ZWQgPSBzaXplb2YgKHJlX2RmYV90KTsKKyAgICAgIHByZWctPmJ1ZmZlciA9ICh1bnNpZ25lZCBjaGFyICopIGRmYTsKKyAgICB9CisgIHByZWctPnVzZWQgPSBzaXplb2YgKHJlX2RmYV90KTsKKworICBlcnIgPSBpbml0X2RmYSAoZGZhLCBsZW5ndGgpOworICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisgICAgeworICAgICAgZnJlZV9kZmFfY29udGVudCAoZGZhKTsKKyAgICAgIHByZWctPmJ1ZmZlciA9IE5VTEw7CisgICAgICBwcmVnLT5hbGxvY2F0ZWQgPSAwOworICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisjaWZkZWYgREVCVUcKKyAgLyogTm90ZTogbGVuZ3RoKzEgd2lsbCBub3Qgb3ZlcmZsb3cgc2luY2UgaXQgaXMgY2hlY2tlZCBpbiBpbml0X2RmYS4gICovCisgIGRmYS0+cmVfc3RyID0gcmVfbWFsbG9jIChjaGFyLCBsZW5ndGggKyAxKTsKKyAgc3RybmNweSAoZGZhLT5yZV9zdHIsIHBhdHRlcm4sIGxlbmd0aCArIDEpOworI2VuZGlmCisKKyAgX19saWJjX2xvY2tfaW5pdCAoZGZhLT5sb2NrKTsKKworICBlcnIgPSByZV9zdHJpbmdfY29uc3RydWN0ICgmcmVnZXhwLCBwYXR0ZXJuLCBsZW5ndGgsIHByZWctPnRyYW5zbGF0ZSwKKwkJCSAgICAgc3ludGF4ICYgUkVfSUNBU0UsIGRmYSk7CisgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICB7CisgICAgcmVfY29tcGlsZV9pbnRlcm5hbF9mcmVlX3JldHVybjoKKyAgICAgIGZyZWVfd29ya2FyZWFfY29tcGlsZSAocHJlZyk7CisgICAgICByZV9zdHJpbmdfZGVzdHJ1Y3QgKCZyZWdleHApOworICAgICAgZnJlZV9kZmFfY29udGVudCAoZGZhKTsKKyAgICAgIHByZWctPmJ1ZmZlciA9IE5VTEw7CisgICAgICBwcmVnLT5hbGxvY2F0ZWQgPSAwOworICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgLyogUGFyc2UgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiwgYW5kIGJ1aWxkIGEgc3RydWN0dXJlIHRyZWUuICAqLworICBwcmVnLT5yZV9uc3ViID0gMDsKKyAgZGZhLT5zdHJfdHJlZSA9IHBhcnNlICgmcmVnZXhwLCBwcmVnLCBzeW50YXgsICZlcnIpOworICBpZiAoQkUgKGRmYS0+c3RyX3RyZWUgPT0gTlVMTCwgMCkpCisgICAgZ290byByZV9jb21waWxlX2ludGVybmFsX2ZyZWVfcmV0dXJuOworCisgIC8qIEFuYWx5emUgdGhlIHRyZWUgYW5kIGNyZWF0ZSB0aGUgbmZhLiAgKi8KKyAgZXJyID0gYW5hbHl6ZSAocHJlZyk7CisgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICBnb3RvIHJlX2NvbXBpbGVfaW50ZXJuYWxfZnJlZV9yZXR1cm47CisKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAvKiBJZiBwb3NzaWJsZSwgZG8gc2VhcmNoaW5nIGluIHNpbmdsZSBieXRlIGVuY29kaW5nIHRvIHNwZWVkIHRoaW5ncyB1cC4gICovCisgIGlmIChkZmEtPmlzX3V0ZjggJiYgIShzeW50YXggJiBSRV9JQ0FTRSkgJiYgcHJlZy0+dHJhbnNsYXRlID09IE5VTEwpCisgICAgb3B0aW1pemVfdXRmOCAoZGZhKTsKKyNlbmRpZgorCisgIC8qIFRoZW4gY3JlYXRlIHRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSBkZmEuICAqLworICBlcnIgPSBjcmVhdGVfaW5pdGlhbF9zdGF0ZSAoZGZhKTsKKworICAvKiBSZWxlYXNlIHdvcmsgYXJlYXMuICAqLworICBmcmVlX3dvcmthcmVhX2NvbXBpbGUgKHByZWcpOworICByZV9zdHJpbmdfZGVzdHJ1Y3QgKCZyZWdleHApOworCisgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICB7CisgICAgICBmcmVlX2RmYV9jb250ZW50IChkZmEpOworICAgICAgcHJlZy0+YnVmZmVyID0gTlVMTDsKKyAgICAgIHByZWctPmFsbG9jYXRlZCA9IDA7CisgICAgfQorCisgIHJldHVybiBlcnI7Cit9CisKKy8qIEluaXRpYWxpemUgREZBLiAgV2UgdXNlIHRoZSBsZW5ndGggb2YgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBQQVRfTEVOCisgICBhcyB0aGUgaW5pdGlhbCBsZW5ndGggb2Ygc29tZSBhcnJheXMuICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW5pdF9kZmEgKHJlX2RmYV90ICpkZmEsIHNpemVfdCBwYXRfbGVuKQoreworICBfX3JlX3NpemVfdCB0YWJsZV9zaXplOworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIHNpemVfdCBtYXhfaTE4bl9vYmplY3Rfc2l6ZSA9IE1BWCAoc2l6ZW9mICh3Y2hhcl90KSwgc2l6ZW9mICh3Y3R5cGVfdCkpOworI2Vsc2UKKyAgc2l6ZV90IG1heF9pMThuX29iamVjdF9zaXplID0gMDsKKyNlbmRpZgorICBzaXplX3QgbWF4X29iamVjdF9zaXplID0KKyAgICBNQVggKHNpemVvZiAoc3RydWN0IHJlX3N0YXRlX3RhYmxlX2VudHJ5KSwKKwkgTUFYIChzaXplb2YgKHJlX3Rva2VuX3QpLAorCSAgICAgIE1BWCAoc2l6ZW9mIChyZV9ub2RlX3NldCksCisJCSAgIE1BWCAoc2l6ZW9mIChyZWdtYXRjaF90KSwKKwkJCW1heF9pMThuX29iamVjdF9zaXplKSkpKTsKKworICBtZW1zZXQgKGRmYSwgJ1wwJywgc2l6ZW9mIChyZV9kZmFfdCkpOworCisgIC8qIEZvcmNlIGFsbG9jYXRpb24gb2Ygc3RyX3RyZWVfc3RvcmFnZSB0aGUgZmlyc3QgdGltZS4gICovCisgIGRmYS0+c3RyX3RyZWVfc3RvcmFnZV9pZHggPSBCSU5fVFJFRV9TVE9SQUdFX1NJWkU7CisKKyAgLyogQXZvaWQgb3ZlcmZsb3dzLiAgVGhlIGV4dHJhICIvIDIiIGlzIGZvciB0aGUgdGFibGVfc2l6ZSBkb3VibGluZworICAgICBjYWxjdWxhdGlvbiBiZWxvdywgYW5kIGZvciBzaW1pbGFyIGRvdWJsaW5nIGNhbGN1bGF0aW9ucworICAgICBlbHNld2hlcmUuICBBbmQgaXQncyA8PSByYXRoZXIgdGhhbiA8LCBiZWNhdXNlIHNvbWUgb2YgdGhlCisgICAgIGRvdWJsaW5nIGNhbGN1bGF0aW9ucyBhZGQgMSBhZnRlcndhcmRzLiAgKi8KKyAgaWYgKEJFIChTSVpFX01BWCAvIG1heF9vYmplY3Rfc2l6ZSAvIDIgPD0gcGF0X2xlbiwgMCkpCisgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisKKyAgZGZhLT5ub2Rlc19hbGxvYyA9IHBhdF9sZW4gKyAxOworICBkZmEtPm5vZGVzID0gcmVfbWFsbG9jIChyZV90b2tlbl90LCBkZmEtPm5vZGVzX2FsbG9jKTsKKworICAvKiAgdGFibGVfc2l6ZSA9IDIgXiBjZWlsKGxvZyBwYXRfbGVuKSAqLworICBmb3IgKHRhYmxlX3NpemUgPSAxOyA7IHRhYmxlX3NpemUgPDw9IDEpCisgICAgaWYgKHRhYmxlX3NpemUgPiBwYXRfbGVuKQorICAgICAgYnJlYWs7CisKKyAgZGZhLT5zdGF0ZV90YWJsZSA9IGNhbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgcmVfc3RhdGVfdGFibGVfZW50cnkpLCB0YWJsZV9zaXplKTsKKyAgZGZhLT5zdGF0ZV9oYXNoX21hc2sgPSB0YWJsZV9zaXplIC0gMTsKKworICBkZmEtPm1iX2N1cl9tYXggPSBNQl9DVVJfTUFYOworI2lmZGVmIF9MSUJDCisgIGlmIChkZmEtPm1iX2N1cl9tYXggPT0gNgorICAgICAgJiYgc3RyY21wIChfTkxfQ1VSUkVOVCAoTENfQ1RZUEUsIF9OTF9DVFlQRV9DT0RFU0VUX05BTUUpLCAiVVRGLTgiKSA9PSAwKQorICAgIGRmYS0+aXNfdXRmOCA9IDE7CisgIGRmYS0+bWFwX25vdGFzY2lpID0gKF9OTF9DVVJSRU5UX1dPUkQgKExDX0NUWVBFLCBfTkxfQ1RZUEVfTUFQX1RPX05PTkFTQ0lJKQorCQkgICAgICAgIT0gMCk7CisjZWxzZQorICBpZiAoc3RyY21wIChsb2NhbGVfY2hhcnNldCAoKSwgIlVURi04IikgPT0gMCkKKyAgICBkZmEtPmlzX3V0ZjggPSAxOworCisgIC8qIFdlIGNoZWNrIGV4aGF1c3RpdmVseSBpbiB0aGUgbG9vcCBiZWxvdyBpZiB0aGlzIGNoYXJzZXQgaXMgYQorICAgICBzdXBlcnNldCBvZiBBU0NJSS4gICovCisgIGRmYS0+bWFwX25vdGFzY2lpID0gMDsKKyNlbmRpZgorCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgaWYgKGRmYS0+bWJfY3VyX21heCA+IDEpCisgICAgeworICAgICAgaWYgKGRmYS0+aXNfdXRmOCkKKwlkZmEtPnNiX2NoYXIgPSAocmVfYml0c2V0X3B0cl90KSB1dGY4X3NiX21hcDsKKyAgICAgIGVsc2UKKwl7CisJICBpbnQgaSwgaiwgY2g7CisKKwkgIGRmYS0+c2JfY2hhciA9IChyZV9iaXRzZXRfcHRyX3QpIGNhbGxvYyAoc2l6ZW9mIChiaXRzZXRfdCksIDEpOworCSAgaWYgKEJFIChkZmEtPnNiX2NoYXIgPT0gTlVMTCwgMCkpCisJICAgIHJldHVybiBSRUdfRVNQQUNFOworCisJICAvKiBTZXQgdGhlIGJpdHMgY29ycmVzcG9uZGluZyB0byBzaW5nbGUgYnl0ZSBjaGFycy4gICovCisJICBmb3IgKGkgPSAwLCBjaCA9IDA7IGkgPCBCSVRTRVRfV09SRFM7ICsraSkKKwkgICAgZm9yIChqID0gMDsgaiA8IEJJVFNFVF9XT1JEX0JJVFM7ICsraiwgKytjaCkKKwkgICAgICB7CisJCXdpbnRfdCB3Y2ggPSBfX2J0b3djIChjaCk7CisJCWlmICh3Y2ggIT0gV0VPRikKKwkJICBkZmEtPnNiX2NoYXJbaV0gfD0gKGJpdHNldF93b3JkX3QpIDEgPDwgajsKKyMgaWZuZGVmIF9MSUJDCisJCWlmIChpc2FzY2lpIChjaCkgJiYgd2NoICE9IGNoKQorCQkgIGRmYS0+bWFwX25vdGFzY2lpID0gMTsKKyMgZW5kaWYKKwkgICAgICB9CisJfQorICAgIH0KKyNlbmRpZgorCisgIGlmIChCRSAoZGZhLT5ub2RlcyA9PSBOVUxMIHx8IGRmYS0+c3RhdGVfdGFibGUgPT0gTlVMTCwgMCkpCisgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworLyogSW5pdGlhbGl6ZSBXT1JEX0NIQVIgdGFibGUsIHdoaWNoIGluZGljYXRlIHdoaWNoIGNoYXJhY3RlciBpcworICAgIndvcmQiLiAgSW4gdGhpcyBjYXNlICJ3b3JkIiBtZWFucyB0aGF0IGl0IGlzIHRoZSB3b3JkIGNvbnN0cnVjdGlvbgorICAgY2hhcmFjdGVyIHVzZWQgYnkgc29tZSBvcGVyYXRvcnMgbGlrZSAiXDwiLCAiXD4iLCBldGMuICAqLworCitzdGF0aWMgdm9pZAoraW50ZXJuYWxfZnVuY3Rpb24KK2luaXRfd29yZF9jaGFyIChyZV9kZmFfdCAqZGZhKQoreworICBpbnQgaSwgaiwgY2g7CisgIGRmYS0+d29yZF9vcHNfdXNlZCA9IDE7CisgIGZvciAoaSA9IDAsIGNoID0gMDsgaSA8IEJJVFNFVF9XT1JEUzsgKytpKQorICAgIGZvciAoaiA9IDA7IGogPCBCSVRTRVRfV09SRF9CSVRTOyArK2osICsrY2gpCisgICAgICBpZiAoaXNhbG51bSAoY2gpIHx8IGNoID09ICdfJykKKwlkZmEtPndvcmRfY2hhcltpXSB8PSAoYml0c2V0X3dvcmRfdCkgMSA8PCBqOworfQorCisvKiBGcmVlIHRoZSB3b3JrIGFyZWEgd2hpY2ggYXJlIG9ubHkgdXNlZCB3aGlsZSBjb21waWxpbmcuICAqLworCitzdGF0aWMgdm9pZAorZnJlZV93b3JrYXJlYV9jb21waWxlIChyZWdleF90ICpwcmVnKQoreworICByZV9kZmFfdCAqZGZhID0gKHJlX2RmYV90ICopIHByZWctPmJ1ZmZlcjsKKyAgYmluX3RyZWVfc3RvcmFnZV90ICpzdG9yYWdlLCAqbmV4dDsKKyAgZm9yIChzdG9yYWdlID0gZGZhLT5zdHJfdHJlZV9zdG9yYWdlOyBzdG9yYWdlOyBzdG9yYWdlID0gbmV4dCkKKyAgICB7CisgICAgICBuZXh0ID0gc3RvcmFnZS0+bmV4dDsKKyAgICAgIHJlX2ZyZWUgKHN0b3JhZ2UpOworICAgIH0KKyAgZGZhLT5zdHJfdHJlZV9zdG9yYWdlID0gTlVMTDsKKyAgZGZhLT5zdHJfdHJlZV9zdG9yYWdlX2lkeCA9IEJJTl9UUkVFX1NUT1JBR0VfU0laRTsKKyAgZGZhLT5zdHJfdHJlZSA9IE5VTEw7CisgIHJlX2ZyZWUgKGRmYS0+b3JnX2luZGljZXMpOworICBkZmEtPm9yZ19pbmRpY2VzID0gTlVMTDsKK30KKworLyogQ3JlYXRlIGluaXRpYWwgc3RhdGVzIGZvciBhbGwgY29udGV4dHMuICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAorY3JlYXRlX2luaXRpYWxfc3RhdGUgKHJlX2RmYV90ICpkZmEpCit7CisgIElkeCBmaXJzdCwgaTsKKyAgcmVnX2VycmNvZGVfdCBlcnI7CisgIHJlX25vZGVfc2V0IGluaXRfbm9kZXM7CisKKyAgLyogSW5pdGlhbCBzdGF0ZXMgaGF2ZSB0aGUgZXBzaWxvbiBjbG9zdXJlIG9mIHRoZSBub2RlIHdoaWNoIGlzCisgICAgIHRoZSBmaXJzdCBub2RlIG9mIHRoZSByZWd1bGFyIGV4cHJlc3Npb24uICAqLworICBmaXJzdCA9IGRmYS0+c3RyX3RyZWUtPmZpcnN0LT5ub2RlX2lkeDsKKyAgZGZhLT5pbml0X25vZGUgPSBmaXJzdDsKKyAgZXJyID0gcmVfbm9kZV9zZXRfaW5pdF9jb3B5ICgmaW5pdF9ub2RlcywgZGZhLT5lY2xvc3VyZXMgKyBmaXJzdCk7CisgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICByZXR1cm4gZXJyOworCisgIC8qIFRoZSBiYWNrLXJlZmVyZW5jZXMgd2hpY2ggYXJlIGluIGluaXRpYWwgc3RhdGVzIGNhbiBlcHNpbG9uIHRyYW5zaXQsCisgICAgIHNpbmNlIGluIHRoaXMgY2FzZSBhbGwgb2YgdGhlIHN1YmV4cHJlc3Npb25zIGNhbiBiZSBudWxsLgorICAgICBUaGVuIHdlIGFkZCBlcHNpbG9uIGNsb3N1cmVzIG9mIHRoZSBub2RlcyB3aGljaCBhcmUgdGhlIG5leHQgbm9kZXMgb2YKKyAgICAgdGhlIGJhY2stcmVmZXJlbmNlcy4gICovCisgIGlmIChkZmEtPm5iYWNrcmVmID4gMCkKKyAgICBmb3IgKGkgPSAwOyBpIDwgaW5pdF9ub2Rlcy5uZWxlbTsgKytpKQorICAgICAgeworCUlkeCBub2RlX2lkeCA9IGluaXRfbm9kZXMuZWxlbXNbaV07CisJcmVfdG9rZW5fdHlwZV90IHR5cGUgPSBkZmEtPm5vZGVzW25vZGVfaWR4XS50eXBlOworCisJSWR4IGNsZXhwX2lkeDsKKwlpZiAodHlwZSAhPSBPUF9CQUNLX1JFRikKKwkgIGNvbnRpbnVlOworCWZvciAoY2xleHBfaWR4ID0gMDsgY2xleHBfaWR4IDwgaW5pdF9ub2Rlcy5uZWxlbTsgKytjbGV4cF9pZHgpCisJICB7CisJICAgIHJlX3Rva2VuX3QgKmNsZXhwX25vZGU7CisJICAgIGNsZXhwX25vZGUgPSBkZmEtPm5vZGVzICsgaW5pdF9ub2Rlcy5lbGVtc1tjbGV4cF9pZHhdOworCSAgICBpZiAoY2xleHBfbm9kZS0+dHlwZSA9PSBPUF9DTE9TRV9TVUJFWFAKKwkJJiYgY2xleHBfbm9kZS0+b3ByLmlkeCA9PSBkZmEtPm5vZGVzW25vZGVfaWR4XS5vcHIuaWR4KQorCSAgICAgIGJyZWFrOworCSAgfQorCWlmIChjbGV4cF9pZHggPT0gaW5pdF9ub2Rlcy5uZWxlbSkKKwkgIGNvbnRpbnVlOworCisJaWYgKHR5cGUgPT0gT1BfQkFDS19SRUYpCisJICB7CisJICAgIElkeCBkZXN0X2lkeCA9IGRmYS0+ZWRlc3RzW25vZGVfaWR4XS5lbGVtc1swXTsKKwkgICAgaWYgKCFyZV9ub2RlX3NldF9jb250YWlucyAoJmluaXRfbm9kZXMsIGRlc3RfaWR4KSkKKwkgICAgICB7CisJCXJlX25vZGVfc2V0X21lcmdlICgmaW5pdF9ub2RlcywgZGZhLT5lY2xvc3VyZXMgKyBkZXN0X2lkeCk7CisJCWkgPSAwOworCSAgICAgIH0KKwkgIH0KKyAgICAgIH0KKworICAvKiBJdCBtdXN0IGJlIHRoZSBmaXJzdCB0aW1lIHRvIGludm9rZSBhY3F1aXJlX3N0YXRlLiAgKi8KKyAgZGZhLT5pbml0X3N0YXRlID0gcmVfYWNxdWlyZV9zdGF0ZV9jb250ZXh0ICgmZXJyLCBkZmEsICZpbml0X25vZGVzLCAwKTsKKyAgLyogV2UgZG9uJ3QgY2hlY2sgRVJSIGhlcmUsIHNpbmNlIHRoZSBpbml0aWFsIHN0YXRlIG11c3Qgbm90IGJlIE5VTEwuICAqLworICBpZiAoQkUgKGRmYS0+aW5pdF9zdGF0ZSA9PSBOVUxMLCAwKSkKKyAgICByZXR1cm4gZXJyOworICBpZiAoZGZhLT5pbml0X3N0YXRlLT5oYXNfY29uc3RyYWludCkKKyAgICB7CisgICAgICBkZmEtPmluaXRfc3RhdGVfd29yZCA9IHJlX2FjcXVpcmVfc3RhdGVfY29udGV4dCAoJmVyciwgZGZhLCAmaW5pdF9ub2RlcywKKwkJCQkJCSAgICAgICBDT05URVhUX1dPUkQpOworICAgICAgZGZhLT5pbml0X3N0YXRlX25sID0gcmVfYWNxdWlyZV9zdGF0ZV9jb250ZXh0ICgmZXJyLCBkZmEsICZpbml0X25vZGVzLAorCQkJCQkJICAgICBDT05URVhUX05FV0xJTkUpOworICAgICAgZGZhLT5pbml0X3N0YXRlX2JlZ2J1ZiA9IHJlX2FjcXVpcmVfc3RhdGVfY29udGV4dCAoJmVyciwgZGZhLAorCQkJCQkJCSAmaW5pdF9ub2RlcywKKwkJCQkJCQkgQ09OVEVYVF9ORVdMSU5FCisJCQkJCQkJIHwgQ09OVEVYVF9CRUdCVUYpOworICAgICAgaWYgKEJFIChkZmEtPmluaXRfc3RhdGVfd29yZCA9PSBOVUxMIHx8IGRmYS0+aW5pdF9zdGF0ZV9ubCA9PSBOVUxMCisJICAgICAgfHwgZGZhLT5pbml0X3N0YXRlX2JlZ2J1ZiA9PSBOVUxMLCAwKSkKKwlyZXR1cm4gZXJyOworICAgIH0KKyAgZWxzZQorICAgIGRmYS0+aW5pdF9zdGF0ZV93b3JkID0gZGZhLT5pbml0X3N0YXRlX25sCisgICAgICA9IGRmYS0+aW5pdF9zdGF0ZV9iZWdidWYgPSBkZmEtPmluaXRfc3RhdGU7CisKKyAgcmVfbm9kZV9zZXRfZnJlZSAoJmluaXRfbm9kZXMpOworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisMCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKy8qIElmIGl0IGlzIHBvc3NpYmxlIHRvIGRvIHNlYXJjaGluZyBpbiBzaW5nbGUgYnl0ZSBlbmNvZGluZyBpbnN0ZWFkIG9mIFVURi04CisgICB0byBzcGVlZCB0aGluZ3MgdXAsIHNldCBkZmEtPm1iX2N1cl9tYXggdG8gMSwgY2xlYXIgaXNfdXRmOCBhbmQgY2hhbmdlCisgICBERkEgbm9kZXMgd2hlcmUgbmVlZGVkLiAgKi8KKworc3RhdGljIHZvaWQKK29wdGltaXplX3V0ZjggKHJlX2RmYV90ICpkZmEpCit7CisgIElkeCBub2RlOworICBpbnQgaTsKKyAgYm9vbCBtYl9jaGFycyA9IGZhbHNlOworICBib29sIGhhc19wZXJpb2QgPSBmYWxzZTsKKworICBmb3IgKG5vZGUgPSAwOyBub2RlIDwgZGZhLT5ub2Rlc19sZW47ICsrbm9kZSkKKyAgICBzd2l0Y2ggKGRmYS0+bm9kZXNbbm9kZV0udHlwZSkKKyAgICAgIHsKKyAgICAgIGNhc2UgQ0hBUkFDVEVSOgorCWlmIChkZmEtPm5vZGVzW25vZGVdLm9wci5jID49IEFTQ0lJX0NIQVJTKQorCSAgbWJfY2hhcnMgPSB0cnVlOworCWJyZWFrOworICAgICAgY2FzZSBBTkNIT1I6CisJc3dpdGNoIChkZmEtPm5vZGVzW25vZGVdLm9wci5pZHgpCisJICB7CisJICBjYXNlIExJTkVfRklSU1Q6CisJICBjYXNlIExJTkVfTEFTVDoKKwkgIGNhc2UgQlVGX0ZJUlNUOgorCSAgY2FzZSBCVUZfTEFTVDoKKwkgICAgYnJlYWs7CisJICBkZWZhdWx0OgorCSAgICAvKiBXb3JkIGFuY2hvcnMgZXRjLiBjYW5ub3QgYmUgaGFuZGxlZC4gICovCisJICAgIHJldHVybjsKKwkgIH0KKwlicmVhazsKKyAgICAgIGNhc2UgT1BfUEVSSU9EOgorICAgICAgICBoYXNfcGVyaW9kID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIE9QX0JBQ0tfUkVGOgorICAgICAgY2FzZSBPUF9BTFQ6CisgICAgICBjYXNlIEVORF9PRl9SRToKKyAgICAgIGNhc2UgT1BfRFVQX0FTVEVSSVNLOgorICAgICAgY2FzZSBPUF9PUEVOX1NVQkVYUDoKKyAgICAgIGNhc2UgT1BfQ0xPU0VfU1VCRVhQOgorCWJyZWFrOworICAgICAgY2FzZSBDT01QTEVYX0JSQUNLRVQ6CisJcmV0dXJuOworICAgICAgY2FzZSBTSU1QTEVfQlJBQ0tFVDoKKwkvKiBKdXN0IGRvdWJsZSBjaGVjay4gICovCisJeworCSAgaW50IHJzaGlmdCA9IChBU0NJSV9DSEFSUyAlIEJJVFNFVF9XT1JEX0JJVFMgPT0gMAorCQkJPyAwCisJCQk6IEJJVFNFVF9XT1JEX0JJVFMgLSBBU0NJSV9DSEFSUyAlIEJJVFNFVF9XT1JEX0JJVFMpOworCSAgZm9yIChpID0gQVNDSUlfQ0hBUlMgLyBCSVRTRVRfV09SRF9CSVRTOyBpIDwgQklUU0VUX1dPUkRTOyArK2kpCisJICAgIHsKKwkgICAgICBpZiAoZGZhLT5ub2Rlc1tub2RlXS5vcHIuc2Jjc2V0W2ldID4+IHJzaGlmdCAhPSAwKQorCQlyZXR1cm47CisJICAgICAgcnNoaWZ0ID0gMDsKKwkgICAgfQorCX0KKwlicmVhazsKKyAgICAgIGRlZmF1bHQ6CisJYWJvcnQgKCk7CisgICAgICB9CisKKyAgaWYgKG1iX2NoYXJzIHx8IGhhc19wZXJpb2QpCisgICAgZm9yIChub2RlID0gMDsgbm9kZSA8IGRmYS0+bm9kZXNfbGVuOyArK25vZGUpCisgICAgICB7CisJaWYgKGRmYS0+bm9kZXNbbm9kZV0udHlwZSA9PSBDSEFSQUNURVIKKwkgICAgJiYgZGZhLT5ub2Rlc1tub2RlXS5vcHIuYyA+PSBBU0NJSV9DSEFSUykKKwkgIGRmYS0+bm9kZXNbbm9kZV0ubWJfcGFydGlhbCA9IDA7CisJZWxzZSBpZiAoZGZhLT5ub2Rlc1tub2RlXS50eXBlID09IE9QX1BFUklPRCkKKwkgIGRmYS0+bm9kZXNbbm9kZV0udHlwZSA9IE9QX1VURjhfUEVSSU9EOworICAgICAgfQorCisgIC8qIFRoZSBzZWFyY2ggY2FuIGJlIGluIHNpbmdsZSBieXRlIGxvY2FsZS4gICovCisgIGRmYS0+bWJfY3VyX21heCA9IDE7CisgIGRmYS0+aXNfdXRmOCA9IDA7CisgIGRmYS0+aGFzX21iX25vZGUgPSBkZmEtPm5iYWNrcmVmID4gMCB8fCBoYXNfcGVyaW9kOworfQorI2VuZGlmCisMCisvKiBBbmFseXplIHRoZSBzdHJ1Y3R1cmUgdHJlZSwgYW5kIGNhbGN1bGF0ZSAiZmlyc3QiLCAibmV4dCIsICJlZGVzdCIsCisgICAiZWNsb3N1cmUiLCBhbmQgImludmVjbG9zdXJlIi4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CithbmFseXplIChyZWdleF90ICpwcmVnKQoreworICByZV9kZmFfdCAqZGZhID0gKHJlX2RmYV90ICopIHByZWctPmJ1ZmZlcjsKKyAgcmVnX2VycmNvZGVfdCByZXQ7CisKKyAgLyogQWxsb2NhdGUgYXJyYXlzLiAgKi8KKyAgZGZhLT5uZXh0cyA9IHJlX21hbGxvYyAoSWR4LCBkZmEtPm5vZGVzX2FsbG9jKTsKKyAgZGZhLT5vcmdfaW5kaWNlcyA9IHJlX21hbGxvYyAoSWR4LCBkZmEtPm5vZGVzX2FsbG9jKTsKKyAgZGZhLT5lZGVzdHMgPSByZV9tYWxsb2MgKHJlX25vZGVfc2V0LCBkZmEtPm5vZGVzX2FsbG9jKTsKKyAgZGZhLT5lY2xvc3VyZXMgPSByZV9tYWxsb2MgKHJlX25vZGVfc2V0LCBkZmEtPm5vZGVzX2FsbG9jKTsKKyAgaWYgKEJFIChkZmEtPm5leHRzID09IE5VTEwgfHwgZGZhLT5vcmdfaW5kaWNlcyA9PSBOVUxMIHx8IGRmYS0+ZWRlc3RzID09IE5VTEwKKwkgIHx8IGRmYS0+ZWNsb3N1cmVzID09IE5VTEwsIDApKQorICAgIHJldHVybiBSRUdfRVNQQUNFOworCisgIGRmYS0+c3ViZXhwX21hcCA9IHJlX21hbGxvYyAoSWR4LCBwcmVnLT5yZV9uc3ViKTsKKyAgaWYgKGRmYS0+c3ViZXhwX21hcCAhPSBOVUxMKQorICAgIHsKKyAgICAgIElkeCBpOworICAgICAgZm9yIChpID0gMDsgaSA8IHByZWctPnJlX25zdWI7IGkrKykKKwlkZmEtPnN1YmV4cF9tYXBbaV0gPSBpOworICAgICAgcHJlb3JkZXIgKGRmYS0+c3RyX3RyZWUsIG9wdGltaXplX3N1YmV4cHMsIGRmYSk7CisgICAgICBmb3IgKGkgPSAwOyBpIDwgcHJlZy0+cmVfbnN1YjsgaSsrKQorCWlmIChkZmEtPnN1YmV4cF9tYXBbaV0gIT0gaSkKKwkgIGJyZWFrOworICAgICAgaWYgKGkgPT0gcHJlZy0+cmVfbnN1YikKKwl7CisJICBmcmVlIChkZmEtPnN1YmV4cF9tYXApOworCSAgZGZhLT5zdWJleHBfbWFwID0gTlVMTDsKKwl9CisgICAgfQorCisgIHJldCA9IHBvc3RvcmRlciAoZGZhLT5zdHJfdHJlZSwgbG93ZXJfc3ViZXhwcywgcHJlZyk7CisgIGlmIChCRSAocmV0ICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICByZXR1cm4gcmV0OworICByZXQgPSBwb3N0b3JkZXIgKGRmYS0+c3RyX3RyZWUsIGNhbGNfZmlyc3QsIGRmYSk7CisgIGlmIChCRSAocmV0ICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICByZXR1cm4gcmV0OworICBwcmVvcmRlciAoZGZhLT5zdHJfdHJlZSwgY2FsY19uZXh0LCBkZmEpOworICByZXQgPSBwcmVvcmRlciAoZGZhLT5zdHJfdHJlZSwgbGlua19uZmFfbm9kZXMsIGRmYSk7CisgIGlmIChCRSAocmV0ICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICByZXR1cm4gcmV0OworICByZXQgPSBjYWxjX2VjbG9zdXJlIChkZmEpOworICBpZiAoQkUgKHJldCAhPSBSRUdfTk9FUlJPUiwgMCkpCisgICAgcmV0dXJuIHJldDsKKworICAvKiBXZSBvbmx5IG5lZWQgdGhpcyBkdXJpbmcgdGhlIHBydW5lX2ltcG9zc2libGVfbm9kZXMgcGFzcyBpbiByZWdleGVjLmM7CisgICAgIHNraXAgaXQgaWYgcF9pX24gd2lsbCBub3QgcnVuLCBhcyBjYWxjX2ludmVjbG9zdXJlIGNhbiBiZSBxdWFkcmF0aWMuICAqLworICBpZiAoKCFwcmVnLT5ub19zdWIgJiYgcHJlZy0+cmVfbnN1YiA+IDAgJiYgZGZhLT5oYXNfcGx1cmFsX21hdGNoKQorICAgICAgfHwgZGZhLT5uYmFja3JlZikKKyAgICB7CisgICAgICBkZmEtPmludmVjbG9zdXJlcyA9IHJlX21hbGxvYyAocmVfbm9kZV9zZXQsIGRmYS0+bm9kZXNfbGVuKTsKKyAgICAgIGlmIChCRSAoZGZhLT5pbnZlY2xvc3VyZXMgPT0gTlVMTCwgMCkpCisgICAgICAgIHJldHVybiBSRUdfRVNQQUNFOworICAgICAgcmV0ID0gY2FsY19pbnZlY2xvc3VyZSAoZGZhKTsKKyAgICB9CisKKyAgcmV0dXJuIHJldDsKK30KKworLyogT3VyIHBhcnNlIHRyZWVzIGFyZSB2ZXJ5IHVuYmFsYW5jZWQsIHNvIHdlIGNhbm5vdCB1c2UgYSBzdGFjayB0bworICAgaW1wbGVtZW50IHBhcnNlIHRyZWUgdmlzaXRzLiAgSW5zdGVhZCwgd2UgdXNlIHBhcmVudCBwb2ludGVycyBhbmQKKyAgIHNvbWUgaGFpcnkgY29kZSBpbiB0aGVzZSB0d28gZnVuY3Rpb25zLiAgKi8KK3N0YXRpYyByZWdfZXJyY29kZV90Citwb3N0b3JkZXIgKGJpbl90cmVlX3QgKnJvb3QsIHJlZ19lcnJjb2RlX3QgKGZuICh2b2lkICosIGJpbl90cmVlX3QgKikpLAorCSAgIHZvaWQgKmV4dHJhKQoreworICBiaW5fdHJlZV90ICpub2RlLCAqcHJldjsKKworICBmb3IgKG5vZGUgPSByb290OyA7ICkKKyAgICB7CisgICAgICAvKiBEZXNjZW5kIGRvd24gdGhlIHRyZWUsIHByZWZlcmFibHkgdG8gdGhlIGxlZnQgKG9yIHRvIHRoZSByaWdodAorCSBpZiB0aGF0J3MgdGhlIG9ubHkgY2hpbGQpLiAgKi8KKyAgICAgIHdoaWxlIChub2RlLT5sZWZ0IHx8IG5vZGUtPnJpZ2h0KQorCWlmIChub2RlLT5sZWZ0KQorICAgICAgICAgIG5vZGUgPSBub2RlLT5sZWZ0OworICAgICAgICBlbHNlCisgICAgICAgICAgbm9kZSA9IG5vZGUtPnJpZ2h0OworCisgICAgICBkbworCXsKKwkgIHJlZ19lcnJjb2RlX3QgZXJyID0gZm4gKGV4dHJhLCBub2RlKTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgcmV0dXJuIGVycjsKKyAgICAgICAgICBpZiAobm9kZS0+cGFyZW50ID09IE5VTEwpCisJICAgIHJldHVybiBSRUdfTk9FUlJPUjsKKwkgIHByZXYgPSBub2RlOworCSAgbm9kZSA9IG5vZGUtPnBhcmVudDsKKwl9CisgICAgICAvKiBHbyB1cCB3aGlsZSB3ZSBoYXZlIGEgbm9kZSB0aGF0IGlzIHJlYWNoZWQgZnJvbSB0aGUgcmlnaHQuICAqLworICAgICAgd2hpbGUgKG5vZGUtPnJpZ2h0ID09IHByZXYgfHwgbm9kZS0+cmlnaHQgPT0gTlVMTCk7CisgICAgICBub2RlID0gbm9kZS0+cmlnaHQ7CisgICAgfQorfQorCitzdGF0aWMgcmVnX2VycmNvZGVfdAorcHJlb3JkZXIgKGJpbl90cmVlX3QgKnJvb3QsIHJlZ19lcnJjb2RlX3QgKGZuICh2b2lkICosIGJpbl90cmVlX3QgKikpLAorCSAgdm9pZCAqZXh0cmEpCit7CisgIGJpbl90cmVlX3QgKm5vZGU7CisKKyAgZm9yIChub2RlID0gcm9vdDsgOyApCisgICAgeworICAgICAgcmVnX2VycmNvZGVfdCBlcnIgPSBmbiAoZXh0cmEsIG5vZGUpOworICAgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCXJldHVybiBlcnI7CisKKyAgICAgIC8qIEdvIHRvIHRoZSBsZWZ0IG5vZGUsIG9yIHVwIGFuZCB0byB0aGUgcmlnaHQuICAqLworICAgICAgaWYgKG5vZGUtPmxlZnQpCisJbm9kZSA9IG5vZGUtPmxlZnQ7CisgICAgICBlbHNlCisJeworCSAgYmluX3RyZWVfdCAqcHJldiA9IE5VTEw7CisJICB3aGlsZSAobm9kZS0+cmlnaHQgPT0gcHJldiB8fCBub2RlLT5yaWdodCA9PSBOVUxMKQorCSAgICB7CisJICAgICAgcHJldiA9IG5vZGU7CisJICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudDsKKwkgICAgICBpZiAoIW5vZGUpCisJICAgICAgICByZXR1cm4gUkVHX05PRVJST1I7CisJICAgIH0KKwkgIG5vZGUgPSBub2RlLT5yaWdodDsKKwl9CisgICAgfQorfQorCisvKiBPcHRpbWl6YXRpb24gcGFzczogaWYgYSBTVUJFWFAgaXMgZW50aXJlbHkgY29udGFpbmVkLCBzdHJpcCBpdCBhbmQgdGVsbAorICAgcmVfc2VhcmNoX2ludGVybmFsIHRvIG1hcCB0aGUgaW5uZXIgb25lJ3Mgb3ByLmlkeCB0byB0aGlzIG9uZSdzLiAgQWRqdXN0CisgICBiYWNrcmVmZXJlbmNlcyBhcyB3ZWxsLiAgUmVxdWlyZXMgYSBwcmVvcmRlciB2aXNpdC4gICovCitzdGF0aWMgcmVnX2VycmNvZGVfdAorb3B0aW1pemVfc3ViZXhwcyAodm9pZCAqZXh0cmEsIGJpbl90cmVlX3QgKm5vZGUpCit7CisgIHJlX2RmYV90ICpkZmEgPSAocmVfZGZhX3QgKikgZXh0cmE7CisKKyAgaWYgKG5vZGUtPnRva2VuLnR5cGUgPT0gT1BfQkFDS19SRUYgJiYgZGZhLT5zdWJleHBfbWFwKQorICAgIHsKKyAgICAgIGludCBpZHggPSBub2RlLT50b2tlbi5vcHIuaWR4OworICAgICAgbm9kZS0+dG9rZW4ub3ByLmlkeCA9IGRmYS0+c3ViZXhwX21hcFtpZHhdOworICAgICAgZGZhLT51c2VkX2JrcmVmX21hcCB8PSAxIDw8IG5vZGUtPnRva2VuLm9wci5pZHg7CisgICAgfQorCisgIGVsc2UgaWYgKG5vZGUtPnRva2VuLnR5cGUgPT0gU1VCRVhQCisgICAgICAgICAgICYmIG5vZGUtPmxlZnQgJiYgbm9kZS0+bGVmdC0+dG9rZW4udHlwZSA9PSBTVUJFWFApCisgICAgeworICAgICAgSWR4IG90aGVyX2lkeCA9IG5vZGUtPmxlZnQtPnRva2VuLm9wci5pZHg7CisKKyAgICAgIG5vZGUtPmxlZnQgPSBub2RlLT5sZWZ0LT5sZWZ0OworICAgICAgaWYgKG5vZGUtPmxlZnQpCisgICAgICAgIG5vZGUtPmxlZnQtPnBhcmVudCA9IG5vZGU7CisKKyAgICAgIGRmYS0+c3ViZXhwX21hcFtvdGhlcl9pZHhdID0gZGZhLT5zdWJleHBfbWFwW25vZGUtPnRva2VuLm9wci5pZHhdOworICAgICAgaWYgKG90aGVyX2lkeCA8IEJJVFNFVF9XT1JEX0JJVFMpCisJZGZhLT51c2VkX2JrcmVmX21hcCAmPSB+KChiaXRzZXRfd29yZF90KSAxIDw8IG90aGVyX2lkeCk7CisgICAgfQorCisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworLyogTG93ZXJpbmcgcGFzczogVHVybiBlYWNoIFNVQkVYUCBub2RlIGludG8gdGhlIGFwcHJvcHJpYXRlIGNvbmNhdGVuYXRpb24KKyAgIG9mIE9QX09QRU5fU1VCRVhQLCB0aGUgYm9keSBvZiB0aGUgU1VCRVhQIChpZiBhbnkpIGFuZCBPUF9DTE9TRV9TVUJFWFAuICAqLworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2xvd2VyX3N1YmV4cHMgKHZvaWQgKmV4dHJhLCBiaW5fdHJlZV90ICpub2RlKQoreworICByZWdleF90ICpwcmVnID0gKHJlZ2V4X3QgKikgZXh0cmE7CisgIHJlZ19lcnJjb2RlX3QgZXJyID0gUkVHX05PRVJST1I7CisKKyAgaWYgKG5vZGUtPmxlZnQgJiYgbm9kZS0+bGVmdC0+dG9rZW4udHlwZSA9PSBTVUJFWFApCisgICAgeworICAgICAgbm9kZS0+bGVmdCA9IGxvd2VyX3N1YmV4cCAoJmVyciwgcHJlZywgbm9kZS0+bGVmdCk7CisgICAgICBpZiAobm9kZS0+bGVmdCkKKwlub2RlLT5sZWZ0LT5wYXJlbnQgPSBub2RlOworICAgIH0KKyAgaWYgKG5vZGUtPnJpZ2h0ICYmIG5vZGUtPnJpZ2h0LT50b2tlbi50eXBlID09IFNVQkVYUCkKKyAgICB7CisgICAgICBub2RlLT5yaWdodCA9IGxvd2VyX3N1YmV4cCAoJmVyciwgcHJlZywgbm9kZS0+cmlnaHQpOworICAgICAgaWYgKG5vZGUtPnJpZ2h0KQorCW5vZGUtPnJpZ2h0LT5wYXJlbnQgPSBub2RlOworICAgIH0KKworICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgYmluX3RyZWVfdCAqCitsb3dlcl9zdWJleHAgKHJlZ19lcnJjb2RlX3QgKmVyciwgcmVnZXhfdCAqcHJlZywgYmluX3RyZWVfdCAqbm9kZSkKK3sKKyAgcmVfZGZhX3QgKmRmYSA9IChyZV9kZmFfdCAqKSBwcmVnLT5idWZmZXI7CisgIGJpbl90cmVlX3QgKmJvZHkgPSBub2RlLT5sZWZ0OworICBiaW5fdHJlZV90ICpvcCwgKmNscywgKnRyZWUxLCAqdHJlZTsKKworICBpZiAocHJlZy0+bm9fc3ViCisgICAgICAvKiBXZSBkbyBub3Qgb3B0aW1pemUgZW1wdHkgc3ViZXhwcmVzc2lvbnMsIGJlY2F1c2Ugb3RoZXJ3aXNlIHdlIG1heQorCSBoYXZlIGJhZCBDT05DQVQgbm9kZXMgd2l0aCBOVUxMIGNoaWxkcmVuLiAgVGhpcyBpcyBvYnZpb3VzbHkgbm90CisJIHZlcnkgY29tbW9uLCBzbyB3ZSBkbyBub3QgbG9zZSBtdWNoLiAgQW4gZXhhbXBsZSB0aGF0IHRyaWdnZXJzCisJIHRoaXMgY2FzZSBpcyB0aGUgc2VkICJzY3JpcHQiIC9cKFwpL3guICAqLworICAgICAgJiYgbm9kZS0+bGVmdCAhPSBOVUxMCisgICAgICAmJiAobm9kZS0+dG9rZW4ub3ByLmlkeCA+PSBCSVRTRVRfV09SRF9CSVRTCisJICB8fCAhKGRmYS0+dXNlZF9ia3JlZl9tYXAKKwkgICAgICAgJiAoKGJpdHNldF93b3JkX3QpIDEgPDwgbm9kZS0+dG9rZW4ub3ByLmlkeCkpKSkKKyAgICByZXR1cm4gbm9kZS0+bGVmdDsKKworICAvKiBDb252ZXJ0IHRoZSBTVUJFWFAgbm9kZSB0byB0aGUgY29uY2F0ZW5hdGlvbiBvZiBhbgorICAgICBPUF9PUEVOX1NVQkVYUCwgdGhlIGNvbnRlbnRzLCBhbmQgYW4gT1BfQ0xPU0VfU1VCRVhQLiAgKi8KKyAgb3AgPSBjcmVhdGVfdHJlZSAoZGZhLCBOVUxMLCBOVUxMLCBPUF9PUEVOX1NVQkVYUCk7CisgIGNscyA9IGNyZWF0ZV90cmVlIChkZmEsIE5VTEwsIE5VTEwsIE9QX0NMT1NFX1NVQkVYUCk7CisgIHRyZWUxID0gYm9keSA/IGNyZWF0ZV90cmVlIChkZmEsIGJvZHksIGNscywgQ09OQ0FUKSA6IGNsczsKKyAgdHJlZSA9IGNyZWF0ZV90cmVlIChkZmEsIG9wLCB0cmVlMSwgQ09OQ0FUKTsKKyAgaWYgKEJFICh0cmVlID09IE5VTEwgfHwgdHJlZTEgPT0gTlVMTCB8fCBvcCA9PSBOVUxMIHx8IGNscyA9PSBOVUxMLCAwKSkKKyAgICB7CisgICAgICAqZXJyID0gUkVHX0VTUEFDRTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICBvcC0+dG9rZW4ub3ByLmlkeCA9IGNscy0+dG9rZW4ub3ByLmlkeCA9IG5vZGUtPnRva2VuLm9wci5pZHg7CisgIG9wLT50b2tlbi5vcHRfc3ViZXhwID0gY2xzLT50b2tlbi5vcHRfc3ViZXhwID0gbm9kZS0+dG9rZW4ub3B0X3N1YmV4cDsKKyAgcmV0dXJuIHRyZWU7Cit9CisKKy8qIFBhc3MgMSBpbiBidWlsZGluZyB0aGUgTkZBOiBjb21wdXRlIEZJUlNUIGFuZCBjcmVhdGUgdW5saW5rZWQgYXV0b21hdG9uCisgICBub2Rlcy4gIFJlcXVpcmVzIGEgcG9zdG9yZGVyIHZpc2l0LiAgKi8KK3N0YXRpYyByZWdfZXJyY29kZV90CitjYWxjX2ZpcnN0ICh2b2lkICpleHRyYSwgYmluX3RyZWVfdCAqbm9kZSkKK3sKKyAgcmVfZGZhX3QgKmRmYSA9IChyZV9kZmFfdCAqKSBleHRyYTsKKyAgaWYgKG5vZGUtPnRva2VuLnR5cGUgPT0gQ09OQ0FUKQorICAgIHsKKyAgICAgIG5vZGUtPmZpcnN0ID0gbm9kZS0+bGVmdC0+Zmlyc3Q7CisgICAgICBub2RlLT5ub2RlX2lkeCA9IG5vZGUtPmxlZnQtPm5vZGVfaWR4OworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIG5vZGUtPmZpcnN0ID0gbm9kZTsKKyAgICAgIG5vZGUtPm5vZGVfaWR4ID0gcmVfZGZhX2FkZF9ub2RlIChkZmEsIG5vZGUtPnRva2VuKTsKKyAgICAgIGlmIChCRSAobm9kZS0+bm9kZV9pZHggPT0gUkVHX01JU1NJTkcsIDApKQorICAgICAgICByZXR1cm4gUkVHX0VTUEFDRTsKKyAgICB9CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworLyogUGFzcyAyOiBjb21wdXRlIE5FWFQgb24gdGhlIHRyZWUuICBQcmVvcmRlciB2aXNpdC4gICovCitzdGF0aWMgcmVnX2VycmNvZGVfdAorY2FsY19uZXh0ICh2b2lkICpleHRyYSwgYmluX3RyZWVfdCAqbm9kZSkKK3sKKyAgc3dpdGNoIChub2RlLT50b2tlbi50eXBlKQorICAgIHsKKyAgICBjYXNlIE9QX0RVUF9BU1RFUklTSzoKKyAgICAgIG5vZGUtPmxlZnQtPm5leHQgPSBub2RlOworICAgICAgYnJlYWs7CisgICAgY2FzZSBDT05DQVQ6CisgICAgICBub2RlLT5sZWZ0LT5uZXh0ID0gbm9kZS0+cmlnaHQtPmZpcnN0OworICAgICAgbm9kZS0+cmlnaHQtPm5leHQgPSBub2RlLT5uZXh0OworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGlmIChub2RlLT5sZWZ0KQorCW5vZGUtPmxlZnQtPm5leHQgPSBub2RlLT5uZXh0OworICAgICAgaWYgKG5vZGUtPnJpZ2h0KQorICAgICAgICBub2RlLT5yaWdodC0+bmV4dCA9IG5vZGUtPm5leHQ7CisgICAgICBicmVhazsKKyAgICB9CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworLyogUGFzcyAzOiBsaW5rIGFsbCBERkEgbm9kZXMgdG8gdGhlaXIgTkVYVCBub2RlIChhbnkgb3JkZXIgd2lsbCBkbykuICAqLworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2xpbmtfbmZhX25vZGVzICh2b2lkICpleHRyYSwgYmluX3RyZWVfdCAqbm9kZSkKK3sKKyAgcmVfZGZhX3QgKmRmYSA9IChyZV9kZmFfdCAqKSBleHRyYTsKKyAgSWR4IGlkeCA9IG5vZGUtPm5vZGVfaWR4OworICByZWdfZXJyY29kZV90IGVyciA9IFJFR19OT0VSUk9SOworCisgIHN3aXRjaCAobm9kZS0+dG9rZW4udHlwZSkKKyAgICB7CisgICAgY2FzZSBDT05DQVQ6CisgICAgICBicmVhazsKKworICAgIGNhc2UgRU5EX09GX1JFOgorICAgICAgYXNzZXJ0IChub2RlLT5uZXh0ID09IE5VTEwpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9QX0RVUF9BU1RFUklTSzoKKyAgICBjYXNlIE9QX0FMVDoKKyAgICAgIHsKKwlJZHggbGVmdCwgcmlnaHQ7CisJZGZhLT5oYXNfcGx1cmFsX21hdGNoID0gMTsKKwlpZiAobm9kZS0+bGVmdCAhPSBOVUxMKQorCSAgbGVmdCA9IG5vZGUtPmxlZnQtPmZpcnN0LT5ub2RlX2lkeDsKKwllbHNlCisJICBsZWZ0ID0gbm9kZS0+bmV4dC0+bm9kZV9pZHg7CisJaWYgKG5vZGUtPnJpZ2h0ICE9IE5VTEwpCisJICByaWdodCA9IG5vZGUtPnJpZ2h0LT5maXJzdC0+bm9kZV9pZHg7CisJZWxzZQorCSAgcmlnaHQgPSBub2RlLT5uZXh0LT5ub2RlX2lkeDsKKwlhc3NlcnQgKFJFR19WQUxJRF9JTkRFWCAobGVmdCkpOworCWFzc2VydCAoUkVHX1ZBTElEX0lOREVYIChyaWdodCkpOworCWVyciA9IHJlX25vZGVfc2V0X2luaXRfMiAoZGZhLT5lZGVzdHMgKyBpZHgsIGxlZnQsIHJpZ2h0KTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBBTkNIT1I6CisgICAgY2FzZSBPUF9PUEVOX1NVQkVYUDoKKyAgICBjYXNlIE9QX0NMT1NFX1NVQkVYUDoKKyAgICAgIGVyciA9IHJlX25vZGVfc2V0X2luaXRfMSAoZGZhLT5lZGVzdHMgKyBpZHgsIG5vZGUtPm5leHQtPm5vZGVfaWR4KTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9CQUNLX1JFRjoKKyAgICAgIGRmYS0+bmV4dHNbaWR4XSA9IG5vZGUtPm5leHQtPm5vZGVfaWR4OworICAgICAgaWYgKG5vZGUtPnRva2VuLnR5cGUgPT0gT1BfQkFDS19SRUYpCisJcmVfbm9kZV9zZXRfaW5pdF8xIChkZmEtPmVkZXN0cyArIGlkeCwgZGZhLT5uZXh0c1tpZHhdKTsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIGFzc2VydCAoIUlTX0VQU0lMT05fTk9ERSAobm9kZS0+dG9rZW4udHlwZSkpOworICAgICAgZGZhLT5uZXh0c1tpZHhdID0gbm9kZS0+bmV4dC0+bm9kZV9pZHg7CisgICAgICBicmVhazsKKyAgICB9CisKKyAgcmV0dXJuIGVycjsKK30KKworLyogRHVwbGljYXRlIHRoZSBlcHNpbG9uIGNsb3N1cmUgb2YgdGhlIG5vZGUgUk9PVF9OT0RFLgorICAgTm90ZSB0aGF0IGR1cGxpY2F0ZWQgbm9kZXMgaGF2ZSBjb25zdHJhaW50IElOSVRfQ09OU1RSQUlOVCBpbiBhZGRpdGlvbgorICAgdG8gdGhlaXIgb3duIGNvbnN0cmFpbnQuICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK2R1cGxpY2F0ZV9ub2RlX2Nsb3N1cmUgKHJlX2RmYV90ICpkZmEsIElkeCB0b3Bfb3JnX25vZGUsIElkeCB0b3BfY2xvbmVfbm9kZSwKKwkJCUlkeCByb290X25vZGUsIHVuc2lnbmVkIGludCBpbml0X2NvbnN0cmFpbnQpCit7CisgIElkeCBvcmdfbm9kZSwgY2xvbmVfbm9kZTsKKyAgYm9vbCBvazsKKyAgdW5zaWduZWQgaW50IGNvbnN0cmFpbnQgPSBpbml0X2NvbnN0cmFpbnQ7CisgIGZvciAob3JnX25vZGUgPSB0b3Bfb3JnX25vZGUsIGNsb25lX25vZGUgPSB0b3BfY2xvbmVfbm9kZTs7KQorICAgIHsKKyAgICAgIElkeCBvcmdfZGVzdCwgY2xvbmVfZGVzdDsKKyAgICAgIGlmIChkZmEtPm5vZGVzW29yZ19ub2RlXS50eXBlID09IE9QX0JBQ0tfUkVGKQorCXsKKwkgIC8qIElmIHRoZSBiYWNrIHJlZmVyZW5jZSBlcHNpbG9uLXRyYW5zaXQsIGl0cyBkZXN0aW5hdGlvbiBtdXN0CisJICAgICBhbHNvIGhhdmUgdGhlIGNvbnN0cmFpbnQuICBUaGVuIGR1cGxpY2F0ZSB0aGUgZXBzaWxvbiBjbG9zdXJlCisJICAgICBvZiB0aGUgZGVzdGluYXRpb24gb2YgdGhlIGJhY2sgcmVmZXJlbmNlLCBhbmQgc3RvcmUgaXQgaW4KKwkgICAgIGVkZXN0cyBvZiB0aGUgYmFjayByZWZlcmVuY2UuICAqLworCSAgb3JnX2Rlc3QgPSBkZmEtPm5leHRzW29yZ19ub2RlXTsKKwkgIHJlX25vZGVfc2V0X2VtcHR5IChkZmEtPmVkZXN0cyArIGNsb25lX25vZGUpOworCSAgY2xvbmVfZGVzdCA9IGR1cGxpY2F0ZV9ub2RlIChkZmEsIG9yZ19kZXN0LCBjb25zdHJhaW50KTsKKwkgIGlmIChCRSAoY2xvbmVfZGVzdCA9PSBSRUdfTUlTU0lORywgMCkpCisJICAgIHJldHVybiBSRUdfRVNQQUNFOworCSAgZGZhLT5uZXh0c1tjbG9uZV9ub2RlXSA9IGRmYS0+bmV4dHNbb3JnX25vZGVdOworCSAgb2sgPSByZV9ub2RlX3NldF9pbnNlcnQgKGRmYS0+ZWRlc3RzICsgY2xvbmVfbm9kZSwgY2xvbmVfZGVzdCk7CisJICBpZiAoQkUgKCEgb2ssIDApKQorCSAgICByZXR1cm4gUkVHX0VTUEFDRTsKKwl9CisgICAgICBlbHNlIGlmIChkZmEtPmVkZXN0c1tvcmdfbm9kZV0ubmVsZW0gPT0gMCkKKwl7CisJICAvKiBJbiBjYXNlIG9mIHRoZSBub2RlIGNhbid0IGVwc2lsb24tdHJhbnNpdCwgZG9uJ3QgZHVwbGljYXRlIHRoZQorCSAgICAgZGVzdGluYXRpb24gYW5kIHN0b3JlIHRoZSBvcmlnaW5hbCBkZXN0aW5hdGlvbiBhcyB0aGUKKwkgICAgIGRlc3RpbmF0aW9uIG9mIHRoZSBub2RlLiAgKi8KKwkgIGRmYS0+bmV4dHNbY2xvbmVfbm9kZV0gPSBkZmEtPm5leHRzW29yZ19ub2RlXTsKKwkgIGJyZWFrOworCX0KKyAgICAgIGVsc2UgaWYgKGRmYS0+ZWRlc3RzW29yZ19ub2RlXS5uZWxlbSA9PSAxKQorCXsKKwkgIC8qIEluIGNhc2Ugb2YgdGhlIG5vZGUgY2FuIGVwc2lsb24tdHJhbnNpdCwgYW5kIGl0IGhhcyBvbmx5IG9uZQorCSAgICAgZGVzdGluYXRpb24uICAqLworCSAgb3JnX2Rlc3QgPSBkZmEtPmVkZXN0c1tvcmdfbm9kZV0uZWxlbXNbMF07CisJICByZV9ub2RlX3NldF9lbXB0eSAoZGZhLT5lZGVzdHMgKyBjbG9uZV9ub2RlKTsKKwkgIGlmIChkZmEtPm5vZGVzW29yZ19ub2RlXS50eXBlID09IEFOQ0hPUikKKwkgICAgeworCSAgICAgIC8qIEluIGNhc2Ugb2YgdGhlIG5vZGUgaGFzIGFub3RoZXIgY29uc3RyYWludCwgYXBwZW5kIGl0LiAgKi8KKwkgICAgICBpZiAob3JnX25vZGUgPT0gcm9vdF9ub2RlICYmIGNsb25lX25vZGUgIT0gb3JnX25vZGUpCisJCXsKKwkJICAvKiAuLi5idXQgaWYgdGhlIG5vZGUgaXMgcm9vdF9ub2RlIGl0c2VsZiwgaXQgbWVhbnMgdGhlCisJCSAgICAgZXBzaWxvbiBjbG9zdXJlIGhhdmUgYSBsb29wLCB0aGVuIHRpZSBpdCB0byB0aGUKKwkJICAgICBkZXN0aW5hdGlvbiBvZiB0aGUgcm9vdF9ub2RlLiAgKi8KKwkJICBvayA9IHJlX25vZGVfc2V0X2luc2VydCAoZGZhLT5lZGVzdHMgKyBjbG9uZV9ub2RlLCBvcmdfZGVzdCk7CisJCSAgaWYgKEJFICghIG9rLCAwKSkKKwkJICAgIHJldHVybiBSRUdfRVNQQUNFOworCQkgIGJyZWFrOworCQl9CisJICAgICAgY29uc3RyYWludCB8PSBkZmEtPm5vZGVzW29yZ19ub2RlXS5vcHIuY3R4X3R5cGU7CisJICAgIH0KKwkgIGNsb25lX2Rlc3QgPSBkdXBsaWNhdGVfbm9kZSAoZGZhLCBvcmdfZGVzdCwgY29uc3RyYWludCk7CisJICBpZiAoQkUgKGNsb25lX2Rlc3QgPT0gUkVHX01JU1NJTkcsIDApKQorCSAgICByZXR1cm4gUkVHX0VTUEFDRTsKKwkgIG9rID0gcmVfbm9kZV9zZXRfaW5zZXJ0IChkZmEtPmVkZXN0cyArIGNsb25lX25vZGUsIGNsb25lX2Rlc3QpOworCSAgaWYgKEJFICghIG9rLCAwKSkKKwkgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisJfQorICAgICAgZWxzZSAvKiBkZmEtPmVkZXN0c1tvcmdfbm9kZV0ubmVsZW0gPT0gMiAqLworCXsKKwkgIC8qIEluIGNhc2Ugb2YgdGhlIG5vZGUgY2FuIGVwc2lsb24tdHJhbnNpdCwgYW5kIGl0IGhhcyB0d28KKwkgICAgIGRlc3RpbmF0aW9ucy4gSW4gdGhlIGJpbl90cmVlX3QgYW5kIERGQSwgdGhhdCdzICd8JyBhbmQgJyonLiAgICovCisJICBvcmdfZGVzdCA9IGRmYS0+ZWRlc3RzW29yZ19ub2RlXS5lbGVtc1swXTsKKwkgIHJlX25vZGVfc2V0X2VtcHR5IChkZmEtPmVkZXN0cyArIGNsb25lX25vZGUpOworCSAgLyogU2VhcmNoIGZvciBhIGR1cGxpY2F0ZWQgbm9kZSB3aGljaCBzYXRpc2ZpZXMgdGhlIGNvbnN0cmFpbnQuICAqLworCSAgY2xvbmVfZGVzdCA9IHNlYXJjaF9kdXBsaWNhdGVkX25vZGUgKGRmYSwgb3JnX2Rlc3QsIGNvbnN0cmFpbnQpOworCSAgaWYgKGNsb25lX2Rlc3QgPT0gUkVHX01JU1NJTkcpCisJICAgIHsKKwkgICAgICAvKiBUaGVyZSBhcmUgbm8gc3VjaCBhIGR1cGxpY2F0ZWQgbm9kZSwgY3JlYXRlIGEgbmV3IG9uZS4gICovCisJICAgICAgcmVnX2VycmNvZGVfdCBlcnI7CisJICAgICAgY2xvbmVfZGVzdCA9IGR1cGxpY2F0ZV9ub2RlIChkZmEsIG9yZ19kZXN0LCBjb25zdHJhaW50KTsKKwkgICAgICBpZiAoQkUgKGNsb25lX2Rlc3QgPT0gUkVHX01JU1NJTkcsIDApKQorCQlyZXR1cm4gUkVHX0VTUEFDRTsKKwkgICAgICBvayA9IHJlX25vZGVfc2V0X2luc2VydCAoZGZhLT5lZGVzdHMgKyBjbG9uZV9ub2RlLCBjbG9uZV9kZXN0KTsKKwkgICAgICBpZiAoQkUgKCEgb2ssIDApKQorCQlyZXR1cm4gUkVHX0VTUEFDRTsKKwkgICAgICBlcnIgPSBkdXBsaWNhdGVfbm9kZV9jbG9zdXJlIChkZmEsIG9yZ19kZXN0LCBjbG9uZV9kZXN0LAorCQkJCQkgICAgcm9vdF9ub2RlLCBjb25zdHJhaW50KTsKKwkgICAgICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJCXJldHVybiBlcnI7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIC8qIFRoZXJlIGFyZSBhIGR1cGxpY2F0ZWQgbm9kZSB3aGljaCBzYXRpc2Z5IHRoZSBjb25zdHJhaW50LAorCQkgdXNlIGl0IHRvIGF2b2lkIGluZmluaXRlIGxvb3AuICAqLworCSAgICAgIG9rID0gcmVfbm9kZV9zZXRfaW5zZXJ0IChkZmEtPmVkZXN0cyArIGNsb25lX25vZGUsIGNsb25lX2Rlc3QpOworCSAgICAgIGlmIChCRSAoISBvaywgMCkpCisJCXJldHVybiBSRUdfRVNQQUNFOworCSAgICB9CisKKwkgIG9yZ19kZXN0ID0gZGZhLT5lZGVzdHNbb3JnX25vZGVdLmVsZW1zWzFdOworCSAgY2xvbmVfZGVzdCA9IGR1cGxpY2F0ZV9ub2RlIChkZmEsIG9yZ19kZXN0LCBjb25zdHJhaW50KTsKKwkgIGlmIChCRSAoY2xvbmVfZGVzdCA9PSBSRUdfTUlTU0lORywgMCkpCisJICAgIHJldHVybiBSRUdfRVNQQUNFOworCSAgb2sgPSByZV9ub2RlX3NldF9pbnNlcnQgKGRmYS0+ZWRlc3RzICsgY2xvbmVfbm9kZSwgY2xvbmVfZGVzdCk7CisJICBpZiAoQkUgKCEgb2ssIDApKQorCSAgICByZXR1cm4gUkVHX0VTUEFDRTsKKwl9CisgICAgICBvcmdfbm9kZSA9IG9yZ19kZXN0OworICAgICAgY2xvbmVfbm9kZSA9IGNsb25lX2Rlc3Q7CisgICAgfQorICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKy8qIFNlYXJjaCBmb3IgYSBub2RlIHdoaWNoIGlzIGR1cGxpY2F0ZWQgZnJvbSB0aGUgbm9kZSBPUkdfTk9ERSwgYW5kCisgICBzYXRpc2ZpZXMgdGhlIGNvbnN0cmFpbnQgQ09OU1RSQUlOVC4gICovCisKK3N0YXRpYyBJZHgKK3NlYXJjaF9kdXBsaWNhdGVkX25vZGUgKGNvbnN0IHJlX2RmYV90ICpkZmEsIElkeCBvcmdfbm9kZSwKKwkJCXVuc2lnbmVkIGludCBjb25zdHJhaW50KQoreworICBJZHggaWR4OworICBmb3IgKGlkeCA9IGRmYS0+bm9kZXNfbGVuIC0gMTsgZGZhLT5ub2Rlc1tpZHhdLmR1cGxpY2F0ZWQgJiYgaWR4ID4gMDsgLS1pZHgpCisgICAgeworICAgICAgaWYgKG9yZ19ub2RlID09IGRmYS0+b3JnX2luZGljZXNbaWR4XQorCSAgJiYgY29uc3RyYWludCA9PSBkZmEtPm5vZGVzW2lkeF0uY29uc3RyYWludCkKKwlyZXR1cm4gaWR4OyAvKiBGb3VuZC4gICovCisgICAgfQorICByZXR1cm4gUkVHX01JU1NJTkc7IC8qIE5vdCBmb3VuZC4gICovCit9CisKKy8qIER1cGxpY2F0ZSB0aGUgbm9kZSB3aG9zZSBpbmRleCBpcyBPUkdfSURYIGFuZCBzZXQgdGhlIGNvbnN0cmFpbnQgQ09OU1RSQUlOVC4KKyAgIFJldHVybiB0aGUgaW5kZXggb2YgdGhlIG5ldyBub2RlLCBvciBSRUdfTUlTU0lORyBpZiBpbnN1ZmZpY2llbnQgc3RvcmFnZSBpcworICAgYXZhaWxhYmxlLiAgKi8KKworc3RhdGljIElkeAorZHVwbGljYXRlX25vZGUgKHJlX2RmYV90ICpkZmEsIElkeCBvcmdfaWR4LCB1bnNpZ25lZCBpbnQgY29uc3RyYWludCkKK3sKKyAgSWR4IGR1cF9pZHggPSByZV9kZmFfYWRkX25vZGUgKGRmYSwgZGZhLT5ub2Rlc1tvcmdfaWR4XSk7CisgIGlmIChCRSAoZHVwX2lkeCAhPSBSRUdfTUlTU0lORywgMSkpCisgICAgeworICAgICAgZGZhLT5ub2Rlc1tkdXBfaWR4XS5jb25zdHJhaW50ID0gY29uc3RyYWludDsKKyAgICAgIGlmIChkZmEtPm5vZGVzW29yZ19pZHhdLnR5cGUgPT0gQU5DSE9SKQorCWRmYS0+bm9kZXNbZHVwX2lkeF0uY29uc3RyYWludCB8PSBkZmEtPm5vZGVzW29yZ19pZHhdLm9wci5jdHhfdHlwZTsKKyAgICAgIGRmYS0+bm9kZXNbZHVwX2lkeF0uZHVwbGljYXRlZCA9IDE7CisKKyAgICAgIC8qIFN0b3JlIHRoZSBpbmRleCBvZiB0aGUgb3JpZ2luYWwgbm9kZS4gICovCisgICAgICBkZmEtPm9yZ19pbmRpY2VzW2R1cF9pZHhdID0gb3JnX2lkeDsKKyAgICB9CisgIHJldHVybiBkdXBfaWR4OworfQorCitzdGF0aWMgcmVnX2VycmNvZGVfdAorY2FsY19pbnZlY2xvc3VyZSAocmVfZGZhX3QgKmRmYSkKK3sKKyAgSWR4IHNyYywgaWR4OworICBib29sIG9rOworICBmb3IgKGlkeCA9IDA7IGlkeCA8IGRmYS0+bm9kZXNfbGVuOyArK2lkeCkKKyAgICByZV9ub2RlX3NldF9pbml0X2VtcHR5IChkZmEtPmludmVjbG9zdXJlcyArIGlkeCk7CisKKyAgZm9yIChzcmMgPSAwOyBzcmMgPCBkZmEtPm5vZGVzX2xlbjsgKytzcmMpCisgICAgeworICAgICAgSWR4ICplbGVtcyA9IGRmYS0+ZWNsb3N1cmVzW3NyY10uZWxlbXM7CisgICAgICBmb3IgKGlkeCA9IDA7IGlkeCA8IGRmYS0+ZWNsb3N1cmVzW3NyY10ubmVsZW07ICsraWR4KQorCXsKKwkgIG9rID0gcmVfbm9kZV9zZXRfaW5zZXJ0X2xhc3QgKGRmYS0+aW52ZWNsb3N1cmVzICsgZWxlbXNbaWR4XSwgc3JjKTsKKwkgIGlmIChCRSAoISBvaywgMCkpCisJICAgIHJldHVybiBSRUdfRVNQQUNFOworCX0KKyAgICB9CisKKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCisvKiBDYWxjdWxhdGUgImVjbG9zdXJlIiBmb3IgYWxsIHRoZSBub2RlIGluIERGQS4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitjYWxjX2VjbG9zdXJlIChyZV9kZmFfdCAqZGZhKQoreworICBJZHggbm9kZV9pZHg7CisgIGJvb2wgaW5jb21wbGV0ZTsKKyNpZmRlZiBERUJVRworICBhc3NlcnQgKGRmYS0+bm9kZXNfbGVuID4gMCk7CisjZW5kaWYKKyAgaW5jb21wbGV0ZSA9IGZhbHNlOworICAvKiBGb3IgZWFjaCBub2RlcywgY2FsY3VsYXRlIGVwc2lsb24gY2xvc3VyZS4gICovCisgIGZvciAobm9kZV9pZHggPSAwOyA7ICsrbm9kZV9pZHgpCisgICAgeworICAgICAgcmVnX2VycmNvZGVfdCBlcnI7CisgICAgICByZV9ub2RlX3NldCBlY2xvc3VyZV9lbGVtOworICAgICAgaWYgKG5vZGVfaWR4ID09IGRmYS0+bm9kZXNfbGVuKQorCXsKKwkgIGlmICghaW5jb21wbGV0ZSkKKwkgICAgYnJlYWs7CisJICBpbmNvbXBsZXRlID0gZmFsc2U7CisJICBub2RlX2lkeCA9IDA7CisJfQorCisjaWZkZWYgREVCVUcKKyAgICAgIGFzc2VydCAoZGZhLT5lY2xvc3VyZXNbbm9kZV9pZHhdLm5lbGVtICE9IFJFR19NSVNTSU5HKTsKKyNlbmRpZgorCisgICAgICAvKiBJZiB3ZSBoYXZlIGFscmVhZHkgY2FsY3VsYXRlZCwgc2tpcCBpdC4gICovCisgICAgICBpZiAoZGZhLT5lY2xvc3VyZXNbbm9kZV9pZHhdLm5lbGVtICE9IDApCisJY29udGludWU7CisgICAgICAvKiBDYWxjdWxhdGUgZXBzaWxvbiBjbG9zdXJlIG9mIGBub2RlX2lkeCcuICAqLworICAgICAgZXJyID0gY2FsY19lY2xvc3VyZV9pdGVyICgmZWNsb3N1cmVfZWxlbSwgZGZhLCBub2RlX2lkeCwgdHJ1ZSk7CisgICAgICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJcmV0dXJuIGVycjsKKworICAgICAgaWYgKGRmYS0+ZWNsb3N1cmVzW25vZGVfaWR4XS5uZWxlbSA9PSAwKQorCXsKKwkgIGluY29tcGxldGUgPSB0cnVlOworCSAgcmVfbm9kZV9zZXRfZnJlZSAoJmVjbG9zdXJlX2VsZW0pOworCX0KKyAgICB9CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworLyogQ2FsY3VsYXRlIGVwc2lsb24gY2xvc3VyZSBvZiBOT0RFLiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2NhbGNfZWNsb3N1cmVfaXRlciAocmVfbm9kZV9zZXQgKm5ld19zZXQsIHJlX2RmYV90ICpkZmEsIElkeCBub2RlLCBib29sIHJvb3QpCit7CisgIHJlZ19lcnJjb2RlX3QgZXJyOworICB1bnNpZ25lZCBpbnQgY29uc3RyYWludDsKKyAgSWR4IGk7CisgIGJvb2wgaW5jb21wbGV0ZTsKKyAgYm9vbCBvazsKKyAgcmVfbm9kZV9zZXQgZWNsb3N1cmU7CisgIGluY29tcGxldGUgPSBmYWxzZTsKKyAgZXJyID0gcmVfbm9kZV9zZXRfYWxsb2MgKCZlY2xvc3VyZSwgZGZhLT5lZGVzdHNbbm9kZV0ubmVsZW0gKyAxKTsKKyAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorICAgIHJldHVybiBlcnI7CisKKyAgLyogVGhpcyBpbmRpY2F0ZXMgdGhhdCB3ZSBhcmUgY2FsY3VsYXRpbmcgdGhpcyBub2RlIG5vdy4KKyAgICAgV2UgcmVmZXJlbmNlIHRoaXMgdmFsdWUgdG8gYXZvaWQgaW5maW5pdGUgbG9vcC4gICovCisgIGRmYS0+ZWNsb3N1cmVzW25vZGVdLm5lbGVtID0gUkVHX01JU1NJTkc7CisKKyAgY29uc3RyYWludCA9ICgoZGZhLT5ub2Rlc1tub2RlXS50eXBlID09IEFOQ0hPUikKKwkJPyBkZmEtPm5vZGVzW25vZGVdLm9wci5jdHhfdHlwZSA6IDApOworICAvKiBJZiB0aGUgY3VycmVudCBub2RlIGhhcyBjb25zdHJhaW50cywgZHVwbGljYXRlIGFsbCBub2Rlcy4KKyAgICAgU2luY2UgdGhleSBtdXN0IGluaGVyaXQgdGhlIGNvbnN0cmFpbnRzLiAgKi8KKyAgaWYgKGNvbnN0cmFpbnQKKyAgICAgICYmIGRmYS0+ZWRlc3RzW25vZGVdLm5lbGVtCisgICAgICAmJiAhZGZhLT5ub2Rlc1tkZmEtPmVkZXN0c1tub2RlXS5lbGVtc1swXV0uZHVwbGljYXRlZCkKKyAgICB7CisgICAgICBlcnIgPSBkdXBsaWNhdGVfbm9kZV9jbG9zdXJlIChkZmEsIG5vZGUsIG5vZGUsIG5vZGUsIGNvbnN0cmFpbnQpOworICAgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCXJldHVybiBlcnI7CisgICAgfQorCisgIC8qIEV4cGFuZCBlYWNoIGVwc2lsb24gZGVzdGluYXRpb24gbm9kZXMuICAqLworICBpZiAoSVNfRVBTSUxPTl9OT0RFKGRmYS0+bm9kZXNbbm9kZV0udHlwZSkpCisgICAgZm9yIChpID0gMDsgaSA8IGRmYS0+ZWRlc3RzW25vZGVdLm5lbGVtOyArK2kpCisgICAgICB7CisJcmVfbm9kZV9zZXQgZWNsb3N1cmVfZWxlbTsKKwlJZHggZWRlc3QgPSBkZmEtPmVkZXN0c1tub2RlXS5lbGVtc1tpXTsKKwkvKiBJZiBjYWxjdWxhdGluZyB0aGUgZXBzaWxvbiBjbG9zdXJlIG9mIGBlZGVzdCcgaXMgaW4gcHJvZ3Jlc3MsCisJICAgcmV0dXJuIGludGVybWVkaWF0ZSByZXN1bHQuICAqLworCWlmIChkZmEtPmVjbG9zdXJlc1tlZGVzdF0ubmVsZW0gPT0gUkVHX01JU1NJTkcpCisJICB7CisJICAgIGluY29tcGxldGUgPSB0cnVlOworCSAgICBjb250aW51ZTsKKwkgIH0KKwkvKiBJZiB3ZSBoYXZlbid0IGNhbGN1bGF0ZWQgdGhlIGVwc2lsb24gY2xvc3VyZSBvZiBgZWRlc3QnIHlldCwKKwkgICBjYWxjdWxhdGUgbm93LiBPdGhlcndpc2UgdXNlIGNhbGN1bGF0ZWQgZXBzaWxvbiBjbG9zdXJlLiAgKi8KKwlpZiAoZGZhLT5lY2xvc3VyZXNbZWRlc3RdLm5lbGVtID09IDApCisJICB7CisJICAgIGVyciA9IGNhbGNfZWNsb3N1cmVfaXRlciAoJmVjbG9zdXJlX2VsZW0sIGRmYSwgZWRlc3QsIGZhbHNlKTsKKwkgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCSAgICAgIHJldHVybiBlcnI7CisJICB9CisJZWxzZQorCSAgZWNsb3N1cmVfZWxlbSA9IGRmYS0+ZWNsb3N1cmVzW2VkZXN0XTsKKwkvKiBNZXJnZSB0aGUgZXBzaWxvbiBjbG9zdXJlIG9mIGBlZGVzdCcuICAqLworCXJlX25vZGVfc2V0X21lcmdlICgmZWNsb3N1cmUsICZlY2xvc3VyZV9lbGVtKTsKKwkvKiBJZiB0aGUgZXBzaWxvbiBjbG9zdXJlIG9mIGBlZGVzdCcgaXMgaW5jb21wbGV0ZSwKKwkgICB0aGUgZXBzaWxvbiBjbG9zdXJlIG9mIHRoaXMgbm9kZSBpcyBhbHNvIGluY29tcGxldGUuICAqLworCWlmIChkZmEtPmVjbG9zdXJlc1tlZGVzdF0ubmVsZW0gPT0gMCkKKwkgIHsKKwkgICAgaW5jb21wbGV0ZSA9IHRydWU7CisJICAgIHJlX25vZGVfc2V0X2ZyZWUgKCZlY2xvc3VyZV9lbGVtKTsKKwkgIH0KKyAgICAgIH0KKworICAvKiBFcHNpbG9uIGNsb3N1cmVzIGluY2x1ZGUgaXRzZWxmLiAgKi8KKyAgb2sgPSByZV9ub2RlX3NldF9pbnNlcnQgKCZlY2xvc3VyZSwgbm9kZSk7CisgIGlmIChCRSAoISBvaywgMCkpCisgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisgIGlmIChpbmNvbXBsZXRlICYmICFyb290KQorICAgIGRmYS0+ZWNsb3N1cmVzW25vZGVdLm5lbGVtID0gMDsKKyAgZWxzZQorICAgIGRmYS0+ZWNsb3N1cmVzW25vZGVdID0gZWNsb3N1cmU7CisgICpuZXdfc2V0ID0gZWNsb3N1cmU7CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKwwKKy8qIEZ1bmN0aW9ucyBmb3IgdG9rZW4gd2hpY2ggYXJlIHVzZWQgaW4gdGhlIHBhcnNlci4gICovCisKKy8qIEZldGNoIGEgdG9rZW4gZnJvbSBJTlBVVC4KKyAgIFdlIG11c3Qgbm90IHVzZSB0aGlzIGZ1bmN0aW9uIGluc2lkZSBicmFja2V0IGV4cHJlc3Npb25zLiAgKi8KKworc3RhdGljIHZvaWQKK2ludGVybmFsX2Z1bmN0aW9uCitmZXRjaF90b2tlbiAocmVfdG9rZW5fdCAqcmVzdWx0LCByZV9zdHJpbmdfdCAqaW5wdXQsIHJlZ19zeW50YXhfdCBzeW50YXgpCit7CisgIHJlX3N0cmluZ19za2lwX2J5dGVzIChpbnB1dCwgcGVla190b2tlbiAocmVzdWx0LCBpbnB1dCwgc3ludGF4KSk7Cit9CisKKy8qIFBlZWsgYSB0b2tlbiBmcm9tIElOUFVULCBhbmQgcmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIHRva2VuLgorICAgV2UgbXVzdCBub3QgdXNlIHRoaXMgZnVuY3Rpb24gaW5zaWRlIGJyYWNrZXQgZXhwcmVzc2lvbnMuICAqLworCitzdGF0aWMgaW50CitpbnRlcm5hbF9mdW5jdGlvbgorcGVla190b2tlbiAocmVfdG9rZW5fdCAqdG9rZW4sIHJlX3N0cmluZ190ICppbnB1dCwgcmVnX3N5bnRheF90IHN5bnRheCkKK3sKKyAgdW5zaWduZWQgY2hhciBjOworCisgIGlmIChyZV9zdHJpbmdfZW9pIChpbnB1dCkpCisgICAgeworICAgICAgdG9rZW4tPnR5cGUgPSBFTkRfT0ZfUkU7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgYyA9IHJlX3N0cmluZ19wZWVrX2J5dGUgKGlucHV0LCAwKTsKKyAgdG9rZW4tPm9wci5jID0gYzsKKworICB0b2tlbi0+d29yZF9jaGFyID0gMDsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICB0b2tlbi0+bWJfcGFydGlhbCA9IDA7CisgIGlmIChpbnB1dC0+bWJfY3VyX21heCA+IDEgJiYKKyAgICAgICFyZV9zdHJpbmdfZmlyc3RfYnl0ZSAoaW5wdXQsIHJlX3N0cmluZ19jdXJfaWR4IChpbnB1dCkpKQorICAgIHsKKyAgICAgIHRva2VuLT50eXBlID0gQ0hBUkFDVEVSOworICAgICAgdG9rZW4tPm1iX3BhcnRpYWwgPSAxOworICAgICAgcmV0dXJuIDE7CisgICAgfQorI2VuZGlmCisgIGlmIChjID09ICdcXCcpCisgICAgeworICAgICAgdW5zaWduZWQgY2hhciBjMjsKKyAgICAgIGlmIChyZV9zdHJpbmdfY3VyX2lkeCAoaW5wdXQpICsgMSA+PSByZV9zdHJpbmdfbGVuZ3RoIChpbnB1dCkpCisJeworCSAgdG9rZW4tPnR5cGUgPSBCQUNLX1NMQVNIOworCSAgcmV0dXJuIDE7CisJfQorCisgICAgICBjMiA9IHJlX3N0cmluZ19wZWVrX2J5dGVfY2FzZSAoaW5wdXQsIDEpOworICAgICAgdG9rZW4tPm9wci5jID0gYzI7CisgICAgICB0b2tlbi0+dHlwZSA9IENIQVJBQ1RFUjsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAgICAgaWYgKGlucHV0LT5tYl9jdXJfbWF4ID4gMSkKKwl7CisJICB3aW50X3Qgd2MgPSByZV9zdHJpbmdfd2NoYXJfYXQgKGlucHV0LAorCQkJCQkgIHJlX3N0cmluZ19jdXJfaWR4IChpbnB1dCkgKyAxKTsKKwkgIHRva2VuLT53b3JkX2NoYXIgPSBJU19XSURFX1dPUkRfQ0hBUiAod2MpICE9IDA7CisJfQorICAgICAgZWxzZQorI2VuZGlmCisJdG9rZW4tPndvcmRfY2hhciA9IElTX1dPUkRfQ0hBUiAoYzIpICE9IDA7CisKKyAgICAgIHN3aXRjaCAoYzIpCisJeworCWNhc2UgJ3wnOgorCSAgaWYgKCEoc3ludGF4ICYgUkVfTElNSVRFRF9PUFMpICYmICEoc3ludGF4ICYgUkVfTk9fQktfVkJBUikpCisJICAgIHRva2VuLT50eXBlID0gT1BfQUxUOworCSAgYnJlYWs7CisJY2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6IGNhc2UgJzUnOgorCWNhc2UgJzYnOiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzknOgorCSAgaWYgKCEoc3ludGF4ICYgUkVfTk9fQktfUkVGUykpCisJICAgIHsKKwkgICAgICB0b2tlbi0+dHlwZSA9IE9QX0JBQ0tfUkVGOworCSAgICAgIHRva2VuLT5vcHIuaWR4ID0gYzIgLSAnMSc7CisJICAgIH0KKwkgIGJyZWFrOworCWNhc2UgJzwnOgorCSAgaWYgKCEoc3ludGF4ICYgUkVfTk9fR05VX09QUykpCisJICAgIHsKKwkgICAgICB0b2tlbi0+dHlwZSA9IEFOQ0hPUjsKKwkgICAgICB0b2tlbi0+b3ByLmN0eF90eXBlID0gV09SRF9GSVJTVDsKKwkgICAgfQorCSAgYnJlYWs7CisJY2FzZSAnPic6CisJICBpZiAoIShzeW50YXggJiBSRV9OT19HTlVfT1BTKSkKKwkgICAgeworCSAgICAgIHRva2VuLT50eXBlID0gQU5DSE9SOworCSAgICAgIHRva2VuLT5vcHIuY3R4X3R5cGUgPSBXT1JEX0xBU1Q7CisJICAgIH0KKwkgIGJyZWFrOworCWNhc2UgJ2InOgorCSAgaWYgKCEoc3ludGF4ICYgUkVfTk9fR05VX09QUykpCisJICAgIHsKKwkgICAgICB0b2tlbi0+dHlwZSA9IEFOQ0hPUjsKKwkgICAgICB0b2tlbi0+b3ByLmN0eF90eXBlID0gV09SRF9ERUxJTTsKKwkgICAgfQorCSAgYnJlYWs7CisJY2FzZSAnQic6CisJICBpZiAoIShzeW50YXggJiBSRV9OT19HTlVfT1BTKSkKKwkgICAgeworCSAgICAgIHRva2VuLT50eXBlID0gQU5DSE9SOworCSAgICAgIHRva2VuLT5vcHIuY3R4X3R5cGUgPSBOT1RfV09SRF9ERUxJTTsKKwkgICAgfQorCSAgYnJlYWs7CisJY2FzZSAndyc6CisJICBpZiAoIShzeW50YXggJiBSRV9OT19HTlVfT1BTKSkKKwkgICAgdG9rZW4tPnR5cGUgPSBPUF9XT1JEOworCSAgYnJlYWs7CisJY2FzZSAnVyc6CisJICBpZiAoIShzeW50YXggJiBSRV9OT19HTlVfT1BTKSkKKwkgICAgdG9rZW4tPnR5cGUgPSBPUF9OT1RXT1JEOworCSAgYnJlYWs7CisJY2FzZSAncyc6CisJICBpZiAoIShzeW50YXggJiBSRV9OT19HTlVfT1BTKSkKKwkgICAgdG9rZW4tPnR5cGUgPSBPUF9TUEFDRTsKKwkgIGJyZWFrOworCWNhc2UgJ1MnOgorCSAgaWYgKCEoc3ludGF4ICYgUkVfTk9fR05VX09QUykpCisJICAgIHRva2VuLT50eXBlID0gT1BfTk9UU1BBQ0U7CisJICBicmVhazsKKwljYXNlICdgJzoKKwkgIGlmICghKHN5bnRheCAmIFJFX05PX0dOVV9PUFMpKQorCSAgICB7CisJICAgICAgdG9rZW4tPnR5cGUgPSBBTkNIT1I7CisJICAgICAgdG9rZW4tPm9wci5jdHhfdHlwZSA9IEJVRl9GSVJTVDsKKwkgICAgfQorCSAgYnJlYWs7CisJY2FzZSAnXCcnOgorCSAgaWYgKCEoc3ludGF4ICYgUkVfTk9fR05VX09QUykpCisJICAgIHsKKwkgICAgICB0b2tlbi0+dHlwZSA9IEFOQ0hPUjsKKwkgICAgICB0b2tlbi0+b3ByLmN0eF90eXBlID0gQlVGX0xBU1Q7CisJICAgIH0KKwkgIGJyZWFrOworCWNhc2UgJygnOgorCSAgaWYgKCEoc3ludGF4ICYgUkVfTk9fQktfUEFSRU5TKSkKKwkgICAgdG9rZW4tPnR5cGUgPSBPUF9PUEVOX1NVQkVYUDsKKwkgIGJyZWFrOworCWNhc2UgJyknOgorCSAgaWYgKCEoc3ludGF4ICYgUkVfTk9fQktfUEFSRU5TKSkKKwkgICAgdG9rZW4tPnR5cGUgPSBPUF9DTE9TRV9TVUJFWFA7CisJICBicmVhazsKKwljYXNlICcrJzoKKwkgIGlmICghKHN5bnRheCAmIFJFX0xJTUlURURfT1BTKSAmJiAoc3ludGF4ICYgUkVfQktfUExVU19RTSkpCisJICAgIHRva2VuLT50eXBlID0gT1BfRFVQX1BMVVM7CisJICBicmVhazsKKwljYXNlICc/JzoKKwkgIGlmICghKHN5bnRheCAmIFJFX0xJTUlURURfT1BTKSAmJiAoc3ludGF4ICYgUkVfQktfUExVU19RTSkpCisJICAgIHRva2VuLT50eXBlID0gT1BfRFVQX1FVRVNUSU9OOworCSAgYnJlYWs7CisJY2FzZSAneyc6CisJICBpZiAoKHN5bnRheCAmIFJFX0lOVEVSVkFMUykgJiYgKCEoc3ludGF4ICYgUkVfTk9fQktfQlJBQ0VTKSkpCisJICAgIHRva2VuLT50eXBlID0gT1BfT1BFTl9EVVBfTlVNOworCSAgYnJlYWs7CisJY2FzZSAnfSc6CisJICBpZiAoKHN5bnRheCAmIFJFX0lOVEVSVkFMUykgJiYgKCEoc3ludGF4ICYgUkVfTk9fQktfQlJBQ0VTKSkpCisJICAgIHRva2VuLT50eXBlID0gT1BfQ0xPU0VfRFVQX05VTTsKKwkgIGJyZWFrOworCWRlZmF1bHQ6CisJICBicmVhazsKKwl9CisgICAgICByZXR1cm4gMjsKKyAgICB9CisKKyAgdG9rZW4tPnR5cGUgPSBDSEFSQUNURVI7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgaWYgKGlucHV0LT5tYl9jdXJfbWF4ID4gMSkKKyAgICB7CisgICAgICB3aW50X3Qgd2MgPSByZV9zdHJpbmdfd2NoYXJfYXQgKGlucHV0LCByZV9zdHJpbmdfY3VyX2lkeCAoaW5wdXQpKTsKKyAgICAgIHRva2VuLT53b3JkX2NoYXIgPSBJU19XSURFX1dPUkRfQ0hBUiAod2MpICE9IDA7CisgICAgfQorICBlbHNlCisjZW5kaWYKKyAgICB0b2tlbi0+d29yZF9jaGFyID0gSVNfV09SRF9DSEFSICh0b2tlbi0+b3ByLmMpOworCisgIHN3aXRjaCAoYykKKyAgICB7CisgICAgY2FzZSAnXG4nOgorICAgICAgaWYgKHN5bnRheCAmIFJFX05FV0xJTkVfQUxUKQorCXRva2VuLT50eXBlID0gT1BfQUxUOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnfCc6CisgICAgICBpZiAoIShzeW50YXggJiBSRV9MSU1JVEVEX09QUykgJiYgKHN5bnRheCAmIFJFX05PX0JLX1ZCQVIpKQorCXRva2VuLT50eXBlID0gT1BfQUxUOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnKic6CisgICAgICB0b2tlbi0+dHlwZSA9IE9QX0RVUF9BU1RFUklTSzsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJysnOgorICAgICAgaWYgKCEoc3ludGF4ICYgUkVfTElNSVRFRF9PUFMpICYmICEoc3ludGF4ICYgUkVfQktfUExVU19RTSkpCisJdG9rZW4tPnR5cGUgPSBPUF9EVVBfUExVUzsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJz8nOgorICAgICAgaWYgKCEoc3ludGF4ICYgUkVfTElNSVRFRF9PUFMpICYmICEoc3ludGF4ICYgUkVfQktfUExVU19RTSkpCisJdG9rZW4tPnR5cGUgPSBPUF9EVVBfUVVFU1RJT047CisgICAgICBicmVhazsKKyAgICBjYXNlICd7JzoKKyAgICAgIGlmICgoc3ludGF4ICYgUkVfSU5URVJWQUxTKSAmJiAoc3ludGF4ICYgUkVfTk9fQktfQlJBQ0VTKSkKKwl0b2tlbi0+dHlwZSA9IE9QX09QRU5fRFVQX05VTTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ30nOgorICAgICAgaWYgKChzeW50YXggJiBSRV9JTlRFUlZBTFMpICYmIChzeW50YXggJiBSRV9OT19CS19CUkFDRVMpKQorCXRva2VuLT50eXBlID0gT1BfQ0xPU0VfRFVQX05VTTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJygnOgorICAgICAgaWYgKHN5bnRheCAmIFJFX05PX0JLX1BBUkVOUykKKwl0b2tlbi0+dHlwZSA9IE9QX09QRU5fU1VCRVhQOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnKSc6CisgICAgICBpZiAoc3ludGF4ICYgUkVfTk9fQktfUEFSRU5TKQorCXRva2VuLT50eXBlID0gT1BfQ0xPU0VfU1VCRVhQOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnWyc6CisgICAgICB0b2tlbi0+dHlwZSA9IE9QX09QRU5fQlJBQ0tFVDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJy4nOgorICAgICAgdG9rZW4tPnR5cGUgPSBPUF9QRVJJT0Q7CisgICAgICBicmVhazsKKyAgICBjYXNlICdeJzoKKyAgICAgIGlmICghKHN5bnRheCAmIChSRV9DT05URVhUX0lOREVQX0FOQ0hPUlMgfCBSRV9DQVJFVF9BTkNIT1JTX0hFUkUpKSAmJgorCSAgcmVfc3RyaW5nX2N1cl9pZHggKGlucHV0KSAhPSAwKQorCXsKKwkgIGNoYXIgcHJldiA9IHJlX3N0cmluZ19wZWVrX2J5dGUgKGlucHV0LCAtMSk7CisJICBpZiAoIShzeW50YXggJiBSRV9ORVdMSU5FX0FMVCkgfHwgcHJldiAhPSAnXG4nKQorCSAgICBicmVhazsKKwl9CisgICAgICB0b2tlbi0+dHlwZSA9IEFOQ0hPUjsKKyAgICAgIHRva2VuLT5vcHIuY3R4X3R5cGUgPSBMSU5FX0ZJUlNUOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnJCc6CisgICAgICBpZiAoIShzeW50YXggJiBSRV9DT05URVhUX0lOREVQX0FOQ0hPUlMpICYmCisJICByZV9zdHJpbmdfY3VyX2lkeCAoaW5wdXQpICsgMSAhPSByZV9zdHJpbmdfbGVuZ3RoIChpbnB1dCkpCisJeworCSAgcmVfdG9rZW5fdCBuZXh0OworCSAgcmVfc3RyaW5nX3NraXBfYnl0ZXMgKGlucHV0LCAxKTsKKwkgIHBlZWtfdG9rZW4gKCZuZXh0LCBpbnB1dCwgc3ludGF4KTsKKwkgIHJlX3N0cmluZ19za2lwX2J5dGVzIChpbnB1dCwgLTEpOworCSAgaWYgKG5leHQudHlwZSAhPSBPUF9BTFQgJiYgbmV4dC50eXBlICE9IE9QX0NMT1NFX1NVQkVYUCkKKwkgICAgYnJlYWs7CisJfQorICAgICAgdG9rZW4tPnR5cGUgPSBBTkNIT1I7CisgICAgICB0b2tlbi0+b3ByLmN0eF90eXBlID0gTElORV9MQVNUOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICAgIH0KKyAgcmV0dXJuIDE7Cit9CisKKy8qIFBlZWsgYSB0b2tlbiBmcm9tIElOUFVULCBhbmQgcmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIHRva2VuLgorICAgV2UgbXVzdCBub3QgdXNlIHRoaXMgZnVuY3Rpb24gb3V0IG9mIGJyYWNrZXQgZXhwcmVzc2lvbnMuICAqLworCitzdGF0aWMgaW50CitpbnRlcm5hbF9mdW5jdGlvbgorcGVla190b2tlbl9icmFja2V0IChyZV90b2tlbl90ICp0b2tlbiwgcmVfc3RyaW5nX3QgKmlucHV0LCByZWdfc3ludGF4X3Qgc3ludGF4KQoreworICB1bnNpZ25lZCBjaGFyIGM7CisgIGlmIChyZV9zdHJpbmdfZW9pIChpbnB1dCkpCisgICAgeworICAgICAgdG9rZW4tPnR5cGUgPSBFTkRfT0ZfUkU7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIGMgPSByZV9zdHJpbmdfcGVla19ieXRlIChpbnB1dCwgMCk7CisgIHRva2VuLT5vcHIuYyA9IGM7CisKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICBpZiAoaW5wdXQtPm1iX2N1cl9tYXggPiAxICYmCisgICAgICAhcmVfc3RyaW5nX2ZpcnN0X2J5dGUgKGlucHV0LCByZV9zdHJpbmdfY3VyX2lkeCAoaW5wdXQpKSkKKyAgICB7CisgICAgICB0b2tlbi0+dHlwZSA9IENIQVJBQ1RFUjsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworCisgIGlmIChjID09ICdcXCcgJiYgKHN5bnRheCAmIFJFX0JBQ0tTTEFTSF9FU0NBUEVfSU5fTElTVFMpCisgICAgICAmJiByZV9zdHJpbmdfY3VyX2lkeCAoaW5wdXQpICsgMSA8IHJlX3N0cmluZ19sZW5ndGggKGlucHV0KSkKKyAgICB7CisgICAgICAvKiBJbiB0aGlzIGNhc2UsICdcJyBlc2NhcGUgYSBjaGFyYWN0ZXIuICAqLworICAgICAgdW5zaWduZWQgY2hhciBjMjsKKyAgICAgIHJlX3N0cmluZ19za2lwX2J5dGVzIChpbnB1dCwgMSk7CisgICAgICBjMiA9IHJlX3N0cmluZ19wZWVrX2J5dGUgKGlucHV0LCAwKTsKKyAgICAgIHRva2VuLT5vcHIuYyA9IGMyOworICAgICAgdG9rZW4tPnR5cGUgPSBDSEFSQUNURVI7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIGlmIChjID09ICdbJykgLyogJ1snIGlzIGEgc3BlY2lhbCBjaGFyIGluIGEgYnJhY2tldCBleHBzLiAgKi8KKyAgICB7CisgICAgICB1bnNpZ25lZCBjaGFyIGMyOworICAgICAgaW50IHRva2VuX2xlbjsKKyAgICAgIGlmIChyZV9zdHJpbmdfY3VyX2lkeCAoaW5wdXQpICsgMSA8IHJlX3N0cmluZ19sZW5ndGggKGlucHV0KSkKKwljMiA9IHJlX3N0cmluZ19wZWVrX2J5dGUgKGlucHV0LCAxKTsKKyAgICAgIGVsc2UKKwljMiA9IDA7CisgICAgICB0b2tlbi0+b3ByLmMgPSBjMjsKKyAgICAgIHRva2VuX2xlbiA9IDI7CisgICAgICBzd2l0Y2ggKGMyKQorCXsKKwljYXNlICcuJzoKKwkgIHRva2VuLT50eXBlID0gT1BfT1BFTl9DT0xMX0VMRU07CisJICBicmVhazsKKwljYXNlICc9JzoKKwkgIHRva2VuLT50eXBlID0gT1BfT1BFTl9FUVVJVl9DTEFTUzsKKwkgIGJyZWFrOworCWNhc2UgJzonOgorCSAgaWYgKHN5bnRheCAmIFJFX0NIQVJfQ0xBU1NFUykKKwkgICAgeworCSAgICAgIHRva2VuLT50eXBlID0gT1BfT1BFTl9DSEFSX0NMQVNTOworCSAgICAgIGJyZWFrOworCSAgICB9CisJICAvKiBlbHNlIGZhbGwgdGhyb3VnaC4gICovCisJZGVmYXVsdDoKKwkgIHRva2VuLT50eXBlID0gQ0hBUkFDVEVSOworCSAgdG9rZW4tPm9wci5jID0gYzsKKwkgIHRva2VuX2xlbiA9IDE7CisJICBicmVhazsKKwl9CisgICAgICByZXR1cm4gdG9rZW5fbGVuOworICAgIH0KKyAgc3dpdGNoIChjKQorICAgIHsKKyAgICBjYXNlICctJzoKKyAgICAgIHRva2VuLT50eXBlID0gT1BfQ0hBUlNFVF9SQU5HRTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ10nOgorICAgICAgdG9rZW4tPnR5cGUgPSBPUF9DTE9TRV9CUkFDS0VUOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnXic6CisgICAgICB0b2tlbi0+dHlwZSA9IE9QX05PTl9NQVRDSF9MSVNUOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIHRva2VuLT50eXBlID0gQ0hBUkFDVEVSOworICAgIH0KKyAgcmV0dXJuIDE7Cit9CisMCisvKiBGdW5jdGlvbnMgZm9yIHBhcnNlci4gICovCisKKy8qIEVudHJ5IHBvaW50IG9mIHRoZSBwYXJzZXIuCisgICBQYXJzZSB0aGUgcmVndWxhciBleHByZXNzaW9uIFJFR0VYUCBhbmQgcmV0dXJuIHRoZSBzdHJ1Y3R1cmUgdHJlZS4KKyAgIElmIGFuIGVycm9yIGlzIG9jY3VyZWQsIEVSUiBpcyBzZXQgYnkgZXJyb3IgY29kZSwgYW5kIHJldHVybiBOVUxMLgorICAgVGhpcyBmdW5jdGlvbiBidWlsZCB0aGUgZm9sbG93aW5nIHRyZWUsIGZyb20gcmVndWxhciBleHByZXNzaW9uIDxyZWdfZXhwPjoKKwkgICBDQVQKKwkgICAvIFwKKwkgIC8gICBcCisgICA8cmVnX2V4cD4gIEVPUgorCisgICBDQVQgbWVhbnMgY29uY2F0ZW5hdGlvbi4KKyAgIEVPUiBtZWFucyBlbmQgb2YgcmVndWxhciBleHByZXNzaW9uLiAgKi8KKworc3RhdGljIGJpbl90cmVlX3QgKgorcGFyc2UgKHJlX3N0cmluZ190ICpyZWdleHAsIHJlZ2V4X3QgKnByZWcsIHJlZ19zeW50YXhfdCBzeW50YXgsCisgICAgICAgcmVnX2VycmNvZGVfdCAqZXJyKQoreworICByZV9kZmFfdCAqZGZhID0gKHJlX2RmYV90ICopIHByZWctPmJ1ZmZlcjsKKyAgYmluX3RyZWVfdCAqdHJlZSwgKmVvciwgKnJvb3Q7CisgIHJlX3Rva2VuX3QgY3VycmVudF90b2tlbjsKKyAgZGZhLT5zeW50YXggPSBzeW50YXg7CisgIGZldGNoX3Rva2VuICgmY3VycmVudF90b2tlbiwgcmVnZXhwLCBzeW50YXggfCBSRV9DQVJFVF9BTkNIT1JTX0hFUkUpOworICB0cmVlID0gcGFyc2VfcmVnX2V4cCAocmVnZXhwLCBwcmVnLCAmY3VycmVudF90b2tlbiwgc3ludGF4LCAwLCBlcnIpOworICBpZiAoQkUgKCplcnIgIT0gUkVHX05PRVJST1IgJiYgdHJlZSA9PSBOVUxMLCAwKSkKKyAgICByZXR1cm4gTlVMTDsKKyAgZW9yID0gY3JlYXRlX3RyZWUgKGRmYSwgTlVMTCwgTlVMTCwgRU5EX09GX1JFKTsKKyAgaWYgKHRyZWUgIT0gTlVMTCkKKyAgICByb290ID0gY3JlYXRlX3RyZWUgKGRmYSwgdHJlZSwgZW9yLCBDT05DQVQpOworICBlbHNlCisgICAgcm9vdCA9IGVvcjsKKyAgaWYgKEJFIChlb3IgPT0gTlVMTCB8fCByb290ID09IE5VTEwsIDApKQorICAgIHsKKyAgICAgICplcnIgPSBSRUdfRVNQQUNFOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICByZXR1cm4gcm9vdDsKK30KKworLyogVGhpcyBmdW5jdGlvbiBidWlsZCB0aGUgZm9sbG93aW5nIHRyZWUsIGZyb20gcmVndWxhciBleHByZXNzaW9uCisgICA8YnJhbmNoMT58PGJyYW5jaDI+OgorCSAgIEFMVAorCSAgIC8gXAorCSAgLyAgIFwKKyAgIDxicmFuY2gxPiA8YnJhbmNoMj4KKworICAgQUxUIG1lYW5zIGFsdGVybmF0aXZlLCB3aGljaCByZXByZXNlbnRzIHRoZSBvcGVyYXRvciBgfCcuICAqLworCitzdGF0aWMgYmluX3RyZWVfdCAqCitwYXJzZV9yZWdfZXhwIChyZV9zdHJpbmdfdCAqcmVnZXhwLCByZWdleF90ICpwcmVnLCByZV90b2tlbl90ICp0b2tlbiwKKwkgICAgICAgcmVnX3N5bnRheF90IHN5bnRheCwgSWR4IG5lc3QsIHJlZ19lcnJjb2RlX3QgKmVycikKK3sKKyAgcmVfZGZhX3QgKmRmYSA9IChyZV9kZmFfdCAqKSBwcmVnLT5idWZmZXI7CisgIGJpbl90cmVlX3QgKnRyZWUsICpicmFuY2ggPSBOVUxMOworICB0cmVlID0gcGFyc2VfYnJhbmNoIChyZWdleHAsIHByZWcsIHRva2VuLCBzeW50YXgsIG5lc3QsIGVycik7CisgIGlmIChCRSAoKmVyciAhPSBSRUdfTk9FUlJPUiAmJiB0cmVlID09IE5VTEwsIDApKQorICAgIHJldHVybiBOVUxMOworCisgIHdoaWxlICh0b2tlbi0+dHlwZSA9PSBPUF9BTFQpCisgICAgeworICAgICAgZmV0Y2hfdG9rZW4gKHRva2VuLCByZWdleHAsIHN5bnRheCB8IFJFX0NBUkVUX0FOQ0hPUlNfSEVSRSk7CisgICAgICBpZiAodG9rZW4tPnR5cGUgIT0gT1BfQUxUICYmIHRva2VuLT50eXBlICE9IEVORF9PRl9SRQorCSAgJiYgKG5lc3QgPT0gMCB8fCB0b2tlbi0+dHlwZSAhPSBPUF9DTE9TRV9TVUJFWFApKQorCXsKKwkgIGJyYW5jaCA9IHBhcnNlX2JyYW5jaCAocmVnZXhwLCBwcmVnLCB0b2tlbiwgc3ludGF4LCBuZXN0LCBlcnIpOworCSAgaWYgKEJFICgqZXJyICE9IFJFR19OT0VSUk9SICYmIGJyYW5jaCA9PSBOVUxMLCAwKSkKKwkgICAgcmV0dXJuIE5VTEw7CisJfQorICAgICAgZWxzZQorCWJyYW5jaCA9IE5VTEw7CisgICAgICB0cmVlID0gY3JlYXRlX3RyZWUgKGRmYSwgdHJlZSwgYnJhbmNoLCBPUF9BTFQpOworICAgICAgaWYgKEJFICh0cmVlID09IE5VTEwsIDApKQorCXsKKwkgICplcnIgPSBSRUdfRVNQQUNFOworCSAgcmV0dXJuIE5VTEw7CisJfQorICAgIH0KKyAgcmV0dXJuIHRyZWU7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gYnVpbGQgdGhlIGZvbGxvd2luZyB0cmVlLCBmcm9tIHJlZ3VsYXIgZXhwcmVzc2lvbgorICAgPGV4cDE+PGV4cDI+OgorCUNBVAorCS8gXAorICAgICAgIC8gICBcCisgICA8ZXhwMT4gPGV4cDI+CisKKyAgIENBVCBtZWFucyBjb25jYXRlbmF0aW9uLiAgKi8KKworc3RhdGljIGJpbl90cmVlX3QgKgorcGFyc2VfYnJhbmNoIChyZV9zdHJpbmdfdCAqcmVnZXhwLCByZWdleF90ICpwcmVnLCByZV90b2tlbl90ICp0b2tlbiwKKwkgICAgICByZWdfc3ludGF4X3Qgc3ludGF4LCBJZHggbmVzdCwgcmVnX2VycmNvZGVfdCAqZXJyKQoreworICBiaW5fdHJlZV90ICp0cmVlLCAqZXhwcjsKKyAgcmVfZGZhX3QgKmRmYSA9IChyZV9kZmFfdCAqKSBwcmVnLT5idWZmZXI7CisgIHRyZWUgPSBwYXJzZV9leHByZXNzaW9uIChyZWdleHAsIHByZWcsIHRva2VuLCBzeW50YXgsIG5lc3QsIGVycik7CisgIGlmIChCRSAoKmVyciAhPSBSRUdfTk9FUlJPUiAmJiB0cmVlID09IE5VTEwsIDApKQorICAgIHJldHVybiBOVUxMOworCisgIHdoaWxlICh0b2tlbi0+dHlwZSAhPSBPUF9BTFQgJiYgdG9rZW4tPnR5cGUgIT0gRU5EX09GX1JFCisJICYmIChuZXN0ID09IDAgfHwgdG9rZW4tPnR5cGUgIT0gT1BfQ0xPU0VfU1VCRVhQKSkKKyAgICB7CisgICAgICBleHByID0gcGFyc2VfZXhwcmVzc2lvbiAocmVnZXhwLCBwcmVnLCB0b2tlbiwgc3ludGF4LCBuZXN0LCBlcnIpOworICAgICAgaWYgKEJFICgqZXJyICE9IFJFR19OT0VSUk9SICYmIGV4cHIgPT0gTlVMTCwgMCkpCisJeworCSAgcmV0dXJuIE5VTEw7CisJfQorICAgICAgaWYgKHRyZWUgIT0gTlVMTCAmJiBleHByICE9IE5VTEwpCisJeworCSAgdHJlZSA9IGNyZWF0ZV90cmVlIChkZmEsIHRyZWUsIGV4cHIsIENPTkNBVCk7CisJICBpZiAodHJlZSA9PSBOVUxMKQorCSAgICB7CisJICAgICAgKmVyciA9IFJFR19FU1BBQ0U7CisJICAgICAgcmV0dXJuIE5VTEw7CisJICAgIH0KKwl9CisgICAgICBlbHNlIGlmICh0cmVlID09IE5VTEwpCisJdHJlZSA9IGV4cHI7CisgICAgICAvKiBPdGhlcndpc2UgZXhwciA9PSBOVUxMLCB3ZSBkb24ndCBuZWVkIHRvIGNyZWF0ZSBuZXcgdHJlZS4gICovCisgICAgfQorICByZXR1cm4gdHJlZTsKK30KKworLyogVGhpcyBmdW5jdGlvbiBidWlsZCB0aGUgZm9sbG93aW5nIHRyZWUsIGZyb20gcmVndWxhciBleHByZXNzaW9uIGEqOgorCSAqCisJIHwKKwkgYQorKi8KKworc3RhdGljIGJpbl90cmVlX3QgKgorcGFyc2VfZXhwcmVzc2lvbiAocmVfc3RyaW5nX3QgKnJlZ2V4cCwgcmVnZXhfdCAqcHJlZywgcmVfdG9rZW5fdCAqdG9rZW4sCisJCSAgcmVnX3N5bnRheF90IHN5bnRheCwgSWR4IG5lc3QsIHJlZ19lcnJjb2RlX3QgKmVycikKK3sKKyAgcmVfZGZhX3QgKmRmYSA9IChyZV9kZmFfdCAqKSBwcmVnLT5idWZmZXI7CisgIGJpbl90cmVlX3QgKnRyZWU7CisgIHN3aXRjaCAodG9rZW4tPnR5cGUpCisgICAgeworICAgIGNhc2UgQ0hBUkFDVEVSOgorICAgICAgdHJlZSA9IGNyZWF0ZV90b2tlbl90cmVlIChkZmEsIE5VTEwsIE5VTEwsIHRva2VuKTsKKyAgICAgIGlmIChCRSAodHJlZSA9PSBOVUxMLCAwKSkKKwl7CisJICAqZXJyID0gUkVHX0VTUEFDRTsKKwkgIHJldHVybiBOVUxMOworCX0KKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAgICAgaWYgKGRmYS0+bWJfY3VyX21heCA+IDEpCisJeworCSAgd2hpbGUgKCFyZV9zdHJpbmdfZW9pIChyZWdleHApCisJCSAmJiAhcmVfc3RyaW5nX2ZpcnN0X2J5dGUgKHJlZ2V4cCwgcmVfc3RyaW5nX2N1cl9pZHggKHJlZ2V4cCkpKQorCSAgICB7CisJICAgICAgYmluX3RyZWVfdCAqbWJjX3JlbWFpbjsKKwkgICAgICBmZXRjaF90b2tlbiAodG9rZW4sIHJlZ2V4cCwgc3ludGF4KTsKKwkgICAgICBtYmNfcmVtYWluID0gY3JlYXRlX3Rva2VuX3RyZWUgKGRmYSwgTlVMTCwgTlVMTCwgdG9rZW4pOworCSAgICAgIHRyZWUgPSBjcmVhdGVfdHJlZSAoZGZhLCB0cmVlLCBtYmNfcmVtYWluLCBDT05DQVQpOworCSAgICAgIGlmIChCRSAobWJjX3JlbWFpbiA9PSBOVUxMIHx8IHRyZWUgPT0gTlVMTCwgMCkpCisJCXsKKwkJICAqZXJyID0gUkVHX0VTUEFDRTsKKwkJICByZXR1cm4gTlVMTDsKKwkJfQorCSAgICB9CisJfQorI2VuZGlmCisgICAgICBicmVhazsKKyAgICBjYXNlIE9QX09QRU5fU1VCRVhQOgorICAgICAgdHJlZSA9IHBhcnNlX3N1Yl9leHAgKHJlZ2V4cCwgcHJlZywgdG9rZW4sIHN5bnRheCwgbmVzdCArIDEsIGVycik7CisgICAgICBpZiAoQkUgKCplcnIgIT0gUkVHX05PRVJST1IgJiYgdHJlZSA9PSBOVUxMLCAwKSkKKwlyZXR1cm4gTlVMTDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgT1BfT1BFTl9CUkFDS0VUOgorICAgICAgdHJlZSA9IHBhcnNlX2JyYWNrZXRfZXhwIChyZWdleHAsIGRmYSwgdG9rZW4sIHN5bnRheCwgZXJyKTsKKyAgICAgIGlmIChCRSAoKmVyciAhPSBSRUdfTk9FUlJPUiAmJiB0cmVlID09IE5VTEwsIDApKQorCXJldHVybiBOVUxMOworICAgICAgYnJlYWs7CisgICAgY2FzZSBPUF9CQUNLX1JFRjoKKyAgICAgIGlmICghQkUgKGRmYS0+Y29tcGxldGVkX2JrcmVmX21hcCAmICgxIDw8IHRva2VuLT5vcHIuaWR4KSwgMSkpCisJeworCSAgKmVyciA9IFJFR19FU1VCUkVHOworCSAgcmV0dXJuIE5VTEw7CisJfQorICAgICAgZGZhLT51c2VkX2JrcmVmX21hcCB8PSAxIDw8IHRva2VuLT5vcHIuaWR4OworICAgICAgdHJlZSA9IGNyZWF0ZV90b2tlbl90cmVlIChkZmEsIE5VTEwsIE5VTEwsIHRva2VuKTsKKyAgICAgIGlmIChCRSAodHJlZSA9PSBOVUxMLCAwKSkKKwl7CisJICAqZXJyID0gUkVHX0VTUEFDRTsKKwkgIHJldHVybiBOVUxMOworCX0KKyAgICAgICsrZGZhLT5uYmFja3JlZjsKKyAgICAgIGRmYS0+aGFzX21iX25vZGUgPSAxOworICAgICAgYnJlYWs7CisgICAgY2FzZSBPUF9PUEVOX0RVUF9OVU06CisgICAgICBpZiAoc3ludGF4ICYgUkVfQ09OVEVYVF9JTlZBTElEX0RVUCkKKwl7CisJICAqZXJyID0gUkVHX0JBRFJQVDsKKwkgIHJldHVybiBOVUxMOworCX0KKyAgICAgIC8qIEZBTExUSFJPVUdIICovCisgICAgY2FzZSBPUF9EVVBfQVNURVJJU0s6CisgICAgY2FzZSBPUF9EVVBfUExVUzoKKyAgICBjYXNlIE9QX0RVUF9RVUVTVElPTjoKKyAgICAgIGlmIChzeW50YXggJiBSRV9DT05URVhUX0lOVkFMSURfT1BTKQorCXsKKwkgICplcnIgPSBSRUdfQkFEUlBUOworCSAgcmV0dXJuIE5VTEw7CisJfQorICAgICAgZWxzZSBpZiAoc3ludGF4ICYgUkVfQ09OVEVYVF9JTkRFUF9PUFMpCisJeworCSAgZmV0Y2hfdG9rZW4gKHRva2VuLCByZWdleHAsIHN5bnRheCk7CisJICByZXR1cm4gcGFyc2VfZXhwcmVzc2lvbiAocmVnZXhwLCBwcmVnLCB0b2tlbiwgc3ludGF4LCBuZXN0LCBlcnIpOworCX0KKyAgICAgIC8qIGVsc2UgZmFsbCB0aHJvdWdoICAqLworICAgIGNhc2UgT1BfQ0xPU0VfU1VCRVhQOgorICAgICAgaWYgKCh0b2tlbi0+dHlwZSA9PSBPUF9DTE9TRV9TVUJFWFApICYmCisJICAhKHN5bnRheCAmIFJFX1VOTUFUQ0hFRF9SSUdIVF9QQVJFTl9PUkQpKQorCXsKKwkgICplcnIgPSBSRUdfRVJQQVJFTjsKKwkgIHJldHVybiBOVUxMOworCX0KKyAgICAgIC8qIGVsc2UgZmFsbCB0aHJvdWdoICAqLworICAgIGNhc2UgT1BfQ0xPU0VfRFVQX05VTToKKyAgICAgIC8qIFdlIHRyZWF0IGl0IGFzIGEgbm9ybWFsIGNoYXJhY3Rlci4gICovCisKKyAgICAgIC8qIFRoZW4gd2UgY2FuIHRoZXNlIGNoYXJhY3RlcnMgYXMgbm9ybWFsIGNoYXJhY3RlcnMuICAqLworICAgICAgdG9rZW4tPnR5cGUgPSBDSEFSQUNURVI7CisgICAgICAvKiBtYl9wYXJ0aWFsIGFuZCB3b3JkX2NoYXIgYml0cyBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgYWxyZWFkeQorCSBieSBwZWVrX3Rva2VuLiAgKi8KKyAgICAgIHRyZWUgPSBjcmVhdGVfdG9rZW5fdHJlZSAoZGZhLCBOVUxMLCBOVUxMLCB0b2tlbik7CisgICAgICBpZiAoQkUgKHRyZWUgPT0gTlVMTCwgMCkpCisJeworCSAgKmVyciA9IFJFR19FU1BBQ0U7CisJICByZXR1cm4gTlVMTDsKKwl9CisgICAgICBicmVhazsKKyAgICBjYXNlIEFOQ0hPUjoKKyAgICAgIGlmICgodG9rZW4tPm9wci5jdHhfdHlwZQorCSAgICYgKFdPUkRfREVMSU0gfCBOT1RfV09SRF9ERUxJTSB8IFdPUkRfRklSU1QgfCBXT1JEX0xBU1QpKQorCSAgJiYgZGZhLT53b3JkX29wc191c2VkID09IDApCisJaW5pdF93b3JkX2NoYXIgKGRmYSk7CisgICAgICBpZiAodG9rZW4tPm9wci5jdHhfdHlwZSA9PSBXT1JEX0RFTElNCisgICAgICAgICAgfHwgdG9rZW4tPm9wci5jdHhfdHlwZSA9PSBOT1RfV09SRF9ERUxJTSkKKwl7CisJICBiaW5fdHJlZV90ICp0cmVlX2ZpcnN0LCAqdHJlZV9sYXN0OworCSAgaWYgKHRva2VuLT5vcHIuY3R4X3R5cGUgPT0gV09SRF9ERUxJTSkKKwkgICAgeworCSAgICAgIHRva2VuLT5vcHIuY3R4X3R5cGUgPSBXT1JEX0ZJUlNUOworCSAgICAgIHRyZWVfZmlyc3QgPSBjcmVhdGVfdG9rZW5fdHJlZSAoZGZhLCBOVUxMLCBOVUxMLCB0b2tlbik7CisJICAgICAgdG9rZW4tPm9wci5jdHhfdHlwZSA9IFdPUkRfTEFTVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisJICAgICAgdG9rZW4tPm9wci5jdHhfdHlwZSA9IElOU0lERV9XT1JEOworCSAgICAgIHRyZWVfZmlyc3QgPSBjcmVhdGVfdG9rZW5fdHJlZSAoZGZhLCBOVUxMLCBOVUxMLCB0b2tlbik7CisJICAgICAgdG9rZW4tPm9wci5jdHhfdHlwZSA9IElOU0lERV9OT1RXT1JEOworICAgICAgICAgICAgfQorCSAgdHJlZV9sYXN0ID0gY3JlYXRlX3Rva2VuX3RyZWUgKGRmYSwgTlVMTCwgTlVMTCwgdG9rZW4pOworCSAgdHJlZSA9IGNyZWF0ZV90cmVlIChkZmEsIHRyZWVfZmlyc3QsIHRyZWVfbGFzdCwgT1BfQUxUKTsKKwkgIGlmIChCRSAodHJlZV9maXJzdCA9PSBOVUxMIHx8IHRyZWVfbGFzdCA9PSBOVUxMIHx8IHRyZWUgPT0gTlVMTCwgMCkpCisJICAgIHsKKwkgICAgICAqZXJyID0gUkVHX0VTUEFDRTsKKwkgICAgICByZXR1cm4gTlVMTDsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UKKwl7CisJICB0cmVlID0gY3JlYXRlX3Rva2VuX3RyZWUgKGRmYSwgTlVMTCwgTlVMTCwgdG9rZW4pOworCSAgaWYgKEJFICh0cmVlID09IE5VTEwsIDApKQorCSAgICB7CisJICAgICAgKmVyciA9IFJFR19FU1BBQ0U7CisJICAgICAgcmV0dXJuIE5VTEw7CisJICAgIH0KKwl9CisgICAgICAvKiBXZSBtdXN0IHJldHVybiBoZXJlLCBzaW5jZSBBTkNIT1JzIGNhbid0IGJlIGZvbGxvd2VkCisJIGJ5IHJlcGV0aXRpb24gb3BlcmF0b3JzLgorCSBlZy4gUkUiXioiIGlzIGludmFsaWQgb3IgIjxBTkNIT1IoXik+PENIQVIoKik+IiwKKwkgICAgIGl0IG11c3Qgbm90IGJlICI8QU5DSE9SKF4pPjxSRVBFQVQoKik+Ii4gICovCisgICAgICBmZXRjaF90b2tlbiAodG9rZW4sIHJlZ2V4cCwgc3ludGF4KTsKKyAgICAgIHJldHVybiB0cmVlOworICAgIGNhc2UgT1BfUEVSSU9EOgorICAgICAgdHJlZSA9IGNyZWF0ZV90b2tlbl90cmVlIChkZmEsIE5VTEwsIE5VTEwsIHRva2VuKTsKKyAgICAgIGlmIChCRSAodHJlZSA9PSBOVUxMLCAwKSkKKwl7CisJICAqZXJyID0gUkVHX0VTUEFDRTsKKwkgIHJldHVybiBOVUxMOworCX0KKyAgICAgIGlmIChkZmEtPm1iX2N1cl9tYXggPiAxKQorCWRmYS0+aGFzX21iX25vZGUgPSAxOworICAgICAgYnJlYWs7CisgICAgY2FzZSBPUF9XT1JEOgorICAgIGNhc2UgT1BfTk9UV09SRDoKKyAgICAgIHRyZWUgPSBidWlsZF9jaGFyY2xhc3Nfb3AgKGRmYSwgcmVnZXhwLT50cmFucywKKwkJCQkgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgImFsbnVtIiwKKwkJCQkgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgIl8iLAorCQkJCSB0b2tlbi0+dHlwZSA9PSBPUF9OT1RXT1JELCBlcnIpOworICAgICAgaWYgKEJFICgqZXJyICE9IFJFR19OT0VSUk9SICYmIHRyZWUgPT0gTlVMTCwgMCkpCisJcmV0dXJuIE5VTEw7CisgICAgICBicmVhazsKKyAgICBjYXNlIE9QX1NQQUNFOgorICAgIGNhc2UgT1BfTk9UU1BBQ0U6CisgICAgICB0cmVlID0gYnVpbGRfY2hhcmNsYXNzX29wIChkZmEsIHJlZ2V4cC0+dHJhbnMsCisJCQkJIChjb25zdCB1bnNpZ25lZCBjaGFyICopICJzcGFjZSIsCisJCQkJIChjb25zdCB1bnNpZ25lZCBjaGFyICopICIiLAorCQkJCSB0b2tlbi0+dHlwZSA9PSBPUF9OT1RTUEFDRSwgZXJyKTsKKyAgICAgIGlmIChCRSAoKmVyciAhPSBSRUdfTk9FUlJPUiAmJiB0cmVlID09IE5VTEwsIDApKQorCXJldHVybiBOVUxMOworICAgICAgYnJlYWs7CisgICAgY2FzZSBPUF9BTFQ6CisgICAgY2FzZSBFTkRfT0ZfUkU6CisgICAgICByZXR1cm4gTlVMTDsKKyAgICBjYXNlIEJBQ0tfU0xBU0g6CisgICAgICAqZXJyID0gUkVHX0VFU0NBUEU7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICBkZWZhdWx0OgorICAgICAgLyogTXVzdCBub3QgaGFwcGVuPyAgKi8KKyNpZmRlZiBERUJVRworICAgICAgYXNzZXJ0ICgwKTsKKyNlbmRpZgorICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICBmZXRjaF90b2tlbiAodG9rZW4sIHJlZ2V4cCwgc3ludGF4KTsKKworICB3aGlsZSAodG9rZW4tPnR5cGUgPT0gT1BfRFVQX0FTVEVSSVNLIHx8IHRva2VuLT50eXBlID09IE9QX0RVUF9QTFVTCisJIHx8IHRva2VuLT50eXBlID09IE9QX0RVUF9RVUVTVElPTiB8fCB0b2tlbi0+dHlwZSA9PSBPUF9PUEVOX0RVUF9OVU0pCisgICAgeworICAgICAgdHJlZSA9IHBhcnNlX2R1cF9vcCAodHJlZSwgcmVnZXhwLCBkZmEsIHRva2VuLCBzeW50YXgsIGVycik7CisgICAgICBpZiAoQkUgKCplcnIgIT0gUkVHX05PRVJST1IgJiYgdHJlZSA9PSBOVUxMLCAwKSkKKwlyZXR1cm4gTlVMTDsKKyAgICAgIC8qIEluIEJSRSBjb25zZWN1dGl2ZSBkdXBsaWNhdGlvbnMgYXJlIG5vdCBhbGxvd2VkLiAgKi8KKyAgICAgIGlmICgoc3ludGF4ICYgUkVfQ09OVEVYVF9JTlZBTElEX0RVUCkKKwkgICYmICh0b2tlbi0+dHlwZSA9PSBPUF9EVVBfQVNURVJJU0sKKwkgICAgICB8fCB0b2tlbi0+dHlwZSA9PSBPUF9PUEVOX0RVUF9OVU0pKQorCXsKKwkgICplcnIgPSBSRUdfQkFEUlBUOworCSAgcmV0dXJuIE5VTEw7CisJfQorICAgIH0KKworICByZXR1cm4gdHJlZTsKK30KKworLyogVGhpcyBmdW5jdGlvbiBidWlsZCB0aGUgZm9sbG93aW5nIHRyZWUsIGZyb20gcmVndWxhciBleHByZXNzaW9uCisgICAoPHJlZ19leHA+KToKKwkgU1VCRVhQCisJICAgIHwKKwk8cmVnX2V4cD4KKyovCisKK3N0YXRpYyBiaW5fdHJlZV90ICoKK3BhcnNlX3N1Yl9leHAgKHJlX3N0cmluZ190ICpyZWdleHAsIHJlZ2V4X3QgKnByZWcsIHJlX3Rva2VuX3QgKnRva2VuLAorCSAgICAgICByZWdfc3ludGF4X3Qgc3ludGF4LCBJZHggbmVzdCwgcmVnX2VycmNvZGVfdCAqZXJyKQoreworICByZV9kZmFfdCAqZGZhID0gKHJlX2RmYV90ICopIHByZWctPmJ1ZmZlcjsKKyAgYmluX3RyZWVfdCAqdHJlZTsKKyAgc2l6ZV90IGN1cl9uc3ViOworICBjdXJfbnN1YiA9IHByZWctPnJlX25zdWIrKzsKKworICBmZXRjaF90b2tlbiAodG9rZW4sIHJlZ2V4cCwgc3ludGF4IHwgUkVfQ0FSRVRfQU5DSE9SU19IRVJFKTsKKworICAvKiBUaGUgc3ViZXhwcmVzc2lvbiBtYXkgYmUgYSBudWxsIHN0cmluZy4gICovCisgIGlmICh0b2tlbi0+dHlwZSA9PSBPUF9DTE9TRV9TVUJFWFApCisgICAgdHJlZSA9IE5VTEw7CisgIGVsc2UKKyAgICB7CisgICAgICB0cmVlID0gcGFyc2VfcmVnX2V4cCAocmVnZXhwLCBwcmVnLCB0b2tlbiwgc3ludGF4LCBuZXN0LCBlcnIpOworICAgICAgaWYgKEJFICgqZXJyID09IFJFR19OT0VSUk9SICYmIHRva2VuLT50eXBlICE9IE9QX0NMT1NFX1NVQkVYUCwgMCkpCisgICAgICAgICplcnIgPSBSRUdfRVBBUkVOOworICAgICAgaWYgKEJFICgqZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwlyZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgaWYgKGN1cl9uc3ViIDw9ICc5JyAtICcxJykKKyAgICBkZmEtPmNvbXBsZXRlZF9ia3JlZl9tYXAgfD0gMSA8PCBjdXJfbnN1YjsKKworICB0cmVlID0gY3JlYXRlX3RyZWUgKGRmYSwgdHJlZSwgTlVMTCwgU1VCRVhQKTsKKyAgaWYgKEJFICh0cmVlID09IE5VTEwsIDApKQorICAgIHsKKyAgICAgICplcnIgPSBSRUdfRVNQQUNFOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICB0cmVlLT50b2tlbi5vcHIuaWR4ID0gY3VyX25zdWI7CisgIHJldHVybiB0cmVlOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIHBhcnNlIHJlcGV0aXRpb24gb3BlcmF0b3JzIGxpa2UgIioiLCAiKyIsICJ7MSwzfSIgZXRjLiAgKi8KKworc3RhdGljIGJpbl90cmVlX3QgKgorcGFyc2VfZHVwX29wIChiaW5fdHJlZV90ICplbGVtLCByZV9zdHJpbmdfdCAqcmVnZXhwLCByZV9kZmFfdCAqZGZhLAorCSAgICAgIHJlX3Rva2VuX3QgKnRva2VuLCByZWdfc3ludGF4X3Qgc3ludGF4LCByZWdfZXJyY29kZV90ICplcnIpCit7CisgIGJpbl90cmVlX3QgKnRyZWUgPSBOVUxMLCAqb2xkX3RyZWUgPSBOVUxMOworICBJZHggaSwgc3RhcnQsIGVuZCwgc3RhcnRfaWR4ID0gcmVfc3RyaW5nX2N1cl9pZHggKHJlZ2V4cCk7CisgIHJlX3Rva2VuX3Qgc3RhcnRfdG9rZW4gPSAqdG9rZW47CisKKyAgaWYgKHRva2VuLT50eXBlID09IE9QX09QRU5fRFVQX05VTSkKKyAgICB7CisgICAgICBlbmQgPSAwOworICAgICAgc3RhcnQgPSBmZXRjaF9udW1iZXIgKHJlZ2V4cCwgdG9rZW4sIHN5bnRheCk7CisgICAgICBpZiAoc3RhcnQgPT0gUkVHX01JU1NJTkcpCisJeworCSAgaWYgKHRva2VuLT50eXBlID09IENIQVJBQ1RFUiAmJiB0b2tlbi0+b3ByLmMgPT0gJywnKQorCSAgICBzdGFydCA9IDA7IC8qIFdlIHRyZWF0ICJ7LG19IiBhcyAiezAsbX0iLiAgKi8KKwkgIGVsc2UKKwkgICAgeworCSAgICAgICplcnIgPSBSRUdfQkFEQlI7IC8qIDxyZT57fSBpcyBpbnZhbGlkLiAgKi8KKwkgICAgICByZXR1cm4gTlVMTDsKKwkgICAgfQorCX0KKyAgICAgIGlmIChCRSAoc3RhcnQgIT0gUkVHX0VSUk9SLCAxKSkKKwl7CisJICAvKiBXZSB0cmVhdCAie259IiBhcyAie24sbn0iLiAgKi8KKwkgIGVuZCA9ICgodG9rZW4tPnR5cGUgPT0gT1BfQ0xPU0VfRFVQX05VTSkgPyBzdGFydAorCQkgOiAoKHRva2VuLT50eXBlID09IENIQVJBQ1RFUiAmJiB0b2tlbi0+b3ByLmMgPT0gJywnKQorCQkgICAgPyBmZXRjaF9udW1iZXIgKHJlZ2V4cCwgdG9rZW4sIHN5bnRheCkgOiBSRUdfRVJST1IpKTsKKwl9CisgICAgICBpZiAoQkUgKHN0YXJ0ID09IFJFR19FUlJPUiB8fCBlbmQgPT0gUkVHX0VSUk9SLCAwKSkKKwl7CisJICAvKiBJbnZhbGlkIHNlcXVlbmNlLiAgKi8KKwkgIGlmIChCRSAoIShzeW50YXggJiBSRV9JTlZBTElEX0lOVEVSVkFMX09SRCksIDApKQorCSAgICB7CisJICAgICAgaWYgKHRva2VuLT50eXBlID09IEVORF9PRl9SRSkKKwkJKmVyciA9IFJFR19FQlJBQ0U7CisJICAgICAgZWxzZQorCQkqZXJyID0gUkVHX0JBREJSOworCisJICAgICAgcmV0dXJuIE5VTEw7CisJICAgIH0KKworCSAgLyogSWYgdGhlIHN5bnRheCBiaXQgaXMgc2V0LCByb2xsYmFjay4gICovCisJICByZV9zdHJpbmdfc2V0X2luZGV4IChyZWdleHAsIHN0YXJ0X2lkeCk7CisJICAqdG9rZW4gPSBzdGFydF90b2tlbjsKKwkgIHRva2VuLT50eXBlID0gQ0hBUkFDVEVSOworCSAgLyogbWJfcGFydGlhbCBhbmQgd29yZF9jaGFyIGJpdHMgc2hvdWxkIGJlIGFscmVhZHkgaW5pdGlhbGl6ZWQgYnkKKwkgICAgIHBlZWtfdG9rZW4uICAqLworCSAgcmV0dXJuIGVsZW07CisJfQorCisgICAgICBpZiAoQkUgKGVuZCAhPSBSRUdfTUlTU0lORyAmJiBzdGFydCA+IGVuZCwgMCkpCisJeworCSAgLyogRmlyc3QgbnVtYmVyIGdyZWF0ZXIgdGhhbiBzZWNvbmQuICAqLworCSAgKmVyciA9IFJFR19CQURCUjsKKwkgIHJldHVybiBOVUxMOworCX0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBzdGFydCA9ICh0b2tlbi0+dHlwZSA9PSBPUF9EVVBfUExVUykgPyAxIDogMDsKKyAgICAgIGVuZCA9ICh0b2tlbi0+dHlwZSA9PSBPUF9EVVBfUVVFU1RJT04pID8gMSA6IFJFR19NSVNTSU5HOworICAgIH0KKworICBmZXRjaF90b2tlbiAodG9rZW4sIHJlZ2V4cCwgc3ludGF4KTsKKworICBpZiAoQkUgKGVsZW0gPT0gTlVMTCwgMCkpCisgICAgcmV0dXJuIE5VTEw7CisgIGlmIChCRSAoc3RhcnQgPT0gMCAmJiBlbmQgPT0gMCwgMCkpCisgICAgeworICAgICAgcG9zdG9yZGVyIChlbGVtLCBmcmVlX3RyZWUsIE5VTEwpOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgIC8qIEV4dHJhY3QgIjxyZT57bixtfSIgdG8gIjxyZT48cmU+Li4uPHJlPjxyZT57MCw8bS1uPn0iLiAgKi8KKyAgaWYgKEJFIChzdGFydCA+IDAsIDApKQorICAgIHsKKyAgICAgIHRyZWUgPSBlbGVtOworICAgICAgZm9yIChpID0gMjsgaSA8PSBzdGFydDsgKytpKQorCXsKKwkgIGVsZW0gPSBkdXBsaWNhdGVfdHJlZSAoZWxlbSwgZGZhKTsKKwkgIHRyZWUgPSBjcmVhdGVfdHJlZSAoZGZhLCB0cmVlLCBlbGVtLCBDT05DQVQpOworCSAgaWYgKEJFIChlbGVtID09IE5VTEwgfHwgdHJlZSA9PSBOVUxMLCAwKSkKKwkgICAgZ290byBwYXJzZV9kdXBfb3BfZXNwYWNlOworCX0KKworICAgICAgaWYgKHN0YXJ0ID09IGVuZCkKKwlyZXR1cm4gdHJlZTsKKworICAgICAgLyogRHVwbGljYXRlIEVMRU0gYmVmb3JlIGl0IGlzIG1hcmtlZCBvcHRpb25hbC4gICovCisgICAgICBlbGVtID0gZHVwbGljYXRlX3RyZWUgKGVsZW0sIGRmYSk7CisgICAgICBvbGRfdHJlZSA9IHRyZWU7CisgICAgfQorICBlbHNlCisgICAgb2xkX3RyZWUgPSBOVUxMOworCisgIGlmIChlbGVtLT50b2tlbi50eXBlID09IFNVQkVYUCkKKyAgICBwb3N0b3JkZXIgKGVsZW0sIG1hcmtfb3B0X3N1YmV4cCwgKHZvaWQgKikgKGxvbmcpIGVsZW0tPnRva2VuLm9wci5pZHgpOworCisgIHRyZWUgPSBjcmVhdGVfdHJlZSAoZGZhLCBlbGVtLCBOVUxMLAorCQkgICAgICAoZW5kID09IFJFR19NSVNTSU5HID8gT1BfRFVQX0FTVEVSSVNLIDogT1BfQUxUKSk7CisgIGlmIChCRSAodHJlZSA9PSBOVUxMLCAwKSkKKyAgICBnb3RvIHBhcnNlX2R1cF9vcF9lc3BhY2U7CisKKyAgLyogVGhpcyBsb29wIGlzIGFjdHVhbGx5IGV4ZWN1dGVkIG9ubHkgd2hlbiBlbmQgIT0gUkVHX01JU1NJTkcsCisgICAgIHRvIHJld3JpdGUgPHJlPnswLG59IGFzICg8cmU+KDxyZT4uLi48cmU+Pyk/KT8uLi4gIFdlIGhhdmUKKyAgICAgYWxyZWFkeSBjcmVhdGVkIHRoZSBzdGFydCsxLXRoIGNvcHkuICAqLworICBpZiAoKElkeCkgLTEgPCAwIHx8IGVuZCAhPSBSRUdfTUlTU0lORykKKyAgICBmb3IgKGkgPSBzdGFydCArIDI7IGkgPD0gZW5kOyArK2kpCisgICAgICB7CisJZWxlbSA9IGR1cGxpY2F0ZV90cmVlIChlbGVtLCBkZmEpOworCXRyZWUgPSBjcmVhdGVfdHJlZSAoZGZhLCB0cmVlLCBlbGVtLCBDT05DQVQpOworCWlmIChCRSAoZWxlbSA9PSBOVUxMIHx8IHRyZWUgPT0gTlVMTCwgMCkpCisJICBnb3RvIHBhcnNlX2R1cF9vcF9lc3BhY2U7CisKKwl0cmVlID0gY3JlYXRlX3RyZWUgKGRmYSwgdHJlZSwgTlVMTCwgT1BfQUxUKTsKKwlpZiAoQkUgKHRyZWUgPT0gTlVMTCwgMCkpCisJICBnb3RvIHBhcnNlX2R1cF9vcF9lc3BhY2U7CisgICAgICB9CisKKyAgaWYgKG9sZF90cmVlKQorICAgIHRyZWUgPSBjcmVhdGVfdHJlZSAoZGZhLCBvbGRfdHJlZSwgdHJlZSwgQ09OQ0FUKTsKKworICByZXR1cm4gdHJlZTsKKworIHBhcnNlX2R1cF9vcF9lc3BhY2U6CisgICplcnIgPSBSRUdfRVNQQUNFOworICByZXR1cm4gTlVMTDsKK30KKworLyogU2l6ZSBvZiB0aGUgbmFtZXMgZm9yIGNvbGxhdGluZyBzeW1ib2wvZXF1aXZhbGVuY2VfY2xhc3MvY2hhcmFjdGVyX2NsYXNzLgorICAgSSdtIG5vdCBzdXJlLCBidXQgbWF5YmUgZW5vdWdoLiAgKi8KKyNkZWZpbmUgQlJBQ0tFVF9OQU1FX0JVRl9TSVpFIDMyCisKKyNpZm5kZWYgX0xJQkMKKyAgLyogTG9jYWwgZnVuY3Rpb24gZm9yIHBhcnNlX2JyYWNrZXRfZXhwIG9ubHkgdXNlZCBpbiBjYXNlIG9mIE5PVCBfTElCQy4KKyAgICAgQnVpbGQgdGhlIHJhbmdlIGV4cHJlc3Npb24gd2hpY2ggc3RhcnRzIGZyb20gU1RBUlRfRUxFTSwgYW5kIGVuZHMKKyAgICAgYXQgRU5EX0VMRU0uICBUaGUgcmVzdWx0IGFyZSB3cml0dGVuIHRvIE1CQ1NFVCBhbmQgU0JDU0VULgorICAgICBSQU5HRV9BTExPQyBpcyB0aGUgYWxsb2NhdGVkIHNpemUgb2YgbWJjc2V0LT5yYW5nZV9zdGFydHMsIGFuZAorICAgICBtYmNzZXQtPnJhbmdlX2VuZHMsIGlzIGEgcG9pbnRlciBhcmd1bWVudCBzaW5zZSB3ZSBtYXkKKyAgICAgdXBkYXRlIGl0LiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCisjIGlmZGVmIFJFX0VOQUJMRV9JMThOCitidWlsZF9yYW5nZV9leHAgKGJpdHNldF90IHNiY3NldCwgcmVfY2hhcnNldF90ICptYmNzZXQsIElkeCAqcmFuZ2VfYWxsb2MsCisJCSBicmFja2V0X2VsZW1fdCAqc3RhcnRfZWxlbSwgYnJhY2tldF9lbGVtX3QgKmVuZF9lbGVtKQorIyBlbHNlIC8qIG5vdCBSRV9FTkFCTEVfSTE4TiAqLworYnVpbGRfcmFuZ2VfZXhwIChiaXRzZXRfdCBzYmNzZXQsIGJyYWNrZXRfZWxlbV90ICpzdGFydF9lbGVtLAorCQkgYnJhY2tldF9lbGVtX3QgKmVuZF9lbGVtKQorIyBlbmRpZiAvKiBub3QgUkVfRU5BQkxFX0kxOE4gKi8KK3sKKyAgdW5zaWduZWQgaW50IHN0YXJ0X2NoLCBlbmRfY2g7CisgIC8qIEVxdWl2YWxlbmNlIENsYXNzZXMgYW5kIENoYXJhY3RlciBDbGFzc2VzIGNhbid0IGJlIGEgcmFuZ2Ugc3RhcnQvZW5kLiAgKi8KKyAgaWYgKEJFIChzdGFydF9lbGVtLT50eXBlID09IEVRVUlWX0NMQVNTIHx8IHN0YXJ0X2VsZW0tPnR5cGUgPT0gQ0hBUl9DTEFTUworCSAgfHwgZW5kX2VsZW0tPnR5cGUgPT0gRVFVSVZfQ0xBU1MgfHwgZW5kX2VsZW0tPnR5cGUgPT0gQ0hBUl9DTEFTUywKKwkgIDApKQorICAgIHJldHVybiBSRUdfRVJBTkdFOworCisgIC8qIFdlIGNhbiBoYW5kbGUgbm8gbXVsdGkgY2hhcmFjdGVyIGNvbGxhdGluZyBlbGVtZW50cyB3aXRob3V0IGxpYmMKKyAgICAgc3VwcG9ydC4gICovCisgIGlmIChCRSAoKHN0YXJ0X2VsZW0tPnR5cGUgPT0gQ09MTF9TWU0KKwkgICAmJiBzdHJsZW4gKChjaGFyICopIHN0YXJ0X2VsZW0tPm9wci5uYW1lKSA+IDEpCisJICB8fCAoZW5kX2VsZW0tPnR5cGUgPT0gQ09MTF9TWU0KKwkgICAgICAmJiBzdHJsZW4gKChjaGFyICopIGVuZF9lbGVtLT5vcHIubmFtZSkgPiAxKSwgMCkpCisgICAgcmV0dXJuIFJFR19FQ09MTEFURTsKKworIyBpZmRlZiBSRV9FTkFCTEVfSTE4TgorICB7CisgICAgd2NoYXJfdCB3YzsKKyAgICB3aW50X3Qgc3RhcnRfd2M7CisgICAgd2ludF90IGVuZF93YzsKKyAgICB3Y2hhcl90IGNtcF9idWZbNl0gPSB7TCdcMCcsIEwnXDAnLCBMJ1wwJywgTCdcMCcsIEwnXDAnLCBMJ1wwJ307CisKKyAgICBzdGFydF9jaCA9ICgoc3RhcnRfZWxlbS0+dHlwZSA9PSBTQl9DSEFSKSA/IHN0YXJ0X2VsZW0tPm9wci5jaAorCQk6ICgoc3RhcnRfZWxlbS0+dHlwZSA9PSBDT0xMX1NZTSkgPyBzdGFydF9lbGVtLT5vcHIubmFtZVswXQorCQkgICA6IDApKTsKKyAgICBlbmRfY2ggPSAoKGVuZF9lbGVtLT50eXBlID09IFNCX0NIQVIpID8gZW5kX2VsZW0tPm9wci5jaAorCSAgICAgIDogKChlbmRfZWxlbS0+dHlwZSA9PSBDT0xMX1NZTSkgPyBlbmRfZWxlbS0+b3ByLm5hbWVbMF0KKwkJIDogMCkpOworICAgIHN0YXJ0X3djID0gKChzdGFydF9lbGVtLT50eXBlID09IFNCX0NIQVIgfHwgc3RhcnRfZWxlbS0+dHlwZSA9PSBDT0xMX1NZTSkKKwkJPyBfX2J0b3djIChzdGFydF9jaCkgOiBzdGFydF9lbGVtLT5vcHIud2NoKTsKKyAgICBlbmRfd2MgPSAoKGVuZF9lbGVtLT50eXBlID09IFNCX0NIQVIgfHwgZW5kX2VsZW0tPnR5cGUgPT0gQ09MTF9TWU0pCisJICAgICAgPyBfX2J0b3djIChlbmRfY2gpIDogZW5kX2VsZW0tPm9wci53Y2gpOworICAgIGlmIChzdGFydF93YyA9PSBXRU9GIHx8IGVuZF93YyA9PSBXRU9GKQorICAgICAgcmV0dXJuIFJFR19FQ09MTEFURTsKKyAgICBjbXBfYnVmWzBdID0gc3RhcnRfd2M7CisgICAgY21wX2J1Zls0XSA9IGVuZF93YzsKKyAgICBpZiAod2NzY29sbCAoY21wX2J1ZiwgY21wX2J1ZiArIDQpID4gMCkKKyAgICAgIHJldHVybiBSRUdfRVJBTkdFOworCisgICAgLyogR290IHZhbGlkIGNvbGxhdGlvbiBzZXF1ZW5jZSB2YWx1ZXMsIGFkZCB0aGVtIGFzIGEgbmV3IGVudHJ5LgorICAgICAgIEhvd2V2ZXIsIGZvciAhX0xJQkMgd2UgaGF2ZSBubyBjb2xsYXRpb24gZWxlbWVudHM6IGlmIHRoZQorICAgICAgIGNoYXJhY3RlciBzZXQgaXMgc2luZ2xlIGJ5dGUsIHRoZSBzaW5nbGUgYnl0ZSBjaGFyYWN0ZXIgc2V0CisgICAgICAgdGhhdCB3ZSBidWlsZCBiZWxvdyBzdWZmaWNlcy4gIHBhcnNlX2JyYWNrZXRfZXhwIHBhc3NlcworICAgICAgIG5vIE1CQ1NFVCBpZiBkZmEtPm1iX2N1cl9tYXggPT0gMS4gICovCisgICAgaWYgKG1iY3NldCkKKyAgICAgIHsKKyAgICAgICAgLyogQ2hlY2sgdGhlIHNwYWNlIG9mIHRoZSBhcnJheXMuICAqLworICAgICAgICBpZiAoQkUgKCpyYW5nZV9hbGxvYyA9PSBtYmNzZXQtPm5yYW5nZXMsIDApKQorICAgICAgICAgIHsKKwkgICAgLyogVGhlcmUgaXMgbm90IGVub3VnaCBzcGFjZSwgbmVlZCByZWFsbG9jLiAgKi8KKwkgICAgd2NoYXJfdCAqbmV3X2FycmF5X3N0YXJ0LCAqbmV3X2FycmF5X2VuZDsKKwkgICAgSWR4IG5ld19ucmFuZ2VzOworCisJICAgIC8qICsxIGluIGNhc2Ugb2YgbWJjc2V0LT5ucmFuZ2VzIGlzIDAuICAqLworCSAgICBuZXdfbnJhbmdlcyA9IDIgKiBtYmNzZXQtPm5yYW5nZXMgKyAxOworCSAgICAvKiBVc2UgcmVhbGxvYyBzaW5jZSBtYmNzZXQtPnJhbmdlX3N0YXJ0cyBhbmQgbWJjc2V0LT5yYW5nZV9lbmRzCisJICAgICAgIGFyZSBOVUxMIGlmICpyYW5nZV9hbGxvYyA9PSAwLiAgKi8KKwkgICAgbmV3X2FycmF5X3N0YXJ0ID0gcmVfcmVhbGxvYyAobWJjc2V0LT5yYW5nZV9zdGFydHMsIHdjaGFyX3QsCisJCQkJICAgICAgICAgIG5ld19ucmFuZ2VzKTsKKwkgICAgbmV3X2FycmF5X2VuZCA9IHJlX3JlYWxsb2MgKG1iY3NldC0+cmFuZ2VfZW5kcywgd2NoYXJfdCwKKwkJCQkgICAgICAgIG5ld19ucmFuZ2VzKTsKKworCSAgICBpZiAoQkUgKG5ld19hcnJheV9zdGFydCA9PSBOVUxMIHx8IG5ld19hcnJheV9lbmQgPT0gTlVMTCwgMCkpCisJICAgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisKKwkgICAgbWJjc2V0LT5yYW5nZV9zdGFydHMgPSBuZXdfYXJyYXlfc3RhcnQ7CisJICAgIG1iY3NldC0+cmFuZ2VfZW5kcyA9IG5ld19hcnJheV9lbmQ7CisJICAgICpyYW5nZV9hbGxvYyA9IG5ld19ucmFuZ2VzOworICAgICAgICAgIH0KKworICAgICAgICBtYmNzZXQtPnJhbmdlX3N0YXJ0c1ttYmNzZXQtPm5yYW5nZXNdID0gc3RhcnRfd2M7CisgICAgICAgIG1iY3NldC0+cmFuZ2VfZW5kc1ttYmNzZXQtPm5yYW5nZXMrK10gPSBlbmRfd2M7CisgICAgICB9CisKKyAgICAvKiBCdWlsZCB0aGUgdGFibGUgZm9yIHNpbmdsZSBieXRlIGNoYXJhY3RlcnMuICAqLworICAgIGZvciAod2MgPSAwOyB3YyA8IFNCQ19NQVg7ICsrd2MpCisgICAgICB7CisJY21wX2J1ZlsyXSA9IHdjOworCWlmICh3Y3Njb2xsIChjbXBfYnVmLCBjbXBfYnVmICsgMikgPD0gMAorCSAgICAmJiB3Y3Njb2xsIChjbXBfYnVmICsgMiwgY21wX2J1ZiArIDQpIDw9IDApCisJICBiaXRzZXRfc2V0IChzYmNzZXQsIHdjKTsKKyAgICAgIH0KKyAgfQorIyBlbHNlIC8qIG5vdCBSRV9FTkFCTEVfSTE4TiAqLworICB7CisgICAgdW5zaWduZWQgaW50IGNoOworICAgIHN0YXJ0X2NoID0gKChzdGFydF9lbGVtLT50eXBlID09IFNCX0NIQVIgKSA/IHN0YXJ0X2VsZW0tPm9wci5jaAorCQk6ICgoc3RhcnRfZWxlbS0+dHlwZSA9PSBDT0xMX1NZTSkgPyBzdGFydF9lbGVtLT5vcHIubmFtZVswXQorCQkgICA6IDApKTsKKyAgICBlbmRfY2ggPSAoKGVuZF9lbGVtLT50eXBlID09IFNCX0NIQVIgKSA/IGVuZF9lbGVtLT5vcHIuY2gKKwkgICAgICA6ICgoZW5kX2VsZW0tPnR5cGUgPT0gQ09MTF9TWU0pID8gZW5kX2VsZW0tPm9wci5uYW1lWzBdCisJCSA6IDApKTsKKyAgICBpZiAoc3RhcnRfY2ggPiBlbmRfY2gpCisgICAgICByZXR1cm4gUkVHX0VSQU5HRTsKKyAgICAvKiBCdWlsZCB0aGUgdGFibGUgZm9yIHNpbmdsZSBieXRlIGNoYXJhY3RlcnMuICAqLworICAgIGZvciAoY2ggPSAwOyBjaCA8IFNCQ19NQVg7ICsrY2gpCisgICAgICBpZiAoc3RhcnRfY2ggPD0gY2ggICYmIGNoIDw9IGVuZF9jaCkKKwliaXRzZXRfc2V0IChzYmNzZXQsIGNoKTsKKyAgfQorIyBlbmRpZiAvKiBub3QgUkVfRU5BQkxFX0kxOE4gKi8KKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorI2VuZGlmIC8qIG5vdCBfTElCQyAqLworCisjaWZuZGVmIF9MSUJDCisvKiBIZWxwZXIgZnVuY3Rpb24gZm9yIHBhcnNlX2JyYWNrZXRfZXhwIG9ubHkgdXNlZCBpbiBjYXNlIG9mIE5PVCBfTElCQy4uCisgICBCdWlsZCB0aGUgY29sbGF0aW5nIGVsZW1lbnQgd2hpY2ggaXMgcmVwcmVzZW50ZWQgYnkgTkFNRS4KKyAgIFRoZSByZXN1bHQgYXJlIHdyaXR0ZW4gdG8gTUJDU0VUIGFuZCBTQkNTRVQuCisgICBDT0xMX1NZTV9BTExPQyBpcyB0aGUgYWxsb2NhdGVkIHNpemUgb2YgbWJjc2V0LT5jb2xsX3N5bSwgaXMgYQorICAgcG9pbnRlciBhcmd1bWVudCBzaW5jZSB3ZSBtYXkgdXBkYXRlIGl0LiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCitidWlsZF9jb2xsYXRpbmdfc3ltYm9sIChiaXRzZXRfdCBzYmNzZXQsCisjIGlmZGVmIFJFX0VOQUJMRV9JMThOCisJCQlyZV9jaGFyc2V0X3QgKm1iY3NldCwgSWR4ICpjb2xsX3N5bV9hbGxvYywKKyMgZW5kaWYKKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUpCit7CisgIHNpemVfdCBuYW1lX2xlbiA9IHN0cmxlbiAoKGNvbnN0IGNoYXIgKikgbmFtZSk7CisgIGlmIChCRSAobmFtZV9sZW4gIT0gMSwgMCkpCisgICAgcmV0dXJuIFJFR19FQ09MTEFURTsKKyAgZWxzZQorICAgIHsKKyAgICAgIGJpdHNldF9zZXQgKHNiY3NldCwgbmFtZVswXSk7CisgICAgICByZXR1cm4gUkVHX05PRVJST1I7CisgICAgfQorfQorI2VuZGlmIC8qIG5vdCBfTElCQyAqLworCisvKiBUaGlzIGZ1bmN0aW9uIHBhcnNlIGJyYWNrZXQgZXhwcmVzc2lvbiBsaWtlICJbYWJjXSIsICJbYS1jXSIsCisgICAiW1suYS1hLl1dIiBldGMuICAqLworCitzdGF0aWMgYmluX3RyZWVfdCAqCitwYXJzZV9icmFja2V0X2V4cCAocmVfc3RyaW5nX3QgKnJlZ2V4cCwgcmVfZGZhX3QgKmRmYSwgcmVfdG9rZW5fdCAqdG9rZW4sCisJCSAgIHJlZ19zeW50YXhfdCBzeW50YXgsIHJlZ19lcnJjb2RlX3QgKmVycikKK3sKKyNpZmRlZiBfTElCQworICBjb25zdCB1bnNpZ25lZCBjaGFyICpjb2xsc2VxbWI7CisgIGNvbnN0IGNoYXIgKmNvbGxzZXF3YzsKKyAgdWludDMyX3QgbnJ1bGVzOworICBpbnQzMl90IHRhYmxlX3NpemU7CisgIGNvbnN0IGludDMyX3QgKnN5bWJfdGFibGU7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmV4dHJhOworCisgIC8qIExvY2FsIGZ1bmN0aW9uIGZvciBwYXJzZV9icmFja2V0X2V4cCB1c2VkIGluIF9MSUJDIGVudmlyb25lbWVudC4KKyAgICAgU2VlayB0aGUgY29sbGF0aW5nIHN5bWJvbCBlbnRyeSBjb3JyZXNwb25kaW5ncyB0byBOQU1FLgorICAgICBSZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBzeW1ib2wgaW4gdGhlIFNZTUJfVEFCTEUuICAqLworCisgIGF1dG8gaW5saW5lIGludDMyX3QKKyAgX19hdHRyaWJ1dGUgKChhbHdheXNfaW5saW5lKSkKKyAgc2Vla19jb2xsYXRpbmdfc3ltYm9sX2VudHJ5IChuYW1lLCBuYW1lX2xlbikKKwkgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZTsKKwkgc2l6ZV90IG5hbWVfbGVuOworICAgIHsKKyAgICAgIGludDMyX3QgaGFzaCA9IGVsZW1faGFzaCAoKGNvbnN0IGNoYXIgKikgbmFtZSwgbmFtZV9sZW4pOworICAgICAgaW50MzJfdCBlbGVtID0gaGFzaCAlIHRhYmxlX3NpemU7CisgICAgICBpZiAoc3ltYl90YWJsZVsyICogZWxlbV0gIT0gMCkKKwl7CisJICBpbnQzMl90IHNlY29uZCA9IGhhc2ggJSAodGFibGVfc2l6ZSAtIDIpICsgMTsKKworCSAgZG8KKwkgICAgeworCSAgICAgIC8qIEZpcnN0IGNvbXBhcmUgdGhlIGhhc2hpbmcgdmFsdWUuICAqLworCSAgICAgIGlmIChzeW1iX3RhYmxlWzIgKiBlbGVtXSA9PSBoYXNoCisJCSAgLyogQ29tcGFyZSB0aGUgbGVuZ3RoIG9mIHRoZSBuYW1lLiAgKi8KKwkJICAmJiBuYW1lX2xlbiA9PSBleHRyYVtzeW1iX3RhYmxlWzIgKiBlbGVtICsgMV1dCisJCSAgLyogQ29tcGFyZSB0aGUgbmFtZS4gICovCisJCSAgJiYgbWVtY21wIChuYW1lLCAmZXh0cmFbc3ltYl90YWJsZVsyICogZWxlbSArIDFdICsgMV0sCisJCQkgICAgIG5hbWVfbGVuKSA9PSAwKQorCQl7CisJCSAgLyogWWVwLCB0aGlzIGlzIHRoZSBlbnRyeS4gICovCisJCSAgYnJlYWs7CisJCX0KKworCSAgICAgIC8qIE5leHQgZW50cnkuICAqLworCSAgICAgIGVsZW0gKz0gc2Vjb25kOworCSAgICB9CisJICB3aGlsZSAoc3ltYl90YWJsZVsyICogZWxlbV0gIT0gMCk7CisJfQorICAgICAgcmV0dXJuIGVsZW07CisgICAgfQorCisgIC8qIExvY2FsIGZ1bmN0aW9uIGZvciBwYXJzZV9icmFja2V0X2V4cCB1c2VkIGluIF9MSUJDIGVudmlyb25lbWVudC4KKyAgICAgTG9vayB1cCB0aGUgY29sbGF0aW9uIHNlcXVlbmNlIHZhbHVlIG9mIEJSX0VMRU0uCisgICAgIFJldHVybiB0aGUgdmFsdWUgaWYgc3VjY2VlZGVkLCBVSU5UX01BWCBvdGhlcndpc2UuICAqLworCisgIGF1dG8gaW5saW5lIHVuc2lnbmVkIGludAorICBfX2F0dHJpYnV0ZSAoKGFsd2F5c19pbmxpbmUpKQorICBsb29rdXBfY29sbGF0aW9uX3NlcXVlbmNlX3ZhbHVlIChicl9lbGVtKQorCSBicmFja2V0X2VsZW1fdCAqYnJfZWxlbTsKKyAgICB7CisgICAgICBpZiAoYnJfZWxlbS0+dHlwZSA9PSBTQl9DSEFSKQorCXsKKwkgIC8qCisJICBpZiAoTUJfQ1VSX01BWCA9PSAxKQorCSAgKi8KKwkgIGlmIChucnVsZXMgPT0gMCkKKwkgICAgcmV0dXJuIGNvbGxzZXFtYlticl9lbGVtLT5vcHIuY2hdOworCSAgZWxzZQorCSAgICB7CisJICAgICAgd2ludF90IHdjID0gX19idG93YyAoYnJfZWxlbS0+b3ByLmNoKTsKKwkgICAgICByZXR1cm4gX19jb2xsc2VxX3RhYmxlX2xvb2t1cCAoY29sbHNlcXdjLCB3Yyk7CisJICAgIH0KKwl9CisgICAgICBlbHNlIGlmIChicl9lbGVtLT50eXBlID09IE1CX0NIQVIpCisJeworCSAgcmV0dXJuIF9fY29sbHNlcV90YWJsZV9sb29rdXAgKGNvbGxzZXF3YywgYnJfZWxlbS0+b3ByLndjaCk7CisJfQorICAgICAgZWxzZSBpZiAoYnJfZWxlbS0+dHlwZSA9PSBDT0xMX1NZTSkKKwl7CisJICBzaXplX3Qgc3ltX25hbWVfbGVuID0gc3RybGVuICgoY2hhciAqKSBicl9lbGVtLT5vcHIubmFtZSk7CisJICBpZiAobnJ1bGVzICE9IDApCisJICAgIHsKKwkgICAgICBpbnQzMl90IGVsZW0sIGlkeDsKKwkgICAgICBlbGVtID0gc2Vla19jb2xsYXRpbmdfc3ltYm9sX2VudHJ5IChicl9lbGVtLT5vcHIubmFtZSwKKwkJCQkJCSAgc3ltX25hbWVfbGVuKTsKKwkgICAgICBpZiAoc3ltYl90YWJsZVsyICogZWxlbV0gIT0gMCkKKwkJeworCQkgIC8qIFdlIGZvdW5kIHRoZSBlbnRyeS4gICovCisJCSAgaWR4ID0gc3ltYl90YWJsZVsyICogZWxlbSArIDFdOworCQkgIC8qIFNraXAgdGhlIG5hbWUgb2YgY29sbGF0aW5nIGVsZW1lbnQgbmFtZS4gICovCisJCSAgaWR4ICs9IDEgKyBleHRyYVtpZHhdOworCQkgIC8qIFNraXAgdGhlIGJ5dGUgc2VxdWVuY2Ugb2YgdGhlIGNvbGxhdGluZyBlbGVtZW50LiAgKi8KKwkJICBpZHggKz0gMSArIGV4dHJhW2lkeF07CisJCSAgLyogQWRqdXN0IGZvciB0aGUgYWxpZ25tZW50LiAgKi8KKwkJICBpZHggPSAoaWR4ICsgMykgJiB+MzsKKwkJICAvKiBTa2lwIHRoZSBtdWx0aWJ5dGUgY29sbGF0aW9uIHNlcXVlbmNlIHZhbHVlLiAgKi8KKwkJICBpZHggKz0gc2l6ZW9mICh1bnNpZ25lZCBpbnQpOworCQkgIC8qIFNraXAgdGhlIHdpZGUgY2hhciBzZXF1ZW5jZSBvZiB0aGUgY29sbGF0aW5nIGVsZW1lbnQuICAqLworCQkgIGlkeCArPSBzaXplb2YgKHVuc2lnbmVkIGludCkgKgorCQkgICAgKDEgKyAqKHVuc2lnbmVkIGludCAqKSAoZXh0cmEgKyBpZHgpKTsKKwkJICAvKiBSZXR1cm4gdGhlIGNvbGxhdGlvbiBzZXF1ZW5jZSB2YWx1ZS4gICovCisJCSAgcmV0dXJuICoodW5zaWduZWQgaW50ICopIChleHRyYSArIGlkeCk7CisJCX0KKwkgICAgICBlbHNlIGlmIChzeW1iX3RhYmxlWzIgKiBlbGVtXSA9PSAwICYmIHN5bV9uYW1lX2xlbiA9PSAxKQorCQl7CisJCSAgLyogTm8gdmFsaWQgY2hhcmFjdGVyLiAgTWF0Y2ggaXQgYXMgYSBzaW5nbGUgYnl0ZQorCQkgICAgIGNoYXJhY3Rlci4gICovCisJCSAgcmV0dXJuIGNvbGxzZXFtYlticl9lbGVtLT5vcHIubmFtZVswXV07CisJCX0KKwkgICAgfQorCSAgZWxzZSBpZiAoc3ltX25hbWVfbGVuID09IDEpCisJICAgIHJldHVybiBjb2xsc2VxbWJbYnJfZWxlbS0+b3ByLm5hbWVbMF1dOworCX0KKyAgICAgIHJldHVybiBVSU5UX01BWDsKKyAgICB9CisKKyAgLyogTG9jYWwgZnVuY3Rpb24gZm9yIHBhcnNlX2JyYWNrZXRfZXhwIHVzZWQgaW4gX0xJQkMgZW52aXJvbmVtZW50LgorICAgICBCdWlsZCB0aGUgcmFuZ2UgZXhwcmVzc2lvbiB3aGljaCBzdGFydHMgZnJvbSBTVEFSVF9FTEVNLCBhbmQgZW5kcworICAgICBhdCBFTkRfRUxFTS4gIFRoZSByZXN1bHQgYXJlIHdyaXR0ZW4gdG8gTUJDU0VUIGFuZCBTQkNTRVQuCisgICAgIFJBTkdFX0FMTE9DIGlzIHRoZSBhbGxvY2F0ZWQgc2l6ZSBvZiBtYmNzZXQtPnJhbmdlX3N0YXJ0cywgYW5kCisgICAgIG1iY3NldC0+cmFuZ2VfZW5kcywgaXMgYSBwb2ludGVyIGFyZ3VtZW50IHNpbnNlIHdlIG1heQorICAgICB1cGRhdGUgaXQuICAqLworCisgIGF1dG8gaW5saW5lIHJlZ19lcnJjb2RlX3QKKyAgX19hdHRyaWJ1dGUgKChhbHdheXNfaW5saW5lKSkKKyAgYnVpbGRfcmFuZ2VfZXhwIChzYmNzZXQsIG1iY3NldCwgcmFuZ2VfYWxsb2MsIHN0YXJ0X2VsZW0sIGVuZF9lbGVtKQorCSByZV9jaGFyc2V0X3QgKm1iY3NldDsKKwkgSWR4ICpyYW5nZV9hbGxvYzsKKwkgYml0c2V0X3Qgc2Jjc2V0OworCSBicmFja2V0X2VsZW1fdCAqc3RhcnRfZWxlbSwgKmVuZF9lbGVtOworICAgIHsKKyAgICAgIHVuc2lnbmVkIGludCBjaDsKKyAgICAgIHVpbnQzMl90IHN0YXJ0X2NvbGxzZXE7CisgICAgICB1aW50MzJfdCBlbmRfY29sbHNlcTsKKworICAgICAgLyogRXF1aXZhbGVuY2UgQ2xhc3NlcyBhbmQgQ2hhcmFjdGVyIENsYXNzZXMgY2FuJ3QgYmUgYSByYW5nZQorCSBzdGFydC9lbmQuICAqLworICAgICAgaWYgKEJFIChzdGFydF9lbGVtLT50eXBlID09IEVRVUlWX0NMQVNTIHx8IHN0YXJ0X2VsZW0tPnR5cGUgPT0gQ0hBUl9DTEFTUworCSAgICAgIHx8IGVuZF9lbGVtLT50eXBlID09IEVRVUlWX0NMQVNTIHx8IGVuZF9lbGVtLT50eXBlID09IENIQVJfQ0xBU1MsCisJICAgICAgMCkpCisJcmV0dXJuIFJFR19FUkFOR0U7CisKKyAgICAgIHN0YXJ0X2NvbGxzZXEgPSBsb29rdXBfY29sbGF0aW9uX3NlcXVlbmNlX3ZhbHVlIChzdGFydF9lbGVtKTsKKyAgICAgIGVuZF9jb2xsc2VxID0gbG9va3VwX2NvbGxhdGlvbl9zZXF1ZW5jZV92YWx1ZSAoZW5kX2VsZW0pOworICAgICAgLyogQ2hlY2sgc3RhcnQvZW5kIGNvbGxhdGlvbiBzZXF1ZW5jZSB2YWx1ZXMuICAqLworICAgICAgaWYgKEJFIChzdGFydF9jb2xsc2VxID09IFVJTlRfTUFYIHx8IGVuZF9jb2xsc2VxID09IFVJTlRfTUFYLCAwKSkKKwlyZXR1cm4gUkVHX0VDT0xMQVRFOworICAgICAgaWYgKEJFICgoc3ludGF4ICYgUkVfTk9fRU1QVFlfUkFOR0VTKSAmJiBzdGFydF9jb2xsc2VxID4gZW5kX2NvbGxzZXEsIDApKQorCXJldHVybiBSRUdfRVJBTkdFOworCisgICAgICAvKiBHb3QgdmFsaWQgY29sbGF0aW9uIHNlcXVlbmNlIHZhbHVlcywgYWRkIHRoZW0gYXMgYSBuZXcgZW50cnkuCisJIEhvd2V2ZXIsIGlmIHdlIGhhdmUgbm8gY29sbGF0aW9uIGVsZW1lbnRzLCBhbmQgdGhlIGNoYXJhY3RlciBzZXQKKwkgaXMgc2luZ2xlIGJ5dGUsIHRoZSBzaW5nbGUgYnl0ZSBjaGFyYWN0ZXIgc2V0IHRoYXQgd2UKKwkgYnVpbGQgYmVsb3cgc3VmZmljZXMuICovCisgICAgICBpZiAobnJ1bGVzID4gMCB8fCBkZmEtPm1iX2N1cl9tYXggPiAxKQorCXsKKyAgICAgICAgICAvKiBDaGVjayB0aGUgc3BhY2Ugb2YgdGhlIGFycmF5cy4gICovCisgICAgICAgICAgaWYgKEJFICgqcmFuZ2VfYWxsb2MgPT0gbWJjc2V0LT5ucmFuZ2VzLCAwKSkKKwkgICAgeworCSAgICAgIC8qIFRoZXJlIGlzIG5vdCBlbm91Z2ggc3BhY2UsIG5lZWQgcmVhbGxvYy4gICovCisJICAgICAgdWludDMyX3QgKm5ld19hcnJheV9zdGFydDsKKwkgICAgICB1aW50MzJfdCAqbmV3X2FycmF5X2VuZDsKKwkgICAgICBJZHggbmV3X25yYW5nZXM7CisKKwkgICAgICAvKiArMSBpbiBjYXNlIG9mIG1iY3NldC0+bnJhbmdlcyBpcyAwLiAgKi8KKwkgICAgICBuZXdfbnJhbmdlcyA9IDIgKiBtYmNzZXQtPm5yYW5nZXMgKyAxOworCSAgICAgIG5ld19hcnJheV9zdGFydCA9IHJlX3JlYWxsb2MgKG1iY3NldC0+cmFuZ2Vfc3RhcnRzLCB1aW50MzJfdCwKKwkJCQkJICAgIG5ld19ucmFuZ2VzKTsKKwkgICAgICBuZXdfYXJyYXlfZW5kID0gcmVfcmVhbGxvYyAobWJjc2V0LT5yYW5nZV9lbmRzLCB1aW50MzJfdCwKKwkJCQkgICAgICAgICAgbmV3X25yYW5nZXMpOworCisJICAgICAgaWYgKEJFIChuZXdfYXJyYXlfc3RhcnQgPT0gTlVMTCB8fCBuZXdfYXJyYXlfZW5kID09IE5VTEwsIDApKQorCSAgICAgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisKKwkgICAgICBtYmNzZXQtPnJhbmdlX3N0YXJ0cyA9IG5ld19hcnJheV9zdGFydDsKKwkgICAgICBtYmNzZXQtPnJhbmdlX2VuZHMgPSBuZXdfYXJyYXlfZW5kOworCSAgICAgICpyYW5nZV9hbGxvYyA9IG5ld19ucmFuZ2VzOworCSAgICB9CisKKyAgICAgICAgICBtYmNzZXQtPnJhbmdlX3N0YXJ0c1ttYmNzZXQtPm5yYW5nZXNdID0gc3RhcnRfY29sbHNlcTsKKyAgICAgICAgICBtYmNzZXQtPnJhbmdlX2VuZHNbbWJjc2V0LT5ucmFuZ2VzKytdID0gZW5kX2NvbGxzZXE7CisJfQorCisgICAgICAvKiBCdWlsZCB0aGUgdGFibGUgZm9yIHNpbmdsZSBieXRlIGNoYXJhY3RlcnMuICAqLworICAgICAgZm9yIChjaCA9IDA7IGNoIDwgU0JDX01BWDsgY2grKykKKwl7CisJICB1aW50MzJfdCBjaF9jb2xsc2VxOworCSAgLyoKKwkgIGlmIChNQl9DVVJfTUFYID09IDEpCisJICAqLworCSAgaWYgKG5ydWxlcyA9PSAwKQorCSAgICBjaF9jb2xsc2VxID0gY29sbHNlcW1iW2NoXTsKKwkgIGVsc2UKKwkgICAgY2hfY29sbHNlcSA9IF9fY29sbHNlcV90YWJsZV9sb29rdXAgKGNvbGxzZXF3YywgX19idG93YyAoY2gpKTsKKwkgIGlmIChzdGFydF9jb2xsc2VxIDw9IGNoX2NvbGxzZXEgJiYgY2hfY29sbHNlcSA8PSBlbmRfY29sbHNlcSkKKwkgICAgYml0c2V0X3NldCAoc2Jjc2V0LCBjaCk7CisJfQorICAgICAgcmV0dXJuIFJFR19OT0VSUk9SOworICAgIH0KKworICAvKiBMb2NhbCBmdW5jdGlvbiBmb3IgcGFyc2VfYnJhY2tldF9leHAgdXNlZCBpbiBfTElCQyBlbnZpcm9uZW1lbnQuCisgICAgIEJ1aWxkIHRoZSBjb2xsYXRpbmcgZWxlbWVudCB3aGljaCBpcyByZXByZXNlbnRlZCBieSBOQU1FLgorICAgICBUaGUgcmVzdWx0IGFyZSB3cml0dGVuIHRvIE1CQ1NFVCBhbmQgU0JDU0VULgorICAgICBDT0xMX1NZTV9BTExPQyBpcyB0aGUgYWxsb2NhdGVkIHNpemUgb2YgbWJjc2V0LT5jb2xsX3N5bSwgaXMgYQorICAgICBwb2ludGVyIGFyZ3VtZW50IHNpbnNlIHdlIG1heSB1cGRhdGUgaXQuICAqLworCisgIGF1dG8gaW5saW5lIHJlZ19lcnJjb2RlX3QKKyAgX19hdHRyaWJ1dGUgKChhbHdheXNfaW5saW5lKSkKKyAgYnVpbGRfY29sbGF0aW5nX3N5bWJvbCAoc2Jjc2V0LCBtYmNzZXQsIGNvbGxfc3ltX2FsbG9jLCBuYW1lKQorCSByZV9jaGFyc2V0X3QgKm1iY3NldDsKKwkgSWR4ICpjb2xsX3N5bV9hbGxvYzsKKwkgYml0c2V0X3Qgc2Jjc2V0OworCSBjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lOworICAgIHsKKyAgICAgIGludDMyX3QgZWxlbSwgaWR4OworICAgICAgc2l6ZV90IG5hbWVfbGVuID0gc3RybGVuICgoY29uc3QgY2hhciAqKSBuYW1lKTsKKyAgICAgIGlmIChucnVsZXMgIT0gMCkKKwl7CisJICBlbGVtID0gc2Vla19jb2xsYXRpbmdfc3ltYm9sX2VudHJ5IChuYW1lLCBuYW1lX2xlbik7CisJICBpZiAoc3ltYl90YWJsZVsyICogZWxlbV0gIT0gMCkKKwkgICAgeworCSAgICAgIC8qIFdlIGZvdW5kIHRoZSBlbnRyeS4gICovCisJICAgICAgaWR4ID0gc3ltYl90YWJsZVsyICogZWxlbSArIDFdOworCSAgICAgIC8qIFNraXAgdGhlIG5hbWUgb2YgY29sbGF0aW5nIGVsZW1lbnQgbmFtZS4gICovCisJICAgICAgaWR4ICs9IDEgKyBleHRyYVtpZHhdOworCSAgICB9CisJICBlbHNlIGlmIChzeW1iX3RhYmxlWzIgKiBlbGVtXSA9PSAwICYmIG5hbWVfbGVuID09IDEpCisJICAgIHsKKwkgICAgICAvKiBObyB2YWxpZCBjaGFyYWN0ZXIsIHRyZWF0IGl0IGFzIGEgbm9ybWFsCisJCSBjaGFyYWN0ZXIuICAqLworCSAgICAgIGJpdHNldF9zZXQgKHNiY3NldCwgbmFtZVswXSk7CisJICAgICAgcmV0dXJuIFJFR19OT0VSUk9SOworCSAgICB9CisJICBlbHNlCisJICAgIHJldHVybiBSRUdfRUNPTExBVEU7CisKKwkgIC8qIEdvdCB2YWxpZCBjb2xsYXRpb24gc2VxdWVuY2UsIGFkZCBpdCBhcyBhIG5ldyBlbnRyeS4gICovCisJICAvKiBDaGVjayB0aGUgc3BhY2Ugb2YgdGhlIGFycmF5cy4gICovCisJICBpZiAoQkUgKCpjb2xsX3N5bV9hbGxvYyA9PSBtYmNzZXQtPm5jb2xsX3N5bXMsIDApKQorCSAgICB7CisJICAgICAgLyogTm90IGVub3VnaCwgcmVhbGxvYyBpdC4gICovCisJICAgICAgLyogKzEgaW4gY2FzZSBvZiBtYmNzZXQtPm5jb2xsX3N5bXMgaXMgMC4gICovCisJICAgICAgSWR4IG5ld19jb2xsX3N5bV9hbGxvYyA9IDIgKiBtYmNzZXQtPm5jb2xsX3N5bXMgKyAxOworCSAgICAgIC8qIFVzZSByZWFsbG9jIHNpbmNlIG1iY3NldC0+Y29sbF9zeW1zIGlzIE5VTEwKKwkJIGlmICphbGxvYyA9PSAwLiAgKi8KKwkgICAgICBpbnQzMl90ICpuZXdfY29sbF9zeW1zID0gcmVfcmVhbGxvYyAobWJjc2V0LT5jb2xsX3N5bXMsIGludDMyX3QsCisJCQkJCQkgICBuZXdfY29sbF9zeW1fYWxsb2MpOworCSAgICAgIGlmIChCRSAobmV3X2NvbGxfc3ltcyA9PSBOVUxMLCAwKSkKKwkJcmV0dXJuIFJFR19FU1BBQ0U7CisJICAgICAgbWJjc2V0LT5jb2xsX3N5bXMgPSBuZXdfY29sbF9zeW1zOworCSAgICAgICpjb2xsX3N5bV9hbGxvYyA9IG5ld19jb2xsX3N5bV9hbGxvYzsKKwkgICAgfQorCSAgbWJjc2V0LT5jb2xsX3N5bXNbbWJjc2V0LT5uY29sbF9zeW1zKytdID0gaWR4OworCSAgcmV0dXJuIFJFR19OT0VSUk9SOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBpZiAoQkUgKG5hbWVfbGVuICE9IDEsIDApKQorCSAgICByZXR1cm4gUkVHX0VDT0xMQVRFOworCSAgZWxzZQorCSAgICB7CisJICAgICAgYml0c2V0X3NldCAoc2Jjc2V0LCBuYW1lWzBdKTsKKwkgICAgICByZXR1cm4gUkVHX05PRVJST1I7CisJICAgIH0KKwl9CisgICAgfQorI2VuZGlmCisKKyAgcmVfdG9rZW5fdCBicl90b2tlbjsKKyAgcmVfYml0c2V0X3B0cl90IHNiY3NldDsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICByZV9jaGFyc2V0X3QgKm1iY3NldDsKKyAgSWR4IGNvbGxfc3ltX2FsbG9jID0gMCwgcmFuZ2VfYWxsb2MgPSAwLCBtYmNoYXJfYWxsb2MgPSAwOworICBJZHggZXF1aXZfY2xhc3NfYWxsb2MgPSAwLCBjaGFyX2NsYXNzX2FsbG9jID0gMDsKKyNlbmRpZiAvKiBub3QgUkVfRU5BQkxFX0kxOE4gKi8KKyAgYm9vbCBub25fbWF0Y2ggPSBmYWxzZTsKKyAgYmluX3RyZWVfdCAqd29ya190cmVlOworICBpbnQgdG9rZW5fbGVuOworICBib29sIGZpcnN0X3JvdW5kID0gdHJ1ZTsKKyNpZmRlZiBfTElCQworICBjb2xsc2VxbWIgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKQorICAgIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9DT0xMU0VRTUIpOworICBucnVsZXMgPSBfTkxfQ1VSUkVOVF9XT1JEIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9OUlVMRVMpOworICBpZiAobnJ1bGVzKQorICAgIHsKKyAgICAgIC8qCisgICAgICBpZiAoTUJfQ1VSX01BWCA+IDEpCisgICAgICAqLworICAgICAgY29sbHNlcXdjID0gX05MX0NVUlJFTlQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX0NPTExTRVFXQyk7CisgICAgICB0YWJsZV9zaXplID0gX05MX0NVUlJFTlRfV09SRCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfU1lNQl9IQVNIX1NJWkVNQik7CisgICAgICBzeW1iX3RhYmxlID0gKGNvbnN0IGludDMyX3QgKikgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsCisJCQkJCQkgIF9OTF9DT0xMQVRFX1NZTUJfVEFCTEVNQik7CisgICAgICBleHRyYSA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLAorCQkJCQkJICAgX05MX0NPTExBVEVfU1lNQl9FWFRSQU1CKTsKKyAgICB9CisjZW5kaWYKKyAgc2Jjc2V0ID0gKHJlX2JpdHNldF9wdHJfdCkgY2FsbG9jIChzaXplb2YgKGJpdHNldF90KSwgMSk7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgbWJjc2V0ID0gKHJlX2NoYXJzZXRfdCAqKSBjYWxsb2MgKHNpemVvZiAocmVfY2hhcnNldF90KSwgMSk7CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICBpZiAoQkUgKHNiY3NldCA9PSBOVUxMIHx8IG1iY3NldCA9PSBOVUxMLCAwKSkKKyNlbHNlCisgIGlmIChCRSAoc2Jjc2V0ID09IE5VTEwsIDApKQorI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisgICAgeworICAgICAgKmVyciA9IFJFR19FU1BBQ0U7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgdG9rZW5fbGVuID0gcGVla190b2tlbl9icmFja2V0ICh0b2tlbiwgcmVnZXhwLCBzeW50YXgpOworICBpZiAoQkUgKHRva2VuLT50eXBlID09IEVORF9PRl9SRSwgMCkpCisgICAgeworICAgICAgKmVyciA9IFJFR19CQURQQVQ7CisgICAgICBnb3RvIHBhcnNlX2JyYWNrZXRfZXhwX2ZyZWVfcmV0dXJuOworICAgIH0KKyAgaWYgKHRva2VuLT50eXBlID09IE9QX05PTl9NQVRDSF9MSVNUKQorICAgIHsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAgICAgbWJjc2V0LT5ub25fbWF0Y2ggPSAxOworI2VuZGlmIC8qIG5vdCBSRV9FTkFCTEVfSTE4TiAqLworICAgICAgbm9uX21hdGNoID0gdHJ1ZTsKKyAgICAgIGlmIChzeW50YXggJiBSRV9IQVRfTElTVFNfTk9UX05FV0xJTkUpCisJYml0c2V0X3NldCAoc2Jjc2V0LCAnXG4nKTsKKyAgICAgIHJlX3N0cmluZ19za2lwX2J5dGVzIChyZWdleHAsIHRva2VuX2xlbik7IC8qIFNraXAgYSB0b2tlbi4gICovCisgICAgICB0b2tlbl9sZW4gPSBwZWVrX3Rva2VuX2JyYWNrZXQgKHRva2VuLCByZWdleHAsIHN5bnRheCk7CisgICAgICBpZiAoQkUgKHRva2VuLT50eXBlID09IEVORF9PRl9SRSwgMCkpCisJeworCSAgKmVyciA9IFJFR19CQURQQVQ7CisJICBnb3RvIHBhcnNlX2JyYWNrZXRfZXhwX2ZyZWVfcmV0dXJuOworCX0KKyAgICB9CisKKyAgLyogV2UgdHJlYXQgdGhlIGZpcnN0ICddJyBhcyBhIG5vcm1hbCBjaGFyYWN0ZXIuICAqLworICBpZiAodG9rZW4tPnR5cGUgPT0gT1BfQ0xPU0VfQlJBQ0tFVCkKKyAgICB0b2tlbi0+dHlwZSA9IENIQVJBQ1RFUjsKKworICB3aGlsZSAoMSkKKyAgICB7CisgICAgICBicmFja2V0X2VsZW1fdCBzdGFydF9lbGVtLCBlbmRfZWxlbTsKKyAgICAgIHVuc2lnbmVkIGNoYXIgc3RhcnRfbmFtZV9idWZbQlJBQ0tFVF9OQU1FX0JVRl9TSVpFXTsKKyAgICAgIHVuc2lnbmVkIGNoYXIgZW5kX25hbWVfYnVmW0JSQUNLRVRfTkFNRV9CVUZfU0laRV07CisgICAgICByZWdfZXJyY29kZV90IHJldDsKKyAgICAgIGludCB0b2tlbl9sZW4yID0gMDsKKyAgICAgIGJvb2wgaXNfcmFuZ2VfZXhwID0gZmFsc2U7CisgICAgICByZV90b2tlbl90IHRva2VuMjsKKworICAgICAgc3RhcnRfZWxlbS5vcHIubmFtZSA9IHN0YXJ0X25hbWVfYnVmOworICAgICAgcmV0ID0gcGFyc2VfYnJhY2tldF9lbGVtZW50ICgmc3RhcnRfZWxlbSwgcmVnZXhwLCB0b2tlbiwgdG9rZW5fbGVuLCBkZmEsCisJCQkJICAgc3ludGF4LCBmaXJzdF9yb3VuZCk7CisgICAgICBpZiAoQkUgKHJldCAhPSBSRUdfTk9FUlJPUiwgMCkpCisJeworCSAgKmVyciA9IHJldDsKKwkgIGdvdG8gcGFyc2VfYnJhY2tldF9leHBfZnJlZV9yZXR1cm47CisJfQorICAgICAgZmlyc3Rfcm91bmQgPSBmYWxzZTsKKworICAgICAgLyogR2V0IGluZm9ybWF0aW9uIGFib3V0IHRoZSBuZXh0IHRva2VuLiAgV2UgbmVlZCBpdCBpbiBhbnkgY2FzZS4gICovCisgICAgICB0b2tlbl9sZW4gPSBwZWVrX3Rva2VuX2JyYWNrZXQgKHRva2VuLCByZWdleHAsIHN5bnRheCk7CisKKyAgICAgIC8qIERvIG5vdCBjaGVjayBmb3IgcmFuZ2VzIGlmIHdlIGtub3cgdGhleSBhcmUgbm90IGFsbG93ZWQuICAqLworICAgICAgaWYgKHN0YXJ0X2VsZW0udHlwZSAhPSBDSEFSX0NMQVNTICYmIHN0YXJ0X2VsZW0udHlwZSAhPSBFUVVJVl9DTEFTUykKKwl7CisJICBpZiAoQkUgKHRva2VuLT50eXBlID09IEVORF9PRl9SRSwgMCkpCisJICAgIHsKKwkgICAgICAqZXJyID0gUkVHX0VCUkFDSzsKKwkgICAgICBnb3RvIHBhcnNlX2JyYWNrZXRfZXhwX2ZyZWVfcmV0dXJuOworCSAgICB9CisJICBpZiAodG9rZW4tPnR5cGUgPT0gT1BfQ0hBUlNFVF9SQU5HRSkKKwkgICAgeworCSAgICAgIHJlX3N0cmluZ19za2lwX2J5dGVzIChyZWdleHAsIHRva2VuX2xlbik7IC8qIFNraXAgJy0nLiAgKi8KKwkgICAgICB0b2tlbl9sZW4yID0gcGVla190b2tlbl9icmFja2V0ICgmdG9rZW4yLCByZWdleHAsIHN5bnRheCk7CisJICAgICAgaWYgKEJFICh0b2tlbjIudHlwZSA9PSBFTkRfT0ZfUkUsIDApKQorCQl7CisJCSAgKmVyciA9IFJFR19FQlJBQ0s7CisJCSAgZ290byBwYXJzZV9icmFja2V0X2V4cF9mcmVlX3JldHVybjsKKwkJfQorCSAgICAgIGlmICh0b2tlbjIudHlwZSA9PSBPUF9DTE9TRV9CUkFDS0VUKQorCQl7CisJCSAgLyogV2UgdHJlYXQgdGhlIGxhc3QgJy0nIGFzIGEgbm9ybWFsIGNoYXJhY3Rlci4gICovCisJCSAgcmVfc3RyaW5nX3NraXBfYnl0ZXMgKHJlZ2V4cCwgLXRva2VuX2xlbik7CisJCSAgdG9rZW4tPnR5cGUgPSBDSEFSQUNURVI7CisJCX0KKwkgICAgICBlbHNlCisJCWlzX3JhbmdlX2V4cCA9IHRydWU7CisJICAgIH0KKwl9CisKKyAgICAgIGlmIChpc19yYW5nZV9leHAgPT0gdHJ1ZSkKKwl7CisJICBlbmRfZWxlbS5vcHIubmFtZSA9IGVuZF9uYW1lX2J1ZjsKKwkgIHJldCA9IHBhcnNlX2JyYWNrZXRfZWxlbWVudCAoJmVuZF9lbGVtLCByZWdleHAsICZ0b2tlbjIsIHRva2VuX2xlbjIsCisJCQkJICAgICAgIGRmYSwgc3ludGF4LCB0cnVlKTsKKwkgIGlmIChCRSAocmV0ICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgeworCSAgICAgICplcnIgPSByZXQ7CisJICAgICAgZ290byBwYXJzZV9icmFja2V0X2V4cF9mcmVlX3JldHVybjsKKwkgICAgfQorCisJICB0b2tlbl9sZW4gPSBwZWVrX3Rva2VuX2JyYWNrZXQgKHRva2VuLCByZWdleHAsIHN5bnRheCk7CisKKyNpZmRlZiBfTElCQworCSAgKmVyciA9IGJ1aWxkX3JhbmdlX2V4cCAoc2Jjc2V0LCBtYmNzZXQsICZyYW5nZV9hbGxvYywKKwkJCQkgICZzdGFydF9lbGVtLCAmZW5kX2VsZW0pOworI2Vsc2UKKyMgaWZkZWYgUkVfRU5BQkxFX0kxOE4KKwkgICplcnIgPSBidWlsZF9yYW5nZV9leHAgKHNiY3NldCwKKwkJCQkgIGRmYS0+bWJfY3VyX21heCA+IDEgPyBtYmNzZXQgOiBOVUxMLAorCQkJCSAgJnJhbmdlX2FsbG9jLCAmc3RhcnRfZWxlbSwgJmVuZF9lbGVtKTsKKyMgZWxzZQorCSAgKmVyciA9IGJ1aWxkX3JhbmdlX2V4cCAoc2Jjc2V0LCAmc3RhcnRfZWxlbSwgJmVuZF9lbGVtKTsKKyMgZW5kaWYKKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworCSAgaWYgKEJFICgqZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgZ290byBwYXJzZV9icmFja2V0X2V4cF9mcmVlX3JldHVybjsKKwl9CisgICAgICBlbHNlCisJeworCSAgc3dpdGNoIChzdGFydF9lbGVtLnR5cGUpCisJICAgIHsKKwkgICAgY2FzZSBTQl9DSEFSOgorCSAgICAgIGJpdHNldF9zZXQgKHNiY3NldCwgc3RhcnRfZWxlbS5vcHIuY2gpOworCSAgICAgIGJyZWFrOworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisJICAgIGNhc2UgTUJfQ0hBUjoKKwkgICAgICAvKiBDaGVjayB3aGV0aGVyIHRoZSBhcnJheSBoYXMgZW5vdWdoIHNwYWNlLiAgKi8KKwkgICAgICBpZiAoQkUgKG1iY2hhcl9hbGxvYyA9PSBtYmNzZXQtPm5tYmNoYXJzLCAwKSkKKwkJeworCQkgIHdjaGFyX3QgKm5ld19tYmNoYXJzOworCQkgIC8qIE5vdCBlbm91Z2gsIHJlYWxsb2MgaXQuICAqLworCQkgIC8qICsxIGluIGNhc2Ugb2YgbWJjc2V0LT5ubWJjaGFycyBpcyAwLiAgKi8KKwkJICBtYmNoYXJfYWxsb2MgPSAyICogbWJjc2V0LT5ubWJjaGFycyArIDE7CisJCSAgLyogVXNlIHJlYWxsb2Mgc2luY2UgYXJyYXkgaXMgTlVMTCBpZiAqYWxsb2MgPT0gMC4gICovCisJCSAgbmV3X21iY2hhcnMgPSByZV9yZWFsbG9jIChtYmNzZXQtPm1iY2hhcnMsIHdjaGFyX3QsCisJCQkJCSAgICBtYmNoYXJfYWxsb2MpOworCQkgIGlmIChCRSAobmV3X21iY2hhcnMgPT0gTlVMTCwgMCkpCisJCSAgICBnb3RvIHBhcnNlX2JyYWNrZXRfZXhwX2VzcGFjZTsKKwkJICBtYmNzZXQtPm1iY2hhcnMgPSBuZXdfbWJjaGFyczsKKwkJfQorCSAgICAgIG1iY3NldC0+bWJjaGFyc1ttYmNzZXQtPm5tYmNoYXJzKytdID0gc3RhcnRfZWxlbS5vcHIud2NoOworCSAgICAgIGJyZWFrOworI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisJICAgIGNhc2UgRVFVSVZfQ0xBU1M6CisJICAgICAgKmVyciA9IGJ1aWxkX2VxdWl2X2NsYXNzIChzYmNzZXQsCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKwkJCQkJbWJjc2V0LCAmZXF1aXZfY2xhc3NfYWxsb2MsCisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKwkJCQkJc3RhcnRfZWxlbS5vcHIubmFtZSk7CisJICAgICAgaWYgKEJFICgqZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkJZ290byBwYXJzZV9icmFja2V0X2V4cF9mcmVlX3JldHVybjsKKwkgICAgICBicmVhazsKKwkgICAgY2FzZSBDT0xMX1NZTToKKwkgICAgICAqZXJyID0gYnVpbGRfY29sbGF0aW5nX3N5bWJvbCAoc2Jjc2V0LAorI2lmZGVmIFJFX0VOQUJMRV9JMThOCisJCQkJCSAgICAgbWJjc2V0LCAmY29sbF9zeW1fYWxsb2MsCisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKwkJCQkJICAgICBzdGFydF9lbGVtLm9wci5uYW1lKTsKKwkgICAgICBpZiAoQkUgKCplcnIgIT0gUkVHX05PRVJST1IsIDApKQorCQlnb3RvIHBhcnNlX2JyYWNrZXRfZXhwX2ZyZWVfcmV0dXJuOworCSAgICAgIGJyZWFrOworCSAgICBjYXNlIENIQVJfQ0xBU1M6CisJICAgICAgKmVyciA9IGJ1aWxkX2NoYXJjbGFzcyAocmVnZXhwLT50cmFucywgc2Jjc2V0LAorI2lmZGVmIFJFX0VOQUJMRV9JMThOCisJCQkJICAgICAgbWJjc2V0LCAmY2hhcl9jbGFzc19hbGxvYywKKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworCQkJCSAgICAgIHN0YXJ0X2VsZW0ub3ByLm5hbWUsIHN5bnRheCk7CisJICAgICAgaWYgKEJFICgqZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgICAgZ290byBwYXJzZV9icmFja2V0X2V4cF9mcmVlX3JldHVybjsKKwkgICAgICBicmVhazsKKwkgICAgZGVmYXVsdDoKKwkgICAgICBhc3NlcnQgKDApOworCSAgICAgIGJyZWFrOworCSAgICB9CisJfQorICAgICAgaWYgKEJFICh0b2tlbi0+dHlwZSA9PSBFTkRfT0ZfUkUsIDApKQorCXsKKwkgICplcnIgPSBSRUdfRUJSQUNLOworCSAgZ290byBwYXJzZV9icmFja2V0X2V4cF9mcmVlX3JldHVybjsKKwl9CisgICAgICBpZiAodG9rZW4tPnR5cGUgPT0gT1BfQ0xPU0VfQlJBQ0tFVCkKKwlicmVhazsKKyAgICB9CisKKyAgcmVfc3RyaW5nX3NraXBfYnl0ZXMgKHJlZ2V4cCwgdG9rZW5fbGVuKTsgLyogU2tpcCBhIHRva2VuLiAgKi8KKworICAvKiBJZiBpdCBpcyBub24tbWF0Y2hpbmcgbGlzdC4gICovCisgIGlmIChub25fbWF0Y2gpCisgICAgYml0c2V0X25vdCAoc2Jjc2V0KTsKKworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIC8qIEVuc3VyZSBvbmx5IHNpbmdsZSBieXRlIGNoYXJhY3RlcnMgYXJlIHNldC4gICovCisgIGlmIChkZmEtPm1iX2N1cl9tYXggPiAxKQorICAgIGJpdHNldF9tYXNrIChzYmNzZXQsIGRmYS0+c2JfY2hhcik7CisKKyAgaWYgKG1iY3NldC0+bm1iY2hhcnMgfHwgbWJjc2V0LT5uY29sbF9zeW1zIHx8IG1iY3NldC0+bmVxdWl2X2NsYXNzZXMKKyAgICAgIHx8IG1iY3NldC0+bnJhbmdlcyB8fCAoZGZhLT5tYl9jdXJfbWF4ID4gMSAmJiAobWJjc2V0LT5uY2hhcl9jbGFzc2VzCisJCQkJCQkgICAgIHx8IG1iY3NldC0+bm9uX21hdGNoKSkpCisgICAgeworICAgICAgYmluX3RyZWVfdCAqbWJjX3RyZWU7CisgICAgICBpbnQgc2JjX2lkeDsKKyAgICAgIC8qIEJ1aWxkIGEgdHJlZSBmb3IgY29tcGxleCBicmFja2V0LiAgKi8KKyAgICAgIGRmYS0+aGFzX21iX25vZGUgPSAxOworICAgICAgYnJfdG9rZW4udHlwZSA9IENPTVBMRVhfQlJBQ0tFVDsKKyAgICAgIGJyX3Rva2VuLm9wci5tYmNzZXQgPSBtYmNzZXQ7CisgICAgICBtYmNfdHJlZSA9IGNyZWF0ZV90b2tlbl90cmVlIChkZmEsIE5VTEwsIE5VTEwsICZicl90b2tlbik7CisgICAgICBpZiAoQkUgKG1iY190cmVlID09IE5VTEwsIDApKQorCWdvdG8gcGFyc2VfYnJhY2tldF9leHBfZXNwYWNlOworICAgICAgZm9yIChzYmNfaWR4ID0gMDsgc2JjX2lkeCA8IEJJVFNFVF9XT1JEUzsgKytzYmNfaWR4KQorCWlmIChzYmNzZXRbc2JjX2lkeF0pCisJICBicmVhazsKKyAgICAgIC8qIElmIHRoZXJlIGFyZSBubyBiaXRzIHNldCBpbiBzYmNzZXQsIHRoZXJlIGlzIG5vIHBvaW50CisJIG9mIGhhdmluZyBib3RoIFNJTVBMRV9CUkFDS0VUIGFuZCBDT01QTEVYX0JSQUNLRVQuICAqLworICAgICAgaWYgKHNiY19pZHggPCBCSVRTRVRfV09SRFMpCisJeworICAgICAgICAgIC8qIEJ1aWxkIGEgdHJlZSBmb3Igc2ltcGxlIGJyYWNrZXQuICAqLworICAgICAgICAgIGJyX3Rva2VuLnR5cGUgPSBTSU1QTEVfQlJBQ0tFVDsKKyAgICAgICAgICBicl90b2tlbi5vcHIuc2Jjc2V0ID0gc2Jjc2V0OworICAgICAgICAgIHdvcmtfdHJlZSA9IGNyZWF0ZV90b2tlbl90cmVlIChkZmEsIE5VTEwsIE5VTEwsICZicl90b2tlbik7CisgICAgICAgICAgaWYgKEJFICh3b3JrX3RyZWUgPT0gTlVMTCwgMCkpCisgICAgICAgICAgICBnb3RvIHBhcnNlX2JyYWNrZXRfZXhwX2VzcGFjZTsKKworICAgICAgICAgIC8qIFRoZW4gam9pbiB0aGVtIGJ5IEFMVCBub2RlLiAgKi8KKyAgICAgICAgICB3b3JrX3RyZWUgPSBjcmVhdGVfdHJlZSAoZGZhLCB3b3JrX3RyZWUsIG1iY190cmVlLCBPUF9BTFQpOworICAgICAgICAgIGlmIChCRSAod29ya190cmVlID09IE5VTEwsIDApKQorICAgICAgICAgICAgZ290byBwYXJzZV9icmFja2V0X2V4cF9lc3BhY2U7CisJfQorICAgICAgZWxzZQorCXsKKwkgIHJlX2ZyZWUgKHNiY3NldCk7CisJICB3b3JrX3RyZWUgPSBtYmNfdHJlZTsKKwl9CisgICAgfQorICBlbHNlCisjZW5kaWYgLyogbm90IFJFX0VOQUJMRV9JMThOICovCisgICAgeworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgICAgICBmcmVlX2NoYXJzZXQgKG1iY3NldCk7CisjZW5kaWYKKyAgICAgIC8qIEJ1aWxkIGEgdHJlZSBmb3Igc2ltcGxlIGJyYWNrZXQuICAqLworICAgICAgYnJfdG9rZW4udHlwZSA9IFNJTVBMRV9CUkFDS0VUOworICAgICAgYnJfdG9rZW4ub3ByLnNiY3NldCA9IHNiY3NldDsKKyAgICAgIHdvcmtfdHJlZSA9IGNyZWF0ZV90b2tlbl90cmVlIChkZmEsIE5VTEwsIE5VTEwsICZicl90b2tlbik7CisgICAgICBpZiAoQkUgKHdvcmtfdHJlZSA9PSBOVUxMLCAwKSkKKyAgICAgICAgZ290byBwYXJzZV9icmFja2V0X2V4cF9lc3BhY2U7CisgICAgfQorICByZXR1cm4gd29ya190cmVlOworCisgcGFyc2VfYnJhY2tldF9leHBfZXNwYWNlOgorICAqZXJyID0gUkVHX0VTUEFDRTsKKyBwYXJzZV9icmFja2V0X2V4cF9mcmVlX3JldHVybjoKKyAgcmVfZnJlZSAoc2Jjc2V0KTsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICBmcmVlX2NoYXJzZXQgKG1iY3NldCk7CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIFBhcnNlIGFuIGVsZW1lbnQgaW4gdGhlIGJyYWNrZXQgZXhwcmVzc2lvbi4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitwYXJzZV9icmFja2V0X2VsZW1lbnQgKGJyYWNrZXRfZWxlbV90ICplbGVtLCByZV9zdHJpbmdfdCAqcmVnZXhwLAorCQkgICAgICAgcmVfdG9rZW5fdCAqdG9rZW4sIGludCB0b2tlbl9sZW4sIHJlX2RmYV90ICpkZmEsCisJCSAgICAgICByZWdfc3ludGF4X3Qgc3ludGF4LCBib29sIGFjY2VwdF9oeXBoZW4pCit7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgaW50IGN1cl9jaGFyX3NpemU7CisgIGN1cl9jaGFyX3NpemUgPSByZV9zdHJpbmdfY2hhcl9zaXplX2F0IChyZWdleHAsIHJlX3N0cmluZ19jdXJfaWR4IChyZWdleHApKTsKKyAgaWYgKGN1cl9jaGFyX3NpemUgPiAxKQorICAgIHsKKyAgICAgIGVsZW0tPnR5cGUgPSBNQl9DSEFSOworICAgICAgZWxlbS0+b3ByLndjaCA9IHJlX3N0cmluZ193Y2hhcl9hdCAocmVnZXhwLCByZV9zdHJpbmdfY3VyX2lkeCAocmVnZXhwKSk7CisgICAgICByZV9zdHJpbmdfc2tpcF9ieXRlcyAocmVnZXhwLCBjdXJfY2hhcl9zaXplKTsKKyAgICAgIHJldHVybiBSRUdfTk9FUlJPUjsKKyAgICB9CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKyAgcmVfc3RyaW5nX3NraXBfYnl0ZXMgKHJlZ2V4cCwgdG9rZW5fbGVuKTsgLyogU2tpcCBhIHRva2VuLiAgKi8KKyAgaWYgKHRva2VuLT50eXBlID09IE9QX09QRU5fQ09MTF9FTEVNIHx8IHRva2VuLT50eXBlID09IE9QX09QRU5fQ0hBUl9DTEFTUworICAgICAgfHwgdG9rZW4tPnR5cGUgPT0gT1BfT1BFTl9FUVVJVl9DTEFTUykKKyAgICByZXR1cm4gcGFyc2VfYnJhY2tldF9zeW1ib2wgKGVsZW0sIHJlZ2V4cCwgdG9rZW4pOworICBpZiAoQkUgKHRva2VuLT50eXBlID09IE9QX0NIQVJTRVRfUkFOR0UsIDApICYmICFhY2NlcHRfaHlwaGVuKQorICAgIHsKKyAgICAgIC8qIEEgJy0nIG11c3Qgb25seSBhcHBlYXIgYXMgYW55dGhpbmcgYnV0IGEgcmFuZ2UgaW5kaWNhdG9yIGJlZm9yZQorCSB0aGUgY2xvc2luZyBicmFja2V0LiAgRXZlcnl0aGluZyBlbHNlIGlzIGFuIGVycm9yLiAgKi8KKyAgICAgIHJlX3Rva2VuX3QgdG9rZW4yOworICAgICAgKHZvaWQpIHBlZWtfdG9rZW5fYnJhY2tldCAoJnRva2VuMiwgcmVnZXhwLCBzeW50YXgpOworICAgICAgaWYgKHRva2VuMi50eXBlICE9IE9QX0NMT1NFX0JSQUNLRVQpCisJLyogVGhlIGFjdHVhbCBlcnJvciB2YWx1ZSBpcyBub3Qgc3RhbmRhcmRpemVkIHNpbmNlIHRoaXMgd2hvbGUKKwkgICBjYXNlIGlzIHVuZGVmaW5lZC4gIEJ1dCBFUkFOR0UgbWFrZXMgZ29vZCBzZW5zZS4gICovCisJcmV0dXJuIFJFR19FUkFOR0U7CisgICAgfQorICBlbGVtLT50eXBlID0gU0JfQ0hBUjsKKyAgZWxlbS0+b3ByLmNoID0gdG9rZW4tPm9wci5jOworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKy8qIFBhcnNlIGEgYnJhY2tldCBzeW1ib2wgaW4gdGhlIGJyYWNrZXQgZXhwcmVzc2lvbi4gIEJyYWNrZXQgc3ltYm9scyBhcmUKKyAgIHN1Y2ggYXMgWzo8Y2hhcmFjdGVyX2NsYXNzPjpdLCBbLjxjb2xsYXRpbmdfZWxlbWVudD4uXSwgYW5kCisgICBbPTxlcXVpdmFsZW50X2NsYXNzPj1dLiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK3BhcnNlX2JyYWNrZXRfc3ltYm9sIChicmFja2V0X2VsZW1fdCAqZWxlbSwgcmVfc3RyaW5nX3QgKnJlZ2V4cCwKKwkJICAgICAgcmVfdG9rZW5fdCAqdG9rZW4pCit7CisgIHVuc2lnbmVkIGNoYXIgY2gsIGRlbGltID0gdG9rZW4tPm9wci5jOworICBpbnQgaSA9IDA7CisgIGlmIChyZV9zdHJpbmdfZW9pKHJlZ2V4cCkpCisgICAgcmV0dXJuIFJFR19FQlJBQ0s7CisgIGZvciAoOzsgKytpKQorICAgIHsKKyAgICAgIGlmIChpID49IEJSQUNLRVRfTkFNRV9CVUZfU0laRSkKKwlyZXR1cm4gUkVHX0VCUkFDSzsKKyAgICAgIGlmICh0b2tlbi0+dHlwZSA9PSBPUF9PUEVOX0NIQVJfQ0xBU1MpCisJY2ggPSByZV9zdHJpbmdfZmV0Y2hfYnl0ZV9jYXNlIChyZWdleHApOworICAgICAgZWxzZQorCWNoID0gcmVfc3RyaW5nX2ZldGNoX2J5dGUgKHJlZ2V4cCk7CisgICAgICBpZiAocmVfc3RyaW5nX2VvaShyZWdleHApKQorCXJldHVybiBSRUdfRUJSQUNLOworICAgICAgaWYgKGNoID09IGRlbGltICYmIHJlX3N0cmluZ19wZWVrX2J5dGUgKHJlZ2V4cCwgMCkgPT0gJ10nKQorCWJyZWFrOworICAgICAgZWxlbS0+b3ByLm5hbWVbaV0gPSBjaDsKKyAgICB9CisgIHJlX3N0cmluZ19za2lwX2J5dGVzIChyZWdleHAsIDEpOworICBlbGVtLT5vcHIubmFtZVtpXSA9ICdcMCc7CisgIHN3aXRjaCAodG9rZW4tPnR5cGUpCisgICAgeworICAgIGNhc2UgT1BfT1BFTl9DT0xMX0VMRU06CisgICAgICBlbGVtLT50eXBlID0gQ09MTF9TWU07CisgICAgICBicmVhazsKKyAgICBjYXNlIE9QX09QRU5fRVFVSVZfQ0xBU1M6CisgICAgICBlbGVtLT50eXBlID0gRVFVSVZfQ0xBU1M7CisgICAgICBicmVhazsKKyAgICBjYXNlIE9QX09QRU5fQ0hBUl9DTEFTUzoKKyAgICAgIGVsZW0tPnR5cGUgPSBDSEFSX0NMQVNTOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICAgIH0KKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCisgIC8qIEhlbHBlciBmdW5jdGlvbiBmb3IgcGFyc2VfYnJhY2tldF9leHAuCisgICAgIEJ1aWxkIHRoZSBlcXVpdmFsZW5jZSBjbGFzcyB3aGljaCBpcyByZXByZXNlbnRlZCBieSBOQU1FLgorICAgICBUaGUgcmVzdWx0IGFyZSB3cml0dGVuIHRvIE1CQ1NFVCBhbmQgU0JDU0VULgorICAgICBFUVVJVl9DTEFTU19BTExPQyBpcyB0aGUgYWxsb2NhdGVkIHNpemUgb2YgbWJjc2V0LT5lcXVpdl9jbGFzc2VzLAorICAgICBpcyBhIHBvaW50ZXIgYXJndW1lbnQgc2luc2Ugd2UgbWF5IHVwZGF0ZSBpdC4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KK2J1aWxkX2VxdWl2X2NsYXNzIChiaXRzZXRfdCBzYmNzZXQsIHJlX2NoYXJzZXRfdCAqbWJjc2V0LAorCQkgICBJZHggKmVxdWl2X2NsYXNzX2FsbG9jLCBjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lKQorI2Vsc2UgLyogbm90IFJFX0VOQUJMRV9JMThOICovCitidWlsZF9lcXVpdl9jbGFzcyAoYml0c2V0X3Qgc2Jjc2V0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lKQorI2VuZGlmIC8qIG5vdCBSRV9FTkFCTEVfSTE4TiAqLworeworI2lmZGVmIF9MSUJDCisgIHVpbnQzMl90IG5ydWxlcyA9IF9OTF9DVVJSRU5UX1dPUkQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX05SVUxFUyk7CisgIGlmIChucnVsZXMgIT0gMCkKKyAgICB7CisgICAgICBjb25zdCBpbnQzMl90ICp0YWJsZSwgKmluZGlyZWN0OworICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqd2VpZ2h0cywgKmV4dHJhLCAqY3A7CisgICAgICB1bnNpZ25lZCBjaGFyIGNoYXJfYnVmWzJdOworICAgICAgaW50MzJfdCBpZHgxLCBpZHgyOworICAgICAgdW5zaWduZWQgaW50IGNoOworICAgICAgc2l6ZV90IGxlbjsKKyAgICAgIC8qIFRoaXMgI2luY2x1ZGUgZGVmaW5lcyBhIGxvY2FsIGZ1bmN0aW9uISAgKi8KKyMgaW5jbHVkZSA8bG9jYWxlL3dlaWdodC5oPgorICAgICAgLyogQ2FsY3VsYXRlIHRoZSBpbmRleCBmb3IgZXF1aXZhbGVuY2UgY2xhc3MuICAqLworICAgICAgY3AgPSBuYW1lOworICAgICAgdGFibGUgPSAoY29uc3QgaW50MzJfdCAqKSBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfVEFCTEVNQik7CisgICAgICB3ZWlnaHRzID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsCisJCQkJCSAgICAgICBfTkxfQ09MTEFURV9XRUlHSFRNQik7CisgICAgICBleHRyYSA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLAorCQkJCQkJICAgX05MX0NPTExBVEVfRVhUUkFNQik7CisgICAgICBpbmRpcmVjdCA9IChjb25zdCBpbnQzMl90ICopIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLAorCQkJCQkJX05MX0NPTExBVEVfSU5ESVJFQ1RNQik7CisgICAgICBpZHgxID0gZmluZGlkeCAoJmNwKTsKKyAgICAgIGlmIChCRSAoaWR4MSA9PSAwIHx8IGNwIDwgbmFtZSArIHN0cmxlbiAoKGNvbnN0IGNoYXIgKikgbmFtZSksIDApKQorCS8qIFRoaXMgaXNuJ3QgYSB2YWxpZCBjaGFyYWN0ZXIuICAqLworCXJldHVybiBSRUdfRUNPTExBVEU7CisKKyAgICAgIC8qIEJ1aWxkIHNpbmdsZSBieXRlIG1hdGNpbmcgdGFibGUgZm9yIHRoaXMgZXF1aXZhbGVuY2UgY2xhc3MuICAqLworICAgICAgY2hhcl9idWZbMV0gPSAodW5zaWduZWQgY2hhcikgJ1wwJzsKKyAgICAgIGxlbiA9IHdlaWdodHNbaWR4MV07CisgICAgICBmb3IgKGNoID0gMDsgY2ggPCBTQkNfTUFYOyArK2NoKQorCXsKKwkgIGNoYXJfYnVmWzBdID0gY2g7CisJICBjcCA9IGNoYXJfYnVmOworCSAgaWR4MiA9IGZpbmRpZHggKCZjcCk7CisvKgorCSAgaWR4MiA9IHRhYmxlW2NoXTsKKyovCisJICBpZiAoaWR4MiA9PSAwKQorCSAgICAvKiBUaGlzIGlzbid0IGEgdmFsaWQgY2hhcmFjdGVyLiAgKi8KKwkgICAgY29udGludWU7CisJICBpZiAobGVuID09IHdlaWdodHNbaWR4Ml0pCisJICAgIHsKKwkgICAgICBpbnQgY250ID0gMDsKKwkgICAgICB3aGlsZSAoY250IDw9IGxlbiAmJgorCQkgICAgIHdlaWdodHNbaWR4MSArIDEgKyBjbnRdID09IHdlaWdodHNbaWR4MiArIDEgKyBjbnRdKQorCQkrK2NudDsKKworCSAgICAgIGlmIChjbnQgPiBsZW4pCisJCWJpdHNldF9zZXQgKHNiY3NldCwgY2gpOworCSAgICB9CisJfQorICAgICAgLyogQ2hlY2sgd2hldGhlciB0aGUgYXJyYXkgaGFzIGVub3VnaCBzcGFjZS4gICovCisgICAgICBpZiAoQkUgKCplcXVpdl9jbGFzc19hbGxvYyA9PSBtYmNzZXQtPm5lcXVpdl9jbGFzc2VzLCAwKSkKKwl7CisJICAvKiBOb3QgZW5vdWdoLCByZWFsbG9jIGl0LiAgKi8KKwkgIC8qICsxIGluIGNhc2Ugb2YgbWJjc2V0LT5uZXF1aXZfY2xhc3NlcyBpcyAwLiAgKi8KKwkgIElkeCBuZXdfZXF1aXZfY2xhc3NfYWxsb2MgPSAyICogbWJjc2V0LT5uZXF1aXZfY2xhc3NlcyArIDE7CisJICAvKiBVc2UgcmVhbGxvYyBzaW5jZSB0aGUgYXJyYXkgaXMgTlVMTCBpZiAqYWxsb2MgPT0gMC4gICovCisJICBpbnQzMl90ICpuZXdfZXF1aXZfY2xhc3NlcyA9IHJlX3JlYWxsb2MgKG1iY3NldC0+ZXF1aXZfY2xhc3NlcywKKwkJCQkJCSAgIGludDMyX3QsCisJCQkJCQkgICBuZXdfZXF1aXZfY2xhc3NfYWxsb2MpOworCSAgaWYgKEJFIChuZXdfZXF1aXZfY2xhc3NlcyA9PSBOVUxMLCAwKSkKKwkgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisJICBtYmNzZXQtPmVxdWl2X2NsYXNzZXMgPSBuZXdfZXF1aXZfY2xhc3NlczsKKwkgICplcXVpdl9jbGFzc19hbGxvYyA9IG5ld19lcXVpdl9jbGFzc19hbGxvYzsKKwl9CisgICAgICBtYmNzZXQtPmVxdWl2X2NsYXNzZXNbbWJjc2V0LT5uZXF1aXZfY2xhc3NlcysrXSA9IGlkeDE7CisgICAgfQorICBlbHNlCisjZW5kaWYgLyogX0xJQkMgKi8KKyAgICB7CisgICAgICBpZiAoQkUgKHN0cmxlbiAoKGNvbnN0IGNoYXIgKikgbmFtZSkgIT0gMSwgMCkpCisJcmV0dXJuIFJFR19FQ09MTEFURTsKKyAgICAgIGJpdHNldF9zZXQgKHNiY3NldCwgKm5hbWUpOworICAgIH0KKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCisgIC8qIEhlbHBlciBmdW5jdGlvbiBmb3IgcGFyc2VfYnJhY2tldF9leHAuCisgICAgIEJ1aWxkIHRoZSBjaGFyYWN0ZXIgY2xhc3Mgd2hpY2ggaXMgcmVwcmVzZW50ZWQgYnkgTkFNRS4KKyAgICAgVGhlIHJlc3VsdCBhcmUgd3JpdHRlbiB0byBNQkNTRVQgYW5kIFNCQ1NFVC4KKyAgICAgQ0hBUl9DTEFTU19BTExPQyBpcyB0aGUgYWxsb2NhdGVkIHNpemUgb2YgbWJjc2V0LT5jaGFyX2NsYXNzZXMsCisgICAgIGlzIGEgcG9pbnRlciBhcmd1bWVudCBzaW5zZSB3ZSBtYXkgdXBkYXRlIGl0LiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorYnVpbGRfY2hhcmNsYXNzIChSRV9UUkFOU0xBVEVfVFlQRSB0cmFucywgYml0c2V0X3Qgc2Jjc2V0LAorCQkgcmVfY2hhcnNldF90ICptYmNzZXQsIElkeCAqY2hhcl9jbGFzc19hbGxvYywKKwkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNsYXNzX25hbWUsIHJlZ19zeW50YXhfdCBzeW50YXgpCisjZWxzZSAvKiBub3QgUkVfRU5BQkxFX0kxOE4gKi8KK2J1aWxkX2NoYXJjbGFzcyAoUkVfVFJBTlNMQVRFX1RZUEUgdHJhbnMsIGJpdHNldF90IHNiY3NldCwKKwkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNsYXNzX25hbWUsIHJlZ19zeW50YXhfdCBzeW50YXgpCisjZW5kaWYgLyogbm90IFJFX0VOQUJMRV9JMThOICovCit7CisgIGludCBpOworICBjb25zdCBjaGFyICpuYW1lID0gKGNvbnN0IGNoYXIgKikgY2xhc3NfbmFtZTsKKworICAvKiBJbiBjYXNlIG9mIFJFR19JQ0FTRSAidXBwZXIiIGFuZCAibG93ZXIiIG1hdGNoIHRoZSBib3RoIG9mCisgICAgIHVwcGVyIGFuZCBsb3dlciBjYXNlcy4gICovCisgIGlmICgoc3ludGF4ICYgUkVfSUNBU0UpCisgICAgICAmJiAoc3RyY21wIChuYW1lLCAidXBwZXIiKSA9PSAwIHx8IHN0cmNtcCAobmFtZSwgImxvd2VyIikgPT0gMCkpCisgICAgbmFtZSA9ICJhbHBoYSI7CisKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAvKiBDaGVjayB0aGUgc3BhY2Ugb2YgdGhlIGFycmF5cy4gICovCisgIGlmIChCRSAoKmNoYXJfY2xhc3NfYWxsb2MgPT0gbWJjc2V0LT5uY2hhcl9jbGFzc2VzLCAwKSkKKyAgICB7CisgICAgICAvKiBOb3QgZW5vdWdoLCByZWFsbG9jIGl0LiAgKi8KKyAgICAgIC8qICsxIGluIGNhc2Ugb2YgbWJjc2V0LT5uY2hhcl9jbGFzc2VzIGlzIDAuICAqLworICAgICAgSWR4IG5ld19jaGFyX2NsYXNzX2FsbG9jID0gMiAqIG1iY3NldC0+bmNoYXJfY2xhc3NlcyArIDE7CisgICAgICAvKiBVc2UgcmVhbGxvYyBzaW5jZSBhcnJheSBpcyBOVUxMIGlmICphbGxvYyA9PSAwLiAgKi8KKyAgICAgIHdjdHlwZV90ICpuZXdfY2hhcl9jbGFzc2VzID0gcmVfcmVhbGxvYyAobWJjc2V0LT5jaGFyX2NsYXNzZXMsIHdjdHlwZV90LAorCQkJCQkgICAgICAgbmV3X2NoYXJfY2xhc3NfYWxsb2MpOworICAgICAgaWYgKEJFIChuZXdfY2hhcl9jbGFzc2VzID09IE5VTEwsIDApKQorCXJldHVybiBSRUdfRVNQQUNFOworICAgICAgbWJjc2V0LT5jaGFyX2NsYXNzZXMgPSBuZXdfY2hhcl9jbGFzc2VzOworICAgICAgKmNoYXJfY2xhc3NfYWxsb2MgPSBuZXdfY2hhcl9jbGFzc19hbGxvYzsKKyAgICB9CisgIG1iY3NldC0+Y2hhcl9jbGFzc2VzW21iY3NldC0+bmNoYXJfY2xhc3NlcysrXSA9IF9fd2N0eXBlIChuYW1lKTsKKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworCisjZGVmaW5lIEJVSUxEX0NIQVJDTEFTU19MT09QKGN0eXBlX2Z1bmMpCVwKKyAgZG8gewkJCQkJCVwKKyAgICBpZiAoQkUgKHRyYW5zICE9IE5VTEwsIDApKQkJCVwKKyAgICAgIHsJCQkJCQlcCisJZm9yIChpID0gMDsgaSA8IFNCQ19NQVg7ICsraSkJCVwKKwkgIGlmIChjdHlwZV9mdW5jIChpKSkJCQlcCisJICAgIGJpdHNldF9zZXQgKHNiY3NldCwgdHJhbnNbaV0pOwlcCisgICAgICB9CQkJCQkJXAorICAgIGVsc2UJCQkJCVwKKyAgICAgIHsJCQkJCQlcCisJZm9yIChpID0gMDsgaSA8IFNCQ19NQVg7ICsraSkJCVwKKwkgIGlmIChjdHlwZV9mdW5jIChpKSkJCQlcCisJICAgIGJpdHNldF9zZXQgKHNiY3NldCwgaSk7CQlcCisgICAgICB9CQkJCQkJXAorICB9IHdoaWxlICgwKQorCisgIGlmIChzdHJjbXAgKG5hbWUsICJhbG51bSIpID09IDApCisgICAgQlVJTERfQ0hBUkNMQVNTX0xPT1AgKGlzYWxudW0pOworICBlbHNlIGlmIChzdHJjbXAgKG5hbWUsICJjbnRybCIpID09IDApCisgICAgQlVJTERfQ0hBUkNMQVNTX0xPT1AgKGlzY250cmwpOworICBlbHNlIGlmIChzdHJjbXAgKG5hbWUsICJsb3dlciIpID09IDApCisgICAgQlVJTERfQ0hBUkNMQVNTX0xPT1AgKGlzbG93ZXIpOworICBlbHNlIGlmIChzdHJjbXAgKG5hbWUsICJzcGFjZSIpID09IDApCisgICAgQlVJTERfQ0hBUkNMQVNTX0xPT1AgKGlzc3BhY2UpOworICBlbHNlIGlmIChzdHJjbXAgKG5hbWUsICJhbHBoYSIpID09IDApCisgICAgQlVJTERfQ0hBUkNMQVNTX0xPT1AgKGlzYWxwaGEpOworICBlbHNlIGlmIChzdHJjbXAgKG5hbWUsICJkaWdpdCIpID09IDApCisgICAgQlVJTERfQ0hBUkNMQVNTX0xPT1AgKGlzZGlnaXQpOworICBlbHNlIGlmIChzdHJjbXAgKG5hbWUsICJwcmludCIpID09IDApCisgICAgQlVJTERfQ0hBUkNMQVNTX0xPT1AgKGlzcHJpbnQpOworICBlbHNlIGlmIChzdHJjbXAgKG5hbWUsICJ1cHBlciIpID09IDApCisgICAgQlVJTERfQ0hBUkNMQVNTX0xPT1AgKGlzdXBwZXIpOworICBlbHNlIGlmIChzdHJjbXAgKG5hbWUsICJibGFuayIpID09IDApCisgICAgQlVJTERfQ0hBUkNMQVNTX0xPT1AgKGlzYmxhbmspOworICBlbHNlIGlmIChzdHJjbXAgKG5hbWUsICJncmFwaCIpID09IDApCisgICAgQlVJTERfQ0hBUkNMQVNTX0xPT1AgKGlzZ3JhcGgpOworICBlbHNlIGlmIChzdHJjbXAgKG5hbWUsICJwdW5jdCIpID09IDApCisgICAgQlVJTERfQ0hBUkNMQVNTX0xPT1AgKGlzcHVuY3QpOworICBlbHNlIGlmIChzdHJjbXAgKG5hbWUsICJ4ZGlnaXQiKSA9PSAwKQorICAgIEJVSUxEX0NIQVJDTEFTU19MT09QIChpc3hkaWdpdCk7CisgIGVsc2UKKyAgICByZXR1cm4gUkVHX0VDVFlQRTsKKworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKK3N0YXRpYyBiaW5fdHJlZV90ICoKK2J1aWxkX2NoYXJjbGFzc19vcCAocmVfZGZhX3QgKmRmYSwgUkVfVFJBTlNMQVRFX1RZUEUgdHJhbnMsCisJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpjbGFzc19uYW1lLAorCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZXh0cmEsIGJvb2wgbm9uX21hdGNoLAorCQkgICAgcmVnX2VycmNvZGVfdCAqZXJyKQoreworICByZV9iaXRzZXRfcHRyX3Qgc2Jjc2V0OworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIHJlX2NoYXJzZXRfdCAqbWJjc2V0OworICBJZHggYWxsb2MgPSAwOworI2VuZGlmIC8qIG5vdCBSRV9FTkFCTEVfSTE4TiAqLworICByZWdfZXJyY29kZV90IHJldDsKKyAgcmVfdG9rZW5fdCBicl90b2tlbjsKKyAgYmluX3RyZWVfdCAqdHJlZTsKKworICBzYmNzZXQgPSAocmVfYml0c2V0X3B0cl90KSBjYWxsb2MgKHNpemVvZiAoYml0c2V0X3QpLCAxKTsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICBtYmNzZXQgPSAocmVfY2hhcnNldF90ICopIGNhbGxvYyAoc2l6ZW9mIChyZV9jaGFyc2V0X3QpLCAxKTsKKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgaWYgKEJFIChzYmNzZXQgPT0gTlVMTCB8fCBtYmNzZXQgPT0gTlVMTCwgMCkpCisjZWxzZSAvKiBub3QgUkVfRU5BQkxFX0kxOE4gKi8KKyAgaWYgKEJFIChzYmNzZXQgPT0gTlVMTCwgMCkpCisjZW5kaWYgLyogbm90IFJFX0VOQUJMRV9JMThOICovCisgICAgeworICAgICAgKmVyciA9IFJFR19FU1BBQ0U7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgaWYgKG5vbl9tYXRjaCkKKyAgICB7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgICAgIG1iY3NldC0+bm9uX21hdGNoID0gMTsKKyNlbmRpZiAvKiBub3QgUkVfRU5BQkxFX0kxOE4gKi8KKyAgICB9CisKKyAgLyogV2UgZG9uJ3QgY2FyZSB0aGUgc3ludGF4IGluIHRoaXMgY2FzZS4gICovCisgIHJldCA9IGJ1aWxkX2NoYXJjbGFzcyAodHJhbnMsIHNiY3NldCwKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorCQkJIG1iY3NldCwgJmFsbG9jLAorI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisJCQkgY2xhc3NfbmFtZSwgMCk7CisKKyAgaWYgKEJFIChyZXQgIT0gUkVHX05PRVJST1IsIDApKQorICAgIHsKKyAgICAgIHJlX2ZyZWUgKHNiY3NldCk7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgICAgIGZyZWVfY2hhcnNldCAobWJjc2V0KTsKKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworICAgICAgKmVyciA9IHJldDsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgLyogXHcgbWF0Y2ggJ18nIGFsc28uICAqLworICBmb3IgKDsgKmV4dHJhOyBleHRyYSsrKQorICAgIGJpdHNldF9zZXQgKHNiY3NldCwgKmV4dHJhKTsKKworICAvKiBJZiBpdCBpcyBub24tbWF0Y2hpbmcgbGlzdC4gICovCisgIGlmIChub25fbWF0Y2gpCisgICAgYml0c2V0X25vdCAoc2Jjc2V0KTsKKworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIC8qIEVuc3VyZSBvbmx5IHNpbmdsZSBieXRlIGNoYXJhY3RlcnMgYXJlIHNldC4gICovCisgIGlmIChkZmEtPm1iX2N1cl9tYXggPiAxKQorICAgIGJpdHNldF9tYXNrIChzYmNzZXQsIGRmYS0+c2JfY2hhcik7CisjZW5kaWYKKworICAvKiBCdWlsZCBhIHRyZWUgZm9yIHNpbXBsZSBicmFja2V0LiAgKi8KKyAgYnJfdG9rZW4udHlwZSA9IFNJTVBMRV9CUkFDS0VUOworICBicl90b2tlbi5vcHIuc2Jjc2V0ID0gc2Jjc2V0OworICB0cmVlID0gY3JlYXRlX3Rva2VuX3RyZWUgKGRmYSwgTlVMTCwgTlVMTCwgJmJyX3Rva2VuKTsKKyAgaWYgKEJFICh0cmVlID09IE5VTEwsIDApKQorICAgIGdvdG8gYnVpbGRfd29yZF9vcF9lc3BhY2U7CisKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICBpZiAoZGZhLT5tYl9jdXJfbWF4ID4gMSkKKyAgICB7CisgICAgICBiaW5fdHJlZV90ICptYmNfdHJlZTsKKyAgICAgIC8qIEJ1aWxkIGEgdHJlZSBmb3IgY29tcGxleCBicmFja2V0LiAgKi8KKyAgICAgIGJyX3Rva2VuLnR5cGUgPSBDT01QTEVYX0JSQUNLRVQ7CisgICAgICBicl90b2tlbi5vcHIubWJjc2V0ID0gbWJjc2V0OworICAgICAgZGZhLT5oYXNfbWJfbm9kZSA9IDE7CisgICAgICBtYmNfdHJlZSA9IGNyZWF0ZV90b2tlbl90cmVlIChkZmEsIE5VTEwsIE5VTEwsICZicl90b2tlbik7CisgICAgICBpZiAoQkUgKG1iY190cmVlID09IE5VTEwsIDApKQorCWdvdG8gYnVpbGRfd29yZF9vcF9lc3BhY2U7CisgICAgICAvKiBUaGVuIGpvaW4gdGhlbSBieSBBTFQgbm9kZS4gICovCisgICAgICB0cmVlID0gY3JlYXRlX3RyZWUgKGRmYSwgdHJlZSwgbWJjX3RyZWUsIE9QX0FMVCk7CisgICAgICBpZiAoQkUgKG1iY190cmVlICE9IE5VTEwsIDEpKQorCXJldHVybiB0cmVlOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGZyZWVfY2hhcnNldCAobWJjc2V0KTsKKyAgICAgIHJldHVybiB0cmVlOworICAgIH0KKyNlbHNlIC8qIG5vdCBSRV9FTkFCTEVfSTE4TiAqLworICByZXR1cm4gdHJlZTsKKyNlbmRpZiAvKiBub3QgUkVfRU5BQkxFX0kxOE4gKi8KKworIGJ1aWxkX3dvcmRfb3BfZXNwYWNlOgorICByZV9mcmVlIChzYmNzZXQpOworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIGZyZWVfY2hhcnNldCAobWJjc2V0KTsKKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworICAqZXJyID0gUkVHX0VTUEFDRTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIFRoaXMgaXMgaW50ZW5kZWQgZm9yIHRoZSBleHByZXNzaW9ucyBsaWtlICJhezEsM30iLgorICAgRmV0Y2ggYSBudW1iZXIgZnJvbSBgaW5wdXQnLCBhbmQgcmV0dXJuIHRoZSBudW1iZXIuCisgICBSZXR1cm4gUkVHX01JU1NJTkcgaWYgdGhlIG51bWJlciBmaWVsZCBpcyBlbXB0eSBsaWtlICJ7LDF9Ii4KKyAgIFJldHVybiBSRUdfRVJST1IgaWYgYW4gZXJyb3Igb2NjdXJyZWQuICAqLworCitzdGF0aWMgSWR4CitmZXRjaF9udW1iZXIgKHJlX3N0cmluZ190ICppbnB1dCwgcmVfdG9rZW5fdCAqdG9rZW4sIHJlZ19zeW50YXhfdCBzeW50YXgpCit7CisgIElkeCBudW0gPSBSRUdfTUlTU0lORzsKKyAgdW5zaWduZWQgY2hhciBjOworICB3aGlsZSAoMSkKKyAgICB7CisgICAgICBmZXRjaF90b2tlbiAodG9rZW4sIGlucHV0LCBzeW50YXgpOworICAgICAgYyA9IHRva2VuLT5vcHIuYzsKKyAgICAgIGlmIChCRSAodG9rZW4tPnR5cGUgPT0gRU5EX09GX1JFLCAwKSkKKwlyZXR1cm4gUkVHX0VSUk9SOworICAgICAgaWYgKHRva2VuLT50eXBlID09IE9QX0NMT1NFX0RVUF9OVU0gfHwgYyA9PSAnLCcpCisJYnJlYWs7CisgICAgICBudW0gPSAoKHRva2VuLT50eXBlICE9IENIQVJBQ1RFUiB8fCBjIDwgJzAnIHx8ICc5JyA8IGMKKwkgICAgICB8fCBudW0gPT0gUkVHX0VSUk9SKQorCSAgICAgPyBSRUdfRVJST1IKKwkgICAgIDogKChudW0gPT0gUkVHX01JU1NJTkcpID8gYyAtICcwJyA6IG51bSAqIDEwICsgYyAtICcwJykpOworICAgICAgbnVtID0gKG51bSA+IFJFX0RVUF9NQVgpID8gUkVHX0VSUk9SIDogbnVtOworICAgIH0KKyAgcmV0dXJuIG51bTsKK30KKwwKKyNpZmRlZiBSRV9FTkFCTEVfSTE4Tgorc3RhdGljIHZvaWQKK2ZyZWVfY2hhcnNldCAocmVfY2hhcnNldF90ICpjc2V0KQoreworICByZV9mcmVlIChjc2V0LT5tYmNoYXJzKTsKKyMgaWZkZWYgX0xJQkMKKyAgcmVfZnJlZSAoY3NldC0+Y29sbF9zeW1zKTsKKyAgcmVfZnJlZSAoY3NldC0+ZXF1aXZfY2xhc3Nlcyk7CisgIHJlX2ZyZWUgKGNzZXQtPnJhbmdlX3N0YXJ0cyk7CisgIHJlX2ZyZWUgKGNzZXQtPnJhbmdlX2VuZHMpOworIyBlbmRpZgorICByZV9mcmVlIChjc2V0LT5jaGFyX2NsYXNzZXMpOworICByZV9mcmVlIChjc2V0KTsKK30KKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworDAorLyogRnVuY3Rpb25zIGZvciBiaW5hcnkgdHJlZSBvcGVyYXRpb24uICAqLworCisvKiBDcmVhdGUgYSB0cmVlIG5vZGUuICAqLworCitzdGF0aWMgYmluX3RyZWVfdCAqCitjcmVhdGVfdHJlZSAocmVfZGZhX3QgKmRmYSwgYmluX3RyZWVfdCAqbGVmdCwgYmluX3RyZWVfdCAqcmlnaHQsCisJICAgICByZV90b2tlbl90eXBlX3QgdHlwZSkKK3sKKyAgcmVfdG9rZW5fdCB0OworICB0LnR5cGUgPSB0eXBlOworICByZXR1cm4gY3JlYXRlX3Rva2VuX3RyZWUgKGRmYSwgbGVmdCwgcmlnaHQsICZ0KTsKK30KKworc3RhdGljIGJpbl90cmVlX3QgKgorY3JlYXRlX3Rva2VuX3RyZWUgKHJlX2RmYV90ICpkZmEsIGJpbl90cmVlX3QgKmxlZnQsIGJpbl90cmVlX3QgKnJpZ2h0LAorCQkgICBjb25zdCByZV90b2tlbl90ICp0b2tlbikKK3sKKyAgYmluX3RyZWVfdCAqdHJlZTsKKyAgaWYgKEJFIChkZmEtPnN0cl90cmVlX3N0b3JhZ2VfaWR4ID09IEJJTl9UUkVFX1NUT1JBR0VfU0laRSwgMCkpCisgICAgeworICAgICAgYmluX3RyZWVfc3RvcmFnZV90ICpzdG9yYWdlID0gcmVfbWFsbG9jIChiaW5fdHJlZV9zdG9yYWdlX3QsIDEpOworCisgICAgICBpZiAoc3RvcmFnZSA9PSBOVUxMKQorCXJldHVybiBOVUxMOworICAgICAgc3RvcmFnZS0+bmV4dCA9IGRmYS0+c3RyX3RyZWVfc3RvcmFnZTsKKyAgICAgIGRmYS0+c3RyX3RyZWVfc3RvcmFnZSA9IHN0b3JhZ2U7CisgICAgICBkZmEtPnN0cl90cmVlX3N0b3JhZ2VfaWR4ID0gMDsKKyAgICB9CisgIHRyZWUgPSAmZGZhLT5zdHJfdHJlZV9zdG9yYWdlLT5kYXRhW2RmYS0+c3RyX3RyZWVfc3RvcmFnZV9pZHgrK107CisKKyAgdHJlZS0+cGFyZW50ID0gTlVMTDsKKyAgdHJlZS0+bGVmdCA9IGxlZnQ7CisgIHRyZWUtPnJpZ2h0ID0gcmlnaHQ7CisgIHRyZWUtPnRva2VuID0gKnRva2VuOworICB0cmVlLT50b2tlbi5kdXBsaWNhdGVkID0gMDsKKyAgdHJlZS0+dG9rZW4ub3B0X3N1YmV4cCA9IDA7CisgIHRyZWUtPmZpcnN0ID0gTlVMTDsKKyAgdHJlZS0+bmV4dCA9IE5VTEw7CisgIHRyZWUtPm5vZGVfaWR4ID0gUkVHX01JU1NJTkc7CisKKyAgaWYgKGxlZnQgIT0gTlVMTCkKKyAgICBsZWZ0LT5wYXJlbnQgPSB0cmVlOworICBpZiAocmlnaHQgIT0gTlVMTCkKKyAgICByaWdodC0+cGFyZW50ID0gdHJlZTsKKyAgcmV0dXJuIHRyZWU7Cit9CisKKy8qIE1hcmsgdGhlIHRyZWUgU1JDIGFzIGFuIG9wdGlvbmFsIHN1YmV4cHJlc3Npb24uCisgICBUbyBiZSBjYWxsZWQgZnJvbSBwcmVvcmRlciBvciBwb3N0b3JkZXIuICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAorbWFya19vcHRfc3ViZXhwICh2b2lkICpleHRyYSwgYmluX3RyZWVfdCAqbm9kZSkKK3sKKyAgSWR4IGlkeCA9IChJZHgpIChsb25nKSBleHRyYTsKKyAgaWYgKG5vZGUtPnRva2VuLnR5cGUgPT0gU1VCRVhQICYmIG5vZGUtPnRva2VuLm9wci5pZHggPT0gaWR4KQorICAgIG5vZGUtPnRva2VuLm9wdF9zdWJleHAgPSAxOworCisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworLyogRnJlZSB0aGUgYWxsb2NhdGVkIG1lbW9yeSBpbnNpZGUgTk9ERS4gKi8KKworc3RhdGljIHZvaWQKK2ZyZWVfdG9rZW4gKHJlX3Rva2VuX3QgKm5vZGUpCit7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgaWYgKG5vZGUtPnR5cGUgPT0gQ09NUExFWF9CUkFDS0VUICYmIG5vZGUtPmR1cGxpY2F0ZWQgPT0gMCkKKyAgICBmcmVlX2NoYXJzZXQgKG5vZGUtPm9wci5tYmNzZXQpOworICBlbHNlCisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKyAgICBpZiAobm9kZS0+dHlwZSA9PSBTSU1QTEVfQlJBQ0tFVCAmJiBub2RlLT5kdXBsaWNhdGVkID09IDApCisgICAgICByZV9mcmVlIChub2RlLT5vcHIuc2Jjc2V0KTsKK30KKworLyogV29ya2VyIGZ1bmN0aW9uIGZvciB0cmVlIHdhbGtpbmcuICBGcmVlIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGluc2lkZSBOT0RFCisgICBhbmQgaXRzIGNoaWxkcmVuLiAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAorZnJlZV90cmVlICh2b2lkICpleHRyYSwgYmluX3RyZWVfdCAqbm9kZSkKK3sKKyAgZnJlZV90b2tlbiAoJm5vZGUtPnRva2VuKTsKKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCisKKy8qIER1cGxpY2F0ZSB0aGUgbm9kZSBTUkMsIGFuZCByZXR1cm4gbmV3IG5vZGUuICBUaGlzIGlzIGEgcHJlb3JkZXIKKyAgIHZpc2l0IHNpbWlsYXIgdG8gdGhlIG9uZSBpbXBsZW1lbnRlZCBieSB0aGUgZ2VuZXJpYyB2aXNpdG9yLCBidXQKKyAgIHdlIG5lZWQgbW9yZSBpbmZyYXN0cnVjdHVyZSB0byBtYWludGFpbiB0d28gcGFyYWxsZWwgdHJlZXMgLS0tIHNvLAorICAgaXQncyBlYXNpZXIgdG8gZHVwbGljYXRlLiAgKi8KKworc3RhdGljIGJpbl90cmVlX3QgKgorZHVwbGljYXRlX3RyZWUgKGNvbnN0IGJpbl90cmVlX3QgKnJvb3QsIHJlX2RmYV90ICpkZmEpCit7CisgIGNvbnN0IGJpbl90cmVlX3QgKm5vZGU7CisgIGJpbl90cmVlX3QgKmR1cF9yb290OworICBiaW5fdHJlZV90ICoqcF9uZXcgPSAmZHVwX3Jvb3QsICpkdXBfbm9kZSA9IHJvb3QtPnBhcmVudDsKKworICBmb3IgKG5vZGUgPSByb290OyA7ICkKKyAgICB7CisgICAgICAvKiBDcmVhdGUgYSBuZXcgdHJlZSBhbmQgbGluayBpdCBiYWNrIHRvIHRoZSBjdXJyZW50IHBhcmVudC4gICovCisgICAgICAqcF9uZXcgPSBjcmVhdGVfdG9rZW5fdHJlZSAoZGZhLCBOVUxMLCBOVUxMLCAmbm9kZS0+dG9rZW4pOworICAgICAgaWYgKCpwX25ldyA9PSBOVUxMKQorCXJldHVybiBOVUxMOworICAgICAgKCpwX25ldyktPnBhcmVudCA9IGR1cF9ub2RlOworICAgICAgKCpwX25ldyktPnRva2VuLmR1cGxpY2F0ZWQgPSAxOworICAgICAgZHVwX25vZGUgPSAqcF9uZXc7CisKKyAgICAgIC8qIEdvIHRvIHRoZSBsZWZ0IG5vZGUsIG9yIHVwIGFuZCB0byB0aGUgcmlnaHQuICAqLworICAgICAgaWYgKG5vZGUtPmxlZnQpCisJeworCSAgbm9kZSA9IG5vZGUtPmxlZnQ7CisJICBwX25ldyA9ICZkdXBfbm9kZS0+bGVmdDsKKwl9CisgICAgICBlbHNlCisJeworCSAgY29uc3QgYmluX3RyZWVfdCAqcHJldiA9IE5VTEw7CisJICB3aGlsZSAobm9kZS0+cmlnaHQgPT0gcHJldiB8fCBub2RlLT5yaWdodCA9PSBOVUxMKQorCSAgICB7CisJICAgICAgcHJldiA9IG5vZGU7CisJICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudDsKKwkgICAgICBkdXBfbm9kZSA9IGR1cF9ub2RlLT5wYXJlbnQ7CisJICAgICAgaWYgKCFub2RlKQorCSAgICAgICAgcmV0dXJuIGR1cF9yb290OworCSAgICB9CisJICBub2RlID0gbm9kZS0+cmlnaHQ7CisJICBwX25ldyA9ICZkdXBfbm9kZS0+cmlnaHQ7CisJfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWIvcmVnZXguYyBiL3BhcnRlZC0xLjguNy9saWIvcmVnZXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGViNzI2Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYi9yZWdleC5jCkBAIC0wLDAgKzEsNzEgQEAKKy8qIEV4dGVuZGVkIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGluZyBhbmQgc2VhcmNoIGxpYnJhcnkuCisgICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMsIDIwMDUsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKyAgIENvbnRyaWJ1dGVkIGJ5IElzYW11IEhhc2VnYXdhIDxpc2FtdUB5YW1hdG8uaWJtLmNvbT4uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworLyogTWFrZSBzdXJlIG5vb25lIGNvbXBpbGVzIHRoaXMgY29kZSB3aXRoIGEgQysrIGNvbXBpbGVyLiAgKi8KKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgX0xJQkMKKyMgZXJyb3IgIlRoaXMgaXMgQyBjb2RlLCB1c2UgYSBDIGNvbXBpbGVyIgorI2VuZGlmCisKKyNpZmRlZiBfTElCQworLyogV2UgaGF2ZSB0byBrZWVwIHRoZSBuYW1lc3BhY2UgY2xlYW4uICAqLworIyBkZWZpbmUgcmVnZnJlZShwcmVnKSBfX3JlZ2ZyZWUgKHByZWcpCisjIGRlZmluZSByZWdleGVjKHByLCBzdCwgbm0sIHBtLCBlZikgX19yZWdleGVjIChwciwgc3QsIG5tLCBwbSwgZWYpCisjIGRlZmluZSByZWdjb21wKHByZWcsIHBhdHRlcm4sIGNmbGFncykgX19yZWdjb21wIChwcmVnLCBwYXR0ZXJuLCBjZmxhZ3MpCisjIGRlZmluZSByZWdlcnJvcihlcnJjb2RlLCBwcmVnLCBlcnJidWYsIGVycmJ1Zl9zaXplKSBcCisJX19yZWdlcnJvcihlcnJjb2RlLCBwcmVnLCBlcnJidWYsIGVycmJ1Zl9zaXplKQorIyBkZWZpbmUgcmVfc2V0X3JlZ2lzdGVycyhidSwgcmUsIG51LCBzdCwgZW4pIFwKKwlfX3JlX3NldF9yZWdpc3RlcnMgKGJ1LCByZSwgbnUsIHN0LCBlbikKKyMgZGVmaW5lIHJlX21hdGNoXzIoYnVmcCwgc3RyaW5nMSwgc2l6ZTEsIHN0cmluZzIsIHNpemUyLCBwb3MsIHJlZ3MsIHN0b3ApIFwKKwlfX3JlX21hdGNoXzIgKGJ1ZnAsIHN0cmluZzEsIHNpemUxLCBzdHJpbmcyLCBzaXplMiwgcG9zLCByZWdzLCBzdG9wKQorIyBkZWZpbmUgcmVfbWF0Y2goYnVmcCwgc3RyaW5nLCBzaXplLCBwb3MsIHJlZ3MpIFwKKwlfX3JlX21hdGNoIChidWZwLCBzdHJpbmcsIHNpemUsIHBvcywgcmVncykKKyMgZGVmaW5lIHJlX3NlYXJjaChidWZwLCBzdHJpbmcsIHNpemUsIHN0YXJ0cG9zLCByYW5nZSwgcmVncykgXAorCV9fcmVfc2VhcmNoIChidWZwLCBzdHJpbmcsIHNpemUsIHN0YXJ0cG9zLCByYW5nZSwgcmVncykKKyMgZGVmaW5lIHJlX2NvbXBpbGVfcGF0dGVybihwYXR0ZXJuLCBsZW5ndGgsIGJ1ZnApIFwKKwlfX3JlX2NvbXBpbGVfcGF0dGVybiAocGF0dGVybiwgbGVuZ3RoLCBidWZwKQorIyBkZWZpbmUgcmVfc2V0X3N5bnRheChzeW50YXgpIF9fcmVfc2V0X3N5bnRheCAoc3ludGF4KQorIyBkZWZpbmUgcmVfc2VhcmNoXzIoYnVmcCwgc3QxLCBzMSwgc3QyLCBzMiwgc3RhcnRwb3MsIHJhbmdlLCByZWdzLCBzdG9wKSBcCisJX19yZV9zZWFyY2hfMiAoYnVmcCwgc3QxLCBzMSwgc3QyLCBzMiwgc3RhcnRwb3MsIHJhbmdlLCByZWdzLCBzdG9wKQorIyBkZWZpbmUgcmVfY29tcGlsZV9mYXN0bWFwKGJ1ZnApIF9fcmVfY29tcGlsZV9mYXN0bWFwIChidWZwKQorCisjIGluY2x1ZGUgIi4uL2xvY2FsZS9sb2NhbGVpbmZvLmgiCisjZW5kaWYKKworLyogT24gc29tZSBzeXN0ZW1zLCBsaW1pdHMuaCBzZXRzIFJFX0RVUF9NQVggdG8gYSBsb3dlciB2YWx1ZSB0aGFuCisgICBHTlUgcmVnZXggYWxsb3dzLiAgSW5jbHVkZSBpdCBiZWZvcmUgPHJlZ2V4Lmg+LCB3aGljaCBjb3JyZWN0bHkKKyAgICN1bmRlZnMgUkVfRFVQX01BWCBhbmQgc2V0cyBpdCB0byB0aGUgcmlnaHQgdmFsdWUuICAqLworI2luY2x1ZGUgPGxpbWl0cy5oPgorCisjaW5jbHVkZSA8cmVnZXguaD4KKyNpbmNsdWRlICJyZWdleF9pbnRlcm5hbC5oIgorCisjaW5jbHVkZSAicmVnZXhfaW50ZXJuYWwuYyIKKyNpbmNsdWRlICJyZWdjb21wLmMiCisjaW5jbHVkZSAicmVnZXhlYy5jIgorCisvKiBCaW5hcnkgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gICovCisjaWYgX0xJQkMKKyMgaW5jbHVkZSA8c2hsaWItY29tcGF0Lmg+CisjIGlmIFNITElCX0NPTVBBVCAobGliYywgR0xJQkNfMl8wLCBHTElCQ18yXzMpCitsaW5rX3dhcm5pbmcgKHJlX21heF9mYWlsdXJlcywgInRoZSAncmVfbWF4X2ZhaWx1cmVzJyB2YXJpYWJsZSBpcyBvYnNvbGV0ZSBhbmQgd2lsbCBnbyBhd2F5LiIpCitpbnQgcmVfbWF4X2ZhaWx1cmVzID0gMjAwMDsKKyMgZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYi9yZWdleC5oIGIvcGFydGVkLTEuOC43L2xpYi9yZWdleC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNzljYTMKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGliL3JlZ2V4LmgKQEAgLTAsMCArMSw2NzUgQEAKKy8qIERlZmluaXRpb25zIGZvciBkYXRhIHN0cnVjdHVyZXMgYW5kIHJvdXRpbmVzIGZvciB0aGUgcmVndWxhcgorICAgZXhwcmVzc2lvbiBsaWJyYXJ5LgorICAgQ29weXJpZ2h0IChDKSAxOTg1LDE5ODktOTMsMTk5NS05OCwyMDAwLDIwMDEsMjAwMiwyMDAzLDIwMDUsMjAwNgorICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAgIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gKi8KKworI2lmbmRlZiBfUkVHRVhfSAorI2RlZmluZSBfUkVHRVhfSCAxCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworLyogQWxsb3cgdGhlIHVzZSBpbiBDKysgY29kZS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIERlZmluZSBfX1VTRV9HTlVfUkVHRVggdG8gZGVjbGFyZSBHTlUgZXh0ZW5zaW9ucyB0aGF0IHZpb2xhdGUgdGhlCisgICBQT1NJWCBuYW1lIHNwYWNlIHJ1bGVzLiAgKi8KKyN1bmRlZiBfX1VTRV9HTlVfUkVHRVgKKyNpZiAoZGVmaW5lZCBfR05VX1NPVVJDRQkJCQkJXAorICAgICB8fCAoIWRlZmluZWQgX1BPU0lYX0NfU09VUkNFICYmICFkZWZpbmVkIF9QT1NJWF9TT1VSQ0UJXAorCSAmJiAhZGVmaW5lZCBfWE9QRU5fU09VUkNFKSkKKyMgZGVmaW5lIF9fVVNFX0dOVV9SRUdFWCAxCisjZW5kaWYKKworI2lmZGVmIF9SRUdFWF9MQVJHRV9PRkZTRVRTCisKKy8qIFVzZSB0eXBlcyBhbmQgdmFsdWVzIHRoYXQgYXJlIHdpZGUgZW5vdWdoIHRvIHJlcHJlc2VudCBzaWduZWQgYW5kCisgICB1bnNpZ25lZCBieXRlIG9mZnNldHMgaW4gbWVtb3J5LiAgVGhpcyBjdXJyZW50bHkgd29ya3Mgb25seSB3aGVuCisgICB0aGUgcmVnZXggY29kZSBpcyB1c2VkIG91dHNpZGUgb2YgdGhlIEdOVSBDIGxpYnJhcnk7IGl0IGlzIG5vdCB5ZXQKKyAgIHN1cHBvcnRlZCB3aXRoaW4gZ2xpYmMgaXRzZWxmLCBhbmQgZ2xpYmMgdXNlcnMgc2hvdWxkIG5vdCBkZWZpbmUKKyAgIF9SRUdFWF9MQVJHRV9PRkZTRVRTLiAgKi8KKworLyogVGhlIHR5cGUgb2YgdGhlIG9mZnNldCBvZiBhIGJ5dGUgd2l0aGluIGEgc3RyaW5nLgorICAgRm9yIGhpc3RvcmljYWwgcmVhc29ucyBQT1NJWCAxMDAzLjEtMjAwNCByZXF1aXJlcyB0aGF0IHJlZ29mZl90IGJlCisgICBhdCBsZWFzdCBhcyB3aWRlIGFzIG9mZl90LiAgSG93ZXZlciwgbWFueSBjb21tb24gUE9TSVggcGxhdGZvcm1zIHNldAorICAgcmVnb2ZmX3QgdG8gdGhlIG1vcmUtc2Vuc2libGUgc3NpemVfdCBhbmQgdGhlIE9wZW4gR3JvdXAgaGFzCisgICBzaWduYWxsZWQgaXRzIGludGVudGlvbiB0byBjaGFuZ2UgdGhlIHJlcXVpcmVtZW50IHRvIGJlIHRoYXQKKyAgIHJlZ29mZl90IGJlIGF0IGxlYXN0IGFzIHdpZGUgYXMgcHRyZGlmZl90IGFuZCBzc2l6ZV90OyBzZWUgWEJEIEVSTgorICAgNjAgKDIwMDUtMDgtMjUpLiAgV2UgZG9uJ3Qga25vdyBvZiBhbnkgaG9zdHMgd2hlcmUgc3NpemVfdCBvcgorICAgcHRyZGlmZl90IGlzIHdpZGVyIHRoYW4gc3NpemVfdCwgc28gc3NpemVfdCBpcyBzYWZlLiAgKi8KK3R5cGVkZWYgc3NpemVfdCByZWdvZmZfdDsKKworLyogVGhlIHR5cGUgb2Ygbm9ubmVnYXRpdmUgb2JqZWN0IGluZGV4ZXMuICBUcmFkaXRpb25hbGx5LCBHTlUgcmVnZXgKKyAgIHVzZXMgJ2ludCcgZm9yIHRoZXNlLiAgQ29kZSB0aGF0IHVzZXMgX19yZV9pZHhfdCBzaG91bGQgd29yaworICAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSB0eXBlIGlzIHNpZ25lZC4gICovCit0eXBlZGVmIHNpemVfdCBfX3JlX2lkeF90OworCisvKiBUaGUgdHlwZSBvZiBvYmplY3Qgc2l6ZXMuICAqLwordHlwZWRlZiBzaXplX3QgX19yZV9zaXplX3Q7CisKKy8qIFRoZSB0eXBlIG9mIG9iamVjdCBzaXplcywgaW4gcGxhY2VzIHdoZXJlIHRoZSB0cmFkaXRpb25hbCBjb2RlCisgICB1c2VzIHVuc2lnbmVkIGxvbmcgaW50LiAgKi8KK3R5cGVkZWYgc2l6ZV90IF9fcmVfbG9uZ19zaXplX3Q7CisKKyNlbHNlCisKKy8qIFVzZSB0eXBlcyB0aGF0IGFyZSBiaW5hcnktY29tcGF0aWJsZSB3aXRoIHRoZSB0cmFkaXRpb25hbCBHTlUgcmVnZXgKKyAgIGltcGxlbWVudGF0aW9uLCB3aGljaCBtaXNoYW5kbGVzIHN0cmluZ3MgbG9uZ2VyIHRoYW4gSU5UX01BWC4gICovCisKK3R5cGVkZWYgaW50IHJlZ29mZl90OwordHlwZWRlZiBpbnQgX19yZV9pZHhfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50IF9fcmVfc2l6ZV90OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX3JlX2xvbmdfc2l6ZV90OworCisjZW5kaWYKKworLyogVGhlIGZvbGxvd2luZyB0d28gdHlwZXMgaGF2ZSB0byBiZSBzaWduZWQgYW5kIHVuc2lnbmVkIGludGVnZXIgdHlwZQorICAgd2lkZSBlbm91Z2ggdG8gaG9sZCBhIHZhbHVlIG9mIGEgcG9pbnRlci4gIEZvciBtb3N0IEFOU0kgY29tcGlsZXJzCisgICBwdHJkaWZmX3QgYW5kIHNpemVfdCBzaG91bGQgYmUgbGlrZWx5IE9LLiAgU3RpbGwgc2l6ZSBvZiB0aGVzZSB0d28KKyAgIHR5cGVzIGlzIDIgZm9yIE1pY3Jvc29mdCBDLiAgVWdoLi4uICovCit0eXBlZGVmIGxvbmcgaW50IHNfcmVnX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IGFjdGl2ZV9yZWdfdDsKKworLyogVGhlIGZvbGxvd2luZyBiaXRzIGFyZSB1c2VkIHRvIGRldGVybWluZSB0aGUgcmVnZXhwIHN5bnRheCB3ZQorICAgcmVjb2duaXplLiAgVGhlIHNldC9ub3Qtc2V0IG1lYW5pbmdzIGFyZSBjaG9zZW4gc28gdGhhdCBFbWFjcyBzeW50YXgKKyAgIHJlbWFpbnMgdGhlIHZhbHVlIDAuICBUaGUgYml0cyBhcmUgZ2l2ZW4gaW4gYWxwaGFiZXRpY2FsIG9yZGVyLCBhbmQKKyAgIHRoZSBkZWZpbml0aW9ucyBzaGlmdGVkIGJ5IG9uZSBmcm9tIHRoZSBwcmV2aW91cyBiaXQ7IHRodXMsIHdoZW4gd2UKKyAgIGFkZCBvciByZW1vdmUgYSBiaXQsIG9ubHkgb25lIG90aGVyIGRlZmluaXRpb24gbmVlZCBjaGFuZ2UuICAqLwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCByZWdfc3ludGF4X3Q7CisKKyNpZmRlZiBfX1VTRV9HTlVfUkVHRVgKKworLyogSWYgdGhpcyBiaXQgaXMgbm90IHNldCwgdGhlbiBcIGluc2lkZSBhIGJyYWNrZXQgZXhwcmVzc2lvbiBpcyBsaXRlcmFsLgorICAgSWYgc2V0LCB0aGVuIHN1Y2ggYSBcIHF1b3RlcyB0aGUgZm9sbG93aW5nIGNoYXJhY3Rlci4gICovCisjIGRlZmluZSBSRV9CQUNLU0xBU0hfRVNDQVBFX0lOX0xJU1RTICgodW5zaWduZWQgbG9uZyBpbnQpIDEpCisKKy8qIElmIHRoaXMgYml0IGlzIG5vdCBzZXQsIHRoZW4gKyBhbmQgPyBhcmUgb3BlcmF0b3JzLCBhbmQgXCsgYW5kIFw/IGFyZQorICAgICBsaXRlcmFscy4KKyAgIElmIHNldCwgdGhlbiBcKyBhbmQgXD8gYXJlIG9wZXJhdG9ycyBhbmQgKyBhbmQgPyBhcmUgbGl0ZXJhbHMuICAqLworIyBkZWZpbmUgUkVfQktfUExVU19RTSAoUkVfQkFDS1NMQVNIX0VTQ0FQRV9JTl9MSVNUUyA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gY2hhcmFjdGVyIGNsYXNzZXMgYXJlIHN1cHBvcnRlZC4gIFRoZXkgYXJlOgorICAgICBbOmFscGhhOl0sIFs6dXBwZXI6XSwgWzpsb3dlcjpdLCAgWzpkaWdpdDpdLCBbOmFsbnVtOl0sIFs6eGRpZ2l0Ol0sCisgICAgIFs6c3BhY2U6XSwgWzpwcmludDpdLCBbOnB1bmN0Ol0sIFs6Z3JhcGg6XSwgYW5kIFs6Y250cmw6XS4KKyAgIElmIG5vdCBzZXQsIHRoZW4gY2hhcmFjdGVyIGNsYXNzZXMgYXJlIG5vdCBzdXBwb3J0ZWQuICAqLworIyBkZWZpbmUgUkVfQ0hBUl9DTEFTU0VTIChSRV9CS19QTFVTX1FNIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiBeIGFuZCAkIGFyZSBhbHdheXMgYW5jaG9ycyAob3V0c2lkZSBicmFja2V0CisgICAgIGV4cHJlc3Npb25zLCBvZiBjb3Vyc2UpLgorICAgSWYgdGhpcyBiaXQgaXMgbm90IHNldCwgdGhlbiBpdCBkZXBlbmRzOgorICAgICAgICBeICBpcyBhbiBhbmNob3IgaWYgaXQgaXMgYXQgdGhlIGJlZ2lubmluZyBvZiBhIHJlZ3VsYXIKKyAgICAgICAgICAgZXhwcmVzc2lvbiBvciBhZnRlciBhbiBvcGVuLWdyb3VwIG9yIGFuIGFsdGVybmF0aW9uIG9wZXJhdG9yOworICAgICAgICAkICBpcyBhbiBhbmNob3IgaWYgaXQgaXMgYXQgdGhlIGVuZCBvZiBhIHJlZ3VsYXIgZXhwcmVzc2lvbiwgb3IKKyAgICAgICAgICAgYmVmb3JlIGEgY2xvc2UtZ3JvdXAgb3IgYW4gYWx0ZXJuYXRpb24gb3BlcmF0b3IuCisKKyAgIFRoaXMgYml0IGNvdWxkIGJlIChyZSljb21iaW5lZCB3aXRoIFJFX0NPTlRFWFRfSU5ERVBfT1BTLCBiZWNhdXNlCisgICBQT1NJWCBkcmFmdCAxMS4yIHNheXMgdGhhdCAqIGV0Yy4gaW4gbGVhZGluZyBwb3NpdGlvbnMgaXMgdW5kZWZpbmVkLgorICAgV2UgYWxyZWFkeSBpbXBsZW1lbnRlZCBhIHByZXZpb3VzIGRyYWZ0IHdoaWNoIG1hZGUgdGhvc2UgY29uc3RydWN0cworICAgaW52YWxpZCwgdGhvdWdoLCBzbyB3ZSBoYXZlbid0IGNoYW5nZWQgdGhlIGNvZGUgYmFjay4gICovCisjIGRlZmluZSBSRV9DT05URVhUX0lOREVQX0FOQ0hPUlMgKFJFX0NIQVJfQ0xBU1NFUyA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gc3BlY2lhbCBjaGFyYWN0ZXJzIGFyZSBhbHdheXMgc3BlY2lhbAorICAgICByZWdhcmRsZXNzIG9mIHdoZXJlIHRoZXkgYXJlIGluIHRoZSBwYXR0ZXJuLgorICAgSWYgdGhpcyBiaXQgaXMgbm90IHNldCwgdGhlbiBzcGVjaWFsIGNoYXJhY3RlcnMgYXJlIHNwZWNpYWwgb25seSBpbgorICAgICBzb21lIGNvbnRleHRzOyBvdGhlcndpc2UgdGhleSBhcmUgb3JkaW5hcnkuICBTcGVjaWZpY2FsbHksCisgICAgICogKyA/IGFuZCBpbnRlcnZhbHMgYXJlIG9ubHkgc3BlY2lhbCB3aGVuIG5vdCBhZnRlciB0aGUgYmVnaW5uaW5nLAorICAgICBvcGVuLWdyb3VwLCBvciBhbHRlcm5hdGlvbiBvcGVyYXRvci4gICovCisjIGRlZmluZSBSRV9DT05URVhUX0lOREVQX09QUyAoUkVfQ09OVEVYVF9JTkRFUF9BTkNIT1JTIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiAqLCArLCA/LCBhbmQgeyBjYW5ub3QgYmUgZmlyc3QgaW4gYW4gcmUgb3IKKyAgICAgaW1tZWRpYXRlbHkgYWZ0ZXIgYW4gYWx0ZXJuYXRpb24gb3IgYmVnaW4tZ3JvdXAgb3BlcmF0b3IuICAqLworIyBkZWZpbmUgUkVfQ09OVEVYVF9JTlZBTElEX09QUyAoUkVfQ09OVEVYVF9JTkRFUF9PUFMgPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIC4gbWF0Y2hlcyBuZXdsaW5lLgorICAgSWYgbm90IHNldCwgdGhlbiBpdCBkb2Vzbid0LiAgKi8KKyMgZGVmaW5lIFJFX0RPVF9ORVdMSU5FIChSRV9DT05URVhUX0lOVkFMSURfT1BTIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiAuIGRvZXNuJ3QgbWF0Y2ggTlVMLgorICAgSWYgbm90IHNldCwgdGhlbiBpdCBkb2VzLiAgKi8KKyMgZGVmaW5lIFJFX0RPVF9OT1RfTlVMTCAoUkVfRE9UX05FV0xJTkUgPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCBub25tYXRjaGluZyBsaXN0cyBbXi4uLl0gZG8gbm90IG1hdGNoIG5ld2xpbmUuCisgICBJZiBub3Qgc2V0LCB0aGV5IGRvLiAgKi8KKyMgZGVmaW5lIFJFX0hBVF9MSVNUU19OT1RfTkVXTElORSAoUkVfRE9UX05PVF9OVUxMIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgZWl0aGVyIFx7Li4uXH0gb3Igey4uLn0gZGVmaW5lcyBhbgorICAgICBpbnRlcnZhbCwgZGVwZW5kaW5nIG9uIFJFX05PX0JLX0JSQUNFUy4KKyAgIElmIG5vdCBzZXQsIFx7LCBcfSwgeywgYW5kIH0gYXJlIGxpdGVyYWxzLiAgKi8KKyMgZGVmaW5lIFJFX0lOVEVSVkFMUyAoUkVfSEFUX0xJU1RTX05PVF9ORVdMSU5FIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgKywgPyBhbmQgfCBhcmVuJ3QgcmVjb2duaXplZCBhcyBvcGVyYXRvcnMuCisgICBJZiBub3Qgc2V0LCB0aGV5IGFyZS4gICovCisjIGRlZmluZSBSRV9MSU1JVEVEX09QUyAoUkVfSU5URVJWQUxTIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgbmV3bGluZSBpcyBhbiBhbHRlcm5hdGlvbiBvcGVyYXRvci4KKyAgIElmIG5vdCBzZXQsIG5ld2xpbmUgaXMgbGl0ZXJhbC4gICovCisjIGRlZmluZSBSRV9ORVdMSU5FX0FMVCAoUkVfTElNSVRFRF9PUFMgPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIGB7Li4ufScgZGVmaW5lcyBhbiBpbnRlcnZhbCwgYW5kIFx7IGFuZCBcfQorICAgICBhcmUgbGl0ZXJhbHMuCisgIElmIG5vdCBzZXQsIHRoZW4gYFx7Li4uXH0nIGRlZmluZXMgYW4gaW50ZXJ2YWwuICAqLworIyBkZWZpbmUgUkVfTk9fQktfQlJBQ0VTIChSRV9ORVdMSU5FX0FMVCA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsICguLi4pIGRlZmluZXMgYSBncm91cCwgYW5kIFwoIGFuZCBcKSBhcmUgbGl0ZXJhbHMuCisgICBJZiBub3Qgc2V0LCBcKC4uLlwpIGRlZmluZXMgYSBncm91cCwgYW5kICggYW5kICkgYXJlIGxpdGVyYWxzLiAgKi8KKyMgZGVmaW5lIFJFX05PX0JLX1BBUkVOUyAoUkVfTk9fQktfQlJBQ0VTIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiBcPGRpZ2l0PiBtYXRjaGVzIDxkaWdpdD4uCisgICBJZiBub3Qgc2V0LCB0aGVuIFw8ZGlnaXQ+IGlzIGEgYmFjay1yZWZlcmVuY2UuICAqLworIyBkZWZpbmUgUkVfTk9fQktfUkVGUyAoUkVfTk9fQktfUEFSRU5TIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiB8IGlzIGFuIGFsdGVybmF0aW9uIG9wZXJhdG9yLCBhbmQgXHwgaXMgbGl0ZXJhbC4KKyAgIElmIG5vdCBzZXQsIHRoZW4gXHwgaXMgYW4gYWx0ZXJuYXRpb24gb3BlcmF0b3IsIGFuZCB8IGlzIGxpdGVyYWwuICAqLworIyBkZWZpbmUgUkVfTk9fQktfVkJBUiAoUkVfTk9fQktfUkVGUyA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gYW4gZW5kaW5nIHJhbmdlIHBvaW50IGNvbGxhdGluZyBoaWdoZXIKKyAgICAgdGhhbiB0aGUgc3RhcnRpbmcgcmFuZ2UgcG9pbnQsIGFzIGluIFt6LWFdLCBpcyBpbnZhbGlkLgorICAgSWYgbm90IHNldCwgdGhlbiB3aGVuIGVuZGluZyByYW5nZSBwb2ludCBjb2xsYXRlcyBoaWdoZXIgdGhhbiB0aGUKKyAgICAgc3RhcnRpbmcgcmFuZ2UgcG9pbnQsIHRoZSByYW5nZSBpcyBpZ25vcmVkLiAgKi8KKyMgZGVmaW5lIFJFX05PX0VNUFRZX1JBTkdFUyAoUkVfTk9fQktfVkJBUiA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gYW4gdW5tYXRjaGVkICkgaXMgb3JkaW5hcnkuCisgICBJZiBub3Qgc2V0LCB0aGVuIGFuIHVubWF0Y2hlZCApIGlzIGludmFsaWQuICAqLworIyBkZWZpbmUgUkVfVU5NQVRDSEVEX1JJR0hUX1BBUkVOX09SRCAoUkVfTk9fRU1QVFlfUkFOR0VTIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgc3VjY2VlZCBhcyBzb29uIGFzIHdlIG1hdGNoIHRoZSB3aG9sZSBwYXR0ZXJuLAorICAgd2l0aG91dCBmdXJ0aGVyIGJhY2t0cmFja2luZy4gICovCisjIGRlZmluZSBSRV9OT19QT1NJWF9CQUNLVFJBQ0tJTkcgKFJFX1VOTUFUQ0hFRF9SSUdIVF9QQVJFTl9PUkQgPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCBkbyBub3QgcHJvY2VzcyB0aGUgR05VIHJlZ2V4IG9wZXJhdG9ycy4KKyAgIElmIG5vdCBzZXQsIHRoZW4gdGhlIEdOVSByZWdleCBvcGVyYXRvcnMgYXJlIHJlY29nbml6ZWQuICovCisjIGRlZmluZSBSRV9OT19HTlVfT1BTIChSRV9OT19QT1NJWF9CQUNLVFJBQ0tJTkcgPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0dXJuIG9uIGludGVybmFsIHJlZ2V4IGRlYnVnZ2luZy4KKyAgIElmIG5vdCBzZXQsIGFuZCBkZWJ1Z2dpbmcgd2FzIG9uLCB0dXJuIGl0IG9mZi4KKyAgIFRoaXMgb25seSB3b3JrcyBpZiByZWdleC5jIGlzIGNvbXBpbGVkIC1EREVCVUcuCisgICBXZSBkZWZpbmUgdGhpcyBiaXQgYWx3YXlzLCBzbyB0aGF0IGFsbCB0aGF0J3MgbmVlZGVkIHRvIHR1cm4gb24KKyAgIGRlYnVnZ2luZyBpcyB0byByZWNvbXBpbGUgcmVnZXguYzsgdGhlIGNhbGxpbmcgY29kZSBjYW4gYWx3YXlzIGhhdmUKKyAgIHRoaXMgYml0IHNldCwgYW5kIGl0IHdvbid0IGFmZmVjdCBhbnl0aGluZyBpbiB0aGUgbm9ybWFsIGNhc2UuICovCisjIGRlZmluZSBSRV9ERUJVRyAoUkVfTk9fR05VX09QUyA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIGEgc3ludGFjdGljYWxseSBpbnZhbGlkIGludGVydmFsIGlzIHRyZWF0ZWQgYXMKKyAgIGEgc3RyaW5nIG9mIG9yZGluYXJ5IGNoYXJhY3RlcnMuICBGb3IgZXhhbXBsZSwgdGhlIEVSRSAnYXsxJyBpcworICAgdHJlYXRlZCBhcyAnYVx7MScuICAqLworIyBkZWZpbmUgUkVfSU5WQUxJRF9JTlRFUlZBTF9PUkQgKFJFX0RFQlVHIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiBpZ25vcmUgY2FzZSB3aGVuIG1hdGNoaW5nLgorICAgSWYgbm90IHNldCwgdGhlbiBjYXNlIGlzIHNpZ25pZmljYW50LiAgKi8KKyMgZGVmaW5lIFJFX0lDQVNFIChSRV9JTlZBTElEX0lOVEVSVkFMX09SRCA8PCAxKQorCisvKiBUaGlzIGJpdCBpcyB1c2VkIGludGVybmFsbHkgbGlrZSBSRV9DT05URVhUX0lOREVQX0FOQ0hPUlMgYnV0IG9ubHkKKyAgIGZvciBeLCBiZWNhdXNlIGl0IGlzIGRpZmZpY3VsdCB0byBzY2FuIHRoZSByZWdleCBiYWNrd2FyZHMgdG8gZmluZAorICAgd2hldGhlciBeIHNob3VsZCBiZSBzcGVjaWFsLiAgKi8KKyMgZGVmaW5lIFJFX0NBUkVUX0FOQ0hPUlNfSEVSRSAoUkVfSUNBU0UgPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIFx7IGNhbm5vdCBiZSBmaXJzdCBpbiBhbiBicmUgb3IKKyAgIGltbWVkaWF0ZWx5IGFmdGVyIGFuIGFsdGVybmF0aW9uIG9yIGJlZ2luLWdyb3VwIG9wZXJhdG9yLiAgKi8KKyMgZGVmaW5lIFJFX0NPTlRFWFRfSU5WQUxJRF9EVVAgKFJFX0NBUkVUX0FOQ0hPUlNfSEVSRSA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gbm9fc3ViIHdpbGwgYmUgc2V0IHRvIDEgZHVyaW5nCisgICByZV9jb21waWxlX3BhdHRlcm4uICAqLworIyBkZWZpbmUgUkVfTk9fU1VCIChSRV9DT05URVhUX0lOVkFMSURfRFVQIDw8IDEpCisKKyNlbmRpZiAvKiBkZWZpbmVkIF9fVVNFX0dOVV9SRUdFWCAqLworCisvKiBUaGlzIGdsb2JhbCB2YXJpYWJsZSBkZWZpbmVzIHRoZSBwYXJ0aWN1bGFyIHJlZ2V4cCBzeW50YXggdG8gdXNlIChmb3IKKyAgIHNvbWUgaW50ZXJmYWNlcykuICBXaGVuIGEgcmVnZXhwIGlzIGNvbXBpbGVkLCB0aGUgc3ludGF4IHVzZWQgaXMKKyAgIHN0b3JlZCBpbiB0aGUgcGF0dGVybiBidWZmZXIsIHNvIGNoYW5naW5nIHRoaXMgZG9lcyBub3QgYWZmZWN0CisgICBhbHJlYWR5LWNvbXBpbGVkIHJlZ2V4cHMuICAqLworZXh0ZXJuIHJlZ19zeW50YXhfdCByZV9zeW50YXhfb3B0aW9uczsKKwwKKyNpZmRlZiBfX1VTRV9HTlVfUkVHRVgKKy8qIERlZmluZSBjb21iaW5hdGlvbnMgb2YgdGhlIGFib3ZlIGJpdHMgZm9yIHRoZSBzdGFuZGFyZCBwb3NzaWJpbGl0aWVzLgorICAgKFRoZSBbW1sgY29tbWVudHMgZGVsaW1pdCB3aGF0IGdldHMgcHV0IGludG8gdGhlIFRleGluZm8gZmlsZSwgc28KKyAgIGRvbid0IGRlbGV0ZSB0aGVtISkgICovCisvKiBbW1tiZWdpbiBzeW50YXhlc11dXSAqLworIyBkZWZpbmUgUkVfU1lOVEFYX0VNQUNTIDAKKworIyBkZWZpbmUgUkVfU1lOVEFYX0FXSwkJCQkJCQlcCisgIChSRV9CQUNLU0xBU0hfRVNDQVBFX0lOX0xJU1RTICAgfCBSRV9ET1RfTk9UX05VTEwJCQlcCisgICB8IFJFX05PX0JLX1BBUkVOUyAgICAgICAgICAgICAgfCBSRV9OT19CS19SRUZTCQkJXAorICAgfCBSRV9OT19CS19WQkFSICAgICAgICAgICAgICAgIHwgUkVfTk9fRU1QVFlfUkFOR0VTCQkJXAorICAgfCBSRV9ET1RfTkVXTElORQkJICB8IFJFX0NPTlRFWFRfSU5ERVBfQU5DSE9SUwkJXAorICAgfCBSRV9VTk1BVENIRURfUklHSFRfUEFSRU5fT1JEIHwgUkVfTk9fR05VX09QUykKKworIyBkZWZpbmUgUkVfU1lOVEFYX0dOVV9BV0sJCQkJCQlcCisgICgoUkVfU1lOVEFYX1BPU0lYX0VYVEVOREVEIHwgUkVfQkFDS1NMQVNIX0VTQ0FQRV9JTl9MSVNUUyB8IFJFX0RFQlVHKQlcCisgICAmIH4oUkVfRE9UX05PVF9OVUxMIHwgUkVfSU5URVJWQUxTIHwgUkVfQ09OVEVYVF9JTkRFUF9PUFMJCVwKKyAgICAgICB8IFJFX0NPTlRFWFRfSU5WQUxJRF9PUFMgKSkKKworIyBkZWZpbmUgUkVfU1lOVEFYX1BPU0lYX0FXSwkJCQkJCVwKKyAgKFJFX1NZTlRBWF9QT1NJWF9FWFRFTkRFRCB8IFJFX0JBQ0tTTEFTSF9FU0NBUEVfSU5fTElTVFMJCVwKKyAgIHwgUkVfSU5URVJWQUxTCSAgICB8IFJFX05PX0dOVV9PUFMpCisKKyMgZGVmaW5lIFJFX1NZTlRBWF9HUkVQCQkJCQkJCVwKKyAgKFJFX0JLX1BMVVNfUU0gICAgICAgICAgICAgIHwgUkVfQ0hBUl9DTEFTU0VTCQkJCVwKKyAgIHwgUkVfSEFUX0xJU1RTX05PVF9ORVdMSU5FIHwgUkVfSU5URVJWQUxTCQkJCVwKKyAgIHwgUkVfTkVXTElORV9BTFQpCisKKyMgZGVmaW5lIFJFX1NZTlRBWF9FR1JFUAkJCQkJCVwKKyAgKFJFX0NIQVJfQ0xBU1NFUyAgICAgICAgfCBSRV9DT05URVhUX0lOREVQX0FOQ0hPUlMJCQlcCisgICB8IFJFX0NPTlRFWFRfSU5ERVBfT1BTIHwgUkVfSEFUX0xJU1RTX05PVF9ORVdMSU5FCQkJXAorICAgfCBSRV9ORVdMSU5FX0FMVCAgICAgICB8IFJFX05PX0JLX1BBUkVOUwkJCQlcCisgICB8IFJFX05PX0JLX1ZCQVIpCisKKyMgZGVmaW5lIFJFX1NZTlRBWF9QT1NJWF9FR1JFUAkJCQkJCVwKKyAgKFJFX1NZTlRBWF9FR1JFUCB8IFJFX0lOVEVSVkFMUyB8IFJFX05PX0JLX0JSQUNFUwkJCVwKKyAgIHwgUkVfSU5WQUxJRF9JTlRFUlZBTF9PUkQpCisKKy8qIFAxMDAzLjIvRDExLjIsIHNlY3Rpb24gNC4yMC43LjEsIGxpbmVzIDUwNzhmZi4gICovCisjIGRlZmluZSBSRV9TWU5UQVhfRUQgUkVfU1lOVEFYX1BPU0lYX0JBU0lDCisKKyMgZGVmaW5lIFJFX1NZTlRBWF9TRUQgUkVfU1lOVEFYX1BPU0lYX0JBU0lDCisKKy8qIFN5bnRheCBiaXRzIGNvbW1vbiB0byBib3RoIGJhc2ljIGFuZCBleHRlbmRlZCBQT1NJWCByZWdleCBzeW50YXguICAqLworIyBkZWZpbmUgX1JFX1NZTlRBWF9QT1NJWF9DT01NT04JCQkJCVwKKyAgKFJFX0NIQVJfQ0xBU1NFUyB8IFJFX0RPVF9ORVdMSU5FICAgICAgfCBSRV9ET1RfTk9UX05VTEwJCVwKKyAgIHwgUkVfSU5URVJWQUxTICB8IFJFX05PX0VNUFRZX1JBTkdFUykKKworIyBkZWZpbmUgUkVfU1lOVEFYX1BPU0lYX0JBU0lDCQkJCQkJXAorICAoX1JFX1NZTlRBWF9QT1NJWF9DT01NT04gfCBSRV9CS19QTFVTX1FNIHwgUkVfQ09OVEVYVF9JTlZBTElEX0RVUCkKKworLyogRGlmZmVycyBmcm9tIC4uLl9QT1NJWF9CQVNJQyBvbmx5IGluIHRoYXQgUkVfQktfUExVU19RTSBiZWNvbWVzCisgICBSRV9MSU1JVEVEX09QUywgaS5lLiwgXD8gXCsgXHwgYXJlIG5vdCByZWNvZ25pemVkLiAgQWN0dWFsbHksIHRoaXMKKyAgIGlzbid0IG1pbmltYWwsIHNpbmNlIG90aGVyIG9wZXJhdG9ycywgc3VjaCBhcyBcYCwgYXJlbid0IGRpc2FibGVkLiAgKi8KKyMgZGVmaW5lIFJFX1NZTlRBWF9QT1NJWF9NSU5JTUFMX0JBU0lDCQkJCQlcCisgIChfUkVfU1lOVEFYX1BPU0lYX0NPTU1PTiB8IFJFX0xJTUlURURfT1BTKQorCisjIGRlZmluZSBSRV9TWU5UQVhfUE9TSVhfRVhURU5ERUQJCQkJCVwKKyAgKF9SRV9TWU5UQVhfUE9TSVhfQ09NTU9OICB8IFJFX0NPTlRFWFRfSU5ERVBfQU5DSE9SUwkJCVwKKyAgIHwgUkVfQ09OVEVYVF9JTkRFUF9PUFMgICB8IFJFX05PX0JLX0JSQUNFUwkJCQlcCisgICB8IFJFX05PX0JLX1BBUkVOUyAgICAgICAgfCBSRV9OT19CS19WQkFSCQkJCVwKKyAgIHwgUkVfQ09OVEVYVF9JTlZBTElEX09QUyB8IFJFX1VOTUFUQ0hFRF9SSUdIVF9QQVJFTl9PUkQpCisKKy8qIERpZmZlcnMgZnJvbSAuLi5fUE9TSVhfRVhURU5ERUQgaW4gdGhhdCBSRV9DT05URVhUX0lOREVQX09QUyBpcworICAgcmVtb3ZlZCBhbmQgUkVfTk9fQktfUkVGUyBpcyBhZGRlZC4gICovCisjIGRlZmluZSBSRV9TWU5UQVhfUE9TSVhfTUlOSU1BTF9FWFRFTkRFRAkJCQlcCisgIChfUkVfU1lOVEFYX1BPU0lYX0NPTU1PTiAgfCBSRV9DT05URVhUX0lOREVQX0FOQ0hPUlMJCQlcCisgICB8IFJFX0NPTlRFWFRfSU5WQUxJRF9PUFMgfCBSRV9OT19CS19CUkFDRVMJCQkJXAorICAgfCBSRV9OT19CS19QQVJFTlMgICAgICAgIHwgUkVfTk9fQktfUkVGUwkJCQlcCisgICB8IFJFX05PX0JLX1ZCQVIJICAgIHwgUkVfVU5NQVRDSEVEX1JJR0hUX1BBUkVOX09SRCkKKy8qIFtbW2VuZCBzeW50YXhlc11dXSAqLworCisjZW5kaWYgLyogZGVmaW5lZCBfX1VTRV9HTlVfUkVHRVggKi8KKwwKKyNpZmRlZiBfX1VTRV9HTlVfUkVHRVgKKworLyogTWF4aW11bSBudW1iZXIgb2YgZHVwbGljYXRlcyBhbiBpbnRlcnZhbCBjYW4gYWxsb3cuICBQT1NJWC1jb25mb3JtaW5nCisgICBzeXN0ZW1zIG1pZ2h0IGRlZmluZSB0aGlzIGluIDxsaW1pdHMuaD4sIGJ1dCB3ZSB3YW50IG91cgorICAgdmFsdWUsIHNvIHJlbW92ZSBhbnkgcHJldmlvdXMgZGVmaW5lLiAgKi8KKyMgaWZkZWYgUkVfRFVQX01BWAorIyAgdW5kZWYgUkVfRFVQX01BWAorIyBlbmRpZgorCisvKiBSRV9EVVBfTUFYIGlzIDIqKjE1IC0gMSBiZWNhdXNlIGFuIGVhcmxpZXIgaW1wbGVtZW50YXRpb24gc3RvcmVkCisgICB0aGUgY291bnRlciBhcyBhIDItYnl0ZSBzaWduZWQgaW50ZWdlci4gIFRoaXMgaXMgbm8gbG9uZ2VyIHRydWUsIHNvCisgICBSRV9EVVBfTUFYIGNvdWxkIGJlIGluY3JlYXNlZCB0byAoSU5UX01BWCAvIDEwIC0gMSksIG9yIHRvCisgICAoKFNJWkVfTUFYIC0gMikgLyAxMCAtIDEpIGlmIF9SRUdFWF9MQVJHRV9PRkZTRVRTIGlzIGRlZmluZWQuCisgICBIb3dldmVyLCB0aGVyZSB3b3VsZCBiZSBhIGh1Z2UgcGVyZm9ybWFuY2UgcHJvYmxlbSBpZiBzb21lb25lCisgICBhY3R1YWxseSB1c2VkIGEgcGF0dGVybiBsaWtlIGFcezIxNDc0ODM2M1x9LCBzbyBSRV9EVVBfTUFYIHJldGFpbnMKKyAgIGl0cyBoaXN0b3JpY2FsIHZhbHVlLiAgKi8KKyMgZGVmaW5lIFJFX0RVUF9NQVggKDB4N2ZmZikKKworI2VuZGlmIC8qIGRlZmluZWQgX19VU0VfR05VX1JFR0VYICovCisKKworLyogUE9TSVggYGNmbGFncycgYml0cyAoaS5lLiwgaW5mb3JtYXRpb24gZm9yIGByZWdjb21wJykuICAqLworCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gdXNlIGV4dGVuZGVkIHJlZ3VsYXIgZXhwcmVzc2lvbiBzeW50YXguCisgICBJZiBub3Qgc2V0LCB0aGVuIHVzZSBiYXNpYyByZWd1bGFyIGV4cHJlc3Npb24gc3ludGF4LiAgKi8KKyNkZWZpbmUgUkVHX0VYVEVOREVEIDEKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIGlnbm9yZSBjYXNlIHdoZW4gbWF0Y2hpbmcuCisgICBJZiBub3Qgc2V0LCB0aGVuIGNhc2UgaXMgc2lnbmlmaWNhbnQuICAqLworI2RlZmluZSBSRUdfSUNBU0UgKDEgPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIGFuY2hvcnMgZG8gbm90IG1hdGNoIGF0IG5ld2xpbmUKKyAgICAgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nLgorICAgSWYgbm90IHNldCwgdGhlbiBhbmNob3JzIGRvIG1hdGNoIGF0IG5ld2xpbmVzLiAgKi8KKyNkZWZpbmUgUkVHX05FV0xJTkUgKDEgPDwgMikKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIHJlcG9ydCBvbmx5IHN1Y2Nlc3Mgb3IgZmFpbCBpbiByZWdleGVjLgorICAgSWYgbm90IHNldCwgdGhlbiByZXR1cm5zIGRpZmZlciBiZXR3ZWVuIG5vdCBtYXRjaGluZyBhbmQgZXJyb3JzLiAgKi8KKyNkZWZpbmUgUkVHX05PU1VCICgxIDw8IDMpCisKKworLyogUE9TSVggYGVmbGFncycgYml0cyAoaS5lLiwgaW5mb3JtYXRpb24gZm9yIHJlZ2V4ZWMpLiAgKi8KKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIHRoZSBiZWdpbm5pbmctb2YtbGluZSBvcGVyYXRvciBkb2Vzbid0IG1hdGNoCisgICAgIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZyAocHJlc3VtYWJseSBiZWNhdXNlIGl0J3Mgbm90IHRoZQorICAgICBiZWdpbm5pbmcgb2YgYSBsaW5lKS4KKyAgIElmIG5vdCBzZXQsIHRoZW4gdGhlIGJlZ2lubmluZy1vZi1saW5lIG9wZXJhdG9yIGRvZXMgbWF0Y2ggdGhlCisgICAgIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nLiAgKi8KKyNkZWZpbmUgUkVHX05PVEJPTCAxCisKKy8qIExpa2UgUkVHX05PVEJPTCwgZXhjZXB0IGZvciB0aGUgZW5kLW9mLWxpbmUuICAqLworI2RlZmluZSBSRUdfTk9URU9MICgxIDw8IDEpCisKKy8qIFVzZSBQTUFUQ0hbMF0gdG8gZGVsaW1pdCB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgc2VhcmNoIGluIHRoZQorICAgYnVmZmVyLiAgKi8KKyNkZWZpbmUgUkVHX1NUQVJURU5EICgxIDw8IDIpCisKKworLyogSWYgYW55IGVycm9yIGNvZGVzIGFyZSByZW1vdmVkLCBjaGFuZ2VkLCBvciBhZGRlZCwgdXBkYXRlIHRoZQorICAgYF9fcmVfZXJyb3JfbXNnaWQnIHRhYmxlIGluIHJlZ2NvbXAuYy4gICovCisKK3R5cGVkZWYgZW51bQoreworICBfUkVHX0VOT1NZUyA9IC0xLAkvKiBUaGlzIHdpbGwgbmV2ZXIgaGFwcGVuIGZvciB0aGlzIGltcGxlbWVudGF0aW9uLiAgKi8KKyAgX1JFR19OT0VSUk9SID0gMCwJLyogU3VjY2Vzcy4gICovCisgIF9SRUdfTk9NQVRDSCwJCS8qIERpZG4ndCBmaW5kIGEgbWF0Y2ggKGZvciByZWdleGVjKS4gICovCisKKyAgLyogUE9TSVggcmVnY29tcCByZXR1cm4gZXJyb3IgY29kZXMuICAoSW4gdGhlIG9yZGVyIGxpc3RlZCBpbiB0aGUKKyAgICAgc3RhbmRhcmQuKSAgKi8KKyAgX1JFR19CQURQQVQsCQkvKiBJbnZhbGlkIHBhdHRlcm4uICAqLworICBfUkVHX0VDT0xMQVRFLAkvKiBJbnZhbGlkIGNvbGxhdGluZyBlbGVtZW50LiAgKi8KKyAgX1JFR19FQ1RZUEUsCQkvKiBJbnZhbGlkIGNoYXJhY3RlciBjbGFzcyBuYW1lLiAgKi8KKyAgX1JFR19FRVNDQVBFLAkJLyogVHJhaWxpbmcgYmFja3NsYXNoLiAgKi8KKyAgX1JFR19FU1VCUkVHLAkJLyogSW52YWxpZCBiYWNrIHJlZmVyZW5jZS4gICovCisgIF9SRUdfRUJSQUNLLAkJLyogVW5tYXRjaGVkIGxlZnQgYnJhY2tldC4gICovCisgIF9SRUdfRVBBUkVOLAkJLyogUGFyZW50aGVzaXMgaW1iYWxhbmNlLiAgKi8KKyAgX1JFR19FQlJBQ0UsCQkvKiBVbm1hdGNoZWQgXHsuICAqLworICBfUkVHX0JBREJSLAkJLyogSW52YWxpZCBjb250ZW50cyBvZiBce1x9LiAgKi8KKyAgX1JFR19FUkFOR0UsCQkvKiBJbnZhbGlkIHJhbmdlIGVuZC4gICovCisgIF9SRUdfRVNQQUNFLAkJLyogUmFuIG91dCBvZiBtZW1vcnkuICAqLworICBfUkVHX0JBRFJQVCwJCS8qIE5vIHByZWNlZGluZyByZSBmb3IgcmVwZXRpdGlvbiBvcC4gICovCisKKyAgLyogRXJyb3IgY29kZXMgd2UndmUgYWRkZWQuICAqLworICBfUkVHX0VFTkQsCQkvKiBQcmVtYXR1cmUgZW5kLiAgKi8KKyAgX1JFR19FU0laRSwJCS8qIENvbXBpbGVkIHBhdHRlcm4gYmlnZ2VyIHRoYW4gMl4xNiBieXRlcy4gICovCisgIF9SRUdfRVJQQVJFTgkJLyogVW5tYXRjaGVkICkgb3IgXCk7IG5vdCByZXR1cm5lZCBmcm9tIHJlZ2NvbXAuICAqLworfSByZWdfZXJyY29kZV90OworCisjaWZkZWYgX1hPUEVOX1NPVVJDRQorIyBkZWZpbmUgUkVHX0VOT1NZUwlfUkVHX0VOT1NZUworI2VuZGlmCisjZGVmaW5lIFJFR19OT0VSUk9SCV9SRUdfTk9FUlJPUgorI2RlZmluZSBSRUdfTk9NQVRDSAlfUkVHX05PTUFUQ0gKKyNkZWZpbmUgUkVHX0JBRFBBVAlfUkVHX0JBRFBBVAorI2RlZmluZSBSRUdfRUNPTExBVEUJX1JFR19FQ09MTEFURQorI2RlZmluZSBSRUdfRUNUWVBFCV9SRUdfRUNUWVBFCisjZGVmaW5lIFJFR19FRVNDQVBFCV9SRUdfRUVTQ0FQRQorI2RlZmluZSBSRUdfRVNVQlJFRwlfUkVHX0VTVUJSRUcKKyNkZWZpbmUgUkVHX0VCUkFDSwlfUkVHX0VCUkFDSworI2RlZmluZSBSRUdfRVBBUkVOCV9SRUdfRVBBUkVOCisjZGVmaW5lIFJFR19FQlJBQ0UJX1JFR19FQlJBQ0UKKyNkZWZpbmUgUkVHX0JBREJSCV9SRUdfQkFEQlIKKyNkZWZpbmUgUkVHX0VSQU5HRQlfUkVHX0VSQU5HRQorI2RlZmluZSBSRUdfRVNQQUNFCV9SRUdfRVNQQUNFCisjZGVmaW5lIFJFR19CQURSUFQJX1JFR19CQURSUFQKKyNkZWZpbmUgUkVHX0VFTkQJX1JFR19FRU5ECisjZGVmaW5lIFJFR19FU0laRQlfUkVHX0VTSVpFCisjZGVmaW5lIFJFR19FUlBBUkVOCV9SRUdfRVJQQVJFTgorDAorLyogc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyIG5vcm1hbGx5IHVzZXMgbWVtYmVyIG5hbWVzIGxpa2UgYGJ1ZmZlcicKKyAgIHRoYXQgUE9TSVggZG9lcyBub3QgYWxsb3cuICBJbiBQT1NJWCBtb2RlIHRoZXNlIG1lbWJlcnMgaGF2ZSBuYW1lcworICAgd2l0aCBsZWFkaW5nIGByZV8nIChlLmcuLCBgcmVfYnVmZmVyJykuICAqLworI2lmZGVmIF9fVVNFX0dOVV9SRUdFWAorIyBkZWZpbmUgX1JFR19SRV9OQU1FKGlkKSBpZAorIyBkZWZpbmUgX1JFR19STV9OQU1FKGlkKSBpZAorI2Vsc2UKKyMgZGVmaW5lIF9SRUdfUkVfTkFNRShpZCkgcmVfIyNpZAorIyBkZWZpbmUgX1JFR19STV9OQU1FKGlkKSBybV8jI2lkCisjZW5kaWYKKworLyogVGhlIHVzZXIgY2FuIHNwZWNpZnkgdGhlIHR5cGUgb2YgdGhlIHJlX3RyYW5zbGF0ZSBtZW1iZXIgYnkKKyAgIGRlZmluaW5nIHRoZSBtYWNybyBSRV9UUkFOU0xBVEVfVFlQRSwgd2hpY2ggZGVmYXVsdHMgdG8gdW5zaWduZWQKKyAgIGNoYXIgKi4gIFRoaXMgcG9sbHV0ZXMgdGhlIFBPU0lYIG5hbWUgc3BhY2UsIHNvIGluIFBPU0lYIG1vZGUganVzdAorICAgdXNlIHVuc2lnbmVkIGNoYXIgKi4gICovCisjaWZkZWYgX19VU0VfR05VX1JFR0VYCisjIGlmbmRlZiBSRV9UUkFOU0xBVEVfVFlQRQorIyAgZGVmaW5lIFJFX1RSQU5TTEFURV9UWVBFIHVuc2lnbmVkIGNoYXIgKgorIyBlbmRpZgorIyBkZWZpbmUgUkVHX1RSQU5TTEFURV9UWVBFIFJFX1RSQU5TTEFURV9UWVBFCisjZWxzZQorIyBkZWZpbmUgUkVHX1RSQU5TTEFURV9UWVBFIHVuc2lnbmVkIGNoYXIgKgorI2VuZGlmCisKKy8qIFRoaXMgZGF0YSBzdHJ1Y3R1cmUgcmVwcmVzZW50cyBhIGNvbXBpbGVkIHBhdHRlcm4uICBCZWZvcmUgY2FsbGluZworICAgdGhlIHBhdHRlcm4gY29tcGlsZXIsIHRoZSBmaWVsZHMgYGJ1ZmZlcicsIGBhbGxvY2F0ZWQnLCBgZmFzdG1hcCcsCisgICBgdHJhbnNsYXRlJywgYW5kIGBub19zdWInIGNhbiBiZSBzZXQuICBBZnRlciB0aGUgcGF0dGVybiBoYXMgYmVlbgorICAgY29tcGlsZWQsIHRoZSBgcmVfbnN1YicgZmllbGQgaXMgYXZhaWxhYmxlLiAgQWxsIG90aGVyIGZpZWxkcyBhcmUKKyAgIHByaXZhdGUgdG8gdGhlIHJlZ2V4IHJvdXRpbmVzLiAgKi8KKworc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyCit7CisgIC8qIFNwYWNlIHRoYXQgaG9sZHMgdGhlIGNvbXBpbGVkIHBhdHRlcm4uICBJdCBpcyBkZWNsYXJlZCBhcworICAgICBgdW5zaWduZWQgY2hhciAqJyBiZWNhdXNlIGl0cyBlbGVtZW50cyBhcmUgc29tZXRpbWVzIHVzZWQgYXMKKyAgICAgYXJyYXkgaW5kZXhlcy4gICovCisgIHVuc2lnbmVkIGNoYXIgKl9SRUdfUkVfTkFNRSAoYnVmZmVyKTsKKworICAvKiBOdW1iZXIgb2YgYnl0ZXMgdG8gd2hpY2ggYGJ1ZmZlcicgcG9pbnRzLiAgKi8KKyAgX19yZV9sb25nX3NpemVfdCBfUkVHX1JFX05BTUUgKGFsbG9jYXRlZCk7CisKKyAgLyogTnVtYmVyIG9mIGJ5dGVzIGFjdHVhbGx5IHVzZWQgaW4gYGJ1ZmZlcicuICAqLworICBfX3JlX2xvbmdfc2l6ZV90IF9SRUdfUkVfTkFNRSAodXNlZCk7CisKKyAgLyogU3ludGF4IHNldHRpbmcgd2l0aCB3aGljaCB0aGUgcGF0dGVybiB3YXMgY29tcGlsZWQuICAqLworICByZWdfc3ludGF4X3QgX1JFR19SRV9OQU1FIChzeW50YXgpOworCisgIC8qIFBvaW50ZXIgdG8gYSBmYXN0bWFwLCBpZiBhbnksIG90aGVyd2lzZSB6ZXJvLiAgcmVfc2VhcmNoIHVzZXMgdGhlCisgICAgIGZhc3RtYXAsIGlmIHRoZXJlIGlzIG9uZSwgdG8gc2tpcCBvdmVyIGltcG9zc2libGUgc3RhcnRpbmcgcG9pbnRzCisgICAgIGZvciBtYXRjaGVzLiAgKi8KKyAgY2hhciAqX1JFR19SRV9OQU1FIChmYXN0bWFwKTsKKworICAvKiBFaXRoZXIgYSB0cmFuc2xhdGUgdGFibGUgdG8gYXBwbHkgdG8gYWxsIGNoYXJhY3RlcnMgYmVmb3JlCisgICAgIGNvbXBhcmluZyB0aGVtLCBvciB6ZXJvIGZvciBubyB0cmFuc2xhdGlvbi4gIFRoZSB0cmFuc2xhdGlvbiBpcworICAgICBhcHBsaWVkIHRvIGEgcGF0dGVybiB3aGVuIGl0IGlzIGNvbXBpbGVkIGFuZCB0byBhIHN0cmluZyB3aGVuIGl0CisgICAgIGlzIG1hdGNoZWQuICAqLworICBSRUdfVFJBTlNMQVRFX1RZUEUgX1JFR19SRV9OQU1FICh0cmFuc2xhdGUpOworCisgIC8qIE51bWJlciBvZiBzdWJleHByZXNzaW9ucyBmb3VuZCBieSB0aGUgY29tcGlsZXIuICAqLworICBzaXplX3QgcmVfbnN1YjsKKworICAvKiBaZXJvIGlmIHRoaXMgcGF0dGVybiBjYW5ub3QgbWF0Y2ggdGhlIGVtcHR5IHN0cmluZywgb25lIGVsc2UuCisgICAgIFdlbGwsIGluIHRydXRoIGl0J3MgdXNlZCBvbmx5IGluIGByZV9zZWFyY2hfMicsIHRvIHNlZSB3aGV0aGVyIG9yCisgICAgIG5vdCB3ZSBzaG91bGQgdXNlIHRoZSBmYXN0bWFwLCBzbyB3ZSBkb24ndCBzZXQgdGhpcyBhYnNvbHV0ZWx5CisgICAgIHBlcmZlY3RseTsgc2VlIGByZV9jb21waWxlX2Zhc3RtYXAnICh0aGUgYGR1cGxpY2F0ZScgY2FzZSkuICAqLworICB1bnNpZ25lZCBpbnQgX1JFR19SRV9OQU1FIChjYW5fYmVfbnVsbCkgOiAxOworCisgIC8qIElmIFJFR1NfVU5BTExPQ0FURUQsIGFsbG9jYXRlIHNwYWNlIGluIHRoZSBgcmVncycgc3RydWN0dXJlCisgICAgIGZvciBgbWF4IChSRV9OUkVHUywgcmVfbnN1YiArIDEpJyBncm91cHMuCisgICAgIElmIFJFR1NfUkVBTExPQ0FURSwgcmVhbGxvY2F0ZSBzcGFjZSBpZiBuZWNlc3NhcnkuCisgICAgIElmIFJFR1NfRklYRUQsIHVzZSB3aGF0J3MgdGhlcmUuICAqLworI2lmZGVmIF9fVVNFX0dOVV9SRUdFWAorIyBkZWZpbmUgUkVHU19VTkFMTE9DQVRFRCAwCisjIGRlZmluZSBSRUdTX1JFQUxMT0NBVEUgMQorIyBkZWZpbmUgUkVHU19GSVhFRCAyCisjZW5kaWYKKyAgdW5zaWduZWQgaW50IF9SRUdfUkVfTkFNRSAocmVnc19hbGxvY2F0ZWQpIDogMjsKKworICAvKiBTZXQgdG8gemVybyB3aGVuIGByZWdleF9jb21waWxlJyBjb21waWxlcyBhIHBhdHRlcm47IHNldCB0byBvbmUKKyAgICAgYnkgYHJlX2NvbXBpbGVfZmFzdG1hcCcgaWYgaXQgdXBkYXRlcyB0aGUgZmFzdG1hcC4gICovCisgIHVuc2lnbmVkIGludCBfUkVHX1JFX05BTUUgKGZhc3RtYXBfYWNjdXJhdGUpIDogMTsKKworICAvKiBJZiBzZXQsIGByZV9tYXRjaF8yJyBkb2VzIG5vdCByZXR1cm4gaW5mb3JtYXRpb24gYWJvdXQKKyAgICAgc3ViZXhwcmVzc2lvbnMuICAqLworICB1bnNpZ25lZCBpbnQgX1JFR19SRV9OQU1FIChub19zdWIpIDogMTsKKworICAvKiBJZiBzZXQsIGEgYmVnaW5uaW5nLW9mLWxpbmUgYW5jaG9yIGRvZXNuJ3QgbWF0Y2ggYXQgdGhlIGJlZ2lubmluZworICAgICBvZiB0aGUgc3RyaW5nLiAgKi8KKyAgdW5zaWduZWQgaW50IF9SRUdfUkVfTkFNRSAobm90X2JvbCkgOiAxOworCisgIC8qIFNpbWlsYXJseSBmb3IgYW4gZW5kLW9mLWxpbmUgYW5jaG9yLiAgKi8KKyAgdW5zaWduZWQgaW50IF9SRUdfUkVfTkFNRSAobm90X2VvbCkgOiAxOworCisgIC8qIElmIHRydWUsIGFuIGFuY2hvciBhdCBhIG5ld2xpbmUgbWF0Y2hlcy4gICovCisgIHVuc2lnbmVkIGludCBfUkVHX1JFX05BTUUgKG5ld2xpbmVfYW5jaG9yKSA6IDE7CisKKy8qIFtbW2VuZCBwYXR0ZXJuX2J1ZmZlcl1dXSAqLworfTsKKwordHlwZWRlZiBzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgcmVnZXhfdDsKKwwKKy8qIFRoaXMgaXMgdGhlIHN0cnVjdHVyZSB3ZSBzdG9yZSByZWdpc3RlciBtYXRjaCBkYXRhIGluLiAgU2VlCisgICByZWdleC50ZXhpbmZvIGZvciBhIGZ1bGwgZGVzY3JpcHRpb24gb2Ygd2hhdCByZWdpc3RlcnMgbWF0Y2guICAqLworc3RydWN0IHJlX3JlZ2lzdGVycworeworICBfX3JlX3NpemVfdCBfUkVHX1JNX05BTUUgKG51bV9yZWdzKTsKKyAgcmVnb2ZmX3QgKl9SRUdfUk1fTkFNRSAoc3RhcnQpOworICByZWdvZmZfdCAqX1JFR19STV9OQU1FIChlbmQpOworfTsKKworCisvKiBJZiBgcmVnc19hbGxvY2F0ZWQnIGlzIFJFR1NfVU5BTExPQ0FURUQgaW4gdGhlIHBhdHRlcm4gYnVmZmVyLAorICAgYHJlX21hdGNoXzInIHJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgYXQgbGVhc3QgdGhpcyBtYW55IHJlZ2lzdGVycworICAgdGhlIGZpcnN0IHRpbWUgYSBgcmVncycgc3RydWN0dXJlIGlzIHBhc3NlZC4gICovCisjaWYgIWRlZmluZWQgUkVfTlJFR1MgJiYgZGVmaW5lZCBfX1VTRV9HTlVfUkVHRVgKKyMgZGVmaW5lIFJFX05SRUdTIDMwCisjZW5kaWYKKworCisvKiBQT1NJWCBzcGVjaWZpY2F0aW9uIGZvciByZWdpc3RlcnMuICBBc2lkZSBmcm9tIHRoZSBkaWZmZXJlbnQgbmFtZXMgdGhhbgorICAgYHJlX3JlZ2lzdGVycycsIFBPU0lYIHVzZXMgYW4gYXJyYXkgb2Ygc3RydWN0dXJlcywgaW5zdGVhZCBvZiBhCisgICBzdHJ1Y3R1cmUgb2YgYXJyYXlzLiAgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIHJlZ29mZl90IHJtX3NvOyAgLyogQnl0ZSBvZmZzZXQgZnJvbSBzdHJpbmcncyBzdGFydCB0byBzdWJzdHJpbmcncyBzdGFydC4gICovCisgIHJlZ29mZl90IHJtX2VvOyAgLyogQnl0ZSBvZmZzZXQgZnJvbSBzdHJpbmcncyBzdGFydCB0byBzdWJzdHJpbmcncyBlbmQuICAqLworfSByZWdtYXRjaF90OworDAorLyogRGVjbGFyYXRpb25zIGZvciByb3V0aW5lcy4gICovCisKKy8qIFNldHMgdGhlIGN1cnJlbnQgZGVmYXVsdCBzeW50YXggdG8gU1lOVEFYLCBhbmQgcmV0dXJuIHRoZSBvbGQgc3ludGF4LgorICAgWW91IGNhbiBhbHNvIHNpbXBseSBhc3NpZ24gdG8gdGhlIGByZV9zeW50YXhfb3B0aW9ucycgdmFyaWFibGUuICAqLworZXh0ZXJuIHJlZ19zeW50YXhfdCByZV9zZXRfc3ludGF4IChyZWdfc3ludGF4X3QgX19zeW50YXgpOworCisvKiBDb21waWxlIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gUEFUVEVSTiwgd2l0aCBsZW5ndGggTEVOR1RICisgICBhbmQgc3ludGF4IGdpdmVuIGJ5IHRoZSBnbG9iYWwgYHJlX3N5bnRheF9vcHRpb25zJywgaW50byB0aGUgYnVmZmVyCisgICBCVUZGRVIuICBSZXR1cm4gTlVMTCBpZiBzdWNjZXNzZnVsLCBhbmQgYW4gZXJyb3Igc3RyaW5nIGlmIG5vdC4gICovCitleHRlcm4gY29uc3QgY2hhciAqcmVfY29tcGlsZV9wYXR0ZXJuIChjb25zdCBjaGFyICpfX3BhdHRlcm4sIHNpemVfdCBfX2xlbmd0aCwKKwkJCQkgICAgICAgc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpfX2J1ZmZlcik7CisKKworLyogQ29tcGlsZSBhIGZhc3RtYXAgZm9yIHRoZSBjb21waWxlZCBwYXR0ZXJuIGluIEJVRkZFUjsgdXNlZCB0bworICAgYWNjZWxlcmF0ZSBzZWFyY2hlcy4gIFJldHVybiAwIGlmIHN1Y2Nlc3NmdWwgYW5kIC0yIGlmIHdhcyBhbgorICAgaW50ZXJuYWwgZXJyb3IuICAqLworZXh0ZXJuIGludCByZV9jb21waWxlX2Zhc3RtYXAgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqX19idWZmZXIpOworCisKKy8qIFNlYXJjaCBpbiB0aGUgc3RyaW5nIFNUUklORyAod2l0aCBsZW5ndGggTEVOR1RIKSBmb3IgdGhlIHBhdHRlcm4KKyAgIGNvbXBpbGVkIGludG8gQlVGRkVSLiAgU3RhcnQgc2VhcmNoaW5nIGF0IHBvc2l0aW9uIFNUQVJULCBmb3IgUkFOR0UKKyAgIGNoYXJhY3RlcnMuICBSZXR1cm4gdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIG9mIHRoZSBtYXRjaCwgLTEgZm9yIG5vCisgICBtYXRjaCwgb3IgLTIgZm9yIGFuIGludGVybmFsIGVycm9yLiAgQWxzbyByZXR1cm4gcmVnaXN0ZXIKKyAgIGluZm9ybWF0aW9uIGluIFJFR1MgKGlmIFJFR1MgYW5kIEJVRkZFUi0+bm9fc3ViIGFyZSBub256ZXJvKS4gICovCitleHRlcm4gcmVnb2ZmX3QgcmVfc2VhcmNoIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKl9fYnVmZmVyLAorCQkJICAgY29uc3QgY2hhciAqX19zdHJpbmcsIF9fcmVfaWR4X3QgX19sZW5ndGgsCisJCQkgICBfX3JlX2lkeF90IF9fc3RhcnQsIHJlZ29mZl90IF9fcmFuZ2UsCisJCQkgICBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpfX3JlZ3MpOworCisKKy8qIExpa2UgYHJlX3NlYXJjaCcsIGJ1dCBzZWFyY2ggaW4gdGhlIGNvbmNhdGVuYXRpb24gb2YgU1RSSU5HMSBhbmQKKyAgIFNUUklORzIuICBBbHNvLCBzdG9wIHNlYXJjaGluZyBhdCBpbmRleCBTVEFSVCArIFNUT1AuICAqLworZXh0ZXJuIHJlZ29mZl90IHJlX3NlYXJjaF8yIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKl9fYnVmZmVyLAorCQkJICAgICBjb25zdCBjaGFyICpfX3N0cmluZzEsIF9fcmVfaWR4X3QgX19sZW5ndGgxLAorCQkJICAgICBjb25zdCBjaGFyICpfX3N0cmluZzIsIF9fcmVfaWR4X3QgX19sZW5ndGgyLAorCQkJICAgICBfX3JlX2lkeF90IF9fc3RhcnQsIHJlZ29mZl90IF9fcmFuZ2UsCisJCQkgICAgIHN0cnVjdCByZV9yZWdpc3RlcnMgKl9fcmVncywKKwkJCSAgICAgX19yZV9pZHhfdCBfX3N0b3ApOworCisKKy8qIExpa2UgYHJlX3NlYXJjaCcsIGJ1dCByZXR1cm4gaG93IG1hbnkgY2hhcmFjdGVycyBpbiBTVFJJTkcgdGhlIHJlZ2V4cAorICAgaW4gQlVGRkVSIG1hdGNoZWQsIHN0YXJ0aW5nIGF0IHBvc2l0aW9uIFNUQVJULiAgKi8KK2V4dGVybiByZWdvZmZfdCByZV9tYXRjaCAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpfX2J1ZmZlciwKKwkJCSAgY29uc3QgY2hhciAqX19zdHJpbmcsIF9fcmVfaWR4X3QgX19sZW5ndGgsCisJCQkgIF9fcmVfaWR4X3QgX19zdGFydCwgc3RydWN0IHJlX3JlZ2lzdGVycyAqX19yZWdzKTsKKworCisvKiBSZWxhdGVzIHRvIGByZV9tYXRjaCcgYXMgYHJlX3NlYXJjaF8yJyByZWxhdGVzIHRvIGByZV9zZWFyY2gnLiAgKi8KK2V4dGVybiByZWdvZmZfdCByZV9tYXRjaF8yIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKl9fYnVmZmVyLAorCQkJICAgIGNvbnN0IGNoYXIgKl9fc3RyaW5nMSwgX19yZV9pZHhfdCBfX2xlbmd0aDEsCisJCQkgICAgY29uc3QgY2hhciAqX19zdHJpbmcyLCBfX3JlX2lkeF90IF9fbGVuZ3RoMiwKKwkJCSAgICBfX3JlX2lkeF90IF9fc3RhcnQsIHN0cnVjdCByZV9yZWdpc3RlcnMgKl9fcmVncywKKwkJCSAgICBfX3JlX2lkeF90IF9fc3RvcCk7CisKKworLyogU2V0IFJFR1MgdG8gaG9sZCBOVU1fUkVHUyByZWdpc3RlcnMsIHN0b3JpbmcgdGhlbSBpbiBTVEFSVFMgYW5kCisgICBFTkRTLiAgU3Vic2VxdWVudCBtYXRjaGVzIHVzaW5nIEJVRkZFUiBhbmQgUkVHUyB3aWxsIHVzZSB0aGlzIG1lbW9yeQorICAgZm9yIHJlY29yZGluZyByZWdpc3RlciBpbmZvcm1hdGlvbi4gIFNUQVJUUyBhbmQgRU5EUyBtdXN0IGJlCisgICBhbGxvY2F0ZWQgd2l0aCBtYWxsb2MsIGFuZCBtdXN0IGVhY2ggYmUgYXQgbGVhc3QgYE5VTV9SRUdTICogc2l6ZW9mCisgICAocmVnb2ZmX3QpJyBieXRlcyBsb25nLgorCisgICBJZiBOVU1fUkVHUyA9PSAwLCB0aGVuIHN1YnNlcXVlbnQgbWF0Y2hlcyBzaG91bGQgYWxsb2NhdGUgdGhlaXIgb3duCisgICByZWdpc3RlciBkYXRhLgorCisgICBVbmxlc3MgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQsIHRoZSBmaXJzdCBzZWFyY2ggb3IgbWF0Y2ggdXNpbmcKKyAgIFBBVFRFUk5fQlVGRkVSIHdpbGwgYWxsb2NhdGUgaXRzIG93biByZWdpc3RlciBkYXRhLCB3aXRob3V0CisgICBmcmVlaW5nIHRoZSBvbGQgZGF0YS4gICovCitleHRlcm4gdm9pZCByZV9zZXRfcmVnaXN0ZXJzIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKl9fYnVmZmVyLAorCQkJICAgICAgc3RydWN0IHJlX3JlZ2lzdGVycyAqX19yZWdzLAorCQkJICAgICAgX19yZV9zaXplX3QgX19udW1fcmVncywKKwkJCSAgICAgIHJlZ29mZl90ICpfX3N0YXJ0cywgcmVnb2ZmX3QgKl9fZW5kcyk7CisKKyNpZiBkZWZpbmVkIF9SRUdFWF9SRV9DT01QIHx8IGRlZmluZWQgX0xJQkMKKyMgaWZuZGVmIF9DUkFZCisvKiA0LjIgYnNkIGNvbXBhdGliaWxpdHkuICAqLworZXh0ZXJuIGNoYXIgKnJlX2NvbXAgKGNvbnN0IGNoYXIgKik7CitleHRlcm4gaW50IHJlX2V4ZWMgKGNvbnN0IGNoYXIgKik7CisjIGVuZGlmCisjZW5kaWYKKworLyogR0NDIDIuOTUgYW5kIGxhdGVyIGhhdmUgIl9fcmVzdHJpY3QiOyBDOTkgY29tcGlsZXJzIGhhdmUKKyAgICJyZXN0cmljdCIsIGFuZCAiY29uZmlndXJlIiBtYXkgaGF2ZSBkZWZpbmVkICJyZXN0cmljdCIuCisgICBPdGhlciBjb21waWxlcnMgdXNlIF9fcmVzdHJpY3QsIF9fcmVzdHJpY3RfXywgYW5kIF9SZXN0cmljdCwgYW5kCisgICAnY29uZmlndXJlJyBtaWdodCAjZGVmaW5lICdyZXN0cmljdCcgdG8gdGhvc2Ugd29yZHMsIHNvIHBpY2sgYQorICAgZGlmZmVyZW50IG5hbWUuICAqLworI2lmbmRlZiBfUmVzdHJpY3RfCisjIGlmIDE5OTkwMUwgPD0gX19TVERDX1ZFUlNJT05fXworIyAgZGVmaW5lIF9SZXN0cmljdF8gcmVzdHJpY3QKKyMgZWxpZiAyIDwgX19HTlVDX18gfHwgKDIgPT0gX19HTlVDX18gJiYgOTUgPD0gX19HTlVDX01JTk9SX18pCisjICBkZWZpbmUgX1Jlc3RyaWN0XyBfX3Jlc3RyaWN0CisjIGVsc2UKKyMgIGRlZmluZSBfUmVzdHJpY3RfCisjIGVuZGlmCisjZW5kaWYKKy8qIGdjYyAzLjEgYW5kIHVwIHN1cHBvcnQgdGhlIFtyZXN0cmljdF0gc3ludGF4LiAgRG9uJ3QgdHJ1c3QKKyAgIHN5cy9jZGVmcy5oJ3MgZGVmaW5pdGlvbiBvZiBfX3Jlc3RyaWN0X2FyciwgdGhvdWdoLCBhcyBpdAorICAgbWlzaGFuZGxlcyBnY2MgLWFuc2kgLXBlZGFudGljLiAgKi8KKyNpZm5kZWYgX1Jlc3RyaWN0X2Fycl8KKyMgaWYgKCgxOTk5MDFMIDw9IF9fU1REQ19WRVJTSU9OX18JCQkJCVwKKyAgICAgICB8fCAoKDMgPCBfX0dOVUNfXyB8fCAoMyA9PSBfX0dOVUNfXyAmJiAxIDw9IF9fR05VQ19NSU5PUl9fKSkJXAorCSAgICYmICFfX1NUUklDVF9BTlNJX18pKQkJCQkJXAorICAgICAgJiYgIWRlZmluZWQgX19HTlVHX18pCisjICBkZWZpbmUgX1Jlc3RyaWN0X2Fycl8gX1Jlc3RyaWN0XworIyBlbHNlCisjICBkZWZpbmUgX1Jlc3RyaWN0X2Fycl8KKyMgZW5kaWYKKyNlbmRpZgorCisvKiBQT1NJWCBjb21wYXRpYmlsaXR5LiAgKi8KK2V4dGVybiBpbnQgcmVnY29tcCAocmVnZXhfdCAqX1Jlc3RyaWN0XyBfX3ByZWcsCisJCSAgICBjb25zdCBjaGFyICpfUmVzdHJpY3RfIF9fcGF0dGVybiwKKwkJICAgIGludCBfX2NmbGFncyk7CisKK2V4dGVybiBpbnQgcmVnZXhlYyAoY29uc3QgcmVnZXhfdCAqX1Jlc3RyaWN0XyBfX3ByZWcsCisJCSAgICBjb25zdCBjaGFyICpfUmVzdHJpY3RfIF9fc3RyaW5nLCBzaXplX3QgX19ubWF0Y2gsCisJCSAgICByZWdtYXRjaF90IF9fcG1hdGNoW19SZXN0cmljdF9hcnJfXSwKKwkJICAgIGludCBfX2VmbGFncyk7CisKK2V4dGVybiBzaXplX3QgcmVnZXJyb3IgKGludCBfX2VycmNvZGUsIGNvbnN0IHJlZ2V4X3QgKl9SZXN0cmljdF8gX19wcmVnLAorCQkJY2hhciAqX1Jlc3RyaWN0XyBfX2VycmJ1Ziwgc2l6ZV90IF9fZXJyYnVmX3NpemUpOworCitleHRlcm4gdm9pZCByZWdmcmVlIChyZWdleF90ICpfX3ByZWcpOworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCS8qIEMrKyAqLworCisjZW5kaWYgLyogcmVnZXguaCAqLwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYi9yZWdleF9pbnRlcm5hbC5jIGIvcGFydGVkLTEuOC43L2xpYi9yZWdleF9pbnRlcm5hbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMjk4ODgKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGliL3JlZ2V4X2ludGVybmFsLmMKQEAgLTAsMCArMSwxNzQxIEBACisvKiBFeHRlbmRlZCByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hpbmcgYW5kIHNlYXJjaCBsaWJyYXJ5LgorICAgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorICAgQ29udHJpYnV0ZWQgYnkgSXNhbXUgSGFzZWdhd2EgPGlzYW11QHlhbWF0by5pYm0uY29tPi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAgIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gKi8KKworc3RhdGljIHZvaWQgcmVfc3RyaW5nX2NvbnN0cnVjdF9jb21tb24gKGNvbnN0IGNoYXIgKnN0ciwgSWR4IGxlbiwKKwkJCQkJcmVfc3RyaW5nX3QgKnBzdHIsCisJCQkJCVJFX1RSQU5TTEFURV9UWVBFIHRyYW5zLCBib29sIGljYXNlLAorCQkJCQljb25zdCByZV9kZmFfdCAqZGZhKSBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyByZV9kZmFzdGF0ZV90ICpjcmVhdGVfY2lfbmV3c3RhdGUgKGNvbnN0IHJlX2RmYV90ICpkZmEsCisJCQkJCSAgY29uc3QgcmVfbm9kZV9zZXQgKm5vZGVzLAorCQkJCQkgIHJlX2hhc2h2YWxfdCBoYXNoKSBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyByZV9kZmFzdGF0ZV90ICpjcmVhdGVfY2RfbmV3c3RhdGUgKGNvbnN0IHJlX2RmYV90ICpkZmEsCisJCQkJCSAgY29uc3QgcmVfbm9kZV9zZXQgKm5vZGVzLAorCQkJCQkgIHVuc2lnbmVkIGludCBjb250ZXh0LAorCQkJCQkgIHJlX2hhc2h2YWxfdCBoYXNoKSBpbnRlcm5hbF9mdW5jdGlvbjsKKwwKKy8qIEZ1bmN0aW9ucyBmb3Igc3RyaW5nIG9wZXJhdGlvbi4gICovCisKKy8qIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGUgdGhlIGJ1ZmZlcnMuICBJdCBpcyBuZWNlc3NhcnkgdG8gY2FsbAorICAgcmVfc3RyaW5nX3JlY29uc3RydWN0IGJlZm9yZSB1c2luZyB0aGUgb2JqZWN0LiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCityZV9zdHJpbmdfYWxsb2NhdGUgKHJlX3N0cmluZ190ICpwc3RyLCBjb25zdCBjaGFyICpzdHIsIElkeCBsZW4sIElkeCBpbml0X2xlbiwKKwkJICAgIFJFX1RSQU5TTEFURV9UWVBFIHRyYW5zLCBib29sIGljYXNlLCBjb25zdCByZV9kZmFfdCAqZGZhKQoreworICByZWdfZXJyY29kZV90IHJldDsKKyAgSWR4IGluaXRfYnVmX2xlbjsKKworICAvKiBFbnN1cmUgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciBmaXRzIGludG8gdGhlIGJ1ZmZlcnMuICAqLworICBpZiAoaW5pdF9sZW4gPCBkZmEtPm1iX2N1cl9tYXgpCisgICAgaW5pdF9sZW4gPSBkZmEtPm1iX2N1cl9tYXg7CisgIGluaXRfYnVmX2xlbiA9IChsZW4gKyAxIDwgaW5pdF9sZW4pID8gbGVuICsgMTogaW5pdF9sZW47CisgIHJlX3N0cmluZ19jb25zdHJ1Y3RfY29tbW9uIChzdHIsIGxlbiwgcHN0ciwgdHJhbnMsIGljYXNlLCBkZmEpOworCisgIHJldCA9IHJlX3N0cmluZ19yZWFsbG9jX2J1ZmZlcnMgKHBzdHIsIGluaXRfYnVmX2xlbik7CisgIGlmIChCRSAocmV0ICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICByZXR1cm4gcmV0OworCisgIHBzdHItPndvcmRfY2hhciA9IGRmYS0+d29yZF9jaGFyOworICBwc3RyLT53b3JkX29wc191c2VkID0gZGZhLT53b3JkX29wc191c2VkOworICBwc3RyLT5tYnMgPSBwc3RyLT5tYnNfYWxsb2NhdGVkID8gcHN0ci0+bWJzIDogKHVuc2lnbmVkIGNoYXIgKikgc3RyOworICBwc3RyLT52YWxpZF9sZW4gPSAocHN0ci0+bWJzX2FsbG9jYXRlZCB8fCBkZmEtPm1iX2N1cl9tYXggPiAxKSA/IDAgOiBsZW47CisgIHBzdHItPnZhbGlkX3Jhd19sZW4gPSBwc3RyLT52YWxpZF9sZW47CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworLyogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZSB0aGUgYnVmZmVycywgYW5kIGluaXRpYWxpemUgdGhlbS4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorcmVfc3RyaW5nX2NvbnN0cnVjdCAocmVfc3RyaW5nX3QgKnBzdHIsIGNvbnN0IGNoYXIgKnN0ciwgSWR4IGxlbiwKKwkJICAgICBSRV9UUkFOU0xBVEVfVFlQRSB0cmFucywgYm9vbCBpY2FzZSwgY29uc3QgcmVfZGZhX3QgKmRmYSkKK3sKKyAgcmVnX2VycmNvZGVfdCByZXQ7CisgIG1lbXNldCAocHN0ciwgJ1wwJywgc2l6ZW9mIChyZV9zdHJpbmdfdCkpOworICByZV9zdHJpbmdfY29uc3RydWN0X2NvbW1vbiAoc3RyLCBsZW4sIHBzdHIsIHRyYW5zLCBpY2FzZSwgZGZhKTsKKworICBpZiAobGVuID4gMCkKKyAgICB7CisgICAgICByZXQgPSByZV9zdHJpbmdfcmVhbGxvY19idWZmZXJzIChwc3RyLCBsZW4gKyAxKTsKKyAgICAgIGlmIChCRSAocmV0ICE9IFJFR19OT0VSUk9SLCAwKSkKKwlyZXR1cm4gcmV0OworICAgIH0KKyAgcHN0ci0+bWJzID0gcHN0ci0+bWJzX2FsbG9jYXRlZCA/IHBzdHItPm1icyA6ICh1bnNpZ25lZCBjaGFyICopIHN0cjsKKworICBpZiAoaWNhc2UpCisgICAgeworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgICAgICBpZiAoZGZhLT5tYl9jdXJfbWF4ID4gMSkKKwl7CisJICB3aGlsZSAoMSkKKwkgICAgeworCSAgICAgIHJldCA9IGJ1aWxkX3djc191cHBlcl9idWZmZXIgKHBzdHIpOworCSAgICAgIGlmIChCRSAocmV0ICE9IFJFR19OT0VSUk9SLCAwKSkKKwkJcmV0dXJuIHJldDsKKwkgICAgICBpZiAocHN0ci0+dmFsaWRfcmF3X2xlbiA+PSBsZW4pCisJCWJyZWFrOworCSAgICAgIGlmIChwc3RyLT5idWZzX2xlbiA+IHBzdHItPnZhbGlkX2xlbiArIGRmYS0+bWJfY3VyX21heCkKKwkJYnJlYWs7CisJICAgICAgcmV0ID0gcmVfc3RyaW5nX3JlYWxsb2NfYnVmZmVycyAocHN0ciwgcHN0ci0+YnVmc19sZW4gKiAyKTsKKwkgICAgICBpZiAoQkUgKHJldCAhPSBSRUdfTk9FUlJPUiwgMCkpCisJCXJldHVybiByZXQ7CisJICAgIH0KKwl9CisgICAgICBlbHNlCisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gICovCisJYnVpbGRfdXBwZXJfYnVmZmVyIChwc3RyKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgICAgIGlmIChkZmEtPm1iX2N1cl9tYXggPiAxKQorCWJ1aWxkX3djc19idWZmZXIgKHBzdHIpOworICAgICAgZWxzZQorI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICAqLworCXsKKwkgIGlmICh0cmFucyAhPSBOVUxMKQorCSAgICByZV9zdHJpbmdfdHJhbnNsYXRlX2J1ZmZlciAocHN0cik7CisJICBlbHNlCisJICAgIHsKKwkgICAgICBwc3RyLT52YWxpZF9sZW4gPSBwc3RyLT5idWZzX2xlbjsKKwkgICAgICBwc3RyLT52YWxpZF9yYXdfbGVuID0gcHN0ci0+YnVmc19sZW47CisJICAgIH0KKwl9CisgICAgfQorCisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworLyogSGVscGVyIGZ1bmN0aW9ucyBmb3IgcmVfc3RyaW5nX2FsbG9jYXRlLCBhbmQgcmVfc3RyaW5nX2NvbnN0cnVjdC4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorcmVfc3RyaW5nX3JlYWxsb2NfYnVmZmVycyAocmVfc3RyaW5nX3QgKnBzdHIsIElkeCBuZXdfYnVmX2xlbikKK3sKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICBpZiAocHN0ci0+bWJfY3VyX21heCA+IDEpCisgICAgeworICAgICAgd2ludF90ICpuZXdfd2NzOworCisgICAgICAvKiBBdm9pZCBvdmVyZmxvdy4gICovCisgICAgICBzaXplX3QgbWF4X29iamVjdF9zaXplID0gTUFYIChzaXplb2YgKHdpbnRfdCksIHNpemVvZiAoSWR4KSk7CisgICAgICBpZiAoQkUgKFNJWkVfTUFYIC8gbWF4X29iamVjdF9zaXplIDwgbmV3X2J1Zl9sZW4sIDApKQorCXJldHVybiBSRUdfRVNQQUNFOworCisgICAgICBuZXdfd2NzID0gcmVfcmVhbGxvYyAocHN0ci0+d2NzLCB3aW50X3QsIG5ld19idWZfbGVuKTsKKyAgICAgIGlmIChCRSAobmV3X3djcyA9PSBOVUxMLCAwKSkKKwlyZXR1cm4gUkVHX0VTUEFDRTsKKyAgICAgIHBzdHItPndjcyA9IG5ld193Y3M7CisgICAgICBpZiAocHN0ci0+b2Zmc2V0cyAhPSBOVUxMKQorCXsKKwkgIElkeCAqbmV3X29mZnNldHMgPSByZV9yZWFsbG9jIChwc3RyLT5vZmZzZXRzLCBJZHgsIG5ld19idWZfbGVuKTsKKwkgIGlmIChCRSAobmV3X29mZnNldHMgPT0gTlVMTCwgMCkpCisJICAgIHJldHVybiBSRUdfRVNQQUNFOworCSAgcHN0ci0+b2Zmc2V0cyA9IG5ld19vZmZzZXRzOworCX0KKyAgICB9CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gICovCisgIGlmIChwc3RyLT5tYnNfYWxsb2NhdGVkKQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGNoYXIgKm5ld19tYnMgPSByZV9yZWFsbG9jIChwc3RyLT5tYnMsIHVuc2lnbmVkIGNoYXIsCisJCQkJCSAgIG5ld19idWZfbGVuKTsKKyAgICAgIGlmIChCRSAobmV3X21icyA9PSBOVUxMLCAwKSkKKwlyZXR1cm4gUkVHX0VTUEFDRTsKKyAgICAgIHBzdHItPm1icyA9IG5ld19tYnM7CisgICAgfQorICBwc3RyLT5idWZzX2xlbiA9IG5ld19idWZfbGVuOworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKworc3RhdGljIHZvaWQKK2ludGVybmFsX2Z1bmN0aW9uCityZV9zdHJpbmdfY29uc3RydWN0X2NvbW1vbiAoY29uc3QgY2hhciAqc3RyLCBJZHggbGVuLCByZV9zdHJpbmdfdCAqcHN0ciwKKwkJCSAgICBSRV9UUkFOU0xBVEVfVFlQRSB0cmFucywgYm9vbCBpY2FzZSwKKwkJCSAgICBjb25zdCByZV9kZmFfdCAqZGZhKQoreworICBwc3RyLT5yYXdfbWJzID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgc3RyOworICBwc3RyLT5sZW4gPSBsZW47CisgIHBzdHItPnJhd19sZW4gPSBsZW47CisgIHBzdHItPnRyYW5zID0gdHJhbnM7CisgIHBzdHItPmljYXNlID0gaWNhc2U7CisgIHBzdHItPm1ic19hbGxvY2F0ZWQgPSAodHJhbnMgIT0gTlVMTCB8fCBpY2FzZSk7CisgIHBzdHItPm1iX2N1cl9tYXggPSBkZmEtPm1iX2N1cl9tYXg7CisgIHBzdHItPmlzX3V0ZjggPSBkZmEtPmlzX3V0Zjg7CisgIHBzdHItPm1hcF9ub3Rhc2NpaSA9IGRmYS0+bWFwX25vdGFzY2lpOworICBwc3RyLT5zdG9wID0gcHN0ci0+bGVuOworICBwc3RyLT5yYXdfc3RvcCA9IHBzdHItPnN0b3A7Cit9CisKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorCisvKiBCdWlsZCB3aWRlIGNoYXJhY3RlciBidWZmZXIgUFNUUi0+V0NTLgorICAgSWYgdGhlIGJ5dGUgc2VxdWVuY2Ugb2YgdGhlIHN0cmluZyBhcmU6CisgICAgIDxtYjE+KDApLCA8bWIxPigxKSwgPG1iMj4oMCksIDxtYjI+KDEpLCA8c2IzPgorICAgVGhlbiB3aWRlIGNoYXJhY3RlciBidWZmZXIgd2lsbCBiZToKKyAgICAgPHdjMT4gICAsIFdFT0YgICAgLCA8d2MyPiAgICwgV0VPRiAgICAsIDx3YzM+CisgICBXZSB1c2UgV0VPRiBmb3IgcGFkZGluZywgdGhleSBpbmRpY2F0ZSB0aGF0IHRoZSBwb3NpdGlvbiBpc24ndAorICAgYSBmaXJzdCBieXRlIG9mIGEgbXVsdGlieXRlIGNoYXJhY3Rlci4KKworICAgTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gYXNzdW1lcyBQU1RSLT5WQUxJRF9MRU4gZWxlbWVudHMgYXJlIGFscmVhZHkKKyAgIGJ1aWx0IGFuZCBzdGFydHMgZnJvbSBQU1RSLT5WQUxJRF9MRU4uICAqLworCitzdGF0aWMgdm9pZAoraW50ZXJuYWxfZnVuY3Rpb24KK2J1aWxkX3djc19idWZmZXIgKHJlX3N0cmluZ190ICpwc3RyKQoreworI2lmZGVmIF9MSUJDCisgIHVuc2lnbmVkIGNoYXIgYnVmW01CX0xFTl9NQVhdOworICBhc3NlcnQgKE1CX0xFTl9NQVggPj0gcHN0ci0+bWJfY3VyX21heCk7CisjZWxzZQorICB1bnNpZ25lZCBjaGFyIGJ1Zls2NF07CisjZW5kaWYKKyAgbWJzdGF0ZV90IHByZXZfc3Q7CisgIElkeCBieXRlX2lkeCwgZW5kX2lkeCwgcmVtYWluX2xlbjsKKyAgc2l6ZV90IG1iY2xlbjsKKworICAvKiBCdWlsZCB0aGUgYnVmZmVycyBmcm9tIHBzdHItPnZhbGlkX2xlbiB0byBlaXRoZXIgcHN0ci0+bGVuIG9yCisgICAgIHBzdHItPmJ1ZnNfbGVuLiAgKi8KKyAgZW5kX2lkeCA9IChwc3RyLT5idWZzX2xlbiA+IHBzdHItPmxlbikgPyBwc3RyLT5sZW4gOiBwc3RyLT5idWZzX2xlbjsKKyAgZm9yIChieXRlX2lkeCA9IHBzdHItPnZhbGlkX2xlbjsgYnl0ZV9pZHggPCBlbmRfaWR4OykKKyAgICB7CisgICAgICB3Y2hhcl90IHdjOworICAgICAgY29uc3QgY2hhciAqcDsKKworICAgICAgcmVtYWluX2xlbiA9IGVuZF9pZHggLSBieXRlX2lkeDsKKyAgICAgIHByZXZfc3QgPSBwc3RyLT5jdXJfc3RhdGU7CisgICAgICAvKiBBcHBseSB0aGUgdHJhbnNsYXRpb24gaWYgd2UgbmVlZC4gICovCisgICAgICBpZiAoQkUgKHBzdHItPnRyYW5zICE9IE5VTEwsIDApKQorCXsKKwkgIGludCBpLCBjaDsKKworCSAgZm9yIChpID0gMDsgaSA8IHBzdHItPm1iX2N1cl9tYXggJiYgaSA8IHJlbWFpbl9sZW47ICsraSkKKwkgICAgeworCSAgICAgIGNoID0gcHN0ci0+cmF3X21icyBbcHN0ci0+cmF3X21ic19pZHggKyBieXRlX2lkeCArIGldOworCSAgICAgIGJ1ZltpXSA9IHBzdHItPm1ic1tieXRlX2lkeCArIGldID0gcHN0ci0+dHJhbnNbY2hdOworCSAgICB9CisJICBwID0gKGNvbnN0IGNoYXIgKikgYnVmOworCX0KKyAgICAgIGVsc2UKKwlwID0gKGNvbnN0IGNoYXIgKikgcHN0ci0+cmF3X21icyArIHBzdHItPnJhd19tYnNfaWR4ICsgYnl0ZV9pZHg7CisgICAgICBtYmNsZW4gPSBtYnJ0b3djICgmd2MsIHAsIHJlbWFpbl9sZW4sICZwc3RyLT5jdXJfc3RhdGUpOworICAgICAgaWYgKEJFIChtYmNsZW4gPT0gKHNpemVfdCkgLTIsIDApKQorCXsKKwkgIC8qIFRoZSBidWZmZXIgZG9lc24ndCBoYXZlIGVub3VnaCBzcGFjZSwgZmluaXNoIHRvIGJ1aWxkLiAgKi8KKwkgIHBzdHItPmN1cl9zdGF0ZSA9IHByZXZfc3Q7CisJICBicmVhazsKKwl9CisgICAgICBlbHNlIGlmIChCRSAobWJjbGVuID09IChzaXplX3QpIC0xIHx8IG1iY2xlbiA9PSAwLCAwKSkKKwl7CisJICAvKiBXZSB0cmVhdCB0aGVzZSBjYXNlcyBhcyBhIHNpbmdsZWJ5dGUgY2hhcmFjdGVyLiAgKi8KKwkgIG1iY2xlbiA9IDE7CisJICB3YyA9ICh3Y2hhcl90KSBwc3RyLT5yYXdfbWJzW3BzdHItPnJhd19tYnNfaWR4ICsgYnl0ZV9pZHhdOworCSAgaWYgKEJFIChwc3RyLT50cmFucyAhPSBOVUxMLCAwKSkKKwkgICAgd2MgPSBwc3RyLT50cmFuc1t3Y107CisJICBwc3RyLT5jdXJfc3RhdGUgPSBwcmV2X3N0OworCX0KKworICAgICAgLyogV3JpdGUgd2lkZSBjaGFyYWN0ZXIgYW5kIHBhZGRpbmcuICAqLworICAgICAgcHN0ci0+d2NzW2J5dGVfaWR4KytdID0gd2M7CisgICAgICAvKiBXcml0ZSBwYWRkaW5ncy4gICovCisgICAgICBmb3IgKHJlbWFpbl9sZW4gPSBieXRlX2lkeCArIG1iY2xlbiAtIDE7IGJ5dGVfaWR4IDwgcmVtYWluX2xlbiA7KQorCXBzdHItPndjc1tieXRlX2lkeCsrXSA9IFdFT0Y7CisgICAgfQorICBwc3RyLT52YWxpZF9sZW4gPSBieXRlX2lkeDsKKyAgcHN0ci0+dmFsaWRfcmF3X2xlbiA9IGJ5dGVfaWR4OworfQorCisvKiBCdWlsZCB3aWRlIGNoYXJhY3RlciBidWZmZXIgUFNUUi0+V0NTIGxpa2UgYnVpbGRfd2NzX2J1ZmZlciwKKyAgIGJ1dCBmb3IgUkVHX0lDQVNFLiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCitidWlsZF93Y3NfdXBwZXJfYnVmZmVyIChyZV9zdHJpbmdfdCAqcHN0cikKK3sKKyAgbWJzdGF0ZV90IHByZXZfc3Q7CisgIElkeCBzcmNfaWR4LCBieXRlX2lkeCwgZW5kX2lkeCwgcmVtYWluX2xlbjsKKyAgc2l6ZV90IG1iY2xlbjsKKyNpZmRlZiBfTElCQworICBjaGFyIGJ1ZltNQl9MRU5fTUFYXTsKKyAgYXNzZXJ0IChNQl9MRU5fTUFYID49IHBzdHItPm1iX2N1cl9tYXgpOworI2Vsc2UKKyAgY2hhciBidWZbNjRdOworI2VuZGlmCisKKyAgYnl0ZV9pZHggPSBwc3RyLT52YWxpZF9sZW47CisgIGVuZF9pZHggPSAocHN0ci0+YnVmc19sZW4gPiBwc3RyLT5sZW4pID8gcHN0ci0+bGVuIDogcHN0ci0+YnVmc19sZW47CisKKyAgLyogVGhlIGZvbGxvd2luZyBvcHRpbWl6YXRpb24gYXNzdW1lcyB0aGF0IEFTQ0lJIGNoYXJhY3RlcnMgY2FuIGJlCisgICAgIG1hcHBlZCB0byB3aWRlIGNoYXJhY3RlcnMgd2l0aCBhIHNpbXBsZSBjYXN0LiAgKi8KKyAgaWYgKCEgcHN0ci0+bWFwX25vdGFzY2lpICYmIHBzdHItPnRyYW5zID09IE5VTEwgJiYgIXBzdHItPm9mZnNldHNfbmVlZGVkKQorICAgIHsKKyAgICAgIHdoaWxlIChieXRlX2lkeCA8IGVuZF9pZHgpCisJeworCSAgd2NoYXJfdCB3YzsKKworCSAgaWYgKGlzYXNjaWkgKHBzdHItPnJhd19tYnNbcHN0ci0+cmF3X21ic19pZHggKyBieXRlX2lkeF0pCisJICAgICAgJiYgbWJzaW5pdCAoJnBzdHItPmN1cl9zdGF0ZSkpCisJICAgIHsKKwkgICAgICAvKiBJbiBjYXNlIG9mIGEgc2luZ2xlYnl0ZSBjaGFyYWN0ZXIuICAqLworCSAgICAgIHBzdHItPm1ic1tieXRlX2lkeF0KKwkJPSB0b3VwcGVyIChwc3RyLT5yYXdfbWJzW3BzdHItPnJhd19tYnNfaWR4ICsgYnl0ZV9pZHhdKTsKKwkgICAgICAvKiBUaGUgbmV4dCBzdGVwIHVzZXMgdGhlIGFzc3VtcHRpb24gdGhhdCB3Y2hhcl90IGlzIGVuY29kZWQKKwkJIEFTQ0lJLXNhZmU6IGFsbCBBU0NJSSB2YWx1ZXMgY2FuIGJlIGNvbnZlcnRlZCBsaWtlIHRoaXMuICAqLworCSAgICAgIHBzdHItPndjc1tieXRlX2lkeF0gPSAod2NoYXJfdCkgcHN0ci0+bWJzW2J5dGVfaWR4XTsKKwkgICAgICArK2J5dGVfaWR4OworCSAgICAgIGNvbnRpbnVlOworCSAgICB9CisKKwkgIHJlbWFpbl9sZW4gPSBlbmRfaWR4IC0gYnl0ZV9pZHg7CisJICBwcmV2X3N0ID0gcHN0ci0+Y3VyX3N0YXRlOworCSAgbWJjbGVuID0gbWJydG93YyAoJndjLAorCQkJICAgICgoY29uc3QgY2hhciAqKSBwc3RyLT5yYXdfbWJzICsgcHN0ci0+cmF3X21ic19pZHgKKwkJCSAgICAgKyBieXRlX2lkeCksIHJlbWFpbl9sZW4sICZwc3RyLT5jdXJfc3RhdGUpOworCSAgaWYgKEJFIChtYmNsZW4gPCAoc2l6ZV90KSAtMiwgMSkpCisJICAgIHsKKwkgICAgICB3Y2hhcl90IHdjdSA9IHdjOworCSAgICAgIGlmIChpc3dsb3dlciAod2MpKQorCQl7CisJCSAgc2l6ZV90IG1iY2RsZW47CisKKwkJICB3Y3UgPSB0b3d1cHBlciAod2MpOworCQkgIG1iY2RsZW4gPSB3Y3J0b21iIChidWYsIHdjdSwgJnByZXZfc3QpOworCQkgIGlmIChCRSAobWJjbGVuID09IG1iY2RsZW4sIDEpKQorCQkgICAgbWVtY3B5IChwc3RyLT5tYnMgKyBieXRlX2lkeCwgYnVmLCBtYmNsZW4pOworCQkgIGVsc2UKKwkJICAgIHsKKwkJICAgICAgc3JjX2lkeCA9IGJ5dGVfaWR4OworCQkgICAgICBnb3RvIG9mZnNldHNfbmVlZGVkOworCQkgICAgfQorCQl9CisJICAgICAgZWxzZQorCQltZW1jcHkgKHBzdHItPm1icyArIGJ5dGVfaWR4LAorCQkJcHN0ci0+cmF3X21icyArIHBzdHItPnJhd19tYnNfaWR4ICsgYnl0ZV9pZHgsIG1iY2xlbik7CisJICAgICAgcHN0ci0+d2NzW2J5dGVfaWR4KytdID0gd2N1OworCSAgICAgIC8qIFdyaXRlIHBhZGRpbmdzLiAgKi8KKwkgICAgICBmb3IgKHJlbWFpbl9sZW4gPSBieXRlX2lkeCArIG1iY2xlbiAtIDE7IGJ5dGVfaWR4IDwgcmVtYWluX2xlbiA7KQorCQlwc3RyLT53Y3NbYnl0ZV9pZHgrK10gPSBXRU9GOworCSAgICB9CisJICBlbHNlIGlmIChtYmNsZW4gPT0gKHNpemVfdCkgLTEgfHwgbWJjbGVuID09IDApCisJICAgIHsKKwkgICAgICAvKiBJdCBpcyBhbiBpbnZhbGlkIGNoYXJhY3RlciBvciAnXDAnLiAgSnVzdCB1c2UgdGhlIGJ5dGUuICAqLworCSAgICAgIGludCBjaCA9IHBzdHItPnJhd19tYnNbcHN0ci0+cmF3X21ic19pZHggKyBieXRlX2lkeF07CisJICAgICAgcHN0ci0+bWJzW2J5dGVfaWR4XSA9IGNoOworCSAgICAgIC8qIEFuZCBhbHNvIGNhc3QgaXQgdG8gd2lkZSBjaGFyLiAgKi8KKwkgICAgICBwc3RyLT53Y3NbYnl0ZV9pZHgrK10gPSAod2NoYXJfdCkgY2g7CisJICAgICAgaWYgKEJFIChtYmNsZW4gPT0gKHNpemVfdCkgLTEsIDApKQorCQlwc3RyLT5jdXJfc3RhdGUgPSBwcmV2X3N0OworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICAvKiBUaGUgYnVmZmVyIGRvZXNuJ3QgaGF2ZSBlbm91Z2ggc3BhY2UsIGZpbmlzaCB0byBidWlsZC4gICovCisJICAgICAgcHN0ci0+Y3VyX3N0YXRlID0gcHJldl9zdDsKKwkgICAgICBicmVhazsKKwkgICAgfQorCX0KKyAgICAgIHBzdHItPnZhbGlkX2xlbiA9IGJ5dGVfaWR4OworICAgICAgcHN0ci0+dmFsaWRfcmF3X2xlbiA9IGJ5dGVfaWR4OworICAgICAgcmV0dXJuIFJFR19OT0VSUk9SOworICAgIH0KKyAgZWxzZQorICAgIGZvciAoc3JjX2lkeCA9IHBzdHItPnZhbGlkX3Jhd19sZW47IGJ5dGVfaWR4IDwgZW5kX2lkeDspCisgICAgICB7CisJd2NoYXJfdCB3YzsKKwljb25zdCBjaGFyICpwOworICAgICAgb2Zmc2V0c19uZWVkZWQ6CisJcmVtYWluX2xlbiA9IGVuZF9pZHggLSBieXRlX2lkeDsKKwlwcmV2X3N0ID0gcHN0ci0+Y3VyX3N0YXRlOworCWlmIChCRSAocHN0ci0+dHJhbnMgIT0gTlVMTCwgMCkpCisJICB7CisJICAgIGludCBpLCBjaDsKKworCSAgICBmb3IgKGkgPSAwOyBpIDwgcHN0ci0+bWJfY3VyX21heCAmJiBpIDwgcmVtYWluX2xlbjsgKytpKQorCSAgICAgIHsKKwkJY2ggPSBwc3RyLT5yYXdfbWJzIFtwc3RyLT5yYXdfbWJzX2lkeCArIHNyY19pZHggKyBpXTsKKwkJYnVmW2ldID0gcHN0ci0+dHJhbnNbY2hdOworCSAgICAgIH0KKwkgICAgcCA9IChjb25zdCBjaGFyICopIGJ1ZjsKKwkgIH0KKwllbHNlCisJICBwID0gKGNvbnN0IGNoYXIgKikgcHN0ci0+cmF3X21icyArIHBzdHItPnJhd19tYnNfaWR4ICsgc3JjX2lkeDsKKwltYmNsZW4gPSBtYnJ0b3djICgmd2MsIHAsIHJlbWFpbl9sZW4sICZwc3RyLT5jdXJfc3RhdGUpOworCWlmIChCRSAobWJjbGVuIDwgKHNpemVfdCkgLTIsIDEpKQorCSAgeworCSAgICB3Y2hhcl90IHdjdSA9IHdjOworCSAgICBpZiAoaXN3bG93ZXIgKHdjKSkKKwkgICAgICB7CisJCXNpemVfdCBtYmNkbGVuOworCisJCXdjdSA9IHRvd3VwcGVyICh3Yyk7CisJCW1iY2RsZW4gPSB3Y3J0b21iICgoY2hhciAqKSBidWYsIHdjdSwgJnByZXZfc3QpOworCQlpZiAoQkUgKG1iY2xlbiA9PSBtYmNkbGVuLCAxKSkKKwkJICBtZW1jcHkgKHBzdHItPm1icyArIGJ5dGVfaWR4LCBidWYsIG1iY2xlbik7CisJCWVsc2UgaWYgKG1iY2RsZW4gIT0gKHNpemVfdCkgLTEpCisJCSAgeworCQkgICAgc2l6ZV90IGk7CisKKwkJICAgIGlmIChieXRlX2lkeCArIG1iY2RsZW4gPiBwc3RyLT5idWZzX2xlbikKKwkJICAgICAgeworCQkJcHN0ci0+Y3VyX3N0YXRlID0gcHJldl9zdDsKKwkJCWJyZWFrOworCQkgICAgICB9CisKKwkJICAgIGlmIChwc3RyLT5vZmZzZXRzID09IE5VTEwpCisJCSAgICAgIHsKKwkJCXBzdHItPm9mZnNldHMgPSByZV9tYWxsb2MgKElkeCwgcHN0ci0+YnVmc19sZW4pOworCisJCQlpZiAocHN0ci0+b2Zmc2V0cyA9PSBOVUxMKQorCQkJICByZXR1cm4gUkVHX0VTUEFDRTsKKwkJICAgICAgfQorCQkgICAgaWYgKCFwc3RyLT5vZmZzZXRzX25lZWRlZCkKKwkJICAgICAgeworCQkJZm9yIChpID0gMDsgaSA8IChzaXplX3QpIGJ5dGVfaWR4OyArK2kpCisJCQkgIHBzdHItPm9mZnNldHNbaV0gPSBpOworCQkJcHN0ci0+b2Zmc2V0c19uZWVkZWQgPSAxOworCQkgICAgICB9CisKKwkJICAgIG1lbWNweSAocHN0ci0+bWJzICsgYnl0ZV9pZHgsIGJ1ZiwgbWJjZGxlbik7CisJCSAgICBwc3RyLT53Y3NbYnl0ZV9pZHhdID0gd2N1OworCQkgICAgcHN0ci0+b2Zmc2V0c1tieXRlX2lkeF0gPSBzcmNfaWR4OworCQkgICAgZm9yIChpID0gMTsgaSA8IG1iY2RsZW47ICsraSkKKwkJICAgICAgeworCQkJcHN0ci0+b2Zmc2V0c1tieXRlX2lkeCArIGldCisJCQkgID0gc3JjX2lkeCArIChpIDwgbWJjbGVuID8gaSA6IG1iY2xlbiAtIDEpOworCQkJcHN0ci0+d2NzW2J5dGVfaWR4ICsgaV0gPSBXRU9GOworCQkgICAgICB9CisJCSAgICBwc3RyLT5sZW4gKz0gbWJjZGxlbiAtIG1iY2xlbjsKKwkJICAgIGlmIChwc3RyLT5yYXdfc3RvcCA+IHNyY19pZHgpCisJCSAgICAgIHBzdHItPnN0b3AgKz0gbWJjZGxlbiAtIG1iY2xlbjsKKwkJICAgIGVuZF9pZHggPSAocHN0ci0+YnVmc19sZW4gPiBwc3RyLT5sZW4pCisJCQkgICAgICA/IHBzdHItPmxlbiA6IHBzdHItPmJ1ZnNfbGVuOworCQkgICAgYnl0ZV9pZHggKz0gbWJjZGxlbjsKKwkJICAgIHNyY19pZHggKz0gbWJjbGVuOworCQkgICAgY29udGludWU7CisJCSAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIG1lbWNweSAocHN0ci0+bWJzICsgYnl0ZV9pZHgsIHAsIG1iY2xlbik7CisJICAgICAgfQorCSAgICBlbHNlCisJICAgICAgbWVtY3B5IChwc3RyLT5tYnMgKyBieXRlX2lkeCwgcCwgbWJjbGVuKTsKKworCSAgICBpZiAoQkUgKHBzdHItPm9mZnNldHNfbmVlZGVkICE9IDAsIDApKQorCSAgICAgIHsKKwkJc2l6ZV90IGk7CisJCWZvciAoaSA9IDA7IGkgPCBtYmNsZW47ICsraSkKKwkJICBwc3RyLT5vZmZzZXRzW2J5dGVfaWR4ICsgaV0gPSBzcmNfaWR4ICsgaTsKKwkgICAgICB9CisJICAgIHNyY19pZHggKz0gbWJjbGVuOworCisJICAgIHBzdHItPndjc1tieXRlX2lkeCsrXSA9IHdjdTsKKwkgICAgLyogV3JpdGUgcGFkZGluZ3MuICAqLworCSAgICBmb3IgKHJlbWFpbl9sZW4gPSBieXRlX2lkeCArIG1iY2xlbiAtIDE7IGJ5dGVfaWR4IDwgcmVtYWluX2xlbiA7KQorCSAgICAgIHBzdHItPndjc1tieXRlX2lkeCsrXSA9IFdFT0Y7CisJICB9CisJZWxzZSBpZiAobWJjbGVuID09IChzaXplX3QpIC0xIHx8IG1iY2xlbiA9PSAwKQorCSAgeworCSAgICAvKiBJdCBpcyBhbiBpbnZhbGlkIGNoYXJhY3RlciBvciAnXDAnLiAgSnVzdCB1c2UgdGhlIGJ5dGUuICAqLworCSAgICBpbnQgY2ggPSBwc3RyLT5yYXdfbWJzW3BzdHItPnJhd19tYnNfaWR4ICsgc3JjX2lkeF07CisKKwkgICAgaWYgKEJFIChwc3RyLT50cmFucyAhPSBOVUxMLCAwKSkKKwkgICAgICBjaCA9IHBzdHItPnRyYW5zIFtjaF07CisJICAgIHBzdHItPm1ic1tieXRlX2lkeF0gPSBjaDsKKworCSAgICBpZiAoQkUgKHBzdHItPm9mZnNldHNfbmVlZGVkICE9IDAsIDApKQorCSAgICAgIHBzdHItPm9mZnNldHNbYnl0ZV9pZHhdID0gc3JjX2lkeDsKKwkgICAgKytzcmNfaWR4OworCisJICAgIC8qIEFuZCBhbHNvIGNhc3QgaXQgdG8gd2lkZSBjaGFyLiAgKi8KKwkgICAgcHN0ci0+d2NzW2J5dGVfaWR4KytdID0gKHdjaGFyX3QpIGNoOworCSAgICBpZiAoQkUgKG1iY2xlbiA9PSAoc2l6ZV90KSAtMSwgMCkpCisJICAgICAgcHN0ci0+Y3VyX3N0YXRlID0gcHJldl9zdDsKKwkgIH0KKwllbHNlCisJICB7CisJICAgIC8qIFRoZSBidWZmZXIgZG9lc24ndCBoYXZlIGVub3VnaCBzcGFjZSwgZmluaXNoIHRvIGJ1aWxkLiAgKi8KKwkgICAgcHN0ci0+Y3VyX3N0YXRlID0gcHJldl9zdDsKKwkgICAgYnJlYWs7CisJICB9CisgICAgICB9CisgIHBzdHItPnZhbGlkX2xlbiA9IGJ5dGVfaWR4OworICBwc3RyLT52YWxpZF9yYXdfbGVuID0gc3JjX2lkeDsKKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCisvKiBTa2lwIGNoYXJhY3RlcnMgdW50aWwgdGhlIGluZGV4IGJlY29tZXMgZ3JlYXRlciB0aGFuIE5FV19SQVdfSURYLgorICAgUmV0dXJuIHRoZSBpbmRleC4gICovCisKK3N0YXRpYyBJZHgKK2ludGVybmFsX2Z1bmN0aW9uCityZV9zdHJpbmdfc2tpcF9jaGFycyAocmVfc3RyaW5nX3QgKnBzdHIsIElkeCBuZXdfcmF3X2lkeCwgd2ludF90ICpsYXN0X3djKQoreworICBtYnN0YXRlX3QgcHJldl9zdDsKKyAgSWR4IHJhd2J1Zl9pZHg7CisgIHNpemVfdCBtYmNsZW47CisgIHdpbnRfdCB3YyA9IFdFT0Y7CisKKyAgLyogU2tpcCB0aGUgY2hhcmFjdGVycyB3aGljaCBhcmUgbm90IG5lY2Vzc2FyeSB0byBjaGVjay4gICovCisgIGZvciAocmF3YnVmX2lkeCA9IHBzdHItPnJhd19tYnNfaWR4ICsgcHN0ci0+dmFsaWRfcmF3X2xlbjsKKyAgICAgICByYXdidWZfaWR4IDwgbmV3X3Jhd19pZHg7KQorICAgIHsKKyAgICAgIHdjaGFyX3Qgd2MyOworICAgICAgSWR4IHJlbWFpbl9sZW47CisgICAgICByZW1haW5fbGVuID0gcHN0ci0+bGVuIC0gcmF3YnVmX2lkeDsKKyAgICAgIHByZXZfc3QgPSBwc3RyLT5jdXJfc3RhdGU7CisgICAgICBtYmNsZW4gPSBtYnJ0b3djICgmd2MyLCAoY29uc3QgY2hhciAqKSBwc3RyLT5yYXdfbWJzICsgcmF3YnVmX2lkeCwKKwkJCXJlbWFpbl9sZW4sICZwc3RyLT5jdXJfc3RhdGUpOworICAgICAgaWYgKEJFIChtYmNsZW4gPT0gKHNpemVfdCkgLTIgfHwgbWJjbGVuID09IChzaXplX3QpIC0xIHx8IG1iY2xlbiA9PSAwLCAwKSkKKwl7CisJICAvKiBXZSB0cmVhdCB0aGVzZSBjYXNlcyBhcyBhIHNpbmdsZSBieXRlIGNoYXJhY3Rlci4gICovCisJICBpZiAobWJjbGVuID09IDAgfHwgcmVtYWluX2xlbiA9PSAwKQorCSAgICB3YyA9IEwnXDAnOworCSAgZWxzZQorCSAgICB3YyA9ICoodW5zaWduZWQgY2hhciAqKSAocHN0ci0+cmF3X21icyArIHJhd2J1Zl9pZHgpOworCSAgbWJjbGVuID0gMTsKKwkgIHBzdHItPmN1cl9zdGF0ZSA9IHByZXZfc3Q7CisJfQorICAgICAgZWxzZQorCXdjID0gd2MyOworICAgICAgLyogVGhlbiBwcm9jZWVkIHRoZSBuZXh0IGNoYXJhY3Rlci4gICovCisgICAgICByYXdidWZfaWR4ICs9IG1iY2xlbjsKKyAgICB9CisgICpsYXN0X3djID0gd2M7CisgIHJldHVybiByYXdidWZfaWR4OworfQorI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICAqLworCisvKiBCdWlsZCB0aGUgYnVmZmVyIFBTVFItPk1CUywgYW5kIGFwcGx5IHRoZSB0cmFuc2xhdGlvbiBpZiB3ZSBuZWVkLgorICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGluIGNhc2Ugb2YgUkVHX0lDQVNFLiAgKi8KKworc3RhdGljIHZvaWQKK2ludGVybmFsX2Z1bmN0aW9uCitidWlsZF91cHBlcl9idWZmZXIgKHJlX3N0cmluZ190ICpwc3RyKQoreworICBJZHggY2hhcl9pZHgsIGVuZF9pZHg7CisgIGVuZF9pZHggPSAocHN0ci0+YnVmc19sZW4gPiBwc3RyLT5sZW4pID8gcHN0ci0+bGVuIDogcHN0ci0+YnVmc19sZW47CisKKyAgZm9yIChjaGFyX2lkeCA9IHBzdHItPnZhbGlkX2xlbjsgY2hhcl9pZHggPCBlbmRfaWR4OyArK2NoYXJfaWR4KQorICAgIHsKKyAgICAgIGludCBjaCA9IHBzdHItPnJhd19tYnNbcHN0ci0+cmF3X21ic19pZHggKyBjaGFyX2lkeF07CisgICAgICBpZiAoQkUgKHBzdHItPnRyYW5zICE9IE5VTEwsIDApKQorCWNoID0gcHN0ci0+dHJhbnNbY2hdOworICAgICAgaWYgKGlzbG93ZXIgKGNoKSkKKwlwc3RyLT5tYnNbY2hhcl9pZHhdID0gdG91cHBlciAoY2gpOworICAgICAgZWxzZQorCXBzdHItPm1ic1tjaGFyX2lkeF0gPSBjaDsKKyAgICB9CisgIHBzdHItPnZhbGlkX2xlbiA9IGNoYXJfaWR4OworICBwc3RyLT52YWxpZF9yYXdfbGVuID0gY2hhcl9pZHg7Cit9CisKKy8qIEFwcGx5IFRSQU5TIHRvIHRoZSBidWZmZXIgaW4gUFNUUi4gICovCisKK3N0YXRpYyB2b2lkCitpbnRlcm5hbF9mdW5jdGlvbgorcmVfc3RyaW5nX3RyYW5zbGF0ZV9idWZmZXIgKHJlX3N0cmluZ190ICpwc3RyKQoreworICBJZHggYnVmX2lkeCwgZW5kX2lkeDsKKyAgZW5kX2lkeCA9IChwc3RyLT5idWZzX2xlbiA+IHBzdHItPmxlbikgPyBwc3RyLT5sZW4gOiBwc3RyLT5idWZzX2xlbjsKKworICBmb3IgKGJ1Zl9pZHggPSBwc3RyLT52YWxpZF9sZW47IGJ1Zl9pZHggPCBlbmRfaWR4OyArK2J1Zl9pZHgpCisgICAgeworICAgICAgaW50IGNoID0gcHN0ci0+cmF3X21ic1twc3RyLT5yYXdfbWJzX2lkeCArIGJ1Zl9pZHhdOworICAgICAgcHN0ci0+bWJzW2J1Zl9pZHhdID0gcHN0ci0+dHJhbnNbY2hdOworICAgIH0KKworICBwc3RyLT52YWxpZF9sZW4gPSBidWZfaWR4OworICBwc3RyLT52YWxpZF9yYXdfbGVuID0gYnVmX2lkeDsKK30KKworLyogVGhpcyBmdW5jdGlvbiByZS1jb25zdHJ1Y3QgdGhlIGJ1ZmZlcnMuCisgICBDb25jcmV0ZWx5LCBjb252ZXJ0IHRvIHdpZGUgY2hhcmFjdGVyIGluIGNhc2Ugb2YgcHN0ci0+bWJfY3VyX21heCA+IDEsCisgICBjb252ZXJ0IHRvIHVwcGVyIGNhc2UgaW4gY2FzZSBvZiBSRUdfSUNBU0UsIGFwcGx5IHRyYW5zbGF0aW9uLiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCityZV9zdHJpbmdfcmVjb25zdHJ1Y3QgKHJlX3N0cmluZ190ICpwc3RyLCBJZHggaWR4LCBpbnQgZWZsYWdzKQoreworICBJZHggb2Zmc2V0OworCisgIGlmIChCRSAocHN0ci0+cmF3X21ic19pZHggPD0gaWR4LCAwKSkKKyAgICBvZmZzZXQgPSBpZHggLSBwc3RyLT5yYXdfbWJzX2lkeDsKKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIFJlc2V0IGJ1ZmZlci4gICovCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgICAgIGlmIChwc3RyLT5tYl9jdXJfbWF4ID4gMSkKKwltZW1zZXQgKCZwc3RyLT5jdXJfc3RhdGUsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKyAgICAgIHBzdHItPmxlbiA9IHBzdHItPnJhd19sZW47CisgICAgICBwc3RyLT5zdG9wID0gcHN0ci0+cmF3X3N0b3A7CisgICAgICBwc3RyLT52YWxpZF9sZW4gPSAwOworICAgICAgcHN0ci0+cmF3X21ic19pZHggPSAwOworICAgICAgcHN0ci0+dmFsaWRfcmF3X2xlbiA9IDA7CisgICAgICBwc3RyLT5vZmZzZXRzX25lZWRlZCA9IDA7CisgICAgICBwc3RyLT50aXBfY29udGV4dCA9ICgoZWZsYWdzICYgUkVHX05PVEJPTCkgPyBDT05URVhUX0JFR0JVRgorCQkJICAgOiBDT05URVhUX05FV0xJTkUgfCBDT05URVhUX0JFR0JVRik7CisgICAgICBpZiAoIXBzdHItPm1ic19hbGxvY2F0ZWQpCisJcHN0ci0+bWJzID0gKHVuc2lnbmVkIGNoYXIgKikgcHN0ci0+cmF3X21iczsKKyAgICAgIG9mZnNldCA9IGlkeDsKKyAgICB9CisKKyAgaWYgKEJFIChvZmZzZXQgIT0gMCwgMSkpCisgICAgeworICAgICAgLyogU2hvdWxkIHRoZSBhbHJlYWR5IGNoZWNrZWQgY2hhcmFjdGVycyBiZSBrZXB0PyAgKi8KKyAgICAgIGlmIChCRSAob2Zmc2V0IDwgcHN0ci0+dmFsaWRfcmF3X2xlbiwgMSkpCisJeworCSAgLyogWWVzLCBtb3ZlIHRoZW0gdG8gdGhlIGZyb250IG9mIHRoZSBidWZmZXIuICAqLworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisJICBpZiAoQkUgKHBzdHItPm9mZnNldHNfbmVlZGVkLCAwKSkKKwkgICAgeworCSAgICAgIElkeCBsb3cgPSAwLCBoaWdoID0gcHN0ci0+dmFsaWRfbGVuLCBtaWQ7CisJICAgICAgZG8KKwkJeworCQkgIG1pZCA9IChoaWdoICsgbG93KSAvIDI7CisJCSAgaWYgKHBzdHItPm9mZnNldHNbbWlkXSA+IG9mZnNldCkKKwkJICAgIGhpZ2ggPSBtaWQ7CisJCSAgZWxzZSBpZiAocHN0ci0+b2Zmc2V0c1ttaWRdIDwgb2Zmc2V0KQorCQkgICAgbG93ID0gbWlkICsgMTsKKwkJICBlbHNlCisJCSAgICBicmVhazsKKwkJfQorCSAgICAgIHdoaWxlIChsb3cgPCBoaWdoKTsKKwkgICAgICBpZiAocHN0ci0+b2Zmc2V0c1ttaWRdIDwgb2Zmc2V0KQorCQkrK21pZDsKKwkgICAgICBwc3RyLT50aXBfY29udGV4dCA9IHJlX3N0cmluZ19jb250ZXh0X2F0IChwc3RyLCBtaWQgLSAxLAorCQkJCQkJCWVmbGFncyk7CisJICAgICAgLyogVGhpcyBjYW4gYmUgcXVpdGUgY29tcGxpY2F0ZWQsIHNvIGhhbmRsZSBzcGVjaWFsbHkKKwkJIG9ubHkgdGhlIGNvbW1vbiBhbmQgZWFzeSBjYXNlIHdoZXJlIHRoZSBjaGFyYWN0ZXIgd2l0aAorCQkgZGlmZmVyZW50IGxlbmd0aCByZXByZXNlbnRhdGlvbiBvZiBsb3dlciBhbmQgdXBwZXIKKwkJIGNhc2UgaXMgcHJlc2VudCBhdCBvciBhZnRlciBvZmZzZXQuICAqLworCSAgICAgIGlmIChwc3RyLT52YWxpZF9sZW4gPiBvZmZzZXQKKwkJICAmJiBtaWQgPT0gb2Zmc2V0ICYmIHBzdHItPm9mZnNldHNbbWlkXSA9PSBvZmZzZXQpCisJCXsKKwkJICBtZW1tb3ZlIChwc3RyLT53Y3MsIHBzdHItPndjcyArIG9mZnNldCwKKwkJCSAgIChwc3RyLT52YWxpZF9sZW4gLSBvZmZzZXQpICogc2l6ZW9mICh3aW50X3QpKTsKKwkJICBtZW1tb3ZlIChwc3RyLT5tYnMsIHBzdHItPm1icyArIG9mZnNldCwgcHN0ci0+dmFsaWRfbGVuIC0gb2Zmc2V0KTsKKwkJICBwc3RyLT52YWxpZF9sZW4gLT0gb2Zmc2V0OworCQkgIHBzdHItPnZhbGlkX3Jhd19sZW4gLT0gb2Zmc2V0OworCQkgIGZvciAobG93ID0gMDsgbG93IDwgcHN0ci0+dmFsaWRfbGVuOyBsb3crKykKKwkJICAgIHBzdHItPm9mZnNldHNbbG93XSA9IHBzdHItPm9mZnNldHNbbG93ICsgb2Zmc2V0XSAtIG9mZnNldDsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIC8qIE90aGVyd2lzZSwganVzdCBmaW5kIG91dCBob3cgbG9uZyB0aGUgcGFydGlhbCBtdWx0aWJ5dGUKKwkJICAgICBjaGFyYWN0ZXIgYXQgb2Zmc2V0IGlzIGFuZCBmaWxsIGl0IHdpdGggV0VPRi8yNTUuICAqLworCQkgIHBzdHItPmxlbiA9IHBzdHItPnJhd19sZW4gLSBpZHggKyBvZmZzZXQ7CisJCSAgcHN0ci0+c3RvcCA9IHBzdHItPnJhd19zdG9wIC0gaWR4ICsgb2Zmc2V0OworCQkgIHBzdHItPm9mZnNldHNfbmVlZGVkID0gMDsKKwkJICB3aGlsZSAobWlkID4gMCAmJiBwc3RyLT5vZmZzZXRzW21pZCAtIDFdID09IG9mZnNldCkKKwkJICAgIC0tbWlkOworCQkgIHdoaWxlIChtaWQgPCBwc3RyLT52YWxpZF9sZW4pCisJCSAgICBpZiAocHN0ci0+d2NzW21pZF0gIT0gV0VPRikKKwkJICAgICAgYnJlYWs7CisJCSAgICBlbHNlCisJCSAgICAgICsrbWlkOworCQkgIGlmIChtaWQgPT0gcHN0ci0+dmFsaWRfbGVuKQorCQkgICAgcHN0ci0+dmFsaWRfbGVuID0gMDsKKwkJICBlbHNlCisJCSAgICB7CisJCSAgICAgIHBzdHItPnZhbGlkX2xlbiA9IHBzdHItPm9mZnNldHNbbWlkXSAtIG9mZnNldDsKKwkJICAgICAgaWYgKHBzdHItPnZhbGlkX2xlbikKKwkJCXsKKwkJCSAgZm9yIChsb3cgPSAwOyBsb3cgPCBwc3RyLT52YWxpZF9sZW47ICsrbG93KQorCQkJICAgIHBzdHItPndjc1tsb3ddID0gV0VPRjsKKwkJCSAgbWVtc2V0IChwc3RyLT5tYnMsIDI1NSwgcHN0ci0+dmFsaWRfbGVuKTsKKwkJCX0KKwkJICAgIH0KKwkJICBwc3RyLT52YWxpZF9yYXdfbGVuID0gcHN0ci0+dmFsaWRfbGVuOworCQl9CisJICAgIH0KKwkgIGVsc2UKKyNlbmRpZgorCSAgICB7CisJICAgICAgcHN0ci0+dGlwX2NvbnRleHQgPSByZV9zdHJpbmdfY29udGV4dF9hdCAocHN0ciwgb2Zmc2V0IC0gMSwKKwkJCQkJCQllZmxhZ3MpOworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisJICAgICAgaWYgKHBzdHItPm1iX2N1cl9tYXggPiAxKQorCQltZW1tb3ZlIChwc3RyLT53Y3MsIHBzdHItPndjcyArIG9mZnNldCwKKwkJCSAocHN0ci0+dmFsaWRfbGVuIC0gb2Zmc2V0KSAqIHNpemVvZiAod2ludF90KSk7CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKwkgICAgICBpZiAoQkUgKHBzdHItPm1ic19hbGxvY2F0ZWQsIDApKQorCQltZW1tb3ZlIChwc3RyLT5tYnMsIHBzdHItPm1icyArIG9mZnNldCwKKwkJCSBwc3RyLT52YWxpZF9sZW4gLSBvZmZzZXQpOworCSAgICAgIHBzdHItPnZhbGlkX2xlbiAtPSBvZmZzZXQ7CisJICAgICAgcHN0ci0+dmFsaWRfcmF3X2xlbiAtPSBvZmZzZXQ7CisjaWYgREVCVUcKKwkgICAgICBhc3NlcnQgKHBzdHItPnZhbGlkX2xlbiA+IDApOworI2VuZGlmCisJICAgIH0KKwl9CisgICAgICBlbHNlCisJeworCSAgLyogTm8sIHNraXAgYWxsIGNoYXJhY3RlcnMgdW50aWwgSURYLiAgKi8KKwkgIElkeCBwcmV2X3ZhbGlkX2xlbiA9IHBzdHItPnZhbGlkX2xlbjsKKworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisJICBpZiAoQkUgKHBzdHItPm9mZnNldHNfbmVlZGVkLCAwKSkKKwkgICAgeworCSAgICAgIHBzdHItPmxlbiA9IHBzdHItPnJhd19sZW4gLSBpZHggKyBvZmZzZXQ7CisJICAgICAgcHN0ci0+c3RvcCA9IHBzdHItPnJhd19zdG9wIC0gaWR4ICsgb2Zmc2V0OworCSAgICAgIHBzdHItPm9mZnNldHNfbmVlZGVkID0gMDsKKwkgICAgfQorI2VuZGlmCisJICBwc3RyLT52YWxpZF9sZW4gPSAwOworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisJICBpZiAocHN0ci0+bWJfY3VyX21heCA+IDEpCisJICAgIHsKKwkgICAgICBJZHggd2NzX2lkeDsKKwkgICAgICB3aW50X3Qgd2MgPSBXRU9GOworCisJICAgICAgaWYgKHBzdHItPmlzX3V0ZjgpCisJCXsKKwkJICBjb25zdCB1bnNpZ25lZCBjaGFyICpyYXcsICpwLCAqZW5kOworCisJCSAgLyogU3BlY2lhbCBjYXNlIFVURi04LiAgTXVsdGktYnl0ZSBjaGFycyBzdGFydCB3aXRoIGFueQorCQkgICAgIGJ5dGUgb3RoZXIgdGhhbiAweDgwIC0gMHhiZi4gICovCisJCSAgcmF3ID0gcHN0ci0+cmF3X21icyArIHBzdHItPnJhd19tYnNfaWR4OworCQkgIGVuZCA9IHJhdyArIChvZmZzZXQgLSBwc3RyLT5tYl9jdXJfbWF4KTsKKwkJICBpZiAoZW5kIDwgcHN0ci0+cmF3X21icykKKwkJICAgIGVuZCA9IHBzdHItPnJhd19tYnM7CisJCSAgcCA9IHJhdyArIG9mZnNldCAtIDE7CisjaWZkZWYgX0xJQkMKKwkJICAvKiBXZSBrbm93IHRoZSB3Y2hhcl90IGVuY29kaW5nIGlzIFVDUzQsIHNvIGZvciB0aGUgc2ltcGxlCisJCSAgICAgY2FzZSwgQVNDSUkgY2hhcmFjdGVycywgc2tpcCB0aGUgY29udmVyc2lvbiBzdGVwLiAgKi8KKwkJICBpZiAoaXNhc2NpaSAoKnApICYmIEJFIChwc3RyLT50cmFucyA9PSBOVUxMLCAxKSkKKwkJICAgIHsKKwkJICAgICAgbWVtc2V0ICgmcHN0ci0+Y3VyX3N0YXRlLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworCQkgICAgICAvKiBwc3RyLT52YWxpZF9sZW4gPSAwOyAqLworCQkgICAgICB3YyA9ICh3Y2hhcl90KSAqcDsKKwkJICAgIH0KKwkJICBlbHNlCisjZW5kaWYKKwkJICAgIGZvciAoOyBwID49IGVuZDsgLS1wKQorCQkgICAgICBpZiAoKCpwICYgMHhjMCkgIT0gMHg4MCkKKwkJCXsKKwkJCSAgbWJzdGF0ZV90IGN1cl9zdGF0ZTsKKwkJCSAgd2NoYXJfdCB3YzI7CisJCQkgIElkeCBtbGVuID0gcmF3ICsgcHN0ci0+bGVuIC0gcDsKKwkJCSAgdW5zaWduZWQgY2hhciBidWZbNl07CisJCQkgIHNpemVfdCBtYmNsZW47CisKKwkJCSAgaWYgKEJFIChwc3RyLT50cmFucyAhPSBOVUxMLCAwKSkKKwkJCSAgICB7CisJCQkgICAgICBpbnQgaSA9IG1sZW4gPCA2ID8gbWxlbiA6IDY7CisJCQkgICAgICB3aGlsZSAoLS1pID49IDApCisJCQkJYnVmW2ldID0gcHN0ci0+dHJhbnNbcFtpXV07CisJCQkgICAgfQorCQkJICAvKiBYWFggRG9uJ3QgdXNlIG1icnRvd2MsIHdlIGtub3cgd2hpY2ggY29udmVyc2lvbgorCQkJICAgICB0byB1c2UgKFVURi04IC0+IFVDUzQpLiAgKi8KKwkJCSAgbWVtc2V0ICgmY3VyX3N0YXRlLCAwLCBzaXplb2YgKGN1cl9zdGF0ZSkpOworCQkJICBtYmNsZW4gPSBtYnJ0b3djICgmd2MyLCAoY29uc3QgY2hhciAqKSBwLCBtbGVuLAorCQkJCQkgICAgJmN1cl9zdGF0ZSk7CisJCQkgIGlmIChyYXcgKyBvZmZzZXQgLSBwIDw9IG1iY2xlbgorCQkJICAgICAgJiYgbWJjbGVuIDwgKHNpemVfdCkgLTIpCisJCQkgICAgeworCQkJICAgICAgbWVtc2V0ICgmcHN0ci0+Y3VyX3N0YXRlLCAnXDAnLAorCQkJCSAgICAgIHNpemVvZiAobWJzdGF0ZV90KSk7CisJCQkgICAgICBwc3RyLT52YWxpZF9sZW4gPSBtYmNsZW4gLSAocmF3ICsgb2Zmc2V0IC0gcCk7CisJCQkgICAgICB3YyA9IHdjMjsKKwkJCSAgICB9CisJCQkgIGJyZWFrOworCQkJfQorCQl9CisKKwkgICAgICBpZiAod2MgPT0gV0VPRikKKwkJcHN0ci0+dmFsaWRfbGVuID0gcmVfc3RyaW5nX3NraXBfY2hhcnMgKHBzdHIsIGlkeCwgJndjKSAtIGlkeDsKKwkgICAgICBpZiAod2MgPT0gV0VPRikKKwkJcHN0ci0+dGlwX2NvbnRleHQKKwkJICA9IHJlX3N0cmluZ19jb250ZXh0X2F0IChwc3RyLCBwcmV2X3ZhbGlkX2xlbiAtIDEsIGVmbGFncyk7CisJICAgICAgZWxzZQorCQlwc3RyLT50aXBfY29udGV4dCA9ICgoQkUgKHBzdHItPndvcmRfb3BzX3VzZWQgIT0gMCwgMCkKKwkJCQkgICAgICAmJiBJU19XSURFX1dPUkRfQ0hBUiAod2MpKQorCQkJCSAgICAgPyBDT05URVhUX1dPUkQKKwkJCQkgICAgIDogKChJU19XSURFX05FV0xJTkUgKHdjKQorCQkJCQkgJiYgcHN0ci0+bmV3bGluZV9hbmNob3IpCisJCQkJCT8gQ09OVEVYVF9ORVdMSU5FIDogMCkpOworCSAgICAgIGlmIChCRSAocHN0ci0+dmFsaWRfbGVuLCAwKSkKKwkJeworCQkgIGZvciAod2NzX2lkeCA9IDA7IHdjc19pZHggPCBwc3RyLT52YWxpZF9sZW47ICsrd2NzX2lkeCkKKwkJICAgIHBzdHItPndjc1t3Y3NfaWR4XSA9IFdFT0Y7CisJCSAgaWYgKHBzdHItPm1ic19hbGxvY2F0ZWQpCisJCSAgICBtZW1zZXQgKHBzdHItPm1icywgMjU1LCBwc3RyLT52YWxpZF9sZW4pOworCQl9CisJICAgICAgcHN0ci0+dmFsaWRfcmF3X2xlbiA9IHBzdHItPnZhbGlkX2xlbjsKKwkgICAgfQorCSAgZWxzZQorI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisJICAgIHsKKwkgICAgICBpbnQgYyA9IHBzdHItPnJhd19tYnNbcHN0ci0+cmF3X21ic19pZHggKyBvZmZzZXQgLSAxXTsKKwkgICAgICBwc3RyLT52YWxpZF9yYXdfbGVuID0gMDsKKwkgICAgICBpZiAocHN0ci0+dHJhbnMpCisJCWMgPSBwc3RyLT50cmFuc1tjXTsKKwkgICAgICBwc3RyLT50aXBfY29udGV4dCA9IChiaXRzZXRfY29udGFpbiAocHN0ci0+d29yZF9jaGFyLCBjKQorCQkJCSAgID8gQ09OVEVYVF9XT1JECisJCQkJICAgOiAoKElTX05FV0xJTkUgKGMpICYmIHBzdHItPm5ld2xpbmVfYW5jaG9yKQorCQkJCSAgICAgID8gQ09OVEVYVF9ORVdMSU5FIDogMCkpOworCSAgICB9CisJfQorICAgICAgaWYgKCFCRSAocHN0ci0+bWJzX2FsbG9jYXRlZCwgMCkpCisJcHN0ci0+bWJzICs9IG9mZnNldDsKKyAgICB9CisgIHBzdHItPnJhd19tYnNfaWR4ID0gaWR4OworICBwc3RyLT5sZW4gLT0gb2Zmc2V0OworICBwc3RyLT5zdG9wIC09IG9mZnNldDsKKworICAvKiBUaGVuIGJ1aWxkIHRoZSBidWZmZXJzLiAgKi8KKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICBpZiAocHN0ci0+bWJfY3VyX21heCA+IDEpCisgICAgeworICAgICAgaWYgKHBzdHItPmljYXNlKQorCXsKKwkgIHJlZ19lcnJjb2RlX3QgcmV0ID0gYnVpbGRfd2NzX3VwcGVyX2J1ZmZlciAocHN0cik7CisJICBpZiAoQkUgKHJldCAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHJldHVybiByZXQ7CisJfQorICAgICAgZWxzZQorCWJ1aWxkX3djc19idWZmZXIgKHBzdHIpOworICAgIH0KKyAgZWxzZQorI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisgICAgaWYgKEJFIChwc3RyLT5tYnNfYWxsb2NhdGVkLCAwKSkKKyAgICAgIHsKKwlpZiAocHN0ci0+aWNhc2UpCisJICBidWlsZF91cHBlcl9idWZmZXIgKHBzdHIpOworCWVsc2UgaWYgKHBzdHItPnRyYW5zICE9IE5VTEwpCisJICByZV9zdHJpbmdfdHJhbnNsYXRlX2J1ZmZlciAocHN0cik7CisgICAgICB9CisgICAgZWxzZQorICAgICAgcHN0ci0+dmFsaWRfbGVuID0gcHN0ci0+bGVuOworCisgIHBzdHItPmN1cl9pZHggPSAwOworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyCitpbnRlcm5hbF9mdW5jdGlvbiBfX2F0dHJpYnV0ZSAoKHB1cmUpKQorcmVfc3RyaW5nX3BlZWtfYnl0ZV9jYXNlIChjb25zdCByZV9zdHJpbmdfdCAqcHN0ciwgSWR4IGlkeCkKK3sKKyAgaW50IGNoOworICBJZHggb2ZmOworCisgIC8qIEhhbmRsZSB0aGUgY29tbW9uIChlYXNpZXN0KSBjYXNlcyBmaXJzdC4gICovCisgIGlmIChCRSAoIXBzdHItPm1ic19hbGxvY2F0ZWQsIDEpKQorICAgIHJldHVybiByZV9zdHJpbmdfcGVla19ieXRlIChwc3RyLCBpZHgpOworCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgaWYgKHBzdHItPm1iX2N1cl9tYXggPiAxCisgICAgICAmJiAhIHJlX3N0cmluZ19pc19zaW5nbGVfYnl0ZV9jaGFyIChwc3RyLCBwc3RyLT5jdXJfaWR4ICsgaWR4KSkKKyAgICByZXR1cm4gcmVfc3RyaW5nX3BlZWtfYnl0ZSAocHN0ciwgaWR4KTsKKyNlbmRpZgorCisgIG9mZiA9IHBzdHItPmN1cl9pZHggKyBpZHg7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgaWYgKHBzdHItPm9mZnNldHNfbmVlZGVkKQorICAgIG9mZiA9IHBzdHItPm9mZnNldHNbb2ZmXTsKKyNlbmRpZgorCisgIGNoID0gcHN0ci0+cmF3X21ic1twc3RyLT5yYXdfbWJzX2lkeCArIG9mZl07CisKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAvKiBFbnN1cmUgdGhhdCBlLmcuIGZvciB0cl9UUi5VVEYtOCBCQUNLU0xBU0ggRE9UTEVTUyBTTUFMTCBMRVRURVIgSQorICAgICB0aGlzIGZ1bmN0aW9uIHJldHVybnMgQ0FQSVRBTCBMRVRURVIgSSBpbnN0ZWFkIG9mIGZpcnN0IGJ5dGUgb2YKKyAgICAgRE9UTEVTUyBTTUFMTCBMRVRURVIgSS4gIFRoZSBsYXR0ZXIgd291bGQgY29uZnVzZSB0aGUgcGFyc2VyLAorICAgICBzaW5jZSBwZWVrX2J5dGVfY2FzZSBkb2Vzbid0IGFkdmFuY2UgY3VyX2lkeCBpbiBhbnkgd2F5LiAgKi8KKyAgaWYgKHBzdHItPm9mZnNldHNfbmVlZGVkICYmICFpc2FzY2lpIChjaCkpCisgICAgcmV0dXJuIHJlX3N0cmluZ19wZWVrX2J5dGUgKHBzdHIsIGlkeCk7CisjZW5kaWYKKworICByZXR1cm4gY2g7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyCitpbnRlcm5hbF9mdW5jdGlvbiBfX2F0dHJpYnV0ZSAoKHB1cmUpKQorcmVfc3RyaW5nX2ZldGNoX2J5dGVfY2FzZSAocmVfc3RyaW5nX3QgKnBzdHIpCit7CisgIGlmIChCRSAoIXBzdHItPm1ic19hbGxvY2F0ZWQsIDEpKQorICAgIHJldHVybiByZV9zdHJpbmdfZmV0Y2hfYnl0ZSAocHN0cik7CisKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICBpZiAocHN0ci0+b2Zmc2V0c19uZWVkZWQpCisgICAgeworICAgICAgSWR4IG9mZjsKKyAgICAgIGludCBjaDsKKworICAgICAgLyogRm9yIHRyX1RSLlVURi04IFtbOmlzbG93ZXI6XV0gdGhlcmUgaXMKKwkgW1s6IENBUElUQUwgTEVUVEVSIEkgV0lUSCBET1QgbG93ZXI6XV0gaW4gbWJzLiAgU2tpcAorCSBpbiB0aGF0IGNhc2UgdGhlIHdob2xlIG11bHRpLWJ5dGUgY2hhcmFjdGVyIGFuZCByZXR1cm4KKwkgdGhlIG9yaWdpbmFsIGxldHRlci4gIE9uIHRoZSBvdGhlciBzaWRlLCB3aXRoCisJIFtbOiBET1RMRVNTIFNNQUxMIExFVFRFUiBJIHJldHVybiBbWzpJLCBhcyBkb2luZworCSBhbnl0aGluZyBlbHNlIHdvdWxkIGNvbXBsaWNhdGUgdGhpbmdzIHRvbyBtdWNoLiAgKi8KKworICAgICAgaWYgKCFyZV9zdHJpbmdfZmlyc3RfYnl0ZSAocHN0ciwgcHN0ci0+Y3VyX2lkeCkpCisJcmV0dXJuIHJlX3N0cmluZ19mZXRjaF9ieXRlIChwc3RyKTsKKworICAgICAgb2ZmID0gcHN0ci0+b2Zmc2V0c1twc3RyLT5jdXJfaWR4XTsKKyAgICAgIGNoID0gcHN0ci0+cmF3X21ic1twc3RyLT5yYXdfbWJzX2lkeCArIG9mZl07CisKKyAgICAgIGlmICghIGlzYXNjaWkgKGNoKSkKKwlyZXR1cm4gcmVfc3RyaW5nX2ZldGNoX2J5dGUgKHBzdHIpOworCisgICAgICByZV9zdHJpbmdfc2tpcF9ieXRlcyAocHN0ciwKKwkJCSAgICByZV9zdHJpbmdfY2hhcl9zaXplX2F0IChwc3RyLCBwc3RyLT5jdXJfaWR4KSk7CisgICAgICByZXR1cm4gY2g7CisgICAgfQorI2VuZGlmCisKKyAgcmV0dXJuIHBzdHItPnJhd19tYnNbcHN0ci0+cmF3X21ic19pZHggKyBwc3RyLT5jdXJfaWR4KytdOworfQorCitzdGF0aWMgdm9pZAoraW50ZXJuYWxfZnVuY3Rpb24KK3JlX3N0cmluZ19kZXN0cnVjdCAocmVfc3RyaW5nX3QgKnBzdHIpCit7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgcmVfZnJlZSAocHN0ci0+d2NzKTsKKyAgcmVfZnJlZSAocHN0ci0+b2Zmc2V0cyk7CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gICovCisgIGlmIChwc3RyLT5tYnNfYWxsb2NhdGVkKQorICAgIHJlX2ZyZWUgKHBzdHItPm1icyk7Cit9CisKKy8qIFJldHVybiB0aGUgY29udGV4dCBhdCBJRFggaW4gSU5QVVQuICAqLworCitzdGF0aWMgdW5zaWduZWQgaW50CitpbnRlcm5hbF9mdW5jdGlvbgorcmVfc3RyaW5nX2NvbnRleHRfYXQgKGNvbnN0IHJlX3N0cmluZ190ICppbnB1dCwgSWR4IGlkeCwgaW50IGVmbGFncykKK3sKKyAgaW50IGM7CisgIGlmIChCRSAoISBSRUdfVkFMSURfSU5ERVggKGlkeCksIDApKQorICAgIC8qIEluIHRoaXMgY2FzZSwgd2UgdXNlIHRoZSB2YWx1ZSBzdG9yZWQgaW4gaW5wdXQtPnRpcF9jb250ZXh0LAorICAgICAgIHNpbmNlIHdlIGNhbid0IGtub3cgdGhlIGNoYXJhY3RlciBpbiBpbnB1dC0+bWJzWy0xXSBoZXJlLiAgKi8KKyAgICByZXR1cm4gaW5wdXQtPnRpcF9jb250ZXh0OworICBpZiAoQkUgKGlkeCA9PSBpbnB1dC0+bGVuLCAwKSkKKyAgICByZXR1cm4gKChlZmxhZ3MgJiBSRUdfTk9URU9MKSA/IENPTlRFWFRfRU5EQlVGCisJICAgIDogQ09OVEVYVF9ORVdMSU5FIHwgQ09OVEVYVF9FTkRCVUYpOworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIGlmIChpbnB1dC0+bWJfY3VyX21heCA+IDEpCisgICAgeworICAgICAgd2ludF90IHdjOworICAgICAgSWR4IHdjX2lkeCA9IGlkeDsKKyAgICAgIHdoaWxlKGlucHV0LT53Y3Nbd2NfaWR4XSA9PSBXRU9GKQorCXsKKyNpZmRlZiBERUJVRworCSAgLyogSXQgbXVzdCBub3QgaGFwcGVuLiAgKi8KKwkgIGFzc2VydCAoUkVHX1ZBTElEX0lOREVYICh3Y19pZHgpKTsKKyNlbmRpZgorCSAgLS13Y19pZHg7CisJICBpZiAoISBSRUdfVkFMSURfSU5ERVggKHdjX2lkeCkpCisJICAgIHJldHVybiBpbnB1dC0+dGlwX2NvbnRleHQ7CisJfQorICAgICAgd2MgPSBpbnB1dC0+d2NzW3djX2lkeF07CisgICAgICBpZiAoQkUgKGlucHV0LT53b3JkX29wc191c2VkICE9IDAsIDApICYmIElTX1dJREVfV09SRF9DSEFSICh3YykpCisJcmV0dXJuIENPTlRFWFRfV09SRDsKKyAgICAgIHJldHVybiAoSVNfV0lERV9ORVdMSU5FICh3YykgJiYgaW5wdXQtPm5ld2xpbmVfYW5jaG9yCisJICAgICAgPyBDT05URVhUX05FV0xJTkUgOiAwKTsKKyAgICB9CisgIGVsc2UKKyNlbmRpZgorICAgIHsKKyAgICAgIGMgPSByZV9zdHJpbmdfYnl0ZV9hdCAoaW5wdXQsIGlkeCk7CisgICAgICBpZiAoYml0c2V0X2NvbnRhaW4gKGlucHV0LT53b3JkX2NoYXIsIGMpKQorCXJldHVybiBDT05URVhUX1dPUkQ7CisgICAgICByZXR1cm4gSVNfTkVXTElORSAoYykgJiYgaW5wdXQtPm5ld2xpbmVfYW5jaG9yID8gQ09OVEVYVF9ORVdMSU5FIDogMDsKKyAgICB9Cit9CisMCisvKiBGdW5jdGlvbnMgZm9yIHNldCBvcGVyYXRpb24uICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK3JlX25vZGVfc2V0X2FsbG9jIChyZV9ub2RlX3NldCAqc2V0LCBJZHggc2l6ZSkKK3sKKyAgc2V0LT5hbGxvYyA9IHNpemU7CisgIHNldC0+bmVsZW0gPSAwOworICBzZXQtPmVsZW1zID0gcmVfbWFsbG9jIChJZHgsIHNpemUpOworICBpZiAoQkUgKHNldC0+ZWxlbXMgPT0gTlVMTCwgMCkpCisgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCityZV9ub2RlX3NldF9pbml0XzEgKHJlX25vZGVfc2V0ICpzZXQsIElkeCBlbGVtKQoreworICBzZXQtPmFsbG9jID0gMTsKKyAgc2V0LT5uZWxlbSA9IDE7CisgIHNldC0+ZWxlbXMgPSByZV9tYWxsb2MgKElkeCwgMSk7CisgIGlmIChCRSAoc2V0LT5lbGVtcyA9PSBOVUxMLCAwKSkKKyAgICB7CisgICAgICBzZXQtPmFsbG9jID0gc2V0LT5uZWxlbSA9IDA7CisgICAgICByZXR1cm4gUkVHX0VTUEFDRTsKKyAgICB9CisgIHNldC0+ZWxlbXNbMF0gPSBlbGVtOworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorcmVfbm9kZV9zZXRfaW5pdF8yIChyZV9ub2RlX3NldCAqc2V0LCBJZHggZWxlbTEsIElkeCBlbGVtMikKK3sKKyAgc2V0LT5hbGxvYyA9IDI7CisgIHNldC0+ZWxlbXMgPSByZV9tYWxsb2MgKElkeCwgMik7CisgIGlmIChCRSAoc2V0LT5lbGVtcyA9PSBOVUxMLCAwKSkKKyAgICByZXR1cm4gUkVHX0VTUEFDRTsKKyAgaWYgKGVsZW0xID09IGVsZW0yKQorICAgIHsKKyAgICAgIHNldC0+bmVsZW0gPSAxOworICAgICAgc2V0LT5lbGVtc1swXSA9IGVsZW0xOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHNldC0+bmVsZW0gPSAyOworICAgICAgaWYgKGVsZW0xIDwgZWxlbTIpCisJeworCSAgc2V0LT5lbGVtc1swXSA9IGVsZW0xOworCSAgc2V0LT5lbGVtc1sxXSA9IGVsZW0yOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBzZXQtPmVsZW1zWzBdID0gZWxlbTI7CisJICBzZXQtPmVsZW1zWzFdID0gZWxlbTE7CisJfQorICAgIH0KKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK3JlX25vZGVfc2V0X2luaXRfY29weSAocmVfbm9kZV9zZXQgKmRlc3QsIGNvbnN0IHJlX25vZGVfc2V0ICpzcmMpCit7CisgIGRlc3QtPm5lbGVtID0gc3JjLT5uZWxlbTsKKyAgaWYgKHNyYy0+bmVsZW0gPiAwKQorICAgIHsKKyAgICAgIGRlc3QtPmFsbG9jID0gZGVzdC0+bmVsZW07CisgICAgICBkZXN0LT5lbGVtcyA9IHJlX21hbGxvYyAoSWR4LCBkZXN0LT5hbGxvYyk7CisgICAgICBpZiAoQkUgKGRlc3QtPmVsZW1zID09IE5VTEwsIDApKQorCXsKKwkgIGRlc3QtPmFsbG9jID0gZGVzdC0+bmVsZW0gPSAwOworCSAgcmV0dXJuIFJFR19FU1BBQ0U7CisJfQorICAgICAgbWVtY3B5IChkZXN0LT5lbGVtcywgc3JjLT5lbGVtcywgc3JjLT5uZWxlbSAqIHNpemVvZiAoSWR4KSk7CisgICAgfQorICBlbHNlCisgICAgcmVfbm9kZV9zZXRfaW5pdF9lbXB0eSAoZGVzdCk7CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworLyogQ2FsY3VsYXRlIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIHNldHMgU1JDMSBhbmQgU1JDMi4gQW5kIG1lcmdlIGl0IHRvCisgICBERVNULiBSZXR1cm4gdmFsdWUgaW5kaWNhdGUgdGhlIGVycm9yIGNvZGUgb3IgUkVHX05PRVJST1IgaWYgc3VjY2VlZGVkLgorICAgTm90ZTogV2UgYXNzdW1lIGRlc3QtPmVsZW1zIGlzIE5VTEwsIHdoZW4gZGVzdC0+YWxsb2MgaXMgMC4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorcmVfbm9kZV9zZXRfYWRkX2ludGVyc2VjdCAocmVfbm9kZV9zZXQgKmRlc3QsIGNvbnN0IHJlX25vZGVfc2V0ICpzcmMxLAorCQkJICAgY29uc3QgcmVfbm9kZV9zZXQgKnNyYzIpCit7CisgIElkeCBpMSwgaTIsIGlzLCBpZCwgZGVsdGEsIHNiYXNlOworICBpZiAoc3JjMS0+bmVsZW0gPT0gMCB8fCBzcmMyLT5uZWxlbSA9PSAwKQorICAgIHJldHVybiBSRUdfTk9FUlJPUjsKKworICAvKiBXZSBuZWVkIGRlc3QtPm5lbGVtICsgMiAqIGVsZW1zX2luX2ludGVyc2VjdGlvbjsgdGhpcyBpcyBhCisgICAgIGNvbnNlcnZhdGl2ZSBlc3RpbWF0ZS4gICovCisgIGlmIChzcmMxLT5uZWxlbSArIHNyYzItPm5lbGVtICsgZGVzdC0+bmVsZW0gPiBkZXN0LT5hbGxvYykKKyAgICB7CisgICAgICBJZHggbmV3X2FsbG9jID0gc3JjMS0+bmVsZW0gKyBzcmMyLT5uZWxlbSArIGRlc3QtPmFsbG9jOworICAgICAgSWR4ICpuZXdfZWxlbXMgPSByZV9yZWFsbG9jIChkZXN0LT5lbGVtcywgSWR4LCBuZXdfYWxsb2MpOworICAgICAgaWYgKEJFIChuZXdfZWxlbXMgPT0gTlVMTCwgMCkpCisgICAgICAgIHJldHVybiBSRUdfRVNQQUNFOworICAgICAgZGVzdC0+ZWxlbXMgPSBuZXdfZWxlbXM7CisgICAgICBkZXN0LT5hbGxvYyA9IG5ld19hbGxvYzsKKyAgICB9CisKKyAgLyogRmluZCB0aGUgaXRlbXMgaW4gdGhlIGludGVyc2VjdGlvbiBvZiBTUkMxIGFuZCBTUkMyLCBhbmQgY29weQorICAgICBpbnRvIHRoZSB0b3Agb2YgREVTVCB0aG9zZSB0aGF0IGFyZSBub3QgYWxyZWFkeSBpbiBERVNUIGl0c2VsZi4gICovCisgIHNiYXNlID0gZGVzdC0+bmVsZW0gKyBzcmMxLT5uZWxlbSArIHNyYzItPm5lbGVtOworICBpMSA9IHNyYzEtPm5lbGVtIC0gMTsKKyAgaTIgPSBzcmMyLT5uZWxlbSAtIDE7CisgIGlkID0gZGVzdC0+bmVsZW0gLSAxOworICBmb3IgKDs7KQorICAgIHsKKyAgICAgIGlmIChzcmMxLT5lbGVtc1tpMV0gPT0gc3JjMi0+ZWxlbXNbaTJdKQorCXsKKwkgIC8qIFRyeSB0byBmaW5kIHRoZSBpdGVtIGluIERFU1QuICBNYXliZSB3ZSBjb3VsZCBiaW5hcnkgc2VhcmNoPyAgKi8KKwkgIHdoaWxlIChSRUdfVkFMSURfSU5ERVggKGlkKSAmJiBkZXN0LT5lbGVtc1tpZF0gPiBzcmMxLT5lbGVtc1tpMV0pCisJICAgIC0taWQ7CisKKyAgICAgICAgICBpZiAoISBSRUdfVkFMSURfSU5ERVggKGlkKSB8fCBkZXN0LT5lbGVtc1tpZF0gIT0gc3JjMS0+ZWxlbXNbaTFdKQorICAgICAgICAgICAgZGVzdC0+ZWxlbXNbLS1zYmFzZV0gPSBzcmMxLT5lbGVtc1tpMV07CisKKwkgIGlmICghIFJFR19WQUxJRF9JTkRFWCAoLS1pMSkgfHwgISBSRUdfVkFMSURfSU5ERVggKC0taTIpKQorCSAgICBicmVhazsKKwl9CisKKyAgICAgIC8qIExvd2VyIHRoZSBoaWdoZXN0IG9mIHRoZSB0d28gaXRlbXMuICAqLworICAgICAgZWxzZSBpZiAoc3JjMS0+ZWxlbXNbaTFdIDwgc3JjMi0+ZWxlbXNbaTJdKQorCXsKKwkgIGlmICghIFJFR19WQUxJRF9JTkRFWCAoLS1pMikpCisJICAgIGJyZWFrOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBpZiAoISBSRUdfVkFMSURfSU5ERVggKC0taTEpKQorCSAgICBicmVhazsKKwl9CisgICAgfQorCisgIGlkID0gZGVzdC0+bmVsZW0gLSAxOworICBpcyA9IGRlc3QtPm5lbGVtICsgc3JjMS0+bmVsZW0gKyBzcmMyLT5uZWxlbSAtIDE7CisgIGRlbHRhID0gaXMgLSBzYmFzZSArIDE7CisKKyAgLyogTm93IGNvcHkuICBXaGVuIERFTFRBIGJlY29tZXMgemVybywgdGhlIHJlbWFpbmluZworICAgICBERVNUIGVsZW1lbnRzIGFyZSBhbHJlYWR5IGluIHBsYWNlOyB0aGlzIGlzIG1vcmUgb3IKKyAgICAgbGVzcyB0aGUgc2FtZSBsb29wIHRoYXQgaXMgaW4gcmVfbm9kZV9zZXRfbWVyZ2UuICAqLworICBkZXN0LT5uZWxlbSArPSBkZWx0YTsKKyAgaWYgKGRlbHRhID4gMCAmJiBSRUdfVkFMSURfSU5ERVggKGlkKSkKKyAgICBmb3IgKDs7KQorICAgICAgeworICAgICAgICBpZiAoZGVzdC0+ZWxlbXNbaXNdID4gZGVzdC0+ZWxlbXNbaWRdKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIENvcHkgZnJvbSB0aGUgdG9wLiAgKi8KKyAgICAgICAgICAgIGRlc3QtPmVsZW1zW2lkICsgZGVsdGEtLV0gPSBkZXN0LT5lbGVtc1tpcy0tXTsKKyAgICAgICAgICAgIGlmIChkZWx0YSA9PSAwKQorICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgICAvKiBTbGlkZSBmcm9tIHRoZSBib3R0b20uICAqLworICAgICAgICAgICAgZGVzdC0+ZWxlbXNbaWQgKyBkZWx0YV0gPSBkZXN0LT5lbGVtc1tpZF07CisgICAgICAgICAgICBpZiAoISBSRUdfVkFMSURfSU5ERVggKC0taWQpKQorICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICB9CisKKyAgLyogQ29weSByZW1haW5pbmcgU1JDIGVsZW1lbnRzLiAgKi8KKyAgbWVtY3B5IChkZXN0LT5lbGVtcywgZGVzdC0+ZWxlbXMgKyBzYmFzZSwgZGVsdGEgKiBzaXplb2YgKElkeCkpOworCisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworLyogQ2FsY3VsYXRlIHRoZSB1bmlvbiBzZXQgb2YgdGhlIHNldHMgU1JDMSBhbmQgU1JDMi4gQW5kIHN0b3JlIGl0IHRvCisgICBERVNULiBSZXR1cm4gdmFsdWUgaW5kaWNhdGUgdGhlIGVycm9yIGNvZGUgb3IgUkVHX05PRVJST1IgaWYgc3VjY2VlZGVkLiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCityZV9ub2RlX3NldF9pbml0X3VuaW9uIChyZV9ub2RlX3NldCAqZGVzdCwgY29uc3QgcmVfbm9kZV9zZXQgKnNyYzEsCisJCQljb25zdCByZV9ub2RlX3NldCAqc3JjMikKK3sKKyAgSWR4IGkxLCBpMiwgaWQ7CisgIGlmIChzcmMxICE9IE5VTEwgJiYgc3JjMS0+bmVsZW0gPiAwICYmIHNyYzIgIT0gTlVMTCAmJiBzcmMyLT5uZWxlbSA+IDApCisgICAgeworICAgICAgZGVzdC0+YWxsb2MgPSBzcmMxLT5uZWxlbSArIHNyYzItPm5lbGVtOworICAgICAgZGVzdC0+ZWxlbXMgPSByZV9tYWxsb2MgKElkeCwgZGVzdC0+YWxsb2MpOworICAgICAgaWYgKEJFIChkZXN0LT5lbGVtcyA9PSBOVUxMLCAwKSkKKwlyZXR1cm4gUkVHX0VTUEFDRTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpZiAoc3JjMSAhPSBOVUxMICYmIHNyYzEtPm5lbGVtID4gMCkKKwlyZXR1cm4gcmVfbm9kZV9zZXRfaW5pdF9jb3B5IChkZXN0LCBzcmMxKTsKKyAgICAgIGVsc2UgaWYgKHNyYzIgIT0gTlVMTCAmJiBzcmMyLT5uZWxlbSA+IDApCisJcmV0dXJuIHJlX25vZGVfc2V0X2luaXRfY29weSAoZGVzdCwgc3JjMik7CisgICAgICBlbHNlCisJcmVfbm9kZV9zZXRfaW5pdF9lbXB0eSAoZGVzdCk7CisgICAgICByZXR1cm4gUkVHX05PRVJST1I7CisgICAgfQorICBmb3IgKGkxID0gaTIgPSBpZCA9IDAgOyBpMSA8IHNyYzEtPm5lbGVtICYmIGkyIDwgc3JjMi0+bmVsZW0gOykKKyAgICB7CisgICAgICBpZiAoc3JjMS0+ZWxlbXNbaTFdID4gc3JjMi0+ZWxlbXNbaTJdKQorCXsKKwkgIGRlc3QtPmVsZW1zW2lkKytdID0gc3JjMi0+ZWxlbXNbaTIrK107CisJICBjb250aW51ZTsKKwl9CisgICAgICBpZiAoc3JjMS0+ZWxlbXNbaTFdID09IHNyYzItPmVsZW1zW2kyXSkKKwkrK2kyOworICAgICAgZGVzdC0+ZWxlbXNbaWQrK10gPSBzcmMxLT5lbGVtc1tpMSsrXTsKKyAgICB9CisgIGlmIChpMSA8IHNyYzEtPm5lbGVtKQorICAgIHsKKyAgICAgIG1lbWNweSAoZGVzdC0+ZWxlbXMgKyBpZCwgc3JjMS0+ZWxlbXMgKyBpMSwKKwkgICAgIChzcmMxLT5uZWxlbSAtIGkxKSAqIHNpemVvZiAoSWR4KSk7CisgICAgICBpZCArPSBzcmMxLT5uZWxlbSAtIGkxOworICAgIH0KKyAgZWxzZSBpZiAoaTIgPCBzcmMyLT5uZWxlbSkKKyAgICB7CisgICAgICBtZW1jcHkgKGRlc3QtPmVsZW1zICsgaWQsIHNyYzItPmVsZW1zICsgaTIsCisJICAgICAoc3JjMi0+bmVsZW0gLSBpMikgKiBzaXplb2YgKElkeCkpOworICAgICAgaWQgKz0gc3JjMi0+bmVsZW0gLSBpMjsKKyAgICB9CisgIGRlc3QtPm5lbGVtID0gaWQ7CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworLyogQ2FsY3VsYXRlIHRoZSB1bmlvbiBzZXQgb2YgdGhlIHNldHMgREVTVCBhbmQgU1JDLiBBbmQgc3RvcmUgaXQgdG8KKyAgIERFU1QuIFJldHVybiB2YWx1ZSBpbmRpY2F0ZSB0aGUgZXJyb3IgY29kZSBvciBSRUdfTk9FUlJPUiBpZiBzdWNjZWVkZWQuICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK3JlX25vZGVfc2V0X21lcmdlIChyZV9ub2RlX3NldCAqZGVzdCwgY29uc3QgcmVfbm9kZV9zZXQgKnNyYykKK3sKKyAgSWR4IGlzLCBpZCwgc2Jhc2UsIGRlbHRhOworICBpZiAoc3JjID09IE5VTEwgfHwgc3JjLT5uZWxlbSA9PSAwKQorICAgIHJldHVybiBSRUdfTk9FUlJPUjsKKyAgaWYgKGRlc3QtPmFsbG9jIDwgMiAqIHNyYy0+bmVsZW0gKyBkZXN0LT5uZWxlbSkKKyAgICB7CisgICAgICBJZHggbmV3X2FsbG9jID0gMiAqIChzcmMtPm5lbGVtICsgZGVzdC0+YWxsb2MpOworICAgICAgSWR4ICpuZXdfYnVmZmVyID0gcmVfcmVhbGxvYyAoZGVzdC0+ZWxlbXMsIElkeCwgbmV3X2FsbG9jKTsKKyAgICAgIGlmIChCRSAobmV3X2J1ZmZlciA9PSBOVUxMLCAwKSkKKwlyZXR1cm4gUkVHX0VTUEFDRTsKKyAgICAgIGRlc3QtPmVsZW1zID0gbmV3X2J1ZmZlcjsKKyAgICAgIGRlc3QtPmFsbG9jID0gbmV3X2FsbG9jOworICAgIH0KKworICBpZiAoQkUgKGRlc3QtPm5lbGVtID09IDAsIDApKQorICAgIHsKKyAgICAgIGRlc3QtPm5lbGVtID0gc3JjLT5uZWxlbTsKKyAgICAgIG1lbWNweSAoZGVzdC0+ZWxlbXMsIHNyYy0+ZWxlbXMsIHNyYy0+bmVsZW0gKiBzaXplb2YgKElkeCkpOworICAgICAgcmV0dXJuIFJFR19OT0VSUk9SOworICAgIH0KKworICAvKiBDb3B5IGludG8gdGhlIHRvcCBvZiBERVNUIHRoZSBpdGVtcyBvZiBTUkMgdGhhdCBhcmUgbm90CisgICAgIGZvdW5kIGluIERFU1QuICBNYXliZSB3ZSBjb3VsZCBiaW5hcnkgc2VhcmNoIGluIERFU1Q/ICAqLworICBmb3IgKHNiYXNlID0gZGVzdC0+bmVsZW0gKyAyICogc3JjLT5uZWxlbSwKKyAgICAgICBpcyA9IHNyYy0+bmVsZW0gLSAxLCBpZCA9IGRlc3QtPm5lbGVtIC0gMTsKKyAgICAgICBSRUdfVkFMSURfSU5ERVggKGlzKSAmJiBSRUdfVkFMSURfSU5ERVggKGlkKTsgKQorICAgIHsKKyAgICAgIGlmIChkZXN0LT5lbGVtc1tpZF0gPT0gc3JjLT5lbGVtc1tpc10pCisgICAgICAgIGlzLS0sIGlkLS07CisgICAgICBlbHNlIGlmIChkZXN0LT5lbGVtc1tpZF0gPCBzcmMtPmVsZW1zW2lzXSkKKyAgICAgICAgZGVzdC0+ZWxlbXNbLS1zYmFzZV0gPSBzcmMtPmVsZW1zW2lzLS1dOworICAgICAgZWxzZSAvKiBpZiAoZGVzdC0+ZWxlbXNbaWRdID4gc3JjLT5lbGVtc1tpc10pICovCisgICAgICAgIC0taWQ7CisgICAgfQorCisgIGlmIChSRUdfVkFMSURfSU5ERVggKGlzKSkKKyAgICB7CisgICAgICAvKiBJZiBERVNUIGlzIGV4aGF1c3RlZCwgdGhlIHJlbWFpbmluZyBpdGVtcyBvZiBTUkMgbXVzdCBiZSB1bmlxdWUuICAqLworICAgICAgc2Jhc2UgLT0gaXMgKyAxOworICAgICAgbWVtY3B5IChkZXN0LT5lbGVtcyArIHNiYXNlLCBzcmMtPmVsZW1zLCAoaXMgKyAxKSAqIHNpemVvZiAoSWR4KSk7CisgICAgfQorCisgIGlkID0gZGVzdC0+bmVsZW0gLSAxOworICBpcyA9IGRlc3QtPm5lbGVtICsgMiAqIHNyYy0+bmVsZW0gLSAxOworICBkZWx0YSA9IGlzIC0gc2Jhc2UgKyAxOworICBpZiAoZGVsdGEgPT0gMCkKKyAgICByZXR1cm4gUkVHX05PRVJST1I7CisKKyAgLyogTm93IGNvcHkuICBXaGVuIERFTFRBIGJlY29tZXMgemVybywgdGhlIHJlbWFpbmluZworICAgICBERVNUIGVsZW1lbnRzIGFyZSBhbHJlYWR5IGluIHBsYWNlLiAgKi8KKyAgZGVzdC0+bmVsZW0gKz0gZGVsdGE7CisgIGZvciAoOzspCisgICAgeworICAgICAgaWYgKGRlc3QtPmVsZW1zW2lzXSA+IGRlc3QtPmVsZW1zW2lkXSkKKyAgICAgICAgeworCSAgLyogQ29weSBmcm9tIHRoZSB0b3AuICAqLworICAgICAgICAgIGRlc3QtPmVsZW1zW2lkICsgZGVsdGEtLV0gPSBkZXN0LT5lbGVtc1tpcy0tXTsKKwkgIGlmIChkZWx0YSA9PSAwKQorCSAgICBicmVhazsKKwl9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAvKiBTbGlkZSBmcm9tIHRoZSBib3R0b20uICAqLworICAgICAgICAgIGRlc3QtPmVsZW1zW2lkICsgZGVsdGFdID0gZGVzdC0+ZWxlbXNbaWRdOworCSAgaWYgKCEgUkVHX1ZBTElEX0lOREVYICgtLWlkKSkKKwkgICAgeworCSAgICAgIC8qIENvcHkgcmVtYWluaW5nIFNSQyBlbGVtZW50cy4gICovCisJICAgICAgbWVtY3B5IChkZXN0LT5lbGVtcywgZGVzdC0+ZWxlbXMgKyBzYmFzZSwKKwkgICAgICAgICAgICAgIGRlbHRhICogc2l6ZW9mIChJZHgpKTsKKwkgICAgICBicmVhazsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCisvKiBJbnNlcnQgdGhlIG5ldyBlbGVtZW50IEVMRU0gdG8gdGhlIHJlX25vZGVfc2V0KiBTRVQuCisgICBTRVQgc2hvdWxkIG5vdCBhbHJlYWR5IGhhdmUgRUxFTS4KKyAgIFJldHVybiB0cnVlIGlmIHN1Y2Nlc3NmdWwuICAqLworCitzdGF0aWMgYm9vbAoraW50ZXJuYWxfZnVuY3Rpb24KK3JlX25vZGVfc2V0X2luc2VydCAocmVfbm9kZV9zZXQgKnNldCwgSWR4IGVsZW0pCit7CisgIElkeCBpZHg7CisgIC8qIEluIGNhc2UgdGhlIHNldCBpcyBlbXB0eS4gICovCisgIGlmIChzZXQtPmFsbG9jID09IDApCisgICAgcmV0dXJuIEJFIChyZV9ub2RlX3NldF9pbml0XzEgKHNldCwgZWxlbSkgPT0gUkVHX05PRVJST1IsIDEpOworCisgIGlmIChCRSAoc2V0LT5uZWxlbSwgMCkgPT0gMCkKKyAgICB7CisgICAgICAvKiBXZSBhbHJlYWR5IGd1YXJhbnRlZWQgYWJvdmUgdGhhdCBzZXQtPmFsbG9jICE9IDAuICAqLworICAgICAgc2V0LT5lbGVtc1swXSA9IGVsZW07CisgICAgICArK3NldC0+bmVsZW07CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgLyogUmVhbGxvYyBpZiB3ZSBuZWVkLiAgKi8KKyAgaWYgKHNldC0+YWxsb2MgPT0gc2V0LT5uZWxlbSkKKyAgICB7CisgICAgICBJZHggKm5ld19lbGVtczsKKyAgICAgIHNldC0+YWxsb2MgPSBzZXQtPmFsbG9jICogMjsKKyAgICAgIG5ld19lbGVtcyA9IHJlX3JlYWxsb2MgKHNldC0+ZWxlbXMsIElkeCwgc2V0LT5hbGxvYyk7CisgICAgICBpZiAoQkUgKG5ld19lbGVtcyA9PSBOVUxMLCAwKSkKKwlyZXR1cm4gZmFsc2U7CisgICAgICBzZXQtPmVsZW1zID0gbmV3X2VsZW1zOworICAgIH0KKworICAvKiBNb3ZlIHRoZSBlbGVtZW50cyB3aGljaCBmb2xsb3dzIHRoZSBuZXcgZWxlbWVudC4gIFRlc3QgdGhlCisgICAgIGZpcnN0IGVsZW1lbnQgc2VwYXJhdGVseSB0byBza2lwIGEgY2hlY2sgaW4gdGhlIGlubmVyIGxvb3AuICAqLworICBpZiAoZWxlbSA8IHNldC0+ZWxlbXNbMF0pCisgICAgeworICAgICAgaWR4ID0gMDsKKyAgICAgIGZvciAoaWR4ID0gc2V0LT5uZWxlbTsgaWR4ID4gMDsgaWR4LS0pCisgICAgICAgIHNldC0+ZWxlbXNbaWR4XSA9IHNldC0+ZWxlbXNbaWR4IC0gMV07CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgZm9yIChpZHggPSBzZXQtPm5lbGVtOyBzZXQtPmVsZW1zW2lkeCAtIDFdID4gZWxlbTsgaWR4LS0pCisgICAgICAgIHNldC0+ZWxlbXNbaWR4XSA9IHNldC0+ZWxlbXNbaWR4IC0gMV07CisgICAgfQorCisgIC8qIEluc2VydCB0aGUgbmV3IGVsZW1lbnQuICAqLworICBzZXQtPmVsZW1zW2lkeF0gPSBlbGVtOworICArK3NldC0+bmVsZW07CisgIHJldHVybiB0cnVlOworfQorCisvKiBJbnNlcnQgdGhlIG5ldyBlbGVtZW50IEVMRU0gdG8gdGhlIHJlX25vZGVfc2V0KiBTRVQuCisgICBTRVQgc2hvdWxkIG5vdCBhbHJlYWR5IGhhdmUgYW55IGVsZW1lbnQgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIEVMRU0uCisgICBSZXR1cm4gdHJ1ZSBpZiBzdWNjZXNzZnVsLiAgKi8KKworc3RhdGljIGJvb2wKK2ludGVybmFsX2Z1bmN0aW9uCityZV9ub2RlX3NldF9pbnNlcnRfbGFzdCAocmVfbm9kZV9zZXQgKnNldCwgSWR4IGVsZW0pCit7CisgIC8qIFJlYWxsb2MgaWYgd2UgbmVlZC4gICovCisgIGlmIChzZXQtPmFsbG9jID09IHNldC0+bmVsZW0pCisgICAgeworICAgICAgSWR4ICpuZXdfZWxlbXM7CisgICAgICBzZXQtPmFsbG9jID0gKHNldC0+YWxsb2MgKyAxKSAqIDI7CisgICAgICBuZXdfZWxlbXMgPSByZV9yZWFsbG9jIChzZXQtPmVsZW1zLCBJZHgsIHNldC0+YWxsb2MpOworICAgICAgaWYgKEJFIChuZXdfZWxlbXMgPT0gTlVMTCwgMCkpCisJcmV0dXJuIGZhbHNlOworICAgICAgc2V0LT5lbGVtcyA9IG5ld19lbGVtczsKKyAgICB9CisKKyAgLyogSW5zZXJ0IHRoZSBuZXcgZWxlbWVudC4gICovCisgIHNldC0+ZWxlbXNbc2V0LT5uZWxlbSsrXSA9IGVsZW07CisgIHJldHVybiB0cnVlOworfQorCisvKiBDb21wYXJlIHR3byBub2RlIHNldHMgU0VUMSBhbmQgU0VUMi4KKyAgIFJldHVybiB0cnVlIGlmIFNFVDEgYW5kIFNFVDIgYXJlIGVxdWl2YWxlbnQuICAqLworCitzdGF0aWMgYm9vbAoraW50ZXJuYWxfZnVuY3Rpb24gX19hdHRyaWJ1dGUgKChwdXJlKSkKK3JlX25vZGVfc2V0X2NvbXBhcmUgKGNvbnN0IHJlX25vZGVfc2V0ICpzZXQxLCBjb25zdCByZV9ub2RlX3NldCAqc2V0MikKK3sKKyAgSWR4IGk7CisgIGlmIChzZXQxID09IE5VTEwgfHwgc2V0MiA9PSBOVUxMIHx8IHNldDEtPm5lbGVtICE9IHNldDItPm5lbGVtKQorICAgIHJldHVybiBmYWxzZTsKKyAgZm9yIChpID0gc2V0MS0+bmVsZW0gOyBSRUdfVkFMSURfSU5ERVggKC0taSkgOyApCisgICAgaWYgKHNldDEtPmVsZW1zW2ldICE9IHNldDItPmVsZW1zW2ldKQorICAgICAgcmV0dXJuIGZhbHNlOworICByZXR1cm4gdHJ1ZTsKK30KKworLyogUmV0dXJuIChpZHggKyAxKSBpZiBTRVQgY29udGFpbnMgdGhlIGVsZW1lbnQgRUxFTSwgcmV0dXJuIDAgb3RoZXJ3aXNlLiAgKi8KKworc3RhdGljIElkeAoraW50ZXJuYWxfZnVuY3Rpb24gX19hdHRyaWJ1dGUgKChwdXJlKSkKK3JlX25vZGVfc2V0X2NvbnRhaW5zIChjb25zdCByZV9ub2RlX3NldCAqc2V0LCBJZHggZWxlbSkKK3sKKyAgX19yZV9zaXplX3QgaWR4LCByaWdodCwgbWlkOworICBpZiAoISBSRUdfVkFMSURfTk9OWkVST19JTkRFWCAoc2V0LT5uZWxlbSkpCisgICAgcmV0dXJuIDA7CisKKyAgLyogQmluYXJ5IHNlYXJjaCB0aGUgZWxlbWVudC4gICovCisgIGlkeCA9IDA7CisgIHJpZ2h0ID0gc2V0LT5uZWxlbSAtIDE7CisgIHdoaWxlIChpZHggPCByaWdodCkKKyAgICB7CisgICAgICBtaWQgPSAoaWR4ICsgcmlnaHQpIC8gMjsKKyAgICAgIGlmIChzZXQtPmVsZW1zW21pZF0gPCBlbGVtKQorCWlkeCA9IG1pZCArIDE7CisgICAgICBlbHNlCisJcmlnaHQgPSBtaWQ7CisgICAgfQorICByZXR1cm4gc2V0LT5lbGVtc1tpZHhdID09IGVsZW0gPyBpZHggKyAxIDogMDsKK30KKworc3RhdGljIHZvaWQKK2ludGVybmFsX2Z1bmN0aW9uCityZV9ub2RlX3NldF9yZW1vdmVfYXQgKHJlX25vZGVfc2V0ICpzZXQsIElkeCBpZHgpCit7CisgIGlmIChpZHggPCAwIHx8IGlkeCA+PSBzZXQtPm5lbGVtKQorICAgIHJldHVybjsKKyAgLS1zZXQtPm5lbGVtOworICBmb3IgKDsgaWR4IDwgc2V0LT5uZWxlbTsgaWR4KyspCisgICAgc2V0LT5lbGVtc1tpZHhdID0gc2V0LT5lbGVtc1tpZHggKyAxXTsKK30KKwwKKworLyogQWRkIHRoZSB0b2tlbiBUT0tFTiB0byBkZmEtPm5vZGVzLCBhbmQgcmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgdG9rZW4uCisgICBPciByZXR1cm4gUkVHX01JU1NJTkcgaWYgYW4gZXJyb3Igb2NjdXJyZWQuICAqLworCitzdGF0aWMgSWR4CitpbnRlcm5hbF9mdW5jdGlvbgorcmVfZGZhX2FkZF9ub2RlIChyZV9kZmFfdCAqZGZhLCByZV90b2tlbl90IHRva2VuKQoreworICBpZiAoQkUgKGRmYS0+bm9kZXNfbGVuID49IGRmYS0+bm9kZXNfYWxsb2MsIDApKQorICAgIHsKKyAgICAgIHNpemVfdCBuZXdfbm9kZXNfYWxsb2MgPSBkZmEtPm5vZGVzX2FsbG9jICogMjsKKyAgICAgIElkeCAqbmV3X25leHRzLCAqbmV3X2luZGljZXM7CisgICAgICByZV9ub2RlX3NldCAqbmV3X2VkZXN0cywgKm5ld19lY2xvc3VyZXM7CisgICAgICByZV90b2tlbl90ICpuZXdfbm9kZXM7CisgICAgICBzaXplX3QgbWF4X29iamVjdF9zaXplID0KKwlNQVggKHNpemVvZiAocmVfdG9rZW5fdCksCisJICAgICBNQVggKHNpemVvZiAocmVfbm9kZV9zZXQpLAorCQkgIHNpemVvZiAoSWR4KSkpOworCisgICAgICAvKiBBdm9pZCBvdmVyZmxvd3MuICAqLworICAgICAgaWYgKEJFIChTSVpFX01BWCAvIDIgLyBtYXhfb2JqZWN0X3NpemUgPCBkZmEtPm5vZGVzX2FsbG9jLCAwKSkKKwlyZXR1cm4gUkVHX01JU1NJTkc7CisKKyAgICAgIG5ld19ub2RlcyA9IHJlX3JlYWxsb2MgKGRmYS0+bm9kZXMsIHJlX3Rva2VuX3QsIG5ld19ub2Rlc19hbGxvYyk7CisgICAgICBpZiAoQkUgKG5ld19ub2RlcyA9PSBOVUxMLCAwKSkKKwlyZXR1cm4gUkVHX01JU1NJTkc7CisgICAgICBkZmEtPm5vZGVzID0gbmV3X25vZGVzOworICAgICAgbmV3X25leHRzID0gcmVfcmVhbGxvYyAoZGZhLT5uZXh0cywgSWR4LCBuZXdfbm9kZXNfYWxsb2MpOworICAgICAgbmV3X2luZGljZXMgPSByZV9yZWFsbG9jIChkZmEtPm9yZ19pbmRpY2VzLCBJZHgsIG5ld19ub2Rlc19hbGxvYyk7CisgICAgICBuZXdfZWRlc3RzID0gcmVfcmVhbGxvYyAoZGZhLT5lZGVzdHMsIHJlX25vZGVfc2V0LCBuZXdfbm9kZXNfYWxsb2MpOworICAgICAgbmV3X2VjbG9zdXJlcyA9IHJlX3JlYWxsb2MgKGRmYS0+ZWNsb3N1cmVzLCByZV9ub2RlX3NldCwgbmV3X25vZGVzX2FsbG9jKTsKKyAgICAgIGlmIChCRSAobmV3X25leHRzID09IE5VTEwgfHwgbmV3X2luZGljZXMgPT0gTlVMTAorCSAgICAgIHx8IG5ld19lZGVzdHMgPT0gTlVMTCB8fCBuZXdfZWNsb3N1cmVzID09IE5VTEwsIDApKQorCXJldHVybiBSRUdfTUlTU0lORzsKKyAgICAgIGRmYS0+bmV4dHMgPSBuZXdfbmV4dHM7CisgICAgICBkZmEtPm9yZ19pbmRpY2VzID0gbmV3X2luZGljZXM7CisgICAgICBkZmEtPmVkZXN0cyA9IG5ld19lZGVzdHM7CisgICAgICBkZmEtPmVjbG9zdXJlcyA9IG5ld19lY2xvc3VyZXM7CisgICAgICBkZmEtPm5vZGVzX2FsbG9jID0gbmV3X25vZGVzX2FsbG9jOworICAgIH0KKyAgZGZhLT5ub2Rlc1tkZmEtPm5vZGVzX2xlbl0gPSB0b2tlbjsKKyAgZGZhLT5ub2Rlc1tkZmEtPm5vZGVzX2xlbl0uY29uc3RyYWludCA9IDA7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgeworICBpbnQgdHlwZSA9IHRva2VuLnR5cGU7CisgIGRmYS0+bm9kZXNbZGZhLT5ub2Rlc19sZW5dLmFjY2VwdF9tYiA9CisgICAgKHR5cGUgPT0gT1BfUEVSSU9EICYmIGRmYS0+bWJfY3VyX21heCA+IDEpIHx8IHR5cGUgPT0gQ09NUExFWF9CUkFDS0VUOworICB9CisjZW5kaWYKKyAgZGZhLT5uZXh0c1tkZmEtPm5vZGVzX2xlbl0gPSBSRUdfTUlTU0lORzsKKyAgcmVfbm9kZV9zZXRfaW5pdF9lbXB0eSAoZGZhLT5lZGVzdHMgKyBkZmEtPm5vZGVzX2xlbik7CisgIHJlX25vZGVfc2V0X2luaXRfZW1wdHkgKGRmYS0+ZWNsb3N1cmVzICsgZGZhLT5ub2Rlc19sZW4pOworICByZXR1cm4gZGZhLT5ub2Rlc19sZW4rKzsKK30KKworc3RhdGljIGlubGluZSByZV9oYXNodmFsX3QKK2ludGVybmFsX2Z1bmN0aW9uCitjYWxjX3N0YXRlX2hhc2ggKGNvbnN0IHJlX25vZGVfc2V0ICpub2RlcywgdW5zaWduZWQgaW50IGNvbnRleHQpCit7CisgIHJlX2hhc2h2YWxfdCBoYXNoID0gbm9kZXMtPm5lbGVtICsgY29udGV4dDsKKyAgSWR4IGk7CisgIGZvciAoaSA9IDAgOyBpIDwgbm9kZXMtPm5lbGVtIDsgaSsrKQorICAgIGhhc2ggKz0gbm9kZXMtPmVsZW1zW2ldOworICByZXR1cm4gaGFzaDsKK30KKworLyogU2VhcmNoIGZvciB0aGUgc3RhdGUgd2hvc2Ugbm9kZV9zZXQgaXMgZXF1aXZhbGVudCB0byBOT0RFUy4KKyAgIFJldHVybiB0aGUgcG9pbnRlciB0byB0aGUgc3RhdGUsIGlmIHdlIGZvdW5kIGl0IGluIHRoZSBERkEuCisgICBPdGhlcndpc2UgY3JlYXRlIHRoZSBuZXcgb25lIGFuZCByZXR1cm4gaXQuICBJbiBjYXNlIG9mIGFuIGVycm9yCisgICByZXR1cm4gTlVMTCBhbmQgc2V0IHRoZSBlcnJvciBjb2RlIGluIEVSUi4KKyAgIE5vdGU6IC0gV2UgYXNzdW1lIE5VTEwgYXMgdGhlIGludmFsaWQgc3RhdGUsIHRoZW4gaXQgaXMgcG9zc2libGUgdGhhdAorCSAgIHJldHVybiB2YWx1ZSBpcyBOVUxMIGFuZCBFUlIgaXMgUkVHX05PRVJST1IuCisJIC0gV2UgbmV2ZXIgcmV0dXJuIG5vbi1OVUxMIHZhbHVlIGluIGNhc2Ugb2YgYW55IGVycm9ycywgaXQgaXMgZm9yCisJICAgb3B0aW1pemF0aW9uLiAgKi8KKworc3RhdGljIHJlX2RmYXN0YXRlX3QgKgoraW50ZXJuYWxfZnVuY3Rpb24KK3JlX2FjcXVpcmVfc3RhdGUgKHJlZ19lcnJjb2RlX3QgKmVyciwgY29uc3QgcmVfZGZhX3QgKmRmYSwKKwkJICBjb25zdCByZV9ub2RlX3NldCAqbm9kZXMpCit7CisgIHJlX2hhc2h2YWxfdCBoYXNoOworICByZV9kZmFzdGF0ZV90ICpuZXdfc3RhdGU7CisgIHN0cnVjdCByZV9zdGF0ZV90YWJsZV9lbnRyeSAqc3BvdDsKKyAgSWR4IGk7CisjaWZkZWYgbGludAorICAvKiBTdXBwcmVzcyBib2d1cyB1bmluaXRpYWxpemVkLXZhcmlhYmxlIHdhcm5pbmdzLiAgKi8KKyAgKmVyciA9IFJFR19OT0VSUk9SOworI2VuZGlmCisgIGlmIChCRSAobm9kZXMtPm5lbGVtID09IDAsIDApKQorICAgIHsKKyAgICAgICplcnIgPSBSRUdfTk9FUlJPUjsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgaGFzaCA9IGNhbGNfc3RhdGVfaGFzaCAobm9kZXMsIDApOworICBzcG90ID0gZGZhLT5zdGF0ZV90YWJsZSArIChoYXNoICYgZGZhLT5zdGF0ZV9oYXNoX21hc2spOworCisgIGZvciAoaSA9IDAgOyBpIDwgc3BvdC0+bnVtIDsgaSsrKQorICAgIHsKKyAgICAgIHJlX2RmYXN0YXRlX3QgKnN0YXRlID0gc3BvdC0+YXJyYXlbaV07CisgICAgICBpZiAoaGFzaCAhPSBzdGF0ZS0+aGFzaCkKKwljb250aW51ZTsKKyAgICAgIGlmIChyZV9ub2RlX3NldF9jb21wYXJlICgmc3RhdGUtPm5vZGVzLCBub2RlcykpCisJcmV0dXJuIHN0YXRlOworICAgIH0KKworICAvKiBUaGVyZSBhcmUgbm8gYXBwcm9wcmlhdGUgc3RhdGUgaW4gdGhlIGRmYSwgY3JlYXRlIHRoZSBuZXcgb25lLiAgKi8KKyAgbmV3X3N0YXRlID0gY3JlYXRlX2NpX25ld3N0YXRlIChkZmEsIG5vZGVzLCBoYXNoKTsKKyAgaWYgKEJFIChuZXdfc3RhdGUgPT0gTlVMTCwgMCkpCisgICAgKmVyciA9IFJFR19FU1BBQ0U7CisKKyAgcmV0dXJuIG5ld19zdGF0ZTsKK30KKworLyogU2VhcmNoIGZvciB0aGUgc3RhdGUgd2hvc2Ugbm9kZV9zZXQgaXMgZXF1aXZhbGVudCB0byBOT0RFUyBhbmQKKyAgIHdob3NlIGNvbnRleHQgaXMgZXF1aXZhbGVudCB0byBDT05URVhULgorICAgUmV0dXJuIHRoZSBwb2ludGVyIHRvIHRoZSBzdGF0ZSwgaWYgd2UgZm91bmQgaXQgaW4gdGhlIERGQS4KKyAgIE90aGVyd2lzZSBjcmVhdGUgdGhlIG5ldyBvbmUgYW5kIHJldHVybiBpdC4gIEluIGNhc2Ugb2YgYW4gZXJyb3IKKyAgIHJldHVybiBOVUxMIGFuZCBzZXQgdGhlIGVycm9yIGNvZGUgaW4gRVJSLgorICAgTm90ZTogLSBXZSBhc3N1bWUgTlVMTCBhcyB0aGUgaW52YWxpZCBzdGF0ZSwgdGhlbiBpdCBpcyBwb3NzaWJsZSB0aGF0CisJICAgcmV0dXJuIHZhbHVlIGlzIE5VTEwgYW5kIEVSUiBpcyBSRUdfTk9FUlJPUi4KKwkgLSBXZSBuZXZlciByZXR1cm4gbm9uLU5VTEwgdmFsdWUgaW4gY2FzZSBvZiBhbnkgZXJyb3JzLCBpdCBpcyBmb3IKKwkgICBvcHRpbWl6YXRpb24uICAqLworCitzdGF0aWMgcmVfZGZhc3RhdGVfdCAqCitpbnRlcm5hbF9mdW5jdGlvbgorcmVfYWNxdWlyZV9zdGF0ZV9jb250ZXh0IChyZWdfZXJyY29kZV90ICplcnIsIGNvbnN0IHJlX2RmYV90ICpkZmEsCisJCQkgIGNvbnN0IHJlX25vZGVfc2V0ICpub2RlcywgdW5zaWduZWQgaW50IGNvbnRleHQpCit7CisgIHJlX2hhc2h2YWxfdCBoYXNoOworICByZV9kZmFzdGF0ZV90ICpuZXdfc3RhdGU7CisgIHN0cnVjdCByZV9zdGF0ZV90YWJsZV9lbnRyeSAqc3BvdDsKKyAgSWR4IGk7CisjaWZkZWYgbGludAorICAvKiBTdXBwcmVzcyBib2d1cyB1bmluaXRpYWxpemVkLXZhcmlhYmxlIHdhcm5pbmdzLiAgKi8KKyAgKmVyciA9IFJFR19OT0VSUk9SOworI2VuZGlmCisgIGlmIChub2Rlcy0+bmVsZW0gPT0gMCkKKyAgICB7CisgICAgICAqZXJyID0gUkVHX05PRVJST1I7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgIGhhc2ggPSBjYWxjX3N0YXRlX2hhc2ggKG5vZGVzLCBjb250ZXh0KTsKKyAgc3BvdCA9IGRmYS0+c3RhdGVfdGFibGUgKyAoaGFzaCAmIGRmYS0+c3RhdGVfaGFzaF9tYXNrKTsKKworICBmb3IgKGkgPSAwIDsgaSA8IHNwb3QtPm51bSA7IGkrKykKKyAgICB7CisgICAgICByZV9kZmFzdGF0ZV90ICpzdGF0ZSA9IHNwb3QtPmFycmF5W2ldOworICAgICAgaWYgKHN0YXRlLT5oYXNoID09IGhhc2gKKwkgICYmIHN0YXRlLT5jb250ZXh0ID09IGNvbnRleHQKKwkgICYmIHJlX25vZGVfc2V0X2NvbXBhcmUgKHN0YXRlLT5lbnRyYW5jZV9ub2Rlcywgbm9kZXMpKQorCXJldHVybiBzdGF0ZTsKKyAgICB9CisgIC8qIFRoZXJlIGFyZSBubyBhcHByb3ByaWF0ZSBzdGF0ZSBpbiBgZGZhJywgY3JlYXRlIHRoZSBuZXcgb25lLiAgKi8KKyAgbmV3X3N0YXRlID0gY3JlYXRlX2NkX25ld3N0YXRlIChkZmEsIG5vZGVzLCBjb250ZXh0LCBoYXNoKTsKKyAgaWYgKEJFIChuZXdfc3RhdGUgPT0gTlVMTCwgMCkpCisgICAgKmVyciA9IFJFR19FU1BBQ0U7CisKKyAgcmV0dXJuIG5ld19zdGF0ZTsKK30KKworLyogRmluaXNoIGluaXRpYWxpemF0aW9uIG9mIHRoZSBuZXcgc3RhdGUgTkVXU1RBVEUsIGFuZCB1c2luZyBpdHMgaGFzaCB2YWx1ZQorICAgSEFTSCBwdXQgaW4gdGhlIGFwcHJvcHJpYXRlIGJ1Y2tldCBvZiBERkEncyBzdGF0ZSB0YWJsZS4gIFJldHVybiB2YWx1ZQorICAgaW5kaWNhdGVzIHRoZSBlcnJvciBjb2RlIGlmIGZhaWxlZC4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CityZWdpc3Rlcl9zdGF0ZSAoY29uc3QgcmVfZGZhX3QgKmRmYSwgcmVfZGZhc3RhdGVfdCAqbmV3c3RhdGUsCisJCXJlX2hhc2h2YWxfdCBoYXNoKQoreworICBzdHJ1Y3QgcmVfc3RhdGVfdGFibGVfZW50cnkgKnNwb3Q7CisgIHJlZ19lcnJjb2RlX3QgZXJyOworICBJZHggaTsKKworICBuZXdzdGF0ZS0+aGFzaCA9IGhhc2g7CisgIGVyciA9IHJlX25vZGVfc2V0X2FsbG9jICgmbmV3c3RhdGUtPm5vbl9lcHNfbm9kZXMsIG5ld3N0YXRlLT5ub2Rlcy5uZWxlbSk7CisgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICByZXR1cm4gUkVHX0VTUEFDRTsKKyAgZm9yIChpID0gMDsgaSA8IG5ld3N0YXRlLT5ub2Rlcy5uZWxlbTsgaSsrKQorICAgIHsKKyAgICAgIElkeCBlbGVtID0gbmV3c3RhdGUtPm5vZGVzLmVsZW1zW2ldOworICAgICAgaWYgKCFJU19FUFNJTE9OX05PREUgKGRmYS0+bm9kZXNbZWxlbV0udHlwZSkpCisJaWYgKEJFICghIHJlX25vZGVfc2V0X2luc2VydF9sYXN0ICgmbmV3c3RhdGUtPm5vbl9lcHNfbm9kZXMsIGVsZW0pLCAwKSkKKwkgIHJldHVybiBSRUdfRVNQQUNFOworICAgIH0KKworICBzcG90ID0gZGZhLT5zdGF0ZV90YWJsZSArIChoYXNoICYgZGZhLT5zdGF0ZV9oYXNoX21hc2spOworICBpZiAoQkUgKHNwb3QtPmFsbG9jIDw9IHNwb3QtPm51bSwgMCkpCisgICAgeworICAgICAgSWR4IG5ld19hbGxvYyA9IDIgKiBzcG90LT5udW0gKyAyOworICAgICAgcmVfZGZhc3RhdGVfdCAqKm5ld19hcnJheSA9IHJlX3JlYWxsb2MgKHNwb3QtPmFycmF5LCByZV9kZmFzdGF0ZV90ICosCisJCQkJCSAgICAgIG5ld19hbGxvYyk7CisgICAgICBpZiAoQkUgKG5ld19hcnJheSA9PSBOVUxMLCAwKSkKKwlyZXR1cm4gUkVHX0VTUEFDRTsKKyAgICAgIHNwb3QtPmFycmF5ID0gbmV3X2FycmF5OworICAgICAgc3BvdC0+YWxsb2MgPSBuZXdfYWxsb2M7CisgICAgfQorICBzcG90LT5hcnJheVtzcG90LT5udW0rK10gPSBuZXdzdGF0ZTsKKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCitzdGF0aWMgdm9pZAorZnJlZV9zdGF0ZSAocmVfZGZhc3RhdGVfdCAqc3RhdGUpCit7CisgIHJlX25vZGVfc2V0X2ZyZWUgKCZzdGF0ZS0+bm9uX2Vwc19ub2Rlcyk7CisgIHJlX25vZGVfc2V0X2ZyZWUgKCZzdGF0ZS0+aW52ZWNsb3N1cmUpOworICBpZiAoc3RhdGUtPmVudHJhbmNlX25vZGVzICE9ICZzdGF0ZS0+bm9kZXMpCisgICAgeworICAgICAgcmVfbm9kZV9zZXRfZnJlZSAoc3RhdGUtPmVudHJhbmNlX25vZGVzKTsKKyAgICAgIHJlX2ZyZWUgKHN0YXRlLT5lbnRyYW5jZV9ub2Rlcyk7CisgICAgfQorICByZV9ub2RlX3NldF9mcmVlICgmc3RhdGUtPm5vZGVzKTsKKyAgcmVfZnJlZSAoc3RhdGUtPndvcmRfdHJ0YWJsZSk7CisgIHJlX2ZyZWUgKHN0YXRlLT50cnRhYmxlKTsKKyAgcmVfZnJlZSAoc3RhdGUpOworfQorCisvKiBDcmVhdGUgdGhlIG5ldyBzdGF0ZSB3aGljaCBpcyBpbmRlcGVuZCBvZiBjb250ZXh0cy4KKyAgIFJldHVybiB0aGUgbmV3IHN0YXRlIGlmIHN1Y2NlZWRlZCwgb3RoZXJ3aXNlIHJldHVybiBOVUxMLiAgKi8KKworc3RhdGljIHJlX2RmYXN0YXRlX3QgKgoraW50ZXJuYWxfZnVuY3Rpb24KK2NyZWF0ZV9jaV9uZXdzdGF0ZSAoY29uc3QgcmVfZGZhX3QgKmRmYSwgY29uc3QgcmVfbm9kZV9zZXQgKm5vZGVzLAorCQkgICAgcmVfaGFzaHZhbF90IGhhc2gpCit7CisgIElkeCBpOworICByZWdfZXJyY29kZV90IGVycjsKKyAgcmVfZGZhc3RhdGVfdCAqbmV3c3RhdGU7CisKKyAgbmV3c3RhdGUgPSAocmVfZGZhc3RhdGVfdCAqKSBjYWxsb2MgKHNpemVvZiAocmVfZGZhc3RhdGVfdCksIDEpOworICBpZiAoQkUgKG5ld3N0YXRlID09IE5VTEwsIDApKQorICAgIHJldHVybiBOVUxMOworICBlcnIgPSByZV9ub2RlX3NldF9pbml0X2NvcHkgKCZuZXdzdGF0ZS0+bm9kZXMsIG5vZGVzKTsKKyAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorICAgIHsKKyAgICAgIHJlX2ZyZWUgKG5ld3N0YXRlKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICBuZXdzdGF0ZS0+ZW50cmFuY2Vfbm9kZXMgPSAmbmV3c3RhdGUtPm5vZGVzOworICBmb3IgKGkgPSAwIDsgaSA8IG5vZGVzLT5uZWxlbSA7IGkrKykKKyAgICB7CisgICAgICByZV90b2tlbl90ICpub2RlID0gZGZhLT5ub2RlcyArIG5vZGVzLT5lbGVtc1tpXTsKKyAgICAgIHJlX3Rva2VuX3R5cGVfdCB0eXBlID0gbm9kZS0+dHlwZTsKKyAgICAgIGlmICh0eXBlID09IENIQVJBQ1RFUiAmJiAhbm9kZS0+Y29uc3RyYWludCkKKwljb250aW51ZTsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAgICAgbmV3c3RhdGUtPmFjY2VwdF9tYiB8PSBub2RlLT5hY2NlcHRfbWI7CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKworICAgICAgLyogSWYgdGhlIHN0YXRlIGhhcyB0aGUgaGFsdCBub2RlLCB0aGUgc3RhdGUgaXMgYSBoYWx0IHN0YXRlLiAgKi8KKyAgICAgIGlmICh0eXBlID09IEVORF9PRl9SRSkKKwluZXdzdGF0ZS0+aGFsdCA9IDE7CisgICAgICBlbHNlIGlmICh0eXBlID09IE9QX0JBQ0tfUkVGKQorCW5ld3N0YXRlLT5oYXNfYmFja3JlZiA9IDE7CisgICAgICBlbHNlIGlmICh0eXBlID09IEFOQ0hPUiB8fCBub2RlLT5jb25zdHJhaW50KQorCW5ld3N0YXRlLT5oYXNfY29uc3RyYWludCA9IDE7CisgICAgfQorICBlcnIgPSByZWdpc3Rlcl9zdGF0ZSAoZGZhLCBuZXdzdGF0ZSwgaGFzaCk7CisgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICB7CisgICAgICBmcmVlX3N0YXRlIChuZXdzdGF0ZSk7CisgICAgICBuZXdzdGF0ZSA9IE5VTEw7CisgICAgfQorICByZXR1cm4gbmV3c3RhdGU7Cit9CisKKy8qIENyZWF0ZSB0aGUgbmV3IHN0YXRlIHdoaWNoIGlzIGRlcGVuZCBvbiB0aGUgY29udGV4dCBDT05URVhULgorICAgUmV0dXJuIHRoZSBuZXcgc3RhdGUgaWYgc3VjY2VlZGVkLCBvdGhlcndpc2UgcmV0dXJuIE5VTEwuICAqLworCitzdGF0aWMgcmVfZGZhc3RhdGVfdCAqCitpbnRlcm5hbF9mdW5jdGlvbgorY3JlYXRlX2NkX25ld3N0YXRlIChjb25zdCByZV9kZmFfdCAqZGZhLCBjb25zdCByZV9ub2RlX3NldCAqbm9kZXMsCisJCSAgICB1bnNpZ25lZCBpbnQgY29udGV4dCwgcmVfaGFzaHZhbF90IGhhc2gpCit7CisgIElkeCBpLCBuY3R4X25vZGVzID0gMDsKKyAgcmVnX2VycmNvZGVfdCBlcnI7CisgIHJlX2RmYXN0YXRlX3QgKm5ld3N0YXRlOworCisgIG5ld3N0YXRlID0gKHJlX2RmYXN0YXRlX3QgKikgY2FsbG9jIChzaXplb2YgKHJlX2RmYXN0YXRlX3QpLCAxKTsKKyAgaWYgKEJFIChuZXdzdGF0ZSA9PSBOVUxMLCAwKSkKKyAgICByZXR1cm4gTlVMTDsKKyAgZXJyID0gcmVfbm9kZV9zZXRfaW5pdF9jb3B5ICgmbmV3c3RhdGUtPm5vZGVzLCBub2Rlcyk7CisgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICB7CisgICAgICByZV9mcmVlIChuZXdzdGF0ZSk7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgbmV3c3RhdGUtPmNvbnRleHQgPSBjb250ZXh0OworICBuZXdzdGF0ZS0+ZW50cmFuY2Vfbm9kZXMgPSAmbmV3c3RhdGUtPm5vZGVzOworCisgIGZvciAoaSA9IDAgOyBpIDwgbm9kZXMtPm5lbGVtIDsgaSsrKQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGludCBjb25zdHJhaW50ID0gMDsKKyAgICAgIHJlX3Rva2VuX3QgKm5vZGUgPSBkZmEtPm5vZGVzICsgbm9kZXMtPmVsZW1zW2ldOworICAgICAgcmVfdG9rZW5fdHlwZV90IHR5cGUgPSBub2RlLT50eXBlOworICAgICAgaWYgKG5vZGUtPmNvbnN0cmFpbnQpCisJY29uc3RyYWludCA9IG5vZGUtPmNvbnN0cmFpbnQ7CisKKyAgICAgIGlmICh0eXBlID09IENIQVJBQ1RFUiAmJiAhY29uc3RyYWludCkKKwljb250aW51ZTsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAgICAgbmV3c3RhdGUtPmFjY2VwdF9tYiB8PSBub2RlLT5hY2NlcHRfbWI7CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKworICAgICAgLyogSWYgdGhlIHN0YXRlIGhhcyB0aGUgaGFsdCBub2RlLCB0aGUgc3RhdGUgaXMgYSBoYWx0IHN0YXRlLiAgKi8KKyAgICAgIGlmICh0eXBlID09IEVORF9PRl9SRSkKKwluZXdzdGF0ZS0+aGFsdCA9IDE7CisgICAgICBlbHNlIGlmICh0eXBlID09IE9QX0JBQ0tfUkVGKQorCW5ld3N0YXRlLT5oYXNfYmFja3JlZiA9IDE7CisgICAgICBlbHNlIGlmICh0eXBlID09IEFOQ0hPUikKKwljb25zdHJhaW50ID0gbm9kZS0+b3ByLmN0eF90eXBlOworCisgICAgICBpZiAoY29uc3RyYWludCkKKwl7CisJICBpZiAobmV3c3RhdGUtPmVudHJhbmNlX25vZGVzID09ICZuZXdzdGF0ZS0+bm9kZXMpCisJICAgIHsKKwkgICAgICBuZXdzdGF0ZS0+ZW50cmFuY2Vfbm9kZXMgPSByZV9tYWxsb2MgKHJlX25vZGVfc2V0LCAxKTsKKwkgICAgICBpZiAoQkUgKG5ld3N0YXRlLT5lbnRyYW5jZV9ub2RlcyA9PSBOVUxMLCAwKSkKKwkJeworCQkgIGZyZWVfc3RhdGUgKG5ld3N0YXRlKTsKKwkJICByZXR1cm4gTlVMTDsKKwkJfQorCSAgICAgIHJlX25vZGVfc2V0X2luaXRfY29weSAobmV3c3RhdGUtPmVudHJhbmNlX25vZGVzLCBub2Rlcyk7CisJICAgICAgbmN0eF9ub2RlcyA9IDA7CisJICAgICAgbmV3c3RhdGUtPmhhc19jb25zdHJhaW50ID0gMTsKKwkgICAgfQorCisJICBpZiAoTk9UX1NBVElTRllfUFJFVl9DT05TVFJBSU5UIChjb25zdHJhaW50LGNvbnRleHQpKQorCSAgICB7CisJICAgICAgcmVfbm9kZV9zZXRfcmVtb3ZlX2F0ICgmbmV3c3RhdGUtPm5vZGVzLCBpIC0gbmN0eF9ub2Rlcyk7CisJICAgICAgKytuY3R4X25vZGVzOworCSAgICB9CisJfQorICAgIH0KKyAgZXJyID0gcmVnaXN0ZXJfc3RhdGUgKGRmYSwgbmV3c3RhdGUsIGhhc2gpOworICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisgICAgeworICAgICAgZnJlZV9zdGF0ZSAobmV3c3RhdGUpOworICAgICAgbmV3c3RhdGUgPSBOVUxMOworICAgIH0KKyAgcmV0dXJuICBuZXdzdGF0ZTsKK30KZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWIvcmVnZXhfaW50ZXJuYWwuaCBiL3BhcnRlZC0xLjguNy9saWIvcmVnZXhfaW50ZXJuYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWM2MjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYi9yZWdleF9pbnRlcm5hbC5oCkBAIC0wLDAgKzEsODUzIEBACisvKiBFeHRlbmRlZCByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hpbmcgYW5kIHNlYXJjaCBsaWJyYXJ5LgorICAgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisgICBDb250cmlidXRlZCBieSBJc2FtdSBIYXNlZ2F3YSA8aXNhbXVAeWFtYXRvLmlibS5jb20+LgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAqLworCisjaWZuZGVmIF9SRUdFWF9JTlRFUk5BTF9ICisjZGVmaW5lIF9SRUdFWF9JTlRFUk5BTF9IIDEKKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZmRlZiBfTElCQworIyBpbmNsdWRlIDxsYW5naW5mby5oPgorI2Vsc2UKKyMgaW5jbHVkZSAibG9jYWxjaGFyc2V0LmgiCisjZW5kaWYKKyNpZiBkZWZpbmVkIEhBVkVfTE9DQUxFX0ggfHwgZGVmaW5lZCBfTElCQworIyBpbmNsdWRlIDxsb2NhbGUuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8d2NoYXIuaD4KKyNpbmNsdWRlIDx3Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpZiBkZWZpbmVkIF9MSUJDCisjIGluY2x1ZGUgPGJpdHMvbGliYy1sb2NrLmg+CisjZWxzZQorIyBkZWZpbmUgX19saWJjX2xvY2tfaW5pdChOQU1FKSBkbyB7IH0gd2hpbGUgKDApCisjIGRlZmluZSBfX2xpYmNfbG9ja19sb2NrKE5BTUUpIGRvIHsgfSB3aGlsZSAoMCkKKyMgZGVmaW5lIF9fbGliY19sb2NrX3VubG9jayhOQU1FKSBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworLyogSW4gY2FzZSB0aGF0IHRoZSBzeXN0ZW0gZG9lc24ndCBoYXZlIGlzYmxhbmsoKS4gICovCisjaWYgIWRlZmluZWQgX0xJQkMgJiYgIUhBVkVfREVDTF9JU0JMQU5LICYmICFkZWZpbmVkIGlzYmxhbmsKKyMgZGVmaW5lIGlzYmxhbmsoY2gpICgoY2gpID09ICcgJyB8fCAoY2gpID09ICdcdCcpCisjZW5kaWYKKworI2lmZGVmIF9MSUJDCisjIGlmbmRlZiBfUkVfREVGSU5FX0xPQ0FMRV9GVU5DVElPTlMKKyMgIGRlZmluZSBfUkVfREVGSU5FX0xPQ0FMRV9GVU5DVElPTlMgMQorIyAgIGluY2x1ZGUgPGxvY2FsZS9sb2NhbGVpbmZvLmg+CisjICAgaW5jbHVkZSA8bG9jYWxlL2VsZW0taGFzaC5oPgorIyAgIGluY2x1ZGUgPGxvY2FsZS9jb2xsLWxvb2t1cC5oPgorIyBlbmRpZgorI2VuZGlmCisKKy8qIFRoaXMgaXMgZm9yIG90aGVyIEdOVSBkaXN0cmlidXRpb25zIHdpdGggaW50ZXJuYXRpb25hbGl6ZWQgbWVzc2FnZXMuICAqLworI2lmIChIQVZFX0xJQklOVExfSCAmJiBFTkFCTEVfTkxTKSB8fCBkZWZpbmVkIF9MSUJDCisjIGluY2x1ZGUgPGxpYmludGwuaD4KKyMgaWZkZWYgX0xJQkMKKyMgIHVuZGVmIGdldHRleHQKKyMgIGRlZmluZSBnZXR0ZXh0KG1zZ2lkKSBcCisgIElOVFVTRShfX2RjZ2V0dGV4dCkgKF9saWJjX2ludGxfZG9tYWlubmFtZSwgbXNnaWQsIExDX01FU1NBR0VTKQorIyBlbmRpZgorI2Vsc2UKKyMgZGVmaW5lIGdldHRleHQobXNnaWQpIChtc2dpZCkKKyNlbmRpZgorCisjaWZuZGVmIGdldHRleHRfbm9vcAorLyogVGhpcyBkZWZpbmUgaXMgc28geGdldHRleHQgY2FuIGZpbmQgdGhlIGludGVybmF0aW9uYWxpemFibGUKKyAgIHN0cmluZ3MuICAqLworIyBkZWZpbmUgZ2V0dGV4dF9ub29wKFN0cmluZykgU3RyaW5nCisjZW5kaWYKKworLyogRm9yIGxvc2VyIHN5c3RlbXMgd2l0aG91dCB0aGUgZGVmaW5pdGlvbi4gICovCisjaWZuZGVmIFNJWkVfTUFYCisjIGRlZmluZSBTSVpFX01BWCAoKHNpemVfdCkgLTEpCisjZW5kaWYKKworI2lmIChkZWZpbmVkIE1CX0NVUl9NQVggJiYgSEFWRV9MT0NBTEVfSCAmJiBIQVZFX1dDVFlQRV9IICYmIEhBVkVfSVNXQ1RZUEUgJiYgSEFWRV9XQ1JUT01CICYmIEhBVkVfTUJSVE9XQyAmJiBIQVZFX1dDU0NPTEwpIHx8IF9MSUJDCisjIGRlZmluZSBSRV9FTkFCTEVfSTE4TgorI2VuZGlmCisKKyNpZiBfX0dOVUNfXyA+PSAzCisjIGRlZmluZSBCRShleHByLCB2YWwpIF9fYnVpbHRpbl9leHBlY3QgKGV4cHIsIHZhbCkKKyNlbHNlCisjIGRlZmluZSBCRShleHByLCB2YWwpIChleHByKQorIyBpZmRlZiBfTElCQworIyAgZGVmaW5lIGlubGluZQorIyBlbmRpZgorI2VuZGlmCisKKy8qIE51bWJlciBvZiBBU0NJSSBjaGFyYWN0ZXJzLiAgKi8KKyNkZWZpbmUgQVNDSUlfQ0hBUlMgMHg4MAorCisvKiBOdW1iZXIgb2Ygc2luZ2xlIGJ5dGUgY2hhcmFjdGVycy4gICovCisjZGVmaW5lIFNCQ19NQVggKFVDSEFSX01BWCArIDEpCisKKyNkZWZpbmUgQ09MTF9FTEVNX0xFTl9NQVggOAorCisvKiBUaGUgY2hhcmFjdGVyIHdoaWNoIHJlcHJlc2VudHMgbmV3bGluZS4gICovCisjZGVmaW5lIE5FV0xJTkVfQ0hBUiAnXG4nCisjZGVmaW5lIFdJREVfTkVXTElORV9DSEFSIEwnXG4nCisKKy8qIFJlbmFtZSB0byBzdGFuZGFyZCBBUEkgZm9yIHVzaW5nIG91dCBvZiBnbGliYy4gICovCisjaWZuZGVmIF9MSUJDCisjIGRlZmluZSBfX3djdHlwZSB3Y3R5cGUKKyMgZGVmaW5lIF9faXN3Y3R5cGUgaXN3Y3R5cGUKKyMgZGVmaW5lIF9fYnRvd2MgYnRvd2MKKyMgZGVmaW5lIF9fd2NydG9tYiB3Y3J0b21iCisjIGRlZmluZSBfX3JlZ2ZyZWUgcmVnZnJlZQorIyBkZWZpbmUgYXR0cmlidXRlX2hpZGRlbgorI2VuZGlmIC8qIG5vdCBfTElCQyAqLworCisjaWYgX19HTlVDX18gPj0gNCB8fCAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+PSAxKQorIyBkZWZpbmUgX19hdHRyaWJ1dGUoYXJnKSBfX2F0dHJpYnV0ZV9fIChhcmcpCisjZWxzZQorIyBkZWZpbmUgX19hdHRyaWJ1dGUoYXJnKQorI2VuZGlmCisKK3R5cGVkZWYgX19yZV9pZHhfdCBJZHg7CisKKy8qIFNwZWNpYWwgcmV0dXJuIHZhbHVlIGZvciBmYWlsdXJlIHRvIG1hdGNoLiAgKi8KKyNkZWZpbmUgUkVHX01JU1NJTkcgKChJZHgpIC0xKQorCisvKiBTcGVjaWFsIHJldHVybiB2YWx1ZSBmb3IgaW50ZXJuYWwgZXJyb3IuICAqLworI2RlZmluZSBSRUdfRVJST1IgKChJZHgpIC0yKQorCisvKiBUZXN0IHdoZXRoZXIgTiBpcyBhIHZhbGlkIGluZGV4LCBhbmQgaXMgbm90IG9uZSBvZiB0aGUgYWJvdmUuICAqLworI2lmZGVmIF9SRUdFWF9MQVJHRV9PRkZTRVRTCisjIGRlZmluZSBSRUdfVkFMSURfSU5ERVgobikgKChJZHgpIChuKSA8IFJFR19FUlJPUikKKyNlbHNlCisjIGRlZmluZSBSRUdfVkFMSURfSU5ERVgobikgKDAgPD0gKG4pKQorI2VuZGlmCisKKy8qIFRlc3Qgd2hldGhlciBOIGlzIGEgdmFsaWQgbm9uemVybyBpbmRleC4gICovCisjaWZkZWYgX1JFR0VYX0xBUkdFX09GRlNFVFMKKyMgZGVmaW5lIFJFR19WQUxJRF9OT05aRVJPX0lOREVYKG4pICgoSWR4KSAoKG4pIC0gMSkgPCAoSWR4KSAoUkVHX0VSUk9SIC0gMSkpCisjZWxzZQorIyBkZWZpbmUgUkVHX1ZBTElEX05PTlpFUk9fSU5ERVgobikgKDAgPCAobikpCisjZW5kaWYKKworLyogQSBoYXNoIHZhbHVlLCBzdWl0YWJsZSBmb3IgY29tcHV0aW5nIGhhc2ggdGFibGVzLiAgKi8KK3R5cGVkZWYgX19yZV9zaXplX3QgcmVfaGFzaHZhbF90OworCisvKiBBbiBpbnRlZ2VyIHVzZWQgdG8gcmVwcmVzZW50IGEgc2V0IG9mIGJpdHMuICBJdCBtdXN0IGJlIHVuc2lnbmVkLAorICAgYW5kIG11c3QgYmUgYXQgbGVhc3QgYXMgd2lkZSBhcyB1bnNpZ25lZCBpbnQuICAqLwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBiaXRzZXRfd29yZF90OworLyogQWxsIGJpdHMgc2V0IGluIGEgYml0c2V0X3dvcmRfdC4gICovCisjZGVmaW5lIEJJVFNFVF9XT1JEX01BWCBVTE9OR19NQVgKKworLyogTnVtYmVyIG9mIGJpdHMgaW4gYSBiaXRzZXRfd29yZF90LiAgRm9yIHBvcnRhYmlsaXR5IHRvIGhvc3RzIHdpdGgKKyAgIHBhZGRpbmcgYml0cywgZG8gbm90IHVzZSAnKHNpemVvZiAoYml0c2V0X3dvcmRfdCkgKiBDSEFSX0JJVCknOworICAgaW5zdGVhZCwgZGVkdWNlIGl0IGRpcmVjdGx5IGZyb20gQklUU0VUX1dPUkRfTUFYLiAgQXZvaWQKKyAgIGdyZWF0ZXItdGhhbi0zMi1iaXQgaW50ZWdlcnMgYW5kIHVuY29uZGl0aW9uYWwgc2hpZnRzIGJ5IG1vcmUgdGhhbgorICAgMzEgYml0cywgYXMgdGhleSdyZSBub3QgcG9ydGFibGUuICAqLworI2lmIEJJVFNFVF9XT1JEX01BWCA9PSAweGZmZmZmZmZmCisjIGRlZmluZSBCSVRTRVRfV09SRF9CSVRTIDMyCisjZWxpZiBCSVRTRVRfV09SRF9NQVggPj4gMzEgPj4gNSA9PSAxCisjIGRlZmluZSBCSVRTRVRfV09SRF9CSVRTIDM2CisjZWxpZiBCSVRTRVRfV09SRF9NQVggPj4gMzEgPj4gMTYgPT0gMQorIyBkZWZpbmUgQklUU0VUX1dPUkRfQklUUyA0OAorI2VsaWYgQklUU0VUX1dPUkRfTUFYID4+IDMxID4+IDI4ID09IDEKKyMgZGVmaW5lIEJJVFNFVF9XT1JEX0JJVFMgNjAKKyNlbGlmIEJJVFNFVF9XT1JEX01BWCA+PiAzMSA+PiAzMSA+PiAxID09IDEKKyMgZGVmaW5lIEJJVFNFVF9XT1JEX0JJVFMgNjQKKyNlbGlmIEJJVFNFVF9XT1JEX01BWCA+PiAzMSA+PiAzMSA+PiA5ID09IDEKKyMgZGVmaW5lIEJJVFNFVF9XT1JEX0JJVFMgNzIKKyNlbGlmIEJJVFNFVF9XT1JEX01BWCA+PiAzMSA+PiAzMSA+PiAzMSA+PiAzMSA+PiAzID09IDEKKyMgZGVmaW5lIEJJVFNFVF9XT1JEX0JJVFMgMTI4CisjZWxpZiBCSVRTRVRfV09SRF9NQVggPj4gMzEgPj4gMzEgPj4gMzEgPj4gMzEgPj4gMzEgPj4gMzEgPj4gMzEgPj4gMzEgPj4gNyA9PSAxCisjIGRlZmluZSBCSVRTRVRfV09SRF9CSVRTIDI1NgorI2VsaWYgQklUU0VUX1dPUkRfTUFYID4+IDMxID4+IDMxID4+IDMxID4+IDMxID4+IDMxID4+IDMxID4+IDMxID4+IDMxID4+IDcgPiAxCisjIGRlZmluZSBCSVRTRVRfV09SRF9CSVRTIDI1NyAvKiBhbnkgdmFsdWUgPiBTQkNfTUFYIHdpbGwgZG8gaGVyZSAqLworIyBpZiBCSVRTRVRfV09SRF9CSVRTIDw9IFNCQ19NQVgKKyMgIGVycm9yICJJbnZhbGlkIFNCQ19NQVgiCisjIGVuZGlmCisjZWxzZQorIyBlcnJvciAiQWRkIGNhc2UgZm9yIG5ldyBiaXRzZXRfd29yZF90IHNpemUiCisjZW5kaWYKKworLyogTnVtYmVyIG9mIGJpdHNldF93b3JkX3QgdmFsdWVzIGluIGEgYml0c2V0X3QuICAqLworI2RlZmluZSBCSVRTRVRfV09SRFMgKChTQkNfTUFYICsgQklUU0VUX1dPUkRfQklUUyAtIDEpIC8gQklUU0VUX1dPUkRfQklUUykKKwordHlwZWRlZiBiaXRzZXRfd29yZF90IGJpdHNldF90W0JJVFNFVF9XT1JEU107Cit0eXBlZGVmIGJpdHNldF93b3JkX3QgKnJlX2JpdHNldF9wdHJfdDsKK3R5cGVkZWYgY29uc3QgYml0c2V0X3dvcmRfdCAqcmVfY29uc3RfYml0c2V0X3B0cl90OworCisjZGVmaW5lIFBSRVZfV09SRF9DT05TVFJBSU5UIDB4MDAwMQorI2RlZmluZSBQUkVWX05PVFdPUkRfQ09OU1RSQUlOVCAweDAwMDIKKyNkZWZpbmUgTkVYVF9XT1JEX0NPTlNUUkFJTlQgMHgwMDA0CisjZGVmaW5lIE5FWFRfTk9UV09SRF9DT05TVFJBSU5UIDB4MDAwOAorI2RlZmluZSBQUkVWX05FV0xJTkVfQ09OU1RSQUlOVCAweDAwMTAKKyNkZWZpbmUgTkVYVF9ORVdMSU5FX0NPTlNUUkFJTlQgMHgwMDIwCisjZGVmaW5lIFBSRVZfQkVHQlVGX0NPTlNUUkFJTlQgMHgwMDQwCisjZGVmaW5lIE5FWFRfRU5EQlVGX0NPTlNUUkFJTlQgMHgwMDgwCisjZGVmaW5lIFdPUkRfREVMSU1fQ09OU1RSQUlOVCAweDAxMDAKKyNkZWZpbmUgTk9UX1dPUkRfREVMSU1fQ09OU1RSQUlOVCAweDAyMDAKKwordHlwZWRlZiBlbnVtCit7CisgIElOU0lERV9XT1JEID0gUFJFVl9XT1JEX0NPTlNUUkFJTlQgfCBORVhUX1dPUkRfQ09OU1RSQUlOVCwKKyAgV09SRF9GSVJTVCA9IFBSRVZfTk9UV09SRF9DT05TVFJBSU5UIHwgTkVYVF9XT1JEX0NPTlNUUkFJTlQsCisgIFdPUkRfTEFTVCA9IFBSRVZfV09SRF9DT05TVFJBSU5UIHwgTkVYVF9OT1RXT1JEX0NPTlNUUkFJTlQsCisgIElOU0lERV9OT1RXT1JEID0gUFJFVl9OT1RXT1JEX0NPTlNUUkFJTlQgfCBORVhUX05PVFdPUkRfQ09OU1RSQUlOVCwKKyAgTElORV9GSVJTVCA9IFBSRVZfTkVXTElORV9DT05TVFJBSU5ULAorICBMSU5FX0xBU1QgPSBORVhUX05FV0xJTkVfQ09OU1RSQUlOVCwKKyAgQlVGX0ZJUlNUID0gUFJFVl9CRUdCVUZfQ09OU1RSQUlOVCwKKyAgQlVGX0xBU1QgPSBORVhUX0VOREJVRl9DT05TVFJBSU5ULAorICBXT1JEX0RFTElNID0gV09SRF9ERUxJTV9DT05TVFJBSU5ULAorICBOT1RfV09SRF9ERUxJTSA9IE5PVF9XT1JEX0RFTElNX0NPTlNUUkFJTlQKK30gcmVfY29udGV4dF90eXBlOworCit0eXBlZGVmIHN0cnVjdAoreworICBJZHggYWxsb2M7CisgIElkeCBuZWxlbTsKKyAgSWR4ICplbGVtczsKK30gcmVfbm9kZV9zZXQ7CisKK3R5cGVkZWYgZW51bQoreworICBOT05fVFlQRSA9IDAsCisKKyAgLyogTm9kZSB0eXBlLCBUaGVzZSBhcmUgdXNlZCBieSB0b2tlbiwgbm9kZSwgdHJlZS4gICovCisgIENIQVJBQ1RFUiA9IDEsCisgIEVORF9PRl9SRSA9IDIsCisgIFNJTVBMRV9CUkFDS0VUID0gMywKKyAgT1BfQkFDS19SRUYgPSA0LAorICBPUF9QRVJJT0QgPSA1LAorI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIENPTVBMRVhfQlJBQ0tFVCA9IDYsCisgIE9QX1VURjhfUEVSSU9EID0gNywKKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworCisgIC8qIFdlIGRlZmluZSBFUFNJTE9OX0JJVCBhcyBhIG1hY3JvIHNvIHRoYXQgT1BfT1BFTl9TVUJFWFAgaXMgdXNlZAorICAgICB3aGVuIHRoZSBkZWJ1Z2dlciBzaG93cyB2YWx1ZXMgb2YgdGhpcyBlbnVtIHR5cGUuICAqLworI2RlZmluZSBFUFNJTE9OX0JJVCA4CisgIE9QX09QRU5fU1VCRVhQID0gRVBTSUxPTl9CSVQgfCAwLAorICBPUF9DTE9TRV9TVUJFWFAgPSBFUFNJTE9OX0JJVCB8IDEsCisgIE9QX0FMVCA9IEVQU0lMT05fQklUIHwgMiwKKyAgT1BfRFVQX0FTVEVSSVNLID0gRVBTSUxPTl9CSVQgfCAzLAorICBBTkNIT1IgPSBFUFNJTE9OX0JJVCB8IDQsCisKKyAgLyogVHJlZSB0eXBlLCB0aGVzZSBhcmUgdXNlZCBvbmx5IGJ5IHRyZWUuICovCisgIENPTkNBVCA9IDE2LAorICBTVUJFWFAgPSAxNywKKworICAvKiBUb2tlbiB0eXBlLCB0aGVzZSBhcmUgdXNlZCBvbmx5IGJ5IHRva2VuLiAgKi8KKyAgT1BfRFVQX1BMVVMgPSAxOCwKKyAgT1BfRFVQX1FVRVNUSU9OLAorICBPUF9PUEVOX0JSQUNLRVQsCisgIE9QX0NMT1NFX0JSQUNLRVQsCisgIE9QX0NIQVJTRVRfUkFOR0UsCisgIE9QX09QRU5fRFVQX05VTSwKKyAgT1BfQ0xPU0VfRFVQX05VTSwKKyAgT1BfTk9OX01BVENIX0xJU1QsCisgIE9QX09QRU5fQ09MTF9FTEVNLAorICBPUF9DTE9TRV9DT0xMX0VMRU0sCisgIE9QX09QRU5fRVFVSVZfQ0xBU1MsCisgIE9QX0NMT1NFX0VRVUlWX0NMQVNTLAorICBPUF9PUEVOX0NIQVJfQ0xBU1MsCisgIE9QX0NMT1NFX0NIQVJfQ0xBU1MsCisgIE9QX1dPUkQsCisgIE9QX05PVFdPUkQsCisgIE9QX1NQQUNFLAorICBPUF9OT1RTUEFDRSwKKyAgQkFDS19TTEFTSAorCit9IHJlX3Rva2VuX3R5cGVfdDsKKworI2lmZGVmIFJFX0VOQUJMRV9JMThOCit0eXBlZGVmIHN0cnVjdAoreworICAvKiBNdWx0aWJ5dGUgY2hhcmFjdGVycy4gICovCisgIHdjaGFyX3QgKm1iY2hhcnM7CisKKyAgLyogQ29sbGF0aW5nIHN5bWJvbHMuICAqLworIyBpZmRlZiBfTElCQworICBpbnQzMl90ICpjb2xsX3N5bXM7CisjIGVuZGlmCisKKyAgLyogRXF1aXZhbGVuY2UgY2xhc3Nlcy4gKi8KKyMgaWZkZWYgX0xJQkMKKyAgaW50MzJfdCAqZXF1aXZfY2xhc3NlczsKKyMgZW5kaWYKKworICAvKiBSYW5nZSBleHByZXNzaW9ucy4gKi8KKyMgaWZkZWYgX0xJQkMKKyAgdWludDMyX3QgKnJhbmdlX3N0YXJ0czsKKyAgdWludDMyX3QgKnJhbmdlX2VuZHM7CisjIGVsc2UgLyogbm90IF9MSUJDICovCisgIHdjaGFyX3QgKnJhbmdlX3N0YXJ0czsKKyAgd2NoYXJfdCAqcmFuZ2VfZW5kczsKKyMgZW5kaWYgLyogbm90IF9MSUJDICovCisKKyAgLyogQ2hhcmFjdGVyIGNsYXNzZXMuICovCisgIHdjdHlwZV90ICpjaGFyX2NsYXNzZXM7CisKKyAgLyogSWYgdGhpcyBjaGFyYWN0ZXIgc2V0IGlzIHRoZSBub24tbWF0Y2hpbmcgbGlzdC4gICovCisgIHVuc2lnbmVkIGludCBub25fbWF0Y2ggOiAxOworCisgIC8qICMgb2YgbXVsdGlieXRlIGNoYXJhY3RlcnMuICAqLworICBJZHggbm1iY2hhcnM7CisKKyAgLyogIyBvZiBjb2xsYXRpbmcgc3ltYm9scy4gICovCisgIElkeCBuY29sbF9zeW1zOworCisgIC8qICMgb2YgZXF1aXZhbGVuY2UgY2xhc3Nlcy4gKi8KKyAgSWR4IG5lcXVpdl9jbGFzc2VzOworCisgIC8qICMgb2YgcmFuZ2UgZXhwcmVzc2lvbnMuICovCisgIElkeCBucmFuZ2VzOworCisgIC8qICMgb2YgY2hhcmFjdGVyIGNsYXNzZXMuICovCisgIElkeCBuY2hhcl9jbGFzc2VzOworfSByZV9jaGFyc2V0X3Q7CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgdW5pb24KKyAgeworICAgIHVuc2lnbmVkIGNoYXIgYzsJCS8qIGZvciBDSEFSQUNURVIgKi8KKyAgICByZV9iaXRzZXRfcHRyX3Qgc2Jjc2V0OwkvKiBmb3IgU0lNUExFX0JSQUNLRVQgKi8KKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAgIHJlX2NoYXJzZXRfdCAqbWJjc2V0OwkvKiBmb3IgQ09NUExFWF9CUkFDS0VUICovCisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKyAgICBJZHggaWR4OwkJCS8qIGZvciBCQUNLX1JFRiAqLworICAgIHJlX2NvbnRleHRfdHlwZSBjdHhfdHlwZTsJLyogZm9yIEFOQ0hPUiAqLworICB9IG9wcjsKKyNpZiBfX0dOVUNfXyA+PSAyICYmICFfX1NUUklDVF9BTlNJX18KKyAgcmVfdG9rZW5fdHlwZV90IHR5cGUgOiA4OworI2Vsc2UKKyAgcmVfdG9rZW5fdHlwZV90IHR5cGU7CisjZW5kaWYKKyAgdW5zaWduZWQgaW50IGNvbnN0cmFpbnQgOiAxMDsJLyogY29udGV4dCBjb25zdHJhaW50ICovCisgIHVuc2lnbmVkIGludCBkdXBsaWNhdGVkIDogMTsKKyAgdW5zaWduZWQgaW50IG9wdF9zdWJleHAgOiAxOworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIHVuc2lnbmVkIGludCBhY2NlcHRfbWIgOiAxOworICAvKiBUaGVzZSAyIGJpdHMgY2FuIGJlIG1vdmVkIGludG8gdGhlIHVuaW9uIGlmIG5lZWRlZCAoZS5nLiBpZiBydW5uaW5nIG91dAorICAgICBvZiBiaXRzOyBtb3ZlIG9wci5jIHRvIG9wci5jLmMgYW5kIG1vdmUgdGhlIGZsYWdzIHRvIG9wci5jLmZsYWdzKS4gICovCisgIHVuc2lnbmVkIGludCBtYl9wYXJ0aWFsIDogMTsKKyNlbmRpZgorICB1bnNpZ25lZCBpbnQgd29yZF9jaGFyIDogMTsKK30gcmVfdG9rZW5fdDsKKworI2RlZmluZSBJU19FUFNJTE9OX05PREUodHlwZSkgKCh0eXBlKSAmIEVQU0lMT05fQklUKQorCitzdHJ1Y3QgcmVfc3RyaW5nX3QKK3sKKyAgLyogSW5kaWNhdGUgdGhlIHJhdyBidWZmZXIgd2hpY2ggaXMgdGhlIG9yaWdpbmFsIHN0cmluZyBwYXNzZWQgYXMgYW4KKyAgICAgYXJndW1lbnQgb2YgcmVnZXhlYygpLCByZV9zZWFyY2goKSwgZXRjLi4gICovCisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnJhd19tYnM7CisgIC8qIFN0b3JlIHRoZSBtdWx0aWJ5dGUgc3RyaW5nLiAgSW4gY2FzZSBvZiAiY2FzZSBpbnNlbnNpdGl2ZSBtb2RlIiBsaWtlCisgICAgIFJFR19JQ0FTRSwgdXBwZXIgY2FzZXMgb2YgdGhlIHN0cmluZyBhcmUgc3RvcmVkLCBvdGhlcndpc2UgTUJTIHBvaW50cworICAgICB0aGUgc2FtZSBhZGRyZXNzIHRoYXQgUkFXX01CUyBwb2ludHMuICAqLworICB1bnNpZ25lZCBjaGFyICptYnM7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgLyogU3RvcmUgdGhlIHdpZGUgY2hhcmFjdGVyIHN0cmluZyB3aGljaCBpcyBjb3JyZXNwb25kaW5nIHRvIE1CUy4gICovCisgIHdpbnRfdCAqd2NzOworICBJZHggKm9mZnNldHM7CisgIG1ic3RhdGVfdCBjdXJfc3RhdGU7CisjZW5kaWYKKyAgLyogSW5kZXggaW4gUkFXX01CUy4gIEVhY2ggY2hhcmFjdGVyIG1ic1tpXSBjb3JyZXNwb25kcyB0bworICAgICByYXdfbWJzW3Jhd19tYnNfaWR4ICsgaV0uICAqLworICBJZHggcmF3X21ic19pZHg7CisgIC8qIFRoZSBsZW5ndGggb2YgdGhlIHZhbGlkIGNoYXJhY3RlcnMgaW4gdGhlIGJ1ZmZlcnMuICAqLworICBJZHggdmFsaWRfbGVuOworICAvKiBUaGUgY29ycmVzcG9uZGluZyBudW1iZXIgb2YgYnl0ZXMgaW4gcmF3X21icyBhcnJheS4gICovCisgIElkeCB2YWxpZF9yYXdfbGVuOworICAvKiBUaGUgbGVuZ3RoIG9mIHRoZSBidWZmZXJzIE1CUyBhbmQgV0NTLiAgKi8KKyAgSWR4IGJ1ZnNfbGVuOworICAvKiBUaGUgaW5kZXggaW4gTUJTLCB3aGljaCBpcyB1cGRhdGVkIGJ5IHJlX3N0cmluZ19mZXRjaF9ieXRlLiAgKi8KKyAgSWR4IGN1cl9pZHg7CisgIC8qIGxlbmd0aCBvZiBSQVdfTUJTIGFycmF5LiAgKi8KKyAgSWR4IHJhd19sZW47CisgIC8qIFRoaXMgaXMgUkFXX0xFTiAtIFJBV19NQlNfSURYICsgVkFMSURfTEVOIC0gVkFMSURfUkFXX0xFTi4gICovCisgIElkeCBsZW47CisgIC8qIEVuZCBvZiB0aGUgYnVmZmVyIG1heSBiZSBzaG9ydGVyIHRoYW4gaXRzIGxlbmd0aCBpbiB0aGUgY2FzZXMgc3VjaAorICAgICBhcyByZV9tYXRjaF8yLCByZV9zZWFyY2hfMi4gIFRoZW4sIHdlIHVzZSBTVE9QIGZvciBlbmQgb2YgdGhlIGJ1ZmZlcgorICAgICBpbnN0ZWFkIG9mIExFTi4gICovCisgIElkeCByYXdfc3RvcDsKKyAgLyogVGhpcyBpcyBSQVdfU1RPUCAtIFJBV19NQlNfSURYIGFkanVzdGVkIHRocm91Z2ggT0ZGU0VUUy4gICovCisgIElkeCBzdG9wOworCisgIC8qIFRoZSBjb250ZXh0IG9mIG1ic1swXS4gIFdlIHN0b3JlIHRoZSBjb250ZXh0IGluZGVwZW5kZW50bHksIHNpbmNlCisgICAgIHRoZSBjb250ZXh0IG9mIG1ic1swXSBtYXkgYmUgZGlmZmVyZW50IGZyb20gcmF3X21ic1swXSwgd2hpY2ggaXMKKyAgICAgdGhlIGJlZ2lubmluZyBvZiB0aGUgaW5wdXQgc3RyaW5nLiAgKi8KKyAgdW5zaWduZWQgaW50IHRpcF9jb250ZXh0OworICAvKiBUaGUgdHJhbnNsYXRpb24gcGFzc2VkIGFzIGEgcGFydCBvZiBhbiBhcmd1bWVudCBvZiByZV9jb21waWxlX3BhdHRlcm4uICAqLworICBSRV9UUkFOU0xBVEVfVFlQRSB0cmFuczsKKyAgLyogQ29weSBvZiByZV9kZmFfdCdzIHdvcmRfY2hhci4gICovCisgIHJlX2NvbnN0X2JpdHNldF9wdHJfdCB3b3JkX2NoYXI7CisgIC8qIHRydWUgaWYgUkVHX0lDQVNFLiAgKi8KKyAgdW5zaWduZWQgY2hhciBpY2FzZTsKKyAgdW5zaWduZWQgY2hhciBpc191dGY4OworICB1bnNpZ25lZCBjaGFyIG1hcF9ub3Rhc2NpaTsKKyAgdW5zaWduZWQgY2hhciBtYnNfYWxsb2NhdGVkOworICB1bnNpZ25lZCBjaGFyIG9mZnNldHNfbmVlZGVkOworICB1bnNpZ25lZCBjaGFyIG5ld2xpbmVfYW5jaG9yOworICB1bnNpZ25lZCBjaGFyIHdvcmRfb3BzX3VzZWQ7CisgIGludCBtYl9jdXJfbWF4OworfTsKK3R5cGVkZWYgc3RydWN0IHJlX3N0cmluZ190IHJlX3N0cmluZ190OworCisKK3N0cnVjdCByZV9kZmFfdDsKK3R5cGVkZWYgc3RydWN0IHJlX2RmYV90IHJlX2RmYV90OworCisjaWZuZGVmIF9MSUJDCisjIGlmZGVmIF9faTM4Nl9fCisjICBkZWZpbmUgaW50ZXJuYWxfZnVuY3Rpb24gICBfX2F0dHJpYnV0ZSAoKHJlZ3Bhcm0gKDMpLCBzdGRjYWxsKSkKKyMgZWxzZQorIyAgZGVmaW5lIGludGVybmFsX2Z1bmN0aW9uCisjIGVuZGlmCisjZW5kaWYKKworc3RhdGljIHJlZ19lcnJjb2RlX3QgcmVfc3RyaW5nX3JlYWxsb2NfYnVmZmVycyAocmVfc3RyaW5nX3QgKnBzdHIsCisJCQkJCQlJZHggbmV3X2J1Zl9sZW4pCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworI2lmZGVmIFJFX0VOQUJMRV9JMThOCitzdGF0aWMgdm9pZCBidWlsZF93Y3NfYnVmZmVyIChyZV9zdHJpbmdfdCAqcHN0cikgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgcmVnX2VycmNvZGVfdCBidWlsZF93Y3NfdXBwZXJfYnVmZmVyIChyZV9zdHJpbmdfdCAqcHN0cikKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KK3N0YXRpYyB2b2lkIGJ1aWxkX3VwcGVyX2J1ZmZlciAocmVfc3RyaW5nX3QgKnBzdHIpIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHZvaWQgcmVfc3RyaW5nX3RyYW5zbGF0ZV9idWZmZXIgKHJlX3N0cmluZ190ICpwc3RyKSBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmVfc3RyaW5nX2NvbnRleHRfYXQgKGNvbnN0IHJlX3N0cmluZ190ICppbnB1dCwgSWR4IGlkeCwKKwkJCQkJICBpbnQgZWZsYWdzKQorICAgICBpbnRlcm5hbF9mdW5jdGlvbiBfX2F0dHJpYnV0ZSAoKHB1cmUpKTsKKyNkZWZpbmUgcmVfc3RyaW5nX3BlZWtfYnl0ZShwc3RyLCBvZmZzZXQpIFwKKyAgKChwc3RyKS0+bWJzWyhwc3RyKS0+Y3VyX2lkeCArIG9mZnNldF0pCisjZGVmaW5lIHJlX3N0cmluZ19mZXRjaF9ieXRlKHBzdHIpIFwKKyAgKChwc3RyKS0+bWJzWyhwc3RyKS0+Y3VyX2lkeCsrXSkKKyNkZWZpbmUgcmVfc3RyaW5nX2ZpcnN0X2J5dGUocHN0ciwgaWR4KSBcCisgICgoaWR4KSA9PSAocHN0ciktPnZhbGlkX2xlbiB8fCAocHN0ciktPndjc1tpZHhdICE9IFdFT0YpCisjZGVmaW5lIHJlX3N0cmluZ19pc19zaW5nbGVfYnl0ZV9jaGFyKHBzdHIsIGlkeCkgXAorICAoKHBzdHIpLT53Y3NbaWR4XSAhPSBXRU9GICYmICgocHN0ciktPnZhbGlkX2xlbiA9PSAoaWR4KSArIDEgXAorCQkJCXx8IChwc3RyKS0+d2NzWyhpZHgpICsgMV0gIT0gV0VPRikpCisjZGVmaW5lIHJlX3N0cmluZ19lb2kocHN0cikgKChwc3RyKS0+c3RvcCA8PSAocHN0ciktPmN1cl9pZHgpCisjZGVmaW5lIHJlX3N0cmluZ19jdXJfaWR4KHBzdHIpICgocHN0ciktPmN1cl9pZHgpCisjZGVmaW5lIHJlX3N0cmluZ19nZXRfYnVmZmVyKHBzdHIpICgocHN0ciktPm1icykKKyNkZWZpbmUgcmVfc3RyaW5nX2xlbmd0aChwc3RyKSAoKHBzdHIpLT5sZW4pCisjZGVmaW5lIHJlX3N0cmluZ19ieXRlX2F0KHBzdHIsaWR4KSAoKHBzdHIpLT5tYnNbaWR4XSkKKyNkZWZpbmUgcmVfc3RyaW5nX3NraXBfYnl0ZXMocHN0cixpZHgpICgocHN0ciktPmN1cl9pZHggKz0gKGlkeCkpCisjZGVmaW5lIHJlX3N0cmluZ19zZXRfaW5kZXgocHN0cixpZHgpICgocHN0ciktPmN1cl9pZHggPSAoaWR4KSkKKworI2luY2x1ZGUgPGFsbG9jYS5oPgorCisjaWZuZGVmIF9MSUJDCisjIGlmIEhBVkVfQUxMT0NBCisvKiBUaGUgT1MgdXN1YWxseSBndWFyYW50ZWVzIG9ubHkgb25lIGd1YXJkIHBhZ2UgYXQgdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2ssCisgICBhbmQgYSBwYWdlIHNpemUgY2FuIGJlIGFzIHNtYWxsIGFzIDQwOTYgYnl0ZXMuICBTbyB3ZSBjYW5ub3Qgc2FmZWx5CisgICBhbGxvY2F0ZSBhbnl0aGluZyBsYXJnZXIgdGhhbiA0MDk2IGJ5dGVzLiAgQWxzbyBjYXJlIGZvciB0aGUgcG9zc2liaWxpdHkKKyAgIG9mIGEgZmV3IGNvbXBpbGVyLWFsbG9jYXRlZCB0ZW1wb3Jhcnkgc3RhY2sgc2xvdHMuICAqLworIyAgZGVmaW5lIF9fbGliY191c2VfYWxsb2NhKG4pICgobikgPCA0MDMyKQorIyBlbHNlCisvKiBhbGxvY2EgaXMgaW1wbGVtZW50ZWQgd2l0aCBtYWxsb2MsIHNvIGp1c3QgdXNlIG1hbGxvYy4gICovCisjICBkZWZpbmUgX19saWJjX3VzZV9hbGxvY2EobikgMAorIyBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgTUFYCisjIGRlZmluZSBNQVgoYSxiKSAoKGEpIDwgKGIpID8gKGIpIDogKGEpKQorI2VuZGlmCisKKyNkZWZpbmUgcmVfbWFsbG9jKHQsbikgKCh0ICopIG1hbGxvYyAoKG4pICogc2l6ZW9mICh0KSkpCisjZGVmaW5lIHJlX3JlYWxsb2MocCx0LG4pICgodCAqKSByZWFsbG9jIChwLCAobikgKiBzaXplb2YgKHQpKSkKKyNkZWZpbmUgcmVfZnJlZShwKSBmcmVlIChwKQorCitzdHJ1Y3QgYmluX3RyZWVfdAoreworICBzdHJ1Y3QgYmluX3RyZWVfdCAqcGFyZW50OworICBzdHJ1Y3QgYmluX3RyZWVfdCAqbGVmdDsKKyAgc3RydWN0IGJpbl90cmVlX3QgKnJpZ2h0OworICBzdHJ1Y3QgYmluX3RyZWVfdCAqZmlyc3Q7CisgIHN0cnVjdCBiaW5fdHJlZV90ICpuZXh0OworCisgIHJlX3Rva2VuX3QgdG9rZW47CisKKyAgLyogYG5vZGVfaWR4JyBpcyB0aGUgaW5kZXggaW4gZGZhLT5ub2RlcywgaWYgYHR5cGUnID09IDAuCisgICAgIE90aGVyd2lzZSBgdHlwZScgaW5kaWNhdGUgdGhlIHR5cGUgb2YgdGhpcyBub2RlLiAgKi8KKyAgSWR4IG5vZGVfaWR4OworfTsKK3R5cGVkZWYgc3RydWN0IGJpbl90cmVlX3QgYmluX3RyZWVfdDsKKworI2RlZmluZSBCSU5fVFJFRV9TVE9SQUdFX1NJWkUgXAorICAoKDEwMjQgLSBzaXplb2YgKHZvaWQgKikpIC8gc2l6ZW9mIChiaW5fdHJlZV90KSkKKworc3RydWN0IGJpbl90cmVlX3N0b3JhZ2VfdAoreworICBzdHJ1Y3QgYmluX3RyZWVfc3RvcmFnZV90ICpuZXh0OworICBiaW5fdHJlZV90IGRhdGFbQklOX1RSRUVfU1RPUkFHRV9TSVpFXTsKK307Cit0eXBlZGVmIHN0cnVjdCBiaW5fdHJlZV9zdG9yYWdlX3QgYmluX3RyZWVfc3RvcmFnZV90OworCisjZGVmaW5lIENPTlRFWFRfV09SRCAxCisjZGVmaW5lIENPTlRFWFRfTkVXTElORSAoQ09OVEVYVF9XT1JEIDw8IDEpCisjZGVmaW5lIENPTlRFWFRfQkVHQlVGIChDT05URVhUX05FV0xJTkUgPDwgMSkKKyNkZWZpbmUgQ09OVEVYVF9FTkRCVUYgKENPTlRFWFRfQkVHQlVGIDw8IDEpCisKKyNkZWZpbmUgSVNfV09SRF9DT05URVhUKGMpICgoYykgJiBDT05URVhUX1dPUkQpCisjZGVmaW5lIElTX05FV0xJTkVfQ09OVEVYVChjKSAoKGMpICYgQ09OVEVYVF9ORVdMSU5FKQorI2RlZmluZSBJU19CRUdCVUZfQ09OVEVYVChjKSAoKGMpICYgQ09OVEVYVF9CRUdCVUYpCisjZGVmaW5lIElTX0VOREJVRl9DT05URVhUKGMpICgoYykgJiBDT05URVhUX0VOREJVRikKKyNkZWZpbmUgSVNfT1JESU5BUllfQ09OVEVYVChjKSAoKGMpID09IDApCisKKyNkZWZpbmUgSVNfV09SRF9DSEFSKGNoKSAoaXNhbG51bSAoY2gpIHx8IChjaCkgPT0gJ18nKQorI2RlZmluZSBJU19ORVdMSU5FKGNoKSAoKGNoKSA9PSBORVdMSU5FX0NIQVIpCisjZGVmaW5lIElTX1dJREVfV09SRF9DSEFSKGNoKSAoaXN3YWxudW0gKGNoKSB8fCAoY2gpID09IEwnXycpCisjZGVmaW5lIElTX1dJREVfTkVXTElORShjaCkgKChjaCkgPT0gV0lERV9ORVdMSU5FX0NIQVIpCisKKyNkZWZpbmUgTk9UX1NBVElTRllfUFJFVl9DT05TVFJBSU5UKGNvbnN0cmFpbnQsY29udGV4dCkgXAorICgoKChjb25zdHJhaW50KSAmIFBSRVZfV09SRF9DT05TVFJBSU5UKSAmJiAhSVNfV09SRF9DT05URVhUIChjb250ZXh0KSkgXAorICB8fCAoKGNvbnN0cmFpbnQgJiBQUkVWX05PVFdPUkRfQ09OU1RSQUlOVCkgJiYgSVNfV09SRF9DT05URVhUIChjb250ZXh0KSkgXAorICB8fCAoKGNvbnN0cmFpbnQgJiBQUkVWX05FV0xJTkVfQ09OU1RSQUlOVCkgJiYgIUlTX05FV0xJTkVfQ09OVEVYVCAoY29udGV4dCkpXAorICB8fCAoKGNvbnN0cmFpbnQgJiBQUkVWX0JFR0JVRl9DT05TVFJBSU5UKSAmJiAhSVNfQkVHQlVGX0NPTlRFWFQgKGNvbnRleHQpKSkKKworI2RlZmluZSBOT1RfU0FUSVNGWV9ORVhUX0NPTlNUUkFJTlQoY29uc3RyYWludCxjb250ZXh0KSBcCisgKCgoKGNvbnN0cmFpbnQpICYgTkVYVF9XT1JEX0NPTlNUUkFJTlQpICYmICFJU19XT1JEX0NPTlRFWFQgKGNvbnRleHQpKSBcCisgIHx8ICgoKGNvbnN0cmFpbnQpICYgTkVYVF9OT1RXT1JEX0NPTlNUUkFJTlQpICYmIElTX1dPUkRfQ09OVEVYVCAoY29udGV4dCkpIFwKKyAgfHwgKCgoY29uc3RyYWludCkgJiBORVhUX05FV0xJTkVfQ09OU1RSQUlOVCkgJiYgIUlTX05FV0xJTkVfQ09OVEVYVCAoY29udGV4dCkpIFwKKyAgfHwgKCgoY29uc3RyYWludCkgJiBORVhUX0VOREJVRl9DT05TVFJBSU5UKSAmJiAhSVNfRU5EQlVGX0NPTlRFWFQgKGNvbnRleHQpKSkKKworc3RydWN0IHJlX2RmYXN0YXRlX3QKK3sKKyAgcmVfaGFzaHZhbF90IGhhc2g7CisgIHJlX25vZGVfc2V0IG5vZGVzOworICByZV9ub2RlX3NldCBub25fZXBzX25vZGVzOworICByZV9ub2RlX3NldCBpbnZlY2xvc3VyZTsKKyAgcmVfbm9kZV9zZXQgKmVudHJhbmNlX25vZGVzOworICBzdHJ1Y3QgcmVfZGZhc3RhdGVfdCAqKnRydGFibGUsICoqd29yZF90cnRhYmxlOworICB1bnNpZ25lZCBpbnQgY29udGV4dCA6IDQ7CisgIHVuc2lnbmVkIGludCBoYWx0IDogMTsKKyAgLyogSWYgdGhpcyBzdGF0ZSBjYW4gYWNjZXB0IGBtdWx0aSBieXRlJy4KKyAgICAgTm90ZSB0aGF0IHdlIHJlZmVyIHRvIG11bHRpYnl0ZSBjaGFyYWN0ZXJzLCBhbmQgbXVsdGkgY2hhcmFjdGVyCisgICAgIGNvbGxhdGluZyBlbGVtZW50cyBhcyBgbXVsdGkgYnl0ZScuICAqLworICB1bnNpZ25lZCBpbnQgYWNjZXB0X21iIDogMTsKKyAgLyogSWYgdGhpcyBzdGF0ZSBoYXMgYmFja3JlZmVyZW5jZSBub2RlKHMpLiAgKi8KKyAgdW5zaWduZWQgaW50IGhhc19iYWNrcmVmIDogMTsKKyAgdW5zaWduZWQgaW50IGhhc19jb25zdHJhaW50IDogMTsKK307Cit0eXBlZGVmIHN0cnVjdCByZV9kZmFzdGF0ZV90IHJlX2RmYXN0YXRlX3Q7CisKK3N0cnVjdCByZV9zdGF0ZV90YWJsZV9lbnRyeQoreworICBJZHggbnVtOworICBJZHggYWxsb2M7CisgIHJlX2RmYXN0YXRlX3QgKiphcnJheTsKK307CisKKy8qIEFycmF5IHR5cGUgdXNlZCBpbiByZV9zdWJfbWF0Y2hfbGFzdF90IGFuZCByZV9zdWJfbWF0Y2hfdG9wX3QuICAqLworCit0eXBlZGVmIHN0cnVjdAoreworICBJZHggbmV4dF9pZHg7CisgIElkeCBhbGxvYzsKKyAgcmVfZGZhc3RhdGVfdCAqKmFycmF5OworfSBzdGF0ZV9hcnJheV90OworCisvKiBTdG9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbm9kZSBOT0RFIHdob3NlIHR5cGUgaXMgT1BfQ0xPU0VfU1VCRVhQLiAgKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgSWR4IG5vZGU7CisgIElkeCBzdHJfaWR4OyAvKiBUaGUgcG9zaXRpb24gTk9ERSBtYXRjaCBhdC4gICovCisgIHN0YXRlX2FycmF5X3QgcGF0aDsKK30gcmVfc3ViX21hdGNoX2xhc3RfdDsKKworLyogU3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG5vZGUgTk9ERSB3aG9zZSB0eXBlIGlzIE9QX09QRU5fU1VCRVhQLgorICAgQW5kIGluZm9ybWF0aW9uIGFib3V0IHRoZSBub2RlLCB3aG9zZSB0eXBlIGlzIE9QX0NMT1NFX1NVQkVYUCwKKyAgIGNvcnJlc3BvbmRpbmcgdG8gTk9ERSBpcyBzdG9yZWQgaW4gTEFTVFMuICAqLworCit0eXBlZGVmIHN0cnVjdAoreworICBJZHggc3RyX2lkeDsKKyAgSWR4IG5vZGU7CisgIHN0YXRlX2FycmF5X3QgKnBhdGg7CisgIElkeCBhbGFzdHM7IC8qIEFsbG9jYXRpb24gc2l6ZSBvZiBMQVNUUy4gICovCisgIElkeCBubGFzdHM7IC8qIFRoZSBudW1iZXIgb2YgTEFTVFMuICAqLworICByZV9zdWJfbWF0Y2hfbGFzdF90ICoqbGFzdHM7Cit9IHJlX3N1Yl9tYXRjaF90b3BfdDsKKworc3RydWN0IHJlX2JhY2tyZWZfY2FjaGVfZW50cnkKK3sKKyAgSWR4IG5vZGU7CisgIElkeCBzdHJfaWR4OworICBJZHggc3ViZXhwX2Zyb207CisgIElkeCBzdWJleHBfdG87CisgIGNoYXIgbW9yZTsKKyAgY2hhciB1bnVzZWQ7CisgIHVuc2lnbmVkIHNob3J0IGludCBlcHNfcmVhY2hhYmxlX3N1YmV4cHNfbWFwOworfTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgLyogVGhlIHN0cmluZyBvYmplY3QgY29ycmVzcG9uZGluZyB0byB0aGUgaW5wdXQgc3RyaW5nLiAgKi8KKyAgcmVfc3RyaW5nX3QgaW5wdXQ7CisjaWYgZGVmaW5lZCBfTElCQyB8fCAoZGVmaW5lZCBfX1NURENfVkVSU0lPTl9fICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTCkKKyAgY29uc3QgcmVfZGZhX3QgKmNvbnN0IGRmYTsKKyNlbHNlCisgIGNvbnN0IHJlX2RmYV90ICpkZmE7CisjZW5kaWYKKyAgLyogRUZMQUdTIG9mIHRoZSBhcmd1bWVudCBvZiByZWdleGVjLiAgKi8KKyAgaW50IGVmbGFnczsKKyAgLyogV2hlcmUgdGhlIG1hdGNoaW5nIGVuZHMuICAqLworICBJZHggbWF0Y2hfbGFzdDsKKyAgSWR4IGxhc3Rfbm9kZTsKKyAgLyogVGhlIHN0YXRlIGxvZyB1c2VkIGJ5IHRoZSBtYXRjaGVyLiAgKi8KKyAgcmVfZGZhc3RhdGVfdCAqKnN0YXRlX2xvZzsKKyAgSWR4IHN0YXRlX2xvZ190b3A7CisgIC8qIEJhY2sgcmVmZXJlbmNlIGNhY2hlLiAgKi8KKyAgSWR4IG5ia3JlZl9lbnRzOworICBJZHggYWJrcmVmX2VudHM7CisgIHN0cnVjdCByZV9iYWNrcmVmX2NhY2hlX2VudHJ5ICpia3JlZl9lbnRzOworICBpbnQgbWF4X21iX2VsZW1fbGVuOworICBJZHggbnN1Yl90b3BzOworICBJZHggYXN1Yl90b3BzOworICByZV9zdWJfbWF0Y2hfdG9wX3QgKipzdWJfdG9wczsKK30gcmVfbWF0Y2hfY29udGV4dF90OworCit0eXBlZGVmIHN0cnVjdAoreworICByZV9kZmFzdGF0ZV90ICoqc2lmdGVkX3N0YXRlczsKKyAgcmVfZGZhc3RhdGVfdCAqKmxpbWl0ZWRfc3RhdGVzOworICBJZHggbGFzdF9ub2RlOworICBJZHggbGFzdF9zdHJfaWR4OworICByZV9ub2RlX3NldCBsaW1pdHM7Cit9IHJlX3NpZnRfY29udGV4dF90OworCitzdHJ1Y3QgcmVfZmFpbF9zdGFja19lbnRfdAoreworICBJZHggaWR4OworICBJZHggbm9kZTsKKyAgcmVnbWF0Y2hfdCAqcmVnczsKKyAgcmVfbm9kZV9zZXQgZXBzX3ZpYV9ub2RlczsKK307CisKK3N0cnVjdCByZV9mYWlsX3N0YWNrX3QKK3sKKyAgSWR4IG51bTsKKyAgSWR4IGFsbG9jOworICBzdHJ1Y3QgcmVfZmFpbF9zdGFja19lbnRfdCAqc3RhY2s7Cit9OworCitzdHJ1Y3QgcmVfZGZhX3QKK3sKKyAgcmVfdG9rZW5fdCAqbm9kZXM7CisgIHNpemVfdCBub2Rlc19hbGxvYzsKKyAgc2l6ZV90IG5vZGVzX2xlbjsKKyAgSWR4ICpuZXh0czsKKyAgSWR4ICpvcmdfaW5kaWNlczsKKyAgcmVfbm9kZV9zZXQgKmVkZXN0czsKKyAgcmVfbm9kZV9zZXQgKmVjbG9zdXJlczsKKyAgcmVfbm9kZV9zZXQgKmludmVjbG9zdXJlczsKKyAgc3RydWN0IHJlX3N0YXRlX3RhYmxlX2VudHJ5ICpzdGF0ZV90YWJsZTsKKyAgcmVfZGZhc3RhdGVfdCAqaW5pdF9zdGF0ZTsKKyAgcmVfZGZhc3RhdGVfdCAqaW5pdF9zdGF0ZV93b3JkOworICByZV9kZmFzdGF0ZV90ICppbml0X3N0YXRlX25sOworICByZV9kZmFzdGF0ZV90ICppbml0X3N0YXRlX2JlZ2J1ZjsKKyAgYmluX3RyZWVfdCAqc3RyX3RyZWU7CisgIGJpbl90cmVlX3N0b3JhZ2VfdCAqc3RyX3RyZWVfc3RvcmFnZTsKKyAgcmVfYml0c2V0X3B0cl90IHNiX2NoYXI7CisgIGludCBzdHJfdHJlZV9zdG9yYWdlX2lkeDsKKworICAvKiBudW1iZXIgb2Ygc3ViZXhwcmVzc2lvbnMgYHJlX25zdWInIGlzIGluIHJlZ2V4X3QuICAqLworICByZV9oYXNodmFsX3Qgc3RhdGVfaGFzaF9tYXNrOworICBJZHggaW5pdF9ub2RlOworICBJZHggbmJhY2tyZWY7IC8qIFRoZSBudW1iZXIgb2YgYmFja3JlZmVyZW5jZSBpbiB0aGlzIGRmYS4gICovCisKKyAgLyogQml0bWFwIGV4cHJlc3Npbmcgd2hpY2ggYmFja3JlZmVyZW5jZSBpcyB1c2VkLiAgKi8KKyAgYml0c2V0X3dvcmRfdCB1c2VkX2JrcmVmX21hcDsKKyAgYml0c2V0X3dvcmRfdCBjb21wbGV0ZWRfYmtyZWZfbWFwOworCisgIHVuc2lnbmVkIGludCBoYXNfcGx1cmFsX21hdGNoIDogMTsKKyAgLyogSWYgdGhpcyBkZmEgaGFzICJtdWx0aWJ5dGUgbm9kZSIsIHdoaWNoIGlzIGEgYmFja3JlZmVyZW5jZSBvcgorICAgICBhIG5vZGUgd2hpY2ggY2FuIGFjY2VwdCBtdWx0aWJ5dGUgY2hhcmFjdGVyIG9yIG11bHRpIGNoYXJhY3RlcgorICAgICBjb2xsYXRpbmcgZWxlbWVudC4gICovCisgIHVuc2lnbmVkIGludCBoYXNfbWJfbm9kZSA6IDE7CisgIHVuc2lnbmVkIGludCBpc191dGY4IDogMTsKKyAgdW5zaWduZWQgaW50IG1hcF9ub3Rhc2NpaSA6IDE7CisgIHVuc2lnbmVkIGludCB3b3JkX29wc191c2VkIDogMTsKKyAgaW50IG1iX2N1cl9tYXg7CisgIGJpdHNldF90IHdvcmRfY2hhcjsKKyAgcmVnX3N5bnRheF90IHN5bnRheDsKKyAgSWR4ICpzdWJleHBfbWFwOworI2lmZGVmIERFQlVHCisgIGNoYXIqIHJlX3N0cjsKKyNlbmRpZgorI2lmZGVmIF9MSUJDCisgIF9fbGliY19sb2NrX2RlZmluZSAoLCBsb2NrKQorI2VuZGlmCit9OworCisjZGVmaW5lIHJlX25vZGVfc2V0X2luaXRfZW1wdHkoc2V0KSBtZW1zZXQgKHNldCwgJ1wwJywgc2l6ZW9mIChyZV9ub2RlX3NldCkpCisjZGVmaW5lIHJlX25vZGVfc2V0X3JlbW92ZShzZXQsaWQpIFwKKyAgKHJlX25vZGVfc2V0X3JlbW92ZV9hdCAoc2V0LCByZV9ub2RlX3NldF9jb250YWlucyAoc2V0LCBpZCkgLSAxKSkKKyNkZWZpbmUgcmVfbm9kZV9zZXRfZW1wdHkocCkgKChwKS0+bmVsZW0gPSAwKQorI2RlZmluZSByZV9ub2RlX3NldF9mcmVlKHNldCkgcmVfZnJlZSAoKHNldCktPmVsZW1zKQorDAorCit0eXBlZGVmIGVudW0KK3sKKyAgU0JfQ0hBUiwKKyAgTUJfQ0hBUiwKKyAgRVFVSVZfQ0xBU1MsCisgIENPTExfU1lNLAorICBDSEFSX0NMQVNTCit9IGJyYWNrZXRfZWxlbV90eXBlOworCit0eXBlZGVmIHN0cnVjdAoreworICBicmFja2V0X2VsZW1fdHlwZSB0eXBlOworICB1bmlvbgorICB7CisgICAgdW5zaWduZWQgY2hhciBjaDsKKyAgICB1bnNpZ25lZCBjaGFyICpuYW1lOworICAgIHdjaGFyX3Qgd2NoOworICB9IG9wcjsKK30gYnJhY2tldF9lbGVtX3Q7CisKKworLyogSW5saW5lIGZ1bmN0aW9ucyBmb3IgYml0c2V0X3Qgb3BlcmF0aW9uLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitiaXRzZXRfc2V0IChiaXRzZXRfdCBzZXQsIElkeCBpKQoreworICBzZXRbaSAvIEJJVFNFVF9XT1JEX0JJVFNdIHw9IChiaXRzZXRfd29yZF90KSAxIDw8IGkgJSBCSVRTRVRfV09SRF9CSVRTOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2JpdHNldF9jbGVhciAoYml0c2V0X3Qgc2V0LCBJZHggaSkKK3sKKyAgc2V0W2kgLyBCSVRTRVRfV09SRF9CSVRTXSAmPSB+ICgoYml0c2V0X3dvcmRfdCkgMSA8PCBpICUgQklUU0VUX1dPUkRfQklUUyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbAorYml0c2V0X2NvbnRhaW4gKGNvbnN0IGJpdHNldF90IHNldCwgSWR4IGkpCit7CisgIHJldHVybiAoc2V0W2kgLyBCSVRTRVRfV09SRF9CSVRTXSA+PiBpICUgQklUU0VUX1dPUkRfQklUUykgJiAxOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2JpdHNldF9lbXB0eSAoYml0c2V0X3Qgc2V0KQoreworICBtZW1zZXQgKHNldCwgJ1wwJywgc2l6ZW9mIChiaXRzZXRfdCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2JpdHNldF9zZXRfYWxsIChiaXRzZXRfdCBzZXQpCit7CisgIG1lbXNldCAoc2V0LCAtMSwgc2l6ZW9mIChiaXRzZXRfd29yZF90KSAqIChTQkNfTUFYIC8gQklUU0VUX1dPUkRfQklUUykpOworICBpZiAoU0JDX01BWCAlIEJJVFNFVF9XT1JEX0JJVFMgIT0gMCkKKyAgICBzZXRbQklUU0VUX1dPUkRTIC0gMV0gPQorICAgICAgKChiaXRzZXRfd29yZF90KSAxIDw8IFNCQ19NQVggJSBCSVRTRVRfV09SRF9CSVRTKSAtIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorYml0c2V0X2NvcHkgKGJpdHNldF90IGRlc3QsIGNvbnN0IGJpdHNldF90IHNyYykKK3sKKyAgbWVtY3B5IChkZXN0LCBzcmMsIHNpemVvZiAoYml0c2V0X3QpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitiaXRzZXRfbm90IChiaXRzZXRfdCBzZXQpCit7CisgIGludCBiaXRzZXRfaTsKKyAgZm9yIChiaXRzZXRfaSA9IDA7IGJpdHNldF9pIDwgU0JDX01BWCAvIEJJVFNFVF9XT1JEX0JJVFM7ICsrYml0c2V0X2kpCisgICAgc2V0W2JpdHNldF9pXSA9IH5zZXRbYml0c2V0X2ldOworICBpZiAoU0JDX01BWCAlIEJJVFNFVF9XT1JEX0JJVFMgIT0gMCkKKyAgICBzZXRbQklUU0VUX1dPUkRTIC0gMV0gPQorICAgICAgKCgoKGJpdHNldF93b3JkX3QpIDEgPDwgU0JDX01BWCAlIEJJVFNFVF9XT1JEX0JJVFMpIC0gMSkKKyAgICAgICAmIH5zZXRbQklUU0VUX1dPUkRTIC0gMV0pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2JpdHNldF9tZXJnZSAoYml0c2V0X3QgZGVzdCwgY29uc3QgYml0c2V0X3Qgc3JjKQoreworICBpbnQgYml0c2V0X2k7CisgIGZvciAoYml0c2V0X2kgPSAwOyBiaXRzZXRfaSA8IEJJVFNFVF9XT1JEUzsgKytiaXRzZXRfaSkKKyAgICBkZXN0W2JpdHNldF9pXSB8PSBzcmNbYml0c2V0X2ldOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2JpdHNldF9tYXNrIChiaXRzZXRfdCBkZXN0LCBjb25zdCBiaXRzZXRfdCBzcmMpCit7CisgIGludCBiaXRzZXRfaTsKKyAgZm9yIChiaXRzZXRfaSA9IDA7IGJpdHNldF9pIDwgQklUU0VUX1dPUkRTOyArK2JpdHNldF9pKQorICAgIGRlc3RbYml0c2V0X2ldICY9IHNyY1tiaXRzZXRfaV07Cit9CisKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorLyogSW5saW5lIGZ1bmN0aW9ucyBmb3IgcmVfc3RyaW5nLiAgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitpbnRlcm5hbF9mdW5jdGlvbiBfX2F0dHJpYnV0ZSAoKHB1cmUpKQorcmVfc3RyaW5nX2NoYXJfc2l6ZV9hdCAoY29uc3QgcmVfc3RyaW5nX3QgKnBzdHIsIElkeCBpZHgpCit7CisgIGludCBieXRlX2lkeDsKKyAgaWYgKHBzdHItPm1iX2N1cl9tYXggPT0gMSkKKyAgICByZXR1cm4gMTsKKyAgZm9yIChieXRlX2lkeCA9IDE7IGlkeCArIGJ5dGVfaWR4IDwgcHN0ci0+dmFsaWRfbGVuOyArK2J5dGVfaWR4KQorICAgIGlmIChwc3RyLT53Y3NbaWR4ICsgYnl0ZV9pZHhdICE9IFdFT0YpCisgICAgICBicmVhazsKKyAgcmV0dXJuIGJ5dGVfaWR4OworfQorCitzdGF0aWMgaW5saW5lIHdpbnRfdAoraW50ZXJuYWxfZnVuY3Rpb24gX19hdHRyaWJ1dGUgKChwdXJlKSkKK3JlX3N0cmluZ193Y2hhcl9hdCAoY29uc3QgcmVfc3RyaW5nX3QgKnBzdHIsIElkeCBpZHgpCit7CisgIGlmIChwc3RyLT5tYl9jdXJfbWF4ID09IDEpCisgICAgcmV0dXJuICh3aW50X3QpIHBzdHItPm1ic1tpZHhdOworICByZXR1cm4gKHdpbnRfdCkgcHN0ci0+d2NzW2lkeF07Cit9CisKK3N0YXRpYyBpbnQKK2ludGVybmFsX2Z1bmN0aW9uIF9fYXR0cmlidXRlICgocHVyZSkpCityZV9zdHJpbmdfZWxlbV9zaXplX2F0IChjb25zdCByZV9zdHJpbmdfdCAqcHN0ciwgSWR4IGlkeCkKK3sKKyMgaWZkZWYgX0xJQkMKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqcCwgKmV4dHJhOworICBjb25zdCBpbnQzMl90ICp0YWJsZSwgKmluZGlyZWN0OworICBpbnQzMl90IHRtcDsKKyMgIGluY2x1ZGUgPGxvY2FsZS93ZWlnaHQuaD4KKyAgdWludF9mYXN0MzJfdCBucnVsZXMgPSBfTkxfQ1VSUkVOVF9XT1JEIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9OUlVMRVMpOworCisgIGlmIChucnVsZXMgIT0gMCkKKyAgICB7CisgICAgICB0YWJsZSA9IChjb25zdCBpbnQzMl90ICopIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9UQUJMRU1CKTsKKyAgICAgIGV4dHJhID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikKKwlfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfRVhUUkFNQik7CisgICAgICBpbmRpcmVjdCA9IChjb25zdCBpbnQzMl90ICopIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLAorCQkJCQkJX05MX0NPTExBVEVfSU5ESVJFQ1RNQik7CisgICAgICBwID0gcHN0ci0+bWJzICsgaWR4OworICAgICAgdG1wID0gZmluZGlkeCAoJnApOworICAgICAgcmV0dXJuIHAgLSBwc3RyLT5tYnMgLSBpZHg7CisgICAgfQorICBlbHNlCisjIGVuZGlmIC8qIF9MSUJDICovCisgICAgcmV0dXJuIDE7Cit9CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKworI2VuZGlmIC8qICBfUkVHRVhfSU5URVJOQUxfSCAqLwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYi9yZWdleGVjLmMgYi9wYXJ0ZWQtMS44LjcvbGliL3JlZ2V4ZWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTM2NTcwCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYi9yZWdleGVjLmMKQEAgLTAsMCArMSw0Mzk5IEBACisvKiBFeHRlbmRlZCByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hpbmcgYW5kIHNlYXJjaCBsaWJyYXJ5LgorICAgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorICAgQ29udHJpYnV0ZWQgYnkgSXNhbXUgSGFzZWdhd2EgPGlzYW11QHlhbWF0by5pYm0uY29tPi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAgIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QgbWF0Y2hfY3R4X2luaXQgKHJlX21hdGNoX2NvbnRleHRfdCAqY2FjaGUsIGludCBlZmxhZ3MsCisJCQkJICAgICBJZHggbikgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgdm9pZCBtYXRjaF9jdHhfY2xlYW4gKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCkgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgdm9pZCBtYXRjaF9jdHhfZnJlZSAocmVfbWF0Y2hfY29udGV4dF90ICpjYWNoZSkgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgcmVnX2VycmNvZGVfdCBtYXRjaF9jdHhfYWRkX2VudHJ5IChyZV9tYXRjaF9jb250ZXh0X3QgKmNhY2hlLCBJZHggbm9kZSwKKwkJCQkJICBJZHggc3RyX2lkeCwgSWR4IGZyb20sIElkeCB0bykKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgSWR4IHNlYXJjaF9jdXJfYmtyZWZfZW50cnkgKGNvbnN0IHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwgSWR4IHN0cl9pZHgpCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHJlZ19lcnJjb2RlX3QgbWF0Y2hfY3R4X2FkZF9zdWJ0b3AgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwgSWR4IG5vZGUsCisJCQkJCSAgIElkeCBzdHJfaWR4KSBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyByZV9zdWJfbWF0Y2hfbGFzdF90ICogbWF0Y2hfY3R4X2FkZF9zdWJsYXN0IChyZV9zdWJfbWF0Y2hfdG9wX3QgKnN1YnRvcCwKKwkJCQkJCSAgICBJZHggbm9kZSwgSWR4IHN0cl9pZHgpCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHZvaWQgc2lmdF9jdHhfaW5pdCAocmVfc2lmdF9jb250ZXh0X3QgKnNjdHgsIHJlX2RmYXN0YXRlX3QgKipzaWZ0ZWRfc3RzLAorCQkJICAgcmVfZGZhc3RhdGVfdCAqKmxpbWl0ZWRfc3RzLCBJZHggbGFzdF9ub2RlLAorCQkJICAgSWR4IGxhc3Rfc3RyX2lkeCkKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgcmVnX2VycmNvZGVfdCByZV9zZWFyY2hfaW50ZXJuYWwgKGNvbnN0IHJlZ2V4X3QgKnByZWcsCisJCQkJCSBjb25zdCBjaGFyICpzdHJpbmcsIElkeCBsZW5ndGgsCisJCQkJCSBJZHggc3RhcnQsIElkeCBsYXN0X3N0YXJ0LCBJZHggc3RvcCwKKwkJCQkJIHNpemVfdCBubWF0Y2gsIHJlZ21hdGNoX3QgcG1hdGNoW10sCisJCQkJCSBpbnQgZWZsYWdzKSBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyByZWdvZmZfdCByZV9zZWFyY2hfMl9zdHViIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsCisJCQkJICBjb25zdCBjaGFyICpzdHJpbmcxLCBJZHggbGVuZ3RoMSwKKwkJCQkgIGNvbnN0IGNoYXIgKnN0cmluZzIsIElkeCBsZW5ndGgyLAorCQkJCSAgSWR4IHN0YXJ0LCByZWdvZmZfdCByYW5nZSwKKwkJCQkgIHN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3MsCisJCQkJICBJZHggc3RvcCwgYm9vbCByZXRfbGVuKSBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyByZWdvZmZfdCByZV9zZWFyY2hfc3R1YiAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLAorCQkJCWNvbnN0IGNoYXIgKnN0cmluZywgSWR4IGxlbmd0aCwgSWR4IHN0YXJ0LAorCQkJCXJlZ29mZl90IHJhbmdlLCBJZHggc3RvcCwKKwkJCQlzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpyZWdzLAorCQkJCWJvb2wgcmV0X2xlbikgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgdW5zaWduZWQgaW50IHJlX2NvcHlfcmVncyAoc3RydWN0IHJlX3JlZ2lzdGVycyAqcmVncywgcmVnbWF0Y2hfdCAqcG1hdGNoLAorCQkJCSAgSWR4IG5yZWdzLCBpbnQgcmVnc19hbGxvY2F0ZWQpCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHJlZ19lcnJjb2RlX3QgcHJ1bmVfaW1wb3NzaWJsZV9ub2RlcyAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4KQorICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyBJZHggY2hlY2tfbWF0Y2hpbmcgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwgYm9vbCBmbF9sb25nZXN0X21hdGNoLAorCQkJICAgSWR4ICpwX21hdGNoX2ZpcnN0KSBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyBJZHggY2hlY2tfaGFsdF9zdGF0ZV9jb250ZXh0IChjb25zdCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsCisJCQkJICAgICBjb25zdCByZV9kZmFzdGF0ZV90ICpzdGF0ZSwgSWR4IGlkeCkKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgdm9pZCB1cGRhdGVfcmVncyAoY29uc3QgcmVfZGZhX3QgKmRmYSwgcmVnbWF0Y2hfdCAqcG1hdGNoLAorCQkJIHJlZ21hdGNoX3QgKnByZXZfaWR4X21hdGNoLCBJZHggY3VyX25vZGUsCisJCQkgSWR4IGN1cl9pZHgsIElkeCBubWF0Y2gpIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHJlZ19lcnJjb2RlX3QgcHVzaF9mYWlsX3N0YWNrIChzdHJ1Y3QgcmVfZmFpbF9zdGFja190ICpmcywKKwkJCQkgICAgICBJZHggc3RyX2lkeCwgSWR4IGRlc3Rfbm9kZSwgSWR4IG5yZWdzLAorCQkJCSAgICAgIHJlZ21hdGNoX3QgKnJlZ3MsCisJCQkJICAgICAgcmVfbm9kZV9zZXQgKmVwc192aWFfbm9kZXMpCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHJlZ19lcnJjb2RlX3Qgc2V0X3JlZ3MgKGNvbnN0IHJlZ2V4X3QgKnByZWcsCisJCQkgICAgICAgY29uc3QgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LAorCQkJICAgICAgIHNpemVfdCBubWF0Y2gsIHJlZ21hdGNoX3QgKnBtYXRjaCwKKwkJCSAgICAgICBib29sIGZsX2JhY2t0cmFjaykgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgcmVnX2VycmNvZGVfdCBmcmVlX2ZhaWxfc3RhY2tfcmV0dXJuIChzdHJ1Y3QgcmVfZmFpbF9zdGFja190ICpmcykKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CisKKyNpZmRlZiBSRV9FTkFCTEVfSTE4Tgorc3RhdGljIGludCBzaWZ0X3N0YXRlc19pdGVyX21iIChjb25zdCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsCisJCQkJcmVfc2lmdF9jb250ZXh0X3QgKnNjdHgsCisJCQkJSWR4IG5vZGVfaWR4LCBJZHggc3RyX2lkeCwgSWR4IG1heF9zdHJfaWR4KQorICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworc3RhdGljIHJlZ19lcnJjb2RlX3Qgc2lmdF9zdGF0ZXNfYmFja3dhcmQgKGNvbnN0IHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkJCQkJICAgcmVfc2lmdF9jb250ZXh0X3QgKnNjdHgpCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHJlZ19lcnJjb2RlX3QgYnVpbGRfc2lmdGVkX3N0YXRlcyAoY29uc3QgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LAorCQkJCQkgIHJlX3NpZnRfY29udGV4dF90ICpzY3R4LCBJZHggc3RyX2lkeCwKKwkJCQkJICByZV9ub2RlX3NldCAqY3VyX2Rlc3QpCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHJlZ19lcnJjb2RlX3QgdXBkYXRlX2N1cl9zaWZ0ZWRfc3RhdGUgKGNvbnN0IHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkJCQkJICAgICAgcmVfc2lmdF9jb250ZXh0X3QgKnNjdHgsCisJCQkJCSAgICAgIElkeCBzdHJfaWR4LAorCQkJCQkgICAgICByZV9ub2RlX3NldCAqZGVzdF9ub2RlcykKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgcmVnX2VycmNvZGVfdCBhZGRfZXBzaWxvbl9zcmNfbm9kZXMgKGNvbnN0IHJlX2RmYV90ICpkZmEsCisJCQkJCSAgICByZV9ub2RlX3NldCAqZGVzdF9ub2RlcywKKwkJCQkJICAgIGNvbnN0IHJlX25vZGVfc2V0ICpjYW5kaWRhdGVzKQorICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyBib29sIGNoZWNrX2RzdF9saW1pdHMgKGNvbnN0IHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkJCSAgICAgIGNvbnN0IHJlX25vZGVfc2V0ICpsaW1pdHMsCisJCQkgICAgICBJZHggZHN0X25vZGUsIElkeCBkc3RfaWR4LCBJZHggc3JjX25vZGUsCisJCQkgICAgICBJZHggc3JjX2lkeCkgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgaW50IGNoZWNrX2RzdF9saW1pdHNfY2FsY19wb3NfMSAoY29uc3QgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LAorCQkJCQlpbnQgYm91bmRhcmllcywgSWR4IHN1YmV4cF9pZHgsCisJCQkJCUlkeCBmcm9tX25vZGUsIElkeCBia3JlZl9pZHgpCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIGludCBjaGVja19kc3RfbGltaXRzX2NhbGNfcG9zIChjb25zdCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsCisJCQkJICAgICAgSWR4IGxpbWl0LCBJZHggc3ViZXhwX2lkeCwKKwkJCQkgICAgICBJZHggbm9kZSwgSWR4IHN0cl9pZHgsCisJCQkJICAgICAgSWR4IGJrcmVmX2lkeCkgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgcmVnX2VycmNvZGVfdCBjaGVja19zdWJleHBfbGltaXRzIChjb25zdCByZV9kZmFfdCAqZGZhLAorCQkJCQkgIHJlX25vZGVfc2V0ICpkZXN0X25vZGVzLAorCQkJCQkgIGNvbnN0IHJlX25vZGVfc2V0ICpjYW5kaWRhdGVzLAorCQkJCQkgIHJlX25vZGVfc2V0ICpsaW1pdHMsCisJCQkJCSAgc3RydWN0IHJlX2JhY2tyZWZfY2FjaGVfZW50cnkgKmJrcmVmX2VudHMsCisJCQkJCSAgSWR4IHN0cl9pZHgpIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHJlZ19lcnJjb2RlX3Qgc2lmdF9zdGF0ZXNfYmtyZWYgKGNvbnN0IHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkJCQkJcmVfc2lmdF9jb250ZXh0X3QgKnNjdHgsCisJCQkJCUlkeCBzdHJfaWR4LCBjb25zdCByZV9ub2RlX3NldCAqY2FuZGlkYXRlcykKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgcmVnX2VycmNvZGVfdCBtZXJnZV9zdGF0ZV9hcnJheSAoY29uc3QgcmVfZGZhX3QgKmRmYSwKKwkJCQkJcmVfZGZhc3RhdGVfdCAqKmRzdCwKKwkJCQkJcmVfZGZhc3RhdGVfdCAqKnNyYywgSWR4IG51bSkKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgcmVfZGZhc3RhdGVfdCAqZmluZF9yZWNvdmVyX3N0YXRlIChyZWdfZXJyY29kZV90ICplcnIsCisJCQkJCSByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgpIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHJlX2RmYXN0YXRlX3QgKnRyYW5zaXRfc3RhdGUgKHJlZ19lcnJjb2RlX3QgKmVyciwKKwkJCQkgICAgIHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkJCQkgICAgIHJlX2RmYXN0YXRlX3QgKnN0YXRlKSBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyByZV9kZmFzdGF0ZV90ICptZXJnZV9zdGF0ZV93aXRoX2xvZyAocmVnX2VycmNvZGVfdCAqZXJyLAorCQkJCQkgICAgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LAorCQkJCQkgICAgcmVfZGZhc3RhdGVfdCAqbmV4dF9zdGF0ZSkKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgcmVnX2VycmNvZGVfdCBjaGVja19zdWJleHBfbWF0Y2hpbmdfdG9wIChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsCisJCQkJCQlyZV9ub2RlX3NldCAqY3VyX25vZGVzLAorCQkJCQkJSWR4IHN0cl9pZHgpIGludGVybmFsX2Z1bmN0aW9uOworI2lmIDAKK3N0YXRpYyByZV9kZmFzdGF0ZV90ICp0cmFuc2l0X3N0YXRlX3NiIChyZWdfZXJyY29kZV90ICplcnIsCisJCQkJCXJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkJCQkJcmVfZGZhc3RhdGVfdCAqcHN0YXRlKQorICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKKyNlbmRpZgorI2lmZGVmIFJFX0VOQUJMRV9JMThOCitzdGF0aWMgcmVnX2VycmNvZGVfdCB0cmFuc2l0X3N0YXRlX21iIChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsCisJCQkJICAgICAgIHJlX2RmYXN0YXRlX3QgKnBzdGF0ZSkKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KK3N0YXRpYyByZWdfZXJyY29kZV90IHRyYW5zaXRfc3RhdGVfYmtyZWYgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkJCQkJICBjb25zdCByZV9ub2RlX3NldCAqbm9kZXMpCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHJlZ19lcnJjb2RlX3QgZ2V0X3N1YmV4cCAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4LAorCQkJCSBJZHggYmtyZWZfbm9kZSwgSWR4IGJrcmVmX3N0cl9pZHgpCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHJlZ19lcnJjb2RlX3QgZ2V0X3N1YmV4cF9zdWIgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkJCQkgICAgIGNvbnN0IHJlX3N1Yl9tYXRjaF90b3BfdCAqc3ViX3RvcCwKKwkJCQkgICAgIHJlX3N1Yl9tYXRjaF9sYXN0X3QgKnN1Yl9sYXN0LAorCQkJCSAgICAgSWR4IGJrcmVmX25vZGUsIElkeCBia3JlZl9zdHIpCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIElkeCBmaW5kX3N1YmV4cF9ub2RlIChjb25zdCByZV9kZmFfdCAqZGZhLCBjb25zdCByZV9ub2RlX3NldCAqbm9kZXMsCisJCQkgICAgIElkeCBzdWJleHBfaWR4LCBpbnQgdHlwZSkgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgcmVnX2VycmNvZGVfdCBjaGVja19hcnJpdmFsIChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsCisJCQkJICAgIHN0YXRlX2FycmF5X3QgKnBhdGgsIElkeCB0b3Bfbm9kZSwKKwkJCQkgICAgSWR4IHRvcF9zdHIsIElkeCBsYXN0X25vZGUsIElkeCBsYXN0X3N0ciwKKwkJCQkgICAgaW50IHR5cGUpIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHJlZ19lcnJjb2RlX3QgY2hlY2tfYXJyaXZhbF9hZGRfbmV4dF9ub2RlcyAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4LAorCQkJCQkJICAgSWR4IHN0cl9pZHgsCisJCQkJCQkgICByZV9ub2RlX3NldCAqY3VyX25vZGVzLAorCQkJCQkJICAgcmVfbm9kZV9zZXQgKm5leHRfbm9kZXMpCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHJlZ19lcnJjb2RlX3QgY2hlY2tfYXJyaXZhbF9leHBhbmRfZWNsIChjb25zdCByZV9kZmFfdCAqZGZhLAorCQkJCQkgICAgICAgcmVfbm9kZV9zZXQgKmN1cl9ub2RlcywKKwkJCQkJICAgICAgIElkeCBleF9zdWJleHAsIGludCB0eXBlKQorICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyByZWdfZXJyY29kZV90IGNoZWNrX2Fycml2YWxfZXhwYW5kX2VjbF9zdWIgKGNvbnN0IHJlX2RmYV90ICpkZmEsCisJCQkJCQkgICByZV9ub2RlX3NldCAqZHN0X25vZGVzLAorCQkJCQkJICAgSWR4IHRhcmdldCwgSWR4IGV4X3N1YmV4cCwKKwkJCQkJCSAgIGludCB0eXBlKSBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyByZWdfZXJyY29kZV90IGV4cGFuZF9ia3JlZl9jYWNoZSAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4LAorCQkJCQkgcmVfbm9kZV9zZXQgKmN1cl9ub2RlcywgSWR4IGN1cl9zdHIsCisJCQkJCSBJZHggc3ViZXhwX251bSwgaW50IHR5cGUpCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIGJvb2wgYnVpbGRfdHJ0YWJsZSAoY29uc3QgcmVfZGZhX3QgKmRmYSwKKwkJCSAgIHJlX2RmYXN0YXRlX3QgKnN0YXRlKSBpbnRlcm5hbF9mdW5jdGlvbjsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4Tgorc3RhdGljIGludCBjaGVja19ub2RlX2FjY2VwdF9ieXRlcyAoY29uc3QgcmVfZGZhX3QgKmRmYSwgSWR4IG5vZGVfaWR4LAorCQkJCSAgICBjb25zdCByZV9zdHJpbmdfdCAqaW5wdXQsIElkeCBpZHgpCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworIyBpZmRlZiBfTElCQworc3RhdGljIHVuc2lnbmVkIGludCBmaW5kX2NvbGxhdGlvbl9zZXF1ZW5jZV92YWx1ZSAoY29uc3QgdW5zaWduZWQgY2hhciAqbWJzLAorCQkJCQkJICAgc2l6ZV90IG5hbWVfbGVuKQorICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKKyMgZW5kaWYgLyogX0xJQkMgKi8KKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworc3RhdGljIElkeCBncm91cF9ub2Rlc19pbnRvX0RGQXN0YXRlcyAoY29uc3QgcmVfZGZhX3QgKmRmYSwKKwkJCQkgICAgICAgY29uc3QgcmVfZGZhc3RhdGVfdCAqc3RhdGUsCisJCQkJICAgICAgIHJlX25vZGVfc2V0ICpzdGF0ZXNfbm9kZSwKKwkJCQkgICAgICAgYml0c2V0X3QgKnN0YXRlc19jaCkgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgYm9vbCBjaGVja19ub2RlX2FjY2VwdCAoY29uc3QgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LAorCQkJICAgICAgIGNvbnN0IHJlX3Rva2VuX3QgKm5vZGUsIElkeCBpZHgpCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHJlZ19lcnJjb2RlX3QgZXh0ZW5kX2J1ZmZlcnMgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCkKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CisMCisvKiBFbnRyeSBwb2ludCBmb3IgUE9TSVggY29kZS4gICovCisKKy8qIHJlZ2V4ZWMgc2VhcmNoZXMgZm9yIGEgZ2l2ZW4gcGF0dGVybiwgc3BlY2lmaWVkIGJ5IFBSRUcsIGluIHRoZQorICAgc3RyaW5nIFNUUklORy4KKworICAgSWYgTk1BVENIIGlzIHplcm8gb3IgUkVHX05PU1VCIHdhcyBzZXQgaW4gdGhlIGNmbGFncyBhcmd1bWVudCB0bworICAgYHJlZ2NvbXAnLCB3ZSBpZ25vcmUgUE1BVENILiAgT3RoZXJ3aXNlLCB3ZSBhc3N1bWUgUE1BVENIIGhhcyBhdAorICAgbGVhc3QgTk1BVENIIGVsZW1lbnRzLCBhbmQgd2Ugc2V0IHRoZW0gdG8gdGhlIG9mZnNldHMgb2YgdGhlCisgICBjb3JyZXNwb25kaW5nIG1hdGNoZWQgc3Vic3RyaW5ncy4KKworICAgRUZMQUdTIHNwZWNpZmllcyBgZXhlY3V0aW9uIGZsYWdzJyB3aGljaCBhZmZlY3QgbWF0Y2hpbmc6IGlmCisgICBSRUdfTk9UQk9MIGlzIHNldCwgdGhlbiBeIGRvZXMgbm90IG1hdGNoIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlCisgICBzdHJpbmc7IGlmIFJFR19OT1RFT0wgaXMgc2V0LCB0aGVuICQgZG9lcyBub3QgbWF0Y2ggYXQgdGhlIGVuZC4KKworICAgV2UgcmV0dXJuIDAgaWYgd2UgZmluZCBhIG1hdGNoIGFuZCBSRUdfTk9NQVRDSCBpZiBub3QuICAqLworCitpbnQKK3JlZ2V4ZWMgKHByZWcsIHN0cmluZywgbm1hdGNoLCBwbWF0Y2gsIGVmbGFncykKKyAgICBjb25zdCByZWdleF90ICpfUmVzdHJpY3RfIHByZWc7CisgICAgY29uc3QgY2hhciAqX1Jlc3RyaWN0XyBzdHJpbmc7CisgICAgc2l6ZV90IG5tYXRjaDsKKyAgICByZWdtYXRjaF90IHBtYXRjaFtfUmVzdHJpY3RfYXJyX107CisgICAgaW50IGVmbGFnczsKK3sKKyAgcmVnX2VycmNvZGVfdCBlcnI7CisgIElkeCBzdGFydCwgbGVuZ3RoOworI2lmZGVmIF9MSUJDCisgIHJlX2RmYV90ICpkZmEgPSAocmVfZGZhX3QgKikgcHJlZy0+YnVmZmVyOworI2VuZGlmCisKKyAgaWYgKGVmbGFncyAmIH4oUkVHX05PVEJPTCB8IFJFR19OT1RFT0wgfCBSRUdfU1RBUlRFTkQpKQorICAgIHJldHVybiBSRUdfQkFEUEFUOworCisgIGlmIChlZmxhZ3MgJiBSRUdfU1RBUlRFTkQpCisgICAgeworICAgICAgc3RhcnQgPSBwbWF0Y2hbMF0ucm1fc287CisgICAgICBsZW5ndGggPSBwbWF0Y2hbMF0ucm1fZW87CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgc3RhcnQgPSAwOworICAgICAgbGVuZ3RoID0gc3RybGVuIChzdHJpbmcpOworICAgIH0KKworICBfX2xpYmNfbG9ja19sb2NrIChkZmEtPmxvY2spOworICBpZiAocHJlZy0+bm9fc3ViKQorICAgIGVyciA9IHJlX3NlYXJjaF9pbnRlcm5hbCAocHJlZywgc3RyaW5nLCBsZW5ndGgsIHN0YXJ0LCBsZW5ndGgsCisJCQkgICAgICBsZW5ndGgsIDAsIE5VTEwsIGVmbGFncyk7CisgIGVsc2UKKyAgICBlcnIgPSByZV9zZWFyY2hfaW50ZXJuYWwgKHByZWcsIHN0cmluZywgbGVuZ3RoLCBzdGFydCwgbGVuZ3RoLAorCQkJICAgICAgbGVuZ3RoLCBubWF0Y2gsIHBtYXRjaCwgZWZsYWdzKTsKKyAgX19saWJjX2xvY2tfdW5sb2NrIChkZmEtPmxvY2spOworICByZXR1cm4gZXJyICE9IFJFR19OT0VSUk9SOworfQorCisjaWZkZWYgX0xJQkMKKyMgaW5jbHVkZSA8c2hsaWItY29tcGF0Lmg+Cit2ZXJzaW9uZWRfc3ltYm9sIChsaWJjLCBfX3JlZ2V4ZWMsIHJlZ2V4ZWMsIEdMSUJDXzJfM180KTsKKworIyBpZiBTSExJQl9DT01QQVQgKGxpYmMsIEdMSUJDXzJfMCwgR0xJQkNfMl8zXzQpCitfX3R5cGVvZl9fIChfX3JlZ2V4ZWMpIF9fY29tcGF0X3JlZ2V4ZWM7CisKK2ludAorYXR0cmlidXRlX2NvbXBhdF90ZXh0X3NlY3Rpb24KK19fY29tcGF0X3JlZ2V4ZWMgKGNvbnN0IHJlZ2V4X3QgKl9SZXN0cmljdF8gcHJlZywKKwkJICBjb25zdCBjaGFyICpfUmVzdHJpY3RfIHN0cmluZywgc2l6ZV90IG5tYXRjaCwKKwkJICByZWdtYXRjaF90IHBtYXRjaFtdLCBpbnQgZWZsYWdzKQoreworICByZXR1cm4gcmVnZXhlYyAocHJlZywgc3RyaW5nLCBubWF0Y2gsIHBtYXRjaCwKKwkJICBlZmxhZ3MgJiAoUkVHX05PVEJPTCB8IFJFR19OT1RFT0wpKTsKK30KK2NvbXBhdF9zeW1ib2wgKGxpYmMsIF9fY29tcGF0X3JlZ2V4ZWMsIHJlZ2V4ZWMsIEdMSUJDXzJfMCk7CisjIGVuZGlmCisjZW5kaWYKKworLyogRW50cnkgcG9pbnRzIGZvciBHTlUgY29kZS4gICovCisKKy8qIHJlX21hdGNoLCByZV9zZWFyY2gsIHJlX21hdGNoXzIsIHJlX3NlYXJjaF8yCisKKyAgIFRoZSBmb3JtZXIgdHdvIGZ1bmN0aW9ucyBvcGVyYXRlIG9uIFNUUklORyB3aXRoIGxlbmd0aCBMRU5HVEgsCisgICB3aGlsZSB0aGUgbGF0ZXIgdHdvIG9wZXJhdGUgb24gY29uY2F0ZW5hdGlvbiBvZiBTVFJJTkcxIGFuZCBTVFJJTkcyCisgICB3aXRoIGxlbmd0aHMgTEVOR1RIMSBhbmQgTEVOR1RIMiwgcmVzcGVjdGl2ZWx5LgorCisgICByZV9tYXRjaCgpIG1hdGNoZXMgdGhlIGNvbXBpbGVkIHBhdHRlcm4gaW4gQlVGUCBhZ2FpbnN0IHRoZSBzdHJpbmcsCisgICBzdGFydGluZyBhdCBpbmRleCBTVEFSVC4KKworICAgcmVfc2VhcmNoKCkgZmlyc3QgdHJpZXMgbWF0Y2hpbmcgYXQgaW5kZXggU1RBUlQsIHRoZW4gaXQgdHJpZXMgdG8gbWF0Y2gKKyAgIHN0YXJ0aW5nIGZyb20gaW5kZXggU1RBUlQgKyAxLCBhbmQgc28gb24uICBUaGUgbGFzdCBzdGFydCBwb3NpdGlvbiB0cmllZAorICAgaXMgU1RBUlQgKyBSQU5HRS4gIChUaHVzIFJBTkdFID0gMCBmb3JjZXMgcmVfc2VhcmNoIHRvIG9wZXJhdGUgdGhlIHNhbWUKKyAgIHdheSBhcyByZV9tYXRjaCgpLikKKworICAgVGhlIHBhcmFtZXRlciBTVE9QIG9mIHJlX3ttYXRjaCxzZWFyY2h9XzIgc3BlY2lmaWVzIHRoYXQgbm8gbWF0Y2ggZXhjZWVkaW5nCisgICB0aGUgZmlyc3QgU1RPUCBjaGFyYWN0ZXJzIG9mIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZSBzdHJpbmdzIHNob3VsZCBiZQorICAgY29uY2VybmVkLgorCisgICBJZiBSRUdTIGlzIG5vdCBOVUxMLCBhbmQgQlVGUC0+bm9fc3ViIGlzIG5vdCBzZXQsIHRoZSBvZmZzZXRzIG9mIHRoZSBtYXRjaAorICAgYW5kIGFsbCBncm91cHMgaXMgc3RvcmVkIGluIFJFR1MuICAoRm9yIHRoZSAiXzIiIHZhcmlhbnRzLCB0aGUgb2Zmc2V0cyBhcmUKKyAgIGNvbXB1dGVkIHJlbGF0aXZlIHRvIHRoZSBjb25jYXRlbmF0aW9uLCBub3QgcmVsYXRpdmUgdG8gdGhlIGluZGl2aWR1YWwKKyAgIHN0cmluZ3MuKQorCisgICBPbiBzdWNjZXNzLCByZV9tYXRjaCogZnVuY3Rpb25zIHJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBtYXRjaCwgcmVfc2VhcmNoKgorICAgcmV0dXJuIHRoZSBwb3NpdGlvbiBvZiB0aGUgc3RhcnQgb2YgdGhlIG1hdGNoLiAgUmV0dXJuIHZhbHVlIC0xIG1lYW5zIG5vCisgICBtYXRjaCB3YXMgZm91bmQgYW5kIC0yIGluZGljYXRlcyBhbiBpbnRlcm5hbCBlcnJvci4gICovCisKK3JlZ29mZl90CityZV9tYXRjaCAoYnVmcCwgc3RyaW5nLCBsZW5ndGgsIHN0YXJ0LCByZWdzKQorICAgIHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcDsKKyAgICBjb25zdCBjaGFyICpzdHJpbmc7CisgICAgSWR4IGxlbmd0aCwgc3RhcnQ7CisgICAgc3RydWN0IHJlX3JlZ2lzdGVycyAqcmVnczsKK3sKKyAgcmV0dXJuIHJlX3NlYXJjaF9zdHViIChidWZwLCBzdHJpbmcsIGxlbmd0aCwgc3RhcnQsIDAsIGxlbmd0aCwgcmVncywgdHJ1ZSk7Cit9CisjaWZkZWYgX0xJQkMKK3dlYWtfYWxpYXMgKF9fcmVfbWF0Y2gsIHJlX21hdGNoKQorI2VuZGlmCisKK3JlZ29mZl90CityZV9zZWFyY2ggKGJ1ZnAsIHN0cmluZywgbGVuZ3RoLCBzdGFydCwgcmFuZ2UsIHJlZ3MpCisgICAgc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwOworICAgIGNvbnN0IGNoYXIgKnN0cmluZzsKKyAgICBJZHggbGVuZ3RoLCBzdGFydDsKKyAgICByZWdvZmZfdCByYW5nZTsKKyAgICBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpyZWdzOworeworICByZXR1cm4gcmVfc2VhcmNoX3N0dWIgKGJ1ZnAsIHN0cmluZywgbGVuZ3RoLCBzdGFydCwgcmFuZ2UsIGxlbmd0aCwgcmVncywKKwkJCSBmYWxzZSk7Cit9CisjaWZkZWYgX0xJQkMKK3dlYWtfYWxpYXMgKF9fcmVfc2VhcmNoLCByZV9zZWFyY2gpCisjZW5kaWYKKworcmVnb2ZmX3QKK3JlX21hdGNoXzIgKGJ1ZnAsIHN0cmluZzEsIGxlbmd0aDEsIHN0cmluZzIsIGxlbmd0aDIsIHN0YXJ0LCByZWdzLCBzdG9wKQorICAgIHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcDsKKyAgICBjb25zdCBjaGFyICpzdHJpbmcxLCAqc3RyaW5nMjsKKyAgICBJZHggbGVuZ3RoMSwgbGVuZ3RoMiwgc3RhcnQsIHN0b3A7CisgICAgc3RydWN0IHJlX3JlZ2lzdGVycyAqcmVnczsKK3sKKyAgcmV0dXJuIHJlX3NlYXJjaF8yX3N0dWIgKGJ1ZnAsIHN0cmluZzEsIGxlbmd0aDEsIHN0cmluZzIsIGxlbmd0aDIsCisJCQkgICBzdGFydCwgMCwgcmVncywgc3RvcCwgdHJ1ZSk7Cit9CisjaWZkZWYgX0xJQkMKK3dlYWtfYWxpYXMgKF9fcmVfbWF0Y2hfMiwgcmVfbWF0Y2hfMikKKyNlbmRpZgorCityZWdvZmZfdAorcmVfc2VhcmNoXzIgKGJ1ZnAsIHN0cmluZzEsIGxlbmd0aDEsIHN0cmluZzIsIGxlbmd0aDIsIHN0YXJ0LCByYW5nZSwgcmVncywgc3RvcCkKKyAgICBzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnA7CisgICAgY29uc3QgY2hhciAqc3RyaW5nMSwgKnN0cmluZzI7CisgICAgSWR4IGxlbmd0aDEsIGxlbmd0aDIsIHN0YXJ0LCBzdG9wOworICAgIHJlZ29mZl90IHJhbmdlOworICAgIHN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3M7Cit7CisgIHJldHVybiByZV9zZWFyY2hfMl9zdHViIChidWZwLCBzdHJpbmcxLCBsZW5ndGgxLCBzdHJpbmcyLCBsZW5ndGgyLAorCQkJICAgc3RhcnQsIHJhbmdlLCByZWdzLCBzdG9wLCBmYWxzZSk7Cit9CisjaWZkZWYgX0xJQkMKK3dlYWtfYWxpYXMgKF9fcmVfc2VhcmNoXzIsIHJlX3NlYXJjaF8yKQorI2VuZGlmCisKK3N0YXRpYyByZWdvZmZfdAoraW50ZXJuYWxfZnVuY3Rpb24KK3JlX3NlYXJjaF8yX3N0dWIgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwKKwkJICBjb25zdCBjaGFyICpzdHJpbmcxLCBJZHggbGVuZ3RoMSwKKwkJICBjb25zdCBjaGFyICpzdHJpbmcyLCBJZHggbGVuZ3RoMiwKKwkJICBJZHggc3RhcnQsIHJlZ29mZl90IHJhbmdlLCBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpyZWdzLAorCQkgIElkeCBzdG9wLCBib29sIHJldF9sZW4pCit7CisgIGNvbnN0IGNoYXIgKnN0cjsKKyAgcmVnb2ZmX3QgcnZhbDsKKyAgSWR4IGxlbiA9IGxlbmd0aDEgKyBsZW5ndGgyOworICBjaGFyICpzID0gTlVMTDsKKworICBpZiAoQkUgKGxlbmd0aDEgPCAwIHx8IGxlbmd0aDIgPCAwIHx8IHN0b3AgPCAwIHx8IGxlbiA8IGxlbmd0aDEsIDApKQorICAgIHJldHVybiAtMjsKKworICAvKiBDb25jYXRlbmF0ZSB0aGUgc3RyaW5ncy4gICovCisgIGlmIChsZW5ndGgyID4gMCkKKyAgICBpZiAobGVuZ3RoMSA+IDApCisgICAgICB7CisJcyA9IHJlX21hbGxvYyAoY2hhciwgbGVuKTsKKworCWlmIChCRSAocyA9PSBOVUxMLCAwKSkKKwkgIHJldHVybiAtMjsKKyNpZmRlZiBfTElCQworCW1lbWNweSAoX19tZW1wY3B5IChzLCBzdHJpbmcxLCBsZW5ndGgxKSwgc3RyaW5nMiwgbGVuZ3RoMik7CisjZWxzZQorCW1lbWNweSAocywgc3RyaW5nMSwgbGVuZ3RoMSk7CisJbWVtY3B5IChzICsgbGVuZ3RoMSwgc3RyaW5nMiwgbGVuZ3RoMik7CisjZW5kaWYKKwlzdHIgPSBzOworICAgICAgfQorICAgIGVsc2UKKyAgICAgIHN0ciA9IHN0cmluZzI7CisgIGVsc2UKKyAgICBzdHIgPSBzdHJpbmcxOworCisgIHJ2YWwgPSByZV9zZWFyY2hfc3R1YiAoYnVmcCwgc3RyLCBsZW4sIHN0YXJ0LCByYW5nZSwgc3RvcCwgcmVncywKKwkJCSByZXRfbGVuKTsKKyAgcmVfZnJlZSAocyk7CisgIHJldHVybiBydmFsOworfQorCisvKiBUaGUgcGFyYW1ldGVycyBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgYXMgdGhvc2Ugb2YgcmVfc2VhcmNoLgorICAgQWRkaXRpb25hbCBwYXJhbWV0ZXJzOgorICAgSWYgUkVUX0xFTiBpcyB0cnVlIHRoZSBsZW5ndGggb2YgdGhlIG1hdGNoIGlzIHJldHVybmVkIChyZV9tYXRjaCBzdHlsZSk7CisgICBvdGhlcndpc2UgdGhlIHBvc2l0aW9uIG9mIHRoZSBtYXRjaCBpcyByZXR1cm5lZC4gICovCisKK3N0YXRpYyByZWdvZmZfdAoraW50ZXJuYWxfZnVuY3Rpb24KK3JlX3NlYXJjaF9zdHViIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsCisJCWNvbnN0IGNoYXIgKnN0cmluZywgSWR4IGxlbmd0aCwKKwkJSWR4IHN0YXJ0LCByZWdvZmZfdCByYW5nZSwgSWR4IHN0b3AsIHN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3MsCisJCWJvb2wgcmV0X2xlbikKK3sKKyAgcmVnX2VycmNvZGVfdCByZXN1bHQ7CisgIHJlZ21hdGNoX3QgKnBtYXRjaDsKKyAgSWR4IG5yZWdzOworICByZWdvZmZfdCBydmFsOworICBpbnQgZWZsYWdzID0gMDsKKyNpZmRlZiBfTElCQworICByZV9kZmFfdCAqZGZhID0gKHJlX2RmYV90ICopIGJ1ZnAtPmJ1ZmZlcjsKKyNlbmRpZgorICBJZHggbGFzdF9zdGFydCA9IHN0YXJ0ICsgcmFuZ2U7CisKKyAgLyogQ2hlY2sgZm9yIG91dC1vZi1yYW5nZS4gICovCisgIGlmIChCRSAoc3RhcnQgPCAwIHx8IHN0YXJ0ID4gbGVuZ3RoLCAwKSkKKyAgICByZXR1cm4gLTE7CisgIGlmIChCRSAobGVuZ3RoIDwgbGFzdF9zdGFydCB8fCAoMCA8PSByYW5nZSAmJiBsYXN0X3N0YXJ0IDwgc3RhcnQpLCAwKSkKKyAgICBsYXN0X3N0YXJ0ID0gbGVuZ3RoOworICBlbHNlIGlmIChCRSAobGFzdF9zdGFydCA8IDAgfHwgKHJhbmdlIDwgMCAmJiBzdGFydCA8PSBsYXN0X3N0YXJ0KSwgMCkpCisgICAgbGFzdF9zdGFydCA9IDA7CisKKyAgX19saWJjX2xvY2tfbG9jayAoZGZhLT5sb2NrKTsKKworICBlZmxhZ3MgfD0gKGJ1ZnAtPm5vdF9ib2wpID8gUkVHX05PVEJPTCA6IDA7CisgIGVmbGFncyB8PSAoYnVmcC0+bm90X2VvbCkgPyBSRUdfTk9URU9MIDogMDsKKworICAvKiBDb21waWxlIGZhc3RtYXAgaWYgd2UgaGF2ZW4ndCB5ZXQuICAqLworICBpZiAoc3RhcnQgPCBsYXN0X3N0YXJ0ICYmIGJ1ZnAtPmZhc3RtYXAgIT0gTlVMTCAmJiAhYnVmcC0+ZmFzdG1hcF9hY2N1cmF0ZSkKKyAgICByZV9jb21waWxlX2Zhc3RtYXAgKGJ1ZnApOworCisgIGlmIChCRSAoYnVmcC0+bm9fc3ViLCAwKSkKKyAgICByZWdzID0gTlVMTDsKKworICAvKiBXZSBuZWVkIGF0IGxlYXN0IDEgcmVnaXN0ZXIuICAqLworICBpZiAocmVncyA9PSBOVUxMKQorICAgIG5yZWdzID0gMTsKKyAgZWxzZSBpZiAoQkUgKGJ1ZnAtPnJlZ3NfYWxsb2NhdGVkID09IFJFR1NfRklYRUQKKwkgICAgICAgJiYgcmVncy0+bnVtX3JlZ3MgPD0gYnVmcC0+cmVfbnN1YiwgMCkpCisgICAgeworICAgICAgbnJlZ3MgPSByZWdzLT5udW1fcmVnczsKKyAgICAgIGlmIChCRSAobnJlZ3MgPCAxLCAwKSkKKwl7CisJICAvKiBOb3RoaW5nIGNhbiBiZSBjb3BpZWQgdG8gcmVncy4gICovCisJICByZWdzID0gTlVMTDsKKwkgIG5yZWdzID0gMTsKKwl9CisgICAgfQorICBlbHNlCisgICAgbnJlZ3MgPSBidWZwLT5yZV9uc3ViICsgMTsKKyAgcG1hdGNoID0gcmVfbWFsbG9jIChyZWdtYXRjaF90LCBucmVncyk7CisgIGlmIChCRSAocG1hdGNoID09IE5VTEwsIDApKQorICAgIHsKKyAgICAgIHJ2YWwgPSAtMjsKKyAgICAgIGdvdG8gb3V0OworICAgIH0KKworICByZXN1bHQgPSByZV9zZWFyY2hfaW50ZXJuYWwgKGJ1ZnAsIHN0cmluZywgbGVuZ3RoLCBzdGFydCwgbGFzdF9zdGFydCwgc3RvcCwKKwkJCSAgICAgICBucmVncywgcG1hdGNoLCBlZmxhZ3MpOworCisgIHJ2YWwgPSAwOworCisgIC8qIEkgaG9wZSB3ZSBuZWVkbid0IGZpbGwgdGhlciByZWdzIHdpdGggLTEncyB3aGVuIG5vIG1hdGNoIHdhcyBmb3VuZC4gICovCisgIGlmIChyZXN1bHQgIT0gUkVHX05PRVJST1IpCisgICAgcnZhbCA9IC0xOworICBlbHNlIGlmIChyZWdzICE9IE5VTEwpCisgICAgeworICAgICAgLyogSWYgY2FsbGVyIHdhbnRzIHJlZ2lzdGVyIGNvbnRlbnRzIGRhdGEgYmFjaywgY29weSB0aGVtLiAgKi8KKyAgICAgIGJ1ZnAtPnJlZ3NfYWxsb2NhdGVkID0gcmVfY29weV9yZWdzIChyZWdzLCBwbWF0Y2gsIG5yZWdzLAorCQkJCQkgICBidWZwLT5yZWdzX2FsbG9jYXRlZCk7CisgICAgICBpZiAoQkUgKGJ1ZnAtPnJlZ3NfYWxsb2NhdGVkID09IFJFR1NfVU5BTExPQ0FURUQsIDApKQorCXJ2YWwgPSAtMjsKKyAgICB9CisKKyAgaWYgKEJFIChydmFsID09IDAsIDEpKQorICAgIHsKKyAgICAgIGlmIChyZXRfbGVuKQorCXsKKwkgIGFzc2VydCAocG1hdGNoWzBdLnJtX3NvID09IHN0YXJ0KTsKKwkgIHJ2YWwgPSBwbWF0Y2hbMF0ucm1fZW8gLSBzdGFydDsKKwl9CisgICAgICBlbHNlCisJcnZhbCA9IHBtYXRjaFswXS5ybV9zbzsKKyAgICB9CisgIHJlX2ZyZWUgKHBtYXRjaCk7Cisgb3V0OgorICBfX2xpYmNfbG9ja191bmxvY2sgKGRmYS0+bG9jayk7CisgIHJldHVybiBydmFsOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50CitpbnRlcm5hbF9mdW5jdGlvbgorcmVfY29weV9yZWdzIChzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpyZWdzLCByZWdtYXRjaF90ICpwbWF0Y2gsIElkeCBucmVncywKKwkgICAgICBpbnQgcmVnc19hbGxvY2F0ZWQpCit7CisgIGludCBydmFsID0gUkVHU19SRUFMTE9DQVRFOworICBJZHggaTsKKyAgSWR4IG5lZWRfcmVncyA9IG5yZWdzICsgMTsKKyAgLyogV2UgbmVlZCBvbmUgZXh0cmEgZWxlbWVudCBiZXlvbmQgYG51bV9yZWdzJyBmb3IgdGhlIGAtMScgbWFya2VyIEdOVSBjb2RlCisgICAgIHVzZXMuICAqLworCisgIC8qIEhhdmUgdGhlIHJlZ2lzdGVyIGRhdGEgYXJyYXlzIGJlZW4gYWxsb2NhdGVkPyAgKi8KKyAgaWYgKHJlZ3NfYWxsb2NhdGVkID09IFJFR1NfVU5BTExPQ0FURUQpCisgICAgeyAvKiBOby4gIFNvIGFsbG9jYXRlIHRoZW0gd2l0aCBtYWxsb2MuICAqLworICAgICAgcmVncy0+c3RhcnQgPSByZV9tYWxsb2MgKHJlZ29mZl90LCBuZWVkX3JlZ3MpOworICAgICAgaWYgKEJFIChyZWdzLT5zdGFydCA9PSBOVUxMLCAwKSkKKwlyZXR1cm4gUkVHU19VTkFMTE9DQVRFRDsKKyAgICAgIHJlZ3MtPmVuZCA9IHJlX21hbGxvYyAocmVnb2ZmX3QsIG5lZWRfcmVncyk7CisgICAgICBpZiAoQkUgKHJlZ3MtPmVuZCA9PSBOVUxMLCAwKSkKKwl7CisJICByZV9mcmVlIChyZWdzLT5zdGFydCk7CisJICByZXR1cm4gUkVHU19VTkFMTE9DQVRFRDsKKwl9CisgICAgICByZWdzLT5udW1fcmVncyA9IG5lZWRfcmVnczsKKyAgICB9CisgIGVsc2UgaWYgKHJlZ3NfYWxsb2NhdGVkID09IFJFR1NfUkVBTExPQ0FURSkKKyAgICB7IC8qIFllcy4gIElmIHdlIG5lZWQgbW9yZSBlbGVtZW50cyB0aGFuIHdlcmUgYWxyZWFkeQorCSBhbGxvY2F0ZWQsIHJlYWxsb2NhdGUgdGhlbS4gIElmIHdlIG5lZWQgZmV3ZXIsIGp1c3QKKwkgbGVhdmUgaXQgYWxvbmUuICAqLworICAgICAgaWYgKEJFIChuZWVkX3JlZ3MgPiByZWdzLT5udW1fcmVncywgMCkpCisJeworCSAgcmVnb2ZmX3QgKm5ld19zdGFydCA9IHJlX3JlYWxsb2MgKHJlZ3MtPnN0YXJ0LCByZWdvZmZfdCwgbmVlZF9yZWdzKTsKKwkgIHJlZ29mZl90ICpuZXdfZW5kOworCSAgaWYgKEJFIChuZXdfc3RhcnQgPT0gTlVMTCwgMCkpCisJICAgIHJldHVybiBSRUdTX1VOQUxMT0NBVEVEOworCSAgbmV3X2VuZCA9IHJlX3JlYWxsb2MgKHJlZ3MtPmVuZCwgcmVnb2ZmX3QsIG5lZWRfcmVncyk7CisJICBpZiAoQkUgKG5ld19lbmQgPT0gTlVMTCwgMCkpCisJICAgIHsKKwkgICAgICByZV9mcmVlIChuZXdfc3RhcnQpOworCSAgICAgIHJldHVybiBSRUdTX1VOQUxMT0NBVEVEOworCSAgICB9CisJICByZWdzLT5zdGFydCA9IG5ld19zdGFydDsKKwkgIHJlZ3MtPmVuZCA9IG5ld19lbmQ7CisJICByZWdzLT5udW1fcmVncyA9IG5lZWRfcmVnczsKKwl9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgYXNzZXJ0IChyZWdzX2FsbG9jYXRlZCA9PSBSRUdTX0ZJWEVEKTsKKyAgICAgIC8qIFRoaXMgZnVuY3Rpb24gbWF5IG5vdCBiZSBjYWxsZWQgd2l0aCBSRUdTX0ZJWEVEIGFuZCBucmVncyB0b28gYmlnLiAgKi8KKyAgICAgIGFzc2VydCAocmVncy0+bnVtX3JlZ3MgPj0gbnJlZ3MpOworICAgICAgcnZhbCA9IFJFR1NfRklYRUQ7CisgICAgfQorCisgIC8qIENvcHkgdGhlIHJlZ3MuICAqLworICBmb3IgKGkgPSAwOyBpIDwgbnJlZ3M7ICsraSkKKyAgICB7CisgICAgICByZWdzLT5zdGFydFtpXSA9IHBtYXRjaFtpXS5ybV9zbzsKKyAgICAgIHJlZ3MtPmVuZFtpXSA9IHBtYXRjaFtpXS5ybV9lbzsKKyAgICB9CisgIGZvciAoIDsgaSA8IHJlZ3MtPm51bV9yZWdzOyArK2kpCisgICAgcmVncy0+c3RhcnRbaV0gPSByZWdzLT5lbmRbaV0gPSAtMTsKKworICByZXR1cm4gcnZhbDsKK30KKworLyogU2V0IFJFR1MgdG8gaG9sZCBOVU1fUkVHUyByZWdpc3RlcnMsIHN0b3JpbmcgdGhlbSBpbiBTVEFSVFMgYW5kCisgICBFTkRTLiAgU3Vic2VxdWVudCBtYXRjaGVzIHVzaW5nIFBBVFRFUk5fQlVGRkVSIGFuZCBSRUdTIHdpbGwgdXNlCisgICB0aGlzIG1lbW9yeSBmb3IgcmVjb3JkaW5nIHJlZ2lzdGVyIGluZm9ybWF0aW9uLiAgU1RBUlRTIGFuZCBFTkRTCisgICBtdXN0IGJlIGFsbG9jYXRlZCB1c2luZyB0aGUgbWFsbG9jIGxpYnJhcnkgcm91dGluZSwgYW5kIG11c3QgZWFjaAorICAgYmUgYXQgbGVhc3QgTlVNX1JFR1MgKiBzaXplb2YgKHJlZ29mZl90KSBieXRlcyBsb25nLgorCisgICBJZiBOVU1fUkVHUyA9PSAwLCB0aGVuIHN1YnNlcXVlbnQgbWF0Y2hlcyBzaG91bGQgYWxsb2NhdGUgdGhlaXIgb3duCisgICByZWdpc3RlciBkYXRhLgorCisgICBVbmxlc3MgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQsIHRoZSBmaXJzdCBzZWFyY2ggb3IgbWF0Y2ggdXNpbmcKKyAgIFBBVFRFUk5fQlVGRkVSIHdpbGwgYWxsb2NhdGUgaXRzIG93biByZWdpc3RlciBkYXRhLCB3aXRob3V0CisgICBmcmVlaW5nIHRoZSBvbGQgZGF0YS4gICovCisKK3ZvaWQKK3JlX3NldF9yZWdpc3RlcnMgKGJ1ZnAsIHJlZ3MsIG51bV9yZWdzLCBzdGFydHMsIGVuZHMpCisgICAgc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwOworICAgIHN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3M7CisgICAgX19yZV9zaXplX3QgbnVtX3JlZ3M7CisgICAgcmVnb2ZmX3QgKnN0YXJ0cywgKmVuZHM7Cit7CisgIGlmIChudW1fcmVncykKKyAgICB7CisgICAgICBidWZwLT5yZWdzX2FsbG9jYXRlZCA9IFJFR1NfUkVBTExPQ0FURTsKKyAgICAgIHJlZ3MtPm51bV9yZWdzID0gbnVtX3JlZ3M7CisgICAgICByZWdzLT5zdGFydCA9IHN0YXJ0czsKKyAgICAgIHJlZ3MtPmVuZCA9IGVuZHM7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgYnVmcC0+cmVnc19hbGxvY2F0ZWQgPSBSRUdTX1VOQUxMT0NBVEVEOworICAgICAgcmVncy0+bnVtX3JlZ3MgPSAwOworICAgICAgcmVncy0+c3RhcnQgPSByZWdzLT5lbmQgPSBOVUxMOworICAgIH0KK30KKyNpZmRlZiBfTElCQword2Vha19hbGlhcyAoX19yZV9zZXRfcmVnaXN0ZXJzLCByZV9zZXRfcmVnaXN0ZXJzKQorI2VuZGlmCisMCisvKiBFbnRyeSBwb2ludHMgY29tcGF0aWJsZSB3aXRoIDQuMiBCU0QgcmVnZXggbGlicmFyeS4gIFdlIGRvbid0IGRlZmluZQorICAgdGhlbSB1bmxlc3Mgc3BlY2lmaWNhbGx5IHJlcXVlc3RlZC4gICovCisKKyNpZiBkZWZpbmVkIF9SRUdFWF9SRV9DT01QIHx8IGRlZmluZWQgX0xJQkMKK2ludAorIyBpZmRlZiBfTElCQword2Vha19mdW5jdGlvbgorIyBlbmRpZgorcmVfZXhlYyAocykKKyAgICAgY29uc3QgY2hhciAqczsKK3sKKyAgcmV0dXJuIDAgPT0gcmVnZXhlYyAoJnJlX2NvbXBfYnVmLCBzLCAwLCBOVUxMLCAwKTsKK30KKyNlbmRpZiAvKiBfUkVHRVhfUkVfQ09NUCAqLworDAorLyogSW50ZXJuYWwgZW50cnkgcG9pbnQuICAqLworCisvKiBTZWFyY2hlcyBmb3IgYSBjb21waWxlZCBwYXR0ZXJuIFBSRUcgaW4gdGhlIHN0cmluZyBTVFJJTkcsIHdob3NlCisgICBsZW5ndGggaXMgTEVOR1RILiAgTk1BVENILCBQTUFUQ0gsIGFuZCBFRkxBR1MgaGF2ZSB0aGUgc2FtZQorICAgbWVhbmluZyBhcyB3aXRoIHJlZ2V4ZWMuICBMQVNUX1NUQVJUIGlzIFNUQVJUICsgUkFOR0UsIHdoZXJlCisgICBTVEFSVCBhbmQgUkFOR0UgaGF2ZSB0aGUgc2FtZSBtZWFuaW5nIGFzIHdpdGggcmVfc2VhcmNoLgorICAgUmV0dXJuIFJFR19OT0VSUk9SIGlmIHdlIGZpbmQgYSBtYXRjaCwgYW5kIFJFR19OT01BVENIIGlmIG5vdCwKKyAgIG90aGVyd2lzZSByZXR1cm4gdGhlIGVycm9yIGNvZGUuCisgICBOb3RlOiBXZSBhc3N1bWUgZnJvbnQgZW5kIGZ1bmN0aW9ucyBhbHJlYWR5IGNoZWNrIHJhbmdlcy4KKyAgICgwIDw9IExBU1RfU1RBUlQgJiYgTEFTVF9TVEFSVCA8PSBMRU5HVEgpICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK3JlX3NlYXJjaF9pbnRlcm5hbCAoY29uc3QgcmVnZXhfdCAqcHJlZywKKwkJICAgIGNvbnN0IGNoYXIgKnN0cmluZywgSWR4IGxlbmd0aCwKKwkJICAgIElkeCBzdGFydCwgSWR4IGxhc3Rfc3RhcnQsIElkeCBzdG9wLAorCQkgICAgc2l6ZV90IG5tYXRjaCwgcmVnbWF0Y2hfdCBwbWF0Y2hbXSwKKwkJICAgIGludCBlZmxhZ3MpCit7CisgIHJlZ19lcnJjb2RlX3QgZXJyOworICBjb25zdCByZV9kZmFfdCAqZGZhID0gKGNvbnN0IHJlX2RmYV90ICopIHByZWctPmJ1ZmZlcjsKKyAgSWR4IGxlZnRfbGltLCByaWdodF9saW07CisgIGludCBpbmNyOworICBib29sIGZsX2xvbmdlc3RfbWF0Y2g7CisgIGludCBtYXRjaF9raW5kOworICBJZHggbWF0Y2hfZmlyc3Q7CisgIElkeCBtYXRjaF9sYXN0ID0gUkVHX01JU1NJTkc7CisgIElkeCBleHRyYV9ubWF0Y2g7CisgIGJvb2wgc2I7CisgIGludCBjaDsKKyNpZiBkZWZpbmVkIF9MSUJDIHx8IChkZWZpbmVkIF9fU1REQ19WRVJTSU9OX18gJiYgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMKQorICByZV9tYXRjaF9jb250ZXh0X3QgbWN0eCA9IHsgLmRmYSA9IGRmYSB9OworI2Vsc2UKKyAgcmVfbWF0Y2hfY29udGV4dF90IG1jdHg7CisjZW5kaWYKKyAgY2hhciAqZmFzdG1hcCA9ICgocHJlZy0+ZmFzdG1hcCAhPSBOVUxMICYmIHByZWctPmZhc3RtYXBfYWNjdXJhdGUKKwkJICAgICYmIHN0YXJ0ICE9IGxhc3Rfc3RhcnQgJiYgIXByZWctPmNhbl9iZV9udWxsKQorCQkgICA/IHByZWctPmZhc3RtYXAgOiBOVUxMKTsKKyAgUkVfVFJBTlNMQVRFX1RZUEUgdCA9IHByZWctPnRyYW5zbGF0ZTsKKworI2lmICEoZGVmaW5lZCBfTElCQyB8fCAoZGVmaW5lZCBfX1NURENfVkVSU0lPTl9fICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTCkpCisgIG1lbXNldCAoJm1jdHgsICdcMCcsIHNpemVvZiAocmVfbWF0Y2hfY29udGV4dF90KSk7CisgIG1jdHguZGZhID0gZGZhOworI2VuZGlmCisKKyAgZXh0cmFfbm1hdGNoID0gKG5tYXRjaCA+IHByZWctPnJlX25zdWIpID8gbm1hdGNoIC0gKHByZWctPnJlX25zdWIgKyAxKSA6IDA7CisgIG5tYXRjaCAtPSBleHRyYV9ubWF0Y2g7CisKKyAgLyogQ2hlY2sgaWYgdGhlIERGQSBoYXZlbid0IGJlZW4gY29tcGlsZWQuICAqLworICBpZiAoQkUgKHByZWctPnVzZWQgPT0gMCB8fCBkZmEtPmluaXRfc3RhdGUgPT0gTlVMTAorCSAgfHwgZGZhLT5pbml0X3N0YXRlX3dvcmQgPT0gTlVMTCB8fCBkZmEtPmluaXRfc3RhdGVfbmwgPT0gTlVMTAorCSAgfHwgZGZhLT5pbml0X3N0YXRlX2JlZ2J1ZiA9PSBOVUxMLCAwKSkKKyAgICByZXR1cm4gUkVHX05PTUFUQ0g7CisKKyNpZmRlZiBERUJVRworICAvKiBXZSBhc3N1bWUgZnJvbnQtZW5kIGZ1bmN0aW9ucyBhbHJlYWR5IGNoZWNrIHRoZW0uICAqLworICBhc3NlcnQgKDAgPD0gbGFzdF9zdGFydCAmJiBsYXN0X3N0YXJ0IDw9IGxlbmd0aCk7CisjZW5kaWYKKworICAvKiBJZiBpbml0aWFsIHN0YXRlcyB3aXRoIG5vbi1iZWdidWYgY29udGV4dHMgaGF2ZSBubyBlbGVtZW50cywKKyAgICAgdGhlIHJlZ2V4IG11c3QgYmUgYW5jaG9yZWQuICBJZiBwcmVnLT5uZXdsaW5lX2FuY2hvciBpcyBzZXQsCisgICAgIHdlJ2xsIG5ldmVyIHVzZSBpbml0X3N0YXRlX25sLCBzbyBkbyBub3QgY2hlY2sgaXQuICAqLworICBpZiAoZGZhLT5pbml0X3N0YXRlLT5ub2Rlcy5uZWxlbSA9PSAwCisgICAgICAmJiBkZmEtPmluaXRfc3RhdGVfd29yZC0+bm9kZXMubmVsZW0gPT0gMAorICAgICAgJiYgKGRmYS0+aW5pdF9zdGF0ZV9ubC0+bm9kZXMubmVsZW0gPT0gMAorCSAgfHwgIXByZWctPm5ld2xpbmVfYW5jaG9yKSkKKyAgICB7CisgICAgICBpZiAoc3RhcnQgIT0gMCAmJiBsYXN0X3N0YXJ0ICE9IDApCisgICAgICAgIHJldHVybiBSRUdfTk9NQVRDSDsKKyAgICAgIHN0YXJ0ID0gbGFzdF9zdGFydCA9IDA7CisgICAgfQorCisgIC8qIFdlIG11c3QgY2hlY2sgdGhlIGxvbmdlc3QgbWF0Y2hpbmcsIGlmIG5tYXRjaCA+IDAuICAqLworICBmbF9sb25nZXN0X21hdGNoID0gKG5tYXRjaCAhPSAwIHx8IGRmYS0+bmJhY2tyZWYpOworCisgIGVyciA9IHJlX3N0cmluZ19hbGxvY2F0ZSAoJm1jdHguaW5wdXQsIHN0cmluZywgbGVuZ3RoLCBkZmEtPm5vZGVzX2xlbiArIDEsCisJCQkgICAgcHJlZy0+dHJhbnNsYXRlLCBwcmVnLT5zeW50YXggJiBSRV9JQ0FTRSwgZGZhKTsKKyAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorICAgIGdvdG8gZnJlZV9yZXR1cm47CisgIG1jdHguaW5wdXQuc3RvcCA9IHN0b3A7CisgIG1jdHguaW5wdXQucmF3X3N0b3AgPSBzdG9wOworICBtY3R4LmlucHV0Lm5ld2xpbmVfYW5jaG9yID0gcHJlZy0+bmV3bGluZV9hbmNob3I7CisKKyAgZXJyID0gbWF0Y2hfY3R4X2luaXQgKCZtY3R4LCBlZmxhZ3MsIGRmYS0+bmJhY2tyZWYgKiAyKTsKKyAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorICAgIGdvdG8gZnJlZV9yZXR1cm47CisKKyAgLyogV2Ugd2lsbCBsb2cgYWxsIHRoZSBERkEgc3RhdGVzIHRocm91Z2ggd2hpY2ggdGhlIGRmYSBwYXNzLAorICAgICBpZiBubWF0Y2ggPiAxLCBvciB0aGlzIGRmYSBoYXMgIm11bHRpYnl0ZSBub2RlIiwgd2hpY2ggaXMgYQorICAgICBiYWNrLXJlZmVyZW5jZSBvciBhIG5vZGUgd2hpY2ggY2FuIGFjY2VwdCBtdWx0aWJ5dGUgY2hhcmFjdGVyIG9yCisgICAgIG11bHRpIGNoYXJhY3RlciBjb2xsYXRpbmcgZWxlbWVudC4gICovCisgIGlmIChubWF0Y2ggPiAxIHx8IGRmYS0+aGFzX21iX25vZGUpCisgICAgeworICAgICAgLyogQXZvaWQgb3ZlcmZsb3cuICAqLworICAgICAgaWYgKEJFIChTSVpFX01BWCAvIHNpemVvZiAocmVfZGZhc3RhdGVfdCAqKSA8PSBtY3R4LmlucHV0LmJ1ZnNfbGVuLCAwKSkKKwl7CisJICBlcnIgPSBSRUdfRVNQQUNFOworCSAgZ290byBmcmVlX3JldHVybjsKKwl9CisKKyAgICAgIG1jdHguc3RhdGVfbG9nID0gcmVfbWFsbG9jIChyZV9kZmFzdGF0ZV90ICosIG1jdHguaW5wdXQuYnVmc19sZW4gKyAxKTsKKyAgICAgIGlmIChCRSAobWN0eC5zdGF0ZV9sb2cgPT0gTlVMTCwgMCkpCisJeworCSAgZXJyID0gUkVHX0VTUEFDRTsKKwkgIGdvdG8gZnJlZV9yZXR1cm47CisJfQorICAgIH0KKyAgZWxzZQorICAgIG1jdHguc3RhdGVfbG9nID0gTlVMTDsKKworICBtYXRjaF9maXJzdCA9IHN0YXJ0OworICBtY3R4LmlucHV0LnRpcF9jb250ZXh0ID0gKGVmbGFncyAmIFJFR19OT1RCT0wpID8gQ09OVEVYVF9CRUdCVUYKKwkJCSAgIDogQ09OVEVYVF9ORVdMSU5FIHwgQ09OVEVYVF9CRUdCVUY7CisKKyAgLyogQ2hlY2sgaW5jcmVtZW50YWxseSB3aGV0aGVyIG9mIG5vdCB0aGUgaW5wdXQgc3RyaW5nIG1hdGNoLiAgKi8KKyAgaW5jciA9IChsYXN0X3N0YXJ0IDwgc3RhcnQpID8gLTEgOiAxOworICBsZWZ0X2xpbSA9IChsYXN0X3N0YXJ0IDwgc3RhcnQpID8gbGFzdF9zdGFydCA6IHN0YXJ0OworICByaWdodF9saW0gPSAobGFzdF9zdGFydCA8IHN0YXJ0KSA/IHN0YXJ0IDogbGFzdF9zdGFydDsKKyAgc2IgPSBkZmEtPm1iX2N1cl9tYXggPT0gMTsKKyAgbWF0Y2hfa2luZCA9CisgICAgKGZhc3RtYXAKKyAgICAgPyAoKHNiIHx8ICEocHJlZy0+c3ludGF4ICYgUkVfSUNBU0UgfHwgdCkgPyA0IDogMCkKKwl8IChzdGFydCA8PSBsYXN0X3N0YXJ0ID8gMiA6IDApCisJfCAodCAhPSBOVUxMID8gMSA6IDApKQorICAgICA6IDgpOworCisgIGZvciAoOzsgbWF0Y2hfZmlyc3QgKz0gaW5jcikKKyAgICB7CisgICAgICBlcnIgPSBSRUdfTk9NQVRDSDsKKyAgICAgIGlmIChtYXRjaF9maXJzdCA8IGxlZnRfbGltIHx8IHJpZ2h0X2xpbSA8IG1hdGNoX2ZpcnN0KQorCWdvdG8gZnJlZV9yZXR1cm47CisKKyAgICAgIC8qIEFkdmFuY2UgYXMgcmFwaWRseSBhcyBwb3NzaWJsZSB0aHJvdWdoIHRoZSBzdHJpbmcsIHVudGlsIHdlCisJIGZpbmQgYSBwbGF1c2libGUgcGxhY2UgdG8gc3RhcnQgbWF0Y2hpbmcuICBUaGlzIG1heSBiZSBkb25lCisJIHdpdGggdmFyeWluZyBlZmZpY2llbmN5LCBzbyB0aGVyZSBhcmUgdmFyaW91cyBwb3NzaWJpbGl0aWVzOgorCSBvbmx5IHRoZSBtb3N0IGNvbW1vbiBvZiB0aGVtIGFyZSBzcGVjaWFsaXplZCwgaW4gb3JkZXIgdG8KKwkgc2F2ZSBvbiBjb2RlIHNpemUuICBXZSB1c2UgYSBzd2l0Y2ggc3RhdGVtZW50IGZvciBzcGVlZC4gICovCisgICAgICBzd2l0Y2ggKG1hdGNoX2tpbmQpCisJeworCWNhc2UgODoKKwkgIC8qIE5vIGZhc3RtYXAuICAqLworCSAgYnJlYWs7CisKKwljYXNlIDc6CisJICAvKiBGYXN0bWFwIHdpdGggc2luZ2xlLWJ5dGUgdHJhbnNsYXRpb24sIG1hdGNoIGZvcndhcmQuICAqLworCSAgd2hpbGUgKEJFIChtYXRjaF9maXJzdCA8IHJpZ2h0X2xpbSwgMSkKKwkJICYmICFmYXN0bWFwW3RbKHVuc2lnbmVkIGNoYXIpIHN0cmluZ1ttYXRjaF9maXJzdF1dXSkKKwkgICAgKyttYXRjaF9maXJzdDsKKwkgIGdvdG8gZm9yd2FyZF9tYXRjaF9mb3VuZF9zdGFydF9vcl9yZWFjaGVkX2VuZDsKKworCWNhc2UgNjoKKwkgIC8qIEZhc3RtYXAgd2l0aG91dCB0cmFuc2xhdGlvbiwgbWF0Y2ggZm9yd2FyZC4gICovCisJICB3aGlsZSAoQkUgKG1hdGNoX2ZpcnN0IDwgcmlnaHRfbGltLCAxKQorCQkgJiYgIWZhc3RtYXBbKHVuc2lnbmVkIGNoYXIpIHN0cmluZ1ttYXRjaF9maXJzdF1dKQorCSAgICArK21hdGNoX2ZpcnN0OworCisJZm9yd2FyZF9tYXRjaF9mb3VuZF9zdGFydF9vcl9yZWFjaGVkX2VuZDoKKwkgIGlmIChCRSAobWF0Y2hfZmlyc3QgPT0gcmlnaHRfbGltLCAwKSkKKwkgICAgeworCSAgICAgIGNoID0gbWF0Y2hfZmlyc3QgPj0gbGVuZ3RoCisJCSAgICAgICA/IDAgOiAodW5zaWduZWQgY2hhcikgc3RyaW5nW21hdGNoX2ZpcnN0XTsKKwkgICAgICBpZiAoIWZhc3RtYXBbdCA/IHRbY2hdIDogY2hdKQorCQlnb3RvIGZyZWVfcmV0dXJuOworCSAgICB9CisJICBicmVhazsKKworCWNhc2UgNDoKKwljYXNlIDU6CisJICAvKiBGYXN0bWFwIHdpdGhvdXQgbXVsdGktYnl0ZSB0cmFuc2xhdGlvbiwgbWF0Y2ggYmFja3dhcmRzLiAgKi8KKwkgIHdoaWxlIChtYXRjaF9maXJzdCA+PSBsZWZ0X2xpbSkKKwkgICAgeworCSAgICAgIGNoID0gbWF0Y2hfZmlyc3QgPj0gbGVuZ3RoCisJCSAgICAgICA/IDAgOiAodW5zaWduZWQgY2hhcikgc3RyaW5nW21hdGNoX2ZpcnN0XTsKKwkgICAgICBpZiAoZmFzdG1hcFt0ID8gdFtjaF0gOiBjaF0pCisJCWJyZWFrOworCSAgICAgIC0tbWF0Y2hfZmlyc3Q7CisJICAgIH0KKwkgIGlmIChtYXRjaF9maXJzdCA8IGxlZnRfbGltKQorCSAgICBnb3RvIGZyZWVfcmV0dXJuOworCSAgYnJlYWs7CisKKwlkZWZhdWx0OgorCSAgLyogSW4gdGhpcyBjYXNlLCB3ZSBjYW4ndCBkZXRlcm1pbmUgZWFzaWx5IHRoZSBjdXJyZW50IGJ5dGUsCisJICAgICBzaW5jZSBpdCBtaWdodCBiZSBhIGNvbXBvbmVudCBieXRlIG9mIGEgbXVsdGlieXRlCisJICAgICBjaGFyYWN0ZXIuICBUaGVuIHdlIHVzZSB0aGUgY29uc3RydWN0ZWQgYnVmZmVyIGluc3RlYWQuICAqLworCSAgZm9yICg7OykKKwkgICAgeworCSAgICAgIC8qIElmIE1BVENIX0ZJUlNUIGlzIG91dCBvZiB0aGUgdmFsaWQgcmFuZ2UsIHJlY29uc3RydWN0IHRoZQorCQkgYnVmZmVycy4gICovCisJICAgICAgX19yZV9zaXplX3Qgb2Zmc2V0ID0gbWF0Y2hfZmlyc3QgLSBtY3R4LmlucHV0LnJhd19tYnNfaWR4OworCSAgICAgIGlmIChCRSAob2Zmc2V0ID49IChfX3JlX3NpemVfdCkgbWN0eC5pbnB1dC52YWxpZF9yYXdfbGVuLCAwKSkKKwkJeworCQkgIGVyciA9IHJlX3N0cmluZ19yZWNvbnN0cnVjdCAoJm1jdHguaW5wdXQsIG1hdGNoX2ZpcnN0LAorCQkJCQkgICAgICAgZWZsYWdzKTsKKwkJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJCSAgICBnb3RvIGZyZWVfcmV0dXJuOworCisJCSAgb2Zmc2V0ID0gbWF0Y2hfZmlyc3QgLSBtY3R4LmlucHV0LnJhd19tYnNfaWR4OworCQl9CisJICAgICAgLyogSWYgTUFUQ0hfRklSU1QgaXMgb3V0IG9mIHRoZSBidWZmZXIsIGxlYXZlIGl0IGFzICdcMCcuCisJCSBOb3RlIHRoYXQgTUFUQ0hfRklSU1QgbXVzdCBub3QgYmUgc21hbGxlciB0aGFuIDAuICAqLworCSAgICAgIGNoID0gKG1hdGNoX2ZpcnN0ID49IGxlbmd0aAorCQkgICAgPyAwIDogcmVfc3RyaW5nX2J5dGVfYXQgKCZtY3R4LmlucHV0LCBvZmZzZXQpKTsKKwkgICAgICBpZiAoZmFzdG1hcFtjaF0pCisJCWJyZWFrOworCSAgICAgIG1hdGNoX2ZpcnN0ICs9IGluY3I7CisJICAgICAgaWYgKG1hdGNoX2ZpcnN0IDwgbGVmdF9saW0gfHwgbWF0Y2hfZmlyc3QgPiByaWdodF9saW0pCisJICAgICAgICB7CisJICAgICAgICAgIGVyciA9IFJFR19OT01BVENIOworCSAgICAgICAgICBnb3RvIGZyZWVfcmV0dXJuOworCSAgICAgICAgfQorCSAgICB9CisJICBicmVhazsKKwl9CisKKyAgICAgIC8qIFJlY29uc3RydWN0IHRoZSBidWZmZXJzIHNvIHRoYXQgdGhlIG1hdGNoZXIgY2FuIGFzc3VtZSB0aGF0CisJIHRoZSBtYXRjaGluZyBzdGFydHMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBidWZmZXIuICAqLworICAgICAgZXJyID0gcmVfc3RyaW5nX3JlY29uc3RydWN0ICgmbWN0eC5pbnB1dCwgbWF0Y2hfZmlyc3QsIGVmbGFncyk7CisgICAgICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJZ290byBmcmVlX3JldHVybjsKKworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgICAgIC8qIERvbid0IGNvbnNpZGVyIHRoaXMgY2hhciBhcyBhIHBvc3NpYmxlIG1hdGNoIHN0YXJ0IGlmIGl0IHBhcnQsCisJeWV0IGlzbid0IHRoZSBoZWFkLCBvZiBhIG11bHRpYnl0ZSBjaGFyYWN0ZXIuICAqLworICAgICAgaWYgKCFzYiAmJiAhcmVfc3RyaW5nX2ZpcnN0X2J5dGUgKCZtY3R4LmlucHV0LCAwKSkKKwljb250aW51ZTsKKyNlbmRpZgorCisgICAgICAvKiBJdCBzZWVtcyB0byBiZSBhcHByb3ByaWF0ZSBvbmUsIHRoZW4gdXNlIHRoZSBtYXRjaGVyLiAgKi8KKyAgICAgIC8qIFdlIGFzc3VtZSB0aGF0IHRoZSBtYXRjaGluZyBzdGFydHMgZnJvbSAwLiAgKi8KKyAgICAgIG1jdHguc3RhdGVfbG9nX3RvcCA9IG1jdHgubmJrcmVmX2VudHMgPSBtY3R4Lm1heF9tYl9lbGVtX2xlbiA9IDA7CisgICAgICBtYXRjaF9sYXN0ID0gY2hlY2tfbWF0Y2hpbmcgKCZtY3R4LCBmbF9sb25nZXN0X21hdGNoLAorCQkJCSAgIHN0YXJ0IDw9IGxhc3Rfc3RhcnQgPyAmbWF0Y2hfZmlyc3QgOiBOVUxMKTsKKyAgICAgIGlmIChtYXRjaF9sYXN0ICE9IFJFR19NSVNTSU5HKQorCXsKKwkgIGlmIChCRSAobWF0Y2hfbGFzdCA9PSBSRUdfRVJST1IsIDApKQorCSAgICB7CisJICAgICAgZXJyID0gUkVHX0VTUEFDRTsKKwkgICAgICBnb3RvIGZyZWVfcmV0dXJuOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBtY3R4Lm1hdGNoX2xhc3QgPSBtYXRjaF9sYXN0OworCSAgICAgIGlmICgoIXByZWctPm5vX3N1YiAmJiBubWF0Y2ggPiAxKSB8fCBkZmEtPm5iYWNrcmVmKQorCQl7CisJCSAgcmVfZGZhc3RhdGVfdCAqcHN0YXRlID0gbWN0eC5zdGF0ZV9sb2dbbWF0Y2hfbGFzdF07CisJCSAgbWN0eC5sYXN0X25vZGUgPSBjaGVja19oYWx0X3N0YXRlX2NvbnRleHQgKCZtY3R4LCBwc3RhdGUsCisJCQkJCQkJICAgICBtYXRjaF9sYXN0KTsKKwkJfQorCSAgICAgIGlmICgoIXByZWctPm5vX3N1YiAmJiBubWF0Y2ggPiAxICYmIGRmYS0+aGFzX3BsdXJhbF9tYXRjaCkKKwkJICB8fCBkZmEtPm5iYWNrcmVmKQorCQl7CisJCSAgZXJyID0gcHJ1bmVfaW1wb3NzaWJsZV9ub2RlcyAoJm1jdHgpOworCQkgIGlmIChlcnIgPT0gUkVHX05PRVJST1IpCisJCSAgICBicmVhazsKKwkJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9NQVRDSCwgMCkpCisJCSAgICBnb3RvIGZyZWVfcmV0dXJuOworCQkgIG1hdGNoX2xhc3QgPSBSRUdfTUlTU0lORzsKKwkJfQorCSAgICAgIGVsc2UKKwkJYnJlYWs7IC8qIFdlIGZvdW5kIGEgbWF0Y2guICAqLworCSAgICB9CisJfQorCisgICAgICBtYXRjaF9jdHhfY2xlYW4gKCZtY3R4KTsKKyAgICB9CisKKyNpZmRlZiBERUJVRworICBhc3NlcnQgKG1hdGNoX2xhc3QgIT0gUkVHX01JU1NJTkcpOworICBhc3NlcnQgKGVyciA9PSBSRUdfTk9FUlJPUik7CisjZW5kaWYKKworICAvKiBTZXQgcG1hdGNoW10gaWYgd2UgbmVlZC4gICovCisgIGlmIChubWF0Y2ggPiAwKQorICAgIHsKKyAgICAgIElkeCByZWdfaWR4OworCisgICAgICAvKiBJbml0aWFsaXplIHJlZ2lzdGVycy4gICovCisgICAgICBmb3IgKHJlZ19pZHggPSAxOyByZWdfaWR4IDwgbm1hdGNoOyArK3JlZ19pZHgpCisJcG1hdGNoW3JlZ19pZHhdLnJtX3NvID0gcG1hdGNoW3JlZ19pZHhdLnJtX2VvID0gLTE7CisKKyAgICAgIC8qIFNldCB0aGUgcG9pbnRzIHdoZXJlIG1hdGNoaW5nIHN0YXJ0L2VuZC4gICovCisgICAgICBwbWF0Y2hbMF0ucm1fc28gPSAwOworICAgICAgcG1hdGNoWzBdLnJtX2VvID0gbWN0eC5tYXRjaF9sYXN0OworICAgICAgLyogRklYTUU6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIGZhaWwgaWYgbWN0eC5tYXRjaF9sYXN0IGV4Y2VlZHMKKwkgdGhlIG1heGltdW0gcG9zc2libGUgcmVnb2ZmX3QgdmFsdWUuICBXZSBuZWVkIGEgbmV3IGVycm9yCisJIGNvZGUgUkVHX09WRVJGTE9XLiAgKi8KKworICAgICAgaWYgKCFwcmVnLT5ub19zdWIgJiYgbm1hdGNoID4gMSkKKwl7CisJICBlcnIgPSBzZXRfcmVncyAocHJlZywgJm1jdHgsIG5tYXRjaCwgcG1hdGNoLAorCQkJICBkZmEtPmhhc19wbHVyYWxfbWF0Y2ggJiYgZGZhLT5uYmFja3JlZiA+IDApOworCSAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCSAgICBnb3RvIGZyZWVfcmV0dXJuOworCX0KKworICAgICAgLyogQXQgbGFzdCwgYWRkIHRoZSBvZmZzZXQgdG8gdGhlIGVhY2ggcmVnaXN0ZXJzLCBzaW5jZSB3ZSBzbGlkZWQKKwkgdGhlIGJ1ZmZlcnMgc28gdGhhdCB3ZSBjb3VsZCBhc3N1bWUgdGhhdCB0aGUgbWF0Y2hpbmcgc3RhcnRzCisJIGZyb20gMC4gICovCisgICAgICBmb3IgKHJlZ19pZHggPSAwOyByZWdfaWR4IDwgbm1hdGNoOyArK3JlZ19pZHgpCisJaWYgKHBtYXRjaFtyZWdfaWR4XS5ybV9zbyAhPSAtMSkKKwkgIHsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorCSAgICBpZiAoQkUgKG1jdHguaW5wdXQub2Zmc2V0c19uZWVkZWQgIT0gMCwgMCkpCisJICAgICAgeworCQlwbWF0Y2hbcmVnX2lkeF0ucm1fc28gPQorCQkgIChwbWF0Y2hbcmVnX2lkeF0ucm1fc28gPT0gbWN0eC5pbnB1dC52YWxpZF9sZW4KKwkJICAgPyBtY3R4LmlucHV0LnZhbGlkX3Jhd19sZW4KKwkJICAgOiBtY3R4LmlucHV0Lm9mZnNldHNbcG1hdGNoW3JlZ19pZHhdLnJtX3NvXSk7CisJCXBtYXRjaFtyZWdfaWR4XS5ybV9lbyA9CisJCSAgKHBtYXRjaFtyZWdfaWR4XS5ybV9lbyA9PSBtY3R4LmlucHV0LnZhbGlkX2xlbgorCQkgICA/IG1jdHguaW5wdXQudmFsaWRfcmF3X2xlbgorCQkgICA6IG1jdHguaW5wdXQub2Zmc2V0c1twbWF0Y2hbcmVnX2lkeF0ucm1fZW9dKTsKKwkgICAgICB9CisjZWxzZQorCSAgICBhc3NlcnQgKG1jdHguaW5wdXQub2Zmc2V0c19uZWVkZWQgPT0gMCk7CisjZW5kaWYKKwkgICAgcG1hdGNoW3JlZ19pZHhdLnJtX3NvICs9IG1hdGNoX2ZpcnN0OworCSAgICBwbWF0Y2hbcmVnX2lkeF0ucm1fZW8gKz0gbWF0Y2hfZmlyc3Q7CisJICB9CisgICAgICBmb3IgKHJlZ19pZHggPSAwOyByZWdfaWR4IDwgZXh0cmFfbm1hdGNoOyArK3JlZ19pZHgpCisJeworCSAgcG1hdGNoW25tYXRjaCArIHJlZ19pZHhdLnJtX3NvID0gLTE7CisJICBwbWF0Y2hbbm1hdGNoICsgcmVnX2lkeF0ucm1fZW8gPSAtMTsKKwl9CisKKyAgICAgIGlmIChkZmEtPnN1YmV4cF9tYXApCisgICAgICAgIGZvciAocmVnX2lkeCA9IDA7IHJlZ19pZHggKyAxIDwgbm1hdGNoOyByZWdfaWR4KyspCisgICAgICAgICAgaWYgKGRmYS0+c3ViZXhwX21hcFtyZWdfaWR4XSAhPSByZWdfaWR4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBwbWF0Y2hbcmVnX2lkeCArIDFdLnJtX3NvCisgICAgICAgICAgICAgICAgPSBwbWF0Y2hbZGZhLT5zdWJleHBfbWFwW3JlZ19pZHhdICsgMV0ucm1fc287CisgICAgICAgICAgICAgIHBtYXRjaFtyZWdfaWR4ICsgMV0ucm1fZW8KKyAgICAgICAgICAgICAgICA9IHBtYXRjaFtkZmEtPnN1YmV4cF9tYXBbcmVnX2lkeF0gKyAxXS5ybV9lbzsKKyAgICAgICAgICAgIH0KKyAgICB9CisKKyBmcmVlX3JldHVybjoKKyAgcmVfZnJlZSAobWN0eC5zdGF0ZV9sb2cpOworICBpZiAoZGZhLT5uYmFja3JlZikKKyAgICBtYXRjaF9jdHhfZnJlZSAoJm1jdHgpOworICByZV9zdHJpbmdfZGVzdHJ1Y3QgKCZtY3R4LmlucHV0KTsKKyAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCitwcnVuZV9pbXBvc3NpYmxlX25vZGVzIChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgpCit7CisgIGNvbnN0IHJlX2RmYV90ICpjb25zdCBkZmEgPSBtY3R4LT5kZmE7CisgIElkeCBoYWx0X25vZGUsIG1hdGNoX2xhc3Q7CisgIHJlZ19lcnJjb2RlX3QgcmV0OworICByZV9kZmFzdGF0ZV90ICoqc2lmdGVkX3N0YXRlczsKKyAgcmVfZGZhc3RhdGVfdCAqKmxpbV9zdGF0ZXMgPSBOVUxMOworICByZV9zaWZ0X2NvbnRleHRfdCBzY3R4OworI2lmZGVmIERFQlVHCisgIGFzc2VydCAobWN0eC0+c3RhdGVfbG9nICE9IE5VTEwpOworI2VuZGlmCisgIG1hdGNoX2xhc3QgPSBtY3R4LT5tYXRjaF9sYXN0OworICBoYWx0X25vZGUgPSBtY3R4LT5sYXN0X25vZGU7CisKKyAgLyogQXZvaWQgb3ZlcmZsb3cuICAqLworICBpZiAoQkUgKFNJWkVfTUFYIC8gc2l6ZW9mIChyZV9kZmFzdGF0ZV90ICopIDw9IG1hdGNoX2xhc3QsIDApKQorICAgIHJldHVybiBSRUdfRVNQQUNFOworCisgIHNpZnRlZF9zdGF0ZXMgPSByZV9tYWxsb2MgKHJlX2RmYXN0YXRlX3QgKiwgbWF0Y2hfbGFzdCArIDEpOworICBpZiAoQkUgKHNpZnRlZF9zdGF0ZXMgPT0gTlVMTCwgMCkpCisgICAgeworICAgICAgcmV0ID0gUkVHX0VTUEFDRTsKKyAgICAgIGdvdG8gZnJlZV9yZXR1cm47CisgICAgfQorICBpZiAoZGZhLT5uYmFja3JlZikKKyAgICB7CisgICAgICBsaW1fc3RhdGVzID0gcmVfbWFsbG9jIChyZV9kZmFzdGF0ZV90ICosIG1hdGNoX2xhc3QgKyAxKTsKKyAgICAgIGlmIChCRSAobGltX3N0YXRlcyA9PSBOVUxMLCAwKSkKKwl7CisJICByZXQgPSBSRUdfRVNQQUNFOworCSAgZ290byBmcmVlX3JldHVybjsKKwl9CisgICAgICB3aGlsZSAoMSkKKwl7CisJICBtZW1zZXQgKGxpbV9zdGF0ZXMsICdcMCcsCisJCSAgc2l6ZW9mIChyZV9kZmFzdGF0ZV90ICopICogKG1hdGNoX2xhc3QgKyAxKSk7CisJICBzaWZ0X2N0eF9pbml0ICgmc2N0eCwgc2lmdGVkX3N0YXRlcywgbGltX3N0YXRlcywgaGFsdF9ub2RlLAorCQkJIG1hdGNoX2xhc3QpOworCSAgcmV0ID0gc2lmdF9zdGF0ZXNfYmFja3dhcmQgKG1jdHgsICZzY3R4KTsKKwkgIHJlX25vZGVfc2V0X2ZyZWUgKCZzY3R4LmxpbWl0cyk7CisJICBpZiAoQkUgKHJldCAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgICAgZ290byBmcmVlX3JldHVybjsKKwkgIGlmIChzaWZ0ZWRfc3RhdGVzWzBdICE9IE5VTEwgfHwgbGltX3N0YXRlc1swXSAhPSBOVUxMKQorCSAgICBicmVhazsKKwkgIGRvCisJICAgIHsKKwkgICAgICAtLW1hdGNoX2xhc3Q7CisJICAgICAgaWYgKCEgUkVHX1ZBTElEX0lOREVYIChtYXRjaF9sYXN0KSkKKwkJeworCQkgIHJldCA9IFJFR19OT01BVENIOworCQkgIGdvdG8gZnJlZV9yZXR1cm47CisJCX0KKwkgICAgfSB3aGlsZSAobWN0eC0+c3RhdGVfbG9nW21hdGNoX2xhc3RdID09IE5VTEwKKwkJICAgICB8fCAhbWN0eC0+c3RhdGVfbG9nW21hdGNoX2xhc3RdLT5oYWx0KTsKKwkgIGhhbHRfbm9kZSA9IGNoZWNrX2hhbHRfc3RhdGVfY29udGV4dCAobWN0eCwKKwkJCQkJCW1jdHgtPnN0YXRlX2xvZ1ttYXRjaF9sYXN0XSwKKwkJCQkJCW1hdGNoX2xhc3QpOworCX0KKyAgICAgIHJldCA9IG1lcmdlX3N0YXRlX2FycmF5IChkZmEsIHNpZnRlZF9zdGF0ZXMsIGxpbV9zdGF0ZXMsCisJCQkgICAgICAgbWF0Y2hfbGFzdCArIDEpOworICAgICAgcmVfZnJlZSAobGltX3N0YXRlcyk7CisgICAgICBsaW1fc3RhdGVzID0gTlVMTDsKKyAgICAgIGlmIChCRSAocmV0ICE9IFJFR19OT0VSUk9SLCAwKSkKKwlnb3RvIGZyZWVfcmV0dXJuOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHNpZnRfY3R4X2luaXQgKCZzY3R4LCBzaWZ0ZWRfc3RhdGVzLCBsaW1fc3RhdGVzLCBoYWx0X25vZGUsIG1hdGNoX2xhc3QpOworICAgICAgcmV0ID0gc2lmdF9zdGF0ZXNfYmFja3dhcmQgKG1jdHgsICZzY3R4KTsKKyAgICAgIHJlX25vZGVfc2V0X2ZyZWUgKCZzY3R4LmxpbWl0cyk7CisgICAgICBpZiAoQkUgKHJldCAhPSBSRUdfTk9FUlJPUiwgMCkpCisJZ290byBmcmVlX3JldHVybjsKKyAgICB9CisgIHJlX2ZyZWUgKG1jdHgtPnN0YXRlX2xvZyk7CisgIG1jdHgtPnN0YXRlX2xvZyA9IHNpZnRlZF9zdGF0ZXM7CisgIHNpZnRlZF9zdGF0ZXMgPSBOVUxMOworICBtY3R4LT5sYXN0X25vZGUgPSBoYWx0X25vZGU7CisgIG1jdHgtPm1hdGNoX2xhc3QgPSBtYXRjaF9sYXN0OworICByZXQgPSBSRUdfTk9FUlJPUjsKKyBmcmVlX3JldHVybjoKKyAgcmVfZnJlZSAoc2lmdGVkX3N0YXRlcyk7CisgIHJlX2ZyZWUgKGxpbV9zdGF0ZXMpOworICByZXR1cm4gcmV0OworfQorCisvKiBBY3F1aXJlIGFuIGluaXRpYWwgc3RhdGUgYW5kIHJldHVybiBpdC4KKyAgIFdlIG11c3Qgc2VsZWN0IGFwcHJvcHJpYXRlIGluaXRpYWwgc3RhdGUgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LAorICAgc2luY2UgaW5pdGlhbCBzdGF0ZXMgbWF5IGhhdmUgY29uc3RyYWludHMgbGlrZSAiXDwiLCAiXiIsIGV0Yy4uICAqLworCitzdGF0aWMgaW5saW5lIHJlX2RmYXN0YXRlX3QgKgorX19hdHRyaWJ1dGUgKChhbHdheXNfaW5saW5lKSkgaW50ZXJuYWxfZnVuY3Rpb24KK2FjcXVpcmVfaW5pdF9zdGF0ZV9jb250ZXh0IChyZWdfZXJyY29kZV90ICplcnIsIGNvbnN0IHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkJCSAgICBJZHggaWR4KQoreworICBjb25zdCByZV9kZmFfdCAqY29uc3QgZGZhID0gbWN0eC0+ZGZhOworICBpZiAoZGZhLT5pbml0X3N0YXRlLT5oYXNfY29uc3RyYWludCkKKyAgICB7CisgICAgICB1bnNpZ25lZCBpbnQgY29udGV4dDsKKyAgICAgIGNvbnRleHQgPSByZV9zdHJpbmdfY29udGV4dF9hdCAoJm1jdHgtPmlucHV0LCBpZHggLSAxLCBtY3R4LT5lZmxhZ3MpOworICAgICAgaWYgKElTX1dPUkRfQ09OVEVYVCAoY29udGV4dCkpCisJcmV0dXJuIGRmYS0+aW5pdF9zdGF0ZV93b3JkOworICAgICAgZWxzZSBpZiAoSVNfT1JESU5BUllfQ09OVEVYVCAoY29udGV4dCkpCisJcmV0dXJuIGRmYS0+aW5pdF9zdGF0ZTsKKyAgICAgIGVsc2UgaWYgKElTX0JFR0JVRl9DT05URVhUIChjb250ZXh0KSAmJiBJU19ORVdMSU5FX0NPTlRFWFQgKGNvbnRleHQpKQorCXJldHVybiBkZmEtPmluaXRfc3RhdGVfYmVnYnVmOworICAgICAgZWxzZSBpZiAoSVNfTkVXTElORV9DT05URVhUIChjb250ZXh0KSkKKwlyZXR1cm4gZGZhLT5pbml0X3N0YXRlX25sOworICAgICAgZWxzZSBpZiAoSVNfQkVHQlVGX0NPTlRFWFQgKGNvbnRleHQpKQorCXsKKwkgIC8qIEl0IGlzIHJlbGF0aXZlbHkgcmFyZSBjYXNlLCB0aGVuIGNhbGN1bGF0ZSBvbiBkZW1hbmQuICAqLworCSAgcmV0dXJuIHJlX2FjcXVpcmVfc3RhdGVfY29udGV4dCAoZXJyLCBkZmEsCisJCQkJCSAgIGRmYS0+aW5pdF9zdGF0ZS0+ZW50cmFuY2Vfbm9kZXMsCisJCQkJCSAgIGNvbnRleHQpOworCX0KKyAgICAgIGVsc2UKKwkvKiBNdXN0IG5vdCBoYXBwZW4/ICAqLworCXJldHVybiBkZmEtPmluaXRfc3RhdGU7CisgICAgfQorICBlbHNlCisgICAgcmV0dXJuIGRmYS0+aW5pdF9zdGF0ZTsKK30KKworLyogQ2hlY2sgd2hldGhlciB0aGUgcmVndWxhciBleHByZXNzaW9uIG1hdGNoIGlucHV0IHN0cmluZyBJTlBVVCBvciBub3QsCisgICBhbmQgcmV0dXJuIHRoZSBpbmRleCB3aGVyZSB0aGUgbWF0Y2hpbmcgZW5kLiAgUmV0dXJuIFJFR19NSVNTSU5HIGlmCisgICB0aGVyZSBpcyBubyBtYXRjaCwgYW5kIHJldHVybiBSRUdfRVJST1IgaW4gY2FzZSBvZiBhbiBlcnJvci4KKyAgIEZMX0xPTkdFU1RfTUFUQ0ggbWVhbnMgd2Ugd2FudCB0aGUgUE9TSVggbG9uZ2VzdCBtYXRjaGluZy4KKyAgIElmIFBfTUFUQ0hfRklSU1QgaXMgbm90IE5VTEwsIGFuZCB0aGUgbWF0Y2ggZmFpbHMsIGl0IGlzIHNldCB0byB0aGUKKyAgIG5leHQgcGxhY2Ugd2hlcmUgd2UgbWF5IHdhbnQgdG8gdHJ5IG1hdGNoaW5nLgorICAgTm90ZSB0aGF0IHRoZSBtYXRjaGVyIGFzc3VtZSB0aGF0IHRoZSBtYWNoaW5nIHN0YXJ0cyBmcm9tIHRoZSBjdXJyZW50CisgICBpbmRleCBvZiB0aGUgYnVmZmVyLiAgKi8KKworc3RhdGljIElkeAoraW50ZXJuYWxfZnVuY3Rpb24KK2NoZWNrX21hdGNoaW5nIChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIGJvb2wgZmxfbG9uZ2VzdF9tYXRjaCwKKwkJSWR4ICpwX21hdGNoX2ZpcnN0KQoreworICBjb25zdCByZV9kZmFfdCAqY29uc3QgZGZhID0gbWN0eC0+ZGZhOworICByZWdfZXJyY29kZV90IGVycjsKKyAgSWR4IG1hdGNoID0gMDsKKyAgSWR4IG1hdGNoX2xhc3QgPSBSRUdfTUlTU0lORzsKKyAgSWR4IGN1cl9zdHJfaWR4ID0gcmVfc3RyaW5nX2N1cl9pZHggKCZtY3R4LT5pbnB1dCk7CisgIHJlX2RmYXN0YXRlX3QgKmN1cl9zdGF0ZTsKKyAgYm9vbCBhdF9pbml0X3N0YXRlID0gcF9tYXRjaF9maXJzdCAhPSBOVUxMOworICBJZHggbmV4dF9zdGFydF9pZHggPSBjdXJfc3RyX2lkeDsKKworICBlcnIgPSBSRUdfTk9FUlJPUjsKKyAgY3VyX3N0YXRlID0gYWNxdWlyZV9pbml0X3N0YXRlX2NvbnRleHQgKCZlcnIsIG1jdHgsIGN1cl9zdHJfaWR4KTsKKyAgLyogQW4gaW5pdGlhbCBzdGF0ZSBtdXN0IG5vdCBiZSBOVUxMIChpbnZhbGlkKS4gICovCisgIGlmIChCRSAoY3VyX3N0YXRlID09IE5VTEwsIDApKQorICAgIHsKKyAgICAgIGFzc2VydCAoZXJyID09IFJFR19FU1BBQ0UpOworICAgICAgcmV0dXJuIFJFR19FUlJPUjsKKyAgICB9CisKKyAgaWYgKG1jdHgtPnN0YXRlX2xvZyAhPSBOVUxMKQorICAgIHsKKyAgICAgIG1jdHgtPnN0YXRlX2xvZ1tjdXJfc3RyX2lkeF0gPSBjdXJfc3RhdGU7CisKKyAgICAgIC8qIENoZWNrIE9QX09QRU5fU1VCRVhQIGluIHRoZSBpbml0aWFsIHN0YXRlIGluIGNhc2UgdGhhdCB3ZSB1c2UgdGhlbQorCSBsYXRlci4gIEUuZy4gUHJvY2Vzc2luZyBiYWNrIHJlZmVyZW5jZXMuICAqLworICAgICAgaWYgKEJFIChkZmEtPm5iYWNrcmVmLCAwKSkKKwl7CisJICBhdF9pbml0X3N0YXRlID0gZmFsc2U7CisJICBlcnIgPSBjaGVja19zdWJleHBfbWF0Y2hpbmdfdG9wIChtY3R4LCAmY3VyX3N0YXRlLT5ub2RlcywgMCk7CisJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHJldHVybiBlcnI7CisKKwkgIGlmIChjdXJfc3RhdGUtPmhhc19iYWNrcmVmKQorCSAgICB7CisJICAgICAgZXJyID0gdHJhbnNpdF9zdGF0ZV9ia3JlZiAobWN0eCwgJmN1cl9zdGF0ZS0+bm9kZXMpOworCSAgICAgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgICAgIHJldHVybiBlcnI7CisJICAgIH0KKwl9CisgICAgfQorCisgIC8qIElmIHRoZSBSRSBhY2NlcHRzIE5VTEwgc3RyaW5nLiAgKi8KKyAgaWYgKEJFIChjdXJfc3RhdGUtPmhhbHQsIDApKQorICAgIHsKKyAgICAgIGlmICghY3VyX3N0YXRlLT5oYXNfY29uc3RyYWludAorCSAgfHwgY2hlY2tfaGFsdF9zdGF0ZV9jb250ZXh0IChtY3R4LCBjdXJfc3RhdGUsIGN1cl9zdHJfaWR4KSkKKwl7CisJICBpZiAoIWZsX2xvbmdlc3RfbWF0Y2gpCisJICAgIHJldHVybiBjdXJfc3RyX2lkeDsKKwkgIGVsc2UKKwkgICAgeworCSAgICAgIG1hdGNoX2xhc3QgPSBjdXJfc3RyX2lkeDsKKwkgICAgICBtYXRjaCA9IDE7CisJICAgIH0KKwl9CisgICAgfQorCisgIHdoaWxlICghcmVfc3RyaW5nX2VvaSAoJm1jdHgtPmlucHV0KSkKKyAgICB7CisgICAgICByZV9kZmFzdGF0ZV90ICpvbGRfc3RhdGUgPSBjdXJfc3RhdGU7CisgICAgICBJZHggbmV4dF9jaGFyX2lkeCA9IHJlX3N0cmluZ19jdXJfaWR4ICgmbWN0eC0+aW5wdXQpICsgMTsKKworICAgICAgaWYgKEJFIChuZXh0X2NoYXJfaWR4ID49IG1jdHgtPmlucHV0LmJ1ZnNfbGVuLCAwKQorICAgICAgICAgIHx8IChCRSAobmV4dF9jaGFyX2lkeCA+PSBtY3R4LT5pbnB1dC52YWxpZF9sZW4sIDApCisgICAgICAgICAgICAgICYmIG1jdHgtPmlucHV0LnZhbGlkX2xlbiA8IG1jdHgtPmlucHV0LmxlbikpCisgICAgICAgIHsKKyAgICAgICAgICBlcnIgPSBleHRlbmRfYnVmZmVycyAobWN0eCk7CisgICAgICAgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCSAgICB7CisJICAgICAgYXNzZXJ0IChlcnIgPT0gUkVHX0VTUEFDRSk7CisJICAgICAgcmV0dXJuIFJFR19FUlJPUjsKKwkgICAgfQorICAgICAgICB9CisKKyAgICAgIGN1cl9zdGF0ZSA9IHRyYW5zaXRfc3RhdGUgKCZlcnIsIG1jdHgsIGN1cl9zdGF0ZSk7CisgICAgICBpZiAobWN0eC0+c3RhdGVfbG9nICE9IE5VTEwpCisJY3VyX3N0YXRlID0gbWVyZ2Vfc3RhdGVfd2l0aF9sb2cgKCZlcnIsIG1jdHgsIGN1cl9zdGF0ZSk7CisKKyAgICAgIGlmIChjdXJfc3RhdGUgPT0gTlVMTCkKKwl7CisJICAvKiBSZWFjaGVkIHRoZSBpbnZhbGlkIHN0YXRlIG9yIGFuIGVycm9yLiAgVHJ5IHRvIHJlY292ZXIgYSB2YWxpZAorCSAgICAgc3RhdGUgdXNpbmcgdGhlIHN0YXRlIGxvZywgaWYgYXZhaWxhYmxlIGFuZCBpZiB3ZSBoYXZlIG5vdAorCSAgICAgYWxyZWFkeSBmb3VuZCBhIHZhbGlkIChldmVuIGlmIG5vdCB0aGUgbG9uZ2VzdCkgbWF0Y2guICAqLworCSAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCSAgICByZXR1cm4gUkVHX0VSUk9SOworCisJICBpZiAobWN0eC0+c3RhdGVfbG9nID09IE5VTEwKKwkgICAgICB8fCAobWF0Y2ggJiYgIWZsX2xvbmdlc3RfbWF0Y2gpCisJICAgICAgfHwgKGN1cl9zdGF0ZSA9IGZpbmRfcmVjb3Zlcl9zdGF0ZSAoJmVyciwgbWN0eCkpID09IE5VTEwpCisJICAgIGJyZWFrOworCX0KKworICAgICAgaWYgKEJFIChhdF9pbml0X3N0YXRlLCAwKSkKKwl7CisJICBpZiAob2xkX3N0YXRlID09IGN1cl9zdGF0ZSkKKwkgICAgbmV4dF9zdGFydF9pZHggPSBuZXh0X2NoYXJfaWR4OworCSAgZWxzZQorCSAgICBhdF9pbml0X3N0YXRlID0gZmFsc2U7CisJfQorCisgICAgICBpZiAoY3VyX3N0YXRlLT5oYWx0KQorCXsKKwkgIC8qIFJlYWNoZWQgYSBoYWx0IHN0YXRlLgorCSAgICAgQ2hlY2sgdGhlIGhhbHQgc3RhdGUgY2FuIHNhdGlzZnkgdGhlIGN1cnJlbnQgY29udGV4dC4gICovCisJICBpZiAoIWN1cl9zdGF0ZS0+aGFzX2NvbnN0cmFpbnQKKwkgICAgICB8fCBjaGVja19oYWx0X3N0YXRlX2NvbnRleHQgKG1jdHgsIGN1cl9zdGF0ZSwKKwkJCQkJICAgcmVfc3RyaW5nX2N1cl9pZHggKCZtY3R4LT5pbnB1dCkpKQorCSAgICB7CisJICAgICAgLyogV2UgZm91bmQgYW4gYXBwcm9wcmlhdGUgaGFsdCBzdGF0ZS4gICovCisJICAgICAgbWF0Y2hfbGFzdCA9IHJlX3N0cmluZ19jdXJfaWR4ICgmbWN0eC0+aW5wdXQpOworCSAgICAgIG1hdGNoID0gMTsKKworCSAgICAgIC8qIFdlIGZvdW5kIGEgbWF0Y2gsIGRvIG5vdCBtb2RpZnkgbWF0Y2hfZmlyc3QgYmVsb3cuICAqLworCSAgICAgIHBfbWF0Y2hfZmlyc3QgPSBOVUxMOworCSAgICAgIGlmICghZmxfbG9uZ2VzdF9tYXRjaCkKKwkJYnJlYWs7CisJICAgIH0KKwl9CisgICAgfQorCisgIGlmIChwX21hdGNoX2ZpcnN0KQorICAgICpwX21hdGNoX2ZpcnN0ICs9IG5leHRfc3RhcnRfaWR4OworCisgIHJldHVybiBtYXRjaF9sYXN0OworfQorCisvKiBDaGVjayBOT0RFIG1hdGNoIHRoZSBjdXJyZW50IGNvbnRleHQuICAqLworCitzdGF0aWMgYm9vbAoraW50ZXJuYWxfZnVuY3Rpb24KK2NoZWNrX2hhbHRfbm9kZV9jb250ZXh0IChjb25zdCByZV9kZmFfdCAqZGZhLCBJZHggbm9kZSwgdW5zaWduZWQgaW50IGNvbnRleHQpCit7CisgIHJlX3Rva2VuX3R5cGVfdCB0eXBlID0gZGZhLT5ub2Rlc1tub2RlXS50eXBlOworICB1bnNpZ25lZCBpbnQgY29uc3RyYWludCA9IGRmYS0+bm9kZXNbbm9kZV0uY29uc3RyYWludDsKKyAgaWYgKHR5cGUgIT0gRU5EX09GX1JFKQorICAgIHJldHVybiBmYWxzZTsKKyAgaWYgKCFjb25zdHJhaW50KQorICAgIHJldHVybiB0cnVlOworICBpZiAoTk9UX1NBVElTRllfTkVYVF9DT05TVFJBSU5UIChjb25zdHJhaW50LCBjb250ZXh0KSkKKyAgICByZXR1cm4gZmFsc2U7CisgIHJldHVybiB0cnVlOworfQorCisvKiBDaGVjayB0aGUgaGFsdCBzdGF0ZSBTVEFURSBtYXRjaCB0aGUgY3VycmVudCBjb250ZXh0LgorICAgUmV0dXJuIDAgaWYgbm90IG1hdGNoLCBpZiB0aGUgbm9kZSwgU1RBVEUgaGFzLCBpcyBhIGhhbHQgbm9kZSBhbmQKKyAgIG1hdGNoIHRoZSBjb250ZXh0LCByZXR1cm4gdGhlIG5vZGUuICAqLworCitzdGF0aWMgSWR4CitpbnRlcm5hbF9mdW5jdGlvbgorY2hlY2tfaGFsdF9zdGF0ZV9jb250ZXh0IChjb25zdCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsCisJCQkgIGNvbnN0IHJlX2RmYXN0YXRlX3QgKnN0YXRlLCBJZHggaWR4KQoreworICBJZHggaTsKKyAgdW5zaWduZWQgaW50IGNvbnRleHQ7CisjaWZkZWYgREVCVUcKKyAgYXNzZXJ0IChzdGF0ZS0+aGFsdCk7CisjZW5kaWYKKyAgY29udGV4dCA9IHJlX3N0cmluZ19jb250ZXh0X2F0ICgmbWN0eC0+aW5wdXQsIGlkeCwgbWN0eC0+ZWZsYWdzKTsKKyAgZm9yIChpID0gMDsgaSA8IHN0YXRlLT5ub2Rlcy5uZWxlbTsgKytpKQorICAgIGlmIChjaGVja19oYWx0X25vZGVfY29udGV4dCAobWN0eC0+ZGZhLCBzdGF0ZS0+bm9kZXMuZWxlbXNbaV0sIGNvbnRleHQpKQorICAgICAgcmV0dXJuIHN0YXRlLT5ub2Rlcy5lbGVtc1tpXTsKKyAgcmV0dXJuIDA7Cit9CisKKy8qIENvbXB1dGUgdGhlIG5leHQgbm9kZSB0byB3aGljaCAiTkZBIiB0cmFuc2l0IGZyb20gTk9ERSgiTkZBIiBpcyBhIE5GQQorICAgY29ycmVzcG9uZGluZyB0byB0aGUgREZBKS4KKyAgIFJldHVybiB0aGUgZGVzdGluYXRpb24gbm9kZSwgYW5kIHVwZGF0ZSBFUFNfVklBX05PREVTOworICAgcmV0dXJuIFJFR19NSVNTSU5HIGluIGNhc2Ugb2YgZXJyb3JzLiAgKi8KKworc3RhdGljIElkeAoraW50ZXJuYWxfZnVuY3Rpb24KK3Byb2NlZWRfbmV4dF9ub2RlIChjb25zdCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIElkeCBucmVncywgcmVnbWF0Y2hfdCAqcmVncywKKwkJICAgSWR4ICpwaWR4LCBJZHggbm9kZSwgcmVfbm9kZV9zZXQgKmVwc192aWFfbm9kZXMsCisJCSAgIHN0cnVjdCByZV9mYWlsX3N0YWNrX3QgKmZzKQoreworICBjb25zdCByZV9kZmFfdCAqY29uc3QgZGZhID0gbWN0eC0+ZGZhOworICBJZHggaTsKKyAgYm9vbCBvazsKKyAgaWYgKElTX0VQU0lMT05fTk9ERSAoZGZhLT5ub2Rlc1tub2RlXS50eXBlKSkKKyAgICB7CisgICAgICByZV9ub2RlX3NldCAqY3VyX25vZGVzID0gJm1jdHgtPnN0YXRlX2xvZ1sqcGlkeF0tPm5vZGVzOworICAgICAgcmVfbm9kZV9zZXQgKmVkZXN0cyA9ICZkZmEtPmVkZXN0c1tub2RlXTsKKyAgICAgIElkeCBkZXN0X25vZGU7CisgICAgICBvayA9IHJlX25vZGVfc2V0X2luc2VydCAoZXBzX3ZpYV9ub2Rlcywgbm9kZSk7CisgICAgICBpZiAoQkUgKCEgb2ssIDApKQorCXJldHVybiBSRUdfRVJST1I7CisgICAgICAvKiBQaWNrIHVwIGEgdmFsaWQgZGVzdGluYXRpb24sIG9yIHJldHVybiBSRUdfTUlTU0lORyBpZiBub25lCisJIGlzIGZvdW5kLiAgKi8KKyAgICAgIGZvciAoZGVzdF9ub2RlID0gUkVHX01JU1NJTkcsIGkgPSAwOyBpIDwgZWRlc3RzLT5uZWxlbTsgKytpKQorCXsKKwkgIElkeCBjYW5kaWRhdGUgPSBlZGVzdHMtPmVsZW1zW2ldOworCSAgaWYgKCFyZV9ub2RlX3NldF9jb250YWlucyAoY3VyX25vZGVzLCBjYW5kaWRhdGUpKQorCSAgICBjb250aW51ZTsKKyAgICAgICAgICBpZiAoZGVzdF9ub2RlID09IFJFR19NSVNTSU5HKQorCSAgICBkZXN0X25vZGUgPSBjYW5kaWRhdGU7CisKKyAgICAgICAgICBlbHNlCisJICAgIHsKKwkgICAgICAvKiBJbiBvcmRlciB0byBhdm9pZCBpbmZpbml0ZSBsb29wIGxpa2UgIihhKikqIiwgcmV0dXJuIHRoZSBzZWNvbmQKKwkgICAgICAgICBlcHNpbG9uLXRyYW5zaXRpb24gaWYgdGhlIGZpcnN0IHdhcyBhbHJlYWR5IGNvbnNpZGVyZWQuICAqLworCSAgICAgIGlmIChyZV9ub2RlX3NldF9jb250YWlucyAoZXBzX3ZpYV9ub2RlcywgZGVzdF9ub2RlKSkKKwkgICAgICAgIHJldHVybiBjYW5kaWRhdGU7CisKKwkgICAgICAvKiBPdGhlcndpc2UsIHB1c2ggdGhlIHNlY29uZCBlcHNpbG9uLXRyYW5zaXRpb24gb24gdGhlIGZhaWwgc3RhY2suICAqLworCSAgICAgIGVsc2UgaWYgKGZzICE9IE5VTEwKKwkJICAgICAgICYmIHB1c2hfZmFpbF9zdGFjayAoZnMsICpwaWR4LCBjYW5kaWRhdGUsIG5yZWdzLCByZWdzLAorCQkJCSAgICAgICAgICAgZXBzX3ZpYV9ub2RlcykpCisJCXJldHVybiBSRUdfRVJST1I7CisKKwkgICAgICAvKiBXZSBrbm93IHdlIGFyZSBnb2luZyB0byBleGl0LiAgKi8KKwkgICAgICBicmVhazsKKwkgICAgfQorCX0KKyAgICAgIHJldHVybiBkZXN0X25vZGU7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgSWR4IG5hY2NlcHRlZCA9IDA7CisgICAgICByZV90b2tlbl90eXBlX3QgdHlwZSA9IGRmYS0+bm9kZXNbbm9kZV0udHlwZTsKKworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgICAgICBpZiAoZGZhLT5ub2Rlc1tub2RlXS5hY2NlcHRfbWIpCisJbmFjY2VwdGVkID0gY2hlY2tfbm9kZV9hY2NlcHRfYnl0ZXMgKGRmYSwgbm9kZSwgJm1jdHgtPmlucHV0LCAqcGlkeCk7CisgICAgICBlbHNlCisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKyAgICAgIGlmICh0eXBlID09IE9QX0JBQ0tfUkVGKQorCXsKKwkgIElkeCBzdWJleHBfaWR4ID0gZGZhLT5ub2Rlc1tub2RlXS5vcHIuaWR4ICsgMTsKKwkgIG5hY2NlcHRlZCA9IHJlZ3Nbc3ViZXhwX2lkeF0ucm1fZW8gLSByZWdzW3N1YmV4cF9pZHhdLnJtX3NvOworCSAgaWYgKGZzICE9IE5VTEwpCisJICAgIHsKKwkgICAgICBpZiAocmVnc1tzdWJleHBfaWR4XS5ybV9zbyA9PSAtMSB8fCByZWdzW3N1YmV4cF9pZHhdLnJtX2VvID09IC0xKQorCQlyZXR1cm4gUkVHX01JU1NJTkc7CisJICAgICAgZWxzZSBpZiAobmFjY2VwdGVkKQorCQl7CisJCSAgY2hhciAqYnVmID0gKGNoYXIgKikgcmVfc3RyaW5nX2dldF9idWZmZXIgKCZtY3R4LT5pbnB1dCk7CisJCSAgaWYgKG1lbWNtcCAoYnVmICsgcmVnc1tzdWJleHBfaWR4XS5ybV9zbywgYnVmICsgKnBpZHgsCisJCQkgICAgICBuYWNjZXB0ZWQpICE9IDApCisJCSAgICByZXR1cm4gUkVHX01JU1NJTkc7CisJCX0KKwkgICAgfQorCisJICBpZiAobmFjY2VwdGVkID09IDApCisJICAgIHsKKwkgICAgICBJZHggZGVzdF9ub2RlOworCSAgICAgIG9rID0gcmVfbm9kZV9zZXRfaW5zZXJ0IChlcHNfdmlhX25vZGVzLCBub2RlKTsKKwkgICAgICBpZiAoQkUgKCEgb2ssIDApKQorCQlyZXR1cm4gUkVHX0VSUk9SOworCSAgICAgIGRlc3Rfbm9kZSA9IGRmYS0+ZWRlc3RzW25vZGVdLmVsZW1zWzBdOworCSAgICAgIGlmIChyZV9ub2RlX3NldF9jb250YWlucyAoJm1jdHgtPnN0YXRlX2xvZ1sqcGlkeF0tPm5vZGVzLAorCQkJCQlkZXN0X25vZGUpKQorCQlyZXR1cm4gZGVzdF9ub2RlOworCSAgICB9CisJfQorCisgICAgICBpZiAobmFjY2VwdGVkICE9IDAKKwkgIHx8IGNoZWNrX25vZGVfYWNjZXB0IChtY3R4LCBkZmEtPm5vZGVzICsgbm9kZSwgKnBpZHgpKQorCXsKKwkgIElkeCBkZXN0X25vZGUgPSBkZmEtPm5leHRzW25vZGVdOworCSAgKnBpZHggPSAobmFjY2VwdGVkID09IDApID8gKnBpZHggKyAxIDogKnBpZHggKyBuYWNjZXB0ZWQ7CisJICBpZiAoZnMgJiYgKCpwaWR4ID4gbWN0eC0+bWF0Y2hfbGFzdCB8fCBtY3R4LT5zdGF0ZV9sb2dbKnBpZHhdID09IE5VTEwKKwkJICAgICB8fCAhcmVfbm9kZV9zZXRfY29udGFpbnMgKCZtY3R4LT5zdGF0ZV9sb2dbKnBpZHhdLT5ub2RlcywKKwkJCQkJICAgICAgIGRlc3Rfbm9kZSkpKQorCSAgICByZXR1cm4gUkVHX01JU1NJTkc7CisJICByZV9ub2RlX3NldF9lbXB0eSAoZXBzX3ZpYV9ub2Rlcyk7CisJICByZXR1cm4gZGVzdF9ub2RlOworCX0KKyAgICB9CisgIHJldHVybiBSRUdfTUlTU0lORzsKK30KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCitwdXNoX2ZhaWxfc3RhY2sgKHN0cnVjdCByZV9mYWlsX3N0YWNrX3QgKmZzLCBJZHggc3RyX2lkeCwgSWR4IGRlc3Rfbm9kZSwKKwkJIElkeCBucmVncywgcmVnbWF0Y2hfdCAqcmVncywgcmVfbm9kZV9zZXQgKmVwc192aWFfbm9kZXMpCit7CisgIHJlZ19lcnJjb2RlX3QgZXJyOworICBJZHggbnVtID0gZnMtPm51bSsrOworICBpZiAoZnMtPm51bSA9PSBmcy0+YWxsb2MpCisgICAgeworICAgICAgc3RydWN0IHJlX2ZhaWxfc3RhY2tfZW50X3QgKm5ld19hcnJheTsKKyAgICAgIG5ld19hcnJheSA9IHJlYWxsb2MgKGZzLT5zdGFjaywgKHNpemVvZiAoc3RydWN0IHJlX2ZhaWxfc3RhY2tfZW50X3QpCisJCQkJICAgICAgICogZnMtPmFsbG9jICogMikpOworICAgICAgaWYgKG5ld19hcnJheSA9PSBOVUxMKQorCXJldHVybiBSRUdfRVNQQUNFOworICAgICAgZnMtPmFsbG9jICo9IDI7CisgICAgICBmcy0+c3RhY2sgPSBuZXdfYXJyYXk7CisgICAgfQorICBmcy0+c3RhY2tbbnVtXS5pZHggPSBzdHJfaWR4OworICBmcy0+c3RhY2tbbnVtXS5ub2RlID0gZGVzdF9ub2RlOworICBmcy0+c3RhY2tbbnVtXS5yZWdzID0gcmVfbWFsbG9jIChyZWdtYXRjaF90LCBucmVncyk7CisgIGlmIChmcy0+c3RhY2tbbnVtXS5yZWdzID09IE5VTEwpCisgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisgIG1lbWNweSAoZnMtPnN0YWNrW251bV0ucmVncywgcmVncywgc2l6ZW9mIChyZWdtYXRjaF90KSAqIG5yZWdzKTsKKyAgZXJyID0gcmVfbm9kZV9zZXRfaW5pdF9jb3B5ICgmZnMtPnN0YWNrW251bV0uZXBzX3ZpYV9ub2RlcywgZXBzX3ZpYV9ub2Rlcyk7CisgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBJZHgKK2ludGVybmFsX2Z1bmN0aW9uCitwb3BfZmFpbF9zdGFjayAoc3RydWN0IHJlX2ZhaWxfc3RhY2tfdCAqZnMsIElkeCAqcGlkeCwgSWR4IG5yZWdzLAorCQlyZWdtYXRjaF90ICpyZWdzLCByZV9ub2RlX3NldCAqZXBzX3ZpYV9ub2RlcykKK3sKKyAgSWR4IG51bSA9IC0tZnMtPm51bTsKKyAgYXNzZXJ0IChSRUdfVkFMSURfSU5ERVggKG51bSkpOworICAqcGlkeCA9IGZzLT5zdGFja1tudW1dLmlkeDsKKyAgbWVtY3B5IChyZWdzLCBmcy0+c3RhY2tbbnVtXS5yZWdzLCBzaXplb2YgKHJlZ21hdGNoX3QpICogbnJlZ3MpOworICByZV9ub2RlX3NldF9mcmVlIChlcHNfdmlhX25vZGVzKTsKKyAgcmVfZnJlZSAoZnMtPnN0YWNrW251bV0ucmVncyk7CisgICplcHNfdmlhX25vZGVzID0gZnMtPnN0YWNrW251bV0uZXBzX3ZpYV9ub2RlczsKKyAgcmV0dXJuIGZzLT5zdGFja1tudW1dLm5vZGU7Cit9CisKKy8qIFNldCB0aGUgcG9zaXRpb25zIHdoZXJlIHRoZSBzdWJleHByZXNzaW9ucyBhcmUgc3RhcnRzL2VuZHMgdG8gcmVnaXN0ZXJzCisgICBQTUFUQ0guCisgICBOb3RlOiBXZSBhc3N1bWUgdGhhdCBwbWF0Y2hbMF0gaXMgYWxyZWFkeSBzZXQsIGFuZAorICAgcG1hdGNoW2ldLnJtX3NvID09IHBtYXRjaFtpXS5ybV9lbyA9PSAtMSBmb3IgMCA8IGkgPCBubWF0Y2guICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK3NldF9yZWdzIChjb25zdCByZWdleF90ICpwcmVnLCBjb25zdCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIHNpemVfdCBubWF0Y2gsCisJICByZWdtYXRjaF90ICpwbWF0Y2gsIGJvb2wgZmxfYmFja3RyYWNrKQoreworICBjb25zdCByZV9kZmFfdCAqZGZhID0gKGNvbnN0IHJlX2RmYV90ICopIHByZWctPmJ1ZmZlcjsKKyAgSWR4IGlkeCwgY3VyX25vZGU7CisgIHJlX25vZGVfc2V0IGVwc192aWFfbm9kZXM7CisgIHN0cnVjdCByZV9mYWlsX3N0YWNrX3QgKmZzOworICBzdHJ1Y3QgcmVfZmFpbF9zdGFja190IGZzX2JvZHkgPSB7IDAsIDIsIE5VTEwgfTsKKyAgcmVnbWF0Y2hfdCAqcHJldl9pZHhfbWF0Y2g7CisgIGJvb2wgcHJldl9pZHhfbWF0Y2hfbWFsbG9jZWQgPSBmYWxzZTsKKworI2lmZGVmIERFQlVHCisgIGFzc2VydCAobm1hdGNoID4gMSk7CisgIGFzc2VydCAobWN0eC0+c3RhdGVfbG9nICE9IE5VTEwpOworI2VuZGlmCisgIGlmIChmbF9iYWNrdHJhY2spCisgICAgeworICAgICAgZnMgPSAmZnNfYm9keTsKKyAgICAgIGZzLT5zdGFjayA9IHJlX21hbGxvYyAoc3RydWN0IHJlX2ZhaWxfc3RhY2tfZW50X3QsIGZzLT5hbGxvYyk7CisgICAgICBpZiAoZnMtPnN0YWNrID09IE5VTEwpCisJcmV0dXJuIFJFR19FU1BBQ0U7CisgICAgfQorICBlbHNlCisgICAgZnMgPSBOVUxMOworCisgIGN1cl9ub2RlID0gZGZhLT5pbml0X25vZGU7CisgIHJlX25vZGVfc2V0X2luaXRfZW1wdHkgKCZlcHNfdmlhX25vZGVzKTsKKworICBpZiAoX19saWJjX3VzZV9hbGxvY2EgKG5tYXRjaCAqIHNpemVvZiAocmVnbWF0Y2hfdCkpKQorICAgIHByZXZfaWR4X21hdGNoID0gKHJlZ21hdGNoX3QgKikgYWxsb2NhIChubWF0Y2ggKiBzaXplb2YgKHJlZ21hdGNoX3QpKTsKKyAgZWxzZQorICAgIHsKKyAgICAgIHByZXZfaWR4X21hdGNoID0gcmVfbWFsbG9jIChyZWdtYXRjaF90LCBubWF0Y2gpOworICAgICAgaWYgKHByZXZfaWR4X21hdGNoID09IE5VTEwpCisJeworCSAgZnJlZV9mYWlsX3N0YWNrX3JldHVybiAoZnMpOworCSAgcmV0dXJuIFJFR19FU1BBQ0U7CisJfQorICAgICAgcHJldl9pZHhfbWF0Y2hfbWFsbG9jZWQgPSB0cnVlOworICAgIH0KKyAgbWVtY3B5IChwcmV2X2lkeF9tYXRjaCwgcG1hdGNoLCBzaXplb2YgKHJlZ21hdGNoX3QpICogbm1hdGNoKTsKKworICBmb3IgKGlkeCA9IHBtYXRjaFswXS5ybV9zbzsgaWR4IDw9IHBtYXRjaFswXS5ybV9lbyA7KQorICAgIHsKKyAgICAgIHVwZGF0ZV9yZWdzIChkZmEsIHBtYXRjaCwgcHJldl9pZHhfbWF0Y2gsIGN1cl9ub2RlLCBpZHgsIG5tYXRjaCk7CisKKyAgICAgIGlmIChpZHggPT0gcG1hdGNoWzBdLnJtX2VvICYmIGN1cl9ub2RlID09IG1jdHgtPmxhc3Rfbm9kZSkKKwl7CisJICBJZHggcmVnX2lkeDsKKwkgIGlmIChmcykKKwkgICAgeworCSAgICAgIGZvciAocmVnX2lkeCA9IDA7IHJlZ19pZHggPCBubWF0Y2g7ICsrcmVnX2lkeCkKKwkJaWYgKHBtYXRjaFtyZWdfaWR4XS5ybV9zbyA+IC0xICYmIHBtYXRjaFtyZWdfaWR4XS5ybV9lbyA9PSAtMSkKKwkJICBicmVhazsKKwkgICAgICBpZiAocmVnX2lkeCA9PSBubWF0Y2gpCisJCXsKKwkJICByZV9ub2RlX3NldF9mcmVlICgmZXBzX3ZpYV9ub2Rlcyk7CisJCSAgaWYgKHByZXZfaWR4X21hdGNoX21hbGxvY2VkKQorCQkgICAgcmVfZnJlZSAocHJldl9pZHhfbWF0Y2gpOworCQkgIHJldHVybiBmcmVlX2ZhaWxfc3RhY2tfcmV0dXJuIChmcyk7CisJCX0KKwkgICAgICBjdXJfbm9kZSA9IHBvcF9mYWlsX3N0YWNrIChmcywgJmlkeCwgbm1hdGNoLCBwbWF0Y2gsCisJCQkJCSAmZXBzX3ZpYV9ub2Rlcyk7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIHJlX25vZGVfc2V0X2ZyZWUgKCZlcHNfdmlhX25vZGVzKTsKKwkgICAgICBpZiAocHJldl9pZHhfbWF0Y2hfbWFsbG9jZWQpCisJCXJlX2ZyZWUgKHByZXZfaWR4X21hdGNoKTsKKwkgICAgICByZXR1cm4gUkVHX05PRVJST1I7CisJICAgIH0KKwl9CisKKyAgICAgIC8qIFByb2NlZWQgdG8gbmV4dCBub2RlLiAgKi8KKyAgICAgIGN1cl9ub2RlID0gcHJvY2VlZF9uZXh0X25vZGUgKG1jdHgsIG5tYXRjaCwgcG1hdGNoLCAmaWR4LCBjdXJfbm9kZSwKKwkJCQkgICAgJmVwc192aWFfbm9kZXMsIGZzKTsKKworICAgICAgaWYgKEJFICghIFJFR19WQUxJRF9JTkRFWCAoY3VyX25vZGUpLCAwKSkKKwl7CisJICBpZiAoQkUgKGN1cl9ub2RlID09IFJFR19FUlJPUiwgMCkpCisJICAgIHsKKwkgICAgICByZV9ub2RlX3NldF9mcmVlICgmZXBzX3ZpYV9ub2Rlcyk7CisJICAgICAgaWYgKHByZXZfaWR4X21hdGNoX21hbGxvY2VkKQorCQlyZV9mcmVlIChwcmV2X2lkeF9tYXRjaCk7CisJICAgICAgZnJlZV9mYWlsX3N0YWNrX3JldHVybiAoZnMpOworCSAgICAgIHJldHVybiBSRUdfRVNQQUNFOworCSAgICB9CisJICBpZiAoZnMpCisJICAgIGN1cl9ub2RlID0gcG9wX2ZhaWxfc3RhY2sgKGZzLCAmaWR4LCBubWF0Y2gsIHBtYXRjaCwKKwkJCQkgICAgICAgJmVwc192aWFfbm9kZXMpOworCSAgZWxzZQorCSAgICB7CisJICAgICAgcmVfbm9kZV9zZXRfZnJlZSAoJmVwc192aWFfbm9kZXMpOworCSAgICAgIGlmIChwcmV2X2lkeF9tYXRjaF9tYWxsb2NlZCkKKwkJcmVfZnJlZSAocHJldl9pZHhfbWF0Y2gpOworCSAgICAgIHJldHVybiBSRUdfTk9NQVRDSDsKKwkgICAgfQorCX0KKyAgICB9CisgIHJlX25vZGVfc2V0X2ZyZWUgKCZlcHNfdmlhX25vZGVzKTsKKyAgaWYgKHByZXZfaWR4X21hdGNoX21hbGxvY2VkKQorICAgIHJlX2ZyZWUgKHByZXZfaWR4X21hdGNoKTsKKyAgcmV0dXJuIGZyZWVfZmFpbF9zdGFja19yZXR1cm4gKGZzKTsKK30KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCitmcmVlX2ZhaWxfc3RhY2tfcmV0dXJuIChzdHJ1Y3QgcmVfZmFpbF9zdGFja190ICpmcykKK3sKKyAgaWYgKGZzKQorICAgIHsKKyAgICAgIElkeCBmc19pZHg7CisgICAgICBmb3IgKGZzX2lkeCA9IDA7IGZzX2lkeCA8IGZzLT5udW07ICsrZnNfaWR4KQorCXsKKwkgIHJlX25vZGVfc2V0X2ZyZWUgKCZmcy0+c3RhY2tbZnNfaWR4XS5lcHNfdmlhX25vZGVzKTsKKwkgIHJlX2ZyZWUgKGZzLT5zdGFja1tmc19pZHhdLnJlZ3MpOworCX0KKyAgICAgIHJlX2ZyZWUgKGZzLT5zdGFjayk7CisgICAgfQorICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKK3N0YXRpYyB2b2lkCitpbnRlcm5hbF9mdW5jdGlvbgordXBkYXRlX3JlZ3MgKGNvbnN0IHJlX2RmYV90ICpkZmEsIHJlZ21hdGNoX3QgKnBtYXRjaCwKKwkgICAgIHJlZ21hdGNoX3QgKnByZXZfaWR4X21hdGNoLCBJZHggY3VyX25vZGUsIElkeCBjdXJfaWR4LCBJZHggbm1hdGNoKQoreworICBpbnQgdHlwZSA9IGRmYS0+bm9kZXNbY3VyX25vZGVdLnR5cGU7CisgIGlmICh0eXBlID09IE9QX09QRU5fU1VCRVhQKQorICAgIHsKKyAgICAgIElkeCByZWdfbnVtID0gZGZhLT5ub2Rlc1tjdXJfbm9kZV0ub3ByLmlkeCArIDE7CisKKyAgICAgIC8qIFdlIGFyZSBhdCB0aGUgZmlyc3Qgbm9kZSBvZiB0aGlzIHN1YiBleHByZXNzaW9uLiAgKi8KKyAgICAgIGlmIChyZWdfbnVtIDwgbm1hdGNoKQorCXsKKwkgIHBtYXRjaFtyZWdfbnVtXS5ybV9zbyA9IGN1cl9pZHg7CisJICBwbWF0Y2hbcmVnX251bV0ucm1fZW8gPSAtMTsKKwl9CisgICAgfQorICBlbHNlIGlmICh0eXBlID09IE9QX0NMT1NFX1NVQkVYUCkKKyAgICB7CisgICAgICBJZHggcmVnX251bSA9IGRmYS0+bm9kZXNbY3VyX25vZGVdLm9wci5pZHggKyAxOworICAgICAgaWYgKHJlZ19udW0gPCBubWF0Y2gpCisJeworCSAgLyogV2UgYXJlIGF0IHRoZSBsYXN0IG5vZGUgb2YgdGhpcyBzdWIgZXhwcmVzc2lvbi4gICovCisJICBpZiAocG1hdGNoW3JlZ19udW1dLnJtX3NvIDwgY3VyX2lkeCkKKwkgICAgeworCSAgICAgIHBtYXRjaFtyZWdfbnVtXS5ybV9lbyA9IGN1cl9pZHg7CisJICAgICAgLyogVGhpcyBpcyBhIG5vbi1lbXB0eSBtYXRjaCBvciB3ZSBhcmUgbm90IGluc2lkZSBhbiBvcHRpb25hbAorCQkgc3ViZXhwcmVzc2lvbi4gIEFjY2VwdCB0aGlzIHJpZ2h0IGF3YXkuICAqLworCSAgICAgIG1lbWNweSAocHJldl9pZHhfbWF0Y2gsIHBtYXRjaCwgc2l6ZW9mIChyZWdtYXRjaF90KSAqIG5tYXRjaCk7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIGlmIChkZmEtPm5vZGVzW2N1cl9ub2RlXS5vcHRfc3ViZXhwCisJCSAgJiYgcHJldl9pZHhfbWF0Y2hbcmVnX251bV0ucm1fc28gIT0gLTEpCisJCS8qIFdlIHRyYW5zaXRlZCB0aHJvdWdoIGFuIGVtcHR5IG1hdGNoIGZvciBhbiBvcHRpb25hbAorCQkgICBzdWJleHByZXNzaW9uLCBsaWtlIChhPykqLCBhbmQgdGhpcyBpcyBub3QgdGhlIHN1YmV4cCdzCisJCSAgIGZpcnN0IG1hdGNoLiAgQ29weSBiYWNrIHRoZSBvbGQgY29udGVudCBvZiB0aGUgcmVnaXN0ZXJzCisJCSAgIHNvIHRoYXQgbWF0Y2hlcyBvZiBhbiBpbm5lciBzdWJleHByZXNzaW9uIGFyZSB1bmRvbmUgYXMKKwkJICAgd2VsbCwgbGlrZSBpbiAoKGE/KSkqLiAgKi8KKwkJbWVtY3B5IChwbWF0Y2gsIHByZXZfaWR4X21hdGNoLCBzaXplb2YgKHJlZ21hdGNoX3QpICogbm1hdGNoKTsKKwkgICAgICBlbHNlCisJCS8qIFdlIGNvbXBsZXRlZCBhIHN1YmV4cHJlc3Npb24sIGJ1dCBpdCBtYXkgYmUgcGFydCBvZgorCQkgICBhbiBvcHRpb25hbCBvbmUsIHNvIGRvIG5vdCB1cGRhdGUgUFJFVl9JRFhfTUFUQ0guICAqLworCQlwbWF0Y2hbcmVnX251bV0ucm1fZW8gPSBjdXJfaWR4OworCSAgICB9CisJfQorICAgIH0KK30KKworLyogVGhpcyBmdW5jdGlvbiBjaGVja3MgdGhlIFNUQVRFX0xPRyBmcm9tIHRoZSBTQ1RYLT5sYXN0X3N0cl9pZHggdG8gMAorICAgYW5kIHNpZnQgdGhlIG5vZGVzIGluIGVhY2ggc3RhdGVzIGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIHJ1bGVzLgorICAgVXBkYXRlZCBzdGF0ZV9sb2cgd2lsbCBiZSB3cm90ZSB0byBTVEFURV9MT0cuCisKKyAgIFJ1bGVzOiBXZSB0aHJvdyBhd2F5IHRoZSBOb2RlIGBhJyBpbiB0aGUgU1RBVEVfTE9HW1NUUl9JRFhdIGlmLi4uCisgICAgIDEuIFdoZW4gU1RSX0lEWCA9PSBNQVRDSF9MQVNUKHRoZSBsYXN0IGluZGV4IGluIHRoZSBzdGF0ZV9sb2cpOgorCUlmIGBhJyBpc24ndCB0aGUgTEFTVF9OT0RFIGFuZCBgYScgY2FuJ3QgZXBzaWxvbiB0cmFuc2l0IHRvCisJdGhlIExBU1RfTk9ERSwgd2UgdGhyb3cgYXdheSB0aGUgbm9kZSBgYScuCisgICAgIDIuIFdoZW4gMCA8PSBTVFJfSURYIDwgTUFUQ0hfTEFTVCBhbmQgYGEnIGFjY2VwdHMKKwlzdHJpbmcgYHMnIGFuZCB0cmFuc2l0IHRvIGBiJzoKKwlpLiBJZiAnYicgaXNuJ3QgaW4gdGhlIFNUQVRFX0xPR1tTVFJfSURYK3N0cmxlbigncycpXSwgd2UgdGhyb3cKKwkgICBhd2F5IHRoZSBub2RlIGBhJy4KKwlpaS4gSWYgJ2InIGlzIGluIHRoZSBTVEFURV9MT0dbU1RSX0lEWCtzdHJsZW4oJ3MnKV0gYnV0ICdiJyBpcworCSAgICB0aHJvd24gYXdheSwgd2UgdGhyb3cgYXdheSB0aGUgbm9kZSBgYScuCisgICAgIDMuIFdoZW4gMCA8PSBTVFJfSURYIDwgTUFUQ0hfTEFTVCBhbmQgJ2EnIGVwc2lsb24gdHJhbnNpdCB0byAnYic6CisJaS4gSWYgJ2InIGlzbid0IGluIHRoZSBTVEFURV9MT0dbU1RSX0lEWF0sIHdlIHRocm93IGF3YXkgdGhlCisJICAgbm9kZSBgYScuCisJaWkuIElmICdiJyBpcyBpbiB0aGUgU1RBVEVfTE9HW1NUUl9JRFhdIGJ1dCAnYicgaXMgdGhyb3duIGF3YXksCisJICAgIHdlIHRocm93IGF3YXkgdGhlIG5vZGUgYGEnLiAgKi8KKworI2RlZmluZSBTVEFURV9OT0RFX0NPTlRBSU5TKHN0YXRlLG5vZGUpIFwKKyAgKChzdGF0ZSkgIT0gTlVMTCAmJiByZV9ub2RlX3NldF9jb250YWlucyAoJihzdGF0ZSktPm5vZGVzLCBub2RlKSkKKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCitzaWZ0X3N0YXRlc19iYWNrd2FyZCAoY29uc3QgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LCByZV9zaWZ0X2NvbnRleHRfdCAqc2N0eCkKK3sKKyAgcmVnX2VycmNvZGVfdCBlcnI7CisgIGludCBudWxsX2NudCA9IDA7CisgIElkeCBzdHJfaWR4ID0gc2N0eC0+bGFzdF9zdHJfaWR4OworICByZV9ub2RlX3NldCBjdXJfZGVzdDsKKworI2lmZGVmIERFQlVHCisgIGFzc2VydCAobWN0eC0+c3RhdGVfbG9nICE9IE5VTEwgJiYgbWN0eC0+c3RhdGVfbG9nW3N0cl9pZHhdICE9IE5VTEwpOworI2VuZGlmCisKKyAgLyogQnVpbGQgc2lmdGVkIHN0YXRlX2xvZ1tzdHJfaWR4XS4gIEl0IGhhcyB0aGUgbm9kZXMgd2hpY2ggY2FuIGVwc2lsb24KKyAgICAgdHJhbnNpdCB0byB0aGUgbGFzdF9ub2RlIGFuZCB0aGUgbGFzdF9ub2RlIGl0c2VsZi4gICovCisgIGVyciA9IHJlX25vZGVfc2V0X2luaXRfMSAoJmN1cl9kZXN0LCBzY3R4LT5sYXN0X25vZGUpOworICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisgICAgcmV0dXJuIGVycjsKKyAgZXJyID0gdXBkYXRlX2N1cl9zaWZ0ZWRfc3RhdGUgKG1jdHgsIHNjdHgsIHN0cl9pZHgsICZjdXJfZGVzdCk7CisgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICBnb3RvIGZyZWVfcmV0dXJuOworCisgIC8qIFRoZW4gY2hlY2sgZWFjaCBzdGF0ZXMgaW4gdGhlIHN0YXRlX2xvZy4gICovCisgIHdoaWxlIChzdHJfaWR4ID4gMCkKKyAgICB7CisgICAgICAvKiBVcGRhdGUgY291bnRlcnMuICAqLworICAgICAgbnVsbF9jbnQgPSAoc2N0eC0+c2lmdGVkX3N0YXRlc1tzdHJfaWR4XSA9PSBOVUxMKSA/IG51bGxfY250ICsgMSA6IDA7CisgICAgICBpZiAobnVsbF9jbnQgPiBtY3R4LT5tYXhfbWJfZWxlbV9sZW4pCisJeworCSAgbWVtc2V0IChzY3R4LT5zaWZ0ZWRfc3RhdGVzLCAnXDAnLAorCQkgIHNpemVvZiAocmVfZGZhc3RhdGVfdCAqKSAqIHN0cl9pZHgpOworCSAgcmVfbm9kZV9zZXRfZnJlZSAoJmN1cl9kZXN0KTsKKwkgIHJldHVybiBSRUdfTk9FUlJPUjsKKwl9CisgICAgICByZV9ub2RlX3NldF9lbXB0eSAoJmN1cl9kZXN0KTsKKyAgICAgIC0tc3RyX2lkeDsKKworICAgICAgaWYgKG1jdHgtPnN0YXRlX2xvZ1tzdHJfaWR4XSkKKwl7CisJICBlcnIgPSBidWlsZF9zaWZ0ZWRfc3RhdGVzIChtY3R4LCBzY3R4LCBzdHJfaWR4LCAmY3VyX2Rlc3QpOworICAgICAgICAgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgZ290byBmcmVlX3JldHVybjsKKwl9CisKKyAgICAgIC8qIEFkZCBhbGwgdGhlIG5vZGVzIHdoaWNoIHNhdGlzZnkgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCSAtIEl0IGNhbiBlcHNpbG9uIHRyYW5zaXQgdG8gYSBub2RlIGluIENVUl9ERVNULgorCSAtIEl0IGlzIGluIENVUl9TUkMuCisJIEFuZCB1cGRhdGUgc3RhdGVfbG9nLiAgKi8KKyAgICAgIGVyciA9IHVwZGF0ZV9jdXJfc2lmdGVkX3N0YXRlIChtY3R4LCBzY3R4LCBzdHJfaWR4LCAmY3VyX2Rlc3QpOworICAgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCWdvdG8gZnJlZV9yZXR1cm47CisgICAgfQorICBlcnIgPSBSRUdfTk9FUlJPUjsKKyBmcmVlX3JldHVybjoKKyAgcmVfbm9kZV9zZXRfZnJlZSAoJmN1cl9kZXN0KTsKKyAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCitidWlsZF9zaWZ0ZWRfc3RhdGVzIChjb25zdCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIHJlX3NpZnRfY29udGV4dF90ICpzY3R4LAorCQkgICAgIElkeCBzdHJfaWR4LCByZV9ub2RlX3NldCAqY3VyX2Rlc3QpCit7CisgIGNvbnN0IHJlX2RmYV90ICpjb25zdCBkZmEgPSBtY3R4LT5kZmE7CisgIGNvbnN0IHJlX25vZGVfc2V0ICpjdXJfc3JjID0gJm1jdHgtPnN0YXRlX2xvZ1tzdHJfaWR4XS0+bm9uX2Vwc19ub2RlczsKKyAgSWR4IGk7CisKKyAgLyogVGhlbiBidWlsZCB0aGUgbmV4dCBzaWZ0ZWQgc3RhdGUuCisgICAgIFdlIGJ1aWxkIHRoZSBuZXh0IHNpZnRlZCBzdGF0ZSBvbiBgY3VyX2Rlc3QnLCBhbmQgdXBkYXRlCisgICAgIGBzaWZ0ZWRfc3RhdGVzW3N0cl9pZHhdJyB3aXRoIGBjdXJfZGVzdCcuCisgICAgIE5vdGU6CisgICAgIGBjdXJfZGVzdCcgaXMgdGhlIHNpZnRlZCBzdGF0ZSBmcm9tIGBzdGF0ZV9sb2dbc3RyX2lkeCArIDFdJy4KKyAgICAgYGN1cl9zcmMnIHBvaW50cyB0aGUgbm9kZV9zZXQgb2YgdGhlIG9sZCBgc3RhdGVfbG9nW3N0cl9pZHhdJworICAgICAod2l0aCB0aGUgZXBzaWxvbiBub2RlcyBwcmUtZmlsdGVyZWQgb3V0KS4gICovCisgIGZvciAoaSA9IDA7IGkgPCBjdXJfc3JjLT5uZWxlbTsgaSsrKQorICAgIHsKKyAgICAgIElkeCBwcmV2X25vZGUgPSBjdXJfc3JjLT5lbGVtc1tpXTsKKyAgICAgIGludCBuYWNjZXB0ZWQgPSAwOworICAgICAgYm9vbCBvazsKKworI2lmZGVmIERFQlVHCisgICAgICByZV90b2tlbl90eXBlX3QgdHlwZSA9IGRmYS0+bm9kZXNbcHJldl9ub2RlXS50eXBlOworICAgICAgYXNzZXJ0ICghSVNfRVBTSUxPTl9OT0RFICh0eXBlKSk7CisjZW5kaWYKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAgICAgLyogSWYgdGhlIG5vZGUgbWF5IGFjY2VwdCBgbXVsdGkgYnl0ZScuICAqLworICAgICAgaWYgKGRmYS0+bm9kZXNbcHJldl9ub2RlXS5hY2NlcHRfbWIpCisJbmFjY2VwdGVkID0gc2lmdF9zdGF0ZXNfaXRlcl9tYiAobWN0eCwgc2N0eCwgcHJldl9ub2RlLAorCQkJCQkgc3RyX2lkeCwgc2N0eC0+bGFzdF9zdHJfaWR4KTsKKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworCisgICAgICAvKiBXZSBkb24ndCBjaGVjayBiYWNrcmVmZXJlbmNlcyBoZXJlLgorCSBTZWUgdXBkYXRlX2N1cl9zaWZ0ZWRfc3RhdGUoKS4gICovCisgICAgICBpZiAoIW5hY2NlcHRlZAorCSAgJiYgY2hlY2tfbm9kZV9hY2NlcHQgKG1jdHgsIGRmYS0+bm9kZXMgKyBwcmV2X25vZGUsIHN0cl9pZHgpCisJICAmJiBTVEFURV9OT0RFX0NPTlRBSU5TIChzY3R4LT5zaWZ0ZWRfc3RhdGVzW3N0cl9pZHggKyAxXSwKKwkJCQkgIGRmYS0+bmV4dHNbcHJldl9ub2RlXSkpCisJbmFjY2VwdGVkID0gMTsKKworICAgICAgaWYgKG5hY2NlcHRlZCA9PSAwKQorCWNvbnRpbnVlOworCisgICAgICBpZiAoc2N0eC0+bGltaXRzLm5lbGVtKQorCXsKKwkgIElkeCB0b19pZHggPSBzdHJfaWR4ICsgbmFjY2VwdGVkOworCSAgaWYgKGNoZWNrX2RzdF9saW1pdHMgKG1jdHgsICZzY3R4LT5saW1pdHMsCisJCQkJZGZhLT5uZXh0c1twcmV2X25vZGVdLCB0b19pZHgsCisJCQkJcHJldl9ub2RlLCBzdHJfaWR4KSkKKwkgICAgY29udGludWU7CisJfQorICAgICAgb2sgPSByZV9ub2RlX3NldF9pbnNlcnQgKGN1cl9kZXN0LCBwcmV2X25vZGUpOworICAgICAgaWYgKEJFICghIG9rLCAwKSkKKwlyZXR1cm4gUkVHX0VTUEFDRTsKKyAgICB9CisKKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCisvKiBIZWxwZXIgZnVuY3Rpb25zLiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCitjbGVhbl9zdGF0ZV9sb2dfaWZfbmVlZGVkIChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIElkeCBuZXh0X3N0YXRlX2xvZ19pZHgpCit7CisgIElkeCB0b3AgPSBtY3R4LT5zdGF0ZV9sb2dfdG9wOworCisgIGlmIChuZXh0X3N0YXRlX2xvZ19pZHggPj0gbWN0eC0+aW5wdXQuYnVmc19sZW4KKyAgICAgIHx8IChuZXh0X3N0YXRlX2xvZ19pZHggPj0gbWN0eC0+aW5wdXQudmFsaWRfbGVuCisJICAmJiBtY3R4LT5pbnB1dC52YWxpZF9sZW4gPCBtY3R4LT5pbnB1dC5sZW4pKQorICAgIHsKKyAgICAgIHJlZ19lcnJjb2RlX3QgZXJyOworICAgICAgZXJyID0gZXh0ZW5kX2J1ZmZlcnMgKG1jdHgpOworICAgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCXJldHVybiBlcnI7CisgICAgfQorCisgIGlmICh0b3AgPCBuZXh0X3N0YXRlX2xvZ19pZHgpCisgICAgeworICAgICAgbWVtc2V0IChtY3R4LT5zdGF0ZV9sb2cgKyB0b3AgKyAxLCAnXDAnLAorCSAgICAgIHNpemVvZiAocmVfZGZhc3RhdGVfdCAqKSAqIChuZXh0X3N0YXRlX2xvZ19pZHggLSB0b3ApKTsKKyAgICAgIG1jdHgtPnN0YXRlX2xvZ190b3AgPSBuZXh0X3N0YXRlX2xvZ19pZHg7CisgICAgfQorICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorbWVyZ2Vfc3RhdGVfYXJyYXkgKGNvbnN0IHJlX2RmYV90ICpkZmEsIHJlX2RmYXN0YXRlX3QgKipkc3QsCisJCSAgIHJlX2RmYXN0YXRlX3QgKipzcmMsIElkeCBudW0pCit7CisgIElkeCBzdF9pZHg7CisgIHJlZ19lcnJjb2RlX3QgZXJyOworICBmb3IgKHN0X2lkeCA9IDA7IHN0X2lkeCA8IG51bTsgKytzdF9pZHgpCisgICAgeworICAgICAgaWYgKGRzdFtzdF9pZHhdID09IE5VTEwpCisJZHN0W3N0X2lkeF0gPSBzcmNbc3RfaWR4XTsKKyAgICAgIGVsc2UgaWYgKHNyY1tzdF9pZHhdICE9IE5VTEwpCisJeworCSAgcmVfbm9kZV9zZXQgbWVyZ2VkX3NldDsKKwkgIGVyciA9IHJlX25vZGVfc2V0X2luaXRfdW5pb24gKCZtZXJnZWRfc2V0LCAmZHN0W3N0X2lkeF0tPm5vZGVzLAorCQkJCQkmc3JjW3N0X2lkeF0tPm5vZGVzKTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgcmV0dXJuIGVycjsKKwkgIGRzdFtzdF9pZHhdID0gcmVfYWNxdWlyZV9zdGF0ZSAoJmVyciwgZGZhLCAmbWVyZ2VkX3NldCk7CisJICByZV9ub2RlX3NldF9mcmVlICgmbWVyZ2VkX3NldCk7CisJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHJldHVybiBlcnI7CisJfQorICAgIH0KKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK3VwZGF0ZV9jdXJfc2lmdGVkX3N0YXRlIChjb25zdCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsCisJCQkgcmVfc2lmdF9jb250ZXh0X3QgKnNjdHgsIElkeCBzdHJfaWR4LAorCQkJIHJlX25vZGVfc2V0ICpkZXN0X25vZGVzKQoreworICBjb25zdCByZV9kZmFfdCAqY29uc3QgZGZhID0gbWN0eC0+ZGZhOworICByZWdfZXJyY29kZV90IGVyciA9IFJFR19OT0VSUk9SOworICBjb25zdCByZV9ub2RlX3NldCAqY2FuZGlkYXRlczsKKyAgY2FuZGlkYXRlcyA9ICgobWN0eC0+c3RhdGVfbG9nW3N0cl9pZHhdID09IE5VTEwpID8gTlVMTAorCQk6ICZtY3R4LT5zdGF0ZV9sb2dbc3RyX2lkeF0tPm5vZGVzKTsKKworICBpZiAoZGVzdF9ub2Rlcy0+bmVsZW0gPT0gMCkKKyAgICBzY3R4LT5zaWZ0ZWRfc3RhdGVzW3N0cl9pZHhdID0gTlVMTDsKKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChjYW5kaWRhdGVzKQorCXsKKwkgIC8qIEF0IGZpcnN0LCBhZGQgdGhlIG5vZGVzIHdoaWNoIGNhbiBlcHNpbG9uIHRyYW5zaXQgdG8gYSBub2RlIGluCisJICAgICBERVNUX05PREUuICAqLworCSAgZXJyID0gYWRkX2Vwc2lsb25fc3JjX25vZGVzIChkZmEsIGRlc3Rfbm9kZXMsIGNhbmRpZGF0ZXMpOworCSAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCSAgICByZXR1cm4gZXJyOworCisJICAvKiBUaGVuLCBjaGVjayB0aGUgbGltaXRhdGlvbnMgaW4gdGhlIGN1cnJlbnQgc2lmdF9jb250ZXh0LiAgKi8KKwkgIGlmIChzY3R4LT5saW1pdHMubmVsZW0pCisJICAgIHsKKwkgICAgICBlcnIgPSBjaGVja19zdWJleHBfbGltaXRzIChkZmEsIGRlc3Rfbm9kZXMsIGNhbmRpZGF0ZXMsICZzY3R4LT5saW1pdHMsCisJCQkJCSBtY3R4LT5ia3JlZl9lbnRzLCBzdHJfaWR4KTsKKwkgICAgICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJCXJldHVybiBlcnI7CisJICAgIH0KKwl9CisKKyAgICAgIHNjdHgtPnNpZnRlZF9zdGF0ZXNbc3RyX2lkeF0gPSByZV9hY3F1aXJlX3N0YXRlICgmZXJyLCBkZmEsIGRlc3Rfbm9kZXMpOworICAgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCXJldHVybiBlcnI7CisgICAgfQorCisgIGlmIChjYW5kaWRhdGVzICYmIG1jdHgtPnN0YXRlX2xvZ1tzdHJfaWR4XS0+aGFzX2JhY2tyZWYpCisgICAgeworICAgICAgZXJyID0gc2lmdF9zdGF0ZXNfYmtyZWYgKG1jdHgsIHNjdHgsIHN0cl9pZHgsIGNhbmRpZGF0ZXMpOworICAgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCXJldHVybiBlcnI7CisgICAgfQorICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorYWRkX2Vwc2lsb25fc3JjX25vZGVzIChjb25zdCByZV9kZmFfdCAqZGZhLCByZV9ub2RlX3NldCAqZGVzdF9ub2RlcywKKwkJICAgICAgIGNvbnN0IHJlX25vZGVfc2V0ICpjYW5kaWRhdGVzKQoreworICByZWdfZXJyY29kZV90IGVyciA9IFJFR19OT0VSUk9SOworICBJZHggaTsKKworICByZV9kZmFzdGF0ZV90ICpzdGF0ZSA9IHJlX2FjcXVpcmVfc3RhdGUgKCZlcnIsIGRmYSwgZGVzdF9ub2Rlcyk7CisgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICByZXR1cm4gZXJyOworCisgIGlmICghc3RhdGUtPmludmVjbG9zdXJlLmFsbG9jKQorICAgIHsKKyAgICAgIGVyciA9IHJlX25vZGVfc2V0X2FsbG9jICgmc3RhdGUtPmludmVjbG9zdXJlLCBkZXN0X25vZGVzLT5uZWxlbSk7CisgICAgICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisgICAgICAgIHJldHVybiBSRUdfRVNQQUNFOworICAgICAgZm9yIChpID0gMDsgaSA8IGRlc3Rfbm9kZXMtPm5lbGVtOyBpKyspCisgICAgICAgIHJlX25vZGVfc2V0X21lcmdlICgmc3RhdGUtPmludmVjbG9zdXJlLAorCQkJICAgZGZhLT5pbnZlY2xvc3VyZXMgKyBkZXN0X25vZGVzLT5lbGVtc1tpXSk7CisgICAgfQorICByZXR1cm4gcmVfbm9kZV9zZXRfYWRkX2ludGVyc2VjdCAoZGVzdF9ub2RlcywgY2FuZGlkYXRlcywKKwkJCQkgICAgJnN0YXRlLT5pbnZlY2xvc3VyZSk7Cit9CisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorc3ViX2Vwc2lsb25fc3JjX25vZGVzIChjb25zdCByZV9kZmFfdCAqZGZhLCBJZHggbm9kZSwgcmVfbm9kZV9zZXQgKmRlc3Rfbm9kZXMsCisJCSAgICAgICBjb25zdCByZV9ub2RlX3NldCAqY2FuZGlkYXRlcykKK3sKKyAgICBJZHggZWNsX2lkeDsKKyAgICByZWdfZXJyY29kZV90IGVycjsKKyAgICByZV9ub2RlX3NldCAqaW52X2VjbG9zdXJlID0gZGZhLT5pbnZlY2xvc3VyZXMgKyBub2RlOworICAgIHJlX25vZGVfc2V0IGV4Y2VwdF9ub2RlczsKKyAgICByZV9ub2RlX3NldF9pbml0X2VtcHR5ICgmZXhjZXB0X25vZGVzKTsKKyAgICBmb3IgKGVjbF9pZHggPSAwOyBlY2xfaWR4IDwgaW52X2VjbG9zdXJlLT5uZWxlbTsgKytlY2xfaWR4KQorICAgICAgeworCUlkeCBjdXJfbm9kZSA9IGludl9lY2xvc3VyZS0+ZWxlbXNbZWNsX2lkeF07CisJaWYgKGN1cl9ub2RlID09IG5vZGUpCisJICBjb250aW51ZTsKKwlpZiAoSVNfRVBTSUxPTl9OT0RFIChkZmEtPm5vZGVzW2N1cl9ub2RlXS50eXBlKSkKKwkgIHsKKwkgICAgSWR4IGVkc3QxID0gZGZhLT5lZGVzdHNbY3VyX25vZGVdLmVsZW1zWzBdOworCSAgICBJZHggZWRzdDIgPSAoKGRmYS0+ZWRlc3RzW2N1cl9ub2RlXS5uZWxlbSA+IDEpCisJCQkgPyBkZmEtPmVkZXN0c1tjdXJfbm9kZV0uZWxlbXNbMV0gOiBSRUdfTUlTU0lORyk7CisJICAgIGlmICgoIXJlX25vZGVfc2V0X2NvbnRhaW5zIChpbnZfZWNsb3N1cmUsIGVkc3QxKQorCQkgJiYgcmVfbm9kZV9zZXRfY29udGFpbnMgKGRlc3Rfbm9kZXMsIGVkc3QxKSkKKwkJfHwgKFJFR19WQUxJRF9OT05aRVJPX0lOREVYIChlZHN0MikKKwkJICAgICYmICFyZV9ub2RlX3NldF9jb250YWlucyAoaW52X2VjbG9zdXJlLCBlZHN0MikKKwkJICAgICYmIHJlX25vZGVfc2V0X2NvbnRhaW5zIChkZXN0X25vZGVzLCBlZHN0MikpKQorCSAgICAgIHsKKwkJZXJyID0gcmVfbm9kZV9zZXRfYWRkX2ludGVyc2VjdCAoJmV4Y2VwdF9ub2RlcywgY2FuZGlkYXRlcywKKwkJCQkJCSBkZmEtPmludmVjbG9zdXJlcyArIGN1cl9ub2RlKTsKKwkJaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCQkgIHsKKwkJICAgIHJlX25vZGVfc2V0X2ZyZWUgKCZleGNlcHRfbm9kZXMpOworCQkgICAgcmV0dXJuIGVycjsKKwkJICB9CisJICAgICAgfQorCSAgfQorICAgICAgfQorICAgIGZvciAoZWNsX2lkeCA9IDA7IGVjbF9pZHggPCBpbnZfZWNsb3N1cmUtPm5lbGVtOyArK2VjbF9pZHgpCisgICAgICB7CisJSWR4IGN1cl9ub2RlID0gaW52X2VjbG9zdXJlLT5lbGVtc1tlY2xfaWR4XTsKKwlpZiAoIXJlX25vZGVfc2V0X2NvbnRhaW5zICgmZXhjZXB0X25vZGVzLCBjdXJfbm9kZSkpCisJICB7CisJICAgIElkeCBpZHggPSByZV9ub2RlX3NldF9jb250YWlucyAoZGVzdF9ub2RlcywgY3VyX25vZGUpIC0gMTsKKwkgICAgcmVfbm9kZV9zZXRfcmVtb3ZlX2F0IChkZXN0X25vZGVzLCBpZHgpOworCSAgfQorICAgICAgfQorICAgIHJlX25vZGVfc2V0X2ZyZWUgKCZleGNlcHRfbm9kZXMpOworICAgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworc3RhdGljIGJvb2wKK2ludGVybmFsX2Z1bmN0aW9uCitjaGVja19kc3RfbGltaXRzIChjb25zdCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIGNvbnN0IHJlX25vZGVfc2V0ICpsaW1pdHMsCisJCSAgSWR4IGRzdF9ub2RlLCBJZHggZHN0X2lkeCwgSWR4IHNyY19ub2RlLCBJZHggc3JjX2lkeCkKK3sKKyAgY29uc3QgcmVfZGZhX3QgKmNvbnN0IGRmYSA9IG1jdHgtPmRmYTsKKyAgSWR4IGxpbV9pZHgsIHNyY19wb3MsIGRzdF9wb3M7CisKKyAgSWR4IGRzdF9ia3JlZl9pZHggPSBzZWFyY2hfY3VyX2JrcmVmX2VudHJ5IChtY3R4LCBkc3RfaWR4KTsKKyAgSWR4IHNyY19ia3JlZl9pZHggPSBzZWFyY2hfY3VyX2JrcmVmX2VudHJ5IChtY3R4LCBzcmNfaWR4KTsKKyAgZm9yIChsaW1faWR4ID0gMDsgbGltX2lkeCA8IGxpbWl0cy0+bmVsZW07ICsrbGltX2lkeCkKKyAgICB7CisgICAgICBJZHggc3ViZXhwX2lkeDsKKyAgICAgIHN0cnVjdCByZV9iYWNrcmVmX2NhY2hlX2VudHJ5ICplbnQ7CisgICAgICBlbnQgPSBtY3R4LT5ia3JlZl9lbnRzICsgbGltaXRzLT5lbGVtc1tsaW1faWR4XTsKKyAgICAgIHN1YmV4cF9pZHggPSBkZmEtPm5vZGVzW2VudC0+bm9kZV0ub3ByLmlkeDsKKworICAgICAgZHN0X3BvcyA9IGNoZWNrX2RzdF9saW1pdHNfY2FsY19wb3MgKG1jdHgsIGxpbWl0cy0+ZWxlbXNbbGltX2lkeF0sCisJCQkJCSAgIHN1YmV4cF9pZHgsIGRzdF9ub2RlLCBkc3RfaWR4LAorCQkJCQkgICBkc3RfYmtyZWZfaWR4KTsKKyAgICAgIHNyY19wb3MgPSBjaGVja19kc3RfbGltaXRzX2NhbGNfcG9zIChtY3R4LCBsaW1pdHMtPmVsZW1zW2xpbV9pZHhdLAorCQkJCQkgICBzdWJleHBfaWR4LCBzcmNfbm9kZSwgc3JjX2lkeCwKKwkJCQkJICAgc3JjX2JrcmVmX2lkeCk7CisKKyAgICAgIC8qIEluIGNhc2Ugb2Y6CisJIDxzcmM+IDxkc3Q+ICggPHN1YmV4cD4gKQorCSAoIDxzdWJleHA+ICkgPHNyYz4gPGRzdD4KKwkgKCA8c3ViZXhwMT4gPHNyYz4gPHN1YmV4cDI+IDxkc3Q+IDxzdWJleHAzPiApICAqLworICAgICAgaWYgKHNyY19wb3MgPT0gZHN0X3BvcykKKwljb250aW51ZTsgLyogVGhpcyBpcyB1bnJlbGF0ZWQgbGltaXRhdGlvbi4gICovCisgICAgICBlbHNlCisJcmV0dXJuIHRydWU7CisgICAgfQorICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbnQKK2ludGVybmFsX2Z1bmN0aW9uCitjaGVja19kc3RfbGltaXRzX2NhbGNfcG9zXzEgKGNvbnN0IHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwgaW50IGJvdW5kYXJpZXMsCisJCQkgICAgIElkeCBzdWJleHBfaWR4LCBJZHggZnJvbV9ub2RlLCBJZHggYmtyZWZfaWR4KQoreworICBjb25zdCByZV9kZmFfdCAqY29uc3QgZGZhID0gbWN0eC0+ZGZhOworICBjb25zdCByZV9ub2RlX3NldCAqZWNsb3N1cmVzID0gZGZhLT5lY2xvc3VyZXMgKyBmcm9tX25vZGU7CisgIElkeCBub2RlX2lkeDsKKworICAvKiBFbHNlLCB3ZSBhcmUgb24gdGhlIGJvdW5kYXJ5OiBleGFtaW5lIHRoZSBub2RlcyBvbiB0aGUgZXBzaWxvbgorICAgICBjbG9zdXJlLiAgKi8KKyAgZm9yIChub2RlX2lkeCA9IDA7IG5vZGVfaWR4IDwgZWNsb3N1cmVzLT5uZWxlbTsgKytub2RlX2lkeCkKKyAgICB7CisgICAgICBJZHggbm9kZSA9IGVjbG9zdXJlcy0+ZWxlbXNbbm9kZV9pZHhdOworICAgICAgc3dpdGNoIChkZmEtPm5vZGVzW25vZGVdLnR5cGUpCisJeworCWNhc2UgT1BfQkFDS19SRUY6CisJICBpZiAoYmtyZWZfaWR4ICE9IFJFR19NSVNTSU5HKQorCSAgICB7CisJICAgICAgc3RydWN0IHJlX2JhY2tyZWZfY2FjaGVfZW50cnkgKmVudCA9IG1jdHgtPmJrcmVmX2VudHMgKyBia3JlZl9pZHg7CisJICAgICAgZG8KKwkgICAgICAgIHsKKwkJICBJZHggZHN0OworCQkgIGludCBjcG9zOworCisJCSAgaWYgKGVudC0+bm9kZSAhPSBub2RlKQorCQkgICAgY29udGludWU7CisKKwkJICBpZiAoc3ViZXhwX2lkeCA8IEJJVFNFVF9XT1JEX0JJVFMKKwkJICAgICAgJiYgIShlbnQtPmVwc19yZWFjaGFibGVfc3ViZXhwc19tYXAKKwkJCSAgICYgKChiaXRzZXRfd29yZF90KSAxIDw8IHN1YmV4cF9pZHgpKSkKKwkJICAgIGNvbnRpbnVlOworCisJCSAgLyogUmVjdXJzZSB0cnlpbmcgdG8gcmVhY2ggdGhlIE9QX09QRU5fU1VCRVhQIGFuZAorCQkgICAgIE9QX0NMT1NFX1NVQkVYUCBjYXNlcyBiZWxvdy4gIEJ1dCwgaWYgdGhlCisJCSAgICAgZGVzdGluYXRpb24gbm9kZSBpcyB0aGUgc2FtZSBub2RlIGFzIHRoZSBzb3VyY2UKKwkJICAgICBub2RlLCBkb24ndCByZWN1cnNlIGJlY2F1c2UgaXQgd291bGQgY2F1c2UgYW4KKwkJICAgICBpbmZpbml0ZSBsb29wOiBhIHJlZ2V4IHRoYXQgZXhoaWJpdHMgdGhpcyBiZWhhdmlvcgorCQkgICAgIGlzICgpXDEqXDEqICAqLworCQkgIGRzdCA9IGRmYS0+ZWRlc3RzW25vZGVdLmVsZW1zWzBdOworCQkgIGlmIChkc3QgPT0gZnJvbV9ub2RlKQorCQkgICAgeworCQkgICAgICBpZiAoYm91bmRhcmllcyAmIDEpCisJCSAgICAgICAgcmV0dXJuIC0xOworCQkgICAgICBlbHNlIC8qIGlmIChib3VuZGFyaWVzICYgMikgKi8KKwkJICAgICAgICByZXR1cm4gMDsKKwkJICAgIH0KKworCQkgIGNwb3MgPQorCQkgICAgY2hlY2tfZHN0X2xpbWl0c19jYWxjX3Bvc18xIChtY3R4LCBib3VuZGFyaWVzLCBzdWJleHBfaWR4LAorCQkJCQkJIGRzdCwgYmtyZWZfaWR4KTsKKwkJICBpZiAoY3BvcyA9PSAtMSAvKiAmJiAoYm91bmRhcmllcyAmIDEpICovKQorCQkgICAgcmV0dXJuIC0xOworCQkgIGlmIChjcG9zID09IDAgJiYgKGJvdW5kYXJpZXMgJiAyKSkKKwkJICAgIHJldHVybiAwOworCisJCSAgaWYgKHN1YmV4cF9pZHggPCBCSVRTRVRfV09SRF9CSVRTKQorCQkgICAgZW50LT5lcHNfcmVhY2hhYmxlX3N1YmV4cHNfbWFwCisJCSAgICAgICY9IH4oKGJpdHNldF93b3JkX3QpIDEgPDwgc3ViZXhwX2lkeCk7CisJICAgICAgICB9CisJICAgICAgd2hpbGUgKGVudCsrLT5tb3JlKTsKKwkgICAgfQorCSAgYnJlYWs7CisKKwljYXNlIE9QX09QRU5fU1VCRVhQOgorCSAgaWYgKChib3VuZGFyaWVzICYgMSkgJiYgc3ViZXhwX2lkeCA9PSBkZmEtPm5vZGVzW25vZGVdLm9wci5pZHgpCisJICAgIHJldHVybiAtMTsKKwkgIGJyZWFrOworCisJY2FzZSBPUF9DTE9TRV9TVUJFWFA6CisJICBpZiAoKGJvdW5kYXJpZXMgJiAyKSAmJiBzdWJleHBfaWR4ID09IGRmYS0+bm9kZXNbbm9kZV0ub3ByLmlkeCkKKwkgICAgcmV0dXJuIDA7CisJICBicmVhazsKKworCWRlZmF1bHQ6CisJICAgIGJyZWFrOworCX0KKyAgICB9CisKKyAgcmV0dXJuIChib3VuZGFyaWVzICYgMikgPyAxIDogMDsKK30KKworc3RhdGljIGludAoraW50ZXJuYWxfZnVuY3Rpb24KK2NoZWNrX2RzdF9saW1pdHNfY2FsY19wb3MgKGNvbnN0IHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwgSWR4IGxpbWl0LAorCQkJICAgSWR4IHN1YmV4cF9pZHgsIElkeCBmcm9tX25vZGUsIElkeCBzdHJfaWR4LAorCQkJICAgSWR4IGJrcmVmX2lkeCkKK3sKKyAgc3RydWN0IHJlX2JhY2tyZWZfY2FjaGVfZW50cnkgKmxpbSA9IG1jdHgtPmJrcmVmX2VudHMgKyBsaW1pdDsKKyAgaW50IGJvdW5kYXJpZXM7CisKKyAgLyogSWYgd2UgYXJlIG91dHNpZGUgdGhlIHJhbmdlIG9mIHRoZSBzdWJleHByZXNzaW9uLCByZXR1cm4gLTEgb3IgMS4gICovCisgIGlmIChzdHJfaWR4IDwgbGltLT5zdWJleHBfZnJvbSkKKyAgICByZXR1cm4gLTE7CisKKyAgaWYgKGxpbS0+c3ViZXhwX3RvIDwgc3RyX2lkeCkKKyAgICByZXR1cm4gMTsKKworICAvKiBJZiB3ZSBhcmUgd2l0aGluIHRoZSBzdWJleHByZXNzaW9uLCByZXR1cm4gMC4gICovCisgIGJvdW5kYXJpZXMgPSAoc3RyX2lkeCA9PSBsaW0tPnN1YmV4cF9mcm9tKTsKKyAgYm91bmRhcmllcyB8PSAoc3RyX2lkeCA9PSBsaW0tPnN1YmV4cF90bykgPDwgMTsKKyAgaWYgKGJvdW5kYXJpZXMgPT0gMCkKKyAgICByZXR1cm4gMDsKKworICAvKiBFbHNlLCBleGFtaW5lIGVwc2lsb24gY2xvc3VyZS4gICovCisgIHJldHVybiBjaGVja19kc3RfbGltaXRzX2NhbGNfcG9zXzEgKG1jdHgsIGJvdW5kYXJpZXMsIHN1YmV4cF9pZHgsCisJCQkJICAgICAgZnJvbV9ub2RlLCBia3JlZl9pZHgpOworfQorCisvKiBDaGVjayB0aGUgbGltaXRhdGlvbnMgb2Ygc3ViIGV4cHJlc3Npb25zIExJTUlUUywgYW5kIHJlbW92ZSB0aGUgbm9kZXMKKyAgIHdoaWNoIGFyZSBhZ2FpbnN0IGxpbWl0YXRpb25zIGZyb20gREVTVF9OT0RFUy4gKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCitjaGVja19zdWJleHBfbGltaXRzIChjb25zdCByZV9kZmFfdCAqZGZhLCByZV9ub2RlX3NldCAqZGVzdF9ub2RlcywKKwkJICAgICBjb25zdCByZV9ub2RlX3NldCAqY2FuZGlkYXRlcywgcmVfbm9kZV9zZXQgKmxpbWl0cywKKwkJICAgICBzdHJ1Y3QgcmVfYmFja3JlZl9jYWNoZV9lbnRyeSAqYmtyZWZfZW50cywgSWR4IHN0cl9pZHgpCit7CisgIHJlZ19lcnJjb2RlX3QgZXJyOworICBJZHggbm9kZV9pZHgsIGxpbV9pZHg7CisKKyAgZm9yIChsaW1faWR4ID0gMDsgbGltX2lkeCA8IGxpbWl0cy0+bmVsZW07ICsrbGltX2lkeCkKKyAgICB7CisgICAgICBJZHggc3ViZXhwX2lkeDsKKyAgICAgIHN0cnVjdCByZV9iYWNrcmVmX2NhY2hlX2VudHJ5ICplbnQ7CisgICAgICBlbnQgPSBia3JlZl9lbnRzICsgbGltaXRzLT5lbGVtc1tsaW1faWR4XTsKKworICAgICAgaWYgKHN0cl9pZHggPD0gZW50LT5zdWJleHBfZnJvbSB8fCBlbnQtPnN0cl9pZHggPCBzdHJfaWR4KQorCWNvbnRpbnVlOyAvKiBUaGlzIGlzIHVucmVsYXRlZCBsaW1pdGF0aW9uLiAgKi8KKworICAgICAgc3ViZXhwX2lkeCA9IGRmYS0+bm9kZXNbZW50LT5ub2RlXS5vcHIuaWR4OworICAgICAgaWYgKGVudC0+c3ViZXhwX3RvID09IHN0cl9pZHgpCisJeworCSAgSWR4IG9wc19ub2RlID0gUkVHX01JU1NJTkc7CisJICBJZHggY2xzX25vZGUgPSBSRUdfTUlTU0lORzsKKwkgIGZvciAobm9kZV9pZHggPSAwOyBub2RlX2lkeCA8IGRlc3Rfbm9kZXMtPm5lbGVtOyArK25vZGVfaWR4KQorCSAgICB7CisJICAgICAgSWR4IG5vZGUgPSBkZXN0X25vZGVzLT5lbGVtc1tub2RlX2lkeF07CisJICAgICAgcmVfdG9rZW5fdHlwZV90IHR5cGUgPSBkZmEtPm5vZGVzW25vZGVdLnR5cGU7CisJICAgICAgaWYgKHR5cGUgPT0gT1BfT1BFTl9TVUJFWFAKKwkJICAmJiBzdWJleHBfaWR4ID09IGRmYS0+bm9kZXNbbm9kZV0ub3ByLmlkeCkKKwkJb3BzX25vZGUgPSBub2RlOworCSAgICAgIGVsc2UgaWYgKHR5cGUgPT0gT1BfQ0xPU0VfU1VCRVhQCisJCSAgICAgICAmJiBzdWJleHBfaWR4ID09IGRmYS0+bm9kZXNbbm9kZV0ub3ByLmlkeCkKKwkJY2xzX25vZGUgPSBub2RlOworCSAgICB9CisKKwkgIC8qIENoZWNrIHRoZSBsaW1pdGF0aW9uIG9mIHRoZSBvcGVuIHN1YmV4cHJlc3Npb24uICAqLworCSAgLyogTm90ZSB0aGF0IChlbnQtPnN1YmV4cF90byA9IHN0cl9pZHggIT0gZW50LT5zdWJleHBfZnJvbSkuICAqLworCSAgaWYgKFJFR19WQUxJRF9JTkRFWCAob3BzX25vZGUpKQorCSAgICB7CisJICAgICAgZXJyID0gc3ViX2Vwc2lsb25fc3JjX25vZGVzIChkZmEsIG9wc19ub2RlLCBkZXN0X25vZGVzLAorCQkJCQkgICBjYW5kaWRhdGVzKTsKKwkgICAgICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJCXJldHVybiBlcnI7CisJICAgIH0KKworCSAgLyogQ2hlY2sgdGhlIGxpbWl0YXRpb24gb2YgdGhlIGNsb3NlIHN1YmV4cHJlc3Npb24uICAqLworCSAgaWYgKFJFR19WQUxJRF9JTkRFWCAoY2xzX25vZGUpKQorCSAgICBmb3IgKG5vZGVfaWR4ID0gMDsgbm9kZV9pZHggPCBkZXN0X25vZGVzLT5uZWxlbTsgKytub2RlX2lkeCkKKwkgICAgICB7CisJCUlkeCBub2RlID0gZGVzdF9ub2Rlcy0+ZWxlbXNbbm9kZV9pZHhdOworCQlpZiAoIXJlX25vZGVfc2V0X2NvbnRhaW5zIChkZmEtPmludmVjbG9zdXJlcyArIG5vZGUsCisJCQkJCSAgIGNsc19ub2RlKQorCQkgICAgJiYgIXJlX25vZGVfc2V0X2NvbnRhaW5zIChkZmEtPmVjbG9zdXJlcyArIG5vZGUsCisJCQkJCSAgICAgIGNsc19ub2RlKSkKKwkJICB7CisJCSAgICAvKiBJdCBpcyBhZ2FpbnN0IHRoaXMgbGltaXRhdGlvbi4KKwkJICAgICAgIFJlbW92ZSBpdCBmb3JtIHRoZSBjdXJyZW50IHNpZnRlZCBzdGF0ZS4gICovCisJCSAgICBlcnIgPSBzdWJfZXBzaWxvbl9zcmNfbm9kZXMgKGRmYSwgbm9kZSwgZGVzdF9ub2RlcywKKwkJCQkJCSBjYW5kaWRhdGVzKTsKKwkJICAgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkJICAgICAgcmV0dXJuIGVycjsKKwkJICAgIC0tbm9kZV9pZHg7CisJCSAgfQorCSAgICAgIH0KKwl9CisgICAgICBlbHNlIC8qIChlbnQtPnN1YmV4cF90byAhPSBzdHJfaWR4KSAgKi8KKwl7CisJICBmb3IgKG5vZGVfaWR4ID0gMDsgbm9kZV9pZHggPCBkZXN0X25vZGVzLT5uZWxlbTsgKytub2RlX2lkeCkKKwkgICAgeworCSAgICAgIElkeCBub2RlID0gZGVzdF9ub2Rlcy0+ZWxlbXNbbm9kZV9pZHhdOworCSAgICAgIHJlX3Rva2VuX3R5cGVfdCB0eXBlID0gZGZhLT5ub2Rlc1tub2RlXS50eXBlOworCSAgICAgIGlmICh0eXBlID09IE9QX0NMT1NFX1NVQkVYUCB8fCB0eXBlID09IE9QX09QRU5fU1VCRVhQKQorCQl7CisJCSAgaWYgKHN1YmV4cF9pZHggIT0gZGZhLT5ub2Rlc1tub2RlXS5vcHIuaWR4KQorCQkgICAgY29udGludWU7CisJCSAgLyogSXQgaXMgYWdhaW5zdCB0aGlzIGxpbWl0YXRpb24uCisJCSAgICAgUmVtb3ZlIGl0IGZvcm0gdGhlIGN1cnJlbnQgc2lmdGVkIHN0YXRlLiAgKi8KKwkJICBlcnIgPSBzdWJfZXBzaWxvbl9zcmNfbm9kZXMgKGRmYSwgbm9kZSwgZGVzdF9ub2RlcywKKwkJCQkJICAgICAgIGNhbmRpZGF0ZXMpOworCQkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkJICAgIHJldHVybiBlcnI7CisJCX0KKwkgICAgfQorCX0KKyAgICB9CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCitzaWZ0X3N0YXRlc19ia3JlZiAoY29uc3QgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LCByZV9zaWZ0X2NvbnRleHRfdCAqc2N0eCwKKwkJICAgSWR4IHN0cl9pZHgsIGNvbnN0IHJlX25vZGVfc2V0ICpjYW5kaWRhdGVzKQoreworICBjb25zdCByZV9kZmFfdCAqY29uc3QgZGZhID0gbWN0eC0+ZGZhOworICByZWdfZXJyY29kZV90IGVycjsKKyAgSWR4IG5vZGVfaWR4LCBub2RlOworICByZV9zaWZ0X2NvbnRleHRfdCBsb2NhbF9zY3R4OworICBJZHggZmlyc3RfaWR4ID0gc2VhcmNoX2N1cl9ia3JlZl9lbnRyeSAobWN0eCwgc3RyX2lkeCk7CisKKyAgaWYgKGZpcnN0X2lkeCA9PSBSRUdfTUlTU0lORykKKyAgICByZXR1cm4gUkVHX05PRVJST1I7CisKKyAgbG9jYWxfc2N0eC5zaWZ0ZWRfc3RhdGVzID0gTlVMTDsgLyogTWFyayB0aGF0IGl0IGhhc24ndCBiZWVuIGluaXRpYWxpemVkLiAgKi8KKworICBmb3IgKG5vZGVfaWR4ID0gMDsgbm9kZV9pZHggPCBjYW5kaWRhdGVzLT5uZWxlbTsgKytub2RlX2lkeCkKKyAgICB7CisgICAgICBJZHggZW5hYmxlZF9pZHg7CisgICAgICByZV90b2tlbl90eXBlX3QgdHlwZTsKKyAgICAgIHN0cnVjdCByZV9iYWNrcmVmX2NhY2hlX2VudHJ5ICplbnRyeTsKKyAgICAgIG5vZGUgPSBjYW5kaWRhdGVzLT5lbGVtc1tub2RlX2lkeF07CisgICAgICB0eXBlID0gZGZhLT5ub2Rlc1tub2RlXS50eXBlOworICAgICAgLyogQXZvaWQgaW5maW5pdGUgbG9vcCBmb3IgdGhlIFJFcyBsaWtlICIoKVwxKyIuICAqLworICAgICAgaWYgKG5vZGUgPT0gc2N0eC0+bGFzdF9ub2RlICYmIHN0cl9pZHggPT0gc2N0eC0+bGFzdF9zdHJfaWR4KQorCWNvbnRpbnVlOworICAgICAgaWYgKHR5cGUgIT0gT1BfQkFDS19SRUYpCisJY29udGludWU7CisKKyAgICAgIGVudHJ5ID0gbWN0eC0+YmtyZWZfZW50cyArIGZpcnN0X2lkeDsKKyAgICAgIGVuYWJsZWRfaWR4ID0gZmlyc3RfaWR4OworICAgICAgZG8KKwl7CisJICBJZHggc3ViZXhwX2xlbjsKKwkgIElkeCB0b19pZHg7CisJICBJZHggZHN0X25vZGU7CisJICBib29sIG9rOworCSAgcmVfZGZhc3RhdGVfdCAqY3VyX3N0YXRlOworCisJICBpZiAoZW50cnktPm5vZGUgIT0gbm9kZSkKKwkgICAgY29udGludWU7CisJICBzdWJleHBfbGVuID0gZW50cnktPnN1YmV4cF90byAtIGVudHJ5LT5zdWJleHBfZnJvbTsKKwkgIHRvX2lkeCA9IHN0cl9pZHggKyBzdWJleHBfbGVuOworCSAgZHN0X25vZGUgPSAoc3ViZXhwX2xlbiA/IGRmYS0+bmV4dHNbbm9kZV0KKwkJICAgICAgOiBkZmEtPmVkZXN0c1tub2RlXS5lbGVtc1swXSk7CisKKwkgIGlmICh0b19pZHggPiBzY3R4LT5sYXN0X3N0cl9pZHgKKwkgICAgICB8fCBzY3R4LT5zaWZ0ZWRfc3RhdGVzW3RvX2lkeF0gPT0gTlVMTAorCSAgICAgIHx8ICFTVEFURV9OT0RFX0NPTlRBSU5TIChzY3R4LT5zaWZ0ZWRfc3RhdGVzW3RvX2lkeF0sIGRzdF9ub2RlKQorCSAgICAgIHx8IGNoZWNrX2RzdF9saW1pdHMgKG1jdHgsICZzY3R4LT5saW1pdHMsIG5vZGUsCisJCQkJICAgc3RyX2lkeCwgZHN0X25vZGUsIHRvX2lkeCkpCisJICAgIGNvbnRpbnVlOworCisJICBpZiAobG9jYWxfc2N0eC5zaWZ0ZWRfc3RhdGVzID09IE5VTEwpCisJICAgIHsKKwkgICAgICBsb2NhbF9zY3R4ID0gKnNjdHg7CisJICAgICAgZXJyID0gcmVfbm9kZV9zZXRfaW5pdF9jb3B5ICgmbG9jYWxfc2N0eC5saW1pdHMsICZzY3R4LT5saW1pdHMpOworCSAgICAgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkJZ290byBmcmVlX3JldHVybjsKKwkgICAgfQorCSAgbG9jYWxfc2N0eC5sYXN0X25vZGUgPSBub2RlOworCSAgbG9jYWxfc2N0eC5sYXN0X3N0cl9pZHggPSBzdHJfaWR4OworCSAgb2sgPSByZV9ub2RlX3NldF9pbnNlcnQgKCZsb2NhbF9zY3R4LmxpbWl0cywgZW5hYmxlZF9pZHgpOworCSAgaWYgKEJFICghIG9rLCAwKSkKKwkgICAgeworCSAgICAgIGVyciA9IFJFR19FU1BBQ0U7CisJICAgICAgZ290byBmcmVlX3JldHVybjsKKwkgICAgfQorCSAgY3VyX3N0YXRlID0gbG9jYWxfc2N0eC5zaWZ0ZWRfc3RhdGVzW3N0cl9pZHhdOworCSAgZXJyID0gc2lmdF9zdGF0ZXNfYmFja3dhcmQgKG1jdHgsICZsb2NhbF9zY3R4KTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgZ290byBmcmVlX3JldHVybjsKKwkgIGlmIChzY3R4LT5saW1pdGVkX3N0YXRlcyAhPSBOVUxMKQorCSAgICB7CisJICAgICAgZXJyID0gbWVyZ2Vfc3RhdGVfYXJyYXkgKGRmYSwgc2N0eC0+bGltaXRlZF9zdGF0ZXMsCisJCQkJICAgICAgIGxvY2FsX3NjdHguc2lmdGVkX3N0YXRlcywKKwkJCQkgICAgICAgc3RyX2lkeCArIDEpOworCSAgICAgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkJZ290byBmcmVlX3JldHVybjsKKwkgICAgfQorCSAgbG9jYWxfc2N0eC5zaWZ0ZWRfc3RhdGVzW3N0cl9pZHhdID0gY3VyX3N0YXRlOworCSAgcmVfbm9kZV9zZXRfcmVtb3ZlICgmbG9jYWxfc2N0eC5saW1pdHMsIGVuYWJsZWRfaWR4KTsKKworCSAgLyogbWN0eC0+YmtyZWZfZW50cyBtYXkgaGF2ZSBjaGFuZ2VkLCByZWxvYWQgdGhlIHBvaW50ZXIuICAqLworICAgICAgICAgIGVudHJ5ID0gbWN0eC0+YmtyZWZfZW50cyArIGVuYWJsZWRfaWR4OworCX0KKyAgICAgIHdoaWxlIChlbmFibGVkX2lkeCsrLCBlbnRyeSsrLT5tb3JlKTsKKyAgICB9CisgIGVyciA9IFJFR19OT0VSUk9SOworIGZyZWVfcmV0dXJuOgorICBpZiAobG9jYWxfc2N0eC5zaWZ0ZWRfc3RhdGVzICE9IE5VTEwpCisgICAgeworICAgICAgcmVfbm9kZV9zZXRfZnJlZSAoJmxvY2FsX3NjdHgubGltaXRzKTsKKyAgICB9CisKKyAgcmV0dXJuIGVycjsKK30KKworCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KK3N0YXRpYyBpbnQKK2ludGVybmFsX2Z1bmN0aW9uCitzaWZ0X3N0YXRlc19pdGVyX21iIChjb25zdCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIHJlX3NpZnRfY29udGV4dF90ICpzY3R4LAorCQkgICAgIElkeCBub2RlX2lkeCwgSWR4IHN0cl9pZHgsIElkeCBtYXhfc3RyX2lkeCkKK3sKKyAgY29uc3QgcmVfZGZhX3QgKmNvbnN0IGRmYSA9IG1jdHgtPmRmYTsKKyAgaW50IG5hY2NlcHRlZDsKKyAgLyogQ2hlY2sgdGhlIG5vZGUgY2FuIGFjY2VwdCBgbXVsdGkgYnl0ZScuICAqLworICBuYWNjZXB0ZWQgPSBjaGVja19ub2RlX2FjY2VwdF9ieXRlcyAoZGZhLCBub2RlX2lkeCwgJm1jdHgtPmlucHV0LCBzdHJfaWR4KTsKKyAgaWYgKG5hY2NlcHRlZCA+IDAgJiYgc3RyX2lkeCArIG5hY2NlcHRlZCA8PSBtYXhfc3RyX2lkeCAmJgorICAgICAgIVNUQVRFX05PREVfQ09OVEFJTlMgKHNjdHgtPnNpZnRlZF9zdGF0ZXNbc3RyX2lkeCArIG5hY2NlcHRlZF0sCisJCQkgICAgZGZhLT5uZXh0c1tub2RlX2lkeF0pKQorICAgIC8qIFRoZSBub2RlIGNhbid0IGFjY2VwdCB0aGUgYG11bHRpIGJ5dGUnLCBvciB0aGUKKyAgICAgICBkZXN0aW5hdGlvbiB3YXMgYWxyZWFkeSB0aHJvd24gYXdheSwgdGhlbiB0aGUgbm9kZQorICAgICAgIGNvdWxkJ3QgYWNjZXB0IHRoZSBjdXJyZW50IGlucHV0IGBtdWx0aSBieXRlJy4gICAqLworICAgIG5hY2NlcHRlZCA9IDA7CisgIC8qIE90aGVyd2lzZSwgaXQgaXMgc3VyZSB0aGF0IHRoZSBub2RlIGNvdWxkIGFjY2VwdAorICAgICBgbmFjY2VwdGVkJyBieXRlcyBpbnB1dC4gICovCisgIHJldHVybiBuYWNjZXB0ZWQ7Cit9CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKworDAorLyogRnVuY3Rpb25zIGZvciBzdGF0ZSB0cmFuc2l0aW9uLiAgKi8KKworLyogUmV0dXJuIHRoZSBuZXh0IHN0YXRlIHRvIHdoaWNoIHRoZSBjdXJyZW50IHN0YXRlIFNUQVRFIHdpbGwgdHJhbnNpdCBieQorICAgYWNjZXB0aW5nIHRoZSBjdXJyZW50IGlucHV0IGJ5dGUsIGFuZCB1cGRhdGUgU1RBVEVfTE9HIGlmIG5lY2Vzc2FyeS4KKyAgIElmIFNUQVRFIGNhbiBhY2NlcHQgYSBtdWx0aWJ5dGUgY2hhci9jb2xsYXRpbmcgZWxlbWVudC9iYWNrIHJlZmVyZW5jZQorICAgdXBkYXRlIHRoZSBkZXN0aW5hdGlvbiBvZiBTVEFURV9MT0cuICAqLworCitzdGF0aWMgcmVfZGZhc3RhdGVfdCAqCitpbnRlcm5hbF9mdW5jdGlvbgordHJhbnNpdF9zdGF0ZSAocmVnX2VycmNvZGVfdCAqZXJyLCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsCisJICAgICAgIHJlX2RmYXN0YXRlX3QgKnN0YXRlKQoreworICByZV9kZmFzdGF0ZV90ICoqdHJ0YWJsZTsKKyAgdW5zaWduZWQgY2hhciBjaDsKKworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIC8qIElmIHRoZSBjdXJyZW50IHN0YXRlIGNhbiBhY2NlcHQgbXVsdGlieXRlLiAgKi8KKyAgaWYgKEJFIChzdGF0ZS0+YWNjZXB0X21iLCAwKSkKKyAgICB7CisgICAgICAqZXJyID0gdHJhbnNpdF9zdGF0ZV9tYiAobWN0eCwgc3RhdGUpOworICAgICAgaWYgKEJFICgqZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwlyZXR1cm4gTlVMTDsKKyAgICB9CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKworICAvKiBUaGVuIGRlY2lkZSB0aGUgbmV4dCBzdGF0ZSB3aXRoIHRoZSBzaW5nbGUgYnl0ZS4gICovCisjaWYgMAorICBpZiAoMCkKKyAgICAvKiBkb24ndCB1c2UgdHJhbnNpdGlvbiB0YWJsZSAgKi8KKyAgICByZXR1cm4gdHJhbnNpdF9zdGF0ZV9zYiAoZXJyLCBtY3R4LCBzdGF0ZSk7CisjZW5kaWYKKworICAvKiBVc2UgdHJhbnNpdGlvbiB0YWJsZSAgKi8KKyAgY2ggPSByZV9zdHJpbmdfZmV0Y2hfYnl0ZSAoJm1jdHgtPmlucHV0KTsKKyAgZm9yICg7OykKKyAgICB7CisgICAgICB0cnRhYmxlID0gc3RhdGUtPnRydGFibGU7CisgICAgICBpZiAoQkUgKHRydGFibGUgIT0gTlVMTCwgMSkpCisJcmV0dXJuIHRydGFibGVbY2hdOworCisgICAgICB0cnRhYmxlID0gc3RhdGUtPndvcmRfdHJ0YWJsZTsKKyAgICAgIGlmIChCRSAodHJ0YWJsZSAhPSBOVUxMLCAxKSkKKyAgICAgICAgeworCSAgdW5zaWduZWQgaW50IGNvbnRleHQ7CisJICBjb250ZXh0CisJICAgID0gcmVfc3RyaW5nX2NvbnRleHRfYXQgKCZtY3R4LT5pbnB1dCwKKwkJCQkgICAgcmVfc3RyaW5nX2N1cl9pZHggKCZtY3R4LT5pbnB1dCkgLSAxLAorCQkJCSAgICBtY3R4LT5lZmxhZ3MpOworCSAgaWYgKElTX1dPUkRfQ09OVEVYVCAoY29udGV4dCkpCisJICAgIHJldHVybiB0cnRhYmxlW2NoICsgU0JDX01BWF07CisJICBlbHNlCisJICAgIHJldHVybiB0cnRhYmxlW2NoXTsKKwl9CisKKyAgICAgIGlmICghYnVpbGRfdHJ0YWJsZSAobWN0eC0+ZGZhLCBzdGF0ZSkpCisJeworCSAgKmVyciA9IFJFR19FU1BBQ0U7CisJICByZXR1cm4gTlVMTDsKKwl9CisKKyAgICAgIC8qIFJldHJ5LCB3ZSBub3cgaGF2ZSBhIHRyYW5zaXRpb24gdGFibGUuICAqLworICAgIH0KK30KKworLyogVXBkYXRlIHRoZSBzdGF0ZV9sb2cgaWYgd2UgbmVlZCAqLworc3RhdGljIHJlX2RmYXN0YXRlX3QgKgoraW50ZXJuYWxfZnVuY3Rpb24KK21lcmdlX3N0YXRlX3dpdGhfbG9nIChyZWdfZXJyY29kZV90ICplcnIsIHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkJICAgICAgcmVfZGZhc3RhdGVfdCAqbmV4dF9zdGF0ZSkKK3sKKyAgY29uc3QgcmVfZGZhX3QgKmNvbnN0IGRmYSA9IG1jdHgtPmRmYTsKKyAgSWR4IGN1cl9pZHggPSByZV9zdHJpbmdfY3VyX2lkeCAoJm1jdHgtPmlucHV0KTsKKworICBpZiAoY3VyX2lkeCA+IG1jdHgtPnN0YXRlX2xvZ190b3ApCisgICAgeworICAgICAgbWN0eC0+c3RhdGVfbG9nW2N1cl9pZHhdID0gbmV4dF9zdGF0ZTsKKyAgICAgIG1jdHgtPnN0YXRlX2xvZ190b3AgPSBjdXJfaWR4OworICAgIH0KKyAgZWxzZSBpZiAobWN0eC0+c3RhdGVfbG9nW2N1cl9pZHhdID09IDApCisgICAgeworICAgICAgbWN0eC0+c3RhdGVfbG9nW2N1cl9pZHhdID0gbmV4dF9zdGF0ZTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICByZV9kZmFzdGF0ZV90ICpwc3RhdGU7CisgICAgICB1bnNpZ25lZCBpbnQgY29udGV4dDsKKyAgICAgIHJlX25vZGVfc2V0IG5leHRfbm9kZXMsICpsb2dfbm9kZXMsICp0YWJsZV9ub2RlcyA9IE5VTEw7CisgICAgICAvKiBJZiAoc3RhdGVfbG9nW2N1cl9pZHhdICE9IDApLCBpdCBpbXBsaWVzIHRoYXQgY3VyX2lkeCBpcworICAgICAgICAgdGhlIGRlc3RpbmF0aW9uIG9mIGEgbXVsdGlieXRlIGNoYXIvY29sbGF0aW5nIGVsZW1lbnQvCisgICAgICAgICBiYWNrIHJlZmVyZW5jZS4gIFRoZW4gdGhlIG5leHQgc3RhdGUgaXMgdGhlIHVuaW9uIHNldCBvZgorICAgICAgICAgdGhlc2UgZGVzdGluYXRpb25zIGFuZCB0aGUgcmVzdWx0cyBvZiB0aGUgdHJhbnNpdGlvbiB0YWJsZS4gICovCisgICAgICBwc3RhdGUgPSBtY3R4LT5zdGF0ZV9sb2dbY3VyX2lkeF07CisgICAgICBsb2dfbm9kZXMgPSBwc3RhdGUtPmVudHJhbmNlX25vZGVzOworICAgICAgaWYgKG5leHRfc3RhdGUgIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgIHRhYmxlX25vZGVzID0gbmV4dF9zdGF0ZS0+ZW50cmFuY2Vfbm9kZXM7CisgICAgICAgICAgKmVyciA9IHJlX25vZGVfc2V0X2luaXRfdW5pb24gKCZuZXh0X25vZGVzLCB0YWJsZV9ub2RlcywKKwkJCQkJICAgICBsb2dfbm9kZXMpOworICAgICAgICAgIGlmIChCRSAoKmVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIG5leHRfbm9kZXMgPSAqbG9nX25vZGVzOworICAgICAgLyogTm90ZTogV2UgYWxyZWFkeSBhZGQgdGhlIG5vZGVzIG9mIHRoZSBpbml0aWFsIHN0YXRlLAorCSB0aGVuIHdlIGRvbid0IG5lZWQgdG8gYWRkIHRoZW0gaGVyZS4gICovCisKKyAgICAgIGNvbnRleHQgPSByZV9zdHJpbmdfY29udGV4dF9hdCAoJm1jdHgtPmlucHV0LAorCQkJCSAgICAgIHJlX3N0cmluZ19jdXJfaWR4ICgmbWN0eC0+aW5wdXQpIC0gMSwKKwkJCQkgICAgICBtY3R4LT5lZmxhZ3MpOworICAgICAgbmV4dF9zdGF0ZSA9IG1jdHgtPnN0YXRlX2xvZ1tjdXJfaWR4XQorICAgICAgICA9IHJlX2FjcXVpcmVfc3RhdGVfY29udGV4dCAoZXJyLCBkZmEsICZuZXh0X25vZGVzLCBjb250ZXh0KTsKKyAgICAgIC8qIFdlIGRvbid0IG5lZWQgdG8gY2hlY2sgZXJyb3JzIGhlcmUsIHNpbmNlIHRoZSByZXR1cm4gdmFsdWUgb2YKKyAgICAgICAgIHRoaXMgZnVuY3Rpb24gaXMgbmV4dF9zdGF0ZSBhbmQgRVJSIGlzIGFscmVhZHkgc2V0LiAgKi8KKworICAgICAgaWYgKHRhYmxlX25vZGVzICE9IE5VTEwpCisgICAgICAgIHJlX25vZGVfc2V0X2ZyZWUgKCZuZXh0X25vZGVzKTsKKyAgICB9CisKKyAgaWYgKEJFIChkZmEtPm5iYWNrcmVmLCAwKSAmJiBuZXh0X3N0YXRlICE9IE5VTEwpCisgICAgeworICAgICAgLyogQ2hlY2sgT1BfT1BFTl9TVUJFWFAgaW4gdGhlIGN1cnJlbnQgc3RhdGUgaW4gY2FzZSB0aGF0IHdlIHVzZSB0aGVtCisJIGxhdGVyLiAgV2UgbXVzdCBjaGVjayB0aGVtIGhlcmUsIHNpbmNlIHRoZSBiYWNrIHJlZmVyZW5jZXMgaW4gdGhlCisJIG5leHQgc3RhdGUgbWlnaHQgdXNlIHRoZW0uICAqLworICAgICAgKmVyciA9IGNoZWNrX3N1YmV4cF9tYXRjaGluZ190b3AgKG1jdHgsICZuZXh0X3N0YXRlLT5ub2RlcywKKwkJCQkJY3VyX2lkeCk7CisgICAgICBpZiAoQkUgKCplcnIgIT0gUkVHX05PRVJST1IsIDApKQorCXJldHVybiBOVUxMOworCisgICAgICAvKiBJZiB0aGUgbmV4dCBzdGF0ZSBoYXMgYmFjayByZWZlcmVuY2VzLiAgKi8KKyAgICAgIGlmIChuZXh0X3N0YXRlLT5oYXNfYmFja3JlZikKKwl7CisJICAqZXJyID0gdHJhbnNpdF9zdGF0ZV9ia3JlZiAobWN0eCwgJm5leHRfc3RhdGUtPm5vZGVzKTsKKwkgIGlmIChCRSAoKmVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHJldHVybiBOVUxMOworCSAgbmV4dF9zdGF0ZSA9IG1jdHgtPnN0YXRlX2xvZ1tjdXJfaWR4XTsKKwl9CisgICAgfQorCisgIHJldHVybiBuZXh0X3N0YXRlOworfQorCisvKiBTa2lwIGJ5dGVzIGluIHRoZSBpbnB1dCB0aGF0IGNvcnJlc3BvbmQgdG8gcGFydCBvZiBhCisgICBtdWx0aS1ieXRlIG1hdGNoLCB0aGVuIGxvb2sgaW4gdGhlIGxvZyBmb3IgYSBzdGF0ZQorICAgZnJvbSB3aGljaCB0byByZXN0YXJ0IG1hdGNoaW5nLiAgKi8KK3N0YXRpYyByZV9kZmFzdGF0ZV90ICoKK2ludGVybmFsX2Z1bmN0aW9uCitmaW5kX3JlY292ZXJfc3RhdGUgKHJlZ19lcnJjb2RlX3QgKmVyciwgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4KQoreworICByZV9kZmFzdGF0ZV90ICpjdXJfc3RhdGU7CisgIGRvCisgICAgeworICAgICAgSWR4IG1heCA9IG1jdHgtPnN0YXRlX2xvZ190b3A7CisgICAgICBJZHggY3VyX3N0cl9pZHggPSByZV9zdHJpbmdfY3VyX2lkeCAoJm1jdHgtPmlucHV0KTsKKworICAgICAgZG8KKwl7CisgICAgICAgICAgaWYgKCsrY3VyX3N0cl9pZHggPiBtYXgpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICByZV9zdHJpbmdfc2tpcF9ieXRlcyAoJm1jdHgtPmlucHV0LCAxKTsKKwl9CisgICAgICB3aGlsZSAobWN0eC0+c3RhdGVfbG9nW2N1cl9zdHJfaWR4XSA9PSBOVUxMKTsKKworICAgICAgY3VyX3N0YXRlID0gbWVyZ2Vfc3RhdGVfd2l0aF9sb2cgKGVyciwgbWN0eCwgTlVMTCk7CisgICAgfQorICB3aGlsZSAoKmVyciA9PSBSRUdfTk9FUlJPUiAmJiBjdXJfc3RhdGUgPT0gTlVMTCk7CisgIHJldHVybiBjdXJfc3RhdGU7Cit9CisKKy8qIEhlbHBlciBmdW5jdGlvbnMgZm9yIHRyYW5zaXRfc3RhdGUuICAqLworCisvKiBGcm9tIHRoZSBub2RlIHNldCBDVVJfTk9ERVMsIHBpY2sgdXAgdGhlIG5vZGVzIHdob3NlIHR5cGVzIGFyZQorICAgT1BfT1BFTl9TVUJFWFAgYW5kIHdoaWNoIGhhdmUgY29ycmVzcG9uZGluZyBiYWNrIHJlZmVyZW5jZXMgaW4gdGhlIHJlZ3VsYXIKKyAgIGV4cHJlc3Npb24uIEFuZCByZWdpc3RlciB0aGVtIHRvIHVzZSB0aGVtIGxhdGVyIGZvciBldmFsdWF0aW5nIHRoZQorICAgY29ycmVzcG9kaW5nIGJhY2sgcmVmZXJlbmNlcy4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorY2hlY2tfc3ViZXhwX21hdGNoaW5nX3RvcCAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4LCByZV9ub2RlX3NldCAqY3VyX25vZGVzLAorCQkJICAgSWR4IHN0cl9pZHgpCit7CisgIGNvbnN0IHJlX2RmYV90ICpjb25zdCBkZmEgPSBtY3R4LT5kZmE7CisgIElkeCBub2RlX2lkeDsKKyAgcmVnX2VycmNvZGVfdCBlcnI7CisKKyAgLyogVE9ETzogVGhpcyBpc24ndCBlZmZpY2llbnQuCisJICAgQmVjYXVzZSB0aGVyZSBtaWdodCBiZSBtb3JlIHRoYW4gb25lIG5vZGVzIHdob3NlIHR5cGVzIGFyZQorCSAgIE9QX09QRU5fU1VCRVhQIGFuZCB3aG9zZSBpbmRleCBpcyBTVUJFWFBfSURYLCB3ZSBtdXN0IGNoZWNrIGFsbAorCSAgIG5vZGVzLgorCSAgIEUuZy4gUkU6IChhKXsyfSAgKi8KKyAgZm9yIChub2RlX2lkeCA9IDA7IG5vZGVfaWR4IDwgY3VyX25vZGVzLT5uZWxlbTsgKytub2RlX2lkeCkKKyAgICB7CisgICAgICBJZHggbm9kZSA9IGN1cl9ub2Rlcy0+ZWxlbXNbbm9kZV9pZHhdOworICAgICAgaWYgKGRmYS0+bm9kZXNbbm9kZV0udHlwZSA9PSBPUF9PUEVOX1NVQkVYUAorCSAgJiYgZGZhLT5ub2Rlc1tub2RlXS5vcHIuaWR4IDwgQklUU0VUX1dPUkRfQklUUworCSAgJiYgKGRmYS0+dXNlZF9ia3JlZl9tYXAKKwkgICAgICAmICgoYml0c2V0X3dvcmRfdCkgMSA8PCBkZmEtPm5vZGVzW25vZGVdLm9wci5pZHgpKSkKKwl7CisJICBlcnIgPSBtYXRjaF9jdHhfYWRkX3N1YnRvcCAobWN0eCwgbm9kZSwgc3RyX2lkeCk7CisJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHJldHVybiBlcnI7CisJfQorICAgIH0KKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCisjaWYgMAorLyogUmV0dXJuIHRoZSBuZXh0IHN0YXRlIHRvIHdoaWNoIHRoZSBjdXJyZW50IHN0YXRlIFNUQVRFIHdpbGwgdHJhbnNpdCBieQorICAgYWNjZXB0aW5nIHRoZSBjdXJyZW50IGlucHV0IGJ5dGUuICAqLworCitzdGF0aWMgcmVfZGZhc3RhdGVfdCAqCit0cmFuc2l0X3N0YXRlX3NiIChyZWdfZXJyY29kZV90ICplcnIsIHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkJICByZV9kZmFzdGF0ZV90ICpzdGF0ZSkKK3sKKyAgY29uc3QgcmVfZGZhX3QgKmNvbnN0IGRmYSA9IG1jdHgtPmRmYTsKKyAgcmVfbm9kZV9zZXQgbmV4dF9ub2RlczsKKyAgcmVfZGZhc3RhdGVfdCAqbmV4dF9zdGF0ZTsKKyAgSWR4IG5vZGVfY250LCBjdXJfc3RyX2lkeCA9IHJlX3N0cmluZ19jdXJfaWR4ICgmbWN0eC0+aW5wdXQpOworICB1bnNpZ25lZCBpbnQgY29udGV4dDsKKworICAqZXJyID0gcmVfbm9kZV9zZXRfYWxsb2MgKCZuZXh0X25vZGVzLCBzdGF0ZS0+bm9kZXMubmVsZW0gKyAxKTsKKyAgaWYgKEJFICgqZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICByZXR1cm4gTlVMTDsKKyAgZm9yIChub2RlX2NudCA9IDA7IG5vZGVfY250IDwgc3RhdGUtPm5vZGVzLm5lbGVtOyArK25vZGVfY250KQorICAgIHsKKyAgICAgIElkeCBjdXJfbm9kZSA9IHN0YXRlLT5ub2Rlcy5lbGVtc1tub2RlX2NudF07CisgICAgICBpZiAoY2hlY2tfbm9kZV9hY2NlcHQgKG1jdHgsIGRmYS0+bm9kZXMgKyBjdXJfbm9kZSwgY3VyX3N0cl9pZHgpKQorCXsKKwkgICplcnIgPSByZV9ub2RlX3NldF9tZXJnZSAoJm5leHRfbm9kZXMsCisJCQkJICAgIGRmYS0+ZWNsb3N1cmVzICsgZGZhLT5uZXh0c1tjdXJfbm9kZV0pOworCSAgaWYgKEJFICgqZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgeworCSAgICAgIHJlX25vZGVfc2V0X2ZyZWUgKCZuZXh0X25vZGVzKTsKKwkgICAgICByZXR1cm4gTlVMTDsKKwkgICAgfQorCX0KKyAgICB9CisgIGNvbnRleHQgPSByZV9zdHJpbmdfY29udGV4dF9hdCAoJm1jdHgtPmlucHV0LCBjdXJfc3RyX2lkeCwgbWN0eC0+ZWZsYWdzKTsKKyAgbmV4dF9zdGF0ZSA9IHJlX2FjcXVpcmVfc3RhdGVfY29udGV4dCAoZXJyLCBkZmEsICZuZXh0X25vZGVzLCBjb250ZXh0KTsKKyAgLyogV2UgZG9uJ3QgbmVlZCB0byBjaGVjayBlcnJvcnMgaGVyZSwgc2luY2UgdGhlIHJldHVybiB2YWx1ZSBvZgorICAgICB0aGlzIGZ1bmN0aW9uIGlzIG5leHRfc3RhdGUgYW5kIEVSUiBpcyBhbHJlYWR5IHNldC4gICovCisKKyAgcmVfbm9kZV9zZXRfZnJlZSAoJm5leHRfbm9kZXMpOworICByZV9zdHJpbmdfc2tpcF9ieXRlcyAoJm1jdHgtPmlucHV0LCAxKTsKKyAgcmV0dXJuIG5leHRfc3RhdGU7Cit9CisjZW5kaWYKKworI2lmZGVmIFJFX0VOQUJMRV9JMThOCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK3RyYW5zaXRfc3RhdGVfbWIgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwgcmVfZGZhc3RhdGVfdCAqcHN0YXRlKQoreworICBjb25zdCByZV9kZmFfdCAqY29uc3QgZGZhID0gbWN0eC0+ZGZhOworICByZWdfZXJyY29kZV90IGVycjsKKyAgSWR4IGk7CisKKyAgZm9yIChpID0gMDsgaSA8IHBzdGF0ZS0+bm9kZXMubmVsZW07ICsraSkKKyAgICB7CisgICAgICByZV9ub2RlX3NldCBkZXN0X25vZGVzLCAqbmV3X25vZGVzOworICAgICAgSWR4IGN1cl9ub2RlX2lkeCA9IHBzdGF0ZS0+bm9kZXMuZWxlbXNbaV07CisgICAgICBpbnQgbmFjY2VwdGVkOworICAgICAgSWR4IGRlc3RfaWR4OworICAgICAgdW5zaWduZWQgaW50IGNvbnRleHQ7CisgICAgICByZV9kZmFzdGF0ZV90ICpkZXN0X3N0YXRlOworCisgICAgICBpZiAoIWRmYS0+bm9kZXNbY3VyX25vZGVfaWR4XS5hY2NlcHRfbWIpCisgICAgICAgIGNvbnRpbnVlOworCisgICAgICBpZiAoZGZhLT5ub2Rlc1tjdXJfbm9kZV9pZHhdLmNvbnN0cmFpbnQpCisJeworCSAgY29udGV4dCA9IHJlX3N0cmluZ19jb250ZXh0X2F0ICgmbWN0eC0+aW5wdXQsCisJCQkJCSAgcmVfc3RyaW5nX2N1cl9pZHggKCZtY3R4LT5pbnB1dCksCisJCQkJCSAgbWN0eC0+ZWZsYWdzKTsKKwkgIGlmIChOT1RfU0FUSVNGWV9ORVhUX0NPTlNUUkFJTlQgKGRmYS0+bm9kZXNbY3VyX25vZGVfaWR4XS5jb25zdHJhaW50LAorCQkJCQkgICBjb250ZXh0KSkKKwkgICAgY29udGludWU7CisJfQorCisgICAgICAvKiBIb3cgbWFueSBieXRlcyB0aGUgbm9kZSBjYW4gYWNjZXB0PyAgKi8KKyAgICAgIG5hY2NlcHRlZCA9IGNoZWNrX25vZGVfYWNjZXB0X2J5dGVzIChkZmEsIGN1cl9ub2RlX2lkeCwgJm1jdHgtPmlucHV0LAorCQkJCQkgICByZV9zdHJpbmdfY3VyX2lkeCAoJm1jdHgtPmlucHV0KSk7CisgICAgICBpZiAobmFjY2VwdGVkID09IDApCisJY29udGludWU7CisKKyAgICAgIC8qIFRoZSBub2RlIGNhbiBhY2NlcHRzIGBuYWNjZXB0ZWQnIGJ5dGVzLiAgKi8KKyAgICAgIGRlc3RfaWR4ID0gcmVfc3RyaW5nX2N1cl9pZHggKCZtY3R4LT5pbnB1dCkgKyBuYWNjZXB0ZWQ7CisgICAgICBtY3R4LT5tYXhfbWJfZWxlbV9sZW4gPSAoKG1jdHgtPm1heF9tYl9lbGVtX2xlbiA8IG5hY2NlcHRlZCkgPyBuYWNjZXB0ZWQKKwkJCSAgICAgICA6IG1jdHgtPm1heF9tYl9lbGVtX2xlbik7CisgICAgICBlcnIgPSBjbGVhbl9zdGF0ZV9sb2dfaWZfbmVlZGVkIChtY3R4LCBkZXN0X2lkeCk7CisgICAgICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJcmV0dXJuIGVycjsKKyNpZmRlZiBERUJVRworICAgICAgYXNzZXJ0IChkZmEtPm5leHRzW2N1cl9ub2RlX2lkeF0gIT0gUkVHX01JU1NJTkcpOworI2VuZGlmCisgICAgICBuZXdfbm9kZXMgPSBkZmEtPmVjbG9zdXJlcyArIGRmYS0+bmV4dHNbY3VyX25vZGVfaWR4XTsKKworICAgICAgZGVzdF9zdGF0ZSA9IG1jdHgtPnN0YXRlX2xvZ1tkZXN0X2lkeF07CisgICAgICBpZiAoZGVzdF9zdGF0ZSA9PSBOVUxMKQorCWRlc3Rfbm9kZXMgPSAqbmV3X25vZGVzOworICAgICAgZWxzZQorCXsKKwkgIGVyciA9IHJlX25vZGVfc2V0X2luaXRfdW5pb24gKCZkZXN0X25vZGVzLAorCQkJCQlkZXN0X3N0YXRlLT5lbnRyYW5jZV9ub2RlcywgbmV3X25vZGVzKTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgcmV0dXJuIGVycjsKKwl9CisgICAgICBjb250ZXh0ID0gcmVfc3RyaW5nX2NvbnRleHRfYXQgKCZtY3R4LT5pbnB1dCwgZGVzdF9pZHggLSAxLAorCQkJCSAgICAgIG1jdHgtPmVmbGFncyk7CisgICAgICBtY3R4LT5zdGF0ZV9sb2dbZGVzdF9pZHhdCisJPSByZV9hY3F1aXJlX3N0YXRlX2NvbnRleHQgKCZlcnIsIGRmYSwgJmRlc3Rfbm9kZXMsIGNvbnRleHQpOworICAgICAgaWYgKGRlc3Rfc3RhdGUgIT0gTlVMTCkKKwlyZV9ub2RlX3NldF9mcmVlICgmZGVzdF9ub2Rlcyk7CisgICAgICBpZiAoQkUgKG1jdHgtPnN0YXRlX2xvZ1tkZXN0X2lkeF0gPT0gTlVMTCAmJiBlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCXJldHVybiBlcnI7CisgICAgfQorICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCit0cmFuc2l0X3N0YXRlX2JrcmVmIChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIGNvbnN0IHJlX25vZGVfc2V0ICpub2RlcykKK3sKKyAgY29uc3QgcmVfZGZhX3QgKmNvbnN0IGRmYSA9IG1jdHgtPmRmYTsKKyAgcmVnX2VycmNvZGVfdCBlcnI7CisgIElkeCBpOworICBJZHggY3VyX3N0cl9pZHggPSByZV9zdHJpbmdfY3VyX2lkeCAoJm1jdHgtPmlucHV0KTsKKworICBmb3IgKGkgPSAwOyBpIDwgbm9kZXMtPm5lbGVtOyArK2kpCisgICAgeworICAgICAgSWR4IGRlc3Rfc3RyX2lkeCwgcHJldl9uZWxlbSwgYmtjX2lkeDsKKyAgICAgIElkeCBub2RlX2lkeCA9IG5vZGVzLT5lbGVtc1tpXTsKKyAgICAgIHVuc2lnbmVkIGludCBjb250ZXh0OworICAgICAgY29uc3QgcmVfdG9rZW5fdCAqbm9kZSA9IGRmYS0+bm9kZXMgKyBub2RlX2lkeDsKKyAgICAgIHJlX25vZGVfc2V0ICpuZXdfZGVzdF9ub2RlczsKKworICAgICAgLyogQ2hlY2sgd2hldGhlciBgbm9kZScgaXMgYSBiYWNrcmVmZXJlbmNlIG9yIG5vdC4gICovCisgICAgICBpZiAobm9kZS0+dHlwZSAhPSBPUF9CQUNLX1JFRikKKwljb250aW51ZTsKKworICAgICAgaWYgKG5vZGUtPmNvbnN0cmFpbnQpCisJeworCSAgY29udGV4dCA9IHJlX3N0cmluZ19jb250ZXh0X2F0ICgmbWN0eC0+aW5wdXQsIGN1cl9zdHJfaWR4LAorCQkJCQkgIG1jdHgtPmVmbGFncyk7CisJICBpZiAoTk9UX1NBVElTRllfTkVYVF9DT05TVFJBSU5UIChub2RlLT5jb25zdHJhaW50LCBjb250ZXh0KSkKKwkgICAgY29udGludWU7CisJfQorCisgICAgICAvKiBgbm9kZScgaXMgYSBiYWNrcmVmZXJlbmNlLgorCSBDaGVjayB0aGUgc3Vic3RyaW5nIHdoaWNoIHRoZSBzdWJzdHJpbmcgbWF0Y2hlZC4gICovCisgICAgICBia2NfaWR4ID0gbWN0eC0+bmJrcmVmX2VudHM7CisgICAgICBlcnIgPSBnZXRfc3ViZXhwIChtY3R4LCBub2RlX2lkeCwgY3VyX3N0cl9pZHgpOworICAgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCWdvdG8gZnJlZV9yZXR1cm47CisKKyAgICAgIC8qIEFuZCBhZGQgdGhlIGVwc2lsb24gY2xvc3VyZXMgKHdoaWNoIGlzIGBuZXdfZGVzdF9ub2RlcycpIG9mCisJIHRoZSBiYWNrcmVmZXJlbmNlIHRvIGFwcHJvcHJpYXRlIHN0YXRlX2xvZy4gICovCisjaWZkZWYgREVCVUcKKyAgICAgIGFzc2VydCAoZGZhLT5uZXh0c1tub2RlX2lkeF0gIT0gUkVHX01JU1NJTkcpOworI2VuZGlmCisgICAgICBmb3IgKDsgYmtjX2lkeCA8IG1jdHgtPm5ia3JlZl9lbnRzOyArK2JrY19pZHgpCisJeworCSAgSWR4IHN1YmV4cF9sZW47CisJICByZV9kZmFzdGF0ZV90ICpkZXN0X3N0YXRlOworCSAgc3RydWN0IHJlX2JhY2tyZWZfY2FjaGVfZW50cnkgKmJrcmVmX2VudDsKKwkgIGJrcmVmX2VudCA9IG1jdHgtPmJrcmVmX2VudHMgKyBia2NfaWR4OworCSAgaWYgKGJrcmVmX2VudC0+bm9kZSAhPSBub2RlX2lkeCB8fCBia3JlZl9lbnQtPnN0cl9pZHggIT0gY3VyX3N0cl9pZHgpCisJICAgIGNvbnRpbnVlOworCSAgc3ViZXhwX2xlbiA9IGJrcmVmX2VudC0+c3ViZXhwX3RvIC0gYmtyZWZfZW50LT5zdWJleHBfZnJvbTsKKwkgIG5ld19kZXN0X25vZGVzID0gKHN1YmV4cF9sZW4gPT0gMAorCQkJICAgID8gZGZhLT5lY2xvc3VyZXMgKyBkZmEtPmVkZXN0c1tub2RlX2lkeF0uZWxlbXNbMF0KKwkJCSAgICA6IGRmYS0+ZWNsb3N1cmVzICsgZGZhLT5uZXh0c1tub2RlX2lkeF0pOworCSAgZGVzdF9zdHJfaWR4ID0gKGN1cl9zdHJfaWR4ICsgYmtyZWZfZW50LT5zdWJleHBfdG8KKwkJCSAgLSBia3JlZl9lbnQtPnN1YmV4cF9mcm9tKTsKKwkgIGNvbnRleHQgPSByZV9zdHJpbmdfY29udGV4dF9hdCAoJm1jdHgtPmlucHV0LCBkZXN0X3N0cl9pZHggLSAxLAorCQkJCQkgIG1jdHgtPmVmbGFncyk7CisJICBkZXN0X3N0YXRlID0gbWN0eC0+c3RhdGVfbG9nW2Rlc3Rfc3RyX2lkeF07CisJICBwcmV2X25lbGVtID0gKChtY3R4LT5zdGF0ZV9sb2dbY3VyX3N0cl9pZHhdID09IE5VTEwpID8gMAorCQkJOiBtY3R4LT5zdGF0ZV9sb2dbY3VyX3N0cl9pZHhdLT5ub2Rlcy5uZWxlbSk7CisJICAvKiBBZGQgYG5ld19kZXN0X25vZGUnIHRvIHN0YXRlX2xvZy4gICovCisJICBpZiAoZGVzdF9zdGF0ZSA9PSBOVUxMKQorCSAgICB7CisJICAgICAgbWN0eC0+c3RhdGVfbG9nW2Rlc3Rfc3RyX2lkeF0KKwkJPSByZV9hY3F1aXJlX3N0YXRlX2NvbnRleHQgKCZlcnIsIGRmYSwgbmV3X2Rlc3Rfbm9kZXMsCisJCQkJCSAgICBjb250ZXh0KTsKKwkgICAgICBpZiAoQkUgKG1jdHgtPnN0YXRlX2xvZ1tkZXN0X3N0cl9pZHhdID09IE5VTEwKKwkJICAgICAgJiYgZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkJZ290byBmcmVlX3JldHVybjsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgcmVfbm9kZV9zZXQgZGVzdF9ub2RlczsKKwkgICAgICBlcnIgPSByZV9ub2RlX3NldF9pbml0X3VuaW9uICgmZGVzdF9ub2RlcywKKwkJCQkJICAgIGRlc3Rfc3RhdGUtPmVudHJhbmNlX25vZGVzLAorCQkJCQkgICAgbmV3X2Rlc3Rfbm9kZXMpOworCSAgICAgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkJeworCQkgIHJlX25vZGVfc2V0X2ZyZWUgKCZkZXN0X25vZGVzKTsKKwkJICBnb3RvIGZyZWVfcmV0dXJuOworCQl9CisJICAgICAgbWN0eC0+c3RhdGVfbG9nW2Rlc3Rfc3RyX2lkeF0KKwkJPSByZV9hY3F1aXJlX3N0YXRlX2NvbnRleHQgKCZlcnIsIGRmYSwgJmRlc3Rfbm9kZXMsIGNvbnRleHQpOworCSAgICAgIHJlX25vZGVfc2V0X2ZyZWUgKCZkZXN0X25vZGVzKTsKKwkgICAgICBpZiAoQkUgKG1jdHgtPnN0YXRlX2xvZ1tkZXN0X3N0cl9pZHhdID09IE5VTEwKKwkJICAgICAgJiYgZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkJZ290byBmcmVlX3JldHVybjsKKwkgICAgfQorCSAgLyogV2UgbmVlZCB0byBjaGVjayByZWN1cnNpdmVseSBpZiB0aGUgYmFja3JlZmVyZW5jZSBjYW4gZXBzaWxvbgorCSAgICAgdHJhbnNpdC4gICovCisJICBpZiAoc3ViZXhwX2xlbiA9PSAwCisJICAgICAgJiYgbWN0eC0+c3RhdGVfbG9nW2N1cl9zdHJfaWR4XS0+bm9kZXMubmVsZW0gPiBwcmV2X25lbGVtKQorCSAgICB7CisJICAgICAgZXJyID0gY2hlY2tfc3ViZXhwX21hdGNoaW5nX3RvcCAobWN0eCwgbmV3X2Rlc3Rfbm9kZXMsCisJCQkJCSAgICAgICBjdXJfc3RyX2lkeCk7CisJICAgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCQlnb3RvIGZyZWVfcmV0dXJuOworCSAgICAgIGVyciA9IHRyYW5zaXRfc3RhdGVfYmtyZWYgKG1jdHgsIG5ld19kZXN0X25vZGVzKTsKKwkgICAgICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJCWdvdG8gZnJlZV9yZXR1cm47CisJICAgIH0KKwl9CisgICAgfQorICBlcnIgPSBSRUdfTk9FUlJPUjsKKyBmcmVlX3JldHVybjoKKyAgcmV0dXJuIGVycjsKK30KKworLyogRW51bWVyYXRlIGFsbCB0aGUgY2FuZGlkYXRlcyB3aGljaCB0aGUgYmFja3JlZmVyZW5jZSBCS1JFRl9OT0RFIGNhbiBtYXRjaAorICAgYXQgQktSRUZfU1RSX0lEWCwgYW5kIHJlZ2lzdGVyIHRoZW0gYnkgbWF0Y2hfY3R4X2FkZF9lbnRyeSgpLgorICAgTm90ZSB0aGF0IHdlIG1pZ2h0IGNvbGxlY3QgaW5hcHByb3ByaWF0ZSBjYW5kaWRhdGVzIGhlcmUuCisgICBIb3dldmVyLCB0aGUgY29zdCBvZiBjaGVja2luZyB0aGVtIHN0cmljdGx5IGhlcmUgaXMgdG9vIGhpZ2gsIHRoZW4gd2UKKyAgIGRlbGF5IHRoZXNlIGNoZWNraW5nIGZvciBwcnVuZV9pbXBvc3NpYmxlX25vZGVzKCkuICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK2dldF9zdWJleHAgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwgSWR4IGJrcmVmX25vZGUsIElkeCBia3JlZl9zdHJfaWR4KQoreworICBjb25zdCByZV9kZmFfdCAqY29uc3QgZGZhID0gbWN0eC0+ZGZhOworICBJZHggc3ViZXhwX251bSwgc3ViX3RvcF9pZHg7CisgIGNvbnN0IGNoYXIgKmJ1ZiA9IChjb25zdCBjaGFyICopIHJlX3N0cmluZ19nZXRfYnVmZmVyICgmbWN0eC0+aW5wdXQpOworICAvKiBSZXR1cm4gaWYgd2UgaGF2ZSBhbHJlYWR5IGNoZWNrZWQgQktSRUZfTk9ERSBhdCBCS1JFRl9TVFJfSURYLiAgKi8KKyAgSWR4IGNhY2hlX2lkeCA9IHNlYXJjaF9jdXJfYmtyZWZfZW50cnkgKG1jdHgsIGJrcmVmX3N0cl9pZHgpOworICBpZiAoY2FjaGVfaWR4ICE9IFJFR19NSVNTSU5HKQorICAgIHsKKyAgICAgIGNvbnN0IHN0cnVjdCByZV9iYWNrcmVmX2NhY2hlX2VudHJ5ICplbnRyeQorCT0gbWN0eC0+YmtyZWZfZW50cyArIGNhY2hlX2lkeDsKKyAgICAgIGRvCisgICAgICAgIGlmIChlbnRyeS0+bm9kZSA9PSBia3JlZl9ub2RlKQorCSAgcmV0dXJuIFJFR19OT0VSUk9SOyAvKiBXZSBhbHJlYWR5IGNoZWNrZWQgaXQuICAqLworICAgICAgd2hpbGUgKGVudHJ5KystPm1vcmUpOworICAgIH0KKworICBzdWJleHBfbnVtID0gZGZhLT5ub2Rlc1tia3JlZl9ub2RlXS5vcHIuaWR4OworCisgIC8qIEZvciBlYWNoIHN1YiBleHByZXNzaW9uICAqLworICBmb3IgKHN1Yl90b3BfaWR4ID0gMDsgc3ViX3RvcF9pZHggPCBtY3R4LT5uc3ViX3RvcHM7ICsrc3ViX3RvcF9pZHgpCisgICAgeworICAgICAgcmVnX2VycmNvZGVfdCBlcnI7CisgICAgICByZV9zdWJfbWF0Y2hfdG9wX3QgKnN1Yl90b3AgPSBtY3R4LT5zdWJfdG9wc1tzdWJfdG9wX2lkeF07CisgICAgICByZV9zdWJfbWF0Y2hfbGFzdF90ICpzdWJfbGFzdDsKKyAgICAgIElkeCBzdWJfbGFzdF9pZHgsIHNsX3N0ciwgYmtyZWZfc3RyX29mZjsKKworICAgICAgaWYgKGRmYS0+bm9kZXNbc3ViX3RvcC0+bm9kZV0ub3ByLmlkeCAhPSBzdWJleHBfbnVtKQorCWNvbnRpbnVlOyAvKiBJdCBpc24ndCByZWxhdGVkLiAgKi8KKworICAgICAgc2xfc3RyID0gc3ViX3RvcC0+c3RyX2lkeDsKKyAgICAgIGJrcmVmX3N0cl9vZmYgPSBia3JlZl9zdHJfaWR4OworICAgICAgLyogQXQgZmlyc3QsIGNoZWNrIHRoZSBsYXN0IG5vZGUgb2Ygc3ViIGV4cHJlc3Npb25zIHdlIGFscmVhZHkKKwkgZXZhbHVhdGVkLiAgKi8KKyAgICAgIGZvciAoc3ViX2xhc3RfaWR4ID0gMDsgc3ViX2xhc3RfaWR4IDwgc3ViX3RvcC0+bmxhc3RzOyArK3N1Yl9sYXN0X2lkeCkKKwl7CisJICByZWdvZmZfdCBzbF9zdHJfZGlmZjsKKwkgIHN1Yl9sYXN0ID0gc3ViX3RvcC0+bGFzdHNbc3ViX2xhc3RfaWR4XTsKKwkgIHNsX3N0cl9kaWZmID0gc3ViX2xhc3QtPnN0cl9pZHggLSBzbF9zdHI7CisJICAvKiBUaGUgbWF0Y2hlZCBzdHJpbmcgYnkgdGhlIHN1YiBleHByZXNzaW9uIG1hdGNoIHdpdGggdGhlIHN1YnN0cmluZworCSAgICAgYXQgdGhlIGJhY2sgcmVmZXJlbmNlPyAgKi8KKwkgIGlmIChzbF9zdHJfZGlmZiA+IDApCisJICAgIHsKKwkgICAgICBpZiAoQkUgKGJrcmVmX3N0cl9vZmYgKyBzbF9zdHJfZGlmZiA+IG1jdHgtPmlucHV0LnZhbGlkX2xlbiwgMCkpCisJCXsKKwkJICAvKiBOb3QgZW5vdWdoIGNoYXJzIGZvciBhIHN1Y2Nlc3NmdWwgbWF0Y2guICAqLworCQkgIGlmIChia3JlZl9zdHJfb2ZmICsgc2xfc3RyX2RpZmYgPiBtY3R4LT5pbnB1dC5sZW4pCisJCSAgICBicmVhazsKKworCQkgIGVyciA9IGNsZWFuX3N0YXRlX2xvZ19pZl9uZWVkZWQgKG1jdHgsCisJCQkJCQkgICBia3JlZl9zdHJfb2ZmCisJCQkJCQkgICArIHNsX3N0cl9kaWZmKTsKKwkJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJCSAgICByZXR1cm4gZXJyOworCQkgIGJ1ZiA9IChjb25zdCBjaGFyICopIHJlX3N0cmluZ19nZXRfYnVmZmVyICgmbWN0eC0+aW5wdXQpOworCQl9CisJICAgICAgaWYgKG1lbWNtcCAoYnVmICsgYmtyZWZfc3RyX29mZiwgYnVmICsgc2xfc3RyLCBzbF9zdHJfZGlmZikgIT0gMCkKKwkJLyogV2UgZG9uJ3QgbmVlZCB0byBzZWFyY2ggdGhpcyBzdWIgZXhwcmVzc2lvbiBhbnkgbW9yZS4gICovCisJCWJyZWFrOworCSAgICB9CisJICBia3JlZl9zdHJfb2ZmICs9IHNsX3N0cl9kaWZmOworCSAgc2xfc3RyICs9IHNsX3N0cl9kaWZmOworCSAgZXJyID0gZ2V0X3N1YmV4cF9zdWIgKG1jdHgsIHN1Yl90b3AsIHN1Yl9sYXN0LCBia3JlZl9ub2RlLAorCQkJCWJrcmVmX3N0cl9pZHgpOworCisJICAvKiBSZWxvYWQgYnVmLCBzaW5jZSB0aGUgcHJlY2VkaW5nIGNhbGwgbWlnaHQgaGF2ZSByZWFsbG9jYXRlZAorCSAgICAgdGhlIGJ1ZmZlci4gICovCisJICBidWYgPSAoY29uc3QgY2hhciAqKSByZV9zdHJpbmdfZ2V0X2J1ZmZlciAoJm1jdHgtPmlucHV0KTsKKworCSAgaWYgKGVyciA9PSBSRUdfTk9NQVRDSCkKKwkgICAgY29udGludWU7CisJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHJldHVybiBlcnI7CisJfQorCisgICAgICBpZiAoc3ViX2xhc3RfaWR4IDwgc3ViX3RvcC0+bmxhc3RzKQorCWNvbnRpbnVlOworICAgICAgaWYgKHN1Yl9sYXN0X2lkeCA+IDApCisJKytzbF9zdHI7CisgICAgICAvKiBUaGVuLCBzZWFyY2ggZm9yIHRoZSBvdGhlciBsYXN0IG5vZGVzIG9mIHRoZSBzdWIgZXhwcmVzc2lvbi4gICovCisgICAgICBmb3IgKDsgc2xfc3RyIDw9IGJrcmVmX3N0cl9pZHg7ICsrc2xfc3RyKQorCXsKKwkgIElkeCBjbHNfbm9kZTsKKwkgIHJlZ29mZl90IHNsX3N0cl9vZmY7CisJICBjb25zdCByZV9ub2RlX3NldCAqbm9kZXM7CisJICBzbF9zdHJfb2ZmID0gc2xfc3RyIC0gc3ViX3RvcC0+c3RyX2lkeDsKKwkgIC8qIFRoZSBtYXRjaGVkIHN0cmluZyBieSB0aGUgc3ViIGV4cHJlc3Npb24gbWF0Y2ggd2l0aCB0aGUgc3Vic3RyaW5nCisJICAgICBhdCB0aGUgYmFjayByZWZlcmVuY2U/ICAqLworCSAgaWYgKHNsX3N0cl9vZmYgPiAwKQorCSAgICB7CisJICAgICAgaWYgKEJFIChia3JlZl9zdHJfb2ZmID49IG1jdHgtPmlucHV0LnZhbGlkX2xlbiwgMCkpCisJCXsKKwkJICAvKiBJZiB3ZSBhcmUgYXQgdGhlIGVuZCBvZiB0aGUgaW5wdXQsIHdlIGNhbm5vdCBtYXRjaC4gICovCisJCSAgaWYgKGJrcmVmX3N0cl9vZmYgPj0gbWN0eC0+aW5wdXQubGVuKQorCQkgICAgYnJlYWs7CisKKwkJICBlcnIgPSBleHRlbmRfYnVmZmVycyAobWN0eCk7CisJCSAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCQkgICAgcmV0dXJuIGVycjsKKworCQkgIGJ1ZiA9IChjb25zdCBjaGFyICopIHJlX3N0cmluZ19nZXRfYnVmZmVyICgmbWN0eC0+aW5wdXQpOworCQl9CisJICAgICAgaWYgKGJ1ZiBbYmtyZWZfc3RyX29mZisrXSAhPSBidWZbc2xfc3RyIC0gMV0pCisJCWJyZWFrOyAvKiBXZSBkb24ndCBuZWVkIHRvIHNlYXJjaCB0aGlzIHN1YiBleHByZXNzaW9uCisJCQkgIGFueSBtb3JlLiAgKi8KKwkgICAgfQorCSAgaWYgKG1jdHgtPnN0YXRlX2xvZ1tzbF9zdHJdID09IE5VTEwpCisJICAgIGNvbnRpbnVlOworCSAgLyogRG9lcyB0aGlzIHN0YXRlIGhhdmUgYSAnKScgb2YgdGhlIHN1YiBleHByZXNzaW9uPyAgKi8KKwkgIG5vZGVzID0gJm1jdHgtPnN0YXRlX2xvZ1tzbF9zdHJdLT5ub2RlczsKKwkgIGNsc19ub2RlID0gZmluZF9zdWJleHBfbm9kZSAoZGZhLCBub2Rlcywgc3ViZXhwX251bSwKKwkJCQkgICAgICAgT1BfQ0xPU0VfU1VCRVhQKTsKKwkgIGlmIChjbHNfbm9kZSA9PSBSRUdfTUlTU0lORykKKwkgICAgY29udGludWU7IC8qIE5vLiAgKi8KKwkgIGlmIChzdWJfdG9wLT5wYXRoID09IE5VTEwpCisJICAgIHsKKwkgICAgICBzdWJfdG9wLT5wYXRoID0gY2FsbG9jIChzaXplb2YgKHN0YXRlX2FycmF5X3QpLAorCQkJCSAgICAgIHNsX3N0ciAtIHN1Yl90b3AtPnN0cl9pZHggKyAxKTsKKwkgICAgICBpZiAoc3ViX3RvcC0+cGF0aCA9PSBOVUxMKQorCQlyZXR1cm4gUkVHX0VTUEFDRTsKKwkgICAgfQorCSAgLyogQ2FuIHRoZSBPUF9PUEVOX1NVQkVYUCBub2RlIGFycml2ZSB0aGUgT1BfQ0xPU0VfU1VCRVhQIG5vZGUKKwkgICAgIGluIHRoZSBjdXJyZW50IGNvbnRleHQ/ICAqLworCSAgZXJyID0gY2hlY2tfYXJyaXZhbCAobWN0eCwgc3ViX3RvcC0+cGF0aCwgc3ViX3RvcC0+bm9kZSwKKwkJCSAgICAgICBzdWJfdG9wLT5zdHJfaWR4LCBjbHNfbm9kZSwgc2xfc3RyLAorCQkJICAgICAgIE9QX0NMT1NFX1NVQkVYUCk7CisJICBpZiAoZXJyID09IFJFR19OT01BVENIKQorCSAgICAgIGNvbnRpbnVlOworCSAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCSAgICAgIHJldHVybiBlcnI7CisJICBzdWJfbGFzdCA9IG1hdGNoX2N0eF9hZGRfc3VibGFzdCAoc3ViX3RvcCwgY2xzX25vZGUsIHNsX3N0cik7CisJICBpZiAoQkUgKHN1Yl9sYXN0ID09IE5VTEwsIDApKQorCSAgICByZXR1cm4gUkVHX0VTUEFDRTsKKwkgIGVyciA9IGdldF9zdWJleHBfc3ViIChtY3R4LCBzdWJfdG9wLCBzdWJfbGFzdCwgYmtyZWZfbm9kZSwKKwkJCQlia3JlZl9zdHJfaWR4KTsKKwkgIGlmIChlcnIgPT0gUkVHX05PTUFUQ0gpCisJICAgIGNvbnRpbnVlOworCX0KKyAgICB9CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworLyogSGVscGVyIGZ1bmN0aW9ucyBmb3IgZ2V0X3N1YmV4cCgpLiAgKi8KKworLyogQ2hlY2sgU1VCX0xBU1QgY2FuIGFycml2ZSB0byB0aGUgYmFjayByZWZlcmVuY2UgQktSRUZfTk9ERSBhdCBCS1JFRl9TVFIuCisgICBJZiBpdCBjYW4gYXJyaXZlLCByZWdpc3RlciB0aGUgc3ViIGV4cHJlc3Npb24gZXhwcmVzc2VkIHdpdGggU1VCX1RPUAorICAgYW5kIFNVQl9MQVNULiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCitnZXRfc3ViZXhwX3N1YiAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4LCBjb25zdCByZV9zdWJfbWF0Y2hfdG9wX3QgKnN1Yl90b3AsCisJCXJlX3N1Yl9tYXRjaF9sYXN0X3QgKnN1Yl9sYXN0LCBJZHggYmtyZWZfbm9kZSwgSWR4IGJrcmVmX3N0cikKK3sKKyAgcmVnX2VycmNvZGVfdCBlcnI7CisgIElkeCB0b19pZHg7CisgIC8qIENhbiB0aGUgc3ViZXhwcmVzc2lvbiBhcnJpdmUgdGhlIGJhY2sgcmVmZXJlbmNlPyAgKi8KKyAgZXJyID0gY2hlY2tfYXJyaXZhbCAobWN0eCwgJnN1Yl9sYXN0LT5wYXRoLCBzdWJfbGFzdC0+bm9kZSwKKwkJICAgICAgIHN1Yl9sYXN0LT5zdHJfaWR4LCBia3JlZl9ub2RlLCBia3JlZl9zdHIsCisJCSAgICAgICBPUF9PUEVOX1NVQkVYUCk7CisgIGlmIChlcnIgIT0gUkVHX05PRVJST1IpCisgICAgcmV0dXJuIGVycjsKKyAgZXJyID0gbWF0Y2hfY3R4X2FkZF9lbnRyeSAobWN0eCwgYmtyZWZfbm9kZSwgYmtyZWZfc3RyLCBzdWJfdG9wLT5zdHJfaWR4LAorCQkJICAgICBzdWJfbGFzdC0+c3RyX2lkeCk7CisgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICByZXR1cm4gZXJyOworICB0b19pZHggPSBia3JlZl9zdHIgKyBzdWJfbGFzdC0+c3RyX2lkeCAtIHN1Yl90b3AtPnN0cl9pZHg7CisgIHJldHVybiBjbGVhbl9zdGF0ZV9sb2dfaWZfbmVlZGVkIChtY3R4LCB0b19pZHgpOworfQorCisvKiBGaW5kIHRoZSBmaXJzdCBub2RlIHdoaWNoIGlzICcoJyBvciAnKScgYW5kIHdob3NlIGluZGV4IGlzIFNVQkVYUF9JRFguCisgICBTZWFyY2ggJygnIGlmIEZMX09QRU4sIG9yIHNlYXJjaCAnKScgb3RoZXJ3aXNlLgorICAgVE9ETzogVGhpcyBmdW5jdGlvbiBpc24ndCBlZmZpY2llbnQuLi4KKwkgQmVjYXVzZSB0aGVyZSBtaWdodCBiZSBtb3JlIHRoYW4gb25lIG5vZGVzIHdob3NlIHR5cGVzIGFyZQorCSBPUF9PUEVOX1NVQkVYUCBhbmQgd2hvc2UgaW5kZXggaXMgU1VCRVhQX0lEWCwgd2UgbXVzdCBjaGVjayBhbGwKKwkgbm9kZXMuCisJIEUuZy4gUkU6IChhKXsyfSAgKi8KKworc3RhdGljIElkeAoraW50ZXJuYWxfZnVuY3Rpb24KK2ZpbmRfc3ViZXhwX25vZGUgKGNvbnN0IHJlX2RmYV90ICpkZmEsIGNvbnN0IHJlX25vZGVfc2V0ICpub2RlcywKKwkJICBJZHggc3ViZXhwX2lkeCwgaW50IHR5cGUpCit7CisgIElkeCBjbHNfaWR4OworICBmb3IgKGNsc19pZHggPSAwOyBjbHNfaWR4IDwgbm9kZXMtPm5lbGVtOyArK2Nsc19pZHgpCisgICAgeworICAgICAgSWR4IGNsc19ub2RlID0gbm9kZXMtPmVsZW1zW2Nsc19pZHhdOworICAgICAgY29uc3QgcmVfdG9rZW5fdCAqbm9kZSA9IGRmYS0+bm9kZXMgKyBjbHNfbm9kZTsKKyAgICAgIGlmIChub2RlLT50eXBlID09IHR5cGUKKwkgICYmIG5vZGUtPm9wci5pZHggPT0gc3ViZXhwX2lkeCkKKwlyZXR1cm4gY2xzX25vZGU7CisgICAgfQorICByZXR1cm4gUkVHX01JU1NJTkc7Cit9CisKKy8qIENoZWNrIHdoZXRoZXIgdGhlIG5vZGUgVE9QX05PREUgYXQgVE9QX1NUUiBjYW4gYXJyaXZlIHRvIHRoZSBub2RlCisgICBMQVNUX05PREUgYXQgTEFTVF9TVFIuICBXZSByZWNvcmQgdGhlIHBhdGggb250byBQQVRIIHNpbmNlIGl0IHdpbGwgYmUKKyAgIGhlYXZpbHkgcmV1c2VkLgorICAgUmV0dXJuIFJFR19OT0VSUk9SIGlmIGl0IGNhbiBhcnJpdmUsIG9yIFJFR19OT01BVENIIG90aGVyd2lzZS4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorY2hlY2tfYXJyaXZhbCAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4LCBzdGF0ZV9hcnJheV90ICpwYXRoLCBJZHggdG9wX25vZGUsCisJICAgICAgIElkeCB0b3Bfc3RyLCBJZHggbGFzdF9ub2RlLCBJZHggbGFzdF9zdHIsIGludCB0eXBlKQoreworICBjb25zdCByZV9kZmFfdCAqY29uc3QgZGZhID0gbWN0eC0+ZGZhOworICByZWdfZXJyY29kZV90IGVyciA9IFJFR19OT0VSUk9SOworICBJZHggc3ViZXhwX251bSwgYmFja3VwX2N1cl9pZHgsIHN0cl9pZHgsIG51bGxfY250OworICByZV9kZmFzdGF0ZV90ICpjdXJfc3RhdGUgPSBOVUxMOworICByZV9ub2RlX3NldCAqY3VyX25vZGVzLCBuZXh0X25vZGVzOworICByZV9kZmFzdGF0ZV90ICoqYmFja3VwX3N0YXRlX2xvZzsKKyAgdW5zaWduZWQgaW50IGNvbnRleHQ7CisKKyAgc3ViZXhwX251bSA9IGRmYS0+bm9kZXNbdG9wX25vZGVdLm9wci5pZHg7CisgIC8qIEV4dGVuZCB0aGUgYnVmZmVyIGlmIHdlIG5lZWQuICAqLworICBpZiAoQkUgKHBhdGgtPmFsbG9jIDwgbGFzdF9zdHIgKyBtY3R4LT5tYXhfbWJfZWxlbV9sZW4gKyAxLCAwKSkKKyAgICB7CisgICAgICByZV9kZmFzdGF0ZV90ICoqbmV3X2FycmF5OworICAgICAgSWR4IG9sZF9hbGxvYyA9IHBhdGgtPmFsbG9jOworICAgICAgSWR4IG5ld19hbGxvYyA9IG9sZF9hbGxvYyArIGxhc3Rfc3RyICsgbWN0eC0+bWF4X21iX2VsZW1fbGVuICsgMTsKKyAgICAgIGlmIChCRSAobmV3X2FsbG9jIDwgb2xkX2FsbG9jLCAwKQorCSAgfHwgQkUgKFNJWkVfTUFYIC8gc2l6ZW9mIChyZV9kZmFzdGF0ZV90ICopIDwgbmV3X2FsbG9jLCAwKSkKKwlyZXR1cm4gUkVHX0VTUEFDRTsKKyAgICAgIG5ld19hcnJheSA9IHJlX3JlYWxsb2MgKHBhdGgtPmFycmF5LCByZV9kZmFzdGF0ZV90ICosIG5ld19hbGxvYyk7CisgICAgICBpZiAoQkUgKG5ld19hcnJheSA9PSBOVUxMLCAwKSkKKwlyZXR1cm4gUkVHX0VTUEFDRTsKKyAgICAgIHBhdGgtPmFycmF5ID0gbmV3X2FycmF5OworICAgICAgcGF0aC0+YWxsb2MgPSBuZXdfYWxsb2M7CisgICAgICBtZW1zZXQgKG5ld19hcnJheSArIG9sZF9hbGxvYywgJ1wwJywKKwkgICAgICBzaXplb2YgKHJlX2RmYXN0YXRlX3QgKikgKiAocGF0aC0+YWxsb2MgLSBvbGRfYWxsb2MpKTsKKyAgICB9CisKKyAgc3RyX2lkeCA9IHBhdGgtPm5leHRfaWR4ID8gcGF0aC0+bmV4dF9pZHggOiB0b3Bfc3RyOworCisgIC8qIFRlbXBvcmFyeSBtb2RpZnkgTUNUWC4gICovCisgIGJhY2t1cF9zdGF0ZV9sb2cgPSBtY3R4LT5zdGF0ZV9sb2c7CisgIGJhY2t1cF9jdXJfaWR4ID0gbWN0eC0+aW5wdXQuY3VyX2lkeDsKKyAgbWN0eC0+c3RhdGVfbG9nID0gcGF0aC0+YXJyYXk7CisgIG1jdHgtPmlucHV0LmN1cl9pZHggPSBzdHJfaWR4OworCisgIC8qIFNldHVwIGluaXRpYWwgbm9kZSBzZXQuICAqLworICBjb250ZXh0ID0gcmVfc3RyaW5nX2NvbnRleHRfYXQgKCZtY3R4LT5pbnB1dCwgc3RyX2lkeCAtIDEsIG1jdHgtPmVmbGFncyk7CisgIGlmIChzdHJfaWR4ID09IHRvcF9zdHIpCisgICAgeworICAgICAgZXJyID0gcmVfbm9kZV9zZXRfaW5pdF8xICgmbmV4dF9ub2RlcywgdG9wX25vZGUpOworICAgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCXJldHVybiBlcnI7CisgICAgICBlcnIgPSBjaGVja19hcnJpdmFsX2V4cGFuZF9lY2wgKGRmYSwgJm5leHRfbm9kZXMsIHN1YmV4cF9udW0sIHR5cGUpOworICAgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCXsKKwkgIHJlX25vZGVfc2V0X2ZyZWUgKCZuZXh0X25vZGVzKTsKKwkgIHJldHVybiBlcnI7CisJfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGN1cl9zdGF0ZSA9IG1jdHgtPnN0YXRlX2xvZ1tzdHJfaWR4XTsKKyAgICAgIGlmIChjdXJfc3RhdGUgJiYgY3VyX3N0YXRlLT5oYXNfYmFja3JlZikKKwl7CisJICBlcnIgPSByZV9ub2RlX3NldF9pbml0X2NvcHkgKCZuZXh0X25vZGVzLCAmY3VyX3N0YXRlLT5ub2Rlcyk7CisJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHJldHVybiBlcnI7CisJfQorICAgICAgZWxzZQorCXJlX25vZGVfc2V0X2luaXRfZW1wdHkgKCZuZXh0X25vZGVzKTsKKyAgICB9CisgIGlmIChzdHJfaWR4ID09IHRvcF9zdHIgfHwgKGN1cl9zdGF0ZSAmJiBjdXJfc3RhdGUtPmhhc19iYWNrcmVmKSkKKyAgICB7CisgICAgICBpZiAobmV4dF9ub2Rlcy5uZWxlbSkKKwl7CisJICBlcnIgPSBleHBhbmRfYmtyZWZfY2FjaGUgKG1jdHgsICZuZXh0X25vZGVzLCBzdHJfaWR4LAorCQkJCSAgICBzdWJleHBfbnVtLCB0eXBlKTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgeworCSAgICAgIHJlX25vZGVfc2V0X2ZyZWUgKCZuZXh0X25vZGVzKTsKKwkgICAgICByZXR1cm4gZXJyOworCSAgICB9CisJfQorICAgICAgY3VyX3N0YXRlID0gcmVfYWNxdWlyZV9zdGF0ZV9jb250ZXh0ICgmZXJyLCBkZmEsICZuZXh0X25vZGVzLCBjb250ZXh0KTsKKyAgICAgIGlmIChCRSAoY3VyX3N0YXRlID09IE5VTEwgJiYgZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwl7CisJICByZV9ub2RlX3NldF9mcmVlICgmbmV4dF9ub2Rlcyk7CisJICByZXR1cm4gZXJyOworCX0KKyAgICAgIG1jdHgtPnN0YXRlX2xvZ1tzdHJfaWR4XSA9IGN1cl9zdGF0ZTsKKyAgICB9CisKKyAgZm9yIChudWxsX2NudCA9IDA7IHN0cl9pZHggPCBsYXN0X3N0ciAmJiBudWxsX2NudCA8PSBtY3R4LT5tYXhfbWJfZWxlbV9sZW47KQorICAgIHsKKyAgICAgIHJlX25vZGVfc2V0X2VtcHR5ICgmbmV4dF9ub2Rlcyk7CisgICAgICBpZiAobWN0eC0+c3RhdGVfbG9nW3N0cl9pZHggKyAxXSkKKwl7CisJICBlcnIgPSByZV9ub2RlX3NldF9tZXJnZSAoJm5leHRfbm9kZXMsCisJCQkJICAgJm1jdHgtPnN0YXRlX2xvZ1tzdHJfaWR4ICsgMV0tPm5vZGVzKTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgeworCSAgICAgIHJlX25vZGVfc2V0X2ZyZWUgKCZuZXh0X25vZGVzKTsKKwkgICAgICByZXR1cm4gZXJyOworCSAgICB9CisJfQorICAgICAgaWYgKGN1cl9zdGF0ZSkKKwl7CisJICBlcnIgPSBjaGVja19hcnJpdmFsX2FkZF9uZXh0X25vZGVzIChtY3R4LCBzdHJfaWR4LAorCQkJCQkgICAgICAmY3VyX3N0YXRlLT5ub25fZXBzX25vZGVzLAorCQkJCQkgICAgICAmbmV4dF9ub2Rlcyk7CisJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHsKKwkgICAgICByZV9ub2RlX3NldF9mcmVlICgmbmV4dF9ub2Rlcyk7CisJICAgICAgcmV0dXJuIGVycjsKKwkgICAgfQorCX0KKyAgICAgICsrc3RyX2lkeDsKKyAgICAgIGlmIChuZXh0X25vZGVzLm5lbGVtKQorCXsKKwkgIGVyciA9IGNoZWNrX2Fycml2YWxfZXhwYW5kX2VjbCAoZGZhLCAmbmV4dF9ub2Rlcywgc3ViZXhwX251bSwgdHlwZSk7CisJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHsKKwkgICAgICByZV9ub2RlX3NldF9mcmVlICgmbmV4dF9ub2Rlcyk7CisJICAgICAgcmV0dXJuIGVycjsKKwkgICAgfQorCSAgZXJyID0gZXhwYW5kX2JrcmVmX2NhY2hlIChtY3R4LCAmbmV4dF9ub2Rlcywgc3RyX2lkeCwKKwkJCQkgICAgc3ViZXhwX251bSwgdHlwZSk7CisJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHsKKwkgICAgICByZV9ub2RlX3NldF9mcmVlICgmbmV4dF9ub2Rlcyk7CisJICAgICAgcmV0dXJuIGVycjsKKwkgICAgfQorCX0KKyAgICAgIGNvbnRleHQgPSByZV9zdHJpbmdfY29udGV4dF9hdCAoJm1jdHgtPmlucHV0LCBzdHJfaWR4IC0gMSwgbWN0eC0+ZWZsYWdzKTsKKyAgICAgIGN1cl9zdGF0ZSA9IHJlX2FjcXVpcmVfc3RhdGVfY29udGV4dCAoJmVyciwgZGZhLCAmbmV4dF9ub2RlcywgY29udGV4dCk7CisgICAgICBpZiAoQkUgKGN1cl9zdGF0ZSA9PSBOVUxMICYmIGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJeworCSAgcmVfbm9kZV9zZXRfZnJlZSAoJm5leHRfbm9kZXMpOworCSAgcmV0dXJuIGVycjsKKwl9CisgICAgICBtY3R4LT5zdGF0ZV9sb2dbc3RyX2lkeF0gPSBjdXJfc3RhdGU7CisgICAgICBudWxsX2NudCA9IGN1cl9zdGF0ZSA9PSBOVUxMID8gbnVsbF9jbnQgKyAxIDogMDsKKyAgICB9CisgIHJlX25vZGVfc2V0X2ZyZWUgKCZuZXh0X25vZGVzKTsKKyAgY3VyX25vZGVzID0gKG1jdHgtPnN0YXRlX2xvZ1tsYXN0X3N0cl0gPT0gTlVMTCA/IE5VTEwKKwkgICAgICAgOiAmbWN0eC0+c3RhdGVfbG9nW2xhc3Rfc3RyXS0+bm9kZXMpOworICBwYXRoLT5uZXh0X2lkeCA9IHN0cl9pZHg7CisKKyAgLyogRml4IE1DVFguICAqLworICBtY3R4LT5zdGF0ZV9sb2cgPSBiYWNrdXBfc3RhdGVfbG9nOworICBtY3R4LT5pbnB1dC5jdXJfaWR4ID0gYmFja3VwX2N1cl9pZHg7CisKKyAgLyogVGhlbiBjaGVjayB0aGUgY3VycmVudCBub2RlIHNldCBoYXMgdGhlIG5vZGUgTEFTVF9OT0RFLiAgKi8KKyAgaWYgKGN1cl9ub2RlcyAhPSBOVUxMICYmIHJlX25vZGVfc2V0X2NvbnRhaW5zIChjdXJfbm9kZXMsIGxhc3Rfbm9kZSkpCisgICAgcmV0dXJuIFJFR19OT0VSUk9SOworCisgIHJldHVybiBSRUdfTk9NQVRDSDsKK30KKworLyogSGVscGVyIGZ1bmN0aW9ucyBmb3IgY2hlY2tfYXJyaXZhbC4gICovCisKKy8qIENhbGN1bGF0ZSB0aGUgZGVzdGluYXRpb24gbm9kZXMgb2YgQ1VSX05PREVTIGF0IFNUUl9JRFgsIGFuZCBhcHBlbmQgdGhlbQorICAgdG8gTkVYVF9OT0RFUy4KKyAgIFRPRE86IFRoaXMgZnVuY3Rpb24gaXMgc2ltaWxhciB0byB0aGUgZnVuY3Rpb25zIHRyYW5zaXRfc3RhdGUqKCksCisJIGhvd2V2ZXIgdGhpcyBmdW5jdGlvbiBoYXMgbWFueSBhZGRpdGlvbmFsIHdvcmtzLgorCSBDYW4ndCB3ZSB1bmlmeSB0aGVtPyAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCitjaGVja19hcnJpdmFsX2FkZF9uZXh0X25vZGVzIChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIElkeCBzdHJfaWR4LAorCQkJICAgICAgcmVfbm9kZV9zZXQgKmN1cl9ub2RlcywgcmVfbm9kZV9zZXQgKm5leHRfbm9kZXMpCit7CisgIGNvbnN0IHJlX2RmYV90ICpjb25zdCBkZmEgPSBtY3R4LT5kZmE7CisgIGJvb2wgb2s7CisgIElkeCBjdXJfaWR4OworICByZWdfZXJyY29kZV90IGVyciA9IFJFR19OT0VSUk9SOworICByZV9ub2RlX3NldCB1bmlvbl9zZXQ7CisgIHJlX25vZGVfc2V0X2luaXRfZW1wdHkgKCZ1bmlvbl9zZXQpOworICBmb3IgKGN1cl9pZHggPSAwOyBjdXJfaWR4IDwgY3VyX25vZGVzLT5uZWxlbTsgKytjdXJfaWR4KQorICAgIHsKKyAgICAgIGludCBuYWNjZXB0ZWQgPSAwOworICAgICAgSWR4IGN1cl9ub2RlID0gY3VyX25vZGVzLT5lbGVtc1tjdXJfaWR4XTsKKyNpZmRlZiBERUJVRworICAgICAgcmVfdG9rZW5fdHlwZV90IHR5cGUgPSBkZmEtPm5vZGVzW2N1cl9ub2RlXS50eXBlOworICAgICAgYXNzZXJ0ICghSVNfRVBTSUxPTl9OT0RFICh0eXBlKSk7CisjZW5kaWYKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAgICAgLyogSWYgdGhlIG5vZGUgbWF5IGFjY2VwdCBgbXVsdGkgYnl0ZScuICAqLworICAgICAgaWYgKGRmYS0+bm9kZXNbY3VyX25vZGVdLmFjY2VwdF9tYikKKwl7CisJICBuYWNjZXB0ZWQgPSBjaGVja19ub2RlX2FjY2VwdF9ieXRlcyAoZGZhLCBjdXJfbm9kZSwgJm1jdHgtPmlucHV0LAorCQkJCQkgICAgICAgc3RyX2lkeCk7CisJICBpZiAobmFjY2VwdGVkID4gMSkKKwkgICAgeworCSAgICAgIHJlX2RmYXN0YXRlX3QgKmRlc3Rfc3RhdGU7CisJICAgICAgSWR4IG5leHRfbm9kZSA9IGRmYS0+bmV4dHNbY3VyX25vZGVdOworCSAgICAgIElkeCBuZXh0X2lkeCA9IHN0cl9pZHggKyBuYWNjZXB0ZWQ7CisJICAgICAgZGVzdF9zdGF0ZSA9IG1jdHgtPnN0YXRlX2xvZ1tuZXh0X2lkeF07CisJICAgICAgcmVfbm9kZV9zZXRfZW1wdHkgKCZ1bmlvbl9zZXQpOworCSAgICAgIGlmIChkZXN0X3N0YXRlKQorCQl7CisJCSAgZXJyID0gcmVfbm9kZV9zZXRfbWVyZ2UgKCZ1bmlvbl9zZXQsICZkZXN0X3N0YXRlLT5ub2Rlcyk7CisJCSAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCQkgICAgeworCQkgICAgICByZV9ub2RlX3NldF9mcmVlICgmdW5pb25fc2V0KTsKKwkJICAgICAgcmV0dXJuIGVycjsKKwkJICAgIH0KKwkJfQorCSAgICAgIG9rID0gcmVfbm9kZV9zZXRfaW5zZXJ0ICgmdW5pb25fc2V0LCBuZXh0X25vZGUpOworCSAgICAgIGlmIChCRSAoISBvaywgMCkpCisJCXsKKwkJICByZV9ub2RlX3NldF9mcmVlICgmdW5pb25fc2V0KTsKKwkJICByZXR1cm4gUkVHX0VTUEFDRTsKKwkJfQorCSAgICAgIG1jdHgtPnN0YXRlX2xvZ1tuZXh0X2lkeF0gPSByZV9hY3F1aXJlX3N0YXRlICgmZXJyLCBkZmEsCisJCQkJCQkJICAgICZ1bmlvbl9zZXQpOworCSAgICAgIGlmIChCRSAobWN0eC0+c3RhdGVfbG9nW25leHRfaWR4XSA9PSBOVUxMCisJCSAgICAgICYmIGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJCXsKKwkJICByZV9ub2RlX3NldF9mcmVlICgmdW5pb25fc2V0KTsKKwkJICByZXR1cm4gZXJyOworCQl9CisJICAgIH0KKwl9CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKyAgICAgIGlmIChuYWNjZXB0ZWQKKwkgIHx8IGNoZWNrX25vZGVfYWNjZXB0IChtY3R4LCBkZmEtPm5vZGVzICsgY3VyX25vZGUsIHN0cl9pZHgpKQorCXsKKwkgIG9rID0gcmVfbm9kZV9zZXRfaW5zZXJ0IChuZXh0X25vZGVzLCBkZmEtPm5leHRzW2N1cl9ub2RlXSk7CisJICBpZiAoQkUgKCEgb2ssIDApKQorCSAgICB7CisJICAgICAgcmVfbm9kZV9zZXRfZnJlZSAoJnVuaW9uX3NldCk7CisJICAgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisJICAgIH0KKwl9CisgICAgfQorICByZV9ub2RlX3NldF9mcmVlICgmdW5pb25fc2V0KTsKKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCisvKiBGb3IgYWxsIHRoZSBub2RlcyBpbiBDVVJfTk9ERVMsIGFkZCB0aGUgZXBzaWxvbiBjbG9zdXJlcyBvZiB0aGVtIHRvCisgICBDVVJfTk9ERVMsIGhvd2V2ZXIgZXhjbHVkZSB0aGUgbm9kZXMgd2hpY2ggYXJlOgorICAgIC0gaW5zaWRlIHRoZSBzdWIgZXhwcmVzc2lvbiB3aG9zZSBudW1iZXIgaXMgRVhfU1VCRVhQLCBpZiBGTF9PUEVOLgorICAgIC0gb3V0IG9mIHRoZSBzdWIgZXhwcmVzc2lvbiB3aG9zZSBudW1iZXIgaXMgRVhfU1VCRVhQLCBpZiAhRkxfT1BFTi4KKyovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorY2hlY2tfYXJyaXZhbF9leHBhbmRfZWNsIChjb25zdCByZV9kZmFfdCAqZGZhLCByZV9ub2RlX3NldCAqY3VyX25vZGVzLAorCQkJICBJZHggZXhfc3ViZXhwLCBpbnQgdHlwZSkKK3sKKyAgcmVnX2VycmNvZGVfdCBlcnI7CisgIElkeCBpZHgsIG91dHNpZGVfbm9kZTsKKyAgcmVfbm9kZV9zZXQgbmV3X25vZGVzOworI2lmZGVmIERFQlVHCisgIGFzc2VydCAoY3VyX25vZGVzLT5uZWxlbSk7CisjZW5kaWYKKyAgZXJyID0gcmVfbm9kZV9zZXRfYWxsb2MgKCZuZXdfbm9kZXMsIGN1cl9ub2Rlcy0+bmVsZW0pOworICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisgICAgcmV0dXJuIGVycjsKKyAgLyogQ3JlYXRlIGEgbmV3IG5vZGUgc2V0IE5FV19OT0RFUyB3aXRoIHRoZSBub2RlcyB3aGljaCBhcmUgZXBzaWxvbgorICAgICBjbG9zdXJlcyBvZiB0aGUgbm9kZSBpbiBDVVJfTk9ERVMuICAqLworCisgIGZvciAoaWR4ID0gMDsgaWR4IDwgY3VyX25vZGVzLT5uZWxlbTsgKytpZHgpCisgICAgeworICAgICAgSWR4IGN1cl9ub2RlID0gY3VyX25vZGVzLT5lbGVtc1tpZHhdOworICAgICAgY29uc3QgcmVfbm9kZV9zZXQgKmVjbG9zdXJlID0gZGZhLT5lY2xvc3VyZXMgKyBjdXJfbm9kZTsKKyAgICAgIG91dHNpZGVfbm9kZSA9IGZpbmRfc3ViZXhwX25vZGUgKGRmYSwgZWNsb3N1cmUsIGV4X3N1YmV4cCwgdHlwZSk7CisgICAgICBpZiAob3V0c2lkZV9ub2RlID09IFJFR19NSVNTSU5HKQorCXsKKwkgIC8qIFRoZXJlIGFyZSBubyBwcm9ibGVtYXRpYyBub2RlcywganVzdCBtZXJnZSB0aGVtLiAgKi8KKwkgIGVyciA9IHJlX25vZGVfc2V0X21lcmdlICgmbmV3X25vZGVzLCBlY2xvc3VyZSk7CisJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHsKKwkgICAgICByZV9ub2RlX3NldF9mcmVlICgmbmV3X25vZGVzKTsKKwkgICAgICByZXR1cm4gZXJyOworCSAgICB9CisJfQorICAgICAgZWxzZQorCXsKKwkgIC8qIFRoZXJlIGFyZSBwcm9ibGVtYXRpYyBub2RlcywgcmUtY2FsY3VsYXRlIGluY3JlbWVudGFsbHkuICAqLworCSAgZXJyID0gY2hlY2tfYXJyaXZhbF9leHBhbmRfZWNsX3N1YiAoZGZhLCAmbmV3X25vZGVzLCBjdXJfbm9kZSwKKwkJCQkJICAgICAgZXhfc3ViZXhwLCB0eXBlKTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgeworCSAgICAgIHJlX25vZGVfc2V0X2ZyZWUgKCZuZXdfbm9kZXMpOworCSAgICAgIHJldHVybiBlcnI7CisJICAgIH0KKwl9CisgICAgfQorICByZV9ub2RlX3NldF9mcmVlIChjdXJfbm9kZXMpOworICAqY3VyX25vZGVzID0gbmV3X25vZGVzOworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKy8qIEhlbHBlciBmdW5jdGlvbiBmb3IgY2hlY2tfYXJyaXZhbF9leHBhbmRfZWNsLgorICAgQ2hlY2sgaW5jcmVtZW50YWxseSB0aGUgZXBzaWxvbiBjbG9zdXJlIG9mIFRBUkdFVCwgYW5kIGlmIGl0IGlzbid0CisgICBwcm9ibGVtYXRpYyBhcHBlbmQgaXQgdG8gRFNUX05PREVTLiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCitjaGVja19hcnJpdmFsX2V4cGFuZF9lY2xfc3ViIChjb25zdCByZV9kZmFfdCAqZGZhLCByZV9ub2RlX3NldCAqZHN0X25vZGVzLAorCQkJICAgICAgSWR4IHRhcmdldCwgSWR4IGV4X3N1YmV4cCwgaW50IHR5cGUpCit7CisgIElkeCBjdXJfbm9kZTsKKyAgZm9yIChjdXJfbm9kZSA9IHRhcmdldDsgIXJlX25vZGVfc2V0X2NvbnRhaW5zIChkc3Rfbm9kZXMsIGN1cl9ub2RlKTspCisgICAgeworICAgICAgYm9vbCBvazsKKworICAgICAgaWYgKGRmYS0+bm9kZXNbY3VyX25vZGVdLnR5cGUgPT0gdHlwZQorCSAgJiYgZGZhLT5ub2Rlc1tjdXJfbm9kZV0ub3ByLmlkeCA9PSBleF9zdWJleHApCisJeworCSAgaWYgKHR5cGUgPT0gT1BfQ0xPU0VfU1VCRVhQKQorCSAgICB7CisJICAgICAgb2sgPSByZV9ub2RlX3NldF9pbnNlcnQgKGRzdF9ub2RlcywgY3VyX25vZGUpOworCSAgICAgIGlmIChCRSAoISBvaywgMCkpCisJCXJldHVybiBSRUdfRVNQQUNFOworCSAgICB9CisJICBicmVhazsKKwl9CisgICAgICBvayA9IHJlX25vZGVfc2V0X2luc2VydCAoZHN0X25vZGVzLCBjdXJfbm9kZSk7CisgICAgICBpZiAoQkUgKCEgb2ssIDApKQorCXJldHVybiBSRUdfRVNQQUNFOworICAgICAgaWYgKGRmYS0+ZWRlc3RzW2N1cl9ub2RlXS5uZWxlbSA9PSAwKQorCWJyZWFrOworICAgICAgaWYgKGRmYS0+ZWRlc3RzW2N1cl9ub2RlXS5uZWxlbSA9PSAyKQorCXsKKwkgIHJlZ19lcnJjb2RlX3QgZXJyOworCSAgZXJyID0gY2hlY2tfYXJyaXZhbF9leHBhbmRfZWNsX3N1YiAoZGZhLCBkc3Rfbm9kZXMsCisJCQkJCSAgICAgIGRmYS0+ZWRlc3RzW2N1cl9ub2RlXS5lbGVtc1sxXSwKKwkJCQkJICAgICAgZXhfc3ViZXhwLCB0eXBlKTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgcmV0dXJuIGVycjsKKwl9CisgICAgICBjdXJfbm9kZSA9IGRmYS0+ZWRlc3RzW2N1cl9ub2RlXS5lbGVtc1swXTsKKyAgICB9CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworCisvKiBGb3IgYWxsIHRoZSBiYWNrIHJlZmVyZW5jZXMgaW4gdGhlIGN1cnJlbnQgc3RhdGUsIGNhbGN1bGF0ZSB0aGUKKyAgIGRlc3RpbmF0aW9uIG9mIHRoZSBiYWNrIHJlZmVyZW5jZXMgYnkgdGhlIGFwcHJvcHJpYXRlIGVudHJ5CisgICBpbiBNQ1RYLT5CS1JFRl9FTlRTLiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCitleHBhbmRfYmtyZWZfY2FjaGUgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwgcmVfbm9kZV9zZXQgKmN1cl9ub2RlcywKKwkJICAgIElkeCBjdXJfc3RyLCBJZHggc3ViZXhwX251bSwgaW50IHR5cGUpCit7CisgIGNvbnN0IHJlX2RmYV90ICpjb25zdCBkZmEgPSBtY3R4LT5kZmE7CisgIHJlZ19lcnJjb2RlX3QgZXJyOworICBJZHggY2FjaGVfaWR4X3N0YXJ0ID0gc2VhcmNoX2N1cl9ia3JlZl9lbnRyeSAobWN0eCwgY3VyX3N0cik7CisgIHN0cnVjdCByZV9iYWNrcmVmX2NhY2hlX2VudHJ5ICplbnQ7CisKKyAgaWYgKGNhY2hlX2lkeF9zdGFydCA9PSBSRUdfTUlTU0lORykKKyAgICByZXR1cm4gUkVHX05PRVJST1I7CisKKyByZXN0YXJ0OgorICBlbnQgPSBtY3R4LT5ia3JlZl9lbnRzICsgY2FjaGVfaWR4X3N0YXJ0OworICBkbworICAgIHsKKyAgICAgIElkeCB0b19pZHgsIG5leHRfbm9kZTsKKworICAgICAgLyogSXMgdGhpcyBlbnRyeSBFTlQgaXMgYXBwcm9wcmlhdGU/ICAqLworICAgICAgaWYgKCFyZV9ub2RlX3NldF9jb250YWlucyAoY3VyX25vZGVzLCBlbnQtPm5vZGUpKQorCWNvbnRpbnVlOyAvKiBOby4gICovCisKKyAgICAgIHRvX2lkeCA9IGN1cl9zdHIgKyBlbnQtPnN1YmV4cF90byAtIGVudC0+c3ViZXhwX2Zyb207CisgICAgICAvKiBDYWxjdWxhdGUgdGhlIGRlc3RpbmF0aW9uIG9mIHRoZSBiYWNrIHJlZmVyZW5jZSwgYW5kIGFwcGVuZCBpdAorCSB0byBNQ1RYLT5TVEFURV9MT0cuICAqLworICAgICAgaWYgKHRvX2lkeCA9PSBjdXJfc3RyKQorCXsKKwkgIC8qIFRoZSBiYWNrcmVmZXJlbmNlIGRpZCBlcHNpbG9uIHRyYW5zaXQsIHdlIG11c3QgcmUtY2hlY2sgYWxsIHRoZQorCSAgICAgbm9kZSBpbiB0aGUgY3VycmVudCBzdGF0ZS4gICovCisJICByZV9ub2RlX3NldCBuZXdfZGVzdHM7CisJICByZWdfZXJyY29kZV90IGVycjIsIGVycjM7CisJICBuZXh0X25vZGUgPSBkZmEtPmVkZXN0c1tlbnQtPm5vZGVdLmVsZW1zWzBdOworCSAgaWYgKHJlX25vZGVfc2V0X2NvbnRhaW5zIChjdXJfbm9kZXMsIG5leHRfbm9kZSkpCisJICAgIGNvbnRpbnVlOworCSAgZXJyID0gcmVfbm9kZV9zZXRfaW5pdF8xICgmbmV3X2Rlc3RzLCBuZXh0X25vZGUpOworCSAgZXJyMiA9IGNoZWNrX2Fycml2YWxfZXhwYW5kX2VjbCAoZGZhLCAmbmV3X2Rlc3RzLCBzdWJleHBfbnVtLCB0eXBlKTsKKwkgIGVycjMgPSByZV9ub2RlX3NldF9tZXJnZSAoY3VyX25vZGVzLCAmbmV3X2Rlc3RzKTsKKwkgIHJlX25vZGVfc2V0X2ZyZWUgKCZuZXdfZGVzdHMpOworCSAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IgfHwgZXJyMiAhPSBSRUdfTk9FUlJPUgorCQkgIHx8IGVycjMgIT0gUkVHX05PRVJST1IsIDApKQorCSAgICB7CisJICAgICAgZXJyID0gKGVyciAhPSBSRUdfTk9FUlJPUiA/IGVycgorCQkgICAgIDogKGVycjIgIT0gUkVHX05PRVJST1IgPyBlcnIyIDogZXJyMykpOworCSAgICAgIHJldHVybiBlcnI7CisJICAgIH0KKwkgIC8qIFRPRE86IEl0IGlzIHN0aWxsIGluZWZmaWNpZW50Li4uICAqLworCSAgZ290byByZXN0YXJ0OworCX0KKyAgICAgIGVsc2UKKwl7CisJICByZV9ub2RlX3NldCB1bmlvbl9zZXQ7CisJICBuZXh0X25vZGUgPSBkZmEtPm5leHRzW2VudC0+bm9kZV07CisJICBpZiAobWN0eC0+c3RhdGVfbG9nW3RvX2lkeF0pCisJICAgIHsKKwkgICAgICBib29sIG9rOworCSAgICAgIGlmIChyZV9ub2RlX3NldF9jb250YWlucyAoJm1jdHgtPnN0YXRlX2xvZ1t0b19pZHhdLT5ub2RlcywKKwkJCQkJbmV4dF9ub2RlKSkKKwkJY29udGludWU7CisJICAgICAgZXJyID0gcmVfbm9kZV9zZXRfaW5pdF9jb3B5ICgmdW5pb25fc2V0LAorCQkJCQkgICAmbWN0eC0+c3RhdGVfbG9nW3RvX2lkeF0tPm5vZGVzKTsKKwkgICAgICBvayA9IHJlX25vZGVfc2V0X2luc2VydCAoJnVuaW9uX3NldCwgbmV4dF9ub2RlKTsKKwkgICAgICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiB8fCAhIG9rLCAwKSkKKwkJeworCQkgIHJlX25vZGVfc2V0X2ZyZWUgKCZ1bmlvbl9zZXQpOworCQkgIGVyciA9IGVyciAhPSBSRUdfTk9FUlJPUiA/IGVyciA6IFJFR19FU1BBQ0U7CisJCSAgcmV0dXJuIGVycjsKKwkJfQorCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBlcnIgPSByZV9ub2RlX3NldF9pbml0XzEgKCZ1bmlvbl9zZXQsIG5leHRfbm9kZSk7CisJICAgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCQlyZXR1cm4gZXJyOworCSAgICB9CisJICBtY3R4LT5zdGF0ZV9sb2dbdG9faWR4XSA9IHJlX2FjcXVpcmVfc3RhdGUgKCZlcnIsIGRmYSwgJnVuaW9uX3NldCk7CisJICByZV9ub2RlX3NldF9mcmVlICgmdW5pb25fc2V0KTsKKwkgIGlmIChCRSAobWN0eC0+c3RhdGVfbG9nW3RvX2lkeF0gPT0gTlVMTAorCQkgICYmIGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHJldHVybiBlcnI7CisJfQorICAgIH0KKyAgd2hpbGUgKGVudCsrLT5tb3JlKTsKKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCisvKiBCdWlsZCB0cmFuc2l0aW9uIHRhYmxlIGZvciB0aGUgc3RhdGUuCisgICBSZXR1cm4gdHJ1ZSBpZiBzdWNjZXNzZnVsLiAgKi8KKworc3RhdGljIGJvb2wKK2ludGVybmFsX2Z1bmN0aW9uCitidWlsZF90cnRhYmxlIChjb25zdCByZV9kZmFfdCAqZGZhLCByZV9kZmFzdGF0ZV90ICpzdGF0ZSkKK3sKKyAgcmVnX2VycmNvZGVfdCBlcnI7CisgIElkeCBpLCBqOworICBpbnQgY2g7CisgIGJvb2wgbmVlZF93b3JkX3RydGFibGUgPSBmYWxzZTsKKyAgYml0c2V0X3dvcmRfdCBlbGVtLCBtYXNrOworICBib29sIGRlc3RzX25vZGVfbWFsbG9jZWQgPSBmYWxzZTsKKyAgYm9vbCBkZXN0X3N0YXRlc19tYWxsb2NlZCA9IGZhbHNlOworICBJZHggbmRlc3RzOyAvKiBOdW1iZXIgb2YgdGhlIGRlc3RpbmF0aW9uIHN0YXRlcyBmcm9tIGBzdGF0ZScuICAqLworICByZV9kZmFzdGF0ZV90ICoqdHJ0YWJsZTsKKyAgcmVfZGZhc3RhdGVfdCAqKmRlc3Rfc3RhdGVzID0gTlVMTCwgKipkZXN0X3N0YXRlc193b3JkLCAqKmRlc3Rfc3RhdGVzX25sOworICByZV9ub2RlX3NldCBmb2xsb3dzLCAqZGVzdHNfbm9kZTsKKyAgYml0c2V0X3QgKmRlc3RzX2NoOworICBiaXRzZXRfdCBhY2NlcHRhYmxlOworCisgIHN0cnVjdCBkZXN0c19hbGxvYworICB7CisgICAgcmVfbm9kZV9zZXQgZGVzdHNfbm9kZVtTQkNfTUFYXTsKKyAgICBiaXRzZXRfdCBkZXN0c19jaFtTQkNfTUFYXTsKKyAgfSAqZGVzdHNfYWxsb2M7CisKKyAgLyogV2UgYnVpbGQgREZBIHN0YXRlcyB3aGljaCBjb3JyZXNwb25kcyB0byB0aGUgZGVzdGluYXRpb24gbm9kZXMKKyAgICAgZnJvbSBgc3RhdGUnLiAgYGRlc3RzX25vZGVbaV0nIHJlcHJlc2VudHMgdGhlIG5vZGVzIHdoaWNoIGktdGgKKyAgICAgZGVzdGluYXRpb24gc3RhdGUgY29udGFpbnMsIGFuZCBgZGVzdHNfY2hbaV0nIHJlcHJlc2VudHMgdGhlCisgICAgIGNoYXJhY3RlcnMgd2hpY2ggaS10aCBkZXN0aW5hdGlvbiBzdGF0ZSBhY2NlcHRzLiAgKi8KKyAgaWYgKF9fbGliY191c2VfYWxsb2NhIChzaXplb2YgKHN0cnVjdCBkZXN0c19hbGxvYykpKQorICAgIGRlc3RzX2FsbG9jID0gKHN0cnVjdCBkZXN0c19hbGxvYyAqKSBhbGxvY2EgKHNpemVvZiAoc3RydWN0IGRlc3RzX2FsbG9jKSk7CisgIGVsc2UKKyAgICB7CisgICAgICBkZXN0c19hbGxvYyA9IHJlX21hbGxvYyAoc3RydWN0IGRlc3RzX2FsbG9jLCAxKTsKKyAgICAgIGlmIChCRSAoZGVzdHNfYWxsb2MgPT0gTlVMTCwgMCkpCisJcmV0dXJuIGZhbHNlOworICAgICAgZGVzdHNfbm9kZV9tYWxsb2NlZCA9IHRydWU7CisgICAgfQorICBkZXN0c19ub2RlID0gZGVzdHNfYWxsb2MtPmRlc3RzX25vZGU7CisgIGRlc3RzX2NoID0gZGVzdHNfYWxsb2MtPmRlc3RzX2NoOworCisgIC8qIEluaXRpYWxpemUgdHJhbnNpdG9uIHRhYmxlLiAgKi8KKyAgc3RhdGUtPndvcmRfdHJ0YWJsZSA9IHN0YXRlLT50cnRhYmxlID0gTlVMTDsKKworICAvKiBBdCBmaXJzdCwgZ3JvdXAgYWxsIG5vZGVzIGJlbG9uZ2luZyB0byBgc3RhdGUnIGludG8gc2V2ZXJhbAorICAgICBkZXN0aW5hdGlvbnMuICAqLworICBuZGVzdHMgPSBncm91cF9ub2Rlc19pbnRvX0RGQXN0YXRlcyAoZGZhLCBzdGF0ZSwgZGVzdHNfbm9kZSwgZGVzdHNfY2gpOworICBpZiAoQkUgKCEgUkVHX1ZBTElEX05PTlpFUk9fSU5ERVggKG5kZXN0cyksIDApKQorICAgIHsKKyAgICAgIGlmIChkZXN0c19ub2RlX21hbGxvY2VkKQorCWZyZWUgKGRlc3RzX2FsbG9jKTsKKyAgICAgIGlmIChuZGVzdHMgPT0gMCkKKwl7CisJICBzdGF0ZS0+dHJ0YWJsZSA9IChyZV9kZmFzdGF0ZV90ICoqKQorCSAgICBjYWxsb2MgKHNpemVvZiAocmVfZGZhc3RhdGVfdCAqKSwgU0JDX01BWCk7CisJICByZXR1cm4gdHJ1ZTsKKwl9CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgIGVyciA9IHJlX25vZGVfc2V0X2FsbG9jICgmZm9sbG93cywgbmRlc3RzICsgMSk7CisgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICBnb3RvIG91dF9mcmVlOworCisgIC8qIEF2b2lkIGFyaXRobWV0aWMgb3ZlcmZsb3cgaW4gc2l6ZSBjYWxjdWxhdGlvbi4gICovCisgIGlmIChCRSAoKCgoU0laRV9NQVggLSAoc2l6ZW9mIChyZV9ub2RlX3NldCkgKyBzaXplb2YgKGJpdHNldF90KSkgKiBTQkNfTUFYKQorCSAgICAvICgzICogc2l6ZW9mIChyZV9kZmFzdGF0ZV90ICopKSkKKwkgICA8IG5kZXN0cyksCisJICAwKSkKKyAgICBnb3RvIG91dF9mcmVlOworCisgIGlmIChfX2xpYmNfdXNlX2FsbG9jYSAoKHNpemVvZiAocmVfbm9kZV9zZXQpICsgc2l6ZW9mIChiaXRzZXRfdCkpICogU0JDX01BWAorCQkJICsgbmRlc3RzICogMyAqIHNpemVvZiAocmVfZGZhc3RhdGVfdCAqKSkpCisgICAgZGVzdF9zdGF0ZXMgPSAocmVfZGZhc3RhdGVfdCAqKikKKyAgICAgIGFsbG9jYSAobmRlc3RzICogMyAqIHNpemVvZiAocmVfZGZhc3RhdGVfdCAqKSk7CisgIGVsc2UKKyAgICB7CisgICAgICBkZXN0X3N0YXRlcyA9IChyZV9kZmFzdGF0ZV90ICoqKQorCW1hbGxvYyAobmRlc3RzICogMyAqIHNpemVvZiAocmVfZGZhc3RhdGVfdCAqKSk7CisgICAgICBpZiAoQkUgKGRlc3Rfc3RhdGVzID09IE5VTEwsIDApKQorCXsKK291dF9mcmVlOgorCSAgaWYgKGRlc3Rfc3RhdGVzX21hbGxvY2VkKQorCSAgICBmcmVlIChkZXN0X3N0YXRlcyk7CisJICByZV9ub2RlX3NldF9mcmVlICgmZm9sbG93cyk7CisJICBmb3IgKGkgPSAwOyBpIDwgbmRlc3RzOyArK2kpCisJICAgIHJlX25vZGVfc2V0X2ZyZWUgKGRlc3RzX25vZGUgKyBpKTsKKwkgIGlmIChkZXN0c19ub2RlX21hbGxvY2VkKQorCSAgICBmcmVlIChkZXN0c19hbGxvYyk7CisJICByZXR1cm4gZmFsc2U7CisJfQorICAgICAgZGVzdF9zdGF0ZXNfbWFsbG9jZWQgPSB0cnVlOworICAgIH0KKyAgZGVzdF9zdGF0ZXNfd29yZCA9IGRlc3Rfc3RhdGVzICsgbmRlc3RzOworICBkZXN0X3N0YXRlc19ubCA9IGRlc3Rfc3RhdGVzX3dvcmQgKyBuZGVzdHM7CisgIGJpdHNldF9lbXB0eSAoYWNjZXB0YWJsZSk7CisKKyAgLyogVGhlbiBidWlsZCB0aGUgc3RhdGVzIGZvciBhbGwgZGVzdGluYXRpb25zLiAgKi8KKyAgZm9yIChpID0gMDsgaSA8IG5kZXN0czsgKytpKQorICAgIHsKKyAgICAgIElkeCBuZXh0X25vZGU7CisgICAgICByZV9ub2RlX3NldF9lbXB0eSAoJmZvbGxvd3MpOworICAgICAgLyogTWVyZ2UgdGhlIGZvbGxvd3Mgb2YgdGhpcyBkZXN0aW5hdGlvbiBzdGF0ZXMuICAqLworICAgICAgZm9yIChqID0gMDsgaiA8IGRlc3RzX25vZGVbaV0ubmVsZW07ICsraikKKwl7CisJICBuZXh0X25vZGUgPSBkZmEtPm5leHRzW2Rlc3RzX25vZGVbaV0uZWxlbXNbal1dOworCSAgaWYgKG5leHRfbm9kZSAhPSBSRUdfTUlTU0lORykKKwkgICAgeworCSAgICAgIGVyciA9IHJlX25vZGVfc2V0X21lcmdlICgmZm9sbG93cywgZGZhLT5lY2xvc3VyZXMgKyBuZXh0X25vZGUpOworCSAgICAgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkJZ290byBvdXRfZnJlZTsKKwkgICAgfQorCX0KKyAgICAgIGRlc3Rfc3RhdGVzW2ldID0gcmVfYWNxdWlyZV9zdGF0ZV9jb250ZXh0ICgmZXJyLCBkZmEsICZmb2xsb3dzLCAwKTsKKyAgICAgIGlmIChCRSAoZGVzdF9zdGF0ZXNbaV0gPT0gTlVMTCAmJiBlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCWdvdG8gb3V0X2ZyZWU7CisgICAgICAvKiBJZiB0aGUgbmV3IHN0YXRlIGhhcyBjb250ZXh0IGNvbnN0cmFpbnQsCisJIGJ1aWxkIGFwcHJvcHJpYXRlIHN0YXRlcyBmb3IgdGhlc2UgY29udGV4dHMuICAqLworICAgICAgaWYgKGRlc3Rfc3RhdGVzW2ldLT5oYXNfY29uc3RyYWludCkKKwl7CisJICBkZXN0X3N0YXRlc193b3JkW2ldID0gcmVfYWNxdWlyZV9zdGF0ZV9jb250ZXh0ICgmZXJyLCBkZmEsICZmb2xsb3dzLAorCQkJCQkJCSAgQ09OVEVYVF9XT1JEKTsKKwkgIGlmIChCRSAoZGVzdF9zdGF0ZXNfd29yZFtpXSA9PSBOVUxMICYmIGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIGdvdG8gb3V0X2ZyZWU7CisKKwkgIGlmIChkZXN0X3N0YXRlc1tpXSAhPSBkZXN0X3N0YXRlc193b3JkW2ldICYmIGRmYS0+bWJfY3VyX21heCA+IDEpCisJICAgIG5lZWRfd29yZF90cnRhYmxlID0gdHJ1ZTsKKworCSAgZGVzdF9zdGF0ZXNfbmxbaV0gPSByZV9hY3F1aXJlX3N0YXRlX2NvbnRleHQgKCZlcnIsIGRmYSwgJmZvbGxvd3MsCisJCQkJCQkJQ09OVEVYVF9ORVdMSU5FKTsKKwkgIGlmIChCRSAoZGVzdF9zdGF0ZXNfbmxbaV0gPT0gTlVMTCAmJiBlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCSAgICBnb3RvIG91dF9mcmVlOworIAl9CisgICAgICBlbHNlCisJeworCSAgZGVzdF9zdGF0ZXNfd29yZFtpXSA9IGRlc3Rfc3RhdGVzW2ldOworCSAgZGVzdF9zdGF0ZXNfbmxbaV0gPSBkZXN0X3N0YXRlc1tpXTsKKwl9CisgICAgICBiaXRzZXRfbWVyZ2UgKGFjY2VwdGFibGUsIGRlc3RzX2NoW2ldKTsKKyAgICB9CisKKyAgaWYgKCFCRSAobmVlZF93b3JkX3RydGFibGUsIDApKQorICAgIHsKKyAgICAgIC8qIFdlIGRvbid0IGNhcmUgYWJvdXQgd2hldGhlciB0aGUgZm9sbG93aW5nIGNoYXJhY3RlciBpcyBhIHdvcmQKKwkgY2hhcmFjdGVyLCBvciB3ZSBhcmUgaW4gYSBzaW5nbGUtYnl0ZSBjaGFyYWN0ZXIgc2V0IHNvIHdlIGNhbgorCSBkaXNjZXJuIGJ5IGxvb2tpbmcgYXQgdGhlIGNoYXJhY3RlciBjb2RlOiBhbGxvY2F0ZSBhCisJIDI1Ni1lbnRyeSB0cmFuc2l0aW9uIHRhYmxlLiAgKi8KKyAgICAgIHRydGFibGUgPSBzdGF0ZS0+dHJ0YWJsZSA9CisJKHJlX2RmYXN0YXRlX3QgKiopIGNhbGxvYyAoc2l6ZW9mIChyZV9kZmFzdGF0ZV90ICopLCBTQkNfTUFYKTsKKyAgICAgIGlmIChCRSAodHJ0YWJsZSA9PSBOVUxMLCAwKSkKKwlnb3RvIG91dF9mcmVlOworCisgICAgICAvKiBGb3IgYWxsIGNoYXJhY3RlcnMgY2guLi46ICAqLworICAgICAgZm9yIChpID0gMDsgaSA8IEJJVFNFVF9XT1JEUzsgKytpKQorCWZvciAoY2ggPSBpICogQklUU0VUX1dPUkRfQklUUywgZWxlbSA9IGFjY2VwdGFibGVbaV0sIG1hc2sgPSAxOworCSAgICAgZWxlbTsKKwkgICAgIG1hc2sgPDw9IDEsIGVsZW0gPj49IDEsICsrY2gpCisJICBpZiAoQkUgKGVsZW0gJiAxLCAwKSkKKwkgICAgeworCSAgICAgIC8qIFRoZXJlIG11c3QgYmUgZXhhY3RseSBvbmUgZGVzdGluYXRpb24gd2hpY2ggYWNjZXB0cworCQkgY2hhcmFjdGVyIGNoLiAgU2VlIGdyb3VwX25vZGVzX2ludG9fREZBc3RhdGVzLiAgKi8KKwkgICAgICBmb3IgKGogPSAwOyAoZGVzdHNfY2hbal1baV0gJiBtYXNrKSA9PSAwOyArK2opCisJCTsKKworCSAgICAgIC8qIGotdGggZGVzdGluYXRpb24gYWNjZXB0cyB0aGUgd29yZCBjaGFyYWN0ZXIgY2guICAqLworCSAgICAgIGlmIChkZmEtPndvcmRfY2hhcltpXSAmIG1hc2spCisJCXRydGFibGVbY2hdID0gZGVzdF9zdGF0ZXNfd29yZFtqXTsKKwkgICAgICBlbHNlCisJCXRydGFibGVbY2hdID0gZGVzdF9zdGF0ZXNbal07CisJICAgIH0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBXZSBjYXJlIGFib3V0IHdoZXRoZXIgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXIgaXMgYSB3b3JkCisJIGNoYXJhY3RlciwgYW5kIHdlIGFyZSBpbiBhIG11bHRpLWJ5dGUgY2hhcmFjdGVyIHNldDogZGlzY2VybgorCSBieSBsb29raW5nIGF0IHRoZSBjaGFyYWN0ZXIgY29kZTogYnVpbGQgdHdvIDI1Ni1lbnRyeQorCSB0cmFuc2l0aW9uIHRhYmxlcywgb25lIHN0YXJ0aW5nIGF0IHRydGFibGVbMF0gYW5kIG9uZQorCSBzdGFydGluZyBhdCB0cnRhYmxlW1NCQ19NQVhdLiAgKi8KKyAgICAgIHRydGFibGUgPSBzdGF0ZS0+d29yZF90cnRhYmxlID0KKwkocmVfZGZhc3RhdGVfdCAqKikgY2FsbG9jIChzaXplb2YgKHJlX2RmYXN0YXRlX3QgKiksIDIgKiBTQkNfTUFYKTsKKyAgICAgIGlmIChCRSAodHJ0YWJsZSA9PSBOVUxMLCAwKSkKKwlnb3RvIG91dF9mcmVlOworCisgICAgICAvKiBGb3IgYWxsIGNoYXJhY3RlcnMgY2guLi46ICAqLworICAgICAgZm9yIChpID0gMDsgaSA8IEJJVFNFVF9XT1JEUzsgKytpKQorCWZvciAoY2ggPSBpICogQklUU0VUX1dPUkRfQklUUywgZWxlbSA9IGFjY2VwdGFibGVbaV0sIG1hc2sgPSAxOworCSAgICAgZWxlbTsKKwkgICAgIG1hc2sgPDw9IDEsIGVsZW0gPj49IDEsICsrY2gpCisJICBpZiAoQkUgKGVsZW0gJiAxLCAwKSkKKwkgICAgeworCSAgICAgIC8qIFRoZXJlIG11c3QgYmUgZXhhY3RseSBvbmUgZGVzdGluYXRpb24gd2hpY2ggYWNjZXB0cworCQkgY2hhcmFjdGVyIGNoLiAgU2VlIGdyb3VwX25vZGVzX2ludG9fREZBc3RhdGVzLiAgKi8KKwkgICAgICBmb3IgKGogPSAwOyAoZGVzdHNfY2hbal1baV0gJiBtYXNrKSA9PSAwOyArK2opCisJCTsKKworCSAgICAgIC8qIGotdGggZGVzdGluYXRpb24gYWNjZXB0cyB0aGUgd29yZCBjaGFyYWN0ZXIgY2guICAqLworCSAgICAgIHRydGFibGVbY2hdID0gZGVzdF9zdGF0ZXNbal07CisJICAgICAgdHJ0YWJsZVtjaCArIFNCQ19NQVhdID0gZGVzdF9zdGF0ZXNfd29yZFtqXTsKKwkgICAgfQorICAgIH0KKworICAvKiBuZXcgbGluZSAqLworICBpZiAoYml0c2V0X2NvbnRhaW4gKGFjY2VwdGFibGUsIE5FV0xJTkVfQ0hBUikpCisgICAgeworICAgICAgLyogVGhlIGN1cnJlbnQgc3RhdGUgYWNjZXB0cyBuZXdsaW5lIGNoYXJhY3Rlci4gICovCisgICAgICBmb3IgKGogPSAwOyBqIDwgbmRlc3RzOyArK2opCisJaWYgKGJpdHNldF9jb250YWluIChkZXN0c19jaFtqXSwgTkVXTElORV9DSEFSKSkKKwkgIHsKKwkgICAgLyogay10aCBkZXN0aW5hdGlvbiBhY2NlcHRzIG5ld2xpbmUgY2hhcmFjdGVyLiAgKi8KKwkgICAgdHJ0YWJsZVtORVdMSU5FX0NIQVJdID0gZGVzdF9zdGF0ZXNfbmxbal07CisJICAgIGlmIChuZWVkX3dvcmRfdHJ0YWJsZSkKKwkgICAgICB0cnRhYmxlW05FV0xJTkVfQ0hBUiArIFNCQ19NQVhdID0gZGVzdF9zdGF0ZXNfbmxbal07CisJICAgIC8qIFRoZXJlIG11c3QgYmUgb25seSBvbmUgZGVzdGluYXRpb24gd2hpY2ggYWNjZXB0cworCSAgICAgICBuZXdsaW5lLiAgU2VlIGdyb3VwX25vZGVzX2ludG9fREZBc3RhdGVzLiAgKi8KKwkgICAgYnJlYWs7CisJICB9CisgICAgfQorCisgIGlmIChkZXN0X3N0YXRlc19tYWxsb2NlZCkKKyAgICBmcmVlIChkZXN0X3N0YXRlcyk7CisKKyAgcmVfbm9kZV9zZXRfZnJlZSAoJmZvbGxvd3MpOworICBmb3IgKGkgPSAwOyBpIDwgbmRlc3RzOyArK2kpCisgICAgcmVfbm9kZV9zZXRfZnJlZSAoZGVzdHNfbm9kZSArIGkpOworCisgIGlmIChkZXN0c19ub2RlX21hbGxvY2VkKQorICAgIGZyZWUgKGRlc3RzX2FsbG9jKTsKKworICByZXR1cm4gdHJ1ZTsKK30KKworLyogR3JvdXAgYWxsIG5vZGVzIGJlbG9uZ2luZyB0byBTVEFURSBpbnRvIHNldmVyYWwgZGVzdGluYXRpb25zLgorICAgVGhlbiBmb3IgYWxsIGRlc3RpbmF0aW9ucywgc2V0IHRoZSBub2RlcyBiZWxvbmdpbmcgdG8gdGhlIGRlc3RpbmF0aW9uCisgICB0byBERVNUU19OT0RFW2ldIGFuZCBzZXQgdGhlIGNoYXJhY3RlcnMgYWNjZXB0ZWQgYnkgdGhlIGRlc3RpbmF0aW9uCisgICB0byBERVNUX0NIW2ldLiAgVGhpcyBmdW5jdGlvbiByZXR1cm4gdGhlIG51bWJlciBvZiBkZXN0aW5hdGlvbnMuICAqLworCitzdGF0aWMgSWR4CitpbnRlcm5hbF9mdW5jdGlvbgorZ3JvdXBfbm9kZXNfaW50b19ERkFzdGF0ZXMgKGNvbnN0IHJlX2RmYV90ICpkZmEsIGNvbnN0IHJlX2RmYXN0YXRlX3QgKnN0YXRlLAorCQkJICAgIHJlX25vZGVfc2V0ICpkZXN0c19ub2RlLCBiaXRzZXRfdCAqZGVzdHNfY2gpCit7CisgIHJlZ19lcnJjb2RlX3QgZXJyOworICBib29sIG9rOworICBJZHggaSwgaiwgazsKKyAgSWR4IG5kZXN0czsgLyogTnVtYmVyIG9mIHRoZSBkZXN0aW5hdGlvbnMgZnJvbSBgc3RhdGUnLiAgKi8KKyAgYml0c2V0X3QgYWNjZXB0czsgLyogQ2hhcmFjdGVycyBhIG5vZGUgY2FuIGFjY2VwdC4gICovCisgIGNvbnN0IHJlX25vZGVfc2V0ICpjdXJfbm9kZXMgPSAmc3RhdGUtPm5vZGVzOworICBiaXRzZXRfZW1wdHkgKGFjY2VwdHMpOworICBuZGVzdHMgPSAwOworCisgIC8qIEZvciBhbGwgdGhlIG5vZGVzIGJlbG9uZ2luZyB0byBgc3RhdGUnLCAgKi8KKyAgZm9yIChpID0gMDsgaSA8IGN1cl9ub2Rlcy0+bmVsZW07ICsraSkKKyAgICB7CisgICAgICByZV90b2tlbl90ICpub2RlID0gJmRmYS0+bm9kZXNbY3VyX25vZGVzLT5lbGVtc1tpXV07CisgICAgICByZV90b2tlbl90eXBlX3QgdHlwZSA9IG5vZGUtPnR5cGU7CisgICAgICB1bnNpZ25lZCBpbnQgY29uc3RyYWludCA9IG5vZGUtPmNvbnN0cmFpbnQ7CisKKyAgICAgIC8qIEVudW1lcmF0ZSBhbGwgc2luZ2xlIGJ5dGUgY2hhcmFjdGVyIHRoaXMgbm9kZSBjYW4gYWNjZXB0LiAgKi8KKyAgICAgIGlmICh0eXBlID09IENIQVJBQ1RFUikKKwliaXRzZXRfc2V0IChhY2NlcHRzLCBub2RlLT5vcHIuYyk7CisgICAgICBlbHNlIGlmICh0eXBlID09IFNJTVBMRV9CUkFDS0VUKQorCXsKKwkgIGJpdHNldF9tZXJnZSAoYWNjZXB0cywgbm9kZS0+b3ByLnNiY3NldCk7CisJfQorICAgICAgZWxzZSBpZiAodHlwZSA9PSBPUF9QRVJJT0QpCisJeworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisJICBpZiAoZGZhLT5tYl9jdXJfbWF4ID4gMSkKKwkgICAgYml0c2V0X21lcmdlIChhY2NlcHRzLCBkZmEtPnNiX2NoYXIpOworCSAgZWxzZQorI2VuZGlmCisJICAgIGJpdHNldF9zZXRfYWxsIChhY2NlcHRzKTsKKwkgIGlmICghKGRmYS0+c3ludGF4ICYgUkVfRE9UX05FV0xJTkUpKQorCSAgICBiaXRzZXRfY2xlYXIgKGFjY2VwdHMsICdcbicpOworCSAgaWYgKGRmYS0+c3ludGF4ICYgUkVfRE9UX05PVF9OVUxMKQorCSAgICBiaXRzZXRfY2xlYXIgKGFjY2VwdHMsICdcMCcpOworCX0KKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAgICAgZWxzZSBpZiAodHlwZSA9PSBPUF9VVEY4X1BFUklPRCkKKyAgICAgICAgeworCSAgaWYgKEFTQ0lJX0NIQVJTICUgQklUU0VUX1dPUkRfQklUUyA9PSAwKQorCSAgICBtZW1zZXQgKGFjY2VwdHMsIC0xLCBBU0NJSV9DSEFSUyAvIENIQVJfQklUKTsKKwkgIGVsc2UKKwkgICAgYml0c2V0X21lcmdlIChhY2NlcHRzLCB1dGY4X3NiX21hcCk7CisJICBpZiAoIShkZmEtPnN5bnRheCAmIFJFX0RPVF9ORVdMSU5FKSkKKwkgICAgYml0c2V0X2NsZWFyIChhY2NlcHRzLCAnXG4nKTsKKwkgIGlmIChkZmEtPnN5bnRheCAmIFJFX0RPVF9OT1RfTlVMTCkKKwkgICAgYml0c2V0X2NsZWFyIChhY2NlcHRzLCAnXDAnKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICBlbHNlCisJY29udGludWU7CisKKyAgICAgIC8qIENoZWNrIHRoZSBgYWNjZXB0cycgYW5kIHNpZnQgdGhlIGNoYXJhY3RlcnMgd2hpY2ggYXJlIG5vdAorCSBtYXRjaCBpdCB0aGUgY29udGV4dC4gICovCisgICAgICBpZiAoY29uc3RyYWludCkKKwl7CisJICBpZiAoY29uc3RyYWludCAmIE5FWFRfTkVXTElORV9DT05TVFJBSU5UKQorCSAgICB7CisJICAgICAgYm9vbCBhY2NlcHRzX25ld2xpbmUgPSBiaXRzZXRfY29udGFpbiAoYWNjZXB0cywgTkVXTElORV9DSEFSKTsKKwkgICAgICBiaXRzZXRfZW1wdHkgKGFjY2VwdHMpOworCSAgICAgIGlmIChhY2NlcHRzX25ld2xpbmUpCisJCWJpdHNldF9zZXQgKGFjY2VwdHMsIE5FV0xJTkVfQ0hBUik7CisJICAgICAgZWxzZQorCQljb250aW51ZTsKKwkgICAgfQorCSAgaWYgKGNvbnN0cmFpbnQgJiBORVhUX0VOREJVRl9DT05TVFJBSU5UKQorCSAgICB7CisJICAgICAgYml0c2V0X2VtcHR5IChhY2NlcHRzKTsKKwkgICAgICBjb250aW51ZTsKKwkgICAgfQorCisJICBpZiAoY29uc3RyYWludCAmIE5FWFRfV09SRF9DT05TVFJBSU5UKQorCSAgICB7CisJICAgICAgYml0c2V0X3dvcmRfdCBhbnlfc2V0ID0gMDsKKwkgICAgICBpZiAodHlwZSA9PSBDSEFSQUNURVIgJiYgIW5vZGUtPndvcmRfY2hhcikKKwkJeworCQkgIGJpdHNldF9lbXB0eSAoYWNjZXB0cyk7CisJCSAgY29udGludWU7CisJCX0KKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorCSAgICAgIGlmIChkZmEtPm1iX2N1cl9tYXggPiAxKQorCQlmb3IgKGogPSAwOyBqIDwgQklUU0VUX1dPUkRTOyArK2opCisJCSAgYW55X3NldCB8PSAoYWNjZXB0c1tqXSAmPSAoZGZhLT53b3JkX2NoYXJbal0gfCB+ZGZhLT5zYl9jaGFyW2pdKSk7CisJICAgICAgZWxzZQorI2VuZGlmCisJCWZvciAoaiA9IDA7IGogPCBCSVRTRVRfV09SRFM7ICsraikKKwkJICBhbnlfc2V0IHw9IChhY2NlcHRzW2pdICY9IGRmYS0+d29yZF9jaGFyW2pdKTsKKwkgICAgICBpZiAoIWFueV9zZXQpCisJCWNvbnRpbnVlOworCSAgICB9CisJICBpZiAoY29uc3RyYWludCAmIE5FWFRfTk9UV09SRF9DT05TVFJBSU5UKQorCSAgICB7CisJICAgICAgYml0c2V0X3dvcmRfdCBhbnlfc2V0ID0gMDsKKwkgICAgICBpZiAodHlwZSA9PSBDSEFSQUNURVIgJiYgbm9kZS0+d29yZF9jaGFyKQorCQl7CisJCSAgYml0c2V0X2VtcHR5IChhY2NlcHRzKTsKKwkJICBjb250aW51ZTsKKwkJfQorI2lmZGVmIFJFX0VOQUJMRV9JMThOCisJICAgICAgaWYgKGRmYS0+bWJfY3VyX21heCA+IDEpCisJCWZvciAoaiA9IDA7IGogPCBCSVRTRVRfV09SRFM7ICsraikKKwkJICBhbnlfc2V0IHw9IChhY2NlcHRzW2pdICY9IH4oZGZhLT53b3JkX2NoYXJbal0gJiBkZmEtPnNiX2NoYXJbal0pKTsKKwkgICAgICBlbHNlCisjZW5kaWYKKwkJZm9yIChqID0gMDsgaiA8IEJJVFNFVF9XT1JEUzsgKytqKQorCQkgIGFueV9zZXQgfD0gKGFjY2VwdHNbal0gJj0gfmRmYS0+d29yZF9jaGFyW2pdKTsKKwkgICAgICBpZiAoIWFueV9zZXQpCisJCWNvbnRpbnVlOworCSAgICB9CisJfQorCisgICAgICAvKiBUaGVuIGRpdmlkZSBgYWNjZXB0cycgaW50byBERkEgc3RhdGVzLCBvciBjcmVhdGUgYSBuZXcKKwkgc3RhdGUuICBBYm92ZSwgd2UgbWFrZSBzdXJlIHRoYXQgYWNjZXB0cyBpcyBub3QgZW1wdHkuICAqLworICAgICAgZm9yIChqID0gMDsgaiA8IG5kZXN0czsgKytqKQorCXsKKwkgIGJpdHNldF90IGludGVyc2VjOyAvKiBJbnRlcnNlY3Rpb24gc2V0cywgc2VlIGJlbG93LiAgKi8KKwkgIGJpdHNldF90IHJlbWFpbnM7CisJICAvKiBGbGFncywgc2VlIGJlbG93LiAgKi8KKwkgIGJpdHNldF93b3JkX3QgaGFzX2ludGVyc2VjLCBub3Rfc3Vic2V0LCBub3RfY29uc3VtZWQ7CisKKwkgIC8qIE9wdGltaXphdGlvbiwgc2tpcCBpZiB0aGlzIHN0YXRlIGRvZXNuJ3QgYWNjZXB0IHRoZSBjaGFyYWN0ZXIuICAqLworCSAgaWYgKHR5cGUgPT0gQ0hBUkFDVEVSICYmICFiaXRzZXRfY29udGFpbiAoZGVzdHNfY2hbal0sIG5vZGUtPm9wci5jKSkKKwkgICAgY29udGludWU7CisKKwkgIC8qIEVudW1lcmF0ZSB0aGUgaW50ZXJzZWN0aW9uIHNldCBvZiB0aGlzIHN0YXRlIGFuZCBgYWNjZXB0cycuICAqLworCSAgaGFzX2ludGVyc2VjID0gMDsKKwkgIGZvciAoayA9IDA7IGsgPCBCSVRTRVRfV09SRFM7ICsraykKKwkgICAgaGFzX2ludGVyc2VjIHw9IGludGVyc2VjW2tdID0gYWNjZXB0c1trXSAmIGRlc3RzX2NoW2pdW2tdOworCSAgLyogQW5kIHNraXAgaWYgdGhlIGludGVyc2VjdGlvbiBzZXQgaXMgZW1wdHkuICAqLworCSAgaWYgKCFoYXNfaW50ZXJzZWMpCisJICAgIGNvbnRpbnVlOworCisJICAvKiBUaGVuIGNoZWNrIGlmIHRoaXMgc3RhdGUgaXMgYSBzdWJzZXQgb2YgYGFjY2VwdHMnLiAgKi8KKwkgIG5vdF9zdWJzZXQgPSBub3RfY29uc3VtZWQgPSAwOworCSAgZm9yIChrID0gMDsgayA8IEJJVFNFVF9XT1JEUzsgKytrKQorCSAgICB7CisJICAgICAgbm90X3N1YnNldCB8PSByZW1haW5zW2tdID0gfmFjY2VwdHNba10gJiBkZXN0c19jaFtqXVtrXTsKKwkgICAgICBub3RfY29uc3VtZWQgfD0gYWNjZXB0c1trXSA9IGFjY2VwdHNba10gJiB+ZGVzdHNfY2hbal1ba107CisJICAgIH0KKworCSAgLyogSWYgdGhpcyBzdGF0ZSBpc24ndCBhIHN1YnNldCBvZiBgYWNjZXB0cycsIGNyZWF0ZSBhCisJICAgICBuZXcgZ3JvdXAgc3RhdGUsIHdoaWNoIGhhcyB0aGUgYHJlbWFpbnMnLiAqLworCSAgaWYgKG5vdF9zdWJzZXQpCisJICAgIHsKKwkgICAgICBiaXRzZXRfY29weSAoZGVzdHNfY2hbbmRlc3RzXSwgcmVtYWlucyk7CisJICAgICAgYml0c2V0X2NvcHkgKGRlc3RzX2NoW2pdLCBpbnRlcnNlYyk7CisJICAgICAgZXJyID0gcmVfbm9kZV9zZXRfaW5pdF9jb3B5IChkZXN0c19ub2RlICsgbmRlc3RzLCAmZGVzdHNfbm9kZVtqXSk7CisJICAgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCQlnb3RvIGVycm9yX3JldHVybjsKKwkgICAgICArK25kZXN0czsKKwkgICAgfQorCisJICAvKiBQdXQgdGhlIHBvc2l0aW9uIGluIHRoZSBjdXJyZW50IGdyb3VwLiAqLworCSAgb2sgPSByZV9ub2RlX3NldF9pbnNlcnQgKCZkZXN0c19ub2RlW2pdLCBjdXJfbm9kZXMtPmVsZW1zW2ldKTsKKwkgIGlmIChCRSAoISBvaywgMCkpCisJICAgIGdvdG8gZXJyb3JfcmV0dXJuOworCisJICAvKiBJZiBhbGwgY2hhcmFjdGVycyBhcmUgY29uc3VtZWQsIGdvIHRvIG5leHQgbm9kZS4gKi8KKwkgIGlmICghbm90X2NvbnN1bWVkKQorCSAgICBicmVhazsKKwl9CisgICAgICAvKiBTb21lIGNoYXJhY3RlcnMgcmVtYWluLCBjcmVhdGUgYSBuZXcgZ3JvdXAuICovCisgICAgICBpZiAoaiA9PSBuZGVzdHMpCisJeworCSAgYml0c2V0X2NvcHkgKGRlc3RzX2NoW25kZXN0c10sIGFjY2VwdHMpOworCSAgZXJyID0gcmVfbm9kZV9zZXRfaW5pdF8xIChkZXN0c19ub2RlICsgbmRlc3RzLCBjdXJfbm9kZXMtPmVsZW1zW2ldKTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgZ290byBlcnJvcl9yZXR1cm47CisJICArK25kZXN0czsKKwkgIGJpdHNldF9lbXB0eSAoYWNjZXB0cyk7CisJfQorICAgIH0KKyAgcmV0dXJuIG5kZXN0czsKKyBlcnJvcl9yZXR1cm46CisgIGZvciAoaiA9IDA7IGogPCBuZGVzdHM7ICsraikKKyAgICByZV9ub2RlX3NldF9mcmVlIChkZXN0c19ub2RlICsgaik7CisgIHJldHVybiBSRUdfTUlTU0lORzsKK30KKworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisvKiBDaGVjayBob3cgbWFueSBieXRlcyB0aGUgbm9kZSBgZGZhLT5ub2Rlc1tub2RlX2lkeF0nIGFjY2VwdHMuCisgICBSZXR1cm4gdGhlIG51bWJlciBvZiB0aGUgYnl0ZXMgdGhlIG5vZGUgYWNjZXB0cy4KKyAgIFNUUl9JRFggaXMgdGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIGlucHV0IHN0cmluZy4KKworICAgVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBub2RlcyB3aGljaCBjYW4gYWNjZXB0IG9uZSBjaGFyYWN0ZXIsIG9yCisgICBvbmUgY29sbGF0aW5nIGVsZW1lbnQgbGlrZSAnLicsICdbYS16XScsIG9wcG9zaXRlIHRvIHRoZSBvdGhlciBub2RlcworICAgY2FuIG9ubHkgYWNjZXB0IG9uZSBieXRlLiAgKi8KKworc3RhdGljIGludAoraW50ZXJuYWxfZnVuY3Rpb24KK2NoZWNrX25vZGVfYWNjZXB0X2J5dGVzIChjb25zdCByZV9kZmFfdCAqZGZhLCBJZHggbm9kZV9pZHgsCisJCQkgY29uc3QgcmVfc3RyaW5nX3QgKmlucHV0LCBJZHggc3RyX2lkeCkKK3sKKyAgY29uc3QgcmVfdG9rZW5fdCAqbm9kZSA9IGRmYS0+bm9kZXMgKyBub2RlX2lkeDsKKyAgaW50IGNoYXJfbGVuLCBlbGVtX2xlbjsKKyAgSWR4IGk7CisKKyAgaWYgKEJFIChub2RlLT50eXBlID09IE9QX1VURjhfUEVSSU9ELCAwKSkKKyAgICB7CisgICAgICB1bnNpZ25lZCBjaGFyIGMgPSByZV9zdHJpbmdfYnl0ZV9hdCAoaW5wdXQsIHN0cl9pZHgpLCBkOworICAgICAgaWYgKEJFIChjIDwgMHhjMiwgMSkpCisJcmV0dXJuIDA7CisKKyAgICAgIGlmIChzdHJfaWR4ICsgMiA+IGlucHV0LT5sZW4pCisJcmV0dXJuIDA7CisKKyAgICAgIGQgPSByZV9zdHJpbmdfYnl0ZV9hdCAoaW5wdXQsIHN0cl9pZHggKyAxKTsKKyAgICAgIGlmIChjIDwgMHhlMCkKKwlyZXR1cm4gKGQgPCAweDgwIHx8IGQgPiAweGJmKSA/IDAgOiAyOworICAgICAgZWxzZSBpZiAoYyA8IDB4ZjApCisJeworCSAgY2hhcl9sZW4gPSAzOworCSAgaWYgKGMgPT0gMHhlMCAmJiBkIDwgMHhhMCkKKwkgICAgcmV0dXJuIDA7CisJfQorICAgICAgZWxzZSBpZiAoYyA8IDB4ZjgpCisJeworCSAgY2hhcl9sZW4gPSA0OworCSAgaWYgKGMgPT0gMHhmMCAmJiBkIDwgMHg5MCkKKwkgICAgcmV0dXJuIDA7CisJfQorICAgICAgZWxzZSBpZiAoYyA8IDB4ZmMpCisJeworCSAgY2hhcl9sZW4gPSA1OworCSAgaWYgKGMgPT0gMHhmOCAmJiBkIDwgMHg4OCkKKwkgICAgcmV0dXJuIDA7CisJfQorICAgICAgZWxzZSBpZiAoYyA8IDB4ZmUpCisJeworCSAgY2hhcl9sZW4gPSA2OworCSAgaWYgKGMgPT0gMHhmYyAmJiBkIDwgMHg4NCkKKwkgICAgcmV0dXJuIDA7CisJfQorICAgICAgZWxzZQorCXJldHVybiAwOworCisgICAgICBpZiAoc3RyX2lkeCArIGNoYXJfbGVuID4gaW5wdXQtPmxlbikKKwlyZXR1cm4gMDsKKworICAgICAgZm9yIChpID0gMTsgaSA8IGNoYXJfbGVuOyArK2kpCisJeworCSAgZCA9IHJlX3N0cmluZ19ieXRlX2F0IChpbnB1dCwgc3RyX2lkeCArIGkpOworCSAgaWYgKGQgPCAweDgwIHx8IGQgPiAweGJmKQorCSAgICByZXR1cm4gMDsKKwl9CisgICAgICByZXR1cm4gY2hhcl9sZW47CisgICAgfQorCisgIGNoYXJfbGVuID0gcmVfc3RyaW5nX2NoYXJfc2l6ZV9hdCAoaW5wdXQsIHN0cl9pZHgpOworICBpZiAobm9kZS0+dHlwZSA9PSBPUF9QRVJJT0QpCisgICAgeworICAgICAgaWYgKGNoYXJfbGVuIDw9IDEpCisgICAgICAgIHJldHVybiAwOworICAgICAgLyogRklYTUU6IEkgZG9uJ3QgdGhpbmsgdGhpcyBpZiBpcyBuZWVkZWQsIGFzIGJvdGggJ1xuJworCSBhbmQgJ1wwJyBhcmUgY2hhcl9sZW4gPT0gMS4gICovCisgICAgICAvKiAnLicgYWNjZXB0cyBhbnkgb25lIGNoYXJhY3RlciBleGNlcHQgdGhlIGZvbGxvd2luZyB0d28gY2FzZXMuICAqLworICAgICAgaWYgKCghKGRmYS0+c3ludGF4ICYgUkVfRE9UX05FV0xJTkUpICYmCisJICAgcmVfc3RyaW5nX2J5dGVfYXQgKGlucHV0LCBzdHJfaWR4KSA9PSAnXG4nKSB8fAorCSAgKChkZmEtPnN5bnRheCAmIFJFX0RPVF9OT1RfTlVMTCkgJiYKKwkgICByZV9zdHJpbmdfYnl0ZV9hdCAoaW5wdXQsIHN0cl9pZHgpID09ICdcMCcpKQorCXJldHVybiAwOworICAgICAgcmV0dXJuIGNoYXJfbGVuOworICAgIH0KKworICBlbGVtX2xlbiA9IHJlX3N0cmluZ19lbGVtX3NpemVfYXQgKGlucHV0LCBzdHJfaWR4KTsKKyAgaWYgKChlbGVtX2xlbiA8PSAxICYmIGNoYXJfbGVuIDw9IDEpIHx8IGNoYXJfbGVuID09IDApCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKG5vZGUtPnR5cGUgPT0gQ09NUExFWF9CUkFDS0VUKQorICAgIHsKKyAgICAgIGNvbnN0IHJlX2NoYXJzZXRfdCAqY3NldCA9IG5vZGUtPm9wci5tYmNzZXQ7CisjIGlmZGVmIF9MSUJDCisgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwaW4KKwk9ICgoY29uc3QgdW5zaWduZWQgY2hhciAqKSByZV9zdHJpbmdfZ2V0X2J1ZmZlciAoaW5wdXQpICsgc3RyX2lkeCk7CisgICAgICBJZHggajsKKyAgICAgIHVpbnQzMl90IG5ydWxlczsKKyMgZW5kaWYgLyogX0xJQkMgKi8KKyAgICAgIGludCBtYXRjaF9sZW4gPSAwOworICAgICAgd2NoYXJfdCB3YyA9ICgoY3NldC0+bnJhbmdlcyB8fCBjc2V0LT5uY2hhcl9jbGFzc2VzIHx8IGNzZXQtPm5tYmNoYXJzKQorCQkgICAgPyByZV9zdHJpbmdfd2NoYXJfYXQgKGlucHV0LCBzdHJfaWR4KSA6IDApOworCisgICAgICAvKiBtYXRjaCB3aXRoIG11bHRpYnl0ZSBjaGFyYWN0ZXI/ICAqLworICAgICAgZm9yIChpID0gMDsgaSA8IGNzZXQtPm5tYmNoYXJzOyArK2kpCisJaWYgKHdjID09IGNzZXQtPm1iY2hhcnNbaV0pCisJICB7CisJICAgIG1hdGNoX2xlbiA9IGNoYXJfbGVuOworCSAgICBnb3RvIGNoZWNrX25vZGVfYWNjZXB0X2J5dGVzX21hdGNoOworCSAgfQorICAgICAgLyogbWF0Y2ggd2l0aCBjaGFyYWN0ZXJfY2xhc3M/ICAqLworICAgICAgZm9yIChpID0gMDsgaSA8IGNzZXQtPm5jaGFyX2NsYXNzZXM7ICsraSkKKwl7CisJICB3Y3R5cGVfdCB3dCA9IGNzZXQtPmNoYXJfY2xhc3Nlc1tpXTsKKwkgIGlmIChfX2lzd2N0eXBlICh3Yywgd3QpKQorCSAgICB7CisJICAgICAgbWF0Y2hfbGVuID0gY2hhcl9sZW47CisJICAgICAgZ290byBjaGVja19ub2RlX2FjY2VwdF9ieXRlc19tYXRjaDsKKwkgICAgfQorCX0KKworIyBpZmRlZiBfTElCQworICAgICAgbnJ1bGVzID0gX05MX0NVUlJFTlRfV09SRCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfTlJVTEVTKTsKKyAgICAgIGlmIChucnVsZXMgIT0gMCkKKwl7CisJICB1bnNpZ25lZCBpbnQgaW5fY29sbHNlcSA9IDA7CisJICBjb25zdCBpbnQzMl90ICp0YWJsZSwgKmluZGlyZWN0OworCSAgY29uc3QgdW5zaWduZWQgY2hhciAqd2VpZ2h0cywgKmV4dHJhOworCSAgY29uc3QgY2hhciAqY29sbHNlcXdjOworCSAgaW50MzJfdCBpZHg7CisJICAvKiBUaGlzICNpbmNsdWRlIGRlZmluZXMgYSBsb2NhbCBmdW5jdGlvbiEgICovCisjICBpbmNsdWRlIDxsb2NhbGUvd2VpZ2h0Lmg+CisKKwkgIC8qIG1hdGNoIHdpdGggY29sbGF0aW5nX3N5bWJvbD8gICovCisJICBpZiAoY3NldC0+bmNvbGxfc3ltcykKKwkgICAgZXh0cmEgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKQorCSAgICAgIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9TWU1CX0VYVFJBTUIpOworCSAgZm9yIChpID0gMDsgaSA8IGNzZXQtPm5jb2xsX3N5bXM7ICsraSkKKwkgICAgeworCSAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvbGxfc3ltID0gZXh0cmEgKyBjc2V0LT5jb2xsX3N5bXNbaV07CisJICAgICAgLyogQ29tcGFyZSB0aGUgbGVuZ3RoIG9mIGlucHV0IGNvbGxhdGluZyBlbGVtZW50IGFuZAorCQkgdGhlIGxlbmd0aCBvZiBjdXJyZW50IGNvbGxhdGluZyBlbGVtZW50LiAgKi8KKwkgICAgICBpZiAoKmNvbGxfc3ltICE9IGVsZW1fbGVuKQorCQljb250aW51ZTsKKwkgICAgICAvKiBDb21wYXJlIGVhY2ggYnl0ZXMuICAqLworCSAgICAgIGZvciAoaiA9IDA7IGogPCAqY29sbF9zeW07IGorKykKKwkJaWYgKHBpbltqXSAhPSBjb2xsX3N5bVsxICsgal0pCisJCSAgYnJlYWs7CisJICAgICAgaWYgKGogPT0gKmNvbGxfc3ltKQorCQl7CisJCSAgLyogTWF0Y2ggaWYgZXZlcnkgYnl0ZXMgaXMgZXF1YWwuICAqLworCQkgIG1hdGNoX2xlbiA9IGo7CisJCSAgZ290byBjaGVja19ub2RlX2FjY2VwdF9ieXRlc19tYXRjaDsKKwkJfQorCSAgICB9CisKKwkgIGlmIChjc2V0LT5ucmFuZ2VzKQorCSAgICB7CisJICAgICAgaWYgKGVsZW1fbGVuIDw9IGNoYXJfbGVuKQorCQl7CisJCSAgY29sbHNlcXdjID0gX05MX0NVUlJFTlQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX0NPTExTRVFXQyk7CisJCSAgaW5fY29sbHNlcSA9IF9fY29sbHNlcV90YWJsZV9sb29rdXAgKGNvbGxzZXF3Yywgd2MpOworCQl9CisJICAgICAgZWxzZQorCQlpbl9jb2xsc2VxID0gZmluZF9jb2xsYXRpb25fc2VxdWVuY2VfdmFsdWUgKHBpbiwgZWxlbV9sZW4pOworCSAgICB9CisJICAvKiBtYXRjaCB3aXRoIHJhbmdlIGV4cHJlc3Npb24/ICAqLworCSAgZm9yIChpID0gMDsgaSA8IGNzZXQtPm5yYW5nZXM7ICsraSkKKwkgICAgaWYgKGNzZXQtPnJhbmdlX3N0YXJ0c1tpXSA8PSBpbl9jb2xsc2VxCisJCSYmIGluX2NvbGxzZXEgPD0gY3NldC0+cmFuZ2VfZW5kc1tpXSkKKwkgICAgICB7CisJCW1hdGNoX2xlbiA9IGVsZW1fbGVuOworCQlnb3RvIGNoZWNrX25vZGVfYWNjZXB0X2J5dGVzX21hdGNoOworCSAgICAgIH0KKworCSAgLyogbWF0Y2ggd2l0aCBlcXVpdmFsZW5jZV9jbGFzcz8gICovCisJICBpZiAoY3NldC0+bmVxdWl2X2NsYXNzZXMpCisJICAgIHsKKwkgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpjcCA9IHBpbjsKKwkgICAgICB0YWJsZSA9IChjb25zdCBpbnQzMl90ICopCisJCV9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9UQUJMRU1CKTsKKwkgICAgICB3ZWlnaHRzID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikKKwkJX05MX0NVUlJFTlQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX1dFSUdIVE1CKTsKKwkgICAgICBleHRyYSA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopCisJCV9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9FWFRSQU1CKTsKKwkgICAgICBpbmRpcmVjdCA9IChjb25zdCBpbnQzMl90ICopCisJCV9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9JTkRJUkVDVE1CKTsKKwkgICAgICBpZHggPSBmaW5kaWR4ICgmY3ApOworCSAgICAgIGlmIChpZHggPiAwKQorCQlmb3IgKGkgPSAwOyBpIDwgY3NldC0+bmVxdWl2X2NsYXNzZXM7ICsraSkKKwkJICB7CisJCSAgICBpbnQzMl90IGVxdWl2X2NsYXNzX2lkeCA9IGNzZXQtPmVxdWl2X2NsYXNzZXNbaV07CisJCSAgICBzaXplX3Qgd2VpZ2h0X2xlbiA9IHdlaWdodHNbaWR4XTsKKwkJICAgIGlmICh3ZWlnaHRfbGVuID09IHdlaWdodHNbZXF1aXZfY2xhc3NfaWR4XSkKKwkJICAgICAgeworCQkJSWR4IGNudCA9IDA7CisJCQl3aGlsZSAoY250IDw9IHdlaWdodF9sZW4KKwkJCSAgICAgICAmJiAod2VpZ2h0c1tlcXVpdl9jbGFzc19pZHggKyAxICsgY250XQorCQkJCSAgID09IHdlaWdodHNbaWR4ICsgMSArIGNudF0pKQorCQkJICArK2NudDsKKwkJCWlmIChjbnQgPiB3ZWlnaHRfbGVuKQorCQkJICB7CisJCQkgICAgbWF0Y2hfbGVuID0gZWxlbV9sZW47CisJCQkgICAgZ290byBjaGVja19ub2RlX2FjY2VwdF9ieXRlc19tYXRjaDsKKwkJCSAgfQorCQkgICAgICB9CisJCSAgfQorCSAgICB9CisJfQorICAgICAgZWxzZQorIyBlbmRpZiAvKiBfTElCQyAqLworCXsKKwkgIC8qIG1hdGNoIHdpdGggcmFuZ2UgZXhwcmVzc2lvbj8gICovCisjaWYgX19HTlVDX18gPj0gMiAmJiAhIChfX1NURENfVkVSU0lPTl9fIDwgMTk5OTAxTCAmJiBfX1NUUklDVF9BTlNJX18pCisJICB3Y2hhcl90IGNtcF9idWZbXSA9IHtMJ1wwJywgTCdcMCcsIHdjLCBMJ1wwJywgTCdcMCcsIEwnXDAnfTsKKyNlbHNlCisJICB3Y2hhcl90IGNtcF9idWZbXSA9IHtMJ1wwJywgTCdcMCcsIEwnXDAnLCBMJ1wwJywgTCdcMCcsIEwnXDAnfTsKKwkgIGNtcF9idWZbMl0gPSB3YzsKKyNlbmRpZgorCSAgZm9yIChpID0gMDsgaSA8IGNzZXQtPm5yYW5nZXM7ICsraSkKKwkgICAgeworCSAgICAgIGNtcF9idWZbMF0gPSBjc2V0LT5yYW5nZV9zdGFydHNbaV07CisJICAgICAgY21wX2J1Zls0XSA9IGNzZXQtPnJhbmdlX2VuZHNbaV07CisJICAgICAgaWYgKHdjc2NvbGwgKGNtcF9idWYsIGNtcF9idWYgKyAyKSA8PSAwCisJCSAgJiYgd2NzY29sbCAoY21wX2J1ZiArIDIsIGNtcF9idWYgKyA0KSA8PSAwKQorCQl7CisJCSAgbWF0Y2hfbGVuID0gY2hhcl9sZW47CisJCSAgZ290byBjaGVja19ub2RlX2FjY2VwdF9ieXRlc19tYXRjaDsKKwkJfQorCSAgICB9CisJfQorICAgIGNoZWNrX25vZGVfYWNjZXB0X2J5dGVzX21hdGNoOgorICAgICAgaWYgKCFjc2V0LT5ub25fbWF0Y2gpCisJcmV0dXJuIG1hdGNoX2xlbjsKKyAgICAgIGVsc2UKKwl7CisJICBpZiAobWF0Y2hfbGVuID4gMCkKKwkgICAgcmV0dXJuIDA7CisJICBlbHNlCisJICAgIHJldHVybiAoZWxlbV9sZW4gPiBjaGFyX2xlbikgPyBlbGVtX2xlbiA6IGNoYXJfbGVuOworCX0KKyAgICB9CisgIHJldHVybiAwOworfQorCisjIGlmZGVmIF9MSUJDCitzdGF0aWMgdW5zaWduZWQgaW50CitpbnRlcm5hbF9mdW5jdGlvbgorZmluZF9jb2xsYXRpb25fc2VxdWVuY2VfdmFsdWUgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1icywgc2l6ZV90IG1ic19sZW4pCit7CisgIHVpbnQzMl90IG5ydWxlcyA9IF9OTF9DVVJSRU5UX1dPUkQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX05SVUxFUyk7CisgIGlmIChucnVsZXMgPT0gMCkKKyAgICB7CisgICAgICBpZiAobWJzX2xlbiA9PSAxKQorCXsKKwkgIC8qIE5vIHZhbGlkIGNoYXJhY3Rlci4gIE1hdGNoIGl0IGFzIGEgc2luZ2xlIGJ5dGUgY2hhcmFjdGVyLiAgKi8KKwkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvbGxzZXEgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKQorCSAgICBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfQ09MTFNFUU1CKTsKKwkgIHJldHVybiBjb2xsc2VxW21ic1swXV07CisJfQorICAgICAgcmV0dXJuIFVJTlRfTUFYOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGludDMyX3QgaWR4OworICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZXh0cmEgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKQorCV9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9TWU1CX0VYVFJBTUIpOworICAgICAgaW50MzJfdCBleHRyYXNpemUgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKQorCV9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9TWU1CX0VYVFJBTUIgKyAxKSAtIGV4dHJhOworCisgICAgICBmb3IgKGlkeCA9IDA7IGlkeCA8IGV4dHJhc2l6ZTspCisJeworCSAgaW50IG1ic19jbnQ7CisJICBib29sIGZvdW5kID0gZmFsc2U7CisJICBpbnQzMl90IGVsZW1fbWJzX2xlbjsKKwkgIC8qIFNraXAgdGhlIG5hbWUgb2YgY29sbGF0aW5nIGVsZW1lbnQgbmFtZS4gICovCisJICBpZHggPSBpZHggKyBleHRyYVtpZHhdICsgMTsKKwkgIGVsZW1fbWJzX2xlbiA9IGV4dHJhW2lkeCsrXTsKKwkgIGlmIChtYnNfbGVuID09IGVsZW1fbWJzX2xlbikKKwkgICAgeworCSAgICAgIGZvciAobWJzX2NudCA9IDA7IG1ic19jbnQgPCBlbGVtX21ic19sZW47ICsrbWJzX2NudCkKKwkJaWYgKGV4dHJhW2lkeCArIG1ic19jbnRdICE9IG1ic1ttYnNfY250XSkKKwkJICBicmVhazsKKwkgICAgICBpZiAobWJzX2NudCA9PSBlbGVtX21ic19sZW4pCisJCS8qIEZvdW5kIHRoZSBlbnRyeS4gICovCisJCWZvdW5kID0gdHJ1ZTsKKwkgICAgfQorCSAgLyogU2tpcCB0aGUgYnl0ZSBzZXF1ZW5jZSBvZiB0aGUgY29sbGF0aW5nIGVsZW1lbnQuICAqLworCSAgaWR4ICs9IGVsZW1fbWJzX2xlbjsKKwkgIC8qIEFkanVzdCBmb3IgdGhlIGFsaWdubWVudC4gICovCisJICBpZHggPSAoaWR4ICsgMykgJiB+MzsKKwkgIC8qIFNraXAgdGhlIGNvbGxhdGlvbiBzZXF1ZW5jZSB2YWx1ZS4gICovCisJICBpZHggKz0gc2l6ZW9mICh1aW50MzJfdCk7CisJICAvKiBTa2lwIHRoZSB3aWRlIGNoYXIgc2VxdWVuY2Ugb2YgdGhlIGNvbGxhdGluZyBlbGVtZW50LiAgKi8KKwkgIGlkeCA9IGlkeCArIHNpemVvZiAodWludDMyX3QpICogKGV4dHJhW2lkeF0gKyAxKTsKKwkgIC8qIElmIHdlIGZvdW5kIHRoZSBlbnRyeSwgcmV0dXJuIHRoZSBzZXF1ZW5jZSB2YWx1ZS4gICovCisJICBpZiAoZm91bmQpCisJICAgIHJldHVybiAqKHVpbnQzMl90ICopIChleHRyYSArIGlkeCk7CisJICAvKiBTa2lwIHRoZSBjb2xsYXRpb24gc2VxdWVuY2UgdmFsdWUuICAqLworCSAgaWR4ICs9IHNpemVvZiAodWludDMyX3QpOworCX0KKyAgICAgIHJldHVybiBVSU5UX01BWDsKKyAgICB9Cit9CisjIGVuZGlmIC8qIF9MSUJDICovCisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKworLyogQ2hlY2sgd2hldGhlciB0aGUgbm9kZSBhY2NlcHRzIHRoZSBieXRlIHdoaWNoIGlzIElEWC10aAorICAgYnl0ZSBvZiB0aGUgSU5QVVQuICAqLworCitzdGF0aWMgYm9vbAoraW50ZXJuYWxfZnVuY3Rpb24KK2NoZWNrX25vZGVfYWNjZXB0IChjb25zdCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIGNvbnN0IHJlX3Rva2VuX3QgKm5vZGUsCisJCSAgIElkeCBpZHgpCit7CisgIHVuc2lnbmVkIGNoYXIgY2g7CisgIGNoID0gcmVfc3RyaW5nX2J5dGVfYXQgKCZtY3R4LT5pbnB1dCwgaWR4KTsKKyAgc3dpdGNoIChub2RlLT50eXBlKQorICAgIHsKKyAgICBjYXNlIENIQVJBQ1RFUjoKKyAgICAgIGlmIChub2RlLT5vcHIuYyAhPSBjaCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNJTVBMRV9CUkFDS0VUOgorICAgICAgaWYgKCFiaXRzZXRfY29udGFpbiAobm9kZS0+b3ByLnNiY3NldCwgY2gpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICBicmVhazsKKworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgICAgY2FzZSBPUF9VVEY4X1BFUklPRDoKKyAgICAgIGlmIChjaCA+PSBBU0NJSV9DSEFSUykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKyNlbmRpZgorICAgIGNhc2UgT1BfUEVSSU9EOgorICAgICAgaWYgKChjaCA9PSAnXG4nICYmICEobWN0eC0+ZGZhLT5zeW50YXggJiBSRV9ET1RfTkVXTElORSkpCisJICB8fCAoY2ggPT0gJ1wwJyAmJiAobWN0eC0+ZGZhLT5zeW50YXggJiBSRV9ET1RfTk9UX05VTEwpKSkKKwlyZXR1cm4gZmFsc2U7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgIGlmIChub2RlLT5jb25zdHJhaW50KQorICAgIHsKKyAgICAgIC8qIFRoZSBub2RlIGhhcyBjb25zdHJhaW50cy4gIENoZWNrIHdoZXRoZXIgdGhlIGN1cnJlbnQgY29udGV4dAorCSBzYXRpc2ZpZXMgdGhlIGNvbnN0cmFpbnRzLiAgKi8KKyAgICAgIHVuc2lnbmVkIGludCBjb250ZXh0ID0gcmVfc3RyaW5nX2NvbnRleHRfYXQgKCZtY3R4LT5pbnB1dCwgaWR4LAorCQkJCQkJICAgbWN0eC0+ZWZsYWdzKTsKKyAgICAgIGlmIChOT1RfU0FUSVNGWV9ORVhUX0NPTlNUUkFJTlQgKG5vZGUtPmNvbnN0cmFpbnQsIGNvbnRleHQpKQorCXJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgcmV0dXJuIHRydWU7Cit9CisKKy8qIEV4dGVuZCB0aGUgYnVmZmVycywgaWYgdGhlIGJ1ZmZlcnMgaGF2ZSBydW4gb3V0LiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCitleHRlbmRfYnVmZmVycyAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4KQoreworICByZWdfZXJyY29kZV90IHJldDsKKyAgcmVfc3RyaW5nX3QgKnBzdHIgPSAmbWN0eC0+aW5wdXQ7CisKKyAgLyogQXZvaWQgb3ZlcmZsb3cuICAqLworICBpZiAoQkUgKFNJWkVfTUFYIC8gMiAvIHNpemVvZiAocmVfZGZhc3RhdGVfdCAqKSA8PSBwc3RyLT5idWZzX2xlbiwgMCkpCisgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisKKyAgLyogRG91YmxlIHRoZSBsZW5ndGhlcyBvZiB0aGUgYnVmZmVycy4gICovCisgIHJldCA9IHJlX3N0cmluZ19yZWFsbG9jX2J1ZmZlcnMgKHBzdHIsIHBzdHItPmJ1ZnNfbGVuICogMik7CisgIGlmIChCRSAocmV0ICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICByZXR1cm4gcmV0OworCisgIGlmIChtY3R4LT5zdGF0ZV9sb2cgIT0gTlVMTCkKKyAgICB7CisgICAgICAvKiBBbmQgZG91YmxlIHRoZSBsZW5ndGggb2Ygc3RhdGVfbG9nLiAgKi8KKyAgICAgIC8qIFhYWCBXZSBoYXZlIG5vIGluZGljYXRpb24gb2YgdGhlIHNpemUgb2YgdGhpcyBidWZmZXIuICBJZiB0aGlzCisJIGFsbG9jYXRpb24gZmFpbCB3ZSBoYXZlIG5vIGluZGljYXRpb24gdGhhdCB0aGUgc3RhdGVfbG9nIGFycmF5CisJIGRvZXMgbm90IGhhdmUgdGhlIHJpZ2h0IHNpemUuICAqLworICAgICAgcmVfZGZhc3RhdGVfdCAqKm5ld19hcnJheSA9IHJlX3JlYWxsb2MgKG1jdHgtPnN0YXRlX2xvZywgcmVfZGZhc3RhdGVfdCAqLAorCQkJCQkgICAgICBwc3RyLT5idWZzX2xlbiArIDEpOworICAgICAgaWYgKEJFIChuZXdfYXJyYXkgPT0gTlVMTCwgMCkpCisJcmV0dXJuIFJFR19FU1BBQ0U7CisgICAgICBtY3R4LT5zdGF0ZV9sb2cgPSBuZXdfYXJyYXk7CisgICAgfQorCisgIC8qIFRoZW4gcmVjb25zdHJ1Y3QgdGhlIGJ1ZmZlcnMuICAqLworICBpZiAocHN0ci0+aWNhc2UpCisgICAgeworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgICAgICBpZiAocHN0ci0+bWJfY3VyX21heCA+IDEpCisJeworCSAgcmV0ID0gYnVpbGRfd2NzX3VwcGVyX2J1ZmZlciAocHN0cik7CisJICBpZiAoQkUgKHJldCAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHJldHVybiByZXQ7CisJfQorICAgICAgZWxzZQorI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICAqLworCWJ1aWxkX3VwcGVyX2J1ZmZlciAocHN0cik7CisgICAgfQorICBlbHNlCisgICAgeworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgICAgICBpZiAocHN0ci0+bWJfY3VyX21heCA+IDEpCisJYnVpbGRfd2NzX2J1ZmZlciAocHN0cik7CisgICAgICBlbHNlCisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gICovCisJeworCSAgaWYgKHBzdHItPnRyYW5zICE9IE5VTEwpCisJICAgIHJlX3N0cmluZ190cmFuc2xhdGVfYnVmZmVyIChwc3RyKTsKKwl9CisgICAgfQorICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKwwKKy8qIEZ1bmN0aW9ucyBmb3IgbWF0Y2hpbmcgY29udGV4dC4gICovCisKKy8qIEluaXRpYWxpemUgTUNUWC4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorbWF0Y2hfY3R4X2luaXQgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwgaW50IGVmbGFncywgSWR4IG4pCit7CisgIG1jdHgtPmVmbGFncyA9IGVmbGFnczsKKyAgbWN0eC0+bWF0Y2hfbGFzdCA9IFJFR19NSVNTSU5HOworICBpZiAobiA+IDApCisgICAgeworICAgICAgLyogQXZvaWQgb3ZlcmZsb3cuICAqLworICAgICAgc2l6ZV90IG1heF9vYmplY3Rfc2l6ZSA9CisJTUFYIChzaXplb2YgKHN0cnVjdCByZV9iYWNrcmVmX2NhY2hlX2VudHJ5KSwKKwkgICAgIHNpemVvZiAocmVfc3ViX21hdGNoX3RvcF90ICopKTsKKyAgICAgIGlmIChCRSAoU0laRV9NQVggLyBtYXhfb2JqZWN0X3NpemUgPCBuLCAwKSkKKwlyZXR1cm4gUkVHX0VTUEFDRTsKKworICAgICAgbWN0eC0+YmtyZWZfZW50cyA9IHJlX21hbGxvYyAoc3RydWN0IHJlX2JhY2tyZWZfY2FjaGVfZW50cnksIG4pOworICAgICAgbWN0eC0+c3ViX3RvcHMgPSByZV9tYWxsb2MgKHJlX3N1Yl9tYXRjaF90b3BfdCAqLCBuKTsKKyAgICAgIGlmIChCRSAobWN0eC0+YmtyZWZfZW50cyA9PSBOVUxMIHx8IG1jdHgtPnN1Yl90b3BzID09IE5VTEwsIDApKQorCXJldHVybiBSRUdfRVNQQUNFOworICAgIH0KKyAgLyogQWxyZWFkeSB6ZXJvLWVkIGJ5IHRoZSBjYWxsZXIuCisgICAgIGVsc2UKKyAgICAgICBtY3R4LT5ia3JlZl9lbnRzID0gTlVMTDsKKyAgICAgbWN0eC0+bmJrcmVmX2VudHMgPSAwOworICAgICBtY3R4LT5uc3ViX3RvcHMgPSAwOyAgKi8KKyAgbWN0eC0+YWJrcmVmX2VudHMgPSBuOworICBtY3R4LT5tYXhfbWJfZWxlbV9sZW4gPSAxOworICBtY3R4LT5hc3ViX3RvcHMgPSBuOworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKy8qIENsZWFuIHRoZSBlbnRyaWVzIHdoaWNoIGRlcGVuZCBvbiB0aGUgY3VycmVudCBpbnB1dCBpbiBNQ1RYLgorICAgVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGludm9rZWQgd2hlbiB0aGUgbWF0Y2hlciBjaGFuZ2VzIHRoZSBzdGFydCBpbmRleAorICAgb2YgdGhlIGlucHV0LCBvciBjaGFuZ2VzIHRoZSBpbnB1dCBzdHJpbmcuICAqLworCitzdGF0aWMgdm9pZAoraW50ZXJuYWxfZnVuY3Rpb24KK21hdGNoX2N0eF9jbGVhbiAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4KQoreworICBJZHggc3RfaWR4OworICBmb3IgKHN0X2lkeCA9IDA7IHN0X2lkeCA8IG1jdHgtPm5zdWJfdG9wczsgKytzdF9pZHgpCisgICAgeworICAgICAgSWR4IHNsX2lkeDsKKyAgICAgIHJlX3N1Yl9tYXRjaF90b3BfdCAqdG9wID0gbWN0eC0+c3ViX3RvcHNbc3RfaWR4XTsKKyAgICAgIGZvciAoc2xfaWR4ID0gMDsgc2xfaWR4IDwgdG9wLT5ubGFzdHM7ICsrc2xfaWR4KQorCXsKKwkgIHJlX3N1Yl9tYXRjaF9sYXN0X3QgKmxhc3QgPSB0b3AtPmxhc3RzW3NsX2lkeF07CisJICByZV9mcmVlIChsYXN0LT5wYXRoLmFycmF5KTsKKwkgIHJlX2ZyZWUgKGxhc3QpOworCX0KKyAgICAgIHJlX2ZyZWUgKHRvcC0+bGFzdHMpOworICAgICAgaWYgKHRvcC0+cGF0aCkKKwl7CisJICByZV9mcmVlICh0b3AtPnBhdGgtPmFycmF5KTsKKwkgIHJlX2ZyZWUgKHRvcC0+cGF0aCk7CisJfQorICAgICAgZnJlZSAodG9wKTsKKyAgICB9CisKKyAgbWN0eC0+bnN1Yl90b3BzID0gMDsKKyAgbWN0eC0+bmJrcmVmX2VudHMgPSAwOworfQorCisvKiBGcmVlIGFsbCB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCBNQ1RYLiAgKi8KKworc3RhdGljIHZvaWQKK2ludGVybmFsX2Z1bmN0aW9uCittYXRjaF9jdHhfZnJlZSAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4KQoreworICAvKiBGaXJzdCwgZnJlZSBhbGwgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggTUNUWC0+U1VCX1RPUFMuICAqLworICBtYXRjaF9jdHhfY2xlYW4gKG1jdHgpOworICByZV9mcmVlIChtY3R4LT5zdWJfdG9wcyk7CisgIHJlX2ZyZWUgKG1jdHgtPmJrcmVmX2VudHMpOworfQorCisvKiBBZGQgYSBuZXcgYmFja3JlZmVyZW5jZSBlbnRyeSB0byBNQ1RYLgorICAgTm90ZSB0aGF0IHdlIGFzc3VtZSB0aGF0IGNhbGxlciBuZXZlciBjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aCBkdXBsaWNhdGUKKyAgIGVudHJ5LCBhbmQgY2FsbCB3aXRoIFNUUl9JRFggd2hpY2ggaXNuJ3Qgc21hbGxlciB0aGFuIGFueSBleGlzdGluZyBlbnRyeS4KKyovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorbWF0Y2hfY3R4X2FkZF9lbnRyeSAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4LCBJZHggbm9kZSwgSWR4IHN0cl9pZHgsIElkeCBmcm9tLAorCQkgICAgIElkeCB0bykKK3sKKyAgaWYgKG1jdHgtPm5ia3JlZl9lbnRzID49IG1jdHgtPmFia3JlZl9lbnRzKQorICAgIHsKKyAgICAgIHN0cnVjdCByZV9iYWNrcmVmX2NhY2hlX2VudHJ5KiBuZXdfZW50cnk7CisgICAgICBuZXdfZW50cnkgPSByZV9yZWFsbG9jIChtY3R4LT5ia3JlZl9lbnRzLCBzdHJ1Y3QgcmVfYmFja3JlZl9jYWNoZV9lbnRyeSwKKwkJCSAgICAgIG1jdHgtPmFia3JlZl9lbnRzICogMik7CisgICAgICBpZiAoQkUgKG5ld19lbnRyeSA9PSBOVUxMLCAwKSkKKwl7CisJICByZV9mcmVlIChtY3R4LT5ia3JlZl9lbnRzKTsKKwkgIHJldHVybiBSRUdfRVNQQUNFOworCX0KKyAgICAgIG1jdHgtPmJrcmVmX2VudHMgPSBuZXdfZW50cnk7CisgICAgICBtZW1zZXQgKG1jdHgtPmJrcmVmX2VudHMgKyBtY3R4LT5uYmtyZWZfZW50cywgJ1wwJywKKwkgICAgICBzaXplb2YgKHN0cnVjdCByZV9iYWNrcmVmX2NhY2hlX2VudHJ5KSAqIG1jdHgtPmFia3JlZl9lbnRzKTsKKyAgICAgIG1jdHgtPmFia3JlZl9lbnRzICo9IDI7CisgICAgfQorICBpZiAobWN0eC0+bmJrcmVmX2VudHMgPiAwCisgICAgICAmJiBtY3R4LT5ia3JlZl9lbnRzW21jdHgtPm5ia3JlZl9lbnRzIC0gMV0uc3RyX2lkeCA9PSBzdHJfaWR4KQorICAgIG1jdHgtPmJrcmVmX2VudHNbbWN0eC0+bmJrcmVmX2VudHMgLSAxXS5tb3JlID0gMTsKKworICBtY3R4LT5ia3JlZl9lbnRzW21jdHgtPm5ia3JlZl9lbnRzXS5ub2RlID0gbm9kZTsKKyAgbWN0eC0+YmtyZWZfZW50c1ttY3R4LT5uYmtyZWZfZW50c10uc3RyX2lkeCA9IHN0cl9pZHg7CisgIG1jdHgtPmJrcmVmX2VudHNbbWN0eC0+bmJrcmVmX2VudHNdLnN1YmV4cF9mcm9tID0gZnJvbTsKKyAgbWN0eC0+YmtyZWZfZW50c1ttY3R4LT5uYmtyZWZfZW50c10uc3ViZXhwX3RvID0gdG87CisKKyAgLyogVGhpcyBpcyBhIGNhY2hlIHRoYXQgc2F2ZXMgbmVnYXRpdmUgcmVzdWx0cyBvZiBjaGVja19kc3RfbGltaXRzX2NhbGNfcG9zLgorICAgICBJZiBiaXQgTiBpcyBjbGVhciwgbWVhbnMgdGhhdCB0aGlzIGVudHJ5IHdvbid0IGVwc2lsb24tdHJhbnNpdGlvbiB0bworICAgICBhbiBPUF9PUEVOX1NVQkVYUCBvciBPUF9DTE9TRV9TVUJFWFAgZm9yIHRoZSBOKzEtdGggc3ViZXhwcmVzc2lvbi4gIElmCisgICAgIGl0IGlzIHNldCwgY2hlY2tfZHN0X2xpbWl0c19jYWxjX3Bvc18xIHdpbGwgcmVjdXJzZSBhbmQgdHJ5IHRvIGZpbmQgb25lCisgICAgIHN1Y2ggbm9kZS4KKworICAgICBBIGJhY2tyZWZlcmVuY2UgZG9lcyBub3QgZXBzaWxvbi10cmFuc2l0aW9uIHVubGVzcyBpdCBpcyBlbXB0eSwgc28gc2V0CisgICAgIHRvIGFsbCB6ZXJvcyBpZiBGUk9NICE9IFRPLiAgKi8KKyAgbWN0eC0+YmtyZWZfZW50c1ttY3R4LT5uYmtyZWZfZW50c10uZXBzX3JlYWNoYWJsZV9zdWJleHBzX21hcAorICAgID0gKGZyb20gPT0gdG8gPyAtMSA6IDApOworCisgIG1jdHgtPmJrcmVmX2VudHNbbWN0eC0+bmJrcmVmX2VudHMrK10ubW9yZSA9IDA7CisgIGlmIChtY3R4LT5tYXhfbWJfZWxlbV9sZW4gPCB0byAtIGZyb20pCisgICAgbWN0eC0+bWF4X21iX2VsZW1fbGVuID0gdG8gLSBmcm9tOworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKy8qIFJldHVybiB0aGUgZmlyc3QgZW50cnkgd2l0aCB0aGUgc2FtZSBzdHJfaWR4LCBvciBSRUdfTUlTU0lORyBpZiBub25lIGlzCisgICBmb3VuZC4gIE5vdGUgdGhhdCBNQ1RYLT5CS1JFRl9FTlRTIGlzIGFscmVhZHkgc29ydGVkIGJ5IE1DVFgtPlNUUl9JRFguICAqLworCitzdGF0aWMgSWR4CitpbnRlcm5hbF9mdW5jdGlvbgorc2VhcmNoX2N1cl9ia3JlZl9lbnRyeSAoY29uc3QgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LCBJZHggc3RyX2lkeCkKK3sKKyAgSWR4IGxlZnQsIHJpZ2h0LCBtaWQsIGxhc3Q7CisgIGxhc3QgPSByaWdodCA9IG1jdHgtPm5ia3JlZl9lbnRzOworICBmb3IgKGxlZnQgPSAwOyBsZWZ0IDwgcmlnaHQ7KQorICAgIHsKKyAgICAgIG1pZCA9IChsZWZ0ICsgcmlnaHQpIC8gMjsKKyAgICAgIGlmIChtY3R4LT5ia3JlZl9lbnRzW21pZF0uc3RyX2lkeCA8IHN0cl9pZHgpCisJbGVmdCA9IG1pZCArIDE7CisgICAgICBlbHNlCisJcmlnaHQgPSBtaWQ7CisgICAgfQorICBpZiAobGVmdCA8IGxhc3QgJiYgbWN0eC0+YmtyZWZfZW50c1tsZWZ0XS5zdHJfaWR4ID09IHN0cl9pZHgpCisgICAgcmV0dXJuIGxlZnQ7CisgIGVsc2UKKyAgICByZXR1cm4gUkVHX01JU1NJTkc7Cit9CisKKy8qIFJlZ2lzdGVyIHRoZSBub2RlIE5PREUsIHdob3NlIHR5cGUgaXMgT1BfT1BFTl9TVUJFWFAsIGFuZCB3aGljaCBtYXRjaGVzCisgICBhdCBTVFJfSURYLiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCittYXRjaF9jdHhfYWRkX3N1YnRvcCAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4LCBJZHggbm9kZSwgSWR4IHN0cl9pZHgpCit7CisjaWZkZWYgREVCVUcKKyAgYXNzZXJ0IChtY3R4LT5zdWJfdG9wcyAhPSBOVUxMKTsKKyAgYXNzZXJ0IChtY3R4LT5hc3ViX3RvcHMgPiAwKTsKKyNlbmRpZgorICBpZiAoQkUgKG1jdHgtPm5zdWJfdG9wcyA9PSBtY3R4LT5hc3ViX3RvcHMsIDApKQorICAgIHsKKyAgICAgIElkeCBuZXdfYXN1Yl90b3BzID0gbWN0eC0+YXN1Yl90b3BzICogMjsKKyAgICAgIHJlX3N1Yl9tYXRjaF90b3BfdCAqKm5ld19hcnJheSA9IHJlX3JlYWxsb2MgKG1jdHgtPnN1Yl90b3BzLAorCQkJCQkJICAgcmVfc3ViX21hdGNoX3RvcF90ICosCisJCQkJCQkgICBuZXdfYXN1Yl90b3BzKTsKKyAgICAgIGlmIChCRSAobmV3X2FycmF5ID09IE5VTEwsIDApKQorCXJldHVybiBSRUdfRVNQQUNFOworICAgICAgbWN0eC0+c3ViX3RvcHMgPSBuZXdfYXJyYXk7CisgICAgICBtY3R4LT5hc3ViX3RvcHMgPSBuZXdfYXN1Yl90b3BzOworICAgIH0KKyAgbWN0eC0+c3ViX3RvcHNbbWN0eC0+bnN1Yl90b3BzXSA9IGNhbGxvYyAoMSwgc2l6ZW9mIChyZV9zdWJfbWF0Y2hfdG9wX3QpKTsKKyAgaWYgKEJFIChtY3R4LT5zdWJfdG9wc1ttY3R4LT5uc3ViX3RvcHNdID09IE5VTEwsIDApKQorICAgIHJldHVybiBSRUdfRVNQQUNFOworICBtY3R4LT5zdWJfdG9wc1ttY3R4LT5uc3ViX3RvcHNdLT5ub2RlID0gbm9kZTsKKyAgbWN0eC0+c3ViX3RvcHNbbWN0eC0+bnN1Yl90b3BzKytdLT5zdHJfaWR4ID0gc3RyX2lkeDsKKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCisvKiBSZWdpc3RlciB0aGUgbm9kZSBOT0RFLCB3aG9zZSB0eXBlIGlzIE9QX0NMT1NFX1NVQkVYUCwgYW5kIHdoaWNoIG1hdGNoZXMKKyAgIGF0IFNUUl9JRFgsIHdob3NlIGNvcnJlc3BvbmRpbmcgT1BfT1BFTl9TVUJFWFAgaXMgU1VCX1RPUC4gICovCisKK3N0YXRpYyByZV9zdWJfbWF0Y2hfbGFzdF90ICoKK2ludGVybmFsX2Z1bmN0aW9uCittYXRjaF9jdHhfYWRkX3N1Ymxhc3QgKHJlX3N1Yl9tYXRjaF90b3BfdCAqc3VidG9wLCBJZHggbm9kZSwgSWR4IHN0cl9pZHgpCit7CisgIHJlX3N1Yl9tYXRjaF9sYXN0X3QgKm5ld19lbnRyeTsKKyAgaWYgKEJFIChzdWJ0b3AtPm5sYXN0cyA9PSBzdWJ0b3AtPmFsYXN0cywgMCkpCisgICAgeworICAgICAgSWR4IG5ld19hbGFzdHMgPSAyICogc3VidG9wLT5hbGFzdHMgKyAxOworICAgICAgcmVfc3ViX21hdGNoX2xhc3RfdCAqKm5ld19hcnJheSA9IHJlX3JlYWxsb2MgKHN1YnRvcC0+bGFzdHMsCisJCQkJCQkgICAgcmVfc3ViX21hdGNoX2xhc3RfdCAqLAorCQkJCQkJICAgIG5ld19hbGFzdHMpOworICAgICAgaWYgKEJFIChuZXdfYXJyYXkgPT0gTlVMTCwgMCkpCisJcmV0dXJuIE5VTEw7CisgICAgICBzdWJ0b3AtPmxhc3RzID0gbmV3X2FycmF5OworICAgICAgc3VidG9wLT5hbGFzdHMgPSBuZXdfYWxhc3RzOworICAgIH0KKyAgbmV3X2VudHJ5ID0gY2FsbG9jICgxLCBzaXplb2YgKHJlX3N1Yl9tYXRjaF9sYXN0X3QpKTsKKyAgaWYgKEJFIChuZXdfZW50cnkgIT0gTlVMTCwgMSkpCisgICAgeworICAgICAgc3VidG9wLT5sYXN0c1tzdWJ0b3AtPm5sYXN0c10gPSBuZXdfZW50cnk7CisgICAgICBuZXdfZW50cnktPm5vZGUgPSBub2RlOworICAgICAgbmV3X2VudHJ5LT5zdHJfaWR4ID0gc3RyX2lkeDsKKyAgICAgICsrc3VidG9wLT5ubGFzdHM7CisgICAgfQorICByZXR1cm4gbmV3X2VudHJ5OworfQorCitzdGF0aWMgdm9pZAoraW50ZXJuYWxfZnVuY3Rpb24KK3NpZnRfY3R4X2luaXQgKHJlX3NpZnRfY29udGV4dF90ICpzY3R4LCByZV9kZmFzdGF0ZV90ICoqc2lmdGVkX3N0cywKKwkgICAgICAgcmVfZGZhc3RhdGVfdCAqKmxpbWl0ZWRfc3RzLCBJZHggbGFzdF9ub2RlLCBJZHggbGFzdF9zdHJfaWR4KQoreworICBzY3R4LT5zaWZ0ZWRfc3RhdGVzID0gc2lmdGVkX3N0czsKKyAgc2N0eC0+bGltaXRlZF9zdGF0ZXMgPSBsaW1pdGVkX3N0czsKKyAgc2N0eC0+bGFzdF9ub2RlID0gbGFzdF9ub2RlOworICBzY3R4LT5sYXN0X3N0cl9pZHggPSBsYXN0X3N0cl9pZHg7CisgIHJlX25vZGVfc2V0X2luaXRfZW1wdHkgKCZzY3R4LT5saW1pdHMpOworfQpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYi9yZW5hbWUuYyBiL3BhcnRlZC0xLjguNy9saWIvcmVuYW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJkMmIwMQotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWIvcmVuYW1lLmMKQEAgLTAsMCArMSw1NyBAQAorLyogV29yayBhcm91bmQgdGhlIGJ1ZyBpbiBzb21lIHN5c3RlbXMgd2hlcmVieSByZW5hbWUgZmFpbHMgd2hlbiB0aGUgc291cmNlCisgICBmaWxlIGhhcyBhIHRyYWlsaW5nIHNsYXNoLiAgVGhlIHJlbmFtZSBmdW5jdGlvbnMgb2YgU3VuT1MgNC4xLjFfVTEgYW5kCisgICBtaXBzLWRlYy11bHRyaXg0LjQgaGF2ZSB0aGlzIGJ1Zy4KKworICAgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA1LCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKworLyogd3JpdHRlbiBieSBWb2xrZXIgQm9yY2hlcnQgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI3VuZGVmIHJlbmFtZQorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImRpcm5hbWUuaCIKKyNpbmNsdWRlICJ4YWxsb2MuaCIKKworLyogUmVuYW1lIHRoZSBmaWxlIFNSQyB0byBEU1QsIHJlbW92aW5nIGFueSB0cmFpbGluZworICAgc2xhc2hlcyBmcm9tIFNSQy4gIE5lZWRlZCBmb3IgU3VuT1MgNC4xLjFfVTEuICAqLworCitpbnQKK3JwbF9yZW5hbWUgKGNoYXIgY29uc3QgKnNyYywgY2hhciBjb25zdCAqZHN0KQoreworICBjaGFyICpzcmNfdGVtcDsKKyAgaW50IHJldF92YWw7CisgIHNpemVfdCBzX2xlbiA9IHN0cmxlbiAoc3JjKTsKKworICBpZiAoc19sZW4gJiYgc3JjW3NfbGVuIC0gMV0gPT0gJy8nKQorICAgIHsKKyAgICAgIHNyY190ZW1wID0geHN0cmR1cCAoc3JjKTsKKyAgICAgIHN0cmlwX3RyYWlsaW5nX3NsYXNoZXMgKHNyY190ZW1wKTsKKyAgICB9CisgIGVsc2UKKyAgICBzcmNfdGVtcCA9IChjaGFyICopIHNyYzsKKworICByZXRfdmFsID0gcmVuYW1lIChzcmNfdGVtcCwgZHN0KTsKKworICBpZiAoc3JjX3RlbXAgIT0gc3JjKQorICAgIGZyZWUgKHNyY190ZW1wKTsKKworICByZXR1cm4gcmV0X3ZhbDsKK30KZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWIvcnBtYXRjaC5jIGIvcGFydGVkLTEuOC43L2xpYi9ycG1hdGNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVmNzlmOAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWIvcnBtYXRjaC5jCkBAIC0wLDAgKzEsNzkgQEAKKy8qIERldGVybWluZSB3aGV0aGVyIHN0cmluZyB2YWx1ZSBpcyBhZmZpcm1hdGlvbiBvciBuZWdhdGl2ZSByZXNwb25zZQorICAgYWNjb3JkaW5nIHRvIGN1cnJlbnQgbG9jYWxlJ3MgZGF0YS4KKworICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk4LCAyMDAwLCAyMDAyLCAyMDAzLCAyMDA2IEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaWYgRU5BQkxFX05MUworIyBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjIGluY2x1ZGUgPHJlZ2V4Lmg+CisjIGluY2x1ZGUgImdldHRleHQuaCIKKyMgZGVmaW5lIF8obXNnaWQpIGdldHRleHQgKG1zZ2lkKQorCitzdGF0aWMgaW50Cit0cnkgKGNvbnN0IGNoYXIgKnJlc3BvbnNlLCBjb25zdCBjaGFyICpwYXR0ZXJuLCBjb25zdCBpbnQgbWF0Y2gsCisgICAgIGNvbnN0IGludCBub21hdGNoLCBjb25zdCBjaGFyICoqbGFzdHAsIHJlZ2V4X3QgKnJlKQoreworICBpZiAocGF0dGVybiAhPSAqbGFzdHApCisgICAgeworICAgICAgLyogVGhlIHBhdHRlcm4gaGFzIGNoYW5nZWQuICAqLworICAgICAgaWYgKCpsYXN0cCkKKwl7CisJICAvKiBGcmVlIHRoZSBvbGQgY29tcGlsZWQgcGF0dGVybi4gICovCisJICByZWdmcmVlIChyZSk7CisJICAqbGFzdHAgPSBOVUxMOworCX0KKyAgICAgIC8qIENvbXBpbGUgdGhlIHBhdHRlcm4gYW5kIGNhY2hlIGl0IGZvciBmdXR1cmUgcnVucy4gICovCisgICAgICBpZiAocmVnY29tcCAocmUsIHBhdHRlcm4sIFJFR19FWFRFTkRFRCkgIT0gMCkKKwlyZXR1cm4gLTE7CisgICAgICAqbGFzdHAgPSBwYXR0ZXJuOworICAgIH0KKworICAvKiBTZWUgaWYgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGVzIFJFU1BPTlNFLiAgKi8KKyAgcmV0dXJuIHJlZ2V4ZWMgKHJlLCByZXNwb25zZSwgMCwgTlVMTCwgMCkgPT0gMCA/IG1hdGNoIDogbm9tYXRjaDsKK30KKyNlbmRpZgorCisKK2ludAorcnBtYXRjaCAoY29uc3QgY2hhciAqcmVzcG9uc2UpCit7CisjaWYgRU5BQkxFX05MUworICAvKiBNYXRjaCBhZ2FpbnN0IG9uZSBvZiB0aGUgcmVzcG9uc2UgcGF0dGVybnMsIGNvbXBpbGluZyB0aGUgcGF0dGVybgorICAgICBmaXJzdCBpZiBuZWNlc3NhcnkuICAqLworCisgIC8qIFdlIGNhY2hlIHRoZSByZXNwb25zZSBwYXR0ZXJucyBhbmQgY29tcGlsZWQgcmVnZXhwcyBoZXJlLiAgKi8KKyAgc3RhdGljIGNvbnN0IGNoYXIgKnllc2V4cHIsICpub2V4cHI7CisgIHN0YXRpYyByZWdleF90IHllc3JlLCBub3JlOworICBpbnQgcmVzdWx0OworCisgIHJldHVybiAoKHJlc3VsdCA9IHRyeSAocmVzcG9uc2UsIF8oIl5beVldIiksIDEsIDAsCisJCQkgJnllc2V4cHIsICZ5ZXNyZSkpCisJICA/IHJlc3VsdAorCSAgOiB0cnkgKHJlc3BvbnNlLCBfKCJeW25OXSIpLCAwLCAtMSwgJm5vZXhwciwgJm5vcmUpKTsKKyNlbHNlCisgIC8qIFRlc3QgYWdhaW5zdCAiXlt5WV0iIGFuZCAiXltuTl0iLCBoYXJkY29kZWQgdG8gYXZvaWQgcmVxdWlyaW5nIHJlZ2V4ICovCisgIHJldHVybiAoKnJlc3BvbnNlID09ICd5JyB8fCAqcmVzcG9uc2UgPT0gJ1knID8gMQorCSAgOiAqcmVzcG9uc2UgPT0gJ24nIHx8ICpyZXNwb25zZSA9PSAnTicgPyAwIDogLTEpOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGliL3NhZmUtcmVhZC5jIGIvcGFydGVkLTEuOC43L2xpYi9zYWZlLXJlYWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2JmMWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYi9zYWZlLXJlYWQuYwpAQCAtMCwwICsxLDc4IEBACisvKiBBbiBpbnRlcmZhY2UgdG8gcmVhZCBhbmQgd3JpdGUgdGhhdCByZXRyaWVzIGFmdGVyIGludGVycnVwdHMuCisKKyAgIENvcHlyaWdodCAoQykgMTk5MywgMTk5NCwgMTk5OCwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKy8qIFNwZWNpZmljYXRpb24uICAqLworI2lmZGVmIFNBRkVfV1JJVEUKKyMgaW5jbHVkZSAic2FmZS13cml0ZS5oIgorI2Vsc2UKKyMgaW5jbHVkZSAic2FmZS1yZWFkLmgiCisjZW5kaWYKKworLyogR2V0IHNzaXplX3QuICAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2lmZGVmIEVJTlRSCisjIGRlZmluZSBJU19FSU5UUih4KSAoKHgpID09IEVJTlRSKQorI2Vsc2UKKyMgZGVmaW5lIElTX0VJTlRSKHgpIDAKKyNlbmRpZgorCisjaW5jbHVkZSA8bGltaXRzLmg+CisKKyNpZmRlZiBTQUZFX1dSSVRFCisjIGRlZmluZSBzYWZlX3J3IHNhZmVfd3JpdGUKKyMgZGVmaW5lIHJ3IHdyaXRlCisjZWxzZQorIyBkZWZpbmUgc2FmZV9ydyBzYWZlX3JlYWQKKyMgZGVmaW5lIHJ3IHJlYWQKKyMgdW5kZWYgY29uc3QKKyMgZGVmaW5lIGNvbnN0IC8qIGVtcHR5ICovCisjZW5kaWYKKworLyogUmVhZCh3cml0ZSkgdXAgdG8gQ09VTlQgYnl0ZXMgYXQgQlVGIGZyb20odG8pIGRlc2NyaXB0b3IgRkQsIHJldHJ5aW5nIGlmCisgICBpbnRlcnJ1cHRlZC4gIFJldHVybiB0aGUgYWN0dWFsIG51bWJlciBvZiBieXRlcyByZWFkKHdyaXR0ZW4pLCB6ZXJvIGZvciBFT0YsCisgICBvciBTQUZFX1JFQURfRVJST1IoU0FGRV9XUklURV9FUlJPUikgdXBvbiBlcnJvci4gICovCitzaXplX3QKK3NhZmVfcncgKGludCBmZCwgdm9pZCBjb25zdCAqYnVmLCBzaXplX3QgY291bnQpCit7CisgIC8qIFdvcmsgYXJvdW5kIGEgYnVnIGluIFRydTY0IDUuMS4gIEF0dGVtcHRpbmcgdG8gcmVhZCBtb3JlIHRoYW4KKyAgICAgSU5UX01BWCBieXRlcyBmYWlscyB3aXRoIGVycm5vID09IEVJTlZBTC4gIFNlZQorICAgICA8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1nbnUtdXRpbHMvMjAwMi0wNC9tc2cwMDAxMC5odG1sPi4KKyAgICAgV2hlbiBkZWNyZWFzaW5nIENPVU5ULCBrZWVwIGl0IGJsb2NrLWFsaWduZWQuICAqLworICBlbnVtIHsgQlVHR1lfUkVBRF9NQVhJTVVNID0gSU5UX01BWCAmIH44MTkxIH07CisKKyAgZm9yICg7OykKKyAgICB7CisgICAgICBzc2l6ZV90IHJlc3VsdCA9IHJ3IChmZCwgYnVmLCBjb3VudCk7CisKKyAgICAgIGlmICgwIDw9IHJlc3VsdCkKKwlyZXR1cm4gcmVzdWx0OworICAgICAgZWxzZSBpZiAoSVNfRUlOVFIgKGVycm5vKSkKKwljb250aW51ZTsKKyAgICAgIGVsc2UgaWYgKGVycm5vID09IEVJTlZBTCAmJiBCVUdHWV9SRUFEX01BWElNVU0gPCBjb3VudCkKKwljb3VudCA9IEJVR0dZX1JFQURfTUFYSU1VTTsKKyAgICAgIGVsc2UKKwlyZXR1cm4gcmVzdWx0OworICAgIH0KK30KZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWIvc2FmZS1yZWFkLmggYi9wYXJ0ZWQtMS44LjcvbGliL3NhZmUtcmVhZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NTE5NTUKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGliL3NhZmUtcmVhZC5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qIEFuIGludGVyZmFjZSB0byByZWFkKCkgdGhhdCByZXRyaWVzIGFmdGVyIGludGVycnVwdHMuCisgICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworCisjZGVmaW5lIFNBRkVfUkVBRF9FUlJPUiAoKHNpemVfdCkgLTEpCisKKy8qIFJlYWQgdXAgdG8gQ09VTlQgYnl0ZXMgYXQgQlVGIGZyb20gZGVzY3JpcHRvciBGRCwgcmV0cnlpbmcgaWYgaW50ZXJydXB0ZWQuCisgICBSZXR1cm4gdGhlIGFjdHVhbCBudW1iZXIgb2YgYnl0ZXMgcmVhZCwgemVybyBmb3IgRU9GLCBvciBTQUZFX1JFQURfRVJST1IKKyAgIHVwb24gZXJyb3IuICAqLworZXh0ZXJuIHNpemVfdCBzYWZlX3JlYWQgKGludCBmZCwgdm9pZCAqYnVmLCBzaXplX3QgY291bnQpOworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGliL3NhZmUtd3JpdGUuYyBiL3BhcnRlZC0xLjguNy9saWIvc2FmZS13cml0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMzc1YTYKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGliL3NhZmUtd3JpdGUuYwpAQCAtMCwwICsxLDE5IEBACisvKiBBbiBpbnRlcmZhY2UgdG8gd3JpdGUgdGhhdCByZXRyaWVzIGFmdGVyIGludGVycnVwdHMuCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworCisjZGVmaW5lIFNBRkVfV1JJVEUKKyNpbmNsdWRlICJzYWZlLXJlYWQuYyIKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWIvc2FmZS13cml0ZS5oIGIvcGFydGVkLTEuOC43L2xpYi9zYWZlLXdyaXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE5NDYzNgotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWIvc2FmZS13cml0ZS5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEFuIGludGVyZmFjZSB0byB3cml0ZSgpIHRoYXQgcmV0cmllcyBhZnRlciBpbnRlcnJ1cHRzLgorICAgQ29weXJpZ2h0IChDKSAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisjZGVmaW5lIFNBRkVfV1JJVEVfRVJST1IgKChzaXplX3QpIC0xKQorCisvKiBXcml0ZSB1cCB0byBDT1VOVCBieXRlcyBhdCBCVUYgdG8gZGVzY3JpcHRvciBGRCwgcmV0cnlpbmcgaWYgaW50ZXJydXB0ZWQuCisgICBSZXR1cm4gdGhlIGFjdHVhbCBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiwgemVybyBmb3IgRU9GLCBvciBTQUZFX1dSSVRFX0VSUk9SCisgICB1cG9uIGVycm9yLiAgKi8KK2V4dGVybiBzaXplX3Qgc2FmZV93cml0ZSAoaW50IGZkLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBjb3VudCk7CmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGliL3N0ZGJvb2xfLmggYi9wYXJ0ZWQtMS44LjcvbGliL3N0ZGJvb2xfLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUwYTAxMAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWIvc3RkYm9vbF8uaApAQCAtMCwwICsxLDExOCBAQAorLyogQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA2LCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgV3JpdHRlbiBieSBCcnVubyBIYWlibGUgPGhhaWJsZUBjbGlzcC5jb25zLm9yZz4sIDIwMDEuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworCisjaWZuZGVmIF9HTF9TVERCT09MX0gKKyNkZWZpbmUgX0dMX1NUREJPT0xfSAorCisvKiBJU08gQyA5OSA8c3RkYm9vbC5oPiBmb3IgcGxhdGZvcm1zIHRoYXQgbGFjayBpdC4gICovCisKKy8qIFVzYWdlIHN1Z2dlc3Rpb25zOgorCisgICBQcm9ncmFtcyB0aGF0IHVzZSA8c3RkYm9vbC5oPiBzaG91bGQgYmUgYXdhcmUgb2Ygc29tZSBsaW1pdGF0aW9ucworICAgYW5kIHN0YW5kYXJkcyBjb21wbGlhbmNlIGlzc3Vlcy4KKworICAgU3RhbmRhcmRzIGNvbXBsaWFuY2U6CisKKyAgICAgICAtIDxzdGRib29sLmg+IG11c3QgYmUgI2luY2x1ZGVkIGJlZm9yZSAnYm9vbCcsICdmYWxzZScsICd0cnVlJworICAgICAgICAgY2FuIGJlIHVzZWQuCisKKyAgICAgICAtIFlvdSBjYW5ub3QgYXNzdW1lIHRoYXQgc2l6ZW9mIChib29sKSA9PSAxLgorCisgICAgICAgLSBQcm9ncmFtcyBzaG91bGQgbm90IHVuZGVmaW5lIHRoZSBtYWNyb3MgYm9vbCwgdHJ1ZSwgYW5kIGZhbHNlLAorICAgICAgICAgYXMgQzk5IGxpc3RzIHRoYXQgYXMgYW4gIm9ic29sZXNjZW50IGZlYXR1cmUiLgorCisgICBMaW1pdGF0aW9ucyBvZiB0aGlzIHN1YnN0aXR1dGUsIHdoZW4gdXNlZCBpbiBhIEM4OSBlbnZpcm9ubWVudDoKKworICAgICAgIC0gPHN0ZGJvb2wuaD4gbXVzdCBiZSAjaW5jbHVkZWQgYmVmb3JlIHRoZSAnX0Jvb2wnIHR5cGUgY2FuIGJlIHVzZWQuCisKKyAgICAgICAtIFlvdSBjYW5ub3QgYXNzdW1lIHRoYXQgX0Jvb2wgaXMgYSB0eXBlZGVmOyBpdCBtaWdodCBiZSBhIG1hY3JvLgorCisgICAgICAgLSBCaXQtZmllbGRzIG9mIHR5cGUgJ2Jvb2wnIGFyZSBub3Qgc3VwcG9ydGVkLiAgUG9ydGFibGUgY29kZQorICAgICAgICAgc2hvdWxkIHVzZSAndW5zaWduZWQgaW50IGZvbyA6IDE7JyByYXRoZXIgdGhhbiAnYm9vbCBmb28gOiAxOycuCisKKyAgICAgICAtIEluIEM5OSwgY2FzdHMgYW5kIGF1dG9tYXRpYyBjb252ZXJzaW9ucyB0byAnX0Jvb2wnIG9yICdib29sJyBhcmUKKyAgICAgICAgIHBlcmZvcm1lZCBpbiBzdWNoIGEgd2F5IHRoYXQgZXZlcnkgbm9uemVybyB2YWx1ZSBnZXRzIGNvbnZlcnRlZAorICAgICAgICAgdG8gJ3RydWUnLCBhbmQgemVybyBnZXRzIGNvbnZlcnRlZCB0byAnZmFsc2UnLiAgVGhpcyBkb2Vzbid0IHdvcmsKKyAgICAgICAgIHdpdGggdGhpcyBzdWJzdGl0dXRlLiAgV2l0aCB0aGlzIHN1YnN0aXR1dGUsIG9ubHkgdGhlIHZhbHVlcyAwIGFuZCAxCisgICAgICAgICBnaXZlIHRoZSBleHBlY3RlZCByZXN1bHQgd2hlbiBjb252ZXJ0ZWQgdG8gX0Jvb2wnIG9yICdib29sJy4KKworICAgQWxzbywgaXQgaXMgc3VnZ2VzdGVkIHRoYXQgcHJvZ3JhbXMgdXNlICdib29sJyByYXRoZXIgdGhhbiAnX0Jvb2wnOworICAgdGhpcyBpc24ndCByZXF1aXJlZCwgYnV0ICdib29sJyBpcyBtb3JlIGNvbW1vbi4gICovCisKKworLyogNy4xNi4gQm9vbGVhbiB0eXBlIGFuZCB2YWx1ZXMgKi8KKworLyogQmVPUyA8c3lzL3NvY2tldC5oPiBhbHJlYWR5ICNkZWZpbmVzIGZhbHNlIDAsIHRydWUgMS4gIFdlIHVzZSB0aGUgc2FtZQorICAgZGVmaW5pdGlvbnMgYmVsb3csIGJ1dCB0ZW1wb3JhcmlseSB3ZSBoYXZlIHRvICN1bmRlZiB0aGVtLiAgKi8KKyNpZmRlZiBfX0JFT1NfXworIyBpbmNsdWRlIDxPUy5oPiAvKiBkZWZpbmVzIGJvb2wgYnV0IG5vdCBfQm9vbCAqLworIyB1bmRlZiBmYWxzZQorIyB1bmRlZiB0cnVlCisjZW5kaWYKKworLyogRm9yIHRoZSBzYWtlIG9mIHN5bWJvbGljIG5hbWVzIGluIGdkYiwgd2UgZGVmaW5lIHRydWUgYW5kIGZhbHNlIGFzCisgICBlbnVtIGNvbnN0YW50cywgbm90IG9ubHkgYXMgbWFjcm9zLgorICAgSXQgaXMgdGVtcHRpbmcgdG8gd3JpdGUKKyAgICAgIHR5cGVkZWYgZW51bSB7IGZhbHNlID0gMCwgdHJ1ZSA9IDEgfSBfQm9vbDsKKyAgIHNvIHRoYXQgZ2RiIHByaW50cyB2YWx1ZXMgb2YgdHlwZSAnYm9vbCcgc3ltYm9saWNhbGx5LiBCdXQgaWYgd2UgZG8KKyAgIHRoaXMsIHZhbHVlcyBvZiB0eXBlICdfQm9vbCcgbWF5IHByb21vdGUgdG8gJ2ludCcgb3IgJ3Vuc2lnbmVkIGludCcKKyAgIChzZWUgSVNPIEMgOTkgNi43LjIuMi4oNCkpOyBob3dldmVyLCAnX0Jvb2wnIG11c3QgcHJvbW90ZSB0byAnaW50JworICAgKHNlZSBJU08gQyA5OSA2LjMuMS4xLigyKSkuICBTbyB3ZSBhZGQgYSBuZWdhdGl2ZSB2YWx1ZSB0byB0aGUKKyAgIGVudW07IHRoaXMgZW5zdXJlcyB0aGF0ICdfQm9vbCcgcHJvbW90ZXMgdG8gJ2ludCcuICAqLworI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfX0JFT1NfXworICAvKiBBIGNvbXBpbGVyIGtub3duIHRvIGhhdmUgJ2Jvb2wnLiAgKi8KKyAgLyogSWYgdGhlIGNvbXBpbGVyIGFscmVhZHkgaGFzIGJvdGggJ2Jvb2wnIGFuZCAnX0Jvb2wnLCB3ZSBjYW4gYXNzdW1lIHRoZXkKKyAgICAgYXJlIHRoZSBzYW1lIHR5cGVzLiAgKi8KKyMgaWYgIUBIQVZFX19CT09MQAordHlwZWRlZiBib29sIF9Cb29sOworIyBlbmRpZgorI2Vsc2UKKyMgaWYgIWRlZmluZWQgX19HTlVDX18KKyAgIC8qIElmIEBIQVZFX19CT09MQDoKKyAgICAgICAgU29tZSBIUC1VWCBjYyBhbmQgQUlYIElCTSBDIGNvbXBpbGVyIHZlcnNpb25zIGhhdmUgY29tcGlsZXIgYnVncyB3aGVuCisgICAgICAgIHRoZSBidWlsdC1pbiBfQm9vbCB0eXBlIGlzIHVzZWQuICBTZWUKKyAgICAgICAgICBodHRwOi8vZ2NjLmdudS5vcmcvbWwvZ2NjLXBhdGNoZXMvMjAwMy0xMi9tc2cwMjMwMy5odG1sCisgICAgICAgICAgaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1jb3JldXRpbHMvMjAwNS0xMS9tc2cwMDE2MS5odG1sCisgICAgICAgICAgaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1jb3JldXRpbHMvMjAwNS0xMC9tc2cwMDA4Ni5odG1sCisgICAgICAgIFNpbWlsYXIgYnVncyBhcmUgbGlrZWx5IHdpdGggb3RoZXIgY29tcGlsZXJzIGFzIHdlbGw7IHRoaXMgZmlsZQorICAgICAgICB3b3VsZG4ndCBiZSB1c2VkIGlmIDxzdGRib29sLmg+IHdhcyB3b3JraW5nLgorICAgICAgICBTbyB3ZSBvdmVycmlkZSB0aGUgX0Jvb2wgdHlwZS4KKyAgICAgIElmICFASEFWRV9fQk9PTEA6CisgICAgICAgIE5lZWQgdG8gZGVmaW5lIF9Cb29sIG91cnNlbHZlcy4gQXMgJ3NpZ25lZCBjaGFyJyBvciBhcyBhbiBlbnVtIHR5cGU/CisgICAgICAgIFVzZSBvZiBhIHR5cGVkZWYsIHdpdGggU3VuUFJPIEMsIGxlYWRzIHRvIGEgc3R1cGlkCisgICAgICAgICAgIndhcm5pbmc6IF9Cb29sIGlzIGEga2V5d29yZCBpbiBJU08gQzk5Ii4KKyAgICAgICAgVXNlIG9mIGFuIGVudW0gdHlwZSwgd2l0aCBJUklYIGNjLCBsZWFkcyB0byBhIHN0dXBpZAorICAgICAgICAgICJ3YXJuaW5nKDExODUpOiBlbnVtZXJhdGVkIHR5cGUgbWl4ZWQgd2l0aCBhbm90aGVyIHR5cGUiLgorICAgICAgICBUaGUgb25seSBiZW5lZml0IG9mIHRoZSBlbnVtIHR5cGUsIGRlYnVnZ2FiaWxpdHksIGlzIG5vdCBpbXBvcnRhbnQKKyAgICAgICAgd2l0aCB0aGVzZSBjb21waWxlcnMuICBTbyB1c2UgJ3NpZ25lZCBjaGFyJyBhbmQgbm8gdHlwZWRlZi4gICovCisjICBkZWZpbmUgX0Jvb2wgc2lnbmVkIGNoYXIKK2VudW0geyBmYWxzZSA9IDAsIHRydWUgPSAxIH07CisjIGVsc2UKKyAgIC8qIFdpdGggdGhpcyBjb21waWxlciwgdHJ1c3QgdGhlIF9Cb29sIHR5cGUgaWYgdGhlIGNvbXBpbGVyIGhhcyBpdC4gICovCisjICBpZiAhQEhBVkVfX0JPT0xACit0eXBlZGVmIGVudW0geyBfQm9vbF9tdXN0X3Byb21vdGVfdG9faW50ID0gLTEsIGZhbHNlID0gMCwgdHJ1ZSA9IDEgfSBfQm9vbDsKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYKKyNkZWZpbmUgYm9vbCBfQm9vbAorCisvKiBUaGUgb3RoZXIgbWFjcm9zIG11c3QgYmUgdXNhYmxlIGluIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLiAgKi8KKyNkZWZpbmUgZmFsc2UgMAorI2RlZmluZSB0cnVlIDEKKyNkZWZpbmUgX19ib29sX3RydWVfZmFsc2VfYXJlX2RlZmluZWQgMQorCisjZW5kaWYgLyogX0dMX1NUREJPT0xfSCAqLwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYi9zdGRpbnRfLmggYi9wYXJ0ZWQtMS44LjcvbGliL3N0ZGludF8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmE1MjUxCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYi9zdGRpbnRfLmgKQEAgLTAsMCArMSw1MDQgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwMS0yMDAyLCAyMDA0LTIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBXcml0dGVuIGJ5IFBhdWwgRWdnZXJ0LCBCcnVubyBIYWlibGUsIFNhbSBTdGVpbmdvbGQsIFBldGVyIEJ1cndvb2QuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBnbnVsaWIuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworCisjaWZuZGVmIF9HTF9TVERJTlRfSAorI2RlZmluZSBfR0xfU1RESU5UX0gKKworLyoKKyAqIElTTyBDIDk5IDxzdGRpbnQuaD4gZm9yIHBsYXRmb3JtcyB0aGF0IGxhY2sgaXQuCisgKiA8aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL3N1c3YzeGJkL3N0ZGludC5oLmh0bWw+CisgKi8KKworLyogR2V0IHRob3NlIHR5cGVzIHRoYXQgYXJlIGFscmVhZHkgZGVmaW5lZCBpbiBvdGhlciBzeXN0ZW0gaW5jbHVkZQorICAgZmlsZXMsIHNvIHRoYXQgd2UgY2FuICIjZGVmaW5lIGludDhfdCBzaWduZWQgY2hhciIgYmVsb3cgd2l0aG91dAorICAgd29ycnlpbmcgYWJvdXQgYSBsYXRlciBzeXN0ZW0gaW5jbHVkZSBmaWxlIGNvbnRhaW5pbmcgYSAidHlwZWRlZgorICAgc2lnbmVkIGNoYXIgaW50OF90OyIgdGhhdCB3aWxsIGdldCBtZXNzZWQgdXAgYnkgb3VyIG1hY3JvLiAgT3VyCisgICBtYWNyb3Mgc2hvdWxkIGFsbCBiZSBjb25zaXN0ZW50IHdpdGggdGhlIHN5c3RlbSB2ZXJzaW9ucywgZXhjZXB0CisgICBmb3IgdGhlICJmYXN0IiB0eXBlcyBhbmQgbWFjcm9zLCB3aGljaCB3ZSByZWNvbW1lbmQgYWdhaW5zdCB1c2luZworICAgaW4gcHVibGljIGludGVyZmFjZXMgZHVlIHRvIGNvbXBpbGVyIGRpZmZlcmVuY2VzLiAgKi8KKworI2lmIEBIQVZFX1NURElOVF9IQAorIyBpZiBkZWZpbmVkIF9fc2dpICYmICEgZGVmaW5lZCBfX2M5OQorICAgLyogQnlwYXNzIElSSVgncyA8c3RkaW50Lmg+IGlmIGluIEM4OSBtb2RlLCBzaW5jZSBpdCBtZXJlbHkgYW5ub3lzIHVzZXJzCisgICAgICB3aXRoICJUaGlzIGhlYWRlciBmaWxlIGlzIHRvIGJlIHVzZWQgb25seSBmb3IgYzk5IG1vZGUgY29tcGlsYXRpb25zIgorICAgICAgZGlhZ25vc3RpY3MuICAqLworIyAgZGVmaW5lIF9fU1RESU5UX0hfXworIyBlbmRpZgorICAvKiBPdGhlciBzeXN0ZW1zIG1heSBoYXZlIGFuIGluY29tcGxldGUgb3IgYnVnZ3kgPHN0ZGludC5oPi4KKyAgICAgSW5jbHVkZSBpdCBiZWZvcmUgPGludHR5cGVzLmg+LCBzaW5jZSBhbnkgIiNpbmNsdWRlIDxzdGRpbnQuaD4iCisgICAgIGluIDxpbnR0eXBlcy5oPiB3b3VsZCByZWluY2x1ZGUgdXMsIHNraXBwaW5nIG91ciBjb250ZW50cyBiZWNhdXNlCisgICAgIF9HTF9TVERJTlRfSCBpcyBkZWZpbmVkLiAgKi8KKyMgaW5jbHVkZSBAQUJTT0xVVEVfU1RESU5UX0hACisjZW5kaWYKKworLyogPHN5cy90eXBlcy5oPiBkZWZpbmVzIHNvbWUgb2YgdGhlIHN0ZGludC5oIHR5cGVzIGFzIHdlbGwsIG9uIGdsaWJjLAorICAgSVJJWCA2LjUsIGFuZCBPcGVuQlNEIDMuOCAodmlhIDxtYWNoaW5lL3R5cGVzLmg+KS4KKyAgIEFJWCA1LjIgPHN5cy90eXBlcy5oPiBpc24ndCBuZWVkZWQgYW5kIGNhdXNlcyB0cm91Ymxlcy4KKyAgIE1hY09TIFggMTAuNC42IDxzeXMvdHlwZXMuaD4gaW5jbHVkZXMgPHN0ZGludC5oPiAod2hpY2ggaXMgdXMpLCBidXQKKyAgIHJlbGllcyBvbiB0aGUgc3lzdGVtIDxzdGRpbnQuaD4gZGVmaW5pdGlvbnMsIHNvIGluY2x1ZGUKKyAgIDxzeXMvdHlwZXMuaD4gYWZ0ZXIgQEFCU09MVVRFX1NURElOVF9IQC4gICovCisjaWYgQEhBVkVfU1lTX1RZUEVTX0hAICYmICEgZGVmaW5lZCBfQUlYCisjIGluY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisKKy8qIEdldCBMT05HX01JTiwgTE9OR19NQVgsIFVMT05HX01BWC4gICovCisjaW5jbHVkZSA8bGltaXRzLmg+CisKKyNpZiBASEFWRV9JTlRUWVBFU19IQAorICAvKiBJbiBPcGVuQlNEIDMuOCwgPGludHR5cGVzLmg+IGluY2x1ZGVzIDxtYWNoaW5lL3R5cGVzLmg+LCB3aGljaCBkZWZpbmVzCisgICAgIGludHs4LDE2LDMyLDY0fV90LCB1aW50ezgsMTYsMzIsNjR9X3QgYW5kIF9fQklUX1RZUEVTX0RFRklORURfXy4KKyAgICAgPGludHR5cGVzLmg+IGFsc28gZGVmaW5lcyBpbnRwdHJfdCBhbmQgdWludHB0cl90LiAgKi8KKyMgZGVmaW5lIF9HTF9KVVNUX0lOQ0xVREVfQUJTT0xVVEVfSU5UVFlQRVNfSAorIyBpbmNsdWRlIDxpbnR0eXBlcy5oPgorIyB1bmRlZiBfR0xfSlVTVF9JTkNMVURFX0FCU09MVVRFX0lOVFRZUEVTX0gKKyNlbGlmIEBIQVZFX1NZU19JTlRUWVBFU19IQAorICAvKiBTb2xhcmlzIDcgPHN5cy9pbnR0eXBlcy5oPiBoYXMgdGhlIHR5cGVzIGV4Y2VwdCB0aGUgKl9mYXN0Kl90IHR5cGVzLCBhbmQKKyAgICAgdGhlIG1hY3JvcyBleGNlcHQgZm9yICpfRkFTVCpfKiwgSU5UUFRSX01JTiwgUFRSRElGRl9NSU4sIFBUUkRJRkZfTUFYLiAgKi8KKyMgaW5jbHVkZSA8c3lzL2ludHR5cGVzLmg+CisjZW5kaWYKKworI2lmIEBIQVZFX1NZU19CSVRZUEVTX0hAICYmICEgZGVmaW5lZCBfX0JJVF9UWVBFU19ERUZJTkVEX18KKyAgLyogTGludXggbGliYzQgPj0gNC42LjcgYW5kIGxpYmM1IGhhdmUgYSA8c3lzL2JpdHlwZXMuaD4gdGhhdCBkZWZpbmVzCisgICAgIGludHs4LDE2LDMyLDY0fV90IGFuZCBfX0JJVF9UWVBFU19ERUZJTkVEX18uICBJbiBsaWJjNSA+PSA1LjIuMiBpdCBpcworICAgICBpbmNsdWRlZCBieSA8c3lzL3R5cGVzLmg+LiAgKi8KKyMgaW5jbHVkZSA8c3lzL2JpdHlwZXMuaD4KKyNlbmRpZgorCisjaWYgISBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX19TVERDX0NPTlNUQU5UX01BQ1JPUworCisvKiBHZXQgV0NIQVJfTUlOLCBXQ0hBUl9NQVguICAqLworIyBpZiAhIChkZWZpbmVkIFdDSEFSX01JTiAmJiBkZWZpbmVkIFdDSEFSX01BWCkKKyMgIGluY2x1ZGUgPHdjaGFyLmg+CisjIGVuZGlmCisKKyNlbmRpZgorCisvKiBNaW5pbXVtIGFuZCBtYXhpbXVtIHZhbHVlcyBmb3IgYSBpbnRlZ2VyIHR5cGUgdW5kZXIgdGhlIHVzdWFsIGFzc3VtcHRpb24uCisgICBSZXR1cm4gYW4gdW5zcGVjaWZpZWQgdmFsdWUgaWYgQklUUyA9PSAwLCBhZGRpbmcgYSBjaGVjayB0byBwYWNpZnkKKyAgIHBpY2t5IGNvbXBpbGVycy4gICovCisKKyNkZWZpbmUgX1NURElOVF9NSU4oc2lnbmVkLCBiaXRzLCB6ZXJvKSBcCisgICgoc2lnbmVkKSA/ICgtICgoemVybykgKyAxKSA8PCAoKGJpdHMpID8gKGJpdHMpIC0gMSA6IDApKSA6ICh6ZXJvKSkKKworI2RlZmluZSBfU1RESU5UX01BWChzaWduZWQsIGJpdHMsIHplcm8pIFwKKyAgKChzaWduZWQpIFwKKyAgID8gfiBfU1RESU5UX01JTiAoc2lnbmVkLCBiaXRzLCB6ZXJvKSBcCisgICA6ICgoKCh6ZXJvKSArIDEpIDw8ICgoYml0cykgPyAoYml0cykgLSAxIDogMCkpIC0gMSkgKiAyICsgMSkKKworLyogNy4xOC4xLjEuIEV4YWN0LXdpZHRoIGludGVnZXIgdHlwZXMgKi8KKworLyogSGVyZSB3ZSBhc3N1bWUgYSBzdGFuZGFyZCBhcmNoaXRlY3R1cmUgd2hlcmUgdGhlIGhhcmR3YXJlIGludGVnZXIKKyAgIHR5cGVzIGhhdmUgOCwgMTYsIDMyLCBvcHRpb25hbGx5IDY0IGJpdHMuICAqLworCisjdW5kZWYgaW50OF90CisjdW5kZWYgdWludDhfdAorI2RlZmluZSBpbnQ4X3Qgc2lnbmVkIGNoYXIKKyNkZWZpbmUgdWludDhfdCB1bnNpZ25lZCBjaGFyCisKKyN1bmRlZiBpbnQxNl90CisjdW5kZWYgdWludDE2X3QKKyNkZWZpbmUgaW50MTZfdCBzaG9ydCBpbnQKKyNkZWZpbmUgdWludDE2X3QgdW5zaWduZWQgc2hvcnQgaW50CisKKyN1bmRlZiBpbnQzMl90CisjdW5kZWYgdWludDMyX3QKKyNkZWZpbmUgaW50MzJfdCBpbnQKKyNkZWZpbmUgdWludDMyX3QgdW5zaWduZWQgaW50CisKKy8qIERvIG5vdCB1bmRlZmluZSBpbnQ2NF90IGlmIGdudWxpYiBpcyBub3QgYmVpbmcgdXNlZCB3aXRoIDY0LWJpdAorICAgdHlwZXMsIHNpbmNlIG90aGVyd2lzZSBpdCBicmVha3MgcGxhdGZvcm1zIGxpa2UgVGFuZGVtL05TSy4gICovCisjaWYgTE9OR19NQVggPj4gMzEgPj4gMzEgPT0gMQorIyB1bmRlZiBpbnQ2NF90CisjIGRlZmluZSBpbnQ2NF90IGxvbmcgaW50CisjIGRlZmluZSBHTF9JTlQ2NF9UCisjZWxpZiBkZWZpbmVkIF9NU0NfVkVSCisjIHVuZGVmIGludDY0X3QKKyMgZGVmaW5lIGludDY0X3QgX19pbnQ2NAorIyBkZWZpbmUgR0xfSU5UNjRfVAorI2VsaWYgQEhBVkVfTE9OR19MT05HX0lOVEAKKyMgdW5kZWYgaW50NjRfdAorIyBkZWZpbmUgaW50NjRfdCBsb25nIGxvbmcgaW50CisjIGRlZmluZSBHTF9JTlQ2NF9UCisjZW5kaWYKKworI2lmIFVMT05HX01BWCA+PiAzMSA+PiAzMSA+PiAxID09IDEKKyMgdW5kZWYgdWludDY0X3QKKyMgZGVmaW5lIHVpbnQ2NF90IHVuc2lnbmVkIGxvbmcgaW50CisjIGRlZmluZSBHTF9VSU5UNjRfVAorI2VsaWYgZGVmaW5lZCBfTVNDX1ZFUgorIyB1bmRlZiB1aW50NjRfdAorIyBkZWZpbmUgdWludDY0X3QgdW5zaWduZWQgX19pbnQ2NAorIyBkZWZpbmUgR0xfVUlOVDY0X1QKKyNlbGlmIEBIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlRACisjIHVuZGVmIHVpbnQ2NF90CisjIGRlZmluZSB1aW50NjRfdCB1bnNpZ25lZCBsb25nIGxvbmcgaW50CisjIGRlZmluZSBHTF9VSU5UNjRfVAorI2VuZGlmCisKKy8qIEF2b2lkIGNvbGxpc2lvbiB3aXRoIFNvbGFyaXMgMi41LjEgPHB0aHJlYWQuaD4gZXRjLiAgKi8KKyNkZWZpbmUgX1VJTlQ4X1QKKyNkZWZpbmUgX1VJTlQzMl9UCisjZGVmaW5lIF9VSU5UNjRfVAorCisKKy8qIDcuMTguMS4yLiBNaW5pbXVtLXdpZHRoIGludGVnZXIgdHlwZXMgKi8KKworLyogSGVyZSB3ZSBhc3N1bWUgYSBzdGFuZGFyZCBhcmNoaXRlY3R1cmUgd2hlcmUgdGhlIGhhcmR3YXJlIGludGVnZXIKKyAgIHR5cGVzIGhhdmUgOCwgMTYsIDMyLCBvcHRpb25hbGx5IDY0IGJpdHMuIFRoZXJlZm9yZSB0aGUgbGVhc3ROX3QgdHlwZXMKKyAgIGFyZSB0aGUgc2FtZSBhcyB0aGUgY29ycmVzcG9uZGluZyBOX3QgdHlwZXMuICAqLworCisjdW5kZWYgaW50X2xlYXN0OF90CisjdW5kZWYgdWludF9sZWFzdDhfdAorI3VuZGVmIGludF9sZWFzdDE2X3QKKyN1bmRlZiB1aW50X2xlYXN0MTZfdAorI3VuZGVmIGludF9sZWFzdDMyX3QKKyN1bmRlZiB1aW50X2xlYXN0MzJfdAorI3VuZGVmIGludF9sZWFzdDY0X3QKKyN1bmRlZiB1aW50X2xlYXN0NjRfdAorI2RlZmluZSBpbnRfbGVhc3Q4X3QgaW50OF90CisjZGVmaW5lIHVpbnRfbGVhc3Q4X3QgdWludDhfdAorI2RlZmluZSBpbnRfbGVhc3QxNl90IGludDE2X3QKKyNkZWZpbmUgdWludF9sZWFzdDE2X3QgdWludDE2X3QKKyNkZWZpbmUgaW50X2xlYXN0MzJfdCBpbnQzMl90CisjZGVmaW5lIHVpbnRfbGVhc3QzMl90IHVpbnQzMl90CisjaWZkZWYgR0xfSU5UNjRfVAorIyBkZWZpbmUgaW50X2xlYXN0NjRfdCBpbnQ2NF90CisjZW5kaWYKKyNpZmRlZiBHTF9VSU5UNjRfVAorIyBkZWZpbmUgdWludF9sZWFzdDY0X3QgdWludDY0X3QKKyNlbmRpZgorCisvKiA3LjE4LjEuMy4gRmFzdGVzdCBtaW5pbXVtLXdpZHRoIGludGVnZXIgdHlwZXMgKi8KKworLyogTm90ZTogT3RoZXIgPHN0ZGludC5oPiBzdWJzdGl0dXRlcyBtYXkgZGVmaW5lIHRoZXNlIHR5cGVzIGRpZmZlcmVudGx5LgorICAgSXQgaXMgbm90IHJlY29tbWVuZGVkIHRvIHVzZSB0aGVzZSB0eXBlcyBpbiBwdWJsaWMgaGVhZGVyIGZpbGVzLiAqLworCisvKiBIZXJlIHdlIGFzc3VtZSBhIHN0YW5kYXJkIGFyY2hpdGVjdHVyZSB3aGVyZSB0aGUgaGFyZHdhcmUgaW50ZWdlcgorICAgdHlwZXMgaGF2ZSA4LCAxNiwgMzIsIG9wdGlvbmFsbHkgNjQgYml0cy4gVGhlcmVmb3JlIHRoZSBmYXN0Tl90IHR5cGVzCisgICBhcmUgdGFrZW4gZnJvbSB0aGUgc2FtZSBsaXN0IG9mIHR5cGVzLiAgQXNzdW1lIHRoYXQgJ2xvbmcgaW50JworICAgaXMgZmFzdCBlbm91Z2ggZm9yIGFsbCBuYXJyb3dlciBpbnRlZ2Vycy4gICovCisKKyN1bmRlZiBpbnRfZmFzdDhfdAorI3VuZGVmIHVpbnRfZmFzdDhfdAorI3VuZGVmIGludF9mYXN0MTZfdAorI3VuZGVmIHVpbnRfZmFzdDE2X3QKKyN1bmRlZiBpbnRfZmFzdDMyX3QKKyN1bmRlZiB1aW50X2Zhc3QzMl90CisjdW5kZWYgaW50X2Zhc3Q2NF90CisjdW5kZWYgdWludF9mYXN0NjRfdAorI2RlZmluZSBpbnRfZmFzdDhfdCBsb25nIGludAorI2RlZmluZSB1aW50X2Zhc3Q4X3QgdW5zaWduZWQgaW50X2Zhc3Q4X3QKKyNkZWZpbmUgaW50X2Zhc3QxNl90IGxvbmcgaW50CisjZGVmaW5lIHVpbnRfZmFzdDE2X3QgdW5zaWduZWQgaW50X2Zhc3QxNl90CisjZGVmaW5lIGludF9mYXN0MzJfdCBsb25nIGludAorI2RlZmluZSB1aW50X2Zhc3QzMl90IHVuc2lnbmVkIGludF9mYXN0MzJfdAorI2lmZGVmIEdMX0lOVDY0X1QKKyMgZGVmaW5lIGludF9mYXN0NjRfdCBpbnQ2NF90CisjZW5kaWYKKyNpZmRlZiBHTF9VSU5UNjRfVAorIyBkZWZpbmUgdWludF9mYXN0NjRfdCB1aW50NjRfdAorI2VuZGlmCisKKy8qIDcuMTguMS40LiBJbnRlZ2VyIHR5cGVzIGNhcGFibGUgb2YgaG9sZGluZyBvYmplY3QgcG9pbnRlcnMgKi8KKworI3VuZGVmIGludHB0cl90CisjdW5kZWYgdWludHB0cl90CisjZGVmaW5lIGludHB0cl90IGxvbmcgaW50CisjZGVmaW5lIHVpbnRwdHJfdCB1bnNpZ25lZCBsb25nIGludAorCisvKiA3LjE4LjEuNS4gR3JlYXRlc3Qtd2lkdGggaW50ZWdlciB0eXBlcyAqLworCisvKiBOb3RlOiBUaGVzZSB0eXBlcyBhcmUgY29tcGlsZXIgZGVwZW5kZW50LiBJdCBtYXkgYmUgdW53aXNlIHRvIHVzZSB0aGVtIGluCisgICBwdWJsaWMgaGVhZGVyIGZpbGVzLiAqLworCisjdW5kZWYgaW50bWF4X3QKKyNpZiBASEFWRV9MT05HX0xPTkdfSU5UQCAmJiBMT05HX01BWCA+PiAzMCA9PSAxCisjIGRlZmluZSBpbnRtYXhfdCBsb25nIGxvbmcgaW50CisjZWxpZiBkZWZpbmVkIEdMX0lOVDY0X1QKKyMgZGVmaW5lIGludG1heF90IGludDY0X3QKKyNlbHNlCisjIGRlZmluZSBpbnRtYXhfdCBsb25nIGludAorI2VuZGlmCisKKyN1bmRlZiB1aW50bWF4X3QKKyNpZiBASEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UQCAmJiBVTE9OR19NQVggPj4gMzEgPT0gMQorIyBkZWZpbmUgdWludG1heF90IHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQKKyNlbGlmIGRlZmluZWQgR0xfVUlOVDY0X1QKKyMgZGVmaW5lIHVpbnRtYXhfdCB1aW50NjRfdAorI2Vsc2UKKyMgZGVmaW5lIHVpbnRtYXhfdCB1bnNpZ25lZCBsb25nIGludAorI2VuZGlmCisKKy8qIDcuMTguMi4gTGltaXRzIG9mIHNwZWNpZmllZC13aWR0aCBpbnRlZ2VyIHR5cGVzICovCisKKyNpZiAhIGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfX1NURENfTElNSVRfTUFDUk9TCisKKy8qIDcuMTguMi4xLiBMaW1pdHMgb2YgZXhhY3Qtd2lkdGggaW50ZWdlciB0eXBlcyAqLworCisvKiBIZXJlIHdlIGFzc3VtZSBhIHN0YW5kYXJkIGFyY2hpdGVjdHVyZSB3aGVyZSB0aGUgaGFyZHdhcmUgaW50ZWdlcgorICAgdHlwZXMgaGF2ZSA4LCAxNiwgMzIsIG9wdGlvbmFsbHkgNjQgYml0cy4gICovCisKKyN1bmRlZiBJTlQ4X01JTgorI3VuZGVmIElOVDhfTUFYCisjdW5kZWYgVUlOVDhfTUFYCisjZGVmaW5lIElOVDhfTUlOICAofiBJTlQ4X01BWCkKKyNkZWZpbmUgSU5UOF9NQVggIDEyNworI2RlZmluZSBVSU5UOF9NQVggIDI1NQorCisjdW5kZWYgSU5UMTZfTUlOCisjdW5kZWYgSU5UMTZfTUFYCisjdW5kZWYgVUlOVDE2X01BWAorI2RlZmluZSBJTlQxNl9NSU4gICh+IElOVDE2X01BWCkKKyNkZWZpbmUgSU5UMTZfTUFYICAzMjc2NworI2RlZmluZSBVSU5UMTZfTUFYICA2NTUzNQorCisjdW5kZWYgSU5UMzJfTUlOCisjdW5kZWYgSU5UMzJfTUFYCisjdW5kZWYgVUlOVDMyX01BWAorI2RlZmluZSBJTlQzMl9NSU4gICh+IElOVDMyX01BWCkKKyNkZWZpbmUgSU5UMzJfTUFYICAyMTQ3NDgzNjQ3CisjZGVmaW5lIFVJTlQzMl9NQVggIDQyOTQ5NjcyOTVVCisKKyN1bmRlZiBJTlQ2NF9NSU4KKyN1bmRlZiBJTlQ2NF9NQVgKKyNpZmRlZiBHTF9JTlQ2NF9UCisvKiBQcmVmZXIgKC0gSU5UTUFYX0MgKDEpIDw8IDYzKSBvdmVyICh+IElOVDY0X01BWCkgYmVjYXVzZSBTdW5QUk8gQyA1LjAKKyAgIGV2YWx1YXRlcyB0aGUgbGF0dGVyIGluY29ycmVjdGx5IGluIHByZXByb2Nlc3NvciBleHByZXNzaW9ucy4gICovCisjIGRlZmluZSBJTlQ2NF9NSU4gICgtIElOVE1BWF9DICgxKSA8PCA2MykKKyMgZGVmaW5lIElOVDY0X01BWCAgSU5UTUFYX0MgKDkyMjMzNzIwMzY4NTQ3NzU4MDcpCisjZW5kaWYKKworI3VuZGVmIFVJTlQ2NF9NQVgKKyNpZmRlZiBHTF9VSU5UNjRfVAorIyBkZWZpbmUgVUlOVDY0X01BWCAgVUlOVE1BWF9DICgxODQ0Njc0NDA3MzcwOTU1MTYxNSkKKyNlbmRpZgorCisvKiA3LjE4LjIuMi4gTGltaXRzIG9mIG1pbmltdW0td2lkdGggaW50ZWdlciB0eXBlcyAqLworCisvKiBIZXJlIHdlIGFzc3VtZSBhIHN0YW5kYXJkIGFyY2hpdGVjdHVyZSB3aGVyZSB0aGUgaGFyZHdhcmUgaW50ZWdlcgorICAgdHlwZXMgaGF2ZSA4LCAxNiwgMzIsIG9wdGlvbmFsbHkgNjQgYml0cy4gVGhlcmVmb3JlIHRoZSBsZWFzdE5fdCB0eXBlcworICAgYXJlIHRoZSBzYW1lIGFzIHRoZSBjb3JyZXNwb25kaW5nIE5fdCB0eXBlcy4gICovCisKKyN1bmRlZiBJTlRfTEVBU1Q4X01JTgorI3VuZGVmIElOVF9MRUFTVDhfTUFYCisjdW5kZWYgVUlOVF9MRUFTVDhfTUFYCisjZGVmaW5lIElOVF9MRUFTVDhfTUlOICBJTlQ4X01JTgorI2RlZmluZSBJTlRfTEVBU1Q4X01BWCAgSU5UOF9NQVgKKyNkZWZpbmUgVUlOVF9MRUFTVDhfTUFYICBVSU5UOF9NQVgKKworI3VuZGVmIElOVF9MRUFTVDE2X01JTgorI3VuZGVmIElOVF9MRUFTVDE2X01BWAorI3VuZGVmIFVJTlRfTEVBU1QxNl9NQVgKKyNkZWZpbmUgSU5UX0xFQVNUMTZfTUlOICBJTlQxNl9NSU4KKyNkZWZpbmUgSU5UX0xFQVNUMTZfTUFYICBJTlQxNl9NQVgKKyNkZWZpbmUgVUlOVF9MRUFTVDE2X01BWCAgVUlOVDE2X01BWAorCisjdW5kZWYgSU5UX0xFQVNUMzJfTUlOCisjdW5kZWYgSU5UX0xFQVNUMzJfTUFYCisjdW5kZWYgVUlOVF9MRUFTVDMyX01BWAorI2RlZmluZSBJTlRfTEVBU1QzMl9NSU4gIElOVDMyX01JTgorI2RlZmluZSBJTlRfTEVBU1QzMl9NQVggIElOVDMyX01BWAorI2RlZmluZSBVSU5UX0xFQVNUMzJfTUFYICBVSU5UMzJfTUFYCisKKyN1bmRlZiBJTlRfTEVBU1Q2NF9NSU4KKyN1bmRlZiBJTlRfTEVBU1Q2NF9NQVgKKyNpZmRlZiBHTF9JTlQ2NF9UCisjIGRlZmluZSBJTlRfTEVBU1Q2NF9NSU4gIElOVDY0X01JTgorIyBkZWZpbmUgSU5UX0xFQVNUNjRfTUFYICBJTlQ2NF9NQVgKKyNlbmRpZgorCisjdW5kZWYgVUlOVF9MRUFTVDY0X01BWAorI2lmZGVmIEdMX1VJTlQ2NF9UCisjIGRlZmluZSBVSU5UX0xFQVNUNjRfTUFYICBVSU5UNjRfTUFYCisjZW5kaWYKKworLyogNy4xOC4yLjMuIExpbWl0cyBvZiBmYXN0ZXN0IG1pbmltdW0td2lkdGggaW50ZWdlciB0eXBlcyAqLworCisvKiBIZXJlIHdlIGFzc3VtZSBhIHN0YW5kYXJkIGFyY2hpdGVjdHVyZSB3aGVyZSB0aGUgaGFyZHdhcmUgaW50ZWdlcgorICAgdHlwZXMgaGF2ZSA4LCAxNiwgMzIsIG9wdGlvbmFsbHkgNjQgYml0cy4gVGhlcmVmb3JlIHRoZSBmYXN0Tl90IHR5cGVzCisgICBhcmUgdGFrZW4gZnJvbSB0aGUgc2FtZSBsaXN0IG9mIHR5cGVzLiAgKi8KKworI3VuZGVmIElOVF9GQVNUOF9NSU4KKyN1bmRlZiBJTlRfRkFTVDhfTUFYCisjdW5kZWYgVUlOVF9GQVNUOF9NQVgKKyNkZWZpbmUgSU5UX0ZBU1Q4X01JTiAgTE9OR19NSU4KKyNkZWZpbmUgSU5UX0ZBU1Q4X01BWCAgTE9OR19NQVgKKyNkZWZpbmUgVUlOVF9GQVNUOF9NQVggIFVMT05HX01BWAorCisjdW5kZWYgSU5UX0ZBU1QxNl9NSU4KKyN1bmRlZiBJTlRfRkFTVDE2X01BWAorI3VuZGVmIFVJTlRfRkFTVDE2X01BWAorI2RlZmluZSBJTlRfRkFTVDE2X01JTiAgTE9OR19NSU4KKyNkZWZpbmUgSU5UX0ZBU1QxNl9NQVggIExPTkdfTUFYCisjZGVmaW5lIFVJTlRfRkFTVDE2X01BWCAgVUxPTkdfTUFYCisKKyN1bmRlZiBJTlRfRkFTVDMyX01JTgorI3VuZGVmIElOVF9GQVNUMzJfTUFYCisjdW5kZWYgVUlOVF9GQVNUMzJfTUFYCisjZGVmaW5lIElOVF9GQVNUMzJfTUlOICBMT05HX01JTgorI2RlZmluZSBJTlRfRkFTVDMyX01BWCAgTE9OR19NQVgKKyNkZWZpbmUgVUlOVF9GQVNUMzJfTUFYICBVTE9OR19NQVgKKworI3VuZGVmIElOVF9GQVNUNjRfTUlOCisjdW5kZWYgSU5UX0ZBU1Q2NF9NQVgKKyNpZmRlZiBHTF9JTlQ2NF9UCisjIGRlZmluZSBJTlRfRkFTVDY0X01JTiAgSU5UNjRfTUlOCisjIGRlZmluZSBJTlRfRkFTVDY0X01BWCAgSU5UNjRfTUFYCisjZW5kaWYKKworI3VuZGVmIFVJTlRfRkFTVDY0X01BWAorI2lmZGVmIEdMX1VJTlQ2NF9UCisjIGRlZmluZSBVSU5UX0ZBU1Q2NF9NQVggIFVJTlQ2NF9NQVgKKyNlbmRpZgorCisvKiA3LjE4LjIuNC4gTGltaXRzIG9mIGludGVnZXIgdHlwZXMgY2FwYWJsZSBvZiBob2xkaW5nIG9iamVjdCBwb2ludGVycyAqLworCisjdW5kZWYgSU5UUFRSX01JTgorI3VuZGVmIElOVFBUUl9NQVgKKyN1bmRlZiBVSU5UUFRSX01BWAorI2RlZmluZSBJTlRQVFJfTUlOICBMT05HX01JTgorI2RlZmluZSBJTlRQVFJfTUFYICBMT05HX01BWAorI2RlZmluZSBVSU5UUFRSX01BWCAgVUxPTkdfTUFYCisKKy8qIDcuMTguMi41LiBMaW1pdHMgb2YgZ3JlYXRlc3Qtd2lkdGggaW50ZWdlciB0eXBlcyAqLworCisjdW5kZWYgSU5UTUFYX01JTgorI3VuZGVmIElOVE1BWF9NQVgKKyNpZmRlZiBJTlQ2NF9NQVgKKyMgZGVmaW5lIElOVE1BWF9NSU4gIElOVDY0X01JTgorIyBkZWZpbmUgSU5UTUFYX01BWCAgSU5UNjRfTUFYCisjZWxzZQorIyBkZWZpbmUgSU5UTUFYX01JTiAgSU5UMzJfTUlOCisjIGRlZmluZSBJTlRNQVhfTUFYICBJTlQzMl9NQVgKKyNlbmRpZgorCisjdW5kZWYgVUlOVE1BWF9NQVgKKyNpZmRlZiBVSU5UNjRfTUFYCisjIGRlZmluZSBVSU5UTUFYX01BWCAgVUlOVDY0X01BWAorI2Vsc2UKKyMgZGVmaW5lIFVJTlRNQVhfTUFYICBVSU5UMzJfTUFYCisjZW5kaWYKKworLyogNy4xOC4zLiBMaW1pdHMgb2Ygb3RoZXIgaW50ZWdlciB0eXBlcyAqLworCisvKiBwdHJkaWZmX3QgbGltaXRzICovCisjdW5kZWYgUFRSRElGRl9NSU4KKyN1bmRlZiBQVFJESUZGX01BWAorI2RlZmluZSBQVFJESUZGX01JTiAgXAorICAgX1NURElOVF9NSU4gKDEsIEBCSVRTSVpFT0ZfUFRSRElGRl9UQCwgMEBQVFJESUZGX1RfU1VGRklYQCkKKyNkZWZpbmUgUFRSRElGRl9NQVggIFwKKyAgIF9TVERJTlRfTUFYICgxLCBAQklUU0laRU9GX1BUUkRJRkZfVEAsIDBAUFRSRElGRl9UX1NVRkZJWEApCisKKy8qIHNpZ19hdG9taWNfdCBsaW1pdHMgKi8KKyN1bmRlZiBTSUdfQVRPTUlDX01JTgorI3VuZGVmIFNJR19BVE9NSUNfTUFYCisjZGVmaW5lIFNJR19BVE9NSUNfTUlOICBcCisgICBfU1RESU5UX01JTiAoQEhBVkVfU0lHTkVEX1NJR19BVE9NSUNfVEAsIEBCSVRTSVpFT0ZfU0lHX0FUT01JQ19UQCwgXAorCQkwQFNJR19BVE9NSUNfVF9TVUZGSVhAKQorI2RlZmluZSBTSUdfQVRPTUlDX01BWCAgXAorICAgX1NURElOVF9NQVggKEBIQVZFX1NJR05FRF9TSUdfQVRPTUlDX1RALCBAQklUU0laRU9GX1NJR19BVE9NSUNfVEAsIFwKKwkJMEBTSUdfQVRPTUlDX1RfU1VGRklYQCkKKworCisvKiBzaXplX3QgbGltaXQgKi8KKyN1bmRlZiBTSVpFX01BWAorI2RlZmluZSBTSVpFX01BWCAgX1NURElOVF9NQVggKDAsIEBCSVRTSVpFT0ZfU0laRV9UQCwgMEBTSVpFX1RfU1VGRklYQCkKKworLyogd2NoYXJfdCBsaW1pdHMgKi8KKyN1bmRlZiBXQ0hBUl9NSU4KKyN1bmRlZiBXQ0hBUl9NQVgKKyNkZWZpbmUgV0NIQVJfTUlOICBcCisgICBfU1RESU5UX01JTiAoQEhBVkVfU0lHTkVEX1dDSEFSX1RALCBAQklUU0laRU9GX1dDSEFSX1RALCAwQFdDSEFSX1RfU1VGRklYQCkKKyNkZWZpbmUgV0NIQVJfTUFYICBcCisgICBfU1RESU5UX01BWCAoQEhBVkVfU0lHTkVEX1dDSEFSX1RALCBAQklUU0laRU9GX1dDSEFSX1RALCAwQFdDSEFSX1RfU1VGRklYQCkKKworLyogd2ludF90IGxpbWl0cyAqLworI3VuZGVmIFdJTlRfTUlOCisjdW5kZWYgV0lOVF9NQVgKKyNkZWZpbmUgV0lOVF9NSU4gIFwKKyAgIF9TVERJTlRfTUlOIChASEFWRV9TSUdORURfV0lOVF9UQCwgQEJJVFNJWkVPRl9XSU5UX1RALCAwQFdJTlRfVF9TVUZGSVhAKQorI2RlZmluZSBXSU5UX01BWCAgXAorICAgX1NURElOVF9NQVggKEBIQVZFX1NJR05FRF9XSU5UX1RALCBAQklUU0laRU9GX1dJTlRfVEAsIDBAV0lOVF9UX1NVRkZJWEApCisKKyNlbmRpZiAvKiAhZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9fU1REQ19MSU1JVF9NQUNST1MgKi8KKworLyogNy4xOC40LiBNYWNyb3MgZm9yIGludGVnZXIgY29uc3RhbnRzICovCisKKyNpZiAhIGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfX1NURENfQ09OU1RBTlRfTUFDUk9TCisKKy8qIDcuMTguNC4xLiBNYWNyb3MgZm9yIG1pbmltdW0td2lkdGggaW50ZWdlciBjb25zdGFudHMgKi8KKy8qIEFjY29yZGluZyB0byBJU08gQyA5OSBUZWNobmljYWwgQ29ycmlnZW5kdW0gMSAqLworCisvKiBIZXJlIHdlIGFzc3VtZSBhIHN0YW5kYXJkIGFyY2hpdGVjdHVyZSB3aGVyZSB0aGUgaGFyZHdhcmUgaW50ZWdlcgorICAgdHlwZXMgaGF2ZSA4LCAxNiwgMzIsIG9wdGlvbmFsbHkgNjQgYml0cywgYW5kIGludCBpcyAzMiBiaXRzLiAgKi8KKworI3VuZGVmIElOVDhfQworI3VuZGVmIFVJTlQ4X0MKKyNkZWZpbmUgSU5UOF9DKHgpIHgKKyNkZWZpbmUgVUlOVDhfQyh4KSB4CisKKyN1bmRlZiBJTlQxNl9DCisjdW5kZWYgVUlOVDE2X0MKKyNkZWZpbmUgSU5UMTZfQyh4KSB4CisjZGVmaW5lIFVJTlQxNl9DKHgpIHgKKworI3VuZGVmIElOVDMyX0MKKyN1bmRlZiBVSU5UMzJfQworI2RlZmluZSBJTlQzMl9DKHgpIHgKKyNkZWZpbmUgVUlOVDMyX0MoeCkgeCAjIyBVCisKKyN1bmRlZiBJTlQ2NF9DCisjdW5kZWYgVUlOVDY0X0MKKyNpZiBMT05HX01BWCA+PiAzMSA+PiAzMSA9PSAxCisjIGRlZmluZSBJTlQ2NF9DKHgpIHgjI0wKKyNlbGlmIGRlZmluZWQgX01TQ19WRVIKKyMgZGVmaW5lIElOVDY0X0MoeCkgeCMjaTY0CisjZWxpZiBASEFWRV9MT05HX0xPTkdfSU5UQAorIyBkZWZpbmUgSU5UNjRfQyh4KSB4IyNMTAorI2VuZGlmCisjaWYgVUxPTkdfTUFYID4+IDMxID4+IDMxID4+IDEgPT0gMQorIyBkZWZpbmUgVUlOVDY0X0MoeCkgeCMjVUwKKyNlbGlmIGRlZmluZWQgX01TQ19WRVIKKyMgZGVmaW5lIFVJTlQ2NF9DKHgpIHgjI3VpNjQKKyNlbGlmIEBIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlRACisjIGRlZmluZSBVSU5UNjRfQyh4KSB4IyNVTEwKKyNlbmRpZgorCisvKiA3LjE4LjQuMi4gTWFjcm9zIGZvciBncmVhdGVzdC13aWR0aCBpbnRlZ2VyIGNvbnN0YW50cyAqLworCisjdW5kZWYgSU5UTUFYX0MKKyNpZiBASEFWRV9MT05HX0xPTkdfSU5UQCAmJiBMT05HX01BWCA+PiAzMCA9PSAxCisjIGRlZmluZSBJTlRNQVhfQyh4KSAgIHgjI0xMCisjZWxpZiBkZWZpbmVkIEdMX0lOVDY0X1QKKyMgZGVmaW5lIElOVE1BWF9DKHgpICAgSU5UNjRfQyh4KQorI2Vsc2UKKyMgZGVmaW5lIElOVE1BWF9DKHgpICAgeCMjTAorI2VuZGlmCisKKyN1bmRlZiBVSU5UTUFYX0MKKyNpZiBASEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UQCAmJiBVTE9OR19NQVggPj4gMzEgPT0gMQorIyBkZWZpbmUgVUlOVE1BWF9DKHgpICB4IyNVTEwKKyNlbGlmIGRlZmluZWQgR0xfVUlOVDY0X1QKKyMgZGVmaW5lIFVJTlRNQVhfQyh4KSAgVUlOVDY0X0MoeCkKKyNlbHNlCisjIGRlZmluZSBVSU5UTUFYX0MoeCkgIHgjI1VMCisjZW5kaWYKKworI2VuZGlmIC8qICFkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX19TVERDX0NPTlNUQU5UX01BQ1JPUyAqLworCisjZW5kaWYgLyogX0dMX1NURElOVF9IICovCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGliL3N0ZGxpYl8uaCBiL3BhcnRlZC0xLjguNy9saWIvc3RkbGliXy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NDdjMWQKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGliL3N0ZGxpYl8uaApAQCAtMCwwICsxLDE0OCBAQAorLyogQSBHTlUtbGlrZSA8c3RkbGliLmg+LgorCisgICBDb3B5cmlnaHQgKEMpIDE5OTUsIDIwMDEtMjAwMiwgMjAwNi0yMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKworI2lmIGRlZmluZWQgX19uZWVkX21hbGxvY19hbmRfY2FsbG9jCisvKiBTcGVjaWFsIGludm9jYXRpb24gY29udmVudGlvbiBpbnNpZGUgZ2xpYmMgaGVhZGVyIGZpbGVzLiAgKi8KKworLyogVGhpcyAjcHJhZ21hIGF2b2lkcyBhIHdhcm5pbmcgd2l0aCAiZ2NjIC1XYWxsIiBvbiBzb21lIGdsaWJjIHN5c3RlbXMKKyAgIG9uIHdoaWNoIDxzdGRsaWIuaD4gaGFzIGFuIGluYXBwcm9wcmlhdGUgZGVjbGFyYXRpb24sIHNlZQorICAgPGh0dHA6Ly9zb3VyY2V3YXJlLm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MTA3OT4uICAqLworI2lmZGVmIF9fR05VQ19fCisjIHByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorI2VuZGlmCisKKyNpbmNsdWRlIEBBQlNPTFVURV9TVERMSUJfSEAKKworI2Vsc2UKKy8qIE5vcm1hbCBpbnZvY2F0aW9uIGNvbnZlbnRpb24uICAqLworCisjaWYgZGVmaW5lZCBfX0RFQ0MgJiYgX19ERUNDX1ZFUiA+PSA2MDAwMDAwMAorIyBpbmNsdWRlX25leHQgPHN0ZGxpYi5oPgorI2VuZGlmCisKKyNpZm5kZWYgX0dMX1NURExJQl9ICisjZGVmaW5lIF9HTF9TVERMSUJfSAorCisvKiBUaGlzICNwcmFnbWEgYXZvaWRzIGEgd2FybmluZyB3aXRoICJnY2MgLVdhbGwiIG9uIHNvbWUgZ2xpYmMgc3lzdGVtcworICAgb24gd2hpY2ggPHN0ZGxpYi5oPiBoYXMgYW4gaW5hcHByb3ByaWF0ZSBkZWNsYXJhdGlvbiwgc2VlCisgICA8aHR0cDovL3NvdXJjZXdhcmUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD0xMDc5Pi4gICovCisjaWZkZWYgX19HTlVDX18KKyMgcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisjZW5kaWYKKworI2lmICEoZGVmaW5lZCBfX0RFQ0MgJiYgX19ERUNDX1ZFUiA+PSA2MDAwMDAwMCkKKyMgaW5jbHVkZSBAQUJTT0xVVEVfU1RETElCX0hACisjZW5kaWYKKworCisvKiBUaGUgZGVmaW5pdGlvbiBvZiBHTF9MSU5LX1dBUk5JTkcgaXMgY29waWVkIGhlcmUuICAqLworCisKKy8qIFNvbWUgc3lzdGVtcyBkbyBub3QgZGVmaW5lIEVYSVRfKiwgZGVzcGl0ZSBvdGhlcndpc2Ugc3VwcG9ydGluZyBDODkuICAqLworI2lmbmRlZiBFWElUX1NVQ0NFU1MKKyMgZGVmaW5lIEVYSVRfU1VDQ0VTUyAwCisjZW5kaWYKKy8qIFRhbmRlbS9OU0sgYW5kIG90aGVyIHBsYXRmb3JtcyB0aGF0IGRlZmluZSBFWElUX0ZBSUxVUkUgYXMgLTEgaW50ZXJmZXJlCisgICB3aXRoIHByb3BlciBvcGVyYXRpb24gb2YgeGFyZ3MuICAqLworI2lmbmRlZiBFWElUX0ZBSUxVUkUKKyMgZGVmaW5lIEVYSVRfRkFJTFVSRSAxCisjZWxpZiBFWElUX0ZBSUxVUkUgIT0gMQorIyB1bmRlZiBFWElUX0ZBSUxVUkUKKyMgZGVmaW5lIEVYSVRfRkFJTFVSRSAxCisjZW5kaWYKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKworI2lmIEBHTlVMSUJfR0VUU1VCT1BUQAorLyogQXNzdW1pbmcgKk9QVElPTlAgaXMgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBlbGVtZW50cyBvZiB0aGUgZm9ybQorICAgInRva2VuIiBvciAidG9rZW49dmFsdWUiLCBnZXRzdWJvcHQgcGFyc2VzIHRoZSBmaXJzdCBvZiB0aGVzZSBlbGVtZW50cy4KKyAgIElmIHRoZSBmaXJzdCBlbGVtZW50IHJlZmVycyB0byBhICJ0b2tlbiIgdGhhdCBpcyBtZW1iZXIgb2YgdGhlIGdpdmVuCisgICBOVUxMLXRlcm1pbmF0ZWQgYXJyYXkgb2YgdG9rZW5zOgorICAgICAtIEl0IHJlcGxhY2VzIHRoZSBjb21tYSB3aXRoIGEgTlVMIGJ5dGUsIHVwZGF0ZXMgKk9QVElPTlAgdG8gcG9pbnQgcGFzdAorICAgICAgIHRoZSBmaXJzdCBvcHRpb24gYW5kIHRoZSBjb21tYSwgc2V0cyAqVkFMVUVQIHRvIHRoZSB2YWx1ZSBvZiB0aGUKKyAgICAgICBlbGVtZW50IChvciBOVUxMIGlmIGl0IGRvZXNuJ3QgY29udGFpbiBhbiAiPSIgc2lnbiksCisgICAgIC0gSXQgcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlICJ0b2tlbiIgaW4gdGhlIGdpdmVuIGFycmF5IG9mIHRva2Vucy4KKyAgIE90aGVyd2lzZSBpdCByZXR1cm5zIC0xLCBhbmQgKk9QVElPTlAgYW5kICpWQUxVRVAgYXJlIHVuZGVmaW5lZC4KKyAgIEZvciBtb3JlIGRldGFpbHMgc2VlIHRoZSBQT1NJWDoyMDAxIHNwZWNpZmljYXRpb24uCisgICBodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvc3VzdjN4c2gvZ2V0c3Vib3B0Lmh0bWwgKi8KKyMgaWYgIUBIQVZFX0dFVFNVQk9QVEAKK2V4dGVybiBpbnQgZ2V0c3Vib3B0IChjaGFyICoqb3B0aW9ucCwgY2hhciAqY29uc3QgKnRva2VucywgY2hhciAqKnZhbHVlcCk7CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGdldHN1Ym9wdAorIyBkZWZpbmUgZ2V0c3Vib3B0KG8sdCx2KSBcCisgICAgKEdMX0xJTktfV0FSTklORyAoImdldHN1Ym9wdCBpcyB1bnBvcnRhYmxlIC0gIiBcCisgICAgICAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGdldHN1Ym9wdCBmb3IgcG9ydGFiaWxpdHkiKSwgXAorICAgICBnZXRzdWJvcHQgKG8sIHQsIHYpKQorI2VuZGlmCisKKworI2lmIEBHTlVMSUJfTUtEVEVNUEAKKyMgaWYgIUBIQVZFX01LRFRFTVBACisvKiBDcmVhdGUgYSB1bmlxdWUgdGVtcG9yYXJ5IGRpcmVjdG9yeSBmcm9tIFRFTVBMQVRFLgorICAgVGhlIGxhc3Qgc2l4IGNoYXJhY3RlcnMgb2YgVEVNUExBVEUgbXVzdCBiZSAiWFhYWFhYIjsKKyAgIHRoZXkgYXJlIHJlcGxhY2VkIHdpdGggYSBzdHJpbmcgdGhhdCBtYWtlcyB0aGUgZGlyZWN0b3J5IG5hbWUgdW5pcXVlLgorICAgUmV0dXJucyBURU1QTEFURSwgb3IgYSBudWxsIHBvaW50ZXIgaWYgaXQgY2Fubm90IGdldCBhIHVuaXF1ZSBuYW1lLgorICAgVGhlIGRpcmVjdG9yeSBpcyBjcmVhdGVkIG1vZGUgNzAwLiAgKi8KK2V4dGVybiBjaGFyICogbWtkdGVtcCAoY2hhciAqdGVtcGxhdGUpOworIyBlbmRpZgorI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBta2R0ZW1wCisjIGRlZmluZSBta2R0ZW1wKHQpIFwKKyAgICAoR0xfTElOS19XQVJOSU5HICgibWtkdGVtcCBpcyB1bnBvcnRhYmxlIC0gIiBcCisgICAgICAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIG1rZHRlbXAgZm9yIHBvcnRhYmlsaXR5IiksIFwKKyAgICAgbWtkdGVtcCAodCkpCisjZW5kaWYKKworCisjaWYgQEdOVUxJQl9NS1NURU1QQAorIyBpZiBAUkVQTEFDRV9NS1NURU1QQAorLyogQ3JlYXRlIGEgdW5pcXVlIHRlbXBvcmFyeSBmaWxlIGZyb20gVEVNUExBVEUuCisgICBUaGUgbGFzdCBzaXggY2hhcmFjdGVycyBvZiBURU1QTEFURSBtdXN0IGJlICJYWFhYWFgiOworICAgdGhleSBhcmUgcmVwbGFjZWQgd2l0aCBhIHN0cmluZyB0aGF0IG1ha2VzIHRoZSBmaWxlIG5hbWUgdW5pcXVlLgorICAgVGhlIGZpbGUgaXMgdGhlbiBjcmVhdGVkLCBlbnN1cmluZyBpdCBkaWRuJ3QgZXhpc3QgYmVmb3JlLgorICAgVGhlIGZpbGUgaXMgY3JlYXRlZCByZWFkLXdyaXRlIChtYXNrIGF0IGxlYXN0IDA2MDAgJiB+dW1hc2spLCBidXQgaXQgbWF5IGJlCisgICB3b3JsZC1yZWFkYWJsZSBhbmQgd29ybGQtd3JpdGFibGUgKG1hc2sgMDY2NiAmIH51bWFzayksIGRlcGVuZGluZyBvbiB0aGUKKyAgIGltcGxlbWVudGF0aW9uLgorICAgUmV0dXJucyB0aGUgb3BlbiBmaWxlIGRlc2NyaXB0b3IgaWYgc3VjY2Vzc2Z1bCwgb3RoZXJ3aXNlIC0xIGFuZCBlcnJubworICAgc2V0LiAgKi8KKyMgIGRlZmluZSBta3N0ZW1wIHJwbF9ta3N0ZW1wCitleHRlcm4gaW50IG1rc3RlbXAgKGNoYXIgKnRlbXBsYXRlKTsKKyMgZWxzZQorLyogT24gTWFjT1MgWCAxMC4zLCBvbmx5IDx1bmlzdGQuaD4gZGVjbGFyZXMgbWtzdGVtcC4gICovCisjICBpbmNsdWRlIDx1bmlzdGQuaD4KKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgbWtzdGVtcAorIyBkZWZpbmUgbWtzdGVtcCh0KSBcCisgICAgKEdMX0xJTktfV0FSTklORyAoIm1rc3RlbXAgaXMgdW5wb3J0YWJsZSAtICIgXAorICAgICAgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBta3N0ZW1wIGZvciBwb3J0YWJpbGl0eSIpLCBcCisgICAgIG1rc3RlbXAgKHQpKQorI2VuZGlmCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9HTF9TVERMSUJfSCAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGliL3N0cmNzcG4uYyBiL3BhcnRlZC0xLjguNy9saWIvc3RyY3Nwbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhOGQ2ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGliL3N0cmNzcG4uYwpAQCAtMCwwICsxLDQxIEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTQsIDE5OTYtMTk5NywgMjAwMi0yMDAzLCAyMDA1LTIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIE5PVEU6IFRoZSBjYW5vbmljYWwgc291cmNlIG9mIHRoaXMgZmlsZSBpcyBtYWludGFpbmVkIHdpdGggdGhlIEdOVSBDIExpYnJhcnkuCisgICBCdWdzIGNhbiBiZSByZXBvcnRlZCB0byBidWctZ2xpYmNAZ251Lm9yZy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjdW5kZWYgc3RyY3NwbgorCisvKiBSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgbWF4aW11bSBpbml0aWFsIHNlZ21lbnQgb2YgUworICAgd2hpY2ggY29udGFpbnMgbm8gY2hhcmFjdGVycyBmcm9tIFJFSkVDVC4gICovCitzaXplX3QKK3N0cmNzcG4gKGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKnJlamVjdCkKK3sKKyAgc2l6ZV90IGNvdW50ID0gMDsKKworICB3aGlsZSAoKnMgIT0gJ1wwJykKKyAgICBpZiAoc3RyY2hyIChyZWplY3QsICpzKyspID09IE5VTEwpCisgICAgICArK2NvdW50OworICAgIGVsc2UKKyAgICAgIHJldHVybiBjb3VudDsKKworICByZXR1cm4gY291bnQ7Cit9CmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGliL3N0cmluZ18uaCBiL3BhcnRlZC0xLjguNy9saWIvc3RyaW5nXy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ODg4NjMKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGliL3N0cmluZ18uaApAQCAtMCwwICsxLDU1MCBAQAorLyogQSBHTlUtbGlrZSA8c3RyaW5nLmg+LgorCisgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5NiwgMjAwMS0yMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKworI2lmIGRlZmluZWQgX19ERUNDICYmIF9fREVDQ19WRVIgPj0gNjAwMDAwMDAKKyMgaW5jbHVkZV9uZXh0IDxzdHJpbmcuaD4KKyNlbmRpZgorCisjaWZuZGVmIF9HTF9TVFJJTkdfSAorI2RlZmluZSBfR0xfU1RSSU5HX0gKKworLyogVGhpcyAjcHJhZ21hIGF2b2lkcyBhIHdhcm5pbmcgd2l0aCAiZ2NjIC1XbWlzc2luZy1wcm90b3R5cGVzIiBvbiBzb21lCisgICBtaW5ndyBzeXN0ZW1zLiAgKi8KKyNpZmRlZiBfX0dOVUNfXworIyBwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKyNlbmRpZgorCisjaWYgIShkZWZpbmVkIF9fREVDQyAmJiBfX0RFQ0NfVkVSID49IDYwMDAwMDAwKQorIyBpbmNsdWRlIEBBQlNPTFVURV9TVFJJTkdfSEAKKyNlbmRpZgorCisKKy8qIFRoZSBkZWZpbml0aW9uIG9mIEdMX0xJTktfV0FSTklORyBpcyBjb3BpZWQgaGVyZS4gICovCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiBSZXR1cm4gdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgTkVFRExFIGluIEhBWVNUQUNLLiAgKi8KKyNpZiBAR05VTElCX01FTU1FTUAKKyMgaWYgISBASEFWRV9ERUNMX01FTU1FTUAKK2V4dGVybiB2b2lkICptZW1tZW0gKHZvaWQgY29uc3QgKl9faGF5c3RhY2ssIHNpemVfdCBfX2hheXN0YWNrX2xlbiwKKwkJICAgICB2b2lkIGNvbnN0ICpfX25lZWRsZSwgc2l6ZV90IF9fbmVlZGxlX2xlbik7CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIG1lbW1lbQorIyBkZWZpbmUgbWVtbWVtKGEsYWwsYixibCkgXAorICAgIChHTF9MSU5LX1dBUk5JTkcgKCJtZW1tZW0gaXMgdW5wb3J0YWJsZSAtICIgXAorICAgICAgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBtZW1tZW0gZm9yIHBvcnRhYmlsaXR5IiksIFwKKyAgICAgbWVtbWVtIChhLCBhbCwgYiwgYmwpKQorI2VuZGlmCisKKy8qIENvcHkgTiBieXRlcyBvZiBTUkMgdG8gREVTVCwgcmV0dXJuIHBvaW50ZXIgdG8gYnl0ZXMgYWZ0ZXIgdGhlCisgICBsYXN0IHdyaXR0ZW4gYnl0ZS4gICovCisjaWYgQEdOVUxJQl9NRU1QQ1BZQAorIyBpZiAhIEBIQVZFX01FTVBDUFlACitleHRlcm4gdm9pZCAqbWVtcGNweSAodm9pZCAqcmVzdHJpY3QgX19kZXN0LCB2b2lkIGNvbnN0ICpyZXN0cmljdCBfX3NyYywKKwkJICAgICAgc2l6ZV90IF9fbik7CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIG1lbXBjcHkKKyMgZGVmaW5lIG1lbXBjcHkoYSxiLG4pIFwKKyAgICAoR0xfTElOS19XQVJOSU5HICgibWVtcGNweSBpcyB1bnBvcnRhYmxlIC0gIiBcCisgICAgICAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIG1lbXBjcHkgZm9yIHBvcnRhYmlsaXR5IiksIFwKKyAgICAgbWVtcGNweSAoYSwgYiwgbikpCisjZW5kaWYKKworLyogU2VhcmNoIGJhY2t3YXJkcyB0aHJvdWdoIGEgYmxvY2sgZm9yIGEgYnl0ZSAoc3BlY2lmaWVkIGFzIGFuIGludCkuICAqLworI2lmIEBHTlVMSUJfTUVNUkNIUkAKKyMgaWYgISBASEFWRV9ERUNMX01FTVJDSFJACitleHRlcm4gdm9pZCAqbWVtcmNociAodm9pZCBjb25zdCAqLCBpbnQsIHNpemVfdCk7CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIG1lbXJjaHIKKyMgZGVmaW5lIG1lbXJjaHIoYSxiLGMpIFwKKyAgICAoR0xfTElOS19XQVJOSU5HICgibWVtcmNociBpcyB1bnBvcnRhYmxlIC0gIiBcCisgICAgICAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIG1lbXJjaHIgZm9yIHBvcnRhYmlsaXR5IiksIFwKKyAgICAgbWVtcmNociAoYSwgYiwgYykpCisjZW5kaWYKKworLyogQ29weSBTUkMgdG8gRFNULCByZXR1cm5pbmcgdGhlIGFkZHJlc3Mgb2YgdGhlIHRlcm1pbmF0aW5nICdcMCcgaW4gRFNULiAgKi8KKyNpZiBAR05VTElCX1NUUENQWUAKKyMgaWYgISBASEFWRV9TVFBDUFlACitleHRlcm4gY2hhciAqc3RwY3B5IChjaGFyICpyZXN0cmljdCBfX2RzdCwgY2hhciBjb25zdCAqcmVzdHJpY3QgX19zcmMpOworIyBlbmRpZgorI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzdHBjcHkKKyMgZGVmaW5lIHN0cGNweShhLGIpIFwKKyAgICAoR0xfTElOS19XQVJOSU5HICgic3RwY3B5IGlzIHVucG9ydGFibGUgLSAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc3RwY3B5IGZvciBwb3J0YWJpbGl0eSIpLCBcCisgICAgIHN0cGNweSAoYSwgYikpCisjZW5kaWYKKworLyogQ29weSBubyBtb3JlIHRoYW4gTiBieXRlcyBvZiBTUkMgdG8gRFNULCByZXR1cm5pbmcgYSBwb2ludGVyIHBhc3QgdGhlCisgICBsYXN0IG5vbi1OVUwgYnl0ZSB3cml0dGVuIGludG8gRFNULiAgKi8KKyNpZiBAR05VTElCX1NUUE5DUFlACisjIGlmICEgQEhBVkVfU1RQTkNQWUAKKyMgIGRlZmluZSBzdHBuY3B5IGdudV9zdHBuY3B5CitleHRlcm4gY2hhciAqc3RwbmNweSAoY2hhciAqcmVzdHJpY3QgX19kc3QsIGNoYXIgY29uc3QgKnJlc3RyaWN0IF9fc3JjLAorCQkgICAgICBzaXplX3QgX19uKTsKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgc3RwbmNweQorIyBkZWZpbmUgc3RwbmNweShhLGIsbikgXAorICAgIChHTF9MSU5LX1dBUk5JTkcgKCJzdHBuY3B5IGlzIHVucG9ydGFibGUgLSAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc3RwbmNweSBmb3IgcG9ydGFiaWxpdHkiKSwgXAorICAgICBzdHBuY3B5IChhLCBiLCBuKSkKKyNlbmRpZgorCisvKiBDb21wYXJlIHN0cmluZ3MgUzEgYW5kIFMyLCBpZ25vcmluZyBjYXNlLCByZXR1cm5pbmcgbGVzcyB0aGFuLCBlcXVhbCB0byBvcgorICAgZ3JlYXRlciB0aGFuIHplcm8gaWYgUzEgaXMgbGV4aWNvZ3JhcGhpY2FsbHkgbGVzcyB0aGFuLCBlcXVhbCB0byBvciBncmVhdGVyCisgICB0aGFuIFMyLgorICAgTm90ZTogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB3b3JrIGluIG11bHRpYnl0ZSBsb2NhbGVzLiAgKi8KKyNpZiAhIEBIQVZFX1NUUkNBU0VDTVBACitleHRlcm4gaW50IHN0cmNhc2VjbXAgKGNoYXIgY29uc3QgKnMxLCBjaGFyIGNvbnN0ICpzMik7CisjZW5kaWYKKyNpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisvKiBzdHJjYXNlY21wKCkgZG9lcyBub3Qgd29yayB3aXRoIG11bHRpYnl0ZSBzdHJpbmdzOgorICAgUE9TSVggc2F5cyB0aGF0IGl0IG9wZXJhdGVzIG9uICJzdHJpbmdzIiwgYW5kICJzdHJpbmciIGluIFBPU0lYIGlzIGRlZmluZWQKKyAgIGFzIGEgc2VxdWVuY2Ugb2YgYnl0ZXMsIG5vdCBvZiBjaGFyYWN0ZXJzLiAgICovCisjIHVuZGVmIHN0cmNhc2VjbXAKKyMgZGVmaW5lIHN0cmNhc2VjbXAoYSxiKSBcCisgICAgKEdMX0xJTktfV0FSTklORyAoInN0cmNhc2VjbXAgY2Fubm90IHdvcmsgY29ycmVjdGx5IG9uIGNoYXJhY3RlciBzdHJpbmdzICIgXAorICAgICAgICAgICAgICAgICAgICAgICJpbiBtdWx0aWJ5dGUgbG9jYWxlcyAtICIgXAorICAgICAgICAgICAgICAgICAgICAgICJ1c2UgbWJzY2FzZWNtcCBpZiB5b3UgY2FyZSBhYm91dCAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAiaW50ZXJuYXRpb25hbGl6YXRpb24sIG9yIHVzZSBjX3N0cmNhc2VjbXAgKGZyb20gIiBcCisgICAgICAgICAgICAgICAgICAgICAgImdudWxpYiBtb2R1bGUgYy1zdHJjYXNlKSBpZiB5b3Ugd2FudCBhIGxvY2FsZSAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAiaW5kZXBlbmRlbnQgZnVuY3Rpb24iKSwgXAorICAgICBzdHJjYXNlY21wIChhLCBiKSkKKyNlbmRpZgorCisvKiBDb21wYXJlIG5vIG1vcmUgdGhhbiBOIGJ5dGVzIG9mIHN0cmluZ3MgUzEgYW5kIFMyLCBpZ25vcmluZyBjYXNlLAorICAgcmV0dXJuaW5nIGxlc3MgdGhhbiwgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIHplcm8gaWYgUzEgaXMKKyAgIGxleGljb2dyYXBoaWNhbGx5IGxlc3MgdGhhbiwgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIFMyLgorICAgTm90ZTogVGhpcyBmdW5jdGlvbiBjYW5ub3Qgd29yayBjb3JyZWN0bHkgaW4gbXVsdGlieXRlIGxvY2FsZXMuICAqLworI2lmICEgQEhBVkVfREVDTF9TVFJOQ0FTRUNNUEAKK2V4dGVybiBpbnQgc3RybmNhc2VjbXAgKGNoYXIgY29uc3QgKnMxLCBjaGFyIGNvbnN0ICpzMiwgc2l6ZV90IG4pOworI2VuZGlmCisjaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworLyogc3RybmNhc2VjbXAoKSBkb2VzIG5vdCB3b3JrIHdpdGggbXVsdGlieXRlIHN0cmluZ3M6CisgICBQT1NJWCBzYXlzIHRoYXQgaXQgb3BlcmF0ZXMgb24gInN0cmluZ3MiLCBhbmQgInN0cmluZyIgaW4gUE9TSVggaXMgZGVmaW5lZAorICAgYXMgYSBzZXF1ZW5jZSBvZiBieXRlcywgbm90IG9mIGNoYXJhY3RlcnMuICAqLworIyB1bmRlZiBzdHJuY2FzZWNtcAorIyBkZWZpbmUgc3RybmNhc2VjbXAoYSxiLG4pIFwKKyAgICAoR0xfTElOS19XQVJOSU5HICgic3RybmNhc2VjbXAgY2Fubm90IHdvcmsgY29ycmVjdGx5IG9uIGNoYXJhY3RlciAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAic3RyaW5ncyBpbiBtdWx0aWJ5dGUgbG9jYWxlcyAtICIgXAorICAgICAgICAgICAgICAgICAgICAgICJ1c2UgbWJzbmNhc2VjbXAgb3IgbWJzcGNhc2VjbXAgaWYgeW91IGNhcmUgYWJvdXQgIiBcCisgICAgICAgICAgICAgICAgICAgICAgImludGVybmF0aW9uYWxpemF0aW9uLCBvciB1c2UgY19zdHJuY2FzZWNtcCAoZnJvbSAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAiZ251bGliIG1vZHVsZSBjLXN0cmNhc2UpIGlmIHlvdSB3YW50IGEgbG9jYWxlICIgXAorICAgICAgICAgICAgICAgICAgICAgICJpbmRlcGVuZGVudCBmdW5jdGlvbiIpLCBcCisgICAgIHN0cm5jYXNlY21wIChhLCBiLCBuKSkKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworLyogc3RyY2hyKCkgZG9lcyBub3Qgd29yayB3aXRoIG11bHRpYnl0ZSBzdHJpbmdzIGlmIHRoZSBsb2NhbGUgZW5jb2RpbmcgaXMKKyAgIEdCMTgwMzAgYW5kIHRoZSBjaGFyYWN0ZXIgdG8gYmUgc2VhcmNoZWQgaXMgYSBkaWdpdC4gICovCisjIHVuZGVmIHN0cmNocgorIyBkZWZpbmUgc3RyY2hyKHMsYykgXAorICAgIChHTF9MSU5LX1dBUk5JTkcgKCJzdHJjaHIgY2Fubm90IHdvcmsgY29ycmVjdGx5IG9uIGNoYXJhY3RlciBzdHJpbmdzICIgXAorICAgICAgICAgICAgICAgICAgICAgICJpbiBzb21lIG11bHRpYnl0ZSBsb2NhbGVzIC0gIiBcCisgICAgICAgICAgICAgICAgICAgICAgInVzZSBtYnNjaHIgaWYgeW91IGNhcmUgYWJvdXQgaW50ZXJuYXRpb25hbGl6YXRpb24iKSwgXAorICAgICBzdHJjaHIgKHMsIGMpKQorI2VuZGlmCisKKy8qIEZpbmQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgQyBpbiBTIG9yIHRoZSBmaW5hbCBOVUwgYnl0ZS4gICovCisjaWYgQEdOVUxJQl9TVFJDSFJOVUxACisjIGlmICEgQEhBVkVfU1RSQ0hSTlVMQAorZXh0ZXJuIGNoYXIgKnN0cmNocm51bCAoY2hhciBjb25zdCAqX19zLCBpbnQgX19jX2luKTsKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgc3RyY2hybnVsCisjIGRlZmluZSBzdHJjaHJudWwoYSxiKSBcCisgICAgKEdMX0xJTktfV0FSTklORyAoInN0cmNocm51bCBpcyB1bnBvcnRhYmxlIC0gIiBcCisgICAgICAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHN0cmNocm51bCBmb3IgcG9ydGFiaWxpdHkiKSwgXAorICAgICBzdHJjaHJudWwgKGEsIGIpKQorI2VuZGlmCisKKy8qIER1cGxpY2F0ZSBTLCByZXR1cm5pbmcgYW4gaWRlbnRpY2FsIG1hbGxvYydkIHN0cmluZy4gICovCisjaWYgQEdOVUxJQl9TVFJEVVBACisjIGlmICEgQEhBVkVfREVDTF9TVFJEVVBAICYmICEgZGVmaW5lZCBzdHJkdXAKK2V4dGVybiBjaGFyICpzdHJkdXAgKGNoYXIgY29uc3QgKl9fcyk7CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHN0cmR1cAorIyBkZWZpbmUgc3RyZHVwKGEpIFwKKyAgICAoR0xfTElOS19XQVJOSU5HICgic3RyZHVwIGlzIHVucG9ydGFibGUgLSAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc3RyZHVwIGZvciBwb3J0YWJpbGl0eSIpLCBcCisgICAgIHN0cmR1cCAoYSkpCisjZW5kaWYKKworLyogUmV0dXJuIGEgbmV3bHkgYWxsb2NhdGVkIGNvcHkgb2YgYXQgbW9zdCBOIGJ5dGVzIG9mIFNUUklORy4gICovCisjaWYgQEdOVUxJQl9TVFJORFVQQAorIyBpZiAhIEBIQVZFX1NUUk5EVVBACisjICB1bmRlZiBzdHJuZHVwCisjICBkZWZpbmUgc3RybmR1cCBycGxfc3RybmR1cAorIyBlbmRpZgorIyBpZiAhIEBIQVZFX1NUUk5EVVBAIHx8ICEgQEhBVkVfREVDTF9TVFJORFVQQAorZXh0ZXJuIGNoYXIgKnN0cm5kdXAgKGNoYXIgY29uc3QgKl9fc3RyaW5nLCBzaXplX3QgX19uKTsKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgc3RybmR1cAorIyBkZWZpbmUgc3RybmR1cChhLG4pIFwKKyAgICAoR0xfTElOS19XQVJOSU5HICgic3RybmR1cCBpcyB1bnBvcnRhYmxlIC0gIiBcCisgICAgICAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHN0cm5kdXAgZm9yIHBvcnRhYmlsaXR5IiksIFwKKyAgICAgc3RybmR1cCAoYSwgbikpCisjZW5kaWYKKworLyogRmluZCB0aGUgbGVuZ3RoIChudW1iZXIgb2YgYnl0ZXMpIG9mIFNUUklORywgYnV0IHNjYW4gYXQgbW9zdAorICAgTUFYTEVOIGJ5dGVzLiAgSWYgbm8gJ1wwJyB0ZXJtaW5hdG9yIGlzIGZvdW5kIGluIHRoYXQgbWFueSBieXRlcywKKyAgIHJldHVybiBNQVhMRU4uICAqLworI2lmIEBHTlVMSUJfU1RSTkxFTkAKKyMgaWYgISBASEFWRV9ERUNMX1NUUk5MRU5ACitleHRlcm4gc2l6ZV90IHN0cm5sZW4gKGNoYXIgY29uc3QgKl9fc3RyaW5nLCBzaXplX3QgX19tYXhsZW4pOworIyBlbmRpZgorI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzdHJubGVuCisjIGRlZmluZSBzdHJubGVuKGEsbikgXAorICAgIChHTF9MSU5LX1dBUk5JTkcgKCJzdHJubGVuIGlzIHVucG9ydGFibGUgLSAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc3RybmxlbiBmb3IgcG9ydGFiaWxpdHkiKSwgXAorICAgICBzdHJubGVuIChhLCBuKSkKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworLyogc3RyY3NwbigpIGFzc3VtZXMgdGhlIHNlY29uZCBhcmd1bWVudCBpcyBhIGxpc3Qgb2Ygc2luZ2xlLWJ5dGUgY2hhcmFjdGVycy4KKyAgIEV2ZW4gaW4gdGhpcyBzaW1wbGUgY2FzZSwgaXQgZG9lcyBub3Qgd29yayB3aXRoIG11bHRpYnl0ZSBzdHJpbmdzIGlmIHRoZQorICAgbG9jYWxlIGVuY29kaW5nIGlzIEdCMTgwMzAgYW5kIG9uZSBvZiB0aGUgY2hhcmFjdGVycyB0byBiZSBzZWFyY2hlZCBpcyBhCisgICBkaWdpdC4gICovCisjIHVuZGVmIHN0cmNzcG4KKyMgZGVmaW5lIHN0cmNzcG4ocyxhKSBcCisgICAgKEdMX0xJTktfV0FSTklORyAoInN0cmNzcG4gY2Fubm90IHdvcmsgY29ycmVjdGx5IG9uIGNoYXJhY3RlciBzdHJpbmdzICIgXAorICAgICAgICAgICAgICAgICAgICAgICJpbiBtdWx0aWJ5dGUgbG9jYWxlcyAtICIgXAorICAgICAgICAgICAgICAgICAgICAgICJ1c2UgbWJzY3NwbiBpZiB5b3UgY2FyZSBhYm91dCBpbnRlcm5hdGlvbmFsaXphdGlvbiIpLCBcCisgICAgIHN0cmNzcG4gKHMsIGEpKQorI2VuZGlmCisKKy8qIEZpbmQgdGhlIGZpcnN0IG9jY3VycmVuY2UgaW4gUyBvZiBhbnkgY2hhcmFjdGVyIGluIEFDQ0VQVC4gICovCisjaWYgQEdOVUxJQl9TVFJQQlJLQAorIyBpZiAhIEBIQVZFX1NUUlBCUktACitleHRlcm4gY2hhciAqc3RycGJyayAoY2hhciBjb25zdCAqX19zLCBjaGFyIGNvbnN0ICpfX2FjY2VwdCk7CisjIGVuZGlmCisjIGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKy8qIHN0cnBicmsoKSBhc3N1bWVzIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgYSBsaXN0IG9mIHNpbmdsZS1ieXRlIGNoYXJhY3RlcnMuCisgICBFdmVuIGluIHRoaXMgc2ltcGxlIGNhc2UsIGl0IGRvZXMgbm90IHdvcmsgd2l0aCBtdWx0aWJ5dGUgc3RyaW5ncyBpZiB0aGUKKyAgIGxvY2FsZSBlbmNvZGluZyBpcyBHQjE4MDMwIGFuZCBvbmUgb2YgdGhlIGNoYXJhY3RlcnMgdG8gYmUgc2VhcmNoZWQgaXMgYQorICAgZGlnaXQuICAqLworIyAgdW5kZWYgc3RycGJyaworIyAgZGVmaW5lIHN0cnBicmsocyxhKSBcCisgICAgIChHTF9MSU5LX1dBUk5JTkcgKCJzdHJwYnJrIGNhbm5vdCB3b3JrIGNvcnJlY3RseSBvbiBjaGFyYWN0ZXIgc3RyaW5ncyAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgImluIG11bHRpYnl0ZSBsb2NhbGVzIC0gIiBcCisgICAgICAgICAgICAgICAgICAgICAgICJ1c2UgbWJzcGJyayBpZiB5b3UgY2FyZSBhYm91dCBpbnRlcm5hdGlvbmFsaXphdGlvbiIpLCBcCisgICAgICBzdHJwYnJrIChzLCBhKSkKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgc3RycGJyaworIyBkZWZpbmUgc3RycGJyayhzLGEpIFwKKyAgICAoR0xfTElOS19XQVJOSU5HICgic3RycGJyayBpcyB1bnBvcnRhYmxlIC0gIiBcCisgICAgICAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHN0cnBicmsgZm9yIHBvcnRhYmlsaXR5IiksIFwKKyAgICAgc3RycGJyayAocywgYSkpCisjZW5kaWYKKworI2lmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKy8qIHN0cnNwbigpIGFzc3VtZXMgdGhlIHNlY29uZCBhcmd1bWVudCBpcyBhIGxpc3Qgb2Ygc2luZ2xlLWJ5dGUgY2hhcmFjdGVycy4KKyAgIEV2ZW4gaW4gdGhpcyBzaW1wbGUgY2FzZSwgaXQgY2Fubm90IHdvcmsgd2l0aCBtdWx0aWJ5dGUgc3RyaW5ncy4gICovCisjIHVuZGVmIHN0cnNwbgorIyBkZWZpbmUgc3Ryc3BuKHMsYSkgXAorICAgIChHTF9MSU5LX1dBUk5JTkcgKCJzdHJzcG4gY2Fubm90IHdvcmsgY29ycmVjdGx5IG9uIGNoYXJhY3RlciBzdHJpbmdzICIgXAorICAgICAgICAgICAgICAgICAgICAgICJpbiBtdWx0aWJ5dGUgbG9jYWxlcyAtICIgXAorICAgICAgICAgICAgICAgICAgICAgICJ1c2UgbWJzc3BuIGlmIHlvdSBjYXJlIGFib3V0IGludGVybmF0aW9uYWxpemF0aW9uIiksIFwKKyAgICAgc3Ryc3BuIChzLCBhKSkKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworLyogc3RycmNocigpIGRvZXMgbm90IHdvcmsgd2l0aCBtdWx0aWJ5dGUgc3RyaW5ncyBpZiB0aGUgbG9jYWxlIGVuY29kaW5nIGlzCisgICBHQjE4MDMwIGFuZCB0aGUgY2hhcmFjdGVyIHRvIGJlIHNlYXJjaGVkIGlzIGEgZGlnaXQuICAqLworIyB1bmRlZiBzdHJyY2hyCisjIGRlZmluZSBzdHJyY2hyKHMsYykgXAorICAgIChHTF9MSU5LX1dBUk5JTkcgKCJzdHJyY2hyIGNhbm5vdCB3b3JrIGNvcnJlY3RseSBvbiBjaGFyYWN0ZXIgc3RyaW5ncyAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAiaW4gc29tZSBtdWx0aWJ5dGUgbG9jYWxlcyAtICIgXAorICAgICAgICAgICAgICAgICAgICAgICJ1c2UgbWJzcmNociBpZiB5b3UgY2FyZSBhYm91dCBpbnRlcm5hdGlvbmFsaXphdGlvbiIpLCBcCisgICAgIHN0cnJjaHIgKHMsIGMpKQorI2VuZGlmCisKKy8qIFNlYXJjaCB0aGUgbmV4dCBkZWxpbWl0ZXIgKGNoYXIgbGlzdGVkIGluIERFTElNKSBzdGFydGluZyBhdCAqU1RSSU5HUC4KKyAgIElmIG9uZSBpcyBmb3VuZCwgb3ZlcndyaXRlIGl0IHdpdGggYSBOVUwsIGFuZCBhZHZhbmNlICpTVFJJTkdQCisgICB0byBwb2ludCB0byB0aGUgbmV4dCBjaGFyIGFmdGVyIGl0LiAgT3RoZXJ3aXNlLCBzZXQgKlNUUklOR1AgdG8gTlVMTC4KKyAgIElmICpTVFJJTkdQIHdhcyBhbHJlYWR5IE5VTEwsIG5vdGhpbmcgaGFwcGVucy4KKyAgIFJldHVybiB0aGUgb2xkIHZhbHVlIG9mICpTVFJJTkdQLgorCisgICBUaGlzIGlzIGEgdmFyaWFudCBvZiBzdHJ0b2soKSB0aGF0IGlzIG11bHRpdGhyZWFkLXNhZmUgYW5kIHN1cHBvcnRzCisgICBlbXB0eSBmaWVsZHMuCisKKyAgIENhdmVhdDogSXQgbW9kaWZpZXMgdGhlIG9yaWdpbmFsIHN0cmluZy4KKyAgIENhdmVhdDogVGhlc2UgZnVuY3Rpb25zIGNhbm5vdCBiZSB1c2VkIG9uIGNvbnN0YW50IHN0cmluZ3MuCisgICBDYXZlYXQ6IFRoZSBpZGVudGl0eSBvZiB0aGUgZGVsaW1pdGluZyBjaGFyYWN0ZXIgaXMgbG9zdC4KKyAgIENhdmVhdDogSXQgZG9lc24ndCB3b3JrIHdpdGggbXVsdGlieXRlIHN0cmluZ3MgdW5sZXNzIGFsbCBvZiB0aGUgZGVsaW1pdGVyCisgICAgICAgICAgIGNoYXJhY3RlcnMgYXJlIEFTQ0lJIGNoYXJhY3RlcnMgPCAweDMwLgorCisgICBTZWUgYWxzbyBzdHJ0b2tfcigpLiAgKi8KKyNpZiBAR05VTElCX1NUUlNFUEAKKyMgaWYgISBASEFWRV9TVFJTRVBACitleHRlcm4gY2hhciAqc3Ryc2VwIChjaGFyICoqcmVzdHJpY3QgX19zdHJpbmdwLCBjaGFyIGNvbnN0ICpyZXN0cmljdCBfX2RlbGltKTsKKyMgZW5kaWYKKyMgaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyAgdW5kZWYgc3Ryc2VwCisjICBkZWZpbmUgc3Ryc2VwKHMsZCkgXAorICAgICAoR0xfTElOS19XQVJOSU5HICgic3Ryc2VwIGNhbm5vdCB3b3JrIGNvcnJlY3RseSBvbiBjaGFyYWN0ZXIgc3RyaW5ncyAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgImluIG11bHRpYnl0ZSBsb2NhbGVzIC0gIiBcCisgICAgICAgICAgICAgICAgICAgICAgICJ1c2UgbWJzc2VwIGlmIHlvdSBjYXJlIGFib3V0IGludGVybmF0aW9uYWxpemF0aW9uIiksIFwKKyAgICAgIHN0cnNlcCAocywgZCkpCisjIGVuZGlmCisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHN0cnNlcAorIyBkZWZpbmUgc3Ryc2VwKHMsZCkgXAorICAgIChHTF9MSU5LX1dBUk5JTkcgKCJzdHJzZXAgaXMgdW5wb3J0YWJsZSAtICIgXAorICAgICAgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBzdHJzZXAgZm9yIHBvcnRhYmlsaXR5IiksIFwKKyAgICAgc3Ryc2VwIChzLCBkKSkKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworLyogc3Ryc3RyKCkgZG9lcyBub3Qgd29yayB3aXRoIG11bHRpYnl0ZSBzdHJpbmdzIGlmIHRoZSBsb2NhbGUgZW5jb2RpbmcgaXMKKyAgIGRpZmZlcmVudCBmcm9tIFVURi04OgorICAgUE9TSVggc2F5cyB0aGF0IGl0IG9wZXJhdGVzIG9uICJzdHJpbmdzIiwgYW5kICJzdHJpbmciIGluIFBPU0lYIGlzIGRlZmluZWQKKyAgIGFzIGEgc2VxdWVuY2Ugb2YgYnl0ZXMsIG5vdCBvZiBjaGFyYWN0ZXJzLiAgKi8KKyMgdW5kZWYgc3Ryc3RyCisjIGRlZmluZSBzdHJzdHIoYSxiKSBcCisgICAgKEdMX0xJTktfV0FSTklORyAoInN0cnN0ciBjYW5ub3Qgd29yayBjb3JyZWN0bHkgb24gY2hhcmFjdGVyIHN0cmluZ3MgIiBcCisgICAgICAgICAgICAgICAgICAgICAgImluIG1vc3QgbXVsdGlieXRlIGxvY2FsZXMgLSAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAidXNlIG1ic3N0ciBpZiB5b3UgY2FyZSBhYm91dCBpbnRlcm5hdGlvbmFsaXphdGlvbiIpLCBcCisgICAgIHN0cnN0ciAoYSwgYikpCisjZW5kaWYKKworLyogRmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBORUVETEUgaW4gSEFZU1RBQ0ssIHVzaW5nIGNhc2UtaW5zZW5zaXRpdmUKKyAgIGNvbXBhcmlzb24uICAqLworI2lmICEgQEhBVkVfU1RSQ0FTRVNUUkAKK2V4dGVybiBjaGFyICpzdHJjYXNlc3RyIChjb25zdCBjaGFyICpoYXlzdGFjaywgY29uc3QgY2hhciAqbmVlZGxlKTsKKyNlbmRpZgorI2lmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKy8qIHN0cmNhc2VzdHIoKSBkb2VzIG5vdCB3b3JrIHdpdGggbXVsdGlieXRlIHN0cmluZ3M6CisgICBJdCBpcyBhIGdsaWJjIGV4dGVuc2lvbiwgYW5kIGdsaWJjIGltcGxlbWVudHMgaXQgb25seSBmb3IgdW5pYnl0ZQorICAgbG9jYWxlcy4gICovCisjIHVuZGVmIHN0cmNhc2VzdHIKKyMgZGVmaW5lIHN0cmNhc2VzdHIoYSxiKSBcCisgICAgKEdMX0xJTktfV0FSTklORyAoInN0cmNhc2VzdHIgZG9lcyB3b3JrIGNvcnJlY3RseSBvbiBjaGFyYWN0ZXIgc3RyaW5ncyAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAiaW4gbXVsdGlieXRlIGxvY2FsZXMgLSAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAidXNlIG1ic2Nhc2VzdHIgaWYgeW91IGNhcmUgYWJvdXQgIiBcCisgICAgICAgICAgICAgICAgICAgICAgImludGVybmF0aW9uYWxpemF0aW9uLCBvciB1c2UgYy1zdHJjYXNlc3RyIGlmIHlvdSB3YW50ICIgXAorICAgICAgICAgICAgICAgICAgICAgICJhIGxvY2FsZSBpbmRlcGVuZGVudCBmdW5jdGlvbiIpLCBcCisgICAgIHN0cmNhc2VzdHIgKGEsIGIpKQorI2VuZGlmCisKKy8qIFBhcnNlIFMgaW50byB0b2tlbnMgc2VwYXJhdGVkIGJ5IGNoYXJhY3RlcnMgaW4gREVMSU0uCisgICBJZiBTIGlzIE5VTEwsIHRoZSBzYXZlZCBwb2ludGVyIGluIFNBVkVfUFRSIGlzIHVzZWQgYXMKKyAgIHRoZSBuZXh0IHN0YXJ0aW5nIHBvaW50LiAgRm9yIGV4YW1wbGU6CisJY2hhciBzW10gPSAiLWFiYy09LWRlZiI7CisJY2hhciAqc3A7CisJeCA9IHN0cnRva19yKHMsICItIiwgJnNwKTsJLy8geCA9ICJhYmMiLCBzcCA9ICI9LWRlZiIKKwl4ID0gc3RydG9rX3IoTlVMTCwgIi09IiwgJnNwKTsJLy8geCA9ICJkZWYiLCBzcCA9IE5VTEwKKwl4ID0gc3RydG9rX3IoTlVMTCwgIj0iLCAmc3ApOwkvLyB4ID0gTlVMTAorCQkvLyBzID0gImFiY1wwLWRlZlwwIgorCisgICBUaGlzIGlzIGEgdmFyaWFudCBvZiBzdHJ0b2soKSB0aGF0IGlzIG11bHRpdGhyZWFkLXNhZmUuCisKKyAgIEZvciB0aGUgUE9TSVggZG9jdW1lbnRhdGlvbiBmb3IgdGhpcyBmdW5jdGlvbiwgc2VlOgorICAgaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL3N1c3YzeHNoL3N0cnRvay5odG1sCisKKyAgIENhdmVhdDogSXQgbW9kaWZpZXMgdGhlIG9yaWdpbmFsIHN0cmluZy4KKyAgIENhdmVhdDogVGhlc2UgZnVuY3Rpb25zIGNhbm5vdCBiZSB1c2VkIG9uIGNvbnN0YW50IHN0cmluZ3MuCisgICBDYXZlYXQ6IFRoZSBpZGVudGl0eSBvZiB0aGUgZGVsaW1pdGluZyBjaGFyYWN0ZXIgaXMgbG9zdC4KKyAgIENhdmVhdDogSXQgZG9lc24ndCB3b3JrIHdpdGggbXVsdGlieXRlIHN0cmluZ3MgdW5sZXNzIGFsbCBvZiB0aGUgZGVsaW1pdGVyCisgICAgICAgICAgIGNoYXJhY3RlcnMgYXJlIEFTQ0lJIGNoYXJhY3RlcnMgPCAweDMwLgorCisgICBTZWUgYWxzbyBzdHJzZXAoKS4gICovCisjaWYgQEdOVUxJQl9TVFJUT0tfUkAKKyMgaWYgISBASEFWRV9ERUNMX1NUUlRPS19SQAorZXh0ZXJuIGNoYXIgKnN0cnRva19yIChjaGFyICpyZXN0cmljdCBzLCBjaGFyIGNvbnN0ICpyZXN0cmljdCBkZWxpbSwKKwkJICAgICAgIGNoYXIgKipyZXN0cmljdCBzYXZlX3B0cik7CisjIGVuZGlmCisjIGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgIHVuZGVmIHN0cnRva19yCisjICBkZWZpbmUgc3RydG9rX3IocyxkLHApIFwKKyAgICAgKEdMX0xJTktfV0FSTklORyAoInN0cnRva19yIGNhbm5vdCB3b3JrIGNvcnJlY3RseSBvbiBjaGFyYWN0ZXIgc3RyaW5ncyAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgImluIG11bHRpYnl0ZSBsb2NhbGVzIC0gIiBcCisgICAgICAgICAgICAgICAgICAgICAgICJ1c2UgbWJzdG9rX3IgaWYgeW91IGNhcmUgYWJvdXQgaW50ZXJuYXRpb25hbGl6YXRpb24iKSwgXAorICAgICAgc3RydG9rX3IgKHMsIGQsIHApKQorIyBlbmRpZgorI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzdHJ0b2tfcgorIyBkZWZpbmUgc3RydG9rX3IocyxkLHApIFwKKyAgICAoR0xfTElOS19XQVJOSU5HICgic3RydG9rX3IgaXMgdW5wb3J0YWJsZSAtICIgXAorICAgICAgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBzdHJ0b2tfciBmb3IgcG9ydGFiaWxpdHkiKSwgXAorICAgICBzdHJ0b2tfciAocywgZCwgcCkpCisjZW5kaWYKKworCisvKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgbm90IHNwZWNpZmllZCBieSBQT1NJWC4gIFRoZXkgYXJlIGdudWxpYgorICAgZXh0ZW5zaW9ucy4gICovCisKKyNpZiBAR05VTElCX01CU0xFTkAKKy8qIFJldHVybiB0aGUgbnVtYmVyIG9mIG11bHRpYnl0ZSBjaGFyYWN0ZXJzIGluIHRoZSBjaGFyYWN0ZXIgc3RyaW5nIFNUUklORy4KKyAgIFRoaXMgY29uc2lkZXJzIG11bHRpYnl0ZSBjaGFyYWN0ZXJzLCB1bmxpa2Ugc3RybGVuLCB3aGljaCBjb3VudHMgYnl0ZXMuICAqLworZXh0ZXJuIHNpemVfdCBtYnNsZW4gKGNvbnN0IGNoYXIgKnN0cmluZyk7CisjZW5kaWYKKworI2lmIEBHTlVMSUJfTUJTQ0hSQAorLyogTG9jYXRlIHRoZSBmaXJzdCBzaW5nbGUtYnl0ZSBjaGFyYWN0ZXIgQyBpbiB0aGUgY2hhcmFjdGVyIHN0cmluZyBTVFJJTkcsCisgICBhbmQgcmV0dXJuIGEgcG9pbnRlciB0byBpdC4gIFJldHVybiBOVUxMIGlmIEMgaXMgbm90IGZvdW5kIGluIFNUUklORy4KKyAgIFVubGlrZSBzdHJjaHIoKSwgdGhpcyBmdW5jdGlvbiB3b3JrcyBjb3JyZWN0bHkgaW4gbXVsdGlieXRlIGxvY2FsZXMgd2l0aAorICAgZW5jb2RpbmdzIHN1Y2ggYXMgR0IxODAzMC4gICovCisjIGRlZmluZSBtYnNjaHIgcnBsX21ic2NociAvKiBhdm9pZCBjb2xsaXNpb24gd2l0aCBIUC1VWCBmdW5jdGlvbiAqLworZXh0ZXJuIGNoYXIgKiBtYnNjaHIgKGNvbnN0IGNoYXIgKnN0cmluZywgaW50IGMpOworI2VuZGlmCisKKyNpZiBAR05VTElCX01CU1JDSFJACisvKiBMb2NhdGUgdGhlIGxhc3Qgc2luZ2xlLWJ5dGUgY2hhcmFjdGVyIEMgaW4gdGhlIGNoYXJhY3RlciBzdHJpbmcgU1RSSU5HLAorICAgYW5kIHJldHVybiBhIHBvaW50ZXIgdG8gaXQuICBSZXR1cm4gTlVMTCBpZiBDIGlzIG5vdCBmb3VuZCBpbiBTVFJJTkcuCisgICBVbmxpa2Ugc3RycmNocigpLCB0aGlzIGZ1bmN0aW9uIHdvcmtzIGNvcnJlY3RseSBpbiBtdWx0aWJ5dGUgbG9jYWxlcyB3aXRoCisgICBlbmNvZGluZ3Mgc3VjaCBhcyBHQjE4MDMwLiAgKi8KKyMgZGVmaW5lIG1ic3JjaHIgcnBsX21ic3JjaHIgLyogYXZvaWQgY29sbGlzaW9uIHdpdGggSFAtVVggZnVuY3Rpb24gKi8KK2V4dGVybiBjaGFyICogbWJzcmNociAoY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgYyk7CisjZW5kaWYKKworI2lmIEBHTlVMSUJfTUJTU1RSQAorLyogRmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgY2hhcmFjdGVyIHN0cmluZyBORUVETEUgaW4gdGhlIGNoYXJhY3RlcgorICAgc3RyaW5nIEhBWVNUQUNLLiAgUmV0dXJuIE5VTEwgaWYgTkVFRExFIGlzIG5vdCBmb3VuZCBpbiBIQVlTVEFDSy4KKyAgIFVubGlrZSBzdHJzdHIoKSwgdGhpcyBmdW5jdGlvbiB3b3JrcyBjb3JyZWN0bHkgaW4gbXVsdGlieXRlIGxvY2FsZXMgd2l0aAorICAgZW5jb2RpbmdzIGRpZmZlcmVudCBmcm9tIFVURi04LiAgKi8KK2V4dGVybiBjaGFyICogbWJzc3RyIChjb25zdCBjaGFyICpoYXlzdGFjaywgY29uc3QgY2hhciAqbmVlZGxlKTsKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9NQlNDQVNFQ01QQAorLyogQ29tcGFyZSB0aGUgY2hhcmFjdGVyIHN0cmluZ3MgUzEgYW5kIFMyLCBpZ25vcmluZyBjYXNlLCByZXR1cm5pbmcgbGVzcyB0aGFuLAorICAgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIHplcm8gaWYgUzEgaXMgbGV4aWNvZ3JhcGhpY2FsbHkgbGVzcyB0aGFuLCBlcXVhbCB0bworICAgb3IgZ3JlYXRlciB0aGFuIFMyLgorICAgTm90ZTogVGhpcyBmdW5jdGlvbiBtYXksIGluIG11bHRpYnl0ZSBsb2NhbGVzLCByZXR1cm4gMCBmb3Igc3RyaW5ncyBvZgorICAgZGlmZmVyZW50IGxlbmd0aHMhCisgICBVbmxpa2Ugc3RyY2FzZWNtcCgpLCB0aGlzIGZ1bmN0aW9uIHdvcmtzIGNvcnJlY3RseSBpbiBtdWx0aWJ5dGUgbG9jYWxlcy4gICovCitleHRlcm4gaW50IG1ic2Nhc2VjbXAgKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMik7CisjZW5kaWYKKworI2lmIEBHTlVMSUJfTUJTTkNBU0VDTVBACisvKiBDb21wYXJlIHRoZSBpbml0aWFsIHNlZ21lbnQgb2YgdGhlIGNoYXJhY3RlciBzdHJpbmcgUzEgY29uc2lzdGluZyBvZiBhdCBtb3N0CisgICBOIGNoYXJhY3RlcnMgd2l0aCB0aGUgaW5pdGlhbCBzZWdtZW50IG9mIHRoZSBjaGFyYWN0ZXIgc3RyaW5nIFMyIGNvbnNpc3RpbmcKKyAgIG9mIGF0IG1vc3QgTiBjaGFyYWN0ZXJzLCBpZ25vcmluZyBjYXNlLCByZXR1cm5pbmcgbGVzcyB0aGFuLCBlcXVhbCB0byBvcgorICAgZ3JlYXRlciB0aGFuIHplcm8gaWYgdGhlIGluaXRpYWwgc2VnbWVudCBvZiBTMSBpcyBsZXhpY29ncmFwaGljYWxseSBsZXNzCisgICB0aGFuLCBlcXVhbCB0byBvciBncmVhdGVyIHRoYW4gdGhlIGluaXRpYWwgc2VnbWVudCBvZiBTMi4KKyAgIE5vdGU6IFRoaXMgZnVuY3Rpb24gbWF5LCBpbiBtdWx0aWJ5dGUgbG9jYWxlcywgcmV0dXJuIDAgZm9yIGluaXRpYWwgc2VnbWVudHMKKyAgIG9mIGRpZmZlcmVudCBsZW5ndGhzIQorICAgVW5saWtlIHN0cm5jYXNlY21wKCksIHRoaXMgZnVuY3Rpb24gd29ya3MgY29ycmVjdGx5IGluIG11bHRpYnl0ZSBsb2NhbGVzLgorICAgQnV0IGJld2FyZSB0aGF0IE4gaXMgbm90IGEgYnl0ZSBjb3VudCBidXQgYSBjaGFyYWN0ZXIgY291bnQhICAqLworZXh0ZXJuIGludCBtYnNuY2FzZWNtcCAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBzaXplX3Qgbik7CisjZW5kaWYKKworI2lmIEBHTlVMSUJfTUJTUENBU0VDTVBACisvKiBDb21wYXJlIHRoZSBpbml0aWFsIHNlZ21lbnQgb2YgdGhlIGNoYXJhY3RlciBzdHJpbmcgU1RSSU5HIGNvbnNpc3Rpbmcgb2YKKyAgIGF0IG1vc3QgbWJzbGVuIChQUkVGSVgpIGNoYXJhY3RlcnMgd2l0aCB0aGUgY2hhcmFjdGVyIHN0cmluZyBQUkVGSVgsCisgICBpZ25vcmluZyBjYXNlLCByZXR1cm5pbmcgbGVzcyB0aGFuLCBlcXVhbCB0byBvciBncmVhdGVyIHRoYW4gemVybyBpZiB0aGlzCisgICBpbml0aWFsIHNlZ21lbnQgaXMgbGV4aWNvZ3JhcGhpY2FsbHkgbGVzcyB0aGFuLCBlcXVhbCB0byBvciBncmVhdGVyIHRoYW4KKyAgIFBSRUZJWC4KKyAgIE5vdGU6IFRoaXMgZnVuY3Rpb24gbWF5LCBpbiBtdWx0aWJ5dGUgbG9jYWxlcywgcmV0dXJuIDAgaWYgU1RSSU5HIGlzIG9mCisgICBzbWFsbGVyIGxlbmd0aCB0aGFuIFBSRUZJWCEKKyAgIFVubGlrZSBzdHJuY2FzZWNtcCgpLCB0aGlzIGZ1bmN0aW9uIHdvcmtzIGNvcnJlY3RseSBpbiBtdWx0aWJ5dGUKKyAgIGxvY2FsZXMuICAqLworZXh0ZXJuIGNoYXIgKiBtYnNwY2FzZWNtcCAoY29uc3QgY2hhciAqc3RyaW5nLCBjb25zdCBjaGFyICpwcmVmaXgpOworI2VuZGlmCisKKyNpZiBAR05VTElCX01CU0NBU0VTVFJACisvKiBGaW5kIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZSBjaGFyYWN0ZXIgc3RyaW5nIE5FRURMRSBpbiB0aGUgY2hhcmFjdGVyCisgICBzdHJpbmcgSEFZU1RBQ0ssIHVzaW5nIGNhc2UtaW5zZW5zaXRpdmUgY29tcGFyaXNvbi4KKyAgIE5vdGU6IFRoaXMgZnVuY3Rpb24gbWF5LCBpbiBtdWx0aWJ5dGUgbG9jYWxlcywgcmV0dXJuIHN1Y2Nlc3MgZXZlbiBpZgorICAgc3RybGVuIChoYXlzdGFjaykgPCBzdHJsZW4gKG5lZWRsZSkgIQorICAgVW5saWtlIHN0cmNhc2VzdHIoKSwgdGhpcyBmdW5jdGlvbiB3b3JrcyBjb3JyZWN0bHkgaW4gbXVsdGlieXRlIGxvY2FsZXMuICAqLworZXh0ZXJuIGNoYXIgKiBtYnNjYXNlc3RyIChjb25zdCBjaGFyICpoYXlzdGFjaywgY29uc3QgY2hhciAqbmVlZGxlKTsKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9NQlNDU1BOQAorLyogRmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBpbiB0aGUgY2hhcmFjdGVyIHN0cmluZyBTVFJJTkcgb2YgYW55IGNoYXJhY3RlcgorICAgaW4gdGhlIGNoYXJhY3RlciBzdHJpbmcgQUNDRVBULiAgUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgZnJvbSB0aGUKKyAgIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nIHRvIHRoaXMgb2NjdXJyZW5jZSwgb3IgdG8gdGhlIGVuZCBvZiB0aGUgc3RyaW5nCisgICBpZiBub25lIGV4aXN0cy4KKyAgIFVubGlrZSBzdHJjc3BuKCksIHRoaXMgZnVuY3Rpb24gd29ya3MgY29ycmVjdGx5IGluIG11bHRpYnl0ZSBsb2NhbGVzLiAgKi8KK2V4dGVybiBzaXplX3QgbWJzY3NwbiAoY29uc3QgY2hhciAqc3RyaW5nLCBjb25zdCBjaGFyICphY2NlcHQpOworI2VuZGlmCisKKyNpZiBAR05VTElCX01CU1BCUktACisvKiBGaW5kIHRoZSBmaXJzdCBvY2N1cnJlbmNlIGluIHRoZSBjaGFyYWN0ZXIgc3RyaW5nIFNUUklORyBvZiBhbnkgY2hhcmFjdGVyCisgICBpbiB0aGUgY2hhcmFjdGVyIHN0cmluZyBBQ0NFUFQuICBSZXR1cm4gdGhlIHBvaW50ZXIgdG8gaXQsIG9yIE5VTEwgaWYgbm9uZQorICAgZXhpc3RzLgorICAgVW5saWtlIHN0cnBicmsoKSwgdGhpcyBmdW5jdGlvbiB3b3JrcyBjb3JyZWN0bHkgaW4gbXVsdGlieXRlIGxvY2FsZXMuICAqLworIyBkZWZpbmUgbWJzcGJyayBycGxfbWJzcGJyayAvKiBhdm9pZCBjb2xsaXNpb24gd2l0aCBIUC1VWCBmdW5jdGlvbiAqLworZXh0ZXJuIGNoYXIgKiBtYnNwYnJrIChjb25zdCBjaGFyICpzdHJpbmcsIGNvbnN0IGNoYXIgKmFjY2VwdCk7CisjZW5kaWYKKworI2lmIEBHTlVMSUJfTUJTU1BOQAorLyogRmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBpbiB0aGUgY2hhcmFjdGVyIHN0cmluZyBTVFJJTkcgb2YgYW55IGNoYXJhY3RlcgorICAgbm90IGluIHRoZSBjaGFyYWN0ZXIgc3RyaW5nIFJFSkVDVC4gIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGZyb20gdGhlCisgICBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZyB0byB0aGlzIG9jY3VycmVuY2UsIG9yIHRvIHRoZSBlbmQgb2YgdGhlIHN0cmluZworICAgaWYgbm9uZSBleGlzdHMuCisgICBVbmxpa2Ugc3Ryc3BuKCksIHRoaXMgZnVuY3Rpb24gd29ya3MgY29ycmVjdGx5IGluIG11bHRpYnl0ZSBsb2NhbGVzLiAgKi8KK2V4dGVybiBzaXplX3QgbWJzc3BuIChjb25zdCBjaGFyICpzdHJpbmcsIGNvbnN0IGNoYXIgKnJlamVjdCk7CisjZW5kaWYKKworI2lmIEBHTlVMSUJfTUJTU0VQQAorLyogU2VhcmNoIHRoZSBuZXh0IGRlbGltaXRlciAobXVsdGlieXRlIGNoYXJhY3RlciBsaXN0ZWQgaW4gdGhlIGNoYXJhY3RlcgorICAgc3RyaW5nIERFTElNKSBzdGFydGluZyBhdCB0aGUgY2hhcmFjdGVyIHN0cmluZyAqU1RSSU5HUC4KKyAgIElmIG9uZSBpcyBmb3VuZCwgb3ZlcndyaXRlIGl0IHdpdGggYSBOVUwsIGFuZCBhZHZhbmNlICpTVFJJTkdQIHRvIHBvaW50CisgICB0byB0aGUgbmV4dCBtdWx0aWJ5dGUgY2hhcmFjdGVyIGFmdGVyIGl0LiAgT3RoZXJ3aXNlLCBzZXQgKlNUUklOR1AgdG8gTlVMTC4KKyAgIElmICpTVFJJTkdQIHdhcyBhbHJlYWR5IE5VTEwsIG5vdGhpbmcgaGFwcGVucy4KKyAgIFJldHVybiB0aGUgb2xkIHZhbHVlIG9mICpTVFJJTkdQLgorCisgICBUaGlzIGlzIGEgdmFyaWFudCBvZiBtYnN0b2tfcigpIHRoYXQgc3VwcG9ydHMgZW1wdHkgZmllbGRzLgorCisgICBDYXZlYXQ6IEl0IG1vZGlmaWVzIHRoZSBvcmlnaW5hbCBzdHJpbmcuCisgICBDYXZlYXQ6IFRoZXNlIGZ1bmN0aW9ucyBjYW5ub3QgYmUgdXNlZCBvbiBjb25zdGFudCBzdHJpbmdzLgorICAgQ2F2ZWF0OiBUaGUgaWRlbnRpdHkgb2YgdGhlIGRlbGltaXRpbmcgY2hhcmFjdGVyIGlzIGxvc3QuCisKKyAgIFNlZSBhbHNvIG1ic3Rva19yKCkuICAqLworZXh0ZXJuIGNoYXIgKiBtYnNzZXAgKGNoYXIgKipzdHJpbmdwLCBjb25zdCBjaGFyICpkZWxpbSk7CisjZW5kaWYKKworI2lmIEBHTlVMSUJfTUJTVE9LX1JACisvKiBQYXJzZSB0aGUgY2hhcmFjdGVyIHN0cmluZyBTVFJJTkcgaW50byB0b2tlbnMgc2VwYXJhdGVkIGJ5IGNoYXJhY3RlcnMgaW4KKyAgIHRoZSBjaGFyYWN0ZXIgc3RyaW5nIERFTElNLgorICAgSWYgU1RSSU5HIGlzIE5VTEwsIHRoZSBzYXZlZCBwb2ludGVyIGluIFNBVkVfUFRSIGlzIHVzZWQgYXMKKyAgIHRoZSBuZXh0IHN0YXJ0aW5nIHBvaW50LiAgRm9yIGV4YW1wbGU6CisJY2hhciBzW10gPSAiLWFiYy09LWRlZiI7CisJY2hhciAqc3A7CisJeCA9IG1ic3Rva19yKHMsICItIiwgJnNwKTsJLy8geCA9ICJhYmMiLCBzcCA9ICI9LWRlZiIKKwl4ID0gbWJzdG9rX3IoTlVMTCwgIi09IiwgJnNwKTsJLy8geCA9ICJkZWYiLCBzcCA9IE5VTEwKKwl4ID0gbWJzdG9rX3IoTlVMTCwgIj0iLCAmc3ApOwkvLyB4ID0gTlVMTAorCQkvLyBzID0gImFiY1wwLWRlZlwwIgorCisgICBDYXZlYXQ6IEl0IG1vZGlmaWVzIHRoZSBvcmlnaW5hbCBzdHJpbmcuCisgICBDYXZlYXQ6IFRoZXNlIGZ1bmN0aW9ucyBjYW5ub3QgYmUgdXNlZCBvbiBjb25zdGFudCBzdHJpbmdzLgorICAgQ2F2ZWF0OiBUaGUgaWRlbnRpdHkgb2YgdGhlIGRlbGltaXRpbmcgY2hhcmFjdGVyIGlzIGxvc3QuCisKKyAgIFNlZSBhbHNvIG1ic3NlcCgpLiAgKi8KK2V4dGVybiBjaGFyICogbWJzdG9rX3IgKGNoYXIgKnN0cmluZywgY29uc3QgY2hhciAqZGVsaW0sIGNoYXIgKipzYXZlX3B0cik7CisjZW5kaWYKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWIvc3RyaXBzbGFzaC5jIGIvcGFydGVkLTEuOC43L2xpYi9zdHJpcHNsYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQyZDQ5NwotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWIvc3RyaXBzbGFzaC5jCkBAIC0wLDAgKzEsNDUgQEAKKy8qIHN0cmlwc2xhc2guYyAtLSByZW1vdmUgcmVkdW5kYW50IHRyYWlsaW5nIHNsYXNoZXMgZnJvbSBhIGZpbGUgbmFtZQorCisgICBDb3B5cmlnaHQgKEMpIDE5OTAsIDIwMDEsIDIwMDMtMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworI2luY2x1ZGUgImRpcm5hbWUuaCIKKworLyogUmVtb3ZlIHRyYWlsaW5nIHNsYXNoZXMgZnJvbSBGSUxFLiAgUmV0dXJuIHRydWUgaWYgYSB0cmFpbGluZyBzbGFzaAorICAgd2FzIHJlbW92ZWQuICBUaGlzIGlzIHVzZWZ1bCB3aGVuIHVzaW5nIGZpbGUgbmFtZSBjb21wbGV0aW9uIGZyb20gYQorICAgc2hlbGwgdGhhdCBhZGRzIGEgIi8iIGFmdGVyIGRpcmVjdG9yeSBuYW1lcyAoc3VjaCBhcyB0Y3NoIGFuZAorICAgYmFzaCksIGJlY2F1c2Ugb24gc3ltbGlua3MgdG8gZGlyZWN0b3JpZXMsIHNldmVyYWwgc3lzdGVtIGNhbGxzCisgICBoYXZlIGRpZmZlcmVudCBzZW1hbnRpY3MgYWNjb3JkaW5nIHRvIHdoZXRoZXIgYSB0cmFpbGluZyBzbGFzaCBpcworICAgcHJlc2VudC4gICovCisKK2Jvb2wKK3N0cmlwX3RyYWlsaW5nX3NsYXNoZXMgKGNoYXIgKmZpbGUpCit7CisgIGNoYXIgKmJhc2UgPSBsYXN0X2NvbXBvbmVudCAoZmlsZSk7CisgIGNoYXIgKmJhc2VfbGltOworICBib29sIGhhZF9zbGFzaDsKKworICAvKiBsYXN0X2NvbXBvbmVudCByZXR1cm5zICIiIGZvciBmaWxlIHN5c3RlbSByb290cywgYnV0IHdlIG5lZWQgdG8gdHVybgorICAgICBgLy8vJyBpbnRvIGAvJy4gICovCisgIGlmICghICpiYXNlKQorICAgIGJhc2UgPSBmaWxlOworICBiYXNlX2xpbSA9IGJhc2UgKyBiYXNlX2xlbiAoYmFzZSk7CisgIGhhZF9zbGFzaCA9ICgqYmFzZV9saW0gIT0gJ1wwJyk7CisgICpiYXNlX2xpbSA9ICdcMCc7CisgIHJldHVybiBoYWRfc2xhc2g7Cit9CmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGliL3N0cm5kdXAuYyBiL3BhcnRlZC0xLjguNy9saWIvc3RybmR1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMWIwZWEKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGliL3N0cm5kdXAuYwpAQCAtMCwwICsxLDM3IEBACisvKiBBIHJlcGxhY2VtZW50IGZ1bmN0aW9uLCBmb3Igc3lzdGVtcyB0aGF0IGxhY2sgc3RybmR1cC4KKworICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA1LCAyMDA2LCAyMDA3CisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisKK2NoYXIgKgorc3RybmR1cCAoY2hhciBjb25zdCAqcywgc2l6ZV90IG4pCit7CisgIHNpemVfdCBsZW4gPSBzdHJubGVuIChzLCBuKTsKKyAgY2hhciAqbmV3ID0gbWFsbG9jIChsZW4gKyAxKTsKKworICBpZiAobmV3ID09IE5VTEwpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgbmV3W2xlbl0gPSAnXDAnOworICByZXR1cm4gbWVtY3B5IChuZXcsIHMsIGxlbik7Cit9CmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGliL3N0cm5sZW4uYyBiL3BhcnRlZC0xLjguNy9saWIvc3Rybmxlbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNDZkMzIKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGliL3N0cm5sZW4uYwpAQCAtMCwwICsxLDMxIEBACisvKiBGaW5kIHRoZSBsZW5ndGggb2YgU1RSSU5HLCBidXQgc2NhbiBhdCBtb3N0IE1BWExFTiBjaGFyYWN0ZXJzLgorICAgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgV3JpdHRlbiBieSBTaW1vbiBKb3NlZnNzb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLyogRmluZCB0aGUgbGVuZ3RoIG9mIFNUUklORywgYnV0IHNjYW4gYXQgbW9zdCBNQVhMRU4gY2hhcmFjdGVycy4KKyAgIElmIG5vICdcMCcgdGVybWluYXRvciBpcyBmb3VuZCBpbiB0aGF0IG1hbnkgY2hhcmFjdGVycywgcmV0dXJuIE1BWExFTi4gICovCisKK3NpemVfdAorc3RybmxlbiAoY29uc3QgY2hhciAqc3RyaW5nLCBzaXplX3QgbWF4bGVuKQoreworICBjb25zdCBjaGFyICplbmQgPSBtZW1jaHIgKHN0cmluZywgJ1wwJywgbWF4bGVuKTsKKyAgcmV0dXJuIGVuZCA/IChzaXplX3QpIChlbmQgLSBzdHJpbmcpIDogbWF4bGVuOworfQpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYi9zdHJ0b2QuYyBiL3BhcnRlZC0xLjguNy9saWIvc3RydG9kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRmYzA5ZgotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWIvc3RydG9kLmMKQEAgLTAsMCArMSwxNzQgQEAKKy8qIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5NywgMTk5OSwgMjAwMywgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlIDxjdHlwZS5oPgorCisjaW5jbHVkZSA8bWF0aC5oPgorCisjaW5jbHVkZSA8ZmxvYXQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLyogQ29udmVydCBOUFRSIHRvIGEgZG91YmxlLiAgSWYgRU5EUFRSIGlzIG5vdCBOVUxMLCBhIHBvaW50ZXIgdG8gdGhlCisgICBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIGxhc3Qgb25lIHVzZWQgaW4gdGhlIG51bWJlciBpcyBwdXQgaW4gKkVORFBUUi4gICovCitkb3VibGUKK3N0cnRvZCAoY29uc3QgY2hhciAqbnB0ciwgY2hhciAqKmVuZHB0cikKK3sKKyAgcmVnaXN0ZXIgY29uc3QgY2hhciAqczsKKyAgc2hvcnQgaW50IHNpZ247CisKKyAgLyogVGhlIG51bWJlciBzbyBmYXIuICAqLworICBkb3VibGUgbnVtOworCisgIGludCBnb3RfZG90OwkJCS8qIEZvdW5kIGEgZGVjaW1hbCBwb2ludC4gICovCisgIGludCBnb3RfZGlnaXQ7CQkvKiBTZWVuIGFueSBkaWdpdHMuICAqLworCisgIC8qIFRoZSBleHBvbmVudCBvZiB0aGUgbnVtYmVyLiAgKi8KKyAgbG9uZyBpbnQgZXhwb25lbnQ7CisKKyAgaWYgKG5wdHIgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgIGdvdG8gbm9jb252OworICAgIH0KKworICBzID0gbnB0cjsKKworICAvKiBFYXQgd2hpdGVzcGFjZS4gICovCisgIHdoaWxlIChpc3NwYWNlICgodW5zaWduZWQgY2hhcikgKnMpKQorICAgICsrczsKKworICAvKiBHZXQgdGhlIHNpZ24uICAqLworICBzaWduID0gKnMgPT0gJy0nID8gLTEgOiAxOworICBpZiAoKnMgPT0gJy0nIHx8ICpzID09ICcrJykKKyAgICArK3M7CisKKyAgbnVtID0gMC4wOworICBnb3RfZG90ID0gMDsKKyAgZ290X2RpZ2l0ID0gMDsKKyAgZXhwb25lbnQgPSAwOworICBmb3IgKDs7ICsrcykKKyAgICB7CisgICAgICBpZiAoJzAnIDw9ICpzICYmICpzIDw9ICc5JykKKwl7CisJICBnb3RfZGlnaXQgPSAxOworCisJICAvKiBNYWtlIHN1cmUgdGhhdCBtdWx0aXBsaWNhdGlvbiBieSAxMCB3aWxsIG5vdCBvdmVyZmxvdy4gICovCisJICBpZiAobnVtID4gREJMX01BWCAqIDAuMSkKKwkgICAgLyogVGhlIHZhbHVlIG9mIHRoZSBkaWdpdCBkb2Vzbid0IG1hdHRlciwgc2luY2Ugd2UgaGF2ZSBhbHJlYWR5CisJICAgICAgIGdvdHRlbiBhcyBtYW55IGRpZ2l0cyBhcyBjYW4gYmUgcmVwcmVzZW50ZWQgaW4gYSBgZG91YmxlJy4KKwkgICAgICAgVGhpcyBkb2Vzbid0IG5lY2Vzc2FyaWx5IG1lYW4gdGhlIHJlc3VsdCB3aWxsIG92ZXJmbG93LgorCSAgICAgICBUaGUgZXhwb25lbnQgbWF5IHJlZHVjZSBpdCB0byB3aXRoaW4gcmFuZ2UuCisKKwkgICAgICAgV2UganVzdCBuZWVkIHRvIHJlY29yZCB0aGF0IHRoZXJlIHdhcyBhbm90aGVyCisJICAgICAgIGRpZ2l0IHNvIHRoYXQgd2UgY2FuIG11bHRpcGx5IGJ5IDEwIGxhdGVyLiAgKi8KKwkgICAgKytleHBvbmVudDsKKwkgIGVsc2UKKwkgICAgbnVtID0gKG51bSAqIDEwLjApICsgKCpzIC0gJzAnKTsKKworCSAgLyogS2VlcCB0cmFjayBvZiB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBhZnRlciB0aGUgZGVjaW1hbCBwb2ludC4KKwkgICAgIElmIHdlIGp1c3QgZGl2aWRlZCBieSAxMCBoZXJlLCB3ZSB3b3VsZCBsb3NlIHByZWNpc2lvbi4gICovCisJICBpZiAoZ290X2RvdCkKKwkgICAgLS1leHBvbmVudDsKKwl9CisgICAgICBlbHNlIGlmICghZ290X2RvdCAmJiAqcyA9PSAnLicpCisJLyogUmVjb3JkIHRoYXQgd2UgaGF2ZSBmb3VuZCB0aGUgZGVjaW1hbCBwb2ludC4gICovCisJZ290X2RvdCA9IDE7CisgICAgICBlbHNlCisJLyogQW55IG90aGVyIGNoYXJhY3RlciB0ZXJtaW5hdGVzIHRoZSBudW1iZXIuICAqLworCWJyZWFrOworICAgIH0KKworICBpZiAoIWdvdF9kaWdpdCkKKyAgICBnb3RvIG5vY29udjsKKworICBpZiAodG9sb3dlciAoKHVuc2lnbmVkIGNoYXIpICpzKSA9PSAnZScpCisgICAgeworICAgICAgLyogR2V0IHRoZSBleHBvbmVudCBzcGVjaWZpZWQgYWZ0ZXIgdGhlIGBlJyBvciBgRScuICAqLworICAgICAgaW50IHNhdmUgPSBlcnJubzsKKyAgICAgIGNoYXIgKmVuZDsKKyAgICAgIGxvbmcgaW50IGV4cDsKKworICAgICAgZXJybm8gPSAwOworICAgICAgKytzOworICAgICAgZXhwID0gc3RydG9sIChzLCAmZW5kLCAxMCk7CisgICAgICBpZiAoZXJybm8gPT0gRVJBTkdFKQorCXsKKwkgIC8qIFRoZSBleHBvbmVudCBvdmVyZmxvd2VkIGEgYGxvbmcgaW50Jy4gIEl0IGlzIHByb2JhYmx5IGEgc2FmZQorCSAgICAgYXNzdW1wdGlvbiB0aGF0IGFuIGV4cG9uZW50IHRoYXQgY2Fubm90IGJlIHJlcHJlc2VudGVkIGJ5CisJICAgICBhIGBsb25nIGludCcgZXhjZWVkcyB0aGUgbGltaXRzIG9mIGEgYGRvdWJsZScuICAqLworCSAgaWYgKGVuZHB0ciAhPSBOVUxMKQorCSAgICAqZW5kcHRyID0gZW5kOworCSAgaWYgKGV4cCA8IDApCisJICAgIGdvdG8gdW5kZXJmbG93OworCSAgZWxzZQorCSAgICBnb3RvIG92ZXJmbG93OworCX0KKyAgICAgIGVsc2UgaWYgKGVuZCA9PSBzKQorCS8qIFRoZXJlIHdhcyBubyBleHBvbmVudC4gIFJlc2V0IEVORCB0byBwb2ludCB0bworCSAgIHRoZSAnZScgb3IgJ0UnLCBzbyAqRU5EUFRSIHdpbGwgYmUgc2V0IHRoZXJlLiAgKi8KKwllbmQgPSAoY2hhciAqKSBzIC0gMTsKKyAgICAgIGVycm5vID0gc2F2ZTsKKyAgICAgIHMgPSBlbmQ7CisgICAgICBleHBvbmVudCArPSBleHA7CisgICAgfQorCisgIGlmIChlbmRwdHIgIT0gTlVMTCkKKyAgICAqZW5kcHRyID0gKGNoYXIgKikgczsKKworICBpZiAobnVtID09IDAuMCkKKyAgICByZXR1cm4gMC4wOworCisgIC8qIE11bHRpcGx5IE5VTSBieSAxMCB0byB0aGUgRVhQT05FTlQgcG93ZXIsCisgICAgIGNoZWNraW5nIGZvciBvdmVyZmxvdyBhbmQgdW5kZXJmbG93LiAgKi8KKworICBpZiAoZXhwb25lbnQgPCAwKQorICAgIHsKKyAgICAgIGlmIChudW0gPCBEQkxfTUlOICogcG93ICgxMC4wLCAoZG91YmxlKSAtZXhwb25lbnQpKQorCWdvdG8gdW5kZXJmbG93OworICAgIH0KKyAgZWxzZSBpZiAoZXhwb25lbnQgPiAwKQorICAgIHsKKyAgICAgIGlmIChudW0gPiBEQkxfTUFYICogcG93ICgxMC4wLCAoZG91YmxlKSAtZXhwb25lbnQpKQorCWdvdG8gb3ZlcmZsb3c7CisgICAgfQorCisgIG51bSAqPSBwb3cgKDEwLjAsIChkb3VibGUpIGV4cG9uZW50KTsKKworICByZXR1cm4gbnVtICogc2lnbjsKKworb3ZlcmZsb3c6CisgIC8qIFJldHVybiBhbiBvdmVyZmxvdyBlcnJvci4gICovCisgIGVycm5vID0gRVJBTkdFOworICByZXR1cm4gSFVHRV9WQUwgKiBzaWduOworCit1bmRlcmZsb3c6CisgIC8qIFJldHVybiBhbiB1bmRlcmZsb3cgZXJyb3IuICAqLworICBpZiAoZW5kcHRyICE9IE5VTEwpCisgICAgKmVuZHB0ciA9IChjaGFyICopIG5wdHI7CisgIGVycm5vID0gRVJBTkdFOworICByZXR1cm4gMC4wOworCitub2NvbnY6CisgIC8qIFRoZXJlIHdhcyBubyBudW1iZXIuICAqLworICBpZiAoZW5kcHRyICE9IE5VTEwpCisgICAgKmVuZHB0ciA9IChjaGFyICopIG5wdHI7CisgIHJldHVybiAwLjA7Cit9CmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGliL3N0cnRvbC5jIGIvcGFydGVkLTEuOC43L2xpYi9zdHJ0b2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTRkM2NmCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYi9zdHJ0b2wuYwpAQCAtMCwwICsxLDQzNiBAQAorLyogQ29udmVydCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBudW1iZXIgaW50byBhbiBpbnRlZ2VyIHZhbHVlLgorCisgICBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDMsIDIwMDUsCisgICAyMDA2LCAyMDA3CisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgTk9URTogVGhlIGNhbm9uaWNhbCBzb3VyY2Ugb2YgdGhpcyBmaWxlIGlzIG1haW50YWluZWQgd2l0aCB0aGUgR05VIEMKKyAgIExpYnJhcnkuICBCdWdzIGNhbiBiZSByZXBvcnRlZCB0byBidWctZ2xpYmNAZ251Lm9yZy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisKKyNpZmRlZiBfTElCQworIyBkZWZpbmUgVVNFX05VTUJFUl9HUk9VUElORworI2Vsc2UKKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpZm5kZWYgX19zZXRfZXJybm8KKyMgZGVmaW5lIF9fc2V0X2Vycm5vKFZhbCkgZXJybm8gPSAoVmFsKQorI2VuZGlmCisKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmZGVmIFVTRV9OVU1CRVJfR1JPVVBJTkcKKyMgaW5jbHVkZSAiLi4vbG9jYWxlL2xvY2FsZWluZm8uaCIKKyNlbmRpZgorCisvKiBOb256ZXJvIGlmIHdlIGFyZSBkZWZpbmluZyBgc3RydG91bCcgb3IgYHN0cnRvdWxsJywgb3BlcmF0aW5nIG9uCisgICB1bnNpZ25lZCBpbnRlZ2Vycy4gICovCisjaWZuZGVmIFVOU0lHTkVECisjIGRlZmluZSBVTlNJR05FRCAwCisjIGRlZmluZSBJTlQgTE9ORyBpbnQKKyNlbHNlCisjIGRlZmluZSBJTlQgdW5zaWduZWQgTE9ORyBpbnQKKyNlbmRpZgorCisvKiBEZXRlcm1pbmUgdGhlIG5hbWUuICAqLworI2lmZGVmIFVTRV9JTl9FWFRFTkRFRF9MT0NBTEVfTU9ERUwKKyMgaWYgVU5TSUdORUQKKyMgIGlmZGVmIFVTRV9XSURFX0NIQVIKKyMgICBpZmRlZiBRVUFECisjICAgIGRlZmluZSBzdHJ0b2wgX193Y3N0b3VsbF9sCisjICAgZWxzZQorIyAgICBkZWZpbmUgc3RydG9sIF9fd2NzdG91bF9sCisjICAgZW5kaWYKKyMgIGVsc2UKKyMgICBpZmRlZiBRVUFECisjICAgIGRlZmluZSBzdHJ0b2wgX19zdHJ0b3VsbF9sCisjICAgZWxzZQorIyAgICBkZWZpbmUgc3RydG9sIF9fc3RydG91bF9sCisjICAgZW5kaWYKKyMgIGVuZGlmCisjIGVsc2UKKyMgIGlmZGVmIFVTRV9XSURFX0NIQVIKKyMgICBpZmRlZiBRVUFECisjICAgIGRlZmluZSBzdHJ0b2wgX193Y3N0b2xsX2wKKyMgICBlbHNlCisjICAgIGRlZmluZSBzdHJ0b2wgX193Y3N0b2xfbAorIyAgIGVuZGlmCisjICBlbHNlCisjICAgaWZkZWYgUVVBRAorIyAgICBkZWZpbmUgc3RydG9sIF9fc3RydG9sbF9sCisjICAgZWxzZQorIyAgICBkZWZpbmUgc3RydG9sIF9fc3RydG9sX2wKKyMgICBlbmRpZgorIyAgZW5kaWYKKyMgZW5kaWYKKyNlbHNlCisjIGlmIFVOU0lHTkVECisjICBpZmRlZiBVU0VfV0lERV9DSEFSCisjICAgaWZkZWYgUVVBRAorIyAgICBkZWZpbmUgc3RydG9sIHdjc3RvdWxsCisjICAgZWxzZQorIyAgICBkZWZpbmUgc3RydG9sIHdjc3RvdWwKKyMgICBlbmRpZgorIyAgZWxzZQorIyAgIGlmZGVmIFFVQUQKKyMgICAgZGVmaW5lIHN0cnRvbCBzdHJ0b3VsbAorIyAgIGVsc2UKKyMgICAgZGVmaW5lIHN0cnRvbCBzdHJ0b3VsCisjICAgZW5kaWYKKyMgIGVuZGlmCisjIGVsc2UKKyMgIGlmZGVmIFVTRV9XSURFX0NIQVIKKyMgICBpZmRlZiBRVUFECisjICAgIGRlZmluZSBzdHJ0b2wgd2NzdG9sbAorIyAgIGVsc2UKKyMgICAgZGVmaW5lIHN0cnRvbCB3Y3N0b2wKKyMgICBlbmRpZgorIyAgZWxzZQorIyAgIGlmZGVmIFFVQUQKKyMgICAgZGVmaW5lIHN0cnRvbCBzdHJ0b2xsCisjICAgZW5kaWYKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYKKworLyogSWYgUVVBRCBpcyBkZWZpbmVkLCB3ZSBhcmUgZGVmaW5pbmcgYHN0cnRvbGwnIG9yIGBzdHJ0b3VsbCcsCisgICBvcGVyYXRpbmcgb24gYGxvbmcgbG9uZyBpbnQncy4gICovCisjaWZkZWYgUVVBRAorIyBkZWZpbmUgTE9ORyBsb25nIGxvbmcKKyMgZGVmaW5lIFNUUlRPTF9MT05HX01JTiBMT05HX0xPTkdfTUlOCisjIGRlZmluZSBTVFJUT0xfTE9OR19NQVggTE9OR19MT05HX01BWAorIyBkZWZpbmUgU1RSVE9MX1VMT05HX01BWCBVTE9OR19MT05HX01BWAorCisvKiBUaGUgZXh0cmEgY2FzdHMgaW4gdGhlIGZvbGxvd2luZyBtYWNyb3Mgd29yayBhcm91bmQgY29tcGlsZXIgYnVncywKKyAgIGUuZy4sIGluIENyYXkgQyA1LjAuMy4wLiAgKi8KKworLyogVHJ1ZSBpZiBuZWdhdGl2ZSB2YWx1ZXMgb2YgdGhlIHNpZ25lZCBpbnRlZ2VyIHR5cGUgVCB1c2UgdHdvJ3MKKyAgIGNvbXBsZW1lbnQsIG9uZXMnIGNvbXBsZW1lbnQsIG9yIHNpZ25lZCBtYWduaXR1ZGUgcmVwcmVzZW50YXRpb24sCisgICByZXNwZWN0aXZlbHkuICBNdWNoIEdOVSBjb2RlIGFzc3VtZXMgdHdvJ3MgY29tcGxlbWVudCwgYnV0IHNvbWUKKyAgIHBlb3BsZSBsaWtlIHRvIGJlIHBvcnRhYmxlIHRvIGFsbCBwb3NzaWJsZSBDIGhvc3RzLiAgKi8KKyMgZGVmaW5lIFRZUEVfVFdPU19DT01QTEVNRU5UKHQpICgodCkgfiAodCkgMCA9PSAodCkgLTEpCisjIGRlZmluZSBUWVBFX09ORVNfQ09NUExFTUVOVCh0KSAoKHQpIH4gKHQpIDAgPT0gMCkKKyMgZGVmaW5lIFRZUEVfU0lHTkVEX01BR05JVFVERSh0KSAoKHQpIH4gKHQpIDAgPCAodCkgLTEpCisKKy8qIFRydWUgaWYgdGhlIGFyaXRobWV0aWMgdHlwZSBUIGlzIHNpZ25lZC4gICovCisjIGRlZmluZSBUWVBFX1NJR05FRCh0KSAoISAoKHQpIDAgPCAodCkgLTEpKQorCisvKiBUaGUgbWF4aW11bSBhbmQgbWluaW11bSB2YWx1ZXMgZm9yIHRoZSBpbnRlZ2VyIHR5cGUgVC4gIFRoZXNlCisgICBtYWNyb3MgaGF2ZSB1bmRlZmluZWQgYmVoYXZpb3IgaWYgVCBpcyBzaWduZWQgYW5kIGhhcyBwYWRkaW5nIGJpdHMuCisgICBJZiB0aGlzIGlzIGEgcHJvYmxlbSBmb3IgeW91LCBwbGVhc2UgbGV0IHVzIGtub3cgaG93IHRvIGZpeCBpdCBmb3IKKyAgIHlvdXIgaG9zdC4gICovCisjIGRlZmluZSBUWVBFX01JTklNVU0odCkgXAorICAgKCh0KSAoISBUWVBFX1NJR05FRCAodCkgXAorCSA/ICh0KSAwIFwKKwkgOiBUWVBFX1NJR05FRF9NQUdOSVRVREUgKHQpIFwKKwkgPyB+ICh0KSAwIFwKKwkgOiB+ICh0KSAwIDw8IChzaXplb2YgKHQpICogQ0hBUl9CSVQgLSAxKSkpCisjIGRlZmluZSBUWVBFX01BWElNVU0odCkgXAorICAgKCh0KSAoISBUWVBFX1NJR05FRCAodCkgXAorCSA/ICh0KSAtMSBcCisJIDogfiAofiAodCkgMCA8PCAoc2l6ZW9mICh0KSAqIENIQVJfQklUIC0gMSkpKSkKKworIyBpZm5kZWYgVUxPTkdfTE9OR19NQVgKKyMgIGRlZmluZSBVTE9OR19MT05HX01BWCBUWVBFX01BWElNVU0gKHVuc2lnbmVkIGxvbmcgbG9uZykKKyMgZW5kaWYKKyMgaWZuZGVmIExPTkdfTE9OR19NQVgKKyMgIGRlZmluZSBMT05HX0xPTkdfTUFYIFRZUEVfTUFYSU1VTSAobG9uZyBsb25nIGludCkKKyMgZW5kaWYKKyMgaWZuZGVmIExPTkdfTE9OR19NSU4KKyMgIGRlZmluZSBMT05HX0xPTkdfTUlOIFRZUEVfTUlOSU1VTSAobG9uZyBsb25nIGludCkKKyMgZW5kaWYKKworIyBpZiBfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fIDwgNworICAgLyogV29yayBhcm91bmQgZ2NjIGJ1ZyB3aXRoIHVzaW5nIHRoaXMgY29uc3RhbnQuICAqLworICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgbWF4cXVhZCA9IFVMT05HX0xPTkdfTUFYOworIyAgdW5kZWYgU1RSVE9MX1VMT05HX01BWAorIyAgZGVmaW5lIFNUUlRPTF9VTE9OR19NQVggbWF4cXVhZAorIyBlbmRpZgorI2Vsc2UKKyMgZGVmaW5lIExPTkcgbG9uZworIyBkZWZpbmUgU1RSVE9MX0xPTkdfTUlOIExPTkdfTUlOCisjIGRlZmluZSBTVFJUT0xfTE9OR19NQVggTE9OR19NQVgKKyMgZGVmaW5lIFNUUlRPTF9VTE9OR19NQVggVUxPTkdfTUFYCisjZW5kaWYKKworCisvKiBXZSB1c2UgdGhpcyBjb2RlIGFsc28gZm9yIHRoZSBleHRlbmRlZCBsb2NhbGUgaGFuZGxpbmcgd2hlcmUgdGhlCisgICBmdW5jdGlvbiBnZXRzIGFzIGFuIGFkZGl0aW9uYWwgYXJndW1lbnQgdGhlIGxvY2FsZSB3aGljaCBoYXMgdG8gYmUKKyAgIHVzZWQuICBUbyBhY2Nlc3MgdGhlIHZhbHVlcyB3ZSBoYXZlIHRvIHJlZGVmaW5lIHRoZSBfTkxfQ1VSUkVOVAorICAgbWFjcm8uICAqLworI2lmZGVmIFVTRV9JTl9FWFRFTkRFRF9MT0NBTEVfTU9ERUwKKyMgdW5kZWYgX05MX0NVUlJFTlQKKyMgZGVmaW5lIF9OTF9DVVJSRU5UKGNhdGVnb3J5LCBpdGVtKSBcCisgIChjdXJyZW50LT52YWx1ZXNbX05MX0lURU1fSU5ERVggKGl0ZW0pXS5zdHJpbmcpCisjIGRlZmluZSBMT0NBTEVfUEFSQU0gLCBsb2MKKyMgZGVmaW5lIExPQ0FMRV9QQVJBTV9QUk9UTyAsIF9fbG9jYWxlX3QgbG9jCisjZWxzZQorIyBkZWZpbmUgTE9DQUxFX1BBUkFNCisjIGRlZmluZSBMT0NBTEVfUEFSQU1fUFJPVE8KKyNlbmRpZgorCisjaW5jbHVkZSA8d2NoYXIuaD4KKworI2lmZGVmIFVTRV9XSURFX0NIQVIKKyMgaW5jbHVkZSA8d2N0eXBlLmg+CisjIGRlZmluZSBMXyhDaCkgTCMjQ2gKKyMgZGVmaW5lIFVDSEFSX1RZUEUgd2ludF90CisjIGRlZmluZSBTVFJJTkdfVFlQRSB3Y2hhcl90CisjIGlmZGVmIFVTRV9JTl9FWFRFTkRFRF9MT0NBTEVfTU9ERUwKKyMgIGRlZmluZSBJU1NQQUNFKENoKSBfX2lzd3NwYWNlX2wgKChDaCksIGxvYykKKyMgIGRlZmluZSBJU0FMUEhBKENoKSBfX2lzd2FscGhhX2wgKChDaCksIGxvYykKKyMgIGRlZmluZSBUT1VQUEVSKENoKSBfX3Rvd3VwcGVyX2wgKChDaCksIGxvYykKKyMgZWxzZQorIyAgZGVmaW5lIElTU1BBQ0UoQ2gpIGlzd3NwYWNlIChDaCkKKyMgIGRlZmluZSBJU0FMUEhBKENoKSBpc3dhbHBoYSAoQ2gpCisjICBkZWZpbmUgVE9VUFBFUihDaCkgdG93dXBwZXIgKENoKQorIyBlbmRpZgorI2Vsc2UKKyMgZGVmaW5lIExfKENoKSBDaAorIyBkZWZpbmUgVUNIQVJfVFlQRSB1bnNpZ25lZCBjaGFyCisjIGRlZmluZSBTVFJJTkdfVFlQRSBjaGFyCisjIGlmZGVmIFVTRV9JTl9FWFRFTkRFRF9MT0NBTEVfTU9ERUwKKyMgIGRlZmluZSBJU1NQQUNFKENoKSBfX2lzc3BhY2VfbCAoKENoKSwgbG9jKQorIyAgZGVmaW5lIElTQUxQSEEoQ2gpIF9faXNhbHBoYV9sICgoQ2gpLCBsb2MpCisjICBkZWZpbmUgVE9VUFBFUihDaCkgX190b3VwcGVyX2wgKChDaCksIGxvYykKKyMgZWxzZQorIyAgZGVmaW5lIElTU1BBQ0UoQ2gpIGlzc3BhY2UgKENoKQorIyAgZGVmaW5lIElTQUxQSEEoQ2gpIGlzYWxwaGEgKENoKQorIyAgZGVmaW5lIFRPVVBQRVIoQ2gpIHRvdXBwZXIgKENoKQorIyBlbmRpZgorI2VuZGlmCisKKyNkZWZpbmUgSU5URVJOQUwoWCkgSU5URVJOQUwxKFgpCisjZGVmaW5lIElOVEVSTkFMMShYKSBfXyMjWCMjX2ludGVybmFsCisjZGVmaW5lIFdFQUtOQU1FKFgpIFdFQUtOQU1FMShYKQorCisjaWZkZWYgVVNFX05VTUJFUl9HUk9VUElORworLyogVGhpcyBmaWxlIGRlZmluZXMgYSBmdW5jdGlvbiB0byBjaGVjayBmb3IgY29ycmVjdCBncm91cGluZy4gICovCisjIGluY2x1ZGUgImdyb3VwaW5nLmgiCisjZW5kaWYKKworCisKKy8qIENvbnZlcnQgTlBUUiB0byBhbiBgdW5zaWduZWQgbG9uZyBpbnQnIG9yIGBsb25nIGludCcgaW4gYmFzZSBCQVNFLgorICAgSWYgQkFTRSBpcyAwIHRoZSBiYXNlIGlzIGRldGVybWluZWQgYnkgdGhlIHByZXNlbmNlIG9mIGEgbGVhZGluZworICAgemVybywgaW5kaWNhdGluZyBvY3RhbCBvciBhIGxlYWRpbmcgIjB4IiBvciAiMFgiLCBpbmRpY2F0aW5nIGhleGFkZWNpbWFsLgorICAgSWYgQkFTRSBpcyA8IDIgb3IgPiAzNiwgaXQgaXMgcmVzZXQgdG8gMTAuCisgICBJZiBFTkRQVFIgaXMgbm90IE5VTEwsIGEgcG9pbnRlciB0byB0aGUgY2hhcmFjdGVyIGFmdGVyIHRoZSBsYXN0CisgICBvbmUgY29udmVydGVkIGlzIHN0b3JlZCBpbiAqRU5EUFRSLiAgKi8KKworSU5UCitJTlRFUk5BTCAoc3RydG9sKSAoY29uc3QgU1RSSU5HX1RZUEUgKm5wdHIsIFNUUklOR19UWVBFICoqZW5kcHRyLAorCQkgICBpbnQgYmFzZSwgaW50IGdyb3VwIExPQ0FMRV9QQVJBTV9QUk9UTykKK3sKKyAgaW50IG5lZ2F0aXZlOworICByZWdpc3RlciB1bnNpZ25lZCBMT05HIGludCBjdXRvZmY7CisgIHJlZ2lzdGVyIHVuc2lnbmVkIGludCBjdXRsaW07CisgIHJlZ2lzdGVyIHVuc2lnbmVkIExPTkcgaW50IGk7CisgIHJlZ2lzdGVyIGNvbnN0IFNUUklOR19UWVBFICpzOworICByZWdpc3RlciBVQ0hBUl9UWVBFIGM7CisgIGNvbnN0IFNUUklOR19UWVBFICpzYXZlLCAqZW5kOworICBpbnQgb3ZlcmZsb3c7CisKKyNpZmRlZiBVU0VfTlVNQkVSX0dST1VQSU5HCisjIGlmZGVmIFVTRV9JTl9FWFRFTkRFRF9MT0NBTEVfTU9ERUwKKyAgc3RydWN0IGxvY2FsZV9kYXRhICpjdXJyZW50ID0gbG9jLT5fX2xvY2FsZXNbTENfTlVNRVJJQ107CisjIGVuZGlmCisgIC8qIFRoZSB0aG91c2FuZHMgY2hhcmFjdGVyIG9mIHRoZSBjdXJyZW50IGxvY2FsZS4gICovCisgIHdjaGFyX3QgdGhvdXNhbmRzID0gTCdcMCc7CisgIC8qIFRoZSBudW1lcmljIGdyb3VwaW5nIHNwZWNpZmljYXRpb24gb2YgdGhlIGN1cnJlbnQgbG9jYWxlLAorICAgICBpbiB0aGUgZm9ybWF0IGRlc2NyaWJlZCBpbiA8bG9jYWxlLmg+LiAgKi8KKyAgY29uc3QgY2hhciAqZ3JvdXBpbmc7CisKKyAgaWYgKGdyb3VwKQorICAgIHsKKyAgICAgIGdyb3VwaW5nID0gX05MX0NVUlJFTlQgKExDX05VTUVSSUMsIEdST1VQSU5HKTsKKyAgICAgIGlmICgqZ3JvdXBpbmcgPD0gMCB8fCAqZ3JvdXBpbmcgPT0gQ0hBUl9NQVgpCisJZ3JvdXBpbmcgPSBOVUxMOworICAgICAgZWxzZQorCXsKKwkgIC8qIEZpZ3VyZSBvdXQgdGhlIHRob3VzYW5kcyBzZXBhcmF0b3IgY2hhcmFjdGVyLiAgKi8KKyMgaWYgZGVmaW5lZCBfTElCQyB8fCBkZWZpbmVkIF9IQVZFX0JUT1dDCisJICB0aG91c2FuZHMgPSBfX2J0b3djICgqX05MX0NVUlJFTlQgKExDX05VTUVSSUMsIFRIT1VTQU5EU19TRVApKTsKKwkgIGlmICh0aG91c2FuZHMgPT0gV0VPRikKKwkgICAgdGhvdXNhbmRzID0gTCdcMCc7CisjIGVuZGlmCisJICBpZiAodGhvdXNhbmRzID09IEwnXDAnKQorCSAgICBncm91cGluZyA9IE5VTEw7CisJfQorICAgIH0KKyAgZWxzZQorICAgIGdyb3VwaW5nID0gTlVMTDsKKyNlbmRpZgorCisgIGlmIChiYXNlIDwgMCB8fCBiYXNlID09IDEgfHwgYmFzZSA+IDM2KQorICAgIHsKKyAgICAgIF9fc2V0X2Vycm5vIChFSU5WQUwpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgIHNhdmUgPSBzID0gbnB0cjsKKworICAvKiBTa2lwIHdoaXRlIHNwYWNlLiAgKi8KKyAgd2hpbGUgKElTU1BBQ0UgKCpzKSkKKyAgICArK3M7CisgIGlmICgqcyA9PSBMXygnXDAnKSkKKyAgICBnb3RvIG5vY29udjsKKworICAvKiBDaGVjayBmb3IgYSBzaWduLiAgKi8KKyAgaWYgKCpzID09IExfKCctJykpCisgICAgeworICAgICAgbmVnYXRpdmUgPSAxOworICAgICAgKytzOworICAgIH0KKyAgZWxzZSBpZiAoKnMgPT0gTF8oJysnKSkKKyAgICB7CisgICAgICBuZWdhdGl2ZSA9IDA7CisgICAgICArK3M7CisgICAgfQorICBlbHNlCisgICAgbmVnYXRpdmUgPSAwOworCisgIC8qIFJlY29nbml6ZSBudW1iZXIgcHJlZml4IGFuZCBpZiBCQVNFIGlzIHplcm8sIGZpZ3VyZSBpdCBvdXQgb3Vyc2VsdmVzLiAgKi8KKyAgaWYgKCpzID09IExfKCcwJykpCisgICAgeworICAgICAgaWYgKChiYXNlID09IDAgfHwgYmFzZSA9PSAxNikgJiYgVE9VUFBFUiAoc1sxXSkgPT0gTF8oJ1gnKSkKKwl7CisJICBzICs9IDI7CisJICBiYXNlID0gMTY7CisJfQorICAgICAgZWxzZSBpZiAoYmFzZSA9PSAwKQorCWJhc2UgPSA4OworICAgIH0KKyAgZWxzZSBpZiAoYmFzZSA9PSAwKQorICAgIGJhc2UgPSAxMDsKKworICAvKiBTYXZlIHRoZSBwb2ludGVyIHNvIHdlIGNhbiBjaGVjayBsYXRlciBpZiBhbnl0aGluZyBoYXBwZW5lZC4gICovCisgIHNhdmUgPSBzOworCisjaWZkZWYgVVNFX05VTUJFUl9HUk9VUElORworICBpZiAoZ3JvdXApCisgICAgeworICAgICAgLyogRmluZCB0aGUgZW5kIG9mIHRoZSBkaWdpdCBzdHJpbmcgYW5kIGNoZWNrIGl0cyBncm91cGluZy4gICovCisgICAgICBlbmQgPSBzOworICAgICAgZm9yIChjID0gKmVuZDsgYyAhPSBMXygnXDAnKTsgYyA9ICorK2VuZCkKKwlpZiAoKHdjaGFyX3QpIGMgIT0gdGhvdXNhbmRzCisJICAgICYmICgod2NoYXJfdCkgYyA8IExfKCcwJykgfHwgKHdjaGFyX3QpIGMgPiBMXygnOScpKQorCSAgICAmJiAoIUlTQUxQSEEgKGMpIHx8IChpbnQpIChUT1VQUEVSIChjKSAtIExfKCdBJykgKyAxMCkgPj0gYmFzZSkpCisJICBicmVhazsKKyAgICAgIGlmICgqcyA9PSB0aG91c2FuZHMpCisJZW5kID0gczsKKyAgICAgIGVsc2UKKwllbmQgPSBjb3JyZWN0bHlfZ3JvdXBlZF9wcmVmaXggKHMsIGVuZCwgdGhvdXNhbmRzLCBncm91cGluZyk7CisgICAgfQorICBlbHNlCisjZW5kaWYKKyAgICBlbmQgPSBOVUxMOworCisgIGN1dG9mZiA9IFNUUlRPTF9VTE9OR19NQVggLyAodW5zaWduZWQgTE9ORyBpbnQpIGJhc2U7CisgIGN1dGxpbSA9IFNUUlRPTF9VTE9OR19NQVggJSAodW5zaWduZWQgTE9ORyBpbnQpIGJhc2U7CisKKyAgb3ZlcmZsb3cgPSAwOworICBpID0gMDsKKyAgZm9yIChjID0gKnM7IGMgIT0gTF8oJ1wwJyk7IGMgPSAqKytzKQorICAgIHsKKyAgICAgIGlmIChzID09IGVuZCkKKwlicmVhazsKKyAgICAgIGlmIChjID49IExfKCcwJykgJiYgYyA8PSBMXygnOScpKQorCWMgLT0gTF8oJzAnKTsKKyAgICAgIGVsc2UgaWYgKElTQUxQSEEgKGMpKQorCWMgPSBUT1VQUEVSIChjKSAtIExfKCdBJykgKyAxMDsKKyAgICAgIGVsc2UKKwlicmVhazsKKyAgICAgIGlmICgoaW50KSBjID49IGJhc2UpCisJYnJlYWs7CisgICAgICAvKiBDaGVjayBmb3Igb3ZlcmZsb3cuICAqLworICAgICAgaWYgKGkgPiBjdXRvZmYgfHwgKGkgPT0gY3V0b2ZmICYmIGMgPiBjdXRsaW0pKQorCW92ZXJmbG93ID0gMTsKKyAgICAgIGVsc2UKKwl7CisJICBpICo9ICh1bnNpZ25lZCBMT05HIGludCkgYmFzZTsKKwkgIGkgKz0gYzsKKwl9CisgICAgfQorCisgIC8qIENoZWNrIGlmIGFueXRoaW5nIGFjdHVhbGx5IGhhcHBlbmVkLiAgKi8KKyAgaWYgKHMgPT0gc2F2ZSkKKyAgICBnb3RvIG5vY29udjsKKworICAvKiBTdG9yZSBpbiBFTkRQVFIgdGhlIGFkZHJlc3Mgb2Ygb25lIGNoYXJhY3RlcgorICAgICBwYXN0IHRoZSBsYXN0IGNoYXJhY3RlciB3ZSBjb252ZXJ0ZWQuICAqLworICBpZiAoZW5kcHRyICE9IE5VTEwpCisgICAgKmVuZHB0ciA9IChTVFJJTkdfVFlQRSAqKSBzOworCisjaWYgIVVOU0lHTkVECisgIC8qIENoZWNrIGZvciBhIHZhbHVlIHRoYXQgaXMgd2l0aGluIHRoZSByYW5nZSBvZgorICAgICBgdW5zaWduZWQgTE9ORyBpbnQnLCBidXQgb3V0c2lkZSB0aGUgcmFuZ2Ugb2YgYExPTkcgaW50Jy4gICovCisgIGlmIChvdmVyZmxvdyA9PSAwCisgICAgICAmJiBpID4gKG5lZ2F0aXZlCisJICAgICAgPyAtKCh1bnNpZ25lZCBMT05HIGludCkgKFNUUlRPTF9MT05HX01JTiArIDEpKSArIDEKKwkgICAgICA6ICh1bnNpZ25lZCBMT05HIGludCkgU1RSVE9MX0xPTkdfTUFYKSkKKyAgICBvdmVyZmxvdyA9IDE7CisjZW5kaWYKKworICBpZiAob3ZlcmZsb3cpCisgICAgeworICAgICAgX19zZXRfZXJybm8gKEVSQU5HRSk7CisjaWYgVU5TSUdORUQKKyAgICAgIHJldHVybiBTVFJUT0xfVUxPTkdfTUFYOworI2Vsc2UKKyAgICAgIHJldHVybiBuZWdhdGl2ZSA/IFNUUlRPTF9MT05HX01JTiA6IFNUUlRPTF9MT05HX01BWDsKKyNlbmRpZgorICAgIH0KKworICAvKiBSZXR1cm4gdGhlIHJlc3VsdCBvZiB0aGUgYXBwcm9wcmlhdGUgc2lnbi4gICovCisgIHJldHVybiBuZWdhdGl2ZSA/IC1pIDogaTsKKworbm9jb252OgorICAvKiBXZSBtdXN0IGhhbmRsZSBhIHNwZWNpYWwgY2FzZSBoZXJlOiB0aGUgYmFzZSBpcyAwIG9yIDE2IGFuZCB0aGUKKyAgICAgZmlyc3QgdHdvIGNoYXJhY3RlcnMgYXJlICcwJyBhbmQgJ3gnLCBidXQgdGhlIHJlc3QgYXJlIG5vCisgICAgIGhleGFkZWNpbWFsIGRpZ2l0cy4gIFRoaXMgaXMgbm8gZXJyb3IgY2FzZS4gIFdlIHJldHVybiAwIGFuZAorICAgICBFTkRQVFIgcG9pbnRzIHRvIHRoZSBgeGAuICAqLworICBpZiAoZW5kcHRyICE9IE5VTEwpCisgICAgeworICAgICAgaWYgKHNhdmUgLSBucHRyID49IDIgJiYgVE9VUFBFUiAoc2F2ZVstMV0pID09IExfKCdYJykKKwkgICYmIHNhdmVbLTJdID09IExfKCcwJykpCisJKmVuZHB0ciA9IChTVFJJTkdfVFlQRSAqKSAmc2F2ZVstMV07CisgICAgICBlbHNlCisJLyogIFRoZXJlIHdhcyBubyBudW1iZXIgdG8gY29udmVydC4gICovCisJKmVuZHB0ciA9IChTVFJJTkdfVFlQRSAqKSBucHRyOworICAgIH0KKworICByZXR1cm4gMEw7Cit9CisMCisvKiBFeHRlcm5hbCB1c2VyIGVudHJ5IHBvaW50LiAgKi8KKworCitJTlQKKyNpZmRlZiB3ZWFrX2Z1bmN0aW9uCit3ZWFrX2Z1bmN0aW9uCisjZW5kaWYKK3N0cnRvbCAoY29uc3QgU1RSSU5HX1RZUEUgKm5wdHIsIFNUUklOR19UWVBFICoqZW5kcHRyLAorCWludCBiYXNlIExPQ0FMRV9QQVJBTV9QUk9UTykKK3sKKyAgcmV0dXJuIElOVEVSTkFMIChzdHJ0b2wpIChucHRyLCBlbmRwdHIsIGJhc2UsIDAgTE9DQUxFX1BBUkFNKTsKK30KZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWIvdW5pc3RkXy5oIGIvcGFydGVkLTEuOC43L2xpYi91bmlzdGRfLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJlZmZjZQotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWIvdW5pc3RkXy5oCkBAIC0wLDAgKzEsMjE2IEBACisvKiBTdWJzdGl0dXRlIGZvciBhbmQgd3JhcHBlciBhcm91bmQgPHVuaXN0ZC5oPi4KKyAgIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKworI2lmbmRlZiBfR0xfVU5JU1REX0gKKyNkZWZpbmUgX0dMX1VOSVNURF9ICisKKyNpZiBASEFWRV9VTklTVERfSEAKKyMgaW5jbHVkZSBAQUJTT0xVVEVfVU5JU1REX0hACisjZW5kaWYKKworLyogbWluZ3cgZG9lc24ndCBkZWZpbmUgdGhlIFNFRUtfKiBtYWNyb3MgaW4gPHVuaXN0ZC5oPi4gICovCisjaWYgIShkZWZpbmVkIFNFRUtfQ1VSICYmIGRlZmluZWQgU0VFS19FTkQgJiYgZGVmaW5lZCBTRUVLX1NFVCkKKyMgaW5jbHVkZSA8c3RkaW8uaD4KKyNlbmRpZgorCisvKiBtaW5ndyBmYWlscyB0byBkZWNsYXJlIF9leGl0IGluIDx1bmlzdGQuaD4uICAqLworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisvKiBUaGUgZGVmaW5pdGlvbiBvZiBHTF9MSU5LX1dBUk5JTkcgaXMgY29waWVkIGhlcmUuICAqLworCisKKy8qIERlY2xhcmUgb3ZlcnJpZGRlbiBmdW5jdGlvbnMuICAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKworI2lmIEBHTlVMSUJfQ0hPV05ACisjIGlmIEBSRVBMQUNFX0NIT1dOQAorLyogQ2hhbmdlIHRoZSBvd25lciBvZiBGSUxFIHRvIFVJRCAoaWYgVUlEIGlzIG5vdCAtMSkgYW5kIHRoZSBncm91cCBvZiBGSUxFCisgICB0byBHSUQgKGlmIEdJRCBpcyBub3QgLTEpLgorICAgUmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bCwgb3RoZXJ3aXNlIC0xIGFuZCBlcnJubyBzZXQuCisgICBTZWUgdGhlIFBPU0lYOjIwMDEgc3BlY2lmaWNhdGlvbgorICAgPGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9zdXN2M3hzaC9jaG93bi5odG1sPi4gICovCisjICBkZWZpbmUgY2hvd24gcnBsX2Nob3duCitleHRlcm4gaW50IGNob3duIChjb25zdCBjaGFyICpmaWxlLCB1aWRfdCB1aWQsIGdpZF90IGdpZCk7CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGNob3duCisjIGRlZmluZSBjaG93bihmLHUsZykgXAorICAgIChHTF9MSU5LX1dBUk5JTkcgKCJjaG93biBmYWlscyB0byBmb2xsb3cgc3ltbGlua3Mgb24gc29tZSBzeXN0ZW1zIGFuZCAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAiZG9lc24ndCB0cmVhdCBhIHVpZCBvciBnaWQgb2YgLTEgb24gc29tZSBzeXN0ZW1zIC0gIiBcCisgICAgICAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGNob3duIGZvciBwb3J0YWJpbGl0eSIpLCBcCisgICAgIGNob3duIChmLCB1LCBnKSkKKyNlbmRpZgorCisKKyNpZiBAR05VTElCX0RVUDJACisjIGlmICFASEFWRV9EVVAyQAorLyogQ29weSB0aGUgZmlsZSBkZXNjcmlwdG9yIE9MREZEIGludG8gZmlsZSBkZXNjcmlwdG9yIE5FV0ZELiAgRG8gbm90aGluZyBpZgorICAgTkVXRkQgPSBPTERGRCwgb3RoZXJ3aXNlIGNsb3NlIE5FV0ZEIGZpcnN0IGlmIGl0IGlzIG9wZW4uCisgICBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCBvdGhlcndpc2UgLTEgYW5kIGVycm5vIHNldC4KKyAgIFNlZSB0aGUgUE9TSVg6MjAwMSBzcGVjaWZpY2F0aW9uCisgICA8aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL3N1c3YzeHNoL2R1cDIuaHRtbD4uICAqLworZXh0ZXJuIGludCBkdXAyIChpbnQgb2xkZmQsIGludCBuZXdmZCk7CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGR1cDIKKyMgZGVmaW5lIGR1cDIobyxuKSBcCisgICAgKEdMX0xJTktfV0FSTklORyAoImR1cDIgaXMgdW5wb3J0YWJsZSAtICIgXAorICAgICAgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBkdXAyIGZvciBwb3J0YWJpbGl0eSIpLCBcCisgICAgIGR1cDIgKG8sIG4pKQorI2VuZGlmCisKKworI2lmIEBHTlVMSUJfRkNIRElSQAorIyBpZiBAUkVQTEFDRV9GQ0hESVJACisKKy8qIENoYW5nZSB0aGUgcHJvY2VzcycgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSB0byB0aGUgZGlyZWN0b3J5IG9uIHdoaWNoCisgICB0aGUgZ2l2ZW4gZmlsZSBkZXNjcmlwdG9yIGlzIG9wZW4uCisgICBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCBvdGhlcndpc2UgLTEgYW5kIGVycm5vIHNldC4KKyAgIFNlZSB0aGUgUE9TSVg6MjAwMSBzcGVjaWZpY2F0aW9uCisgICA8aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL3N1c3YzeHNoL2ZjaGRpci5odG1sPi4gICovCitleHRlcm4gaW50IGZjaGRpciAoaW50IC8qZmQqLyk7CisKKyMgIGRlZmluZSBjbG9zZSBycGxfY2xvc2UKK2V4dGVybiBpbnQgY2xvc2UgKGludCk7CisjICBkZWZpbmUgZHVwIHJwbF9kdXAKK2V4dGVybiBpbnQgZHVwIChpbnQpOworIyAgZGVmaW5lIGR1cDIgcnBsX2R1cDIKK2V4dGVybiBpbnQgZHVwMiAoaW50LCBpbnQpOworCisjIGVuZGlmCisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGZjaGRpcgorIyBkZWZpbmUgZmNoZGlyKGYpIFwKKyAgICAoR0xfTElOS19XQVJOSU5HICgiZmNoZGlyIGlzIHVucG9ydGFibGUgLSAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZmNoZGlyIGZvciBwb3J0YWJpbGl0eSIpLCBcCisgICAgIGZjaGRpciAoZikpCisjZW5kaWYKKworCisjaWYgQEdOVUxJQl9GVFJVTkNBVEVACisjIGlmICFASEFWRV9GVFJVTkNBVEVACisvKiBDaGFuZ2UgdGhlIHNpemUgb2YgdGhlIGZpbGUgdG8gd2hpY2ggRkQgaXMgb3BlbmVkIHRvIGJlY29tZSBlcXVhbCB0byBMRU5HVEguCisgICBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCBvdGhlcndpc2UgLTEgYW5kIGVycm5vIHNldC4KKyAgIFNlZSB0aGUgUE9TSVg6MjAwMSBzcGVjaWZpY2F0aW9uCisgICA8aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL3N1c3YzeHNoL2Z0cnVuY2F0ZS5odG1sPi4gICovCitleHRlcm4gaW50IGZ0cnVuY2F0ZSAoaW50IGZkLCBvZmZfdCBsZW5ndGgpOworIyBlbmRpZgorI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBmdHJ1bmNhdGUKKyMgZGVmaW5lIGZ0cnVuY2F0ZShmLGwpIFwKKyAgICAoR0xfTElOS19XQVJOSU5HICgiZnRydW5jYXRlIGlzIHVucG9ydGFibGUgLSAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZnRydW5jYXRlIGZvciBwb3J0YWJpbGl0eSIpLCBcCisgICAgIGZ0cnVuY2F0ZSAoZiwgbCkpCisjZW5kaWYKKworCisjaWYgQEdOVUxJQl9HRVRDV0RACisvKiBJbmNsdWRlIHRoZSBoZWFkZXJzIHRoYXQgbWlnaHQgZGVjbGFyZSBnZXRjd2Qgc28gdGhhdCB0aGV5IHdpbGwgbm90CisgICBjYXVzZSBjb25mdXNpb24gaWYgaW5jbHVkZWQgYWZ0ZXIgdGhpcyBmaWxlLiAgKi8KKyMgaW5jbHVkZSA8c3RkbGliLmg+CisjIGlmIEBSRVBMQUNFX0dFVENXREAKKy8qIEdldCB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSwgYW5kIHB1dCBpdCBpbiBTSVpFIGJ5dGVzCisgICBvZiBCVUYuCisgICBSZXR1cm4gQlVGIGlmIHN1Y2Nlc3NmdWwsIG9yIE5VTEwgaWYgdGhlIGRpcmVjdG9yeSBjb3VsZG4ndCBiZSBkZXRlcm1pbmVkCisgICBvciBTSVpFIHdhcyB0b28gc21hbGwuCisgICBTZWUgdGhlIFBPU0lYOjIwMDEgc3BlY2lmaWNhdGlvbgorICAgPGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9zdXN2M3hzaC9nZXRjd2QuaHRtbD4uCisgICBBZGRpdGlvbmFsbHksIHRoZSBnbnVsaWIgbW9kdWxlICdnZXRjd2QnIGd1YXJhbnRlZXMgdGhlIGZvbGxvd2luZyBHTlUKKyAgIGV4dGVuc2lvbjogSWYgQlVGIGlzIE5VTEwsIGFuIGFycmF5IGlzIGFsbG9jYXRlZCB3aXRoICdtYWxsb2MnOyB0aGUgYXJyYXkKKyAgIGlzIFNJWkUgYnl0ZXMgbG9uZywgdW5sZXNzIFNJWkUgPT0gMCwgaW4gd2hpY2ggY2FzZSBpdCBpcyBhcyBiaWcgYXMKKyAgIG5lY2Vzc2FyeS4gICovCisjICBkZWZpbmUgZ2V0Y3dkIHJwbF9nZXRjd2QKK2V4dGVybiBjaGFyICogZ2V0Y3dkIChjaGFyICpidWYsIHNpemVfdCBzaXplKTsKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZ2V0Y3dkCisjIGRlZmluZSBnZXRjd2QoYixzKSBcCisgICAgKEdMX0xJTktfV0FSTklORyAoImdldGN3ZCBpcyB1bnBvcnRhYmxlIC0gIiBcCisgICAgICAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGdldGN3ZCBmb3IgcG9ydGFiaWxpdHkiKSwgXAorICAgICBnZXRjd2QgKGIsIHMpKQorI2VuZGlmCisKKworI2lmIEBHTlVMSUJfR0VUTE9HSU5fUkAKKy8qIENvcGllcyB0aGUgdXNlcidzIGxvZ2luIG5hbWUgdG8gTkFNRS4KKyAgIFRoZSBhcnJheSBwb2ludGVkIHRvIGJ5IE5BTUUgaGFzIHJvb20gZm9yIFNJWkUgYnl0ZXMuCisKKyAgIFJldHVybnMgMCBpZiBzdWNjZXNzZnVsLiAgVXBvbiBlcnJvciwgYW4gZXJyb3IgbnVtYmVyIGlzIHJldHVybmVkLCBvciAtMSBpbgorICAgdGhlIGNhc2UgdGhhdCB0aGUgbG9naW4gbmFtZSBjYW5ub3QgYmUgZm91bmQgYnV0IG5vIHNwZWNpZmljIGVycm9yIGlzCisgICBwcm92aWRlZCAodGhpcyBjYXNlIGlzIGhvcGVmdWxseSByYXJlIGJ1dCBpcyBsZWZ0IG9wZW4gYnkgdGhlIFBPU0lYIHNwZWMpLgorCisgICBTZWUgPGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9zdXN2M3hzaC9nZXRsb2dpbi5odG1sPi4KKyAqLworIyBpZiAhQEhBVkVfREVDTF9HRVRMT0dJTl9SQAorIyAgaW5jbHVkZSA8c3RkZGVmLmg+CitleHRlcm4gaW50IGdldGxvZ2luX3IgKGNoYXIgKm5hbWUsIHNpemVfdCBzaXplKTsKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgZ2V0bG9naW5fcgorIyBkZWZpbmUgZ2V0bG9naW5fcihuLHMpIFwKKyAgICAoR0xfTElOS19XQVJOSU5HICgiZ2V0bG9naW5fciBpcyB1bnBvcnRhYmxlIC0gIiBcCisgICAgICAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGdldGxvZ2luX3IgZm9yIHBvcnRhYmlsaXR5IiksIFwKKyAgICAgZ2V0bG9naW5fciAobiwgcykpCisjZW5kaWYKKworCisjaWYgQEdOVUxJQl9SRUFETElOS0AKKy8qIFJlYWQgdGhlIGNvbnRlbnRzIG9mIHRoZSBzeW1ib2xpYyBsaW5rIEZJTEUgYW5kIHBsYWNlIHRoZSBmaXJzdCBCVUZTSVpFCisgICBieXRlcyBvZiBpdCBpbnRvIEJVRi4gIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHBsYWNlZCBpbnRvIEJVRiBpZgorICAgc3VjY2Vzc2Z1bCwgb3RoZXJ3aXNlIC0xIGFuZCBlcnJubyBzZXQuCisgICBTZWUgdGhlIFBPU0lYOjIwMDEgc3BlY2lmaWNhdGlvbgorICAgPGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9zdXN2M3hzaC9yZWFkbGluay5odG1sPi4gICovCisjIGlmICFASEFWRV9SRUFETElOS0AKKyMgIGluY2x1ZGUgPHN0ZGRlZi5oPgorZXh0ZXJuIGludCByZWFkbGluayAoY29uc3QgY2hhciAqZmlsZSwgY2hhciAqYnVmLCBzaXplX3QgYnVmc2l6ZSk7CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHJlYWRsaW5rCisjIGRlZmluZSByZWFkbGluayhmLGIscykgXAorICAgIChHTF9MSU5LX1dBUk5JTkcgKCJyZWFkbGluayBpcyB1bnBvcnRhYmxlIC0gIiBcCisgICAgICAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHJlYWRsaW5rIGZvciBwb3J0YWJpbGl0eSIpLCBcCisgICAgIHJlYWRsaW5rIChmLCBiLCBzKSkKKyNlbmRpZgorCisKKyNpZiBAR05VTElCX1NMRUVQQAorLyogUGF1c2UgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgY3VycmVudCB0aHJlYWQgZm9yIE4gc2Vjb25kcy4KKyAgIFJldHVybnMgdGhlIG51bWJlciBvZiBzZWNvbmRzIGxlZnQgdG8gc2xlZXAuCisgICBTZWUgdGhlIFBPU0lYOjIwMDEgc3BlY2lmaWNhdGlvbgorICAgPGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9zdXN2M3hzaC9zbGVlcC5odG1sPi4gICovCisjIGlmICFASEFWRV9TTEVFUEAKK2V4dGVybiB1bnNpZ25lZCBpbnQgc2xlZXAgKHVuc2lnbmVkIGludCBuKTsKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgc2xlZXAKKyMgZGVmaW5lIHNsZWVwKG4pIFwKKyAgICAoR0xfTElOS19XQVJOSU5HICgic2xlZXAgaXMgdW5wb3J0YWJsZSAtICIgXAorICAgICAgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBzbGVlcCBmb3IgcG9ydGFiaWxpdHkiKSwgXAorICAgICBzbGVlcCAobikpCisjZW5kaWYKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisKKyNlbmRpZiAvKiBfR0xfVU5JU1REX0ggKi8KZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWIvdXRpbWUuYyBiL3BhcnRlZC0xLjguNy9saWIvdXRpbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzNhNWZiCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYi91dGltZS5jCkBAIC0wLDAgKzEsMTA5IEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTgsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDYgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKworLyogZGVyaXZlZCBmcm9tIGEgZnVuY3Rpb24gaW4gdG91Y2guYyAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjdW5kZWYgdXRpbWUKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjaWZkZWYgSEFWRV9VVElNRV9ICisjIGluY2x1ZGUgPHV0aW1lLmg+CisjZW5kaWYKKworI2lmICFIQVZFX1VUSU1FU19OVUxMCisjIGluY2x1ZGUgPHN5cy9zdGF0Lmg+CisjIGluY2x1ZGUgPGZjbnRsLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlICJmdWxsLXdyaXRlLmgiCisjaW5jbHVkZSAic2FmZS1yZWFkLmgiCisKKy8qIFNvbWUgc3lzdGVtcyAoZXZlbiBzb21lIHRoYXQgZG8gaGF2ZSA8dXRpbWUuaD4pIGRvbid0IGRlY2xhcmUgdGhpcworICAgc3RydWN0dXJlIGFueXdoZXJlLiAgKi8KKyNpZm5kZWYgSEFWRV9TVFJVQ1RfVVRJTUJVRgorc3RydWN0IHV0aW1idWYKK3sKKyAgbG9uZyBhY3RpbWU7CisgIGxvbmcgbW9kdGltZTsKK307CisjZW5kaWYKKworLyogVGhlIHJlc3VsdHMgb2Ygb3BlbigpIGluIHRoaXMgZmlsZSBhcmUgbm90IHVzZWQgd2l0aCBmY2hkaXIsCisgICB0aGVyZWZvcmUgc2F2ZSBzb21lIHVubmVjZXNzYXJ5IHdvcmsgaW4gZmNoZGlyLmMuICAqLworI3VuZGVmIG9wZW4KKyN1bmRlZiBjbG9zZQorCisvKiBFbXVsYXRlIHV0aW1lIChmaWxlLCBOVUxMKSBmb3Igc3lzdGVtcyAobGlrZSA0LjNCU0QpIHRoYXQgZG8gbm90CisgICBpbnRlcnByZXQgaXQgdG8gc2V0IHRoZSBhY2Nlc3MgYW5kIG1vZGlmaWNhdGlvbiB0aW1lcyBvZiBGSUxFIHRvCisgICB0aGUgY3VycmVudCB0aW1lLiAgUmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bCwgLTEgaWYgbm90LiAqLworCitzdGF0aWMgaW50Cit1dGltZV9udWxsIChjb25zdCBjaGFyICpmaWxlKQoreworI2lmIEhBVkVfVVRJTUVTX05VTEwKKyAgcmV0dXJuIHV0aW1lcyAoZmlsZSwgMCk7CisjZWxzZQorICBpbnQgZmQ7CisgIGNoYXIgYzsKKyAgaW50IHN0YXR1cyA9IDA7CisgIHN0cnVjdCBzdGF0IHN0OworICBpbnQgc2F2ZWRfZXJybm8gPSAwOworCisgIGZkID0gb3BlbiAoZmlsZSwgT19SRFdSKTsKKyAgaWYgKGZkIDwgMAorICAgICAgfHwgZnN0YXQgKGZkLCAmc3QpIDwgMAorICAgICAgfHwgc2FmZV9yZWFkIChmZCwgJmMsIHNpemVvZiBjKSA9PSBTQUZFX1JFQURfRVJST1IKKyAgICAgIHx8IGxzZWVrIChmZCwgKG9mZl90KSAwLCBTRUVLX1NFVCkgPCAwCisgICAgICB8fCBmdWxsX3dyaXRlIChmZCwgJmMsIHNpemVvZiBjKSAhPSBzaXplb2YgYworICAgICAgLyogTWF5YmUgZG8gdGhpcyAtLSBpdCdzIG5lY2Vzc2FyeSBvbiBTdW5PUyA0LjEuMyB3aXRoIHNvbWUgY29tYmluYXRpb24KKwkgb2YgcGF0Y2hlcywgYnV0IHRoYXQgc3lzdGVtIGRvZXNuJ3QgdXNlIHRoaXMgY29kZTogaXQgaGFzIHV0aW1lcy4KKwkgfHwgZnN5bmMgKGZkKSA8IDAKKyAgICAgICovCisgICAgICB8fCAoc3Quc3Rfc2l6ZSA9PSAwICYmIGZ0cnVuY2F0ZSAoZmQsIHN0LnN0X3NpemUpIDwgMCkpCisgICAgeworICAgICAgc2F2ZWRfZXJybm8gPSBlcnJubzsKKyAgICAgIHN0YXR1cyA9IC0xOworICAgIH0KKworICBpZiAoMCA8PSBmZCkKKyAgICB7CisgICAgICBpZiAoY2xvc2UgKGZkKSA8IDApCisJc3RhdHVzID0gLTE7CisKKyAgICAgIC8qIElmIHRoZXJlIHdhcyBhIHByaW9yIGZhaWx1cmUsIHVzZSB0aGUgc2F2ZWQgZXJybm8gdmFsdWUuCisJIEJ1dCBpZiB0aGUgb25seSBmYWlsdXJlIHdhcyBpbiB0aGUgY2xvc2UsIGRvbid0IGNoYW5nZSBlcnJuby4gICovCisgICAgICBpZiAoc2F2ZWRfZXJybm8pCisJZXJybm8gPSBzYXZlZF9lcnJubzsKKyAgICB9CisKKyAgcmV0dXJuIHN0YXR1czsKKyNlbmRpZgorfQorCitpbnQKK3JwbF91dGltZSAoY29uc3QgY2hhciAqZmlsZSwgY29uc3Qgc3RydWN0IHV0aW1idWYgKnRpbWVzKQoreworICBpZiAodGltZXMpCisgICAgcmV0dXJuIHV0aW1lIChmaWxlLCB0aW1lcyk7CisKKyAgcmV0dXJuIHV0aW1lX251bGwgKGZpbGUpOworfQpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYi92ZXJzaW9uLWV0Yy1mc2YuYyBiL3BhcnRlZC0xLjguNy9saWIvdmVyc2lvbi1ldGMtZnNmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI1ZWI2NQotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWIvdmVyc2lvbi1ldGMtZnNmLmMKQEAgLTAsMCArMSwzMSBAQAorLyogVmFyaWFibGUgd2l0aCBGU0YgY29weXJpZ2h0IGluZm9ybWF0aW9uLCBmb3IgdmVyc2lvbi1ldGMuCisgICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisKKy8qIFdyaXR0ZW4gYnkgSmltIE1leWVyaW5nLiAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKy8qIFNwZWNpZmljYXRpb24uICAqLworI2luY2x1ZGUgInZlcnNpb24tZXRjLmgiCisKKy8qIERlZmF1bHQgY29weXJpZ2h0IGdvZXMgdG8gdGhlIEZTRi4gKi8KKworY29uc3QgY2hhciB2ZXJzaW9uX2V0Y19jb3B5cmlnaHRbXSA9CisgIC8qIERvICpub3QqIG1hcmsgdGhpcyBzdHJpbmcgZm9yIHRyYW5zbGF0aW9uLiAgJXMgaXMgYSBjb3B5cmlnaHQKKyAgICAgc3ltYm9sIHN1aXRhYmxlIGZvciB0aGlzIGxvY2FsZSwgYW5kICVkIGlzIHRoZSBjb3B5cmlnaHQKKyAgICAgeWVhci4gICovCisgICJDb3B5cmlnaHQgJXMgJWQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIjsKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWIvdmVyc2lvbi1ldGMuYyBiL3BhcnRlZC0xLjguNy9saWIvdmVyc2lvbi1ldGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWU4MmM0Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYi92ZXJzaW9uLWV0Yy5jCkBAIC0wLDAgKzEsMTczIEBACisvKiBVdGlsaXR5IHRvIGhlbHAgcHJpbnQgLS12ZXJzaW9uIG91dHB1dCBpbiBhIGNvbnNpc3RlbnQgZm9ybWF0LgorICAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworCisvKiBXcml0dGVuIGJ5IEppbSBNZXllcmluZy4gKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisvKiBTcGVjaWZpY2F0aW9uLiAgKi8KKyNpbmNsdWRlICJ2ZXJzaW9uLWV0Yy5oIgorCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2lmIFVTRV9VTkxPQ0tFRF9JTworIyBpbmNsdWRlICJ1bmxvY2tlZC1pby5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJnZXR0ZXh0LmgiCisjZGVmaW5lIF8obXNnaWQpIGdldHRleHQgKG1zZ2lkKQorCitlbnVtIHsgQ09QWVJJR0hUX1lFQVIgPSAyMDA3IH07CisKKy8qIExpa2UgdmVyc2lvbl9ldGMsIGJlbG93LCBidXQgd2l0aCB0aGUgTlVMTC10ZXJtaW5hdGVkIGF1dGhvciBsaXN0CisgICBwcm92aWRlZCB2aWEgYSB2YXJpYWJsZSBvZiB0eXBlIHZhX2xpc3QuICAqLwordm9pZAordmVyc2lvbl9ldGNfdmEgKEZJTEUgKnN0cmVhbSwKKwkJY29uc3QgY2hhciAqY29tbWFuZF9uYW1lLCBjb25zdCBjaGFyICpwYWNrYWdlLAorCQljb25zdCBjaGFyICp2ZXJzaW9uLCB2YV9saXN0IGF1dGhvcnMpCit7CisgIHNpemVfdCBuX2F1dGhvcnM7CisKKyAgLyogQ291bnQgdGhlIG51bWJlciBvZiBhdXRob3JzLiAgKi8KKyAgeworICAgIHZhX2xpc3QgdG1wX2F1dGhvcnM7CisKKyAgICB2YV9jb3B5ICh0bXBfYXV0aG9ycywgYXV0aG9ycyk7CisKKyAgICBuX2F1dGhvcnMgPSAwOworICAgIHdoaWxlICh2YV9hcmcgKHRtcF9hdXRob3JzLCBjb25zdCBjaGFyICopICE9IE5VTEwpCisgICAgICArK25fYXV0aG9yczsKKyAgfQorCisgIGlmIChjb21tYW5kX25hbWUpCisgICAgZnByaW50ZiAoc3RyZWFtLCAiJXMgKCVzKSAlc1xuIiwgY29tbWFuZF9uYW1lLCBwYWNrYWdlLCB2ZXJzaW9uKTsKKyAgZWxzZQorICAgIGZwcmludGYgKHN0cmVhbSwgIiVzICVzXG4iLCBwYWNrYWdlLCB2ZXJzaW9uKTsKKworICAvKiBUUkFOU0xBVE9SUzogVHJhbnNsYXRlICIoQykiIHRvIHRoZSBjb3B5cmlnaHQgc3ltYm9sCisgICAgIChDLWluLWEtY2lyY2xlKSwgaWYgdGhpcyBzeW1ib2wgaXMgYXZhaWxhYmxlIGluIHRoZSB1c2VyJ3MKKyAgICAgbG9jYWxlLiAgT3RoZXJ3aXNlLCBkbyBub3QgdHJhbnNsYXRlICIoQykiOyBsZWF2ZSBpdCBhcy1pcy4gICovCisgIGZwcmludGYgKHN0cmVhbSwgdmVyc2lvbl9ldGNfY29weXJpZ2h0LCBfKCIoQykiKSwgQ09QWVJJR0hUX1lFQVIpOworCisgIGZwdXRzIChfKCJcCitcblwKK0xpY2Vuc2UgR1BMdjIrOiBHTlUgR1BMIHZlcnNpb24gMiBvciBsYXRlciA8aHR0cDovL2dudS5vcmcvbGljZW5zZXMvZ3BsLmh0bWw+XG5cCitUaGlzIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBhcmUgZnJlZSB0byBjaGFuZ2UgYW5kIHJlZGlzdHJpYnV0ZSBpdC5cblwKK1RoZXJlIGlzIE5PIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXcuXG5cCitcblwKKyIpLAorCSBzdHJlYW0pOworCisgIHN3aXRjaCAobl9hdXRob3JzKQorICAgIHsKKyAgICBjYXNlIDA6CisgICAgICAvKiBUaGUgY2FsbGVyIG11c3QgcHJvdmlkZSBhdCBsZWFzdCBvbmUgYXV0aG9yIG5hbWUuICAqLworICAgICAgYWJvcnQgKCk7CisgICAgY2FzZSAxOgorICAgICAgLyogVFJBTlNMQVRPUlM6ICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuICAqLworICAgICAgdmZwcmludGYgKHN0cmVhbSwgXygiV3JpdHRlbiBieSAlcy5cbiIpLCBhdXRob3JzKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMjoKKyAgICAgIC8qIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuICAqLworICAgICAgdmZwcmludGYgKHN0cmVhbSwgXygiV3JpdHRlbiBieSAlcyBhbmQgJXMuXG4iKSwgYXV0aG9ycyk7CisgICAgICBicmVhazsKKyAgICBjYXNlIDM6CisgICAgICAvKiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLiAgKi8KKyAgICAgIHZmcHJpbnRmIChzdHJlYW0sIF8oIldyaXR0ZW4gYnkgJXMsICVzLCBhbmQgJXMuXG4iKSwgYXV0aG9ycyk7CisgICAgICBicmVhazsKKyAgICBjYXNlIDQ6CisgICAgICAvKiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorCSBZb3UgY2FuIHVzZSBsaW5lIGJyZWFrcywgZXN0aW1hdGluZyB0aGF0IGVhY2ggYXV0aG9yIG5hbWUgb2NjdXBpZXMKKwkgY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLiAgKi8KKyAgICAgIHZmcHJpbnRmIChzdHJlYW0sIF8oIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbmFuZCAlcy5cbiIpLCBhdXRob3JzKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgNToKKyAgICAgIC8qIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisJIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworCSBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuICAqLworICAgICAgdmZwcmludGYgKHN0cmVhbSwgXygiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuJXMsIGFuZCAlcy5cbiIpLCBhdXRob3JzKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgNjoKKyAgICAgIC8qIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisJIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworCSBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuICAqLworICAgICAgdmZwcmludGYgKHN0cmVhbSwgXygiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuJXMsICVzLCBhbmQgJXMuXG4iKSwKKwkJYXV0aG9ycyk7CisgICAgICBicmVhazsKKyAgICBjYXNlIDc6CisgICAgICAvKiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorCSBZb3UgY2FuIHVzZSBsaW5lIGJyZWFrcywgZXN0aW1hdGluZyB0aGF0IGVhY2ggYXV0aG9yIG5hbWUgb2NjdXBpZXMKKwkgY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLiAgKi8KKyAgICAgIHZmcHJpbnRmIChzdHJlYW0sIF8oIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiVzLCAlcywgJXMsIGFuZCAlcy5cbiIpLAorCQlhdXRob3JzKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgODoKKyAgICAgIC8qIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisJIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworCSBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuICAqLworICAgICAgdmZwcmludGYgKHN0cmVhbSwgXygiXAorV3JpdHRlbiBieSAlcywgJXMsICVzLFxuJXMsICVzLCAlcywgJXMsXG5hbmQgJXMuXG4iKSwKKwkJYXV0aG9ycyk7CisgICAgICBicmVhazsKKyAgICBjYXNlIDk6CisgICAgICAvKiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorCSBZb3UgY2FuIHVzZSBsaW5lIGJyZWFrcywgZXN0aW1hdGluZyB0aGF0IGVhY2ggYXV0aG9yIG5hbWUgb2NjdXBpZXMKKwkgY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLiAgKi8KKyAgICAgIHZmcHJpbnRmIChzdHJlYW0sIF8oIlwKK1dyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiVzLCAlcywgJXMsICVzLFxuJXMsIGFuZCAlcy5cbiIpLAorCQlhdXRob3JzKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAvKiAxMCBvciBtb3JlIGF1dGhvcnMuICBVc2UgYW4gYWJicmV2aWF0aW9uLCBzaW5jZSB0aGUgaHVtYW4gcmVhZGVyCisJIHdpbGwgcHJvYmFibHkgbm90IHdhbnQgdG8gcmVhZCB0aGUgZW50aXJlIGxpc3QgYW55d2F5LiAgKi8KKyAgICAgIC8qIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisJIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworCSBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuICAqLworICAgICAgdmZwcmludGYgKHN0cmVhbSwgXygiXAorV3JpdHRlbiBieSAlcywgJXMsICVzLFxuJXMsICVzLCAlcywgJXMsXG4lcywgJXMsIGFuZCBvdGhlcnMuXG4iKSwKKwkJYXV0aG9ycyk7CisgICAgICBicmVhazsKKyAgICB9CisgIHZhX2VuZCAoYXV0aG9ycyk7Cit9CisKKworLyogRGlzcGxheSB0aGUgLS12ZXJzaW9uIGluZm9ybWF0aW9uIHRoZSBzdGFuZGFyZCB3YXkuCisKKyAgIElmIENPTU1BTkRfTkFNRSBpcyBOVUxMLCB0aGUgUEFDS0FHRSBpcyBhc3VtZWQgdG8gYmUgdGhlIG5hbWUgb2YKKyAgIHRoZSBwcm9ncmFtLiAgVGhlIGZvcm1hdHMgYXJlIHRoZXJlZm9yZToKKworICAgUEFDS0FHRSBWRVJTSU9OCisKKyAgIG9yCisKKyAgIENPTU1BTkRfTkFNRSAoUEFDS0FHRSkgVkVSU0lPTi4KKworICAgVGhlIGF1dGhvciBuYW1lcyBhcmUgcGFzc2VkIGFzIHNlcGFyYXRlIGFyZ3VtZW50cywgd2l0aCBhbiBhZGRpdGlvbmFsCisgICBOVUxMIGFyZ3VtZW50IGF0IHRoZSBlbmQuICAqLwordm9pZAordmVyc2lvbl9ldGMgKEZJTEUgKnN0cmVhbSwKKwkgICAgIGNvbnN0IGNoYXIgKmNvbW1hbmRfbmFtZSwgY29uc3QgY2hhciAqcGFja2FnZSwKKwkgICAgIGNvbnN0IGNoYXIgKnZlcnNpb24sIC8qIGNvbnN0IGNoYXIgKmF1dGhvcjEsIC4uLiovIC4uLikKK3sKKyAgdmFfbGlzdCBhdXRob3JzOworCisgIHZhX3N0YXJ0IChhdXRob3JzLCB2ZXJzaW9uKTsKKyAgdmVyc2lvbl9ldGNfdmEgKHN0cmVhbSwgY29tbWFuZF9uYW1lLCBwYWNrYWdlLCB2ZXJzaW9uLCBhdXRob3JzKTsKK30KZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWIvdmVyc2lvbi1ldGMuaCBiL3BhcnRlZC0xLjguNy9saWIvdmVyc2lvbi1ldGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGRhNTM1Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYi92ZXJzaW9uLWV0Yy5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qIFV0aWxpdHkgdG8gaGVscCBwcmludCAtLXZlcnNpb24gb3V0cHV0IGluIGEgY29uc2lzdGVudCBmb3JtYXQuCisgICBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDMsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworCisvKiBXcml0dGVuIGJ5IEppbSBNZXllcmluZy4gKi8KKworI2lmbmRlZiBWRVJTSU9OX0VUQ19ICisjIGRlZmluZSBWRVJTSU9OX0VUQ19IIDEKKworIyBpbmNsdWRlIDxzdGRhcmcuaD4KKyMgaW5jbHVkZSA8c3RkaW8uaD4KKworZXh0ZXJuIGNvbnN0IGNoYXIgdmVyc2lvbl9ldGNfY29weXJpZ2h0W107CisKK2V4dGVybiB2b2lkIHZlcnNpb25fZXRjX3ZhIChGSUxFICpzdHJlYW0sCisJCQkgICAgY29uc3QgY2hhciAqY29tbWFuZF9uYW1lLCBjb25zdCBjaGFyICpwYWNrYWdlLAorCQkJICAgIGNvbnN0IGNoYXIgKnZlcnNpb24sIHZhX2xpc3QgYXV0aG9ycyk7CisKK2V4dGVybiB2b2lkIHZlcnNpb25fZXRjIChGSUxFICpzdHJlYW0sCisJCQkgY29uc3QgY2hhciAqY29tbWFuZF9uYW1lLCBjb25zdCBjaGFyICpwYWNrYWdlLAorCQkJIGNvbnN0IGNoYXIgKnZlcnNpb24sCisJCSAgICAgICAgIC8qIGNvbnN0IGNoYXIgKmF1dGhvcjEsIC4uLiovIC4uLik7CisKKyNlbmRpZiAvKiBWRVJTSU9OX0VUQ19IICovCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGliL3djaGFyXy5oIGIvcGFydGVkLTEuOC43L2xpYi93Y2hhcl8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTkzZDA3Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYi93Y2hhcl8uaApAQCAtMCwwICsxLDQ5IEBACisvKiBBIHN1YnN0aXR1dGUgZm9yIElTTyBDOTkgPHdjaGFyLmg+LCBmb3IgcGxhdGZvcm1zIHRoYXQgaGF2ZSBpc3N1ZXMuCisKKyAgIENvcHlyaWdodCAoQykgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisKKy8qIFdyaXR0ZW4gYnkgRXJpYyBCbGFrZS4gICovCisKKy8qCisgKiBJU08gQyA5OSA8d2NoYXIuaD4gZm9yIHBsYXRmb3JtcyB0aGF0IGhhdmUgaXNzdWVzLgorICogPGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9zdXN2M3hiZC93Y2hhci5oLmh0bWw+CisgKgorICogRm9yIG5vdywgdGhpcyBqdXN0IGVuc3VyZXMgcHJvcGVyIHByZXJlcXVpc2l0ZSBpbmNsdXNpb24gb3JkZXIuCisgKi8KKworI2lmIGRlZmluZWQgX19ERUNDICYmIF9fREVDQ19WRVIgPj0gNjAwMDAwMDAKKyMgaW5jbHVkZSA8c3RkaW8uaD4KKyMgaW5jbHVkZV9uZXh0IDx3Y2hhci5oPgorI2VuZGlmCisKKyNpZm5kZWYgX0dMX1dDSEFSX0gKKyNkZWZpbmUgX0dMX1dDSEFSX0gKKworLyogVHJ1NjQgd2l0aCBEZXNrdG9wIFRvb2xraXQgQyBoYXMgYSBidWc6IDxzdGRpby5oPiBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZQorICAgPHdjaGFyLmg+LgorICAgQlNEL09TIDQuMC4xIGhhcyBhIGJ1ZzogPHN0ZGRlZi5oPiwgPHN0ZGlvLmg+IGFuZCA8dGltZS5oPiBtdXN0IGJlCisgICBpbmNsdWRlZCBiZWZvcmUgPHdjaGFyLmg+LiAgKi8KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKworLyogSW5jbHVkZSB0aGUgb3JpZ2luYWwgPHdjaGFyLmg+LiAgKi8KKyNpZiAhKGRlZmluZWQgX19ERUNDICYmIF9fREVDQ19WRVIgPj0gNjAwMDAwMDApCisjIGluY2x1ZGUgQEFCU09MVVRFX1dDSEFSX0hACisjZW5kaWYKKworI2VuZGlmIC8qIF9HTF9XQ0hBUl9IICovCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGliL3djdHlwZV8uaCBiL3BhcnRlZC0xLjguNy9saWIvd2N0eXBlXy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMGE2OGUKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGliL3djdHlwZV8uaApAQCAtMCwwICsxLDE2NSBAQAorLyogQSBzdWJzdGl0dXRlIGZvciBJU08gQzk5IDx3Y3R5cGUuaD4sIGZvciBwbGF0Zm9ybXMgdGhhdCBsYWNrIGl0LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworCisvKiBXcml0dGVuIGJ5IEJydW5vIEhhaWJsZSBhbmQgUGF1bCBFZ2dlcnQuICAqLworCisvKgorICogSVNPIEMgOTkgPHdjdHlwZS5oPiBmb3IgcGxhdGZvcm1zIHRoYXQgbGFjayBpdC4KKyAqIDxodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvc3VzdjN4YmQvd2N0eXBlLmguaHRtbD4KKyAqCisgKiBpc3djdHlwZSwgdG93Y3RyYW5zLCB0b3dsb3dlciwgdG93dXBwZXIsIHdjdHJhbnMsIHdjdHlwZSwKKyAqIHdjdHJhbnNfdCwgYW5kIHdjdHlwZV90IGFyZSBub3QgeWV0IGltcGxlbWVudGVkLgorICovCisKKyNpZiBASEFWRV9XSU5UX1RACisvKiBTb2xhcmlzIDIuNSBoYXMgYSBidWc6IDx3Y2hhci5oPiBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZSA8d2N0eXBlLmg+LgorICAgVHJ1NjQgd2l0aCBEZXNrdG9wIFRvb2xraXQgQyBoYXMgYSBidWc6IDxzdGRpby5oPiBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZQorICAgPHdjaGFyLmg+LgorICAgQlNEL09TIDQuMC4xIGhhcyBhIGJ1ZzogPHN0ZGRlZi5oPiwgPHN0ZGlvLmg+IGFuZCA8dGltZS5oPiBtdXN0IGJlCisgICBpbmNsdWRlZCBiZWZvcmUgPHdjaGFyLmg+LiAgKi8KKyMgaW5jbHVkZSA8c3RkZGVmLmg+CisjIGluY2x1ZGUgPHN0ZGlvLmg+CisjIGluY2x1ZGUgPHRpbWUuaD4KKyMgaW5jbHVkZSA8d2NoYXIuaD4KKyNlbmRpZgorCisjaWYgQEhBVkVfV0NUWVBFX0hACisjIGlmIGRlZmluZWQgX19ERUNDICYmIF9fREVDQ19WRVIgPj0gNjAwMDAwMDAKKyMgIGluY2x1ZGVfbmV4dCA8d2N0eXBlLmg+CisjIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBfR0xfV0NUWVBFX0gKKyNkZWZpbmUgX0dMX1dDVFlQRV9ICisKKy8qIEluY2x1ZGUgdGhlIG9yaWdpbmFsIDx3Y3R5cGUuaD4gaWYgaXQgZXhpc3RzLgorICAgQmVPUyA1IGhhcyB0aGUgZnVuY3Rpb25zIGJ1dCBubyA8d2N0eXBlLmg+LiAgKi8KKyNpZiBASEFWRV9XQ1RZUEVfSEAKKyMgaWYgIShkZWZpbmVkIF9fREVDQyAmJiBfX0RFQ0NfVkVSID49IDYwMDAwMDAwKQorIyAgaW5jbHVkZSBAQUJTT0xVVEVfV0NUWVBFX0hACisjIGVuZGlmCisjZW5kaWYKKworI2lmIEBIQVZFX1dJTlRfVEAKK3R5cGVkZWYgd2ludF90IF9fd2N0eXBlX3dpbnRfdDsKKyNlbHNlCit0eXBlZGVmIGludCBfX3djdHlwZV93aW50X3Q7CisjZW5kaWYKKworLyogRnJlZUJTRCA0LjQgdG8gNC4xMSBoYXMgPHdjdHlwZS5oPiBidXQgbGFja3MgdGhlIGZ1bmN0aW9ucy4KKyAgIEFzc3VtZSBhbGwgMTIgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCB0aGUgc2FtZSB3YXksIG9yIG5vdCBhdCBhbGwuICAqLworI2lmICEgQEhBVkVfSVNXQ05UUkxACisKKy8qIElSSVggNS4zIGhhcyBtYWNyb3MgYnV0IG5vIGZ1bmN0aW9ucywgaXRzIGlzdyogbWFjcm9zIHJlZmVyIHRvIGFuCisgICB1bmRlZmluZWQgdmFyaWFibGUgX2N0bXBfIGFuZCB0byA8Y3R5cGUuaD4gbWFjcm9zIGxpa2UgX1AsIGFuZCB0aGV5CisgICByZWZlciB0byBzeXN0ZW0gZnVuY3Rpb25zIGxpa2UgX2lzd2N0eXBlIHRoYXQgYXJlIG5vdCBpbiB0aGUKKyAgIHN0YW5kYXJkIEMgbGlicmFyeS4gIFJhdGhlciB0aGFuIHRyeSB0byBnZXQgYW5jaWVudCBidWdneQorICAgaW1wbGVtZW50YXRpb25zIGxpa2UgdGhpcyB0byB3b3JrLCBqdXN0IGRpc2FibGUgdGhlbS4gICovCisjICB1bmRlZiBpc3dhbG51bQorIyAgdW5kZWYgaXN3YWxwaGEKKyMgIHVuZGVmIGlzd2JsYW5rCisjICB1bmRlZiBpc3djbnRybAorIyAgdW5kZWYgaXN3ZGlnaXQKKyMgIHVuZGVmIGlzd2dyYXBoCisjICB1bmRlZiBpc3dsb3dlcgorIyAgdW5kZWYgaXN3cHJpbnQKKyMgIHVuZGVmIGlzd3B1bmN0CisjICB1bmRlZiBpc3dzcGFjZQorIyAgdW5kZWYgaXN3dXBwZXIKKyMgIHVuZGVmIGlzd3hkaWdpdAorCitzdGF0aWMgaW5saW5lIGludAoraXN3YWxudW0gKF9fd2N0eXBlX3dpbnRfdCB3YykKK3sKKyAgcmV0dXJuICgod2MgPj0gJzAnICYmIHdjIDw9ICc5JykKKwkgIHx8ICgod2MgJiB+MHgyMCkgPj0gJ0EnICYmICh3YyAmIH4weDIwKSA8PSAnWicpKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2lzd2FscGhhIChfX3djdHlwZV93aW50X3Qgd2MpCit7CisgIHJldHVybiAod2MgJiB+MHgyMCkgPj0gJ0EnICYmICh3YyAmIH4weDIwKSA8PSAnWic7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50Citpc3dibGFuayAoX193Y3R5cGVfd2ludF90IHdjKQoreworICByZXR1cm4gd2MgPT0gJyAnIHx8IHdjID09ICdcdCc7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50Citpc3djbnRybCAoX193Y3R5cGVfd2ludF90IHdjKQoreworICByZXR1cm4gKHdjICYgfjB4MWYpID09IDAgfHwgd2MgPT0gMHg3ZjsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2lzd2RpZ2l0IChfX3djdHlwZV93aW50X3Qgd2MpCit7CisgIHJldHVybiB3YyA+PSAnMCcgJiYgd2MgPD0gJzknOworfQorCitzdGF0aWMgaW5saW5lIGludAoraXN3Z3JhcGggKF9fd2N0eXBlX3dpbnRfdCB3YykKK3sKKyAgcmV0dXJuIHdjID49ICchJyAmJiB3YyA8PSAnfic7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50Citpc3dsb3dlciAoX193Y3R5cGVfd2ludF90IHdjKQoreworICByZXR1cm4gd2MgPj0gJ2EnICYmIHdjIDw9ICd6JzsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2lzd3ByaW50IChfX3djdHlwZV93aW50X3Qgd2MpCit7CisgIHJldHVybiB3YyA+PSAnICcgJiYgd2MgPD0gJ34nOworfQorCitzdGF0aWMgaW5saW5lIGludAoraXN3cHVuY3QgKF9fd2N0eXBlX3dpbnRfdCB3YykKK3sKKyAgcmV0dXJuICh3YyA+PSAnIScgJiYgd2MgPD0gJ34nCisJICAmJiAhKCh3YyA+PSAnMCcgJiYgd2MgPD0gJzknKQorCSAgICAgICB8fCAoKHdjICYgfjB4MjApID49ICdBJyAmJiAod2MgJiB+MHgyMCkgPD0gJ1onKSkpOworfQorCitzdGF0aWMgaW5saW5lIGludAoraXN3c3BhY2UgKF9fd2N0eXBlX3dpbnRfdCB3YykKK3sKKyAgcmV0dXJuICh3YyA9PSAnICcgfHwgd2MgPT0gJ1x0JworCSAgfHwgd2MgPT0gJ1xuJyB8fCB3YyA9PSAnXHYnIHx8IHdjID09ICdcZicgfHwgd2MgPT0gJ1xyJyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50Citpc3d1cHBlciAoX193Y3R5cGVfd2ludF90IHdjKQoreworICByZXR1cm4gd2MgPj0gJ0EnICYmIHdjIDw9ICdaJzsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2lzd3hkaWdpdCAoX193Y3R5cGVfd2ludF90IHdjKQoreworICByZXR1cm4gKCh3YyA+PSAnMCcgJiYgd2MgPD0gJzknKQorCSAgfHwgKCh3YyAmIH4weDIwKSA+PSAnQScgJiYgKHdjICYgfjB4MjApIDw9ICdGJykpOworfQorCisjIGVuZGlmIC8qICEgSEFWRV9JU1dDTlRSTCAqLworCisjZW5kaWYgLyogX0dMX1dDVFlQRV9IICovCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGliL3hhbGxvYy1kaWUuYyBiL3BhcnRlZC0xLjguNy9saWIveGFsbG9jLWRpZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5MGYwNjAKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGliL3hhbGxvYy1kaWUuYwpAQCAtMCwwICsxLDQyIEBACisvKiBSZXBvcnQgYSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIGFuZCBleGl0LgorCisgICBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDYgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaW5jbHVkZSAieGFsbG9jLmgiCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2luY2x1ZGUgImVycm9yLmgiCisjaW5jbHVkZSAiZXhpdGZhaWwuaCIKKworI2luY2x1ZGUgImdldHRleHQuaCIKKyNkZWZpbmUgXyhtc2dpZCkgZ2V0dGV4dCAobXNnaWQpCisKK3ZvaWQKK3hhbGxvY19kaWUgKHZvaWQpCit7CisgIGVycm9yIChleGl0X2ZhaWx1cmUsIDAsICIlcyIsIF8oIm1lbW9yeSBleGhhdXN0ZWQiKSk7CisKKyAgLyogVGhlIGBub3JldHVybicgY2Fubm90IGJlIGdpdmVuIHRvIGVycm9yLCBzaW5jZSBpdCBtYXkgcmV0dXJuIGlmCisgICAgIGl0cyBmaXJzdCBhcmd1bWVudCBpcyAwLiAgVG8gaGVscCBjb21waWxlcnMgdW5kZXJzdGFuZCB0aGUKKyAgICAgeGFsbG9jX2RpZSBkb2VzIG5vdCByZXR1cm4sIGNhbGwgYWJvcnQuICBBbHNvLCB0aGUgYWJvcnQgaXMgYQorICAgICBzYWZldHkgZmVhdHVyZSBpZiBleGl0X2ZhaWx1cmUgaXMgMCAod2hpY2ggc2hvdWxkbid0IGhhcHBlbikuICAqLworICBhYm9ydCAoKTsKK30KZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWIveGFsbG9jLmggYi9wYXJ0ZWQtMS44LjcvbGliL3hhbGxvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjNmQ4ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGliL3hhbGxvYy5oCkBAIC0wLDAgKzEsMjcxIEBACisvKiB4YWxsb2MuaCAtLSBtYWxsb2Mgd2l0aCBvdXQtb2YtbWVtb3J5IGNoZWNraW5nCisKKyAgIENvcHlyaWdodCAoQykgMTk5MCwgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwKKyAgIDE5OTksIDIwMDAsIDIwMDMsIDIwMDQsIDIwMDYsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworCisjaWZuZGVmIFhBTExPQ19IXworIyBkZWZpbmUgWEFMTE9DX0hfCisKKyMgaW5jbHVkZSA8c3RkZGVmLmg+CisKKworIyBpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjIGVuZGlmCisKKworIyBpZm5kZWYgX19hdHRyaWJ1dGVfXworIyAgaWYgX19HTlVDX18gPCAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fIDwgOCkgfHwgX19TVFJJQ1RfQU5TSV9fCisjICAgZGVmaW5lIF9fYXR0cmlidXRlX18oeCkKKyMgIGVuZGlmCisjIGVuZGlmCisKKyMgaWZuZGVmIEFUVFJJQlVURV9OT1JFVFVSTgorIyAgZGVmaW5lIEFUVFJJQlVURV9OT1JFVFVSTiBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSkKKyMgZW5kaWYKKworLyogVGhpcyBmdW5jdGlvbiBpcyBhbHdheXMgdHJpZ2dlcmVkIHdoZW4gbWVtb3J5IGlzIGV4aGF1c3RlZC4KKyAgIEl0IG11c3QgYmUgZGVmaW5lZCBieSB0aGUgYXBwbGljYXRpb24sIGVpdGhlciBleHBsaWNpdGx5CisgICBvciBieSB1c2luZyBnbnVsaWIncyB4YWxsb2MtZGllIG1vZHVsZS4gIFRoaXMgaXMgdGhlCisgICBmdW5jdGlvbiB0byBjYWxsIHdoZW4gb25lIHdhbnRzIHRoZSBwcm9ncmFtIHRvIGRpZSBiZWNhdXNlIG9mIGEKKyAgIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUuICAqLworZXh0ZXJuIHZvaWQgeGFsbG9jX2RpZSAodm9pZCkgQVRUUklCVVRFX05PUkVUVVJOOworCit2b2lkICp4bWFsbG9jIChzaXplX3Qgcyk7Cit2b2lkICp4emFsbG9jIChzaXplX3Qgcyk7Cit2b2lkICp4Y2FsbG9jIChzaXplX3Qgbiwgc2l6ZV90IHMpOwordm9pZCAqeHJlYWxsb2MgKHZvaWQgKnAsIHNpemVfdCBzKTsKK3ZvaWQgKngycmVhbGxvYyAodm9pZCAqcCwgc2l6ZV90ICpwbik7Cit2b2lkICp4bWVtZHVwICh2b2lkIGNvbnN0ICpwLCBzaXplX3Qgcyk7CitjaGFyICp4c3RyZHVwIChjaGFyIGNvbnN0ICpzdHIpOworCisvKiBSZXR1cm4gMSBpZiBhbiBhcnJheSBvZiBOIG9iamVjdHMsIGVhY2ggb2Ygc2l6ZSBTLCBjYW5ub3QgZXhpc3QgZHVlCisgICB0byBzaXplIGFyaXRobWV0aWMgb3ZlcmZsb3cuICBTIG11c3QgYmUgcG9zaXRpdmUgYW5kIE4gbXVzdCBiZQorICAgbm9ubmVnYXRpdmUuICBUaGlzIGlzIGEgbWFjcm8sIG5vdCBhbiBpbmxpbmUgZnVuY3Rpb24sIHNvIHRoYXQgaXQKKyAgIHdvcmtzIGNvcnJlY3RseSBldmVuIHdoZW4gU0laRV9NQVggPCBOLgorCisgICBCeSBnbnVsaWIgY29udmVudGlvbiwgU0laRV9NQVggcmVwcmVzZW50cyBvdmVyZmxvdyBpbiBzaXplCisgICBjYWxjdWxhdGlvbnMsIHNvIHRoZSBjb25zZXJ2YXRpdmUgZGl2aWRlbmQgdG8gdXNlIGhlcmUgaXMKKyAgIFNJWkVfTUFYIC0gMSwgc2luY2UgU0laRV9NQVggbWlnaHQgcmVwcmVzZW50IGFuIG92ZXJmbG93ZWQgdmFsdWUuCisgICBIb3dldmVyLCBtYWxsb2MgKFNJWkVfTUFYKSBmYWlscyBvbiBhbGwga25vd24gaG9zdHMgd2hlcmUKKyAgIHNpemVvZiAocHRyZGlmZl90KSA8PSBzaXplb2YgKHNpemVfdCksIHNvIGRvIG5vdCBib3RoZXIgdG8gdGVzdCBmb3IKKyAgIGV4YWN0bHktU0laRV9NQVggYWxsb2NhdGlvbnMgb24gc3VjaCBob3N0czsgdGhpcyBhdm9pZHMgYSB0ZXN0IGFuZAorICAgYnJhbmNoIHdoZW4gUyBpcyBrbm93biB0byBiZSAxLiAgKi8KKyMgZGVmaW5lIHhhbGxvY19vdmVyc2l6ZWQobiwgcykgXAorICAgICgoc2l6ZV90KSAoc2l6ZW9mIChwdHJkaWZmX3QpIDw9IHNpemVvZiAoc2l6ZV90KSA/IC0xIDogLTIpIC8gKHMpIDwgKG4pKQorCisKKy8qIEluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBUIG11c3QgYmUgYW4gZWxlbWVudGFyeSBvciBzdHJ1Y3R1cmUvdW5pb24gb3IKKyAgIHR5cGVkZWYnZWQgdHlwZSwgb3IgYSBwb2ludGVyIHRvIHN1Y2ggYSB0eXBlLiAgVG8gYXBwbHkgb25lIG9mIHRoZQorICAgZm9sbG93aW5nIG1hY3JvcyB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgb3IgYXJyYXkgdHlwZSwgeW91IG5lZWQgdG8gdHlwZWRlZgorICAgaXQgZmlyc3QgYW5kIHVzZSB0aGUgdHlwZWRlZiBuYW1lLiAgKi8KKworLyogQWxsb2NhdGUgYW4gb2JqZWN0IG9mIHR5cGUgVCBkeW5hbWljYWxseSwgd2l0aCBlcnJvciBjaGVja2luZy4gICovCisvKiBleHRlcm4gdCAqWE1BTExPQyAodHlwZW5hbWUgdCk7ICovCisjIGRlZmluZSBYTUFMTE9DKHQpICgodCAqKSB4bWFsbG9jIChzaXplb2YgKHQpKSkKKworLyogQWxsb2NhdGUgbWVtb3J5IGZvciBOIGVsZW1lbnRzIG9mIHR5cGUgVCwgd2l0aCBlcnJvciBjaGVja2luZy4gICovCisvKiBleHRlcm4gdCAqWE5NQUxMT0MgKHNpemVfdCBuLCB0eXBlbmFtZSB0KTsgKi8KKyMgZGVmaW5lIFhOTUFMTE9DKG4sIHQpIFwKKyAgICAoKHQgKikgKHNpemVvZiAodCkgPT0gMSA/IHhtYWxsb2MgKG4pIDogeG5tYWxsb2MgKG4sIHNpemVvZiAodCkpKSkKKworLyogQWxsb2NhdGUgYW4gb2JqZWN0IG9mIHR5cGUgVCBkeW5hbWljYWxseSwgd2l0aCBlcnJvciBjaGVja2luZywKKyAgIGFuZCB6ZXJvIGl0LiAgKi8KKy8qIGV4dGVybiB0ICpYWkFMTE9DICh0eXBlbmFtZSB0KTsgKi8KKyMgZGVmaW5lIFhaQUxMT0ModCkgKCh0ICopIHh6YWxsb2MgKHNpemVvZiAodCkpKQorCisvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIE4gZWxlbWVudHMgb2YgdHlwZSBULCB3aXRoIGVycm9yIGNoZWNraW5nLAorICAgYW5kIHplcm8gaXQuICAqLworLyogZXh0ZXJuIHQgKlhDQUxMT0MgKHNpemVfdCBuLCB0eXBlbmFtZSB0KTsgKi8KKyMgZGVmaW5lIFhDQUxMT0MobiwgdCkgXAorICAgICgodCAqKSAoc2l6ZW9mICh0KSA9PSAxID8geHphbGxvYyAobikgOiB4Y2FsbG9jIChuLCBzaXplb2YgKHQpKSkpCisKKworIyBpZiBIQVZFX0lOTElORQorIyAgZGVmaW5lIHN0YXRpY19pbmxpbmUgc3RhdGljIGlubGluZQorIyBlbHNlCisgICB2b2lkICp4bm1hbGxvYyAoc2l6ZV90IG4sIHNpemVfdCBzKTsKKyAgIHZvaWQgKnhucmVhbGxvYyAodm9pZCAqcCwgc2l6ZV90IG4sIHNpemVfdCBzKTsKKyAgIHZvaWQgKngybnJlYWxsb2MgKHZvaWQgKnAsIHNpemVfdCAqcG4sIHNpemVfdCBzKTsKKyAgIGNoYXIgKnhjaGFyYWxsb2MgKHNpemVfdCBuKTsKKyMgZW5kaWYKKworIyBpZmRlZiBzdGF0aWNfaW5saW5lCisKKy8qIEFsbG9jYXRlIGFuIGFycmF5IG9mIE4gb2JqZWN0cywgZWFjaCB3aXRoIFMgYnl0ZXMgb2YgbWVtb3J5LAorICAgZHluYW1pY2FsbHksIHdpdGggZXJyb3IgY2hlY2tpbmcuICBTIG11c3QgYmUgbm9uemVyby4gICovCisKK3N0YXRpY19pbmxpbmUgdm9pZCAqCit4bm1hbGxvYyAoc2l6ZV90IG4sIHNpemVfdCBzKQoreworICBpZiAoeGFsbG9jX292ZXJzaXplZCAobiwgcykpCisgICAgeGFsbG9jX2RpZSAoKTsKKyAgcmV0dXJuIHhtYWxsb2MgKG4gKiBzKTsKK30KKworLyogQ2hhbmdlIHRoZSBzaXplIG9mIGFuIGFsbG9jYXRlZCBibG9jayBvZiBtZW1vcnkgUCB0byBhbiBhcnJheSBvZiBOCisgICBvYmplY3RzIGVhY2ggb2YgUyBieXRlcywgd2l0aCBlcnJvciBjaGVja2luZy4gIFMgbXVzdCBiZSBub256ZXJvLiAgKi8KKworc3RhdGljX2lubGluZSB2b2lkICoKK3hucmVhbGxvYyAodm9pZCAqcCwgc2l6ZV90IG4sIHNpemVfdCBzKQoreworICBpZiAoeGFsbG9jX292ZXJzaXplZCAobiwgcykpCisgICAgeGFsbG9jX2RpZSAoKTsKKyAgcmV0dXJuIHhyZWFsbG9jIChwLCBuICogcyk7Cit9CisKKy8qIElmIFAgaXMgbnVsbCwgYWxsb2NhdGUgYSBibG9jayBvZiBhdCBsZWFzdCAqUE4gc3VjaCBvYmplY3RzOworICAgb3RoZXJ3aXNlLCByZWFsbG9jYXRlIFAgc28gdGhhdCBpdCBjb250YWlucyBtb3JlIHRoYW4gKlBOIG9iamVjdHMKKyAgIGVhY2ggb2YgUyBieXRlcy4gICpQTiBtdXN0IGJlIG5vbnplcm8gdW5sZXNzIFAgaXMgbnVsbCwgYW5kIFMgbXVzdAorICAgYmUgbm9uemVyby4gIFNldCAqUE4gdG8gdGhlIG5ldyBudW1iZXIgb2Ygb2JqZWN0cywgYW5kIHJldHVybiB0aGUKKyAgIHBvaW50ZXIgdG8gdGhlIG5ldyBibG9jay4gICpQTiBpcyBuZXZlciBzZXQgdG8gemVybywgYW5kIHRoZQorICAgcmV0dXJuZWQgcG9pbnRlciBpcyBuZXZlciBudWxsLgorCisgICBSZXBlYXRlZCByZWFsbG9jYXRpb25zIGFyZSBndWFyYW50ZWVkIHRvIG1ha2UgcHJvZ3Jlc3MsIGVpdGhlciBieQorICAgYWxsb2NhdGluZyBhbiBpbml0aWFsIGJsb2NrIHdpdGggYSBub256ZXJvIHNpemUsIG9yIGJ5IGFsbG9jYXRpbmcgYQorICAgbGFyZ2VyIGJsb2NrLgorCisgICBJbiB0aGUgZm9sbG93aW5nIGltcGxlbWVudGF0aW9uLCBub256ZXJvIHNpemVzIGFyZSBpbmNyZWFzZWQgYnkgYQorICAgZmFjdG9yIG9mIGFwcHJveGltYXRlbHkgMS41IHNvIHRoYXQgcmVwZWF0ZWQgcmVhbGxvY2F0aW9ucyBoYXZlCisgICBPKE4pIG92ZXJhbGwgY29zdCByYXRoZXIgdGhhbiBPKE4qKjIpIGNvc3QsIGJ1dCB0aGUKKyAgIHNwZWNpZmljYXRpb24gZm9yIHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgZ3VhcmFudGVlIHRoYXQgcmF0ZS4KKworICAgSGVyZSBpcyBhbiBleGFtcGxlIG9mIHVzZToKKworICAgICBpbnQgKnAgPSBOVUxMOworICAgICBzaXplX3QgdXNlZCA9IDA7CisgICAgIHNpemVfdCBhbGxvY2F0ZWQgPSAwOworCisgICAgIHZvaWQKKyAgICAgYXBwZW5kX2ludCAoaW50IHZhbHVlKQorICAgICAgIHsKKwkgaWYgKHVzZWQgPT0gYWxsb2NhdGVkKQorCSAgIHAgPSB4Mm5yZWFsbG9jIChwLCAmYWxsb2NhdGVkLCBzaXplb2YgKnApOworCSBwW3VzZWQrK10gPSB2YWx1ZTsKKyAgICAgICB9CisKKyAgIFRoaXMgY2F1c2VzIHgybnJlYWxsb2MgdG8gYWxsb2NhdGUgYSBibG9jayBvZiBzb21lIG5vbnplcm8gc2l6ZSB0aGUKKyAgIGZpcnN0IHRpbWUgaXQgaXMgY2FsbGVkLgorCisgICBUbyBoYXZlIGZpbmVyLWdyYWluZWQgY29udHJvbCBvdmVyIHRoZSBpbml0aWFsIHNpemUsIHNldCAqUE4gdG8gYQorICAgbm9uemVybyB2YWx1ZSBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpdGggUCA9PSBOVUxMLiAgRm9yCisgICBleGFtcGxlOgorCisgICAgIGludCAqcCA9IE5VTEw7CisgICAgIHNpemVfdCB1c2VkID0gMDsKKyAgICAgc2l6ZV90IGFsbG9jYXRlZCA9IDA7CisgICAgIHNpemVfdCBhbGxvY2F0ZWQxID0gMTAwMDsKKworICAgICB2b2lkCisgICAgIGFwcGVuZF9pbnQgKGludCB2YWx1ZSkKKyAgICAgICB7CisJIGlmICh1c2VkID09IGFsbG9jYXRlZCkKKwkgICB7CisJICAgICBwID0geDJucmVhbGxvYyAocCwgJmFsbG9jYXRlZDEsIHNpemVvZiAqcCk7CisJICAgICBhbGxvY2F0ZWQgPSBhbGxvY2F0ZWQxOworCSAgIH0KKwkgcFt1c2VkKytdID0gdmFsdWU7CisgICAgICAgfQorCisgICAqLworCitzdGF0aWNfaW5saW5lIHZvaWQgKgoreDJucmVhbGxvYyAodm9pZCAqcCwgc2l6ZV90ICpwbiwgc2l6ZV90IHMpCit7CisgIHNpemVfdCBuID0gKnBuOworCisgIGlmICghIHApCisgICAgeworICAgICAgaWYgKCEgbikKKwl7CisJICAvKiBUaGUgYXBwcm94aW1hdGUgc2l6ZSB0byB1c2UgZm9yIGluaXRpYWwgc21hbGwgYWxsb2NhdGlvbgorCSAgICAgcmVxdWVzdHMsIHdoZW4gdGhlIGludm9raW5nIGNvZGUgc3BlY2lmaWVzIGFuIG9sZCBzaXplIG9mCisJICAgICB6ZXJvLiAgNjQgYnl0ZXMgaXMgdGhlIGxhcmdlc3QgInNtYWxsIiByZXF1ZXN0IGZvciB0aGUKKwkgICAgIEdOVSBDIGxpYnJhcnkgbWFsbG9jLiAgKi8KKwkgIGVudW0geyBERUZBVUxUX01YRkFTVCA9IDY0IH07CisKKwkgIG4gPSBERUZBVUxUX01YRkFTVCAvIHM7CisJICBuICs9ICFuOworCX0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBTZXQgTiA9IGNlaWwgKDEuNSAqIE4pIHNvIHRoYXQgcHJvZ3Jlc3MgaXMgbWFkZSBpZiBOID09IDEuCisJIENoZWNrIGZvciBvdmVyZmxvdywgc28gdGhhdCBOICogUyBzdGF5cyBpbiBzaXplX3QgcmFuZ2UuCisJIFRoZSBjaGVjayBpcyBzbGlnaHRseSBjb25zZXJ2YXRpdmUsIGJ1dCBhbiBleGFjdCBjaGVjayBpc24ndAorCSB3b3J0aCB0aGUgdHJvdWJsZS4gICovCisgICAgICBpZiAoKHNpemVfdCkgLTEgLyAzICogMiAvIHMgPD0gbikKKwl4YWxsb2NfZGllICgpOworICAgICAgbiArPSAobiArIDEpIC8gMjsKKyAgICB9CisKKyAgKnBuID0gbjsKKyAgcmV0dXJuIHhyZWFsbG9jIChwLCBuICogcyk7Cit9CisKKy8qIFJldHVybiBhIHBvaW50ZXIgdG8gYSBuZXcgYnVmZmVyIG9mIE4gYnl0ZXMuICBUaGlzIGlzIGxpa2UgeG1hbGxvYywKKyAgIGV4Y2VwdCBpdCByZXR1cm5zIGNoYXIgKi4gICovCisKK3N0YXRpY19pbmxpbmUgY2hhciAqCit4Y2hhcmFsbG9jIChzaXplX3QgbikKK3sKKyAgcmV0dXJuIFhOTUFMTE9DIChuLCBjaGFyKTsKK30KKworIyBlbmRpZgorCisjIGlmZGVmIF9fY3BsdXNwbHVzCit9CisKKy8qIEMrKyBkb2VzIG5vdCBhbGxvdyBjb252ZXJzaW9ucyBmcm9tIHZvaWQgKiB0byBvdGhlciBwb2ludGVyIHR5cGVzCisgICB3aXRob3V0IGEgY2FzdC4gIFVzZSB0ZW1wbGF0ZXMgdG8gd29yayBhcm91bmQgdGhlIHByb2JsZW0gd2hlbgorICAgcG9zc2libGUuICAqLworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQgKgoreHJlYWxsb2MgKFQgKnAsIHNpemVfdCBzKQoreworICByZXR1cm4gKFQgKikgeHJlYWxsb2MgKCh2b2lkICopIHAsIHMpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQgKgoreG5yZWFsbG9jIChUICpwLCBzaXplX3Qgbiwgc2l6ZV90IHMpCit7CisgIHJldHVybiAoVCAqKSB4bnJlYWxsb2MgKCh2b2lkICopIHAsIG4sIHMpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQgKgoreDJyZWFsbG9jIChUICpwLCBzaXplX3QgKnBuKQoreworICByZXR1cm4gKFQgKikgeDJyZWFsbG9jICgodm9pZCAqKSBwLCBwbik7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCAqCit4Mm5yZWFsbG9jIChUICpwLCBzaXplX3QgKnBuLCBzaXplX3QgcykKK3sKKyAgcmV0dXJuIChUICopIHgybnJlYWxsb2MgKCh2b2lkICopIHAsIHBuLCBzKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUICoKK3htZW1kdXAgKFQgY29uc3QgKnAsIHNpemVfdCBzKQoreworICByZXR1cm4gKFQgKikgeG1lbWR1cCAoKHZvaWQgY29uc3QgKikgcCwgcyk7Cit9CisKKyMgZW5kaWYKKworCisjZW5kaWYgLyogIVhBTExPQ19IXyAqLwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYi94bWFsbG9jLmMgYi9wYXJ0ZWQtMS44LjcvbGliL3htYWxsb2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMThlMGRkCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYi94bWFsbG9jLmMKQEAgLTAsMCArMSwxMjMgQEAKKy8qIHhtYWxsb2MuYyAtLSBtYWxsb2Mgd2l0aCBvdXQgb2YgbWVtb3J5IGNoZWNraW5nCisKKyAgIENvcHlyaWdodCAoQykgMTk5MCwgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwKKyAgIDE5OTksIDIwMDAsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaWYgISBIQVZFX0lOTElORQorIyBkZWZpbmUgc3RhdGljX2lubGluZQorI2VuZGlmCisjaW5jbHVkZSAieGFsbG9jLmgiCisjdW5kZWYgc3RhdGljX2lubGluZQorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZm5kZWYgU0laRV9NQVgKKyMgZGVmaW5lIFNJWkVfTUFYICgoc2l6ZV90KSAtMSkKKyNlbmRpZgorCisvKiAxIGlmIGNhbGxvYyBpcyBrbm93biB0byBiZSBjb21wYXRpYmxlIHdpdGggR05VIGNhbGxvYy4gIFRoaXMKKyAgIG1hdHRlcnMgaWYgd2UgYXJlIG5vdCBhbHNvIHVzaW5nIHRoZSBjYWxsb2MgbW9kdWxlLCB3aGljaCBkZWZpbmVzCisgICBIQVZFX0NBTExPQyBhbmQgc3VwcG9ydHMgdGhlIEdOVSBBUEkgZXZlbiBvbiBub24tR05VIHBsYXRmb3Jtcy4gICovCisjaWYgZGVmaW5lZCBIQVZFX0NBTExPQyB8fCBkZWZpbmVkIF9fR0xJQkNfXworZW51bSB7IEhBVkVfR05VX0NBTExPQyA9IDEgfTsKKyNlbHNlCitlbnVtIHsgSEFWRV9HTlVfQ0FMTE9DID0gMCB9OworI2VuZGlmCisKKy8qIEFsbG9jYXRlIE4gYnl0ZXMgb2YgbWVtb3J5IGR5bmFtaWNhbGx5LCB3aXRoIGVycm9yIGNoZWNraW5nLiAgKi8KKwordm9pZCAqCit4bWFsbG9jIChzaXplX3QgbikKK3sKKyAgdm9pZCAqcCA9IG1hbGxvYyAobik7CisgIGlmICghcCAmJiBuICE9IDApCisgICAgeGFsbG9jX2RpZSAoKTsKKyAgcmV0dXJuIHA7Cit9CisKKy8qIENoYW5nZSB0aGUgc2l6ZSBvZiBhbiBhbGxvY2F0ZWQgYmxvY2sgb2YgbWVtb3J5IFAgdG8gTiBieXRlcywKKyAgIHdpdGggZXJyb3IgY2hlY2tpbmcuICAqLworCit2b2lkICoKK3hyZWFsbG9jICh2b2lkICpwLCBzaXplX3QgbikKK3sKKyAgcCA9IHJlYWxsb2MgKHAsIG4pOworICBpZiAoIXAgJiYgbiAhPSAwKQorICAgIHhhbGxvY19kaWUgKCk7CisgIHJldHVybiBwOworfQorCisvKiBJZiBQIGlzIG51bGwsIGFsbG9jYXRlIGEgYmxvY2sgb2YgYXQgbGVhc3QgKlBOIGJ5dGVzOyBvdGhlcndpc2UsCisgICByZWFsbG9jYXRlIFAgc28gdGhhdCBpdCBjb250YWlucyBtb3JlIHRoYW4gKlBOIGJ5dGVzLiAgKlBOIG11c3QgYmUKKyAgIG5vbnplcm8gdW5sZXNzIFAgaXMgbnVsbC4gIFNldCAqUE4gdG8gdGhlIG5ldyBibG9jaydzIHNpemUsIGFuZAorICAgcmV0dXJuIHRoZSBwb2ludGVyIHRvIHRoZSBuZXcgYmxvY2suICAqUE4gaXMgbmV2ZXIgc2V0IHRvIHplcm8sIGFuZAorICAgdGhlIHJldHVybmVkIHBvaW50ZXIgaXMgbmV2ZXIgbnVsbC4gICovCisKK3ZvaWQgKgoreDJyZWFsbG9jICh2b2lkICpwLCBzaXplX3QgKnBuKQoreworICByZXR1cm4geDJucmVhbGxvYyAocCwgcG4sIDEpOworfQorCisvKiBBbGxvY2F0ZSBTIGJ5dGVzIG9mIHplcm9lZCBtZW1vcnkgZHluYW1pY2FsbHksIHdpdGggZXJyb3IgY2hlY2tpbmcuCisgICBUaGVyZSdzIG5vIG5lZWQgZm9yIHhuemFsbG9jIChOLCBTKSwgc2luY2UgaXQgd291bGQgYmUgZXF1aXZhbGVudAorICAgdG8geGNhbGxvYyAoTiwgUykuICAqLworCit2b2lkICoKK3h6YWxsb2MgKHNpemVfdCBzKQoreworICByZXR1cm4gbWVtc2V0ICh4bWFsbG9jIChzKSwgMCwgcyk7Cit9CisKKy8qIEFsbG9jYXRlIHplcm9lZCBtZW1vcnkgZm9yIE4gZWxlbWVudHMgb2YgUyBieXRlcywgd2l0aCBlcnJvcgorICAgY2hlY2tpbmcuICBTIG11c3QgYmUgbm9uemVyby4gICovCisKK3ZvaWQgKgoreGNhbGxvYyAoc2l6ZV90IG4sIHNpemVfdCBzKQoreworICB2b2lkICpwOworICAvKiBUZXN0IGZvciBvdmVyZmxvdywgc2luY2Ugc29tZSBjYWxsb2MgaW1wbGVtZW50YXRpb25zIGRvbid0IGhhdmUKKyAgICAgcHJvcGVyIG92ZXJmbG93IGNoZWNrcy4gIEJ1dCBvbWl0IG92ZXJmbG93IGFuZCBzaXplLXplcm8gdGVzdHMgaWYKKyAgICAgSEFWRV9HTlVfQ0FMTE9DLCBzaW5jZSBHTlUgY2FsbG9jIGNhdGNoZXMgb3ZlcmZsb3cgYW5kIG5ldmVyCisgICAgIHJldHVybnMgTlVMTCBpZiBzdWNjZXNzZnVsLiAgKi8KKyAgaWYgKCghIEhBVkVfR05VX0NBTExPQyAmJiB4YWxsb2Nfb3ZlcnNpemVkIChuLCBzKSkKKyAgICAgIHx8ICghIChwID0gY2FsbG9jIChuLCBzKSkgJiYgKEhBVkVfR05VX0NBTExPQyB8fCBuICE9IDApKSkKKyAgICB4YWxsb2NfZGllICgpOworICByZXR1cm4gcDsKK30KKworLyogQ2xvbmUgYW4gb2JqZWN0IFAgb2Ygc2l6ZSBTLCB3aXRoIGVycm9yIGNoZWNraW5nLiAgVGhlcmUncyBubyBuZWVkCisgICBmb3IgeG5tZW1kdXAgKFAsIE4sIFMpLCBzaW5jZSB4bWVtZHVwIChQLCBOICogUykgd29ya3Mgd2l0aG91dCBhbnkKKyAgIG5lZWQgZm9yIGFuIGFyaXRobWV0aWMgb3ZlcmZsb3cgY2hlY2suICAqLworCit2b2lkICoKK3htZW1kdXAgKHZvaWQgY29uc3QgKnAsIHNpemVfdCBzKQoreworICByZXR1cm4gbWVtY3B5ICh4bWFsbG9jIChzKSwgcCwgcyk7Cit9CisKKy8qIENsb25lIFNUUklORy4gICovCisKK2NoYXIgKgoreHN0cmR1cCAoY2hhciBjb25zdCAqc3RyaW5nKQoreworICByZXR1cm4geG1lbWR1cCAoc3RyaW5nLCBzdHJsZW4gKHN0cmluZykgKyAxKTsKK30KZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWIveHN0cm5kdXAuYyBiL3BhcnRlZC0xLjguNy9saWIveHN0cm5kdXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2NlZmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYi94c3RybmR1cC5jCkBAIC0wLDAgKzEsMzcgQEAKKy8qIER1cGxpY2F0ZSBhIGJvdW5kZWQgaW5pdGlhbCBzZWdtZW50IG9mIGEgc3RyaW5nLCB3aXRoIG91dC1vZi1tZW1vcnkKKyAgIGNoZWNraW5nLgorICAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisvKiBTcGVjaWZpY2F0aW9uLiAgKi8KKyNpbmNsdWRlICJ4c3RybmR1cC5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSAieGFsbG9jLmgiCisKKy8qIFJldHVybiBhIG5ld2x5IGFsbG9jYXRlZCBjb3B5IG9mIGF0IG1vc3QgTiBieXRlcyBvZiBTVFJJTkcuCisgICBJbiBvdGhlciB3b3JkcywgcmV0dXJuIGEgY29weSBvZiB0aGUgaW5pdGlhbCBzZWdtZW50IG9mIGxlbmd0aCBOIG9mCisgICBTVFJJTkcuICAqLworY2hhciAqCit4c3RybmR1cCAoY29uc3QgY2hhciAqc3RyaW5nLCBzaXplX3QgbikKK3sKKyAgY2hhciAqcyA9IHN0cm5kdXAgKHN0cmluZywgbik7CisgIGlmICghIHMpCisgICAgeGFsbG9jX2RpZSAoKTsKKyAgcmV0dXJuIHM7Cit9CmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGliL3hzdHJuZHVwLmggYi9wYXJ0ZWQtMS44LjcvbGliL3hzdHJuZHVwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgzNTRjZgotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWIveHN0cm5kdXAuaApAQCAtMCwwICsxLDI0IEBACisvKiBEdXBsaWNhdGUgYSBib3VuZGVkIGluaXRpYWwgc2VnbWVudCBvZiBhIHN0cmluZywgd2l0aCBvdXQtb2YtbWVtb3J5CisgICBjaGVja2luZy4KKyAgIENvcHlyaWdodCAoQykgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworLyogUmV0dXJuIGEgbmV3bHkgYWxsb2NhdGVkIGNvcHkgb2YgYXQgbW9zdCBOIGJ5dGVzIG9mIFNUUklORy4KKyAgIEluIG90aGVyIHdvcmRzLCByZXR1cm4gYSBjb3B5IG9mIHRoZSBpbml0aWFsIHNlZ21lbnQgb2YgbGVuZ3RoIE4gb2YKKyAgIFNUUklORy4gICovCitleHRlcm4gY2hhciAqeHN0cm5kdXAgKGNvbnN0IGNoYXIgKnN0cmluZywgc2l6ZV90IG4pOwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC5wYy5pbiBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQucGMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk0M2JmMAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQucGMuaW4KQEAgLTAsMCArMSwxMSBAQAorcHJlZml4PUBwcmVmaXhACitleGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACitsaWJkaXI9QGxpYmRpckAKK2luY2x1ZGVkaXI9QGluY2x1ZGVkaXJACisKK05hbWU6IGxpYnBhcnRlZAorRGVzY3JpcHRpb246IFRoZSBHTlUgUGFydGVkIGRpc2sgcGFydGl0aW9uaW5nIHNoYXJlZCBsaWJyYXJ5CitWZXJzaW9uOiBAVkVSU0lPTkAKK0xpYnM6IC1MJHtsaWJkaXJ9IC1scGFydGVkCitDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfQorCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL01ha2VmaWxlLmFtIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjAxM2NjCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDQ5IEBACisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBQYXJ0ZWQKKyMgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxLCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgbWF5IGJlIG1vZGlmaWVkIGFuZC9vciBkaXN0cmlidXRlZCB3aXRob3V0IHJlc3RyaWN0aW9uLgorCitpZiBIQVZFX0NIRUNLCitTVUJESVJTX0NIRUNLID0gdGVzdHMKK2Vsc2UKK1NVQkRJUlNfQ0hFQ0sgPQorZW5kaWYKKworU1VCRElSUyAgICAgICA9IGxhYmVscyBmcyAuICQoU1VCRElSU19DSEVDSykKKworCitwYXJ0ZWRpbmNsdWRlZGlyICAgICAgPSAtSSQodG9wX3NyY2RpcikvbGliIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlCitsaWJfTFRMSUJSQVJJRVMJICAgICAgPQlsaWJwYXJ0ZWQubGEKK2xpYnBhcnRlZF9sYV9MREZMQUdTICA9IC12ZXJzaW9uLWluZm8gJChMVF9DVVJSRU5UKTokKExUX1JFVklTSU9OKTokKExUX0FHRSkgXAorCQkJCQkJLXJlbGVhc2UgJChMVF9SRUxFQVNFKQorbGlicGFydGVkX2xhX1NPVVJDRVMgID0gZGVidWcuYwkJCVwKKwkJCWRldmljZS5jCQlcCisJCQlleGNlcHRpb24uYwkJXAorCQkJZmlsZXN5cy5jCQlcCisJCQlsaWJwYXJ0ZWQuYwkJXAorCQkJdGltZXIuYwkJCVwKKwkJCXVuaXQuYwkJCVwKKwkJCWRpc2suYwkJCVwKKwkJCWNzL2dlb20uYwkJXAorCQkJY3MvY29uc3RyYWludC5jCQlcCisJCQljcy9uYXRtYXRoLmMJCVwKKwkJCWFyY2gvYmxrcGcuaAkJXAorCQkJYXJjaC8kKE9TKS5jCisKK0VYVFJBX2xpYnBhcnRlZF9sYV9TT1VSQ0VTICAgID0gYXJjaC9saW51eC5jCQlcCisJCQkJYXJjaC9nbnUuYyBcCisJCQkJYXJjaC9iZW9zLmMKKworbGlicGFydGVkX2xhX0xJQkFERCAgID0gJChPU19MSUJTKQkJXAorCQkJJChETF9MSUJTKQkJXAorCQkJJChETV9MSUJTKQkJXAorCQkJJChTRUxJTlVYX0xJQlMpCQlcCisJCQkkKElOVExMSUJTKQkJXAorCQkJZnMvbGliZnMubGEJCVwKKwkJCWxhYmVscy9saWJsYWJlbHMubGEKKworRVhUUkFfRElTVAkgICAgICA9IG1ici5zCisKK0lOQ0xVREVTID0gJChwYXJ0ZWRpbmNsdWRlZGlyKSAkKElOVExJTkNTKQorCitNQUlOVEFJTkVSQ0xFQU5GSUxFUyA9IE1ha2VmaWxlLmluCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL01ha2VmaWxlLmluIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2MyMGZmCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDg3NyBAQAorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xMCBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACisKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIFBhcnRlZAorIyBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDEsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBtYXkgYmUgbW9kaWZpZWQgYW5kL29yIGRpc3RyaWJ1dGVkIHdpdGhvdXQgcmVzdHJpY3Rpb24uCisKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitzdWJkaXIgPSBsaWJwYXJ0ZWQKK0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbgorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvbTQvYWJzb2x1dGUtaGVhZGVyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2FsbG9jYS5tNCAkKHRvcF9zcmNkaXIpL200L2Fzc2VydC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9hdGV4aXQubTQgJCh0b3Bfc3JjZGlyKS9tNC9jYWxsb2MubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY2xvc2Utc3RyZWFtLm00ICQodG9wX3NyY2RpcikvbTQvY2xvc2VvdXQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY29kZXNldC5tNCAkKHRvcF9zcmNkaXIpL200L2NvbmZpZy1oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2Rpcm5hbWUubTQgJCh0b3Bfc3JjZGlyKS9tNC9kb3MubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZG91YmxlLXNsYXNoLXJvb3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZXJyb3IubTQgJCh0b3Bfc3JjZGlyKS9tNC9leGl0ZmFpbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9leHRlbnNpb25zLm00ICQodG9wX3NyY2RpcikvbTQvZnBlbmRpbmcubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZnJlZS5tNCAkKHRvcF9zcmNkaXIpL200L2dldG9wdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00ICQodG9wX3NyY2RpcikvbTQvZ2xpYmMyMS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9nbnVsaWItY29tbW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2dudWxpYi1jb21wLm00ICQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaW5saW5lLm00ICQodG9wX3NyY2RpcikvbTQvaW50dHlwZXMtcHJpLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ludHR5cGVzLm00ICQodG9wX3NyY2RpcikvbTQvbGliLWlnbm9yZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xvY2FsY2hhcnNldC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sb25nLW9wdGlvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9sb25nbG9uZy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tYnJ0b3djLm00ICQodG9wX3NyY2RpcikvbTQvbWJzdGF0ZV90Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21lbWNoci5tNCAkKHRvcF9zcmNkaXIpL200L21lbWNtcC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tZW1jcHkubTQgJCh0b3Bfc3JjZGlyKS9tNC9tZW1tb3ZlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21lbXNldC5tNCAkKHRvcF9zcmNkaXIpL200L25scy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCAkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3F1b3RlYXJnLm00ICQodG9wX3NyY2RpcikvbTQvcmVnZXgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcmVuYW1lLm00ICQodG9wX3NyY2RpcikvbTQvcnBtYXRjaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zYWZlLXJlYWQubTQgJCh0b3Bfc3JjZGlyKS9tNC9zYWZlLXdyaXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3NzaXplX3QubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGRhcmcubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RkYm9vbC5tNCAkKHRvcF9zcmNkaXIpL200L3N0ZGludC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdGRsaWJfaC5tNCAkKHRvcF9zcmNkaXIpL200L3N0cmNzcG4ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RyaW5nX2gubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHJuZHVwLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0cm5sZW4ubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHJ0b2QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RydG9sLm00ICQodG9wX3NyY2RpcikvbTQvdW5pc3RkX2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdXRpbWJ1Zi5tNCAkKHRvcF9zcmNkaXIpL200L3V0aW1lLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3V0aW1lcy1udWxsLm00ICQodG9wX3NyY2RpcikvbTQvd2NoYXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvd2N0eXBlLm00ICQodG9wX3NyY2RpcikvbTQvd2ludF90Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3hhbGxvYy5tNCAkKHRvcF9zcmNkaXIpL200L3hzdHJuZHVwLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CithbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKK2FtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCisgICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKKyAgICAqKSBmPSQkcDs7IFwKKyAgZXNhYzsKK2FtX19zdHJpcF9kaXIgPSBgZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7CithbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQobGliZGlyKSIKK2xpYkxUTElCUkFSSUVTX0lOU1RBTEwgPSAkKElOU1RBTEwpCitMVExJQlJBUklFUyA9ICQobGliX0xUTElCUkFSSUVTKQorYW1fX0RFUEVOREVOQ0lFU18xID0KK2xpYnBhcnRlZF9sYV9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAorCSQoYW1fX0RFUEVOREVOQ0lFU18xKSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAorCSQoYW1fX0RFUEVOREVOQ0lFU18xKSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgZnMvbGliZnMubGEgXAorCWxhYmVscy9saWJsYWJlbHMubGEKK2FtX2xpYnBhcnRlZF9sYV9PQkpFQ1RTID0gZGVidWcubG8gZGV2aWNlLmxvIGV4Y2VwdGlvbi5sbyBmaWxlc3lzLmxvIFwKKwlsaWJwYXJ0ZWQubG8gdGltZXIubG8gdW5pdC5sbyBkaXNrLmxvIGdlb20ubG8gY29uc3RyYWludC5sbyBcCisJbmF0bWF0aC5sbyAkKE9TKS5sbworbGlicGFydGVkX2xhX09CSkVDVFMgPSAkKGFtX2xpYnBhcnRlZF9sYV9PQkpFQ1RTKQorbGlicGFydGVkX2xhX0xJTksgPSAkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCisJJChsaWJwYXJ0ZWRfbGFfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorREVGQVVMVF9JTkNMVURFUyA9IC1JLiAtSSQodG9wX2J1aWxkZGlyKS9saWJAYW1fX2lzcmNACitkZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvZGVwY29tcAorYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKK0NPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAorCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0xUQ09NUElMRSA9ICQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCisJLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpIFwKKwkkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitDQ0xEID0gJChDQykKK0xJTksgPSAkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorCS0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpIFwKKwkkKExERkxBR1MpIC1vICRACitTT1VSQ0VTID0gJChsaWJwYXJ0ZWRfbGFfU09VUkNFUykgJChFWFRSQV9saWJwYXJ0ZWRfbGFfU09VUkNFUykKK0RJU1RfU09VUkNFUyA9ICQobGlicGFydGVkX2xhX1NPVVJDRVMpICQoRVhUUkFfbGlicGFydGVkX2xhX1NPVVJDRVMpCitSRUNVUlNJVkVfVEFSR0VUUyA9IGFsbC1yZWN1cnNpdmUgY2hlY2stcmVjdXJzaXZlIGR2aS1yZWN1cnNpdmUgXAorCWh0bWwtcmVjdXJzaXZlIGluZm8tcmVjdXJzaXZlIGluc3RhbGwtZGF0YS1yZWN1cnNpdmUgXAorCWluc3RhbGwtZHZpLXJlY3Vyc2l2ZSBpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlIFwKKwlpbnN0YWxsLWh0bWwtcmVjdXJzaXZlIGluc3RhbGwtaW5mby1yZWN1cnNpdmUgXAorCWluc3RhbGwtcGRmLXJlY3Vyc2l2ZSBpbnN0YWxsLXBzLXJlY3Vyc2l2ZSBpbnN0YWxsLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZSBpbnN0YWxsZGlycy1yZWN1cnNpdmUgcGRmLXJlY3Vyc2l2ZSBcCisJcHMtcmVjdXJzaXZlIHVuaW5zdGFsbC1yZWN1cnNpdmUKK1JFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTID0gbW9zdGx5Y2xlYW4tcmVjdXJzaXZlIGNsZWFuLXJlY3Vyc2l2ZQlcCisgIGRpc3RjbGVhbi1yZWN1cnNpdmUgbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUKK0VUQUdTID0gZXRhZ3MKK0NUQUdTID0gY3RhZ3MKK0RJU1RfU1VCRElSUyA9IGxhYmVscyBmcyAuIHRlc3RzCitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUJTT0xVVEVfSU5UVFlQRVNfSCA9IEBBQlNPTFVURV9JTlRUWVBFU19IQAorQUJTT0xVVEVfU1RESU5UX0ggPSBAQUJTT0xVVEVfU1RESU5UX0hACitBQlNPTFVURV9TVERMSUJfSCA9IEBBQlNPTFVURV9TVERMSUJfSEAKK0FCU09MVVRFX1NUUklOR19IID0gQEFCU09MVVRFX1NUUklOR19IQAorQUJTT0xVVEVfVU5JU1REX0ggPSBAQUJTT0xVVEVfVU5JU1REX0hACitBQlNPTFVURV9XQ0hBUl9IID0gQEFCU09MVVRFX1dDSEFSX0hACitBQlNPTFVURV9XQ1RZUEVfSCA9IEBBQlNPTFVURV9XQ1RZUEVfSEAKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FMTE9DQSA9IEBBTExPQ0FACitBTExPQ0FfSCA9IEBBTExPQ0FfSEAKK0FNVEFSID0gQEFNVEFSQAorQVIgPSBAQVJACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0JJVFNJWkVPRl9QVFJESUZGX1QgPSBAQklUU0laRU9GX1BUUkRJRkZfVEAKK0JJVFNJWkVPRl9TSUdfQVRPTUlDX1QgPSBAQklUU0laRU9GX1NJR19BVE9NSUNfVEAKK0JJVFNJWkVPRl9TSVpFX1QgPSBAQklUU0laRU9GX1NJWkVfVEAKK0JJVFNJWkVPRl9XQ0hBUl9UID0gQEJJVFNJWkVPRl9XQ0hBUl9UQAorQklUU0laRU9GX1dJTlRfVCA9IEBCSVRTSVpFT0ZfV0lOVF9UQAorQlVJTERJTkZPID0gQEJVSUxESU5GT0AKK0NDID0gQENDQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDSEVDS19DRkxBR1MgPSBAQ0hFQ0tfQ0ZMQUdTQAorQ0hFQ0tfTElCUyA9IEBDSEVDS19MSUJTQAorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ1hYID0gQENYWEAKK0NYWENQUCA9IEBDWFhDUFBACitDWFhERVBNT0RFID0gQENYWERFUE1PREVACitDWFhGTEFHUyA9IEBDWFhGTEFHU0AKK0NZR1BBVEhfVyA9IEBDWUdQQVRIX1dACitERUZTID0gQERFRlNACitERVBESVIgPSBAREVQRElSQAorRExfTElCUyA9IEBETF9MSUJTQAorRE1fTElCUyA9IEBETV9MSUJTQAorRUNITyA9IEBFQ0hPQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFWEVFWFQgPSBARVhFRVhUQAorRjc3ID0gQEY3N0AKK0ZGTEFHUyA9IEBGRkxBR1NACitHRVRPUFRfSCA9IEBHRVRPUFRfSEAKK0dMSUJDMjEgPSBAR0xJQkMyMUAKK0dNU0dGTVQgPSBAR01TR0ZNVEAKK0dNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAorR05VTElCX0NIT1dOID0gQEdOVUxJQl9DSE9XTkAKK0dOVUxJQl9EVVAyID0gQEdOVUxJQl9EVVAyQAorR05VTElCX0ZDSERJUiA9IEBHTlVMSUJfRkNIRElSQAorR05VTElCX0ZUUlVOQ0FURSA9IEBHTlVMSUJfRlRSVU5DQVRFQAorR05VTElCX0dFVENXRCA9IEBHTlVMSUJfR0VUQ1dEQAorR05VTElCX0dFVExPR0lOX1IgPSBAR05VTElCX0dFVExPR0lOX1JACitHTlVMSUJfR0VUU1VCT1BUID0gQEdOVUxJQl9HRVRTVUJPUFRACitHTlVMSUJfSU1BWEFCUyA9IEBHTlVMSUJfSU1BWEFCU0AKK0dOVUxJQl9JTUFYRElWID0gQEdOVUxJQl9JTUFYRElWQAorR05VTElCX01CU0NBU0VDTVAgPSBAR05VTElCX01CU0NBU0VDTVBACitHTlVMSUJfTUJTQ0FTRVNUUiA9IEBHTlVMSUJfTUJTQ0FTRVNUUkAKK0dOVUxJQl9NQlNDSFIgPSBAR05VTElCX01CU0NIUkAKK0dOVUxJQl9NQlNDU1BOID0gQEdOVUxJQl9NQlNDU1BOQAorR05VTElCX01CU0xFTiA9IEBHTlVMSUJfTUJTTEVOQAorR05VTElCX01CU05DQVNFQ01QID0gQEdOVUxJQl9NQlNOQ0FTRUNNUEAKK0dOVUxJQl9NQlNQQlJLID0gQEdOVUxJQl9NQlNQQlJLQAorR05VTElCX01CU1BDQVNFQ01QID0gQEdOVUxJQl9NQlNQQ0FTRUNNUEAKK0dOVUxJQl9NQlNSQ0hSID0gQEdOVUxJQl9NQlNSQ0hSQAorR05VTElCX01CU1NFUCA9IEBHTlVMSUJfTUJTU0VQQAorR05VTElCX01CU1NQTiA9IEBHTlVMSUJfTUJTU1BOQAorR05VTElCX01CU1NUUiA9IEBHTlVMSUJfTUJTU1RSQAorR05VTElCX01CU1RPS19SID0gQEdOVUxJQl9NQlNUT0tfUkAKK0dOVUxJQl9NRU1NRU0gPSBAR05VTElCX01FTU1FTUAKK0dOVUxJQl9NRU1QQ1BZID0gQEdOVUxJQl9NRU1QQ1BZQAorR05VTElCX01FTVJDSFIgPSBAR05VTElCX01FTVJDSFJACitHTlVMSUJfTUtEVEVNUCA9IEBHTlVMSUJfTUtEVEVNUEAKK0dOVUxJQl9NS1NURU1QID0gQEdOVUxJQl9NS1NURU1QQAorR05VTElCX1JFQURMSU5LID0gQEdOVUxJQl9SRUFETElOS0AKK0dOVUxJQl9TTEVFUCA9IEBHTlVMSUJfU0xFRVBACitHTlVMSUJfU1RQQ1BZID0gQEdOVUxJQl9TVFBDUFlACitHTlVMSUJfU1RQTkNQWSA9IEBHTlVMSUJfU1RQTkNQWUAKK0dOVUxJQl9TVFJDQVNFU1RSID0gQEdOVUxJQl9TVFJDQVNFU1RSQAorR05VTElCX1NUUkNIUk5VTCA9IEBHTlVMSUJfU1RSQ0hSTlVMQAorR05VTElCX1NUUkRVUCA9IEBHTlVMSUJfU1RSRFVQQAorR05VTElCX1NUUk5EVVAgPSBAR05VTElCX1NUUk5EVVBACitHTlVMSUJfU1RSTkxFTiA9IEBHTlVMSUJfU1RSTkxFTkAKK0dOVUxJQl9TVFJQQlJLID0gQEdOVUxJQl9TVFJQQlJLQAorR05VTElCX1NUUlNFUCA9IEBHTlVMSUJfU1RSU0VQQAorR05VTElCX1NUUlRPSU1BWCA9IEBHTlVMSUJfU1RSVE9JTUFYQAorR05VTElCX1NUUlRPS19SID0gQEdOVUxJQl9TVFJUT0tfUkAKK0dOVUxJQl9TVFJUT1VNQVggPSBAR05VTElCX1NUUlRPVU1BWEAKK0dSRVAgPSBAR1JFUEAKK0hBVkVfREVDTF9HRVRMT0dJTl9SID0gQEhBVkVfREVDTF9HRVRMT0dJTl9SQAorSEFWRV9ERUNMX0lNQVhBQlMgPSBASEFWRV9ERUNMX0lNQVhBQlNACitIQVZFX0RFQ0xfSU1BWERJViA9IEBIQVZFX0RFQ0xfSU1BWERJVkAKK0hBVkVfREVDTF9NRU1NRU0gPSBASEFWRV9ERUNMX01FTU1FTUAKK0hBVkVfREVDTF9NRU1SQ0hSID0gQEhBVkVfREVDTF9NRU1SQ0hSQAorSEFWRV9ERUNMX1NUUkRVUCA9IEBIQVZFX0RFQ0xfU1RSRFVQQAorSEFWRV9ERUNMX1NUUk5DQVNFQ01QID0gQEhBVkVfREVDTF9TVFJOQ0FTRUNNUEAKK0hBVkVfREVDTF9TVFJORFVQID0gQEhBVkVfREVDTF9TVFJORFVQQAorSEFWRV9ERUNMX1NUUk5MRU4gPSBASEFWRV9ERUNMX1NUUk5MRU5ACitIQVZFX0RFQ0xfU1RSVE9JTUFYID0gQEhBVkVfREVDTF9TVFJUT0lNQVhACitIQVZFX0RFQ0xfU1RSVE9LX1IgPSBASEFWRV9ERUNMX1NUUlRPS19SQAorSEFWRV9ERUNMX1NUUlRPVU1BWCA9IEBIQVZFX0RFQ0xfU1RSVE9VTUFYQAorSEFWRV9EVVAyID0gQEhBVkVfRFVQMkAKK0hBVkVfRlRSVU5DQVRFID0gQEhBVkVfRlRSVU5DQVRFQAorSEFWRV9HRVRTVUJPUFQgPSBASEFWRV9HRVRTVUJPUFRACitIQVZFX0lOVFRZUEVTX0ggPSBASEFWRV9JTlRUWVBFU19IQAorSEFWRV9JU1dDTlRSTCA9IEBIQVZFX0lTV0NOVFJMQAorSEFWRV9MT05HX0xPTkdfSU5UID0gQEhBVkVfTE9OR19MT05HX0lOVEAKK0hBVkVfTUVNUENQWSA9IEBIQVZFX01FTVBDUFlACitIQVZFX01LRFRFTVAgPSBASEFWRV9NS0RURU1QQAorSEFWRV9SRUFETElOSyA9IEBIQVZFX1JFQURMSU5LQAorSEFWRV9TSUdORURfU0lHX0FUT01JQ19UID0gQEhBVkVfU0lHTkVEX1NJR19BVE9NSUNfVEAKK0hBVkVfU0lHTkVEX1dDSEFSX1QgPSBASEFWRV9TSUdORURfV0NIQVJfVEAKK0hBVkVfU0lHTkVEX1dJTlRfVCA9IEBIQVZFX1NJR05FRF9XSU5UX1RACitIQVZFX1NMRUVQID0gQEhBVkVfU0xFRVBACitIQVZFX1NURElOVF9IID0gQEhBVkVfU1RESU5UX0hACitIQVZFX1NUUENQWSA9IEBIQVZFX1NUUENQWUAKK0hBVkVfU1RQTkNQWSA9IEBIQVZFX1NUUE5DUFlACitIQVZFX1NUUkNBU0VDTVAgPSBASEFWRV9TVFJDQVNFQ01QQAorSEFWRV9TVFJDQVNFU1RSID0gQEhBVkVfU1RSQ0FTRVNUUkAKK0hBVkVfU1RSQ0hSTlVMID0gQEhBVkVfU1RSQ0hSTlVMQAorSEFWRV9TVFJORFVQID0gQEhBVkVfU1RSTkRVUEAKK0hBVkVfU1RSUEJSSyA9IEBIQVZFX1NUUlBCUktACitIQVZFX1NUUlNFUCA9IEBIQVZFX1NUUlNFUEAKK0hBVkVfU1lTX0JJVFlQRVNfSCA9IEBIQVZFX1NZU19CSVRZUEVTX0hACitIQVZFX1NZU19JTlRUWVBFU19IID0gQEhBVkVfU1lTX0lOVFRZUEVTX0hACitIQVZFX1NZU19UWVBFU19IID0gQEhBVkVfU1lTX1RZUEVTX0hACitIQVZFX1VOSVNURF9IID0gQEhBVkVfVU5JU1REX0hACitIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlQgPSBASEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UQAorSEFWRV9XQ1RZUEVfSCA9IEBIQVZFX1dDVFlQRV9IQAorSEFWRV9XSU5UX1QgPSBASEFWRV9XSU5UX1RACitIQVZFX19CT09MID0gQEhBVkVfX0JPT0xACitJTlNUQUxMID0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lOVExJTkNTID0gQElOVExJTkNTQAorSU5UTExJQlMgPSBASU5UTExJQlNACitJTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACitJTlRUWVBFU19IID0gQElOVFRZUEVTX0hACitMREZMQUdTID0gQExERkxBR1NACitMSUJJQ09OViA9IEBMSUJJQ09OVkAKK0xJQklOVEwgPSBATElCSU5UTEAKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xOX1MgPSBATE5fU0AKK0xUQUxMT0NBID0gQExUQUxMT0NBQAorTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAorTFRMSUJJTlRMID0gQExUTElCSU5UTEAKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitMVF9BR0UgPSBATFRfQUdFQAorTFRfQ1VSUkVOVCA9IEBMVF9DVVJSRU5UQAorTFRfUkVMRUFTRSA9IEBMVF9SRUxFQVNFQAorTFRfUkVWSVNJT04gPSBATFRfUkVWSVNJT05ACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01LRElSX1AgPSBATUtESVJfUEAKK01TR0ZNVCA9IEBNU0dGTVRACitNU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACitNU0dNRVJHRSA9IEBNU0dNRVJHRUAKK09CSkVYVCA9IEBPQkpFWFRACitPUyA9IEBPU0AKK09TX0xJQlMgPSBAT1NfTElCU0AKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQVJURURMREZMQUdTID0gQFBBUlRFRExERkxBR1NACitQQVJURURfTElCUyA9IEBQQVJURURfTElCU0AKK1BBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAorUE9TVUIgPSBAUE9TVUJACitQT1dfTElCID0gQFBPV19MSUJACitQUklQVFJfUFJFRklYID0gQFBSSVBUUl9QUkVGSVhACitQUklfTUFDUk9TX0JST0tFTiA9IEBQUklfTUFDUk9TX0JST0tFTkAKK1BUUkRJRkZfVF9TVUZGSVggPSBAUFRSRElGRl9UX1NVRkZJWEAKK1JBTkxJQiA9IEBSQU5MSUJACitSRUlTRVJfTElCUyA9IEBSRUlTRVJfTElCU0AKK1JFUExBQ0VfQ0hPV04gPSBAUkVQTEFDRV9DSE9XTkAKK1JFUExBQ0VfRkNIRElSID0gQFJFUExBQ0VfRkNIRElSQAorUkVQTEFDRV9HRVRDV0QgPSBAUkVQTEFDRV9HRVRDV0RACitSRVBMQUNFX01LU1RFTVAgPSBAUkVQTEFDRV9NS1NURU1QQAorU0VEID0gQFNFREAKK1NFTElOVVhfTElCUyA9IEBTRUxJTlVYX0xJQlNACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU0lHX0FUT01JQ19UX1NVRkZJWCA9IEBTSUdfQVRPTUlDX1RfU1VGRklYQAorU0laRV9UX1NVRkZJWCA9IEBTSVpFX1RfU1VGRklYQAorU1REQk9PTF9IID0gQFNUREJPT0xfSEAKK1NURElOVF9IID0gQFNURElOVF9IQAorU1RSSVAgPSBAU1RSSVBACitVU0VfTkxTID0gQFVTRV9OTFNACitVVUlEX0xJQlMgPSBAVVVJRF9MSUJTQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorV0NIQVJfSCA9IEBXQ0hBUl9IQAorV0NIQVJfVF9TVUZGSVggPSBAV0NIQVJfVF9TVUZGSVhACitXQ1RZUEVfSCA9IEBXQ1RZUEVfSEAKK1dJTlRfVF9TVUZGSVggPSBAV0lOVF9UX1NVRkZJWEAKK1hHRVRURVhUID0gQFhHRVRURVhUQAorWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKK2Fic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACithYnNfc3JjZGlyID0gQGFic19zcmNkaXJACithYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACithYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKK2FjX2N0X0Y3NyA9IEBhY19jdF9GNzdACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAorZ2xfTElCT0JKUyA9IEBnbF9MSUJPQkpTQAorZ2xfTFRMSUJPQkpTID0gQGdsX0xUTElCT0JKU0AKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3BzZGlyID0gQHBzZGlyQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzcmNkaXIgPSBAc3JjZGlyQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKK3RvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitASEFWRV9DSEVDS19GQUxTRUBTVUJESVJTX0NIRUNLID0gCitASEFWRV9DSEVDS19UUlVFQFNVQkRJUlNfQ0hFQ0sgPSB0ZXN0cworU1VCRElSUyA9IGxhYmVscyBmcyAuICQoU1VCRElSU19DSEVDSykKK3BhcnRlZGluY2x1ZGVkaXIgPSAtSSQodG9wX3NyY2RpcikvbGliIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlCitsaWJfTFRMSUJSQVJJRVMgPSBsaWJwYXJ0ZWQubGEKK2xpYnBhcnRlZF9sYV9MREZMQUdTID0gLXZlcnNpb24taW5mbyAkKExUX0NVUlJFTlQpOiQoTFRfUkVWSVNJT04pOiQoTFRfQUdFKSBcCisJCQkJCQktcmVsZWFzZSAkKExUX1JFTEVBU0UpCisKK2xpYnBhcnRlZF9sYV9TT1VSQ0VTID0gZGVidWcuYwkJCVwKKwkJCWRldmljZS5jCQlcCisJCQlleGNlcHRpb24uYwkJXAorCQkJZmlsZXN5cy5jCQlcCisJCQlsaWJwYXJ0ZWQuYwkJXAorCQkJdGltZXIuYwkJCVwKKwkJCXVuaXQuYwkJCVwKKwkJCWRpc2suYwkJCVwKKwkJCWNzL2dlb20uYwkJXAorCQkJY3MvY29uc3RyYWludC5jCQlcCisJCQljcy9uYXRtYXRoLmMJCVwKKwkJCWFyY2gvYmxrcGcuaAkJXAorCQkJYXJjaC8kKE9TKS5jCisKK0VYVFJBX2xpYnBhcnRlZF9sYV9TT1VSQ0VTID0gYXJjaC9saW51eC5jCQlcCisJCQkJYXJjaC9nbnUuYyBcCisJCQkJYXJjaC9iZW9zLmMKKworbGlicGFydGVkX2xhX0xJQkFERCA9ICQoT1NfTElCUykJCVwKKwkJCSQoRExfTElCUykJCVwKKwkJCSQoRE1fTElCUykJCVwKKwkJCSQoU0VMSU5VWF9MSUJTKQkJXAorCQkJJChJTlRMTElCUykJCVwKKwkJCWZzL2xpYmZzLmxhCQlcCisJCQlsYWJlbHMvbGlibGFiZWxzLmxhCisKK0VYVFJBX0RJU1QgPSBtYnIucworSU5DTFVERVMgPSAkKHBhcnRlZGluY2x1ZGVkaXIpICQoSU5UTElOQ1MpCitNQUlOVEFJTkVSQ0xFQU5GSUxFUyA9IE1ha2VmaWxlLmluCithbGw6IGFsbC1yZWN1cnNpdmUKKworLlNVRkZJWEVTOgorLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagorJChzcmNkaXIpL01ha2VmaWxlLmluOiAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggXAorCQkmJiBleGl0IDA7IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251ICBsaWJwYXJ0ZWQvTWFrZWZpbGUnOyBcCisJY2QgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWdudSAgbGlicGFydGVkL01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAoraW5zdGFsbC1saWJMVExJQlJBUklFUzogJChsaWJfTFRMSUJSQVJJRVMpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJdGVzdCAteiAiJChsaWJkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJChsaWJkaXIpIgorCUBsaXN0PSckKGxpYl9MVExJQlJBUklFUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRwOyB0aGVuIFwKKwkgICAgZj0kKGFtX19zdHJpcF9kaXIpIFwKKwkgICAgZWNobyAiICQoTElCVE9PTCkgLS1tb2RlPWluc3RhbGwgJChsaWJMVExJQlJBUklFU19JTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJyQkcCcgJyQoREVTVERJUikkKGxpYmRpcikvJCRmJyI7IFwKKwkgICAgJChMSUJUT09MKSAtLW1vZGU9aW5zdGFsbCAkKGxpYkxUTElCUkFSSUVTX0lOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAiJCRwIiAiJChERVNURElSKSQobGliZGlyKS8kJGYiOyBcCisJICBlbHNlIDo7IGZpOyBcCisJZG9uZQorCit1bmluc3RhbGwtbGliTFRMSUJSQVJJRVM6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChsaWJfTFRMSUJSQVJJRVMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBwPSQoYW1fX3N0cmlwX2RpcikgXAorCSAgZWNobyAiICQoTElCVE9PTCkgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAnJChERVNURElSKSQobGliZGlyKS8kJHAnIjsgXAorCSAgJChMSUJUT09MKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICIkKERFU1RESVIpJChsaWJkaXIpLyQkcCI7IFwKKwlkb25lCisKK2NsZWFuLWxpYkxUTElCUkFSSUVTOgorCS10ZXN0IC16ICIkKGxpYl9MVExJQlJBUklFUykiIHx8IHJtIC1mICQobGliX0xUTElCUkFSSUVTKQorCUBsaXN0PSckKGxpYl9MVExJQlJBUklFUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGRpcj0iYGVjaG8gJCRwIHwgc2VkIC1lICdzfC9bXi9dKiQkfHwnYCI7IFwKKwkgIHRlc3QgIiQkZGlyIiAhPSAiJCRwIiB8fCBkaXI9LjsgXAorCSAgZWNobyAicm0gLWYgXCIkJHtkaXJ9L3NvX2xvY2F0aW9uc1wiIjsgXAorCSAgcm0gLWYgIiQke2Rpcn0vc29fbG9jYXRpb25zIjsgXAorCWRvbmUKK2xpYnBhcnRlZC5sYTogJChsaWJwYXJ0ZWRfbGFfT0JKRUNUUykgJChsaWJwYXJ0ZWRfbGFfREVQRU5ERU5DSUVTKSAKKwkkKGxpYnBhcnRlZF9sYV9MSU5LKSAtcnBhdGggJChsaWJkaXIpICQobGlicGFydGVkX2xhX09CSkVDVFMpICQobGlicGFydGVkX2xhX0xJQkFERCkgJChMSUJTKQorCittb3N0bHljbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLiQoT0JKRVhUKQorCitkaXN0Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi50YWIuYworCitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvJChPUykuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9iZW9zLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvY29uc3RyYWludC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2RlYnVnLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZGV2aWNlLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZGlzay5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2V4Y2VwdGlvbi5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2ZpbGVzeXMuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9nZW9tLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZ251LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGlicGFydGVkLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGludXguUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9uYXRtYXRoLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvdGltZXIuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS91bml0LlBsb0BhbV9fcXVvdGVACisKKy5jLm86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgJDwKKworLmMub2JqOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgYCQoQ1lHUEFUSF9XKSAnJDwnYAorCisuYy5sbzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAorCitnZW9tLmxvOiBjcy9nZW9tLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ2VvbS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvZ2VvbS5UcG8gLWMgLW8gZ2VvbS5sbyBgdGVzdCAtZiAnY3MvZ2VvbS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bjcy9nZW9tLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9nZW9tLlRwbyAkKERFUERJUikvZ2VvbS5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2NzL2dlb20uYycgb2JqZWN0PSdnZW9tLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGdlb20ubG8gYHRlc3QgLWYgJ2NzL2dlb20uYycgfHwgZWNobyAnJChzcmNkaXIpLydgY3MvZ2VvbS5jCisKK2NvbnN0cmFpbnQubG86IGNzL2NvbnN0cmFpbnQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBjb25zdHJhaW50LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9jb25zdHJhaW50LlRwbyAtYyAtbyBjb25zdHJhaW50LmxvIGB0ZXN0IC1mICdjcy9jb25zdHJhaW50LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGNzL2NvbnN0cmFpbnQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2NvbnN0cmFpbnQuVHBvICQoREVQRElSKS9jb25zdHJhaW50LlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nY3MvY29uc3RyYWludC5jJyBvYmplY3Q9J2NvbnN0cmFpbnQubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gY29uc3RyYWludC5sbyBgdGVzdCAtZiAnY3MvY29uc3RyYWludC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bjcy9jb25zdHJhaW50LmMKKworbmF0bWF0aC5sbzogY3MvbmF0bWF0aC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIG5hdG1hdGgubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL25hdG1hdGguVHBvIC1jIC1vIG5hdG1hdGgubG8gYHRlc3QgLWYgJ2NzL25hdG1hdGguYycgfHwgZWNobyAnJChzcmNkaXIpLydgY3MvbmF0bWF0aC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvbmF0bWF0aC5UcG8gJChERVBESVIpL25hdG1hdGguUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdjcy9uYXRtYXRoLmMnIG9iamVjdD0nbmF0bWF0aC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBuYXRtYXRoLmxvIGB0ZXN0IC1mICdjcy9uYXRtYXRoLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGNzL25hdG1hdGguYworCiskKE9TKS5sbzogYXJjaC8kKE9TKS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UICQoT1MpLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKE9TKS5UcG8gLWMgLW8gJChPUykubG8gYHRlc3QgLWYgJ2FyY2gvJChPUykuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJjaC8kKE9TKS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvJChPUykuVHBvICQoREVQRElSKS8kKE9TKS5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2FyY2gvJChPUykuYycgb2JqZWN0PSckKE9TKS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyAkKE9TKS5sbyBgdGVzdCAtZiAnYXJjaC8kKE9TKS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmNoLyQoT1MpLmMKKworbGludXgubG86IGFyY2gvbGludXguYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaW51eC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGludXguVHBvIC1jIC1vIGxpbnV4LmxvIGB0ZXN0IC1mICdhcmNoL2xpbnV4LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFyY2gvbGludXguYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xpbnV4LlRwbyAkKERFUERJUikvbGludXguUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdhcmNoL2xpbnV4LmMnIG9iamVjdD0nbGludXgubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGludXgubG8gYHRlc3QgLWYgJ2FyY2gvbGludXguYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJjaC9saW51eC5jCisKK2dudS5sbzogYXJjaC9nbnUuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBnbnUubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2dudS5UcG8gLWMgLW8gZ251LmxvIGB0ZXN0IC1mICdhcmNoL2dudS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmNoL2dudS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvZ251LlRwbyAkKERFUERJUikvZ251LlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nYXJjaC9nbnUuYycgb2JqZWN0PSdnbnUubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZ251LmxvIGB0ZXN0IC1mICdhcmNoL2dudS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmNoL2dudS5jCisKK2Jlb3MubG86IGFyY2gvYmVvcy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGJlb3MubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2Jlb3MuVHBvIC1jIC1vIGJlb3MubG8gYHRlc3QgLWYgJ2FyY2gvYmVvcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhcmNoL2Jlb3MuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2Jlb3MuVHBvICQoREVQRElSKS9iZW9zLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nYXJjaC9iZW9zLmMnIG9iamVjdD0nYmVvcy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBiZW9zLmxvIGB0ZXN0IC1mICdhcmNoL2Jlb3MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXJjaC9iZW9zLmMKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKKworIyBUaGlzIGRpcmVjdG9yeSdzIHN1YmRpcmVjdG9yaWVzIGFyZSBtb3N0bHkgaW5kZXBlbmRlbnQ7IHlvdSBjYW4gY2QKKyMgaW50byB0aGVtIGFuZCBydW4gYG1ha2UnIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCB0aGlzIE1ha2VmaWxlLgorIyBUbyBjaGFuZ2UgdGhlIHZhbHVlcyBvZiBgbWFrZScgdmFyaWFibGVzOiBpbnN0ZWFkIG9mIGVkaXRpbmcgTWFrZWZpbGVzLAorIyAoMSkgaWYgdGhlIHZhcmlhYmxlIGlzIHNldCBpbiBgY29uZmlnLnN0YXR1cycsIGVkaXQgYGNvbmZpZy5zdGF0dXMnCisjICAgICAod2hpY2ggd2lsbCBjYXVzZSB0aGUgTWFrZWZpbGVzIHRvIGJlIHJlZ2VuZXJhdGVkIHdoZW4geW91IHJ1biBgbWFrZScpOworIyAoMikgb3RoZXJ3aXNlLCBwYXNzIHRoZSBkZXNpcmVkIHZhbHVlcyBvbiB0aGUgYG1ha2UnIGNvbW1hbmQgbGluZS4KKyQoUkVDVVJTSVZFX1RBUkdFVFMpOgorCUBmYWlsY29tPSdleGl0IDEnOyBcCisJZm9yIGYgaW4geCAkJE1BS0VGTEFHUzsgZG8gXAorCSAgY2FzZSAkJGYgaW4gXAorCSAgICAqPSogfCAtLVsha10qKTs7IFwKKwkgICAgKmsqKSBmYWlsY29tPSdmYWlsPXllcyc7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWRvdF9zZWVuPW5vOyBcCisJdGFyZ2V0PWBlY2hvICRAIHwgc2VkIHMvLXJlY3Vyc2l2ZS8vYDsgXAorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgZWNobyAiTWFraW5nICQkdGFyZ2V0IGluICQkc3ViZGlyIjsgXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIFwKKwkgICAgZG90X3NlZW49eWVzOyBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQtYW0iOyBcCisJICBlbHNlIFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKKwkgIGZpOyBcCisJICAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRsb2NhbF90YXJnZXQpIFwKKwkgIHx8IGV2YWwgJCRmYWlsY29tOyBcCisJZG9uZTsgXAorCWlmIHRlc3QgIiQkZG90X3NlZW4iID0gIm5vIjsgdGhlbiBcCisJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAiJCR0YXJnZXQtYW0iIHx8IGV4aXQgMTsgXAorCWZpOyB0ZXN0IC16ICIkJGZhaWwiCisKKyQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpOgorCUBmYWlsY29tPSdleGl0IDEnOyBcCisJZm9yIGYgaW4geCAkJE1BS0VGTEFHUzsgZG8gXAorCSAgY2FzZSAkJGYgaW4gXAorCSAgICAqPSogfCAtLVsha10qKTs7IFwKKwkgICAgKmsqKSBmYWlsY29tPSdmYWlsPXllcyc7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWRvdF9zZWVuPW5vOyBcCisJY2FzZSAiJEAiIGluIFwKKwkgIGRpc3RjbGVhbi0qIHwgbWFpbnRhaW5lci1jbGVhbi0qKSBsaXN0PSckKERJU1RfU1VCRElSUyknIDs7IFwKKwkgICopIGxpc3Q9JyQoU1VCRElSUyknIDs7IFwKKwllc2FjOyBcCisJcmV2PScnOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIDo7IGVsc2UgXAorCSAgICByZXY9IiQkc3ViZGlyICQkcmV2IjsgXAorCSAgZmk7IFwKKwlkb25lOyBcCisJcmV2PSIkJHJldiAuIjsgXAorCXRhcmdldD1gZWNobyAkQCB8IHNlZCBzLy1yZWN1cnNpdmUvL2A7IFwKKwlmb3Igc3ViZGlyIGluICQkcmV2OyBkbyBcCisJICBlY2hvICJNYWtpbmcgJCR0YXJnZXQgaW4gJCRzdWJkaXIiOyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0LWFtIjsgXAorCSAgZWxzZSBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQiOyBcCisJICBmaTsgXAorCSAgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCisJICB8fCBldmFsICQkZmFpbGNvbTsgXAorCWRvbmUgJiYgdGVzdCAteiAiJCRmYWlsIgordGFncy1yZWN1cnNpdmU6CisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICB0ZXN0ICIkJHN1YmRpciIgPSAuIHx8IChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSB0YWdzKTsgXAorCWRvbmUKK2N0YWdzLXJlY3Vyc2l2ZToKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGN0YWdzKTsgXAorCWRvbmUKKworSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAorCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAorCW1raWQgLWZJRCAkJHVuaXF1ZQordGFnczogVEFHUworCitUQUdTOiB0YWdzLXJlY3Vyc2l2ZSAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJdGFncz07IFwKKwloZXJlPWBwd2RgOyBcCisJaWYgKCQoRVRBR1MpIC0tZXRhZ3MtaW5jbHVkZSAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCisJICBpbmNsdWRlX29wdGlvbj0tLWV0YWdzLWluY2x1ZGU7IFwKKwkgIGVtcHR5X2ZpeD0uOyBcCisJZWxzZSBcCisJICBpbmNsdWRlX29wdGlvbj0tLWluY2x1ZGU7IFwKKwkgIGVtcHR5X2ZpeD07IFwKKwlmaTsgXAorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgdGVzdCAhIC1mICQkc3ViZGlyL1RBR1MgfHwgXAorCSAgICAgIHRhZ3M9IiQkdGFncyAkJGluY2x1ZGVfb3B0aW9uPSQkaGVyZS8kJHN1YmRpci9UQUdTIjsgXAorCSAgZmk7IFwKKwlkb25lOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKwkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKKwkgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgJCR0YWdzICQkdW5pcXVlOyBcCisJZmkKK2N0YWdzOiBDVEFHUworQ1RBR1M6IGN0YWdzLXJlY3Vyc2l2ZSAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJdGFncz07IFwKKwloZXJlPWBwd2RgOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIiBcCisJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCisJICAgICAkJHRhZ3MgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmIGNkICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAkJGhlcmUKKworZGlzdGNsZWFuLXRhZ3M6CisJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1wUiAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLXBSICQkZC8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgJChkaXN0ZGlyKS8kJGZpbGUgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICQoZGlzdGRpcikvJCRmaWxlIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKKwlsaXN0PSckKERJU1RfU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAorCSAgICB8fCAkKE1LRElSX1ApICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgICBkaXN0ZGlyPWAkKGFtX19jZCkgJChkaXN0ZGlyKSAmJiBwd2RgOyBcCisJICAgIHRvcF9kaXN0ZGlyPWAkKGFtX19jZCkgJCh0b3BfZGlzdGRpcikgJiYgcHdkYDsgXAorCSAgICAoY2QgJCRzdWJkaXIgJiYgXAorCSAgICAgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIFwKKwkgICAgICAgIHRvcF9kaXN0ZGlyPSIkJHRvcF9kaXN0ZGlyIiBcCisJICAgICAgICBkaXN0ZGlyPSIkJGRpc3RkaXIvJCRzdWJkaXIiIFwKKwkJYW1fX3JlbW92ZV9kaXN0ZGlyPTogXAorCQlhbV9fc2tpcF9sZW5ndGhfY2hlY2s9OiBcCisJICAgICAgICBkaXN0ZGlyKSBcCisJICAgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1yZWN1cnNpdmUKK2FsbC1hbTogTWFrZWZpbGUgJChMVExJQlJBUklFUykKK2luc3RhbGxkaXJzOiBpbnN0YWxsZGlycy1yZWN1cnNpdmUKK2luc3RhbGxkaXJzLWFtOgorCWZvciBkaXIgaW4gIiQoREVTVERJUikkKGxpYmRpcikiOyBkbyBcCisJICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCisJZG9uZQoraW5zdGFsbDogaW5zdGFsbC1yZWN1cnNpdmUKK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLXJlY3Vyc2l2ZQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtcmVjdXJzaXZlCit1bmluc3RhbGw6IHVuaW5zdGFsbC1yZWN1cnNpdmUKKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stcmVjdXJzaXZlCitpbnN0YWxsLXN0cmlwOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorCS10ZXN0IC16ICIkKE1BSU5UQUlORVJDTEVBTkZJTEVTKSIgfHwgcm0gLWYgJChNQUlOVEFJTkVSQ0xFQU5GSUxFUykKK2NsZWFuOiBjbGVhbi1yZWN1cnNpdmUKKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGliTFRMSUJSQVJJRVMgY2xlYW4tbGlidG9vbCBcCisJbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tcmVjdXJzaXZlCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktcmVjdXJzaXZlCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1yZWN1cnNpdmUKKworaW5mbzogaW5mby1yZWN1cnNpdmUKKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktcmVjdXJzaXZlCisKK2luc3RhbGwtZXhlYy1hbTogaW5zdGFsbC1saWJMVExJQlJBUklFUworCitpbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1yZWN1cnNpdmUKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tcmVjdXJzaXZlCisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtcmVjdXJzaXZlCisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtcmVjdXJzaXZlCisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUKKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1yZWN1cnNpdmUKKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1yZWN1cnNpdmUKKworcGRmLWFtOgorCitwczogcHMtcmVjdXJzaXZlCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06IHVuaW5zdGFsbC1saWJMVExJQlJBUklFUworCisuTUFLRTogJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUykgJChSRUNVUlNJVkVfVEFSR0VUUykgaW5zdGFsbC1hbSBcCisJaW5zdGFsbC1zdHJpcAorCisuUEhPTlk6ICQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpICQoUkVDVVJTSVZFX1RBUkdFVFMpIENUQUdTIEdUQUdTIFwKKwlhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAorCWNsZWFuLWxpYkxUTElCUkFSSUVTIGNsZWFuLWxpYnRvb2wgY3RhZ3MgY3RhZ3MtcmVjdXJzaXZlIFwKKwlkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIFwKKwlodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIFwKKwlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIFwKKwlpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gXAorCWluc3RhbGwtaW5mby1hbSBpbnN0YWxsLWxpYkxUTElCUkFSSUVTIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIFwKKwlpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBcCisJaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBpbnN0YWxsZGlycy1hbSBcCisJbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAorCW1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIFwKKwlwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdGFncy1yZWN1cnNpdmUgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSBcCisJdW5pbnN0YWxsLWxpYkxUTElCUkFSSUVTCisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvYXJjaC9iZW9zLmMgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2FyY2gvYmVvcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNmM4OTcKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2FyY2gvYmVvcy5jCkBAIC0wLDAgKzEsNjQwIEBACisvKgorICAgIGxpYnBhcnRlZCAtIGEgbGlicmFyeSBmb3IgbWFuaXB1bGF0aW5nIGRpc2sgcGFydGl0aW9ucworICAgIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKKyovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworI2luY2x1ZGUgPHBhcnRlZC9wYXJ0ZWQuaD4KKyNpbmNsdWRlIDxwYXJ0ZWQvZGVidWcuaD4KKyNpbmNsdWRlIDxwYXJ0ZWQvYmVvcy5oPgorCisvKiBQT1NJWCBoZWFkZXJzICovCisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKy8qIEJlT1MgQVBJcyAqLworI2luY2x1ZGUgPGRyaXZlcnMvRHJpdmVycy5oPgorCisvKiBaRVRBIFIxKyBBUElzICovCisjaWYgQl9aRVRBX1ZFUlNJT04gPj0gQl9aRVRBX1ZFUlNJT05fMV8wXzAKKyMgIGluY2x1ZGUgPGRldmljZS9hdGFfaW5mby5oPgorI2VuZGlmCisKKyNpZiBFTkFCTEVfTkxTCisjICBpbmNsdWRlIDxsaWJpbnRsLmg+CisjICBkZWZpbmUgXyhTdHJpbmcpIGRnZXR0ZXh0IChQQUNLQUdFLCBTdHJpbmcpCisjZWxzZQorIyAgZGVmaW5lIF8oU3RyaW5nKSAoU3RyaW5nKQorI2VuZGlmIC8qIEVOQUJMRV9OTFMgKi8KKworc3RhdGljIHZvaWQKK19zY2FuX2Zvcl9kaXNrcyhjb25zdCBjaGFyKiBwYXRoKQoreworCWNoYXIgc3ViZGlyW1BBVEhfTUFYXTsKKwlkaXJlbnRfdCogZW50cDsKKwlzaXplX3QgcG9zOworCURJUiogZGlycDsKKwkKKwlpZiAoKGRpcnA9b3BlbmRpcihwYXRoKSkgIT0gTlVMTCkKKwl7CisJCS8qIEJ1aWxkIGZpcnN0IHBhcnQgb2YgcGF0aCAqLworCQlzdHJjcHkoc3ViZGlyLCBwYXRoKTsKKwkJc3RyY2F0KHN1YmRpciwgIi8iKTsKKwkJcG9zID0gc3RybGVuKHN1YmRpcik7CisKKwkJLyogQ2hlY2sgYWxsIGRpcmVjdG9yeSBlbnRyaWVzLi4gKi8KKwkJd2hpbGUoKGVudHA9cmVhZGRpcihkaXJwKSkgIT0gTlVMTCkKKwkJeworCQkJLyogSWYgdGhleSBzdGFydCB3aXRoICcuJyBqdXN0IHNraXAgKi8KKwkJCWlmIChlbnRwLT5kX25hbWVbMF0gPT0gJy4nKQorCQkJCWNvbnRpbnVlOworCisJCQlzdHJjcHkoc3ViZGlyK3BvcywgZW50cC0+ZF9uYW1lKTsKKwkJCQorCQkJLyogL2Rldi9kaXNrLy4uLi9yYXcgYXJlIHRoZSBjb21wbGV0ZSBkaXNrcworCQkJCXdlJ3JlIGludGVyZXN0ZWQgaW4gKi8KKwkJCWlmIChzdHJjbXAoZW50cC0+ZF9uYW1lLCAicmF3IikgPT0gMCkKKwkJCQlfcGVkX2RldmljZV9wcm9iZShzdWJkaXIpOworCQkJZWxzZQkvKiBJZiBub3QgJ3JhdycsIGl0IG1vc3Qgb2Z0ZW4gd2lsbAorCQkJCQkJYmUgYW5vdGhlciBzdWJkaXIgKi8KKwkJCQlfc2Nhbl9mb3JfZGlza3Moc3ViZGlyKTsKKwkJfQorCQkKKwkJY2xvc2VkaXIoZGlycCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorX2ZsdXNoX2NhY2hlKFBlZERldmljZSogZGV2KQoreworCWludCBmZDsKKwlpZiAoKGZkPW9wZW4oZGV2LT5wYXRoLCBPX1JET05MWSkpIDwgMCkKKwl7CisJCWlvY3RsKGZkLCBCX0ZMVVNIX0RSSVZFX0NBQ0hFKTsKKwkJY2xvc2UoZmQpOworCX0KK30KKworI2lmIEJfWkVUQV9WRVJTSU9OID49IEJfWkVUQV9WRVJTSU9OXzFfMF8wCitzdGF0aWMgaW50CitfZGV2aWNlX2luaXRfYXRhKFBlZERldmljZSogZGV2KQoreworCWF0YV9kZXZpY2VfaW5mb2Jsb2NrIGlkZV9pbmZvOworCWludCBtYXhsZW4sIGxlbiwgaWR4LCBmZDsKKwljaGFyIGJ1ZlsyNTZdOworCisJLyogVHJ5IGFuZCBnZXQgaW5mb3JtYXRpb24gYWJvdXQgZGV2aWNlIGZyb20gQVRBKFBJKSBkcml2ZXIgKi8JCisJaWYgKChmZD1vcGVuKGRldi0+cGF0aCwgT19SRE9OTFkpKSA8IDApCisJCWdvdG8gYXRhX2Vycm9yOworCQorCWlmIChpb2N0bChmZCwgQl9BVEFfR0VUX0RFVklDRV9JTkZPLCAmaWRlX2luZm8sIHNpemVvZihpZGVfaW5mbykpIDwgMCkKKwkJZ290byBhdGFfZXJyb3JfY2xvc2U7CisKKwljbG9zZShmZCk7CisJCisJLyogQ29weSAnbG9naWNhbCcgZGltZW5zaW9ucyAqLworCWRldi0+Ymlvc19nZW9tLmN5bGluZGVycyA9IGlkZV9pbmZvLmN5bGluZGVyczsKKwlkZXYtPmJpb3NfZ2VvbS5oZWFkcyA9IGlkZV9pbmZvLmhlYWRzOworCWRldi0+Ymlvc19nZW9tLnNlY3RvcnMgPSBpZGVfaW5mby5zZWN0b3JzOworCQorCS8qIENvcHkgdXNlZCBkaW1lbnNpb25zICovCisJZGV2LT5od19nZW9tLmN5bGluZGVycyA9IGlkZV9pbmZvLmN1cnJlbnRfY3lsaW5kZXJzOworCWRldi0+aHdfZ2VvbS5oZWFkcyA9IGlkZV9pbmZvLmN1cnJlbnRfaGVhZHM7CisJZGV2LT5od19nZW9tLnNlY3RvcnMgPSBpZGVfaW5mby5jdXJyZW50X3NlY3RvcnM7CisKKwkvKiBDb3B5IHRvdGFsIG51bWJlciBvZiBzZWN0b3JzICovCisJaWYgKGlkZV9pbmZvLl80OF9iaXRfYWRkcmVzc2VzX3N1cHBvcnRlZCkKKwkJZGV2LT5sZW5ndGggPSBpZGVfaW5mby5MQkE0OF90b3RhbF9zZWN0b3JzOworCWVsc2UgaWYgKGlkZV9pbmZvLkxCQV9zdXBwb3J0ZWQpCisJCWRldi0+bGVuZ3RoID0gaWRlX2luZm8uTEJBX3RvdGFsX3NlY3RvcnM7CisJZWxzZQorCQlkZXYtPmxlbmd0aCA9IGlkZV9pbmZvLmN5bGluZGVycyAqIAorCQkJCWlkZV9pbmZvLmhlYWRzICogCisJCQkJaWRlX2luZm8uc2VjdG9yczsKKworCWRldi0+c2VjdG9yX3NpemUgPQorCWRldi0+cGh5c19zZWN0b3Jfc2l6ZSA9IFBFRF9TRUNUT1JfU0laRV9ERUZBVUxUOworCisJLyogVXNlIHNlbnNpYmxlIG1vZGVsICovCisJbWF4bGVuPXNpemVvZihpZGVfaW5mby5tb2RlbF9udW1iZXIpOworCXN0cm5jcHkoYnVmLCBpZGVfaW5mby5tb2RlbF9udW1iZXIsIG1heGxlbik7CisJYnVmW21heGxlbl0gPSAnXDAnOworCQorCWZvciAobGVuPS0xLCBpZHg9bWF4bGVuLTE7IGlkeCA+IDAgJiYgbGVuIDwgMDsgaWR4LS0pCisJCWlmIChidWZbaWR4XSA+IDB4MjApCisJCQlsZW4gPSBpZHg7CisJCisJYnVmWyhsZW4gPT0gLTEpID8gMCA6IGxlbisxXSA9ICdcMCc7CQkJCQorCQorCWRldi0+bW9kZWwgPSBzdHJkdXAoYnVmKTsKKworCXJldHVybiBQRURfREVWSUNFX0lERTsKKworYXRhX2Vycm9yX2Nsb3NlOgorCWNsb3NlKGZkKTsKKworYXRhX2Vycm9yOgorCXJldHVybiAwOworfQorI2VuZGlmIAorCitzdGF0aWMgaW50CitfZGV2aWNlX2luaXRfZ2VuZXJpY19ibGtkZXYoUGVkRGV2aWNlKiBkZXYpCit7CisJZGV2aWNlX2dlb21ldHJ5IGJpb3MsIG9zOworCWludCBnb3RfYmlvc19pbmZvID0gMDsKKwlpbnQgZmQ7CisKKwkvKiBUcnkgYW5kIGdldCBpbmZvcm1hdGlvbiBhYm91dCBkZXZpY2UgZnJvbSBBVEEoUEkpIGRyaXZlciAqLwkKKwlpZiAoKGZkPW9wZW4oZGV2LT5wYXRoLCBPX1JET05MWSkpIDwgMCkKKwkJZ290byBibGtkZXZfZXJyb3I7CisJCisJLyogQl9HRVRfR0VPTUVUUlkgaXMgbWFuZGF0b3J5ICovCisJaWYgKGlvY3RsKGZkLCBCX0dFVF9HRU9NRVRSWSwgJm9zLCBzaXplb2Yob3MpKSA8IDApCisJCWdvdG8gYmxrZGV2X2Vycm9yX2Nsb3NlOworCisJLyogQl9HRVRfQklPU19HRU9NRVRSWSBpcyBvcHRpb25hbCAqLworCWlmICghaW9jdGwoZmQsIEJfR0VUX0JJT1NfR0VPTUVUUlksICZiaW9zLCBzaXplb2YoYmlvcykpKQorCQlnb3RfYmlvc19pbmZvID0gMTsKKworCWNsb3NlKGZkKTsKKwkKKwlkZXYtPmh3X2dlb20uY3lsaW5kZXJzID0gb3MuY3lsaW5kZXJfY291bnQ7CisJZGV2LT5od19nZW9tLmhlYWRzID0gb3MuaGVhZF9jb3VudDsKKwlkZXYtPmh3X2dlb20uc2VjdG9ycyA9IG9zLnNlY3RvcnNfcGVyX3RyYWNrOworCQorCWRldi0+c2VjdG9yX3NpemUgPQorCWRldi0+cGh5c19zZWN0b3Jfc2l6ZSA9IG9zLmJ5dGVzX3Blcl9zZWN0b3I7CisJCisJaWYgKGdvdF9iaW9zX2luZm8pCisJeworCQlkZXYtPmJpb3NfZ2VvbS5jeWxpbmRlcnMgPSBiaW9zLmN5bGluZGVyX2NvdW50OworCQlkZXYtPmJpb3NfZ2VvbS5oZWFkcyA9IGJpb3MuaGVhZF9jb3VudDsKKwkJZGV2LT5iaW9zX2dlb20uc2VjdG9ycyA9IGJpb3Muc2VjdG9yc19wZXJfdHJhY2s7CisJfQorCWVsc2UKKwkJZGV2LT5iaW9zX2dlb20gPSBkZXYtPmh3X2dlb207CisKKwlkZXYtPm1vZGVsID0gc3RyZHVwKCIiKTsKKworCXJldHVybiBQRURfREVWSUNFX0lERTsKKwkKK2Jsa2Rldl9lcnJvcl9jbG9zZToKKwljbG9zZShmZCk7CisJCitibGtkZXZfZXJyb3I6CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK19kZXZpY2VfaW5pdF9ibGtkZXYoUGVkRGV2aWNlKiBkZXYpCit7CisJaW50IHR5cGU7CisKKyNpZiBCX1pFVEFfVkVSU0lPTiA+PSBCX1pFVEFfVkVSU0lPTl8xXzBfMAorCWlmICghKHR5cGU9X2RldmljZV9pbml0X2F0YShkZXYpKSkKKyNlbmRpZgorCXR5cGUgPSBfZGV2aWNlX2luaXRfZ2VuZXJpY19ibGtkZXYoZGV2KTsKKworCXJldHVybiB0eXBlOworfQorCitzdGF0aWMgaW50CitfZGV2aWNlX2luaXRfZmlsZShQZWREZXZpY2UqIGRldiwgc3RydWN0IHN0YXQqIGRldl9zdGF0cCkKK3sKKwlpZiAoIWRldl9zdGF0cC0+c3Rfc2l6ZSkKKwkJcmV0dXJuIDA7CisKKwlkZXYtPnNlY3Rvcl9zaXplID0KKwlkZXYtPnBoeXNfc2VjdG9yX3NpemUgPSBQRURfU0VDVE9SX1NJWkVfREVGQVVMVDsKKworCWRldi0+bGVuZ3RoID0gZGV2X3N0YXRwLT5zdF9zaXplIC8gUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQ7CisKKwlkZXYtPmJpb3NfZ2VvbS5jeWxpbmRlcnMgPSBkZXYtPmxlbmd0aCAvICg0ICogMzIpOworCWRldi0+Ymlvc19nZW9tLmhlYWRzID0gNDsKKwlkZXYtPmJpb3NfZ2VvbS5zZWN0b3JzID0gMzI7CisJZGV2LT5od19nZW9tID0gZGV2LT5iaW9zX2dlb207CisKKwlkZXYtPm1vZGVsID0gc3RyZHVwKF8oIkRpc2sgSW1hZ2UiKSk7CisJCisJcmV0dXJuIFBFRF9ERVZJQ0VfRklMRTsKK30KKworc3RhdGljIGludAorX2RldmljZV9pbml0KFBlZERldmljZSogZGV2KQoreworCXN0cnVjdCBzdGF0IGRldl9zdGF0OworCWludCB0eXBlID0gMDsKKwkKKwkvKiBDaGVjayBpZiB3ZSdyZSBhIHJlZ3VsYXIgZmlsZSAqLwkKKwlpZiAoc3RhdChkZXYtPnBhdGgsICZkZXZfc3RhdCkgPCAwKQorCQlnb3RvIGRvbmU7CisKKwlpZiAoU19JU0JMSyhkZXZfc3RhdC5zdF9tb2RlKSB8fCBTX0lTQ0hSKGRldl9zdGF0LnN0X21vZGUpKQorCQl0eXBlID0gX2RldmljZV9pbml0X2Jsa2RldihkZXYpOworCWVsc2UgaWYgKFNfSVNSRUcoZGV2X3N0YXQuc3RfbW9kZSkpCisJCXR5cGUgPSBfZGV2aWNlX2luaXRfZmlsZShkZXYsJmRldl9zdGF0KTsKKworZG9uZToKKwlyZXR1cm4gdHlwZTsKK30KKworCitzdGF0aWMgUGVkRGV2aWNlKgorYmVvc19uZXcgKGNvbnN0IGNoYXIqIHBhdGgpCit7CisJc3RydWN0IHN0YXQgc3RhdF9pbmZvOworCVBlZERldmljZSogZGV2OworCisJUEVEX0FTU0VSVChwYXRoICE9IE5VTEwsIHJldHVybiBOVUxMKTsKKworCWRldiA9IChQZWREZXZpY2UqKSBwZWRfbWFsbG9jIChzaXplb2YgKFBlZERldmljZSkpOworCWlmICghZGV2KQorCQlnb3RvIGVycm9yOworCisJZGV2LT5wYXRoID0gc3RyZHVwKHBhdGgpOworCWlmICghZGV2LT5wYXRoKQorCQlnb3RvIGVycm9yX2ZyZWVfZGV2OworCisJZGV2LT5hcmNoX3NwZWNpZmljIAorCQk9IChCRU9TU3BlY2lmaWMqKSBwZWRfbWFsbG9jKHNpemVvZihCRU9TU3BlY2lmaWMpKTsKKwlpZiAoZGV2LT5hcmNoX3NwZWNpZmljID09IE5VTEwpCisJCWdvdG8gZXJyb3JfZnJlZV9wYXRoOworCisJZGV2LT5vcGVuX2NvdW50ID0gMDsKKwlkZXYtPnJlYWRfb25seSA9IDA7CisJZGV2LT5leHRlcm5hbF9tb2RlID0gMDsKKwlkZXYtPmRpcnR5ID0gMDsKKwlkZXYtPmJvb3RfZGlydHkgPSAwOworCisJaWYgKChkZXYtPnR5cGU9X2RldmljZV9pbml0KGRldikpIDw9IDApCisJCWdvdG8gZXJyb3JfZnJlZV9hcmNoX3NwZWNpZmljOworCisJLyogQWxsIE9LISAqLworCXJldHVybiBkZXY7CisJCitlcnJvcl9mcmVlX2FyY2hfc3BlY2lmaWM6CisJcGVkX2ZyZWUgKGRldi0+YXJjaF9zcGVjaWZpYyk7CisJCitlcnJvcl9mcmVlX3BhdGg6CisJcGVkX2ZyZWUgKGRldi0+cGF0aCk7CisJCitlcnJvcl9mcmVlX2RldjoKKwlwZWRfZnJlZSAoZGV2KTsKKwkKK2Vycm9yOgorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZAorYmVvc19kZXN0cm95IChQZWREZXZpY2UqIGRldikKK3sKKwlwZWRfZnJlZSAoZGV2LT5hcmNoX3NwZWNpZmljKTsKKwlwZWRfZnJlZSAoZGV2LT5wYXRoKTsKKwlwZWRfZnJlZSAoZGV2LT5tb2RlbCk7CisJcGVkX2ZyZWUgKGRldik7Cit9CisKK3N0YXRpYyBpbnQKK2Jlb3NfaXNfYnVzeSAoUGVkRGV2aWNlKiBkZXYpCit7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2Jlb3Nfb3BlbiAoUGVkRGV2aWNlKiBkZXYpCit7CisJQkVPU1NwZWNpZmljKiBhcmNoX3NwZWNpZmljID0gQkVPU19TUEVDSUZJQyhkZXYpOworCityZXRyeToKKwlhcmNoX3NwZWNpZmljLT5mZCA9IG9wZW4oZGV2LT5wYXRoLCBPX1JEV1IpOworCWlmIChhcmNoX3NwZWNpZmljLT5mZCA9PSAtMSkgeworCQljaGFyKiByd19lcnJvcl9tc2cgPSBzdHJlcnJvcihlcnJubyk7CisKKwkJYXJjaF9zcGVjaWZpYy0+ZmQgPSBvcGVuIChkZXYtPnBhdGgsIE9fUkRPTkxZKTsKKwkJaWYgKGFyY2hfc3BlY2lmaWMtPmZkID09IC0xKSB7CisJCQlpZiAocGVkX2V4Y2VwdGlvbl90aHJvdyAoCisJCQkJCVBFRF9FWENFUFRJT05fRVJST1IsCisJCQkJCVBFRF9FWENFUFRJT05fUkVUUllfQ0FOQ0VMLAorCQkJCQlfKCJFcnJvciBvcGVuaW5nICVzOiAlcyIpLAorCQkJCQlkZXYtPnBhdGgsIHN0cmVycm9yIChlcnJubykpCisJCQkJCSE9IFBFRF9FWENFUFRJT05fUkVUUlkpIHsKKwkJCQkJCXJldHVybiAwOworCQkJCQl9IGVsc2UgeworCQkJCQkJZ290byByZXRyeTsKKwkJCQkJfQorCQl9IGVsc2UgeworCQkJcGVkX2V4Y2VwdGlvbl90aHJvdyAoCisJCQkJUEVEX0VYQ0VQVElPTl9XQVJOSU5HLAorCQkJCVBFRF9FWENFUFRJT05fT0ssCisJCQkJXygiVW5hYmxlIHRvIG9wZW4gJXMgcmVhZC13cml0ZSAoJXMpLiAgJXMgaGFzICIKKwkJCQkJImJlZW4gb3BlbmVkIHJlYWQtb25seS4iKSwKKwkJCQlkZXYtPnBhdGgsIHJ3X2Vycm9yX21zZywgZGV2LT5wYXRoKTsKKwkJCWRldi0+cmVhZF9vbmx5ID0gMTsKKwkJfQorCX0gZWxzZSB7CisJCWRldi0+cmVhZF9vbmx5ID0gMDsKKwl9CisKKwlfZmx1c2hfY2FjaGUgKGRldik7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludAorYmVvc19yZWZyZXNoX29wZW4gKFBlZERldmljZSogZGV2KQoreworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50CitiZW9zX2Nsb3NlIChQZWREZXZpY2UqIGRldikKK3sKKwlCRU9TU3BlY2lmaWMqIGFyY2hfc3BlY2lmaWMgPSBCRU9TX1NQRUNJRklDKGRldik7CisKKwlpZiAoZGV2LT5kaXJ0eSkKKwkJX2ZsdXNoX2NhY2hlIChkZXYpOworCisJY2xvc2UgKGFyY2hfc3BlY2lmaWMtPmZkKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50CitiZW9zX3JlZnJlc2hfY2xvc2UgKFBlZERldmljZSogZGV2KQoreworCWlmIChkZXYtPmRpcnR5KQorCQlfZmx1c2hfY2FjaGUgKGRldik7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludAorYmVvc19yZWFkIChjb25zdCBQZWREZXZpY2UqIGRldiwgdm9pZCogYnVmZmVyLCBQZWRTZWN0b3Igc3RhcnQsIFBlZFNlY3RvciBjb3VudCkKK3sKKwlCRU9TU3BlY2lmaWMqIGFyY2hfc3BlY2lmaWMgPSBCRU9TX1NQRUNJRklDKGRldik7CisJaW50IHN0YXR1czsKKwlQZWRFeGNlcHRpb25PcHRpb24gZXhfc3RhdHVzOworCXNpemVfdCByZWFkX2xlbmd0aCA9IGNvdW50ICogZGV2LT5zZWN0b3Jfc2l6ZTsKKworCVBFRF9BU1NFUlQoZGV2LT5zZWN0b3Jfc2l6ZSAlIFBFRF9TRUNUT1JfU0laRV9ERUZBVUxUID09IDAsIHJldHVybiAwKTsKKworCS8qIEZpcnN0LCB0cnkgdG8gc2VlayAqLworCXdoaWxlKDEpCisJeworCQlpZiAobHNlZWsoYXJjaF9zcGVjaWZpYy0+ZmQsIHN0YXJ0ICogZGV2LT5zZWN0b3Jfc2l6ZSwgU0VFS19TRVQpCisJCQk9PSBzdGFydCAqIGRldi0+c2VjdG9yX3NpemUpCisJCQlicmVhazsKKworCQlleF9zdGF0dXMgPSBwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCVBFRF9FWENFUFRJT05fRVJST1IsCisJCQlQRURfRVhDRVBUSU9OX1JFVFJZX0lHTk9SRV9DQU5DRUwsCisJCQlfKCIlcyBkdXJpbmcgc2VlayBmb3IgcmVhZCBvbiAlcyIpLAorCQkJc3RyZXJyb3IgKGVycm5vKSwgZGV2LT5wYXRoKTsKKworCQlzd2l0Y2ggKGV4X3N0YXR1cykKKwkJeworCQkJY2FzZSBQRURfRVhDRVBUSU9OX0lHTk9SRToKKwkJCQlyZXR1cm4gMTsKKwkJCWNhc2UgUEVEX0VYQ0VQVElPTl9SRVRSWToKKwkJCQlicmVhayAvKiBvdXQgb2Ygc3dpdGNoICovOworCQkJY2FzZSBQRURfRVhDRVBUSU9OX1VOSEFORExFRDoKKwkJCQlwZWRfZXhjZXB0aW9uX2NhdGNoICgpOworCQkJY2FzZSBQRURfRVhDRVBUSU9OX0NBTkNFTDoKKwkJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwkKKwkvKiBJZiB3ZSBzZWVrZWQgb2ssIG5vdyBpcyB0aGUgdGltZSB0byByZWFkICovCisJd2hpbGUgKDEpCisJeworCQlzdGF0dXMgPSByZWFkKGFyY2hfc3BlY2lmaWMtPmZkLCBidWZmZXIsIHJlYWRfbGVuZ3RoKTsKKwkJaWYgKHN0YXR1cyA9PSBjb3VudCAqIGRldi0+c2VjdG9yX3NpemUpCisJCQlicmVhazsKKwkJCisJCWlmIChzdGF0dXMgPiAwKQorCQl7CisJCQlyZWFkX2xlbmd0aCAtPSBzdGF0dXM7CisJCQlidWZmZXIgKz0gc3RhdHVzOworCQkJY29udGludWU7CisJCX0KKworCQlleF9zdGF0dXMgPSBwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCVBFRF9FWENFUFRJT05fRVJST1IsCisJCQlQRURfRVhDRVBUSU9OX1JFVFJZX0lHTk9SRV9DQU5DRUwsCisJCQlfKCIlcyBkdXJpbmcgcmVhZCBvbiAlcyIpLAorCQkJc3RyZXJyb3IgKGVycm5vKSwKKwkJCWRldi0+cGF0aCk7CisKKwkJc3dpdGNoIChleF9zdGF0dXMpCisJCXsKKwkJCWNhc2UgUEVEX0VYQ0VQVElPTl9JR05PUkU6CisJCQkJcmV0dXJuIDE7CisJCQljYXNlIFBFRF9FWENFUFRJT05fUkVUUlk6CisJCQkJYnJlYWs7CisJCQljYXNlIFBFRF9FWENFUFRJT05fVU5IQU5ETEVEOgorCQkJCXBlZF9leGNlcHRpb25fY2F0Y2ggKCk7CisJCQljYXNlIFBFRF9FWENFUFRJT05fQ0FOQ0VMOgorCQkJCXJldHVybiAwOworCQl9CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2Jlb3Nfd3JpdGUgKFBlZERldmljZSogZGV2LCBjb25zdCB2b2lkKiBidWZmZXIsIFBlZFNlY3RvciBzdGFydCwKKwlQZWRTZWN0b3IgY291bnQpCit7CisJQkVPU1NwZWNpZmljKiBhcmNoX3NwZWNpZmljID0gQkVPU19TUEVDSUZJQyhkZXYpOworCWludCAgICAgICAgICAgICAgICAgICAgIHN0YXR1czsKKwlQZWRFeGNlcHRpb25PcHRpb24gICAgICBleF9zdGF0dXM7CisJc2l6ZV90ICAgICAgICAgICAgICAgICAgd3JpdGVfbGVuZ3RoID0gY291bnQgKiBkZXYtPnNlY3Rvcl9zaXplOworCisJUEVEX0FTU0VSVChkZXYtPnNlY3Rvcl9zaXplICUgUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQgPT0gMCwgcmV0dXJuIDApOworCisJaWYgKGRldi0+cmVhZF9vbmx5KQorCXsKKwkJaWYgKHBlZF9leGNlcHRpb25fdGhyb3cgKAorCQkJUEVEX0VYQ0VQVElPTl9FUlJPUiwKKwkJCVBFRF9FWENFUFRJT05fSUdOT1JFX0NBTkNFTCwKKwkJCV8oIkNhbid0IHdyaXRlIHRvICVzLCBiZWNhdXNlIGl0IGlzIG9wZW5lZCByZWFkLW9ubHkuIiksCisJCQlkZXYtPnBhdGgpCisJCQkhPSBQRURfRVhDRVBUSU9OX0lHTk9SRSkKKwkJCXJldHVybiAwOworCQllbHNlCisJCQlyZXR1cm4gMTsKKwl9CisKKwl3aGlsZSgxKQorCXsKKwkJaWYgKGxzZWVrKGFyY2hfc3BlY2lmaWMtPmZkLHN0YXJ0ICogZGV2LT5zZWN0b3Jfc2l6ZSxTRUVLX1NFVCkKKwkJCT09IHN0YXJ0ICogZGV2LT5zZWN0b3Jfc2l6ZSkKKwkJCWJyZWFrOworCisJCWV4X3N0YXR1cyA9IHBlZF9leGNlcHRpb25fdGhyb3cgKAorCQkJUEVEX0VYQ0VQVElPTl9FUlJPUiwgUEVEX0VYQ0VQVElPTl9SRVRSWV9JR05PUkVfQ0FOQ0VMLAorCQkJXygiJXMgZHVyaW5nIHNlZWsgZm9yIHdyaXRlIG9uICVzIiksCisJCQlzdHJlcnJvciAoZXJybm8pLCBkZXYtPnBhdGgpOworCisJCXN3aXRjaCAoZXhfc3RhdHVzKQorCQl7CisJCQljYXNlIFBFRF9FWENFUFRJT05fSUdOT1JFOgorCQkJCXJldHVybiAxOworCQkJY2FzZSBQRURfRVhDRVBUSU9OX1JFVFJZOgorCQkJCWJyZWFrOworCQkJY2FzZSBQRURfRVhDRVBUSU9OX1VOSEFORExFRDoKKwkJCQlwZWRfZXhjZXB0aW9uX2NhdGNoICgpOworCQkJY2FzZSBQRURfRVhDRVBUSU9OX0NBTkNFTDoKKwkJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworI2lmZGVmIFJFQURfT05MWQorCXByaW50ZiAoInBlZF9kZXZpY2Vfd3JpdGUgKFwiJXNcIiwgJXAsICVkLCAlZClcbiIsCisJCWRldi0+cGF0aCwgYnVmZmVyLCAoaW50KSBzdGFydCwgKGludCkgY291bnQpOworI2Vsc2UKKwlkZXYtPmRpcnR5ID0gMTsKKwl3aGlsZSgxKQorCXsKKwkJc3RhdHVzID0gd3JpdGUgKGFyY2hfc3BlY2lmaWMtPmZkLCBidWZmZXIsIHdyaXRlX2xlbmd0aCk7CisJCWlmIChzdGF0dXMgPT0gY291bnQgKiBkZXYtPnNlY3Rvcl9zaXplKQorCQkJYnJlYWs7CisJCQorCQlpZiAoc3RhdHVzID4gMCkKKwkJeworCQkJd3JpdGVfbGVuZ3RoIC09IHN0YXR1czsKKwkJCWJ1ZmZlciArPSBzdGF0dXM7CisJCQljb250aW51ZTsKKwkJfQorCisJCWV4X3N0YXR1cyA9IHBlZF9leGNlcHRpb25fdGhyb3cgKAorCQkJUEVEX0VYQ0VQVElPTl9FUlJPUiwKKwkJCVBFRF9FWENFUFRJT05fUkVUUllfSUdOT1JFX0NBTkNFTCwKKwkJCV8oIiVzIGR1cmluZyB3cml0ZSBvbiAlcyIpLAorCQkJc3RyZXJyb3IgKGVycm5vKSwgZGV2LT5wYXRoKTsKKworCQlzd2l0Y2ggKGV4X3N0YXR1cykKKwkJeworCQkJY2FzZSBQRURfRVhDRVBUSU9OX0lHTk9SRToKKwkJCQlyZXR1cm4gMTsKKwkJCWNhc2UgUEVEX0VYQ0VQVElPTl9SRVRSWToKKwkJCQlicmVhazsKKwkJCWNhc2UgUEVEX0VYQ0VQVElPTl9VTkhBTkRMRUQ6CisJCQkJcGVkX2V4Y2VwdGlvbl9jYXRjaCAoKTsKKwkJCWNhc2UgUEVEX0VYQ0VQVElPTl9DQU5DRUw6CisJCQkJcmV0dXJuIDA7CisJCX0KKwl9CisjZW5kaWYgLyogIVJFQURfT05MWSAqLworCQorCXJldHVybiAxOworfQorCitzdGF0aWMgUGVkU2VjdG9yCitiZW9zX2NoZWNrIChQZWREZXZpY2UqIGRldiwgdm9pZCogYnVmZmVyLCBQZWRTZWN0b3Igc3RhcnQsIFBlZFNlY3RvciBjb3VudCkKK3sKKwlCRU9TU3BlY2lmaWMqCWFyY2hfc3BlY2lmaWMgPSBCRU9TX1NQRUNJRklDKGRldik7CisJUGVkU2VjdG9yCQlkb25lID0gMDsKKwlpbnQJCQkJc3RhdHVzOworCisJUEVEX0FTU0VSVChkZXYgIT0gTlVMTCwgcmV0dXJuIDApOworICAgICAgICAKKwlpZiAobHNlZWsoYXJjaF9zcGVjaWZpYy0+ZmQsIHN0YXJ0ICogZGV2LT5zZWN0b3Jfc2l6ZSwgU0VFS19TRVQpCisJCSE9IHN0YXJ0ICogZGV2LT5zZWN0b3Jfc2l6ZSkKKwkJcmV0dXJuIDA7CisKKwlmb3IgKGRvbmUgPSAwOyBkb25lIDwgY291bnQ7IGRvbmUgKz0gc3RhdHVzIC8gZGV2LT5zZWN0b3Jfc2l6ZSkKKwl7CisJCXN0YXR1cyA9IHJlYWQgKGFyY2hfc3BlY2lmaWMtPmZkLCBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNpemVfdCkgKChjb3VudC1kb25lKSAqIGRldi0+c2VjdG9yX3NpemUpKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gZG9uZTsKK30KKworc3RhdGljIGludAorYmVvc19zeW5jIChQZWREZXZpY2UqIGRldikKK3sKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludAorYmVvc19zeW5jX2Zhc3QgKFBlZERldmljZSogZGV2KQoreworCXJldHVybiAxOworfQorCisvKiBQcm9iZSBmb3IgYWxsIGF2YWlsYWJsZSBkaXNrcyAqLworc3RhdGljIHZvaWQKK2Jlb3NfcHJvYmVfYWxsICgpCit7CisJLyogRm9yIEJlT1MvWkVUQS9IYWlrdSwgYWxsIGRpc2tzIGFyZSBwdWJsaXNoZWQgdW5kZXIgL2Rldi9kaXNrICovCisJX3NjYW5fZm9yX2Rpc2tzKCIvZGV2L2Rpc2siKTsKK30KKworc3RhdGljIGNoYXIqCitiZW9zX3BhcnRpdGlvbl9nZXRfcGF0aCAoY29uc3QgUGVkUGFydGl0aW9uKiBwYXJ0KQoreworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50CitiZW9zX3BhcnRpdGlvbl9pc19idXN5IChjb25zdCBQZWRQYXJ0aXRpb24qIHBhcnQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2Jlb3NfZGlza19jb21taXQgKFBlZERpc2sqIGRpc2spCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBQZWREZXZpY2VBcmNoT3BzIGJlb3NfZGV2X29wcyA9IHsKKyAgICAgICAgX25ldzogICAgICAgICAgIGJlb3NfbmV3LAorICAgICAgICBkZXN0cm95OiAgICAgICAgYmVvc19kZXN0cm95LAorICAgICAgICBpc19idXN5OiAgICAgICAgYmVvc19pc19idXN5LAorICAgICAgICBvcGVuOiAgICAgICAgICAgYmVvc19vcGVuLAorICAgICAgICByZWZyZXNoX29wZW46ICAgYmVvc19yZWZyZXNoX29wZW4sCisgICAgICAgIGNsb3NlOiAgICAgICAgICBiZW9zX2Nsb3NlLAorICAgICAgICByZWZyZXNoX2Nsb3NlOiAgYmVvc19yZWZyZXNoX2Nsb3NlLAorICAgICAgICByZWFkOiAgICAgICAgICAgYmVvc19yZWFkLAorICAgICAgICB3cml0ZTogICAgICAgICAgYmVvc193cml0ZSwKKyAgICAgICAgY2hlY2s6ICAgICAgICAgIGJlb3NfY2hlY2ssCisgICAgICAgIHN5bmM6ICAgICAgICAgICBiZW9zX3N5bmMsCisgICAgICAgIHN5bmNfZmFzdDogICAgICBiZW9zX3N5bmNfZmFzdCwKKyAgICAgICAgcHJvYmVfYWxsOiAgICAgIGJlb3NfcHJvYmVfYWxsCit9OworCitzdGF0aWMgUGVkRGlza0FyY2hPcHMgYmVvc19kaXNrX29wcyA9ICB7CisgICAgICAgIHBhcnRpdGlvbl9nZXRfcGF0aDogICAgIGJlb3NfcGFydGl0aW9uX2dldF9wYXRoLAorICAgICAgICBwYXJ0aXRpb25faXNfYnVzeTogICAgICBiZW9zX3BhcnRpdGlvbl9pc19idXN5LAorICAgICAgICBkaXNrX2NvbW1pdDogICAgICAgICAgICBiZW9zX2Rpc2tfY29tbWl0Cit9OworCitQZWRBcmNoaXRlY3R1cmUgcGVkX2Jlb3NfYXJjaCA9IHsKKyAgICAgICAgZGV2X29wczogICAgICAgICZiZW9zX2Rldl9vcHMsCisgICAgICAgIGRpc2tfb3BzOiAgICAgICAmYmVvc19kaXNrX29wcworfTsKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvYXJjaC9ibGtwZy5oIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9hcmNoL2Jsa3BnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE1ZTRmYgotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvYXJjaC9ibGtwZy5oCkBAIC0wLDAgKzEsNjQgQEAKKyNpZm5kZWYgX0xJTlVYX0JMS1BHX0gKKyNkZWZpbmUgX0xJTlVYX0JMS1BHX0gKKworLyoKKyAqIFBhcnRpdGlvbiB0YWJsZSBhbmQgZGlzayBnZW9tZXRyeSBoYW5kbGluZworICoKKyAqIEEgc2luZ2xlIGlvY3RsIHdpdGggbG90cyBvZiBzdWJmdW5jdGlvbnM6CisgKgorICogRGV2aWNlIG51bWJlciBzdHVmZjoKKyAqICAgIGdldF93aG9sZV9kaXNrKCkJCShnaXZlbiB0aGUgZGV2aWNlIG51bWJlciBvZiBhIHBhcnRpdGlvbiwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmQgdGhlIGRldmljZSBudW1iZXIgb2YgdGhlIGVuY29tcGFzc2luZyBkaXNrKQorICogICAgZ2V0X2FsbF9wYXJ0aXRpb25zKCkJKGdpdmVuIHRoZSBkZXZpY2UgbnVtYmVyIG9mIGEgZGlzaywgcmV0dXJuIHRoZQorICoJCQkJIGRldmljZSBudW1iZXJzIG9mIGFsbCBpdHMga25vd24gcGFydGl0aW9ucykKKyAqCisgKiBQYXJ0aXRpb24gc3R1ZmY6CisgKiAgICBhZGRfcGFydGl0aW9uKCkKKyAqICAgIGRlbGV0ZV9wYXJ0aXRpb24oKQorICogICAgdGVzdF9wYXJ0aXRpb25faW5fdXNlKCkJKGFsc28gZm9yIHRlc3RfZGlza19pbl91c2UpCisgKgorICogR2VvbWV0cnkgc3R1ZmY6CisgKiAgICBnZXRfZ2VvbWV0cnkoKQorICogICAgc2V0X2dlb21ldHJ5KCkKKyAqICAgIGdldF9iaW9zX2RyaXZlZGF0YSgpCisgKgorICogRm9yIHRvZGF5LCBvbmx5IHRoZSBwYXJ0aXRpb24gc3R1ZmYgLSBhZWIsIDk5MDUxNQorICovCisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKworI2RlZmluZSBCTEtQRyAgICAgIF9JTygweDEyLDEwNSkKKworLyogVGhlIGFyZ3VtZW50IHN0cnVjdHVyZSAqLworc3RydWN0IGJsa3BnX2lvY3RsX2FyZyB7CisgICAgICAgIGludCBvcDsKKyAgICAgICAgaW50IGZsYWdzOworICAgICAgICBpbnQgZGF0YWxlbjsKKyAgICAgICAgdm9pZCAqZGF0YTsKK307CisKKy8qIFRoZSBzdWJmdW5jdGlvbnMgKGZvciB0aGUgb3AgZmllbGQpICovCisjZGVmaW5lIEJMS1BHX0FERF9QQVJUSVRJT04JMQorI2RlZmluZSBCTEtQR19ERUxfUEFSVElUSU9OCTIKKworLyogU2l6ZXMgb2YgbmFtZSBmaWVsZHMuIFVudXNlZCBhdCBwcmVzZW50LiAqLworI2RlZmluZSBCTEtQR19ERVZOQU1FTFRICTY0CisjZGVmaW5lIEJMS1BHX1ZPTE5BTUVMVEgJNjQKKworLyogVGhlIGRhdGEgc3RydWN0dXJlIGZvciBBRERfUEFSVElUSU9OIGFuZCBERUxfUEFSVElUSU9OICovCitzdHJ1Y3QgYmxrcGdfcGFydGl0aW9uIHsKKwlsb25nIGxvbmcgc3RhcnQ7CQkvKiBzdGFydGluZyBvZmZzZXQgaW4gYnl0ZXMgKi8KKwlsb25nIGxvbmcgbGVuZ3RoOwkJLyogbGVuZ3RoIGluIGJ5dGVzICovCisJaW50IHBubzsJCQkvKiBwYXJ0aXRpb24gbnVtYmVyICovCisJY2hhciBkZXZuYW1lW0JMS1BHX0RFVk5BTUVMVEhdOwkvKiBwYXJ0aXRpb24gbmFtZSwgbGlrZSBzZGE1IG9yIGMwZDFwMiwKKwkJCQkJICAgdG8gYmUgdXNlZCBpbiBrZXJuZWwgbWVzc2FnZXMgKi8KKwljaGFyIHZvbG5hbWVbQkxLUEdfVk9MTkFNRUxUSF07CS8qIHZvbHVtZSBsYWJlbCAqLworfTsKKworI2lmZGVmIF9fS0VSTkVMX18KKworZXh0ZXJuIGNoYXIgKiBwYXJ0aXRpb25fbmFtZShrZGV2X3QgZGV2KTsKK2V4dGVybiBpbnQgYmxrX2lvY3RsKGtkZXZfdCBkZXYsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9MSU5VWF9CTEtQR19IICovCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2FyY2gvZ251LmMgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2FyY2gvZ251LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFkYzc0NwotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvYXJjaC9nbnUuYwpAQCAtMCwwICsxLDg3NSBAQAorLyoKKyAgICBsaWJwYXJ0ZWQgLSBhIGxpYnJhcnkgZm9yIG1hbmlwdWxhdGluZyBkaXNrIHBhcnRpdGlvbnMKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDEsIDIwMDUsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCisqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpbmNsdWRlIDxwYXJ0ZWQvcGFydGVkLmg+CisjaW5jbHVkZSA8cGFydGVkL2RlYnVnLmg+CisjaW5jbHVkZSA8cGFydGVkL2dudS5oPgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxodXJkLmg+CisjaW5jbHVkZSA8aHVyZC9mcy5oPgorI2luY2x1ZGUgPGh1cmQvc3RvcmUuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaWYgRU5BQkxFX05MUworIyAgaW5jbHVkZSA8bGliaW50bC5oPgorIyAgZGVmaW5lIF8oU3RyaW5nKSBkZ2V0dGV4dCAoUEFDS0FHRSwgU3RyaW5nKQorI2Vsc2UKKyMgIGRlZmluZSBfKFN0cmluZykgKFN0cmluZykKKyNlbmRpZiAvKiBFTkFCTEVfTkxTICovCisKK3N0YXRpYyBpbnQKK19kZXZpY2VfZ2V0X3NlY3Rvcl9zaXplIChQZWREZXZpY2UqIGRldikKK3sKKwlHTlVTcGVjaWZpYyoJYXJjaF9zcGVjaWZpYyA9IEdOVV9TUEVDSUZJQyAoZGV2KTsKKwlzaXplX3QJCXN0b3JlX2Jsb2NrX3NpemUgPSBhcmNoX3NwZWNpZmljLT5zdG9yZS0+YmxvY2tfc2l6ZTsKKworCXJldHVybiBQRURfU0VDVE9SX1NJWkVfREVGQVVMVDsKK30KKworc3RhdGljIFBlZFNlY3RvcgorX2RldmljZV9nZXRfbGVuZ3RoIChQZWREZXZpY2UqIGRldikKK3sKKwlHTlVTcGVjaWZpYyoJYXJjaF9zcGVjaWZpYyA9IEdOVV9TUEVDSUZJQyAoZGV2KTsKKwlzaXplX3QJCXN0b3JlX2Jsb2NrcyA9IGFyY2hfc3BlY2lmaWMtPnN0b3JlLT5ibG9ja3M7CisJc2l6ZV90CQlzdG9yZV9ibG9ja19zaXplID0gYXJjaF9zcGVjaWZpYy0+c3RvcmUtPmJsb2NrX3NpemU7CisKKwlyZXR1cm4gKChsb25nIGxvbmcpIHN0b3JlX2Jsb2NrcyAqIHN0b3JlX2Jsb2NrX3NpemUpIC8gUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQ7Cit9CisKK3N0YXRpYyBpbnQKK19kZXZpY2VfcHJvYmVfZ2VvbWV0cnkgKFBlZERldmljZSogZGV2KQoreworCVBlZFNlY3RvciBjeWxfc2l6ZTsKKworCWRldi0+bGVuZ3RoID0gX2RldmljZV9nZXRfbGVuZ3RoIChkZXYpOworCWlmICghZGV2LT5sZW5ndGgpCisJCXJldHVybiAwOworCisJZGV2LT5zZWN0b3Jfc2l6ZSA9IF9kZXZpY2VfZ2V0X3NlY3Rvcl9zaXplIChkZXYpOworCWlmICghZGV2LT5zZWN0b3Jfc2l6ZSkKKwkJcmV0dXJuIDA7CisKKwkvKiBYWFg6IFdlIGhhdmUgbm8gd2F5IHRvIGdldCB0aGlzISAgKi8KKwlkZXYtPmJpb3NfZ2VvbS5zZWN0b3JzID0gNjM7CisJZGV2LT5iaW9zX2dlb20uaGVhZHMgPSAyNTU7CisJY3lsX3NpemUgPSBkZXYtPmJpb3NfZ2VvbS5zZWN0b3JzICogZGV2LT5iaW9zX2dlb20uaGVhZHM7CisJZGV2LT5iaW9zX2dlb20uY3lsaW5kZXJzID0gZGV2LT5sZW5ndGggLyBjeWxfc2l6ZQorCQkJCQkqIChkZXYtPnNlY3Rvcl9zaXplIC8gUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQpOworCWRldi0+aHdfZ2VvbSA9IGRldi0+Ymlvc19nZW9tOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2luaXRfZmlsZSAoUGVkRGV2aWNlKiBkZXYpCit7CisJUGVkRXhjZXB0aW9uT3B0aW9uCWV4X3N0YXR1czsKKworcmV0cnlfb3BlbjoKKwlpZiAoIXBlZF9kZXZpY2Vfb3BlbiAoZGV2KSkgeworCQlleF9zdGF0dXMgPSBwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCQlQRURfRVhDRVBUSU9OX1dBUk5JTkcsCisJCQkJUEVEX0VYQ0VQVElPTl9SRVRSWV9DQU5DRUwsCisJCQkJXygiVW5hYmxlIHRvIG9wZW4gJXMuIiksCisJCQkJZGV2LT5wYXRoKTsKKwkJc3dpdGNoIChleF9zdGF0dXMpIHsKKwkJCWNhc2UgUEVEX0VYQ0VQVElPTl9SRVRSWToKKwkJCQlnb3RvIHJldHJ5X29wZW47CisKKwkJCWNhc2UgUEVEX0VYQ0VQVElPTl9VTkhBTkRMRUQ6CisJCQkJcGVkX2V4Y2VwdGlvbl9jYXRjaCAoKTsKKwkJCWNhc2UgUEVEX0VYQ0VQVElPTl9DQU5DRUw6CisJCQkJZ290byBlcnJvcjsKKwkJfQorCQorCQlyZXR1cm4gMDsKKwl9CisKK3JldHJ5X3Byb2JlOgorCWlmICghX2RldmljZV9wcm9iZV9nZW9tZXRyeSAoZGV2KSkgeworCQlleF9zdGF0dXMgPSBwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCQlQRURfRVhDRVBUSU9OX1dBUk5JTkcsCisJCQkJUEVEX0VYQ0VQVElPTl9SRVRSWV9DQU5DRUwsCisJCQkJXygiVW5hYmxlIHRvIHByb2JlIHN0b3JlLiIpKTsKKwkJc3dpdGNoIChleF9zdGF0dXMpIHsKKwkJCWNhc2UgUEVEX0VYQ0VQVElPTl9SRVRSWToKKwkJCQlnb3RvIHJldHJ5X3Byb2JlOworCisJCQljYXNlIFBFRF9FWENFUFRJT05fVU5IQU5ETEVEOgorCQkJCXBlZF9leGNlcHRpb25fY2F0Y2ggKCk7CisJCQljYXNlIFBFRF9FWENFUFRJT05fQ0FOQ0VMOgorCQkJCWdvdG8gZXJyb3JfY2xvc2VfZGV2OworCQl9CisKKwkJcmV0dXJuIDA7CisJfQorCisJZGV2LT5tb2RlbCA9ICIiOworCisJcGVkX2RldmljZV9jbG9zZSAoZGV2KTsKKwlyZXR1cm4gMTsKKworZXJyb3JfY2xvc2VfZGV2OgorCXBlZF9kZXZpY2VfY2xvc2UgKGRldik7CitlcnJvcjoKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK19mbHVzaF9jYWNoZSAoUGVkRGV2aWNlKiBkZXYpCit7CisJR05VU3BlY2lmaWMqCWFyY2hfc3BlY2lmaWMgPSBHTlVfU1BFQ0lGSUMgKGRldik7CisKKwlpZiAoZGV2LT5yZWFkX29ubHkpCisJCXJldHVybjsKKworCS8qIFdhaXQgZm9yIGEgY29tcGxldGUgc3luYyB0byBmaW5pc2guICAqLworCWZpbGVfc3luYyAoYXJjaF9zcGVjaWZpYy0+c3RvcmUtPnNvdXJjZSwgMSwgMCk7Cit9CisKKy8qIEluaXRpYWxpemUgYnkgYWxsb2NhdGluZyBtZW1vcnkgYW5kIGZpbGxpbmcgaW4gYSBmZXcgZGVmYXVsdHMsIGEKKyAgIFBlZERldmljZSBzdHJ1Y3R1cmUuICAqLworc3RhdGljIFBlZERldmljZSoKK19pbml0X2RldmljZSAoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlQZWREZXZpY2UgKmRldjsKKwlHTlVTcGVjaWZpYyoJYXJjaF9zcGVjaWZpYzsKKworCWRldiA9IChQZWREZXZpY2UqKSBwZWRfbWFsbG9jIChzaXplb2YgKFBlZERldmljZSkpOworCWlmICghZGV2KQorCQlnb3RvIGVycm9yOworCisJZGV2LT5wYXRoID0gc3RyZHVwIChwYXRoKTsKKwlpZiAoIWRldi0+cGF0aCkKKwkJZ290byBlcnJvcl9mcmVlX2RldjsKKworCWRldi0+YXJjaF9zcGVjaWZpYworCQk9IChHTlVTcGVjaWZpYyopIHBlZF9tYWxsb2MgKHNpemVvZiAoR05VU3BlY2lmaWMpKTsKKwlpZiAoIWRldi0+YXJjaF9zcGVjaWZpYykKKwkJZ290byBlcnJvcl9mcmVlX3BhdGg7CisKKwlkZXYtPnR5cGUgPSBQRURfREVWSUNFX0ZJTEU7CS8qIEZJWE1FPyAqLworCWRldi0+b3Blbl9jb3VudCA9IDA7CisJZGV2LT5yZWFkX29ubHkgPSAwOworCWRldi0+ZXh0ZXJuYWxfbW9kZSA9IDA7CisJZGV2LT5kaXJ0eSA9IDA7CisJZGV2LT5ib290X2RpcnR5ID0gMDsKKworCXJldHVybiBkZXY7CisKK2Vycm9yX2ZyZWVfYXJjaF9zcGVjaWZpYzoKKwlwZWRfZnJlZSAoZGV2LT5hcmNoX3NwZWNpZmljKTsKK2Vycm9yX2ZyZWVfcGF0aDoKKwlwZWRfZnJlZSAoZGV2LT5wYXRoKTsKK2Vycm9yX2ZyZWVfZGV2OgorCXBlZF9mcmVlIChkZXYpOworZXJyb3I6CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQKK19rZXJuZWxfcmVyZWFkX3BhcnRfdGFibGUgKFBlZERldmljZSogZGV2KQoreworCS8qIFhYWDogV2UgbXVzdCB3YWl0IGZvciBwYXJ0ZnMgdG8gYmUgZmluaXNoZWQuICAqLworCXJldHVybiAxOworfQorCisvKiBGcmVlIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIGEgUGVkRGV2aWNlIHN0cnVjdHVyZS4gICovCitzdGF0aWMgdm9pZAorX2RvbmVfZGV2aWNlIChQZWREZXZpY2UgKmRldikKK3sKKyAgICAgICAgcGVkX2ZyZWUgKGRldi0+YXJjaF9zcGVjaWZpYyk7CisJcGVkX2ZyZWUgKGRldi0+cGF0aCk7CisJcGVkX2ZyZWUgKGRldik7Cit9CisKKy8qIFJlbGVhc2UgYWxsIHJlc291cmNlcyB0aGF0IGxpYnBhcnRlZCBvd25zIGluIERFVi4gICovCitzdGF0aWMgdm9pZAorZ251X2Rlc3Ryb3kgKFBlZERldmljZSogZGV2KQoreworCUdOVVNwZWNpZmljKglhcmNoX3NwZWNpZmljID0gR05VX1NQRUNJRklDIChkZXYpOworCisJaWYgKGFyY2hfc3BlY2lmaWMtPmNvbnN1bWUpCisJICAgICAgICBzdG9yZV9mcmVlIChhcmNoX3NwZWNpZmljLT5zdG9yZSk7CisKKwlfZG9uZV9kZXZpY2UgKGRldik7Cit9CisKK3N0YXRpYyBQZWREZXZpY2UqCitnbnVfbmV3IChjb25zdCBjaGFyKiBwYXRoKQoreworCVBlZERldmljZSoJZGV2OworCUdOVVNwZWNpZmljKglhcmNoX3NwZWNpZmljOworCWVycm9yX3QgICAgICAgICByb19lcnIsIHJ3X2VycjsKKwlpbnQgICAgICAgICAgICAgaXNwYXRoOworCisJUEVEX0FTU0VSVCAocGF0aCAhPSBOVUxMLCByZXR1cm4gTlVMTCk7CisKKwlkZXYgPSBfaW5pdF9kZXZpY2UgKHBhdGgpOworCWlmICghZGV2KQorCSAgICAgICAgcmV0dXJuIE5VTEw7CisKKwlhcmNoX3NwZWNpZmljID0gR05VX1NQRUNJRklDIChkZXYpOworCWFyY2hfc3BlY2lmaWMtPmNvbnN1bWUgPSAxOworCisgcmV0cnlfb3BlbjoKKwkvKiBUcnkgcmVhZC13cml0ZS4gKi8KKwlpZiAoc3RyY2hyIChkZXYtPnBhdGgsICcvJykgIT0gTlVMTCkgeworCSAgICAgICAgLyogV2Ugc2V0IHRoaXMgdG8gcHJldmVudCBoYXZpbmcgdG8gdXNlIHN0cmNociBtb3JlIHRoZW4gb25jZS4gKi8KKwkgICAgICAgIGlzcGF0aCA9IDE7IAorCisJICAgICAgICByd19lcnIgPSBzdG9yZV9vcGVuIChkZXYtPnBhdGgsIDAsIE5VTEwsICZhcmNoX3NwZWNpZmljLT5zdG9yZSk7CisJfSBlbHNlIHsgCisJICAgICAgICByd19lcnIgPSBzdG9yZV90eXBlZF9vcGVuIChkZXYtPnBhdGgsIDAsIE5VTEwsICZhcmNoX3NwZWNpZmljLT5zdG9yZSk7CisJfSAgICAgICAgCisKKwkvKiBUcnkgcmVhZG9ubHkuICovCisJaWYgKHJ3X2VycikgeworCSAgaWYgKGlzcGF0aCkgeworCSAgICAgICAgcm9fZXJyID0gc3RvcmVfb3BlbiAoZGV2LT5wYXRoLCBTVE9SRV9SRUFET05MWSwgTlVMTCwKKwkJCQkgJmFyY2hfc3BlY2lmaWMtPnN0b3JlKTsKKwkgIH0gZWxzZSB7CisJICAgICAgICByb19lcnIgPSBzdG9yZV90eXBlZF9vcGVuIChkZXYtPnBhdGgsIFNUT1JFX1JFQURPTkxZLCBOVUxMLAorCQkJCSAgICAgICAmYXJjaF9zcGVjaWZpYy0+c3RvcmUpOworCSAgfQorICAgICAgICAgICAgICAgICAKKwlpZiAocm9fZXJyKSB7CisJICAgICAgICBpZiAocGVkX2V4Y2VwdGlvbl90aHJvdyAoCisJCQkgICAgICAgIFBFRF9FWENFUFRJT05fRVJST1IsCisJCQkJUEVEX0VYQ0VQVElPTl9SRVRSWV9DQU5DRUwsCisJCQkJXygiRXJyb3Igb3BlbmluZyAlczogJXMiKSwKKwkJCQlkZXYtPnBhdGgsIHN0cmVycm9yIChyb19lcnIpKQorCQkJCQkhPSBQRURfRVhDRVBUSU9OX1JFVFJZKSB7CisJCQkJcmV0dXJuIE5VTEw7CisJCQl9IGVsc2UKKwkJCQlnb3RvIHJldHJ5X29wZW47CisJCX0gZWxzZSB7CisJCQlwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCQlQRURfRVhDRVBUSU9OX1dBUk5JTkcsCisJCQkJUEVEX0VYQ0VQVElPTl9PSywKKwkJCQlfKCJVbmFibGUgdG8gb3BlbiAlcyByZWFkLXdyaXRlICglcykuICAlcyBoYXMgIgorCQkJCSAgImJlZW4gb3BlbmVkIHJlYWQtb25seS4iKSwKKwkJCQlkZXYtPnBhdGgsIHN0cmVycm9yIChyd19lcnIpLCBkZXYtPnBhdGgpOworCQkJZGV2LT5yZWFkX29ubHkgPSAxOworCQl9CisJfSBlbHNlIHsKKwkJZGV2LT5yZWFkX29ubHkgPSAwOworCX0KKworCV9mbHVzaF9jYWNoZSAoZGV2KTsKKworCWlmICghaW5pdF9maWxlIChkZXYpKSB7CisJCWdudV9kZXN0cm95KGRldik7CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiBkZXY7Cit9CisKK1BlZERldmljZSoKK3BlZF9kZXZpY2VfbmV3X2Zyb21fc3RvcmUgKHN0cnVjdCBzdG9yZSAqc291cmNlKQoreworICAgICAgICBQZWREZXZpY2UqICAgICAgZGV2OworCUdOVVNwZWNpZmljKiAgICBhcmNoX3NwZWNpZmljOworCisJUEVEX0FTU0VSVCAoc291cmNlICE9IE5VTEwsIHJldHVybiBOVUxMKTsKKworCWRldiA9IF9pbml0X2RldmljZSAoc291cmNlLT5uYW1lID86ICIodW5rbm93bikiKTsKKwlpZiAoIWRldikKKwkgICAgICAgIHJldHVybiBOVUxMOworCisJYXJjaF9zcGVjaWZpYyA9IEdOVV9TUEVDSUZJQyAoZGV2KTsKKwlhcmNoX3NwZWNpZmljLT5zdG9yZSA9IHNvdXJjZTsKKwlhcmNoX3NwZWNpZmljLT5jb25zdW1lID0gMDsKKworCWRldi0+cmVhZF9vbmx5ID0gc291cmNlLT5mbGFncyAmIChTVE9SRV9SRUFET05MWXxTVE9SRV9IQVJEX1JFQURPTkxZKTsKKworCWlmICghaW5pdF9maWxlIChkZXYpKSB7CisJICAgICAgICBfZG9uZV9kZXZpY2UgKGRldik7CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiBkZXY7Cit9CisKK3N0YXRpYyBpbnQKK2dudV9pc19idXN5IChQZWREZXZpY2UqIGRldikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorZ251X29wZW4gKFBlZERldmljZSogZGV2KQoreworICAgICAgICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorZ251X3JlZnJlc2hfb3BlbiAoUGVkRGV2aWNlKiBkZXYpCit7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2dudV9jbG9zZSAoUGVkRGV2aWNlKiBkZXYpCit7CisJR05VU3BlY2lmaWMqCWFyY2hfc3BlY2lmaWMgPSBHTlVfU1BFQ0lGSUMgKGRldik7CisJCisJX2ZsdXNoX2NhY2hlIChkZXYpOworCisJaWYgKGRldi0+ZGlydHkgJiYgZGV2LT50eXBlICE9IFBFRF9ERVZJQ0VfRklMRSkgeworCQlpZiAoX2tlcm5lbF9yZXJlYWRfcGFydF90YWJsZSAoZGV2KSkKKwkJCWRldi0+ZGlydHkgPSAwOworCX0KKworI2lmIDAKKwlpZiAoZGV2LT5kaXJ0eSAmJiBkZXYtPmJvb3RfZGlydHkgJiYgZGV2LT50eXBlICE9IFBFRF9ERVZJQ0VfRklMRSkgeworCQkvKiBvdWNoISAqLworCQlwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCVBFRF9FWENFUFRJT05fV0FSTklORywKKwkJCVBFRF9FWENFUFRJT05fT0ssCisJCQlfKCJUaGUgcGFydGl0aW9uIHRhYmxlIGNhbm5vdCBiZSByZS1yZWFkLiAgVGhpcyBtZWFucyAiCisJCQkgICJ5b3UgbmVlZCB0byByZWJvb3QgYmVmb3JlIG1vdW50aW5nIGFueSAiCisJCQkgICJtb2RpZmllZCBwYXJ0aXRpb25zLiAgWW91IGFsc28gbmVlZCB0byByZWluc3RhbGwgIgorCQkJICAieW91ciBib290IGxvYWRlciBiZWZvcmUgeW91IHJlYm9vdCAod2hpY2ggbWF5ICIKKwkJCSAgInJlcXVpcmUgbW91bnRpbmcgbW9kaWZpZWQgcGFydGl0aW9ucykuICBJdCBpcyAiCisJCQkgICJpbXBvc3NpYmxlIGRvIGJvdGggdGhpbmdzISAgU28geW91J2xsIG5lZWQgdG8gIgorCQkJICAiYm9vdCBvZmYgYSByZXNjdWUgZGlzaywgYW5kIHJlaW5zdGFsbCB5b3VyIGJvb3QgIgorCQkJICAibG9hZGVyIGZyb20gdGhlIHJlc2N1ZSBkaXNrLiAgUmVhZCBzZWN0aW9uIDQgb2YgIgorCQkJICAidGhlIFBhcnRlZCBVc2VyIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgIgorCQkJICAiaW5mb3JtYXRpb24uIikpOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoZGV2LT5kaXJ0eSAmJiBkZXYtPnR5cGUgIT0gUEVEX0RFVklDRV9GSUxFKSB7CisJCXBlZF9leGNlcHRpb25fdGhyb3cgKAorCQkJUEVEX0VYQ0VQVElPTl9XQVJOSU5HLAorCQkJUEVEX0VYQ0VQVElPTl9JR05PUkUsCisJCQlfKCJUaGUgcGFydGl0aW9uIHRhYmxlIG9uICVzIGNhbm5vdCBiZSByZS1yZWFkICIKKwkJCSAgIiglcykuICBUaGlzIG1lYW5zIHRoZSBIdXJkIGtub3dzIG5vdGhpbmcgYWJvdXQgYW55ICIKKwkJCSAgIm1vZGlmaWNhdGlvbnMgeW91IG1hZGUuICBZb3Ugc2hvdWxkIHJlYm9vdCB5b3VyICIKKwkJCSAgImNvbXB1dGVyIGJlZm9yZSBkb2luZyBhbnl0aGluZyB3aXRoICVzLiIpLAorCQkJZGV2LT5wYXRoLCBzdHJlcnJvciAoZXJybm8pLCBkZXYtPnBhdGgpOworCX0KKworCWlmIChkZXYtPmJvb3RfZGlydHkgJiYgZGV2LT50eXBlICE9IFBFRF9ERVZJQ0VfRklMRSkgeworCQlwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCVBFRF9FWENFUFRJT05fV0FSTklORywKKwkJCVBFRF9FWENFUFRJT05fT0ssCisJCQlfKCJZb3Ugc2hvdWxkIHJlaW5zdGFsbCB5b3VyIGJvb3QgbG9hZGVyIGJlZm9yZSAiCisJCQkgICJyZWJvb3RpbmcuICBSZWFkIHNlY3Rpb24gNCBvZiB0aGUgUGFydGVkIFVzZXIgIgorCQkJICAiZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iKSk7CisJfQorI2VuZGlmCisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludAorZ251X3JlZnJlc2hfY2xvc2UgKFBlZERldmljZSogZGV2KQoreworCV9mbHVzaF9jYWNoZSAoZGV2KTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludAorZ251X3JlYWQgKGNvbnN0IFBlZERldmljZSogZGV2LCB2b2lkKiB1c2VyX2J1ZmZlciwgUGVkU2VjdG9yIGRldmljZV9zdGFydCwKKyAgICAgICAgICBQZWRTZWN0b3IgY291bnQpCit7CisJR05VU3BlY2lmaWMqCQlhcmNoX3NwZWNpZmljID0gR05VX1NQRUNJRklDIChkZXYpOworCWVycm9yX3QJCQllcnI7CisJUGVkRXhjZXB0aW9uT3B0aW9uCWV4X3N0YXR1czsKKwlzaXplX3QJCQlzdGFydDsKKwlzaXplX3QJCQlzdG9yZV9zdGFydF9ibG9jazsKKwkvKiBJbiBieXRlcy4gIFRoaXMgY2FuIGJlIGxhcmdlciB0aGFuIENPVU5UIHdoZW4gc3RvcmUgcGFnZXMgYXJlCisJICAgbGFyZ2VyIHRoYW4gUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQuICAqLworCXNpemVfdAkJCXN0b3JlX3JlYWRfbGVuZ3RoOworCWNoYXIJCQlsb2NhbF9idWZmZXJbUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFRdOworCXZvaWQgKgkJCXN0b3JlX3JlYWRfYnVmZmVyOworCXNpemVfdAkJCWhhdmVfcmVhZDsKKwlzaXplX3QJCQlyZWFkX29mZnNldDsKKwlzaXplX3QJCQlkZXZpY2VfcmVhZF9sZW5ndGggPSBjb3VudCAqIFBFRF9TRUNUT1JfU0laRV9ERUZBVUxUOworCisJc3RhcnQgPSBkZXZpY2Vfc3RhcnQgKiBQRURfU0VDVE9SX1NJWkVfREVGQVVMVDsKKwlpZiAoUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQgIT0gYXJjaF9zcGVjaWZpYy0+c3RvcmUtPmJsb2NrX3NpemUpIHsKKwkJc3RvcmVfc3RhcnRfYmxvY2sgPSBzdGFydCAvIGFyY2hfc3BlY2lmaWMtPnN0b3JlLT5ibG9ja19zaXplOworCQlzdG9yZV9yZWFkX2xlbmd0aCA9IChkZXZpY2VfcmVhZF9sZW5ndGgKKwkJCQkgICAgICsgYXJjaF9zcGVjaWZpYy0+c3RvcmUtPmJsb2NrX3NpemUgLSAxKQorCQkJCSAgICAvIGFyY2hfc3BlY2lmaWMtPnN0b3JlLT5ibG9ja19zaXplOworCX0gZWxzZSB7CisJCXN0b3JlX3N0YXJ0X2Jsb2NrID0gZGV2aWNlX3N0YXJ0OworCQlzdG9yZV9yZWFkX2xlbmd0aCA9IGRldmljZV9yZWFkX2xlbmd0aDsKKwl9CisKKwlyZWFkX29mZnNldCA9IHN0YXJ0CisJCSAgICAgIC0gc3RvcmVfc3RhcnRfYmxvY2sgKiBhcmNoX3NwZWNpZmljLT5zdG9yZS0+YmxvY2tfc2l6ZTsKKworCWlmIChzdG9yZV9yZWFkX2xlbmd0aCAlIGFyY2hfc3BlY2lmaWMtPnN0b3JlLT5ibG9ja19zaXplICE9IDApCisJCXN0b3JlX3JlYWRfbGVuZ3RoID0gc3RvcmVfcmVhZF9sZW5ndGgKKwkJCQkgICAgKyBhcmNoX3NwZWNpZmljLT5zdG9yZS0+YmxvY2tfc2l6ZQorCQkJCSAgICAtIHN0b3JlX3JlYWRfbGVuZ3RoICUgYXJjaF9zcGVjaWZpYy0+c3RvcmUtPmJsb2NrX3NpemU7CisKK3JldHJ5OgorCWhhdmVfcmVhZCA9IDA7CisJd2hpbGUgKDEpIHsKKwkJc2l6ZV90CWRpZF9yZWFkOworCQlzaXplX3QJb2Zmc2V0OworCisJCXN0b3JlX3JlYWRfYnVmZmVyID0gbG9jYWxfYnVmZmVyOworCQlkaWRfcmVhZCA9IHNpemVvZiAobG9jYWxfYnVmZmVyKTsKKworCQllcnIgPSBzdG9yZV9yZWFkIChhcmNoX3NwZWNpZmljLT5zdG9yZSwgc3RvcmVfc3RhcnRfYmxvY2ssCisJCQkJICBzdG9yZV9yZWFkX2xlbmd0aCAtIGhhdmVfcmVhZCwKKwkJCSAgCSAgJnN0b3JlX3JlYWRfYnVmZmVyLCAmZGlkX3JlYWQpOworCQlpZiAoZXJyKSB7CisJCQlleF9zdGF0dXMgPSBwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCQlQRURfRVhDRVBUSU9OX0VSUk9SLAorCQkJCVBFRF9FWENFUFRJT05fUkVUUllfSUdOT1JFX0NBTkNFTCwKKwkJCQlfKCIlcyBkdXJpbmcgcmVhZCBvbiAlcyIpLAorCQkJCXN0cmVycm9yIChlcnIpLAorCQkJCWRldi0+cGF0aCk7CisKKwkJCXN3aXRjaCAoZXhfc3RhdHVzKSB7CisJCQkJY2FzZSBQRURfRVhDRVBUSU9OX0lHTk9SRToKKwkJCQkJcmV0dXJuIDE7CisKKwkJCQljYXNlIFBFRF9FWENFUFRJT05fUkVUUlk6CisJCQkJCWdvdG8gcmV0cnk7CisKKwkJCQljYXNlIFBFRF9FWENFUFRJT05fVU5IQU5ETEVEOgorCQkJCQlwZWRfZXhjZXB0aW9uX2NhdGNoICgpOworCQkJCWNhc2UgUEVEX0VYQ0VQVElPTl9DQU5DRUw6CisJCQkJCXJldHVybiAwOworCQkJfQorCQl9CisKKwkJbWVtY3B5ICh1c2VyX2J1ZmZlciArIGhhdmVfcmVhZCAtIHJlYWRfb2Zmc2V0LAorCQkJc3RvcmVfcmVhZF9idWZmZXIKKwkJCSsgKGhhdmVfcmVhZCA+PSByZWFkX29mZnNldAorCQkJCT8gMCA6IHJlYWRfb2Zmc2V0IC0gaGF2ZV9yZWFkKSwKKwkJCWhhdmVfcmVhZCArIGRpZF9yZWFkID4gZGV2aWNlX3JlYWRfbGVuZ3RoICsgcmVhZF9vZmZzZXQKKwkJCQk/IGRldmljZV9yZWFkX2xlbmd0aCArIHJlYWRfb2Zmc2V0IC0gaGF2ZV9yZWFkCisJCQkJOiBkaWRfcmVhZCk7CisKKwkJaWYgKHN0b3JlX3JlYWRfYnVmZmVyICE9IGxvY2FsX2J1ZmZlcikKKwkJCXZtX2RlYWxsb2NhdGUgKG1hY2hfdGFza19zZWxmICgpLAorCQkJCSAgICAgICAobG9uZykgc3RvcmVfcmVhZF9idWZmZXIsIGRpZF9yZWFkKTsKKworCQloYXZlX3JlYWQgKz0gZGlkX3JlYWQ7CisJCXN0b3JlX3N0YXJ0X2Jsb2NrICs9IGRpZF9yZWFkCisJCSAgICAgICAJCQkvIGFyY2hfc3BlY2lmaWMtPnN0b3JlLT5ibG9ja19zaXplOworCisJCWlmIChoYXZlX3JlYWQgPj0gZGV2aWNlX3JlYWRfbGVuZ3RoKQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2dudV93cml0ZSAoUGVkRGV2aWNlKiBkZXYsIGNvbnN0IHZvaWQqIGJ1ZmZlciwgUGVkU2VjdG9yIHN0YXJ0LCBQZWRTZWN0b3IgY291bnQpCit7CisJR05VU3BlY2lmaWMqCQlhcmNoX3NwZWNpZmljID0gR05VX1NQRUNJRklDIChkZXYpOworCWVycm9yX3QJCQllcnI7CisJUGVkRXhjZXB0aW9uT3B0aW9uCWV4X3N0YXR1czsKKwl2b2lkICoJCQl0ZW1wOworCWNoYXIJCQlsb2NhbF9idWZmZXJbUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFRdOworCXNpemVfdAkJCWRpZF9yZWFkOworCXNpemVfdAkJCWRpZF93cml0ZTsKKworCS8qIE1hcCBhIGRpc2sgc2VjdG9yIHRvIGEgc3RvcmUgc2VjdG9yLiAgKi8KKwkjZGVmaW5lIFBFRF9UT19TVE9SRShzdG9yZSwgc2VjdG9yKSAoKChzZWN0b3IpICogUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQpIFwKKwkJCQkgICAgICAJLyAoc3RvcmUpLT5ibG9ja19zaXplKQorCisJaWYgKGRldi0+cmVhZF9vbmx5KSB7CisJCWlmIChwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCVBFRF9FWENFUFRJT05fRVJST1IsCisJCQlQRURfRVhDRVBUSU9OX0lHTk9SRV9DQU5DRUwsCisJCQlfKCJDYW4ndCB3cml0ZSB0byAlcywgYmVjYXVzZSBpdCBpcyBvcGVuZWQgcmVhZC1vbmx5LiIpLAorCQkJZGV2LT5wYXRoKQorCQkJCSE9IFBFRF9FWENFUFRJT05fSUdOT1JFKQorCQkJcmV0dXJuIDA7CisJCWVsc2UKKwkJCXJldHVybiAxOworCX0KKworI2lmZGVmIFJFQURfT05MWQorCXByaW50ZiAoInBlZF9kZXZpY2Vfd3JpdGUgKFwiJXNcIiwgJXAsICVkLCAlZClcbiIsCisJCWRldi0+cGF0aCwgYnVmZmVyLCAoaW50KSBzdGFydCwgKGludCkgY291bnQpOworI2Vsc2UKKwlkZXYtPmRpcnR5ID0gMTsKKworCS8qIElmIHRoZSBmaXJzdCBgYGRldmljZScnIGJsb2NrIChQZWRTZWN0b3IpIGlzIG5vdCBhbGlnbmVkIG9uIGEKKwkgICBzdG9yZSBibG9jaywgdGhlbiB3ZSBuZWVkIHRvIGZldGNoIHRoZSBvbGQgYmxvY2ssIGNvcHkgaW4gdGhlCisJICAgb3ZlcmxhcGluZyBhcmVhIGFuZCBmaW5hbGx5LCB3cml0ZSB0aGUgbW9kaWZpZWQgZGF0YSBvdXQgdG8gdGhlCisJICAgc3RvcmUuICAqLworCWlmICgoUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQgKiBzdGFydCkgJSBhcmNoX3NwZWNpZmljLT5zdG9yZS0+YmxvY2tfc2l6ZQorCSAgICAhPSAwKSB7CisJCXNpemVfdCAJCXdyaXRlX29mZnNldDsKKwkJc2l6ZV90IAkJZmx1c2hpbmc7CisKK2RvZ2d5X2ZpcnN0X2Jsb2NrX3JlYWQ6CisJCS8qIFdlIGRvIG5vdCBib3RoZXIgbG9vcGluZyBhcyB3ZSBhcmUgb25seSByZWFkaW5nIGEKKwkJICAgc2luZ2xlIGJsb2NrLiAgKi8KKwkJdGVtcCA9IGxvY2FsX2J1ZmZlcjsKKwkJZGlkX3JlYWQgPSBzaXplb2YgKGxvY2FsX2J1ZmZlcik7CisJCWVyciA9IHN0b3JlX3JlYWQgKGFyY2hfc3BlY2lmaWMtPnN0b3JlLAorCQkJCSAgUEVEX1RPX1NUT1JFIChhcmNoX3NwZWNpZmljLT5zdG9yZSwgc3RhcnQpLAorCQkJCSAgYXJjaF9zcGVjaWZpYy0+c3RvcmUtPmJsb2NrX3NpemUsICZ0ZW1wLAorCQkJCSAgJmRpZF9yZWFkKTsKKwkJaWYgKCEgZXJyICYmIGRpZF9yZWFkICE9IGFyY2hfc3BlY2lmaWMtPnN0b3JlLT5ibG9ja19zaXplKQorCQkJZXJyID0gRUlPOworCisJCWlmIChlcnIpIHsKKwkJCWV4X3N0YXR1cyA9IHBlZF9leGNlcHRpb25fdGhyb3cgKAorCQkJCVBFRF9FWENFUFRJT05fRVJST1IsCisJCQkJUEVEX0VYQ0VQVElPTl9SRVRSWV9JR05PUkVfQ0FOQ0VMLAorCQkJCV8oIiVzIGR1cmluZyByZWFkIG9uICVzIiksCisJCQkJc3RyZXJyb3IgKGVyciksIGRldi0+cGF0aCk7CisKKwkJCXN3aXRjaCAoZXhfc3RhdHVzKSB7CisJCQkJY2FzZSBQRURfRVhDRVBUSU9OX0lHTk9SRToKKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIFBFRF9FWENFUFRJT05fUkVUUlk6CisJCQkJCWdvdG8gZG9nZ3lfZmlyc3RfYmxvY2tfcmVhZDsKKworCQkJCWNhc2UgUEVEX0VYQ0VQVElPTl9VTkhBTkRMRUQ6CisJCQkJCXBlZF9leGNlcHRpb25fY2F0Y2ggKCk7CisJCQkJY2FzZSBQRURfRVhDRVBUSU9OX0NBTkNFTDoKKwkJCQkJcmV0dXJuIDA7CisJCQl9CisJCX0KKworCQl3cml0ZV9vZmZzZXQgPSAoc3RhcnQgKiBQRURfU0VDVE9SX1NJWkVfREVGQVVMVCkKKwkJCSAgICAgICAlIGFyY2hfc3BlY2lmaWMtPnN0b3JlLT5ibG9ja19zaXplOworCQlmbHVzaGluZyA9IGFyY2hfc3BlY2lmaWMtPnN0b3JlLT5ibG9ja19zaXplIC0gd3JpdGVfb2Zmc2V0OworCQlpZiAoZmx1c2hpbmcgPiBjb3VudCAqIFBFRF9TRUNUT1JfU0laRV9ERUZBVUxUKQorCQkJZmx1c2hpbmcgPSBjb3VudCAqIFBFRF9TRUNUT1JfU0laRV9ERUZBVUxUOworCisJCW1lbWNweSAodGVtcCArIHdyaXRlX29mZnNldCwgYnVmZmVyLCBmbHVzaGluZyk7CisKK2RvZ2d5X2ZpcnN0X2Jsb2NrX3dyaXRlOgorCQllcnIgPSBzdG9yZV93cml0ZSAoYXJjaF9zcGVjaWZpYy0+c3RvcmUsCisJCSAgICAJCSAgIFBFRF9UT19TVE9SRSAoYXJjaF9zcGVjaWZpYy0+c3RvcmUsIHN0YXJ0KSwKKwkJCQkgICB0ZW1wLCBhcmNoX3NwZWNpZmljLT5zdG9yZS0+YmxvY2tfc2l6ZSwgCisJCQkJICAgJmRpZF93cml0ZSk7CisJCWlmICghIGVyciAmJiBkaWRfd3JpdGUgIT0gYXJjaF9zcGVjaWZpYy0+c3RvcmUtPmJsb2NrX3NpemUpCisJCQllcnIgPSBFSU87CisKKwkJaWYgKGVycikgeworCQkJZXhfc3RhdHVzID0gcGVkX2V4Y2VwdGlvbl90aHJvdyAoCisJCQkJUEVEX0VYQ0VQVElPTl9FUlJPUiwKKwkJCQlQRURfRVhDRVBUSU9OX1JFVFJZX0lHTk9SRV9DQU5DRUwsCisJCQkJXygiJXMgZHVyaW5nIHdyaXRlIG9uICVzIiksCisJCQkJc3RyZXJyb3IgKGVyciksIGRldi0+cGF0aCk7CisKKwkJCXN3aXRjaCAoZXhfc3RhdHVzKSB7CisJCQkJY2FzZSBQRURfRVhDRVBUSU9OX0lHTk9SRToKKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIFBFRF9FWENFUFRJT05fUkVUUlk6CisJCQkJCWdvdG8gZG9nZ3lfZmlyc3RfYmxvY2tfd3JpdGU7CisKKwkJCQljYXNlIFBFRF9FWENFUFRJT05fVU5IQU5ETEVEOgorCQkJCQlwZWRfZXhjZXB0aW9uX2NhdGNoICgpOworCQkJCWNhc2UgUEVEX0VYQ0VQVElPTl9DQU5DRUw6CisJCQkJCWlmICh0ZW1wICE9IGxvY2FsX2J1ZmZlcikKKwkJCQkJCXZtX2RlYWxsb2NhdGUgKAorCQkJCQkJCW1hY2hfdGFza19zZWxmICgpLAorCQkJCQkJCShsb25nKSB0ZW1wLAorCQkJCQkJCWRpZF9yZWFkKTsKKwkJCQkJcmV0dXJuIDA7CisJCQl9CisJCX0KKworCQlzdGFydCArPSBmbHVzaGluZyAvIFBFRF9TRUNUT1JfU0laRV9ERUZBVUxUOworCQljb3VudCAtPSBmbHVzaGluZyAvIFBFRF9TRUNUT1JfU0laRV9ERUZBVUxUOworCQlidWZmZXIgKz0gd3JpdGVfb2Zmc2V0OworCisJCWlmICh0ZW1wICE9IGxvY2FsX2J1ZmZlcikKKwkJCXZtX2RlYWxsb2NhdGUgKG1hY2hfdGFza19zZWxmICgpLCAobG9uZykgdGVtcCwKKwkJCQkgICAgICAgZGlkX3JlYWQpOworCisJCWlmIChjb3VudCA9PSAwKQorCQkJcmV0dXJuIDE7CisJfQorCisJd2hpbGUgKGNvdW50ID4gMAorCSAgICYmIGNvdW50ID49IGFyY2hfc3BlY2lmaWMtPnN0b3JlLT5ibG9ja19zaXplIC8gUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQpIHsKKwkJZXJyID0gc3RvcmVfd3JpdGUgKGFyY2hfc3BlY2lmaWMtPnN0b3JlLAorCQkJCSAgIFBFRF9UT19TVE9SRSAoYXJjaF9zcGVjaWZpYy0+c3RvcmUsIHN0YXJ0KSwKKwkJCQkgICBidWZmZXIsIGNvdW50ICogUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQsCisJCQkJICAgJmRpZF93cml0ZSk7CisKKwkJaWYgKGVycikgeworCQkJZXhfc3RhdHVzID0gcGVkX2V4Y2VwdGlvbl90aHJvdyAoCisJCQkJUEVEX0VYQ0VQVElPTl9FUlJPUiwKKwkJCQlQRURfRVhDRVBUSU9OX1JFVFJZX0lHTk9SRV9DQU5DRUwsCisJCQkJXygiJXMgZHVyaW5nIHdyaXRlIG9uICVzIiksCisJCQkJc3RyZXJyb3IgKGVyciksIGRldi0+cGF0aCk7CisKKwkJCXN3aXRjaCAoZXhfc3RhdHVzKSB7CisJCQkJY2FzZSBQRURfRVhDRVBUSU9OX0lHTk9SRToKKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIFBFRF9FWENFUFRJT05fUkVUUlk6CisJCQkJCWNvbnRpbnVlOworCisJCQkJY2FzZSBQRURfRVhDRVBUSU9OX1VOSEFORExFRDoKKwkJCQkJcGVkX2V4Y2VwdGlvbl9jYXRjaCAoKTsKKwkJCQljYXNlIFBFRF9FWENFUFRJT05fQ0FOQ0VMOgorCQkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfQorCisJCXN0YXJ0ICs9IGRpZF93cml0ZSAvIFBFRF9TRUNUT1JfU0laRV9ERUZBVUxUOworCQljb3VudCAtPSBkaWRfd3JpdGUgLyBQRURfU0VDVE9SX1NJWkVfREVGQVVMVDsKKwkJYnVmZmVyICs9IGRpZF93cml0ZTsKKwl9CisKKwlpZiAoY291bnQgPT0gMCkKKwkJcmV0dXJuIDE7CisKKwkvKiBXZSBhcmUgbm93IGxlZnQgd2l0aCAoc3RyaWN0bHkpIGxlc3MgdGhlbiBhIHN0b3JlIGJsb2NrIHRvIHdyaXRlCisJICAgdG8gZGlzay4gIFRodXMsIHdlIHJlYWQgdGhlIGJsb2NrLCBvdmVybGF5IHRoZSBidWZmZXIgYW5kIGZsdXNoLiAgKi8KKwlQRURfQVNTRVJUIChjb3VudCAqIFBFRF9TRUNUT1JfU0laRV9ERUZBVUxUCisJCQk8IGFyY2hfc3BlY2lmaWMtPnN0b3JlLT5ibG9ja19zaXplLCByZXR1cm4gMCk7CisKK2RvZ2d5X2xhc3RfYmxvY2tfcmVhZDoKKwkvKiBXZSBkbyBub3QgYm90aGVyIGxvb3BpbmcgYXMgd2UgYXJlIG9ubHkgcmVhZGluZyBhCisJICAgc2luZ2xlIGJsb2NrLiAgKi8KKwl0ZW1wID0gbG9jYWxfYnVmZmVyOworCWRpZF9yZWFkID0gc2l6ZW9mIChsb2NhbF9idWZmZXIpOworCWVyciA9IHN0b3JlX3JlYWQgKGFyY2hfc3BlY2lmaWMtPnN0b3JlLAorCQkJICBQRURfVE9fU1RPUkUgKGFyY2hfc3BlY2lmaWMtPnN0b3JlLCBzdGFydCksCisJCQkgIGFyY2hfc3BlY2lmaWMtPnN0b3JlLT5ibG9ja19zaXplLCAmdGVtcCwKKwkJCSAgJmRpZF9yZWFkKTsKKwlpZiAoISBlcnIgJiYgZGlkX3JlYWQgIT0gYXJjaF9zcGVjaWZpYy0+c3RvcmUtPmJsb2NrX3NpemUpCisJCWVyciA9IEVJTzsKKworCWlmIChlcnIpIHsKKwkJZXhfc3RhdHVzID0gcGVkX2V4Y2VwdGlvbl90aHJvdyAoCisJCQlQRURfRVhDRVBUSU9OX0VSUk9SLAorCQkJUEVEX0VYQ0VQVElPTl9SRVRSWV9JR05PUkVfQ0FOQ0VMLAorCQkJXygiJXMgZHVyaW5nIHJlYWQgb24gJXMiKSwKKwkJCXN0cmVycm9yIChlcnIpLCBkZXYtPnBhdGgpOworCisJCXN3aXRjaCAoZXhfc3RhdHVzKSB7CisJCQljYXNlIFBFRF9FWENFUFRJT05fSUdOT1JFOgorCQkJCWJyZWFrOworCisJCQljYXNlIFBFRF9FWENFUFRJT05fUkVUUlk6CisJCQkJZ290byBkb2dneV9sYXN0X2Jsb2NrX3JlYWQ7CisKKwkJCWNhc2UgUEVEX0VYQ0VQVElPTl9VTkhBTkRMRUQ6CisJCQkJcGVkX2V4Y2VwdGlvbl9jYXRjaCAoKTsKKwkJCWNhc2UgUEVEX0VYQ0VQVElPTl9DQU5DRUw6CisJCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwltZW1jcHkgKHRlbXAsIGJ1ZmZlciwgY291bnQgKiBQRURfU0VDVE9SX1NJWkVfREVGQVVMVCk7CisKK2RvZ2d5X2xhc3RfYmxvY2tfd3JpdGU6CisJZXJyID0gc3RvcmVfd3JpdGUgKGFyY2hfc3BlY2lmaWMtPnN0b3JlLAorCSAgICAJCSAgIFBFRF9UT19TVE9SRSAoYXJjaF9zcGVjaWZpYy0+c3RvcmUsIHN0YXJ0KSwKKwkJCSAgIHRlbXAsIGFyY2hfc3BlY2lmaWMtPnN0b3JlLT5ibG9ja19zaXplLCAKKwkJCSAgICZkaWRfd3JpdGUpOworCWlmICghIGVyciAmJiBkaWRfd3JpdGUgIT0gYXJjaF9zcGVjaWZpYy0+c3RvcmUtPmJsb2NrX3NpemUpCisJCWVyciA9IEVJTzsKKworCWlmIChlcnIpIHsKKwkJZXhfc3RhdHVzID0gcGVkX2V4Y2VwdGlvbl90aHJvdyAoCisJCQlQRURfRVhDRVBUSU9OX0VSUk9SLAorCQkJUEVEX0VYQ0VQVElPTl9SRVRSWV9JR05PUkVfQ0FOQ0VMLAorCQkJXygiJXMgZHVyaW5nIHdyaXRlIG9uICVzIiksCisJCQlzdHJlcnJvciAoZXJyKSwgZGV2LT5wYXRoKTsKKworCQlzd2l0Y2ggKGV4X3N0YXR1cykgeworCQkJY2FzZSBQRURfRVhDRVBUSU9OX0lHTk9SRToKKwkJCQlicmVhazsKKworCQkJY2FzZSBQRURfRVhDRVBUSU9OX1JFVFJZOgorCQkJCWdvdG8gZG9nZ3lfbGFzdF9ibG9ja193cml0ZTsKKworCQkJY2FzZSBQRURfRVhDRVBUSU9OX1VOSEFORExFRDoKKwkJCQlwZWRfZXhjZXB0aW9uX2NhdGNoICgpOworCQkJY2FzZSBQRURfRVhDRVBUSU9OX0NBTkNFTDoKKwkJCQlpZiAodGVtcCAhPSBsb2NhbF9idWZmZXIpCisJCQkJCXZtX2RlYWxsb2NhdGUgKG1hY2hfdGFza19zZWxmICgpLAorCQkJCQkgICAgICAgCSAgICAgICAobG9uZykgdGVtcCwKKwkJCQkJICAgICAgIAkgICAgICAgZGlkX3JlYWQpOworCQkJCXJldHVybiAwOworCQl9CisJfQorCisjZW5kaWYgLyogIVJFQURfT05MWSAqLworCXJldHVybiAxOworfQorCisvKiBUT0RPOiByZXR1cm5zIHRoZSBudW1iZXIgb2Ygc2VjdG9ycyB0aGF0IGFyZSBvay4KKyAqLworc3RhdGljIFBlZFNlY3RvcgorZ251X2NoZWNrIChQZWREZXZpY2UqIGRldiwgdm9pZCogYnVmZmVyLCBQZWRTZWN0b3Igc3RhcnQsIFBlZFNlY3RvciBjb3VudCkKK3sKKwlpbnQJCQlzdGF0dXM7CisJaW50CQkJZG9uZSA9IDA7CisKKwlQRURfQVNTRVJUIChkZXYgIT0gTlVMTCwgcmV0dXJuIDApOworCVBFRF9BU1NFUlQgKCFkZXYtPmV4dGVybmFsX21vZGUsIHJldHVybiAwKTsKKwlQRURfQVNTRVJUIChidWZmZXIgIT0gTlVMTCwgcmV0dXJuIDApOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgaW50CitnbnVfc3luYyAoUGVkRGV2aWNlKiBkZXYpCit7CisJR05VU3BlY2lmaWMqCQlhcmNoX3NwZWNpZmljOworCWVycm9yX3QJCQllcnI7CisJUGVkRXhjZXB0aW9uT3B0aW9uCWV4X3N0YXR1czsKKwlzdGF0aWMgY2hhciAqbGFzdF9mYWlsdXJlID0gTlVMTDsKKworCVBFRF9BU1NFUlQgKGRldiAhPSBOVUxMLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAoIWRldi0+ZXh0ZXJuYWxfbW9kZSwgcmV0dXJuIDApOworCQorCWFyY2hfc3BlY2lmaWMgPSBHTlVfU1BFQ0lGSUMgKGRldik7CisKKwlpZiAoZGV2LT5yZWFkX29ubHkgfHwgISBkZXYtPmRpcnR5KQorCQlyZXR1cm4gMTsKKworCXdoaWxlICgxKSB7CisJCWVyciA9IGZpbGVfc3luYyAoYXJjaF9zcGVjaWZpYy0+c3RvcmUtPnNvdXJjZSwgMSwgMCk7CisJCWlmICghIGVyciB8fCBlcnIgPT0gRU9QTk9UU1VQUCB8fCBlcnIgPT0gRVBFUk0KKwkJICAgIHx8IChsYXN0X2ZhaWx1cmUgJiYgc3RyY21wIChsYXN0X2ZhaWx1cmUsIGRldi0+cGF0aCkgPT0gMCkpCisJCSAgYnJlYWs7CisKKwkJZXhfc3RhdHVzID0gcGVkX2V4Y2VwdGlvbl90aHJvdyAoCisJCQlQRURfRVhDRVBUSU9OX0VSUk9SLAorCQkJUEVEX0VYQ0VQVElPTl9SRVRSWV9JR05PUkVfQ0FOQ0VMLAorCQkJXygiJXMgdHJ5aW5nIHRvIHN5bmMgJXMgdG8gZGlzayIpLAorCQkJc3RyZXJyb3IgKGVycm5vKSwgZGV2LT5wYXRoKTsKKworCQlzd2l0Y2ggKGV4X3N0YXR1cykgeworCQkJY2FzZSBQRURfRVhDRVBUSU9OX0lHTk9SRToKKwkJCQlpZiAobGFzdF9mYWlsdXJlKQorCQkJCQlwZWRfZnJlZSAobGFzdF9mYWlsdXJlKTsKKwkJCQlsYXN0X2ZhaWx1cmUgPSBzdHJkdXAgKGRldi0+cGF0aCk7CisJCQkJcmV0dXJuIDE7CisKKwkJCWNhc2UgUEVEX0VYQ0VQVElPTl9SRVRSWToKKwkJCQlicmVhazsKKworCQkJY2FzZSBQRURfRVhDRVBUSU9OX1VOSEFORExFRDoKKwkJCQlwZWRfZXhjZXB0aW9uX2NhdGNoICgpOworCQkJY2FzZSBQRURfRVhDRVBUSU9OX0NBTkNFTDoKKwkJCQlyZXR1cm4gMDsKKwkJfQorCX0gCisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludAorcHJvYmVfc3RhbmRhcmRfZGV2aWNlcyAoKQoreworCV9wZWRfZGV2aWNlX3Byb2JlICgiL2Rldi9zZDAiKTsKKwlfcGVkX2RldmljZV9wcm9iZSAoIi9kZXYvc2QxIik7CisJX3BlZF9kZXZpY2VfcHJvYmUgKCIvZGV2L3NkMiIpOworCV9wZWRfZGV2aWNlX3Byb2JlICgiL2Rldi9zZDMiKTsKKwlfcGVkX2RldmljZV9wcm9iZSAoIi9kZXYvc2Q0Iik7CisJX3BlZF9kZXZpY2VfcHJvYmUgKCIvZGV2L3NkNSIpOworCisJX3BlZF9kZXZpY2VfcHJvYmUgKCIvZGV2L2hkMCIpOworCV9wZWRfZGV2aWNlX3Byb2JlICgiL2Rldi9oZDEiKTsKKwlfcGVkX2RldmljZV9wcm9iZSAoIi9kZXYvaGQyIik7CisJX3BlZF9kZXZpY2VfcHJvYmUgKCIvZGV2L2hkMyIpOworCV9wZWRfZGV2aWNlX3Byb2JlICgiL2Rldi9oZDQiKTsKKwlfcGVkX2RldmljZV9wcm9iZSAoIi9kZXYvaGQ1Iik7CisJX3BlZF9kZXZpY2VfcHJvYmUgKCIvZGV2L2hkNiIpOworCV9wZWRfZGV2aWNlX3Byb2JlICgiL2Rldi9oZDciKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZAorZ251X3Byb2JlX2FsbCAoKQoreworCXByb2JlX3N0YW5kYXJkX2RldmljZXMgKCk7Cit9CisKK3N0YXRpYyBjaGFyKgorZ251X3BhcnRpdGlvbl9nZXRfcGF0aCAoY29uc3QgUGVkUGFydGl0aW9uKiBwYXJ0KQoreworCWNvbnN0IGNoYXIqCWRldl9wYXRoID0gcGFydC0+ZGlzay0+ZGV2LT5wYXRoOworCWludAkJcmVzdWx0X2xlbiA9IHN0cmxlbiAoZGV2X3BhdGgpICsgMTY7CisJY2hhcioJCXJlc3VsdDsKKworCXJlc3VsdCA9IChjaGFyKikgcGVkX21hbGxvYyAocmVzdWx0X2xlbik7CisJaWYgKCFyZXN1bHQpCisJCXJldHVybiBOVUxMOworCXNucHJpbnRmIChyZXN1bHQsIHJlc3VsdF9sZW4sICIlcyVkIiwgZGV2X3BhdGgsIHBhcnQtPm51bSk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludAorZ251X3BhcnRpdGlvbl9pc19idXN5IChjb25zdCBQZWRQYXJ0aXRpb24qIHBhcnQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2dudV9kaXNrX2NvbW1pdCAoUGVkRGlzayogZGlzaykKK3sKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIFBlZERldmljZUFyY2hPcHMgZ251X2Rldl9vcHMgPSB7CisJX25ldzoJCWdudV9uZXcsCisJZGVzdHJveToJZ251X2Rlc3Ryb3ksCisJaXNfYnVzeToJZ251X2lzX2J1c3ksCisJb3BlbjoJCWdudV9vcGVuLAorCXJlZnJlc2hfb3BlbjoJZ251X3JlZnJlc2hfb3BlbiwKKwljbG9zZToJCWdudV9jbG9zZSwKKwlyZWZyZXNoX2Nsb3NlOglnbnVfcmVmcmVzaF9jbG9zZSwKKwlyZWFkOgkJZ251X3JlYWQsCisJd3JpdGU6CQlnbnVfd3JpdGUsCisJY2hlY2s6CQlnbnVfY2hlY2ssCisJc3luYzoJCWdudV9zeW5jLAorCXN5bmNfZmFzdDoJZ251X3N5bmMsCisJcHJvYmVfYWxsOglnbnVfcHJvYmVfYWxsCit9OworCitzdGF0aWMgUGVkRGlza0FyY2hPcHMgZ251X2Rpc2tfb3BzID0geworCXBhcnRpdGlvbl9nZXRfcGF0aDoJZ251X3BhcnRpdGlvbl9nZXRfcGF0aCwKKwlwYXJ0aXRpb25faXNfYnVzeToJZ251X3BhcnRpdGlvbl9pc19idXN5LAorCWRpc2tfY29tbWl0OgkJZ251X2Rpc2tfY29tbWl0Cit9OworCitQZWRBcmNoaXRlY3R1cmUgcGVkX2dudV9hcmNoID0geworCWRldl9vcHM6CSZnbnVfZGV2X29wcywKKwlkaXNrX29wczoJJmdudV9kaXNrX29wcworfTsKKwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9hcmNoL2xpbnV4LmMgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2FyY2gvbGludXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmQ0OWNkCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9hcmNoL2xpbnV4LmMKQEAgLTAsMCArMSwyNDQ4IEBACisvKgorICAgIGxpYnBhcnRlZCAtIGEgbGlicmFyeSBmb3IgbWFuaXB1bGF0aW5nIGRpc2sgcGFydGl0aW9ucworICAgIENvcHlyaWdodCAoQykgMTk5OSAtIDIwMDUsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCisqLworCisjZGVmaW5lIFBST0NfREVWSUNFU19CVUZTSVogMTYzODQKKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaW5jbHVkZSA8cGFydGVkL3BhcnRlZC5oPgorI2luY2x1ZGUgPHBhcnRlZC9kZWJ1Zy5oPgorI2luY2x1ZGUgPHBhcnRlZC9saW51eC5oPgorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8bGliZ2VuLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzeXNjYWxsLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZGlyZW50Lmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPiAgICAgICAgLyogZm9yIHVuYW1lKCkgKi8KKyNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KKyNpZmRlZiBFTkFCTEVfREVWSUNFX01BUFBFUgorI2luY2x1ZGUgPGxpYmRldm1hcHBlci5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJibGtwZy5oIgorCisjaWYgRU5BQkxFX05MUworIyAgaW5jbHVkZSA8bGliaW50bC5oPgorIyAgZGVmaW5lIF8oU3RyaW5nKSBkZ2V0dGV4dCAoUEFDS0FHRSwgU3RyaW5nKQorI2Vsc2UKKyMgIGRlZmluZSBfKFN0cmluZykgKFN0cmluZykKKyNlbmRpZiAvKiBFTkFCTEVfTkxTICovCisKKyNkZWZpbmUgS0VSTkVMX1ZFUlNJT04oYSxiLGMpICgoKGEpIDw8IDE2KSArICgoYikgPDwgOCkgKyAoYykpCisKKyNpZm5kZWYgX19OUl9fbGxzZWVrCisjZGVmaW5lIF9fTlJfX2xsc2VlayAxNDAKKyNlbmRpZgorCisjaWZuZGVmIFNDU0lfSU9DVExfU0VORF9DT01NQU5ECisjZGVmaW5lIFNDU0lfSU9DVExfU0VORF9DT01NQU5EIDEKKyNlbmRpZgorCisvKiBmcm9tIDxsaW51eC9oZHJlZy5oPiAqLworI2RlZmluZSBIRElPX0dFVEdFTyAgICAgICAgICAgICAweDAzMDEgIC8qIGdldCBkZXZpY2UgZ2VvbWV0cnkgKi8KKyNkZWZpbmUgSERJT19HRVRfSURFTlRJVFkgICAgICAgMHgwMzBkICAvKiBnZXQgSURFIGlkZW50aWZpY2F0aW9uIGluZm8gKi8KKworLyogT19ESVJFQ1QgbW9kZSBub3Qgc3VwcG9ydGVkIGluIFNhcHBoaXJlICovCisjdW5kZWYgT19ESVJFQ1QKKyNpZiBkZWZpbmVkKE9fRElSRUNUKSAmJiAoIWRlZmluZWQoX19zMzkwX18pIHx8ICFkZWZpbmVkKF9fczM5MHhfXykpCisjZGVmaW5lIFJEX01PREUgKE9fUkRPTkxZIHwgT19ESVJFQ1QpCisjZGVmaW5lIFdSX01PREUgKE9fV1JPTkxZIHwgT19ESVJFQ1QpCisjZGVmaW5lIFJXX01PREUgKE9fUkRXUiB8IE9fRElSRUNUKQorI2Vsc2UKKyNkZWZpbmUgUkRfTU9ERSAoT19SRE9OTFkpCisjZGVmaW5lIFdSX01PREUgKE9fV1JPTkxZKQorI2RlZmluZSBSV19NT0RFIChPX1JEV1IpCisjZW5kaWYKKworc3RydWN0IGhkX2dlb21ldHJ5IHsKKyAgICAgICAgdW5zaWduZWQgY2hhciBoZWFkczsKKyAgICAgICAgdW5zaWduZWQgY2hhciBzZWN0b3JzOworICAgICAgICB1bnNpZ25lZCBzaG9ydCBjeWxpbmRlcnM7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQ7Cit9OworCitzdHJ1Y3QgYXRhN19zZWN0aW5mbyB7CisgICAgICAgIGludCB2YWxpZDE6MTsKKyAgICAgICAgaW50IHZhbGlkMjoxOworICAgICAgICBpbnQgcnN2OjI2OworICAgICAgICBpbnQgbXVsdGlwbGllcjo0OworfTsKKworLyogc3RydWN0dXJlIHJldHVybmVkIGJ5IEhESU9fR0VUX0lERU5USVRZLCBhcyBwZXIgQU5TSSBBVEEyIHJldi4yZiBzcGVjICovCitzdHJ1Y3QgaGRfZHJpdmVpZCB7CisgICAgICAgIHVuc2lnbmVkIHNob3J0ICBjb25maWc7ICAgICAgICAgLyogbG90cyBvZiBvYnNvbGV0ZSBiaXQgZmxhZ3MgKi8KKyAgICAgICAgdW5zaWduZWQgc2hvcnQgIGN5bHM7ICAgICAgICAgICAvKiAicGh5c2ljYWwiIGN5bHMgKi8KKyAgICAgICAgdW5zaWduZWQgc2hvcnQgIHJlc2VydmVkMjsgICAgICAvKiByZXNlcnZlZCAod29yZCAyKSAqLworICAgICAgICB1bnNpZ25lZCBzaG9ydCAgaGVhZHM7ICAgICAgICAgIC8qICJwaHlzaWNhbCIgaGVhZHMgKi8KKyAgICAgICAgdW5zaWduZWQgc2hvcnQgIHRyYWNrX2J5dGVzOyAgICAvKiB1bmZvcm1hdHRlZCBieXRlcyBwZXIgdHJhY2sgKi8KKyAgICAgICAgdW5zaWduZWQgc2hvcnQgIHNlY3Rvcl9ieXRlczsgICAvKiB1bmZvcm1hdHRlZCBieXRlcyBwZXIgc2VjdG9yICovCisgICAgICAgIHVuc2lnbmVkIHNob3J0ICBzZWN0b3JzOyAgICAgICAgLyogInBoeXNpY2FsIiBzZWN0b3JzIHBlciB0cmFjayAqLworICAgICAgICB1bnNpZ25lZCBzaG9ydCAgdmVuZG9yMDsgICAgICAgIC8qIHZlbmRvciB1bmlxdWUgKi8KKyAgICAgICAgdW5zaWduZWQgc2hvcnQgIHZlbmRvcjE7ICAgICAgICAvKiB2ZW5kb3IgdW5pcXVlICovCisgICAgICAgIHVuc2lnbmVkIHNob3J0ICB2ZW5kb3IyOyAgICAgICAgLyogdmVuZG9yIHVuaXF1ZSAqLworICAgICAgICB1bnNpZ25lZCBjaGFyICAgc2VyaWFsX25vWzIwXTsgIC8qIDAgPSBub3Rfc3BlY2lmaWVkICovCisgICAgICAgIHVuc2lnbmVkIHNob3J0ICBidWZfdHlwZTsKKyAgICAgICAgdW5zaWduZWQgc2hvcnQgIGJ1Zl9zaXplOyAgICAgICAvKiA1MTIgYnl0ZSBpbmNyZW1lbnRzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA9IG5vdF9zcGVjaWZpZWQgKi8KKyAgICAgICAgdW5zaWduZWQgc2hvcnQgIGVjY19ieXRlczsgICAgICAvKiBmb3Igci93IGxvbmcgY21kczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgPSBub3Rfc3BlY2lmaWVkICovCisgICAgICAgIHVuc2lnbmVkIGNoYXIgICBmd19yZXZbOF07ICAgICAgLyogMCA9IG5vdF9zcGVjaWZpZWQgKi8KKyAgICAgICAgY2hhciAgICAgICAgICAgIG1vZGVsWzQwXTsgICAgICAvKiAwID0gbm90X3NwZWNpZmllZCAqLworICAgICAgICB1bnNpZ25lZCBjaGFyICAgbWF4X211bHRzZWN0OyAgIC8qIDA9bm90X2ltcGxlbWVudGVkICovCisgICAgICAgIHVuc2lnbmVkIGNoYXIgICB2ZW5kb3IzOyAgICAgICAgLyogdmVuZG9yIHVuaXF1ZSAqLworICAgICAgICB1bnNpZ25lZCBzaG9ydCAgZHdvcmRfaW87ICAgICAgIC8qIDA9bm90X2ltcGxlbWVudGVkOyAxPWltcGxlbWVudGVkICovCisgICAgICAgIHVuc2lnbmVkIGNoYXIgICB2ZW5kb3I0OyAgICAgICAgLyogdmVuZG9yIHVuaXF1ZSAqLworICAgICAgICB1bnNpZ25lZCBjaGFyICAgY2FwYWJpbGl0eTsgICAgIC8qIGJpdHMgMDpETUEgMTpMQkEgMjpJT1JEWXN3CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzOklPUkRZc3VwKi8KKyAgICAgICAgdW5zaWduZWQgc2hvcnQgIHJlc2VydmVkNTA7ICAgICAvKiByZXNlcnZlZCAod29yZCA1MCkgKi8KKyAgICAgICAgdW5zaWduZWQgY2hhciAgIHZlbmRvcjU7ICAgICAgICAvKiB2ZW5kb3IgdW5pcXVlICovCisgICAgICAgIHVuc2lnbmVkIGNoYXIgICB0UElPOyAgICAgICAgICAgLyogMD1zbG93LCAxPW1lZGl1bSwgMj1mYXN0ICovCisgICAgICAgIHVuc2lnbmVkIGNoYXIgICB2ZW5kb3I2OyAgICAgICAgLyogdmVuZG9yIHVuaXF1ZSAqLworICAgICAgICB1bnNpZ25lZCBjaGFyICAgdERNQTsgICAgICAgICAgIC8qIDA9c2xvdywgMT1tZWRpdW0sIDI9ZmFzdCAqLworICAgICAgICB1bnNpZ25lZCBzaG9ydCAgZmllbGRfdmFsaWQ7ICAgIC8qIGJpdHMgMDpjdXJfb2sgMTplaWRlX29rICovCisgICAgICAgIHVuc2lnbmVkIHNob3J0ICBjdXJfY3lsczsgICAgICAgLyogbG9naWNhbCBjeWxpbmRlcnMgKi8KKyAgICAgICAgdW5zaWduZWQgc2hvcnQgIGN1cl9oZWFkczsgICAgICAvKiBsb2dpY2FsIGhlYWRzICovCisgICAgICAgIHVuc2lnbmVkIHNob3J0ICBjdXJfc2VjdG9yczsgICAgLyogbG9naWNhbCBzZWN0b3JzIHBlciB0cmFjayAqLworICAgICAgICB1bnNpZ25lZCBzaG9ydCAgY3VyX2NhcGFjaXR5MDsgIC8qIGxvZ2ljYWwgdG90YWwgc2VjdG9ycyBvbiBkcml2ZSAqLworICAgICAgICB1bnNpZ25lZCBzaG9ydCAgY3VyX2NhcGFjaXR5MTsgIC8qICAoMiB3b3JkcywgbWlzYWxpZ25lZCBpbnQpICAgICAqLworICAgICAgICB1bnNpZ25lZCBjaGFyICAgbXVsdHNlY3Q7ICAgICAgIC8qIGN1cnJlbnQgbXVsdGlwbGUgc2VjdG9yIGNvdW50ICovCisgICAgICAgIHVuc2lnbmVkIGNoYXIgICBtdWx0c2VjdF92YWxpZDsgLyogd2hlbiAoYml0MD09MSkgbXVsdHNlY3QgaXMgb2sgKi8KKyAgICAgICAgdW5zaWduZWQgaW50ICAgIGxiYV9jYXBhY2l0eTsgICAvKiB0b3RhbCBudW1iZXIgb2Ygc2VjdG9ycyAqLworICAgICAgICB1bnNpZ25lZCBzaG9ydCAgZG1hXzF3b3JkOyAgICAgIC8qIHNpbmdsZS13b3JkIGRtYSBpbmZvICovCisgICAgICAgIHVuc2lnbmVkIHNob3J0ICBkbWFfbXdvcmQ7ICAgICAgLyogbXVsdGlwbGUtd29yZCBkbWEgaW5mbyAqLworICAgICAgICB1bnNpZ25lZCBzaG9ydCAgZWlkZV9waW9fbW9kZXM7IC8qIGJpdHMgMDptb2RlMyAxOm1vZGU0ICovCisgICAgICAgIHVuc2lnbmVkIHNob3J0ICBlaWRlX2RtYV9taW47ICAgLyogbWluIG13b3JkIGRtYSBjeWNsZSB0aW1lIChucykgKi8KKyAgICAgICAgdW5zaWduZWQgc2hvcnQgIGVpZGVfZG1hX3RpbWU7ICAvKiByZWNvbW1lbmRlZCBtd29yZCBkbWEgY3ljbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lIChucykgKi8KKyAgICAgICAgdW5zaWduZWQgc2hvcnQgIGVpZGVfcGlvOyAgICAgICAvKiBtaW4gY3ljbGUgdGltZSAobnMpLCBubyBJT1JEWSAgKi8KKyAgICAgICAgdW5zaWduZWQgc2hvcnQgIGVpZGVfcGlvX2lvcmR5OyAvKiBtaW4gY3ljbGUgdGltZSAobnMpLCB3aXRoIElPUkRZICovCisgICAgICAgIHVuc2lnbmVkIHNob3J0ICB3b3JkczY5XzcwWzJdOyAgLyogcmVzZXJ2ZWQgd29yZHMgNjktNzAgKi8KKyAgICAgICAgLyogSERJT19HRVRfSURFTlRJVFkgY3VycmVudGx5IHJldHVybnMgb25seSB3b3JkcyAwIHRocm91Z2ggNzAgKi8KKyAgICAgICAgdW5zaWduZWQgc2hvcnQgIHdvcmRzNzFfNzRbNF07ICAvKiByZXNlcnZlZCB3b3JkcyA3MS03NCAqLworICAgICAgICB1bnNpZ25lZCBzaG9ydCAgcXVldWVfZGVwdGg7ICAgIC8qICAqLworICAgICAgICB1bnNpZ25lZCBzaG9ydCAgd29yZHM3Nl83OVs0XTsgIC8qIHJlc2VydmVkIHdvcmRzIDc2LTc5ICovCisgICAgICAgIHVuc2lnbmVkIHNob3J0ICBtYWpvcl9yZXZfbnVtOyAgLyogICovCisgICAgICAgIHVuc2lnbmVkIHNob3J0ICBtaW5vcl9yZXZfbnVtOyAgLyogICovCisgICAgICAgIHVuc2lnbmVkIHNob3J0ICBjb21tYW5kX3NldF8xOyAgLyogYml0cyAwOlNtYXJ0IDE6U2VjdXJpdHkgMjpSZW1vdmFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM6UE0gKi8KKyAgICAgICAgdW5zaWduZWQgc2hvcnQgIGNvbW1hbmRfc2V0XzI7ICAvKiBiaXRzIDE0OlNtYXJ0IEVuYWJsZWQgMTM6MCB6ZXJvICovCisgICAgICAgIHVuc2lnbmVkIHNob3J0ICBjZnNzZTsgICAgICAgICAgLyogY29tbWFuZCBzZXQtZmVhdHVyZSBzdXBwb3J0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb25zICovCisgICAgICAgIHVuc2lnbmVkIHNob3J0ICBjZnNfZW5hYmxlXzE7ICAgLyogY29tbWFuZCBzZXQtZmVhdHVyZSBlbmFibGVkICovCisgICAgICAgIHVuc2lnbmVkIHNob3J0ICBjZnNfZW5hYmxlXzI7ICAgLyogY29tbWFuZCBzZXQtZmVhdHVyZSBlbmFibGVkICovCisgICAgICAgIHVuc2lnbmVkIHNob3J0ICBjc2ZfZGVmYXVsdDsgICAgLyogY29tbWFuZCBzZXQtZmVhdHVyZSBkZWZhdWx0ICovCisgICAgICAgIHVuc2lnbmVkIHNob3J0ICBkbWFfdWx0cmE7ICAgICAgLyogICovCisgICAgICAgIHVuc2lnbmVkIHNob3J0ICB3b3JkODk7ICAgICAgICAgLyogcmVzZXJ2ZWQgKHdvcmQgODkpICovCisgICAgICAgIHVuc2lnbmVkIHNob3J0ICB3b3JkOTA7ICAgICAgICAgLyogcmVzZXJ2ZWQgKHdvcmQgOTApICovCisgICAgICAgIHVuc2lnbmVkIHNob3J0ICBDdXJBUE12YWx1ZXM7ICAgLyogY3VycmVudCBBUE0gdmFsdWVzICovCisgICAgICAgIHVuc2lnbmVkIHNob3J0ICB3b3JkOTI7ICAgICAgICAgLyogcmVzZXJ2ZWQgKHdvcmQgOTIpICovCisgICAgICAgIHVuc2lnbmVkIHNob3J0ICBod19jb25maWc7ICAgICAgLyogaGFyZHdhcmUgY29uZmlnICovCisgICAgICAgIHVuc2lnbmVkIHNob3J0ICB3b3Jkczk0XzEwNVsxMl07LyogcmVzZXJ2ZWQgd29yZHMgOTQtMTA1ICovCisgICAgICAgIHN0cnVjdCBhdGE3X3NlY3RpbmZvIGF0YTdfc2VjdGluZm87IC8qIEFUQVBJL0FUQTcgcGh5c2ljYWwgYW5kIGxvZ2ljYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdG9yIHNpemUgKi8KKyAgICAgICAgdW5zaWduZWQgc2hvcnQgIHdvcmRzMTA3XzExNlsxMF07LyogcmVzZXJ2ZWQgd29yZHMgMTA3LTExNiAqLworICAgICAgICB1bnNpZ25lZCBpbnQgICAgbG9naWNhbF9zZWN0c2l6ZTsvKiBBVEFQSS9BVEE3IGxvZ2ljYWwgc2VjdG9yIHNpemUgKi8KKyAgICAgICAgdW5zaWduZWQgc2hvcnQgIHdvcmRzMTE5XzEyNVs3XTsvKiByZXNlcnZlZCB3b3JkcyAxMTktMTI1ICovCisgICAgICAgIHVuc2lnbmVkIHNob3J0ICBsYXN0X2x1bjsgICAgICAgLyogcmVzZXJ2ZWQgKHdvcmQgMTI2KSAqLworICAgICAgICB1bnNpZ25lZCBzaG9ydCAgd29yZDEyNzsgICAgICAgIC8qIHJlc2VydmVkICh3b3JkIDEyNykgKi8KKyAgICAgICAgdW5zaWduZWQgc2hvcnQgIGRsZjsgICAgICAgICAgICAvKiBkZXZpY2UgbG9jayBmdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIDE1OjkgcmVzZXJ2ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiA4ICAgIHNlY3VyaXR5IGxldmVsIDE6bWF4IDA6aGlnaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIDc6NiAgcmVzZXJ2ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiA1ICAgIGVuaGFuY2VkIGVyYXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogNCAgICBleHBpcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAzICAgIGZyb3plbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIDIgICAgbG9ja2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogMSAgICBlbi9kaXNhYmxlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIDAgICAgY2FwYWJpbGl0eQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICB1bnNpZ25lZCBzaG9ydCAgY3NmbzsgICAgICAgICAgIC8qIGN1cnJlbnQgc2V0IGZlYXR1cmVzIG9wdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAxNTo0IHJlc2VydmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogMyAgICBhdXRvIHJlYXNzaWduCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogMiAgICByZXZlcnRpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAxICAgIHJlYWQtbG9vay1haGVhZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIDAgICAgd3JpdGUgY2FjaGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgdW5zaWduZWQgc2hvcnQgIHdvcmRzMTMwXzE1NVsyNl07LyogcmVzZXJ2ZWQgdmVuZG9yIHdvcmRzIDEzMC0xNTUgKi8KKyAgICAgICAgdW5zaWduZWQgc2hvcnQgIHdvcmQxNTY7CisgICAgICAgIHVuc2lnbmVkIHNob3J0ICB3b3JkczE1N18xNTlbM107IC8qIHJlc2VydmVkIHZlbmRvciB3b3JkcyAxNTctMTU5ICovCisgICAgICAgIHVuc2lnbmVkIHNob3J0ICB3b3JkczE2MF8yNTVbOTVdOy8qIHJlc2VydmVkIHdvcmRzIDE2MC0yNTUgKi8KK307CisKKy8qIGZyb20gPGxpbnV4L2ZzLmg+ICovCisjZGVmaW5lIEJMS1JSUEFSVCAgX0lPKDB4MTIsOTUpIC8qIHJlLXJlYWQgcGFydGl0aW9uIHRhYmxlICovCisjZGVmaW5lIEJMS0dFVFNJWkUgX0lPKDB4MTIsOTYpIC8qIHJldHVybiBkZXZpY2Ugc2l6ZSAqLworI2RlZmluZSBCTEtGTFNCVUYgIF9JTygweDEyLDk3KSAvKiBmbHVzaCBidWZmZXIgY2FjaGUgKi8KKyNkZWZpbmUgQkxLU1NaR0VUICBfSU8oMHgxMiwxMDQpIC8qIGdldCBibG9jayBkZXZpY2Ugc2VjdG9yIHNpemUgKi8KKyNkZWZpbmUgQkxLR0VUTEFTVFNFQ1QgIF9JTygweDEyLDEwOCkgLyogZ2V0IGxhc3Qgc2VjdG9yIG9mIGJsb2NrIGRldmljZSAqLworI2RlZmluZSBCTEtTRVRMQVNUU0VDVCAgX0lPKDB4MTIsMTA5KSAvKiBzZXQgbGFzdCBzZWN0b3Igb2YgYmxvY2sgZGV2aWNlICovCisKKy8qIHJldHVybiBkZXZpY2Ugc2l6ZSBpbiBieXRlcyAodTY0ICphcmcpICovCisjZGVmaW5lIEJMS0dFVFNJWkU2NCBfSU9SKDB4MTIsMTE0LHNpemVfdCkKKworc3RydWN0IGJsa2Rldl9pb2N0bF9wYXJhbSB7CisgICAgICAgIHVuc2lnbmVkIGludCBibG9jazsKKyAgICAgICAgc2l6ZV90IGNvbnRlbnRfbGVuZ3RoOworICAgICAgICBjaGFyICogYmxvY2tfY29udGVudHM7Cit9OworCisvKiBmcm9tIDxsaW51eC9tYWpvci5oPiAqLworI2RlZmluZSBJREUwX01BSk9SICAgICAgICAgICAgICAzCisjZGVmaW5lIElERTFfTUFKT1IgICAgICAgICAgICAgIDIyCisjZGVmaW5lIElERTJfTUFKT1IgICAgICAgICAgICAgIDMzCisjZGVmaW5lIElERTNfTUFKT1IgICAgICAgICAgICAgIDM0CisjZGVmaW5lIElERTRfTUFKT1IgICAgICAgICAgICAgIDU2CisjZGVmaW5lIElERTVfTUFKT1IgICAgICAgICAgICAgIDU3CisjZGVmaW5lIFNDU0lfQ0RST01fTUFKT1IgICAgICAgIDExCisjZGVmaW5lIFNDU0lfRElTSzBfTUFKT1IgICAgICAgIDgKKyNkZWZpbmUgU0NTSV9ESVNLMV9NQUpPUiAgICAgICAgNjUKKyNkZWZpbmUgU0NTSV9ESVNLMl9NQUpPUiAgICAgICAgNjYKKyNkZWZpbmUgU0NTSV9ESVNLM19NQUpPUiAgICAgICAgNjcKKyNkZWZpbmUgU0NTSV9ESVNLNF9NQUpPUiAgICAgICAgNjgKKyNkZWZpbmUgU0NTSV9ESVNLNV9NQUpPUiAgICAgICAgNjkKKyNkZWZpbmUgU0NTSV9ESVNLNl9NQUpPUiAgICAgICAgNzAKKyNkZWZpbmUgU0NTSV9ESVNLN19NQUpPUiAgICAgICAgNzEKKyNkZWZpbmUgQ09NUEFRX1NNQVJUMl9NQUpPUiAgICAgNzIKKyNkZWZpbmUgQ09NUEFRX1NNQVJUMl9NQUpPUjEgICAgNzMKKyNkZWZpbmUgQ09NUEFRX1NNQVJUMl9NQUpPUjIgICAgNzQKKyNkZWZpbmUgQ09NUEFRX1NNQVJUMl9NQUpPUjMgICAgNzUKKyNkZWZpbmUgQ09NUEFRX1NNQVJUMl9NQUpPUjQgICAgNzYKKyNkZWZpbmUgQ09NUEFRX1NNQVJUMl9NQUpPUjUgICAgNzcKKyNkZWZpbmUgQ09NUEFRX1NNQVJUMl9NQUpPUjYgICAgNzgKKyNkZWZpbmUgQ09NUEFRX1NNQVJUMl9NQUpPUjcgICAgNzkKKyNkZWZpbmUgQ09NUEFRX1NNQVJUX01BSk9SICAgICAgMTA0CisjZGVmaW5lIENPTVBBUV9TTUFSVF9NQUpPUjEgICAgIDEwNQorI2RlZmluZSBDT01QQVFfU01BUlRfTUFKT1IyICAgICAxMDYKKyNkZWZpbmUgQ09NUEFRX1NNQVJUX01BSk9SMyAgICAgMTA3CisjZGVmaW5lIENPTVBBUV9TTUFSVF9NQUpPUjQgICAgIDEwOAorI2RlZmluZSBDT01QQVFfU01BUlRfTUFKT1I1ICAgICAxMDkKKyNkZWZpbmUgQ09NUEFRX1NNQVJUX01BSk9SNiAgICAgMTEwCisjZGVmaW5lIENPTVBBUV9TTUFSVF9NQUpPUjcgICAgIDExMQorI2RlZmluZSBEQUM5NjBfTUFKT1IgICAgICAgICAgICA0OAorI2RlZmluZSBBVEFSQUlEX01BSk9SICAgICAgICAgICAxMTQKKyNkZWZpbmUgSTJPX01BSk9SMSAgICAgICAgICAgICAgODAKKyNkZWZpbmUgSTJPX01BSk9SMiAgICAgICAgICAgICAgODEKKyNkZWZpbmUgSTJPX01BSk9SMyAgICAgICAgICAgICAgODIKKyNkZWZpbmUgSTJPX01BSk9SNCAgICAgICAgICAgICAgODMKKyNkZWZpbmUgSTJPX01BSk9SNSAgICAgICAgICAgICAgODQKKyNkZWZpbmUgSTJPX01BSk9SNiAgICAgICAgICAgICAgODUKKyNkZWZpbmUgSTJPX01BSk9SNyAgICAgICAgICAgICAgODYKKyNkZWZpbmUgSTJPX01BSk9SOCAgICAgICAgICAgICAgODcKKyNkZWZpbmUgVUJEX01BSk9SICAgICAgICAgICAgICAgOTgKKyNkZWZpbmUgREFTRF9NQUpPUiAgICAgICAgICAgICAgOTQKKyNkZWZpbmUgVklPREFTRF9NQUpPUiAgICAgICAgICAgMTEyCisjZGVmaW5lIFNYOF9NQUpPUjEgICAgICAgICAgICAgIDE2MAorI2RlZmluZSBTWDhfTUFKT1IyICAgICAgICAgICAgICAxNjEKKworI2RlZmluZSBTQ1NJX0JMS19NQUpPUihNKSAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIChNKSA9PSBTQ1NJX0RJU0swX01BSk9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHx8IChNKSA9PSBTQ1NJX0NEUk9NX01BSk9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHx8ICgoTSkgPj0gU0NTSV9ESVNLMV9NQUpPUiAmJiAoTSkgPD0gU0NTSV9ESVNLN19NQUpPUikpCisKK3N0YXRpYyBjaGFyKiBfZGV2aWNlX2dldF9wYXJ0X3BhdGggKFBlZERldmljZSogZGV2LCBpbnQgbnVtKTsKK3N0YXRpYyBpbnQgX3BhcnRpdGlvbl9pc19tb3VudGVkX2J5X3BhdGggKGNvbnN0IGNoYXIqIHBhdGgpOworCitzdGF0aWMgaW50CitfaXNfaWRlX21ham9yIChpbnQgbWFqb3IpCit7CisgICAgICAgIHN3aXRjaCAobWFqb3IpIHsKKyAgICAgICAgICAgICAgICBjYXNlIElERTBfTUFKT1I6CisgICAgICAgICAgICAgICAgY2FzZSBJREUxX01BSk9SOgorICAgICAgICAgICAgICAgIGNhc2UgSURFMl9NQUpPUjoKKyAgICAgICAgICAgICAgICBjYXNlIElERTNfTUFKT1I6CisgICAgICAgICAgICAgICAgY2FzZSBJREU0X01BSk9SOgorICAgICAgICAgICAgICAgIGNhc2UgSURFNV9NQUpPUjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9Cit9CisKK3N0YXRpYyBpbnQKK19pc19jcHFhcnJheV9tYWpvciAoaW50IG1ham9yKQoreworICAgICAgICByZXR1cm4gKChDT01QQVFfU01BUlQyX01BSk9SIDw9IG1ham9yICYmIG1ham9yIDw9IENPTVBBUV9TTUFSVDJfTUFKT1I3KQorICAgICAgICAgICAgIHx8IChDT01QQVFfU01BUlRfTUFKT1IgPD0gbWFqb3IgJiYgbWFqb3IgPD0gQ09NUEFRX1NNQVJUX01BSk9SNykpOworfQorCitzdGF0aWMgaW50CitfaXNfaTJvX21ham9yIChpbnQgbWFqb3IpCit7CisgICAgICAgIHJldHVybiAoSTJPX01BSk9SMSA8PSBtYWpvciAmJiBtYWpvciA8PSBJMk9fTUFKT1I4KTsKK30KKworc3RhdGljIGludAorX2lzX3N4OF9tYWpvciAoaW50IG1ham9yKQoreworICAgICAgICByZXR1cm4gKFNYOF9NQUpPUjEgPD0gbWFqb3IgJiYgbWFqb3IgPD0gU1g4X01BSk9SMik7Cit9CisKKyNpZmRlZiBFTkFCTEVfREVWSUNFX01BUFBFUgorc3RhdGljIGludAorcmVhZEZEIChpbnQgZmQsIGNoYXIgKipidWYpCit7CisgICAgICAgIGNoYXIqIHA7CisgICAgICAgIHNpemVfdCBzaXplID0gUFJPQ19ERVZJQ0VTX0JVRlNJWjsKKyAgICAgICAgaW50IHMsIGZpbGVzaXplID0gMDsKKworICAgICAgICAqYnVmID0gbWFsbG9jIChzaXplICogc2l6ZW9mIChjaGFyKSk7CisgICAgICAgIGlmICgqYnVmID09IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgcCA9ICYoKmJ1ZikgW2ZpbGVzaXplXTsKKyAgICAgICAgICAgICAgICBzID0gcmVhZCAoZmQsIHAsIFBST0NfREVWSUNFU19CVUZTSVopOworICAgICAgICAgICAgICAgIC8qIGV4aXQgaWYgdGhlcmUgaXMgYW4gZXJyb3Igb3IgRU9GIGlzIHJlYWNoZWQgKi8KKyAgICAgICAgICAgICAgICBpZiAocyA8PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZmlsZXNpemUgKz0gczsKKyAgICAgICAgICAgICAgICBzaXplICs9IHM7CisgICAgICAgICAgICAgICAgKmJ1ZiA9IHJlYWxsb2MgKCpidWYsIHNpemUpOworICAgICAgICB9IHdoaWxlICgxKTsKKworICAgICAgICBpZiAoZmlsZXNpemUgPT0gMCAmJiBzIDwgMCkgeworICAgICAgICAgICAgICAgIGZyZWUgKCpidWYpOworICAgICAgICAgICAgICAgICpidWYgPSBOVUxMOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvKiB0aGVyZSBpcyBhbHdheXMgc29tZSBleGNlc3MgbWVtb3J5IGxlZnQgdW51c2VkICovCisgICAgICAgICAgICAgICAgKmJ1ZiA9IHJlYWxsb2MgKCpidWYsIGZpbGVzaXplKzEpOworICAgICAgICAgICAgICAgICgqYnVmKVtmaWxlc2l6ZV0gPSAnXDAnOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZpbGVzaXplOworfQorCitzdGF0aWMgaW50CitfaXNfZG1fbWFqb3IgKGludCBtYWpvcikKK3sKKyAgICAgICAgaW50IGZkOworICAgICAgICBjaGFyKiBidWYgPSBOVUxMOworICAgICAgICBjaGFyKiBsaW5lOworICAgICAgICBjaGFyKiBlbmQ7CisgICAgICAgIGludCBiZCA9IDA7CisgICAgICAgIGNoYXIgYzsKKworICAgICAgICBmZCA9IG9wZW4gKCIvcHJvYy9kZXZpY2VzIiwgT19SRE9OTFkpOworICAgICAgICBpZiAoZmQgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIGlmIChyZWFkRkQoZmQsICZidWYpIDwgMCkgeworICAgICAgICAgICAgICAgIGNsb3NlKGZkKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIGxpbmUgPSBidWY7CisgICAgICAgIGVuZCA9IHN0cmNocihsaW5lLCAnXG4nKTsKKyAgICAgICAgd2hpbGUgKGVuZCkgeworICAgICAgICAgICAgICAgIGNoYXIgKm5hbWU7CisgICAgICAgICAgICAgICAgaW50IG1hajsKKworICAgICAgICAgICAgICAgIGMgPSAqZW5kOworICAgICAgICAgICAgICAgICplbmQgPSAnXDAnOworCisgICAgICAgICAgICAgICAgaWYgKCFiZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdHJuY21wKGxpbmUsICJCbG9jayBkZXZpY2VzOiIsIDE0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmQgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBuZXh0OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG5hbWUgPSBzdHJyY2hyKGxpbmUsICcgJyk7CisgICAgICAgICAgICAgICAgaWYgKCFuYW1lIHx8IHN0cmNtcChuYW1lKzEsICJkZXZpY2UtbWFwcGVyIikpCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG5leHQ7CisKKyAgICAgICAgICAgICAgICBtYWogPSBzdHJ0b2wobGluZSwgJm5hbWUsIDEwKTsKKyAgICAgICAgICAgICAgICBpZiAobWFqID09IG1ham9yKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmcmVlKGJ1Zik7CisgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZShmZCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgICAgICB9CisKK25leHQ6CisgICAgICAgICAgICAgICAgKmVuZCA9IGM7CisgICAgICAgICAgICAgICAgbGluZSA9IGVuZCsxOworICAgICAgICAgICAgICAgIGVuZCA9IHN0cmNocihsaW5lLCAnXG4nKTsKKyAgICAgICAgfQorICAgICAgICBmcmVlKGJ1Zik7CisgICAgICAgIGNsb3NlKGZkKTsKKyAgICAgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIGludAorX2RldmljZV9zdGF0IChQZWREZXZpY2UqIGRldiwgc3RydWN0IHN0YXQgKiBkZXZfc3RhdCkKK3sKKyAgICAgICAgUEVEX0FTU0VSVCAoZGV2ICE9IE5VTEwsIHJldHVybiAwKTsKKyAgICAgICAgUEVEX0FTU0VSVCAoIWRldi0+ZXh0ZXJuYWxfbW9kZSwgcmV0dXJuIDApOworCisgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICAgaWYgKCFzdGF0IChkZXYtPnBhdGgsIGRldl9zdGF0KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZWRfZXhjZXB0aW9uX3Rocm93ICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEVEX0VYQ0VQVElPTl9FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEVEX0VYQ0VQVElPTl9SRVRSWV9DQU5DRUwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIkNvdWxkIG5vdCBzdGF0IGRldmljZSAlcyAtICVzLiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXYtPnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVycm9yIChlcnJubykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIT0gUEVEX0VYQ0VQVElPTl9SRVRSWSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9Cit9CisKK3N0YXRpYyBpbnQKK19kZXZpY2VfcHJvYmVfdHlwZSAoUGVkRGV2aWNlKiBkZXYpCit7CisgICAgICAgIHN0cnVjdCBzdGF0ICAgICAgICAgICAgIGRldl9zdGF0OworICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICBkZXZfbWFqb3I7CisgICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgIGRldl9taW5vcjsKKworICAgICAgICBpZiAoIV9kZXZpY2Vfc3RhdCAoZGV2LCAmZGV2X3N0YXQpKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIGlmICghU19JU0JMSyhkZXZfc3RhdC5zdF9tb2RlKSkgeworICAgICAgICAgICAgICAgIGRldi0+dHlwZSA9IFBFRF9ERVZJQ0VfRklMRTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorCisgICAgICAgIGRldl9tYWpvciA9IG1ham9yIChkZXZfc3RhdC5zdF9yZGV2KTsKKyAgICAgICAgZGV2X21pbm9yID0gbWlub3IgKGRldl9zdGF0LnN0X3JkZXYpOworCisgICAgICAgIGlmIChTQ1NJX0JMS19NQUpPUiAoZGV2X21ham9yKSAmJiAoZGV2X21pbm9yICUgMHgxMCA9PSAwKSkgeworICAgICAgICAgICAgICAgIGRldi0+dHlwZSA9IFBFRF9ERVZJQ0VfU0NTSTsKKyAgICAgICAgfSBlbHNlIGlmIChfaXNfaWRlX21ham9yIChkZXZfbWFqb3IpICYmIChkZXZfbWlub3IgJSAweDQwID09IDApKSB7CisgICAgICAgICAgICAgICAgZGV2LT50eXBlID0gUEVEX0RFVklDRV9JREU7CisgICAgICAgIH0gZWxzZSBpZiAoZGV2X21ham9yID09IERBQzk2MF9NQUpPUiAmJiAoZGV2X21pbm9yICUgMHg4ID09IDApKSB7CisgICAgICAgICAgICAgICAgZGV2LT50eXBlID0gUEVEX0RFVklDRV9EQUM5NjA7CisgICAgICAgIH0gZWxzZSBpZiAoZGV2X21ham9yID09IEFUQVJBSURfTUFKT1IgJiYgKGRldl9taW5vciAlIDB4MTAgPT0gMCkpIHsKKyAgICAgICAgICAgICAgICBkZXYtPnR5cGUgPSBQRURfREVWSUNFX0FUQVJBSUQ7CisgICAgICAgIH0gZWxzZSBpZiAoZGV2X21ham9yID09IERBU0RfTUFKT1IgJiYgKGRldl9taW5vciAlIDB4NCA9PSAwKSkgeworICAgICAgICAgICAgICAgIGRldi0+dHlwZSA9IFBFRF9ERVZJQ0VfREFTRDsKKyAgICAgICAgfSBlbHNlIGlmIChkZXZfbWFqb3IgPT0gVklPREFTRF9NQUpPUiAmJiAoZGV2X21pbm9yICUgMHg4ID09IDApKSB7CisgICAgICAgICAgICAgICAgZGV2LT50eXBlID0gUEVEX0RFVklDRV9WSU9EQVNEOworICAgICAgICB9IGVsc2UgaWYgKF9pc19zeDhfbWFqb3IoZGV2X21ham9yKSAmJiAoZGV2X21pbm9yICUgMHgyMCA9PSAwKSkgeworICAgICAgICAgICAgICAgIGRldi0+dHlwZSA9IFBFRF9ERVZJQ0VfU1g4OworICAgICAgICB9IGVsc2UgaWYgKF9pc19pMm9fbWFqb3IgKGRldl9tYWpvcikgJiYgKGRldl9taW5vciAlIDB4MTAgPT0gMCkpIHsKKyAgICAgICAgICAgICAgICBkZXYtPnR5cGUgPSBQRURfREVWSUNFX0kyTzsKKyAgICAgICAgfSBlbHNlIGlmIChfaXNfY3BxYXJyYXlfbWFqb3IgKGRldl9tYWpvcikgJiYgKGRldl9taW5vciAlIDB4MTAgPT0gMCkpIHsKKyAgICAgICAgICAgICAgICBkZXYtPnR5cGUgPSBQRURfREVWSUNFX0NQUUFSUkFZOworICAgICAgICB9IGVsc2UgaWYgKGRldl9tYWpvciA9PSBVQkRfTUFKT1IgJiYgKGRldl9taW5vciAlIDB4MTAgPT0gMCkpIHsKKyAgICAgICAgICAgICAgICBkZXYtPnR5cGUgPSBQRURfREVWSUNFX1VCRDsKKyNpZmRlZiBFTkFCTEVfREVWSUNFX01BUFBFUgorICAgICAgICB9IGVsc2UgaWYgKF9pc19kbV9tYWpvcihkZXZfbWFqb3IpKSB7CisgICAgICAgICAgICAgICAgZGV2LT50eXBlID0gUEVEX0RFVklDRV9ETTsKKyNlbmRpZgorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGRldi0+dHlwZSA9IFBFRF9ERVZJQ0VfVU5LTk9XTjsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitfZ2V0X2xpbnV4X3ZlcnNpb24gKCkKK3sKKyAgICAgICAgc3RhdGljIGludCBrdmVyID0gLTE7CisKKyAgICAgICAgc3RydWN0IHV0c25hbWUgdXRzOworICAgICAgICBpbnQgbWFqb3I7CisgICAgICAgIGludCBtaW5vcjsKKyAgICAgICAgaW50IHRlZW55OworCisgICAgICAgIGlmIChrdmVyICE9IC0xKQorICAgICAgICAgICAgICAgIHJldHVybiBrdmVyOworCisgICAgICAgIGlmICh1bmFtZSAoJnV0cykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGt2ZXIgPSAwOworICAgICAgICBpZiAoc3NjYW5mICh1dHMucmVsZWFzZSwgIiV1LiV1LiV1IiwgJm1ham9yLCAmbWlub3IsICZ0ZWVueSkgIT0gMykKKyAgICAgICAgICAgICAgICByZXR1cm4ga3ZlciA9IDA7CisKKyAgICAgICAgcmV0dXJuIGt2ZXIgPSBLRVJORUxfVkVSU0lPTiAobWFqb3IsIG1pbm9yLCB0ZWVueSk7Cit9CisKK3N0YXRpYyBpbnQKK19oYXZlX2RldmZzICgpCit7CisgICAgICAgIHN0YXRpYyBpbnQgaGF2ZV9kZXZmcyA9IC0xOworICAgICAgICBzdHJ1Y3Qgc3RhdCBzYjsKKworICAgICAgICBpZiAoaGF2ZV9kZXZmcyAhPSAtMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gaGF2ZV9kZXZmczsKKworICAgICAgICAvKiB0aGUgcHJlc2VuY2Ugb2YgL2Rldi8uZGV2ZnNkIGltcGxpZXMgdGhhdCBEZXZGUyBpcyBhY3RpdmUgKi8KKyAgICAgICAgaWYgKHN0YXQoIi9kZXYvLmRldmZzZCIsICZzYikgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiBoYXZlX2RldmZzID0gMDsKKworICAgICAgICByZXR1cm4gaGF2ZV9kZXZmcyA9IFNfSVNDSFIoc2Iuc3RfbW9kZSkgPyAxIDogMDsKK30KKworc3RhdGljIHZvaWQgCitfZGV2aWNlX3NldF9zZWN0b3Jfc2l6ZSAoUGVkRGV2aWNlKiBkZXYpCit7CisgICAgICAgIExpbnV4U3BlY2lmaWMqICBhcmNoX3NwZWNpZmljID0gTElOVVhfU1BFQ0lGSUMgKGRldik7CisgICAgICAgIGludCBzZWN0b3Jfc2l6ZTsKKyAgICAgICAgCisgICAgICAgIGRldi0+c2VjdG9yX3NpemUgPSBQRURfU0VDVE9SX1NJWkVfREVGQVVMVDsKKyAgICAgICAgZGV2LT5waHlzX3NlY3Rvcl9zaXplID0gUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQ7CisKKyAgICAgICAgUEVEX0FTU0VSVCAoZGV2LT5vcGVuX2NvdW50LCByZXR1cm4pOworCisgICAgICAgIGlmIChfZ2V0X2xpbnV4X3ZlcnNpb24oKSA8IEtFUk5FTF9WRVJTSU9OICgyLDMsMCkpIHsKKyAgICAgICAgICAgICAgICBkZXYtPnNlY3Rvcl9zaXplID0gUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQ7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoaW9jdGwgKGFyY2hfc3BlY2lmaWMtPmZkLCBCTEtTU1pHRVQsICZzZWN0b3Jfc2l6ZSkpIHsKKyAgICAgICAgICAgICAgICBwZWRfZXhjZXB0aW9uX3Rocm93ICgKKyAgICAgICAgICAgICAgICAgICAgICAgIFBFRF9FWENFUFRJT05fV0FSTklORywKKyAgICAgICAgICAgICAgICAgICAgICAgIFBFRF9FWENFUFRJT05fT0ssCisgICAgICAgICAgICAgICAgICAgICAgICBfKCJDb3VsZCBub3QgZGV0ZXJtaW5lIHNlY3RvciBzaXplIGZvciAlczogJXMuXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICJVc2luZyB0aGUgZGVmYXVsdCBzZWN0b3Igc2l6ZSAoJWxsZCkuIiksCisgICAgICAgICAgICAgICAgICAgICAgICBkZXYtPnBhdGgsIHN0cmVycm9yIChlcnJubyksIFBFRF9TRUNUT1JfU0laRV9ERUZBVUxUKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBkZXYtPnNlY3Rvcl9zaXplID0gKGxvbmcgbG9uZylzZWN0b3Jfc2l6ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFJldHVybiBQRURfU0VDVE9SX1NJWkVfREVGQVVMVCBmb3IgREFTRHMuICovCisgICAgICAgIGlmIChkZXYtPnR5cGUgPT0gUEVEX0RFVklDRV9EQVNEKSB7CisgICAgICAgICAgICAgICAgZGV2LT5zZWN0b3Jfc2l6ZSA9IFBFRF9TRUNUT1JfU0laRV9ERUZBVUxUOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGRldi0+c2VjdG9yX3NpemUgIT0gUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQpIHsKKyAgICAgICAgICAgICAgICBwZWRfZXhjZXB0aW9uX3Rocm93ICgKKyAgICAgICAgICAgICAgICAgICAgICAgIFBFRF9FWENFUFRJT05fV0FSTklORywKKyAgICAgICAgICAgICAgICAgICAgICAgIFBFRF9FWENFUFRJT05fT0ssCisgICAgICAgICAgICAgICAgICAgICAgICBfKCJEZXZpY2UgJXMgaGFzIGEgbG9naWNhbCBzZWN0b3Igc2l6ZSBvZiAlbGxkLiAgTm90ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImFsbCBwYXJ0cyBvZiBHTlUgUGFydGVkIHN1cHBvcnQgdGhpcyBhdCB0aGUgbW9tZW50LCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJhbmQgdGhlIHdvcmtpbmcgY29kZSBpcyBISUdITFkgRVhQRVJJTUVOVEFMLlxuIiksCisgICAgICAgICAgICAgICAgICAgICAgICBkZXYtPnBhdGgsIGRldi0+c2VjdG9yX3NpemUpOworICAgICAgICB9Cit9CisKK3N0YXRpYyBpbnQKK19rZXJuZWxfaGFzX2Jsa2dldHNpemU2NCh2b2lkKQoreworICAgICAgICBpbnQgdmVyc2lvbiA9IF9nZXRfbGludXhfdmVyc2lvbigpOworCisgICAgICAgIGlmICh2ZXJzaW9uID49IEtFUk5FTF9WRVJTSU9OICgyLDUsNCkpIHJldHVybiAxOworICAgICAgICBpZiAodmVyc2lvbiA8ICBLRVJORUxfVkVSU0lPTiAoMiw1LDApICYmCisgICAgICAgICAgICB2ZXJzaW9uID49IEtFUk5FTF9WRVJTSU9OICgyLDQsMTgpKSByZXR1cm4gMTsKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKKy8qIFRPRE86IGRvIGEgYmluYXJ5IHNlYXJjaCBpZiBCTEtHRVRTSVpFIGRvZXNuJ3Qgd29yaz8hICovCitzdGF0aWMgUGVkU2VjdG9yCitfZGV2aWNlX2dldF9sZW5ndGggKFBlZERldmljZSogZGV2KQoreworICAgICAgICB1bnNpZ25lZCBsb25nICAgICAgICAgICBzaXplOworICAgICAgICBMaW51eFNwZWNpZmljKiAgICAgICAgICBhcmNoX3NwZWNpZmljID0gTElOVVhfU1BFQ0lGSUMgKGRldik7CisgICAgICAgIHVpbnQ2NF90IGJ5dGVzPTA7CisKKworICAgICAgICBQRURfQVNTRVJUIChkZXYtPm9wZW5fY291bnQgPiAwLCByZXR1cm4gMCk7CisgICAgICAgIFBFRF9BU1NFUlQgKGRldi0+c2VjdG9yX3NpemUgJSBQRURfU0VDVE9SX1NJWkVfREVGQVVMVCA9PSAwLCByZXR1cm4gMCk7CisKKyAgICAgICAgaWYgKF9rZXJuZWxfaGFzX2Jsa2dldHNpemU2NCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGlvY3RsKGFyY2hfc3BlY2lmaWMtPmZkLCBCTEtHRVRTSVpFNjQsICZieXRlcykgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ5dGVzIC8gZGV2LT5zZWN0b3Jfc2l6ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoaW9jdGwgKGFyY2hfc3BlY2lmaWMtPmZkLCBCTEtHRVRTSVpFLCAmc2l6ZSkpIHsKKyAgICAgICAgICAgICAgICBwZWRfZXhjZXB0aW9uX3Rocm93ICgKKyAgICAgICAgICAgICAgICAgICAgICAgIFBFRF9FWENFUFRJT05fQlVHLAorICAgICAgICAgICAgICAgICAgICAgICAgUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisgICAgICAgICAgICAgICAgICAgICAgICBfKCJVbmFibGUgdG8gZGV0ZXJtaW5lIHRoZSBzaXplIG9mICVzICglcykuIiksCisgICAgICAgICAgICAgICAgICAgICAgICBkZXYtPnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJlcnJvciAoZXJybm8pKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBzaXplOworfQorCitzdGF0aWMgaW50CitfZGV2aWNlX3Byb2JlX2dlb21ldHJ5IChQZWREZXZpY2UqIGRldikKK3sKKyAgICAgICAgTGludXhTcGVjaWZpYyogICAgICAgICAgYXJjaF9zcGVjaWZpYyA9IExJTlVYX1NQRUNJRklDIChkZXYpOworICAgICAgICBzdHJ1Y3Qgc3RhdCAgICAgICAgICAgICBkZXZfc3RhdDsKKyAgICAgICAgc3RydWN0IGhkX2dlb21ldHJ5ICAgICAgZ2VvbWV0cnk7CisKKyAgICAgICAgaWYgKCFfZGV2aWNlX3N0YXQgKGRldiwgJmRldl9zdGF0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgUEVEX0FTU0VSVCAoU19JU0JMSyAoZGV2X3N0YXQuc3RfbW9kZSksIHJldHVybiAwKTsKKworICAgICAgICBfZGV2aWNlX3NldF9zZWN0b3Jfc2l6ZSAoZGV2KTsKKyAgICAgICAgCisgICAgICAgIGRldi0+bGVuZ3RoID0gX2RldmljZV9nZXRfbGVuZ3RoIChkZXYpOworICAgICAgICBpZiAoIWRldi0+bGVuZ3RoKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIC8qIFRoZSBHRVRHRU8gaW9jdGwgaXMgbm8gbG9uZ2VyIHVzZWZ1bCAoYXMgb2YgbGludXggMi42LngpLiAgV2UgY291bGQKKyAgICAgICAgICogc3RpbGwgdXNlIGl0IGluIDIuNC54LCBidXQgdGhpcyBpcyBjb250ZW50aW91cy4gIFBlcmhhcHMgd2Ugc2hvdWxkCisgICAgICAgICAqIG1vdmUgdG8gRURELiAqLworICAgICAgICBkZXYtPmJpb3NfZ2VvbS5zZWN0b3JzID0gNjM7CisgICAgICAgIGRldi0+Ymlvc19nZW9tLmhlYWRzID0gMjU1OworICAgICAgICBkZXYtPmJpb3NfZ2VvbS5jeWxpbmRlcnMKKyAgICAgICAgICAgICAgICA9IGRldi0+bGVuZ3RoIC8gKDYzICogMjU1KTsKKworICAgICAgICAvKiBGSVhNRTogd2hhdCBzaG91bGQgd2UgcHV0IGhlcmU/ICAoVE9ETzogZGlzY3VzcyBvbiBsaW51eC1rZXJuZWwpICovCisgICAgICAgIGlmICghaW9jdGwgKGFyY2hfc3BlY2lmaWMtPmZkLCBIRElPX0dFVEdFTywgJmdlb21ldHJ5KQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgZ2VvbWV0cnkuc2VjdG9ycyAmJiBnZW9tZXRyeS5oZWFkcykgeworICAgICAgICAgICAgICAgIGRldi0+aHdfZ2VvbS5zZWN0b3JzID0gZ2VvbWV0cnkuc2VjdG9yczsKKyAgICAgICAgICAgICAgICBkZXYtPmh3X2dlb20uaGVhZHMgPSBnZW9tZXRyeS5oZWFkczsKKyAgICAgICAgICAgICAgICBkZXYtPmh3X2dlb20uY3lsaW5kZXJzCisgICAgICAgICAgICAgICAgICAgICAgICA9IGRldi0+bGVuZ3RoIC8gKGRldi0+aHdfZ2VvbS5oZWFkcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGRldi0+aHdfZ2VvbS5zZWN0b3JzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBkZXYtPmh3X2dlb20gPSBkZXYtPmJpb3NfZ2VvbTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAxOworfQorCitzdGF0aWMgY2hhcioKK3N0cmlwX25hbWUoY2hhciogc3RyKQoreworICAgICAgICBpbnQgICAgIGk7CisgICAgICAgIGludCAgICAgZW5kID0gMDsKKworICAgICAgICBmb3IgKGkgPSAwOyBzdHJbaV0gIT0gMDsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKCFpc3NwYWNlIChzdHJbaV0pCisgICAgICAgICAgICAgICAgICAgIHx8IChpc3NwYWNlIChzdHJbaV0pICYmICFpc3NwYWNlIChzdHJbaSsxXSkgJiYgc3RyW2krMV0pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHIgW2VuZF0gPSBzdHJbaV07CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQrKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgc3RyW2VuZF0gPSAwOworICAgICAgICByZXR1cm4gc3RyZHVwIChzdHIpOworfQorCitzdGF0aWMgaW50Citpbml0X2lkZSAoUGVkRGV2aWNlKiBkZXYpCit7CisgICAgICAgIExpbnV4U3BlY2lmaWMqICAgICAgICAgIGFyY2hfc3BlY2lmaWMgPSBMSU5VWF9TUEVDSUZJQyAoZGV2KTsKKyAgICAgICAgc3RydWN0IHN0YXQgICAgICAgICAgICAgZGV2X3N0YXQ7CisgICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgIGRldl9tYWpvcjsKKyAgICAgICAgc3RydWN0IGhkX2RyaXZlaWQgICAgICAgaGRpOworICAgICAgICBQZWRFeGNlcHRpb25PcHRpb24gICAgICBleF9zdGF0dXM7CisgICAgICAgIGNoYXIgICAgICAgICAgICAgICAgICAgIGhkaV9idWZbNDFdOworICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICBzZWN0b3JfbXVsdGlwbGllciA9IDA7CisgICAgICAgIAorICAgICAgICBpZiAoIV9kZXZpY2Vfc3RhdCAoZGV2LCAmZGV2X3N0YXQpKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAgZGV2X21ham9yID0gbWFqb3IgKGRldl9zdGF0LnN0X3JkZXYpOworCisgICAgICAgIGlmICghcGVkX2RldmljZV9vcGVuIChkZXYpKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAgaWYgKGlvY3RsIChhcmNoX3NwZWNpZmljLT5mZCwgSERJT19HRVRfSURFTlRJVFksICZoZGkpKSB7CisgICAgICAgICAgICAgICAgZXhfc3RhdHVzID0gcGVkX2V4Y2VwdGlvbl90aHJvdyAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBFRF9FWENFUFRJT05fV0FSTklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEVEX0VYQ0VQVElPTl9JR05PUkVfQ0FOQ0VMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJDb3VsZCBub3QgZ2V0IGlkZW50aXR5IG9mIGRldmljZSAlcyAtICVzIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldi0+cGF0aCwgc3RyZXJyb3IgKGVycm5vKSk7CisgICAgICAgICAgICAgICAgc3dpdGNoIChleF9zdGF0dXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgUEVEX0VYQ0VQVElPTl9DQU5DRUw6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JfY2xvc2VfZGV2OworCisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFBFRF9FWENFUFRJT05fVU5IQU5ETEVEOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWRfZXhjZXB0aW9uX2NhdGNoICgpOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBQRURfRVhDRVBUSU9OX0lHTk9SRToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2LT5tb2RlbCA9IHN0cmR1cChfKCJHZW5lcmljIElERSIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQRURfQVNTRVJUICgwLCAodm9pZCkgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvKiBoZGkubW9kZWwgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgTlVMTCB0ZXJtaW5hdGVkICovCisgICAgICAgICAgICAgICAgbWVtY3B5IChoZGlfYnVmLCBoZGkubW9kZWwsIDQwKTsKKyAgICAgICAgICAgICAgICBoZGlfYnVmWzQwXSA9ICdcMCc7CisgICAgICAgICAgICAgICAgZGV2LT5tb2RlbCA9IHN0cmlwX25hbWUgKGhkaV9idWYpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICghaGRpLmF0YTdfc2VjdGluZm8udmFsaWQxICYmIGhkaS5hdGE3X3NlY3RpbmZvLnZhbGlkMikKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rvcl9tdWx0aXBsaWVyID0gaGRpLmF0YTdfc2VjdGluZm8ubXVsdGlwbGllcjsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0b3JfbXVsdGlwbGllciA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoc2VjdG9yX211bHRpcGxpZXIgIT0gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZXhfc3RhdHVzID0gcGVkX2V4Y2VwdGlvbl90aHJvdyAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBFRF9FWENFUFRJT05fV0FSTklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEVEX0VYQ0VQVElPTl9JR05PUkVfQ0FOQ0VMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJEZXZpY2UgJXMgaGFzIG11bHRpcGxlICglZCkgbG9naWNhbCBzZWN0b3JzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGVyIHBoeXNpY2FsIHNlY3Rvci5cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiR05VIFBhcnRlZCBzdXBwb3J0cyB0aGlzIEVYUEVSSU1FTlRBTExZIGZvciAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvbWUgc3BlY2lhbCBkaXNrIGxhYmVsL2ZpbGUgc3lzdGVtICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tYmluYXRpb25zLCBlLmcuIEdQVCBhbmQgZXh0Mi8zLlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGVhc2UgY29uc3VsdCB0aGUgd2ViIHNpdGUgZm9yIHVwLXRvLWRhdGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbmZvcm1hdGlvbi4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2LT5wYXRoLCBzZWN0b3JfbXVsdGlwbGllcik7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZXhfc3RhdHVzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgUEVEX0VYQ0VQVElPTl9DQU5DRUw6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcl9jbG9zZV9kZXY7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBQRURfRVhDRVBUSU9OX1VOSEFORExFRDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWRfZXhjZXB0aW9uX2NhdGNoICgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFBFRF9FWENFUFRJT05fSUdOT1JFOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBFRF9BU1NFUlQgKDAsICh2b2lkKSAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLyogWFhYIHNlY3Rvcl9zaXplIGhhcyBub3QgYmVlbiBzZXQgeWV0ISAqLworICAgICAgICAgICAgICAgIC8qIGRldi0+cGh5c19zZWN0b3Jfc2l6ZSA9IGRldi0+c2VjdG9yX3NpemUKKyAgICAgICAgICAgICAgICAgICAqIHNlY3Rvcl9tdWx0aXBsaWVyOyovCisgICAgICAgICAgICAgICAgZGV2LT5waHlzX3NlY3Rvcl9zaXplID0gUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIV9kZXZpY2VfcHJvYmVfZ2VvbWV0cnkgKGRldikpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcl9jbG9zZV9kZXY7CisKKyAgICAgICAgcGVkX2RldmljZV9jbG9zZSAoZGV2KTsKKyAgICAgICAgcmV0dXJuIDE7CisKK2Vycm9yX2Nsb3NlX2RldjoKKyAgICAgICAgcGVkX2RldmljZV9jbG9zZSAoZGV2KTsKK2Vycm9yOgorICAgICAgICByZXR1cm4gMDsKK30KKworLyogVGhpcyBmdW5jdGlvbiByZWFkcyB0aGUgL3N5cyBlbnRyeSBuYW1lZCAiZmlsZSIgZm9yIGRldmljZSAiZGV2Ii4gKi8KK3N0YXRpYyBjaGFyICoKK3JlYWRfZGV2aWNlX3N5c2ZzX2ZpbGUgKFBlZERldmljZSAqZGV2LCBjb25zdCBjaGFyICpmaWxlKQoreworICAgICAgICBGSUxFICpmOworICAgICAgICBjaGFyIG5hbWVfYnVmWzEyOF07CisgICAgICAgIGNoYXIgYnVmWzI1Nl07CisKKyAgICAgICAgc25wcmludGYgKG5hbWVfYnVmLCAxMjcsICIvc3lzL2Jsb2NrLyVzL2RldmljZS8lcyIsCisgICAgICAgICAgICAgICAgICBiYXNlbmFtZSAoZGV2LT5wYXRoKSwgZmlsZSk7CisKKyAgICAgICAgaWYgKChmID0gZm9wZW4gKG5hbWVfYnVmLCAiciIpKSA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworCisgICAgICAgIGlmIChmZ2V0cyAoYnVmLCAyNTUsIGYpID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAgICAgZmNsb3NlIChmKTsKKyAgICAgICAgcmV0dXJuIHN0cmlwX25hbWUgKGJ1Zik7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gc2VuZHMgYSBxdWVyeSB0byBhIFNDU0kgZGV2aWNlIGZvciB2ZW5kb3IgYW5kIHByb2R1Y3QKKyAqIGluZm9ybWF0aW9uLiAgSXQgdXNlcyB0aGUgZGVwcmVjYXRlZCBTQ1NJX0lPQ1RMX1NFTkRfQ09NTUFORCB0bworICogaXNzdWUgdGhpcyBxdWVyeS4KKyAqLworc3RhdGljIGludAorc2NzaV9xdWVyeV9wcm9kdWN0X2luZm8gKFBlZERldmljZSogZGV2LCBjaGFyICoqdmVuZG9yLCBjaGFyICoqcHJvZHVjdCkKK3sKKyAgICAgICAgLyogVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lZCBieSB0aGUgU0NTSS0yIHNwZWNpZmljYXRpb24uICovCisgICAgICAgIHR5cGVkZWYgc3RydWN0IF9zY3NpX2lucXVpcnlfY21kCisgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1aW50OF90IG9wOworICAgICAgICAgICAgICAgIHVpbnQ4X3QgbHVuOyAgICAgICAgICAvKiBiaXRzIDUtNyBkZW5vdGUgdGhlIExVTiAqLworICAgICAgICAgICAgICAgIHVpbnQ4X3QgcGFnZV9jb2RlOworICAgICAgICAgICAgICAgIHVpbnQ4X3QgcmVzZXJ2ZWQ7CisgICAgICAgICAgICAgICAgdWludDhfdCBhbGxvY19sZW5ndGg7CisgICAgICAgICAgICAgICAgdWludDhfdCBjb250cm9sOworICAgICAgICB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHNjc2lfaW5xdWlyeV9jbWRfdDsKKworICAgICAgICB0eXBlZGVmIHN0cnVjdCBfc2NzaV9pbnF1aXJ5X2RhdGEKKyAgICAgICAgeworICAgICAgICAgICAgICAgIHVpbnQ4X3QgcGVyaXBoZXJhbF9pbmZvOworICAgICAgICAgICAgICAgIHVpbnQ4X3QgZGV2aWNlX2luZm87CisgICAgICAgICAgICAgICAgdWludDhfdCB2ZXJzaW9uX2luZm87CisgICAgICAgICAgICAgICAgdWludDhfdCBfZmllbGQxOworICAgICAgICAgICAgICAgIHVpbnQ4X3QgYWRkaXRpb25hbF9sZW5ndGg7CisgICAgICAgICAgICAgICAgdWludDhfdCBfcmVzZXJ2ZWQxOworICAgICAgICAgICAgICAgIHVpbnQ4X3QgX3Jlc2VydmVkMjsKKyAgICAgICAgICAgICAgICB1aW50OF90IF9maWVsZDI7CisgICAgICAgICAgICAgICAgdWludDhfdCB2ZW5kb3JfaWRbOF07CisgICAgICAgICAgICAgICAgdWludDhfdCBwcm9kdWN0X2lkWzE2XTsKKyAgICAgICAgICAgICAgICB1aW50OF90IHByb2R1Y3RfcmV2aXNpb25bNF07CisgICAgICAgICAgICAgICAgdWludDhfdCB2ZW5kb3Jfc3BlY2lmaWNbMjBdOworICAgICAgICAgICAgICAgIHVpbnQ4X3QgX3Jlc2VydmVkM1s0MF07CisgICAgICAgIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgc2NzaV9pbnF1aXJ5X2RhdGFfdDsKKworICAgICAgICBzdHJ1Y3Qgc2NzaV9hcmcKKyAgICAgICAgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbmxlbjsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgb3V0bGVuOworCisgICAgICAgICAgICAgICAgdW5pb24gYXJnX2RhdGEKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBzY3NpX2lucXVpcnlfZGF0YV90IG91dDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjc2lfaW5xdWlyeV9jbWRfdCAgaW47CisgICAgICAgICAgICAgICAgfSBkYXRhOworICAgICAgICB9IGFyZzsKKworICAgICAgICBMaW51eFNwZWNpZmljKiBhcmNoX3NwZWNpZmljID0gTElOVVhfU1BFQ0lGSUMgKGRldik7CisgICAgICAgIGNoYXIgICAgYnVmWzMyXTsKKworICAgICAgICAqdmVuZG9yID0gTlVMTDsKKyAgICAgICAgKnByb2R1Y3QgPSBOVUxMOworCisgICAgICAgIG1lbXNldCAoJmFyZywgMHgwMCwgc2l6ZW9mKHN0cnVjdCBzY3NpX2FyZykpOworICAgICAgICBhcmcuaW5sZW4gID0gMDsKKyAgICAgICAgYXJnLm91dGxlbiA9IHNpemVvZihzY3NpX2lucXVpcnlfZGF0YV90KTsKKyAgICAgICAgYXJnLmRhdGEuaW4ub3AgID0gSU5RVUlSWTsKKyAgICAgICAgYXJnLmRhdGEuaW4ubHVuID0gZGV2LT5ob3N0IDw8IDU7CisgICAgICAgIGFyZy5kYXRhLmluLmFsbG9jX2xlbmd0aCA9IHNpemVvZihzY3NpX2lucXVpcnlfZGF0YV90KTsKKyAgICAgICAgYXJnLmRhdGEuaW4ucGFnZV9jb2RlID0gMDsKKyAgICAgICAgYXJnLmRhdGEuaW4ucmVzZXJ2ZWQgPSAwOworICAgICAgICBhcmcuZGF0YS5pbi5jb250cm9sID0gMDsKKworICAgICAgICBpZiAoaW9jdGwgKGFyY2hfc3BlY2lmaWMtPmZkLCBTQ1NJX0lPQ1RMX1NFTkRfQ09NTUFORCwgJmFyZykgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIG1lbWNweSAoYnVmLCBhcmcuZGF0YS5vdXQudmVuZG9yX2lkLCA4KTsKKyAgICAgICAgYnVmWzhdID0gJ1wwJzsKKyAgICAgICAgKnZlbmRvciA9IHN0cmlwX25hbWUgKGJ1Zik7CisKKyAgICAgICAgbWVtY3B5IChidWYsIGFyZy5kYXRhLm91dC5wcm9kdWN0X2lkLCAxNik7CisgICAgICAgIGJ1ZlsxNl0gPSAnXDAnOworICAgICAgICAqcHJvZHVjdCA9IHN0cmlwX25hbWUgKGJ1Zik7CisKKyAgICAgICAgcmV0dXJuIDE7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gcHJvdmlkZXMgdGhlIHZlbmRvciBhbmQgcHJvZHVjdCBuYW1lIGZvciBhIFNDU0kgZGV2aWNlLgorICogSXQgc3VwcG9ydHMgYm90aCB0aGUgbW9kZXJuIC9zeXMgaW50ZXJmYWNlIGFuZCBkaXJlY3QgcXVlcmllcworICogdmlhIHRoZSBkZXByZWNhdGVkIGlvY3RsLCBTQ1NJX0lPQ1RMX1NFTkRfQ09NTUFORC4KKyAqLworc3RhdGljIGludAorc2NzaV9nZXRfcHJvZHVjdF9pbmZvIChQZWREZXZpY2UqIGRldiwgY2hhciAqKnZlbmRvciwgY2hhciAqKnByb2R1Y3QpCit7CisgICAgICAgICp2ZW5kb3IgPSByZWFkX2RldmljZV9zeXNmc19maWxlIChkZXYsICJ2ZW5kb3IiKTsKKyAgICAgICAgKnByb2R1Y3QgPSByZWFkX2RldmljZV9zeXNmc19maWxlIChkZXYsICJtb2RlbCIpOworICAgICAgICBpZiAoKnZlbmRvciAmJiAqcHJvZHVjdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKworICAgICAgICByZXR1cm4gc2NzaV9xdWVyeV9wcm9kdWN0X2luZm8gKGRldiwgdmVuZG9yLCBwcm9kdWN0KTsKK30KKworc3RhdGljIGludAoraW5pdF9zY3NpIChQZWREZXZpY2UqIGRldikKK3sKKyAgICAgICAgc3RydWN0IHNjc2lfaWRsdW4KKyAgICAgICAgeworICAgICAgICAgICAgICAgIHVpbnQzMl90IGRldl9pZDsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBob3N0X3VuaXF1ZV9pZDsKKyAgICAgICAgfSBpZGx1bjsKKworICAgICAgICBMaW51eFNwZWNpZmljKiBhcmNoX3NwZWNpZmljID0gTElOVVhfU1BFQ0lGSUMgKGRldik7CisgICAgICAgIGNoYXIqIHZlbmRvcjsKKyAgICAgICAgY2hhciogcHJvZHVjdDsKKworICAgICAgICBpZiAoIXBlZF9kZXZpY2Vfb3BlbiAoZGV2KSkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgIGlmIChpb2N0bCAoYXJjaF9zcGVjaWZpYy0+ZmQsIFNDU0lfSU9DVExfR0VUX0lETFVOLCAmaWRsdW4pIDwgMCkgeworICAgICAgICAgICAgICAgIGRldi0+aG9zdCA9IDA7CisgICAgICAgICAgICAgICAgZGV2LT5kaWQgPSAwOworICAgICAgICAgICAgICAgIGlmIChwZWRfZXhjZXB0aW9uX3Rocm93ICgKKyAgICAgICAgICAgICAgICAgICAgICAgIFBFRF9FWENFUFRJT05fRVJST1IsIFBFRF9FWENFUFRJT05fSUdOT1JFX0NBTkNFTCwKKyAgICAgICAgICAgICAgICAgICAgICAgIF8oIkVycm9yIGluaXRpYWxpc2luZyBTQ1NJIGRldmljZSAlcyAtICVzIiksCisgICAgICAgICAgICAgICAgICAgICAgICBkZXYtPnBhdGgsIHN0cmVycm9yIChlcnJubykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICE9IFBFRF9FWENFUFRJT05fSUdOT1JFKQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcl9jbG9zZV9kZXY7CisgICAgICAgICAgICAgICAgaWYgKCFfZGV2aWNlX3Byb2JlX2dlb21ldHJ5IChkZXYpKQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcl9jbG9zZV9kZXY7CisgICAgICAgICAgICAgICAgcGVkX2RldmljZV9jbG9zZSAoZGV2KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorCisgICAgICAgIGRldi0+aG9zdCA9IGlkbHVuLmhvc3RfdW5pcXVlX2lkOworICAgICAgICBkZXYtPmRpZCAgPSBpZGx1bi5kZXZfaWQ7CisKKyAgICAgICAgZGV2LT5tb2RlbCA9IChjaGFyKikgcGVkX21hbGxvYyAoOCArIDE2ICsgMik7CisgICAgICAgIGlmICghZGV2LT5tb2RlbCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yX2Nsb3NlX2RldjsKKworICAgICAgICBpZiAoc2NzaV9nZXRfcHJvZHVjdF9pbmZvIChkZXYsICZ2ZW5kb3IsICZwcm9kdWN0KSkgeworICAgICAgICAgICAgICAgIHNwcmludGYgKGRldi0+bW9kZWwsICIlLjhzICUuMTZzIiwgdmVuZG9yLCBwcm9kdWN0KTsKKyAgICAgICAgICAgICAgICBwZWRfZnJlZSAodmVuZG9yKTsKKyAgICAgICAgICAgICAgICBwZWRfZnJlZSAocHJvZHVjdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3RyY3B5IChkZXYtPm1vZGVsLCAiR2VuZXJpYyBTQ1NJIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIV9kZXZpY2VfcHJvYmVfZ2VvbWV0cnkgKGRldikpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcl9jbG9zZV9kZXY7CisKKyAgICAgICAgcGVkX2RldmljZV9jbG9zZSAoZGV2KTsKKyAgICAgICAgcmV0dXJuIDE7CisKK2Vycm9yX2Nsb3NlX2RldjoKKyAgICAgICAgcGVkX2RldmljZV9jbG9zZSAoZGV2KTsKK2Vycm9yOgorICAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAoraW5pdF9maWxlIChQZWREZXZpY2UqIGRldikKK3sKKyAgICAgICAgc3RydWN0IHN0YXQgICAgIGRldl9zdGF0OworIAorICAgICAgICBpZiAoIV9kZXZpY2Vfc3RhdCAoZGV2LCAmZGV2X3N0YXQpKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIGlmICghcGVkX2RldmljZV9vcGVuIChkZXYpKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAgaWYgKFNfSVNCTEsoZGV2X3N0YXQuc3RfbW9kZSkpCisgICAgICAgICAgICAgICAgZGV2LT5sZW5ndGggPSBfZGV2aWNlX2dldF9sZW5ndGggKGRldik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBkZXYtPmxlbmd0aCA9IGRldl9zdGF0LnN0X3NpemUgLyA1MTI7CisgICAgICAgIGlmIChkZXYtPmxlbmd0aCA8PSAwKSB7CisgICAgICAgICAgICAgICAgcGVkX2V4Y2VwdGlvbl90aHJvdyAoCisgICAgICAgICAgICAgICAgICAgICAgICBQRURfRVhDRVBUSU9OX0VSUk9SLAorICAgICAgICAgICAgICAgICAgICAgICAgUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisgICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUgZGV2aWNlICVzIGhhcyB6ZXJvIGxlbmd0aCwgYW5kIGNhbid0IHBvc3NpYmx5ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgInN0b3JlIGEgZmlsZSBzeXN0ZW0gb3IgcGFydGl0aW9uIHRhYmxlLiAgUGVyaGFwcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJ5b3Ugc2VsZWN0ZWQgdGhlIHdyb25nIGRldmljZT8iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRldi0+cGF0aCk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcl9jbG9zZV9kZXY7CisgICAgICAgIH0KKworICAgICAgICBwZWRfZGV2aWNlX2Nsb3NlIChkZXYpOworCisgICAgICAgIGRldi0+Ymlvc19nZW9tLmN5bGluZGVycyA9IGRldi0+bGVuZ3RoIC8gNCAvIDMyOworICAgICAgICBkZXYtPmJpb3NfZ2VvbS5oZWFkcyA9IDQ7CisgICAgICAgIGRldi0+Ymlvc19nZW9tLnNlY3RvcnMgPSAzMjsKKyAgICAgICAgZGV2LT5od19nZW9tID0gZGV2LT5iaW9zX2dlb207CisgICAgICAgIGRldi0+c2VjdG9yX3NpemUgPSBQRURfU0VDVE9SX1NJWkVfREVGQVVMVDsKKyAgICAgICAgZGV2LT5waHlzX3NlY3Rvcl9zaXplID0gUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQ7CisgICAgICAgIGRldi0+bW9kZWwgPSBzdHJkdXAgKCIiKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiAxOworICAgICAgICAKK2Vycm9yX2Nsb3NlX2RldjoKKyAgICAgICAgcGVkX2RldmljZV9jbG9zZSAoZGV2KTsKK2Vycm9yOgorICAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAoraW5pdF9kYXNkIChQZWREZXZpY2UqIGRldiwgY2hhciogbW9kZWxfbmFtZSkKK3sKKyAgICAgICAgc3RydWN0IHN0YXQgICAgICAgICAgICAgZGV2X3N0YXQ7CisgICAgICAgIHN0cnVjdCBoZF9nZW9tZXRyeSAgICAgIGdlbzsKKyAgICAgICAgY2hhciAqZXJyc3RyID0gMDsKKworICAgICAgICBpZiAoIV9kZXZpY2Vfc3RhdCAoZGV2LCAmZGV2X3N0YXQpKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAgaWYgKCFwZWRfZGV2aWNlX29wZW4gKGRldikpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICBMaW51eFNwZWNpZmljKiBhcmNoX3NwZWNpZmljID0gTElOVVhfU1BFQ0lGSUMgKGRldik7CisKKyAgICAgICAgUEVEX0FTU0VSVCAoU19JU0JMSyAoZGV2X3N0YXQuc3RfbW9kZSksIHJldHVybiAwKTsKKworICAgICAgICBfZGV2aWNlX3NldF9zZWN0b3Jfc2l6ZSAoZGV2KTsKKyAgICAgICAgaWYgKCFkZXYtPnNlY3Rvcl9zaXplKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JfY2xvc2VfZGV2OworCisgICAgICAgIGRldi0+bGVuZ3RoID0gX2RldmljZV9nZXRfbGVuZ3RoIChkZXYpOworICAgICAgICBpZiAoIWRldi0+bGVuZ3RoKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JfY2xvc2VfZGV2OworCisgICAgICAgIGlmICghaW9jdGwgKGFyY2hfc3BlY2lmaWMtPmZkLCBIRElPX0dFVEdFTywgJmdlbykpIHsKKyAgICAgICAgICAgICAgICBkZXYtPmh3X2dlb20uc2VjdG9ycyA9IGdlby5zZWN0b3JzOworICAgICAgICAgICAgICAgIGRldi0+aHdfZ2VvbS5oZWFkcyA9IGdlby5oZWFkczsKKyAgICAgICAgICAgICAgICBkZXYtPmh3X2dlb20uY3lsaW5kZXJzID0gZGV2LT5sZW5ndGgKKyAgICAgICAgICAgICAgICAgICAgICAgIC8gKGRldi0+aHdfZ2VvbS5oZWFkcyAqIGRldi0+aHdfZ2VvbS5zZWN0b3JzKQorICAgICAgICAgICAgICAgICAgICAgICAgLyAoZGV2LT5zZWN0b3Jfc2l6ZSAvIFBFRF9TRUNUT1JfU0laRV9ERUZBVUxUKTsKKyAgICAgICAgICAgICAgICBkZXYtPmJpb3NfZ2VvbSA9IGRldi0+aHdfZ2VvbTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBkZXYtPmJpb3NfZ2VvbS5zZWN0b3JzID0gMTI7CisgICAgICAgICAgICAgICAgZGV2LT5iaW9zX2dlb20uaGVhZHMgPSAxNTsKKyAgICAgICAgICAgICAgICBkZXYtPmJpb3NfZ2VvbS5jeWxpbmRlcnMgPSBkZXYtPmxlbmd0aAorICAgICAgICAgICAgICAgICAgICAgICAgLyAoZGV2LT5od19nZW9tLmhlYWRzICogZGV2LT5od19nZW9tLnNlY3RvcnMpCisgICAgICAgICAgICAgICAgICAgICAgICAvIChkZXYtPnNlY3Rvcl9zaXplIC8gUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQpOworICAgICAgICAgICAgICAgIGRldi0+aHdfZ2VvbSA9IGRldi0+Ymlvc19nZW9tOworICAgICAgICB9CisKKyAgICAgICAgZGV2LT5tb2RlbCA9IHN0cmR1cCAobW9kZWxfbmFtZSk7CisKKyAgICAgICAgcGVkX2RldmljZV9jbG9zZSAoZGV2KTsKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgICAgcGVkX2V4Y2VwdGlvbl90aHJvdyAoIFBFRF9FWENFUFRJT05fRVJST1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQRURfRVhDRVBUSU9OX0lHTk9SRV9DQU5DRUwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJzdHIgKTsKKworZXJyb3JfY2xvc2VfZGV2OgorICAgICAgICBwZWRfZGV2aWNlX2Nsb3NlIChkZXYpOworZXJyb3I6CisgICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Citpbml0X2dlbmVyaWMgKFBlZERldmljZSogZGV2LCBjaGFyKiBtb2RlbF9uYW1lKQoreworICAgICAgICBzdHJ1Y3Qgc3RhdCAgICAgICAgICAgICBkZXZfc3RhdDsKKyAgICAgICAgUGVkRXhjZXB0aW9uT3B0aW9uICAgICAgZXhfc3RhdHVzOworCisgICAgICAgIGlmICghX2RldmljZV9zdGF0IChkZXYsICZkZXZfc3RhdCkpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICBpZiAoIXBlZF9kZXZpY2Vfb3BlbiAoZGV2KSkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgIHBlZF9leGNlcHRpb25fZmV0Y2hfYWxsICgpOworICAgICAgICBpZiAoX2RldmljZV9wcm9iZV9nZW9tZXRyeSAoZGV2KSkgeworICAgICAgICAgICAgICAgIHBlZF9leGNlcHRpb25fbGVhdmVfYWxsICgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8qIGhhY2sgdG8gYWxsb3cgdXNlIG9mIGZpbGVzLCBmb3IgdGVzdGluZyAqLworICAgICAgICAgICAgICAgIHBlZF9leGNlcHRpb25fY2F0Y2ggKCk7CisgICAgICAgICAgICAgICAgcGVkX2V4Y2VwdGlvbl9sZWF2ZV9hbGwgKCk7CisKKyAgICAgICAgICAgICAgICBleF9zdGF0dXMgPSBwZWRfZXhjZXB0aW9uX3Rocm93ICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEVEX0VYQ0VQVElPTl9XQVJOSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQRURfRVhDRVBUSU9OX0lHTk9SRV9DQU5DRUwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlVuYWJsZSB0byBkZXRlcm1pbmUgZ2VvbWV0cnkgb2YgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZS9kZXZpY2UgJXMuICBZb3Ugc2hvdWxkIG5vdCB1c2UgUGFydGVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVubGVzcyB5b3UgUkVBTExZIGtub3cgd2hhdCB5b3UncmUgZG9pbmchIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldi0+cGF0aCk7CisgICAgICAgICAgICAgICAgc3dpdGNoIChleF9zdGF0dXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgUEVEX0VYQ0VQVElPTl9DQU5DRUw6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JfY2xvc2VfZGV2OworCisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFBFRF9FWENFUFRJT05fVU5IQU5ETEVEOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWRfZXhjZXB0aW9uX2NhdGNoICgpOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBQRURfRVhDRVBUSU9OX0lHTk9SRToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQRURfQVNTRVJUICgwLCAodm9pZCkgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8qIHdoYXQgc2hvdWxkIHdlIHN0aWNrIGluIGhlcmU/ICovCisgICAgICAgICAgICAgICAgZGV2LT5sZW5ndGggPSBkZXZfc3RhdC5zdF9zaXplIC8gUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQ7CisgICAgICAgICAgICAgICAgZGV2LT5iaW9zX2dlb20uY3lsaW5kZXJzID0gZGV2LT5sZW5ndGggLyA0IC8gMzI7CisgICAgICAgICAgICAgICAgZGV2LT5iaW9zX2dlb20uaGVhZHMgPSA0OworICAgICAgICAgICAgICAgIGRldi0+Ymlvc19nZW9tLnNlY3RvcnMgPSAzMjsKKyAgICAgICAgICAgICAgICBkZXYtPnNlY3Rvcl9zaXplID0gUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQ7CisgICAgICAgICAgICAgICAgZGV2LT5waHlzX3NlY3Rvcl9zaXplID0gUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQ7CisgICAgICAgIH0KKworICAgICAgICBkZXYtPm1vZGVsID0gc3RyZHVwIChtb2RlbF9uYW1lKTsKKworICAgICAgICBwZWRfZGV2aWNlX2Nsb3NlIChkZXYpOworICAgICAgICByZXR1cm4gMTsKKworZXJyb3JfY2xvc2VfZGV2OgorICAgICAgICBwZWRfZGV2aWNlX2Nsb3NlIChkZXYpOworZXJyb3I6CisgICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgUGVkRGV2aWNlKgorbGludXhfbmV3IChjb25zdCBjaGFyKiBwYXRoKQoreworICAgICAgICBQZWREZXZpY2UqICAgICAgZGV2OworCisgICAgICAgIFBFRF9BU1NFUlQgKHBhdGggIT0gTlVMTCwgcmV0dXJuIE5VTEwpOworCisgICAgICAgIGRldiA9IChQZWREZXZpY2UqKSBwZWRfbWFsbG9jIChzaXplb2YgKFBlZERldmljZSkpOworICAgICAgICBpZiAoIWRldikKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgIGRldi0+cGF0aCA9IHN0cmR1cCAocGF0aCk7CisgICAgICAgIGlmICghZGV2LT5wYXRoKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JfZnJlZV9kZXY7CisKKyAgICAgICAgZGV2LT5hcmNoX3NwZWNpZmljCisgICAgICAgICAgICAgICAgPSAoTGludXhTcGVjaWZpYyopIHBlZF9tYWxsb2MgKHNpemVvZiAoTGludXhTcGVjaWZpYykpOworICAgICAgICBpZiAoIWRldi0+YXJjaF9zcGVjaWZpYykKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yX2ZyZWVfcGF0aDsKKworICAgICAgICBkZXYtPm9wZW5fY291bnQgPSAwOworICAgICAgICBkZXYtPnJlYWRfb25seSA9IDA7CisgICAgICAgIGRldi0+ZXh0ZXJuYWxfbW9kZSA9IDA7CisgICAgICAgIGRldi0+ZGlydHkgPSAwOworICAgICAgICBkZXYtPmJvb3RfZGlydHkgPSAwOworCisgICAgICAgIGlmICghX2RldmljZV9wcm9iZV90eXBlIChkZXYpKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JfZnJlZV9hcmNoX3NwZWNpZmljOworCisgICAgICAgIHN3aXRjaCAoZGV2LT50eXBlKSB7CisgICAgICAgIGNhc2UgUEVEX0RFVklDRV9JREU6CisgICAgICAgICAgICAgICAgaWYgKCFpbml0X2lkZSAoZGV2KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JfZnJlZV9hcmNoX3NwZWNpZmljOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgUEVEX0RFVklDRV9TQ1NJOgorICAgICAgICAgICAgICAgIGlmICghaW5pdF9zY3NpIChkZXYpKQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcl9mcmVlX2FyY2hfc3BlY2lmaWM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBQRURfREVWSUNFX0RBQzk2MDoKKyAgICAgICAgICAgICAgICBpZiAoIWluaXRfZ2VuZXJpYyAoZGV2LCBfKCJEQUM5NjAgUkFJRCBjb250cm9sbGVyIikpKQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcl9mcmVlX2FyY2hfc3BlY2lmaWM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBQRURfREVWSUNFX1NYODoKKyAgICAgICAgICAgICAgICBpZiAoIWluaXRfZ2VuZXJpYyAoZGV2LCBfKCJQcm9taXNlIFNYOCBTQVRBIERldmljZSIpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JfZnJlZV9hcmNoX3NwZWNpZmljOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgUEVEX0RFVklDRV9EQVNEOgorICAgICAgICAgICAgICAgIGlmICghaW5pdF9kYXNkIChkZXYsIF8oIklCTSBTMzkwIERBU0QgZHJpdmUiKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yX2ZyZWVfYXJjaF9zcGVjaWZpYzsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFBFRF9ERVZJQ0VfVklPREFTRDoKKyAgICAgICAgICAgICAgICBpZiAoIWluaXRfZ2VuZXJpYyAoZGV2LCBfKCJJQk0gaVNlcmllcyBWaXJ0dWFsIERBU0QiKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yX2ZyZWVfYXJjaF9zcGVjaWZpYzsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFBFRF9ERVZJQ0VfQ1BRQVJSQVk6CisgICAgICAgICAgICAgICAgaWYgKCFpbml0X2dlbmVyaWMgKGRldiwgXygiQ29tcGFxIFNtYXJ0IEFycmF5IikpKQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcl9mcmVlX2FyY2hfc3BlY2lmaWM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBQRURfREVWSUNFX0FUQVJBSUQ6CisgICAgICAgICAgICAgICAgaWYgKCFpbml0X2dlbmVyaWMgKGRldiwgXygiQVRBUkFJRCBDb250cm9sbGVyIikpKQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcl9mcmVlX2FyY2hfc3BlY2lmaWM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBQRURfREVWSUNFX0kyTzoKKyAgICAgICAgICAgICAgICBpZiAoIWluaXRfZ2VuZXJpYyAoZGV2LCBfKCJJMk8gQ29udHJvbGxlciIpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JfZnJlZV9hcmNoX3NwZWNpZmljOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgUEVEX0RFVklDRV9VQkQ6CisgICAgICAgICAgICAgICAgaWYgKCFpbml0X2dlbmVyaWMgKGRldiwgXygiVXNlci1Nb2RlIExpbnV4IFVCRCIpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JfZnJlZV9hcmNoX3NwZWNpZmljOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgUEVEX0RFVklDRV9GSUxFOgorICAgICAgICAgICAgICAgIGlmICghaW5pdF9maWxlIChkZXYpKQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcl9mcmVlX2FyY2hfc3BlY2lmaWM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyNpZmRlZiBFTkFCTEVfREVWSUNFX01BUFBFUgorICAgICAgICBjYXNlIFBFRF9ERVZJQ0VfRE06CisgICAgICAgICAgICAgICAgaWYgKCFpbml0X2dlbmVyaWMgKGRldiwgXygiTGludXggZGV2aWNlLW1hcHBlciIpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JfZnJlZV9hcmNoX3NwZWNpZmljOworICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisKKyAgICAgICAgY2FzZSBQRURfREVWSUNFX1VOS05PV046CisgICAgICAgICAgICAgICAgaWYgKCFpbml0X2dlbmVyaWMgKGRldiwgXygiVW5rbm93biIpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JfZnJlZV9hcmNoX3NwZWNpZmljOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcGVkX2V4Y2VwdGlvbl90aHJvdyAoUEVEX0VYQ0VQVElPTl9OT19GRUFUVVJFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQRURfRVhDRVBUSU9OX0NBTkNFTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygicGVkX2RldmljZV9uZXcoKSAgVW5zdXBwb3J0ZWQgZGV2aWNlIHR5cGUiKSk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcl9mcmVlX2FyY2hfc3BlY2lmaWM7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGRldjsKKworZXJyb3JfZnJlZV9hcmNoX3NwZWNpZmljOgorICAgICAgICBwZWRfZnJlZSAoZGV2LT5hcmNoX3NwZWNpZmljKTsKK2Vycm9yX2ZyZWVfcGF0aDoKKyAgICAgICAgcGVkX2ZyZWUgKGRldi0+cGF0aCk7CitlcnJvcl9mcmVlX2RldjoKKyAgICAgICAgcGVkX2ZyZWUgKGRldik7CitlcnJvcjoKKyAgICAgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCitsaW51eF9kZXN0cm95IChQZWREZXZpY2UqIGRldikKK3sKKyAgICAgICAgcGVkX2ZyZWUgKGRldi0+YXJjaF9zcGVjaWZpYyk7CisgICAgICAgIHBlZF9mcmVlIChkZXYtPnBhdGgpOworICAgICAgICBwZWRfZnJlZSAoZGV2LT5tb2RlbCk7CisgICAgICAgIHBlZF9mcmVlIChkZXYpOworfQorCitzdGF0aWMgaW50CitsaW51eF9pc19idXN5IChQZWREZXZpY2UqIGRldikKK3sKKyAgICAgICAgaW50ICAgICBpOworICAgICAgICBjaGFyKiAgIHBhcnRfbmFtZTsKKworICAgICAgICBpZiAoX3BhcnRpdGlvbl9pc19tb3VudGVkX2J5X3BhdGggKGRldi0+cGF0aCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpbnQgc3RhdHVzOworCisgICAgICAgICAgICAgICAgcGFydF9uYW1lID0gX2RldmljZV9nZXRfcGFydF9wYXRoIChkZXYsIGkpOworICAgICAgICAgICAgICAgIGlmICghcGFydF9uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICAgICAgc3RhdHVzID0gX3BhcnRpdGlvbl9pc19tb3VudGVkX2J5X3BhdGggKHBhcnRfbmFtZSk7CisgICAgICAgICAgICAgICAgcGVkX2ZyZWUgKHBhcnRfbmFtZSk7CisKKyAgICAgICAgICAgICAgICBpZiAoc3RhdHVzKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gMDsKK30KKworLyogd2UgbmVlZCB0byBmbHVzaCB0aGUgbWFzdGVyIGRldmljZSwgYW5kIGFsbCB0aGUgcGFydGl0aW9uIGRldmljZXMsCisgKiBiZWNhdXNlIHRoZXJlIGlzIG5vIGNvaGVyZW5jeSBiZXR3ZWVuIHRoZSBjYWNoZXMuCisgKiBXZSBzaG91bGQgb25seSBmbHVzaCB1bm1vdW50ZWQgcGFydGl0aW9uIGRldmljZXMsIGJlY2F1c2U6CisgKiAgLSB0aGVyZSBpcyBuZXZlciBhIG5lZWQgdG8gZmx1c2ggdGhlbSAod2UncmUgbm90IGRvaW5nIElPIHRoZXJlKQorICogIC0gZmx1c2hpbmcgYSBkZXZpY2UgdGhhdCBpcyBtb3VudGVkIGNhdXNlcyB1bm5lY2Vzc2FyeSBJTywgYW5kIGNhbgorICogZXZlbiBzY3JldyBqb3VybmFsaW5nICYgZnJpZW5kcyB1cC4gIEV2ZW4gY2F1c2Ugb29wc2VuIQorICovCitzdGF0aWMgdm9pZAorX2ZsdXNoX2NhY2hlIChQZWREZXZpY2UqIGRldikKK3sKKyAgICAgICAgTGludXhTcGVjaWZpYyogIGFyY2hfc3BlY2lmaWMgPSBMSU5VWF9TUEVDSUZJQyAoZGV2KTsKKyAgICAgICAgaW50ICAgICAgICAgICAgIGk7CisKKyAgICAgICAgaWYgKGRldi0+cmVhZF9vbmx5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGV2LT5kaXJ0eSA9IDA7CisKKyAgICAgICAgaW9jdGwgKGFyY2hfc3BlY2lmaWMtPmZkLCBCTEtGTFNCVUYpOworCisgICAgICAgIGZvciAoaSA9IDE7IGkgPCAxNjsgaSsrKSB7CisgICAgICAgICAgICAgICAgY2hhciogICAgICAgICAgIG5hbWU7CisgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgIGZkOworCisgICAgICAgICAgICAgICAgbmFtZSA9IF9kZXZpY2VfZ2V0X3BhcnRfcGF0aCAoZGV2LCBpKTsKKyAgICAgICAgICAgICAgICBpZiAoIW5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBpZiAoIV9wYXJ0aXRpb25faXNfbW91bnRlZF9ieV9wYXRoIChuYW1lKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZmQgPSBvcGVuIChuYW1lLCBXUl9NT0RFLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmZCA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9jdGwgKGZkLCBCTEtGTFNCVUYpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZSAoZmQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwZWRfZnJlZSAobmFtZSk7CisgICAgICAgIH0KK30KKworc3RhdGljIGludAorbGludXhfb3BlbiAoUGVkRGV2aWNlKiBkZXYpCit7CisgICAgICAgIExpbnV4U3BlY2lmaWMqICBhcmNoX3NwZWNpZmljID0gTElOVVhfU1BFQ0lGSUMgKGRldik7CisKK3JldHJ5OgorICAgICAgICBhcmNoX3NwZWNpZmljLT5mZCA9IG9wZW4gKGRldi0+cGF0aCwgUldfTU9ERSk7CisKKyAgICAgICAgaWYgKGFyY2hfc3BlY2lmaWMtPmZkID09IC0xKSB7CisgICAgICAgICAgICAgICAgY2hhciogICByd19lcnJvcl9tc2cgPSBzdHJlcnJvciAoZXJybm8pOworCisgICAgICAgICAgICAgICAgYXJjaF9zcGVjaWZpYy0+ZmQgPSBvcGVuIChkZXYtPnBhdGgsIFJEX01PREUpOworCisgICAgICAgICAgICAgICAgaWYgKGFyY2hfc3BlY2lmaWMtPmZkID09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGVkX2V4Y2VwdGlvbl90aHJvdyAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBFRF9FWENFUFRJT05fRVJST1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBFRF9FWENFUFRJT05fUkVUUllfQ0FOQ0VMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJFcnJvciBvcGVuaW5nICVzOiAlcyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXYtPnBhdGgsIHN0cmVycm9yIChlcnJubykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIT0gUEVEX0VYQ0VQVElPTl9SRVRSWSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gcmV0cnk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBlZF9leGNlcHRpb25fdGhyb3cgKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQRURfRVhDRVBUSU9OX1dBUk5JTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBFRF9FWENFUFRJT05fT0ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlVuYWJsZSB0byBvcGVuICVzIHJlYWQtd3JpdGUgKCVzKS4gICVzIGhhcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJlZW4gb3BlbmVkIHJlYWQtb25seS4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2LT5wYXRoLCByd19lcnJvcl9tc2csIGRldi0+cGF0aCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXYtPnJlYWRfb25seSA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGRldi0+cmVhZF9vbmx5ID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIF9mbHVzaF9jYWNoZSAoZGV2KTsKKworICAgICAgICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorbGludXhfcmVmcmVzaF9vcGVuIChQZWREZXZpY2UqIGRldikKK3sKKyAgICAgICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2xpbnV4X2Nsb3NlIChQZWREZXZpY2UqIGRldikKK3sKKyAgICAgICAgTGludXhTcGVjaWZpYyogICAgICAgICAgYXJjaF9zcGVjaWZpYyA9IExJTlVYX1NQRUNJRklDIChkZXYpOworCisgICAgICAgIGlmIChkZXYtPmRpcnR5KQorICAgICAgICAgICAgICAgIF9mbHVzaF9jYWNoZSAoZGV2KTsKKyAgICAgICAgY2xvc2UgKGFyY2hfc3BlY2lmaWMtPmZkKTsKKyAgICAgICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2xpbnV4X3JlZnJlc2hfY2xvc2UgKFBlZERldmljZSogZGV2KQoreworICAgICAgICBpZiAoZGV2LT5kaXJ0eSkKKyAgICAgICAgICAgICAgICBfZmx1c2hfY2FjaGUgKGRldik7CisgICAgICAgIHJldHVybiAxOworfQorCisjaWYgU0laRU9GX09GRl9UIDwgOAorCitzdGF0aWMgX3N5c2NhbGw1KGludCxfbGxzZWVrLAorICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQsIGZkLAorICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nLCBvZmZzZXRfaGlnaCwKKyAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZywgb2Zmc2V0X2xvdywKKyAgICAgICAgICAgICAgICAgbG9mZl90KiwgcmVzdWx0LAorICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQsIG9yaWdpbikKKworbG9mZl90CitsbHNlZWsgKHVuc2lnbmVkIGludCBmZCwgbG9mZl90IG9mZnNldCwgdW5zaWduZWQgaW50IHdoZW5jZSkKK3sKKyAgICAgICAgbG9mZl90IHJlc3VsdDsKKyAgICAgICAgaW50IHJldHZhbDsKKworICAgICAgICByZXR2YWwgPSBfbGxzZWVrKGZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgbG9uZyBsb25nKW9mZnNldCkgPj4gMzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBsb25nIGxvbmcpb2Zmc2V0KSAmIDB4ZmZmZmZmZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgJnJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuY2UpOworICAgICAgICByZXR1cm4gKHJldHZhbD09LTEgPyAobG9mZl90KSByZXR2YWwgOiByZXN1bHQpOworfQorCisjZW5kaWYgLyogU0laRU9GX09GRl9UIDwgOCAqLworCitzdGF0aWMgaW50CitfZGV2aWNlX3NlZWsgKGNvbnN0IFBlZERldmljZSogZGV2LCBQZWRTZWN0b3Igc2VjdG9yKQoreworICAgICAgICBMaW51eFNwZWNpZmljKiAgYXJjaF9zcGVjaWZpYzsKKyAgICAgICAgCisgICAgICAgIFBFRF9BU1NFUlQgKGRldi0+c2VjdG9yX3NpemUgJSBQRURfU0VDVE9SX1NJWkVfREVGQVVMVCA9PSAwLCByZXR1cm4gMCk7CisgICAgICAgIFBFRF9BU1NFUlQgKGRldiAhPSBOVUxMLCByZXR1cm4gMCk7CisgICAgICAgIFBFRF9BU1NFUlQgKCFkZXYtPmV4dGVybmFsX21vZGUsIHJldHVybiAwKTsKKyAgICAgICAgCisgICAgICAgIGFyY2hfc3BlY2lmaWMgPSBMSU5VWF9TUEVDSUZJQyAoZGV2KTsKKworI2lmIFNJWkVPRl9PRkZfVCA8IDgKKyAgICAgICAgaWYgKHNpemVvZiAob2ZmX3QpIDwgOCkgeworICAgICAgICAgICAgICAgIGxvZmZfdCAgcG9zID0gKGxvZmZfdCkoc2VjdG9yICogZGV2LT5zZWN0b3Jfc2l6ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGxsc2VlayAoYXJjaF9zcGVjaWZpYy0+ZmQsIHBvcywgU0VFS19TRVQpID09IHBvczsKKyAgICAgICAgfSBlbHNlCisjZW5kaWYKKyAgICAgICAgeworICAgICAgICAgICAgICAgIG9mZl90ICAgcG9zID0gc2VjdG9yICogZGV2LT5zZWN0b3Jfc2l6ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbHNlZWsgKGFyY2hfc3BlY2lmaWMtPmZkLCBwb3MsIFNFRUtfU0VUKSA9PSBwb3M7CisgICAgICAgIH0KK30KKworc3RhdGljIGludAorX3JlYWRfbGFzdG9kZHNlY3RvciAoY29uc3QgUGVkRGV2aWNlKiBkZXYsIHZvaWQqIGJ1ZmZlcikKK3sKKyAgICAgICAgTGludXhTcGVjaWZpYyogICAgICAgICAgICAgICAgICBhcmNoX3NwZWNpZmljOworICAgICAgICBzdHJ1Y3QgYmxrZGV2X2lvY3RsX3BhcmFtICAgICAgIGlvY3RsX3BhcmFtOworCisgICAgICAgIFBFRF9BU1NFUlQoZGV2ICE9IE5VTEwsIHJldHVybiAwKTsKKyAgICAgICAgUEVEX0FTU0VSVChidWZmZXIgIT0gTlVMTCwgcmV0dXJuIDApOworICAgICAgICAKKyAgICAgICAgYXJjaF9zcGVjaWZpYyA9IExJTlVYX1NQRUNJRklDIChkZXYpOworCityZXRyeToKKyAgICAgICAgaW9jdGxfcGFyYW0uYmxvY2sgPSAwOyAvKiByZWFkIHRoZSBsYXN0IHNlY3RvciAqLworICAgICAgICBpb2N0bF9wYXJhbS5jb250ZW50X2xlbmd0aCA9IGRldi0+c2VjdG9yX3NpemU7CisgICAgICAgIGlvY3RsX3BhcmFtLmJsb2NrX2NvbnRlbnRzID0gYnVmZmVyOworICAgICAgICAKKyAgICAgICAgaWYgKGlvY3RsKGFyY2hfc3BlY2lmaWMtPmZkLCBCTEtHRVRMQVNUU0VDVCwgJmlvY3RsX3BhcmFtKSA9PSAtMSkgeworICAgICAgICAgICAgICAgIFBlZEV4Y2VwdGlvbk9wdGlvbiAgICAgIG9wdDsKKyAgICAgICAgICAgICAgICBvcHQgPSBwZWRfZXhjZXB0aW9uX3Rocm93ICgKKyAgICAgICAgICAgICAgICAgICAgICAgIFBFRF9FWENFUFRJT05fRVJST1IsCisgICAgICAgICAgICAgICAgICAgICAgICBQRURfRVhDRVBUSU9OX1JFVFJZX0lHTk9SRV9DQU5DRUwsCisgICAgICAgICAgICAgICAgICAgICAgICBfKCIlcyBkdXJpbmcgcmVhZCBvbiAlcyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RyZXJyb3IgKGVycm5vKSwgZGV2LT5wYXRoKTsKKworICAgICAgICAgICAgICAgIGlmIChvcHQgPT0gUEVEX0VYQ0VQVElPTl9DQU5DRUwpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICBpZiAob3B0ID09IFBFRF9FWENFUFRJT05fUkVUUlkpCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHJldHJ5OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2xpbnV4X3JlYWQgKGNvbnN0IFBlZERldmljZSogZGV2LCB2b2lkKiBidWZmZXIsIFBlZFNlY3RvciBzdGFydCwKKyAgICAgICAgICAgIFBlZFNlY3RvciBjb3VudCkKK3sKKyAgICAgICAgTGludXhTcGVjaWZpYyogICAgICAgICAgYXJjaF9zcGVjaWZpYyA9IExJTlVYX1NQRUNJRklDIChkZXYpOworICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICBzdGF0dXM7CisgICAgICAgIFBlZEV4Y2VwdGlvbk9wdGlvbiAgICAgIGV4X3N0YXR1czsKKyAgICAgICAgdm9pZCogICAgICAgICAgICAgICAgICAgZGlvYnVmOworCisgICAgICAgIFBFRF9BU1NFUlQgKGRldi0+c2VjdG9yX3NpemUgJSBQRURfU0VDVE9SX1NJWkVfREVGQVVMVCA9PSAwLCByZXR1cm4gMCk7CisKKyAgICAgICAgaWYgKF9nZXRfbGludXhfdmVyc2lvbigpIDwgS0VSTkVMX1ZFUlNJT04gKDIsNiwwKSkgeworICAgICAgICAgICAgICAgIC8qIEtsdWRnZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIHJlYWQvd3JpdGUgdGhlIGxhc3QKKyAgICAgICAgICAgICAgICAgICBibG9jayBvZiBhbiBvZGQtc2l6ZWQgZGlzaywgdW50aWwgTGludXggMi41Lngga2VybmVsIGZpeGVzLgorICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgaWYgKGRldi0+dHlwZSAhPSBQRURfREVWSUNFX0ZJTEUgJiYgKGRldi0+bGVuZ3RoICYgMSkKKyAgICAgICAgICAgICAgICAgICAgJiYgc3RhcnQgKyBjb3VudCAtIDEgPT0gZGV2LT5sZW5ndGggLSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBlZF9kZXZpY2VfcmVhZCAoZGV2LCBidWZmZXIsIHN0YXJ0LCBjb3VudCAtIDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIF9yZWFkX2xhc3RvZGRzZWN0b3IgKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldiwgKGNoYXIgKikgYnVmZmVyICsgKGNvdW50LTEpICogNTEyKTsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAgICAgIGlmIChfZGV2aWNlX3NlZWsgKGRldiwgc3RhcnQpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBleF9zdGF0dXMgPSBwZWRfZXhjZXB0aW9uX3Rocm93ICgKKyAgICAgICAgICAgICAgICAgICAgICAgIFBFRF9FWENFUFRJT05fRVJST1IsCisgICAgICAgICAgICAgICAgICAgICAgICBQRURfRVhDRVBUSU9OX1JFVFJZX0lHTk9SRV9DQU5DRUwsCisgICAgICAgICAgICAgICAgICAgICAgICBfKCIlcyBkdXJpbmcgc2VlayBmb3IgcmVhZCBvbiAlcyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RyZXJyb3IgKGVycm5vKSwgZGV2LT5wYXRoKTsKKworICAgICAgICAgICAgICAgIHN3aXRjaCAoZXhfc3RhdHVzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFBFRF9FWENFUFRJT05fSUdOT1JFOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBQRURfRVhDRVBUSU9OX1JFVFJZOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBQRURfRVhDRVBUSU9OX1VOSEFORExFRDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVkX2V4Y2VwdGlvbl9jYXRjaCAoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgUEVEX0VYQ0VQVElPTl9DQU5DRUw6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEVEX0FTU0VSVCAoMCwgKHZvaWQpIDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBzaXplX3QgcmVhZF9sZW5ndGggPSBjb3VudCAqIGRldi0+c2VjdG9yX3NpemU7CisgICAgICAgIGlmIChwb3NpeF9tZW1hbGlnbiAoJmRpb2J1ZiwgZGV2LT5zZWN0b3Jfc2l6ZSwgcmVhZF9sZW5ndGgpICE9IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSByZWFkIChhcmNoX3NwZWNpZmljLT5mZCwgZGlvYnVmLCByZWFkX2xlbmd0aCk7CisgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA+IDApCisgICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkoYnVmZmVyLCBkaW9idWYsIHN0YXR1cyk7CisgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBjb3VudCAqIGRldi0+c2VjdG9yX3NpemUpIGJyZWFrOworICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2xlbmd0aCAtPSBzdGF0dXM7CisgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSAoY2hhciAqKSBidWZmZXIgKyBzdGF0dXM7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBleF9zdGF0dXMgPSBwZWRfZXhjZXB0aW9uX3Rocm93ICgKKyAgICAgICAgICAgICAgICAgICAgICAgIFBFRF9FWENFUFRJT05fRVJST1IsCisgICAgICAgICAgICAgICAgICAgICAgICBQRURfRVhDRVBUSU9OX1JFVFJZX0lHTk9SRV9DQU5DRUwsCisgICAgICAgICAgICAgICAgICAgICAgICBfKCIlcyBkdXJpbmcgcmVhZCBvbiAlcyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RyZXJyb3IgKGVycm5vKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRldi0+cGF0aCk7CisKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGV4X3N0YXR1cykgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBQRURfRVhDRVBUSU9OX0lHTk9SRToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZShkaW9idWYpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBQRURfRVhDRVBUSU9OX1JFVFJZOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBQRURfRVhDRVBUSU9OX1VOSEFORExFRDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVkX2V4Y2VwdGlvbl9jYXRjaCAoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgUEVEX0VYQ0VQVElPTl9DQU5DRUw6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUoZGlvYnVmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQRURfQVNTRVJUICgwLCAodm9pZCkgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmcmVlKGRpb2J1Zik7CisKKyAgICAgICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK193cml0ZV9sYXN0b2Rkc2VjdG9yIChQZWREZXZpY2UqIGRldiwgY29uc3Qgdm9pZCogYnVmZmVyKQoreworICAgICAgICBMaW51eFNwZWNpZmljKiAgICAgICAgICAgICAgICAgIGFyY2hfc3BlY2lmaWM7CisgICAgICAgIHN0cnVjdCBibGtkZXZfaW9jdGxfcGFyYW0gICAgICAgaW9jdGxfcGFyYW07CisKKyAgICAgICAgUEVEX0FTU0VSVChkZXYgIT0gTlVMTCwgcmV0dXJuIDApOworICAgICAgICBQRURfQVNTRVJUKGJ1ZmZlciAhPSBOVUxMLCByZXR1cm4gMCk7CisgICAgICAgIAorICAgICAgICBhcmNoX3NwZWNpZmljID0gTElOVVhfU1BFQ0lGSUMgKGRldik7CisKK3JldHJ5OgorICAgICAgICBpb2N0bF9wYXJhbS5ibG9jayA9IDA7IC8qIHdyaXRlIHRoZSBsYXN0IHNlY3RvciAqLworICAgICAgICBpb2N0bF9wYXJhbS5jb250ZW50X2xlbmd0aCA9IGRldi0+c2VjdG9yX3NpemU7CisgICAgICAgIGlvY3RsX3BhcmFtLmJsb2NrX2NvbnRlbnRzID0gKHZvaWQqKSBidWZmZXI7CisgICAgICAgIAorICAgICAgICBpZiAoaW9jdGwoYXJjaF9zcGVjaWZpYy0+ZmQsIEJMS1NFVExBU1RTRUNULCAmaW9jdGxfcGFyYW0pID09IC0xKSB7CisgICAgICAgICAgICAgICAgUGVkRXhjZXB0aW9uT3B0aW9uICAgICAgb3B0OworICAgICAgICAgICAgICAgIG9wdCA9IHBlZF9leGNlcHRpb25fdGhyb3cgKAorICAgICAgICAgICAgICAgICAgICAgICAgUEVEX0VYQ0VQVElPTl9FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFBFRF9FWENFUFRJT05fUkVUUllfSUdOT1JFX0NBTkNFTCwKKyAgICAgICAgICAgICAgICAgICAgICAgIF8oIiVzIGR1cmluZyB3cml0ZSBvbiAlcyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RyZXJyb3IgKGVycm5vKSwgZGV2LT5wYXRoKTsKKworICAgICAgICAgICAgICAgIGlmIChvcHQgPT0gUEVEX0VYQ0VQVElPTl9DQU5DRUwpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICBpZiAob3B0ID09IFBFRF9FWENFUFRJT05fUkVUUlkpCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHJldHJ5OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2xpbnV4X3dyaXRlIChQZWREZXZpY2UqIGRldiwgY29uc3Qgdm9pZCogYnVmZmVyLCBQZWRTZWN0b3Igc3RhcnQsCisgICAgICAgICAgICAgUGVkU2VjdG9yIGNvdW50KQoreworICAgICAgICBMaW51eFNwZWNpZmljKiAgICAgICAgICBhcmNoX3NwZWNpZmljID0gTElOVVhfU1BFQ0lGSUMgKGRldik7CisgICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgIHN0YXR1czsKKyAgICAgICAgUGVkRXhjZXB0aW9uT3B0aW9uICAgICAgZXhfc3RhdHVzOworICAgICAgICBzaXplX3QgICAgICAgICAgICAgICAgICB3cml0ZV9sZW5ndGggPSBjb3VudCAqIGRldi0+c2VjdG9yX3NpemU7CisgICAgICAgIHZvaWQqICAgICAgICAgICAgICAgICAgIGRpb2J1ZjsKKyAgICAgICAgdm9pZCogICAgICAgICAgICAgICAgICAgZGlvYnVmX3N0YXJ0OworCisgICAgICAgIFBFRF9BU1NFUlQoZGV2LT5zZWN0b3Jfc2l6ZSAlIFBFRF9TRUNUT1JfU0laRV9ERUZBVUxUID09IDAsIHJldHVybiAwKTsKKworICAgICAgICBpZiAoZGV2LT5yZWFkX29ubHkpIHsKKyAgICAgICAgICAgICAgICBpZiAocGVkX2V4Y2VwdGlvbl90aHJvdyAoCisgICAgICAgICAgICAgICAgICAgICAgICBQRURfRVhDRVBUSU9OX0VSUk9SLAorICAgICAgICAgICAgICAgICAgICAgICAgUEVEX0VYQ0VQVElPTl9JR05PUkVfQ0FOQ0VMLAorICAgICAgICAgICAgICAgICAgICAgICAgXygiQ2FuJ3Qgd3JpdGUgdG8gJXMsIGJlY2F1c2UgaXQgaXMgb3BlbmVkIHJlYWQtb25seS4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRldi0+cGF0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIT0gUEVEX0VYQ0VQVElPTl9JR05PUkUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChfZ2V0X2xpbnV4X3ZlcnNpb24oKSA8IEtFUk5FTF9WRVJTSU9OICgyLDYsMCkpIHsKKyAgICAgICAgICAgICAgICAvKiBLbHVkZ2UuICBUaGlzIGlzIG5lY2Vzc2FyeSB0byByZWFkL3dyaXRlIHRoZSBsYXN0CisgICAgICAgICAgICAgICAgICAgYmxvY2sgb2YgYW4gb2RkLXNpemVkIGRpc2ssIHVudGlsIExpbnV4IDIuNS54IGtlcm5lbCBmaXhlcy4KKyAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGlmIChkZXYtPnR5cGUgIT0gUEVEX0RFVklDRV9GSUxFICYmIChkZXYtPmxlbmd0aCAmIDEpCisgICAgICAgICAgICAgICAgICAgICYmIHN0YXJ0ICsgY291bnQgLSAxID09IGRldi0+bGVuZ3RoIC0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwZWRfZGV2aWNlX3dyaXRlIChkZXYsIGJ1ZmZlciwgc3RhcnQsIGNvdW50IC0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgX3dyaXRlX2xhc3RvZGRzZWN0b3IgKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldiwgKGNoYXIqKSBidWZmZXIgKyAoY291bnQtMSkgKiA1MTIpOworICAgICAgICB9CisgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICAgaWYgKF9kZXZpY2Vfc2VlayAoZGV2LCBzdGFydCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGV4X3N0YXR1cyA9IHBlZF9leGNlcHRpb25fdGhyb3cgKAorICAgICAgICAgICAgICAgICAgICAgICAgUEVEX0VYQ0VQVElPTl9FUlJPUiwgUEVEX0VYQ0VQVElPTl9SRVRSWV9JR05PUkVfQ0FOQ0VMLAorICAgICAgICAgICAgICAgICAgICAgICAgXygiJXMgZHVyaW5nIHNlZWsgZm9yIHdyaXRlIG9uICVzIiksCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJlcnJvciAoZXJybm8pLCBkZXYtPnBhdGgpOworCisgICAgICAgICAgICAgICAgc3dpdGNoIChleF9zdGF0dXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgUEVEX0VYQ0VQVElPTl9JR05PUkU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOworCisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFBFRF9FWENFUFRJT05fUkVUUlk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFBFRF9FWENFUFRJT05fVU5IQU5ETEVEOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWRfZXhjZXB0aW9uX2NhdGNoICgpOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBQRURfRVhDRVBUSU9OX0NBTkNFTDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQRURfQVNTRVJUICgwLCAodm9pZCkgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisjaWZkZWYgUkVBRF9PTkxZCisgICAgICAgIHByaW50ZiAoInBlZF9kZXZpY2Vfd3JpdGUgKFwiJXNcIiwgJXAsICVkLCAlZClcbiIsCisgICAgICAgICAgICAgICAgZGV2LT5wYXRoLCBidWZmZXIsIChpbnQpIHN0YXJ0LCAoaW50KSBjb3VudCk7CisjZWxzZQorICAgICAgICBkZXYtPmRpcnR5ID0gMTsKKyAgICAgICAgaWYgKHBvc2l4X21lbWFsaWduKCZkaW9idWYsIFBFRF9TRUNUT1JfU0laRV9ERUZBVUxULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgKiBQRURfU0VDVE9SX1NJWkVfREVGQVVMVCkgIT0gMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgbWVtY3B5KGRpb2J1ZiwgYnVmZmVyLCBjb3VudCAqIFBFRF9TRUNUT1JfU0laRV9ERUZBVUxUKTsKKyAgICAgICAgZGlvYnVmX3N0YXJ0ID0gZGlvYnVmOworICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAgICAgIHN0YXR1cyA9IHdyaXRlIChhcmNoX3NwZWNpZmljLT5mZCwgZGlvYnVmLCB3cml0ZV9sZW5ndGgpOworICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gY291bnQgKiBkZXYtPnNlY3Rvcl9zaXplKSBicmVhazsKKyAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVfbGVuZ3RoIC09IHN0YXR1czsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpb2J1ZiA9IChjaGFyICopIGRpb2J1ZiArIHN0YXR1czsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGV4X3N0YXR1cyA9IHBlZF9leGNlcHRpb25fdGhyb3cgKAorICAgICAgICAgICAgICAgICAgICAgICAgUEVEX0VYQ0VQVElPTl9FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFBFRF9FWENFUFRJT05fUkVUUllfSUdOT1JFX0NBTkNFTCwKKyAgICAgICAgICAgICAgICAgICAgICAgIF8oIiVzIGR1cmluZyB3cml0ZSBvbiAlcyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RyZXJyb3IgKGVycm5vKSwgZGV2LT5wYXRoKTsKKworICAgICAgICAgICAgICAgIHN3aXRjaCAoZXhfc3RhdHVzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFBFRF9FWENFUFRJT05fSUdOT1JFOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlKGRpb2J1Zl9zdGFydCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOworCisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFBFRF9FWENFUFRJT05fUkVUUlk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFBFRF9FWENFUFRJT05fVU5IQU5ETEVEOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWRfZXhjZXB0aW9uX2NhdGNoICgpOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBQRURfRVhDRVBUSU9OX0NBTkNFTDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZShkaW9idWZfc3RhcnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBFRF9BU1NFUlQgKDAsICh2b2lkKSAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZyZWUoZGlvYnVmX3N0YXJ0KTsKKyNlbmRpZiAvKiAhUkVBRF9PTkxZICovCisgICAgICAgIHJldHVybiAxOworfQorCisvKiByZXR1cm5zIHRoZSBudW1iZXIgb2Ygc2VjdG9ycyB0aGF0IGFyZSBvay4KKyAqLworc3RhdGljIFBlZFNlY3RvcgorbGludXhfY2hlY2sgKFBlZERldmljZSogZGV2LCB2b2lkKiBidWZmZXIsIFBlZFNlY3RvciBzdGFydCwgUGVkU2VjdG9yIGNvdW50KQoreworICAgICAgICBMaW51eFNwZWNpZmljKiAgYXJjaF9zcGVjaWZpYyA9IExJTlVYX1NQRUNJRklDIChkZXYpOworICAgICAgICBQZWRTZWN0b3IgICAgICAgZG9uZSA9IDA7CisgICAgICAgIGludCAgICAgICAgICAgICBzdGF0dXM7CisgICAgICAgIHZvaWQqICAgICAgICAgICBkaW9idWY7CisKKyAgICAgICAgUEVEX0FTU0VSVChkZXYgIT0gTlVMTCwgcmV0dXJuIDApOworICAgICAgICAKKyAgICAgICAgaWYgKCFfZGV2aWNlX3NlZWsgKGRldiwgc3RhcnQpKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIGlmIChwb3NpeF9tZW1hbGlnbigmZGlvYnVmLCBQRURfU0VDVE9SX1NJWkVfREVGQVVMVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ICogUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQpICE9IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgZm9yIChkb25lID0gMDsgZG9uZSA8IGNvdW50OyBkb25lICs9IHN0YXR1cyAvIGRldi0+c2VjdG9yX3NpemUpIHsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSByZWFkIChhcmNoX3NwZWNpZmljLT5mZCwgZGlvYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaXplX3QpICgoY291bnQtZG9uZSkgKiBkZXYtPnNlY3Rvcl9zaXplKSk7CisgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA+IDApCisgICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkoYnVmZmVyLCBkaW9idWYsIHN0YXR1cyk7CisgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBmcmVlKGRpb2J1Zik7CisKKyAgICAgICAgcmV0dXJuIGRvbmU7Cit9CisKK3N0YXRpYyBpbnQKK19kb19mc3luYyAoUGVkRGV2aWNlKiBkZXYpCit7CisgICAgICAgIExpbnV4U3BlY2lmaWMqICAgICAgICAgIGFyY2hfc3BlY2lmaWMgPSBMSU5VWF9TUEVDSUZJQyAoZGV2KTsKKyAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOworICAgICAgICBQZWRFeGNlcHRpb25PcHRpb24gICAgICBleF9zdGF0dXM7CisKKyAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBmc3luYyAoYXJjaF9zcGVjaWZpYy0+ZmQpOworICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgPj0gMCkgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBleF9zdGF0dXMgPSBwZWRfZXhjZXB0aW9uX3Rocm93ICgKKyAgICAgICAgICAgICAgICAgICAgICAgIFBFRF9FWENFUFRJT05fRVJST1IsCisgICAgICAgICAgICAgICAgICAgICAgICBQRURfRVhDRVBUSU9OX1JFVFJZX0lHTk9SRV9DQU5DRUwsCisgICAgICAgICAgICAgICAgICAgICAgICBfKCIlcyBkdXJpbmcgd3JpdGUgb24gJXMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVycm9yIChlcnJubyksIGRldi0+cGF0aCk7CisKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGV4X3N0YXR1cykgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBQRURfRVhDRVBUSU9OX0lHTk9SRToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgUEVEX0VYQ0VQVElPTl9SRVRSWToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgUEVEX0VYQ0VQVElPTl9VTkhBTkRMRUQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZF9leGNlcHRpb25fY2F0Y2ggKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFBFRF9FWENFUFRJT05fQ0FOQ0VMOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBFRF9BU1NFUlQgKDAsICh2b2lkKSAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9IAorICAgICAgICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorbGludXhfc3luYyAoUGVkRGV2aWNlKiBkZXYpCit7CisgICAgICAgIFBFRF9BU1NFUlQgKGRldiAhPSBOVUxMLCByZXR1cm4gMCk7CisgICAgICAgIFBFRF9BU1NFUlQgKCFkZXYtPmV4dGVybmFsX21vZGUsIHJldHVybiAwKTsKKworICAgICAgICBpZiAoZGV2LT5yZWFkX29ubHkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGlmICghX2RvX2ZzeW5jIChkZXYpKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBfZmx1c2hfY2FjaGUgKGRldik7CisgICAgICAgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitsaW51eF9zeW5jX2Zhc3QgKFBlZERldmljZSogZGV2KQoreworICAgICAgICBQRURfQVNTRVJUIChkZXYgIT0gTlVMTCwgcmV0dXJuIDApOworICAgICAgICBQRURfQVNTRVJUICghZGV2LT5leHRlcm5hbF9tb2RlLCByZXR1cm4gMCk7CisKKyAgICAgICAgaWYgKGRldi0+cmVhZF9vbmx5KQorICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBpZiAoIV9kb19mc3luYyAoZGV2KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgLyogbm8gY2FjaGUgZmx1c2guLi4gKi8KKyAgICAgICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitfY29tcGFyZV9kaWdpdF9zdGF0ZSAoY2hhciBjaCwgaW50IG5lZWRfZGlnaXQpCit7CisgICAgICAgIHJldHVybiAhIWlzZGlnaXQgKGNoKSA9PSBuZWVkX2RpZ2l0OworfQorCisvKiBtYXRjaGVzIHRoZSByZWdleHAgIlteMC05XStbMC05XStbXjAtOV0rWzAtOV0rJCIuCisgKiBNb3RpdmF0aW9uOiBhY2NlcHQgZGV2aWNlcyBsb29raW5nIGxpa2UgL2Rldi9yZC9jMGQwLCBidXQKKyAqIG5vdCBsb29raW5nIGxpa2UgL2Rldi9oZGExIGFuZCAvZGV2L3JkL2MwZDBwMQorICovCitzdGF0aWMgaW50CitfbWF0Y2hfcmRfZGV2aWNlIChjb25zdCBjaGFyKiBuYW1lKQoreworICAgICAgICBjb25zdCBjaGFyKiBwb3M7CisgICAgICAgIGludCBzdGF0ZTsKKworICAgICAgICAvKiBleGNsdWRlIGRpcmVjdG9yeSBuYW1lcyBmcm9tIHRlc3QgKi8KKyAgICAgICAgcG9zID0gc3RycmNocihuYW1lLCAnLycpID86IG5hbWU7CisKKyAgICAgICAgLyogc3RhdGVzOgorICAgICAgICAgKiAgICAgIDAgICAgICAgbm9uLWRpZ2l0cworICAgICAgICAgKiAgICAgIDEgICAgICAgZGlnaXRzCisgICAgICAgICAqICAgICAgMiAgICAgICBub24tZGlnaXRzCisgICAgICAgICAqICAgICAgMyAgICAgICBkaWdpdHMKKyAgICAgICAgICovCisgICAgICAgIGZvciAoc3RhdGUgPSAwOyBzdGF0ZSA8IDQ7IHN0YXRlKyspIHsKKyAgICAgICAgICAgICAgICBpbnQgd2FudF9kaWdpdHMgPSAoc3RhdGUgJSAyID09IDEpOworICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKnBvcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIV9jb21wYXJlX2RpZ2l0X3N0YXRlICgqcG9zLCB3YW50X2RpZ2l0cykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgICAgICAgICAgcG9zKys7CisgICAgICAgICAgICAgICAgfSB3aGlsZSAoX2NvbXBhcmVfZGlnaXRfc3RhdGUgKCpwb3MsIHdhbnRfZGlnaXRzKSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gKnBvcyA9PSAwOworfQorCitzdGF0aWMgaW50CitfcHJvYmVfcHJvY19wYXJ0aXRpb25zICgpCit7CisgICAgICAgIEZJTEUqICAgICAgICAgICBwcm9jX3BhcnRfZmlsZTsKKyAgICAgICAgaW50ICAgICAgICAgICAgIG1ham9yLCBtaW5vciwgc2l6ZTsKKyAgICAgICAgY2hhciAgICAgICAgICAgIGJ1ZiBbNTEyXTsKKyAgICAgICAgY2hhciAgICAgICAgICAgIHBhcnRfbmFtZSBbMjU2XTsKKyAgICAgICAgY2hhciAgICAgICAgICAgIGRldl9uYW1lIFsyNTZdOworCisgICAgICAgIHByb2NfcGFydF9maWxlID0gZm9wZW4gKCIvcHJvYy9wYXJ0aXRpb25zIiwgInIiKTsKKyAgICAgICAgaWYgKCFwcm9jX3BhcnRfZmlsZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBpZiAoZmdldHMgKGJ1ZiwgMjU2LCBwcm9jX3BhcnRfZmlsZSkgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBpZiAoZmdldHMgKGJ1ZiwgMjU2LCBwcm9jX3BhcnRfZmlsZSkgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICB3aGlsZSAoZmdldHMgKGJ1ZiwgNTEyLCBwcm9jX3BhcnRfZmlsZSkKKyAgICAgICAgICAgICAgICYmIHNzY2FuZiAoYnVmLCAiJWQgJWQgJWQgJTI1NXMiLCAmbWFqb3IsICZtaW5vciwgJnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRfbmFtZSkgPT0gNCkgeworICAgICAgICAgICAgICAgIC8qIEhldXJpc3RpYyBmb3IgdGVsbGluZyBwYXJ0aXRpb25zIGFuZCBkZXZpY2VzIGFwYXJ0CisgICAgICAgICAgICAgICAgICogUHJvYmFibHkgbmVlZHMgdG8gYmUgaW1wcm92ZWQKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBpZiAoIV9tYXRjaF9yZF9kZXZpY2UgKHBhcnRfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgJiYgaXNkaWdpdCAocGFydF9uYW1lIFtzdHJsZW4gKHBhcnRfbmFtZSkgLSAxXSkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIHN0cmNweSAoZGV2X25hbWUsICIvZGV2LyIpOworICAgICAgICAgICAgICAgIHN0cmNhdCAoZGV2X25hbWUsIHBhcnRfbmFtZSk7CisgICAgICAgICAgICAgICAgX3BlZF9kZXZpY2VfcHJvYmUgKGRldl9uYW1lKTsKKyAgICAgICAgfQorCisgICAgICAgIGZjbG9zZSAocHJvY19wYXJ0X2ZpbGUpOworICAgICAgICByZXR1cm4gMTsKK30KKworc3RydWN0IF9lbnRyeSB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlzaXplX3QgbGVuOworfTsKKworc3RhdGljIGludAorX3NraXBfZW50cnkgKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IF9lbnRyeSAqaTsKKwlzdGF0aWMgc3RydWN0IF9lbnRyeSBlbnRyaWVzW10gPSB7CisJCXsgIi4iLAkJc2l6ZW9mICgiLiIpIC0gMQl9LAorCQl7ICIuLiIsCQlzaXplb2YgKCIuLiIpIC0gMQl9LAorCQl7ICJkbS0iLAlzaXplb2YgKCJkbS0iKSAtIDEJfSwKKwkJeyAibG9vcCIsCXNpemVvZiAoImxvb3AiKSAtIDEJfSwKKwkJeyAicmFtIiwJc2l6ZW9mICgicmFtIikgLSAxCX0sCisJCXsgMCwgMCB9LAorCX07CisKKwlmb3IgKGkgPSBlbnRyaWVzOyBpLT5uYW1lICE9IDA7IGkrKykgeworCQlpZiAoc3RybmNtcCAobmFtZSwgaS0+bmFtZSwgaS0+bGVuKSA9PSAwKQorCQkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK19wcm9iZV9zeXNfYmxvY2sgKCkKK3sKKwlESVIgKmJsb2NrZGlyOworCXN0cnVjdCBkaXJlbnQgKmRpcmVudDsKKwljaGFyIGRldl9uYW1lIFsyNTZdOworCWNoYXIgKnB0cjsKKworCWlmICghKGJsb2NrZGlyID0gb3BlbmRpciAoIi9zeXMvYmxvY2siKSkpCisJCXJldHVybiAwOworCXdoaWxlICgoZGlyZW50ID0gcmVhZGRpciAoYmxvY2tkaXIpKSkgeworCQlpZiAoX3NraXBfZW50cnkgKGRpcmVudC0+ZF9uYW1lKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChzdHJsZW4gKGRpcmVudC0+ZF9uYW1lKSA+IHNpemVvZiAoZGV2X25hbWUpIC0gNikKKwkJCWNvbnRpbnVlOyAvKiBkZXZpY2UgbmFtZSB0b28gbG9uZyEgKi8KKworCQlzdHJjcHkgKGRldl9uYW1lLCAiL2Rldi8iKTsKKwkJc3RyY2F0IChkZXZfbmFtZSwgZGlyZW50LT5kX25hbWUpOworCQkvKiBpbiAvc3lzL2Jsb2NrLCAnLydzIGFyZSByZXBsYWNlZCB3aXRoICchJyBvciAnLicgKi8KKwkJZm9yIChwdHIgPSBkZXZfbmFtZTsgKnB0ciAhPSAnXDAnOyBwdHIrKykgeworCQkJaWYgKCpwdHIgPT0gJyEnIHx8ICpwdHIgPT0gJy4nKQorCQkJCSpwdHIgPSAnLyc7CisJCX0KKwkJX3BlZF9kZXZpY2VfcHJvYmUgKGRldl9uYW1lKTsKKwl9CisJCisJY2xvc2VkaXIgKGJsb2NrZGlyKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludAorX3Byb2JlX3N0YW5kYXJkX2RldmljZXMgKCkKK3sKKyAgICAgICAgX3BlZF9kZXZpY2VfcHJvYmUgKCIvZGV2L2hkYSIpOworICAgICAgICBfcGVkX2RldmljZV9wcm9iZSAoIi9kZXYvaGRiIik7CisgICAgICAgIF9wZWRfZGV2aWNlX3Byb2JlICgiL2Rldi9oZGMiKTsKKyAgICAgICAgX3BlZF9kZXZpY2VfcHJvYmUgKCIvZGV2L2hkZCIpOworICAgICAgICBfcGVkX2RldmljZV9wcm9iZSAoIi9kZXYvaGRlIik7CisgICAgICAgIF9wZWRfZGV2aWNlX3Byb2JlICgiL2Rldi9oZGYiKTsKKyAgICAgICAgX3BlZF9kZXZpY2VfcHJvYmUgKCIvZGV2L2hkZyIpOworICAgICAgICBfcGVkX2RldmljZV9wcm9iZSAoIi9kZXYvaGRoIik7CisKKyAgICAgICAgX3BlZF9kZXZpY2VfcHJvYmUgKCIvZGV2L3NkYSIpOworICAgICAgICBfcGVkX2RldmljZV9wcm9iZSAoIi9kZXYvc2RiIik7CisgICAgICAgIF9wZWRfZGV2aWNlX3Byb2JlICgiL2Rldi9zZGMiKTsKKyAgICAgICAgX3BlZF9kZXZpY2VfcHJvYmUgKCIvZGV2L3NkZCIpOworICAgICAgICBfcGVkX2RldmljZV9wcm9iZSAoIi9kZXYvc2RlIik7CisgICAgICAgIF9wZWRfZGV2aWNlX3Byb2JlICgiL2Rldi9zZGYiKTsKKworICAgICAgICByZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQKK2xpbnV4X3Byb2JlX2FsbCAoKQoreworICAgICAgICAvKiB3ZSBzaG91bGQgcHJvYmUgdGhlIHN0YW5kYXJkIGRldnMgdG9vLCBldmVuIHdpdGggL3Byb2MvcGFydGl0aW9ucywKKyAgICAgICAgICogYmVjYXVzZSAvcHJvYy9wYXJ0aXRpb25zIG1pZ2h0IHJldHVybiBkZXZmcyBzdHVmZiwgYW5kIHdlIG1pZ2h0IG5vdAorICAgICAgICAgKiBoYXZlIGRldmZzIGF2YWlsYWJsZQorICAgICAgICAgKi8KKyAgICAgICAgX3Byb2JlX3N0YW5kYXJkX2RldmljZXMgKCk7CisKKyAJLyogL3N5cy9ibG9jayBpcyBtb3JlIHJlbGlhYmxlIGFuZCBjb25zaXN0ZW50OyBmYWxsIGJhY2sgdG8gdXNpbmcKKyAJICogL3Byb2MvcGFydGl0aW9ucyBpZiB0aGUgZm9ybWVyIGlzIHVuYXZhaWxhYmxlLCBob3dldmVyLgorIAkgKi8KKyAJaWYgKCFfcHJvYmVfc3lzX2Jsb2NrICgpKQorIAkJX3Byb2JlX3Byb2NfcGFydGl0aW9ucyAoKTsKK30KKworc3RhdGljIGNoYXIqCitfZGV2aWNlX2dldF9wYXJ0X3BhdGggKFBlZERldmljZSogZGV2LCBpbnQgbnVtKQoreworICAgICAgICBpbnQgICAgICAgICAgICAgcGF0aF9sZW4gPSBzdHJsZW4gKGRldi0+cGF0aCk7CisgICAgICAgIGludCAgICAgICAgICAgICByZXN1bHRfbGVuID0gcGF0aF9sZW4gKyAxNjsKKyAgICAgICAgY2hhciogICAgICAgICAgIHJlc3VsdDsKKworICAgICAgICByZXN1bHQgPSAoY2hhciopIHBlZF9tYWxsb2MgKHJlc3VsdF9sZW4pOworICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKworICAgICAgICAvKiBDaGVjayBmb3IgZGV2ZnMtc3R5bGUgL2Rpc2MgPT4gL3BhcnROIHRyYW5zZm9ybWF0aW9uCisgICAgICAgICAgIHVuY29uZGl0aW9uYWxseTsgdGhlIHN5c3RlbSBtaWdodCBiZSB1c2luZyB1ZGV2IHdpdGggZGV2ZnMgcnVsZXMsCisgICAgICAgICAgIGFuZCBpZiBub3QgdGhlIHRlc3QgaXMgaGFybWxlc3MuICovCisgICAgICAgIGlmICghc3RyY21wIChkZXYtPnBhdGggKyBwYXRoX2xlbiAtIDUsICIvZGlzYyIpKSB7CisgICAgICAgICAgICAgICAgLyogcmVwbGFjZSAvZGlzYyB3aXRoIC9wYXRoJWQgKi8KKyAgICAgICAgICAgICAgICBzdHJjcHkgKHJlc3VsdCwgZGV2LT5wYXRoKTsKKyAgICAgICAgICAgICAgICBzbnByaW50ZiAocmVzdWx0ICsgcGF0aF9sZW4gLSA1LCAxNiwgIi9wYXJ0JWQiLCBudW0pOworICAgICAgICB9IGVsc2UgaWYgKGRldi0+dHlwZSA9PSBQRURfREVWSUNFX0RBQzk2MAorICAgICAgICAgICAgICAgICAgICAgICAgfHwgZGV2LT50eXBlID09IFBFRF9ERVZJQ0VfQ1BRQVJSQVkKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IGRldi0+dHlwZSA9PSBQRURfREVWSUNFX0FUQVJBSUQKKyNpZmRlZiBFTkFCTEVfREVWSUNFX01BUFBFUgorICAgICAgICAgICAgICAgICAgICAgICAgfHwgZGV2LT50eXBlID09IFBFRF9ERVZJQ0VfRE0KKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgfHwgaXNkaWdpdCAoZGV2LT5wYXRoW3BhdGhfbGVuIC0gMV0pKQorICAgICAgICAgICAgICAgIHNucHJpbnRmIChyZXN1bHQsIHJlc3VsdF9sZW4sICIlc3AlZCIsIGRldi0+cGF0aCwgbnVtKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNucHJpbnRmIChyZXN1bHQsIHJlc3VsdF9sZW4sICIlcyVkIiwgZGV2LT5wYXRoLCBudW0pOworCisgICAgICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBjaGFyKgorbGludXhfcGFydGl0aW9uX2dldF9wYXRoIChjb25zdCBQZWRQYXJ0aXRpb24qIHBhcnQpCit7CisgICAgICAgIHJldHVybiBfZGV2aWNlX2dldF9wYXJ0X3BhdGggKHBhcnQtPmRpc2stPmRldiwgcGFydC0+bnVtKTsKK30KKworc3RhdGljIGRldl90CitfcGFydGl0aW9uX2dldF9wYXJ0X2RldiAoY29uc3QgUGVkUGFydGl0aW9uKiBwYXJ0KQoreworICAgICAgICBzdHJ1Y3Qgc3RhdCBkZXZfc3RhdDsKKyAgICAgICAgaW50IGRldl9tYWpvciwgZGV2X21pbm9yOworCisgICAgICAgIGlmICghX2RldmljZV9zdGF0IChwYXJ0LT5kaXNrLT5kZXYsICZkZXZfc3RhdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIChkZXZfdCkwOworICAgICAgICBkZXZfbWFqb3IgPSBtYWpvciAoZGV2X3N0YXQuc3RfcmRldik7CisgICAgICAgIGRldl9taW5vciA9IG1pbm9yIChkZXZfc3RhdC5zdF9yZGV2KTsKKyAgICAgICAgcmV0dXJuIChkZXZfdCltYWtlZGV2IChkZXZfbWFqb3IsIGRldl9taW5vciArIHBhcnQtPm51bSk7Cit9CisKK3N0YXRpYyBpbnQKK19tb3VudF90YWJsZV9zZWFyY2ggKGNvbnN0IGNoYXIqIGZpbGVfbmFtZSwgZGV2X3QgZGV2KQoreworICAgICAgICBzdHJ1Y3Qgc3RhdCBwYXJ0X3N0YXQ7CisgICAgICAgIGNoYXIgbGluZVs1MTJdOworICAgICAgICBjaGFyIHBhcnRfbmFtZVs1MTJdOworICAgICAgICBGSUxFKiBmaWxlOworICAgICAgICBpbnQganVuazsKKworICAgICAgICBmaWxlID0gZm9wZW4gKGZpbGVfbmFtZSwgInIiKTsKKyAgICAgICAgaWYgKCFmaWxlKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB3aGlsZSAoZmdldHMgKGxpbmUsIDUxMiwgZmlsZSkpIHsKKyAgICAgICAgICAgICAgICBqdW5rID0gc3NjYW5mIChsaW5lLCAiJXMiLCBwYXJ0X25hbWUpOworICAgICAgICAgICAgICAgIGlmIChzdGF0IChwYXJ0X25hbWUsICZwYXJ0X3N0YXQpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJ0X3N0YXQuc3RfcmRldiA9PSBkZXYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmNsb3NlIChmaWxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZjbG9zZSAoZmlsZSk7CisgICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitfcGFydGl0aW9uX2lzX21vdW50ZWRfYnlfZGV2IChkZXZfdCBkZXYpCit7CisgICAgICAgIHJldHVybiAgX21vdW50X3RhYmxlX3NlYXJjaCggIi9wcm9jL21vdW50cyIsIGRldikKKyAgICAgICAgICAgICAgICB8fCBfbW91bnRfdGFibGVfc2VhcmNoKCAiL3Byb2Mvc3dhcHMiLCBkZXYpCisgICAgICAgICAgICAgICAgfHwgX21vdW50X3RhYmxlX3NlYXJjaCggIi9ldGMvbXRhYiIsIGRldik7Cit9CisKK3N0YXRpYyBpbnQKK19wYXJ0aXRpb25faXNfbW91bnRlZF9ieV9wYXRoIChjb25zdCBjaGFyICpwYXRoKQoreworICAgICAgICBzdHJ1Y3Qgc3RhdCBwYXJ0X3N0YXQ7CisgICAgICAgIGlmIChzdGF0IChwYXRoLCAmcGFydF9zdGF0KSAhPSAwKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAoIVNfSVNCTEsocGFydF9zdGF0LnN0X21vZGUpKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gX3BhcnRpdGlvbl9pc19tb3VudGVkX2J5X2RldiAocGFydF9zdGF0LnN0X3JkZXYpOworfQorCitzdGF0aWMgaW50CitfcGFydGl0aW9uX2lzX21vdW50ZWQgKGNvbnN0IFBlZFBhcnRpdGlvbiAqcGFydCkKK3sKKyAgICAgICAgZGV2X3QgZGV2OworICAgICAgICBpZiAoIXBlZF9wYXJ0aXRpb25faXNfYWN0aXZlIChwYXJ0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgZGV2ID0gX3BhcnRpdGlvbl9nZXRfcGFydF9kZXYgKHBhcnQpOworICAgICAgICByZXR1cm4gX3BhcnRpdGlvbl9pc19tb3VudGVkX2J5X2RldiAoZGV2KTsKK30KKworc3RhdGljIGludAorbGludXhfcGFydGl0aW9uX2lzX2J1c3kgKGNvbnN0IFBlZFBhcnRpdGlvbiogcGFydCkKK3sKKyAgICAgICAgUGVkUGFydGl0aW9uKiAgIHdhbGs7CisKKyAgICAgICAgUEVEX0FTU0VSVCAocGFydCAhPSBOVUxMLCByZXR1cm4gMCk7CisKKyAgICAgICAgaWYgKF9wYXJ0aXRpb25faXNfbW91bnRlZCAocGFydCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGlmIChwYXJ0LT50eXBlID09IFBFRF9QQVJUSVRJT05fRVhURU5ERUQpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHdhbGsgPSBwYXJ0LT5wYXJ0X2xpc3Q7IHdhbGs7IHdhbGsgPSB3YWxrLT5uZXh0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGludXhfcGFydGl0aW9uX2lzX2J1c3kgKHdhbGspKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK19ibGtwZ19wYXJ0X2NvbW1hbmQgKFBlZERldmljZSogZGV2LCBzdHJ1Y3QgYmxrcGdfcGFydGl0aW9uKiBwYXJ0LCBpbnQgb3ApCit7CisgICAgICAgIExpbnV4U3BlY2lmaWMqICAgICAgICAgIGFyY2hfc3BlY2lmaWMgPSBMSU5VWF9TUEVDSUZJQyAoZGV2KTsKKyAgICAgICAgc3RydWN0IGJsa3BnX2lvY3RsX2FyZyAgaW9jdGxfYXJnOworCisgICAgICAgIGlvY3RsX2FyZy5vcCA9IG9wOworICAgICAgICBpb2N0bF9hcmcuZmxhZ3MgPSAwOworICAgICAgICBpb2N0bF9hcmcuZGF0YWxlbiA9IHNpemVvZiAoc3RydWN0IGJsa3BnX3BhcnRpdGlvbik7CisgICAgICAgIGlvY3RsX2FyZy5kYXRhID0gKHZvaWQqKSBwYXJ0OworCisgICAgICAgIHJldHVybiBpb2N0bCAoYXJjaF9zcGVjaWZpYy0+ZmQsIEJMS1BHLCAmaW9jdGxfYXJnKSA9PSAwOworfQorCitzdGF0aWMgaW50CitfYmxrcGdfYWRkX3BhcnRpdGlvbiAoUGVkRGlzayogZGlzaywgUGVkUGFydGl0aW9uKiBwYXJ0KQoreworICAgICAgICBzdHJ1Y3QgYmxrcGdfcGFydGl0aW9uICBsaW51eF9wYXJ0OworICAgICAgICBjb25zdCBjaGFyKiAgICAgICAgICAgICB2b2xfbmFtZTsKKyAgICAgICAgY2hhciogICAgICAgICAgICAgICAgICAgZGV2X25hbWU7CisKKyAgICAgICAgUEVEX0FTU0VSVChkaXNrICE9IE5VTEwsIHJldHVybiAwKTsKKyAgICAgICAgUEVEX0FTU0VSVChkaXNrLT5kZXYtPnNlY3Rvcl9zaXplICUgUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQgPT0gMCwKKyAgICAgICAgICAgICAgICAgICByZXR1cm4gMCk7CisKKyAgICAgICAgaWYgKHBlZF9kaXNrX3R5cGVfY2hlY2tfZmVhdHVyZSAoZGlzay0+dHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEVEX0RJU0tfVFlQRV9QQVJUSVRJT05fTkFNRSkpCisgICAgICAgICAgICAgICAgdm9sX25hbWUgPSBwZWRfcGFydGl0aW9uX2dldF9uYW1lIChwYXJ0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHZvbF9uYW1lID0gTlVMTDsKKworICAgICAgICBkZXZfbmFtZSA9IF9kZXZpY2VfZ2V0X3BhcnRfcGF0aCAoZGlzay0+ZGV2LCBwYXJ0LT5udW0pOworICAgICAgICBpZiAoIWRldl9uYW1lKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIG1lbXNldCAoJmxpbnV4X3BhcnQsIDAsIHNpemVvZiAobGludXhfcGFydCkpOworICAgICAgICBsaW51eF9wYXJ0LnN0YXJ0ID0gcGFydC0+Z2VvbS5zdGFydCAqIGRpc2stPmRldi0+c2VjdG9yX3NpemU7CisgICAgICAgIC8qIHNlZSBmcy9wYXJ0aXRpb25zL21zZG9zLmM6bXNkb3NfcGFydGl0aW9uKCk6ICJsZWF2ZSByb29tIGZvciBMSUxPIiAqLworICAgICAgICBpZiAocGFydC0+dHlwZSAmIFBFRF9QQVJUSVRJT05fRVhURU5ERUQpCisgICAgICAgICAgICAgICAgbGludXhfcGFydC5sZW5ndGggPSBwYXJ0LT5nZW9tLmxlbmd0aCA9PSAxID8gNTEyIDogMTAyNDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxpbnV4X3BhcnQubGVuZ3RoID0gcGFydC0+Z2VvbS5sZW5ndGggKiBkaXNrLT5kZXYtPnNlY3Rvcl9zaXplOworICAgICAgICBsaW51eF9wYXJ0LnBubyA9IHBhcnQtPm51bTsKKyAgICAgICAgc3RybmNweSAobGludXhfcGFydC5kZXZuYW1lLCBkZXZfbmFtZSwgQkxLUEdfREVWTkFNRUxUSCk7CisgICAgICAgIGlmICh2b2xfbmFtZSkKKyAgICAgICAgICAgICAgICBzdHJuY3B5IChsaW51eF9wYXJ0LnZvbG5hbWUsIHZvbF9uYW1lLCBCTEtQR19WT0xOQU1FTFRIKTsKKworICAgICAgICBwZWRfZnJlZSAoZGV2X25hbWUpOworCisgICAgICAgIGlmICghX2Jsa3BnX3BhcnRfY29tbWFuZCAoZGlzay0+ZGV2LCAmbGludXhfcGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCTEtQR19BRERfUEFSVElUSU9OKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBwZWRfZXhjZXB0aW9uX3Rocm93ICgKKyAgICAgICAgICAgICAgICAgICAgICAgIFBFRF9FWENFUFRJT05fRVJST1IsCisgICAgICAgICAgICAgICAgICAgICAgICBQRURfRVhDRVBUSU9OX0lHTk9SRV9DQU5DRUwsCisgICAgICAgICAgICAgICAgICAgICAgICBfKCJFcnJvciBpbmZvcm1pbmcgdGhlIGtlcm5lbCBhYm91dCBtb2RpZmljYXRpb25zIHRvICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgInBhcnRpdGlvbiAlcyAtLSAlcy4gIFRoaXMgbWVhbnMgTGludXggd29uJ3Qga25vdyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJhYm91dCBhbnkgY2hhbmdlcyB5b3UgbWFkZSB0byAlcyB1bnRpbCB5b3UgcmVib290ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tIHNvIHlvdSBzaG91bGRuJ3QgbW91bnQgaXQgb3IgdXNlIGl0IGluIGFueSB3YXkgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiYmVmb3JlIHJlYm9vdGluZy4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbnV4X3BhcnQuZGV2bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVycm9yIChlcnJubyksCisgICAgICAgICAgICAgICAgICAgICAgICBsaW51eF9wYXJ0LmRldm5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09IFBFRF9FWENFUFRJT05fSUdOT1JFOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK19ibGtwZ19yZW1vdmVfcGFydGl0aW9uIChQZWREaXNrKiBkaXNrLCBpbnQgbikKK3sKKyAgICAgICAgc3RydWN0IGJsa3BnX3BhcnRpdGlvbiAgbGludXhfcGFydDsKKworICAgICAgICBtZW1zZXQgKCZsaW51eF9wYXJ0LCAwLCBzaXplb2YgKGxpbnV4X3BhcnQpKTsKKyAgICAgICAgbGludXhfcGFydC5wbm8gPSBuOworICAgICAgICByZXR1cm4gX2Jsa3BnX3BhcnRfY29tbWFuZCAoZGlzay0+ZGV2LCAmbGludXhfcGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJMS1BHX0RFTF9QQVJUSVRJT04pOworfQorCitzdGF0aWMgaW50CitfZGlza19zeW5jX3BhcnRfdGFibGUgKFBlZERpc2sqIGRpc2spCit7CisgICAgICAgIGludCAgICAgaTsKKyAgICAgICAgaW50ICAgICBsYXN0ID0gUEVEX01BWCAocGVkX2Rpc2tfZ2V0X2xhc3RfcGFydGl0aW9uX251bSAoZGlzayksIDE2KTsKKyAgICAgICAgaW50KiAgICByZXRzID0gcGVkX21hbGxvYyhzaXplb2YoaW50KSAqIGxhc3QpOworICAgICAgICBpbnQqICAgIGVycm51bXMgPSBwZWRfbWFsbG9jKHNpemVvZihpbnQpICogbGFzdCk7CisgICAgICAgIGludCAgICAgcmV0ID0gMTsKKworICAgICAgICBmb3IgKGkgPSAxOyBpIDw9IGxhc3Q7IGkrKykgeworICAgICAgICAgICAgICAgIHJldHNbaSAtIDFdID0gX2Jsa3BnX3JlbW92ZV9wYXJ0aXRpb24gKGRpc2ssIGkpOworICAgICAgICAgICAgICAgIGVycm51bXNbaSAtIDFdID0gZXJybm87CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGkgPSAxOyBpIDw9IGxhc3Q7IGkrKykgeworICAgICAgICAgICAgICAgIFBlZFBhcnRpdGlvbiogICAgICAgICAgIHBhcnQ7CisKKyAgICAgICAgICAgICAgICBwYXJ0ID0gcGVkX2Rpc2tfZ2V0X3BhcnRpdGlvbiAoZGlzaywgaSk7CisgICAgICAgICAgICAgICAgaWYgKHBhcnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGJ1c3kuLi4gc28gd2Ugd29uJ3QgKGNhbid0ISkgZGlzdHVyYiA7KSAgUHJvbGx5CisgICAgICAgICAgICAgICAgICAgICAgICAgKiBkb2Vzbid0IG1hdHRlciBhbnl3YXksIGJlY2F1c2UgdXNlcnMgc2hvdWxkbid0IGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgKiBjaGFuZ2luZyBtb3VudGVkIHBhcnRpdGlvbnMgYW55d2F5Li4uCisgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmV0c1tpIC0gMV0gJiYgZXJybnVtc1tpIC0gMV0gPT0gRUJVU1kpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZCB0aGUgKHBvc3NpYmx5IG1vZGlmaWVkIG9yIG5ldykgcGFydGl0aW9uICovCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIV9ibGtwZ19hZGRfcGFydGl0aW9uIChkaXNrLCBwYXJ0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmV0OworfQorCisjaWZkZWYgRU5BQkxFX0RFVklDRV9NQVBQRVIKK3N0YXRpYyBpbnQKK19kbV9yZW1vdmVfbWFwX25hbWUoY2hhciAqbmFtZSkKK3sKKyAgICAgICAgc3RydWN0IGRtX3Rhc2sgICp0YXNrID0gTlVMTDsKKyAgICAgICAgaW50ICAgICAgICAgICAgIHJjOworCisgICAgICAgIHRhc2sgPSBkbV90YXNrX2NyZWF0ZShETV9ERVZJQ0VfUkVNT1ZFKTsKKyAgICAgICAgaWYgKCF0YXNrKQorICAgICAgICAgICAgICAgIHJldHVybiAxOworCisgICAgICAgIGRtX3Rhc2tfc2V0X25hbWUgKHRhc2ssIG5hbWUpOworCisgICAgICAgIHJjID0gZG1fdGFza19ydW4odGFzayk7CisgICAgICAgIGRtX3Rhc2tfdXBkYXRlX25vZGVzKCk7CisgICAgICAgIGRtX3Rhc2tfZGVzdHJveSh0YXNrKTsKKyAgICAgICAgaWYgKHJjIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKworICAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCAKK19kbV9pc19wYXJ0IChzdHJ1Y3QgZG1faW5mbyAqdGhpcywgY2hhciAqbmFtZSkKK3sKKyAgICAgICAgc3RydWN0IGRtX3Rhc2sqIHRhc2sgPSBOVUxMOworICAgICAgICBzdHJ1Y3QgZG1faW5mbyogaW5mbyA9IGFsbG9jYShzaXplb2YgKmluZm8pOworICAgICAgICBzdHJ1Y3QgZG1fZGVwcyogZGVwcyA9IE5VTEw7CisgICAgICAgIGludCAgICAgICAgICAgICByYyA9IDA7CisgICAgICAgIHVuc2lnbmVkIGludCAgICBpOworCisgICAgICAgIHRhc2sgPSBkbV90YXNrX2NyZWF0ZShETV9ERVZJQ0VfREVQUyk7CisgICAgICAgIGlmICghdGFzaykKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgCisgICAgICAgIGRtX3Rhc2tfc2V0X25hbWUodGFzaywgbmFtZSk7CisgICAgICAgIHJjID0gZG1fdGFza19ydW4odGFzayk7CisgICAgICAgIGlmIChyYyA8IDApIHsKKyAgICAgICAgICAgICAgICByYyA9IDA7CisgICAgICAgICAgICAgICAgZ290byBlcnI7CisgICAgICAgIH0KKyAgICAgICAgcmMgPSAwOworCisgICAgICAgIG1lbXNldChpbmZvLCAnXDAnLCBzaXplb2YgKmluZm8pOworICAgICAgICBkbV90YXNrX2dldF9pbmZvKHRhc2ssIGluZm8pOworICAgICAgICBpZiAoIWluZm8tPmV4aXN0cykKKyAgICAgICAgICAgICAgICBnb3RvIGVycjsKKworICAgICAgICBkZXBzID0gZG1fdGFza19nZXRfZGVwcyh0YXNrKTsKKyAgICAgICAgaWYgKCFkZXBzKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyOworCisgICAgICAgIHJjID0gMDsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGRlcHMtPmNvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbWEgPSBtYWpvcihkZXBzLT5kZXZpY2VbaV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaSA9IG1pbm9yKGRlcHMtPmRldmljZVtpXSk7CisKKyAgICAgICAgICAgICAgICBpZiAobWEgPT0gdGhpcy0+bWFqb3IgJiYgbWkgPT0gdGhpcy0+bWlub3IpCisgICAgICAgICAgICAgICAgICAgICAgICByYyA9IDE7CisgICAgICAgIH0KKworZXJyOgorICAgICAgICBkbV90YXNrX2Rlc3Ryb3kodGFzayk7CisgICAgICAgIHJldHVybiByYzsKK30KKworc3RhdGljIGludAorX2RtX3JlbW92ZV9wYXJ0cyAoUGVkRGV2aWNlKiBkZXYpCit7CisgICAgICAgIHN0cnVjdCBzdGF0ICAgICAgICAgICAgIGRldl9zdGF0OworICAgICAgICBzdHJ1Y3QgZG1fdGFzayogICAgICAgICB0YXNrID0gTlVMTDsKKyAgICAgICAgc3RydWN0IGRtX2luZm8qICAgICAgICAgaW5mbyA9IGFsbG9jYShzaXplb2YgKmluZm8pOworICAgICAgICBzdHJ1Y3QgZG1fbmFtZXMqICAgICAgICBuYW1lcyA9IE5VTEw7CisgICAgICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgIG5leHQgPSAwOworICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICByYzsKKworICAgICAgICBpZiAoIV9kZXZpY2Vfc3RhdCAoZGV2LCAmZGV2X3N0YXQpKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyOworCisgICAgICAgIHRhc2sgPSBkbV90YXNrX2NyZWF0ZShETV9ERVZJQ0VfTElTVCk7CisgICAgICAgIGlmICghdGFzaykKKyAgICAgICAgICAgICAgICBnb3RvIGVycjsKKworICAgICAgICBkbV90YXNrX3NldF9tYWpvciAodGFzaywgbWFqb3IgKGRldl9zdGF0LnN0X3JkZXYpKTsKKyAgICAgICAgZG1fdGFza19zZXRfbWlub3IgKHRhc2ssIG1pbm9yIChkZXZfc3RhdC5zdF9yZGV2KSk7CisKKyAgICAgICAgcmMgPSBkbV90YXNrX3J1bih0YXNrKTsKKyAgICAgICAgaWYgKHJjIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycjsKKworICAgICAgICBtZW1zZXQoaW5mbywgJ1wwJywgc2l6ZW9mICppbmZvKTsKKyAgICAgICAgZG1fdGFza19nZXRfaW5mbyh0YXNrLCBpbmZvKTsKKyAgICAgICAgaWYgKCFpbmZvLT5leGlzdHMpCisgICAgICAgICAgICAgICAgZ290byBlcnI7CisKKyAgICAgICAgbmFtZXMgPSBkbV90YXNrX2dldF9uYW1lcyh0YXNrKTsKKyAgICAgICAgaWYgKCFuYW1lcykKKyAgICAgICAgICAgICAgICBnb3RvIGVycjsKKworICAgICAgICByYyA9IDA7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBuYW1lcyA9ICh2b2lkICopbmFtZXMgKyBuZXh0OworCisgICAgICAgICAgICAgICAgaWYgKF9kbV9pc19wYXJ0KGluZm8sIG5hbWVzLT5uYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJjICs9IF9kbV9yZW1vdmVfbWFwX25hbWUobmFtZXMtPm5hbWUpOworCisgICAgICAgICAgICAgICAgbmV4dCA9IG5hbWVzLT5uZXh0OworICAgICAgICB9IHdoaWxlIChuZXh0KTsKKworICAgICAgICBkbV90YXNrX3VwZGF0ZV9ub2RlcygpOworICAgICAgICBkbV90YXNrX2Rlc3Ryb3kodGFzayk7CisgICAgICAgIHRhc2sgPSBOVUxMOworCisgICAgICAgIGlmICghcmMpCisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CitlcnI6CisgICAgICAgIGlmICh0YXNrKQorICAgICAgICAgICAgICAgIGRtX3Rhc2tfZGVzdHJveSh0YXNrKTsKKyAgICAgICAgcGVkX2V4Y2VwdGlvbl90aHJvdyAoUEVEX0VYQ0VQVElPTl9XQVJOSU5HLCBQRURfRVhDRVBUSU9OX0lHTk9SRSwKKyAgICAgICAgICAgICAgICBfKCJwYXJ0ZWQgd2FzIHVuYWJsZSB0byByZS1yZWFkIHRoZSBwYXJ0aXRpb24gIgorICAgICAgICAgICAgICAgICAgInRhYmxlIG9uICVzICglcykuICBUaGlzIG1lYW5zIExpbnV4IHdvbid0IGtub3cgIgorICAgICAgICAgICAgICAgICAgImFueXRoaW5nIGFib3V0IHRoZSBtb2RpZmljYXRpb25zIHlvdSBtYWRlLiAiKSwKKyAgICAgICAgICAgICAgICBkZXYtPnBhdGgsIHN0cmVycm9yIChlcnJubykpOworICAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorX2RtX2FkZF9wYXJ0aXRpb24gKFBlZERpc2sqIGRpc2ssIFBlZFBhcnRpdGlvbiogcGFydCkKK3sKKyAgICAgICAgc3RydWN0IHN0YXQgICAgIGRldl9zdGF0OworICAgICAgICBzdHJ1Y3QgZG1fdGFzayogdGFzayA9IE5VTEw7CisgICAgICAgIGludCAgICAgICAgICAgICByYzsKKyAgICAgICAgY2hhciogICAgICAgICAgIHZvbF9uYW1lID0gTlVMTDsKKyAgICAgICAgY2hhciogICAgICAgICAgIGRldl9uYW1lID0gTlVMTDsKKyAgICAgICAgY2hhciogICAgICAgICAgIHBhcmFtcyA9IE5VTEw7CisKKyAgICAgICAgZGV2X25hbWUgPSBfZGV2aWNlX2dldF9wYXJ0X3BhdGggKGRpc2stPmRldiwgcGFydC0+bnVtKTsKKyAgICAgICAgaWYgKCFkZXZfbmFtZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICB2b2xfbmFtZSA9IHN0cnJjaHIgKGRldl9uYW1lLCAnLycpOworICAgICAgICBpZiAodm9sX25hbWUgJiYgKnZvbF9uYW1lICYmICooKyt2b2xfbmFtZSkpCisgICAgICAgICAgICAgICAgdm9sX25hbWUgPSBzdHJkdXAgKHZvbF9uYW1lKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHZvbF9uYW1lID0gc3RyZHVwIChkZXZfbmFtZSk7CisgICAgICAgIGlmICghdm9sX25hbWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgaWYgKCFfZGV2aWNlX3N0YXQgKGRpc2stPmRldiwgJmRldl9zdGF0KSkKKyAgICAgICAgICAgICAgICBnb3RvIGVycjsKKworICAgICAgICBpZiAoYXNwcmludGYgKCZwYXJhbXMsICIlZDolZCAlbGxkIiwgbWFqb3IgKGRldl9zdGF0LnN0X3JkZXYpLAorICAgICAgICAgICAgICAgICAgICAgIG1pbm9yIChkZXZfc3RhdC5zdF9yZGV2KSwgcGFydC0+Z2VvbS5zdGFydCkgPT0gLTEpCisgICAgICAgICAgICAgICAgZ290byBlcnI7CisKKyAgICAgICAgaWYgKCFwYXJhbXMpCisgICAgICAgICAgICAgICAgZ290byBlcnI7CisKKyAgICAgICAgdGFzayA9IGRtX3Rhc2tfY3JlYXRlIChETV9ERVZJQ0VfQ1JFQVRFKTsKKyAgICAgICAgaWYgKCF0YXNrKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyOworCisgICAgICAgIGRtX3Rhc2tfc2V0X25hbWUgKHRhc2ssIHZvbF9uYW1lKTsKKyAgICAgICAgZG1fdGFza19hZGRfdGFyZ2V0ICh0YXNrLCAwLCBwYXJ0LT5nZW9tLmxlbmd0aCwKKyAgICAgICAgICAgICAgICAibGluZWFyIiwgcGFyYW1zKTsKKyAgICAgICAgcmMgPSBkbV90YXNrX3J1bih0YXNrKTsKKyAgICAgICAgaWYgKHJjID49IDApIHsKKyAgICAgICAgICAgICAgICAvL3ByaW50ZigiMCAlbGQgbGluZWFyICVzXG4iLCBwYXJ0LT5nZW9tLmxlbmd0aCwgcGFyYW1zKTsKKyAgICAgICAgICAgICAgICBkbV90YXNrX3VwZGF0ZV9ub2RlcygpOworICAgICAgICAgICAgICAgIGRtX3Rhc2tfZGVzdHJveSh0YXNrKTsKKyAgICAgICAgICAgICAgICBmcmVlKHBhcmFtcyk7CisgICAgICAgICAgICAgICAgZnJlZSh2b2xfbmFtZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgX2RtX3JlbW92ZV9tYXBfbmFtZSh2b2xfbmFtZSk7CisgICAgICAgIH0KK2VycjoKKyAgICAgICAgZG1fdGFza191cGRhdGVfbm9kZXMoKTsKKyAgICAgICAgaWYgKHRhc2spCisgICAgICAgICAgICAgICAgZG1fdGFza19kZXN0cm95ICh0YXNrKTsKKyAgICAgICAgaWYgKHBhcmFtcykKKyAgICAgICAgICAgICAgICBmcmVlIChwYXJhbXMpOworICAgICAgICBmcmVlICh2b2xfbmFtZSk7CisgICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitfZG1fcmVyZWFkX3BhcnRfdGFibGUgKFBlZERpc2sqIGRpc2spCit7CisgICAgICAgIGludCAgICAgcmMgPSAxOworICAgICAgICBpbnQgICAgIGxhc3QgPSBQRURfTUFYIChwZWRfZGlza19nZXRfbGFzdF9wYXJ0aXRpb25fbnVtIChkaXNrKSwgMTYpOworICAgICAgICBpbnQgICAgIGk7CisKKyAgICAgICAgc3luYygpOworICAgICAgICBpZiAoIV9kbV9yZW1vdmVfcGFydHMoZGlzay0+ZGV2KSkKKyAgICAgICAgICAgICAgICByYyA9IDA7CisKKyAgICAgICAgZm9yIChpID0gMTsgaSA8PSBsYXN0OyBpKyspIHsKKyAgICAgICAgICAgICAgICBQZWRQYXJ0aXRpb24qICAgICAgcGFydDsKKworICAgICAgICAgICAgICAgIHBhcnQgPSBwZWRfZGlza19nZXRfcGFydGl0aW9uIChkaXNrLCBpKTsKKyAgICAgICAgICAgICAgICBpZiAoIXBhcnQpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIGlmICghX2RtX2FkZF9wYXJ0aXRpb24gKGRpc2ssIHBhcnQpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmMgPSAwOworICAgICAgICB9CisgICAgICAgIHJldHVybiByYzsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50Citfa2VybmVsX3JlcmVhZF9wYXJ0X3RhYmxlIChQZWREZXZpY2UqIGRldikKK3sKKyAgICAgICAgTGludXhTcGVjaWZpYyogIGFyY2hfc3BlY2lmaWMgPSBMSU5VWF9TUEVDSUZJQyAoZGV2KTsKKyAgICAgICAgaW50ICAgICAgICAgICAgIHJldHJ5X2NvdW50ID0gNTsKKworICAgICAgICBzeW5jKCk7CisgICAgICAgIHdoaWxlIChpb2N0bCAoYXJjaF9zcGVjaWZpYy0+ZmQsIEJMS1JSUEFSVCkpIHsKKyAgICAgICAgICAgICAgICByZXRyeV9jb3VudC0tOworICAgICAgICAgICAgICAgIHN5bmMoKTsKKyAgICAgICAgICAgICAgICBpZiAoIXJldHJ5X2NvdW50KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwZWRfZXhjZXB0aW9uX3Rocm93ICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEVEX0VYQ0VQVElPTl9XQVJOSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQRURfRVhDRVBUSU9OX0lHTk9SRSwKKyAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBrZXJuZWwgd2FzIHVuYWJsZSB0byByZS1yZWFkIHRoZSBwYXJ0aXRpb24gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAidGFibGUgb24gJXMgKCVzKS4gIFRoaXMgbWVhbnMgTGludXggd29uJ3Qga25vdyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJhbnl0aGluZyBhYm91dCB0aGUgbW9kaWZpY2F0aW9ucyB5b3UgbWFkZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bnRpbCB5b3UgcmVib290LiAgWW91IHNob3VsZCByZWJvb3QgeW91ciBjb21wdXRlciAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJiZWZvcmUgZG9pbmcgYW55dGhpbmcgd2l0aCAlcy4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2LT5wYXRoLCBzdHJlcnJvciAoZXJybm8pLCBkZXYtPnBhdGgpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK19oYXZlX2Jsa3BnICgpCit7CisgICAgICAgIHN0YXRpYyBpbnQgaGF2ZV9ibGtwZyA9IC0xOworICAgICAgICBpbnQga3ZlcjsKKworICAgICAgICBpZiAoaGF2ZV9ibGtwZyAhPSAtMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gaGF2ZV9ibGtwZzsKKworICAgICAgICBrdmVyID0gX2dldF9saW51eF92ZXJzaW9uKCk7CisgICAgICAgIHJldHVybiBoYXZlX2Jsa3BnID0ga3ZlciA+PSBLRVJORUxfVkVSU0lPTiAoMiw0LDApID8gMSA6IDA7Cit9CisKK3N0YXRpYyBpbnQKK2xpbnV4X2Rpc2tfY29tbWl0IChQZWREaXNrKiBkaXNrKQoreworI2lmZGVmIEVOQUJMRV9ERVZJQ0VfTUFQUEVSCisgICAgICAgIGlmIChkaXNrLT5kZXYtPnR5cGUgPT0gUEVEX0RFVklDRV9ETSkKKyAgICAgICAgICAgICAgICByZXR1cm4gX2RtX3JlcmVhZF9wYXJ0X3RhYmxlIChkaXNrKTsKKyNlbmRpZgorICAgICAgICBpZiAoZGlzay0+ZGV2LT50eXBlICE9IFBFRF9ERVZJQ0VfRklMRSkgeworICAgICAgICAgICAgICAgIC8qIFRoZSBpb2N0bCgpIGNvbW1hbmQgQkxLUEdfQUREX1BBUlRJVElPTiBkb2VzIG5vdCBub3RpZnkKKyAgICAgICAgICAgICAgICAgKiB0aGUgZGV2ZnMgc3lzdGVtOyBjb25zZXF1ZW50bHksIC9wcm9jL3BhcnRpdGlvbnMgd2lsbCBub3QKKyAgICAgICAgICAgICAgICAgKiBiZSB1cCB0byBkYXRlLCBhbmQgdGhlIHByb3BlciBsaW5rcyBpbiAvZGV2IGFyZSBub3QKKyAgICAgICAgICAgICAgICAgKiBjcmVhdGVkLiAgVGhlcmVmb3JlLCBpZiB1c2luZyBEZXZGUywgd2UgbXVzdCBnZXQgdGhlIGtlcm5lbAorICAgICAgICAgICAgICAgICAqIHRvIHJlLXJlYWQgYW5kIGdyb2sgdGhlIHBhcnRpdGlvbiB0YWJsZS4KKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAvKiBXb3JrIGFyb3VuZCBrZXJuZWwgZGFzZCBwcm9ibGVtIHNvIHdlIHJlYWxseSBkbyBCTEtSUlBBUlQgKi8KKyAgICAgICAgICAgICAgICBpZiAoZGlzay0+ZGV2LT50eXBlICE9IFBFRF9ERVZJQ0VfREFTRCAmJgorICAgICAgICAgICAgICAgICAgICBfaGF2ZV9ibGtwZyAoKSAmJiAhX2hhdmVfZGV2ZnMgKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfZGlza19zeW5jX3BhcnRfdGFibGUgKGRpc2spKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gX2tlcm5lbF9yZXJlYWRfcGFydF90YWJsZSAoZGlzay0+ZGV2KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAxOworfQorCitzdGF0aWMgUGVkRGV2aWNlQXJjaE9wcyBsaW51eF9kZXZfb3BzID0geworICAgICAgICBfbmV3OiAgICAgICAgICAgbGludXhfbmV3LAorICAgICAgICBkZXN0cm95OiAgICAgICAgbGludXhfZGVzdHJveSwKKyAgICAgICAgaXNfYnVzeTogICAgICAgIGxpbnV4X2lzX2J1c3ksCisgICAgICAgIG9wZW46ICAgICAgICAgICBsaW51eF9vcGVuLAorICAgICAgICByZWZyZXNoX29wZW46ICAgbGludXhfcmVmcmVzaF9vcGVuLAorICAgICAgICBjbG9zZTogICAgICAgICAgbGludXhfY2xvc2UsCisgICAgICAgIHJlZnJlc2hfY2xvc2U6ICBsaW51eF9yZWZyZXNoX2Nsb3NlLAorICAgICAgICByZWFkOiAgICAgICAgICAgbGludXhfcmVhZCwKKyAgICAgICAgd3JpdGU6ICAgICAgICAgIGxpbnV4X3dyaXRlLAorICAgICAgICBjaGVjazogICAgICAgICAgbGludXhfY2hlY2ssCisgICAgICAgIHN5bmM6ICAgICAgICAgICBsaW51eF9zeW5jLAorICAgICAgICBzeW5jX2Zhc3Q6ICAgICAgbGludXhfc3luY19mYXN0LAorICAgICAgICBwcm9iZV9hbGw6ICAgICAgbGludXhfcHJvYmVfYWxsCit9OworCitQZWREaXNrQXJjaE9wcyBsaW51eF9kaXNrX29wcyA9ICB7CisgICAgICAgIHBhcnRpdGlvbl9nZXRfcGF0aDogICAgIGxpbnV4X3BhcnRpdGlvbl9nZXRfcGF0aCwKKyAgICAgICAgcGFydGl0aW9uX2lzX2J1c3k6ICAgICAgbGludXhfcGFydGl0aW9uX2lzX2J1c3ksCisgICAgICAgIGRpc2tfY29tbWl0OiAgICAgICAgICAgIGxpbnV4X2Rpc2tfY29tbWl0Cit9OworCitQZWRBcmNoaXRlY3R1cmUgcGVkX2xpbnV4X2FyY2ggPSB7CisgICAgICAgIGRldl9vcHM6ICAgICAgICAmbGludXhfZGV2X29wcywKKyAgICAgICAgZGlza19vcHM6ICAgICAgICZsaW51eF9kaXNrX29wcworfTsKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvY3MvY29uc3RyYWludC5jIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9jcy9jb25zdHJhaW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJhOTQxYQotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvY3MvY29uc3RyYWludC5jCkBAIC0wLDAgKzEsNTMwIEBACisvKgorICAgIGxpYnBhcnRlZCAtIGEgbGlicmFyeSBmb3IgbWFuaXB1bGF0aW5nIGRpc2sgcGFydGl0aW9ucworICAgIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKKyovCisKKy8qKgorICogXGFkZHRvZ3JvdXAgUGVkQ29uc3RyYWludAorICoKKyAqIFxicmllZiBDb25zdHJhaW50IHNvbHZlciBpbnRlcmZhY2UuIAorICogCisgKiBDb25zdHJhaW50cyBhcmUgdXNlZCB0byBjb21tdW5pY2F0ZSByZXN0cmljdGlvbnMgb24gb3BlcmF0aW9ucyBDb25zdHJhaW50cworICogYXJlIHJlc3RyaWN0aW9ucyBvbiB0aGUgbG9jYXRpb24gYW5kIGFsaWdubWVudCBvZiB0aGUgc3RhcnQgYW5kIGVuZCBvZiBhCisgKiBwYXJ0aXRpb24sIGFuZCB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBzaXplLgorICoKKyAqIENvbnN0cmFpbnRzIGFyZSBjbG9zZWQgdW5kZXIgaW50ZXJzZWN0aW9uIChmb3IgdGhlIHByb29mIHNlZSB0aGUgc291cmNlCisgKiBjb2RlKS4gIEZvciBiYWNrZ3JvdW5kIGluZm9ybWF0aW9uIHNlZSB0aGUgQ2hpbmVzZSBSZW1haW5kZXIgVGhlb3JlbS4KKyAqCisgKiBUaGlzIGludGVyZmFjZSBjb25zaXN0cyBvZiBjb25zdHJ1Y3Rpb24gY29uc3RyYWludHMsIGZpbmRpbmcgdGhlIGludGVyc2VjdGlvbgorICogb2YgY29uc3RyYWludHMsIGFuZCBmaW5kaW5nIHNvbHV0aW9ucyB0byBjb25zdHJhaW50cy4KKyAqCisgKiBUaGUgY29uc3RyYWludCBzb2x2ZXIgYWxsb3dzIHlvdSB0byBzcGVjaWZ5IGNvbnN0cmFpbnRzIG9uIHdoZXJlIGEgcGFydGl0aW9uCisgKiBvciBmaWxlIHN5c3RlbSAob3IgYW55IFBlZEdlb21ldHJ5KSBtYXkgYmUgcGxhY2VkL3Jlc2l6ZWQvZXRjLiBGb3IgZXhhbXBsZSwKKyAqIHlvdSBtaWdodCB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0IGEgZmlsZSBzeXN0ZW0gaXMgYXQgbGVhc3QgMTAgR2IsIG9yIHRoYXQgaXQKKyAqIHN0YXJ0cyBhdCB0aGUgYmVnaW5uaW5nIG9mIG5ldyBjeWxpbmRlci4KKyAqCisgKiBUaGUgY29uc3RyYWludCBzb2x2ZXIgaW4gdGhpcyBmaWxlIHVuaWZpZXMgc29sdmVyIGluIGdlb20uYyAod2hpY2ggYWxsb3dzIHlvdQorICogdG8gc3BlY2lmeSBjb25zdHJhaW50cyBvbiByYW5nZXMpIGFuZCBuYXRtYXRoLmMgKHdoaWNoIGFsbG93cyB5b3UgdG8gc3BlY2lmeQorICogYWxpZ25tZW50IGNvbnN0cmFpbnRzKS4KKyAqCisgKiBAeworICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxwYXJ0ZWQvcGFydGVkLmg+CisjaW5jbHVkZSA8cGFydGVkL2RlYnVnLmg+CisKKy8qKgorICogSW5pdGlhbGl6ZXMgYSBwcmUtYWxsb2NhdGVkIHBpZWNlIG9mIG1lbW9yeSB0byBjb250YWluIGEgY29uc3RyYWludAorICogd2l0aCB0aGUgc3VwcGxpZWQgZGVmYXVsdCB2YWx1ZXMuCisgKgorICogXHJldHVybiBcYyAwIG9uIGZhaWx1cmUuCisgKi8KK2ludAorcGVkX2NvbnN0cmFpbnRfaW5pdCAoCisJUGVkQ29uc3RyYWludCogY29uc3RyYWludCwKKwljb25zdCBQZWRBbGlnbm1lbnQqIHN0YXJ0X2FsaWduLAorCWNvbnN0IFBlZEFsaWdubWVudCogZW5kX2FsaWduLAorCWNvbnN0IFBlZEdlb21ldHJ5KiBzdGFydF9yYW5nZSwKKwljb25zdCBQZWRHZW9tZXRyeSogZW5kX3JhbmdlLAorCVBlZFNlY3RvciBtaW5fc2l6ZSwKKwlQZWRTZWN0b3IgbWF4X3NpemUpCit7CisJUEVEX0FTU0VSVCAoY29uc3RyYWludCAhPSBOVUxMLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAoc3RhcnRfcmFuZ2UgIT0gTlVMTCwgcmV0dXJuIDApOworCVBFRF9BU1NFUlQgKGVuZF9yYW5nZSAhPSBOVUxMLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAobWluX3NpemUgPiAwLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAobWF4X3NpemUgPiAwLCByZXR1cm4gMCk7CisKKwljb25zdHJhaW50LT5zdGFydF9hbGlnbiA9IHBlZF9hbGlnbm1lbnRfZHVwbGljYXRlIChzdGFydF9hbGlnbik7CisJY29uc3RyYWludC0+ZW5kX2FsaWduID0gcGVkX2FsaWdubWVudF9kdXBsaWNhdGUgKGVuZF9hbGlnbik7CisJY29uc3RyYWludC0+c3RhcnRfcmFuZ2UgPSBwZWRfZ2VvbWV0cnlfZHVwbGljYXRlIChzdGFydF9yYW5nZSk7CisJY29uc3RyYWludC0+ZW5kX3JhbmdlID0gcGVkX2dlb21ldHJ5X2R1cGxpY2F0ZSAoZW5kX3JhbmdlKTsKKwljb25zdHJhaW50LT5taW5fc2l6ZSA9IG1pbl9zaXplOworCWNvbnN0cmFpbnQtPm1heF9zaXplID0gbWF4X3NpemU7CisKKwlyZXR1cm4gMTsKK30KKworLyoqCisgKiBDb252ZW5pZW5jZSB3cmFwcGVyIGZvciBwZWRfY29uc3RyYWludF9pbml0KCkuCisgKgorICogQWxsb2NhdGVzIGEgbmV3IHBpZWNlIG9mIG1lbW9yeSBhbmQgaW5pdGlhbGl6ZXMgdGhlIGNvbnN0cmFpbnQuCisgKgorICogXHJldHVybiBcYyBOVUxMIG9uIGZhaWx1cmUuCisgKi8KK1BlZENvbnN0cmFpbnQqCitwZWRfY29uc3RyYWludF9uZXcgKAorCWNvbnN0IFBlZEFsaWdubWVudCogc3RhcnRfYWxpZ24sCisJY29uc3QgUGVkQWxpZ25tZW50KiBlbmRfYWxpZ24sCisJY29uc3QgUGVkR2VvbWV0cnkqIHN0YXJ0X3JhbmdlLAorCWNvbnN0IFBlZEdlb21ldHJ5KiBlbmRfcmFuZ2UsCisJUGVkU2VjdG9yIG1pbl9zaXplLAorCVBlZFNlY3RvciBtYXhfc2l6ZSkKK3sKKwlQZWRDb25zdHJhaW50Kgljb25zdHJhaW50OworCisJY29uc3RyYWludCA9IChQZWRDb25zdHJhaW50KikgcGVkX21hbGxvYyAoc2l6ZW9mIChQZWRDb25zdHJhaW50KSk7CisJaWYgKCFjb25zdHJhaW50KQorCQlnb3RvIGVycm9yOworCWlmICghcGVkX2NvbnN0cmFpbnRfaW5pdCAoY29uc3RyYWludCwgc3RhcnRfYWxpZ24sIGVuZF9hbGlnbiwKKwkJCSAgICAgICAgICBzdGFydF9yYW5nZSwgZW5kX3JhbmdlLCBtaW5fc2l6ZSwgbWF4X3NpemUpKQorCQlnb3RvIGVycm9yX2ZyZWVfY29uc3RyYWludDsKKwlyZXR1cm4gY29uc3RyYWludDsKKworZXJyb3JfZnJlZV9jb25zdHJhaW50OgorCXBlZF9mcmVlIChjb25zdHJhaW50KTsKK2Vycm9yOgorCXJldHVybiBOVUxMOworfQorCisvKioKKyAqIFJldHVybiBhIGNvbnN0cmFpbnQgdGhhdCByZXF1aXJlcyBhIHJlZ2lvbiB0byBiZSBlbnRpcmVseSBjb250YWluZWQgaW5zaWRlCisgKiBccCBtYXgsIGFuZCB0byBlbnRpcmVseSBjb250YWluIFxwIG1pbi4KKyAqCisgKiBccmV0dXJuIFxjIE5VTEwgb24gZmFpbHVyZS4KKyAqLworUGVkQ29uc3RyYWludCoKK3BlZF9jb25zdHJhaW50X25ld19mcm9tX21pbl9tYXggKAorCWNvbnN0IFBlZEdlb21ldHJ5KiBtaW4sCisJY29uc3QgUGVkR2VvbWV0cnkqIG1heCkKK3sKKwlQZWRHZW9tZXRyeQlzdGFydF9yYW5nZTsKKwlQZWRHZW9tZXRyeQllbmRfcmFuZ2U7CisKKwlQRURfQVNTRVJUIChtaW4gIT0gTlVMTCwgcmV0dXJuIE5VTEwpOworCVBFRF9BU1NFUlQgKG1heCAhPSBOVUxMLCByZXR1cm4gTlVMTCk7CisJUEVEX0FTU0VSVCAocGVkX2dlb21ldHJ5X3Rlc3RfaW5zaWRlIChtYXgsIG1pbiksIHJldHVybiBOVUxMKTsKKworCXBlZF9nZW9tZXRyeV9pbml0ICgmc3RhcnRfcmFuZ2UsIG1pbi0+ZGV2LCBtYXgtPnN0YXJ0LAorCQkJICAgbWluLT5zdGFydCAtIG1heC0+c3RhcnQgKyAxKTsKKwlwZWRfZ2VvbWV0cnlfaW5pdCAoJmVuZF9yYW5nZSwgbWluLT5kZXYsIG1pbi0+ZW5kLAorCQkJICAgbWF4LT5lbmQgLSBtaW4tPmVuZCArIDEpOworCisJcmV0dXJuIHBlZF9jb25zdHJhaW50X25ldyAoCisJCQlwZWRfYWxpZ25tZW50X2FueSwgcGVkX2FsaWdubWVudF9hbnksCisJCQkmc3RhcnRfcmFuZ2UsICZlbmRfcmFuZ2UsCisJCQltaW4tPmxlbmd0aCwgbWF4LT5sZW5ndGgpOworfQorCisvKioKKyAqIFJldHVybiBhIGNvbnN0cmFpbnQgdGhhdCByZXF1aXJlcyBhIHJlZ2lvbiB0byBlbnRpcmVseSBjb250YWluIFxwIG1pbi4KKyAqCisgKiBccmV0dXJuIFxjIE5VTEwgb24gZmFpbHVyZS4KKyAqLworUGVkQ29uc3RyYWludCoKK3BlZF9jb25zdHJhaW50X25ld19mcm9tX21pbiAoY29uc3QgUGVkR2VvbWV0cnkqIG1pbikKK3sKKwlQZWRHZW9tZXRyeQlmdWxsX2RldjsKKworCVBFRF9BU1NFUlQgKG1pbiAhPSBOVUxMLCByZXR1cm4gTlVMTCk7CisKKwlwZWRfZ2VvbWV0cnlfaW5pdCAoJmZ1bGxfZGV2LCBtaW4tPmRldiwgMCwgbWluLT5kZXYtPmxlbmd0aCk7CisJcmV0dXJuIHBlZF9jb25zdHJhaW50X25ld19mcm9tX21pbl9tYXggKG1pbiwgJmZ1bGxfZGV2KTsKK30KKworLyoqCisgKiBSZXR1cm4gYSBjb25zdHJhaW50IHRoYXQgcmVxdWlyZXMgYSByZWdpb24gdG8gYmUgZW50aXJlbHkgY29udGFpbmVkIGluc2lkZQorICogXHAgbWF4LgorICoKKyAqIFxyZXR1cm4gXGMgTlVMTCBvbiBmYWlsdXJlLgorICovCitQZWRDb25zdHJhaW50KgorcGVkX2NvbnN0cmFpbnRfbmV3X2Zyb21fbWF4IChjb25zdCBQZWRHZW9tZXRyeSogbWF4KQoreworCVBFRF9BU1NFUlQgKG1heCAhPSBOVUxMLCByZXR1cm4gTlVMTCk7CisKKwlyZXR1cm4gcGVkX2NvbnN0cmFpbnRfbmV3ICgKKwkJCXBlZF9hbGlnbm1lbnRfYW55LCBwZWRfYWxpZ25tZW50X2FueSwKKwkJCW1heCwgbWF4LCAxLCBtYXgtPmxlbmd0aCk7Cit9CisKKy8qKgorICogRHVwbGljYXRlIGEgY29uc3RyYWludC4KKyAqCisgKiBccmV0dXJuIFxjIE5VTEwgb24gZmFpbHVyZS4KKyAqLworUGVkQ29uc3RyYWludCoKK3BlZF9jb25zdHJhaW50X2R1cGxpY2F0ZSAoY29uc3QgUGVkQ29uc3RyYWludCogY29uc3RyYWludCkKK3sKKwlQRURfQVNTRVJUIChjb25zdHJhaW50ICE9IE5VTEwsIHJldHVybiBOVUxMKTsKKworCXJldHVybiBwZWRfY29uc3RyYWludF9uZXcgKAorCQljb25zdHJhaW50LT5zdGFydF9hbGlnbiwKKwkJY29uc3RyYWludC0+ZW5kX2FsaWduLAorCQljb25zdHJhaW50LT5zdGFydF9yYW5nZSwKKwkJY29uc3RyYWludC0+ZW5kX3JhbmdlLAorCQljb25zdHJhaW50LT5taW5fc2l6ZSwKKwkJY29uc3RyYWludC0+bWF4X3NpemUpOworfQorCisvKioKKyAqIFJldHVybiBhIGNvbnN0cmFpbnQgdGhhdCByZXF1aXJlcyBhIHJlZ2lvbiB0byBzYXRpc2Z5IGJvdGggXHAgYSBhbmQgXHAgYi4KKyAqCisgKiBNb3Jlb3ZlciwgYW55IHJlZ2lvbiBzYXRpc2Z5aW5nIFxwIGEgYW5kIFxwIGIgd2lsbCBhbHNvIHNhdGlzZnkgdGhlIHJldHVybmVkCisgKiBjb25zdHJhaW50LgorICoKKyAqIFxyZXR1cm4gXGMgTlVMTCBpZiBubyBzb2x1dGlvbiBjb3VsZCBiZSBmb3VuZCAobm90ZSB0aGF0IFxjIE5VTEwgaXMgYSB2YWxpZAorICogICAgICAgICBQZWRDb25zdHJhaW50KS4KKyAqLworUGVkQ29uc3RyYWludCoKK3BlZF9jb25zdHJhaW50X2ludGVyc2VjdCAoY29uc3QgUGVkQ29uc3RyYWludCogYSwgY29uc3QgUGVkQ29uc3RyYWludCogYikKK3sKKwlQZWRBbGlnbm1lbnQqCXN0YXJ0X2FsaWduOworCVBlZEFsaWdubWVudCoJZW5kX2FsaWduOworCVBlZEdlb21ldHJ5KglzdGFydF9yYW5nZTsKKwlQZWRHZW9tZXRyeSoJZW5kX3JhbmdlOworCVBlZFNlY3RvcgltaW5fc2l6ZTsKKwlQZWRTZWN0b3IJbWF4X3NpemU7CisJUGVkQ29uc3RyYWludCoJY29uc3RyYWludDsKKworCWlmICghYSB8fCAhYikKKwkJcmV0dXJuIE5VTEw7CisKKwlzdGFydF9hbGlnbiA9IHBlZF9hbGlnbm1lbnRfaW50ZXJzZWN0IChhLT5zdGFydF9hbGlnbiwgYi0+c3RhcnRfYWxpZ24pOworCWlmICghc3RhcnRfYWxpZ24pCisJCWdvdG8gZW1wdHk7CisJZW5kX2FsaWduID0gcGVkX2FsaWdubWVudF9pbnRlcnNlY3QgKGEtPmVuZF9hbGlnbiwgYi0+ZW5kX2FsaWduKTsKKwlpZiAoIWVuZF9hbGlnbikKKwkJZ290byBlbXB0eV9kZXN0cm95X3N0YXJ0X2FsaWduOworCXN0YXJ0X3JhbmdlID0gcGVkX2dlb21ldHJ5X2ludGVyc2VjdCAoYS0+c3RhcnRfcmFuZ2UsIGItPnN0YXJ0X3JhbmdlKTsKKwlpZiAoIXN0YXJ0X3JhbmdlKQorCQlnb3RvIGVtcHR5X2Rlc3Ryb3lfZW5kX2FsaWduOworCWVuZF9yYW5nZSA9IHBlZF9nZW9tZXRyeV9pbnRlcnNlY3QgKGEtPmVuZF9yYW5nZSwgYi0+ZW5kX3JhbmdlKTsKKwlpZiAoIWVuZF9yYW5nZSkKKwkJZ290byBlbXB0eV9kZXN0cm95X3N0YXJ0X3JhbmdlOworCW1pbl9zaXplID0gUEVEX01BWCAoYS0+bWluX3NpemUsIGItPm1pbl9zaXplKTsKKwltYXhfc2l6ZSA9IFBFRF9NSU4gKGEtPm1heF9zaXplLCBiLT5tYXhfc2l6ZSk7CisKKwljb25zdHJhaW50ID0gcGVkX2NvbnN0cmFpbnRfbmV3ICgKKwkJCXN0YXJ0X2FsaWduLCBlbmRfYWxpZ24sIHN0YXJ0X3JhbmdlLCBlbmRfcmFuZ2UsCisJCQltaW5fc2l6ZSwgbWF4X3NpemUpOworCWlmICghY29uc3RyYWludCkKKwkJZ290byBlbXB0eV9kZXN0cm95X2VuZF9yYW5nZTsKKworCXBlZF9hbGlnbm1lbnRfZGVzdHJveSAoc3RhcnRfYWxpZ24pOworCXBlZF9hbGlnbm1lbnRfZGVzdHJveSAoZW5kX2FsaWduKTsKKwlwZWRfZ2VvbWV0cnlfZGVzdHJveSAoc3RhcnRfcmFuZ2UpOworCXBlZF9nZW9tZXRyeV9kZXN0cm95IChlbmRfcmFuZ2UpOworCXJldHVybiBjb25zdHJhaW50OworCitlbXB0eV9kZXN0cm95X2VuZF9yYW5nZToKKwlwZWRfZ2VvbWV0cnlfZGVzdHJveSAoZW5kX3JhbmdlKTsKK2VtcHR5X2Rlc3Ryb3lfc3RhcnRfcmFuZ2U6CisJcGVkX2dlb21ldHJ5X2Rlc3Ryb3kgKHN0YXJ0X3JhbmdlKTsKK2VtcHR5X2Rlc3Ryb3lfZW5kX2FsaWduOgorCXBlZF9hbGlnbm1lbnRfZGVzdHJveSAoZW5kX2FsaWduKTsKK2VtcHR5X2Rlc3Ryb3lfc3RhcnRfYWxpZ246CisJcGVkX2FsaWdubWVudF9kZXN0cm95IChzdGFydF9hbGlnbik7CitlbXB0eToKKwlyZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiBSZWxlYXNlIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGZvciBhIFBlZENvbnN0cmFpbnQgY29uc3RydWN0ZWQgd2l0aAorICogcGVkX2NvbnN0cmFpbnRfaW5pdCgpLgorICovCit2b2lkCitwZWRfY29uc3RyYWludF9kb25lIChQZWRDb25zdHJhaW50KiBjb25zdHJhaW50KQoreworCVBFRF9BU1NFUlQgKGNvbnN0cmFpbnQgIT0gTlVMTCwgcmV0dXJuKTsKKworCXBlZF9hbGlnbm1lbnRfZGVzdHJveSAoY29uc3RyYWludC0+c3RhcnRfYWxpZ24pOworCXBlZF9hbGlnbm1lbnRfZGVzdHJveSAoY29uc3RyYWludC0+ZW5kX2FsaWduKTsKKwlwZWRfZ2VvbWV0cnlfZGVzdHJveSAoY29uc3RyYWludC0+c3RhcnRfcmFuZ2UpOworCXBlZF9nZW9tZXRyeV9kZXN0cm95IChjb25zdHJhaW50LT5lbmRfcmFuZ2UpOworfQorCisvKioKKyAqIFJlbGVhc2UgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIGEgUGVkQ29uc3RyYWludCBjb25zdHJ1Y3RlZCB3aXRoCisgKiBwZWRfY29uc3RyYWludF9uZXcoKS4KKyAqLwordm9pZAorcGVkX2NvbnN0cmFpbnRfZGVzdHJveSAoUGVkQ29uc3RyYWludCogY29uc3RyYWludCkKK3sKKwlpZiAoY29uc3RyYWludCkgeworCQlwZWRfY29uc3RyYWludF9kb25lIChjb25zdHJhaW50KTsKKwkJcGVkX2ZyZWUgKGNvbnN0cmFpbnQpOworCX0KK30KKworLyoKKyAqIFJldHVybiB0aGUgcmVnaW9uIHdpdGhpbiB3aGljaCB0aGUgc3RhcnQgbXVzdCBsaWUKKyAqIGluIG9yZGVyIHRvIHNhdGlzZnkgYSBjb25zdHJpYW50LiAgSXQgdGFrZXMgaW50byBhY2NvdW50CisgKiBjb25zdHJhaW50LT5zdGFydF9yYW5nZSwgY29uc3RyYWludC0+bWluX3NpemUgYW5kIGNvbnN0cmFpbnQtPm1heF9zaXplLgorICogQWxsIHNlY3RvcnMgaW4gdGhpcyByYW5nZSB0aGF0IGFsc28gc2F0aXNmeSBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzIGhhdmUKKyAqIGFuIGVuZCwgc3VjaCB0aGF0IHRoZSAoc3RhcnQsIGVuZCkgc2F0aXNmeSB0aGUgY29uc3RyYWludC4KKyAqLworc3RhdGljIFBlZEdlb21ldHJ5KgorX2NvbnN0cmFpbnRfZ2V0X2Nhbm9uaWNhbF9zdGFydF9yYW5nZSAoY29uc3QgUGVkQ29uc3RyYWludCogY29uc3RyYWludCkKK3sKKwlQZWRTZWN0b3IJZmlyc3RfZW5kX3NvbG47CisJUGVkU2VjdG9yCWxhc3RfZW5kX3NvbG47CisJUGVkU2VjdG9yCW1pbl9zdGFydDsKKwlQZWRTZWN0b3IJbWF4X3N0YXJ0OworCVBlZEdlb21ldHJ5CXN0YXJ0X21pbl9tYXhfcmFuZ2U7CisKKwlpZiAoY29uc3RyYWludC0+bWluX3NpemUgPiBjb25zdHJhaW50LT5tYXhfc2l6ZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlmaXJzdF9lbmRfc29sbiA9IHBlZF9hbGlnbm1lbnRfYWxpZ25fZG93biAoCisJCQljb25zdHJhaW50LT5lbmRfYWxpZ24sIGNvbnN0cmFpbnQtPmVuZF9yYW5nZSwKKwkJCWNvbnN0cmFpbnQtPmVuZF9yYW5nZS0+c3RhcnQpOworCWxhc3RfZW5kX3NvbG4gPSBwZWRfYWxpZ25tZW50X2FsaWduX3VwICgKKwkJCWNvbnN0cmFpbnQtPmVuZF9hbGlnbiwgY29uc3RyYWludC0+ZW5kX3JhbmdlLAorCQkJY29uc3RyYWludC0+ZW5kX3JhbmdlLT5lbmQpOworCWlmIChmaXJzdF9lbmRfc29sbiA9PSAtMSB8fCBsYXN0X2VuZF9zb2xuID09IC0xCisJICAgIHx8IGZpcnN0X2VuZF9zb2xuID4gbGFzdF9lbmRfc29sbgorCSAgICB8fCBsYXN0X2VuZF9zb2xuIDwgY29uc3RyYWludC0+bWluX3NpemUpCisJCXJldHVybiBOVUxMOworCisJbWluX3N0YXJ0ID0gZmlyc3RfZW5kX3NvbG4gLSBjb25zdHJhaW50LT5tYXhfc2l6ZSArIDE7CisJaWYgKG1pbl9zdGFydCA8IDApCisJCW1pbl9zdGFydCA9IDA7CisJbWF4X3N0YXJ0ID0gbGFzdF9lbmRfc29sbiAtIGNvbnN0cmFpbnQtPm1pbl9zaXplICsgMTsKKwlpZiAobWF4X3N0YXJ0IDwgMCkKKwkJcmV0dXJuIE5VTEw7CisKKwlwZWRfZ2VvbWV0cnlfaW5pdCAoCisJCSZzdGFydF9taW5fbWF4X3JhbmdlLCBjb25zdHJhaW50LT5zdGFydF9yYW5nZS0+ZGV2LAorCQltaW5fc3RhcnQsIG1heF9zdGFydCAtIG1pbl9zdGFydCArIDEpOworCisJcmV0dXJuIHBlZF9nZW9tZXRyeV9pbnRlcnNlY3QgKCZzdGFydF9taW5fbWF4X3JhbmdlLAorCQkJCSAgICAgICBjb25zdHJhaW50LT5zdGFydF9yYW5nZSk7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIG5lYXJlc3Qgc3RhcnQgdGhhdCB3aWxsIGhhdmUgYXQgbGVhc3Qgb25lIG90aGVyIGVuZCB0aGF0CisgKiB0b2dldGhlciBzYXRpc2Z5IHRoZSBjb25zdHJhaW50LgorICovCitzdGF0aWMgUGVkU2VjdG9yCitfY29uc3RyYWludF9nZXRfbmVhcmVzdF9zdGFydF9zb2xuIChjb25zdCBQZWRDb25zdHJhaW50KiBjb25zdHJhaW50LAorCQkJCSAgICBQZWRTZWN0b3Igc3RhcnQpCit7CisJUGVkR2VvbWV0cnkqCXN0YXJ0X3JhbmdlOworCVBlZFNlY3RvcglyZXN1bHQ7CisKKwlzdGFydF9yYW5nZSA9IF9jb25zdHJhaW50X2dldF9jYW5vbmljYWxfc3RhcnRfcmFuZ2UgKGNvbnN0cmFpbnQpOworCWlmICghc3RhcnRfcmFuZ2UpCisJCXJldHVybiAtMTsKKwlyZXN1bHQgPSBwZWRfYWxpZ25tZW50X2FsaWduX25lYXJlc3QgKAorCQkJY29uc3RyYWludC0+c3RhcnRfYWxpZ24sIHN0YXJ0X3JhbmdlLCBzdGFydCk7CisJcGVkX2dlb21ldHJ5X2Rlc3Ryb3kgKHN0YXJ0X3JhbmdlKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogR2l2ZW4gYSBjb25zdHJhaW50IGFuZCBhIHN0YXJ0ICgiaGFsZiBvZiB0aGUgc29sdXRpb24iKSwgZmluZCB0aGUKKyAqIHJhbmdlIG9mIGFsbCBwb3NzaWJsZSBlbmRzLCBzdWNoIHRoYXQgYWxsIChzdGFydCwgZW5kKSBhcmUgc29sdXRpb25zCisgKiB0byBjb25zdHJhaW50IChzdWJqZWN0IHRvIGFkZGl0aW9uYWwgYWxpZ25tZW50IHJlcXVpcmVtZW50cykuCisgKi8KK3N0YXRpYyBQZWRHZW9tZXRyeSoKK19jb25zdHJhaW50X2dldF9lbmRfcmFuZ2UgKGNvbnN0IFBlZENvbnN0cmFpbnQqIGNvbnN0cmFpbnQsIFBlZFNlY3RvciBzdGFydCkKK3sKKwlQZWREZXZpY2UqCWRldiA9IGNvbnN0cmFpbnQtPmVuZF9yYW5nZS0+ZGV2OworCVBlZFNlY3RvcglmaXJzdF9taW5fbWF4X2VuZDsKKwlQZWRTZWN0b3IJbGFzdF9taW5fbWF4X2VuZDsKKwlQZWRHZW9tZXRyeQllbmRfbWluX21heF9yYW5nZTsKKworCWlmIChzdGFydCArIGNvbnN0cmFpbnQtPm1pbl9zaXplIC0gMSA+IGRldi0+bGVuZ3RoIC0gMSkKKwkJcmV0dXJuIE5VTEw7CisKKwlmaXJzdF9taW5fbWF4X2VuZCA9IHN0YXJ0ICsgY29uc3RyYWludC0+bWluX3NpemUgLSAxOworCWxhc3RfbWluX21heF9lbmQgPSBzdGFydCArIGNvbnN0cmFpbnQtPm1heF9zaXplIC0gMTsKKwlpZiAobGFzdF9taW5fbWF4X2VuZCA+IGRldi0+bGVuZ3RoIC0gMSkKKwkJbGFzdF9taW5fbWF4X2VuZCA9IGRldi0+bGVuZ3RoIC0gMTsKKworCXBlZF9nZW9tZXRyeV9pbml0ICgmZW5kX21pbl9tYXhfcmFuZ2UsIGRldiwKKwkJCSAgIGZpcnN0X21pbl9tYXhfZW5kLAorCQkJICAgbGFzdF9taW5fbWF4X2VuZCAtIGZpcnN0X21pbl9tYXhfZW5kICsgMSk7CisKKwlyZXR1cm4gcGVkX2dlb21ldHJ5X2ludGVyc2VjdCAoJmVuZF9taW5fbWF4X3JhbmdlLAorCQkgICAgICAgCQkgICAgICAgY29uc3RyYWludC0+ZW5kX3JhbmdlKTsKK30KKworLyoKKyAqIEdpdmVuICJjb25zdHJhaW50IiBhbmQgInN0YXJ0IiwgZmluZCB0aGUgZW5kIHRoYXQgaXMgbmVhcmVzdCB0bworICogImVuZCIsIHN1Y2ggdGhhdCAoInN0YXJ0IiwgdGhlIGVuZCkgdG9nZXRoZXIgZm9ybSBhIHNvbHV0aW9uIHRvCisgKiAiY29uc3RyYWludCIuCisgKi8KK3N0YXRpYyBQZWRTZWN0b3IKK19jb25zdHJhaW50X2dldF9uZWFyZXN0X2VuZF9zb2xuIChjb25zdCBQZWRDb25zdHJhaW50KiBjb25zdHJhaW50LAorCQkJCSAgUGVkU2VjdG9yIHN0YXJ0LCBQZWRTZWN0b3IgZW5kKQoreworCVBlZEdlb21ldHJ5KgllbmRfcmFuZ2U7CisJUGVkU2VjdG9yCXJlc3VsdDsKKworCWVuZF9yYW5nZSA9IF9jb25zdHJhaW50X2dldF9lbmRfcmFuZ2UgKGNvbnN0cmFpbnQsIHN0YXJ0KTsKKwlpZiAoIWVuZF9yYW5nZSkKKwkJcmV0dXJuIC0xOworCisJcmVzdWx0ID0gcGVkX2FsaWdubWVudF9hbGlnbl9uZWFyZXN0IChjb25zdHJhaW50LT5lbmRfYWxpZ24sIGVuZF9yYW5nZSwKKwkJICAgICAgIAkJCSAgICAgIGVuZCk7CisJcGVkX2dlb21ldHJ5X2Rlc3Ryb3kgKGVuZF9yYW5nZSk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBSZXR1cm4gdGhlIG5lYXJlc3QgcmVnaW9uIHRvIFxwIGdlb20gdGhhdCBzYXRpc2Z5IGEgXHAgY29uc3RyYWludC4KKyAqIAorICogTm90ZSB0aGF0ICJuZWFyZXN0IiBpcyBzb21ld2hhdCBhbWJpZ3VvdXMuICBUaGlzIGZ1bmN0aW9uIG1ha2VzCisgKiBubyBndWFyYW50ZWVzIGFib3V0IGhvdyB0aGlzIGFtYmlndWl0eSBpcyByZXNvdmxlZC4KKyAqCisgKiBccmV0dXJuIFBlZEdlb21ldHJ5LCBvciBOVUxMIHdoZW4gYSBccCBjb25zdHJhaW4gY2Fubm90IGJlIHNhdGlzZmllZAorICovCitQZWRHZW9tZXRyeSoKK3BlZF9jb25zdHJhaW50X3NvbHZlX25lYXJlc3QgKAorCWNvbnN0IFBlZENvbnN0cmFpbnQqIGNvbnN0cmFpbnQsIGNvbnN0IFBlZEdlb21ldHJ5KiBnZW9tKQoreworCVBlZFNlY3RvcglzdGFydDsKKwlQZWRTZWN0b3IJZW5kOworCVBlZEdlb21ldHJ5KglyZXN1bHQ7CisKKwlpZiAoY29uc3RyYWludCA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCVBFRF9BU1NFUlQgKGdlb20gIT0gTlVMTCwgcmV0dXJuIE5VTEwpOworCVBFRF9BU1NFUlQgKGNvbnN0cmFpbnQtPnN0YXJ0X3JhbmdlLT5kZXYgPT0gZ2VvbS0+ZGV2LCByZXR1cm4gTlVMTCk7CisKKwlzdGFydCA9IF9jb25zdHJhaW50X2dldF9uZWFyZXN0X3N0YXJ0X3NvbG4gKGNvbnN0cmFpbnQsIGdlb20tPnN0YXJ0KTsKKwlpZiAoc3RhcnQgPT0gLTEpCisJCXJldHVybiBOVUxMOworCWVuZCA9IF9jb25zdHJhaW50X2dldF9uZWFyZXN0X2VuZF9zb2xuIChjb25zdHJhaW50LCBzdGFydCwgZ2VvbS0+ZW5kKTsKKwlpZiAoZW5kID09IC0xKQorCQlyZXR1cm4gTlVMTDsKKworCXJlc3VsdCA9IHBlZF9nZW9tZXRyeV9uZXcgKGdlb20tPmRldiwgc3RhcnQsIGVuZCAtIHN0YXJ0ICsgMSk7CisJaWYgKCFyZXN1bHQpCisJCXJldHVybiBOVUxMOworCVBFRF9BU1NFUlQgKHBlZF9jb25zdHJhaW50X2lzX3NvbHV0aW9uIChjb25zdHJhaW50LCByZXN1bHQpLAorCQkgICAgcmV0dXJuIE5VTEwpOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogRmluZCB0aGUgbGFyZ2VzdCByZWdpb24gdGhhdCBzYXRpc2ZpZXMgYSBjb25zdHJhaW50LgorICogCisgKiBUaGVyZSBtaWdodCBiZSBtb3JlIHRoYW4gb25lIHNvbHV0aW9uLiAgVGhpcyBmdW5jdGlvbiBtYWtlcyBubworICogZ3VhcmFudGVlcyBhYm91dCB3aGljaCBzb2x1dGlvbiBpdCB3aWxsIGNob29zZSBpbiB0aGlzIGNhc2UuCisgKi8KK1BlZEdlb21ldHJ5KgorcGVkX2NvbnN0cmFpbnRfc29sdmVfbWF4IChjb25zdCBQZWRDb25zdHJhaW50KiBjb25zdHJhaW50KQoreworCVBlZERldmljZSoJZGV2OworCVBlZEdlb21ldHJ5CWZ1bGxfZGV2OworCisJaWYgKCFjb25zdHJhaW50KQorCQlyZXR1cm4gTlVMTDsKKwlkZXYgPSBjb25zdHJhaW50LT5zdGFydF9yYW5nZS0+ZGV2OworCXBlZF9nZW9tZXRyeV9pbml0ICgmZnVsbF9kZXYsIGRldiwgMCwgZGV2LT5sZW5ndGggLSAxKTsKKwlyZXR1cm4gcGVkX2NvbnN0cmFpbnRfc29sdmVfbmVhcmVzdCAoY29uc3RyYWludCwgJmZ1bGxfZGV2KTsKK30KKworLyoqCisgKiBDaGVjayB3aGV0aGVyIFxwIGdlb20gc2F0aXNmaWVzIHRoZSBnaXZlbiBjb25zdHJhaW50LgorICoKKyAqIFxyZXR1cm4gXGMgMSBpZiBpdCBkb2VzLgorICoqLworaW50CitwZWRfY29uc3RyYWludF9pc19zb2x1dGlvbiAoY29uc3QgUGVkQ29uc3RyYWludCogY29uc3RyYWludCwKKwkgICAgICAgCQkgICAgY29uc3QgUGVkR2VvbWV0cnkqIGdlb20pCit7CisJUEVEX0FTU0VSVCAoY29uc3RyYWludCAhPSBOVUxMLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAoZ2VvbSAhPSBOVUxMLCByZXR1cm4gMCk7CisKKwlpZiAoIXBlZF9hbGlnbm1lbnRfaXNfYWxpZ25lZCAoY29uc3RyYWludC0+c3RhcnRfYWxpZ24sIE5VTEwsCisJCQkJICAgICAgIGdlb20tPnN0YXJ0KSkKKwkJcmV0dXJuIDA7CisJaWYgKCFwZWRfYWxpZ25tZW50X2lzX2FsaWduZWQgKGNvbnN0cmFpbnQtPmVuZF9hbGlnbiwgTlVMTCwgZ2VvbS0+ZW5kKSkKKwkJcmV0dXJuIDA7CisJaWYgKCFwZWRfZ2VvbWV0cnlfdGVzdF9zZWN0b3JfaW5zaWRlIChjb25zdHJhaW50LT5zdGFydF9yYW5nZSwKKwkJCQkJICAgICAgZ2VvbS0+c3RhcnQpKQorCQlyZXR1cm4gMDsKKwlpZiAoIXBlZF9nZW9tZXRyeV90ZXN0X3NlY3Rvcl9pbnNpZGUgKGNvbnN0cmFpbnQtPmVuZF9yYW5nZSwgZ2VvbS0+ZW5kKSkKKwkJcmV0dXJuIDA7CisJaWYgKGdlb20tPmxlbmd0aCA8IGNvbnN0cmFpbnQtPm1pbl9zaXplKQorCQlyZXR1cm4gMDsKKwlpZiAoZ2VvbS0+bGVuZ3RoID4gY29uc3RyYWludC0+bWF4X3NpemUpCisJCXJldHVybiAwOworCXJldHVybiAxOworfQorCisvKioKKyAqIFJldHVybiBhIGNvbnN0cmFpbnQgdGhhdCBhbnkgcmVnaW9uIG9uIHRoZSBnaXZlbiBkZXZpY2Ugd2lsbCBzYXRpc2Z5LgorICovCitQZWRDb25zdHJhaW50KgorcGVkX2NvbnN0cmFpbnRfYW55IChjb25zdCBQZWREZXZpY2UqIGRldikKK3sKKwlQZWRHZW9tZXRyeQlmdWxsX2RldjsKKworCWlmICghcGVkX2dlb21ldHJ5X2luaXQgKCZmdWxsX2RldiwgZGV2LCAwLCBkZXYtPmxlbmd0aCkpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIHBlZF9jb25zdHJhaW50X25ldyAoCisJCQlwZWRfYWxpZ25tZW50X2FueSwKKwkJICAgICAgIAlwZWRfYWxpZ25tZW50X2FueSwKKwkJCSZmdWxsX2RldiwKKwkJCSZmdWxsX2RldiwKKwkJICAgICAgIAkxLAorCQkJZGV2LT5sZW5ndGgpOworfQorCisvKioKKyAqIFJldHVybiBhIGNvbnN0cmFpbnQgdGhhdCBvbmx5IHRoZSBnaXZlbiByZWdpb24gd2lsbCBzYXRpc2Z5LgorICovCitQZWRDb25zdHJhaW50KgorcGVkX2NvbnN0cmFpbnRfZXhhY3QgKGNvbnN0IFBlZEdlb21ldHJ5KiBnZW9tKQoreworCVBlZEFsaWdubWVudAlzdGFydF9hbGlnbjsKKwlQZWRBbGlnbm1lbnQJZW5kX2FsaWduOworCVBlZEdlb21ldHJ5CXN0YXJ0X3NlY3RvcjsKKwlQZWRHZW9tZXRyeQllbmRfc2VjdG9yOworCisJcGVkX2FsaWdubWVudF9pbml0ICgmc3RhcnRfYWxpZ24sIGdlb20tPnN0YXJ0LCAwKTsKKwlwZWRfYWxpZ25tZW50X2luaXQgKCZlbmRfYWxpZ24sIGdlb20tPmVuZCwgMCk7CisJcGVkX2dlb21ldHJ5X2luaXQgKCZzdGFydF9zZWN0b3IsIGdlb20tPmRldiwgZ2VvbS0+c3RhcnQsIDEpOworCXBlZF9nZW9tZXRyeV9pbml0ICgmZW5kX3NlY3RvciwgZ2VvbS0+ZGV2LCBnZW9tLT5lbmQsIDEpOworCisJcmV0dXJuIHBlZF9jb25zdHJhaW50X25ldyAoJnN0YXJ0X2FsaWduLCAmZW5kX2FsaWduLAorCQkJCSAgICZzdGFydF9zZWN0b3IsICZlbmRfc2VjdG9yLCAxLAorCQkJCSAgIGdlb20tPmRldi0+bGVuZ3RoKTsKK30KKworLyoqCisgKiBAfQorICovCisKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvY3MvZ2VvbS5jIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9jcy9nZW9tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGEzNjliZAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvY3MvZ2VvbS5jCkBAIC0wLDAgKzEsNDc1IEBACisvKgorICAgIGxpYnBhcnRlZCAtIGEgbGlicmFyeSBmb3IgbWFuaXB1bGF0aW5nIGRpc2sgcGFydGl0aW9ucworICAgIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwNSwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKKyovCisKKy8qKiBcZmlsZSBnZW9tLmMgKi8KKworCisvKioKKyAqIFxhZGR0b2dyb3VwIFBlZEdlb21ldHJ5CisgKgorICogXGJyaWVmIFBlZEdlb21ldHJ5IHJlcHJlc2VudHMgYSBjb250aW51b3VzIHJlZ2lvbiBvbiBhIGRldmljZS4gQWxsIGFkZHJlc3NpbmcKKyAqICAgICAgdGhyb3VnaCBhIFBlZEdlb21ldHJ5IG9iamVjdCBpcyBpbiB0ZXJtcyBvZiB0aGUgc3RhcnQgb2YgdGhlIGNvbnRpbnVvdXMKKyAqICAgICAgcmVnaW9uLgorICoKKyAqIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWx3YXlzIHRydWUgb24gYSBQZWRHZW9tZXRyeSBvYmplY3QgbWFuaXB1bGF0ZWQKKyAqIHdpdGggdGhlIEdOVSBQYXJ0ZWQgQVBJOgorICoKKyAqIC0gPHR0PnN0YXJ0ICsgbGVuZ3RoIC0gMSA9PSBlbmQ8L3R0PgorICogLSA8dHQ+bGVuZ3RoID4gMDwvdHQ+CisgKiAtIDx0dD5zdGFydCA+PSAwPC90dD4KKyAqIC0gPHR0PmVuZCA8IGRldi0+bGVuZ3RoPC90dD4KKyAqCisgKiBAeworICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworI2luY2x1ZGUgPHBhcnRlZC9wYXJ0ZWQuaD4KKyNpbmNsdWRlIDxwYXJ0ZWQvZGVidWcuaD4KKworI2lmIEVOQUJMRV9OTFMKKyMgIGluY2x1ZGUgPGxpYmludGwuaD4KKyMgIGRlZmluZSBfKFN0cmluZykgZGdldHRleHQgKFBBQ0tBR0UsIFN0cmluZykKKyNlbHNlCisjICBkZWZpbmUgXyhTdHJpbmcpIChTdHJpbmcpCisjZW5kaWYgLyogRU5BQkxFX05MUyAqLworCisvKioKKyAqIEluaXRpYWxpemUgdGhlIHByZXZpb3VzbHkgYWxsb2NhdGVkIFBlZEdlb21ldHJ5IFxwIGdlb20uCisgKi8KK2ludAorcGVkX2dlb21ldHJ5X2luaXQgKFBlZEdlb21ldHJ5KiBnZW9tLCBjb25zdCBQZWREZXZpY2UqIGRldiwKKwkJICAgUGVkU2VjdG9yIHN0YXJ0LCBQZWRTZWN0b3IgbGVuZ3RoKQoreworCVBFRF9BU1NFUlQgKGdlb20gIT0gTlVMTCwgcmV0dXJuIDApOworCVBFRF9BU1NFUlQgKGRldiAhPSBOVUxMLCByZXR1cm4gMCk7CisKKwlnZW9tLT5kZXYgPSAoUGVkRGV2aWNlKikgZGV2OworCXJldHVybiBwZWRfZ2VvbWV0cnlfc2V0IChnZW9tLCBzdGFydCwgbGVuZ3RoKTsKK30KKworLyoqCisgKiBDcmVhdGUgYSBuZXcgUGVkR2VvbWV0cnkgb2JqZWN0IG9uIFxwIGRpc2ssIHN0YXJ0aW5nIGF0IFxwIHN0YXJ0IHdpdGggYQorICogc2l6ZSBvZiBccCBsZW5ndGggc2VjdG9ycy4KKyAqCisgKiBccmV0dXJuIE5VTEwgb24gZmFpbHVyZS4KKyAqLworUGVkR2VvbWV0cnkqCitwZWRfZ2VvbWV0cnlfbmV3IChjb25zdCBQZWREZXZpY2UqIGRldiwgUGVkU2VjdG9yIHN0YXJ0LCBQZWRTZWN0b3IgbGVuZ3RoKQoreworCVBlZEdlb21ldHJ5KglnZW9tOworCisJUEVEX0FTU0VSVCAoZGV2ICE9IE5VTEwsIHJldHVybiBOVUxMKTsKKworCWdlb20gPSAoUGVkR2VvbWV0cnkqKSBwZWRfbWFsbG9jIChzaXplb2YgKFBlZEdlb21ldHJ5KSk7CisJaWYgKCFnZW9tKQorCQlnb3RvIGVycm9yOworCWlmICghcGVkX2dlb21ldHJ5X2luaXQgKGdlb20sIGRldiwgc3RhcnQsIGxlbmd0aCkpCisJCWdvdG8gZXJyb3JfZnJlZV9nZW9tOworCXJldHVybiBnZW9tOworCitlcnJvcl9mcmVlX2dlb206CisJcGVkX2ZyZWUgKGdlb20pOworZXJyb3I6CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogRHVwbGljYXRlIGEgUGVkR2VvbWV0cnkgb2JqZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY29uc3RydWN0cyBhIFBlZEdlb21ldHJ5IG9iamVjdCB0aGF0IGlzIGFuIGlkZW50aWNhbCBidXQKKyAqIGluZGVwZW5kZW50IGNvcHkgb2YgXHAgZ2VvbS4gIEJvdGggdGhlIGlucHV0LCBccCBnZW9tLCBhbmQgdGhlIG91dHB1dAorICogc2hvdWxkIGJlIGRlc3Ryb3llZCB3aXRoIHBlZF9nZW9tZXRyeV9kZXN0cm95KCkgd2hlbiB0aGV5IGFyZSBubworICogbG9uZ2VyIG5lZWRlZC4KKyAqIAorICogXHJldHVybiBOVUxMIG9uIGZhaWx1cmUuCisgKi8KK1BlZEdlb21ldHJ5KgorcGVkX2dlb21ldHJ5X2R1cGxpY2F0ZSAoY29uc3QgUGVkR2VvbWV0cnkqIGdlb20pCit7CisJUEVEX0FTU0VSVCAoZ2VvbSAhPSBOVUxMLCByZXR1cm4gTlVMTCk7CisJcmV0dXJuIHBlZF9nZW9tZXRyeV9uZXcgKGdlb20tPmRldiwgZ2VvbS0+c3RhcnQsIGdlb20tPmxlbmd0aCk7Cit9CisKKy8qKgorICogUmV0dXJuIGEgUGVkR2VvbWV0cnkgb2JqZWN0IHRoYXQgcmVmZXJzIHRvIHRoZSBpbnRlcnNlY3Rpb24gb2YKKyAqIFxwIGEgYW5kIFxwIGIuCisgKgorICogVGhpcyBmdW5jdGlvbiBjb25zdHJ1Y3RzIGEgUGVkR2VvbWV0cnkgb2JqZWN0IHRoYXQgZGVzY3JpYmVzIHRoZQorICogcmVnaW9uIHRoYXQgaXMgY29tbW9uIHRvIGJvdGggYSBhbmQgYi4gIElmIHRoZXJlIGlzIG5vIHN1Y2ggY29tbW9uCisgKiByZWdpb24sIGl0IHJldHVybnMgTlVMTC4gIChUaGlzIHNpdHVhdGlvbiBpcyBub3QgdHJlYXRlZCBhcyBhbgorICogZXJyb3IgYnkgbXVjaCBvZiBHTlUgUGFydGVkLikKKyAqLworUGVkR2VvbWV0cnkqCitwZWRfZ2VvbWV0cnlfaW50ZXJzZWN0IChjb25zdCBQZWRHZW9tZXRyeSogYSwgY29uc3QgUGVkR2VvbWV0cnkqIGIpCit7CisJUGVkU2VjdG9yCXN0YXJ0OworCVBlZFNlY3RvcgllbmQ7CisKKwlpZiAoIWEgfHwgIWIgfHwgYS0+ZGV2ICE9IGItPmRldikKKwkJcmV0dXJuIE5VTEw7CisKKwlzdGFydCA9IFBFRF9NQVggKGEtPnN0YXJ0LCBiLT5zdGFydCk7CisJZW5kID0gUEVEX01JTiAoYS0+ZW5kLCBiLT5lbmQpOworCWlmIChzdGFydCA+IGVuZCkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gcGVkX2dlb21ldHJ5X25ldyAoYS0+ZGV2LCBzdGFydCwgZW5kIC0gc3RhcnQgKyAxKTsKK30KKworLyoqCisgKiBEZXN0cm95IGEgUGVkR2VvbWV0cnkgb2JqZWN0LgorICovCit2b2lkCitwZWRfZ2VvbWV0cnlfZGVzdHJveSAoUGVkR2VvbWV0cnkqIGdlb20pCit7CisJUEVEX0FTU0VSVCAoZ2VvbSAhPSBOVUxMLCByZXR1cm4pOworCisJcGVkX2ZyZWUgKGdlb20pOworfQorCisvKioKKyAqIEFzc2lnbiBhIG5ldyBccCBzdGFydCwgXHAgZW5kIChpbXBsaWNpdGx5KSBhbmQgXHAgbGVuZ3RoIHRvIFxwIGdlb20uCisgKgorICogXHAgZ2VvbS0+ZW5kIGlzIGNhbGN1bGF0ZWQgZnJvbSBccCBzdGFydCBhbmQgXHAgbGVuZ3RoLgorICovCitpbnQKK3BlZF9nZW9tZXRyeV9zZXQgKFBlZEdlb21ldHJ5KiBnZW9tLCBQZWRTZWN0b3Igc3RhcnQsIFBlZFNlY3RvciBsZW5ndGgpCit7CisJUEVEX0FTU0VSVCAoZ2VvbSAhPSBOVUxMLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAoZ2VvbS0+ZGV2ICE9IE5VTEwsIHJldHVybiAwKTsKKworCWlmIChsZW5ndGggPCAxKSB7CisJCXBlZF9leGNlcHRpb25fdGhyb3cgKAorCQkJUEVEX0VYQ0VQVElPTl9FUlJPUiwKKwkJCVBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJXygiQ2FuJ3QgaGF2ZSB0aGUgZW5kIGJlZm9yZSB0aGUgc3RhcnQhIikpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKHN0YXJ0IDwgMCB8fCBzdGFydCArIGxlbmd0aCAtIDEgPj0gZ2VvbS0+ZGV2LT5sZW5ndGgpIHsKKwkJcGVkX2V4Y2VwdGlvbl90aHJvdyAoCisJCQlQRURfRVhDRVBUSU9OX0VSUk9SLAorCQkJUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQlfKCJDYW4ndCBoYXZlIGEgcGFydGl0aW9uIG91dHNpZGUgdGhlIGRpc2shIikpOworCQlyZXR1cm4gMDsKKyAJfQorCisJZ2VvbS0+c3RhcnQgPSBzdGFydDsKKwlnZW9tLT5sZW5ndGggPSBsZW5ndGg7CisJZ2VvbS0+ZW5kID0gc3RhcnQgKyBsZW5ndGggLSAxOworCisJcmV0dXJuIDE7Cit9CisKKy8qKgorICogQXNzaWduIGEgbmV3IHN0YXJ0IHRvIFxwIGdlb20gd2l0aG91dCBjaGFuZ2luZyBccCBnZW9tLT5lbmQuCisgKgorICogXHAgZ2VvbS0+bGVuZ3RoIGlzIHVwZGF0ZWQgYWNjb3JkaW5nbHkuCisgKi8KK2ludAorcGVkX2dlb21ldHJ5X3NldF9zdGFydCAoUGVkR2VvbWV0cnkqIGdlb20sIFBlZFNlY3RvciBzdGFydCkKK3sKKwlyZXR1cm4gcGVkX2dlb21ldHJ5X3NldCAoZ2VvbSwgc3RhcnQsIGdlb20tPmVuZCAtIHN0YXJ0ICsgMSk7Cit9CisKKy8qKgorICogQXNzaWduIGEgbmV3IGVuZCB0byBccCBnZW9tIHdpdGhvdXQgY2hhbmdpbmcgXHAgZ2VvbS0+c3RhcnQuCisgKgorICogXHAgZ2VvbS0+bGVuZ3RoIGlzIHVwZGF0ZWQgYWNjb3JkaW5nbHkuCisgKi8KK2ludAorcGVkX2dlb21ldHJ5X3NldF9lbmQgKFBlZEdlb21ldHJ5KiBnZW9tLCBQZWRTZWN0b3IgZW5kKQoreworCXJldHVybiBwZWRfZ2VvbWV0cnlfc2V0IChnZW9tLCBnZW9tLT5zdGFydCwgZW5kIC0gZ2VvbS0+c3RhcnQgKyAxKTsKK30KKy8qKgorICogVGVzdCBpZiBccCBhIG92ZXJsYXBzIHdpdGggXHAgYi4KKyAqCisgKiBUaGF0IGlzLCB0aGV5IGxpZSBvbiB0aGUgc2FtZSBwaHlzaWNhbCBkZXZpY2UsIGFuZCB0aGV5IHNoYXJlCisgKiB0aGUgc2FtZSBwaHlzaWNhbCByZWdpb24gYXQgbGVhc3QgcGFydGlhbGx5LgorICogCisgKiBccmV0dXJuIDEgaWYgXHAgYSBhbmQgXHAgYiBvdmVybGFwLgorICovCitpbnQKK3BlZF9nZW9tZXRyeV90ZXN0X292ZXJsYXAgKGNvbnN0IFBlZEdlb21ldHJ5KiBhLCBjb25zdCBQZWRHZW9tZXRyeSogYikKK3sKKwlQRURfQVNTRVJUIChhICE9IE5VTEwsIHJldHVybiAwKTsKKwlQRURfQVNTRVJUIChiICE9IE5VTEwsIHJldHVybiAwKTsKKworCWlmIChhLT5kZXYgIT0gYi0+ZGV2KQorCQlyZXR1cm4gMDsKKworCWlmIChhLT5zdGFydCA8IGItPnN0YXJ0KQorCQlyZXR1cm4gYS0+ZW5kID49IGItPnN0YXJ0OworCWVsc2UKKwkJcmV0dXJuIGItPmVuZCA+PSBhLT5zdGFydDsKK30KKworLyoqCisgKiBUZXN0cyBpZiBccCBiIGxpZXMgY29tcGxldGVseSB3aXRoaW4gXHAgYS4gIFRoYXQgaXMsIHRoZXkgbGllIG9uIHRoZSBzYW1lCisgKiBwaHlzaWNhbCBkZXZpY2UsIGFuZCBhbGwgb2YgdGhlIFxwIGIncyByZWdpb24gaXMgY29udGFpbmVkIGluc2lkZQorICogXHAgYSdzLgorICoKKyAqIFxyZXR1cm4gMSBpZiB0aGUgcmVnaW9uIFxwIGIgZGVzY3JpYmVzIGlzIGNvbnRhaW5lZCBlbnRpcmVseSBpbnNpZGUgXHAgYQorKi8KK2ludAorcGVkX2dlb21ldHJ5X3Rlc3RfaW5zaWRlIChjb25zdCBQZWRHZW9tZXRyeSogYSwgY29uc3QgUGVkR2VvbWV0cnkqIGIpCit7CisJUEVEX0FTU0VSVCAoYSAhPSBOVUxMLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAoYiAhPSBOVUxMLCByZXR1cm4gMCk7CisKKwlpZiAoYS0+ZGV2ICE9IGItPmRldikKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gYi0+c3RhcnQgPj0gYS0+c3RhcnQgJiYgYi0+ZW5kIDw9IGEtPmVuZDsKK30KKworLyoqCisgKiBUZXN0cyBpZiBcYSBhIGFuZCBccCBiIHJlZmVyIHRvIHRoZSBzYW1lIHBoeXNpY2FsIHJlZ2lvbi4KKyAqIAorICogXHJldHVybiAxIGlmIFxwIGEgYW5kIFxwIGIgZGVzY3JpYmUgdGhlIHNhbWUgcmVnaW9ucworICoKKyAqLworaW50CitwZWRfZ2VvbWV0cnlfdGVzdF9lcXVhbCAoY29uc3QgUGVkR2VvbWV0cnkqIGEsIGNvbnN0IFBlZEdlb21ldHJ5KiBiKQoreworCVBFRF9BU1NFUlQgKGEgIT0gTlVMTCwgcmV0dXJuIDApOworCVBFRF9BU1NFUlQgKGIgIT0gTlVMTCwgcmV0dXJuIDApOworCisJcmV0dXJuIGEtPmRldiA9PSBiLT5kZXYKKwkgICAgICAgJiYgYS0+c3RhcnQgPT0gYi0+c3RhcnQKKwkgICAgICAgJiYgYS0+ZW5kID09IGItPmVuZDsKK30KKworLyoqCisgKiBUZXN0cyBpZiBccCBzZWN0b3IgaXMgaW5zaWRlIFxwIGdlb20uCisgKgorICogXHJldHVybiAxIGlmIHNlY3RvciBsaWVzIHdpdGhpbiB0aGUgXHAgcmVnaW9uIHRoYXQgXHAgZ2VvbSBkZXNjcmliZXMKKyAqLworaW50CitwZWRfZ2VvbWV0cnlfdGVzdF9zZWN0b3JfaW5zaWRlIChjb25zdCBQZWRHZW9tZXRyeSogZ2VvbSwgUGVkU2VjdG9yIHNlY3RvcikKK3sKKwlQRURfQVNTRVJUIChnZW9tICE9IE5VTEwsIHJldHVybiAwKTsKKworCXJldHVybiBzZWN0b3IgPj0gZ2VvbS0+c3RhcnQgJiYgc2VjdG9yIDw9IGdlb20tPmVuZDsKK30KKworLyoqIAorICogUmVhZHMgZGF0YSBmcm9tIHRoZSByZWdpb24gcmVwcmVzZW50ZWQgYnkgXHAgZ2VvbS4gIFxwIG9mZnNldCBpcyB0aGUKKyAqIGxvY2F0aW9uIGZyb20gd2l0aGluIHRoZSByZWdpb24sIG5vdCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgZGlzay4KKyAqIFxwIGNvdW50IHNlY3RvcnMgYXJlIHJlYWQgaW50byBccCBidWZmZXIuCisgKiBUaGlzIGlzIGVzc2VudGlhbGx5IGVxdWl2YWxlbnQgdG86CisgKiBcY29kZQorICogCXBlZF9kZXZpY2VfcmVhZCAoZ2VvbS0+ZGlzay0+ZGV2LCBidWZmZXIsIGdlb20tPnN0YXJ0ICsgb2Zmc2V0LCBjb3VudCkKKyAqIFxlbmRjb2RlCisgKgorICogXHRocm93cyBQRURfRVhDRVBUSU9OX0VSUk9SIHdoZW4gYXR0ZW1wdGluZyB0byByZWFkIHNlY3RvcnMgb3V0c2lkZSBvZgorICogcGFydGl0aW9uCisgKgorICogXHJldHVybiAwIG9uIGZhaWx1cmUKKyAqLworaW50CitwZWRfZ2VvbWV0cnlfcmVhZCAoY29uc3QgUGVkR2VvbWV0cnkqIGdlb20sIHZvaWQqIGJ1ZmZlciwgUGVkU2VjdG9yIG9mZnNldCwKKwkJICAgUGVkU2VjdG9yIGNvdW50KQoreworCVBlZFNlY3RvcglyZWFsX3N0YXJ0OworCisJUEVEX0FTU0VSVCAoZ2VvbSAhPSBOVUxMLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAoYnVmZmVyICE9IE5VTEwsIHJldHVybiAwKTsKKwlQRURfQVNTRVJUIChvZmZzZXQgPj0gMCwgcmV0dXJuIDApOworCVBFRF9BU1NFUlQgKGNvdW50ID49IDAsIHJldHVybiAwKTsKKwkKKwlyZWFsX3N0YXJ0ID0gZ2VvbS0+c3RhcnQgKyBvZmZzZXQ7CisKKwlpZiAocmVhbF9zdGFydCArIGNvdW50IC0gMSA+IGdlb20tPmVuZCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIXBlZF9kZXZpY2VfcmVhZCAoZ2VvbS0+ZGV2LCBidWZmZXIsIHJlYWxfc3RhcnQsIGNvdW50KSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKKy8qKgorICogRmx1c2hlcyB0aGUgY2FjaGUgb24gXHAgZ2VvbS4KKyAqICAKKyAqIFRoaXMgZnVuY3Rpb24gZmx1c2hlcyBhbGwgd3JpdGUtYmVoaW5kIGNhY2hlcyB0aGF0IG1pZ2h0IGJlIGhvbGRpbmcKKyAqIHdyaXRlcyBtYWRlIGJ5IHBlZF9nZW9tZXRyeV93cml0ZSgpIHRvIFxwIGdlb20uICBJdCBpcyBzbG93LCBiZWNhdXNlCisgKiBpdCBndWFyYW50ZWVzIGNhY2hlIGNvaGVyZW5jeSBhbW9uZyBhbGwgcmVsZXZhbnQgY2FjaGVzLgorICogCisgKiBccmV0dXJuIDAgb24gZmFpbHVyZQorICovCitpbnQKK3BlZF9nZW9tZXRyeV9zeW5jIChQZWRHZW9tZXRyeSogZ2VvbSkKK3sKKwlQRURfQVNTRVJUIChnZW9tICE9IE5VTEwsIHJldHVybiAwKTsKKwlyZXR1cm4gcGVkX2RldmljZV9zeW5jIChnZW9tLT5kZXYpOworfQorCisvKioKKyAqIEZsdXNoZXMgdGhlIGNhY2hlIG9uIFxwIGdlb20uIAorICoKKyAqIFRoaXMgZnVuY3Rpb24gZmx1c2hlcyBhbGwgd3JpdGUtYmVoaW5kIGNhY2hlcyB0aGF0IG1pZ2h0IGJlIGhvbGRpbmcgd3JpdGVzCisgKiBtYWRlIGJ5IHBlZF9nZW9tZXRyeV93cml0ZSgpIHRvIFxwIGdlb20uICBJdCBkb2VzIE5PVCBlbnN1cmUgY2FjaGUgY29oZXJlbmN5CisgKiB3aXRoIG90aGVyIGNhY2hlcyB0aGF0IGNhY2hlIGRhdGEgaW4gdGhlIHJlZ2lvbiBkZXNjcmliZWQgYnkgXHAgZ2VvbS4gCisgKiBJZiB5b3UgbmVlZCBjYWNoZSBjb2hlcmVuY3ksIHVzZSBwZWRfZ2VvbWV0cnlfc3luYygpIGluc3RlYWQuCisgKiAKKyAqIFxyZXR1cm4gMCBvbiBmYWlsdXJlCisgKi8KK2ludAorcGVkX2dlb21ldHJ5X3N5bmNfZmFzdCAoUGVkR2VvbWV0cnkqIGdlb20pCit7CisJUEVEX0FTU0VSVCAoZ2VvbSAhPSBOVUxMLCByZXR1cm4gMCk7CisJcmV0dXJuIHBlZF9kZXZpY2Vfc3luY19mYXN0IChnZW9tLT5kZXYpOworfQorCisvKioKKyAqIFdyaXRlcyBkYXRhIGludG8gdGhlIHJlZ2lvbiByZXByZXNlbnRlZCBieSBccCBnZW9tLiAgXHAgb2Zmc2V0IGlzIHRoZQorICogbG9jYXRpb24gZnJvbSB3aXRoaW4gdGhlIHJlZ2lvbiwgbm90IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBkaXNrLgorICogXHAgY291bnQgc2VjdG9ycyBhcmUgd3JpdHRlbi4KKyAqCisgKiBccmV0dXJuIDAgb24gZmFpbHVyZQorICovCitpbnQKK3BlZF9nZW9tZXRyeV93cml0ZSAoUGVkR2VvbWV0cnkqIGdlb20sIGNvbnN0IHZvaWQqIGJ1ZmZlciwgUGVkU2VjdG9yIG9mZnNldCwKKwkJICAgIFBlZFNlY3RvciBjb3VudCkKK3sKKwlpbnQJCWV4Y2VwdGlvbl9zdGF0dXM7CisJUGVkU2VjdG9yCXJlYWxfc3RhcnQ7CisKKwlQRURfQVNTRVJUIChnZW9tICE9IE5VTEwsIHJldHVybiAwKTsKKwlQRURfQVNTRVJUIChidWZmZXIgIT0gTlVMTCwgcmV0dXJuIDApOworCVBFRF9BU1NFUlQgKG9mZnNldCA+PSAwLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAoY291bnQgPj0gMCwgcmV0dXJuIDApOworCQorCXJlYWxfc3RhcnQgPSBnZW9tLT5zdGFydCArIG9mZnNldDsKKworCWlmIChyZWFsX3N0YXJ0ICsgY291bnQgLSAxID4gZ2VvbS0+ZW5kKSB7CisJCWV4Y2VwdGlvbl9zdGF0dXMgPSBwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCVBFRF9FWENFUFRJT05fRVJST1IsCisJCQlQRURfRVhDRVBUSU9OX0lHTk9SRV9DQU5DRUwsCisJCQlfKCJBdHRlbXB0IHRvIHdyaXRlIHNlY3RvcnMgJWxkLSVsZCBvdXRzaWRlIG9mICIKKwkJCSAgInBhcnRpdGlvbiBvbiAlcy4iKSwKKwkJCShsb25nKSBvZmZzZXQsIChsb25nKSAob2Zmc2V0ICsgY291bnQgLSAxKSwKKwkJCWdlb20tPmRldi0+cGF0aCk7CisJCXJldHVybiBleGNlcHRpb25fc3RhdHVzID09IFBFRF9FWENFUFRJT05fSUdOT1JFOworCX0KKworCWlmICghcGVkX2RldmljZV93cml0ZSAoZ2VvbS0+ZGV2LCBidWZmZXIsIHJlYWxfc3RhcnQsIGNvdW50KSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKKy8qKgorICogQ2hlY2tzIGZvciBwaHlzaWNhbCBkaXNrIGVycm9ycy4gIFx0b2RvIHVzZSBwZWRfZGV2aWNlX2NoZWNrKCkKKyAqCisgKiBDaGVja3MgYSByZWdpb24gZm9yIHBoeXNpY2FsIGRlZmVjdHMgb24gXHAgZ2VvbS4gIFxwIGJ1ZmZlciBpcyB1c2VkCisgKiBmb3IgdGVtcG9yYXJ5IHN0b3JhZ2UgZm9yIHBlZF9nZW9tZXRyeV9jaGVjaygpLCBhbmQgaGFzIGFuIHVuZGVmaW5lZAorICogdmFsdWUuICBccCBidWZmZXIgaXMgXHAgYnVmZmVyX3NpemUgc2VjdG9ycyBsb25nLgorICogVGhlIHJlZ2lvbiBjaGVja2VkIHN0YXJ0cyBhdCBccCBvZmZzZXQgc2VjdG9ycyBpbnNpZGUgdGhlCisgKiByZWdpb24gcmVwcmVzZW50ZWQgYnkgXHAgZ2VvbSwgYW5kIGlzIFxwIGNvdW50IHNlY3RvcnMgbG9uZy4KKyAqIFxwIGdyYW51bGFyaXR5IHNwZWNpZmljaWVzIGhvdyBzZWN0b3JzIHNob3VsZCBiZSBncm91cGVkCisgKiB0b2dldGhlci4gIFRoZSBmaXJzdCBiYWQgc2VjdG9yIHRvIGJlIHJldHVybmVkIHdpbGwgYWx3YXlzIGJlIGluCisgKiB0aGUgZm9ybToKKyAqIAk8dHQ+b2Zmc2V0ICsgbiAqIGdyYW51bGFyaXR5PC90dD4KKyAqCisgKiBccmV0dXJuIHRoZSBmaXJzdCBiYWQgc2VjdG9yLCBvciAwIGlmIHRoZXJlIHdlcmUgbm8gcGh5c2ljYWwgZXJyb3JzCisgKi8KK1BlZFNlY3RvcgorcGVkX2dlb21ldHJ5X2NoZWNrIChQZWRHZW9tZXRyeSogZ2VvbSwgdm9pZCogYnVmZmVyLCBQZWRTZWN0b3IgYnVmZmVyX3NpemUsCisJCSAgICBQZWRTZWN0b3Igb2Zmc2V0LCBQZWRTZWN0b3IgZ3JhbnVsYXJpdHksIFBlZFNlY3RvciBjb3VudCwKKwkJICAgIFBlZFRpbWVyKiB0aW1lcikKK3sKKwlQZWRTZWN0b3IJZ3JvdXA7CisJUGVkU2VjdG9yCWk7CisJUGVkU2VjdG9yCXJlYWRfbGVuOworCisJUEVEX0FTU0VSVCAoZ2VvbSAhPSBOVUxMLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAoYnVmZmVyICE9IE5VTEwsIHJldHVybiAwKTsKKworCXBlZF90aW1lcl9yZXNldCAodGltZXIpOworCXBlZF90aW1lcl9zZXRfc3RhdGVfbmFtZSAodGltZXIsIF8oImNoZWNraW5nIGZvciBiYWQgYmxvY2tzIikpOworCityZXRyeToKKwlwZWRfZXhjZXB0aW9uX2ZldGNoX2FsbCgpOworCWZvciAoZ3JvdXAgPSBvZmZzZXQ7IGdyb3VwIDwgb2Zmc2V0ICsgY291bnQ7IGdyb3VwICs9IGJ1ZmZlcl9zaXplKSB7CisJCXBlZF90aW1lcl91cGRhdGUgKHRpbWVyLCAxLjAgKiAoZ3JvdXAgLSBvZmZzZXQpIC8gY291bnQpOworCQlyZWFkX2xlbiA9IFBFRF9NSU4gKGJ1ZmZlcl9zaXplLCBvZmZzZXQgKyBjb3VudCAtIGdyb3VwKTsKKwkJaWYgKCFwZWRfZ2VvbWV0cnlfcmVhZCAoZ2VvbSwgYnVmZmVyLCBncm91cCwgcmVhZF9sZW4pKQorCQkJZ290byBmb3VuZF9lcnJvcjsKKwl9CisJcGVkX2V4Y2VwdGlvbl9sZWF2ZV9hbGwoKTsKKwlwZWRfdGltZXJfdXBkYXRlICh0aW1lciwgMS4wKTsKKwlyZXR1cm4gMDsKKworZm91bmRfZXJyb3I6CisJcGVkX2V4Y2VwdGlvbl9jYXRjaCgpOworCWZvciAoaSA9IGdyb3VwOyBpICsgZ3JhbnVsYXJpdHkgPCBncm91cCArIGNvdW50OyBpICs9IGdyYW51bGFyaXR5KSB7CisJCWlmICghcGVkX2dlb21ldHJ5X3JlYWQgKGdlb20sIGJ1ZmZlciwgaSwgZ3JhbnVsYXJpdHkpKSB7CisJCQlwZWRfZXhjZXB0aW9uX2NhdGNoKCk7CisJCQlwZWRfZXhjZXB0aW9uX2xlYXZlX2FsbCgpOworCQkJcmV0dXJuIGk7CisJCX0KKwl9CisJcGVkX2V4Y2VwdGlvbl9sZWF2ZV9hbGwoKTsKKwlnb3RvIHJldHJ5OyAgIC8qIHdlaXJkOiBmYWlsdXJlIG9uIGdyb3VwIHJlYWQsIGJ1dCBub3QgaW5kaXZpZHVhbGx5ICovCit9CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiB0YWtlcyBhIFxwIHNlY3RvciBpbnNpZGUgdGhlIHJlZ2lvbiBkZXNjcmliZWQgYnkgc3JjLCBhbmQKKyAqIHJldHVybnMgdGhhdCBzZWN0b3IncyBhZGRyZXNzIGluc2lkZSBkc3QuICBUaGlzIG1lYW5zIHRoYXQKKyAqCisgKiBcY29kZQorICogCXBlZF9nZW9tZXRyeV9yZWFkIChkc3QsIGJ1ZiwgcGVkX2dlb21ldHJ5X21hcChkc3QsIHNyYywgc2VjdG9yKSwgMSkKKyAqIFxlbmRjb2RlCisgKgorICogZG9lcyB0aGUgc2FtZSB0aGluZyBhcworICogCisgKiBcY29kZQorICogCXBlZF9nZW9tZXRyeV9yZWFkIChzcmMsIGJ1Ziwgc2VjdG9yLCAxKQorICogXGVuZGNvZGUKKyAqCisgKiBDbGVhcmx5LCB0aGlzIHdpbGwgb25seSB3b3JrIGlmIFxwIHNyYyBhbmQgXHAgZHN0IG92ZXJsYXAuICAKKyAqCisgKiBccmV0dXJuIC0xIGlmIFxwIHNlY3RvciBpcyBub3Qgd2l0aGluIFxwIGRzdCdzIHNwYWNlLCAKKyAqIAlvciBccCBzZWN0b3IncyBhZGRyZXNzIGluc2lkZSBccCBkc3QKKyAqIAorICovCitQZWRTZWN0b3IKK3BlZF9nZW9tZXRyeV9tYXAgKGNvbnN0IFBlZEdlb21ldHJ5KiBkc3QsIGNvbnN0IFBlZEdlb21ldHJ5KiBzcmMsCisJCSAgUGVkU2VjdG9yIHNlY3RvcikKK3sKKwlQZWRTZWN0b3IJcmVzdWx0OworCisJUEVEX0FTU0VSVCAoZHN0ICE9IE5VTEwsIHJldHVybiAwKTsKKwlQRURfQVNTRVJUIChzcmMgIT0gTlVMTCwgcmV0dXJuIDApOworCisJaWYgKCFwZWRfZ2VvbWV0cnlfdGVzdF9zZWN0b3JfaW5zaWRlIChzcmMsIHNlY3RvcikpCisJCXJldHVybiAtMTsKKwlpZiAoZHN0LT5kZXYgIT0gc3JjLT5kZXYpCisJCXJldHVybiAtMTsKKworCXJlc3VsdCA9IHNyYy0+c3RhcnQgKyBzZWN0b3IgLSBkc3QtPnN0YXJ0OworCWlmIChyZXN1bHQgPCAwIHx8IHJlc3VsdCA+IGRzdC0+bGVuZ3RoKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKiogQH0gKi8KKwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9jcy9uYXRtYXRoLmMgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2NzL25hdG1hdGguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzI1Y2JiCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9jcy9uYXRtYXRoLmMKQEAgLTAsMCArMSw0OTYgQEAKKy8qCisgICAgbGlicGFydGVkIC0gYSBsaWJyYXJ5IGZvciBtYW5pcHVsYXRpbmcgZGlzayBwYXJ0aXRpb25zCisgICAgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQorKi8KKworLyoqCisgKiBcZmlsZSBuYXRtYXRoLmMKKyAqLworCisvKioKKyAqIFxhZGR0b2dyb3VwIFBlZEFsaWdubWVudAorICoKKyAqIFxicmllZiBBbGlnbm1lbnQgY29uc3RyYWludCBtb2RlbC4KKyAqCisgKiBUaGlzIHBhcnQgb2YgbGlicGFydGVkIG1vZGVscyBhbGlnbm1lbnQgY29uc3RyYWludHMuCisgKgorICogQHsKKyAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8cGFydGVkL3BhcnRlZC5oPgorI2luY2x1ZGUgPHBhcnRlZC9kZWJ1Zy5oPgorI2luY2x1ZGUgPHBhcnRlZC9uYXRtYXRoLmg+CisKKy8qIEFycnJnaGhoISAgV2h5IGRvZXNuJ3QgQyBoYXZlIHR1cGxlcz8gKi8KK3R5cGVkZWYgc3RydWN0IHsKKwlQZWRTZWN0b3IJZ2NkOwkJLyogImNvbnZlcmdlcyIgdG8gdGhlIGdjZCAqLworCVBlZFNlY3Rvcgl4OworCVBlZFNlY3Rvcgl5OworfSBFdWNsaWRUcmlwbGU7CisKK3N0YXRpYyBjb25zdCBQZWRBbGlnbm1lbnQgX2FueSA9IHsKKwlvZmZzZXQ6CQkwLAorCWdyYWluX3NpemU6CTEKK307CisKK2NvbnN0IFBlZEFsaWdubWVudCogcGVkX2FsaWdubWVudF9hbnkgPSAmX2FueTsKK2NvbnN0IFBlZEFsaWdubWVudCogcGVkX2FsaWdubWVudF9ub25lID0gTlVMTDsKKworLyogVGhpcyBmdW5jdGlvbiByZXR1cm5zICJhIG1vZCBiIiwgdGhlIHdheSBDIHNob3VsZCBoYXZlIGRvbmUgaXQhCisgKiBNYXRoZW1hdGljaWFucyBwcmVmZXIgLTMgbW9kIDQgdG8gYmUgMy4gIFJlYXNvbjogZGl2aXNpb24gYnkgTgorICogaXMgYWxsIGFib3V0IGFkZGluZyBvciBzdWJ0cmFjdGluZyBOLCBhbmQgd2UgbGlrZSBvdXIgcmVtYWluZGVycworICogdG8gYmUgYmV0d2VlbiAwIGFuZCBOIC0gMS4KKyAqLworUGVkU2VjdG9yCithYnNfbW9kIChQZWRTZWN0b3IgYSwgUGVkU2VjdG9yIGIpCit7CisJaWYgKGEgPCAwKQorCQlyZXR1cm4gYSAlIGIgKyBiOworCWVsc2UKKwkJcmV0dXJuIGEgJSBiOworfQorCisvKiBSb3VuZHMgYSBudW1iZXIgZG93biB0byB0aGUgY2xvc2VzdCBudW1iZXIgdGhhdCBpcyBhIG11bHRpcGxlIG9mCisgKiBncmFpbl9zaXplLgorICovCitQZWRTZWN0b3IKK3BlZF9yb3VuZF9kb3duX3RvIChQZWRTZWN0b3Igc2VjdG9yLCBQZWRTZWN0b3IgZ3JhaW5fc2l6ZSkKK3sKKwlyZXR1cm4gc2VjdG9yIC0gYWJzX21vZCAoc2VjdG9yLCBncmFpbl9zaXplKTsKK30KKworaW5saW5lIFBlZFNlY3RvcgorcGVkX2Rpdl9yb3VuZF91cCAoUGVkU2VjdG9yIG51bWVyYXRvciwgUGVkU2VjdG9yIGRpdmlzb3IpCit7CisgICAgICAgICAgICAgICAgcmV0dXJuIChudW1lcmF0b3IgKyBkaXZpc29yIC0gMSkgLyBkaXZpc29yOworfQorCitpbmxpbmUgUGVkU2VjdG9yCitwZWRfZGl2X3JvdW5kX3RvX25lYXJlc3QgKFBlZFNlY3RvciBudW1lcmF0b3IsIFBlZFNlY3RvciBkaXZpc29yKQoreworICAgICAgICAgICAgICAgIHJldHVybiAobnVtZXJhdG9yICsgZGl2aXNvci8yKSAvIGRpdmlzb3I7Cit9CisKKy8qIFJvdW5kcyBhIG51bWJlciB1cCB0byB0aGUgY2xvc2VzdCBudW1iZXIgdGhhdCBpcyBhIG11bHRpcGxlIG9mCisgKiBncmFpbl9zaXplLgorICovCitQZWRTZWN0b3IKK3BlZF9yb3VuZF91cF90byAoUGVkU2VjdG9yIHNlY3RvciwgUGVkU2VjdG9yIGdyYWluX3NpemUpCit7CisJaWYgKHNlY3RvciAlIGdyYWluX3NpemUpCisJCXJldHVybiBwZWRfcm91bmRfZG93bl90byAoc2VjdG9yLCBncmFpbl9zaXplKSArIGdyYWluX3NpemU7CisJZWxzZQorCQlyZXR1cm4gc2VjdG9yOworfQorCisvKiBSb3VuZHMgYSBudW1iZXIgdG8gdGhlIGNsb3Nlc3QgbnVtYmVyIHRoYXQgaXMgYSBtdWx0aXBsZSBvZiBncmFpbl9zaXplLiAqLworUGVkU2VjdG9yCitwZWRfcm91bmRfdG9fbmVhcmVzdCAoUGVkU2VjdG9yIHNlY3RvciwgUGVkU2VjdG9yIGdyYWluX3NpemUpCit7CisJaWYgKHNlY3RvciAlIGdyYWluX3NpemUgPiBncmFpbl9zaXplLzIpCisJCXJldHVybiBwZWRfcm91bmRfdXBfdG8gKHNlY3RvciwgZ3JhaW5fc2l6ZSk7CisJZWxzZQorCQlyZXR1cm4gcGVkX3JvdW5kX2Rvd25fdG8gKHNlY3RvciwgZ3JhaW5fc2l6ZSk7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbGFyZ2VzdCBudW1iZXIgdGhhdCBkaXZpZGVzIGJvdGggYSBhbmQgYi4KKyAqIEl0IHVzZXMgdGhlIGFuY2llbnQgRXVjbGlkZWFuIGFsZ29yaXRobS4KKyAqLworUGVkU2VjdG9yCitwZWRfZ3JlYXRlc3RfY29tbW9uX2Rpdmlzb3IgKFBlZFNlY3RvciBhLCBQZWRTZWN0b3IgYikKK3sKKwlQRURfQVNTRVJUIChhID49IDAsIHJldHVybiAwKTsKKwlQRURfQVNTRVJUIChiID49IDAsIHJldHVybiAwKTsKKworCS8qIFB1dCB0aGUgYXJndW1lbnRzIGluIHRoZSAicmlnaHQiIGZvcm1hdC4gIChSZWN1cnNpdmUgY2FsbHMgbWFkZSBieQorCSAqIHRoaXMgZnVuY3Rpb24gYXJlIGFsd2F5cyBpbiB0aGUgcmlnaHQgZm9ybWF0LikKKwkgKi8KKwlpZiAoYiA+IGEpCisJCXJldHVybiBwZWRfZ3JlYXRlc3RfY29tbW9uX2Rpdmlzb3IgKGIsIGEpOworCisJaWYgKGIpCisJCXJldHVybiBwZWRfZ3JlYXRlc3RfY29tbW9uX2Rpdmlzb3IgKGIsIGEgJSBiKTsKKwllbHNlCisJCXJldHVybiBhOworfQorCisvKioKKyAqIEluaXRpYWxpemUgYSBwcmVhbGxvY2F0ZWQgcGllY2Ugb2YgbWVtb3J5IGZvciBhbiBhbGlnbm1lbnQgb2JqZWN0CisgKiAodXNlZCBieSBQZWRDb25zdHJhaW50KS4KKyAqCisgKiBUaGUgb2JqZWN0IHdpbGwgcmVwcmVzZW50IGFsbCBzZWN0b3JzIFxlIHMgZm9yIHdoaWNoIHRoZSBlcXVhdGlvbiAKKyAqIDx0dD5zID0gb2Zmc2V0ICsgWCAqIGdyYWluX3NpemU8L3R0PiBob2xkcy4KKyAqLworaW50CitwZWRfYWxpZ25tZW50X2luaXQgKFBlZEFsaWdubWVudCogYWxpZ24sIFBlZFNlY3RvciBvZmZzZXQsIFBlZFNlY3RvciBncmFpbl9zaXplKQoreworCVBFRF9BU1NFUlQgKGFsaWduICE9IE5VTEwsIHJldHVybiAwKTsKKworCWlmIChncmFpbl9zaXplIDwgMCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZ3JhaW5fc2l6ZSkKKwkJYWxpZ24tPm9mZnNldCA9IGFic19tb2QgKG9mZnNldCwgZ3JhaW5fc2l6ZSk7CisJZWxzZQorCQlhbGlnbi0+b2Zmc2V0ID0gb2Zmc2V0OworCWFsaWduLT5ncmFpbl9zaXplID0gZ3JhaW5fc2l6ZTsKKworCXJldHVybiAxOworfQorCisvKioKKyAqIFJldHVybiBhbiBhbGlnbm1lbnQgb2JqZWN0ICh1c2VkIGJ5IFBlZENvbnN0cmFpbnQpLCByZXByZXNlbnRpbmcgYWxsCisgKiBQZWRTZWN0b3IncyB0aGF0IGFyZSBvZiB0aGUgZm9ybSA8dHQ+b2Zmc2V0ICsgWCAqIGdyYWluX3NpemU8L3R0Pi4KKyAqLworUGVkQWxpZ25tZW50KgorcGVkX2FsaWdubWVudF9uZXcgKFBlZFNlY3RvciBvZmZzZXQsIFBlZFNlY3RvciBncmFpbl9zaXplKQoreworCVBlZEFsaWdubWVudCoJYWxpZ247CisKKwlhbGlnbiA9IChQZWRBbGlnbm1lbnQqKSBwZWRfbWFsbG9jIChzaXplb2YgKFBlZEFsaWdubWVudCkpOworCWlmICghYWxpZ24pCisJCWdvdG8gZXJyb3I7CisKKwlpZiAoIXBlZF9hbGlnbm1lbnRfaW5pdCAoYWxpZ24sIG9mZnNldCwgZ3JhaW5fc2l6ZSkpCisJCWdvdG8gZXJyb3JfZnJlZV9hbGlnbjsKKworCXJldHVybiBhbGlnbjsKKworZXJyb3JfZnJlZV9hbGlnbjoKKwlwZWRfZnJlZSAoYWxpZ24pOworZXJyb3I6CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogRnJlZSB1cCBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIFxwIGFsaWduLgorICovCit2b2lkCitwZWRfYWxpZ25tZW50X2Rlc3Ryb3kgKFBlZEFsaWdubWVudCogYWxpZ24pCit7CisJaWYgKGFsaWduKQorCQlwZWRfZnJlZSAoYWxpZ24pOworfQorCisvKioKKyAqIFJldHVybiBhIGR1cGxpY2F0ZSBvZiBccCBhbGlnbi4KKyAqLworUGVkQWxpZ25tZW50KgorcGVkX2FsaWdubWVudF9kdXBsaWNhdGUgKGNvbnN0IFBlZEFsaWdubWVudCogYWxpZ24pCit7CisJaWYgKCFhbGlnbikKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIHBlZF9hbGlnbm1lbnRfbmV3IChhbGlnbi0+b2Zmc2V0LCBhbGlnbi0+Z3JhaW5fc2l6ZSk7Cit9CisKKy8qIHRoZSBleHRlbmRlZCBFdWNsaWQgYWxnb3JpdGhtLgorICoKKyAqIGlucHV0OgorICogCWEgYW5kIGIsIGEgPiBiCisgKgorICogb3V0cHV0OgorICogCWdjZCwgeCBhbmQgeSwgc3VjaCB0aGF0OgorICoKKyAqIAlnY2QgPSBncmVhdGVzdCBjb21tb24gZGl2aXNvciBvZiBhIGFuZCBiCisgKiAJZ2NkID0geCphICsgeSpiCisgKi8KK0V1Y2xpZFRyaXBsZQorZXh0ZW5kZWRfZXVjbGlkIChpbnQgYSwgaW50IGIpCit7CisJRXVjbGlkVHJpcGxlCXJlc3VsdDsKKwlFdWNsaWRUcmlwbGUJdG1wOworCisJaWYgKGIgPT0gMCkgeworCQlyZXN1bHQuZ2NkID0gYTsKKwkJcmVzdWx0LnggPSAxOworCQlyZXN1bHQueSA9IDA7CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJdG1wID0gZXh0ZW5kZWRfZXVjbGlkIChiLCBhICUgYik7CisJcmVzdWx0LmdjZCA9IHRtcC5nY2Q7CisJcmVzdWx0LnggPSB0bXAueTsKKwlyZXN1bHQueSA9IHRtcC54IC0gKGEvYikgKiB0bXAueTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gY29tcHV0ZXMgYSBQZWRBbGlnbm1lbnQgb2JqZWN0IHRoYXQgZGVzY3JpYmVzIHRoZQorICogaW50ZXJzZWN0aW9uIG9mIHR3byBhbGlnbm1lbnRzLiAgVGhhdCBpcywgYSBzZWN0b3Igc2F0aXNmaWVzIHRoZQorICogbmV3IGFsaWdubWVudCBvYmplY3QgaWYgYW5kIG9ubHkgaWYgaXQgc2F0aXNmaWVzIGJvdGggb2YgdGhlIG9yaWdpbmFsCisgKiBvbmVzLiAgKFNlZSBwZWRfYWxpZ25tZW50X2lzX2FsaWduZWQoKSBmb3IgdGhlIG1lYW5pbmcgb2YgInNhdGlzZmllcyIpCisgKiAKKyAqIEFwYXJ0IGZyb20gdGhlIHRyaXZpYWwgY2FzZXMgKHdoZXJlIG9uZSBvciBib3RoIG9mIHRoZSBhbGlnbm1lbnQgb2JqZWN0cworICogY29uc3RyYWludHMgaGF2ZSBubyBzZWN0b3JzIHRoYXQgc2F0aXNmeSB0aGVtKSwgdGhpcyBpcyB3aGF0IHdlJ3JlIHRyeWluZyB0bworICogZG86CisgKiAgLSB0d28gaW5wdXQgY29uc3RyYWludHM6IFxwIGEgYW5kIFxwIGIuCisgKiAgLSB0aGUgbmV3IGdyYWluX3NpemUgaXMgZ29pbmcgdG8gYmUgdGhlIGxvd2VzdCBjb21tb24gbXVsdGlwbGUgb2YKKyAqICBccCBhLT5ncmFpbl9zaXplIGFuZCBccCBiLT5ncmFpbl9zaXplCisgKiAgLSBoYXJkIHBhcnQgLSBzb2x2ZSB0aGUgc2ltdWx0YW5lb3VzIGVxdWF0aW9ucywgZm9yIG9mZnNldCwgd2hlcmUgb2Zmc2V0LAorICogIFggYW5kIFkgYXJlIHZhcmlhYmxlcy4gIChOb3RlOiBvZmZzZXQgY2FuIGJlIG9idGFpbmVkIGZyb20gZWl0aGVyIFggb3IgWSwKKyAqICBieSBzdWJzdGl0dWluZyBpbnRvIGVpdGhlciBlcXVhdGlvbikKKyAqIAorICogXGNvZGUKKyAqICAJb2Zmc2V0ID0gXHAgYS0+b2Zmc2V0ICsgWCAqIFxwIGEtPmdyYWluX3NpemUJCSgxKQorICogIAlvZmZzZXQgPSBccCBiLT5vZmZzZXQgKyBZICogXHAgYi0+Z3JhaW5fc2l6ZQkJKDIpCisgKiBcZW5kY29kZQorICogCisgKiBvciwgYWJicmV2aWF0ZWQ6CisgKgorICogXGNvZGUKKyAqICAJbyA9IEFvICsgWCpBZwkJKDEpCisgKiAgCW8gPSBCbyArIFkqQmcJCSgyKQorICogCisgKiAgPT4JQW8gKyBYKkFnICAgID0gQm8gKyBZKkJnICAgICAoMSkgPSAoMikKKyAqICAJWCpBZyAtIFkqQmcgID0gQm8gLSBBbyAgKDMpCisgKiBcZW5kY29kZQorICoKKyAqIEFzIGl0IHR1cm5zIG91dCwgdGhlcmUgb25seSBleGlzdHMgYSBzb2x1dGlvbiBpZiAoQm8gLSBBbykgaXMgYSBtdWx0aXBsZQorICogb2YgdGhlIEdDRCBvZiBBZyBhbmQgQmcuICBSZWFzb246IGFsbCBsaW5lYXIgY29tYmluYXRpb25zIG9mIEFnIGFuZCBCZyBhcmUKKyAqIG11bHRpcGxlcyBvZiB0aGUgR0NELgorICoKKyAqIFByb29mOgorICoKKyAqIFxjb2RlCisgKglBICogQWcgKyBCICogQmcKKyAqCT0gQSAqIChccCBhICogZ2NkKSArIEIgKiAoXHAgYiAqIGdjZCkKKyAqCT0gZ2NkICogKEEgKiBccCBhICsgQiAqIFxwIGIpCisgKiBcZW5kY29kZQorICoKKyAqIGdjZCBpcyBhIGZhY3RvciBvZiB0aGUgbGluZWFyIGNvbWJpbmF0aW9uLiAgUUVECisgKiAKKyAqIEFueXdheSwgXHAgYSAqIEFnICsgXHAgYiAqIEJnID0gZ2NkIGNhbiBiZSBzb2x2ZWQgKGZvciBccCBhLCBccCBiIGFuZCBnY2QpIAorICogd2l0aCBFdWNsaWQncyBleHRlbmRlZCBhbGdvcml0aG0uICBUaGVuLCB3ZSBqdXN0IG11bHRpcGx5IHRocm91Z2ggYnkgCisgKiAoQm8gLSBBbykgLyBnY2QgdG8gZ2V0ICgzKS4KKyAqCisgKiBpLmUuCisgKiBcY29kZQorICogCUEgKiBBZyArIEIgKiBCZwkJCQk9IGdjZAorICogCUEqKEJvLUFvKS9nY2QgKiBBZyArIEIoQm8tQW8pL2djZCAqIEJnCT0gZ2NkICogKEJvLUFvKS9nY2QKKyAqIAlYKkFnIC0gWSpCZwkJCQk9IEJvIC0gQW8JCSgzKQorICoKKyAqIAlYID0gQSooQm8tQW8pL2djZAorICogCVkgPSAtIEIqKEJvLUFvKS9nY2QKKyAqIFxlbmRjb2RlCisgKiAKKyAqIHRoZW46CisgKiBcY29kZQorICogIAlvID0gQW8gKyBYKkFnCQkJKDEpCisgKgkgID0gQW8gKyBBKihCby1BbykvZ2NkKkFnCisgKiAgCW8gPSBCbyArIFkqQmcJCQkoMikKKyAqCSAgPSBCbyAtIEIqKEJvLUFvKS9nY2QqQWcKKyAqIFxlbmRjb2RlCisgKgorICogVGhhbmtzIGdvIHRvIE5hdGhhbiBIdXJzdCAobmpoQGhhd3Rob3JuLmNzc2UubW9uYXNoLmVkdS5hdSkgZm9yIGZpZ3VyaW5nCisgKiB0aGlzIGFsZ29yaXRobSBvdXQgOi0pCisgKgorICogXG5vdGUgUmV0dXJuZWQgXGMgTlVMTCBpcyBhIHZhbGlkIFBlZEFsaWdubWVudCBvYmplY3QsIGFuZCBjYW4gYmUgdXNlZAorCWZvciBwZWRfYWxpZ25tZW50XyooKSBmdW5jdGlvbi4KKyAqCisgKiBccmV0dXJuIGEgUGVkQWxpZ25tZW50IG9uIHN1Y2Nlc3MsIFxjIE5VTEwgb24gZmFpbHVyZQorICovCitQZWRBbGlnbm1lbnQqCitwZWRfYWxpZ25tZW50X2ludGVyc2VjdCAoY29uc3QgUGVkQWxpZ25tZW50KiBhLCBjb25zdCBQZWRBbGlnbm1lbnQqIGIpCit7CisJUGVkU2VjdG9yCW5ld19ncmFpbl9zaXplOworCVBlZFNlY3RvcgluZXdfb2Zmc2V0OworCVBlZFNlY3RvcglkZWx0YV9vbl9nY2Q7CisJRXVjbGlkVHJpcGxlCWdjZF9mYWN0b3JzOworCisgICAgICAgIAorCWlmICghYSB8fCAhYikKKwkJcmV0dXJuIE5VTEw7CisKKyAgICAgICAgLypQRURfREVCVUcgKDB4MTAsICJpbnRlcnNlY3RpbmcgYWxpZ25tZW50cyAoJWQsJWQpIGFuZCAoJWQsJWQpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGEtPm9mZnNldCwgYS0+Z3JhaW5fc2l6ZSwgYi0+b2Zmc2V0LCBiLT5ncmFpbl9zaXplKTsKKyAgICAgICAgKi8KKyAgICAgICAgCisJaWYgKGEtPmdyYWluX3NpemUgPCBiLT5ncmFpbl9zaXplKSB7CisJCWNvbnN0IFBlZEFsaWdubWVudCoJdG1wOworCSAgICAgICAgdG1wID0gYTsgYSA9IGI7IGIgPSB0bXA7CisJfQorCisJLyogd2VpcmQvdHJpdmlhbCBjYXNlOiB3aGVyZSB0aGUgc29sdXRpb24gc3BhY2UgZm9yICJhIiBvciAiYiIgaXMKKwkgKiBlaXRoZXIgZW1wdHkgb3IgY29udGFpbnMgZXhhY3RseSBvbmUgc29sdXRpb24KKwkgKi8KKwlpZiAoYS0+Z3JhaW5fc2l6ZSA9PSAwICYmIGItPmdyYWluX3NpemUgPT0gMCkgeworCQlpZiAoYS0+b2Zmc2V0ID09IGItPm9mZnNldCkKKwkJCXJldHVybiBwZWRfYWxpZ25tZW50X2R1cGxpY2F0ZSAoYSk7CisJCWVsc2UKKwkJCXJldHVybiBOVUxMOworCX0KKworCS8qIGdlbmVyYWwgY2FzZSAqLworCWdjZF9mYWN0b3JzID0gZXh0ZW5kZWRfZXVjbGlkIChhLT5ncmFpbl9zaXplLCBiLT5ncmFpbl9zaXplKTsKKworCWRlbHRhX29uX2djZCA9IChiLT5vZmZzZXQgLSBhLT5vZmZzZXQpIC8gZ2NkX2ZhY3RvcnMuZ2NkOworCW5ld19vZmZzZXQgPSBhLT5vZmZzZXQgKyBnY2RfZmFjdG9ycy54ICogZGVsdGFfb25fZ2NkICogYS0+Z3JhaW5fc2l6ZTsKKwluZXdfZ3JhaW5fc2l6ZSA9IGEtPmdyYWluX3NpemUgKiBiLT5ncmFpbl9zaXplIC8gZ2NkX2ZhY3RvcnMuZ2NkOworCisJLyogaW5jb25zaXN0ZW5jeSA9PiBubyBzb2x1dGlvbiAqLworCWlmIChuZXdfb2Zmc2V0CisJICAgICE9IGItPm9mZnNldCAtIGdjZF9mYWN0b3JzLnkgKiBkZWx0YV9vbl9nY2QgKiBiLT5ncmFpbl9zaXplKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBwZWRfYWxpZ25tZW50X25ldyAobmV3X29mZnNldCwgbmV3X2dyYWluX3NpemUpOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHNlY3RvciBjbG9zZXN0IHRvICJzZWN0b3IiIHRoYXQgbGllcyBpbnNpZGUKKyAqIGdlb20gYW5kIHNhdGlzZmllcyB0aGUgYWxpZ25tZW50IGNvbnN0cmFpbnQuCisgKi8KK3N0YXRpYyBQZWRTZWN0b3IKK19jbG9zZXN0X2luc2lkZV9nZW9tZXRyeSAoY29uc3QgUGVkQWxpZ25tZW50KiBhbGlnbiwgY29uc3QgUGVkR2VvbWV0cnkqIGdlb20sCisJCQkgIFBlZFNlY3RvciBzZWN0b3IpCit7CisJUEVEX0FTU0VSVCAoYWxpZ24gIT0gTlVMTCwgcmV0dXJuIC0xKTsKKworCWlmICghYWxpZ24tPmdyYWluX3NpemUpIHsKKwkJaWYgKHBlZF9hbGlnbm1lbnRfaXNfYWxpZ25lZCAoYWxpZ24sIGdlb20sIHNlY3RvcikKKwkJICAgICYmICghZ2VvbSB8fCBwZWRfZ2VvbWV0cnlfdGVzdF9zZWN0b3JfaW5zaWRlIChnZW9tLAorCQkJCSAgICAJCQkJICBzZWN0b3IpKSkKKwkJCXJldHVybiBzZWN0b3I7CisJCWVsc2UKKwkJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoc2VjdG9yIDwgZ2VvbS0+c3RhcnQpCisJCXNlY3RvciArPSBwZWRfcm91bmRfdXBfdG8gKGdlb20tPnN0YXJ0IC0gc2VjdG9yLAorCQkJCQkgICBhbGlnbi0+Z3JhaW5fc2l6ZSk7CisJaWYgKHNlY3RvciA+IGdlb20tPmVuZCkKKwkJc2VjdG9yIC09IHBlZF9yb3VuZF91cF90byAoc2VjdG9yIC0gZ2VvbS0+ZW5kLAorCQkJCQkgICBhbGlnbi0+Z3JhaW5fc2l6ZSk7CisKKwlpZiAoIXBlZF9nZW9tZXRyeV90ZXN0X3NlY3Rvcl9pbnNpZGUgKGdlb20sIHNlY3RvcikpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gc2VjdG9yOworfQorCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgY2xvc2VzdCBzZWN0b3IgdG8gXHAgc2VjdG9yIHRoYXQgbGllcyBpbnNpZGUKKyAqIFxwIGdlb20gdGhhdCBzYXRpc2ZpZXMgdGhlIGdpdmVuIGFsaWdubWVudCBjb25zdHJhaW50IFxwIGFsaWduLiAgSXQgcHJlZmVycworICogc2VjdG9ycyB0aGF0IGFyZSBiZXlvbmQgXHAgc2VjdG9yIChhcmUgbm90IHNtYWxsZXIgdGhhbiBccCBzZWN0b3IpLCAKKyAqIGJ1dCBkb2VzIG5vdCBndWFyYW50ZWUgdGhhdCB0aGlzLgorICoKKyAqIFxyZXR1cm4gYSBQZWRTZWN0b3Igb24gc3VjY2VzcywgXGMgLTEgb24gZmFpbHVyZQorICovCitQZWRTZWN0b3IKK3BlZF9hbGlnbm1lbnRfYWxpZ25fdXAgKGNvbnN0IFBlZEFsaWdubWVudCogYWxpZ24sIGNvbnN0IFBlZEdlb21ldHJ5KiBnZW9tLAorCQkJUGVkU2VjdG9yIHNlY3RvcikKK3sKKwlQZWRTZWN0b3IJcmVzdWx0OworCisJUEVEX0FTU0VSVCAoYWxpZ24gIT0gTlVMTCwgcmV0dXJuIC0xKTsKKworCWlmICghYWxpZ24tPmdyYWluX3NpemUpCisJCXJlc3VsdCA9IGFsaWduLT5vZmZzZXQ7CisJZWxzZQorCQlyZXN1bHQgPSBwZWRfcm91bmRfdXBfdG8gKHNlY3RvciAtIGFsaWduLT5vZmZzZXQsCisJCQkgICAgICAgCQkgIGFsaWduLT5ncmFpbl9zaXplKQorCQkJICsgYWxpZ24tPm9mZnNldDsKKworCWlmIChnZW9tKQorCQlyZXN1bHQgPSBfY2xvc2VzdF9pbnNpZGVfZ2VvbWV0cnkgKGFsaWduLCBnZW9tLCByZXN1bHQpOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBjbG9zZXN0IHNlY3RvciB0byBccCBzZWN0b3IgdGhhdCBsaWVzIGluc2lkZQorICogXHAgZ2VvbSB0aGF0IHNhdGlzZmllcyB0aGUgZ2l2ZW4gYWxpZ25tZW50IGNvbnN0cmFpbnQgXHAgYWxpZ24uICBJdCBwcmVmZXJzCisgKiBzZWN0b3JzIHRoYXQgYXJlIGJlZm9yZSBccCBzZWN0b3IgKGFyZSBub3QgbGFyZ2VyIHRoYW4gXHAgc2VjdG9yKSwKKyAqIGJ1dCBkb2VzIG5vdCBndWFyYW50ZWUgdGhhdCB0aGlzLgorICoKKyAqIFxyZXR1cm4gYSBQZWRTZWN0b3Igb24gc3VjY2VzcywgXGMgLTEgb24gZmFpbHVyZQorICovCitQZWRTZWN0b3IKK3BlZF9hbGlnbm1lbnRfYWxpZ25fZG93biAoY29uc3QgUGVkQWxpZ25tZW50KiBhbGlnbiwgY29uc3QgUGVkR2VvbWV0cnkqIGdlb20sCisJCQkgIFBlZFNlY3RvciBzZWN0b3IpCit7CisJUGVkU2VjdG9yCXJlc3VsdDsKKworCVBFRF9BU1NFUlQgKGFsaWduICE9IE5VTEwsIHJldHVybiAtMSk7CisKKwlpZiAoIWFsaWduLT5ncmFpbl9zaXplKQorCQlyZXN1bHQgPSBhbGlnbi0+b2Zmc2V0OworCWVsc2UKKwkJcmVzdWx0ID0gcGVkX3JvdW5kX2Rvd25fdG8gKHNlY3RvciAtIGFsaWduLT5vZmZzZXQsCisJCQkgICAgICAJCSAgICBhbGlnbi0+Z3JhaW5fc2l6ZSkKKwkJCSArIGFsaWduLT5vZmZzZXQ7CisKKwlpZiAoZ2VvbSkKKwkJcmVzdWx0ID0gX2Nsb3Nlc3RfaW5zaWRlX2dlb21ldHJ5IChhbGlnbiwgZ2VvbSwgcmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKiBSZXR1cm5zIGVpdGhlciBhIG9yIGIsIGRlcGVuZGluZyBvbiB3aGljaCBpcyBjbG9zZXN0IHRvICJzZWN0b3IiLiAqLworc3RhdGljIFBlZFNlY3RvcgorY2xvc2VzdCAoUGVkU2VjdG9yIHNlY3RvciwgUGVkU2VjdG9yIGEsIFBlZFNlY3RvciBiKQoreworCWlmIChhID09IC0xKQorCQlyZXR1cm4gYjsKKwlpZiAoYiA9PSAtMSkKKwkJcmV0dXJuIGE7CisKKwlpZiAoYWJzIChzZWN0b3IgLSBhKSA8IGFicyAoc2VjdG9yIC0gYikpCisJCXJldHVybiBhOworCWVsc2UKKwkJcmV0dXJuIGI7Cit9CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBzZWN0b3IgdGhhdCBpcyBjbG9zZXN0IHRvIFxwIHNlY3RvciwgCisgKiBzYXRpc2ZpZXMgdGhlIFxwIGFsaWduIGNvbnN0cmFpbnQgYW5kIGxpZXMgaW5zaWRlIFxwIGdlb20uCisgKgorICogXHJldHVybiBhIFBlZFNlY3RvciBvbiBzdWNjZXNzLCBcYyAtMSBvbiBmYWlsdXJlCisgKi8KK1BlZFNlY3RvcgorcGVkX2FsaWdubWVudF9hbGlnbl9uZWFyZXN0IChjb25zdCBQZWRBbGlnbm1lbnQqIGFsaWduLCBjb25zdCBQZWRHZW9tZXRyeSogZ2VvbSwKKwkJCSAgICAgUGVkU2VjdG9yIHNlY3RvcikKK3sKKwlQRURfQVNTRVJUIChhbGlnbiAhPSBOVUxMLCByZXR1cm4gLTEpOworCisJcmV0dXJuIGNsb3Nlc3QgKHNlY3RvciwgcGVkX2FsaWdubWVudF9hbGlnbl91cCAoYWxpZ24sIGdlb20sIHNlY3RvciksCisJCQlwZWRfYWxpZ25tZW50X2FsaWduX2Rvd24gKGFsaWduLCBnZW9tLCBzZWN0b3IpKTsKK30KKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMSBpZiBccCBzZWN0b3Igc2F0aXNmaWVzIHRoZSBhbGlnbm1lbnQgCisgKiBjb25zdHJhaW50IFxwIGFsaWduIGFuZCBsaWVzIGluc2lkZSBccCBnZW9tLgorICoKKyAqIFxyZXR1cm4gXGMgMSBvbiBzdWNjZXNzLCBcYyAwIG9uIGZhaWx1cmUKKyAqLworaW50CitwZWRfYWxpZ25tZW50X2lzX2FsaWduZWQgKGNvbnN0IFBlZEFsaWdubWVudCogYWxpZ24sIGNvbnN0IFBlZEdlb21ldHJ5KiBnZW9tLAorCQkJICBQZWRTZWN0b3Igc2VjdG9yKQoreworCWlmICghYWxpZ24pCisJCXJldHVybiAwOworCisJaWYgKGdlb20gJiYgIXBlZF9nZW9tZXRyeV90ZXN0X3NlY3Rvcl9pbnNpZGUgKGdlb20sIHNlY3RvcikpCisJCXJldHVybiAwOworCisJaWYgKGFsaWduLT5ncmFpbl9zaXplKQorCQlyZXR1cm4gKHNlY3RvciAtIGFsaWduLT5vZmZzZXQpICUgYWxpZ24tPmdyYWluX3NpemUgPT0gMDsKKwllbHNlCisJCXJldHVybiBzZWN0b3IgPT0gYWxpZ24tPm9mZnNldDsKK30KKworLyoqCisgKiBAfQorICovCisKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZGVidWcuYyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZGVidWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmQwNWM0Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9kZWJ1Zy5jCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICAgIGxpYnBhcnRlZCAtIGEgbGlicmFyeSBmb3IgbWFuaXB1bGF0aW5nIGRpc2sgcGFydGl0aW9ucworICAgIENvcHlyaWdodCAoQykgMjAwMCwgMjAwNSwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKKyovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxwYXJ0ZWQvcGFydGVkLmg+CisjaW5jbHVkZSA8cGFydGVkL2RlYnVnLmg+CisKKyNpZiBFTkFCTEVfTkxTCisjICBpbmNsdWRlIDxsaWJpbnRsLmg+CisjICBkZWZpbmUgXyhTdHJpbmcpIGRnZXR0ZXh0IChQQUNLQUdFLCBTdHJpbmcpCisjZWxzZQorIyAgZGVmaW5lIF8oU3RyaW5nKSAoU3RyaW5nKQorI2VuZGlmIC8qIEVOQUJMRV9OTFMgKi8KKworI2lmZGVmIERFQlVHCisKKyNpZiBIQVZFX0JBQ0tUUkFDRQorI2luY2x1ZGUgPGV4ZWNpbmZvLmg+CisjZW5kaWYKKworc3RhdGljIHZvaWQgZGVmYXVsdF9oYW5kbGVyICggY29uc3QgaW50IGxldmVsLCBjb25zdCBjaGFyKiBmaWxlLCBpbnQgbGluZSwKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBmdW5jdGlvbiwgY29uc3QgY2hhciogbXNnICk7CitzdGF0aWMgUGVkRGVidWdIYW5kbGVyKiBkZWJ1Z19oYW5kbGVyID0gJmRlZmF1bHRfaGFuZGxlcjsKKworCisvKioKKyAqIERlZmF1bHQgZGVidWcgaGFuZGxlci4KKyAqIFdpbGwgcHJpbnQgYWxsIGluZm9ybWF0aW9uIHRvIHN0ZGVyci4KKyAqLworc3RhdGljIHZvaWQgZGVmYXVsdF9oYW5kbGVyICggY29uc3QgaW50IGxldmVsLCBjb25zdCBjaGFyKiBmaWxlLCBpbnQgbGluZSwKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBmdW5jdGlvbiwgY29uc3QgY2hhciogbXNnICkKK3sKKyAgICAgICAgZnByaW50ZiAoIHN0ZGVyciwgIlslZF0gJXM6JWQgKCVzKTogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbCwgZmlsZSwgbGluZSwgZnVuY3Rpb24sIG1zZyApOworfQorCisvKioKKyAqIFNlbmQgYSBkZWJ1ZyBtZXNzYWdlLgorICogRG8gbm90IGNhbGwgdGhpcyBkaXJlY3RseSAtLSB1c2UgUEVEX0RFQlVHKCkgaW5zdGVhZC4KKyAqCisgKiBsZXZlbCAgICAgICAgbG9nIGxldmVsLCAwIH49ICJwcmludCBkZWZpbml0ZWx5IgorICovCit2b2lkIHBlZF9kZWJ1ZyAoIGNvbnN0IGludCBsZXZlbCwgY29uc3QgY2hhciogZmlsZSwgaW50IGxpbmUsCisgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGZ1bmN0aW9uLCBjb25zdCBjaGFyKiBtc2csIC4uLiApCit7CisgICAgICAgIHZhX2xpc3QgICAgICAgICBhcmdfbGlzdDsKKyAgICAgICAgY2hhciogICAgICAgICAgIG1zZ19jb25jYXQgPSBwZWRfbWFsbG9jKDgxOTIpOworICAgICAgICAKKyAgICAgICAgdmFfc3RhcnQgKCBhcmdfbGlzdCwgbXNnICk7CisgICAgICAgICAgICAgICAgdnNucHJpbnRmICggbXNnX2NvbmNhdCwgODE5MiwgbXNnLCBhcmdfbGlzdCApOworICAgICAgICB2YV9lbmQgKCBhcmdfbGlzdCApOworICAgICAgICAKKyAgICAgICAgZGVidWdfaGFuZGxlciAoIGxldmVsLCBmaWxlLCBsaW5lLCBmdW5jdGlvbiwgbXNnX2NvbmNhdCApOworCisgICAgICAgIHBlZF9mcmVlICggbXNnX2NvbmNhdCApOworfQorCisvKgorICogaGFuZGxlciAgICAgIGRlYnVnIGhhbmRsZXI7IE5VTEwgZm9yIGRlZmF1bHQgaGFuZGxlcgorICovCit2b2lkIHBlZF9kZWJ1Z19zZXRfaGFuZGxlciAoIFBlZERlYnVnSGFuZGxlciogaGFuZGxlciApCit7CisgICAgICAgIGRlYnVnX2hhbmRsZXIgPSAoIGhhbmRsZXIgPyBoYW5kbGVyIDogZGVmYXVsdF9oYW5kbGVyICk7Cit9CisKKy8qCisgKiBDaGVjayBhbiBhc3NlcnRpb24uCisgKiBEbyBub3QgY2FsbCB0aGlzIGRpcmVjdGx5IC0tIHVzZSBQRURfQVNTRVJUKCkgaW5zdGVhZC4KKyAqLworaW50IHBlZF9hc3NlcnQgKCBpbnQgY29uZCwgY29uc3QgY2hhciogY29uZF90ZXh0LAorCSAgICBjb25zdCBjaGFyKiBmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciogZnVuY3Rpb24gKQoreworCVBlZEV4Y2VwdGlvbk9wdGlvbglvcHQ7CisKKwlpZiAoIGNvbmQgKQorCQlyZXR1cm4gMTsKKworI2lmIEhBVkVfQkFDS1RSQUNFCisJLyogUHJpbnQgYmFja3RyYWNlIHN0YWNrICovCisJdm9pZCAqc3RhY2tbMjBdOworCWNoYXIgKipzdHJpbmdzLCAqKnN0cmluZzsKKyAgICAgICAgaW50IHNpemUgPSBiYWNrdHJhY2Uoc3RhY2ssIDIwKTsKKwlzdHJpbmdzID0gYmFja3RyYWNlX3N5bWJvbHMoc3RhY2ssIHNpemUpOworCisJaWYgKHN0cmluZ3MpIHsKKwkJcHJpbnRmKF8oIkJhY2t0cmFjZSBoYXMgJWQgY2FsbHMgb24gc3RhY2s6XG4iKSwgc2l6ZSk7CisJCWZvciAoc3RyaW5nID0gc3RyaW5nczsgc2l6ZSA+IDA7IHNpemUtLSwgc3RyaW5nKyspCisJCQlwcmludGYoIiAgJWQ6ICVzXG4iLCBzaXplLCAqc3RyaW5nKTsKKworCQlmcmVlKHN0cmluZ3MpOworCX0KKyNlbmRpZgorCisJLyogVGhyb3cgdGhlIGV4Y2VwdGlvbiAqLworCW9wdCA9IHBlZF9leGNlcHRpb25fdGhyb3cgKAorCQlQRURfRVhDRVBUSU9OX0JVRywKKwkJUEVEX0VYQ0VQVElPTl9JR05PUkVfQ0FOQ0VMLAorCQlfKCJBc3NlcnRpb24gKCVzKSBhdCAlczolZCBpbiBmdW5jdGlvbiAlcygpIGZhaWxlZC4iKSwKKwkJY29uZF90ZXh0LCBmaWxlLCBsaW5lLCBmdW5jdGlvbiApOworCisJcmV0dXJuICggb3B0ID09IFBFRF9FWENFUFRJT05fSUdOT1JFICk7Cit9CisKKyNlbmRpZiAvKiBERUJVRyAqLworCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2RldmljZS5jIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9kZXZpY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDc5ZmNhCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9kZXZpY2UuYwpAQCAtMCwwICsxLDQ0MyBAQAorLyoKKyAgICBsaWJwYXJ0ZWQgLSBhIGxpYnJhcnkgZm9yIG1hbmlwdWxhdGluZyBkaXNrIHBhcnRpdGlvbnMKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTkgLSAyMDAxLCAyMDA1LCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQorKi8KKworLyoqIFxmaWxlIGRldmljZS5jICovCisKKy8qKgorICogXGFkZHRvZ3JvdXAgUGVkRGV2aWNlCisgKgorICogXGJyaWVmIERldmljZSBhY2Nlc3MuCisgKiAKKyAqIFdoZW4gcGVkX2RldmljZV9wcm9iZV9hbGwoKSBpcyBjYWxsZWQsIGxpYnBhcnRlZCBhdHRlbXB0cyB0byBkZXRlY3QgYWxsCisgKiBkZXZpY2VzLiAgSXQgY29uc3RydWN0cyBhIGxpc3Qgd2hpY2ggY2FuIGJlIGFjY2Vzc2VkIHdpdGgKKyAqIHBlZF9kZXZpY2VfZ2V0X25leHQoKS4KKyAqIAorICogSWYgeW91IHdhbnQgdG8gdXNlIGEgZGV2aWNlIHRoYXQgaXNuJ3Qgb24gdGhlIGxpc3QsIHVzZQorICogcGVkX2RldmljZV9nZXQoKS4gIEFsc28sIHRoZXJlIG1heSBiZSBPUy1zcGVjaWZpYyBjb25zdHJ1Y3RvcnMsIGZvciBjcmVhdGluZworICogZGV2aWNlcyBmcm9tIGZpbGUgZGVzY3JpcHRvcnMsIHN0b3JlcywgZXRjLiAgRm9yIGV4YW1wbGUsCisgKiBwZWRfZGV2aWNlX25ld19mcm9tX3N0b3JlKCkuCisgKgorICogQHsKKyAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpbmNsdWRlIDxwYXJ0ZWQvcGFydGVkLmg+CisjaW5jbHVkZSA8cGFydGVkL2RlYnVnLmg+CisKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCitzdGF0aWMgUGVkRGV2aWNlKglkZXZpY2VzOyAvKiBsZWdhbCBhZHZpY2Ugc2F5czogaW5pdGlhbGl6ZWQgdG8gTlVMTCwKKwkJCQkgICAgdW5kZXIgc2VjdGlvbiA2LjcuOCBwYXJ0IDEwCisJCQkJICAgIG9mIElTTy9FSUMgOTg5OToxOTk5ICovCisKKyNpZm5kZWYgSEFWRV9DQU5PTklDQUxJWkVfRklMRV9OQU1FCitjaGFyICoKK2Nhbm9uaWNhbGl6ZV9maWxlX25hbWUgKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJY2hhciAqCWJ1ZjsKKwlpbnQJc2l6ZTsKKwljaGFyICoJcmVzdWx0OworCisjaWZkZWYgUEFUSF9NQVgKKwlzaXplID0gUEFUSF9NQVg7CisjZWxzZQorCS8qIEJpZ2dlciBpcyBiZXR0ZXI7IHJlYWxwYXRoIGhhcyBubyB3YXkgdG9kbyBib3VuZHMgY2hlY2tpbmcuICAqLworCXNpemUgPSA0MDk2OworI2VuZGlmCisKKwkvKiBKdXN0IGluIGNhc2UgcmVhbHBhdGggZG9lcyBub3QgTlVMTCB0ZXJtaW5hdGUgdGhlIHN0cmluZworCSAqIG9yIGl0IGp1c3QgZml0cyBpbiBTSVpFIHdpdGhvdXQgYSBOVUxMIHRlcm1pbmF0b3IuICAqLworCWJ1ZiA9IGNhbGxvYyAoc2l6ZSArIDEsIHNpemVvZihjaGFyKSk7CisJaWYgKCEgYnVmKSB7CisJCWVycm5vID0gRU5PTUVNOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXN1bHQgPSByZWFscGF0aCAobmFtZSwgYnVmKTsKKwlpZiAoISByZXN1bHQpCisJCWZyZWUgKGJ1Zik7CisKKwlyZXR1cm4gcmVzdWx0OworfQorI2VuZGlmIC8qICFIQVZFX0NBTk9OSUNBTElaRV9GSUxFX05BTUUgKi8KKworc3RhdGljIHZvaWQKK19kZXZpY2VfcmVnaXN0ZXIgKFBlZERldmljZSogZGV2KQoreworCVBlZERldmljZSoJd2FsazsKKwlmb3IgKHdhbGsgPSBkZXZpY2VzOyB3YWxrICYmIHdhbGstPm5leHQ7IHdhbGsgPSB3YWxrLT5uZXh0KTsKKwlpZiAod2FsaykKKwkJd2Fsay0+bmV4dCA9IGRldjsKKwllbHNlCisJCWRldmljZXMgPSBkZXY7CisJZGV2LT5uZXh0ID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQKK19kZXZpY2VfdW5yZWdpc3RlciAoUGVkRGV2aWNlKiBkZXYpCit7CisJUGVkRGV2aWNlKgl3YWxrOworCVBlZERldmljZSoJbGFzdCA9IE5VTEw7CisKKwlmb3IgKHdhbGsgPSBkZXZpY2VzOyB3YWxrICE9IE5VTEw7IGxhc3QgPSB3YWxrLCB3YWxrID0gd2Fsay0+bmV4dCkgeworCQlpZiAod2FsayA9PSBkZXYpIGJyZWFrOworCX0KKworCWlmIChsYXN0KQorCQlsYXN0LT5uZXh0ID0gZGV2LT5uZXh0OworCWVsc2UKKwkJZGV2aWNlcyA9IGRldi0+bmV4dDsKK30KKworLyoqCisgKiBSZXR1cm5zIHRoZSBuZXh0IGRldmljZSB0aGF0IHdhcyBkZXRlY3RlZCBieSBwZWRfZGV2aWNlX3Byb2JlX2FsbCgpLCBvcgorICogY2FsbHMgdG8gcGVkX2RldmljZV9nZXRfbmV4dCgpLgorICogSWYgZGV2IGlzIE5VTEwsIHJldHVybnMgdGhlIGZpcnN0IGRldmljZS4KKyAqCisgKiBccmV0dXJuIE5VTEwgaWYgZGV2IGlzIHRoZSBsYXN0IGRldmljZS4KKyAqLworUGVkRGV2aWNlKgorcGVkX2RldmljZV9nZXRfbmV4dCAoY29uc3QgUGVkRGV2aWNlKiBkZXYpCit7CisJaWYgKGRldikKKwkJcmV0dXJuIGRldi0+bmV4dDsKKwllbHNlCisJCXJldHVybiBkZXZpY2VzOworfQorCit2b2lkCitfcGVkX2RldmljZV9wcm9iZSAoY29uc3QgY2hhciogcGF0aCkKK3sKKwlQZWREZXZpY2UqCWRldjsKKworCVBFRF9BU1NFUlQgKHBhdGggIT0gTlVMTCwgcmV0dXJuKTsKKworCXBlZF9leGNlcHRpb25fZmV0Y2hfYWxsICgpOworCWRldiA9IHBlZF9kZXZpY2VfZ2V0IChwYXRoKTsKKwlpZiAoIWRldikKKwkJcGVkX2V4Y2VwdGlvbl9jYXRjaCAoKTsKKwlwZWRfZXhjZXB0aW9uX2xlYXZlX2FsbCAoKTsKK30KKworLyoqCisgKiBBdHRlbXB0cyB0byBkZXRlY3QgYWxsIGRldmljZXMuCisgKi8KK3ZvaWQKK3BlZF9kZXZpY2VfcHJvYmVfYWxsICgpCit7CisJcGVkX2FyY2hpdGVjdHVyZS0+ZGV2X29wcy0+cHJvYmVfYWxsICgpOworfQorCisvKioKKyAqIENsb3NlL2ZyZWUgYWxsIGRldmljZXMuCisgKiBDYWxsZWQgYnkgcGVkX2RvbmUoKSwgc28geW91IGRvIG5vdCBuZWVkIHRvIHdvcnJ5IGFib3V0IGl0LgorICovCit2b2lkCitwZWRfZGV2aWNlX2ZyZWVfYWxsICgpCit7CisJd2hpbGUgKGRldmljZXMpCisJCXBlZF9kZXZpY2VfZGVzdHJveSAoZGV2aWNlcyk7Cit9CisKKy8qKgorICogR2V0cyB0aGUgZGV2aWNlICJuYW1lIiwgd2hlcmUgbmFtZSBpcyB1c3VhbGx5IHRoZSBibG9jayBkZXZpY2UsIGUuZy4KKyAqIC9kZXYvc2RiLiAgSWYgdGhlIGRldmljZSB3YXNuJ3QgZGV0ZWN0ZWQgd2l0aCBwZWRfZGV2aWNlX3Byb2JlX2FsbCgpLAorICogYW4gYXR0ZW1wdCB3aWxsIGJlIG1hZGUgdG8gZGV0ZWN0IGl0IGFnYWluLiAgSWYgaXQgaXMgZm91bmQsIGl0IHdpbGwKKyAqIGJlIGFkZGVkIHRvIHRoZSBsaXN0LgorICovCitQZWREZXZpY2UqCitwZWRfZGV2aWNlX2dldCAoY29uc3QgY2hhciogcGF0aCkKK3sKKwlQZWREZXZpY2UqCXdhbGs7CisJY2hhcioJCW5vcm1hbF9wYXRoOworCisJUEVEX0FTU0VSVCAocGF0aCAhPSBOVUxMLCByZXR1cm4gTlVMTCk7CisJbm9ybWFsX3BhdGggPSBjYW5vbmljYWxpemVfZmlsZV9uYW1lIChwYXRoKTsKKwlpZiAoIW5vcm1hbF9wYXRoKQorCQkvKiBXZWxsLCBtYXliZSBpdCBpcyBqdXN0IHRoYXQgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3QuCisJCSAqIFRyeSBpdCBhbnl3YXkuICAqLworCQlub3JtYWxfcGF0aCA9IHN0cmR1cCAocGF0aCk7CisJaWYgKCFub3JtYWxfcGF0aCkKKwkJcmV0dXJuIE5VTEw7CisKKwlmb3IgKHdhbGsgPSBkZXZpY2VzOyB3YWxrICE9IE5VTEw7IHdhbGsgPSB3YWxrLT5uZXh0KSB7CisJCWlmICghc3RyY21wICh3YWxrLT5wYXRoLCBub3JtYWxfcGF0aCkpIHsKKwkJCXBlZF9mcmVlIChub3JtYWxfcGF0aCk7CisJCQlyZXR1cm4gd2FsazsKKwkJfQorCX0KKworCXdhbGsgPSBwZWRfYXJjaGl0ZWN0dXJlLT5kZXZfb3BzLT5fbmV3IChub3JtYWxfcGF0aCk7CisJcGVkX2ZyZWUgKG5vcm1hbF9wYXRoKTsKKwlpZiAoIXdhbGspCisJCXJldHVybiBOVUxMOworCV9kZXZpY2VfcmVnaXN0ZXIgKHdhbGspOworCXJldHVybiB3YWxrOworfQorCisvKioKKyAqIERlc3Ryb3lzIGEgZGV2aWNlIGFuZCByZW1vdmVzIGl0IGZyb20gdGhlIGRldmljZSBsaXN0LCBhbmQgZnJlZXMKKyAqIGFsbCByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZXZpY2UgKGFsbCByZXNvdXJjZXMgYWxsb2NhdGVkCisgKiB3aGVuIHRoZSBkZXZpY2Ugd2FzIGNyZWF0ZWQpLgorICovCit2b2lkCitwZWRfZGV2aWNlX2Rlc3Ryb3kgKFBlZERldmljZSogZGV2KQoreworCV9kZXZpY2VfdW5yZWdpc3RlciAoZGV2KTsKKworCXdoaWxlIChkZXYtPm9wZW5fY291bnQpIHsKKwkJaWYgKCFwZWRfZGV2aWNlX2Nsb3NlIChkZXYpKQorCQkJYnJlYWs7CisJfQorCisJcGVkX2FyY2hpdGVjdHVyZS0+ZGV2X29wcy0+ZGVzdHJveSAoZGV2KTsKK30KKwordm9pZAorcGVkX2RldmljZV9jYWNoZV9yZW1vdmUoUGVkRGV2aWNlICpkZXYpCit7CisJX2RldmljZV91bnJlZ2lzdGVyIChkZXYpOworfQorCitpbnQKK3BlZF9kZXZpY2VfaXNfYnVzeSAoUGVkRGV2aWNlKiBkZXYpCit7CisJcmV0dXJuIHBlZF9hcmNoaXRlY3R1cmUtPmRldl9vcHMtPmlzX2J1c3kgKGRldik7Cit9CisKKy8qKgorICogQXR0ZW1wdCB0byBvcGVuIGEgZGV2aWNlIHRvIGFsbG93IHVzZSBvZiByZWFkLCB3cml0ZSBhbmQgc3luYyBmdW5jdGlvbnMuCisgKgorICogVGhlIG1lYW5pbmcgb2YgIm9wZW4iIGlzIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQuICBBcGFydCBmcm9tIHJlcXVlc3RpbmcKKyAqIGFjY2VzcyB0byB0aGUgZGV2aWNlIGZyb20gdGhlIG9wZXJhdGluZyBzeXN0ZW0sIGl0IGRvZXMgdGhpbmdzIGxpa2UgZmx1c2hpbmcKKyAqIGNhY2hlcy4KKyAqIFxub3RlIE1heSBhbGxvY2F0ZSByZXNvdXJjZXMuICBBbnkgcmVzb3VyY2VzIGFsbG9jYXRlZCBoZXJlIHdpbGwKKyAqIGJlIGZyZWVkIGJ5IGEgZmluYWwgcGVkX2RldmljZV9jbG9zZSgpLiAgKHBlZF9kZXZpY2Vfb3BlbigpIG1heSBiZQorICogY2FsbGVkIG11bHRpcGxlIHRpbWVzIC0tIGl0J3MgYSByZWYtY291bnQtbGlrZSBtZWNoYW5pc20pCisgKgorICogXHJldHVybiB6ZXJvIG9uIGZhaWx1cmUKKyAqLworaW50CitwZWRfZGV2aWNlX29wZW4gKFBlZERldmljZSogZGV2KQoreworCWludAlzdGF0dXM7CisKKwlQRURfQVNTRVJUIChkZXYgIT0gTlVMTCwgcmV0dXJuIDApOworCVBFRF9BU1NFUlQgKCFkZXYtPmV4dGVybmFsX21vZGUsIHJldHVybiAwKTsKKworCWlmIChkZXYtPm9wZW5fY291bnQpCisJCXN0YXR1cyA9IHBlZF9hcmNoaXRlY3R1cmUtPmRldl9vcHMtPnJlZnJlc2hfb3BlbiAoZGV2KTsKKwllbHNlCisJCXN0YXR1cyA9IHBlZF9hcmNoaXRlY3R1cmUtPmRldl9vcHMtPm9wZW4gKGRldik7CisJaWYgKHN0YXR1cykKKwkJZGV2LT5vcGVuX2NvdW50Kys7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiBDbG9zZSBkZXYuCisgKiBJZiB0aGlzIGlzIHRoZSBmaW5hbCBjbG9zZSwgdGhlbiByZXNvdXJjZXMgYWxsb2NhdGVkIGJ5CisgKiBwZWRfZGV2aWNlX29wZW4oKSBhcmUgZnJlZWQuCisgKgorICogXHJldHVybiB6ZXJvIG9uIGZhaWx1cmUKKyAqLworaW50CitwZWRfZGV2aWNlX2Nsb3NlIChQZWREZXZpY2UqIGRldikKK3sKKwlQRURfQVNTRVJUIChkZXYgIT0gTlVMTCwgcmV0dXJuIDApOworCVBFRF9BU1NFUlQgKCFkZXYtPmV4dGVybmFsX21vZGUsIHJldHVybiAwKTsKKwlQRURfQVNTRVJUIChkZXYtPm9wZW5fY291bnQgPiAwLCByZXR1cm4gMCk7CisKKwlpZiAoLS1kZXYtPm9wZW5fY291bnQpCisJCXJldHVybiBwZWRfYXJjaGl0ZWN0dXJlLT5kZXZfb3BzLT5yZWZyZXNoX2Nsb3NlIChkZXYpOworCWVsc2UKKwkJcmV0dXJuIHBlZF9hcmNoaXRlY3R1cmUtPmRldl9vcHMtPmNsb3NlIChkZXYpOworfQorCisvKioKKyAqIEJlZ2lucyBleHRlcm5hbCBhY2Nlc3MgbW9kZS4gIEV4dGVybmFsIGFjY2VzcyBtb2RlIGFsbG93cyB5b3UgdG8KKyAqIHNhZmVseSBkbyBJTyBvbiB0aGUgZGV2aWNlLiAgSWYgYSBQZWREZXZpY2UgaXMgb3BlbiwgdGhlbiB5b3Ugc2hvdWxkCisgKiBub3QgZG8gYW55IElPIG9uIHRoYXQgZGV2aWNlLCBlLmcuIGJ5IGNhbGxpbmcgYW4gZXh0ZXJuYWwgcHJvZ3JhbQorICogbGlrZSBlMmZzY2ssIHVubGVzcyB5b3UgcHV0IGl0IGluIGV4dGVybmFsIGFjY2VzcyBtb2RlLiAgWW91IHNob3VsZAorICogbm90IHVzZSBhbnkgbGlicGFydGVkIGNvbW1hbmRzIHRoYXQgZG8gSU8gdG8gYSBkZXZpY2UsIGUuZy4KKyAqIHBlZF9maWxlX3N5c3RlbV97b3BlbnxyZXNpemV8Y29weX0sIHBlZF9kaXNrX3tyZWFkfHdyaXRlfSksIHdoaWxlCisgKiBhIGRldmljZSBpcyBpbiBleHRlcm5hbCBhY2Nlc3MgbW9kZS4KKyAqIEFsc28sIHlvdSBzaG91bGQgbm90IHBlZF9kZXZpY2VfY2xvc2UoKSBhIGRldmljZSwgd2hpbGUgaXQgaXMKKyAqIGluIGV4dGVybmFsIGFjY2VzcyBtb2RlLgorICogTm90ZTogcGVkX2RldmljZV9iZWdpbl9leHRlcm5hbF9hY2Nlc3NfbW9kZSgpIGRvZXMgdGhpbmdzIGxpa2UKKyAqIHRlbGwgdGhlIGtlcm5lbCB0byBmbHVzaCBpdHMgY2FjaGVzLgorICoKKyAqIENsb3NlIGEgZGV2aWNlIHdoaWxlIHByZXRlbmRpbmcgaXQgaXMgc3RpbGwgb3Blbi4KKyAqIFRoaXMgaXMgdXNlZnVsIGZvciB0ZW1wb3JhcmlseSBzdXNwZW5kaW5nIGxpYnBhcnRlZCBhY2Nlc3MgdG8gdGhlIGRldmljZQorICogaW4gb3JkZXIgZm9yIGFuIGV4dGVybmFsIHByb2dyYW0gdG8gYWNjZXNzIGl0LgorICogKFJ1bm5pbmcgZXh0ZXJuYWwgcHJvZ3JhbXMgd2hpbGUgdGhlIGRldmljZSBpcyBvcGVuIGNhbiBjYXVzZSBjYWNoZQorICogY29oZXJlbmN5IHByb2JsZW1zLikKKyAqCisgKiBJbiBwYXJ0aWN1bGFyLCB0aGlzIGZ1bmN0aW9uIGtlZXBzIHRyYWNrIG9mIGRldi0+b3Blbl9jb3VudCwgc28gdGhhdAorICogcmVmZXJlbmNlIGNvdW50aW5nIGlzbid0IHNjcmV3ZWQgdXAuCisgKgorICogXHJldHVybiB6ZXJvIG9uIGZhaWx1cmUuCisgKi8KK2ludAorcGVkX2RldmljZV9iZWdpbl9leHRlcm5hbF9hY2Nlc3MgKFBlZERldmljZSogZGV2KQoreworCVBFRF9BU1NFUlQgKGRldiAhPSBOVUxMLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAoIWRldi0+ZXh0ZXJuYWxfbW9kZSwgcmV0dXJuIDApOworCisJZGV2LT5leHRlcm5hbF9tb2RlID0gMTsKKwlpZiAoZGV2LT5vcGVuX2NvdW50KQorCQlyZXR1cm4gcGVkX2FyY2hpdGVjdHVyZS0+ZGV2X29wcy0+Y2xvc2UgKGRldik7CisJZWxzZQorCQlyZXR1cm4gMTsKK30KKworLyoqCisgKiBcYnJpZWYgQ29tcGxlbWVudGFyeSBmdW5jdGlvbiB0byBwZWRfZGV2aWNlX2JlZ2luX2V4dGVybmFsX2FjY2Vzcy4KKyAqCisgKiBcbm90ZSBkb2VzIHRoaW5ncyBsaWtlIHRlbGwgdGhlIGtlcm5lbCB0byBmbHVzaCB0aGUgZGV2aWNlJ3MgY2FjaGUuCisgKgorICogXHJldHVybiB6ZXJvIG9uIGZhaWx1cmUuCisgKi8KK2ludAorcGVkX2RldmljZV9lbmRfZXh0ZXJuYWxfYWNjZXNzIChQZWREZXZpY2UqIGRldikKK3sKKwlQRURfQVNTRVJUIChkZXYgIT0gTlVMTCwgcmV0dXJuIDApOworCVBFRF9BU1NFUlQgKGRldi0+ZXh0ZXJuYWxfbW9kZSwgcmV0dXJuIDApOworCisJZGV2LT5leHRlcm5hbF9tb2RlID0gMDsKKwlpZiAoZGV2LT5vcGVuX2NvdW50KQorCQlyZXR1cm4gcGVkX2FyY2hpdGVjdHVyZS0+ZGV2X29wcy0+b3BlbiAoZGV2KTsKKwllbHNlCisJCXJldHVybiAxOworfQorCisvKioKKyAqIFxpbnRlcm5hbCBSZWFkIGNvdW50IHNlY3RvcnMgZnJvbSBkZXYgaW50byBidWZmZXIsIGJlZ2lubmluZyB3aXRoIHNlY3RvcgorICogc3RhcnQuCisgKiAKKyAqIFxyZXR1cm4gemVybyBvbiBmYWlsdXJlLgorICovCitpbnQKK3BlZF9kZXZpY2VfcmVhZCAoY29uc3QgUGVkRGV2aWNlKiBkZXYsIHZvaWQqIGJ1ZmZlciwgUGVkU2VjdG9yIHN0YXJ0LAorCQkgUGVkU2VjdG9yIGNvdW50KQoreworCVBFRF9BU1NFUlQgKGRldiAhPSBOVUxMLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAoYnVmZmVyICE9IE5VTEwsIHJldHVybiAwKTsKKwlQRURfQVNTRVJUICghZGV2LT5leHRlcm5hbF9tb2RlLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAoZGV2LT5vcGVuX2NvdW50ID4gMCwgcmV0dXJuIDApOworCisJcmV0dXJuIChwZWRfYXJjaGl0ZWN0dXJlLT5kZXZfb3BzLT5yZWFkKSAoZGV2LCBidWZmZXIsIHN0YXJ0LCBjb3VudCk7Cit9CisKKy8qKgorICogXGludGVybmFsIFdyaXRlIGNvdW50IHNlY3RvcnMgZnJvbSBidWZmZXIgdG8gZGV2LCBzdGFydGluZyBhdCBzZWN0b3IKKyAqIHN0YXJ0LgorICogCisgKiBccmV0dXJuIHplcm8gb24gZmFpbHVyZS4KKyAqCisgKiBcc2EgUGVkRGV2aWNlOjpzZWN0b3Jfc2l6ZQorICogXHNhIFBlZERldmljZTo6cGh5c19zZWN0b3Jfc2l6ZQorICovCitpbnQKK3BlZF9kZXZpY2Vfd3JpdGUgKFBlZERldmljZSogZGV2LCBjb25zdCB2b2lkKiBidWZmZXIsIFBlZFNlY3RvciBzdGFydCwKKwkJICBQZWRTZWN0b3IgY291bnQpCit7CisJUEVEX0FTU0VSVCAoZGV2ICE9IE5VTEwsIHJldHVybiAwKTsKKwlQRURfQVNTRVJUIChidWZmZXIgIT0gTlVMTCwgcmV0dXJuIDApOworCVBFRF9BU1NFUlQgKCFkZXYtPmV4dGVybmFsX21vZGUsIHJldHVybiAwKTsKKwlQRURfQVNTRVJUIChkZXYtPm9wZW5fY291bnQgPiAwLCByZXR1cm4gMCk7CisKKwlyZXR1cm4gKHBlZF9hcmNoaXRlY3R1cmUtPmRldl9vcHMtPndyaXRlKSAoZGV2LCBidWZmZXIsIHN0YXJ0LCBjb3VudCk7Cit9CisKK1BlZFNlY3RvcgorcGVkX2RldmljZV9jaGVjayAoUGVkRGV2aWNlKiBkZXYsIHZvaWQqIGJ1ZmZlciwgUGVkU2VjdG9yIHN0YXJ0LAorCQkgIFBlZFNlY3RvciBjb3VudCkKK3sKKwlQRURfQVNTRVJUIChkZXYgIT0gTlVMTCwgcmV0dXJuIDApOworCVBFRF9BU1NFUlQgKCFkZXYtPmV4dGVybmFsX21vZGUsIHJldHVybiAwKTsKKwlQRURfQVNTRVJUIChkZXYtPm9wZW5fY291bnQgPiAwLCByZXR1cm4gMCk7CisKKwlyZXR1cm4gKHBlZF9hcmNoaXRlY3R1cmUtPmRldl9vcHMtPmNoZWNrKSAoZGV2LCBidWZmZXIsIHN0YXJ0LCBjb3VudCk7Cit9CisKKy8qKgorICogXGludGVybmFsIEZsdXNoZXMgYWxsIHdyaXRlLWJlaGluZCBjYWNoZXMgdGhhdCBtaWdodCBiZSBob2xkaW5nIHVwCisgKiB3cml0ZXMuCisgKiBJdCBpcyBzbG93IGJlY2F1c2UgaXQgZ3VhcmFudGVlcyBjYWNoZSBjb2hlcmVuY3kgYW1vbmcgYWxsIHJlbGV2YW50IGNhY2hlcy4KKyAqCisgKiBccmV0dXJuIHplcm8gb24gZmFpbHVyZQorICovCitpbnQKK3BlZF9kZXZpY2Vfc3luYyAoUGVkRGV2aWNlKiBkZXYpCit7CisJUEVEX0FTU0VSVCAoZGV2ICE9IE5VTEwsIHJldHVybiAwKTsKKwlQRURfQVNTRVJUICghZGV2LT5leHRlcm5hbF9tb2RlLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAoZGV2LT5vcGVuX2NvdW50ID4gMCwgcmV0dXJuIDApOworCisJcmV0dXJuIHBlZF9hcmNoaXRlY3R1cmUtPmRldl9vcHMtPnN5bmMgKGRldik7Cit9CisKKy8qKgorICogXGludGVybmFsIEZsdXNoZXMgYWxsIHdyaXRlLWJlaGluZCBjYWNoZXMgdGhhdCBtaWdodCBiZSBob2xkaW5nIHdyaXRlcy4KKyAqIFx3YXJuaW5nIERvZXMgTk9UIGVuc3VyZSBjYWNoZSBjb2hlcmVuY3kgd2l0aCBvdGhlciBjYWNoZXMuCisgKiBJZiB5b3UgbmVlZCBjYWNoZSBjb2hlcmVuY3ksIHVzZSBwZWRfZGV2aWNlX3N5bmMoKSBpbnN0ZWFkLgorICoKKyAqIFxyZXR1cm4gemVybyBvbiBmYWlsdXJlCisgKi8KK2ludAorcGVkX2RldmljZV9zeW5jX2Zhc3QgKFBlZERldmljZSogZGV2KQoreworCVBFRF9BU1NFUlQgKGRldiAhPSBOVUxMLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAoIWRldi0+ZXh0ZXJuYWxfbW9kZSwgcmV0dXJuIDApOworCVBFRF9BU1NFUlQgKGRldi0+b3Blbl9jb3VudCA+IDAsIHJldHVybiAwKTsKKworCXJldHVybiBwZWRfYXJjaGl0ZWN0dXJlLT5kZXZfb3BzLT5zeW5jX2Zhc3QgKGRldik7Cit9CisKKy8qKgorICogR2V0IGEgY29uc3RyYWludCB0aGF0IHJlcHJlc2VudHMgaGFyZHdhcmUgcmVxdWlyZW1lbnRzIG9uIGFsaWdubWVudCBhbmQKKyAqIGdlb21ldHJ5LgorICogVGhpcyBpcywgZm9yIGV4YW1wbGUsIGltcG9ydGFudCBmb3IgbWVkaWEgdGhhdCBoYXZlIGEgcGh5c2ljYWwgc2VjdG9yCisgKiBzaXplIHRoYXQgaXMgYSBtdWx0aXBsZSBvZiB0aGUgbG9naWNhbCBzZWN0b3Igc2l6ZS4KKyAqCisgKiBcd2FybmluZyBUaGlzIGZ1bmN0aW9uIGlzIGV4cGVyaW1lbnRhbCBmb3IgcGh5c2ljYWwgc2VjdG9yIHNpemVzIG5vdCBlcXVhbCB0bworICogICAgICAgICAgMl45LgorICovCitQZWRDb25zdHJhaW50KgorcGVkX2RldmljZV9nZXRfY29uc3RyYWludCAoUGVkRGV2aWNlKiBkZXYpCit7CisgICAgICAgIGludCBtdWx0aXBsaWVyID0gZGV2LT5waHlzX3NlY3Rvcl9zaXplIC8gZGV2LT5zZWN0b3Jfc2l6ZTsKKworICAgICAgICBQZWRBbGlnbm1lbnQqIHN0YXJ0X2FsaWduID0gcGVkX2FsaWdubWVudF9uZXcgKG11bHRpcGxpZXIsIG11bHRpcGxpZXIpOworICAgICAgICAKKyAgICAgICAgUGVkQ29uc3RyYWludCogYyA9IHBlZF9jb25zdHJhaW50X25ldyAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2FsaWduLCBwZWRfYWxpZ25tZW50X2FueSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVkX2dlb21ldHJ5X25ldyAoZGV2LCAwLCBkZXYtPmxlbmd0aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZF9nZW9tZXRyeV9uZXcgKGRldiwgMCwgZGV2LT5sZW5ndGgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCBkZXYtPmxlbmd0aCk7CisKKyAgICAgICAgcmV0dXJuIGM7Cit9CisKKy8qKiBAfSAqLworCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2Rpc2suYyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZGlzay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4MzE3MDIKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2Rpc2suYwpAQCAtMCwwICsxLDIyNjYgQEAKKyAvKgorICAgIGxpYnBhcnRlZCAtIGEgbGlicmFyeSBmb3IgbWFuaXB1bGF0aW5nIGRpc2sgcGFydGl0aW9ucworICAgIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNSwgMjAwNworICAgICAgICAgICAgICAgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCisqLworCisvKiogXGZpbGUgZGlzay5jICovCisKKy8qKgorICogXGFkZHRvZ3JvdXAgUGVkRGlzaworICoKKyAqIFxicmllZiBEaXNrIGxhYmVsIGFjY2Vzcy4KKyAqIAorICogTW9zdCBwcm9ncmFtcyB3aWxsIG5lZWQgdG8gdXNlIHBlZF9kaXNrX25ldygpIG9yIHBlZF9kaXNrX25ld19mcmVzaCgpIHRvIGdldAorICogYW55dGhpbmcgZG9uZS4gIEEgUGVkRGlzayBpcyBhbHdheXMgYXNzb2NpYXRlZCB3aXRoIGEgZGV2aWNlIGFuZCBoYXMgYQorICogcGFydGl0aW9uIHRhYmxlLiAgVGhlcmUgYXJlIGRpZmZlcmVudCB0eXBlcyBvZiBwYXJ0aXRpb24gdGFibGVzIChvciBkaXNrCisgKiBsYWJlbHMpLiAgVGhlc2UgYXJlIHJlcHJlc2VudGVkIGJ5IHRoZSBQZWREaXNrVHlwZSBlbnVtZXJhdGlvbi4KKyAqCisgKiBAeworICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworI2luY2x1ZGUgPHBhcnRlZC9wYXJ0ZWQuaD4KKyNpbmNsdWRlIDxwYXJ0ZWQvZGVidWcuaD4KKworI2lmIEVOQUJMRV9OTFMKKyMgIGluY2x1ZGUgPGxpYmludGwuaD4KKyMgIGRlZmluZSBfKFN0cmluZykgZGdldHRleHQgKFBBQ0tBR0UsIFN0cmluZykKKyMgIGRlZmluZSBOXyhTdHJpbmcpIChTdHJpbmcpCisjZWxzZQorIyAgZGVmaW5lIF8oU3RyaW5nKSAoU3RyaW5nKQorIyAgZGVmaW5lIE5fKFN0cmluZykgKFN0cmluZykKKyNlbmRpZiAvKiBFTkFCTEVfTkxTICovCisKKy8qIFVQREFURSBNT0RFIGZ1bmN0aW9ucyAqLworI2lmZGVmIERFQlVHCitzdGF0aWMgaW50IF9kaXNrX2NoZWNrX3Nhbml0eSAoUGVkRGlzayogZGlzayk7CisjZW5kaWYKK3N0YXRpYyB2b2lkIF9kaXNrX3B1c2hfdXBkYXRlX21vZGUgKFBlZERpc2sqIGRpc2spOworc3RhdGljIHZvaWQgX2Rpc2tfcG9wX3VwZGF0ZV9tb2RlIChQZWREaXNrKiBkaXNrKTsKK3N0YXRpYyBpbnQgX2Rpc2tfcmF3X2luc2VydF9iZWZvcmUgKFBlZERpc2sqIGRpc2ssIFBlZFBhcnRpdGlvbiogbG9jLAorCQkJCSAgICBQZWRQYXJ0aXRpb24qIHBhcnQpOworc3RhdGljIGludCBfZGlza19yYXdfaW5zZXJ0X2FmdGVyIChQZWREaXNrKiBkaXNrLCBQZWRQYXJ0aXRpb24qIGxvYywKKwkJCQkgICBQZWRQYXJ0aXRpb24qIHBhcnQpOworc3RhdGljIGludCBfZGlza19yYXdfcmVtb3ZlIChQZWREaXNrKiBkaXNrLCBQZWRQYXJ0aXRpb24qIHBhcnQpOworc3RhdGljIGludCBfZGlza19yYXdfYWRkIChQZWREaXNrKiBkaXNrLCBQZWRQYXJ0aXRpb24qIHBhcnQpOworCitzdGF0aWMgUGVkRGlza1R5cGUqCWRpc2tfdHlwZXMgPSBOVUxMOworCit2b2lkCitwZWRfZGlza190eXBlX3JlZ2lzdGVyIChQZWREaXNrVHlwZSogZGlza190eXBlKQoreworCVBFRF9BU1NFUlQgKGRpc2tfdHlwZSAhPSBOVUxMLCByZXR1cm4pOworCVBFRF9BU1NFUlQgKGRpc2tfdHlwZS0+b3BzICE9IE5VTEwsIHJldHVybik7CisJUEVEX0FTU0VSVCAoZGlza190eXBlLT5uYW1lICE9IE5VTEwsIHJldHVybik7CisJCisJLyogcHJldGVuZCB0aGF0ICJuZXh0IiBpc24ndCBwYXJ0IG9mIHRoZSBzdHJ1Y3QgOi0pICovCisJKChzdHJ1Y3QgX1BlZERpc2tUeXBlKikgZGlza190eXBlKS0+bmV4dCA9IGRpc2tfdHlwZXM7CisJZGlza190eXBlcyA9IChzdHJ1Y3QgX1BlZERpc2tUeXBlKikgZGlza190eXBlOworfQorCit2b2lkCitwZWRfZGlza190eXBlX3VucmVnaXN0ZXIgKFBlZERpc2tUeXBlKiBkaXNrX3R5cGUpCit7CisJUGVkRGlza1R5cGUqCXdhbGs7CisJUGVkRGlza1R5cGUqCWxhc3QgPSBOVUxMOworCisJUEVEX0FTU0VSVCAoZGlza190eXBlcyAhPSBOVUxMLCByZXR1cm4pOworCVBFRF9BU1NFUlQgKGRpc2tfdHlwZSAhPSBOVUxMLCByZXR1cm4pOworCisJZm9yICh3YWxrID0gZGlza190eXBlczsgd2FsayAmJiB3YWxrICE9IGRpc2tfdHlwZTsKKyAgICAgICAgICAgICAgICBsYXN0ID0gd2Fsaywgd2FsayA9IHdhbGstPm5leHQpOworCisJUEVEX0FTU0VSVCAod2FsayAhPSBOVUxMLCByZXR1cm4pOworCWlmIChsYXN0KQorCQkoKHN0cnVjdCBfUGVkRGlza1R5cGUqKSBsYXN0KS0+bmV4dCA9IGRpc2tfdHlwZS0+bmV4dDsKKwllbHNlCisJCWRpc2tfdHlwZXMgPSBkaXNrX3R5cGUtPm5leHQ7Cit9CisKKy8qKgorICogRGVwcmVjYXRlZDogdXNlIHBlZF9kaXNrX3R5cGVfcmVnaXNlci4KKyAqLwordm9pZAorcGVkX3JlZ2lzdGVyX2Rpc2tfdHlwZSAoUGVkRGlza1R5cGUqIGRpc2tfdHlwZSkKK3sKKyAgICAgICAgcGVkX2Rpc2tfdHlwZV9yZWdpc3RlciAoZGlza190eXBlKTsKK30KKworLyoqCisgKiBEZXByZWNhdGVkOiB1c2UgcGVkX2Rpc2tfdHlwZV91bnJlZ2lzZXIuCisgKi8KK3ZvaWQKK3BlZF91bnJlZ2lzdGVyX2Rpc2tfdHlwZSAoUGVkRGlza1R5cGUqIGRpc2tfdHlwZSkKK3sKKyAgICAgICAgcGVkX2Rpc2tfdHlwZV91bnJlZ2lzdGVyIChkaXNrX3R5cGUpOworfQorCisvKioKKyAqIFJldHVybiB0aGUgbmV4dCBkaXNrIHR5cGUgcmVnaXN0ZXJzLCBhZnRlciAidHlwZSIuICBJZiAidHlwZSIgaXMKKyAqIE5VTEwsIHJldHVybnMgdGhlIGZpcnN0IGRpc2sgdHlwZS4KKyAqCisgKiBccmV0dXJuIE5leHQgZGlzazsgTlVMTCBpZiAidHlwZSIgaXMgdGhlIGxhc3QgcmVnaXN0ZXJlZCBkaXNrIHR5cGUuCisgKi8KK1BlZERpc2tUeXBlKgorcGVkX2Rpc2tfdHlwZV9nZXRfbmV4dCAoUGVkRGlza1R5cGUqIHR5cGUpCit7CisJaWYgKHR5cGUpCisJCXJldHVybiB0eXBlLT5uZXh0OworCWVsc2UKKwkJcmV0dXJuIGRpc2tfdHlwZXM7Cit9CisKKy8qKgorICogUmV0dXJuIHRoZSBkaXNrIHR5cGUgd2l0aCBhIG5hbWUgb2YgIm5hbWUiLgorICoKKyAqIFxyZXR1cm4gRGlzayB0eXBlOyBOVUxMIGlmIG5vIG1hdGNoLgorICovCitQZWREaXNrVHlwZSoKK3BlZF9kaXNrX3R5cGVfZ2V0IChjb25zdCBjaGFyKiBuYW1lKQoreworCVBlZERpc2tUeXBlKgl3YWxrID0gTlVMTDsKKworCVBFRF9BU1NFUlQgKG5hbWUgIT0gTlVMTCwgcmV0dXJuIE5VTEwpOworCisJZm9yICh3YWxrID0gcGVkX2Rpc2tfdHlwZV9nZXRfbmV4dCAoTlVMTCk7IHdhbGs7CisJICAgICB3YWxrID0gcGVkX2Rpc2tfdHlwZV9nZXRfbmV4dCAod2FsaykpCisJCQlpZiAoc3RyY2FzZWNtcCAod2Fsay0+bmFtZSwgbmFtZSkgPT0gMCkKKwkJCQkJYnJlYWs7CisKKwlyZXR1cm4gd2FsazsKK30KKworLyoqCisgKiBSZXR1cm4gdGhlIHR5cGUgb2YgcGFydGl0aW9uIHRhYmxlIGRldGVjdGVkIG9uICJkZXYiLgorICoKKyAqIFxyZXR1cm4gVHlwZTsgTlVMTCBpZiBub25lIHdhcyBkZXRlY3RlZC4KKyAqLworUGVkRGlza1R5cGUqCitwZWRfZGlza19wcm9iZSAoUGVkRGV2aWNlKiBkZXYpCit7CisgICAgICAgIFBlZERpc2tUeXBlICp3YWxrID0gTlVMTDsKKworICAgICAgICBQRURfQVNTRVJUIChkZXYgIT0gTlVMTCwgcmV0dXJuIE5VTEwpOworCisgICAgICAgIGlmICghcGVkX2RldmljZV9vcGVuIChkZXYpKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworCisgICAgICAgIHBlZF9leGNlcHRpb25fZmV0Y2hfYWxsICgpOworICAgICAgICBmb3IgKHdhbGsgPSBwZWRfZGlza190eXBlX2dldF9uZXh0IChOVUxMKTsgd2FsazsKKyAgICAgICAgICAgICB3YWxrID0gcGVkX2Rpc2tfdHlwZV9nZXRfbmV4dCAod2FsaykpIHsKKyAgICAgICAgICAgICAgICBpZiAod2Fsay0+b3BzLT5wcm9iZSAoZGV2KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHBlZF9leGNlcHRpb24pCisgICAgICAgICAgICAgICAgcGVkX2V4Y2VwdGlvbl9jYXRjaCAoKTsKKyAgICAgICAgcGVkX2V4Y2VwdGlvbl9sZWF2ZV9hbGwgKCk7CisKKyAgICAgICAgcGVkX2RldmljZV9jbG9zZSAoZGV2KTsKKyAgICAgICAgcmV0dXJuIHdhbGs7Cit9CisKKy8qKgorICogUmVhZCB0aGUgcGFydGl0aW9uIHRhYmxlIG9mZiBhIGRldmljZSAoaWYgb25lIGlzIGZvdW5kKS4gCisgKiAKKyAqIFx3YXJuaW5nIE1heSBtb2RpZnkgXHAgZGV2LT5jeWxpbmRlcnMsIFxwIGRldi0+aGVhZHMgYW5kIFxwIGRldi0+c2VjdG9ycworICogICAgICBpZiB0aGUgcGFydGl0aW9uIHRhYmxlIGluZGljYXRlcyB0aGF0IHRoZSBleGlzdGluZyB2YWx1ZXMKKyAqICAgICAgYXJlIGluY29ycmVjdC4KKyAqIAorICogXHJldHVybiBBIG5ldyBcbGluayBfUGVkRGlzayBQZWREaXNrIFxlbmRsaW5rIG9iamVjdDsKKyAqICAgICAgICAgTlVMTCBvbiBmYWlsdXJlIChlLmcuIHBhcnRpdGlvbiB0YWJsZSBub3QgZGV0ZWN0ZWQpLgorICovCitQZWREaXNrKgorcGVkX2Rpc2tfbmV3IChQZWREZXZpY2UqIGRldikKK3sKKwlQZWREaXNrVHlwZSoJdHlwZTsKKwlQZWREaXNrKglkaXNrOworCisJUEVEX0FTU0VSVCAoZGV2ICE9IE5VTEwsIHJldHVybiBOVUxMKTsKKworCWlmICghcGVkX2RldmljZV9vcGVuIChkZXYpKQorCQlnb3RvIGVycm9yOworCisJdHlwZSA9IHBlZF9kaXNrX3Byb2JlIChkZXYpOworCWlmICghdHlwZSkgeworCQlwZWRfZXhjZXB0aW9uX3Rocm93IChQRURfRVhDRVBUSU9OX0VSUk9SLCBQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCV8oIlVuYWJsZSB0byBvcGVuICVzIC0gdW5yZWNvZ25pc2VkIGRpc2sgbGFiZWwuIiksCisJCQlkZXYtPnBhdGgpOworCQlnb3RvIGVycm9yX2Nsb3NlX2RldjsKKwl9CisJZGlzayA9IHBlZF9kaXNrX25ld19mcmVzaCAoZGV2LCB0eXBlKTsKKwlpZiAoIWRpc2spCisJCWdvdG8gZXJyb3JfY2xvc2VfZGV2OworCWlmICghdHlwZS0+b3BzLT5yZWFkIChkaXNrKSkKKwkJZ290byBlcnJvcl9kZXN0cm95X2Rpc2s7CisJZGlzay0+bmVlZHNfY2xvYmJlciA9IDA7CisJcGVkX2RldmljZV9jbG9zZSAoZGV2KTsKKwlyZXR1cm4gZGlzazsKKworZXJyb3JfZGVzdHJveV9kaXNrOgorCXBlZF9kaXNrX2Rlc3Ryb3kgKGRpc2spOworZXJyb3JfY2xvc2VfZGV2OgorCXBlZF9kZXZpY2VfY2xvc2UgKGRldik7CitlcnJvcjoKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludAorX2FkZF9kdXBsaWNhdGVfcGFydCAoUGVkRGlzayogZGlzaywgUGVkUGFydGl0aW9uKiBvbGRfcGFydCkKK3sKKwlQZWRQYXJ0aXRpb24qCW5ld19wYXJ0OworCVBlZENvbnN0cmFpbnQqCWNvbnN0cmFpbnRfZXhhY3Q7CisKKwluZXdfcGFydCA9IGRpc2stPnR5cGUtPm9wcy0+cGFydGl0aW9uX2R1cGxpY2F0ZSAob2xkX3BhcnQpOworCWlmICghbmV3X3BhcnQpCisJCWdvdG8gZXJyb3I7CisJbmV3X3BhcnQtPmRpc2sgPSBkaXNrOworCisJY29uc3RyYWludF9leGFjdCA9IHBlZF9jb25zdHJhaW50X2V4YWN0ICgmbmV3X3BhcnQtPmdlb20pOworCWlmICghY29uc3RyYWludF9leGFjdCkKKwkJZ290byBlcnJvcl9kZXN0cm95X25ld19wYXJ0OworCWlmICghcGVkX2Rpc2tfYWRkX3BhcnRpdGlvbiAoZGlzaywgbmV3X3BhcnQsIGNvbnN0cmFpbnRfZXhhY3QpKQorICAgICAgIAkJZ290byBlcnJvcl9kZXN0cm95X2NvbnN0cmFpbnRfZXhhY3Q7CisJcGVkX2NvbnN0cmFpbnRfZGVzdHJveSAoY29uc3RyYWludF9leGFjdCk7CisJcmV0dXJuIDE7CisKK2Vycm9yX2Rlc3Ryb3lfY29uc3RyYWludF9leGFjdDoKKwlwZWRfY29uc3RyYWludF9kZXN0cm95IChjb25zdHJhaW50X2V4YWN0KTsKK2Vycm9yX2Rlc3Ryb3lfbmV3X3BhcnQ6CisJcGVkX3BhcnRpdGlvbl9kZXN0cm95IChuZXdfcGFydCk7CitlcnJvcjoKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBDbG9uZSBhIFxsaW5rIF9QZWREaXNrIFBlZERpc2sgXGVuZGxpbmsgb2JqZWN0LgorICoKKyAqIFxyZXR1cm4gRGVlcCBjb3B5IG9mIFxwIG9sZF9kaXNrLCBOVUxMIG9uIGZhaWx1cmUuCisgKi8KK1BlZERpc2sqCitwZWRfZGlza19kdXBsaWNhdGUgKGNvbnN0IFBlZERpc2sqIG9sZF9kaXNrKQoreworCVBlZERpc2sqCW5ld19kaXNrOworCVBlZFBhcnRpdGlvbioJb2xkX3BhcnQ7CisKKwlQRURfQVNTRVJUIChvbGRfZGlzayAhPSBOVUxMLCByZXR1cm4gTlVMTCk7CisJUEVEX0FTU0VSVCAoIW9sZF9kaXNrLT51cGRhdGVfbW9kZSwgcmV0dXJuIE5VTEwpOworCVBFRF9BU1NFUlQgKG9sZF9kaXNrLT50eXBlLT5vcHMtPmR1cGxpY2F0ZSAhPSBOVUxMLCByZXR1cm4gTlVMTCk7CisJUEVEX0FTU0VSVCAob2xkX2Rpc2stPnR5cGUtPm9wcy0+cGFydGl0aW9uX2R1cGxpY2F0ZSAhPSBOVUxMLAorCQkgICAgcmV0dXJuIE5VTEwpOworCisJbmV3X2Rpc2sgPSBvbGRfZGlzay0+dHlwZS0+b3BzLT5kdXBsaWNhdGUgKG9sZF9kaXNrKTsKKwlpZiAoIW5ld19kaXNrKQorCQlnb3RvIGVycm9yOworCisJX2Rpc2tfcHVzaF91cGRhdGVfbW9kZSAobmV3X2Rpc2spOworCWZvciAob2xkX3BhcnQgPSBwZWRfZGlza19uZXh0X3BhcnRpdGlvbiAob2xkX2Rpc2ssIE5VTEwpOyBvbGRfcGFydDsKKwkgICAgIG9sZF9wYXJ0ID0gcGVkX2Rpc2tfbmV4dF9wYXJ0aXRpb24gKG9sZF9kaXNrLCBvbGRfcGFydCkpIHsKKwkJaWYgKHBlZF9wYXJ0aXRpb25faXNfYWN0aXZlIChvbGRfcGFydCkpIHsKKwkJCWlmICghX2FkZF9kdXBsaWNhdGVfcGFydCAobmV3X2Rpc2ssIG9sZF9wYXJ0KSkKKwkJCQlnb3RvIGVycm9yX2Rlc3Ryb3lfbmV3X2Rpc2s7CisJCX0KKwl9CisJX2Rpc2tfcG9wX3VwZGF0ZV9tb2RlIChuZXdfZGlzayk7CisJcmV0dXJuIG5ld19kaXNrOworCitlcnJvcl9kZXN0cm95X25ld19kaXNrOgorCXBlZF9kaXNrX2Rlc3Ryb3kgKG5ld19kaXNrKTsKK2Vycm9yOgorCXJldHVybiBOVUxMOworfQorCisvKioKKyAqIFJlbW92ZSBhbGwgaWRlbnRpZnlpbmcgc2lnbmF0dXJlcyBvZiBhIHBhcnRpdGlvbiB0YWJsZSwKKyAqIGV4Y2VwdCBmb3IgcGFydGl0aW9uIHRhYmxlcyBvZiBhIGdpdmVuIHR5cGUuCisgKiAKKyAqIFxyZXR1cm4gMCBvbiBlcnJvciwgMSBvdGhlcndpc2UuCisgKiAKKyAqIFxzYSBwZWRfZGlza19jbG9iYmVyKCkKKyAqLworaW50CitwZWRfZGlza19jbG9iYmVyX2V4Y2x1ZGUgKFBlZERldmljZSogZGV2LCBjb25zdCBQZWREaXNrVHlwZSogZXhjbHVkZSkKK3sKKwlQZWREaXNrVHlwZSoJd2FsazsKKworCVBFRF9BU1NFUlQgKGRldiAhPSBOVUxMLCBnb3RvIGVycm9yKTsKKworCWlmICghcGVkX2RldmljZV9vcGVuIChkZXYpKQorCQlnb3RvIGVycm9yOworCisJZm9yICh3YWxrID0gcGVkX2Rpc2tfdHlwZV9nZXRfbmV4dCAoTlVMTCk7IHdhbGs7CisJICAgICB3YWxrID0gcGVkX2Rpc2tfdHlwZV9nZXRfbmV4dCAod2FsaykpIHsKKwkJaW50CXByb2JlZDsKKworCQlpZiAod2FsayA9PSBleGNsdWRlKQorCQkJY29udGludWU7CisKKwkJcGVkX2V4Y2VwdGlvbl9mZXRjaF9hbGwgKCk7CisJCXByb2JlZCA9IHdhbGstPm9wcy0+cHJvYmUgKGRldik7CisJCWlmICghcHJvYmVkKQorCQkJcGVkX2V4Y2VwdGlvbl9jYXRjaCAoKTsKKwkJcGVkX2V4Y2VwdGlvbl9sZWF2ZV9hbGwgKCk7CisKKwkJaWYgKHByb2JlZCAmJiB3YWxrLT5vcHMtPmNsb2JiZXIpIHsKKwkJCWlmICghd2Fsay0+b3BzLT5jbG9iYmVyIChkZXYpKQorCQkJCWdvdG8gZXJyb3JfY2xvc2VfZGV2OworCQl9CisJfQorCXBlZF9kZXZpY2VfY2xvc2UgKGRldik7CisJcmV0dXJuIDE7CisKK2Vycm9yX2Nsb3NlX2RldjoKKwlwZWRfZGV2aWNlX2Nsb3NlIChkZXYpOworZXJyb3I6CisJcmV0dXJuIDA7Cit9CisKKy8qKiAKKyAqIFJlbW92ZSBhbGwgaWRlbnRpZnlpbmcgc2lnbmF0dXJlcyBvZiBhIHBhcnRpdGlvbiB0YWJsZSwKKyAqIAorICogXHJldHVybiAwIG9uIGVycm9yLCAxIG90aGVyd2lzZS4KKyAqIAorICogXHNhIHBlZF9kaXNrX2Nsb2JiZXJfZXhjbHVkZSgpCisgKi8KK2ludAorcGVkX2Rpc2tfY2xvYmJlciAoUGVkRGV2aWNlKiBkZXYpCit7CisJcmV0dXJuIHBlZF9kaXNrX2Nsb2JiZXJfZXhjbHVkZSAoZGV2LCBOVUxMKTsKK30KKworLyoqCisgKiBDcmVhdGUgYSBuZXcgcGFydGl0aW9uIHRhYmxlIG9uIFxwIGRldi4KKyAqCisgKiBUaGlzIG5ldyBwYXJ0aXRpb24gdGFibGUgaXMgb25seSBjcmVhdGVkIGluLW1lbW9yeSwgYW5kIG5vdGhpbmcgaXMgd3JpdHRlbgorICogdG8gZGlzayB1bnRpbCBwZWRfZGlza19jb21taXRfdG9fZGV2KCkgaXMgY2FsbGVkLgorICogCisgKiBccmV0dXJuIFRoZSBuZXdseSBjb25zdHJ1Y3RlZCBcbGluayBfUGVkRGlzayBQZWREaXNrIFxlbmRsaW5rLAorICogICAgICBOVUxMIG9uIGZhaWx1cmUuCisgKi8KK1BlZERpc2sqCitwZWRfZGlza19uZXdfZnJlc2ggKFBlZERldmljZSogZGV2LCBjb25zdCBQZWREaXNrVHlwZSogdHlwZSkKK3sKKwlQZWREaXNrKglkaXNrOworCisJUEVEX0FTU0VSVCAoZGV2ICE9IE5VTEwsIHJldHVybiBOVUxMKTsKKwlQRURfQVNTRVJUICh0eXBlICE9IE5VTEwsIHJldHVybiBOVUxMKTsKKwlQRURfQVNTRVJUICh0eXBlLT5vcHMtPmFsbG9jICE9IE5VTEwsIHJldHVybiBOVUxMKTsKKworCWRpc2sgPSB0eXBlLT5vcHMtPmFsbG9jIChkZXYpOworCWlmICghZGlzaykKKyAgICAgICAJCWdvdG8gZXJyb3I7CisJX2Rpc2tfcG9wX3VwZGF0ZV9tb2RlIChkaXNrKTsKKwlQRURfQVNTRVJUIChkaXNrLT51cGRhdGVfbW9kZSA9PSAwLCBnb3RvIGVycm9yX2Rlc3Ryb3lfZGlzayk7CisKKwlkaXNrLT5uZWVkc19jbG9iYmVyID0gMTsKKwlyZXR1cm4gZGlzazsKKworZXJyb3JfZGVzdHJveV9kaXNrOgorCXBlZF9kaXNrX2Rlc3Ryb3kgKGRpc2spOworZXJyb3I6CisJcmV0dXJuIE5VTEw7Cit9CisKK1BlZERpc2sqCitfcGVkX2Rpc2tfYWxsb2MgKGNvbnN0IFBlZERldmljZSogZGV2LCBjb25zdCBQZWREaXNrVHlwZSogZGlza190eXBlKQoreworCVBlZERpc2sqCWRpc2s7CisKKwlkaXNrID0gKFBlZERpc2sqKSBwZWRfbWFsbG9jIChzaXplb2YgKFBlZERpc2spKTsKKwlpZiAoIWRpc2spCisJCWdvdG8gZXJyb3I7CisKKwlkaXNrLT5kZXYgPSAoUGVkRGV2aWNlKilkZXY7CisJZGlzay0+dHlwZSA9IGRpc2tfdHlwZTsKKwlkaXNrLT51cGRhdGVfbW9kZSA9IDE7CisJZGlzay0+cGFydF9saXN0ID0gTlVMTDsKKwlyZXR1cm4gZGlzazsKKworCXBlZF9mcmVlIChkaXNrKTsKK2Vycm9yOgorCXJldHVybiBOVUxMOworfQorCit2b2lkCitfcGVkX2Rpc2tfZnJlZSAoUGVkRGlzayogZGlzaykKK3sKKwlfZGlza19wdXNoX3VwZGF0ZV9tb2RlIChkaXNrKTsKKwlwZWRfZGlza19kZWxldGVfYWxsIChkaXNrKTsKKwlwZWRfZnJlZSAoZGlzayk7Cit9CisKKy8qKgorICogQ2xvc2UgXHAgZGlzay4KKyAqCisgKiBXaGF0IHRoaXMgZnVuY3Rpb24gZG9lcyBkZXBlbmRzIG9uIHRoZSBQZWREaXNrVHlwZSBvZiBccCBkaXNrLAorICogYnV0IHlvdSBjYW4gZ2VuZXJhbGx5IGFzc3VtZSB0aGF0IG91dHN0YW5kaW5nIHdyaXRlcyBhcmUgZmx1c2hlZAorICogKHRoaXMgbWFpbmx5IG1lYW5zIHRoYXQgX3BlZF9kaXNrX2ZyZWUgaXMgY2FsbGVkKS4KKyAqLwordm9pZAorcGVkX2Rpc2tfZGVzdHJveSAoUGVkRGlzayogZGlzaykKK3sKKwlQRURfQVNTRVJUIChkaXNrICE9IE5VTEwsIHJldHVybik7CisJUEVEX0FTU0VSVCAoIWRpc2stPnVwZGF0ZV9tb2RlLCByZXR1cm4pOworCisJZGlzay0+dHlwZS0+b3BzLT5mcmVlIChkaXNrKTsKK30KKworLyoqCisgKiBUZWxsIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGtlcm5lbCBhYm91dCB0aGUgcGFydGl0aW9uIHRhYmxlIGxheW91dAorICogb2YgXHAgZGlzay4KKyAqCisgKiBUaGlzIGlzIHJhdGhlciBsb29zZWx5IGRlZmluZWQ6IGZvciBleGFtcGxlLCBvbiBvbGQgdmVyc2lvbnMgb2YgTGludXgsCisgKiBpdCBzaW1wbHkgY2FsbHMgdGhlIEJMS1JSUEFSVCBpb2N0bCwgd2hpY2ggdGVsbHMgdGhlIGtlcm5lbCB0bworICogcmVyZWFkIHRoZSBwYXJ0aXRpb24gdGFibGUuIE9uIG5ld2VyIHZlcnNpb25zICgyLjQueCksIGl0IHdpbGwKKyAqIHVzZSB0aGUgbmV3IGJsa3BnIGludGVyZmFjZSB0byB0ZWxsIExpbnV4IHdoZXJlIGVhY2ggcGFydGl0aW9uCisgKiBzdGFydHMvZW5kcywgZXRjLiBJbiB0aGlzIGNhc2UsIExpbnV4IGRvZXMgbm90IG5lZWQgdG8gaGF2ZSBzdXBwb3J0IGZvcgorICogYSBzcGVjaWZpYyB0eXBlIG9mIHBhcnRpdGlvbiB0YWJsZS4KKyAqIAorICogXHJldHVybiAwIG9uIGZhaWx1cmUsIDEgb3RoZXJ3aXNlLgorICovCitpbnQKK3BlZF9kaXNrX2NvbW1pdF90b19vcyAoUGVkRGlzayogZGlzaykKK3sKKwlQRURfQVNTRVJUIChkaXNrICE9IE5VTEwsIHJldHVybiAwKTsKKworCWlmICghcGVkX2RldmljZV9vcGVuIChkaXNrLT5kZXYpKQorCQlnb3RvIGVycm9yOworCWlmICghcGVkX2FyY2hpdGVjdHVyZS0+ZGlza19vcHMtPmRpc2tfY29tbWl0IChkaXNrKSkKKwkJZ290byBlcnJvcl9jbG9zZV9kZXY7CisJcGVkX2RldmljZV9jbG9zZSAoZGlzay0+ZGV2KTsKKwlyZXR1cm4gMTsKKworZXJyb3JfY2xvc2VfZGV2OgorCXBlZF9kZXZpY2VfY2xvc2UgKGRpc2stPmRldik7CitlcnJvcjoKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBXcml0ZSB0aGUgY2hhbmdlcyBtYWRlIHRvIHRoZSBpbi1tZW1vcnkgZGVzY3JpcHRpb24KKyAqIG9mIGEgcGFydGl0aW9uIHRhYmxlIHRvIHRoZSBkZXZpY2UuCisgKgorICogXHJldHVybiAwIG9uIGZhaWx1cmUsIDEgb3RoZXJ3aXNlLgorICovCitpbnQKK3BlZF9kaXNrX2NvbW1pdF90b19kZXYgKFBlZERpc2sqIGRpc2spCit7CisJUEVEX0FTU0VSVCAoZGlzayAhPSBOVUxMLCBnb3RvIGVycm9yKTsKKwlQRURfQVNTRVJUICghZGlzay0+dXBkYXRlX21vZGUsIGdvdG8gZXJyb3IpOworCisJaWYgKCFkaXNrLT50eXBlLT5vcHMtPndyaXRlKSB7CisJCXBlZF9leGNlcHRpb25fdGhyb3cgKAorCQkJUEVEX0VYQ0VQVElPTl9FUlJPUiwKKwkJCVBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJXygiVGhpcyBsaWJwYXJ0ZWQgZG9lc24ndCBoYXZlIHdyaXRlIHN1cHBvcnQgZm9yICIKKwkJCSAgIiVzLiAgUGVyaGFwcyBpdCB3YXMgY29tcGlsZWQgcmVhZC1vbmx5LiIpLAorCQkJZGlzay0+dHlwZS0+bmFtZSk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJaWYgKCFwZWRfZGV2aWNlX29wZW4gKGRpc2stPmRldikpCisJCWdvdG8gZXJyb3I7CisKKwlpZiAoZGlzay0+bmVlZHNfY2xvYmJlcikgeworCQlpZiAoIXBlZF9kaXNrX2Nsb2JiZXJfZXhjbHVkZSAoZGlzay0+ZGV2LCBkaXNrLT50eXBlKSkKKwkJCWdvdG8gZXJyb3JfY2xvc2VfZGV2OworCQlkaXNrLT5uZWVkc19jbG9iYmVyID0gMDsKKwl9CisJaWYgKCFkaXNrLT50eXBlLT5vcHMtPndyaXRlIChkaXNrKSkKKwkJZ290byBlcnJvcl9jbG9zZV9kZXY7CisJcGVkX2RldmljZV9jbG9zZSAoZGlzay0+ZGV2KTsKKwlyZXR1cm4gMTsKKworZXJyb3JfY2xvc2VfZGV2OgorCXBlZF9kZXZpY2VfY2xvc2UgKGRpc2stPmRldik7CitlcnJvcjoKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gd3JpdGVzIHRoZSBpbi1tZW1vcnkgY2hhbmdlcyB0byBhIHBhcnRpdGlvbiB0YWJsZSB0bworICogZGlzayBhbmQgaW5mb3JtcyB0aGUgb3BlcmF0aW5nIHN5c3RlbSBvZiB0aGUgY2hhbmdlcy4KKyAqCisgKiBcbm90ZSBFcXVpdmFsZW50IHRvIGNhbGxpbmcgZmlyc3QgcGVkX2Rpc2tfY29tbWl0X3RvX2RldigpLCB0aGVuCisgKiAgICAgIHBlZF9kaXNrX2NvbW1pdF90b19vcygpLgorICoKKyAqIFxyZXR1cm4gMCBvbiBmYWlsdXJlLCAxIG90aGVyd2lzZS4KKyAqLworaW50CitwZWRfZGlza19jb21taXQgKFBlZERpc2sqIGRpc2spCit7CisJaWYgKCFwZWRfZGlza19jb21taXRfdG9fZGV2IChkaXNrKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHBlZF9kaXNrX2NvbW1pdF90b19vcyAoZGlzayk7Cit9CisKKy8qKgorICogXGFkZHRvZ3JvdXAgUGVkUGFydGl0aW9uCisgKgorICogQHsKKyAqLworCisvKioKKyAqIENoZWNrIHdoZXRoZXIgYSBwYXJ0aXRpb24gaXMgbW91bnRlZCBvciBidXN5IGluIHNvbWUKKyAqIG90aGVyIHdheS4KKyAqCisgKiBcbm90ZSBBbiBleHRlbmRlZCBwYXJ0aXRpb24gaXMgYnVzeSBpZiBhbnkgbG9naWNhbCBwYXJ0aXRpb25zIGFyZSBtb3VudGVkLgorICoKKyAqIFxyZXR1cm4gXGMgMSBpZiBidXN5LgorICovCitpbnQKK3BlZF9wYXJ0aXRpb25faXNfYnVzeSAoY29uc3QgUGVkUGFydGl0aW9uKiBwYXJ0KQoreworCVBFRF9BU1NFUlQgKHBhcnQgIT0gTlVMTCwgcmV0dXJuIDEpOworCisJcmV0dXJuIHBlZF9hcmNoaXRlY3R1cmUtPmRpc2tfb3BzLT5wYXJ0aXRpb25faXNfYnVzeSAocGFydCk7Cit9CisKKy8qKgorICogUmV0dXJuIGEgcGF0aCB0aGF0IGNhbiBiZSB1c2VkIHRvIGFkZHJlc3MgdGhlIHBhcnRpdGlvbiBpbiB0aGUKKyAqIG9wZXJhdGluZyBzeXN0ZW0uCisgKi8KK2NoYXIqCitwZWRfcGFydGl0aW9uX2dldF9wYXRoIChjb25zdCBQZWRQYXJ0aXRpb24qIHBhcnQpCit7CisJUEVEX0FTU0VSVCAocGFydCAhPSBOVUxMLCByZXR1cm4gTlVMTCk7CisKKwlyZXR1cm4gcGVkX2FyY2hpdGVjdHVyZS0+ZGlza19vcHMtPnBhcnRpdGlvbl9nZXRfcGF0aCAocGFydCk7Cit9CisKKy8qKiBAfSAqLworCisvKioKKyAqIFxhZGR0b2dyb3VwIFBlZERpc2sKKyAqCisgKiBAeworICovCisKKy8qKgorICogUGVyZm9ybSBhIHNhbml0eSBjaGVjayBvbiBhIHBhcnRpdGlvbiB0YWJsZS4KKyAqCisgKiBcbm90ZSBUaGUgY2hlY2sgcGVyZm9ybWVkIGlzIGdlbmVyaWMgKGkuZS4gaXQgZG9lcyBub3QgZGVwZW5kcyBvbiB0aGUgbGFiZWwKKyAqICAgICAgdHlwZSBvZiB0aGUgZGlzay4KKyAqCisgKiBcdGhyb3dzIFBFRF9FWENFUFRJT05fV0FSTklORyBpZiBhIHBhcnRpdGlvbiB0eXBlIElEIGRvZXMgbm90IG1hdGNoIHRoZSBmaWxlCisgKiAgICAgIHN5c3RlbSBvbiBpdC4KKyAqCisgKiBccmV0dXJuIDAgaWYgdGhlIGNoZWNrIGZhaWxzLCAxIG90aGVyd2lzZS4KKyAqLworaW50CitwZWRfZGlza19jaGVjayAoY29uc3QgUGVkRGlzayogZGlzaykKK3sKKwlQZWRQYXJ0aXRpb24qCXdhbGs7CisKKwlQRURfQVNTRVJUIChkaXNrICE9IE5VTEwsIHJldHVybiAwKTsKKworCWZvciAod2FsayA9IGRpc2stPnBhcnRfbGlzdDsgd2FsazsKKwkgICAgIHdhbGsgPSBwZWRfZGlza19uZXh0X3BhcnRpdGlvbiAoZGlzaywgd2FsaykpIHsKKwkJY29uc3QgUGVkRmlsZVN5c3RlbVR5cGUqCWZzX3R5cGUgPSB3YWxrLT5mc190eXBlOworCQlQZWRHZW9tZXRyeSoJCQlnZW9tOworCQlQZWRTZWN0b3IJCQlsZW5ndGhfZXJyb3I7CisJCVBlZFNlY3RvcgkJCW1heF9sZW5ndGhfZXJyb3I7CisKKwkJaWYgKCFwZWRfcGFydGl0aW9uX2lzX2FjdGl2ZSAod2FsaykgfHwgIWZzX3R5cGUpCisJCQljb250aW51ZTsKKworCQlnZW9tID0gcGVkX2ZpbGVfc3lzdGVtX3Byb2JlX3NwZWNpZmljIChmc190eXBlLCAmd2Fsay0+Z2VvbSk7CisJCWlmICghZ2VvbSkKKwkJCWNvbnRpbnVlOworCisJCWxlbmd0aF9lcnJvciA9IGFicyAod2Fsay0+Z2VvbS5sZW5ndGggLSBnZW9tLT5sZW5ndGgpOworCQltYXhfbGVuZ3RoX2Vycm9yID0gUEVEX01BWCAoNDA5Niwgd2Fsay0+Z2VvbS5sZW5ndGggLyAxMDApOworCQlpZiAoIXBlZF9nZW9tZXRyeV90ZXN0X2luc2lkZSAoJndhbGstPmdlb20sIGdlb20pCisJCSAgICB8fCBsZW5ndGhfZXJyb3IgPiBtYXhfbGVuZ3RoX2Vycm9yKSB7CisJCQljaGFyKiBwYXJ0X3NpemUgPSBwZWRfdW5pdF9mb3JtYXQgKGRpc2stPmRldiwgd2Fsay0+Z2VvbS5sZW5ndGgpOworCQkJY2hhciogZnNfc2l6ZSA9IHBlZF91bml0X2Zvcm1hdCAoZGlzay0+ZGV2LCBnZW9tLT5sZW5ndGgpOworCQkJUGVkRXhjZXB0aW9uT3B0aW9uIGNob2ljZTsKKworCQkJY2hvaWNlID0gcGVkX2V4Y2VwdGlvbl90aHJvdyAoCisJCQkJUEVEX0VYQ0VQVElPTl9XQVJOSU5HLAorCQkJCVBFRF9FWENFUFRJT05fSUdOT1JFX0NBTkNFTCwKKwkJCQlfKCJQYXJ0aXRpb24gJWQgaXMgJXMsIGJ1dCB0aGUgZmlsZSBzeXN0ZW0gaXMgIgorCQkJCSAgIiVzLiIpLAorCQkJCXdhbGstPm51bSwgcGFydF9zaXplLCBmc19zaXplKTsKKworCQkJcGVkX2ZyZWUgKHBhcnRfc2l6ZSk7CisJCQlwZWRfZnJlZSAoZnNfc2l6ZSk7CisKKwkJCWlmIChjaG9pY2UgIT0gUEVEX0VYQ0VQVElPTl9JR05PUkUpCisJCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlyZXR1cm4gMTsKK30KKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiBhIHBhcnRpY3VsYXIgdHlwZSBvZiBwYXJ0aXRpb24gdGFibGUgc3VwcG9ydHMKKyAqIGEgZmVhdHVyZS4KKyAqCisgKiBccmV0dXJuIDEgaWYgXHAgZGlza190eXBlIHN1cHBvcnRzIFxwIGZlYXR1cmUsIDAgb3RoZXJ3aXNlLgorICovCitpbnQKK3BlZF9kaXNrX3R5cGVfY2hlY2tfZmVhdHVyZSAoY29uc3QgUGVkRGlza1R5cGUqIGRpc2tfdHlwZSwKKwkJCSAgICAgUGVkRGlza1R5cGVGZWF0dXJlIGZlYXR1cmUpCit7CisJcmV0dXJuIChkaXNrX3R5cGUtPmZlYXR1cmVzICYgZmVhdHVyZSkgIT0gMDsKK30KKworLyoqCisgKiBHZXQgdGhlIG51bWJlciBvZiBwcmltYXJ5IHBhcnRpdGlvbnMuCisgKi8KK2ludAorcGVkX2Rpc2tfZ2V0X3ByaW1hcnlfcGFydGl0aW9uX2NvdW50IChjb25zdCBQZWREaXNrKiBkaXNrKQoreworCVBlZFBhcnRpdGlvbioJd2FsazsKKwlpbnQJCWNvdW50ID0gMDsKKworCVBFRF9BU1NFUlQgKGRpc2sgIT0gTlVMTCwgcmV0dXJuIDApOworCisJZm9yICh3YWxrID0gZGlzay0+cGFydF9saXN0OyB3YWxrOworCSAgICAgd2FsayA9IHBlZF9kaXNrX25leHRfcGFydGl0aW9uIChkaXNrLCB3YWxrKSkgeworCQlpZiAocGVkX3BhcnRpdGlvbl9pc19hY3RpdmUgKHdhbGspCisJCQkJJiYgISAod2Fsay0+dHlwZSAmIFBFRF9QQVJUSVRJT05fTE9HSUNBTCkpCisJCQljb3VudCsrOworCX0KKworCXJldHVybiBjb3VudDsKK30KKworLyoqCisgKiBHZXQgdGhlIGhpZ2hlc3QgcGFydGl0aW9uIG51bWJlciBvbiBccCBkaXNrLgorICovCitpbnQKK3BlZF9kaXNrX2dldF9sYXN0X3BhcnRpdGlvbl9udW0gKGNvbnN0IFBlZERpc2sqIGRpc2spCit7CisJUGVkUGFydGl0aW9uKgl3YWxrOworCWludAkJaGlnaGVzdCA9IC0xOworCisJUEVEX0FTU0VSVCAoZGlzayAhPSBOVUxMLCByZXR1cm4gMCk7CisKKwlmb3IgKHdhbGsgPSBkaXNrLT5wYXJ0X2xpc3Q7IHdhbGs7CisJICAgICB3YWxrID0gcGVkX2Rpc2tfbmV4dF9wYXJ0aXRpb24gKGRpc2ssIHdhbGspKSB7CisJCWlmICh3YWxrLT5udW0gPiBoaWdoZXN0KQorCQkJaGlnaGVzdCA9IHdhbGstPm51bTsKKwl9CisKKwlyZXR1cm4gaGlnaGVzdDsKK30KKworLyoqCisgKiBHZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIChwcmltYXJ5KSBwYXJ0aXRpb25zIHRoZSBkaXNrIGxhYmVsIHN1cHBvcnRzLgorICogCisgKiBGb3IgZXhhbXBsZSwgTWFjSW50b3NoIHBhcnRpdGlvbiBtYXBzIGNhbiBoYXZlIGRpZmZlcmVudCBzaXplcywKKyAqIGFuZCBhY2NvcmRpbmdseSBzdXBwb3J0IGEgZGlmZmVyZW50IG51bWJlciBvZiBwYXJ0aXRpb25zLgorICovCitpbnQKK3BlZF9kaXNrX2dldF9tYXhfcHJpbWFyeV9wYXJ0aXRpb25fY291bnQgKGNvbnN0IFBlZERpc2sqIGRpc2spCit7CisJUEVEX0FTU0VSVCAoZGlzay0+dHlwZSAhPSBOVUxMLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAoZGlzay0+dHlwZS0+b3BzLT5nZXRfbWF4X3ByaW1hcnlfcGFydGl0aW9uX2NvdW50ICE9IE5VTEwsCisJCSAgICByZXR1cm4gMCk7CisKKwlyZXR1cm4gZGlzay0+dHlwZS0+b3BzLT5nZXRfbWF4X3ByaW1hcnlfcGFydGl0aW9uX2NvdW50IChkaXNrKTsKK30KKworLyoqCisgKiBcaW50ZXJuYWwgV2UgdHVybmVkIGEgcmVhbGx5IG5hc3R5IGJ1cmVhdWNyYWN5IHByb2JsZW0gaW50byBhbiBlbGVnYW50IG1hdGhzCisgKiBwcm9ibGVtIDotKSAgQmFzaWNhbGx5LCB0aGVyZSBhcmUgc29tZSBjb25zdHJhaW50cyB0byBhIHBhcnRpdGlvbidzCisgKiBnZW9tZXRyeToKKyAqCisgKiAoMSkgaXQgbXVzdCBzdGFydCBhbmQgZW5kIG9uIGEgImRpc2siIGJsb2NrLCBkZXRlcm1pbmVkIGJ5IHRoZSBkaXNrIGxhYmVsCisgKiAobm90IHRoZSBoYXJkd2FyZSkuICAoY29uc3RyYWludCByZXByZXNlbnRlZCBieSBhIFBlZEFsaWdubWVudCkKKyAqCisgKiAoMikgaWYgd2UncmUgcmVzaXppbmcgYSBwYXJ0aXRpb24sIHdlIE1JR0hUIG5lZWQgdG8ga2VlcCBlYWNoIGJsb2NrIGFsaWduZWQuCisgKiBFZzogaWYgYW4gZXh0MiBmaWxlIHN5c3RlbSBoYXMgNGsgYmxvY2tzLCB0aGVuIHdlIGNhbiBvbmx5IG1vdmUgdGhlIHN0YXJ0CisgKiBieSBhIG11bHRpcGxlIG9mIDRrLiAgKGNvbnN0cmFpbnQgcmVwcmVzZW50ZWQgYnkgYSBQZWRBbGlnbm1lbnQpCisgKgorICogKDMpIHdlIG5lZWQgdG8ga2VlcCB0aGUgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIGRldmljZSdzIHBoeXNpY2FsCisgKiBib3VuZGFyaWVzLiAgKGNvbnN0cmFpbnQgcmVwcmVzZW50ZWQgYnkgYSBQZWRHZW9tZXRyeSkKKyAqCisgKiBTYXRpc2Z5aW5nICgxKSBhbmQgKDIpIHNpbXVsdGFuZW91c2x5IHJlcXVpcmVkIGEgYml0IG9mIGZhbmN5IG1hdGhzIDstKSAgU2VlCisgKiBwZWRfYWxpZ25tZW50X2ludGVyc2VjdCgpCisgKgorICogVGhlIGFwcGxpY2F0aW9uIG9mIHRoZXNlIGNvbnN0cmFpbnRzIGlzIGluIGRpc2tfKi5jJ3MgKl9wYXJ0aXRpb25fYWxpZ24oKQorICogZnVuY3Rpb24uCisgKi8KK3N0YXRpYyBpbnQKK19wYXJ0aXRpb25fYWxpZ24gKFBlZFBhcnRpdGlvbiogcGFydCwgY29uc3QgUGVkQ29uc3RyYWludCogY29uc3RyYWludCkKK3sKKwljb25zdCBQZWREaXNrVHlwZSoJZGlza190eXBlOworCisJUEVEX0FTU0VSVCAocGFydCAhPSBOVUxMLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAocGFydC0+bnVtICE9IC0xLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAocGFydC0+ZGlzayAhPSBOVUxMLCByZXR1cm4gMCk7CisJZGlza190eXBlID0gcGFydC0+ZGlzay0+dHlwZTsKKwlQRURfQVNTRVJUIChkaXNrX3R5cGUgIT0gTlVMTCwgcmV0dXJuIDApOworCVBFRF9BU1NFUlQgKGRpc2tfdHlwZS0+b3BzLT5wYXJ0aXRpb25fYWxpZ24gIT0gTlVMTCwgcmV0dXJuIDApOworCVBFRF9BU1NFUlQgKHBhcnQtPmRpc2stPnVwZGF0ZV9tb2RlLCByZXR1cm4gMCk7CisKKwlyZXR1cm4gZGlza190eXBlLT5vcHMtPnBhcnRpdGlvbl9hbGlnbiAocGFydCwgY29uc3RyYWludCk7Cit9CisKK3N0YXRpYyBpbnQKK19wYXJ0aXRpb25fZW51bWVyYXRlIChQZWRQYXJ0aXRpb24qIHBhcnQpCit7CisJY29uc3QgUGVkRGlza1R5cGUqCWRpc2tfdHlwZTsKKworCVBFRF9BU1NFUlQgKHBhcnQgIT0gTlVMTCwgcmV0dXJuIDApOworCVBFRF9BU1NFUlQgKHBhcnQtPmRpc2sgIT0gTlVMTCwgcmV0dXJuIDApOworCWRpc2tfdHlwZSA9IHBhcnQtPmRpc2stPnR5cGU7CisJUEVEX0FTU0VSVCAoZGlza190eXBlICE9IE5VTEwsIHJldHVybiAwKTsKKwlQRURfQVNTRVJUIChkaXNrX3R5cGUtPm9wcy0+cGFydGl0aW9uX2VudW1lcmF0ZSAhPSBOVUxMLCByZXR1cm4gMCk7CisKKwlyZXR1cm4gZGlza190eXBlLT5vcHMtPnBhcnRpdGlvbl9lbnVtZXJhdGUgKHBhcnQpOworfQorCisvKioKKyAqIEdpdmVzIGFsbCB0aGUgKGFjdGl2ZSkgcGFydGl0aW9ucyBhIG51bWJlci4gIEl0IHNob3VsZCBwcmVzZXJ2ZSB0aGUgbnVtYmVycworICogYW5kIG9yZGVycyBhcyBtdWNoIGFzIHBvc3NpYmxlLgorICovCitzdGF0aWMgaW50CitwZWRfZGlza19lbnVtZXJhdGVfcGFydGl0aW9ucyAoUGVkRGlzayogZGlzaykKK3sKKwlQZWRQYXJ0aXRpb24qCXdhbGs7CisJaW50CQlpOworCWludAkJZW5kOworCisJUEVEX0FTU0VSVCAoZGlzayAhPSBOVUxMLCByZXR1cm4gMCk7CisKKy8qIGZpcnN0ICJzb3J0IiBhbHJlYWR5LW51bWJlcmVkIHBhcnRpdGlvbnMuICAoZS5nLiBpZiBhIGxvZ2ljYWwgcGFydGl0aW9uCisgKiBpcyByZW1vdmVkLCB0aGVuIGFsbCBsb2dpY2FsIHBhcnRpdGlvbnMgdGhhdCB3ZXJlIG51bWJlciBoaWdoZXIgTVVTVCBiZQorICogcmVudW1iZXJlZCkKKyAqLworCWVuZCA9IHBlZF9kaXNrX2dldF9sYXN0X3BhcnRpdGlvbl9udW0gKGRpc2spOworCWZvciAoaT0xOyBpPD1lbmQ7IGkrKykgeworCQl3YWxrID0gcGVkX2Rpc2tfZ2V0X3BhcnRpdGlvbiAoZGlzaywgaSk7CisJCWlmICh3YWxrKSB7CisJCQlpZiAoIV9wYXJ0aXRpb25fZW51bWVyYXRlICh3YWxrKSkKKwkJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworLyogbm93LCBudW1iZXIgdW4tbnVtYmVyZWQgcGFydGl0aW9ucyAqLworCWZvciAod2FsayA9IGRpc2stPnBhcnRfbGlzdDsgd2FsazsKKwkgICAgIHdhbGsgPSBwZWRfZGlza19uZXh0X3BhcnRpdGlvbiAoZGlzaywgd2FsaykpIHsKKwkJaWYgKHBlZF9wYXJ0aXRpb25faXNfYWN0aXZlICh3YWxrKSAmJiB3YWxrLT5udW0gPT0gLTEpIHsKKwkJCWlmICghX3BhcnRpdGlvbl9lbnVtZXJhdGUgKHdhbGspKQorCQkJCXJldHVybiAwOworCQl9CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK19kaXNrX3JlbW92ZV9tZXRhZGF0YSAoUGVkRGlzayogZGlzaykKK3sKKwlQZWRQYXJ0aXRpb24qCXdhbGsgPSBOVUxMOworCVBlZFBhcnRpdGlvbioJbmV4dDsKKworCVBFRF9BU1NFUlQgKGRpc2sgIT0gTlVMTCwgcmV0dXJuIDApOworCisJbmV4dCA9IHBlZF9kaXNrX25leHRfcGFydGl0aW9uIChkaXNrLCB3YWxrKTsKKworCXdoaWxlIChuZXh0KSB7CisJCXdhbGsgPSBuZXh0OworCQl3aGlsZSAoMSkgeworCQkJbmV4dCA9IHBlZF9kaXNrX25leHRfcGFydGl0aW9uIChkaXNrLCBuZXh0KTsKKwkJCWlmICghbmV4dCB8fCBuZXh0LT50eXBlICYgUEVEX1BBUlRJVElPTl9NRVRBREFUQSkKKwkJCQlicmVhazsKKwkJfQorCQlpZiAod2Fsay0+dHlwZSAmIFBFRF9QQVJUSVRJT05fTUVUQURBVEEpCisJCQlwZWRfZGlza19kZWxldGVfcGFydGl0aW9uIChkaXNrLCB3YWxrKTsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK19kaXNrX2FsbG9jX21ldGFkYXRhIChQZWREaXNrKiBkaXNrKQoreworCVBFRF9BU1NFUlQgKGRpc2sgIT0gTlVMTCwgcmV0dXJuIDApOworCisJaWYgKCFkaXNrLT51cGRhdGVfbW9kZSkKKwkJX2Rpc2tfcmVtb3ZlX21ldGFkYXRhIChkaXNrKTsKKworCXJldHVybiBkaXNrLT50eXBlLT5vcHMtPmFsbG9jX21ldGFkYXRhIChkaXNrKTsKK30KKworc3RhdGljIGludAorX2Rpc2tfcmVtb3ZlX2ZyZWVzcGFjZSAoUGVkRGlzayogZGlzaykKK3sKKwlQZWRQYXJ0aXRpb24qCXdhbGs7CisJUGVkUGFydGl0aW9uKgluZXh0OworCisJd2FsayA9IHBlZF9kaXNrX25leHRfcGFydGl0aW9uIChkaXNrLCBOVUxMKTsKKwlmb3IgKDsgd2Fsazsgd2FsayA9IG5leHQpIHsKKwkJbmV4dCA9IHBlZF9kaXNrX25leHRfcGFydGl0aW9uIChkaXNrLCB3YWxrKTsKKworCQlpZiAod2Fsay0+dHlwZSAmIFBFRF9QQVJUSVRJT05fRlJFRVNQQUNFKSB7CisJCQlfZGlza19yYXdfcmVtb3ZlIChkaXNrLCB3YWxrKTsKKwkJCXBlZF9wYXJ0aXRpb25fZGVzdHJveSAod2Fsayk7CisJCX0KKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludAorX2FsbG9jX2V4dGVuZGVkX2ZyZWVzcGFjZSAoUGVkRGlzayogZGlzaykKK3sKKwlQZWRTZWN0b3IJbGFzdF9lbmQ7CisJUGVkUGFydGl0aW9uKgl3YWxrOworCVBlZFBhcnRpdGlvbioJbGFzdDsKKwlQZWRQYXJ0aXRpb24qCWZyZWVfc3BhY2U7CisJUGVkUGFydGl0aW9uKglleHRlbmRlZF9wYXJ0OworCisJZXh0ZW5kZWRfcGFydCA9IHBlZF9kaXNrX2V4dGVuZGVkX3BhcnRpdGlvbiAoZGlzayk7CisJaWYgKCFleHRlbmRlZF9wYXJ0KQorCQlyZXR1cm4gMTsKKworCWxhc3RfZW5kID0gZXh0ZW5kZWRfcGFydC0+Z2VvbS5zdGFydDsKKwlsYXN0ID0gTlVMTDsKKwkKKwlmb3IgKHdhbGsgPSBleHRlbmRlZF9wYXJ0LT5wYXJ0X2xpc3Q7IHdhbGs7IHdhbGsgPSB3YWxrLT5uZXh0KSB7CisJCWlmICh3YWxrLT5nZW9tLnN0YXJ0ID4gbGFzdF9lbmQgKyAxKSB7CisJCQlmcmVlX3NwYWNlID0gcGVkX3BhcnRpdGlvbl9uZXcgKAorCQkJCQlkaXNrLAorCQkJCQlQRURfUEFSVElUSU9OX0ZSRUVTUEFDRQorCQkJCQkJfCBQRURfUEFSVElUSU9OX0xPR0lDQUwsCisJCQkJCU5VTEwsCisJCQkJCWxhc3RfZW5kICsgMSwgd2Fsay0+Z2VvbS5zdGFydCAtIDEpOworCQkJX2Rpc2tfcmF3X2luc2VydF9iZWZvcmUgKGRpc2ssIHdhbGssIGZyZWVfc3BhY2UpOworCQl9CisKKwkJbGFzdCA9IHdhbGs7CisJCWxhc3RfZW5kID0gbGFzdC0+Z2VvbS5lbmQ7CisJfQorCisJaWYgKGxhc3RfZW5kIDwgZXh0ZW5kZWRfcGFydC0+Z2VvbS5lbmQpIHsKKwkJZnJlZV9zcGFjZSA9IHBlZF9wYXJ0aXRpb25fbmV3ICgKKwkJCQlkaXNrLAorCQkJCVBFRF9QQVJUSVRJT05fRlJFRVNQQUNFIHwgUEVEX1BBUlRJVElPTl9MT0dJQ0FMLAorCQkJCU5VTEwsCisJCQkJbGFzdF9lbmQgKyAxLCBleHRlbmRlZF9wYXJ0LT5nZW9tLmVuZCk7CisKKwkJaWYgKGxhc3QpCisJCQlyZXR1cm4gX2Rpc2tfcmF3X2luc2VydF9hZnRlciAoZGlzaywgbGFzdCwgZnJlZV9zcGFjZSk7CisJCWVsc2UKKwkJCWV4dGVuZGVkX3BhcnQtPnBhcnRfbGlzdCA9IGZyZWVfc3BhY2U7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK19kaXNrX2FsbG9jX2ZyZWVzcGFjZSAoUGVkRGlzayogZGlzaykKK3sKKwlQZWRTZWN0b3IJbGFzdF9lbmQ7CisJUGVkUGFydGl0aW9uKgl3YWxrOworCVBlZFBhcnRpdGlvbioJbGFzdDsKKwlQZWRQYXJ0aXRpb24qCWZyZWVfc3BhY2U7CisKKwlpZiAoIV9kaXNrX3JlbW92ZV9mcmVlc3BhY2UgKGRpc2spKQorCQlyZXR1cm4gMDsKKwlpZiAoIV9hbGxvY19leHRlbmRlZF9mcmVlc3BhY2UgKGRpc2spKQorCQlyZXR1cm4gMDsKKworCWxhc3QgPSBOVUxMOworCWxhc3RfZW5kID0gLTE7CisKKwlmb3IgKHdhbGsgPSBkaXNrLT5wYXJ0X2xpc3Q7IHdhbGs7IHdhbGsgPSB3YWxrLT5uZXh0KSB7CisJCWlmICh3YWxrLT5nZW9tLnN0YXJ0ID4gbGFzdF9lbmQgKyAxKSB7CisJCQlmcmVlX3NwYWNlID0gcGVkX3BhcnRpdGlvbl9uZXcgKGRpc2ssCisJCQkJCVBFRF9QQVJUSVRJT05fRlJFRVNQQUNFLCBOVUxMLAorCQkJCQlsYXN0X2VuZCArIDEsIHdhbGstPmdlb20uc3RhcnQgLSAxKTsKKwkJCV9kaXNrX3Jhd19pbnNlcnRfYmVmb3JlIChkaXNrLCB3YWxrLCBmcmVlX3NwYWNlKTsKKwkJfQorCisJCWxhc3QgPSB3YWxrOworCQlsYXN0X2VuZCA9IGxhc3QtPmdlb20uZW5kOworCX0KKworCWlmIChsYXN0X2VuZCA8IGRpc2stPmRldi0+bGVuZ3RoIC0gMSkgeworCQlmcmVlX3NwYWNlID0gcGVkX3BhcnRpdGlvbl9uZXcgKGRpc2ssCisJCQkJCVBFRF9QQVJUSVRJT05fRlJFRVNQQUNFLCBOVUxMLAorCQkJCQlsYXN0X2VuZCArIDEsIGRpc2stPmRldi0+bGVuZ3RoIC0gMSk7CisJCWlmIChsYXN0KQorCQkJcmV0dXJuIF9kaXNrX3Jhd19pbnNlcnRfYWZ0ZXIgKGRpc2ssIGxhc3QsIGZyZWVfc3BhY2UpOworCQllbHNlCisJCQlkaXNrLT5wYXJ0X2xpc3QgPSBmcmVlX3NwYWNlOworCX0KKworCXJldHVybiAxOworfQorCisvKioKKyAqIFVwZGF0ZSBtb2RlOiB1c2VkIHdoZW4gdXBkYXRpbmcgdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBwYXJ0aXRpb24KKyAqIHRhYmxlLiAgSW4gdXBkYXRlIG1vZGUsIHRoZSBtZXRhZGF0YSBhbmQgZnJlZXNwYWNlIHBsYWNlaG9sZGVyL3ZpcnR1YWwKKyAqIHBhcnRpdGlvbnMgYXJlIHJlbW92ZWQsIG1ha2luZyBpdCBtdWNoIGVhc2llciBmb3IgdmFyaW91cyBtYW5pcHVsYXRpb24KKyAqIHJvdXRpbmVzLi4uCisgKi8KK3N0YXRpYyB2b2lkCitfZGlza19wdXNoX3VwZGF0ZV9tb2RlIChQZWREaXNrKiBkaXNrKQoreworCWlmICghZGlzay0+dXBkYXRlX21vZGUpIHsKKyNpZmRlZiBERUJVRworCQlfZGlza19jaGVja19zYW5pdHkgKGRpc2spOworI2VuZGlmCisKKwkJX2Rpc2tfcmVtb3ZlX2ZyZWVzcGFjZSAoZGlzayk7CisJCWRpc2stPnVwZGF0ZV9tb2RlKys7CisJCV9kaXNrX3JlbW92ZV9tZXRhZGF0YSAoZGlzayk7CisKKyNpZmRlZiBERUJVRworCQlfZGlza19jaGVja19zYW5pdHkgKGRpc2spOworI2VuZGlmCisJfSBlbHNlIHsKKwkJZGlzay0+dXBkYXRlX21vZGUrKzsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitfZGlza19wb3BfdXBkYXRlX21vZGUgKFBlZERpc2sqIGRpc2spCit7CisJUEVEX0FTU0VSVCAoZGlzay0+dXBkYXRlX21vZGUsIHJldHVybik7CisKKwlpZiAoZGlzay0+dXBkYXRlX21vZGUgPT0gMSkgeworCS8qIHJlLWFsbG9jYXRlIG1ldGFkYXRhIEJFRk9SRSBsZWF2aW5nIHVwZGF0ZSBtb2RlLCB0byBwcmV2ZW50IGluZmluaXRlCisJICogcmVjdXJzaW9uIChtZXRhZGF0YSBhbGxvY2F0aW9uIHJlcXVpcmVzIHVwZGF0ZSBtb2RlKQorCSAqLworI2lmZGVmIERFQlVHCisJCV9kaXNrX2NoZWNrX3Nhbml0eSAoZGlzayk7CisjZW5kaWYKKworCQlfZGlza19hbGxvY19tZXRhZGF0YSAoZGlzayk7CisJCWRpc2stPnVwZGF0ZV9tb2RlLS07CisJCV9kaXNrX2FsbG9jX2ZyZWVzcGFjZSAoZGlzayk7CisKKyNpZmRlZiBERUJVRworCQlfZGlza19jaGVja19zYW5pdHkgKGRpc2spOworI2VuZGlmCisJfSBlbHNlIHsKKwkJZGlzay0+dXBkYXRlX21vZGUtLTsKKwl9Cit9CisKKy8qKiBAfSAqLworCisvKioKKyAqIFxhZGR0b2dyb3VwIFBlZFBhcnRpdGlvbgorICoKKyAqIFxicmllZiBQYXJ0aXRpb24gYWNjZXNzLgorICogCisgKiBAeworICovCisKK1BlZFBhcnRpdGlvbioKK19wZWRfcGFydGl0aW9uX2FsbG9jIChjb25zdCBQZWREaXNrKiBkaXNrLCBQZWRQYXJ0aXRpb25UeXBlIHR5cGUsCisJCSAgICAgIGNvbnN0IFBlZEZpbGVTeXN0ZW1UeXBlKiBmc190eXBlLAorCQkgICAgICBQZWRTZWN0b3Igc3RhcnQsIFBlZFNlY3RvciBlbmQpCit7CisJUGVkUGFydGl0aW9uKglwYXJ0OworCisJUEVEX0FTU0VSVCAoZGlzayAhPSBOVUxMLCByZXR1cm4gMCk7CisKKwlwYXJ0ID0gKFBlZFBhcnRpdGlvbiopIHBlZF9tYWxsb2MgKHNpemVvZiAoUGVkUGFydGl0aW9uKSk7CisJaWYgKCFwYXJ0KQorCQlnb3RvIGVycm9yOworCisJcGFydC0+cHJldiA9IE5VTEw7CisJcGFydC0+bmV4dCA9IE5VTEw7CisKKwlwYXJ0LT5kaXNrID0gKFBlZERpc2sqKSBkaXNrOworCWlmICghcGVkX2dlb21ldHJ5X2luaXQgKCZwYXJ0LT5nZW9tLCBkaXNrLT5kZXYsIHN0YXJ0LCBlbmQgLSBzdGFydCArIDEpKQorCQlnb3RvIGVycm9yX2ZyZWVfcGFydDsKKworCXBhcnQtPm51bSA9IC0xOworCXBhcnQtPnR5cGUgPSB0eXBlOworCXBhcnQtPnBhcnRfbGlzdCA9IE5VTEw7CisJcGFydC0+ZnNfdHlwZSA9IGZzX3R5cGU7CisKKwlyZXR1cm4gcGFydDsKKworZXJyb3JfZnJlZV9wYXJ0OgorCXBlZF9mcmVlIChwYXJ0KTsKK2Vycm9yOgorCXJldHVybiBOVUxMOworfQorCit2b2lkCitfcGVkX3BhcnRpdGlvbl9mcmVlIChQZWRQYXJ0aXRpb24qIHBhcnQpCit7CisJcGVkX2ZyZWUgKHBhcnQpOworfQorCitpbnQKK19wZWRfcGFydGl0aW9uX2F0dGVtcHRfYWxpZ24gKFBlZFBhcnRpdGlvbiogcGFydCwKKwkJCSAgICAgIGNvbnN0IFBlZENvbnN0cmFpbnQqIGV4dGVybmFsLAorCQkJICAgICAgUGVkQ29uc3RyYWludCogaW50ZXJuYWwpCit7CisJUGVkQ29uc3RyYWludCoJCWludGVyc2VjdGlvbjsKKwlQZWRHZW9tZXRyeSoJCXNvbHV0aW9uOworCisJaW50ZXJzZWN0aW9uID0gcGVkX2NvbnN0cmFpbnRfaW50ZXJzZWN0IChleHRlcm5hbCwgaW50ZXJuYWwpOworCXBlZF9jb25zdHJhaW50X2Rlc3Ryb3kgKGludGVybmFsKTsKKwlpZiAoIWludGVyc2VjdGlvbikKKwkJZ290byBmYWlsOworCisJc29sdXRpb24gPSBwZWRfY29uc3RyYWludF9zb2x2ZV9uZWFyZXN0IChpbnRlcnNlY3Rpb24sICZwYXJ0LT5nZW9tKTsKKwlpZiAoIXNvbHV0aW9uKQorCQlnb3RvIGZhaWxfZnJlZV9pbnRlcnNlY3Rpb247CisJcGVkX2dlb21ldHJ5X3NldCAoJnBhcnQtPmdlb20sIHNvbHV0aW9uLT5zdGFydCwgc29sdXRpb24tPmxlbmd0aCk7CisJcGVkX2dlb21ldHJ5X2Rlc3Ryb3kgKHNvbHV0aW9uKTsKKwlwZWRfY29uc3RyYWludF9kZXN0cm95IChpbnRlcnNlY3Rpb24pOworCXJldHVybiAxOworCitmYWlsX2ZyZWVfaW50ZXJzZWN0aW9uOgorCXBlZF9jb25zdHJhaW50X2Rlc3Ryb3kgKGludGVyc2VjdGlvbik7CitmYWlsOgorCXJldHVybiAwOworfQorCisvKioKKyAqIENyZWF0ZSBhIG5ldyBcbGluayBfUGVkUGFydGl0aW9uIFBlZFBhcnRpdGlvbiBcZW5kbGluayBvbiBccCBkaXNrLgorICoKKyAqIFxwYXJhbSB0eXBlIE9uZSBvZiBccCBQRURfUEFSVElUSU9OX05PUk1BTCwgXHAgUEVEX1BBUlRJVElPTl9FWFRFTkRFRCwKKyAqICAgICAgXHAgUEVEX1BBUlRJVElPTl9MT0dJQ0FMLgorICoKKyAqIFxub3RlIFRoZSBjb25zdHJ1Y3RlZCBwYXJ0aXRpb24gaXMgbm90IGFkZGVkIHRvIDx0dD5kaXNrPC90dD4ncworICogICAgICBwYXJ0aXRpb24gdGFibGUuIFVzZSBwZWRfZGlza19hZGRfcGFydGl0aW9uKCkgdG8gZG8gdGhpcy4KKyAqIAorICogXHJldHVybiBBIG5ldyBcbGluayBfUGVkUGFydGl0aW9uIFBlZFBhcnRpdGlvbiBcZW5kbGluayBvYmplY3QsCisgKiAgICAgIE5VTEwgb24gZmFpbHVyZS4KKyAqCisgKiBcdGhyb3dzIFBFRF9FWENFUFRJT05fRVJST1IgaWYgXHAgdHlwZSBpcyBccCBFWFRFTkRFRCBvciBccCBMT0dJQ0FMIGJ1dCB0aGUKKyAqICAgICAgbGFiZWwgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGNvbmNlcHQuCisgKi8gCitQZWRQYXJ0aXRpb24qCitwZWRfcGFydGl0aW9uX25ldyAoY29uc3QgUGVkRGlzayogZGlzaywgUGVkUGFydGl0aW9uVHlwZSB0eXBlLAorCQkgICBjb25zdCBQZWRGaWxlU3lzdGVtVHlwZSogZnNfdHlwZSwgUGVkU2VjdG9yIHN0YXJ0LAorCQkgICBQZWRTZWN0b3IgZW5kKQoreworCWludAkJc3VwcG9ydHNfZXh0ZW5kZWQ7CisJUGVkUGFydGl0aW9uKglwYXJ0OworCisJUEVEX0FTU0VSVCAoZGlzayAhPSBOVUxMLCByZXR1cm4gTlVMTCk7CisJUEVEX0FTU0VSVCAoZGlzay0+dHlwZS0+b3BzLT5wYXJ0aXRpb25fbmV3ICE9IE5VTEwsIHJldHVybiBOVUxMKTsKKworCXN1cHBvcnRzX2V4dGVuZGVkID0gcGVkX2Rpc2tfdHlwZV9jaGVja19mZWF0dXJlIChkaXNrLT50eXBlLAorCQkJICAgIAlQRURfRElTS19UWVBFX0VYVEVOREVEKTsKKworCWlmICghc3VwcG9ydHNfZXh0ZW5kZWQKKwkgICAgJiYgKHR5cGUgPT0gUEVEX1BBUlRJVElPTl9FWFRFTkRFRAorCQkJfHwgdHlwZSA9PSBQRURfUEFSVElUSU9OX0xPR0lDQUwpKSB7CisJCXBlZF9leGNlcHRpb25fdGhyb3cgKAorCQkJUEVEX0VYQ0VQVElPTl9FUlJPUiwKKwkJCVBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJXygiJXMgZGlzayBsYWJlbHMgZG8gbm90IHN1cHBvcnQgZXh0ZW5kZWQgIgorCQkJICAicGFydGl0aW9ucy4iKSwKKwkJCWRpc2stPnR5cGUtPm5hbWUpOworCQlnb3RvIGVycm9yOworCX0KKworCXBhcnQgPSBkaXNrLT50eXBlLT5vcHMtPnBhcnRpdGlvbl9uZXcgKGRpc2ssIHR5cGUsIGZzX3R5cGUsIHN0YXJ0LCBlbmQpOworCWlmICghcGFydCkKKwkJZ290byBlcnJvcjsKKworCWlmIChmc190eXBlIHx8IHBhcnQtPnR5cGUgPT0gUEVEX1BBUlRJVElPTl9FWFRFTkRFRCkgeworCQlpZiAoIXBlZF9wYXJ0aXRpb25fc2V0X3N5c3RlbSAocGFydCwgZnNfdHlwZSkpCisJCQlnb3RvIGVycm9yX2Rlc3Ryb3lfcGFydDsKKwl9CisJcmV0dXJuIHBhcnQ7CisKK2Vycm9yX2Rlc3Ryb3lfcGFydDoKKwlwZWRfcGFydGl0aW9uX2Rlc3Ryb3kgKHBhcnQpOworZXJyb3I6CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogRGVzdHJveSBhIFxsaW5rIF9QZWRQYXJ0aXRpb24gUGVkUGFydGl0aW9uIFxlbmRsaW5rIG9iamVjdC4KKyAqCisgKiBcbm90ZSBTaG91bGQgbm90IGJlIGNhbGxlZCBvbiBhIHBhcnRpdGlvbiB0aGF0IGlzIGluIGEgcGFydGl0aW9uIHRhYmxlLgorICogICAgICBVc2UgcGVkX2Rpc2tfZGVsZXRlX3BhcnRpdGlvbigpIGluc3RlYWQuCisgKi8KK3ZvaWQKK3BlZF9wYXJ0aXRpb25fZGVzdHJveSAoUGVkUGFydGl0aW9uKiBwYXJ0KQoreworCVBFRF9BU1NFUlQgKHBhcnQgIT0gTlVMTCwgcmV0dXJuKTsKKwlQRURfQVNTRVJUIChwYXJ0LT5kaXNrICE9IE5VTEwsIHJldHVybik7CisJUEVEX0FTU0VSVCAocGFydC0+ZGlzay0+dHlwZS0+b3BzLT5wYXJ0aXRpb25fbmV3ICE9IE5VTEwsIHJldHVybik7CisKKwlwYXJ0LT5kaXNrLT50eXBlLT5vcHMtPnBhcnRpdGlvbl9kZXN0cm95IChwYXJ0KTsKK30KKworCisvKioKKyAqIFJldHVybiB3aGV0aGVyIG9yIG5vdCB0aGUgcGFydGl0aW9uIGlzICJhY3RpdmUiLgorICoKKyAqIEEgcGFydGl0aW9uIGlzIGFjdGl2ZSBpZiBccCBwYXJ0LT50eXBlIGlzIG5laXRoZXIgXHAgUEVEX1BBUlRJVElPTl9NRVRBREFUQQorICogbm9yIFxwIFBFRF9QQVJUSVRJT05fRlJFRS4KKyAqLworaW50CitwZWRfcGFydGl0aW9uX2lzX2FjdGl2ZSAoY29uc3QgUGVkUGFydGl0aW9uKiBwYXJ0KQoreworCVBFRF9BU1NFUlQgKHBhcnQgIT0gTlVMTCwgcmV0dXJuIDApOworCisJcmV0dXJuICEocGFydC0+dHlwZSAmIFBFRF9QQVJUSVRJT05fRlJFRVNQQUNFCisJCSB8fCBwYXJ0LT50eXBlICYgUEVEX1BBUlRJVElPTl9NRVRBREFUQSk7Cit9CisKKy8qKgorICogU2V0IHRoZSBzdGF0ZSAoXGMgMSBvciBcYyAwKSBvZiBhIGZsYWcgb24gYSBwYXJ0aXRpb24uCisgKiAKKyAqIEZsYWdzIGFyZSBkaXNrIGxhYmVsIHNwZWNpZmljLCBhbHRob3VnaCB0aGV5IGhhdmUgYSBnbG9iYWwKKyAqICJuYW1lc3BhY2UiOiB0aGUgZmxhZyBQRURfUEFSVElUSU9OX0JPT1QsIGZvciBleGFtcGxlLCByb3VnaGx5IG1lYW5zCisgKiAidGhpcyIgcGFydGl0aW9uIGlzIGJvb3RhYmxlIi4gQnV0IHRoaXMgbWVhbnMgZGlmZmVyZW50IHRoaW5ncyBvbiBkaWZmZXJlbnQKKyAqIGRpc2sgbGFiZWxzIChhbmQgbWF5IG5vdCBiZSBkZWZpbmVkIG9uIHNvbWUgZGlzayBsYWJlbHMpLiBGb3IgZXhhbXBsZSwKKyAqIG9uIE1TLURPUyBkaXNrIGxhYmVscywgdGhlcmUgY2FuIG9ubHkgYmUgb25lIGJvb3QgcGFydGl0aW9uLCBhbmQgdGhpcworICogcmVmZXJzIHRvIHRoZSBwYXJ0aXRpb24gdGhhdCB3aWxsIGJlIGJvb3RlZCBmcm9tIG9uIHN0YXJ0dXAuIE9uIFBDOTgKKyAqIGRpc2sgbGFiZWxzLCB0aGUgdXNlciBjYW4gY2hvb3NlIGZyb20gYW55IGJvb3RhYmxlIHBhcnRpdGlvbiBvbiBzdGFydHVwLgorICogCisgKiBcbm90ZSBJdCBpcyBhbiBlcnJvciB0byBjYWxsIHRoaXMgb24gYW4gdW5hdmFpbGFibGUgZmxhZyAtLSB1c2UKKyAqIHBlZF9wYXJ0aXRpb25faXNfZmxhZ19hdmFpbGFibGUoKSB0byBkZXRlcm1pbmUgd2hpY2ggZmxhZ3MgYXJlIGF2YWlsYWJsZQorICogZm9yIGEgZ2l2ZW4gZGlzayBsYWJlbC4KKyAqCisgKiBcdGhyb3dzIFBFRF9FWENFUFRJT05fRVJST1IgaWYgdGhlIHJlcXVlc3RlZCBmbGFnIGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMKKyAqICAgICAgbGFiZWwuCisgKi8KK2ludAorcGVkX3BhcnRpdGlvbl9zZXRfZmxhZyAoUGVkUGFydGl0aW9uKiBwYXJ0LCBQZWRQYXJ0aXRpb25GbGFnIGZsYWcsIGludCBzdGF0ZSkKK3sKKwlQZWREaXNrT3BzKglvcHM7CisKKwlQRURfQVNTRVJUIChwYXJ0ICE9IE5VTEwsIHJldHVybiAwKTsKKwlQRURfQVNTRVJUIChwYXJ0LT5kaXNrICE9IE5VTEwsIHJldHVybiAwKTsKKwlQRURfQVNTRVJUIChwZWRfcGFydGl0aW9uX2lzX2FjdGl2ZSAocGFydCksIHJldHVybiAwKTsKKworCW9wcyA9IHBhcnQtPmRpc2stPnR5cGUtPm9wczsKKwlQRURfQVNTRVJUIChvcHMtPnBhcnRpdGlvbl9zZXRfZmxhZyAhPSBOVUxMLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAob3BzLT5wYXJ0aXRpb25faXNfZmxhZ19hdmFpbGFibGUgIT0gTlVMTCwgcmV0dXJuIDApOworCisJaWYgKCFvcHMtPnBhcnRpdGlvbl9pc19mbGFnX2F2YWlsYWJsZSAocGFydCwgZmxhZykpIHsKKwkJcGVkX2V4Y2VwdGlvbl90aHJvdyAoCisJCQlQRURfRVhDRVBUSU9OX0VSUk9SLAorCQkJUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQkiVGhlIGZsYWcgJyVzJyBpcyBub3QgYXZhaWxhYmxlIGZvciAlcyBkaXNrIGxhYmVscy4iLAorCQkJcGVkX3BhcnRpdGlvbl9mbGFnX2dldF9uYW1lIChmbGFnKSwKKwkJCXBhcnQtPmRpc2stPnR5cGUtPm5hbWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gb3BzLT5wYXJ0aXRpb25fc2V0X2ZsYWcgKHBhcnQsIGZsYWcsIHN0YXRlKTsKK30KKworLyoqCisgKiBHZXQgdGhlIHN0YXRlIChcYyAxIG9yIFxjIDApIG9mIGEgZmxhZyBvbiBhIHBhcnRpdGlvbi4KKyAqCisgKiBTZWUgcGVkX3BhcnRpdGlvbl9zZXRfZmxhZygpIGZvciBjb25kaXRpb25zIHRoYXQgbXVzdCBob2xkLgorICoKKyAqIFx0b2RvIFdoZXJlJ3MgdGhlIGNoZWNrIGZvciBmbGFnIGF2YWlsYWJpbGl0eT8KKyAqLworaW50CitwZWRfcGFydGl0aW9uX2dldF9mbGFnIChjb25zdCBQZWRQYXJ0aXRpb24qIHBhcnQsIFBlZFBhcnRpdGlvbkZsYWcgZmxhZykKK3sKKwlQRURfQVNTRVJUIChwYXJ0ICE9IE5VTEwsIHJldHVybiAwKTsKKwlQRURfQVNTRVJUIChwYXJ0LT5kaXNrICE9IE5VTEwsIHJldHVybiAwKTsKKwlQRURfQVNTRVJUIChwYXJ0LT5kaXNrLT50eXBlLT5vcHMtPnBhcnRpdGlvbl9nZXRfZmxhZyAhPSBOVUxMLAorCQkgICAgcmV0dXJuIDApOworCVBFRF9BU1NFUlQgKHBlZF9wYXJ0aXRpb25faXNfYWN0aXZlIChwYXJ0KSwgcmV0dXJuIDApOworCisJcmV0dXJuIHBhcnQtPmRpc2stPnR5cGUtPm9wcy0+cGFydGl0aW9uX2dldF9mbGFnIChwYXJ0LCBmbGFnKTsKK30KKworLyoqCisgKiBDaGVjayB3aGV0aGVyIGEgZ2l2ZW4gZmxhZyBpcyBhdmFpbGFibGUgb24gYSBwYXJ0aXRpb24uCisgKgorICogXHJldHVybiBcYyAxIGlmIHRoZSBmbGFnIGlzIGF2YWlsYWJsZS4KKyAqLworaW50CitwZWRfcGFydGl0aW9uX2lzX2ZsYWdfYXZhaWxhYmxlIChjb25zdCBQZWRQYXJ0aXRpb24qIHBhcnQsCisJICAgICAgIAkJCSBQZWRQYXJ0aXRpb25GbGFnIGZsYWcpCit7CisJUEVEX0FTU0VSVCAocGFydCAhPSBOVUxMLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAocGFydC0+ZGlzayAhPSBOVUxMLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAocGFydC0+ZGlzay0+dHlwZS0+b3BzLT5wYXJ0aXRpb25faXNfZmxhZ19hdmFpbGFibGUgIT0gTlVMTCwKKwkJICAgIHJldHVybiAwKTsKKwlQRURfQVNTRVJUIChwZWRfcGFydGl0aW9uX2lzX2FjdGl2ZSAocGFydCksIHJldHVybiAwKTsKKworCXJldHVybiBwYXJ0LT5kaXNrLT50eXBlLT5vcHMtPnBhcnRpdGlvbl9pc19mbGFnX2F2YWlsYWJsZSAocGFydCwgZmxhZyk7Cit9CisKKy8qKgorICogU2V0cyB0aGUgc3lzdGVtIHR5cGUgb24gdGhlIHBhcnRpdGlvbiB0byBccCBmc190eXBlLgorICoKKyAqIFxub3RlIFRoZSBmaWxlIHN5c3RlbSBtYXkgYmUgb3BlbmVkLCB0byBnZXQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUKKyAqIGZpbGUgc3lzdGVtLCBlLmcuIHRvIGRldGVybWluZSBpZiBpdCdzIEZBVDE2IG9yIEZBVDMyLgorICoKKyAqIFxyZXR1cm4gXGMgMCBvbiBmYWlsdXJlLgorICovCitpbnQKK3BlZF9wYXJ0aXRpb25fc2V0X3N5c3RlbSAoUGVkUGFydGl0aW9uKiBwYXJ0LCBjb25zdCBQZWRGaWxlU3lzdGVtVHlwZSogZnNfdHlwZSkKK3sKKwljb25zdCBQZWREaXNrVHlwZSoJZGlza190eXBlOworCisJUEVEX0FTU0VSVCAocGFydCAhPSBOVUxMLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAocGVkX3BhcnRpdGlvbl9pc19hY3RpdmUgKHBhcnQpLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAocGFydC0+ZGlzayAhPSBOVUxMLCByZXR1cm4gMCk7CisJZGlza190eXBlID0gcGFydC0+ZGlzay0+dHlwZTsKKwlQRURfQVNTRVJUIChkaXNrX3R5cGUgIT0gTlVMTCwgcmV0dXJuIDApOworCVBFRF9BU1NFUlQgKGRpc2tfdHlwZS0+b3BzICE9IE5VTEwsIHJldHVybiAwKTsKKwlQRURfQVNTRVJUIChkaXNrX3R5cGUtPm9wcy0+cGFydGl0aW9uX3NldF9zeXN0ZW0gIT0gTlVMTCwgcmV0dXJuIDApOworCisJcmV0dXJuIGRpc2tfdHlwZS0+b3BzLT5wYXJ0aXRpb25fc2V0X3N5c3RlbSAocGFydCwgZnNfdHlwZSk7Cit9CisKK3N0YXRpYyBpbnQKK19hc3NlcnRfcGFydGl0aW9uX25hbWVfZmVhdHVyZSAoY29uc3QgUGVkRGlza1R5cGUqIGRpc2tfdHlwZSkKK3sKKwlpZiAoIXBlZF9kaXNrX3R5cGVfY2hlY2tfZmVhdHVyZSAoCisJCQlkaXNrX3R5cGUsIFBFRF9ESVNLX1RZUEVfUEFSVElUSU9OX05BTUUpKSB7CisJCXBlZF9leGNlcHRpb25fdGhyb3cgKAorCQkJUEVEX0VYQ0VQVElPTl9FUlJPUiwKKwkJCVBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJIiVzIGRpc2sgbGFiZWxzIGRvIG5vdCBzdXBwb3J0IHBhcnRpdGlvbiBuYW1lcy4iLAorCQkJZGlza190eXBlLT5uYW1lKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCisvKioKKyAqIFNldHMgdGhlIG5hbWUgb2YgYSBwYXJ0aXRpb24uCisgKgorICogXG5vdGUgVGhpcyB3aWxsIG9ubHkgd29yayBpZiB0aGUgZGlzayBsYWJlbCBzdXBwb3J0cyBpdC4KKyAqICAgICAgWW91IGNhbiB1c2UKKyAqICAgICAgXGNvZGUKKyAqIHBlZF9kaXNrX3R5cGVfY2hlY2tfZmVhdHVyZSAocGFydC0+ZGlzay0+dHlwZSwgUEVEX0RJU0tfVFlQRV9QQVJUSVRJT05fTkFNRSk7CisgKiAgICAgIFxlbmRjb2RlCisgKiAgICAgIHRvIGNoZWNrIHdoZXRoZXIgdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQgZm9yIGEgbGFiZWwuCisgKiAgICAgIAorICogXG5vdGUgXHAgbmFtZSB3aWxsIG5vdCBiZSBtb2RpZmllZCBieSBsaWJwYXJ0ZWQuIEl0IGNhbiBiZSBmcmVlZAorICogICAgICBieSB0aGUgY2FsbGVyIGltbWVkaWF0ZWx5IGFmdGVyIHBlZF9wYXJ0aXRpb25fc2V0X25hbWUoKSBpcyBjYWxsZWQuCisgKgorICogXHJldHVybiBcYyAxIG9uIHN1Y2Nlc3MsIFxjIDAgb3RoZXJ3aXNlLgorICovCitpbnQKK3BlZF9wYXJ0aXRpb25fc2V0X25hbWUgKFBlZFBhcnRpdGlvbiogcGFydCwgY29uc3QgY2hhciogbmFtZSkKK3sKKwlQRURfQVNTRVJUIChwYXJ0ICE9IE5VTEwsIHJldHVybiAwKTsKKwlQRURfQVNTRVJUIChwYXJ0LT5kaXNrICE9IE5VTEwsIHJldHVybiAwKTsKKwlQRURfQVNTRVJUIChwZWRfcGFydGl0aW9uX2lzX2FjdGl2ZSAocGFydCksIHJldHVybiAwKTsKKwlQRURfQVNTRVJUIChuYW1lICE9IE5VTEwsIHJldHVybiAwKTsKKworCWlmICghX2Fzc2VydF9wYXJ0aXRpb25fbmFtZV9mZWF0dXJlIChwYXJ0LT5kaXNrLT50eXBlKSkKKwkJcmV0dXJuIDA7CisKKwlQRURfQVNTRVJUIChwYXJ0LT5kaXNrLT50eXBlLT5vcHMtPnBhcnRpdGlvbl9zZXRfbmFtZSAhPSBOVUxMLAorCQkgICAgcmV0dXJuIDApOworCXBhcnQtPmRpc2stPnR5cGUtPm9wcy0+cGFydGl0aW9uX3NldF9uYW1lIChwYXJ0LCBuYW1lKTsKKwlyZXR1cm4gMTsKK30KKworLyoqCisgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIGEgcGFydGl0aW9uIFxwIHBhcnQuICBUaGlzIHdpbGwgb25seSB3b3JrIGlmIHRoZSBkaXNrCisgKiBsYWJlbCBzdXBwb3J0cyBpdC4KKyAqCisgKiBcbm90ZSBUaGUgcmV0dXJuZWQgc3RyaW5nIHNob3VsZCBub3QgYmUgbW9kaWZpZWQuICBJdCBzaG91bGQKKyAqCW5vdCBiZSByZWZlcmVuY2VkIGFmdGVyIHRoZSBwYXJ0aXRpb24gaXMgZGVzdHJveWVkLgorICovCitjb25zdCBjaGFyKgorcGVkX3BhcnRpdGlvbl9nZXRfbmFtZSAoY29uc3QgUGVkUGFydGl0aW9uKiBwYXJ0KQoreworCVBFRF9BU1NFUlQgKHBhcnQgIT0gTlVMTCwgcmV0dXJuIE5VTEwpOworCVBFRF9BU1NFUlQgKHBhcnQtPmRpc2sgIT0gTlVMTCwgcmV0dXJuIDApOworCVBFRF9BU1NFUlQgKHBlZF9wYXJ0aXRpb25faXNfYWN0aXZlIChwYXJ0KSwgcmV0dXJuIDApOworCisJaWYgKCFfYXNzZXJ0X3BhcnRpdGlvbl9uYW1lX2ZlYXR1cmUgKHBhcnQtPmRpc2stPnR5cGUpKQorCQlyZXR1cm4gTlVMTDsKKworCVBFRF9BU1NFUlQgKHBhcnQtPmRpc2stPnR5cGUtPm9wcy0+cGFydGl0aW9uX2dldF9uYW1lICE9IE5VTEwsCisJCSAgICByZXR1cm4gTlVMTCk7CisJcmV0dXJuIHBhcnQtPmRpc2stPnR5cGUtPm9wcy0+cGFydGl0aW9uX2dldF9uYW1lIChwYXJ0KTsKK30KKworLyoqIEB9ICovCisKKy8qKgorICogXGFkZHRvZ3JvdXAgUGVkRGlzaworICoKKyAqIEB7CisgKi8KKworUGVkUGFydGl0aW9uKgorcGVkX2Rpc2tfZXh0ZW5kZWRfcGFydGl0aW9uIChjb25zdCBQZWREaXNrKiBkaXNrKQoreworCVBlZFBhcnRpdGlvbioJCXdhbGs7CisKKwlQRURfQVNTRVJUIChkaXNrICE9IE5VTEwsIHJldHVybiAwKTsKKworCWZvciAod2FsayA9IGRpc2stPnBhcnRfbGlzdDsgd2Fsazsgd2FsayA9IHdhbGstPm5leHQpIHsKKwkJaWYgKHdhbGstPnR5cGUgPT0gUEVEX1BBUlRJVElPTl9FWFRFTkRFRCkKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gd2FsazsKK30KKworLyoqIAorICogUmV0dXJuIHRoZSBuZXh0IHBhcnRpdGlvbiBhZnRlciBccCBwYXJ0IG9uIFxwIGRpc2suIElmIFxwIHBhcnQgaXMgXGMgTlVMTCwKKyAqIHJldHVybiB0aGUgZmlyc3QgcGFydGl0aW9uLiBJZiBccCBwYXJ0IGlzIHRoZSBsYXN0IHBhcnRpdGlvbiwgcmV0dXJucworICogXGMgTlVMTC4gSWYgXHAgcGFydCBpcyBhbiBleHRlbmRlZCBwYXJ0aXRpb24sIHJldHVybnMgdGhlIGZpcnN0IGxvZ2ljYWwKKyAqIHBhcnRpdGlvbi4gSWYgdGhpcyBpcyBjYWxsZWQgcmVwZWF0ZWRseSBwYXNzaW5nIHRoZSByZXR1cm4gdmFsdWUgYXMgXHAgcGFydCwKKyAqIGEgZGVwdGgtZmlyc3QgdHJhdmVyc2FsIGlzIGV4ZWN1dGVkLgorICoKKyAqIFxyZXR1cm4gVGhlIG5leHQgcGFydGl0aW9uLCBcYyBOVUxMIGlmIG5vIG1vcmUgcGFydGl0aW9ucyBsZWZ0LgorICovCitQZWRQYXJ0aXRpb24qCitwZWRfZGlza19uZXh0X3BhcnRpdGlvbiAoY29uc3QgUGVkRGlzayogZGlzaywgY29uc3QgUGVkUGFydGl0aW9uKiBwYXJ0KQoreworCVBFRF9BU1NFUlQgKGRpc2sgIT0gTlVMTCwgcmV0dXJuIDApOworCisJaWYgKCFwYXJ0KQorCQlyZXR1cm4gZGlzay0+cGFydF9saXN0OworCWlmIChwYXJ0LT50eXBlID09IFBFRF9QQVJUSVRJT05fRVhURU5ERUQpCisJCXJldHVybiBwYXJ0LT5wYXJ0X2xpc3QgPyBwYXJ0LT5wYXJ0X2xpc3QgOiBwYXJ0LT5uZXh0OworCWlmIChwYXJ0LT5uZXh0KQorCQlyZXR1cm4gcGFydC0+bmV4dDsKKwlpZiAocGFydC0+dHlwZSAmIFBFRF9QQVJUSVRJT05fTE9HSUNBTCkKKwkJcmV0dXJuIHBlZF9kaXNrX2V4dGVuZGVkX3BhcnRpdGlvbiAoZGlzayktPm5leHQ7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKiBAfSAqLworCisjaWZkZWYgREVCVUcKK3N0YXRpYyBpbnQKK19kaXNrX2NoZWNrX3Nhbml0eSAoUGVkRGlzayogZGlzaykKK3sKKwlQZWRQYXJ0aXRpb24qCXdhbGs7CisKKwlQRURfQVNTRVJUIChkaXNrICE9IE5VTEwsIHJldHVybiAwKTsKKworCWZvciAod2FsayA9IGRpc2stPnBhcnRfbGlzdDsgd2Fsazsgd2FsayA9IHdhbGstPm5leHQpIHsKKwkJUEVEX0FTU0VSVCAoISh3YWxrLT50eXBlICYgUEVEX1BBUlRJVElPTl9MT0dJQ0FMKSwgcmV0dXJuIDApOworCQlQRURfQVNTRVJUICghd2Fsay0+cHJldiB8fCB3YWxrLT5wcmV2LT5uZXh0ID09IHdhbGssIHJldHVybiAwKTsKKwl9CisKKwlpZiAoIXBlZF9kaXNrX2V4dGVuZGVkX3BhcnRpdGlvbiAoZGlzaykpCisJCXJldHVybiAxOworCisJZm9yICh3YWxrID0gcGVkX2Rpc2tfZXh0ZW5kZWRfcGFydGl0aW9uIChkaXNrKS0+cGFydF9saXN0OyB3YWxrOworCSAgICAgd2FsayA9IHdhbGstPm5leHQpIHsKKwkJUEVEX0FTU0VSVCAod2Fsay0+dHlwZSAmIFBFRF9QQVJUSVRJT05fTE9HSUNBTCwgcmV0dXJuIDApOworCQlpZiAod2Fsay0+cHJldikKKwkJCVBFRF9BU1NFUlQgKHdhbGstPnByZXYtPm5leHQgPT0gd2FsaywgcmV0dXJuIDApOworCX0KKwlyZXR1cm4gMTsKK30KKyNlbmRpZgorCisvKioKKyAqIFJldHVybnMgdGhlIHBhcnRpdGlvbiBudW1iZXJlZCBccCBudW0uIAorICoKKyAqIFxyZXR1cm4gXGMgTlVMTCBpZiB0aGUgc3BlY2lmaWVkIHBhcnRpdGlvbiBkb2VzIG5vdCBleGlzdC4KKyAqLworUGVkUGFydGl0aW9uKgorcGVkX2Rpc2tfZ2V0X3BhcnRpdGlvbiAoY29uc3QgUGVkRGlzayogZGlzaywgaW50IG51bSkKK3sKKwlQZWRQYXJ0aXRpb24qCXdhbGs7CisKKwlQRURfQVNTRVJUIChkaXNrICE9IE5VTEwsIHJldHVybiAwKTsKKworCWZvciAod2FsayA9IGRpc2stPnBhcnRfbGlzdDsgd2FsazsKKwkgICAgIHdhbGsgPSBwZWRfZGlza19uZXh0X3BhcnRpdGlvbiAoZGlzaywgd2FsaykpIHsKKwkJaWYgKHdhbGstPm51bSA9PSBudW0gJiYgISh3YWxrLT50eXBlICYgUEVEX1BBUlRJVElPTl9GUkVFU1BBQ0UpKQorCQkJcmV0dXJuIHdhbGs7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogUmV0dXJucyB0aGUgcGFydGl0aW9uIHRoYXQgY29udGFpbnMgc2VjdC4gIElmIHNlY3QgbGllcyB3aXRoaW4gYSBsb2dpY2FsCisgKiBwYXJ0aXRpb24sIHRoZW4gdGhlIGxvZ2ljYWwgcGFydGl0aW9uIGlzIHJldHVybmVkIChub3QgdGhlIGV4dGVuZGVkCisgKiBwYXJ0aXRpb24pLgorICovCitQZWRQYXJ0aXRpb24qCitwZWRfZGlza19nZXRfcGFydGl0aW9uX2J5X3NlY3RvciAoY29uc3QgUGVkRGlzayogZGlzaywgUGVkU2VjdG9yIHNlY3QpCit7CisJUGVkUGFydGl0aW9uKgl3YWxrOworCisJUEVEX0FTU0VSVCAoZGlzayAhPSBOVUxMLCByZXR1cm4gMCk7CisKKwlmb3IgKHdhbGsgPSBkaXNrLT5wYXJ0X2xpc3Q7IHdhbGs7CisJICAgICB3YWxrID0gcGVkX2Rpc2tfbmV4dF9wYXJ0aXRpb24gKGRpc2ssIHdhbGspKSB7CisJCWlmIChwZWRfZ2VvbWV0cnlfdGVzdF9zZWN0b3JfaW5zaWRlICgmd2Fsay0+Z2VvbSwgc2VjdCkKKwkJICAgICYmIHdhbGstPnR5cGUgIT0gUEVEX1BBUlRJVElPTl9FWFRFTkRFRCkKKwkJCXJldHVybiB3YWxrOworCX0KKworCS8qIHNob3VsZCBuZXZlciBnZXQgaGVyZSwgdW5sZXNzIHNlY3QgaXMgb3V0c2lkZSBvZiBkaXNrJ3MgdXNlYWJsZQorCSAqIHBhcnQsIG9yIHdlJ3JlIGluICJ1cGRhdGUgbW9kZSIsIGFuZCB0aGUgZnJlZSBzcGFjZSBwbGFjZS1ob2xkZXJzCisJICogaGF2ZSBiZWVuIHJlbW92ZWQgd2l0aCBfZGlza19yZW1vdmVfZnJlZXNwYWNlKCkKKwkgKi8KKwlyZXR1cm4gTlVMTDsKK30KKworLyogSSdtIGJlZ2lubmluZyB0byBhZ3JlZSB3aXRoIFNlZGdld2ljayA6LS8gKi8KK3N0YXRpYyBpbnQKK19kaXNrX3Jhd19pbnNlcnRfYmVmb3JlIChQZWREaXNrKiBkaXNrLCBQZWRQYXJ0aXRpb24qIGxvYywgUGVkUGFydGl0aW9uKiBwYXJ0KQoreworCVBFRF9BU1NFUlQgKGRpc2sgIT0gTlVMTCwgcmV0dXJuIDApOworCVBFRF9BU1NFUlQgKGxvYyAhPSBOVUxMLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAocGFydCAhPSBOVUxMLCByZXR1cm4gMCk7CisKKwlwYXJ0LT5wcmV2ID0gbG9jLT5wcmV2OworCXBhcnQtPm5leHQgPSBsb2M7CisJaWYgKHBhcnQtPnByZXYpIHsKKwkJcGFydC0+cHJldi0+bmV4dCA9IHBhcnQ7CisJfSBlbHNlIHsKKwkJaWYgKGxvYy0+dHlwZSAmIFBFRF9QQVJUSVRJT05fTE9HSUNBTCkKKwkJCXBlZF9kaXNrX2V4dGVuZGVkX3BhcnRpdGlvbiAoZGlzayktPnBhcnRfbGlzdCA9IHBhcnQ7CisJCWVsc2UKKwkJCWRpc2stPnBhcnRfbGlzdCA9IHBhcnQ7CisJfQorCWxvYy0+cHJldiA9IHBhcnQ7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludAorX2Rpc2tfcmF3X2luc2VydF9hZnRlciAoUGVkRGlzayogZGlzaywgUGVkUGFydGl0aW9uKiBsb2MsIFBlZFBhcnRpdGlvbiogcGFydCkKK3sKKwlQRURfQVNTRVJUIChkaXNrICE9IE5VTEwsIHJldHVybiAwKTsKKwlQRURfQVNTRVJUIChsb2MgIT0gTlVMTCwgcmV0dXJuIDApOworCVBFRF9BU1NFUlQgKHBhcnQgIT0gTlVMTCwgcmV0dXJuIDApOworCisJcGFydC0+cHJldiA9IGxvYzsKKwlwYXJ0LT5uZXh0ID0gbG9jLT5uZXh0OworCWlmIChsb2MtPm5leHQpCisJCWxvYy0+bmV4dC0+cHJldiA9IHBhcnQ7CisJbG9jLT5uZXh0ID0gcGFydDsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50CitfZGlza19yYXdfcmVtb3ZlIChQZWREaXNrKiBkaXNrLCBQZWRQYXJ0aXRpb24qIHBhcnQpCit7CisJUEVEX0FTU0VSVCAoZGlzayAhPSBOVUxMLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAocGFydCAhPSBOVUxMLCByZXR1cm4gMCk7CisKKwlpZiAocGFydC0+cHJldikgeworCQlwYXJ0LT5wcmV2LT5uZXh0ID0gcGFydC0+bmV4dDsKKwkJaWYgKHBhcnQtPm5leHQpCisJCQlwYXJ0LT5uZXh0LT5wcmV2ID0gcGFydC0+cHJldjsKKwl9IGVsc2UgeworCQlpZiAocGFydC0+dHlwZSAmIFBFRF9QQVJUSVRJT05fTE9HSUNBTCkgeworCQkJcGVkX2Rpc2tfZXh0ZW5kZWRfcGFydGl0aW9uIChkaXNrKS0+cGFydF9saXN0CisJCQkJPSBwYXJ0LT5uZXh0OworCQl9IGVsc2UgeworCQkJZGlzay0+cGFydF9saXN0ID0gcGFydC0+bmV4dDsKKwkJfQorCQlpZiAocGFydC0+bmV4dCkKKwkJCXBhcnQtPm5leHQtPnByZXYgPSBOVUxMOworCX0KKworCXJldHVybiAxOworfQorCisvKgorICpVUERBVEUgTU9ERSBPTkxZCisgKi8KK3N0YXRpYyBpbnQKK19kaXNrX3Jhd19hZGQgKFBlZERpc2sqIGRpc2ssIFBlZFBhcnRpdGlvbiogcGFydCkKK3sKKwlQZWRQYXJ0aXRpb24qCXdhbGs7CisJUGVkUGFydGl0aW9uKglsYXN0OworCVBlZFBhcnRpdGlvbioJZXh0X3BhcnQ7CisKKwlQRURfQVNTRVJUIChkaXNrLT51cGRhdGVfbW9kZSwgcmV0dXJuIDApOworCisJZXh0X3BhcnQgPSBwZWRfZGlza19leHRlbmRlZF9wYXJ0aXRpb24gKGRpc2spOworCisJbGFzdCA9IE5VTEw7CisJd2FsayA9IChwYXJ0LT50eXBlICYgUEVEX1BBUlRJVElPTl9MT0dJQ0FMKSA/CisJCQlleHRfcGFydC0+cGFydF9saXN0IDogZGlzay0+cGFydF9saXN0OworCisJZm9yICg7IHdhbGs7IGxhc3QgPSB3YWxrLCB3YWxrID0gd2Fsay0+bmV4dCkgeworCQlpZiAod2Fsay0+Z2VvbS5zdGFydCA+IHBhcnQtPmdlb20uZW5kKQorCQkJYnJlYWs7CisJfQorCisJaWYgKHdhbGspIHsKKwkJcmV0dXJuIF9kaXNrX3Jhd19pbnNlcnRfYmVmb3JlIChkaXNrLCB3YWxrLCBwYXJ0KTsKKwl9IGVsc2UgeworCQlpZiAobGFzdCkgeworCQkJcmV0dXJuIF9kaXNrX3Jhd19pbnNlcnRfYWZ0ZXIgKGRpc2ssIGxhc3QsIHBhcnQpOworCQl9IGVsc2UgeworCQkJaWYgKHBhcnQtPnR5cGUgJiBQRURfUEFSVElUSU9OX0xPR0lDQUwpCisJCQkJZXh0X3BhcnQtPnBhcnRfbGlzdCA9IHBhcnQ7CisJCQllbHNlCisJCQkJZGlzay0+cGFydF9saXN0ID0gcGFydDsKKwkJfSAKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIFBlZENvbnN0cmFpbnQqCitfcGFydGl0aW9uX2dldF9vdmVybGFwX2NvbnN0cmFpbnQgKFBlZFBhcnRpdGlvbiogcGFydCwgUGVkR2VvbWV0cnkqIGdlb20pCit7CisJUGVkU2VjdG9yCW1pbl9zdGFydDsKKwlQZWRTZWN0b3IJbWF4X2VuZDsKKwlQZWRQYXJ0aXRpb24qCXdhbGs7CisJUGVkR2VvbWV0cnkJZnJlZV9zcGFjZTsKKworCVBFRF9BU1NFUlQgKHBhcnQtPmRpc2stPnVwZGF0ZV9tb2RlLCByZXR1cm4gTlVMTCk7CisJUEVEX0FTU0VSVCAocGFydC0+Z2VvbS5kZXYgPT0gZ2VvbS0+ZGV2LCByZXR1cm4gTlVMTCk7CisKKwlpZiAocGFydC0+dHlwZSAmIFBFRF9QQVJUSVRJT05fTE9HSUNBTCkgeworCQlQZWRQYXJ0aXRpb24qIGV4dF9wYXJ0OworCQkKKwkJZXh0X3BhcnQgPSBwZWRfZGlza19leHRlbmRlZF9wYXJ0aXRpb24gKHBhcnQtPmRpc2spOworCQlQRURfQVNTRVJUIChleHRfcGFydCAhPSBOVUxMLCByZXR1cm4gTlVMTCk7CisKKwkJbWluX3N0YXJ0ID0gZXh0X3BhcnQtPmdlb20uc3RhcnQ7CisJCW1heF9lbmQgPSBleHRfcGFydC0+Z2VvbS5lbmQ7CisJCXdhbGsgPSBleHRfcGFydC0+cGFydF9saXN0OworCX0gZWxzZSB7CisJCW1pbl9zdGFydCA9IDA7CisJCW1heF9lbmQgPSBwYXJ0LT5kaXNrLT5kZXYtPmxlbmd0aCAtIDE7CisJCXdhbGsgPSBwYXJ0LT5kaXNrLT5wYXJ0X2xpc3Q7CisJfQorCisJd2hpbGUgKHdhbGsgIT0gTlVMTAorCSAgICAgICAmJiAod2Fsay0+Z2VvbS5zdGFydCA8IGdlb20tPnN0YXJ0CisJCQkgICAgfHwgbWluX3N0YXJ0ID49IHdhbGstPmdlb20uc3RhcnQpKSB7CisJCWlmICh3YWxrICE9IHBhcnQpCisJCQltaW5fc3RhcnQgPSB3YWxrLT5nZW9tLmVuZCArIDE7CisJCXdhbGsgPSB3YWxrLT5uZXh0OworCX0KKworCWlmICh3YWxrID09IHBhcnQpCisJCXdhbGsgPSB3YWxrLT5uZXh0OworCisJaWYgKHdhbGspCisJCW1heF9lbmQgPSB3YWxrLT5nZW9tLnN0YXJ0IC0gMTsKKworCWlmIChtaW5fc3RhcnQgPj0gbWF4X2VuZCkKKwkJcmV0dXJuIE5VTEw7CisKKwlwZWRfZ2VvbWV0cnlfaW5pdCAoJmZyZWVfc3BhY2UsIHBhcnQtPmRpc2stPmRldiwKKwkJCSAgIG1pbl9zdGFydCwgbWF4X2VuZCAtIG1pbl9zdGFydCArIDEpOworCXJldHVybiBwZWRfY29uc3RyYWludF9uZXdfZnJvbV9tYXggKCZmcmVlX3NwYWNlKTsKK30KKworLyoKKyAqIFJldHVybnMgXGMgMCBpZiB0aGUgcGFydGl0aW9uLCBccCBwYXJ0IG92ZXJsYXBzIHdpdGggYW55IHBhcnRpdGlvbnMgb24gdGhlCisgKiBccCBkaXNrLiAgVGhlIGdlb21ldHJ5IG9mIFxwIHBhcnQgaXMgdGFrZW4gdG8gYmUgXHAgZ2VvbSwgTk9UIFxwIHBhcnQtPmdlb20KKyAqICh0aGUgaWRlYSBoZXJlIGlzIHRvIGNoZWNrIGlmIFxwIGdlb20gaXMgdmFsaWQsIGJlZm9yZSBjaGFuZ2luZyBccCBwYXJ0KS4KKyAqIAorICogVGhpcyBpcyB1c2VmdWwgZm9yIHNlZWluZyBpZiBhIHJlc2l6ZWQgcGFydGl0aW9ucyBuZXcgZ2VvbWV0cnkgaXMgZ29pbmcgdG8KKyAqIGZpdCwgd2l0aG91dCB0aGUgZXhpc3RpbmcgZ2VvbXRyeSBnZXR0aW5nIGluIHRoZSB3YXkuCisgKgorICogTm90ZTogb3ZlcmxhcCB3aXRoIGFuIGV4dGVuZGVkIHBhcnRpdGlvbiBpcyBhbHNvIGFsbG93ZWQsIHByb3ZpZGVkIHRoYXQKKyAqIFxwIGdlb20gbGllcyBjb21wbGV0ZWx5IGluc2lkZSB0aGUgZXh0ZW5kZWQgcGFydGl0aW9uLgorICovCitzdGF0aWMgaW50CitfZGlza19jaGVja19wYXJ0X292ZXJsYXBzIChQZWREaXNrKiBkaXNrLCBQZWRQYXJ0aXRpb24qIHBhcnQpCit7CisJUGVkUGFydGl0aW9uKgl3YWxrOworCisJUEVEX0FTU0VSVCAoZGlzayAhPSBOVUxMLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAocGFydCAhPSBOVUxMLCByZXR1cm4gMCk7CisKKwlmb3IgKHdhbGsgPSBwZWRfZGlza19uZXh0X3BhcnRpdGlvbiAoZGlzaywgTlVMTCk7IHdhbGs7CisJICAgICB3YWxrID0gcGVkX2Rpc2tfbmV4dF9wYXJ0aXRpb24gKGRpc2ssIHdhbGspKSB7CisJCWlmICh3YWxrLT50eXBlICYgUEVEX1BBUlRJVElPTl9GUkVFU1BBQ0UpCisJCQljb250aW51ZTsKKwkJaWYgKHdhbGsgPT0gcGFydCkKKwkJCWNvbnRpbnVlOworCQlpZiAocGFydC0+dHlwZSAmIFBFRF9QQVJUSVRJT05fRVhURU5ERUQKKwkJICAgICYmIHdhbGstPnR5cGUgJiBQRURfUEFSVElUSU9OX0xPR0lDQUwpCisJCQljb250aW51ZTsKKworCQlpZiAocGVkX2dlb21ldHJ5X3Rlc3Rfb3ZlcmxhcCAoJndhbGstPmdlb20sICZwYXJ0LT5nZW9tKSkgeworCQkJaWYgKHdhbGstPnR5cGUgJiBQRURfUEFSVElUSU9OX0VYVEVOREVECisJCQkgICAgJiYgcGFydC0+dHlwZSAmIFBFRF9QQVJUSVRJT05fTE9HSUNBTAorCQkJICAgICYmIHBlZF9nZW9tZXRyeV90ZXN0X2luc2lkZSAoJndhbGstPmdlb20sCisJCQkJCQkJICZwYXJ0LT5nZW9tKSkKKwkJCQljb250aW51ZTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK19wYXJ0aXRpb25fY2hlY2tfYmFzaWNfc2FuaXR5IChQZWREaXNrKiBkaXNrLCBQZWRQYXJ0aXRpb24qIHBhcnQpCit7CisJUGVkUGFydGl0aW9uKglleHRfcGFydCA9IHBlZF9kaXNrX2V4dGVuZGVkX3BhcnRpdGlvbiAoZGlzayk7CisKKwlQRURfQVNTRVJUIChwYXJ0LT5kaXNrID09IGRpc2ssIHJldHVybiAwKTsKKworCVBFRF9BU1NFUlQgKHBhcnQtPmdlb20uc3RhcnQgPj0gMCwgcmV0dXJuIDApOworCVBFRF9BU1NFUlQgKHBhcnQtPmdlb20uZW5kIDwgZGlzay0+ZGV2LT5sZW5ndGgsIHJldHVybiAwKTsKKwlQRURfQVNTRVJUIChwYXJ0LT5nZW9tLnN0YXJ0IDw9IHBhcnQtPmdlb20uZW5kLCByZXR1cm4gMCk7CisKKwlpZiAoIXBlZF9kaXNrX3R5cGVfY2hlY2tfZmVhdHVyZSAoZGlzay0+dHlwZSwgUEVEX0RJU0tfVFlQRV9FWFRFTkRFRCkKKwkgICAgJiYgKHBhcnQtPnR5cGUgPT0gUEVEX1BBUlRJVElPTl9FWFRFTkRFRAorCQkgICAgfHwgcGFydC0+dHlwZSA9PSBQRURfUEFSVElUSU9OX0xPR0lDQUwpKSB7CisJCXBlZF9leGNlcHRpb25fdGhyb3cgKAorCQkJUEVEX0VYQ0VQVElPTl9FUlJPUiwKKwkJCVBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJXygiJXMgZGlzayBsYWJlbHMgZG9uJ3Qgc3VwcG9ydCBsb2dpY2FsIG9yIGV4dGVuZGVkICIKKwkJCSAgInBhcnRpdGlvbnMuIiksCisJCQlkaXNrLT50eXBlLT5uYW1lKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHBlZF9wYXJ0aXRpb25faXNfYWN0aXZlIChwYXJ0KQorCQkJJiYgISAocGFydC0+dHlwZSAmIFBFRF9QQVJUSVRJT05fTE9HSUNBTCkpIHsKKwkJaWYgKHBlZF9kaXNrX2dldF9wcmltYXJ5X3BhcnRpdGlvbl9jb3VudCAoZGlzaykgKyAxCisJCSAgICA+IHBlZF9kaXNrX2dldF9tYXhfcHJpbWFyeV9wYXJ0aXRpb25fY291bnQgKGRpc2spKSB7CisJCQlwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCQlQRURfRVhDRVBUSU9OX0VSUk9SLAorCQkJCVBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJCV8oIlRvbyBtYW55IHByaW1hcnkgcGFydGl0aW9ucy4iKSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCWlmICgocGFydC0+dHlwZSAmIFBFRF9QQVJUSVRJT05fTE9HSUNBTCkgJiYgIWV4dF9wYXJ0KSB7CisJCXBlZF9leGNlcHRpb25fdGhyb3cgKAorCQkJUEVEX0VYQ0VQVElPTl9FUlJPUiwKKwkJCVBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJXygiQ2FuJ3QgYWRkIGEgbG9naWNhbCBwYXJ0aXRpb24gdG8gJXMsIGJlY2F1c2UgIgorCQkJInRoZXJlIGlzIG5vIGV4dGVuZGVkIHBhcnRpdGlvbi4iKSwKKwkJCWRpc2stPmRldi0+cGF0aCk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50CitfY2hlY2tfZXh0ZW5kZWRfcGFydGl0aW9uIChQZWREaXNrKiBkaXNrLCBQZWRQYXJ0aXRpb24qIHBhcnQpCit7CisJUGVkUGFydGl0aW9uKgkJd2FsazsKKwlQZWRQYXJ0aXRpb24qCQlleHRfcGFydDsKKworCVBFRF9BU1NFUlQgKGRpc2sgIT0gTlVMTCwgcmV0dXJuIDApOworCWV4dF9wYXJ0ID0gcGVkX2Rpc2tfZXh0ZW5kZWRfcGFydGl0aW9uIChkaXNrKTsKKwlpZiAoIWV4dF9wYXJ0KSBleHRfcGFydCA9IHBhcnQ7CisJUEVEX0FTU0VSVCAoZXh0X3BhcnQgIT0gTlVMTCwgcmV0dXJuIDApOworCisJaWYgKHBhcnQgIT0gZXh0X3BhcnQpIHsKKwkJcGVkX2V4Y2VwdGlvbl90aHJvdyAoCisJCQlQRURfRVhDRVBUSU9OX0VSUk9SLAorCQkJUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQlfKCJDYW4ndCBoYXZlIG1vcmUgdGhhbiBvbmUgZXh0ZW5kZWQgcGFydGl0aW9uIG9uICVzLiIpLAorCQkJZGlzay0+ZGV2LT5wYXRoKTsKKwkJcmV0dXJuIDA7CisJfQorCisJZm9yICh3YWxrID0gZXh0X3BhcnQtPnBhcnRfbGlzdDsgd2Fsazsgd2FsayA9IHdhbGstPm5leHQpIHsKKwkJaWYgKCFwZWRfZ2VvbWV0cnlfdGVzdF9pbnNpZGUgKCZleHRfcGFydC0+Z2VvbSwgJndhbGstPmdlb20pKSB7CisJCQlwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCQlQRURfRVhDRVBUSU9OX0VSUk9SLAorCQkJCVBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJCV8oIkNhbid0IGhhdmUgbG9naWNhbCBwYXJ0aXRpb25zIG91dHNpZGUgb2YgIgorCQkJCSAgInRoZSBleHRlbmRlZCBwYXJ0aXRpb24uIikpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK19jaGVja19wYXJ0aXRpb24gKFBlZERpc2sqIGRpc2ssIFBlZFBhcnRpdGlvbiogcGFydCkKK3sKKwlQZWRQYXJ0aXRpb24qCWV4dF9wYXJ0ID0gcGVkX2Rpc2tfZXh0ZW5kZWRfcGFydGl0aW9uIChkaXNrKTsKKworCVBFRF9BU1NFUlQgKHBhcnQtPmdlb20uc3RhcnQgPD0gcGFydC0+Z2VvbS5lbmQsIHJldHVybiAwKTsKKworCWlmIChwYXJ0LT50eXBlID09IFBFRF9QQVJUSVRJT05fRVhURU5ERUQpIHsKKwkJaWYgKCFfY2hlY2tfZXh0ZW5kZWRfcGFydGl0aW9uIChkaXNrLCBwYXJ0KSkKKwkJCXJldHVybiAwOworCX0KKworCWlmIChwYXJ0LT50eXBlICYgUEVEX1BBUlRJVElPTl9MT0dJQ0FMCisJICAgICYmICFwZWRfZ2VvbWV0cnlfdGVzdF9pbnNpZGUgKCZleHRfcGFydC0+Z2VvbSwgJnBhcnQtPmdlb20pKSB7CisJCXBlZF9leGNlcHRpb25fdGhyb3cgKAorCQkJUEVEX0VYQ0VQVElPTl9FUlJPUiwKKwkJCVBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJXygiQ2FuJ3QgaGF2ZSBhIGxvZ2ljYWwgcGFydGl0aW9uIG91dHNpZGUgb2YgdGhlICIKKwkJCSAgImV4dGVuZGVkIHBhcnRpdGlvbiBvbiAlcy4iKSwKKwkJCWRpc2stPmRldi0+cGF0aCk7CisJCXJldHVybiAwOworCX0KKworCWlmICghX2Rpc2tfY2hlY2tfcGFydF9vdmVybGFwcyAoZGlzaywgcGFydCkpIHsKKwkJcGVkX2V4Y2VwdGlvbl90aHJvdyAoCisJCQlQRURfRVhDRVBUSU9OX0VSUk9SLAorCQkJUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQlfKCJDYW4ndCBoYXZlIG92ZXJsYXBwaW5nIHBhcnRpdGlvbnMuIikpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoISAocGFydC0+dHlwZSAmIFBFRF9QQVJUSVRJT05fTE9HSUNBTCkKKwkgICAgJiYgZXh0X3BhcnQgJiYgZXh0X3BhcnQgIT0gcGFydAorCSAgICAmJiBwZWRfZ2VvbWV0cnlfdGVzdF9pbnNpZGUgKCZleHRfcGFydC0+Z2VvbSwgJnBhcnQtPmdlb20pKSB7CisJCXBlZF9leGNlcHRpb25fdGhyb3cgKFBFRF9FWENFUFRJT05fRVJST1IsIFBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJXygiQ2FuJ3QgaGF2ZSBhIHByaW1hcnkgcGFydGl0aW9uIGluc2lkZSBhbiBleHRlbmRlZCAiCisJCQkgInBhcnRpdGlvbi4iKSk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCisvKioKKyAqIEFkZHMgUGVkUGFydGl0aW9uIFxwIHBhcnQgdG8gUGVkUGFydGl0aW9uIFxwIGRpc2suCisgKiAKKyAqIFx3YXJuaW5nIFRoZSBwYXJ0aXRpb24ncyBnZW9tZXRyeSBtYXkgYmUgY2hhbmdlZCwgc3ViamVjdCB0byBccCBjb25zdHJhaW50LgorICogWW91IGNvdWxkIHNldCBccCBjb25zdHJhaW50IHRvIDx0dD5wZWRfY29uc3RyYWludF9leGFjdCgmcGFydC0+Z2VvbSk8L3R0PiwKKyAqIGJ1dCBtYW55IHBhcnRpdGlvbiB0YWJsZSBzY2hlbWVzIGhhdmUgc3BlY2lhbCByZXF1aXJlbWVudHMgb24gdGhlIHN0YXJ0CisgKiBhbmQgZW5kIG9mIHBhcnRpdGlvbnMuICBUaGVyZWZvcmUsIGhhdmluZyBhbiBvdmVybHkgc3RyaWN0IGNvbnN0cmFpbnQKKyAqIHdpbGwgcHJvYmFibHkgbWVhbiB0aGF0IHRoaXMgZnVuY3Rpb24gd2lsbCBmYWlsIChpbiB3aGljaAorICogY2FzZSBccCBwYXJ0IHdpbGwgYmUgbGVmdCB1bm1vZGlmaWVkKQorICogXHAgcGFydCBpcyBhc3NpZ25lZCBhIG51bWJlciAoXHAgcGFydC0+bnVtKSBpbiB0aGlzIHByb2Nlc3MuCisgKiAKKyAqIFxyZXR1cm4gXGMgMCBvbiBmYWlsdXJlLgorICovCitpbnQKK3BlZF9kaXNrX2FkZF9wYXJ0aXRpb24gKFBlZERpc2sqIGRpc2ssIFBlZFBhcnRpdGlvbiogcGFydCwKKwkJCWNvbnN0IFBlZENvbnN0cmFpbnQqIGNvbnN0cmFpbnQpCit7CisJUGVkQ29uc3RyYWludCoJb3ZlcmxhcF9jb25zdHJhaW50ID0gTlVMTDsKKwlQZWRDb25zdHJhaW50Kgljb25zdHJhaW50cyA9IE5VTEw7CisKKwlQRURfQVNTRVJUIChkaXNrICE9IE5VTEwsIHJldHVybiAwKTsKKwlQRURfQVNTRVJUIChwYXJ0ICE9IE5VTEwsIHJldHVybiAwKTsKKworCWlmICghX3BhcnRpdGlvbl9jaGVja19iYXNpY19zYW5pdHkgKGRpc2ssIHBhcnQpKQorCQlyZXR1cm4gMDsKKworCV9kaXNrX3B1c2hfdXBkYXRlX21vZGUgKGRpc2spOworCisJaWYgKHBlZF9wYXJ0aXRpb25faXNfYWN0aXZlIChwYXJ0KSkgeworCQlvdmVybGFwX2NvbnN0cmFpbnQKKwkJCT0gX3BhcnRpdGlvbl9nZXRfb3ZlcmxhcF9jb25zdHJhaW50IChwYXJ0LCAmcGFydC0+Z2VvbSk7CisJCWNvbnN0cmFpbnRzID0gcGVkX2NvbnN0cmFpbnRfaW50ZXJzZWN0IChvdmVybGFwX2NvbnN0cmFpbnQsCisJCQkJCQkJY29uc3RyYWludCk7CisKKwkJaWYgKCFjb25zdHJhaW50cyAmJiBjb25zdHJhaW50KSB7CisJCQlwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCQlQRURfRVhDRVBUSU9OX0VSUk9SLAorCQkJCVBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJCV8oIkNhbid0IGhhdmUgb3ZlcmxhcHBpbmcgcGFydGl0aW9ucy4iKSk7CisJCQlnb3RvIGVycm9yOworCQl9CisKKwkJaWYgKCFfcGFydGl0aW9uX2VudW1lcmF0ZSAocGFydCkpCisJCQlnb3RvIGVycm9yOworCQlpZiAoIV9wYXJ0aXRpb25fYWxpZ24gKHBhcnQsIGNvbnN0cmFpbnRzKSkKKwkJCWdvdG8gZXJyb3I7CisJfQorCWlmICghX2NoZWNrX3BhcnRpdGlvbiAoZGlzaywgcGFydCkpCisJCWdvdG8gZXJyb3I7CisJaWYgKCFfZGlza19yYXdfYWRkIChkaXNrLCBwYXJ0KSkKKwkJZ290byBlcnJvcjsKKworCXBlZF9jb25zdHJhaW50X2Rlc3Ryb3kgKG92ZXJsYXBfY29uc3RyYWludCk7CisJcGVkX2NvbnN0cmFpbnRfZGVzdHJveSAoY29uc3RyYWludHMpOworCV9kaXNrX3BvcF91cGRhdGVfbW9kZSAoZGlzayk7CisjaWZkZWYgREVCVUcKKwlpZiAoIV9kaXNrX2NoZWNrX3Nhbml0eSAoZGlzaykpCisJCXJldHVybiAwOworI2VuZGlmCisJcmV0dXJuIDE7CisKK2Vycm9yOgorCXBlZF9jb25zdHJhaW50X2Rlc3Ryb3kgKG92ZXJsYXBfY29uc3RyYWludCk7CisJcGVkX2NvbnN0cmFpbnRfZGVzdHJveSAoY29uc3RyYWludHMpOworCV9kaXNrX3BvcF91cGRhdGVfbW9kZSAoZGlzayk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogUmVtb3ZlcyBQZWRQYXJ0aXRpb24gXHAgcGFydCBmcm9tIFBlZERpc2sgXHAgZGlzay4KKyAqCisgKiBJZiBccCBwYXJ0IGlzIGFuIGV4dGVuZGVkIHBhcnRpdGlvbiwgaXQgbXVzdCBub3QgY29udGFpbiBhbnkgbG9naWNhbAorICogcGFydGl0aW9ucy4gXHAgcGFydCBpcyAqTk9UKiBkZXN0cm95ZWQuIFRoZSBjYWxsZXIgbXVzdCBjYWxsCisgKiBwZWRfcGFydGl0aW9uX2Rlc3Ryb3koKSwgb3IgdXNlIHBlZF9kaXNrX2RlbGV0ZV9wYXJ0aXRpb24oKSBpbnN0ZWFkLgorICoKKyAqIFxyZXR1cm4gXGMgMCBvbiBlcnJvci4KKyAqLworaW50CitwZWRfZGlza19yZW1vdmVfcGFydGl0aW9uIChQZWREaXNrKiBkaXNrLCBQZWRQYXJ0aXRpb24qIHBhcnQpCit7CisJUEVEX0FTU0VSVCAoZGlzayAhPSBOVUxMLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAocGFydCAhPSBOVUxMLCByZXR1cm4gMCk7CisKKwlfZGlza19wdXNoX3VwZGF0ZV9tb2RlIChkaXNrKTsKKwlQRURfQVNTRVJUIChwYXJ0LT5wYXJ0X2xpc3QgPT0gTlVMTCwgZ290byBlcnJvcik7CisJX2Rpc2tfcmF3X3JlbW92ZSAoZGlzaywgcGFydCk7CisJX2Rpc2tfcG9wX3VwZGF0ZV9tb2RlIChkaXNrKTsKKwlwZWRfZGlza19lbnVtZXJhdGVfcGFydGl0aW9ucyAoZGlzayk7CisJcmV0dXJuIDE7CisKK2Vycm9yOgorCV9kaXNrX3BvcF91cGRhdGVfbW9kZSAoZGlzayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3BlZF9kaXNrX2RlbGV0ZV9hbGxfbG9naWNhbCAoUGVkRGlzayogZGlzayk7CisKKy8qKgorICogUmVtb3ZlcyBccCBwYXJ0IGZyb20gXHAgZGlzaywgYW5kIGRlc3Ryb3lzIFxwIHBhcnQuCisgKgorICogXHJldHVybiBcYyAwIG9uIGZhaWx1cmUuCisgKi8KK2ludAorcGVkX2Rpc2tfZGVsZXRlX3BhcnRpdGlvbiAoUGVkRGlzayogZGlzaywgUGVkUGFydGl0aW9uKiBwYXJ0KQoreworCVBFRF9BU1NFUlQgKGRpc2sgIT0gTlVMTCwgcmV0dXJuIDApOworCVBFRF9BU1NFUlQgKHBhcnQgIT0gTlVMTCwgcmV0dXJuIDApOworCisJX2Rpc2tfcHVzaF91cGRhdGVfbW9kZSAoZGlzayk7CisJaWYgKHBhcnQtPnR5cGUgPT0gUEVEX1BBUlRJVElPTl9FWFRFTkRFRCkKKwkJcGVkX2Rpc2tfZGVsZXRlX2FsbF9sb2dpY2FsIChkaXNrKTsKKwlwZWRfZGlza19yZW1vdmVfcGFydGl0aW9uIChkaXNrLCBwYXJ0KTsKKwlwZWRfcGFydGl0aW9uX2Rlc3Ryb3kgKHBhcnQpOworCV9kaXNrX3BvcF91cGRhdGVfbW9kZSAoZGlzayk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludAorcGVkX2Rpc2tfZGVsZXRlX2FsbF9sb2dpY2FsIChQZWREaXNrKiBkaXNrKQoreworCVBlZFBhcnRpdGlvbioJCXdhbGs7CisJUGVkUGFydGl0aW9uKgkJbmV4dDsKKwlQZWRQYXJ0aXRpb24qCQlleHRfcGFydDsKKworCVBFRF9BU1NFUlQgKGRpc2sgIT0gTlVMTCwgcmV0dXJuIDApOworCWV4dF9wYXJ0ID0gcGVkX2Rpc2tfZXh0ZW5kZWRfcGFydGl0aW9uIChkaXNrKTsKKwlQRURfQVNTRVJUIChleHRfcGFydCAhPSBOVUxMLCByZXR1cm4gMCk7CisKKwlmb3IgKHdhbGsgPSBleHRfcGFydC0+cGFydF9saXN0OyB3YWxrOyB3YWxrID0gbmV4dCkgeworCQluZXh0ID0gd2Fsay0+bmV4dDsKKworCQlpZiAoIXBlZF9kaXNrX2RlbGV0ZV9wYXJ0aXRpb24gKGRpc2ssIHdhbGspKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCisvKioKKyAqIFJlbW92ZXMgYW5kIGRlc3Ryb3lzIGFsbCBwYXJ0aXRpb25zIG9uIFxwIGRpc2suCisgKgorICogXHJldHVybiBcYyAwIG9uIGZhaWx1cmUuCisgKi8KK2ludAorcGVkX2Rpc2tfZGVsZXRlX2FsbCAoUGVkRGlzayogZGlzaykKK3sKKwlQZWRQYXJ0aXRpb24qCQl3YWxrOworCVBlZFBhcnRpdGlvbioJCW5leHQ7CisKKwlQRURfQVNTRVJUIChkaXNrICE9IE5VTEwsIHJldHVybiAwKTsKKworCV9kaXNrX3B1c2hfdXBkYXRlX21vZGUgKGRpc2spOworCisJZm9yICh3YWxrID0gZGlzay0+cGFydF9saXN0OyB3YWxrOyB3YWxrID0gbmV4dCkgeworCQluZXh0ID0gd2Fsay0+bmV4dDsKKworCQlpZiAoIXBlZF9kaXNrX2RlbGV0ZV9wYXJ0aXRpb24gKGRpc2ssIHdhbGspKQorCQkJcmV0dXJuIDA7CisJfQorCisJX2Rpc2tfcG9wX3VwZGF0ZV9tb2RlIChkaXNrKTsKKworCXJldHVybiAxOworfQorCisvKioKKyAqIFNldHMgdGhlIGdlb21ldHJ5IG9mIFxwIHBhcnQgKGkuZS4gY2hhbmdlIGEgcGFydGl0aW9ucyBsb2NhdGlvbikuIFRoaXMgY2FuCisgKiBmYWlsIGZvciBtYW55IHJlYXNvbnMsIGUuZy4gY2FuJ3Qgb3ZlcmxhcCB3aXRoIG90aGVyIHBhcnRpdGlvbnMuIElmIGl0CisgKiBkb2VzIGZhaWwsIFxwIHBhcnQgd2lsbCByZW1haW4gdW5jaGFuZ2VkLiBSZXR1cm5zIFxjIDAgb24gZmFpbHVyZS4gXHAgcGFydCdzCisgKiBnZW9tZXRyeSBtYXkgYmUgc2V0IHRvIHNvbWV0aGluZyBkaWZmZXJlbnQgZnJvbSBccCBzdGFydCBhbmQgXHAgZW5kIHN1YmplY3QKKyAqIHRvIFxwIGNvbnN0cmFpbnQuCisgKgorICogXHdhcm5pbmcgVGhlIGNvbnN0cmFpbnQgd2FybmluZyBmcm9tIHBlZF9kaXNrX2FkZF9wYXJ0aXRpb24oKSBhcHBsaWVzLgorICogCisgKiBcbm90ZSB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IG1vZGlmeSB0aGUgY29udGVudHMgb2YgdGhlIHBhcnRpdGlvbi4gIFlvdSBuZWVkCisgKiAgICAgICB0byBjYWxsIHBlZF9maWxlX3N5c3RlbV9yZXNpemUoKSBzZXBhcmF0ZWx5LgorICovCitpbnQKK3BlZF9kaXNrX3NldF9wYXJ0aXRpb25fZ2VvbSAoUGVkRGlzayogZGlzaywgUGVkUGFydGl0aW9uKiBwYXJ0LAorCQkJICAgICBjb25zdCBQZWRDb25zdHJhaW50KiBjb25zdHJhaW50LAorCQkJICAgICBQZWRTZWN0b3Igc3RhcnQsIFBlZFNlY3RvciBlbmQpCit7CisJUGVkQ29uc3RyYWludCoJb3ZlcmxhcF9jb25zdHJhaW50ID0gTlVMTDsKKwlQZWRDb25zdHJhaW50Kgljb25zdHJhaW50cyA9IE5VTEw7CisJUGVkR2VvbWV0cnkJb2xkX2dlb207CisJUGVkR2VvbWV0cnkJbmV3X2dlb207CisKKwlQRURfQVNTRVJUIChkaXNrICE9IE5VTEwsIHJldHVybiAwKTsKKwlQRURfQVNTRVJUIChwYXJ0ICE9IE5VTEwsIHJldHVybiAwKTsKKwlQRURfQVNTRVJUIChwYXJ0LT5kaXNrID09IGRpc2ssIHJldHVybiAwKTsKKworCW9sZF9nZW9tID0gcGFydC0+Z2VvbTsKKwlwZWRfZ2VvbWV0cnlfaW5pdCAoJm5ld19nZW9tLCBwYXJ0LT5nZW9tLmRldiwgc3RhcnQsIGVuZCAtIHN0YXJ0ICsgMSk7CisKKwlfZGlza19wdXNoX3VwZGF0ZV9tb2RlIChkaXNrKTsKKworCW92ZXJsYXBfY29uc3RyYWludAorCQk9IF9wYXJ0aXRpb25fZ2V0X292ZXJsYXBfY29uc3RyYWludCAocGFydCwgJm5ld19nZW9tKTsKKwljb25zdHJhaW50cyA9IHBlZF9jb25zdHJhaW50X2ludGVyc2VjdCAob3ZlcmxhcF9jb25zdHJhaW50LCBjb25zdHJhaW50KTsKKwlpZiAoIWNvbnN0cmFpbnRzICYmIGNvbnN0cmFpbnQpIHsKKwkJcGVkX2V4Y2VwdGlvbl90aHJvdyAoCisJCQlQRURfRVhDRVBUSU9OX0VSUk9SLAorCQkJUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQlfKCJDYW4ndCBoYXZlIG92ZXJsYXBwaW5nIHBhcnRpdGlvbnMuIikpOworCQlnb3RvIGVycm9yX3BvcF91cGRhdGVfbW9kZTsKKwl9CisKKwlwYXJ0LT5nZW9tID0gbmV3X2dlb207CisJaWYgKCFfcGFydGl0aW9uX2FsaWduIChwYXJ0LCBjb25zdHJhaW50cykpCisJCWdvdG8gZXJyb3JfcG9wX3VwZGF0ZV9tb2RlOworCWlmICghX2NoZWNrX3BhcnRpdGlvbiAoZGlzaywgcGFydCkpCisJCWdvdG8gZXJyb3JfcG9wX3VwZGF0ZV9tb2RlOworCisJLyogcmVtb3ZlIGFuZCBhZGQsIHRvIGVuc3VyZSB0aGUgb3JkZXJpbmcgZ2V0cyB1cGRhdGVkIGlmIG5lY2Vzc2FyeSAqLworCV9kaXNrX3Jhd19yZW1vdmUgKGRpc2ssIHBhcnQpOworCV9kaXNrX3Jhd19hZGQgKGRpc2ssIHBhcnQpOworCisJX2Rpc2tfcG9wX3VwZGF0ZV9tb2RlIChkaXNrKTsKKworCXBlZF9jb25zdHJhaW50X2Rlc3Ryb3kgKG92ZXJsYXBfY29uc3RyYWludCk7CisJcGVkX2NvbnN0cmFpbnRfZGVzdHJveSAoY29uc3RyYWludHMpOworCXJldHVybiAxOworCitlcnJvcl9wb3BfdXBkYXRlX21vZGU6CisJX2Rpc2tfcG9wX3VwZGF0ZV9tb2RlIChkaXNrKTsKKwlwZWRfY29uc3RyYWludF9kZXN0cm95IChvdmVybGFwX2NvbnN0cmFpbnQpOworCXBlZF9jb25zdHJhaW50X2Rlc3Ryb3kgKGNvbnN0cmFpbnRzKTsKKwlwYXJ0LT5nZW9tID0gb2xkX2dlb207CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogR3JvdyBQZWRQYXJ0aXRpb24gXHAgcGFydCBnZW9tZXRyeSB0byB0aGUgbWF4aW11bSBwb3NzaWJsZSBzdWJqZWN0IHRvCisgKiBccCBjb25zdHJhaW50LiAgVGhlIG5ldyBnZW9tZXRyeSB3aWxsIGJlIGEgc3VwZXJzZXQgb2YgdGhlIG9sZCBnZW9tZXRyeS4KKyAqIAorICogXHJldHVybiAwIG9uIGZhaWx1cmUKKyAqLworaW50CitwZWRfZGlza19tYXhpbWl6ZV9wYXJ0aXRpb24gKFBlZERpc2sqIGRpc2ssIFBlZFBhcnRpdGlvbiogcGFydCwKKwkJCSAgICAgY29uc3QgUGVkQ29uc3RyYWludCogY29uc3RyYWludCkKK3sKKwlQZWRHZW9tZXRyeQlvbGRfZ2VvbTsKKwlQZWRTZWN0b3IJZ2xvYmFsX21pbl9zdGFydDsKKwlQZWRTZWN0b3IJZ2xvYmFsX21heF9lbmQ7CisJUGVkU2VjdG9yCW5ld19zdGFydDsKKwlQZWRTZWN0b3IJbmV3X2VuZDsKKwlQZWRQYXJ0aXRpb24qCWV4dF9wYXJ0ID0gcGVkX2Rpc2tfZXh0ZW5kZWRfcGFydGl0aW9uIChkaXNrKTsKKwlQZWRDb25zdHJhaW50Kgljb25zdHJhaW50X2FueTsKKworCVBFRF9BU1NFUlQgKGRpc2sgIT0gTlVMTCwgcmV0dXJuIDApOworCVBFRF9BU1NFUlQgKHBhcnQgIT0gTlVMTCwgcmV0dXJuIDApOworCisJaWYgKHBhcnQtPnR5cGUgJiBQRURfUEFSVElUSU9OX0xPR0lDQUwpIHsKKwkJUEVEX0FTU0VSVCAoZXh0X3BhcnQgIT0gTlVMTCwgcmV0dXJuIDApOworCQlnbG9iYWxfbWluX3N0YXJ0ID0gZXh0X3BhcnQtPmdlb20uc3RhcnQ7CisJCWdsb2JhbF9tYXhfZW5kID0gZXh0X3BhcnQtPmdlb20uZW5kOworCX0gZWxzZSB7CisJCWdsb2JhbF9taW5fc3RhcnQgPSAwOworCQlnbG9iYWxfbWF4X2VuZCA9IGRpc2stPmRldi0+bGVuZ3RoIC0gMTsKKwl9CisKKwlvbGRfZ2VvbSA9IHBhcnQtPmdlb207CisKKwlfZGlza19wdXNoX3VwZGF0ZV9tb2RlIChkaXNrKTsKKworCWlmIChwYXJ0LT5wcmV2KQorCQluZXdfc3RhcnQgPSBwYXJ0LT5wcmV2LT5nZW9tLmVuZCArIDE7CisJZWxzZQorCQluZXdfc3RhcnQgPSBnbG9iYWxfbWluX3N0YXJ0OworCisJaWYgKHBhcnQtPm5leHQpCisJCW5ld19lbmQgPSBwYXJ0LT5uZXh0LT5nZW9tLnN0YXJ0IC0gMTsKKwllbHNlCisJCW5ld19lbmQgPSBnbG9iYWxfbWF4X2VuZDsKKworCWlmICghcGVkX2Rpc2tfc2V0X3BhcnRpdGlvbl9nZW9tIChkaXNrLCBwYXJ0LCBjb25zdHJhaW50LCBuZXdfc3RhcnQsCisJCQkJCSAgbmV3X2VuZCkpCisJCWdvdG8gZXJyb3I7CisKKwlfZGlza19wb3BfdXBkYXRlX21vZGUgKGRpc2spOworCXJldHVybiAxOworCitlcnJvcjoKKwljb25zdHJhaW50X2FueSA9IHBlZF9jb25zdHJhaW50X2FueSAoZGlzay0+ZGV2KTsKKwlwZWRfZGlza19zZXRfcGFydGl0aW9uX2dlb20gKGRpc2ssIHBhcnQsIGNvbnN0cmFpbnRfYW55LAorCQkJCSAgICAgb2xkX2dlb20uc3RhcnQsIG9sZF9nZW9tLmVuZCk7CisJcGVkX2NvbnN0cmFpbnRfZGVzdHJveSAoY29uc3RyYWludF9hbnkpOworCV9kaXNrX3BvcF91cGRhdGVfbW9kZSAoZGlzayk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogR2V0IHRoZSBtYXhpbXVtIGdlb21ldHJ5IFxwIHBhcnQgY2FuIGJlIGdyb3duIHRvLCBzdWJqZWN0IHRvCisgKiBccCBjb25zdHJhaW50LgorICoKKyAqIFxyZXR1cm4gXGMgTlVMTCBvbiBmYWlsdXJlLgorICovCitQZWRHZW9tZXRyeSoKK3BlZF9kaXNrX2dldF9tYXhfcGFydGl0aW9uX2dlb21ldHJ5IChQZWREaXNrKiBkaXNrLCBQZWRQYXJ0aXRpb24qIHBhcnQsCisJCQkJICAgICBjb25zdCBQZWRDb25zdHJhaW50KiBjb25zdHJhaW50KQoreworCVBlZEdlb21ldHJ5CW9sZF9nZW9tOworCVBlZEdlb21ldHJ5KgltYXhfZ2VvbTsKKwlQZWRDb25zdHJhaW50Kgljb25zdHJhaW50X2V4YWN0OworCisJUEVEX0FTU0VSVChkaXNrICE9IE5VTEwsIHJldHVybiBOVUxMKTsKKwlQRURfQVNTRVJUKHBhcnQgIT0gTlVMTCwgcmV0dXJuIE5VTEwpOworCVBFRF9BU1NFUlQocGVkX3BhcnRpdGlvbl9pc19hY3RpdmUgKHBhcnQpLCByZXR1cm4gTlVMTCk7CisKKwlvbGRfZ2VvbSA9IHBhcnQtPmdlb207CisJaWYgKCFwZWRfZGlza19tYXhpbWl6ZV9wYXJ0aXRpb24gKGRpc2ssIHBhcnQsIGNvbnN0cmFpbnQpKQorCQlyZXR1cm4gTlVMTDsKKwltYXhfZ2VvbSA9IHBlZF9nZW9tZXRyeV9kdXBsaWNhdGUgKCZwYXJ0LT5nZW9tKTsKKworCWNvbnN0cmFpbnRfZXhhY3QgPSBwZWRfY29uc3RyYWludF9leGFjdCAoJm9sZF9nZW9tKTsKKwlwZWRfZGlza19zZXRfcGFydGl0aW9uX2dlb20gKGRpc2ssIHBhcnQsIGNvbnN0cmFpbnRfZXhhY3QsCisJCQkJICAgICBvbGRfZ2VvbS5zdGFydCwgb2xkX2dlb20uZW5kKTsKKwlwZWRfY29uc3RyYWludF9kZXN0cm95IChjb25zdHJhaW50X2V4YWN0KTsKKworCS8qIHRoaXMgYXNzZXJ0aW9uIHNob3VsZCBuZXZlciBmYWlsLCBiZWNhdXNlIHRoZSBvbGQKKwkgKiBnZW9tZXRyeSB3YXMgdmFsaWQKKwkgKi8KKwlQRURfQVNTRVJUIChwZWRfZ2VvbWV0cnlfdGVzdF9lcXVhbCAoJnBhcnQtPmdlb20sICZvbGRfZ2VvbSksCisJCSAgICByZXR1cm4gTlVMTCk7CisKKwlyZXR1cm4gbWF4X2dlb207Cit9CisKKy8qKiAKKyAqIFJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUgZXh0ZW5kZWQgcGFydGl0aW9uIHRvIGEgbWluaW11bSB3aGlsZSBzdGlsbCB3cmFwcGluZworICogaXRzIGxvZ2ljYWwgcGFydGl0aW9ucy4gIElmIHRoZXJlIGFyZSBubyBsb2dpY2FsIHBhcnRpdGlvbnMsIHJlbW92ZSB0aGUKKyAqIGV4dGVuZGVkIHBhcnRpdGlvbi4KKyAqCisgKiBccmV0dXJuIDAgb24gZmFpbHVyZS4KKyAqLworaW50CitwZWRfZGlza19taW5pbWl6ZV9leHRlbmRlZF9wYXJ0aXRpb24gKFBlZERpc2sqIGRpc2spCit7CisJUGVkUGFydGl0aW9uKgkJZmlyc3RfbG9naWNhbDsKKwlQZWRQYXJ0aXRpb24qCQlsYXN0X2xvZ2ljYWw7CisJUGVkUGFydGl0aW9uKgkJd2FsazsKKwlQZWRQYXJ0aXRpb24qCQlleHRfcGFydDsKKwlQZWRDb25zdHJhaW50KgkJY29uc3RyYWludDsKKwlpbnQJCQlzdGF0dXM7CisKKwlQRURfQVNTRVJUIChkaXNrICE9IE5VTEwsIHJldHVybiAwKTsKKworCWV4dF9wYXJ0ID0gcGVkX2Rpc2tfZXh0ZW5kZWRfcGFydGl0aW9uIChkaXNrKTsKKwlpZiAoIWV4dF9wYXJ0KQorCQlyZXR1cm4gMTsKKworCV9kaXNrX3B1c2hfdXBkYXRlX21vZGUgKGRpc2spOworCisJZmlyc3RfbG9naWNhbCA9IGV4dF9wYXJ0LT5wYXJ0X2xpc3Q7CisJaWYgKCFmaXJzdF9sb2dpY2FsKSB7CisJCV9kaXNrX3BvcF91cGRhdGVfbW9kZSAoZGlzayk7CisJCXJldHVybiBwZWRfZGlza19kZWxldGVfcGFydGl0aW9uIChkaXNrLCBleHRfcGFydCk7CisJfQorCisJZm9yICh3YWxrID0gZmlyc3RfbG9naWNhbDsgd2Fsay0+bmV4dDsgd2FsayA9IHdhbGstPm5leHQpOworCWxhc3RfbG9naWNhbCA9IHdhbGs7CisKKwljb25zdHJhaW50ID0gcGVkX2NvbnN0cmFpbnRfYW55IChkaXNrLT5kZXYpOworCXN0YXR1cyA9IHBlZF9kaXNrX3NldF9wYXJ0aXRpb25fZ2VvbSAoZGlzaywgZXh0X3BhcnQsIGNvbnN0cmFpbnQsCisJCQkJCSAgICAgIGZpcnN0X2xvZ2ljYWwtPmdlb20uc3RhcnQsCisJCQkJCSAgICAgIGxhc3RfbG9naWNhbC0+Z2VvbS5lbmQpOworCXBlZF9jb25zdHJhaW50X2Rlc3Ryb3kgKGNvbnN0cmFpbnQpOworCisJX2Rpc2tfcG9wX3VwZGF0ZV9tb2RlIChkaXNrKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIEB9CisgKi8KKworLyoqCisgKiBcYWRkdG9ncm91cCBQZWRQYXJ0aXRpb24KKyAqCisgKiBAeworICovCisKKy8qKgorICogUmV0dXJucyBhIG5hbWUgdGhhdCBzZWVtcyBtaWxkbHkgYXBwcm9wcmlhdGUgZm9yIGEgcGFydGl0aW9uIHR5cGUgXHAgdHlwZS4KKyAqIAorICogRWcsIGlmIHlvdSBwYXNzIChQRURfUEFSVElUSU9OX0xPR0lDQUwgJiBQRURfUEFSVElUSU9OX0ZSRUVTUEFDRSksIGl0CisgKiB3aWxsIHJldHVybiAiZnJlZSIuICBUaGlzIGlzbid0IHRvIGJlIHRha2VuIHRvbyBzZXJpb3VzbHkgLSBpdCdzIGp1c3QKKyAqIHVzZWZ1bCBmb3IgdXNlciBpbnRlcmZhY2VzLCBzbyB5b3UgY2FuIHNob3cgdGhlIHVzZXIgc29tZXRoaW5nIDstKQorICogCisgKiBcbm90ZSBUaGUgcmV0dXJuZWQgc3RyaW5nIHdpbGwgYmUgaW4gRW5nbGlzaC4gIEhvd2V2ZXIsCisgKiB0cmFuc2xhdGlvbnMgYXJlIHByb3ZpZGVkLCBzbyB0aGUgY2FsbGVyIGNhbiBjYWxsCisgKiBkZ2V0dGV4dCgicGFydGVkIiwgUkVTVUxUKSBvbiB0aGUgcmVzdWx0LgorICoKKyAqLworY29uc3QgY2hhcioKK3BlZF9wYXJ0aXRpb25fdHlwZV9nZXRfbmFtZSAoUGVkUGFydGl0aW9uVHlwZSB0eXBlKQoreworCWlmICh0eXBlICYgUEVEX1BBUlRJVElPTl9NRVRBREFUQSkKKwkJcmV0dXJuIE5fKCJtZXRhZGF0YSIpOworCWVsc2UgaWYgKHR5cGUgJiBQRURfUEFSVElUSU9OX0ZSRUVTUEFDRSkKKwkJcmV0dXJuIE5fKCJmcmVlIik7CisJZWxzZSBpZiAodHlwZSAmIFBFRF9QQVJUSVRJT05fRVhURU5ERUQpCisJCXJldHVybiBOXygiZXh0ZW5kZWQiKTsKKwllbHNlIGlmICh0eXBlICYgUEVEX1BBUlRJVElPTl9MT0dJQ0FMKQorCQlyZXR1cm4gTl8oImxvZ2ljYWwiKTsKKwllbHNlCisJCXJldHVybiBOXygicHJpbWFyeSIpOworfQorCisKKy8qKgorICogUmV0dXJucyBhIG5hbWUgZm9yIGEgXHAgZmxhZywgZS5nLiBQRURfUEFSVElUSU9OX0JPT1Qgd2lsbCByZXR1cm4gImJvb3QiLgorICogCisgKiBcbm90ZSBUaGUgcmV0dXJuZWQgc3RyaW5nIHdpbGwgYmUgaW4gRW5nbGlzaC4gIEhvd2V2ZXIsCisgKiB0cmFuc2xhdGlvbnMgYXJlIHByb3ZpZGVkLCBzbyB0aGUgY2FsbGVyIGNhbiBjYWxsCisgKiBkZ2V0dGV4dCgicGFydGVkIiwgUkVTVUxUKSBvbiB0aGUgcmVzdWx0LgorICovCitjb25zdCBjaGFyKgorcGVkX3BhcnRpdGlvbl9mbGFnX2dldF9uYW1lIChQZWRQYXJ0aXRpb25GbGFnIGZsYWcpCit7CisJc3dpdGNoIChmbGFnKSB7CisJY2FzZSBQRURfUEFSVElUSU9OX0JPT1Q6CisJCXJldHVybiBOXygiYm9vdCIpOworCWNhc2UgUEVEX1BBUlRJVElPTl9ST09UOgorCQlyZXR1cm4gTl8oInJvb3QiKTsKKwljYXNlIFBFRF9QQVJUSVRJT05fU1dBUDoKKwkJcmV0dXJuIE5fKCJzd2FwIik7CisJY2FzZSBQRURfUEFSVElUSU9OX0hJRERFTjoKKwkJcmV0dXJuIE5fKCJoaWRkZW4iKTsKKwljYXNlIFBFRF9QQVJUSVRJT05fUkFJRDoKKwkJcmV0dXJuIE5fKCJyYWlkIik7CisJY2FzZSBQRURfUEFSVElUSU9OX0xWTToKKwkJcmV0dXJuIE5fKCJsdm0iKTsKKwljYXNlIFBFRF9QQVJUSVRJT05fTEJBOgorCQlyZXR1cm4gTl8oImxiYSIpOworCWNhc2UgUEVEX1BBUlRJVElPTl9IUFNFUlZJQ0U6CisJCXJldHVybiBOXygiaHAtc2VydmljZSIpOworCWNhc2UgUEVEX1BBUlRJVElPTl9QQUxPOgorCQlyZXR1cm4gTl8oInBhbG8iKTsKKwljYXNlIFBFRF9QQVJUSVRJT05fUFJFUDoKKwkJcmV0dXJuIE5fKCJwcmVwIik7CisJY2FzZSBQRURfUEFSVElUSU9OX01TRlRfUkVTRVJWRUQ6CisJCXJldHVybiBOXygibXNmdHJlcyIpOworCisJZGVmYXVsdDoKKwkJcGVkX2V4Y2VwdGlvbl90aHJvdyAoCisJCQlQRURfRVhDRVBUSU9OX0JVRywKKwkJCVBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJXygiVW5rbm93biBwYXJ0aXRpb24gZmxhZywgJWQuIiksCisJCQlmbGFnKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorfQorCisvKioKKyAqIEl0ZXJhdGVzIHRocm91Z2ggYWxsIGZsYWdzLiAKKyAqIAorICogcGVkX3BhcnRpdGlvbl9mbGFnX25leHQoMCkgcmV0dXJucyB0aGUgZmlyc3QgZmxhZworICoKKyAqIFxyZXR1cm4gdGhlIG5leHQgZmxhZywgb3IgMCBpZiB0aGVyZSBhcmUgbm8gbW9yZSBmbGFncworICovCitQZWRQYXJ0aXRpb25GbGFnCitwZWRfcGFydGl0aW9uX2ZsYWdfbmV4dCAoUGVkUGFydGl0aW9uRmxhZyBmbGFnKQoreworCXJldHVybiAoZmxhZyArIDEpICUgKFBFRF9QQVJUSVRJT05fTEFTVF9GTEFHICsgMSk7Cit9CisKKy8qKgorICogUmV0dXJucyB0aGUgZmxhZyBhc3NvY2lhdGVkIHdpdGggXHAgbmFtZS4gIAorICoKKyAqIFxwIG5hbWUgY2FuIGJlIHRoZSBFbmdsaXNoCisgKiBzdHJpbmcsIG9yIHRoZSB0cmFuc2xhdGlvbiBmb3IgdGhlIG5hdGl2ZSBsYW5ndWFnZS4KKyAqLworUGVkUGFydGl0aW9uRmxhZworcGVkX3BhcnRpdGlvbl9mbGFnX2dldF9ieV9uYW1lIChjb25zdCBjaGFyKiBuYW1lKQoreworCVBlZFBhcnRpdGlvbkZsYWcJZmxhZzsKKwljb25zdCBjaGFyKgkJZmxhZ19uYW1lOworCisJZm9yIChmbGFnID0gcGVkX3BhcnRpdGlvbl9mbGFnX25leHQgKDApOyBmbGFnOworCSAgICAgCQlmbGFnID0gcGVkX3BhcnRpdGlvbl9mbGFnX25leHQgKGZsYWcpKSB7CisJCWZsYWdfbmFtZSA9IHBlZF9wYXJ0aXRpb25fZmxhZ19nZXRfbmFtZSAoZmxhZyk7CisJCWlmIChzdHJjYXNlY21wIChuYW1lLCBmbGFnX25hbWUpID09IDAKKwkJICAgIHx8IHN0cmNhc2VjbXAgKG5hbWUsIF8oZmxhZ19uYW1lKSkgPT0gMCkKKwkJCXJldHVybiBmbGFnOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorcGVkX3BhcnRpdGlvbl9wcmludCAoY29uc3QgUGVkUGFydGl0aW9uKiBwYXJ0KQoreworCVBFRF9BU1NFUlQgKHBhcnQgIT0gTlVMTCwgcmV0dXJuKTsKKworCXByaW50ZiAoIiAgJS0xMHMgJTAyZCAgKCVkLT4lZClcbiIsCisJCXBlZF9wYXJ0aXRpb25fdHlwZV9nZXRfbmFtZSAocGFydC0+dHlwZSksCisJCXBhcnQtPm51bSwKKwkJKGludCkgcGFydC0+Z2VvbS5zdGFydCwgKGludCkgcGFydC0+Z2VvbS5lbmQpOworfQorCisvKiogQH0gKi8KKworLyoqCisgKiBcYWRkdG9ncm91cCBQZWREaXNrCisgKgorICogQHsKKyAqLworCisvKioKKyAqIFByaW50cyBhIHN1bW1hcnkgb2YgZGlzaydzIHBhcnRpdGlvbnMuICBVc2VmdWwgZm9yIGRlYnVnZ2luZy4KKyAqLwordm9pZAorcGVkX2Rpc2tfcHJpbnQgKGNvbnN0IFBlZERpc2sqIGRpc2spCit7CisJUGVkUGFydGl0aW9uKglwYXJ0OworCisJUEVEX0FTU0VSVCAoZGlzayAhPSBOVUxMLCByZXR1cm4pOworCisJZm9yIChwYXJ0ID0gZGlzay0+cGFydF9saXN0OyBwYXJ0OworCSAgICAgcGFydCA9IHBlZF9kaXNrX25leHRfcGFydGl0aW9uIChkaXNrLCBwYXJ0KSkKKwkJcGVkX3BhcnRpdGlvbl9wcmludCAocGFydCk7Cit9CisKKy8qKiBAfSAqLwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9leGNlcHRpb24uYyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZXhjZXB0aW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDEwOTIwOQotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZXhjZXB0aW9uLmMKQEAgLTAsMCArMSwzMTMgQEAKKy8qCisgICAgbGlicGFydGVkIC0gYSBsaWJyYXJ5IGZvciBtYW5pcHVsYXRpbmcgZGlzayBwYXJ0aXRpb25zCisgICAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQorKi8KKworLyoqIFxmaWxlIGV4Y2VwdGlvbi5jICovCisKKy8qKgorICogXGFkZHRvZ3JvdXAgUGVkRXhjZXB0aW9uCisgKgorICogXGJyaWVmIEV4Y2VwdGlvbiBoYW5kbGluZy4KKyAqIAorICogVGhlcmUgYXJlIGEgZmV3IHR5cGVzIG9mIGV4Y2VwdGlvbnM6IFBFRF9FWENFUFRJT05fSU5GT1JNQVRJT04sCisgKiBQRURfRVhDRVBUSU9OX1dBUk5JTkcsIFBFRF9FWENFUFRJT05fRVJST1IsIFBFRF9FWENFUFRJT05fRkFUQUwsCisgKiBQRURfRVhDRVBUSU9OX0JVRy4KKyAqCisgKiBUaGV5IGFyZSAidGhyb3duIiB3aGVuIG9uZSBvZiB0aGUgYWJvdmUgZXZlbnRzIG9jY3VyIHdoaWxlIGV4ZWN1dGluZworICogYSBsaWJwYXJ0ZWQgZnVuY3Rpb24uIEZvciBleGFtcGxlLCBpZiBwZWRfZGV2aWNlX29wZW4oKSBmYWlscworICogYmVjYXVzZSB0aGUgZGV2aWNlIGRvZXNuJ3QgZXhpc3QsIGFuIGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93bi4KKyAqIEV4Y2VwdGlvbnMgY29udGFpbiB0ZXh0IGRlc2NyaWJpbmcgd2hhdCB0aGUgZXZlbnQgd2FzLiBJdCB3aWxsIGdpdmUKKyAqIGF0IGxlYXN0IG9uZSBvcHRpb24gZm9yIHJlc29sdmluZyB0aGUgZXhjZXB0aW9uOiBQRURfRVhDRVBUSU9OX0ZJWCwKKyAqIFBFRF9FWENFUFRJT05fWUVTLCBQRURfRVhDRVBUSU9OX05PLCBQRURfRVhDRVBUSU9OX09LLCBQRURfRVhDRVBUSU9OX1JFVFJZLAorICogUEVEX0VYQ0VQVElPTl9JR05PUkUsIFBFRF9FWENFUFRJT05fQ0FOQ0VMLiBBZnRlciBhbiBleGNlcHRpb24gaXMgdGhyb3duLAorICogdGhlcmUgYXJlIHR3byB0aGluZ3MgdGhhdCBjYW4gaGFwcGVuOgorICoKKyAqIC0jIGFuIGV4Y2VwdGlvbiBoYW5kbGVyIGlzIGNhbGxlZCwgd2hpY2ggc2VsZWN0cyBob3cgdGhlIGV4Y2VwdGlvbiBzaG91bGQgYmUKKyAqICAgIHJlc29sdmVkICh1c3VhbGx5IGJ5IGFza2luZyB0aGUgdXNlcikuIEFsc28gbm90ZTogYW4gZXhjZXB0aW9uIGhhbmRsZXIgbWF5CisgKiAgICBjaG9vc2UgdG8gcmV0dXJuIFBFRF9FWENFUFRJT05fVU5IQU5ETEVELiBJbiB0aGlzIGNhc2UsIGEgZGVmYXVsdCBhY3Rpb24KKyAqICAgIHdpbGwgYmUgdGFrZW4gYnkgbGlicGFydGVkIChyZXNwZWN0aXZlbHkgdGhlIGNvZGUgdGhhdCB0aHJldyB0aGUKKyAqICAgIGV4Y2VwdGlvbikuIEluIGdlbmVyYWwsIGEgZGVmYXVsdCBhY3Rpb24gd2lsbCBiZSAic2FmZSIuCisgKiAtIyB0aGUgZXhjZXB0aW9uIGlzIG5vdCBoYW5kbGVkLCBiZWNhdXNlIHRoZSBjYWxsZXIgb2YgdGhlIGZ1bmN0aW9uIHdhbnRzIHRvCisgKiAgICBoYW5kbGUgZXZlcnl0aGluZyBpdHNlbGYuIEluIHRoaXMgY2FzZSwgUEVEX0VYQ0VQVElPTl9VTkhBTkRMRUQgaXMKKyAqICAgIHJldHVybmVkLgorICoKKyAqIEB7CisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaW5jbHVkZSA8cGFydGVkL3BhcnRlZC5oPgorI2luY2x1ZGUgPHBhcnRlZC9kZWJ1Zy5oPgorCisjZGVmaW5lIE5fKFN0cmluZykgU3RyaW5nCisjaWYgRU5BQkxFX05MUworIyAgaW5jbHVkZSA8bGliaW50bC5oPgorIyAgZGVmaW5lIF8oU3RyaW5nKSBkZ2V0dGV4dCAoUEFDS0FHRSwgU3RyaW5nKQorI2Vsc2UKKyMgIGRlZmluZSBfKFN0cmluZykgKFN0cmluZykKKyNlbmRpZiAvKiBFTkFCTEVfTkxTICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitpbnQJCQkJcGVkX2V4Y2VwdGlvbiA9IDA7CisKK3N0YXRpYyBQZWRFeGNlcHRpb25PcHRpb24gZGVmYXVsdF9oYW5kbGVyIChQZWRFeGNlcHRpb24qIGV4KTsKKworc3RhdGljIFBlZEV4Y2VwdGlvbkhhbmRsZXIqCWV4X2hhbmRsZXIgPSBkZWZhdWx0X2hhbmRsZXI7CitzdGF0aWMgUGVkRXhjZXB0aW9uKgkJZXggPSBOVUxMOworc3RhdGljIGludAkJCWV4X2ZldGNoX2NvdW50ID0gMDsKKworc3RhdGljIGNoYXIqCXR5cGVfc3RyaW5ncyBbXSA9IHsKKwlOXygiSW5mb3JtYXRpb24iKSwKKwlOXygiV2FybmluZyIpLAorCU5fKCJFcnJvciIpLAorCU5fKCJGYXRhbCIpLAorCU5fKCJCdWciKSwKKwlOXygiTm8gSW1wbGVtZW50YXRpb24iKQorfTsKKworc3RhdGljIGNoYXIqCW9wdGlvbl9zdHJpbmdzIFtdID0geworCU5fKCJGaXgiKSwKKwlOXygiWWVzIiksCisJTl8oIk5vIiksCisJTl8oIk9LIiksCisJTl8oIlJldHJ5IiksCisJTl8oIklnbm9yZSIpLAorCU5fKCJDYW5jZWwiKQorfTsKKworLyoqCisgKiAgUmV0dXJuIGEgc3RyaW5nIGRlc2NyaWJpbmcgYW4gZXhjZXB0aW9uIHR5cGUuCisgKi8KK2NoYXIqCitwZWRfZXhjZXB0aW9uX2dldF90eXBlX3N0cmluZyAoUGVkRXhjZXB0aW9uVHlwZSBleF90eXBlKQoreworCXJldHVybiB0eXBlX3N0cmluZ3MgW2V4X3R5cGUgLSAxXTsKK30KKworLyogRklYTUU6IG1vdmUgdGhpcyBvdXQgdG8gdGhlIHByb3NwZWN0aXZlIG1hdGguYyAqLworLyogRklYTUU6IHRoaXMgY2FuIHByb2JhYmx5IGJlIGRvbmUgbW9yZSBlZmZpY2llbnRseSAqLworc3RhdGljIGludAorcGVkX2xvZzIgKGludCBuKQoreworCWludCB4OworCisgICAgICAgIFBFRF9BU1NFUlQgKG4gPiAwLCByZXR1cm4gLTEpOworCisJZm9yICh4PTA7IDEgPDwgeCA8PSBuOyB4KyspOworCisJcmV0dXJuIHggLSAxOworfQorCisvKioKKyAqIFJldHVybiBhIHN0cmluZyBkZXNjcmliaW5nIGFuIGV4Y2VwdGlvbiBvcHRpb24uCisgKi8KK2NoYXIqCitwZWRfZXhjZXB0aW9uX2dldF9vcHRpb25fc3RyaW5nIChQZWRFeGNlcHRpb25PcHRpb24gZXhfb3B0KQoreworCXJldHVybiBvcHRpb25fc3RyaW5ncyBbcGVkX2xvZzIgKGV4X29wdCldOworfQorCitzdGF0aWMgUGVkRXhjZXB0aW9uT3B0aW9uCitkZWZhdWx0X2hhbmRsZXIgKFBlZEV4Y2VwdGlvbiogZSkKK3sKKwlpZiAoZS0+dHlwZSA9PSBQRURfRVhDRVBUSU9OX0JVRykKKwkJZnByaW50ZiAoc3RkZXJyLAorCQkJXygiQSBidWcgaGFzIGJlZW4gZGV0ZWN0ZWQgaW4gR05VIFBhcnRlZC4gICIKKwkJCSJSZWZlciB0byB0aGUgd2ViIHNpdGUgb2YgcGFydGVkICIKKwkJCSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvcGFydGVkL3BhcnRlZC5odG1sICIKKwkJCSJmb3IgbW9yZSBpbmZvcm1hdGlvbnMgb2Ygd2hhdCBjb3VsZCBiZSB1c2VmdWwgIgorCQkJImZvciBidWcgc3VibWl0dGluZyEgICIKKwkJCSJQbGVhc2UgZW1haWwgYSBidWcgcmVwb3J0IHRvICIKKwkJCSJidWctcGFydGVkQGdudS5vcmcgY29udGFpbmluZyBhdCBsZWFzdCB0aGUgIgorCQkJInZlcnNpb24gKCVzKSBhbmQgdGhlIGZvbGxvd2luZyBtZXNzYWdlOiAgIiksCisJCQlWRVJTSU9OKTsKKwllbHNlCisJCWZwcmludGYgKHN0ZGVyciwgIiVzOiAiLAorCQkJIHBlZF9leGNlcHRpb25fZ2V0X3R5cGVfc3RyaW5nIChlLT50eXBlKSk7CisJZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIGUtPm1lc3NhZ2UpOworCisJc3dpdGNoIChlLT5vcHRpb25zKSB7CisJCWNhc2UgUEVEX0VYQ0VQVElPTl9PSzoKKwkJY2FzZSBQRURfRVhDRVBUSU9OX0NBTkNFTDoKKwkJY2FzZSBQRURfRVhDRVBUSU9OX0lHTk9SRToKKwkJCXJldHVybiBlLT5vcHRpb25zOworCisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gUEVEX0VYQ0VQVElPTl9VTkhBTkRMRUQ7CisJfQorfQorCisvKioKKyAqIFNldCB0aGUgZXhjZXB0aW9uIGhhbmRsZXIuCisgKgorICogVGhlIGV4Y2VwdGlvbiBoYW5kbGVyIHNob3VsZCByZXR1cm4gT05FIG9mIHRoZSBvcHRpb25zIHNldCBpbiBleC0+b3B0aW9ucywKKyAqIGluZGljYXRpbmcgdGhlIHdheSB0aGUgZXZlbnQgc2hvdWxkIGJlIHJlc29sdmVkLgorICovCit2b2lkCitwZWRfZXhjZXB0aW9uX3NldF9oYW5kbGVyIChQZWRFeGNlcHRpb25IYW5kbGVyKiBoYW5kbGVyKQoreworCWlmIChoYW5kbGVyKQorCQlleF9oYW5kbGVyID0gaGFuZGxlcjsKKwllbHNlCisJCWV4X2hhbmRsZXIgPSBkZWZhdWx0X2hhbmRsZXI7Cit9CisKKy8qKgorICogR2V0IHRoZSBjdXJyZW50IGV4Y2VwdGlvbiBoYW5kbGVyLgorICovCitQZWRFeGNlcHRpb25IYW5kbGVyICoKK3BlZF9leGNlcHRpb25fZ2V0X2hhbmRsZXIgKHZvaWQpCit7CisJaWYgKGV4X2hhbmRsZXIpCisJCXJldHVybiBleF9oYW5kbGVyOworCXJldHVybiBkZWZhdWx0X2hhbmRsZXI7Cit9CisKKy8qKgorICogQXNzZXJ0IHRoYXQgdGhlIGN1cnJlbnQgZXhjZXB0aW9uIGhhcyBiZWVuIHJlc29sdmVkLgorICovCit2b2lkCitwZWRfZXhjZXB0aW9uX2NhdGNoICgpCit7CisJaWYgKHBlZF9leGNlcHRpb24pIHsKKwkJcGVkX2V4Y2VwdGlvbiA9IDA7CisKKwkJcGVkX2ZyZWUgKGV4LT5tZXNzYWdlKTsKKwkJcGVkX2ZyZWUgKGV4KTsKKwkJZXggPSBOVUxMOworCX0KK30KKworc3RhdGljIFBlZEV4Y2VwdGlvbk9wdGlvbgorZG9fdGhyb3cgKCkKK3sKKwlQZWRFeGNlcHRpb25PcHRpb24JZXhfb3B0OworCisJcGVkX2V4Y2VwdGlvbiA9IDE7CisKKwlpZiAoZXhfZmV0Y2hfY291bnQpIHsKKwkJcmV0dXJuIFBFRF9FWENFUFRJT05fVU5IQU5ETEVEOworCX0gZWxzZSB7CisJCWV4X29wdCA9IGV4X2hhbmRsZXIgKGV4KTsKKwkJcGVkX2V4Y2VwdGlvbl9jYXRjaCAoKTsKKwkJcmV0dXJuIGV4X29wdDsKKwl9Cit9CisKKy8qKgorICogVGhyb3cgYW4gZXhjZXB0aW9uLgorICoKKyAqIFlvdSBjYW4gYWxzbyB1c2UgdGhpcyBpbiBhIHByb2dyYW0gdXNpbmcgbGlicGFydGVkLgorICogIm1lc3NhZ2UiIGlzIGEgcHJpbnRmLWxpa2UgZm9ybWF0IHN0cmluZywgc28geW91IGNhbiBkbyAKKyAqCisgKiBcY29kZQorICogcGVkX2V4Y2VwdGlvbl90aHJvdyAoUEVEX0VYQ0VQVElPTl9FUlJPUiwgUEVEX0VYQ0VQVElPTl9SRVRSWV9DQU5DRUwsCisgKiAgICAgICJDYW4ndCBvcGVuICVzIiwgZmlsZV9uYW1lKTsKKyAqIFxlbmRjb2RlCisgKgorICogUmV0dXJucyB0aGUgb3B0aW9uIHNlbGVjdGVkIHRvIHJlc29sdmUgdGhlIGV4Y2VwdGlvbi4gSWYgdGhlIGV4Y2VwdGlvbiB3YXMKKyAqIHVuaGFuZGxlZCwgUEVEX0VYQ0VQVElPTl9VTkhBTkRMRUQgaXMgcmV0dXJuZWQuCisgKi8KK1BlZEV4Y2VwdGlvbk9wdGlvbgorcGVkX2V4Y2VwdGlvbl90aHJvdyAoUGVkRXhjZXB0aW9uVHlwZSBleF90eXBlLAorCQkgICAgIFBlZEV4Y2VwdGlvbk9wdGlvbiBleF9vcHRzLCBjb25zdCBjaGFyKiBtZXNzYWdlLCAuLi4pCit7CisJdmFfbGlzdAkJYXJnX2xpc3Q7CisJaW50IHJlc3VsdDsKKwlzdGF0aWMgaW50IHNpemUgPSAxMDAwOworCisJaWYgKGV4KQorCQlwZWRfZXhjZXB0aW9uX2NhdGNoICgpOworCisJZXggPSAoUGVkRXhjZXB0aW9uKikgbWFsbG9jIChzaXplb2YgKFBlZEV4Y2VwdGlvbikpOworCWlmICghZXgpCisJCWdvdG8gbm9fbWVtb3J5OworCisJZXgtPnR5cGUgPSBleF90eXBlOworCWV4LT5vcHRpb25zID0gZXhfb3B0czsKKworCXdoaWxlICgxKSB7CisJCQlleC0+bWVzc2FnZSA9IChjaGFyKikgbWFsbG9jIChzaXplKTsKKwkJCWlmICghZXgtPm1lc3NhZ2UpCisJCQkJCWdvdG8gbm9fbWVtb3J5OworCisJCQl2YV9zdGFydCAoYXJnX2xpc3QsIG1lc3NhZ2UpOworCQkJcmVzdWx0ID0gdnNucHJpbnRmIChleC0+bWVzc2FnZSwgc2l6ZSwgbWVzc2FnZSwgYXJnX2xpc3QpOworCQkJdmFfZW5kIChhcmdfbGlzdCk7CisKKwkJCWlmIChyZXN1bHQgPiAtMSAmJiByZXN1bHQgPCBzaXplKQorCQkJCQlicmVhazsKKworCQkJc2l6ZSArPSAxMDsKKwl9CisKKwlyZXR1cm4gZG9fdGhyb3cgKCk7CisKK25vX21lbW9yeToKKwlmcHV0cyAoIk91dCBvZiBtZW1vcnkgaW4gZXhjZXB0aW9uIGhhbmRsZXIhXG4iLCBzdGRlcnIpOworCisJdmFfc3RhcnQgKGFyZ19saXN0LCBtZXNzYWdlKTsKKwl2ZnByaW50ZiAoc3RkZXJyLCBtZXNzYWdlLCBhcmdfbGlzdCk7CisJdmFfZW5kIChhcmdfbGlzdCk7CisKKwlyZXR1cm4gUEVEX0VYQ0VQVElPTl9VTkhBTkRMRUQ7Cit9CisKKy8qKgorICogUmV0aHJvdyBhbiB1bmhhbmRsZWQgZXhjZXB0aW9uLgorICogVGhpcyBtZWFucyByZXBlYXRpbmcgdGhlIGxhc3QgcGVkX2V4Y2VwdGlvbl90aHJvdygpIHN0YXRlbWVudC4KKyAqLworUGVkRXhjZXB0aW9uT3B0aW9uCitwZWRfZXhjZXB0aW9uX3JldGhyb3cgKCkKK3sKKwlyZXR1cm4gZG9fdGhyb3cgKCk7Cit9CisKKy8qKgorICogSW5kaWNhdGVzIHRoYXQgZXhjZXB0aW9ucyBzaG91bGQgbm90IGdvIHRvIHRoZSBleGNlcHRpb24gaGFuZGxlciwgYnV0CisgKiBwYXNzZWQgdXAgdG8gdGhlIGNhbGxpbmcgZnVuY3Rpb24ocykuICBBbGwgY2FsbHMgdG8KKyAqIHBlZF9leGNlcHRpb25fdGhyb3coKSB3aWxsIHJldHVybiBQRURfRVhDRVBUSU9OX1VOSEFORExFRC4KKyAqLwordm9pZAorcGVkX2V4Y2VwdGlvbl9mZXRjaF9hbGwgKCkKK3sKKwlleF9mZXRjaF9jb3VudCsrOworfQorCisvKioKKyAqIEluZGljYXRlcyB0aGF0IHRoZSBjYWxsaW5nIGZ1bmN0aW9uIGRvZXMgbm90IHdhbnQgdG8gYWNjZXB0IGFueQorICogcmVzcG9uc2liaWxpdHkgZm9yIGV4Y2VwdGlvbnMgYW55IG1vcmUuCisgKgorICogXG5vdGUgYSBjYWxsZXIgb2YgdGhhdCBmdW5jdGlvbiBtYXkgc3RpbGwgd2FudCByZXNwb25zaWJpbGl0eSwgc28KKyAqICAgICAgcGVkX2V4Y2VwdGlvbl90aHJvdygpIG1heSBub3QgaW52b2tlIHRoZSBleGNlcHRpb24gaGFuZGxlci4KKyAqCisgKiBcd2FybmluZyBldmVyeSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24gbXVzdCBoYXZlIGEgcHJlY2VkaW5nCisgKiAgICAgIHBlZF9leGNlcHRpb25fZmV0Y2hfYWxsKCkuCisgKi8KK3ZvaWQKK3BlZF9leGNlcHRpb25fbGVhdmVfYWxsICgpCit7CisJUEVEX0FTU0VSVCAoZXhfZmV0Y2hfY291bnQgPiAwLCByZXR1cm4pOworCWV4X2ZldGNoX2NvdW50LS07Cit9CisKKy8qKiBAfSAqLworCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZpbGVzeXMuYyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZmlsZXN5cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZjI3N2MKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZpbGVzeXMuYwpAQCAtMCwwICsxLDc4MyBAQAorLyoKKyAgICBsaWJwYXJ0ZWQgLSBhIGxpYnJhcnkgZm9yIG1hbmlwdWxhdGluZyBkaXNrIHBhcnRpdGlvbnMKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDEsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCisqLworCisvKiogXGZpbGUgZmlsZXN5cy5jICovCisKKy8qKgorICogXGFkZHRvZ3JvdXAgUGVkRmlsZVN5c3RlbQorICoKKyAqIFxub3RlIEZpbGUgc3lzdGVtcyBleGlzdCBvbiBhIFBlZEdlb21ldHJ5IC0gTk9UIGEgUGVkUGFydGl0aW9uLgorICoKKyAqIEB7CisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaW5jbHVkZSA8cGFydGVkL3BhcnRlZC5oPgorI2luY2x1ZGUgPHBhcnRlZC9kZWJ1Zy5oPgorCisjaWYgRU5BQkxFX05MUworIyAgaW5jbHVkZSA8bGliaW50bC5oPgorIyAgZGVmaW5lIF8oU3RyaW5nKSBkZ2V0dGV4dCAoUEFDS0FHRSwgU3RyaW5nKQorI2Vsc2UKKyMgIGRlZmluZSBfKFN0cmluZykgKFN0cmluZykKKyNlbmRpZiAvKiBFTkFCTEVfTkxTICovCisKKyNkZWZpbmUgQlVGRkVSX1NJWkUJNDA5NgkJLyogaW4gc2VjdG9ycyAqLworCitzdGF0aWMgUGVkRmlsZVN5c3RlbVR5cGUqCWZzX3R5cGVzID0gTlVMTDsKKwordm9pZAorcGVkX2ZpbGVfc3lzdGVtX3R5cGVfcmVnaXN0ZXIgKFBlZEZpbGVTeXN0ZW1UeXBlKiBmc190eXBlKQoreworCVBFRF9BU1NFUlQgKGZzX3R5cGUgIT0gTlVMTCwgcmV0dXJuKTsKKwlQRURfQVNTRVJUIChmc190eXBlLT5vcHMgIT0gTlVMTCwgcmV0dXJuKTsKKwlQRURfQVNTRVJUIChmc190eXBlLT5uYW1lICE9IE5VTEwsIHJldHVybik7CisJCisJLyogcHJldGVuZCB0aGF0ICJuZXh0IiBpc24ndCBwYXJ0IG9mIHRoZSBzdHJ1Y3QgOi0pICovCisJKChzdHJ1Y3QgX1BlZEZpbGVTeXN0ZW1UeXBlKikgZnNfdHlwZSktPm5leHQgPSBmc190eXBlczsKKwlmc190eXBlcyA9IChzdHJ1Y3QgX1BlZEZpbGVTeXN0ZW1UeXBlKikgZnNfdHlwZTsKK30KKwordm9pZAorcGVkX2ZpbGVfc3lzdGVtX3R5cGVfdW5yZWdpc3RlciAoUGVkRmlsZVN5c3RlbVR5cGUqIGZzX3R5cGUpCit7CisJUGVkRmlsZVN5c3RlbVR5cGUqCXdhbGs7CisJUGVkRmlsZVN5c3RlbVR5cGUqCWxhc3QgPSBOVUxMOworCisJUEVEX0FTU0VSVCAoZnNfdHlwZXMgIT0gTlVMTCwgcmV0dXJuKTsKKwlQRURfQVNTRVJUIChmc190eXBlICE9IE5VTEwsIHJldHVybik7CisKKwlmb3IgKHdhbGsgPSBmc190eXBlczsgd2FsayAmJiB3YWxrICE9IGZzX3R5cGU7CisgICAgICAgICAgICAgICAgbGFzdCA9IHdhbGssIHdhbGsgPSB3YWxrLT5uZXh0KTsKKworCVBFRF9BU1NFUlQgKHdhbGsgIT0gTlVMTCwgcmV0dXJuKTsKKwlpZiAobGFzdCkKKwkJKChzdHJ1Y3QgX1BlZEZpbGVTeXN0ZW1UeXBlKikgbGFzdCktPm5leHQgPSBmc190eXBlLT5uZXh0OworCWVsc2UKKwkJZnNfdHlwZXMgPSBmc190eXBlLT5uZXh0OwkKK30KKworLyoqCisgKiBHZXQgYSBQZWRGaWxlU3lzdGVtVHlwZSBieSBpdHMgQHAgbmFtZS4KKyAqCisgKiBAcmV0dXJuIEBjIE5VTEwgaWYgbm9uZSBmb3VuZC4KKyAqLworUGVkRmlsZVN5c3RlbVR5cGUqCitwZWRfZmlsZV9zeXN0ZW1fdHlwZV9nZXQgKGNvbnN0IGNoYXIqIG5hbWUpCit7CisJUGVkRmlsZVN5c3RlbVR5cGUqCXdhbGs7CisKKwlQRURfQVNTRVJUIChuYW1lICE9IE5VTEwsIHJldHVybiBOVUxMKTsKKworCWZvciAod2FsayA9IGZzX3R5cGVzOyB3YWxrICE9IE5VTEw7IHdhbGsgPSB3YWxrLT5uZXh0KSB7CisJCWlmICghc3RyY2FzZWNtcCAod2Fsay0+bmFtZSwgbmFtZSkpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIHdhbGs7Cit9CisKKy8qKgorICogR2V0IHRoZSBuZXh0IFBlZEZpbGVTeXN0ZW1UeXBlIGFmdGVyIEBwIGZzX3R5cGUuCisgKgorICogQHJldHVybiBAYyBOVUxMIGlmIEBwIGZzX3R5cGUgaXMgdGhlIGxhc3QgaXRlbSBpbiB0aGUgbGlzdC4KKyAqLworUGVkRmlsZVN5c3RlbVR5cGUqCitwZWRfZmlsZV9zeXN0ZW1fdHlwZV9nZXRfbmV4dCAoY29uc3QgUGVkRmlsZVN5c3RlbVR5cGUqIGZzX3R5cGUpCit7CisJaWYgKGZzX3R5cGUpCisJCXJldHVybiBmc190eXBlLT5uZXh0OworCWVsc2UKKwkJcmV0dXJuIGZzX3R5cGVzOworfQorCisvKioKKyAqIEF0dGVtcHQgdG8gZmluZCBhIGZpbGUgc3lzdGVtIGFuZCByZXR1cm4gdGhlIHJlZ2lvbiBpdCBvY2N1cGllcy4KKyAqCisgKiBAcGFyYW0gZnNfdHlwZSBUaGUgZmlsZSBzeXN0ZW0gdHlwZSB0byBwcm9iZSBmb3IuCisgKiBAcGFyYW0gZ2VvbSBUaGUgcmVnaW9uIHRvIGJlIHNlYXJjaGVkLgorICoKKyAqIEByZXR1cm4gQHAgTlVMTCBpZiBAcCBmc190eXBlIGZpbGUgc3lzdGVtIHdhc24ndCBkZXRlY3RlZAorICovCitQZWRHZW9tZXRyeSoKK3BlZF9maWxlX3N5c3RlbV9wcm9iZV9zcGVjaWZpYyAoCisJCWNvbnN0IFBlZEZpbGVTeXN0ZW1UeXBlKiBmc190eXBlLCBQZWRHZW9tZXRyeSogZ2VvbSkKK3sKKwlQZWRHZW9tZXRyeSoJcmVzdWx0OworCisJUEVEX0FTU0VSVCAoZnNfdHlwZSAhPSBOVUxMLCByZXR1cm4gTlVMTCk7CisJUEVEX0FTU0VSVCAoZnNfdHlwZS0+b3BzLT5wcm9iZSAhPSBOVUxMLCByZXR1cm4gTlVMTCk7CisJUEVEX0FTU0VSVCAoZ2VvbSAhPSBOVUxMLCByZXR1cm4gTlVMTCk7CisKKwlpZiAoIXBlZF9kZXZpY2Vfb3BlbiAoZ2VvbS0+ZGV2KSkKKwkJcmV0dXJuIDA7CisJcmVzdWx0ID0gZnNfdHlwZS0+b3BzLT5wcm9iZSAoZ2VvbSk7CisJcGVkX2RldmljZV9jbG9zZSAoZ2VvbS0+ZGV2KTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50CitfdGVzdF9vcGVuIChQZWRGaWxlU3lzdGVtVHlwZSogZnNfdHlwZSwgUGVkR2VvbWV0cnkqIGdlb20pCit7CisJUGVkRmlsZVN5c3RlbSoJCWZzOworCisJcGVkX2V4Y2VwdGlvbl9mZXRjaF9hbGwgKCk7CisJZnMgPSBmc190eXBlLT5vcHMtPm9wZW4gKGdlb20pOworCWlmIChmcykKKwkJZnNfdHlwZS0+b3BzLT5jbG9zZSAoZnMpOworCWVsc2UKKwkJcGVkX2V4Y2VwdGlvbl9jYXRjaCAoKTsKKwlwZWRfZXhjZXB0aW9uX2xlYXZlX2FsbCAoKTsKKwlyZXR1cm4gZnMgIT0gTlVMTDsKK30KKworc3RhdGljIFBlZEZpbGVTeXN0ZW1UeXBlKgorX3Byb2JlX3dpdGhfb3BlbiAoUGVkR2VvbWV0cnkqIGdlb20sIGludCBkZXRlY3RlZF9jb3VudCwKKwkJICBQZWRGaWxlU3lzdGVtVHlwZSogZGV0ZWN0ZWRbXSkKK3sKKwlpbnQJCQlpOworCVBlZEZpbGVTeXN0ZW1UeXBlKglvcGVuX2RldGVjdGVkID0gTlVMTDsKKworCXBlZF9kZXZpY2Vfb3BlbiAoZ2VvbS0+ZGV2KTsKKworCS8qIElmIG9uZSBhbmQgb25seSBvbmUgZmlsZSBzeXN0ZW0gdGhhdCBQYXJ0ZWQgaXMgYWJsZSB0byBvcGVuCisJICogY2FuIGJlIHN1Y2Nlc3NmdWxseSBvcGVuZWQgb24gdGhpcyBnZW9tZXRyeSwgcmV0dXJuIGl0LgorCSAqIElmIG1vcmUgdGhhbiBvbmUgY2FuIGJlLCByZXR1cm4gTlVMTC4KKwkgKi8KKwlmb3IgKGk9MDsgaTxkZXRlY3RlZF9jb3VudDsgaSsrKSB7CisJCWlmICghZGV0ZWN0ZWRbaV0tPm9wcy0+b3BlbiB8fCAhX3Rlc3Rfb3BlbiAoZGV0ZWN0ZWQgW2ldLCBnZW9tKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChvcGVuX2RldGVjdGVkKSB7CisJCQlwZWRfZGV2aWNlX2Nsb3NlIChnZW9tLT5kZXYpOworCQkJcmV0dXJuIE5VTEw7CisJCX0gZWxzZSB7CisJCQlvcGVuX2RldGVjdGVkID0gZGV0ZWN0ZWQgW2ldOworCQl9CisJfQorCisJLyogSWYgbm8gZmlsZSBzeXN0ZW0gaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IG9wZW5lZCwgYW5kCisJICogaWYgUGFydGVkIGhhcyBkZXRlY3RlZCBhdCBtb3N0IG9uZSB1bm9wZW5hYmxlIGZpbGUgc3lzdGVtLAorCSAqIHJldHVybiBpdC4KKwkgKi8KKwlpZiAoIW9wZW5fZGV0ZWN0ZWQpCisJZm9yIChpPTA7IGk8ZGV0ZWN0ZWRfY291bnQ7IGkrKykgeworCQlpZiAoZGV0ZWN0ZWRbaV0tPm9wcy0+b3BlbikKKwkJCWNvbnRpbnVlOworCQlpZiAob3Blbl9kZXRlY3RlZCkgeworCQkJcGVkX2RldmljZV9jbG9zZSAoZ2VvbS0+ZGV2KTsKKwkJCXJldHVybiBOVUxMOworCQl9IGVsc2UgeworCQkJb3Blbl9kZXRlY3RlZCA9IGRldGVjdGVkIFtpXTsKKwkJfQorCX0JCisKKwlwZWRfZGV2aWNlX2Nsb3NlIChnZW9tLT5kZXYpOworCXJldHVybiBvcGVuX2RldGVjdGVkOworfQorCitzdGF0aWMgaW50CitfZ2VvbWV0cnlfZXJyb3IgKGNvbnN0IFBlZEdlb21ldHJ5KiBhLCBjb25zdCBQZWRHZW9tZXRyeSogYikKK3sKKwlQZWRTZWN0b3IJc3RhcnRfZGVsdGEgPSBhLT5zdGFydCAtIGItPnN0YXJ0OworCVBlZFNlY3RvcgllbmRfZGVsdGEgPSBhLT5lbmQgLSBiLT5lbmQ7CisKKwlyZXR1cm4gYWJzIChzdGFydF9kZWx0YSkgKyBhYnMgKGVuZF9kZWx0YSk7Cit9CisKK3N0YXRpYyBQZWRGaWxlU3lzdGVtVHlwZSoKK19iZXN0X21hdGNoIChjb25zdCBQZWRHZW9tZXRyeSogZ2VvbSwgUGVkRmlsZVN5c3RlbVR5cGUqIGRldGVjdGVkIFtdLAorCSAgICAgY29uc3QgaW50IGRldGVjdGVkX2Vycm9yIFtdLCBpbnQgZGV0ZWN0ZWRfY291bnQpCit7CisJaW50CQliZXN0X21hdGNoID0gMDsKKwlpbnQJCWk7CisJUGVkU2VjdG9yCW1pbl9lcnJvcjsKKworCW1pbl9lcnJvciA9IFBFRF9NQVggKDQwOTYsIGdlb20tPmxlbmd0aCAvIDEwMCk7CisKKwlmb3IgKGkgPSAxOyBpIDwgZGV0ZWN0ZWRfY291bnQ7IGkrKykgeworCQlpZiAoZGV0ZWN0ZWRfZXJyb3IgW2ldIDwgZGV0ZWN0ZWRfZXJyb3IgW2Jlc3RfbWF0Y2hdKQorCQkJYmVzdF9tYXRjaCA9IGk7CisJfQorCisJLyogbWFrZSBzdXJlIHRoZSBiZXN0IG1hdGNoIGlzIHNpZ25pZmljYW50bHkgYmV0dGVyIHRoYW4gYWxsIHRoZQorCSAqIG90aGVyIG1hdGNoZXMKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZGV0ZWN0ZWRfY291bnQ7IGkrKykgeworCQlpZiAoaSA9PSBiZXN0X21hdGNoKQorCQkJY29udGludWU7CisKKwkJaWYgKGFicyAoZGV0ZWN0ZWRfZXJyb3IgW2Jlc3RfbWF0Y2hdIC0gZGV0ZWN0ZWRfZXJyb3IgW2ldKQorCQkJCTwgbWluX2Vycm9yKQorCQkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuIGRldGVjdGVkIFtiZXN0X21hdGNoXTsKK30KKworCisvKioKKyAqIEF0dGVtcHQgdG8gZGV0ZWN0IGEgZmlsZSBzeXN0ZW0gaW4gcmVnaW9uIFxwIGdlb20uIAorICogVGhpcyBmdW5jdGlvbiB0cmllcyB0byBiZSBjbGV2ZXIgYXQgZGVhbGluZyB3aXRoIGFtYmlndW91cworICogc2l0dWF0aW9ucywgc3VjaCBhcyB3aGVuIG9uZSBmaWxlIHN5c3RlbSB3YXMgbm90IGNvbXBsZXRlbHkgZXJhc2VkIGJlZm9yZSBhCisgKiBuZXcgZmlsZSBzeXN0ZW0gd2FzIGNyZWF0ZWQgb24gdG9wIG9mIGl0LgorICoKKyAqIFxyZXR1cm4gYSBuZXcgUGVkRmlsZVN5c3RlbSBvbiBzdWNjZXNzLCBcYyBOVUxMIG9uIGZhaWx1cmUKKyAqLworUGVkRmlsZVN5c3RlbVR5cGUqCitwZWRfZmlsZV9zeXN0ZW1fcHJvYmUgKFBlZEdlb21ldHJ5KiBnZW9tKQoreworCVBlZEZpbGVTeXN0ZW1UeXBlKglkZXRlY3RlZFszMl07CisJaW50CQkJZGV0ZWN0ZWRfZXJyb3JbMzJdOworCWludAkJCWRldGVjdGVkX2NvdW50ID0gMDsKKwlQZWRGaWxlU3lzdGVtVHlwZSoJd2FsayA9IE5VTEw7CisKKwlQRURfQVNTRVJUIChnZW9tICE9IE5VTEwsIHJldHVybiBOVUxMKTsKKworCWlmICghcGVkX2RldmljZV9vcGVuIChnZW9tLT5kZXYpKQorCQlyZXR1cm4gTlVMTDsKKworCXBlZF9leGNlcHRpb25fZmV0Y2hfYWxsICgpOworCXdoaWxlICggKHdhbGsgPSBwZWRfZmlsZV9zeXN0ZW1fdHlwZV9nZXRfbmV4dCAod2FsaykpICkgeworCQlQZWRHZW9tZXRyeSoJcHJvYmVkOworCisJCXByb2JlZCA9IHBlZF9maWxlX3N5c3RlbV9wcm9iZV9zcGVjaWZpYyAod2FsaywgZ2VvbSk7CisJCWlmIChwcm9iZWQpIHsKKwkJCWRldGVjdGVkIFtkZXRlY3RlZF9jb3VudF0gPSB3YWxrOworCQkJZGV0ZWN0ZWRfZXJyb3IgW2RldGVjdGVkX2NvdW50XQorCQkJCT0gX2dlb21ldHJ5X2Vycm9yIChnZW9tLCBwcm9iZWQpOworCQkJZGV0ZWN0ZWRfY291bnQrKzsKKwkJCXBlZF9nZW9tZXRyeV9kZXN0cm95IChwcm9iZWQpOworCQl9IGVsc2UgeworCQkJcGVkX2V4Y2VwdGlvbl9jYXRjaCAoKTsKKwkJfQorCX0KKwlwZWRfZXhjZXB0aW9uX2xlYXZlX2FsbCAoKTsKKworCXBlZF9kZXZpY2VfY2xvc2UgKGdlb20tPmRldik7CisKKwlpZiAoIWRldGVjdGVkX2NvdW50KQorCQlyZXR1cm4gTlVMTDsKKwl3YWxrID0gX2Jlc3RfbWF0Y2ggKGdlb20sIGRldGVjdGVkLCBkZXRlY3RlZF9lcnJvciwgZGV0ZWN0ZWRfY291bnQpOworCWlmICh3YWxrKQorCQlyZXR1cm4gd2FsazsKKwlyZXR1cm4gX3Byb2JlX3dpdGhfb3BlbiAoZ2VvbSwgZGV0ZWN0ZWRfY291bnQsIGRldGVjdGVkKTsKK30KKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGVyYXNlcyBhbGwgZmlsZSBzeXN0ZW0gc2lnbmF0dXJlcyB0aGF0IGluZGljYXRlIHRoYXQgYQorICogZmlsZSBzeXN0ZW0gb2NjdXBpZXMgYSBnaXZlbiByZWdpb24gZGVzY3JpYmVkIGJ5IFxwIGdlb20uCisgKiBBZnRlciB0aGlzIG9wZXJhdGlvbiBwZWRfZmlsZV9zeXN0ZW1fcHJvYmUoKSB3b24ndCBkZXRlY3QgYW55IGZpbGUgc3lzdGVtLgorICoKKyAqIFxub3RlIHBlZF9maWxlX3N5c3RlbV9jcmVhdGUoKSBjYWxscyB0aGlzIGJlZm9yZSBjcmVhdGluZyBhIG5ldyBmaWxlIHN5c3RlbS4KKyAqIAorICogXHJldHVybiBcYyAxIG9uIHN1Y2Nlc3MsIFxjIDAgb24gZmFpbHVyZQorICovCitpbnQKK3BlZF9maWxlX3N5c3RlbV9jbG9iYmVyIChQZWRHZW9tZXRyeSogZ2VvbSkKK3sKKwlQZWRGaWxlU3lzdGVtVHlwZSoJZnNfdHlwZSA9IE5VTEw7CisKKwlQRURfQVNTRVJUIChnZW9tICE9IE5VTEwsIHJldHVybiAwKTsKKworCWlmICghcGVkX2RldmljZV9vcGVuIChnZW9tLT5kZXYpKQorCQlnb3RvIGVycm9yOworCisJcGVkX2V4Y2VwdGlvbl9mZXRjaF9hbGwgKCk7CisJd2hpbGUgKChmc190eXBlID0gcGVkX2ZpbGVfc3lzdGVtX3R5cGVfZ2V0X25leHQgKGZzX3R5cGUpKSkgeworCQlQZWRHZW9tZXRyeSoJcHJvYmVkOworCisJCWlmICghZnNfdHlwZS0+b3BzLT5jbG9iYmVyKQorCQkJY29udGludWU7CisKKwkJcHJvYmVkID0gcGVkX2ZpbGVfc3lzdGVtX3Byb2JlX3NwZWNpZmljIChmc190eXBlLCBnZW9tKTsKKwkJaWYgKCFwcm9iZWQpIHsKKwkJCXBlZF9leGNlcHRpb25fY2F0Y2ggKCk7CisJCQljb250aW51ZTsKKwkJfQorCQlwZWRfZ2VvbWV0cnlfZGVzdHJveSAocHJvYmVkKTsKKworCQlpZiAoZnNfdHlwZS0+b3BzLT5jbG9iYmVyICYmICFmc190eXBlLT5vcHMtPmNsb2JiZXIgKGdlb20pKSB7CisJCQlwZWRfZXhjZXB0aW9uX2xlYXZlX2FsbCAoKTsKKwkJCWdvdG8gZXJyb3JfY2xvc2VfZGV2OworCQl9CisJfQorCXBlZF9kZXZpY2VfY2xvc2UgKGdlb20tPmRldik7CisJcGVkX2V4Y2VwdGlvbl9sZWF2ZV9hbGwgKCk7CisJcmV0dXJuIDE7CisKK2Vycm9yX2Nsb3NlX2RldjoKKwlwZWRfZGV2aWNlX2Nsb3NlIChnZW9tLT5kZXYpOworZXJyb3I6CisJcmV0dXJuIDA7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gZXJhc2VzIGFsbCBzaWduYXR1cmVzIHRoYXQgaW5kaWNhdGUgdGhlIHByZXNlbmNlIG9mCisgKiBhIGZpbGUgc3lzdGVtIGluIGEgcGFydGljdWxhciByZWdpb24sIHdpdGhvdXQgZXJhc2luZyBhbnkgZGF0YQorICogY29udGFpbmVkIGluc2lkZSB0aGUgImV4Y2x1ZGUiIHJlZ2lvbi4KKyAqLworc3RhdGljIGludAorcGVkX2ZpbGVfc3lzdGVtX2Nsb2JiZXJfZXhjbHVkZSAoUGVkR2VvbWV0cnkqIGdlb20sCisJCQkJIGNvbnN0IFBlZEdlb21ldHJ5KiBleGNsdWRlKQoreworCVBlZEdlb21ldHJ5KiAgICBjbG9iYmVyX2dlb207CisJaW50ICAgICAgICAgICAgIHN0YXR1czsKKworCWlmIChwZWRfZ2VvbWV0cnlfdGVzdF9zZWN0b3JfaW5zaWRlIChleGNsdWRlLCBnZW9tLT5zdGFydCkpCisJCXJldHVybiAxOworCisJY2xvYmJlcl9nZW9tID0gcGVkX2dlb21ldHJ5X2R1cGxpY2F0ZSAoZ2VvbSk7CisJaWYgKHBlZF9nZW9tZXRyeV90ZXN0X292ZXJsYXAgKGNsb2JiZXJfZ2VvbSwgZXhjbHVkZSkpCisJCXBlZF9nZW9tZXRyeV9zZXRfZW5kIChjbG9iYmVyX2dlb20sIGV4Y2x1ZGUtPnN0YXJ0IC0gMSk7CisKKwlzdGF0dXMgPSBwZWRfZmlsZV9zeXN0ZW1fY2xvYmJlciAoY2xvYmJlcl9nZW9tKTsKKwlwZWRfZ2VvbWV0cnlfZGVzdHJveSAoY2xvYmJlcl9nZW9tKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gb3BlbnMgdGhlIGZpbGUgc3lzdGVtIHN0b3JlZCBvbiBccCBnZW9tLCBpZiBpdAorICogY2FuIGZpbmQgb25lLgorICogSXQgaXMgb2Z0ZW4gY2FsbGVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyOgorICogXGNvZGUKKyAqIAlmcyA9IHBlZF9maWxlX3N5c3RlbV9vcGVuICgmcGFydC5nZW9tKQorICogXGVuZGNvZGUKKyAqCisgKiBcdGhyb3dzIFBFRF9FWENFUFRJT05fRVJST1IgaWYgZmlsZSBzeXN0ZW0gY291bGQgbm90IGJlIGRldGVjdGVkCisgKiBcdGhyb3dzIFBFRF9FWENFUFRJT05fRVJST1IgaWYgdGhlIGZpbGUgc3lzdGVtIGlzIGJpZ2dlciB0aGFuIGl0cyB2b2x1bWUKKyAqIFx0aHJvd3MgUEVEX0VYQ0VQVElPTl9OT19GRUFUVVJFIGlmIG9wZW5pbmcgb2YgYSBmaWxlIHN5c3RlbSBzdG9yZWQgb24gCisgKiAJXHAgZ2VvbSBpcyBub3QgaW1wbGVtZW50ZWQKKyAqCisgKiBccmV0dXJuIGEgUGVkRmlsZVN5c3RlbSBvbiBzdWNjZXNzLCBcYyBOVUxMIG9uIGZhaWx1cmUuCisgKi8KK1BlZEZpbGVTeXN0ZW0qCitwZWRfZmlsZV9zeXN0ZW1fb3BlbiAoUGVkR2VvbWV0cnkqIGdlb20pCit7CisJUGVkRmlsZVN5c3RlbVR5cGUqCXR5cGU7CisJUGVkRmlsZVN5c3RlbSoJCWZzOworCVBlZEdlb21ldHJ5KgkJcHJvYmVkX2dlb207CisKKwlQRURfQVNTRVJUIChnZW9tICE9IE5VTEwsIHJldHVybiBOVUxMKTsKKworCWlmICghcGVkX2RldmljZV9vcGVuIChnZW9tLT5kZXYpKQorCQlnb3RvIGVycm9yOworCisJdHlwZSA9IHBlZF9maWxlX3N5c3RlbV9wcm9iZSAoZ2VvbSk7CisJaWYgKCF0eXBlKSB7CisJCXBlZF9leGNlcHRpb25fdGhyb3cgKFBFRF9FWENFUFRJT05fRVJST1IsIFBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJCSAgICAgXygiQ291bGQgbm90IGRldGVjdCBmaWxlIHN5c3RlbS4iKSk7CisJCWdvdG8gZXJyb3JfY2xvc2VfZGV2OworCX0KKworCXByb2JlZF9nZW9tID0gcGVkX2ZpbGVfc3lzdGVtX3Byb2JlX3NwZWNpZmljICh0eXBlLCBnZW9tKTsKKwlpZiAoIXByb2JlZF9nZW9tKQorCQlnb3RvIGVycm9yX2Nsb3NlX2RldjsKKwlpZiAoIXBlZF9nZW9tZXRyeV90ZXN0X2luc2lkZSAoZ2VvbSwgcHJvYmVkX2dlb20pKSB7CisJCWlmIChwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCVBFRF9FWENFUFRJT05fRVJST1IsCisJCQlQRURfRVhDRVBUSU9OX0lHTk9SRV9DQU5DRUwsCisJCQlfKCJUaGUgZmlsZSBzeXN0ZW0gaXMgYmlnZ2VyIHRoYW4gaXRzIHZvbHVtZSEiKSkKKwkJCQkhPSBQRURfRVhDRVBUSU9OX0lHTk9SRSkKKwkJCWdvdG8gZXJyb3JfZGVzdHJveV9wcm9iZWRfZ2VvbTsKKwl9CisKKwlpZiAoIXR5cGUtPm9wcy0+b3BlbikgeworCQlwZWRfZXhjZXB0aW9uX3Rocm93IChQRURfRVhDRVBUSU9OX05PX0ZFQVRVUkUsCisJCQkJICAgICBQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCQkgICAgIF8oIlN1cHBvcnQgZm9yIG9wZW5pbmcgJXMgZmlsZSBzeXN0ZW1zICIKKwkJCQkgICAgICAgImlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIiksCisJCQkJICAgICB0eXBlLT5uYW1lKTsKKwkJZ290byBlcnJvcl9kZXN0cm95X3Byb2JlZF9nZW9tOworCX0KKworCWZzID0gdHlwZS0+b3BzLT5vcGVuIChwcm9iZWRfZ2VvbSk7CisJaWYgKCFmcykKKwkJZ290byBlcnJvcl9kZXN0cm95X3Byb2JlZF9nZW9tOworCXBlZF9nZW9tZXRyeV9kZXN0cm95IChwcm9iZWRfZ2VvbSk7CisJcmV0dXJuIGZzOworCitlcnJvcl9kZXN0cm95X3Byb2JlZF9nZW9tOgorCXBlZF9nZW9tZXRyeV9kZXN0cm95IChwcm9iZWRfZ2VvbSk7CitlcnJvcl9jbG9zZV9kZXY6CisJcGVkX2RldmljZV9jbG9zZSAoZ2VvbS0+ZGV2KTsKK2Vycm9yOgorCXJldHVybiAwOworfQorCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgYSBuZXcgZmlsZSBzeXN0ZW0gb2YgdHlwZSBccCB0eXBlIG9uIAorICogYSByZWdpb24gZGVzY3JpYmVkIGJ5IFxwIGdlb20sIHdyaXRpbmcgb3V0IGFwcHJvcHJpYXRlIG1ldGFkYXRhIGFuZCAKKyAqIHNpZ25hdHVyZXMuICBJZiBccCB0aW1lciBpcyBub24tTlVMTCwgaXQgaXMgdXNlZCBhcyB0aGUgcHJvZ3Jlc3MgbWV0ZXIuCisgKgorICogXHRocm93cyBQRURfRVhDRVBUSU9OX05PX0ZFQVRVUkUgaWYgY3JlYXRpbmcgZmlsZSBzeXN0ZW0gdHlwZSBccCB0eXBlIAorICogCWlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQKKyAqCisgKiBccmV0dXJuIGEgUGVkRmlsZVN5c3RlbSBvbiBzdWNjZXNzLCBcYyBOVUxMIG9uIGZhaWx1cmUKKyAqLworUGVkRmlsZVN5c3RlbSoKK3BlZF9maWxlX3N5c3RlbV9jcmVhdGUgKFBlZEdlb21ldHJ5KiBnZW9tLCBjb25zdCBQZWRGaWxlU3lzdGVtVHlwZSogdHlwZSwKKwkJCVBlZFRpbWVyKiB0aW1lcikKK3sKKwlQZWRGaWxlU3lzdGVtKglmczsKKworCVBFRF9BU1NFUlQgKGdlb20gIT0gTlVMTCwgcmV0dXJuIE5VTEwpOworCVBFRF9BU1NFUlQgKHR5cGUgIT0gTlVMTCwgcmV0dXJuIE5VTEwpOworCisJaWYgKCF0eXBlLT5vcHMtPmNyZWF0ZSkgeworCQlwZWRfZXhjZXB0aW9uX3Rocm93IChQRURfRVhDRVBUSU9OX05PX0ZFQVRVUkUsCisJCQkJICAgICBQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCQkgICAgIF8oIlN1cHBvcnQgZm9yIGNyZWF0aW5nICVzIGZpbGUgc3lzdGVtcyAiCisJCQkJICAgICAgICJpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIpLAorCQkJCSAgICAgdHlwZS0+bmFtZSk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJaWYgKCFwZWRfZGV2aWNlX29wZW4gKGdlb20tPmRldikpCisJCWdvdG8gZXJyb3I7CisKKwlpZiAoIXBlZF9maWxlX3N5c3RlbV9jbG9iYmVyIChnZW9tKSkKKwkJZ290byBlcnJvcl9jbG9zZV9kZXY7CisJZnMgPSB0eXBlLT5vcHMtPmNyZWF0ZSAoZ2VvbSwgdGltZXIpOworCWlmICghZnMpCisJCWdvdG8gZXJyb3JfY2xvc2VfZGV2OworCXJldHVybiBmczsKKworZXJyb3JfY2xvc2VfZGV2OgorCXBlZF9kZXZpY2VfY2xvc2UgKGdlb20tPmRldik7CitlcnJvcjoKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBDbG9zZSBmaWxlIHN5c3RlbSBccCBmcy4KKyAqCisgKiBccmV0dXJuIFxjIDEgb24gc3VjY2VzcywgXGMgMCBvbiBmYWlsdXJlCisgKi8KK2ludAorcGVkX2ZpbGVfc3lzdGVtX2Nsb3NlIChQZWRGaWxlU3lzdGVtKiBmcykKK3sKKwlQZWREZXZpY2UqCWRldiA9IGZzLT5nZW9tLT5kZXY7CisKKwlQRURfQVNTRVJUIChmcyAhPSBOVUxMLCBnb3RvIGVycm9yX2Nsb3NlX2Rldik7CisKKwlpZiAoIWZzLT50eXBlLT5vcHMtPmNsb3NlIChmcykpCisJCWdvdG8gZXJyb3JfY2xvc2VfZGV2OworCXBlZF9kZXZpY2VfY2xvc2UgKGRldik7CisJcmV0dXJuIDE7CisKK2Vycm9yX2Nsb3NlX2RldjoKKwlwZWRfZGV2aWNlX2Nsb3NlIChkZXYpOworCXJldHVybiAwOworfQorCisvKioKKyAqIENoZWNrIFxwIGZzIGZpbGUgc3lzdGVtIGZvciBlcnJvcnMuCisgKgorICogXHRocm93cyBQRURfRVhDRVBUSU9OX05PX0ZFQVRVUkUgaWYgY2hlY2tpbmcgZmlsZSBzeXN0ZW0gXHAgZnMgaXMgCisgKiAJbm90IGltcGxlbWVudGVkIHlldAorICoKKyAqIFxyZXR1cm4gXGMgMCBvbiBmYWlsdXJlIChpLmUuIHVuZml4ZWQgZXJyb3JzKQorICovCitpbnQKK3BlZF9maWxlX3N5c3RlbV9jaGVjayAoUGVkRmlsZVN5c3RlbSogZnMsIFBlZFRpbWVyKiB0aW1lcikKK3sKKwlQRURfQVNTRVJUIChmcyAhPSBOVUxMLCByZXR1cm4gMCk7CisKKwlpZiAoIWZzLT50eXBlLT5vcHMtPmNoZWNrKSB7CisJCXBlZF9leGNlcHRpb25fdGhyb3cgKFBFRF9FWENFUFRJT05fTk9fRkVBVFVSRSwKKwkJCQkgICAgIFBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJCSAgICAgXygiU3VwcG9ydCBmb3IgY2hlY2tpbmcgJXMgZmlsZSBzeXN0ZW1zICIKKwkJCQkgICAgICAgImlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIiksCisJCQkJICAgICBmcy0+dHlwZS0+bmFtZSk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gZnMtPnR5cGUtPm9wcy0+Y2hlY2sgKGZzLCB0aW1lcik7Cit9CisKK3N0YXRpYyBpbnQKK19yYXdfY29weSAoY29uc3QgUGVkR2VvbWV0cnkqIHNyYywgUGVkR2VvbWV0cnkqIGRlc3QsIFBlZFRpbWVyKiB0aW1lcikKK3sKKwljaGFyKgkJYnVmOworCVBlZFNlY3Rvcglwb3M7CisKKwlQRURfQVNTRVJUIChzcmMgIT0gTlVMTCwgZ290byBlcnJvcik7CisJUEVEX0FTU0VSVCAoZGVzdCAhPSBOVUxMLCBnb3RvIGVycm9yKTsKKwlQRURfQVNTRVJUIChzcmMtPmxlbmd0aCA8PSBkZXN0LT5sZW5ndGgsIGdvdG8gZXJyb3IpOworCisJYnVmID0gcGVkX21hbGxvYyAoQlVGRkVSX1NJWkUgKiA1MTIpOwkJLyogRklYTUUgKi8KKwlpZiAoIWJ1ZikKKwkJZ290byBlcnJvcjsKKworCWlmICghcGVkX2RldmljZV9vcGVuIChzcmMtPmRldikpCisJCWdvdG8gZXJyb3JfZnJlZV9idWY7CisJaWYgKCFwZWRfZGV2aWNlX29wZW4gKGRlc3QtPmRldikpCisJCWdvdG8gZXJyb3JfY2xvc2Vfc3JjOworCisJZm9yIChwb3MgPSAwOyBwb3MgKyBCVUZGRVJfU0laRSA8IHNyYy0+bGVuZ3RoOyBwb3MgKz0gQlVGRkVSX1NJWkUpIHsKKwkJcGVkX3RpbWVyX3VwZGF0ZSAodGltZXIsIDEuMCAqIHBvcyAvIHNyYy0+bGVuZ3RoKTsKKwkJaWYgKCFwZWRfZ2VvbWV0cnlfcmVhZCAoc3JjLCBidWYsIHBvcywgQlVGRkVSX1NJWkUpKQorCQkJZ290byBlcnJvcl9jbG9zZV9kZXN0OworCQlpZiAoIXBlZF9nZW9tZXRyeV93cml0ZSAoZGVzdCwgYnVmLCBwb3MsIEJVRkZFUl9TSVpFKSkKKwkJCWdvdG8gZXJyb3JfY2xvc2VfZGVzdDsKKwl9CisJaWYgKHBvcyA8IHNyYy0+bGVuZ3RoKSB7CisJCXBlZF90aW1lcl91cGRhdGUgKHRpbWVyLCAxLjAgKiBwb3MgLyBzcmMtPmxlbmd0aCk7CisJCWlmICghcGVkX2dlb21ldHJ5X3JlYWQgKHNyYywgYnVmLCBwb3MsIHNyYy0+bGVuZ3RoIC0gcG9zKSkKKwkJCWdvdG8gZXJyb3JfY2xvc2VfZGVzdDsKKwkJaWYgKCFwZWRfZ2VvbWV0cnlfd3JpdGUgKGRlc3QsIGJ1ZiwgcG9zLCBzcmMtPmxlbmd0aCAtIHBvcykpCisJCQlnb3RvIGVycm9yX2Nsb3NlX2Rlc3Q7CisJfQorCXBlZF90aW1lcl91cGRhdGUgKHRpbWVyLCAxLjApOworCisJcGVkX2RldmljZV9jbG9zZSAoc3JjLT5kZXYpOworCXBlZF9kZXZpY2VfY2xvc2UgKGRlc3QtPmRldik7CisJcGVkX2ZyZWUgKGJ1Zik7CisJcmV0dXJuIDE7CisKK2Vycm9yX2Nsb3NlX2Rlc3Q6CisJcGVkX2RldmljZV9jbG9zZSAoZGVzdC0+ZGV2KTsKK2Vycm9yX2Nsb3NlX3NyYzoKKwlwZWRfZGV2aWNlX2Nsb3NlIChzcmMtPmRldik7CitlcnJvcl9mcmVlX2J1ZjoKKwlwZWRfZnJlZSAoYnVmKTsKK2Vycm9yOgorCXJldHVybiAwOworfQorCitzdGF0aWMgUGVkRmlsZVN5c3RlbSoKK19yYXdfY29weV9hbmRfcmVzaXplIChjb25zdCBQZWRGaWxlU3lzdGVtKiBmcywgUGVkR2VvbWV0cnkqIGdlb20sCisJCSAgICAgIFBlZFRpbWVyKiB0aW1lcikKK3sKKwlQZWRGaWxlU3lzdGVtKgluZXdfZnM7CisJUGVkVGltZXIqCXN1Yl90aW1lciA9IE5VTEw7CisKKwlwZWRfdGltZXJfcmVzZXQgKHRpbWVyKTsKKwlwZWRfdGltZXJfc2V0X3N0YXRlX25hbWUgKHRpbWVyLCBfKCJyYXcgYmxvY2sgY29weWluZyIpKTsKKworCXN1Yl90aW1lciA9IHBlZF90aW1lcl9uZXdfbmVzdGVkICh0aW1lciwgMC45NSk7CisJaWYgKCFfcmF3X2NvcHkgKGZzLT5nZW9tLCBnZW9tLCBzdWJfdGltZXIpKQorCQlnb3RvIGVycm9yOworCXBlZF90aW1lcl9kZXN0cm95X25lc3RlZCAoc3ViX3RpbWVyKTsKKworCW5ld19mcyA9IHBlZF9maWxlX3N5c3RlbV9vcGVuIChnZW9tKTsKKwlpZiAoIW5ld19mcykKKwkJZ290byBlcnJvcjsKKworCXBlZF90aW1lcl9zZXRfc3RhdGVfbmFtZSAodGltZXIsIF8oImdyb3dpbmcgZmlsZSBzeXN0ZW0iKSk7CisKKwlzdWJfdGltZXIgPSBwZWRfdGltZXJfbmV3X25lc3RlZCAodGltZXIsIDAuMDUpOworCWlmICghcGVkX2ZpbGVfc3lzdGVtX3Jlc2l6ZSAobmV3X2ZzLCBnZW9tLCBzdWJfdGltZXIpKQorCQlnb3RvIGVycm9yX2Nsb3NlX25ld19mczsKKwlwZWRfdGltZXJfZGVzdHJveV9uZXN0ZWQgKHN1Yl90aW1lcik7CisJcmV0dXJuIG5ld19mczsKKworZXJyb3JfY2xvc2VfbmV3X2ZzOgorCXBlZF9maWxlX3N5c3RlbV9jbG9zZSAobmV3X2ZzKTsKK2Vycm9yOgorCXBlZF90aW1lcl9kZXN0cm95X25lc3RlZCAoc3ViX3RpbWVyKTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiBDcmVhdGUgYSBuZXcgZmlsZSBzeXN0ZW0gKG9mIHRoZSBzYW1lIHR5cGUpIG9uIFxwIGdlb20sIGFuZAorICogY29weSB0aGUgY29udGVudHMgb2YgXHAgZnMgaW50byB0aGUgbmV3IGZpbGVzeXN0ZW0uICAKKyAqIElmIFxwIHRpbWVyIGlzIG5vbi1OVUxMLCBpdCBpcyB1c2VkIGFzIHRoZSBwcm9ncmVzcyBtZXRlci4KKyAqCisgKiBcdGhyb3dzIFBFRF9FWENFUFRJT05fRVJST1Igd2hlbiB0cnlpbmcgdG8gY29weSBvbnRvIGFuIG92ZXJsYXBwaW5nIHBhcnRpdGlvbgorICogXHRocm93cyBQRURfRVhDRVBUSU9OX05PX0ZFQVRVUkUgaWYgY29weWluZyBvZiBmaWxlIHN5c3RlbSBccCBmcyAKKyAqIAlpcyBub3QgaW1wbGVtZW50ZWQgeWV0CisgKgorICogXHJldHVybiBhIG5ldyBQZWRGaWxlU3lzdGVtIG9uIHN1Y2Nlc3MsIFxjIE5VTEwgb24gZmFpbHVyZQorICovCitQZWRGaWxlU3lzdGVtKgorcGVkX2ZpbGVfc3lzdGVtX2NvcHkgKFBlZEZpbGVTeXN0ZW0qIGZzLCBQZWRHZW9tZXRyeSogZ2VvbSwgUGVkVGltZXIqIHRpbWVyKQoreworCVBlZEZpbGVTeXN0ZW0qIG5ld19mczsKKworCVBFRF9BU1NFUlQgKGZzICE9IE5VTEwsIHJldHVybiAwKTsKKwlQRURfQVNTRVJUIChnZW9tICE9IE5VTEwsIHJldHVybiAwKTsKKworCWlmICghcGVkX2RldmljZV9vcGVuIChnZW9tLT5kZXYpKQorCQlnb3RvIGVycm9yOworCisJaWYgKHBlZF9nZW9tZXRyeV90ZXN0X292ZXJsYXAgKGZzLT5nZW9tLCBnZW9tKSkgeworCQlwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCVBFRF9FWENFUFRJT05fRVJST1IsIFBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJXygiQ2FuJ3QgY29weSBvbnRvIGFuIG92ZXJsYXBwaW5nIHBhcnRpdGlvbi4iKSk7CisJCWdvdG8gZXJyb3JfY2xvc2VfZGV2OworCX0KKworCWlmICghZnMtPmNoZWNrZWQgJiYgZnMtPnR5cGUtPm9wcy0+Y2hlY2spIHsKKwkJaWYgKCFwZWRfZmlsZV9zeXN0ZW1fY2hlY2sgKGZzLCB0aW1lcikpCisJCQlnb3RvIGVycm9yX2Nsb3NlX2RldjsKKwl9CisKKwlpZiAoIXBlZF9maWxlX3N5c3RlbV9jbG9iYmVyX2V4Y2x1ZGUgKGdlb20sIGZzLT5nZW9tKSkKKwkJZ290byBlcnJvcl9jbG9zZV9kZXY7CisKKwlpZiAoIWZzLT50eXBlLT5vcHMtPmNvcHkpIHsKKwkJaWYgKGZzLT50eXBlLT5vcHMtPnJlc2l6ZSkgeworCQkJaWYgKGZzLT5nZW9tLT5sZW5ndGggPD0gZ2VvbS0+bGVuZ3RoKQorCQkJCXJldHVybiBfcmF3X2NvcHlfYW5kX3Jlc2l6ZSAoCisJCQkJCQlmcywgKFBlZEdlb21ldHJ5KikgZ2VvbSwKKwkJCQkJCXRpbWVyKTsKKwkJCQkKKwkJCXBlZF9leGNlcHRpb25fdGhyb3cgKAorCQkJCVBFRF9FWENFUFRJT05fTk9fRkVBVFVSRSwKKwkJCQlQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCQlfKCJEaXJlY3Qgc3VwcG9ydCBmb3IgY29weWluZyBmaWxlIHN5c3RlbXMgaXMgIgorCQkJCSAgIm5vdCB5ZXQgaW1wbGVtZW50ZWQgZm9yICVzLiAgSG93ZXZlciwgIgorCQkJCSAgInN1cHBvcnQgZm9yIHJlc2l6aW5nIGlzIGltcGxlbWVudGVkLiAgIgorCQkJCSAgIlRoZXJlZm9yZSwgdGhlIGZpbGUgc3lzdGVtIGNhbiBiZSBjb3BpZWQgaWYgIgorCQkJCSAgInRoZSBuZXcgcGFydGl0aW9uIGlzIGF0IGxlYXN0IGFzIGJpZyBhcyB0aGUgIgorCQkJCSAgIm9sZCBvbmUuICBTbywgZWl0aGVyIHNocmluayB0aGUgcGFydGl0aW9uICIKKwkJCQkgICJ5b3UgYXJlIHRyeWluZyB0byBjb3B5LCBvciBjb3B5IHRvIGEgYmlnZ2VyICIKKwkJCQkgICJwYXJ0aXRpb24uIiksCisJCQkJZnMtPnR5cGUtPm5hbWUpOworCQkJZ290byBlcnJvcl9jbG9zZV9kZXY7CisJCX0gZWxzZSB7CisJCQlwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCQlQRURfRVhDRVBUSU9OX05PX0ZFQVRVUkUsCisJCQkJUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQkJXygiU3VwcG9ydCBmb3IgY29weWluZyAlcyBmaWxlIHN5c3RlbXMgaXMgbm90ICIKKwkJCQkgICJpbXBsZW1lbnRlZCB5ZXQuIiksCisJCQkJZnMtPnR5cGUtPm5hbWUpOworCQkJZ290byBlcnJvcl9jbG9zZV9kZXY7CisJCX0KKwl9CisJbmV3X2ZzID0gZnMtPnR5cGUtPm9wcy0+Y29weSAoZnMsIGdlb20sIHRpbWVyKTsKKwlpZiAoIW5ld19mcykKKwkJZ290byBlcnJvcl9jbG9zZV9kZXY7CisJcmV0dXJuIG5ld19mczsKKworZXJyb3JfY2xvc2VfZGV2OgorCXBlZF9kZXZpY2VfY2xvc2UgKGdlb20tPmRldik7CitlcnJvcjoKKwlyZXR1cm4gTlVMTDs7Cit9CisKKy8qKgorICogUmVzaXplIFxwIGZzIHRvIG5ldyBnZW9tZXRyeSBccCBnZW9tLgorICoKKyAqIFxwIGdlb20gc2hvdWxkIHNhdGlzZnkgdGhlIHBlZF9maWxlX3N5c3RlbV9nZXRfcmVzaXplX2NvbnN0cmFpbnQoKS4KKyAqIChUaGlzIGlzbid0IGFzc2VydGVkLCBzbyBpdCdzIG5vdCBhIGJ1ZyBub3QgdG8uLi4ganVzdCBpdCdzIGxpa2VseQorICogdG8gZmFpbCA7KSAgSWYgXHAgdGltZXIgaXMgbm9uLU5VTEwsIGl0IGlzIHVzZWQgYXMgdGhlIHByb2dyZXNzIG1ldGVyLgorICoKKyAqIFx0aHJvd3MgUEVEX0VYQ0VQVElPTl9OT19GRUFUVVJFIGlmIHJlc2l6aW5nIG9mIGZpbGUgc3lzdGVtIFxwIGZzIAorICogCWlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQKKyAqIAorICogXHJldHVybiBcYyAwIG9uIGZhaWx1cmUgCisgKi8KK2ludAorcGVkX2ZpbGVfc3lzdGVtX3Jlc2l6ZSAoUGVkRmlsZVN5c3RlbSogZnMsIFBlZEdlb21ldHJ5KiBnZW9tLCBQZWRUaW1lciogdGltZXIpCit7CisJUEVEX0FTU0VSVCAoZnMgIT0gTlVMTCwgcmV0dXJuIDApOworCVBFRF9BU1NFUlQgKGdlb20gIT0gTlVMTCwgcmV0dXJuIDApOworCisJaWYgKCFmcy0+dHlwZS0+b3BzLT5yZXNpemUpIHsKKwkJcGVkX2V4Y2VwdGlvbl90aHJvdyAoUEVEX0VYQ0VQVElPTl9OT19GRUFUVVJFLAorCQkJCSAgICAgUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQkJICAgICBfKCJTdXBwb3J0IGZvciByZXNpemluZyAlcyBmaWxlIHN5c3RlbXMgIgorCQkJCSAgICAgICAiaXMgbm90IGltcGxlbWVudGVkIHlldC4iKSwKKwkJCQkgICAgIGZzLT50eXBlLT5uYW1lKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghZnMtPmNoZWNrZWQgJiYgZnMtPnR5cGUtPm9wcy0+Y2hlY2spIHsKKwkJaWYgKCFwZWRfZmlsZV9zeXN0ZW1fY2hlY2sgKGZzLCB0aW1lcikpCisJCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFwZWRfZmlsZV9zeXN0ZW1fY2xvYmJlcl9leGNsdWRlIChnZW9tLCBmcy0+Z2VvbSkpCisJCXJldHVybiAwOworCisJcmV0dXJuIGZzLT50eXBlLT5vcHMtPnJlc2l6ZSAoZnMsIGdlb20sIHRpbWVyKTsKK30KKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBjb25zdHJhaW50IG9uIHRoZSByZWdpb24gdGhhdCBhbGwgZmlsZSBzeXN0ZW1zCisgKiBvZiBhIHBhcnRpY3VsYXIgdHlwZSBccCBmc190eXBlIGNyZWF0ZWQgb24gZGV2aWNlIFxwIGRldiB3aXRoIAorICogcGVkX2ZpbGVfc3lzdGVtX2NyZWF0ZSgpIG11c3Qgc2F0aXNmeS4gRm9yIGV4YW1wbGUsIEZBVDE2IGZpbGUgc3lzdGVtcyBtdXN0CisgKiBiZSBhdCBsZWFzdCAzMiBtZWdhYnl0ZXMuCisgKgorICogXHJldHVybiBcYyBOVUxMIG9uIGZhaWx1cmUKKyAqLworUGVkQ29uc3RyYWludCoKK3BlZF9maWxlX3N5c3RlbV9nZXRfY3JlYXRlX2NvbnN0cmFpbnQgKGNvbnN0IFBlZEZpbGVTeXN0ZW1UeXBlKiBmc190eXBlLAorCQkJCSAgICAgICBjb25zdCBQZWREZXZpY2UqIGRldikKK3sKKwlQRURfQVNTRVJUIChmc190eXBlICE9IE5VTEwsIHJldHVybiBOVUxMKTsKKwlQRURfQVNTRVJUIChkZXYgIT0gTlVMTCwgcmV0dXJuIE5VTEwpOworCisJaWYgKCFmc190eXBlLT5vcHMtPmdldF9jcmVhdGVfY29uc3RyYWludCkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIGZzX3R5cGUtPm9wcy0+Z2V0X2NyZWF0ZV9jb25zdHJhaW50IChkZXYpOworfQorLyoqCisgKiBSZXR1cm4gYSBjb25zdHJhaW50LCB0aGF0IHJlcHJlc2VudHMgYWxsIG9mIHRoZSBwb3NzaWJsZSB3YXlzIHRoZQorICogZmlsZSBzeXN0ZW0gXHAgZnMgY2FuIGJlIHJlc2l6ZWQgd2l0aCBwZWRfZmlsZV9zeXN0ZW1fcmVzaXplKCkuICAKKyAqIFRoaXMgdGFrZXMgaW50byBhY2NvdW50IHRoZSBhbW91bnQgb2YgdXNlZCBzcGFjZSBvbgorICogdGhlIGZpbGVzeXN0ZW0gXHAgZnMgYW5kIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIHJlc2l6ZSBhbGdvcml0aG0uCisgKiBIaW50czoKKyAqIC0jIGlmIGNvbnN0cmFpbnQtPnN0YXJ0X2FsaWduLT5ncmFpbl9zaXplID09IDAsIG9yCisgKiAgICBjb25zdHJhaW50LT5zdGFydF9nZW9tLT5sZW5ndGggPT0gMSwgdGhlbiB0aGUgc3RhcnQgY2FuIG5vdCBiZSBtb3ZlZAorICogLSMgY29uc3RyYWludC0+bWluX3NpemUgaXMgdGhlIG1pbmltdW0gc2l6ZSB5b3UgY2FuIHJlc2l6ZSB0aGUgcGFydGl0aW9uCisgKiAgICB0by4gIFlvdSBtaWdodCB3YW50IHRvIHRlbGwgdGhlIHVzZXIgdGhpcyA7LSkuCisgKiAgICAKKyAqIFxyZXR1cm4gYSBQZWRDb25zdHJhaW50IG9uIHN1Y2Nlc3MsIFxjIE5VTEwgb24gZmFpbHVyZQorICovCitQZWRDb25zdHJhaW50KgorcGVkX2ZpbGVfc3lzdGVtX2dldF9yZXNpemVfY29uc3RyYWludCAoY29uc3QgUGVkRmlsZVN5c3RlbSogZnMpCit7CisJUEVEX0FTU0VSVCAoZnMgIT0gTlVMTCwgcmV0dXJuIDApOworCisJaWYgKCFmcy0+dHlwZS0+b3BzLT5nZXRfcmVzaXplX2NvbnN0cmFpbnQpCisJCXJldHVybiBOVUxMOworCXJldHVybiBmcy0+dHlwZS0+b3BzLT5nZXRfcmVzaXplX2NvbnN0cmFpbnQgKGZzKTsKK30KKworLyoqCisgKiBHZXQgdGhlIGNvbnN0cmFpbnQgb24gY29weWluZyBccCBmcyB3aXRoIHBlZF9maWxlX3N5c3RlbV9jb3B5KCkKKyAqIHRvIHNvbWV3aGVyZSBvbiBccCBkZXYuCisgKgorICogXHJldHVybiBhIFBlZENvbnN0cmFpbnQgb24gc3VjY2VzcywgXGMgTlVMTCBvbiBmYWlsdXJlCisgKi8gCitQZWRDb25zdHJhaW50KgorcGVkX2ZpbGVfc3lzdGVtX2dldF9jb3B5X2NvbnN0cmFpbnQgKGNvbnN0IFBlZEZpbGVTeXN0ZW0qIGZzLAorCQkJCSAgICAgY29uc3QgUGVkRGV2aWNlKiBkZXYpCit7CisJUGVkR2VvbWV0cnkJZnVsbF9kZXY7CisKKwlQRURfQVNTRVJUIChmcyAhPSBOVUxMLCByZXR1cm4gTlVMTCk7CisJUEVEX0FTU0VSVCAoZGV2ICE9IE5VTEwsIHJldHVybiBOVUxMKTsKKworCWlmIChmcy0+dHlwZS0+b3BzLT5nZXRfY29weV9jb25zdHJhaW50KQorCQlyZXR1cm4gZnMtPnR5cGUtPm9wcy0+Z2V0X2NvcHlfY29uc3RyYWludCAoZnMsIGRldik7CisKKwlpZiAoZnMtPnR5cGUtPm9wcy0+cmVzaXplKSB7CisJCWlmICghcGVkX2dlb21ldHJ5X2luaXQgKCZmdWxsX2RldiwgZGV2LCAwLCBkZXYtPmxlbmd0aCAtIDEpKQorCQkJcmV0dXJuIE5VTEw7CisJCXJldHVybiBwZWRfY29uc3RyYWludF9uZXcgKAorCQkJCXBlZF9hbGlnbm1lbnRfYW55LCBwZWRfYWxpZ25tZW50X2FueSwKKwkJCQkmZnVsbF9kZXYsICZmdWxsX2RldiwKKwkJCQlmcy0+Z2VvbS0+bGVuZ3RoLCBkZXYtPmxlbmd0aCk7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKiBAfSAqLwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9NYWtlZmlsZS5hbSBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZhNTc0NAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSwzMyBAQAorIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgUGFydGVkCisjIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMSwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIG1heSBiZSBtb2RpZmllZCBhbmQvb3IgZGlzdHJpYnV0ZWQgd2l0aG91dCByZXN0cmljdGlvbi4KKworU1VCRElSUyAgICAgICA9IGFtaWdhIGV4dDIgdWZzIGZhdCBudGZzIGhmcyBsaW51eF9zd2FwIHhmcyBqZnMgcmVpc2VyZnMgIyBiZnMKKworcGFydGVkaW5jbHVkZWRpciAgICAgID0JLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUKK25vaW5zdF9MVExJQlJBUklFUyAgICA9CWxpYmZzLmxhCitsaWJmc19sYV9MREZMQUdTICA9IC12ZXJzaW9uLWluZm8gJChMVF9DVVJSRU5UKTokKExUX1JFVklTSU9OKTokKExUX0FHRSkgXAorCQkJLXJlbGVhc2UgJChMVF9SRUxFQVNFKQorCitsaWJmc19sYV9MSUJBREQgICA9ICQoVVVJRF9MSUJTKQkJXAorCQkgICAgJChJTlRMTElCUykJCQlcCisJCSAgICAkKE9TX0xJQlMpCQkJXAorCQkgICAgJChSRUlTRVJfTElCUykJCVwKKwkJICAgIGFtaWdhL2xpYmFtaWdhZnMubGEJCVwKKwkJICAgIGV4dDIvbGliZXh0Mi5sYQkJXAorCQkgICAgdWZzL2xpYnVmcy5sYQkJXAorCQkgICAgZmF0L2xpYmZhdC5sYQkJXAorCQkgICAgbnRmcy9saWJudGZzLmxhCQlcCisJCSAgICBoZnMvbGliaGZzLmxhCQlcCisJCSAgICBsaW51eF9zd2FwL2xpYmxpbnV4c3dhcC5sYQlcCisJCSAgICB4ZnMvbGlieGZzLmxhCQlcCisJCSAgICBqZnMvbGliamZzLmxhCQlcCisJCSAgICByZWlzZXJmcy9saWJyZWlzZXJmcy5sYQorIwkJICAgIGJmcy9saWJiZnMubGEKKworbGliZnNfbGFfU09VUkNFUyAgID0KKworSU5DTFVERVMgPSAkKHBhcnRlZGluY2x1ZGVkaXIpICQoSU5UTElOQ1MpCisKK01BSU5UQUlORVJDTEVBTkZJTEVTID0gTWFrZWZpbGUuaW4KZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvTWFrZWZpbGUuaW4gYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxZWQ0ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNzQ0IEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjEwIGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgUGFydGVkCisjIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMSwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIG1heSBiZSBtb2RpZmllZCBhbmQvb3IgZGlzdHJpYnV0ZWQgd2l0aG91dCByZXN0cmljdGlvbi4KKworVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK3N1YmRpciA9IGxpYnBhcnRlZC9mcworRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9hYnNvbHV0ZS1oZWFkZXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvYWxsb2NhLm00ICQodG9wX3NyY2RpcikvbTQvYXNzZXJ0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2F0ZXhpdC5tNCAkKHRvcF9zcmNkaXIpL200L2NhbGxvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jbG9zZS1zdHJlYW0ubTQgJCh0b3Bfc3JjZGlyKS9tNC9jbG9zZW91dC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jb2Rlc2V0Lm00ICQodG9wX3NyY2RpcikvbTQvY29uZmlnLWgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZGlybmFtZS5tNCAkKHRvcF9zcmNkaXIpL200L2Rvcy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9kb3VibGUtc2xhc2gtcm9vdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9lcnJvci5tNCAkKHRvcF9zcmNkaXIpL200L2V4aXRmYWlsLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2V4dGVuc2lvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9mcGVuZGluZy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9mcmVlLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0b3B0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgJCh0b3Bfc3JjZGlyKS9tNC9nbGliYzIxLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2dudWxpYi1jb21tb24ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZ251bGliLWNvbXAubTQgJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pbmxpbmUubTQgJCh0b3Bfc3JjZGlyKS9tNC9pbnR0eXBlcy1wcmkubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaW50dHlwZXMubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItaWdub3JlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbG9jYWxjaGFyc2V0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xvbmctb3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2xvbmdsb25nLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21icnRvd2MubTQgJCh0b3Bfc3JjZGlyKS9tNC9tYnN0YXRlX3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWVtY2hyLm00ICQodG9wX3NyY2RpcikvbTQvbWVtY21wLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21lbWNweS5tNCAkKHRvcF9zcmNkaXIpL200L21lbW1vdmUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWVtc2V0Lm00ICQodG9wX3NyY2RpcikvbTQvbmxzLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3BvLm00ICQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcXVvdGVhcmcubTQgJCh0b3Bfc3JjZGlyKS9tNC9yZWdleC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9yZW5hbWUubTQgJCh0b3Bfc3JjZGlyKS9tNC9ycG1hdGNoLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3NhZmUtcmVhZC5tNCAkKHRvcF9zcmNkaXIpL200L3NhZmUtd3JpdGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3NpemVfdC5tNCAkKHRvcF9zcmNkaXIpL200L3N0ZGFyZy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdGRib29sLm00ICQodG9wX3NyY2RpcikvbTQvc3RkaW50Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0ZGxpYl9oLm00ICQodG9wX3NyY2RpcikvbTQvc3RyY3Nwbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdHJpbmdfaC5tNCAkKHRvcF9zcmNkaXIpL200L3N0cm5kdXAubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3Rybmxlbi5tNCAkKHRvcF9zcmNkaXIpL200L3N0cnRvZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdHJ0b2wubTQgJCh0b3Bfc3JjZGlyKS9tNC91bmlzdGRfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC91dGltYnVmLm00ICQodG9wX3NyY2RpcikvbTQvdXRpbWUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdXRpbWVzLW51bGwubTQgJCh0b3Bfc3JjZGlyKS9tNC93Y2hhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC93Y3R5cGUubTQgJCh0b3Bfc3JjZGlyKS9tNC93aW50X3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQveGFsbG9jLm00ICQodG9wX3NyY2RpcikvbTQveHN0cm5kdXAubTQgXAorCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCithbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorCSQoQUNMT0NBTF9NNCkKK21raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK0xUTElCUkFSSUVTID0gJChub2luc3RfTFRMSUJSQVJJRVMpCithbV9fREVQRU5ERU5DSUVTXzEgPQorbGliZnNfbGFfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCisJJChhbV9fREVQRU5ERU5DSUVTXzEpICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCisJYW1pZ2EvbGliYW1pZ2Fmcy5sYSBleHQyL2xpYmV4dDIubGEgdWZzL2xpYnVmcy5sYSBcCisJZmF0L2xpYmZhdC5sYSBudGZzL2xpYm50ZnMubGEgaGZzL2xpYmhmcy5sYSBcCisJbGludXhfc3dhcC9saWJsaW51eHN3YXAubGEgeGZzL2xpYnhmcy5sYSBqZnMvbGliamZzLmxhIFwKKwlyZWlzZXJmcy9saWJyZWlzZXJmcy5sYQorYW1fbGliZnNfbGFfT0JKRUNUUyA9CitsaWJmc19sYV9PQkpFQ1RTID0gJChhbV9saWJmc19sYV9PQkpFQ1RTKQorbGliZnNfbGFfTElOSyA9ICQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCisJLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpICQobGliZnNfbGFfTERGTEFHUykgXAorCSQoTERGTEFHUykgLW8gJEAKK0RFRkFVTFRfSU5DTFVERVMgPSAtSS4gLUkkKHRvcF9idWlsZGRpcikvbGliQGFtX19pc3JjQAorQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCisJJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorTFRDT01QSUxFID0gJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIFwKKwktLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgXAorCSQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0NDTEQgPSAkKENDKQorTElOSyA9ICQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCisJLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgXAorCSQoTERGTEFHUykgLW8gJEAKK1NPVVJDRVMgPSAkKGxpYmZzX2xhX1NPVVJDRVMpCitESVNUX1NPVVJDRVMgPSAkKGxpYmZzX2xhX1NPVVJDRVMpCitSRUNVUlNJVkVfVEFSR0VUUyA9IGFsbC1yZWN1cnNpdmUgY2hlY2stcmVjdXJzaXZlIGR2aS1yZWN1cnNpdmUgXAorCWh0bWwtcmVjdXJzaXZlIGluZm8tcmVjdXJzaXZlIGluc3RhbGwtZGF0YS1yZWN1cnNpdmUgXAorCWluc3RhbGwtZHZpLXJlY3Vyc2l2ZSBpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlIFwKKwlpbnN0YWxsLWh0bWwtcmVjdXJzaXZlIGluc3RhbGwtaW5mby1yZWN1cnNpdmUgXAorCWluc3RhbGwtcGRmLXJlY3Vyc2l2ZSBpbnN0YWxsLXBzLXJlY3Vyc2l2ZSBpbnN0YWxsLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZSBpbnN0YWxsZGlycy1yZWN1cnNpdmUgcGRmLXJlY3Vyc2l2ZSBcCisJcHMtcmVjdXJzaXZlIHVuaW5zdGFsbC1yZWN1cnNpdmUKK1JFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTID0gbW9zdGx5Y2xlYW4tcmVjdXJzaXZlIGNsZWFuLXJlY3Vyc2l2ZQlcCisgIGRpc3RjbGVhbi1yZWN1cnNpdmUgbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUKK0VUQUdTID0gZXRhZ3MKK0NUQUdTID0gY3RhZ3MKK0RJU1RfU1VCRElSUyA9ICQoU1VCRElSUykKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitBQlNPTFVURV9JTlRUWVBFU19IID0gQEFCU09MVVRFX0lOVFRZUEVTX0hACitBQlNPTFVURV9TVERJTlRfSCA9IEBBQlNPTFVURV9TVERJTlRfSEAKK0FCU09MVVRFX1NURExJQl9IID0gQEFCU09MVVRFX1NURExJQl9IQAorQUJTT0xVVEVfU1RSSU5HX0ggPSBAQUJTT0xVVEVfU1RSSU5HX0hACitBQlNPTFVURV9VTklTVERfSCA9IEBBQlNPTFVURV9VTklTVERfSEAKK0FCU09MVVRFX1dDSEFSX0ggPSBAQUJTT0xVVEVfV0NIQVJfSEAKK0FCU09MVVRFX1dDVFlQRV9IID0gQEFCU09MVVRFX1dDVFlQRV9IQAorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQUxMT0NBID0gQEFMTE9DQUAKK0FMTE9DQV9IID0gQEFMTE9DQV9IQAorQU1UQVIgPSBAQU1UQVJACitBUiA9IEBBUkAKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBV0sgPSBAQVdLQAorQklUU0laRU9GX1BUUkRJRkZfVCA9IEBCSVRTSVpFT0ZfUFRSRElGRl9UQAorQklUU0laRU9GX1NJR19BVE9NSUNfVCA9IEBCSVRTSVpFT0ZfU0lHX0FUT01JQ19UQAorQklUU0laRU9GX1NJWkVfVCA9IEBCSVRTSVpFT0ZfU0laRV9UQAorQklUU0laRU9GX1dDSEFSX1QgPSBAQklUU0laRU9GX1dDSEFSX1RACitCSVRTSVpFT0ZfV0lOVF9UID0gQEJJVFNJWkVPRl9XSU5UX1RACitCVUlMRElORk8gPSBAQlVJTERJTkZPQAorQ0MgPSBAQ0NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NIRUNLX0NGTEFHUyA9IEBDSEVDS19DRkxBR1NACitDSEVDS19MSUJTID0gQENIRUNLX0xJQlNACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitETF9MSUJTID0gQERMX0xJQlNACitETV9MSUJTID0gQERNX0xJQlNACitFQ0hPID0gQEVDSE9ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VYRUVYVCA9IEBFWEVFWFRACitGNzcgPSBARjc3QAorRkZMQUdTID0gQEZGTEFHU0AKK0dFVE9QVF9IID0gQEdFVE9QVF9IQAorR0xJQkMyMSA9IEBHTElCQzIxQAorR01TR0ZNVCA9IEBHTVNHRk1UQAorR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACitHTlVMSUJfQ0hPV04gPSBAR05VTElCX0NIT1dOQAorR05VTElCX0RVUDIgPSBAR05VTElCX0RVUDJACitHTlVMSUJfRkNIRElSID0gQEdOVUxJQl9GQ0hESVJACitHTlVMSUJfRlRSVU5DQVRFID0gQEdOVUxJQl9GVFJVTkNBVEVACitHTlVMSUJfR0VUQ1dEID0gQEdOVUxJQl9HRVRDV0RACitHTlVMSUJfR0VUTE9HSU5fUiA9IEBHTlVMSUJfR0VUTE9HSU5fUkAKK0dOVUxJQl9HRVRTVUJPUFQgPSBAR05VTElCX0dFVFNVQk9QVEAKK0dOVUxJQl9JTUFYQUJTID0gQEdOVUxJQl9JTUFYQUJTQAorR05VTElCX0lNQVhESVYgPSBAR05VTElCX0lNQVhESVZACitHTlVMSUJfTUJTQ0FTRUNNUCA9IEBHTlVMSUJfTUJTQ0FTRUNNUEAKK0dOVUxJQl9NQlNDQVNFU1RSID0gQEdOVUxJQl9NQlNDQVNFU1RSQAorR05VTElCX01CU0NIUiA9IEBHTlVMSUJfTUJTQ0hSQAorR05VTElCX01CU0NTUE4gPSBAR05VTElCX01CU0NTUE5ACitHTlVMSUJfTUJTTEVOID0gQEdOVUxJQl9NQlNMRU5ACitHTlVMSUJfTUJTTkNBU0VDTVAgPSBAR05VTElCX01CU05DQVNFQ01QQAorR05VTElCX01CU1BCUksgPSBAR05VTElCX01CU1BCUktACitHTlVMSUJfTUJTUENBU0VDTVAgPSBAR05VTElCX01CU1BDQVNFQ01QQAorR05VTElCX01CU1JDSFIgPSBAR05VTElCX01CU1JDSFJACitHTlVMSUJfTUJTU0VQID0gQEdOVUxJQl9NQlNTRVBACitHTlVMSUJfTUJTU1BOID0gQEdOVUxJQl9NQlNTUE5ACitHTlVMSUJfTUJTU1RSID0gQEdOVUxJQl9NQlNTVFJACitHTlVMSUJfTUJTVE9LX1IgPSBAR05VTElCX01CU1RPS19SQAorR05VTElCX01FTU1FTSA9IEBHTlVMSUJfTUVNTUVNQAorR05VTElCX01FTVBDUFkgPSBAR05VTElCX01FTVBDUFlACitHTlVMSUJfTUVNUkNIUiA9IEBHTlVMSUJfTUVNUkNIUkAKK0dOVUxJQl9NS0RURU1QID0gQEdOVUxJQl9NS0RURU1QQAorR05VTElCX01LU1RFTVAgPSBAR05VTElCX01LU1RFTVBACitHTlVMSUJfUkVBRExJTksgPSBAR05VTElCX1JFQURMSU5LQAorR05VTElCX1NMRUVQID0gQEdOVUxJQl9TTEVFUEAKK0dOVUxJQl9TVFBDUFkgPSBAR05VTElCX1NUUENQWUAKK0dOVUxJQl9TVFBOQ1BZID0gQEdOVUxJQl9TVFBOQ1BZQAorR05VTElCX1NUUkNBU0VTVFIgPSBAR05VTElCX1NUUkNBU0VTVFJACitHTlVMSUJfU1RSQ0hSTlVMID0gQEdOVUxJQl9TVFJDSFJOVUxACitHTlVMSUJfU1RSRFVQID0gQEdOVUxJQl9TVFJEVVBACitHTlVMSUJfU1RSTkRVUCA9IEBHTlVMSUJfU1RSTkRVUEAKK0dOVUxJQl9TVFJOTEVOID0gQEdOVUxJQl9TVFJOTEVOQAorR05VTElCX1NUUlBCUksgPSBAR05VTElCX1NUUlBCUktACitHTlVMSUJfU1RSU0VQID0gQEdOVUxJQl9TVFJTRVBACitHTlVMSUJfU1RSVE9JTUFYID0gQEdOVUxJQl9TVFJUT0lNQVhACitHTlVMSUJfU1RSVE9LX1IgPSBAR05VTElCX1NUUlRPS19SQAorR05VTElCX1NUUlRPVU1BWCA9IEBHTlVMSUJfU1RSVE9VTUFYQAorR1JFUCA9IEBHUkVQQAorSEFWRV9ERUNMX0dFVExPR0lOX1IgPSBASEFWRV9ERUNMX0dFVExPR0lOX1JACitIQVZFX0RFQ0xfSU1BWEFCUyA9IEBIQVZFX0RFQ0xfSU1BWEFCU0AKK0hBVkVfREVDTF9JTUFYRElWID0gQEhBVkVfREVDTF9JTUFYRElWQAorSEFWRV9ERUNMX01FTU1FTSA9IEBIQVZFX0RFQ0xfTUVNTUVNQAorSEFWRV9ERUNMX01FTVJDSFIgPSBASEFWRV9ERUNMX01FTVJDSFJACitIQVZFX0RFQ0xfU1RSRFVQID0gQEhBVkVfREVDTF9TVFJEVVBACitIQVZFX0RFQ0xfU1RSTkNBU0VDTVAgPSBASEFWRV9ERUNMX1NUUk5DQVNFQ01QQAorSEFWRV9ERUNMX1NUUk5EVVAgPSBASEFWRV9ERUNMX1NUUk5EVVBACitIQVZFX0RFQ0xfU1RSTkxFTiA9IEBIQVZFX0RFQ0xfU1RSTkxFTkAKK0hBVkVfREVDTF9TVFJUT0lNQVggPSBASEFWRV9ERUNMX1NUUlRPSU1BWEAKK0hBVkVfREVDTF9TVFJUT0tfUiA9IEBIQVZFX0RFQ0xfU1RSVE9LX1JACitIQVZFX0RFQ0xfU1RSVE9VTUFYID0gQEhBVkVfREVDTF9TVFJUT1VNQVhACitIQVZFX0RVUDIgPSBASEFWRV9EVVAyQAorSEFWRV9GVFJVTkNBVEUgPSBASEFWRV9GVFJVTkNBVEVACitIQVZFX0dFVFNVQk9QVCA9IEBIQVZFX0dFVFNVQk9QVEAKK0hBVkVfSU5UVFlQRVNfSCA9IEBIQVZFX0lOVFRZUEVTX0hACitIQVZFX0lTV0NOVFJMID0gQEhBVkVfSVNXQ05UUkxACitIQVZFX0xPTkdfTE9OR19JTlQgPSBASEFWRV9MT05HX0xPTkdfSU5UQAorSEFWRV9NRU1QQ1BZID0gQEhBVkVfTUVNUENQWUAKK0hBVkVfTUtEVEVNUCA9IEBIQVZFX01LRFRFTVBACitIQVZFX1JFQURMSU5LID0gQEhBVkVfUkVBRExJTktACitIQVZFX1NJR05FRF9TSUdfQVRPTUlDX1QgPSBASEFWRV9TSUdORURfU0lHX0FUT01JQ19UQAorSEFWRV9TSUdORURfV0NIQVJfVCA9IEBIQVZFX1NJR05FRF9XQ0hBUl9UQAorSEFWRV9TSUdORURfV0lOVF9UID0gQEhBVkVfU0lHTkVEX1dJTlRfVEAKK0hBVkVfU0xFRVAgPSBASEFWRV9TTEVFUEAKK0hBVkVfU1RESU5UX0ggPSBASEFWRV9TVERJTlRfSEAKK0hBVkVfU1RQQ1BZID0gQEhBVkVfU1RQQ1BZQAorSEFWRV9TVFBOQ1BZID0gQEhBVkVfU1RQTkNQWUAKK0hBVkVfU1RSQ0FTRUNNUCA9IEBIQVZFX1NUUkNBU0VDTVBACitIQVZFX1NUUkNBU0VTVFIgPSBASEFWRV9TVFJDQVNFU1RSQAorSEFWRV9TVFJDSFJOVUwgPSBASEFWRV9TVFJDSFJOVUxACitIQVZFX1NUUk5EVVAgPSBASEFWRV9TVFJORFVQQAorSEFWRV9TVFJQQlJLID0gQEhBVkVfU1RSUEJSS0AKK0hBVkVfU1RSU0VQID0gQEhBVkVfU1RSU0VQQAorSEFWRV9TWVNfQklUWVBFU19IID0gQEhBVkVfU1lTX0JJVFlQRVNfSEAKK0hBVkVfU1lTX0lOVFRZUEVTX0ggPSBASEFWRV9TWVNfSU5UVFlQRVNfSEAKK0hBVkVfU1lTX1RZUEVTX0ggPSBASEFWRV9TWVNfVFlQRVNfSEAKK0hBVkVfVU5JU1REX0ggPSBASEFWRV9VTklTVERfSEAKK0hBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVCA9IEBIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlRACitIQVZFX1dDVFlQRV9IID0gQEhBVkVfV0NUWVBFX0hACitIQVZFX1dJTlRfVCA9IEBIQVZFX1dJTlRfVEAKK0hBVkVfX0JPT0wgPSBASEFWRV9fQk9PTEAKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSU5UTElOQ1MgPSBASU5UTElOQ1NACitJTlRMTElCUyA9IEBJTlRMTElCU0AKK0lOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKK0lOVFRZUEVTX0ggPSBASU5UVFlQRVNfSEAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQklDT05WID0gQExJQklDT05WQAorTElCSU5UTCA9IEBMSUJJTlRMQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTE5fUyA9IEBMTl9TQAorTFRBTExPQ0EgPSBATFRBTExPQ0FACitMVExJQklDT05WID0gQExUTElCSUNPTlZACitMVExJQklOVEwgPSBATFRMSUJJTlRMQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK0xUX0FHRSA9IEBMVF9BR0VACitMVF9DVVJSRU5UID0gQExUX0NVUlJFTlRACitMVF9SRUxFQVNFID0gQExUX1JFTEVBU0VACitMVF9SRVZJU0lPTiA9IEBMVF9SRVZJU0lPTkAKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTVNHRk1UID0gQE1TR0ZNVEAKK01TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKK01TR01FUkdFID0gQE1TR01FUkdFQAorT0JKRVhUID0gQE9CSkVYVEAKK09TID0gQE9TQAorT1NfTElCUyA9IEBPU19MSUJTQAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBUlRFRExERkxBR1MgPSBAUEFSVEVETERGTEFHU0AKK1BBUlRFRF9MSUJTID0gQFBBUlRFRF9MSUJTQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQT1NVQiA9IEBQT1NVQkAKK1BPV19MSUIgPSBAUE9XX0xJQkAKK1BSSVBUUl9QUkVGSVggPSBAUFJJUFRSX1BSRUZJWEAKK1BSSV9NQUNST1NfQlJPS0VOID0gQFBSSV9NQUNST1NfQlJPS0VOQAorUFRSRElGRl9UX1NVRkZJWCA9IEBQVFJESUZGX1RfU1VGRklYQAorUkFOTElCID0gQFJBTkxJQkAKK1JFSVNFUl9MSUJTID0gQFJFSVNFUl9MSUJTQAorUkVQTEFDRV9DSE9XTiA9IEBSRVBMQUNFX0NIT1dOQAorUkVQTEFDRV9GQ0hESVIgPSBAUkVQTEFDRV9GQ0hESVJACitSRVBMQUNFX0dFVENXRCA9IEBSRVBMQUNFX0dFVENXREAKK1JFUExBQ0VfTUtTVEVNUCA9IEBSRVBMQUNFX01LU1RFTVBACitTRUQgPSBAU0VEQAorU0VMSU5VWF9MSUJTID0gQFNFTElOVVhfTElCU0AKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTSUdfQVRPTUlDX1RfU1VGRklYID0gQFNJR19BVE9NSUNfVF9TVUZGSVhACitTSVpFX1RfU1VGRklYID0gQFNJWkVfVF9TVUZGSVhACitTVERCT09MX0ggPSBAU1REQk9PTF9IQAorU1RESU5UX0ggPSBAU1RESU5UX0hACitTVFJJUCA9IEBTVFJJUEAKK1VTRV9OTFMgPSBAVVNFX05MU0AKK1VVSURfTElCUyA9IEBVVUlEX0xJQlNACitWRVJTSU9OID0gQFZFUlNJT05ACitXQ0hBUl9IID0gQFdDSEFSX0hACitXQ0hBUl9UX1NVRkZJWCA9IEBXQ0hBUl9UX1NVRkZJWEAKK1dDVFlQRV9IID0gQFdDVFlQRV9IQAorV0lOVF9UX1NVRkZJWCA9IEBXSU5UX1RfU1VGRklYQAorWEdFVFRFWFQgPSBAWEdFVFRFWFRACitYR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9DWFggPSBAYWNfY3RfQ1hYQAorYWNfY3RfRjc3ID0gQGFjX2N0X0Y3N0AKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitnbF9MSUJPQkpTID0gQGdsX0xJQk9CSlNACitnbF9MVExJQk9CSlMgPSBAZ2xfTFRMSUJPQkpTQAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK1NVQkRJUlMgPSBhbWlnYSBleHQyIHVmcyBmYXQgbnRmcyBoZnMgbGludXhfc3dhcCB4ZnMgamZzIHJlaXNlcmZzICMgYmZzCitwYXJ0ZWRpbmNsdWRlZGlyID0gLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUKK25vaW5zdF9MVExJQlJBUklFUyA9IGxpYmZzLmxhCitsaWJmc19sYV9MREZMQUdTID0gLXZlcnNpb24taW5mbyAkKExUX0NVUlJFTlQpOiQoTFRfUkVWSVNJT04pOiQoTFRfQUdFKSBcCisJCQktcmVsZWFzZSAkKExUX1JFTEVBU0UpCisKK2xpYmZzX2xhX0xJQkFERCA9ICQoVVVJRF9MSUJTKQkJXAorCQkgICAgJChJTlRMTElCUykJCQlcCisJCSAgICAkKE9TX0xJQlMpCQkJXAorCQkgICAgJChSRUlTRVJfTElCUykJCVwKKwkJICAgIGFtaWdhL2xpYmFtaWdhZnMubGEJCVwKKwkJICAgIGV4dDIvbGliZXh0Mi5sYQkJXAorCQkgICAgdWZzL2xpYnVmcy5sYQkJXAorCQkgICAgZmF0L2xpYmZhdC5sYQkJXAorCQkgICAgbnRmcy9saWJudGZzLmxhCQlcCisJCSAgICBoZnMvbGliaGZzLmxhCQlcCisJCSAgICBsaW51eF9zd2FwL2xpYmxpbnV4c3dhcC5sYQlcCisJCSAgICB4ZnMvbGlieGZzLmxhCQlcCisJCSAgICBqZnMvbGliamZzLmxhCQlcCisJCSAgICByZWlzZXJmcy9saWJyZWlzZXJmcy5sYQorCisjCQkgICAgYmZzL2xpYmJmcy5sYQorbGliZnNfbGFfU09VUkNFUyA9IAorSU5DTFVERVMgPSAkKHBhcnRlZGluY2x1ZGVkaXIpICQoSU5UTElOQ1MpCitNQUlOVEFJTkVSQ0xFQU5GSUxFUyA9IE1ha2VmaWxlLmluCithbGw6IGFsbC1yZWN1cnNpdmUKKworLlNVRkZJWEVTOgorJChzcmNkaXIpL01ha2VmaWxlLmluOiAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggXAorCQkmJiBleGl0IDA7IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251ICBsaWJwYXJ0ZWQvZnMvTWFrZWZpbGUnOyBcCisJY2QgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWdudSAgbGlicGFydGVkL2ZzL01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCitjbGVhbi1ub2luc3RMVExJQlJBUklFUzoKKwktdGVzdCAteiAiJChub2luc3RfTFRMSUJSQVJJRVMpIiB8fCBybSAtZiAkKG5vaW5zdF9MVExJQlJBUklFUykKKwlAbGlzdD0nJChub2luc3RfTFRMSUJSQVJJRVMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBkaXI9ImBlY2hvICQkcCB8IHNlZCAtZSAnc3wvW14vXSokJHx8J2AiOyBcCisJICB0ZXN0ICIkJGRpciIgIT0gIiQkcCIgfHwgZGlyPS47IFwKKwkgIGVjaG8gInJtIC1mIFwiJCR7ZGlyfS9zb19sb2NhdGlvbnNcIiI7IFwKKwkgIHJtIC1mICIkJHtkaXJ9L3NvX2xvY2F0aW9ucyI7IFwKKwlkb25lCitsaWJmcy5sYTogJChsaWJmc19sYV9PQkpFQ1RTKSAkKGxpYmZzX2xhX0RFUEVOREVOQ0lFUykgCisJJChsaWJmc19sYV9MSU5LKSAgJChsaWJmc19sYV9PQkpFQ1RTKSAkKGxpYmZzX2xhX0xJQkFERCkgJChMSUJTKQorCittb3N0bHljbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLiQoT0JKRVhUKQorCitkaXN0Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi50YWIuYworCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworCisjIFRoaXMgZGlyZWN0b3J5J3Mgc3ViZGlyZWN0b3JpZXMgYXJlIG1vc3RseSBpbmRlcGVuZGVudDsgeW91IGNhbiBjZAorIyBpbnRvIHRoZW0gYW5kIHJ1biBgbWFrZScgd2l0aG91dCBnb2luZyB0aHJvdWdoIHRoaXMgTWFrZWZpbGUuCisjIFRvIGNoYW5nZSB0aGUgdmFsdWVzIG9mIGBtYWtlJyB2YXJpYWJsZXM6IGluc3RlYWQgb2YgZWRpdGluZyBNYWtlZmlsZXMsCisjICgxKSBpZiB0aGUgdmFyaWFibGUgaXMgc2V0IGluIGBjb25maWcuc3RhdHVzJywgZWRpdCBgY29uZmlnLnN0YXR1cycKKyMgICAgICh3aGljaCB3aWxsIGNhdXNlIHRoZSBNYWtlZmlsZXMgdG8gYmUgcmVnZW5lcmF0ZWQgd2hlbiB5b3UgcnVuIGBtYWtlJyk7CisjICgyKSBvdGhlcndpc2UsIHBhc3MgdGhlIGRlc2lyZWQgdmFsdWVzIG9uIHRoZSBgbWFrZScgY29tbWFuZCBsaW5lLgorJChSRUNVUlNJVkVfVEFSR0VUUyk6CisJQGZhaWxjb209J2V4aXQgMSc7IFwKKwlmb3IgZiBpbiB4ICQkTUFLRUZMQUdTOyBkbyBcCisJICBjYXNlICQkZiBpbiBcCisJICAgICo9KiB8IC0tWyFrXSopOzsgXAorCSAgICAqayopIGZhaWxjb209J2ZhaWw9eWVzJzs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZG90X3NlZW49bm87IFwKKwl0YXJnZXQ9YGVjaG8gJEAgfCBzZWQgcy8tcmVjdXJzaXZlLy9gOyBcCisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBlY2hvICJNYWtpbmcgJCR0YXJnZXQgaW4gJCRzdWJkaXIiOyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gXAorCSAgICBkb3Rfc2Vlbj15ZXM7IFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldC1hbSI7IFwKKwkgIGVsc2UgXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0IjsgXAorCSAgZmk7IFwKKwkgIChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkJGxvY2FsX3RhcmdldCkgXAorCSAgfHwgZXZhbCAkJGZhaWxjb207IFwKKwlkb25lOyBcCisJaWYgdGVzdCAiJCRkb3Rfc2VlbiIgPSAibm8iOyB0aGVuIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICIkJHRhcmdldC1hbSIgfHwgZXhpdCAxOyBcCisJZmk7IHRlc3QgLXogIiQkZmFpbCIKKworJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUyk6CisJQGZhaWxjb209J2V4aXQgMSc7IFwKKwlmb3IgZiBpbiB4ICQkTUFLRUZMQUdTOyBkbyBcCisJICBjYXNlICQkZiBpbiBcCisJICAgICo9KiB8IC0tWyFrXSopOzsgXAorCSAgICAqayopIGZhaWxjb209J2ZhaWw9eWVzJzs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZG90X3NlZW49bm87IFwKKwljYXNlICIkQCIgaW4gXAorCSAgZGlzdGNsZWFuLSogfCBtYWludGFpbmVyLWNsZWFuLSopIGxpc3Q9JyQoRElTVF9TVUJESVJTKScgOzsgXAorCSAgKikgbGlzdD0nJChTVUJESVJTKScgOzsgXAorCWVzYWM7IFwKKwlyZXY9Jyc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gOjsgZWxzZSBcCisJICAgIHJldj0iJCRzdWJkaXIgJCRyZXYiOyBcCisJICBmaTsgXAorCWRvbmU7IFwKKwlyZXY9IiQkcmV2IC4iOyBcCisJdGFyZ2V0PWBlY2hvICRAIHwgc2VkIHMvLXJlY3Vyc2l2ZS8vYDsgXAorCWZvciBzdWJkaXIgaW4gJCRyZXY7IGRvIFwKKwkgIGVjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQtYW0iOyBcCisJICBlbHNlIFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKKwkgIGZpOyBcCisJICAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRsb2NhbF90YXJnZXQpIFwKKwkgIHx8IGV2YWwgJCRmYWlsY29tOyBcCisJZG9uZSAmJiB0ZXN0IC16ICIkJGZhaWwiCit0YWdzLXJlY3Vyc2l2ZToKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHRhZ3MpOyBcCisJZG9uZQorY3RhZ3MtcmVjdXJzaXZlOgorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgdGVzdCAiJCRzdWJkaXIiID0gLiB8fCAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY3RhZ3MpOyBcCisJZG9uZQorCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJbWtpZCAtZklEICQkdW5pcXVlCit0YWdzOiBUQUdTCisKK1RBR1M6IHRhZ3MtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwl0YWdzPTsgXAorCWhlcmU9YHB3ZGA7IFwKKwlpZiAoJChFVEFHUykgLS1ldGFncy1pbmNsdWRlIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKKwkgIGluY2x1ZGVfb3B0aW9uPS0tZXRhZ3MtaW5jbHVkZTsgXAorCSAgZW1wdHlfZml4PS47IFwKKwllbHNlIFwKKwkgIGluY2x1ZGVfb3B0aW9uPS0taW5jbHVkZTsgXAorCSAgZW1wdHlfZml4PTsgXAorCWZpOyBcCisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAorCSAgICB0ZXN0ICEgLWYgJCRzdWJkaXIvVEFHUyB8fCBcCisJICAgICAgdGFncz0iJCR0YWdzICQkaW5jbHVkZV9vcHRpb249JCRoZXJlLyQkc3ViZGlyL1RBR1MiOyBcCisJICBmaTsgXAorCWRvbmU7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKKwkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorCSAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAkJHRhZ3MgJCR1bmlxdWU7IFwKKwlmaQorY3RhZ3M6IENUQUdTCitDVEFHUzogY3RhZ3MtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwl0YWdzPTsgXAorCWhlcmU9YHB3ZGA7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKKwkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKKwl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiIFwKKwkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKKwkgICAgICQkdGFncyAkJHVuaXF1ZQorCitHVEFHUzoKKwloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorCSAgJiYgY2QgJCh0b3Bfc3JjZGlyKSBcCisJICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICQkaGVyZQorCitkaXN0Y2xlYW4tdGFnczoKKwktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLXBSICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtcFIgJCRkLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAkKGRpc3RkaXIpLyQkZmlsZSBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgJChkaXN0ZGlyKS8kJGZpbGUgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorCWxpc3Q9JyQoRElTVF9TVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAorCSAgICB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCisJICAgIHx8ICQoTUtESVJfUCkgIiQoZGlzdGRpcikvJCRzdWJkaXIiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICAgIGRpc3RkaXI9YCQoYW1fX2NkKSAkKGRpc3RkaXIpICYmIHB3ZGA7IFwKKwkgICAgdG9wX2Rpc3RkaXI9YCQoYW1fX2NkKSAkKHRvcF9kaXN0ZGlyKSAmJiBwd2RgOyBcCisJICAgIChjZCAkJHN1YmRpciAmJiBcCisJICAgICAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgXAorCSAgICAgICAgdG9wX2Rpc3RkaXI9IiQkdG9wX2Rpc3RkaXIiIFwKKwkgICAgICAgIGRpc3RkaXI9IiQkZGlzdGRpci8kJHN1YmRpciIgXAorCQlhbV9fcmVtb3ZlX2Rpc3RkaXI9OiBcCisJCWFtX19za2lwX2xlbmd0aF9jaGVjaz06IFwKKwkgICAgICAgIGRpc3RkaXIpIFwKKwkgICAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorY2hlY2stYW06IGFsbC1hbQorY2hlY2s6IGNoZWNrLXJlY3Vyc2l2ZQorYWxsLWFtOiBNYWtlZmlsZSAkKExUTElCUkFSSUVTKQoraW5zdGFsbGRpcnM6IGluc3RhbGxkaXJzLXJlY3Vyc2l2ZQoraW5zdGFsbGRpcnMtYW06CitpbnN0YWxsOiBpbnN0YWxsLXJlY3Vyc2l2ZQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1yZWN1cnNpdmUKK3VuaW5zdGFsbDogdW5pbnN0YWxsLXJlY3Vyc2l2ZQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1yZWN1cnNpdmUKK2luc3RhbGwtc3RyaXA6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCisJICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCisJLXRlc3QgLXogIiQoTUFJTlRBSU5FUkNMRUFORklMRVMpIiB8fCBybSAtZiAkKE1BSU5UQUlORVJDTEVBTkZJTEVTKQorY2xlYW46IGNsZWFuLXJlY3Vyc2l2ZQorCitjbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdExUTElCUkFSSUVTIFwKKwltb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1yZWN1cnNpdmUKKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi10YWdzCisKK2R2aTogZHZpLXJlY3Vyc2l2ZQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtcmVjdXJzaXZlCisKK2luZm86IGluZm8tcmVjdXJzaXZlCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbToKKworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLXJlY3Vyc2l2ZQorCitpbnN0YWxsLWV4ZWMtYW06CisKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLXJlY3Vyc2l2ZQorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1yZWN1cnNpdmUKKworaW5zdGFsbC1tYW46CisKK2luc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1yZWN1cnNpdmUKKworaW5zdGFsbC1wczogaW5zdGFsbC1wcy1yZWN1cnNpdmUKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tcmVjdXJzaXZlCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtcmVjdXJzaXZlCisKK3BkZi1hbToKKworcHM6IHBzLXJlY3Vyc2l2ZQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOgorCisuTUFLRTogJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUykgJChSRUNVUlNJVkVfVEFSR0VUUykgaW5zdGFsbC1hbSBcCisJaW5zdGFsbC1zdHJpcAorCisuUEhPTlk6ICQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpICQoUkVDVVJTSVZFX1RBUkdFVFMpIENUQUdTIEdUQUdTIFwKKwlhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBcCisJY2xlYW4tbm9pbnN0TFRMSUJSQVJJRVMgY3RhZ3MgY3RhZ3MtcmVjdXJzaXZlIGRpc3RjbGVhbiBcCisJZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgXAorCWRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIFwKKwlpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBcCisJaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgXAorCWluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIFwKKwlpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAorCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCisJaW5zdGFsbGRpcnMtYW0gbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdGFncy1yZWN1cnNpdmUgXAorCXVuaW5zdGFsbCB1bmluc3RhbGwtYW0KKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9hbWlnYS9NYWtlZmlsZS5hbSBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvYW1pZ2EvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk5ZmVjMgotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvYW1pZ2EvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSwxNiBAQAorcGFydGVkaW5jbHVkZWRpciAgICAgID0JLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUKKworbm9pbnN0X0xUTElCUkFSSUVTICAgID0JbGliYW1pZ2Fmcy5sYQorbGliYW1pZ2Fmc19sYV9TT1VSQ0VTICAgPQlhbWlnYS5oCQlcCisJCQlhbWlnYS5jCQlcCisJCQlhZmZzLmgJCVwKKwkJCWFmZnMuYwkJXAorCQkJYXNmcy5oCQlcCisJCQlhc2ZzLmMJCVwKKwkJCWFwZnMuaAkJXAorCQkJYXBmcy5jCQlcCisJCQlpbnRlcmZhY2UuYworCitJTkNMVURFUyA9ICQocGFydGVkaW5jbHVkZWRpcikgJChJTlRMSU5DUykKKworTUFJTlRBSU5FUkNMRUFORklMRVMgPSBNYWtlZmlsZS5pbgpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9hbWlnYS9NYWtlZmlsZS5pbiBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvYW1pZ2EvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI1Y2U1NwotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvYW1pZ2EvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw2MzggQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTAgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorCitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorc3ViZGlyID0gbGlicGFydGVkL2ZzL2FtaWdhCitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200L2Fic29sdXRlLWhlYWRlci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9hbGxvY2EubTQgJCh0b3Bfc3JjZGlyKS9tNC9hc3NlcnQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvYXRleGl0Lm00ICQodG9wX3NyY2RpcikvbTQvY2FsbG9jLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2Nsb3NlLXN0cmVhbS5tNCAkKHRvcF9zcmNkaXIpL200L2Nsb3Nlb3V0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NvZGVzZXQubTQgJCh0b3Bfc3JjZGlyKS9tNC9jb25maWctaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9kaXJuYW1lLm00ICQodG9wX3NyY2RpcikvbTQvZG9zLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2RvdWJsZS1zbGFzaC1yb290Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2Vycm9yLm00ICQodG9wX3NyY2RpcikvbTQvZXhpdGZhaWwubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZXh0ZW5zaW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2ZwZW5kaW5nLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ZyZWUubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXRvcHQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCAkKHRvcF9zcmNkaXIpL200L2dsaWJjMjEubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZ251bGliLWNvbW1vbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9nbnVsaWItY29tcC5tNCAkKHRvcF9zcmNkaXIpL200L2ljb252Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2lubGluZS5tNCAkKHRvcF9zcmNkaXIpL200L2ludHR5cGVzLXByaS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pbnR0eXBlcy5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1pZ25vcmUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sb2NhbGNoYXJzZXQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbG9uZy1vcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbG9uZ2xvbmcubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWJydG93Yy5tNCAkKHRvcF9zcmNkaXIpL200L21ic3RhdGVfdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tZW1jaHIubTQgJCh0b3Bfc3JjZGlyKS9tNC9tZW1jbXAubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWVtY3B5Lm00ICQodG9wX3NyY2RpcikvbTQvbWVtbW92ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tZW1zZXQubTQgJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcG8ubTQgJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9xdW90ZWFyZy5tNCAkKHRvcF9zcmNkaXIpL200L3JlZ2V4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3JlbmFtZS5tNCAkKHRvcF9zcmNkaXIpL200L3JwbWF0Y2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc2FmZS1yZWFkLm00ICQodG9wX3NyY2RpcikvbTQvc2FmZS13cml0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zc2l6ZV90Lm00ICQodG9wX3NyY2RpcikvbTQvc3RkYXJnLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0ZGJvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGRpbnQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RkbGliX2gubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHJjc3BuLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0cmluZ19oLm00ICQodG9wX3NyY2RpcikvbTQvc3RybmR1cC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdHJubGVuLm00ICQodG9wX3NyY2RpcikvbTQvc3RydG9kLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0cnRvbC5tNCAkKHRvcF9zcmNkaXIpL200L3VuaXN0ZF9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3V0aW1idWYubTQgJCh0b3Bfc3JjZGlyKS9tNC91dGltZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC91dGltZXMtbnVsbC5tNCAkKHRvcF9zcmNkaXIpL200L3djaGFyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3djdHlwZS5tNCAkKHRvcF9zcmNkaXIpL200L3dpbnRfdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC94YWxsb2MubTQgJCh0b3Bfc3JjZGlyKS9tNC94c3RybmR1cC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oCitDT05GSUdfQ0xFQU5fRklMRVMgPQorTFRMSUJSQVJJRVMgPSAkKG5vaW5zdF9MVExJQlJBUklFUykKK2xpYmFtaWdhZnNfbGFfTElCQUREID0KK2FtX2xpYmFtaWdhZnNfbGFfT0JKRUNUUyA9IGFtaWdhLmxvIGFmZnMubG8gYXNmcy5sbyBhcGZzLmxvIFwKKwlpbnRlcmZhY2UubG8KK2xpYmFtaWdhZnNfbGFfT0JKRUNUUyA9ICQoYW1fbGliYW1pZ2Fmc19sYV9PQkpFQ1RTKQorREVGQVVMVF9JTkNMVURFUyA9IC1JLiAtSSQodG9wX2J1aWxkZGlyKS9saWJAYW1fX2lzcmNACitkZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvZGVwY29tcAorYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKK0NPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAorCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0xUQ09NUElMRSA9ICQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCisJLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpIFwKKwkkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitDQ0xEID0gJChDQykKK0xJTksgPSAkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorCS0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpIFwKKwkkKExERkxBR1MpIC1vICRACitTT1VSQ0VTID0gJChsaWJhbWlnYWZzX2xhX1NPVVJDRVMpCitESVNUX1NPVVJDRVMgPSAkKGxpYmFtaWdhZnNfbGFfU09VUkNFUykKK0VUQUdTID0gZXRhZ3MKK0NUQUdTID0gY3RhZ3MKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitBQlNPTFVURV9JTlRUWVBFU19IID0gQEFCU09MVVRFX0lOVFRZUEVTX0hACitBQlNPTFVURV9TVERJTlRfSCA9IEBBQlNPTFVURV9TVERJTlRfSEAKK0FCU09MVVRFX1NURExJQl9IID0gQEFCU09MVVRFX1NURExJQl9IQAorQUJTT0xVVEVfU1RSSU5HX0ggPSBAQUJTT0xVVEVfU1RSSU5HX0hACitBQlNPTFVURV9VTklTVERfSCA9IEBBQlNPTFVURV9VTklTVERfSEAKK0FCU09MVVRFX1dDSEFSX0ggPSBAQUJTT0xVVEVfV0NIQVJfSEAKK0FCU09MVVRFX1dDVFlQRV9IID0gQEFCU09MVVRFX1dDVFlQRV9IQAorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQUxMT0NBID0gQEFMTE9DQUAKK0FMTE9DQV9IID0gQEFMTE9DQV9IQAorQU1UQVIgPSBAQU1UQVJACitBUiA9IEBBUkAKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBV0sgPSBAQVdLQAorQklUU0laRU9GX1BUUkRJRkZfVCA9IEBCSVRTSVpFT0ZfUFRSRElGRl9UQAorQklUU0laRU9GX1NJR19BVE9NSUNfVCA9IEBCSVRTSVpFT0ZfU0lHX0FUT01JQ19UQAorQklUU0laRU9GX1NJWkVfVCA9IEBCSVRTSVpFT0ZfU0laRV9UQAorQklUU0laRU9GX1dDSEFSX1QgPSBAQklUU0laRU9GX1dDSEFSX1RACitCSVRTSVpFT0ZfV0lOVF9UID0gQEJJVFNJWkVPRl9XSU5UX1RACitCVUlMRElORk8gPSBAQlVJTERJTkZPQAorQ0MgPSBAQ0NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NIRUNLX0NGTEFHUyA9IEBDSEVDS19DRkxBR1NACitDSEVDS19MSUJTID0gQENIRUNLX0xJQlNACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitETF9MSUJTID0gQERMX0xJQlNACitETV9MSUJTID0gQERNX0xJQlNACitFQ0hPID0gQEVDSE9ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VYRUVYVCA9IEBFWEVFWFRACitGNzcgPSBARjc3QAorRkZMQUdTID0gQEZGTEFHU0AKK0dFVE9QVF9IID0gQEdFVE9QVF9IQAorR0xJQkMyMSA9IEBHTElCQzIxQAorR01TR0ZNVCA9IEBHTVNHRk1UQAorR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACitHTlVMSUJfQ0hPV04gPSBAR05VTElCX0NIT1dOQAorR05VTElCX0RVUDIgPSBAR05VTElCX0RVUDJACitHTlVMSUJfRkNIRElSID0gQEdOVUxJQl9GQ0hESVJACitHTlVMSUJfRlRSVU5DQVRFID0gQEdOVUxJQl9GVFJVTkNBVEVACitHTlVMSUJfR0VUQ1dEID0gQEdOVUxJQl9HRVRDV0RACitHTlVMSUJfR0VUTE9HSU5fUiA9IEBHTlVMSUJfR0VUTE9HSU5fUkAKK0dOVUxJQl9HRVRTVUJPUFQgPSBAR05VTElCX0dFVFNVQk9QVEAKK0dOVUxJQl9JTUFYQUJTID0gQEdOVUxJQl9JTUFYQUJTQAorR05VTElCX0lNQVhESVYgPSBAR05VTElCX0lNQVhESVZACitHTlVMSUJfTUJTQ0FTRUNNUCA9IEBHTlVMSUJfTUJTQ0FTRUNNUEAKK0dOVUxJQl9NQlNDQVNFU1RSID0gQEdOVUxJQl9NQlNDQVNFU1RSQAorR05VTElCX01CU0NIUiA9IEBHTlVMSUJfTUJTQ0hSQAorR05VTElCX01CU0NTUE4gPSBAR05VTElCX01CU0NTUE5ACitHTlVMSUJfTUJTTEVOID0gQEdOVUxJQl9NQlNMRU5ACitHTlVMSUJfTUJTTkNBU0VDTVAgPSBAR05VTElCX01CU05DQVNFQ01QQAorR05VTElCX01CU1BCUksgPSBAR05VTElCX01CU1BCUktACitHTlVMSUJfTUJTUENBU0VDTVAgPSBAR05VTElCX01CU1BDQVNFQ01QQAorR05VTElCX01CU1JDSFIgPSBAR05VTElCX01CU1JDSFJACitHTlVMSUJfTUJTU0VQID0gQEdOVUxJQl9NQlNTRVBACitHTlVMSUJfTUJTU1BOID0gQEdOVUxJQl9NQlNTUE5ACitHTlVMSUJfTUJTU1RSID0gQEdOVUxJQl9NQlNTVFJACitHTlVMSUJfTUJTVE9LX1IgPSBAR05VTElCX01CU1RPS19SQAorR05VTElCX01FTU1FTSA9IEBHTlVMSUJfTUVNTUVNQAorR05VTElCX01FTVBDUFkgPSBAR05VTElCX01FTVBDUFlACitHTlVMSUJfTUVNUkNIUiA9IEBHTlVMSUJfTUVNUkNIUkAKK0dOVUxJQl9NS0RURU1QID0gQEdOVUxJQl9NS0RURU1QQAorR05VTElCX01LU1RFTVAgPSBAR05VTElCX01LU1RFTVBACitHTlVMSUJfUkVBRExJTksgPSBAR05VTElCX1JFQURMSU5LQAorR05VTElCX1NMRUVQID0gQEdOVUxJQl9TTEVFUEAKK0dOVUxJQl9TVFBDUFkgPSBAR05VTElCX1NUUENQWUAKK0dOVUxJQl9TVFBOQ1BZID0gQEdOVUxJQl9TVFBOQ1BZQAorR05VTElCX1NUUkNBU0VTVFIgPSBAR05VTElCX1NUUkNBU0VTVFJACitHTlVMSUJfU1RSQ0hSTlVMID0gQEdOVUxJQl9TVFJDSFJOVUxACitHTlVMSUJfU1RSRFVQID0gQEdOVUxJQl9TVFJEVVBACitHTlVMSUJfU1RSTkRVUCA9IEBHTlVMSUJfU1RSTkRVUEAKK0dOVUxJQl9TVFJOTEVOID0gQEdOVUxJQl9TVFJOTEVOQAorR05VTElCX1NUUlBCUksgPSBAR05VTElCX1NUUlBCUktACitHTlVMSUJfU1RSU0VQID0gQEdOVUxJQl9TVFJTRVBACitHTlVMSUJfU1RSVE9JTUFYID0gQEdOVUxJQl9TVFJUT0lNQVhACitHTlVMSUJfU1RSVE9LX1IgPSBAR05VTElCX1NUUlRPS19SQAorR05VTElCX1NUUlRPVU1BWCA9IEBHTlVMSUJfU1RSVE9VTUFYQAorR1JFUCA9IEBHUkVQQAorSEFWRV9ERUNMX0dFVExPR0lOX1IgPSBASEFWRV9ERUNMX0dFVExPR0lOX1JACitIQVZFX0RFQ0xfSU1BWEFCUyA9IEBIQVZFX0RFQ0xfSU1BWEFCU0AKK0hBVkVfREVDTF9JTUFYRElWID0gQEhBVkVfREVDTF9JTUFYRElWQAorSEFWRV9ERUNMX01FTU1FTSA9IEBIQVZFX0RFQ0xfTUVNTUVNQAorSEFWRV9ERUNMX01FTVJDSFIgPSBASEFWRV9ERUNMX01FTVJDSFJACitIQVZFX0RFQ0xfU1RSRFVQID0gQEhBVkVfREVDTF9TVFJEVVBACitIQVZFX0RFQ0xfU1RSTkNBU0VDTVAgPSBASEFWRV9ERUNMX1NUUk5DQVNFQ01QQAorSEFWRV9ERUNMX1NUUk5EVVAgPSBASEFWRV9ERUNMX1NUUk5EVVBACitIQVZFX0RFQ0xfU1RSTkxFTiA9IEBIQVZFX0RFQ0xfU1RSTkxFTkAKK0hBVkVfREVDTF9TVFJUT0lNQVggPSBASEFWRV9ERUNMX1NUUlRPSU1BWEAKK0hBVkVfREVDTF9TVFJUT0tfUiA9IEBIQVZFX0RFQ0xfU1RSVE9LX1JACitIQVZFX0RFQ0xfU1RSVE9VTUFYID0gQEhBVkVfREVDTF9TVFJUT1VNQVhACitIQVZFX0RVUDIgPSBASEFWRV9EVVAyQAorSEFWRV9GVFJVTkNBVEUgPSBASEFWRV9GVFJVTkNBVEVACitIQVZFX0dFVFNVQk9QVCA9IEBIQVZFX0dFVFNVQk9QVEAKK0hBVkVfSU5UVFlQRVNfSCA9IEBIQVZFX0lOVFRZUEVTX0hACitIQVZFX0lTV0NOVFJMID0gQEhBVkVfSVNXQ05UUkxACitIQVZFX0xPTkdfTE9OR19JTlQgPSBASEFWRV9MT05HX0xPTkdfSU5UQAorSEFWRV9NRU1QQ1BZID0gQEhBVkVfTUVNUENQWUAKK0hBVkVfTUtEVEVNUCA9IEBIQVZFX01LRFRFTVBACitIQVZFX1JFQURMSU5LID0gQEhBVkVfUkVBRExJTktACitIQVZFX1NJR05FRF9TSUdfQVRPTUlDX1QgPSBASEFWRV9TSUdORURfU0lHX0FUT01JQ19UQAorSEFWRV9TSUdORURfV0NIQVJfVCA9IEBIQVZFX1NJR05FRF9XQ0hBUl9UQAorSEFWRV9TSUdORURfV0lOVF9UID0gQEhBVkVfU0lHTkVEX1dJTlRfVEAKK0hBVkVfU0xFRVAgPSBASEFWRV9TTEVFUEAKK0hBVkVfU1RESU5UX0ggPSBASEFWRV9TVERJTlRfSEAKK0hBVkVfU1RQQ1BZID0gQEhBVkVfU1RQQ1BZQAorSEFWRV9TVFBOQ1BZID0gQEhBVkVfU1RQTkNQWUAKK0hBVkVfU1RSQ0FTRUNNUCA9IEBIQVZFX1NUUkNBU0VDTVBACitIQVZFX1NUUkNBU0VTVFIgPSBASEFWRV9TVFJDQVNFU1RSQAorSEFWRV9TVFJDSFJOVUwgPSBASEFWRV9TVFJDSFJOVUxACitIQVZFX1NUUk5EVVAgPSBASEFWRV9TVFJORFVQQAorSEFWRV9TVFJQQlJLID0gQEhBVkVfU1RSUEJSS0AKK0hBVkVfU1RSU0VQID0gQEhBVkVfU1RSU0VQQAorSEFWRV9TWVNfQklUWVBFU19IID0gQEhBVkVfU1lTX0JJVFlQRVNfSEAKK0hBVkVfU1lTX0lOVFRZUEVTX0ggPSBASEFWRV9TWVNfSU5UVFlQRVNfSEAKK0hBVkVfU1lTX1RZUEVTX0ggPSBASEFWRV9TWVNfVFlQRVNfSEAKK0hBVkVfVU5JU1REX0ggPSBASEFWRV9VTklTVERfSEAKK0hBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVCA9IEBIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlRACitIQVZFX1dDVFlQRV9IID0gQEhBVkVfV0NUWVBFX0hACitIQVZFX1dJTlRfVCA9IEBIQVZFX1dJTlRfVEAKK0hBVkVfX0JPT0wgPSBASEFWRV9fQk9PTEAKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSU5UTElOQ1MgPSBASU5UTElOQ1NACitJTlRMTElCUyA9IEBJTlRMTElCU0AKK0lOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKK0lOVFRZUEVTX0ggPSBASU5UVFlQRVNfSEAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQklDT05WID0gQExJQklDT05WQAorTElCSU5UTCA9IEBMSUJJTlRMQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTE5fUyA9IEBMTl9TQAorTFRBTExPQ0EgPSBATFRBTExPQ0FACitMVExJQklDT05WID0gQExUTElCSUNPTlZACitMVExJQklOVEwgPSBATFRMSUJJTlRMQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK0xUX0FHRSA9IEBMVF9BR0VACitMVF9DVVJSRU5UID0gQExUX0NVUlJFTlRACitMVF9SRUxFQVNFID0gQExUX1JFTEVBU0VACitMVF9SRVZJU0lPTiA9IEBMVF9SRVZJU0lPTkAKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTVNHRk1UID0gQE1TR0ZNVEAKK01TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKK01TR01FUkdFID0gQE1TR01FUkdFQAorT0JKRVhUID0gQE9CSkVYVEAKK09TID0gQE9TQAorT1NfTElCUyA9IEBPU19MSUJTQAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBUlRFRExERkxBR1MgPSBAUEFSVEVETERGTEFHU0AKK1BBUlRFRF9MSUJTID0gQFBBUlRFRF9MSUJTQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQT1NVQiA9IEBQT1NVQkAKK1BPV19MSUIgPSBAUE9XX0xJQkAKK1BSSVBUUl9QUkVGSVggPSBAUFJJUFRSX1BSRUZJWEAKK1BSSV9NQUNST1NfQlJPS0VOID0gQFBSSV9NQUNST1NfQlJPS0VOQAorUFRSRElGRl9UX1NVRkZJWCA9IEBQVFJESUZGX1RfU1VGRklYQAorUkFOTElCID0gQFJBTkxJQkAKK1JFSVNFUl9MSUJTID0gQFJFSVNFUl9MSUJTQAorUkVQTEFDRV9DSE9XTiA9IEBSRVBMQUNFX0NIT1dOQAorUkVQTEFDRV9GQ0hESVIgPSBAUkVQTEFDRV9GQ0hESVJACitSRVBMQUNFX0dFVENXRCA9IEBSRVBMQUNFX0dFVENXREAKK1JFUExBQ0VfTUtTVEVNUCA9IEBSRVBMQUNFX01LU1RFTVBACitTRUQgPSBAU0VEQAorU0VMSU5VWF9MSUJTID0gQFNFTElOVVhfTElCU0AKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTSUdfQVRPTUlDX1RfU1VGRklYID0gQFNJR19BVE9NSUNfVF9TVUZGSVhACitTSVpFX1RfU1VGRklYID0gQFNJWkVfVF9TVUZGSVhACitTVERCT09MX0ggPSBAU1REQk9PTF9IQAorU1RESU5UX0ggPSBAU1RESU5UX0hACitTVFJJUCA9IEBTVFJJUEAKK1VTRV9OTFMgPSBAVVNFX05MU0AKK1VVSURfTElCUyA9IEBVVUlEX0xJQlNACitWRVJTSU9OID0gQFZFUlNJT05ACitXQ0hBUl9IID0gQFdDSEFSX0hACitXQ0hBUl9UX1NVRkZJWCA9IEBXQ0hBUl9UX1NVRkZJWEAKK1dDVFlQRV9IID0gQFdDVFlQRV9IQAorV0lOVF9UX1NVRkZJWCA9IEBXSU5UX1RfU1VGRklYQAorWEdFVFRFWFQgPSBAWEdFVFRFWFRACitYR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9DWFggPSBAYWNfY3RfQ1hYQAorYWNfY3RfRjc3ID0gQGFjX2N0X0Y3N0AKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitnbF9MSUJPQkpTID0gQGdsX0xJQk9CSlNACitnbF9MVExJQk9CSlMgPSBAZ2xfTFRMSUJPQkpTQAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK3BhcnRlZGluY2x1ZGVkaXIgPSAtSSQodG9wX3NyY2RpcikvaW5jbHVkZQorbm9pbnN0X0xUTElCUkFSSUVTID0gbGliYW1pZ2Fmcy5sYQorbGliYW1pZ2Fmc19sYV9TT1VSQ0VTID0gYW1pZ2EuaAkJXAorCQkJYW1pZ2EuYwkJXAorCQkJYWZmcy5oCQlcCisJCQlhZmZzLmMJCVwKKwkJCWFzZnMuaAkJXAorCQkJYXNmcy5jCQlcCisJCQlhcGZzLmgJCVwKKwkJCWFwZnMuYwkJXAorCQkJaW50ZXJmYWNlLmMKKworSU5DTFVERVMgPSAkKHBhcnRlZGluY2x1ZGVkaXIpICQoSU5UTElOQ1MpCitNQUlOVEFJTkVSQ0xFQU5GSUxFUyA9IE1ha2VmaWxlLmluCithbGw6IGFsbC1hbQorCisuU1VGRklYRVM6CisuU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCiskKHNyY2RpcikvTWFrZWZpbGUuaW46ICAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCBcCisJCSYmIGV4aXQgMDsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgIGxpYnBhcnRlZC9mcy9hbWlnYS9NYWtlZmlsZSc7IFwKKwljZCAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZ251ICBsaWJwYXJ0ZWQvZnMvYW1pZ2EvTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6ICAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6ICAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKK2NsZWFuLW5vaW5zdExUTElCUkFSSUVTOgorCS10ZXN0IC16ICIkKG5vaW5zdF9MVExJQlJBUklFUykiIHx8IHJtIC1mICQobm9pbnN0X0xUTElCUkFSSUVTKQorCUBsaXN0PSckKG5vaW5zdF9MVExJQlJBUklFUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGRpcj0iYGVjaG8gJCRwIHwgc2VkIC1lICdzfC9bXi9dKiQkfHwnYCI7IFwKKwkgIHRlc3QgIiQkZGlyIiAhPSAiJCRwIiB8fCBkaXI9LjsgXAorCSAgZWNobyAicm0gLWYgXCIkJHtkaXJ9L3NvX2xvY2F0aW9uc1wiIjsgXAorCSAgcm0gLWYgIiQke2Rpcn0vc29fbG9jYXRpb25zIjsgXAorCWRvbmUKK2xpYmFtaWdhZnMubGE6ICQobGliYW1pZ2Fmc19sYV9PQkpFQ1RTKSAkKGxpYmFtaWdhZnNfbGFfREVQRU5ERU5DSUVTKSAKKwkkKExJTkspICAkKGxpYmFtaWdhZnNfbGFfT0JKRUNUUykgJChsaWJhbWlnYWZzX2xhX0xJQkFERCkgJChMSUJTKQorCittb3N0bHljbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLiQoT0JKRVhUKQorCitkaXN0Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi50YWIuYworCitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYWZmcy5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2FtaWdhLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYXBmcy5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2FzZnMuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9pbnRlcmZhY2UuUGxvQGFtX19xdW90ZUAKKworLmMubzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyAkPAorCisuYy5vYmo6CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKK0BhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyBgJChDWUdQQVRIX1cpICckPCdgCisKKy5jLmxvOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMVENPTVBJTEUpIC1jIC1vICRAICQ8CisKK21vc3RseWNsZWFuLWxpYnRvb2w6CisJLXJtIC1mICoubG8KKworY2xlYW4tbGlidG9vbDoKKwktcm0gLXJmIC5saWJzIF9saWJzCisKK0lEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKKwkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKKwlta2lkIC1mSUQgJCR1bmlxdWUKK3RhZ3M6IFRBR1MKKworVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwl0YWdzPTsgXAorCWhlcmU9YHB3ZGA7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKKwkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorCSAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAkJHRhZ3MgJCR1bmlxdWU7IFwKKwlmaQorY3RhZ3M6IENUQUdTCitDVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwl0YWdzPTsgXAorCWhlcmU9YHB3ZGA7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKKwkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKKwl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiIFwKKwkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKKwkgICAgICQkdGFncyAkJHVuaXF1ZQorCitHVEFHUzoKKwloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorCSAgJiYgY2QgJCh0b3Bfc3JjZGlyKSBcCisJICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICQkaGVyZQorCitkaXN0Y2xlYW4tdGFnczoKKwktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLXBSICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtcFIgJCRkLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAkKGRpc3RkaXIpLyQkZmlsZSBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgJChkaXN0ZGlyKS8kJGZpbGUgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorY2hlY2stYW06IGFsbC1hbQorY2hlY2s6IGNoZWNrLWFtCithbGwtYW06IE1ha2VmaWxlICQoTFRMSUJSQVJJRVMpCitpbnN0YWxsZGlyczoKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCisJICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCisJLXRlc3QgLXogIiQoTUFJTlRBSU5FUkNMRUFORklMRVMpIiB8fCBybSAtZiAkKE1BSU5UQUlORVJDTEVBTkZJTEVTKQorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0TFRMSUJSQVJJRVMgXAorCW1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1leGVjLWFtOgorCitpbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1hbQorCitwZGYtYW06CisKK3BzOiBwcy1hbQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOgorCisuTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisKKy5QSE9OWTogQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKKwljbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdExUTElCUkFSSUVTIGN0YWdzIGRpc3RjbGVhbiBcCisJZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgXAorCWRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIFwKKwlpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBcCisJaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgXAorCWluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIFwKKwlpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAorCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCisJbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAorCW1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIFwKKwlwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbQorCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2FtaWdhL2FmZnMuYyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvYW1pZ2EvYWZmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwOTlmYWEKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2FtaWdhL2FmZnMuYwpAQCAtMCwwICsxLDQ2MyBAQAorLyoKKyAgICBhZmZzLmMgLS0gcGFydGVkIHN1cHBvcnQgZm9yIGFmZnMgZmlsZSBzeXN0ZW1zCisgICAgQ29weXJpZ2h0IChDKSAxOTk4LTIwMDAsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgIAorICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpbmNsdWRlIDxwYXJ0ZWQvcGFydGVkLmg+CisjaW5jbHVkZSA8cGFydGVkL2RlYnVnLmg+CisjaW5jbHVkZSA8cGFydGVkL2VuZGlhbi5oPgorCisjaW5jbHVkZSAiYW1pZ2EuaCIKKyNpbmNsdWRlICJhZmZzLmgiCisKKyNpZiBFTkFCTEVfTkxTCisjICBpbmNsdWRlIDxsaWJpbnRsLmg+CisjICBkZWZpbmUgXyhTdHJpbmcpIGRnZXR0ZXh0IChQQUNLQUdFLCBTdHJpbmcpCisjZWxzZQorIyAgZGVmaW5lIF8oU3RyaW5nKSAoU3RyaW5nKQorI2VuZGlmIC8qIEVOQUJMRV9OTFMgKi8KKworc3RhdGljIGludAorX2FmZnNfcHJvYmVfcm9vdCAodWludDMyX3QgKmJsb2NrLCBpbnQgYmxvY2tzaXplKSB7CisJaW50IGk7CisJdWludDMyX3Qgc3VtOworCisJaWYgKFBFRF9CRTMyX1RPX0NQVSAoYmxvY2tbMF0pICE9IDIpIHJldHVybiAwOworCWlmIChQRURfQkUzMl9UT19DUFUgKGJsb2NrWzEyOCpibG9ja3NpemUtMV0pICE9IDEpIHJldHVybiAwOworCWZvciAoaSA9IDAsIHN1bSA9IDA7IGkgPCAxMjgqYmxvY2tzaXplOyBpKyspCisJCXN1bSArPSBQRURfQkUzMl9UT19DUFUgKGJsb2NrW2ldKTsKKwlpZiAoc3VtKSByZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIFBlZEdlb21ldHJ5KgorX2dlbmVyaWNfYWZmc19wcm9iZSAoUGVkR2VvbWV0cnkqIGdlb20sIHVpbnQzMl90IGtpbmQpCit7CisJdWludDMyX3QgKmJsb2NrOworCVBlZFNlY3RvciByb290LCBsZW4sIHBvczsKKwlzdHJ1Y3QgUGFydGl0aW9uQmxvY2sgKiBwYXJ0OworCWludCBibG9ja3NpemUgPSAxLCByZXNlcnZlZCA9IDIsIHByZWFsbG9jID0gMDsKKworCVBFRF9BU1NFUlQgKGdlb20gIT0gTlVMTCwgcmV0dXJuIE5VTEwpOworCVBFRF9BU1NFUlQgKGdlb20tPmRldiAhPSBOVUxMLCByZXR1cm4gTlVMTCk7CisKKwkvKiBGaW5kcyB0aGUgYmxvY2tzaXplLCBwcmVhbGxvYyBhbmQgcmVzZXJ2ZWQgdmFsdWVzIG9mIHRoZSBwYXJ0aXRpb24gYmxvY2sgKi8KKwlpZiAoIShwYXJ0ID0gcGVkX21hbGxvYyAoUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQqYmxvY2tzaXplKSkpIHsKKwkJcGVkX2V4Y2VwdGlvbl90aHJvdyhQRURfRVhDRVBUSU9OX0VSUk9SLCBQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCV8oIiVzIDogRmFpbGVkIHRvIGFsbG9jYXRlIHBhcnRpdGlvbiBibG9ja1xuIiksIF9fZnVuY19fKTsKKwkJZ290byBlcnJvcl9wYXJ0OworCX0KKwlpZiAoYW1pZ2FfZmluZF9wYXJ0KGdlb20sIHBhcnQpICE9IE5VTEwpIHsKKwkJcHJlYWxsb2MgPSBQRURfQkUzMl9UT19DUFUgKHBhcnQtPmRlX1ByZUFsbG9jKTsKKwkJcmVzZXJ2ZWQgPSBQRURfQkUzMl9UT19DUFUgKHBhcnQtPmRlX1Jlc2VydmVkKTsKKwkJcmVzZXJ2ZWQgPSByZXNlcnZlZCA9PSAwID8gMSA6IHJlc2VydmVkOworCQlibG9ja3NpemUgPSBQRURfQkUzMl9UT19DUFUgKHBhcnQtPmRlX1NpemVCbG9jaykKKwkJCSogUEVEX0JFMzJfVE9fQ1BVIChwYXJ0LT5kZV9TZWN0b3JQZXJCbG9jaykgLyAxMjg7CisJfQorCXBlZF9mcmVlIChwYXJ0KTsKKworCS8qIFRlc3QgYm9vdCBibG9jayAqLworCWlmICghKGJsb2NrID0gcGVkX21hbGxvYyAoUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQqYmxvY2tzaXplKSkpIHsKKwkJcGVkX2V4Y2VwdGlvbl90aHJvdyhQRURfRVhDRVBUSU9OX0VSUk9SLCBQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCV8oIiVzIDogRmFpbGVkIHRvIGFsbG9jYXRlIGJsb2NrXG4iKSwgX19mdW5jX18pOworCQlnb3RvIGVycm9yX2Jsb2NrOworCX0KKwlpZiAoIXBlZF9kZXZpY2VfcmVhZCAoZ2VvbS0+ZGV2LCBibG9jaywgZ2VvbS0+c3RhcnQsIGJsb2Nrc2l6ZSkpIHsKKwkJcGVkX2V4Y2VwdGlvbl90aHJvdyhQRURfRVhDRVBUSU9OX0VSUk9SLCBQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCV8oIiVzIDogQ291bGRuJ3QgcmVhZCBib290IGJsb2NrICVsbHVcbiIpLCBfX2Z1bmNfXywgZ2VvbS0+c3RhcnQpOworCQlnb3RvIGVycm9yOworCX0KKwlpZiAoUEVEX0JFMzJfVE9fQ1BVIChibG9ja1swXSkgIT0ga2luZCkgeworCQlnb3RvIGVycm9yOworCX0KKworCS8qIEZpbmQgYW5kIHRlc3QgdGhlIHJvb3QgYmxvY2sgKi8KKwlsZW4gPSBnZW9tLT5sZW5ndGggLyBibG9ja3NpemUgLSByZXNlcnZlZDsKKwlwb3MgPSAobGVuIC0gMSkgLyAyOworCXJvb3QgPSBnZW9tLT5zdGFydCArIChwb3MgKyByZXNlcnZlZCkgKiBibG9ja3NpemU7CisJcHJpbnRmICgiUHJhbGxvYyA9ICVkLCBSZXNlcnZlZCA9ICVkLCBibG9ja3NpemUgPSAlZCwgcm9vdCBibG9jayBhdCAlbGx1XG4iLAorCQlwcmVhbGxvYywgcmVzZXJ2ZWQsIGJsb2Nrc2l6ZSwgcm9vdCk7CisKKwlpZiAoIXBlZF9kZXZpY2VfcmVhZCAoZ2VvbS0+ZGV2LCBibG9jaywgcm9vdCwgYmxvY2tzaXplKSkgeworCQlwZWRfZXhjZXB0aW9uX3Rocm93KFBFRF9FWENFUFRJT05fRVJST1IsIFBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJXygiJXMgOiBDb3VsZG4ndCByZWFkIHJvb3QgYmxvY2sgJWxsdVxuIiksIF9fZnVuY19fLCByb290KTsKKwkJZ290byBlcnJvcjsKKwl9CisJaWYgKF9hZmZzX3Byb2JlX3Jvb3QoYmxvY2ssIGJsb2Nrc2l6ZSkgPT0gMSkgeworCQlwZWRfZnJlZSAoYmxvY2spOworCQlyZXR1cm4gcGVkX2dlb21ldHJ5X2R1cGxpY2F0ZSAoZ2VvbSk7CisJfQorCitlcnJvcjoKKwlwZWRfZnJlZSAoYmxvY2spOworZXJyb3JfYmxvY2s6CitlcnJvcl9wYXJ0OgorCXJldHVybiBOVUxMOworfQorc3RhdGljIFBlZEdlb21ldHJ5KgorX2FmZnMwX3Byb2JlIChQZWRHZW9tZXRyeSogZ2VvbSkgeworCXJldHVybiBfZ2VuZXJpY19hZmZzX3Byb2JlIChnZW9tLCAweDQ0NGY1MzAwKTsKK30KK3N0YXRpYyBQZWRHZW9tZXRyeSoKK19hZmZzMV9wcm9iZSAoUGVkR2VvbWV0cnkqIGdlb20pIHsKKwlyZXR1cm4gX2dlbmVyaWNfYWZmc19wcm9iZSAoZ2VvbSwgMHg0NDRmNTMwMSk7Cit9CitzdGF0aWMgUGVkR2VvbWV0cnkqCitfYWZmczJfcHJvYmUgKFBlZEdlb21ldHJ5KiBnZW9tKSB7CisJcmV0dXJuIF9nZW5lcmljX2FmZnNfcHJvYmUgKGdlb20sIDB4NDQ0ZjUzMDIpOworfQorc3RhdGljIFBlZEdlb21ldHJ5KgorX2FmZnMzX3Byb2JlIChQZWRHZW9tZXRyeSogZ2VvbSkgeworCXJldHVybiBfZ2VuZXJpY19hZmZzX3Byb2JlIChnZW9tLCAweDQ0NGY1MzAzKTsKK30KK3N0YXRpYyBQZWRHZW9tZXRyeSoKK19hZmZzNF9wcm9iZSAoUGVkR2VvbWV0cnkqIGdlb20pIHsKKwlyZXR1cm4gX2dlbmVyaWNfYWZmc19wcm9iZSAoZ2VvbSwgMHg0NDRmNTMwNCk7Cit9CitzdGF0aWMgUGVkR2VvbWV0cnkqCitfYWZmczVfcHJvYmUgKFBlZEdlb21ldHJ5KiBnZW9tKSB7CisJcmV0dXJuIF9nZW5lcmljX2FmZnNfcHJvYmUgKGdlb20sIDB4NDQ0ZjUzMDUpOworfQorc3RhdGljIFBlZEdlb21ldHJ5KgorX2FmZnM2X3Byb2JlIChQZWRHZW9tZXRyeSogZ2VvbSkgeworCXJldHVybiBfZ2VuZXJpY19hZmZzX3Byb2JlIChnZW9tLCAweDQ0NGY1MzA2KTsKK30KK3N0YXRpYyBQZWRHZW9tZXRyeSoKK19hZmZzN19wcm9iZSAoUGVkR2VvbWV0cnkqIGdlb20pIHsKKwlyZXR1cm4gX2dlbmVyaWNfYWZmc19wcm9iZSAoZ2VvbSwgMHg0NDRmNTMwNyk7Cit9CitzdGF0aWMgUGVkR2VvbWV0cnkqCitfYW11ZnNfcHJvYmUgKFBlZEdlb21ldHJ5KiBnZW9tKSB7CisJcmV0dXJuIF9nZW5lcmljX2FmZnNfcHJvYmUgKGdlb20sIDB4NmQ3NTQ2NTMpOworfQorc3RhdGljIFBlZEdlb21ldHJ5KgorX2FtdWZzMF9wcm9iZSAoUGVkR2VvbWV0cnkqIGdlb20pIHsKKwlyZXR1cm4gX2dlbmVyaWNfYWZmc19wcm9iZSAoZ2VvbSwgMHg2ZDc1NDYwMCk7Cit9CitzdGF0aWMgUGVkR2VvbWV0cnkqCitfYW11ZnMxX3Byb2JlIChQZWRHZW9tZXRyeSogZ2VvbSkgeworCXJldHVybiBfZ2VuZXJpY19hZmZzX3Byb2JlIChnZW9tLCAweDZkNzU0NjAxKTsKK30KK3N0YXRpYyBQZWRHZW9tZXRyeSoKK19hbXVmczJfcHJvYmUgKFBlZEdlb21ldHJ5KiBnZW9tKSB7CisJcmV0dXJuIF9nZW5lcmljX2FmZnNfcHJvYmUgKGdlb20sIDB4NmQ3NTQ2MDIpOworfQorc3RhdGljIFBlZEdlb21ldHJ5KgorX2FtdWZzM19wcm9iZSAoUGVkR2VvbWV0cnkqIGdlb20pIHsKKwlyZXR1cm4gX2dlbmVyaWNfYWZmc19wcm9iZSAoZ2VvbSwgMHg2ZDc1NDYwMyk7Cit9CitzdGF0aWMgUGVkR2VvbWV0cnkqCitfYW11ZnM0X3Byb2JlIChQZWRHZW9tZXRyeSogZ2VvbSkgeworCXJldHVybiBfZ2VuZXJpY19hZmZzX3Byb2JlIChnZW9tLCAweDZkNzU0NjA0KTsKK30KK3N0YXRpYyBQZWRHZW9tZXRyeSoKK19hbXVmczVfcHJvYmUgKFBlZEdlb21ldHJ5KiBnZW9tKSB7CisJcmV0dXJuIF9nZW5lcmljX2FmZnNfcHJvYmUgKGdlb20sIDB4NmQ3NTQ2MDUpOworfQorCitzdGF0aWMgUGVkRmlsZVN5c3RlbU9wcyBfYWZmczBfb3BzID0geworCXByb2JlOgkJX2FmZnMwX3Byb2JlLAorCWNsb2JiZXI6CU5VTEwsCisJb3BlbjoJCU5VTEwsCisJY3JlYXRlOiAgICAgICAgIE5VTEwsCisJY2xvc2U6CQlOVUxMLAorCWNoZWNrOiAgICAgICAgICBOVUxMLAorCXJlc2l6ZToJCU5VTEwsCisJY29weTogICAgICAgICAgIE5VTEwsCisJZ2V0X2NyZWF0ZV9jb25zdHJhaW50OglOVUxMLAorCWdldF9jb3B5X2NvbnN0cmFpbnQ6CU5VTEwsCisJZ2V0X3Jlc2l6ZV9jb25zdHJhaW50OglOVUxMCit9Oworc3RhdGljIFBlZEZpbGVTeXN0ZW1PcHMgX2FmZnMxX29wcyA9IHsKKwlwcm9iZToJCV9hZmZzMV9wcm9iZSwKKwljbG9iYmVyOglOVUxMLAorCW9wZW46CQlOVUxMLAorCWNyZWF0ZTogICAgICAgICBOVUxMLAorCWNsb3NlOgkJTlVMTCwKKwljaGVjazogICAgICAgICAgTlVMTCwKKwlyZXNpemU6CQlOVUxMLAorCWNvcHk6ICAgICAgICAgICBOVUxMLAorCWdldF9jcmVhdGVfY29uc3RyYWludDoJTlVMTCwKKwlnZXRfY29weV9jb25zdHJhaW50OglOVUxMLAorCWdldF9yZXNpemVfY29uc3RyYWludDoJTlVMTAorfTsKK3N0YXRpYyBQZWRGaWxlU3lzdGVtT3BzIF9hZmZzMl9vcHMgPSB7CisJcHJvYmU6CQlfYWZmczJfcHJvYmUsCisJY2xvYmJlcjoJTlVMTCwKKwlvcGVuOgkJTlVMTCwKKwljcmVhdGU6ICAgICAgICAgTlVMTCwKKwljbG9zZToJCU5VTEwsCisJY2hlY2s6ICAgICAgICAgIE5VTEwsCisJcmVzaXplOgkJTlVMTCwKKwljb3B5OiAgICAgICAgICAgTlVMTCwKKwlnZXRfY3JlYXRlX2NvbnN0cmFpbnQ6CU5VTEwsCisJZ2V0X2NvcHlfY29uc3RyYWludDoJTlVMTCwKKwlnZXRfcmVzaXplX2NvbnN0cmFpbnQ6CU5VTEwKK307CitzdGF0aWMgUGVkRmlsZVN5c3RlbU9wcyBfYWZmczNfb3BzID0geworCXByb2JlOgkJX2FmZnMzX3Byb2JlLAorCWNsb2JiZXI6CU5VTEwsCisJb3BlbjoJCU5VTEwsCisJY3JlYXRlOiAgICAgICAgIE5VTEwsCisJY2xvc2U6CQlOVUxMLAorCWNoZWNrOiAgICAgICAgICBOVUxMLAorCXJlc2l6ZToJCU5VTEwsCisJY29weTogICAgICAgICAgIE5VTEwsCisJZ2V0X2NyZWF0ZV9jb25zdHJhaW50OglOVUxMLAorCWdldF9jb3B5X2NvbnN0cmFpbnQ6CU5VTEwsCisJZ2V0X3Jlc2l6ZV9jb25zdHJhaW50OglOVUxMCit9Oworc3RhdGljIFBlZEZpbGVTeXN0ZW1PcHMgX2FmZnM0X29wcyA9IHsKKwlwcm9iZToJCV9hZmZzNF9wcm9iZSwKKwljbG9iYmVyOglOVUxMLAorCW9wZW46CQlOVUxMLAorCWNyZWF0ZTogICAgICAgICBOVUxMLAorCWNsb3NlOgkJTlVMTCwKKwljaGVjazogICAgICAgICAgTlVMTCwKKwlyZXNpemU6CQlOVUxMLAorCWNvcHk6ICAgICAgICAgICBOVUxMLAorCWdldF9jcmVhdGVfY29uc3RyYWludDoJTlVMTCwKKwlnZXRfY29weV9jb25zdHJhaW50OglOVUxMLAorCWdldF9yZXNpemVfY29uc3RyYWludDoJTlVMTAorfTsKK3N0YXRpYyBQZWRGaWxlU3lzdGVtT3BzIF9hZmZzNV9vcHMgPSB7CisJcHJvYmU6CQlfYWZmczVfcHJvYmUsCisJY2xvYmJlcjoJTlVMTCwKKwlvcGVuOgkJTlVMTCwKKwljcmVhdGU6ICAgICAgICAgTlVMTCwKKwljbG9zZToJCU5VTEwsCisJY2hlY2s6ICAgICAgICAgIE5VTEwsCisJcmVzaXplOgkJTlVMTCwKKwljb3B5OiAgICAgICAgICAgTlVMTCwKKwlnZXRfY3JlYXRlX2NvbnN0cmFpbnQ6CU5VTEwsCisJZ2V0X2NvcHlfY29uc3RyYWludDoJTlVMTCwKKwlnZXRfcmVzaXplX2NvbnN0cmFpbnQ6CU5VTEwKK307CitzdGF0aWMgUGVkRmlsZVN5c3RlbU9wcyBfYWZmczZfb3BzID0geworCXByb2JlOgkJX2FmZnM2X3Byb2JlLAorCWNsb2JiZXI6CU5VTEwsCisJb3BlbjoJCU5VTEwsCisJY3JlYXRlOiAgICAgICAgIE5VTEwsCisJY2xvc2U6CQlOVUxMLAorCWNoZWNrOiAgICAgICAgICBOVUxMLAorCXJlc2l6ZToJCU5VTEwsCisJY29weTogICAgICAgICAgIE5VTEwsCisJZ2V0X2NyZWF0ZV9jb25zdHJhaW50OglOVUxMLAorCWdldF9jb3B5X2NvbnN0cmFpbnQ6CU5VTEwsCisJZ2V0X3Jlc2l6ZV9jb25zdHJhaW50OglOVUxMCit9Oworc3RhdGljIFBlZEZpbGVTeXN0ZW1PcHMgX2FmZnM3X29wcyA9IHsKKwlwcm9iZToJCV9hZmZzN19wcm9iZSwKKwljbG9iYmVyOglOVUxMLAorCW9wZW46CQlOVUxMLAorCWNyZWF0ZTogICAgICAgICBOVUxMLAorCWNsb3NlOgkJTlVMTCwKKwljaGVjazogICAgICAgICAgTlVMTCwKKwlyZXNpemU6CQlOVUxMLAorCWNvcHk6ICAgICAgICAgICBOVUxMLAorCWdldF9jcmVhdGVfY29uc3RyYWludDoJTlVMTCwKKwlnZXRfY29weV9jb25zdHJhaW50OglOVUxMLAorCWdldF9yZXNpemVfY29uc3RyYWludDoJTlVMTAorfTsKK3N0YXRpYyBQZWRGaWxlU3lzdGVtT3BzIF9hbXVmc19vcHMgPSB7CisJcHJvYmU6CQlfYW11ZnNfcHJvYmUsCisJY2xvYmJlcjoJTlVMTCwKKwlvcGVuOgkJTlVMTCwKKwljcmVhdGU6ICAgICAgICAgTlVMTCwKKwljbG9zZToJCU5VTEwsCisJY2hlY2s6ICAgICAgICAgIE5VTEwsCisJcmVzaXplOgkJTlVMTCwKKwljb3B5OiAgICAgICAgICAgTlVMTCwKKwlnZXRfY3JlYXRlX2NvbnN0cmFpbnQ6CU5VTEwsCisJZ2V0X2NvcHlfY29uc3RyYWludDoJTlVMTCwKKwlnZXRfcmVzaXplX2NvbnN0cmFpbnQ6CU5VTEwKK307CitzdGF0aWMgUGVkRmlsZVN5c3RlbU9wcyBfYW11ZnMwX29wcyA9IHsKKwlwcm9iZToJCV9hbXVmczBfcHJvYmUsCisJY2xvYmJlcjoJTlVMTCwKKwlvcGVuOgkJTlVMTCwKKwljcmVhdGU6ICAgICAgICAgTlVMTCwKKwljbG9zZToJCU5VTEwsCisJY2hlY2s6ICAgICAgICAgIE5VTEwsCisJcmVzaXplOgkJTlVMTCwKKwljb3B5OiAgICAgICAgICAgTlVMTCwKKwlnZXRfY3JlYXRlX2NvbnN0cmFpbnQ6CU5VTEwsCisJZ2V0X2NvcHlfY29uc3RyYWludDoJTlVMTCwKKwlnZXRfcmVzaXplX2NvbnN0cmFpbnQ6CU5VTEwKK307CitzdGF0aWMgUGVkRmlsZVN5c3RlbU9wcyBfYW11ZnMxX29wcyA9IHsKKwlwcm9iZToJCV9hbXVmczFfcHJvYmUsCisJY2xvYmJlcjoJTlVMTCwKKwlvcGVuOgkJTlVMTCwKKwljcmVhdGU6ICAgICAgICAgTlVMTCwKKwljbG9zZToJCU5VTEwsCisJY2hlY2s6ICAgICAgICAgIE5VTEwsCisJcmVzaXplOgkJTlVMTCwKKwljb3B5OiAgICAgICAgICAgTlVMTCwKKwlnZXRfY3JlYXRlX2NvbnN0cmFpbnQ6CU5VTEwsCisJZ2V0X2NvcHlfY29uc3RyYWludDoJTlVMTCwKKwlnZXRfcmVzaXplX2NvbnN0cmFpbnQ6CU5VTEwKK307CitzdGF0aWMgUGVkRmlsZVN5c3RlbU9wcyBfYW11ZnMyX29wcyA9IHsKKwlwcm9iZToJCV9hbXVmczJfcHJvYmUsCisJY2xvYmJlcjoJTlVMTCwKKwlvcGVuOgkJTlVMTCwKKwljcmVhdGU6ICAgICAgICAgTlVMTCwKKwljbG9zZToJCU5VTEwsCisJY2hlY2s6ICAgICAgICAgIE5VTEwsCisJcmVzaXplOgkJTlVMTCwKKwljb3B5OiAgICAgICAgICAgTlVMTCwKKwlnZXRfY3JlYXRlX2NvbnN0cmFpbnQ6CU5VTEwsCisJZ2V0X2NvcHlfY29uc3RyYWludDoJTlVMTCwKKwlnZXRfcmVzaXplX2NvbnN0cmFpbnQ6CU5VTEwKK307CitzdGF0aWMgUGVkRmlsZVN5c3RlbU9wcyBfYW11ZnMzX29wcyA9IHsKKwlwcm9iZToJCV9hbXVmczNfcHJvYmUsCisJY2xvYmJlcjoJTlVMTCwKKwlvcGVuOgkJTlVMTCwKKwljcmVhdGU6ICAgICAgICAgTlVMTCwKKwljbG9zZToJCU5VTEwsCisJY2hlY2s6ICAgICAgICAgIE5VTEwsCisJcmVzaXplOgkJTlVMTCwKKwljb3B5OiAgICAgICAgICAgTlVMTCwKKwlnZXRfY3JlYXRlX2NvbnN0cmFpbnQ6CU5VTEwsCisJZ2V0X2NvcHlfY29uc3RyYWludDoJTlVMTCwKKwlnZXRfcmVzaXplX2NvbnN0cmFpbnQ6CU5VTEwKK307CitzdGF0aWMgUGVkRmlsZVN5c3RlbU9wcyBfYW11ZnM0X29wcyA9IHsKKwlwcm9iZToJCV9hbXVmczRfcHJvYmUsCisJY2xvYmJlcjoJTlVMTCwKKwlvcGVuOgkJTlVMTCwKKwljcmVhdGU6ICAgICAgICAgTlVMTCwKKwljbG9zZToJCU5VTEwsCisJY2hlY2s6ICAgICAgICAgIE5VTEwsCisJcmVzaXplOgkJTlVMTCwKKwljb3B5OiAgICAgICAgICAgTlVMTCwKKwlnZXRfY3JlYXRlX2NvbnN0cmFpbnQ6CU5VTEwsCisJZ2V0X2NvcHlfY29uc3RyYWludDoJTlVMTCwKKwlnZXRfcmVzaXplX2NvbnN0cmFpbnQ6CU5VTEwKK307CitzdGF0aWMgUGVkRmlsZVN5c3RlbU9wcyBfYW11ZnM1X29wcyA9IHsKKwlwcm9iZToJCV9hbXVmczVfcHJvYmUsCisJY2xvYmJlcjoJTlVMTCwKKwlvcGVuOgkJTlVMTCwKKwljcmVhdGU6ICAgICAgICAgTlVMTCwKKwljbG9zZToJCU5VTEwsCisJY2hlY2s6ICAgICAgICAgIE5VTEwsCisJcmVzaXplOgkJTlVMTCwKKwljb3B5OiAgICAgICAgICAgTlVMTCwKKwlnZXRfY3JlYXRlX2NvbnN0cmFpbnQ6CU5VTEwsCisJZ2V0X2NvcHlfY29uc3RyYWludDoJTlVMTCwKKwlnZXRfcmVzaXplX2NvbnN0cmFpbnQ6CU5VTEwKK307CisKKyNkZWZpbmUgQUZGU19CTE9DS19TSVpFUyAgICAgICAgKChpbnRbNV0pezUxMiwgMTAyNCwgMjA0OCwgNDA5NiwgMH0pCisjZGVmaW5lIEFNVUZTX0JMT0NLX1NJWkVTICAgICAgICgoaW50WzJdKXs1MTIsIDB9KQorCisKK1BlZEZpbGVTeXN0ZW1UeXBlIF9hZmZzMF90eXBlID0geworICAgICAgIG5leHQ6CQkgTlVMTCwKKyAgICAgICBvcHM6CQkgJl9hZmZzMF9vcHMsCisgICAgICAgbmFtZToJCSAiYWZmczAiLAorICAgICAgIGJsb2NrX3NpemVzOiAgICAgIEFGRlNfQkxPQ0tfU0laRVMKK307CitQZWRGaWxlU3lzdGVtVHlwZSBfYWZmczFfdHlwZSA9IHsKKyAgICAgICBuZXh0OgkJIE5VTEwsCisgICAgICAgb3BzOgkJICZfYWZmczFfb3BzLAorICAgICAgIG5hbWU6CQkgImFmZnMxIiwKKyAgICAgICBibG9ja19zaXplczogICAgICBBRkZTX0JMT0NLX1NJWkVTCit9OworUGVkRmlsZVN5c3RlbVR5cGUgX2FmZnMyX3R5cGUgPSB7CisgICAgICAgbmV4dDoJCSBOVUxMLAorICAgICAgIG9wczoJCSAmX2FmZnMyX29wcywKKyAgICAgICBuYW1lOgkJICJhZmZzMiIsCisgICAgICAgYmxvY2tfc2l6ZXM6ICAgICAgQUZGU19CTE9DS19TSVpFUworfTsKK1BlZEZpbGVTeXN0ZW1UeXBlIF9hZmZzM190eXBlID0geworICAgICAgIG5leHQ6CQkgTlVMTCwKKyAgICAgICBvcHM6CQkgJl9hZmZzM19vcHMsCisgICAgICAgbmFtZToJCSAiYWZmczMiLAorICAgICAgIGJsb2NrX3NpemVzOiAgICAgIEFGRlNfQkxPQ0tfU0laRVMKK307CitQZWRGaWxlU3lzdGVtVHlwZSBfYWZmczRfdHlwZSA9IHsKKyAgICAgICBuZXh0OgkJIE5VTEwsCisgICAgICAgb3BzOgkJICZfYWZmczRfb3BzLAorICAgICAgIG5hbWU6CQkgImFmZnM0IiwKKyAgICAgICBibG9ja19zaXplczogICAgICBBRkZTX0JMT0NLX1NJWkVTCit9OworUGVkRmlsZVN5c3RlbVR5cGUgX2FmZnM1X3R5cGUgPSB7CisgICAgICAgbmV4dDoJCSBOVUxMLAorICAgICAgIG9wczoJCSAmX2FmZnM1X29wcywKKyAgICAgICBuYW1lOgkJICJhZmZzNSIsCisgICAgICAgYmxvY2tfc2l6ZXM6ICAgICAgQUZGU19CTE9DS19TSVpFUworfTsKK1BlZEZpbGVTeXN0ZW1UeXBlIF9hZmZzNl90eXBlID0geworICAgICAgIG5leHQ6CQkgTlVMTCwKKyAgICAgICBvcHM6CQkgJl9hZmZzNl9vcHMsCisgICAgICAgbmFtZToJCSAiYWZmczYiLAorICAgICAgIGJsb2NrX3NpemVzOiAgICAgIEFGRlNfQkxPQ0tfU0laRVMKK307CitQZWRGaWxlU3lzdGVtVHlwZSBfYWZmczdfdHlwZSA9IHsKKyAgICAgICBuZXh0OgkJIE5VTEwsCisgICAgICAgb3BzOgkJICZfYWZmczdfb3BzLAorICAgICAgIG5hbWU6CQkgImFmZnM3IiwKKyAgICAgICBibG9ja19zaXplczogICAgICBBRkZTX0JMT0NLX1NJWkVTCit9OworUGVkRmlsZVN5c3RlbVR5cGUgX2FtdWZzX3R5cGUgPSB7CisgICAgICAgbmV4dDoJCSBOVUxMLAorICAgICAgIG9wczoJCSAmX2FtdWZzX29wcywKKyAgICAgICBuYW1lOgkJICJhbXVmcyIsCisgICAgICAgYmxvY2tfc2l6ZXM6ICAgICAgQU1VRlNfQkxPQ0tfU0laRVMKK307CitQZWRGaWxlU3lzdGVtVHlwZSBfYW11ZnMwX3R5cGUgPSB7CisgICAgICAgbmV4dDoJCSBOVUxMLAorICAgICAgIG9wczoJCSAmX2FtdWZzMF9vcHMsCisgICAgICAgbmFtZToJCSAiYW11ZnMwIiwKKyAgICAgICBibG9ja19zaXplczogICAgICBBTVVGU19CTE9DS19TSVpFUworfTsKK1BlZEZpbGVTeXN0ZW1UeXBlIF9hbXVmczFfdHlwZSA9IHsKKyAgICAgICBuZXh0OgkJIE5VTEwsCisgICAgICAgb3BzOgkJICZfYW11ZnMxX29wcywKKyAgICAgICBuYW1lOgkJICJhbXVmczEiLAorICAgICAgIGJsb2NrX3NpemVzOiAgICAgIEFNVUZTX0JMT0NLX1NJWkVTCit9OworUGVkRmlsZVN5c3RlbVR5cGUgX2FtdWZzMl90eXBlID0geworICAgICAgIG5leHQ6CQkgTlVMTCwKKyAgICAgICBvcHM6CQkgJl9hbXVmczJfb3BzLAorICAgICAgIG5hbWU6CQkgImFtdWZzMiIsCisgICAgICAgYmxvY2tfc2l6ZXM6ICAgICAgQU1VRlNfQkxPQ0tfU0laRVMKK307CitQZWRGaWxlU3lzdGVtVHlwZSBfYW11ZnMzX3R5cGUgPSB7CisgICAgICAgbmV4dDoJCSBOVUxMLAorICAgICAgIG9wczoJCSAmX2FtdWZzM19vcHMsCisgICAgICAgbmFtZToJCSAiYW11ZnMzIiwKKyAgICAgICBibG9ja19zaXplczogICAgICBBTVVGU19CTE9DS19TSVpFUworfTsKK1BlZEZpbGVTeXN0ZW1UeXBlIF9hbXVmczRfdHlwZSA9IHsKKyAgICAgICBuZXh0OgkJIE5VTEwsCisgICAgICAgb3BzOgkJICZfYW11ZnM0X29wcywKKyAgICAgICBuYW1lOgkJICJhbXVmczQiLAorICAgICAgIGJsb2NrX3NpemVzOiAgICAgIEFNVUZTX0JMT0NLX1NJWkVTCit9OworUGVkRmlsZVN5c3RlbVR5cGUgX2FtdWZzNV90eXBlID0geworICAgICAgIG5leHQ6CQkgTlVMTCwKKyAgICAgICBvcHM6CQkgJl9hbXVmczVfb3BzLAorICAgICAgIG5hbWU6CQkgImFtdWZzNSIsCisgICAgICAgYmxvY2tfc2l6ZXM6ICAgICAgQU1VRlNfQkxPQ0tfU0laRVMKK307CmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2FtaWdhL2FmZnMuaCBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvYW1pZ2EvYWZmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMTJkZTYKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2FtaWdhL2FmZnMuaApAQCAtMCwwICsxLDIwIEBACisKKy8qCisgICAgYWZmcy5oIC0tIHBhcnRlZCBzdXBwb2VyIGZvciBhZmZzIGZpbGVzeXN0ZW1zIGhlYWRlciBmaWxlcworICAgIENvcHlyaWdodCAoQykgMTk5OC0yMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmYTIwMjUKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmMKQEAgLTAsMCArMSwzNTAgQEAKKy8qIAorICAgIGxpYnBhcnRlZC9mc19hbWlnYSAtIGFtaWdhIGZpbGUgc3lzdGVtIHN1cHBvcnQuCisgICAgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQorCisgICAgQ29udHJpYnV0b3I6ICBTdmVuIEx1dGhlciA8bHV0aGVyQGRlYmlhbi5vcmc+CisqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8cGFydGVkL3BhcnRlZC5oPgorI2luY2x1ZGUgPHBhcnRlZC9kZWJ1Zy5oPgorI2luY2x1ZGUgPHBhcnRlZC9lbmRpYW4uaD4KKworI2luY2x1ZGUgImFtaWdhLmgiCisKKyNpZiBFTkFCTEVfTkxTCisjICBpbmNsdWRlIDxsaWJpbnRsLmg+CisjICBkZWZpbmUgXyhTdHJpbmcpIGRnZXR0ZXh0IChQQUNLQUdFLCBTdHJpbmcpCisjZWxzZQorIyAgZGVmaW5lIF8oU3RyaW5nKSAoU3RyaW5nKQorI2VuZGlmIC8qIEVOQUJMRV9OTFMgKi8KKworI2RlZmluZQlJRE5BTUVfUklHSURESVNLCSh1aW50MzJfdCkweDUyNDQ1MzRCCS8qICdSRFNLJyAqLworI2RlZmluZSBJRE5BTUVfQkFEQkxPQ0sJCSh1aW50MzJfdCkweDQyNDE0NDQyCS8qICdCQURCJyAqLworI2RlZmluZQlJRE5BTUVfUEFSVElUSU9OCSh1aW50MzJfdCkweDUwNDE1MjU0CS8qICdQQVJUJyAqLworI2RlZmluZSBJRE5BTUVfRklMRVNZU0hFQURFUgkodWludDMyX3QpMHg0NjUzNDg0NAkvKiAnRlNIRCcgKi8KKyNkZWZpbmUgSUROQU1FX0xPQURTRUcJCSh1aW50MzJfdCkweDRDNTM0NTQ3CS8qICdMU0VHJyAqLworI2RlZmluZSBJRE5BTUVfQk9PVAkJKHVpbnQzMl90KTB4NDI0ZjRmNTQJLyogJ0JPT1QnICovCisjZGVmaW5lIElETkFNRV9GUkVFCQkodWludDMyX3QpMHhmZmZmZmZmZgkKKworc3RhdGljIGNvbnN0IGNoYXIgKgorX2FtaWdhX2Jsb2NrX2lkICh1aW50MzJfdCBpZCkgeworCXN3aXRjaCAoaWQpIHsKKwkJY2FzZSBJRE5BTUVfUklHSURESVNLIDoKKwkJCXJldHVybiAiUkRTSyI7CisJCWNhc2UgSUROQU1FX0JBREJMT0NLIDoKKwkJCXJldHVybiAiQkFEQiI7CisJCWNhc2UgSUROQU1FX1BBUlRJVElPTiA6CisJCQlyZXR1cm4gIlBBUlQiOworCQljYXNlIElETkFNRV9GSUxFU1lTSEVBREVSIDoKKwkJCXJldHVybiAiRlNIRCI7CisJCWNhc2UgSUROQU1FX0xPQURTRUcgOgorCQkJcmV0dXJuICJMU0VHIjsKKwkJY2FzZSBJRE5BTUVfQk9PVCA6CisJCQlyZXR1cm4gIkJPT1QiOworCQljYXNlIElETkFNRV9GUkVFIDoKKwkJCXJldHVybiAiPGZyZWU+IjsKKwkJZGVmYXVsdCA6CisJCQlyZXR1cm4gIjx1bmtub3duPiI7CisJfQorfQorCitzdHJ1Y3QgQW1pZ2FJZHMgKgorX2FtaWdhX2FkZF9pZCAodWludDMyX3QgaWQsIHN0cnVjdCBBbWlnYUlkcyAqaWRzKSB7CisJc3RydWN0IEFtaWdhSWRzICpuZXdpZDsKKworCWlmICgobmV3aWQ9cGVkX21hbGxvYyhzaXplb2YgKHN0cnVjdCBBbWlnYUlkcykpKT09TlVMTCkgeworCQlwZWRfZXhjZXB0aW9uX3Rocm93KFBFRF9FWENFUFRJT05fRVJST1IsIFBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJXygiJXMgOiBGYWlsZWQgdG8gYWxsb2NhdGUgaWQgbGlzdCBlbGVtZW50XG4iKSwgX19mdW5jX18pOworCQlyZXR1cm4gMDsKKwl9CisJbmV3aWQtPklEID0gaWQ7CisJbmV3aWQtPm5leHQgPSBpZHM7CisJcmV0dXJuIG5ld2lkOworfQorCit2b2lkCitfYW1pZ2FfZnJlZV9pZHMgKHN0cnVjdCBBbWlnYUlkcyAqaWRzKSB7CisJc3RydWN0IEFtaWdhSWRzICpjdXJyZW50LCAqbmV4dDsKKworCWZvciAoY3VycmVudCA9IGlkczsgY3VycmVudCAhPSBOVUxMOyBjdXJyZW50ID0gbmV4dCkgeworCQluZXh0ID0gY3VycmVudC0+bmV4dDsKKwkJcGVkX2ZyZWUgKGN1cnJlbnQpOworCX0KK30KK2ludAorX2FtaWdhX2lkX2luX2xpc3QgKHVpbnQzMl90IGlkLCBzdHJ1Y3QgQW1pZ2FJZHMgKmlkcykgeworCXN0cnVjdCBBbWlnYUlkcyAqY3VycmVudDsKKworCWZvciAoY3VycmVudCA9IGlkczsgY3VycmVudCAhPSBOVUxMOyBjdXJyZW50ID0gY3VycmVudC0+bmV4dCkgeworCQlpZiAoaWQgPT0gY3VycmVudC0+SUQpCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgQU1JR0FfUkRCX05PVF9GT1VORAkoKHVpbnQzMl90KTB4ZmZmZmZmZmYpCisKK3N0cnVjdCBBbWlnYUJsb2NrIHsKKyAgICB1aW50MzJfdAlhbWlnYV9JRDsJCS8qIElkZW50aWZpZXIgMzIgYml0IHdvcmQgKi8KKyAgICB1aW50MzJfdAlhbWlnYV9TdW1tZWRMb25nc3M7CS8qIFNpemUgb2YgdGhlIHN0cnVjdHVyZSBmb3IgY2hlY2tzdW1zICovCisgICAgaW50MzJfdAlhbWlnYV9DaGtTdW07CQkvKiBDaGVja3N1bSBvZiB0aGUgc3RydWN0dXJlICovCit9OworI2RlZmluZSBBTUlHQShwb3MpICgoc3RydWN0IEFtaWdhQmxvY2sgKikocG9zKSkgCisKK3N0cnVjdCBSaWdpZERpc2tCbG9jayB7CisgICAgdWludDMyX3QJcmRiX0lEOwkJCS8qIElkZW50aWZpZXIgMzIgYml0IHdvcmQgOiAnUkRTSycgKi8KKyAgICB1aW50MzJfdAlyZGJfU3VtbWVkTG9uZ3M7CS8qIFNpemUgb2YgdGhlIHN0cnVjdHVyZSBmb3IgY2hlY2tzdW1zICovCisgICAgaW50MzJfdAlyZGJfQ2hrU3VtOwkJLyogQ2hlY2tzdW0gb2YgdGhlIHN0cnVjdHVyZSAqLworICAgIHVpbnQzMl90CXJkYl9Ib3N0SUQ7CQkvKiBTQ1NJIFRhcmdldCBJRCBvZiBob3N0LCBub3QgcmVhbGx5IHVzZWQgKi8KKyAgICB1aW50MzJfdAlyZGJfQmxvY2tCeXRlczsJCS8qIFNpemUgb2YgZGlzayBibG9ja3MgKi8KKyAgICB1aW50MzJfdAlyZGJfRmxhZ3M7CQkvKiBSREIgRmxhZ3MgKi8KKyAgICAvKiBibG9jayBsaXN0IGhlYWRzICovCisgICAgdWludDMyX3QJcmRiX0JhZEJsb2NrTGlzdDsJLyogQmFkIGJsb2NrIGxpc3QgKi8KKyAgICB1aW50MzJfdAlyZGJfUGFydGl0aW9uTGlzdDsJLyogUGFydGl0aW9uIGxpc3QgKi8KKyAgICB1aW50MzJfdAlyZGJfRmlsZVN5c0hlYWRlckxpc3Q7CS8qIEZpbGUgc3lzdGVtIGhlYWRlciBsaXN0ICovCisgICAgdWludDMyX3QJcmRiX0RyaXZlSW5pdDsJCS8qIERyaXZlIHNwZWNpZmljIGluaXQgY29kZSAqLworICAgIHVpbnQzMl90CXJkYl9Cb290QmxvY2tMaXN0OwkvKiBBbWlnYSBPUyA0IEJvb3QgQmxvY2tzICovCisgICAgdWludDMyX3QJcmRiX1Jlc2VydmVkMVs1XTsJLyogVW51c2VkIHdvcmQsIG5lZWQgdG8gYmUgc2V0IHRvICRmZmZmZmZmZiAqLworICAgIC8qIHBoeXNpY2FsIGRyaXZlIGNoYXJhY3RlcmlzdGljcyAqLworICAgIHVpbnQzMl90CXJkYl9DeWxpbmRlcnM7CQkvKiBOdW1iZXIgb2YgdGhlIGN5bGluZGVycyBvZiB0aGUgZHJpdmUgKi8KKyAgICB1aW50MzJfdAlyZGJfU2VjdG9yczsJCS8qIE51bWJlciBvZiBzZWN0b3JzIG9mIHRoZSBkcml2ZSAqLworICAgIHVpbnQzMl90CXJkYl9IZWFkczsJCS8qIE51bWJlciBvZiBoZWFkcyBvZiB0aGUgZHJpdmUgKi8KKyAgICB1aW50MzJfdAlyZGJfSW50ZXJsZWF2ZTsJCS8qIEludGVybGVhdmUgKi8KKyAgICB1aW50MzJfdAlyZGJfUGFyazsJCS8qIEhlYWQgcGFya2luZyBjeWxpbmRlciAqLworICAgIHVpbnQzMl90CXJkYl9SZXNlcnZlZDJbM107CS8qIFVudXNlZCB3b3JkLCBuZWVkIHRvIGJlIHNldCB0byAkZmZmZmZmZmYgKi8KKyAgICB1aW50MzJfdAlyZGJfV3JpdGVQcmVDb21wOwkvKiBTdGFydGluZyBjeWxpbmRlciBvZiB3cml0ZSBwcmVjb21wZW5zYXRpb24gKi8KKyAgICB1aW50MzJfdAlyZGJfUmVkdWNlZFdyaXRlOwkvKiBTdGFydGluZyBjeWxpbmRlciBvZiByZWR1Y2VkIHdyaXRlIGN1cnJlbnQgKi8KKyAgICB1aW50MzJfdAlyZGJfU3RlcFJhdGU7CQkvKiBTdGVwIHJhdGUgb2YgdGhlIGRyaXZlICovCisgICAgdWludDMyX3QJcmRiX1Jlc2VydmVkM1s1XTsJLyogVW51c2VkIHdvcmQsIG5lZWQgdG8gYmUgc2V0IHRvICRmZmZmZmZmZiAqLworICAgIC8qIGxvZ2ljYWwgZHJpdmUgY2hhcmFjdGVyaXN0aWNzICovCisgICAgdWludDMyX3QJcmRiX1JEQkJsb2Nrc0xvOwkvKiBsb3cgYmxvY2sgb2YgcmFuZ2UgcmVzZXJ2ZWQgZm9yIGhhcmRibG9ja3MgKi8KKyAgICB1aW50MzJfdAlyZGJfUkRCQmxvY2tzSGk7CS8qIGhpZ2ggYmxvY2sgb2YgcmFuZ2UgZm9yIHRoZXNlIGhhcmRibG9ja3MgKi8KKyAgICB1aW50MzJfdAlyZGJfTG9DeWxpbmRlcjsJCS8qIGxvdyBjeWxpbmRlciBvZiBwYXJ0aXRpb25hYmxlIGRpc2sgYXJlYSAqLworICAgIHVpbnQzMl90CXJkYl9IaUN5bGluZGVyOwkJLyogaGlnaCBjeWxpbmRlciBvZiBwYXJ0aXRpb25hYmxlIGRhdGEgYXJlYSAqLworICAgIHVpbnQzMl90CXJkYl9DeWxCbG9ja3M7CQkvKiBudW1iZXIgb2YgYmxvY2tzIGF2YWlsYWJsZSBwZXIgY3lsaW5kZXIgKi8KKyAgICB1aW50MzJfdAlyZGJfQXV0b1BhcmtTZWNvbmRzOwkvKiB6ZXJvIGZvciBubyBhdXRvIHBhcmsgKi8KKyAgICB1aW50MzJfdAlyZGJfSGlnaFJEU0tCbG9jazsJLyogaGlnaGVzdCBibG9jayB1c2VkIGJ5IFJEU0sgKi8KKwkJCQkJLyogKG5vdCBpbmNsdWRpbmcgcmVwbGFjZW1lbnQgYmFkIGJsb2NrcykgKi8KKyAgICB1aW50MzJfdAlyZGJfUmVzZXJ2ZWQ0OworICAgIC8qIGRyaXZlIGlkZW50aWZpY2F0aW9uICovCisgICAgY2hhcglyZGJfRGlza1ZlbmRvcls4XTsKKyAgICBjaGFyCXJkYl9EaXNrUHJvZHVjdFsxNl07CisgICAgY2hhcglyZGJfRGlza1JldmlzaW9uWzRdOworICAgIGNoYXIJcmRiX0NvbnRyb2xsZXJWZW5kb3JbOF07CisgICAgY2hhcglyZGJfQ29udHJvbGxlclByb2R1Y3RbMTZdOworICAgIGNoYXIJcmRiX0NvbnRyb2xsZXJSZXZpc2lvbls0XTsKKyAgICB1aW50MzJfdAlyZGJfUmVzZXJ2ZWQ1WzEwXTsKK307CisKKyNkZWZpbmUgQU1JR0FfTUFYX1BBUlRJVElPTlMJMTI4CisjZGVmaW5lCVJEQl9MT0NBVElPTl9MSU1JVAkxNgorI2RlZmluZSBSRFNLKHBvcykgKChzdHJ1Y3QgUmlnaWREaXNrQmxvY2sgKikocG9zKSkgCisKK3N0YXRpYyBpbnQKK19hbWlnYV9jaGVja3N1bSAoc3RydWN0IEFtaWdhQmxvY2sgKmJsaykgeworCXVpbnQzMl90ICpyZGIgPSAodWludDMyX3QgKikgYmxrOworCXVpbnQzMl90IHN1bTsKKwlpbnQgaSwgZW5kOworCisJc3VtID0gUEVEX0JFMzJfVE9fQ1BVIChyZGJbMF0pOworCWVuZCA9IFBFRF9CRTMyX1RPX0NQVSAocmRiWzFdKTsKKworCWlmIChlbmQgPiBQRURfU0VDVE9SX1NJWkVfREVGQVVMVCkgZW5kID0gUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQ7CisKKwlmb3IgKGkgPSAxOyBpIDwgZW5kOyBpKyspIHN1bSArPSBQRURfQkUzMl9UT19DUFUgKHJkYltpXSk7CisKKwlyZXR1cm4gc3VtOworfQorCitzdGF0aWMgdm9pZAorX2FtaWdhX2NhbGN1bGF0ZV9jaGVja3N1bSAoc3RydWN0IEFtaWdhQmxvY2sgKmJsaykgeworCisJYmxrLT5hbWlnYV9DaGtTdW0gPSBQRURfQ1BVX1RPX0JFMzIoCisJCVBFRF9CRTMyX1RPX0NQVShibGstPmFtaWdhX0Noa1N1bSkgLQorCQlfYW1pZ2FfY2hlY2tzdW0oKHN0cnVjdCBBbWlnYUJsb2NrICopIGJsaykpOworCXJldHVybjsJCit9CisKKworc3RhdGljIHN0cnVjdCBBbWlnYUJsb2NrICoKK19hbWlnYV9yZWFkX2Jsb2NrIChQZWREZXZpY2UgKmRldiwgc3RydWN0IEFtaWdhQmxvY2sgKmJsaywgUGVkU2VjdG9yIGJsb2NrLCBzdHJ1Y3QgQW1pZ2FJZHMgKmlkcykgeworCWlmICghcGVkX2RldmljZV9yZWFkIChkZXYsIGJsaywgYmxvY2ssIDEpKSB7CisJCXN3aXRjaCAocGVkX2V4Y2VwdGlvbl90aHJvdyhQRURfRVhDRVBUSU9OX0VSUk9SLAorCQkJUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQlfKCIlcyA6IENvdWxkbid0IHJlYWQgYmxvY2sgJWxsdVxuIiksIF9fZnVuY19fLCBibG9jaykpCisJCXsKKwkJCWNhc2UgUEVEX0VYQ0VQVElPTl9DQU5DRUwgOgorCQkJY2FzZSBQRURfRVhDRVBUSU9OX1VOSEFORExFRCA6CisJCQlkZWZhdWx0IDogCisJCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9CisJaWYgKGlkcyAmJiAhX2FtaWdhX2lkX2luX2xpc3QoUEVEX0JFMzJfVE9fQ1BVKGJsay0+YW1pZ2FfSUQpLCBpZHMpKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAoX2FtaWdhX2NoZWNrc3VtIChibGspICE9IDApIHsKKwkJc3dpdGNoIChwZWRfZXhjZXB0aW9uX3Rocm93KFBFRF9FWENFUFRJT05fRVJST1IsCisJCQlQRURfRVhDRVBUSU9OX0ZJWCB8IFBFRF9FWENFUFRJT05fSUdOT1JFIHwgUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQlfKCIlcyA6IEJhZCBjaGVja3N1bSBvbiBibG9jayAlbGx1IG9mIHR5cGUgJXNcbiIpLAorCQkJX19mdW5jX18sIGJsb2NrLCBfYW1pZ2FfYmxvY2tfaWQoUEVEX0JFMzJfVE9fQ1BVKGJsay0+YW1pZ2FfSUQpKSkpCisJCXsKKwkJCWNhc2UgUEVEX0VYQ0VQVElPTl9DQU5DRUwgOgorCQkJCXJldHVybiBOVUxMOworCQkJY2FzZSBQRURfRVhDRVBUSU9OX0ZJWCA6CisJCQkJX2FtaWdhX2NhbGN1bGF0ZV9jaGVja3N1bShBTUlHQShibGspKTsKKwkJCQlpZiAoIXBlZF9kZXZpY2Vfd3JpdGUgKGRldiwgYmxrLCBibG9jaywgMSkpIHsKKwkJCQkJc3dpdGNoIChwZWRfZXhjZXB0aW9uX3Rocm93KFBFRF9FWENFUFRJT05fRkFUQUwsCisJCQkJCQlQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCQkJCV8oIiVzIDogQ291bGRuJ3Qgd3JpdGUgYmxvY2sgJWRcbiIpLCBfX2Z1bmNfXywgYmxvY2spKQorCQkJCQl7CisJCQkJCQljYXNlIFBFRF9FWENFUFRJT05fQ0FOQ0VMIDoKKwkJCQkJCWNhc2UgUEVEX0VYQ0VQVElPTl9VTkhBTkRMRUQgOgorCQkJCQkJZGVmYXVsdCA6IAorCQkJCQkJCXJldHVybiBOVUxMOworCQkJCQl9CisJCQkJfQorCQkJY2FzZSBQRURfRVhDRVBUSU9OX0lHTk9SRSA6CisJCQljYXNlIFBFRF9FWENFUFRJT05fVU5IQU5ETEVEIDoKKwkJCWRlZmF1bHQgOiAKKwkJCQlyZXR1cm4gYmxrOworCQl9CisJfQorCXJldHVybiBibGs7Cit9CisKK3N0YXRpYyB1aW50MzJfdAorX2FtaWdhX2ZpbmRfcmRiIChQZWREZXZpY2UgKmRldiwgc3RydWN0IFJpZ2lkRGlza0Jsb2NrICpyZGIpIHsKKwlpbnQgaTsKKwlzdHJ1Y3QgQW1pZ2FJZHMgKmlkczsKKwkKKwlpZHMgPSBfYW1pZ2FfYWRkX2lkIChJRE5BTUVfUklHSURESVNLLCBOVUxMKTsKKworCWZvciAoaSA9IDA7IGk8UkRCX0xPQ0FUSU9OX0xJTUlUOyBpKyspIHsKKwkJaWYgKCFfYW1pZ2FfcmVhZF9ibG9jayAoZGV2LCBBTUlHQShyZGIpLCBpLCBpZHMpKSB7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoUEVEX0JFMzJfVE9fQ1BVIChyZGItPnJkYl9JRCkgPT0gSUROQU1FX1JJR0lERElTSykgeworCQkJX2FtaWdhX2ZyZWVfaWRzIChpZHMpOworCQkJcmV0dXJuIGk7CisJCX0KKwl9CisJX2FtaWdhX2ZyZWVfaWRzIChpZHMpOworCXJldHVybiBBTUlHQV9SREJfTk9UX0ZPVU5EOworfQorCitzdGF0aWMgaW50CitfYW1pZ2FfbG9vcF9jaGVjayAodWludDMyX3QgYmxvY2ssIHVpbnQzMl90ICogYmxvY2tsaXN0LCB1aW50MzJfdCBtYXgpCit7CisJdWludDMyX3QgaTsKKworCWZvciAoaSA9IDA7IGkgPCBtYXg7IGkrKykKKwkJaWYgKGJsb2NrID09IGJsb2NrbGlzdFtpXSkgeworCQkJLyogV2UgYXJlIGxvb3BpbmcsIGxldCdzIHN0b3AuICAqLworCQkJcmV0dXJuIDE7CisJCX0KKwlibG9ja2xpc3RbbWF4XSA9IGJsb2NrOworCXJldHVybiAwOworfQorCisvKiBXZSBoYXZlIGFscmVhZHkgYWxsb2NhdGVkIGEgcmRiLCB3ZSBhcmUgbm93IHJlYWRpbmcgaXQgZnJvbSB0aGUgZGlzayAqLworc3RydWN0IFBhcnRpdGlvbkJsb2NrICoKK2FtaWdhX2ZpbmRfcGFydCAoUGVkR2VvbWV0cnkgKmdlb20sIHN0cnVjdCBQYXJ0aXRpb25CbG9jayAqcGFydCkKK3sKKwlzdHJ1Y3QgUmlnaWREaXNrQmxvY2sgKnJkYjsKKwl1aW50MzJfdCBwYXJ0YmxvY2s7CisJdWludDMyX3QgcGFydGxpc3RbQU1JR0FfTUFYX1BBUlRJVElPTlNdOworCWludCBpOworCisJUEVEX0FTU0VSVChnZW9tIT0gTlVMTCwgcmV0dXJuIE5VTEwpOworCVBFRF9BU1NFUlQoZ2VvbS0+ZGV2IT0gTlVMTCwgcmV0dXJuIE5VTEwpOworCisJaWYgKCEocmRiID0gcGVkX21hbGxvYyAoUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQpKSkgeworCQlzd2l0Y2ggKHBlZF9leGNlcHRpb25fdGhyb3coUEVEX0VYQ0VQVElPTl9FUlJPUiwKKwkJCVBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJXygiJXMgOiBGYWlsZWQgdG8gYWxsb2NhdGUgZGlza19zcGVjaWZpYyByZGIgYmxvY2tcbiIpLCBfX2Z1bmNfXykpCisJCXsKKwkJCWNhc2UgUEVEX0VYQ0VQVElPTl9DQU5DRUwgOgorCQkJY2FzZSBQRURfRVhDRVBUSU9OX1VOSEFORExFRCA6CisJCQlkZWZhdWx0IDogCisJCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9CisJaWYgKF9hbWlnYV9maW5kX3JkYiAoZ2VvbS0+ZGV2LCByZGIpID09IEFNSUdBX1JEQl9OT1RfRk9VTkQpIHsKKwkJc3dpdGNoIChwZWRfZXhjZXB0aW9uX3Rocm93KFBFRF9FWENFUFRJT05fRVJST1IsCisJCQlQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCV8oIiVzIDogRGlkbid0IGZpbmQgcmRiIGJsb2NrLCBzaG91bGQgbmV2ZXIgaGFwcGVuXG4iKSwgX19mdW5jX18pKQorCQl7CisJCQljYXNlIFBFRF9FWENFUFRJT05fQ0FOQ0VMIDoKKwkJCWNhc2UgUEVEX0VYQ0VQVElPTl9VTkhBTkRMRUQgOgorCQkJZGVmYXVsdCA6IAorCQkJCXBlZF9mcmVlKHJkYik7CisJCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9CisKKwkvKiBXZSBpbml0aWFsaXplIHRoZSBoYXJkYmxvY2sgZnJlZSBsaXN0IHRvIGRldGVjdCBsb29wcyAqLworCWZvciAoaSA9IDA7IGkgPCBBTUlHQV9NQVhfUEFSVElUSU9OUzsgaSsrKSBwYXJ0bGlzdFtpXSA9IElETkFNRV9GUkVFOworCisJZm9yIChpID0gMSwgcGFydGJsb2NrID0gUEVEX0JFMzJfVE9fQ1BVKHJkYi0+cmRiX1BhcnRpdGlvbkxpc3QpOworCQlpIDwgQU1JR0FfTUFYX1BBUlRJVElPTlMgJiYgcGFydGJsb2NrICE9IElETkFNRV9GUkVFOworCQlpKyssIHBhcnRibG9jayA9IFBFRF9CRTMyX1RPX0NQVShwYXJ0LT5wYl9OZXh0KSkKKwl7CisJCVBlZFNlY3RvciBzdGFydCwgZW5kOworCQlQZWRTZWN0b3IgY3lsYmxvY2tzOworCisJCS8qIExldCdzIGxvb2sgZm9yIGxvb3BzIGluIHRoZSBwYXJ0aXRpb24gdGFibGUgKi8KKwkJaWYgKF9hbWlnYV9sb29wX2NoZWNrKHBhcnRibG9jaywgcGFydGxpc3QsIGkpKSB7CisJCQlwZWRfZnJlZSAocmRiKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCS8qIExldCdzIHJlYWQgYSBwYXJ0aXRpb24gYmxvY2sgdG8gZ2V0IGl0cyBnZW9tZXRyeSovCisJCWlmICghcGVkX2RldmljZV9yZWFkIChnZW9tLT5kZXYsIHBhcnQsIChQZWRTZWN0b3IpcGFydGJsb2NrLCAxKSkgeworCQkJc3dpdGNoIChwZWRfZXhjZXB0aW9uX3Rocm93KFBFRF9FWENFUFRJT05fRVJST1IsCisJCQkJUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQkJXygiJXMgOiBGYWlsZWQgdG8gcmVhZCBwYXJ0aXRpb24gYmxvY2sgJWxsdVxuIiksCisJCQkJX19mdW5jX18sIChQZWRTZWN0b3IpcGFydGJsb2NrKSkKKwkJCXsKKwkJCQljYXNlIFBFRF9FWENFUFRJT05fQ0FOQ0VMIDoKKwkJCQljYXNlIFBFRF9FWENFUFRJT05fVU5IQU5ETEVEIDoKKwkJCQlkZWZhdWx0IDogCisJCQkJCXBlZF9mcmVlKHJkYik7CisJCQkJCXJldHVybiBOVUxMOworCQkJfQorCQl9CisKKwkJLyogQ3VycmVudCBibG9jayBpcyBub3QgYSBQYXJ0aXRpb24gQmxvY2sgKi8KKwkJaWYgKHBhcnQtPnBiX0lEICE9IElETkFNRV9QQVJUSVRJT04pIHsKKwkJCXBlZF9mcmVlIChyZGIpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKworCQkvKiBDYWxjdWxhdGUgdGhlIGdlb21ldHJ5IG9mIHRoZSBwYXJ0aXRpb24gKi8KKwkJY3lsYmxvY2tzID0gKChQZWRTZWN0b3IpIFBFRF9CRTMyX1RPX0NQVSAocGFydC0+ZGVfU3VyZmFjZXMpKSAqCisJCQkoKFBlZFNlY3RvcikgUEVEX0JFMzJfVE9fQ1BVIChwYXJ0LT5kZV9CbG9ja3NQZXJUcmFjaykpOworCQlzdGFydCA9ICgoUGVkU2VjdG9yKSBQRURfQkUzMl9UT19DUFUgKHBhcnQtPmRlX0xvd0N5bCkpICogY3lsYmxvY2tzOworCQllbmQgPSAoKCgoUGVkU2VjdG9yKSBQRURfQkUzMl9UT19DUFUgKHBhcnQtPmRlX0hpZ2hDeWwpKSsxKSAqIChjeWxibG9ja3MpKS0xOworCisJCS8qIEFuZCBjaGVjayBpZiBpdCBpcyB0aGUgb25lIHdlIGFyZSBzZWFyY2hpbmcgZm9yICovCisJCWlmIChzdGFydCA9PSBnZW9tLT5zdGFydCAmJiBlbmQgPT0gZ2VvbS0+ZW5kKSB7CisJCQlwZWRfZnJlZSAocmRiKTsKKwkJCXJldHVybiBwYXJ0OworCQl9CisJfQorCisJcGVkX2ZyZWUgKHJkYik7CisJcmV0dXJuIE5VTEw7Cit9CmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmggYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdiYzFmOAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuaApAQCAtMCwwICsxLDcxIEBACisvKgorICAgIHV0aWwuaCAtLSBhbWlnYSBwYXJ0aXRpb24gdGFibGUgaGVhZGVycy4KKyAgICBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKK3N0cnVjdCBQYXJ0aXRpb25CbG9jayB7CisgICAgdWludDMyX3QJcGJfSUQ7CQkJLyogSWRlbnRpZmllciAzMiBiaXQgd29yZCA6ICdQQVJUJyAqLworICAgIHVpbnQzMl90CXBiX1N1bW1lZExvbmdzOwkJLyogU2l6ZSBvZiB0aGUgc3RydWN0dXJlIGZvciBjaGVja3N1bXMgKi8KKyAgICBpbnQzMl90CXBiX0Noa1N1bTsJCS8qIENoZWNrc3VtIG9mIHRoZSBzdHJ1Y3R1cmUgKi8KKyAgICB1aW50MzJfdAlwYl9Ib3N0SUQ7CQkvKiBTQ1NJIFRhcmdldCBJRCBvZiBob3N0LCBub3QgcmVhbGx5IHVzZWQgKi8KKyAgICB1aW50MzJfdAlwYl9OZXh0OwkJLyogQmxvY2sgbnVtYmVyIG9mIHRoZSBuZXh0IFBhcnRpdGlvbkJsb2NrICovCisgICAgdWludDMyX3QJcGJfRmxhZ3M7CQkvKiBQYXJ0IEZsYWdzIChOT01PVU5UIGFuZCBCT09UQUJMRSkgKi8KKyAgICB1aW50MzJfdAlwYl9SZXNlcnZlZDFbMl07CisgICAgdWludDMyX3QJcGJfRGV2RmxhZ3M7CQkvKiBQcmVmZXJyZWQgZmxhZ3MgZm9yIE9wZW5EZXZpY2UgKi8KKyAgICB1aW50OF90CXBiX0RyaXZlTmFtZVszMl07CS8qIFByZWZlcnJlZCBET1MgZGV2aWNlIG5hbWU6IEJTVFIgZm9ybSAqLworICAgIHVpbnQzMl90CXBiX1Jlc2VydmVkMlsxNV07CisgICAgdWludDMyX3QJZGVfVGFibGVTaXplOwkJLyogU2l6ZSBvZiBFbnZpcm9ubWVudCB2ZWN0b3IgKi8KKyAgICB1aW50MzJfdAlkZV9TaXplQmxvY2s7CQkvKiBTaXplIG9mIHRoZSBibG9ja3MgaW4gMzIgYml0IHdvcmRzLCB1c3VhbGx5IDEyOCAqLworICAgIHVpbnQzMl90CWRlX1NlY09yZzsJICAgICAJLyogTm90IHVzZWQ7IG11c3QgYmUgMCAqLworICAgIHVpbnQzMl90CWRlX1N1cmZhY2VzOwkJLyogTnVtYmVyIG9mIGhlYWRzIChzdXJmYWNlcykgKi8KKyAgICB1aW50MzJfdAlkZV9TZWN0b3JQZXJCbG9jazsJLyogRGlzayBzZWN0b3JzIHBlciBibG9jaywgdXNlZCB3aXRoIFNpemVCbG9jaywgdXN1YWxseSAxICovCisgICAgdWludDMyX3QJZGVfQmxvY2tzUGVyVHJhY2s7CS8qIEJsb2NrcyBwZXIgdHJhY2suIGRyaXZlIHNwZWNpZmljICovCisgICAgdWludDMyX3QJZGVfUmVzZXJ2ZWQ7CQkvKiBET1MgcmVzZXJ2ZWQgYmxvY2tzIGF0IHN0YXJ0IG9mIHBhcnRpdGlvbi4gKi8KKyAgICB1aW50MzJfdAlkZV9QcmVBbGxvYzsJCS8qIERPUyByZXNlcnZlZCBibG9ja3MgYXQgZW5kIG9mIHBhcnRpdGlvbiAqLworICAgIHVpbnQzMl90CWRlX0ludGVybGVhdmU7CQkvKiBOb3QgdXNlZCwgdXN1YWxseSAwICovCisgICAgdWludDMyX3QJZGVfTG93Q3lsOwkJLyogRmlyc3QgY3lsaW5kZXIgb2YgdGhlIHBhcnRpdGlvbiAqLworICAgIHVpbnQzMl90CWRlX0hpZ2hDeWw7CQkvKiBMYXN0IGN5bGluZGVyIG9mIHRoZSBwYXJ0aXRpb24gKi8KKyAgICB1aW50MzJfdAlkZV9OdW1CdWZmZXJzOwkJLyogSW5pdGlhbCAjIERPUyBvZiBidWZmZXJzLiAgKi8KKyAgICB1aW50MzJfdAlkZV9CdWZNZW1UeXBlOwkJLyogVHlwZSBvZiBtZW0gdG8gYWxsb2NhdGUgZm9yIGJ1ZmZlcnMgKi8KKyAgICB1aW50MzJfdAlkZV9NYXhUcmFuc2ZlcjsJCS8qIE1heCBudW1iZXIgb2YgYnl0ZXMgdG8gdHJhbnNmZXIgYXQgYSB0aW1lICovCisgICAgdWludDMyX3QJZGVfTWFzazsJCS8qIEFkZHJlc3MgTWFzayB0byBibG9jayBvdXQgY2VydGFpbiBtZW1vcnkgKi8KKyAgICBpbnQzMl90CWRlX0Jvb3RQcmk7CQkvKiBCb290IHByaW9yaXR5IGZvciBhdXRvYm9vdCAqLworICAgIHVpbnQzMl90CWRlX0Rvc1R5cGU7CQkvKiBEb3N0eXBlIG9mIHRoZSBmaWxlIHN5c3RlbSAqLworICAgIHVpbnQzMl90CWRlX0JhdWQ7CQkvKiBCYXVkIHJhdGUgZm9yIHNlcmlhbCBoYW5kbGVyICovCisgICAgdWludDMyX3QJZGVfQ29udHJvbDsJCS8qIENvbnRyb2wgd29yZCBmb3IgaGFuZGxlci9maWxlc3lzdGVtICovCisgICAgdWludDMyX3QJZGVfQm9vdEJsb2NrczsJCS8qIE51bWJlciBvZiBibG9ja3MgY29udGFpbmluZyBib290IGNvZGUgKi8KKyAgICB1aW50MzJfdAlwYl9FUmVzZXJ2ZWRbMTJdOworfTsKKworI2RlZmluZSBQQVJUKHBvcykgKChzdHJ1Y3QgUGFydGl0aW9uQmxvY2sgKikocG9zKSkKKworI2RlZmluZQlQQkZCX0JPT1RBQkxFCTAJLyogdGhpcyBwYXJ0aXRpb24gaXMgaW50ZW5kZWQgdG8gYmUgYm9vdGFibGUgKi8KKyNkZWZpbmUJUEJGRl9CT09UQUJMRQkxTAkvKiAgIChleHBlY3RlZCBkaXJlY3RvcmllcyBhbmQgZmlsZXMgZXhpc3QpICovCisjZGVmaW5lCVBCRkJfTk9NT1VOVAkxCS8qIGRvIG5vdCBtb3VudCB0aGlzIHBhcnRpdGlvbiAoZS5nLiBtYW51YWxseSAqLworI2RlZmluZQlQQkZGX05PTU9VTlQJMkwJLyogICBtb3VudGVkLCBidXQgc3BhY2UgcmVzZXJ2ZWQgaGVyZSkgKi8KKworc3RydWN0IFBhcnRpdGlvbkJsb2NrICogYW1pZ2FfZmluZF9wYXJ0IChQZWRHZW9tZXRyeSAqZ2VvbSwgc3RydWN0IFBhcnRpdGlvbkJsb2NrICpwYXJ0KTsKKworc3RydWN0IEFtaWdhSWRzIHsKKwl1aW50MzJfdCBJRDsKKwlzdHJ1Y3QgQW1pZ2FJZHMgKm5leHQ7Cit9OworCitzdHJ1Y3QgQW1pZ2FJZHMgKiBfYW1pZ2FfYWRkX2lkICh1aW50MzJfdCBpZCwgc3RydWN0IEFtaWdhSWRzICppZHMpOwordm9pZCBfYW1pZ2FfZnJlZV9pZHMgKHN0cnVjdCBBbWlnYUlkcyAqaWRzKTsKK2ludCBfYW1pZ2FfaWRfaW5fbGlzdCAodWludDMyX3QgaWQsIHN0cnVjdCBBbWlnYUlkcyAqaWRzKTsKKwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9hbWlnYS9hcGZzLmMgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2FtaWdhL2FwZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTNiYThkCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9hbWlnYS9hcGZzLmMKQEAgLTAsMCArMSwxNTEgQEAKKy8qCisgICAgYXBmcy5jIC0tIHBhcnRlZCBzdXBwb3J0IGZvciBhcGZzIGZpbGUgc3lzdGVtcworICAgIENvcHlyaWdodCAoQykgMTk5OC0yMDAwLCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaW5jbHVkZSA8cGFydGVkL3BhcnRlZC5oPgorI2luY2x1ZGUgPHBhcnRlZC9kZWJ1Zy5oPgorI2luY2x1ZGUgPHBhcnRlZC9lbmRpYW4uaD4KKworI2luY2x1ZGUgImFtaWdhLmgiCisjaW5jbHVkZSAiYXBmcy5oIgorCisjaWYgRU5BQkxFX05MUworIyAgaW5jbHVkZSA8bGliaW50bC5oPgorIyAgZGVmaW5lIF8oU3RyaW5nKSBkZ2V0dGV4dCAoUEFDS0FHRSwgU3RyaW5nKQorI2Vsc2UKKyMgIGRlZmluZSBfKFN0cmluZykgKFN0cmluZykKKyNlbmRpZiAvKiBFTkFCTEVfTkxTICovCisKK3N0YXRpYyBpbnQKK19hcGZzX3Byb2JlX3Jvb3QgKHVpbnQzMl90ICpibG9jaywgdWludDMyX3QgYmxvY2tzaXplLCB1aW50MzJfdCBraW5kKSB7CisJaWYgKFBFRF9CRTMyX1RPX0NQVSAoYmxvY2tbMF0pICE9IGtpbmQpIHJldHVybiAwOworCXJldHVybiAxOworfQorCitzdGF0aWMgUGVkR2VvbWV0cnkqCitfZ2VuZXJpY19hcGZzX3Byb2JlIChQZWRHZW9tZXRyeSogZ2VvbSwgdWludDMyX3Qga2luZCkKK3sKKwl1aW50MzJfdCAqYmxvY2s7CisJUGVkU2VjdG9yIHJvb3Q7CisJc3RydWN0IFBhcnRpdGlvbkJsb2NrICogcGFydDsKKwl1aW50MzJfdCBibG9ja3NpemUgPSAxLCByZXNlcnZlZCA9IDIsIHByZWFsbG9jID0gMDsKKworCVBFRF9BU1NFUlQgKGdlb20gIT0gTlVMTCwgcmV0dXJuIE5VTEwpOworCVBFRF9BU1NFUlQgKGdlb20tPmRldiAhPSBOVUxMLCByZXR1cm4gTlVMTCk7CisKKwkvKiBGaW5kcyB0aGUgYmxvY2tzaXplLCBwcmVhbGxvYyBhbmQgcmVzZXJ2ZWQgdmFsdWVzIG9mIHRoZSBwYXJ0aXRpb24gYmxvY2sgKi8KKwlpZiAoIShwYXJ0ID0gcGVkX21hbGxvYyAoUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQqYmxvY2tzaXplKSkpIHsKKwkJcGVkX2V4Y2VwdGlvbl90aHJvdyhQRURfRVhDRVBUSU9OX0VSUk9SLCBQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCV8oIiVzIDogRmFpbGVkIHRvIGFsbG9jYXRlIHBhcnRpdGlvbiBibG9ja1xuIiksIF9fZnVuY19fKTsKKwkJZ290byBlcnJvcl9wYXJ0OworCX0KKwlpZiAoYW1pZ2FfZmluZF9wYXJ0KGdlb20sIHBhcnQpICE9IE5VTEwpIHsKKwkJcHJlYWxsb2MgPSBQRURfQkUzMl9UT19DUFUgKHBhcnQtPmRlX1ByZUFsbG9jKTsKKwkJcmVzZXJ2ZWQgPSBQRURfQkUzMl9UT19DUFUgKHBhcnQtPmRlX1Jlc2VydmVkKTsKKwkJYmxvY2tzaXplID0gUEVEX0JFMzJfVE9fQ1BVIChwYXJ0LT5kZV9TaXplQmxvY2spCisJCQkqIFBFRF9CRTMyX1RPX0NQVSAocGFydC0+ZGVfU2VjdG9yUGVyQmxvY2spIC8gMTI4OworCX0KKwlwZWRfZnJlZSAocGFydCk7CisKKwkvKiBUZXN0IGJvb3QgYmxvY2sgKi8KKwlpZiAoIShibG9jayA9IHBlZF9tYWxsb2MgKFBFRF9TRUNUT1JfU0laRV9ERUZBVUxUKmJsb2Nrc2l6ZSkpKSB7CisJCXBlZF9leGNlcHRpb25fdGhyb3coUEVEX0VYQ0VQVElPTl9FUlJPUiwgUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQlfKCIlcyA6IEZhaWxlZCB0byBhbGxvY2F0ZSBibG9ja1xuIiksIF9fZnVuY19fKTsKKwkJZ290byBlcnJvcl9ibG9jazsKKwl9CisJaWYgKCFwZWRfZGV2aWNlX3JlYWQgKGdlb20tPmRldiwgYmxvY2ssIGdlb20tPnN0YXJ0LCBibG9ja3NpemUpKSB7CisJCXBlZF9leGNlcHRpb25fdGhyb3coUEVEX0VYQ0VQVElPTl9FUlJPUiwgUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQlfKCIlcyA6IENvdWxkbid0IHJlYWQgYm9vdCBibG9jayAlbGx1XG4iKSwgX19mdW5jX18sIGdlb20tPnN0YXJ0KTsKKwkJZ290byBlcnJvcjsKKwl9CisJaWYgKFBFRF9CRTMyX1RPX0NQVSAoYmxvY2tbMF0pICE9IGtpbmQpIHsKKwkJZ290byBlcnJvcjsKKwl9CisKKwkvKiBGaW5kIGFuZCB0ZXN0IHRoZSByb290IGJsb2NrICovCisJcm9vdCA9IGdlb20tPnN0YXJ0K3Jlc2VydmVkKmJsb2Nrc2l6ZTsKKwlpZiAoIXBlZF9kZXZpY2VfcmVhZCAoZ2VvbS0+ZGV2LCBibG9jaywgcm9vdCwgYmxvY2tzaXplKSkgeworCQlwZWRfZXhjZXB0aW9uX3Rocm93KFBFRF9FWENFUFRJT05fRVJST1IsIFBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJXygiJXMgOiBDb3VsZG4ndCByZWFkIHJvb3QgYmxvY2sgJWxsdVxuIiksIF9fZnVuY19fLCByb290KTsKKwkJZ290byBlcnJvcjsKKwl9CisJaWYgKF9hcGZzX3Byb2JlX3Jvb3QoYmxvY2ssIGJsb2Nrc2l6ZSwga2luZCkgPT0gMSkgeworCQlwZWRfZnJlZShibG9jayk7CisJCXJldHVybiBwZWRfZ2VvbWV0cnlfZHVwbGljYXRlIChnZW9tKTsKKwl9CisKK2Vycm9yOgorCXBlZF9mcmVlIChibG9jayk7CitlcnJvcl9ibG9jazoKK2Vycm9yX3BhcnQ6CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBQZWRHZW9tZXRyeSoKK19hcGZzMV9wcm9iZSAoUGVkR2VvbWV0cnkqIGdlb20pIHsKKwlyZXR1cm4gX2dlbmVyaWNfYXBmc19wcm9iZSAoZ2VvbSwgMHg1MDQ2MzEwMSk7Cit9CisKK3N0YXRpYyBQZWRHZW9tZXRyeSoKK19hcGZzMl9wcm9iZSAoUGVkR2VvbWV0cnkqIGdlb20pIHsKKwlyZXR1cm4gX2dlbmVyaWNfYXBmc19wcm9iZSAoZ2VvbSwgMHg1MDQ2MzEwMik7Cit9CisKK3N0YXRpYyBQZWRGaWxlU3lzdGVtT3BzIF9hcGZzMV9vcHMgPSB7CisJcHJvYmU6CQlfYXBmczFfcHJvYmUsCisJY2xvYmJlcjoJTlVMTCwKKwlvcGVuOgkJTlVMTCwKKwljcmVhdGU6ICAgICAgICAgTlVMTCwKKwljbG9zZToJCU5VTEwsCisJY2hlY2s6ICAgICAgICAgIE5VTEwsCisJcmVzaXplOgkJTlVMTCwKKwljb3B5OiAgICAgICAgICAgTlVMTCwKKwlnZXRfY3JlYXRlX2NvbnN0cmFpbnQ6CU5VTEwsCisJZ2V0X2NvcHlfY29uc3RyYWludDoJTlVMTCwKKwlnZXRfcmVzaXplX2NvbnN0cmFpbnQ6CU5VTEwKK307CitzdGF0aWMgUGVkRmlsZVN5c3RlbU9wcyBfYXBmczJfb3BzID0geworCXByb2JlOgkJX2FwZnMyX3Byb2JlLAorCWNsb2JiZXI6CU5VTEwsCisJb3BlbjoJCU5VTEwsCisJY3JlYXRlOiAgICAgICAgIE5VTEwsCisJY2xvc2U6CQlOVUxMLAorCWNoZWNrOiAgICAgICAgICBOVUxMLAorCXJlc2l6ZToJCU5VTEwsCisJY29weTogICAgICAgICAgIE5VTEwsCisJZ2V0X2NyZWF0ZV9jb25zdHJhaW50OglOVUxMLAorCWdldF9jb3B5X2NvbnN0cmFpbnQ6CU5VTEwsCisJZ2V0X3Jlc2l6ZV9jb25zdHJhaW50OglOVUxMCit9OworCisjZGVmaW5lIEFQRlNfQkxPQ0tfU0laRVMgKChpbnRbMl0pezUxMiwgMH0pCisKK1BlZEZpbGVTeXN0ZW1UeXBlIF9hcGZzMV90eXBlID0geworICAgICAgIG5leHQ6CQkgTlVMTCwKKyAgICAgICBvcHM6CQkgJl9hcGZzMV9vcHMsCisgICAgICAgbmFtZToJCSAiYXBmczEiLAorICAgICAgIGJsb2NrX3NpemVzOiAgICAgIEFQRlNfQkxPQ0tfU0laRVMKK307CitQZWRGaWxlU3lzdGVtVHlwZSBfYXBmczJfdHlwZSA9IHsKKyAgICAgICBuZXh0OgkJIE5VTEwsCisgICAgICAgb3BzOgkJICZfYXBmczJfb3BzLAorICAgICAgIG5hbWU6CQkgImFwZnMyIiwKKyAgICAgICBibG9ja19zaXplczogICAgICBBUEZTX0JMT0NLX1NJWkVTCit9OwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9hbWlnYS9hcGZzLmggYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2FtaWdhL2FwZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDNhNTA5Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9hbWlnYS9hcGZzLmgKQEAgLTAsMCArMSwxOSBAQAorCisvKgorICAgIGFwZnMuaCAtLSBwYXJ0ZWQgc3VwcG9ydCBmb3IgYXBmcyBmaWxlIHN5c3RlbXMgaGVhZGVyIGZpbGVzCisgICAgQ29weXJpZ2h0IChDKSAxOTk4LTIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgIAorICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9hbWlnYS9hc2ZzLmMgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2FtaWdhL2FzZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmQ4NjhmCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9hbWlnYS9hc2ZzLmMKQEAgLTAsMCArMSwxNDMgQEAKKy8qCisgICAgYXNmcy5jIC0tIHBhcnRlZCBhc2ZzIGZpbGVzeXN0ZW0gc3VwcG9ydAorICAgIENvcHlyaWdodCAoQykgMTk5OC0yMDAwLCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaW5jbHVkZSA8cGFydGVkL3BhcnRlZC5oPgorI2luY2x1ZGUgPHBhcnRlZC9kZWJ1Zy5oPgorI2luY2x1ZGUgPHBhcnRlZC9lbmRpYW4uaD4KKworI2luY2x1ZGUgImFtaWdhLmgiCisjaW5jbHVkZSAiYXNmcy5oIgorCisjaWYgRU5BQkxFX05MUworIyAgaW5jbHVkZSA8bGliaW50bC5oPgorIyAgZGVmaW5lIF8oU3RyaW5nKSBkZ2V0dGV4dCAoUEFDS0FHRSwgU3RyaW5nKQorI2Vsc2UKKyMgIGRlZmluZSBfKFN0cmluZykgKFN0cmluZykKKyNlbmRpZiAvKiBFTkFCTEVfTkxTICovCisKK3N0YXRpYyBpbnQKK19hc2ZzX3Byb2JlX3Jvb3QgKFBlZEdlb21ldHJ5ICpnZW9tLCB1aW50MzJfdCAqYmxvY2ssIGludCBibG9ja3NpemUsIFBlZFNlY3RvciByb290KSB7CisJaW50IGksIHN1bTsKKwlQZWRTZWN0b3Igc3RhcnQsIGVuZDsKKworCWlmIChQRURfQkUzMl9UT19DUFUgKGJsb2NrWzBdKSAhPSAweDUzNDY1MzAwKSByZXR1cm4gMDsKKwlmb3IgKGkgPSAwLCBzdW0gPSAxOyBpIDwgMTI4KmJsb2Nrc2l6ZTsgaSsrKSBzdW0gKz0gUEVEX0JFMzJfVE9fQ1BVIChibG9ja1tpXSk7CisJaWYgKHN1bSAhPSAwKSByZXR1cm4gMDsKKwlpZiAoUEVEX0JFMzJfVE9fQ1BVIChibG9ja1syXSkgKiBibG9ja3NpemUgKyBnZW9tLT5zdGFydCAhPSByb290KSB7CisJCXJldHVybiAwOworCX0KKwlzdGFydCA9ICgoKChQZWRTZWN0b3IpIFBFRF9CRTMyX1RPX0NQVSAoYmxvY2tbOF0pKSA8PCAzMikKKwkJKyAoUGVkU2VjdG9yKSBQRURfQkUzMl9UT19DUFUgKGJsb2NrWzldKSkgLyA1MTI7CisJZW5kID0gKCgoKChQZWRTZWN0b3IpIFBFRF9CRTMyX1RPX0NQVSAoYmxvY2tbMTBdKSkgPDwgMzIpCisJCSsgKFBlZFNlY3RvcikgUEVEX0JFMzJfVE9fQ1BVIChibG9ja1sxMV0pKSAvIDUxMikgLSAxOworCWlmIChzdGFydCAhPSBnZW9tLT5zdGFydCB8fCBlbmQgIT0gZ2VvbS0+ZW5kKSByZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIFBlZEdlb21ldHJ5KgorX2FzZnNfcHJvYmUgKFBlZEdlb21ldHJ5KiBnZW9tKQoreworCXVpbnQzMl90ICpibG9jazsKKwlzdHJ1Y3QgUGFydGl0aW9uQmxvY2sgKiBwYXJ0OworCWludCBibG9ja3NpemUgPSAxLCByZXNlcnZlZCA9IDEsIHByZWFsbG9jID0gMTsKKyAgICAgICAgUGVkU2VjdG9yIHJvb3Q7CisgICAgICAgIGludCBmb3VuZCA9IDA7CisKKwlQRURfQVNTRVJUIChnZW9tICE9IE5VTEwsIHJldHVybiBOVUxMKTsKKwlQRURfQVNTRVJUIChnZW9tLT5kZXYgIT0gTlVMTCwgcmV0dXJuIE5VTEwpOworCisJLyogRmluZHMgdGhlIGJsb2Nrc2l6ZSwgcHJlYWxsb2MgYW5kIHJlc2VydmVkIHZhbHVlcyBvZiB0aGUgcGFydGl0aW9uIGJsb2NrICovCisJaWYgKCEocGFydCA9IHBlZF9tYWxsb2MgKFBFRF9TRUNUT1JfU0laRV9ERUZBVUxUKmJsb2Nrc2l6ZSkpKSB7CisJCXBlZF9leGNlcHRpb25fdGhyb3coUEVEX0VYQ0VQVElPTl9FUlJPUiwgUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQlfKCIlcyA6IEZhaWxlZCB0byBhbGxvY2F0ZSBwYXJ0aXRpb24gYmxvY2tcbiIpLCBfX2Z1bmNfXyk7CisJCWdvdG8gZXJyb3JfcGFydDsKKwl9CisJaWYgKGFtaWdhX2ZpbmRfcGFydChnZW9tLCBwYXJ0KSAhPSBOVUxMKSB7CisJCXByZWFsbG9jID0gUEVEX0JFMzJfVE9fQ1BVIChwYXJ0LT5kZV9QcmVBbGxvYykgPT0gMCA/CisJCQkxIDogUEVEX0JFMzJfVE9fQ1BVIChwYXJ0LT5kZV9QcmVBbGxvYyk7CisJCXJlc2VydmVkID0gUEVEX0JFMzJfVE9fQ1BVIChwYXJ0LT5kZV9SZXNlcnZlZCkgPT0gMCA/CisJCQkxIDogUEVEX0JFMzJfVE9fQ1BVIChwYXJ0LT5kZV9SZXNlcnZlZCk7CisJCWJsb2Nrc2l6ZSA9IFBFRF9CRTMyX1RPX0NQVSAocGFydC0+ZGVfU2l6ZUJsb2NrKQorCQkJKiBQRURfQkUzMl9UT19DUFUgKHBhcnQtPmRlX1NlY3RvclBlckJsb2NrKSAvIDEyODsKKwl9CisJcGVkX2ZyZWUgKHBhcnQpOworCisJLyogVGVzdCBib290IGJsb2NrICovCisJaWYgKCEoYmxvY2sgPSBwZWRfbWFsbG9jIChQRURfU0VDVE9SX1NJWkVfREVGQVVMVCpibG9ja3NpemUpKSkgeworCQlwZWRfZXhjZXB0aW9uX3Rocm93KFBFRF9FWENFUFRJT05fRVJST1IsIFBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJXygiJXMgOiBGYWlsZWQgdG8gYWxsb2NhdGUgYmxvY2tcbiIpLCBfX2Z1bmNfXyk7CisJCWdvdG8gZXJyb3JfYmxvY2s7CisJfQorCXJvb3QgPSBnZW9tLT5zdGFydDsKKwlpZiAoIXBlZF9kZXZpY2VfcmVhZCAoZ2VvbS0+ZGV2LCBibG9jaywgcm9vdCwgYmxvY2tzaXplKSkgeworCQlwZWRfZXhjZXB0aW9uX3Rocm93KFBFRF9FWENFUFRJT05fRVJST1IsIFBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJXygiJXMgOiBDb3VsZG4ndCByZWFkIHJvb3QgYmxvY2sgJWxsdVxuIiksIF9fZnVuY19fLCByb290KTsKKwkJZ290byBlcnJvcjsKKwl9CisJaWYgKFBFRF9CRTMyX1RPX0NQVSAoYmxvY2tbMF0pICE9IDB4NTM0NjUzMDApIHsKKwkJZ290byBlcnJvcjsKKwl9CisKKwkvKiBGaW5kIGFuZCB0ZXN0IHRoZSByb290IGJsb2NrcyAqLworCWlmIChfYXNmc19wcm9iZV9yb290KGdlb20sIGJsb2NrLCBibG9ja3NpemUsIHJvb3QpKSB7CisJCWZvdW5kKys7CisJfQorCXJvb3QgPSBnZW9tLT5lbmQgLSBibG9ja3NpemUgLSAoZ2VvbS0+bGVuZ3RoICUgYmxvY2tzaXplKSArIDE7CisJaWYgKCFwZWRfZGV2aWNlX3JlYWQgKGdlb20tPmRldiwgYmxvY2ssIHJvb3QsIDEpKSB7CisJCXBlZF9leGNlcHRpb25fdGhyb3coUEVEX0VYQ0VQVElPTl9FUlJPUiwgUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQlfKCIlcyA6IENvdWxkbid0IHJlYWQgcm9vdCBibG9jayAlbGx1XG4iKSwgX19mdW5jX18sIHJvb3QpOworCQlnb3RvIGVycm9yOworCX0KKwlpZiAoX2FzZnNfcHJvYmVfcm9vdChnZW9tLCBibG9jaywgYmxvY2tzaXplLCByb290KSkgeworCQlmb3VuZCsrOworCX0KKwlpZiAoZm91bmQgIT0gMCkgeworCQlwZWRfZnJlZSAoYmxvY2spOworCQlyZXR1cm4gcGVkX2dlb21ldHJ5X2R1cGxpY2F0ZSAoZ2VvbSk7CisJfQorCitlcnJvcjoKKwlwZWRfZnJlZSAoYmxvY2spOworZXJyb3JfYmxvY2s6CitlcnJvcl9wYXJ0OgorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgUGVkRmlsZVN5c3RlbU9wcyBfYXNmc19vcHMgPSB7CisJcHJvYmU6CQlfYXNmc19wcm9iZSwKKwljbG9iYmVyOglOVUxMLAorCW9wZW46CQlOVUxMLAorCWNyZWF0ZTogICAgICAgICBOVUxMLAorCWNsb3NlOgkJTlVMTCwKKwljaGVjazogICAgICAgICAgTlVMTCwKKwlyZXNpemU6CQlOVUxMLAorCWNvcHk6ICAgICAgICAgICBOVUxMLAorCWdldF9jcmVhdGVfY29uc3RyYWludDoJTlVMTCwKKwlnZXRfY29weV9jb25zdHJhaW50OglOVUxMLAorCWdldF9yZXNpemVfY29uc3RyYWludDoJTlVMTAorfTsKKworUGVkRmlsZVN5c3RlbVR5cGUgX2FzZnNfdHlwZSA9IHsKKyAgICAgICBuZXh0OgkJIE5VTEwsCisgICAgICAgb3BzOgkJICZfYXNmc19vcHMsCisgICAgICAgbmFtZToJCSAiYXNmcyIsCisgICAgICAgYmxvY2tfc2l6ZXM6ICAgICAgKChpbnRbMl0pezUxMiwgMH0pCit9OwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9hbWlnYS9hc2ZzLmggYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2FtaWdhL2FzZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTlmYzE2Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9hbWlnYS9hc2ZzLmgKQEAgLTAsMCArMSwxOSBAQAorCisvKgorICAgIGFzZnMuaCAtLSBwYXJ0ZWQgYXNmcyBmaWxlc3lzdGVtIHN1cHBvcnQgaGVhZGVyIGZpbGVzCisgICAgQ29weXJpZ2h0IChDKSAxOTk4LTIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgIAorICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9hbWlnYS9pbnRlcmZhY2UuYyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvYW1pZ2EvaW50ZXJmYWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJmNDhmNAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvYW1pZ2EvaW50ZXJmYWNlLmMKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAgICBpbnRlcmZhY2UuYyAtLSBwYXJ0ZWQgc3VwcG9ydCBhbWlnYSBmaWxlIHN5c3RlbXMKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaW5jbHVkZSA8cGFydGVkL3BhcnRlZC5oPgorI2luY2x1ZGUgPHBhcnRlZC9kZWJ1Zy5oPgorI2luY2x1ZGUgPHBhcnRlZC9lbmRpYW4uaD4KKworZXh0ZXJuIFBlZEZpbGVTeXN0ZW1UeXBlIF9hZmZzMF90eXBlOworZXh0ZXJuIFBlZEZpbGVTeXN0ZW1UeXBlIF9hZmZzMV90eXBlOworZXh0ZXJuIFBlZEZpbGVTeXN0ZW1UeXBlIF9hZmZzMl90eXBlOworZXh0ZXJuIFBlZEZpbGVTeXN0ZW1UeXBlIF9hZmZzM190eXBlOworZXh0ZXJuIFBlZEZpbGVTeXN0ZW1UeXBlIF9hZmZzNF90eXBlOworZXh0ZXJuIFBlZEZpbGVTeXN0ZW1UeXBlIF9hZmZzNV90eXBlOworZXh0ZXJuIFBlZEZpbGVTeXN0ZW1UeXBlIF9hZmZzNl90eXBlOworZXh0ZXJuIFBlZEZpbGVTeXN0ZW1UeXBlIF9hZmZzN190eXBlOworZXh0ZXJuIFBlZEZpbGVTeXN0ZW1UeXBlIF9hbXVmc190eXBlOworZXh0ZXJuIFBlZEZpbGVTeXN0ZW1UeXBlIF9hbXVmczBfdHlwZTsKK2V4dGVybiBQZWRGaWxlU3lzdGVtVHlwZSBfYW11ZnMxX3R5cGU7CitleHRlcm4gUGVkRmlsZVN5c3RlbVR5cGUgX2FtdWZzMl90eXBlOworZXh0ZXJuIFBlZEZpbGVTeXN0ZW1UeXBlIF9hbXVmczNfdHlwZTsKK2V4dGVybiBQZWRGaWxlU3lzdGVtVHlwZSBfYW11ZnM0X3R5cGU7CitleHRlcm4gUGVkRmlsZVN5c3RlbVR5cGUgX2FtdWZzNV90eXBlOworZXh0ZXJuIFBlZEZpbGVTeXN0ZW1UeXBlIF9hc2ZzX3R5cGU7CitleHRlcm4gUGVkRmlsZVN5c3RlbVR5cGUgX2FwZnMxX3R5cGU7CitleHRlcm4gUGVkRmlsZVN5c3RlbVR5cGUgX2FwZnMyX3R5cGU7CisKK3ZvaWQgcGVkX2ZpbGVfc3lzdGVtX2FtaWdhX2luaXQgKCkKK3sKKwlwZWRfZmlsZV9zeXN0ZW1fdHlwZV9yZWdpc3RlciAoJl9hZmZzMF90eXBlKTsKKwlwZWRfZmlsZV9zeXN0ZW1fdHlwZV9yZWdpc3RlciAoJl9hZmZzMV90eXBlKTsKKwlwZWRfZmlsZV9zeXN0ZW1fdHlwZV9yZWdpc3RlciAoJl9hZmZzMl90eXBlKTsKKwlwZWRfZmlsZV9zeXN0ZW1fdHlwZV9yZWdpc3RlciAoJl9hZmZzM190eXBlKTsKKwlwZWRfZmlsZV9zeXN0ZW1fdHlwZV9yZWdpc3RlciAoJl9hZmZzNF90eXBlKTsKKwlwZWRfZmlsZV9zeXN0ZW1fdHlwZV9yZWdpc3RlciAoJl9hZmZzNV90eXBlKTsKKwlwZWRfZmlsZV9zeXN0ZW1fdHlwZV9yZWdpc3RlciAoJl9hZmZzNl90eXBlKTsKKwlwZWRfZmlsZV9zeXN0ZW1fdHlwZV9yZWdpc3RlciAoJl9hZmZzN190eXBlKTsKKwlwZWRfZmlsZV9zeXN0ZW1fdHlwZV9yZWdpc3RlciAoJl9hbXVmc190eXBlKTsKKwlwZWRfZmlsZV9zeXN0ZW1fdHlwZV9yZWdpc3RlciAoJl9hbXVmczBfdHlwZSk7CisJcGVkX2ZpbGVfc3lzdGVtX3R5cGVfcmVnaXN0ZXIgKCZfYW11ZnMxX3R5cGUpOworCXBlZF9maWxlX3N5c3RlbV90eXBlX3JlZ2lzdGVyICgmX2FtdWZzMl90eXBlKTsKKwlwZWRfZmlsZV9zeXN0ZW1fdHlwZV9yZWdpc3RlciAoJl9hbXVmczNfdHlwZSk7CisJcGVkX2ZpbGVfc3lzdGVtX3R5cGVfcmVnaXN0ZXIgKCZfYW11ZnM0X3R5cGUpOworCXBlZF9maWxlX3N5c3RlbV90eXBlX3JlZ2lzdGVyICgmX2FtdWZzNV90eXBlKTsKKwlwZWRfZmlsZV9zeXN0ZW1fdHlwZV9yZWdpc3RlciAoJl9hc2ZzX3R5cGUpOworCXBlZF9maWxlX3N5c3RlbV90eXBlX3JlZ2lzdGVyICgmX2FwZnMxX3R5cGUpOworCXBlZF9maWxlX3N5c3RlbV90eXBlX3JlZ2lzdGVyICgmX2FwZnMyX3R5cGUpOworfQorCit2b2lkIHBlZF9maWxlX3N5c3RlbV9hbWlnYV9kb25lICgpCit7CisJcGVkX2ZpbGVfc3lzdGVtX3R5cGVfdW5yZWdpc3RlciAoJl9hZmZzMF90eXBlKTsKKwlwZWRfZmlsZV9zeXN0ZW1fdHlwZV91bnJlZ2lzdGVyICgmX2FmZnMxX3R5cGUpOworCXBlZF9maWxlX3N5c3RlbV90eXBlX3VucmVnaXN0ZXIgKCZfYWZmczJfdHlwZSk7CisJcGVkX2ZpbGVfc3lzdGVtX3R5cGVfdW5yZWdpc3RlciAoJl9hZmZzM190eXBlKTsKKwlwZWRfZmlsZV9zeXN0ZW1fdHlwZV91bnJlZ2lzdGVyICgmX2FmZnM0X3R5cGUpOworCXBlZF9maWxlX3N5c3RlbV90eXBlX3VucmVnaXN0ZXIgKCZfYWZmczVfdHlwZSk7CisJcGVkX2ZpbGVfc3lzdGVtX3R5cGVfdW5yZWdpc3RlciAoJl9hZmZzNl90eXBlKTsKKwlwZWRfZmlsZV9zeXN0ZW1fdHlwZV91bnJlZ2lzdGVyICgmX2FmZnM3X3R5cGUpOworCXBlZF9maWxlX3N5c3RlbV90eXBlX3VucmVnaXN0ZXIgKCZfYW11ZnNfdHlwZSk7CisJcGVkX2ZpbGVfc3lzdGVtX3R5cGVfdW5yZWdpc3RlciAoJl9hbXVmczBfdHlwZSk7CisJcGVkX2ZpbGVfc3lzdGVtX3R5cGVfdW5yZWdpc3RlciAoJl9hbXVmczFfdHlwZSk7CisJcGVkX2ZpbGVfc3lzdGVtX3R5cGVfdW5yZWdpc3RlciAoJl9hbXVmczJfdHlwZSk7CisJcGVkX2ZpbGVfc3lzdGVtX3R5cGVfdW5yZWdpc3RlciAoJl9hbXVmczNfdHlwZSk7CisJcGVkX2ZpbGVfc3lzdGVtX3R5cGVfdW5yZWdpc3RlciAoJl9hbXVmczRfdHlwZSk7CisJcGVkX2ZpbGVfc3lzdGVtX3R5cGVfdW5yZWdpc3RlciAoJl9hbXVmczVfdHlwZSk7CisJcGVkX2ZpbGVfc3lzdGVtX3R5cGVfdW5yZWdpc3RlciAoJl9hc2ZzX3R5cGUpOworCXBlZF9maWxlX3N5c3RlbV90eXBlX3VucmVnaXN0ZXIgKCZfYXBmczFfdHlwZSk7CisJcGVkX2ZpbGVfc3lzdGVtX3R5cGVfdW5yZWdpc3RlciAoJl9hcGZzMl90eXBlKTsKK30KZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvZXh0Mi9NYWtlZmlsZS5hbSBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvZXh0Mi9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWUzODIxCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9leHQyL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMjEgQEAKK3BhcnRlZGluY2x1ZGVkaXIgICAgICA9CS1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlCisKK25vaW5zdF9MVExJQlJBUklFUyAgICA9CWxpYmV4dDIubGEKK2xpYmV4dDJfbGFfU09VUkNFUyAgICA9CWV4dDIuYyBcCisJCQlleHQyLmggXAorCQkJZXh0Ml9mcy5oIFwKKwkJCWV4dDJfYmxvY2tfcmVsb2NhdG9yLmMgXAorCQkJZXh0Ml9idWZmZXIuYyBcCisJCQlleHQyX2lub2RlX3JlbG9jYXRvci5jIFwKKwkJCWV4dDJfbWV0YS5jIFwKKwkJCWV4dDJfbWtmcy5jIFwKKwkJCWV4dDJfcmVzaXplLmMgXAorCQkJaW50ZXJmYWNlLmMgXAorCQkJcGFydGVkX2lvLmMgXAorCQkJcGFydGVkX2lvLmggXAorCQkJdHVuZS5jIFwKKwkJCXR1bmUuaAorCitJTkNMVURFUyA9ICQocGFydGVkaW5jbHVkZWRpcikgJChJTlRMSU5DUykKKworTUFJTlRBSU5FUkNMRUFORklMRVMgPSBNYWtlZmlsZS5pbgpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9leHQyL01ha2VmaWxlLmluIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9leHQyL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5NGFjZGUKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2V4dDIvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw2NDkgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTAgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorCitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorc3ViZGlyID0gbGlicGFydGVkL2ZzL2V4dDIKK0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbgorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvbTQvYWJzb2x1dGUtaGVhZGVyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2FsbG9jYS5tNCAkKHRvcF9zcmNkaXIpL200L2Fzc2VydC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9hdGV4aXQubTQgJCh0b3Bfc3JjZGlyKS9tNC9jYWxsb2MubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY2xvc2Utc3RyZWFtLm00ICQodG9wX3NyY2RpcikvbTQvY2xvc2VvdXQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY29kZXNldC5tNCAkKHRvcF9zcmNkaXIpL200L2NvbmZpZy1oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2Rpcm5hbWUubTQgJCh0b3Bfc3JjZGlyKS9tNC9kb3MubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZG91YmxlLXNsYXNoLXJvb3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZXJyb3IubTQgJCh0b3Bfc3JjZGlyKS9tNC9leGl0ZmFpbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9leHRlbnNpb25zLm00ICQodG9wX3NyY2RpcikvbTQvZnBlbmRpbmcubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZnJlZS5tNCAkKHRvcF9zcmNkaXIpL200L2dldG9wdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00ICQodG9wX3NyY2RpcikvbTQvZ2xpYmMyMS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9nbnVsaWItY29tbW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2dudWxpYi1jb21wLm00ICQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaW5saW5lLm00ICQodG9wX3NyY2RpcikvbTQvaW50dHlwZXMtcHJpLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ludHR5cGVzLm00ICQodG9wX3NyY2RpcikvbTQvbGliLWlnbm9yZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xvY2FsY2hhcnNldC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sb25nLW9wdGlvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9sb25nbG9uZy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tYnJ0b3djLm00ICQodG9wX3NyY2RpcikvbTQvbWJzdGF0ZV90Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21lbWNoci5tNCAkKHRvcF9zcmNkaXIpL200L21lbWNtcC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tZW1jcHkubTQgJCh0b3Bfc3JjZGlyKS9tNC9tZW1tb3ZlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21lbXNldC5tNCAkKHRvcF9zcmNkaXIpL200L25scy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCAkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3F1b3RlYXJnLm00ICQodG9wX3NyY2RpcikvbTQvcmVnZXgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcmVuYW1lLm00ICQodG9wX3NyY2RpcikvbTQvcnBtYXRjaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zYWZlLXJlYWQubTQgJCh0b3Bfc3JjZGlyKS9tNC9zYWZlLXdyaXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3NzaXplX3QubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGRhcmcubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RkYm9vbC5tNCAkKHRvcF9zcmNkaXIpL200L3N0ZGludC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdGRsaWJfaC5tNCAkKHRvcF9zcmNkaXIpL200L3N0cmNzcG4ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RyaW5nX2gubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHJuZHVwLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0cm5sZW4ubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHJ0b2QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RydG9sLm00ICQodG9wX3NyY2RpcikvbTQvdW5pc3RkX2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdXRpbWJ1Zi5tNCAkKHRvcF9zcmNkaXIpL200L3V0aW1lLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3V0aW1lcy1udWxsLm00ICQodG9wX3NyY2RpcikvbTQvd2NoYXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvd2N0eXBlLm00ICQodG9wX3NyY2RpcikvbTQvd2ludF90Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3hhbGxvYy5tNCAkKHRvcF9zcmNkaXIpL200L3hzdHJuZHVwLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitMVExJQlJBUklFUyA9ICQobm9pbnN0X0xUTElCUkFSSUVTKQorbGliZXh0Ml9sYV9MSUJBREQgPQorYW1fbGliZXh0Ml9sYV9PQkpFQ1RTID0gZXh0Mi5sbyBleHQyX2Jsb2NrX3JlbG9jYXRvci5sbyBleHQyX2J1ZmZlci5sbyBcCisJZXh0Ml9pbm9kZV9yZWxvY2F0b3IubG8gZXh0Ml9tZXRhLmxvIGV4dDJfbWtmcy5sbyBcCisJZXh0Ml9yZXNpemUubG8gaW50ZXJmYWNlLmxvIHBhcnRlZF9pby5sbyB0dW5lLmxvCitsaWJleHQyX2xhX09CSkVDVFMgPSAkKGFtX2xpYmV4dDJfbGFfT0JKRUNUUykKK0RFRkFVTFRfSU5DTFVERVMgPSAtSS4gLUkkKHRvcF9idWlsZGRpcikvbGliQGFtX19pc3JjQAorZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L2RlcGNvbXAKK2FtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCitDT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKKwkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitMVENPTVBJTEUgPSAkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorCS0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSBcCisJJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorQ0NMRCA9ICQoQ0MpCitMSU5LID0gJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIFwKKwktLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSBcCisJJChMREZMQUdTKSAtbyAkQAorU09VUkNFUyA9ICQobGliZXh0Ml9sYV9TT1VSQ0VTKQorRElTVF9TT1VSQ0VTID0gJChsaWJleHQyX2xhX1NPVVJDRVMpCitFVEFHUyA9IGV0YWdzCitDVEFHUyA9IGN0YWdzCitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUJTT0xVVEVfSU5UVFlQRVNfSCA9IEBBQlNPTFVURV9JTlRUWVBFU19IQAorQUJTT0xVVEVfU1RESU5UX0ggPSBAQUJTT0xVVEVfU1RESU5UX0hACitBQlNPTFVURV9TVERMSUJfSCA9IEBBQlNPTFVURV9TVERMSUJfSEAKK0FCU09MVVRFX1NUUklOR19IID0gQEFCU09MVVRFX1NUUklOR19IQAorQUJTT0xVVEVfVU5JU1REX0ggPSBAQUJTT0xVVEVfVU5JU1REX0hACitBQlNPTFVURV9XQ0hBUl9IID0gQEFCU09MVVRFX1dDSEFSX0hACitBQlNPTFVURV9XQ1RZUEVfSCA9IEBBQlNPTFVURV9XQ1RZUEVfSEAKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FMTE9DQSA9IEBBTExPQ0FACitBTExPQ0FfSCA9IEBBTExPQ0FfSEAKK0FNVEFSID0gQEFNVEFSQAorQVIgPSBAQVJACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0JJVFNJWkVPRl9QVFJESUZGX1QgPSBAQklUU0laRU9GX1BUUkRJRkZfVEAKK0JJVFNJWkVPRl9TSUdfQVRPTUlDX1QgPSBAQklUU0laRU9GX1NJR19BVE9NSUNfVEAKK0JJVFNJWkVPRl9TSVpFX1QgPSBAQklUU0laRU9GX1NJWkVfVEAKK0JJVFNJWkVPRl9XQ0hBUl9UID0gQEJJVFNJWkVPRl9XQ0hBUl9UQAorQklUU0laRU9GX1dJTlRfVCA9IEBCSVRTSVpFT0ZfV0lOVF9UQAorQlVJTERJTkZPID0gQEJVSUxESU5GT0AKK0NDID0gQENDQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDSEVDS19DRkxBR1MgPSBAQ0hFQ0tfQ0ZMQUdTQAorQ0hFQ0tfTElCUyA9IEBDSEVDS19MSUJTQAorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ1hYID0gQENYWEAKK0NYWENQUCA9IEBDWFhDUFBACitDWFhERVBNT0RFID0gQENYWERFUE1PREVACitDWFhGTEFHUyA9IEBDWFhGTEFHU0AKK0NZR1BBVEhfVyA9IEBDWUdQQVRIX1dACitERUZTID0gQERFRlNACitERVBESVIgPSBAREVQRElSQAorRExfTElCUyA9IEBETF9MSUJTQAorRE1fTElCUyA9IEBETV9MSUJTQAorRUNITyA9IEBFQ0hPQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFWEVFWFQgPSBARVhFRVhUQAorRjc3ID0gQEY3N0AKK0ZGTEFHUyA9IEBGRkxBR1NACitHRVRPUFRfSCA9IEBHRVRPUFRfSEAKK0dMSUJDMjEgPSBAR0xJQkMyMUAKK0dNU0dGTVQgPSBAR01TR0ZNVEAKK0dNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAorR05VTElCX0NIT1dOID0gQEdOVUxJQl9DSE9XTkAKK0dOVUxJQl9EVVAyID0gQEdOVUxJQl9EVVAyQAorR05VTElCX0ZDSERJUiA9IEBHTlVMSUJfRkNIRElSQAorR05VTElCX0ZUUlVOQ0FURSA9IEBHTlVMSUJfRlRSVU5DQVRFQAorR05VTElCX0dFVENXRCA9IEBHTlVMSUJfR0VUQ1dEQAorR05VTElCX0dFVExPR0lOX1IgPSBAR05VTElCX0dFVExPR0lOX1JACitHTlVMSUJfR0VUU1VCT1BUID0gQEdOVUxJQl9HRVRTVUJPUFRACitHTlVMSUJfSU1BWEFCUyA9IEBHTlVMSUJfSU1BWEFCU0AKK0dOVUxJQl9JTUFYRElWID0gQEdOVUxJQl9JTUFYRElWQAorR05VTElCX01CU0NBU0VDTVAgPSBAR05VTElCX01CU0NBU0VDTVBACitHTlVMSUJfTUJTQ0FTRVNUUiA9IEBHTlVMSUJfTUJTQ0FTRVNUUkAKK0dOVUxJQl9NQlNDSFIgPSBAR05VTElCX01CU0NIUkAKK0dOVUxJQl9NQlNDU1BOID0gQEdOVUxJQl9NQlNDU1BOQAorR05VTElCX01CU0xFTiA9IEBHTlVMSUJfTUJTTEVOQAorR05VTElCX01CU05DQVNFQ01QID0gQEdOVUxJQl9NQlNOQ0FTRUNNUEAKK0dOVUxJQl9NQlNQQlJLID0gQEdOVUxJQl9NQlNQQlJLQAorR05VTElCX01CU1BDQVNFQ01QID0gQEdOVUxJQl9NQlNQQ0FTRUNNUEAKK0dOVUxJQl9NQlNSQ0hSID0gQEdOVUxJQl9NQlNSQ0hSQAorR05VTElCX01CU1NFUCA9IEBHTlVMSUJfTUJTU0VQQAorR05VTElCX01CU1NQTiA9IEBHTlVMSUJfTUJTU1BOQAorR05VTElCX01CU1NUUiA9IEBHTlVMSUJfTUJTU1RSQAorR05VTElCX01CU1RPS19SID0gQEdOVUxJQl9NQlNUT0tfUkAKK0dOVUxJQl9NRU1NRU0gPSBAR05VTElCX01FTU1FTUAKK0dOVUxJQl9NRU1QQ1BZID0gQEdOVUxJQl9NRU1QQ1BZQAorR05VTElCX01FTVJDSFIgPSBAR05VTElCX01FTVJDSFJACitHTlVMSUJfTUtEVEVNUCA9IEBHTlVMSUJfTUtEVEVNUEAKK0dOVUxJQl9NS1NURU1QID0gQEdOVUxJQl9NS1NURU1QQAorR05VTElCX1JFQURMSU5LID0gQEdOVUxJQl9SRUFETElOS0AKK0dOVUxJQl9TTEVFUCA9IEBHTlVMSUJfU0xFRVBACitHTlVMSUJfU1RQQ1BZID0gQEdOVUxJQl9TVFBDUFlACitHTlVMSUJfU1RQTkNQWSA9IEBHTlVMSUJfU1RQTkNQWUAKK0dOVUxJQl9TVFJDQVNFU1RSID0gQEdOVUxJQl9TVFJDQVNFU1RSQAorR05VTElCX1NUUkNIUk5VTCA9IEBHTlVMSUJfU1RSQ0hSTlVMQAorR05VTElCX1NUUkRVUCA9IEBHTlVMSUJfU1RSRFVQQAorR05VTElCX1NUUk5EVVAgPSBAR05VTElCX1NUUk5EVVBACitHTlVMSUJfU1RSTkxFTiA9IEBHTlVMSUJfU1RSTkxFTkAKK0dOVUxJQl9TVFJQQlJLID0gQEdOVUxJQl9TVFJQQlJLQAorR05VTElCX1NUUlNFUCA9IEBHTlVMSUJfU1RSU0VQQAorR05VTElCX1NUUlRPSU1BWCA9IEBHTlVMSUJfU1RSVE9JTUFYQAorR05VTElCX1NUUlRPS19SID0gQEdOVUxJQl9TVFJUT0tfUkAKK0dOVUxJQl9TVFJUT1VNQVggPSBAR05VTElCX1NUUlRPVU1BWEAKK0dSRVAgPSBAR1JFUEAKK0hBVkVfREVDTF9HRVRMT0dJTl9SID0gQEhBVkVfREVDTF9HRVRMT0dJTl9SQAorSEFWRV9ERUNMX0lNQVhBQlMgPSBASEFWRV9ERUNMX0lNQVhBQlNACitIQVZFX0RFQ0xfSU1BWERJViA9IEBIQVZFX0RFQ0xfSU1BWERJVkAKK0hBVkVfREVDTF9NRU1NRU0gPSBASEFWRV9ERUNMX01FTU1FTUAKK0hBVkVfREVDTF9NRU1SQ0hSID0gQEhBVkVfREVDTF9NRU1SQ0hSQAorSEFWRV9ERUNMX1NUUkRVUCA9IEBIQVZFX0RFQ0xfU1RSRFVQQAorSEFWRV9ERUNMX1NUUk5DQVNFQ01QID0gQEhBVkVfREVDTF9TVFJOQ0FTRUNNUEAKK0hBVkVfREVDTF9TVFJORFVQID0gQEhBVkVfREVDTF9TVFJORFVQQAorSEFWRV9ERUNMX1NUUk5MRU4gPSBASEFWRV9ERUNMX1NUUk5MRU5ACitIQVZFX0RFQ0xfU1RSVE9JTUFYID0gQEhBVkVfREVDTF9TVFJUT0lNQVhACitIQVZFX0RFQ0xfU1RSVE9LX1IgPSBASEFWRV9ERUNMX1NUUlRPS19SQAorSEFWRV9ERUNMX1NUUlRPVU1BWCA9IEBIQVZFX0RFQ0xfU1RSVE9VTUFYQAorSEFWRV9EVVAyID0gQEhBVkVfRFVQMkAKK0hBVkVfRlRSVU5DQVRFID0gQEhBVkVfRlRSVU5DQVRFQAorSEFWRV9HRVRTVUJPUFQgPSBASEFWRV9HRVRTVUJPUFRACitIQVZFX0lOVFRZUEVTX0ggPSBASEFWRV9JTlRUWVBFU19IQAorSEFWRV9JU1dDTlRSTCA9IEBIQVZFX0lTV0NOVFJMQAorSEFWRV9MT05HX0xPTkdfSU5UID0gQEhBVkVfTE9OR19MT05HX0lOVEAKK0hBVkVfTUVNUENQWSA9IEBIQVZFX01FTVBDUFlACitIQVZFX01LRFRFTVAgPSBASEFWRV9NS0RURU1QQAorSEFWRV9SRUFETElOSyA9IEBIQVZFX1JFQURMSU5LQAorSEFWRV9TSUdORURfU0lHX0FUT01JQ19UID0gQEhBVkVfU0lHTkVEX1NJR19BVE9NSUNfVEAKK0hBVkVfU0lHTkVEX1dDSEFSX1QgPSBASEFWRV9TSUdORURfV0NIQVJfVEAKK0hBVkVfU0lHTkVEX1dJTlRfVCA9IEBIQVZFX1NJR05FRF9XSU5UX1RACitIQVZFX1NMRUVQID0gQEhBVkVfU0xFRVBACitIQVZFX1NURElOVF9IID0gQEhBVkVfU1RESU5UX0hACitIQVZFX1NUUENQWSA9IEBIQVZFX1NUUENQWUAKK0hBVkVfU1RQTkNQWSA9IEBIQVZFX1NUUE5DUFlACitIQVZFX1NUUkNBU0VDTVAgPSBASEFWRV9TVFJDQVNFQ01QQAorSEFWRV9TVFJDQVNFU1RSID0gQEhBVkVfU1RSQ0FTRVNUUkAKK0hBVkVfU1RSQ0hSTlVMID0gQEhBVkVfU1RSQ0hSTlVMQAorSEFWRV9TVFJORFVQID0gQEhBVkVfU1RSTkRVUEAKK0hBVkVfU1RSUEJSSyA9IEBIQVZFX1NUUlBCUktACitIQVZFX1NUUlNFUCA9IEBIQVZFX1NUUlNFUEAKK0hBVkVfU1lTX0JJVFlQRVNfSCA9IEBIQVZFX1NZU19CSVRZUEVTX0hACitIQVZFX1NZU19JTlRUWVBFU19IID0gQEhBVkVfU1lTX0lOVFRZUEVTX0hACitIQVZFX1NZU19UWVBFU19IID0gQEhBVkVfU1lTX1RZUEVTX0hACitIQVZFX1VOSVNURF9IID0gQEhBVkVfVU5JU1REX0hACitIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlQgPSBASEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UQAorSEFWRV9XQ1RZUEVfSCA9IEBIQVZFX1dDVFlQRV9IQAorSEFWRV9XSU5UX1QgPSBASEFWRV9XSU5UX1RACitIQVZFX19CT09MID0gQEhBVkVfX0JPT0xACitJTlNUQUxMID0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lOVExJTkNTID0gQElOVExJTkNTQAorSU5UTExJQlMgPSBASU5UTExJQlNACitJTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACitJTlRUWVBFU19IID0gQElOVFRZUEVTX0hACitMREZMQUdTID0gQExERkxBR1NACitMSUJJQ09OViA9IEBMSUJJQ09OVkAKK0xJQklOVEwgPSBATElCSU5UTEAKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xOX1MgPSBATE5fU0AKK0xUQUxMT0NBID0gQExUQUxMT0NBQAorTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAorTFRMSUJJTlRMID0gQExUTElCSU5UTEAKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitMVF9BR0UgPSBATFRfQUdFQAorTFRfQ1VSUkVOVCA9IEBMVF9DVVJSRU5UQAorTFRfUkVMRUFTRSA9IEBMVF9SRUxFQVNFQAorTFRfUkVWSVNJT04gPSBATFRfUkVWSVNJT05ACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01LRElSX1AgPSBATUtESVJfUEAKK01TR0ZNVCA9IEBNU0dGTVRACitNU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACitNU0dNRVJHRSA9IEBNU0dNRVJHRUAKK09CSkVYVCA9IEBPQkpFWFRACitPUyA9IEBPU0AKK09TX0xJQlMgPSBAT1NfTElCU0AKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQVJURURMREZMQUdTID0gQFBBUlRFRExERkxBR1NACitQQVJURURfTElCUyA9IEBQQVJURURfTElCU0AKK1BBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAorUE9TVUIgPSBAUE9TVUJACitQT1dfTElCID0gQFBPV19MSUJACitQUklQVFJfUFJFRklYID0gQFBSSVBUUl9QUkVGSVhACitQUklfTUFDUk9TX0JST0tFTiA9IEBQUklfTUFDUk9TX0JST0tFTkAKK1BUUkRJRkZfVF9TVUZGSVggPSBAUFRSRElGRl9UX1NVRkZJWEAKK1JBTkxJQiA9IEBSQU5MSUJACitSRUlTRVJfTElCUyA9IEBSRUlTRVJfTElCU0AKK1JFUExBQ0VfQ0hPV04gPSBAUkVQTEFDRV9DSE9XTkAKK1JFUExBQ0VfRkNIRElSID0gQFJFUExBQ0VfRkNIRElSQAorUkVQTEFDRV9HRVRDV0QgPSBAUkVQTEFDRV9HRVRDV0RACitSRVBMQUNFX01LU1RFTVAgPSBAUkVQTEFDRV9NS1NURU1QQAorU0VEID0gQFNFREAKK1NFTElOVVhfTElCUyA9IEBTRUxJTlVYX0xJQlNACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU0lHX0FUT01JQ19UX1NVRkZJWCA9IEBTSUdfQVRPTUlDX1RfU1VGRklYQAorU0laRV9UX1NVRkZJWCA9IEBTSVpFX1RfU1VGRklYQAorU1REQk9PTF9IID0gQFNUREJPT0xfSEAKK1NURElOVF9IID0gQFNURElOVF9IQAorU1RSSVAgPSBAU1RSSVBACitVU0VfTkxTID0gQFVTRV9OTFNACitVVUlEX0xJQlMgPSBAVVVJRF9MSUJTQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorV0NIQVJfSCA9IEBXQ0hBUl9IQAorV0NIQVJfVF9TVUZGSVggPSBAV0NIQVJfVF9TVUZGSVhACitXQ1RZUEVfSCA9IEBXQ1RZUEVfSEAKK1dJTlRfVF9TVUZGSVggPSBAV0lOVF9UX1NVRkZJWEAKK1hHRVRURVhUID0gQFhHRVRURVhUQAorWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKK2Fic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACithYnNfc3JjZGlyID0gQGFic19zcmNkaXJACithYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACithYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKK2FjX2N0X0Y3NyA9IEBhY19jdF9GNzdACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAorZ2xfTElCT0JKUyA9IEBnbF9MSUJPQkpTQAorZ2xfTFRMSUJPQkpTID0gQGdsX0xUTElCT0JKU0AKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3BzZGlyID0gQHBzZGlyQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzcmNkaXIgPSBAc3JjZGlyQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKK3RvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitwYXJ0ZWRpbmNsdWRlZGlyID0gLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUKK25vaW5zdF9MVExJQlJBUklFUyA9IGxpYmV4dDIubGEKK2xpYmV4dDJfbGFfU09VUkNFUyA9IGV4dDIuYyBcCisJCQlleHQyLmggXAorCQkJZXh0Ml9mcy5oIFwKKwkJCWV4dDJfYmxvY2tfcmVsb2NhdG9yLmMgXAorCQkJZXh0Ml9idWZmZXIuYyBcCisJCQlleHQyX2lub2RlX3JlbG9jYXRvci5jIFwKKwkJCWV4dDJfbWV0YS5jIFwKKwkJCWV4dDJfbWtmcy5jIFwKKwkJCWV4dDJfcmVzaXplLmMgXAorCQkJaW50ZXJmYWNlLmMgXAorCQkJcGFydGVkX2lvLmMgXAorCQkJcGFydGVkX2lvLmggXAorCQkJdHVuZS5jIFwKKwkJCXR1bmUuaAorCitJTkNMVURFUyA9ICQocGFydGVkaW5jbHVkZWRpcikgJChJTlRMSU5DUykKK01BSU5UQUlORVJDTEVBTkZJTEVTID0gTWFrZWZpbGUuaW4KK2FsbDogYWxsLWFtCisKKy5TVUZGSVhFUzoKKy5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoIFwKKwkJJiYgZXhpdCAwOyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSAgbGlicGFydGVkL2ZzL2V4dDIvTWFrZWZpbGUnOyBcCisJY2QgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWdudSAgbGlicGFydGVkL2ZzL2V4dDIvTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6ICAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6ICAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKK2NsZWFuLW5vaW5zdExUTElCUkFSSUVTOgorCS10ZXN0IC16ICIkKG5vaW5zdF9MVExJQlJBUklFUykiIHx8IHJtIC1mICQobm9pbnN0X0xUTElCUkFSSUVTKQorCUBsaXN0PSckKG5vaW5zdF9MVExJQlJBUklFUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGRpcj0iYGVjaG8gJCRwIHwgc2VkIC1lICdzfC9bXi9dKiQkfHwnYCI7IFwKKwkgIHRlc3QgIiQkZGlyIiAhPSAiJCRwIiB8fCBkaXI9LjsgXAorCSAgZWNobyAicm0gLWYgXCIkJHtkaXJ9L3NvX2xvY2F0aW9uc1wiIjsgXAorCSAgcm0gLWYgIiQke2Rpcn0vc29fbG9jYXRpb25zIjsgXAorCWRvbmUKK2xpYmV4dDIubGE6ICQobGliZXh0Ml9sYV9PQkpFQ1RTKSAkKGxpYmV4dDJfbGFfREVQRU5ERU5DSUVTKSAKKwkkKExJTkspICAkKGxpYmV4dDJfbGFfT0JKRUNUUykgJChsaWJleHQyX2xhX0xJQkFERCkgJChMSUJTKQorCittb3N0bHljbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLiQoT0JKRVhUKQorCitkaXN0Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi50YWIuYworCitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZXh0Mi5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2V4dDJfYmxvY2tfcmVsb2NhdG9yLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZXh0Ml9idWZmZXIuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9leHQyX2lub2RlX3JlbG9jYXRvci5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2V4dDJfbWV0YS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2V4dDJfbWtmcy5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2V4dDJfcmVzaXplLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvaW50ZXJmYWNlLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcGFydGVkX2lvLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvdHVuZS5QbG9AYW1fX3F1b3RlQAorCisuYy5vOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jICQ8CisKKy5jLm9iajoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jIGAkKENZR1BBVEhfVykgJyQ8J2AKKworLmMubG86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKKworSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAorCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAorCW1raWQgLWZJRCAkJHVuaXF1ZQordGFnczogVEFHUworCitUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXRhZ3M9OyBcCisJaGVyZT1gcHdkYDsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAorCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAorCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisJICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCisJICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICQkdGFncyAkJHVuaXF1ZTsgXAorCWZpCitjdGFnczogQ1RBR1MKK0NUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXRhZ3M9OyBcCisJaGVyZT1gcHdkYDsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAorCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAorCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSIgXAorCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorCSAgICAgJCR0YWdzICQkdW5pcXVlCisKK0dUQUdTOgorCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCisJICAmJiBjZCAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgJCRoZXJlCisKK2Rpc3RjbGVhbi10YWdzOgorCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgXAorCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKKwkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCisJICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAorCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKKwkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKKwkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKKwkJCSAgIHNvcnQgLXVgIDs7IFwKKwllc2FjOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtcFIgJChzcmNkaXIpLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1wUiAkJGQvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICQoZGlzdGRpcikvJCRmaWxlIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAkKGRpc3RkaXIpLyQkZmlsZSBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUgJChMVExJQlJBUklFUykKK2luc3RhbGxkaXJzOgoraW5zdGFsbDogaW5zdGFsbC1hbQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCit1bmluc3RhbGw6IHVuaW5zdGFsbC1hbQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQoraW5zdGFsbC1zdHJpcDoKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKKwkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKKwktdGVzdCAteiAiJChNQUlOVEFJTkVSQ0xFQU5GSUxFUykiIHx8IHJtIC1mICQoTUFJTlRBSU5FUkNMRUFORklMRVMpCitjbGVhbjogY2xlYW4tYW0KKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1ub2luc3RMVExJQlJBUklFUyBcCisJbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKKwlkaXN0Y2xlYW4tdGFncworCitkdmk6IGR2aS1hbQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtYW0KKworaW5mbzogaW5mby1hbQorCitpbmZvLWFtOgorCitpbnN0YWxsLWRhdGEtYW06CisKK2luc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQorCitpbnN0YWxsLWV4ZWMtYW06CisKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCisKK2luc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQorCitpbnN0YWxsY2hlY2stYW06CisKK21haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKKwltb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLWFtCisKK3BkZi1hbToKKworcHM6IHBzLWFtCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06CisKKy5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKKworLlBIT05ZOiBDVEFHUyBHVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAorCWNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0TFRMSUJSQVJJRVMgY3RhZ3MgZGlzdGNsZWFuIFwKKwlkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBcCisJZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gXAorCWluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIFwKKwlpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBcCisJaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gXAorCWluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCisJaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKKwltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBcCisJbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgXAorCXBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB1bmluc3RhbGwgdW5pbnN0YWxsLWFtCisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmMgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNjAyMTUKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jCkBAIC0wLDAgKzEsNzkzIEBACisvKgorICAgIGV4dDIuYyAtLSBnZW5lcmljIGV4dDIgc3R1ZmYKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgIAorICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpZm5kZWYgRElTQ09WRVJfT05MWQorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8dXVpZC91dWlkLmg+CisjaW5jbHVkZSAiZXh0Mi5oIgorCisvKiBleHQyIHN0dWZmICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3Vuc2lnbmVkIGNoYXIgX2JpdG1hcFs4XSA9IHsweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwfTsKKworaW50IGV4dDJfY29weV9ibG9jayhzdHJ1Y3QgZXh0Ml9mcyAqZnMsIGJsa190IGZyb20sIGJsa190IHRvKQoreworCXVuc2lnbmVkIGNoYXIqIGJ1ZiA9IHBlZF9tYWxsb2MgKGZzLT5ibG9ja3NpemUpOworCisJaWYgKCFleHQyX2JjYWNoZV9mbHVzaChmcywgZnJvbSkpIHJldHVybiAwOworCWlmICghZXh0Ml9iY2FjaGVfZmx1c2goZnMsIHRvKSkgcmV0dXJuIDA7CisKKwlpZiAoIWV4dDJfcmVhZF9ibG9ja3MoZnMsIGJ1ZiwgZnJvbSwgMSkpIHJldHVybiAwOworCWlmICghZXh0Ml93cml0ZV9ibG9ja3MoZnMsIGJ1ZiwgdG8sIDEpKSByZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCitpbnQgZXh0Ml9nZXRfYmxvY2tfc3RhdGUoc3RydWN0IGV4dDJfZnMgKmZzLCBibGtfdCBibG9jaykKK3sKKwlzdHJ1Y3QgZXh0Ml9idWZmZXJfaGVhZCAqYmg7CisJaW50IGdyb3VwOworCWludCBvZmZzZXQ7CisJaW50IHN0YXRlOworCisJYmxvY2sgLT0gRVhUMl9TVVBFUl9GSVJTVF9EQVRBX0JMT0NLKGZzLT5zYik7CisJZ3JvdXAgPSBibG9jayAvIEVYVDJfU1VQRVJfQkxPQ0tTX1BFUl9HUk9VUChmcy0+c2IpOworCW9mZnNldCA9IGJsb2NrICUgRVhUMl9TVVBFUl9CTE9DS1NfUEVSX0dST1VQKGZzLT5zYik7CisKKwliaCA9IGV4dDJfYnJlYWQoZnMsIEVYVDJfR1JPVVBfQkxPQ0tfQklUTUFQKGZzLT5nZFtncm91cF0pKTsKKwlzdGF0ZSA9IGJoLT5kYXRhW29mZnNldD4+M10gJiBfYml0bWFwW29mZnNldCY3XTsKKwlleHQyX2JyZWxzZShiaCwgMCk7CisKKwlyZXR1cm4gc3RhdGU7Cit9CisKK2Jsa190IGV4dDJfZmluZF9mcmVlX2Jsb2NrKHN0cnVjdCBleHQyX2ZzICpmcykKK3sKKwlpbnQgaTsKKworCWZvciAoaT0wO2k8ZnMtPm51bWdyb3VwcztpKyspCisJCWlmIChFWFQyX0dST1VQX0ZSRUVfQkxPQ0tTX0NPVU5UKGZzLT5nZFtpXSkpCisJCXsKKwkJCWJsa190IGo7CisJCQlibGtfdCBvZmZzZXQ7CisKKwkJCW9mZnNldCA9IGkgKiBFWFQyX1NVUEVSX0JMT0NLU19QRVJfR1JPVVAoZnMtPnNiKQorCQkJCSArIEVYVDJfU1VQRVJfRklSU1RfREFUQV9CTE9DSyhmcy0+c2IpOworCQkJZm9yIChqPWZzLT5hZG1pbmJsb2NrczsKKwkJCSAgICAgajxFWFQyX1NVUEVSX0JMT0NLU19QRVJfR1JPVVAoZnMtPnNiKTsKKwkJCSAgICAgaisrKQorCQkJCWlmIChleHQyX2lzX2RhdGFfYmxvY2soZnMsIG9mZnNldCArIGopICYmCisJCQkJICAgICFleHQyX2dldF9ibG9ja19zdGF0ZShmcywgb2Zmc2V0ICsgaikpCisJCQkJCXJldHVybiBvZmZzZXQgKyBqOworCisJCQlwZWRfZXhjZXB0aW9uX3Rocm93IChQRURfRVhDRVBUSU9OX0VSUk9SLAorCQkJCVBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJCV8oIkluY29uc2lzdGVudCBncm91cCBkZXNjcmlwdG9ycyEiKSk7CisJCX0KKworCXBlZF9leGNlcHRpb25fdGhyb3cgKFBFRF9FWENFUFRJT05fRVJST1IsIFBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJICAgICBfKCJGaWxlIHN5c3RlbSBmdWxsISIpKTsKKwlyZXR1cm4gMDsKK30KKworaW5vX3QgZXh0Ml9maW5kX2ZyZWVfaW5vZGUoc3RydWN0IGV4dDJfZnMgKmZzKQoreworCWludCBpOworCisJZm9yIChpPTA7aTxmcy0+bnVtZ3JvdXBzO2krKykKKwkJaWYgKEVYVDJfR1JPVVBfRlJFRV9JTk9ERVNfQ09VTlQoZnMtPmdkW2ldKSkKKwkJeworCQkJaW5vX3QgajsKKwkJCWlub190IG9mZnNldDsKKworCQkJb2Zmc2V0ID0gaSAqIEVYVDJfU1VQRVJfSU5PREVTX1BFUl9HUk9VUChmcy0+c2IpICsgMTsKKwkJCWZvciAoaj0wO2o8RVhUMl9TVVBFUl9JTk9ERVNfUEVSX0dST1VQKGZzLT5zYik7aisrKQorCQkJCWlmICghZXh0Ml9nZXRfaW5vZGVfc3RhdGUoZnMsIG9mZnNldCArIGopKQorCQkJCQlyZXR1cm4gb2Zmc2V0ICsgajsKKworCQkJcGVkX2V4Y2VwdGlvbl90aHJvdyAoUEVEX0VYQ0VQVElPTl9FUlJPUiwKKwkJCQlQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCQlfKCJJbmNvbnNpc3RlbnQgZ3JvdXAgZGVzY3JpcHRvcnMhIikpOworCQl9CisKKwlwZWRfZXhjZXB0aW9uX3Rocm93IChQRURfRVhDRVBUSU9OX0VSUk9SLCBQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCSAgICAgXygiRmlsZSBzeXN0ZW0gZnVsbCEiKSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBleHQyX21vdmVfYmxvY2tzKHN0cnVjdCBleHQyX2ZzICpmcywgYmxrX3Qgc3JjLCBibGtfdCBudW0sIGJsa190IGRlc3QpCit7CisJdW5zaWduZWQgY2hhciAqYnVmOworCWJsa190IGk7CisKKwlwZWRfZXhjZXB0aW9uX2ZldGNoX2FsbCgpOworCWlmICgoYnVmID0gcGVkX21hbGxvYyhudW0gPDwgZnMtPmxvZ3NpemUpKSAhPSBOVUxMKQorCXsKKwkJcGVkX2V4Y2VwdGlvbl9sZWF2ZV9hbGwoKTsKKworCQlpZiAoIWV4dDJfYmNhY2hlX2ZsdXNoX3JhbmdlKGZzLCBzcmMsIG51bSkpIHJldHVybiAwOworCQlpZiAoIWV4dDJfYmNhY2hlX2ZsdXNoX3JhbmdlKGZzLCBkZXN0LCBudW0pKSByZXR1cm4gMDsKKworCQlpZiAoIWV4dDJfcmVhZF9ibG9ja3MoZnMsIGJ1Ziwgc3JjLCBudW0pKSByZXR1cm4gMDsKKwkJaWYgKCFleHQyX3dyaXRlX2Jsb2NrcyhmcywgYnVmLCBkZXN0LCBudW0pKSByZXR1cm4gMDsKKworCQlwZWRfZnJlZShidWYpOworCQlyZXR1cm4gMTsKKwl9CisJcGVkX2V4Y2VwdGlvbl9jYXRjaCgpOworCXBlZF9leGNlcHRpb25fbGVhdmVfYWxsKCk7CisKKwlpZiAoc3JjID4gZGVzdCkKKwl7CisJCWZvciAoaT0wO2k8bnVtO2krKykKKwkJCWlmICghZXh0Ml9jb3B5X2Jsb2NrKGZzLCBzcmMraSwgZGVzdCtpKSkKKwkJCQlyZXR1cm4gMDsKKwl9CisJZWxzZQorCXsKKwkJZm9yIChpPW51bTtpPjA7aS0tKQorCQkJaWYgKCFleHQyX2NvcHlfYmxvY2soZnMsIHNyYytpLCBkZXN0K2kpKQorCQkJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworaW50IGV4dDJfcmVhZF9ibG9ja3Moc3RydWN0IGV4dDJfZnMgKmZzLCB2b2lkICpwdHIsIGJsa190IGJsb2NrLCBibGtfdCBudW0pCit7CisJcmV0dXJuIGZzLT5kZXZoYW5kbGUtPm9wcy0+cmVhZChmcy0+ZGV2aGFuZGxlLT5jb29raWUsIHB0ciwgYmxvY2ssIG51bSk7Cit9CisKK2ludCBleHQyX3NldF9ibG9ja19zdGF0ZShzdHJ1Y3QgZXh0Ml9mcyAqZnMsIGJsa190IGJsb2NrLCBpbnQgc3RhdGUsIGludCB1cGRhdGVtZXRhZGF0YSkKK3sKKwlzdHJ1Y3QgZXh0Ml9idWZmZXJfaGVhZCAqYmg7CisJaW50ICAgICAgICAgICAgICAgICAgICAgIGdyb3VwOworCWludCAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ7CisKKwlibG9jayAtPSBFWFQyX1NVUEVSX0ZJUlNUX0RBVEFfQkxPQ0soZnMtPnNiKTsKKwlncm91cCA9IGJsb2NrIC8gRVhUMl9TVVBFUl9CTE9DS1NfUEVSX0dST1VQKGZzLT5zYik7CisJb2Zmc2V0ID0gYmxvY2sgJSBFWFQyX1NVUEVSX0JMT0NLU19QRVJfR1JPVVAoZnMtPnNiKTsKKworCWJoID0gZXh0Ml9icmVhZChmcywgRVhUMl9HUk9VUF9CTE9DS19CSVRNQVAoZnMtPmdkW2dyb3VwXSkpOworCWJoLT5kaXJ0eSA9IDE7CisJaWYgKHN0YXRlKQorCQliaC0+ZGF0YVtvZmZzZXQ+PjNdIHw9IF9iaXRtYXBbb2Zmc2V0JjddOworCWVsc2UKKwkJYmgtPmRhdGFbb2Zmc2V0Pj4zXSAmPSB+X2JpdG1hcFtvZmZzZXQmN107CisJZXh0Ml9icmVsc2UoYmgsIDApOworCisJaWYgKHVwZGF0ZW1ldGFkYXRhKQorCXsKKwkJaW50IGRpZmY7CisKKwkJZGlmZiA9IHN0YXRlID8gLTEgOiAxOworCisJCWZzLT5nZFtncm91cF0uYmdfZnJlZV9ibG9ja3NfY291bnQgPSBQRURfQ1BVX1RPX0xFMTYKKwkJCShFWFQyX0dST1VQX0ZSRUVfQkxPQ0tTX0NPVU5UKGZzLT5nZFtncm91cF0pICsgZGlmZik7CisJCWZzLT5zYi5zX2ZyZWVfYmxvY2tzX2NvdW50ID0gUEVEX0NQVV9UT19MRTMyCisJCQkoRVhUMl9TVVBFUl9GUkVFX0JMT0NLU19DT1VOVChmcy0+c2IpICsgZGlmZik7CisJCWZzLT5tZXRhZGlydHkgfD0gRVhUMl9NRVRBX1NCIHwgRVhUMl9NRVRBX0dEOworCX0KKwlyZXR1cm4gMTsKK30KKworaW50IGV4dDJfd3JpdGVfYmxvY2tzKHN0cnVjdCBleHQyX2ZzICpmcywgdm9pZCAqcHRyLCBibGtfdCBibG9jaywgYmxrX3QgbnVtKQoreworCXJldHVybiBmcy0+ZGV2aGFuZGxlLT5vcHMtPndyaXRlKGZzLT5kZXZoYW5kbGUtPmNvb2tpZSwgcHRyLCBibG9jaywgbnVtKTsKK30KKworaW50IGV4dDJfemVyb19ibG9ja3Moc3RydWN0IGV4dDJfZnMgKmZzLCBibGtfdCBibG9jaywgYmxrX3QgbnVtKQoreworCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKKwlibGtfdCBpOworCisJcGVkX2V4Y2VwdGlvbl9mZXRjaF9hbGwoKTsKKwlidWYgPSBwZWRfbWFsbG9jIChudW0gPDwgZnMtPmxvZ3NpemUpOworCWlmIChidWYpCisJeworCQlwZWRfZXhjZXB0aW9uX2xlYXZlX2FsbCgpOworCisJCW1lbXNldChidWYsIDAsIG51bSA8PCBmcy0+bG9nc2l6ZSk7CisJCWlmICghZXh0Ml9iY2FjaGVfZmx1c2hfcmFuZ2UoZnMsIGJsb2NrLCBudW0pKQorCQkJZ290byBlcnJvcl9mcmVlX2J1ZjsKKwkJaWYgKCFleHQyX3dyaXRlX2Jsb2NrcyhmcywgYnVmLCBibG9jaywgbnVtKSkKKwkJCWdvdG8gZXJyb3JfZnJlZV9idWY7CisJCXBlZF9mcmVlKGJ1Zik7CisJCXJldHVybiAxOworCX0KKwlwZWRfZXhjZXB0aW9uX2NhdGNoKCk7CisKKwlidWYgPSBwZWRfbWFsbG9jIChmcy0+YmxvY2tzaXplKTsKKwlpZiAoYnVmKQorCXsKKwkJcGVkX2V4Y2VwdGlvbl9sZWF2ZV9hbGwoKTsKKworCQltZW1zZXQoYnVmLCAwLCBmcy0+YmxvY2tzaXplKTsKKworCQlmb3IgKGk9MDtpPG51bTtpKyspCisJCXsKKwkJCWlmICghZXh0Ml9iY2FjaGVfZmx1c2goZnMsIGJsb2NrK2kpKQorCQkJCWdvdG8gZXJyb3JfZnJlZV9idWY7CisJCQlpZiAoIWV4dDJfd3JpdGVfYmxvY2tzKGZzLCBidWYsIGJsb2NrK2ksIDEpKQorCQkJCWdvdG8gZXJyb3JfZnJlZV9idWY7CisJCX0KKworCQlwZWRfZnJlZShidWYpOworCQlyZXR1cm4gMTsKKwl9CisJcGVkX2V4Y2VwdGlvbl9jYXRjaCgpOworCXBlZF9leGNlcHRpb25fbGVhdmVfYWxsKCk7CisKKwlmb3IgKGk9MDtpPG51bTtpKyspCisJeworCQlzdHJ1Y3QgZXh0Ml9idWZmZXJfaGVhZCAqYmg7CisKKwkJYmggPSBleHQyX2JjcmVhdGUoZnMsIGJsb2NrK2kpOworCQlpZiAoIWJoKQorCQkJZ290byBlcnJvcjsKKwkJYmgtPmRpcnR5ID0gMTsKKwkJaWYgKCFleHQyX2JyZWxzZShiaCwgMSkpCisJCQlnb3RvIGVycm9yOworCX0KKwlyZXR1cm4gMTsKKworZXJyb3JfZnJlZV9idWY6CisJcGVkX2ZyZWUoYnVmKTsKK2Vycm9yOgorCXJldHVybiAwOworfQorCitvZmZfdCBleHQyX2dldF9pbm9kZV9vZmZzZXQoc3RydWN0IGV4dDJfZnMgKmZzLCBpbm9fdCBpbm9kZSwgYmxrX3QgKmJsb2NrKQoreworCWludCBncm91cDsKKwlpbnQgb2Zmc2V0OworCisJaW5vZGUtLTsKKworCWdyb3VwID0gaW5vZGUgLyBFWFQyX1NVUEVSX0lOT0RFU19QRVJfR1JPVVAoZnMtPnNiKTsKKwlvZmZzZXQgPSAoaW5vZGUgJSBFWFQyX1NVUEVSX0lOT0RFU19QRVJfR1JPVVAoZnMtPnNiKSkKKwkgICAgICAgCSAqIHNpemVvZihzdHJ1Y3QgZXh0Ml9pbm9kZSk7CisKKwkqYmxvY2sgPSBFWFQyX0dST1VQX0lOT0RFX1RBQkxFKGZzLT5nZFtncm91cF0pCisJICAgICAgICAgKyAob2Zmc2V0ID4+IGZzLT5sb2dzaXplKTsKKworCXJldHVybiBvZmZzZXQgJiAoZnMtPmJsb2Nrc2l6ZSAtIDEpOworfQorCitpbnQgZXh0Ml9nZXRfaW5vZGVfc3RhdGUoc3RydWN0IGV4dDJfZnMgKmZzLCBpbm9fdCBpbm9kZSkKK3sKKwlzdHJ1Y3QgZXh0Ml9idWZmZXJfaGVhZCAqYmg7CisJaW50ICAgICAgICAgICAgICAgICAgICAgIGdyb3VwOworCWludCAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ7CisJaW50ICAgICAgICAgICAgICAgICAgICAgIHJldDsKKworCWlub2RlLS07CisJZ3JvdXAgPSBpbm9kZSAvIEVYVDJfU1VQRVJfSU5PREVTX1BFUl9HUk9VUChmcy0+c2IpOworCW9mZnNldCA9IGlub2RlICUgRVhUMl9TVVBFUl9JTk9ERVNfUEVSX0dST1VQKGZzLT5zYik7CisKKwliaCA9IGV4dDJfYnJlYWQoZnMsIEVYVDJfR1JPVVBfSU5PREVfQklUTUFQKGZzLT5nZFtncm91cF0pKTsKKwlyZXQgPSBiaC0+ZGF0YVtvZmZzZXQ+PjNdICYgX2JpdG1hcFtvZmZzZXQmN107CisJZXh0Ml9icmVsc2UoYmgsIDApOworCisJcmV0dXJuIHJldDsKK30KKworaW50IGV4dDJfcmVhZF9pbm9kZShzdHJ1Y3QgZXh0Ml9mcyAqZnMsIGlub190IGlub2RlLCBzdHJ1Y3QgZXh0Ml9pbm9kZSAqZGF0YSkKK3sKKwlzdHJ1Y3QgZXh0Ml9idWZmZXJfaGVhZCAqYmg7CisJYmxrX3QJCQkgYmxrOworCW9mZl90CQkJIG9mZjsKKworCW9mZiA9IGV4dDJfZ2V0X2lub2RlX29mZnNldChmcywgaW5vZGUsICZibGspOworCisJYmggPSBleHQyX2JyZWFkKGZzLCBibGspOworCWlmICghYmgpCisJCXJldHVybiAwOworCisJbWVtY3B5KGRhdGEsIGJoLT5kYXRhICsgb2ZmLCBzaXplb2Yoc3RydWN0IGV4dDJfaW5vZGUpKTsKKwlleHQyX2JyZWxzZShiaCwgMCk7CisJcmV0dXJuIDE7Cit9CisKK2ludCBleHQyX3NldF9pbm9kZV9zdGF0ZShzdHJ1Y3QgZXh0Ml9mcyAqZnMsIGlub190IGlub2RlLCBpbnQgc3RhdGUsIGludCB1cGRhdGVtZXRhZGF0YSkKK3sKKwlzdHJ1Y3QgZXh0Ml9idWZmZXJfaGVhZCAqYmg7CisJaW50ICAgICAgICAgICAgICAgICAgICAgIGdyb3VwOworCWludCAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ7CisKKwlpbm9kZS0tOworCWdyb3VwID0gaW5vZGUgLyBFWFQyX1NVUEVSX0lOT0RFU19QRVJfR1JPVVAoZnMtPnNiKTsKKwlvZmZzZXQgPSBpbm9kZSAlIEVYVDJfU1VQRVJfSU5PREVTX1BFUl9HUk9VUChmcy0+c2IpOworCisJYmggPSBleHQyX2JyZWFkKGZzLCBFWFQyX0dST1VQX0lOT0RFX0JJVE1BUChmcy0+Z2RbZ3JvdXBdKSk7CisJaWYgKCFiaCkKKwkJcmV0dXJuIDA7CisJYmgtPmRpcnR5ID0gMTsKKwlpZiAoc3RhdGUpCisJCWJoLT5kYXRhW29mZnNldD4+M10gfD0gX2JpdG1hcFtvZmZzZXQmN107CisJZWxzZQorCQliaC0+ZGF0YVtvZmZzZXQ+PjNdICY9IH5fYml0bWFwW29mZnNldCY3XTsKKwlleHQyX2JyZWxzZShiaCwgMCk7CisKKwlpZiAodXBkYXRlbWV0YWRhdGEpCisJeworCQlpbnQgZGlmZjsKKworCQlkaWZmID0gc3RhdGUgPyAtMSA6IDE7CisKKwkJZnMtPmdkW2dyb3VwXS5iZ19mcmVlX2lub2Rlc19jb3VudCA9IFBFRF9DUFVfVE9fTEUxNgorCQkJKEVYVDJfR1JPVVBfRlJFRV9JTk9ERVNfQ09VTlQoZnMtPmdkW2dyb3VwXSkgKyBkaWZmKTsKKwkJZnMtPnNiLnNfZnJlZV9pbm9kZXNfY291bnQgPSBQRURfQ1BVX1RPX0xFMzIKKwkJCShFWFQyX1NVUEVSX0ZSRUVfSU5PREVTX0NPVU5UKGZzLT5zYikgKyBkaWZmKTsKKwkJZnMtPm1ldGFkaXJ0eSA9IEVYVDJfTUVUQV9TQiB8IEVYVDJfTUVUQV9HRDsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCitfaW5vZGVfdXBkYXRlX3NpemUoc3RydWN0IGV4dDJfZnMgKmZzLCBzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUsIGludCBkZWx0YSkKK3sKKwlpbnQJCWk1MTJwZXJibG9jayA9IDEgPDwgKGZzLT5sb2dzaXplIC0gOSk7CisJdWludDY0X3QJc2l6ZTsKKworCS8qIGlfYmxvY2tzIGlzIGluIDUxMiBieXRlIGJsb2NrcyAqLworCWlub2RlLT5pX2Jsb2NrcyA9IFBFRF9DUFVfVE9fTEUzMihFWFQyX0lOT0RFX0JMT0NLUygqaW5vZGUpCisJCSAgICAgICAJCQkgICsgZGVsdGEgKiBpNTEycGVyYmxvY2spOworCXNpemUgPSBFWFQyX0lOT0RFX1NJWkUoKmlub2RlKSArIGRlbHRhICogZnMtPmJsb2Nrc2l6ZTsKKwlpbm9kZS0+aV9zaXplID0gUEVEX0NQVV9UT19MRTMyKHNpemUgJSAoMUxMIDw8IDMyKSk7CisJaW5vZGUtPmlfc2l6ZV9oaWdoID0gUEVEX0NQVV9UT19MRTMyKHNpemUgLyAoMUxMIDw8IDMyKSk7CisJaW5vZGUtPmlfbXRpbWUgPSBQRURfQ1BVX1RPX0xFMzIodGltZShOVUxMKSk7Cit9CisKK2ludCBleHQyX2RvX2lub2RlKHN0cnVjdCBleHQyX2ZzICpmcywgc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlLCBibGtfdCBibG9jaywKKwkJICAgaW50IGFjdGlvbikKK3sKKwlzdHJ1Y3QgZXh0Ml9idWZmZXJfaGVhZCAqYmg7CisJdWludDMyX3QJCSp1ZGF0YTsKKwlibGtfdAkJCSBjb3VudCA9IDA7CisJaW50CQkJIGk7CisJaW50CQkJIHUzMnBlcmJsb2NrID0gZnMtPmJsb2Nrc2l6ZSA+PiAyOworCWludAkJCSBpNTEycGVyYmxvY2sgPSAxIDw8IChmcy0+bG9nc2l6ZSAtIDkpOworCisJaWYgKGJsb2NrID09IDAgfHwgRVhUMl9JTk9ERV9NT0RFKCppbm9kZSkgPT0gMCkKKwkJcmV0dXJuIC0xOworCisJaWYgKGZzLT5vcHRfZGVidWcpCisJCXN3aXRjaCAoYWN0aW9uKQorCQl7CisJCQljYXNlIEVYVDJfQUNUSU9OX0FERDoKKwkJCQlmcHJpbnRmKHN0ZGVyciwiYWRkaW5nIDB4JTA0eCB0byBpbm9kZVxuIiwKKwkJCQkJYmxvY2spOworCQkJCWJyZWFrOworCQkJY2FzZSBFWFQyX0FDVElPTl9ERUxFVEU6CisJCQkJZnByaW50ZihzdGRlcnIsImRlbGV0aW5nIDB4JTA0eCBmcm9tIGlub2RlXG4iLAorCQkJCQlibG9jayk7CisJCQkJYnJlYWs7CisJCQljYXNlIEVYVDJfQUNUSU9OX0ZJTkQ6CisJCQkJZnByaW50ZihzdGRlcnIsImZpbmRpbmcgMHglMDR4IGluIGlub2RlXG4iLAorCQkJCQlibG9jayk7CisJCQkJYnJlYWs7CisJCX0KKworCS8qIERpcmVjdCBibG9ja3MgZm9yIGZpcnN0IDEyIGJsb2NrcyAqLworCWZvciAoaSA9IDA7IGkgPCBFWFQyX05ESVJfQkxPQ0tTOyBpKyspCisJeworCQlpZiAoYWN0aW9uID09IEVYVDJfQUNUSU9OX0FERCAmJiAhRVhUMl9JTk9ERV9CTE9DSygqaW5vZGUsIGkpKQorCQl7CisJCQlpbm9kZS0+aV9ibG9ja1tpXSA9IFBFRF9DUFVfVE9fTEUzMihibG9jayk7CisJCQlfaW5vZGVfdXBkYXRlX3NpemUgKGZzLCBpbm9kZSwgMSk7CisJCQlleHQyX3NldF9ibG9ja19zdGF0ZShmcywgYmxvY2ssIDEsIDEpOworCQkJcmV0dXJuIGk7CisJCX0KKwkJaWYgKEVYVDJfSU5PREVfQkxPQ0soKmlub2RlLCBpKSA9PSBibG9jaykKKwkJeworCQkJaWYgKGFjdGlvbiA9PSBFWFQyX0FDVElPTl9ERUxFVEUpCisJCQl7CisJCQkJaW5vZGUtPmlfYmxvY2tbaV0gPSAwOworCQkJCV9pbm9kZV91cGRhdGVfc2l6ZSAoZnMsIGlub2RlLCAtMSk7CisJCQkJZXh0Ml9zZXRfYmxvY2tfc3RhdGUoZnMsIGJsb2NrLCAwLCAxKTsKKwkJCX0KKwkJCXJldHVybiBpOworCQl9CisJCWlmIChFWFQyX0lOT0RFX0JMT0NLKCppbm9kZSwgaSkpCisJCQljb3VudCArPSBpNTEycGVyYmxvY2s7CisJfQorCisJY291bnQgKz0gRVhUMl9JTk9ERV9CTE9DSygqaW5vZGUsIEVYVDJfSU5EX0JMT0NLKSA/IGk1MTJwZXJibG9jayA6IDA7CisJY291bnQgKz0gRVhUMl9JTk9ERV9CTE9DSygqaW5vZGUsIEVYVDJfRElORF9CTE9DSykgPyBpNTEycGVyYmxvY2sgOiAwOworCWNvdW50ICs9IEVYVDJfSU5PREVfQkxPQ0soKmlub2RlLCBFWFQyX1RJTkRfQkxPQ0spID8gaTUxMnBlcmJsb2NrIDogMDsKKworCWlmICghRVhUMl9JTk9ERV9CTE9DSygqaW5vZGUsIEVYVDJfSU5EX0JMT0NLKSB8fAorCSAgICAoY291bnQgPj0gRVhUMl9JTk9ERV9CTE9DS1MoKmlub2RlKSAmJiBhY3Rpb24gIT0gRVhUMl9BQ1RJT05fQUREKSkKKwkJcmV0dXJuIC0xOworCisJYmggPSBleHQyX2JyZWFkKGZzLCBFWFQyX0lOT0RFX0JMT0NLKCppbm9kZSwgRVhUMl9JTkRfQkxPQ0spKTsKKwl1ZGF0YSA9ICh1aW50MzJfdCAqKWJoLT5kYXRhOworCisJLyogSW5kaXJlY3QgYmxvY2tzIGZvciBuZXh0IDI1Ni81MTIvMTAyNCBibG9ja3MgKGZvciAxay8yay80ayBibG9ja3MpICovCisJZm9yIChpID0gMDsgaSA8IHUzMnBlcmJsb2NrOyBpKyspIHsKKwkJaWYgKGFjdGlvbiA9PSBFWFQyX0FDVElPTl9BREQgJiYgIXVkYXRhW2ldKSB7CisJCQliaC0+ZGlydHkgPSAxOworCQkJdWRhdGFbaV0gPSBQRURfQ1BVX1RPX0xFMzIoYmxvY2spOworCQkJX2lub2RlX3VwZGF0ZV9zaXplIChmcywgaW5vZGUsIDEpOworCQkJZXh0Ml9zZXRfYmxvY2tfc3RhdGUoZnMsIGJsb2NrLCAxLCAxKTsKKwkJCWV4dDJfYnJlbHNlKGJoLCAwKTsKKwkJCXJldHVybiBFWFQyX05ESVJfQkxPQ0tTICsgaTsKKwkJfQorCQlpZiAoUEVEX0xFMzJfVE9fQ1BVKHVkYXRhW2ldKSA9PSBibG9jaykgeworCQkJaWYgKGFjdGlvbiA9PSBFWFQyX0FDVElPTl9ERUxFVEUpIHsKKwkJCQliaC0+ZGlydHkgPSAxOworCQkJCXVkYXRhW2ldID0gMDsKKwkJCQlfaW5vZGVfdXBkYXRlX3NpemUgKGZzLCBpbm9kZSwgLTEpOworCQkJCWV4dDJfc2V0X2Jsb2NrX3N0YXRlKGZzLCBibG9jaywgMCwgMSk7CisJCQl9CisJCQlleHQyX2JyZWxzZShiaCwgMCk7CisJCQlyZXR1cm4gRVhUMl9ORElSX0JMT0NLUyArIGk7CisJCX0KKwkJaWYgKHVkYXRhW2ldKQorCQl7CisJCQljb3VudCArPSBpNTEycGVyYmxvY2s7CisJCQlpZiAoY291bnQgPj0gRVhUMl9JTk9ERV9CTE9DS1MoKmlub2RlKSAmJgorCQkJICAgIGFjdGlvbiAhPSBFWFQyX0FDVElPTl9BREQpCisJCQkJcmV0dXJuIC0xOworCQl9CisJfQorCisJZXh0Ml9icmVsc2UoYmgsIDApOworCisJaWYgKCFFWFQyX0lOT0RFX0JMT0NLKCppbm9kZSwgRVhUMl9ESU5EX0JMT0NLKSB8fAorCSAgICAoY291bnQgPj0gRVhUMl9JTk9ERV9CTE9DS1MoKmlub2RlKSAmJiBhY3Rpb24gIT0gRVhUMl9BQ1RJT05fQUREKSkKKwkJcmV0dXJuIC0xOworCWJoID0gZXh0Ml9icmVhZChmcywgRVhUMl9JTk9ERV9CTE9DSygqaW5vZGUsIEVYVDJfRElORF9CTE9DSykpOworCXVkYXRhID0gKHVpbnQzMl90ICopYmgtPmRhdGE7CisKKwkvKiBEb3VibGUgaW5kaXJlY3QgYmxvY2tzIGZvciBuZXh0IDJeMTYvMl4xOC8yXjIwIDFrLzJrLzRrIGJsb2NrcyAqLworCWZvciAoaSA9IDA7IGkgPCB1MzJwZXJibG9jazsgaSsrKSB7CisJCXN0cnVjdCBleHQyX2J1ZmZlcl9oZWFkCSpiaDI7CisJCXVpbnQzMl90CQkJKnVkYXRhMjsKKwkJaW50CQkJIGo7CisKKwkJaWYgKCF1ZGF0YVtpXSkgeworCQkJZXh0Ml9icmVsc2UoYmgsIDApOworCQkJcmV0dXJuIC0xOworCQl9CisJCWJoMiA9IGV4dDJfYnJlYWQoZnMsIFBFRF9MRTMyX1RPX0NQVSh1ZGF0YVtpXSkpOworCQl1ZGF0YTIgPSAodWludDMyX3QgKiliaDItPmRhdGE7CisJCWNvdW50ICs9IGk1MTJwZXJibG9jazsKKworCQlmb3IgKGogPSAwOyBqIDwgdTMycGVyYmxvY2s7IGorKykgeworCQkJaWYgKGFjdGlvbiA9PSBFWFQyX0FDVElPTl9BREQgJiYgIXVkYXRhMltqXSkgeworCQkJCWJoMi0+ZGlydHkgPSAxOworCQkJCXVkYXRhMltqXSA9IFBFRF9DUFVfVE9fTEUzMihibG9jayk7CisJCQkJX2lub2RlX3VwZGF0ZV9zaXplIChmcywgaW5vZGUsIDEpOworCQkJCWV4dDJfc2V0X2Jsb2NrX3N0YXRlKGZzLCBibG9jaywgMSwgMSk7CisJCQkJZXh0Ml9icmVsc2UoYmgsIDApOworCQkJCWV4dDJfYnJlbHNlKGJoMiwgMCk7CisJCQkJcmV0dXJuIEVYVDJfTkRJUl9CTE9DS1MgKyBpICogdTMycGVyYmxvY2sgKyBqOworCQkJfQorCQkJaWYgKFBFRF9MRTMyX1RPX0NQVSh1ZGF0YTJbal0pID09IGJsb2NrKSB7CisJCQkJaWYgKGFjdGlvbiA9PSBFWFQyX0FDVElPTl9ERUxFVEUpIHsKKwkJCQkJYmgyLT5kaXJ0eSA9IDE7CisJCQkJCXVkYXRhMltqXSA9IDA7CisJCQkJCV9pbm9kZV91cGRhdGVfc2l6ZSAoZnMsIGlub2RlLCAtMSk7CisJCQkJCWV4dDJfc2V0X2Jsb2NrX3N0YXRlKGZzLCBibG9jaywgMCwgMSk7CisJCQkJfQorCQkJCWV4dDJfYnJlbHNlKGJoLCAwKTsKKwkJCQlleHQyX2JyZWxzZShiaDIsIDApOworCQkJCXJldHVybiBFWFQyX05ESVJfQkxPQ0tTICsgaSAqIHUzMnBlcmJsb2NrICsgajsKKwkJCX0KKwkJCWlmICh1ZGF0YTJbal0pCisJCQl7CisJCQkJY291bnQgKz0gaTUxMnBlcmJsb2NrOworCQkJCWlmIChjb3VudCA+PSBFWFQyX0lOT0RFX0JMT0NLUygqaW5vZGUpICYmCisJCQkJICAgIGFjdGlvbiAhPSBFWFQyX0FDVElPTl9BREQpCisJCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJfQorCQlleHQyX2JyZWxzZShiaDIsIDApOworCX0KKwlleHQyX2JyZWxzZShiaCwgMCk7CisKKwkvKiBGSVhNRTogd2Ugc2hvdWxkIGNoZWNrIGZvciB0cmlwbGUtaW5kaXJlY3QgYmxvY2tzIGhlcmUsIGJ1dCBpdAorCSAqIHdvdWxkIGJlIG5pY2UgdG8gaGF2ZSBhIGJldHRlciByb3V0aW5lIHRvIHRyYXZlcnNlIGJsb2NrcywgYW5kCisJICogZmlsZSBzeXN0ZW1zIHRoYXQgbmVlZCB0cmlwbGUtaW5kaXJlY3QgYmxvY2tzIGZvciB0aGUgcmVzaXplCisJICogaW5vZGUgYXJlIHRvbyBiaWcgdG8gd29ycnkgYWJvdXQgeWV0LgorCSAqLworCisJcmV0dXJuIC0xOworfQorCitpbnQgZXh0Ml93cml0ZV9pbm9kZShzdHJ1Y3QgZXh0Ml9mcyAqZnMsIGlub190IGlub2RlLCBjb25zdCBzdHJ1Y3QgZXh0Ml9pbm9kZSAqZGF0YSkKK3sKKwlzdHJ1Y3QgZXh0Ml9idWZmZXJfaGVhZCAqYmg7CisJYmxrX3QJCQkgYmxrOworCW9mZl90CQkJIG9mZjsKKworCW9mZiA9IGV4dDJfZ2V0X2lub2RlX29mZnNldChmcywgaW5vZGUsICZibGspOworCisJYmggPSBleHQyX2JyZWFkKGZzLCBibGspOworCWlmICghYmgpCisJCXJldHVybiAwOworCWJoLT5kaXJ0eSA9IDE7CisJbWVtY3B5KGJoLT5kYXRhICsgb2ZmLCBkYXRhLCBzaXplb2Yoc3RydWN0IGV4dDJfaW5vZGUpKTsKKwlleHQyX2JyZWxzZShiaCwgMCk7CisKKwlyZXR1cm4gMTsKK30KKworaW50IGV4dDJfemVyb19pbm9kZShzdHJ1Y3QgZXh0Ml9mcyAqZnMsIGlub190IGlub2RlKQoreworCXN0cnVjdCBleHQyX2lub2RlIGJ1ZjsKKworCW1lbXNldCgmYnVmLCAwLCBzaXplb2Yoc3RydWN0IGV4dDJfaW5vZGUpKTsKKwlyZXR1cm4gZXh0Ml93cml0ZV9pbm9kZShmcywgaW5vZGUsICZidWYpOworfQorCisKKworCisKKy8qIGNoZWNrIHdoZXRoZXIgeSBpcyByb290IG9mIHgKKyAqIChmb3JtdWxhIGdyYWJiZWQgZnJvbSBsaW51eCBleHQyIGtlcm5lbCBzb3VyY2UpICovCitzdGF0aWMgaW50IGlzX3Jvb3QoaW50IHgsIGludCB5KQoreworCWlmICgheCkKKwkJcmV0dXJuIDE7CisKKwl3aGlsZSAoMSkKKwl7CisJCWlmICh4ID09IDEpCisJCQlyZXR1cm4gMTsKKworCQlpZiAoeCAlIHkpCisJCQlyZXR1cm4gMDsKKworCQl4IC89IHk7CisJfQorfQorCisvKiBjaGVjayB3aGV0aGVyIGdyb3VwIGNvbnRhaW5zIGEgc3VwZXJibG9jayBjb3B5IG9uIGZpbGUgc3lzdGVtcworICogd2hlcmUgbm90IGFsbCBncm91cHMgaGF2ZSBvbmUgKHNwYXJzZSBzdXBlcmJsb2NrIGZlYXR1cmUpICovCitpbnQgZXh0Ml9pc19ncm91cF9zcGFyc2Uoc3RydWN0IGV4dDJfZnMgKmZzLCBpbnQgZ3JvdXApCit7ICAgICAgIAorCWlmICghZnMtPnNwYXJzZSkKKwkJcmV0dXJuIDE7CisKKwlpZiAoaXNfcm9vdChncm91cCwgMykgfHwgaXNfcm9vdChncm91cCwgNSkgfHwgaXNfcm9vdChncm91cCwgNykpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZXh0Ml9jbG9zZShzdHJ1Y3QgZXh0Ml9mcyAqZnMpCit7CisJZXh0Ml9jb21taXRfbWV0YWRhdGEoZnMsIEVYVDJfTUVUQV9QUklNQVJZIHwgRVhUMl9NRVRBX0JBQ0tVUCk7CisJZXh0Ml9zeW5jKGZzKTsKKworCWV4dDJfYmNhY2hlX2RlaW5pdChmcyk7CisKKwlmcy0+ZGV2aGFuZGxlLT5vcHMtPmNsb3NlKGZzLT5kZXZoYW5kbGUtPmNvb2tpZSk7CisKKwlwZWRfZnJlZShmcy0+Z2QpOworCXBlZF9mcmVlKGZzKTsKK30KKworaW50IGV4dDJfY29tbWl0X21ldGFkYXRhKHN0cnVjdCBleHQyX2ZzICpmcywgaW50IGNvcGllcykKK3sKKwlpbnQJCWk7CisJaW50CQludW07CisJaW50CQl3bWV0YSA9IGZzLT5tZXRhZGlydHkgJiBjb3BpZXM7CisJdW5zaWduZWQgY2hhcioJc2IgPSBwZWRfbWFsbG9jKGZzLT5ibG9ja3NpemUpOworCXN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICpzYl9mb3JfaW87CisJaW50CQlzYl9ibG9jazsKKworCS8qIFNlZSBpZiB0aGVyZSBpcyBldmVuIGFueXRoaW5nIHRvIHdyaXRlLi4uICovCisJaWYgKHdtZXRhID09IEVYVDJfTUVUQV9DTEVBTikKKwkJcmV0dXJuIDE7CisKKwlmcy0+c2Iuc19yX2Jsb2Nrc19jb3VudCA9IFBFRF9DUFVfVE9fTEUzMiAoCisJCWZzLT5yX2ZyYWMgKiAobG9mZl90KUVYVDJfU1VQRVJfQkxPQ0tTX0NPVU5UKGZzLT5zYikKKwkJCQkgIC8gMTAwKTsKKworCWlmICghZXh0Ml9yZWFkX2Jsb2NrcyAoZnMsIHNiLCAwLCAxKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoRVhUMl9TVVBFUl9GSVJTVF9EQVRBX0JMT0NLKGZzLT5zYikpIHsKKwkJbWVtY3B5KHNiLCAmZnMtPnNiLCAxMDI0KTsKKwkJc2JfZm9yX2lvID0gKHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICopIHNiOworCX0gZWxzZSB7CisJCW1lbWNweShzYisxMDI0LCAmZnMtPnNiLCAxMDI0KTsKKwkJc2JfZm9yX2lvID0gKHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICopIChzYiArIDEwMjQpOworCX0KKworCW51bSA9IGNvcGllcyAmIEVYVDJfTUVUQV9CQUNLVVAgPyBmcy0+bnVtZ3JvdXBzIDogMTsKKworCWZvciAoaSA9IDAsIHNiX2Jsb2NrID0gRVhUMl9TVVBFUl9GSVJTVF9EQVRBX0JMT0NLKGZzLT5zYik7IGkgPCBudW07CisJICAgICBpKyssIHNiX2Jsb2NrICs9IEVYVDJfU1VQRVJfQkxPQ0tTX1BFUl9HUk9VUChmcy0+c2IpKQorCXsKKworCQlpZiAoIWV4dDJfaXNfZ3JvdXBfc3BhcnNlKGZzLCBpKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChmcy0+ZHluYW1pY192ZXJzaW9uKQorCQkJc2JfZm9yX2lvLT5zX2Jsb2NrX2dyb3VwX25yID0gUEVEX0NQVV9UT19MRTE2IChpKTsKKworCQlpZiAoKGkgPT0gMCAmJiB3bWV0YSAmIEVYVDJfTUVUQV9QUklNQVJZX1NCKSB8fAorCQkgICAgKGkgIT0gMCAmJiB3bWV0YSAmIEVYVDJfTUVUQV9TQikpCisJCXsKKwkJCWlmICghZXh0Ml9iY2FjaGVfZmx1c2hfcmFuZ2UoZnMsIHNiX2Jsb2NrLCAxKSkKKwkJCQlyZXR1cm4gMDsKKwkJCWlmICghZXh0Ml93cml0ZV9ibG9ja3MoZnMsIHNiLCBzYl9ibG9jaywgMSkpCisJCQkJcmV0dXJuIDA7CisJCX0KKwkJaWYgKChpID09IDAgJiYgd21ldGEgJiBFWFQyX01FVEFfUFJJTUFSWV9HRCkgfHwKKwkJICAgIChpICE9IDAgJiYgd21ldGEgJiBFWFQyX01FVEFfR0QpKQorCQl7CisJCQlpZiAoIWV4dDJfYmNhY2hlX2ZsdXNoX3JhbmdlKGZzLCBzYl9ibG9jayArIDEsCisJCQkJCQkgICAgIGZzLT5nZGJsb2NrcykpCisJCQkJcmV0dXJuIDA7CisJCQlpZiAoIWV4dDJfd3JpdGVfYmxvY2tzKGZzLCBmcy0+Z2QsIHNiX2Jsb2NrICsgMSwKKwkJCQkJICAgICAgIGZzLT5nZGJsb2NrcykpCisJCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlzYl9mb3JfaW8tPnNfYmxvY2tfZ3JvdXBfbnIgPSAwOworCisJLyogQ2xlYXIgdGhlIGZsYWdzIG9mIHRoZSBjb21wb25lbnRzIHdlIGp1c3QgZmluaXNoZWQgd3JpdGluZy4gKi8KKwlmcy0+bWV0YWRpcnR5ICY9IH5jb3BpZXM7CisKKwlyZXR1cm4gMTsKK30KKworaW50IGV4dDJfc3luYyhzdHJ1Y3QgZXh0Ml9mcyAqZnMpCit7CisJaWYgKCFleHQyX2NvbW1pdF9tZXRhZGF0YShmcywgRVhUMl9NRVRBX1BSSU1BUlkpKSByZXR1cm4gMDsKKwlpZiAoIWV4dDJfYmNhY2hlX3N5bmMoZnMpKSByZXR1cm4gMDsKKwlpZiAoIWZzLT5kZXZoYW5kbGUtPm9wcy0+c3luYyhmcy0+ZGV2aGFuZGxlLT5jb29raWUpKSByZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworc3RydWN0IGV4dDJfZnMgKmV4dDJfb3BlbihzdHJ1Y3QgZXh0Ml9kZXZfaGFuZGxlICpoYW5kbGUsIGludCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgZXh0Ml9mcyAqZnM7CisKKwlpZiAoKGZzID0gKHN0cnVjdCBleHQyX2ZzICopIHBlZF9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBleHQyX2ZzKSkpCisJCT09IE5VTEwpCisJCWdvdG8gZXJyb3I7CisKKwloYW5kbGUtPm9wcy0+c2V0X2Jsb2Nrc2l6ZShoYW5kbGUtPmNvb2tpZSwgMTApOworCisJaWYgKCFoYW5kbGUtPm9wcy0+cmVhZChoYW5kbGUtPmNvb2tpZSwgJmZzLT5zYiwgMSwgMSkKKwkgICAgfHwgRVhUMl9TVVBFUl9NQUdJQyhmcy0+c2IpICE9IEVYVDJfU1VQRVJfTUFHSUNfQ09OU1QpCisJeworCQlwZWRfZXhjZXB0aW9uX3Rocm93IChQRURfRVhDRVBUSU9OX0VSUk9SLCBQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCV8oIkludmFsaWQgc3VwZXJibG9jay4gIEFyZSB5b3Ugc3VyZSB0aGlzIGlzIGFuIGV4dDIgIgorCQkJICAiZmlsZSBzeXN0ZW0/IikpOworCQlnb3RvIGVycm9yX2ZyZWVfZnM7CisJfQorCisKKwlmcy0+b3B0X2RlYnVnID0gMTsKKwlmcy0+b3B0X3NhZmUgPSAxOworCWZzLT5vcHRfdmVyYm9zZSA9IDA7CisKKwlpZiAoRVhUMl9TVVBFUl9TVEFURShmcy0+c2IpICYgRVhUMl9FUlJPUl9GUyAmIH4oc3RhdGUgJiBFWFQyX0VSUk9SX0ZTKSkKKwl7CisJCWlmIChwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCVBFRF9FWENFUFRJT05fV0FSTklORywgUEVEX0VYQ0VQVElPTl9JR05PUkVfQ0FOQ0VMLAorCQkJXygiRmlsZSBzeXN0ZW0gaGFzIGVycm9ycyEgIFlvdSBzaG91bGQgcnVuIGUyZnNjay4iKSkKKwkJCQk9PSBQRURfRVhDRVBUSU9OX0NBTkNFTCkKKwkJCWdvdG8gZXJyb3JfZnJlZV9mczsKKwl9CisKKwlpZiAoISgoRVhUMl9TVVBFUl9TVEFURShmcy0+c2IpIHwgc3RhdGUpICYgRVhUMl9WQUxJRF9GUykKKwkgICAgfHwgKEVYVDJfU1VQRVJfRkVBVFVSRV9JTkNPTVBBVChmcy0+c2IpCisJCSYgRVhUM19GRUFUVVJFX0lOQ09NUEFUX1JFQ09WRVIpKQorCXsKKwkJaWYgKHBlZF9leGNlcHRpb25fdGhyb3cgKAorCQkJUEVEX0VYQ0VQVElPTl9FUlJPUiwgUEVEX0VYQ0VQVElPTl9JR05PUkVfQ0FOQ0VMLAorCQkJXygiRmlsZSBzeXN0ZW0gd2FzIG5vdCBjbGVhbmx5IHVubW91bnRlZCEgICIKKwkJCSAgIllvdSBzaG91bGQgcnVuIGUyZnNjay4gIE1vZGlmeWluZyBhbiB1bmNsZWFuICIKKwkJCSAgImZpbGUgc3lzdGVtIGNvdWxkIGNhdXNlIHNldmVyZSBjb3JydXB0aW9uLiIpKQorCQkJCSE9IFBFRF9FWENFUFRJT05fSUdOT1JFKQorCQkJZ290byBlcnJvcl9mcmVlX2ZzOworCX0KKworCWZzLT5keW5hbWljX3ZlcnNpb24gPSBFWFQyX1NVUEVSX1JFVl9MRVZFTCAoZnMtPnNiKSA+IDA7CisKKwlpZiAoKEVYVDJfU1VQRVJfRkVBVFVSRV9DT01QQVQoZnMtPnNiKQorCSAgICAgICAgICAgICAgICAmIH4oRVhUM19GRUFUVVJFX0NPTVBBVF9IQVNfSk9VUk5BTCB8CisJCQkgICAgRVhUMl9GRUFUVVJFX0NPTVBBVF9IQVNfRElSX0lOREVYKSkgfHwKKwkgICAgKEVYVDJfU1VQRVJfRkVBVFVSRV9JTkNPTVBBVChmcy0+c2IpCisJICAgIAkJJiB+KEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9GSUxFVFlQRSB8CisJCQkgICAgRVhUM19GRUFUVVJFX0lOQ09NUEFUX1JFQ09WRVIpKSB8fAorCSAgICAoRVhUMl9TVVBFUl9GRUFUVVJFX1JPX0NPTVBBVChmcy0+c2IpCisJCQkmIH4oRVhUMl9GRUFUVVJFX1JPX0NPTVBBVF9TUEFSU0VfU1VQRVIgfAorCQkJICAgIEVYVDJfRkVBVFVSRV9ST19DT01QQVRfTEFSR0VfRklMRSkpKQorCXsKKwkJcGVkX2V4Y2VwdGlvbl90aHJvdyAoUEVEX0VYQ0VQVElPTl9FUlJPUiwgUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCSAgICAgXygiRmlsZSBzeXN0ZW0gaGFzIGFuIGluY29tcGF0aWJsZSBmZWF0dXJlIGVuYWJsZWQuIikpOworCQlnb3RvIGVycm9yX2ZyZWVfZnM7CisJfQorCisJZnMtPmRldmhhbmRsZSA9IGhhbmRsZTsKKwlmcy0+bG9nc2l6ZSA9IEVYVDJfU1VQRVJfTE9HX0JMT0NLX1NJWkUoZnMtPnNiKSArIDEwOworCWhhbmRsZS0+b3BzLT5zZXRfYmxvY2tzaXplKGhhbmRsZS0+Y29va2llLCBmcy0+bG9nc2l6ZSk7CisKKwlpZiAoIWV4dDJfYmNhY2hlX2luaXQoZnMpKQorCXsKKwkJcGVkX2V4Y2VwdGlvbl90aHJvdyAoUEVEX0VYQ0VQVElPTl9FUlJPUiwgUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQkJICAgICBfKCJFcnJvciBhbGxvY2F0aW5nIGJ1ZmZlciBjYWNoZS4iKSk7CisJCWdvdG8gZXJyb3JfZnJlZV9mczsKKwl9CisKKwlmcy0+YmxvY2tzaXplID0gMSA8PCBmcy0+bG9nc2l6ZTsKKworCWZzLT5udW1ncm91cHMgPSBwZWRfZGl2X3JvdW5kX3VwIChFWFQyX1NVUEVSX0JMT0NLU19DT1VOVChmcy0+c2IpCisJCSAgICAgICAJCS0gRVhUMl9TVVBFUl9GSVJTVF9EQVRBX0JMT0NLKGZzLT5zYiksCisJCQkJRVhUMl9TVVBFUl9CTE9DS1NfUEVSX0dST1VQKGZzLT5zYikpOworCWZzLT5nZGJsb2NrcyA9IHBlZF9kaXZfcm91bmRfdXAgKGZzLT5udW1ncm91cHMKKyAgICAgICAgICAgICAgICAgICAgICAgICogc2l6ZW9mKHN0cnVjdCBleHQyX2dyb3VwX2Rlc2MpLAorCQkJICAgICAgIGZzLT5ibG9ja3NpemUpOworCWZzLT5pbm9kZWJsb2NrcyA9IHBlZF9kaXZfcm91bmRfdXAgKEVYVDJfU1VQRVJfSU5PREVTX1BFUl9HUk9VUChmcy0+c2IpCisJCSAgICAgICAJCSAgKiBzaXplb2Yoc3RydWN0IGV4dDJfaW5vZGUpLAorCQkJCSAgZnMtPmJsb2Nrc2l6ZSk7CisJZnMtPnJfZnJhYyA9IHBlZF9kaXZfcm91bmRfdXAgKDEwMCAqIChsb2ZmX3QpRVhUMl9TVVBFUl9SX0JMT0NLU19DT1VOVChmcy0+c2IpLAorCQkgICAgICAgCSAgICAgRVhUMl9TVVBFUl9CTE9DS1NfQ09VTlQoZnMtPnNiKSk7CisJZnMtPmFkbWluYmxvY2tzID0gMyArIGZzLT5nZGJsb2NrcyArIGZzLT5pbm9kZWJsb2NrczsKKworCWZzLT5zcGFyc2UgPSAwOworCWlmIChFWFQyX1NVUEVSX0ZFQVRVUkVfUk9fQ09NUEFUKGZzLT5zYikKKwkJCSYgRVhUMl9GRUFUVVJFX1JPX0NPTVBBVF9TUEFSU0VfU1VQRVIpCisJCWZzLT5zcGFyc2UgPSAxOworCisJZnMtPmhhc19qb3VybmFsID0gMCA8IChFWFQyX1NVUEVSX0ZFQVRVUkVfQ09NUEFUKGZzLT5zYikKKwkJCSAgICAgICAmIEVYVDNfRkVBVFVSRV9DT01QQVRfSEFTX0pPVVJOQUwpOworCWZzLT5oYXNfaW50ZXJuYWxfam91cm5hbAorCQk9IGZzLT5oYXNfam91cm5hbAorCQkJJiYgdXVpZF9pc19udWxsKEVYVDJfU1VQRVJfSk9VUk5BTF9VVUlEKGZzLT5zYikpCisJCQkmJiBFWFQyX1NVUEVSX0pPVVJOQUxfSU5VTShmcy0+c2IpOworCisJZnMtPmdkID0gcGVkX21hbGxvYyAoZnMtPm51bWdyb3VwcyAqIHNpemVvZiAoc3RydWN0IGV4dDJfZ3JvdXBfZGVzYykKKwkJCSAgICAgCSsgZnMtPmJsb2Nrc2l6ZSk7CisJaWYgKCFmcy0+Z2QpCisJCWdvdG8gZXJyb3JfZGVpbml0X2JjYWNoZTsKKworCWV4dDJfcmVhZF9ibG9ja3MoZnMsIGZzLT5nZCwgRVhUMl9TVVBFUl9GSVJTVF9EQVRBX0JMT0NLKGZzLT5zYikgKyAxLAorCQkJIGZzLT5nZGJsb2Nrcyk7CisgICAgICAgICAgICAgICAgCisJZnMtPm1ldGFkaXJ0eSA9IDA7CisJcmV0dXJuIGZzOworCisJcGVkX2ZyZWUoZnMtPmdkKTsKK2Vycm9yX2RlaW5pdF9iY2FjaGU6CisJZXh0Ml9iY2FjaGVfZGVpbml0KGZzKTsKK2Vycm9yX2ZyZWVfZnM6CisJcGVkX2ZyZWUoZnMpOworZXJyb3I6CisJcmV0dXJuIE5VTEw7Cit9CisKKyNlbmRpZiAvKiAhRElTQ09WRVJfT05MWSAqLwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9leHQyL2V4dDIuaCBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZjYmZjMwotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmgKQEAgLTAsMCArMSwyNDcgQEAKKy8qCisgICAgZXh0Mi5oIC0tIGV4dDIgaGVhZGVyCisgICAgQ29weXJpZ2h0IChDKSAxOTk4LTIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBfRVhUMl9ICisjZGVmaW5lIF9FWFQyX0gKKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaW5jbHVkZSA8cGFydGVkL3BhcnRlZC5oPgorI2luY2x1ZGUgPHBhcnRlZC9kZWJ1Zy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgInR1bmUuaCIKKworI2lmIEhBVkVfSU5UVFlQRVNfSAorIyAgaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNlbmRpZgorCisjaWYgRU5BQkxFX05MUworIyAgaW5jbHVkZSA8bGliaW50bC5oPgorIyAgZGVmaW5lIF8oU3RyaW5nKSBkZ2V0dGV4dCAoUEFDS0FHRSwgU3RyaW5nKQorI2Vsc2UKKyMgIGRlZmluZSBfKFN0cmluZykgKFN0cmluZykKKyNlbmRpZiAvKiBFTkFCTEVfTkxTICovCisKKworLyogRWhybS4uLi4gc29ycnksIHBlZGFudGljaXN0cyEgOi0pICovCisjaWZuZGVmIG9mZnNldG9mCisjICBkZWZpbmUgb2Zmc2V0b2YodHlwZSwgZmllbGQpICgoc2l6ZV90KSgmKCgodHlwZSAqKTApLT5maWVsZCkpKQorI2VuZGlmCisKKyNpZmRlZiBfX0JFT1NfXworICB0eXBlZGVmIG9mZl90IGxvZmZfdDsKKyNlbmRpZgorCit0eXBlZGVmIHVfaW50MzJfdCBibGtfdDsKKworI2lmZGVmIEhBVkVfTElOVVhfRVhUMl9GU19ICisjZGVmaW5lIF9MSU5VWF9UWVBFU19ICisjZGVmaW5lIGlfdmVyc2lvbiBpX2dlbmVyYXRpb24KKyNpbmNsdWRlIDxsaW51eC9leHQyX2ZzLmg+CisjZWxzZQorI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNlbmRpZgorCitleHRlcm4gdW5zaWduZWQgY2hhciBfYml0bWFwWzhdOworCitzdHJ1Y3QgZXh0Ml9idWZmZXJfY2FjaGUKK3sKKwlzdHJ1Y3QgZXh0Ml9idWZmZXJfaGVhZAkgKmNhY2hlOworCXN0cnVjdCBleHQyX2J1ZmZlcl9oZWFkICAqaGVhZHM7CisJc3RydWN0IGV4dDJfYnVmZmVyX2hlYWQgKipoYXNoOworCXN0cnVjdCBleHQyX2ZzCQkgKmZzOworCisJaW50CQkJICBzaXplOworCWludAkJCSAgbnVtYWxsb2M7CisJdW5zaWduZWQgY2hhcgkJICpidWZmZXJtZW07Cit9OworCitzdHJ1Y3QgZXh0Ml9idWZmZXJfaGVhZAoreworCXN0cnVjdCBleHQyX2J1ZmZlcl9oZWFkICAqbmV4dDsKKwlzdHJ1Y3QgZXh0Ml9idWZmZXJfaGVhZCAgKnByZXY7CisJdW5zaWduZWQgY2hhcgkJICpkYXRhOworCWJsa190CQkJICBibG9jazsKKworCWludAkJCSAgdXNlY291bnQ7CisJaW50CQkJICBkaXJ0eTsKKworCXN0cnVjdCBleHQyX2J1ZmZlcl9jYWNoZSAqYmM7CisJaW50CQkJICBhbGxvYzsKK307CisKK3N0cnVjdCBleHQyX2Rldl9vcHMKK3sKKwlpbnQJKCpjbG9zZSkodm9pZCAqY29va2llKTsKKwlibGtfdAkoKmdldF9zaXplKSh2b2lkICpjb29raWUpOworCWludAkoKnJlYWQpKHZvaWQgKmNvb2tpZSwgdm9pZCAqcHRyLCBibGtfdCBibG9jaywgYmxrX3QgbnVtKTsKKwlpbnQJKCpzZXRfYmxvY2tzaXplKSh2b2lkICpjb29raWUsIGludCBsb2dzaXplKTsKKwlpbnQJKCpzeW5jKSh2b2lkICpjb29raWUpOworCWludAkoKndyaXRlKSh2b2lkICpjb29raWUsIHZvaWQgKnB0ciwgYmxrX3QgYmxvY2ssIGJsa190IG51bSk7Cit9OworCitzdHJ1Y3QgZXh0Ml9kZXZfaGFuZGxlCit7CisJc3RydWN0IGV4dDJfZGV2X29wcwkqb3BzOworCXZvaWQJCQkqY29va2llOworfTsKKworc3RydWN0IGV4dDJfZnMKK3sgICAgICAKKwlzdHJ1Y3QgZXh0Ml9kZXZfaGFuZGxlCQkgKmRldmhhbmRsZTsKKworCXN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrCQkgIHNiOworCXN0cnVjdCBleHQyX2dyb3VwX2Rlc2MJCSAqZ2Q7CisJc3RydWN0IGV4dDJfYnVmZmVyX2NhY2hlCSAqYmM7CisJaW50CQkJCSAgbWV0YWRpcnR5OwkJCS8qIDA6YWxsIHNiJmdkIGNvcGllcyBjbGVhbgorCQkJCQkJCQkJICAgMTphbGwgc2ImZ2QgY29waWVzIGRpcnR5CisJCQkJCQkJCQkgICAyOm9ubHkgZmlyc3Qgc2ImZ2QgY29weSBjbGVhbiAqLworCisJaW50CQkJCSAgZHluYW1pY192ZXJzaW9uOworCWludAkJCQkgIHNwYXJzZTsJCQkvKiBzcGFyc2Ugc3VwZXJibG9ja3MgKi8KKwlpbnQJCQkJICBoYXNfam91cm5hbDsJCQkvKiBqb3VybmFsICovCisJaW50CQkJCSAgaGFzX2ludGVybmFsX2pvdXJuYWw7CisKKwlpbnQJCQkJICBibG9ja3NpemU7CisJaW50CQkJCSAgbG9nc2l6ZTsKKwlibGtfdAkJCQkgIGFkbWluYmxvY2tzOworCWJsa190CQkJCSAgZ2RibG9ja3M7CisJYmxrX3QJCQkJICBpdG9mZnNldDsKKwlibGtfdAkJCQkgIGlub2RlYmxvY2tzOworCWludAkJCQkgIG51bWdyb3VwczsKKwlpbnQJCQkJICByX2ZyYWM7CQkJLyogcmVzZXJ2ZWQgJSBvZiBibG9ja3MgKi8KKworCXVuc2lnbmVkIGNoYXIJCQkgKnJlbG9jYXRvcl9wb29sOworCXVuc2lnbmVkIGNoYXIJCQkgKnJlbG9jYXRvcl9wb29sX2VuZDsKKworCWludAkJCQkgb3B0X2RlYnVnOworCWludAkJCQkgb3B0X3NhZmU7CisJaW50CQkJCSBvcHRfdmVyYm9zZTsKKworCXZvaWQJCQkJICpqb3VybmFsOworfTsKKworCisjZGVmaW5lIEVYVDJfQUNUSU9OX0FERAkJMQorI2RlZmluZSBFWFQyX0FDVElPTl9ERUxFVEUJMgorI2RlZmluZSBFWFQyX0FDVElPTl9GSU5ECTMKKworI2RlZmluZSBFWFQyX01FVEFfQ0xFQU4JCTAKKyNkZWZpbmUgRVhUMl9NRVRBX1BSSU1BUllfU0IJMQorI2RlZmluZSBFWFQyX01FVEFfQkFDS1VQX1NCCTIKKyNkZWZpbmUgRVhUMl9NRVRBX1BSSU1BUllfR0QJNAorI2RlZmluZSBFWFQyX01FVEFfQkFDS1VQX0dECTgKKworI2RlZmluZSBFWFQyX01FVEFfUFJJTUFSWQkoRVhUMl9NRVRBX1BSSU1BUllfU0IgfCBFWFQyX01FVEFfUFJJTUFSWV9HRCkKKyNkZWZpbmUgRVhUMl9NRVRBX0JBQ0tVUAkoRVhUMl9NRVRBX0JBQ0tVUF9TQiB8IEVYVDJfTUVUQV9CQUNLVVBfR0QpCisjZGVmaW5lIEVYVDJfTUVUQV9TQgkJKEVYVDJfTUVUQV9QUklNQVJZX1NCIHwgRVhUMl9NRVRBX0JBQ0tVUF9TQikKKyNkZWZpbmUgRVhUMl9NRVRBX0dECQkoRVhUMl9NRVRBX1BSSU1BUllfR0QgfCBFWFQyX01FVEFfQkFDS1VQX0dEKQorCisvKiBnZW5lcmljIHN0dWZmICovCitpbnQJCWV4dDJfY29weV9ibG9jawkJCShzdHJ1Y3QgZXh0Ml9mcyAqZnMsIGJsa190IGZyb20sIGJsa190IHRvKTsKK3ZvaWQJCWV4dDJfY2xvc2UJCQkoc3RydWN0IGV4dDJfZnMgKmZzKTsKK2ludAkJZXh0Ml9jb21taXRfbWV0YWRhdGEJCShzdHJ1Y3QgZXh0Ml9mcyAqZnMsIGludCBjb3BpZXMpOworb2ZmX3QJCWV4dDJfZ2V0X2lub2RlX29mZnNldAkJKHN0cnVjdCBleHQyX2ZzICpmcywgaW5vX3QgaW5vZGUsIGJsa190ICpibG9jayk7CitibGtfdAkJZXh0Ml9maW5kX2ZyZWVfYmxvY2sJCShzdHJ1Y3QgZXh0Ml9mcyAqZnMpOworaW5vX3QJCWV4dDJfZmluZF9mcmVlX2lub2RlCQkoc3RydWN0IGV4dDJfZnMgKmZzKTsKK2ludAkJZXh0Ml9nZXRfaW5vZGVfc3RhdGUJCShzdHJ1Y3QgZXh0Ml9mcyAqZnMsIGlub190IGlub2RlKTsKK2ludAkJZXh0Ml9pc19ncm91cF9zcGFyc2UJCShzdHJ1Y3QgZXh0Ml9mcyAqZnMsIGludCBncm91cCk7CitpbnQJCWV4dDJfbW92ZV9ibG9ja3MJCShzdHJ1Y3QgZXh0Ml9mcyAqZnMsIGJsa190IHNyYywgYmxrX3QgbnVtLCBibGtfdCBkZXN0KTsKK3N0cnVjdCBleHQyX2ZzICpleHQyX29wZW4JCQkoc3RydWN0IGV4dDJfZGV2X2hhbmRsZSAqaGFuZGxlLCBpbnQgc3RhdGUpOworaW50CQlleHQyX3JlYWRfYmxvY2tzCQkoc3RydWN0IGV4dDJfZnMgKmZzLCB2b2lkICpwdHIsIGJsa190IGJsb2NrLCBibGtfdCBudW1ibG9ja3MpOworaW50CQlleHQyX3JlYWRfaW5vZGUJCQkoc3RydWN0IGV4dDJfZnMgKmZzLCBpbm9fdCBpbm9kZSwgc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlcCk7CitpbnQJCWV4dDJfc2V0X2lub2RlX3N0YXRlCQkoc3RydWN0IGV4dDJfZnMgKmZzLCBpbm9fdCBpbm9kZSwgaW50IHN0YXRlLCBpbnQgdXBkYXRlbWV0YWRhdGEpOworaW50CQlleHQyX2RvX2lub2RlCQkJKHN0cnVjdCBleHQyX2ZzICpmcywgc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlLCBibGtfdCBibG9jaywgaW50IGFjdGlvbik7CitpbnQJCWV4dDJfc3luYwkJCShzdHJ1Y3QgZXh0Ml9mcyAqZnMpOworaW50CQlleHQyX3dyaXRlX2Jsb2NrcwkJKHN0cnVjdCBleHQyX2ZzICpmcywgdm9pZCAqcHRyLCBibGtfdCBibG9jaywgYmxrX3QgbnVtYmxvY2tzKTsKK2ludAkJZXh0Ml93cml0ZV9pbm9kZQkJKHN0cnVjdCBleHQyX2ZzICpmcywgaW5vX3QgaW5vZGUsIGNvbnN0IHN0cnVjdCBleHQyX2lub2RlICppbm9kZXApOworaW50CQlleHQyX3plcm9fYmxvY2tzCQkoc3RydWN0IGV4dDJfZnMgKmZzLCBibGtfdCBibG9jaywgYmxrX3QgbnVtKTsKK2ludAkJZXh0Ml96ZXJvX2lub2RlCQkJKHN0cnVjdCBleHQyX2ZzICpmcywgaW5vX3QgaW5vZGUpOworCisvKiBibG9jayByZWxhdGVkICovCit2b2lkCQlleHQyX2JnYml0bWFwX2NhY2hlX2RlaW5pdAkoc3RydWN0IGV4dDJfZnMgKmZzKTsKK2ludAkJZXh0Ml9iZ2JpdG1hcF9jYWNoZV9mbHVzaAkoc3RydWN0IGV4dDJfZnMgKmZzKTsKK2ludAkJZXh0Ml9iZ2JpdG1hcF9jYWNoZV9pbml0CShzdHJ1Y3QgZXh0Ml9mcyAqZnMpOworaW50CQlleHQyX2dldF9ibG9ja19zdGF0ZQkJKHN0cnVjdCBleHQyX2ZzICosIGJsa190IGJsb2NrKTsKK2ludAkJZXh0Ml9zZXRfYmxvY2tfc3RhdGUJCShzdHJ1Y3QgZXh0Ml9mcyAqLCBibGtfdCBibG9jaywgaW50IHN0YXRlLCBpbnQgdXBkYXRlbWV0YWRhdGEpOworCisvKiBibG9jayByZWxvY2F0b3IgKi8KK2ludAkJZXh0Ml9ibG9ja19yZWxvY2F0ZQkJKHN0cnVjdCBleHQyX2ZzICpmcywgYmxrX3QgbmV3c2l6ZSk7CisKKy8qIGJ1ZmZlciAqLwordm9pZAkJZXh0Ml9iY2FjaGVfZGVpbml0CQkoc3RydWN0IGV4dDJfZnMgKmZzKTsKK3ZvaWQJCWV4dDJfYmNhY2hlX2R1bXAJCShzdHJ1Y3QgZXh0Ml9mcyAqZnMpOworaW50CQlleHQyX2JjYWNoZV9mbHVzaAkJKHN0cnVjdCBleHQyX2ZzICpmcywgYmxrX3QgYmxvY2spOworaW50CQlleHQyX2JjYWNoZV9mbHVzaF9yYW5nZQkJKHN0cnVjdCBleHQyX2ZzICpmcywgYmxrX3QgZmlyc3QsIGJsa190IGxhc3QpOworaW50IAkJZXh0Ml9iY2FjaGVfaW5pdAkJKHN0cnVjdCBleHQyX2ZzICpmcyk7CitpbnQJCWV4dDJfYmNhY2hlX3N5bmMJCShzdHJ1Y3QgZXh0Ml9mcyAqZnMpOworc3RydWN0IGV4dDJfYnVmZmVyX2hlYWQgKmV4dDJfYmNyZWF0ZQkJKHN0cnVjdCBleHQyX2ZzICpmcywgYmxrX3QgYmxvY2spOworc3RydWN0IGV4dDJfYnVmZmVyX2hlYWQgKmV4dDJfYnJlYWQJCShzdHJ1Y3QgZXh0Ml9mcyAqZnMsIGJsa190IGJsb2NrKTsKK2ludAkJZXh0Ml9icmVsc2UJCQkoc3RydWN0IGV4dDJfYnVmZmVyX2hlYWQgKmJoLCBpbnQgZm9yZ2V0KTsKKworLyogaW5vZGUgcmVsb2NhdG9yICovCitpbnQJCWV4dDJfaW5vZGVfcmVsb2NhdGUJCShzdHJ1Y3QgZXh0Ml9mcyAqZnMsIGludCBuZXdncm91cHMpOworCisvKiBqb3VybmFsbGluZyAqLwordm9pZAkJZXh0Ml9qb3VybmFsX2RlaW5pdAkJKHN0cnVjdCBleHQyX2ZzICpmcyk7CitpbnQJCWV4dDJfam91cm5hbF9pbml0CQkoc3RydWN0IGV4dDJfZnMgKmZzKTsKKworLyogbWV0YWRhdGEgbW92ZXIgKi8KK2ludAkJZXh0Ml9tZXRhZGF0YV9wdXNoCQkoc3RydWN0IGV4dDJfZnMgKmZzLCBibGtfdCBuZXdzaXplKTsKKworLyogZnMgY3JlYXRpb24gKi8KK3N0cnVjdCBleHQyX2ZzICpleHQyX21rZnMJCQkoc3RydWN0IGV4dDJfZGV2X2hhbmRsZSAqaGFuZGxlLCBibGtfdCBudW1ibG9ja3MsIGludCBsb2dfYmxvY2tfc2l6ZSwgYmxrX3QgYmxvY2tzX3Blcl9ncm91cCwgaW50IGlub2Rlc19wZXJfZ3JvdXAsIGludCBzcGFyc2Vfc2IsIGludCByZXNlcnZlZF9ibG9ja19wZXJjZW50YWdlLCBQZWRUaW1lciogdGltZXIpOworCisvKiByZXNpemUgKi8KK2ludAkJZXh0Ml9yZXNpemVfZnMJCQkoc3RydWN0IGV4dDJfZnMgKmZzLCBibGtfdCBuZXdzaXplLCBQZWRUaW1lciogdGltZXIpOworCisvKiB1bml4IEkvTyAqLworc3RydWN0IGV4dDJfZGV2X2hhbmRsZSAqZXh0Ml9tYWtlX2Rldl9oYW5kbGVfZnJvbV9maWxlKGNoYXIgKmRldik7CisKKworCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBleHQyX2lzX2RhdGFfYmxvY2soc3RydWN0IGV4dDJfZnMgKmZzLCBibGtfdCBibG9jaykKK3sKKwlibGtfdCBibGs7CisJaW50ICAgZ3JvdXA7CisKKwlQRURfQVNTRVJUIChibG9jayA+PSBFWFQyX1NVUEVSX0ZJUlNUX0RBVEFfQkxPQ0soZnMtPnNiKSwgcmV0dXJuIDApOworCVBFRF9BU1NFUlQgKGJsb2NrIDwgRVhUMl9TVVBFUl9CTE9DS1NfQ09VTlQoZnMtPnNiKSwgcmV0dXJuIDApOworCisJYmxrID0gYmxvY2sgLSBFWFQyX1NVUEVSX0ZJUlNUX0RBVEFfQkxPQ0soZnMtPnNiKTsKKworCWdyb3VwID0gYmxrIC8gRVhUMl9TVVBFUl9CTE9DS1NfUEVSX0dST1VQKGZzLT5zYik7CisJYmxrICU9IEVYVDJfU1VQRVJfQkxPQ0tTX1BFUl9HUk9VUChmcy0+c2IpOworCisJaWYgKGV4dDJfaXNfZ3JvdXBfc3BhcnNlKGZzLCBncm91cCkgJiYgYmxrIDw9IGZzLT5nZGJsb2NrcykKKwkJcmV0dXJuIDA7CisKKwlpZiAoYmxvY2sgPT0gRVhUMl9HUk9VUF9CTE9DS19CSVRNQVAoZnMtPmdkW2dyb3VwXSkgfHwKKwkgICAgYmxvY2sgPT0gRVhUMl9HUk9VUF9JTk9ERV9CSVRNQVAoZnMtPmdkW2dyb3VwXSkpCisJCXJldHVybiAwOworCisJaWYgKGJsb2NrID49IEVYVDJfR1JPVVBfSU5PREVfVEFCTEUoZnMtPmdkW2dyb3VwXSkgJiYKKwkgICAgYmxvY2sgPCBFWFQyX0dST1VQX0lOT0RFX1RBQkxFKGZzLT5nZFtncm91cF0pICsgZnMtPmlub2RlYmxvY2tzKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2Jsb2NrX3JlbG9jYXRvci5jIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9leHQyL2V4dDJfYmxvY2tfcmVsb2NhdG9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY3MWQxMAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2Jsb2NrX3JlbG9jYXRvci5jCkBAIC0wLDAgKzEsOTI0IEBACisvKgorICAgIGV4dDJfYmxvY2tfcmVsb2NhdG9yLmMgLS0gZXh0MiBibG9jayByZWxvY2F0b3IKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworI2lmbmRlZiBESVNDT1ZFUl9PTkxZCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgImV4dDIuaCIKKworCisvKiBUaGlzIHN0cnVjdCBkZXNjcmliZXMgYSBzaW5nbGUgYmxvY2sgdGhhdCB3aWxsIGJlIHJlbG9jYXRlZC4gIFRoZQorICogYmxvY2sncyBvcmlnaW5hbCBsb2NhdGlvbiBpcyAibnVtIiwgYW5kIGl0cyBuZXcgbG9jYXRpb24gaXMgImRlc3QiLgorICogVGhlIGJsb2NrIGlzIHByZXN1bWVibHkgcmVmZXJyZWQgdG8gYnkgc29tZSBvdGhlciBibG9jayBpbiB0aGUgZmlsZQorICogc3lzdGVtLCB3aGljaCBpcyByZWNvcmRlZCBhcyAicmVmYmxvY2siLiAgKE9ubHkgb25lIHJlZmVyZW5jZSB0bworICogdGhlIGJsb2NrIGlzIGFsbG93ZWQgYnkgdGhlIGJsb2NrIHJlbG9jYXRvci4pICAicmVmb2Zmc2V0IiBkZXNjcmliZXMKKyAqIHRoZSBsb2NhdGlvbiB3aXRoaW4gdGhlIHJlZmJsb2NrIGluIHdoaWNoIHRoZSBibG9jayBpcyByZWZlcmVuY2VkLgorICogImlzaW5kaXJlY3QiIGlzIDAgZm9yIGRpcmVjdCwgMSBmb3Igc2luZ2xlLWluZGlyZWN0LCAyIGZvcgorICogZG91YmxlLWluZGlyZWN0LCBldGMuCisgKgorICogVGhlIGFsZ29yaXRobXMgaW4gdGhlIGZpbGUgZmlsbCB0aGUgZW50cmllcyBvZiB0aGlzIHN0cnVjdCBpbiB0aGlzIG9yZGVyOgorICogbnVtLCByZWZibG9jay9yZWZvZmZzZXQvaXNpbmRpcmVjdGJsb2NrLCBkZXN0LgorICovCitzdHJ1Y3QgZXh0Ml9ibG9ja19lbnRyeQoreworCWJsa190CQludW07CisJYmxrX3QJCWRlc3Q7CisJYmxrX3QJCXJlZmJsb2NrOworCXVuc2lnbmVkCXJlZm9mZnNldDoxNjsKKwl1bnNpZ25lZAlpc2luZGlyZWN0YmxvY2s6MTY7Cit9OworCisvKiBUaGlzIHN0cnVjdCBjb250YWlucyBhbGwgZGF0YSBzdHJ1Y3R1cmVzIHJlbGV2YW50IHRvIHRoZSBibG9jayByZWxvY2F0b3IuCisgKiAJLSBuZXdhbGxvY29mZnNldCBpcyB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgc3RhcnQgb2YgYSBibG9jayBncm91cCwKKyAqIAlhbmQgdGhlIGZpcnN0IGRhdGEgYmxvY2sgaW4gdGhlIGdyb3VwLiAgVGhpcyBjYW4gY2hhbmdlIHdoZW4gYQorICogCWZpbGVzeXN0ZW0gaXMgcmVzaXplZCwgYmVjYXVzZSB0aGUgc2l6ZSBvZiB0aGUgZ3JvdXAgZGVzY3JpcHRvcnMgaXMKKyAqIAlwcm9wb3J0aW9uYWwgdG8gdGhlIHNpemUgb2YgdGhlIGZpbGVzeXN0ZW0uCisgKiAKKyAqIAktIGFsbG9jZW50cmllcyBpcyB0aGUgc2l6ZSBvZiB0aGUgImJsb2NrIiBhcnJheS4gIEl0IGlzIGEgdHVuZWFibGUKKyAqIAlwYXJhbWV0ZXIgdGhhdCBkZXRlcm1pbmVzIGhvdyBtYW55IGJsb2NrcyBjYW4gYmUgbW92ZWQgaW4gZWFjaAorICogCXBhc3MuCisgKiAKKyAqIAktIHVzZWRlbnRyaWVzIHNheXMgaG93IG1hbnkgZW50cmllcyBvZiB0aGUgImJsb2NrIiBhcnJheSBoYXZlIGJlZW4KKyAqIAl1c2VkLiAgVGhhdCBpcywgaG93IG1hbnkgYmxvY2tzIGhhdmUgYmVlbiBzY2hlZHVsZWQgc28gZmFyIHRvCisgKiAJYmUgbW92ZWQuCisgKgorICogCS0gcmVzb2x2ZWRlbnRyaWVzIGlzIHRoZSBudW1iZXIgb2YgYmxvY2tzIHdob3NlIHJlZmVyZW5jaW5nIGJsb2NrCisgKiAJaGFzIGJlZW4gZm91bmQgYW5kIHJlY29yZGVkIGluIGJsb2NrWy5dLT5yZWZibG9jaywgZXRjLgorICoKKyAqIAktIGJsb2NrIGlzIGFuIGFycmF5IHRoYXQgcmVjb3JkcyB3aGljaCBibG9ja3MgbmVlZCB0byBiZSBtb3ZlZCwgYW5kCisgKiAJd2hlcmUgdGhleSB3aWxsIGJlIG1vdmVkIHRvLCBldGMuICBBdCBzb21lIHBvaW50IGluIHRoZSBhbGdvcml0aG0sIHRoaXMKKyAqIAlhcnJheSBnZXRzIHNvcnRlZCAoZ3JlcCBmb3IgcXNvcnQhKSBieSBpbmRpcmVjdG5lc3MuCisgKgorICogCS0gc3RhcnQ6IGVhY2ggZW50cnkgaW4gdGhpcyBhcnJheSBjb3JyZXNwb25kcyB0byBhIGxldmVsIG9mCisgKiAJaW5kaXJlY3RuZXNzICgwLTMpLiAgRWFjaCBsZXZlbCBoYXMgdHdvIGl0ZW1zOiBkc3QgYW5kIG51bS4gICJudW0iCisgKiAJaXMgdGhlIG51bWJlciBvZiBibG9ja3MgaW5zaWRlICJibG9jayIgb2YgdGhhdCBsZXZlbCBvZiBpbmRpcmVjdG5lc3MuCisgKiAJQWZ0ZXIgZG9zY2FuKCkgaXMgZmluaXNoZWQsIGFuZCB0aGUgbGV2ZWwgb2YgaW5kaXJlY3RuZXNzIG9mIGVhY2gKKyAqIAlibG9jayBpcyBrbm93biwgImJsb2NrIiBpcyBzb3J0ZWQgKHNlZSBhYm92ZSkuICBUaGUgImRzdCIgcG9pbnRlcgorICogCWlzIGEgcG9pbnRlciBpbnNpZGUgImJsb2NrIiB0aGF0IGluZGljYXRlcyB0aGUgc3RhcnQgb2YgdGhlIHBvcnRpb24KKyAqIAlvZiB0aGUgYXJyYXkgY29udGFpbmcgYmxvY2tzIG9mIHRoYXQgbGV2ZWwgb2YgaW5kaXJlY3RuZXNzLgorICovCitzdHJ1Y3QgZXh0Ml9ibG9ja19yZWxvY2F0b3Jfc3RhdGUKK3sKKwlibGtfdAkJCSBuZXdhbGxvY29mZnNldDsKKwlibGtfdAkJCSBhbGxvY2VudHJpZXM7CisJYmxrX3QJCQkgdXNlZGVudHJpZXM7CisJYmxrX3QJCQkgcmVzb2x2ZWRlbnRyaWVzOworCXN0cnVjdCBleHQyX2Jsb2NrX2VudHJ5ICpibG9jazsKKworCXN0cnVjdCB7CisJCXN0cnVjdCBleHQyX2Jsb2NrX2VudHJ5ICpkc3Q7CisJCWludAkJCSBudW07CisJfSBzdGFydFs0XTsKK307CisKKworCitzdGF0aWMgaW50IGNvbXBhcmVfYmxvY2tfZW50cmllcyhjb25zdCB2b2lkICp4MCwgY29uc3Qgdm9pZCAqeDEpCit7CisJY29uc3Qgc3RydWN0IGV4dDJfYmxvY2tfZW50cnkgKmIwOworCWNvbnN0IHN0cnVjdCBleHQyX2Jsb2NrX2VudHJ5ICpiMTsKKworCWIwID0gKGNvbnN0IHN0cnVjdCBleHQyX2Jsb2NrX2VudHJ5ICopeDA7CisJYjEgPSAoY29uc3Qgc3RydWN0IGV4dDJfYmxvY2tfZW50cnkgKil4MTsKKworCWlmIChiMC0+bnVtIDwgYjEtPm51bSkKKwkJcmV0dXJuIC0xOworCisJaWYgKGIwLT5udW0gPiBiMS0+bnVtKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvbXBhcmVfYmxvY2tfZW50cmllc19pbmQoY29uc3Qgdm9pZCAqeDAsIGNvbnN0IHZvaWQgKngxKQoreworCWNvbnN0IHN0cnVjdCBleHQyX2Jsb2NrX2VudHJ5ICpiMDsKKwljb25zdCBzdHJ1Y3QgZXh0Ml9ibG9ja19lbnRyeSAqYjE7CisKKwliMCA9IChjb25zdCBzdHJ1Y3QgZXh0Ml9ibG9ja19lbnRyeSAqKXgwOworCWIxID0gKGNvbnN0IHN0cnVjdCBleHQyX2Jsb2NrX2VudHJ5ICopeDE7CisKKwlpZiAoYjAtPmlzaW5kaXJlY3RibG9jayA+IGIxLT5pc2luZGlyZWN0YmxvY2spCisJCXJldHVybiAtMTsKKworCWlmIChiMC0+aXNpbmRpcmVjdGJsb2NrIDwgYjEtPmlzaW5kaXJlY3RibG9jaykKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjb21wYXJlX2Jsb2NrX2VudHJpZXNfcmVmKGNvbnN0IHZvaWQgKngwLCBjb25zdCB2b2lkICp4MSkKK3sKKwljb25zdCBzdHJ1Y3QgZXh0Ml9ibG9ja19lbnRyeSAqYjA7CisJY29uc3Qgc3RydWN0IGV4dDJfYmxvY2tfZW50cnkgKmIxOworCisJYjAgPSAoY29uc3Qgc3RydWN0IGV4dDJfYmxvY2tfZW50cnkgKil4MDsKKwliMSA9IChjb25zdCBzdHJ1Y3QgZXh0Ml9ibG9ja19lbnRyeSAqKXgxOworCisJaWYgKGIwLT5yZWZibG9jayA8IGIxLT5yZWZibG9jaykKKwkJcmV0dXJuIC0xOworCisJaWYgKGIwLT5yZWZibG9jayA+IGIxLT5yZWZibG9jaykKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGV4dDJfYmxvY2tfZW50cnkgKmZpbmRpdChzdHJ1Y3QgZXh0Ml9ibG9ja19yZWxvY2F0b3Jfc3RhdGUgKnN0YXRlLCBibGtfdCBibG9jaykKK3sKKwlpbnQJCQkgbWluOworCWludAkJCSBtYXg7CisJc3RydWN0IGV4dDJfYmxvY2tfZW50cnkgKnJldHY7CisJaW50CQkJIHQ7CisJYmxrX3QJCQkgdHZhbDsKKworCW1heCA9IHN0YXRlLT51c2VkZW50cmllcyAtIDE7CisJbWluID0gMDsKKwlyZXR2ID0gTlVMTDsKKworIHJlcGVhdDoKKwlpZiAobWluID4gbWF4KQorCQlnb3RvIG91dDsKKworCXQgPSAobWluICsgbWF4KSA+PiAxOworCXR2YWwgPSBzdGF0ZS0+YmxvY2tbdF0ubnVtOworCisJaWYgKHR2YWwgPiBibG9jaykKKwkJbWF4ID0gdCAtIDE7CisKKwlpZiAodHZhbCA8IGJsb2NrKQorCQltaW4gPSB0ICsgMTsKKworCWlmICh0dmFsICE9IGJsb2NrKQorCQlnb3RvIHJlcGVhdDsKKworCXJldHYgPSAmc3RhdGUtPmJsb2NrW3RdOworCisgb3V0OgorCXJldHVybiByZXR2OworfQorCisvKiBUaGlzIGZ1bmN0aW9uIGFkZHMgcmVjb3JkcyBhIHJlZmVyZW5jZSB0byBhIGJsb2NrICgiYmxrIiksIGlmIHRoYXQKKyAqIGJsb2NrIGlzIHNjaGVkdWxlZCB0byBiZSBtb3ZlZC4KKyAqLworc3RhdGljIGludCBkb2Jsb2NrKHN0cnVjdCBleHQyX2ZzICpmcywKKwkJICAgc3RydWN0IGV4dDJfYmxvY2tfcmVsb2NhdG9yX3N0YXRlICpzdGF0ZSwKKwkJICAgYmxrX3QgYmxrLAorCQkgICBibGtfdCByZWZibG9jaywKKwkJICAgb2ZmX3QgcmVmb2Zmc2V0LAorCQkgICBpbnQgaW5kaXJlY3QpCit7CisJc3RydWN0IGV4dDJfYmxvY2tfZW50cnkgKmVudDsKKworCWlmICgoZW50ID0gZmluZGl0KHN0YXRlLCBibGspKSA9PSBOVUxMKQorCQlyZXR1cm4gMTsKKworCWlmIChlbnQtPnJlZmJsb2NrKQorCXsKKwkJcGVkX2V4Y2VwdGlvbl90aHJvdyAoUEVEX0VYQ0VQVElPTl9FUlJPUiwgUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQlfKCJDcm9zcy1saW5rZWQgYmxvY2tzIGZvdW5kISAgQmV0dGVyIGdvIHJ1biBlMmZzY2sgIgorCQkJICAiZmlyc3QhIikpOworCQlyZXR1cm4gMDsKKwl9CisKKwllbnQtPnJlZmJsb2NrID0gcmVmYmxvY2s7CisJZW50LT5yZWZvZmZzZXQgPSByZWZvZmZzZXQ7CisJZW50LT5pc2luZGlyZWN0YmxvY2sgPSBpbmRpcmVjdDsKKworCXN0YXRlLT5yZXNvbHZlZGVudHJpZXMrKzsKKwlzdGF0ZS0+c3RhcnRbaW5kaXJlY3RdLm51bSsrOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZG9pbmRibG9jayhzdHJ1Y3QgZXh0Ml9mcyAqZnMsCisJCSAgICAgIHN0cnVjdCBleHQyX2Jsb2NrX3JlbG9jYXRvcl9zdGF0ZSAqc3RhdGUsCisJCSAgICAgIGJsa190IGJsaywKKwkJICAgICAgYmxrX3QgcmVmYmxvY2ssCisJCSAgICAgIG9mZl90IHJlZm9mZnNldCkKK3sKKwlzdHJ1Y3QgZXh0Ml9idWZmZXJfaGVhZCAqYmg7CisJaW50CQkJIGk7CisJdWludDMyX3QJCSp1cHRyOworCisJaWYgKCFkb2Jsb2NrKGZzLCBzdGF0ZSwgYmxrLCByZWZibG9jaywgcmVmb2Zmc2V0LCAxKSkKKwkJcmV0dXJuIDA7CisKKwliaCA9IGV4dDJfYnJlYWQoZnMsIGJsayk7CisJaWYgKCFiaCkKKwkJcmV0dXJuIDA7CisJdXB0ciA9ICh1aW50MzJfdCAqKWJoLT5kYXRhOworCisJZm9yIChpPTA7aTwoZnMtPmJsb2Nrc2l6ZSA+PiAyKTtpKyspCisJCWlmICh1cHRyW2ldKQorCQkJaWYgKCFkb2Jsb2NrKGZzLCBzdGF0ZSwgUEVEX0xFMzJfVE9fQ1BVKHVwdHJbaV0pLCBibGssCisJCQkJICAgICBpPDwyLCAwKSkKKwkJCQlyZXR1cm4gMDsKKworCWlmICghZXh0Ml9icmVsc2UoYmgsIDApKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGRvZGluZGJsb2NrKHN0cnVjdCBleHQyX2ZzICpmcywKKwkJICAgICAgIHN0cnVjdCBleHQyX2Jsb2NrX3JlbG9jYXRvcl9zdGF0ZSAqc3RhdGUsCisJCSAgICAgICBibGtfdCBibGssCisJCSAgICAgICBibGtfdCByZWZibG9jaywKKwkJICAgICAgIG9mZl90IHJlZm9mZnNldCkKK3sKKwlzdHJ1Y3QgZXh0Ml9idWZmZXJfaGVhZCAqYmg7CisJaW50CQkJIGk7CisJdWludDMyX3QJCSp1cHRyOworCisJaWYgKCFkb2Jsb2NrKGZzLCBzdGF0ZSwgYmxrLCByZWZibG9jaywgcmVmb2Zmc2V0LCAyKSkKKwkJcmV0dXJuIDA7CisKKwliaCA9IGV4dDJfYnJlYWQoZnMsIGJsayk7CisJaWYgKCFiaCkKKwkJcmV0dXJuIDA7CisJdXB0ciA9ICh1aW50MzJfdCAqKWJoLT5kYXRhOworCisJZm9yIChpPTA7aTwoZnMtPmJsb2Nrc2l6ZSA+PiAyKTtpKyspCisJCWlmICh1cHRyW2ldKQorCQkJaWYgKCFkb2luZGJsb2NrKGZzLCBzdGF0ZSwgUEVEX0xFMzJfVE9fQ1BVKHVwdHJbaV0pLAorCQkJCQlibGssIGk8PDIpKQorCQkJCXJldHVybiAwOworCisJaWYgKCFleHQyX2JyZWxzZShiaCwgMCkpCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZG90aW5kYmxvY2soc3RydWN0IGV4dDJfZnMgKmZzLAorCQkgICAgICAgc3RydWN0IGV4dDJfYmxvY2tfcmVsb2NhdG9yX3N0YXRlICpzdGF0ZSwKKwkJICAgICAgIGJsa190IGJsaywKKwkJICAgICAgIGJsa190IHJlZmJsb2NrLAorCQkgICAgICAgb2ZmX3QgcmVmb2Zmc2V0KQoreworCXN0cnVjdCBleHQyX2J1ZmZlcl9oZWFkICpiaDsKKwlpbnQJCQkgaTsKKwl1aW50MzJfdAkJKnVwdHI7CisKKwlpZiAoIWRvYmxvY2soZnMsIHN0YXRlLCBibGssIHJlZmJsb2NrLCByZWZvZmZzZXQsIDMpKQorCQlyZXR1cm4gMDsKKworCWJoID0gZXh0Ml9icmVhZChmcywgYmxrKTsKKwlpZiAoIWJoKQorCQlyZXR1cm4gMDsKKwl1cHRyID0gKHVpbnQzMl90ICopYmgtPmRhdGE7CisKKwlmb3IgKGk9MDtpPChmcy0+YmxvY2tzaXplID4+IDIpO2krKykKKwkJaWYgKHVwdHJbaV0pCisJCQlpZiAoIWRvZGluZGJsb2NrKGZzLCBzdGF0ZSwgUEVEX0xFMzJfVE9fQ1BVKHVwdHJbaV0pLAorCQkJCQkgYmxrLCBpPDwyKSkKKwkJCQlyZXR1cm4gMDsKKworCWlmICghZXh0Ml9icmVsc2UoYmgsIDApKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCisKKy8qIFRoaXMgZnVuY3Rpb24gcmVjb3JkcyBhbnkgYmxvY2sgcmVmZXJlbmNlcyBmcm9tIGFuIGlub2RlIHRvIGJsb2NrcyB0aGF0IGFyZQorICogc2NoZWR1bGVkIHRvIGJlIG1vdmVkLgorICovCitzdGF0aWMgaW50IGRvaW5vZGUoc3RydWN0IGV4dDJfZnMgKmZzLCBzdHJ1Y3QgZXh0Ml9ibG9ja19yZWxvY2F0b3Jfc3RhdGUgKnN0YXRlLCBpbnQgaW5vZGUpCit7CisJc3RydWN0IGV4dDJfaW5vZGUgYnVmOworCisJaWYgKCFleHQyX3JlYWRfaW5vZGUoZnMsIGlub2RlLCAmYnVmKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoRVhUMl9JTk9ERV9CTE9DS1MoYnVmKSkKKwl7CisJCWJsa190IGJsazsKKwkJaW50ICAgaTsKKwkJb2ZmX3QgaW5vZGVvZmZzZXQ7CisJCWJsa190IGlub2RlYmxvY2s7CisKKwkJaW5vZGVvZmZzZXQgPSBleHQyX2dldF9pbm9kZV9vZmZzZXQoZnMsIGlub2RlLCAmaW5vZGVibG9jayk7CisKKwkJLyogZG8gSHVyZCBibG9jaywgaWYgdGhlcmUgaXMgb25lLi4uICovCisJCWlmIChFWFQyX1NVUEVSX0NSRUFUT1JfT1MoZnMtPnNiKSA9PSBFWFQyX09TX0hVUkQKKwkJICAgICYmIEVYVDJfSU5PREVfVFJBTlNMQVRPUihidWYpKSB7CisJCQlpZiAoIWRvYmxvY2soZnMsCisJCQkJICAgICBzdGF0ZSwKKwkJCQkgICAgIEVYVDJfSU5PREVfVFJBTlNMQVRPUihidWYpLAorCQkJCSAgICAgaW5vZGVibG9jaywKKwkJCQkgICAgIGlub2Rlb2Zmc2V0ICsgb2Zmc2V0b2Yoc3RydWN0IGV4dDJfaW5vZGUsCisJCQkJCQlvc2QxLmh1cmQxLmhfaV90cmFuc2xhdG9yKSwKKwkJCQkgICAgIDApKQorCQkJCXJldHVybiAwOworCQl9CisKKwkJZm9yIChpPTA7aTxFWFQyX05ESVJfQkxPQ0tTO2krKykKKwkJCWlmICgoYmxrID0gRVhUMl9JTk9ERV9CTE9DSyhidWYsIGkpKSAhPSAwKQorCQkJCWlmICghZG9ibG9jayhmcywKKwkJCQkJICAgICBzdGF0ZSwKKwkJCQkJICAgICBibGssCisJCQkJCSAgICAgaW5vZGVibG9jaywKKwkJCQkJICAgICBpbm9kZW9mZnNldCArIG9mZnNldG9mKHN0cnVjdCBleHQyX2lub2RlLCBpX2Jsb2NrW2ldKSwKKwkJCQkJICAgICAwKSkKKwkJCQkJcmV0dXJuIDA7CisKKwkJaWYgKChibGsgPSBFWFQyX0lOT0RFX0JMT0NLKGJ1ZiwgRVhUMl9JTkRfQkxPQ0spKSAhPSAwKQorCQkJaWYgKCFkb2luZGJsb2NrKGZzLAorCQkJCQlzdGF0ZSwKKwkJCQkJYmxrLAorCQkJCQlpbm9kZWJsb2NrLAorCQkJCQlpbm9kZW9mZnNldCArIG9mZnNldG9mKHN0cnVjdCBleHQyX2lub2RlLCBpX2Jsb2NrW0VYVDJfSU5EX0JMT0NLXSkpKQorCQkJCXJldHVybiAwOworCisJCWlmICgoYmxrID0gRVhUMl9JTk9ERV9CTE9DSyhidWYsIEVYVDJfRElORF9CTE9DSykpICE9IDApCisJCQlpZiAoIWRvZGluZGJsb2NrKGZzLAorCQkJCQkgc3RhdGUsCisJCQkJCSBibGssCisJCQkJCSBpbm9kZWJsb2NrLAorCQkJCQkgaW5vZGVvZmZzZXQgKyBvZmZzZXRvZihzdHJ1Y3QgZXh0Ml9pbm9kZSwgaV9ibG9ja1tFWFQyX0RJTkRfQkxPQ0tdKSkpCisJCQkJcmV0dXJuIDA7CisKKwkJaWYgKChibGsgPSBFWFQyX0lOT0RFX0JMT0NLKGJ1ZiwgRVhUMl9USU5EX0JMT0NLKSkgIT0gMCkKKwkJCWlmICghZG90aW5kYmxvY2soZnMsCisJCQkJCSBzdGF0ZSwKKwkJCQkJIGJsaywKKwkJCQkJIGlub2RlYmxvY2ssCisJCQkJCSBpbm9kZW9mZnNldCArIG9mZnNldG9mKHN0cnVjdCBleHQyX2lub2RlLCBpX2Jsb2NrW0VYVDJfVElORF9CTE9DS10pKSkKKwkJCQlyZXR1cm4gMDsKKworCX0KKworCXJldHVybiAxOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIHNjYW5zIHRoZSBlbnRpcmUgZmlsZXN5c3RlbSwgdG8gZmluZCBhbGwgcmVmZXJlbmNlcyB0byBibG9ja3MKKyAqIHRoYXQgYXJlIHNjaGVkdWxlZCB0byBiZSBtb3ZlZC4KKyAqLworc3RhdGljIGludCBkb3NjYW4oc3RydWN0IGV4dDJfZnMgKmZzLCBzdHJ1Y3QgZXh0Ml9ibG9ja19yZWxvY2F0b3Jfc3RhdGUgKnN0YXRlKQoreworCWludCBpOworCisJc3RhdGUtPnN0YXJ0WzBdLm51bSA9IDA7CisJc3RhdGUtPnN0YXJ0WzFdLm51bSA9IDA7CisJc3RhdGUtPnN0YXJ0WzJdLm51bSA9IDA7CisJc3RhdGUtPnN0YXJ0WzNdLm51bSA9IDA7CisKKwlmb3IgKGk9MDtpPGZzLT5udW1ncm91cHM7aSsrKQorCXsKKwkJc3RydWN0IGV4dDJfYnVmZmVyX2hlYWQgKmJoOworCQl1bnNpZ25lZCBpbnQJCSBqOworCQlpbnQJCQkgb2Zmc2V0OworCisJCWlmIChmcy0+b3B0X3ZlcmJvc2UpCisJCXsKKwkJCWZwcmludGYoc3RkZXJyLCAiIHNjYW5uaW5nIGdyb3VwICVpLi4uLiAiLCBpKTsKKwkJCWZmbHVzaChzdGRlcnIpOworCQl9CisKKwkJYmggPSBleHQyX2JyZWFkKGZzLCBFWFQyX0dST1VQX0lOT0RFX0JJVE1BUChmcy0+Z2RbaV0pKTsKKwkJaWYgKCFiaCkKKwkJCXJldHVybiAwOworCQlvZmZzZXQgPSBpICogRVhUMl9TVVBFUl9JTk9ERVNfUEVSX0dST1VQKGZzLT5zYikgKyAxOworCisJCWZvciAoaj0wO2o8RVhUMl9TVVBFUl9JTk9ERVNfUEVSX0dST1VQKGZzLT5zYik7aisrKQorCQkJaWYgKGJoLT5kYXRhW2o+PjNdICYgX2JpdG1hcFtqJjddKQorCQkJeworCQkJCWlmICghZG9pbm9kZShmcywgc3RhdGUsIG9mZnNldCArIGopKQorCQkJCXsKKwkJCQkJZXh0Ml9icmVsc2UoYmgsIDApOworCQkJCQlyZXR1cm4gMDsKKwkJCQl9CisKKwkJCQlpZiAoc3RhdGUtPnJlc29sdmVkZW50cmllcyA9PSBzdGF0ZS0+dXNlZGVudHJpZXMpCisJCQkJCWJyZWFrOworCQkJfQorCisJCWV4dDJfYnJlbHNlKGJoLCAwKTsKKworCQlpZiAoZnMtPm9wdF92ZXJib3NlKQorCQl7CisJCQlmcHJpbnRmKHN0ZGVyciwgIiVpLyVpIGJsb2NrcyByZXNvbHZlZFxyIiwKKwkJCQlzdGF0ZS0+cmVzb2x2ZWRlbnRyaWVzLAorCQkJCXN0YXRlLT51c2VkZW50cmllcyk7CisJCQlmZmx1c2goc3RkZXJyKTsKKwkJfQorCisJCWlmIChzdGF0ZS0+cmVzb2x2ZWRlbnRyaWVzID09IHN0YXRlLT51c2VkZW50cmllcykKKwkJCWJyZWFrOworCX0KKworCWlmIChmcy0+b3B0X3ZlcmJvc2UpCisgICAgICAgICAgICAgICAgZnB1dGMoJ1xuJywgc3RkZXJyKTsKKworCXN0YXRlLT5zdGFydFszXS5kc3QgPSBzdGF0ZS0+YmxvY2s7CisJc3RhdGUtPnN0YXJ0WzJdLmRzdCA9IHN0YXRlLT5zdGFydFszXS5kc3QgKyBzdGF0ZS0+c3RhcnRbM10ubnVtOworCXN0YXRlLT5zdGFydFsxXS5kc3QgPSBzdGF0ZS0+c3RhcnRbMl0uZHN0ICsgc3RhdGUtPnN0YXJ0WzJdLm51bTsKKwlzdGF0ZS0+c3RhcnRbMF0uZHN0ID0gc3RhdGUtPnN0YXJ0WzFdLmRzdCArIHN0YXRlLT5zdGFydFsxXS5udW07CisKKwlyZXR1cm4gMTsKK30KKworCisKKworCitzdGF0aWMgaW50IGV4dDJfYmxvY2tfcmVsb2NhdG9yX2NvcHkoc3RydWN0IGV4dDJfZnMgKmZzLCBzdHJ1Y3QgZXh0Ml9ibG9ja19yZWxvY2F0b3Jfc3RhdGUgKnN0YXRlKQoreworCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKKworCXBlZF9leGNlcHRpb25fZmV0Y2hfYWxsKCk7CisJYnVmID0gKHVuc2lnbmVkIGNoYXIgKikgcGVkX21hbGxvYyhNQVhDT05UIDw8IGZzLT5sb2dzaXplKTsKKwlpZiAoYnVmKQorCXsKKwkJaW50IG51bTsKKwkJaW50IG51bWxlZnQ7CisJCXN0cnVjdCBleHQyX2Jsb2NrX2VudHJ5ICpwdHI7CisKKwkJcGVkX2V4Y2VwdGlvbl9sZWF2ZV9hbGwoKTsKKworCQludW1sZWZ0ID0gc3RhdGUtPnVzZWRlbnRyaWVzOworCQlwdHIgPSBzdGF0ZS0+YmxvY2s7CisJCXdoaWxlIChudW1sZWZ0KQorCQl7CisJCQludW0gPSBQRURfTUlOKG51bWxlZnQsIE1BWENPTlQpOworCQkJd2hpbGUgKG51bSAhPSAxKQorCQkJeworCQkJCWlmIChwdHJbMF0ubnVtICsgbnVtLTEgPT0gcHRyW251bS0xXS5udW0gJiYKKwkJCQkgICAgcHRyWzBdLmRlc3QgKyBudW0tMSA9PSBwdHJbbnVtLTFdLmRlc3QpCisJCQkJCWJyZWFrOworCisJCQkJbnVtID4+PSAxOworCQkJfQorCisJCQlpZiAoIWV4dDJfYmNhY2hlX2ZsdXNoX3JhbmdlKGZzLCBwdHJbMF0ubnVtLCBudW0pKQorCQkJCWdvdG8gZXJyb3JfZnJlZV9idWY7CisJCQlpZiAoIWV4dDJfYmNhY2hlX2ZsdXNoX3JhbmdlKGZzLCBwdHJbMF0uZGVzdCwgbnVtKSkKKwkJCQlnb3RvIGVycm9yX2ZyZWVfYnVmOworCisJCQlpZiAoIWV4dDJfcmVhZF9ibG9ja3MoZnMsIGJ1ZiwgcHRyWzBdLm51bSwgbnVtKSkKKwkJCQlnb3RvIGVycm9yX2ZyZWVfYnVmOworCQkJaWYgKCFleHQyX3dyaXRlX2Jsb2NrcyhmcywgYnVmLCBwdHJbMF0uZGVzdCwgbnVtKSkKKwkJCQlnb3RvIGVycm9yX2ZyZWVfYnVmOworCisJCQlwdHIgKz0gbnVtOworCQkJbnVtbGVmdCAtPSBudW07CisKKwkJCWlmIChmcy0+b3B0X3ZlcmJvc2UpCisJCQl7CisJCQkJZnByaW50ZihzdGRlcnIsICJjb3BpZWQgJWkvJWkgYmxvY2tzXHIiLAorCQkJCQlzdGF0ZS0+dXNlZGVudHJpZXMgLSBudW1sZWZ0LAorCQkJCQlzdGF0ZS0+dXNlZGVudHJpZXMpOworCQkJCWZmbHVzaChzdGRlcnIpOworCQkJfQorCQl9CisKKwkJcGVkX2ZyZWUoYnVmKTsKKworCQlpZiAoZnMtPm9wdF9zYWZlKQorCQkJZXh0Ml9zeW5jKGZzKTsKKworCQlpZiAoZnMtPm9wdF92ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgZnB1dGMoJ1xuJywgc3RkZXJyKTsKKwl9CisJZWxzZQorCXsKKwkJYmxrX3QgaTsKKworCQlwZWRfZXhjZXB0aW9uX2NhdGNoKCk7CisJCXBlZF9leGNlcHRpb25fbGVhdmVfYWxsKCk7CisKKwkJZm9yIChpPTA7aTxzdGF0ZS0+dXNlZGVudHJpZXM7aSsrKQorCQl7CisJCQlzdHJ1Y3QgZXh0Ml9ibG9ja19lbnRyeSAqYmxvY2s7CisKKwkJCWJsb2NrID0gJnN0YXRlLT5ibG9ja1tpXTsKKwkJCWlmICghZXh0Ml9jb3B5X2Jsb2NrKGZzLCBibG9jay0+bnVtLCBibG9jay0+ZGVzdCkpCisJCQkJZ290byBlcnJvcjsKKwkJfQorCX0KKworCXJldHVybiAxOworCitlcnJvcl9mcmVlX2J1ZjoKKwlwZWRfZnJlZShidWYpOworZXJyb3I6CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZXh0Ml9ibG9ja19yZWxvY2F0b3JfcmVmKHN0cnVjdCBleHQyX2ZzICpmcywgc3RydWN0IGV4dDJfYmxvY2tfcmVsb2NhdG9yX3N0YXRlICpzdGF0ZSwgc3RydWN0IGV4dDJfYmxvY2tfZW50cnkgKmJsb2NrKQoreworCXN0cnVjdCBleHQyX2J1ZmZlcl9oZWFkCSpiaDsKKwlzdGF0aWMgaW50IG51bWVycm9ycyA9IDA7CisKKwlpZiAoIShibG9jay0+cmVmYmxvY2sgfHwgYmxvY2stPnJlZm9mZnNldCkpCisJeworCQlwZWRfZXhjZXB0aW9uX3Rocm93IChQRURfRVhDRVBUSU9OX0JVRywgUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQkJICAgICBfKCJCbG9jayAlaSBoYXMgbm8gcmVmZXJlbmNlPyAgV2VpcmQuIiksCisJCQkJICAgICBibG9jay0+bnVtKTsKKwkJcmV0dXJuIDA7CisJfQorCisJYmggPSBleHQyX2JyZWFkKGZzLCBibG9jay0+cmVmYmxvY2spOworCWlmICghYmgpCisJCXJldHVybiAwOworCisJaWYgKGZzLT5vcHRfZGVidWcpCisJeworCQlpZiAoUEVEX0xFMzJfVE9fQ1BVKCooKHVpbnQzMl90ICopKGJoLT5kYXRhICsgYmxvY2stPnJlZm9mZnNldCkpKQorCQkJCSE9IGJsb2NrLT5udW0pIHsKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCSJibG9jayAlaSByZWYgZXJyb3IhICgtPiVpIHslaSwgJWl9KVxuIiwKKwkJCQlibG9jay0+bnVtLAorCQkJCWJsb2NrLT5kZXN0LAorCQkJCWJsb2NrLT5yZWZibG9jaywKKwkJCQlibG9jay0+cmVmb2Zmc2V0KTsKKwkJCWV4dDJfYnJlbHNlKGJoLCAwKTsKKworCQkJaWYgKG51bWVycm9ycysrIDwgNCkKKwkJCQlyZXR1cm4gMTsKKworCQkJZnB1dHMoImFsbCBpcyBub3Qgd2VsbCFcbiIsIHN0ZGVycik7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCSooKHVpbnQzMl90ICopKGJoLT5kYXRhICsgYmxvY2stPnJlZm9mZnNldCkpCisJCT0gUEVEX0xFMzJfVE9fQ1BVKGJsb2NrLT5kZXN0KTsKKwliaC0+ZGlydHkgPSAxOworCWV4dDJfYnJlbHNlKGJoLCAwKTsKKworCWV4dDJfc2V0X2Jsb2NrX3N0YXRlKGZzLCBibG9jay0+ZGVzdCwgMSwgMSk7CisJZXh0Ml9zZXRfYmxvY2tfc3RhdGUoZnMsIGJsb2NrLT5udW0sIDAsIDEpOworCisJaWYgKGJsb2NrLT5pc2luZGlyZWN0YmxvY2spCisJeworCQlzdHJ1Y3QgZXh0Ml9ibG9ja19lbnRyeSAqZHN0OworCQlpbnQJCQkgaTsKKwkJaW50CQkJIG51bTsKKworCQlkc3QgPSBzdGF0ZS0+c3RhcnRbYmxvY2stPmlzaW5kaXJlY3RibG9jay0xXS5kc3Q7CisJCW51bSA9IHN0YXRlLT5zdGFydFtibG9jay0+aXNpbmRpcmVjdGJsb2NrLTFdLm51bTsKKworCQlmb3IgKGk9MDtpPG51bTtpKyspCisJCQlpZiAoZHN0W2ldLnJlZmJsb2NrID09IGJsb2NrLT5udW0pCisJCQkJZHN0W2ldLnJlZmJsb2NrID0gYmxvY2stPmRlc3Q7CisJfQorCisJcmV0dXJuIDE7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIG5ldyBsb2NhdGlvbnMgZm9yIGJsb2NrcyB0aGF0IGFyZSBzY2hlZHVsZWQgdG8gbW92ZQorICogKGluc2lkZSBzdGF0ZS0+YmxvY2tzKS4KKyAqCisgKiBGSVhNRTogZG9lc24ndCBzZWVtIHRvIGhhbmRsZSBzcGFyc2UgYmxvY2sgZ3JvdXBzLiAgVGhhdCBpcywgdGhlcmUgbWlnaHQgYmUKKyAqIHNvbWUgZnJlZSBzcGFjZSB0aGF0IGNvdWxkIGJlIGV4cGxvaXRlZCBpbiByZXNpemluZyB0aGF0IGN1cnJlbnRseSBpc24ndC4uLgorICoKKyAqIEZJWE1FOiBzaG91bGQgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGl0IGZhaWxzIHRvIGFsbG9jYXRlIGJsb2Nrcy4KKyAqLworc3RhdGljIGludCBleHQyX2Jsb2NrX3JlbG9jYXRvcl9ncmFiX2Jsb2NrcyhzdHJ1Y3QgZXh0Ml9mcyAqZnMsIHN0cnVjdCBleHQyX2Jsb2NrX3JlbG9jYXRvcl9zdGF0ZSAqc3RhdGUpCit7CisJaW50IGk7CisJYmxrX3QgcHRyOworCisJcHRyID0gMDsKKworCWZvciAoaT0wO2k8ZnMtPm51bWdyb3VwcztpKyspCisJCWlmIChFWFQyX0dST1VQX0ZSRUVfQkxPQ0tTX0NPVU5UKGZzLT5nZFtpXSkpCisJCXsKKwkJCXN0cnVjdCBleHQyX2J1ZmZlcl9oZWFkICpiaDsKKwkJCXVuc2lnbmVkIGludCBqOworCQkJaW50IG9mZnNldDsKKworCQkJYmggPSBleHQyX2JyZWFkKGZzLCBFWFQyX0dST1VQX0JMT0NLX0JJVE1BUChmcy0+Z2RbaV0pKTsKKwkJCW9mZnNldCA9IGkgKiBFWFQyX1NVUEVSX0JMT0NLU19QRVJfR1JPVVAoZnMtPnNiKQorCQkJCSArIEVYVDJfU1VQRVJfRklSU1RfREFUQV9CTE9DSyhmcy0+c2IpOworCisJCQlmb3IgKGo9c3RhdGUtPm5ld2FsbG9jb2Zmc2V0OworCQkJICAgICBqPEVYVDJfU1VQRVJfQkxPQ0tTX1BFUl9HUk9VUChmcy0+c2IpOworCQkJICAgICBqKyspCisJCQkJaWYgKCEoYmgtPmRhdGFbaj4+M10gJiBfYml0bWFwW2omN10pKQorCQkJCXsKKwkJCQkJc3RhdGUtPmJsb2NrW3B0cisrXS5kZXN0ID0gb2Zmc2V0ICsgajsKKworCQkJCQlpZiAocHRyID09IHN0YXRlLT51c2VkZW50cmllcykKKwkJCQkJeworCQkJCQkJZXh0Ml9icmVsc2UoYmgsIDApOworCQkJCQkJcmV0dXJuIDE7CisJCQkJCX0KKwkJCQl9CisKKwkJCWV4dDJfYnJlbHNlKGJoLCAwKTsKKwkJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZXh0Ml9ibG9ja19yZWxvY2F0b3JfZmx1c2goc3RydWN0IGV4dDJfZnMgKmZzLCBzdHJ1Y3QgZXh0Ml9ibG9ja19yZWxvY2F0b3Jfc3RhdGUgKnN0YXRlKQoreworCWludCBpOworCisJaWYgKCFzdGF0ZS0+dXNlZGVudHJpZXMpCisJCXJldHVybiAxOworCisJaWYgKGZzLT5vcHRfdmVyYm9zZSkKKyAgICAgICAgICAgICAgICBmcHV0cygiZXh0Ml9ibG9ja19yZWxvY2F0b3JfZmx1c2hcbiIsIHN0ZGVycik7CisKKwlpZiAoZnMtPm9wdF9kZWJ1ZykKKwl7CisJYWdhaW46CisKKwkJZm9yIChpPTA7ICh1bnNpZ25lZCBpbnQpIGkgPCBzdGF0ZS0+dXNlZGVudHJpZXMtMTsgaSsrKQorCQkJaWYgKHN0YXRlLT5ibG9ja1tpXS5udW0gPj0gc3RhdGUtPmJsb2NrW2krMV0ubnVtKQorCQkJeworCQkJCWZwdXRzKCJleHQyX2Jsb2NrX3JlbG9jYXRvcl9mbHVzaDogIgorCQkJCSAgICAgICJibG9ja3Mgbm90IGluIG9yZGVyIVxuIiwgc3RkZXJyKTsKKworCQkJCXFzb3J0KHN0YXRlLT5ibG9jaywKKwkJCQkgICAgICBzdGF0ZS0+dXNlZGVudHJpZXMsCisJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBleHQyX2Jsb2NrX2VudHJ5KSwKKwkJCQkgICAgICBjb21wYXJlX2Jsb2NrX2VudHJpZXMpOworCQkJCWdvdG8gYWdhaW47CisJCQl9CisJfQorCisJaWYgKCFkb3NjYW4oZnMsIHN0YXRlKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIWV4dDJfYmxvY2tfcmVsb2NhdG9yX2dyYWJfYmxvY2tzKGZzLCBzdGF0ZSkpCisJCXJldHVybiAwOworCisJaWYgKCFleHQyX2Jsb2NrX3JlbG9jYXRvcl9jb3B5KGZzLCBzdGF0ZSkpCisJCXJldHVybiAwOworCisJcXNvcnQoc3RhdGUtPmJsb2NrLAorCSAgICAgIHN0YXRlLT51c2VkZW50cmllcywKKwkgICAgICBzaXplb2Yoc3RydWN0IGV4dDJfYmxvY2tfZW50cnkpLAorCSAgICAgIGNvbXBhcmVfYmxvY2tfZW50cmllc19pbmQpOworCisJZm9yIChpPTM7aT49MDtpLS0pCisJeworCQlzdHJ1Y3QgZXh0Ml9ibG9ja19lbnRyeSAqZHN0OworCQlpbnQJCQkgajsKKwkJaW50CQkJIG51bTsKKworCQlkc3QgPSBzdGF0ZS0+c3RhcnRbaV0uZHN0OworCQludW0gPSBzdGF0ZS0+c3RhcnRbaV0ubnVtOworCisJCWlmICghbnVtKQorCQkJY29udGludWU7CisKKwkJaWYgKGZzLT5vcHRfdmVyYm9zZSkKKwkJeworCQkJLyogRklYWFhNRSBncm9zcyBoYWNrICovCisJCQlmcHJpbnRmKHN0ZGVyciwgInJlbG9jYXRpbmcgJXMgYmxvY2tzIiwKKwkJCQkoKGNoYXIgKls0XSl7ImRpcmVjdCIsCisJCQkJCQkgICAgICJzaW5nbHkgaW5kaXJlY3QiLAorCQkJCQkJICAgICAiZG91Ymx5IGluZGlyZWN0IiwKKwkJCQkJCSAgICAgInRyaXBseSBpbmRpcmVjdCJ9KVtpXSk7CisJCQlmZmx1c2goc3RkZXJyKTsKKwkJfQorCisJCXFzb3J0KGRzdCwKKwkJICAgICAgbnVtLAorCQkgICAgICBzaXplb2Yoc3RydWN0IGV4dDJfYmxvY2tfZW50cnkpLAorCQkgICAgICBjb21wYXJlX2Jsb2NrX2VudHJpZXNfcmVmKTsKKworCQlmb3IgKGo9MDtqPG51bTtqKyspCisJCQlpZiAoIWV4dDJfYmxvY2tfcmVsb2NhdG9yX3JlZihmcywgc3RhdGUsICZkc3Rbal0pKQorCQkJCXJldHVybiAwOworCisJCWlmIChmcy0+b3B0X3NhZmUpIHsKKwkJCWlmICghZXh0Ml9zeW5jKGZzKSkKKwkJCQlyZXR1cm4gMDsKKwkJfQorCisJCWlmIChmcy0+b3B0X3ZlcmJvc2UpCisJCSAgICAgICAgZnB1dGMoJ1xuJywgc3RkZXJyKTsKKwl9CisKKwlzdGF0ZS0+dXNlZGVudHJpZXMgPSAwOworCXN0YXRlLT5yZXNvbHZlZGVudHJpZXMgPSAwOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZXh0Ml9ibG9ja19yZWxvY2F0b3JfbWFyayhzdHJ1Y3QgZXh0Ml9mcyAqZnMsIHN0cnVjdCBleHQyX2Jsb2NrX3JlbG9jYXRvcl9zdGF0ZSAqc3RhdGUsIGJsa190IGJsb2NrKQoreworCWludCBpOworCisJaWYgKGZzLT5vcHRfZGVidWcpCisJeworCQlpZiAoIWV4dDJfZ2V0X2Jsb2NrX3N0YXRlKGZzLCBibG9jaykgfHwKKwkJICAgICFleHQyX2lzX2RhdGFfYmxvY2soZnMsIGJsb2NrKSkKKwkJeworCQkJcGVkX2V4Y2VwdGlvbl90aHJvdyAoUEVEX0VYQ0VQVElPTl9XQVJOSU5HLAorCQkJCVBFRF9FWENFUFRJT05fSUdOT1JFLAorCQkJCV8oIkJsb2NrICVpIHNob3VsZG4ndCBoYXZlIGJlZW4gbWFya2VkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKCVkLCAlZCkhIiksIGJsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHQyX2dldF9ibG9ja19zdGF0ZShmcywgYmxvY2spLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHQyX2lzX2RhdGFfYmxvY2soZnMsIGJsb2NrKSk7CisJCX0KKwl9CisKKwlpZiAoc3RhdGUtPnVzZWRlbnRyaWVzID09IHN0YXRlLT5hbGxvY2VudHJpZXMgLSAxKQorCQlpZiAoIWV4dDJfYmxvY2tfcmVsb2NhdG9yX2ZsdXNoKGZzLCBzdGF0ZSkpCisJCQlyZXR1cm4gMDsKKworCWkgPSBzdGF0ZS0+dXNlZGVudHJpZXM7CisJc3RhdGUtPmJsb2NrW2ldLm51bSA9IGJsb2NrOworCXN0YXRlLT5ibG9ja1tpXS5kZXN0ID0gMDsKKwlzdGF0ZS0+YmxvY2tbaV0ucmVmYmxvY2sgPSAwOworCXN0YXRlLT5ibG9ja1tpXS5yZWZvZmZzZXQgPSAwOworCisJc3RhdGUtPnVzZWRlbnRyaWVzKys7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZXh0Ml9ibG9ja19yZWxvY2F0ZV9ncm93KHN0cnVjdCBleHQyX2ZzICpmcywgc3RydWN0IGV4dDJfYmxvY2tfcmVsb2NhdG9yX3N0YXRlICpzdGF0ZSwgYmxrX3QgbmV3c2l6ZSkKK3sKKwlibGtfdCBuZXdnZGJsb2NrczsKKwlibGtfdCBuZXdpdG9mZnNldDsKKwlpbnQgICBpOworCisJbmV3Z2RibG9ja3MgPSBwZWRfZGl2X3JvdW5kX3VwIChuZXdzaXplCisgICAgICAgICAgICAgICAgICAgICAgICAtIEVYVDJfU1VQRVJfRklSU1RfREFUQV9CTE9DSyhmcy0+c2IpLAorCQkJICAgICAgRVhUMl9TVVBFUl9CTE9DS1NfUEVSX0dST1VQKGZzLT5zYikpOworCW5ld2dkYmxvY2tzID0gcGVkX2Rpdl9yb3VuZF91cCAobmV3Z2RibG9ja3MKKyAgICAgICAgICAgICAgICAgICAgICAgICogc2l6ZW9mKHN0cnVjdCBleHQyX2dyb3VwX2Rlc2MpLAorCQkJICAgICAgZnMtPmJsb2Nrc2l6ZSk7CisJaWYgKG5ld2dkYmxvY2tzID09IGZzLT5nZGJsb2NrcykKKwkJcmV0dXJuIDE7CisKKwluZXdpdG9mZnNldCA9IG5ld2dkYmxvY2tzICsgMzsKKwlzdGF0ZS0+bmV3YWxsb2NvZmZzZXQgPSBuZXdpdG9mZnNldCArIGZzLT5pbm9kZWJsb2NrczsKKworCWZvciAoaT0wO2k8ZnMtPm51bWdyb3VwcztpKyspCisJeworCQlzdHJ1Y3QgZXh0Ml9idWZmZXJfaGVhZCAqYmg7CisJCWJsa190CQkJIGRpZmY7CisJCWJsa190CQkJIGo7CisJCWJsa190CQkJIHN0YXJ0OworCQlpbnQJCQkgc3BhcnNlOworCisJCWJoID0gZXh0Ml9icmVhZChmcywgRVhUMl9HUk9VUF9CTE9DS19CSVRNQVAoZnMtPmdkW2ldKSk7CisJCXN0YXJ0ID0gKGkgKiBFWFQyX1NVUEVSX0JMT0NLU19QRVJfR1JPVVAoZnMtPnNiKSkKKwkJCSsgRVhUMl9TVVBFUl9GSVJTVF9EQVRBX0JMT0NLKGZzLT5zYik7CisJCXNwYXJzZSA9IGV4dDJfaXNfZ3JvdXBfc3BhcnNlKGZzLCBpKTsKKworCQlpZiAoRVhUMl9HUk9VUF9JTk9ERV9UQUJMRShmcy0+Z2RbaV0pIDwgc3RhcnQgKyBuZXdpdG9mZnNldAorCQkgICAgfHwgKHNwYXJzZSAmJiAoKEVYVDJfR1JPVVBfQkxPQ0tfQklUTUFQKGZzLT5nZFtpXSkKKwkJCQkJCTwgc3RhcnQgKyBuZXdpdG9mZnNldCAtIDIpCisJCQkgICAgICAgfHwgKEVYVDJfR1JPVVBfSU5PREVfQklUTUFQKGZzLT5nZFtpXSkKKwkJCQkJCTwgc3RhcnQgKyBuZXdpdG9mZnNldCAtIDEpKSkpCisJCXsKKwkJCWRpZmYgPSBuZXdpdG9mZnNldCAtIChFWFQyX0dST1VQX0lOT0RFX1RBQkxFKGZzLT5nZFtpXSkKKwkJCQkJICAgICAgLSBzdGFydCk7CisKKwkJCWZvciAoaj0wO2o8ZGlmZjtqKyspCisJCQl7CisJCQkJYmxrX3QgazsKKworCQkJCWsgPSBFWFQyX0dST1VQX0lOT0RFX1RBQkxFKGZzLT5nZFtpXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGZzLT5pbm9kZWJsb2NrcyArIGo7CisJCQkJaWYgKGJoLT5kYXRhW2s+PjNdICYgX2JpdG1hcFtrJjddKQorCQkJCQlpZiAoIWV4dDJfYmxvY2tfcmVsb2NhdG9yX21hcmsoZnMsCisJCQkJCQkJICAgIHN0YXRlLCBzdGFydCArIGspKQorCQkJCQl7CisJCQkJCQlleHQyX2JyZWxzZShiaCwgMCk7CisJCQkJCQlyZXR1cm4gMDsKKwkJCQkJfQorCQkJfQorCQl9CisKKwkJZXh0Ml9icmVsc2UoYmgsIDApOworCX0KKworCWlmICghZXh0Ml9ibG9ja19yZWxvY2F0b3JfZmx1c2goZnMsIHN0YXRlKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBleHQyX2Jsb2NrX3JlbG9jYXRlX3NocmluayhzdHJ1Y3QgZXh0Ml9mcyAqZnMsIHN0cnVjdCBleHQyX2Jsb2NrX3JlbG9jYXRvcl9zdGF0ZSAqc3RhdGUsIGJsa190IG5ld3NpemUpCit7CisJaW50IGRpZmY7CisJaW50IGk7CisKKwlkaWZmID0gcGVkX2Rpdl9yb3VuZF91cCAobmV3c2l6ZSAtIEVYVDJfU1VQRVJfRklSU1RfREFUQV9CTE9DSyhmcy0+c2IpLAorCQkgICAgICAgRVhUMl9TVVBFUl9CTE9DS1NfUEVSX0dST1VQKGZzLT5zYikpOworCWRpZmYgPSBwZWRfZGl2X3JvdW5kX3VwIChkaWZmICogc2l6ZW9mKHN0cnVjdCBleHQyX2dyb3VwX2Rlc2MpLAorICAgICAgICAgICAgICAgICAgICAgICAgZnMtPmJsb2Nrc2l6ZSk7CisJZGlmZiA9IGZzLT5nZGJsb2NrcyAtIGRpZmY7CisKKwlzdGF0ZS0+bmV3YWxsb2NvZmZzZXQgPSBmcy0+aXRvZmZzZXQgKyBmcy0+aW5vZGVibG9ja3M7CisKKwlmb3IgKGk9MDtpPGZzLT5udW1ncm91cHM7aSsrKQorCXsKKwkJc3RydWN0IGV4dDJfYnVmZmVyX2hlYWQgKmJoOworCQlibGtfdAkJCSBncm91cHNpemU7CisJCWJsa190CQkJIGo7CisJCWJsa190CQkJIG9mZnNldDsKKwkJaW50CQkJIHNwYXJzZTsKKwkJYmxrX3QJCQkgc3RhcnQ7CisJCWludAkJCSB0eXBlOworCisJCW9mZnNldCA9IGkgKiBFWFQyX1NVUEVSX0JMT0NLU19QRVJfR1JPVVAoZnMtPnNiKQorCQkJICsgRVhUMl9TVVBFUl9GSVJTVF9EQVRBX0JMT0NLKGZzLT5zYik7CisJCXNwYXJzZSA9IGV4dDJfaXNfZ3JvdXBfc3BhcnNlKGZzLCBpKTsKKworCQlpZiAobmV3c2l6ZSA+PSBvZmZzZXQgKyBFWFQyX1NVUEVSX0JMT0NLU19QRVJfR1JPVVAoZnMtPnNiKSkKKwkJCWNvbnRpbnVlOwkJLyogZ3JvdXAgd2lsbCBzdXJ2aXZlICovCisKKwkJYmggPSBleHQyX2JyZWFkKGZzLCBFWFQyX0dST1VQX0JMT0NLX0JJVE1BUChmcy0+Z2RbaV0pKTsKKworCQlpZiAobmV3c2l6ZSA8PSBvZmZzZXQpCisJCQl0eXBlID0gMjsJCS8qIGdyb3VwIGlzIGZ1bGx5IGNob3BwZWQgb2ZmICovCisJCWVsc2UKKwkJCXR5cGUgPSAxOwkJLyogZ3JvdXAgaXMgcGFydGx5IGNob3BwZWQgb2ZmICovCisKKwkJaWYgKCFzcGFyc2UgJiYgdHlwZSA9PSAyKQorCQl7CisJCQlmb3IgKGo9RVhUMl9HUk9VUF9JTk9ERV9CSVRNQVAoZnMtPmdkW2ldKSsxOworCQkJICAgICBqPEVYVDJfR1JPVVBfSU5PREVfVEFCTEUoZnMtPmdkW2ldKTsKKwkJCSAgICAgaisrKQorCQkJeworCQkJCWJsa190IGs7CisKKwkJCQlrID0gaiAtIG9mZnNldDsKKwkJCQlpZiAoYmgtPmRhdGFbaz4+M10gJiBfYml0bWFwW2smN10pCisJCQkJCWlmICghZXh0Ml9ibG9ja19yZWxvY2F0b3JfbWFyayhmcywgc3RhdGUsIGopKQorCQkJCQl7CisJCQkJCQlleHQyX2JyZWxzZShiaCwgMCk7CisJCQkJCQlyZXR1cm4gMDsKKwkJCQkJfQorCQkJfQorCQl9CisKKwkJc3RhcnQgPSBuZXdzaXplOworCQlpZiAodHlwZSA9PSAyKQorCQkJc3RhcnQgPSBFWFQyX0dST1VQX0lOT0RFX1RBQkxFKGZzLT5nZFtpXSkKKwkJCQkrIGZzLT5pbm9kZWJsb2NrczsKKworCQlzdGFydCAtPSBvZmZzZXQ7CisKKwkJZ3JvdXBzaXplID0gRVhUMl9TVVBFUl9CTE9DS1NfUEVSX0dST1VQKGZzLT5zYik7CisJCWlmIChvZmZzZXQgKyBncm91cHNpemUgPiBFWFQyX1NVUEVSX0JMT0NLU19DT1VOVChmcy0+c2IpKQorCQkJZ3JvdXBzaXplID0gRVhUMl9TVVBFUl9CTE9DS1NfQ09VTlQoZnMtPnNiKSAtIG9mZnNldDsKKworCQlmb3IgKGo9c3RhcnQ7ajxncm91cHNpemU7aisrKQorCQkJaWYgKGJoLT5kYXRhW2o+PjNdICYgX2JpdG1hcFtqJjddKQorCQkJCWlmICghZXh0Ml9ibG9ja19yZWxvY2F0b3JfbWFyayhmcywgc3RhdGUsCisJCQkJCQkJICAgICAgIG9mZnNldCArIGopKQorCQkJCXsKKwkJCQkJZXh0Ml9icmVsc2UoYmgsIDApOworCQkJCQlyZXR1cm4gMDsKKwkJCQl9CisKKwkJZXh0Ml9icmVsc2UoYmgsIDApOworCX0KKworCXJldHVybiBleHQyX2Jsb2NrX3JlbG9jYXRvcl9mbHVzaChmcywgc3RhdGUpOworfQorCitpbnQgZXh0Ml9ibG9ja19yZWxvY2F0ZShzdHJ1Y3QgZXh0Ml9mcyAqZnMsIGJsa190IG5ld3NpemUpCit7CisJc3RydWN0IGV4dDJfYmxvY2tfcmVsb2NhdG9yX3N0YXRlIHN0YXRlOworCisJaWYgKGZzLT5vcHRfdmVyYm9zZSkKKyAgICAgICAgICAgICAgICBmcHV0cygicmVsb2NhdGluZyBibG9ja3MuLi4uXG4iLCBzdGRlcnIpOworCisJc3RhdGUubmV3YWxsb2NvZmZzZXQgPSAwOworCXN0YXRlLmFsbG9jZW50cmllcyA9IChleHQyX3JlbG9jYXRvcl9wb29sX3NpemUgPDwgMTApIC8KKwkJc2l6ZW9mKHN0cnVjdCBleHQyX2Jsb2NrX2VudHJ5KTsKKwlzdGF0ZS51c2VkZW50cmllcyA9IDA7CisJc3RhdGUucmVzb2x2ZWRlbnRyaWVzID0gMDsKKwlzdGF0ZS5ibG9jayA9IChzdHJ1Y3QgZXh0Ml9ibG9ja19lbnRyeSAqKWZzLT5yZWxvY2F0b3JfcG9vbDsKKworCWlmIChuZXdzaXplIDwgRVhUMl9TVVBFUl9CTE9DS1NfQ09VTlQoZnMtPnNiKSkKKwkJcmV0dXJuIGV4dDJfYmxvY2tfcmVsb2NhdGVfc2hyaW5rKGZzLCAmc3RhdGUsIG5ld3NpemUpOworCisJcmV0dXJuIGV4dDJfYmxvY2tfcmVsb2NhdGVfZ3JvdyhmcywgJnN0YXRlLCBuZXdzaXplKTsKK30KKworI2VuZGlmIC8qICFESVNDT1ZFUl9PTkxZICovCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9idWZmZXIuYyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2J1ZmZlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1ZGEyMGEKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9idWZmZXIuYwpAQCAtMCwwICsxLDQ0NyBAQAorLyoKKyAgICBleHQyX2J1ZmZlci5jIC0tIGV4dDIgYnVmZmVyIGNhY2hlCisgICAgQ29weXJpZ2h0IChDKSAxOTk4LTIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgIAorICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpZm5kZWYgRElTQ09WRVJfT05MWQorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlICJleHQyLmgiCisKKy8qIHBzZXVkby1oZWFkZXIgKi8KKworc3RhdGljIF9faW5saW5lX18gaW50IGV4dDJfYmxvY2tfaGFzaChibGtfdCBibG9jaykKK3sKKwl1bnNpZ25lZCBsb25nIHg7CisKKwl4ID0gYmxvY2sgXiAoYmxvY2sgPj4gOCkgXiAoYmxvY2sgPj4gMTYpIF4gKGJsb2NrID4+IDI0KTsKKwlyZXR1cm4geCAmICgoMSA8PCBleHQyX2hhc2hfYml0cykgLSAxKTsKK30KKworc3RhdGljIHN0cnVjdCBleHQyX2J1ZmZlcl9oZWFkICpleHQyX2JoX2FsbG9jICAgKHN0cnVjdCBleHQyX2J1ZmZlcl9jYWNoZSAqLCBibGtfdCk7CitzdGF0aWMgdm9pZCAgICAgICAgICAgICAgICAgICAgIGV4dDJfYmhfZGVhbGxvYyAoc3RydWN0IGV4dDJfYnVmZmVyX2hlYWQgKik7CitzdGF0aWMgc3RydWN0IGV4dDJfYnVmZmVyX2hlYWQgKmV4dDJfYmhfZmluZCAgICAoc3RydWN0IGV4dDJfYnVmZmVyX2NhY2hlICosIGJsa190KTsKK3N0YXRpYyBpbnQgICAgICAgICAgICAgICAgICAgICAgZXh0Ml9iaF9kb19yZWFkIChzdHJ1Y3QgZXh0Ml9idWZmZXJfaGVhZCAqKTsKK3N0YXRpYyBpbnQgICAgICAgICAgICAgICAgICAgICAgZXh0Ml9iaF9kb193cml0ZShzdHJ1Y3QgZXh0Ml9idWZmZXJfaGVhZCAqKTsKK3N0YXRpYyB2b2lkICAgICAgICAgICAgICAgICAgICAgZXh0Ml9iaF9oYXNoICAgIChzdHJ1Y3QgZXh0Ml9idWZmZXJfaGVhZCAqKTsKK3N0YXRpYyB2b2lkICAgICAgICAgICAgICAgICAgICAgZXh0Ml9iaF91bmhhc2ggIChzdHJ1Y3QgZXh0Ml9idWZmZXJfaGVhZCAqKTsKKworCisKK3N0YXRpYyBpbnQgdHJ5X3RvX2ZsdXNoKHN0cnVjdCBleHQyX2J1ZmZlcl9jYWNoZSAqYmMpCit7CisJaW50IGk7CisKKwlmb3IgKGk9MDtpPGJjLT5zaXplO2krKykKKwl7CisJCXN0cnVjdCBleHQyX2J1ZmZlcl9oZWFkICpiaDsKKworCQliaCA9ICZiYy0+aGVhZHNbaV07CisJCisJCWlmIChiaC0+YWxsb2MgJiYgIWJoLT51c2Vjb3VudCAmJiAhYmgtPmRpcnR5KQorCQl7CisJCQlleHQyX2JoX2RlYWxsb2MoYmgpOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlmb3IgKGk9MDtpPGJjLT5zaXplO2krKykKKwl7CisJCXN0cnVjdCBleHQyX2J1ZmZlcl9oZWFkICpiaDsKKworCQliaCA9ICZiYy0+aGVhZHNbaV07CisKKwkJaWYgKGJoLT5hbGxvYyAmJiAhYmgtPnVzZWNvdW50ICYmIGJoLT5kaXJ0eSkKKwkJeworCQkJZXh0Ml9iaF9kb193cml0ZShiaCk7CisJCQlleHQyX2JoX2RlYWxsb2MoYmgpOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlpZiAocGVkX2V4Y2VwdGlvbl90aHJvdyAoUEVEX0VYQ0VQVElPTl9FUlJPUiwKKwkJCQkgUEVEX0VYQ0VQVElPTl9JR05PUkVfQ0FOQ0VMLAorCQkJCSBfKCJDb3VsZG4ndCBmbHVzaCBidWZmZXIgY2FjaGUhIikpCisJCQkhPSBQRURfRVhDRVBUSU9OX0lHTk9SRSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKKworCisKKworc3RhdGljIHN0cnVjdCBleHQyX2J1ZmZlcl9oZWFkICpleHQyX2JoX2FsbG9jKHN0cnVjdCBleHQyX2J1ZmZlcl9jYWNoZSAqYmMsIGJsa190IGJsb2NrKQoreworCXN0cnVjdCBleHQyX2J1ZmZlcl9oZWFkICpiaDsKKwlpbnQgaTsKKworCWJoID0gTlVMTDsKKworIHRyeWFnYWluOgorCWZvciAoaT0wO2k8YmMtPnNpemU7aSsrKQorCXsKKwkJYmggPSAmYmMtPmhlYWRzW2ldOworCisJCWlmICghYmgtPmFsbG9jKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGkgPT0gYmMtPnNpemUpCisJeworCQl0cnlfdG9fZmx1c2goYmMpOworCQlnb3RvIHRyeWFnYWluOworCX0KKworCWJoID0gJmJjLT5oZWFkc1tpXTsKKworCWJoLT5uZXh0ID0gTlVMTDsKKwliaC0+cHJldiA9IE5VTEw7CisJYmgtPmJsb2NrID0gYmxvY2s7CisJYmgtPnVzZWNvdW50ID0gMDsKKwliaC0+ZGlydHkgPSAwOworCWJoLT5hbGxvYyA9IDE7CisJYmMtPm51bWFsbG9jKys7CisKKwlleHQyX2JoX2hhc2goYmgpOworCisJcmV0dXJuIGJoOworfQorCitzdGF0aWMgdm9pZCBleHQyX2JoX2RlYWxsb2Moc3RydWN0IGV4dDJfYnVmZmVyX2hlYWQgKmJoKQoreworCWlmIChiaC0+ZGlydHkpCisJCXBlZF9leGNlcHRpb25fdGhyb3cgKFBFRF9FWENFUFRJT05fQlVHLCBQRURfRVhDRVBUSU9OX0lHTk9SRSwKKwkJCSJkZWFsbG9jaW5nKCkgYSBkaXJ0eSBidWZmZXIhICVpXG4iLCBiaC0+YmxvY2spOworCisJZXh0Ml9iaF91bmhhc2goYmgpOworCWJoLT5hbGxvYyA9IDA7CisJYmgtPmJjLT5udW1hbGxvYy0tOworfQorCitzdGF0aWMgc3RydWN0IGV4dDJfYnVmZmVyX2hlYWQgKmV4dDJfYmhfZmluZChzdHJ1Y3QgZXh0Ml9idWZmZXJfY2FjaGUgKmJjLCBibGtfdCBibG9jaykKK3sKKwlzdHJ1Y3QgZXh0Ml9idWZmZXJfaGVhZCAqYTsKKwlzdHJ1Y3QgZXh0Ml9idWZmZXJfaGVhZCAqYjsKKwlpbnQJCQkgaGFzaDsKKworCWhhc2ggPSBleHQyX2Jsb2NrX2hhc2goYmxvY2spOworCWEgPSBiYy0+aGFzaFtoYXNoXTsKKworCWlmIChhICE9IE5VTEwpCisJeworCQliID0gYTsKKwkJZG8KKwkJeworCQkJaWYgKGEtPmJsb2NrID09IGJsb2NrKQorCQkJCXJldHVybiBhOworCisJCQlhID0gYS0+bmV4dDsKKwkJfSB3aGlsZSAoYSAhPSBiKTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBleHQyX2JoX2RvX3JlYWQoc3RydWN0IGV4dDJfYnVmZmVyX2hlYWQgKmJoKQoreworCXJldHVybiBleHQyX3JlYWRfYmxvY2tzKGJoLT5iYy0+ZnMsIGJoLT5kYXRhLCBiaC0+YmxvY2ssIDEpOworfQorCitzdGF0aWMgaW50IGV4dDJfYmhfZG9fd3JpdGUoc3RydWN0IGV4dDJfYnVmZmVyX2hlYWQgKmJoKQoreworCWlmICghYmgtPmFsbG9jKSB7CisJCXBlZF9leGNlcHRpb25fdGhyb3cgKFBFRF9FWENFUFRJT05fQlVHLCBQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCSJBdHRlbXB0IHRvIHdyaXRlIHVuYWxsb2NhdGVkIGJ1ZmZlci4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJZXh0Ml93cml0ZV9ibG9ja3MoYmgtPmJjLT5mcywgYmgtPmRhdGEsIGJoLT5ibG9jaywgMSk7CisJYmgtPmRpcnR5ID0gMDsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgZXh0Ml9iaF9oYXNoKHN0cnVjdCBleHQyX2J1ZmZlcl9oZWFkICpiaCkKK3sKKwlpbnQgaGFzaDsKKworCWhhc2ggPSBleHQyX2Jsb2NrX2hhc2goYmgtPmJsb2NrKTsKKwlpZiAoYmgtPmJjLT5oYXNoW2hhc2hdICE9IE5VTEwpCisJeworCQliaC0+bmV4dCA9IGJoLT5iYy0+aGFzaFtoYXNoXTsKKwkJYmgtPnByZXYgPSBiaC0+bmV4dC0+cHJldjsKKwkJYmgtPm5leHQtPnByZXYgPSBiaDsKKwkJYmgtPnByZXYtPm5leHQgPSBiaDsKKwkJcmV0dXJuOworCX0KKworCWJoLT5iYy0+aGFzaFtoYXNoXSA9IGJoOworCWJoLT5uZXh0ID0gYmgtPnByZXYgPSBiaDsKK30KKworc3RhdGljIHZvaWQgZXh0Ml9iaF91bmhhc2goc3RydWN0IGV4dDJfYnVmZmVyX2hlYWQgKmJoKQoreworCWludCBoYXNoOworCisJaGFzaCA9IGV4dDJfYmxvY2tfaGFzaChiaC0+YmxvY2spOworCisJYmgtPnByZXYtPm5leHQgPSBiaC0+bmV4dDsKKwliaC0+bmV4dC0+cHJldiA9IGJoLT5wcmV2OworCisJaWYgKGJoLT5iYy0+aGFzaFtoYXNoXSA9PSBiaCkKKwl7CisJCWlmIChiaC0+bmV4dCAhPSBiaCkKKwkJCWJoLT5iYy0+aGFzaFtoYXNoXSA9IGJoLT5uZXh0OworCQllbHNlCisJCQliaC0+YmMtPmhhc2hbaGFzaF0gPSBOVUxMOworCX0KKworCWJoLT5uZXh0ID0gTlVMTDsKKwliaC0+cHJldiA9IE5VTEw7Cit9CisKKworCisKKworCisKK3N0YXRpYyBpbnQgYnJlYWRpbW1oaXRzID0gMDsKK3N0YXRpYyBpbnQgYnJlYWRpbmRoaXRzID0gMDsKK3N0YXRpYyBpbnQgYnJlYWRtaXNzZXMgPSAwOworCit2b2lkIGV4dDJfYmNhY2hlX2RlaW5pdChzdHJ1Y3QgZXh0Ml9mcyAqZnMpCit7CisJZXh0Ml9iY2FjaGVfc3luYyhmcyk7CisJcGVkX2ZyZWUoZnMtPmJjLT5idWZmZXJtZW0pOworCXBlZF9mcmVlKGZzLT5iYy0+aGFzaCk7CisJcGVkX2ZyZWUoZnMtPmJjLT5oZWFkcyk7CisJcGVkX2ZyZWUoZnMtPmJjKTsKKworCWlmIChmcy0+b3B0X3ZlcmJvc2UpCisJCWZwcmludGYoc3RkZXJyLAorCQkJImRpcmVjdCBoaXRzOiAlaSwgaW5kaXJlY3QgaGl0czogJWksIG1pc3NlczogJWlcbiIsCisJCQlicmVhZGltbWhpdHMsCisJCQlicmVhZGluZGhpdHMsCisJCQlicmVhZG1pc3Nlcyk7Cit9CisKK3ZvaWQgZXh0Ml9iY2FjaGVfZHVtcChzdHJ1Y3QgZXh0Ml9mcyAqZnMpCit7CisJaW50IGk7CisKKwlmcHV0cyAoImJ1ZmZlciBjYWNoZSBkdW1wOlxuIiwgc3RkZXJyKTsKKworCWZvciAoaT0wO2k8KDE8PGV4dDJfaGFzaF9iaXRzKTtpKyspCisJCWlmIChmcy0+YmMtPmhhc2hbaV0gIT0gTlVMTCkKKwkJeworCQkJc3RydWN0IGV4dDJfYnVmZmVyX2hlYWQgKmE7CisJCQlzdHJ1Y3QgZXh0Ml9idWZmZXJfaGVhZCAqYjsKKworCQkJZnByaW50ZihzdGRlcnIsICIlaTogIiwgaSk7CisKKwkJCWEgPSBiID0gZnMtPmJjLT5oYXNoW2ldOworCQkJZG8KKwkJCXsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIiVpICIsIGEtPmJsb2NrKTsKKwkJCQlhID0gYS0+bmV4dDsKKwkJCX0gd2hpbGUgKGEgIT0gYik7CisKKwkJCWZwdXRjICgnXG4nLCBzdGRlcnIpOworCQl9Cit9CisKK2ludCBleHQyX2JjYWNoZV9mbHVzaChzdHJ1Y3QgZXh0Ml9mcyAqZnMsIGJsa190IGJsb2NrKQoreworCXN0cnVjdCBleHQyX2J1ZmZlcl9oZWFkICpiaDsKKworCWlmICgoYmggPSBleHQyX2JoX2ZpbmQoZnMtPmJjLCBibG9jaykpID09IE5VTEwpCisJCXJldHVybiAxOworCisJaWYgKGJoLT51c2Vjb3VudCkgeworCQlwZWRfZXhjZXB0aW9uX3Rocm93IChQRURfRVhDRVBUSU9OX0JVRywgUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQkiQXR0ZW1wdCB0byBmbHVzaCBhIGJ1ZmZlciB0aGF0J3MgaW4gdXNlISBbJWksJWldIiwKKwkJCWJoLT5ibG9jaywgYmgtPnVzZWNvdW50KTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGJoLT5kaXJ0eSkgeworCQlpZiAoIWV4dDJfYmhfZG9fd3JpdGUoYmgpKQorCQkJcmV0dXJuIDA7CisJfQorCisJZXh0Ml9iaF9kZWFsbG9jKGJoKTsKKwlyZXR1cm4gMTsKK30KKworaW50IGV4dDJfYmNhY2hlX2ZsdXNoX3JhbmdlKHN0cnVjdCBleHQyX2ZzICpmcywgYmxrX3QgYmxvY2ssIGJsa190IG51bSkKK3sKKwlibGtfdCBlbmQgPSBibG9jayArIG51bTsKKworCWZvciAoOyBibG9jayA8IGVuZDsgYmxvY2srKykgeworCQlpZiAoIWV4dDJfYmNhY2hlX2ZsdXNoKGZzLCBibG9jaykpCisJCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKK2ludCBleHQyX2JjYWNoZV9pbml0KHN0cnVjdCBleHQyX2ZzICpmcykKK3sKKwlzdHJ1Y3QgZXh0Ml9idWZmZXJfY2FjaGUgKmJjOworCWludCBpOworCWludCBzaXplOworCisJc2l6ZSA9IGV4dDJfYnVmZmVyX2NhY2hlX3Bvb2xfc2l6ZSA+PiAoZnMtPmxvZ3NpemUgLSAxMCk7CisKKwlpZiAoKGJjID0gKHN0cnVjdCBleHQyX2J1ZmZlcl9jYWNoZSAqKSBwZWRfbWFsbG9jKHNpemVvZihzdHJ1Y3QgZXh0Ml9idWZmZXJfY2FjaGUpKSkgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoKGJjLT5oZWFkcyA9IChzdHJ1Y3QgZXh0Ml9idWZmZXJfaGVhZCAqKSBwZWRfbWFsbG9jKHNpemUgKiBzaXplb2Yoc3RydWN0IGV4dDJfYnVmZmVyX2hlYWQpKSkgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoKGJjLT5oYXNoID0gKHN0cnVjdCBleHQyX2J1ZmZlcl9oZWFkICoqKSBwZWRfbWFsbG9jKHNpemVvZihzdHJ1Y3QgZXh0Ml9idWZmZXJfaGVhZCAqKSA8PCBleHQyX2hhc2hfYml0cykpID09IE5VTEwpCisJeworCQlwZWRfZnJlZShiYy0+aGVhZHMpOworCQlwZWRfZnJlZShiYyk7CisJCXJldHVybiAwOworCX0KKworCWlmICgoYmMtPmJ1ZmZlcm1lbSA9ICh1bnNpZ25lZCBjaGFyICopIHBlZF9tYWxsb2MoZXh0Ml9idWZmZXJfY2FjaGVfcG9vbF9zaXplIDw8IDEwKSkgPT0gTlVMTCkKKwl7CisJCXBlZF9mcmVlKGJjLT5oYXNoKTsKKwkJcGVkX2ZyZWUoYmMtPmhlYWRzKTsKKwkJcGVkX2ZyZWUoYmMpOworCQlyZXR1cm4gMDsKKwl9CisKKwliYy0+Y2FjaGUgPSAmYmMtPmhlYWRzWzBdOworCWJjLT5mcyA9IGZzOworCWJjLT5zaXplID0gc2l6ZTsKKwliYy0+bnVtYWxsb2MgPSAwOworCisJZm9yIChpPTA7aTxzaXplO2krKykKKwl7CisJCWJjLT5oZWFkc1tpXS5kYXRhID0gYmMtPmJ1ZmZlcm1lbSArIChpIDw8IGZzLT5sb2dzaXplKTsKKwkJYmMtPmhlYWRzW2ldLmJjID0gYmM7CisJCWJjLT5oZWFkc1tpXS5hbGxvYyA9IDA7CisJfQorCisJZm9yIChpPTA7aTwoMTw8ZXh0Ml9oYXNoX2JpdHMpO2krKykKKwkJYmMtPmhhc2hbaV0gPSBOVUxMOworCisJZnMtPmJjID0gYmM7CisKKwlyZXR1cm4gMTsKK30KKworaW50IGV4dDJfYmNhY2hlX3N5bmMoc3RydWN0IGV4dDJfZnMgKmZzKQoreworCWludCBpOworCisJZm9yIChpPTA7aTxmcy0+YmMtPnNpemU7aSsrKQorCXsKKwkJc3RydWN0IGV4dDJfYnVmZmVyX2hlYWQgKmJoOworCisJCWJoID0gJmZzLT5iYy0+aGVhZHNbaV07CisKKwkJaWYgKGJoLT5hbGxvYyAmJiBiaC0+ZGlydHkpIHsKKwkJCWlmICghZXh0Ml9iaF9kb193cml0ZShiaCkpCisJCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIDE7Cit9CisKKworCisKKworCisKKworc3RydWN0IGV4dDJfYnVmZmVyX2hlYWQgKmV4dDJfYmNyZWF0ZShzdHJ1Y3QgZXh0Ml9mcyAqZnMsIGJsa190IGJsb2NrKQoreworCXN0cnVjdCBleHQyX2J1ZmZlcl9oZWFkICpiaDsKKworCWlmICgoYmggPSBleHQyX2JoX2ZpbmQoZnMtPmJjLCBibG9jaykpICE9IE5VTEwpCisJeworCQliaC0+dXNlY291bnQrKzsKKwl9CisJZWxzZQorCXsKKwkJYmggPSBleHQyX2JoX2FsbG9jKGZzLT5iYywgYmxvY2spOworCQliaC0+dXNlY291bnQgPSAxOworCX0KKworCW1lbXNldChiaC0+ZGF0YSwgMCwgZnMtPmJsb2Nrc2l6ZSk7CisJYmgtPmRpcnR5ID0gMTsKKworCXJldHVybiBiaDsKK30KKworc3RydWN0IGV4dDJfYnVmZmVyX2hlYWQgKmV4dDJfYnJlYWQoc3RydWN0IGV4dDJfZnMgKmZzLCBibGtfdCBibG9jaykKK3sKKwlzdHJ1Y3QgZXh0Ml9idWZmZXJfaGVhZCAqYmg7CisKKwlpZiAoKGJoID0gZnMtPmJjLT5jYWNoZSktPmJsb2NrID09IGJsb2NrKQorCXsKKwkJYnJlYWRpbW1oaXRzKys7CisJCWJoLT51c2Vjb3VudCsrOworCQlyZXR1cm4gYmg7CisJfQorCisJaWYgKChiaCA9IGV4dDJfYmhfZmluZChmcy0+YmMsIGJsb2NrKSkgIT0gTlVMTCkKKwl7CisJCWZzLT5iYy0+Y2FjaGUgPSBiaDsKKwkJYnJlYWRpbmRoaXRzKys7CisJCWJoLT51c2Vjb3VudCsrOworCQlyZXR1cm4gYmg7CisJfQorCisJYnJlYWRtaXNzZXMrKzsKKworCWJoID0gZXh0Ml9iaF9hbGxvYyhmcy0+YmMsIGJsb2NrKTsKKwlmcy0+YmMtPmNhY2hlID0gYmg7CisJYmgtPnVzZWNvdW50ID0gMTsKKwlpZiAoIWV4dDJfYmhfZG9fcmVhZChiaCkpIHsKKwkJZXh0Ml9iaF9kZWFsbG9jKGJoKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuIGJoOworfQorCitpbnQgZXh0Ml9icmVsc2Uoc3RydWN0IGV4dDJfYnVmZmVyX2hlYWQgKmJoLCBpbnQgZm9yZ2V0KQoreworCWlmIChiaC0+dXNlY291bnQtLSA9PSAxICYmIGZvcmdldCkKKwl7CisJCWlmIChiaC0+ZGlydHkpIHsKKwkJCWlmICghZXh0Ml9iaF9kb193cml0ZShiaCkpCisJCQkJcmV0dXJuIDA7CisJCX0KKworCQlleHQyX2JoX2RlYWxsb2MoYmgpOworCX0KKwlyZXR1cm4gMTsKK30KKworI2VuZGlmIC8qICFESVNDT1ZFUl9PTkxZICovCisKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2ZzLmggYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9mcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxM2NjMjEKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9mcy5oCkBAIC0wLDAgKzEsMzIzIEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvbGludXgvZXh0Ml9mcy5oCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1CisgKiBSZW15IENhcmQgKGNhcmRAbWFzaS5pYnAuZnIpCisgKiBMYWJvcmF0b2lyZSBNQVNJIC0gSW5zdGl0dXQgQmxhaXNlIFBhc2NhbAorICogVW5pdmVyc2l0ZSBQaWVycmUgZXQgTWFyaWUgQ3VyaWUgKFBhcmlzIFZJKQorICoKKyAqICBmcm9tCisgKgorICogIGxpbnV4L2luY2x1ZGUvbGludXgvbWluaXhfZnMuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIgIExpbnVzIFRvcnZhbGRzCisgKi8KKworLyoKKyAqIEVYVDJfKl8qKCkgY29udmllbmllbmNlIG1hY3JvcyBhZGRlZCBieSBBbmRyZXcgQ2xhdXNlbiA8Y2xhdXNlbkBnbnUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICovCisKKyNpZm5kZWYgX0VYVDJfRlNfSAorI2RlZmluZSBfRVhUMl9GU19ICisKKyNpbmNsdWRlIDxwYXJ0ZWQvZW5kaWFuLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKy8qCisgKiBUaGUgc2Vjb25kIGV4dGVuZGVkIGZpbGUgc3lzdGVtIGNvbnN0YW50cy9zdHJ1Y3R1cmVzCisgKi8KKworI2RlZmluZSBFWFQyX1NVUEVSX01BR0lDX0NPTlNUCTB4RUY1MworI2RlZmluZSBFWFQyX01JTl9CTE9DS19TSVpFCTEwMjQKKyNkZWZpbmUgRVhUMl9ORElSX0JMT0NLUwkxMgorI2RlZmluZSBFWFQyX0lORF9CTE9DSwkJRVhUMl9ORElSX0JMT0NLUworI2RlZmluZSBFWFQyX0RJTkRfQkxPQ0sJCShFWFQyX0lORF9CTE9DSyArIDEpCisjZGVmaW5lIEVYVDJfVElORF9CTE9DSwkJKEVYVDJfRElORF9CTE9DSyArIDEpCisjZGVmaW5lIEVYVDJfTl9CTE9DS1MJCShFWFQyX1RJTkRfQkxPQ0sgKyAxKQorI2RlZmluZSBFWFQyX1ZBTElEX0ZTCQkweDAwMDEKKyNkZWZpbmUgRVhUMl9FUlJPUl9GUwkJMHgwMDAyCisjZGVmaW5lIEVYVDJfUkVTRVJWRURfSU5PREVfQ09VTlQJMTEKKworLyoKKyAqIENvZGVzIGZvciBvcGVyYXRpbmcgc3lzdGVtcworICovCisjZGVmaW5lIEVYVDJfT1NfTElOVVgJCTAKKyNkZWZpbmUgRVhUMl9PU19IVVJECQkxCisjZGVmaW5lIEVYVDJfT1NfTUFTSVgJCTIKKyNkZWZpbmUgRVhUMl9PU19GUkVFQlNECQkzCisjZGVmaW5lIEVYVDJfT1NfTElURVMJCTQKKworLyoKKyAqIEZlYXR1cmUgc2V0IGRlZmluaXRpb25zCisgKi8KKyNkZWZpbmUgRVhUM19GRUFUVVJFX0NPTVBBVF9IQVNfSk9VUk5BTAkJMHgwMDA0CisjZGVmaW5lIEVYVDJfRkVBVFVSRV9DT01QQVRfSEFTX0RJUl9JTkRFWAkweDAwMjAKKworI2RlZmluZSBFWFQyX0ZFQVRVUkVfUk9fQ09NUEFUX1NQQVJTRV9TVVBFUgkweDAwMDEKKyNkZWZpbmUgRVhUMl9GRUFUVVJFX1JPX0NPTVBBVF9MQVJHRV9GSUxFCTB4MDAwMgorCisjZGVmaW5lIEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9GSUxFVFlQRQkJMHgwMDAyCisjZGVmaW5lIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9SRUNPVkVSCQkweDAwMDQKKworLyoKKyAqIFNwZWNpYWwgaW5vZGVzIG51bWJlcnMKKyAqLworI2RlZmluZSBFWFQyX0JBRF9JTk8JCSAxCS8qIEJhZCBibG9ja3MgaW5vZGUgKi8KKyNkZWZpbmUgRVhUMl9ST09UX0lOTwkJIDIJLyogUm9vdCBpbm9kZSAqLworI2RlZmluZSBFWFQyX0FDTF9JRFhfSU5PCSAzCS8qIEFDTCBpbm9kZSAqLworI2RlZmluZSBFWFQyX0FDTF9EQVRBX0lOTwkgNAkvKiBBQ0wgaW5vZGUgKi8KKyNkZWZpbmUgRVhUMl9CT09UX0xPQURFUl9JTk8JIDUJLyogQm9vdCBsb2FkZXIgaW5vZGUgKi8KKyNkZWZpbmUgRVhUMl9VTkRFTF9ESVJfSU5PCSA2CS8qIFVuZGVsZXRlIGRpcmVjdG9yeSBpbm9kZSAqLworCisvKgorICogRXh0MiBkaXJlY3RvcnkgZmlsZSB0eXBlcy4gIE9ubHkgdGhlIGxvdyAzIGJpdHMgYXJlIHVzZWQuICBUaGUKKyAqIG90aGVyIGJpdHMgYXJlIHJlc2VydmVkIGZvciBub3cuCisgKi8KKyNkZWZpbmUgRVhUMl9GVF9VTktOT1dOCQkwCisjZGVmaW5lIEVYVDJfRlRfUkVHX0ZJTEUJMQorI2RlZmluZSBFWFQyX0ZUX0RJUgkJMgorI2RlZmluZSBFWFQyX0ZUX0NIUkRFVgkJMworI2RlZmluZSBFWFQyX0ZUX0JMS0RFViAJCTQKKyNkZWZpbmUgRVhUMl9GVF9GSUZPCQk1CisjZGVmaW5lIEVYVDJfRlRfU09DSwkJNgorI2RlZmluZSBFWFQyX0ZUX1NZTUxJTksJCTcKKworLyoKKyAqIEJlaGF2aW91ciB3aGVuIGRldGVjdGluZyBlcnJvcnMKKyAqLworI2RlZmluZSBFWFQyX0VSUk9SU19DT05USU5VRQkJMQkvKiBDb250aW51ZSBleGVjdXRpb24gKi8KKyNkZWZpbmUgRVhUMl9FUlJPUlNfUk8JCQkyCS8qIFJlbW91bnQgZnMgcmVhZC1vbmx5ICovCisjZGVmaW5lIEVYVDJfRVJST1JTX1BBTklDCQkzCS8qIFBhbmljICovCisjZGVmaW5lIEVYVDJfRVJST1JTX0RFRkFVTFQJCUVYVDJfRVJST1JTX0NPTlRJTlVFCisKK3N0cnVjdCBleHQyX2Rpcl9lbnRyeV8yCit7CisJdWludDMyX3QJaW5vZGU7CisJdWludDE2X3QJcmVjX2xlbjsKKwl1aW50OF90CQluYW1lX2xlbjsKKwl1aW50OF90CQlmaWxlX3R5cGU7CisJY2hhcgkJbmFtZVsyNTVdOworfTsKKworc3RydWN0IGV4dDJfZ3JvdXBfZGVzYworeworCXVpbnQzMl90CWJnX2Jsb2NrX2JpdG1hcDsKKwl1aW50MzJfdAliZ19pbm9kZV9iaXRtYXA7CisJdWludDMyX3QJYmdfaW5vZGVfdGFibGU7CisJdWludDE2X3QJYmdfZnJlZV9ibG9ja3NfY291bnQ7CisJdWludDE2X3QJYmdfZnJlZV9pbm9kZXNfY291bnQ7CisJdWludDE2X3QJYmdfdXNlZF9kaXJzX2NvdW50OworCXVpbnQxNl90CWJnX3BhZDsKKwl1aW50MzJfdAliZ19yZXNlcnZlZFszXTsKK307CisKK3N0cnVjdCBleHQyX2lub2RlCit7CisJdWludDE2X3QJaV9tb2RlOwkJLyogRmlsZSBtb2RlICovCisJdWludDE2X3QJaV91aWQ7CQkvKiBPd25lciBVaWQgKi8KKwl1aW50MzJfdAlpX3NpemU7CQkvKiBTaXplIGluIGJ5dGVzICovCisJdWludDMyX3QJaV9hdGltZTsJLyogQWNjZXNzIHRpbWUgKi8KKwl1aW50MzJfdAlpX2N0aW1lOwkvKiBDcmVhdGlvbiB0aW1lICovCisJdWludDMyX3QJaV9tdGltZTsJLyogTW9kaWZpY2F0aW9uIHRpbWUgKi8KKwl1aW50MzJfdAlpX2R0aW1lOwkvKiBEZWxldGlvbiBUaW1lICovCisJdWludDE2X3QJaV9naWQ7CQkvKiBHcm91cCBJZCAqLworCXVpbnQxNl90CWlfbGlua3NfY291bnQ7CS8qIExpbmtzIGNvdW50ICovCisJdWludDMyX3QJaV9ibG9ja3M7CS8qIEJsb2NrcyBjb3VudCAqLworCXVpbnQzMl90CWlfZmxhZ3M7CS8qIEZpbGUgZmxhZ3MgKi8KKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1aW50MzJfdAlsX2lfcmVzZXJ2ZWQxOworCQl9IGxpbnV4MTsKKwkJc3RydWN0IHsKKwkJCXVpbnQzMl90CWhfaV90cmFuc2xhdG9yOworCQl9IGh1cmQxOworCQlzdHJ1Y3QgeworCQkJdWludDMyX3QJbV9pX3Jlc2VydmVkMTsKKwkJfSBtYXNpeDE7CisJfSBvc2QxOwkJCS8qIE9TIGRlcGVuZGVudCAxICovCisJdWludDMyX3QJaV9ibG9ja1tFWFQyX05fQkxPQ0tTXTsvKiBQb2ludGVycyB0byBibG9ja3MgKi8KKwl1aW50MzJfdAlpX2dlbmVyYXRpb247CS8qIEZpbGUgdmVyc2lvbiAoZm9yIE5GUykgKi8KKwl1aW50MzJfdAlpX2ZpbGVfYWNsOwkvKiBGaWxlIEFDTCAqLworCXVpbnQzMl90CWlfZGlyX2FjbDsJLyogRGlyZWN0b3J5IEFDTCAqLworCXVpbnQzMl90CWlfZmFkZHI7CS8qIEZyYWdtZW50IGFkZHJlc3MgKi8KKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1aW50OF90CQlsX2lfZnJhZzsJLyogRnJhZ21lbnQgbnVtYmVyICovCisJCQl1aW50OF90CQlsX2lfZnNpemU7CS8qIEZyYWdtZW50IHNpemUgKi8KKwkJCXVpbnQxNl90CWlfcGFkMTsKKwkJCXVpbnQzMl90CWxfaV9yZXNlcnZlZDJbMl07CisJCX0gbGludXgyOworCQlzdHJ1Y3QgeworCQkJdWludDhfdAkJaF9pX2ZyYWc7CS8qIEZyYWdtZW50IG51bWJlciAqLworCQkJdWludDhfdAkJaF9pX2ZzaXplOwkvKiBGcmFnbWVudCBzaXplICovCisJCQl1aW50MTZfdAloX2lfbW9kZV9oaWdoOworCQkJdWludDE2X3QJaF9pX3VpZF9oaWdoOworCQkJdWludDE2X3QJaF9pX2dpZF9oaWdoOworCQkJdWludDMyX3QJaF9pX2F1dGhvcjsKKwkJfSBodXJkMjsKKwkJc3RydWN0IHsKKwkJCXVpbnQ4X3QJCW1faV9mcmFnOwkvKiBGcmFnbWVudCBudW1iZXIgKi8KKwkJCXVpbnQ4X3QJCW1faV9mc2l6ZTsJLyogRnJhZ21lbnQgc2l6ZSAqLworCQkJdWludDE2X3QJbV9wYWQxOworCQkJdWludDMyX3QJbV9pX3Jlc2VydmVkMlsyXTsKKwkJfSBtYXNpeDI7CisJfSBvc2QyOwkJCQkJLyogT1MgZGVwZW5kZW50IDIgKi8KK307CisKKyNkZWZpbmUgaV9zaXplX2hpZ2gJaV9kaXJfYWNsCisKK3N0cnVjdCBleHQyX3N1cGVyX2Jsb2NrCit7CisJdWludDMyX3QJc19pbm9kZXNfY291bnQ7CQkvKiBJbm9kZXMgY291bnQgKi8KKwl1aW50MzJfdAlzX2Jsb2Nrc19jb3VudDsJCS8qIEJsb2NrcyBjb3VudCAqLworCXVpbnQzMl90CXNfcl9ibG9ja3NfY291bnQ7CS8qIFJlc2VydmVkIGJsb2NrcyBjb3VudCAqLworCXVpbnQzMl90CXNfZnJlZV9ibG9ja3NfY291bnQ7CS8qIEZyZWUgYmxvY2tzIGNvdW50ICovCisJdWludDMyX3QJc19mcmVlX2lub2Rlc19jb3VudDsJLyogRnJlZSBpbm9kZXMgY291bnQgKi8KKwl1aW50MzJfdAlzX2ZpcnN0X2RhdGFfYmxvY2s7CS8qIEZpcnN0IERhdGEgQmxvY2sgKi8KKwl1aW50MzJfdAlzX2xvZ19ibG9ja19zaXplOwkvKiBCbG9jayBzaXplICovCisJaW50MzJfdAkJc19sb2dfZnJhZ19zaXplOwkvKiBGcmFnbWVudCBzaXplICovCisJdWludDMyX3QJc19ibG9ja3NfcGVyX2dyb3VwOwkvKiAjIEJsb2NrcyBwZXIgZ3JvdXAgKi8KKwl1aW50MzJfdAlzX2ZyYWdzX3Blcl9ncm91cDsJLyogIyBGcmFnbWVudHMgcGVyIGdyb3VwICovCisJdWludDMyX3QJc19pbm9kZXNfcGVyX2dyb3VwOwkvKiAjIElub2RlcyBwZXIgZ3JvdXAgKi8KKwl1aW50MzJfdAlzX210aW1lOwkJLyogTW91bnQgdGltZSAqLworCXVpbnQzMl90CXNfd3RpbWU7CQkvKiBXcml0ZSB0aW1lICovCisJdWludDE2X3QJc19tbnRfY291bnQ7CQkvKiBNb3VudCBjb3VudCAqLworCWludDE2X3QJCXNfbWF4X21udF9jb3VudDsJLyogTWF4aW1hbCBtb3VudCBjb3VudCAqLworCXVpbnQxNl90CXNfbWFnaWM7CQkvKiBNYWdpYyBzaWduYXR1cmUgKi8KKwl1aW50MTZfdAlzX3N0YXRlOwkJLyogRmlsZSBzeXN0ZW0gc3RhdGUgKi8KKwl1aW50MTZfdAlzX2Vycm9yczsJCS8qIEJlaGF2aW91ciB3aGVuIGRldGVjdGluZyBlcnJvcnMgKi8KKwl1aW50MTZfdAlzX21pbm9yX3Jldl9sZXZlbDsJLyogbWlub3IgcmV2aXNpb24gbGV2ZWwgKi8KKwl1aW50MzJfdAlzX2xhc3RjaGVjazsJCS8qIHRpbWUgb2YgbGFzdCBjaGVjayAqLworCXVpbnQzMl90CXNfY2hlY2tpbnRlcnZhbDsJLyogbWF4LiB0aW1lIGJldHdlZW4gY2hlY2tzICovCisJdWludDMyX3QJc19jcmVhdG9yX29zOwkJLyogT1MgKi8KKwl1aW50MzJfdAlzX3Jldl9sZXZlbDsJCS8qIFJldmlzaW9uIGxldmVsICovCisJdWludDE2X3QJc19kZWZfcmVzdWlkOwkJLyogRGVmYXVsdCB1aWQgZm9yIHJlc2VydmVkIGJsb2NrcyAqLworCXVpbnQxNl90CXNfZGVmX3Jlc2dpZDsJCS8qIERlZmF1bHQgZ2lkIGZvciByZXNlcnZlZCBibG9ja3MgKi8KKwkvKgorCSAqIFRoZXNlIGZpZWxkcyBhcmUgZm9yIEVYVDJfRFlOQU1JQ19SRVYgc3VwZXJibG9ja3Mgb25seS4KKwkgKgorCSAqIE5vdGU6IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGNvbXBhdGlibGUgZmVhdHVyZSBzZXQgYW5kCisJICogdGhlIGluY29tcGF0aWJsZSBmZWF0dXJlIHNldCBpcyB0aGF0IGlmIHRoZXJlIGlzIGEgYml0IHNldAorCSAqIGluIHRoZSBpbmNvbXBhdGlibGUgZmVhdHVyZSBzZXQgdGhhdCB0aGUga2VybmVsIGRvZXNuJ3QKKwkgKiBrbm93IGFib3V0LCBpdCBzaG91bGQgcmVmdXNlIHRvIG1vdW50IHRoZSBmaWxlIHN5c3RlbS4KKwkgKiAKKwkgKiBlMmZzY2sncyByZXF1aXJlbWVudHMgYXJlIG1vcmUgc3RyaWN0OyBpZiBpdCBkb2Vzbid0IGtub3cKKwkgKiBhYm91dCBhIGZlYXR1cmUgaW4gZWl0aGVyIHRoZSBjb21wYXRpYmxlIG9yIGluY29tcGF0aWJsZQorCSAqIGZlYXR1cmUgc2V0LCBpdCBtdXN0IGFib3J0IGFuZCBub3QgdHJ5IHRvIG1lZGRsZSB3aXRoCisJICogdGhpbmdzIGl0IGRvZXNuJ3QgdW5kZXJzdGFuZC4uLgorCSAqLworCXVpbnQzMl90CXNfZmlyc3RfaW5vOwkJLyogRmlyc3Qgbm9uLXJlc2VydmVkIGlub2RlICovCisJdWludDE2X3QJc19pbm9kZV9zaXplOwkJLyogc2l6ZSBvZiBpbm9kZSBzdHJ1Y3R1cmUgKi8KKwl1aW50MTZfdAlzX2Jsb2NrX2dyb3VwX25yOwkvKiBibG9jayBncm91cCAjIG9mIHRoaXMgc3VwZXJibG9jayAqLworCXVpbnQzMl90CXNfZmVhdHVyZV9jb21wYXQ7CS8qIGNvbXBhdGlibGUgZmVhdHVyZSBzZXQgKi8KKwl1aW50MzJfdAlzX2ZlYXR1cmVfaW5jb21wYXQ7CS8qIGluY29tcGF0aWJsZSBmZWF0dXJlIHNldCAqLworCXVpbnQzMl90CXNfZmVhdHVyZV9yb19jb21wYXQ7CS8qIHJlYWRvbmx5LWNvbXBhdGlibGUgZmVhdHVyZSBzZXQgKi8KKwl1aW50OF90CQlzX3V1aWRbMTZdOwkJLyogMTI4LWJpdCB1dWlkIGZvciB2b2x1bWUgKi8KKwljaGFyCQlzX3ZvbHVtZV9uYW1lWzE2XTsJLyogdm9sdW1lIG5hbWUgKi8KKwljaGFyCQlzX2xhc3RfbW91bnRlZFs2NF07CS8qIGRpcmVjdG9yeSB3aGVyZSBsYXN0IG1vdW50ZWQgKi8KKwl1aW50MzJfdAlzX2FsZ29yaXRobV91c2FnZV9iaXRtYXA7ICAvKiBGb3IgY29tcHJlc3Npb24gKi8KKwkvKgorCSAqIFBlcmZvcm1hbmNlIGhpbnRzLiAgRGlyZWN0b3J5IHByZWFsbG9jYXRpb24gc2hvdWxkIG9ubHkKKwkgKiBoYXBwZW4gaWYgdGhlIEVYVDJfQ09NUEFUX1BSRUFMTE9DIGZsYWcgaXMgb24uCisJICovCisJdWludDhfdAkJc19wcmVhbGxvY19ibG9ja3M7CS8qIE5yIG9mIGJsb2NrcyB0byB0cnkgdG8gcHJlYWxsb2NhdGUqLworCXVpbnQ4X3QJCXNfcHJlYWxsb2NfZGlyX2Jsb2NrczsJLyogTnIgdG8gcHJlYWxsb2NhdGUgZm9yIGRpcnMgKi8KKwl1aW50MTZfdAlzX3BhZGRpbmcxOworCS8qCisJICogSm91cm5hbGluZyBzdXBwb3J0IHZhbGlkIGlmIEVYVDJfRkVBVFVSRV9DT01QQVRfSEFTX0pPVVJOQUwgc2V0LgorCSAqLworCXVpbnQ4X3QJCXNfam91cm5hbF91dWlkWzE2XTsJLyogdXVpZCBvZiBqb3VybmFsIHN1cGVyYmxvY2sgKi8KKwl1aW50MzJfdAlzX2pvdXJuYWxfaW51bTsJCS8qIGlub2RlIG51bWJlciBvZiBqb3VybmFsIGZpbGUgKi8KKwl1aW50MzJfdAlzX2pvdXJuYWxfZGV2OwkJLyogZGV2aWNlIG51bWJlciBvZiBqb3VybmFsIGZpbGUgKi8KKwl1aW50MzJfdAlzX2xhc3Rfb3JwaGFuOwkJLyogc3RhcnQgb2YgbGlzdCBvZiBpbm9kZXMgdG8gZGVsZXRlICovCisKKwl1aW50MzJfdAlzX3Jlc2VydmVkWzE5N107CS8qIFBhZGRpbmcgdG8gdGhlIGVuZCBvZiB0aGUgYmxvY2sgKi8KK307CisKKyNkZWZpbmUgRVhUMl9ESVJFTlRfSU5PREUoZGlyX2VudCkJKFBFRF9MRTMyX1RPX0NQVSgoZGlyX2VudCkuaW5vZGUpKQorI2RlZmluZSBFWFQyX0RJUkVOVF9SRUNfTEVOKGRpcl9lbnQpCShQRURfTEUxNl9UT19DUFUoKGRpcl9lbnQpLnJlY19sZW4pKQorI2RlZmluZSBFWFQyX0RJUkVOVF9OQU1FX0xFTihkaXJfZW50KQkoKGRpcl9lbnQpLm5hbWVfbGVuKQorI2RlZmluZSBFWFQyX0RJUkVOVF9GSUxFX1RZUEUoZGlyX2VudCkJKChkaXJfZW50KS5maWxlX3R5cGUpCisKKyNkZWZpbmUgRVhUMl9HUk9VUF9CTE9DS19CSVRNQVAoZ2QpCShQRURfTEUzMl9UT19DUFUoKGdkKS5iZ19ibG9ja19iaXRtYXApKQorI2RlZmluZSBFWFQyX0dST1VQX0lOT0RFX0JJVE1BUChnZCkJKFBFRF9MRTMyX1RPX0NQVSgoZ2QpLmJnX2lub2RlX2JpdG1hcCkpCisjZGVmaW5lIEVYVDJfR1JPVVBfSU5PREVfVEFCTEUoZ2QpCShQRURfTEUzMl9UT19DUFUoKGdkKS5iZ19pbm9kZV90YWJsZSkpCisjZGVmaW5lIEVYVDJfR1JPVVBfRlJFRV9CTE9DS1NfQ09VTlQoZ2QpIFwKKwkJKFBFRF9MRTE2X1RPX0NQVSgoZ2QpLmJnX2ZyZWVfYmxvY2tzX2NvdW50KSkKKyNkZWZpbmUgRVhUMl9HUk9VUF9GUkVFX0lOT0RFU19DT1VOVChnZCkgXAorCQkoUEVEX0xFMTZfVE9fQ1BVKChnZCkuYmdfZnJlZV9pbm9kZXNfY291bnQpKQorI2RlZmluZSBFWFQyX0dST1VQX1VTRURfRElSU19DT1VOVChnZCkgXAorCQkoUEVEX0xFMTZfVE9fQ1BVKChnZCkuYmdfdXNlZF9kaXJzX2NvdW50KSkKKworI2RlZmluZSBFWFQyX0lOT0RFX01PREUoaW5vZGUpCQkoUEVEX0xFMTZfVE9fQ1BVKChpbm9kZSkuaV9tb2RlKSkKKyNkZWZpbmUgRVhUMl9JTk9ERV9VSUQoaW5vZGUpCQkoUEVEX0xFMTZfVE9fQ1BVKChpbm9kZSkuaV91aWQpKQorI2RlZmluZSBFWFQyX0lOT0RFX1NJWkUoaW5vZGUpIFwKKwkoKHVpbnQ2NF90KSBQRURfTEUzMl9UT19DUFUoKGlub2RlKS5pX3NpemUpIFwKKwkrICgodWludDY0X3QpIFBFRF9MRTMyX1RPX0NQVSgoaW5vZGUpLmlfc2l6ZV9oaWdoKSA8PCAzMikpCisjZGVmaW5lIEVYVDJfSU5PREVfQVRJTUUoaW5vZGUpCQkoUEVEX0xFMzJfVE9fQ1BVKChpbm9kZSkuaV9hdGltZSkpCisjZGVmaW5lIEVYVDJfSU5PREVfQ1RJTUUoaW5vZGUpCQkoUEVEX0xFMzJfVE9fQ1BVKChpbm9kZSkuaV9jdGltZSkpCisjZGVmaW5lIEVYVDJfSU5PREVfTVRJTUUoaW5vZGUpCQkoUEVEX0xFMzJfVE9fQ1BVKChpbm9kZSkuaV9tdGltZSkpCisjZGVmaW5lIEVYVDJfSU5PREVfRFRJTUUoaW5vZGUpCQkoUEVEX0xFMzJfVE9fQ1BVKChpbm9kZSkuaV9kdGltZSkpCisjZGVmaW5lIEVYVDJfSU5PREVfR0lEKGlub2RlKQkJKFBFRF9MRTE2X1RPX0NQVSgoaW5vZGUpLmlfZ2lkKSkKKyNkZWZpbmUgRVhUMl9JTk9ERV9MSU5LU19DT1VOVChpbm9kZSkJKFBFRF9MRTE2X1RPX0NQVSgoaW5vZGUpLmlfbGlua3NfY291bnQpKQorI2RlZmluZSBFWFQyX0lOT0RFX0JMT0NLUyhpbm9kZSkJKFBFRF9MRTMyX1RPX0NQVSgoaW5vZGUpLmlfYmxvY2tzKSkKKyNkZWZpbmUgRVhUMl9JTk9ERV9GTEFHUyhpbm9kZSkJCShQRURfTEUzMl9UT19DUFUoKGlub2RlKS5pX2ZsYWdzKSkKKyNkZWZpbmUgRVhUMl9JTk9ERV9UUkFOU0xBVE9SKGlub2RlKQkoUEVEX0xFMzJfVE9fQ1BVKChpbm9kZSkub3NkMS5odXJkMS5oX2lfdHJhbnNsYXRvcikpCisjZGVmaW5lIEVYVDJfSU5PREVfQkxPQ0soaW5vZGUsIGJsaykJKFBFRF9MRTMyX1RPX0NQVSgoaW5vZGUpLmlfYmxvY2tbYmxrXSkpCisKKyNkZWZpbmUgRVhUMl9TVVBFUl9JTk9ERVNfQ09VTlQoc2IpCShQRURfTEUzMl9UT19DUFUoKHNiKS5zX2lub2Rlc19jb3VudCkpCisjZGVmaW5lIEVYVDJfU1VQRVJfQkxPQ0tTX0NPVU5UKHNiKQkoUEVEX0xFMzJfVE9fQ1BVKChzYikuc19ibG9ja3NfY291bnQpKQorI2RlZmluZSBFWFQyX1NVUEVSX1JfQkxPQ0tTX0NPVU5UKHNiKQkoUEVEX0xFMzJfVE9fQ1BVKChzYikuc19yX2Jsb2Nrc19jb3VudCkpCisjZGVmaW5lIEVYVDJfU1VQRVJfRlJFRV9CTE9DS1NfQ09VTlQoc2IpIFwKKwkJKFBFRF9MRTMyX1RPX0NQVSgoc2IpLnNfZnJlZV9ibG9ja3NfY291bnQpKQorI2RlZmluZSBFWFQyX1NVUEVSX0ZSRUVfSU5PREVTX0NPVU5UKHNiKSBcCisJCShQRURfTEUzMl9UT19DUFUoKHNiKS5zX2ZyZWVfaW5vZGVzX2NvdW50KSkKKyNkZWZpbmUgRVhUMl9TVVBFUl9GSVJTVF9EQVRBX0JMT0NLKHNiKSBcCisJCShQRURfTEUzMl9UT19DUFUoKHNiKS5zX2ZpcnN0X2RhdGFfYmxvY2spKQorI2RlZmluZSBFWFQyX1NVUEVSX0xPR19CTE9DS19TSVpFKHNiKQkoUEVEX0xFMzJfVE9fQ1BVKChzYikuc19sb2dfYmxvY2tfc2l6ZSkpCisjZGVmaW5lIEVYVDJfU1VQRVJfTE9HX0ZSQUdfU0laRShzYikgXAorCQkoKGludDMyX3QpIFBFRF9MRTMyX1RPX0NQVSgoc2IpLnNfbG9nX2ZyYWdfc2l6ZSkpCisjZGVmaW5lIEVYVDJfU1VQRVJfQkxPQ0tTX1BFUl9HUk9VUChzYikJXAorCQkoUEVEX0xFMzJfVE9fQ1BVKChzYikuc19ibG9ja3NfcGVyX2dyb3VwKSkKKyNkZWZpbmUgRVhUMl9TVVBFUl9GUkFHU19QRVJfR1JPVVAoc2IpIFwKKwkoUEVEX0xFMzJfVE9fQ1BVKChzYikuc19mcmFnc19wZXJfZ3JvdXApKQorI2RlZmluZSBFWFQyX1NVUEVSX0lOT0RFU19QRVJfR1JPVVAoc2IpCVwKKwkoUEVEX0xFMzJfVE9fQ1BVKChzYikuc19pbm9kZXNfcGVyX2dyb3VwKSkKKyNkZWZpbmUgRVhUMl9TVVBFUl9NVElNRShzYikJCShQRURfTEUzMl9UT19DUFUoKHNiKS5zX210aW1lKSkKKyNkZWZpbmUgRVhUMl9TVVBFUl9XVElNRShzYikJCShQRURfTEUzMl9UT19DUFUoKHNiKS5zX3d0aW1lKSkKKyNkZWZpbmUgRVhUMl9TVVBFUl9NTlRfQ09VTlQoc2IpCShQRURfTEUxNl9UT19DUFUoKHNiKS5zX21udF9jb3VudCkpCisjZGVmaW5lIEVYVDJfU1VQRVJfTUFYX01OVF9DT1VOVChzYikgXAorCQkoKGludDE2X3QpIFBFRF9MRTE2X1RPX0NQVSgoc2IpLnNfbWF4X21udF9jb3VudCkpCisjZGVmaW5lIEVYVDJfU1VQRVJfTUFHSUMoc2IpCQkoUEVEX0xFMTZfVE9fQ1BVKChzYikuc19tYWdpYykpCisjZGVmaW5lIEVYVDJfU1VQRVJfU1RBVEUoc2IpCQkoUEVEX0xFMTZfVE9fQ1BVKChzYikuc19zdGF0ZSkpCisjZGVmaW5lIEVYVDJfU1VQRVJfRVJST1JTKHNiKQkJKFBFRF9MRTE2X1RPX0NQVSgoc2IpLnNfZXJyb3JzKSkKKyNkZWZpbmUgRVhUMl9TVVBFUl9NSU5PUl9SRVZfTEVWRUwoc2IpIFwKKwkJKFBFRF9MRTE2X1RPX0NQVSgoc2IpLnNfbWlub3JfcmV2X2xldmVsKSkKKyNkZWZpbmUgRVhUMl9TVVBFUl9MQVNUQ0hFQ0soc2IpCShQRURfTEUzMl9UT19DUFUoKHNiKS5zX2xhc3RjaGVjaykpCisjZGVmaW5lIEVYVDJfU1VQRVJfQ0hFQ0tJTlRFUlZBTChzYikJKFBFRF9MRTMyX1RPX0NQVSgoc2IpLnNfY2hlY2tpbnRlcnZhbCkpCisjZGVmaW5lIEVYVDJfU1VQRVJfQ1JFQVRPUl9PUyhzYikJKFBFRF9MRTMyX1RPX0NQVSgoc2IpLnNfY3JlYXRvcl9vcykpCisjZGVmaW5lIEVYVDJfU1VQRVJfUkVWX0xFVkVMKHNiKQkoUEVEX0xFMzJfVE9fQ1BVKChzYikuc19yZXZfbGV2ZWwpKQorI2RlZmluZSBFWFQyX1NVUEVSX0RFRl9SRVNVSUQoc2IpCShQRURfTEUxNl9UT19DUFUoKHNiKS5zX2RlZl9yZXN1aWQpKQorI2RlZmluZSBFWFQyX1NVUEVSX0RFRl9SRVNHSUQoc2IpCShQRURfTEUxNl9UT19DUFUoKHNiKS5zX2RlZl9yZXNnaWQpKQorCisjZGVmaW5lIEVYVDJfU1VQRVJfRklSU1RfSU5PKHNiKQkoUEVEX0xFMzJfVE9fQ1BVKChzYikuc19maXJzdF9pbm8pKQorI2RlZmluZSBFWFQyX1NVUEVSX0lOT0RFX1NJWkUoc2IpCShQRURfTEUxNl9UT19DUFUoKHNiKS5zX2lub2RlX3NpemUpKQorI2RlZmluZSBFWFQyX1NVUEVSX0JMT0NLX0dST1VQX05SKHNiKQkoUEVEX0xFMTZfVE9fQ1BVKChzYikuc19ibG9ja19ncm91cF9ucikpCisjZGVmaW5lIEVYVDJfU1VQRVJfRkVBVFVSRV9DT01QQVQoc2IpCShQRURfTEUzMl9UT19DUFUoKHNiKS5zX2ZlYXR1cmVfY29tcGF0KSkKKyNkZWZpbmUgRVhUMl9TVVBFUl9GRUFUVVJFX0lOQ09NUEFUKHNiKSBcCisJCShQRURfTEUzMl9UT19DUFUoKHNiKS5zX2ZlYXR1cmVfaW5jb21wYXQpKQorI2RlZmluZSBFWFQyX1NVUEVSX0ZFQVRVUkVfUk9fQ09NUEFUKHNiKSBcCisJCShQRURfTEUzMl9UT19DUFUoKHNiKS5zX2ZlYXR1cmVfcm9fY29tcGF0KSkKKyNkZWZpbmUgRVhUMl9TVVBFUl9VVUlEKHNiKQkJKChzYikuc191dWlkKQorI2RlZmluZSBFWFQyX1NVUEVSX1ZPTFVNRV9OQU1FKHNiKQkoKHNiKS5zX3ZvbHVtZV9uYW1lKQorI2RlZmluZSBFWFQyX1NVUEVSX0xBU1RfTU9VTlRFRChzYikJKChzYikuc19sYXN0X21vdW50ZWQpCisjZGVmaW5lIEVYVDJfU1VQRVJfQUxHT1JJVEhNX1VTQUdFX0JJVE1BUChzYikgXAorCQkoUEVEX0xFMzJfVE9fQ1BVKChzYikuc19hbGdvcml0aG1fdXNhZ2VfYml0bWFwKSkKKworI2RlZmluZSBFWFQyX1NVUEVSX0pPVVJOQUxfVVVJRChzYikJKChzYikuc19qb3VybmFsX3V1aWQpCisjZGVmaW5lIEVYVDJfU1VQRVJfSk9VUk5BTF9JTlVNKHNiKQkoUEVEX0xFMzJfVE9fQ1BVKChzYikuc19qb3VybmFsX2ludW0pKQorI2RlZmluZSBFWFQyX1NVUEVSX0pPVVJOQUxfREVWKHNiKQkoUEVEX0xFMzJfVE9fQ1BVKChzYikuc19qb3VybmFsX2RldikpCisjZGVmaW5lIEVYVDJfU1VQRVJfTEFTVF9PUlBIQU4oc2IpCShQRURfTEUzMl9UT19DUFUoKHNiKS5zX2xhc3Rfb3JwaGFuKSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9pbm9kZV9yZWxvY2F0b3IuYyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2lub2RlX3JlbG9jYXRvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ZTdlMDMKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9pbm9kZV9yZWxvY2F0b3IuYwpAQCAtMCwwICsxLDYwMCBAQAorLyoKKyAgICBleHQyX2lub2RlX3JlbG9jYXRvci5jIC0tIGV4dDIgaW5vZGUgcmVsb2NhdG9yCisgICAgQ29weXJpZ2h0IChDKSAxOTk4LTIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgIAorICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpZm5kZWYgRElTQ09WRVJfT05MWQorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgkvKiBmb3IgU19JU0RJUiAqLworI2luY2x1ZGUgImV4dDIuaCIKKworCisKKworCisKK3N0cnVjdCBleHQyX3JlZmVyZW5jZQoreworCWJsa190CQkJIGJsb2NrOworCW9mZl90CQkJIG9mZnNldDsKK307CisKK3N0cnVjdCBleHQyX2lub2RlX2VudHJ5Cit7CisJaW5vX3QJCQkgbnVtOworCWlub190CQkJIGRlc3Q7CisJdW5zaWduZWQJCSBudW1yZWZlcmVuY2VzOjE2OworCXVuc2lnbmVkCQkgaXNkaXI6MTsKKwlzdHJ1Y3QgZXh0Ml9yZWZlcmVuY2UJKnJlZjsKK307CisKK3N0cnVjdCBleHQyX2lub2RlX3JlbG9jYXRvcl9zdGF0ZQoreworCWludAkJCSB1c2VkZW50cmllczsKKwlpbnQJCQkgcmVzb2x2ZWRlbnRyaWVzOworCXN0cnVjdCBleHQyX2lub2RlX2VudHJ5CSppbm9kZTsKKwlzdHJ1Y3QgZXh0Ml9yZWZlcmVuY2UJKmxhc3Q7Cit9OworCisKKworCisKK3N0YXRpYyBzdHJ1Y3QgZXh0Ml9pbm9kZV9lbnRyeSAqZmluZGl0KHN0cnVjdCBleHQyX2lub2RlX3JlbG9jYXRvcl9zdGF0ZSAqc3RhdGUsIGlub190IGlub2RlKQoreworCWludAkJCSBtaW47CisJaW50CQkJIG1heDsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZV9lbnRyeSAqcmV0djsKKwlpbnQJCQkgdDsKKwlibGtfdAkJCSB0dmFsOworCisJbWF4ID0gc3RhdGUtPnVzZWRlbnRyaWVzIC0gMTsKKwltaW4gPSAwOworCXJldHYgPSBOVUxMOworCisgcmVwZWF0OgorCWlmIChtaW4gPiBtYXgpCisJCWdvdG8gb3V0OworCisJdCA9IChtaW4gKyBtYXgpID4+IDE7CisJdHZhbCA9IHN0YXRlLT5pbm9kZVt0XS5udW07CisKKwl0LS07CisJaWYgKHR2YWwgPiBpbm9kZSkKKwkJbWF4ID0gdDsKKworCXQgKz0gMjsKKwlpZiAodHZhbCA8IGlub2RlKQorCQltaW4gPSB0OworCisJdC0tOworCisJaWYgKHR2YWwgIT0gaW5vZGUpCisJCWdvdG8gcmVwZWF0OworCisJcmV0diA9ICZzdGF0ZS0+aW5vZGVbdF07CisKKyBvdXQ6CisJcmV0dXJuIHJldHY7Cit9CisKK3N0YXRpYyBpbnQgYWRkcmVmKHN0cnVjdCBleHQyX2ZzICpmcywgc3RydWN0IGV4dDJfaW5vZGVfcmVsb2NhdG9yX3N0YXRlICpzdGF0ZSwgaW5vX3QgaW5vZGUsIGJsa190IGJsb2NrLCBvZmZfdCBvZmZzZXQpCit7CisJc3RydWN0IGV4dDJfaW5vZGVfZW50cnkgKmVudDsKKwlpbnQgaTsKKworCWlmICgoZW50ID0gZmluZGl0KHN0YXRlLCBpbm9kZSkpID09IE5VTEwpCisJCXJldHVybiAxOworCisJZm9yIChpPTA7aTxlbnQtPm51bXJlZmVyZW5jZXM7aSsrKQorCQlpZiAoIWVudC0+cmVmW2ldLmJsb2NrKQorCQkJYnJlYWs7CisKKwlpZiAoaSA9PSBlbnQtPm51bXJlZmVyZW5jZXMpCisJeworCQlwZWRfZXhjZXB0aW9uX3Rocm93IChQRURfRVhDRVBUSU9OX0VSUk9SLCBQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCV8oIkZvdW5kIGFuIGlub2RlIHdpdGggYSBpbmNvcnJlY3QgbGluayBjb3VudC4gICIKKwkJCSAgIkJldHRlciBnbyBydW4gZTJmc2NrIGZpcnN0ISIpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGkgPT0gZW50LT5udW1yZWZlcmVuY2VzIC0gMSkKKwkJc3RhdGUtPnJlc29sdmVkZW50cmllcysrOworCisJZW50LT5yZWZbaV0uYmxvY2sgPSBibG9jazsKKwllbnQtPnJlZltpXS5vZmZzZXQgPSBvZmZzZXQ7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBkb2Jsb2NrKHN0cnVjdCBleHQyX2ZzICpmcywgc3RydWN0IGV4dDJfaW5vZGVfcmVsb2NhdG9yX3N0YXRlICpzdGF0ZSwgYmxrX3QgYmxvY2tubykKK3sKKwlzdHJ1Y3QgZXh0Ml9idWZmZXJfaGVhZCAqYmg7CisJb2ZmX3QgICAgICAgICAgICAgICAgICAgIG9mZnNldDsKKworCWJoID0gZXh0Ml9icmVhZChmcywgYmxvY2tubyk7CisJaWYgKCFiaCkKKwkJcmV0dXJuIDA7CisKKwlvZmZzZXQgPSAwOworCWRvCisJeworCQlzdHJ1Y3QgZXh0Ml9kaXJfZW50cnlfMiAqcHRyOworCisJCXB0ciA9IChzdHJ1Y3QgZXh0Ml9kaXJfZW50cnlfMiAqKShiaC0+ZGF0YSArIG9mZnNldCk7CisKKwkJaWYgKHB0ci0+bmFtZV9sZW4pCisJCQlpZiAoIWFkZHJlZihmcywgc3RhdGUsIEVYVDJfRElSRU5UX0lOT0RFKCpwdHIpLCBibG9ja25vLAorCQkJCSAgICBvZmZzZXQpKQorCQkJCXJldHVybiAwOworCisJCVBFRF9BU1NFUlQgKHB0ci0+cmVjX2xlbiA+IDAsIHJldHVybiAwKTsKKwkJb2Zmc2V0ICs9IEVYVDJfRElSRU5UX1JFQ19MRU4gKCpwdHIpOworCX0gd2hpbGUgKG9mZnNldCA8IGZzLT5ibG9ja3NpemUpOworCisJZXh0Ml9icmVsc2UoYmgsIDApOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGRvaW5kYmxvY2soc3RydWN0IGV4dDJfZnMgKmZzLCBzdHJ1Y3QgZXh0Ml9pbm9kZV9yZWxvY2F0b3Jfc3RhdGUgKnN0YXRlLCBibGtfdCBibG9ja25vKQoreworCXN0cnVjdCBleHQyX2J1ZmZlcl9oZWFkICpiaDsKKwlibGtfdAkJCSBibGs7CisJaW50ICAgICAgICAgICAgICAgICAgICAgIGk7CisKKwliaCA9IGV4dDJfYnJlYWQoZnMsIGJsb2Nrbm8pOworCisJZm9yIChpPTA7aTwoZnMtPmJsb2Nrc2l6ZT4+Mik7aSsrKQorCQlpZiAoKGJsayA9IFBFRF9MRTMyX1RPX0NQVSgoKHVpbnQzMl90ICopYmgtPmRhdGEpW2ldKSkgIT0gMCkKKwkJCWlmICghZG9ibG9jayhmcywgc3RhdGUsIGJsaykpCisJCQkJcmV0dXJuIDA7CisKKwlleHQyX2JyZWxzZShiaCwgMCk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZG9kaW5kYmxvY2soc3RydWN0IGV4dDJfZnMgKmZzLCBzdHJ1Y3QgZXh0Ml9pbm9kZV9yZWxvY2F0b3Jfc3RhdGUgKnN0YXRlLCBibGtfdCBibG9ja25vKQoreworCXN0cnVjdCBleHQyX2J1ZmZlcl9oZWFkICpiaDsKKwlibGtfdAkJCSBibGs7CisJaW50ICAgICAgICAgICAgICAgICAgICAgIGk7CisKKwliaCA9IGV4dDJfYnJlYWQoZnMsIGJsb2Nrbm8pOworCWlmICghYmgpCisJCXJldHVybiAwOworCisJZm9yIChpPTA7aTwoZnMtPmJsb2Nrc2l6ZT4+Mik7aSsrKQorCQlpZiAoKGJsayA9IFBFRF9MRTMyX1RPX0NQVSgoKHVpbnQzMl90ICopYmgtPmRhdGEpW2ldKSkgIT0gMCkKKwkJCWlmICghZG9pbmRibG9jayhmcywgc3RhdGUsIGJsaykpCisJCQkJcmV0dXJuIDA7CisKKwlleHQyX2JyZWxzZShiaCwgMCk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZG90aW5kYmxvY2soc3RydWN0IGV4dDJfZnMgKmZzLCBzdHJ1Y3QgZXh0Ml9pbm9kZV9yZWxvY2F0b3Jfc3RhdGUgKnN0YXRlLCBibGtfdCBibG9ja25vKQoreworCXN0cnVjdCBleHQyX2J1ZmZlcl9oZWFkICpiaDsKKwlibGtfdAkJCSBibGs7CisJaW50ICAgICAgICAgICAgICAgICAgICAgIGk7CisKKwliaCA9IGV4dDJfYnJlYWQoZnMsIGJsb2Nrbm8pOworCWlmICghYmgpCisJCXJldHVybiAwOworCisJZm9yIChpPTA7aTwoZnMtPmJsb2Nrc2l6ZT4+Mik7aSsrKQorCQlpZiAoKGJsayA9IFBFRF9MRTMyX1RPX0NQVSgoKHVpbnQzMl90ICopYmgtPmRhdGEpW2ldKSkgIT0gMCkKKwkJCWlmICghZG9kaW5kYmxvY2soZnMsIHN0YXRlLCBibGspKQorCQkJCXJldHVybiAwOworCisJZXh0Ml9icmVsc2UoYmgsIDApOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGRvaW5vZGUoc3RydWN0IGV4dDJfZnMgKmZzLCBzdHJ1Y3QgZXh0Ml9pbm9kZV9yZWxvY2F0b3Jfc3RhdGUgKnN0YXRlLCBpbm9fdCBpbm9kZSkKK3sKKwlzdHJ1Y3QgZXh0Ml9pbm9kZSBidWY7CisJaW50CQkgIGk7CisKKwlpZiAoIWV4dDJfcmVhZF9pbm9kZShmcywgaW5vZGUsICZidWYpKQorCQlyZXR1cm4gMDsKKwlpZiAoU19JU0RJUihFWFQyX0lOT0RFX01PREUoYnVmKSkpCisJeworCQlibGtfdCBibGs7CisKKwkJZm9yIChpPTA7aTxFWFQyX05ESVJfQkxPQ0tTO2krKykKKwkJCWlmICgoYmxrID0gRVhUMl9JTk9ERV9CTE9DSyhidWYsIGkpKSAhPSAwKQorCQkJCWlmICghZG9ibG9jayhmcywgc3RhdGUsIGJsaykpCisJCQkJCXJldHVybiAwOworCisJCWlmICgoYmxrID0gRVhUMl9JTk9ERV9CTE9DSyhidWYsIEVYVDJfSU5EX0JMT0NLKSkgIT0gMCkKKwkJCWlmICghZG9pbmRibG9jayhmcywgc3RhdGUsIGJsaykpCisJCQkJcmV0dXJuIDA7CisKKwkJaWYgKChibGsgPSBFWFQyX0lOT0RFX0JMT0NLKGJ1ZiwgRVhUMl9ESU5EX0JMT0NLKSkgIT0gMCkKKwkJCWlmICghZG9kaW5kYmxvY2soZnMsIHN0YXRlLCBibGspKQorCQkJCXJldHVybiAwOworCisJCWlmICgoYmxrID0gRVhUMl9JTk9ERV9CTE9DSyhidWYsIEVYVDJfVElORF9CTE9DSykpICE9IDApCisJCQlpZiAoIWRvdGluZGJsb2NrKGZzLCBzdGF0ZSwgYmxrKSkKKwkJCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBkb3NjYW5ncm91cChzdHJ1Y3QgZXh0Ml9mcyAqZnMsIHN0cnVjdCBleHQyX2lub2RlX3JlbG9jYXRvcl9zdGF0ZSAqc3RhdGUsIGludCBncm91cCkKK3sKKwlzdHJ1Y3QgZXh0Ml9idWZmZXJfaGVhZCAqYmg7CisJdW5zaWduZWQgaW50CQkgaTsKKwlpbnQJCQkgb2Zmc2V0OworCisJaWYgKGZzLT5vcHRfdmVyYm9zZSkKKwkJZnByaW50ZihzdGRlcnIsICIgc2Nhbm5pbmcgZ3JvdXAgJWkuLi4uICIsIGdyb3VwKTsKKworCWJoID0gZXh0Ml9icmVhZChmcywgRVhUMl9HUk9VUF9JTk9ERV9CSVRNQVAoZnMtPmdkW2dyb3VwXSkpOworCW9mZnNldCA9IGdyb3VwICogRVhUMl9TVVBFUl9JTk9ERVNfUEVSX0dST1VQKGZzLT5zYikgKyAxOworCisJZm9yIChpPTA7aTxFWFQyX1NVUEVSX0lOT0RFU19QRVJfR1JPVVAoZnMtPnNiKTtpKyspCisJCWlmIChiaC0+ZGF0YVtpPj4zXSAmIF9iaXRtYXBbaSY3XSkKKwkJeworCQkJaWYgKCFkb2lub2RlKGZzLCBzdGF0ZSwgb2Zmc2V0ICsgaSkpCisJCQl7CisJCQkJZXh0Ml9icmVsc2UoYmgsIDApOworCQkJCXJldHVybiAwOworCQkJfQorCisJCQlpZiAoc3RhdGUtPnJlc29sdmVkZW50cmllcyA9PSBzdGF0ZS0+dXNlZGVudHJpZXMpCisJCQkJYnJlYWs7CisJCX0KKworCWV4dDJfYnJlbHNlKGJoLCAwKTsKKworCWlmIChmcy0+b3B0X3ZlcmJvc2UpCisJCWZwcmludGYoc3RkZXJyLAorCQkJIiVpLyVpIGlub2RlcyByZXNvbHZlZFxyIiwKKwkJCXN0YXRlLT5yZXNvbHZlZGVudHJpZXMsCisJCQlzdGF0ZS0+dXNlZGVudHJpZXMpOworCisJcmV0dXJuIDE7Cit9CisKKy8qIGJhc2ljYWxseTogdGhpcyBidWlsZHMgYSBkZXBlbmRlbmN5IGdyYXBoIG9mIHRoZSBpbm9kZXMgaW4gdGhlIGVudGlyZSBmaWxlCisgKiBzeXN0ZW0uICBpbm9kZXMgYXJlIG9ubHkgcmVmZXJlbmNlZCBieSB0aGUgZGlyZWN0b3J5IHRyZWUgKG9yIHRoZSBtYWdpYworICogb25lcyBpbXBsaWNpdGx5LCBsaWtlIHRoZSBiYWQgYmxvY2tzIGlub2RlKSwgc28gd2UganVzdCB3YWxrIHRoZSBkaXJlY3RvcnkKKyAqIHRyZWUgYWRkaW5nIHJlZmVyZW5jZXMuCisgKi8KK3N0YXRpYyBpbnQgZG9zY2FuKHN0cnVjdCBleHQyX2ZzICpmcywgc3RydWN0IGV4dDJfaW5vZGVfcmVsb2NhdG9yX3N0YXRlICpzdGF0ZSkKK3sKKwlpbnQgaTsKKworCS8qIHdoaWxlIHRoZSBqb3VybmFsIHdpbGwgdXN1YWxseSBiZSBpbm9kZSA4IChhbmQgdGhlcmVmb3JlIHdpbGwgbmV2ZXIKKwkgKiBuZWVkIHRvIGJlIG1vdmVkKSwgd2UgZG9uJ3QgaGF2ZSBhbnkgZ3VhcmFudGVlIChncnJyKS4gIFNvLCB3ZQorCSAqIG5lZWQgdG8gYmUgcHJlcGFyZWQgdG8gbW92ZSBpdC4uLiAoYW5kIHVwZGF0ZSB0aGUgcmVmZXJlbmNlIGluIHRoZQorCSAqIHN1cGVyIGJsb2NrKQorCSAqLworCWlmIChmcy0+aGFzX2ludGVybmFsX2pvdXJuYWwpCisJCWFkZHJlZihmcywgc3RhdGUsIEVYVDJfU1VQRVJfSk9VUk5BTF9JTlVNKGZzLT5zYiksCisJCSAgICAgICAxLCBvZmZzZXRvZihzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jaywgc19qb3VybmFsX2ludW0pKTsKKworCWlmICghZG9zY2FuZ3JvdXAoZnMsIHN0YXRlLCAwKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoc3RhdGUtPnJlc29sdmVkZW50cmllcyAhPSBzdGF0ZS0+dXNlZGVudHJpZXMpCisJCWZvciAoaT1mcy0+bnVtZ3JvdXBzLTE7aT4wO2ktLSkKKwkJeworCQkJaWYgKCFkb3NjYW5ncm91cChmcywgc3RhdGUsIGkpKQorCQkJCXJldHVybiAwOworCisJCQlpZiAoc3RhdGUtPnJlc29sdmVkZW50cmllcyA9PSBzdGF0ZS0+dXNlZGVudHJpZXMpCisJCQkJYnJlYWs7CisJCX0KKworCWlmIChmcy0+b3B0X3ZlcmJvc2UpCisgICAgICAgICAgICAgICAgZnB1dGMgKCdcbicsIHN0ZGVycik7CisKKwlyZXR1cm4gMTsKK30KKworCisKKworCisKKworc3RhdGljIGludCBleHQyX2lub2RlX3JlbG9jYXRvcl9jb3B5KHN0cnVjdCBleHQyX2ZzICpmcywgc3RydWN0IGV4dDJfaW5vZGVfcmVsb2NhdG9yX3N0YXRlICpzdGF0ZSkKK3sKKwlpbnQgaTsKKworCWZvciAoaT0wO2k8c3RhdGUtPnVzZWRlbnRyaWVzO2krKykKKwl7CisJCXN0cnVjdCBleHQyX2lub2RlIGJ1ZjsKKwkJc3RydWN0IGV4dDJfaW5vZGVfZW50cnkgKmVudHJ5OworCisJCWVudHJ5ID0gJnN0YXRlLT5pbm9kZVtpXTsKKworCQlpZiAoZnMtPm9wdF9kZWJ1ZykKKwkJCWlmICghZXh0Ml9nZXRfaW5vZGVfc3RhdGUoZnMsIGVudHJ5LT5udW0pIHx8CisJCQkgICAgZXh0Ml9nZXRfaW5vZGVfc3RhdGUoZnMsIGVudHJ5LT5kZXN0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnB1dHMgKCJpbm9kZWJpdG1hcGVycm9yXG4iLCBzdGRlcnIpOworCisJCWlmICghZXh0Ml9yZWFkX2lub2RlKGZzLCBlbnRyeS0+bnVtLCAmYnVmKSkKKwkJCXJldHVybiAwOworCQlpZiAoIWV4dDJfd3JpdGVfaW5vZGUoZnMsIGVudHJ5LT5kZXN0LCAmYnVmKSkKKwkJCXJldHVybiAwOworCisJCWVudHJ5LT5pc2RpciA9IFNfSVNESVIoRVhUMl9JTk9ERV9NT0RFKGJ1ZikpPzE6MDsKKwl9CisKKwlpZiAoZnMtPm9wdF9zYWZlKQorCQlpZiAoIWV4dDJfc3luYyhmcykpCisJCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBleHQyX2lub2RlX3JlbG9jYXRvcl9maW5pc2goc3RydWN0IGV4dDJfZnMgKmZzLCBzdHJ1Y3QgZXh0Ml9pbm9kZV9yZWxvY2F0b3Jfc3RhdGUgKnN0YXRlKQoreworCWludCBpOworCisJZm9yIChpPTA7aTxzdGF0ZS0+dXNlZGVudHJpZXM7aSsrKQorCXsKKwkJc3RydWN0IGV4dDJfaW5vZGVfZW50cnkgKmVudHJ5OworCisJCWVudHJ5ID0gJnN0YXRlLT5pbm9kZVtpXTsKKwkJZXh0Ml9zZXRfaW5vZGVfc3RhdGUoZnMsIGVudHJ5LT5kZXN0LCAxLCAxKTsKKwkJZXh0Ml9zZXRfaW5vZGVfc3RhdGUoZnMsIGVudHJ5LT5udW0sIDAsIDEpOworCQlleHQyX3plcm9faW5vZGUoZnMsIGVudHJ5LT5udW0pOworCX0KKworCWlmIChmcy0+b3B0X3NhZmUpCisJCWlmICghZXh0Ml9zeW5jKGZzKSkKKwkJCXJldHVybiAwOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGV4dDJfaW5vZGVfcmVsb2NhdG9yX3JlZihzdHJ1Y3QgZXh0Ml9mcyAqZnMsIHN0cnVjdCBleHQyX2lub2RlX3JlbG9jYXRvcl9zdGF0ZSAqc3RhdGUpCit7CisJaW50CQlpOworCXN0YXRpYyBpbnQJbnVtZXJyb3JzID0gMDsKKworCWZvciAoaT0wO2k8c3RhdGUtPnVzZWRlbnRyaWVzO2krKykKKwl7CisJCXN0cnVjdCBleHQyX2lub2RlX2VudHJ5ICplbnRyeTsKKwkJaW50CQkJIGo7CisJCXVpbnQzMl90CQkgdDsKKworCQllbnRyeSA9ICZzdGF0ZS0+aW5vZGVbaV07CisJCXQgPSBlbnRyeS0+ZGVzdDsKKworCQlmb3IgKGo9MDtqPGVudHJ5LT5udW1yZWZlcmVuY2VzO2orKykKKwkJeworCQkJc3RydWN0IGV4dDJfYnVmZmVyX2hlYWQgKmJoOworCisJCQliaCA9IGV4dDJfYnJlYWQoZnMsIGVudHJ5LT5yZWZbal0uYmxvY2spOworCQkJaWYgKCFiaCkKKwkJCQlyZXR1cm4gMDsKKworCQkJaWYgKGZzLT5vcHRfZGVidWcpCisJCQl7CisJCQkJaWYgKFBFRF9MRTMyX1RPX0NQVSgoKigodWludDMyX3QgKikoYmgtPmRhdGEgKyBlbnRyeS0+cmVmW2pdLm9mZnNldCkpKSkgIT0gZW50cnktPm51bSkKKwkJCQl7CisgCQkJCQlmcHJpbnRmKHN0ZGVyciwKKyAJCQkJCQkiaW5vZGUgJWxpIHJlZiBlcnJvciEgKC0+JWxpLCBbJWldPXslaSwgJWl9KVxuIiwKKwkJCQkJCShsb25nKSBlbnRyeS0+bnVtLAorCQkJCQkJKGxvbmcpIGVudHJ5LT5kZXN0LAorIAkJCQkJCWosCisgCQkJCQkJZW50cnktPnJlZltqXS5ibG9jaywKKwkJCQkJCShpbnQpIGVudHJ5LT5yZWZbal0ub2Zmc2V0KTsKKwkJCQkJZXh0Ml9icmVsc2UoYmgsIDApOworCisJCQkJCWlmIChudW1lcnJvcnMrKyA8IDQpCisJCQkJCQljb250aW51ZTsKKworCQkJCQlmcHV0cyAoImFsbCBpcyBub3Qgd2VsbCFcbiIsIHN0ZGVycik7CisJCQkJCXJldHVybiAwOworCQkJCX0KKwkJCX0KKworCQkJKigodWludDMyX3QgKikoYmgtPmRhdGEgKyBlbnRyeS0+cmVmW2pdLm9mZnNldCkpCisJCQkJPSBQRURfQ1BVX1RPX0xFMzIodCk7CisJCQliaC0+ZGlydHkgPSAxOworCisJCQlleHQyX2JyZWxzZShiaCwgMCk7CisJCX0KKworCQlpZiAoZW50cnktPmlzZGlyKQorCQl7CisJCQlpbnQgb2xkZ3JvdXA7CisJCQlpbnQgbmV3Z3JvdXA7CisKKwkJCW9sZGdyb3VwID0gKGVudHJ5LT5udW0gIC0gMSkKKwkJCQkJLyBFWFQyX1NVUEVSX0lOT0RFU19QRVJfR1JPVVAoZnMtPnNiKTsKKwkJCW5ld2dyb3VwID0gKGVudHJ5LT5kZXN0IC0gMSkKKwkJCQkJLyBFWFQyX1NVUEVSX0lOT0RFU19QRVJfR1JPVVAoZnMtPnNiKTsKKworCQkJZnMtPmdkW29sZGdyb3VwXS5iZ191c2VkX2RpcnNfY291bnQgPSBQRURfQ1BVX1RPX0xFMTYgKAorCQkJCUVYVDJfR1JPVVBfVVNFRF9ESVJTX0NPVU5UKGZzLT5nZFtvbGRncm91cF0pCisJCQkJLSAxKTsKKwkJCWZzLT5nZFtuZXdncm91cF0uYmdfdXNlZF9kaXJzX2NvdW50ID0gUEVEX0NQVV9UT19MRTE2ICgKKwkJCQlFWFQyX0dST1VQX1VTRURfRElSU19DT1VOVChmcy0+Z2RbbmV3Z3JvdXBdKQorCQkJCSsgMSk7CisKKwkJCWZzLT5tZXRhZGlydHkgPSBFWFQyX01FVEFfR0Q7CisJCX0KKwl9CisKKwlpZiAoZnMtPm9wdF9zYWZlKQorCQlpZiAoIWV4dDJfc3luYyhmcykpCisJCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGV4dDJfaW5vZGVfcmVsb2NhdG9yX2dyYWJfaW5vZGVzKHN0cnVjdCBleHQyX2ZzICpmcywgc3RydWN0IGV4dDJfaW5vZGVfcmVsb2NhdG9yX3N0YXRlICpzdGF0ZSkKK3sKKwlpbnQgaTsKKwlpbnQgcHRyOworCisJcHRyID0gMDsKKworCWZvciAoaT0wO2k8ZnMtPm51bWdyb3VwcztpKyspCisJCWlmIChFWFQyX0dST1VQX0ZSRUVfSU5PREVTX0NPVU5UKGZzLT5nZFtpXSkpCisJCXsKKwkJCXN0cnVjdCBleHQyX2J1ZmZlcl9oZWFkICpiaDsKKwkJCXVuc2lnbmVkIGludCBqOworCQkJaW50IG9mZnNldDsKKworCQkJYmggPSBleHQyX2JyZWFkKGZzLCBFWFQyX0dST1VQX0lOT0RFX0JJVE1BUChmcy0+Z2RbaV0pKTsKKwkJCWlmICghYmgpCisJCQkJcmV0dXJuIDA7CisJCQlvZmZzZXQgPSBpICogRVhUMl9TVVBFUl9JTk9ERVNfUEVSX0dST1VQKGZzLT5zYikgKyAxOworCisJCQlqID0gaSA/IDAgOiAxMzsKKwkJCWZvciAoO2o8RVhUMl9TVVBFUl9JTk9ERVNfUEVSX0dST1VQKGZzLT5zYik7aisrKQorCQkJCWlmICghKGJoLT5kYXRhW2o+PjNdICYgX2JpdG1hcFtqJjddKSkKKwkJCQl7CisJCQkJCXN0YXRlLT5pbm9kZVtwdHIrK10uZGVzdCA9IG9mZnNldCArIGo7CisKKwkJCQkJaWYgKHB0ciA9PSBzdGF0ZS0+dXNlZGVudHJpZXMpCisJCQkJCXsKKwkJCQkJCWV4dDJfYnJlbHNlKGJoLCAwKTsKKwkJCQkJCXJldHVybiAxOworCQkJCQl9CisJCQkJfQorCisJCQlleHQyX2JyZWxzZShiaCwgMCk7CisJCX0KKworCXBlZF9leGNlcHRpb25fdGhyb3cgKFBFRF9FWENFUFRJT05fRVJST1IsIFBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJICAgICBfKCJOb3QgZW5vdWdoIGZyZWUgaW5vZGVzISIpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBleHQyX2lub2RlX3JlbG9jYXRvcl9mbHVzaChzdHJ1Y3QgZXh0Ml9mcyAqZnMsIHN0cnVjdCBleHQyX2lub2RlX3JlbG9jYXRvcl9zdGF0ZSAqc3RhdGUpCit7CisJaWYgKCFzdGF0ZS0+dXNlZGVudHJpZXMpCisJCXJldHVybiAxOworCisJaWYgKCFkb3NjYW4oZnMsIHN0YXRlKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIWV4dDJfaW5vZGVfcmVsb2NhdG9yX2dyYWJfaW5vZGVzKGZzLCBzdGF0ZSkpCisJCXJldHVybiAwOworCisJaWYgKCFleHQyX2lub2RlX3JlbG9jYXRvcl9jb3B5KGZzLCBzdGF0ZSkpCisJCXJldHVybiAwOworCisJaWYgKCFleHQyX2lub2RlX3JlbG9jYXRvcl9yZWYoZnMsIHN0YXRlKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIWV4dDJfaW5vZGVfcmVsb2NhdG9yX2ZpbmlzaChmcywgc3RhdGUpKQorCQlyZXR1cm4gMDsKKworCXN0YXRlLT51c2VkZW50cmllcyA9IDA7CisJc3RhdGUtPnJlc29sdmVkZW50cmllcyA9IDA7CisJc3RhdGUtPmxhc3QgPSAoc3RydWN0IGV4dDJfcmVmZXJlbmNlICopZnMtPnJlbG9jYXRvcl9wb29sX2VuZDsKKworCWlmIChmcy0+b3B0X3NhZmUpCisJCWlmICghZXh0Ml9zeW5jKGZzKSkKKwkJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZXh0Ml9pbm9kZV9yZWxvY2F0b3JfbWFyayhzdHJ1Y3QgZXh0Ml9mcyAqZnMsIHN0cnVjdCBleHQyX2lub2RlX3JlbG9jYXRvcl9zdGF0ZSAqc3RhdGUsIGlub190IGlub2RlKQoreworCXN0cnVjdCBleHQyX2lub2RlCSBidWY7CisJc3RydWN0IGV4dDJfaW5vZGVfZW50cnkgKmVudDsKKwlpbnQJCQkgaTsKKworCWlmICghZXh0Ml9yZWFkX2lub2RlKGZzLCBpbm9kZSwgJmJ1ZikpCisJCXJldHVybiAwOworCisJeworCQlyZWdpc3RlciB2b2lkICphZHY7CisJCXJlZ2lzdGVyIHZvaWQgKnJlYzsKKworCQlhZHYgPSBzdGF0ZS0+aW5vZGUgKyBzdGF0ZS0+dXNlZGVudHJpZXMgKyAxOworCQlyZWMgPSBzdGF0ZS0+bGFzdCAtIEVYVDJfSU5PREVfTElOS1NfQ09VTlQoYnVmKTsKKworCQlpZiAoYWR2ID49IHJlYykKKwkJCWV4dDJfaW5vZGVfcmVsb2NhdG9yX2ZsdXNoKGZzLCBzdGF0ZSk7CisJfQorCisJc3RhdGUtPmxhc3QgLT0gRVhUMl9JTk9ERV9MSU5LU19DT1VOVChidWYpOworCisJZW50ID0gJnN0YXRlLT5pbm9kZVtzdGF0ZS0+dXNlZGVudHJpZXNdOworCWVudC0+bnVtID0gaW5vZGU7CisJZW50LT5kZXN0ID0gMDsKKwllbnQtPm51bXJlZmVyZW5jZXMgPSBFWFQyX0lOT0RFX0xJTktTX0NPVU5UKGJ1Zik7CisJZW50LT5yZWYgPSBzdGF0ZS0+bGFzdDsKKworCWZvciAoaT0wO2k8ZW50LT5udW1yZWZlcmVuY2VzO2krKykKKwl7CisJCWVudC0+cmVmW2ldLmJsb2NrID0gMDsKKwkJZW50LT5yZWZbaV0ub2Zmc2V0ID0gMDsKKwl9CisKKwlzdGF0ZS0+dXNlZGVudHJpZXMrKzsKKworCXJldHVybiAxOworfQorCisKK2ludCBleHQyX2lub2RlX3JlbG9jYXRlKHN0cnVjdCBleHQyX2ZzICpmcywgaW50IG5ld2dyb3VwcykKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZV9yZWxvY2F0b3Jfc3RhdGUgc3RhdGU7CisKKwlpZiAoZnMtPm9wdF92ZXJib3NlKQorICAgICAgICAgICAgICAgIGZwdXRzICgiZXh0Ml9pbm9kZV9yZWxvY2F0ZVxuIiwgc3RkZXJyKTsKKworCXN0YXRlLnVzZWRlbnRyaWVzID0gMDsKKwlzdGF0ZS5yZXNvbHZlZGVudHJpZXMgPSAwOworCXN0YXRlLmlub2RlID0gKHN0cnVjdCBleHQyX2lub2RlX2VudHJ5ICopZnMtPnJlbG9jYXRvcl9wb29sOworCXN0YXRlLmxhc3QgPSAoc3RydWN0IGV4dDJfcmVmZXJlbmNlICopZnMtPnJlbG9jYXRvcl9wb29sX2VuZDsKKworCWZvciAoaT1uZXdncm91cHM7aTxmcy0+bnVtZ3JvdXBzO2krKykKKwl7CisJCXN0cnVjdCBleHQyX2J1ZmZlcl9oZWFkICpiaDsKKwkJdW5zaWduZWQgaW50CQkgajsKKwkJaW50CQkJIG9mZnNldDsKKworCQliaCA9IGV4dDJfYnJlYWQoZnMsIEVYVDJfR1JPVVBfSU5PREVfQklUTUFQKGZzLT5nZFtpXSkpOworCQlpZiAoIWJoKQorCQkJcmV0dXJuIDA7CisJCW9mZnNldCA9IGkgKiBFWFQyX1NVUEVSX0lOT0RFU19QRVJfR1JPVVAoZnMtPnNiKSArIDE7CisKKwkJZm9yIChqPTA7ajxFWFQyX1NVUEVSX0lOT0RFU19QRVJfR1JPVVAoZnMtPnNiKTtqKyspCisJCQlpZiAoYmgtPmRhdGFbaj4+M10gJiBfYml0bWFwW2omN10pCisJCQkJZXh0Ml9pbm9kZV9yZWxvY2F0b3JfbWFyayhmcywgJnN0YXRlLAorCQkJCQkJCSAgb2Zmc2V0ICsgaik7CisKKwkJZXh0Ml9icmVsc2UoYmgsIDApOworCX0KKworCWlmICghZXh0Ml9pbm9kZV9yZWxvY2F0b3JfZmx1c2goZnMsICZzdGF0ZSkpCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisjZW5kaWYgLyogIURJU0NPVkVSX09OTFkgKi8KKwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9leHQyL2V4dDJfbWV0YS5jIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9leHQyL2V4dDJfbWV0YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0ODA5N2MKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9tZXRhLmMKQEAgLTAsMCArMSwxNDYgQEAKKy8qCisgICAgZXh0Ml9tZXRhLmMgLS0gZXh0MiBtZXRhZGF0YSBtb3ZlcgorICAgIENvcHlyaWdodCAoQykgMTk5OC0yMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworI2lmbmRlZiBESVNDT1ZFUl9PTkxZCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgImV4dDIuaCIKKworaW50IGV4dDJfbWV0YWRhdGFfcHVzaChzdHJ1Y3QgZXh0Ml9mcyAqZnMsIGJsa190IG5ld3NpemUpCit7CisJaW50ICAgaTsKKwlpbnQgICBuZXdnZGJsb2NrczsKKwlibGtfdCBuZXdpdG9mZnNldDsKKworCW5ld2dkYmxvY2tzID0gcGVkX2Rpdl9yb3VuZF91cCAobmV3c2l6ZQorICAgICAgICAgICAgICAgICAgICAgICAgLSBFWFQyX1NVUEVSX0ZJUlNUX0RBVEFfQkxPQ0soZnMtPnNiKSwKKwkJCSAgICAgIEVYVDJfU1VQRVJfQkxPQ0tTX1BFUl9HUk9VUChmcy0+c2IpKTsKKwluZXdnZGJsb2NrcyA9IHBlZF9kaXZfcm91bmRfdXAgKG5ld2dkYmxvY2tzCisgICAgICAgICAgICAgICAgICAgICAgICAqIHNpemVvZihzdHJ1Y3QgZXh0Ml9ncm91cF9kZXNjKSwKKwkJCSAgICAgIGZzLT5ibG9ja3NpemUpOworCW5ld2l0b2Zmc2V0ID0gbmV3Z2RibG9ja3MgKyAzOworCisJaWYgKG5ld2l0b2Zmc2V0IDw9IGZzLT5pdG9mZnNldCkKKwkJcmV0dXJuIDE7CisKKwlmb3IgKGk9MDtpPGZzLT5udW1ncm91cHM7aSsrKQorCXsKKwkJYmxrX3QgZGlmZjsKKwkJYmxrX3QgajsKKwkJYmxrX3QgZnJvbWJsb2NrOworCQlibGtfdCBzdGFydDsKKworCQlzdGFydCA9IChpICogRVhUMl9TVVBFUl9CTE9DS1NfUEVSX0dST1VQKGZzLT5zYikpCisJCQkrIEVYVDJfU1VQRVJfRklSU1RfREFUQV9CTE9DSyhmcy0+c2IpOworCisJCWlmIChFWFQyX0dST1VQX0lOT0RFX1RBQkxFKGZzLT5nZFtpXSkgPj0gc3RhcnQgKyBuZXdpdG9mZnNldAorCQkgICAgJiYgRVhUMl9HUk9VUF9CTE9DS19CSVRNQVAoZnMtPmdkW2ldKSA+PSBzdGFydCArIG5ld2l0b2Zmc2V0IC0gMgorCQkgICAgJiYgRVhUMl9HUk9VUF9JTk9ERV9CSVRNQVAoZnMtPmdkW2ldKSA+PSBzdGFydCArIG5ld2l0b2Zmc2V0IC0gMSkKKwkJCWNvbnRpbnVlOworCisJCWRpZmYgPSBuZXdpdG9mZnNldCAtIChFWFQyX0dST1VQX0lOT0RFX1RBQkxFKGZzLT5nZFtpXSkgLSBzdGFydCk7CisKKwkJLyogaW5vZGUgdGFibGUgKi8KKwkJZnJvbWJsb2NrID0gRVhUMl9HUk9VUF9JTk9ERV9UQUJMRShmcy0+Z2RbaV0pICsgZnMtPmlub2RlYmxvY2tzOworCisJCWlmIChmcy0+b3B0X2RlYnVnKQorCQl7CisJCQlmb3IgKGo9MDtqPGRpZmY7aisrKQorCQkJCWlmIChleHQyX2dldF9ibG9ja19zdGF0ZShmcywgZnJvbWJsb2NrK2opKQorCQkJCXsKKwkJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCQkiZXJyb3I6IGJsb2NrIHJlbG9jYXRvciAiCisJCQkJCQkic2hvdWxkIGhhdmUgcmVsb2NhdGVkICIKKwkJCQkJCSIlaVxuIiwKKwkJCQkJCWZyb21ibG9jayk7CisKKwkJCQkJcmV0dXJuIDA7CisJCQkJfQorCQl9CisKKwkJZm9yIChqPTA7ajxkaWZmO2orKykKKwkJCWlmICghZXh0Ml9zZXRfYmxvY2tfc3RhdGUoZnMsIGZyb21ibG9jaytqLCAxLCAwKSkKKwkJCQlyZXR1cm4gMDsKKworCQlpZiAoIWV4dDJfbW92ZV9ibG9ja3MoZnMsCisJCQkJICAgICAgRVhUMl9HUk9VUF9JTk9ERV9UQUJMRShmcy0+Z2RbaV0pLAorCQkJCSAgICAgIGZzLT5pbm9kZWJsb2NrcywKKwkJCQkgICAgICBFWFQyX0dST1VQX0lOT0RFX1RBQkxFKGZzLT5nZFtpXSkgKyBkaWZmKSkKKwkJCXJldHVybiAwOworCQlmcy0+Z2RbaV0uYmdfaW5vZGVfdGFibGUgPSBQRURfQ1BVX1RPX0xFMzIgKAorCQkJRVhUMl9HUk9VUF9JTk9ERV9UQUJMRShmcy0+Z2RbaV0pICsgZGlmZik7CisJCWZzLT5tZXRhZGlydHkgfD0gRVhUMl9NRVRBX0dEOworCisJCWlmIChmcy0+b3B0X3NhZmUpCisJCQlpZiAoIWV4dDJfc3luYyhmcykpCisJCQkJcmV0dXJuIDA7CisKKwkJLyogYmxvY2sgYml0bWFwIGFuZCBpbm9kZSBiaXRtYXAgKi8KKwkJZnJvbWJsb2NrID0gRVhUMl9HUk9VUF9JTk9ERV9UQUJMRShmcy0+Z2RbaV0pOworCQlpZiAoZXh0Ml9pc19ncm91cF9zcGFyc2UoZnMsIGkpKQorCQl7CisJCQlpZiAoIWV4dDJfY29weV9ibG9jayhmcywKKwkJCQlFWFQyX0dST1VQX0lOT0RFX0JJVE1BUChmcy0+Z2RbaV0pLAorCQkJCUVYVDJfR1JPVVBfSU5PREVfQklUTUFQKGZzLT5nZFtpXSkgKyBkaWZmKSkKKwkJCQlyZXR1cm4gMDsKKwkJCWZzLT5nZFtpXS5iZ19pbm9kZV9iaXRtYXAgPSBQRURfQ1BVX1RPX0xFMzIgKAorCQkJCUVYVDJfR1JPVVBfSU5PREVfQklUTUFQKGZzLT5nZFtpXSkgKyBkaWZmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZzLT5tZXRhZGlydHkgfD0gRVhUMl9NRVRBX0dEOworCisJCQlpZiAoZnMtPm9wdF9zYWZlKQorCQkJCWlmICghZXh0Ml9zeW5jKGZzKSkKKwkJCQkJcmV0dXJuIDA7CisKKwkJCWlmICghZXh0Ml9jb3B5X2Jsb2NrKGZzLAorCQkJCUVYVDJfR1JPVVBfQkxPQ0tfQklUTUFQKGZzLT5nZFtpXSksCisJCQkJRVhUMl9HUk9VUF9CTE9DS19CSVRNQVAoZnMtPmdkW2ldKStkaWZmKSkKKwkJCQlyZXR1cm4gMDsKKwkJCWZzLT5nZFtpXS5iZ19ibG9ja19iaXRtYXAgPSBQRURfQ1BVX1RPX0xFMzIgKAorCQkJCUVYVDJfR1JPVVBfQkxPQ0tfQklUTUFQKGZzLT5nZFtpXSkgKyBkaWZmKTsKKwkJCWZzLT5tZXRhZGlydHkgfD0gRVhUMl9NRVRBX0dEOworCisJCQlpZiAoZnMtPm9wdF9zYWZlKQorCQkJCWlmICghZXh0Ml9zeW5jKGZzKSkKKwkJCQkJcmV0dXJuIDA7CisKKwkJCWZyb21ibG9jayA9IEVYVDJfR1JPVVBfQkxPQ0tfQklUTUFQKGZzLT5nZFtpXSk7CisJCX0KKworCQlleHQyX3plcm9fYmxvY2tzKGZzLCBmcm9tYmxvY2stZGlmZiwgZGlmZik7CisJCWZvciAoaj0wO2o8ZGlmZjtqKyspCisJCQlpZiAoIWV4dDJfc2V0X2Jsb2NrX3N0YXRlKGZzLCBmcm9tYmxvY2srai1kaWZmLCAwLCAwKSkKKwkJCQlyZXR1cm4gMDsKKworCQlpZiAoZnMtPm9wdF92ZXJib3NlKQorCQkJZnByaW50ZihzdGRlcnIsCisJCQkJImV4dDJfbWV0YWRhdGFfcHVzaDogZ3JvdXAgJWkvJWlcciIsCisJCQkJaSsxLCBmcy0+bnVtZ3JvdXBzKTsKKwl9CisKKwlmcy0+aXRvZmZzZXQgPSBuZXdpdG9mZnNldDsKKworCWlmIChmcy0+b3B0X3ZlcmJvc2UpCisgICAgICAgICAgICAgICAgZnB1dGMgKCdcbicsIHN0ZGVycik7CisKKwlyZXR1cm4gMTsKK30KKyNlbmRpZiAvKiAhRElTQ09WRVJfT05MWSAqLwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9leHQyL2V4dDJfbWtmcy5jIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9leHQyL2V4dDJfbWtmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MTc1YTgKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9ta2ZzLmMKQEAgLTAsMCArMSw2MDAgQEAKKy8qCisgICAgZXh0Ml9ta2ZzLmMgLS0gZXh0MiBmcyBjcmVhdG9yCisgICAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxLCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaWZuZGVmIERJU0NPVkVSX09OTFkKKworI2RlZmluZSBVU0VfRVhUMl9JU19EQVRBX0JMT0NLCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHV1aWQvdXVpZC5oPgorI2luY2x1ZGUgImV4dDIuaCIKKworLyogZm9ybXVsYSBncmFiYmVkIGZyb20gbGludXggZXh0MiBrZXJuZWwgc291cmNlCisgKiAKKyAqIHJldHVybnMgMSBpZmY6CisgKiAJeCA9PSB5Xk4sICAgICAgIE4gaXMgc29tZSBuYXR1cmFsIG51bWJlcgorICogT1IJeCA9PSAwCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIGludCBpc19yb290KGludCB4LCBpbnQgeSkKK3sKKwlpZiAoIXgpIHJldHVybiAxOworCisJd2hpbGUgKDEpCisJeworCQlpZiAoeCA9PSAxKSByZXR1cm4gMTsKKworCQlpZiAoeCAlIHkpIHJldHVybiAwOworCisJCXggLz0geTsKKwl9Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBpc19ncm91cF9zcGFyc2UoaW50IHNwYXJzZXNiZnMsIGludCBncm91cCkKK3sKKwlpZiAoIXNwYXJzZXNiZnMpCisJCXJldHVybiAxOworCisJaWYgKGlzX3Jvb3QoZ3JvdXAsIDMpIHx8IGlzX3Jvb3QoZ3JvdXAsIDUpIHx8IGlzX3Jvb3QoZ3JvdXAsIDcpKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCisvKiBoYXMgaW1wbGljaXQgcGFyYW1ldGVyICdzYicgISEgKi8KKyNkZWZpbmUgaXNfc3BhcnNlKGdyb3VwKSBpc19ncm91cF9zcGFyc2UoRVhUMl9TVVBFUl9GRUFUVVJFX1JPX0NPTVBBVCgqc2IpIFwKKwkgICAgICAgCQkJJiBFWFQyX0ZFQVRVUkVfUk9fQ09NUEFUX1NQQVJTRV9TVVBFUiwgKGdyb3VwKSkKKworc3RhdGljIGludCBleHQyX21rZnNfd3JpdGVfbWFpbihzdHJ1Y3QgZXh0Ml9kZXZfaGFuZGxlICpoYW5kbGUsCisJCQkJc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKnNiLAorCQkJCXN0cnVjdCBleHQyX2dyb3VwX2Rlc2MgKmdkKQoreworCWludCBmcmVlaXQ7CisJaW50IGk7CisJaW50IG51bWdyb3VwczsKKwlpbnQgZ2RibG9ja3M7CisJdW5zaWduZWQgY2hhciAqc2JidWY7CisJc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKnNiX2Zvcl9pbzsKKworCWZyZWVpdCA9IDA7CisJc2JidWYgPSAodW5zaWduZWQgY2hhciAqKXNiOworCXNiX2Zvcl9pbyA9IHNiOworCWlmIChFWFQyX1NVUEVSX0xPR19CTE9DS19TSVpFKCpzYikpCisJeworCQlzYmJ1ZiA9IHBlZF9tYWxsb2MoMTAyNCA8PCBFWFQyX1NVUEVSX0xPR19CTE9DS19TSVpFKCpzYikpOworCQlpZiAoIShoYW5kbGUtPm9wcy0+cmVhZCkoaGFuZGxlLT5jb29raWUsIHNiYnVmLCAwLCAxKSkKKwkJCXJldHVybiAwOworCQltZW1jcHkgKHNiYnVmKzEwMjQsIHNiLCAxMDI0KTsKKwkJZnJlZWl0ID0gMTsKKwkJc2JfZm9yX2lvID0gKHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrKikgKHNiYnVmICsgMTAyNCk7CisJfQorCisJbnVtZ3JvdXBzID0gcGVkX2Rpdl9yb3VuZF91cCAoRVhUMl9TVVBFUl9CTE9DS1NfQ09VTlQoKnNiKQorCQkJICAgICAgICAtIEVYVDJfU1VQRVJfRklSU1RfREFUQV9CTE9DSygqc2IpLAorCQkJICAgIEVYVDJfU1VQRVJfQkxPQ0tTX1BFUl9HUk9VUCgqc2IpKTsKKwlnZGJsb2NrcyA9IHBlZF9kaXZfcm91bmRfdXAgKG51bWdyb3VwcyAqIHNpemVvZihzdHJ1Y3QgZXh0Ml9ncm91cF9kZXNjKSwKKwkJCSAgIDEwMjQgPDwgRVhUMl9TVVBFUl9MT0dfQkxPQ0tfU0laRSgqc2IpKTsKKworCWZvciAoaT0wO2k8bnVtZ3JvdXBzO2krKykKKwl7CisJCWlmIChpc19zcGFyc2UoaSkpCisJCXsKKwkJCWludCBvZmZzZXQ7CisKKwkJCW9mZnNldCA9IEVYVDJfU1VQRVJfRklSU1RfREFUQV9CTE9DSygqc2IpCisJCQkJICsgaSAqIEVYVDJfU1VQRVJfQkxPQ0tTX1BFUl9HUk9VUCgqc2IpOworCisJCQlzYl9mb3JfaW8tPnNfYmxvY2tfZ3JvdXBfbnIgPSBQRURfQ1BVX1RPX0xFMTYgKGkpOworCisJCQlpZiAoIWhhbmRsZS0+b3BzLT53cml0ZShoYW5kbGUtPmNvb2tpZSwgc2JidWYsCisJCQkJCSAgICAgICAgb2Zmc2V0LCAxKSkKKwkJCQlyZXR1cm4gMDsKKwkJCWlmICghaGFuZGxlLT5vcHMtPndyaXRlKGhhbmRsZS0+Y29va2llLCBnZCwgb2Zmc2V0KzEsCisJCQkJCQlnZGJsb2NrcykpCisJCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlzYl9mb3JfaW8tPnNfYmxvY2tfZ3JvdXBfbnIgPSAwOworCisJaWYgKGZyZWVpdCkKKwkJcGVkX2ZyZWUoc2JidWYpOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGV4dDJfbWtmc193cml0ZV9tZXRhKHN0cnVjdCBleHQyX2Rldl9oYW5kbGUgKmhhbmRsZSwKKwkJCQlzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqc2IsCisJCQkJc3RydWN0IGV4dDJfZ3JvdXBfZGVzYyAqZ2QsCisJCQkJUGVkVGltZXIqIHRpbWVyKQoreworCWludCBibG9ja3NpemU7CisJaW50IGdkdHNpemU7CisJaW50IGk7CisJaW50IGl0c2l6ZTsKKwlpbnQgbnVtZ3JvdXBzOworCXVuc2lnbmVkIGNoYXIgKmJiOworCXVuc2lnbmVkIGNoYXIgKmliOworCXVuc2lnbmVkIGNoYXIgKnplcm87CisKKwlibG9ja3NpemUgPSAxIDw8IChFWFQyX1NVUEVSX0xPR19CTE9DS19TSVpFKCpzYikgKyAxMyk7CisKKwludW1ncm91cHMgPSBwZWRfZGl2X3JvdW5kX3VwIChFWFQyX1NVUEVSX0JMT0NLU19DT1VOVCgqc2IpCisJCQkJLSBFWFQyX1NVUEVSX0ZJUlNUX0RBVEFfQkxPQ0soKnNiKSwKKwkJCSAgICBFWFQyX1NVUEVSX0JMT0NLU19QRVJfR1JPVVAoKnNiKSk7CisJaXRzaXplID0gcGVkX2Rpdl9yb3VuZF91cCAoc2l6ZW9mKHN0cnVjdCBleHQyX2lub2RlKQorCQkJCSogRVhUMl9TVVBFUl9JTk9ERVNfUEVSX0dST1VQKCpzYiksCisJCQkgKDEwMjQgPDwgRVhUMl9TVVBFUl9MT0dfQkxPQ0tfU0laRSgqc2IpKSk7CisJZ2R0c2l6ZSA9IHBlZF9kaXZfcm91bmRfdXAgKHNpemVvZihzdHJ1Y3QgZXh0Ml9ncm91cF9kZXNjKSAqIG51bWdyb3VwcywKKwkJCSAgKDEwMjQgPDwgRVhUMl9TVVBFUl9MT0dfQkxPQ0tfU0laRSgqc2IpKSk7CisKKwliYiA9IHBlZF9tYWxsb2MoMTAyNCA8PCBFWFQyX1NVUEVSX0xPR19CTE9DS19TSVpFKCpzYikpOworCWlmICghYmIpIGdvdG8gZXJyb3I7CisJaWIgPSBwZWRfbWFsbG9jKDEwMjQgPDwgRVhUMl9TVVBFUl9MT0dfQkxPQ0tfU0laRSgqc2IpKTsKKwlpZiAoIWliKSBnb3RvIGVycm9yX2ZyZWVfYmI7CisJemVybyA9IHBlZF9tYWxsb2MoKDEwMjQgPDwgRVhUMl9TVVBFUl9MT0dfQkxPQ0tfU0laRSgqc2IpKSAqIGl0c2l6ZSk7CisJaWYgKCF6ZXJvKSBnb3RvIGVycm9yX2ZyZWVfemVybzsKKworCW1lbXNldCh6ZXJvLCAwLCAoMTAyNCA8PCBFWFQyX1NVUEVSX0xPR19CTE9DS19TSVpFKCpzYikpICogaXRzaXplKTsKKworCXBlZF90aW1lcl9yZXNldCAodGltZXIpOworCXBlZF90aW1lcl9zZXRfc3RhdGVfbmFtZSAodGltZXIsIF8oIndyaXRpbmcgcGVyLWdyb3VwIG1ldGFkYXRhIikpOworCisJZm9yIChpPTA7aTxudW1ncm91cHM7aSsrKQorCXsKKwkJaW50IGFkbWluOworCQlibGtfdCBiYmJsb2NrOworCQlpbnQgZ3JvdXBzaXplOworCQlpbnQgZ3JvdXBvZmZzZXQ7CisJCWJsa190IGliYmxvY2s7CisJCWludCBqOworCisJCXBlZF90aW1lcl91cGRhdGUgKHRpbWVyLCAxLjAgKiBpIC8gbnVtZ3JvdXBzKTsKKworCQlncm91cG9mZnNldCA9IGkqRVhUMl9TVVBFUl9CTE9DS1NfUEVSX0dST1VQKCpzYikKKwkJCSAgICAgICsgRVhUMl9TVVBFUl9GSVJTVF9EQVRBX0JMT0NLKCpzYik7CisJCWdyb3Vwc2l6ZSA9IFBFRF9NSU4oRVhUMl9TVVBFUl9CTE9DS1NfQ09VTlQoKnNiKSAtIGdyb3Vwb2Zmc2V0LAorCQkJCSAgICBFWFQyX1NVUEVSX0JMT0NLU19QRVJfR1JPVVAoKnNiKSk7CisKKwkJYWRtaW4gPSBpdHNpemUgKyAyOworCQliYmJsb2NrID0gZ3JvdXBvZmZzZXQ7CisJCWliYmxvY2sgPSBncm91cG9mZnNldCArIDE7CisJCWlmIChpc19zcGFyc2UoaSkpCisJCXsKKwkJCWFkbWluICs9IGdkdHNpemUgKyAxOworCQkJYmJibG9jayA9IGdyb3Vwb2Zmc2V0ICsgZ2R0c2l6ZSArIDE7CisJCQlpYmJsb2NrID0gZ3JvdXBvZmZzZXQgKyBnZHRzaXplICsgMjsKKwkJfQorCisJCXsKKwkJCW1lbXNldChiYiwgMCwgMTAyNCA8PCBFWFQyX1NVUEVSX0xPR19CTE9DS19TSVpFKCpzYikpOworCQkJaWYgKGlzX3NwYXJzZShpKSkKKwkJCQlmb3IgKGo9MDtqPGdkdHNpemUrMTtqKyspCisJCQkJCWJiW2o+PjNdIHw9IF9iaXRtYXBbaiY3XTsKKworCQkJaiA9IGJiYmxvY2sgLSBncm91cG9mZnNldDsKKwkJCWJiW2o+PjNdIHw9IF9iaXRtYXBbaiY3XTsKKworCQkJaiA9IGliYmxvY2sgLSBncm91cG9mZnNldDsKKwkJCWJiW2o+PjNdIHw9IF9iaXRtYXBbaiY3XTsKKworCQkJZm9yIChqPTA7ajxpdHNpemU7aisrKQorCQkJeworCQkJCWludCBrID0gaiArIGdkdHNpemUgKyAzOworCisJCQkJYmJbaz4+M10gfD0gX2JpdG1hcFtrJjddOworCQkJfQorCisJCQlmb3IgKGo9Z3JvdXBzaXplO2o8YmxvY2tzaXplO2orKykKKwkJCQliYltqPj4zXSB8PSBfYml0bWFwW2omN107CisKKwkJCWlmICghaGFuZGxlLT5vcHMtPndyaXRlKGhhbmRsZS0+Y29va2llLCBiYiwgYmJibG9jaywgMSkpCisJCQkJZ290byBlcnJvcl9mcmVlX3plcm87CisJCX0KKworCQl7CisJCQltZW1zZXQoaWIsIDAsIDEwMjQgPDwgRVhUMl9TVVBFUl9MT0dfQkxPQ0tfU0laRSgqc2IpKTsKKworCQkJZm9yIChqPUVYVDJfU1VQRVJfSU5PREVTX1BFUl9HUk9VUCgqc2IpO2o8YmxvY2tzaXplO2orKykKKwkJCQliYltqPj4zXSB8PSBfYml0bWFwW2omN107CisKKwkJCWlmICghaGFuZGxlLT5vcHMtPndyaXRlKGhhbmRsZS0+Y29va2llLCBpYiwgaWJibG9jaywgMSkpCisJCQkJZ290byBlcnJvcl9mcmVlX3plcm87CisJCX0KKworCQlpZiAoIWhhbmRsZS0+b3BzLT53cml0ZShoYW5kbGUtPmNvb2tpZSwgemVybywKKwkJCQkJZ3JvdXBvZmZzZXQgKyBnZHRzaXplICsgMywgaXRzaXplKSkKKwkJCWdvdG8gZXJyb3JfZnJlZV96ZXJvOworCisJCWdkW2ldLmJnX2Jsb2NrX2JpdG1hcCA9IFBFRF9DUFVfVE9fTEUzMihiYmJsb2NrKTsKKwkJZ2RbaV0uYmdfaW5vZGVfYml0bWFwID0gUEVEX0NQVV9UT19MRTMyKGliYmxvY2spOworCQlnZFtpXS5iZ19pbm9kZV90YWJsZSA9IFBFRF9DUFVfVE9fTEUzMihncm91cG9mZnNldCArIGdkdHNpemUKKwkJCQkJCSAgICAgICArIDMpOworCQlnZFtpXS5iZ19mcmVlX2Jsb2Nrc19jb3VudCA9IFBFRF9DUFVfVE9fTEUxNihncm91cHNpemUgLSBhZG1pbik7CisJCWdkW2ldLmJnX2ZyZWVfaW5vZGVzX2NvdW50ID0gUEVEX0NQVV9UT19MRTE2KAorCQkJRVhUMl9TVVBFUl9JTk9ERVNfUEVSX0dST1VQKCpzYikpOworCQlnZFtpXS5iZ191c2VkX2RpcnNfY291bnQgPSAwOworCQlnZFtpXS5iZ191c2VkX2RpcnNfY291bnQgPSAwOworCQlnZFtpXS5iZ19wYWQgPSAwOworCQlnZFtpXS5iZ19yZXNlcnZlZFswXSA9IDA7CisJCWdkW2ldLmJnX3Jlc2VydmVkWzFdID0gMDsKKwkJZ2RbaV0uYmdfcmVzZXJ2ZWRbMl0gPSAwOworCisJCXNiLT5zX2ZyZWVfYmxvY2tzX2NvdW50ID0gUEVEX0NQVV9UT19MRTMyICgKKwkJCUVYVDJfU1VQRVJfRlJFRV9CTE9DS1NfQ09VTlQoKnNiKQorCQkJKyBFWFQyX0dST1VQX0ZSRUVfQkxPQ0tTX0NPVU5UKGdkW2ldKSk7CisJfQorCisJcGVkX3RpbWVyX3VwZGF0ZSAodGltZXIsIDEuMCk7CisKKwlwZWRfZnJlZSh6ZXJvKTsKKwlwZWRfZnJlZShpYik7CisJcGVkX2ZyZWUoYmIpOworCXJldHVybiAxOworCitlcnJvcl9mcmVlX3plcm86CisJcGVkX2ZyZWUoemVybyk7CisJcGVkX2ZyZWUoaWIpOworZXJyb3JfZnJlZV9iYjoKKwlwZWRfZnJlZShiYik7CitlcnJvcjoKKwlyZXR1cm4gMDsKK30KKworLyogcmV0dXJucyB0aGUgb2Zmc2V0IGludG8gdGhlIGJ1ZmZlciBvZiB0aGUgc3RhcnQgb2YgdGhlIG5leHQgZGlyIGVudHJ5ICovCitzdGF0aWMgaW50IF9zZXRfZGlyZW50KHZvaWQqIGJ1ZiwgaW50IG9mZnNldCwgaW50IGJsb2NrX3NpemUsIGludCBpc19sYXN0LAorCQkgICAgICAgdWludDMyX3QgaW5vZGUsIGNoYXIqIG5hbWUsIGludCBmaWxlX3R5cGUpCit7CisJc3RydWN0IGV4dDJfZGlyX2VudHJ5XzIgKmRpcmVudCA9ICh2b2lkKikgKCgoY2hhciopYnVmKSArIG9mZnNldCk7CisJaW50IG5hbWVfbGVuID0gc3RybGVuKG5hbWUpOworCWludCByZWNfbGVuOworCisJaWYgKGlzX2xhc3QpCisJCXJlY19sZW4gPSBibG9ja19zaXplIC0gb2Zmc2V0OworCWVsc2UKKwkJcmVjX2xlbiA9IHBlZF9yb3VuZF91cF90byhuYW1lX2xlbiArIDEgKyA4LCA0KTsKKworCW1lbXNldCAoZGlyZW50LCAwLCByZWNfbGVuKTsKKworCWRpcmVudC0+aW5vZGUgPSBQRURfQ1BVX1RPX0xFMzIoaW5vZGUpOworCWRpcmVudC0+bmFtZV9sZW4gPSBuYW1lX2xlbjsKKwlkaXJlbnQtPnJlY19sZW4gPSBQRURfQ1BVX1RPX0xFMTYocmVjX2xlbik7CisJZGlyZW50LT5maWxlX3R5cGUgPSBmaWxlX3R5cGU7CisJc3RyY3B5KGRpcmVudC0+bmFtZSwgbmFtZSk7CisKKwlyZXR1cm4gb2Zmc2V0ICsgcmVjX2xlbjsKK30KKworc3RhdGljIGludCBleHQyX21rZnNfY3JlYXRlX2xvc3RfYW5kX2ZvdW5kX2lub2RlKHN0cnVjdCBleHQyX2ZzICpmcykKK3sKKwlzdHJ1Y3QgZXh0Ml9idWZmZXJfaGVhZCAqYmg7CisJYmxrX3QgYmxvY2tzWzEyXTsKKwl1aW50MzJfdCogZGF0YSA9IHBlZF9tYWxsb2MgKChmcy0+YmxvY2tzaXplIC8gNCkgKiBzaXplb2YodWludDMyX3QpKTsKKwlpbnQgaTsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZSBpbm9kZTsKKwlpbnQgb2Zmc2V0OworCisJZm9yIChpPTA7aTwxMjtpKyspCisJeworCQlpZiAoIShibG9ja3NbaV0gPSBleHQyX2ZpbmRfZnJlZV9ibG9jayhmcykpKQorCQkJcmV0dXJuIDA7CisKKwkJaWYgKCFleHQyX3NldF9ibG9ja19zdGF0ZShmcywgYmxvY2tzW2ldLCAxLCAxKSkKKwkJCXJldHVybiAwOworCX0KKworCS8qIGNyZWF0ZSB0aGUgZGlyZWN0b3J5IGVudHJpZXMsIHByZWFsbG9jYXRpbmcgbG90cyBvZiBibG9ja3MgKi8KKwkvKiBmaXJzdCBibG9jayBjb250YWlucyAuIGFuZCAuLiAqLworCWJoID0gZXh0Ml9iY3JlYXRlKGZzLCBibG9ja3NbMF0pOworCWlmICghYmgpCisJCXJldHVybiAwOworCW1lbXNldChiaC0+ZGF0YSwgMCwgZnMtPmJsb2Nrc2l6ZSk7CisJb2Zmc2V0ID0gX3NldF9kaXJlbnQoYmgtPmRhdGEsIDAsIGZzLT5ibG9ja3NpemUsIDAsCisJCQkgICAgIDExLCAiLiIsIEVYVDJfRlRfRElSKTsKKwlvZmZzZXQgPSBfc2V0X2RpcmVudChiaC0+ZGF0YSwgb2Zmc2V0LCBmcy0+YmxvY2tzaXplLCAxLAorCQkJICAgICBFWFQyX1JPT1RfSU5PLCAiLi4iLCBFWFQyX0ZUX0RJUik7CisJYmgtPmRpcnR5ID0gMTsKKwlleHQyX2JyZWxzZShiaCwgMSk7CisKKwkvKiBzdWJzZXF1ZW50IGJsb2NrcyBhcmUgZW1wdHkgKi8KKwltZW1zZXQoZGF0YSwgMCwgZnMtPmJsb2Nrc2l6ZSk7CisJZGF0YVswXSA9IDA7CisJZGF0YVsxXSA9IFBFRF9DUFVfVE9fTEUzMihmcy0+YmxvY2tzaXplKTsKKwlmb3IgKGk9MTtpPDEyO2krKykKKwl7CisJCWJoID0gZXh0Ml9iY3JlYXRlKGZzLCBibG9ja3NbaV0pOworCQltZW1jcHkoYmgtPmRhdGEsIGRhdGEsIGZzLT5ibG9ja3NpemUpOworCQliaC0+ZGlydHkgPSAxOworCQlleHQyX2JyZWxzZShiaCwgMSk7CisJfQorCisJLyogY3JlYXRlIGlub2RlICovCisJbWVtc2V0KCZpbm9kZSwgMCwgc2l6ZW9mKHN0cnVjdCBleHQyX2lub2RlKSk7CisJaW5vZGUuaV9tb2RlID0gUEVEX0NQVV9UT19MRTE2KFNfSUZESVIgfCAwNzU1KTsKKwlpbm9kZS5pX3VpZCA9IDA7CisJaW5vZGUuaV9zaXplID0gUEVEX0NQVV9UT19MRTMyKDEyICogZnMtPmJsb2Nrc2l6ZSk7CisJaW5vZGUuaV9hdGltZSA9IFBFRF9DUFVfVE9fTEUzMih0aW1lKE5VTEwpKTsKKwlpbm9kZS5pX2N0aW1lID0gUEVEX0NQVV9UT19MRTMyKHRpbWUoTlVMTCkpOworCWlub2RlLmlfbXRpbWUgPSBQRURfQ1BVX1RPX0xFMzIodGltZShOVUxMKSk7CisJaW5vZGUuaV9kdGltZSA9IDA7CisJaW5vZGUuaV9naWQgPSAwOworCWlub2RlLmlfbGlua3NfY291bnQgPSBQRURfQ1BVX1RPX0xFMTYoMik7CisJaW5vZGUuaV9ibG9ja3MgPSBQRURfQ1BVX1RPX0xFMzIoKDEyICogZnMtPmJsb2Nrc2l6ZSkgPj4gOSk7CisJaW5vZGUuaV9mbGFncyA9IDA7CisJZm9yIChpPTA7aTwxMjtpKyspCisJCWlub2RlLmlfYmxvY2tbaV0gPSBQRURfQ1BVX1RPX0xFMzIoYmxvY2tzW2ldKTsKKworCWlmICghZXh0Ml93cml0ZV9pbm9kZShmcywgMTEsICZpbm9kZSkpCisJCXJldHVybiAwOworCWZzLT5nZFswXS5iZ191c2VkX2RpcnNfY291bnQgPSBQRURfQ1BVX1RPX0xFMTYoCisJCUVYVDJfR1JPVVBfVVNFRF9ESVJTX0NPVU5UKGZzLT5nZFswXSkgKyAxKTsKKwlmcy0+bWV0YWRpcnR5IHw9IEVYVDJfTUVUQV9HRDsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGV4dDJfbWtmc19jcmVhdGVfcm9vdF9pbm9kZShzdHJ1Y3QgZXh0Ml9mcyAqZnMpCit7CisJc3RydWN0IGV4dDJfYnVmZmVyX2hlYWQgKmJoOworCWJsa190IGJsb2NrOworCXN0cnVjdCBleHQyX2lub2RlIGlub2RlOworCWludCBvZmZzZXQ7CisKKwlpZiAoIShibG9jayA9IGV4dDJfZmluZF9mcmVlX2Jsb2NrKGZzKSkpCisJCXJldHVybiAwOworCWlmICghZXh0Ml9zZXRfYmxvY2tfc3RhdGUoZnMsIGJsb2NrLCAxLCAxKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBjcmVhdGUgZGlyZWN0b3J5IGVudHJpZXMgKi8KKwliaCA9IGV4dDJfYmNyZWF0ZShmcywgYmxvY2spOworCW1lbXNldChiaC0+ZGF0YSwgMCwgZnMtPmJsb2Nrc2l6ZSk7CisJb2Zmc2V0ID0gX3NldF9kaXJlbnQoYmgtPmRhdGEsIDAsIGZzLT5ibG9ja3NpemUsIDAsCisJCQkgICAgIEVYVDJfUk9PVF9JTk8sICIuIiwgRVhUMl9GVF9ESVIpOworCW9mZnNldCA9IF9zZXRfZGlyZW50KGJoLT5kYXRhLCBvZmZzZXQsIGZzLT5ibG9ja3NpemUsIDAsCisJCQkgICAgIEVYVDJfUk9PVF9JTk8sICIuLiIsIEVYVDJfRlRfRElSKTsKKwlvZmZzZXQgPSBfc2V0X2RpcmVudChiaC0+ZGF0YSwgb2Zmc2V0LCBmcy0+YmxvY2tzaXplLCAxLAorCQkJICAgICAxMSwgImxvc3QrZm91bmQiLCBFWFQyX0ZUX0RJUik7CisJYmgtPmRpcnR5ID0gMTsKKwlpZiAoIWV4dDJfYnJlbHNlKGJoLCAxKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBjcmVhdGUgaW5vZGUgKi8KKwltZW1zZXQoJmlub2RlLCAwLCBzaXplb2Yoc3RydWN0IGV4dDJfaW5vZGUpKTsKKwlpbm9kZS5pX21vZGUgPSBQRURfQ1BVX1RPX0xFMTYoU19JRkRJUiB8IDA3NTUpOworCWlub2RlLmlfdWlkID0gMDsKKwlpbm9kZS5pX3NpemUgPSBQRURfQ1BVX1RPX0xFMzIoZnMtPmJsb2Nrc2l6ZSk7CisJaW5vZGUuaV9hdGltZSA9IFBFRF9DUFVfVE9fTEUzMih0aW1lKE5VTEwpKTsKKwlpbm9kZS5pX2N0aW1lID0gUEVEX0NQVV9UT19MRTMyKHRpbWUoTlVMTCkpOworCWlub2RlLmlfbXRpbWUgPSBQRURfQ1BVX1RPX0xFMzIodGltZShOVUxMKSk7CisJaW5vZGUuaV9kdGltZSA9IDA7CisJaW5vZGUuaV9naWQgPSAwOworCWlub2RlLmlfbGlua3NfY291bnQgPSBQRURfQ1BVX1RPX0xFMTYoMyk7CisJaW5vZGUuaV9ibG9ja3MgPSBQRURfQ1BVX1RPX0xFMzIoZnMtPmJsb2Nrc2l6ZSA+PiA5KTsKKwlpbm9kZS5pX2ZsYWdzID0gMDsKKwlpbm9kZS5pX2Jsb2NrWzBdID0gUEVEX0NQVV9UT19MRTMyKGJsb2NrKTsKKworCWlmICghZXh0Ml93cml0ZV9pbm9kZShmcywgMiwgJmlub2RlKSkKKwkJcmV0dXJuIDA7CisJZnMtPmdkWzBdLmJnX3VzZWRfZGlyc19jb3VudCA9IFBFRF9DUFVfVE9fTEUxNiAoCisJCUVYVDJfR1JPVVBfVVNFRF9ESVJTX0NPVU5UKGZzLT5nZFswXSkgKyAxKTsKKwlmcy0+bWV0YWRpcnR5IHw9IEVYVDJfTUVUQV9HRDsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGV4dDJfcmVzZXJ2ZV9pbm9kZXMoc3RydWN0IGV4dDJfZnMgKmZzKQoreworCWludCBpOworCisJZm9yIChpPTE7aTwxMjtpKyspCisJCWlmICghZXh0Ml9zZXRfaW5vZGVfc3RhdGUoZnMsIGksIDEsIDEpKQorCQkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZXh0Ml9ta2ZzX2luaXRfc2IgKHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICpzYiwgYmxrX3QgbnVtYmxvY2tzLAorCQkJICAgICAgaW50IG51bWdyb3VwcywgaW50IGZpcnN0X2Jsb2NrLAorCQkJICAgICAgaW50IGxvZ19ibG9ja19zaXplLCBibGtfdCBibG9ja3NfcGVyX2dyb3VwLAorCQkJICAgICAgaW50IGlub2Rlc19wZXJfZ3JvdXAsIGludCBzcGFyc2Vfc2IsCisJCQkgICAgICBpbnQgcmVzZXJ2ZWRfYmxvY2tfcGVyY2VudGFnZSkKK3sKKwkvKiBjYXRjaCBhIGJ1ZyBpbiBnY2MgMi45NS4yICovCisJUEVEX0FTU0VSVChudW1ncm91cHMgIT0gMCwgcmV0dXJuIDApOworCisJbWVtc2V0KHNiLCAwLCAxMDI0KTsKKworCXNiLT5zX2lub2Rlc19jb3VudCA9IFBFRF9DUFVfVE9fTEUzMihudW1ncm91cHMgKiBpbm9kZXNfcGVyX2dyb3VwKTsKKwlzYi0+c19ibG9ja3NfY291bnQgPSBQRURfQ1BVX1RPX0xFMzIobnVtYmxvY2tzKTsKKwlzYi0+c19yX2Jsb2Nrc19jb3VudCA9IFBFRF9DUFVfVE9fTEUzMigoKHVpbnQ2NF90KW51bWJsb2NrcworCQkJCSogcmVzZXJ2ZWRfYmxvY2tfcGVyY2VudGFnZSkgLyAxMDApOworCisJLyogaGFjazogdGhpcyBnZXQncyBpbmMnZCBhcyB3ZSBnbyB0aHJvdWdoIGVhY2ggZ3JvdXAgaW4KKwkgKiBleHQyX21rZnNfd3JpdGVfbWV0YSgpCisJICovCisJc2ItPnNfZnJlZV9ibG9ja3NfY291bnQgPSAwOworCXNiLT5zX2ZyZWVfaW5vZGVzX2NvdW50ID0gUEVEX0NQVV9UT19MRTMyIChudW1ncm91cHMKKwkJCQkJCQkqIGlub2Rlc19wZXJfZ3JvdXApOworCXNiLT5zX2ZpcnN0X2RhdGFfYmxvY2sgPSBQRURfQ1BVX1RPX0xFMzIoZmlyc3RfYmxvY2spOworCXNiLT5zX2xvZ19ibG9ja19zaXplID0gUEVEX0NQVV9UT19MRTMyKGxvZ19ibG9ja19zaXplIC0gMTApOworCXNiLT5zX2xvZ19mcmFnX3NpemUgPSBzYi0+c19sb2dfYmxvY2tfc2l6ZTsKKwlzYi0+c19ibG9ja3NfcGVyX2dyb3VwID0gUEVEX0NQVV9UT19MRTMyKGJsb2Nrc19wZXJfZ3JvdXApOworCXNiLT5zX2ZyYWdzX3Blcl9ncm91cCA9IFBFRF9DUFVfVE9fTEUzMihibG9ja3NfcGVyX2dyb3VwKTsKKwlzYi0+c19pbm9kZXNfcGVyX2dyb3VwID0gUEVEX0NQVV9UT19MRTMyKGlub2Rlc19wZXJfZ3JvdXApOworCXNiLT5zX210aW1lID0gMDsKKwlzYi0+c193dGltZSA9IDA7CisJc2ItPnNfbW50X2NvdW50ID0gMDsKKwlzYi0+c19tYXhfbW50X2NvdW50ID0gUEVEX0NQVV9UT19MRTE2KDMwKTsKKwlzYi0+c19tYWdpYyA9IFBFRF9DUFVfVE9fTEUxNigweEVGNTMpOworCXNiLT5zX3N0YXRlID0gUEVEX0NQVV9UT19MRTE2KEVYVDJfVkFMSURfRlMpOworCXNiLT5zX2Vycm9ycyA9IFBFRF9DUFVfVE9fTEUxNihFWFQyX0VSUk9SU19ERUZBVUxUKTsKKwlzYi0+c19taW5vcl9yZXZfbGV2ZWwgPSAwOworCXNiLT5zX2xhc3RjaGVjayA9IDA7CisJc2ItPnNfY2hlY2tpbnRlcnZhbCA9IDA7CisJc2ItPnNfY3JlYXRvcl9vcyA9IDA7CisJc2ItPnNfcmV2X2xldmVsID0gUEVEX0NQVV9UT19MRTMyKDEpOworCXNiLT5zX2RlZl9yZXN1aWQgPSAwOworCXNiLT5zX2RlZl9yZXNnaWQgPSAwOworCXNiLT5zX2ZpcnN0X2lubyA9IFBFRF9DUFVfVE9fTEUzMigxMSk7CisJc2ItPnNfaW5vZGVfc2l6ZSA9IFBFRF9DUFVfVE9fTEUxNigxMjgpOworCXNiLT5zX2Jsb2NrX2dyb3VwX25yID0gMDsKKwlzYi0+c19mZWF0dXJlX2NvbXBhdCA9IDA7CisJc2ItPnNfZmVhdHVyZV9pbmNvbXBhdCA9IDA7CisJc2ItPnNfZmVhdHVyZV9yb19jb21wYXQgPSAwOworCWlmIChzcGFyc2Vfc2IpCisJCXNiLT5zX2ZlYXR1cmVfcm9fY29tcGF0CisJCQl8PSBQRURfQ1BVX1RPX0xFMzIoRVhUMl9GRUFUVVJFX1JPX0NPTVBBVF9TUEFSU0VfU1VQRVIpOworCisvKiBGSVhNRTogbGV0IHRoZSB1c2VyIGRlY2lkZT8gX3NldF9kaXJlbnQoKSBhc3N1bWVzIEZJTEVUWVBFICovCisJc2ItPnNfZmVhdHVyZV9pbmNvbXBhdAorCQl8PSBQRURfQ1BVX1RPX0xFMzIoRVhUMl9GRUFUVVJFX0lOQ09NUEFUX0ZJTEVUWVBFKTsKKworCXV1aWRfZ2VuZXJhdGUoc2ItPnNfdXVpZCk7CisJbWVtc2V0KHNiLT5zX3ZvbHVtZV9uYW1lLCAwLCAxNik7CisJbWVtc2V0KHNiLT5zX2xhc3RfbW91bnRlZCwgMCwgNjQpOworCXNiLT5zX2FsZ29yaXRobV91c2FnZV9iaXRtYXAgPSAwOworCXNiLT5zX3ByZWFsbG9jX2Jsb2NrcyA9IDA7CisJc2ItPnNfcHJlYWxsb2NfZGlyX2Jsb2NrcyA9IDA7CisJc2ItPnNfcGFkZGluZzEgPSAwOworCisJcmV0dXJuIDE7Cit9CisKK3N0cnVjdCBleHQyX2ZzICpleHQyX21rZnMoc3RydWN0IGV4dDJfZGV2X2hhbmRsZSAqaGFuZGxlLAorCQkJICBibGtfdCBudW1ibG9ja3MsCisJCQkgIGludCBsb2dfYmxvY2tfc2l6ZSwKKwkJCSAgYmxrX3QgYmxvY2tzX3Blcl9ncm91cCwKKwkJCSAgaW50IGlub2Rlc19wZXJfZ3JvdXAsCisJCQkgIGludCBzcGFyc2Vfc2IsCisJCQkgIGludCByZXNlcnZlZF9ibG9ja19wZXJjZW50YWdlLAorCQkJICBQZWRUaW1lciogdGltZXIpCit7CisJc3RydWN0IGV4dDJfZnMgKmZzOworCXN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrIHNiOworCXN0cnVjdCBleHQyX2dyb3VwX2Rlc2MgKmdkOworCWludCBudW1ncm91cHM7CisJaW50IGZpcnN0X2Jsb2NrOworCWludCBub25fc3BhcnNlX2FkbWluOworCWludCBzcGFyc2VfYWRtaW47CisJaW50IGxhc3RfZ3JvdXBfYmxvY2tzOworCWludCBsYXN0X2dyb3VwX2FkbWluOworICAgICAgICAKKwkvKiBpZiB0aGUgRlMgaXMgPiA1MTJNYiwgdXNlIDRrIGJsb2Nrcywgb3RoZXJ3aXNlIDFrIGJsb2NrcyAqLworCWlmIChsb2dfYmxvY2tfc2l6ZSA9PSAwKSB7CisJCWhhbmRsZS0+b3BzLT5zZXRfYmxvY2tzaXplKGhhbmRsZS0+Y29va2llLCAxMik7CisJCWlmIChoYW5kbGUtPm9wcy0+Z2V0X3NpemUoaGFuZGxlLT5jb29raWUpID4gKDUxMiAqIDEwMjQpKQorCQkJbG9nX2Jsb2NrX3NpemUgPSAxMjsKKwkJZWxzZQorCQkJbG9nX2Jsb2NrX3NpemUgPSAxMDsKKwl9CisKKyAgICAgICAgLyogRklYTUU6IGJsb2NrIHNpemUgbXVzdCBiZSA+IE1BWChsb2dpY2FsYnMsIHBoeXNpY2FsYnMpCisgICAgICAgICAqIHRvIGF2b2lkIG1vZGlmeS1vbi13cml0ZS4KKyAgICAgICAgICogICAgICAtLSBMZXNsaWUKKyAgICAgICAgICovIAorCisgICAgICAgIAorCWhhbmRsZS0+b3BzLT5zZXRfYmxvY2tzaXplKGhhbmRsZS0+Y29va2llLCBsb2dfYmxvY2tfc2l6ZSk7CisKKwlpZiAobnVtYmxvY2tzID09IDApCisJCW51bWJsb2NrcyA9IGhhbmRsZS0+b3BzLT5nZXRfc2l6ZShoYW5kbGUtPmNvb2tpZSk7CisKKwlpZiAoYmxvY2tzX3Blcl9ncm91cCA9PSAodW5zaWduZWQgaW50KSAwKQorCQlibG9ja3NfcGVyX2dyb3VwID0gOCA8PCBsb2dfYmxvY2tfc2l6ZTsKKworCWZpcnN0X2Jsb2NrID0gKGxvZ19ibG9ja19zaXplID09IDEwKSA/IDEgOiAwOworCisJbnVtZ3JvdXBzID0gcGVkX2Rpdl9yb3VuZF91cCAobnVtYmxvY2tzCisgICAgICAgICAgICAgICAgICAgICAgICAtIGZpcnN0X2Jsb2NrLCBibG9ja3NfcGVyX2dyb3VwKTsKKworCWlmIChpbm9kZXNfcGVyX2dyb3VwID09IDApCisJCWlub2Rlc19wZXJfZ3JvdXAgPSBwZWRfcm91bmRfdXBfdG8gKAorCQkJbnVtYmxvY2tzIC8gbnVtZ3JvdXBzIC8gMiwKKwkJCSgxIDw8IGxvZ19ibG9ja19zaXplKSAvIHNpemVvZihzdHJ1Y3QgZXh0Ml9pbm9kZSkpOworCisJaWYgKHNwYXJzZV9zYiA9PSAtMSkKKwkJc3BhcnNlX3NiID0gMTsKKworICAgICAgICAvKiBGSVhNRTogNSUgbm90IGFwcHJvcHJpYXRlIGZvciBtb2Rlcm4gZHJpdmUgc2l6ZXMgKi8KKwlpZiAocmVzZXJ2ZWRfYmxvY2tfcGVyY2VudGFnZSA9PSAtMSkKKwkJcmVzZXJ2ZWRfYmxvY2tfcGVyY2VudGFnZSA9IDU7CisKKwlsYXN0X2dyb3VwX2Jsb2NrcyA9IChudW1ibG9ja3MgLSBmaXJzdF9ibG9jaykgJSBibG9ja3NfcGVyX2dyb3VwOworCWlmICghbGFzdF9ncm91cF9ibG9ja3MpIGxhc3RfZ3JvdXBfYmxvY2tzID0gYmxvY2tzX3Blcl9ncm91cDsKKwlub25fc3BhcnNlX2FkbWluID0gMgorCQkJICAgKyBpbm9kZXNfcGVyX2dyb3VwICogc2l6ZW9mKHN0cnVjdCBleHQyX2lub2RlKQorCQkJICAgCS8gKDEgPDwgbG9nX2Jsb2NrX3NpemUpOworCXNwYXJzZV9hZG1pbiA9IG5vbl9zcGFyc2VfYWRtaW4KKwkJICAgICAgICsgcGVkX2Rpdl9yb3VuZF91cCAobnVtZ3JvdXBzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHNpemVvZihzdHJ1Y3QgZXh0Ml9ncm91cF9kZXNjKSwKKwkJCQkgIDEgPDwgbG9nX2Jsb2NrX3NpemUpOworCWxhc3RfZ3JvdXBfYWRtaW4gPSBpc19ncm91cF9zcGFyc2Uoc3BhcnNlX3NiLCBudW1ncm91cHMgLSAxKQorCQkJICAgPyBzcGFyc2VfYWRtaW4gOiBub25fc3BhcnNlX2FkbWluOworCWlmIChsYXN0X2dyb3VwX2FkbWluID49IGxhc3RfZ3JvdXBfYmxvY2tzKSB7CisJCW51bWdyb3Vwcy0tOworCQludW1ibG9ja3MgLT0gbGFzdF9ncm91cF9ibG9ja3M7CisJfQorCWlmICghbnVtZ3JvdXBzCisJICAgIHx8IChudW1ncm91cHMgPT0gMQorCQkgICAgJiYgKGxhc3RfZ3JvdXBfYmxvY2tzIC0gbGFzdF9ncm91cF9hZG1pbiA8IDgKKwkgICAgCQl8fCBpbm9kZXNfcGVyX2dyb3VwIDwgMTYpKSkgeworCQlwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCVBFRF9FWENFUFRJT05fRVJST1IsCisJCQlQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCV8oIkZpbGUgc3lzdGVtIHRvbyBzbWFsbCBmb3IgZXh0Mi4iKSk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJZ2QgPSBwZWRfbWFsbG9jKG51bWdyb3VwcyAqIHNpemVvZihzdHJ1Y3QgZXh0Ml9ncm91cF9kZXNjKQorCQkJKyAoMSA8PCBsb2dfYmxvY2tfc2l6ZSkpOworCWlmICghZ2QpCisJCWdvdG8gZXJyb3I7CisKKwlpZiAoIWV4dDJfbWtmc19pbml0X3NiKCZzYiwgbnVtYmxvY2tzLCBudW1ncm91cHMsIGZpcnN0X2Jsb2NrLAorCQkJICAgICAgIGxvZ19ibG9ja19zaXplLCBibG9ja3NfcGVyX2dyb3VwLAorCQkJICAgICAgIGlub2Rlc19wZXJfZ3JvdXAsIHNwYXJzZV9zYiwKKwkJCSAgICAgICByZXNlcnZlZF9ibG9ja19wZXJjZW50YWdlKSkKKyAgICAgICAJCWdvdG8gZXJyb3JfZnJlZV9nZDsKKwlpZiAoIWV4dDJfbWtmc193cml0ZV9tZXRhKGhhbmRsZSwgJnNiLCBnZCwgdGltZXIpKQorICAgICAgIAkJZ290byBlcnJvcl9mcmVlX2dkOworCWlmICghZXh0Ml9ta2ZzX3dyaXRlX21haW4oaGFuZGxlLCAmc2IsIGdkKSkKKyAgICAgICAJCWdvdG8gZXJyb3JfZnJlZV9nZDsKKworCWZzID0gZXh0Ml9vcGVuKGhhbmRsZSwgMCk7CisJaWYgKCFmcykgZ290byBlcnJvcl9jbG9zZV9mczsKKwlpZiAoIWV4dDJfcmVzZXJ2ZV9pbm9kZXMoZnMpKSBnb3RvIGVycm9yX2Nsb3NlX2ZzOworCWlmICghZXh0Ml9ta2ZzX2NyZWF0ZV9yb290X2lub2RlKGZzKSkgZ290byBlcnJvcl9jbG9zZV9mczsKKwlpZiAoIWV4dDJfbWtmc19jcmVhdGVfbG9zdF9hbmRfZm91bmRfaW5vZGUoZnMpKQorCQlnb3RvIGVycm9yX2Nsb3NlX2ZzOworCWlmICghZXh0Ml9zeW5jKGZzKSkgZ290byBlcnJvcl9jbG9zZV9mczsKKwlwZWRfZnJlZShnZCk7CisJcmV0dXJuIGZzOworCitlcnJvcl9jbG9zZV9mczoKKwlleHQyX2Nsb3NlKGZzKTsKK2Vycm9yX2ZyZWVfZ2Q6CisJcGVkX2ZyZWUgKGdkKTsKK2Vycm9yOgorCXJldHVybiBOVUxMOworfQorI2VuZGlmIC8qICFESVNDT1ZFUl9PTkxZICovCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2YjNiMTQKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYwpAQCAtMCwwICsxLDczMSBAQAorLyoKKyAgICBleHQyX3Jlc2l6ZS5jIC0tIGV4dDIgcmVzaXplcgorICAgIENvcHlyaWdodCAoQykgMTk5OC0yMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaWZuZGVmIERJU0NPVkVSX09OTFkKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAiZXh0Mi5oIgorCitzdGF0aWMgaW50IGV4dDJfYWRkX2dyb3VwKHN0cnVjdCBleHQyX2ZzICpmcywgYmxrX3QgZ3JvdXBzaXplKQoreworCWJsa190IGFkbWluOworCWludCAgIGdyb3VwOworCWJsa190IGdyb3Vwc3RhcnQ7CisJYmxrX3QgbmV3Z2RibG9ja3M7CisJaW50ICAgc3BhcnNlOworCisJaWYgKGZzLT5vcHRfdmVyYm9zZSkKKyAgICAgICAgICAgICAgICBmcHV0cyAoImV4dDJfYWRkX2dyb3VwXG4iLCBzdGRlcnIpOworCisJaWYgKCFwZWRfcmVhbGxvYyAoKHZvaWQqKSAmZnMtPmdkLAorCQkJICAoZnMtPm51bWdyb3VwcysxKSAqIHNpemVvZihzdHJ1Y3QgZXh0Ml9ncm91cF9kZXNjKQorCQkJICAgICAgKyBmcy0+YmxvY2tzaXplKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZnMtPm9wdF9kZWJ1ZykKKwl7CisJCWlmIChFWFQyX1NVUEVSX0JMT0NLU19DT1VOVChmcy0+c2IpICE9CisJCSAgICBFWFQyX1NVUEVSX0ZJUlNUX0RBVEFfQkxPQ0soZnMtPnNiKQorCQkgICAgKyBmcy0+bnVtZ3JvdXBzICogRVhUMl9TVVBFUl9CTE9DS1NfUEVSX0dST1VQKGZzLT5zYikpCisJCXsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZwdXRzICgiZXh0Ml9hZGRfZ3JvdXA6IGxhc3QgKGV4aXN0aW5nKSBncm91cCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlzbid0IGNvbXBsZXRlIVxuIiwgc3RkZXJyKTsKKworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlncm91cCA9IGZzLT5udW1ncm91cHM7CisJc3BhcnNlID0gZXh0Ml9pc19ncm91cF9zcGFyc2UoZnMsIGdyb3VwKTsKKwlncm91cHN0YXJ0ID0gRVhUMl9TVVBFUl9GSVJTVF9EQVRBX0JMT0NLKGZzLT5zYikKKwkJICAgICArIGdyb3VwICogRVhUMl9TVVBFUl9CTE9DS1NfUEVSX0dST1VQKGZzLT5zYik7CisKKwlhZG1pbiA9IGZzLT5hZG1pbmJsb2NrczsKKwlpZiAoIXNwYXJzZSkKKwkJYWRtaW4gLT0gZnMtPmdkYmxvY2tzICsgMTsKKworCWlmIChmcy0+b3B0X2RlYnVnKQorCXsKKwkJaWYgKGdyb3Vwc2l6ZSA8IGZzLT5hZG1pbmJsb2NrcyB8fAorCQkgICAgZ3JvdXBzaXplID4gRVhUMl9TVVBFUl9CTE9DS1NfUEVSX0dST1VQKGZzLT5zYikpCisJCXsKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCSJleHQyX2FkZF9ncm91cDogZ3JvdXBzIG9mICVpIGJsb2NrcyBhcmUgIgorCQkJCSJpbXBvc3NpYmxlIVxuIiwgZ3JvdXBzaXplKTsKKworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwluZXdnZGJsb2NrcyA9IHBlZF9kaXZfcm91bmRfdXAoKGZzLT5udW1ncm91cHMgKyAxKQorCQkJCQkqIHNpemVvZihzdHJ1Y3QgZXh0Ml9ncm91cF9kZXNjKSwKKwkJCSAgICAgIGZzLT5ibG9ja3NpemUpOworCWlmIChuZXdnZGJsb2NrcyAhPSBmcy0+Z2RibG9ja3MpCisJeworCQlpbnQgaTsKKworCQlmb3IgKGk9MDtpPGZzLT5udW1ncm91cHM7aSsrKQorCQkJaWYgKGV4dDJfaXNfZ3JvdXBfc3BhcnNlKGZzLCBpKSkKKwkJCXsKKwkJCQlibGtfdCBzdGFydDsKKworCQkJCXN0YXJ0ID0gRVhUMl9TVVBFUl9GSVJTVF9EQVRBX0JMT0NLKGZzLT5zYikKKwkJCQkgICAgICArIGkgKiBFWFQyX1NVUEVSX0JMT0NLU19QRVJfR1JPVVAoZnMtPnNiKTsKKwkJCQlleHQyX3NldF9ibG9ja19zdGF0ZShmcywKKwkJCQkJCXN0YXJ0ICsgZnMtPmdkYmxvY2tzICsgMSwgMSwgMSk7CisJCQl9CisKKwkJZnMtPmdkYmxvY2tzKys7CisJCWZzLT5hZG1pbmJsb2NrcysrOworCQlpZiAoc3BhcnNlKQorCQkJYWRtaW4rKzsKKwl9CisKKwlmcy0+bnVtZ3JvdXBzKys7CisKKwlmcy0+c2Iuc19pbm9kZXNfY291bnQgPSBQRURfQ1BVX1RPX0xFMzIoCisJCUVYVDJfU1VQRVJfSU5PREVTX0NPVU5UKGZzLT5zYikKKwkJKyBFWFQyX1NVUEVSX0lOT0RFU19QRVJfR1JPVVAoZnMtPnNiKSk7CisJZnMtPnNiLnNfYmxvY2tzX2NvdW50ID0gUEVEX0NQVV9UT19MRTMyKAorCQlFWFQyX1NVUEVSX0JMT0NLU19DT1VOVChmcy0+c2IpICsgZ3JvdXBzaXplKTsKKwlmcy0+c2Iuc19mcmVlX2Jsb2Nrc19jb3VudCA9IFBFRF9DUFVfVE9fTEUzMigKKwkJRVhUMl9TVVBFUl9GUkVFX0JMT0NLU19DT1VOVChmcy0+c2IpICsgZ3JvdXBzaXplIC0gYWRtaW4pOworCWZzLT5zYi5zX2ZyZWVfaW5vZGVzX2NvdW50ID0gUEVEX0NQVV9UT19MRTMyKAorCQlFWFQyX1NVUEVSX0ZSRUVfSU5PREVTX0NPVU5UKGZzLT5zYikKKwkgICAgICAgICsgRVhUMl9TVVBFUl9JTk9ERVNfUEVSX0dST1VQKGZzLT5zYikpOworCWZzLT5tZXRhZGlydHkgfD0gRVhUMl9NRVRBX1NCOworCisJeworCQlibGtfdCBvZmY7CisJCWJsa190IHNwYXJzZW9mZjsKKworCQlvZmYgPSBncm91cHN0YXJ0OworCQlzcGFyc2VvZmYgPSBvZmYgKyBmcy0+aXRvZmZzZXQgLSAyOworCisJCWlmIChzcGFyc2UpCisJCXsKKwkJCWZzLT5nZFtncm91cF0uYmdfYmxvY2tfYml0bWFwCisJCQkJPSBQRURfQ1BVX1RPX0xFMzIoc3BhcnNlb2ZmKTsKKwkJCWZzLT5nZFtncm91cF0uYmdfaW5vZGVfYml0bWFwCisJCQkJPSBQRURfQ1BVX1RPX0xFMzIoc3BhcnNlb2ZmICsgMSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlmcy0+Z2RbZ3JvdXBdLmJnX2Jsb2NrX2JpdG1hcAorCQkJCT0gUEVEX0NQVV9UT19MRTMyKG9mZik7CisJCQlmcy0+Z2RbZ3JvdXBdLmJnX2lub2RlX2JpdG1hcAorCQkJCT0gUEVEX0NQVV9UT19MRTMyKG9mZiArIDEpOworCQl9CisKKwkJLyogSGV5LCBJIGRvbid0IGtub3cgX3doeV8gZWl0aGVyICovCisJCWZzLT5nZFtncm91cF0uYmdfaW5vZGVfdGFibGUgPSBQRURfQ1BVX1RPX0xFMzIoc3BhcnNlb2ZmICsgMik7CisJfQorCisJZnMtPmdkW2dyb3VwXS5iZ19mcmVlX2Jsb2Nrc19jb3VudCA9IFBFRF9DUFVfVE9fTEUxNihncm91cHNpemUgLSBhZG1pbik7CisJZnMtPmdkW2dyb3VwXS5iZ19mcmVlX2lub2Rlc19jb3VudCA9IFBFRF9DUFVfVE9fTEUxNigKKwkJRVhUMl9TVVBFUl9JTk9ERVNfUEVSX0dST1VQKGZzLT5zYikpOworCWZzLT5nZFtncm91cF0uYmdfdXNlZF9kaXJzX2NvdW50ID0gMDsKKwlmcy0+bWV0YWRpcnR5IHw9IEVYVDJfTUVUQV9TQiB8IEVYVDJfTUVUQV9HRDsKKworCXsKKwkJc3RydWN0IGV4dDJfYnVmZmVyX2hlYWQgKmJoOworCQlibGtfdCBpOworCisJCWJoID0gZXh0Ml9iY3JlYXRlKGZzLCBFWFQyX0dST1VQX0JMT0NLX0JJVE1BUChmcy0+Z2RbZ3JvdXBdKSk7CisJCWlmICghYmgpCisJCQlyZXR1cm4gMDsKKworCQlpZiAoc3BhcnNlKQorCQl7CisJCQliaC0+ZGF0YVswXSB8PSBfYml0bWFwWzBdOworCQkJZm9yIChpPTE7aTw9ZnMtPmdkYmxvY2tzO2krKykKKwkJCQliaC0+ZGF0YVtpPj4zXSB8PSBfYml0bWFwW2kmN107CisJCX0KKworCQlpID0gRVhUMl9HUk9VUF9CTE9DS19CSVRNQVAoZnMtPmdkW2dyb3VwXSkgLSBncm91cHN0YXJ0OworCQliaC0+ZGF0YVtpPj4zXSB8PSBfYml0bWFwW2kmN107CisKKwkJaSA9IEVYVDJfR1JPVVBfSU5PREVfQklUTUFQKGZzLT5nZFtncm91cF0pIC0gZ3JvdXBzdGFydDsKKwkJYmgtPmRhdGFbaT4+M10gfD0gX2JpdG1hcFtpJjddOworCisJCWZvciAoaT0wO2k8ZnMtPmlub2RlYmxvY2tzO2krKykKKwkJeworCQkJYmxrX3QgajsKKworCQkJaiA9IEVYVDJfR1JPVVBfSU5PREVfVEFCTEUoZnMtPmdkW2dyb3VwXSkKKwkJCSAgICAtIGdyb3Vwc3RhcnQgKyBpOworCQkJYmgtPmRhdGFbaj4+M10gfD0gX2JpdG1hcFtqJjddOworCQl9CisKKwkJZm9yIChpPWdyb3Vwc2l6ZTtpPEVYVDJfU1VQRVJfQkxPQ0tTX1BFUl9HUk9VUChmcy0+c2IpO2krKykKKwkJCWJoLT5kYXRhW2k+PjNdIHw9IF9iaXRtYXBbaSY3XTsKKworCQlleHQyX2JyZWxzZShiaCwgMCk7ICAgICAgICAgLyogdGhpcyBpcyBhIGJsb2NrIGJpdG1hcCAqLworCX0KKworCWlmICghZXh0Ml96ZXJvX2Jsb2NrcyhmcywgRVhUMl9HUk9VUF9JTk9ERV9CSVRNQVAoZnMtPmdkW2dyb3VwXSksIDEpKQorCQlyZXR1cm4gMDsKKwlpZiAoIWV4dDJfemVyb19ibG9ja3MoZnMsIEVYVDJfR1JPVVBfSU5PREVfVEFCTEUoZnMtPmdkW2dyb3VwXSksCisJCQkgICAgICBmcy0+aW5vZGVibG9ja3MpKQorCQlyZXR1cm4gMDsKKworCWlmIChmcy0+b3B0X3NhZmUpCisJCWlmICghZXh0Ml9zeW5jKGZzKSkKKwkJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZXh0Ml9kZWxfZ3JvdXAoc3RydWN0IGV4dDJfZnMgKmZzKQoreworCWJsa190IGFkbWluOworCWludCAgIGdyb3VwOworCWJsa190IGdyb3Vwc2l6ZTsKKwlibGtfdCBuZXdnZGJsb2NrczsKKwlpbnQgICBzcGFyc2U7CisKKwlpZiAoZnMtPm9wdF92ZXJib3NlKQorICAgICAgICAgICAgICAgIGZwdXRzICgiZXh0Ml9kZWxfZ3JvdXBcbiIsIHN0ZGVycik7CisKKwlncm91cCA9IGZzLT5udW1ncm91cHMgLSAxOworCXNwYXJzZSA9IGV4dDJfaXNfZ3JvdXBfc3BhcnNlKGZzLCBncm91cCk7CisKKwlhZG1pbiA9IGZzLT5hZG1pbmJsb2NrczsKKwlpZiAoIXNwYXJzZSkKKwkJYWRtaW4gLT0gZnMtPmdkYmxvY2tzICsgMTsKKworCWdyb3Vwc2l6ZSA9IEVYVDJfU1VQRVJfQkxPQ0tTX0NPVU5UKGZzLT5zYikKKwkJICAtIEVYVDJfU1VQRVJfRklSU1RfREFUQV9CTE9DSyhmcy0+c2IpCisJCSAgLSBncm91cCAqIEVYVDJfU1VQRVJfQkxPQ0tTX1BFUl9HUk9VUChmcy0+c2IpOworCisJaWYgKEVYVDJfU1VQRVJfRlJFRV9CTE9DS1NfQ09VTlQoZnMtPnNiKSA8IGdyb3Vwc2l6ZSAtIGFkbWluKQorCXsKKwkJcGVkX2V4Y2VwdGlvbl90aHJvdyAoUEVEX0VYQ0VQVElPTl9FUlJPUiwgUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQlfKCJGaWxlIHN5c3RlbSBpcyB0b28gZnVsbCB0byByZW1vdmUgYSBncm91cCEiKSk7CisKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKEVYVDJfU1VQRVJfRlJFRV9JTk9ERVNfQ09VTlQoZnMtPnNiKQorCQk8IEVYVDJfU1VQRVJfSU5PREVTX1BFUl9HUk9VUChmcy0+c2IpKQorCXsKKwkJcGVkX2V4Y2VwdGlvbl90aHJvdyAoUEVEX0VYQ0VQVElPTl9FUlJPUiwgUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQlfKCJGaWxlIHN5c3RlbSBoYXMgdG9vIG1hbnkgYWxsb2NhdGVkIGlub2RlcyB0byAiCisJCQkgICJyZW1vdmUgYSBncm91cCEiKSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChmcy0+b3B0X2RlYnVnKQorCXsKKwkJaWYgKEVYVDJfR1JPVVBfRlJFRV9JTk9ERVNfQ09VTlQoZnMtPmdkW2dyb3VwXSkgIT0KKwkJICAgIEVYVDJfU1VQRVJfSU5PREVTX1BFUl9HUk9VUChmcy0+c2IpKQorCQl7CisgICAgICAgICAgICAgICAgICAgICAgICBmcHV0cyAoImV4dDJfZGVsX2dyb3VwOiB0aGlzIHNob3VsZCBub3QgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXBwZW4gYW55bW9yZSFcbiIsIHN0ZGVycik7CisKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJbmV3Z2RibG9ja3MgPSBwZWRfZGl2X3JvdW5kX3VwKChmcy0+bnVtZ3JvdXBzIC0gMSkgKgorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBleHQyX2dyb3VwX2Rlc2MpLCBmcy0+YmxvY2tzaXplKTsKKworCWlmIChuZXdnZGJsb2NrcyAhPSBmcy0+Z2RibG9ja3MpCisJeworCQlpbnQgaTsKKworCQlmb3IgKGk9MDtpPGZzLT5udW1ncm91cHM7aSsrKQorCQkJaWYgKGV4dDJfaXNfZ3JvdXBfc3BhcnNlKGZzLCBpKSkKKwkJCXsKKwkJCQlibGtfdCBzdGFydDsKKworCQkJCXN0YXJ0ID0gRVhUMl9TVVBFUl9GSVJTVF9EQVRBX0JMT0NLKGZzLT5zYikgKworCQkJCQlpICogRVhUMl9TVVBFUl9CTE9DS1NfUEVSX0dST1VQKGZzLT5zYik7CisJCQkJZXh0Ml9zZXRfYmxvY2tfc3RhdGUoZnMsCisJCQkJCQkgICAgIHN0YXJ0ICsgZnMtPmdkYmxvY2tzLAorCQkJCQkJICAgICAwLCAxKTsKKwkJCX0KKworCQlmcy0+Z2RibG9ja3MtLTsKKwkJZnMtPmFkbWluYmxvY2tzLS07CisJCWlmIChzcGFyc2UpCisJCQlhZG1pbi0tOworCX0KKworCWlmIChmcy0+b3B0X2RlYnVnKQorCXsKKwkJaWYgKEVYVDJfR1JPVVBfRlJFRV9CTE9DS1NfQ09VTlQoZnMtPmdkW2dyb3VwXSkKKwkJCQkhPSBncm91cHNpemUgLSBhZG1pbikKKwkJeworCQkJYmxrX3QgaTsKKwkJCWJsa190IG51bTsKKwkJCWJsa190IG9mZnNldDsKKworCQkJb2Zmc2V0ID0gRVhUMl9TVVBFUl9GSVJTVF9EQVRBX0JMT0NLKGZzLT5zYikgKworCQkJCWdyb3VwICogRVhUMl9TVVBFUl9CTE9DS1NfUEVSX0dST1VQKGZzLT5zYik7CisJCQludW0gPSBFWFQyX1NVUEVSX0JMT0NLU19QRVJfR1JPVVAoZnMtPnNiKTsKKworCQkJZm9yIChpPTA7aTxudW07aSsrKQorCQkJCWlmIChleHQyX2lzX2RhdGFfYmxvY2soZnMsIG9mZnNldCtpKSAmJgorCQkJCSAgICBleHQyX2dldF9ibG9ja19zdGF0ZShmcywgb2Zmc2V0K2kpKQorCQkJCXsKKwkJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCQkiZXJyb3I6IGJsb2NrIHJlbG9jYXRvciAiCisJCQkJCQkic2hvdWxkIGhhdmUgcmVsb2NhdGVkICIKKwkJCQkJCSIlaVxuIiwKKwkJCQkJCW9mZnNldCtpKTsKKworCQkJCQlyZXR1cm4gMDsKKwkJCQl9CisJCX0KKwl9CisKKwlmcy0+bnVtZ3JvdXBzLS07CisKKwlmcy0+c2Iuc19pbm9kZXNfY291bnQgPSBQRURfQ1BVX1RPX0xFMzIoCisJCUVYVDJfU1VQRVJfSU5PREVTX0NPVU5UKGZzLT5zYikKKwkJLSBFWFQyX1NVUEVSX0lOT0RFU19QRVJfR1JPVVAoZnMtPnNiKSk7CisJZnMtPnNiLnNfYmxvY2tzX2NvdW50ID0gUEVEX0NQVV9UT19MRTMyKAorCQlFWFQyX1NVUEVSX0JMT0NLU19DT1VOVChmcy0+c2IpIC0gZ3JvdXBzaXplKTsKKwlmcy0+c2Iuc19mcmVlX2Jsb2Nrc19jb3VudCA9IFBFRF9DUFVfVE9fTEUzMigKKwkJRVhUMl9TVVBFUl9GUkVFX0JMT0NLU19DT1VOVChmcy0+c2IpIC0gKGdyb3Vwc2l6ZSAtIGFkbWluKSk7CisJZnMtPnNiLnNfZnJlZV9pbm9kZXNfY291bnQgPSBQRURfQ1BVX1RPX0xFMzIoCisJCUVYVDJfU1VQRVJfRlJFRV9JTk9ERVNfQ09VTlQoZnMtPnNiKQorCSAgICAgICAgLSBFWFQyX1NVUEVSX0lOT0RFU19QRVJfR1JPVVAoZnMtPnNiKSk7CisJZnMtPm1ldGFkaXJ0eSB8PSBFWFQyX01FVEFfU0I7CisKKwlpZiAoZnMtPm9wdF9zYWZlKQorCQlleHQyX3N5bmMoZnMpOworCisJcGVkX3JlYWxsb2MgKCh2b2lkKikgJmZzLT5nZCwKKwkJICAgICBmcy0+bnVtZ3JvdXBzICogc2l6ZW9mKHN0cnVjdCBleHQyX2dyb3VwX2Rlc2MpCisJCQkgICAgICArIGZzLT5ibG9ja3NpemUpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZXh0Ml9ncm93X2dyb3VwKHN0cnVjdCBleHQyX2ZzICpmcywgYmxrX3QgbmV3c2l6ZSkKK3sKKwlpbnQgICBncm91cDsKKwlibGtfdCBncm91cG9mZjsKKwlibGtfdCBnYmxvY2tzOworCWJsa190IGk7CisKKwlpZiAoZnMtPm9wdF92ZXJib3NlKQorICAgICAgICAgICAgICAgIGZwdXRzICgiZXh0Ml9ncm93X2dyb3VwXG4iLCBzdGRlcnIpOworCisJZ3JvdXAgPSBmcy0+bnVtZ3JvdXBzIC0gMTsKKwlncm91cG9mZiA9IGdyb3VwICogRVhUMl9TVVBFUl9CTE9DS1NfUEVSX0dST1VQKGZzLT5zYikKKwkJICAgKyBFWFQyX1NVUEVSX0ZJUlNUX0RBVEFfQkxPQ0soZnMtPnNiKTsKKwlnYmxvY2tzID0gRVhUMl9TVVBFUl9CTE9DS1NfQ09VTlQoZnMtPnNiKSAtIGdyb3Vwb2ZmOworCisJaWYgKGZzLT5vcHRfZGVidWcpCisJeworCQlpZiAobmV3c2l6ZSA8IGdibG9ja3MpCisJCXsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZwdXRzICgiZXh0Ml9ncm93X2dyb3VwOiBjYWxsZWQgdG8gc2hyaW5rIGdyb3VwIVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnIpOworCisJCQlyZXR1cm4gMDsKKwkJfQorCisJCWlmIChnYmxvY2tzID09IG5ld3NpemUpCisJCXsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZwdXRzICgiZXh0Ml9ncm93X2dyb3VwOiBub3RoaW5nIHRvIGRvIVxuIiwgc3RkZXJyKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJZm9yIChpPWdibG9ja3M7aTxuZXdzaXplO2krKykKKwkJZXh0Ml9zZXRfYmxvY2tfc3RhdGUoZnMsIGdyb3Vwb2ZmICsgaSwgMCwgMSk7CisKKwlmcy0+c2Iuc19ibG9ja3NfY291bnQgPSBQRURfQ1BVX1RPX0xFMzIoCisJCUVYVDJfU1VQRVJfQkxPQ0tTX0NPVU5UKGZzLT5zYikgKyBuZXdzaXplIC0gZ2Jsb2Nrcyk7CisJZnMtPm1ldGFkaXJ0eSB8PSBFWFQyX01FVEFfU0I7CisKKwlpZiAoZnMtPm9wdF9zYWZlKQorCQlleHQyX3N5bmMoZnMpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZXh0Ml9zaHJpbmtfZ3JvdXAoc3RydWN0IGV4dDJfZnMgKmZzLCBibGtfdCBuZXdzaXplKQoreworCWJsa190IGFkbWluOworCWludCAgIGdyb3VwOworCWJsa190IGdyb3Vwb2ZmOworCWJsa190IGdibG9ja3M7CisJYmxrX3QgaTsKKworCWlmIChmcy0+b3B0X3ZlcmJvc2UpCisgICAgICAgICAgICAgICAgZnB1dHMgKCJleHQyX3Nocmlua19ncm91cFxuIiwgc3RkZXJyKTsKKworCWdyb3VwID0gZnMtPm51bWdyb3VwcyAtIDE7CisKKwlhZG1pbiA9IGZzLT5hZG1pbmJsb2NrczsKKwlpZiAoIWV4dDJfaXNfZ3JvdXBfc3BhcnNlKGZzLCBncm91cCkpCisJCWFkbWluIC09IGZzLT5nZGJsb2NrcyArIDE7CisKKwlncm91cG9mZiA9IGdyb3VwICogRVhUMl9TVVBFUl9CTE9DS1NfUEVSX0dST1VQKGZzLT5zYikKKwkJICAgKyBFWFQyX1NVUEVSX0ZJUlNUX0RBVEFfQkxPQ0soZnMtPnNiKTsKKwlnYmxvY2tzID0gRVhUMl9TVVBFUl9CTE9DS1NfQ09VTlQoZnMtPnNiKSAtIGdyb3Vwb2ZmOworCisJaWYgKGZzLT5vcHRfZGVidWcpCisJeworCQlpZiAobmV3c2l6ZSA8IGFkbWluKQorCQl7CisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkiZXh0Ml9zaHJpbmtfZ3JvdXA6IGNhbnQgc2hyaW5rIGEgZ3JvdXAgIgorCQkJCSJ0byAlaSBibG9ja3NcbiIsIG5ld3NpemUpOworCisJCQlyZXR1cm4gMDsKKwkJfQorCisJCWlmIChuZXdzaXplID4gZ2Jsb2NrcykKKwkJeworICAgICAgICAgICAgICAgICAgICAgICAgZnB1dHMgKCJleHQyX3Nocmlua19ncm91cDogY2FsbGVkIHRvIGdyb3cgZ3JvdXAhXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycik7CisKKwkJCXJldHVybiAwOworCQl9CisKKwkJaWYgKGdibG9ja3MgPT0gbmV3c2l6ZSkKKwkJeworICAgICAgICAgICAgICAgICAgICAgICAgZnB1dHMgKCJleHQyX3Nocmlua19ncm91cDogbm90aGluZyB0byBkbyFcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyKTsKKworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlmb3IgKGk9bmV3c2l6ZTtpPGdibG9ja3M7aSsrKQorCXsKKwkJaWYgKGZzLT5vcHRfZGVidWcgJiYgZXh0Ml9nZXRfYmxvY2tfc3RhdGUoZnMsIGdyb3Vwb2ZmICsgaSkpCisJCXsKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCSJlcnJvcjogYmxvY2sgcmVsb2NhdG9yIHNob3VsZCBoYXZlIHJlbG9jYXRlZCAiCisJCQkJIiVpXG4iLAorCQkJCWdyb3Vwb2ZmICsgaSk7CisKKwkJCXJldHVybiAwOworCQl9CisKKwkJZXh0Ml9zZXRfYmxvY2tfc3RhdGUoZnMsIGdyb3Vwb2ZmICsgaSwgMSwgMCk7CisJfQorCisJaSA9IGdibG9ja3MgLSBuZXdzaXplOworCWZzLT5zYi5zX2Jsb2Nrc19jb3VudCA9IFBFRF9DUFVfVE9fTEUzMigKKwkJRVhUMl9TVVBFUl9CTE9DS1NfQ09VTlQoZnMtPnNiKSAtIGkpOworCWZzLT5zYi5zX2ZyZWVfYmxvY2tzX2NvdW50ID0gUEVEX0NQVV9UT19MRTMyKAorCQlFWFQyX1NVUEVSX0ZSRUVfQkxPQ0tTX0NPVU5UKGZzLT5zYikgLSBpKTsKKwlmcy0+Z2RbZ3JvdXBdLmJnX2ZyZWVfYmxvY2tzX2NvdW50ID0gUEVEX0NQVV9UT19MRTE2KAorCQlFWFQyX0dST1VQX0ZSRUVfQkxPQ0tTX0NPVU5UKGZzLT5nZFtncm91cF0pIC0gaSk7CisKKwlmcy0+bWV0YWRpcnR5IHw9IEVYVDJfTUVUQV9TQiB8IEVYVDJfTUVUQV9HRDsKKworCWlmIChmcy0+b3B0X3NhZmUpCisJCWV4dDJfc3luYyhmcyk7CisKKwlyZXR1cm4gMTsKK30KKworCisKKworCisKK3N0YXRpYyBpbnQgZXh0Ml9ncm93X2ZzKHN0cnVjdCBleHQyX2ZzICpmcywgYmxrX3QgbmV3c2l6ZSwgUGVkVGltZXIqIHRpbWVyKQoreworCWJsa190IGRpZmY7CisJYmxrX3Qgc2l6ZWxhc3Q7CisJYmxrX3Qgb3JpZ3NpemUgPSBFWFQyX1NVUEVSX0JMT0NLU19DT1VOVChmcy0+c2IpOworCisJaWYgKGZzLT5vcHRfdmVyYm9zZSkKKyAgICAgICAgICAgICAgICBmcHV0cyAoImV4dDJfZ3Jvd19mc1xuIiwgc3RkZXJyKTsKKworCWlmICghZXh0Ml9ibG9ja19yZWxvY2F0ZShmcywgbmV3c2l6ZSkpCisJCXJldHVybiAwOworCisJaWYgKCFleHQyX21ldGFkYXRhX3B1c2goZnMsIG5ld3NpemUpKQorCQlyZXR1cm4gMDsKKworCWRpZmYgPSBuZXdzaXplIC0gRVhUMl9TVVBFUl9CTE9DS1NfQ09VTlQoZnMtPnNiKTsKKwlzaXplbGFzdCA9IEVYVDJfU1VQRVJfQkxPQ0tTX0NPVU5UKGZzLT5zYikKKwkJICAgLSBFWFQyX1NVUEVSX0ZJUlNUX0RBVEFfQkxPQ0soZnMtPnNiKQorCQkgICAtIChmcy0+bnVtZ3JvdXBzLTEpICogRVhUMl9TVVBFUl9CTE9DS1NfUEVSX0dST1VQKGZzLT5zYik7CisKKwlpZiAoc2l6ZWxhc3QgIT0gRVhUMl9TVVBFUl9CTE9DS1NfUEVSX0dST1VQKGZzLT5zYikpCisJeworCQlibGtfdCBncm93dG87CisKKwkJZ3Jvd3RvID0gc2l6ZWxhc3QgKyBkaWZmOworCQlpZiAoZ3Jvd3RvID4gRVhUMl9TVVBFUl9CTE9DS1NfUEVSX0dST1VQKGZzLT5zYikpCisJCQlncm93dG8gPSBFWFQyX1NVUEVSX0JMT0NLU19QRVJfR1JPVVAoZnMtPnNiKTsKKworCQlpZiAoIWV4dDJfZ3Jvd19ncm91cChmcywgZ3Jvd3RvKSkKKwkJCXJldHVybiAwOworCisJCWRpZmYgLT0gZ3Jvd3RvIC0gc2l6ZWxhc3Q7CisJfQorCisJcGVkX3RpbWVyX3Jlc2V0ICh0aW1lcik7CisJcGVkX3RpbWVyX3NldF9zdGF0ZV9uYW1lICh0aW1lciwgXygiYWRkaW5nIGdyb3VwcyIpKTsKKworCXdoaWxlIChkaWZmKQorCXsKKwkJcGVkX3RpbWVyX3VwZGF0ZSAodGltZXIsCisJCQkgICAgICAgICAgMS4wIC0gMS4wICogZGlmZiAvIChuZXdzaXplIC0gb3JpZ3NpemUpKTsKKworCQlzaXplbGFzdCA9IFBFRF9NSU4oZGlmZiwgRVhUMl9TVVBFUl9CTE9DS1NfUEVSX0dST1VQKGZzLT5zYikpOworCQlpZiAoIWV4dDJfYWRkX2dyb3VwKGZzLCBzaXplbGFzdCkpCisJCQlyZXR1cm4gMDsKKworCQlkaWZmIC09IHNpemVsYXN0OworCX0KKworCXBlZF90aW1lcl91cGRhdGUgKHRpbWVyLCAxLjApOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZXh0Ml9zaHJpbmtfZnMoc3RydWN0IGV4dDJfZnMgKmZzLCBibGtfdCBuZXdzaXplLAorCQkJICBQZWRUaW1lciogdGltZXIpCit7CisJYmxrX3Qgb3JpZ3NpemUgPSBFWFQyX1NVUEVSX0JMT0NLU19DT1VOVCAoZnMtPnNiKTsKKwlibGtfdCBkaWZmOworCWludCBuZXdncm91cHM7CisJYmxrX3Qgc2l6ZWxhc3Q7CisKKwlpZiAoZnMtPm9wdF92ZXJib3NlKQorICAgICAgICAgICAgICAgIGZwdXRzICgiZXh0Ml9zaHJpbmtfZnNcbiIsIHN0ZGVycik7CisKKwluZXdncm91cHMgPSBwZWRfZGl2X3JvdW5kX3VwIChuZXdzaXplCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gRVhUMl9TVVBFUl9GSVJTVF9EQVRBX0JMT0NLKGZzLT5zYiksCisJCSAgICAgICAgRVhUMl9TVVBFUl9CTE9DS1NfUEVSX0dST1VQKGZzLT5zYikpOworCWlmIChFWFQyX1NVUEVSX0JMT0NLU19DT1VOVChmcy0+c2IpCisJICAgIC0gRVhUMl9TVVBFUl9GUkVFX0JMT0NLU19DT1VOVChmcy0+c2IpID4gbmV3c2l6ZSkKKwl7CisJCXBlZF9leGNlcHRpb25fdGhyb3cgKFBFRF9FWENFUFRJT05fRVJST1IsIFBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJXygiWW91ciBmaWxlIHN5c3RlbSBpcyB0b28gZnVsbCB0byByZXNpemUgaXQgdG8gJWkgIgorCQkJICAiYmxvY2tzLiAgU29ycnkuIiksIG5ld3NpemUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoRVhUMl9TVVBFUl9JTk9ERVNfQ09VTlQoZnMtPnNiKQorCSAgICAtIEVYVDJfU1VQRVJfRlJFRV9JTk9ERVNfQ09VTlQoZnMtPnNiKQorCSAgICAJCT4gbmV3Z3JvdXBzICogRVhUMl9TVVBFUl9JTk9ERVNfUEVSX0dST1VQKGZzLT5zYikpCisJeworCQlwZWRfZXhjZXB0aW9uX3Rocm93IChQRURfRVhDRVBUSU9OX0VSUk9SLCBQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCV8oIllvdXIgZmlsZSBzeXN0ZW0gaGFzIHRvbyBtYW55IG9jY3VwaWVkIGlub2RlcyB0byAiCisJCQkgICJyZXNpemUgaXQgdG8gJWkgYmxvY2tzLiAgU29ycnkuIiksIG5ld3NpemUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIWV4dDJfaW5vZGVfcmVsb2NhdGUoZnMsIG5ld2dyb3VwcykpCisJCXJldHVybiAwOworCisJaWYgKCFleHQyX2Jsb2NrX3JlbG9jYXRlKGZzLCBuZXdzaXplKSkKKwkJcmV0dXJuIDA7CisKKwlkaWZmID0gRVhUMl9TVVBFUl9CTE9DS1NfQ09VTlQoZnMtPnNiKSAtIG5ld3NpemU7CisKKwlwZWRfdGltZXJfcmVzZXQgKHRpbWVyKTsKKwlwZWRfdGltZXJfc2V0X3N0YXRlX25hbWUgKHRpbWVyLCBfKCJzaHJpbmtpbmciKSk7CisKKwl3aGlsZSAoZGlmZiA+IDApCisJeworCQlwZWRfdGltZXJfdXBkYXRlICh0aW1lciwKKwkJCQkgIDEuMCAtIDEuMCAqIGRpZmYgLyAob3JpZ3NpemUgLSBuZXdzaXplKSk7CisKKwkJc2l6ZWxhc3QgPSBFWFQyX1NVUEVSX0JMT0NLU19DT1VOVChmcy0+c2IpCisJCQkgICAtIEVYVDJfU1VQRVJfRklSU1RfREFUQV9CTE9DSyhmcy0+c2IpIC0KKwkJCSAgIChmcy0+bnVtZ3JvdXBzIC0gMSkKKwkJCSAgIAkqIEVYVDJfU1VQRVJfQkxPQ0tTX1BFUl9HUk9VUChmcy0+c2IpOworCisJCWlmIChkaWZmIDwgc2l6ZWxhc3QpCisJCXsKKwkJCWlmICghZXh0Ml9zaHJpbmtfZ3JvdXAoZnMsIHNpemVsYXN0IC0gZGlmZikpCisJCQkJcmV0dXJuIDA7CisKKwkJCWRpZmYgPSAwOworCQl9CisJCWVsc2UKKwkJeworCQkJaWYgKCFleHQyX2RlbF9ncm91cChmcykpCisJCQkJcmV0dXJuIDA7CisKKwkJCWRpZmYgLT0gc2l6ZWxhc3Q7CisJCX0KKwl9CisJCisJcGVkX3RpbWVyX3VwZGF0ZSAodGltZXIsIDEuMCk7CisKKwlyZXR1cm4gMTsKK30KKworaW50IGV4dDJfZGV0ZXJtaW5lX2l0b2Zmc2V0KHN0cnVjdCBleHQyX2ZzICpmcykKK3sKKwlpbnQgaTsKKworCWZzLT5pdG9mZnNldCA9IEVYVDJfR1JPVVBfSU5PREVfVEFCTEUoZnMtPmdkWzBdKQorCQkgICAgICAgLSBFWFQyX1NVUEVSX0ZJUlNUX0RBVEFfQkxPQ0soZnMtPnNiKTsKKworICAgICAgICAvKlBFRF9ERUJVRyAoMHgyMCwgIml0b2Zmc2V0IGlzICVkIiwgZnMtPml0b2Zmc2V0KTsKKyAgICAgICAgCisgICAgICAgIFBFRF9ERUJVRyAoMHgyMCwgIndhbGtpbmcgJWQgZ3JvdXBzIiwgZnMtPm51bWdyb3Vwcyk7Ki8KKworCWZvciAoaT0wO2k8ZnMtPm51bWdyb3VwcztpKyspCisJeworCQlibGtfdCBzdGFydDsKKwkJYmxrX3QgYmI7CisJCWJsa190IGliOworCQlibGtfdCBpdDsKKworCQlzdGFydCA9IEVYVDJfU1VQRVJfRklSU1RfREFUQV9CTE9DSyhmcy0+c2IpCisJCQkrIChpICogRVhUMl9TVVBFUl9CTE9DS1NfUEVSX0dST1VQKGZzLT5zYikpOworCQlpdCA9IHN0YXJ0ICsgZnMtPml0b2Zmc2V0OworCisgICAgICAgICAgICAgICAgLypQRURfREVCVUcgKDB4MjEsICJzdGFydCA9ICVkLCBpdCA9ICVkIiwgc3RhcnQsIGl0KTsqLworCisJCWlmIChleHQyX2lzX2dyb3VwX3NwYXJzZShmcywgaSkpCisJCXsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qUEVEX0RFQlVHICgweDIxLCAiJWQgaGFzIGEgc3VwZXJibG9jayBjb3B5IiwgaSk7Ki8KKwkJCWJiID0gaXQgLSAyOworCQkJaWIgPSBpdCAtIDE7CisJCX0KKwkJZWxzZQorCQl7CisgICAgICAgICAgICAgICAgICAgICAgICAvKlBFRF9ERUJVRyAoMHgyMSwgIiVkIGRvZXNuJ3QgaGF2ZSBhIHN1cGVyYmxvY2sgY29weSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSk7Ki8KKwkJCWJiID0gc3RhcnQ7CisJCQlpYiA9IHN0YXJ0ICsgMTsKKwkJfQorCisJCWlmIChFWFQyX0dST1VQX0JMT0NLX0JJVE1BUChmcy0+Z2RbaV0pICE9IGJiIHx8CisJCSAgICBFWFQyX0dST1VQX0lOT0RFX0JJVE1BUChmcy0+Z2RbaV0pICE9IGliIHx8CisJCSAgICBFWFQyX0dST1VQX0lOT0RFX1RBQkxFKGZzLT5nZFtpXSkgIT0gaXQpCisJCXsKKwkJLyoJcGVkX2V4Y2VwdGlvbl90aHJvdyAoUEVEX0VYQ0VQVElPTl9OT19GRUFUVVJFLAorCQkJCVBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJXygiVGhpcyBleHQyIGZpbGUgc3lzdGVtIGhhcyBhIHJhdGhlciBzdHJhbmdlIGxheW91dCEgICIKKwkJCSAgIlBhcnRlZCBjYW4ndCByZXNpemUgdGhpcyAoeWV0KS4iKSk7Ki8KKworICAgICAgICAgICAgICAgICAvKiAgICAgICBQRURfREVCVUcgKDB4MjEsICJjYWxjdWxhdGVkIGJsb2NrIGJpdG1hcCB0byBiZSAlZCwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnV0IGZzIHNheXMgJWQuIiwgYmIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYVDJfR1JPVVBfQkxPQ0tfQklUTUFQKGZzLT5nZFtpXSkpOworICAgICAgICAgICAgICAgICAgICAgICAgUEVEX0RFQlVHICgweDIxLCAiY2FsY3VsYXRlZCBpbm9kZSBiaXRtYXAgdG8gYmUgJWQsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJ1dCBmcyBzYXlzICVkLiIsIGliLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFQyX0dST1VQX0lOT0RFX0JJVE1BUChmcy0+Z2RbaV0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFBFRF9ERUJVRyAoMHgyMSwgImNhbGN1bGF0ZWQgaW5vZGUgdGFibGUgdG8gYmUgJWQsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJ1dCBmcyBzYXlzICVkLiIsIGl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFQyX0dST1VQX0lOT0RFX1RBQkxFKGZzLT5nZFtpXSkpOyovCisgICAgICAgICAgICAgICAgICAgICAgICAKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJcmV0dXJuIDE7Cit9CisKK2ludCBleHQyX3Jlc2l6ZV9mcyhzdHJ1Y3QgZXh0Ml9mcyAqZnMsIGJsa190IG5ld3NpemUsIFBlZFRpbWVyKiB0aW1lcikKK3sKKwlibGtfdCByZXNpZHVlOworCWludCBzdGF0dXM7CisKKwlpZiAoRVhUMl9TVVBFUl9TVEFURShmcy0+c2IpICYgRVhUMl9FUlJPUl9GUykKKwl7CisJCXBlZF9leGNlcHRpb25fdGhyb3cgKAorCQkJUEVEX0VYQ0VQVElPTl9XQVJOSU5HLCBQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCV8oIkZpbGUgc3lzdGVtIGhhcyBlcnJvcnMhICBZb3Ugc2hvdWxkIHJ1biBlMmZzY2suIikpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIShFWFQyX1NVUEVSX1NUQVRFKGZzLT5zYikgJiBFWFQyX1ZBTElEX0ZTKSkKKwl7CisJCXBlZF9leGNlcHRpb25fdGhyb3cgKAorCQkJUEVEX0VYQ0VQVElPTl9FUlJPUiwgUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQlfKCJGaWxlIHN5c3RlbSB3YXMgbm90IGNsZWFubHkgdW5tb3VudGVkISAgIgorCQkJICAiWW91IHNob3VsZCBydW4gZTJmc2NrLiIpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKEVYVDJfU1VQRVJfRkVBVFVSRV9DT01QQVQoZnMtPnNiKQorCQkJJiBFWFQyX0ZFQVRVUkVfQ09NUEFUX0hBU19ESVJfSU5ERVgpIHsKKwkJaWYgKHBlZF9leGNlcHRpb25fdGhyb3cgKAorCQkJUEVEX0VYQ0VQVElPTl9XQVJOSU5HLCBQRURfRVhDRVBUSU9OX0lHTk9SRV9DQU5DRUwsCisJCQlfKCJUaGUgZmlsZSBzeXN0ZW0gaGFzIHRoZSAnZGlyX2luZGV4JyBmZWF0dXJlICIKKwkJCSAgImVuYWJsZWQuICBQYXJ0ZWQgY2FuIG9ubHkgcmVzaXplIHRoZSBmaWxlIHN5c3RlbSAiCisJCQkgICJpZiBpdCBkaXNhYmxlcyB0aGlzIGZlYXR1cmUuICBZb3UgY2FuIGVuYWJsZSBpdCAiCisJCQkgICJsYXRlciBieSBydW5uaW5nICd0dW5lMmZzIC1PIGRpcl9pbmRleCBERVZJQ0UnICIKKwkJCSAgImFuZCB0aGVuICdlMmZzY2sgLWZEIERFVklDRScuIikpCisJCQkJIT0gUEVEX0VYQ0VQVElPTl9JR05PUkUpCisJCQlyZXR1cm4gMDsKKwkJZnMtPnNiLnNfZmVhdHVyZV9jb21wYXQKKwkJCT0gUEVEX0NQVV9UT19MRTMyKEVYVDJfU1VQRVJfRkVBVFVSRV9DT01QQVQoZnMtPnNiKQorCQkJCQkgICYgfkVYVDJfRkVBVFVSRV9DT01QQVRfSEFTX0RJUl9JTkRFWCk7CisJCWZzLT5tZXRhZGlydHkgfD0gRVhUMl9NRVRBX1NCOworCX0KKworCWlmICghZXh0Ml9kZXRlcm1pbmVfaXRvZmZzZXQoZnMpICYmIHBlZF9leGNlcHRpb25fdGhyb3cgKAorICAgICAgICAgICAgICAgICAgICAgICAgUEVEX0VYQ0VQVElPTl9XQVJOSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgUEVEX0VYQ0VQVElPTl9PS19DQU5DRUwsCisgICAgICAgICAgICAgICAgICAgICAgICBfKCJBIHJlc2l6ZSBvcGVyYXRpb24gb24gdGhpcyBmaWxlIHN5c3RlbSB3aWxsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgInVzZSBFWFBFUklNRU5UQUwgY29kZVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAidGhhdCBNQVkgQ09SUlVQVCBpdCAoYWx0aG91Z2ggbm8gb25lIGhhcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXBvcnRlZCBhbnkgc3VjaCBkYW1hZ2UgeWV0KS5cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIllvdSBzaG91bGQgYXQgbGVhc3QgYmFja3VwIHlvdXIgZGF0YSBmaXJzdCwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiYW5kIHJ1biAnZTJmc2NrIC1mJyBhZnRlcndhcmRzLiIpKQorICAgICAgICAgICAgICAgID09IFBFRF9FWENFUFRJT05fQ0FOQ0VMKQorICAgICAgICB7CisJICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisJaWYgKGZzLT5vcHRfdmVyYm9zZSkKKyAgICAgICAgICAgICAgICBmcHV0cyAoImV4dDJfcmVzaXplX2ZzXG4iLCBzdGRlcnIpOworCisJcmVzaWR1ZSA9IChuZXdzaXplIC0gRVhUMl9TVVBFUl9GSVJTVF9EQVRBX0JMT0NLKGZzLT5zYikpCisJCSAgICUgRVhUMl9TVVBFUl9CTE9DS1NfUEVSX0dST1VQKGZzLT5zYik7CisJaWYgKHJlc2lkdWUgJiYgcmVzaWR1ZSA8PSBmcy0+YWRtaW5ibG9ja3MpCisJCW5ld3NpemUgLT0gcmVzaWR1ZTsKKworCWlmIChuZXdzaXplID09IEVYVDJfU1VQRVJfQkxPQ0tTX0NPVU5UKGZzLT5zYikpCisJCXJldHVybiAxOworCisJZnMtPnJlbG9jYXRvcl9wb29sCisJCT0gKHVuc2lnbmVkIGNoYXIgKilwZWRfbWFsbG9jKGV4dDJfcmVsb2NhdG9yX3Bvb2xfc2l6ZSA8PCAxMCk7CisJaWYgKCFmcy0+cmVsb2NhdG9yX3Bvb2wpCisJCXJldHVybiAwOworCWZzLT5yZWxvY2F0b3JfcG9vbF9lbmQKKwkJPSBmcy0+cmVsb2NhdG9yX3Bvb2wgKyAoZXh0Ml9yZWxvY2F0b3JfcG9vbF9zaXplIDw8IDEwKTsKKworCWlmIChuZXdzaXplIDwgRVhUMl9TVVBFUl9CTE9DS1NfQ09VTlQoZnMtPnNiKSkKKwkJc3RhdHVzID0gZXh0Ml9zaHJpbmtfZnMoZnMsIG5ld3NpemUsIHRpbWVyKTsKKwllbHNlCisJCXN0YXR1cyA9IGV4dDJfZ3Jvd19mcyhmcywgbmV3c2l6ZSwgdGltZXIpOworCisJcGVkX2ZyZWUoZnMtPnJlbG9jYXRvcl9wb29sKTsKKwlmcy0+cmVsb2NhdG9yX3Bvb2wgPSBOVUxMOworCWZzLT5yZWxvY2F0b3JfcG9vbF9lbmQgPSBOVUxMOworCisJcmV0dXJuIHN0YXR1czsKK30KKyNlbmRpZiAvKiAhRElTQ09WRVJfT05MWSAqLwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9leHQyL2ludGVyZmFjZS5jIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9leHQyL2ludGVyZmFjZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1NjIyOWYKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2V4dDIvaW50ZXJmYWNlLmMKQEAgLTAsMCArMSwzNTMgQEAKKy8qCisgICAgaW50ZXJmYWNlLmMgLS0gcGFydGVkIGJpbmRpbmcgZ2x1ZSB0byBsaWJleHQycmVzaXplCisgICAgQ29weXJpZ2h0IChDKSAxOTk4LTIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgIAorICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisvKiBWRVJTSU9OOiBsaWJleHQycmVzaXplIDEuMS42IChieSBMZW5uZXJ0KQorICogbWVyZ2VkIDEuMS4xMSBjaGFuZ2VzIChieSBBbmRyZXcpCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaW5jbHVkZSA8cGFydGVkL3BhcnRlZC5oPgorI2luY2x1ZGUgImV4dDIuaCIKKyNpbmNsdWRlICJwYXJ0ZWRfaW8uaCIKKworc3RhdGljIFBlZEZpbGVTeXN0ZW1UeXBlIF9leHQyX3R5cGU7CitzdGF0aWMgUGVkRmlsZVN5c3RlbVR5cGUgX2V4dDNfdHlwZTsKKworc3RydWN0IGV4dDJfZGV2X2hhbmRsZSogZXh0Ml9tYWtlX2Rldl9oYW5kbGVfZnJvbV9wYXJ0ZWRfZ2VvbWV0cnkoUGVkR2VvbWV0cnkqIGdlb20pOworCitzdGF0aWMgUGVkR2VvbWV0cnkqCitfZXh0Ml9nZW5lcmljX3Byb2JlIChQZWRHZW9tZXRyeSogZ2VvbSwgaW50IGV4cGVjdF9leHQzKQoreworCXN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrIHNiOworCisJaWYgKCFwZWRfZ2VvbWV0cnlfcmVhZChnZW9tLCAmc2IsIDIsIDIpKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChFWFQyX1NVUEVSX01BR0lDKHNiKSA9PSBFWFQyX1NVUEVSX01BR0lDX0NPTlNUKSB7CisJCVBlZFNlY3RvciBibG9ja19zaXplID0gMSA8PCAoRVhUMl9TVVBFUl9MT0dfQkxPQ0tfU0laRShzYikgKyAxKTsKKwkJUGVkU2VjdG9yIGJsb2NrX2NvdW50ID0gRVhUMl9TVVBFUl9CTE9DS1NfQ09VTlQoc2IpOworCQlQZWRTZWN0b3IgZ3JvdXBfYmxvY2tzID0gRVhUMl9TVVBFUl9CTE9DS1NfUEVSX0dST1VQKHNiKTsKKwkJUGVkU2VjdG9yIGdyb3VwX25yID0gRVhUMl9TVVBFUl9CTE9DS19HUk9VUF9OUihzYik7CisJCVBlZFNlY3RvciBmaXJzdF9kYXRhX2Jsb2NrID0gRVhUMl9TVVBFUl9GSVJTVF9EQVRBX0JMT0NLKHNiKTsKKwkJaW50IHZlcnNpb24gPSBFWFQyX1NVUEVSX1JFVl9MRVZFTChzYik7CisJCWludCBpc19leHQzID0gKEVYVDJfU1VQRVJfRkVBVFVSRV9DT01QQVQoc2IpIAorCQkJCSYgRVhUM19GRUFUVVJFX0NPTVBBVF9IQVNfSk9VUk5BTCkgIT0gMDsKKworCQlpZiAoZXhwZWN0X2V4dDMgIT0gaXNfZXh0MykKKwkJCXJldHVybiBOVUxMOworCisJCWlmICh2ZXJzaW9uID4gMCAmJiBncm91cF9uciA+IDApIHsKKwkJCVBlZFNlY3RvciBzdGFydDsKKwkJCVBlZEdlb21ldHJ5IHByb2JlX2dlb207CisKKwkJCXN0YXJ0ID0gZ2VvbS0+c3RhcnQKKwkJCQkJLSBncm91cF9ibG9ja3MgKiBncm91cF9ucgorCQkJCQktIGZpcnN0X2RhdGFfYmxvY2s7CisKKwkJCWlmIChzdGFydCA8IDApCisJCQkJcmV0dXJuIE5VTEw7CisJCQlwZWRfZ2VvbWV0cnlfaW5pdCAoJnByb2JlX2dlb20sIGdlb20tPmRldiwKKwkJCQkJICAgc3RhcnQsIGJsb2NrX2NvdW50ICogYmxvY2tfc2l6ZSk7CisJCQlyZXR1cm4gX2V4dDJfZ2VuZXJpY19wcm9iZSAoJnByb2JlX2dlb20sIGV4cGVjdF9leHQzKTsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiBwZWRfZ2VvbWV0cnlfbmV3IChnZW9tLT5kZXYsIGdlb20tPnN0YXJ0LAorCQkJCQkJIGJsb2NrX2NvdW50ICogYmxvY2tfc2l6ZSk7CisJCX0KKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBQZWRHZW9tZXRyeSoKK19leHQyX3Byb2JlIChQZWRHZW9tZXRyeSogZ2VvbSkKK3sKKwlyZXR1cm4gX2V4dDJfZ2VuZXJpY19wcm9iZSAoZ2VvbSwgMCk7Cit9CisKK3N0YXRpYyBQZWRHZW9tZXRyeSoKK19leHQzX3Byb2JlIChQZWRHZW9tZXRyeSogZ2VvbSkKK3sKKwlyZXR1cm4gX2V4dDJfZ2VuZXJpY19wcm9iZSAoZ2VvbSwgMSk7Cit9CisKKyNpZm5kZWYgRElTQ09WRVJfT05MWQorc3RhdGljIGludAorX2V4dDJfY2xvYmJlciAoUGVkR2VvbWV0cnkqIGdlb20pCit7CisJc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgc2I7CisKKwlpZiAoIXBlZF9nZW9tZXRyeV9yZWFkKGdlb20sICZzYiwgMiwgMikpCisJCXJldHVybiAwOworCWlmIChFWFQyX1NVUEVSX01BR0lDKHNiKSAhPSBFWFQyX1NVUEVSX01BR0lDX0NPTlNUKQorCQlyZXR1cm4gMTsKKworCXNiLnNfbWFnaWMgPSAwOworCXJldHVybiBwZWRfZ2VvbWV0cnlfd3JpdGUoZ2VvbSwgJnNiLCAyLCAyKTsKK30KKworc3RhdGljIFBlZEZpbGVTeXN0ZW0qCitfZXh0Ml9vcGVuIChQZWRHZW9tZXRyeSogZ2VvbSkKK3sKKwlQZWRGaWxlU3lzdGVtKgkJZnM7CisJc3RydWN0IGV4dDJfZnMqCQlmc19pbmZvOworCXN0cnVjdCBleHQyX2Rldl9oYW5kbGUqCWhhbmRsZTsKKworCWZzID0gKFBlZEZpbGVTeXN0ZW0qKSBwZWRfbWFsbG9jIChzaXplb2YgKFBlZEZpbGVTeXN0ZW0pKTsKKwlpZiAoIWZzKSBnb3RvIGVycm9yOworCisJZnMtPnR5cGUgPSAmX2V4dDJfdHlwZTsKKwlmcy0+Z2VvbSA9IHBlZF9nZW9tZXRyeV9kdXBsaWNhdGUgKGdlb20pOworCWZzLT5jaGVja2VkID0gMTsKKworCWhhbmRsZSA9IGV4dDJfbWFrZV9kZXZfaGFuZGxlX2Zyb21fcGFydGVkX2dlb21ldHJ5KGZzLT5nZW9tKTsKKwlpZiAoIWhhbmRsZSkgZ290byBlcnJvcl9mcmVlX2ZzOworCisJZnNfaW5mbyA9IChzdHJ1Y3QgZXh0Ml9mcyopIGV4dDJfb3BlbihoYW5kbGUsIDApOworCWlmICghZnNfaW5mbykgZ290byBlcnJvcl9mcmVlX2hhbmRsZTsKKworCWZzLT50eXBlX3NwZWNpZmljID0gKHZvaWQqKSBmc19pbmZvOworCWZzX2luZm8tPm9wdF92ZXJib3NlID0gMDsKKworCXJldHVybiBmczsKKworZXJyb3JfZnJlZV9oYW5kbGU6CisJZXh0Ml9kZXN0cm95X2Rldl9oYW5kbGUoaGFuZGxlKTsKK2Vycm9yX2ZyZWVfZnM6CisJcGVkX2ZyZWUoZnMpOworZXJyb3I6CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBQZWRGaWxlU3lzdGVtKgorX2V4dDJfY3JlYXRlIChQZWRHZW9tZXRyeSogZ2VvbSwgUGVkVGltZXIqIHRpbWVyKQoreworCVBlZEZpbGVTeXN0ZW0qCQlmczsKKwlzdHJ1Y3QgZXh0Ml9mcyoJCWZzX2luZm87CisJc3RydWN0IGV4dDJfZGV2X2hhbmRsZSoJaGFuZGxlOworCisJZnMgPSAoUGVkRmlsZVN5c3RlbSopIHBlZF9tYWxsb2MgKHNpemVvZiAoUGVkRmlsZVN5c3RlbSkpOworCWlmICghZnMpIGdvdG8gZXJyb3I7CisKKwlmcy0+dHlwZSA9ICZfZXh0Ml90eXBlOworCWZzLT5nZW9tID0gcGVkX2dlb21ldHJ5X2R1cGxpY2F0ZSAoZ2VvbSk7CisKKwloYW5kbGUgPSBleHQyX21ha2VfZGV2X2hhbmRsZV9mcm9tX3BhcnRlZF9nZW9tZXRyeShmcy0+Z2VvbSk7CisJaWYgKCFoYW5kbGUpIGdvdG8gZXJyb3JfZnJlZV9mczsKKworCWZzX2luZm8gPSBleHQyX21rZnMgKGhhbmRsZSwgMCwgMCwgMCwgMCwgLTEsIC0xLCB0aW1lcik7CisJaWYgKCFmc19pbmZvKSBnb3RvIGVycm9yX2ZyZWVfaGFuZGxlOworCisJZnMtPnR5cGVfc3BlY2lmaWMgPSAodm9pZCopIGZzX2luZm87CisJZnNfaW5mby0+b3B0X3ZlcmJvc2UgPSAwOworCisJcmV0dXJuIGZzOworCitlcnJvcl9mcmVlX2hhbmRsZToKKwlleHQyX2Rlc3Ryb3lfZGV2X2hhbmRsZShoYW5kbGUpOworZXJyb3JfZnJlZV9mczoKKwlwZWRfZnJlZShmcyk7CitlcnJvcjoKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludAorX2V4dDJfY2xvc2UgKFBlZEZpbGVTeXN0ZW0gKmZzKQoreworCXN0cnVjdCBleHQyX2Rldl9oYW5kbGUqIGhhbmRsZTsKKworCWhhbmRsZSA9ICgoc3RydWN0IGV4dDJfZnMqKWZzLT50eXBlX3NwZWNpZmljKS0+ZGV2aGFuZGxlOworCWV4dDJfY2xvc2UoZnMtPnR5cGVfc3BlY2lmaWMpOworCWV4dDJfZGVzdHJveV9kZXZfaGFuZGxlKGhhbmRsZSk7CisKKwlwZWRfZnJlZShmcyk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK19leHQyX2NoZWNrIChQZWRGaWxlU3lzdGVtICpmcywgUGVkVGltZXIqIHRpbWVyKQoreworCXBlZF9leGNlcHRpb25fdGhyb3cgKFBFRF9FWENFUFRJT05fSU5GT1JNQVRJT04sIFBFRF9FWENFUFRJT05fT0ssCisJCV8oIlRoZSBleHQyIGZpbGUgc3lzdGVtIHBhc3NlZCBhIGJhc2ljIGNoZWNrLiAgRm9yIGEgbW9yZSAiCisJCSAgImNvbXByZWhlbnNpdmUgY2hlY2ssIHVzZSB0aGUgZTJmc2NrIHByb2dyYW0uIikpOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50CitfZXh0Ml9yZXNpemUgKFBlZEZpbGVTeXN0ZW0qIGZzLCBQZWRHZW9tZXRyeSogZ2VvbSwgUGVkVGltZXIqIHRpbWVyKQoreworCXN0cnVjdCBleHQyX2ZzKiBmOworCVBlZFNlY3RvcglvbGRfbGVuZ3RoID0gZnMtPmdlb20tPmxlbmd0aDsKKworCVBFRF9BU1NFUlQgKGZzLT5nZW9tLT5kZXYgPT0gZ2VvbS0+ZGV2LCByZXR1cm4gMCk7CisKKwlpZiAoZnMtPmdlb20tPnN0YXJ0ICE9IGdlb20tPnN0YXJ0KQorCXsKKwkJcGVkX2V4Y2VwdGlvbl90aHJvdyAoUEVEX0VYQ0VQVElPTl9OT19GRUFUVVJFLAorCQkgICAgICBQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJICAgICAgXygiU29ycnksIGNhbid0IG1vdmUgdGhlIHN0YXJ0IG9mIGV4dDIgcGFydGl0aW9ucyB5ZXQhIikpOworCQlyZXR1cm4gMDsKKwl9CisKKwlnZW9tLT5kZXYtPmJvb3RfZGlydHkgPSAxOworCisJZiA9IChzdHJ1Y3QgZXh0Ml9mcyAqKSBmcy0+dHlwZV9zcGVjaWZpYzsKKworLyogZW5zdXJlIHRoYXQgdGhlIGdlb21ldHJ5IGNvbnRhaW5zIHRoZSBuZXcgYW5kIG9sZCBnZW9tZXRyeSAqLworCWlmIChvbGRfbGVuZ3RoID4gZ2VvbS0+bGVuZ3RoKSB7CisJCWlmICghZXh0Ml9yZXNpemVfZnMoZiwgZ2VvbS0+bGVuZ3RoID4+IChmLT5sb2dzaXplIC0gOSksCisJCQkJICAgIHRpbWVyKSkKKwkJCWdvdG8gZXJyb3I7CisKKwkJZnMtPmdlb20tPmxlbmd0aCA9IGdlb20tPmxlbmd0aDsKKwkJZnMtPmdlb20tPmVuZCA9IGZzLT5nZW9tLT5zdGFydCArIGdlb20tPmxlbmd0aCAtIDE7CisJfSBlbHNlIHsKKwkJZnMtPmdlb20tPmxlbmd0aCA9IGdlb20tPmxlbmd0aDsKKwkJZnMtPmdlb20tPmVuZCA9IGZzLT5nZW9tLT5zdGFydCArIGdlb20tPmxlbmd0aCAtIDE7CisKKwkJaWYgKCFleHQyX3Jlc2l6ZV9mcyhmLCBnZW9tLT5sZW5ndGggPj4gKGYtPmxvZ3NpemUgLSA5KSwKKwkJCQkgICAgdGltZXIpKQorCQkJZ290byBlcnJvcjsKKwl9CisJcmV0dXJuIDE7CisKK2Vycm9yOgorCXJldHVybiAwOworfQorCitzdGF0aWMgUGVkQ29uc3RyYWludCoKK19leHQyX2dldF9jcmVhdGVfY29uc3RyYWludCAoY29uc3QgUGVkRGV2aWNlKiBkZXYpCit7CisJUGVkR2VvbWV0cnkJZnVsbF9kZXY7CisKKwlpZiAoIXBlZF9nZW9tZXRyeV9pbml0ICgmZnVsbF9kZXYsIGRldiwgMCwgZGV2LT5sZW5ndGggLSAxKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gcGVkX2NvbnN0cmFpbnRfbmV3ICgKKwkJCXBlZF9hbGlnbm1lbnRfYW55LCBwZWRfYWxpZ25tZW50X2FueSwKKwkJCSZmdWxsX2RldiwgJmZ1bGxfZGV2LAorCQkJNjQsIGRldi0+bGVuZ3RoKTsKK30KKworc3RhdGljIFBlZENvbnN0cmFpbnQqCitfZXh0Ml9nZXRfcmVzaXplX2NvbnN0cmFpbnQgKGNvbnN0IFBlZEZpbGVTeXN0ZW0qIGZzKQoreworCXN0cnVjdCBleHQyX2ZzKiBmID0gKHN0cnVjdCBleHQyX2ZzICopIGZzLT50eXBlX3NwZWNpZmljOworCVBlZERldmljZSoJZGV2ID0gZnMtPmdlb20tPmRldjsKKwlQZWRBbGlnbm1lbnQJc3RhcnRfYWxpZ247CisJUGVkR2VvbWV0cnkJc3RhcnRfc2VjdG9yOworCVBlZEdlb21ldHJ5CWZ1bGxfZGV2OworCVBlZFNlY3RvcgltaW5fc2l6ZTsKKworCWlmICghcGVkX2FsaWdubWVudF9pbml0ICgmc3RhcnRfYWxpZ24sIGZzLT5nZW9tLT5zdGFydCwgMCkpCisJCXJldHVybiBOVUxMOworCWlmICghcGVkX2dlb21ldHJ5X2luaXQgKCZmdWxsX2RldiwgZGV2LCAwLCBkZXYtPmxlbmd0aCAtIDEpKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAoIXBlZF9nZW9tZXRyeV9pbml0ICgmc3RhcnRfc2VjdG9yLCBkZXYsIGZzLT5nZW9tLT5zdGFydCwgMSkpCisJCXJldHVybiBOVUxMOworCW1pbl9zaXplID0gKEVYVDJfU1VQRVJfQkxPQ0tTX0NPVU5UKGYtPnNiKQorCQkgICAJLSBFWFQyX1NVUEVSX0ZSRUVfQkxPQ0tTX0NPVU5UKGYtPnNiKSkKKwkJICAgKiAoZi0+YmxvY2tzaXplIC8gZGV2LT5zZWN0b3Jfc2l6ZSk7CisKKwlyZXR1cm4gcGVkX2NvbnN0cmFpbnRfbmV3ICgmc3RhcnRfYWxpZ24sIHBlZF9hbGlnbm1lbnRfYW55LAorCQkJCSAgICZzdGFydF9zZWN0b3IsICZmdWxsX2RldiwgbWluX3NpemUsCisJCQkJICAgZGV2LT5sZW5ndGgpOworfQorI2VuZGlmIC8qICFESVNDT1ZFUl9PTkxZICovCisKK3N0YXRpYyBQZWRGaWxlU3lzdGVtT3BzIF9leHQyX29wcyA9IHsKKwlwcm9iZToJCV9leHQyX3Byb2JlLAorI2lmbmRlZiBESVNDT1ZFUl9PTkxZCisJY2xvYmJlcjoJX2V4dDJfY2xvYmJlciwKKwlvcGVuOgkJX2V4dDJfb3BlbiwKKwljcmVhdGU6ICAgICAgICAgX2V4dDJfY3JlYXRlLAorCWNsb3NlOgkJX2V4dDJfY2xvc2UsCisJY2hlY2s6ICAgICAgICAgIF9leHQyX2NoZWNrLAorCXJlc2l6ZToJCV9leHQyX3Jlc2l6ZSwKKwljb3B5OiAgICAgICAgICAgTlVMTCwKKwlnZXRfY3JlYXRlX2NvbnN0cmFpbnQ6CV9leHQyX2dldF9jcmVhdGVfY29uc3RyYWludCwKKwlnZXRfY29weV9jb25zdHJhaW50OglOVUxMLAorCWdldF9yZXNpemVfY29uc3RyYWludDoJX2V4dDJfZ2V0X3Jlc2l6ZV9jb25zdHJhaW50CisjZWxzZSAvKiAhRElTQ09WRVJfT05MWSAqLworCWNsb2JiZXI6CU5VTEwsCisJb3BlbjoJCU5VTEwsCisJY3JlYXRlOiAgICAgICAgIE5VTEwsCisJY2xvc2U6CQlOVUxMLAorCWNoZWNrOiAgICAgICAgICBOVUxMLAorCXJlc2l6ZToJCU5VTEwsCisJY29weTogICAgICAgICAgIE5VTEwsCisJZ2V0X2NyZWF0ZV9jb25zdHJhaW50OglOVUxMLAorCWdldF9jb3B5X2NvbnN0cmFpbnQ6CU5VTEwsCisJZ2V0X3Jlc2l6ZV9jb25zdHJhaW50OglOVUxMCisjZW5kaWYgLyogIURJU0NPVkVSX09OTFkgKi8KK307CisKK3N0YXRpYyBQZWRGaWxlU3lzdGVtT3BzIF9leHQzX29wcyA9IHsKKwlwcm9iZToJCV9leHQzX3Byb2JlLAorI2lmbmRlZiBESVNDT1ZFUl9PTkxZCisJY2xvYmJlcjoJX2V4dDJfY2xvYmJlciwKKwlvcGVuOgkJX2V4dDJfb3BlbiwKKwljcmVhdGU6ICAgICAgICAgTlVMTCwKKwljbG9zZToJCV9leHQyX2Nsb3NlLAorCWNoZWNrOiAgICAgICAgICBfZXh0Ml9jaGVjaywKKwlyZXNpemU6CQlfZXh0Ml9yZXNpemUsCisJY29weTogICAgICAgICAgIE5VTEwsCisJZ2V0X2NyZWF0ZV9jb25zdHJhaW50OglfZXh0Ml9nZXRfY3JlYXRlX2NvbnN0cmFpbnQsCisJZ2V0X2NvcHlfY29uc3RyYWludDoJTlVMTCwKKwlnZXRfcmVzaXplX2NvbnN0cmFpbnQ6CV9leHQyX2dldF9yZXNpemVfY29uc3RyYWludAorI2Vsc2UgLyogIURJU0NPVkVSX09OTFkgKi8KKwljbG9iYmVyOglOVUxMLAorCW9wZW46CQlOVUxMLAorCWNyZWF0ZTogICAgICAgICBOVUxMLAorCWNsb3NlOgkJTlVMTCwKKwljaGVjazogICAgICAgICAgTlVMTCwKKwlyZXNpemU6CQlOVUxMLAorCWNvcHk6ICAgICAgICAgICBOVUxMLAorCWdldF9jcmVhdGVfY29uc3RyYWludDoJTlVMTCwKKwlnZXRfY29weV9jb25zdHJhaW50OglOVUxMLAorCWdldF9yZXNpemVfY29uc3RyYWludDoJTlVMTAorI2VuZGlmIC8qICFESVNDT1ZFUl9PTkxZICovCit9OworCisjZGVmaW5lIEVYVDIzX0JMT0NLX1NJWkVTICgoaW50WzZdKXs1MTIsIDEwMjQsIDIwNDgsIDQwOTYsIDgxOTIsIDB9KQorCitzdGF0aWMgUGVkRmlsZVN5c3RlbVR5cGUgX2V4dDJfdHlwZSA9IHsKKyAgICAgICBuZXh0OgkJIE5VTEwsCisgICAgICAgb3BzOgkJICZfZXh0Ml9vcHMsCisgICAgICAgbmFtZToJCSAiZXh0MiIsCisgICAgICAgYmxvY2tfc2l6ZXM6ICAgICAgRVhUMjNfQkxPQ0tfU0laRVMKK307CisKK3N0YXRpYyBQZWRGaWxlU3lzdGVtVHlwZSBfZXh0M190eXBlID0geworICAgICAgIG5leHQ6CQkgTlVMTCwKKyAgICAgICBvcHM6CQkgJl9leHQzX29wcywKKyAgICAgICBuYW1lOgkJICJleHQzIiwKKyAgICAgICBibG9ja19zaXplczogICAgICBFWFQyM19CTE9DS19TSVpFUworfTsKKwordm9pZCBwZWRfZmlsZV9zeXN0ZW1fZXh0Ml9pbml0ICgpCit7CisJcGVkX2ZpbGVfc3lzdGVtX3R5cGVfcmVnaXN0ZXIgKCZfZXh0Ml90eXBlKTsKKwlwZWRfZmlsZV9zeXN0ZW1fdHlwZV9yZWdpc3RlciAoJl9leHQzX3R5cGUpOworfQorCit2b2lkIHBlZF9maWxlX3N5c3RlbV9leHQyX2RvbmUgKCkKK3sKKwlwZWRfZmlsZV9zeXN0ZW1fdHlwZV91bnJlZ2lzdGVyICgmX2V4dDJfdHlwZSk7CisJcGVkX2ZpbGVfc3lzdGVtX3R5cGVfdW5yZWdpc3RlciAoJl9leHQzX3R5cGUpOworfQpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9leHQyL3BhcnRlZF9pby5jIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9leHQyL3BhcnRlZF9pby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2MDNiMjIKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2V4dDIvcGFydGVkX2lvLmMKQEAgLTAsMCArMSwxMzYgQEAKKy8qCisgICAgcGFydGVkX2lvLmMgLS0gcGFydGVkIEkvTyBjb2RlIGludGVyZmFjZSBmb3IgbGliZXh0MnJlc2l6ZQorICAgIENvcHlyaWdodCAoQykgMTk5OC0yMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaWZuZGVmIERJU0NPVkVSX09OTFkKKworI2luY2x1ZGUgPHBhcnRlZC9wYXJ0ZWQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgImV4dDIuaCIKKworLyogcHNldWRvLWhlYWRlci4uLi4gKi8KKworbG9mZl90IGxsc2Vlayh1bnNpZ25lZCBpbnQgZmQsIGxvZmZfdCBvZmZzZXQsIHVuc2lnbmVkIGludCB3aGVuY2UpOworCitzdHJ1Y3QgbXlfY29va2llCit7CisJaW50IGxvZ3NpemU7CisJUGVkR2VvbWV0cnkqIGdlb207Cit9OworCisvKiAuLi50aGVuIHRoaXMgbXVzdCBiZSBwc2V1ZG8tY29kZSAgOi0pICovCisKK3N0YXRpYyBpbnQgICBkb19jbG9zZSAgICAgICAgKHZvaWQgKmNvb2tpZSk7CitzdGF0aWMgaW50ICAgZG9fc3luYyAgICAgICAgICh2b2lkICpjb29raWUpOworc3RhdGljIGJsa190IGRvX2dldF9zaXplICAgICAodm9pZCAqY29va2llKTsKK3N0YXRpYyBpbnQgICBkb19yZWFkICAgICAgICAgKHZvaWQgKmNvb2tpZSwgdm9pZCAqcHRyLCBibGtfdCBibG9jaywgYmxrX3QgbnVtYmxvY2tzKTsKK3N0YXRpYyBpbnQgICBkb19zZXRfYmxvY2tzaXplKHZvaWQgKmNvb2tpZSwgaW50IGxvZ3NpemUpOworc3RhdGljIGludCAgIGRvX3dyaXRlICAgICAgICAodm9pZCAqY29va2llLCB2b2lkICpwdHIsIGJsa190IGJsb2NrLCBibGtfdCBudW1ibG9ja3MpOworCitzdHJ1Y3QgZXh0Ml9kZXZfb3BzIG9wcyA9Cit7CisJY2xvc2U6CQlkb19jbG9zZSwKKwlnZXRfc2l6ZToJZG9fZ2V0X3NpemUsCisJcmVhZDoJCWRvX3JlYWQsCisJc2V0X2Jsb2Nrc2l6ZToJZG9fc2V0X2Jsb2Nrc2l6ZSwKKwlzeW5jOgkJZG9fc3luYywKKwl3cml0ZToJCWRvX3dyaXRlCit9OworCisKKworc3RhdGljIGludCBkb19jbG9zZSh2b2lkICpjb29raWUpCit7CisJc3RydWN0IG15X2Nvb2tpZSAqbW9uc3RlciA9IGNvb2tpZTsKKworCXJldHVybiBwZWRfZ2VvbWV0cnlfc3luYyhtb25zdGVyLT5nZW9tKTsKK30KKworc3RhdGljIGludCBkb19zeW5jKHZvaWQgKmNvb2tpZSkKK3sKKwlzdHJ1Y3QgbXlfY29va2llICptb25zdGVyID0gY29va2llOworCisJcmV0dXJuIHBlZF9nZW9tZXRyeV9zeW5jKG1vbnN0ZXItPmdlb20pOworfQorCitzdGF0aWMgYmxrX3QgZG9fZ2V0X3NpemUodm9pZCAqY29va2llKQoreworCXN0cnVjdCBteV9jb29raWUgKm1vbnN0ZXIgPSBjb29raWU7CisKKwlyZXR1cm4gbW9uc3Rlci0+Z2VvbS0+bGVuZ3RoID4+IChtb25zdGVyLT5sb2dzaXplIC0gOSk7Cit9CisKK3N0YXRpYyBpbnQgZG9fcmVhZCh2b2lkICpjb29raWUsIHZvaWQgKnB0ciwgYmxrX3QgYmxvY2ssIGJsa190IG51bSkKK3sKKwlzdHJ1Y3QgbXlfY29va2llICptb25zdGVyID0gY29va2llOworCisJcmV0dXJuIHBlZF9nZW9tZXRyeV9yZWFkKG1vbnN0ZXItPmdlb20sIHB0ciwgYmxvY2sgPDwgKG1vbnN0ZXItPmxvZ3NpemUgLSA5KSwgbnVtIDw8IChtb25zdGVyLT5sb2dzaXplIC0gOSkpOworfQorCitzdGF0aWMgaW50IGRvX3NldF9ibG9ja3NpemUodm9pZCAqY29va2llLCBpbnQgbG9nc2l6ZSkKK3sKKwlzdHJ1Y3QgbXlfY29va2llICptb25zdGVyID0gY29va2llOworCisJbW9uc3Rlci0+bG9nc2l6ZSA9IGxvZ3NpemU7CisJcmV0dXJuIDE7Cit9IAorCitzdGF0aWMgaW50IGRvX3dyaXRlKHZvaWQgKmNvb2tpZSwgdm9pZCAqcHRyLCBibGtfdCBibG9jaywgYmxrX3QgbnVtKQoreworCXN0cnVjdCBteV9jb29raWUgKm1vbnN0ZXIgPSBjb29raWU7CisKKwlyZXR1cm4gcGVkX2dlb21ldHJ5X3dyaXRlKG1vbnN0ZXItPmdlb20sIHB0ciwKKwkJCQkgIGJsb2NrIDw8IChtb25zdGVyLT5sb2dzaXplIC0gOSksCisJCQkJICBudW0gPDwgKG1vbnN0ZXItPmxvZ3NpemUgLSA5KSk7Cit9CisKKworc3RydWN0IGV4dDJfZGV2X2hhbmRsZSAqZXh0Ml9tYWtlX2Rldl9oYW5kbGVfZnJvbV9wYXJ0ZWRfZ2VvbWV0cnkoUGVkR2VvbWV0cnkqIGdlb20pCit7CisJc3RydWN0IGV4dDJfZGV2X2hhbmRsZSAqZGg7CisJc3RydWN0IG15X2Nvb2tpZSAqbW9uc3RlcjsKKworCWlmICgoZGggPSBwZWRfbWFsbG9jKHNpemVvZihzdHJ1Y3QgZXh0Ml9kZXZfaGFuZGxlKSkpID09IE5VTEwpCisJCWdvdG8gZXJyb3I7CisKKwlpZiAoKG1vbnN0ZXIgPSBwZWRfbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXlfY29va2llKSkpID09IE5VTEwpCisJCWdvdG8gZXJyb3JfZnJlZV9kaDsKKworCWRoLT5vcHMgPSAmb3BzOworCWRoLT5jb29raWUgPSBtb25zdGVyOworCW1vbnN0ZXItPmxvZ3NpemUgPSA5OworCW1vbnN0ZXItPmdlb20gPSBnZW9tOworCisJcmV0dXJuIGRoOworCitlcnJvcl9mcmVlX2RoOgorCXBlZF9mcmVlKGRoKTsKK2Vycm9yOgorCXJldHVybiBOVUxMOworfQorCit2b2lkIGV4dDJfZGVzdHJveV9kZXZfaGFuZGxlKHN0cnVjdCBleHQyX2Rldl9oYW5kbGUgKmhhbmRsZSkKK3sKKwlwZWRfZ2VvbWV0cnlfZGVzdHJveSgoKHN0cnVjdCBteV9jb29raWUgKiloYW5kbGUtPmNvb2tpZSktPmdlb20pOworCXBlZF9mcmVlKGhhbmRsZS0+Y29va2llKTsKKwlwZWRfZnJlZShoYW5kbGUpOworfQorI2VuZGlmIC8qICFESVNDT1ZFUl9PTkxZICovCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2V4dDIvcGFydGVkX2lvLmggYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2V4dDIvcGFydGVkX2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc5NjEzOAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvZXh0Mi9wYXJ0ZWRfaW8uaApAQCAtMCwwICsxLDI4IEBACisvKgorICAgIHBhcnRlZF9pby5oCisgICAgQ29weXJpZ2h0IChDKSAxOTk4LTIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgIAorICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIF9QQVJURURfSU9fSAorI2RlZmluZSBfUEFSVEVEX0lPX0gKKworI2luY2x1ZGUgImV4dDIuaCIKKwordm9pZCBleHQyX2Rlc3Ryb3lfZGV2X2hhbmRsZShzdHJ1Y3QgZXh0Ml9kZXZfaGFuZGxlICpoYW5kbGUpOworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9leHQyL3R1bmUuYyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvZXh0Mi90dW5lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJhZGI0OAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvZXh0Mi90dW5lLmMKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAgICB0dW5lLmMgLS0gdHVuZWFibGUgc3R1ZmYKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworI2lmbmRlZiBESVNDT1ZFUl9PTkxZCisKKy8qCisgKiBtYXliZSBpJ2xsIG1ha2UgdGhpcyBhbGwgY29tbWFuZC1saW5lIGNvbmZpZ3VyYWJsZSBvbmUgZGF5CisgKi8KKworLyogVGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBjYWNoZSBpbiBraWxvYnl0ZXMuIE5vdGUgdGhhdCB0aGlzIGlzIG9ubHkKKyAgIHRoZSBhY3R1YWwgYnVmZmVyIG1lbW9yeS4gT24gdG9wIG9mIHRoaXMgYW1vdW50IGFkZGl0aW9uYWwgbWVtb3J5CisgICB3aWxsIGJlIGFsbG9jYXRlZCBmb3IgYnVmZmVyIGNhY2hlIGJvb2trZWVwaW5nLiAqLworaW50IGV4dDJfYnVmZmVyX2NhY2hlX3Bvb2xfc2l6ZSA9IDUxMjsKKworLyogVGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBjYWNoZSBoYXNoIHRhYmxlIChsb2cyIG9mICMgb2YgYnVja2V0cykuICovCitpbnQgZXh0Ml9oYXNoX2JpdHMgPSA4OworCisvKiBUaGUgYmxvY2svaW5vZGUgcmVsb2NhdG9yIHBvb2wgc2l6ZSBpbiBraWxvYnl0ZXMuIE1ha2UgdGhpcyBhcyBiaWcKKyAgIGFzIHlvdSBjYW4uIFRoZSBzbWFsbGVyIHRoaXMgaXMsIHRoZSBtb3JlIGRpc2sgSS9PIGlzIHJlcXVpcmVkIGZvcgorICAgZG9pbmcgcmVsb2NhdGlvbnMuICovCitpbnQgZXh0Ml9yZWxvY2F0b3JfcG9vbF9zaXplID0gNDA5NjsKKyNlbmRpZiAvKiAhRElTQ09WRVJfT05MWSAqLwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9leHQyL3R1bmUuaCBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvZXh0Mi90dW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZhZGVjZQotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvZXh0Mi90dW5lLmgKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAgICB0dW5lLmggLS0gZXh0MiB0dW5hYmxlcyBoZWFkZXIKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgX1RVTkVfSAorI2RlZmluZSBfVFVORV9ICisKKyNkZWZpbmUgTUFYQ09OVCAgMjU2CisKK2V4dGVybiBpbnQgZXh0Ml9idWZmZXJfY2FjaGVfcG9vbF9zaXplOworZXh0ZXJuIGludCBleHQyX2hhc2hfYml0czsKK2V4dGVybiBpbnQgZXh0Ml9tYXhfZ3JvdXBzOworZXh0ZXJuIGludCBleHQyX3JlbG9jYXRvcl9wb29sX3NpemU7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9mYXQvTWFrZWZpbGUuYW0gYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2ZhdC9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDdmYTc0Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9mYXQvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSwyNiBAQAorcGFydGVkaW5jbHVkZWRpciAgICAgID0JLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUKKworbm9pbnN0X0xUTElCUkFSSUVTICAgID0JbGliZmF0LmxhCitsaWJmYXRfbGFfU09VUkNFUyAgICAgPSBib290c2VjdG9yLmMJXAorCQkJYm9vdHNlY3Rvci5oCVwKKwkJCWNhbGMuYwkJXAorCQkJY2FsYy5oCQlcCisJCQljbHN0ZHVwLmMJXAorCQkJY2xzdGR1cC5oCVwKKwkJCWNvbnRleHQuYwlcCisJCQljb250ZXh0LmgJXAorCQkJY291bnQuYwkJXAorCQkJY291bnQuaAkJXAorCQkJZmF0LmMJCVwKKwkJCWZhdC5oCQlcCisJCQlmYXRpby5jCQlcCisJCQlmYXRpby5oCQlcCisJCQl0YWJsZS5jCQlcCisJCQl0YWJsZS5oCQlcCisJCQl0cmF2ZXJzZS5jCVwKKwkJCXRyYXZlcnNlLmgJXAorCQkJcmVzaXplLmMKKworSU5DTFVERVMgPSAkKHBhcnRlZGluY2x1ZGVkaXIpICQoSU5UTElOQ1MpCisKK01BSU5UQUlORVJDTEVBTkZJTEVTID0gTWFrZWZpbGUuaW4KZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvZmF0L01ha2VmaWxlLmluIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9mYXQvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIyYjY4YgotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvZmF0L01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNjUzIEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjEwIGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK3N1YmRpciA9IGxpYnBhcnRlZC9mcy9mYXQKK0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbgorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvbTQvYWJzb2x1dGUtaGVhZGVyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2FsbG9jYS5tNCAkKHRvcF9zcmNkaXIpL200L2Fzc2VydC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9hdGV4aXQubTQgJCh0b3Bfc3JjZGlyKS9tNC9jYWxsb2MubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY2xvc2Utc3RyZWFtLm00ICQodG9wX3NyY2RpcikvbTQvY2xvc2VvdXQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY29kZXNldC5tNCAkKHRvcF9zcmNkaXIpL200L2NvbmZpZy1oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2Rpcm5hbWUubTQgJCh0b3Bfc3JjZGlyKS9tNC9kb3MubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZG91YmxlLXNsYXNoLXJvb3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZXJyb3IubTQgJCh0b3Bfc3JjZGlyKS9tNC9leGl0ZmFpbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9leHRlbnNpb25zLm00ICQodG9wX3NyY2RpcikvbTQvZnBlbmRpbmcubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZnJlZS5tNCAkKHRvcF9zcmNkaXIpL200L2dldG9wdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00ICQodG9wX3NyY2RpcikvbTQvZ2xpYmMyMS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9nbnVsaWItY29tbW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2dudWxpYi1jb21wLm00ICQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaW5saW5lLm00ICQodG9wX3NyY2RpcikvbTQvaW50dHlwZXMtcHJpLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ludHR5cGVzLm00ICQodG9wX3NyY2RpcikvbTQvbGliLWlnbm9yZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xvY2FsY2hhcnNldC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sb25nLW9wdGlvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9sb25nbG9uZy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tYnJ0b3djLm00ICQodG9wX3NyY2RpcikvbTQvbWJzdGF0ZV90Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21lbWNoci5tNCAkKHRvcF9zcmNkaXIpL200L21lbWNtcC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tZW1jcHkubTQgJCh0b3Bfc3JjZGlyKS9tNC9tZW1tb3ZlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21lbXNldC5tNCAkKHRvcF9zcmNkaXIpL200L25scy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCAkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3F1b3RlYXJnLm00ICQodG9wX3NyY2RpcikvbTQvcmVnZXgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcmVuYW1lLm00ICQodG9wX3NyY2RpcikvbTQvcnBtYXRjaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zYWZlLXJlYWQubTQgJCh0b3Bfc3JjZGlyKS9tNC9zYWZlLXdyaXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3NzaXplX3QubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGRhcmcubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RkYm9vbC5tNCAkKHRvcF9zcmNkaXIpL200L3N0ZGludC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdGRsaWJfaC5tNCAkKHRvcF9zcmNkaXIpL200L3N0cmNzcG4ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RyaW5nX2gubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHJuZHVwLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0cm5sZW4ubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHJ0b2QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RydG9sLm00ICQodG9wX3NyY2RpcikvbTQvdW5pc3RkX2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdXRpbWJ1Zi5tNCAkKHRvcF9zcmNkaXIpL200L3V0aW1lLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3V0aW1lcy1udWxsLm00ICQodG9wX3NyY2RpcikvbTQvd2NoYXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvd2N0eXBlLm00ICQodG9wX3NyY2RpcikvbTQvd2ludF90Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3hhbGxvYy5tNCAkKHRvcF9zcmNkaXIpL200L3hzdHJuZHVwLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitMVExJQlJBUklFUyA9ICQobm9pbnN0X0xUTElCUkFSSUVTKQorbGliZmF0X2xhX0xJQkFERCA9CithbV9saWJmYXRfbGFfT0JKRUNUUyA9IGJvb3RzZWN0b3IubG8gY2FsYy5sbyBjbHN0ZHVwLmxvIGNvbnRleHQubG8gXAorCWNvdW50LmxvIGZhdC5sbyBmYXRpby5sbyB0YWJsZS5sbyB0cmF2ZXJzZS5sbyByZXNpemUubG8KK2xpYmZhdF9sYV9PQkpFQ1RTID0gJChhbV9saWJmYXRfbGFfT0JKRUNUUykKK0RFRkFVTFRfSU5DTFVERVMgPSAtSS4gLUkkKHRvcF9idWlsZGRpcikvbGliQGFtX19pc3JjQAorZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L2RlcGNvbXAKK2FtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCitDT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKKwkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitMVENPTVBJTEUgPSAkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorCS0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSBcCisJJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorQ0NMRCA9ICQoQ0MpCitMSU5LID0gJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIFwKKwktLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSBcCisJJChMREZMQUdTKSAtbyAkQAorU09VUkNFUyA9ICQobGliZmF0X2xhX1NPVVJDRVMpCitESVNUX1NPVVJDRVMgPSAkKGxpYmZhdF9sYV9TT1VSQ0VTKQorRVRBR1MgPSBldGFncworQ1RBR1MgPSBjdGFncworRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FCU09MVVRFX0lOVFRZUEVTX0ggPSBAQUJTT0xVVEVfSU5UVFlQRVNfSEAKK0FCU09MVVRFX1NURElOVF9IID0gQEFCU09MVVRFX1NURElOVF9IQAorQUJTT0xVVEVfU1RETElCX0ggPSBAQUJTT0xVVEVfU1RETElCX0hACitBQlNPTFVURV9TVFJJTkdfSCA9IEBBQlNPTFVURV9TVFJJTkdfSEAKK0FCU09MVVRFX1VOSVNURF9IID0gQEFCU09MVVRFX1VOSVNURF9IQAorQUJTT0xVVEVfV0NIQVJfSCA9IEBBQlNPTFVURV9XQ0hBUl9IQAorQUJTT0xVVEVfV0NUWVBFX0ggPSBAQUJTT0xVVEVfV0NUWVBFX0hACitBQ0xPQ0FMID0gQEFDTE9DQUxACitBTExPQ0EgPSBAQUxMT0NBQAorQUxMT0NBX0ggPSBAQUxMT0NBX0hACitBTVRBUiA9IEBBTVRBUkAKK0FSID0gQEFSQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitCSVRTSVpFT0ZfUFRSRElGRl9UID0gQEJJVFNJWkVPRl9QVFJESUZGX1RACitCSVRTSVpFT0ZfU0lHX0FUT01JQ19UID0gQEJJVFNJWkVPRl9TSUdfQVRPTUlDX1RACitCSVRTSVpFT0ZfU0laRV9UID0gQEJJVFNJWkVPRl9TSVpFX1RACitCSVRTSVpFT0ZfV0NIQVJfVCA9IEBCSVRTSVpFT0ZfV0NIQVJfVEAKK0JJVFNJWkVPRl9XSU5UX1QgPSBAQklUU0laRU9GX1dJTlRfVEAKK0JVSUxESU5GTyA9IEBCVUlMRElORk9ACitDQyA9IEBDQ0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ0hFQ0tfQ0ZMQUdTID0gQENIRUNLX0NGTEFHU0AKK0NIRUNLX0xJQlMgPSBAQ0hFQ0tfTElCU0AKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RMX0xJQlMgPSBARExfTElCU0AKK0RNX0xJQlMgPSBARE1fTElCU0AKK0VDSE8gPSBARUNIT0AKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRVhFRVhUID0gQEVYRUVYVEAKK0Y3NyA9IEBGNzdACitGRkxBR1MgPSBARkZMQUdTQAorR0VUT1BUX0ggPSBAR0VUT1BUX0hACitHTElCQzIxID0gQEdMSUJDMjFACitHTVNHRk1UID0gQEdNU0dGTVRACitHTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKK0dOVUxJQl9DSE9XTiA9IEBHTlVMSUJfQ0hPV05ACitHTlVMSUJfRFVQMiA9IEBHTlVMSUJfRFVQMkAKK0dOVUxJQl9GQ0hESVIgPSBAR05VTElCX0ZDSERJUkAKK0dOVUxJQl9GVFJVTkNBVEUgPSBAR05VTElCX0ZUUlVOQ0FURUAKK0dOVUxJQl9HRVRDV0QgPSBAR05VTElCX0dFVENXREAKK0dOVUxJQl9HRVRMT0dJTl9SID0gQEdOVUxJQl9HRVRMT0dJTl9SQAorR05VTElCX0dFVFNVQk9QVCA9IEBHTlVMSUJfR0VUU1VCT1BUQAorR05VTElCX0lNQVhBQlMgPSBAR05VTElCX0lNQVhBQlNACitHTlVMSUJfSU1BWERJViA9IEBHTlVMSUJfSU1BWERJVkAKK0dOVUxJQl9NQlNDQVNFQ01QID0gQEdOVUxJQl9NQlNDQVNFQ01QQAorR05VTElCX01CU0NBU0VTVFIgPSBAR05VTElCX01CU0NBU0VTVFJACitHTlVMSUJfTUJTQ0hSID0gQEdOVUxJQl9NQlNDSFJACitHTlVMSUJfTUJTQ1NQTiA9IEBHTlVMSUJfTUJTQ1NQTkAKK0dOVUxJQl9NQlNMRU4gPSBAR05VTElCX01CU0xFTkAKK0dOVUxJQl9NQlNOQ0FTRUNNUCA9IEBHTlVMSUJfTUJTTkNBU0VDTVBACitHTlVMSUJfTUJTUEJSSyA9IEBHTlVMSUJfTUJTUEJSS0AKK0dOVUxJQl9NQlNQQ0FTRUNNUCA9IEBHTlVMSUJfTUJTUENBU0VDTVBACitHTlVMSUJfTUJTUkNIUiA9IEBHTlVMSUJfTUJTUkNIUkAKK0dOVUxJQl9NQlNTRVAgPSBAR05VTElCX01CU1NFUEAKK0dOVUxJQl9NQlNTUE4gPSBAR05VTElCX01CU1NQTkAKK0dOVUxJQl9NQlNTVFIgPSBAR05VTElCX01CU1NUUkAKK0dOVUxJQl9NQlNUT0tfUiA9IEBHTlVMSUJfTUJTVE9LX1JACitHTlVMSUJfTUVNTUVNID0gQEdOVUxJQl9NRU1NRU1ACitHTlVMSUJfTUVNUENQWSA9IEBHTlVMSUJfTUVNUENQWUAKK0dOVUxJQl9NRU1SQ0hSID0gQEdOVUxJQl9NRU1SQ0hSQAorR05VTElCX01LRFRFTVAgPSBAR05VTElCX01LRFRFTVBACitHTlVMSUJfTUtTVEVNUCA9IEBHTlVMSUJfTUtTVEVNUEAKK0dOVUxJQl9SRUFETElOSyA9IEBHTlVMSUJfUkVBRExJTktACitHTlVMSUJfU0xFRVAgPSBAR05VTElCX1NMRUVQQAorR05VTElCX1NUUENQWSA9IEBHTlVMSUJfU1RQQ1BZQAorR05VTElCX1NUUE5DUFkgPSBAR05VTElCX1NUUE5DUFlACitHTlVMSUJfU1RSQ0FTRVNUUiA9IEBHTlVMSUJfU1RSQ0FTRVNUUkAKK0dOVUxJQl9TVFJDSFJOVUwgPSBAR05VTElCX1NUUkNIUk5VTEAKK0dOVUxJQl9TVFJEVVAgPSBAR05VTElCX1NUUkRVUEAKK0dOVUxJQl9TVFJORFVQID0gQEdOVUxJQl9TVFJORFVQQAorR05VTElCX1NUUk5MRU4gPSBAR05VTElCX1NUUk5MRU5ACitHTlVMSUJfU1RSUEJSSyA9IEBHTlVMSUJfU1RSUEJSS0AKK0dOVUxJQl9TVFJTRVAgPSBAR05VTElCX1NUUlNFUEAKK0dOVUxJQl9TVFJUT0lNQVggPSBAR05VTElCX1NUUlRPSU1BWEAKK0dOVUxJQl9TVFJUT0tfUiA9IEBHTlVMSUJfU1RSVE9LX1JACitHTlVMSUJfU1RSVE9VTUFYID0gQEdOVUxJQl9TVFJUT1VNQVhACitHUkVQID0gQEdSRVBACitIQVZFX0RFQ0xfR0VUTE9HSU5fUiA9IEBIQVZFX0RFQ0xfR0VUTE9HSU5fUkAKK0hBVkVfREVDTF9JTUFYQUJTID0gQEhBVkVfREVDTF9JTUFYQUJTQAorSEFWRV9ERUNMX0lNQVhESVYgPSBASEFWRV9ERUNMX0lNQVhESVZACitIQVZFX0RFQ0xfTUVNTUVNID0gQEhBVkVfREVDTF9NRU1NRU1ACitIQVZFX0RFQ0xfTUVNUkNIUiA9IEBIQVZFX0RFQ0xfTUVNUkNIUkAKK0hBVkVfREVDTF9TVFJEVVAgPSBASEFWRV9ERUNMX1NUUkRVUEAKK0hBVkVfREVDTF9TVFJOQ0FTRUNNUCA9IEBIQVZFX0RFQ0xfU1RSTkNBU0VDTVBACitIQVZFX0RFQ0xfU1RSTkRVUCA9IEBIQVZFX0RFQ0xfU1RSTkRVUEAKK0hBVkVfREVDTF9TVFJOTEVOID0gQEhBVkVfREVDTF9TVFJOTEVOQAorSEFWRV9ERUNMX1NUUlRPSU1BWCA9IEBIQVZFX0RFQ0xfU1RSVE9JTUFYQAorSEFWRV9ERUNMX1NUUlRPS19SID0gQEhBVkVfREVDTF9TVFJUT0tfUkAKK0hBVkVfREVDTF9TVFJUT1VNQVggPSBASEFWRV9ERUNMX1NUUlRPVU1BWEAKK0hBVkVfRFVQMiA9IEBIQVZFX0RVUDJACitIQVZFX0ZUUlVOQ0FURSA9IEBIQVZFX0ZUUlVOQ0FURUAKK0hBVkVfR0VUU1VCT1BUID0gQEhBVkVfR0VUU1VCT1BUQAorSEFWRV9JTlRUWVBFU19IID0gQEhBVkVfSU5UVFlQRVNfSEAKK0hBVkVfSVNXQ05UUkwgPSBASEFWRV9JU1dDTlRSTEAKK0hBVkVfTE9OR19MT05HX0lOVCA9IEBIQVZFX0xPTkdfTE9OR19JTlRACitIQVZFX01FTVBDUFkgPSBASEFWRV9NRU1QQ1BZQAorSEFWRV9NS0RURU1QID0gQEhBVkVfTUtEVEVNUEAKK0hBVkVfUkVBRExJTksgPSBASEFWRV9SRUFETElOS0AKK0hBVkVfU0lHTkVEX1NJR19BVE9NSUNfVCA9IEBIQVZFX1NJR05FRF9TSUdfQVRPTUlDX1RACitIQVZFX1NJR05FRF9XQ0hBUl9UID0gQEhBVkVfU0lHTkVEX1dDSEFSX1RACitIQVZFX1NJR05FRF9XSU5UX1QgPSBASEFWRV9TSUdORURfV0lOVF9UQAorSEFWRV9TTEVFUCA9IEBIQVZFX1NMRUVQQAorSEFWRV9TVERJTlRfSCA9IEBIQVZFX1NURElOVF9IQAorSEFWRV9TVFBDUFkgPSBASEFWRV9TVFBDUFlACitIQVZFX1NUUE5DUFkgPSBASEFWRV9TVFBOQ1BZQAorSEFWRV9TVFJDQVNFQ01QID0gQEhBVkVfU1RSQ0FTRUNNUEAKK0hBVkVfU1RSQ0FTRVNUUiA9IEBIQVZFX1NUUkNBU0VTVFJACitIQVZFX1NUUkNIUk5VTCA9IEBIQVZFX1NUUkNIUk5VTEAKK0hBVkVfU1RSTkRVUCA9IEBIQVZFX1NUUk5EVVBACitIQVZFX1NUUlBCUksgPSBASEFWRV9TVFJQQlJLQAorSEFWRV9TVFJTRVAgPSBASEFWRV9TVFJTRVBACitIQVZFX1NZU19CSVRZUEVTX0ggPSBASEFWRV9TWVNfQklUWVBFU19IQAorSEFWRV9TWVNfSU5UVFlQRVNfSCA9IEBIQVZFX1NZU19JTlRUWVBFU19IQAorSEFWRV9TWVNfVFlQRVNfSCA9IEBIQVZFX1NZU19UWVBFU19IQAorSEFWRV9VTklTVERfSCA9IEBIQVZFX1VOSVNURF9IQAorSEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UID0gQEhBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVEAKK0hBVkVfV0NUWVBFX0ggPSBASEFWRV9XQ1RZUEVfSEAKK0hBVkVfV0lOVF9UID0gQEhBVkVfV0lOVF9UQAorSEFWRV9fQk9PTCA9IEBIQVZFX19CT09MQAorSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitJTlRMSU5DUyA9IEBJTlRMSU5DU0AKK0lOVExMSUJTID0gQElOVExMSUJTQAorSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAorSU5UVFlQRVNfSCA9IEBJTlRUWVBFU19IQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCSUNPTlYgPSBATElCSUNPTlZACitMSUJJTlRMID0gQExJQklOVExACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQExJQlNACitMSUJUT09MID0gQExJQlRPT0xACitMTl9TID0gQExOX1NACitMVEFMTE9DQSA9IEBMVEFMTE9DQUAKK0xUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKK0xUTElCSU5UTCA9IEBMVExJQklOVExACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTFRfQUdFID0gQExUX0FHRUAKK0xUX0NVUlJFTlQgPSBATFRfQ1VSUkVOVEAKK0xUX1JFTEVBU0UgPSBATFRfUkVMRUFTRUAKK0xUX1JFVklTSU9OID0gQExUX1JFVklTSU9OQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitNS0RJUl9QID0gQE1LRElSX1BACitNU0dGTVQgPSBATVNHRk1UQAorTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAorTVNHTUVSR0UgPSBATVNHTUVSR0VACitPQkpFWFQgPSBAT0JKRVhUQAorT1MgPSBAT1NACitPU19MSUJTID0gQE9TX0xJQlNACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFSVEVETERGTEFHUyA9IEBQQVJURURMREZMQUdTQAorUEFSVEVEX0xJQlMgPSBAUEFSVEVEX0xJQlNACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKK1BPU1VCID0gQFBPU1VCQAorUE9XX0xJQiA9IEBQT1dfTElCQAorUFJJUFRSX1BSRUZJWCA9IEBQUklQVFJfUFJFRklYQAorUFJJX01BQ1JPU19CUk9LRU4gPSBAUFJJX01BQ1JPU19CUk9LRU5ACitQVFJESUZGX1RfU1VGRklYID0gQFBUUkRJRkZfVF9TVUZGSVhACitSQU5MSUIgPSBAUkFOTElCQAorUkVJU0VSX0xJQlMgPSBAUkVJU0VSX0xJQlNACitSRVBMQUNFX0NIT1dOID0gQFJFUExBQ0VfQ0hPV05ACitSRVBMQUNFX0ZDSERJUiA9IEBSRVBMQUNFX0ZDSERJUkAKK1JFUExBQ0VfR0VUQ1dEID0gQFJFUExBQ0VfR0VUQ1dEQAorUkVQTEFDRV9NS1NURU1QID0gQFJFUExBQ0VfTUtTVEVNUEAKK1NFRCA9IEBTRURACitTRUxJTlVYX0xJQlMgPSBAU0VMSU5VWF9MSUJTQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NJR19BVE9NSUNfVF9TVUZGSVggPSBAU0lHX0FUT01JQ19UX1NVRkZJWEAKK1NJWkVfVF9TVUZGSVggPSBAU0laRV9UX1NVRkZJWEAKK1NUREJPT0xfSCA9IEBTVERCT09MX0hACitTVERJTlRfSCA9IEBTVERJTlRfSEAKK1NUUklQID0gQFNUUklQQAorVVNFX05MUyA9IEBVU0VfTkxTQAorVVVJRF9MSUJTID0gQFVVSURfTElCU0AKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1dDSEFSX0ggPSBAV0NIQVJfSEAKK1dDSEFSX1RfU1VGRklYID0gQFdDSEFSX1RfU1VGRklYQAorV0NUWVBFX0ggPSBAV0NUWVBFX0hACitXSU5UX1RfU1VGRklYID0gQFdJTlRfVF9TVUZGSVhACitYR0VUVEVYVCA9IEBYR0VUVEVYVEAKK1hHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9GNzcgPSBAYWNfY3RfRjc3QAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitidWlsZGRpciA9IEBidWlsZGRpckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZG9jZGlyID0gQGRvY2RpckAKK2R2aWRpciA9IEBkdmlkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2dsX0xJQk9CSlMgPSBAZ2xfTElCT0JKU0AKK2dsX0xUTElCT0JKUyA9IEBnbF9MVExJQk9CSlNACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorcGFydGVkaW5jbHVkZWRpciA9IC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlCitub2luc3RfTFRMSUJSQVJJRVMgPSBsaWJmYXQubGEKK2xpYmZhdF9sYV9TT1VSQ0VTID0gYm9vdHNlY3Rvci5jCVwKKwkJCWJvb3RzZWN0b3IuaAlcCisJCQljYWxjLmMJCVwKKwkJCWNhbGMuaAkJXAorCQkJY2xzdGR1cC5jCVwKKwkJCWNsc3RkdXAuaAlcCisJCQljb250ZXh0LmMJXAorCQkJY29udGV4dC5oCVwKKwkJCWNvdW50LmMJCVwKKwkJCWNvdW50LmgJCVwKKwkJCWZhdC5jCQlcCisJCQlmYXQuaAkJXAorCQkJZmF0aW8uYwkJXAorCQkJZmF0aW8uaAkJXAorCQkJdGFibGUuYwkJXAorCQkJdGFibGUuaAkJXAorCQkJdHJhdmVyc2UuYwlcCisJCQl0cmF2ZXJzZS5oCVwKKwkJCXJlc2l6ZS5jCisKK0lOQ0xVREVTID0gJChwYXJ0ZWRpbmNsdWRlZGlyKSAkKElOVExJTkNTKQorTUFJTlRBSU5FUkNMRUFORklMRVMgPSBNYWtlZmlsZS5pbgorYWxsOiBhbGwtYW0KKworLlNVRkZJWEVTOgorLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagorJChzcmNkaXIpL01ha2VmaWxlLmluOiAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggXAorCQkmJiBleGl0IDA7IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251ICBsaWJwYXJ0ZWQvZnMvZmF0L01ha2VmaWxlJzsgXAorCWNkICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1nbnUgIGxpYnBhcnRlZC9mcy9mYXQvTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6ICAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6ICAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKK2NsZWFuLW5vaW5zdExUTElCUkFSSUVTOgorCS10ZXN0IC16ICIkKG5vaW5zdF9MVExJQlJBUklFUykiIHx8IHJtIC1mICQobm9pbnN0X0xUTElCUkFSSUVTKQorCUBsaXN0PSckKG5vaW5zdF9MVExJQlJBUklFUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGRpcj0iYGVjaG8gJCRwIHwgc2VkIC1lICdzfC9bXi9dKiQkfHwnYCI7IFwKKwkgIHRlc3QgIiQkZGlyIiAhPSAiJCRwIiB8fCBkaXI9LjsgXAorCSAgZWNobyAicm0gLWYgXCIkJHtkaXJ9L3NvX2xvY2F0aW9uc1wiIjsgXAorCSAgcm0gLWYgIiQke2Rpcn0vc29fbG9jYXRpb25zIjsgXAorCWRvbmUKK2xpYmZhdC5sYTogJChsaWJmYXRfbGFfT0JKRUNUUykgJChsaWJmYXRfbGFfREVQRU5ERU5DSUVTKSAKKwkkKExJTkspICAkKGxpYmZhdF9sYV9PQkpFQ1RTKSAkKGxpYmZhdF9sYV9MSUJBREQpICQoTElCUykKKworbW9zdGx5Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi4kKE9CSkVYVCkKKworZGlzdGNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICoudGFiLmMKKworQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2Jvb3RzZWN0b3IuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9jYWxjLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvY2xzdGR1cC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2NvbnRleHQuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9jb3VudC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2ZhdC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2ZhdGlvLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcmVzaXplLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvdGFibGUuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS90cmF2ZXJzZS5QbG9AYW1fX3F1b3RlQAorCisuYy5vOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jICQ8CisKKy5jLm9iajoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jIGAkKENZR1BBVEhfVykgJyQ8J2AKKworLmMubG86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKKworSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAorCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAorCW1raWQgLWZJRCAkJHVuaXF1ZQordGFnczogVEFHUworCitUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXRhZ3M9OyBcCisJaGVyZT1gcHdkYDsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAorCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAorCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisJICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCisJICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICQkdGFncyAkJHVuaXF1ZTsgXAorCWZpCitjdGFnczogQ1RBR1MKK0NUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXRhZ3M9OyBcCisJaGVyZT1gcHdkYDsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAorCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAorCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSIgXAorCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorCSAgICAgJCR0YWdzICQkdW5pcXVlCisKK0dUQUdTOgorCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCisJICAmJiBjZCAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgJCRoZXJlCisKK2Rpc3RjbGVhbi10YWdzOgorCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgXAorCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKKwkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCisJICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAorCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKKwkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKKwkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKKwkJCSAgIHNvcnQgLXVgIDs7IFwKKwllc2FjOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtcFIgJChzcmNkaXIpLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1wUiAkJGQvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICQoZGlzdGRpcikvJCRmaWxlIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAkKGRpc3RkaXIpLyQkZmlsZSBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUgJChMVExJQlJBUklFUykKK2luc3RhbGxkaXJzOgoraW5zdGFsbDogaW5zdGFsbC1hbQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCit1bmluc3RhbGw6IHVuaW5zdGFsbC1hbQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQoraW5zdGFsbC1zdHJpcDoKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKKwkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKKwktdGVzdCAteiAiJChNQUlOVEFJTkVSQ0xFQU5GSUxFUykiIHx8IHJtIC1mICQoTUFJTlRBSU5FUkNMRUFORklMRVMpCitjbGVhbjogY2xlYW4tYW0KKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1ub2luc3RMVExJQlJBUklFUyBcCisJbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKKwlkaXN0Y2xlYW4tdGFncworCitkdmk6IGR2aS1hbQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtYW0KKworaW5mbzogaW5mby1hbQorCitpbmZvLWFtOgorCitpbnN0YWxsLWRhdGEtYW06CisKK2luc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQorCitpbnN0YWxsLWV4ZWMtYW06CisKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCisKK2luc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQorCitpbnN0YWxsY2hlY2stYW06CisKK21haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKKwltb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLWFtCisKK3BkZi1hbToKKworcHM6IHBzLWFtCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06CisKKy5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKKworLlBIT05ZOiBDVEFHUyBHVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAorCWNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0TFRMSUJSQVJJRVMgY3RhZ3MgZGlzdGNsZWFuIFwKKwlkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBcCisJZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gXAorCWluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIFwKKwlpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBcCisJaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gXAorCWluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCisJaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKKwltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBcCisJbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgXAorCXBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB1bmluc3RhbGwgdW5pbnN0YWxsLWFtCisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2IzNGRjCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jCkBAIC0wLDAgKzEsNDUzIEBACisvKgorICAgIGxpYnBhcnRlZAorICAgIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMiwgMjAwNCwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKKyovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlICJmYXQuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKy8qIFJlYWRzIGluIHRoZSBib290IHNlY3RvciAoc3VwZXJibG9jayksIGFuZCBkb2VzIGEgbWluaW11bSBvZiBzYW5pdHkKKyAqIGNoZWNraW5nLiAgVGhlIGdvYWxzIGFyZToKKyAqCS0gdG8gZGV0ZWN0IGZhdCBmaWxlIHN5c3RlbXMsIGV2ZW4gaWYgdGhleSBhcmUgZGFtYWdlZCBbaS5lLiBub3QKKyAqIHJldHVybiBhbiBlcnJvciAvIHRocm93IGFuIGV4Y2VwdGlvbl0KKyAqCS0gdG8gZmFpbCBkZXRlY3Rpb24gaWYgdGhlcmUncyBub3QgZW5vdWdoIGluZm9ybWF0aW9uIGZvcgorICogZmF0X2Jvb3Rfc2VjdG9yX3Byb2JlX3R5cGUoKSB0byB3b3JrIChvciBwb3NzaWJseSBjcmFzaCBvbiBhIGRpdmlkZS1ieS16ZXJvKQorICovCitpbnQKK2ZhdF9ib290X3NlY3Rvcl9yZWFkIChGYXRCb290U2VjdG9yKiBicywgY29uc3QgUGVkR2VvbWV0cnkgKmdlb20pCit7CisJUEVEX0FTU0VSVCAoYnMgIT0gTlVMTCwgcmV0dXJuIDApOworCVBFRF9BU1NFUlQgKGdlb20gIT0gTlVMTCwgcmV0dXJuIDApOworCisJaWYgKCFwZWRfZ2VvbWV0cnlfcmVhZCAoZ2VvbSwgYnMsIDAsIDEpKQorCQlyZXR1cm4gMDsKKworCWlmIChQRURfTEUxNl9UT19DUFUgKGJzLT5ib290X3NpZ24pICE9IDB4QUE1NSkgeworCQlwZWRfZXhjZXB0aW9uX3Rocm93IChQRURfRVhDRVBUSU9OX0VSUk9SLCBQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCV8oIkZpbGUgc3lzdGVtIGhhcyBhbiBpbnZhbGlkIHNpZ25hdHVyZSBmb3IgYSBGQVQgIgorCQkJICAiZmlsZSBzeXN0ZW0uIikpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIWJzLT5zeXN0ZW1faWRbMF0pIHsKKwkJcGVkX2V4Y2VwdGlvbl90aHJvdyAoUEVEX0VYQ0VQVElPTl9FUlJPUiwgUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQlfKCJGaWxlIHN5c3RlbSBoYXMgYW4gaW52YWxpZCBzaWduYXR1cmUgZm9yIGEgRkFUICIKKwkJCSAgImZpbGUgc3lzdGVtLiIpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFicy0+c2VjdG9yX3NpemUKKyAgICAgICAgICAgIHx8IFBFRF9MRTE2X1RPX0NQVSAoYnMtPnNlY3Rvcl9zaXplKSAlIFBFRF9TRUNUT1JfU0laRV9ERUZBVUxUKSB7CisJCXBlZF9leGNlcHRpb25fdGhyb3cgKFBFRF9FWENFUFRJT05fRVJST1IsIFBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJXygiRmlsZSBzeXN0ZW0gaGFzIGFuIGludmFsaWQgc2VjdG9yIHNpemUgZm9yIGEgRkFUICIKKwkJCSAgImZpbGUgc3lzdGVtLiIpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFicy0+Y2x1c3Rlcl9zaXplKSB7CisJCXBlZF9leGNlcHRpb25fdGhyb3cgKFBFRF9FWENFUFRJT05fRVJST1IsIFBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJXygiRmlsZSBzeXN0ZW0gaGFzIGFuIGludmFsaWQgY2x1c3RlciBzaXplIGZvciBhIEZBVCAiCisJCQkgICJmaWxlIHN5c3RlbS4iKSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghYnMtPnJlc2VydmVkKSB7CisJCXBlZF9leGNlcHRpb25fdGhyb3cgKFBFRF9FWENFUFRJT05fRVJST1IsIFBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJXygiRmlsZSBzeXN0ZW0gaGFzIGFuIGludmFsaWQgbnVtYmVyIG9mIHJlc2VydmVkICIKKwkJCSAgInNlY3RvcnMgZm9yIGEgRkFUIGZpbGUgc3lzdGVtLiIpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGJzLT5mYXRzIDwgMSB8fCBicy0+ZmF0cyA+IDQpIHsKKwkJcGVkX2V4Y2VwdGlvbl90aHJvdyAoUEVEX0VYQ0VQVElPTl9FUlJPUiwgUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQlfKCJGaWxlIHN5c3RlbSBoYXMgYW4gaW52YWxpZCBudW1iZXIgb2YgRkFUcy4iKSk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCisvKgorICAgIERvbid0IHRydXN0IHRoZSBGQVQxMiwgRkFUMTYgb3IgRkFUMzIgbGFiZWwgc3RyaW5nLgorICovCitGYXRUeXBlCitmYXRfYm9vdF9zZWN0b3JfcHJvYmVfdHlwZSAoY29uc3QgRmF0Qm9vdFNlY3RvciogYnMsIGNvbnN0IFBlZEdlb21ldHJ5KiBnZW9tKQoreworCVBlZFNlY3Rvcglsb2dpY2FsX3NlY3Rvcl9zaXplOworCVBlZFNlY3RvcglmaXJzdF9jbHVzdGVyX3NlY3RvcjsKKwlGYXRDbHVzdGVyCWNsdXN0ZXJfY291bnQ7CisKKwlpZiAoIVBFRF9MRTE2X1RPX0NQVSAoYnMtPmRpcl9lbnRyaWVzKSkKKwkJcmV0dXJuIEZBVF9UWVBFX0ZBVDMyOworCisJbG9naWNhbF9zZWN0b3Jfc2l6ZSA9IFBFRF9MRTE2X1RPX0NQVSAoYnMtPnNlY3Rvcl9zaXplKSAvIDUxMjsKKworCWZpcnN0X2NsdXN0ZXJfc2VjdG9yCisJCT0gUEVEX0xFMTZfVE9fQ1BVIChicy0+cmVzZXJ2ZWQpICogbG9naWNhbF9zZWN0b3Jfc2l6ZQorCQkgICsgMiAqIFBFRF9MRTE2X1RPX0NQVSAoYnMtPmZhdF9sZW5ndGgpICogbG9naWNhbF9zZWN0b3Jfc2l6ZQorCQkgICsgUEVEX0xFMTZfVE9fQ1BVIChicy0+ZGlyX2VudHJpZXMpCisJCQkvICg1MTIgLyBzaXplb2YgKEZhdERpckVudHJ5KSk7CisJY2x1c3Rlcl9jb3VudCA9IChnZW9tLT5sZW5ndGggLSBmaXJzdF9jbHVzdGVyX3NlY3RvcikKKwkJCS8gYnMtPmNsdXN0ZXJfc2l6ZSAvIGxvZ2ljYWxfc2VjdG9yX3NpemU7CisJaWYgKGNsdXN0ZXJfY291bnQgPiBNQVhfRkFUMTJfQ0xVU1RFUlMpCisJCXJldHVybiBGQVRfVFlQRV9GQVQxNjsKKwllbHNlCisJCXJldHVybiBGQVRfVFlQRV9GQVQxMjsKK30KKworLyogQW5hbHlzZXMgdGhlIGJvb3Qgc2VjdG9yLCBhbmQgc3RpY2tzIGFwcHJvcHJpYXRlIG51bWJlcnMgaW4KKyAgIGZzLT50eXBlX3NwZWNpZmljLgorCisgICBOb3RlOiB5b3UgbmVlZCB0byBzdWJ0cmFjdCAoMiAqIGNsdXN0ZXJfc2VjdG9ycykgb2ZmIGNsdXN0ZXIgb2Zmc2V0LAorICAgYmVjYXVzZSB0aGUgZmlyc3QgY2x1c3RlciBpcyBudW1iZXIgMi4gICgwIGFuZCAxIGFyZSBub3QgcmVhbCBjbHVzdGVycywKKyAgIGFuZCByZWZlcmVuY2luZyB0aGVtIGlzIGEgYnVnKQorICovCitpbnQKK2ZhdF9ib290X3NlY3Rvcl9hbmFseXNlIChGYXRCb290U2VjdG9yKiBicywgUGVkRmlsZVN5c3RlbSogZnMpCit7CisJRmF0U3BlY2lmaWMqCQlmc19pbmZvID0gRkFUX1NQRUNJRklDIChmcyk7CisJaW50CQkJZmF0X2VudHJ5X3NpemU7CisKKwlQRURfQVNTRVJUIChicyAhPSBOVUxMLCByZXR1cm4gMCk7CisJCisJaWYgKFBFRF9MRTE2X1RPX0NQVSAoYnMtPnNlY3Rvcl9zaXplKSAhPSA1MTIpIHsKKwkJaWYgKHBlZF9leGNlcHRpb25fdGhyb3cgKAorCQkJUEVEX0VYQ0VQVElPTl9CVUcsCisJCQlQRURfRVhDRVBUSU9OX0lHTk9SRV9DQU5DRUwsCisJCQlfKCJUaGlzIGZpbGUgc3lzdGVtIGhhcyBhIGxvZ2ljYWwgc2VjdG9yIHNpemUgb2YgJWQuICAiCisJCQkiR05VIFBhcnRlZCBpcyBrbm93biBub3QgdG8gd29yayBwcm9wZXJseSB3aXRoIHNlY3RvciAiCisJCQkic2l6ZXMgb3RoZXIgdGhhbiA1MTIgYnl0ZXMuIiksCisJCQkoaW50KSBQRURfTEUxNl9UT19DUFUgKGJzLT5zZWN0b3Jfc2l6ZSkpCisJCQkJIT0gUEVEX0VYQ0VQVElPTl9JR05PUkUpCisJCQlyZXR1cm4gMDsKKwl9CisKKwlmc19pbmZvLT5sb2dpY2FsX3NlY3Rvcl9zaXplID0gUEVEX0xFMTZfVE9fQ1BVIChicy0+c2VjdG9yX3NpemUpIC8gNTEyOworCisJZnNfaW5mby0+c2VjdG9yc19wZXJfdHJhY2sgPSBQRURfTEUxNl9UT19DUFUgKGJzLT5zZWNzX3RyYWNrKTsKKwlmc19pbmZvLT5oZWFkcyA9IFBFRF9MRTE2X1RPX0NQVSAoYnMtPmhlYWRzKTsKKwlpZiAoZnNfaW5mby0+c2VjdG9yc19wZXJfdHJhY2sgPCAxIHx8IGZzX2luZm8tPnNlY3RvcnNfcGVyX3RyYWNrID4gNjMKKwkgICAgfHwgZnNfaW5mby0+aGVhZHMgPCAxIHx8IGZzX2luZm8tPmhlYWRzID4gMjU1KSB7CisJCVBlZENIU0dlb21ldHJ5KiBiaW9zX2dlb20gPSAmZnMtPmdlb20tPmRldi0+Ymlvc19nZW9tOworCQlpbnQgY3lsX2NvdW50ID0gMDsKKworCQlpZiAoZnNfaW5mby0+aGVhZHMgPiAwICYmIGZzX2luZm8tPnNlY3RvcnNfcGVyX3RyYWNrID4gMCkKKwkJCWN5bF9jb3VudCA9IGZzLT5nZW9tLT5kZXYtPmxlbmd0aCAvIGZzX2luZm8tPmhlYWRzCisJCQkJCS8gZnNfaW5mby0+c2VjdG9yc19wZXJfdHJhY2s7CisKKwkJc3dpdGNoIChwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCVBFRF9FWENFUFRJT05fRVJST1IsCisJCQlQRURfRVhDRVBUSU9OX0ZJWCArIFBFRF9FWENFUFRJT05fSUdOT1JFCisJCQkrIFBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJXygiVGhlIGZpbGUgc3lzdGVtJ3MgQ0hTIGdlb21ldHJ5IGlzICglZCwgJWQsICVkKSwgIgorCQkJICAid2hpY2ggaXMgaW52YWxpZC4gIFRoZSBwYXJ0aXRpb24gdGFibGUncyBDSFMgIgorCQkJICAiZ2VvbWV0cnkgaXMgKCVkLCAlZCwgJWQpLiAgSWYgeW91IHNlbGVjdCBJZ25vcmUsICIKKwkJCSAgInRoZSBmaWxlIHN5c3RlbSdzIENIUyBnZW9tZXRyeSB3aWxsIGJlIGxlZnQgIgorCQkJICAidW5jaGFuZ2VkLiAgSWYgeW91IHNlbGVjdCBGaXgsIHRoZSBmaWxlIHN5c3RlbSdzICIKKwkJCSAgIkNIUyBnZW9tZXRyeSB3aWxsIGJlIHNldCB0byBtYXRjaCB0aGUgcGFydGl0aW9uICIKKwkJCSAgInRhYmxlJ3MgQ0hTIGdlb21ldHJ5LiIpLAorCQkJIGN5bF9jb3VudCwgZnNfaW5mby0+aGVhZHMsIGZzX2luZm8tPnNlY3RvcnNfcGVyX3RyYWNrLAorCQkJIGJpb3NfZ2VvbS0+Y3lsaW5kZXJzLCBiaW9zX2dlb20tPmhlYWRzLAorCQkJIGJpb3NfZ2VvbS0+c2VjdG9ycykpIHsKKworCQljYXNlIFBFRF9FWENFUFRJT05fRklYOgorCQkJZnNfaW5mby0+c2VjdG9yc19wZXJfdHJhY2sgPSBiaW9zX2dlb20tPnNlY3RvcnM7CisJCQlmc19pbmZvLT5oZWFkcyA9IGJpb3NfZ2VvbS0+aGVhZHM7CisJCQlicy0+c2Vjc190cmFjaworCQkJCT0gUEVEX0NQVV9UT19MRTE2IChmc19pbmZvLT5zZWN0b3JzX3Blcl90cmFjayk7CisJCQlicy0+aGVhZHMgPSBQRURfQ1BVX1RPX0xFMTYgKGZzX2luZm8tPmhlYWRzKTsKKwkJCWlmICghZmF0X2Jvb3Rfc2VjdG9yX3dyaXRlIChicywgZnMpKQorCQkJCXJldHVybiAwOworCQkJYnJlYWs7CisKKwkJY2FzZSBQRURfRVhDRVBUSU9OX0NBTkNFTDoKKwkJCXJldHVybiAwOworCisJCWNhc2UgUEVEX0VYQ0VQVElPTl9JR05PUkU6CisJCQlicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkJfQorCX0KKworCWlmIChicy0+c2VjdG9ycykKKwkJZnNfaW5mby0+c2VjdG9yX2NvdW50ID0gUEVEX0xFMTZfVE9fQ1BVIChicy0+c2VjdG9ycykKKwkJCQkJCSogZnNfaW5mby0+bG9naWNhbF9zZWN0b3Jfc2l6ZTsKKwllbHNlCisJCWZzX2luZm8tPnNlY3Rvcl9jb3VudCA9IFBFRF9MRTMyX1RPX0NQVSAoYnMtPnNlY3Rvcl9jb3VudCkKKwkJCQkJCSogZnNfaW5mby0+bG9naWNhbF9zZWN0b3Jfc2l6ZTsKKworCWZzX2luZm8tPmZhdF90YWJsZV9jb3VudCA9IGJzLT5mYXRzOworCWZzX2luZm8tPnJvb3RfZGlyX2VudHJ5X2NvdW50ID0gUEVEX0xFMTZfVE9fQ1BVIChicy0+ZGlyX2VudHJpZXMpOworCWZzX2luZm8tPmZhdF9vZmZzZXQgPSBQRURfTEUxNl9UT19DUFUgKGJzLT5yZXNlcnZlZCkKKwkJCQkJKiBmc19pbmZvLT5sb2dpY2FsX3NlY3Rvcl9zaXplOworCWZzX2luZm8tPmNsdXN0ZXJfc2VjdG9ycyA9IGJzLT5jbHVzdGVyX3NpemUKKwkJCQkgICAqIGZzX2luZm8tPmxvZ2ljYWxfc2VjdG9yX3NpemU7CisJZnNfaW5mby0+Y2x1c3Rlcl9zaXplID0gZnNfaW5mby0+Y2x1c3Rlcl9zZWN0b3JzICogNTEyOworCisJaWYgKGZzX2luZm8tPmxvZ2ljYWxfc2VjdG9yX3NpemUgPT0gMCkgeworCQlwZWRfZXhjZXB0aW9uX3Rocm93IChQRURfRVhDRVBUSU9OX0VSUk9SLCBQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCV8oIkZBVCBib290IHNlY3RvciBzYXlzIGxvZ2ljYWwgc2VjdG9yIHNpemUgaXMgMC4gICIKKwkJCSAgIlRoaXMgaXMgd2VpcmQuICIpKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChmc19pbmZvLT5mYXRfdGFibGVfY291bnQgPT0gMCkgeworCQlwZWRfZXhjZXB0aW9uX3Rocm93IChQRURfRVhDRVBUSU9OX0VSUk9SLCBQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCV8oIkZBVCBib290IHNlY3RvciBzYXlzIHRoZXJlIGFyZSBubyBGQVQgdGFibGVzLiAgVGhpcyAiCisJCQkgICJpcyB3ZWlyZC4gIikpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKGZzX2luZm8tPmNsdXN0ZXJfc2VjdG9ycyA9PSAwKSB7CisJCXBlZF9leGNlcHRpb25fdGhyb3cgKFBFRF9FWENFUFRJT05fRVJST1IsIFBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJXygiRkFUIGJvb3Qgc2VjdG9yIHNheXMgY2x1c3RlcnMgYXJlIDAgc2VjdG9ycy4gIFRoaXMgIgorCQkJICAiaXMgd2VpcmQuICIpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJZnNfaW5mby0+ZmF0X3R5cGUgPSBmYXRfYm9vdF9zZWN0b3JfcHJvYmVfdHlwZSAoYnMsIGZzLT5nZW9tKTsKKwlpZiAoZnNfaW5mby0+ZmF0X3R5cGUgPT0gRkFUX1RZUEVfRkFUMTIpIHsKKwkJcGVkX2V4Y2VwdGlvbl90aHJvdyAoCisJCQlQRURfRVhDRVBUSU9OX05PX0ZFQVRVUkUsCisJCQlQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCV8oIkZpbGUgc3lzdGVtIGlzIEZBVDEyLCB3aGljaCBpcyB1bnN1cHBvcnRlZC4iKSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoZnNfaW5mby0+ZmF0X3R5cGUgPT0gRkFUX1RZUEVfRkFUMTYpIHsKKwkJZnNfaW5mby0+ZmF0X3NlY3RvcnMgPSBQRURfTEUxNl9UT19DUFUgKGJzLT5mYXRfbGVuZ3RoKQorCQkJCSAgICAgICAqIGZzX2luZm8tPmxvZ2ljYWxfc2VjdG9yX3NpemU7CisJCWZzX2luZm8tPnNlcmlhbF9udW1iZXIKKwkJCT0gUEVEX0xFMzJfVE9fQ1BVIChicy0+dS5mYXQxNi5zZXJpYWxfbnVtYmVyKTsKKwkJZnNfaW5mby0+cm9vdF9jbHVzdGVyID0gMDsKKwkJZnNfaW5mby0+cm9vdF9kaXJfb2Zmc2V0CisJCQk9IGZzX2luZm8tPmZhdF9vZmZzZXQKKwkJCSAgKyBmc19pbmZvLT5mYXRfc2VjdG9ycyAqIGZzX2luZm8tPmZhdF90YWJsZV9jb3VudDsKKwkJZnNfaW5mby0+cm9vdF9kaXJfc2VjdG9yX2NvdW50CisJCQk9IGZzX2luZm8tPnJvb3RfZGlyX2VudHJ5X2NvdW50ICogc2l6ZW9mIChGYXREaXJFbnRyeSkKKwkJCSAgLyAoNTEyICogZnNfaW5mby0+bG9naWNhbF9zZWN0b3Jfc2l6ZSk7CisJCWZzX2luZm8tPmNsdXN0ZXJfb2Zmc2V0CisJCQk9IGZzX2luZm8tPnJvb3RfZGlyX29mZnNldAorCQkJICArIGZzX2luZm8tPnJvb3RfZGlyX3NlY3Rvcl9jb3VudDsKKwl9CisJaWYgKGZzX2luZm8tPmZhdF90eXBlID09IEZBVF9UWVBFX0ZBVDMyKSB7CisJCWZzX2luZm8tPmZhdF9zZWN0b3JzID0gUEVEX0xFMzJfVE9fQ1BVIChicy0+dS5mYXQzMi5mYXRfbGVuZ3RoKQorCQkJCQkqIGZzX2luZm8tPmxvZ2ljYWxfc2VjdG9yX3NpemU7CisJCWZzX2luZm8tPnNlcmlhbF9udW1iZXIKKwkJCT0gUEVEX0xFMzJfVE9fQ1BVIChicy0+dS5mYXQzMi5zZXJpYWxfbnVtYmVyKTsKKwkJZnNfaW5mby0+aW5mb19zZWN0b3Jfb2Zmc2V0CisJCSAgICA9IFBFRF9MRTE2X1RPX0NQVSAoZnNfaW5mby0+Ym9vdF9zZWN0b3IudS5mYXQzMi5pbmZvX3NlY3RvcikKKwkJCSAgKiBmc19pbmZvLT5sb2dpY2FsX3NlY3Rvcl9zaXplOworCQlmc19pbmZvLT5ib290X3NlY3Rvcl9iYWNrdXBfb2Zmc2V0CisJCSAgPSBQRURfTEUxNl9UT19DUFUgKGZzX2luZm8tPmJvb3Rfc2VjdG9yLnUuZmF0MzIuYmFja3VwX3NlY3RvcikKKwkJCSAgKiBmc19pbmZvLT5sb2dpY2FsX3NlY3Rvcl9zaXplOworCQlmc19pbmZvLT5yb290X2NsdXN0ZXIKKwkJCT0gUEVEX0xFMzJfVE9fQ1BVIChicy0+dS5mYXQzMi5yb290X2Rpcl9jbHVzdGVyKTsKKwkJZnNfaW5mby0+cm9vdF9kaXJfb2Zmc2V0ID0gMDsKKwkJZnNfaW5mby0+cm9vdF9kaXJfc2VjdG9yX2NvdW50ID0gMDsKKwkJZnNfaW5mby0+Y2x1c3Rlcl9vZmZzZXQKKwkJCT0gZnNfaW5mby0+ZmF0X29mZnNldAorCQkJICArIGZzX2luZm8tPmZhdF9zZWN0b3JzICogZnNfaW5mby0+ZmF0X3RhYmxlX2NvdW50OworCX0KKworCWZzX2luZm8tPmNsdXN0ZXJfY291bnQKKwkJPSAoZnNfaW5mby0+c2VjdG9yX2NvdW50IC0gZnNfaW5mby0+Y2x1c3Rlcl9vZmZzZXQpCisJCSAgLyBmc19pbmZvLT5jbHVzdGVyX3NlY3RvcnM7CisKKwlmYXRfZW50cnlfc2l6ZSA9IGZhdF90YWJsZV9lbnRyeV9zaXplIChmc19pbmZvLT5mYXRfdHlwZSk7CisJaWYgKGZzX2luZm8tPmNsdXN0ZXJfY291bnQgKyAyCisJCQk+IGZzX2luZm8tPmZhdF9zZWN0b3JzICogNTEyIC8gZmF0X2VudHJ5X3NpemUpCisJCWZzX2luZm8tPmNsdXN0ZXJfY291bnQKKwkJCT0gZnNfaW5mby0+ZmF0X3NlY3RvcnMgKiA1MTIgLyBmYXRfZW50cnlfc2l6ZSAtIDI7CisKKwlmc19pbmZvLT5kaXJfZW50cmllc19wZXJfY2x1c3RlcgorCQk9IGZzX2luZm8tPmNsdXN0ZXJfc2l6ZSAvIHNpemVvZiAoRmF0RGlyRW50cnkpOworCXJldHVybiAxOworfQorCisjaWZuZGVmIERJU0NPVkVSX09OTFkKK2ludAorZmF0X2Jvb3Rfc2VjdG9yX3NldF9ib290X2NvZGUgKEZhdEJvb3RTZWN0b3IqIGJzKQoreworCVBFRF9BU1NFUlQgKGJzICE9IE5VTEwsIHJldHVybiAwKTsKKworCW1lbXNldCAoYnMsIDAsIDUxMik7CisJbWVtY3B5IChicy0+Ym9vdF9qdW1wLCBGQVRfQk9PVF9KVU1QLCAzKTsKKwltZW1jcHkgKGJzLT51LmZhdDMyLmJvb3RfY29kZSwgRkFUX0JPT1RfQ09ERSwgRkFUX0JPT1RfQ09ERV9MRU5HVEgpOworCXJldHVybiAxOworfQorCitpbnQKK2ZhdF9ib290X3NlY3Rvcl9nZW5lcmF0ZSAoRmF0Qm9vdFNlY3RvciogYnMsIGNvbnN0IFBlZEZpbGVTeXN0ZW0qIGZzKQoreworCUZhdFNwZWNpZmljKglmc19pbmZvID0gRkFUX1NQRUNJRklDIChmcyk7CisKKwlQRURfQVNTRVJUIChicyAhPSBOVUxMLCByZXR1cm4gMCk7CisKKwltZW1jcHkgKGJzLT5zeXN0ZW1faWQsICJNU1dJTjQuMSIsIDgpOworCWJzLT5zZWN0b3Jfc2l6ZSA9IFBFRF9DUFVfVE9fTEUxNiAoZnNfaW5mby0+bG9naWNhbF9zZWN0b3Jfc2l6ZSAqIDUxMik7CisJYnMtPmNsdXN0ZXJfc2l6ZSA9IGZzX2luZm8tPmNsdXN0ZXJfc2VjdG9ycworCQkJCS8gZnNfaW5mby0+bG9naWNhbF9zZWN0b3Jfc2l6ZTsKKwlicy0+cmVzZXJ2ZWQgPSBQRURfQ1BVX1RPX0xFMTYgKGZzX2luZm8tPmZhdF9vZmZzZXQKKwkJCQkJLyBmc19pbmZvLT5sb2dpY2FsX3NlY3Rvcl9zaXplKTsKKwlicy0+ZmF0cyA9IGZzX2luZm8tPmZhdF90YWJsZV9jb3VudDsKKworCWJzLT5kaXJfZW50cmllcyA9IChmc19pbmZvLT5mYXRfdHlwZSA9PSBGQVRfVFlQRV9GQVQxNikKKwkJCSAgPyBQRURfQ1BVX1RPX0xFMTYgKGZzX2luZm8tPnJvb3RfZGlyX2VudHJ5X2NvdW50KQorCQkJICA6IDA7CisKKwlpZiAoZnNfaW5mby0+c2VjdG9yX2NvdW50IC8gZnNfaW5mby0+bG9naWNhbF9zZWN0b3Jfc2l6ZSA+IDB4ZmZmZgorCQl8fCBmc19pbmZvLT5mYXRfdHlwZSA9PSBGQVRfVFlQRV9GQVQzMikgeworCQlicy0+c2VjdG9ycyA9IDA7CisJCWJzLT5zZWN0b3JfY291bnQgPSBQRURfQ1BVX1RPX0xFMzIgKGZzX2luZm8tPnNlY3Rvcl9jb3VudAorCQkJCQkJLyBmc19pbmZvLT5sb2dpY2FsX3NlY3Rvcl9zaXplKTsKKwl9IGVsc2UgeworCQlicy0+c2VjdG9ycyA9IFBFRF9DUFVfVE9fTEUxNiAoZnNfaW5mby0+c2VjdG9yX2NvdW50CisJCQkJCSAgICAgICAvIGZzX2luZm8tPmxvZ2ljYWxfc2VjdG9yX3NpemUpOworCQlicy0+c2VjdG9yX2NvdW50ID0gMDsKKwl9CisKKwlicy0+bWVkaWEgPSAweGY4OworCisJYnMtPnNlY3NfdHJhY2sgPSBQRURfQ1BVX1RPX0xFMTYgKGZzX2luZm8tPnNlY3RvcnNfcGVyX3RyYWNrKTsKKwlicy0+aGVhZHMgPSBQRURfQ1BVX1RPX0xFMTYgKGZzX2luZm8tPmhlYWRzKTsKKwlicy0+aGlkZGVuID0gUEVEX0NQVV9UT19MRTMyIChmcy0+Z2VvbS0+c3RhcnQpOworCisJaWYgKGZzX2luZm8tPmZhdF90eXBlID09IEZBVF9UWVBFX0ZBVDMyKSB7CisJCWJzLT5mYXRfbGVuZ3RoID0gMDsKKwkJYnMtPnUuZmF0MzIuZmF0X2xlbmd0aCA9IFBFRF9DUFVfVE9fTEUzMiAoZnNfaW5mby0+ZmF0X3NlY3RvcnMKKwkJCQkJCS8gZnNfaW5mby0+bG9naWNhbF9zZWN0b3Jfc2l6ZSk7CisJCWJzLT51LmZhdDMyLmZsYWdzID0gMDsJLyogRklYTUU6IHdoYXQgdGhlIGhlbGwgYXJlIHRoZXNlPyAqLworCQlicy0+dS5mYXQzMi52ZXJzaW9uID0gMDsgIC8qIG11c3QgYmUgMCwgZm9yIFdpbjk4IGJvb3RzdHJhcCAqLworCQlicy0+dS5mYXQzMi5yb290X2Rpcl9jbHVzdGVyCisJCQk9IFBFRF9DUFVfVE9fTEUzMiAoZnNfaW5mby0+cm9vdF9jbHVzdGVyKTsKKwkJYnMtPnUuZmF0MzIuaW5mb19zZWN0b3IKKwkJCT0gUEVEX0NQVV9UT19MRTE2IChmc19pbmZvLT5pbmZvX3NlY3Rvcl9vZmZzZXQKKwkJCQkJICAgLyBmc19pbmZvLT5sb2dpY2FsX3NlY3Rvcl9zaXplKTsKKwkJYnMtPnUuZmF0MzIuYmFja3VwX3NlY3RvcgorCQkJPSBQRURfQ1BVX1RPX0xFMTYgKGZzX2luZm8tPmJvb3Rfc2VjdG9yX2JhY2t1cF9vZmZzZXQKKwkJCQkJICAgLyBmc19pbmZvLT5sb2dpY2FsX3NlY3Rvcl9zaXplKTsKKworCQlicy0+dS5mYXQzMi5kcml2ZV9udW0gPSAweDgwOwkvKiBfQUxXQVlTXyAweDgwLiAgc2lsbHkgRE9TICovCisKKwkJbWVtc2V0IChicy0+dS5mYXQzMi5lbXB0eV8xLCAwLCAxMik7CisKKwkJYnMtPnUuZmF0MzIuZXh0X3NpZ25hdHVyZSA9IDB4Mjk7CisJCWJzLT51LmZhdDMyLnNlcmlhbF9udW1iZXIKKwkJCT0gUEVEX0NQVV9UT19MRTMyIChmc19pbmZvLT5zZXJpYWxfbnVtYmVyKTsKKwkJbWVtY3B5IChicy0+dS5mYXQzMi52b2x1bWVfbmFtZSwgIk5PIE5BTUUgICAgIiwgMTEpOworCQltZW1jcHkgKGJzLT51LmZhdDMyLmZhdF9uYW1lLCAiRkFUMzIgICAiLCA4KTsKKwl9IGVsc2UgeworCQlicy0+ZmF0X2xlbmd0aAorCQkJPSBQRURfQ1BVX1RPX0xFMTYgKGZzX2luZm8tPmZhdF9zZWN0b3JzCisJCQkJCSAgIC8gZnNfaW5mby0+bG9naWNhbF9zZWN0b3Jfc2l6ZSk7CisKKwkJYnMtPnUuZmF0MTYuZHJpdmVfbnVtID0gMHg4MDsJLyogX0FMV0FZU18gMHg4MC4gIHNpbGx5IERPUyAqLworCisJCWJzLT51LmZhdDE2LmV4dF9zaWduYXR1cmUgPSAweDI5OworCQlicy0+dS5mYXQxNi5zZXJpYWxfbnVtYmVyCisJCQk9IFBFRF9DUFVfVE9fTEUzMiAoZnNfaW5mby0+c2VyaWFsX251bWJlcik7CisJCW1lbWNweSAoYnMtPnUuZmF0MTYudm9sdW1lX25hbWUsICJOTyBOQU1FICAgICIsIDExKTsKKwkJbWVtY3B5IChicy0+dS5mYXQxNi5mYXRfbmFtZSwgIkZBVDE2ICAgIiwgOCk7CisJfQorCisJYnMtPmJvb3Rfc2lnbiA9IFBFRF9DUFVfVE9fTEUxNiAoMHhhYTU1KTsKKworCXJldHVybiAxOworfQorCitpbnQKK2ZhdF9ib290X3NlY3Rvcl93cml0ZSAoY29uc3QgRmF0Qm9vdFNlY3RvciogYnMsIFBlZEZpbGVTeXN0ZW0qIGZzKQoreworCUZhdFNwZWNpZmljKglmc19pbmZvID0gRkFUX1NQRUNJRklDIChmcyk7CisKKwlQRURfQVNTRVJUIChicyAhPSBOVUxMLCByZXR1cm4gMCk7CisKKwlpZiAoIXBlZF9nZW9tZXRyeV93cml0ZSAoZnMtPmdlb20sIGJzLCAwLCAxKSkKKwkJcmV0dXJuIDA7CisJaWYgKGZzX2luZm8tPmZhdF90eXBlID09IEZBVF9UWVBFX0ZBVDMyKSB7CisJCWlmICghcGVkX2dlb21ldHJ5X3dyaXRlIChmcy0+Z2VvbSwgYnMsCisJCQkJCSBmc19pbmZvLT5ib290X3NlY3Rvcl9iYWNrdXBfb2Zmc2V0LCAxKSkKKwkJCXJldHVybiAwOworCX0KKwlyZXR1cm4gcGVkX2dlb21ldHJ5X3N5bmMgKGZzLT5nZW9tKTsKK30KKworaW50CitmYXRfaW5mb19zZWN0b3JfcmVhZCAoRmF0SW5mb1NlY3RvciogaXMsIGNvbnN0IFBlZEZpbGVTeXN0ZW0qIGZzKQoreworCUZhdFNwZWNpZmljKglmc19pbmZvID0gRkFUX1NQRUNJRklDIChmcyk7CisJaW50CQlzdGF0dXM7CisKKwlQRURfQVNTRVJUIChpcyAhPSBOVUxMLCByZXR1cm4gMCk7CisJCisJaWYgKCFwZWRfZ2VvbWV0cnlfcmVhZCAoZnMtPmdlb20sIGlzLCBmc19pbmZvLT5pbmZvX3NlY3Rvcl9vZmZzZXQsIDEpKQorCQlyZXR1cm4gMDsKKworCWlmIChQRURfTEUzMl9UT19DUFUgKGlzLT5zaWduYXR1cmVfMikgIT0gRkFUMzJfSU5GT19NQUdJQzIpIHsKKwkJc3RhdHVzID0gcGVkX2V4Y2VwdGlvbl90aHJvdyAoUEVEX0VYQ0VQVElPTl9XQVJOSU5HLAorCQkJCVBFRF9FWENFUFRJT05fSUdOT1JFX0NBTkNFTCwKKwkJCQlfKCJUaGUgaW5mb3JtYXRpb24gc2VjdG9yIGhhcyB0aGUgd3JvbmcgIgorCQkJCSJzaWduYXR1cmUgKCV4KS4gIFNlbGVjdCBjYW5jZWwgZm9yIG5vdywgIgorCQkJCSJhbmQgc2VuZCBpbiBhIGJ1ZyByZXBvcnQuICBJZiB5b3UncmUgIgorCQkJCSJkZXNwZXJhdGUsIGl0J3MgcHJvYmFibHkgc2FmZSB0byBpZ25vcmUuIiksCisJCQkJUEVEX0xFMzJfVE9fQ1BVIChpcy0+c2lnbmF0dXJlXzIpKTsKKwkJaWYgKHN0YXR1cyA9PSBQRURfRVhDRVBUSU9OX0NBTkNFTCkgcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCitpbnQKK2ZhdF9pbmZvX3NlY3Rvcl9nZW5lcmF0ZSAoRmF0SW5mb1NlY3RvciogaXMsIGNvbnN0IFBlZEZpbGVTeXN0ZW0qIGZzKQoreworCUZhdFNwZWNpZmljKglmc19pbmZvID0gRkFUX1NQRUNJRklDIChmcyk7CisKKwlQRURfQVNTRVJUIChpcyAhPSBOVUxMLCByZXR1cm4gMCk7CisJCisJZmF0X3RhYmxlX2NvdW50X3N0YXRzIChmc19pbmZvLT5mYXQpOworCisJbWVtc2V0IChpcywgMCwgNTEyKTsKKworCWlzLT5zaWduYXR1cmVfMSA9IFBFRF9DUFVfVE9fTEUzMiAoRkFUMzJfSU5GT19NQUdJQzEpOworCWlzLT5zaWduYXR1cmVfMiA9IFBFRF9DUFVfVE9fTEUzMiAoRkFUMzJfSU5GT19NQUdJQzIpOworCWlzLT5mcmVlX2NsdXN0ZXJzID0gUEVEX0NQVV9UT19MRTMyIChmc19pbmZvLT5mYXQtPmZyZWVfY2x1c3Rlcl9jb3VudCk7CisJaXMtPm5leHRfY2x1c3RlciA9IFBFRF9DUFVfVE9fTEUzMiAoZnNfaW5mby0+ZmF0LT5sYXN0X2FsbG9jKTsKKwlpcy0+c2lnbmF0dXJlXzMgPSBQRURfQ1BVX1RPX0xFMTYgKEZBVDMyX0lORk9fTUFHSUMzKTsKKworCXJldHVybiAxOworfQorCitpbnQKK2ZhdF9pbmZvX3NlY3Rvcl93cml0ZSAoY29uc3QgRmF0SW5mb1NlY3RvciogaXMsIFBlZEZpbGVTeXN0ZW0gKmZzKQoreworCUZhdFNwZWNpZmljKglmc19pbmZvID0gRkFUX1NQRUNJRklDIChmcyk7CisKKwlQRURfQVNTRVJUIChpcyAhPSBOVUxMLCByZXR1cm4gMCk7CisJCisJaWYgKCFwZWRfZ2VvbWV0cnlfd3JpdGUgKGZzLT5nZW9tLCBpcywgZnNfaW5mby0+aW5mb19zZWN0b3Jfb2Zmc2V0LCAxKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHBlZF9nZW9tZXRyeV9zeW5jIChmcy0+Z2VvbSk7Cit9CisjZW5kaWYgLyogIURJU0NPVkVSX09OTFkgKi8KKwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5oIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4MDBjNTkKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmgKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisgICAgbGlicGFydGVkCisgICAgQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQorKi8KKworI2lmbmRlZiBQRURfRkFUX0JPT1RTRUNUT1JfSAorI2RlZmluZSBQRURfRkFUX0JPT1RTRUNUT1JfSAorCit0eXBlZGVmIHN0cnVjdCBfRmF0Qm9vdFNlY3RvcglGYXRCb290U2VjdG9yOwordHlwZWRlZiBzdHJ1Y3QgX0ZhdEluZm9TZWN0b3IJRmF0SW5mb1NlY3RvcjsKKworI2luY2x1ZGUgImZhdC5oIgorCisjZGVmaW5lIEZBVDMyX0lORk9fTUFHSUMxCTB4NDE2MTUyNTIKKyNkZWZpbmUgRkFUMzJfSU5GT19NQUdJQzIJMHg2MTQxNzI3MgorI2RlZmluZSBGQVQzMl9JTkZPX01BR0lDMwkweGFhNTUKKworLyogc3RvbGVuIGZyb20gbWtkb3NmcywgYnkgRGF2ZSBIdWRzb24gKi8KKworI2RlZmluZSBGQVRfQk9PVF9NRVNTQUdFCVwKKyJUaGlzIHBhcnRpdGlvbiBkb2VzIG5vdCBoYXZlIGFuIG9wZXJhdGluZyBzeXN0ZW0gbG9hZGVyIGluc3RhbGxlZCBvbiBpdC5cblxyIlwKKyJQcmVzcyBhIGtleSB0byByZWJvb3QuLi4iCisKKyNkZWZpbmUgRkFUX0JPT1RfSlVNUAkiXHhlYlx4NThceDkwIgkJLyogam1wCSs1YSAqLworCisjZGVmaW5lIEZBVF9CT09UX0NPREUJIlx4MGUiCQkJLyogcHVzaCBjcyAqLwkJXAorCQkJIlx4MWYiCQkJLyogcG9wIGRzICovCQlcCisJCQkiXHhiZVx4NzRceDdlIgkJLyogbW92IHNpLCBvZmZzZXQgbWVzc2FnZSAqLyBcCisJCQkJCS8qIHdyaXRlX21zZ19sb29wOiAqLwkJXAorCQkJIlx4YWMiCQkJLyogbG9kc2IgKi8JCVwKKwkJCSJceDIyXHhjMCIJCS8qIGFuZCBhbCwgYWwgKi8JXAorCQkJIlx4NzRceDA2IgkJLyoganogZG9uZSAoKzgpICovCVwKKwkJCSJceGI0XHgwZSIJCS8qIG1vdiBhaCwgMHgwZSAqLwlcCisJCQkiXHhjZFx4MTAiCQkvKiBpbnQgMHgxMCAqLwkJXAorCQkJIlx4ZWJceGY1IgkJLyogam1wIHdyaXRlX21zZ19sb29wICovIFwKKwkJCQkJLyogZG9uZTogKi8JCQlcCisJCQkiXHhiNFx4MDAiCQkvKiBtb3YgYWgsIDB4MDAgKi8JXAorCQkJIlx4Y2RceDE2IgkJLyogaW50IDB4MTYgKi8JCVwKKwkJCSJceGI0XHgwMCIJCS8qIG1vdiBhaCwgMHgwMCAqLwlcCisJCQkiXHhjZFx4MTkiCQkvKiBpbnQgMHgxOSAqLwkJXAorCQkJIlx4ZWJceGZlIgkJLyogam1wICswIC0gaW4gY2FzZSBpbnQgMHgxOSAqLyBcCisJCQkJCQkvKiBkb2Vzbid0IHdvcmsgKi8JXAorCQkJCQkvKiBtZXNzYWdlOiAqLwkJCVwKKwkJCUZBVF9CT09UX01FU1NBR0UKKworI2RlZmluZSBGQVRfQk9PVF9DT0RFX0xFTkdUSCAxMjgKKworc3RydWN0IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBfRmF0Qm9vdFNlY3RvciB7CisgICAgICAgIHVpbnQ4X3QJCWJvb3RfanVtcFszXTsJLyogMDA6IEJvb3Qgc3RyYXAgc2hvcnQgb3IgbmVhciBqdW1wICovCisgICAgICAgIHVpbnQ4X3QJCXN5c3RlbV9pZFs4XTsJLyogMDM6IHN5c3RlbSBuYW1lICovCisgICAgICAgIHVpbnQxNl90CXNlY3Rvcl9zaXplOwkvKiAwYjogYnl0ZXMgcGVyIGxvZ2ljYWwgc2VjdG9yICovCisgICAgICAgIHVpbnQ4X3QJCWNsdXN0ZXJfc2l6ZTsJLyogMGQ6IHNlY3RvcnMvY2x1c3RlciAqLworICAgICAgICB1aW50MTZfdAlyZXNlcnZlZDsJLyogMGU6IHJlc2VydmVkIHNlY3RvcnMgKi8KKyAgICAgICAgdWludDhfdAkJZmF0czsJCS8qIDEwOiBudW1iZXIgb2YgRkFUcyAqLworICAgICAgICB1aW50MTZfdAlkaXJfZW50cmllczsJLyogMTE6IG51bWJlciBvZiByb290IGRpcmVjdG9yeSBlbnRyaWVzICovCisgICAgICAgIHVpbnQxNl90CXNlY3RvcnM7CS8qIDEzOiBpZiAwLCB0b3RhbF9zZWN0IHN1cGVyc2VkZXMgKi8KKyAgICAgICAgdWludDhfdAkJbWVkaWE7CQkvKiAxNTogbWVkaWEgY29kZSAqLworICAgICAgICB1aW50MTZfdAlmYXRfbGVuZ3RoOwkvKiAxNjogc2VjdG9ycy9GQVQgZm9yIEZBVDEyLzE2ICovCisgICAgICAgIHVpbnQxNl90CXNlY3NfdHJhY2s7CS8qIDE4OiBzZWN0b3JzIHBlciB0cmFjayAqLworICAgICAgICB1aW50MTZfdAloZWFkczsJCS8qIDFhOiBudW1iZXIgb2YgaGVhZHMgKi8KKyAgICAgICAgdWludDMyX3QJaGlkZGVuOwkJLyogMWM6IGhpZGRlbiBzZWN0b3JzIChwYXJ0aXRpb24gc3RhcnQpICovCisgICAgICAgIHVpbnQzMl90CXNlY3Rvcl9jb3VudDsJLyogMjA6IG5vLiBvZiBzZWN0b3JzIChpZiBzZWN0b3JzID09IDApICovCisKKyAgICAgICAgdW5pb24gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHsKKyAgICAgICAgICAgICAgICAvKiBGQVQxNiBmaWVsZHMgKi8KKyAgICAgICAgICAgICAgICBzdHJ1Y3QgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QJCWRyaXZlX251bTsJLyogMjQ6ICovCisgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90CQllbXB0eV8xOwkvKiAyNTogKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QJCWV4dF9zaWduYXR1cmU7CS8qIDI2OiBhbHdheXMgMHgyOSAqLworICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QJc2VyaWFsX251bWJlcjsJLyogMjc6ICovCisgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90CQl2b2x1bWVfbmFtZSBbMTFdOyAgICAgICAvKiAyYjogKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QJCWZhdF9uYW1lIFs4XTsJLyogMzY6ICovCisgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90CQlib290X2NvZGVbNDQ4XTsJLyogM2Y6IEJvb3QgY29kZSAob3IgbWVzc2FnZSkgKi8KKyAgICAgICAgICAgICAgICB9IGZhdDE2OworICAgICAgICAgICAgICAgIC8qIEZBVDMyIGZpZWxkcyAqLworICAgICAgICAgICAgICAgIHN0cnVjdCBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QJZmF0X2xlbmd0aDsJLyogMjQ6IHNpemUgb2YgRkFUIGluIHNlY3RvcnMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90CWZsYWdzOwkJLyogMjg6IGJpdDg6IGZhdCBtaXJyb3JpbmcsIGxvdzQ6IGFjdGl2ZSBmYXQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90CXZlcnNpb247ICAgICAgICAvKiAyYTogbWlub3IgKiAyNTYgKyBtYWpvciAqLworICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QJcm9vdF9kaXJfY2x1c3RlcjsJLyogMmM6ICovCisgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdAlpbmZvX3NlY3RvcjsgICAgLyogMzA6ICovCisgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdAliYWNrdXBfc2VjdG9yOwkvKiAzMjogKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QJCWVtcHR5XzEgWzEyXTsJLyogMzQ6ICovCisgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdAlkcml2ZV9udW07CS8qIDQwOiAqLworICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdAkJZXh0X3NpZ25hdHVyZTsJLyogNDI6IGFsd2F5cyAweDI5ICovCisgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdAlzZXJpYWxfbnVtYmVyOwkvKiA0MzogKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QJCXZvbHVtZV9uYW1lIFsxMV07CS8qIDQ3OiAqLworICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdAkJZmF0X25hbWUgWzhdOwkvKiA1MjogKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QJCWJvb3RfY29kZVs0MjBdOwkvKiA1YTogQm9vdCBjb2RlIChvciBtZXNzYWdlKSAqLworICAgICAgICAgICAgICAgIH0gZmF0MzI7CisgICAgICAgIH0gdTsKKworCXVpbnQxNl90CWJvb3Rfc2lnbjsJLyogMWZlOiBhbHdheXMgMHhBQTU1ICovCit9OworCitzdHJ1Y3QgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIF9GYXRJbmZvU2VjdG9yIHsKKyAgICAgICAgdWludDMyX3QJc2lnbmF0dXJlXzE7CS8qIHNob3VsZCBiZSAweDQxNjE1MjUyICovCisgICAgICAgIHVpbnQ4X3QJCXVudXNlZCBbNDgwXTsKKyAgICAgICAgdWludDMyX3QJc2lnbmF0dXJlXzI7CS8qIHNob3VsZCBiZSAweDYxNDE3MjcyICovCisgICAgICAgIHVpbnQzMl90CWZyZWVfY2x1c3RlcnM7CisgICAgICAgIHVpbnQzMl90CW5leHRfY2x1c3RlcjsJLyogbW9zdCByZWNlbnRseSBhbGxvY2F0ZWQgY2x1c3RlciAqLworICAgICAgICB1aW50OF90CQl1bnVzZWQyIFsweGVdOworICAgICAgICB1aW50MTZfdAlzaWduYXR1cmVfMzsJLyogc2hvdWxkIGJlIDB4YWE1NSAqLworfTsKKworaW50IGZhdF9ib290X3NlY3Rvcl9yZWFkIChGYXRCb290U2VjdG9yKiBicywgY29uc3QgUGVkR2VvbWV0cnkqIGdlb20pOworRmF0VHlwZSBmYXRfYm9vdF9zZWN0b3JfcHJvYmVfdHlwZSAoY29uc3QgRmF0Qm9vdFNlY3RvciogYnMsCisJCQkJICAgIGNvbnN0IFBlZEdlb21ldHJ5KiBnZW9tKTsKK2ludCBmYXRfYm9vdF9zZWN0b3JfYW5hbHlzZSAoRmF0Qm9vdFNlY3RvciogYnMsIFBlZEZpbGVTeXN0ZW0qIGZzKTsKK2ludCBmYXRfYm9vdF9zZWN0b3Jfc2V0X2Jvb3RfY29kZSAoRmF0Qm9vdFNlY3RvciogYnMpOworaW50IGZhdF9ib290X3NlY3Rvcl9nZW5lcmF0ZSAoRmF0Qm9vdFNlY3RvciogYnMsIGNvbnN0IFBlZEZpbGVTeXN0ZW0qIGZzKTsKK2ludCBmYXRfYm9vdF9zZWN0b3Jfd3JpdGUgKGNvbnN0IEZhdEJvb3RTZWN0b3IqIGJzLCBQZWRGaWxlU3lzdGVtKiBmcyk7CisKK2ludCBmYXRfaW5mb19zZWN0b3JfcmVhZCAoRmF0SW5mb1NlY3RvciogaXMsIGNvbnN0IFBlZEZpbGVTeXN0ZW0qIGZzKTsKK2ludCBmYXRfaW5mb19zZWN0b3JfZ2VuZXJhdGUgKEZhdEluZm9TZWN0b3IqIGlzLCBjb25zdCBQZWRGaWxlU3lzdGVtKiBmcyk7CitpbnQgZmF0X2luZm9fc2VjdG9yX3dyaXRlIChjb25zdCBGYXRJbmZvU2VjdG9yKiBpcywgUGVkRmlsZVN5c3RlbSogZnMpOworCisjZW5kaWYgLyogUEVEX0ZBVF9CT09UU0VDVE9SX0ggKi8KKwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9mYXQvY2FsYy5jIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9mYXQvY2FsYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmOGE4OTgKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2ZhdC9jYWxjLmMKQEAgLTAsMCArMSw0MzYgQEAKKy8qCisgICAgbGlicGFydGVkCisgICAgQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwLCAyMDAyLCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQorKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgImZhdC5oIiAKKworI2lmbmRlZiBESVNDT1ZFUl9PTkxZCisKKy8qIHJldHVybnMgdGhlIG1pbmltdW0gc2l6ZSBvZiBjbHVzdGVycyBmb3IgYSBnaXZlbiBmaWxlIHN5c3RlbSB0eXBlICovCitQZWRTZWN0b3IKK2ZhdF9taW5fY2x1c3Rlcl9zaXplIChGYXRUeXBlIGZhdF90eXBlKSB7CisJc3dpdGNoIChmYXRfdHlwZSkgeworCQljYXNlIEZBVF9UWVBFX0ZBVDEyOiByZXR1cm4gMTsKKwkJY2FzZSBGQVRfVFlQRV9GQVQxNjogcmV0dXJuIDEwMjQvNTEyOworCQljYXNlIEZBVF9UWVBFX0ZBVDMyOiByZXR1cm4gNDA5Ni81MTI7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgUGVkU2VjdG9yCitfc21hbGxlc3RfcG93ZXIyX292ZXIgKFBlZFNlY3RvciBjZWlsaW5nKQoreworCVBlZFNlY3RvcglyZXN1bHQgPSAxOworCisJd2hpbGUgKHJlc3VsdCA8IGNlaWxpbmcpCisJCXJlc3VsdCAqPSAyOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyogcmV0dXJucyB0aGUgbWluaW11bSBzaXplIG9mIGNsdXN0ZXJzIGZvciBhIGdpdmVuIGZpbGUgc3lzdGVtIHR5cGUgKi8KK1BlZFNlY3RvcgorZmF0X3JlY29tbWVuZF9taW5fY2x1c3Rlcl9zaXplIChGYXRUeXBlIGZhdF90eXBlLCBQZWRTZWN0b3Igc2l6ZSkgeworCXN3aXRjaCAoZmF0X3R5cGUpIHsKKwkJY2FzZSBGQVRfVFlQRV9GQVQxMjogcmV0dXJuIDE7CisJCWNhc2UgRkFUX1RZUEVfRkFUMTY6IHJldHVybiBmYXRfbWluX2NsdXN0ZXJfc2l6ZShmYXRfdHlwZSk7CisJCWNhc2UgRkFUX1RZUEVfRkFUMzI6CisJCQlyZXR1cm4gUEVEX01BWChfc21hbGxlc3RfcG93ZXIyX292ZXIoc2l6ZQorCQkJCQkJLyBNQVhfRkFUMzJfQ0xVU1RFUlMpLAorCQkJCSAgICAgICBmYXRfbWluX2NsdXN0ZXJfc2l6ZSAoZmF0X3R5cGUpKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIHJldHVybnMgdGhlIG1heG1pbXVtIHNpemUgb2YgY2x1c3RlcnMgZm9yIGEgZ2l2ZW4gZmlsZSBzeXN0ZW0gdHlwZSAqLworUGVkU2VjdG9yCitmYXRfbWF4X2NsdXN0ZXJfc2l6ZSAoRmF0VHlwZSBmYXRfdHlwZSkgeworCXN3aXRjaCAoZmF0X3R5cGUpIHsKKwkJY2FzZSBGQVRfVFlQRV9GQVQxMjogcmV0dXJuIDE7CS8qIGR1bm5vLi4uIHdobyBjYXJlcz8gKi8KKwkJY2FzZSBGQVRfVFlQRV9GQVQxNjogcmV0dXJuIDMyNzY4LzUxMjsKKwkJY2FzZSBGQVRfVFlQRV9GQVQzMjogcmV0dXJuIDY1NTM2LzUxMjsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIHJldHVybnMgdGhlIG1pbmltdW0gbnVtYmVyIG9mIGNsdXN0ZXJzIGZvciBhIGdpdmVuIGZpbGUgc3lzdGVtIHR5cGUgKi8KK0ZhdENsdXN0ZXIKK2ZhdF9taW5fY2x1c3Rlcl9jb3VudCAoRmF0VHlwZSBmYXRfdHlwZSkgeworCXN3aXRjaCAoZmF0X3R5cGUpIHsKKwkJY2FzZSBGQVRfVFlQRV9GQVQxMjoKKwkJY2FzZSBGQVRfVFlQRV9GQVQxNjoKKwkJCXJldHVybiBmYXRfbWF4X2NsdXN0ZXJfY291bnQgKGZhdF90eXBlKSAvIDI7CisKKwkJY2FzZSBGQVRfVFlQRV9GQVQzMjogcmV0dXJuIDB4ZmZmMDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIHJldHVybnMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNsdXN0ZXJzIGZvciBhIGdpdmVuIGZpbGUgc3lzdGVtIHR5cGUgKi8KK0ZhdENsdXN0ZXIKK2ZhdF9tYXhfY2x1c3Rlcl9jb3VudCAoRmF0VHlwZSBmYXRfdHlwZSkgeworCXN3aXRjaCAoZmF0X3R5cGUpIHsKKwkJY2FzZSBGQVRfVFlQRV9GQVQxMjogcmV0dXJuIDB4ZmYwOworCQljYXNlIEZBVF9UWVBFX0ZBVDE2OiByZXR1cm4gMHhmZmYwOworCQljYXNlIEZBVF9UWVBFX0ZBVDMyOiByZXR1cm4gMHgwZmZmZmZmMDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIHdoYXQgaXMgdGhpcyBzdXBwb3NlZCB0byBiZT8gIFdoYXQgZHJ1Z3MgYXJlIE0kIG9uPyAgKENhbiBJIGhhdmUgc29tZT8gOi0pICovCitQZWRTZWN0b3IKK2ZhdF9taW5fcmVzZXJ2ZWRfc2VjdG9yX2NvdW50IChGYXRUeXBlIGZhdF90eXBlKQoreworCXJldHVybiAoZmF0X3R5cGUgPT0gRkFUX1RZUEVfRkFUMzIpID8gMzIgOiAxOworfQorCitpbnQKK2ZhdF9jaGVja19yZXNpemVfZ2VvbWV0cnkgKGNvbnN0IFBlZEZpbGVTeXN0ZW0qIGZzLAorCQkJICAgY29uc3QgUGVkR2VvbWV0cnkqIGdlb20sCisJCQkgICBQZWRTZWN0b3IgbmV3X2NsdXN0ZXJfc2VjdG9ycywKKwkJCSAgIEZhdENsdXN0ZXIgbmV3X2NsdXN0ZXJfY291bnQpCit7CisJRmF0U3BlY2lmaWMqCWZzX2luZm8gPSBGQVRfU1BFQ0lGSUMgKGZzKTsKKwlQZWRTZWN0b3IJZnJlZV9zcGFjZTsKKwlQZWRTZWN0b3IJbWluX2ZyZWVfc3BhY2U7CisJUGVkU2VjdG9yCXRvdGFsX3NwYWNlOworCVBlZFNlY3RvcgluZXdfdG90YWxfc3BhY2U7CisJUGVkU2VjdG9yCWRpcl9zcGFjZTsKKworCVBFRF9BU1NFUlQgKGdlb20gIT0gTlVMTCwgcmV0dXJuIDApOworCisJZGlyX3NwYWNlID0gZnNfaW5mby0+dG90YWxfZGlyX2NsdXN0ZXJzICogZnNfaW5mby0+Y2x1c3Rlcl9zZWN0b3JzOworCWZyZWVfc3BhY2UgPSBmc19pbmZvLT5mYXQtPmZyZWVfY2x1c3Rlcl9jb3VudAorCQkJKiBmc19pbmZvLT5jbHVzdGVyX3NlY3RvcnM7CisJdG90YWxfc3BhY2UgPSBmc19pbmZvLT5mYXQtPmNsdXN0ZXJfY291bnQgKiBmc19pbmZvLT5jbHVzdGVyX3NlY3RvcnM7CisJbmV3X3RvdGFsX3NwYWNlID0gbmV3X2NsdXN0ZXJfY291bnQgKiBuZXdfY2x1c3Rlcl9zZWN0b3JzOworCW1pbl9mcmVlX3NwYWNlID0gdG90YWxfc3BhY2UgLSBuZXdfdG90YWxfc3BhY2UgKyBkaXJfc3BhY2U7CisKKwlQRURfQVNTRVJUIChuZXdfY2x1c3Rlcl9jb3VudAorCQkJPD0gZmF0X21heF9jbHVzdGVyX2NvdW50IChGQVRfVFlQRV9GQVQzMiksCisJCSAgICByZXR1cm4gMCk7CisKKwlpZiAoZnJlZV9zcGFjZSA8IG1pbl9mcmVlX3NwYWNlKSB7CisJCWNoYXIqIG5lZWRlZCA9IHBlZF91bml0X2Zvcm1hdCAoZ2VvbS0+ZGV2LCBtaW5fZnJlZV9zcGFjZSk7CisJCWNoYXIqIGhhdmUgPSBwZWRfdW5pdF9mb3JtYXQgKGdlb20tPmRldiwgZnJlZV9zcGFjZSk7CisJCXBlZF9leGNlcHRpb25fdGhyb3cgKAorCQkJUEVEX0VYQ0VQVElPTl9FUlJPUiwKKwkJCVBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJXygiWW91IG5lZWQgJXMgb2YgZnJlZSBkaXNrIHNwYWNlIHRvIHNocmluayB0aGlzICIKKwkJCSAgInBhcnRpdGlvbiB0byB0aGlzIHNpemUuICBDdXJyZW50bHksIG9ubHkgJXMgaXMgIgorCQkJICAiZnJlZS4iKSwKKwkJCW5lZWRlZCwgaGF2ZSk7CisJCXBlZF9mcmVlIChuZWVkZWQpOworCQlwZWRfZnJlZSAoaGF2ZSk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIERPIE5PVCBFRElUIFRISVMgQUxHT1JJVEhNIQorICogQXMgZmFyIGFzIEkgY2FuIHRlbGwsIHRoaXMgaXMgdGhlIHNhbWUgYWxnb3JpdGhtIHVzZWQgYnkgTWljcm9zb2Z0IHRvCisgKiBjYWxjdWxhdGUgdGhlIHNpemUgb2YgdGhlIGZpbGUgYWxsb2NhaW9uIHRhYmxlcywgYW5kIHRoZSBudW1iZXIgb2YgY2x1c3RlcnMuCisgKiBJIGhhdmUgbm90IHZlcmlmaWVkIHRoaXMgYnkgZGlzc2Fzc2VtYmxpbmcgTWljcm9zb2Z0IGNvZGUgLSBJIGNhbWUgdG8gdGhpcworICogY29uY2x1c2lvbiBieSBlbXBpcmljYWwgYW5hbHlzaXMgKGkuZS4gdHJpYWwgYW5kIGVycm9yIC0gdGhpcyB3YXMgSE9SUklCTEUpLgorICoKKyAqIElmIHlvdSB0aGluayB0aGlzIGNvZGUgbWFrZXMgbm8gc2Vuc2UsIHRoZW4geW91IGFyZSByaWdodC4gIEkgd2lsbCByZXN0cmFpbgorICogdGhlIHVyZ2UgdG8gaW5mbGljdCBzZXJpb3VzIGJvZGlseSBoYXJtIG9uIE1pY3Jvc29mdCBwZW9wbGUuCisgKi8KKworc3RhdGljIGludAorZW50cmllc19wZXJfc2VjdG9yIChGYXRUeXBlIGZhdF90eXBlKQoreworCXN3aXRjaCAoZmF0X3R5cGUpIHsKKwkJY2FzZSBGQVRfVFlQRV9GQVQxMjoKKwkJCXJldHVybiA1MTIgKiAzIC8gMjsKKwkJY2FzZSBGQVRfVFlQRV9GQVQxNjoKKwkJCXJldHVybiA1MTIgLyAyOworCQljYXNlIEZBVF9UWVBFX0ZBVDMyOgorCQkJcmV0dXJuIDUxMiAvIDQ7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitjYWxjX3NpemVzIChQZWRTZWN0b3Igc2l6ZSwgUGVkU2VjdG9yIGFsaWduLCBGYXRUeXBlIGZhdF90eXBlLAorCSAgICBQZWRTZWN0b3Igcm9vdF9kaXJfc2VjdG9ycywgUGVkU2VjdG9yIGNsdXN0ZXJfc2VjdG9ycywKKwkgICAgRmF0Q2x1c3Rlciogb3V0X2NsdXN0ZXJfY291bnQsIFBlZFNlY3Rvciogb3V0X2ZhdF9zaXplKQoreworCVBlZFNlY3RvcglkYXRhX2ZhdF9zcGFjZTsgLyogc3BhY2UgYXZhaWxhYmxlIHRvIGNsdXN0ZXJzICsgRkFUICovCisJUGVkU2VjdG9yCWZhdF9zcGFjZTsJLyogc3BhY2UgdGFrZW4gYnkgZWFjaCBGQVQgKi8KKwlQZWRTZWN0b3IJY2x1c3Rlcl9zcGFjZTsJLyogc3BhY2UgdGFrZW4gYnkgY2x1c3RlcnMgKi8KKwlGYXRDbHVzdGVyCWNsdXN0ZXJfY291bnQ7CisJaW50CQlpOworCisJUEVEX0FTU0VSVCAob3V0X2NsdXN0ZXJfY291bnQgIT0gTlVMTCwgcmV0dXJuIDApOworCVBFRF9BU1NFUlQgKG91dF9mYXRfc2l6ZSAhPSBOVUxMLCByZXR1cm4gMCk7CisKKwlkYXRhX2ZhdF9zcGFjZSA9IHNpemUgLSBmYXRfbWluX3Jlc2VydmVkX3NlY3Rvcl9jb3VudCAoZmF0X3R5cGUpCisJCQkgLSBhbGlnbjsKKwlpZiAoZmF0X3R5cGUgPT0gRkFUX1RZUEVfRkFUMTYpCisJCWRhdGFfZmF0X3NwYWNlIC09IHJvb3RfZGlyX3NlY3RvcnM7CisKKwlmYXRfc3BhY2UgPSAwOworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJaWYgKGZhdF90eXBlID09IEZBVF9UWVBFX0ZBVDMyKQorCQkJY2x1c3Rlcl9zcGFjZSA9IGRhdGFfZmF0X3NwYWNlIC0gZmF0X3NwYWNlOworCQllbHNlCisJCQljbHVzdGVyX3NwYWNlID0gZGF0YV9mYXRfc3BhY2UgLSAyICogZmF0X3NwYWNlOworCisJCWNsdXN0ZXJfY291bnQgPSBjbHVzdGVyX3NwYWNlIC8gY2x1c3Rlcl9zZWN0b3JzOworCQlmYXRfc3BhY2UgPSBwZWRfZGl2X3JvdW5kX3VwIChjbHVzdGVyX2NvdW50ICsgMiwKKwkJCQkJICAgICAgZW50cmllc19wZXJfc2VjdG9yIChmYXRfdHlwZSkpOworCX0KKworCWNsdXN0ZXJfc3BhY2UgPSBkYXRhX2ZhdF9zcGFjZSAtIDIgKiBmYXRfc3BhY2U7CisJY2x1c3Rlcl9jb3VudCA9IGNsdXN0ZXJfc3BhY2UgLyBjbHVzdGVyX3NlY3RvcnM7CisKKwkvKiBsb29rcyBsaWtlIHRoaXMgc2hvdWxkIGJlIHBhcnQgb2YgdGhlIGxvb3AgY29uZGl0aW9uPworCSAqIE5lZWQgdG8gYnVpbGQgdGhlIEJpZyBUYWJsZSBUTSBhZ2FpbiB0byBjaGVjaworCSAqLworCWlmIChmYXRfc3BhY2UgPCBwZWRfZGl2X3JvdW5kX3VwIChjbHVzdGVyX2NvdW50ICsgMiwKKwkJCQkgICAgICAgICAgZW50cmllc19wZXJfc2VjdG9yIChmYXRfdHlwZSkpKSB7CisJCWZhdF9zcGFjZSA9IHBlZF9kaXZfcm91bmRfdXAgKGNsdXN0ZXJfY291bnQgKyAyLAorCQkJCQkgICAgICBlbnRyaWVzX3Blcl9zZWN0b3IgKGZhdF90eXBlKSk7CisJfQorCisJaWYgKGNsdXN0ZXJfY291bnQgPiBmYXRfbWF4X2NsdXN0ZXJfY291bnQgKGZhdF90eXBlKQorCSAgICB8fCBjbHVzdGVyX2NvdW50IDwgZmF0X21pbl9jbHVzdGVyX2NvdW50IChmYXRfdHlwZSkpCisJCXJldHVybiAwOworCisJKm91dF9jbHVzdGVyX2NvdW50ID0gY2x1c3Rlcl9jb3VudDsKKwkqb3V0X2ZhdF9zaXplID0gZmF0X3NwYWNlOworCisJcmV0dXJuIDE7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQKK2ZhdF9jYWxjX3NpemVzIChQZWRTZWN0b3Igc2l6ZSwgUGVkU2VjdG9yIGFsaWduLCBGYXRUeXBlIGZhdF90eXBlLAorCQlQZWRTZWN0b3Igcm9vdF9kaXJfc2VjdG9ycywKKwkJUGVkU2VjdG9yKiBvdXRfY2x1c3Rlcl9zZWN0b3JzLCBGYXRDbHVzdGVyKiBvdXRfY2x1c3Rlcl9jb3VudCwKKwkJUGVkU2VjdG9yKiBvdXRfZmF0X3NpemUpCit7CisJUGVkU2VjdG9yCWNsdXN0ZXJfc2VjdG9yczsKKworCVBFRF9BU1NFUlQgKG91dF9jbHVzdGVyX3NlY3RvcnMgIT0gTlVMTCwgcmV0dXJuIDApOworCVBFRF9BU1NFUlQgKG91dF9jbHVzdGVyX2NvdW50ICE9IE5VTEwsIHJldHVybiAwKTsKKwlQRURfQVNTRVJUIChvdXRfZmF0X3NpemUgIT0gTlVMTCwgcmV0dXJuIDApOworCisJZm9yIChjbHVzdGVyX3NlY3RvcnMgPSBmYXRfcmVjb21tZW5kX21pbl9jbHVzdGVyX3NpemUgKGZhdF90eXBlLCBzaXplKTsKKwkgICAgIGNsdXN0ZXJfc2VjdG9ycyA8PSBmYXRfbWF4X2NsdXN0ZXJfc2l6ZSAoZmF0X3R5cGUpOworCSAgICAgY2x1c3Rlcl9zZWN0b3JzICo9IDIpIHsKKwkJaWYgKGNhbGNfc2l6ZXMgKHNpemUsIGFsaWduLCBmYXRfdHlwZSwgcm9vdF9kaXJfc2VjdG9ycywKKwkJCQljbHVzdGVyX3NlY3RvcnMsCisJCQkgICAgICAgIG91dF9jbHVzdGVyX2NvdW50LCBvdXRfZmF0X3NpemUpKSB7CisJCQkqb3V0X2NsdXN0ZXJfc2VjdG9ycyA9IGNsdXN0ZXJfc2VjdG9yczsKKwkJCXJldHVybiAxOworCQl9CisJfQorCisJZm9yIChjbHVzdGVyX3NlY3RvcnMgPSBmYXRfcmVjb21tZW5kX21pbl9jbHVzdGVyX3NpemUgKGZhdF90eXBlLCBzaXplKTsKKwkgICAgIGNsdXN0ZXJfc2VjdG9ycyA+PSBmYXRfbWluX2NsdXN0ZXJfc2l6ZSAoZmF0X3R5cGUpOworCSAgICAgY2x1c3Rlcl9zZWN0b3JzIC89IDIpIHsKKwkJaWYgKGNhbGNfc2l6ZXMgKHNpemUsIGFsaWduLCBmYXRfdHlwZSwgcm9vdF9kaXJfc2VjdG9ycywKKwkJCQljbHVzdGVyX3NlY3RvcnMsCisJCQkgICAgICAgIG91dF9jbHVzdGVyX2NvdW50LCBvdXRfZmF0X3NpemUpKSB7CisJCQkqb3V0X2NsdXN0ZXJfc2VjdG9ycyA9IGNsdXN0ZXJfc2VjdG9yczsKKwkJCXJldHVybiAxOworCQl9CisJfQorCisJLyogb25seSBtYWtlIHRoZSBjbHVzdGVyIHNpemUgcmVhbGx5IHNtYWxsICg8NGspIGlmIGEgYmlnZ2VyIG9uZSBpcworCSAqIGlzbid0IHBvc3NpYmxlLiAgV2luZG93cyBuZXZlciBtYWtlcyBGUydzIGxpa2UgdGhpcywgYnV0IGl0CisJICogc2VlbXMgdG8gd29yay4uLiAgKGRvIG1vcmUgdGVzdHMhKQorCSAqLworCWZvciAoY2x1c3Rlcl9zZWN0b3JzID0gNDsgY2x1c3Rlcl9zZWN0b3JzID4gMDsgY2x1c3Rlcl9zZWN0b3JzIC89IDIpIHsKKwkJaWYgKGNhbGNfc2l6ZXMgKHNpemUsIGFsaWduLCBmYXRfdHlwZSwgcm9vdF9kaXJfc2VjdG9ycywKKwkJCQljbHVzdGVyX3NlY3RvcnMsCisJCQkJb3V0X2NsdXN0ZXJfY291bnQsIG91dF9mYXRfc2l6ZSkpIHsKKwkJCSpvdXRfY2x1c3Rlcl9zZWN0b3JzID0gY2x1c3Rlcl9zZWN0b3JzOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogU2FtZSBhcyBmYXRfY2FsY19zaXplcywgZXhjZXB0IGl0IG9ubHkgYXR0ZW1wdHMgdG8gbWF0Y2ggYSBwYXJ0aWN1bGFyCisgKiBjbHVzdGVyIHNpemUuICBUaGlzIGlzIHVzZWZ1bCwgYmVjYXVzZSB0aGUgRkFUIHJlc2l6ZXIgY2FuIG9ubHkgc2hyaW5rIHRoZQorICogY2x1c3RlciBzaXplLgorICovCitpbnQKK2ZhdF9jYWxjX3Jlc2l6ZV9zaXplcyAoCisJY29uc3QgUGVkR2VvbWV0cnkqIGdlb20sCisJUGVkU2VjdG9yIGFsaWduLAorCUZhdFR5cGUgZmF0X3R5cGUsCisJUGVkU2VjdG9yIHJvb3RfZGlyX3NlY3RvcnMsCisJUGVkU2VjdG9yIGNsdXN0ZXJfc2VjdG9ycywKKwlQZWRTZWN0b3IqIG91dF9jbHVzdGVyX3NlY3RvcnMsCisJRmF0Q2x1c3Rlciogb3V0X2NsdXN0ZXJfY291bnQsCisJUGVkU2VjdG9yKiBvdXRfZmF0X3NpemUpCit7CisJUEVEX0FTU0VSVCAoZ2VvbSAhPSBOVUxMLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAob3V0X2NsdXN0ZXJfc2VjdG9ycyAhPSBOVUxMLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAob3V0X2NsdXN0ZXJfY291bnQgIT0gTlVMTCwgcmV0dXJuIDApOworCVBFRF9BU1NFUlQgKG91dF9mYXRfc2l6ZSAhPSBOVUxMLCByZXR1cm4gMCk7CisKKy8qIGxpYnBhcnRlZCBjYW4gb25seSByZWR1Y2UgdGhlIGNsdXN0ZXIgc2l6ZSBhdCB0aGlzIHBvaW50ICovCisJZm9yICgqb3V0X2NsdXN0ZXJfc2VjdG9ycyA9IGNsdXN0ZXJfc2VjdG9yczsKKwkgICAgICpvdXRfY2x1c3Rlcl9zZWN0b3JzID49IGZhdF9taW5fY2x1c3Rlcl9zaXplIChmYXRfdHlwZSk7CisJICAgICAqb3V0X2NsdXN0ZXJfc2VjdG9ycyAvPSAyKSB7CisJCWlmIChjYWxjX3NpemVzIChnZW9tLT5sZW5ndGgsIGFsaWduLCBmYXRfdHlwZSwgcm9vdF9kaXJfc2VjdG9ycywKKwkJCQkqb3V0X2NsdXN0ZXJfc2VjdG9ycywKKwkJCQlvdXRfY2x1c3Rlcl9jb3VudCwgb3V0X2ZhdF9zaXplKSkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogIENhbGN1bGF0ZXMgdGhlIG51bWJlciBvZiBzZWN0b3JzIG5lZWRlZCB0byBiZSBhZGRlZCB0byBjbHVzdGVyX29mZnNldCwKKyAgICB0byBtYWtlIHRoZSBjbHVzdGVyIG9uIHRoZSBuZXcgZmlsZSBzeXN0ZW0gbWF0Y2ggdXAgd2l0aCB0aGUgb25lcworICAgIG9uIHRoZSBvbGQgZmlsZSBzeXN0ZW0uCisJSG93ZXZlciwgc29tZSBzcGFjZSBpcyByZXNlcnZlZCBieSBmYXRfY2FsY19yZXNpemVfc2l6ZXMoKSBhbmQKKyAgICBmcmllbmRzLCB0byBhbGxvdyByb29tIGZvciB0aGlzIHNwYWNlLiAgSWYgdG9vIG11Y2ggb2YgdGhpcyBzcGFjZSBpcyBsZWZ0CisgICAgb3ZlciwgZXZlcnlvbmUgd2lsbCBjb21wbGFpbiwgc28gd2UgaGF2ZSB0byBiZSBncmVlZHksIGFuZCB1c2UgaXQgYWxsIHVwLi4uCisgKi8KK1BlZFNlY3RvcgorZmF0X2NhbGNfYWxpZ25fc2VjdG9ycyAoY29uc3QgUGVkRmlsZVN5c3RlbSogbmV3X2ZzLAorCQkJY29uc3QgUGVkRmlsZVN5c3RlbSogb2xkX2ZzKQoreworCUZhdFNwZWNpZmljKglvbGRfZnNfaW5mbyA9IEZBVF9TUEVDSUZJQyAob2xkX2ZzKTsKKwlGYXRTcGVjaWZpYyoJbmV3X2ZzX2luZm8gPSBGQVRfU1BFQ0lGSUMgKG5ld19mcyk7CisJUGVkU2VjdG9yCXJhd19vbGRfbWV0YV9kYXRhX2VuZDsKKwlQZWRTZWN0b3IJbmV3X21ldGFfZGF0YV9zaXplOworCVBlZFNlY3RvcgltaW5fbmV3X21ldGFfZGF0YV9lbmQ7CisJUGVkU2VjdG9yCW5ld19kYXRhX3NpemU7CisJUGVkU2VjdG9yCW5ld19jbHVzdGVyc19zaXplOworCVBlZFNlY3RvcglhbGlnbjsKKworCW5ld19tZXRhX2RhdGFfc2l6ZQorCQk9IGZhdF9taW5fcmVzZXJ2ZWRfc2VjdG9yX2NvdW50IChuZXdfZnNfaW5mby0+ZmF0X3R5cGUpIAorCQkgICsgbmV3X2ZzX2luZm8tPmZhdF9zZWN0b3JzICogMjsKKworCWlmIChuZXdfZnNfaW5mby0+ZmF0X3R5cGUgPT0gRkFUX1RZUEVfRkFUMTYpCisJCW5ld19tZXRhX2RhdGFfc2l6ZSArPSBuZXdfZnNfaW5mby0+cm9vdF9kaXJfc2VjdG9yX2NvdW50OworCisJcmF3X29sZF9tZXRhX2RhdGFfZW5kID0gb2xkX2ZzLT5nZW9tLT5zdGFydAorCQkJCSArIG9sZF9mc19pbmZvLT5jbHVzdGVyX29mZnNldDsKKworCW1pbl9uZXdfbWV0YV9kYXRhX2VuZCA9IG5ld19mcy0+Z2VvbS0+c3RhcnQgKyBuZXdfbWV0YV9kYXRhX3NpemU7CisKKwlpZiAocmF3X29sZF9tZXRhX2RhdGFfZW5kID4gbWluX25ld19tZXRhX2RhdGFfZW5kKQorCQlhbGlnbiA9IChyYXdfb2xkX21ldGFfZGF0YV9lbmQgLSBtaW5fbmV3X21ldGFfZGF0YV9lbmQpCisJCQklIG5ld19mc19pbmZvLT5jbHVzdGVyX3NlY3RvcnM7CisJZWxzZQorCQlhbGlnbiA9IChuZXdfZnNfaW5mby0+Y2x1c3Rlcl9zZWN0b3JzCisJCSAgICAgICAgIC0gKCAgIChtaW5fbmV3X21ldGFfZGF0YV9lbmQgLSByYXdfb2xkX21ldGFfZGF0YV9lbmQpCisJCQkJJSBuZXdfZnNfaW5mby0+Y2x1c3Rlcl9zZWN0b3JzICAgKSkKKwkJCSUgbmV3X2ZzX2luZm8tPmNsdXN0ZXJfc2VjdG9yczsKKworCW5ld19kYXRhX3NpemUgPSBuZXdfZnMtPmdlb20tPmxlbmd0aCAtIG5ld19tZXRhX2RhdGFfc2l6ZTsKKwluZXdfY2x1c3RlcnNfc2l6ZSA9IG5ld19mc19pbmZvLT5jbHVzdGVyX2NvdW50CisJCQkJKiBuZXdfZnNfaW5mby0+Y2x1c3Rlcl9zZWN0b3JzOworCisJd2hpbGUgKG5ld19jbHVzdGVyc19zaXplICsgYWxpZ24gKyBuZXdfZnNfaW5mby0+Y2x1c3Rlcl9zZWN0b3JzCisJCQk8PSBuZXdfZGF0YV9zaXplKQorCQlhbGlnbiArPSBuZXdfZnNfaW5mby0+Y2x1c3Rlcl9zZWN0b3JzOworCisJcmV0dXJuIGFsaWduOworfQorCitpbnQKK2ZhdF9pc19zZWN0b3JfaW5fY2x1c3RlcnMgKGNvbnN0IFBlZEZpbGVTeXN0ZW0qIGZzLCBQZWRTZWN0b3Igc2VjdG9yKQoreworCUZhdFNwZWNpZmljKglmc19pbmZvID0gRkFUX1NQRUNJRklDIChmcyk7CisKKwlyZXR1cm4gc2VjdG9yID49IGZzX2luZm8tPmNsdXN0ZXJfb2Zmc2V0CisJICAgICAgICYmIHNlY3RvciA8IGZzX2luZm8tPmNsdXN0ZXJfb2Zmc2V0CisJICAgICAgCQkgICArIGZzX2luZm8tPmNsdXN0ZXJfc2VjdG9ycyAqIGZzX2luZm8tPmNsdXN0ZXJfY291bnQ7Cit9CisKK0ZhdEZyYWdtZW50CitmYXRfY2x1c3Rlcl90b19mcmFnIChjb25zdCBQZWRGaWxlU3lzdGVtKiBmcywgRmF0Q2x1c3RlciBjbHVzdGVyKQoreworCUZhdFNwZWNpZmljKglmc19pbmZvID0gRkFUX1NQRUNJRklDIChmcyk7CisKKwlQRURfQVNTRVJUIChjbHVzdGVyID49IDIgJiYgY2x1c3RlciA8IGZzX2luZm8tPmNsdXN0ZXJfY291bnQgKyAyLAorCQkgICAgcmV0dXJuIDApOworCisJcmV0dXJuIChjbHVzdGVyIC0gMikgKiBmc19pbmZvLT5jbHVzdGVyX2ZyYWdzOworfQorCitGYXRDbHVzdGVyCitmYXRfZnJhZ190b19jbHVzdGVyIChjb25zdCBQZWRGaWxlU3lzdGVtKiBmcywgRmF0RnJhZ21lbnQgZnJhZykKK3sKKwlGYXRTcGVjaWZpYyoJZnNfaW5mbyA9IEZBVF9TUEVDSUZJQyAoZnMpOworCisJUEVEX0FTU0VSVCAoZnJhZyA+PSAwICYmIGZyYWcgPCBmc19pbmZvLT5mcmFnX2NvdW50LCByZXR1cm4gMCk7CisKKwlyZXR1cm4gZnJhZyAvIGZzX2luZm8tPmNsdXN0ZXJfZnJhZ3MgKyAyOworfQorCitQZWRTZWN0b3IKK2ZhdF9mcmFnX3RvX3NlY3RvciAoY29uc3QgUGVkRmlsZVN5c3RlbSogZnMsIEZhdEZyYWdtZW50IGZyYWcpCit7CisJRmF0U3BlY2lmaWMqCWZzX2luZm8gPSBGQVRfU1BFQ0lGSUMgKGZzKTsKKworCVBFRF9BU1NFUlQgKGZyYWcgPj0gMCAmJiBmcmFnIDwgZnNfaW5mby0+ZnJhZ19jb3VudCwgcmV0dXJuIDApOworCisJcmV0dXJuIGZyYWcgKiBmc19pbmZvLT5mcmFnX3NlY3RvcnMgKyBmc19pbmZvLT5jbHVzdGVyX29mZnNldDsKK30KKworRmF0RnJhZ21lbnQKK2ZhdF9zZWN0b3JfdG9fZnJhZyAoY29uc3QgUGVkRmlsZVN5c3RlbSogZnMsIFBlZFNlY3RvciBzZWN0b3IpCit7CisJRmF0U3BlY2lmaWMqCWZzX2luZm8gPSBGQVRfU1BFQ0lGSUMgKGZzKTsKKworCVBFRF9BU1NFUlQgKHNlY3RvciA+PSBmc19pbmZvLT5jbHVzdGVyX29mZnNldCwgcmV0dXJuIDApOworCisJcmV0dXJuIChzZWN0b3IgLSBmc19pbmZvLT5jbHVzdGVyX29mZnNldCkgLyBmc19pbmZvLT5mcmFnX3NlY3RvcnM7Cit9CisKK1BlZFNlY3RvcgorZmF0X2NsdXN0ZXJfdG9fc2VjdG9yIChjb25zdCBQZWRGaWxlU3lzdGVtKiBmcywgRmF0Q2x1c3RlciBjbHVzdGVyKQoreworCUZhdFNwZWNpZmljKglmc19pbmZvID0gRkFUX1NQRUNJRklDIChmcyk7CisKKwlQRURfQVNTRVJUIChjbHVzdGVyID49IDIgJiYgY2x1c3RlciA8IGZzX2luZm8tPmNsdXN0ZXJfY291bnQgKyAyLAorCQkgICAgcmV0dXJuIDApOworCisJcmV0dXJuIChjbHVzdGVyIC0gMikgKiBmc19pbmZvLT5jbHVzdGVyX3NlY3RvcnMKKwkJKyBmc19pbmZvLT5jbHVzdGVyX29mZnNldDsKK30KKworRmF0Q2x1c3RlcgorZmF0X3NlY3Rvcl90b19jbHVzdGVyIChjb25zdCBQZWRGaWxlU3lzdGVtKiBmcywgUGVkU2VjdG9yIHNlY3RvcikKK3sKKwlGYXRTcGVjaWZpYyoJZnNfaW5mbyA9IEZBVF9TUEVDSUZJQyAoZnMpOworCisJUEVEX0FTU0VSVCAoc2VjdG9yID49IGZzX2luZm8tPmNsdXN0ZXJfb2Zmc2V0LCByZXR1cm4gMCk7CisKKwlyZXR1cm4gKHNlY3RvciAtIGZzX2luZm8tPmNsdXN0ZXJfb2Zmc2V0KSAvIGZzX2luZm8tPmNsdXN0ZXJfc2VjdG9ycworCQkrIDI7Cit9CisjZW5kaWYgLyogIURJU0NPVkVSX09OTFkgKi8KZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvZmF0L2NhbGMuaCBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvZmF0L2NhbGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDEyNmU1Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9mYXQvY2FsYy5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgICAgbGlicGFydGVkCisgICAgQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKKyovCisKKyNpZm5kZWYgUEVEX0ZBVF9DQUxDX0gKKyNkZWZpbmUgUEVEX0ZBVF9DQUxDX0gKKworZXh0ZXJuIFBlZFNlY3RvciBmYXRfbWluX2NsdXN0ZXJfc2l6ZSAoRmF0VHlwZSBmYXRfdHlwZSk7CitleHRlcm4gUGVkU2VjdG9yIGZhdF9tYXhfY2x1c3Rlcl9zaXplIChGYXRUeXBlIGZhdF90eXBlKTsKK2V4dGVybiBGYXRDbHVzdGVyIGZhdF9taW5fY2x1c3Rlcl9jb3VudCAoRmF0VHlwZSBmYXRfdHlwZSk7CitleHRlcm4gRmF0Q2x1c3RlciBmYXRfbWF4X2NsdXN0ZXJfY291bnQgKEZhdFR5cGUgZmF0X3R5cGUpOworCitleHRlcm4gUGVkU2VjdG9yIGZhdF9taW5fcmVzZXJ2ZWRfc2VjdG9yX2NvdW50IChGYXRUeXBlIGZhdF90eXBlKTsKKworZXh0ZXJuIGludCBmYXRfY2hlY2tfcmVzaXplX2dlb21ldHJ5IChjb25zdCBQZWRGaWxlU3lzdGVtKiBmcywKKwkgICAgICAgCQkJICAgICAgY29uc3QgUGVkR2VvbWV0cnkqIGdlb20sCisJCQkJICAgICAgUGVkU2VjdG9yIG5ld19jbHVzdGVyX3NlY3RvcnMsCisJCQkJICAgICAgRmF0Q2x1c3RlciBuZXdfY2x1c3Rlcl9jb3VudCk7CisKK2V4dGVybiBpbnQgZmF0X2NhbGNfc2l6ZXMgKFBlZFNlY3RvciBzaXplLAorCQkJICAgUGVkU2VjdG9yIGFsaWduLAorCQkJICAgRmF0VHlwZSBmYXRfdHlwZSwKKwkJCSAgIFBlZFNlY3RvciByb290X2Rpcl9zZWN0b3JzLAorCQkJICAgUGVkU2VjdG9yKiBvdXRfY2x1c3Rlcl9zZWN0b3JzLAorCQkJICAgRmF0Q2x1c3Rlciogb3V0X2NsdXN0ZXJfY291bnQsCisJCQkgICBQZWRTZWN0b3IqIG91dF9mYXRfc2l6ZSk7CisKK2V4dGVybiBpbnQgZmF0X2NhbGNfcmVzaXplX3NpemVzIChjb25zdCBQZWRHZW9tZXRyeSogZ2VvbSwKKwkJCQkgIFBlZFNlY3RvciBhbGlnbiwKKwkJCQkgIEZhdFR5cGUgZmF0X3R5cGUsCisJCQkJICBQZWRTZWN0b3Igcm9vdF9kaXJfc2VjdG9ycywKKwkJCQkgIFBlZFNlY3RvciBjbHVzdGVyX3NlY3RvcnMsCisJCQkJICBQZWRTZWN0b3IqIG91dF9jbHVzdGVyX3NlY3RvcnMsCisJCQkJICBGYXRDbHVzdGVyKiBvdXRfY2x1c3Rlcl9jb3VudCwKKwkJCQkgIFBlZFNlY3Rvciogb3V0X2ZhdF9zaXplKTsKKworZXh0ZXJuIFBlZFNlY3RvcgorZmF0X2NhbGNfYWxpZ25fc2VjdG9ycyAoY29uc3QgUGVkRmlsZVN5c3RlbSogbmV3X2ZzLAorCQkJY29uc3QgUGVkRmlsZVN5c3RlbSogb2xkX2ZzKTsKKworZXh0ZXJuIGludAorZmF0X2lzX3NlY3Rvcl9pbl9jbHVzdGVycyAoY29uc3QgUGVkRmlsZVN5c3RlbSogZnMsIFBlZFNlY3RvciBzZWN0b3IpOworCitleHRlcm4gRmF0RnJhZ21lbnQKK2ZhdF9jbHVzdGVyX3RvX2ZyYWcgKGNvbnN0IFBlZEZpbGVTeXN0ZW0qIGZzLCBGYXRDbHVzdGVyIGNsdXN0ZXIpOworCitleHRlcm4gRmF0Q2x1c3RlcgorZmF0X2ZyYWdfdG9fY2x1c3RlciAoY29uc3QgUGVkRmlsZVN5c3RlbSogZnMsIEZhdEZyYWdtZW50IGZyYWcpOworCitleHRlcm4gUGVkU2VjdG9yCitmYXRfZnJhZ190b19zZWN0b3IgKGNvbnN0IFBlZEZpbGVTeXN0ZW0qIGZzLCBGYXRGcmFnbWVudCBmcmFnKTsKKworZXh0ZXJuIEZhdEZyYWdtZW50CitmYXRfc2VjdG9yX3RvX2ZyYWcgKGNvbnN0IFBlZEZpbGVTeXN0ZW0qIGZzLCBQZWRTZWN0b3Igc2VjdG9yKTsKKworZXh0ZXJuIFBlZFNlY3RvcgorZmF0X2NsdXN0ZXJfdG9fc2VjdG9yIChjb25zdCBQZWRGaWxlU3lzdGVtKiBmcywgRmF0Q2x1c3RlciBjbHVzdGVyKTsKKworZXh0ZXJuIEZhdENsdXN0ZXIKK2ZhdF9zZWN0b3JfdG9fY2x1c3RlciAoY29uc3QgUGVkRmlsZVN5c3RlbSogZnMsIFBlZFNlY3RvciBzZWN0b3IpOworCisjZW5kaWYgLyogUEVEX0ZBVF9DQUxDX0ggKi8KKwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9mYXQvY2xzdGR1cC5jIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9mYXQvY2xzdGR1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0Nzk1YjMKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2ZhdC9jbHN0ZHVwLmMKQEAgLTAsMCArMSw0MjUgQEAKKy8qCisgICAgbGlicGFydGVkCisgICAgQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQorKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAiZmF0LmgiCisKKyNpZm5kZWYgRElTQ09WRVJfT05MWQorCitzdGF0aWMgaW50CituZWVkc19kdXBsaWNhdGluZyAoY29uc3QgRmF0T3BDb250ZXh0KiBjdHgsIEZhdEZyYWdtZW50IGZyYWcpCit7CisJRmF0U3BlY2lmaWMqCW9sZF9mc19pbmZvID0gRkFUX1NQRUNJRklDIChjdHgtPm9sZF9mcyk7CisJRmF0Q2x1c3RlcgljbHVzdGVyID0gZmF0X2ZyYWdfdG9fY2x1c3RlciAoY3R4LT5vbGRfZnMsIGZyYWcpOworCUZhdENsdXN0ZXJGbGFnCWZsYWc7CisKKwlQRURfQVNTRVJUIChjbHVzdGVyID49IDIgJiYgY2x1c3RlciA8IG9sZF9mc19pbmZvLT5jbHVzdGVyX2NvdW50ICsgMiwKKwkJICAgIHJldHVybiAwKTsKKworCWZsYWcgPSBmYXRfZ2V0X2ZyYWdtZW50X2ZsYWcgKGN0eC0+b2xkX2ZzLCBmcmFnKTsKKwlzd2l0Y2ggKGZsYWcpIHsKKwljYXNlIEZBVF9GTEFHX0ZSRUU6CisJCXJldHVybiAwOworCisJY2FzZSBGQVRfRkxBR19ESVJFQ1RPUlk6CisJCXJldHVybiAxOworCisJY2FzZSBGQVRfRkxBR19GSUxFOgorCQlyZXR1cm4gZmF0X29wX2NvbnRleHRfbWFwX3N0YXRpY19mcmFnbWVudCAoY3R4LCBmcmFnKSA9PSAtMTsKKwkKKwljYXNlIEZBVF9GTEFHX0JBRDoKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3NlYXJjaF9uZXh0X2ZyYWdtZW50IChGYXRPcENvbnRleHQqIGN0eCkKK3sKKwlGYXRTcGVjaWZpYyoJZnNfaW5mbyA9IEZBVF9TUEVDSUZJQyAoY3R4LT5vbGRfZnMpOworCisJZm9yICg7IGN0eC0+YnVmZmVyX29mZnNldCA8IGZzX2luZm8tPmZyYWdfY291bnQ7IGN0eC0+YnVmZmVyX29mZnNldCsrKSB7CisJCWlmIChuZWVkc19kdXBsaWNhdGluZyAoY3R4LCBjdHgtPmJ1ZmZlcl9vZmZzZXQpKQorCQkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOwkvKiBhbGwgZG9uZSEgKi8KK30KKworc3RhdGljIGludAorcmVhZF9tYXJrZWRfZnJhZ21lbnRzIChGYXRPcENvbnRleHQqIGN0eCwgRmF0RnJhZ21lbnQgbGVuZ3RoKQoreworCUZhdFNwZWNpZmljKgkJZnNfaW5mbyA9IEZBVF9TUEVDSUZJQyAoY3R4LT5vbGRfZnMpOworCWludAkJCXN0YXR1czsKKwlGYXRGcmFnbWVudAkJaTsKKworCXBlZF9leGNlcHRpb25fZmV0Y2hfYWxsICgpOworCXN0YXR1cyA9IGZhdF9yZWFkX2ZyYWdtZW50cyAoY3R4LT5vbGRfZnMsIGZzX2luZm8tPmJ1ZmZlciwKKwkJCQkgICAgIGN0eC0+YnVmZmVyX29mZnNldCwgbGVuZ3RoKTsKKwlwZWRfZXhjZXB0aW9uX2xlYXZlX2FsbCAoKTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gMTsKKworCXBlZF9leGNlcHRpb25fY2F0Y2ggKCk7CisKKy8qIHNvbWV0aGluZyBiYWQgaGFwcGVuZWQsIHNvIHJlYWQgZnJhZ21lbnRzIG9uZSBieSBvbmUuICAoVGhlIGVycm9yIG1heQorICAgaGF2ZSBvY2N1cnJlZCBvbiBhbiB1bnVzZWQgZnJhZ21lbnQ6IHdobyBjYXJlcykgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKwkJaWYgKGN0eC0+YnVmZmVyX21hcCBbaV0pIHsKKwkJCWlmICghZmF0X3JlYWRfZnJhZ21lbnQgKGN0eC0+b2xkX2ZzLAorCQkJICAgICAgZnNfaW5mby0+YnVmZmVyICsgaSAqIGZzX2luZm8tPmZyYWdfc2l6ZSwKKwkJCSAgICAgIGN0eC0+YnVmZmVyX29mZnNldCArIGkpKQorCQkJCXJldHVybiAwOworCQl9CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2ZldGNoX2ZyYWdtZW50cyAoRmF0T3BDb250ZXh0KiBjdHgpCit7CisJRmF0U3BlY2lmaWMqCW9sZF9mc19pbmZvID0gRkFUX1NQRUNJRklDIChjdHgtPm9sZF9mcyk7CisJRmF0RnJhZ21lbnQJZmV0Y2hfbGVuZ3RoID0gMDsKKwlGYXRGcmFnbWVudAlmcmFnOworCisJZm9yIChmcmFnID0gMDsgZnJhZyA8IGN0eC0+YnVmZmVyX2ZyYWdzOyBmcmFnKyspCisJCWN0eC0+YnVmZmVyX21hcCBbZnJhZ10gPSAtMTsKKworCWZvciAoZnJhZyA9IDA7CisJICAgICBmcmFnIDwgY3R4LT5idWZmZXJfZnJhZ3MKKwkJJiYgY3R4LT5idWZmZXJfb2Zmc2V0ICsgZnJhZyA8IG9sZF9mc19pbmZvLT5mcmFnX2NvdW50OworCSAgICAgZnJhZysrKSB7CisJCWlmIChuZWVkc19kdXBsaWNhdGluZyAoY3R4LCBjdHgtPmJ1ZmZlcl9vZmZzZXQgKyBmcmFnKSkgeworCQkJY3R4LT5idWZmZXJfbWFwIFtmcmFnXSA9IDE7CisJCQlmZXRjaF9sZW5ndGggPSBmcmFnICsgMTsKKwkJfQorCX0KKworCWlmICghcmVhZF9tYXJrZWRfZnJhZ21lbnRzIChjdHgsIGZldGNoX2xlbmd0aCkpCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogaGVyZSBzdGFydHMgdGhlIHdyaXRlIGNvZGUuICBBbGwgYXNzdW1lcyB0aGF0IGN0eC0+YnVmZmVyX21hcCBbZmlyc3RdIGFuZAorICogY3R4LT5idWZmZXJfbWFwIFtsYXN0XSBhcmUgb2NjdXBpZWQgYnkgZnJhZ21lbnRzIHRoYXQgbmVlZCB0byBiZSBkdXBsaWNhdGVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBmaW5kcyB0aGUgZmlyc3QgZnJhZ21lbnQgdGhhdCBpcyBub3QgZ29pbmcgdG8gZ2V0IG92ZXJ3cml0dGVuICh0aGF0IG5lZWRzIHRvCisgICBnZXQgcmVhZCBpbikgKi8KK3N0YXRpYyBGYXRGcmFnbWVudAorZ2V0X2ZpcnN0X3VuZGVybGF5IChjb25zdCBGYXRPcENvbnRleHQqIGN0eCwgaW50IGZpcnN0LCBpbnQgbGFzdCkKK3sKKwlpbnQJCW9sZDsKKwlGYXRGcmFnbWVudAluZXc7CisKKwlQRURfQVNTRVJUIChmaXJzdCA8PSBsYXN0LCByZXR1cm4gMCk7CisKKwluZXcgPSBjdHgtPmJ1ZmZlcl9tYXAgW2ZpcnN0XTsKKwlmb3IgKG9sZCA9IGZpcnN0ICsgMTsgb2xkIDw9IGxhc3Q7IG9sZCsrKSB7CisJCWlmIChjdHgtPmJ1ZmZlcl9tYXAgW29sZF0gPT0gLTEpCisJCQljb250aW51ZTsKKwkJbmV3Kys7CisJCWlmIChjdHgtPmJ1ZmZlcl9tYXAgW29sZF0gIT0gbmV3KQorCQkJcmV0dXJuIG5ldzsKKwl9CisJcmV0dXJuIC0xOworfQorCisvKiBmaW5kcyB0aGUgbGFzdCBmcmFnbWVudCB0aGF0IGlzIG5vdCBnb2luZyB0byBnZXQgb3ZlcndyaXR0ZW4gKHRoYXQgbmVlZHMgdG8KKyAgIGdldCByZWFkIGluKSAqLworc3RhdGljIEZhdEZyYWdtZW50CitnZXRfbGFzdF91bmRlcmxheSAoY29uc3QgRmF0T3BDb250ZXh0KiBjdHgsIGludCBmaXJzdCwgaW50IGxhc3QpCit7CisJaW50CQlvbGQ7CisJRmF0RnJhZ21lbnQJbmV3OworCisJUEVEX0FTU0VSVCAoZmlyc3QgPD0gbGFzdCwgcmV0dXJuIDApOworCisJbmV3ID0gY3R4LT5idWZmZXJfbWFwIFtsYXN0XTsKKwlmb3IgKG9sZCA9IGxhc3QgLSAxOyBvbGQgPj0gZmlyc3Q7IG9sZC0tKSB7CisJCWlmIChjdHgtPmJ1ZmZlcl9tYXAgW29sZF0gPT0gLTEpCisJCQljb250aW51ZTsKKwkJbmV3LS07CisJCWlmIChjdHgtPmJ1ZmZlcl9tYXAgW29sZF0gIT0gbmV3KQorCQkJcmV0dXJuIG5ldzsKKwl9CisJcmV0dXJuIC0xOworfQorCisvKiAidW5kZXJsYXkiIHJlZmVycyB0byB0aGUgInN0YXRpYyIgZnJhZ21lbnRzLCB0aGF0IHJlbWFpbiB1bmNoYW5nZWQuCisgKiB3aGVuIHdyaXRpbmcgbGFyZ2UgY2h1bmtzIGF0IGEgdGltZSwgd2UgZG9uJ3Qgd2FudCB0byBjbG9iYmVyIHRoZXNlLAorICogc28gd2UgcmVhZCB0aGVtIGluLCBhbmQgd3JpdGUgdGhlbSBiYWNrIGFnYWluLiAgTVVDSCBxdWlja2VyIHRoYXQgd2F5LgorICovCitzdGF0aWMgaW50CitxdWlja19ncm91cF93cml0ZV9yZWFkX3VuZGVybGF5IChGYXRPcENvbnRleHQqIGN0eCwgaW50IGZpcnN0LCBpbnQgbGFzdCkKK3sKKwlGYXRTcGVjaWZpYyoJbmV3X2ZzX2luZm8gPSBGQVRfU1BFQ0lGSUMgKGN0eC0+bmV3X2ZzKTsKKwlGYXRGcmFnbWVudAlmaXJzdF91bmRlcmxheTsKKwlGYXRGcmFnbWVudAlsYXN0X3VuZGVybGF5OworCUZhdEZyYWdtZW50CXVuZGVybGF5X2xlbmd0aDsKKworCVBFRF9BU1NFUlQgKGZpcnN0IDw9IGxhc3QsIHJldHVybiAwKTsKKworCWZpcnN0X3VuZGVybGF5ID0gZ2V0X2ZpcnN0X3VuZGVybGF5IChjdHgsIGZpcnN0LCBsYXN0KTsKKwlpZiAoZmlyc3RfdW5kZXJsYXkgPT0gLTEpCisJCXJldHVybiAxOworCWxhc3RfdW5kZXJsYXkgPSBnZXRfbGFzdF91bmRlcmxheSAoY3R4LCBmaXJzdCwgbGFzdCk7CisKKwlQRURfQVNTRVJUIChmaXJzdF91bmRlcmxheSA8PSBsYXN0X3VuZGVybGF5LCByZXR1cm4gMCk7CisKKwl1bmRlcmxheV9sZW5ndGggPSBsYXN0X3VuZGVybGF5IC0gZmlyc3RfdW5kZXJsYXkgKyAxOworCWlmICghZmF0X3JlYWRfZnJhZ21lbnRzIChjdHgtPm5ld19mcywKKwkJCQluZXdfZnNfaW5mby0+YnVmZmVyIAorCQkJCSAgICsgKGZpcnN0X3VuZGVybGF5IC0gY3R4LT5idWZmZXJfbWFwIFtmaXJzdF0pCisJCQkJCSogbmV3X2ZzX2luZm8tPmZyYWdfc2l6ZSwKKwkJCQlmaXJzdF91bmRlcmxheSwKKwkJCQl1bmRlcmxheV9sZW5ndGgpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworLyogcXVpY2tfZ3JvdXBfd3JpdGUoKSBtYWtlcyBubyBhdHRlbXB0IHRvIHJlY292ZXIgZnJvbSBlcnJvcnMgLSBqdXN0CisgKiBkb2VzIHRoaW5ncyBmYXN0LiAgSWYgdGhlcmUgaXMgYW4gZXJyb3IsIHNsb3dfZ3JvdXBfd3JpdGUoKSBpcworICogY2FsbGVkLgorICogICAgTm90ZTogd2UgZG8gc3luY2luZyB3cml0ZXMsIHRvIG1ha2Ugc3VyZSB0aGVyZSBpc24ndCBhbnkKKyAqIGVycm9yIHdyaXRpbmcgb3V0LiAgSXQncyByYXRoZXIgZGlmZmljdWx0IHJlY292ZXJpbmcgZnJvbSBlcnJvcnMKKyAqIGZ1cnRoZXIgb24uCisgKi8KK3N0YXRpYyBpbnQKK3F1aWNrX2dyb3VwX3dyaXRlIChGYXRPcENvbnRleHQqIGN0eCwgaW50IGZpcnN0LCBpbnQgbGFzdCkKK3sKKwlGYXRTcGVjaWZpYyoJCW9sZF9mc19pbmZvID0gRkFUX1NQRUNJRklDIChjdHgtPm9sZF9mcyk7CisJRmF0U3BlY2lmaWMqCQluZXdfZnNfaW5mbyA9IEZBVF9TUEVDSUZJQyAoY3R4LT5uZXdfZnMpOworCWludAkJCWFjdGl2ZV9sZW5ndGg7CisJaW50CQkJaTsKKwlpbnQJCQlvZmZzZXQ7CisKKwlQRURfQVNTRVJUIChmaXJzdCA8PSBsYXN0LCByZXR1cm4gMCk7CisKKwlwZWRfZXhjZXB0aW9uX2ZldGNoX2FsbCAoKTsKKwlpZiAoIXF1aWNrX2dyb3VwX3dyaXRlX3JlYWRfdW5kZXJsYXkgKGN0eCwgZmlyc3QsIGxhc3QpKQorCQlnb3RvIGVycm9yOworCisJZm9yIChpID0gZmlyc3Q7IGkgPD0gbGFzdDsgaSsrKSB7CisJCWlmIChjdHgtPmJ1ZmZlcl9tYXAgW2ldID09IC0xKQorCQkJY29udGludWU7CisKKwkJb2Zmc2V0ID0gY3R4LT5idWZmZXJfbWFwIFtpXSAtIGN0eC0+YnVmZmVyX21hcCBbZmlyc3RdOworCQltZW1jcHkgKG5ld19mc19pbmZvLT5idWZmZXIgKyBvZmZzZXQgKiBuZXdfZnNfaW5mby0+ZnJhZ19zaXplLAorCQkJb2xkX2ZzX2luZm8tPmJ1ZmZlciArIGkgKiBuZXdfZnNfaW5mby0+ZnJhZ19zaXplLAorCQkJbmV3X2ZzX2luZm8tPmZyYWdfc2l6ZSk7CisJfQorCisJYWN0aXZlX2xlbmd0aCA9IGN0eC0+YnVmZmVyX21hcCBbbGFzdF0gLSBjdHgtPmJ1ZmZlcl9tYXAgW2ZpcnN0XSArIDE7CisJaWYgKCFmYXRfd3JpdGVfc3luY19mcmFnbWVudHMgKGN0eC0+bmV3X2ZzLCBuZXdfZnNfaW5mby0+YnVmZmVyLAorCQkJCSAgICAgICBjdHgtPmJ1ZmZlcl9tYXAgW2ZpcnN0XSwgYWN0aXZlX2xlbmd0aCkpCisJCWdvdG8gZXJyb3I7CisKKwlwZWRfZXhjZXB0aW9uX2xlYXZlX2FsbCAoKTsKKwlyZXR1cm4gMTsKKworZXJyb3I6CisJcGVkX2V4Y2VwdGlvbl9jYXRjaCAoKTsKKwlwZWRfZXhjZXB0aW9uX2xlYXZlX2FsbCAoKTsKKwlyZXR1cm4gMDsKK30KKworLyogV3JpdGVzIGZyYWdtZW50cyBvdXQsIG9uZSBhdCBhIHRpbWUsIGF2b2lkaW5nIGVycm9ycyBvbiByZWR1bmRhbnQgd3JpdGVzCisgKiBvbiBkYW1hZ2VkIHBhcnRzIG9mIHRoZSBkaXNrIHdlIGFscmVhZHkga25vdyBhYm91dC4gIElmIHRoZXJlJ3MgYW4gZXJyb3IKKyAqIG9uIG9uZSBvZiB0aGUgcmVxdWlyZWQgZnJhZ21lbnRzLCBpdCBnZXRzIG1hcmtlZCBhcyBiYWQsIGFuZCBhIHJlcGxhY2VtZW50CisgKiBpcyBmb3VuZC4KKyAqLworc3RhdGljIGludAorc2xvd19ncm91cF93cml0ZSAoRmF0T3BDb250ZXh0KiBjdHgsIGludCBmaXJzdCwgaW50IGxhc3QpCit7CisJRmF0U3BlY2lmaWMqCQlvbGRfZnNfaW5mbyA9IEZBVF9TUEVDSUZJQyAoY3R4LT5vbGRfZnMpOworCUZhdFNwZWNpZmljKgkJbmV3X2ZzX2luZm8gPSBGQVRfU1BFQ0lGSUMgKGN0eC0+bmV3X2ZzKTsKKwlpbnQJCQlpOworCisJUEVEX0FTU0VSVCAoZmlyc3QgPD0gbGFzdCwgcmV0dXJuIDApOworCisJZm9yIChpID0gZmlyc3Q7IGkgPD0gbGFzdDsgaSsrKSB7CisJCWlmIChjdHgtPmJ1ZmZlcl9tYXAgW2ldID09IC0xKQorCQkJY29udGludWU7CisKKwkJd2hpbGUgKCFmYXRfd3JpdGVfc3luY19mcmFnbWVudCAoY3R4LT5uZXdfZnMsCisJCQkgICAgICBvbGRfZnNfaW5mby0+YnVmZmVyICsgaSAqIG9sZF9mc19pbmZvLT5mcmFnX3NpemUsCisJCQkgICAgICBjdHgtPmJ1ZmZlcl9tYXAgW2ldKSkgeworCQkJZmF0X3RhYmxlX3NldF9iYWQgKG5ld19mc19pbmZvLT5mYXQsCisJCQkJCSAgIGN0eC0+YnVmZmVyX21hcCBbaV0pOworCQkJY3R4LT5idWZmZXJfbWFwIFtpXSA9IGZhdF90YWJsZV9hbGxvY19jbHVzdGVyCisJCQkJCQkobmV3X2ZzX2luZm8tPmZhdCk7CisJCQlpZiAoY3R4LT5idWZmZXJfbWFwIFtpXSA9PSAwKQorCQkJCXJldHVybiAwOworCQl9CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgaW50Cit1cGRhdGVfcmVtYXAgKEZhdE9wQ29udGV4dCogY3R4LCBpbnQgZmlyc3QsIGludCBsYXN0KQoreworCWludAkJaTsKKworCVBFRF9BU1NFUlQgKGZpcnN0IDw9IGxhc3QsIHJldHVybiAwKTsKKworCWZvciAoaSA9IGZpcnN0OyBpIDw9IGxhc3Q7IGkrKykgeworCQlpZiAoY3R4LT5idWZmZXJfbWFwIFtpXSA9PSAtMSkKKwkJCWNvbnRpbnVlOworCQljdHgtPnJlbWFwIFtjdHgtPmJ1ZmZlcl9vZmZzZXQgKyBpXSA9IGN0eC0+YnVmZmVyX21hcCBbaV07CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2dyb3VwX3dyaXRlIChGYXRPcENvbnRleHQqIGN0eCwgaW50IGZpcnN0LCBpbnQgbGFzdCkKK3sKKwlQRURfQVNTRVJUIChmaXJzdCA8PSBsYXN0LCByZXR1cm4gMCk7CisKKwlpZiAoIXF1aWNrX2dyb3VwX3dyaXRlIChjdHgsIGZpcnN0LCBsYXN0KSkgeworCQlpZiAoIXNsb3dfZ3JvdXBfd3JpdGUgKGN0eCwgZmlyc3QsIGxhc3QpKQorCQkJcmV0dXJuIDA7CisJfQorCWlmICghdXBkYXRlX3JlbWFwIChjdHgsIGZpcnN0LCBsYXN0KSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKKy8qIGFzc3VtZXMgZnJhZ21lbnQgc2l6ZSBhbmQgbmV3X2ZzJ3MgY2x1c3RlciBzaXplIGFyZSBlcXVhbCAqLworc3RhdGljIGludAord3JpdGVfZnJhZ21lbnRzIChGYXRPcENvbnRleHQqIGN0eCkKK3sKKwlGYXRTcGVjaWZpYyoJCW9sZF9mc19pbmZvID0gRkFUX1NQRUNJRklDIChjdHgtPm9sZF9mcyk7CisJRmF0U3BlY2lmaWMqCQluZXdfZnNfaW5mbyA9IEZBVF9TUEVDSUZJQyAoY3R4LT5uZXdfZnMpOworCWludAkJCWdyb3VwX3N0YXJ0OworCWludAkJCWdyb3VwX2VuZCA9IC0xOwkvKiBzaHV0IGdjYyB1cCEgKi8KKwlGYXRGcmFnbWVudAkJbWFwcGVkX2xlbmd0aDsKKwlGYXRGcmFnbWVudAkJaTsKKwlGYXRDbHVzdGVyCQluZXdfY2x1c3RlcjsKKworCVBFRF9BU1NFUlQgKGN0eC0+YnVmZmVyX29mZnNldCA8IG9sZF9mc19pbmZvLT5mcmFnX2NvdW50LCByZXR1cm4gMCk7CisKKwlncm91cF9zdGFydCA9IC0xOworCWZvciAoaSA9IDA7IGkgPCBjdHgtPmJ1ZmZlcl9mcmFnczsgaSsrKSB7CisJCWlmIChjdHgtPmJ1ZmZlcl9tYXAgW2ldID09IC0xKQorCQkJY29udGludWU7CisKKwkJY3R4LT5mcmFnc19kdXBlZCsrOworCisJCW5ld19jbHVzdGVyID0gZmF0X3RhYmxlX2FsbG9jX2NsdXN0ZXIgKG5ld19mc19pbmZvLT5mYXQpOworCQlpZiAoIW5ld19jbHVzdGVyKQorCQkJcmV0dXJuIDA7CisJCWZhdF90YWJsZV9zZXRfZW9mIChuZXdfZnNfaW5mby0+ZmF0LCBuZXdfY2x1c3Rlcik7CisJCWN0eC0+YnVmZmVyX21hcCBbaV0gPSBmYXRfY2x1c3Rlcl90b19mcmFnIChjdHgtPm5ld19mcywKKwkJCQkJCQkgICBuZXdfY2x1c3Rlcik7CisKKwkJaWYgKGdyb3VwX3N0YXJ0ID09IC0xKQorCQkJZ3JvdXBfc3RhcnQgPSBncm91cF9lbmQgPSBpOworCisJCVBFRF9BU1NFUlQgKGN0eC0+YnVmZmVyX21hcCBbaV0KKwkJCQk+PSBjdHgtPmJ1ZmZlcl9tYXAgW2dyb3VwX3N0YXJ0XSwKKwkJCSAgICByZXR1cm4gMCk7CisKKwkJbWFwcGVkX2xlbmd0aCA9IGN0eC0+YnVmZmVyX21hcCBbaV0KKwkJCQktIGN0eC0+YnVmZmVyX21hcCBbZ3JvdXBfc3RhcnRdICsgMTsKKwkJaWYgKG1hcHBlZF9sZW5ndGggPD0gY3R4LT5idWZmZXJfZnJhZ3MpIHsKKwkJCWdyb3VwX2VuZCA9IGk7CisJCX0gZWxzZSB7CisJCQkvKiByYW4gb3V0IG9mIHJvb20gaW4gdGhlIGJ1ZmZlciwgc28gd3JpdGUgdGhpcyBncm91cCwKKwkJCSAqIGFuZCBzdGFydCBhIG5ldyBvbmUuLi4KKwkJCSAqLworCQkJaWYgKCFncm91cF93cml0ZSAoY3R4LCBncm91cF9zdGFydCwgZ3JvdXBfZW5kKSkKKwkJCQlyZXR1cm4gMDsKKwkJCWdyb3VwX3N0YXJ0ID0gZ3JvdXBfZW5kID0gaTsKKwkJfQorCX0KKworCVBFRF9BU1NFUlQgKGdyb3VwX3N0YXJ0ICE9IC0xLCByZXR1cm4gMCk7CisKKwlpZiAoIWdyb3VwX3dyaXRlIChjdHgsIGdyb3VwX3N0YXJ0LCBncm91cF9lbmQpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworLyogIGRlZmF1bHQgYWxsIGZyYWdtZW50cyB0byB1bm1vdmVkCisgKi8KK3N0YXRpYyB2b2lkCitpbml0X3JlbWFwIChGYXRPcENvbnRleHQqIGN0eCkKK3sKKwlGYXRTcGVjaWZpYyoJCW9sZF9mc19pbmZvID0gRkFUX1NQRUNJRklDIChjdHgtPm9sZF9mcyk7CisJRmF0RnJhZ21lbnQJCWk7CisKKwlmb3IgKGkgPSAwOyBpIDwgb2xkX2ZzX2luZm8tPmZyYWdfY291bnQ7IGkrKykKKwkJY3R4LT5yZW1hcFtpXSA9IGZhdF9vcF9jb250ZXh0X21hcF9zdGF0aWNfZnJhZ21lbnQgKGN0eCwgaSk7Cit9CisKK3N0YXRpYyBGYXRGcmFnbWVudAorY291bnRfZnJhZ3NfdG9fZHVwIChGYXRPcENvbnRleHQqIGN0eCkKK3sKKwlGYXRTcGVjaWZpYyoJZnNfaW5mbyA9IEZBVF9TUEVDSUZJQyAoY3R4LT5vbGRfZnMpOworCUZhdEZyYWdtZW50CWk7CisJRmF0RnJhZ21lbnQJdG90YWw7CisKKwl0b3RhbCA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgZnNfaW5mby0+ZnJhZ19jb3VudDsgaSsrKSB7CisJCWlmIChuZWVkc19kdXBsaWNhdGluZyAoY3R4LCBpKSkKKwkJCXRvdGFsKys7CisJfQorCisJcmV0dXJuIHRvdGFsOworfQorCisvKiAgZHVwbGljYXRlcyB1bnJlYWNoYWJsZSBmaWxlIGNsdXN0ZXJzLCBhbmQgYWxsIGRpcmVjdG9yeSBjbHVzdGVycworICovCitpbnQKK2ZhdF9kdXBsaWNhdGVfY2x1c3RlcnMgKEZhdE9wQ29udGV4dCogY3R4LCBQZWRUaW1lciogdGltZXIpCit7CisJRmF0RnJhZ21lbnQJdG90YWxfZnJhZ3NfdG9fZHVwOworCisJaW5pdF9yZW1hcCAoY3R4KTsKKwl0b3RhbF9mcmFnc190b19kdXAgPSBjb3VudF9mcmFnc190b19kdXAgKGN0eCk7CisKKwlwZWRfdGltZXJfcmVzZXQgKHRpbWVyKTsKKwlwZWRfdGltZXJfc2V0X3N0YXRlX25hbWUgKHRpbWVyLCAibW92aW5nIGRhdGEiKTsKKworCWN0eC0+YnVmZmVyX29mZnNldCA9IDA7CisJY3R4LT5mcmFnc19kdXBlZCA9IDA7CisJd2hpbGUgKHNlYXJjaF9uZXh0X2ZyYWdtZW50IChjdHgpKSB7CisJCXBlZF90aW1lcl91cGRhdGUgKAorCQkJdGltZXIsIDEuMCAqIGN0eC0+ZnJhZ3NfZHVwZWQgLyB0b3RhbF9mcmFnc190b19kdXApOworCisJCWlmICghZmV0Y2hfZnJhZ21lbnRzIChjdHgpKQorCQkJcmV0dXJuIDA7CisJCWlmICghd3JpdGVfZnJhZ21lbnRzIChjdHgpKQorCQkJcmV0dXJuIDA7CisJCWN0eC0+YnVmZmVyX29mZnNldCArPSBjdHgtPmJ1ZmZlcl9mcmFnczsKKwl9CisKKwlwZWRfdGltZXJfdXBkYXRlICh0aW1lciwgMS4wKTsKKwlyZXR1cm4gMTsKK30KKworI2VuZGlmIC8qICFESVNDT1ZFUl9PTkxZICovCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2ZhdC9jbHN0ZHVwLmggYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2ZhdC9jbHN0ZHVwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk5YTJkMwotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvZmF0L2Nsc3RkdXAuaApAQCAtMCwwICsxLDI5IEBACisvKgorICAgIGxpYnBhcnRlZAorICAgIENvcHlyaWdodCAoQykgMTk5OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKKyovCisKKyNpZm5kZWYgUEVEX0ZBVF9DTFNURFVQX0hfSU5DTFVERUQKKyNkZWZpbmUgUEVEX0ZBVF9DTFNURFVQX0hfSU5DTFVERUQKKworI2luY2x1ZGUgImNvbnRleHQuaCIKKworLyogdGhlIGJpZyBpbXBvcnRhbnQgb25lIDotKSAqLworZXh0ZXJuIGludCBmYXRfZHVwbGljYXRlX2NsdXN0ZXJzIChGYXRPcENvbnRleHQqIGN0eCwgUGVkVGltZXIqIHRpbWVyKTsKKworI2VuZGlmIC8qIFBFRF9GQVRfQ0xTVERVUF9IX0lOQ0xVREVEICovCisKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvZmF0L2NvbnRleHQuYyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvZmF0L2NvbnRleHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjBkZjE2Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9mYXQvY29udGV4dC5jCkBAIC0wLDAgKzEsMjYxIEBACisvKgorICAgIGxpYnBhcnRlZAorICAgIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMCwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKKyovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImZhdC5oIgorCisjaWZuZGVmIERJU0NPVkVSX09OTFkKKworLyogTm90ZTogdGhpcyBkZWFscyB3aXRoIGZpbGUgc3lzdGVtIHN0YXJ0IGFuZCBlbmQgc2VjdG9ycywgZXZlbiBpZiB0aGUgcGh5c2ljYWwKKyAqIGRldmljZXMgYXJlIGRpZmZlcmVudCAoZWcgZm9yIGZhdF9jb3B5KCkpICBQZXJoYXBzIHRoaXMgaXMgYSBoYWNrLCBidXQgaXQKKyAqIHdvcmtzIDstKQorICovCitzdGF0aWMgaW50CitjYWxjX2RlbHRhcyAoRmF0T3BDb250ZXh0KiBjdHgpCit7CisJUGVkRmlsZVN5c3RlbSoJb2xkX2ZzID0gY3R4LT5vbGRfZnM7CisJUGVkRmlsZVN5c3RlbSoJbmV3X2ZzID0gY3R4LT5uZXdfZnM7CisJRmF0U3BlY2lmaWMqCW9sZF9mc19pbmZvID0gRkFUX1NQRUNJRklDIChvbGRfZnMpOworCUZhdFNwZWNpZmljKgluZXdfZnNfaW5mbyA9IEZBVF9TUEVDSUZJQyAobmV3X2ZzKTsKKwlQZWRTZWN0b3IJb2xkX2NsdXN0ZXJfb2ZzOworCVBlZFNlY3RvcgluZXdfY2x1c3Rlcl9vZnM7CisJUGVkU2VjdG9yCXNlY3Rvcl9kZWx0YTsKKworCW9sZF9jbHVzdGVyX29mcyA9IG9sZF9mcy0+Z2VvbS0+c3RhcnQgKyBvbGRfZnNfaW5mby0+Y2x1c3Rlcl9vZmZzZXQ7CisJbmV3X2NsdXN0ZXJfb2ZzID0gbmV3X2ZzLT5nZW9tLT5zdGFydCArIG5ld19mc19pbmZvLT5jbHVzdGVyX29mZnNldDsKKworCWlmIChuZXdfY2x1c3Rlcl9vZnMgPiBvbGRfY2x1c3Rlcl9vZnMpIHsKKwkJY3R4LT5zdGFydF9tb3ZlX2RpciA9IEZBVF9ESVJfRk9SV0FSRDsKKwkJc2VjdG9yX2RlbHRhID0gbmV3X2NsdXN0ZXJfb2ZzIC0gb2xkX2NsdXN0ZXJfb2ZzOworCX0gZWxzZSB7CisJCWN0eC0+c3RhcnRfbW92ZV9kaXIgPSBGQVRfRElSX0JBQ0tXQVJEOworCQlzZWN0b3JfZGVsdGEgPSBvbGRfY2x1c3Rlcl9vZnMgLSBuZXdfY2x1c3Rlcl9vZnM7CisJfQorCisJaWYgKHNlY3Rvcl9kZWx0YSAlIG5ld19mc19pbmZvLT5jbHVzdGVyX3NlY3RvcnMpIHsKKwkJcGVkX2V4Y2VwdGlvbl90aHJvdyAoCisJCQlQRURfRVhDRVBUSU9OX0JVRywgUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQlfKCJDbHVzdGVyIHN0YXJ0IGRlbHRhID0gJWQsIHdoaWNoIGlzIG5vdCBhIG11bHRpcGxlICIKKwkJCSAgIm9mIHRoZSBjbHVzdGVyIHNpemUgJWQuIiksCisJCQkoaW50KSBzZWN0b3JfZGVsdGEsCisJCQkoaW50KSBuZXdfZnNfaW5mby0+Y2x1c3Rlcl9zZWN0b3JzKTsKKwkJcmV0dXJuIDA7CisJfQorCQorCWN0eC0+c3RhcnRfbW92ZV9kZWx0YSA9IHNlY3Rvcl9kZWx0YSAvIGN0eC0+ZnJhZ19zZWN0b3JzOworCisjaWZkZWYgUEVEX1ZFUkJPU0UKKwlwcmludGYgKCJTdGFydCBtb3ZlIGRlbHRhIGlzOiAlZCAlcy5cbiIsCisJCShpbnQpIGN0eC0+c3RhcnRfbW92ZV9kZWx0YSwKKwkJKGN0eC0+c3RhcnRfbW92ZV9kaXIgPT0gRkFUX0RJUl9GT1JXQVJEKT8KKwkJCSJmb3J3YXJkcyIgOiAiYmFja3dhcmRzIik7CisjZW5kaWYKKworCXJldHVybiAxOworfQorCitGYXRPcENvbnRleHQqCitmYXRfb3BfY29udGV4dF9uZXcgKFBlZEZpbGVTeXN0ZW0qIG5ld19mcywgUGVkRmlsZVN5c3RlbSogb2xkX2ZzKQoreworCUZhdFNwZWNpZmljKglvbGRfZnNfaW5mbyA9IEZBVF9TUEVDSUZJQyAob2xkX2ZzKTsKKwlGYXRTcGVjaWZpYyoJbmV3X2ZzX2luZm8gPSBGQVRfU1BFQ0lGSUMgKG5ld19mcyk7CisJRmF0T3BDb250ZXh0KgljdHg7CisKKwljdHggPSAoRmF0T3BDb250ZXh0KikgcGVkX21hbGxvYyAoc2l6ZW9mIChGYXRPcENvbnRleHQpKTsKKwlpZiAoIWN0eCkKKwkJZ290byBlcnJvcjsKKworCWN0eC0+ZnJhZ19zZWN0b3JzID0gUEVEX01JTiAob2xkX2ZzX2luZm8tPmNsdXN0ZXJfc2VjdG9ycywKKwkJCQkgICAgIG5ld19mc19pbmZvLT5jbHVzdGVyX3NlY3RvcnMpOworCWlmICghZmF0X3NldF9mcmFnX3NlY3RvcnMgKG5ld19mcywgY3R4LT5mcmFnX3NlY3RvcnMpKQorCQlnb3RvIGVycm9yOworCWlmICghZmF0X3NldF9mcmFnX3NlY3RvcnMgKG9sZF9mcywgY3R4LT5mcmFnX3NlY3RvcnMpKQorCQlnb3RvIGVycm9yOworCisJY3R4LT5idWZmZXJfZnJhZ3MgPSBvbGRfZnNfaW5mby0+YnVmZmVyX3NlY3RvcnMgLyBjdHgtPmZyYWdfc2VjdG9yczsKKwljdHgtPmJ1ZmZlcl9tYXAgPSAoRmF0RnJhZ21lbnQqKSBwZWRfbWFsbG9jIChzaXplb2YgKEZhdEZyYWdtZW50KQorCQkJCQkJICAgICAqIGN0eC0+YnVmZmVyX2ZyYWdzKTsKKwlpZiAoIWN0eC0+YnVmZmVyX21hcCkKKwkJZ290byBlcnJvcl9mcmVlX2N0eDsKKworCWN0eC0+cmVtYXAgPSAoRmF0RnJhZ21lbnQqKSBwZWRfbWFsbG9jIChzaXplb2YgKEZhdEZyYWdtZW50KQorCQkJCQkJICAgKiBvbGRfZnNfaW5mby0+ZnJhZ19jb3VudCk7CisJaWYgKCFjdHgtPnJlbWFwKQorCQlnb3RvIGVycm9yX2ZyZWVfYnVmZmVyX21hcDsKKworCWN0eC0+bmV3X2ZzID0gbmV3X2ZzOworCWN0eC0+b2xkX2ZzID0gb2xkX2ZzOworCWlmICghY2FsY19kZWx0YXMgKGN0eCkpCisJCWdvdG8gZXJyb3JfZnJlZV9idWZmZXJfbWFwOworCisJcmV0dXJuIGN0eDsKKworZXJyb3JfZnJlZV9idWZmZXJfbWFwOgorCXBlZF9mcmVlIChjdHgtPmJ1ZmZlcl9tYXApOworZXJyb3JfZnJlZV9jdHg6CisJcGVkX2ZyZWUgKGN0eCk7CitlcnJvcjoKKwlyZXR1cm4gTlVMTDsKK30KKwordm9pZAorZmF0X29wX2NvbnRleHRfZGVzdHJveSAoRmF0T3BDb250ZXh0KiBjdHgpCit7CisJcGVkX2ZyZWUgKGN0eC0+YnVmZmVyX21hcCk7CisJcGVkX2ZyZWUgKGN0eC0+cmVtYXApOworCXBlZF9mcmVlIChjdHgpOworfQorCitGYXRGcmFnbWVudAorZmF0X29wX2NvbnRleHRfbWFwX3N0YXRpY19mcmFnbWVudCAoY29uc3QgRmF0T3BDb250ZXh0KiBjdHgsIEZhdEZyYWdtZW50IGZyYWcpCit7CisJRmF0U3BlY2lmaWMqCW5ld19mc19pbmZvID0gRkFUX1NQRUNJRklDIChjdHgtPm5ld19mcyk7CisJRmF0RnJhZ21lbnQJcmVzdWx0OworCisJaWYgKGN0eC0+bmV3X2ZzLT5nZW9tLT5kZXYgIT0gY3R4LT5vbGRfZnMtPmdlb20tPmRldikKKwkJcmV0dXJuIC0xOworCisJaWYgKGN0eC0+c3RhcnRfbW92ZV9kaXIgPT0gRkFUX0RJUl9GT1JXQVJEKSB7CisJCWlmIChmcmFnIDwgY3R4LT5zdGFydF9tb3ZlX2RlbHRhKQorCQkJcmV0dXJuIC0xOworCQlyZXN1bHQgPSBmcmFnIC0gY3R4LT5zdGFydF9tb3ZlX2RlbHRhOworCX0gZWxzZSB7CisJCXJlc3VsdCA9IGZyYWcgKyBjdHgtPnN0YXJ0X21vdmVfZGVsdGE7CisJfQorCisJaWYgKHJlc3VsdCA+PSBuZXdfZnNfaW5mby0+ZnJhZ19jb3VudCkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworRmF0Q2x1c3RlcgorZmF0X29wX2NvbnRleHRfbWFwX3N0YXRpY19jbHVzdGVyIChjb25zdCBGYXRPcENvbnRleHQqIGN0eCwgRmF0Q2x1c3RlciBjbHN0KQoreworCUZhdEZyYWdtZW50CW1hcHBlZF9mcmFnOworCisJbWFwcGVkX2ZyYWcgPSBmYXRfb3BfY29udGV4dF9tYXBfc3RhdGljX2ZyYWdtZW50IChjdHgsCisJCQkJZmF0X2NsdXN0ZXJfdG9fZnJhZyAoY3R4LT5vbGRfZnMsIGNsc3QpKTsgCisJaWYgKG1hcHBlZF9mcmFnICE9IC0xKQorCQlyZXR1cm4gZmF0X2ZyYWdfdG9fY2x1c3RlciAoY3R4LT5uZXdfZnMsIG1hcHBlZF9mcmFnKTsKKwllbHNlCisJCXJldHVybiAwOworfQorCitGYXRGcmFnbWVudAorZmF0X29wX2NvbnRleHRfbWFwX2ZyYWdtZW50IChjb25zdCBGYXRPcENvbnRleHQqIGN0eCwgRmF0RnJhZ21lbnQgZnJhZykKK3sKKwlyZXR1cm4gY3R4LT5yZW1hcCBbZnJhZ107Cit9CisKK0ZhdENsdXN0ZXIKK2ZhdF9vcF9jb250ZXh0X21hcF9jbHVzdGVyIChjb25zdCBGYXRPcENvbnRleHQqIGN0eCwgRmF0Q2x1c3RlciBjbHN0KQoreworCUZhdEZyYWdtZW50CW1hcHBlZF9mcmFnOworCisJbWFwcGVkX2ZyYWcgPSBmYXRfb3BfY29udGV4dF9tYXBfZnJhZ21lbnQgKGN0eCwKKwkJCQlmYXRfY2x1c3Rlcl90b19mcmFnIChjdHgtPm9sZF9mcywgY2xzdCkpOyAKKwlpZiAobWFwcGVkX2ZyYWcgIT0gLTEpCisJCXJldHVybiBmYXRfZnJhZ190b19jbHVzdGVyIChjdHgtPm5ld19mcywgbWFwcGVkX2ZyYWcpOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgaW5pdGlhbCBmYXQgZm9yIHRoZSBuZXcgcmVzaXplZCBmaWxlIHN5c3RlbS4KKyAgIFRoaXMgaXMgaW4gKk5PIFdBWSogYSBwcm9wZXIgRkFUIHRhYmxlIC0gYWxsIGl0IGRvZXMgaXM6CisJYSkgbWFyayBiYWQgY2x1c3RlcnMgYXMgYmFkLgorCWIpIG1hcmsgdXNlZCBjbHVzdGVycyAodGhhdCBpcywgY2x1c3RlcnMgZnJvbSB0aGUgb3JpZ2luYWwgRlMgdGhhdCBhcmUKKwkgICByZWFjaGFibGUgZnJvbSB0aGUgcmVzaXplZCBvbmUpLiAgTWFya3MgYXMgRU9GIChpLmUuIHVzZWQsIGVuZCBvZgorCSAgIGZpbGUgY2hhaW4pLgorCWMpIG1hcmsgb3JpZ2luYWwgZmlsZSBzeXN0ZW0gbWV0YWRhdGEgYXMgRU9GIChpLmUuIHVzZWQpLCB0byBwcmV2ZW50CisJICAgaXQgZnJvbSBiZWluZyBjbG9iYmVyZWQuICBUaGlzIHdpbGwgbGVhdmUgdGhlIG9yaWdpbmFsIGZpbGUgc3lzdGVtCisJICAgaW50YWN0LCB1bnRpbCB0aGUgcGFydGl0aW9uIHRhYmxlIGlzIG1vZGlmaWVkLCBpZiB0aGUgc3RhcnQgb2YKKwkgICB0aGUgcGFydGl0aW9uIGlzIG1vdmVkLgorCisgICBUaGUgRkFUcyBhcmUgcmVidWlsdCAqcHJvcGVybHkqIGFmdGVyIGNsdXN0ZXIgcmVsb2NhdGlvbi4gIFRoaXMgaGVyZSBpcworICAgb25seSB0byBtYXJrIGNsdXN0ZXJzIGFzIHVzZWQsIHNvIHdoZW4gY2x1c3RlciByZWxvY2F0aW9uIG9jY3VycywgY2x1c3RlcnMKKyAgIGFyZW4ndCByZWxvY2F0ZWQgb24gdG9wIG9mIG9uZXMgbWFya2VkIGluIGEsIGIgb3IgYy4KKyovCitpbnQKK2ZhdF9vcF9jb250ZXh0X2NyZWF0ZV9pbml0aWFsX2ZhdCAoRmF0T3BDb250ZXh0KiBjdHgpCit7CisJRmF0U3BlY2lmaWMqCW9sZF9mc19pbmZvID0gRkFUX1NQRUNJRklDIChjdHgtPm9sZF9mcyk7CisJRmF0U3BlY2lmaWMqCW5ld19mc19pbmZvID0gRkFUX1NQRUNJRklDIChjdHgtPm5ld19mcyk7CisJRmF0Q2x1c3RlcgljbHN0OworCUZhdENsdXN0ZXIJbmV3X2Nsc3Q7CisJUGVkU2VjdG9yCXNlY3Q7CisJUGVkU2VjdG9yCW5ld19zZWN0OworCUZhdEZyYWdtZW50CWZyYWc7CisJRmF0RnJhZ21lbnQJbmV3X2ZyYWc7CisJRmF0Q2x1c3RlckZsYWcJZnJhZ19mbGFnOworCisJbmV3X2ZzX2luZm8tPmZhdCA9IGZhdF90YWJsZV9uZXcgKAorCQluZXdfZnNfaW5mby0+ZmF0X3R5cGUsCisJCW5ld19mc19pbmZvLT5mYXRfc2VjdG9ycyAqIDUxMgorCQkJLyBmYXRfdGFibGVfZW50cnlfc2l6ZSAobmV3X2ZzX2luZm8tPmZhdF90eXBlKSk7CisJaWYgKCFuZXdfZnNfaW5mby0+ZmF0KQorCQlyZXR1cm4gMDsKKworCWlmICghZmF0X3RhYmxlX3NldF9jbHVzdGVyX2NvdW50IChuZXdfZnNfaW5mby0+ZmF0LAorCQkJCQkgIG5ld19mc19pbmZvLT5jbHVzdGVyX2NvdW50KSkKKwkJcmV0dXJuIDA7CisKKy8qIG1hcmsgYmFkIGFuZCB1c2VkIGNsdXN0ZXJzICovCisJZm9yIChmcmFnID0gMDsgZnJhZyA8IG9sZF9mc19pbmZvLT5mcmFnX2NvdW50OyBmcmFnKyspIHsKKwkJZnJhZ19mbGFnID0gZmF0X2dldF9mcmFnbWVudF9mbGFnIChjdHgtPm9sZF9mcywgZnJhZyk7CisJCWlmIChmcmFnX2ZsYWcgPT0gRkFUX0ZMQUdfRlJFRSkKKwkJCWNvbnRpbnVlOworCisJCW5ld19mcmFnID0gZmF0X29wX2NvbnRleHRfbWFwX3N0YXRpY19mcmFnbWVudCAoY3R4LCBmcmFnKTsKKwkJaWYgKG5ld19mcmFnID09IC0xKQorCQkJY29udGludWU7CisKKwkJbmV3X2Nsc3QgPSBmYXRfZnJhZ190b19jbHVzdGVyIChjdHgtPm5ld19mcywgbmV3X2ZyYWcpOworCQlQRURfQVNTRVJUIChuZXdfY2xzdCAhPSAwLCByZXR1cm4gMCk7CisKKwkJaWYgKGZyYWdfZmxhZyA9PSBGQVRfRkxBR19CQUQpIHsKKwkJCWlmICghZmF0X3RhYmxlX3NldF9iYWQgKG5ld19mc19pbmZvLT5mYXQsIG5ld19jbHN0KSkKKwkJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIHsKKwkJCWlmICghZmF0X3RhYmxlX3NldF9lb2YgKG5ld19mc19pbmZvLT5mYXQsIG5ld19jbHN0KSkKKwkJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworLyogbWFyayBtZXRhZGF0YSByZWdpb25zIHRoYXQgbWFwIHRvIGNsdXN0ZXJzIG9uIHRoZSBuZXcgRlMgKi8KKwlmb3IgKHNlY3QgPSAwOyBzZWN0IDwgb2xkX2ZzX2luZm8tPmNsdXN0ZXJfb2Zmc2V0OyBzZWN0KyspIHsKKwkJbmV3X3NlY3QgPSBwZWRfZ2VvbWV0cnlfbWFwIChjdHgtPm5ld19mcy0+Z2VvbSwKKwkJCQkJICAgICBjdHgtPm9sZF9mcy0+Z2VvbSwgc2VjdCk7CisJCWlmIChuZXdfc2VjdCA9PSAtMQorCQkgICAgfHwgIWZhdF9pc19zZWN0b3JfaW5fY2x1c3RlcnMgKGN0eC0+bmV3X2ZzLCBuZXdfc2VjdCkpCisJCQljb250aW51ZTsKKworCQljbHN0ID0gZmF0X3NlY3Rvcl90b19jbHVzdGVyIChjdHgtPm5ld19mcywgbmV3X3NlY3QpOworCQlQRURfQVNTRVJUIChjbHN0ICE9IDAsIHJldHVybiAwKTsKKworCQlpZiAoIWZhdF90YWJsZV9zZXRfZW9mIChuZXdfZnNfaW5mby0+ZmF0LCBjbHN0KSkKKwkJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCisjZW5kaWYgLyogIURJU0NPVkVSX09OTFkgKi8KZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvZmF0L2NvbnRleHQuaCBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvZmF0L2NvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTUyYmNiCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9mYXQvY29udGV4dC5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgICAgbGlicGFydGVkCisgICAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQorKi8KKworI2lmbmRlZiBQRURfRkFUX0NPTlRFWFRfSF9JTkNMVURFRAorI2RlZmluZSBQRURfRkFUX0NPTlRFWFRfSF9JTkNMVURFRAorCisjaW5jbHVkZSAiY291bnQuaCIKKworZW51bSBfRmF0RGlyZWN0aW9uIHsKKwlGQVRfRElSX0ZPUldBUkQsCisJRkFUX0RJUl9CQUNLV0FSRAorfTsKK3R5cGVkZWYgZW51bSBfRmF0RGlyZWN0aW9uIEZhdERpcmVjdGlvbjsKKworc3RydWN0IF9GYXRPcENvbnRleHQgeworCVBlZEZpbGVTeXN0ZW0qCQlvbGRfZnM7CisJUGVkRmlsZVN5c3RlbSoJCW5ld19mczsKKworCVBlZFNlY3RvcgkJZnJhZ19zZWN0b3JzOwkvKiBzaG91bGQgZXF1YWwgb2xkX2ZzIGFuZAorCQkJCQkJICAgbmV3X2ZzJ3MgZnJhZ19zZWN0b3JzICovCisKKwlGYXREaXJlY3Rpb24JCXN0YXJ0X21vdmVfZGlyOworCUZhdEZyYWdtZW50CQlzdGFydF9tb3ZlX2RlbHRhOworCisJRmF0RnJhZ21lbnQJCWJ1ZmZlcl9vZmZzZXQ7CisJRmF0RnJhZ21lbnQJCWJ1ZmZlcl9mcmFnczsKKwlGYXRGcmFnbWVudCoJCWJ1ZmZlcl9tYXA7CisKKwlGYXRGcmFnbWVudAkJZnJhZ3NfZHVwZWQ7CisKKwlGYXRGcmFnbWVudCoJCXJlbWFwOworCisJRmF0Q2x1c3RlcgkJbmV3X3Jvb3RfZGlyIFszMl07Cit9OwordHlwZWRlZiBzdHJ1Y3QgX0ZhdE9wQ29udGV4dCBGYXRPcENvbnRleHQ7CisKK2V4dGVybiBGYXRPcENvbnRleHQqIGZhdF9vcF9jb250ZXh0X25ldyAoUGVkRmlsZVN5c3RlbSogbmV3X2ZzLAorCQkJCQkgUGVkRmlsZVN5c3RlbSogb2xkX2ZzKTsKKworZXh0ZXJuIHZvaWQgZmF0X29wX2NvbnRleHRfZGVzdHJveSAoRmF0T3BDb250ZXh0KiBjdHgpOworCitleHRlcm4gRmF0RnJhZ21lbnQgZmF0X29wX2NvbnRleHRfbWFwX3N0YXRpY19mcmFnbWVudCAoY29uc3QgRmF0T3BDb250ZXh0KiBjdHgsCisJCQkJCQkgICAgICAgRmF0RnJhZ21lbnQgZnJhZyk7CitleHRlcm4gRmF0Q2x1c3RlciBmYXRfb3BfY29udGV4dF9tYXBfc3RhdGljX2NsdXN0ZXIgKGNvbnN0IEZhdE9wQ29udGV4dCogY3R4LAorCQkJCQkJICAgICBGYXRDbHVzdGVyIGNsc3QpOworCitleHRlcm4gRmF0RnJhZ21lbnQgZmF0X29wX2NvbnRleHRfbWFwX2ZyYWdtZW50IChjb25zdCBGYXRPcENvbnRleHQqIGN0eCwKKwkJCQkJICAgICAgICBGYXRGcmFnbWVudCBmcmFnKTsKK2V4dGVybiBGYXRDbHVzdGVyIGZhdF9vcF9jb250ZXh0X21hcF9jbHVzdGVyIChjb25zdCBGYXRPcENvbnRleHQqIGN0eCwKKwkJCQkJICAgICAgRmF0Q2x1c3RlciBjbHN0KTsKKworZXh0ZXJuIGludCBmYXRfb3BfY29udGV4dF9jcmVhdGVfaW5pdGlhbF9mYXQgKEZhdE9wQ29udGV4dCogY3R4KTsKKworI2VuZGlmIC8qIFBFRF9GQVRfQ09OVEVYVF9IX0lOQ0xVREVEICovCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2ZhdC9jb3VudC5jIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9mYXQvY291bnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTA5YzQ1Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9mYXQvY291bnQuYwpAQCAtMCwwICsxLDQxMiBAQAorLyoKKyAgICBsaWJwYXJ0ZWQKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDAsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCisKKyAgICBJIGNhbiBhbHNvIGJlIGNvbnRhY3RlZCBhdDoKKworICAgIEFuZHJldyBDbGF1c2VuCisgICAgMTggU2hhdyBTdAorICAgIEFzaHdvb2QsIDMxNDcKKyAgICBWaWN0b3JpYSwgQXVzdHJhbGlhCisKKyovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlICJmYXQuaCIKKyNpbmNsdWRlICJ0cmF2ZXJzZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmbmRlZiBESVNDT1ZFUl9PTkxZCisKKyNpZiAwCisvKiBleHRyZW1lbHkgdWdseSBoYWNrOiBzdGljayBldmVyeXRoaW5nIHRoYXQgb2J2aW91c2x5IGlzbid0IGFuIHVubW92YWJsZSBmaWxlCisgKiBpbiBoZXJlLiAgTm90ZTogREFUIGlzIGEgYml0IGR1YmlvdXMuICBVbmZvcnR1bmF0ZWx5LCBpdCdzIHVzZWQgYnkgdGhlCisgKiByZWdpc3RyeSwgc28gaXQnbGwgYmUgYWxsIG92ZXIgdGhlIHBsYWNlIDotKAorICovCitzdGF0aWMgY2hhcioJbW92YWJsZV9leHRlbnNpb25zW10gPSB7CisJIiIsCisJIjFTVCIsCisJIkFWSSIsCisJIkJBSyIsICJCQVQiLCAiQk1QIiwKKwkiQ0ZHIiwgIkNPTSIsICJDU1MiLAorCSJEQVQiLCAiRExMIiwgIkRPQyIsICJEUlYiLAorCSJFWEUiLAorCSJGQVEiLCAiRkxUIiwgIkZPTiIsCisJIkdJRCIsICJHSUYiLAorCSJITFAiLCAiSFRUIiwgIkhUTSIsCisJIklDTyIsICJJTkkiLAorCSJKUEciLAorCSJMTksiLCAiTE9HIiwKKwkiS0JEIiwKKwkiTUUiLCAiTUlEIiwgIk1TRyIsCisJIk9DWCIsICJPTEQiLAorCSJQSUYiLCAiUE5HIiwgIlBSViIsCisJIlJURiIsCisJIlNDUiIsICJTWVMiLAorCSJUTVAiLCAiVFRGIiwgIlRYVCIsCisJIlVSTCIsCisJIldBViIsCisJIlZCWCIsICJWT0MiLCAiVlhEIiwKKwlOVUxMCit9OworCitzdGF0aWMgY2hhcioKK2dldF9leHRlbnNpb24gKGNoYXIqIGZpbGVfbmFtZSkKK3sKKwljaGFyKgkJZXh0OworCisJZXh0ID0gc3RycmNociAoZmlsZV9uYW1lLCAnLicpOworCWlmICghZXh0KQorCQlyZXR1cm4gIiI7CisJaWYgKHN0cmNociAoZXh0LCAnXFwnKSkKKwkJcmV0dXJuICIiOworCXJldHVybiBleHQgKyAxOworfQorCitzdGF0aWMgaW50Citpc19tb3ZhYmxlX3N5c3RlbV9maWxlIChjaGFyKiBmaWxlX25hbWUpCit7CisJY2hhcioJCWV4dCA9IGdldF9leHRlbnNpb24gKGZpbGVfbmFtZSk7CisJaW50CQlpOworCisJZm9yIChpID0gMDsgbW92YWJsZV9leHRlbnNpb25zIFtpXTsgaSsrKSB7CisJCWlmIChzdHJjYXNlY21wIChleHQsIG1vdmFibGVfZXh0ZW5zaW9ucyBbaV0pID09IDApCisJCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvKiAwICovCisKKy8qCisgICAgcHJpbnRzIG91dCB0aGUgc2VxdWVuY2Ugb2YgY2x1c3RlcnMgZm9yIGEgZ2l2ZW4gZmlsZSBjaGFpbiwgYmVnaW5uaW5nCisgICAgYXQgc3RhcnRfY2x1c3Rlci4KKyovCisjaWZkZWYgUEVEX1ZFUkJPU0UKK3N0YXRpYyB2b2lkCitwcmludF9jaGFpbiAoUGVkRmlsZVN5c3RlbSogZnMsIEZhdENsdXN0ZXIgc3RhcnQpCit7CisJRmF0U3BlY2lmaWMqCWZzX2luZm8gPSBGQVRfU1BFQ0lGSUMgKGZzKTsKKwlGYXRDbHVzdGVyCWNsc3Q7CisJaW50CQl0aGlzX3JvdzsKKworCXRoaXNfcm93ID0gMDsKKwlmb3IgKGNsc3QgPSBzdGFydDsgIWZhdF90YWJsZV9pc19lb2YgKGZzX2luZm8tPmZhdCwgY2xzdCk7CisJICAgICBjbHN0ID0gZmF0X3RhYmxlX2dldCAoZnNfaW5mby0+ZmF0LCBjbHN0KSkgeworCQlwcmludGYgKCIgICVkIiwgKGludCkgY2xzdCk7CisJCWlmICgrK3RoaXNfcm93ID09IDcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1dGNoYXIgKCdcbicpOworCQkJdGhpc19yb3cgPSAwOworCQl9CisJfQorCXB1dGNoYXIgKCdcbicpOworfQorI2VuZGlmIC8qIFBFRF9WRVJCT1NFICovCisKK3N0YXRpYyBQZWRTZWN0b3IKK3JlbWFpbmRlcl9yb3VuZF91cCAoUGVkU2VjdG9yIGEsIFBlZFNlY3RvciBiKQoreworCVBlZFNlY3RvcglyZXN1bHQ7CisKKwlyZXN1bHQgPSBhICUgYjsKKwlpZiAoIXJlc3VsdCkKKwkJcmVzdWx0ID0gYjsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICAgIHRyYXZlcnNlIHRoZSBGQVQgZm9yIGEgZmlsZS9kaXJlY3RvcnksIG1hcmtpbmcgZWFjaCBlbnRyeSdzIGZsYWcKKyAgICB0byAiZmxhZyIuCisqLworc3RhdGljIGludAorZmxhZ190cmF2ZXJzZV9mYXQgKFBlZEZpbGVTeXN0ZW0qIGZzLCBjb25zdCBjaGFyKiBjaGFpbl9uYW1lLCBGYXRDbHVzdGVyIHN0YXJ0LAorCQkgICBGYXRDbHVzdGVyRmxhZyBmbGFnLCBQZWRTZWN0b3Igc2l6ZSkKK3sKKwlGYXRTcGVjaWZpYyoJZnNfaW5mbyA9IEZBVF9TUEVDSUZJQyAoZnMpOworCUZhdENsdXN0ZXIJY2xzdDsKKwlGYXRDbHVzdGVyCXByZXZfY2xzdDsKKwlpbnQJCWxhc3RfY2x1c3Rlcl91c2FnZTsKKwlGYXRDbHVzdGVyCWNoYWluX2xlbmd0aCA9IDA7CisKKwlpZiAoZmF0X3RhYmxlX2lzX2VvZiAoZnNfaW5mby0+ZmF0LCBzdGFydCkpIHsKKwkJaWYgKHBlZF9leGNlcHRpb25fdGhyb3cgKAorCQkJUEVEX0VYQ0VQVElPTl9FUlJPUiwKKwkJCVBFRF9FWENFUFRJT05fSUdOT1JFX0NBTkNFTCwKKwkJCV8oIkJhZCBkaXJlY3RvcnkgZW50cnkgZm9yICVzOiBmaXJzdCBjbHVzdGVyIGlzIHRoZSAiCisJCQkgICJlbmQgb2YgZmlsZSBtYXJrZXIuIiksCisJCQljaGFpbl9uYW1lKQorCQkJCSE9IFBFRF9FWENFUFRJT05fSUdOT1JFKQorCQkJcmV0dXJuIDA7CisJfQorCisJZm9yIChwcmV2X2Nsc3QgPSBjbHN0ID0gc3RhcnQ7ICFmYXRfdGFibGVfaXNfZW9mIChmc19pbmZvLT5mYXQsIGNsc3QpOworCSAgICAgcHJldl9jbHN0ID0gY2xzdCwgY2xzdCA9IGZhdF90YWJsZV9nZXQgKGZzX2luZm8tPmZhdCwgY2xzdCkpIHsKKwkJY2hhaW5fbGVuZ3RoKys7CisJCWlmICghY2xzdCkgeworCQkJcGVkX2V4Y2VwdGlvbl90aHJvdyAoUEVEX0VYQ0VQVElPTl9GQVRBTCwKKwkJCQlQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCQlfKCJCYWQgRkFUOiB1bnRlcm1pbmF0ZWQgY2hhaW4gZm9yICVzLiAgWW91ICIKKwkJCQkgICJzaG91bGQgcnVuIGRvc2ZzY2sgb3Igc2NhbmRpc2suIiksCisJCQkJY2hhaW5fbmFtZSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCWlmIChjbHN0ID49IGZzX2luZm8tPmZhdC0+Y2x1c3Rlcl9jb3VudCArIDIpIHsKKwkJCXBlZF9leGNlcHRpb25fdGhyb3cgKFBFRF9FWENFUFRJT05fRkFUQUwsCisJCQkJUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQkJXygiQmFkIEZBVDogY2x1c3RlciAlZCBvdXRzaWRlIGZpbGUgc3lzdGVtICIKKwkJCQkgICJpbiBjaGFpbiBmb3IgJXMuICBZb3Ugc2hvdWxkIHJ1biBkb3Nmc2NrICIKKwkJCQkgICJvciBzY2FuZGlzay4iKSwKKwkJCQkoaW50KSBjbHN0LCBjaGFpbl9uYW1lKTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJaWYgKGZzX2luZm8tPmNsdXN0ZXJfaW5mbyBbY2xzdF0uZmxhZyAhPSBGQVRfRkxBR19GUkVFICkgeworCQkJcGVkX2V4Y2VwdGlvbl90aHJvdyAoUEVEX0VYQ0VQVElPTl9GQVRBTCwKKwkJCQlQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCQlfKCJCYWQgRkFUOiBjbHVzdGVyICVkIGlzIGNyb3NzLWxpbmtlZCBmb3IgIgorCQkJCSAgIiVzLiAgWW91IHNob3VsZCBydW4gZG9zZnNjayBvciBzY2FuZGlzay4iKSwKKwkJCQkoaW50KSBjbHN0LCBjaGFpbl9uYW1lKTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJaWYgKGZsYWcgPT0gRkFUX0ZMQUdfRElSRUNUT1JZKQorCQkJZnNfaW5mby0+dG90YWxfZGlyX2NsdXN0ZXJzKys7CisKKwkJZnNfaW5mby0+Y2x1c3Rlcl9pbmZvIFtjbHN0XS5mbGFnID0gZmxhZzsKKwkJZnNfaW5mby0+Y2x1c3Rlcl9pbmZvIFtjbHN0XS51bml0c191c2VkID0gMDsJLyogMCA9PSA2NCAqLworCX0KKworCWlmIChzaXplCisJICAgICYmIGNoYWluX2xlbmd0aAorCSAgICAJCSE9IHBlZF9kaXZfcm91bmRfdXAgKHNpemUsIGZzX2luZm8tPmNsdXN0ZXJfc2VjdG9ycykpIHsKKwkJaWYgKHBlZF9leGNlcHRpb25fdGhyb3cgKAorCQkJUEVEX0VYQ0VQVElPTl9FUlJPUiwKKwkJCVBFRF9FWENFUFRJT05fSUdOT1JFX0NBTkNFTCwKKwkJCV8oIiVzIGlzICVkaywgYnV0IGl0IGhhcyAlZCBjbHVzdGVycyAoJWRrKS4iKSwKKwkJCWNoYWluX25hbWUsCisJCQkoaW50KSBzaXplIC8gMiwKKwkJCShpbnQpIGNoYWluX2xlbmd0aCwKKwkJCShpbnQpIGNoYWluX2xlbmd0aCAqIGZzX2luZm8tPmNsdXN0ZXJfc2VjdG9ycyAvIDIpCisJCQkJIT0gUEVEX0VYQ0VQVElPTl9JR05PUkUpCisJCQlyZXR1cm4gMDsKKwl9CisKKwlsYXN0X2NsdXN0ZXJfdXNhZ2UKKwkJPSBwZWRfZGl2X3JvdW5kX3VwICg2NCAqIHJlbWFpbmRlcl9yb3VuZF91cCAoc2l6ZSwKKwkJCQkJCWZzX2luZm8tPmNsdXN0ZXJfc2VjdG9ycyksCisJCQkJZnNfaW5mby0+Y2x1c3Rlcl9zZWN0b3JzKTsKKworCWZzX2luZm8tPmNsdXN0ZXJfaW5mbyBbcHJldl9jbHN0XS51bml0c191c2VkID0gbGFzdF9jbHVzdGVyX3VzYWdlOworCisJcmV0dXJuIDE7Cit9CisKKy8qCisgICAgcmVjdXJzaXZlbHkgdHJhdmVyc2VzIGEgZGlyZWN0b3J5LCBmbGFnZ2luZyBhbGwgY2x1c3RlcnMgaW4gdGhlIHByb2Nlc3MuCisgICAgSXQgZnJlZXMgdGhlIHRyYXZlcnNlX2luZm8gc3RydWN0dXJlIGJlZm9yZSByZXR1cm5pbmcuCisqLworc3RhdGljIGludAorZmxhZ190cmF2ZXJzZV9kaXIgKEZhdFRyYXZlcnNlSW5mbyogdHJhdl9pbmZvKSB7CisJUGVkRmlsZVN5c3RlbSoJCWZzID0gdHJhdl9pbmZvLT5mczsKKwlGYXREaXJFbnRyeSoJCXRoaXNfZW50cnk7CisJRmF0VHJhdmVyc2VJbmZvKglzdWJkaXJfdHJhdl9pbmZvOworCWNoYXIJCQlmaWxlX25hbWUgWzUxMl07CisJY2hhcioJCQlmaWxlX25hbWVfc3RhcnQ7CisJRmF0Q2x1c3RlcgkJZmlyc3RfY2x1c3RlcjsKKwlQZWRTZWN0b3IJCXNpemU7CisKKwlQRURfQVNTRVJUICh0cmF2X2luZm8gIT0gTlVMTCwgcmV0dXJuIDApOworCisJc3RyY3B5IChmaWxlX25hbWUsIHRyYXZfaW5mby0+ZGlyX25hbWUpOworCWZpbGVfbmFtZV9zdGFydCA9IGZpbGVfbmFtZSArIHN0cmxlbiAoZmlsZV9uYW1lKTsKKworCXdoaWxlICggKHRoaXNfZW50cnkgPSBmYXRfdHJhdmVyc2VfbmV4dF9kaXJfZW50cnkgKHRyYXZfaW5mbykpICkgeworCQlpZiAoZmF0X2Rpcl9lbnRyeV9pc19udWxsX3Rlcm0gKHRoaXNfZW50cnkpKQorCQkJYnJlYWs7CisJCWlmICghZmF0X2Rpcl9lbnRyeV9oYXNfZmlyc3RfY2x1c3RlciAodGhpc19lbnRyeSwgZnMpKQorCQkJY29udGludWU7CisJCWlmICh0aGlzX2VudHJ5LT5uYW1lIFswXSA9PSAnLicpCisJCQljb250aW51ZTsJLyogc2tpcCAuIGFuZCAuLiBlbnRyaWVzICovCisKKwkJZmF0X2Rpcl9lbnRyeV9nZXRfbmFtZSAodGhpc19lbnRyeSwgZmlsZV9uYW1lX3N0YXJ0KTsKKwkJZmlyc3RfY2x1c3RlciA9IGZhdF9kaXJfZW50cnlfZ2V0X2ZpcnN0X2NsdXN0ZXIodGhpc19lbnRyeSwgZnMpOworCQlzaXplID0gcGVkX2Rpdl9yb3VuZF91cCAoZmF0X2Rpcl9lbnRyeV9nZXRfbGVuZ3RoICh0aGlzX2VudHJ5KSwKKwkJCQkJIDUxMik7CisKKyNpZmRlZiBQRURfVkVSQk9TRQorCQlwcmludGYgKCIlczogIiwgZmlsZV9uYW1lKTsKKwkJcHJpbnRfY2hhaW4gKGZzLCBmaXJzdF9jbHVzdGVyKTsKKyNlbmRpZgorCisjaWYgMAorCQlpZiAoZmF0X2Rpcl9lbnRyeV9pc19zeXN0ZW1fZmlsZSAodGhpc19lbnRyeSkKKwkJICAgICYmICFpc19tb3ZhYmxlX3N5c3RlbV9maWxlIChmaWxlX25hbWUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBQZWRFeGNlcHRpb25PcHRpb24gZXhfc3RhdHVzOworCQkJZXhfc3RhdHVzID0gcGVkX2V4Y2VwdGlvbl90aHJvdyAoCisJCQkJUEVEX0VYQ0VQVElPTl9XQVJOSU5HLAorCQkJCVBFRF9FWENFUFRJT05fSUdOT1JFX0NBTkNFTCwKKwkJCQlfKCJUaGUgZmlsZSAlcyBpcyBtYXJrZWQgYXMgYSBzeXN0ZW0gZmlsZS4gICIKKwkJCQkiVGhpcyBtZWFucyBtb3ZpbmcgaXQgY291bGQgY2F1c2Ugc29tZSAiCisJCQkJInByb2dyYW1zIHRvIHN0b3Agd29ya2luZy4iKSwKKwkJCQlmaWxlX25hbWUpOworCisJCQlzd2l0Y2ggKGV4X3N0YXR1cykgeworCQkJCWNhc2UgUEVEX0VYQ0VQVElPTl9DQU5DRUw6CisJCQkJCXJldHVybiAwOworCisJCQkJY2FzZSBQRURfRVhDRVBUSU9OX1VOSEFORExFRDoKKwkJCQkJcGVkX2V4Y2VwdGlvbl9jYXRjaCAoKTsKKwkJCQljYXNlIFBFRF9FWENFUFRJT05fSUdOT1JFOgorCQkJfQorCQl9CisjZW5kaWYgLyogMCAqLworCisJCWlmIChmYXRfZGlyX2VudHJ5X2lzX2RpcmVjdG9yeSAodGhpc19lbnRyeSkpIHsKKwkJCWlmICghZmxhZ190cmF2ZXJzZV9mYXQgKGZzLCBmaWxlX25hbWUsIGZpcnN0X2NsdXN0ZXIsCisJCQkJCQlGQVRfRkxBR19ESVJFQ1RPUlksIHNpemUpKQorCQkJCXJldHVybiAwOworCisJCQlzdWJkaXJfdHJhdl9pbmZvID0gZmF0X3RyYXZlcnNlX2RpcmVjdG9yeSAodHJhdl9pbmZvLAorCQkJCQkJCQkgICB0aGlzX2VudHJ5KTsKKwkJCWlmICghc3ViZGlyX3RyYXZfaW5mbykKKwkJCQlyZXR1cm4gMDsKKwkJCWlmICghZmxhZ190cmF2ZXJzZV9kaXIgKHN1YmRpcl90cmF2X2luZm8pKQorCQkJCXJldHVybiAwOworCQl9IGVsc2UgaWYgKGZhdF9kaXJfZW50cnlfaXNfZmlsZSAodGhpc19lbnRyeSkpIHsKKwkJCWlmICghZmxhZ190cmF2ZXJzZV9mYXQgKGZzLCBmaWxlX25hbWUsIGZpcnN0X2NsdXN0ZXIsCisJCQkJCQlGQVRfRkxBR19GSUxFLCBzaXplKSkgCisJCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlmYXRfdHJhdmVyc2VfY29tcGxldGUgKHRyYXZfaW5mbyk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCitfbWFya19iYWRfY2x1c3RlcnMgKFBlZEZpbGVTeXN0ZW0qIGZzKQoreworCUZhdFNwZWNpZmljKglmc19pbmZvID0gRkFUX1NQRUNJRklDIChmcyk7CisJRmF0Q2x1c3RlcgljbHVzdGVyOworCisJZm9yIChjbHVzdGVyID0gMjsgY2x1c3RlciA8IGZzX2luZm8tPmNsdXN0ZXJfY291bnQgKyAyOyBjbHVzdGVyKyspIHsKKwkJaWYgKGZhdF90YWJsZV9pc19iYWQgKGZzX2luZm8tPmZhdCwgY2x1c3RlcikpCisJCQlmc19pbmZvLT5jbHVzdGVyX2luZm8gW2NsdXN0ZXJdLmZsYWcgPSBGQVRfRkxBR19CQUQ7CisJfQorfQorCisvKiAgCisgICAgZmlsbHMgaW4gY2x1c3Rlcl9pbmZvLiAgRWFjaCBGQVQgZW50cnkgKD0gY2x1c3RlcikgaXMgZmxhZ2dlZCBhcyBlaXRoZXIKKyAgICBGQVRfRkxBR19GUkVFLCBGQVRfRkxBR19GSUxFIG9yIEZBVF9GTEFHX0RJUkVDVE9SWS4KKworICAgIEFsc28sIHRoZSBmcmFjdGlvbiBvZiBlYWNoIGNsdXN0ZXIgKHgvNjQpIGlzIHJlY29yZGVkCisqLworaW50CitmYXRfY29sbGVjdF9jbHVzdGVyX2luZm8gKFBlZEZpbGVTeXN0ZW0qIGZzKSB7CisJRmF0U3BlY2lmaWMqCQlmc19pbmZvID0gRkFUX1NQRUNJRklDIChmcyk7CisJRmF0VHJhdmVyc2VJbmZvKgl0cmF2X2luZm87CisgICAgCisJLyogc2V0IGFsbCBjbHVzdGVycyB0byB1bnVzZWQgYXMgYSBkZWZhdWx0ICovCisJbWVtc2V0IChmc19pbmZvLT5jbHVzdGVyX2luZm8sIDAsIGZzX2luZm8tPmZhdC0+Y2x1c3Rlcl9jb3VudCArIDIpOworCWZzX2luZm8tPnRvdGFsX2Rpcl9jbHVzdGVycyA9IDA7CisKKwlpZiAoZnNfaW5mby0+ZmF0X3R5cGUgPT0gRkFUX1RZUEVfRkFUMzIpIHsKKwkJdHJhdl9pbmZvID0gZmF0X3RyYXZlcnNlX2JlZ2luIChmcywgZnNfaW5mby0+cm9vdF9jbHVzdGVyLAorCQkJCQkJIlxcIik7CisJCWlmICghZmxhZ190cmF2ZXJzZV9kaXIgKHRyYXZfaW5mbykpCisJCQlyZXR1cm4gMDsKKwkJaWYgKCFmbGFnX3RyYXZlcnNlX2ZhdCAoZnMsICJcXCIsIGZzX2luZm8tPnJvb3RfY2x1c3RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQVRfRkxBR19ESVJFQ1RPUlksIDApKQorCQkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJdHJhdl9pbmZvID0gZmF0X3RyYXZlcnNlX2JlZ2luIChmcywgRkFUX1JPT1QsICJcXCIpOworCQlpZiAoIWZsYWdfdHJhdmVyc2VfZGlyICh0cmF2X2luZm8pKQorCQkJcmV0dXJuIDA7CisJfQorCisJX21hcmtfYmFkX2NsdXN0ZXJzIChmcyk7CisJcmV0dXJuIDE7Cit9CisKK0ZhdENsdXN0ZXJGbGFnCitmYXRfZ2V0X2NsdXN0ZXJfZmxhZyAoUGVkRmlsZVN5c3RlbSogZnMsIEZhdENsdXN0ZXIgY2x1c3RlcikKK3sKKwlGYXRTcGVjaWZpYyoJCWZzX2luZm8gPSBGQVRfU1BFQ0lGSUMgKGZzKTsKKworCXJldHVybiBmc19pbmZvLT5jbHVzdGVyX2luZm8gW2NsdXN0ZXJdLmZsYWc7Cit9CisKK1BlZFNlY3RvcgorZmF0X2dldF9jbHVzdGVyX3VzYWdlIChQZWRGaWxlU3lzdGVtKiBmcywgRmF0Q2x1c3RlciBjbHVzdGVyKQoreworCUZhdFNwZWNpZmljKgkJZnNfaW5mbyA9IEZBVF9TUEVDSUZJQyAoZnMpOworCWludAkJCWZyYWN0aW9uOworCisJaWYgKGZzX2luZm8tPmNsdXN0ZXJfaW5mbyBbY2x1c3Rlcl0uZmxhZyA9PSBGQVRfRkxBR19GUkVFKQorCQlyZXR1cm4gMDsKKworCWZyYWN0aW9uID0gZnNfaW5mby0+Y2x1c3Rlcl9pbmZvIFtjbHVzdGVyXS51bml0c191c2VkOworCWlmIChmcmFjdGlvbiA9PSAwKQorCQlmcmFjdGlvbiA9IDY0OworCisJcmV0dXJuIGZyYWN0aW9uICogZnNfaW5mby0+Y2x1c3Rlcl9zZWN0b3JzIC8gNjQ7Cit9CisKK0ZhdENsdXN0ZXJGbGFnCitmYXRfZ2V0X2ZyYWdtZW50X2ZsYWcgKFBlZEZpbGVTeXN0ZW0qIGZzLCBGYXRGcmFnbWVudCBmcmFnKQoreworCUZhdFNwZWNpZmljKglmc19pbmZvID0gRkFUX1NQRUNJRklDIChmcyk7CisJRmF0Q2x1c3RlcgljbHVzdGVyID0gZmF0X2ZyYWdfdG9fY2x1c3RlciAoZnMsIGZyYWcpOworCUZhdEZyYWdtZW50CW9mZnNldCA9IGZyYWcgJSBmc19pbmZvLT5jbHVzdGVyX2ZyYWdzOworCUZhdEZyYWdtZW50CWxhc3RfZnJhZ191c2VkOworCUZhdENsdXN0ZXJGbGFnCWZsYWc7CisKKwlQRURfQVNTRVJUIChjbHVzdGVyID49IDIgJiYgY2x1c3RlciA8IGZzX2luZm8tPmNsdXN0ZXJfY291bnQgKyAyLAorCQkgICAgcmV0dXJuIDApOworCisJZmxhZyA9IGZhdF9nZXRfY2x1c3Rlcl9mbGFnIChmcywgY2x1c3Rlcik7CisJaWYgKGZsYWcgIT0gRkFUX0ZMQUdfRklMRSAmJiBmbGFnICE9IEZBVF9GTEFHX0RJUkVDVE9SWSkKKwkJcmV0dXJuIGZsYWc7CisJbGFzdF9mcmFnX3VzZWQgPSAoZmF0X2dldF9jbHVzdGVyX3VzYWdlIChmcywgY2x1c3RlcikgLSAxKQorCQkJCS8gZnNfaW5mby0+ZnJhZ19zZWN0b3JzOworCWlmIChvZmZzZXQgPiBsYXN0X2ZyYWdfdXNlZCkKKwkJcmV0dXJuIEZBVF9GTEFHX0ZSRUU7CisJZWxzZQorCQlyZXR1cm4gZmxhZzsKK30KKworaW50CitmYXRfaXNfZnJhZ21lbnRfYWN0aXZlIChQZWRGaWxlU3lzdGVtKiBmcywgRmF0RnJhZ21lbnQgZnJhZykKK3sKKwlzd2l0Y2ggKGZhdF9nZXRfZnJhZ21lbnRfZmxhZyAoZnMsIGZyYWcpKSB7CisJCWNhc2UgRkFUX0ZMQUdfRlJFRToKKwkJY2FzZSBGQVRfRkxBR19CQUQ6CisJCQlyZXR1cm4gMDsKKworCQljYXNlIEZBVF9GTEFHX0ZJTEU6CisJCWNhc2UgRkFUX0ZMQUdfRElSRUNUT1JZOgorCQkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCisjZW5kaWYgLyogIURJU0NPVkVSX09OTFkgKi8KKwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9mYXQvY291bnQuaCBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvZmF0L2NvdW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA5OTAxMQotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvZmF0L2NvdW50LmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAgICBsaWJwYXJ0ZWQKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCisKKyAgICBJIGNhbiBhbHNvIGJlIGNvbnRhY3RlZCBhdDoKKworICAgIEFuZHJldyBDbGF1c2VuCisgICAgMTggU2hhdyBTdAorICAgIEFzaHdvb2QsIDMxNDcKKyAgICBWaWN0b3JpYSwgQXVzdHJhbGlhCisqLworCisjaWZuZGVmIENPVU5UX0hfSU5DTFVERUQKKyNkZWZpbmUgQ09VTlRfSF9JTkNMVURFRAorCit0eXBlZGVmIGVudW0gX0ZhdENsdXN0ZXJGbGFnIEZhdENsdXN0ZXJGbGFnOwordHlwZWRlZiBzdHJ1Y3QgX0ZhdENsdXN0ZXJJbmZvIEZhdENsdXN0ZXJJbmZvOworCitlbnVtIF9GYXRDbHVzdGVyRmxhZyB7CisJRkFUX0ZMQUdfRlJFRT0wLAorCUZBVF9GTEFHX0ZJTEU9MSwKKwlGQVRfRkxBR19ESVJFQ1RPUlk9MiwKKwlGQVRfRkxBR19CQUQ9MworfTsKKworc3RydWN0IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBfRmF0Q2x1c3RlckluZm8geworCXVuc2lnbmVkIGludCAgICB1bml0c191c2VkOjY7ICAgLyogMSB1bml0ID0gY2x1c3Rlcl9zaXplIC8gNjQgKi8KKwlGYXRDbHVzdGVyRmxhZyAgZmxhZzoyOworfSBmYXQxNjsKKworZXh0ZXJuIGludCBmYXRfY29sbGVjdF9jbHVzdGVyX2luZm8gKFBlZEZpbGVTeXN0ZW0gKmZzKTsKK2V4dGVybiBGYXRDbHVzdGVyRmxhZyBmYXRfZ2V0X2NsdXN0ZXJfZmxhZyAoUGVkRmlsZVN5c3RlbSogZnMsCisJCQkJCSAgICBGYXRDbHVzdGVyIGNsdXN0ZXIpOworZXh0ZXJuIFBlZFNlY3RvciBmYXRfZ2V0X2NsdXN0ZXJfdXNhZ2UgKFBlZEZpbGVTeXN0ZW0qIGZzLCBGYXRDbHVzdGVyIGNsdXN0ZXIpOworZXh0ZXJuIEZhdENsdXN0ZXJGbGFnIGZhdF9nZXRfZnJhZ21lbnRfZmxhZyAoUGVkRmlsZVN5c3RlbSogZnMsCisJCQkJCSAgICAgRmF0RnJhZ21lbnQgZnJhZyk7CitleHRlcm4gaW50IGZhdF9pc19mcmFnbWVudF9hY3RpdmUgKFBlZEZpbGVTeXN0ZW0qIGZzLCBGYXRGcmFnbWVudCBmcmFnKTsKKworI2VuZGlmIC8qIENPVU5UX0hfSU5DTFVERUQgKi8KZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9mYXQvZmF0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJmMDIzZAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jCkBAIC0wLDAgKzEsODg4IEBACisvKgorICAgIGxpYnBhcnRlZAorICAgIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKKyovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1dWlkL3V1aWQuaD4KKworI2luY2x1ZGUgImZhdC5oIgorI2luY2x1ZGUgImNhbGMuaCIKKworUGVkRmlsZVN5c3RlbSoKK2ZhdF9hbGxvYyAoY29uc3QgUGVkR2VvbWV0cnkqIGdlb20pCit7CisJUGVkRmlsZVN5c3RlbSoJCWZzOworCisJZnMgPSAoUGVkRmlsZVN5c3RlbSopIHBlZF9tYWxsb2MgKHNpemVvZiAoUGVkRmlsZVN5c3RlbSkpOworCWlmICghZnMpCisJCWdvdG8gZXJyb3I7CisKKwlmcy0+dHlwZV9zcGVjaWZpYyA9IChGYXRTcGVjaWZpYyopIHBlZF9tYWxsb2MgKHNpemVvZiAoRmF0U3BlY2lmaWMpKTsKKwlpZiAoIWZzLT50eXBlX3NwZWNpZmljKQorCQlnb3RvIGVycm9yX2ZyZWVfZnM7CisKKwlmcy0+Z2VvbSA9IHBlZF9nZW9tZXRyeV9kdXBsaWNhdGUgKGdlb20pOworCWlmICghZnMtPmdlb20pCisJCWdvdG8gZXJyb3JfZnJlZV90eXBlX3NwZWNpZmljOworCisJZnMtPmNoZWNrZWQgPSAwOworCXJldHVybiBmczsKKworZXJyb3JfZnJlZV90eXBlX3NwZWNpZmljOgorCXBlZF9mcmVlIChmcy0+dHlwZV9zcGVjaWZpYyk7CitlcnJvcl9mcmVlX2ZzOgorCXBlZF9mcmVlIChmcyk7CitlcnJvcjoKKwlyZXR1cm4gTlVMTDsKK30KKworLyogUmVxdWlyZXMgdGhlIGJvb3Qgc2VjdG9yIHRvIGJlIGFuYWx5c2VkICovCitpbnQKK2ZhdF9hbGxvY19idWZmZXJzIChQZWRGaWxlU3lzdGVtKiBmcykKK3sKKwlGYXRTcGVjaWZpYyoJZnNfaW5mbyA9IEZBVF9TUEVDSUZJQyAoZnMpOworCisJZnNfaW5mby0+YnVmZmVyX3NlY3RvcnMgPSBCVUZGRVJfU0laRTsKKyAgICAgICAgZnNfaW5mby0+YnVmZmVyID0gcGVkX21hbGxvYyAoZnNfaW5mby0+YnVmZmVyX3NlY3RvcnMgKiA1MTIpOworICAgICAgICBpZiAoIWZzX2luZm8tPmJ1ZmZlcikKKwkJZ290byBlcnJvcjsKKworCWZzX2luZm8tPmNsdXN0ZXJfaW5mbyA9IHBlZF9tYWxsb2MgKGZzX2luZm8tPmNsdXN0ZXJfY291bnQgKyAyKTsKKwlpZiAoIWZzX2luZm8tPmNsdXN0ZXJfaW5mbykKKwkJZ290byBlcnJvcl9mcmVlX2J1ZmZlcjsKKworCXJldHVybiAxOworCitlcnJvcl9mcmVlX2J1ZmZlcjoKKwlwZWRfZnJlZSAoZnNfaW5mby0+YnVmZmVyKTsKK2Vycm9yOgorCXJldHVybiAwOworfTsKKwordm9pZAorZmF0X2ZyZWVfYnVmZmVycyAoUGVkRmlsZVN5c3RlbSogZnMpCit7CisJRmF0U3BlY2lmaWMqCWZzX2luZm8gPSBGQVRfU1BFQ0lGSUMgKGZzKTsKKworCXBlZF9mcmVlIChmc19pbmZvLT5jbHVzdGVyX2luZm8pOworCXBlZF9mcmVlIChmc19pbmZvLT5idWZmZXIpOworfQorCit2b2lkCitmYXRfZnJlZSAoUGVkRmlsZVN5c3RlbSogZnMpCit7CisJcGVkX2dlb21ldHJ5X2Rlc3Ryb3kgKGZzLT5nZW9tKTsKKwlwZWRfZnJlZSAoZnMtPnR5cGVfc3BlY2lmaWMpOworCXBlZF9mcmVlIChmcyk7Cit9CisKK2ludAorZmF0X3NldF9mcmFnX3NlY3RvcnMgKFBlZEZpbGVTeXN0ZW0qIGZzLCBQZWRTZWN0b3IgZnJhZ19zZWN0b3JzKQoreworCUZhdFNwZWNpZmljKglmc19pbmZvID0gRkFUX1NQRUNJRklDIChmcyk7CisKKwlQRURfQVNTRVJUIChmc19pbmZvLT5jbHVzdGVyX3NlY3RvcnMgJSBmcmFnX3NlY3RvcnMgPT0gMAorCQkJJiYgZnJhZ19zZWN0b3JzIDw9IGZzX2luZm8tPmNsdXN0ZXJfc2VjdG9ycywKKwkJICAgIHJldHVybiAwKTsKKworCWZzX2luZm8tPmZyYWdfc2l6ZSA9IGZyYWdfc2VjdG9ycyAqIDUxMjsKKwlmc19pbmZvLT5mcmFnX3NlY3RvcnMgPSBmcmFnX3NlY3RvcnM7CisJZnNfaW5mby0+YnVmZmVyX2ZyYWdzID0gZnNfaW5mby0+YnVmZmVyX3NlY3RvcnMgLyBmcmFnX3NlY3RvcnM7CisJZnNfaW5mby0+Y2x1c3Rlcl9mcmFncyA9IGZzX2luZm8tPmNsdXN0ZXJfc2VjdG9ycyAvIGZyYWdfc2VjdG9yczsKKwlmc19pbmZvLT5mcmFnX2NvdW50ID0gZnNfaW5mby0+Y2x1c3Rlcl9jb3VudCAqIGZzX2luZm8tPmNsdXN0ZXJfZnJhZ3M7CisKKwlyZXR1cm4gMTsKK30KKworUGVkR2VvbWV0cnkqCitmYXRfcHJvYmUgKFBlZEdlb21ldHJ5KiBnZW9tLCBGYXRUeXBlKiBmYXRfdHlwZSkKK3sKKwlQZWRGaWxlU3lzdGVtKgkJZnM7CisJRmF0U3BlY2lmaWMqCQlmc19pbmZvOworCVBlZEdlb21ldHJ5KgkJcmVzdWx0OworCisJZnMgPSBmYXRfYWxsb2MgKGdlb20pOworCWlmICghZnMpCisJCWdvdG8gZXJyb3I7CisJZnNfaW5mbyA9IChGYXRTcGVjaWZpYyopIGZzLT50eXBlX3NwZWNpZmljOworCisJaWYgKCFmYXRfYm9vdF9zZWN0b3JfcmVhZCAoJmZzX2luZm8tPmJvb3Rfc2VjdG9yLCBnZW9tKSkKKwkJZ290byBlcnJvcl9mcmVlX2ZzOworCWlmICghZmF0X2Jvb3Rfc2VjdG9yX2FuYWx5c2UgKCZmc19pbmZvLT5ib290X3NlY3RvciwgZnMpKQorCQlnb3RvIGVycm9yX2ZyZWVfZnM7CisKKwkqZmF0X3R5cGUgPSBmc19pbmZvLT5mYXRfdHlwZTsKKwlyZXN1bHQgPSBwZWRfZ2VvbWV0cnlfbmV3IChnZW9tLT5kZXYsIGdlb20tPnN0YXJ0LAorCQkJCSAgIGZzX2luZm8tPnNlY3Rvcl9jb3VudCk7CisKKwlmYXRfZnJlZSAoZnMpOworCXJldHVybiByZXN1bHQ7CisKK2Vycm9yX2ZyZWVfZnM6CisJZmF0X2ZyZWUgKGZzKTsKK2Vycm9yOgorCXJldHVybiBOVUxMOworfQorCitQZWRHZW9tZXRyeSoKK2ZhdF9wcm9iZV9mYXQxNiAoUGVkR2VvbWV0cnkqIGdlb20pCit7CisJRmF0VHlwZQkJZmF0X3R5cGU7CisJUGVkR2VvbWV0cnkqCXByb2JlZF9nZW9tID0gZmF0X3Byb2JlIChnZW9tLCAmZmF0X3R5cGUpOworCisJaWYgKHByb2JlZF9nZW9tKSB7CisJCWlmIChmYXRfdHlwZSA9PSBGQVRfVFlQRV9GQVQxNikKKwkJCXJldHVybiBwcm9iZWRfZ2VvbTsKKwkJcGVkX2dlb21ldHJ5X2Rlc3Ryb3kgKHByb2JlZF9nZW9tKTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK1BlZEdlb21ldHJ5KgorZmF0X3Byb2JlX2ZhdDMyIChQZWRHZW9tZXRyeSogZ2VvbSkKK3sKKwlGYXRUeXBlCQlmYXRfdHlwZTsKKwlQZWRHZW9tZXRyeSoJcHJvYmVkX2dlb20gPSBmYXRfcHJvYmUgKGdlb20sICZmYXRfdHlwZSk7CisKKwlpZiAocHJvYmVkX2dlb20pIHsKKwkJaWYgKGZhdF90eXBlID09IEZBVF9UWVBFX0ZBVDMyKQorCQkJcmV0dXJuIHByb2JlZF9nZW9tOworCQlwZWRfZ2VvbWV0cnlfZGVzdHJveSAocHJvYmVkX2dlb20pOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworI2lmbmRlZiBESVNDT1ZFUl9PTkxZCitpbnQKK2ZhdF9jbG9iYmVyIChQZWRHZW9tZXRyeSogZ2VvbSkKK3sKKwlGYXRCb290U2VjdG9yCQlib290X3NlY3RvcjsKKworCWlmICghZmF0X2Jvb3Rfc2VjdG9yX3JlYWQgKCZib290X3NlY3RvciwgZ2VvbSkpCisJCXJldHVybiAxOworCisJYm9vdF9zZWN0b3Iuc3lzdGVtX2lkWzBdID0gMDsKKwlib290X3NlY3Rvci5ib290X3NpZ24gPSAwOworCWlmIChib290X3NlY3Rvci51LmZhdDE2LmZhdF9uYW1lWzBdID09ICdGJykKKwkJYm9vdF9zZWN0b3IudS5mYXQxNi5mYXRfbmFtZVswXSA9IDA7CisJaWYgKGJvb3Rfc2VjdG9yLnUuZmF0MzIuZmF0X25hbWVbMF0gPT0gJ0YnKQorCQlib290X3NlY3Rvci51LmZhdDMyLmZhdF9uYW1lWzBdID0gMDsKKworICAgICAgICByZXR1cm4gcGVkX2dlb21ldHJ5X3dyaXRlIChnZW9tLCAmYm9vdF9zZWN0b3IsIDAsIDEpOworfQorCitzdGF0aWMgaW50CitfaW5pdF9mYXRzIChQZWRGaWxlU3lzdGVtKiBmcykKK3sKKwlGYXRTcGVjaWZpYyoJZnNfaW5mbyA9IEZBVF9TUEVDSUZJQyAoZnMpOworCUZhdENsdXN0ZXIJdGFibGVfc2l6ZTsKKworCXRhYmxlX3NpemUgPSBmc19pbmZvLT5mYXRfc2VjdG9ycyAqIDUxMgorCQkgICAgIC8gZmF0X3RhYmxlX2VudHJ5X3NpemUgKGZzX2luZm8tPmZhdF90eXBlKTsKKwlmc19pbmZvLT5mYXQgPSBmYXRfdGFibGVfbmV3IChmc19pbmZvLT5mYXRfdHlwZSwgdGFibGVfc2l6ZSk7CisJaWYgKCFmc19pbmZvLT5mYXQpCisJCWdvdG8gZXJyb3I7CisKKwlpZiAoIWZhdF90YWJsZV9yZWFkIChmc19pbmZvLT5mYXQsIGZzLCAwKSkKKwkJZ290byBlcnJvcl9mcmVlX2ZhdDsKKworCXJldHVybiAxOworCitlcnJvcl9mcmVlX2ZhdDoKKwlmYXRfdGFibGVfZGVzdHJveSAoZnNfaW5mby0+ZmF0KTsKK2Vycm9yOgorCXJldHVybiAwOworfQorCitQZWRGaWxlU3lzdGVtKgorZmF0X29wZW4gKFBlZEdlb21ldHJ5KiBnZW9tKQoreworCVBlZEZpbGVTeXN0ZW0qCQlmczsKKwlGYXRTcGVjaWZpYyoJCWZzX2luZm87CisKKwlmcyA9IGZhdF9hbGxvYyAoZ2VvbSk7CisJaWYgKCFmcykKKwkJZ290byBlcnJvcjsKKwlmc19pbmZvID0gKEZhdFNwZWNpZmljKikgZnMtPnR5cGVfc3BlY2lmaWM7CisKKwlpZiAoIWZhdF9ib290X3NlY3Rvcl9yZWFkICgmZnNfaW5mby0+Ym9vdF9zZWN0b3IsIGdlb20pKQorCQlnb3RvIGVycm9yX2ZyZWVfZnM7CisJaWYgKCFmYXRfYm9vdF9zZWN0b3JfYW5hbHlzZSAoJmZzX2luZm8tPmJvb3Rfc2VjdG9yLCBmcykpCisJCWdvdG8gZXJyb3JfZnJlZV9mczsKKwlmcy0+dHlwZSA9IChmc19pbmZvLT5mYXRfdHlwZSA9PSBGQVRfVFlQRV9GQVQxNikKKwkJCQk/ICZmYXQxNl90eXBlCisJCQkJOiAmZmF0MzJfdHlwZTsKKwlpZiAoZnNfaW5mby0+ZmF0X3R5cGUgPT0gRkFUX1RZUEVfRkFUMzIpIHsKKwkJaWYgKCFmYXRfaW5mb19zZWN0b3JfcmVhZCAoJmZzX2luZm8tPmluZm9fc2VjdG9yLCBmcykpCisJCQlnb3RvIGVycm9yX2ZyZWVfZnM7CisJfQorCisJaWYgKCFfaW5pdF9mYXRzIChmcykpCisJCWdvdG8gZXJyb3JfZnJlZV9mczsKKwlpZiAoIWZhdF9hbGxvY19idWZmZXJzIChmcykpIAorCQlnb3RvIGVycm9yX2ZyZWVfZmF0X3RhYmxlOworCWlmICghZmF0X2NvbGxlY3RfY2x1c3Rlcl9pbmZvIChmcykpCisJCWdvdG8gZXJyb3JfZnJlZV9idWZmZXJzOworCisJcmV0dXJuIGZzOworCitlcnJvcl9mcmVlX2J1ZmZlcnM6CisJZmF0X2ZyZWVfYnVmZmVycyAoZnMpOworZXJyb3JfZnJlZV9mYXRfdGFibGU6CisJZmF0X3RhYmxlX2Rlc3Ryb3kgKGZzX2luZm8tPmZhdCk7CitlcnJvcl9mcmVlX2ZzOgorCWZhdF9mcmVlIChmcyk7CitlcnJvcjoKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludAorZmF0X3Jvb3RfZGlyX2NsZWFyIChQZWRGaWxlU3lzdGVtKiBmcykKK3sKKwlGYXRTcGVjaWZpYyoJCWZzX2luZm8gPSBGQVRfU1BFQ0lGSUMgKGZzKTsKKwltZW1zZXQgKGZzX2luZm8tPmJ1ZmZlciwgMCwgNTEyICogZnNfaW5mby0+cm9vdF9kaXJfc2VjdG9yX2NvdW50KTsKKwlyZXR1cm4gcGVkX2dlb21ldHJ5X3dyaXRlIChmcy0+Z2VvbSwgZnNfaW5mby0+YnVmZmVyLAorCQkJCSAgIGZzX2luZm8tPnJvb3RfZGlyX29mZnNldCwKKwkJCQkgICBmc19pbmZvLT5yb290X2Rpcl9zZWN0b3JfY291bnQpOworfQorCisvKiBoYWNrOiB1c2UgdGhlIGV4dDIgdXVpZCBsaWJyYXJ5IHRvIGdlbmVyYXRlIGEgcmVhc29uYWJseSByYW5kb20gKGhvcGVmdWxseQorICogd2l0aCAvZGV2L3JhbmRvbSkgbnVtYmVyLiAgVW5mb3J0dW5hdGVseSwgd2UgY2FuIG9ubHkgdXNlIDQgYnl0ZXMgb2YgaXQKKyAqLworc3RhdGljIHVpbnQzMl90CitfZ2VuX25ld19zZXJpYWxfbnVtYmVyICgpCit7CisJdXVpZF90CQl1dWlkOworCisJdXVpZF9nZW5lcmF0ZSAodXVpZCk7CisJcmV0dXJuICogKHVpbnQzMl90KikgJnV1aWQgWzBdOworfQorCitQZWRGaWxlU3lzdGVtKgorZmF0X2NyZWF0ZSAoUGVkR2VvbWV0cnkqIGdlb20sIEZhdFR5cGUgZmF0X3R5cGUsIFBlZFRpbWVyKiB0aW1lcikKK3sKKwlQZWRGaWxlU3lzdGVtKgkJZnM7CisJRmF0U3BlY2lmaWMqCQlmc19pbmZvOworCUZhdENsdXN0ZXIJCXRhYmxlX3NpemU7CisKKwlmcyA9IGZhdF9hbGxvYyAoZ2VvbSk7CisJaWYgKCFmcykKKwkJZ290byBlcnJvcjsKKwlmc19pbmZvID0gKEZhdFNwZWNpZmljKikgZnMtPnR5cGVfc3BlY2lmaWM7CisKKwlmc19pbmZvLT5sb2dpY2FsX3NlY3Rvcl9zaXplID0gMTsKKwlmc19pbmZvLT5zZWN0b3JzX3Blcl90cmFjayA9IGdlb20tPmRldi0+Ymlvc19nZW9tLnNlY3RvcnM7CisJZnNfaW5mby0+aGVhZHMgPSBnZW9tLT5kZXYtPmJpb3NfZ2VvbS5oZWFkczsKKwlmc19pbmZvLT5zZWN0b3JfY291bnQgPSBmcy0+Z2VvbS0+bGVuZ3RoOworCWZzX2luZm8tPmZhdF90YWJsZV9jb3VudCA9IDI7CisvKiBzb21lIGluaXRpYWwgdmFsdWVzLCB0byBiZSBjaGFuZ2VkIGxhdGVyICovCisJZnNfaW5mby0+cm9vdF9kaXJfc2VjdG9yX2NvdW50ID0gRkFUX1JPT1RfRElSX0VOVFJZX0NPVU5UCisJCQkJCSAgLyAoNTEyIC8gc2l6ZW9mIChGYXREaXJFbnRyeSkpOworCWZzX2luZm8tPnJvb3RfZGlyX2VudHJ5X2NvdW50ID0gRkFUX1JPT1RfRElSX0VOVFJZX0NPVU5UOworCisJZnNfaW5mby0+ZmF0X3R5cGUgPSBmYXRfdHlwZTsKKwlpZiAoIWZhdF9jYWxjX3NpemVzIChmcy0+Z2VvbS0+bGVuZ3RoLCAwLAorCQkJZnNfaW5mby0+ZmF0X3R5cGUsCisJCQlmc19pbmZvLT5yb290X2Rpcl9zZWN0b3JfY291bnQsCisJCQkmZnNfaW5mby0+Y2x1c3Rlcl9zZWN0b3JzLAorCQkJJmZzX2luZm8tPmNsdXN0ZXJfY291bnQsCisJCQkmZnNfaW5mby0+ZmF0X3NlY3RvcnMpKSB7CisJCXBlZF9leGNlcHRpb25fdGhyb3cgKFBFRF9FWENFUFRJT05fRVJST1IsCisJCQlQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCV8oIlBhcnRpdGlvbiB0b28gYmlnL3NtYWxsIGZvciBhICVzIGZpbGUgc3lzdGVtLiIpLAorCQkJKGZhdF90eXBlID09IEZBVF9UWVBFX0ZBVDE2KQorCQkgICAgICAgCQk/IGZhdDE2X3R5cGUubmFtZQorCQkJCTogZmF0MzJfdHlwZS5uYW1lKTsKKwkJZ290byBlcnJvcl9mcmVlX2ZzOworCX0KKworCWZzX2luZm8tPmNsdXN0ZXJfc2l6ZSA9IGZzX2luZm8tPmNsdXN0ZXJfc2VjdG9ycyAqIDUxMjsKKworCWZzX2luZm8tPmZhdF9vZmZzZXQgPSBmYXRfbWluX3Jlc2VydmVkX3NlY3Rvcl9jb3VudCAoZnNfaW5mby0+ZmF0X3R5cGUpOworCWZzX2luZm8tPmRpcl9lbnRyaWVzX3Blcl9jbHVzdGVyCisJCT0gZnNfaW5mby0+Y2x1c3Rlcl9zaXplIC8gc2l6ZW9mIChGYXREaXJFbnRyeSk7CisKKwlpZiAoZnNfaW5mby0+ZmF0X3R5cGUgPT0gRkFUX1RZUEVfRkFUMTYpIHsKKwkJLyogRkFUMTYgKi8KKwkJZnMtPnR5cGUgPSAmZmF0MTZfdHlwZTsKKworCQlpZiAoZnNfaW5mby0+Y2x1c3Rlcl9jb3VudAorCQkJPiBmYXRfbWF4X2NsdXN0ZXJfY291bnQgKGZzX2luZm8tPmZhdF90eXBlKSkgeworCQkJZnNfaW5mby0+Y2x1c3Rlcl9jb3VudAorCQkJCT0gZmF0X21heF9jbHVzdGVyX2NvdW50IChmc19pbmZvLT5mYXRfdHlwZSk7CisJCX0KKworCQlmc19pbmZvLT5yb290X2Rpcl9zZWN0b3JfY291bnQKKwkJCT0gRkFUX1JPT1RfRElSX0VOVFJZX0NPVU5UCisJCQkJLyAoNTEyIC8gc2l6ZW9mIChGYXREaXJFbnRyeSkpOworCQlmc19pbmZvLT5yb290X2Rpcl9lbnRyeV9jb3VudCA9IEZBVF9ST09UX0RJUl9FTlRSWV9DT1VOVDsKKyAgICAgICAgICAgICAgICBmc19pbmZvLT5yb290X2Rpcl9vZmZzZXQKKwkJCT0gZnNfaW5mby0+ZmF0X29mZnNldAorCQkJKyBmc19pbmZvLT5mYXRfc2VjdG9ycyAqIGZzX2luZm8tPmZhdF90YWJsZV9jb3VudDsKKwkJZnNfaW5mby0+Y2x1c3Rlcl9vZmZzZXQKKwkJCT0gZnNfaW5mby0+cm9vdF9kaXJfb2Zmc2V0CisJCQkgICsgZnNfaW5mby0+cm9vdF9kaXJfc2VjdG9yX2NvdW50OworCX0gZWxzZSB7CisJCS8qIEZBVDMyICovCisJCWZzLT50eXBlID0gJmZhdDMyX3R5cGU7CisKKwkJZnNfaW5mby0+aW5mb19zZWN0b3Jfb2Zmc2V0ID0gMTsKKwkJZnNfaW5mby0+Ym9vdF9zZWN0b3JfYmFja3VwX29mZnNldCA9IDY7CisKKwkJZnNfaW5mby0+cm9vdF9kaXJfc2VjdG9yX2NvdW50ID0gMDsKKwkJZnNfaW5mby0+cm9vdF9kaXJfZW50cnlfY291bnQgPSAwOworCQlmc19pbmZvLT5yb290X2Rpcl9vZmZzZXQgPSAwOworCisJCWZzX2luZm8tPmNsdXN0ZXJfb2Zmc2V0CisJCQk9IGZzX2luZm8tPmZhdF9vZmZzZXQKKwkJCSAgKyBmc19pbmZvLT5mYXRfc2VjdG9ycyAqIGZzX2luZm8tPmZhdF90YWJsZV9jb3VudDsKKwl9CisKKwl0YWJsZV9zaXplID0gZnNfaW5mby0+ZmF0X3NlY3RvcnMgKiA1MTIKKwkJICAgICAvIGZhdF90YWJsZV9lbnRyeV9zaXplIChmc19pbmZvLT5mYXRfdHlwZSk7CisJZnNfaW5mby0+ZmF0ID0gZmF0X3RhYmxlX25ldyAoZnNfaW5mby0+ZmF0X3R5cGUsIHRhYmxlX3NpemUpOworCWlmICghZnNfaW5mby0+ZmF0KQorCQlnb3RvIGVycm9yX2ZyZWVfZnM7CisJZmF0X3RhYmxlX3NldF9jbHVzdGVyX2NvdW50IChmc19pbmZvLT5mYXQsIGZzX2luZm8tPmNsdXN0ZXJfY291bnQpOworCWlmICghZmF0X2FsbG9jX2J1ZmZlcnMgKGZzKSkgCisJCWdvdG8gZXJyb3JfZnJlZV9mYXRfdGFibGU7CisKKwlpZiAoZnNfaW5mby0+ZmF0X3R5cGUgPT0gRkFUX1RZUEVfRkFUMzIpIHsKKwkJZnNfaW5mby0+cm9vdF9jbHVzdGVyCisJCQk9IGZhdF90YWJsZV9hbGxvY19jbHVzdGVyIChmc19pbmZvLT5mYXQpOworCQlmYXRfdGFibGVfc2V0X2VvZiAoZnNfaW5mby0+ZmF0LCBmc19pbmZvLT5yb290X2NsdXN0ZXIpOworCQltZW1zZXQgKGZzX2luZm8tPmJ1ZmZlciwgMCwgZnNfaW5mby0+Y2x1c3Rlcl9zaXplKTsKKwkJaWYgKCFmYXRfd3JpdGVfY2x1c3RlciAoZnMsIGZzX2luZm8tPmJ1ZmZlciwKKwkJCQkJZnNfaW5mby0+cm9vdF9jbHVzdGVyKSkKKwkJCXJldHVybiAwOworCX0KKworCWZzX2luZm8tPnNlcmlhbF9udW1iZXIgPSBfZ2VuX25ld19zZXJpYWxfbnVtYmVyICgpOworCisJaWYgKCFmYXRfYm9vdF9zZWN0b3Jfc2V0X2Jvb3RfY29kZSAoJmZzX2luZm8tPmJvb3Rfc2VjdG9yKSkKKwkJZ290byBlcnJvcl9mcmVlX2J1ZmZlcnM7CisJaWYgKCFmYXRfYm9vdF9zZWN0b3JfZ2VuZXJhdGUgKCZmc19pbmZvLT5ib290X3NlY3RvciwgZnMpKQorCQlnb3RvIGVycm9yX2ZyZWVfYnVmZmVyczsKKwlpZiAoIWZhdF9ib290X3NlY3Rvcl93cml0ZSAoJmZzX2luZm8tPmJvb3Rfc2VjdG9yLCBmcykpCisJCWdvdG8gZXJyb3JfZnJlZV9idWZmZXJzOworCWlmIChmc19pbmZvLT5mYXRfdHlwZSA9PSBGQVRfVFlQRV9GQVQzMikgeworCQlpZiAoIWZhdF9pbmZvX3NlY3Rvcl9nZW5lcmF0ZSAoJmZzX2luZm8tPmluZm9fc2VjdG9yLCBmcykpCisJCQlnb3RvIGVycm9yX2ZyZWVfYnVmZmVyczsKKwkJaWYgKCFmYXRfaW5mb19zZWN0b3Jfd3JpdGUgKCZmc19pbmZvLT5pbmZvX3NlY3RvciwgZnMpKQorCQkJZ290byBlcnJvcl9mcmVlX2J1ZmZlcnM7CisJfQorCisJaWYgKCFmYXRfdGFibGVfd3JpdGVfYWxsIChmc19pbmZvLT5mYXQsIGZzKSkKKwkJZ290byBlcnJvcl9mcmVlX2J1ZmZlcnM7CisKKwlpZiAoZnNfaW5mby0+ZmF0X3R5cGUgPT0gRkFUX1RZUEVfRkFUMTYpIHsKKwkJaWYgKCFmYXRfcm9vdF9kaXJfY2xlYXIgKGZzKSkKKwkJCWdvdG8gZXJyb3JfZnJlZV9idWZmZXJzOworCX0KKworCXJldHVybiBmczsKKworZXJyb3JfZnJlZV9idWZmZXJzOgorCWZhdF9mcmVlX2J1ZmZlcnMgKGZzKTsKK2Vycm9yX2ZyZWVfZmF0X3RhYmxlOgorCWZhdF90YWJsZV9kZXN0cm95IChmc19pbmZvLT5mYXQpOworZXJyb3JfZnJlZV9mczoKKwlmYXRfZnJlZSAoZnMpOworZXJyb3I6CisJcmV0dXJuIE5VTEw7Cit9CisKK1BlZEZpbGVTeXN0ZW0qCitmYXRfY3JlYXRlX2ZhdDE2IChQZWRHZW9tZXRyeSogZ2VvbSwgUGVkVGltZXIqIHRpbWVyKQoreworCXJldHVybiBmYXRfY3JlYXRlIChnZW9tLCBGQVRfVFlQRV9GQVQxNiwgdGltZXIpOworfQorCitQZWRGaWxlU3lzdGVtKgorZmF0X2NyZWF0ZV9mYXQzMiAoUGVkR2VvbWV0cnkqIGdlb20sIFBlZFRpbWVyKiB0aW1lcikKK3sKKwlyZXR1cm4gZmF0X2NyZWF0ZSAoZ2VvbSwgRkFUX1RZUEVfRkFUMzIsIHRpbWVyKTsKK30KKworaW50CitmYXRfY2xvc2UgKFBlZEZpbGVTeXN0ZW0qIGZzKQoreworCUZhdFNwZWNpZmljKglmc19pbmZvID0gRkFUX1NQRUNJRklDIChmcyk7CisKKwlmYXRfZnJlZV9idWZmZXJzIChmcyk7CisJZmF0X3RhYmxlX2Rlc3Ryb3kgKGZzX2luZm8tPmZhdCk7CisJZmF0X2ZyZWUgKGZzKTsKKwlyZXR1cm4gMTsKK30KKworLyogSGFjazoganVzdCByZXNpemUgdGhlIGZpbGUgc3lzdGVtIG91dHNpZGUgb2YgaXRzIGJvdW5kYXJpZXMhICovCitQZWRGaWxlU3lzdGVtKgorZmF0X2NvcHkgKGNvbnN0IFBlZEZpbGVTeXN0ZW0qIGZzLCBQZWRHZW9tZXRyeSogZ2VvbSwgUGVkVGltZXIqIHRpbWVyKQoreworCVBlZEZpbGVTeXN0ZW0qCQluZXdfZnM7CisKKwluZXdfZnMgPSBwZWRfZmlsZV9zeXN0ZW1fb3BlbiAoZnMtPmdlb20pOworCWlmICghbmV3X2ZzKQorCQlnb3RvIGVycm9yOworCWlmICghcGVkX2ZpbGVfc3lzdGVtX3Jlc2l6ZSAobmV3X2ZzLCBnZW9tLCB0aW1lcikpCisJCWdvdG8gZXJyb3JfY2xvc2VfbmV3X2ZzOworCXJldHVybiBuZXdfZnM7CisKK2Vycm9yX2Nsb3NlX25ld19mczoKKwlwZWRfZmlsZV9zeXN0ZW1fY2xvc2UgKG5ld19mcyk7CitlcnJvcjoKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorX2NvbXBhcmVfZmF0cyAoUGVkRmlsZVN5c3RlbSogZnMpCit7CisJRmF0U3BlY2lmaWMqCWZzX2luZm8gPSBGQVRfU1BFQ0lGSUMgKGZzKTsKKwlGYXRUYWJsZSoJdGFibGVfY29weTsKKwlGYXRDbHVzdGVyCXRhYmxlX3NpemU7CisJaW50CQlpOworCisJdGFibGVfc2l6ZSA9IGZzX2luZm8tPmZhdF9zZWN0b3JzICogNTEyCisJCSAgICAgLyBmYXRfdGFibGVfZW50cnlfc2l6ZSAoZnNfaW5mby0+ZmF0X3R5cGUpOworCisJdGFibGVfY29weSA9IGZhdF90YWJsZV9uZXcgKGZzX2luZm8tPmZhdF90eXBlLCB0YWJsZV9zaXplKTsKKwlpZiAoIXRhYmxlX2NvcHkpCisJCWdvdG8gZXJyb3I7CisKKwlmb3IgKGkgPSAxOyBpIDwgZnNfaW5mby0+ZmF0X3RhYmxlX2NvdW50OyBpKyspIHsKKwkJaWYgKCFmYXRfdGFibGVfcmVhZCAodGFibGVfY29weSwgZnMsIGkpKQorCQkJZ290byBlcnJvcl9mcmVlX3RhYmxlX2NvcHk7CisJCWlmICghZmF0X3RhYmxlX2NvbXBhcmUgKGZzX2luZm8tPmZhdCwgdGFibGVfY29weSkpIHsKKwkJCWlmIChwZWRfZXhjZXB0aW9uX3Rocm93IChQRURfRVhDRVBUSU9OX0VSUk9SLAorCQkJCVBFRF9FWENFUFRJT05fSUdOT1JFX0NBTkNFTCwKKwkJCQlfKCJUaGUgRkFUcyBkb24ndCBtYXRjaC4gIElmIHlvdSBkb24ndCBrbm93ICIKKwkJCQkgICJ3aGF0IHRoaXMgbWVhbnMsIHRoZW4gc2VsZWN0IGNhbmNlbCwgcnVuICIKKwkJCQkgICJzY2FuZGlzayBvbiB0aGUgZmlsZSBzeXN0ZW0sIGFuZCB0aGVuIGNvbWUgIgorCQkJCSAgImJhY2suIikpCisJCQkgICAgIT0gUEVEX0VYQ0VQVElPTl9JR05PUkUpCisJCQkJZ290byBlcnJvcl9mcmVlX3RhYmxlX2NvcHk7CisJCX0KKwl9CisKKwlmYXRfdGFibGVfZGVzdHJveSAodGFibGVfY29weSk7CisJcmV0dXJuIDE7CisKK2Vycm9yX2ZyZWVfdGFibGVfY29weToKKwlmYXRfdGFibGVfZGVzdHJveSAodGFibGVfY29weSk7CitlcnJvcjoKKwlyZXR1cm4gMDsKK30KKworaW50CitmYXRfY2hlY2sgKFBlZEZpbGVTeXN0ZW0qIGZzLCBQZWRUaW1lciogdGltZXIpCit7CisJRmF0U3BlY2lmaWMqCWZzX2luZm8gPSBGQVRfU1BFQ0lGSUMgKGZzKTsKKwlQZWRTZWN0b3IJY2x1c3Rlcl9zZWN0b3JzOworCUZhdENsdXN0ZXIJY2x1c3Rlcl9jb3VudDsKKwlQZWRTZWN0b3IJZmF0X3NlY3RvcnM7CisJUGVkU2VjdG9yCWFsaWduX3NlY3RvcnM7CisJRmF0Q2x1c3RlcglpbmZvX2ZyZWVfY2x1c3RlcnM7CisKKwlhbGlnbl9zZWN0b3JzID0gZnNfaW5mby0+ZmF0X29mZnNldAorCQkJLSBmYXRfbWluX3Jlc2VydmVkX3NlY3Rvcl9jb3VudCAoZnNfaW5mby0+ZmF0X3R5cGUpOworCisJaWYgKCFmYXRfY2FsY19zaXplcyAoZnMtPmdlb20tPmxlbmd0aCwKKwkJCSAgICAgYWxpZ25fc2VjdG9ycywKKwkJCSAgICAgZnNfaW5mby0+ZmF0X3R5cGUsCisJCQkgICAgIGZzX2luZm8tPnJvb3RfZGlyX3NlY3Rvcl9jb3VudCwKKwkJCSAgICAgJmNsdXN0ZXJfc2VjdG9ycywKKwkJCSAgICAgJmNsdXN0ZXJfY291bnQsCisJCQkgICAgICZmYXRfc2VjdG9ycykpIHsKKwkJaWYgKHBlZF9leGNlcHRpb25fdGhyb3cgKFBFRF9FWENFUFRJT05fQlVHLAorCQkJUEVEX0VYQ0VQVElPTl9JR05PUkVfQ0FOQ0VMLAorCQkJXygiVGhlcmUgYXJlIG5vIHBvc3NpYmxlIGNvbmZpZ3VyYXRpb25zIGZvciB0aGlzIEZBVCAiCisJCQkgICJ0eXBlLiIpKQorCQkJCSE9IFBFRF9FWENFUFRJT05fSUdOT1JFKQorCQkJZ290byBlcnJvcjsKKwl9CisKKwlpZiAoZnNfaW5mby0+ZmF0X3R5cGUgPT0gRkFUX1RZUEVfRkFUMTYpIHsKKwkJaWYgKGNsdXN0ZXJfc2VjdG9ycyAhPSBmc19pbmZvLT5jbHVzdGVyX3NlY3RvcnMKKwkJICAgIHx8IGNsdXN0ZXJfY291bnQgIT0gZnNfaW5mby0+Y2x1c3Rlcl9jb3VudAorCQkgICAgfHwgZmF0X3NlY3RvcnMgIT0gZnNfaW5mby0+ZmF0X3NlY3RvcnMpIHsKKwkJCWlmIChwZWRfZXhjZXB0aW9uX3Rocm93IChQRURfRVhDRVBUSU9OX1dBUk5JTkcsCisJCQkJUEVEX0VYQ0VQVElPTl9JR05PUkVfQ0FOQ0VMLAorCQkJCV8oIkZpbGUgc3lzdGVtIGRvZXNuJ3QgaGF2ZSBleHBlY3RlZCBzaXplcyBmb3IgIgorCQkJCSAgIldpbmRvd3MgdG8gbGlrZSBpdC4gICIKKwkJCQkgICJDbHVzdGVyIHNpemUgaXMgJWRrICglZGsgZXhwZWN0ZWQpOyAiCisJCQkJICAibnVtYmVyIG9mIGNsdXN0ZXJzIGlzICVkICglZCBleHBlY3RlZCk7ICIKKwkJCQkgICJzaXplIG9mIEZBVHMgaXMgJWQgc2VjdG9ycyAoJWQgZXhwZWN0ZWQpLiIpLAorCQkJCShpbnQpIGZzX2luZm8tPmNsdXN0ZXJfc2VjdG9ycyAvIDIsCisJCQkJCShpbnQpIGNsdXN0ZXJfc2VjdG9ycyAvIDIsCisJCQkJKGludCkgZnNfaW5mby0+Y2x1c3Rlcl9jb3VudCwKKwkJCQkJKGludCkgY2x1c3Rlcl9jb3VudCwKKwkJCQkoaW50KSBmc19pbmZvLT5mYXRfc2VjdG9ycywKKwkJCQkJKGludCkgZmF0X3NlY3RvcnMpCisJCQkJCSE9IFBFRF9FWENFUFRJT05fSUdOT1JFKQorCQkJCWdvdG8gZXJyb3I7CisJCX0KKwl9IAorCisJaWYgKGZzX2luZm8tPmZhdF90eXBlID09IEZBVF9UWVBFX0ZBVDMyKSB7CisJCWluZm9fZnJlZV9jbHVzdGVycworCQkJPSBQRURfTEUzMl9UT19DUFUgKGZzX2luZm8tPmluZm9fc2VjdG9yLmZyZWVfY2x1c3RlcnMpOworCQlpZiAoaW5mb19mcmVlX2NsdXN0ZXJzICE9IChGYXRDbHVzdGVyKSAtMQorCQkgICAgJiYgaW5mb19mcmVlX2NsdXN0ZXJzICE9IGZzX2luZm8tPmZhdC0+ZnJlZV9jbHVzdGVyX2NvdW50KSB7CisJCQlpZiAocGVkX2V4Y2VwdGlvbl90aHJvdyAoUEVEX0VYQ0VQVElPTl9XQVJOSU5HLAorCQkJCVBFRF9FWENFUFRJT05fSUdOT1JFX0NBTkNFTCwKKwkJCQlfKCJGaWxlIHN5c3RlbSBpcyByZXBvcnRpbmcgdGhlIGZyZWUgc3BhY2UgYXMgIgorCQkJCSAgIiVkIGNsdXN0ZXJzLCBub3QgJWQgY2x1c3RlcnMuIiksCisJCQkJaW5mb19mcmVlX2NsdXN0ZXJzLAorCQkJCWZzX2luZm8tPmZhdC0+ZnJlZV9jbHVzdGVyX2NvdW50KQorCQkJCQkhPSBQRURfRVhDRVBUSU9OX0lHTk9SRSkKKwkJCQlnb3RvIGVycm9yOworCQl9CisJfQorCisJaWYgKCFfY29tcGFyZV9mYXRzIChmcykpCisJCWdvdG8gZXJyb3I7CisKKwlmcy0+Y2hlY2tlZCA9IDE7CisJcmV0dXJuIDE7CS8qIGV4aXN0ZW5jZSBvZiBmcyBpbXBsaWVzIGNvbnNpc3RlbmN5IDstKSAqLworCitlcnJvcjoKKwlyZXR1cm4gMDsKK30KKworLyogQ2FsY3VsYXRlcyBob3cgbXVjaCBzcGFjZSB0aGVyZSB3aWxsIGJlIGluIGNsdXN0ZXJzIGluOgorICogCW9sZF9mcyBpbnRlcnNlY3QgdGhlLW5ldy1mcworICovCitzdGF0aWMgUGVkU2VjdG9yCitfY2FsY19yZXNpemVfZGF0YV9zaXplICgKKwljb25zdCBQZWRGaWxlU3lzdGVtKiBvbGRfZnMsCisJUGVkU2VjdG9yIG5ld19jbHVzdGVyX3NlY3RvcnMsCisJRmF0Q2x1c3RlciBuZXdfY2x1c3Rlcl9jb3VudCwKKwlQZWRTZWN0b3IgbmV3X2ZhdF9zaXplKQoreworCUZhdFNwZWNpZmljKglvbGRfZnNfaW5mbyA9IEZBVF9TUEVDSUZJQyAob2xkX2ZzKTsKKwlQZWRTZWN0b3IJZmF0X3NpemVfZGVsdGE7CisKKwlmYXRfc2l6ZV9kZWx0YSA9IG9sZF9mc19pbmZvLT5mYXRfc2VjdG9ycyAtIG5ld19mYXRfc2l6ZTsKKwlyZXR1cm4gbmV3X2NsdXN0ZXJfc2VjdG9ycyAqIG5ld19jbHVzdGVyX2NvdW50IC0gZmF0X3NpemVfZGVsdGEgKiAyOworfQorCitzdGF0aWMgaW50CitfdGVzdF9yZXNpemVfc2l6ZSAoY29uc3QgUGVkRmlsZVN5c3RlbSogZnMsCisJCSAgIFBlZFNlY3RvciBsZW5ndGgsIFBlZFNlY3RvciBtaW5fZGF0YV9zaXplKQoreworCUZhdFNwZWNpZmljKglmc19pbmZvID0gRkFUX1NQRUNJRklDIChmcyk7CisJUGVkR2VvbWV0cnkJZ2VvbTsKKyAgICAgICAgUGVkU2VjdG9yCV9jbHVzdGVyX3NlY3RvcnM7CisJRmF0Q2x1c3RlcglfY2x1c3Rlcl9jb3VudDsKKwlQZWRTZWN0b3IJX2ZhdF9zaXplOworCisJcGVkX2dlb21ldHJ5X2luaXQgKCZnZW9tLCBmcy0+Z2VvbS0+ZGV2LCBmcy0+Z2VvbS0+c3RhcnQsIGxlbmd0aCk7CisKKwlpZiAoZmF0X2NhbGNfcmVzaXplX3NpemVzICgKKwkJCQkmZ2VvbSwKKwkJCQlmc19pbmZvLT5jbHVzdGVyX3NlY3RvcnMsCisJCQkJRkFUX1RZUEVfRkFUMTYsCisJCQkJZnNfaW5mby0+cm9vdF9kaXJfc2VjdG9yX2NvdW50LAorCQkJCWZzX2luZm8tPmNsdXN0ZXJfc2VjdG9ycywKKwkJCQkmX2NsdXN0ZXJfc2VjdG9ycywKKwkJCQkmX2NsdXN0ZXJfY291bnQsCisJCQkJJl9mYXRfc2l6ZSkKKwkgICAgJiYgX2NhbGNfcmVzaXplX2RhdGFfc2l6ZSAoZnMsIF9jbHVzdGVyX3NlY3RvcnMsIF9jbHVzdGVyX2NvdW50LAorCQkgICAgCQkgICAgICAgX2ZhdF9zaXplKQorCSAgICAJCT49IG1pbl9kYXRhX3NpemUpCisJCXJldHVybiAxOworCisJaWYgKGZhdF9jYWxjX3Jlc2l6ZV9zaXplcyAoCisJCQkJJmdlb20sCisJCQkJZnNfaW5mby0+Y2x1c3Rlcl9zZWN0b3JzLAorCQkJCUZBVF9UWVBFX0ZBVDMyLAorCQkJCTAsCisJCQkJZnNfaW5mby0+Y2x1c3Rlcl9zZWN0b3JzLAorCQkJCSZfY2x1c3Rlcl9zZWN0b3JzLAorCQkJCSZfY2x1c3Rlcl9jb3VudCwKKwkJCQkmX2ZhdF9zaXplKQorCSAgICAmJiBfY2FsY19yZXNpemVfZGF0YV9zaXplIChmcywgX2NsdXN0ZXJfc2VjdG9ycywgX2NsdXN0ZXJfY291bnQsCisJCSAgICAJCSAgICAgICBfZmF0X3NpemUpCisJICAgIAkJPj0gbWluX2RhdGFfc2l6ZSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworLyogZG9lcyBhIGJpbmFyeSBzZWFyY2ggKCEpIGZvciB0aGUgbWluaW51bSBzaXplLiAgVG9vIGhhcmQgdG8gY29tcHV0ZSBkaXJlY3RseQorICogKHNlZSBjYWxjX3NpemVzKCkgZm9yIHdoeSEpCisgKi8KK3N0YXRpYyBQZWRTZWN0b3IKK19nZXRfbWluX3Jlc2l6ZV9zaXplIChjb25zdCBQZWRGaWxlU3lzdGVtKiBmcywgUGVkU2VjdG9yIG1pbl9kYXRhX3NpemUpCit7CisJUGVkU2VjdG9yCW1pbl9sZW5ndGggPSAwOworCVBlZFNlY3RvcgltYXhfbGVuZ3RoID0gZnMtPmdlb20tPmxlbmd0aDsKKwlQZWRTZWN0b3IJbGVuZ3RoOworCisJd2hpbGUgKG1pbl9sZW5ndGggPCBtYXhfbGVuZ3RoIC0gMSkgeworCQlsZW5ndGggPSAobWluX2xlbmd0aCArIG1heF9sZW5ndGgpIC8gMjsKKwkJaWYgKF90ZXN0X3Jlc2l6ZV9zaXplIChmcywgbGVuZ3RoLCBtaW5fZGF0YV9zaXplKSkKKwkJCW1heF9sZW5ndGggPSBsZW5ndGg7CisJCWVsc2UKKwkJCW1pbl9sZW5ndGggPSBsZW5ndGg7CisJfQorCisvKiBhZGRzIGEgYml0IG9mIGxlZXdheSAoNjQgc2VjdG9ycyksIGZvciByZXNvbHZpbmcgZXh0cmEgaXNzdWVzLCBsaWtlIHJvb3QKKyAqIGRpcmVjdG9yeSBhbGxvY2F0aW9uLCB0aGF0IGFyZW4ndCBjb3ZlcmVkIGhlcmUuIAorICovCisJcmV0dXJuIG1heF9sZW5ndGggKyA2NDsKK30KKworUGVkQ29uc3RyYWludCoKK2ZhdF9nZXRfY29weV9jb25zdHJhaW50IChjb25zdCBQZWRGaWxlU3lzdGVtKiBmcywgY29uc3QgUGVkRGV2aWNlKiBkZXYpCit7CisJRmF0U3BlY2lmaWMqCWZzX2luZm8gPSBGQVRfU1BFQ0lGSUMgKGZzKTsKKwlQZWRHZW9tZXRyeQlmdWxsX2RldjsKKwlQZWRTZWN0b3IJbWluX2NsdXN0ZXJfY291bnQ7CisJRmF0Q2x1c3Rlcgl1c2VkX2NsdXN0ZXJzOworCVBlZFNlY3RvcgltaW5fZGF0YV9zaXplOworCisJaWYgKCFwZWRfZ2VvbWV0cnlfaW5pdCAoJmZ1bGxfZGV2LCBkZXYsIDAsIGRldi0+bGVuZ3RoIC0gMSkpCisJCXJldHVybiBOVUxMOworCisJdXNlZF9jbHVzdGVycyA9IGZzX2luZm8tPmZhdC0+Y2x1c3Rlcl9jb3VudAorCQkJLSBmc19pbmZvLT5mYXQtPmZyZWVfY2x1c3Rlcl9jb3VudDsKKwltaW5fY2x1c3Rlcl9jb3VudCA9IHVzZWRfY2x1c3RlcnMgKyBmc19pbmZvLT50b3RhbF9kaXJfY2x1c3RlcnM7CisJbWluX2RhdGFfc2l6ZSA9IG1pbl9jbHVzdGVyX2NvdW50ICogZnNfaW5mby0+Y2x1c3Rlcl9zZWN0b3JzOworCisJcmV0dXJuIHBlZF9jb25zdHJhaW50X25ldyAocGVkX2FsaWdubWVudF9hbnksIHBlZF9hbGlnbm1lbnRfYW55LAorCQkJCSAgICZmdWxsX2RldiwgJmZ1bGxfZGV2LAorCQkJCSAgIF9nZXRfbWluX3Jlc2l6ZV9zaXplIChmcywgbWluX2RhdGFfc2l6ZSksCisJCQkJICAgZGV2LT5sZW5ndGgpOworfQorCitQZWRDb25zdHJhaW50KgorZmF0X2dldF9yZXNpemVfY29uc3RyYWludCAoY29uc3QgUGVkRmlsZVN5c3RlbSogZnMpCit7CisJcmV0dXJuIGZhdF9nZXRfY29weV9jb25zdHJhaW50IChmcywgZnMtPmdlb20tPmRldik7Cit9CisKKy8qIEZJWE1FOiBmYXRfY2FsY19zaXplcygpIG5lZWRzIHRvIHNheSAidG9vIGJpZyIgb3IgInRvbyBzbWFsbCIsIG9yCisgKiBzb21ldGhpbmcuICBUaGlzIGlzIGEgcmVhbGx5IGRpZmZpY3VsdCAobWF0aHMpIHByb2JsZW0gdG8gZG8KKyAqIG5pY2VseS4uLgorICogCVNvLCB0aGlzIGFsZ29yaXRobSB3b3JrcyBpZiBkZXYtPmxlbmd0aCAvIDIgaXMgYSB2YWxpZCBmYXRfdHlwZQorICogc2l6ZS4gIChXaGljaCBpcyBob3cgSSBnb3QgdGhlIG1hZ2ljIG51bWJlcnMgYmVsb3cpCisgKi8KKyNpZiAwCisvKiByZXR1cm5zOiAtMSB0b28gc21hbGwsIDAgb2ssIDEgdG9vIGJpZyAqLworc3RhdGljIGludAorX3Rlc3RfY3JlYXRlX3NpemUgKFBlZFNlY3RvciBsZW5ndGgsIEZhdFR5cGUgZmF0X3R5cGUsCisJCSAgIFBlZFNlY3RvciBjbHVzdGVyX3NlY3RvcnMsIFBlZFNlY3RvciBjbHVzdGVyX2NvdW50KQoreworCVBlZFNlY3Rvcglyb290ZGlyX3NlY3RvcnM7CisJUGVkU2VjdG9yCV9jbHVzdGVyX3NlY3RvcnM7CisJRmF0Q2x1c3RlcglfY2x1c3Rlcl9jb3VudDsKKwlQZWRTZWN0b3IJX2ZhdF9zaXplOworCisJcm9vdGRpcl9zZWN0b3JzID0gKGZhdF90eXBlID09IEZBVF9UWVBFX0ZBVDE2KSA/IDE2IDogMDsKKworCWlmICghZmF0X2NhbGNfc2l6ZXMgKGxlbmd0aCwgMCwgZmF0X3R5cGUsIHJvb3RkaXJfc2VjdG9ycywKKwkJCSAgICAgJl9jbHVzdGVyX3NlY3RvcnMsICZfY2x1c3Rlcl9jb3VudCwgJl9mYXRfc2l6ZSkpCisJCXJldHVybiAtMTsgLy8gWFhYOiBkb2Vzbid0IHdvcmsuLi4gY2FuJ3Qgc2VlIGEgYmV0dGVyIHdheSEKKworCWlmIChfY2x1c3Rlcl9zZWN0b3JzIDwgY2x1c3Rlcl9zZWN0b3JzKQorCQlyZXR1cm4gLTE7CisJaWYgKF9jbHVzdGVyX3NlY3RvcnMgPiBjbHVzdGVyX3NlY3RvcnMpCisJCXJldHVybiAxOworCisJaWYgKF9jbHVzdGVyX2NvdW50IDwgY2x1c3Rlcl9jb3VudCkKKwkJcmV0dXJuIC0xOworCWlmIChfY2x1c3Rlcl9jb3VudCA+IGNsdXN0ZXJfY291bnQpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBQZWRTZWN0b3IKK19nZXRfY3JlYXRlX3NpemUgKFBlZFNlY3RvciB1cHBlcl9ib3VuZCwgRmF0VHlwZSBmYXRfdHlwZSwKKwkJICBQZWRTZWN0b3IgY2x1c3Rlcl9zZWN0b3JzLCBGYXRDbHVzdGVyIGNsdXN0ZXJfY291bnQpCit7CisJUGVkU2VjdG9yCW1pbl9sZW5ndGggPSAwOworCVBlZFNlY3RvcgltYXhfbGVuZ3RoID0gdXBwZXJfYm91bmQ7CisJUGVkU2VjdG9yCWxlbmd0aDsKKworCXdoaWxlICgxKSB7CisJCWxlbmd0aCA9IChtaW5fbGVuZ3RoICsgbWF4X2xlbmd0aCkgLyAyOworCQlzd2l0Y2ggKF90ZXN0X2NyZWF0ZV9zaXplIChsZW5ndGgsIGZhdF90eXBlLCBjbHVzdGVyX3NlY3RvcnMsCisJCQkJCSAgIGNsdXN0ZXJfY291bnQpKSB7CisJCQljYXNlIC0xOiBtaW5fbGVuZ3RoID0gbGVuZ3RoOyBicmVhazsKKwkJCWNhc2UgMDogcmV0dXJuIGxlbmd0aDsKKwkJCWNhc2UgMTogbWF4X2xlbmd0aCA9IGxlbmd0aDsgYnJlYWs7CisJCX0KKwkJLyogaGFjay4uLiB3b24ndCBhbHdheXMgYmUgYWJsZSB0byBnZXQgbWF4IGNsdXN0ZXIgY291bnQKKwkJICogd2l0aCBtYXggY2x1c3RlciBzaXplLCBldGMuICovCisJCWlmIChtYXhfbGVuZ3RoIC0gbWluX2xlbmd0aCA9PSAxKQorCQkJcmV0dXJuIG1pbl9sZW5ndGg7CisJfQorCisJcmV0dXJuIDA7CS8qIHNodXQgZ2NjIHVwICovCit9CisjZW5kaWYKKworUGVkQ29uc3RyYWludCoKK2ZhdF9nZXRfY3JlYXRlX2NvbnN0cmFpbnRfZmF0MTYgKGNvbnN0IFBlZERldmljZSogZGV2KQoreworCVBlZEdlb21ldHJ5CWZ1bGxfZGV2OworCVBlZFNlY3RvcgltaW5fc2l6ZTsKKwlQZWRTZWN0b3IJbWF4X3NpemU7CisKKwlpZiAoIXBlZF9nZW9tZXRyeV9pbml0ICgmZnVsbF9kZXYsIGRldiwgMCwgZGV2LT5sZW5ndGggLSAxKSkKKwkJcmV0dXJuIE5VTEw7CisKKyNpZiAwCisJbWluX3NpemUgPSBfZ2V0X2NyZWF0ZV9zaXplIChkZXYtPmxlbmd0aCwgRkFUX1RZUEVfRkFUMTYsCisJCSAgICAgICAJCSAgICAgZmF0X21pbl9jbHVzdGVyX3NpemUgKEZBVF9UWVBFX0ZBVDE2KSwKKwkJCQkgICAgIGZhdF9taW5fY2x1c3Rlcl9jb3VudCAoRkFUX1RZUEVfRkFUMTYpKTsKKwltYXhfc2l6ZSA9IF9nZXRfY3JlYXRlX3NpemUgKGRldi0+bGVuZ3RoLCBGQVRfVFlQRV9GQVQxNiwKKwkJCQkgICAgIGZhdF9tYXhfY2x1c3Rlcl9zaXplIChGQVRfVFlQRV9GQVQxNiksCisJCQkJICAgICBmYXRfbWF4X2NsdXN0ZXJfY291bnQgKEZBVF9UWVBFX0ZBVDE2KSk7CisJaWYgKCFtaW5fc2l6ZSkKKwkJcmV0dXJuIE5VTEw7CisjZWxzZQorCW1pbl9zaXplID0gNjU3OTQ7CisJbWF4X3NpemUgPSAyMDk3MTUzOworI2VuZGlmCisKKwlyZXR1cm4gcGVkX2NvbnN0cmFpbnRfbmV3ICgKKwkJCXBlZF9hbGlnbm1lbnRfYW55LCBwZWRfYWxpZ25tZW50X2FueSwKKwkJCSZmdWxsX2RldiwgJmZ1bGxfZGV2LAorCQkJbWluX3NpemUsIG1heF9zaXplKTsKK30KKworUGVkQ29uc3RyYWludCoKK2ZhdF9nZXRfY3JlYXRlX2NvbnN0cmFpbnRfZmF0MzIgKGNvbnN0IFBlZERldmljZSogZGV2KQoreworCVBlZEdlb21ldHJ5CWZ1bGxfZGV2OworCVBlZFNlY3RvcgltaW5fc2l6ZTsKKworCWlmICghcGVkX2dlb21ldHJ5X2luaXQgKCZmdWxsX2RldiwgZGV2LCAwLCBkZXYtPmxlbmd0aCAtIDEpKQorCQlyZXR1cm4gTlVMTDsKKworI2lmIDAKKwltaW5fc2l6ZSA9IF9nZXRfY3JlYXRlX3NpemUgKGRldi0+bGVuZ3RoLCBGQVRfVFlQRV9GQVQzMiwKKwkJICAgICAgIAkJICAgICBmYXRfbWluX2NsdXN0ZXJfc2l6ZSAoRkFUX1RZUEVfRkFUMzIpLAorCQkJCSAgICAgZmF0X21pbl9jbHVzdGVyX2NvdW50IChGQVRfVFlQRV9GQVQzMikpOworCWlmICghbWluX3NpemUpCisJCXJldHVybiBOVUxMOworI2Vsc2UKKwltaW5fc2l6ZSA9IDUyNTIyNDsKKyNlbmRpZgorCisJcmV0dXJuIHBlZF9jb25zdHJhaW50X25ldyAoCisJCQlwZWRfYWxpZ25tZW50X2FueSwgcGVkX2FsaWdubWVudF9hbnksCisJCQkmZnVsbF9kZXYsICZmdWxsX2RldiwKKwkJCW1pbl9zaXplLCBkZXYtPmxlbmd0aCk7Cit9CisjZW5kaWYgLyogIURJU0NPVkVSX09OTFkgKi8KKworc3RhdGljIFBlZEZpbGVTeXN0ZW1PcHMgZmF0MTZfb3BzID0geworCXByb2JlOgkJZmF0X3Byb2JlX2ZhdDE2LAorI2lmbmRlZiBESVNDT1ZFUl9PTkxZCisJY2xvYmJlcjoJZmF0X2Nsb2JiZXIsCisJb3BlbjoJCWZhdF9vcGVuLAorCWNyZWF0ZToJCWZhdF9jcmVhdGVfZmF0MTYsCisJY2xvc2U6CQlmYXRfY2xvc2UsCisJY2hlY2s6CQlmYXRfY2hlY2ssCisJcmVzaXplOgkJZmF0X3Jlc2l6ZSwKKwljb3B5OgkJZmF0X2NvcHksCisJZ2V0X2NyZWF0ZV9jb25zdHJhaW50OglmYXRfZ2V0X2NyZWF0ZV9jb25zdHJhaW50X2ZhdDE2LAorCWdldF9yZXNpemVfY29uc3RyYWludDoJZmF0X2dldF9yZXNpemVfY29uc3RyYWludCwKKwlnZXRfY29weV9jb25zdHJhaW50OglmYXRfZ2V0X2NvcHlfY29uc3RyYWludCwKKyNlbHNlIC8qICFESVNDT1ZFUl9PTkxZICovCisJY2xvYmJlcjoJTlVMTCwKKwlvcGVuOgkJTlVMTCwKKwljcmVhdGU6CQlOVUxMLAorCWNsb3NlOgkJTlVMTCwKKwljaGVjazoJCU5VTEwsCisJcmVzaXplOgkJTlVMTCwKKwljb3B5OgkJTlVMTCwKKwlnZXRfY3JlYXRlX2NvbnN0cmFpbnQ6CU5VTEwsCisJZ2V0X3Jlc2l6ZV9jb25zdHJhaW50OglOVUxMLAorCWdldF9jb3B5X2NvbnN0cmFpbnQ6CU5VTEwsCisjZW5kaWYgLyogIURJU0NPVkVSX09OTFkgKi8KK307CisKK3N0YXRpYyBQZWRGaWxlU3lzdGVtT3BzIGZhdDMyX29wcyA9IHsKKwlwcm9iZToJCWZhdF9wcm9iZV9mYXQzMiwKKyNpZm5kZWYgRElTQ09WRVJfT05MWQorCWNsb2JiZXI6CWZhdF9jbG9iYmVyLAorCW9wZW46CQlmYXRfb3BlbiwKKwljcmVhdGU6CQlmYXRfY3JlYXRlX2ZhdDMyLAorCWNsb3NlOgkJZmF0X2Nsb3NlLAorCWNoZWNrOgkJZmF0X2NoZWNrLAorCXJlc2l6ZToJCWZhdF9yZXNpemUsCisJY29weToJCWZhdF9jb3B5LAorCWdldF9jcmVhdGVfY29uc3RyYWludDoJZmF0X2dldF9jcmVhdGVfY29uc3RyYWludF9mYXQzMiwKKwlnZXRfcmVzaXplX2NvbnN0cmFpbnQ6CWZhdF9nZXRfcmVzaXplX2NvbnN0cmFpbnQsCisJZ2V0X2NvcHlfY29uc3RyYWludDoJZmF0X2dldF9jb3B5X2NvbnN0cmFpbnQsCisjZWxzZSAvKiAhRElTQ09WRVJfT05MWSAqLworCWNsb2JiZXI6CU5VTEwsCisJb3BlbjoJCU5VTEwsCisJY3JlYXRlOgkJTlVMTCwKKwljbG9zZToJCU5VTEwsCisJY2hlY2s6CQlOVUxMLAorCXJlc2l6ZToJCU5VTEwsCisJY29weToJCU5VTEwsCisJZ2V0X2NyZWF0ZV9jb25zdHJhaW50OglOVUxMLAorCWdldF9yZXNpemVfY29uc3RyYWludDoJTlVMTCwKKwlnZXRfY29weV9jb25zdHJhaW50OglOVUxMLAorI2VuZGlmIC8qICFESVNDT1ZFUl9PTkxZICovCit9OworCisjZGVmaW5lIEZBVF9CTE9DS19TSVpFUyAoKGludFsyXSl7NTEyLCAwfSkKKworUGVkRmlsZVN5c3RlbVR5cGUgZmF0MTZfdHlwZSA9IHsKKwluZXh0OgkgICAgICAgIE5VTEwsCisJb3BzOgkgICAgICAgICZmYXQxNl9vcHMsCisJbmFtZToJICAgICAgICAiZmF0MTYiLAorICAgICAgICBibG9ja19zaXplczogICAgRkFUX0JMT0NLX1NJWkVTCit9OworCitQZWRGaWxlU3lzdGVtVHlwZSBmYXQzMl90eXBlID0geworCW5leHQ6CSAgICAgICAgTlVMTCwKKwlvcHM6CSAgICAgICAgJmZhdDMyX29wcywKKwluYW1lOgkgICAgICAgICJmYXQzMiIsCisgICAgICAgIGJsb2NrX3NpemVzOiAgICBGQVRfQkxPQ0tfU0laRVMKK307CisKK3ZvaWQKK3BlZF9maWxlX3N5c3RlbV9mYXRfaW5pdCAoKQoreworCWlmIChzaXplb2YgKEZhdEJvb3RTZWN0b3IpICE9IDUxMikgeworCQlwZWRfZXhjZXB0aW9uX3Rocm93IChQRURfRVhDRVBUSU9OX0JVRywgUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQlfKCJHTlUgUGFydGVkIHdhcyBtaXNjb21waWxlZDogdGhlIEZBVCBib290IHNlY3RvciAiCisJCQkic2hvdWxkIGJlIDUxMiBieXRlcy4gIEZBVCBzdXBwb3J0IHdpbGwgYmUgZGlzYWJsZWQuIikpOworCX0gZWxzZSB7CisJCXBlZF9maWxlX3N5c3RlbV90eXBlX3JlZ2lzdGVyICgmZmF0MTZfdHlwZSk7CisJCXBlZF9maWxlX3N5c3RlbV90eXBlX3JlZ2lzdGVyICgmZmF0MzJfdHlwZSk7CisJfQorfQorCit2b2lkCitwZWRfZmlsZV9zeXN0ZW1fZmF0X2RvbmUgKCkKK3sKKwlwZWRfZmlsZV9zeXN0ZW1fdHlwZV91bnJlZ2lzdGVyICgmZmF0MTZfdHlwZSk7CisJcGVkX2ZpbGVfc3lzdGVtX3R5cGVfdW5yZWdpc3RlciAoJmZhdDMyX3R5cGUpOworfQorCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2ZhdC9mYXQuaCBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvZmF0L2ZhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxMDEzMjgKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2ZhdC9mYXQuaApAQCAtMCwwICsxLDE2MSBAQAorLyoKKyAgICBsaWJwYXJ0ZWQKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCisqLworCisjaWZuZGVmIEZBVF9IX0lOQ0xVREVECisjZGVmaW5lIEZBVF9IX0lOQ0xVREVECisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworI2luY2x1ZGUgPHBhcnRlZC9wYXJ0ZWQuaD4KKyNpbmNsdWRlIDxwYXJ0ZWQvZW5kaWFuLmg+CisjaW5jbHVkZSA8cGFydGVkL2RlYnVnLmg+CisKKyNpZiBFTkFCTEVfTkxTCisjICBpbmNsdWRlIDxsaWJpbnRsLmg+CisjICBkZWZpbmUgXyhTdHJpbmcpIGRnZXR0ZXh0IChQQUNLQUdFLCBTdHJpbmcpCisjZWxzZQorIyAgZGVmaW5lIF8oU3RyaW5nKSAoU3RyaW5nKQorI2VuZGlmIC8qIEVOQUJMRV9OTFMgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKworI2RlZmluZSBCVUZGRVJfU0laRSAgMTAyNAkvKiBidWZmZXIgc2l6ZSBpbiBzZWN0b3JzICg1MTIgYnl0ZXMpICovCisKK3R5cGVkZWYgdWludDMyX3QJCUZhdENsdXN0ZXI7Cit0eXBlZGVmIGludDMyX3QJCQlGYXRGcmFnbWVudDsKKworZW51bSBfRmF0VHlwZSB7CisJRkFUX1RZUEVfRkFUMTIsCisJRkFUX1RZUEVfRkFUMTYsCisJRkFUX1RZUEVfRkFUMzIKK307Cit0eXBlZGVmIGVudW0gX0ZhdFR5cGUJCUZhdFR5cGU7CisKK3R5cGVkZWYgc3RydWN0IF9GYXRTcGVjaWZpYwlGYXRTcGVjaWZpYzsKK3R5cGVkZWYgc3RydWN0IF9GYXREaXJFbnRyeQlGYXREaXJFbnRyeTsKKworLyogRklYTUU6IFlVQ0tZICovCisjaW5jbHVkZSAidGFibGUuaCIKKyNpbmNsdWRlICJib290c2VjdG9yLmgiCisjaW5jbHVkZSAiY29udGV4dC5oIgorI2luY2x1ZGUgImZhdGlvLmgiCisjaW5jbHVkZSAidHJhdmVyc2UuaCIKKyNpbmNsdWRlICJjYWxjLmgiCisjaW5jbHVkZSAiY291bnQuaCIKKyNpbmNsdWRlICJjbHN0ZHVwLmgiCisKK3N0cnVjdCBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgX0ZhdERpckVudHJ5IHsKKwljaGFyCQluYW1lWzhdOworCXVpbnQ4X3QJCWV4dGVuc2lvblszXTsKKwl1aW50OF90CQlhdHRyaWJ1dGVzOworCXVpbnQ4X3QJCWlzX3VwcGVyX2Nhc2VfbmFtZTsKKwl1aW50OF90CQljcmVhdGlvbl90aW1lX2xvdzsgICAgICAvKiBtaWxsaXNlY29uZHMgKi8KKwl1aW50MTZfdAljcmVhdGlvbl90aW1lX2hpZ2g7CisJdWludDE2X3QJY3JlYXRpb25fZGF0ZTsKKwl1aW50MTZfdAlhY2Nlc3NfZGF0ZTsKKwl1aW50MTZfdAlmaXJzdF9jbHVzdGVyX2hpZ2g7ICAgICAvKiBmb3IgRkFUMzIgKi8KKwl1aW50MTZfdAl0aW1lOworCXVpbnQxNl90CWRhdGU7CisJdWludDE2X3QJZmlyc3RfY2x1c3RlcjsKKwl1aW50MzJfdAlsZW5ndGg7Cit9OworCitzdHJ1Y3QgX0ZhdFNwZWNpZmljIHsKKwlGYXRCb290U2VjdG9yCWJvb3Rfc2VjdG9yOyAgICAvKiBzdHJ1Y3R1cmUgb2YgYm9vdCBzZWN0b3IgKi8KKwlGYXRJbmZvU2VjdG9yCWluZm9fc2VjdG9yOyAgICAvKiBmYXQzMi1vbmx5IGluZm9ybWF0aW9uIHNlY3RvciAqLworCisJaW50CQlsb2dpY2FsX3NlY3Rvcl9zaXplOwkvKiBpbGxvZ2ljYWwgc2VjdG9yIHNpemUgOi0pICovCisJUGVkU2VjdG9yCXNlY3Rvcl9jb3VudDsKKworCWludAkJc2VjdG9yc19wZXJfdHJhY2s7CS8qIEJJT1MgQ0hTIHN0dWZmIChTKSAqLworCWludAkJaGVhZHM7CQkJLyogQklPUyBDSFMgc3R1ZmYgKEgpICovCisKKwlpbnQJCWNsdXN0ZXJfc2l6ZTsKKwlQZWRTZWN0b3IJY2x1c3Rlcl9zZWN0b3JzOworCUZhdENsdXN0ZXIJY2x1c3Rlcl9jb3VudDsKKwlpbnQJCWRpcl9lbnRyaWVzX3Blcl9jbHVzdGVyOworCisJRmF0VHlwZQkJZmF0X3R5cGU7CisJaW50CQlmYXRfdGFibGVfY291bnQ7CisJUGVkU2VjdG9yCWZhdF9zZWN0b3JzOworCisJdWludDMyX3QJc2VyaWFsX251bWJlcjsKKworCVBlZFNlY3RvcglpbmZvX3NlY3Rvcl9vZmZzZXQ7ICAgICAvKiBGQVQzMiBvbmx5ICovCisJUGVkU2VjdG9yCWZhdF9vZmZzZXQ7CisJUGVkU2VjdG9yCXJvb3RfZGlyX29mZnNldDsJLyogbm9uLUZBVDMyICovCisJUGVkU2VjdG9yCWNsdXN0ZXJfb2Zmc2V0OworCVBlZFNlY3Rvcglib290X3NlY3Rvcl9iYWNrdXBfb2Zmc2V0OworCisJRmF0Q2x1c3Rlcglyb290X2NsdXN0ZXI7ICAgICAgICAgICAvKiBGQVQzMiBvbmx5ICovCisJaW50CQlyb290X2Rpcl9lbnRyeV9jb3VudDsgICAvKiBub24tRkFUMzIgKi8KKwlQZWRTZWN0b3IJcm9vdF9kaXJfc2VjdG9yX2NvdW50OyAgLyogbm9uLUZBVDMyICovCisJRmF0Q2x1c3Rlcgl0b3RhbF9kaXJfY2x1c3RlcnM7CisKKwlGYXRUYWJsZSoJZmF0OworCUZhdENsdXN0ZXJJbmZvKgljbHVzdGVyX2luZm87CisKKwlQZWRTZWN0b3IJYnVmZmVyX3NlY3RvcnM7CisJY2hhcioJCWJ1ZmZlcjsKKworCWludAkJZnJhZ19zaXplOworCVBlZFNlY3RvcglmcmFnX3NlY3RvcnM7CisJRmF0RnJhZ21lbnQJZnJhZ19jb3VudDsKKwlGYXRGcmFnbWVudAlidWZmZXJfZnJhZ3M7CisJRmF0RnJhZ21lbnQJY2x1c3Rlcl9mcmFnczsKK307CisKKyNkZWZpbmUgRkFUX1NQRUNJRklDKGZzKQkoKEZhdFNwZWNpZmljKikgZnMtPnR5cGVfc3BlY2lmaWMpCisKKyNkZWZpbmUgRkFUX1JPT1QJCTAKKworI2RlZmluZSBERUxFVEVEX0ZMQUcJCTB4ZTUKKworI2RlZmluZSBSRUFET05MWV9BVFRSCQkweDAxCisjZGVmaW5lIEhJRERFTl9BVFRSCQkweDAyCisjZGVmaW5lIFNZU1RFTV9BVFRSCQkweDA0CisjZGVmaW5lIFZPTFVNRV9MQUJFTF9BVFRSCTB4MDgKKyNkZWZpbmUgVkZBVF9BVFRSCQkweDBmCisjZGVmaW5lIERJUkVDVE9SWV9BVFRSCQkweDEwCisjZGVmaW5lIEFSQ0hfQVRUUgkJMHgyMAorCisjZGVmaW5lIE1BWF9GQVQxMl9DTFVTVEVSUwk0MDg2ICAgICAgCisjZGVmaW5lIE1BWF9GQVQxNl9DTFVTVEVSUwk2NTUyNgorI2RlZmluZSBNQVhfRkFUMzJfQ0xVU1RFUlMJMjAwMDAwMAorCisjZGVmaW5lIEZBVF9ST09UX0RJUl9FTlRSWV9DT1VOVAk1MTIKKworZXh0ZXJuIFBlZEZpbGVTeXN0ZW1UeXBlIGZhdDE2X3R5cGU7CitleHRlcm4gUGVkRmlsZVN5c3RlbVR5cGUgZmF0MzJfdHlwZTsKKworZXh0ZXJuIHZvaWQgZmF0X3ByaW50IChjb25zdCBQZWRGaWxlU3lzdGVtKiBmcyk7CisKK2V4dGVybiBQZWRGaWxlU3lzdGVtKiBmYXRfYWxsb2MgKGNvbnN0IFBlZEdlb21ldHJ5KiBnZW9tKTsKK2V4dGVybiB2b2lkIGZhdF9mcmVlIChQZWRGaWxlU3lzdGVtKiBmcyk7CitleHRlcm4gaW50IGZhdF9hbGxvY19idWZmZXJzIChQZWRGaWxlU3lzdGVtKiBmcyk7CitleHRlcm4gdm9pZCBmYXRfZnJlZV9idWZmZXJzIChQZWRGaWxlU3lzdGVtKiBmcyk7CisKK2V4dGVybiBpbnQgZmF0X3Jlc2l6ZSAoUGVkRmlsZVN5c3RlbSogZnMsIFBlZEdlb21ldHJ5KiBnZW9tLCBQZWRUaW1lciogdGltZXIpOworCitleHRlcm4gaW50IGZhdF9zZXRfZnJhZ19zZWN0b3JzIChQZWRGaWxlU3lzdGVtKiBmcywgUGVkU2VjdG9yIGZyYWdfc2VjdG9ycyk7CisKKyNlbmRpZiAvKiBGQVRfSF9JTkNMVURFRCAqLwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9mYXQvZmF0aW8uYyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvZmF0L2ZhdGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTgwMDZkYwotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvZmF0L2ZhdGlvLmMKQEAgLTAsMCArMSwxNTIgQEAKKy8qCisgICAgbGlicGFydGVkCisgICAgQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwLCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQorKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgImZhdC5oIgorI2luY2x1ZGUgImZhdGlvLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisKKyNpZm5kZWYgRElTQ09WRVJfT05MWQorCitpbnQKK2ZhdF9yZWFkX2ZyYWdtZW50cyAoUGVkRmlsZVN5c3RlbSogZnMsIGNoYXIqIGJ1ZiwgRmF0RnJhZ21lbnQgZnJhZywKKwkJICAgIEZhdEZyYWdtZW50IGNvdW50KQoreworCUZhdFNwZWNpZmljKglmc19pbmZvID0gRkFUX1NQRUNJRklDIChmcyk7CisJUGVkU2VjdG9yCXNlY3RvciA9IGZhdF9mcmFnX3RvX3NlY3RvciAoZnMsIGZyYWcpOworCVBlZFNlY3RvcglzZWN0b3JfY291bnQgPSBjb3VudCAqIGZzX2luZm8tPmZyYWdfc2VjdG9yczsKKworCVBFRF9BU1NFUlQgKGZyYWcgPj0gMCAmJiBmcmFnIDwgZnNfaW5mby0+ZnJhZ19jb3VudCwgcmV0dXJuIDApOworCisJcmV0dXJuIHBlZF9nZW9tZXRyeV9yZWFkIChmcy0+Z2VvbSwgYnVmLCBzZWN0b3IsIHNlY3Rvcl9jb3VudCk7Cit9CisKK2ludAorZmF0X3JlYWRfZnJhZ21lbnQgKFBlZEZpbGVTeXN0ZW0qIGZzLCBjaGFyKiBidWYsIEZhdEZyYWdtZW50IGZyYWcpCit7CisJcmV0dXJuIGZhdF9yZWFkX2ZyYWdtZW50cyAoZnMsIGJ1ZiwgZnJhZywgMSk7Cit9CisKK2ludAorZmF0X3dyaXRlX2ZyYWdtZW50cyAoUGVkRmlsZVN5c3RlbSogZnMsIGNoYXIqIGJ1ZiwgRmF0RnJhZ21lbnQgZnJhZywKKwkJICAgICBGYXRGcmFnbWVudCBjb3VudCkKK3sKKwlGYXRTcGVjaWZpYyoJZnNfaW5mbyA9IEZBVF9TUEVDSUZJQyAoZnMpOworCVBlZFNlY3RvcglzZWN0b3IgPSBmYXRfZnJhZ190b19zZWN0b3IgKGZzLCBmcmFnKTsKKwlQZWRTZWN0b3IJc2VjdG9yX2NvdW50ID0gY291bnQgKiBmc19pbmZvLT5mcmFnX3NlY3RvcnM7CisKKwlQRURfQVNTRVJUIChmcmFnID49IDAgJiYgZnJhZyA8IGZzX2luZm8tPmZyYWdfY291bnQsIHJldHVybiAwKTsKKworCXJldHVybiBwZWRfZ2VvbWV0cnlfd3JpdGUgKGZzLT5nZW9tLCBidWYsIHNlY3Rvciwgc2VjdG9yX2NvdW50KTsKK30KKworaW50CitmYXRfd3JpdGVfZnJhZ21lbnQgKFBlZEZpbGVTeXN0ZW0qIGZzLCBjaGFyKiBidWYsIEZhdEZyYWdtZW50IGZyYWcpCit7CisJcmV0dXJuIGZhdF93cml0ZV9mcmFnbWVudHMgKGZzLCBidWYsIGZyYWcsIDEpOworfQorCitpbnQKK2ZhdF93cml0ZV9zeW5jX2ZyYWdtZW50cyAoUGVkRmlsZVN5c3RlbSogZnMsIGNoYXIqIGJ1ZiwgRmF0RnJhZ21lbnQgZnJhZywKKwkJCSAgRmF0RnJhZ21lbnQgY291bnQpCit7CisJaWYgKCFmYXRfd3JpdGVfZnJhZ21lbnRzIChmcywgYnVmLCBmcmFnLCBjb3VudCkpCisJCXJldHVybiAwOworCWlmICghcGVkX2dlb21ldHJ5X3N5bmMgKGZzLT5nZW9tKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKK2ludAorZmF0X3dyaXRlX3N5bmNfZnJhZ21lbnQgKFBlZEZpbGVTeXN0ZW0qIGZzLCBjaGFyKiBidWYsIEZhdEZyYWdtZW50IGZyYWcpCit7CisJcmV0dXJuIGZhdF93cml0ZV9zeW5jX2ZyYWdtZW50cyAoZnMsIGJ1ZiwgZnJhZywgMSk7Cit9CisKK2ludAorZmF0X3JlYWRfY2x1c3RlcnMgKFBlZEZpbGVTeXN0ZW0qIGZzLCBjaGFyICpidWYsIEZhdENsdXN0ZXIgY2x1c3RlciwKKwkJICAgRmF0Q2x1c3RlciBjb3VudCkKK3sKKwlGYXRTcGVjaWZpYyoJZnNfaW5mbyA9IEZBVF9TUEVDSUZJQyAoZnMpOworCVBlZFNlY3RvcglzZWN0b3IgPSBmYXRfY2x1c3Rlcl90b19zZWN0b3IgKGZzLCBjbHVzdGVyKTsKKwlQZWRTZWN0b3IJc2VjdG9yX2NvdW50ID0gY291bnQgKiBmc19pbmZvLT5jbHVzdGVyX3NlY3RvcnM7CisKKwlQRURfQVNTRVJUIChjbHVzdGVyID49IDIKKwkgICAgCSAgICAmJiBjbHVzdGVyICsgY291bnQgLSAxIDwgZnNfaW5mby0+Y2x1c3Rlcl9jb3VudCArIDIsCisJCSAgICByZXR1cm4gMCk7CisKKwlyZXR1cm4gcGVkX2dlb21ldHJ5X3JlYWQgKGZzLT5nZW9tLCBidWYsIHNlY3Rvciwgc2VjdG9yX2NvdW50KTsKK30KKworaW50CitmYXRfcmVhZF9jbHVzdGVyIChQZWRGaWxlU3lzdGVtKiBmcywgY2hhciAqYnVmLCBGYXRDbHVzdGVyIGNsdXN0ZXIpCit7CisJcmV0dXJuIGZhdF9yZWFkX2NsdXN0ZXJzIChmcywgYnVmLCBjbHVzdGVyLCAxKTsKK30KKworaW50CitmYXRfd3JpdGVfY2x1c3RlcnMgKFBlZEZpbGVTeXN0ZW0qIGZzLCBjaGFyICpidWYsIEZhdENsdXN0ZXIgY2x1c3RlciwKKwkJICAgIEZhdENsdXN0ZXIgY291bnQpCit7CisJRmF0U3BlY2lmaWMqCWZzX2luZm8gPSBGQVRfU1BFQ0lGSUMgKGZzKTsKKwlQZWRTZWN0b3IJc2VjdG9yID0gZmF0X2NsdXN0ZXJfdG9fc2VjdG9yIChmcywgY2x1c3Rlcik7CisJUGVkU2VjdG9yCXNlY3Rvcl9jb3VudCA9IGNvdW50ICogZnNfaW5mby0+Y2x1c3Rlcl9zZWN0b3JzOworCisJUEVEX0FTU0VSVCAoY2x1c3RlciA+PSAyCisJICAgIAkgICAgJiYgY2x1c3RlciArIGNvdW50IC0gMSA8IGZzX2luZm8tPmNsdXN0ZXJfY291bnQgKyAyLAorCQkgICAgcmV0dXJuIDApOworCisJcmV0dXJuIHBlZF9nZW9tZXRyeV93cml0ZSAoZnMtPmdlb20sIGJ1Ziwgc2VjdG9yLCBzZWN0b3JfY291bnQpOworfQorCitpbnQKK2ZhdF93cml0ZV9jbHVzdGVyIChQZWRGaWxlU3lzdGVtKiBmcywgY2hhciAqYnVmLCBGYXRDbHVzdGVyIGNsdXN0ZXIpCit7CisJcmV0dXJuIGZhdF93cml0ZV9jbHVzdGVycyAoZnMsIGJ1ZiwgY2x1c3RlciwgMSk7Cit9CisKK2ludAorZmF0X3dyaXRlX3N5bmNfY2x1c3RlcnMgKFBlZEZpbGVTeXN0ZW0qIGZzLCBjaGFyICpidWYsIEZhdENsdXN0ZXIgY2x1c3RlciwKKwkJCSBGYXRDbHVzdGVyIGNvdW50KQoreworCWlmICghZmF0X3dyaXRlX2NsdXN0ZXJzIChmcywgYnVmLCBjbHVzdGVyLCBjb3VudCkpCisJCXJldHVybiAwOworCWlmICghcGVkX2dlb21ldHJ5X3N5bmMgKGZzLT5nZW9tKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKK2ludAorZmF0X3dyaXRlX3N5bmNfY2x1c3RlciAoUGVkRmlsZVN5c3RlbSogZnMsIGNoYXIgKmJ1ZiwgRmF0Q2x1c3RlciBjbHVzdGVyKQoreworCWlmICghZmF0X3dyaXRlX2NsdXN0ZXIgKGZzLCBidWYsIGNsdXN0ZXIpKQorCQlyZXR1cm4gMDsKKwlpZiAoIXBlZF9nZW9tZXRyeV9zeW5jIChmcy0+Z2VvbSkpCisJCXJldHVybiAwOworCXJldHVybiAxOworfQorCisjZW5kaWYgLyogIURJU0NPVkVSX09OTFkgKi8KZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvZmF0L2ZhdGlvLmggYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2ZhdC9mYXRpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzNzE1OGEKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2ZhdC9mYXRpby5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgICAgbGlicGFydGVkCisgICAgQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQorKi8KKworI2lmbmRlZiBGQVRJT19IX0lOQ0xVREVECisjZGVmaW5lIEZBVElPX0hfSU5DTFVERUQKKworI2luY2x1ZGUgImZhdC5oIgorCitleHRlcm4gaW50IGZhdF9yZWFkX2ZyYWdtZW50cyAoUGVkRmlsZVN5c3RlbSogZnMsIGNoYXIqIGJ1ZiwgRmF0RnJhZ21lbnQgZnJhZywKKwkJCSAgICAgICBGYXRGcmFnbWVudCBjb3VudCk7CitleHRlcm4gaW50IGZhdF93cml0ZV9mcmFnbWVudHMgKFBlZEZpbGVTeXN0ZW0qIGZzLCBjaGFyKiBidWYsIEZhdEZyYWdtZW50IGZyYWcsCisJCQkgICAgICAgIEZhdEZyYWdtZW50IGNvdW50KTsKK2V4dGVybiBpbnQgZmF0X3dyaXRlX3N5bmNfZnJhZ21lbnRzIChQZWRGaWxlU3lzdGVtKiBmcywgY2hhciogYnVmLAorCQkJCSAgICAgRmF0RnJhZ21lbnQgZnJhZywgRmF0RnJhZ21lbnQgY291bnQpOworCitleHRlcm4gaW50IGZhdF9yZWFkX2ZyYWdtZW50IChQZWRGaWxlU3lzdGVtKiBmcywgY2hhciogYnVmLCBGYXRGcmFnbWVudCBmcmFnKTsKK2V4dGVybiBpbnQgZmF0X3dyaXRlX2ZyYWdtZW50IChQZWRGaWxlU3lzdGVtKiBmcywgY2hhciogYnVmLCBGYXRGcmFnbWVudCBmcmFnKTsKK2V4dGVybiBpbnQgZmF0X3dyaXRlX3N5bmNfZnJhZ21lbnQgKFBlZEZpbGVTeXN0ZW0qIGZzLCBjaGFyKiBidWYsCisJCQkJICAgIEZhdEZyYWdtZW50IGZyYWcpOworCitleHRlcm4gaW50IGZhdF9yZWFkX2NsdXN0ZXJzIChQZWRGaWxlU3lzdGVtKiBmcywgY2hhciogYnVmLCBGYXRDbHVzdGVyIGNsdXN0ZXIsCisJCQkgICAgICBGYXRDbHVzdGVyIGNvdW50KTsKK2V4dGVybiBpbnQgZmF0X3dyaXRlX2NsdXN0ZXJzIChQZWRGaWxlU3lzdGVtKiBmcywgY2hhciogYnVmLCBGYXRDbHVzdGVyIGNsdXN0ZXIsCisJCQkgICAgICAgRmF0Q2x1c3RlciBjb3VudCk7CitleHRlcm4gaW50IGZhdF93cml0ZV9zeW5jX2NsdXN0ZXJzIChQZWRGaWxlU3lzdGVtKiBmcywgY2hhciogYnVmLAorCQkJCSAgICBGYXRDbHVzdGVyIGNsdXN0ZXIsIEZhdENsdXN0ZXIgY291bnQpOworCitleHRlcm4gaW50IGZhdF9yZWFkX2NsdXN0ZXIgKFBlZEZpbGVTeXN0ZW0qIGZzLCBjaGFyICpidWYsIEZhdENsdXN0ZXIgY2x1c3Rlcik7CitleHRlcm4gaW50IGZhdF93cml0ZV9jbHVzdGVyIChQZWRGaWxlU3lzdGVtKiBmcywgY2hhciAqYnVmLCBGYXRDbHVzdGVyIGNsdXN0ZXIpOworZXh0ZXJuIGludCBmYXRfd3JpdGVfc3luY19jbHVzdGVyIChQZWRGaWxlU3lzdGVtKiBmcywgY2hhciAqYnVmLAorCQkJCSAgIEZhdENsdXN0ZXIgY2x1c3Rlcik7CisKKyNlbmRpZiAvKiBGQVRJT19IX0lOQ0xVREVEICovCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmYjFjOGMKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYwpAQCAtMCwwICsxLDg3OCBAQAorLyoKKyAgICBsaWJwYXJ0ZWQKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDAsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCisqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSAiZmF0LmgiCisjaW5jbHVkZSAidHJhdmVyc2UuaCIKKyNpbmNsdWRlICJjb3VudC5oIgorI2luY2x1ZGUgImZhdGlvLmgiCisjaW5jbHVkZSAiY2FsYy5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWZuZGVmIERJU0NPVkVSX09OTFkKKworLyogUmVjdXJzaXZlbHkgYnVpbGRzIChpLmUuIG1ha2VzIGNvbnNpc3RlbnQpIHRoZSBkdXBsaWNhdGVkIGRpcmVjdG9yeSB0cmVlCisgKiAobGVhdmluZyB0aGUgb3JpZ2luYWwgZGlyZWN0b3J5IHRyZWUgaW4gdGFjdCkKKyAqLworc3RhdGljIGludAorZmF0X2NvbnN0cnVjdF9kaXJlY3RvcnkgKEZhdE9wQ29udGV4dCogY3R4LCBGYXRUcmF2ZXJzZUluZm8qIHRyYXZfaW5mbykKK3sKKwlGYXRUcmF2ZXJzZUluZm8qCXN1Yl9kaXJfaW5mbzsKKwlGYXREaXJFbnRyeSoJCWRpcl9lbnRyeTsKKwlGYXRDbHVzdGVyCQlvbGRfZmlyc3RfY2x1c3RlcjsKKworCXdoaWxlICggKGRpcl9lbnRyeSA9IGZhdF90cmF2ZXJzZV9uZXh0X2Rpcl9lbnRyeSAodHJhdl9pbmZvKSkgKSB7CisJCWlmIChmYXRfZGlyX2VudHJ5X2lzX251bGxfdGVybSAoZGlyX2VudHJ5KSkKKwkJCWJyZWFrOworCQlpZiAoIWZhdF9kaXJfZW50cnlfaGFzX2ZpcnN0X2NsdXN0ZXIgKGRpcl9lbnRyeSwgY3R4LT5vbGRfZnMpKQorCQkJY29udGludWU7CisKKwkJZmF0X3RyYXZlcnNlX21hcmtfZGlydHkgKHRyYXZfaW5mbyk7CisKKwkJb2xkX2ZpcnN0X2NsdXN0ZXIgPSBmYXRfZGlyX2VudHJ5X2dldF9maXJzdF9jbHVzdGVyIChkaXJfZW50cnksCisJCQkJCQljdHgtPm9sZF9mcyk7CisJCWZhdF9kaXJfZW50cnlfc2V0X2ZpcnN0X2NsdXN0ZXIgKGRpcl9lbnRyeSwgY3R4LT5uZXdfZnMsCisJCQlmYXRfb3BfY29udGV4dF9tYXBfY2x1c3RlciAoY3R4LCBvbGRfZmlyc3RfY2x1c3RlcikpOworCisJCWlmIChmYXRfZGlyX2VudHJ5X2lzX2RpcmVjdG9yeSAoZGlyX2VudHJ5KQorCQkJCSYmIGRpcl9lbnRyeS0+bmFtZSBbMF0gIT0gJy4nKSB7CisJCQlzdWJfZGlyX2luZm8KKwkJCQk9IGZhdF90cmF2ZXJzZV9kaXJlY3RvcnkgKHRyYXZfaW5mbywgZGlyX2VudHJ5KTsKKwkJCWlmICghc3ViX2Rpcl9pbmZvKQorCQkJCXJldHVybiAwOworCQkJaWYgKCFmYXRfY29uc3RydWN0X2RpcmVjdG9yeSAoY3R4LCBzdWJfZGlyX2luZm8pKQorCQkJCXJldHVybiAwOworCQl9CisJfQorCS8qIHJlbW92ZSAic3RhbGUiIGVudHJpZXMgYXQgdGhlIGVuZCAqLworCXdoaWxlICgoZGlyX2VudHJ5ID0gZmF0X3RyYXZlcnNlX25leHRfZGlyX2VudHJ5ICh0cmF2X2luZm8pKSkgeworCQltZW1zZXQgKGRpcl9lbnRyeSwgMCwgc2l6ZW9mIChGYXREaXJFbnRyeSkpOworCQlmYXRfdHJhdmVyc2VfbWFya19kaXJ0eSAodHJhdl9pbmZvKTsKKwl9CisJZmF0X3RyYXZlcnNlX2NvbXBsZXRlICh0cmF2X2luZm8pOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50CitkdXBsaWNhdGVfbGVnYWN5X3Jvb3RfZGlyIChGYXRPcENvbnRleHQqIGN0eCkKK3sKKwlGYXRTcGVjaWZpYyoJCW9sZF9mc19pbmZvID0gRkFUX1NQRUNJRklDIChjdHgtPm9sZF9mcyk7CisJRmF0U3BlY2lmaWMqCQluZXdfZnNfaW5mbyA9IEZBVF9TUEVDSUZJQyAoY3R4LT5uZXdfZnMpOworCisJUEVEX0FTU0VSVCAob2xkX2ZzX2luZm8tPnJvb3RfZGlyX3NlY3Rvcl9jb3VudAorCQkJPT0gbmV3X2ZzX2luZm8tPnJvb3RfZGlyX3NlY3Rvcl9jb3VudCwgcmV0dXJuIDApOworCisJaWYgKCFwZWRfZ2VvbWV0cnlfcmVhZCAoY3R4LT5vbGRfZnMtPmdlb20sIG9sZF9mc19pbmZvLT5idWZmZXIsCisJCQkJb2xkX2ZzX2luZm8tPnJvb3RfZGlyX29mZnNldCwKKwkJCQlvbGRfZnNfaW5mby0+cm9vdF9kaXJfc2VjdG9yX2NvdW50KSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIXBlZF9nZW9tZXRyeV93cml0ZSAoY3R4LT5uZXdfZnMtPmdlb20sIG9sZF9mc19pbmZvLT5idWZmZXIsCisJCQkJIG5ld19mc19pbmZvLT5yb290X2Rpcl9vZmZzZXQsCisJCQkJIG5ld19mc19pbmZvLT5yb290X2Rpcl9zZWN0b3JfY291bnQpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCisvKgorICAgIENvbnN0cnVjdHMgdGhlIG5ldyBkaXJlY3RvcnkgdHJlZSBmb3IgbGVnYWN5IChGQVQxNikgZmlsZSBzeXN0ZW1zLgorKi8KK3N0YXRpYyBpbnQKK2ZhdF9jb25zdHJ1Y3RfbGVnYWN5X3Jvb3QgKEZhdE9wQ29udGV4dCogY3R4KQoreworCUZhdFRyYXZlcnNlSW5mbyoJdHJhdl9pbmZvOworCisJaWYgKCFkdXBsaWNhdGVfbGVnYWN5X3Jvb3RfZGlyIChjdHgpKQorCQlyZXR1cm4gMDsKKwl0cmF2X2luZm8gPSBmYXRfdHJhdmVyc2VfYmVnaW4gKGN0eC0+bmV3X2ZzLCBGQVRfUk9PVCwgIlxcIik7CisJcmV0dXJuIGZhdF9jb25zdHJ1Y3RfZGlyZWN0b3J5IChjdHgsIHRyYXZfaW5mbyk7Cit9CisKKy8qCisgICAgQ29uc3RydWN0cyB0aGUgbmV3IGRpcmVjdG9yeSB0cmVlIGZvciBuZXcgKEZBVDMyKSBmaWxlIHN5c3RlbXMuCisqLworc3RhdGljIGludAorZmF0X2NvbnN0cnVjdF9yb290IChGYXRPcENvbnRleHQqIGN0eCkKK3sKKwlGYXRTcGVjaWZpYyoJCW5ld19mc19pbmZvID0gRkFUX1NQRUNJRklDIChjdHgtPm5ld19mcyk7CisJRmF0VHJhdmVyc2VJbmZvKgl0cmF2X2luZm87CisKKwl0cmF2X2luZm8gPSBmYXRfdHJhdmVyc2VfYmVnaW4gKGN0eC0+bmV3X2ZzLCBuZXdfZnNfaW5mby0+cm9vdF9jbHVzdGVyLAorCQkJCQkiXFwiKTsKKwlmYXRfY29uc3RydWN0X2RpcmVjdG9yeSAoY3R4LCB0cmF2X2luZm8pOworCXJldHVybiAxOworfQorCisvKiBDb252ZXJ0cyB0aGUgcm9vdCBkaXJlY3RvcnkgYmV0d2VlbiBGQVQxNiBhbmQgRkFUMzIuICBOT1RFOiB0aGlzIGNvZGUKKyAqIGNhbiBhbHNvIGRvIG5vIGNvbnZlcnNpb24uICBJJ20gbGVhdmluZyBmYXRfY29uc3RydWN0X2RpcmVjdG9yeSgpLCBiZWNhdXNlCisgKiBpdCdzIHJlYWxseSBwcmV0dHkgOi0pICBJdCBhbHNvIGxlYXZlcyBhIGhpZ2hlciBjaGFuY2Ugb2YgZGVsZXRlZCBmaWxlCisgKiByZWNvdmVyeSwgYmVjYXVzZSBpdCBkb2Vzbid0IHJlbW92ZSByZWR1bmRhbnQgZW50cmllcy4gIChXZSBkbyB0aGlzIGhlcmUsCisgKiBiZWNhdXNlIGJyYWluLWRhbWFnZWQgRkFUMTYgaGFzIGFuIGFyYml0YXJ5IGxpbWl0IG9uIHJvb3QgZGlyZWN0b3J5IGVudHJpZXMsCisgKiBzbyB3ZSBzYXZlIHJvb20pCisgKi8KK3N0YXRpYyBpbnQKK2ZhdF9jb252ZXJ0X2RpcmVjdG9yeSAoRmF0T3BDb250ZXh0KiBjdHgsIEZhdFRyYXZlcnNlSW5mbyogb2xkX3RyYXYsCisJCSAgICAgICBGYXRUcmF2ZXJzZUluZm8qIG5ld190cmF2KQoreworCUZhdFRyYXZlcnNlSW5mbyoJc3ViX29sZF9kaXJfdHJhdjsKKwlGYXRUcmF2ZXJzZUluZm8qCXN1Yl9uZXdfZGlyX3RyYXY7CisJRmF0RGlyRW50cnkqCQluZXdfZGlyX2VudHJ5OworCUZhdERpckVudHJ5KgkJb2xkX2Rpcl9lbnRyeTsKKwlGYXRDbHVzdGVyCQlvbGRfZmlyc3RfY2x1c3RlcjsKKworCXdoaWxlICggKG9sZF9kaXJfZW50cnkgPSBmYXRfdHJhdmVyc2VfbmV4dF9kaXJfZW50cnkgKG9sZF90cmF2KSkgKSB7CisJCWlmIChmYXRfZGlyX2VudHJ5X2lzX251bGxfdGVybSAob2xkX2Rpcl9lbnRyeSkpCisJCQlicmVhazsKKwkJaWYgKCFmYXRfZGlyX2VudHJ5X2lzX2FjdGl2ZSAob2xkX2Rpcl9lbnRyeSkpCisJCQljb250aW51ZTsKKworCQluZXdfZGlyX2VudHJ5ID0gZmF0X3RyYXZlcnNlX25leHRfZGlyX2VudHJ5IChuZXdfdHJhdik7CisJCWlmICghbmV3X2Rpcl9lbnRyeSkgeworCQkJcmV0dXJuIHBlZF9leGNlcHRpb25fdGhyb3cgKFBFRF9FWENFUFRJT05fRVJST1IsCisJCQkJUEVEX0VYQ0VQVElPTl9JR05PUkVfQ0FOQ0VMLAorCQkJCV8oIlRoZXJlJ3Mgbm90IGVub3VnaCByb29tIGluIHRoZSByb290ICIKKwkJCQkgICJkaXJlY3RvcnkgZm9yIGFsbCBvZiB0aGUgZmlsZXMuICBFaXRoZXIgIgorCQkJCSAgImNhbmNlbCwgb3IgaWdub3JlIHRvIGxvc2UgdGhlIGZpbGVzLiIpKQorCQkJCQk9PSBQRURfRVhDRVBUSU9OX0lHTk9SRTsKKwkJfQorCisJCSpuZXdfZGlyX2VudHJ5ID0gKm9sZF9kaXJfZW50cnk7CisJCWZhdF90cmF2ZXJzZV9tYXJrX2RpcnR5IChuZXdfdHJhdik7CisKKwkJaWYgKCFmYXRfZGlyX2VudHJ5X2hhc19maXJzdF9jbHVzdGVyIChvbGRfZGlyX2VudHJ5LAorCQkJCQkJICAgICAgY3R4LT5vbGRfZnMpKQorCQkJY29udGludWU7CisKKwkJb2xkX2ZpcnN0X2NsdXN0ZXIgPSBmYXRfZGlyX2VudHJ5X2dldF9maXJzdF9jbHVzdGVyICgKKwkJCQkJCW9sZF9kaXJfZW50cnksIGN0eC0+b2xkX2ZzKTsKKwkJZmF0X2Rpcl9lbnRyeV9zZXRfZmlyc3RfY2x1c3RlciAobmV3X2Rpcl9lbnRyeSwgY3R4LT5uZXdfZnMsCisJCQlmYXRfb3BfY29udGV4dF9tYXBfY2x1c3RlciAoY3R4LCBvbGRfZmlyc3RfY2x1c3RlcikpOworCisJCWlmIChmYXRfZGlyX2VudHJ5X2lzX2RpcmVjdG9yeSAob2xkX2Rpcl9lbnRyeSkKKwkJCQkmJiBvbGRfZGlyX2VudHJ5LT5uYW1lIFswXSAhPSAnLicpIHsKKwkJCXN1Yl9vbGRfZGlyX3RyYXYKKwkJCSAgICA9IGZhdF90cmF2ZXJzZV9kaXJlY3RvcnkgKG9sZF90cmF2LCBvbGRfZGlyX2VudHJ5KTsKKwkJCXN1Yl9uZXdfZGlyX3RyYXYKKwkJCSAgICA9IGZhdF90cmF2ZXJzZV9kaXJlY3RvcnkgKG5ld190cmF2LCBuZXdfZGlyX2VudHJ5KTsKKwkJCWlmICghc3ViX29sZF9kaXJfdHJhdiB8fCAhc3ViX25ld19kaXJfdHJhdikKKwkJCQlyZXR1cm4gMDsKKworCQkJaWYgKCFmYXRfY29udmVydF9kaXJlY3RvcnkgKGN0eCwgc3ViX29sZF9kaXJfdHJhdiwKKwkJCQkJCSAgICBzdWJfbmV3X2Rpcl90cmF2KSkKKwkJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCS8qIHJlbW92ZSAic3RhbGUiIGVudHJpZXMgYXQgdGhlIGVuZCwganVzdCBpbiBjYXNlIHRoZXJlIGlzIHNvbWUKKwkgKiBvdmVybGFwCisJICovCisJd2hpbGUgKChuZXdfZGlyX2VudHJ5ID0gZmF0X3RyYXZlcnNlX25leHRfZGlyX2VudHJ5IChuZXdfdHJhdikpKSB7CisJCW1lbXNldCAobmV3X2Rpcl9lbnRyeSwgMCwgc2l6ZW9mIChGYXREaXJFbnRyeSkpOworCQlmYXRfdHJhdmVyc2VfbWFya19kaXJ0eSAobmV3X3RyYXYpOworCX0KKworCWZhdF90cmF2ZXJzZV9jb21wbGV0ZSAob2xkX3RyYXYpOworCWZhdF90cmF2ZXJzZV9jb21wbGV0ZSAobmV3X3RyYXYpOworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZAorY2xlYXJfY2x1c3RlciAoUGVkRmlsZVN5c3RlbSogZnMsIEZhdENsdXN0ZXIgY2x1c3RlcikKK3sKKwlGYXRTcGVjaWZpYyoJCWZzX2luZm8gPSBGQVRfU1BFQ0lGSUMgKGZzKTsKKworCW1lbXNldCAoZnNfaW5mby0+YnVmZmVyLCAwLCBmc19pbmZvLT5jbHVzdGVyX3NpemUpOworCWZhdF93cml0ZV9jbHVzdGVyIChmcywgZnNfaW5mby0+YnVmZmVyLCBjbHVzdGVyKTsKK30KKworLyogVGhpcyBNVVNUIGJlIGNhbGxlZCBCRUZPUkUgdGhlIGZhdF9jb25zdHJ1Y3RfbmV3X2ZhdCgpLCBiZWNhdXNlIGNsdXN0ZXIKKyAqIGFsbG9jYXRpb24gZGVwZW5kIG9uIHRoZSBvbGQgRkFULiAgVGhlIHJlYXNvbiBpcywgb2xkIGNsdXN0ZXJzIG1heQorICogc3RpbGwgYmUgbmVlZGVkIGR1cmluZyB0aGUgcmVzaXplLCAocGFydGljdWxhcmx5IGNsdXN0ZXJzIGluIHRoZSBkaXJlY3RvcnkKKyAqIHRyZWUpIGV2ZW4gaWYgdGhleSB3aWxsIGJlIGRpc2NhcmRlZCBsYXRlci4KKyAqLworc3RhdGljIGludAorYWxsb2Nfcm9vdF9kaXIgKEZhdE9wQ29udGV4dCogY3R4KQoreworCUZhdFNwZWNpZmljKgkJb2xkX2ZzX2luZm8gPSBGQVRfU1BFQ0lGSUMgKGN0eC0+b2xkX2ZzKTsKKwlGYXRTcGVjaWZpYyoJCW5ld19mc19pbmZvID0gRkFUX1NQRUNJRklDIChjdHgtPm5ld19mcyk7CisJRmF0Q2x1c3RlcgkJaTsKKwlGYXRDbHVzdGVyCQljbHVzdGVyOworCUZhdENsdXN0ZXIJCWNsdXN0ZXJfY291bnQ7CisKKwlQRURfQVNTRVJUIChuZXdfZnNfaW5mby0+ZmF0X3R5cGUgPT0gRkFUX1RZUEVfRkFUMzIsIHJldHVybiAwKTsKKworCWNsdXN0ZXJfY291bnQgPSBwZWRfZGl2X3JvdW5kX3VwICgKKwkJCSAgIFBFRF9NQVggKDE2LCBvbGRfZnNfaW5mby0+cm9vdF9kaXJfc2VjdG9yX2NvdW50KSwKKwkJCSAgIG5ld19mc19pbmZvLT5jbHVzdGVyX3NlY3RvcnMpOworCisJZm9yIChpID0gMDsgaSA8IGNsdXN0ZXJfY291bnQ7IGkrKykgeworCQljbHVzdGVyID0gZmF0X3RhYmxlX2FsbG9jX2NoZWNrX2NsdXN0ZXIgKG5ld19mc19pbmZvLT5mYXQsCisJCQkJCQkJIGN0eC0+bmV3X2ZzKTsKKwkJaWYgKCFjbHVzdGVyKQorCQkJcmV0dXJuIDA7CisJCWN0eC0+bmV3X3Jvb3RfZGlyIFtpXSA9IGNsdXN0ZXI7CisJCWNsZWFyX2NsdXN0ZXIgKGN0eC0+bmV3X2ZzLCBjbHVzdGVyKTsKKwl9CisJY3R4LT5uZXdfcm9vdF9kaXIgW2ldID0gMDsKKwluZXdfZnNfaW5mby0+cm9vdF9jbHVzdGVyID0gY3R4LT5uZXdfcm9vdF9kaXIgWzBdOworCXJldHVybiAxOworfQorCisvKiB3aGVuIGNvbnZlcnRpbmcgRkFUMzIgLT4gRkFUMTYKKyAqIGZhdF9kdXBsaWNhdGUgY2x1c3RlcnMoKSBkdXBsaWNhdGVkIHRoZSByb290IGRpcmVjdG9yeSB1bm5lY2Vzc2FyaWx5LgorICogTGV0J3MgZnJlZSBpdC4KKyAqCisgKiBUaGlzIG11c3QgYmUgY2FsbGVkIEFGVEVSIGZhdF9jb25zdHJ1Y3RfbmV3X2ZhdCgpLiAgKG90aGVyd2lzZSwgb3VyCisgKiBjaGFuZ2VzIGp1c3QgZ2V0IG92ZXJ3cml0dGVuKQorICovCitzdGF0aWMgaW50CitmcmVlX3Jvb3RfZGlyIChGYXRPcENvbnRleHQqIGN0eCkKK3sKKwlGYXRTcGVjaWZpYyoJCW9sZF9mc19pbmZvID0gRkFUX1NQRUNJRklDIChjdHgtPm9sZF9mcyk7CisJRmF0U3BlY2lmaWMqCQluZXdfZnNfaW5mbyA9IEZBVF9TUEVDSUZJQyAoY3R4LT5uZXdfZnMpOworCUZhdENsdXN0ZXIJCW9sZF9jbHVzdGVyOworCUZhdEZyYWdtZW50CQlpOworCisJUEVEX0FTU0VSVCAob2xkX2ZzX2luZm8tPmZhdF90eXBlID09IEZBVF9UWVBFX0ZBVDMyLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAobmV3X2ZzX2luZm8tPmZhdF90eXBlID09IEZBVF9UWVBFX0ZBVDE2LCByZXR1cm4gMCk7CisKKwlmb3IgKG9sZF9jbHVzdGVyID0gb2xkX2ZzX2luZm8tPnJvb3RfY2x1c3RlcjsKKwkgICAgICFmYXRfdGFibGVfaXNfZW9mIChvbGRfZnNfaW5mby0+ZmF0LCBvbGRfY2x1c3Rlcik7CisJICAgICBvbGRfY2x1c3RlciA9IGZhdF90YWJsZV9nZXQgKG9sZF9mc19pbmZvLT5mYXQsIG9sZF9jbHVzdGVyKSkgeworCQlGYXRGcmFnbWVudCBvbGRfZnJhZzsKKwkJb2xkX2ZyYWcgPSBmYXRfY2x1c3Rlcl90b19mcmFnIChjdHgtPm9sZF9mcywgb2xkX2NsdXN0ZXIpOworCQlmb3IgKGkgPSAwOyBpIDwgbmV3X2ZzX2luZm8tPmNsdXN0ZXJfZnJhZ3M7IGkrKykgeworCQkJRmF0RnJhZ21lbnQgbmV3X2ZyYWc7CisJCQlGYXRDbHVzdGVyIG5ld19jbHN0OworCQkJbmV3X2ZyYWcgPSBmYXRfb3BfY29udGV4dF9tYXBfZnJhZ21lbnQgKGN0eCwKKwkJCQkJCQkJb2xkX2ZyYWcgKyBpKTsKKwkJCW5ld19jbHN0ID0gZmF0X2ZyYWdfdG9fY2x1c3RlciAoY3R4LT5vbGRfZnMsIG5ld19mcmFnKTsKKwkJCWlmICghZmF0X3RhYmxlX3NldF9hdmFpbCAobmV3X2ZzX2luZm8tPmZhdCwgbmV3X2Nsc3QpKQorCQkJCXJldHVybiAwOworCQl9CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2ZhdF9jbGVhcl9yb290X2RpciAoUGVkRmlsZVN5c3RlbSogZnMpCit7CisJRmF0U3BlY2lmaWMqCWZzX2luZm8gPSBGQVRfU1BFQ0lGSUMgKGZzKTsKKwlpbnQJCWk7CisKKwlQRURfQVNTRVJUIChmc19pbmZvLT5mYXRfdHlwZSA9PSBGQVRfVFlQRV9GQVQxNiwgcmV0dXJuIDApOworCVBFRF9BU1NFUlQgKGZzX2luZm8tPnJvb3RfZGlyX3NlY3Rvcl9jb3VudCwgcmV0dXJuIDApOworCisJbWVtc2V0IChmc19pbmZvLT5idWZmZXIsIDAsIDUxMik7CisKKwlmb3IgKGkgPSAwOyBpIDwgZnNfaW5mby0+cm9vdF9kaXJfc2VjdG9yX2NvdW50OyBpKyspIHsKKwkJaWYgKCFwZWRfZ2VvbWV0cnlfd3JpdGUgKGZzLT5nZW9tLCBmc19pbmZvLT5idWZmZXIsCisJCQkJCSBmc19pbmZvLT5yb290X2Rpcl9vZmZzZXQgKyBpLCAxKSkgeworCQkJaWYgKHBlZF9leGNlcHRpb25fdGhyb3cgKFBFRF9FWENFUFRJT05fRVJST1IsCisJCQkJUEVEX0VYQ0VQVElPTl9JR05PUkVfQ0FOQ0VMLAorCQkJCV8oIkVycm9yIHdyaXRpbmcgdG8gdGhlIHJvb3QgZGlyZWN0b3J5LiIpKQorCQkJCQk9PSBQRURfRVhDRVBUSU9OX0NBTkNFTCkKKwkJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludAorZmF0X2NvbnN0cnVjdF9jb252ZXJ0ZWRfdHJlZSAoRmF0T3BDb250ZXh0KiBjdHgpCit7CisJRmF0U3BlY2lmaWMqCQlvbGRfZnNfaW5mbyA9IEZBVF9TUEVDSUZJQyAoY3R4LT5vbGRfZnMpOworCUZhdFNwZWNpZmljKgkJbmV3X2ZzX2luZm8gPSBGQVRfU1BFQ0lGSUMgKGN0eC0+bmV3X2ZzKTsKKwlGYXRUcmF2ZXJzZUluZm8qCW9sZF90cmF2X2luZm87CisJRmF0VHJhdmVyc2VJbmZvKgluZXdfdHJhdl9pbmZvOworCisJaWYgKG5ld19mc19pbmZvLT5mYXRfdHlwZSA9PSBGQVRfVFlQRV9GQVQzMikgeworCQluZXdfdHJhdl9pbmZvID0gZmF0X3RyYXZlcnNlX2JlZ2luIChjdHgtPm5ld19mcywKKwkJCQkJICAgIG5ld19mc19pbmZvLT5yb290X2NsdXN0ZXIsICJcXCIpOworCQlvbGRfdHJhdl9pbmZvID0gZmF0X3RyYXZlcnNlX2JlZ2luIChjdHgtPm9sZF9mcywgRkFUX1JPT1QsCisJCQkJCQkgICAgIlxcIik7CisJfSBlbHNlIHsKKwkJZmF0X2NsZWFyX3Jvb3RfZGlyIChjdHgtPm5ld19mcyk7CisJCW5ld190cmF2X2luZm8gPSBmYXRfdHJhdmVyc2VfYmVnaW4gKGN0eC0+bmV3X2ZzLCBGQVRfUk9PVCwKKwkJCQkJCSAgICAiXFwiKTsKKwkJb2xkX3RyYXZfaW5mbyA9IGZhdF90cmF2ZXJzZV9iZWdpbiAoY3R4LT5vbGRfZnMsCisJCQkJCSAgICBvbGRfZnNfaW5mby0+cm9vdF9jbHVzdGVyLCAiXFwiKTsKKwl9CisJaWYgKCFuZXdfdHJhdl9pbmZvIHx8ICFvbGRfdHJhdl9pbmZvKQorCQlyZXR1cm4gMDsKKwlpZiAoIWZhdF9jb252ZXJ0X2RpcmVjdG9yeSAoY3R4LCBvbGRfdHJhdl9pbmZvLCBuZXdfdHJhdl9pbmZvKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKKy8qCisgICAgQ29uc3RydWN0cyB0aGUgbmV3IGRpcmVjdG9yeSB0cmVlIHRvIG1hdGNoIHRoZSBuZXcgZmlsZSBsb2NhdGlvbnMuCisqLworc3RhdGljIGludAorZmF0X2NvbnN0cnVjdF9kaXJfdHJlZSAoRmF0T3BDb250ZXh0KiBjdHgpCit7CisJRmF0U3BlY2lmaWMqCQluZXdfZnNfaW5mbyA9IEZBVF9TUEVDSUZJQyAoY3R4LT5uZXdfZnMpOworCUZhdFNwZWNpZmljKgkJb2xkX2ZzX2luZm8gPSBGQVRfU1BFQ0lGSUMgKGN0eC0+b2xkX2ZzKTsKKworCWlmIChuZXdfZnNfaW5mby0+ZmF0X3R5cGUgPT0gb2xkX2ZzX2luZm8tPmZhdF90eXBlKSB7CisJCXN3aXRjaCAob2xkX2ZzX2luZm8tPmZhdF90eXBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEZBVF9UWVBFX0ZBVDEyOgorICAgICAgICAgICAgICAgICAgICAgICAgUEVEX0FTU0VSVCAoMCwgKHZvaWQpIDApOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCWNhc2UgRkFUX1RZUEVfRkFUMTY6CisJCQlyZXR1cm4gZmF0X2NvbnN0cnVjdF9sZWdhY3lfcm9vdCAoY3R4KTsKKworCQkJY2FzZSBGQVRfVFlQRV9GQVQzMjoKKwkJCXJldHVybiBmYXRfY29uc3RydWN0X3Jvb3QgKGN0eCk7CisJCX0KKwl9IGVsc2UgeworCQlyZXR1cm4gZmF0X2NvbnN0cnVjdF9jb252ZXJ0ZWRfdHJlZSAoY3R4KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIEZhdEZyYWdtZW50CitfZ2V0X25leHRfb2xkX2ZyYWcgKEZhdE9wQ29udGV4dCogY3R4LCBGYXRGcmFnbWVudCBmcmFnKQoreworCUZhdFNwZWNpZmljKglvbGRfZnNfaW5mbyA9IEZBVF9TUEVDSUZJQyAoY3R4LT5vbGRfZnMpOworCUZhdENsdXN0ZXIJY2x1c3RlcjsKKwlGYXRDbHVzdGVyCW5leHRfY2x1c3RlcjsKKworCWlmICgoZnJhZyArIDEpICUgb2xkX2ZzX2luZm8tPmNsdXN0ZXJfZnJhZ3MgIT0gMCkgeworCQlpZiAoZmF0X2lzX2ZyYWdtZW50X2FjdGl2ZSAoY3R4LT5vbGRfZnMsIGZyYWcgKyAxKSkKKwkJCXJldHVybiBmcmFnICsgMTsKKwkJZWxzZQorCQkJcmV0dXJuIC0xOworCX0gZWxzZSB7CisJCWNsdXN0ZXIgPSBmYXRfZnJhZ190b19jbHVzdGVyIChjdHgtPm9sZF9mcywgZnJhZyk7CisJCW5leHRfY2x1c3RlciA9IGZhdF90YWJsZV9nZXQgKG9sZF9mc19pbmZvLT5mYXQsIGNsdXN0ZXIpOworCisJCWlmIChmYXRfdGFibGVfaXNfZW9mIChvbGRfZnNfaW5mby0+ZmF0LCBuZXh0X2NsdXN0ZXIpKQorCQkJcmV0dXJuIC0xOworCQllbHNlCisJCQlyZXR1cm4gZmF0X2NsdXN0ZXJfdG9fZnJhZyAoY3R4LT5vbGRfZnMsIG5leHRfY2x1c3Rlcik7CisJfQorfQorCisvKgorICAgIENvbnN0cnVjdHMgdGhlIG5ldyBmYXQgZm9yIHRoZSByZXNpemVkIGZpbGUgc3lzdGVtLgorKi8KK3N0YXRpYyBpbnQKK2ZhdF9jb25zdHJ1Y3RfbmV3X2ZhdCAoRmF0T3BDb250ZXh0KiBjdHgpCit7CisJRmF0U3BlY2lmaWMqCW9sZF9mc19pbmZvID0gRkFUX1NQRUNJRklDIChjdHgtPm9sZF9mcyk7CisJRmF0U3BlY2lmaWMqCW5ld19mc19pbmZvID0gRkFUX1NQRUNJRklDIChjdHgtPm5ld19mcyk7CisJRmF0RnJhZ21lbnQJb2xkX2ZyYWc7CisJRmF0Q2x1c3RlcgluZXdfY2x1c3RlcjsKKwlGYXRGcmFnbWVudAluZXdfZnJhZzsKKwlGYXRGcmFnbWVudAlvbGRfbmV4dF9mcmFnOworCUZhdEZyYWdtZW50CW5ld19uZXh0X2ZyYWc7CisJRmF0Q2x1c3RlcgluZXdfbmV4dF9jbHVzdGVyOworCUZhdENsdXN0ZXJGbGFnCWZsYWc7CisJaW50CQlpOworCisJZmF0X3RhYmxlX2NsZWFyIChuZXdfZnNfaW5mby0+ZmF0KTsKKwlpZiAoIWZhdF90YWJsZV9zZXRfY2x1c3Rlcl9jb3VudCAobmV3X2ZzX2luZm8tPmZhdCwKKwkJCQkJICBuZXdfZnNfaW5mby0+Y2x1c3Rlcl9jb3VudCkpCisJCXJldHVybiAwOworCisJZm9yIChvbGRfZnJhZyA9IDA7IG9sZF9mcmFnIDwgb2xkX2ZzX2luZm8tPmZyYWdfY291bnQ7IG9sZF9mcmFnKyspIHsKKwkJZmxhZyA9IGZhdF9nZXRfZnJhZ21lbnRfZmxhZyAoY3R4LT5vbGRfZnMsIG9sZF9mcmFnKTsKKwkJaWYgKGZsYWcgPT0gRkFUX0ZMQUdfRlJFRSkKKwkJCWNvbnRpbnVlOworCQlpZiAoZmxhZyA9PSBGQVRfRkxBR19CQUQpIHsKKwkJCW5ld19mcmFnID0gZmF0X29wX2NvbnRleHRfbWFwX3N0YXRpY19mcmFnbWVudCAoCisJCQkJCQljdHgsIG9sZF9mcmFnKTsKKwkJCWlmIChuZXdfZnJhZyA9PSAtMSkKKwkJCQljb250aW51ZTsKKwkJCW5ld19jbHVzdGVyID0gZmF0X2ZyYWdfdG9fY2x1c3RlciAoY3R4LT5uZXdfZnMsCisJCQkJCQkJICAgbmV3X2ZyYWcpOworCQkJZmF0X3RhYmxlX3NldF9iYWQgKG5ld19mc19pbmZvLT5mYXQsIG5ld19jbHVzdGVyKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJbmV3X2ZyYWcgPSBmYXRfb3BfY29udGV4dF9tYXBfZnJhZ21lbnQgKGN0eCwgb2xkX2ZyYWcpOworCQluZXdfY2x1c3RlciA9IGZhdF9mcmFnX3RvX2NsdXN0ZXIgKGN0eC0+bmV3X2ZzLCBuZXdfZnJhZyk7CisKKwkJb2xkX25leHRfZnJhZyA9IF9nZXRfbmV4dF9vbGRfZnJhZyAoY3R4LCBvbGRfZnJhZyk7CisJCWlmIChvbGRfbmV4dF9mcmFnID09IC0xKSB7CisJCQlmYXRfdGFibGVfc2V0X2VvZiAobmV3X2ZzX2luZm8tPmZhdCwgbmV3X2NsdXN0ZXIpOworCQkJY29udGludWU7CisJCX0KKworCQluZXdfbmV4dF9mcmFnID0gZmF0X29wX2NvbnRleHRfbWFwX2ZyYWdtZW50IChjdHgsCisJCQkJCQkJICAgICBvbGRfbmV4dF9mcmFnKTsKKwkJUEVEX0FTU0VSVCAobmV3X25leHRfZnJhZyAhPSAtMSwgcmV0dXJuIDApOworCisJCW5ld19uZXh0X2NsdXN0ZXIgPSBmYXRfZnJhZ190b19jbHVzdGVyIChjdHgtPm5ld19mcywKKwkJCQkJCQluZXdfbmV4dF9mcmFnKTsKKwkJUEVEX0FTU0VSVCAobmV3X25leHRfY2x1c3RlciAhPSBuZXdfY2x1c3RlciwgcmV0dXJuIDApOworCisJCWZhdF90YWJsZV9zZXQgKG5ld19mc19pbmZvLT5mYXQsIG5ld19jbHVzdGVyLCBuZXdfbmV4dF9jbHVzdGVyKTsKKwl9CisKKyNpZiAwCisjaWZkZWYgUEVEX1ZFUkJPU0UKKwlmb3IgKG9sZF9jbHVzdGVyPTI7IG9sZF9jbHVzdGVyIDwgb2xkX2ZzX2luZm8tPmNsdXN0ZXJfY291bnQrMjsKKwkgICAgIG9sZF9jbHVzdGVyKyspIHsKKwkJaWYgKGZhdF90YWJsZV9pc19hdmFpbGFibGUgKG9sZF9mc19pbmZvLT5mYXQsIG9sZF9jbHVzdGVyKSkKKwkJCWNvbnRpbnVlOworCisJCXByaW50ZiAoIiVkLT4lZFx0KG5leHQ6ICVkLT4lZClcbiIsCisJCQlvbGRfY2x1c3RlciwKKwkJCWN0eC0+cmVtYXAgW29sZF9jbHVzdGVyXSwKKwkJCWZhdF90YWJsZV9nZXQgKG9sZF9mc19pbmZvLT5mYXQsIG9sZF9jbHVzdGVyKSwKKwkJCWZhdF90YWJsZV9nZXQgKG5ld19mc19pbmZvLT5mYXQsCisJCQkJICAgICAgIGN0eC0+cmVtYXAgW29sZF9jbHVzdGVyXSkpOworCX0KKyNlbmRpZiAvKiBQRURfVkVSQk9TRSAqLworI2VuZGlmCisKKwlpZiAob2xkX2ZzX2luZm8tPmZhdF90eXBlID09IEZBVF9UWVBFX0ZBVDMyCisJICAgICYmIG5ld19mc19pbmZvLT5mYXRfdHlwZSA9PSBGQVRfVFlQRV9GQVQzMikgeworCQluZXdfZnNfaW5mby0+cm9vdF9jbHVzdGVyCisJCQk9IGZhdF9vcF9jb250ZXh0X21hcF9jbHVzdGVyIChjdHgsCisJCQkJCW9sZF9mc19pbmZvLT5yb290X2NsdXN0ZXIpOworCX0KKworCWlmIChvbGRfZnNfaW5mby0+ZmF0X3R5cGUgPT0gRkFUX1RZUEVfRkFUMTYKKwkgICAgJiYgbmV3X2ZzX2luZm8tPmZhdF90eXBlID09IEZBVF9UWVBFX0ZBVDMyKSB7CisJCWZvciAoaT0wOyBjdHgtPm5ld19yb290X2RpcltpKzFdOyBpKyspIHsKKwkJCWZhdF90YWJsZV9zZXQgKG5ld19mc19pbmZvLT5mYXQsCisJCQkJICAgICAgIGN0eC0+bmV3X3Jvb3RfZGlyW2ldLAorCQkJCSAgICAgICBjdHgtPm5ld19yb290X2RpcltpKzFdKTsKKwkJfQorCQlmYXRfdGFibGVfc2V0X2VvZiAobmV3X2ZzX2luZm8tPmZhdCwgY3R4LT5uZXdfcm9vdF9kaXJbaV0pOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50Cithc2tfdHlwZSAoUGVkRmlsZVN5c3RlbSogZnMsIGludCBmYXQxNl9vaywgaW50IGZhdDMyX29rLCBGYXRUeXBlKiBvdXRfZmF0X3R5cGUpCit7CisJRmF0U3BlY2lmaWMqCQlmc19pbmZvID0gRkFUX1NQRUNJRklDIChmcyk7CisJUGVkRXhjZXB0aW9uT3B0aW9uCXN0YXR1czsKKwljaGFyKgkJCWZhdDE2X21zZzsKKwljaGFyKgkJCWZhdDMyX21zZzsKKworCWlmIChmc19pbmZvLT5mYXRfdHlwZSA9PSBGQVRfVFlQRV9GQVQxNikKKwkJZmF0MTZfbXNnID0gXygiSWYgeW91IGxlYXZlIHlvdXIgZmlsZSBzeXN0ZW0gYXMgRkFUMTYsICIKKwkJCSAgICAgICJ0aGVuIHlvdSB3aWxsIGhhdmUgbm8gcHJvYmxlbXMuIik7CisJZWxzZQorCQlmYXQxNl9tc2cgPSBfKCJJZiB5b3UgY29udmVydCB0byBGQVQxNiwgYW5kIE1TIFdpbmRvd3MgIgorCQkJICAgICAgImlzIGluc3RhbGxlZCBvbiB0aGlzIHBhcnRpdGlvbiwgdGhlbiAiCisJCQkgICAgICAieW91IG11c3QgcmUtaW5zdGFsbCB0aGUgTVMgV2luZG93cyBib290ICIKKwkJCSAgICAgICJsb2FkZXIuICBJZiB5b3Ugd2FudCB0byBkbyB0aGlzLCB5b3UgIgorCQkJICAgICAgInNob3VsZCBjb25zdWx0IHRoZSBQYXJ0ZWQgbWFudWFsIChvciAiCisJCQkgICAgICAieW91ciBkaXN0cmlidXRpb24ncyBtYW51YWwpLiIpOworCisJaWYgKGZzX2luZm8tPmZhdF90eXBlID09IEZBVF9UWVBFX0ZBVDMyKQorCQlmYXQzMl9tc2cgPSBfKCJJZiB5b3UgbGVhdmUgeW91ciBmaWxlIHN5c3RlbSBhcyBGQVQzMiwgIgorCQkJICAgICAgInRoZW4geW91IHdpbGwgbm90IGludHJvZHVjZSBhbnkgbmV3ICIKKwkJCSAgICAgICJwcm9ibGVtcy4iKTsKKwllbHNlCisJCWZhdDMyX21zZyA9IF8oIklmIHlvdSBjb252ZXJ0IHRvIEZBVDMyLCBhbmQgTVMgV2luZG93cyAiCisJCQkgICAgICAiaXMgaW5zdGFsbGVkIG9uIHRoaXMgcGFydGl0aW9uLCB0aGVuICIKKwkJCSAgICAgICJ5b3UgbXVzdCByZS1pbnN0YWxsIHRoZSBNUyBXaW5kb3dzIGJvb3QgIgorCQkJICAgICAgImxvYWRlci4gIElmIHlvdSB3YW50IHRvIGRvIHRoaXMsIHlvdSAiCisJCQkgICAgICAic2hvdWxkIGNvbnN1bHQgdGhlIFBhcnRlZCBtYW51YWwgKG9yICIKKwkJCSAgICAgICJ5b3VyIGRpc3RyaWJ1dGlvbidzIG1hbnVhbCkuICBBbHNvLCAiCisJCQkgICAgICAiY29udmVydGluZyB0byBGQVQzMiB3aWxsIG1ha2UgdGhlIGZpbGUgIgorCQkJICAgICAgInN5c3RlbSB1bnJlYWRhYmxlIGJ5IE1TIERPUywgTVMgV2luZG93cyAiCisJCQkgICAgICAiOTVhLCBhbmQgTVMgV2luZG93cyBOVC4iKTsKKworCWlmIChmYXQxNl9vayAmJiBmYXQzMl9vaykgeworCQlzdGF0dXMgPSBwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCSBQRURfRVhDRVBUSU9OX0lORk9STUFUSU9OLAorCQkJIFBFRF9FWENFUFRJT05fWUVTX05PX0NBTkNFTCwKKwkJCSBfKCIlcyAgJXMgICVzIiksCisJCQkgXygiV291bGQgeW91IGxpa2UgdG8gdXNlIEZBVDMyPyIpLAorCQkJIGZhdDE2X21zZywKKwkJCSBmYXQzMl9tc2cpOworCisJCXN3aXRjaCAoc3RhdHVzKSB7CisJCWNhc2UgUEVEX0VYQ0VQVElPTl9ZRVM6CisJCQkqb3V0X2ZhdF90eXBlID0gRkFUX1RZUEVfRkFUMzI7CisJCQlyZXR1cm4gMTsKKworCQljYXNlIFBFRF9FWENFUFRJT05fTk86CisJCQkqb3V0X2ZhdF90eXBlID0gRkFUX1RZUEVfRkFUMTY7CisJCQlyZXR1cm4gMTsKKworCQljYXNlIFBFRF9FWENFUFRJT05fVU5IQU5ETEVEOgorCQkJKm91dF9mYXRfdHlwZSA9IGZzX2luZm8tPmZhdF90eXBlOworCQkJcmV0dXJuIDE7CisKKwkJY2FzZSBQRURfRVhDRVBUSU9OX0NBTkNFTDoKKwkJCXJldHVybiAwOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIFBFRF9BU1NFUlQgKDAsICh2b2lkKSAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCQl9CisJfQorCisJaWYgKGZhdDE2X29rKSB7CisJCWlmIChmc19pbmZvLT5mYXRfdHlwZSAhPSBGQVRfVFlQRV9GQVQxNikgeworCQkJc3RhdHVzID0gcGVkX2V4Y2VwdGlvbl90aHJvdyAoCisJCQkJUEVEX0VYQ0VQVElPTl9XQVJOSU5HLAorCQkJCVBFRF9FWENFUFRJT05fT0tfQ0FOQ0VMLAorCQkJCV8oIiVzICAlcyIpLAorCQkJCV8oIlRoZSBmaWxlIHN5c3RlbSBjYW4gb25seSBiZSByZXNpemVkIHRvIHRoaXMgIgorCQkJCSAgInNpemUgYnkgY29udmVydGluZyB0byBGQVQxNi4iKSwKKwkJCQlmYXQxNl9tc2cpOworCQkJaWYgKHN0YXR1cyA9PSBQRURfRVhDRVBUSU9OX0NBTkNFTCkKKwkJCQlyZXR1cm4gMDsKKwkJfQorCQkqb3V0X2ZhdF90eXBlID0gRkFUX1RZUEVfRkFUMTY7CisJCXJldHVybiAxOworCX0KKworCWlmIChmYXQzMl9vaykgeworCQlpZiAoZnNfaW5mby0+ZmF0X3R5cGUgIT0gRkFUX1RZUEVfRkFUMzIpIHsKKwkJCXN0YXR1cyA9IHBlZF9leGNlcHRpb25fdGhyb3cgKAorCQkJCVBFRF9FWENFUFRJT05fV0FSTklORywKKwkJCQlQRURfRVhDRVBUSU9OX09LX0NBTkNFTCwKKwkJCQlfKCIlcyAgJXMiKSwKKwkJCQlfKCJUaGUgZmlsZSBzeXN0ZW0gY2FuIG9ubHkgYmUgcmVzaXplZCB0byB0aGlzICIKKwkJCQkgICJzaXplIGJ5IGNvbnZlcnRpbmcgdG8gRkFUMzIuIiksCisJCQkJZmF0MzJfbXNnKTsKKwkJCWlmIChzdGF0dXMgPT0gUEVEX0VYQ0VQVElPTl9DQU5DRUwpCisJCQkJcmV0dXJuIDA7CisJCX0KKwkJKm91dF9mYXRfdHlwZSA9IEZBVF9UWVBFX0ZBVDMyOworCQlyZXR1cm4gMTsKKwl9CisJCisJcGVkX2V4Y2VwdGlvbl90aHJvdyAoCisJCVBFRF9FWENFUFRJT05fTk9fRkVBVFVSRSwKKwkJUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCV8oIkdOVSBQYXJ0ZWQgY2Fubm90IHJlc2l6ZSB0aGlzIHBhcnRpdGlvbiB0byB0aGlzIHNpemUuICAiCisJCSAgIldlJ3JlIHdvcmtpbmcgb24gaXQhIikpOworCisJcmV0dXJuIDA7Cit9CisKKy8qICBGb3IgcmVzaXplIG9wZXJhdGlvbnM6IGRldGVybWluZSBpZiB0aGUgZmlsZSBzeXN0ZW0gbXVzdCBiZSBGQVQxNiBvciBGQVQzMiwKKyAqICBvciBlaXRoZXIuICBJZiB0aGUgbmV3IGZpbGUgc3lzdGVtIG11c3QgYmUgRkFUMzIsIHRoZW4gcXVlcnkgZm9yCisgKiAgY29uZmlybWF0aW9uLiAgSWYgZWl0aGVyIGZpbGUgc3lzdGVtIGNhbiBiZSB1c2VkLCBxdWVyeSBmb3Igd2hpY2ggb25lLgorICovCitzdGF0aWMgaW50CitnZXRfZmF0X3R5cGUgKFBlZEZpbGVTeXN0ZW0qIGZzLCBjb25zdCBQZWRHZW9tZXRyeSogbmV3X2dlb20sCisJICAgICAgRmF0VHlwZSogb3V0X2ZhdF90eXBlKQoreworCUZhdFNwZWNpZmljKgkJZnNfaW5mbyA9IEZBVF9TUEVDSUZJQyAoZnMpOworCVBlZFNlY3RvcgkJZmF0MTZfY2x1c3Rlcl9zZWN0b3JzOworCVBlZFNlY3RvcgkJZmF0MzJfY2x1c3Rlcl9zZWN0b3JzOworCUZhdENsdXN0ZXIJCWR1bW15X2NsdXN0ZXJfY291bnQ7CisJUGVkU2VjdG9yCQlkdW1teV9mYXRfc2VjdG9yczsKKwlpbnQJCQlmYXQxNl9vazsKKwlpbnQJCQlmYXQzMl9vazsKKworCWZhdDE2X29rID0gZmF0X2NhbGNfcmVzaXplX3NpemVzICgKKwkJCQkgICAgbmV3X2dlb20sCisJCQkJICAgIGZzX2luZm8tPmNsdXN0ZXJfc2VjdG9ycywKKwkJCQkgICAgRkFUX1RZUEVfRkFUMTYsCisJCQkJICAgIGZzX2luZm8tPnJvb3RfZGlyX3NlY3Rvcl9jb3VudCwKKwkJCQkgICAgZnNfaW5mby0+Y2x1c3Rlcl9zZWN0b3JzLAorCQkJCSAgICAmZmF0MTZfY2x1c3Rlcl9zZWN0b3JzLAorCQkJCSAgICAmZHVtbXlfY2x1c3Rlcl9jb3VudCwKKwkJCQkgICAgJmR1bW15X2ZhdF9zZWN0b3JzKTsKKworCWZhdDMyX29rID0gZmF0X2NhbGNfcmVzaXplX3NpemVzICgKKwkJCQkgICAgbmV3X2dlb20sCisJCQkJICAgIGZzX2luZm8tPmNsdXN0ZXJfc2VjdG9ycywKKwkJCQkgICAgRkFUX1RZUEVfRkFUMzIsCisJCQkJICAgIGZzX2luZm8tPnJvb3RfZGlyX3NlY3Rvcl9jb3VudCwKKwkJCQkgICAgZnNfaW5mby0+Y2x1c3Rlcl9zZWN0b3JzLAorCQkJCSAgICAmZmF0MzJfY2x1c3Rlcl9zZWN0b3JzLAorCQkJCSAgICAmZHVtbXlfY2x1c3Rlcl9jb3VudCwKKwkJCQkgICAgJmR1bW15X2ZhdF9zZWN0b3JzKTsKKworCXJldHVybiBhc2tfdHlwZSAoZnMsIGZhdDE2X29rLCBmYXQzMl9vaywgb3V0X2ZhdF90eXBlKTsKK30KKworLyogIENyZWF0ZXMgdGhlIFBlZEZpbGVTeXN0ZW0gc3RydWN0IGZvciB0aGUgbmV3IHJlc2l6ZWQgZmlsZSBzeXN0ZW0sIGFuZAorICAgIHN0aWNrcyBpdCBpbiBhIEZhdE9wQ29udGV4dC4gIEF0IHRoZSBlbmQgb2YgdGhlIHByb2Nlc3MsIHRoZSBvcmlnaW5hbAorICAgIChjdHgtPm9sZF9mcykgaXMgZGVzdHJveWVkLCBhbmQgcmVwbGFjZWQgd2l0aCB0aGUgbmV3IG9uZSAoY3R4LT5uZXdfZnMpLgorICovCitzdGF0aWMgRmF0T3BDb250ZXh0KgorY3JlYXRlX3Jlc2l6ZV9jb250ZXh0IChQZWRGaWxlU3lzdGVtKiBmcywgY29uc3QgUGVkR2VvbWV0cnkqIG5ld19nZW9tKQoreworCUZhdFNwZWNpZmljKglmc19pbmZvID0gRkFUX1NQRUNJRklDIChmcyk7CisJRmF0U3BlY2lmaWMqCW5ld19mc19pbmZvOworCVBlZEZpbGVTeXN0ZW0qCW5ld19mczsKKwlQZWRTZWN0b3IJbmV3X2NsdXN0ZXJfc2VjdG9yczsKKwlGYXRDbHVzdGVyCW5ld19jbHVzdGVyX2NvdW50OworCVBlZFNlY3RvcgluZXdfZmF0X3NlY3RvcnM7CisJRmF0VHlwZQkJbmV3X2ZhdF90eXBlOworCVBlZFNlY3Rvcglyb290X2Rpcl9zZWN0b3JfY291bnQ7CisJRmF0T3BDb250ZXh0Kgljb250ZXh0OworCisJLyogaHlwb3RoZXRpY2FsIG51bWJlciBvZiByb290IGRpciBzZWN0b3JzLCBpZiB3ZSBlbmQgdXAgdXNpbmcKKwkgKiBGQVQxNgorCSAqLworCWlmIChmc19pbmZvLT5yb290X2Rpcl9zZWN0b3JfY291bnQpCisJCXJvb3RfZGlyX3NlY3Rvcl9jb3VudCA9IGZzX2luZm8tPnJvb3RfZGlyX3NlY3Rvcl9jb3VudDsKKwllbHNlCisJCXJvb3RfZGlyX3NlY3Rvcl9jb3VudCA9IEZBVF9ST09UX0RJUl9FTlRSWV9DT1VOVAorCQkJCQkJKiBzaXplb2YgKEZhdERpckVudHJ5KSAvIDUxMjsKKworCWlmICghZ2V0X2ZhdF90eXBlIChmcywgbmV3X2dlb20sICZuZXdfZmF0X3R5cGUpKQorCQlyZXR1cm4gMDsKKworCWZhdF9jYWxjX3Jlc2l6ZV9zaXplcyAobmV3X2dlb20sIGZzX2luZm8tPmNsdXN0ZXJfc2VjdG9ycywgbmV3X2ZhdF90eXBlLAorCQlyb290X2Rpcl9zZWN0b3JfY291bnQsIGZzX2luZm8tPmNsdXN0ZXJfc2VjdG9ycywKKwkJJm5ld19jbHVzdGVyX3NlY3RvcnMsICZuZXdfY2x1c3Rlcl9jb3VudCwgJm5ld19mYXRfc2VjdG9ycyk7CisKKwlpZiAoIWZhdF9jaGVja19yZXNpemVfZ2VvbWV0cnkgKGZzLCBuZXdfZ2VvbSwgbmV3X2NsdXN0ZXJfc2VjdG9ycywKKwkJCQkgICAgICAgIG5ld19jbHVzdGVyX2NvdW50KSkKKwkJZ290byBlcnJvcjsKKworCW5ld19mcyA9IGZhdF9hbGxvYyAobmV3X2dlb20pOworCWlmICghbmV3X2ZzKQorCQlnb3RvIGVycm9yOworCisJbmV3X2ZzX2luZm8gPSBGQVRfU1BFQ0lGSUMgKG5ld19mcyk7CisJaWYgKCFuZXdfZnNfaW5mbykKKwkJZ290byBlcnJvcl9mcmVlX25ld19mczsKKworLyogcHJlc2VydmUgYm9vdCBjb2RlLCBldGMuICovCisJbWVtY3B5ICgmbmV3X2ZzX2luZm8tPmJvb3Rfc2VjdG9yLCAmZnNfaW5mby0+Ym9vdF9zZWN0b3IsCisJCXNpemVvZiAoRmF0Qm9vdFNlY3RvcikpOworCW1lbWNweSAoJm5ld19mc19pbmZvLT5pbmZvX3NlY3RvciwgJmZzX2luZm8tPmluZm9fc2VjdG9yLAorCQlzaXplb2YgKEZhdEluZm9TZWN0b3IpKTsKKworCW5ld19mc19pbmZvLT5sb2dpY2FsX3NlY3Rvcl9zaXplID0gZnNfaW5mby0+bG9naWNhbF9zZWN0b3Jfc2l6ZTsKKwluZXdfZnNfaW5mby0+c2VjdG9yX2NvdW50ID0gbmV3X2dlb20tPmxlbmd0aDsKKworCW5ld19mc19pbmZvLT5zZWN0b3JzX3Blcl90cmFjayA9IGZzX2luZm8tPnNlY3RvcnNfcGVyX3RyYWNrOworCW5ld19mc19pbmZvLT5oZWFkcyA9IGZzX2luZm8tPmhlYWRzOworCisJbmV3X2ZzX2luZm8tPmNsdXN0ZXJfc2l6ZSA9IG5ld19jbHVzdGVyX3NlY3RvcnMgKiA1MTI7CisJbmV3X2ZzX2luZm8tPmNsdXN0ZXJfc2VjdG9ycyA9IG5ld19jbHVzdGVyX3NlY3RvcnM7CisJbmV3X2ZzX2luZm8tPmNsdXN0ZXJfY291bnQgPSBuZXdfY2x1c3Rlcl9jb3VudDsKKwluZXdfZnNfaW5mby0+ZGlyX2VudHJpZXNfcGVyX2NsdXN0ZXIgPSBmc19pbmZvLT5kaXJfZW50cmllc19wZXJfY2x1c3RlcjsKKworCW5ld19mc19pbmZvLT5mYXRfdHlwZSA9IG5ld19mYXRfdHlwZTsgCisJbmV3X2ZzX2luZm8tPmZhdF90YWJsZV9jb3VudCA9IDI7CisJbmV3X2ZzX2luZm8tPmZhdF9zZWN0b3JzID0gbmV3X2ZhdF9zZWN0b3JzOworCisJLyogd2hhdCBhYm91dCBjb3B5aW5nPyAqLworCW5ld19mc19pbmZvLT5zZXJpYWxfbnVtYmVyID0gZnNfaW5mby0+c2VyaWFsX251bWJlcjsKKworCWlmIChuZXdfZnNfaW5mby0+ZmF0X3R5cGUgPT0gRkFUX1RZUEVfRkFUMzIpIHsKKwkJbmV3X2ZzX2luZm8tPmluZm9fc2VjdG9yX29mZnNldAk9IDE7CisJCW5ld19mc19pbmZvLT5ib290X3NlY3Rvcl9iYWNrdXBfb2Zmc2V0ID0gNjsKKworCQluZXdfZnNfaW5mby0+cm9vdF9kaXJfb2Zmc2V0ID0gMDsKKwkJbmV3X2ZzX2luZm8tPnJvb3RfZGlyX2VudHJ5X2NvdW50ID0gMDsKKwkJbmV3X2ZzX2luZm8tPnJvb3RfZGlyX3NlY3Rvcl9jb3VudCA9IDA7CisKKwkJLyogd2UgYWRkIGNhbGNfYWxpZ25fc2VjdG9ycyB0byBwdXNoIHRoZSBjbHVzdGVyX29mZnNldAorCQkgICBmb3J3YXJkLCB0byBrZWVwIHRoZSBjbHVzdGVycyBhbGlnbmVkIGJldHdlZW4gdGhlIG5ldworCQkgICBhbmQgb2xkIGZpbGUgc3lzdGVtcworCQkgKi8KKwkJbmV3X2ZzX2luZm8tPmZhdF9vZmZzZXQKKwkJCT0gZmF0X21pbl9yZXNlcnZlZF9zZWN0b3JfY291bnQgKEZBVF9UWVBFX0ZBVDMyKQorCQkJICArIGZhdF9jYWxjX2FsaWduX3NlY3RvcnMgKG5ld19mcywgZnMpOworCisJCW5ld19mc19pbmZvLT5jbHVzdGVyX29mZnNldAorCQkJPSBuZXdfZnNfaW5mby0+ZmF0X29mZnNldAorCQkJICArIDIgKiBuZXdfZnNfaW5mby0+ZmF0X3NlY3RvcnM7CisJfSBlbHNlIHsKKwkJbmV3X2ZzX2luZm8tPnJvb3RfZGlyX3NlY3Rvcl9jb3VudCA9IHJvb3RfZGlyX3NlY3Rvcl9jb3VudDsKKwkJbmV3X2ZzX2luZm8tPnJvb3RfZGlyX2VudHJ5X2NvdW50IAorCQkJPSByb290X2Rpcl9zZWN0b3JfY291bnQgKiA1MTIgLyBzaXplb2YgKEZhdERpckVudHJ5KTsKKworCQluZXdfZnNfaW5mby0+ZmF0X29mZnNldAorCQkJPSBmYXRfbWluX3Jlc2VydmVkX3NlY3Rvcl9jb3VudCAoRkFUX1RZUEVfRkFUMTYpCisJCQkgICsgZmF0X2NhbGNfYWxpZ25fc2VjdG9ycyAobmV3X2ZzLCBmcyk7CisKKwkJbmV3X2ZzX2luZm8tPnJvb3RfZGlyX29mZnNldCA9IG5ld19mc19pbmZvLT5mYXRfb2Zmc2V0CisJCQkJCSAgICAgICArIDIgKiBuZXdfZnNfaW5mby0+ZmF0X3NlY3RvcnM7CisKKwkJbmV3X2ZzX2luZm8tPmNsdXN0ZXJfb2Zmc2V0ID0gbmV3X2ZzX2luZm8tPnJvb3RfZGlyX29mZnNldAorCQkJCQkgICsgbmV3X2ZzX2luZm8tPnJvb3RfZGlyX3NlY3Rvcl9jb3VudDsKKwl9CisJCisJbmV3X2ZzX2luZm8tPnRvdGFsX2Rpcl9jbHVzdGVycyA9IGZzX2luZm8tPnRvdGFsX2Rpcl9jbHVzdGVyczsKKworCWNvbnRleHQgPSBmYXRfb3BfY29udGV4dF9uZXcgKG5ld19mcywgZnMpOworCWlmICghY29udGV4dCkKKwkJZ290byBlcnJvcl9mcmVlX25ld19mc19pbmZvOworCisJaWYgKCFmYXRfb3BfY29udGV4dF9jcmVhdGVfaW5pdGlhbF9mYXQgKGNvbnRleHQpKQorCQlnb3RvIGVycm9yX2ZyZWVfY29udGV4dDsKKworCWlmICghZmF0X2FsbG9jX2J1ZmZlcnMgKG5ld19mcykpCisJCWdvdG8gZXJyb3JfZnJlZV9mYXQ7CisKKwlyZXR1cm4gY29udGV4dDsKKworZXJyb3JfZnJlZV9mYXQ6CisJZmF0X3RhYmxlX2Rlc3Ryb3kgKG5ld19mc19pbmZvLT5mYXQpOworZXJyb3JfZnJlZV9jb250ZXh0OgorCXBlZF9mcmVlIChjb250ZXh0KTsKK2Vycm9yX2ZyZWVfbmV3X2ZzX2luZm86CisJcGVkX2ZyZWUgKG5ld19mc19pbmZvKTsKK2Vycm9yX2ZyZWVfbmV3X2ZzOgorCXBlZF9mcmVlIChuZXdfZnMpOworZXJyb3I6CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQKK3Jlc2l6ZV9jb250ZXh0X2Fzc2ltaWxhdGUgKEZhdE9wQ29udGV4dCogY3R4KQoreworCUZhdFNwZWNpZmljKglvbGRfZnNfaW5mbyA9IEZBVF9TUEVDSUZJQyAoY3R4LT5vbGRfZnMpOworCUZhdFNwZWNpZmljKgluZXdfZnNfaW5mbyA9IEZBVF9TUEVDSUZJQyAoY3R4LT5uZXdfZnMpOworCisJZmF0X2ZyZWVfYnVmZmVycyAoY3R4LT5vbGRfZnMpOworCWZhdF90YWJsZV9kZXN0cm95IChvbGRfZnNfaW5mby0+ZmF0KTsKKwlwZWRfZnJlZSAob2xkX2ZzX2luZm8pOworCXBlZF9nZW9tZXRyeV9kZXN0cm95IChjdHgtPm9sZF9mcy0+Z2VvbSk7CisKKwljdHgtPm9sZF9mcy0+dHlwZV9zcGVjaWZpYyA9IGN0eC0+bmV3X2ZzLT50eXBlX3NwZWNpZmljOworCWN0eC0+b2xkX2ZzLT5nZW9tID0gY3R4LT5uZXdfZnMtPmdlb207CisJY3R4LT5vbGRfZnMtPnR5cGUgPSAobmV3X2ZzX2luZm8tPmZhdF90eXBlID09IEZBVF9UWVBFX0ZBVDE2KQorCQkJCT8gJmZhdDE2X3R5cGUKKwkJCSAgICAgICAJOiAmZmF0MzJfdHlwZTsKKworCXBlZF9mcmVlIChjdHgtPm5ld19mcyk7CisKKwlmYXRfb3BfY29udGV4dF9kZXN0cm95IChjdHgpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3Jlc2l6ZV9jb250ZXh0X2Fib3J0IChGYXRPcENvbnRleHQqIGN0eCkKK3sKKwlGYXRTcGVjaWZpYyoJbmV3X2ZzX2luZm8gPSBGQVRfU1BFQ0lGSUMgKGN0eC0+bmV3X2ZzKTsKKworCWZhdF9mcmVlX2J1ZmZlcnMgKGN0eC0+bmV3X2ZzKTsKKwlmYXRfdGFibGVfZGVzdHJveSAobmV3X2ZzX2luZm8tPmZhdCk7CisJcGVkX2ZyZWUgKG5ld19mc19pbmZvKTsKKwlwZWRfZ2VvbWV0cnlfZGVzdHJveSAoY3R4LT5uZXdfZnMtPmdlb20pOworCXBlZF9mcmVlIChjdHgtPm5ld19mcyk7CisKKwlmYXRfb3BfY29udGV4dF9kZXN0cm95IChjdHgpOworCisJcmV0dXJuIDE7Cit9CisKKy8qIGNvcGllcyB0aGUgImhpZGRlbiIgc2VjdG9ycywgYmV0d2VlbiB0aGUgYm9vdCBzZWN0b3IgYW5kIHRoZSBGQVQuICBSZXF1aXJlZCwKKyAqIGZvciB0aGUgV2luZG93cyA5OCBGQVQzMiBib290IGxvYWRlcgorICovCitpbnQKK19jb3B5X2hpZGRlbl9zZWN0b3JzIChGYXRPcENvbnRleHQqIGN0eCkKK3sKKwlGYXRTcGVjaWZpYyogICAgb2xkX2ZzX2luZm8gPSBGQVRfU1BFQ0lGSUMgKGN0eC0+b2xkX2ZzKTsKKwlGYXRTcGVjaWZpYyogICAgbmV3X2ZzX2luZm8gPSBGQVRfU1BFQ0lGSUMgKGN0eC0+bmV3X2ZzKTsKKwlQZWRTZWN0b3IgICAgICAgZmlyc3QgPSAxOworCVBlZFNlY3RvciAgICAgICBsYXN0OworCVBlZFNlY3RvciAgICAgICBjb3VudDsKKworCS8qIG5vdGhpbmcgdG8gY29weSBmb3IgRkFUMTYgKi8KKwlpZiAob2xkX2ZzX2luZm8tPmZhdF90eXBlID09IEZBVF9UWVBFX0ZBVDE2CisJCQl8fCBuZXdfZnNfaW5mby0+ZmF0X3R5cGUgPT0gRkFUX1RZUEVfRkFUMTYpCisJCXJldHVybiAxOworCisJbGFzdCA9IFBFRF9NSU4gKG9sZF9mc19pbmZvLT5mYXRfb2Zmc2V0LCBuZXdfZnNfaW5mby0+ZmF0X29mZnNldCkgLSAxOworCWNvdW50ID0gbGFzdCAtIGZpcnN0ICsgMTsKKworCVBFRF9BU1NFUlQgKGNvdW50IDwgQlVGRkVSX1NJWkUsIHJldHVybiAwKTsKKworCWlmICghcGVkX2dlb21ldHJ5X3JlYWQgKGN0eC0+b2xkX2ZzLT5nZW9tLCBvbGRfZnNfaW5mby0+YnVmZmVyLAorCQkJCWZpcnN0LCBjb3VudCkpCisJCXJldHVybiAwOworCWlmICghcGVkX2dlb21ldHJ5X3dyaXRlIChjdHgtPm5ld19mcy0+Z2VvbSwgb2xkX2ZzX2luZm8tPmJ1ZmZlciwKKwkJCQkgZmlyc3QsIGNvdW50KSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKK2ludAorZmF0X3Jlc2l6ZSAoUGVkRmlsZVN5c3RlbSogZnMsIFBlZEdlb21ldHJ5KiBnZW9tLCBQZWRUaW1lciogdGltZXIpCit7CisJRmF0U3BlY2lmaWMqCWZzX2luZm8gPSBGQVRfU1BFQ0lGSUMgKGZzKTsKKwlGYXRTcGVjaWZpYyoJbmV3X2ZzX2luZm87CisJRmF0T3BDb250ZXh0KgljdHg7CisJUGVkRmlsZVN5c3RlbSoJbmV3X2ZzOworCisJY3R4ID0gY3JlYXRlX3Jlc2l6ZV9jb250ZXh0IChmcywgZ2VvbSk7CisJaWYgKCFjdHgpCisJCWdvdG8gZXJyb3I7CisJbmV3X2ZzID0gY3R4LT5uZXdfZnM7CisJbmV3X2ZzX2luZm8gPSBGQVRfU1BFQ0lGSUMgKG5ld19mcyk7CisKKwlpZiAoIWZhdF9kdXBsaWNhdGVfY2x1c3RlcnMgKGN0eCwgdGltZXIpKQorCQlnb3RvIGVycm9yX2Fib3J0X2N0eDsKKwlpZiAoZnNfaW5mby0+ZmF0X3R5cGUgPT0gRkFUX1RZUEVfRkFUMTYKKwkJCSYmIG5ld19mc19pbmZvLT5mYXRfdHlwZSA9PSBGQVRfVFlQRV9GQVQzMikgeworCQlpZiAoIWFsbG9jX3Jvb3RfZGlyIChjdHgpKQorCQkJZ290byBlcnJvcl9hYm9ydF9jdHg7CisJfQorCWlmICghZmF0X2NvbnN0cnVjdF9uZXdfZmF0IChjdHgpKQorCQlnb3RvIGVycm9yX2Fib3J0X2N0eDsKKwlpZiAoZnNfaW5mby0+ZmF0X3R5cGUgPT0gRkFUX1RZUEVfRkFUMzIKKwkJCSYmIG5ld19mc19pbmZvLT5mYXRfdHlwZSA9PSBGQVRfVFlQRV9GQVQxNikgeworCQlpZiAoIWZyZWVfcm9vdF9kaXIgKGN0eCkpCisJCQlnb3RvIGVycm9yX2Fib3J0X2N0eDsKKwl9CisJaWYgKCFmYXRfY29uc3RydWN0X2Rpcl90cmVlIChjdHgpKQorCQlnb3RvIGVycm9yX2Fib3J0X2N0eDsKKwlpZiAoIWZhdF90YWJsZV93cml0ZV9hbGwgKG5ld19mc19pbmZvLT5mYXQsIG5ld19mcykpCisJCWdvdG8gZXJyb3JfYWJvcnRfY3R4OworCisJX2NvcHlfaGlkZGVuX3NlY3RvcnMgKGN0eCk7CisJZmF0X2Jvb3Rfc2VjdG9yX2dlbmVyYXRlICgmbmV3X2ZzX2luZm8tPmJvb3Rfc2VjdG9yLCBuZXdfZnMpOworCWZhdF9ib290X3NlY3Rvcl93cml0ZSAoJm5ld19mc19pbmZvLT5ib290X3NlY3RvciwgbmV3X2ZzKTsKKwlpZiAobmV3X2ZzX2luZm8tPmZhdF90eXBlID09IEZBVF9UWVBFX0ZBVDMyKSB7CisJCWZhdF9pbmZvX3NlY3Rvcl9nZW5lcmF0ZSAoJm5ld19mc19pbmZvLT5pbmZvX3NlY3RvciwgbmV3X2ZzKTsKKwkJZmF0X2luZm9fc2VjdG9yX3dyaXRlICgmbmV3X2ZzX2luZm8tPmluZm9fc2VjdG9yLCBuZXdfZnMpOworCX0KKworCWlmICghcmVzaXplX2NvbnRleHRfYXNzaW1pbGF0ZSAoY3R4KSkKKwkJZ290byBlcnJvcjsKKworCXJldHVybiAxOworCitlcnJvcl9hYm9ydF9jdHg6CisJcmVzaXplX2NvbnRleHRfYWJvcnQgKGN0eCk7CitlcnJvcjoKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmIC8qICFESVNDT1ZFUl9PTkxZICovCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2ZhdC90YWJsZS5jIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9mYXQvdGFibGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGI2MTI3Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9mYXQvdGFibGUuYwpAQCAtMCwwICsxLDQ4MiBAQAorLyoKKyAgICBsaWJwYXJ0ZWQKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDAsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCisqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8cGFydGVkL2VuZGlhbi5oPgorI2luY2x1ZGUgImZhdC5oIgorCisjaWZuZGVmIERJU0NPVkVSX09OTFkKKworRmF0VGFibGUqCitmYXRfdGFibGVfbmV3IChGYXRUeXBlIGZhdF90eXBlLCBGYXRDbHVzdGVyIHNpemUpCit7CisJRmF0VGFibGUqCWZ0OworCWludAkJZW50cnlfc2l6ZSA9IGZhdF90YWJsZV9lbnRyeV9zaXplIChmYXRfdHlwZSk7CisKKwlmdCA9IChGYXRUYWJsZSopIHBlZF9tYWxsb2MgKHNpemVvZiAoRmF0VGFibGUpKTsKKwlpZiAoIWZ0KSByZXR1cm4gTlVMTDsKKworCWZ0LT5jbHVzdGVyX2NvdW50ID0gZnQtPmZyZWVfY2x1c3Rlcl9jb3VudCA9IHNpemUgLSAyOworCisvKiBlbnN1cmUgdGhlcmUncyBzb21lIGZyZWUgcm9vbSBvbiB0aGUgZW5kLCB0byBmaW5pc2ggb2ZmIHRoZSBzZWN0b3IgKi8KKwlmdC0+c2l6ZSA9IHBlZF9kaXZfcm91bmRfdXAgKHNpemUgKiBlbnRyeV9zaXplLCA1MTIpICogNTEyIC8gZW50cnlfc2l6ZTsKKwlmdC0+ZmF0X3R5cGUgPSBmYXRfdHlwZTsKKwlmdC0+cmF3X3NpemUgPSBmdC0+c2l6ZSAqIGVudHJ5X3NpemU7CisKKwlmdC0+dGFibGUgPSBwZWRfbWFsbG9jIChmdC0+cmF3X3NpemUpOworCWlmICghZnQtPnRhYmxlKSB7CisJCXBlZF9mcmVlIChmdCk7CisJCXJldHVybiBOVUxMOworCX0KKworCWZhdF90YWJsZV9jbGVhciAoZnQpOworCXJldHVybiBmdDsKK30KKwordm9pZAorZmF0X3RhYmxlX2Rlc3Ryb3kgKEZhdFRhYmxlKiBmdCkKK3sKKwlwZWRfZnJlZSAoZnQtPnRhYmxlKTsKKwlwZWRfZnJlZSAoZnQpOworfQorCitGYXRUYWJsZSoKK2ZhdF90YWJsZV9kdXBsaWNhdGUgKGNvbnN0IEZhdFRhYmxlKiBmdCkKK3sKKwlGYXRUYWJsZSoJZHVwOworCisJZHVwID0gZmF0X3RhYmxlX25ldyAoZnQtPmZhdF90eXBlLCBmdC0+c2l6ZSk7CisJaWYgKCFkdXApIHJldHVybiBOVUxMOworCisJZHVwLT5jbHVzdGVyX2NvdW50CT0gZnQtPmNsdXN0ZXJfY291bnQ7CisJZHVwLT5mcmVlX2NsdXN0ZXJfY291bnQJPSBmdC0+ZnJlZV9jbHVzdGVyX2NvdW50OworCWR1cC0+YmFkX2NsdXN0ZXJfY291bnQJPSBmdC0+YmFkX2NsdXN0ZXJfY291bnQ7CisJZHVwLT5sYXN0X2FsbG9jCQk9IGZ0LT5sYXN0X2FsbG9jOworCisJbWVtY3B5IChkdXAtPnRhYmxlLCBmdC0+dGFibGUsIGZ0LT5yYXdfc2l6ZSk7CisKKwlyZXR1cm4gZHVwOworfQorCit2b2lkCitmYXRfdGFibGVfY2xlYXIgKEZhdFRhYmxlKiBmdCkKK3sKKwltZW1zZXQgKGZ0LT50YWJsZSwgMCwgZnQtPnJhd19zaXplKTsKKworCWZhdF90YWJsZV9zZXQgKGZ0LCAwLCAweDBmZmZmZmY4KTsKKwlmYXRfdGFibGVfc2V0IChmdCwgMSwgMHgwZmZmZmZmZik7CisKKwlmdC0+ZnJlZV9jbHVzdGVyX2NvdW50ID0gZnQtPmNsdXN0ZXJfY291bnQ7CisJZnQtPmJhZF9jbHVzdGVyX2NvdW50ID0gMDsKKwlmdC0+bGFzdF9hbGxvYyA9IDE7Cit9CisKK2ludAorZmF0X3RhYmxlX3NldF9jbHVzdGVyX2NvdW50IChGYXRUYWJsZSogZnQsIEZhdENsdXN0ZXIgbmV3X2NsdXN0ZXJfY291bnQpCit7CisJUEVEX0FTU0VSVCAobmV3X2NsdXN0ZXJfY291bnQgKyAyIDw9IGZ0LT5zaXplLCByZXR1cm4gMCk7CisKKwlmdC0+Y2x1c3Rlcl9jb3VudCA9IG5ld19jbHVzdGVyX2NvdW50OworCXJldHVybiBmYXRfdGFibGVfY291bnRfc3RhdHMgKGZ0KTsKK30KKworaW50CitmYXRfdGFibGVfY291bnRfc3RhdHMgKEZhdFRhYmxlKiBmdCkKK3sKKwlGYXRDbHVzdGVyCWk7CisKKwlQRURfQVNTRVJUIChmdC0+Y2x1c3Rlcl9jb3VudCArIDIgPD0gZnQtPnNpemUsIHJldHVybiAwKTsKKworCWZ0LT5mcmVlX2NsdXN0ZXJfY291bnQgPSAwOworCWZ0LT5iYWRfY2x1c3Rlcl9jb3VudCA9IDA7CisKKwlmb3IgKGk9MjsgaSA8IGZ0LT5jbHVzdGVyX2NvdW50ICsgMjsgaSsrKSB7CisJCWlmIChmYXRfdGFibGVfaXNfYXZhaWxhYmxlIChmdCwgaSkpCisJCQlmdC0+ZnJlZV9jbHVzdGVyX2NvdW50Kys7CisJCWlmIChmYXRfdGFibGVfaXNfYmFkIChmdCwgaSkpCisJCQlmdC0+YmFkX2NsdXN0ZXJfY291bnQrKzsKKwl9CisJcmV0dXJuIDE7Cit9CisKK2ludAorZmF0X3RhYmxlX3JlYWQgKEZhdFRhYmxlKiBmdCwgY29uc3QgUGVkRmlsZVN5c3RlbSogZnMsIGludCB0YWJsZV9udW0pCit7CisJRmF0U3BlY2lmaWMqCWZzX2luZm8gPSBGQVRfU1BFQ0lGSUMgKGZzKTsKKworCVBFRF9BU1NFUlQgKGZ0LT5yYXdfc2l6ZSA+PSBmc19pbmZvLT5mYXRfc2VjdG9ycyAqIDUxMiwgcmV0dXJuIDApOworCisJbWVtc2V0IChmdC0+dGFibGUsIDAsIGZ0LT5yYXdfc2l6ZSk7CisKKyAgICAgICAgaWYgKCFwZWRfZ2VvbWV0cnlfcmVhZCAoZnMtPmdlb20sICh2b2lkICopIGZ0LT50YWJsZSwKKwkJCQlmc19pbmZvLT5mYXRfb2Zmc2V0CisJCQkJCSsgdGFibGVfbnVtICogZnNfaW5mby0+ZmF0X3NlY3RvcnMsCisJCQkJZnNfaW5mby0+ZmF0X3NlY3RvcnMpKQorCQlyZXR1cm4gMDsKKworICAgICAgICBpZiAoICooKHVuc2lnbmVkIGNoYXIqKSBmdC0+dGFibGUpICE9IGZzX2luZm8tPmJvb3Rfc2VjdG9yLm1lZGlhKSB7CisJCWlmIChwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCVBFRF9FWENFUFRJT05fRVJST1IsCisJCQlQRURfRVhDRVBUSU9OX0lHTk9SRV9DQU5DRUwsCisJCQlfKCJGQVQgJWQgbWVkaWEgJXggZG9lc24ndCBtYXRjaCB0aGUgYm9vdCBzZWN0b3IncyAiCisJCQkgICJtZWRpYSAleC4gIFlvdSBzaG91bGQgcHJvYmFibHkgcnVuIHNjYW5kaXNrLiIpLAorCQkJKGludCkgdGFibGVfbnVtICsgMSwKKwkJCShpbnQpICooKHVuc2lnbmVkIGNoYXIqKSBmdC0+dGFibGUpLAorCQkJKGludCkgZnNfaW5mby0+Ym9vdF9zZWN0b3IubWVkaWEpCisJCQkJIT0gUEVEX0VYQ0VQVElPTl9JR05PUkUpCisJCQlyZXR1cm4gMDsKKyAgICAgICAgfQorCisJZnQtPmNsdXN0ZXJfY291bnQgPSBmc19pbmZvLT5jbHVzdGVyX2NvdW50OworCisJZmF0X3RhYmxlX2NvdW50X3N0YXRzIChmdCk7CisKKwlyZXR1cm4gMTsKK30KKworaW50CitmYXRfdGFibGVfd3JpdGUgKGNvbnN0IEZhdFRhYmxlKiBmdCwgUGVkRmlsZVN5c3RlbSogZnMsIGludCB0YWJsZV9udW0pCit7CisJRmF0U3BlY2lmaWMqCWZzX2luZm8gPSBGQVRfU1BFQ0lGSUMgKGZzKTsKKworCVBFRF9BU1NFUlQgKGZ0LT5yYXdfc2l6ZSA+PSBmc19pbmZvLT5mYXRfc2VjdG9ycyAqIDUxMiwgcmV0dXJuIDApOworCisgICAgICAgIGlmICghcGVkX2dlb21ldHJ5X3dyaXRlIChmcy0+Z2VvbSwgKHZvaWQgKikgZnQtPnRhYmxlLAorCQkJCSBmc19pbmZvLT5mYXRfb2Zmc2V0CisJCQkJCSsgdGFibGVfbnVtICogZnNfaW5mby0+ZmF0X3NlY3RvcnMsCisJCQkJIGZzX2luZm8tPmZhdF9zZWN0b3JzKSkKKwkJcmV0dXJuIDA7CisJaWYgKCFwZWRfZ2VvbWV0cnlfc3luYyAoZnMtPmdlb20pKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCitpbnQKK2ZhdF90YWJsZV93cml0ZV9hbGwgKGNvbnN0IEZhdFRhYmxlKiBmdCwgUGVkRmlsZVN5c3RlbSogZnMpCit7CisJRmF0U3BlY2lmaWMqCWZzX2luZm8gPSBGQVRfU1BFQ0lGSUMgKGZzKTsKKwlpbnQJCWk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZnNfaW5mby0+ZmF0X3RhYmxlX2NvdW50OyBpKyspIHsKKwkJaWYgKCFmYXRfdGFibGVfd3JpdGUgKGZ0LCBmcywgaSkpCisJCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworaW50CitmYXRfdGFibGVfY29tcGFyZSAoY29uc3QgRmF0VGFibGUqIGEsIGNvbnN0IEZhdFRhYmxlKiBiKQoreworCUZhdENsdXN0ZXIJaTsKKworCWlmIChhLT5jbHVzdGVyX2NvdW50ICE9IGItPmNsdXN0ZXJfY291bnQpCisJCXJldHVybiAwOworCisJZm9yIChpID0gMDsgaSA8IGEtPmNsdXN0ZXJfY291bnQgKyAyOyBpKyspIHsKKwkJaWYgKGZhdF90YWJsZV9nZXQgKGEsIGkpICE9IGZhdF90YWJsZV9nZXQgKGIsIGkpKQorCQkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK190ZXN0X2NvZGVfYXZhaWxhYmxlIChjb25zdCBGYXRUYWJsZSogZnQsIEZhdENsdXN0ZXIgY29kZSkKK3sKKwlyZXR1cm4gY29kZSA9PSAwOworfQorCitzdGF0aWMgaW50CitfdGVzdF9jb2RlX2JhZCAoY29uc3QgRmF0VGFibGUqIGZ0LCBGYXRDbHVzdGVyIGNvZGUpCit7CisJc3dpdGNoIChmdC0+ZmF0X3R5cGUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEZBVF9UWVBFX0ZBVDEyOgorICAgICAgICAgICAgICAgIGlmIChjb2RlID09IDB4ZmY3KSByZXR1cm4gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworCQljYXNlIEZBVF9UWVBFX0ZBVDE2OgorCQlpZiAoY29kZSA9PSAweGZmZjcpIHJldHVybiAxOworCQlicmVhazsKKworCQljYXNlIEZBVF9UWVBFX0ZBVDMyOgorCQlpZiAoY29kZSA9PSAweDBmZmZmZmY3KSByZXR1cm4gMTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitfdGVzdF9jb2RlX2VvZiAoY29uc3QgRmF0VGFibGUqIGZ0LCBGYXRDbHVzdGVyIGNvZGUpCit7CisJc3dpdGNoIChmdC0+ZmF0X3R5cGUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEZBVF9UWVBFX0ZBVDEyOgorICAgICAgICAgICAgICAgIGlmIChjb2RlID49IDB4ZmY3KSByZXR1cm4gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworCQljYXNlIEZBVF9UWVBFX0ZBVDE2OgorCQlpZiAoY29kZSA+PSAweGZmZjcpIHJldHVybiAxOworCQlicmVhazsKKworCQljYXNlIEZBVF9UWVBFX0ZBVDMyOgorCQlpZiAoY29kZSA+PSAweDBmZmZmZmY3KSByZXR1cm4gMTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCit2b2lkCitfdXBkYXRlX3N0YXRzIChGYXRUYWJsZSogZnQsIEZhdENsdXN0ZXIgY2x1c3RlciwgRmF0Q2x1c3RlciB2YWx1ZSkKK3sKKwlpZiAoX3Rlc3RfY29kZV9hdmFpbGFibGUgKGZ0LCB2YWx1ZSkKKwkgICAgJiYgIWZhdF90YWJsZV9pc19hdmFpbGFibGUgKGZ0LCBjbHVzdGVyKSkgeworCQlmdC0+ZnJlZV9jbHVzdGVyX2NvdW50Kys7CisJCWlmIChmYXRfdGFibGVfaXNfYmFkIChmdCwgY2x1c3RlcikpCisJCQlmdC0+YmFkX2NsdXN0ZXJfY291bnQtLTsKKwl9CisKKwlpZiAoIV90ZXN0X2NvZGVfYXZhaWxhYmxlIChmdCwgdmFsdWUpCisJICAgICYmIGZhdF90YWJsZV9pc19hdmFpbGFibGUgKGZ0LCBjbHVzdGVyKSkgeworCQlmdC0+ZnJlZV9jbHVzdGVyX2NvdW50LS07CisJCWlmIChfdGVzdF9jb2RlX2JhZCAoZnQsIGNsdXN0ZXIpKQorCQkJZnQtPmJhZF9jbHVzdGVyX2NvdW50LS07CisJfQorfQorCitpbnQKK2ZhdF90YWJsZV9zZXQgKEZhdFRhYmxlKiBmdCwgRmF0Q2x1c3RlciBjbHVzdGVyLCBGYXRDbHVzdGVyIHZhbHVlKQoreworCWlmIChjbHVzdGVyID49IGZ0LT5jbHVzdGVyX2NvdW50ICsgMikgeworCQlwZWRfZXhjZXB0aW9uX3Rocm93IChQRURfRVhDRVBUSU9OX0JVRywKKwkJCQkgICAgIFBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJCSAgICAgXygiZmF0X3RhYmxlX3NldDogY2x1c3RlciAlbGQgb3V0c2lkZSAiCisJCQkJICAgICAgICJmaWxlIHN5c3RlbSIpLAorCQkJCSAgICAgKGxvbmcpIGNsdXN0ZXIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlfdXBkYXRlX3N0YXRzIChmdCwgY2x1c3RlciwgdmFsdWUpOworCisJc3dpdGNoIChmdC0+ZmF0X3R5cGUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEZBVF9UWVBFX0ZBVDEyOgorICAgICAgICAgICAgICAgIFBFRF9BU1NFUlQgKDAsICh2b2lkKSAwKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworCQljYXNlIEZBVF9UWVBFX0ZBVDE2OgorCQkoKHVuc2lnbmVkIHNob3J0ICopIGZ0LT50YWJsZSkgW2NsdXN0ZXJdCisJCQk9IFBFRF9DUFVfVE9fTEUxNiAodmFsdWUpOworCQlicmVhazsKKworCQljYXNlIEZBVF9UWVBFX0ZBVDMyOgorCQkoKHVuc2lnbmVkIGludCAqKSBmdC0+dGFibGUpIFtjbHVzdGVyXQorCQkJPSBQRURfQ1BVX1RPX0xFMzIgKHZhbHVlKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAxOworfQorCitGYXRDbHVzdGVyIAorZmF0X3RhYmxlX2dldCAoY29uc3QgRmF0VGFibGUqIGZ0LCBGYXRDbHVzdGVyIGNsdXN0ZXIpCit7CisJaWYgKGNsdXN0ZXIgPj0gZnQtPmNsdXN0ZXJfY291bnQgKyAyKSB7CisJCXBlZF9leGNlcHRpb25fdGhyb3cgKFBFRF9FWENFUFRJT05fQlVHLAorCQkJCSAgICAgUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQkJICAgICBfKCJmYXRfdGFibGVfZ2V0OiBjbHVzdGVyICVsZCBvdXRzaWRlICIKKwkJCQkgICAgICAgImZpbGUgc3lzdGVtIiksCisJCQkJICAgICAobG9uZykgY2x1c3Rlcik7CisJCWV4aXQgKDEpOwkvKiBGSVhNRSAqLworCX0KKworCXN3aXRjaCAoZnQtPmZhdF90eXBlKSB7CisgICAgICAgICAgICAgICAgY2FzZSBGQVRfVFlQRV9GQVQxMjoKKyAgICAgICAgICAgICAgICBQRURfQVNTRVJUICgwLCAodm9pZCkgMCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJY2FzZSBGQVRfVFlQRV9GQVQxNjoKKwkJcmV0dXJuIFBFRF9MRTE2X1RPX0NQVQorCQkJKCgodW5zaWduZWQgc2hvcnQgKikgZnQtPnRhYmxlKSBbY2x1c3Rlcl0pOworCisJCWNhc2UgRkFUX1RZUEVfRkFUMzI6CisJCXJldHVybiBQRURfTEUzMl9UT19DUFUKKwkJCSgoKHVuc2lnbmVkIGludCAqKSBmdC0+dGFibGUpIFtjbHVzdGVyXSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK0ZhdENsdXN0ZXIKK2ZhdF90YWJsZV9hbGxvY19jbHVzdGVyIChGYXRUYWJsZSogZnQpCit7CisJRmF0Q2x1c3RlcglpOworCUZhdENsdXN0ZXIJY2x1c3RlcjsKKworLyogaGFjazogYXNzdW1lcyB0aGUgZmlyc3QgdHdvIEZBVCBlbnRyaWVzIGFyZSBtYXJrZWQgYXMgdXNlZCAod2hpY2ggdGhleQorICogYWx3YXlzIHNob3VsZCBiZSkKKyAqLworCWZvciAoaT0xOyBpIDwgZnQtPmNsdXN0ZXJfY291bnQgKyAxOyBpKyspIHsKKwkJY2x1c3RlciA9IChpICsgZnQtPmxhc3RfYWxsb2MpICUgZnQtPmNsdXN0ZXJfY291bnQ7CisJCWlmIChmYXRfdGFibGVfaXNfYXZhaWxhYmxlIChmdCwgY2x1c3RlcikpIHsKKwkJCWZ0LT5sYXN0X2FsbG9jID0gY2x1c3RlcjsKKwkJCXJldHVybiBjbHVzdGVyOworCQl9CisJfQorCisJcGVkX2V4Y2VwdGlvbl90aHJvdyAoUEVEX0VYQ0VQVElPTl9FUlJPUiwKKwkJCSAgICAgUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQkgICAgIF8oImZhdF90YWJsZV9hbGxvY19jbHVzdGVyOiBubyBmcmVlIGNsdXN0ZXJzIikpOworCXJldHVybiAwOworfQorCitGYXRDbHVzdGVyCitmYXRfdGFibGVfYWxsb2NfY2hlY2tfY2x1c3RlciAoRmF0VGFibGUqIGZ0LCBQZWRGaWxlU3lzdGVtKiBmcykKK3sKKwlGYXRTcGVjaWZpYyoJZnNfaW5mbyA9IEZBVF9TUEVDSUZJQyAoZnMpOworCUZhdENsdXN0ZXIJcmVzdWx0OworCisJd2hpbGUgKDEpIHsKKwkJcmVzdWx0ID0gZmF0X3RhYmxlX2FsbG9jX2NsdXN0ZXIgKGZ0KTsKKwkJaWYgKCFyZXN1bHQpCisJCQlyZXR1cm4gMDsKKwkJaWYgKGZhdF9yZWFkX2NsdXN0ZXIgKGZzLCBmc19pbmZvLT5idWZmZXIsIHJlc3VsdCkpCisJCQlyZXR1cm4gcmVzdWx0OworCQlmYXRfdGFibGVfc2V0X2JhZCAoZnQsIHJlc3VsdCk7CisJfQorfQorCisvKgorICAgIHJldHVybnMgdHJ1ZSBpZiA8Y2x1c3Rlcj4gaXMgbWFya2VkIGFzIGJhZAorKi8KK2ludAorZmF0X3RhYmxlX2lzX2JhZCAoY29uc3QgRmF0VGFibGUqIGZ0LCBGYXRDbHVzdGVyIGNsdXN0ZXIpCit7CisJcmV0dXJuIF90ZXN0X2NvZGVfYmFkIChmdCwgZmF0X3RhYmxlX2dldCAoZnQsIGNsdXN0ZXIpKTsKK30KKworLyoKKyAgICByZXR1cm5zIHRydWUgaWYgPGNsdXN0ZXI+IHJlcHJlc2VudHMgYW4gRU9GIG1hcmtlcgorKi8KK2ludAorZmF0X3RhYmxlX2lzX2VvZiAoY29uc3QgRmF0VGFibGUqIGZ0LCBGYXRDbHVzdGVyIGNsdXN0ZXIpCit7CisJcmV0dXJuIF90ZXN0X2NvZGVfZW9mIChmdCwgY2x1c3Rlcik7Cit9CisKKy8qCisgICAgcmV0dXJucyB0cnVlIGlmIDxjbHVzdGVyPiBpcyBhdmFpbGFibGUuCisqLworaW50CitmYXRfdGFibGVfaXNfYXZhaWxhYmxlIChjb25zdCBGYXRUYWJsZSogZnQsIEZhdENsdXN0ZXIgY2x1c3RlcikKK3sKKwlyZXR1cm4gX3Rlc3RfY29kZV9hdmFpbGFibGUgKGZ0LCBmYXRfdGFibGVfZ2V0IChmdCwgY2x1c3RlcikpOworfQorCisvKgorICAgIHJldHVybnMgdHJ1ZSBpZiA8Y2x1c3Rlcj4gaXMgZW1wdHkuICBOb3RlIHRoYXQgdGhpcyBpbmNsdWRlcyBiYWQgY2x1c3RlcnMuCisqLworaW50CitmYXRfdGFibGVfaXNfZW1wdHkgKGNvbnN0IEZhdFRhYmxlKiBmdCwgRmF0Q2x1c3RlciBjbHVzdGVyKQoreworCXJldHVybiBmYXRfdGFibGVfaXNfYXZhaWxhYmxlIChmdCwgY2x1c3RlcikKKwkJfHwgZmF0X3RhYmxlX2lzX2JhZCAoZnQsIGNsdXN0ZXIpOworfQorCisvKgorICAgIHJldHVybnMgdHJ1ZSBpZiA8Y2x1c3Rlcj4gaXMgYmVpbmcgdXNlZCBmb3Igc29tZXRoaW5nIGNvbnN0cnVjdGl2ZS4KKyovCitpbnQKK2ZhdF90YWJsZV9pc19hY3RpdmUgKGNvbnN0IEZhdFRhYmxlKiBmdCwgRmF0Q2x1c3RlciBjbHVzdGVyKQoreworCXJldHVybiAhZmF0X3RhYmxlX2lzX2JhZCAoZnQsIGNsdXN0ZXIpCisJCSYmICFmYXRfdGFibGVfaXNfYXZhaWxhYmxlIChmdCwgY2x1c3Rlcik7Cit9CisKKy8qCisgICAgbWFya3MgPGNsdXN0ZXI+IGFzIHRoZSBsYXN0IGNsdXN0ZXIgaW4gdGhlIGNoYWluCisqLworaW50CitmYXRfdGFibGVfc2V0X2VvZiAoRmF0VGFibGUqIGZ0LCBGYXRDbHVzdGVyIGNsdXN0ZXIpCit7CisKKwlzd2l0Y2ggKGZ0LT5mYXRfdHlwZSkgeworICAgICAgICAgICAgICAgIGNhc2UgRkFUX1RZUEVfRkFUMTI6CisgICAgICAgICAgICAgICAgUEVEX0FTU0VSVCAoMCwgKHZvaWQpIDApOworICAgICAgICAgICAgICAgIGJyZWFrOworCisJCWNhc2UgRkFUX1RZUEVfRkFUMTY6CisJCXJldHVybiBmYXRfdGFibGVfc2V0IChmdCwgY2x1c3RlciwgMHhmZmY4KTsKKyAgICAgICAgCisJCWNhc2UgRkFUX1RZUEVfRkFUMzI6CisJCXJldHVybiBmYXRfdGFibGVfc2V0IChmdCwgY2x1c3RlciwgMHgwZmZmZmZmZik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisJTWFya3MgYSBjbHVzdGVycyBhcyB1bnVzYWJsZSwgZHVlIHRvIHBoeXNpY2FsIGRpc2sgZGFtYWdlLgorKi8KK2ludAorZmF0X3RhYmxlX3NldF9iYWQgKEZhdFRhYmxlKiBmdCwgRmF0Q2x1c3RlciBjbHVzdGVyKQoreworCWlmICghZmF0X3RhYmxlX2lzX2JhZCAoZnQsIGNsdXN0ZXIpKQorCQlmdC0+YmFkX2NsdXN0ZXJfY291bnQrKzsKKworCXN3aXRjaCAoZnQtPmZhdF90eXBlKSB7CisgICAgICAgICAgICAgICAgY2FzZSBGQVRfVFlQRV9GQVQxMjoKKwkJcmV0dXJuIGZhdF90YWJsZV9zZXQgKGZ0LCBjbHVzdGVyLCAweGZmNyk7CisKKwkJY2FzZSBGQVRfVFlQRV9GQVQxNjoKKwkJcmV0dXJuIGZhdF90YWJsZV9zZXQgKGZ0LCBjbHVzdGVyLCAweGZmZjcpOworICAgICAgICAKKwkJY2FzZSBGQVRfVFlQRV9GQVQzMjoKKwkJcmV0dXJuIGZhdF90YWJsZV9zZXQgKGZ0LCBjbHVzdGVyLCAweDBmZmZmZmY3KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAgICBtYXJrcyA8Y2x1c3Rlcj4gYXMgdW51c2VkL2ZyZWUvYXZhaWxhYmxlCisqLworaW50CitmYXRfdGFibGVfc2V0X2F2YWlsIChGYXRUYWJsZSogZnQsIEZhdENsdXN0ZXIgY2x1c3RlcikKK3sKKwlyZXR1cm4gZmF0X3RhYmxlX3NldCAoZnQsIGNsdXN0ZXIsIDApOworfQorCisjZW5kaWYgLyogIURJU0NPVkVSX09OTFkgKi8KKworaW50CitmYXRfdGFibGVfZW50cnlfc2l6ZSAoRmF0VHlwZSBmYXRfdHlwZSkKK3sKKwlzd2l0Y2ggKGZhdF90eXBlKSB7CisJCWNhc2UgRkFUX1RZUEVfRkFUMTI6CisJCXJldHVybiAyOwkJLyogRklYTUU6IGhvdz8gKi8KKworCQljYXNlIEZBVF9UWVBFX0ZBVDE2OgorCQlyZXR1cm4gMjsKKworCQljYXNlIEZBVF9UWVBFX0ZBVDMyOgorCQlyZXR1cm4gNDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9mYXQvdGFibGUuaCBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvZmF0L3RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQyNTAxYgotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvZmF0L3RhYmxlLmgKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAgICBsaWJwYXJ0ZWQKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCisqLworCisjaWZuZGVmIFBFRF9GQVRfVEFCTEVfSF9JTkNMVURFRAorI2RlZmluZSBQRURfRkFUX1RBQkxFX0hfSU5DTFVERUQKKwordHlwZWRlZiBzdHJ1Y3QgX0ZhdFRhYmxlCUZhdFRhYmxlOworCisjaW5jbHVkZSAiZmF0LmgiCisKK3N0cnVjdCBfRmF0VGFibGUgeworCXZvaWQqCQl0YWJsZTsKKwlGYXRDbHVzdGVyCXNpemU7CisJaW50CQlyYXdfc2l6ZTsKKworCUZhdFR5cGUJCWZhdF90eXBlOworCUZhdENsdXN0ZXIJY2x1c3Rlcl9jb3VudDsKKwlGYXRDbHVzdGVyCWZyZWVfY2x1c3Rlcl9jb3VudDsKKwlGYXRDbHVzdGVyCWJhZF9jbHVzdGVyX2NvdW50OworCisJRmF0Q2x1c3RlcglsYXN0X2FsbG9jOworfTsKKworZXh0ZXJuIEZhdFRhYmxlKiBmYXRfdGFibGVfbmV3IChGYXRUeXBlIGZhdF90eXBlLCBGYXRDbHVzdGVyIHNpemUpOworZXh0ZXJuIEZhdFRhYmxlKiBmYXRfdGFibGVfZHVwbGljYXRlIChjb25zdCBGYXRUYWJsZSogZnQpOworZXh0ZXJuIHZvaWQgZmF0X3RhYmxlX2Rlc3Ryb3kgKEZhdFRhYmxlKiBmdCk7CitleHRlcm4gdm9pZCBmYXRfdGFibGVfY2xlYXIgKEZhdFRhYmxlKiBmdCk7CitleHRlcm4gaW50IGZhdF90YWJsZV9zZXRfY2x1c3Rlcl9jb3VudCAoRmF0VGFibGUqIGZ0LAorCQkJCQlGYXRDbHVzdGVyIG5ld19jbHVzdGVyX2NvdW50KTsKKworZXh0ZXJuIGludCBmYXRfdGFibGVfcmVhZCAoRmF0VGFibGUqIGZ0LCBjb25zdCBQZWRGaWxlU3lzdGVtKiBmcywKKwkJCSAgIGludCB0YWJsZV9udW0pOworZXh0ZXJuIGludCBmYXRfdGFibGVfd3JpdGUgKGNvbnN0IEZhdFRhYmxlKiBmdCwgUGVkRmlsZVN5c3RlbSogZnMsCisJCQkgICAgaW50IHRhYmxlX251bSk7CitleHRlcm4gaW50IGZhdF90YWJsZV93cml0ZV9hbGwgKGNvbnN0IEZhdFRhYmxlKiBmdCwgUGVkRmlsZVN5c3RlbSogZnMpOworZXh0ZXJuIGludCBmYXRfdGFibGVfY29tcGFyZSAoY29uc3QgRmF0VGFibGUqIGEsIGNvbnN0IEZhdFRhYmxlKiBiKTsKK2V4dGVybiBpbnQgZmF0X3RhYmxlX2NvdW50X3N0YXRzIChGYXRUYWJsZSogZnQpOworCitleHRlcm4gRmF0Q2x1c3RlciBmYXRfdGFibGVfZ2V0IChjb25zdCBGYXRUYWJsZSogZnQsIEZhdENsdXN0ZXIgY2x1c3Rlcik7CitleHRlcm4gaW50IGZhdF90YWJsZV9zZXQgKEZhdFRhYmxlKiBmdCwgRmF0Q2x1c3RlciBjbHVzdGVyLCBGYXRDbHVzdGVyIHZhbHVlKTsKKworZXh0ZXJuIEZhdENsdXN0ZXIgZmF0X3RhYmxlX2FsbG9jX2NsdXN0ZXIgKEZhdFRhYmxlKiBmdCk7CitleHRlcm4gRmF0Q2x1c3RlciBmYXRfdGFibGVfYWxsb2NfY2hlY2tfY2x1c3RlciAoRmF0VGFibGUqIGZ0LAorCQkJCQkJIFBlZEZpbGVTeXN0ZW0qIGZzKTsKKworZXh0ZXJuIGludCBmYXRfdGFibGVfaXNfYmFkIChjb25zdCBGYXRUYWJsZSogZnQsIEZhdENsdXN0ZXIgY2x1c3Rlcik7CitleHRlcm4gaW50IGZhdF90YWJsZV9pc19lb2YgKGNvbnN0IEZhdFRhYmxlKiBmdCwgRmF0Q2x1c3RlciBjbHVzdGVyKTsKK2V4dGVybiBpbnQgZmF0X3RhYmxlX2lzX2VtcHR5IChjb25zdCBGYXRUYWJsZSogZnQsIEZhdENsdXN0ZXIgY2x1c3Rlcik7CitleHRlcm4gaW50IGZhdF90YWJsZV9pc19hdmFpbGFibGUgKGNvbnN0IEZhdFRhYmxlKiBmdCwgRmF0Q2x1c3RlciBjbHVzdGVyKTsKK2V4dGVybiBpbnQgZmF0X3RhYmxlX2lzX2FjdGl2ZSAoY29uc3QgRmF0VGFibGUqIGZ0LCBGYXRDbHVzdGVyIGNsdXN0ZXIpOworCitleHRlcm4gaW50IGZhdF90YWJsZV9zZXRfZW9mIChGYXRUYWJsZSogZnQsIEZhdENsdXN0ZXIgY2x1c3Rlcik7CitleHRlcm4gaW50IGZhdF90YWJsZV9zZXRfYXZhaWwgKEZhdFRhYmxlKiBmdCwgRmF0Q2x1c3RlciBjbHVzdGVyKTsKK2V4dGVybiBpbnQgZmF0X3RhYmxlX3NldF9iYWQgKEZhdFRhYmxlKiBmdCwgRmF0Q2x1c3RlciBjbHVzdGVyKTsKKworZXh0ZXJuIGludCBmYXRfdGFibGVfZW50cnlfc2l6ZSAoRmF0VHlwZSBmYXRfdHlwZSk7CisKKyNlbmRpZiAvKiBQRURfRkFUX1RBQkxFX0hfSU5DTFVERUQgKi8KKwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9mYXQvdHJhdmVyc2UuYyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvZmF0L3RyYXZlcnNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE2Mzk2NAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvZmF0L3RyYXZlcnNlLmMKQEAgLTAsMCArMSwzNzQgQEAKKy8qCisgICAgbGlicGFydGVkCisgICAgQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwLCAyMDA1LCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQorCisgICAgSSBjYW4gYWxzbyBiZSBjb250YWN0ZWQgYXQ6CisKKyAgICBBbmRyZXcgQ2xhdXNlbgorICAgIDE4IFNoYXcgU3QKKyAgICBBc2h3b29kLCAzMTQ3CisgICAgVmljdG9yaWEsIEF1c3RyYWxpYQorCisqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSAiZmF0LmgiCisjaW5jbHVkZSAidHJhdmVyc2UuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZm5kZWYgRElTQ09WRVJfT05MWQorCisjZGVmaW5lIE5PX0NMVVNURVIgLTEKKworc3RhdGljIGNoYXIgdG1wX2J1ZmZlciBbNDA5Nl07CisKK2ludAorZmF0X3RyYXZlcnNlX2VudHJpZXNfcGVyX2J1ZmZlciAoRmF0VHJhdmVyc2VJbmZvKiB0cmF2X2luZm8pCit7CisJcmV0dXJuIHRyYXZfaW5mby0+YnVmZmVyX3NpemUgLyBzaXplb2YgKEZhdERpckVudHJ5KTsKK30KKworLyogcmV0dXJucyAxIGlmIHRoZXJlIGFyZSBubyBtb3JlIGRpcmVjdG9yeSBlbnRyaWVzIGluIHRoZSBkaXJlY3RvcnkgYmVpbmcKKyAqIHRyYXZlcnNlZCwgMCBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQKK2lzX2xhc3RfYnVmZmVyIChGYXRUcmF2ZXJzZUluZm8qIHRyYXZfaW5mbykgeworCUZhdFNwZWNpZmljKglmc19pbmZvID0gRkFUX1NQRUNJRklDICh0cmF2X2luZm8tPmZzKTsKKyAgICAKKwlpZiAodHJhdl9pbmZvLT5pc19sZWdhY3lfcm9vdF9kaXIpCisJCXJldHVybiAxOworCWVsc2UKKwkJcmV0dXJuIGZhdF90YWJsZV9pc19lb2YgKGZzX2luZm8tPmZhdCwgdHJhdl9pbmZvLT5uZXh0X2J1ZmZlcik7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlX3Jvb3RfZGlyIChGYXRUcmF2ZXJzZUluZm8qIHRyYXZfaW5mbykKK3sKKwlGYXRTcGVjaWZpYyoJZnNfaW5mbyA9IEZBVF9TUEVDSUZJQyAodHJhdl9pbmZvLT5mcyk7CisJCisJaWYgKCFwZWRfZ2VvbWV0cnlfd3JpdGUgKHRyYXZfaW5mby0+ZnMtPmdlb20sIHRyYXZfaW5mby0+ZGlyX2VudHJpZXMsCisJCQkJIGZzX2luZm8tPnJvb3RfZGlyX29mZnNldCwKKwkJCQkgZnNfaW5mby0+cm9vdF9kaXJfc2VjdG9yX2NvdW50KSkKKwkJcmV0dXJuIDA7CisJaWYgKCFwZWRfZ2VvbWV0cnlfc3luYyAodHJhdl9pbmZvLT5mcy0+Z2VvbSkpCisJCXJldHVybiAwOworCXRyYXZfaW5mby0+ZGlydHkgPSAwOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50Cit3cml0ZV9kaXJfY2x1c3RlciAoRmF0VHJhdmVyc2VJbmZvKiB0cmF2X2luZm8pCit7CisJaWYgKCFmYXRfd3JpdGVfc3luY19jbHVzdGVyICh0cmF2X2luZm8tPmZzLAorCQkJCSAgICAgKHZvaWQqKSB0cmF2X2luZm8tPmRpcl9lbnRyaWVzLAorCQkJCSAgICAgdHJhdl9pbmZvLT50aGlzX2J1ZmZlcikpCisJCXJldHVybiAwOworCXRyYXZfaW5mby0+ZGlydHkgPSAwOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50Cit3cml0ZV9kaXJfYnVmZmVyIChGYXRUcmF2ZXJzZUluZm8qIHRyYXZfaW5mbykKK3sKKwlpZiAodHJhdl9pbmZvLT5pc19sZWdhY3lfcm9vdF9kaXIpCisJCXJldHVybiB3cml0ZV9yb290X2RpciAodHJhdl9pbmZvKTsKKwllbHNlCisJCXJldHVybiB3cml0ZV9kaXJfY2x1c3RlciAodHJhdl9pbmZvKTsKK30KKworc3RhdGljIGludAorcmVhZF9uZXh0X2Rpcl9idWZmZXIgKEZhdFRyYXZlcnNlSW5mbyogdHJhdl9pbmZvKQoreworCUZhdFNwZWNpZmljKglmc19pbmZvID0gRkFUX1NQRUNJRklDICh0cmF2X2luZm8tPmZzKTsKKworCVBFRF9BU1NFUlQgKCF0cmF2X2luZm8tPmlzX2xlZ2FjeV9yb290X2RpciwgcmV0dXJuIDApOworCisJdHJhdl9pbmZvLT50aGlzX2J1ZmZlciA9IHRyYXZfaW5mby0+bmV4dF9idWZmZXI7CisKKwlpZiAodHJhdl9pbmZvLT50aGlzX2J1ZmZlciA8IDIKKwkgICAgfHwgdHJhdl9pbmZvLT50aGlzX2J1ZmZlciA+PSBmc19pbmZvLT5jbHVzdGVyX2NvdW50ICsgMikgeworCQlwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCVBFRF9FWENFUFRJT05fRVJST1IsCisJCQlQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCSJDbHVzdGVyICVsZCBpbiBkaXJlY3RvcnkgJXMgaXMgb3V0c2lkZSBmaWxlIHN5c3RlbSEiLAorCQkJKGxvbmcpIHRyYXZfaW5mby0+dGhpc19idWZmZXIsCisJCQl0cmF2X2luZm8tPmRpcl9uYW1lKTsKKwkJcmV0dXJuIDA7CisJfQorCisJdHJhdl9pbmZvLT5uZXh0X2J1ZmZlcgorCQk9IGZhdF90YWJsZV9nZXQgKGZzX2luZm8tPmZhdCwgdHJhdl9pbmZvLT50aGlzX2J1ZmZlcik7CisKKwlyZXR1cm4gZmF0X3JlYWRfY2x1c3RlciAodHJhdl9pbmZvLT5mcywgKHZvaWQgKikgdHJhdl9pbmZvLT5kaXJfZW50cmllcywKKwkJCQkgdHJhdl9pbmZvLT50aGlzX2J1ZmZlcik7Cit9CisKKy8qIEZJWE1FOiBwdXQgaW50byBmYXRfZGlyX2VudHJ5Xyogb3BlcmF0aW9ucyAqLwordm9pZAorZmF0X3RyYXZlcnNlX21hcmtfZGlydHkgKEZhdFRyYXZlcnNlSW5mbyogdHJhdl9pbmZvKQoreworCXRyYXZfaW5mby0+ZGlydHkgPSAxOworfQorCitGYXRUcmF2ZXJzZUluZm8qCitmYXRfdHJhdmVyc2VfYmVnaW4gKFBlZEZpbGVTeXN0ZW0qIGZzLCBGYXRDbHVzdGVyIHN0YXJ0X2NsdXN0ZXIsCisJCSAgICBjaGFyKiBkaXJfbmFtZSkKK3sKKwlGYXRTcGVjaWZpYyoJCWZzX2luZm8gPSBGQVRfU1BFQ0lGSUMgKGZzKTsKKwlGYXRUcmF2ZXJzZUluZm8qCXRyYXZfaW5mbzsKKworCXRyYXZfaW5mbyA9IChGYXRUcmF2ZXJzZUluZm8qKSBwZWRfbWFsbG9jIChzaXplb2YgKEZhdFRyYXZlcnNlSW5mbykpOworCWlmICghdHJhdl9pbmZvKQorCQlnb3RvIGVycm9yOworCisJdHJhdl9pbmZvLT5kaXJfbmFtZSA9IHN0cmR1cCAoZGlyX25hbWUpOworCWlmICghdHJhdl9pbmZvLT5kaXJfbmFtZSkKKwkJZ290byBlcnJvcl9mcmVlX3RyYXZfaW5mbzsKKworCXRyYXZfaW5mby0+ZnMgPSBmczsKKwl0cmF2X2luZm8tPmlzX2xlZ2FjeV9yb290X2RpcgorCQk9IChmc19pbmZvLT5mYXRfdHlwZSA9PSBGQVRfVFlQRV9GQVQxNikgJiYgKHN0YXJ0X2NsdXN0ZXIgPT0gMCk7CisJdHJhdl9pbmZvLT5kaXJ0eSA9IDA7CisJdHJhdl9pbmZvLT5lb2YgPSAwOworCXRyYXZfaW5mby0+Y3VycmVudF9lbnRyeSA9IC0xOworCisJaWYgKHRyYXZfaW5mby0+aXNfbGVnYWN5X3Jvb3RfZGlyKSB7CisJCXRyYXZfaW5mby0+YnVmZmVyX3NpemUgPSA1MTIgKiBmc19pbmZvLT5yb290X2Rpcl9zZWN0b3JfY291bnQ7CisJfSBlbHNlIHsKKwkJdHJhdl9pbmZvLT5uZXh0X2J1ZmZlciA9IHN0YXJ0X2NsdXN0ZXI7CisJCXRyYXZfaW5mby0+YnVmZmVyX3NpemUgPSBmc19pbmZvLT5jbHVzdGVyX3NpemU7CisJfQorCisJdHJhdl9pbmZvLT5kaXJfZW50cmllcworCQk9IChGYXREaXJFbnRyeSopIHBlZF9tYWxsb2MgKHRyYXZfaW5mby0+YnVmZmVyX3NpemUpOworCWlmICghdHJhdl9pbmZvLT5kaXJfZW50cmllcykKKwkJZ290byBlcnJvcl9mcmVlX2Rpcl9uYW1lOworCisJaWYgKHRyYXZfaW5mby0+aXNfbGVnYWN5X3Jvb3RfZGlyKSB7CisJCWlmICghcGVkX2dlb21ldHJ5X3JlYWQgKGZzLT5nZW9tLCB0cmF2X2luZm8tPmRpcl9lbnRyaWVzLAorCQkJCQlmc19pbmZvLT5yb290X2Rpcl9vZmZzZXQsCisJCQkJCWZzX2luZm8tPnJvb3RfZGlyX3NlY3Rvcl9jb3VudCkpCisJCQlnb3RvIGVycm9yX2ZyZWVfZGlyX2VudHJpZXM7CisJfSBlbHNlIHsKKwkJaWYgKCFyZWFkX25leHRfZGlyX2J1ZmZlciAodHJhdl9pbmZvKSkKKwkJCWdvdG8gZXJyb3JfZnJlZV9kaXJfZW50cmllczsKKwl9CisKKwlyZXR1cm4gdHJhdl9pbmZvOworCitlcnJvcl9mcmVlX2Rpcl9lbnRyaWVzOgorCXBlZF9mcmVlICh0cmF2X2luZm8tPmRpcl9lbnRyaWVzKTsKK2Vycm9yX2ZyZWVfZGlyX25hbWU6CisJcGVkX2ZyZWUgKHRyYXZfaW5mby0+ZGlyX25hbWUpOworZXJyb3JfZnJlZV90cmF2X2luZm86CisJcGVkX2ZyZWUgKHRyYXZfaW5mbyk7CitlcnJvcjoKKwlyZXR1cm4gTlVMTDsKK30KKworaW50CitmYXRfdHJhdmVyc2VfY29tcGxldGUgKEZhdFRyYXZlcnNlSW5mbyogdHJhdl9pbmZvKQoreworCWlmICh0cmF2X2luZm8tPmRpcnR5KSB7CisJCWlmICghd3JpdGVfZGlyX2J1ZmZlciAodHJhdl9pbmZvKSkKKwkJCXJldHVybiAwOworCX0KKwlwZWRfZnJlZSAodHJhdl9pbmZvLT5kaXJfZW50cmllcyk7CisJcGVkX2ZyZWUgKHRyYXZfaW5mby0+ZGlyX25hbWUpOworCXBlZF9mcmVlICh0cmF2X2luZm8pOworCXJldHVybiAxOworfQorCitGYXRUcmF2ZXJzZUluZm8qCitmYXRfdHJhdmVyc2VfZGlyZWN0b3J5IChGYXRUcmF2ZXJzZUluZm8gKnRyYXZfaW5mbywgRmF0RGlyRW50cnkqIHBhcmVudCkKK3sKKwlzdHJjcHkgKHRtcF9idWZmZXIsIHRyYXZfaW5mby0+ZGlyX25hbWUpOworCWZhdF9kaXJfZW50cnlfZ2V0X25hbWUgKHBhcmVudCwKKwkJCQl0bXBfYnVmZmVyICsgc3RybGVuICh0cmF2X2luZm8tPmRpcl9uYW1lKSk7CisJc3RyY2F0ICh0bXBfYnVmZmVyLCAiXFwiKTsKKworCXJldHVybiBmYXRfdHJhdmVyc2VfYmVnaW4gKHRyYXZfaW5mby0+ZnMsCisJCQlmYXRfZGlyX2VudHJ5X2dldF9maXJzdF9jbHVzdGVyIChwYXJlbnQsIHRyYXZfaW5mby0+ZnMpLAorCQkJdG1wX2J1ZmZlcik7Cit9CisKK0ZhdERpckVudHJ5KgorZmF0X3RyYXZlcnNlX25leHRfZGlyX2VudHJ5IChGYXRUcmF2ZXJzZUluZm8gKnRyYXZfaW5mbykKK3sKKwlpZiAodHJhdl9pbmZvLT5lb2YpCisJCXJldHVybiBOVUxMOworCisJdHJhdl9pbmZvLT5jdXJyZW50X2VudHJ5Kys7CisJaWYgKHRyYXZfaW5mby0+Y3VycmVudF9lbnRyeQorCQkJPj0gZmF0X3RyYXZlcnNlX2VudHJpZXNfcGVyX2J1ZmZlciAodHJhdl9pbmZvKSkgeworCQlpZiAodHJhdl9pbmZvLT5kaXJ0eSkgeworCQkJaWYgKCF3cml0ZV9kaXJfYnVmZmVyICh0cmF2X2luZm8pKQorCQkJCXJldHVybiBOVUxMOworCQl9CisKKwkJdHJhdl9pbmZvLT5jdXJyZW50X2VudHJ5ID0gMDsKKwkJaWYgKGlzX2xhc3RfYnVmZmVyICh0cmF2X2luZm8pKSB7CisJCQl0cmF2X2luZm8tPmVvZiA9IDE7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQlpZiAoIXJlYWRfbmV4dF9kaXJfYnVmZmVyICh0cmF2X2luZm8pKQorCQkJcmV0dXJuIE5VTEw7CisJfQorCXJldHVybiB0cmF2X2luZm8tPmRpcl9lbnRyaWVzICsgdHJhdl9pbmZvLT5jdXJyZW50X2VudHJ5OworfQorCitGYXRDbHVzdGVyCitmYXRfZGlyX2VudHJ5X2dldF9maXJzdF9jbHVzdGVyIChGYXREaXJFbnRyeSogZGlyX2VudHJ5LCBQZWRGaWxlU3lzdGVtICpmcykKK3sKKwlGYXRTcGVjaWZpYyoJCWZzX2luZm8gPSBGQVRfU1BFQ0lGSUMgKGZzKTsKKworCXN3aXRjaCAoZnNfaW5mby0+ZmF0X3R5cGUpIHsKKwljYXNlIEZBVF9UWVBFX0ZBVDEyOgorCWNhc2UgRkFUX1RZUEVfRkFUMTY6CisJCXJldHVybiBQRURfTEUxNl9UT19DUFUgKGRpcl9lbnRyeS0+Zmlyc3RfY2x1c3Rlcik7CisKKyAgICAgICAgY2FzZSBGQVRfVFlQRV9GQVQzMjoKKwkJcmV0dXJuIFBFRF9MRTE2X1RPX0NQVSAoZGlyX2VudHJ5LT5maXJzdF9jbHVzdGVyX2hpZ2gpCisJCQkJKiA2NTUzNkwKKwkJCSAgKyBQRURfTEUxNl9UT19DUFUgKGRpcl9lbnRyeS0+Zmlyc3RfY2x1c3Rlcik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQKK2ZhdF9kaXJfZW50cnlfc2V0X2ZpcnN0X2NsdXN0ZXIgKEZhdERpckVudHJ5KiBkaXJfZW50cnksIFBlZEZpbGVTeXN0ZW0qIGZzLAorCQkJCSBGYXRDbHVzdGVyIGNsdXN0ZXIpCit7CisJRmF0U3BlY2lmaWMqCQlmc19pbmZvID0gRkFUX1NQRUNJRklDIChmcyk7CisKKwlzd2l0Y2ggKGZzX2luZm8tPmZhdF90eXBlKSB7CisgICAgICAgICAgICAgICAgY2FzZSBGQVRfVFlQRV9GQVQxMjoKKyAgICAgICAgICAgICAgICBQRURfQVNTRVJUICgwLCAodm9pZCkgMCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJY2FzZSBGQVRfVFlQRV9GQVQxNjoKKwkJZGlyX2VudHJ5LT5maXJzdF9jbHVzdGVyID0gUEVEX0NQVV9UT19MRTE2IChjbHVzdGVyKTsKKwkJYnJlYWs7CisgICAgICAgICAgICAKKwkJY2FzZSBGQVRfVFlQRV9GQVQzMjoKKwkJZGlyX2VudHJ5LT5maXJzdF9jbHVzdGVyCisJCQk9IFBFRF9DUFVfVE9fTEUxNiAoY2x1c3RlciAmIDB4ZmZmZik7CisJCWRpcl9lbnRyeS0+Zmlyc3RfY2x1c3Rlcl9oaWdoCisJCQk9IFBFRF9DUFVfVE9fTEUxNiAoY2x1c3RlciAvIDB4MTAwMDApOworCQlicmVhazsKKwl9Cit9CisKK3VpbnQzMl90CitmYXRfZGlyX2VudHJ5X2dldF9sZW5ndGggKEZhdERpckVudHJ5KiBkaXJfZW50cnkpCit7CisJcmV0dXJuIFBFRF9MRTMyX1RPX0NQVSAoZGlyX2VudHJ5LT5sZW5ndGgpOworfQorCitpbnQKK2ZhdF9kaXJfZW50cnlfaXNfbnVsbF90ZXJtIChjb25zdCBGYXREaXJFbnRyeSogZGlyX2VudHJ5KQoreworCUZhdERpckVudHJ5CW51bGxfZW50cnk7CisKKwltZW1zZXQgKCZudWxsX2VudHJ5LCAwLCBzaXplb2YgKG51bGxfZW50cnkpKTsKKwlyZXR1cm4gbWVtY21wICgmbnVsbF9lbnRyeSwgZGlyX2VudHJ5LCBzaXplb2YgKG51bGxfZW50cnkpKSA9PSAwOworfQorCitpbnQKK2ZhdF9kaXJfZW50cnlfaXNfYWN0aXZlIChGYXREaXJFbnRyeSogZGlyX2VudHJ5KQoreworCWlmICgodW5zaWduZWQgY2hhcikgZGlyX2VudHJ5LT5uYW1lWzBdID09IERFTEVURURfRkxBRykgcmV0dXJuIDA7CisJaWYgKCh1bnNpZ25lZCBjaGFyKSBkaXJfZW50cnktPm5hbWVbMF0gPT0gMCkgcmV0dXJuIDA7CisJaWYgKCh1bnNpZ25lZCBjaGFyKSBkaXJfZW50cnktPm5hbWVbMF0gPT0gMHhGNikgcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKK2ludAorZmF0X2Rpcl9lbnRyeV9pc19maWxlIChGYXREaXJFbnRyeSogZGlyX2VudHJ5KSB7CisJaWYgKGRpcl9lbnRyeS0+YXR0cmlidXRlcyA9PSBWRkFUX0FUVFIpIHJldHVybiAwOworCWlmIChkaXJfZW50cnktPmF0dHJpYnV0ZXMgJiBWT0xVTUVfTEFCRUxfQVRUUikgcmV0dXJuIDA7CisJaWYgKCFmYXRfZGlyX2VudHJ5X2lzX2FjdGl2ZSAoZGlyX2VudHJ5KSkgcmV0dXJuIDA7CisJaWYgKChkaXJfZW50cnktPmF0dHJpYnV0ZXMgJiBESVJFQ1RPUllfQVRUUikgPT0gRElSRUNUT1JZX0FUVFIpIHJldHVybiAwOworCXJldHVybiAxOworfQorCitpbnQKK2ZhdF9kaXJfZW50cnlfaXNfc3lzdGVtX2ZpbGUgKEZhdERpckVudHJ5KiBkaXJfZW50cnkpCit7CisJaWYgKCFmYXRfZGlyX2VudHJ5X2lzX2ZpbGUgKGRpcl9lbnRyeSkpIHJldHVybiAwOworCXJldHVybiAoZGlyX2VudHJ5LT5hdHRyaWJ1dGVzICYgU1lTVEVNX0FUVFIpCisJCXx8IChkaXJfZW50cnktPmF0dHJpYnV0ZXMgJiBISURERU5fQVRUUik7Cit9CisKK2ludAorZmF0X2Rpcl9lbnRyeV9pc19kaXJlY3RvcnkgKEZhdERpckVudHJ5KiBkaXJfZW50cnkpCit7CisJaWYgKGRpcl9lbnRyeS0+YXR0cmlidXRlcyA9PSBWRkFUX0FUVFIpIHJldHVybiAwOworCWlmIChkaXJfZW50cnktPmF0dHJpYnV0ZXMgJiBWT0xVTUVfTEFCRUxfQVRUUikgcmV0dXJuIDA7CisJaWYgKCFmYXRfZGlyX2VudHJ5X2lzX2FjdGl2ZSAoZGlyX2VudHJ5KSkgcmV0dXJuIDA7CisJcmV0dXJuIChkaXJfZW50cnktPmF0dHJpYnV0ZXMgJiBESVJFQ1RPUllfQVRUUikgPT0gRElSRUNUT1JZX0FUVFI7Cit9CisKK2ludAorZmF0X2Rpcl9lbnRyeV9oYXNfZmlyc3RfY2x1c3RlciAoRmF0RGlyRW50cnkqIGRpcl9lbnRyeSwgUGVkRmlsZVN5c3RlbSogZnMpCit7CisJRmF0U3BlY2lmaWMqCWZzX2luZm8gPSBGQVRfU1BFQ0lGSUMgKGZzKTsKKwlGYXRDbHVzdGVyCWZpcnN0X2NsdXN0ZXI7CisgICAgCisJaWYgKCFmYXRfZGlyX2VudHJ5X2lzX2ZpbGUgKGRpcl9lbnRyeSkKKwkJJiYgIWZhdF9kaXJfZW50cnlfaXNfZGlyZWN0b3J5IChkaXJfZW50cnkpKQorCQlyZXR1cm4gMDsKKworCWZpcnN0X2NsdXN0ZXIgPSBmYXRfZGlyX2VudHJ5X2dldF9maXJzdF9jbHVzdGVyIChkaXJfZW50cnksIGZzKTsKKwlpZiAoZmlyc3RfY2x1c3RlciA9PSAwCisJCXx8IGZhdF90YWJsZV9pc19lb2YgKGZzX2luZm8tPmZhdCwgZmlyc3RfY2x1c3RlcikpCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisKKy8qCisgICAgZGVjcnlwdHMgc2lsbHkgRE9TIG5hbWVzIHRvIEZJTEVOQU1FLkVYVAorKi8KK3ZvaWQKK2ZhdF9kaXJfZW50cnlfZ2V0X25hbWUgKEZhdERpckVudHJ5KmRpcl9lbnRyeSwgY2hhciAqcmVzdWx0KSB7CisJaW50ICAgICBpOworCWNoYXIgICAqc3JjOworCisJc3JjID0gZGlyX2VudHJ5LT5uYW1lOworCisJZm9yIChpPTA7IGk8ODsgaSsrKSB7CisJCWlmIChzcmNbaV0gPT0gJyAnIHx8IHNyY1tpXSA9PSAwKSBicmVhazsKKwkJKnJlc3VsdCsrID0gc3JjW2ldOworCX0KKworCWlmIChzcmNbOF0gIT0gJyAnICYmIHNyY1s4XSAhPSAwKSB7CisJCSpyZXN1bHQrKyA9ICcuJzsKKwkJZm9yIChpPTg7IGk8MTE7IGkrKykgeworCQkJaWYgKHNyY1tpXSA9PSAnICcgfHwgc3JjW2ldID09IDApIGJyZWFrOworCQkJKnJlc3VsdCsrID0gc3JjW2ldOworCQl9CisJfQorCisJKnJlc3VsdCA9IDA7Cit9CisKKyNlbmRpZiAvKiAhRElTQ09WRVJfT05MWSAqLwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9mYXQvdHJhdmVyc2UuaCBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvZmF0L3RyYXZlcnNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg4MzAyYwotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvZmF0L3RyYXZlcnNlLmgKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAgICBsaWJwYXJ0ZWQKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCisKKyAgICBJIGNhbiBhbHNvIGJlIGNvbnRhY3RlZCBhdDoKKworICAgIEFuZHJldyBDbGF1c2VuCisgICAgMTggU2hhdyBTdAorICAgIEFzaHdvb2QsIDMxNDcKKyAgICBWaWN0b3JpYSwgQXVzdHJhbGlhCisqLworCisjaWZuZGVmIFRSQVZFUlNFX0hfSU5DTFVERUQKKyNkZWZpbmUgVFJBVkVSU0VfSF9JTkNMVURFRAorCisjaW5jbHVkZSAiZmF0aW8uaCIKKwordHlwZWRlZiBzdHJ1Y3QgX0ZhdFRyYXZlcnNlSW5mbwkJRmF0VHJhdmVyc2VJbmZvOworCitzdHJ1Y3QgX0ZhdFRyYXZlcnNlSW5mbyB7CisJUGVkRmlsZVN5c3RlbSoJCWZzOworCWNoYXIqCQkJZGlyX25hbWU7CisKKwlpbnQJCQlpc19sZWdhY3lfcm9vdF9kaXI7CisJaW50CQkJZGlydHk7CisJaW50CQkJZW9mOworCisJRmF0RGlyRW50cnkqCQlkaXJfZW50cmllczsKKwlpbnQJCQljdXJyZW50X2VudHJ5OworCUZhdENsdXN0ZXIJCXRoaXNfYnVmZmVyLCBuZXh0X2J1ZmZlcjsKKwlpbnQJCQlidWZmZXJfc2l6ZTsKK307CisKK2V4dGVybiBpbnQgZmF0X3RyYXZlcnNlX2VudHJpZXNfcGVyX2J1ZmZlciAoRmF0VHJhdmVyc2VJbmZvKiB0cmF2X2luZm8pOworCisvKiBzdGFydHMgdHJhdmVyc2FsIGF0IGFuIGFyYml0YXJ5IGNsdXN0ZXIuICBpZiBzdGFydF9jbHVzdGVyPT0wLCB0aGVuIHVzZXMKKyAgIHJvb3QgZGlyZWN0b3J5ICovCitleHRlcm4gRmF0VHJhdmVyc2VJbmZvKiBmYXRfdHJhdmVyc2VfYmVnaW4gKFBlZEZpbGVTeXN0ZW0qIGZzLAorCQkJCSAgICAgRmF0Q2x1c3RlciBzdGFydF9jbHVzdGVyLCBjaGFyKiBkaXJfbmFtZSk7CisKK2V4dGVybiBpbnQgZmF0X3RyYXZlcnNlX2NvbXBsZXRlIChGYXRUcmF2ZXJzZUluZm8qIHRyYXZfaW5mbyk7CisKK2V4dGVybiBGYXRUcmF2ZXJzZUluZm8qIGZhdF90cmF2ZXJzZV9kaXJlY3RvcnkgKEZhdFRyYXZlcnNlSW5mbyogdHJhdl9pbmZvLAorCQkJCQkJRmF0RGlyRW50cnkqIHBhcmVudCk7CisKK2V4dGVybiB2b2lkIGZhdF90cmF2ZXJzZV9tYXJrX2RpcnR5IChGYXRUcmF2ZXJzZUluZm8qIHRyYXZfaW5mbyk7CisKK2V4dGVybiBGYXREaXJFbnRyeSogZmF0X3RyYXZlcnNlX25leHRfZGlyX2VudHJ5IChGYXRUcmF2ZXJzZUluZm8qIHRyYXZfaW5mbyk7CisKK2V4dGVybiBGYXRDbHVzdGVyIGZhdF9kaXJfZW50cnlfZ2V0X2ZpcnN0X2NsdXN0ZXIgKEZhdERpckVudHJ5KiBkaXJfZW50cnksCisJCQkJCQkgICBQZWRGaWxlU3lzdGVtKiBmcyk7CisKK2V4dGVybiB2b2lkIGZhdF9kaXJfZW50cnlfc2V0X2ZpcnN0X2NsdXN0ZXIgKEZhdERpckVudHJ5KiBkaXJfZW50cnksCisJCQkJCVBlZEZpbGVTeXN0ZW0qIGZzLCBGYXRDbHVzdGVyIGNsdXN0ZXIpOworCitleHRlcm4gdWludDMyX3QgZmF0X2Rpcl9lbnRyeV9nZXRfbGVuZ3RoIChGYXREaXJFbnRyeSogZGlyX2VudHJ5KTsKKworZXh0ZXJuIGludCBmYXRfZGlyX2VudHJ5X2lzX251bGxfdGVybSAoY29uc3QgRmF0RGlyRW50cnkqIGRpcl9lbnRyeSk7CitleHRlcm4gaW50IGZhdF9kaXJfZW50cnlfaXNfZmlsZSAoRmF0RGlyRW50cnkqIGRpcl9lbnRyeSk7CitleHRlcm4gaW50IGZhdF9kaXJfZW50cnlfaXNfc3lzdGVtX2ZpbGUgKEZhdERpckVudHJ5KiBkaXJfZW50cnkpOworZXh0ZXJuIGludCBmYXRfZGlyX2VudHJ5X2lzX2RpcmVjdG9yeSAoRmF0RGlyRW50cnkqIGRpcl9lbnRyeSk7CitleHRlcm4gdm9pZCBmYXRfZGlyX2VudHJ5X2dldF9uYW1lIChGYXREaXJFbnRyeSogZGlyX2VudHJ5LCBjaGFyKiByZXN1bHQpOworZXh0ZXJuIGludCBmYXRfZGlyX2VudHJ5X2lzX2FjdGl2ZSAoRmF0RGlyRW50cnkqIGRpcl9lbnRyeSk7CitleHRlcm4gaW50IGZhdF9kaXJfZW50cnlfaGFzX2ZpcnN0X2NsdXN0ZXIgKEZhdERpckVudHJ5KiBkaXJfZW50cnksCisJCQkJCSAgICBQZWRGaWxlU3lzdGVtKiBmcyk7CisKKyNlbmRpZiAvKiBUUkFWRVJTRV9IX0lOQ0xVREVEICovCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2hmcy9NYWtlZmlsZS5hbSBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvaGZzL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwY2VmZTQKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2hmcy9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDE3IEBACitwYXJ0ZWRpbmNsdWRlZGlyCT0gLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUKKworbm9pbnN0X0xUTElCUkFSSUVTCT0gbGliaGZzLmxhCitsaWJoZnNfbGFfU09VUkNFUwk9IGhmcy5jIGhmcy5oIFwKKwkJCSAgcHJvYmUuYyBwcm9iZS5oIFwKKwkJCSAgY2FjaGUuYyBjYWNoZS5oIFwKKwkJCSAgYWR2ZnMuYyBhZHZmcy5oIFwKKwkJCSAgZmlsZS5jIGZpbGUuaCBcCisJCQkgIHJlbG9jLmMgcmVsb2MuaCBcCisJCQkgIGFkdmZzX3BsdXMuYyBhZHZmc19wbHVzLmggXAorCQkJICBmaWxlX3BsdXMuYyBmaWxlX3BsdXMuaCBcCisJCQkgIHJlbG9jX3BsdXMuYyByZWxvY19wbHVzLmggXAorCQkJICBqb3VybmFsLmMgam91cm5hbC5oCisKK0lOQ0xVREVTID0gJChwYXJ0ZWRpbmNsdWRlZGlyKSAkKElOVExJTkNTKQorCitNQUlOVEFJTkVSQ0xFQU5GSUxFUyA9IE1ha2VmaWxlLmluCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2hmcy9NYWtlZmlsZS5pbiBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvaGZzL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhY2IxZTQKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2hmcy9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDY0NCBAQAorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xMCBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACisKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitzdWJkaXIgPSBsaWJwYXJ0ZWQvZnMvaGZzCitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gVE9ETworQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvbTQvYWJzb2x1dGUtaGVhZGVyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2FsbG9jYS5tNCAkKHRvcF9zcmNkaXIpL200L2Fzc2VydC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9hdGV4aXQubTQgJCh0b3Bfc3JjZGlyKS9tNC9jYWxsb2MubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY2xvc2Utc3RyZWFtLm00ICQodG9wX3NyY2RpcikvbTQvY2xvc2VvdXQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY29kZXNldC5tNCAkKHRvcF9zcmNkaXIpL200L2NvbmZpZy1oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2Rpcm5hbWUubTQgJCh0b3Bfc3JjZGlyKS9tNC9kb3MubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZG91YmxlLXNsYXNoLXJvb3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZXJyb3IubTQgJCh0b3Bfc3JjZGlyKS9tNC9leGl0ZmFpbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9leHRlbnNpb25zLm00ICQodG9wX3NyY2RpcikvbTQvZnBlbmRpbmcubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZnJlZS5tNCAkKHRvcF9zcmNkaXIpL200L2dldG9wdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00ICQodG9wX3NyY2RpcikvbTQvZ2xpYmMyMS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9nbnVsaWItY29tbW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2dudWxpYi1jb21wLm00ICQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaW5saW5lLm00ICQodG9wX3NyY2RpcikvbTQvaW50dHlwZXMtcHJpLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ludHR5cGVzLm00ICQodG9wX3NyY2RpcikvbTQvbGliLWlnbm9yZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xvY2FsY2hhcnNldC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sb25nLW9wdGlvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9sb25nbG9uZy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tYnJ0b3djLm00ICQodG9wX3NyY2RpcikvbTQvbWJzdGF0ZV90Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21lbWNoci5tNCAkKHRvcF9zcmNkaXIpL200L21lbWNtcC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tZW1jcHkubTQgJCh0b3Bfc3JjZGlyKS9tNC9tZW1tb3ZlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21lbXNldC5tNCAkKHRvcF9zcmNkaXIpL200L25scy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCAkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3F1b3RlYXJnLm00ICQodG9wX3NyY2RpcikvbTQvcmVnZXgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcmVuYW1lLm00ICQodG9wX3NyY2RpcikvbTQvcnBtYXRjaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zYWZlLXJlYWQubTQgJCh0b3Bfc3JjZGlyKS9tNC9zYWZlLXdyaXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3NzaXplX3QubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGRhcmcubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RkYm9vbC5tNCAkKHRvcF9zcmNkaXIpL200L3N0ZGludC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdGRsaWJfaC5tNCAkKHRvcF9zcmNkaXIpL200L3N0cmNzcG4ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RyaW5nX2gubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHJuZHVwLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0cm5sZW4ubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHJ0b2QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RydG9sLm00ICQodG9wX3NyY2RpcikvbTQvdW5pc3RkX2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdXRpbWJ1Zi5tNCAkKHRvcF9zcmNkaXIpL200L3V0aW1lLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3V0aW1lcy1udWxsLm00ICQodG9wX3NyY2RpcikvbTQvd2NoYXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvd2N0eXBlLm00ICQodG9wX3NyY2RpcikvbTQvd2ludF90Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3hhbGxvYy5tNCAkKHRvcF9zcmNkaXIpL200L3hzdHJuZHVwLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitMVExJQlJBUklFUyA9ICQobm9pbnN0X0xUTElCUkFSSUVTKQorbGliaGZzX2xhX0xJQkFERCA9CithbV9saWJoZnNfbGFfT0JKRUNUUyA9IGhmcy5sbyBwcm9iZS5sbyBjYWNoZS5sbyBhZHZmcy5sbyBmaWxlLmxvIFwKKwlyZWxvYy5sbyBhZHZmc19wbHVzLmxvIGZpbGVfcGx1cy5sbyByZWxvY19wbHVzLmxvIGpvdXJuYWwubG8KK2xpYmhmc19sYV9PQkpFQ1RTID0gJChhbV9saWJoZnNfbGFfT0JKRUNUUykKK0RFRkFVTFRfSU5DTFVERVMgPSAtSS4gLUkkKHRvcF9idWlsZGRpcikvbGliQGFtX19pc3JjQAorZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L2RlcGNvbXAKK2FtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCitDT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKKwkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitMVENPTVBJTEUgPSAkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorCS0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSBcCisJJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorQ0NMRCA9ICQoQ0MpCitMSU5LID0gJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIFwKKwktLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSBcCisJJChMREZMQUdTKSAtbyAkQAorU09VUkNFUyA9ICQobGliaGZzX2xhX1NPVVJDRVMpCitESVNUX1NPVVJDRVMgPSAkKGxpYmhmc19sYV9TT1VSQ0VTKQorRVRBR1MgPSBldGFncworQ1RBR1MgPSBjdGFncworRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FCU09MVVRFX0lOVFRZUEVTX0ggPSBAQUJTT0xVVEVfSU5UVFlQRVNfSEAKK0FCU09MVVRFX1NURElOVF9IID0gQEFCU09MVVRFX1NURElOVF9IQAorQUJTT0xVVEVfU1RETElCX0ggPSBAQUJTT0xVVEVfU1RETElCX0hACitBQlNPTFVURV9TVFJJTkdfSCA9IEBBQlNPTFVURV9TVFJJTkdfSEAKK0FCU09MVVRFX1VOSVNURF9IID0gQEFCU09MVVRFX1VOSVNURF9IQAorQUJTT0xVVEVfV0NIQVJfSCA9IEBBQlNPTFVURV9XQ0hBUl9IQAorQUJTT0xVVEVfV0NUWVBFX0ggPSBAQUJTT0xVVEVfV0NUWVBFX0hACitBQ0xPQ0FMID0gQEFDTE9DQUxACitBTExPQ0EgPSBAQUxMT0NBQAorQUxMT0NBX0ggPSBAQUxMT0NBX0hACitBTVRBUiA9IEBBTVRBUkAKK0FSID0gQEFSQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitCSVRTSVpFT0ZfUFRSRElGRl9UID0gQEJJVFNJWkVPRl9QVFJESUZGX1RACitCSVRTSVpFT0ZfU0lHX0FUT01JQ19UID0gQEJJVFNJWkVPRl9TSUdfQVRPTUlDX1RACitCSVRTSVpFT0ZfU0laRV9UID0gQEJJVFNJWkVPRl9TSVpFX1RACitCSVRTSVpFT0ZfV0NIQVJfVCA9IEBCSVRTSVpFT0ZfV0NIQVJfVEAKK0JJVFNJWkVPRl9XSU5UX1QgPSBAQklUU0laRU9GX1dJTlRfVEAKK0JVSUxESU5GTyA9IEBCVUlMRElORk9ACitDQyA9IEBDQ0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ0hFQ0tfQ0ZMQUdTID0gQENIRUNLX0NGTEFHU0AKK0NIRUNLX0xJQlMgPSBAQ0hFQ0tfTElCU0AKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RMX0xJQlMgPSBARExfTElCU0AKK0RNX0xJQlMgPSBARE1fTElCU0AKK0VDSE8gPSBARUNIT0AKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRVhFRVhUID0gQEVYRUVYVEAKK0Y3NyA9IEBGNzdACitGRkxBR1MgPSBARkZMQUdTQAorR0VUT1BUX0ggPSBAR0VUT1BUX0hACitHTElCQzIxID0gQEdMSUJDMjFACitHTVNHRk1UID0gQEdNU0dGTVRACitHTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKK0dOVUxJQl9DSE9XTiA9IEBHTlVMSUJfQ0hPV05ACitHTlVMSUJfRFVQMiA9IEBHTlVMSUJfRFVQMkAKK0dOVUxJQl9GQ0hESVIgPSBAR05VTElCX0ZDSERJUkAKK0dOVUxJQl9GVFJVTkNBVEUgPSBAR05VTElCX0ZUUlVOQ0FURUAKK0dOVUxJQl9HRVRDV0QgPSBAR05VTElCX0dFVENXREAKK0dOVUxJQl9HRVRMT0dJTl9SID0gQEdOVUxJQl9HRVRMT0dJTl9SQAorR05VTElCX0dFVFNVQk9QVCA9IEBHTlVMSUJfR0VUU1VCT1BUQAorR05VTElCX0lNQVhBQlMgPSBAR05VTElCX0lNQVhBQlNACitHTlVMSUJfSU1BWERJViA9IEBHTlVMSUJfSU1BWERJVkAKK0dOVUxJQl9NQlNDQVNFQ01QID0gQEdOVUxJQl9NQlNDQVNFQ01QQAorR05VTElCX01CU0NBU0VTVFIgPSBAR05VTElCX01CU0NBU0VTVFJACitHTlVMSUJfTUJTQ0hSID0gQEdOVUxJQl9NQlNDSFJACitHTlVMSUJfTUJTQ1NQTiA9IEBHTlVMSUJfTUJTQ1NQTkAKK0dOVUxJQl9NQlNMRU4gPSBAR05VTElCX01CU0xFTkAKK0dOVUxJQl9NQlNOQ0FTRUNNUCA9IEBHTlVMSUJfTUJTTkNBU0VDTVBACitHTlVMSUJfTUJTUEJSSyA9IEBHTlVMSUJfTUJTUEJSS0AKK0dOVUxJQl9NQlNQQ0FTRUNNUCA9IEBHTlVMSUJfTUJTUENBU0VDTVBACitHTlVMSUJfTUJTUkNIUiA9IEBHTlVMSUJfTUJTUkNIUkAKK0dOVUxJQl9NQlNTRVAgPSBAR05VTElCX01CU1NFUEAKK0dOVUxJQl9NQlNTUE4gPSBAR05VTElCX01CU1NQTkAKK0dOVUxJQl9NQlNTVFIgPSBAR05VTElCX01CU1NUUkAKK0dOVUxJQl9NQlNUT0tfUiA9IEBHTlVMSUJfTUJTVE9LX1JACitHTlVMSUJfTUVNTUVNID0gQEdOVUxJQl9NRU1NRU1ACitHTlVMSUJfTUVNUENQWSA9IEBHTlVMSUJfTUVNUENQWUAKK0dOVUxJQl9NRU1SQ0hSID0gQEdOVUxJQl9NRU1SQ0hSQAorR05VTElCX01LRFRFTVAgPSBAR05VTElCX01LRFRFTVBACitHTlVMSUJfTUtTVEVNUCA9IEBHTlVMSUJfTUtTVEVNUEAKK0dOVUxJQl9SRUFETElOSyA9IEBHTlVMSUJfUkVBRExJTktACitHTlVMSUJfU0xFRVAgPSBAR05VTElCX1NMRUVQQAorR05VTElCX1NUUENQWSA9IEBHTlVMSUJfU1RQQ1BZQAorR05VTElCX1NUUE5DUFkgPSBAR05VTElCX1NUUE5DUFlACitHTlVMSUJfU1RSQ0FTRVNUUiA9IEBHTlVMSUJfU1RSQ0FTRVNUUkAKK0dOVUxJQl9TVFJDSFJOVUwgPSBAR05VTElCX1NUUkNIUk5VTEAKK0dOVUxJQl9TVFJEVVAgPSBAR05VTElCX1NUUkRVUEAKK0dOVUxJQl9TVFJORFVQID0gQEdOVUxJQl9TVFJORFVQQAorR05VTElCX1NUUk5MRU4gPSBAR05VTElCX1NUUk5MRU5ACitHTlVMSUJfU1RSUEJSSyA9IEBHTlVMSUJfU1RSUEJSS0AKK0dOVUxJQl9TVFJTRVAgPSBAR05VTElCX1NUUlNFUEAKK0dOVUxJQl9TVFJUT0lNQVggPSBAR05VTElCX1NUUlRPSU1BWEAKK0dOVUxJQl9TVFJUT0tfUiA9IEBHTlVMSUJfU1RSVE9LX1JACitHTlVMSUJfU1RSVE9VTUFYID0gQEdOVUxJQl9TVFJUT1VNQVhACitHUkVQID0gQEdSRVBACitIQVZFX0RFQ0xfR0VUTE9HSU5fUiA9IEBIQVZFX0RFQ0xfR0VUTE9HSU5fUkAKK0hBVkVfREVDTF9JTUFYQUJTID0gQEhBVkVfREVDTF9JTUFYQUJTQAorSEFWRV9ERUNMX0lNQVhESVYgPSBASEFWRV9ERUNMX0lNQVhESVZACitIQVZFX0RFQ0xfTUVNTUVNID0gQEhBVkVfREVDTF9NRU1NRU1ACitIQVZFX0RFQ0xfTUVNUkNIUiA9IEBIQVZFX0RFQ0xfTUVNUkNIUkAKK0hBVkVfREVDTF9TVFJEVVAgPSBASEFWRV9ERUNMX1NUUkRVUEAKK0hBVkVfREVDTF9TVFJOQ0FTRUNNUCA9IEBIQVZFX0RFQ0xfU1RSTkNBU0VDTVBACitIQVZFX0RFQ0xfU1RSTkRVUCA9IEBIQVZFX0RFQ0xfU1RSTkRVUEAKK0hBVkVfREVDTF9TVFJOTEVOID0gQEhBVkVfREVDTF9TVFJOTEVOQAorSEFWRV9ERUNMX1NUUlRPSU1BWCA9IEBIQVZFX0RFQ0xfU1RSVE9JTUFYQAorSEFWRV9ERUNMX1NUUlRPS19SID0gQEhBVkVfREVDTF9TVFJUT0tfUkAKK0hBVkVfREVDTF9TVFJUT1VNQVggPSBASEFWRV9ERUNMX1NUUlRPVU1BWEAKK0hBVkVfRFVQMiA9IEBIQVZFX0RVUDJACitIQVZFX0ZUUlVOQ0FURSA9IEBIQVZFX0ZUUlVOQ0FURUAKK0hBVkVfR0VUU1VCT1BUID0gQEhBVkVfR0VUU1VCT1BUQAorSEFWRV9JTlRUWVBFU19IID0gQEhBVkVfSU5UVFlQRVNfSEAKK0hBVkVfSVNXQ05UUkwgPSBASEFWRV9JU1dDTlRSTEAKK0hBVkVfTE9OR19MT05HX0lOVCA9IEBIQVZFX0xPTkdfTE9OR19JTlRACitIQVZFX01FTVBDUFkgPSBASEFWRV9NRU1QQ1BZQAorSEFWRV9NS0RURU1QID0gQEhBVkVfTUtEVEVNUEAKK0hBVkVfUkVBRExJTksgPSBASEFWRV9SRUFETElOS0AKK0hBVkVfU0lHTkVEX1NJR19BVE9NSUNfVCA9IEBIQVZFX1NJR05FRF9TSUdfQVRPTUlDX1RACitIQVZFX1NJR05FRF9XQ0hBUl9UID0gQEhBVkVfU0lHTkVEX1dDSEFSX1RACitIQVZFX1NJR05FRF9XSU5UX1QgPSBASEFWRV9TSUdORURfV0lOVF9UQAorSEFWRV9TTEVFUCA9IEBIQVZFX1NMRUVQQAorSEFWRV9TVERJTlRfSCA9IEBIQVZFX1NURElOVF9IQAorSEFWRV9TVFBDUFkgPSBASEFWRV9TVFBDUFlACitIQVZFX1NUUE5DUFkgPSBASEFWRV9TVFBOQ1BZQAorSEFWRV9TVFJDQVNFQ01QID0gQEhBVkVfU1RSQ0FTRUNNUEAKK0hBVkVfU1RSQ0FTRVNUUiA9IEBIQVZFX1NUUkNBU0VTVFJACitIQVZFX1NUUkNIUk5VTCA9IEBIQVZFX1NUUkNIUk5VTEAKK0hBVkVfU1RSTkRVUCA9IEBIQVZFX1NUUk5EVVBACitIQVZFX1NUUlBCUksgPSBASEFWRV9TVFJQQlJLQAorSEFWRV9TVFJTRVAgPSBASEFWRV9TVFJTRVBACitIQVZFX1NZU19CSVRZUEVTX0ggPSBASEFWRV9TWVNfQklUWVBFU19IQAorSEFWRV9TWVNfSU5UVFlQRVNfSCA9IEBIQVZFX1NZU19JTlRUWVBFU19IQAorSEFWRV9TWVNfVFlQRVNfSCA9IEBIQVZFX1NZU19UWVBFU19IQAorSEFWRV9VTklTVERfSCA9IEBIQVZFX1VOSVNURF9IQAorSEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UID0gQEhBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVEAKK0hBVkVfV0NUWVBFX0ggPSBASEFWRV9XQ1RZUEVfSEAKK0hBVkVfV0lOVF9UID0gQEhBVkVfV0lOVF9UQAorSEFWRV9fQk9PTCA9IEBIQVZFX19CT09MQAorSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitJTlRMSU5DUyA9IEBJTlRMSU5DU0AKK0lOVExMSUJTID0gQElOVExMSUJTQAorSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAorSU5UVFlQRVNfSCA9IEBJTlRUWVBFU19IQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCSUNPTlYgPSBATElCSUNPTlZACitMSUJJTlRMID0gQExJQklOVExACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQExJQlNACitMSUJUT09MID0gQExJQlRPT0xACitMTl9TID0gQExOX1NACitMVEFMTE9DQSA9IEBMVEFMTE9DQUAKK0xUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKK0xUTElCSU5UTCA9IEBMVExJQklOVExACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTFRfQUdFID0gQExUX0FHRUAKK0xUX0NVUlJFTlQgPSBATFRfQ1VSUkVOVEAKK0xUX1JFTEVBU0UgPSBATFRfUkVMRUFTRUAKK0xUX1JFVklTSU9OID0gQExUX1JFVklTSU9OQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitNS0RJUl9QID0gQE1LRElSX1BACitNU0dGTVQgPSBATVNHRk1UQAorTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAorTVNHTUVSR0UgPSBATVNHTUVSR0VACitPQkpFWFQgPSBAT0JKRVhUQAorT1MgPSBAT1NACitPU19MSUJTID0gQE9TX0xJQlNACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFSVEVETERGTEFHUyA9IEBQQVJURURMREZMQUdTQAorUEFSVEVEX0xJQlMgPSBAUEFSVEVEX0xJQlNACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKK1BPU1VCID0gQFBPU1VCQAorUE9XX0xJQiA9IEBQT1dfTElCQAorUFJJUFRSX1BSRUZJWCA9IEBQUklQVFJfUFJFRklYQAorUFJJX01BQ1JPU19CUk9LRU4gPSBAUFJJX01BQ1JPU19CUk9LRU5ACitQVFJESUZGX1RfU1VGRklYID0gQFBUUkRJRkZfVF9TVUZGSVhACitSQU5MSUIgPSBAUkFOTElCQAorUkVJU0VSX0xJQlMgPSBAUkVJU0VSX0xJQlNACitSRVBMQUNFX0NIT1dOID0gQFJFUExBQ0VfQ0hPV05ACitSRVBMQUNFX0ZDSERJUiA9IEBSRVBMQUNFX0ZDSERJUkAKK1JFUExBQ0VfR0VUQ1dEID0gQFJFUExBQ0VfR0VUQ1dEQAorUkVQTEFDRV9NS1NURU1QID0gQFJFUExBQ0VfTUtTVEVNUEAKK1NFRCA9IEBTRURACitTRUxJTlVYX0xJQlMgPSBAU0VMSU5VWF9MSUJTQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NJR19BVE9NSUNfVF9TVUZGSVggPSBAU0lHX0FUT01JQ19UX1NVRkZJWEAKK1NJWkVfVF9TVUZGSVggPSBAU0laRV9UX1NVRkZJWEAKK1NUREJPT0xfSCA9IEBTVERCT09MX0hACitTVERJTlRfSCA9IEBTVERJTlRfSEAKK1NUUklQID0gQFNUUklQQAorVVNFX05MUyA9IEBVU0VfTkxTQAorVVVJRF9MSUJTID0gQFVVSURfTElCU0AKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1dDSEFSX0ggPSBAV0NIQVJfSEAKK1dDSEFSX1RfU1VGRklYID0gQFdDSEFSX1RfU1VGRklYQAorV0NUWVBFX0ggPSBAV0NUWVBFX0hACitXSU5UX1RfU1VGRklYID0gQFdJTlRfVF9TVUZGSVhACitYR0VUVEVYVCA9IEBYR0VUVEVYVEAKK1hHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9GNzcgPSBAYWNfY3RfRjc3QAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitidWlsZGRpciA9IEBidWlsZGRpckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZG9jZGlyID0gQGRvY2RpckAKK2R2aWRpciA9IEBkdmlkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2dsX0xJQk9CSlMgPSBAZ2xfTElCT0JKU0AKK2dsX0xUTElCT0JKUyA9IEBnbF9MVExJQk9CSlNACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorcGFydGVkaW5jbHVkZWRpciA9IC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlCitub2luc3RfTFRMSUJSQVJJRVMgPSBsaWJoZnMubGEKK2xpYmhmc19sYV9TT1VSQ0VTID0gaGZzLmMgaGZzLmggXAorCQkJICBwcm9iZS5jIHByb2JlLmggXAorCQkJICBjYWNoZS5jIGNhY2hlLmggXAorCQkJICBhZHZmcy5jIGFkdmZzLmggXAorCQkJICBmaWxlLmMgZmlsZS5oIFwKKwkJCSAgcmVsb2MuYyByZWxvYy5oIFwKKwkJCSAgYWR2ZnNfcGx1cy5jIGFkdmZzX3BsdXMuaCBcCisJCQkgIGZpbGVfcGx1cy5jIGZpbGVfcGx1cy5oIFwKKwkJCSAgcmVsb2NfcGx1cy5jIHJlbG9jX3BsdXMuaCBcCisJCQkgIGpvdXJuYWwuYyBqb3VybmFsLmgKKworSU5DTFVERVMgPSAkKHBhcnRlZGluY2x1ZGVkaXIpICQoSU5UTElOQ1MpCitNQUlOVEFJTkVSQ0xFQU5GSUxFUyA9IE1ha2VmaWxlLmluCithbGw6IGFsbC1hbQorCisuU1VGRklYRVM6CisuU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCiskKHNyY2RpcikvTWFrZWZpbGUuaW46ICAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCBcCisJCSYmIGV4aXQgMDsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgIGxpYnBhcnRlZC9mcy9oZnMvTWFrZWZpbGUnOyBcCisJY2QgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWdudSAgbGlicGFydGVkL2ZzL2hmcy9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworY2xlYW4tbm9pbnN0TFRMSUJSQVJJRVM6CisJLXRlc3QgLXogIiQobm9pbnN0X0xUTElCUkFSSUVTKSIgfHwgcm0gLWYgJChub2luc3RfTFRMSUJSQVJJRVMpCisJQGxpc3Q9JyQobm9pbnN0X0xUTElCUkFSSUVTKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgZGlyPSJgZWNobyAkJHAgfCBzZWQgLWUgJ3N8L1teL10qJCR8fCdgIjsgXAorCSAgdGVzdCAiJCRkaXIiICE9ICIkJHAiIHx8IGRpcj0uOyBcCisJICBlY2hvICJybSAtZiBcIiQke2Rpcn0vc29fbG9jYXRpb25zXCIiOyBcCisJICBybSAtZiAiJCR7ZGlyfS9zb19sb2NhdGlvbnMiOyBcCisJZG9uZQorbGliaGZzLmxhOiAkKGxpYmhmc19sYV9PQkpFQ1RTKSAkKGxpYmhmc19sYV9ERVBFTkRFTkNJRVMpIAorCSQoTElOSykgICQobGliaGZzX2xhX09CSkVDVFMpICQobGliaGZzX2xhX0xJQkFERCkgJChMSUJTKQorCittb3N0bHljbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLiQoT0JKRVhUKQorCitkaXN0Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi50YWIuYworCitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYWR2ZnMuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9hZHZmc19wbHVzLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvY2FjaGUuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9maWxlLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZmlsZV9wbHVzLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvaGZzLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvam91cm5hbC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3Byb2JlLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcmVsb2MuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9yZWxvY19wbHVzLlBsb0BhbV9fcXVvdGVACisKKy5jLm86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgJDwKKworLmMub2JqOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgYCQoQ1lHUEFUSF9XKSAnJDwnYAorCisuYy5sbzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJbWtpZCAtZklEICQkdW5pcXVlCit0YWdzOiBUQUdTCisKK1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJdGFncz07IFwKKwloZXJlPWBwd2RgOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKwkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKKwkgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgJCR0YWdzICQkdW5pcXVlOyBcCisJZmkKK2N0YWdzOiBDVEFHUworQ1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJdGFncz07IFwKKwloZXJlPWBwd2RgOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIiBcCisJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCisJICAgICAkJHRhZ3MgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmIGNkICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAkJGhlcmUKKworZGlzdGNsZWFuLXRhZ3M6CisJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1wUiAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLXBSICQkZC8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgJChkaXN0ZGlyKS8kJGZpbGUgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICQoZGlzdGRpcikvJCRmaWxlIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1hbQorYWxsLWFtOiBNYWtlZmlsZSAkKExUTElCUkFSSUVTKQoraW5zdGFsbGRpcnM6CitpbnN0YWxsOiBpbnN0YWxsLWFtCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KK3VuaW5zdGFsbDogdW5pbnN0YWxsLWFtCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCitpbnN0YWxsLXN0cmlwOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorCS10ZXN0IC16ICIkKE1BSU5UQUlORVJDTEVBTkZJTEVTKSIgfHwgcm0gLWYgJChNQUlOVEFJTkVSQ0xFQU5GSUxFUykKK2NsZWFuOiBjbGVhbi1hbQorCitjbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdExUTElCUkFSSUVTIFwKKwltb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi10YWdzCisKK2R2aTogZHZpLWFtCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1hbQorCitpbmZvOiBpbmZvLWFtCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbToKKworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1tYW46CisKK2luc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQorCitpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtYW0KKworcGRmLWFtOgorCitwczogcHMtYW0KKworcHMtYW06CisKK3VuaW5zdGFsbC1hbToKKworLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAorCisuUEhPTlk6IENUQUdTIEdUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCisJY2xlYW4tbGlidG9vbCBjbGVhbi1ub2luc3RMVExJQlJBUklFUyBjdGFncyBkaXN0Y2xlYW4gXAorCWRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIFwKKwlkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBcCisJaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgXAorCWluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIFwKKwlpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBcCisJaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKKwlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAorCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKKwltb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCisJcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0KKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9oZnMvVE9ETyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvaGZzL1RPRE8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNiY2E5YwotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvaGZzL1RPRE8KQEAgLTAsMCArMSwyNyBAQAorLS0tIFRPRE8gLS0tCisKKyAgICogQ29udGludWUgdG8gd3JpdGUgcmVncmVzc2lvbnMgdGVzdHMgYW5kIHRyeSBvbiAyLjYga2VybmVsICAtLSAoaGlnaCkKKyAgICogRml4IHRpbWVyIHByb2dyZXNzaW9uIGNhbGN1bGF0aW9uLCBhY2NvcmRpbmcgdG8gdGhlIG5ldworICAgICBjYWNoaW5nIGNvZGUJCQkJCQktLSAoaGlnaCkKKyAgICogd3JpdGUgZG9jLCB3ZWJzaXRlLCAuLi4JCQkJCS0tIChoaWdoKQorICAgKiBDaGVjayBibG9jayBhbGxvY2F0aW9uIGluIGxpbnV4IDIuNCBhbmQgcmVtb3ZlCisgICAgIGNvbXBhdGliaWxpdHkgY29kZSBpZiBwb3NzaWJsZQkJCQktLSAoaGlnaCkKKyAgCisgICAqIEluIGhmcyhwbHVzKV9idHJlZV9zZWFyY2ggLCB1c2UgYSBzdGF0aWMgdmFyaWFibGUgdG8gZGV0ZWN0CisgICAgIGlsbGVnYWwgcmVjdXJzaW9uIGFuZCBhYm9ydCBpbiB0aGF0IGNhc2UuIChmaW5kIHRoZSByaWdodAorICAgICBudW1iZXIgb2YgcmVjdXJzaW9uIGJlZm9yZSByZXBvcnRpbmcgYnVnKSAtLSBlYXN5CQktLSAobWVkaXVtKQorICAgKiBGaW5pc2ggdGhlIEhGUyBFeHRyYWN0b3IJCQkJCS0tIChtZWRpdW0pCisgICAgIChhZGQgbWRiICYgdmggZXh0cmFjdGlvbiwgYW5kIG1heWJlIGpvdXJuYWwpICAgIAorCisgICAqIFdyaXRlIGNvZGUgdG8gYWxsb3cgZW5sYXJnaW5nIGFuZCBtb3ZpbmcgSEZTWyt4XQkJLS0gKGxvdykKKyAgICogVXNlIGEgYml0bWFwIHRvIGludGVybmFseSBzdG9yZSB0aGUgYmFkIGJsb2NrcwkJLS0gKGxvdykKKyAgICogTGVzcyBiaXRtYXAgc2F2ZXMgPwkJCQkJLS0gKGxvdykKKyAgICogQ29udGludWUgdG8gY2hhbmdlIHRoZSByZWxvY2F0aW9uIGFsZ29yaXRobQorICAgICBmb3IgYSBiZXR0ZXIgb25lIDopCQkJCQktLSAobG93KQorCistLS0gTk9UIHRvZG8gLS0tCisKKyAgICogZGVidWcgSEZTKCspIExpbnV4IGltcGxlbWVudGF0aW9uIChibG9jayBhbGxvY2F0aW9uIGZvciBIRlMrLAorICAgICBoYXJkIGFuZCBzeW0gbGlua3MgZm9yIEhGUyssIGZpbGVuYW1lIGxlbmd0aCBmb3IgSEZTLCAuLi4pCS0tIChkb250KQorCS8vLyBMaW51eCAyLjYgY29udGFpbnMgSEZTKCspIGltcGxlbWVudGF0aW9ucyB3aXRoIGxlc3MgYnVncworCS8vLyBMaW51eCAyLjQgc2hvdWxkIG5vdCBiZSB1c2VkIGFueW1vcmUgdG8gYWNjZXNzIEhGUygrKQpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9oZnMvYWR2ZnMuYyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvaGZzL2FkdmZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE1N2U5NQotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvaGZzL2FkdmZzLmMKQEAgLTAsMCArMSwzMjkgQEAKKy8qCisgICAgbGlicGFydGVkIC0gYSBsaWJyYXJ5IGZvciBtYW5pcHVsYXRpbmcgZGlzayBwYXJ0aXRpb25zCisgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQorKi8KKworI2lmbmRlZiBESVNDT1ZFUl9PTkxZCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworI2luY2x1ZGUgPHBhcnRlZC9wYXJ0ZWQuaD4KKyNpbmNsdWRlIDxwYXJ0ZWQvZW5kaWFuLmg+CisjaW5jbHVkZSA8cGFydGVkL2RlYnVnLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpZiBFTkFCTEVfTkxTCisjICBpbmNsdWRlIDxsaWJpbnRsLmg+CisjICBkZWZpbmUgXyhTdHJpbmcpIGRnZXR0ZXh0IChQQUNLQUdFLCBTdHJpbmcpCisjZWxzZQorIyAgZGVmaW5lIF8oU3RyaW5nKSAoU3RyaW5nKQorI2VuZGlmIC8qIEVOQUJMRV9OTFMgKi8KKworI2luY2x1ZGUgImhmcy5oIgorI2luY2x1ZGUgImZpbGUuaCIKKworI2luY2x1ZGUgImFkdmZzLmgiCisKKy8qIC0gaWYgYSA8IGIsIDAgaWYgYSA9PSBiLCArIGlmIGEgPiBiICovCisvKiBDb21wYXJhaXNvbiBpcyBkb25lIGluIHRoZSBmb2xsb3dpbmcgb3JkZXIgOiAqLworLyogQ05JRCwgdGhlbiBmb3JrIHR5cGUsIHRoZW4gc3RhcnQgYmxvY2sgKi8KKy8qIE5vdGUgdGhhdCBIRlMgaW1wbGVtZW50YXRpb24gaW4gbGludXggaGFzIGEgYnVnICovCisvKiBpbiB0aGlzIGZ1bmN0aW9uICovCitzdGF0aWMgaW50CitoZnNfZXh0ZW50X2tleV9jbXAoSGZzUHJpdmF0ZUdlbmVyaWNLZXkqIGEsIEhmc1ByaXZhdGVHZW5lcmljS2V5KiBiKQoreworCUhmc0V4dGVudEtleSoga2V5MSA9IChIZnNFeHRlbnRLZXkqKSBhOworCUhmc0V4dGVudEtleSoga2V5MiA9IChIZnNFeHRlbnRLZXkqKSBiOworCisJLyogZG8gTk9UIHVzZSBhIHN1YnN0cmFjdGlvbiwgYmVjYXVzZSAqLworCS8qIDB4RkZGRkZGRkYgLSAxID0gMHhGRkZGRkZGRSBzbyB0aGlzICovCisJLyogd291bGQgcmV0dXJuIC0yLCBkZXNwaXRlIHRoZSBmYWN0ICovCisJLyogMHhGRkZGRkZGRiA+IDEgISEhICh0aGlzIGlzIHRoZSAyLjQgYnVnKSAqLworCWlmIChrZXkxLT5maWxlX0lEICE9IGtleTItPmZpbGVfSUQpCisJCXJldHVybiBQRURfQkUzMl9UT19DUFUoa2V5MS0+ZmlsZV9JRCkgPAorCQkgICAgICAgUEVEX0JFMzJfVE9fQ1BVKGtleTItPmZpbGVfSUQpID8gCisJCQkJLTEgOiArMTsKKworCWlmIChrZXkxLT50eXBlICE9IGtleTItPnR5cGUpCisJCXJldHVybiAoaW50KShrZXkxLT50eXBlIC0ga2V5Mi0+dHlwZSk7CisKKwlpZiAoa2V5MS0+c3RhcnQgPT0ga2V5Mi0+c3RhcnQpCisJCXJldHVybiAwOworCS8qIHRoZSB3aG9sZSB0aGluZyB3b250IHdvcmsgd2l0aCAxNiBiaXRzIGludHMgKi8KKwkvKiBhbnl3YXkgKi8KKwlyZXR1cm4gKGludCkoIFBFRF9CRTE2X1RPX0NQVShrZXkxLT5zdGFydCkgLSAKKwkJICAgICAgUEVEX0JFMTZfVE9fQ1BVKGtleTItPnN0YXJ0KSApOworfQorCisvKiBkbyBhIEItVHJlZSBsb29rdXAgKi8KKy8qIHJlYWQgdGhlIGZpcnN0IHJlY29yZCBpbW1lZGlhdGx5IGluZmVyaW9yIG9yIGVnYWwgdG8gdGhlIGdpdmVuIGtleSAqLworLyogcmV0dXJuIDAgb24gZXJyb3IgKi8KKy8qIHJlY29yZF9vdXQgX211c3RfIGJlIGxhcmdlIGVub3VnaCB0byByZWNlaXZlIHJlY29yZF9zaXplIGJ5dGVzICovCisvKiBXQVJOSU5HIDogdGhlIGNvbXBhcmUgZnVuY3Rpb24gY2FsbGVkIG9ubHkgaGFuZGxlIEV4dGVudHMgQlRyZWUgKi8KKy8qCSAgICAgc28gbW9kaWZ5IHRoaXMgZnVuY3Rpb24gaWYgeW91IHdhbnQgdG8gZG8gbG9va3VwIGluICovCisvKiAJICAgICBvdGhlciBCVHJlZXMgaGFzIHdlbGwgKi8KK2ludAoraGZzX2J0cmVlX3NlYXJjaCAoSGZzUHJpdmF0ZUZpbGUqIGJfdHJlZV9maWxlLCBIZnNQcml2YXRlR2VuZXJpY0tleSoga2V5LAorCQkgIHZvaWQgKnJlY29yZF9vdXQsIHVuc2lnbmVkIGludCByZWNvcmRfc2l6ZSwKKwkJICBIZnNDUHJpdmF0ZUxlYWZSZWMqIHJlY29yZF9yZWYpCit7CisJdWludDhfdAkJCW5vZGVbUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFRdOworCUhmc0hlYWRlclJlY29yZCoJaGVhZGVyOworCUhmc05vZGVEZXNjcmlwdG9yKglkZXNjID0gKEhmc05vZGVEZXNjcmlwdG9yKikgbm9kZTsKKwlIZnNQcml2YXRlR2VuZXJpY0tleSoJcmVjb3JkX2tleSA9IE5VTEw7CisJdW5zaWduZWQgaW50CQlub2RlX251bWJlciwgcmVjb3JkX251bWJlcjsKKwlpbnQJCQlpOworCisJLyogUmVhZCB0aGUgaGVhZGVyIG5vZGUgKi8KKwlpZiAoIWhmc19maWxlX3JlYWRfc2VjdG9yKGJfdHJlZV9maWxlLCBub2RlLCAwKSkKKwkJcmV0dXJuIDA7CisJaGVhZGVyID0gKChIZnNIZWFkZXJSZWNvcmQqKSAobm9kZSArIFBFRF9CRTE2X1RPX0NQVSgqKCh1aW50MTZfdCAqKQorCQkJCQkJKG5vZGUrKFBFRF9TRUNUT1JfU0laRV9ERUZBVUxULTIpKSkpKSk7CisKKwkvKiBHZXQgdGhlIG5vZGUgbnVtYmVyIG9mIHRoZSByb290ICovCisJbm9kZV9udW1iZXIgPSBQRURfQkUzMl9UT19DUFUoaGVhZGVyLT5yb290X25vZGUpOworCWlmICghbm9kZV9udW1iZXIpCisJCXJldHVybiAwOworCisJLyogUmVhZCB0aGUgcm9vdCBub2RlICovCisJaWYgKCFoZnNfZmlsZV9yZWFkX3NlY3RvcihiX3RyZWVfZmlsZSwgbm9kZSwgbm9kZV9udW1iZXIpKQorCQlyZXR1cm4gMDsKKworCS8qIEZvbGxvdyB0aGUgd2hpdGUgcmFiYml0ICovCisJd2hpbGUgKDEpIHsKKwkJcmVjb3JkX251bWJlciA9IFBFRF9CRTE2X1RPX0NQVSAoZGVzYy0+cmVjX25iKTsKKwkJZm9yIChpID0gcmVjb3JkX251bWJlcjsgaTsgaS0tKSB7CisJCQlyZWNvcmRfa2V5ID0gKEhmc1ByaXZhdGVHZW5lcmljS2V5KikKKwkJCQkobm9kZSArIFBFRF9CRTE2X1RPX0NQVSgqKCh1aW50MTZfdCAqKQorCQkJCQkgICAgKG5vZGUrKFBFRF9TRUNUT1JfU0laRV9ERUZBVUxUIC0gMippKSkpKSk7CisJCQkvKiBjaGVjayBmb3Igb2J2aW91cyBlcnJvciBpbiBGUyAqLworCQkJaWYgKCgodWludDhfdCopcmVjb3JkX2tleSAtIG5vZGUgPCBIRlNfRklSU1RfUkVDKQorCQkJICAgIHx8ICgodWludDhfdCopcmVjb3JkX2tleSAtIG5vZGUKKwkJCQk+PSBQRURfU0VDVE9SX1NJWkVfREVGQVVMVAorCQkJCSAgIC0gMiAqIChzaWduZWQpKHJlY29yZF9udW1iZXIrMSkpKSB7CisJCQkJcGVkX2V4Y2VwdGlvbl90aHJvdyAoCisJCQkJCVBFRF9FWENFUFRJT05fRVJST1IsCisJCQkJCVBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJCQlfKCJUaGUgZmlsZSBzeXN0ZW0gY29udGFpbnMgZXJyb3JzLiIpKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCWlmIChoZnNfZXh0ZW50X2tleV9jbXAocmVjb3JkX2tleSwga2V5KSA8PSAwKQorCQkJCWJyZWFrOworCQl9CisJCWlmICghaSkgcmV0dXJuIDA7CisJCWlmIChkZXNjLT50eXBlID09IEhGU19JRFhfTk9ERSkgeworCQkJdW5zaWduZWQgaW50IAlza2lwOworCisJCQlza2lwID0gKDEgKyByZWNvcmRfa2V5LT5rZXlfbGVuZ3RoICsgMSkgJiB+MTsKKwkJCW5vZGVfbnVtYmVyID0gUEVEX0JFMzJfVE9fQ1BVICgqKCh1aW50MzJfdCAqKQorCQkJCQkoKCh1aW50OF90ICopIHJlY29yZF9rZXkpICsgc2tpcCkpKTsKKwkJCWlmICghaGZzX2ZpbGVfcmVhZF9zZWN0b3IoYl90cmVlX2ZpbGUsIG5vZGUsCisJCQkJCQkgIG5vZGVfbnVtYmVyKSkKKwkJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIAorCQkJYnJlYWs7CisJfQorCisJLyogY29weSB0aGUgcmVzdWx0IGlmIG5lZWRlZCAqLworCWlmIChyZWNvcmRfc2l6ZSkKKwkJbWVtY3B5IChyZWNvcmRfb3V0LCByZWNvcmRfa2V5LCByZWNvcmRfc2l6ZSk7CisKKwkvKiBzZW5kIHJlY29yZCByZWZlcmVuY2UgaWYgbmVlZGVkICovCisJaWYgKHJlY29yZF9yZWYpIHsKKwkJcmVjb3JkX3JlZi0+bm9kZV9zaXplID0gMTsJLyogaW4gc2VjdG9ycyAqLworCQlyZWNvcmRfcmVmLT5ub2RlX251bWJlciA9IG5vZGVfbnVtYmVyOworCQlyZWNvcmRfcmVmLT5yZWNvcmRfcG9zID0gKHVpbnQ4X3QqKXJlY29yZF9rZXkgLSBub2RlOworCQlyZWNvcmRfcmVmLT5yZWNvcmRfbnVtYmVyID0gaTsKKwl9CisKKwkvKiBzdWNjZXNzICovCisJcmV0dXJuIDE7Cit9CisKKy8qIGZyZWUgdGhlIGJhZCBibG9ja3MgbGlua2VkIGxpc3QgKi8KK3ZvaWQKK2hmc19mcmVlX2JhZF9ibG9ja3NfbGlzdChIZnNQcml2YXRlTGlua0V4dGVudCogZmlyc3QpCit7CisJSGZzUHJpdmF0ZUxpbmtFeHRlbnQqCW5leHQ7CisKKwl3aGlsZSAoZmlyc3QpIHsKKwkJbmV4dCA9IGZpcnN0LT5uZXh0OworCQlwZWRfZnJlZSAoZmlyc3QpOworCQlmaXJzdCA9IG5leHQ7CisJfQorfQorCisvKiBUaGlzIGZ1bmN0aW9uIHJlYWRzIGJhZCBibG9ja3MgZXh0ZW50cyBpbiB0aGUgZXh0ZW50cyBmaWxlCisgICBhbmQgc3RvcmUgaXQgaW4gZi5zLiBzcGVjaWZpYyBkYXRhIG9mIGZzICovCitpbnQKK2hmc19yZWFkX2JhZF9ibG9ja3MgKGNvbnN0IFBlZEZpbGVTeXN0ZW0gKmZzKQoreworCUhmc1ByaXZhdGVGU0RhdGEqIAlwcml2X2RhdGEgPSAoSGZzUHJpdmF0ZUZTRGF0YSopCisJCQkJCQlmcy0+dHlwZV9zcGVjaWZpYzsKKworCWlmIChwcml2X2RhdGEtPmJhZF9ibG9ja3NfbG9hZGVkKQorCQlyZXR1cm4gMTsKKworCXsKKwl1aW50OF90CQkJcmVjb3JkW3NpemVvZiAoSGZzRXh0ZW50S2V5KSAKKwkJCQkJICAgICAgICsgc2l6ZW9mIChIZnNFeHREYXRhUmVjKV07CisJSGZzRXh0ZW50S2V5CQlzZWFyY2g7CisJSGZzRXh0ZW50S2V5KgkJcmV0X2tleSA9IChIZnNFeHRlbnRLZXkqKSByZWNvcmQ7CisJSGZzRXh0RGVzY3JpcHRvcioJcmV0X2NhY2hlID0gKEhmc0V4dERlc2NyaXB0b3IqKQorCQkJCQkgICAgIChyZWNvcmQgKyBzaXplb2YgKEhmc0V4dGVudEtleSkpOworCXVuc2lnbmVkIGludAkJYmxvY2ssIGxhc3Rfc3RhcnQsIGZpcnN0X3Bhc3MgPSAxOworCisJc2VhcmNoLmtleV9sZW5ndGggPSBzaXplb2YgKEhmc0V4dGVudEtleSkgLSAxOworCXNlYXJjaC50eXBlID0gSEZTX0RBVEFfRk9SSzsKKwlzZWFyY2guZmlsZV9JRCA9IFBFRF9DUFVfVE9fQkUzMiAoSEZTX0JBRF9CTE9DS19JRCk7CisKKwlsYXN0X3N0YXJ0ID0gLTE7IGJsb2NrID0gMDsKKwl3aGlsZSAoMSkgeworCQlpbnQgaTsKKworCQlzZWFyY2guc3RhcnQgPSBQRURfQ1BVX1RPX0JFMTYgKGJsb2NrKTsKKwkJaWYgKCFoZnNfYnRyZWVfc2VhcmNoIChwcml2X2RhdGEtPmV4dGVudF9maWxlLAorCQkJCSAgICAgICAoSGZzUHJpdmF0ZUdlbmVyaWNLZXkqKSAmc2VhcmNoLAorCQkJCSAgICAgICByZWNvcmQsIHNpemVvZiAocmVjb3JkKSwgTlVMTCkKKwkJICAgIHx8IHJldF9rZXktPmZpbGVfSUQgIT0gc2VhcmNoLmZpbGVfSUQKKwkJICAgIHx8IHJldF9rZXktPnR5cGUgIT0gc2VhcmNoLnR5cGUpIHsKKwkJCWlmIChmaXJzdF9wYXNzKQorCQkJCWJyZWFrOworCQkJZWxzZQorCQkJCWdvdG8gZXJyYmI7CisJCX0KKwkJaWYgKFBFRF9CRTE2X1RPX0NQVSAocmV0X2tleS0+c3RhcnQpID09IGxhc3Rfc3RhcnQpCisJCSAgICBicmVhazsKKworCQlsYXN0X3N0YXJ0ID0gUEVEX0JFMTZfVE9fQ1BVIChyZXRfa2V5LT5zdGFydCk7CisJCWZvciAoaSA9IDA7IGkgPCBIRlNfRVhUX05COyBpKyspIHsKKwkJCWlmIChyZXRfY2FjaGVbaV0uYmxvY2tfY291bnQpIHsKKwkJCQlIZnNQcml2YXRlTGlua0V4dGVudCoJbmV3X3h0ID0KKwkJCQkgICAoSGZzUHJpdmF0ZUxpbmtFeHRlbnQqKSBwZWRfbWFsbG9jICgKKwkJCQkJc2l6ZW9mIChIZnNQcml2YXRlTGlua0V4dGVudCkpOworCQkJCWlmICghbmV3X3h0KQorCQkJCQlnb3RvIGVycmJiOworCQkJCW5ld194dC0+bmV4dCA9IHByaXZfZGF0YS0+YmFkX2Jsb2Nrc194dGVudF9saXN0OworCQkJCW1lbWNweSgmKG5ld194dC0+ZXh0ZW50KSwgcmV0X2NhY2hlK2ksCisJCQkJCXNpemVvZiAoSGZzRXh0RGVzY3JpcHRvcikpOworCQkJCXByaXZfZGF0YS0+YmFkX2Jsb2Nrc194dGVudF9saXN0ID0gbmV3X3h0OworCQkJCXByaXZfZGF0YS0+YmFkX2Jsb2Nrc194dGVudF9uYisrOworCQkJCWJsb2NrICs9IFBFRF9CRTE2X1RPX0NQVSAoCisJCQkJCQlyZXRfY2FjaGVbaV0uYmxvY2tfY291bnQpOworCQkJfQorCQl9CisJCWZpcnN0X3Bhc3MgPSAwOworCX0KKworCXByaXZfZGF0YS0+YmFkX2Jsb2Nrc19sb2FkZWQgPSAxOworCXJldHVybiAxO30KKworZXJyYmI6CWhmc19mcmVlX2JhZF9ibG9ja3NfbGlzdChwcml2X2RhdGEtPmJhZF9ibG9ja3NfeHRlbnRfbGlzdCk7CisJcHJpdl9kYXRhLT5iYWRfYmxvY2tzX3h0ZW50X2xpc3Q9TlVMTDsKKwlwcml2X2RhdGEtPmJhZF9ibG9ja3NfeHRlbnRfbmI9MDsKKwlyZXR1cm4gMDsKK30KKworLyogVGhpcyBmdW5jdGlvbiBjaGVjayBpZiBmYmxvY2sgaXMgYSBiYWQgYmxvY2sgKi8KK2ludAoraGZzX2lzX2JhZF9ibG9jayAoY29uc3QgUGVkRmlsZVN5c3RlbSAqZnMsIHVuc2lnbmVkIGludCBmYmxvY2spCit7CisJSGZzUHJpdmF0ZUZTRGF0YSogCXByaXZfZGF0YSA9IChIZnNQcml2YXRlRlNEYXRhKikKKwkJCQkJCWZzLT50eXBlX3NwZWNpZmljOworCUhmc1ByaXZhdGVMaW5rRXh0ZW50Kgl3YWxrOworCisJZm9yICh3YWxrID0gcHJpdl9kYXRhLT5iYWRfYmxvY2tzX3h0ZW50X2xpc3Q7IHdhbGs7IHdhbGsgPSB3YWxrLT5uZXh0KSB7CisJCS8qIFdvbid0IGNvbXBpbGUgd2l0aG91dCB0aGUgc3RyYW5nZSBjYXN0ICEgZ2NjIGJ1ZyA/ICovCisJCS8qIG9yIG1heWJlIEMgc3VidGlsdGllcy4uLiAqLworCQlpZiAoKGZibG9jayA+PSBQRURfQkUxNl9UT19DUFUgKHdhbGstPmV4dGVudC5zdGFydF9ibG9jaykpICYmIAorCQkgICAgKGZibG9jayA8ICAodW5zaWduZWQgaW50KSAoUEVEX0JFMTZfVE9fQ1BVICgKKwkJCQkJCSAgICB3YWxrLT5leHRlbnQuc3RhcnRfYmxvY2spCisJCQkJCSAgICAgICArIFBFRF9CRTE2X1RPX0NQVSAoCisJCQkJCQkgICAgd2Fsay0+ZXh0ZW50LmJsb2NrX2NvdW50KSkpKQorCQkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgZmlyc3Qgc2VjdG9yIG9mIHRoZSBsYXN0IGZyZWUgYmxvY2sgb2YgYW4KKyAgIEhGUyB2b2x1bWUgd2UgY2FuIGdldCBhZnRlciBhIGhmc19wYWNrX2ZyZWVfc3BhY2VfZnJvbV9ibG9jayBjYWxsICovCisvKiBPbiBlcnJvciB0aGlzIGZ1bmN0aW9uIHJldHVybnMgMCAqLworUGVkU2VjdG9yCitoZnNfZ2V0X2VtcHR5X2VuZCAoY29uc3QgUGVkRmlsZVN5c3RlbSAqZnMpCit7CisJSGZzUHJpdmF0ZUZTRGF0YSogCXByaXZfZGF0YSA9IChIZnNQcml2YXRlRlNEYXRhKikKKwkJCQkJCWZzLT50eXBlX3NwZWNpZmljOworCUhmc01hc3RlckRpcmVjdG9yeUJsb2NrKiBtZGIgPSBwcml2X2RhdGEtPm1kYjsKKwlIZnNQcml2YXRlTGlua0V4dGVudCoJbGluazsKKwl1bnNpZ25lZCBpbnQJCWJsb2NrLCBsYXN0X2JhZCwgZW5kX2ZyZWVfYmxvY2tzOworCisJLyogZmluZCB0aGUgbmV4dCBibG9jayB0byB0aGUgbGFzdCBiYWQgYmxvY2sgb2YgdGhlIHZvbHVtZSAqLworCWlmICghaGZzX3JlYWRfYmFkX2Jsb2NrcyAoZnMpKQorCQlyZXR1cm4gMDsKKworCWxhc3RfYmFkID0gMDsKKwlmb3IgKGxpbmsgPSBwcml2X2RhdGEtPmJhZF9ibG9ja3NfeHRlbnRfbGlzdDsgbGluazsgbGluayA9IGxpbmstPm5leHQpIHsKKwkJaWYgKCh1bnNpZ25lZCBpbnQpIFBFRF9CRTE2X1RPX0NQVSAobGluay0+ZXh0ZW50LnN0YXJ0X2Jsb2NrKQorCQkgICAgKyBQRURfQkUxNl9UT19DUFUgKGxpbmstPmV4dGVudC5ibG9ja19jb3VudCkgPiBsYXN0X2JhZCkKKwkJCWxhc3RfYmFkID0gUEVEX0JFMTZfVE9fQ1BVIChsaW5rLT5leHRlbnQuc3RhcnRfYmxvY2spCisJCQkgICAgICAgICAgICsgUEVEX0JFMTZfVE9fQ1BVIChsaW5rLT5leHRlbnQuYmxvY2tfY291bnQpOworCX0KKworCS8qIENvdW50IHRoZSBmcmVlIGJsb2NrcyBmcm9tIGxhc3RfYmFkIHRvIHRoZSBlbmQgb2YgdGhlIHZvbHVtZSAqLworCWVuZF9mcmVlX2Jsb2NrcyA9IDA7CisJZm9yIChibG9jayA9IGxhc3RfYmFkOworCSAgICAgYmxvY2sgPCBQRURfQkUxNl9UT19DUFUgKG1kYi0+dG90YWxfYmxvY2tzKTsKKwkgICAgIGJsb2NrKyspIHsKKwkJaWYgKCFUU1RfQkxPQ19PQ0NVUEFUSU9OKHByaXZfZGF0YS0+YWxsb2NfbWFwLGJsb2NrKSkKKwkJCWVuZF9mcmVlX2Jsb2NrcysrOworCX0KKworCS8qIENhbGN1bGF0ZSB0aGUgYmxvY2sgdGhhdCB3aWxsIGJ5IHRoZSBmaXJzdCBmcmVlIGF0IHRoZQorCSAgIGVuZCBvZiB0aGUgdm9sdW1lICovCisJYmxvY2sgPSBQRURfQkUxNl9UT19DUFUgKG1kYi0+dG90YWxfYmxvY2tzKSAtIGVuZF9mcmVlX2Jsb2NrczsKKworCXJldHVybiAoUGVkU2VjdG9yKSBQRURfQkUxNl9UT19DUFUgKG1kYi0+c3RhcnRfYmxvY2spCisJCSsgKFBlZFNlY3RvcikgYmxvY2sgKiAoUEVEX0JFMzJfVE9fQ1BVIChtZGItPmJsb2NrX3NpemUpCisJCQkJICAgICAgIC8gUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQpOworfQorCisvKiByZXR1cm4gdGhlIGJsb2NrIHdoaWNoIHNob3VsZCBiZSB1c2VkIHRvIHBhY2sgZGF0YSB0byBoYXZlIGF0CisgICBsZWFzdCBmcmVlIGZibG9jayBibG9ja3MgYXQgdGhlIGVuZCBvZiB0aGUgdm9sdW1lICovCit1bnNpZ25lZCBpbnQKK2hmc19maW5kX3N0YXJ0X3BhY2sgKGNvbnN0IFBlZEZpbGVTeXN0ZW0gKmZzLCB1bnNpZ25lZCBpbnQgZmJsb2NrKQoreworCUhmc1ByaXZhdGVGU0RhdGEqIAlwcml2X2RhdGEgPSAoSGZzUHJpdmF0ZUZTRGF0YSopCisJCQkJCQlmcy0+dHlwZV9zcGVjaWZpYzsKKwl1bnNpZ25lZCBpbnQJCWJsb2NrOworCisJZm9yIChibG9jayA9IFBFRF9CRTE2X1RPX0NQVSAocHJpdl9kYXRhLT5tZGItPnRvdGFsX2Jsb2NrcykgLSAxOworCSAgICAgYmxvY2sgJiYgZmJsb2NrOworCSAgICAgYmxvY2stLSkgeworCQlpZiAoIVRTVF9CTE9DX09DQ1VQQVRJT04ocHJpdl9kYXRhLT5hbGxvY19tYXAsYmxvY2spKQorCQkJZmJsb2NrLS07CisJfQorCisJd2hpbGUgKGJsb2NrICYmICFUU1RfQkxPQ19PQ0NVUEFUSU9OKHByaXZfZGF0YS0+YWxsb2NfbWFwLGJsb2NrKSkKKwkJYmxvY2stLTsKKwlpZiAoVFNUX0JMT0NfT0NDVVBBVElPTihwcml2X2RhdGEtPmFsbG9jX21hcCxibG9jaykpCisJCWJsb2NrKys7CisKKwlyZXR1cm4gYmxvY2s7Cit9CisKKyNlbmRpZiAvKiAhRElTQ09WRVJfT05MWSAqLwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9oZnMvYWR2ZnMuaCBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvaGZzL2FkdmZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUyM2ZiNgotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvaGZzL2FkdmZzLmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAgICBsaWJwYXJ0ZWQgLSBhIGxpYnJhcnkgZm9yIG1hbmlwdWxhdGluZyBkaXNrIHBhcnRpdGlvbnMKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCisqLworCisjaWZuZGVmIF9BRFZGU19ICisjZGVmaW5lIF9BRFZGU19ICisKKyNpbmNsdWRlIDxwYXJ0ZWQvcGFydGVkLmg+CisjaW5jbHVkZSA8cGFydGVkL2VuZGlhbi5oPgorI2luY2x1ZGUgPHBhcnRlZC9kZWJ1Zy5oPgorCisjaW5jbHVkZSAiaGZzLmgiCisKK2ludAoraGZzX2J0cmVlX3NlYXJjaCAoSGZzUHJpdmF0ZUZpbGUqIGJfdHJlZV9maWxlLCBIZnNQcml2YXRlR2VuZXJpY0tleSoga2V5LAorCQkgIHZvaWQgKnJlY29yZF9vdXQsIHVuc2lnbmVkIGludCByZWNvcmRfc2l6ZSwKKwkJICBIZnNDUHJpdmF0ZUxlYWZSZWMqIHJlY29yZF9yZWYpOworCit2b2lkCitoZnNfZnJlZV9iYWRfYmxvY2tzX2xpc3QoSGZzUHJpdmF0ZUxpbmtFeHRlbnQqIGZpcnN0KTsKKworaW50CitoZnNfcmVhZF9iYWRfYmxvY2tzIChjb25zdCBQZWRGaWxlU3lzdGVtICpmcyk7CisKK2ludAoraGZzX2lzX2JhZF9ibG9jayAoY29uc3QgUGVkRmlsZVN5c3RlbSAqZnMsIHVuc2lnbmVkIGludCBmYmxvY2spOworCitQZWRTZWN0b3IKK2hmc19nZXRfZW1wdHlfZW5kIChjb25zdCBQZWRGaWxlU3lzdGVtICpmcyk7CisKK3Vuc2lnbmVkIGludAoraGZzX2ZpbmRfc3RhcnRfcGFjayAoY29uc3QgUGVkRmlsZVN5c3RlbSAqZnMsIHVuc2lnbmVkIGludCBmYmxvY2spOworCisjZW5kaWYgLyogX0FEVkZTX0ggKi8KZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvaGZzL2FkdmZzX3BsdXMuYyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvaGZzL2FkdmZzX3BsdXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmVhZTU5Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9oZnMvYWR2ZnNfcGx1cy5jCkBAIC0wLDAgKzEsMzg0IEBACisvKgorICAgIGxpYnBhcnRlZCAtIGEgbGlicmFyeSBmb3IgbWFuaXB1bGF0aW5nIGRpc2sgcGFydGl0aW9ucworICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKKyovCisKKyNpZm5kZWYgRElTQ09WRVJfT05MWQorCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpbmNsdWRlIDxwYXJ0ZWQvcGFydGVkLmg+CisjaW5jbHVkZSA8cGFydGVkL2VuZGlhbi5oPgorI2luY2x1ZGUgPHBhcnRlZC9kZWJ1Zy5oPgorCisjaWYgRU5BQkxFX05MUworIyAgaW5jbHVkZSA8bGliaW50bC5oPgorIyAgZGVmaW5lIF8oU3RyaW5nKSBkZ2V0dGV4dCAoUEFDS0FHRSwgU3RyaW5nKQorI2Vsc2UKKyMgIGRlZmluZSBfKFN0cmluZykgKFN0cmluZykKKyNlbmRpZiAvKiBFTkFCTEVfTkxTICovCisKKyNpbmNsdWRlICJoZnMuaCIKKyNpbmNsdWRlICJhZHZmcy5oIgorI2luY2x1ZGUgImZpbGVfcGx1cy5oIgorCisjaW5jbHVkZSAiYWR2ZnNfcGx1cy5oIgorCisvKiAtIGlmIGEgPCBiLCAwIGlmIGEgPT0gYiwgKyBpZiBhID4gYiAqLworLyogQ29tcGFyYWlzb24gaXMgZG9uZSBpbiB0aGUgZm9sbG93aW5nIG9yZGVyIDogKi8KKy8qIENOSUQsIHRoZW4gZm9yayB0eXBlLCB0aGVuIHN0YXJ0IGJsb2NrICovCitzdGF0aWMgaW50CitoZnNwbHVzX2V4dGVudF9rZXlfY21wKEhmc1BQcml2YXRlR2VuZXJpY0tleSogYSwgSGZzUFByaXZhdGVHZW5lcmljS2V5KiBiKQoreworCUhmc1BFeHRlbnRLZXkqIGtleTEgPSAoSGZzUEV4dGVudEtleSopIGE7CisJSGZzUEV4dGVudEtleSoga2V5MiA9IChIZnNQRXh0ZW50S2V5KikgYjsKKworCWlmIChrZXkxLT5maWxlX0lEICE9IGtleTItPmZpbGVfSUQpCisJCXJldHVybiBQRURfQkUzMl9UT19DUFUoa2V5MS0+ZmlsZV9JRCkgPAorCQkgICAgICAgUEVEX0JFMzJfVE9fQ1BVKGtleTItPmZpbGVfSUQpID8gCisJCQkJLTEgOiArMTsKKworCWlmIChrZXkxLT50eXBlICE9IGtleTItPnR5cGUpCisJCXJldHVybiAoaW50KShrZXkxLT50eXBlIC0ga2V5Mi0+dHlwZSk7CisKKwlpZiAoa2V5MS0+c3RhcnQgPT0ga2V5Mi0+c3RhcnQpCisJCXJldHVybiAwOworCXJldHVybiBQRURfQkUzMl9UT19DUFUoa2V5MS0+c3RhcnQpIDwgCisJICAgICAgIFBFRF9CRTMyX1RPX0NQVShrZXkyLT5zdGFydCkgPworCQkJLTEgOiArMTsKK30KKworLyogZG8gYSBCLVRyZWUgbG9va3VwICovCisvKiByZWFkIHRoZSBmaXJzdCByZWNvcmQgaW1tZWRpYXRseSBpbmZlcmlvciBvciBlZ2FsIHRvIHRoZSBnaXZlbiBrZXkgKi8KKy8qIHJldHVybiAwIG9uIGVycm9yICovCisvKiByZWNvcmRfb3V0IF9tdXN0XyBiZSBsYXJnZSBlbm91Z2ggdG8gcmVjZWl2ZSB0aGUgd2hvbGUgcmVjb3JkIChrZXkgKyBkYXRhKSAqLworLyogV0FSTklORyA6IHRoZSBzZWFyY2ggZnVuY3Rpb24gY2FsbGVkIG9ubHkgaGFuZGxlIEV4dGVudHMgQlRyZWUgKi8KKy8qCSAgICAgc28gbW9kaWZ5IHRoaXMgZnVuY3Rpb24gaWYgeW91IHdhbnQgdG8gZG8gbG9va3VwIGluICovCisvKiAJICAgICBvdGhlciBCVHJlZXMgaGFzIHdlbGwgKi8KK2ludAoraGZzcGx1c19idHJlZV9zZWFyY2ggKEhmc1BQcml2YXRlRmlsZSogYl90cmVlX2ZpbGUsIEhmc1BQcml2YXRlR2VuZXJpY0tleSoga2V5LAorCQkgICAgICB2b2lkICpyZWNvcmRfb3V0LCB1bnNpZ25lZCBpbnQgcmVjb3JkX3NpemUsCisJCSAgICAgIEhmc0NQcml2YXRlTGVhZlJlYyogcmVjb3JkX3JlZikKK3sKKwl1aW50OF90CQkJbm9kZV8xW1BFRF9TRUNUT1JfU0laRV9ERUZBVUxUXTsKKwl1aW50OF90KgkJbm9kZTsKKwlIZnNQSGVhZGVyUmVjb3JkKgloZWFkZXI7CisJSGZzUE5vZGVEZXNjcmlwdG9yKglkZXNjID0gKEhmc1BOb2RlRGVzY3JpcHRvciopIG5vZGVfMTsKKwlIZnNQUHJpdmF0ZUdlbmVyaWNLZXkqCXJlY29yZF9rZXkgPSBOVUxMOworCXVuc2lnbmVkIGludAkJbm9kZV9udW1iZXIsIHJlY29yZF9udW1iZXIsIHNpemUsIGJzaXplOworCWludAkJCWk7CisKKwkvKiBSZWFkIHRoZSBoZWFkZXIgbm9kZSAqLworCWlmICghaGZzcGx1c19maWxlX3JlYWRfc2VjdG9yKGJfdHJlZV9maWxlLCBub2RlXzEsIDApKQorCQlyZXR1cm4gMDsKKwloZWFkZXIgPSAoSGZzUEhlYWRlclJlY29yZCopIChub2RlXzEgKyBIRlNfRklSU1RfUkVDKTsKKworCS8qIEdldCB0aGUgbm9kZSBudW1iZXIgb2YgdGhlIHJvb3QgKi8KKwlub2RlX251bWJlciA9IFBFRF9CRTMyX1RPX0NQVSAoaGVhZGVyLT5yb290X25vZGUpOworCWlmICghbm9kZV9udW1iZXIpCisJCXJldHVybiAwOworCisJLyogR2V0IHRoZSBzaXplIG9mIGEgbm9kZSBpbiBzZWN0b3JzIGFuZCBhbGxvY2F0ZSBidWZmZXIgKi8KKwlzaXplID0gKGJzaXplID0gUEVEX0JFMTZfVE9fQ1BVIChoZWFkZXItPm5vZGVfc2l6ZSkpIC8gUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQ7CisJbm9kZSA9ICh1aW50OF90KikgcGVkX21hbGxvYyAoYnNpemUpOworCWlmICghbm9kZSkKKwkJcmV0dXJuIDA7CisJZGVzYyA9IChIZnNQTm9kZURlc2NyaXB0b3IqKSBub2RlOworCisJLyogUmVhZCB0aGUgcm9vdCBub2RlICovCisJaWYgKCFoZnNwbHVzX2ZpbGVfcmVhZCAoYl90cmVlX2ZpbGUsIG5vZGUsCisJCQkJKFBlZFNlY3Rvcikgbm9kZV9udW1iZXIgKiBzaXplLCBzaXplKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBGb2xsb3cgdGhlIHdoaXRlIHJhYmJpdCAqLworCXdoaWxlICgxKSB7CisJCXJlY29yZF9udW1iZXIgPSBQRURfQkUxNl9UT19DUFUgKGRlc2MtPnJlY19uYik7CisJCWZvciAoaSA9IHJlY29yZF9udW1iZXI7IGk7IGktLSkgeworCQkJcmVjb3JkX2tleSA9IChIZnNQUHJpdmF0ZUdlbmVyaWNLZXkqKQorCQkJICAgIChub2RlICsgUEVEX0JFMTZfVE9fQ1BVKCooKHVpbnQxNl90ICopCisJCQkJCShub2RlKyhic2l6ZSAtIDIqaSkpKSkpOworCQkJLyogY2hlY2sgZm9yIG9idmlvdXMgZXJyb3IgaW4gRlMgKi8KKwkJCWlmICgoKHVpbnQ4X3QqKXJlY29yZF9rZXkgLSBub2RlIDwgSEZTX0ZJUlNUX1JFQykKKwkJCSAgICB8fCAoKHVpbnQ4X3QqKXJlY29yZF9rZXkgLSBub2RlCisJCQkJPj0gKHNpZ25lZClic2l6ZQorCQkJCSAgIC0gMiAqIChzaWduZWQpKHJlY29yZF9udW1iZXIrMSkpKSB7CisJCQkJcGVkX2V4Y2VwdGlvbl90aHJvdyAoCisJCQkJCVBFRF9FWENFUFRJT05fRVJST1IsCisJCQkJCVBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJCQlfKCJUaGUgZmlsZSBzeXN0ZW0gY29udGFpbnMgZXJyb3JzLiIpKTsKKwkJCQlwZWRfZnJlZSAobm9kZSk7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQlpZiAoaGZzcGx1c19leHRlbnRfa2V5X2NtcChyZWNvcmRfa2V5LCBrZXkpIDw9IDApCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKCFpKSB7IHBlZF9mcmVlIChub2RlKTsgcmV0dXJuIDA7IH0KKwkJaWYgKGRlc2MtPnR5cGUgPT0gSEZTX0lEWF9OT0RFKSB7CisJCQl1bnNpZ25lZCBpbnQgCXNraXA7CisKKwkJCXNraXAgPSAoIDIgKyBQRURfQkUxNl9UT19DUFUgKHJlY29yZF9rZXktPmtleV9sZW5ndGgpCisJCQkgICAgICAgICArIDEgKSAmIH4xOworCQkJbm9kZV9udW1iZXIgPSBQRURfQkUzMl9UT19DUFUgKCooKHVpbnQzMl90ICopCisJCQkJCSgoKHVpbnQ4X3QgKikgcmVjb3JkX2tleSkgKyBza2lwKSkpOworCQkJaWYgKCFoZnNwbHVzX2ZpbGVfcmVhZChiX3RyZWVfZmlsZSwgbm9kZSwKKwkJCQkJICAgICAgIChQZWRTZWN0b3IpIG5vZGVfbnVtYmVyICogc2l6ZSwKKwkJCQkJICAgICAgIHNpemUpKSB7CisJCQkJcGVkX2ZyZWUgKG5vZGUpOworCQkJCXJldHVybiAwOworCQkJfQorCQl9IGVsc2UgCisJCQlicmVhazsKKwl9CisKKwkvKiBjb3B5IHRoZSByZXN1bHQgaWYgbmVlZGVkICovCisJaWYgKHJlY29yZF9zaXplKQorCQltZW1jcHkgKHJlY29yZF9vdXQsIHJlY29yZF9rZXksIHJlY29yZF9zaXplKTsKKworCS8qIHNlbmQgcmVjb3JkIHJlZmVyZW5jZSBpZiBuZWVkZWQgKi8KKwlpZiAocmVjb3JkX3JlZikgeworCQlyZWNvcmRfcmVmLT5ub2RlX3NpemUgPSBzaXplOwkvKiBpbiBzZWN0b3JzICovCisJCXJlY29yZF9yZWYtPm5vZGVfbnVtYmVyID0gbm9kZV9udW1iZXI7CisJCXJlY29yZF9yZWYtPnJlY29yZF9wb3MgPSAodWludDhfdCopcmVjb3JkX2tleSAtIG5vZGU7CisJCXJlY29yZF9yZWYtPnJlY29yZF9udW1iZXIgPSBpOworCX0KKworCS8qIHN1Y2Nlc3MgKi8KKwlwZWRfZnJlZSAobm9kZSk7CisJcmV0dXJuIDE7Cit9CisKKy8qIGZyZWUgdGhlIGJhZCBibG9ja3MgbGlua2VkIGxpc3QgKi8KK3ZvaWQKK2hmc3BsdXNfZnJlZV9iYWRfYmxvY2tzX2xpc3QoSGZzUFByaXZhdGVMaW5rRXh0ZW50KiBmaXJzdCkKK3sKKwlIZnNQUHJpdmF0ZUxpbmtFeHRlbnQqCW5leHQ7CisKKwl3aGlsZSAoZmlyc3QpIHsKKwkJbmV4dCA9IGZpcnN0LT5uZXh0OworCQlwZWRfZnJlZSAoZmlyc3QpOworCQlmaXJzdCA9IG5leHQ7CisJfQorfQorCisvKiBUaGlzIGZ1bmN0aW9uIHJlYWRzIGJhZCBibG9ja3MgZXh0ZW50cyBpbiB0aGUgZXh0ZW50cyBmaWxlCisgICBhbmQgc3RvcmUgaXQgaW4gZi5zLiBzcGVjaWZpYyBkYXRhIG9mIGZzICovCitpbnQKK2hmc3BsdXNfcmVhZF9iYWRfYmxvY2tzIChjb25zdCBQZWRGaWxlU3lzdGVtICpmcykKK3sKKwlIZnNQUHJpdmF0ZUZTRGF0YSogCXByaXZfZGF0YSA9IChIZnNQUHJpdmF0ZUZTRGF0YSopCisJCQkJCQkgICAgZnMtPnR5cGVfc3BlY2lmaWM7CisKKwlpZiAocHJpdl9kYXRhLT5iYWRfYmxvY2tzX2xvYWRlZCkKKwkJcmV0dXJuIDE7CisKKwl7CisJdWludDhfdAkJCXJlY29yZFtzaXplb2YgKEhmc1BFeHRlbnRLZXkpCisJCQkJICAgICAgICsgc2l6ZW9mIChIZnNQRXh0RGF0YVJlYyldOworCUhmc1BFeHRlbnRLZXkJCXNlYXJjaDsKKwlIZnNQRXh0ZW50S2V5KgkJcmV0X2tleSA9IChIZnNQRXh0ZW50S2V5KikgcmVjb3JkOworCUhmc1BFeHREZXNjcmlwdG9yKglyZXRfY2FjaGUgPSAoSGZzUEV4dERlc2NyaXB0b3IqKQorCQkJCSAgICAocmVjb3JkICsgc2l6ZW9mIChIZnNQRXh0ZW50S2V5KSk7CisJaW50CQkJYmxvY2ssIGZpcnN0X3Bhc3MgPSAxOworCXVuc2lnbmVkIGludAkJbGFzdF9zdGFydDsKKworCXNlYXJjaC5rZXlfbGVuZ3RoID0gc2l6ZW9mIChIZnNFeHRlbnRLZXkpIC0gMjsKKwlzZWFyY2gudHlwZSA9IEhGU19EQVRBX0ZPUks7CisJc2VhcmNoLnBhZCA9IDA7CisJc2VhcmNoLmZpbGVfSUQgPSBQRURfQ1BVX1RPX0JFMzIgKEhGU19CQURfQkxPQ0tfSUQpOworCisJbGFzdF9zdGFydCA9IC0xOyBibG9jayA9IDA7CisJd2hpbGUgKDEpIHsKKwkJaW50IGk7CisKKwkJc2VhcmNoLnN0YXJ0ID0gUEVEX0NQVV9UT19CRTMyIChibG9jayk7CisJCWlmICghaGZzcGx1c19idHJlZV9zZWFyY2ggKHByaXZfZGF0YS0+ZXh0ZW50c19maWxlLAorCQkJCQkgICAoSGZzUFByaXZhdGVHZW5lcmljS2V5KikgJnNlYXJjaCwKKwkJCQkJICAgcmVjb3JkLCBzaXplb2YgKHJlY29yZCksIE5VTEwpCisJCSAgICB8fCByZXRfa2V5LT5maWxlX0lEICE9IHNlYXJjaC5maWxlX0lECisJCSAgICB8fCByZXRfa2V5LT50eXBlICE9IHNlYXJjaC50eXBlKSB7CisJCQlpZiAoZmlyc3RfcGFzcykKKwkJCQlicmVhazsKKwkJCWVsc2UKKwkJCQlnb3RvIGVycmJicDsKKwkJfQorCQlpZiAoUEVEX0JFMzJfVE9fQ1BVIChyZXRfa2V5LT5zdGFydCkgPT0gbGFzdF9zdGFydCkKKwkJCWJyZWFrOworCisJCWxhc3Rfc3RhcnQgPSBQRURfQkUzMl9UT19DUFUgKHJldF9rZXktPnN0YXJ0KTsKKwkJZm9yIChpID0gMDsgaSA8IEhGU1BfRVhUX05COyBpKyspIHsKKwkJCWlmIChyZXRfY2FjaGVbaV0uYmxvY2tfY291bnQpIHsKKwkJCQlIZnNQUHJpdmF0ZUxpbmtFeHRlbnQqCW5ld194dCA9CisJCQkJICAoSGZzUFByaXZhdGVMaW5rRXh0ZW50KikgcGVkX21hbGxvYyAoCisJCQkJICAgIHNpemVvZiAoSGZzUFByaXZhdGVMaW5rRXh0ZW50KSk7CisJCQkJaWYgKCFuZXdfeHQpCisJCQkJCWdvdG8gZXJyYmJwOworCQkJCW5ld194dC0+bmV4dCA9IHByaXZfZGF0YS0+YmFkX2Jsb2Nrc194dGVudF9saXN0OworCQkJCW1lbWNweSAoJihuZXdfeHQtPmV4dGVudCksIHJldF9jYWNoZStpLAorCQkJCQlzaXplb2YgKEhmc1BFeHREZXNjcmlwdG9yKSk7CisJCQkJcHJpdl9kYXRhLT5iYWRfYmxvY2tzX3h0ZW50X2xpc3QgPSBuZXdfeHQ7CisJCQkJcHJpdl9kYXRhLT5iYWRfYmxvY2tzX3h0ZW50X25iKys7CisJCQkJYmxvY2sgKz0gUEVEX0JFMzJfVE9fQ1BVICgKKwkJCQkJCXJldF9jYWNoZVtpXS5ibG9ja19jb3VudCk7CisJCQl9CisJCX0KKwkJZmlyc3RfcGFzcyA9IDA7CisJfQorCisJcHJpdl9kYXRhLT5iYWRfYmxvY2tzX2xvYWRlZCA9IDE7CisJcmV0dXJuIDE7fQorCitlcnJiYnA6IGhmc3BsdXNfZnJlZV9iYWRfYmxvY2tzX2xpc3QocHJpdl9kYXRhLT5iYWRfYmxvY2tzX3h0ZW50X2xpc3QpOworCXByaXZfZGF0YS0+YmFkX2Jsb2Nrc194dGVudF9saXN0PU5VTEw7CisJcHJpdl9kYXRhLT5iYWRfYmxvY2tzX3h0ZW50X25iPTA7CisJcmV0dXJuIDA7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gY2hlY2sgaWYgZmJsb2NrIGlzIGEgYmFkIGJsb2NrICovCitpbnQKK2hmc3BsdXNfaXNfYmFkX2Jsb2NrIChjb25zdCBQZWRGaWxlU3lzdGVtICpmcywgdW5zaWduZWQgaW50IGZibG9jaykKK3sKKwlIZnNQUHJpdmF0ZUZTRGF0YSogCXByaXZfZGF0YSA9IChIZnNQUHJpdmF0ZUZTRGF0YSopCisJCQkJCQlmcy0+dHlwZV9zcGVjaWZpYzsKKwlIZnNQUHJpdmF0ZUxpbmtFeHRlbnQqCXdhbGs7CisKKwlmb3IgKHdhbGsgPSBwcml2X2RhdGEtPmJhZF9ibG9ja3NfeHRlbnRfbGlzdDsgd2Fsazsgd2FsayA9IHdhbGstPm5leHQpIHsKKwkJLyogV29uJ3QgY29tcGlsZSB3aXRob3V0IHRoZSBzdHJhbmdlIGNhc3QgISBnY2MgYnVnID8gKi8KKwkJLyogb3IgbWF5YmUgQyBzdWJ0aWx0aWVzLi4uICovCisJCWlmICgoZmJsb2NrID49IFBFRF9CRTMyX1RPX0NQVSAod2Fsay0+ZXh0ZW50LnN0YXJ0X2Jsb2NrKSkgJiYgCisJCSAgICAoZmJsb2NrIDwgICh1bnNpZ25lZCBpbnQpKFBFRF9CRTMyX1RPX0NQVSAoCisJCQkJCQl3YWxrLT5leHRlbnQuc3RhcnRfYmxvY2spCisJCQkgICAgICAgKyBQRURfQkUzMl9UT19DUFUgKHdhbGstPmV4dGVudC5ibG9ja19jb3VudCkpKSkKKwkJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGZpcnN0IHNlY3RvciBvZiB0aGUgbGFzdCBmcmVlIGJsb2NrIG9mCisgICBhbiBIRlMrIHZvbHVtZSB3ZSBjYW4gZ2V0IGFmdGVyIGEgaGZzcGx1c19wYWNrX2ZyZWVfc3BhY2VfZnJvbV9ibG9jayBjYWxsICovCitQZWRTZWN0b3IKK2hmc3BsdXNfZ2V0X2VtcHR5X2VuZCAoY29uc3QgUGVkRmlsZVN5c3RlbSAqZnMpCit7CisJSGZzUFByaXZhdGVGU0RhdGEqIAlwcml2X2RhdGEgPSAoSGZzUFByaXZhdGVGU0RhdGEqKQorCQkJCQkJICAgIGZzLT50eXBlX3NwZWNpZmljOworCUhmc1BWb2x1bWVIZWFkZXIqIAl2aCA9IHByaXZfZGF0YS0+dmg7CisJSGZzUFByaXZhdGVMaW5rRXh0ZW50KglsaW5rOworCXVuc2lnbmVkIGludAkJYmxvY2ssIGxhc3RfYmFkLCBlbmRfZnJlZV9ibG9ja3M7CisKKwkvKiBmaW5kIHRoZSBuZXh0IGJsb2NrIHRvIHRoZSBsYXN0IGJhZCBibG9jayBvZiB0aGUgdm9sdW1lICovCisJaWYgKCFoZnNwbHVzX3JlYWRfYmFkX2Jsb2NrcyAoZnMpKSB7CisJCXBlZF9leGNlcHRpb25fdGhyb3cgKAorCQkJUEVEX0VYQ0VQVElPTl9FUlJPUiwKKwkJCVBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJXygiQmFkIGJsb2NrcyBjb3VsZCBub3QgYmUgcmVhZC4iKSk7CisJCXJldHVybiAwOworCX0KKworCWxhc3RfYmFkID0gMDsKKwlmb3IgKGxpbmsgPSBwcml2X2RhdGEtPmJhZF9ibG9ja3NfeHRlbnRfbGlzdDsgbGluazsgbGluayA9IGxpbmstPm5leHQpIHsKKwkJaWYgKCh1bnNpZ25lZCBpbnQpIFBFRF9CRTMyX1RPX0NQVSAobGluay0+ZXh0ZW50LnN0YXJ0X2Jsb2NrKQorCQkgICAgKyBQRURfQkUzMl9UT19DUFUgKGxpbmstPmV4dGVudC5ibG9ja19jb3VudCkgPiBsYXN0X2JhZCkKKwkJCWxhc3RfYmFkID0gUEVEX0JFMzJfVE9fQ1BVIChsaW5rLT5leHRlbnQuc3RhcnRfYmxvY2spCisJCQkgICAgICAgICAgICsgUEVEX0JFMzJfVE9fQ1BVIChsaW5rLT5leHRlbnQuYmxvY2tfY291bnQpOworCX0KKworCS8qIENvdW50IHRoZSBmcmVlIGJsb2NrcyBmcm9tIGxhc3RfYmFkIHRvIHRoZSBlbmQgb2YgdGhlIHZvbHVtZSAqLworCWVuZF9mcmVlX2Jsb2NrcyA9IDA7CisJZm9yIChibG9jayA9IGxhc3RfYmFkOworCSAgICAgYmxvY2sgPCBQRURfQkUzMl9UT19DUFUgKHZoLT50b3RhbF9ibG9ja3MpOworCSAgICAgYmxvY2srKykgeworCQlpZiAoIVRTVF9CTE9DX09DQ1VQQVRJT04ocHJpdl9kYXRhLT5hbGxvY19tYXAsYmxvY2spKQorCQkJZW5kX2ZyZWVfYmxvY2tzKys7CisJfQorCisJLyogQ2FsY3VsYXRlIHRoZSBibG9jayB0aGF0IHdpbGwgYnkgdGhlIGZpcnN0IGZyZWUgYXQKKwkgICB0aGUgZW5kIG9mIHRoZSB2b2x1bWUgKi8KKwlibG9jayA9IFBFRF9CRTMyX1RPX0NQVSAodmgtPnRvdGFsX2Jsb2NrcykgLSBlbmRfZnJlZV9ibG9ja3M7CisKKwlyZXR1cm4gKFBlZFNlY3RvcikgYmxvY2sgKiAoIFBFRF9CRTMyX1RPX0NQVSAodmgtPmJsb2NrX3NpemUpCisJCQkJICAgICAvIFBFRF9TRUNUT1JfU0laRV9ERUZBVUxUICk7Cit9CisKKy8qIE9uIGVycm9yLCByZXR1cm5zIDAgKi8KK1BlZFNlY3RvcgoraGZzcGx1c19nZXRfbWluX3NpemUgKGNvbnN0IFBlZEZpbGVTeXN0ZW0gKmZzKQoreworCUhmc1BQcml2YXRlRlNEYXRhKiAJcHJpdl9kYXRhID0gKEhmc1BQcml2YXRlRlNEYXRhKikKKwkJCQkJCWZzLT50eXBlX3NwZWNpZmljOworCVBlZFNlY3RvcgkJbWluX3NpemU7CisKKwkvKiBkb24ndCBuZWVkIHRvIGFkZCBhbnl0aGluZyBiZWNhdXNlIGV2ZXJ5IHNlY3RvcgorCSAgIGNhbiBiZSBwYXJ0IG9mIGFsbG9jYXRpb24gYmxvY2tzIGluIEhGUyssIGFuZAorCSAgIHRoZSBsYXN0IGJsb2NrIF9tdXN0XyBiZSByZXNlcnZlZCAqLworCW1pbl9zaXplID0gaGZzcGx1c19nZXRfZW1wdHlfZW5kKGZzKTsKKwlpZiAoIW1pbl9zaXplKSByZXR1cm4gMDsKKworCWlmIChwcml2X2RhdGEtPndyYXBwZXIpIHsKKwkJSGZzUHJpdmF0ZUZTRGF0YSogCWhmc19wcml2X2RhdGEgPSAoSGZzUHJpdmF0ZUZTRGF0YSopCisJCQkJCSAgICBwcml2X2RhdGEtPndyYXBwZXItPnR5cGVfc3BlY2lmaWM7CisJCXVuc2lnbmVkIGludAkJaGZzX3NlY3RfYmxvY2s7CisJCVBlZFNlY3RvcgkJaGdlZTsKKwkJaGZzX3NlY3RfYmxvY2sgPQorCQkgICAgUEVEX0JFMzJfVE9fQ1BVIChoZnNfcHJpdl9kYXRhLT5tZGItPmJsb2NrX3NpemUpCisJCSAgICAvIFBFRF9TRUNUT1JfU0laRV9ERUZBVUxUOworCQkvKiAKKwkJICogaWYgaGZzKyBpcyBlbWJlZGRlZCBpbiBhbiBoZnMgd3JhcHBlciB0aGVuIHRoZSBuZXcgc2l6ZSBpcyA6CisJCSAqIHRoZSBuZXcgc2l6ZSBvZiB0aGUgaGZzKyB2b2x1bWUgcm91bmRlZCB1cCB0byB0aGUgc2l6ZSAKKwkJICogICAgIG9mIGhmcyBibG9ja3MKKwkJICogKyB0aGUgbWluaW11bSBzaXplIG9mIHRoZSBoZnMgd3JhcHBlciB3aXRob3V0IGFueSBoZnMrCisJCSAqICAgICBtb2RpZmljYXRpb24KKwkJICogLSB0aGUgY3VycmVudCBzaXplIG9mIHRoZSBoZnMrIHZvbHVtZSBpbiB0aGUgaGZzIHdyYXBwZXIKKwkJICovCisJCWhnZWUgPSBoZnNfZ2V0X2VtcHR5X2VuZChwcml2X2RhdGEtPndyYXBwZXIpOworCQlpZiAoIWhnZWUpIHJldHVybiAwOworCQltaW5fc2l6ZSA9ICgobWluX3NpemUgKyBoZnNfc2VjdF9ibG9jayAtIDEpIC8gaGZzX3NlY3RfYmxvY2spCisJCQkgICAqIGhmc19zZWN0X2Jsb2NrCisJCQkgKyBoZ2VlICsgMgorCQkJIC0gKFBlZFNlY3RvcikgUEVEX0JFMTZfVE9fQ1BVICggaGZzX3ByaXZfZGF0YS0+bWRiCisJCQkJCQkJLT5vbGRfbmV3LmVtYmVkZGVkCisJCQkJCQkJLmxvY2F0aW9uLmJsb2NrX2NvdW50ICkKKwkJCSAgICogaGZzX3NlY3RfYmxvY2s7CisJfQorCisJcmV0dXJuIG1pbl9zaXplOworfQorCisvKiByZXR1cm4gdGhlIGJsb2NrIHdoaWNoIHNob3VsZCBiZSB1c2VkIHRvIHBhY2sgZGF0YSB0byBoYXZlCisgICBhdCBsZWFzdCBmcmVlIGZibG9jayBibG9ja3MgYXQgdGhlIGVuZCBvZiB0aGUgdm9sdW1lICovCit1bnNpZ25lZCBpbnQKK2hmc3BsdXNfZmluZF9zdGFydF9wYWNrIChjb25zdCBQZWRGaWxlU3lzdGVtICpmcywgdW5zaWduZWQgaW50IGZibG9jaykKK3sKKwlIZnNQUHJpdmF0ZUZTRGF0YSogCXByaXZfZGF0YSA9IChIZnNQUHJpdmF0ZUZTRGF0YSopCisJCQkJCQlmcy0+dHlwZV9zcGVjaWZpYzsKKwl1bnNpZ25lZCBpbnQJCWJsb2NrOworCisJZm9yIChibG9jayA9IFBFRF9CRTMyX1RPX0NQVSAocHJpdl9kYXRhLT52aC0+dG90YWxfYmxvY2tzKSAtIDE7CisJICAgICBibG9jayAmJiBmYmxvY2s7CisJICAgICBibG9jay0tKSB7CisJCWlmICghVFNUX0JMT0NfT0NDVVBBVElPTihwcml2X2RhdGEtPmFsbG9jX21hcCxibG9jaykpCisJCQlmYmxvY2stLTsKKwl9CisKKwl3aGlsZSAoYmxvY2sgJiYgIVRTVF9CTE9DX09DQ1VQQVRJT04ocHJpdl9kYXRhLT5hbGxvY19tYXAsYmxvY2spKQorCQlibG9jay0tOworCWlmIChUU1RfQkxPQ19PQ0NVUEFUSU9OKHByaXZfZGF0YS0+YWxsb2NfbWFwLGJsb2NrKSkKKwkJYmxvY2srKzsKKworCXJldHVybiBibG9jazsKK30KKworI2VuZGlmIC8qICFESVNDT1ZFUl9PTkxZICovCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2hmcy9hZHZmc19wbHVzLmggYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2hmcy9hZHZmc19wbHVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q1ZWNlNAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvaGZzL2FkdmZzX3BsdXMuaApAQCAtMCwwICsxLDUyIEBACisvKgorICAgIGxpYnBhcnRlZCAtIGEgbGlicmFyeSBmb3IgbWFuaXB1bGF0aW5nIGRpc2sgcGFydGl0aW9ucworICAgIENvcHlyaWdodCAoQykgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKKyovCisKKyNpZm5kZWYgX0FEVkZTX1BMVVNfSAorI2RlZmluZSBfQURWRlNfUExVU19ICisKKyNpbmNsdWRlIDxwYXJ0ZWQvcGFydGVkLmg+CisjaW5jbHVkZSA8cGFydGVkL2VuZGlhbi5oPgorI2luY2x1ZGUgPHBhcnRlZC9kZWJ1Zy5oPgorCisjaW5jbHVkZSAiaGZzLmgiCisKK2ludAoraGZzcGx1c19idHJlZV9zZWFyY2ggKEhmc1BQcml2YXRlRmlsZSogYl90cmVlX2ZpbGUsIEhmc1BQcml2YXRlR2VuZXJpY0tleSoga2V5LAorCQkgICAgICB2b2lkICpyZWNvcmRfb3V0LCB1bnNpZ25lZCBpbnQgcmVjb3JkX3NpemUsCisJCSAgICAgIEhmc0NQcml2YXRlTGVhZlJlYyogcmVjb3JkX3JlZik7CisKK3ZvaWQKK2hmc3BsdXNfZnJlZV9iYWRfYmxvY2tzX2xpc3QoSGZzUFByaXZhdGVMaW5rRXh0ZW50KiBmaXJzdCk7CisKK2ludAoraGZzcGx1c19yZWFkX2JhZF9ibG9ja3MgKGNvbnN0IFBlZEZpbGVTeXN0ZW0gKmZzKTsKKworaW50CitoZnNwbHVzX2lzX2JhZF9ibG9jayAoY29uc3QgUGVkRmlsZVN5c3RlbSAqZnMsIHVuc2lnbmVkIGludCBmYmxvY2spOworCitQZWRTZWN0b3IKK2hmc3BsdXNfZ2V0X2VtcHR5X2VuZCAoY29uc3QgUGVkRmlsZVN5c3RlbSAqZnMpOworCitQZWRTZWN0b3IKK2hmc3BsdXNfZ2V0X21pbl9zaXplIChjb25zdCBQZWRGaWxlU3lzdGVtICpmcyk7CisKK3Vuc2lnbmVkIGludAoraGZzcGx1c19maW5kX3N0YXJ0X3BhY2sgKGNvbnN0IFBlZEZpbGVTeXN0ZW0gKmZzLCB1bnNpZ25lZCBpbnQgZmJsb2NrKTsKKworI2VuZGlmIC8qIF9BRFZGU19QTFVTX0ggKi8KZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvaGZzL2NhY2hlLmMgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2hmcy9jYWNoZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExNWI0YjcKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2hmcy9jYWNoZS5jCkBAIC0wLDAgKzEsMjM5IEBACisvKgorICAgIGxpYnBhcnRlZCAtIGEgbGlicmFyeSBmb3IgbWFuaXB1bGF0aW5nIGRpc2sgcGFydGl0aW9ucworICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKKyovCisKKyNpZm5kZWYgRElTQ09WRVJfT05MWQorCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpbmNsdWRlIDxwYXJ0ZWQvcGFydGVkLmg+CisjaW5jbHVkZSA8cGFydGVkL2VuZGlhbi5oPgorI2luY2x1ZGUgPHBhcnRlZC9kZWJ1Zy5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaWYgRU5BQkxFX05MUworIyAgaW5jbHVkZSA8bGliaW50bC5oPgorIyAgZGVmaW5lIF8oU3RyaW5nKSBkZ2V0dGV4dCAoUEFDS0FHRSwgU3RyaW5nKQorI2Vsc2UKKyMgIGRlZmluZSBfKFN0cmluZykgKFN0cmluZykKKyNlbmRpZiAvKiBFTkFCTEVfTkxTICovCisKKyNpbmNsdWRlICJoZnMuaCIKKworI2luY2x1ZGUgImNhY2hlLmgiCisKK3N0YXRpYyBIZnNDUHJpdmF0ZUNhY2hlVGFibGUqCitoZnNjX25ld19jYWNoZXRhYmxlKHVuc2lnbmVkIGludCBzaXplKQoreworCUhmc0NQcml2YXRlQ2FjaGVUYWJsZSogcmV0OworCisJcmV0ID0gKEhmc0NQcml2YXRlQ2FjaGVUYWJsZSopIHBlZF9tYWxsb2Moc2l6ZW9mKCpyZXQpKTsKKwlpZiAoIXJldCkgcmV0dXJuIE5VTEw7CisKKwlyZXQtPm5leHRfY2FjaGUgPSBOVUxMOworCXJldC0+dGFibGVfc2l6ZSA9IHNpemU7CisJcmV0LT50YWJsZV9maXJzdF9mcmVlID0gMDsKKworCXJldC0+dGFibGUgPSBwZWRfbWFsbG9jKHNpemVvZigqcmV0LT50YWJsZSkqc2l6ZSk7CisJaWYgKCFyZXQtPnRhYmxlKSB7IHBlZF9mcmVlKHJldCk7IHJldHVybiBOVUxMOyB9CisJbWVtc2V0KHJldC0+dGFibGUsIDAsIHNpemVvZigqcmV0LT50YWJsZSkqc2l6ZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitIZnNDUHJpdmF0ZUNhY2hlKgoraGZzY19uZXdfY2FjaGUodW5zaWduZWQgaW50IGJsb2NrX251bWJlciwgdW5zaWduZWQgaW50IGZpbGVfbnVtYmVyKQoreworCXVuc2lnbmVkIGludAkJY2FjaGV0YWJsZV9zaXplLCBpOworCUhmc0NQcml2YXRlQ2FjaGUqCXJldDsKKworCXJldCA9IChIZnNDUHJpdmF0ZUNhY2hlKikgcGVkX21hbGxvYyhzaXplb2YoKnJldCkpOworCWlmICghcmV0KSByZXR1cm4gTlVMTDsKKwlyZXQtPmJsb2NrX251bWJlciA9IGJsb2NrX251bWJlcjsKKwkvKiBmb2xsb3dpbmcgY29kZSBhdm9pZCBpbnRlZ2VyIG92ZXJmbG93ICovCisJcmV0LT5saW5rZWRfcmVmX3NpemUgPSBibG9ja19udW1iZXIgPiBibG9ja19udW1iZXIgKyAoKDE8PENSX1NISUZUKS0xKSA/CisJCQkJKCBibG9ja19udW1iZXIgPj4gQ1JfU0hJRlQgKSArIDEgOgorCQkJCSggYmxvY2tfbnVtYmVyICsgKCgxPDxDUl9TSElGVCktMSkgKSA+PiBDUl9TSElGVAorCQkJICAgICA7CisKKwlyZXQtPmxpbmtlZF9yZWYgPSAoSGZzQ1ByaXZhdGVFeHRlbnQqKikKKwkJCSAgIHBlZF9tYWxsb2MoIHNpemVvZigqcmV0LT5saW5rZWRfcmVmKQorCQkJICAgCQkqIHJldC0+bGlua2VkX3JlZl9zaXplICk7CisJaWYgKCFyZXQtPmxpbmtlZF9yZWYpIHsgcGVkX2ZyZWUocmV0KTsgcmV0dXJuIE5VTEw7IH0KKworCWNhY2hldGFibGVfc2l6ZSA9IGZpbGVfbnVtYmVyICsgZmlsZV9udW1iZXIgLyBDUl9PVkVSX0RJViArIENSX0FERF9DU1Q7CisJaWYgKGNhY2hldGFibGVfc2l6ZSA8IGZpbGVfbnVtYmVyKSBjYWNoZXRhYmxlX3NpemUgPSAodW5zaWduZWQpIC0xOworCXJldC0+Zmlyc3RfY2FjaGV0YWJsZV9zaXplID0gY2FjaGV0YWJsZV9zaXplOworCXJldC0+dGFibGVfbGlzdCA9IGhmc2NfbmV3X2NhY2hldGFibGUoY2FjaGV0YWJsZV9zaXplKTsKKwlpZiAoIXJldC0+dGFibGVfbGlzdCkgeworCQlwZWRfZnJlZShyZXQtPmxpbmtlZF9yZWYpOworCQlwZWRfZnJlZShyZXQpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJcmV0LT5sYXN0X3RhYmxlID0gcmV0LT50YWJsZV9saXN0OworCisJZm9yIChpID0gMDsgaSA8IHJldC0+bGlua2VkX3JlZl9zaXplOyArK2kpCisJCXJldC0+bGlua2VkX3JlZltpXSA9IE5VTEw7CisKKwlyZXQtPm5lZWRlZF9hbGxvY19zaXplID0gMDsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkCitoZnNjX2RlbGV0ZV9jYWNoZXRhYmxlKEhmc0NQcml2YXRlQ2FjaGVUYWJsZSogbGlzdCkKK3sKKwlIZnNDUHJpdmF0ZUNhY2hlVGFibGUqIG5leHQ7CisKKwl3aGlsZSAobGlzdCkgeworCQlwZWRfZnJlZSAobGlzdC0+dGFibGUpOworCQluZXh0ID0gbGlzdC0+bmV4dF9jYWNoZTsKKwkJcGVkX2ZyZWUgKGxpc3QpOworCQlsaXN0ID0gbmV4dDsKKwl9Cit9CisKK3ZvaWQKK2hmc2NfZGVsZXRlX2NhY2hlKEhmc0NQcml2YXRlQ2FjaGUqIGNhY2hlKQoreworCWhmc2NfZGVsZXRlX2NhY2hldGFibGUoY2FjaGUtPnRhYmxlX2xpc3QpOworCXBlZF9mcmVlKGNhY2hlLT5saW5rZWRfcmVmKTsKKwlwZWRfZnJlZShjYWNoZSk7Cit9CisKK0hmc0NQcml2YXRlRXh0ZW50KgoraGZzY19jYWNoZV9hZGRfZXh0ZW50KEhmc0NQcml2YXRlQ2FjaGUqIGNhY2hlLCB1aW50MzJfdCBzdGFydCwgdWludDMyX3QgbGVuZ3RoLAorCQkgICAgICB1aW50MzJfdCBibG9jaywgdWludDE2X3Qgb2Zmc2V0LCB1aW50OF90IHNiYiwKKwkJICAgICAgdWludDhfdCB3aGVyZSwgdWludDhfdCByZWZfaW5kZXgpCit7CisJSGZzQ1ByaXZhdGVFeHRlbnQqCWV4dDsKKwl1bnNpZ25lZCBpbnQJCWlkeCA9IHN0YXJ0ID4+IENSX1NISUZUOworCisJUEVEX0FTU0VSVChpZHggPCBjYWNoZS0+bGlua2VkX3JlZl9zaXplLCByZXR1cm4gTlVMTCk7CisKKwlmb3IgKGV4dCA9IGNhY2hlLT5saW5rZWRfcmVmW2lkeF07CisJICAgICBleHQgJiYgc3RhcnQgIT0gZXh0LT5leHRfc3RhcnQ7CisJICAgICBleHQgPSBleHQtPm5leHQpOworCisJaWYgKGV4dCkgeworCQlwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCVBFRF9FWENFUFRJT05fRVJST1IsCisJCQlQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCV8oIlRyeWluZyB0byByZWdpc3RlciBhbiBleHRlbnQgc3RhcnRpbmcgYXQgYmxvY2sgIgorCQkJICAiMHglWCwgYnV0IGFub3RoZXIgb25lIGFscmVhZHkgZXhpc3RzIGF0IHRoaXMgIgorCQkJICAicG9zaXRpb24uICBZb3Ugc2hvdWxkIGNoZWNrIHRoZSBmaWxlIHN5c3RlbSEiKSwKKwkJCXN0YXJ0KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKCBjYWNoZS0+bGFzdF90YWJsZS0+dGFibGVfZmlyc3RfZnJlZSAKKwkgICAgID09IGNhY2hlLT5sYXN0X3RhYmxlLT50YWJsZV9zaXplICkgeworCQljYWNoZS0+bGFzdF90YWJsZS0+bmV4dF9jYWNoZSA9IAorCQkJaGZzY19uZXdfY2FjaGV0YWJsZSggKCBjYWNoZS0+Zmlyc3RfY2FjaGV0YWJsZV9zaXplCisJCQkJCSAgICAgICAvIENSX05FV19BTExPQ19ESVYgKQorCQkJCQkgICAgICsgQ1JfQUREX0NTVCApOworCQlpZiAoIWNhY2hlLT5sYXN0X3RhYmxlLT5uZXh0X2NhY2hlKQorCQkJcmV0dXJuIE5VTEw7CisJCWNhY2hlLT5sYXN0X3RhYmxlID0gY2FjaGUtPmxhc3RfdGFibGUtPm5leHRfY2FjaGU7CisJfQorCisJZXh0ID0gY2FjaGUtPmxhc3RfdGFibGUtPnRhYmxlKyhjYWNoZS0+bGFzdF90YWJsZS0+dGFibGVfZmlyc3RfZnJlZSsrKTsKKworCWV4dC0+ZXh0X3N0YXJ0ID0gc3RhcnQ7CisJZXh0LT5leHRfbGVuZ3RoID0gbGVuZ3RoOworCWV4dC0+cmVmX2Jsb2NrID0gYmxvY2s7CisJZXh0LT5yZWZfb2Zmc2V0ID0gb2Zmc2V0OworCWV4dC0+c2VjdF9ieV9ibG9jayA9IHNiYjsKKwlleHQtPndoZXJlID0gd2hlcmU7CisJZXh0LT5yZWZfaW5kZXggPSByZWZfaW5kZXg7CisKKwlleHQtPm5leHQgPSBjYWNoZS0+bGlua2VkX3JlZltpZHhdOworCWNhY2hlLT5saW5rZWRfcmVmW2lkeF0gPSBleHQ7CisKKwljYWNoZS0+bmVlZGVkX2FsbG9jX3NpemUgPSBjYWNoZS0+bmVlZGVkX2FsbG9jX3NpemUgPgorCQkJCSAgICh1bnNpZ25lZCkgUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQgKiBzYmIgPworCQkJCSAgIGNhY2hlLT5uZWVkZWRfYWxsb2Nfc2l6ZSA6CisJCQkJICAgKHVuc2lnbmVkKSBQRURfU0VDVE9SX1NJWkVfREVGQVVMVCAqIHNiYjsKKworCXJldHVybiBleHQ7Cit9CisKK0hmc0NQcml2YXRlRXh0ZW50KgoraGZzY19jYWNoZV9zZWFyY2hfZXh0ZW50KEhmc0NQcml2YXRlQ2FjaGUqIGNhY2hlLCB1aW50MzJfdCBzdGFydCkKK3sKKwlIZnNDUHJpdmF0ZUV4dGVudCoJcmV0OworCXVuc2lnbmVkIGludAlpZHggPSBzdGFydCA+PiBDUl9TSElGVDsKKworCVBFRF9BU1NFUlQoaWR4IDwgY2FjaGUtPmxpbmtlZF9yZWZfc2l6ZSwgcmV0dXJuIE5VTEwpOworCisJZm9yIChyZXQgPSBjYWNoZS0+bGlua2VkX3JlZltpZHhdOworCSAgICAgcmV0ICYmIHN0YXJ0ICE9IHJldC0+ZXh0X3N0YXJ0OworCSAgICAgcmV0ID0gcmV0LT5uZXh0KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIENhbid0IGZhaWwgaWYgZXh0ZW50IGJlZ2luaW5nIGF0IG9sZF9zdGFydCBleGlzdHMgKi8KKy8qIFJldHVybnMgMCBpZiBubyBzdWNoIGV4dGVudCwgb3Igb24gZXJyb3IgKi8KK0hmc0NQcml2YXRlRXh0ZW50KgoraGZzY19jYWNoZV9tb3ZlX2V4dGVudChIZnNDUHJpdmF0ZUNhY2hlKiBjYWNoZSwgdWludDMyX3Qgb2xkX3N0YXJ0LAorCQkJdWludDMyX3QgbmV3X3N0YXJ0KQoreworCUhmc0NQcml2YXRlRXh0ZW50KioJcHBleHQ7CisJSGZzQ1ByaXZhdGVFeHRlbnQqCXBleHQ7CisKKwl1bnNpZ25lZCBpbnQgCQlpZHgxID0gb2xkX3N0YXJ0ID4+IENSX1NISUZUOworCXVuc2lnbmVkIGludAkJaWR4MiA9IG5ld19zdGFydCA+PiBDUl9TSElGVDsKKworCVBFRF9BU1NFUlQoaWR4MSA8IGNhY2hlLT5saW5rZWRfcmVmX3NpemUsIHJldHVybiBOVUxMKTsKKwlQRURfQVNTRVJUKGlkeDIgPCBjYWNoZS0+bGlua2VkX3JlZl9zaXplLCByZXR1cm4gTlVMTCk7CisKKwlmb3IgKHBleHQgPSBjYWNoZS0+bGlua2VkX3JlZltpZHgyXTsKKwkgICAgIHBleHQgJiYgbmV3X3N0YXJ0ICE9IHBleHQtPmV4dF9zdGFydDsKKwkgICAgIHBleHQgPSBwZXh0LT5uZXh0KTsKKworCWlmIChwZXh0KSB7CisJCXBlZF9leGNlcHRpb25fdGhyb3cgKAorCQkJUEVEX0VYQ0VQVElPTl9CVUcsCisJCQlQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCV8oIlRyeWluZyB0byBtb3ZlIGFuIGV4dGVudCBmcm9tIGJsb2NrIE94JVggdG8gYmxvY2sgIgorCQkJICAiT3glWCwgYnV0IGFub3RoZXIgb25lIGFscmVhZHkgZXhpc3RzIGF0IHRoaXMgIgorCQkJICAicG9zaXRpb24uICBUaGlzIHNob3VsZCBub3QgaGFwcGVuISIpLAorCQkJb2xkX3N0YXJ0LCBuZXdfc3RhcnQpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlmb3IgKHBwZXh0ID0gJihjYWNoZS0+bGlua2VkX3JlZltpZHgxXSk7CisJICAgICAoKnBwZXh0KSAmJiBvbGRfc3RhcnQgIT0gKCpwcGV4dCktPmV4dF9zdGFydDsKKwkgICAgIHBwZXh0ID0gJigoKnBwZXh0KS0+bmV4dCkpOworCisJaWYgKCEoKnBwZXh0KSkgcmV0dXJuIE5VTEw7CisKKwkvKiByZW1vdmluZyB0aGUgZXh0ZW50IGZyb20gdGhlIGNhY2hlICovCisJcGV4dCA9ICpwcGV4dDsKKwkoKnBwZXh0KSA9IHBleHQtPm5leHQ7CisKKwkvKiBjaGFuZ2UgZXh0X3N0YXJ0IGFuZCBpbnNlcnQgdGhlIGV4dGVudCBhZ2FpbiAqLworCXBleHQtPmV4dF9zdGFydCA9IG5ld19zdGFydDsKKwlwZXh0LT5uZXh0ID0gY2FjaGUtPmxpbmtlZF9yZWZbaWR4Ml07CisJY2FjaGUtPmxpbmtlZF9yZWZbaWR4Ml0gPSBwZXh0OworCisJcmV0dXJuIHBleHQ7Cit9CisKKyNlbmRpZiAvKiBESVNDT1ZFUl9PTkxZICovCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2hmcy9jYWNoZS5oIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9oZnMvY2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTQ5ZWY4Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9oZnMvY2FjaGUuaApAQCAtMCwwICsxLDExOCBAQAorLyoKKyAgICBsaWJwYXJ0ZWQgLSBhIGxpYnJhcnkgZm9yIG1hbmlwdWxhdGluZyBkaXNrIHBhcnRpdGlvbnMKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCisqLworCisjaWZuZGVmIF9DQUNIRV9ICisjZGVmaW5lIF9DQUNIRV9ICisKKyNpbmNsdWRlIDxwYXJ0ZWQvcGFydGVkLmg+CisjaW5jbHVkZSA8cGFydGVkL2VuZGlhbi5oPgorI2luY2x1ZGUgPHBhcnRlZC9kZWJ1Zy5oPgorCisjaW5jbHVkZSAiaGZzLmgiCisKKy8qIENSID0+IENBQ0hFIFJFRiAqLworI2RlZmluZSBDUl9OVUxMCQkJIDAgLyogcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgQ1JfUFJJTV9DQVQJCSAxCisjZGVmaW5lIENSX1BSSU1fRVhUCQkgMgorI2RlZmluZSBDUl9QUklNX0FUVFIJCSAzCisjZGVmaW5lIENSX1BSSU1fQUxMT0MJCSA0CisjZGVmaW5lIENSX1BSSU1fU1RBUlQJCSA1CisjZGVmaW5lIENSX0JUUkVFX0NBVAkJIDYKKyNkZWZpbmUgQ1JfQlRSRUVfQVRUUgkJIDcKKyNkZWZpbmUgQ1JfQlRSRUVfRVhUXzAJCSA4CisjZGVmaW5lIENSX0JUUkVFX0VYVF9DQVQJIDkKKyNkZWZpbmUgQ1JfQlRSRUVfRVhUX0VYVAkxMCAvKiBzaG91bGQgbm90IGhhcHBlbiAhICovCisjZGVmaW5lIENSX0JUUkVFX0VYVF9BVFRSCTExCisjZGVmaW5lIENSX0JUUkVFX0VYVF9BTExPQwkxMgorI2RlZmluZSBDUl9CVFJFRV9FWFRfU1RBUlQJMTMgLyogdW5uZWVkZWQgaW4gY3VycmVudCBjb2RlICovCisjZGVmaW5lIENSX0JUUkVFX0NBVF9KSUIJMTQgLyogam91cm5hbCBpbmZvIGJsb2NrICovCisjZGVmaW5lIENSX0JUUkVFX0NBVF9KTAkJMTUgLyogam91cm5hbCAqLworLyogMTYgLT4gMzEgfHwgaGlnaCBvcmRlciBiaXQgKi8gICAvKiByZXNlcnZlZCAqLworCisvKiB0dW5pbmcgKi8KKyNkZWZpbmUgQ1JfU0hJRlQJCSA4IC8qIG51bWJlciBvZiBiaXRzIHRvIHNoaWZ0IHN0YXJ0X2Jsb2NrIGJ5ICovCisJCQkJICAgLyogdG8gZ2V0IHRoZSBpbmRleCBvZiB0aGUgbGlua2VkIGxpc3QgKi8KKyNkZWZpbmUgQ1JfT1ZFUl9ESVYJCTE2IC8qIGFsbG9jIGEgdGFibGUgZm9yICgxKzEvQ1JfT1ZFUl9ESVYpICogCisJCQkJICAgICAgZmlsZV9udW1iZXIgKyBDUl9BRERfQ1NUICovCisjZGVmaW5lIENSX0FERF9DU1QJCTE2CisjZGVmaW5lIENSX05FV19BTExPQ19ESVYJIDQgLyogZGl2aWRlIHRoZSBzaXplIG9mIHRoZSBmaXJzdCBhbGxvYyB0YWJsZSAKKwkJCQkgICAgICBieSB0aGlzIHZhbHVlIHRvIGFsbG9jYXRlIG5leHQgdGFibGVzICovCisKKy8qIFNlZSBET0MgZm9yIGFuIGV4cGxhaW5hdGlvbiBvZiB0aGlzIHN0cnVjdHVyZSAqLworLyogQWNjZXNzIHJlYWQgb25seSBmcm9tIG91dHNpZGUgY2FjaGUuYyAqLworc3RydWN0IF9IZnNDUHJpdmF0ZUV4dGVudCB7CisJc3RydWN0IF9IZnNDUHJpdmF0ZUV4dGVudCoJbmV4dDsKKwl1aW50MzJfdAkJCWV4dF9zdGFydDsKKwl1aW50MzJfdAkJCWV4dF9sZW5ndGg7CisJdWludDMyX3QJCQlyZWZfYmxvY2s7CisJdWludDE2X3QJCQlyZWZfb2Zmc2V0OworCXVpbnQ4X3QJCQkJc2VjdF9ieV9ibG9jazsKKwl1bnNpZ25lZAkJCXdoZXJlIDogNTsKKwl1bnNpZ25lZAkJCXJlZl9pbmRleCA6IDM7IC8qIDAgLT4gNyAqLworfTsKK3R5cGVkZWYgc3RydWN0IF9IZnNDUHJpdmF0ZUV4dGVudCBIZnNDUHJpdmF0ZUV4dGVudDsKKworLyogSW50ZXJuYWx5IHVzZWQgYnkgY2FjaGUuYyBmb3IgY3VzdG9tIG1lbW9yeSBtYW5hZ21lbnQgb25seSAqLworc3RydWN0IF9IZnNDUHJpdmF0ZUNhY2hlVGFibGUgeworCXN0cnVjdCBfSGZzQ1ByaXZhdGVDYWNoZVRhYmxlKgluZXh0X2NhY2hlOworCUhmc0NQcml2YXRlRXh0ZW50KgkJdGFibGU7CisJdW5zaWduZWQgaW50CQkJdGFibGVfc2l6ZTsKKwl1bnNpZ25lZCBpbnQJCQl0YWJsZV9maXJzdF9mcmVlOworCS8qIGZpcnN0X2VsZW10ID8gKi8KK307Cit0eXBlZGVmIHN0cnVjdCBfSGZzQ1ByaXZhdGVDYWNoZVRhYmxlIEhmc0NQcml2YXRlQ2FjaGVUYWJsZTsKKworLyogSW50ZXJuYWx5IHVzZWQgYnkgY2FjaGUuYyBmb3IgY3VzdG9tIG1lbW9yeSBtYW5hZ21lbnQgCisgICBhbmQgY2FjaGUgaGFuZGxpbmcgb25seSAqLworc3RydWN0IF9IZnNDUHJpdmF0ZUNhY2hlIHsKKwlIZnNDUHJpdmF0ZUNhY2hlVGFibGUqCQl0YWJsZV9saXN0OworCUhmc0NQcml2YXRlQ2FjaGVUYWJsZSoJCWxhc3RfdGFibGU7CisJSGZzQ1ByaXZhdGVFeHRlbnQqKgkJbGlua2VkX3JlZjsKKwl1bnNpZ25lZCBpbnQJCQlsaW5rZWRfcmVmX3NpemU7CisJdW5zaWduZWQgaW50CQkJYmxvY2tfbnVtYmVyOworCXVuc2lnbmVkIGludAkJCWZpcnN0X2NhY2hldGFibGVfc2l6ZTsKKwl1bnNpZ25lZCBpbnQJCQluZWVkZWRfYWxsb2Nfc2l6ZTsKK307Cit0eXBlZGVmIHN0cnVjdCBfSGZzQ1ByaXZhdGVDYWNoZSBIZnNDUHJpdmF0ZUNhY2hlOworCitIZnNDUHJpdmF0ZUNhY2hlKgoraGZzY19uZXdfY2FjaGUodW5zaWduZWQgaW50IGJsb2NrX251bWJlciwgdW5zaWduZWQgaW50IGZpbGVfbnVtYmVyKTsKKwordm9pZAoraGZzY19kZWxldGVfY2FjaGUoSGZzQ1ByaXZhdGVDYWNoZSogY2FjaGUpOworCitIZnNDUHJpdmF0ZUV4dGVudCoKK2hmc2NfY2FjaGVfYWRkX2V4dGVudChIZnNDUHJpdmF0ZUNhY2hlKiBjYWNoZSwgdWludDMyX3Qgc3RhcnQsIHVpbnQzMl90IGxlbmd0aCwKKwkJICAgICAgdWludDMyX3QgYmxvY2ssIHVpbnQxNl90IG9mZnNldCwgdWludDhfdCBzYmIsCisJCSAgICAgIHVpbnQ4X3Qgd2hlcmUsIHVpbnQ4X3QgaW5kZXgpOworCitIZnNDUHJpdmF0ZUV4dGVudCoKK2hmc2NfY2FjaGVfc2VhcmNoX2V4dGVudChIZnNDUHJpdmF0ZUNhY2hlKiBjYWNoZSwgdWludDMyX3Qgc3RhcnQpOworCitIZnNDUHJpdmF0ZUV4dGVudCoKK2hmc2NfY2FjaGVfbW92ZV9leHRlbnQoSGZzQ1ByaXZhdGVDYWNoZSogY2FjaGUsIHVpbnQzMl90IG9sZF9zdGFydCwKKwkJCXVpbnQzMl90IG5ld19zdGFydCk7CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludAoraGZzY19jYWNoZV9uZWVkZWRfYnVmZmVyKEhmc0NQcml2YXRlQ2FjaGUqIGNhY2hlKQoreworCXJldHVybiBjYWNoZS0+bmVlZGVkX2FsbG9jX3NpemU7Cit9CisKKyNlbmRpZiAvKiBfQ0FDSEVfSCAqLwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9oZnMvZmlsZS5jIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9oZnMvZmlsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMmYyNTMKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2hmcy9maWxlLmMKQEAgLTAsMCArMSwyMjkgQEAKKy8qCisgICAgbGlicGFydGVkIC0gYSBsaWJyYXJ5IGZvciBtYW5pcHVsYXRpbmcgZGlzayBwYXJ0aXRpb25zCisgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQorKi8KKworI2lmbmRlZiBESVNDT1ZFUl9PTkxZCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworI2luY2x1ZGUgPHBhcnRlZC9wYXJ0ZWQuaD4KKyNpbmNsdWRlIDxwYXJ0ZWQvZW5kaWFuLmg+CisjaW5jbHVkZSA8cGFydGVkL2RlYnVnLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpZiBFTkFCTEVfTkxTCisjICBpbmNsdWRlIDxsaWJpbnRsLmg+CisjICBkZWZpbmUgXyhTdHJpbmcpIGRnZXR0ZXh0IChQQUNLQUdFLCBTdHJpbmcpCisjZWxzZQorIyAgZGVmaW5lIF8oU3RyaW5nKSAoU3RyaW5nKQorI2VuZGlmIC8qIEVOQUJMRV9OTFMgKi8KKworI2luY2x1ZGUgImhmcy5oIgorI2luY2x1ZGUgImFkdmZzLmgiCisKKyNpbmNsdWRlICJmaWxlLmgiCisKKy8qIE9wZW4gdGhlIGRhdGEgZm9yayBvZiBhIGZpbGUgd2l0aCBpdHMgZmlyc3QgdGhyZWUgZXh0ZW50cyBhbmQgaXRzIENOSUQgKi8KK0hmc1ByaXZhdGVGaWxlKgoraGZzX2ZpbGVfb3BlbiAoUGVkRmlsZVN5c3RlbSAqZnMsIHVpbnQzMl90IENOSUQsCisJICAgICAgIEhmc0V4dERhdGFSZWMgZXh0X2Rlc2MsIFBlZFNlY3RvciBzZWN0X25iKQoreworCUhmc1ByaXZhdGVGaWxlKiBmaWxlOworCisJZmlsZSA9IChIZnNQcml2YXRlRmlsZSopIHBlZF9tYWxsb2MgKHNpemVvZiAoSGZzUHJpdmF0ZUZpbGUpKTsKKwlpZiAoIWZpbGUpIHJldHVybiBOVUxMOworCisJZmlsZS0+ZnMgPSBmczsKKwlmaWxlLT5zZWN0X25iID0gc2VjdF9uYjsKKwlmaWxlLT5DTklEID0gQ05JRDsKKwltZW1jcHkoZmlsZS0+Zmlyc3QsIGV4dF9kZXNjLCBzaXplb2YgKEhmc0V4dERhdGFSZWMpKTsKKwlmaWxlLT5zdGFydF9jYWNoZSA9IDA7CisJCisJcmV0dXJuIGZpbGU7Cit9CisKKy8qIENsb3NlIGFuIEhGUyBmaWxlICovCit2b2lkCitoZnNfZmlsZV9jbG9zZSAoSGZzUHJpdmF0ZUZpbGUqIGZpbGUpCit7CisJcGVkX2ZyZWUgKGZpbGUpOworfQorCisvKiB3YXJuaW5nIDogb25seSB3b3JrcyBvbiBkYXRhIGZvcmtzICovCitzdGF0aWMgaW50CitoZnNfZ2V0X2V4dGVudF9jb250YWluaW5nIChIZnNQcml2YXRlRmlsZSogZmlsZSwgdW5zaWduZWQgaW50IGJsb2NrLAorCQkJICAgSGZzRXh0RGF0YVJlYyBjYWNoZSwgdWludDE2X3QqIHB0cl9zdGFydF9jYWNoZSkKK3sKKwl1aW50OF90CQkJcmVjb3JkW3NpemVvZiAoSGZzRXh0ZW50S2V5KQorCQkJCSAgICAgICArIHNpemVvZiAoSGZzRXh0RGF0YVJlYyldOworCUhmc0V4dGVudEtleQkJc2VhcmNoOworCUhmc0V4dGVudEtleSoJCXJldF9rZXkgPSAoSGZzRXh0ZW50S2V5KikgcmVjb3JkOworCUhmc0V4dERlc2NyaXB0b3IqCXJldF9jYWNoZSA9IChIZnNFeHREZXNjcmlwdG9yKikKKwkJCQkJICAgICAgKHJlY29yZCArIHNpemVvZiAoSGZzRXh0ZW50S2V5KSk7CisJSGZzUHJpdmF0ZUZTRGF0YSogCXByaXZfZGF0YSA9IChIZnNQcml2YXRlRlNEYXRhKikKKwkJCQkJICAgICAgZmlsZS0+ZnMtPnR5cGVfc3BlY2lmaWM7CisKKwlzZWFyY2gua2V5X2xlbmd0aCA9IHNpemVvZiAoSGZzRXh0ZW50S2V5KSAtIDE7CisJc2VhcmNoLnR5cGUgPSBIRlNfREFUQV9GT1JLOworCXNlYXJjaC5maWxlX0lEID0gZmlsZS0+Q05JRDsKKwlzZWFyY2guc3RhcnQgPSBQRURfQ1BVX1RPX0JFMTYgKGJsb2NrKTsKKworCWlmICghaGZzX2J0cmVlX3NlYXJjaCAocHJpdl9kYXRhLT5leHRlbnRfZmlsZSwgCisJCQkgICAgICAgKEhmc1ByaXZhdGVHZW5lcmljS2V5KikgJnNlYXJjaCwKKwkJCSAgICAgICByZWNvcmQsIHNpemVvZiAocmVjb3JkKSwgTlVMTCkpCisJCXJldHVybiAwOworCisJaWYgKHJldF9rZXktPmZpbGVfSUQgIT0gc2VhcmNoLmZpbGVfSUQgfHwgcmV0X2tleS0+dHlwZSAhPSBzZWFyY2gudHlwZSkKKwkJcmV0dXJuIDA7CisKKwltZW1jcHkgKGNhY2hlLCByZXRfY2FjaGUsIHNpemVvZihIZnNFeHREYXRhUmVjKSk7CisJKnB0cl9zdGFydF9jYWNoZSA9IFBFRF9CRTE2X1RPX0NQVSAocmV0X2tleS0+c3RhcnQpOworCisJcmV0dXJuIDE7Cit9CisKKy8qIGZpbmQgYW5kIHJldHVybiB0aGUgbnRoIHNlY3RvciBvZiBhIGZpbGUgKi8KKy8qIHJldHVybiAwIG9uIGVycm9yICovCitzdGF0aWMgUGVkU2VjdG9yCitoZnNfZmlsZV9maW5kX3NlY3RvciAoSGZzUHJpdmF0ZUZpbGUqIGZpbGUsIFBlZFNlY3RvciBzZWN0b3IpCit7CisJSGZzUHJpdmF0ZUZTRGF0YSogcHJpdl9kYXRhID0gKEhmc1ByaXZhdGVGU0RhdGEqKQorCQkJCSAgICAgIGZpbGUtPmZzLT50eXBlX3NwZWNpZmljOworCXVuc2lnbmVkIGludCAJc2VjdF9ieV9ibG9jayA9IFBFRF9CRTMyX1RPX0NQVSAoCisJCQkJCSAgICBwcml2X2RhdGEtPm1kYi0+YmxvY2tfc2l6ZSkKKwkJCQkJLyBQRURfU0VDVE9SX1NJWkVfREVGQVVMVDsKKwl1bnNpZ25lZCBpbnQgCWksIHMsIHZvbF9ibG9jazsKKwl1bnNpZ25lZCBpbnQgCWJsb2NrICA9IHNlY3RvciAvIHNlY3RfYnlfYmxvY2s7CisJdW5zaWduZWQgaW50CW9mZnNldCA9IHNlY3RvciAlIHNlY3RfYnlfYmxvY2s7CisKKwkvKiBpbiB0aGUgdGhyZWUgZmlyc3QgZXh0ZW50ICovCisJZm9yIChzID0gMCwgaSA9IDA7IGkgPCBIRlNfRVhUX05COyBpKyspIHsKKwkJCWlmICgoYmxvY2sgPj0gcykgJiYgKCBibG9jayA8IHMgKyBQRURfQkUxNl9UT19DUFUgKAorCQkJCQkJZmlsZS0+Zmlyc3RbaV0uYmxvY2tfY291bnQpKSkgeworCQkJdm9sX2Jsb2NrID0gKGJsb2NrIC0gcykgKyBQRURfQkUxNl9UT19DUFUgKAorCQkJCQkJICAgIGZpbGUtPmZpcnN0W2ldLnN0YXJ0X2Jsb2NrKTsKKwkJCWdvdG8gc2VjdG9yX2ZvdW5kOworCQl9CisJCXMgKz0gUEVEX0JFMTZfVE9fQ1BVIChmaWxlLT5maXJzdFtpXS5ibG9ja19jb3VudCk7CisJfQorCisJLyogaW4gdGhlIHRocmVlIGNhY2hlZCBleHRlbnQgKi8KKwlpZiAoZmlsZS0+c3RhcnRfY2FjaGUgJiYgYmxvY2sgPj0gZmlsZS0+c3RhcnRfY2FjaGUpCisJZm9yIChzID0gZmlsZS0+c3RhcnRfY2FjaGUsIGkgPSAwOyBpIDwgSEZTX0VYVF9OQjsgaSsrKSB7CisJCWlmICgoYmxvY2sgPj0gcykgJiYgKGJsb2NrIDwgcyArIFBFRF9CRTE2X1RPX0NQVSAoCisJCQkJCQlmaWxlLT5jYWNoZVtpXS5ibG9ja19jb3VudCkpKSB7CisJCQl2b2xfYmxvY2sgPSAoYmxvY2sgLSBzKSArIFBFRF9CRTE2X1RPX0NQVSAoCisJCQkJCQkgICAgZmlsZS0+Y2FjaGVbaV0uc3RhcnRfYmxvY2spOworCQkJZ290byBzZWN0b3JfZm91bmQ7CisJCX0KKwkJcyArPSBQRURfQkUxNl9UT19DUFUgKGZpbGUtPmNhY2hlW2ldLmJsb2NrX2NvdW50KTsKKwl9CisKKwkvKiB1cGRhdGUgY2FjaGUgKi8KKwlpZiAoIWhmc19nZXRfZXh0ZW50X2NvbnRhaW5pbmcgKGZpbGUsIGJsb2NrLCBmaWxlLT5jYWNoZSwKKwkJCQkJJihmaWxlLT5zdGFydF9jYWNoZSkpKSB7CisJCXBlZF9leGNlcHRpb25fdGhyb3cgKAorCQkJUEVEX0VYQ0VQVElPTl9XQVJOSU5HLAorCQkJUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQlfKCJDb3VsZCBub3QgdXBkYXRlIHRoZSBleHRlbnQgY2FjaGUgZm9yIEhGUyBmaWxlIHdpdGggIgorCQkJICAiQ05JRCAlWC4iKSwKKwkJCVBFRF9CRTMyX1RPX0NQVShmaWxlLT5DTklEKSk7CisJCXJldHVybiAwOworCX0KKworCS8qIGluIHRoZSB0aHJlZSBjYWNoZWQgZXh0ZW50ICovCisJUEVEX0FTU0VSVChmaWxlLT5zdGFydF9jYWNoZSAmJiBibG9jayA+PSBmaWxlLT5zdGFydF9jYWNoZSwgcmV0dXJuIDApOworCWZvciAocyA9IGZpbGUtPnN0YXJ0X2NhY2hlLCBpID0gMDsgaSA8IEhGU19FWFRfTkI7IGkrKykgeworCQlpZiAoKGJsb2NrID49IHMpICYmIChibG9jayA8IHMgKyBQRURfQkUxNl9UT19DUFUgKAorCQkJCQkJZmlsZS0+Y2FjaGVbaV0uYmxvY2tfY291bnQpKSkgeworCQkJdm9sX2Jsb2NrID0gKGJsb2NrIC0gcykgKyBQRURfQkUxNl9UT19DUFUgKAorCQkJCQkJICAgIGZpbGUtPmNhY2hlW2ldLnN0YXJ0X2Jsb2NrKTsKKwkJCWdvdG8gc2VjdG9yX2ZvdW5kOworCQl9CisJCXMgKz0gUEVEX0JFMTZfVE9fQ1BVIChmaWxlLT5jYWNoZVtpXS5ibG9ja19jb3VudCk7CisJfQorCisJcmV0dXJuIDA7CisKKyAgICBzZWN0b3JfZm91bmQ6CisJcmV0dXJuIChQZWRTZWN0b3IpIFBFRF9CRTE2X1RPX0NQVSAocHJpdl9kYXRhLT5tZGItPnN0YXJ0X2Jsb2NrKQorCQkrIChQZWRTZWN0b3IpIHZvbF9ibG9jayAqIHNlY3RfYnlfYmxvY2sKKwkJKyBvZmZzZXQ7Cit9CisKKy8qIFJlYWQgdGhlIG50aCBzZWN0b3Igb2YgYSBmaWxlICovCisvKiByZXR1cm4gMCBvbiBlcnJvciAqLworaW50CitoZnNfZmlsZV9yZWFkX3NlY3RvciAoSGZzUHJpdmF0ZUZpbGUqIGZpbGUsIHZvaWQgKmJ1ZiwgUGVkU2VjdG9yIHNlY3RvcikKK3sKKwlQZWRTZWN0b3IJYWJzX3NlY3RvcjsKKworCWlmIChzZWN0b3IgPj0gZmlsZS0+c2VjdF9uYikgeworCQlwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCVBFRF9FWENFUFRJT05fRVJST1IsCisJCQlQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCV8oIlRyeWluZyB0byByZWFkIEhGUyBmaWxlIHdpdGggQ05JRCAlWCBiZWhpbmQgRU9GLiIpLAorCQkJUEVEX0JFMzJfVE9fQ1BVKGZpbGUtPkNOSUQpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJYWJzX3NlY3RvciA9IGhmc19maWxlX2ZpbmRfc2VjdG9yIChmaWxlLCBzZWN0b3IpOworCWlmICghYWJzX3NlY3RvcikgeworCQlwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCVBFRF9FWENFUFRJT05fRVJST1IsCisJCQlQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCV8oIkNvdWxkIG5vdCBmaW5kIHNlY3RvciAlbGxpIG9mIEhGUyBmaWxlIHdpdGggIgorCQkJICAiQ05JRCAlWC4iKSwKKwkJCXNlY3RvciwgUEVEX0JFMzJfVE9fQ1BVKGZpbGUtPkNOSUQpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIHBlZF9nZW9tZXRyeV9yZWFkIChmaWxlLT5mcy0+Z2VvbSwgYnVmLCBhYnNfc2VjdG9yLCAxKTsKK30KKworLyogV3JpdGUgdGhlIG50aCBzZWN0b3Igb2YgYSBmaWxlICovCisvKiByZXR1cm4gMCBvbiBlcnJvciAqLworaW50CitoZnNfZmlsZV93cml0ZV9zZWN0b3IgKEhmc1ByaXZhdGVGaWxlKiBmaWxlLCB2b2lkICpidWYsIFBlZFNlY3RvciBzZWN0b3IpCit7CisJUGVkU2VjdG9yCWFic19zZWN0b3I7CisKKwlpZiAoc2VjdG9yID49IGZpbGUtPnNlY3RfbmIpIHsKKwkJcGVkX2V4Y2VwdGlvbl90aHJvdyAoCisJCQlQRURfRVhDRVBUSU9OX0VSUk9SLAorCQkJUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQlfKCJUcnlpbmcgdG8gd3JpdGUgSEZTIGZpbGUgd2l0aCBDTklEICVYIGJlaGluZCBFT0YuIiksCisJCQkgIFBFRF9CRTMyX1RPX0NQVShmaWxlLT5DTklEKSk7CQkKKwkJcmV0dXJuIDA7CisJfQorCisJYWJzX3NlY3RvciA9IGhmc19maWxlX2ZpbmRfc2VjdG9yIChmaWxlLCBzZWN0b3IpOworCWlmICghYWJzX3NlY3RvcikgeworCQlwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCVBFRF9FWENFUFRJT05fRVJST1IsCisJCQlQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCV8oIkNvdWxkIG5vdCBmaW5kIHNlY3RvciAlbGxpIG9mIEhGUyBmaWxlIHdpdGggIgorCQkJICAiQ05JRCAlWC4iKSwKKwkJCXNlY3RvciwgUEVEX0JFMzJfVE9fQ1BVKGZpbGUtPkNOSUQpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIHBlZF9nZW9tZXRyeV93cml0ZSAoZmlsZS0+ZnMtPmdlb20sIGJ1ZiwgYWJzX3NlY3RvciwgMSk7Cit9CisKKyNlbmRpZiAvKiAhRElTQ09WRVJfT05MWSAqLwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9oZnMvZmlsZS5oIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9oZnMvZmlsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmY2QyMWMKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2hmcy9maWxlLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAgICBsaWJwYXJ0ZWQgLSBhIGxpYnJhcnkgZm9yIG1hbmlwdWxhdGluZyBkaXNrIHBhcnRpdGlvbnMKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCisqLworCisjaWZuZGVmIF9GSUxFX0gKKyNkZWZpbmUgX0ZJTEVfSAorCisjaW5jbHVkZSA8cGFydGVkL3BhcnRlZC5oPgorI2luY2x1ZGUgPHBhcnRlZC9lbmRpYW4uaD4KKyNpbmNsdWRlIDxwYXJ0ZWQvZGVidWcuaD4KKworI2luY2x1ZGUgImhmcy5oIgorCitIZnNQcml2YXRlRmlsZSoKK2hmc19maWxlX29wZW4gKFBlZEZpbGVTeXN0ZW0gKmZzLCB1aW50MzJfdCBDTklELAorCSAgICAgICBIZnNFeHREYXRhUmVjIGV4dF9kZXNjLCBQZWRTZWN0b3Igc2VjdF9uYik7CisKK3ZvaWQKK2hmc19maWxlX2Nsb3NlIChIZnNQcml2YXRlRmlsZSogZmlsZSk7CisKK2ludAoraGZzX2ZpbGVfcmVhZF9zZWN0b3IgKEhmc1ByaXZhdGVGaWxlKiBmaWxlLCB2b2lkICpidWYsIFBlZFNlY3RvciBzZWN0b3IpOworCitpbnQKK2hmc19maWxlX3dyaXRlX3NlY3RvciAoSGZzUHJpdmF0ZUZpbGUqIGZpbGUsIHZvaWQgKmJ1ZiwgUGVkU2VjdG9yIHNlY3Rvcik7CisKKyNlbmRpZiAvKiBfRklMRV9IICovCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2hmcy9maWxlX3BsdXMuYyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvaGZzL2ZpbGVfcGx1cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMjZhNjUKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2hmcy9maWxlX3BsdXMuYwpAQCAtMCwwICsxLDI3NCBAQAorLyoKKyAgICBsaWJwYXJ0ZWQgLSBhIGxpYnJhcnkgZm9yIG1hbmlwdWxhdGluZyBkaXNrIHBhcnRpdGlvbnMKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCisqLworCisjaWZuZGVmIERJU0NPVkVSX09OTFkKKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaW5jbHVkZSA8cGFydGVkL3BhcnRlZC5oPgorI2luY2x1ZGUgPHBhcnRlZC9lbmRpYW4uaD4KKyNpbmNsdWRlIDxwYXJ0ZWQvZGVidWcuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2lmIEVOQUJMRV9OTFMKKyMgIGluY2x1ZGUgPGxpYmludGwuaD4KKyMgIGRlZmluZSBfKFN0cmluZykgZGdldHRleHQgKFBBQ0tBR0UsIFN0cmluZykKKyNlbHNlCisjICBkZWZpbmUgXyhTdHJpbmcpIChTdHJpbmcpCisjZW5kaWYgLyogRU5BQkxFX05MUyAqLworCisjaW5jbHVkZSAiaGZzLmgiCisjaW5jbHVkZSAiYWR2ZnNfcGx1cy5oIgorCisjaW5jbHVkZSAiZmlsZV9wbHVzLmgiCisKKy8qIE9wZW4gdGhlIGRhdGEgZm9yayBvZiBhIGZpbGUgd2l0aCBpdHMgZmlyc3QgZWlnaHQgZXh0ZW50cyBhbmQgaXRzIENOSUQgKi8KKy8qIENOSUQgYW5kIGV4dF9kZXNjIG11c3QgYmUgaW4gZGlzYyBvcmRlciwgc2VjdF9uYiBpbiBDUFUgb3JkZXIgKi8KKy8qIHJldHVybiBudWxsIG9uIGZhaWx1cmUgKi8KK0hmc1BQcml2YXRlRmlsZSoKK2hmc3BsdXNfZmlsZV9vcGVuIChQZWRGaWxlU3lzdGVtICpmcywgSGZzUE5vZGVJRCBDTklELAorCQkgICBIZnNQRXh0RGF0YVJlYyBleHRfZGVzYywgUGVkU2VjdG9yIHNlY3RfbmIpCit7CisJSGZzUFByaXZhdGVGaWxlKiBmaWxlOworCisJZmlsZSA9IChIZnNQUHJpdmF0ZUZpbGUqKSBwZWRfbWFsbG9jIChzaXplb2YgKEhmc1BQcml2YXRlRmlsZSkpOworCWlmICghZmlsZSkgcmV0dXJuIE5VTEw7CisKKwlmaWxlLT5mcyA9IGZzOworCWZpbGUtPnNlY3RfbmIgPSBzZWN0X25iOworCWZpbGUtPkNOSUQgPSBDTklEOworCW1lbWNweShmaWxlLT5maXJzdCwgZXh0X2Rlc2MsIHNpemVvZiAoSGZzUEV4dERhdGFSZWMpKTsKKwlmaWxlLT5zdGFydF9jYWNoZSA9IDA7CisKKwlyZXR1cm4gZmlsZTsKK30KKworLyogQ2xvc2UgYW4gSEZTKyBmaWxlICovCit2b2lkCitoZnNwbHVzX2ZpbGVfY2xvc2UgKEhmc1BQcml2YXRlRmlsZSogZmlsZSkKK3sKKwlwZWRfZnJlZSAoZmlsZSk7Cit9CisKKy8qIHdhcm5pbmcgOiBvbmx5IHdvcmtzIG9uIGRhdGEgZm9ya3MgKi8KK3N0YXRpYyBpbnQKK2hmc3BsdXNfZ2V0X2V4dGVudF9jb250YWluaW5nIChIZnNQUHJpdmF0ZUZpbGUqIGZpbGUsIHVuc2lnbmVkIGludCBibG9jaywKKwkJCSAgICAgICBIZnNQRXh0RGF0YVJlYyBjYWNoZSwgdWludDMyX3QqIHB0cl9zdGFydF9jYWNoZSkKK3sKKwl1aW50OF90CQkJcmVjb3JkW3NpemVvZiAoSGZzUEV4dGVudEtleSkKKwkJCQkgICAgICAgKyBzaXplb2YgKEhmc1BFeHREYXRhUmVjKV07CisJSGZzUEV4dGVudEtleQkJc2VhcmNoOworCUhmc1BFeHRlbnRLZXkqCQlyZXRfa2V5ID0gKEhmc1BFeHRlbnRLZXkqKSByZWNvcmQ7CisJSGZzUEV4dERlc2NyaXB0b3IqCXJldF9jYWNoZSA9IChIZnNQRXh0RGVzY3JpcHRvciopCisJCQkJCSAgICAgIChyZWNvcmQgKyBzaXplb2YgKEhmc1BFeHRlbnRLZXkpKTsKKwlIZnNQUHJpdmF0ZUZTRGF0YSogCXByaXZfZGF0YSA9IChIZnNQUHJpdmF0ZUZTRGF0YSopCisJCQkJCQlmaWxlLT5mcy0+dHlwZV9zcGVjaWZpYzsKKworCXNlYXJjaC5rZXlfbGVuZ3RoID0gUEVEX0NQVV9UT19CRTE2IChzaXplb2YgKEhmc1BFeHRlbnRLZXkpIC0gMik7CisJc2VhcmNoLnR5cGUgPSBIRlNfREFUQV9GT1JLOworCXNlYXJjaC5wYWQgPSAwOworCXNlYXJjaC5maWxlX0lEID0gZmlsZS0+Q05JRDsKKwlzZWFyY2guc3RhcnQgPSBQRURfQ1BVX1RPX0JFMzIgKGJsb2NrKTsKKworCWlmICghaGZzcGx1c19idHJlZV9zZWFyY2ggKHByaXZfZGF0YS0+ZXh0ZW50c19maWxlLAorCQkJCSAgIChIZnNQUHJpdmF0ZUdlbmVyaWNLZXkqKSAmc2VhcmNoLAorCQkJCSAgIHJlY29yZCwgc2l6ZW9mIChyZWNvcmQpLCBOVUxMKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAocmV0X2tleS0+ZmlsZV9JRCAhPSBzZWFyY2guZmlsZV9JRCB8fCByZXRfa2V5LT50eXBlICE9IHNlYXJjaC50eXBlKQorCQlyZXR1cm4gMDsKKworCW1lbWNweSAoY2FjaGUsIHJldF9jYWNoZSwgc2l6ZW9mKEhmc1BFeHREYXRhUmVjKSk7CisJKnB0cl9zdGFydF9jYWNoZSA9IFBFRF9CRTMyX1RPX0NQVSAocmV0X2tleS0+c3RhcnQpOworCisJcmV0dXJuIDE7Cit9CisKKy8qIGZpbmQgYSBzdWIgZXh0ZW50IGNvbnRhaW5lZCBpbiB0aGUgZGVzaXJlZCBhcmVhICovCisvKiBhbmQgd2l0aCB0aGUgc2FtZSBzdGFydGluZyBwb2ludCAqLworLyogcmV0dXJuIDAgaW4gc2VjdG9yX2NvdW50IG9uIGVycm9yLCBvciB0aGUgcGh5c2ljYWwgYXJlYSAqLworLyogb24gdGhlIHZvbHVtZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBsb2dpY2FsIGFyZWEgaW4gdGhlIGZpbGUgKi8KK3N0YXRpYyBIZnNQUHJpdmF0ZUV4dGVudAoraGZzcGx1c19maWxlX2ZpbmRfZXh0ZW50IChIZnNQUHJpdmF0ZUZpbGUqIGZpbGUsIFBlZFNlY3RvciBzZWN0b3IsCisJCQkgIHVuc2lnbmVkIGludCBuYikKK3sKKwlIZnNQUHJpdmF0ZUV4dGVudCByZXQgPSB7MCwwfTsKKwlIZnNQUHJpdmF0ZUZTRGF0YSogcHJpdl9kYXRhID0gKEhmc1BQcml2YXRlRlNEYXRhKikKKwkJCQkJZmlsZS0+ZnMtPnR5cGVfc3BlY2lmaWM7CisJdW5zaWduZWQgaW50CXNlY3RfYnlfYmxvY2sgPSBQRURfQkUzMl9UT19DUFUgKAorCQkJCQkgICAgcHJpdl9kYXRhLT52aC0+YmxvY2tfc2l6ZSkKKwkJCQkJLyBQRURfU0VDVE9SX1NJWkVfREVGQVVMVDsKKwl1bnNpZ25lZCBpbnQJaSwgcywgdm9sX2Jsb2NrLCBzaXplOworCVBlZFNlY3RvcglzZWN0X3NpemU7CisJdW5zaWduZWQgaW50CWJsb2NrICA9IHNlY3RvciAvIHNlY3RfYnlfYmxvY2s7CisJdW5zaWduZWQgaW50CW9mZnNldCA9IHNlY3RvciAlIHNlY3RfYnlfYmxvY2s7CisKKwkvKiBpbiB0aGUgOCBmaXJzdCBleHRlbnQgKi8KKwlmb3IgKHMgPSAwLCBpID0gMDsgaSA8IEhGU1BfRVhUX05COyBpKyspIHsKKwkJaWYgKChibG9jayA+PSBzKSAmJiAoYmxvY2sgPCBzICsgUEVEX0JFMzJfVE9fQ1BVICgKKwkJCQkJCWZpbGUtPmZpcnN0W2ldLmJsb2NrX2NvdW50KSkpIHsKKwkJCXZvbF9ibG9jayA9IChibG9jayAtIHMpCisJCQkJICAgICsgUEVEX0JFMzJfVE9fQ1BVIChmaWxlLT5maXJzdFtpXQorCQkJCQkJICAgICAgIC5zdGFydF9ibG9jayk7CisJCQlzaXplID0gUEVEX0JFMzJfVE9fQ1BVIChmaWxlLT5maXJzdFtpXS5ibG9ja19jb3VudCkKKwkJCQkrIHMgLSBibG9jazsKKwkJCWdvdG8gcGx1c19zZWN0b3JfZm91bmQ7CisJCX0KKwkJcyArPSBQRURfQkUzMl9UT19DUFUgKGZpbGUtPmZpcnN0W2ldLmJsb2NrX2NvdW50KTsKKwl9CisKKwkvKiBpbiB0aGUgOCBjYWNoZWQgZXh0ZW50ICovCisJaWYgKGZpbGUtPnN0YXJ0X2NhY2hlICYmIGJsb2NrID49IGZpbGUtPnN0YXJ0X2NhY2hlKQorCWZvciAocyA9IGZpbGUtPnN0YXJ0X2NhY2hlLCBpID0gMDsgaSA8IEhGU1BfRVhUX05COyBpKyspIHsKKwkJaWYgKChibG9jayA+PSBzKSAmJiAoYmxvY2sgPCBzICsgUEVEX0JFMzJfVE9fQ1BVICgKKwkJCQkJCWZpbGUtPmNhY2hlW2ldLmJsb2NrX2NvdW50KSkpIHsKKwkJCXZvbF9ibG9jayA9IChibG9jayAtIHMpCisJCQkJICAgICsgUEVEX0JFMzJfVE9fQ1BVIChmaWxlLT5jYWNoZVtpXQorCQkJCQkJICAgICAgIC5zdGFydF9ibG9jayk7CisJCQlzaXplID0gUEVEX0JFMzJfVE9fQ1BVIChmaWxlLT5jYWNoZVtpXS5ibG9ja19jb3VudCkKKwkJCQkrIHMgLSBibG9jazsKKwkJCWdvdG8gcGx1c19zZWN0b3JfZm91bmQ7CisJCX0KKwkJcyArPSBQRURfQkUzMl9UT19DUFUgKGZpbGUtPmNhY2hlW2ldLmJsb2NrX2NvdW50KTsKKwl9CisKKwkvKiB1cGRhdGUgY2FjaGUgKi8KKwlpZiAoIWhmc3BsdXNfZ2V0X2V4dGVudF9jb250YWluaW5nIChmaWxlLCBibG9jaywgZmlsZS0+Y2FjaGUsCisJCQkJCSAgICAmKGZpbGUtPnN0YXJ0X2NhY2hlKSkpIHsKKwkJcGVkX2V4Y2VwdGlvbl90aHJvdyAoCisJCQlQRURfRVhDRVBUSU9OX1dBUk5JTkcsCisJCQlQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCV8oIkNvdWxkIG5vdCB1cGRhdGUgdGhlIGV4dGVudCBjYWNoZSBmb3IgSEZTKyBmaWxlICIKKwkJCSAgIndpdGggQ05JRCAlWC4iKSwKKwkJCVBFRF9CRTMyX1RPX0NQVShmaWxlLT5DTklEKSk7CisJCXJldHVybiByZXQ7IC8qIHJldCA9PSB7MCwwfSAqLworCX0KKworCS8qIHJldCA9PSB7MCwwfSAqLworCVBFRF9BU1NFUlQoZmlsZS0+c3RhcnRfY2FjaGUgJiYgYmxvY2sgPj0gZmlsZS0+c3RhcnRfY2FjaGUsIHJldHVybiByZXQpOworCisJZm9yIChzID0gZmlsZS0+c3RhcnRfY2FjaGUsIGkgPSAwOyBpIDwgSEZTUF9FWFRfTkI7IGkrKykgeworCQlpZiAoKGJsb2NrID49IHMpICYmIChibG9jayA8IHMgKyBQRURfQkUzMl9UT19DUFUgKAorCQkJCQkJZmlsZS0+Y2FjaGVbaV0uYmxvY2tfY291bnQpKSkgeworCQkJdm9sX2Jsb2NrID0gKGJsb2NrIC0gcykKKwkJCQkgICAgKyBQRURfQkUzMl9UT19DUFUgKGZpbGUtPmNhY2hlW2ldCisJCQkJCQkgICAgICAgLnN0YXJ0X2Jsb2NrKTsKKwkJCXNpemUgPSBQRURfQkUzMl9UT19DUFUgKGZpbGUtPmNhY2hlW2ldLmJsb2NrX2NvdW50KQorCQkJCSsgcyAtIGJsb2NrOworCQkJZ290byBwbHVzX3NlY3Rvcl9mb3VuZDsKKwkJfQorCQlzICs9IFBFRF9CRTMyX1RPX0NQVSAoZmlsZS0+Y2FjaGVbaV0uYmxvY2tfY291bnQpOworCX0KKworCXJldHVybiByZXQ7CisKK3BsdXNfc2VjdG9yX2ZvdW5kOgorCXNlY3Rfc2l6ZSA9IChQZWRTZWN0b3IpIHNpemUgKiBzZWN0X2J5X2Jsb2NrIC0gb2Zmc2V0OworCXJldC5zdGFydF9zZWN0b3IgPSB2b2xfYmxvY2sgKiBzZWN0X2J5X2Jsb2NrICsgb2Zmc2V0OworCXJldC5zZWN0b3JfY291bnQgPSAoc2VjdF9zaXplIDwgbmIpID8gc2VjdF9zaXplIDogbmI7CisJcmV0dXJuIHJldDsKK30KKworaW50CitoZnNwbHVzX2ZpbGVfcmVhZChIZnNQUHJpdmF0ZUZpbGUqIGZpbGUsIHZvaWQgKmJ1ZiwgUGVkU2VjdG9yIHNlY3RvciwKKwkJICB1bnNpZ25lZCBpbnQgbmIpCit7CisJSGZzUFByaXZhdGVFeHRlbnQgcGh5X2FyZWE7CisJSGZzUFByaXZhdGVGU0RhdGEqIHByaXZfZGF0YSA9IChIZnNQUHJpdmF0ZUZTRGF0YSopCisJCQkJCWZpbGUtPmZzLT50eXBlX3NwZWNpZmljOworICAgICAgICBjaGFyICpiID0gYnVmOworCisJaWYgKHNlY3RvcituYiA8IHNlY3RvciAvKiBkZXRlY3Qgb3ZlcmZsb3cgKi8KKwkgICAgfHwgc2VjdG9yK25iID4gZmlsZS0+c2VjdF9uYikgLyogb3V0IG9mIGZpbGUgKi8geworCQlwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCVBFRF9FWENFUFRJT05fRVJST1IsCisJCQlQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCV8oIlRyeWluZyB0byByZWFkIEhGUysgZmlsZSB3aXRoIENOSUQgJVggYmVoaW5kIEVPRi4iKSwKKwkJCVBFRF9CRTMyX1RPX0NQVShmaWxlLT5DTklEKSk7CisJCXJldHVybiAwOworCX0KKworCXdoaWxlIChuYikgeworCQlwaHlfYXJlYSA9IGhmc3BsdXNfZmlsZV9maW5kX2V4dGVudChmaWxlLCBzZWN0b3IsIG5iKTsKKwkJaWYgKHBoeV9hcmVhLnNlY3Rvcl9jb3VudCA9PSAwKSB7CisJCQlwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCQlQRURfRVhDRVBUSU9OX0VSUk9SLAorCQkJCVBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJCV8oIkNvdWxkIG5vdCBmaW5kIHNlY3RvciAlbGxpIG9mIEhGUysgZmlsZSAiCisJCQkJICAid2l0aCBDTklEICVYLiIpLAorCQkJCXNlY3RvciwgUEVEX0JFMzJfVE9fQ1BVKGZpbGUtPkNOSUQpKTsKKwkJCXJldHVybiAwOworCQl9CisgICAgICAgICAgICAgICAgaWYgKCFwZWRfZ2VvbWV0cnlfcmVhZChwcml2X2RhdGEtPnBsdXNfZ2VvbSwgYiwKKwkJCQkgICAgICAgcGh5X2FyZWEuc3RhcnRfc2VjdG9yLAorCQkJCSAgICAgICBwaHlfYXJlYS5zZWN0b3JfY291bnQpKQorCQkJcmV0dXJuIDA7CisKKwkJbmIgLT0gcGh5X2FyZWEuc2VjdG9yX2NvdW50OyAvKiA8IG5iIGFueXdheSAuLi4gKi8KKwkJc2VjdG9yICs9IHBoeV9hcmVhLnNlY3Rvcl9jb3VudDsKKyAgICAgICAgICAgICAgICBiICs9IHBoeV9hcmVhLnNlY3Rvcl9jb3VudCAqIFBFRF9TRUNUT1JfU0laRV9ERUZBVUxUOworCX0KKworCXJldHVybiAxOworfQorCitpbnQKK2hmc3BsdXNfZmlsZV93cml0ZShIZnNQUHJpdmF0ZUZpbGUqIGZpbGUsIHZvaWQgKmJ1ZiwgUGVkU2VjdG9yIHNlY3RvciwKKwkJICB1bnNpZ25lZCBpbnQgbmIpCit7CisJSGZzUFByaXZhdGVFeHRlbnQgcGh5X2FyZWE7CisJSGZzUFByaXZhdGVGU0RhdGEqIHByaXZfZGF0YSA9IChIZnNQUHJpdmF0ZUZTRGF0YSopCisJCQkJCWZpbGUtPmZzLT50eXBlX3NwZWNpZmljOworICAgICAgICBjaGFyICpiID0gYnVmOworCisJaWYgKHNlY3RvcituYiA8IHNlY3RvciAvKiBkZXRlY3Qgb3ZlcmZsb3cgKi8KKwkgICAgfHwgc2VjdG9yK25iID4gZmlsZS0+c2VjdF9uYikgLyogb3V0IG9mIGZpbGUgKi8geworCQlwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCVBFRF9FWENFUFRJT05fRVJST1IsCisJCQlQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCV8oIlRyeWluZyB0byB3cml0ZSBIRlMrIGZpbGUgd2l0aCBDTklEICVYIGJlaGluZCBFT0YuIiksCisJCQlQRURfQkUzMl9UT19DUFUoZmlsZS0+Q05JRCkpOworCQlyZXR1cm4gMDsKKwl9CisKKwl3aGlsZSAobmIpIHsKKwkJcGh5X2FyZWEgPSBoZnNwbHVzX2ZpbGVfZmluZF9leHRlbnQoZmlsZSwgc2VjdG9yLCBuYik7CisJCWlmIChwaHlfYXJlYS5zZWN0b3JfY291bnQgPT0gMCkgeworCQkJcGVkX2V4Y2VwdGlvbl90aHJvdyAoCisJCQkJUEVEX0VYQ0VQVElPTl9FUlJPUiwKKwkJCQlQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCQlfKCJDb3VsZCBub3QgZmluZCBzZWN0b3IgJWxsaSBvZiBIRlMrIGZpbGUgIgorCQkJCSAgIndpdGggQ05JRCAlWC4iKSwKKwkJCQlzZWN0b3IsIFBFRF9CRTMyX1RPX0NQVShmaWxlLT5DTklEKSk7CisJCQlyZXR1cm4gMDsKKwkJfQorICAgICAgICAgICAgICAgIGlmICghcGVkX2dlb21ldHJ5X3dyaXRlKHByaXZfZGF0YS0+cGx1c19nZW9tLCBiLAorCQkJCSAgICAgICBwaHlfYXJlYS5zdGFydF9zZWN0b3IsCisJCQkJICAgICAgIHBoeV9hcmVhLnNlY3Rvcl9jb3VudCkpCisJCQlyZXR1cm4gMDsKKworCQluYiAtPSBwaHlfYXJlYS5zZWN0b3JfY291bnQ7IC8qIDwgbmIgYW55d2F5IC4uLiAqLworCQlzZWN0b3IgKz0gcGh5X2FyZWEuc2VjdG9yX2NvdW50OworICAgICAgICAgICAgICAgIGIgKz0gcGh5X2FyZWEuc2VjdG9yX2NvdW50ICogUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQ7CisJfQorCisJcmV0dXJuIDE7Cit9CisKKyNlbmRpZiAvKiAhRElTQ09WRVJfT05MWSAqLwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9oZnMvZmlsZV9wbHVzLmggYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2hmcy9maWxlX3BsdXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjQ4NTU0Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9oZnMvZmlsZV9wbHVzLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAgICBsaWJwYXJ0ZWQgLSBhIGxpYnJhcnkgZm9yIG1hbmlwdWxhdGluZyBkaXNrIHBhcnRpdGlvbnMKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCisqLworCisjaWZuZGVmIF9GSUxFX1BMVVNfSAorI2RlZmluZSBfRklMRV9QTFVTX0gKKworI2luY2x1ZGUgPHBhcnRlZC9wYXJ0ZWQuaD4KKyNpbmNsdWRlIDxwYXJ0ZWQvZW5kaWFuLmg+CisjaW5jbHVkZSA8cGFydGVkL2RlYnVnLmg+CisKKyNpbmNsdWRlICJoZnMuaCIKKworSGZzUFByaXZhdGVGaWxlKgoraGZzcGx1c19maWxlX29wZW4gKFBlZEZpbGVTeXN0ZW0gKmZzLCBIZnNQTm9kZUlEIENOSUQsCisJCSAgIEhmc1BFeHREYXRhUmVjIGV4dF9kZXNjLCBQZWRTZWN0b3Igc2VjdF9uYik7CisKK3ZvaWQKK2hmc3BsdXNfZmlsZV9jbG9zZSAoSGZzUFByaXZhdGVGaWxlKiBmaWxlKTsKKworaW50CitoZnNwbHVzX2ZpbGVfcmVhZChIZnNQUHJpdmF0ZUZpbGUqIGZpbGUsIHZvaWQgKmJ1ZiwKKwkJICBQZWRTZWN0b3Igc2VjdG9yLCB1bnNpZ25lZCBpbnQgbmIpOworCitpbnQKK2hmc3BsdXNfZmlsZV93cml0ZShIZnNQUHJpdmF0ZUZpbGUqIGZpbGUsIHZvaWQgKmJ1ZiwKKwkJICBQZWRTZWN0b3Igc2VjdG9yLCB1bnNpZ25lZCBpbnQgbmIpOworCisvKiBSZWFkIHRoZSBudGggc2VjdG9yIG9mIGEgZmlsZSAqLworLyogcmV0dXJuIDAgb24gZXJyb3IgKi8KK3N0YXRpYyBfX2lubGluZV9fIGludAoraGZzcGx1c19maWxlX3JlYWRfc2VjdG9yIChIZnNQUHJpdmF0ZUZpbGUqIGZpbGUsIHZvaWQgKmJ1ZiwgUGVkU2VjdG9yIHNlY3RvcikKK3sKKwlyZXR1cm4gaGZzcGx1c19maWxlX3JlYWQoZmlsZSwgYnVmLCBzZWN0b3IsIDEpOworfQorCisvKiBXcml0ZSB0aGUgbnRoIHNlY3RvciBvZiBhIGZpbGUgKi8KKy8qIHJldHVybiAwIG9uIGVycm9yICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQKK2hmc3BsdXNfZmlsZV93cml0ZV9zZWN0b3IgKEhmc1BQcml2YXRlRmlsZSogZmlsZSwgdm9pZCAqYnVmLCBQZWRTZWN0b3Igc2VjdG9yKQoreworCXJldHVybiBoZnNwbHVzX2ZpbGVfd3JpdGUoZmlsZSwgYnVmLCBzZWN0b3IsIDEpOworfQorCisKKyNlbmRpZiAvKiBfRklMRV9QTFVTX0ggKi8KZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvaGZzL2hmcy5jIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9oZnMvaGZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMyM2NjMAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvaGZzL2hmcy5jCkBAIC0wLDAgKzEsMTM1NCBAQAorLyoKKyAgICBsaWJwYXJ0ZWQgLSBhIGxpYnJhcnkgZm9yIG1hbmlwdWxhdGluZyBkaXNrIHBhcnRpdGlvbnMKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCisqLworCisvKiAKKyAgIEF1dGhvciA6IEd1aWxsYXVtZSBLbmlzcGVsIDxrX2d1aWxsYXVtZUBsaWJlcnR5c3VyZi5mcj4gCisgICBSZXBvcnQgYnVnIHRvIDxidWctcGFydGVkQGdudS5vcmc+CisqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpbmNsdWRlIDxwYXJ0ZWQvcGFydGVkLmg+CisjaW5jbHVkZSA8cGFydGVkL2VuZGlhbi5oPgorI2luY2x1ZGUgPHBhcnRlZC9kZWJ1Zy5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaWYgRU5BQkxFX05MUworIyAgaW5jbHVkZSA8bGliaW50bC5oPgorIyAgZGVmaW5lIF8oU3RyaW5nKSBkZ2V0dGV4dCAoUEFDS0FHRSwgU3RyaW5nKQorI2Vsc2UKKyMgIGRlZmluZSBfKFN0cmluZykgKFN0cmluZykKKyNlbmRpZiAvKiBFTkFCTEVfTkxTICovCisKKyNpbmNsdWRlICJoZnMuaCIKKyNpbmNsdWRlICJwcm9iZS5oIgorCit1aW50OF90KiBoZnNfYmxvY2sgPSBOVUxMOwordWludDhfdCogaGZzcF9ibG9jayA9IE5VTEw7Cit1bnNpZ25lZCBoZnNfYmxvY2tfY291bnQ7Cit1bnNpZ25lZCBoZnNwX2Jsb2NrX2NvdW50OworCisjZGVmaW5lIEhGU19CTE9DS19TSVpFUyAgICAgICAoKGludFsyXSl7NTEyLCAwfSkKKyNkZWZpbmUgSEZTUF9CTE9DS19TSVpFUyAgICAgICAoKGludFsyXSl7NTEyLCAwfSkKKyNkZWZpbmUgSEZTWF9CTE9DS19TSVpFUyAgICAgICAoKGludFsyXSl7NTEyLCAwfSkKKworI2lmbmRlZiBESVNDT1ZFUl9PTkxZCisjaW5jbHVkZSAiZmlsZS5oIgorI2luY2x1ZGUgInJlbG9jLmgiCisjaW5jbHVkZSAiYWR2ZnMuaCIKKworc3RhdGljIFBlZEZpbGVTeXN0ZW1UeXBlIGhmc190eXBlOworc3RhdGljIFBlZEZpbGVTeXN0ZW1UeXBlIGhmc3BsdXNfdHlwZTsKKworCisvKiAtLS0tLSBIRlMgLS0tLS0gKi8KKworLyogVGhpcyBpcyBhIHZlcnkgdW51bmRvYWJsZSBvcGVyYXRpb24gKi8KKy8qIE1heWJlIEkgc2hvdWxkbid0IHRvdWNoIHRoZSBhbHRlcm5hdGUgTURCID8gKi8KKy8qIEFueXdheSBjbG9iYmVyIGlzIGNhbGwgYmVmb3JlIG90aGVyIGZzIGNyZWF0aW9uICovCisvKiBTbyB0aGlzIGlzIGEgbm9uLWlzc3VlICovCitzdGF0aWMgaW50CitoZnNfY2xvYmJlciAoUGVkR2VvbWV0cnkqIGdlb20pCit7CisJdWludDhfdAlidWZbUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFRdOworCisJbWVtc2V0IChidWYsIDAsIFBFRF9TRUNUT1JfU0laRV9ERUZBVUxUKTsKKwkKKwkvKiBkZXN0cm95IGJvb3QgYmxvY2tzLCBtZGIsIGFsdGVybmF0ZSBtZGIgLi4uICovCisJcmV0dXJuCSghIXBlZF9nZW9tZXRyeV93cml0ZSAoZ2VvbSwgYnVmLCAwLCAxKSkgJgorCQkoISFwZWRfZ2VvbWV0cnlfd3JpdGUgKGdlb20sIGJ1ZiwgMSwgMSkpICYKKwkJKCEhcGVkX2dlb21ldHJ5X3dyaXRlIChnZW9tLCBidWYsIDIsIDEpKSAmCisJCSghIXBlZF9nZW9tZXRyeV93cml0ZSAoZ2VvbSwgYnVmLCBnZW9tLT5sZW5ndGggLSAyLCAxKSkgJgorCQkoISFwZWRfZ2VvbWV0cnlfd3JpdGUgKGdlb20sIGJ1ZiwgZ2VvbS0+bGVuZ3RoIC0gMSwgMSkpICYKKwkJKCEhcGVkX2dlb21ldHJ5X3N5bmMgIChnZW9tKSk7Cit9CisKK3N0YXRpYyBQZWRGaWxlU3lzdGVtKgoraGZzX29wZW4gKFBlZEdlb21ldHJ5KiBnZW9tKQoreworCXVpbnQ4X3QJCQlidWZbUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFRdOworCVBlZEZpbGVTeXN0ZW0qCQlmczsKKwlIZnNNYXN0ZXJEaXJlY3RvcnlCbG9jayogbWRiOworCUhmc1ByaXZhdGVGU0RhdGEqIAlwcml2X2RhdGE7CisKKwlpZiAoIWhmc2NfY2FuX3VzZV9nZW9tIChnZW9tKSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBSZWFkIE1EQiAqLworCWlmICghcGVkX2dlb21ldHJ5X3JlYWQgKGdlb20sIGJ1ZiwgMiwgMSkpCisJCXJldHVybiBOVUxMOworCQorCS8qIEFsbG9jYXRlIG1lbW9yeSAqLworCWZzID0gKFBlZEZpbGVTeXN0ZW0qKSBwZWRfbWFsbG9jIChzaXplb2YgKFBlZEZpbGVTeXN0ZW0pKTsKKwlpZiAoIWZzKSBnb3RvIGhvOworCW1kYiA9IChIZnNNYXN0ZXJEaXJlY3RvcnlCbG9jayopCisJCXBlZF9tYWxsb2MgKHNpemVvZiAoSGZzTWFzdGVyRGlyZWN0b3J5QmxvY2spKTsKKwlpZiAoIW1kYikgZ290byBob19mczsKKwlwcml2X2RhdGEgPSAoSGZzUHJpdmF0ZUZTRGF0YSopCisJCXBlZF9tYWxsb2MgKHNpemVvZiAoSGZzUHJpdmF0ZUZTRGF0YSkpOworCWlmICghcHJpdl9kYXRhKSBnb3RvIGhvX21kYjsKKworCW1lbWNweSAobWRiLCBidWYsIHNpemVvZiAoSGZzTWFzdGVyRGlyZWN0b3J5QmxvY2spKTsKKworCS8qIGluaXQgc3RydWN0dXJlcyAqLworCXByaXZfZGF0YS0+bWRiID0gbWRiOworCXByaXZfZGF0YS0+YmFkX2Jsb2Nrc19sb2FkZWQgPSAwOworCXByaXZfZGF0YS0+YmFkX2Jsb2Nrc194dGVudF9uYiA9IDA7CisJcHJpdl9kYXRhLT5iYWRfYmxvY2tzX3h0ZW50X2xpc3QgPSBOVUxMOworCXByaXZfZGF0YS0+ZXh0ZW50X2ZpbGUgPQorCSAgICBoZnNfZmlsZV9vcGVuIChmcywgUEVEX0NQVV9UT19CRTMyIChIRlNfWFRFTlRfSUQpLAorCQkJICAgbWRiLT5leHRlbnRzX2ZpbGVfcmVjLAorCQkJICAgUEVEX0NQVV9UT19CRTMyIChtZGItPmV4dGVudHNfZmlsZV9zaXplKQorCQkJICAgLyBQRURfU0VDVE9SX1NJWkVfREVGQVVMVCk7CisJaWYgKCFwcml2X2RhdGEtPmV4dGVudF9maWxlKSBnb3RvIGhvX3BkOworCXByaXZfZGF0YS0+Y2F0YWxvZ19maWxlID0KKwkgICAgaGZzX2ZpbGVfb3BlbiAoZnMsIFBFRF9DUFVfVE9fQkUzMiAoSEZTX0NBVEFMT0dfSUQpLAorCQkJICAgbWRiLT5jYXRhbG9nX2ZpbGVfcmVjLAorCQkJICAgUEVEX0NQVV9UT19CRTMyIChtZGItPmNhdGFsb2dfZmlsZV9zaXplKQorCQkJICAgLyBQRURfU0VDVE9SX1NJWkVfREVGQVVMVCk7CisJaWYgKCFwcml2X2RhdGEtPmNhdGFsb2dfZmlsZSkgZ290byBob19jZTsKKwkvKiBSZWFkIGFsbG9jYXRpb24gYmxvY2tzICovCisJaWYgKCFwZWRfZ2VvbWV0cnlfcmVhZChnZW9tLCBwcml2X2RhdGEtPmFsbG9jX21hcCwKKwkJCSAgICAgICBQRURfQkUxNl9UT19DUFUgKG1kYi0+dm9sdW1lX2JpdG1hcF9ibG9jayksCisJCQkgICAgICAgKCBQRURfQkUxNl9UT19DUFUgKG1kYi0+dG90YWxfYmxvY2tzKQorCQkJICAgICAgICAgKyBQRURfU0VDVE9SX1NJWkVfREVGQVVMVCAqIDggLSAxICkKKwkJCSAgICAgICAvIChQRURfU0VDVE9SX1NJWkVfREVGQVVMVCAqIDgpICkgKQorCQlnb3RvIGhvX2NmOworCisJZnMtPnR5cGUgPSAmaGZzX3R5cGU7CisJZnMtPmdlb20gPSBwZWRfZ2VvbWV0cnlfZHVwbGljYXRlIChnZW9tKTsKKwlpZiAoIWZzLT5nZW9tKSBnb3RvIGhvX2NmOworCWZzLT50eXBlX3NwZWNpZmljID0gKHZvaWQqKSBwcml2X2RhdGE7CisJZnMtPmNoZWNrZWQgPSAoIFBFRF9CRTE2X1RPX0NQVSAobWRiLT52b2x1bWVfYXR0cmlidXRlcykKKwkJCT4+IEhGU19VTk1PVU5URUQgKSAmIDE7CisKKwlyZXR1cm4gZnM7CisKKy8qLS0tIGNsZWFuIGVycm9yIGhhbmRsaW5nIC0tLSovCitob19jZjoJaGZzX2ZpbGVfY2xvc2UocHJpdl9kYXRhLT5jYXRhbG9nX2ZpbGUpOworaG9fY2U6CWhmc19maWxlX2Nsb3NlKHByaXZfZGF0YS0+ZXh0ZW50X2ZpbGUpOworaG9fcGQ6CXBlZF9mcmVlKHByaXZfZGF0YSk7Citob19tZGI6IHBlZF9mcmVlKG1kYik7Citob19mczoJcGVkX2ZyZWUoZnMpOworaG86CXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50CitoZnNfY2xvc2UgKFBlZEZpbGVTeXN0ZW0gKmZzKQoreworCUhmc1ByaXZhdGVGU0RhdGEqIHByaXZfZGF0YSA9IChIZnNQcml2YXRlRlNEYXRhKikgZnMtPnR5cGVfc3BlY2lmaWM7CisKKwloZnNfZmlsZV9jbG9zZSAocHJpdl9kYXRhLT5leHRlbnRfZmlsZSk7CisJaGZzX2ZpbGVfY2xvc2UgKHByaXZfZGF0YS0+Y2F0YWxvZ19maWxlKTsKKwlpZiAocHJpdl9kYXRhLT5iYWRfYmxvY2tzX2xvYWRlZCkKKwkJaGZzX2ZyZWVfYmFkX2Jsb2Nrc19saXN0IChwcml2X2RhdGEtPmJhZF9ibG9ja3NfeHRlbnRfbGlzdCk7CisJcGVkX2ZyZWUgKHByaXZfZGF0YS0+bWRiKTsKKwlwZWRfZnJlZSAocHJpdl9kYXRhKTsKKwlwZWRfZ2VvbWV0cnlfZGVzdHJveSAoZnMtPmdlb20pOworCXBlZF9mcmVlIChmcyk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIFBlZENvbnN0cmFpbnQqIAoraGZzX2dldF9yZXNpemVfY29uc3RyYWludCAoY29uc3QgUGVkRmlsZVN5c3RlbSAqZnMpCit7CisJUGVkRGV2aWNlKglkZXYgPSBmcy0+Z2VvbS0+ZGV2OworCVBlZEFsaWdubWVudAlzdGFydF9hbGlnbjsKKwlQZWRHZW9tZXRyeQlzdGFydF9zZWN0b3I7CisJUGVkR2VvbWV0cnkJZnVsbF9kZXY7CisJUGVkU2VjdG9yCW1pbl9zaXplOworCisJaWYgKCFwZWRfYWxpZ25tZW50X2luaXQgKCZzdGFydF9hbGlnbiwgZnMtPmdlb20tPnN0YXJ0LCAwKSkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKCFwZWRfZ2VvbWV0cnlfaW5pdCAoJnN0YXJ0X3NlY3RvciwgZGV2LCBmcy0+Z2VvbS0+c3RhcnQsIDEpKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAoIXBlZF9nZW9tZXRyeV9pbml0ICgmZnVsbF9kZXYsIGRldiwgMCwgZGV2LT5sZW5ndGggLSAxKSkKKwkJcmV0dXJuIE5VTEw7CisJLyogMiA9IGxhc3QgdHdvIHNlY3RvcnMgKGFsdGVybmF0ZSBNREIgYW5kIHVudXNlZCBzZWN0b3IpICovCisJbWluX3NpemUgPSBoZnNfZ2V0X2VtcHR5X2VuZChmcykgKyAyOworCWlmIChtaW5fc2l6ZSA9PSAyKSByZXR1cm4gTlVMTDsKKworCXJldHVybiBwZWRfY29uc3RyYWludF9uZXcgKCZzdGFydF9hbGlnbiwgcGVkX2FsaWdubWVudF9hbnksCisJCQkJICAgJnN0YXJ0X3NlY3RvciwgJmZ1bGxfZGV2LCBtaW5fc2l6ZSwKKwkJCQkgICBmcy0+Z2VvbS0+bGVuZ3RoKTsKK30KKworc3RhdGljIGludAoraGZzX3Jlc2l6ZSAoUGVkRmlsZVN5c3RlbSogZnMsIFBlZEdlb21ldHJ5KiBnZW9tLCBQZWRUaW1lciogdGltZXIpCit7CisJdWludDhfdAkJCWJ1ZltQRURfU0VDVE9SX1NJWkVfREVGQVVMVF07CisJdW5zaWduZWQgaW50CQluYmxvY2ssIG5mcmVlOworCXVuc2lnbmVkIGludAkJYmxvY2ssIHRvX2ZyZWU7CisJSGZzUHJpdmF0ZUZTRGF0YSogCXByaXZfZGF0YTsKKwlIZnNNYXN0ZXJEaXJlY3RvcnlCbG9jayogbWRiOworCWludAkJCXJlc2l6ZSA9IDE7CisJdW5zaWduZWQgaW50CQloZnNfc2VjdF9ibG9jazsKKwlQZWRTZWN0b3IJCWhnZWU7CisKKwkvKiBjaGVjayBwcmVjb25kaXRpb25zICovCisJUEVEX0FTU0VSVCAoZnMgIT0gTlVMTCwgcmV0dXJuIDApOworCVBFRF9BU1NFUlQgKGZzLT5nZW9tICE9IE5VTEwsIHJldHVybiAwKTsKKwlQRURfQVNTRVJUIChnZW9tICE9IE5VTEwsIHJldHVybiAwKTsKKyNpZmRlZiBERUJVRworICAgICAgICBQRURfQVNTRVJUICgoaGdlZSA9IGhmc19nZXRfZW1wdHlfZW5kKGZzKSkgIT0gMCwgcmV0dXJuIDApOworI2Vsc2UKKyAgICAgICAgaWYgKChoZ2VlID0gaGZzX2dldF9lbXB0eV9lbmQoZnMpKSA9PSAwKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworI2VuZGlmCisKKwlQRURfQVNTRVJUICgoaGdlZSA9IGhmc19nZXRfZW1wdHlfZW5kKGZzKSkgIT0gMCwgcmV0dXJuIDApOworCisJaWYgKHBlZF9nZW9tZXRyeV90ZXN0X2VxdWFsKGZzLT5nZW9tLCBnZW9tKSkKKwkJcmV0dXJuIDE7CisKKwlwcml2X2RhdGEgPSAoSGZzUHJpdmF0ZUZTRGF0YSopIGZzLT50eXBlX3NwZWNpZmljOworCW1kYiA9IHByaXZfZGF0YS0+bWRiOworCWhmc19zZWN0X2Jsb2NrID0gUEVEX0JFMzJfVE9fQ1BVIChtZGItPmJsb2NrX3NpemUpCisJCQkgLyBQRURfU0VDVE9SX1NJWkVfREVGQVVMVDsKKworCWlmIChmcy0+Z2VvbS0+c3RhcnQgIT0gZ2VvbS0+c3RhcnQKKwkgICAgfHwgZ2VvbS0+bGVuZ3RoID4gZnMtPmdlb20tPmxlbmd0aAorCSAgICB8fCBnZW9tLT5sZW5ndGggPCBoZ2VlICsgMikgeworCQlwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCVBFRF9FWENFUFRJT05fTk9fRkVBVFVSRSwKKwkJCVBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJXygiU29ycnksIEhGUyBjYW5ub3QgYmUgcmVzaXplZCB0aGF0IHdheSB5ZXQuIikpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBGbHVzaCBjYWNoZXMgKi8KKwlpZiAoIXBlZF9nZW9tZXRyeV9zeW5jKGZzLT5nZW9tKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBDbGVhciB0aGUgdW5tb3VudGVkIGJpdCAqLworCW1kYi0+dm9sdW1lX2F0dHJpYnV0ZXMgJj0gUEVEX0NQVV9UT19CRTE2ICh+KCAxIDw8IEhGU19VTk1PVU5URUQgKSk7CisJaWYgKCFwZWRfZ2VvbWV0cnlfcmVhZCAoZnMtPmdlb20sIGJ1ZiwgMiwgMSkpCisJCXJldHVybiAwOworCW1lbWNweSAoYnVmLCBtZGIsIHNpemVvZiAoSGZzTWFzdGVyRGlyZWN0b3J5QmxvY2spKTsKKwlpZiAoICAgIXBlZF9nZW9tZXRyeV93cml0ZSAoZnMtPmdlb20sIGJ1ZiwgMiwgMSkKKwkgICAgfHwgIXBlZF9nZW9tZXRyeV9zeW5jICAoZnMtPmdlb20pKQorCQlyZXR1cm4gMDsKKworCXBlZF90aW1lcl9yZXNldCAodGltZXIpOworCXBlZF90aW1lcl9zZXRfc3RhdGVfbmFtZSh0aW1lciwgXygic2hyaW5raW5nIikpOworCXBlZF90aW1lcl91cGRhdGUodGltZXIsIDAuMCk7CisJLyogcmVsb2NhdGUgZGF0YSAqLworCXRvX2ZyZWUgPSAoIGZzLT5nZW9tLT5sZW5ndGggLSBnZW9tLT5sZW5ndGgKKwkJICAgICsgaGZzX3NlY3RfYmxvY2sgLSAxICkKKwkJICAvIGhmc19zZWN0X2Jsb2NrIDsKKwlibG9jayA9IGhmc19maW5kX3N0YXJ0X3BhY2sgKGZzLCB0b19mcmVlKTsKKwlpZiAoIWhmc19wYWNrX2ZyZWVfc3BhY2VfZnJvbV9ibG9jayAoZnMsIGJsb2NrLAl0aW1lciwgdG9fZnJlZSkpIHsKKwkJcmVzaXplID0gMDsKKwkJcGVkX2V4Y2VwdGlvbl90aHJvdyAoCisJCQlQRURfRVhDRVBUSU9OX0VSUk9SLAorCQkJUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQlfKCJEYXRhIHJlbG9jYXRpb24gaGFzIGZhaWxlZC4iKSk7CisJCWdvdG8gd3JpdGVfTURCOworCX0KKworCS8qIENhbGN1bGF0ZSBuZXcgYmxvY2sgbnVtYmVyIGFuZCBvdGhlciBNREIgZmllbGQgKi8KKwluYmxvY2sgPSAoIGdlb20tPmxlbmd0aCAtIChQRURfQkUxNl9UT19DUFUgKG1kYi0+c3RhcnRfYmxvY2spICsgMikgKQorCQkgLyBoZnNfc2VjdF9ibG9jazsKKwluZnJlZSA9IFBFRF9CRTE2X1RPX0NQVSAobWRiLT5mcmVlX2Jsb2NrcykKKwkJLSAoIFBFRF9CRTE2X1RPX0NQVSAobWRiLT50b3RhbF9ibG9ja3MpIC0gbmJsb2NrICk7CisKKwkvKiBDaGVjayB0aGF0IGFsbCBibG9jayBhZnRlciBmdXR1cmUgZW5kIGFyZSByZWFsbHkgZnJlZSAqLworCWZvciAoYmxvY2sgPSBuYmxvY2s7CisJICAgICBibG9jayA8IFBFRF9CRTE2X1RPX0NQVSAobWRiLT50b3RhbF9ibG9ja3MpOworCSAgICAgYmxvY2srKykgeworCQlpZiAoVFNUX0JMT0NfT0NDVVBBVElPTihwcml2X2RhdGEtPmFsbG9jX21hcCxibG9jaykpIHsKKwkJCXJlc2l6ZSA9IDA7CisJCQlwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCQlQRURfRVhDRVBUSU9OX0VSUk9SLAorCQkJCVBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJCV8oIkRhdGEgcmVsb2NhdGlvbiBsZWZ0IHNvbWUgZGF0YSBpbiB0aGUgZW5kICIKKwkJCQkgICJvZiB0aGUgdm9sdW1lLiIpKTsKKwkJCWdvdG8gd3JpdGVfTURCOworCQl9CisJfQorCisJLyogTWFyayBvdXQgb2Ygdm9sdW1lIGJsb2NrcyBhcyB1c2VkCisJKGJyb2tlbiBpbXBsZW1lbnRhdGlvbnMgY29tcGF0aWJpbGl0eSkgKi8KKwlmb3IgKCBibG9jayA9IG5ibG9jazsgYmxvY2sgPCAoMSA8PCAxNik7ICsrYmxvY2spCisJCVNFVF9CTE9DX09DQ1VQQVRJT04ocHJpdl9kYXRhLT5hbGxvY19tYXAsYmxvY2spOworCisJLyogc2F2ZSB0aGUgYWxsb2NhdGlvbiBtYXAKKwlJIGRvIG5vdCB3cml0ZSB1bnRpbCBzdGFydCBvZiBhbGxvY2F0aW9uIGJsb2NrcyAKKwlidXQgb25seSB1bnRpbCBwcmUtcmVzaXplIGVuZCBvZiBiaXRtYXAgYmxvY2tzCisJYmVjYXVzZSB0aGUgc3BlY2lmaWNhdGlvbnMgZG8gX25vdF8gYXNzZXJ0IHRoYXQgZXZlcnl0aGluZworCXVudGlsIGFsbG9jYXRpb24gYmxvY2tzIGlzIGJvb3QsIG1kYiBhbmQgYWxsb2MgKi8KKwlwZWRfZ2VvbWV0cnlfd3JpdGUoZnMtPmdlb20sIHByaXZfZGF0YS0+YWxsb2NfbWFwLAorCQlQRURfQkUxNl9UT19DUFUgKHByaXZfZGF0YS0+bWRiLT52b2x1bWVfYml0bWFwX2Jsb2NrKSwKKwkJKCBQRURfQkUxNl9UT19DUFUgKHByaXZfZGF0YS0+bWRiLT50b3RhbF9ibG9ja3MpCisJCSAgKyBQRURfU0VDVE9SX1NJWkVfREVGQVVMVCAqIDggLSAxKQorCQkvIChQRURfU0VDVE9SX1NJWkVfREVGQVVMVCAqIDgpKTsKKworCS8qIFVwZGF0ZSBnZW9tZXRyeSAqLworCWlmIChyZXNpemUpIHsKKwkJLyogdXBkYXRlIGluIGZzIHN0cnVjdHVyZSAqLworCQlpZiAoUEVEX0JFMTZfVE9fQ1BVIChtZGItPm5leHRfYWxsb2NhdGlvbikgPj0gbmJsb2NrKQorCQkJbWRiLT5uZXh0X2FsbG9jYXRpb24gPSBQRURfQ1BVX1RPX0JFMTYgKDApOworCQltZGItPnRvdGFsX2Jsb2NrcyA9IFBFRF9DUFVfVE9fQkUxNiAobmJsb2NrKTsKKwkJbWRiLT5mcmVlX2Jsb2NrcyA9IFBFRF9DUFVfVE9fQkUxNiAobmZyZWUpOworCQkvKiB1cGRhdGUgcGFydGVkIHN0cnVjdHVyZSAqLworCQlmcy0+Z2VvbS0+bGVuZ3RoID0gZ2VvbS0+bGVuZ3RoOworCQlmcy0+Z2VvbS0+ZW5kID0gZnMtPmdlb20tPnN0YXJ0ICsgZ2VvbS0+bGVuZ3RoIC0gMTsKKwl9CisKKwkvKiBTZXQgdGhlIHVubW91bnRlZCBiaXQgKi8KKwltZGItPnZvbHVtZV9hdHRyaWJ1dGVzIHw9IFBFRF9DUFVfVE9fQkUxNiAoIDEgPDwgSEZTX1VOTU9VTlRFRCApOworCisJLyogRWZmZWN0aXZlIHdyaXRlICovCisgICAgd3JpdGVfTURCOgorCXBlZF90aW1lcl9zZXRfc3RhdGVfbmFtZSh0aW1lcixfKCJ3cml0aW5nIEhGUyBNYXN0ZXIgRGlyZWN0b3J5IEJsb2NrIikpOworCisJaWYgKCFoZnNfdXBkYXRlX21kYihmcykpIHsKKwkJcGVkX2dlb21ldHJ5X3N5bmMoZ2VvbSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghcGVkX2dlb21ldHJ5X3N5bmMoZ2VvbSkpCisJCXJldHVybiAwOworCisJcGVkX3RpbWVyX3VwZGF0ZSh0aW1lciwgMS4wKTsKKworCXJldHVybiAocmVzaXplKTsKK30KKworLyogLS0tLS0gSEZTKyAtLS0tLSAqLworCisjaW5jbHVkZSAiZmlsZV9wbHVzLmgiCisjaW5jbHVkZSAiYWR2ZnNfcGx1cy5oIgorI2luY2x1ZGUgInJlbG9jX3BsdXMuaCIKKyNpbmNsdWRlICJqb3VybmFsLmgiCisKK3N0YXRpYyBpbnQKK2hmc3BsdXNfY2xvYmJlciAoUGVkR2VvbWV0cnkqIGdlb20pCit7CisJdW5zaWduZWQgaW50IGkgPSAxOworCXVpbnQ4X3QJCQkJYnVmW1BFRF9TRUNUT1JfU0laRV9ERUZBVUxUXTsKKwlIZnNNYXN0ZXJEaXJlY3RvcnlCbG9jawkJKm1kYjsKKworCW1kYiA9IChIZnNNYXN0ZXJEaXJlY3RvcnlCbG9jayAqKSBidWY7CisKKwlpZiAoIXBlZF9nZW9tZXRyeV9yZWFkIChnZW9tLCBidWYsIDIsIDEpKQorCQlyZXR1cm4gMDsKKworCWlmIChQRURfQkUxNl9UT19DUFUgKG1kYi0+c2lnbmF0dXJlKSA9PSBIRlNfU0lHTkFUVVJFKSB7CisJCS8qIGVtYmVkZGVkIGhmcysgKi8KKwkJUGVkR2VvbWV0cnkJKmVtYmVkZGVkOworCisJCWkgPSBQRURfQkUzMl9UT19DUFUobWRiLT5ibG9ja19zaXplKSAvIFBFRF9TRUNUT1JfU0laRV9ERUZBVUxUOworCQllbWJlZGRlZCA9IHBlZF9nZW9tZXRyeV9uZXcgKAorCQkgICAgZ2VvbS0+ZGV2LAorCQkgICAgKFBlZFNlY3RvcikgZ2VvbS0+c3RhcnQKKwkJICAgICArIFBFRF9CRTE2X1RPX0NQVSAobWRiLT5zdGFydF9ibG9jaykKKwkJICAgICArIChQZWRTZWN0b3IpIFBFRF9CRTE2X1RPX0NQVSAoCisJCQltZGItPm9sZF9uZXcuZW1iZWRkZWQubG9jYXRpb24uc3RhcnRfYmxvY2sgKSAqIGksIAorCQkgICAgKFBlZFNlY3RvcikgUEVEX0JFMTZfVE9fQ1BVICgKKwkJCW1kYi0+b2xkX25ldy5lbWJlZGRlZC5sb2NhdGlvbi5ibG9ja19jb3VudCApICogaSApOworCQlpZiAoIWVtYmVkZGVkKSBpID0gMDsKKwkJZWxzZSB7CisJCQlpID0gaGZzX2Nsb2JiZXIgKGVtYmVkZGVkKTsKKwkJCXBlZF9nZW9tZXRyeV9kZXN0cm95IChlbWJlZGRlZCk7CisJCX0KKwl9CisKKwkvKiBub24tZW1iZWRkZWQgb3IgZW52ZWxvcCBkZXN0cm95IGFzIGhmcyAqLworCXJldHVybiAoIGhmc19jbG9iYmVyIChnZW9tKSAmJiBpICk7Cit9CisKK3N0YXRpYyBpbnQKK2hmc3BsdXNfY2xvc2UgKFBlZEZpbGVTeXN0ZW0gKmZzKQoreworCUhmc1BQcml2YXRlRlNEYXRhKiAJcHJpdl9kYXRhID0gKEhmc1BQcml2YXRlRlNEYXRhKikKKwkJCQkJCWZzLT50eXBlX3NwZWNpZmljOworCisJaWYgKHByaXZfZGF0YS0+YmFkX2Jsb2Nrc19sb2FkZWQpCisJCWhmc3BsdXNfZnJlZV9iYWRfYmxvY2tzX2xpc3QocHJpdl9kYXRhLT5iYWRfYmxvY2tzX3h0ZW50X2xpc3QpOworCXBlZF9mcmVlKHByaXZfZGF0YS0+YWxsb2NfbWFwKTsKKwlwZWRfZnJlZShwcml2X2RhdGEtPmRpcnR5X2FsbG9jX21hcCk7CisJaGZzcGx1c19maWxlX2Nsb3NlIChwcml2X2RhdGEtPmFsbG9jYXRpb25fZmlsZSk7CisJaGZzcGx1c19maWxlX2Nsb3NlIChwcml2X2RhdGEtPmF0dHJpYnV0ZXNfZmlsZSk7CisJaGZzcGx1c19maWxlX2Nsb3NlIChwcml2X2RhdGEtPmNhdGFsb2dfZmlsZSk7CisJaGZzcGx1c19maWxlX2Nsb3NlIChwcml2X2RhdGEtPmV4dGVudHNfZmlsZSk7CisJaWYgKHByaXZfZGF0YS0+ZnJlZV9nZW9tKSBwZWRfZ2VvbWV0cnlfZGVzdHJveSAocHJpdl9kYXRhLT5wbHVzX2dlb20pOworCWlmIChwcml2X2RhdGEtPndyYXBwZXIpIGhmc19jbG9zZShwcml2X2RhdGEtPndyYXBwZXIpOworCXBlZF9nZW9tZXRyeV9kZXN0cm95IChmcy0+Z2VvbSk7CisJcGVkX2ZyZWUocHJpdl9kYXRhLT52aCk7CisJcGVkX2ZyZWUocHJpdl9kYXRhKTsKKwlwZWRfZnJlZShmcyk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIFBlZEZpbGVTeXN0ZW0qCitoZnNwbHVzX29wZW4gKFBlZEdlb21ldHJ5KiBnZW9tKQoreworCXVpbnQ4X3QJCQlidWZbUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFRdOworCVBlZEZpbGVTeXN0ZW0qCQlmczsKKwlIZnNQVm9sdW1lSGVhZGVyKgl2aDsKKwlIZnNQUHJpdmF0ZUZTRGF0YSogCXByaXZfZGF0YTsKKwlQZWRHZW9tZXRyeSoJCXdyYXBwZXJfZ2VvbTsKKwl1bnNpZ25lZCBpbnQJCW1hcF9zZWN0b3JzOworCisJaWYgKCFoZnNjX2Nhbl91c2VfZ2VvbSAoZ2VvbSkpCisJCXJldHVybiBOVUxMOworCisJZnMgPSAoUGVkRmlsZVN5c3RlbSopIHBlZF9tYWxsb2MgKHNpemVvZiAoUGVkRmlsZVN5c3RlbSkpOworCWlmICghZnMpIGdvdG8gaHBvOworCXZoID0gKEhmc1BWb2x1bWVIZWFkZXIqKSBwZWRfbWFsbG9jIChzaXplb2YgKEhmc1BWb2x1bWVIZWFkZXIpKTsKKwlpZiAoIXZoKSBnb3RvIGhwb19mczsKKwlwcml2X2RhdGEgPSAoSGZzUFByaXZhdGVGU0RhdGEqKXBlZF9tYWxsb2MgKHNpemVvZiAoSGZzUFByaXZhdGVGU0RhdGEpKTsKKwlpZiAoIXByaXZfZGF0YSkgZ290byBocG9fdmg7CisKKwlmcy0+Z2VvbSA9IHBlZF9nZW9tZXRyeV9kdXBsaWNhdGUgKGdlb20pOworCWlmICghZnMtPmdlb20pIGdvdG8gaHBvX3BkOworCWZzLT50eXBlX3NwZWNpZmljID0gKHZvaWQqKSBwcml2X2RhdGE7CisKKwlpZiAoKHdyYXBwZXJfZ2VvbSA9IGhmc19hbmRfd3JhcHBlcl9wcm9iZSAoZ2VvbSkpKSB7CisJCUhmc1ByaXZhdGVGU0RhdGEqIAloZnNfcHJpdl9kYXRhOworCQlQZWRTZWN0b3IJCWFic19zZWN0LCBsZW5ndGg7CisJCXVuc2lnbmVkIGludAkJYnM7CisKKwkJcGVkX2dlb21ldHJ5X2Rlc3Ryb3kgKHdyYXBwZXJfZ2VvbSk7CisJCXByaXZfZGF0YS0+d3JhcHBlciA9IGhmc19vcGVuKGdlb20pOworCQlpZiAoIXByaXZfZGF0YS0+d3JhcHBlcikgZ290byBocG9fZ207CisJCWhmc19wcml2X2RhdGEgPSAoSGZzUHJpdmF0ZUZTRGF0YSopCisJCQlwcml2X2RhdGEtPndyYXBwZXItPnR5cGVfc3BlY2lmaWM7CisJCWJzID0gUEVEX0JFMzJfVE9fQ1BVIChoZnNfcHJpdl9kYXRhLT5tZGItPmJsb2NrX3NpemUpCisJCSAgICAgLyBQRURfU0VDVE9SX1NJWkVfREVGQVVMVDsKKwkJYWJzX3NlY3QgPSAoUGVkU2VjdG9yKSBnZW9tLT5zdGFydAorCQkJICAgKyAoUGVkU2VjdG9yKSBQRURfQkUxNl9UT19DUFUgKAorCQkJCQkgICAgaGZzX3ByaXZfZGF0YS0+bWRiLT5zdGFydF9ibG9jaykKKwkJCSAgICsgKFBlZFNlY3RvcikgUEVEX0JFMTZfVE9fQ1BVICgKKwkJCQkJICAgIGhmc19wcml2X2RhdGEtPm1kYi0+b2xkX25ldworCQkJCQkgICAgLmVtYmVkZGVkLmxvY2F0aW9uLnN0YXJ0X2Jsb2NrICkKKwkJCSAgICAgICAgICAgICAgICAgKiBiczsKKwkJbGVuZ3RoID0gKFBlZFNlY3RvcikgUEVEX0JFMTZfVE9fQ1BVICgKKwkJCQkJICAgIGhmc19wcml2X2RhdGEtPm1kYi0+b2xkX25ldworCQkJCQkgICAgLmVtYmVkZGVkLmxvY2F0aW9uLmJsb2NrX2NvdW50KQorCQkJCSAgICAgKiBiczsKKwkJcHJpdl9kYXRhLT5wbHVzX2dlb20gPSBwZWRfZ2VvbWV0cnlfbmV3IChnZW9tLT5kZXYsIGFic19zZWN0LAorCQkJCQkJCSBsZW5ndGgpOworCQlpZiAoIXByaXZfZGF0YS0+cGx1c19nZW9tKSBnb3RvIGhwb193cjsKKwkJcHJpdl9kYXRhLT5mcmVlX2dlb20gPSAxOworCX0gZWxzZSB7CisJCXByaXZfZGF0YS0+d3JhcHBlciA9IE5VTEw7CisJCXByaXZfZGF0YS0+cGx1c19nZW9tID0gZnMtPmdlb207CisJCXByaXZfZGF0YS0+ZnJlZV9nZW9tID0gMDsKKwl9CisKKwlpZiAoIXBlZF9nZW9tZXRyeV9yZWFkIChwcml2X2RhdGEtPnBsdXNfZ2VvbSwgYnVmLCAyLCAxKSkgZ290byBocG9fcGc7CisJbWVtY3B5ICh2aCwgYnVmLCBzaXplb2YgKEhmc1BWb2x1bWVIZWFkZXIpKTsKKwlwcml2X2RhdGEtPnZoID0gdmg7CisKKwlpZiAodmgtPnNpZ25hdHVyZSAhPSBQRURfQ1BVX1RPX0JFMTYoSEZTUF9TSUdOQVRVUkUpCisJICAgICYmIHZoLT5zaWduYXR1cmUgIT0gUEVEX0NQVV9UT19CRTE2KEhGU1hfU0lHTkFUVVJFKSkgeworCQlwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCVBFRF9FWENFUFRJT05fQlVHLAorCQkJUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQlfKCJObyB2YWxpZCBIRlNbK1hdIHNpZ25hdHVyZSBoYXMgYmVlbiBmb3VuZCB3aGlsZSAiCisJCQkgICJvcGVuaW5nLiIpKTsKKwkJZ290byBocG9fcGc7CisJfQorCisJaWYgKHZoLT5zaWduYXR1cmUgPT0gUEVEX0NQVV9UT19CRTE2KEhGU1BfU0lHTkFUVVJFKQorCSAgICAmJiB2aC0+dmVyc2lvbiAhPSBQRURfQ1BVX1RPX0JFMTYoSEZTUF9WRVJTSU9OKSkgeworCQlpZiAocGVkX2V4Y2VwdGlvbl90aHJvdyAoCisJCQlQRURfRVhDRVBUSU9OX05PX0ZFQVRVUkUsCisJCQlQRURfRVhDRVBUSU9OX0lHTk9SRV9DQU5DRUwsCisJCQlfKCJWZXJzaW9uICVkIG9mIEhGUysgaXNuJ3Qgc3VwcG9ydGVkLiIpLAorCQkJUEVEX0JFMTZfVE9fQ1BVKHZoLT52ZXJzaW9uKSkKKwkJCQkhPSBQRURfRVhDRVBUSU9OX0lHTk9SRSkKKwkJCWdvdG8gaHBvX3BnOworCX0KKworCWlmICh2aC0+c2lnbmF0dXJlID09IFBFRF9DUFVfVE9fQkUxNihIRlNYX1NJR05BVFVSRSkKKwkgICAgJiYgdmgtPnZlcnNpb24gIT0gUEVEX0NQVV9UT19CRTE2KEhGU1hfVkVSU0lPTikpIHsKKwkJaWYgKHBlZF9leGNlcHRpb25fdGhyb3cgKAorCQkJUEVEX0VYQ0VQVElPTl9OT19GRUFUVVJFLAorCQkJUEVEX0VYQ0VQVElPTl9JR05PUkVfQ0FOQ0VMLAorCQkJXygiVmVyc2lvbiAlZCBvZiBIRlNYIGlzbid0IHN1cHBvcnRlZC4iKSwKKwkJCVBFRF9CRTE2X1RPX0NQVSh2aC0+dmVyc2lvbikpCisJCQkJIT0gUEVEX0VYQ0VQVElPTl9JR05PUkUpCisJCQlnb3RvIGhwb19wZzsKKwl9CisKKwlwcml2X2RhdGEtPmppYl9zdGFydF9ibG9jayA9IDA7CisJcHJpdl9kYXRhLT5qbF9zdGFydF9ibG9jayA9IDA7CisJaWYgKHZoLT5hdHRyaWJ1dGVzICYgUEVEX0NQVV9UT19CRTMyKDE8PEhGU1BfSk9VUk5BTEVEKSkgeworCQlpZiAoIWhmc2pfcmVwbGF5X2pvdXJuYWwoZnMpKQorCQkJZ290byBocG9fcGc7CisJfQorCisJcHJpdl9kYXRhLT5iYWRfYmxvY2tzX2xvYWRlZCA9IDA7CisJcHJpdl9kYXRhLT5iYWRfYmxvY2tzX3h0ZW50X25iID0gMDsKKwlwcml2X2RhdGEtPmJhZF9ibG9ja3NfeHRlbnRfbGlzdCA9IE5VTEw7CisJcHJpdl9kYXRhLT5leHRlbnRzX2ZpbGUgPQorCQloZnNwbHVzX2ZpbGVfb3BlbiAoZnMsIFBFRF9DUFVfVE9fQkUzMiAoSEZTX1hURU5UX0lEKSwKKwkJCQkgICB2aC0+ZXh0ZW50c19maWxlLmV4dGVudHMsCisJCQkJICAgUEVEX0JFNjRfVE9fQ1BVICgKKwkJCQkJdmgtPmV4dGVudHNfZmlsZS5sb2dpY2FsX3NpemUgKQorCQkJCSAgIC8gUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQpOworCWlmICghcHJpdl9kYXRhLT5leHRlbnRzX2ZpbGUpIGdvdG8gaHBvX3BnOworCXByaXZfZGF0YS0+Y2F0YWxvZ19maWxlID0KKwkJaGZzcGx1c19maWxlX29wZW4gKGZzLCBQRURfQ1BVX1RPX0JFMzIgKEhGU19DQVRBTE9HX0lEKSwKKwkJCQkgICB2aC0+Y2F0YWxvZ19maWxlLmV4dGVudHMsCisJCQkJICAgUEVEX0JFNjRfVE9fQ1BVICgKKwkJCQkJdmgtPmNhdGFsb2dfZmlsZS5sb2dpY2FsX3NpemUgKQorCQkJCSAgIC8gUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQpOworCWlmICghcHJpdl9kYXRhLT5jYXRhbG9nX2ZpbGUpIGdvdG8gaHBvX2NlOworCXByaXZfZGF0YS0+YXR0cmlidXRlc19maWxlID0KKwkJaGZzcGx1c19maWxlX29wZW4gKGZzLCBQRURfQ1BVX1RPX0JFMzIgKEhGU1BfQVRUUklCX0lEKSwKKwkJCQkgICB2aC0+YXR0cmlidXRlc19maWxlLmV4dGVudHMsCisJCQkJICAgUEVEX0JFNjRfVE9fQ1BVICgKKwkJCQkJdmgtPmF0dHJpYnV0ZXNfZmlsZS5sb2dpY2FsX3NpemUpCisJCQkJICAgLyBQRURfU0VDVE9SX1NJWkVfREVGQVVMVCk7CisJaWYgKCFwcml2X2RhdGEtPmF0dHJpYnV0ZXNfZmlsZSkgZ290byBocG9fY2M7CisKKwltYXBfc2VjdG9ycyA9ICggUEVEX0JFMzJfVE9fQ1BVICh2aC0+dG90YWxfYmxvY2tzKSAKKwkgICAgICAgICAgICAgICAgKyBQRURfU0VDVE9SX1NJWkVfREVGQVVMVCAqIDggLSAxICkKKwkJICAgICAgLyAoUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQgKiA4KTsKKwlwcml2X2RhdGEtPmRpcnR5X2FsbG9jX21hcCA9ICh1aW50OF90KikKKwkJcGVkX21hbGxvYyAoKG1hcF9zZWN0b3JzICsgNykgLyA4KTsKKwlpZiAoIXByaXZfZGF0YS0+ZGlydHlfYWxsb2NfbWFwKSBnb3RvIGhwb19jbDsKKwltZW1zZXQocHJpdl9kYXRhLT5kaXJ0eV9hbGxvY19tYXAsIDAsIChtYXBfc2VjdG9ycyArIDcpIC8gOCk7CisJcHJpdl9kYXRhLT5hbGxvY19tYXAgPSAodWludDhfdCopCisJCXBlZF9tYWxsb2MgKG1hcF9zZWN0b3JzICogUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQpOworCWlmICghcHJpdl9kYXRhLT5hbGxvY19tYXApIGdvdG8gaHBvX2RtOworCisJcHJpdl9kYXRhLT5hbGxvY2F0aW9uX2ZpbGUgPQorCQloZnNwbHVzX2ZpbGVfb3BlbiAoZnMsIFBFRF9DUFVfVE9fQkUzMiAoSEZTUF9BTExPQ19JRCksCisJCQkJICAgdmgtPmFsbG9jYXRpb25fZmlsZS5leHRlbnRzLAorCQkJCSAgIFBFRF9CRTY0X1RPX0NQVSAoCisJCQkJCXZoLT5hbGxvY2F0aW9uX2ZpbGUubG9naWNhbF9zaXplKQorCQkJCSAgIC8gUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQpOworCWlmICghcHJpdl9kYXRhLT5hbGxvY2F0aW9uX2ZpbGUpIGdvdG8gaHBvX2FtOworCWlmICghaGZzcGx1c19maWxlX3JlYWQgKHByaXZfZGF0YS0+YWxsb2NhdGlvbl9maWxlLAorCQkJCXByaXZfZGF0YS0+YWxsb2NfbWFwLCAwLCBtYXBfc2VjdG9ycykpIHsKKwkJaGZzcGx1c19jbG9zZShmcyk7CisJCXJldHVybiBOVUxMOworCX0KKworCWZzLT50eXBlID0gJmhmc3BsdXNfdHlwZTsKKwlmcy0+Y2hlY2tlZCA9ICgoUEVEX0JFMzJfVE9fQ1BVICh2aC0+YXR0cmlidXRlcykgPj4gSEZTX1VOTU9VTlRFRCkgJiAxKQorCSAgICAgICYmICEoKFBFRF9CRTMyX1RPX0NQVSAodmgtPmF0dHJpYnV0ZXMpID4+IEhGU1BfSU5DT05TSVNURU5UKSAmIDEpOworCisJcmV0dXJuIGZzOworCisvKi0tLSBjbGVhbiBlcnJvciBoYW5kbGluZyAtLS0qLworaHBvX2FtOiBwZWRfZnJlZShwcml2X2RhdGEtPmFsbG9jX21hcCk7CitocG9fZG06IHBlZF9mcmVlKHByaXZfZGF0YS0+ZGlydHlfYWxsb2NfbWFwKTsKK2hwb19jbDogaGZzcGx1c19maWxlX2Nsb3NlIChwcml2X2RhdGEtPmF0dHJpYnV0ZXNfZmlsZSk7CitocG9fY2M6CWhmc3BsdXNfZmlsZV9jbG9zZSAocHJpdl9kYXRhLT5jYXRhbG9nX2ZpbGUpOworaHBvX2NlOgloZnNwbHVzX2ZpbGVfY2xvc2UgKHByaXZfZGF0YS0+ZXh0ZW50c19maWxlKTsKK2hwb19wZzogaWYgKHByaXZfZGF0YS0+ZnJlZV9nZW9tKSBwZWRfZ2VvbWV0cnlfZGVzdHJveSAocHJpdl9kYXRhLT5wbHVzX2dlb20pOworaHBvX3dyOiBpZiAocHJpdl9kYXRhLT53cmFwcGVyKSBoZnNfY2xvc2UocHJpdl9kYXRhLT53cmFwcGVyKTsKK2hwb19nbTogcGVkX2dlb21ldHJ5X2Rlc3Ryb3kgKGZzLT5nZW9tKTsKK2hwb19wZDogcGVkX2ZyZWUocHJpdl9kYXRhKTsKK2hwb192aDogcGVkX2ZyZWUodmgpOworaHBvX2ZzOiBwZWRfZnJlZShmcyk7CitocG86CXJldHVybiBOVUxMOworfQorCitzdGF0aWMgUGVkQ29uc3RyYWludCogCitoZnNwbHVzX2dldF9yZXNpemVfY29uc3RyYWludCAoY29uc3QgUGVkRmlsZVN5c3RlbSAqZnMpCit7CisJUGVkRGV2aWNlKglkZXYgPSBmcy0+Z2VvbS0+ZGV2OworCVBlZEFsaWdubWVudAlzdGFydF9hbGlnbjsKKwlQZWRHZW9tZXRyeQlzdGFydF9zZWN0b3I7CisJUGVkR2VvbWV0cnkJZnVsbF9kZXY7CisJUGVkU2VjdG9yCW1pbl9zaXplOworCisJaWYgKCFwZWRfYWxpZ25tZW50X2luaXQgKCZzdGFydF9hbGlnbiwgZnMtPmdlb20tPnN0YXJ0LCAwKSkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKCFwZWRfZ2VvbWV0cnlfaW5pdCAoJnN0YXJ0X3NlY3RvciwgZGV2LCBmcy0+Z2VvbS0+c3RhcnQsIDEpKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAoIXBlZF9nZW9tZXRyeV9pbml0ICgmZnVsbF9kZXYsIGRldiwgMCwgZGV2LT5sZW5ndGggLSAxKSkKKwkJcmV0dXJuIE5VTEw7CisKKwltaW5fc2l6ZSA9IGhmc3BsdXNfZ2V0X21pbl9zaXplIChmcyk7CisJaWYgKCFtaW5fc2l6ZSkgcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gcGVkX2NvbnN0cmFpbnRfbmV3ICgmc3RhcnRfYWxpZ24sIHBlZF9hbGlnbm1lbnRfYW55LAorCQkJCSAgICZzdGFydF9zZWN0b3IsICZmdWxsX2RldiwgbWluX3NpemUsCisJCQkJICAgZnMtPmdlb20tPmxlbmd0aCk7Cit9CisKK3N0YXRpYyBpbnQKK2hmc3BsdXNfdm9sdW1lX3Jlc2l6ZSAoUGVkRmlsZVN5c3RlbSogZnMsIFBlZEdlb21ldHJ5KiBnZW9tLCBQZWRUaW1lciogdGltZXIpCit7CisJdWludDhfdAkJCWJ1ZltQRURfU0VDVE9SX1NJWkVfREVGQVVMVF07CisJdW5zaWduZWQgaW50CQluYmxvY2ssIG5mcmVlLCBtYmxvY2s7CisJdW5zaWduZWQgaW50CQlibG9jaywgdG9fZnJlZSwgb2xkX2Jsb2NrczsKKwlIZnNQUHJpdmF0ZUZTRGF0YSogCXByaXZfZGF0YSA9IChIZnNQUHJpdmF0ZUZTRGF0YSopCisJCQkJCQlmcy0+dHlwZV9zcGVjaWZpYzsKKwlIZnNQVm9sdW1lSGVhZGVyKiAJdmggPSBwcml2X2RhdGEtPnZoOworCWludAkJCXJlc2l6ZSA9IDE7CisJdW5zaWduZWQgaW50CQloZnNwX3NlY3RfYmxvY2sgPQorCQkJCSAgICAoIFBFRF9CRTMyX1RPX0NQVSAodmgtPmJsb2NrX3NpemUpCisJCQkJICAgICAgLyBQRURfU0VDVE9SX1NJWkVfREVGQVVMVCApOworCXVuc2lnbmVkIGludAkJbWFwX3NlY3RvcnM7CisKKwlvbGRfYmxvY2tzID0gUEVEX0JFMzJfVE9fQ1BVICh2aC0+dG90YWxfYmxvY2tzKTsKKworCS8qIEZsdXNoIGNhY2hlcyAqLworCWlmICghcGVkX2dlb21ldHJ5X3N5bmMocHJpdl9kYXRhLT5wbHVzX2dlb20pKQorCQlyZXR1cm4gMDsKKworCS8qIENsZWFyIHRoZSB1bm1vdW50ZWQgYml0ICovCisJLyogYW5kIHNldCB0aGUgaW1wbGVtZW50YXRpb24gY29kZSAoQXBwbGUgQ3JlYXRvciBDb2RlKSAqLworCXZoLT5hdHRyaWJ1dGVzICY9IFBFRF9DUFVfVE9fQkUzMiAofiggMSA8PCBIRlNfVU5NT1VOVEVEICkpOworCXZoLT5sYXN0X21vdW50ZWRfdmVyc2lvbiA9IFBFRF9DUFVfVE9fQkUzMihIRlNQX0lNUExfU2huayk7CisJaWYgKCFwZWRfZ2VvbWV0cnlfcmVhZCAocHJpdl9kYXRhLT5wbHVzX2dlb20sIGJ1ZiwgMiwgMSkpCisJCXJldHVybiAwOworCW1lbWNweSAoYnVmLCB2aCwgc2l6ZW9mIChIZnNQVm9sdW1lSGVhZGVyKSk7CisJaWYgKCAgICFwZWRfZ2VvbWV0cnlfd3JpdGUgKHByaXZfZGF0YS0+cGx1c19nZW9tLCBidWYsIDIsIDEpCisJICAgIHx8ICFwZWRfZ2VvbWV0cnlfc3luYyAocHJpdl9kYXRhLT5wbHVzX2dlb20pKQorCQlyZXR1cm4gMDsKKworCXBlZF90aW1lcl9yZXNldCAodGltZXIpOworCXBlZF90aW1lcl9zZXRfc3RhdGVfbmFtZSh0aW1lciwgXygic2hyaW5raW5nIikpOworCXBlZF90aW1lcl91cGRhdGUodGltZXIsIDAuMCk7CisJLyogcmVsb2NhdGUgZGF0YSAqLworCXRvX2ZyZWUgPSAoIHByaXZfZGF0YS0+cGx1c19nZW9tLT5sZW5ndGggCisJICAgICAgICAgIC0gZ2VvbS0+bGVuZ3RoICsgaGZzcF9zZWN0X2Jsb2NrCisJCSAgLSAxICkgLyBoZnNwX3NlY3RfYmxvY2s7CisJYmxvY2sgPSBoZnNwbHVzX2ZpbmRfc3RhcnRfcGFjayAoZnMsIHRvX2ZyZWUpOworCWlmICghaGZzcGx1c19wYWNrX2ZyZWVfc3BhY2VfZnJvbV9ibG9jayAoZnMsIGJsb2NrLCB0aW1lciwgdG9fZnJlZSkpIHsKKwkJcmVzaXplID0gMDsKKwkJcGVkX2V4Y2VwdGlvbl90aHJvdyAoCisJCQlQRURfRVhDRVBUSU9OX0VSUk9SLAorCQkJUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQlfKCJEYXRhIHJlbG9jYXRpb24gaGFzIGZhaWxlZC4iKSk7CisJCWdvdG8gd3JpdGVfVkg7CisJfQorCisJLyogQ2FsY3VsYXRlIG5ldyBibG9jayBudW1iZXIgYW5kIG90aGVyIFZIIGZpZWxkICovCisJLyogbmJsb2NrIG11c3QgYmUgcm91bmRlZCBfZG93bl8gKi8KKwluYmxvY2sgPSBnZW9tLT5sZW5ndGggLyBoZnNwX3NlY3RfYmxvY2s7CisJbmZyZWUgPSBQRURfQkUzMl9UT19DUFUgKHZoLT5mcmVlX2Jsb2NrcykgCisJCS0gKG9sZF9ibG9ja3MgLSBuYmxvY2spOworCS8qIGZyZWUgYmxvY2sgcmVhZGp1c3RlbWVudCBpcyBvbmx5IG5lZWRlZCB3aGVuIGluY29ycmVjdCBuYmxvY2sKKwkgICB3YXMgdXNlZCBieSBteSBwcmV2aW91cyBpbXBsZW1lbnRhdGlvbiwgc28gZGV0ZWN0IHRoZSBjYXNlICovCisJaWYgKHByaXZfZGF0YS0+cGx1c19nZW9tLT5sZW5ndGggPCBvbGRfYmxvY2tzCisJCQkJCSAgICogKCBQRURfQkUzMl9UT19DUFUgKHZoLT5ibG9ja19zaXplKQorCQkJCQkgICAgICAgLyBQRURfU0VDVE9SX1NJWkVfREVGQVVMVCkgKSB7CisJCWlmIChwcml2X2RhdGEtPnBsdXNfZ2VvbS0+bGVuZ3RoICUgaGZzcF9zZWN0X2Jsb2NrID09IDEpCisJCQluZnJlZSsrOworCX0KKworCS8qIENoZWNrIHRoYXQgYWxsIGJsb2NrIGFmdGVyIGZ1dHVyZSBlbmQgYXJlIHJlYWxseSBmcmVlICovCisJbWJsb2NrID0gKCBwcml2X2RhdGEtPnBsdXNfZ2VvbS0+bGVuZ3RoIC0gMiApCisJCSAvIGhmc3Bfc2VjdF9ibG9jazsKKwlpZiAobWJsb2NrID4gb2xkX2Jsb2NrcyAtIDEpCisJCW1ibG9jayA9IG9sZF9ibG9ja3MgLSAxOworCWZvciAoIGJsb2NrID0gbmJsb2NrOworCSAgICAgIGJsb2NrIDwgbWJsb2NrOworCSAgICAgIGJsb2NrKysgKSB7CisJCWlmIChUU1RfQkxPQ19PQ0NVUEFUSU9OKHByaXZfZGF0YS0+YWxsb2NfbWFwLGJsb2NrKSkgeworCQkJcmVzaXplID0gMDsKKwkJCXBlZF9leGNlcHRpb25fdGhyb3cgKAorCQkJCVBFRF9FWENFUFRJT05fRVJST1IsCisJCQkJUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQkJXygiRGF0YSByZWxvY2F0aW9uIGxlZnQgc29tZSBkYXRhIGF0IHRoZSBlbmQgIgorCQkJCSAgIm9mIHRoZSB2b2x1bWUuIikpOworCQkJZ290byB3cml0ZV9WSDsKKwkJfQorCX0KKworCS8qIE1hcmsgb3V0IG9mIHZvbHVtZSBibG9ja3MgYXMgdXNlZCAqLworCW1hcF9zZWN0b3JzID0gKCAoIG9sZF9ibG9ja3MgKyBQRURfU0VDVE9SX1NJWkVfREVGQVVMVCAqIDggLSAxICkKKwkgICAgICAgICAgICAgICAgLyAoUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQgKiA4KSApCisJCSAgICAgICogKFBFRF9TRUNUT1JfU0laRV9ERUZBVUxUICogOCk7CisJZm9yICggYmxvY2sgPSBuYmxvY2s7IGJsb2NrIDwgbWFwX3NlY3RvcnM7ICsrYmxvY2spCisJCVNFVF9CTE9DX09DQ1VQQVRJT04ocHJpdl9kYXRhLT5hbGxvY19tYXAsIGJsb2NrKTsKKworCS8qIFVwZGF0ZSBnZW9tZXRyeSAqLworCWlmIChyZXNpemUpIHsKKwkJLyogdXBkYXRlIGluIGZzIHN0cnVjdHVyZSAqLworCQlpZiAoUEVEX0JFMzJfVE9fQ1BVICh2aC0+bmV4dF9hbGxvY2F0aW9uKSA+PSBuYmxvY2spCisJCQl2aC0+bmV4dF9hbGxvY2F0aW9uID0gUEVEX0NQVV9UT19CRTMyICgwKTsKKwkJdmgtPnRvdGFsX2Jsb2NrcyA9IFBFRF9DUFVfVE9fQkUzMiAobmJsb2NrKTsKKwkJdmgtPmZyZWVfYmxvY2tzID0gUEVEX0NQVV9UT19CRTMyIChuZnJlZSk7CisJCS8qIHVwZGF0ZSBwYXJ0ZWQgc3RydWN0dXJlICovCisJCXByaXZfZGF0YS0+cGx1c19nZW9tLT5sZW5ndGggPSBnZW9tLT5sZW5ndGg7CisJCXByaXZfZGF0YS0+cGx1c19nZW9tLT5lbmQgPSBwcml2X2RhdGEtPnBsdXNfZ2VvbS0+c3RhcnQKKwkJCQkJICAgICsgZ2VvbS0+bGVuZ3RoIC0gMTsKKwl9CisKKwkvKiBFZmZlY3RpdmUgd3JpdGUgKi8KKyAgICB3cml0ZV9WSDoKKyAgICAJLyogbGFzdHMgdHdvIHNlY3RvcnMgYXJlIGFsbG9jYXRlZCBieSB0aGUgYWx0ZXJuYXRlIFZICisJICAgYW5kIGEgcmVzZXJ2ZWQgc2VjdG9yLCBhbmQgbGFzdCBibG9jayBpcyBhbHdheXMgcmVzZXJ2ZWQgKi8KKwlibG9jayA9IChwcml2X2RhdGEtPnBsdXNfZ2VvbS0+bGVuZ3RoIC0gMSkgLyBoZnNwX3NlY3RfYmxvY2s7CisJaWYgKGJsb2NrIDwgUEVEX0JFMzJfVE9fQ1BVICh2aC0+dG90YWxfYmxvY2tzKSkKKwkJU0VUX0JMT0NfT0NDVVBBVElPTihwcml2X2RhdGEtPmFsbG9jX21hcCwgYmxvY2spOworCWJsb2NrID0gKHByaXZfZGF0YS0+cGx1c19nZW9tLT5sZW5ndGggLSAyKSAvIGhmc3Bfc2VjdF9ibG9jazsKKwlpZiAoYmxvY2sgPCBQRURfQkUzMl9UT19DUFUgKHZoLT50b3RhbF9ibG9ja3MpKQorCQlTRVRfQkxPQ19PQ0NVUEFUSU9OKHByaXZfZGF0YS0+YWxsb2NfbWFwLCBibG9jayk7CisJU0VUX0JMT0NfT0NDVVBBVElPTihwcml2X2RhdGEtPmFsbG9jX21hcCwKKwkJCSAgICBQRURfQkUzMl9UT19DUFUgKHZoLT50b3RhbF9ibG9ja3MpIC0gMSk7CisKKwkvKiBXcml0ZSB0aGUgX29sZF8gYXJlYSB0byBzZXQgb3V0IG9mIHZvbHVtZSBibG9ja3MgYXMgdXNlZCAqLworCW1hcF9zZWN0b3JzID0gKCBvbGRfYmxvY2tzICsgUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQgKiA4IC0gMSApCisJICAgICAgICAgICAgICAvIChQRURfU0VDVE9SX1NJWkVfREVGQVVMVCAqIDgpOworCWlmICghaGZzcGx1c19maWxlX3dyaXRlIChwcml2X2RhdGEtPmFsbG9jYXRpb25fZmlsZSwKKwkJCQkgcHJpdl9kYXRhLT5hbGxvY19tYXAsIDAsIG1hcF9zZWN0b3JzKSkgeworCQlyZXNpemUgPSAwOworCQlwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCVBFRF9FWENFUFRJT05fRVJST1IsCisJCQlQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCV8oIkVycm9yIHdoaWxlIHdyaXRpbmcgdGhlIGFsbG9jYXRpb24gZmlsZS4iKSk7CisJfSBlbHNlIHsKKwkvKiBXcml0ZSByZW1haW5pbmcgcGFydCBvZiBhbGxvY2F0aW9uIGJpdG1hcCAqLworCS8qIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIGhhbmRsZSBwcmUgcGF0Y2gtMTEgYW5kIHRoaXJkIHBhcnR5ICovCisJLyogaW1wbGVtZW50YXRpb25zICovCisJCW1lbXNldChidWYsIDB4RkYsIFBFRF9TRUNUT1JfU0laRV9ERUZBVUxUKTsKKwkJZm9yIChibG9jayA9IG1hcF9zZWN0b3JzOworCQkgICAgIGJsb2NrIDwgcHJpdl9kYXRhLT5hbGxvY2F0aW9uX2ZpbGUtPnNlY3RfbmI7CisJCSAgICAgKytibG9jaykgeworCQkJaWYgKCFoZnNwbHVzX2ZpbGVfd3JpdGVfc2VjdG9yICgKKwkJCQkJcHJpdl9kYXRhLT5hbGxvY2F0aW9uX2ZpbGUsCisJCQkJCWJ1ZiwgYmxvY2spKSB7CisJCQkJcGVkX2V4Y2VwdGlvbl90aHJvdyAoCisJCQkJCVBFRF9FWENFUFRJT05fV0FSTklORywKKwkJCQkJUEVEX0VYQ0VQVElPTl9JR05PUkUsCisJCQkJCV8oIkVycm9yIHdoaWxlIHdyaXRpbmcgdGhlICIKKwkJCQkJICAiY29tcGF0aWJpbGl0eSBwYXJ0IG9mIHRoZSAiCisJCQkJCSAgImFsbG9jYXRpb24gZmlsZS4iKSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJcGVkX2dlb21ldHJ5X3N5bmMgKHByaXZfZGF0YS0+cGx1c19nZW9tKTsKKworCWlmIChyZXNpemUpIHsKKwkJLyogU2V0IHRoZSB1bm1vdW50ZWQgYml0IGFuZCBjbGVhciB0aGUgaW5jb25zaXN0ZW50IGJpdCAqLworCQl2aC0+YXR0cmlidXRlcyB8PSBQRURfQ1BVX1RPX0JFMzIgKCAxIDw8IEhGU19VTk1PVU5URUQgKTsKKwkJdmgtPmF0dHJpYnV0ZXMgJj0gfiBQRURfQ1BVX1RPX0JFMzIgKCAxIDw8IEhGU1BfSU5DT05TSVNURU5UICk7CisJfQorCisJcGVkX3RpbWVyX3NldF9zdGF0ZV9uYW1lKHRpbWVyLCBfKCJ3cml0aW5nIEhGUysgVm9sdW1lIEhlYWRlciIpKTsKKwlpZiAoIWhmc3BsdXNfdXBkYXRlX3ZoKGZzKSkgeworCQlwZWRfZ2VvbWV0cnlfc3luYyhwcml2X2RhdGEtPnBsdXNfZ2VvbSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghcGVkX2dlb21ldHJ5X3N5bmMocHJpdl9kYXRhLT5wbHVzX2dlb20pKQorCQlyZXR1cm4gMDsKKworCXBlZF90aW1lcl91cGRhdGUodGltZXIsIDEuMCk7CisKKwlyZXR1cm4gKHJlc2l6ZSk7Cit9CisKKy8qIFVwZGF0ZSB0aGUgSEZTIHdyYXBwZXIgbWRiIGFuZCBiYWQgYmxvY2tzIGZpbGUgdG8gcmVmbGVjdAorICAgdGhlIG5ldyBnZW9tZXRyeSBvZiB0aGUgZW1iZWRkZWQgSEZTKyB2b2x1bWUgKi8KK3N0YXRpYyBpbnQKK2hmc3BsdXNfd3JhcHBlcl91cGRhdGUgKFBlZEZpbGVTeXN0ZW0qIGZzKQoreworCXVpbnQ4X3QJCQlub2RlW1BFRF9TRUNUT1JfU0laRV9ERUZBVUxUXTsKKwlIZnNDUHJpdmF0ZUxlYWZSZWMJcmVmOworCUhmc0V4dGVudEtleQkJa2V5OworCUhmc05vZGVEZXNjcmlwdG9yKglub2RlX2Rlc2MgPSAoSGZzTm9kZURlc2NyaXB0b3IqKSBub2RlOworCUhmc0V4dGVudEtleSoJCXJldF9rZXk7CisJSGZzRXh0RGVzY3JpcHRvcioJcmV0X2RhdGE7CisJdW5zaWduZWQgaW50CQlpOworCUhmc1BQcml2YXRlRlNEYXRhKiAJcHJpdl9kYXRhID0gKEhmc1BQcml2YXRlRlNEYXRhKikKKwkJCQkJCWZzLT50eXBlX3NwZWNpZmljOworCUhmc1ByaXZhdGVGU0RhdGEqIAloZnNfcHJpdl9kYXRhID0gKEhmc1ByaXZhdGVGU0RhdGEqKQorCQkJCQkgICAgcHJpdl9kYXRhLT53cmFwcGVyLT50eXBlX3NwZWNpZmljOworCXVuc2lnbmVkIGludAkJaGZzX3NlY3RfYmxvY2sgPQorCQkJUEVEX0JFMzJfVE9fQ1BVIChoZnNfcHJpdl9kYXRhLT5tZGItPmJsb2NrX3NpemUpCisJCQkvIFBFRF9TRUNUT1JfU0laRV9ERUZBVUxUIDsKKwlQZWRTZWN0b3IJCWhmc3BsdXNfc2VjdCA9IChQZWRTZWN0b3IpCisJCQlQRURfQkUzMl9UT19DUFUgKHByaXZfZGF0YS0+dmgtPnRvdGFsX2Jsb2NrcykKKwkJCSogKCBQRURfQkUzMl9UT19DUFUgKHByaXZfZGF0YS0+dmgtPmJsb2NrX3NpemUpCisJCQkgICAgLyBQRURfU0VDVE9SX1NJWkVfREVGQVVMVCApOworCXVuc2lnbmVkIGludAkJaGZzX2Jsb2Nrc19lbWJlZGRlZCA9CisJCQkJICAgIChoZnNwbHVzX3NlY3QgKyBoZnNfc2VjdF9ibG9jayAtIDEpCisJCQkJICAgIC8gaGZzX3NlY3RfYmxvY2s7CisJdW5zaWduZWQgaW50CQloZnNfYmxvY2tzX2VtYmVkZGVkX29sZDsKKworCS8qIHVwZGF0ZSBIRlMgd3JhcHBlciBNREIgKi8KKwloZnNfYmxvY2tzX2VtYmVkZGVkX29sZCA9IFBFRF9CRTE2X1RPX0NQVSAoCisJCQkJCWhmc19wcml2X2RhdGEtPm1kYi0+b2xkX25ldworCQkJCQkuZW1iZWRkZWQubG9jYXRpb24uYmxvY2tfY291bnQgKTsKKwloZnNfcHJpdl9kYXRhLT5tZGItPm9sZF9uZXcuZW1iZWRkZWQubG9jYXRpb24uYmxvY2tfY291bnQgPQorCQlQRURfQ1BVX1RPX0JFMTYgKGhmc19ibG9ja3NfZW1iZWRkZWQpOworCS8qIG1heWJlIG1hY09TIHdpbGwgYm9vdCB3aXRoIHRoaXMgKi8KKwkvKiB1cGRhdGUgOiB5ZXMgaXQgZG9lcyBcby8gOikgKi8KKwloZnNfcHJpdl9kYXRhLT5tZGItPmZyZWVfYmxvY2tzID0KKwkgICAgUEVEX0NQVV9UT19CRTE2ICggUEVEX0JFMTZfVE9fQ1BVIChoZnNfcHJpdl9kYXRhLT5tZGItPmZyZWVfYmxvY2tzKQorCSAgICAgICAgICAgICAgICAgICAgKyBoZnNfYmxvY2tzX2VtYmVkZGVkX29sZAorCQkJICAgIC0gaGZzX2Jsb2Nrc19lbWJlZGRlZCApOworCisJaWYgKCFoZnNfdXBkYXRlX21kYihwcml2X2RhdGEtPndyYXBwZXIpKQorCQlyZXR1cm4gMDsKKworCS8qIGZvcmNlIHJlbG9hZCBiYWQgYmxvY2sgbGlzdCAqLworCWlmIChoZnNfcHJpdl9kYXRhLT5iYWRfYmxvY2tzX2xvYWRlZCkgeworCQloZnNfZnJlZV9iYWRfYmxvY2tzX2xpc3QgKGhmc19wcml2X2RhdGEtPmJhZF9ibG9ja3NfeHRlbnRfbGlzdCk7CisJCWhmc19wcml2X2RhdGEtPmJhZF9ibG9ja3NfeHRlbnRfbGlzdCA9IE5VTEw7CisJCWhmc19wcml2X2RhdGEtPmJhZF9ibG9ja3NfeHRlbnRfbmIgPSAwOworCQloZnNfcHJpdl9kYXRhLT5iYWRfYmxvY2tzX2xvYWRlZCA9IDA7CisJfQorCisJLyogY2xlYW4gSEZTIHdyYXBwZXIgYWxsb2NhdGlvbiBtYXAgKi8KKwlmb3IgKGkgPSBQRURfQkUxNl9UT19DUFUgKAorCQkJaGZzX3ByaXZfZGF0YS0+bWRiLT5vbGRfbmV3LmVtYmVkZGVkCisJCQkubG9jYXRpb24uc3RhcnRfYmxvY2sgKQorCQkgKyBoZnNfYmxvY2tzX2VtYmVkZGVkOworCSAgICAgaSA8IFBFRF9CRTE2X1RPX0NQVSAoCisJICAgIAkJaGZzX3ByaXZfZGF0YS0+bWRiLT5vbGRfbmV3LmVtYmVkZGVkCisJCQkubG9jYXRpb24uc3RhcnRfYmxvY2sgKQorCQkgKyBoZnNfYmxvY2tzX2VtYmVkZGVkX29sZDsKKwkgICAgIGkrKyApIHsKKwkJQ0xSX0JMT0NfT0NDVVBBVElPTihoZnNfcHJpdl9kYXRhLT5hbGxvY19tYXAsIGkpOworCX0KKwkvKiBhbmQgc2F2ZSBpdCAqLworCWlmICghcGVkX2dlb21ldHJ5X3dyaXRlIChmcy0+Z2VvbSwgaGZzX3ByaXZfZGF0YS0+YWxsb2NfbWFwLAorCQkJCSBQRURfQkUxNl9UT19DUFUgKAorCQkJCSAgICAgIGhmc19wcml2X2RhdGEtPm1kYi0+dm9sdW1lX2JpdG1hcF9ibG9jayApLAorCQkJCSAoIFBFRF9CRTE2X1RPX0NQVSAoCisJCQkJICAgICAgICBoZnNfcHJpdl9kYXRhLT5tZGItPnRvdGFsX2Jsb2NrcyApIAorCQkJCSAgICsgUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQgKiA4IC0gMSApCisJCQkJIC8gKFBFRF9TRUNUT1JfU0laRV9ERUZBVUxUICogOCkpKQorCQlyZXR1cm4gMDsKKwlpZiAoIXBlZF9nZW9tZXRyeV9zeW5jIChmcy0+Z2VvbSkpCisJCXJldHVybiAwOworCisJLyogc2VhcmNoIGFuZCB1cGRhdGUgdGhlIGJhZCBibG9ja3MgZmlsZSAqLworCWtleS5rZXlfbGVuZ3RoID0gc2l6ZW9mKGtleSkgLSAxOworCWtleS50eXBlID0gSEZTX0RBVEFfRk9SSzsKKwlrZXkuZmlsZV9JRCA9IFBFRF9DUFVfVE9fQkUzMiAoSEZTX0JBRF9CTE9DS19JRCk7CisJa2V5LnN0YXJ0ID0gMDsKKwlpZiAoIWhmc19idHJlZV9zZWFyY2ggKGhmc19wcml2X2RhdGEtPmV4dGVudF9maWxlLAorCQkJICAgICAgIChIZnNQcml2YXRlR2VuZXJpY0tleSopICZrZXksIE5VTEwsIDAsICZyZWYpKSB7CisJCXBlZF9leGNlcHRpb25fdGhyb3cgKAorCQkJUEVEX0VYQ0VQVElPTl9FUlJPUiwKKwkJCVBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJXygiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgbG9va2luZyBmb3IgdGhlIG1hbmRhdG9yeSAiCisJCQkgICJiYWQgYmxvY2tzIGZpbGUuIikpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFoZnNfZmlsZV9yZWFkX3NlY3RvciAoaGZzX3ByaXZfZGF0YS0+ZXh0ZW50X2ZpbGUsIG5vZGUsCisJCQkJICAgcmVmLm5vZGVfbnVtYmVyKSkKKwkJcmV0dXJuIDA7CisJcmV0X2tleSA9IChIZnNFeHRlbnRLZXkqKSAobm9kZSArIHJlZi5yZWNvcmRfcG9zKTsKKwlyZXRfZGF0YSA9IChIZnNFeHREZXNjcmlwdG9yKikgKCBub2RlICsgcmVmLnJlY29yZF9wb3MKKwkJCQkJICsgc2l6ZW9mIChIZnNFeHRlbnRLZXkpICk7CisKKwl3aGlsZSAocmV0X2tleS0+dHlwZSA9PSBrZXkudHlwZSAmJiByZXRfa2V5LT5maWxlX0lEID09IGtleS5maWxlX0lEKSB7CisJCWZvciAoaSA9IDA7IGkgPCBIRlNfRVhUX05COyBpKyspIHsKKwkJCWlmICggcmV0X2RhdGFbaV0uc3RhcnRfYmxvY2sgCisJCQkgICAgID09IGhmc19wcml2X2RhdGEtPm1kYi0+b2xkX25ldworCQkJICAgICAgICAuZW1iZWRkZWQubG9jYXRpb24uc3RhcnRfYmxvY2spIHsKKwkJCQlyZXRfZGF0YVtpXS5ibG9ja19jb3VudCA9CisJCQkJICAgIGhmc19wcml2X2RhdGEtPm1kYi0+b2xkX25ldworCQkJCSAgICAuZW1iZWRkZWQubG9jYXRpb24uYmxvY2tfY291bnQ7CisJCQkJLyogZm91bmQgISA6IHVwZGF0ZSAqLworCQkJCWlmICghaGZzX2ZpbGVfd3JpdGVfc2VjdG9yICgKKwkJCQkJICBoZnNfcHJpdl9kYXRhLT5leHRlbnRfZmlsZSwKKwkJCQkJICBub2RlLCByZWYubm9kZV9udW1iZXIpCisJCQkJICAgIHx8ICFwZWRfZ2VvbWV0cnlfc3luYyhmcy0+Z2VvbSkpCisJCQkJCXJldHVybiAwOworCQkJCXJldHVybiAxOworCQkJfQorCQl9CisKKwkJaWYgKHJlZi5yZWNvcmRfbnVtYmVyIDwgUEVEX0JFMTZfVE9fQ1BVIChub2RlX2Rlc2MtPnJlY19uYikpIHsKKwkJCXJlZi5yZWNvcmRfbnVtYmVyKys7CisJCX0gZWxzZSB7CisJCQlyZWYubm9kZV9udW1iZXIgPSBQRURfQkUzMl9UT19DUFUgKG5vZGVfZGVzYy0+bmV4dCk7CisJCQlpZiAoIXJlZi5ub2RlX251bWJlcgorCQkJICAgIHx8ICFoZnNfZmlsZV9yZWFkX3NlY3RvcihoZnNfcHJpdl9kYXRhLT5leHRlbnRfZmlsZSwKKwkJCQkJCSAgICAgbm9kZSwgcmVmLm5vZGVfbnVtYmVyKSkKKwkJCQlnb3RvIGJiX25vdF9mb3VuZDsKKwkJCXJlZi5yZWNvcmRfbnVtYmVyID0gMTsKKwkJfQorCisJCXJlZi5yZWNvcmRfcG9zID0KKwkJCVBFRF9CRTE2X1RPX0NQVSAoKigodWludDE2X3QgKikKKwkJCQkobm9kZSArIChQRURfU0VDVE9SX1NJWkVfREVGQVVMVAorCQkJCSAgICAgICAgIC0gMipyZWYucmVjb3JkX251bWJlcikpKSk7CisJCXJldF9rZXkgPSAoSGZzRXh0ZW50S2V5KikgKG5vZGUgKyByZWYucmVjb3JkX3Bvcyk7CisJCXJldF9kYXRhID0gKEhmc0V4dERlc2NyaXB0b3IqKSAoIG5vZGUgKyByZWYucmVjb3JkX3BvcworCQkJCQkJICsgc2l6ZW9mIChIZnNFeHRlbnRLZXkpICk7CisJfQorCitiYl9ub3RfZm91bmQ6CisJLyogbm90IGZvdW5kIDogbm90IGEgdmFsaWQgaGZzKyB3cmFwcGVyIDogZmFpbHVyZSAqLworCXBlZF9leGNlcHRpb25fdGhyb3cgKAorCQlQRURfRVhDRVBUSU9OX0VSUk9SLAorCQlQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJXygiSXQgc2VlbXMgdGhlcmUgaXMgYW4gZXJyb3IgaW4gdGhlIEhGUyB3cmFwcGVyOiB0aGUgYmFkICIKKwkJICAiYmxvY2tzIGZpbGUgZG9lc24ndCBjb250YWluIHRoZSBlbWJlZGRlZCBIRlMrIHZvbHVtZS4iKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2hmc3BsdXNfcmVzaXplIChQZWRGaWxlU3lzdGVtKiBmcywgUGVkR2VvbWV0cnkqIGdlb20sIFBlZFRpbWVyKiB0aW1lcikKK3sKKwlIZnNQUHJpdmF0ZUZTRGF0YSogCXByaXZfZGF0YTsKKwlQZWRUaW1lcioJCXRpbWVyX3BsdXM7CisJUGVkR2VvbWV0cnkqCQllbWJlZGRlZF9nZW9tOworCVBlZFNlY3RvcgkJaGdtczsKKworCS8qIGNoZWNrIHByZWNvbmRpdGlvbnMgKi8KKwlQRURfQVNTRVJUIChmcyAhPSBOVUxMLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAoZnMtPmdlb20gIT0gTlVMTCwgcmV0dXJuIDApOyAKKwlQRURfQVNTRVJUIChnZW9tICE9IE5VTEwsIHJldHVybiAwKTsKKwlQRURfQVNTRVJUIChmcy0+Z2VvbS0+ZGV2ID09IGdlb20tPmRldiwgcmV0dXJuIDApOworI2lmZGVmIERFQlVHCisgICAgICAgIFBFRF9BU1NFUlQgKChoZ21zID0gaGZzcGx1c19nZXRfbWluX3NpemUgKGZzKSkgIT0gMCwgcmV0dXJuIDApOworI2Vsc2UKKyAgICAgICAgaWYgKChoZ21zID0gaGZzcGx1c19nZXRfbWluX3NpemUgKGZzKSkgPT0gMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyNlbmRpZgorCisJaWYgKHBlZF9nZW9tZXRyeV90ZXN0X2VxdWFsKGZzLT5nZW9tLCBnZW9tKSkKKwkJcmV0dXJuIDE7CisKKwlwcml2X2RhdGEgPSAoSGZzUFByaXZhdGVGU0RhdGEqKSBmcy0+dHlwZV9zcGVjaWZpYzsKKworCWlmIChmcy0+Z2VvbS0+c3RhcnQgIT0gZ2VvbS0+c3RhcnQKKwkgICAgfHwgZ2VvbS0+bGVuZ3RoID4gZnMtPmdlb20tPmxlbmd0aAorCSAgICB8fCBnZW9tLT5sZW5ndGggPCBoZ21zKSB7CisJCXBlZF9leGNlcHRpb25fdGhyb3cgKAorCQkJUEVEX0VYQ0VQVElPTl9OT19GRUFUVVJFLAorCQkJUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQlfKCJTb3JyeSwgSEZTKyBjYW5ub3QgYmUgcmVzaXplZCB0aGF0IHdheSB5ZXQuIikpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAocHJpdl9kYXRhLT53cmFwcGVyKSB7CisJCVBlZFNlY3RvcgkJcmVkLCBoZ2VlOworCQlIZnNQcml2YXRlRlNEYXRhKiAJaGZzX3ByaXZfZGF0YSA9IChIZnNQcml2YXRlRlNEYXRhKikKKwkJCQkJICAgIHByaXZfZGF0YS0+d3JhcHBlci0+dHlwZV9zcGVjaWZpYzsKKwkJdW5zaWduZWQgaW50CQloZnNfc2VjdF9ibG9jayA9CisJCQkgICAgUEVEX0JFMzJfVE9fQ1BVIChoZnNfcHJpdl9kYXRhLT5tZGItPmJsb2NrX3NpemUpCisJCQkgICAgLyBQRURfU0VDVE9SX1NJWkVfREVGQVVMVDsKKworCQkvKiBUaGVyZSBpcyBhIHdyYXBwZXIgc28gd2UgbXVzdCBjYWxjdWxhdGUgdGhlIG5ldyBnZW9tZXRyeQorCQkgICBvZiB0aGUgZW1iZWRkZWQgSEZTKyB2b2x1bWUgKi8KKwkJcmVkID0gKCAoZnMtPmdlb20tPmxlbmd0aCAtIGdlb20tPmxlbmd0aCArIGhmc19zZWN0X2Jsb2NrIC0gMSkKKwkJCS8gaGZzX3NlY3RfYmxvY2sgKSAqIGhmc19zZWN0X2Jsb2NrOworCQkvKiBDYW4ndCB3ZSBzaHJpbmsgdGhlIGhmcysgdm9sdW1lIGJ5IHRoZSBkZXNpcmVkIHNpemUgPyAqLworCQloZ2VlID0gaGZzcGx1c19nZXRfZW1wdHlfZW5kIChmcyk7CisJCWlmICghaGdlZSkgcmV0dXJuIDA7CisJCWlmIChyZWQgPiBwcml2X2RhdGEtPnBsdXNfZ2VvbS0+bGVuZ3RoIC0gaGdlZSkgeworCQkJLyogTm8sIHNocmluayBoZnMrIGJ5IHRoZSBncmVhdGVzdCBwb3NzaWJsZSB2YWx1ZSAqLworCQkJaGdlZSA9ICgoaGdlZSArIGhmc19zZWN0X2Jsb2NrIC0gMSkgLyBoZnNfc2VjdF9ibG9jaykKKwkJCSAgICAgICAqIGhmc19zZWN0X2Jsb2NrOworCQkJcmVkID0gcHJpdl9kYXRhLT5wbHVzX2dlb20tPmxlbmd0aCAtIGhnZWU7CisJCX0KKwkJZW1iZWRkZWRfZ2VvbSA9IHBlZF9nZW9tZXRyeV9uZXcgKGdlb20tPmRldiwKKwkJCQkJCSAgcHJpdl9kYXRhLT5wbHVzX2dlb20tPnN0YXJ0LAorCQkJCQkJICBwcml2X2RhdGEtPnBsdXNfZ2VvbS0+bGVuZ3RoCisJCQkJCQkgIC0gcmVkKTsKKworCQkvKiBUaGVyZSBpcyBhIHdyYXBwZXIgc28gdGhlIHJlc2l6ZSBwcm9jZXNzIGlzIGEgdHdvIHN0YWdlcworCQkgICBwcm9jZXNzIChlbWJlZGRlZCByZXNpemluZyB0aGVuIHdyYXBwZXIgcmVzaXppbmcpIDoKKwkJICAgd2UgY3JlYXRlIGEgc3ViIHRpbWVyICovCisJCXBlZF90aW1lcl9yZXNldCAodGltZXIpOworCQlwZWRfdGltZXJfc2V0X3N0YXRlX25hbWUgKHRpbWVyLAorCQkJCQkgIF8oInNocmlua2luZyBlbWJlZGRlZCBIRlMrIHZvbHVtZSIpKTsKKwkJcGVkX3RpbWVyX3VwZGF0ZSh0aW1lciwgMC4wKTsKKwkJdGltZXJfcGx1cyA9IHBlZF90aW1lcl9uZXdfbmVzdGVkICh0aW1lciwgMC45OCk7CisJfSBlbHNlIHsKKwkJLyogTm8gd3JhcHBlciA6IHRoZSBkZXNpcmVkIGdlb21ldHJ5IGlzIHRoZSBkZXNpcmVkCisJCSAgIEhGUysgdm9sdW1lIGdlb21ldHJ5ICovCisJCWVtYmVkZGVkX2dlb20gPSBnZW9tOworCQl0aW1lcl9wbHVzID0gdGltZXI7CisJfQorCisJLyogUmVzaXplIHRoZSBIRlMrIHZvbHVtZSAqLworCWlmICghaGZzcGx1c192b2x1bWVfcmVzaXplIChmcywgZW1iZWRkZWRfZ2VvbSwgdGltZXJfcGx1cykpIHsKKwkJaWYgKHRpbWVyX3BsdXMgIT0gdGltZXIpIHBlZF90aW1lcl9kZXN0cm95X25lc3RlZCAodGltZXJfcGx1cyk7CisJCXBlZF9leGNlcHRpb25fdGhyb3cgKAorCQkJUEVEX0VYQ0VQVElPTl9FUlJPUiwKKwkJCVBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJXygiUmVzaXppbmcgdGhlIEhGUysgdm9sdW1lIGhhcyBmYWlsZWQuIikpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAocHJpdl9kYXRhLT53cmFwcGVyKSB7CisJCXBlZF9nZW9tZXRyeV9kZXN0cm95IChlbWJlZGRlZF9nZW9tKTsKKwkJcGVkX3RpbWVyX2Rlc3Ryb3lfbmVzdGVkICh0aW1lcl9wbHVzKTsKKwkJcGVkX3RpbWVyX3NldF9zdGF0ZV9uYW1lKHRpbWVyLCBfKCJzaHJpbmtpbmcgSEZTIHdyYXBwZXIiKSk7CisJCXRpbWVyX3BsdXMgPSBwZWRfdGltZXJfbmV3X25lc3RlZCAodGltZXIsIDAuMDIpOworCQkvKiBUaGVyZSdzIGEgd3JhcHBlciA6IHNlY29uZCBzdGFnZSA9IHJlc2l6aW5nIGl0ICovCisJCWlmICghaGZzcGx1c193cmFwcGVyX3VwZGF0ZSAoZnMpCisJCSAgICB8fCAhaGZzX3Jlc2l6ZSAocHJpdl9kYXRhLT53cmFwcGVyLCBnZW9tLCB0aW1lcl9wbHVzKSkgeworCQkJcGVkX3RpbWVyX2Rlc3Ryb3lfbmVzdGVkICh0aW1lcl9wbHVzKTsKKwkJCXBlZF9leGNlcHRpb25fdGhyb3cgKAorCQkJCVBFRF9FWENFUFRJT05fRVJST1IsCisJCQkJUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQkJXygiVXBkYXRpbmcgdGhlIEhGUyB3cmFwcGVyIGhhcyBmYWlsZWQuIikpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJcGVkX3RpbWVyX2Rlc3Ryb3lfbmVzdGVkICh0aW1lcl9wbHVzKTsKKwl9CisJcGVkX3RpbWVyX3VwZGF0ZSh0aW1lciwgMS4wKTsKKworCXJldHVybiAxOworfQorCisjaWZkZWYgSEZTX0VYVFJBQ1RfRlMKKy8qIFRoZSBmb2xsb3dpbmcgaXMgZm9yIGRlYnVnZ2luZyBwdXJwb3NlIG9ubHksIE5PVCBmb3IgcGFja2FnaW5nICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCit1aW50OF90KiBleHRyYWN0X2J1ZmZlciA9IE5VTEw7CisKK3N0YXRpYyBpbnQKK2hmc19leHRyYWN0X2ZpbGUoY29uc3QgY2hhciogZmlsZW5hbWUsIEhmc1ByaXZhdGVGaWxlKiBoZnNfZmlsZSkKK3sKKwlGSUxFKgkJZm91dDsKKwlQZWRTZWN0b3IJc2VjdDsKKworCWZvdXQgPSBmb3BlbihmaWxlbmFtZSwgInciKTsKKwlpZiAoIWZvdXQpIHJldHVybiAwOworCisJZm9yIChzZWN0ID0gMDsgc2VjdCA8IGhmc19maWxlLT5zZWN0X25iOyArK3NlY3QpIHsKKwkJaWYgKCFoZnNfZmlsZV9yZWFkX3NlY3RvcihoZnNfZmlsZSwgZXh0cmFjdF9idWZmZXIsIHNlY3QpKQorCQkJZ290byBlcnJfY2xvc2U7CisJCWlmICghZndyaXRlKGV4dHJhY3RfYnVmZmVyLCBQRURfU0VDVE9SX1NJWkVfREVGQVVMVCwgMSwgZm91dCkpCisJCQlnb3RvIGVycl9jbG9zZTsKKwl9CisKKwlyZXR1cm4gKGZjbG9zZShmb3V0KSA9PSAwID8gMSA6IDApOworCitlcnJfY2xvc2U6CisJZmNsb3NlKGZvdXQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitoZnNfZXh0cmFjdF9iaXRtYXAoY29uc3QgY2hhciogZmlsZW5hbWUsIFBlZEZpbGVTeXN0ZW0qIGZzKQoreworCUhmc1ByaXZhdGVGU0RhdGEqCQlwcml2X2RhdGEgPSAoSGZzUHJpdmF0ZUZTRGF0YSopCisJCQkJCQlmcy0+dHlwZV9zcGVjaWZpYzsKKwlIZnNNYXN0ZXJEaXJlY3RvcnlCbG9jayoJbWRiID0gcHJpdl9kYXRhLT5tZGI7CisJdW5zaWduZWQgaW50IAljb3VudDsKKwlGSUxFKgkJZm91dDsKKwlQZWRTZWN0b3IJc2VjdDsKKworCWZvdXQgPSBmb3BlbihmaWxlbmFtZSwgInciKTsKKwlpZiAoIWZvdXQpIHJldHVybiAwOworCisJZm9yIChzZWN0ID0gUEVEX0JFMTZfVE9fQ1BVKG1kYi0+dm9sdW1lX2JpdG1hcF9ibG9jayk7CisJICAgICBzZWN0IDwgUEVEX0JFMTZfVE9fQ1BVKG1kYi0+c3RhcnRfYmxvY2spOworCSAgICAgc2VjdCArPSBjb3VudCkgeworCQl1aW50MTZfdCBzdF9ibG9jayA9IFBFRF9CRTE2X1RPX0NQVShtZGItPnN0YXJ0X2Jsb2NrKTsKKwkJY291bnQgPSAoc3RfYmxvY2stc2VjdCkgPCBCTE9DS19NQVhfQlVGRiA/CisJCQkoc3RfYmxvY2stc2VjdCkgOiBCTE9DS19NQVhfQlVGRjsKKwkJaWYgKCFwZWRfZ2VvbWV0cnlfcmVhZChmcy0+Z2VvbSwgZXh0cmFjdF9idWZmZXIsIHNlY3QsIGNvdW50KSkKKwkJCWdvdG8gZXJyX2Nsb3NlOworCQlpZiAoIWZ3cml0ZSAoZXh0cmFjdF9idWZmZXIsIGNvdW50ICogUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQsCisJCQkgICAgIDEsIGZvdXQpKQorCQkJZ290byBlcnJfY2xvc2U7CisJfQorCisJcmV0dXJuIChmY2xvc2UoZm91dCkgPT0gMCA/IDEgOiAwKTsKKworZXJyX2Nsb3NlOgorCWZjbG9zZShmb3V0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAoraGZzX2V4dHJhY3RfbWRiIChjb25zdCBjaGFyKiBmaWxlbmFtZSwgUGVkRmlsZVN5c3RlbSogZnMpCit7CisJRklMRSoJCWZvdXQ7CisKKwlmb3V0ID0gZm9wZW4oZmlsZW5hbWUsICJ3Iik7CisJaWYgKCFmb3V0KSByZXR1cm4gMDsKKworCWlmICghcGVkX2dlb21ldHJ5X3JlYWQoZnMtPmdlb20sIGV4dHJhY3RfYnVmZmVyLCAyLCAxKSkKKwkJZ290byBlcnJfY2xvc2U7CisJaWYgKCFmd3JpdGUoZXh0cmFjdF9idWZmZXIsIFBFRF9TRUNUT1JfU0laRV9ERUZBVUxULCAxLCBmb3V0KSkKKwkJZ290byBlcnJfY2xvc2U7CisKKwlyZXR1cm4gKGZjbG9zZShmb3V0KSA9PSAwID8gMSA6IDApOworCitlcnJfY2xvc2U6CisJZmNsb3NlKGZvdXQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitoZnNfZXh0cmFjdCAoUGVkRmlsZVN5c3RlbSogZnMsIFBlZFRpbWVyKiB0aW1lcikKK3sKKwlIZnNQcml2YXRlRlNEYXRhKglwcml2X2RhdGEgPSAoSGZzUHJpdmF0ZUZTRGF0YSopCisJCQkJCQlmcy0+dHlwZV9zcGVjaWZpYzsKKworCXBlZF9leGNlcHRpb25fdGhyb3cgKAorCQlQRURfRVhDRVBUSU9OX0lORk9STUFUSU9OLAorCQlQRURfRVhDRVBUSU9OX09LLAorCQlfKCJUaGlzIGlzIG5vdCBhIHJlYWwgJXMgY2hlY2suICBUaGlzIGlzIGdvaW5nIHRvIGV4dHJhY3QgIgorCQkgICJzcGVjaWFsIGxvdyBsZXZlbCBmaWxlcyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLiIpLAorCQkiSEZTIik7CisKKwlleHRyYWN0X2J1ZmZlciA9IHBlZF9tYWxsb2MoQkxPQ0tfTUFYX0JVRkYgKiBQRURfU0VDVE9SX1NJWkVfREVGQVVMVCk7CisJaWYgKCFleHRyYWN0X2J1ZmZlcikgcmV0dXJuIDA7CisKKwloZnNfZXh0cmFjdF9tZGIoSEZTX01EQl9GSUxFTkFNRSwgZnMpOworCWhmc19leHRyYWN0X2ZpbGUoSEZTX0NBVEFMT0dfRklMRU5BTUUsIHByaXZfZGF0YS0+Y2F0YWxvZ19maWxlKTsKKwloZnNfZXh0cmFjdF9maWxlKEhGU19FWFRFTlRTX0ZJTEVOQU1FLCBwcml2X2RhdGEtPmV4dGVudF9maWxlKTsKKwloZnNfZXh0cmFjdF9iaXRtYXAoSEZTX0JJVE1BUF9GSUxFTkFNRSwgZnMpOworCisJcGVkX2ZyZWUoZXh0cmFjdF9idWZmZXIpOyBleHRyYWN0X2J1ZmZlciA9IE5VTEw7CisJcmV0dXJuIDA7IC8qIG5vdGhpbmcgaGFzIGJlZW4gZml4ZWQgYnkgdXMgISAqLworfQorCitzdGF0aWMgaW50CitoZnNwbHVzX2V4dHJhY3RfZmlsZShjb25zdCBjaGFyKiBmaWxlbmFtZSwgSGZzUFByaXZhdGVGaWxlKiBoZnNwX2ZpbGUpCit7CisJRklMRSoJCWZvdXQ7CisJdW5zaWduZWQgaW50CWNwX3NlY3Q7CisJUGVkU2VjdG9yCXJlbV9zZWN0OworCisJZm91dCA9IGZvcGVuKGZpbGVuYW1lLCAidyIpOworCWlmICghZm91dCkgcmV0dXJuIDA7CisKKwlmb3IgKHJlbV9zZWN0ID0gaGZzcF9maWxlLT5zZWN0X25iOyByZW1fc2VjdDsgcmVtX3NlY3QgLT0gY3Bfc2VjdCkgeworCQljcF9zZWN0ID0gcmVtX3NlY3QgPCBCTE9DS19NQVhfQlVGRiA/IHJlbV9zZWN0IDogQkxPQ0tfTUFYX0JVRkY7CisJCWlmICghaGZzcGx1c19maWxlX3JlYWQoaGZzcF9maWxlLCBleHRyYWN0X2J1ZmZlciwgCisJCQkJICAgICAgIGhmc3BfZmlsZS0+c2VjdF9uYiAtIHJlbV9zZWN0LCBjcF9zZWN0KSkKKwkJCWdvdG8gZXJyX2Nsb3NlOworCQlpZiAoIWZ3cml0ZSAoZXh0cmFjdF9idWZmZXIsIGNwX3NlY3QgKiBQRURfU0VDVE9SX1NJWkVfREVGQVVMVCwKKwkJCSAgICAgMSwgZm91dCkpCisJCQlnb3RvIGVycl9jbG9zZTsKKwl9CisKKwlyZXR1cm4gKGZjbG9zZShmb3V0KSA9PSAwID8gMSA6IDApOworCitlcnJfY2xvc2U6CisJZmNsb3NlKGZvdXQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitoZnNwbHVzX2V4dHJhY3RfdmggKGNvbnN0IGNoYXIqIGZpbGVuYW1lLCBQZWRGaWxlU3lzdGVtKiBmcykKK3sKKwlIZnNQUHJpdmF0ZUZTRGF0YSogCXByaXZfZGF0YSA9IChIZnNQUHJpdmF0ZUZTRGF0YSopCisJCQkJCQlmcy0+dHlwZV9zcGVjaWZpYzsKKwlGSUxFKgkJZm91dDsKKwlQZWRHZW9tZXRyeSoJZ2VvbSA9IHByaXZfZGF0YS0+cGx1c19nZW9tOworCisKKwlmb3V0ID0gZm9wZW4oZmlsZW5hbWUsICJ3Iik7CisJaWYgKCFmb3V0KSByZXR1cm4gMDsKKworCWlmICghcGVkX2dlb21ldHJ5X3JlYWQoZ2VvbSwgZXh0cmFjdF9idWZmZXIsIDIsIDEpKQorCQlnb3RvIGVycl9jbG9zZTsKKwlpZiAoIWZ3cml0ZShleHRyYWN0X2J1ZmZlciwgUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQsIDEsIGZvdXQpKQorCQlnb3RvIGVycl9jbG9zZTsKKworCXJldHVybiAoZmNsb3NlKGZvdXQpID09IDAgPyAxIDogMCk7CisKK2Vycl9jbG9zZToKKwlmY2xvc2UoZm91dCk7CisJcmV0dXJuIDA7Cit9CisKKy8qIFRPRE8gOiB1c2UgdGhlIHRpbWVyIHRvIHJlcG9ydCB3aGF0IGlzIGhhcHBlbmluZyAqLworLyogVE9ETyA6IHVzZSBleGNlcHRpb25zIHRvIHJlcG9ydCBlcnJvcnMgKi8KK3N0YXRpYyBpbnQKK2hmc3BsdXNfZXh0cmFjdCAoUGVkRmlsZVN5c3RlbSogZnMsIFBlZFRpbWVyKiB0aW1lcikKK3sKKwlIZnNQUHJpdmF0ZUZTRGF0YSogCXByaXZfZGF0YSA9IChIZnNQUHJpdmF0ZUZTRGF0YSopCisJCQkJCQlmcy0+dHlwZV9zcGVjaWZpYzsKKwlIZnNQVm9sdW1lSGVhZGVyKgl2aCA9IHByaXZfZGF0YS0+dmg7CisJSGZzUFByaXZhdGVGaWxlKglzdGFydHVwX2ZpbGU7CisKKwlpZiAocHJpdl9kYXRhLT53cmFwcGVyKSB7CisJCS8qIFRPRE8gOiBjcmVhdGUgbmVzdGVkIHRpbWVyICovCisJCWhmc19leHRyYWN0IChwcml2X2RhdGEtPndyYXBwZXIsIHRpbWVyKTsKKwl9CisKKwlwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJUEVEX0VYQ0VQVElPTl9JTkZPUk1BVElPTiwKKwkJUEVEX0VYQ0VQVElPTl9PSywKKwkJXygiVGhpcyBpcyBub3QgYSByZWFsICVzIGNoZWNrLiAgVGhpcyBpcyBnb2luZyB0byBleHRyYWN0ICIKKwkJICAic3BlY2lhbCBsb3cgbGV2ZWwgZmlsZXMgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4iKSwKKwkJIkhGUysiKTsKKworCWV4dHJhY3RfYnVmZmVyID0gcGVkX21hbGxvYyhCTE9DS19NQVhfQlVGRiAqIFBFRF9TRUNUT1JfU0laRV9ERUZBVUxUKTsKKwlpZiAoIWV4dHJhY3RfYnVmZmVyKSByZXR1cm4gMDsKKworCWhmc3BsdXNfZXh0cmFjdF92aChIRlNQX1ZIX0ZJTEVOQU1FLCBmcyk7CisJaGZzcGx1c19leHRyYWN0X2ZpbGUoSEZTUF9DQVRBTE9HX0ZJTEVOQU1FLCBwcml2X2RhdGEtPmNhdGFsb2dfZmlsZSk7CisJaGZzcGx1c19leHRyYWN0X2ZpbGUoSEZTUF9FWFRFTlRTX0ZJTEVOQU1FLCBwcml2X2RhdGEtPmV4dGVudHNfZmlsZSk7CisJaGZzcGx1c19leHRyYWN0X2ZpbGUoSEZTUF9BVFRSSUJfRklMRU5BTUUsIHByaXZfZGF0YS0+YXR0cmlidXRlc19maWxlKTsKKwloZnNwbHVzX2V4dHJhY3RfZmlsZShIRlNQX0JJVE1BUF9GSUxFTkFNRSwgcHJpdl9kYXRhLT5hbGxvY2F0aW9uX2ZpbGUpOworCisJc3RhcnR1cF9maWxlID0gaGZzcGx1c19maWxlX29wZW4oZnMsIFBFRF9DUFVfVE9fQkUzMihIRlNQX1NUQVJUVVBfSUQpLAorCQkJCQl2aC0+c3RhcnR1cF9maWxlLmV4dGVudHMsCisJCQkJCVBFRF9CRTY0X1RPX0NQVSAoCisJCQkJCSAgIHZoLT5zdGFydHVwX2ZpbGUubG9naWNhbF9zaXplKQorCQkJCQkvIFBFRF9TRUNUT1JfU0laRV9ERUZBVUxUKTsKKwlpZiAoc3RhcnR1cF9maWxlKSB7CisJCWhmc3BsdXNfZXh0cmFjdF9maWxlKEhGU1BfU1RBUlRVUF9GSUxFTkFNRSwgc3RhcnR1cF9maWxlKTsKKwkJaGZzcGx1c19maWxlX2Nsb3NlKHN0YXJ0dXBfZmlsZSk7IHN0YXJ0dXBfZmlsZSA9IE5VTEw7CisJfQorCisJcGVkX2ZyZWUoZXh0cmFjdF9idWZmZXIpOyBleHRyYWN0X2J1ZmZlciA9IE5VTEw7CisJcmV0dXJuIDA7IC8qIG5vdGhpbmcgaGFzIGJlZW4gZml4ZWQgYnkgdXMgISAqLworfQorI2VuZGlmIC8qIEhGU19FWFRSQUNUX0ZTICovCisKKyNlbmRpZiAvKiAhRElTQ09WRVJfT05MWSAqLworCitzdGF0aWMgUGVkRmlsZVN5c3RlbU9wcyBoZnNfb3BzID0geworCXByb2JlOgkJaGZzX3Byb2JlLAorI2lmbmRlZiBESVNDT1ZFUl9PTkxZCisJY2xvYmJlcjoJaGZzX2Nsb2JiZXIsCisJb3BlbjoJCWhmc19vcGVuLAorCWNyZWF0ZToJCU5VTEwsCisJY2xvc2U6CQloZnNfY2xvc2UsCisjaWZuZGVmIEhGU19FWFRSQUNUX0ZTCisJY2hlY2s6CQlOVUxMLAorI2Vsc2UKKwljaGVjazoJCWhmc19leHRyYWN0LAorI2VuZGlmCisJY29weToJCU5VTEwsCisJcmVzaXplOgkJaGZzX3Jlc2l6ZSwKKwlnZXRfY3JlYXRlX2NvbnN0cmFpbnQ6CU5VTEwsCisJZ2V0X3Jlc2l6ZV9jb25zdHJhaW50OgloZnNfZ2V0X3Jlc2l6ZV9jb25zdHJhaW50LAorCWdldF9jb3B5X2NvbnN0cmFpbnQ6CU5VTEwsCisjZWxzZSAvKiBESVNDT1ZFUl9PTkxZICovCisJY2xvYmJlcjoJTlVMTCwKKwlvcGVuOgkJTlVMTCwKKwljcmVhdGU6CQlOVUxMLAorCWNsb3NlOgkJTlVMTCwKKwljaGVjazoJCU5VTEwsCisJY29weToJCU5VTEwsCisJcmVzaXplOgkJTlVMTCwKKwlnZXRfY3JlYXRlX2NvbnN0cmFpbnQ6CU5VTEwsCisJZ2V0X3Jlc2l6ZV9jb25zdHJhaW50OglOVUxMLAorCWdldF9jb3B5X2NvbnN0cmFpbnQ6CU5VTEwsCisjZW5kaWYgLyogRElTQ09WRVJfT05MWSAqLworfTsKKworc3RhdGljIFBlZEZpbGVTeXN0ZW1PcHMgaGZzcGx1c19vcHMgPSB7CisJcHJvYmU6CQloZnNwbHVzX3Byb2JlLAorI2lmbmRlZiBESVNDT1ZFUl9PTkxZCisJY2xvYmJlcjoJaGZzcGx1c19jbG9iYmVyLAorCW9wZW46CQloZnNwbHVzX29wZW4sCisJY3JlYXRlOgkJTlVMTCwKKwljbG9zZToJCWhmc3BsdXNfY2xvc2UsCisjaWZuZGVmIEhGU19FWFRSQUNUX0ZTCisJY2hlY2s6CQlOVUxMLAorI2Vsc2UKKwljaGVjazoJCWhmc3BsdXNfZXh0cmFjdCwKKyNlbmRpZgorCWNvcHk6CQlOVUxMLAorCXJlc2l6ZToJCWhmc3BsdXNfcmVzaXplLAorCWdldF9jcmVhdGVfY29uc3RyYWludDoJTlVMTCwKKwlnZXRfcmVzaXplX2NvbnN0cmFpbnQ6CWhmc3BsdXNfZ2V0X3Jlc2l6ZV9jb25zdHJhaW50LAorCWdldF9jb3B5X2NvbnN0cmFpbnQ6CU5VTEwsCisjZWxzZSAvKiBESVNDT1ZFUl9PTkxZICovCisJY2xvYmJlcjoJTlVMTCwKKwlvcGVuOgkJTlVMTCwKKwljcmVhdGU6CQlOVUxMLAorCWNsb3NlOgkJTlVMTCwKKwljaGVjazoJCU5VTEwsCisJY29weToJCU5VTEwsCisJcmVzaXplOgkJTlVMTCwKKwlnZXRfY3JlYXRlX2NvbnN0cmFpbnQ6CU5VTEwsCisJZ2V0X3Jlc2l6ZV9jb25zdHJhaW50OglOVUxMLAorCWdldF9jb3B5X2NvbnN0cmFpbnQ6CU5VTEwsCisjZW5kaWYgLyogRElTQ09WRVJfT05MWSAqLworfTsKKworc3RhdGljIFBlZEZpbGVTeXN0ZW1PcHMgaGZzeF9vcHMgPSB7CisJcHJvYmU6CQloZnN4X3Byb2JlLAorI2lmbmRlZiBESVNDT1ZFUl9PTkxZCisJY2xvYmJlcjoJaGZzX2Nsb2JiZXIsIC8qIE5PVCBoZnNwbHVzX2Nsb2JiZXIgIQorCQkJCQlIRlNYIGNhbid0IGJlIGVtYmVkZGVkICovCisJb3BlbjoJCWhmc3BsdXNfb3BlbiwKKwljcmVhdGU6CQlOVUxMLAorCWNsb3NlOgkJaGZzcGx1c19jbG9zZSwKKyNpZm5kZWYgSEZTX0VYVFJBQ1RfRlMKKwljaGVjazoJCU5VTEwsCisjZWxzZQorCWNoZWNrOgkJaGZzcGx1c19leHRyYWN0LAorI2VuZGlmCisJY29weToJCU5VTEwsCisJcmVzaXplOgkJaGZzcGx1c19yZXNpemUsCisJZ2V0X2NyZWF0ZV9jb25zdHJhaW50OglOVUxMLAorCWdldF9yZXNpemVfY29uc3RyYWludDoJaGZzcGx1c19nZXRfcmVzaXplX2NvbnN0cmFpbnQsCisJZ2V0X2NvcHlfY29uc3RyYWludDoJTlVMTCwKKyNlbHNlIC8qIERJU0NPVkVSX09OTFkgKi8KKwljbG9iYmVyOglOVUxMLAorCW9wZW46CQlOVUxMLAorCWNyZWF0ZToJCU5VTEwsCisJY2xvc2U6CQlOVUxMLAorCWNoZWNrOgkJTlVMTCwKKwljb3B5OgkJTlVMTCwKKwlyZXNpemU6CQlOVUxMLAorCWdldF9jcmVhdGVfY29uc3RyYWludDoJTlVMTCwKKwlnZXRfcmVzaXplX2NvbnN0cmFpbnQ6CU5VTEwsCisJZ2V0X2NvcHlfY29uc3RyYWludDoJTlVMTCwKKyNlbmRpZiAvKiBESVNDT1ZFUl9PTkxZICovCit9OworCisKK3N0YXRpYyBQZWRGaWxlU3lzdGVtVHlwZSBoZnNfdHlwZSA9IHsKKwluZXh0OglOVUxMLAorCW9wczoJJmhmc19vcHMsCisJbmFtZToJImhmcyIsCisJYmxvY2tfc2l6ZXM6IEhGU19CTE9DS19TSVpFUworfTsKKworc3RhdGljIFBlZEZpbGVTeXN0ZW1UeXBlIGhmc3BsdXNfdHlwZSA9IHsKKwluZXh0OglOVUxMLAorCW9wczoJJmhmc3BsdXNfb3BzLAorCW5hbWU6CSJoZnMrIiwKKwlibG9ja19zaXplczogSEZTUF9CTE9DS19TSVpFUworfTsKKworc3RhdGljIFBlZEZpbGVTeXN0ZW1UeXBlIGhmc3hfdHlwZSA9IHsKKwluZXh0OglOVUxMLAorCW9wczoJJmhmc3hfb3BzLAorCW5hbWU6CSJoZnN4IiwKKwlibG9ja19zaXplczogSEZTWF9CTE9DS19TSVpFUworfTsKKwordm9pZAorcGVkX2ZpbGVfc3lzdGVtX2hmc19pbml0ICgpCit7CisJcGVkX2ZpbGVfc3lzdGVtX3R5cGVfcmVnaXN0ZXIgKCZoZnNfdHlwZSk7CisJcGVkX2ZpbGVfc3lzdGVtX3R5cGVfcmVnaXN0ZXIgKCZoZnNwbHVzX3R5cGUpOworCXBlZF9maWxlX3N5c3RlbV90eXBlX3JlZ2lzdGVyICgmaGZzeF90eXBlKTsKK30KKwordm9pZAorcGVkX2ZpbGVfc3lzdGVtX2hmc19kb25lICgpCit7CisJcGVkX2ZpbGVfc3lzdGVtX3R5cGVfdW5yZWdpc3RlciAoJmhmc190eXBlKTsKKwlwZWRfZmlsZV9zeXN0ZW1fdHlwZV91bnJlZ2lzdGVyICgmaGZzcGx1c190eXBlKTsKKwlwZWRfZmlsZV9zeXN0ZW1fdHlwZV91bnJlZ2lzdGVyICgmaGZzeF90eXBlKTsKK30KZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvaGZzL2hmcy5oIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9oZnMvaGZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI2ZDUwZAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvaGZzL2hmcy5oCkBAIC0wLDAgKzEsNjQ4IEBACisvKgorICAgIGxpYnBhcnRlZCAtIGEgbGlicmFyeSBmb3IgbWFuaXB1bGF0aW5nIGRpc2sgcGFydGl0aW9ucworICAgIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKKyovCisKKyNpZm5kZWYgX0hGU19ICisjZGVmaW5lIF9IRlNfSAorCisvKiBXQVJOSU5HIDogYm4gaXMgdXNlZCAyIHRpbWVzIGluIHRoZXNlcyBtYWNybyAqLworLyogc28gX25ldmVyXyB1c2Ugc2lkZSBlZmZlY3Qgb3BlcmF0b3JzIHdoZW4gdXNpbmcgdGhlbSAqLworI2RlZmluZSBUU1RfQkxPQ19PQ0NVUEFUSU9OKHRhYixibikgXAorCSgoKHRhYilbKGJuKS84XSkgICYgICgxPDwoNy0oKGJuKSY3KSkpKQorI2RlZmluZSBTRVRfQkxPQ19PQ0NVUEFUSU9OKHRhYixibikgXAorCSgoKHRhYilbKGJuKS84XSkgfD0gICgxPDwoNy0oKGJuKSY3KSkpKQorI2RlZmluZSBDTFJfQkxPQ19PQ0NVUEFUSU9OKHRhYixibikgXAorCSgoKHRhYilbKGJuKS84XSkgJj0gfigxPDwoNy0oKGJuKSY3KSkpKQorCisvKiBNYXhpbXVtIG51bWJlciBvZiBibG9ja3MgZm9yIHRoZSBjb3B5IGJ1ZmZlcnMgKi8KKyNkZWZpbmUgQkxPQ0tfTUFYX0JVRkYJMjU2CisvKiBNYXhpbXVtIHNpemUgb2YgdGhlIGNvcHkgYnVmZmVycywgaW4gYnl0ZXMgKi8KKyNkZWZpbmUgQllURVNfTUFYX0JVRkYJODM4ODYwOAorCisvKiBBcHBsZSBDcmVhdG9yIENvZGVzIGZvbGxvdyAqLworI2RlZmluZSBIRlNQX0lNUExfU2huawkweDUzNjg2ZTZiCS8qIGluIHVzZSAqLworI2RlZmluZSBIRlNQX0lNUExfWHBuZAkweDU4NzA2ZTY0CS8qIHJlc2VydmVkICovCisjZGVmaW5lIEhGU1BfSU1QTF9SZXN6CTB4NTI2NTczN2EJLyogcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgSEZTUF9JTVBMX1BIcHgJMHg1MDQ4MmI3OAkvKiByZXNlcnZlZCAqLworI2RlZmluZSBIRlNQX0lNUExfdHJhUCAgMHg3NDcyNjE1MAkvKiByZXNlcnZlZCAqLworI2RlZmluZSBIRlNQX0lNUExfR251UCAgMHg0NzZlNzU1MAkvKiByZXNlcnZlZCAqLworCisjZGVmaW5lIEhGU19TSUdOQVRVUkUJMHg0MjQ0CQkvKiAnQkQnICovCisjZGVmaW5lIEhGU1BfU0lHTkFUVVJFCTB4NDgyQgkJLyogJ0grJyAqLworI2RlZmluZSBIRlNYX1NJR05BVFVSRSAgMHg0ODU4CQkvKiAnSFgnICovCisKKyNkZWZpbmUgSEZTUF9WRVJTSU9OCSA0CisjZGVmaW5lIEhGU1hfVkVSU0lPTgkgNQorCisjZGVmaW5lIEhGU19IQVJEX0xPQ0sJIDcKKyNkZWZpbmUgSEZTX1VOTU9VTlRFRAkgOAorI2RlZmluZSBIRlNfQkFEX1NQQVJFRAkgOQorI2RlZmluZSBIRlNfU09GVF9MT0NLCTE1CisjZGVmaW5lIEhGU1BfTk9fQ0FDSEUJMTAKKyNkZWZpbmUgSEZTUF9JTkNPTlNJU1RFTlQgMTEKKyNkZWZpbmUgSEZTUF9SRVVTRV9DTklECTEyCisjZGVmaW5lIEhGU1BfSk9VUk5BTEVECTEzCisKKyNkZWZpbmUgSEZTX0lEWF9OT0RFCTB4MDAKKyNkZWZpbmUgSEZTX0hEUl9OT0RFCTB4MDEKKyNkZWZpbmUgSEZTX01BUF9OT0RFCTB4MDIKKyNkZWZpbmUgSEZTX0xFQUZfTk9ERQkweEZGCisKKyNkZWZpbmUgSEZTX0ZJUlNUX1JFQwkweDBFCisjZGVmaW5lIEhGU19OU0RfSERfUkVDCTB4NzgKKyNkZWZpbmUgSEZTX01BUF9SRUMJMHhGOAorCisjZGVmaW5lIEhGU19EQVRBX0ZPUksJMHgwMAorI2RlZmluZSBIRlNfUkVTX0ZPUksJMHhGRgorCisjZGVmaW5lIEhGU19DQVRfRElSCTB4MDEKKyNkZWZpbmUgSEZTX0NBVF9GSUxFCTB4MDIKKyNkZWZpbmUgSEZTX0NBVF9ESVJfVEgJMHgwMworI2RlZmluZSBIRlNfQ0FUX0ZJTEVfVEgJMHgwNAorCisjZGVmaW5lIEhGU1BfQVRUUl9JTkxJTkUJMHgxMAorI2RlZmluZSBIRlNQX0FUVFJfRk9SSwkJMHgyMAorI2RlZmluZSBIRlNQX0FUVFJfRVhURU5UUwkweDMwCisKKyNkZWZpbmUgSEZTX1JPT1RfUEFSX0lECQkweDAxCisjZGVmaW5lIEhGU19ST09UX0RJUl9JRAkJMHgwMgorI2RlZmluZSBIRlNfWFRFTlRfSUQJCTB4MDMKKyNkZWZpbmUgSEZTX0NBVEFMT0dfSUQJCTB4MDQKKyNkZWZpbmUgSEZTX0JBRF9CTE9DS19JRAkweDA1CisjZGVmaW5lIEhGU1BfQUxMT0NfSUQJCTB4MDYKKyNkZWZpbmUgSEZTUF9TVEFSVFVQX0lECQkweDA3CisjZGVmaW5lIEhGU1BfQVRUUklCX0lECQkweDA4CisjZGVmaW5lIEhGU1BfQk9HVVNfSUQJCTB4MEYKKyNkZWZpbmUgSEZTUF9GSVJTVF9BVl9JRAkweDEwCisKKyNkZWZpbmUgSEZTSl9KT1VSTl9JTl9GUwkweDAwCisjZGVmaW5lIEhGU0pfSk9VUk5fT1RIRVJfREVWCTB4MDEKKyNkZWZpbmUgSEZTSl9KT1VSTl9ORUVEX0lOSVQJMHgwMgorCisjZGVmaW5lIEhGU0pfSEVBREVSX01BR0lDCTB4NGE0ZTRjNzgKKyNkZWZpbmUgSEZTSl9FTkRJQU5fTUFHSUMJMHgxMjM0NTY3OAorCisjZGVmaW5lIEhGU1hfQ0FTRV9GT0xESU5HCTB4Q0YJLyogY2FzZSBpbnNlbnNpdGl2ZSBIRlNYICovCisjZGVmaW5lIEhGU1hfQklOQVJZX0NPTVBBUkUJMHhCQwkvKiBjYXNlIHNlbnNpdGl2ZSAgIEhGU1ggKi8KKworI2RlZmluZSBIRlNfRVhUX05CCTMKKyNkZWZpbmUgSEZTUF9FWFRfTkIJOAorCisvKiBEZWZpbmUgdGhlIGZpbGVuYW1lcyB1c2VkIGJ5IHRoZSBGUyBleHRyYWN0b3IgKi8KKyNpZmRlZiBIRlNfRVhUUkFDVF9GUworCisjZGVmaW5lIEhGU19NREJfRklMRU5BTUUJIm1kYi5oZnMiCisjZGVmaW5lIEhGU19DQVRBTE9HX0ZJTEVOQU1FCSJjYXRhbG9nLmhmcyIKKyNkZWZpbmUgSEZTX0VYVEVOVFNfRklMRU5BTUUJImV4dGVudHMuaGZzIgorI2RlZmluZSBIRlNfQklUTUFQX0ZJTEVOQU1FCSJiaXRtYXAuaGZzIgorCisjZGVmaW5lIEhGU1BfVkhfRklMRU5BTUUJInZoLmhmc3BsdXMiCisjZGVmaW5lIEhGU1BfQ0FUQUxPR19GSUxFTkFNRQkiY2F0YWxvZy5oZnNwbHVzIgorI2RlZmluZSBIRlNQX0VYVEVOVFNfRklMRU5BTUUJImV4dGVudHMuaGZzcGx1cyIKKyNkZWZpbmUgSEZTUF9CSVRNQVBfRklMRU5BTUUJImJpdG1hcC5oZnNwbHVzIgorI2RlZmluZSBIRlNQX0FUVFJJQl9GSUxFTkFNRQkiYXR0cmlidXRlcy5oZnNwbHVzIgorI2RlZmluZSBIRlNQX1NUQVJUVVBfRklMRU5BTUUJInN0YXJ0dXAuaGZzcGx1cyIKKworI2VuZGlmIC8qIEhGU19FWFRSQUNUX0ZTICovCisKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogLS0gICAgICBIRlMgREFUQSBTVFJVQ1RVUkVTICAgICAgLS0gKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIEV4dGVudCBkZXNjcmlwdG9yICovCitzdHJ1Y3QgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIF9IZnNFeHREZXNjcmlwdG9yIHsKKyAgICAgICAgdWludDE2X3QJc3RhcnRfYmxvY2s7CisgICAgICAgIHVpbnQxNl90CWJsb2NrX2NvdW50OworfTsKK3R5cGVkZWYgc3RydWN0IF9IZnNFeHREZXNjcmlwdG9yIEhmc0V4dERlc2NyaXB0b3I7Cit0eXBlZGVmIEhmc0V4dERlc2NyaXB0b3IgSGZzRXh0RGF0YVJlY1tIRlNfRVhUX05CXTsKKworLyogVm9sdW1lIGhlYWRlciAqLworc3RydWN0IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBfSGZzTWFzdGVyRGlyZWN0b3J5QmxvY2sgeworICAgICAgICB1aW50MTZfdCAgICAgICAgIHNpZ25hdHVyZTsKKyAgICAgICAgdWludDMyX3QgICAgICAgICBjcmVhdGVfZGF0ZTsKKyAgICAgICAgdWludDMyX3QgICAgICAgICBtb2RpZnlfZGF0ZTsKKyAgICAgICAgdWludDE2X3QgICAgICAgICB2b2x1bWVfYXR0cmlidXRlczsKKyAgICAgICAgdWludDE2X3QgICAgICAgICBmaWxlc19pbl9yb290OworICAgICAgICB1aW50MTZfdCAgICAgICAgIHZvbHVtZV9iaXRtYXBfYmxvY2s7ICAgICAgIC8qIGluIHNlY3RvcnMgKi8KKyAgICAgICAgdWludDE2X3QgICAgICAgICBuZXh0X2FsbG9jYXRpb247CisgICAgICAgIHVpbnQxNl90ICAgICAgICAgdG90YWxfYmxvY2tzOworICAgICAgICB1aW50MzJfdCAgICAgICAgIGJsb2NrX3NpemU7ICAgICAgICAgICAgICAgIC8qIGluIGJ5dGVzICovCisgICAgICAgIHVpbnQzMl90ICAgICAgICAgZGVmX2NsdW1wX3NpemU7ICAgICAgICAgICAgLyogaW4gYnl0ZXMgKi8KKyAgICAgICAgdWludDE2X3QgICAgICAgICBzdGFydF9ibG9jazsgICAgICAgICAgICAgICAvKiBpbiBzZWN0b3JzICovCisgICAgICAgIHVpbnQzMl90ICAgICAgICAgbmV4dF9mcmVlX25vZGU7CisgICAgICAgIHVpbnQxNl90ICAgICAgICAgZnJlZV9ibG9ja3M7CisgICAgICAgIHVpbnQ4X3QgICAgICAgICAgbmFtZV9sZW5ndGg7CisgICAgICAgIGNoYXIgICAgICAgICAgICAgbmFtZVsyN107CisgICAgICAgIHVpbnQzMl90ICAgICAgICAgYmFja3VwX2RhdGU7CisgICAgICAgIHVpbnQxNl90ICAgICAgICAgYmFja3VwX251bWJlcjsKKyAgICAgICAgdWludDMyX3QgICAgICAgICB3cml0ZV9jb3VudDsKKyAgICAgICAgdWludDMyX3QgICAgICAgICBleHRlbnRzX2NsdW1wOworICAgICAgICB1aW50MzJfdCAgICAgICAgIGNhdGFsb2dfY2x1bXA7CisgICAgICAgIHVpbnQxNl90ICAgICAgICAgZGlyc19pbl9yb290OworICAgICAgICB1aW50MzJfdCAgICAgICAgIGZpbGVfY291bnQ7CisgICAgICAgIHVpbnQzMl90ICAgICAgICAgZGlyX2NvdW50OworICAgICAgICB1aW50MzJfdCAgICAgICAgIGZpbmRlcl9pbmZvWzhdOworICAgICAgICB1bmlvbiBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgeworICAgICAgICAgICAgICAgIHN0cnVjdCBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgICAgdm9sdW1lX2NhY2hlX3NpemU7ICAgIC8qIGluIGJsb2NrcyAqLworICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgICAgYml0bWFwX2NhY2hlX3NpemU7ICAgIC8qIGluIGJsb2NrcyAqLworICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgICAgY29tbW9uX2NhY2hlX3NpemU7ICAgIC8qIGluIGJsb2NrcyAqLworICAgICAgICAgICAgICAgIH0gbGVnYWN5OworICAgICAgICAgICAgICAgIHN0cnVjdCBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgICAgICAgICAgICBzaWduYXR1cmU7CisgICAgICAgICAgICAgICAgICAgICAgICBIZnNFeHREZXNjcmlwdG9yICAgIGxvY2F0aW9uOworICAgICAgICAgICAgICAgIH0gZW1iZWRkZWQ7CisgICAgICAgIH0gb2xkX25ldzsKKyAgICAgICAgdWludDMyX3QgICAgICAgICBleHRlbnRzX2ZpbGVfc2l6ZTsgIC8qIGluIGJ5dGVzLCBibG9jayBzaXplIG11bHRpcGxlICovCisgICAgICAgIEhmc0V4dERhdGFSZWMgICAgZXh0ZW50c19maWxlX3JlYzsKKyAgICAgICAgdWludDMyX3QgICAgICAgICBjYXRhbG9nX2ZpbGVfc2l6ZTsgIC8qIGluIGJ5dGVzLCBibG9jayBzaXplIG11bHRpcGxlICovCisgICAgICAgIEhmc0V4dERhdGFSZWMgICAgY2F0YWxvZ19maWxlX3JlYzsKK307Cit0eXBlZGVmIHN0cnVjdCBfSGZzTWFzdGVyRGlyZWN0b3J5QmxvY2sgSGZzTWFzdGVyRGlyZWN0b3J5QmxvY2s7CisKKy8qIEIqLVRyZWUgTm9kZSBEZXNjcmlwdG9yICovCitzdHJ1Y3QgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIF9IZnNOb2RlRGVzY3JpcHRvciB7CisgICAgICAgIHVpbnQzMl90ICAgICAgICBuZXh0OworICAgICAgICB1aW50MzJfdCAgICAgICAgcHJldmlvdXM7CisgICAgICAgIGludDhfdCAgICAgICAgICB0eXBlOworICAgICAgICB1aW50OF90ICAgICAgICAgaGVpZ2h0OworICAgICAgICB1aW50MTZfdCAgICAgICAgcmVjX25iOworICAgICAgICB1aW50MTZfdCAgICAgICAgcmVzZXJ2ZWQ7Cit9OwordHlwZWRlZiBzdHJ1Y3QgX0hmc05vZGVEZXNjcmlwdG9yIEhmc05vZGVEZXNjcmlwdG9yOworCisvKiBIZWFkZXIgcmVjb3JkIG9mIGEgd2hvbGUgQiotVHJlZSAqLworc3RydWN0IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBfSGZzSGVhZGVyUmVjb3JkIHsKKyAgICAgICAgdWludDE2X3QgICAgICAgIGRlcHRoOworICAgICAgICB1aW50MzJfdCAgICAgICAgcm9vdF9ub2RlOworICAgICAgICB1aW50MzJfdCAgICAgICAgbGVhZl9yZWNvcmRzOworICAgICAgICB1aW50MzJfdCAgICAgICAgZmlyc3RfbGVhZl9ub2RlOworICAgICAgICB1aW50MzJfdCAgICAgICAgbGFzdF9sZWFmX25vZGU7CisgICAgICAgIHVpbnQxNl90ICAgICAgICBub2RlX3NpemU7CisgICAgICAgIHVpbnQxNl90ICAgICAgICBtYXhfa2V5X2xlbjsKKyAgICAgICAgdWludDMyX3QgICAgICAgIHRvdGFsX25vZGVzOworICAgICAgICB1aW50MzJfdCAgICAgICAgZnJlZV9ub2RlczsKKyAgICAgICAgaW50OF90ICAgICAgICAgIHJlc2VydmVkWzc2XTsKK307Cit0eXBlZGVmIHN0cnVjdCBfSGZzSGVhZGVyUmVjb3JkIEhmc0hlYWRlclJlY29yZDsKKworLyogQ2F0YWxvZyBrZXkgZm9yIEIqLVRyZWUgbG9va3VwIGluIHRoZSBjYXRhbG9nIGZpbGUgKi8KK3N0cnVjdCBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgX0hmc0NhdGFsb2dLZXkgeworICAgICAgICB1aW50OF90ICAgICAgICAga2V5X2xlbmd0aDsgLyogbGVuZ3RoIG9mIHRoZSBrZXkgd2l0aG91dCBrZXlfbGVuZ3RoICovCisgICAgICAgIHVpbnQ4X3QgICAgICAgICByZXNlcnZlZDsKKyAgICAgICAgdWludDMyX3QgICAgICAgIHBhcmVudF9JRDsKKyAgICAgICAgdWludDhfdCAgICAgICAgIG5hbWVfbGVuZ3RoOworICAgICAgICBjaGFyICAgICAgICAgICAgbmFtZVszMV07ICAgLyogaW4gZmFjdCBwaHlzaWNhbHkgMSB1cHRvIDMxICovCit9OwordHlwZWRlZiBzdHJ1Y3QgX0hmc0NhdGFsb2dLZXkgSGZzQ2F0YWxvZ0tleTsKKworLyogRXh0ZW50cyBvdmVyZmxvdyBrZXkgZm9yIEIqLVRyZWUgbG9va3VwICovCitzdHJ1Y3QgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIF9IZnNFeHRlbnRLZXkgeworICAgICAgICB1aW50OF90ICAgICAgICAga2V5X2xlbmd0aDsgLyogbGVuZ3RoIG9mIHRoZSBrZXkgd2l0aG91dCBrZXlfbGVuZ3RoICovCisgICAgICAgIHVpbnQ4X3QgICAgICAgICB0eXBlOyAgICAgICAvKiBkYXRhIG9yIHJlc3NvdXJjZSBmb3JrICovCisgICAgICAgIHVpbnQzMl90ICAgICAgICBmaWxlX0lEOworICAgICAgICB1aW50MTZfdCAgICAgICAgc3RhcnQ7Cit9OwordHlwZWRlZiBzdHJ1Y3QgX0hmc0V4dGVudEtleSBIZnNFeHRlbnRLZXk7CisKKy8qIENhdGFsb2cgc3ViZGF0YSBjYXNlIGRpcmVjdG9yeSAqLworc3RydWN0IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBfSGZzRGlyIHsKKyAgICAgICAgdWludDE2X3QgICAgICAgIGZsYWdzOworICAgICAgICB1aW50MTZfdCAgICAgICAgdmFsZW5jZTsgICAgICAgIC8qIG51bWJlciBvZiBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeSAqLworICAgICAgICB1aW50MzJfdCAgICAgICAgZGlyX0lEOworICAgICAgICB1aW50MzJfdCAgICAgICAgY3JlYXRlX2RhdGU7CisgICAgICAgIHVpbnQzMl90ICAgICAgICBtb2RpZnlfZGF0ZTsKKyAgICAgICAgdWludDMyX3QgICAgICAgIGJhY2t1cF9kYXRlOworICAgICAgICBpbnQ4X3QgICAgICAgICAgREluZm9bMTZdOyAgICAgIC8qIHVzZWQgYnkgRmluZGVyLCBoYW5kbGUgYXMgcmVzZXJ2ZWQgKi8KKyAgICAgICAgaW50OF90ICAgICAgICAgIERYSW5mb1sxNl07ICAgICAvKiB1c2VkIGJ5IEZpbmRlciwgaGFuZGxlIGFzIHJlc2VydmVkICovCisgICAgICAgIHVpbnQzMl90ICAgICAgICByZXNlcnZlZFs0XTsKK307Cit0eXBlZGVmIHN0cnVjdCBfSGZzRGlyIEhmc0RpcjsKKworLyogQ2F0YWxvZyBzdWJkYXRhIGNhc2UgZmlsZSAqLworc3RydWN0IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBfSGZzRmlsZSB7CisgICAgICAgIGludDhfdCAgICAgICAgICBmbGFnczsKKyAgICAgICAgaW50OF90ICAgICAgICAgIHR5cGU7ICAgICAgICAgICAvKiBzaG91bGQgYmUgMCAqLworICAgICAgICBpbnQ4X3QgICAgICAgICAgRkluZm9bMTZdOyAgICAgIC8qIHVzZWQgYnkgRmluZGVyLCBoYW5kbGUgYXMgcmVzZXJ2ZWQgKi8KKyAgICAgICAgdWludDMyX3QgICAgICAgIGZpbGVfSUQ7CisgICAgICAgIHVpbnQxNl90ICAgICAgICBkYXRhX3N0YXJ0X2Jsb2NrOworICAgICAgICB1aW50MzJfdCAgICAgICAgZGF0YV9zel9ieXRlOworICAgICAgICB1aW50MzJfdCAgICAgICAgZGF0YV9zel9ibG9jazsKKyAgICAgICAgdWludDE2X3QgICAgICAgIHJlc19zdGFydF9ibG9jazsKKyAgICAgICAgdWludDMyX3QgICAgICAgIHJlc19zel9ieXRlOworICAgICAgICB1aW50MzJfdCAgICAgICAgcmVzX3N6X2Jsb2NrOworICAgICAgICB1aW50MzJfdCAgICAgICAgY3JlYXRlX2RhdGU7CisgICAgICAgIHVpbnQzMl90ICAgICAgICBtb2RpZnlfZGF0ZTsKKyAgICAgICAgdWludDMyX3QgICAgICAgIGJhY2t1cF9kYXRlOworICAgICAgICBpbnQ4X3QgICAgICAgICAgRlhJbmZvWzE2XTsgICAgIC8qIHVzZWQgYnkgRmluZGVyLCBoYW5kbGUgYXMgcmVzZXJ2ZWQgKi8KKyAgICAgICAgdWludDE2X3QgICAgICAgIGNsdW1wX3NpemU7CisgICAgICAgIEhmc0V4dERhdGFSZWMgICBleHRlbnRzX2RhdGE7CisgICAgICAgIEhmc0V4dERhdGFSZWMgICBleHRlbnRzX3JlczsKKyAgICAgICAgdWludDMyX3QgICAgICAgIHJlc2VydmVkOworfTsKK3R5cGVkZWYgc3RydWN0IF9IZnNGaWxlIEhmc0ZpbGU7CisKKy8qIENhdGFsb2cgc3ViZGF0YSBjYXNlIGRpcmVjdG9yeSB0aHJlYWQgKi8KK3N0cnVjdCBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgX0hmc0RpclRoIHsKKyAgICAgICAgdWludDMyX3QgICAgICAgIHJlc2VydmVkWzJdOworICAgICAgICB1aW50MzJfdCAgICAgICAgcGFyZW50X0lEOworICAgICAgICBpbnQ4X3QgICAgICAgICAgbmFtZV9sZW5ndGg7CisgICAgICAgIGNoYXIgICAgICAgICAgICBuYW1lWzMxXTsKK307Cit0eXBlZGVmIHN0cnVjdCBfSGZzRGlyVGggSGZzRGlyVGg7CisKKy8qIENhdGFsb2cgc3ViZGF0YSBjYXNlIGZpbGUgdGhyZWFkICovCit0eXBlZGVmIHN0cnVjdCBfSGZzRGlyVGggSGZzRmlsZVRoOyAgICAgICAgLyogc2FtZSBhcyBkaXJlY3RvcnkgdGhyZWFkICovCisKKy8qIENhdGFsb2cgZGF0YSAqLworc3RydWN0IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBfSGZzQ2F0YWxvZyB7CisgICAgICAgIGludDhfdCAgICAgICAgICB0eXBlOworICAgICAgICBpbnQ4X3QgICAgICAgICAgcmVzZXJ2ZWQ7CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgICAgICBIZnNEaXIgICAgICAgZGlyOworICAgICAgICAgICAgICAgIEhmc0ZpbGUgICAgICBmaWxlOworICAgICAgICAgICAgICAgIEhmc0RpclRoICAgICBkaXJfdGg7CisgICAgICAgICAgICAgICAgSGZzRmlsZVRoICAgIGZpbGVfdGg7CisgICAgICAgIH0gc2VsOworfTsKK3R5cGVkZWYgc3RydWN0IF9IZnNDYXRhbG9nIEhmc0NhdGFsb2c7CisKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIC0tICAgICAgSEZTKyBEQVRBIFNUUlVDVFVSRVMgICAgICAtLSAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIGRvY3VtZW50ZWQgc2luY2UgMjAwNCBpbiB0bjExNTAgKi8KK3N0cnVjdCBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgX0hmc1BQZXJtcyB7CisgICAgICAgIHVpbnQzMl90ICAgICAgICBvd25lcl9JRDsKKyAgICAgICAgdWludDMyX3QgICAgICAgIGdyb3VwX0lEOworICAgICAgICB1aW50MzJfdCAgICAgICAgcGVybWlzc2lvbnM7CisgICAgICAgIHVpbnQzMl90ICAgICAgICBzcGVjaWFsX2RldmljZXM7Cit9OwordHlwZWRlZiBzdHJ1Y3QgX0hmc1BQZXJtcyBIZnNQUGVybXM7CisKKy8qIEhGUysgZXh0ZW50IGRlc2NyaXB0b3IqLworc3RydWN0IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBfSGZzUEV4dERlc2NyaXB0b3IgeworICAgICAgICB1aW50MzJfdCAgICAgICAgc3RhcnRfYmxvY2s7CisgICAgICAgIHVpbnQzMl90ICAgICAgICBibG9ja19jb3VudDsKK307Cit0eXBlZGVmIHN0cnVjdCBfSGZzUEV4dERlc2NyaXB0b3IgSGZzUEV4dERlc2NyaXB0b3I7Cit0eXBlZGVmIEhmc1BFeHREZXNjcmlwdG9yIEhmc1BFeHREYXRhUmVjW0hGU1BfRVhUX05CXTsKKworLyogSEZTKyBmb3JrIGRhdGEgc3RydWN0dXJlICovCitzdHJ1Y3QgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIF9IZnNQRm9ya0RhdGEgeworICAgICAgICB1aW50NjRfdCAgICAgICAgbG9naWNhbF9zaXplOworICAgICAgICB1aW50MzJfdCAgICAgICAgY2x1bXBfc2l6ZTsKKyAgICAgICAgdWludDMyX3QgICAgICAgIHRvdGFsX2Jsb2NrczsKKyAgICAgICAgSGZzUEV4dERhdGFSZWMgIGV4dGVudHM7Cit9OwordHlwZWRlZiBzdHJ1Y3QgX0hmc1BGb3JrRGF0YSBIZnNQRm9ya0RhdGE7CisKKy8qIEhGUysgY2F0YWxvZyBub2RlIElEICovCit0eXBlZGVmIHVpbnQzMl90IEhmc1BOb2RlSUQ7CisKKy8qIEhGUysgZmlsZSBuYW1lcyAqLwordHlwZWRlZiB1aW50MTZfdCB1bmljaGFyOworc3RydWN0IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBfSGZzUFVuaVN0cjI1NSB7CisgICAgICAgIHVpbnQxNl90ICAgICAgICBsZW5ndGg7CisgICAgICAgIHVuaWNoYXIgICAgICAgICB1bmljb2RlWzI1NV07ICAgICAgICAvKiAxIHVwdG8gMjU1ICovCit9OwordHlwZWRlZiBzdHJ1Y3QgX0hmc1BVbmlTdHIyNTUgSGZzUFVuaVN0cjI1NTsKKworLyogSEZTKyB2b2x1bWUgaGVhZGVyICovCitzdHJ1Y3QgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIF9IZnNQVm9sdW1lSGVhZGVyIHsKKyAgICAgICAgdWludDE2X3QgICAgICAgIHNpZ25hdHVyZTsKKyAgICAgICAgdWludDE2X3QgICAgICAgIHZlcnNpb247CisgICAgICAgIHVpbnQzMl90ICAgICAgICBhdHRyaWJ1dGVzOworICAgICAgICB1aW50MzJfdCAgICAgICAgbGFzdF9tb3VudGVkX3ZlcnNpb247CisgICAgICAgIHVpbnQzMl90ICAgICAgICBqb3VybmFsX2luZm9fYmxvY2s7CisgICAgICAgIAorICAgICAgICB1aW50MzJfdCAgICAgICAgY3JlYXRlX2RhdGU7CisgICAgICAgIHVpbnQzMl90ICAgICAgICBtb2RpZnlfZGF0ZTsKKyAgICAgICAgdWludDMyX3QgICAgICAgIGJhY2t1cF9kYXRlOworICAgICAgICB1aW50MzJfdCAgICAgICAgY2hlY2tlZF9kYXRlOworICAgICAgICAKKyAgICAgICAgdWludDMyX3QgICAgICAgIGZpbGVfY291bnQ7CisgICAgICAgIHVpbnQzMl90ICAgICAgICBkaXJfY291bnQ7CisgICAgICAgIAorICAgICAgICB1aW50MzJfdCAgICAgICAgYmxvY2tfc2l6ZTsKKyAgICAgICAgdWludDMyX3QgICAgICAgIHRvdGFsX2Jsb2NrczsKKyAgICAgICAgdWludDMyX3QgICAgICAgIGZyZWVfYmxvY2tzOworICAgICAgICAKKyAgICAgICAgdWludDMyX3QgICAgICAgIG5leHRfYWxsb2NhdGlvbjsKKyAgICAgICAgdWludDMyX3QgICAgICAgIHJlc19jbHVtcF9zaXplOworICAgICAgICB1aW50MzJfdCAgICAgICAgZGF0YV9jbHVtcF9zaXplOworICAgICAgICBIZnNQTm9kZUlEICAgICAgbmV4dF9jYXRhbG9nX0lEOworICAgICAgICAKKyAgICAgICAgdWludDMyX3QgICAgICAgIHdyaXRlX2NvdW50OworICAgICAgICB1aW50NjRfdCAgICAgICAgZW5jb2RpbmdzX2JpdG1hcDsKKyAgICAgICAgCisgICAgICAgIHVpbnQ4X3QgICAgICAgICBmaW5kZXJfaW5mb1szMl07CisgICAgICAgIAorICAgICAgICBIZnNQRm9ya0RhdGEgICAgYWxsb2NhdGlvbl9maWxlOworICAgICAgICBIZnNQRm9ya0RhdGEgICAgZXh0ZW50c19maWxlOworICAgICAgICBIZnNQRm9ya0RhdGEgICAgY2F0YWxvZ19maWxlOworICAgICAgICBIZnNQRm9ya0RhdGEgICAgYXR0cmlidXRlc19maWxlOworICAgICAgICBIZnNQRm9ya0RhdGEgICAgc3RhcnR1cF9maWxlOworfTsKK3R5cGVkZWYgc3RydWN0IF9IZnNQVm9sdW1lSGVhZGVyIEhmc1BWb2x1bWVIZWFkZXI7CisKKy8qIEhGUysgQi1UcmVlIE5vZGUgRGVzY3JpcHRvci4gU2FtZSBhcyBIRlMgYnRyZWUuICovCitzdHJ1Y3QgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIF9IZnNQTm9kZURlc2NyaXB0b3IgeworICAgICAgICB1aW50MzJfdCAgICAgICAgbmV4dDsKKyAgICAgICAgdWludDMyX3QgICAgICAgIHByZXZpb3VzOworICAgICAgICBpbnQ4X3QgICAgICAgICAgdHlwZTsKKyAgICAgICAgdWludDhfdCAgICAgICAgIGhlaWdodDsKKyAgICAgICAgdWludDE2X3QgICAgICAgIHJlY19uYjsKKyAgICAgICAgdWludDE2X3QgICAgICAgIHJlc2VydmVkOworfTsKK3R5cGVkZWYgc3RydWN0IF9IZnNQTm9kZURlc2NyaXB0b3IgSGZzUE5vZGVEZXNjcmlwdG9yOworCisvKiBIZWFkZXIgcmVjb3JkIG9mIGEgd2hvbGUgSEZTKyBCLVRyZWUuICovCitzdHJ1Y3QgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIF9IZnNQSGVhZGVyUmVjb3JkIHsKKyAgICAgICAgdWludDE2X3QgICAgICAgIGRlcHRoOworICAgICAgICB1aW50MzJfdCAgICAgICAgcm9vdF9ub2RlOworICAgICAgICB1aW50MzJfdCAgICAgICAgbGVhZl9yZWNvcmRzOworICAgICAgICB1aW50MzJfdCAgICAgICAgZmlyc3RfbGVhZl9ub2RlOworICAgICAgICB1aW50MzJfdCAgICAgICAgbGFzdF9sZWFmX25vZGU7CisgICAgICAgIHVpbnQxNl90ICAgICAgICBub2RlX3NpemU7CisgICAgICAgIHVpbnQxNl90ICAgICAgICBtYXhfa2V5X2xlbjsKKyAgICAgICAgdWludDMyX3QgICAgICAgIHRvdGFsX25vZGVzOworICAgICAgICB1aW50MzJfdCAgICAgICAgZnJlZV9ub2RlczsgICAgICAgIC8qIHNhbWUgYXMgaGZzIGJ0cmVlIHVudGlsIGhlcmUgKi8KKyAgICAgICAgdWludDE2X3QgICAgICAgIHJlc2VydmVkMTsKKyAgICAgICAgCisgICAgICAgIHVpbnQzMl90ICAgICAgICBjbHVtcF9zaXplOworICAgICAgICB1aW50OF90ICAgICAgICAgYnRyZWVfdHlwZTsgICAgICAgIC8qIG11c3QgYmUgMCBmb3IgSEZTKyBCLVRyZWUgKi8KKyAgICAgICAgdWludDhfdCAgICAgICAgIGtleV9jb21wYXJlX3R5cGU7IC8qIGhmc3ggPT4gMHhDRiA9IGNhc2UgZm9sZGluZyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICAgICAgICAweEJDID0gYmluYXJ5IGNvbXBhcmUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG90aGVyd2lzZSwgcmVzZXJ2ZWQgKi8KKyAgICAgICAgdWludDMyX3QgICAgICAgIGF0dHJpYnV0ZXM7CisgICAgICAgIHVpbnQzMl90ICAgICAgICByZXNlcnZlZDNbMTZdOworfTsKK3R5cGVkZWYgc3RydWN0IF9IZnNQSGVhZGVyUmVjb3JkIEhmc1BIZWFkZXJSZWNvcmQ7CisKKy8qIENhdGFsb2cga2V5IGZvciBCLVRyZWUgbG9va3VwIGluIHRoZSBIRlMrIGNhdGFsb2cgZmlsZSAqLworc3RydWN0IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBfSGZzUENhdGFsb2dLZXkgeworICAgICAgICB1aW50MTZfdCAgICAgICAga2V5X2xlbmd0aDsKKyAgICAgICAgSGZzUE5vZGVJRCAgICAgIHBhcmVudF9JRDsKKyAgICAgICAgSGZzUFVuaVN0cjI1NSAgIG5vZGVfbmFtZTsKK307Cit0eXBlZGVmIHN0cnVjdCBfSGZzUENhdGFsb2dLZXkgSGZzUENhdGFsb2dLZXk7CisKKy8qIEhGUysgY2F0YWxvZyBzdWJkYXRhIGNhc2UgZGlyICovCitzdHJ1Y3QgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIF9IZnNQRGlyIHsKKyAgICAgICAgdWludDE2X3QgICAgICAgIGZsYWdzOworICAgICAgICB1aW50MzJfdCAgICAgICAgdmFsZW5jZTsKKyAgICAgICAgSGZzUE5vZGVJRCAgICAgIGRpcl9JRDsKKyAgICAgICAgdWludDMyX3QgICAgICAgIGNyZWF0ZV9kYXRlOworICAgICAgICB1aW50MzJfdCAgICAgICAgbW9kaWZ5X2RhdGU7CisgICAgICAgIHVpbnQzMl90ICAgICAgICBhdHRyaWJfbW9kX2RhdGU7CisgICAgICAgIHVpbnQzMl90ICAgICAgICBhY2Nlc3NfZGF0ZTsKKyAgICAgICAgdWludDMyX3QgICAgICAgIGJhY2t1cF9kYXRlOworICAgICAgICBIZnNQUGVybXMgICAgICAgcGVybWlzc2lvbnM7CisgICAgICAgIGludDhfdCAgICAgICAgICBESW5mb1sxNl07ICAgICAgICAvKiB1c2VkIGJ5IEZpbmRlciwgaGFuZGxlIGFzIHJlc2VydmVkICovCisgICAgICAgIGludDhfdCAgICAgICAgICBEWEluZm9bMTZdOyAgICAgICAvKiB1c2VkIGJ5IEZpbmRlciwgaGFuZGxlIGFzIHJlc2VydmVkICovCisgICAgICAgIHVpbnQzMl90ICAgICAgICB0ZXh0X2VuY29kaW5nOworICAgICAgICB1aW50MzJfdCAgICAgICAgcmVzZXJ2ZWQ7Cit9OwordHlwZWRlZiBzdHJ1Y3QgX0hmc1BEaXIgSGZzUERpcjsKKworLyogSEZTKyBjYXRhbG9nIHN1YmRhdGEgY2FzZSBmaWxlICovCitzdHJ1Y3QgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIF9IZnNQRmlsZSB7CisgICAgICAgIHVpbnQxNl90ICAgICAgICBmbGFnczsKKyAgICAgICAgdWludDMyX3QgICAgICAgIHJlc2VydmVkMTsKKyAgICAgICAgSGZzUE5vZGVJRCAgICAgIGZpbGVfSUQ7CisgICAgICAgIHVpbnQzMl90ICAgICAgICBjcmVhdGVfZGF0ZTsKKyAgICAgICAgdWludDMyX3QgICAgICAgIG1vZGlmeV9kYXRlOworICAgICAgICB1aW50MzJfdCAgICAgICAgYXR0cmliX21vZF9kYXRlOworICAgICAgICB1aW50MzJfdCAgICAgICAgYWNjZXNzX2RhdGU7CisgICAgICAgIHVpbnQzMl90ICAgICAgICBiYWNrdXBfZGF0ZTsKKyAgICAgICAgSGZzUFBlcm1zICAgICAgIHBlcm1pc3Npb25zOworICAgICAgICBpbnQ4X3QgICAgICAgICAgRkluZm9bMTZdOyAgICAgICAgLyogdXNlZCBieSBGaW5kZXIsIGhhbmRsZSBhcyByZXNlcnZlZCAqLworICAgICAgICBpbnQ4X3QgICAgICAgICAgRlhJbmZvWzE2XTsgICAgICAgLyogdXNlZCBieSBGaW5kZXIsIGhhbmRsZSBhcyByZXNlcnZlZCAqLworICAgICAgICB1aW50MzJfdCAgICAgICAgdGV4dF9lbmNvZGluZzsKKyAgICAgICAgdWludDMyX3QgICAgICAgIHJlc2VydmVkMjsKKyAgICAgICAgCisgICAgICAgIEhmc1BGb3JrRGF0YSAgICBkYXRhX2Zvcms7CisgICAgICAgIEhmc1BGb3JrRGF0YSAgICByZXNfZm9yazsKK307Cit0eXBlZGVmIHN0cnVjdCBfSGZzUEZpbGUgSGZzUEZpbGU7CisKKy8qIEhGUysgY2F0YWxvZyBzdWJkYXRhIGNhc2UgdGhyZWFkICovCitzdHJ1Y3QgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIF9IZnNQVGhyZWFkIHsKKyAgICAgICAgaW50MTZfdCAgICAgICAgIHJlc2VydmVkOworICAgICAgICBIZnNQTm9kZUlEICAgICAgcGFyZW50X0lEOworICAgICAgICBIZnNQVW5pU3RyMjU1ICAgbm9kZV9uYW1lOworfTsKK3R5cGVkZWYgc3RydWN0IF9IZnNQVGhyZWFkIEhmc1BEaXJUaDsKK3R5cGVkZWYgc3RydWN0IF9IZnNQVGhyZWFkIEhmc1BGaWxlVGg7CisKKy8qIEhGUysgQ2F0YWxvZyBsZWFmIGRhdGEgKi8KK3N0cnVjdCBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgX0hmc1BDYXRhbG9nIHsKKyAgICAgICAgaW50MTZfdCAgICAgICAgIHR5cGU7CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgICAgICBIZnNQRGlyICAgICAgICAgZGlyOworICAgICAgICAgICAgICAgIEhmc1BGaWxlICAgICAgICBmaWxlOworICAgICAgICAgICAgICAgIEhmc1BEaXJUaCAgICAgICBkaXJfdGg7CisgICAgICAgICAgICAgICAgSGZzUEZpbGVUaCAgICAgIGZpbGVfdGg7CisgICAgICAgIH0gc2VsOworfTsKK3R5cGVkZWYgc3RydWN0IF9IZnNQQ2F0YWxvZyBIZnNQQ2F0YWxvZzsKKworLyogSEZTKyBleHRlbnRzIGZpbGUga2V5ICovCitzdHJ1Y3QgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIF9IZnNQRXh0ZW50S2V5IHsKKyAgICAgICAgdWludDE2X3QgICAgICAgIGtleV9sZW5ndGg7CisgICAgICAgIHVpbnQ4X3QgICAgICAgICB0eXBlOworICAgICAgICB1aW50OF90ICAgICAgICAgcGFkOworICAgICAgICBIZnNQTm9kZUlEICAgICAgZmlsZV9JRDsKKyAgICAgICAgdWludDMyX3QgICAgICAgIHN0YXJ0OworfTsKK3R5cGVkZWYgc3RydWN0IF9IZnNQRXh0ZW50S2V5IEhmc1BFeHRlbnRLZXk7CisKKy8qIGV4dGVudCBmaWxlIGRhdGEgaXMgSGZzUEV4dERhdGFSZWMgKi8KKworLyogRm9yayBkYXRhIGF0dHJpYnV0ZSBmaWxlICovCitzdHJ1Y3QgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIF9IZnNQRm9ya0RhdGFBdHRyIHsKKyAgICAgICAgdWludDMyX3QgICAgICAgIHJlY29yZF90eXBlOworICAgICAgICB1aW50MzJfdCAgICAgICAgcmVzZXJ2ZWQ7CisgICAgICAgIHVuaW9uIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSB7CisgICAgICAgICAgICAgICAgSGZzUEZvcmtEYXRhICAgICAgICBmb3JrOworICAgICAgICAgICAgICAgIEhmc1BFeHREYXRhUmVjICAgICAgZXh0ZW50czsKKyAgICAgICAgfSBmb3JrX3JlczsKK307Cit0eXBlZGVmIHN0cnVjdCBfSGZzUEZvcmtEYXRhQXR0ciBIZnNQRm9ya0RhdGFBdHRyOworCisKKy8qIC0tLS0tLS0tLS0tIEpvdXJuYWwgZGF0YSBzdHJ1Y3R1cmVzIC0tLS0tLS0tLS0tICovCisKKy8qIEluZm8gYmxvY2sgOiBzdG9yZWQgaW4gYSBibG9jayAjIGRlZmluZWQgaW4gdGhlIFZIICovCitzdHJ1Y3QgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIF9IZnNKSm91cm5hbEluZm9CbG9jayB7CisgICAgICAgIHVpbnQzMl90ICAgICAgICBmbGFnczsKKyAgICAgICAgdWludDMyX3QgICAgICAgIGRldmljZV9zaWduYXR1cmVbOF07CisgICAgICAgIHVpbnQ2NF90ICAgICAgICBvZmZzZXQ7CisgICAgICAgIHVpbnQ2NF90ICAgICAgICBzaXplOworICAgICAgICB1aW50MzJfdCAgICAgICAgcmVzZXJ2ZWRbMzJdOworfTsKK3R5cGVkZWYgc3RydWN0IF9IZnNKSm91cm5hbEluZm9CbG9jayBIZnNKSm91cm5hbEluZm9CbG9jazsKKworc3RydWN0IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBfSGZzSkpvdXJuYWxIZWFkZXIgeworICAgICAgICB1aW50MzJfdCAgICAgICAgbWFnaWM7CisgICAgICAgIHVpbnQzMl90ICAgICAgICBlbmRpYW47CisgICAgICAgIHVpbnQ2NF90ICAgICAgICBzdGFydDsKKyAgICAgICAgdWludDY0X3QgICAgICAgIGVuZDsKKyAgICAgICAgdWludDY0X3QgICAgICAgIHNpemU7CisgICAgICAgIHVpbnQzMl90ICAgICAgICBibGhkcl9zaXplOworICAgICAgICB1aW50MzJfdCAgICAgICAgY2hlY2tzdW07CisgICAgICAgIHVpbnQzMl90ICAgICAgICBqaGRyX3NpemU7Cit9OwordHlwZWRlZiBzdHJ1Y3QgX0hmc0pKb3VybmFsSGVhZGVyIEhmc0pKb3VybmFsSGVhZGVyOworCitzdHJ1Y3QgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIF9IZnNKQmxvY2tJbmZvIHsKKyAgICAgICAgdWludDY0X3QgICAgICAgIGJudW07ICAgICAgICAgIC8qIHNlY3RvciBudW1iZXIgKi8KKyAgICAgICAgdWludDMyX3QgICAgICAgIGJzaXplOyAgICAgICAgIC8qIHNpemUgaW4gYnl0ZXMgKi8KKyAgICAgICAgdWludDMyX3QgICAgICAgIG5leHQ7Cit9OwordHlwZWRlZiBzdHJ1Y3QgX0hmc0pCbG9ja0luZm8gSGZzSkJsb2NrSW5mbzsKKworc3RydWN0IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBfSGZzSkJsb2NrTGlzdEhlYWRlciB7CisgICAgICAgIHVpbnQxNl90ICAgICAgICBtYXhfYmxvY2tzOyAgICAvKiByZXNlcnZlZCAqLworICAgICAgICB1aW50MTZfdCAgICAgICAgbnVtX2Jsb2NrczsKKyAgICAgICAgdWludDMyX3QgICAgICAgIGJ5dGVzX3VzZWQ7CisgICAgICAgIHVpbnQzMl90ICAgICAgICBjaGVja3N1bTsKKyAgICAgICAgdWludDMyX3QgICAgICAgIHBhZDsKKyAgICAgICAgSGZzSkJsb2NrSW5mbyAgIGJpbmZvWzFdOworfTsKK3R5cGVkZWYgc3RydWN0IF9IZnNKQmxvY2tMaXN0SGVhZGVyIEhmc0pCbG9ja0xpc3RIZWFkZXI7CisKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAtLSAgICAgIElOVEVSTkFMIERBVEEgU1RSVUNUVVJFUyAgICAgIC0tICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIERhdGEgb2YgYW4gb3BlbmVkIEhGUyBmaWxlICovCitzdHJ1Y3QgX0hmc1ByaXZhdGVGaWxlIHsKKyAgICAgICAgUGVkU2VjdG9yICAgICAgIHNlY3RfbmI7CisgICAgICAgIFBlZEZpbGVTeXN0ZW0qICBmczsKKyAgICAgICAgdWludDMyX3QgICAgICAgIENOSUQ7ICAgICAgICAgIC8qIGRpc2sgb3JkZXIgKEJFKSAqLworICAgICAgICBIZnNFeHREYXRhUmVjICAgZmlyc3Q7ICAgICAgICAgLyogZGlzayBvcmRlciAoQkUpICovCisgICAgICAgIEhmc0V4dERhdGFSZWMgICBjYWNoZTsgICAgICAgICAvKiBkaXNrIG9yZGVyIChCRSkgKi8KKyAgICAgICAgdWludDE2X3QgICAgICAgIHN0YXJ0X2NhY2hlOyAgIC8qIENQVSBvcmRlciAqLworfTsKK3R5cGVkZWYgc3RydWN0IF9IZnNQcml2YXRlRmlsZSBIZnNQcml2YXRlRmlsZTsKKworLyogVG8gc3RvcmUgYmFkIGJsb2NrIGxpc3QgKi8KK3N0cnVjdCBfSGZzUHJpdmF0ZUxpbmtFeHRlbnQgeworICAgICAgICBIZnNFeHREZXNjcmlwdG9yICAgICAgICAgICAgICAgICBleHRlbnQ7CisgICAgICAgIHN0cnVjdCBfSGZzUHJpdmF0ZUxpbmtFeHRlbnQqICAgIG5leHQ7Cit9OwordHlwZWRlZiBzdHJ1Y3QgX0hmc1ByaXZhdGVMaW5rRXh0ZW50IEhmc1ByaXZhdGVMaW5rRXh0ZW50OworCisvKiBIRlMgRmlsZXN5c3RlbSBzcGVjaWZpYyBkYXRhICovCitzdHJ1Y3QgX0hmc1ByaXZhdGVGU0RhdGEgeworICAgICAgICB1aW50OF90ICAgICAgICAgICAgICAgICAgICAgYWxsb2NfbWFwWygxPDwxNikgLyA4XTsKKyAgICAgICAgSGZzTWFzdGVyRGlyZWN0b3J5QmxvY2sqICAgIG1kYjsKKyAgICAgICAgSGZzUHJpdmF0ZUZpbGUqICAgICAgICAgICAgIGV4dGVudF9maWxlOworICAgICAgICBIZnNQcml2YXRlRmlsZSogICAgICAgICAgICAgY2F0YWxvZ19maWxlOworICAgICAgICBIZnNQcml2YXRlTGlua0V4dGVudCogICAgICAgYmFkX2Jsb2Nrc194dGVudF9saXN0OworICAgICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgYmFkX2Jsb2Nrc194dGVudF9uYjsKKyAgICAgICAgY2hhciAgICAgICAgICAgICAgICAgICAgICAgIGJhZF9ibG9ja3NfbG9hZGVkOworfTsKK3R5cGVkZWYgc3RydWN0IF9IZnNQcml2YXRlRlNEYXRhIEhmc1ByaXZhdGVGU0RhdGE7CisKKy8qIEdlbmVyaWMgYnRyZWUga2V5ICovCitzdHJ1Y3QgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIF9IZnNQcml2YXRlR2VuZXJpY0tleSB7CisgICAgICAgIHVpbnQ4X3QgICAgICAgICBrZXlfbGVuZ3RoOworICAgICAgICB1aW50OF90ICAgICAgICAga2V5X2NvbnRlbnRbMV07ICAgICAgICAgICAgICAgIC8qIHdlIHVzZSAxIGFzIGEgbWluaW11bSBzaXplICovCit9OwordHlwZWRlZiBzdHJ1Y3QgX0hmc1ByaXZhdGVHZW5lcmljS2V5IEhmc1ByaXZhdGVHZW5lcmljS2V5OworCisvKiAtLS0tLSBIRlMrIC0tLS0tICovCisKKy8qIERhdGEgb2YgYW4gb3BlbmVkIEhGUyBmaWxlICovCitzdHJ1Y3QgX0hmc1BQcml2YXRlRmlsZSB7CisgICAgICAgIFBlZFNlY3RvciAgICAgICBzZWN0X25iOworICAgICAgICBQZWRGaWxlU3lzdGVtKiAgZnM7CisgICAgICAgIEhmc1BOb2RlSUQgICAgICBDTklEOyAgICAgICAgICAvKiBkaXNrIG9yZGVyIChCRSkgKi8KKyAgICAgICAgSGZzUEV4dERhdGFSZWMgIGZpcnN0OyAgICAgICAgIC8qIGRpc2sgb3JkZXIgKEJFKSAqLworICAgICAgICBIZnNQRXh0RGF0YVJlYyAgY2FjaGU7ICAgICAgICAgLyogZGlzayBvcmRlciAoQkUpICovCisgICAgICAgIHVpbnQzMl90ICAgICAgICBzdGFydF9jYWNoZTsgICAvKiBDUFUgb3JkZXIgKi8KK307Cit0eXBlZGVmIHN0cnVjdCBfSGZzUFByaXZhdGVGaWxlIEhmc1BQcml2YXRlRmlsZTsKKworc3RydWN0IF9IZnNQUHJpdmF0ZUV4dGVudCB7CisgICAgICAgIFBlZFNlY3RvciAgICAgICBzdGFydF9zZWN0b3I7CisgICAgICAgIFBlZFNlY3RvciAgICAgICBzZWN0b3JfY291bnQ7Cit9OwordHlwZWRlZiBzdHJ1Y3QgX0hmc1BQcml2YXRlRXh0ZW50IEhmc1BQcml2YXRlRXh0ZW50OworCisvKiBUbyBzdG9yZSBiYWQgYmxvY2sgbGlzdCAqLworc3RydWN0IF9IZnNQUHJpdmF0ZUxpbmtFeHRlbnQgeworICAgICAgICBIZnNQRXh0RGVzY3JpcHRvciAgICAgICAgICAgICAgICAgZXh0ZW50OworICAgICAgICBzdHJ1Y3QgX0hmc1BQcml2YXRlTGlua0V4dGVudCogICAgbmV4dDsKK307Cit0eXBlZGVmIHN0cnVjdCBfSGZzUFByaXZhdGVMaW5rRXh0ZW50IEhmc1BQcml2YXRlTGlua0V4dGVudDsKKworLyogSEZTKyBmaWxlIHN5c3RlbSBzcGVjaWZpYyBkYXRhICovCitzdHJ1Y3QgX0hmc1BQcml2YXRlRlNEYXRhIHsKKyAgICAgICAgUGVkRmlsZVN5c3RlbSogICAgICAgICAgd3JhcHBlcjsgICAgICAvKiBOVUxMIGlmIGhmcysgaXMgbm90IGVtYmVkZGVkICovCisgICAgICAgIFBlZEdlb21ldHJ5KiAgICAgICAgICAgIHBsdXNfZ2VvbTsgICAgLyogR2VvbWV0cnkgb2YgSEZTKyBfdm9sdW1lXyAqLworICAgICAgICB1aW50OF90KiAgICAgICAgICAgICAgICBhbGxvY19tYXA7CisgICAgICAgIHVpbnQ4X3QqICAgICAgICAgICAgICAgIGRpcnR5X2FsbG9jX21hcDsKKyAgICAgICAgSGZzUFZvbHVtZUhlYWRlciogICAgICAgdmg7CisgICAgICAgIEhmc1BQcml2YXRlRmlsZSogICAgICAgIGV4dGVudHNfZmlsZTsKKyAgICAgICAgSGZzUFByaXZhdGVGaWxlKiAgICAgICAgY2F0YWxvZ19maWxlOworICAgICAgICBIZnNQUHJpdmF0ZUZpbGUqICAgICAgICBhdHRyaWJ1dGVzX2ZpbGU7CisgICAgICAgIEhmc1BQcml2YXRlRmlsZSogICAgICAgIGFsbG9jYXRpb25fZmlsZTsKKyAgICAgICAgSGZzUFByaXZhdGVMaW5rRXh0ZW50KiAgYmFkX2Jsb2Nrc194dGVudF9saXN0OworICAgICAgICB1aW50MzJfdCAgICAgICAgICAgICAgICBqaWJfc3RhcnRfYmxvY2s7CisgICAgICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgIGpsX3N0YXJ0X2Jsb2NrOworICAgICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICBiYWRfYmxvY2tzX3h0ZW50X25iOworICAgICAgICBjaGFyICAgICAgICAgICAgICAgICAgICBiYWRfYmxvY2tzX2xvYWRlZDsKKyAgICAgICAgY2hhciAgICAgICAgICAgICAgICAgICAgZnJlZV9nZW9tOyAgICAvKiAxID0gcGx1c19nZW9tIG11c3QgYmUgZnJlZWQgKi8KK307Cit0eXBlZGVmIHN0cnVjdCBfSGZzUFByaXZhdGVGU0RhdGEgSGZzUFByaXZhdGVGU0RhdGE7CisKKy8qIEdlbmVyaWMgKyBidHJlZSBrZXkgKi8KK3N0cnVjdCBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgX0hmc1BQcml2YXRlR2VuZXJpY0tleSB7CisgICAgICAgIHVpbnQxNl90ICAgICAgICBrZXlfbGVuZ3RoOworICAgICAgICB1aW50OF90ICAgICAgICAga2V5X2NvbnRlbnRbMV07ICAgICAgIC8qIHdlIHVzZSAxIGFzIGEgbWluaW11bSBzaXplICovCit9OwordHlwZWRlZiBzdHJ1Y3QgX0hmc1BQcml2YXRlR2VuZXJpY0tleSBIZnNQUHJpdmF0ZUdlbmVyaWNLZXk7CisKKy8qIC0tLS0gY29tbW9uIC0tLS0gKi8KKworLyogbm9kZSBhbmQgbGVhZCByZWNvcmQgcmVmZXJlbmNlIGZvciBhIEJUcmVlIHNlYXJjaCAqLworc3RydWN0IF9IZnNDUHJpdmF0ZUxlYWZSZWMgeworICAgICAgICB1bnNpZ25lZCBpbnQgICAgbm9kZV9zaXplOyAgICAgLyogaW4gc2VjdG9ycyAqLworICAgICAgICB1bnNpZ25lZCBpbnQgICAgbm9kZV9udW1iZXI7CisgICAgICAgIHVuc2lnbmVkIGludCAgICByZWNvcmRfcG9zOworICAgICAgICB1bnNpZ25lZCBpbnQgICAgcmVjb3JkX251bWJlcjsKK307Cit0eXBlZGVmIHN0cnVjdCBfSGZzQ1ByaXZhdGVMZWFmUmVjIEhmc0NQcml2YXRlTGVhZlJlYzsKKworZXh0ZXJuIHVpbnQ4X3QqICAgIGhmc19ibG9jazsKK2V4dGVybiB1aW50OF90KiAgICBoZnNwX2Jsb2NrOworZXh0ZXJuIHVuc2lnbmVkICAgIGhmc19ibG9ja19jb3VudDsKK2V4dGVybiB1bnNpZ25lZCAgICBoZnNwX2Jsb2NrX2NvdW50OworCisjZW5kaWYgLyogX0hGU19IICovCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmMgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQyNjIxNgotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYwpAQCAtMCwwICsxLDM5MCBAQAorLyoKKyAgICBsaWJwYXJ0ZWQgLSBhIGxpYnJhcnkgZm9yIG1hbmlwdWxhdGluZyBkaXNrIHBhcnRpdGlvbnMKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCisqLworCisjaWZuZGVmIERJU0NPVkVSX09OTFkKKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaW5jbHVkZSA8cGFydGVkL3BhcnRlZC5oPgorI2luY2x1ZGUgPHBhcnRlZC9lbmRpYW4uaD4KKyNpbmNsdWRlIDxwYXJ0ZWQvZGVidWcuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2lmIEVOQUJMRV9OTFMKKyMgIGluY2x1ZGUgPGxpYmludGwuaD4KKyMgIGRlZmluZSBfKFN0cmluZykgZGdldHRleHQgKFBBQ0tBR0UsIFN0cmluZykKKyNlbHNlCisjICBkZWZpbmUgXyhTdHJpbmcpIChTdHJpbmcpCisjZW5kaWYgLyogRU5BQkxFX05MUyAqLworCisjaW5jbHVkZSAiaGZzLmgiCisjaW5jbHVkZSAicmVsb2NfcGx1cy5oIgorCisjaW5jbHVkZSAiam91cm5hbC5oIgorCitzdGF0aWMgaW50IGhmc2pfdmhfcmVwbGF5ZWQgPSAwOworc3RhdGljIGludCBpc19sZSA9IDA7CisKK3N0YXRpYyB1aW50MzJfdAoraGZzal9jYWxjX2NoZWNrc3VtKHVpbnQ4X3QgKnB0ciwgaW50IGxlbikKK3sKKwlpbnQJIGk7CisJdWludDMyX3QgY2tzdW09MDsKKworCWZvciAoaT0wOyBpIDwgbGVuOyBpKyssIHB0cisrKSB7CisJCWNrc3VtID0gKGNrc3VtIDw8IDgpIF4gKGNrc3VtICsgKnB0cik7CisJfQorCisJcmV0dXJuICh+Y2tzdW0pOworfQorCitpbnQKK2hmc2pfdXBkYXRlX2ppYihQZWRGaWxlU3lzdGVtKiBmcywgdWludDMyX3QgYmxvY2spCit7CisJSGZzUFByaXZhdGVGU0RhdGEqIAlwcml2X2RhdGEgPSAoSGZzUFByaXZhdGVGU0RhdGEqKQorCQkJCQkJICAgIGZzLT50eXBlX3NwZWNpZmljOworCisJcHJpdl9kYXRhLT52aC0+am91cm5hbF9pbmZvX2Jsb2NrID0gUEVEX0NQVV9UT19CRTMyKGJsb2NrKTsKKworCWlmICghaGZzcGx1c191cGRhdGVfdmggKGZzKSkKKwkJcmV0dXJuIDA7CisKKwlwcml2X2RhdGEtPmppYl9zdGFydF9ibG9jayA9IGJsb2NrOworCXJldHVybiAxOworfQorCitpbnQKK2hmc2pfdXBkYXRlX2psKFBlZEZpbGVTeXN0ZW0qIGZzLCB1aW50MzJfdCBibG9jaykKK3sKKwl1aW50OF90CQkJYnVmW1BFRF9TRUNUT1JfU0laRV9ERUZBVUxUXTsKKwlQZWRTZWN0b3IJCXNlY3RvcjsKKwl1aW50NjRfdAkJb2Zmc2V0OworCUhmc1BQcml2YXRlRlNEYXRhKiAJcHJpdl9kYXRhID0gKEhmc1BQcml2YXRlRlNEYXRhKikKKwkJCQkJCSAgICBmcy0+dHlwZV9zcGVjaWZpYzsKKwlIZnNKSm91cm5hbEluZm9CbG9jayoJamliOworCWludAkJCWJpbnNlY3Q7CisKKwliaW5zZWN0ID0gSEZTXzMyX1RPX0NQVShwcml2X2RhdGEtPnZoLT5ibG9ja19zaXplLCBpc19sZSkgLyBQRURfU0VDVE9SX1NJWkVfREVGQVVMVDsKKwlzZWN0b3IgPSAoUGVkU2VjdG9yKSBwcml2X2RhdGEtPmppYl9zdGFydF9ibG9jayAqIGJpbnNlY3Q7CisJaWYgKCFwZWRfZ2VvbWV0cnlfcmVhZChwcml2X2RhdGEtPnBsdXNfZ2VvbSwgYnVmLCBzZWN0b3IsIDEpKQorCQlyZXR1cm4gMDsKKwlqaWIgPSAoSGZzSkpvdXJuYWxJbmZvQmxvY2sqKSBidWY7CisKKwlvZmZzZXQgPSAodWludDY0X3QpYmxvY2sgKiBQRURfU0VDVE9SX1NJWkVfREVGQVVMVCAqIGJpbnNlY3Q7CisJamliLT5vZmZzZXQgPSBIRlNfQ1BVX1RPXzY0KG9mZnNldCwgaXNfbGUpOworCisJaWYgKCFwZWRfZ2VvbWV0cnlfd3JpdGUocHJpdl9kYXRhLT5wbHVzX2dlb20sIGJ1Ziwgc2VjdG9yLCAxKQorCSAgICB8fCAhcGVkX2dlb21ldHJ5X3N5bmMocHJpdl9kYXRhLT5wbHVzX2dlb20pKQorCQlyZXR1cm4gMDsKKworCXByaXZfZGF0YS0+amxfc3RhcnRfYmxvY2sgPSBibG9jazsKKwlyZXR1cm4gMTsKK30KKworLyogUmV0dXJuIHRoZSBzZWN0b3IgaW4gdGhlIGpvdXJuYWwgdGhhdCBpcyBhZnRlciB0aGUgYXJlYSByZWFkICovCisvKiBvciAwIG9uIGVycm9yICovCitzdGF0aWMgUGVkU2VjdG9yCitoZnNqX2pvdXJuYWxfcmVhZChQZWRHZW9tZXRyeSogZ2VvbSwgSGZzSkpvdXJuYWxIZWFkZXIqIGpoLAorCQkgIFBlZFNlY3RvciBqb3Vybl9zZWN0LCBQZWRTZWN0b3Igam91cm5fbGVuZ3RoLAorCQkgIFBlZFNlY3RvciByZWFkX3NlY3QsIHVuc2lnbmVkIGludCBuYl9zZWN0LAorCQkgIHZvaWQqIGJ1ZikKK3sKKwlpbnQgcjsKKworCXdoaWxlIChuYl9zZWN0LS0pIHsKKwkJciA9IHBlZF9nZW9tZXRyeV9yZWFkKGdlb20sIGJ1Ziwgam91cm5fc2VjdCArIHJlYWRfc2VjdCwgMSk7CisJCWlmICghcikgcmV0dXJuIDA7CisKKwkJYnVmID0gKCh1aW50OF90KilidWYpICsgUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQ7CisJCXJlYWRfc2VjdCsrOworCQlpZiAocmVhZF9zZWN0ID09IGpvdXJuX2xlbmd0aCkKKwkJCXJlYWRfc2VjdCA9IDE7IC8qIHNraXAgam91cm5hbCBoZWFkZXIKKwkJCQkJICB3aGljaCBpcyBhc3NlcnRlZCB0byBiZSAKKwkJCQkJICAxIHNlY3RvciBsb25nICovCisJfQorCisJcmV0dXJuIHJlYWRfc2VjdDsKK30KKworc3RhdGljIGludAoraGZzal9yZXBsYXlfdHJhbnNhY3Rpb24oUGVkRmlsZVN5c3RlbSogZnMsIEhmc0pKb3VybmFsSGVhZGVyKiBqaCwKKwkJCVBlZFNlY3RvciBqc2VjdG9yLCBQZWRTZWN0b3Igamxlbmd0aCkKK3sKKwlQZWRTZWN0b3IJCXN0YXJ0LCBzZWN0b3I7CisJSGZzUFByaXZhdGVGU0RhdGEqIAlwcml2X2RhdGEgPSAoSGZzUFByaXZhdGVGU0RhdGEqKQorCQkJCQkJZnMtPnR5cGVfc3BlY2lmaWM7CisJSGZzSkJsb2NrTGlzdEhlYWRlcioJYmxoZHI7CisJdWludDhfdCoJCWJsb2NrOworCXVuc2lnbmVkIGludAkJYmxoZHJfbmJzZWN0OworCWludAkJCWksIHI7CisJdWludDMyX3QJCWNrc3VtLCBzaXplOworCisJYmxoZHJfbmJzZWN0ID0gSEZTXzMyX1RPX0NQVShqaC0+YmxoZHJfc2l6ZSwgaXNfbGUpIC8gUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQ7CisJYmxoZHIgPSAoSGZzSkJsb2NrTGlzdEhlYWRlciopCisJCSAgcGVkX21hbGxvYyAoYmxoZHJfbmJzZWN0ICogUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQpOworCWlmICghYmxoZHIpIHJldHVybiAwOworCisJc3RhcnQgPSBIRlNfNjRfVE9fQ1BVKGpoLT5zdGFydCwgaXNfbGUpIC8gUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQ7CisJZG8geworCQlzdGFydCA9IGhmc2pfam91cm5hbF9yZWFkKHByaXZfZGF0YS0+cGx1c19nZW9tLCBqaCwganNlY3RvciwKKwkJCQkJICBqbGVuZ3RoLCBzdGFydCwgYmxoZHJfbmJzZWN0LCBibGhkcik7CisJCWlmICghc3RhcnQpIGdvdG8gZXJyX3JlcGxheTsKKwkJCisJCWNrc3VtID0gSEZTXzMyX1RPX0NQVShibGhkci0+Y2hlY2tzdW0sIGlzX2xlKTsKKwkJYmxoZHItPmNoZWNrc3VtID0gMDsKKwkJaWYgKGNrc3VtIT1oZnNqX2NhbGNfY2hlY2tzdW0oKHVpbnQ4X3QqKWJsaGRyLCBzaXplb2YoKmJsaGRyKSkpeworCQkJcGVkX2V4Y2VwdGlvbl90aHJvdyAoCisJCQkJUEVEX0VYQ0VQVElPTl9FUlJPUiwKKwkJCQlQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCQlfKCJCYWQgYmxvY2sgbGlzdCBoZWFkZXIgY2hlY2tzdW0uIikpOworCQkJZ290byBlcnJfcmVwbGF5OworCQl9CisJCWJsaGRyLT5jaGVja3N1bSA9IEhGU19DUFVfVE9fMzIoY2tzdW0sIGlzX2xlKTsKKwkJCisJCWZvciAoaT0xOyBpIDwgSEZTXzE2X1RPX0NQVShibGhkci0+bnVtX2Jsb2NrcywgaXNfbGUpOyArK2kpIHsKKwkJCXNpemUgPSBIRlNfMzJfVE9fQ1BVKGJsaGRyLT5iaW5mb1tpXS5ic2l6ZSwgaXNfbGUpOworCQkJc2VjdG9yID0gSEZTXzY0X1RPX0NQVShibGhkci0+YmluZm9baV0uYm51bSwgaXNfbGUpOworCQkJaWYgKCFzaXplKSBjb250aW51ZTsKKwkJCWlmIChzaXplICUgUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQpIHsKKwkJCQlwZWRfZXhjZXB0aW9uX3Rocm93KAorCQkJCQlQRURfRVhDRVBUSU9OX0VSUk9SLAorCQkJCQlQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCQkJXygiSW52YWxpZCBzaXplIG9mIGEgdHJhbnNhY3Rpb24gIgorCQkJCQkgICJibG9jayB3aGlsZSByZXBsYXlpbmcgdGhlIGpvdXJuYWwgIgorCQkJCQkgICIoJWkgYnl0ZXMpLiIpLAorCQkJCQlzaXplKTsKKwkJCQlnb3RvIGVycl9yZXBsYXk7CisJCQl9CisJCQlibG9jayA9ICh1aW50OF90KikgcGVkX21hbGxvYyhzaXplKTsKKwkJCWlmICghYmxvY2spIGdvdG8gZXJyX3JlcGxheTsKKwkJCXN0YXJ0ID0gaGZzal9qb3VybmFsX3JlYWQocHJpdl9kYXRhLT5wbHVzX2dlb20sIGpoLAorCQkJCQkJICBqc2VjdG9yLCBqbGVuZ3RoLCBzdGFydCwKKwkJCQkJCSAgc2l6ZSAvIFBFRF9TRUNUT1JfU0laRV9ERUZBVUxULAorCQkJCQkJICBibG9jayk7CisJCQlpZiAoIXN0YXJ0KSB7CisJCQkJcGVkX2ZyZWUgKGJsb2NrKTsKKwkJCQlnb3RvIGVycl9yZXBsYXk7CisJCQl9CisJCQkvKiB0aGUgc2VjdG9yIHN0b3JlZCBpbiB0aGUgam91cm5hbCBzZWVtcyB0byBiZQorCQkJICAgcmVsYXRpdmUgdG8gdGhlIGJlZ2luIG9mIHRoZSBibG9jayBkZXZpY2Ugd2hpY2gKKwkJCSAgIGNvbnRhaW5zIHRoZSBoZnMrIGpvdXJuYWxlZCB2b2x1bWUgKi8KKwkJCWlmIChzZWN0b3IgIT0gfjBMTCkKKwkJCQlyID0gcGVkX2dlb21ldHJ5X3dyaXRlIChmcy0+Z2VvbSwgYmxvY2ssIHNlY3RvciwKKwkJCQkJCQlzaXplIC8gUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQpOworCQkJZWxzZQorCQkJCXIgPSAxOworCQkJcGVkX2ZyZWUgKGJsb2NrKTsKKwkJCS8qIGNoZWNrIGlmIHdyYXBwZXIgbWRiIG9yIHZoIHdpdGggbm8gd3JhcHBlciBoYXMKKwkJCSAgIGNoYW5nZWQgKi8KKwkJCWlmICggICAoc2VjdG9yICE9IH4wTEwpCisJCQkgICAgJiYgKDIgPj0gc2VjdG9yKQorCQkJICAgICYmICgyIDwgc2VjdG9yICsgc2l6ZSAvIFBFRF9TRUNUT1JfU0laRV9ERUZBVUxUKSApCisJCQkJaGZzal92aF9yZXBsYXllZCA9IDE7CisJCQkvKiBjaGVjayBpZiB2aCBvZiBlbWJlZGRlZCBoZnMrIGhhcyBjaGFuZ2VkICovCisJCQlpZiAoICAgKHNlY3RvciAhPSB+MExMKQorCQkJICAgICYmIChwcml2X2RhdGEtPnBsdXNfZ2VvbSAhPSBmcy0+Z2VvbSkKKwkJCSAgICAmJiAoc2VjdG9yCisJCQkgICAgICAgICsgZnMtPmdlb20tPnN0YXJ0CisJCQkJLSBwcml2X2RhdGEtPnBsdXNfZ2VvbS0+c3RhcnQgPD0gMikKKwkJCSAgICAmJiAoc2VjdG9yCisJCQkgICAgICAgICsgc2l6ZSAvIFBFRF9TRUNUT1JfU0laRV9ERUZBVUxUCisJCQkJKyBmcy0+Z2VvbS0+c3RhcnQKKwkJCQktIHByaXZfZGF0YS0+cGx1c19nZW9tLT5zdGFydCA+IDIpICkKKwkJCQloZnNqX3ZoX3JlcGxheWVkID0gMTsKKwkJCWlmICghcikgZ290byBlcnJfcmVwbGF5OworCQl9CisJfSB3aGlsZSAoYmxoZHItPmJpbmZvWzBdLm5leHQpOworCisJamgtPnN0YXJ0ID0gSEZTX0NQVV9UT182NChzdGFydCAqIFBFRF9TRUNUT1JfU0laRV9ERUZBVUxULCBpc19sZSk7CisKKwlwZWRfZnJlZSAoYmxoZHIpOworCXJldHVybiAocGVkX2dlb21ldHJ5X3N5bmMgKGZzLT5nZW9tKSk7CisKK2Vycl9yZXBsYXk6CisJcGVkX2ZyZWUgKGJsaGRyKTsKKwlyZXR1cm4gMDsKK30KKworLyogMCA9PiBGYWlsdXJlLCBkb24ndCBjb250aW51ZSB0byBvcGVuICEgKi8KKy8qIDEgPT4gU3VjY2VzcywgdGhlIGpvdXJuYWwgaGFzIGJlZW4gY29tcGxldGx5IHJlcGxheWVkLCBvciBkb24ndCBuZWVkIHRvICovCitpbnQKK2hmc2pfcmVwbGF5X2pvdXJuYWwoUGVkRmlsZVN5c3RlbSogZnMpCit7CisJdWludDhfdAkJCWJ1ZltQRURfU0VDVE9SX1NJWkVfREVGQVVMVF07CisJUGVkU2VjdG9yCQlzZWN0b3IsIGxlbmd0aDsKKwlIZnNQUHJpdmF0ZUZTRGF0YSogCXByaXZfZGF0YSA9IChIZnNQUHJpdmF0ZUZTRGF0YSopCisJCQkJCQkgICAgZnMtPnR5cGVfc3BlY2lmaWM7CisJSGZzSkpvdXJuYWxJbmZvQmxvY2sqCWppYjsKKwlIZnNKSm91cm5hbEhlYWRlcioJamg7CisJaW50CQkJYmluc2VjdDsKKwl1aW50MzJfdAkJY2tzdW07CisKKwliaW5zZWN0ID0gUEVEX0JFMzJfVE9fQ1BVKHByaXZfZGF0YS0+dmgtPmJsb2NrX3NpemUpIC8gUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQ7CisJcHJpdl9kYXRhLT5qaWJfc3RhcnRfYmxvY2sgPQorCQlQRURfQkUzMl9UT19DUFUocHJpdl9kYXRhLT52aC0+am91cm5hbF9pbmZvX2Jsb2NrKTsKKwlzZWN0b3IgID0gKFBlZFNlY3RvcikgcHJpdl9kYXRhLT5qaWJfc3RhcnRfYmxvY2sgKiBiaW5zZWN0OworCWlmICghcGVkX2dlb21ldHJ5X3JlYWQocHJpdl9kYXRhLT5wbHVzX2dlb20sIGJ1Ziwgc2VjdG9yLCAxKSkKKwkJcmV0dXJuIDA7CisJamliID0gKEhmc0pKb3VybmFsSW5mb0Jsb2NrKikgYnVmOworCQorCWlmICggICAgKGppYi0+ZmxhZ3MgJiBQRURfQ1BVX1RPX0JFMzIoMSA8PCBIRlNKX0pPVVJOX0lOX0ZTKSkKKwkgICAgJiYgIShqaWItPmZsYWdzICYgUEVEX0NQVV9UT19CRTMyKDEgPDwgSEZTSl9KT1VSTl9PVEhFUl9ERVYpKSApIHsKKwkJcHJpdl9kYXRhLT5qbF9zdGFydF9ibG9jayA9IEhGU182NF9UT19DUFUoamliLT5vZmZzZXQsIGlzX2xlKSAKKwkJCQkJICAgIC8gKCBQRURfU0VDVE9SX1NJWkVfREVGQVVMVCAqIGJpbnNlY3QgKTsKKwl9CisKKwlpZiAoamliLT5mbGFncyAmIFBFRF9DUFVfVE9fQkUzMigxIDw8IEhGU0pfSk9VUk5fTkVFRF9JTklUKSkKKwkJcmV0dXJuIDE7CisKKwlpZiAoICAhKGppYi0+ZmxhZ3MgJiBQRURfQ1BVX1RPX0JFMzIoMSA8PCBIRlNKX0pPVVJOX0lOX0ZTKSkKKwkgICAgfHwgKGppYi0+ZmxhZ3MgJiBQRURfQ1BVX1RPX0JFMzIoMSA8PCBIRlNKX0pPVVJOX09USEVSX0RFVikpICkgeworCQlwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCVBFRF9FWENFUFRJT05fTk9fRkVBVFVSRSwKKwkJCVBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJXygiSm91cm5hbCBzdG9yZWQgb3V0c2lkZSBvZiB0aGUgdm9sdW1lIGFyZSAiCisJCQkgICJub3Qgc3VwcG9ydGVkLiAgVHJ5IHRvIGRlc2FjdGl2YXRlIHRoZSAiCisJCQkgICJqb3VybmFsIGFuZCBydW4gUGFydGVkIGFnYWluLiIpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCAgIChQRURfQkU2NF9UT19DUFUoamliLT5vZmZzZXQpICUgUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQpCisJICAgIHx8IChQRURfQkU2NF9UT19DUFUoamliLT5zaXplKSAgICUgUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQpICkgeworCQlwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCVBFRF9FWENFUFRJT05fTk9fRkVBVFVSRSwKKwkJCVBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJXygiSm91cm5hbCBvZmZzZXQgb3Igc2l6ZSBpcyBub3QgbXVsdGlwbGUgb2YgIgorCQkJICAidGhlIHNlY3RvciBzaXplLiIpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJc2VjdG9yID0gUEVEX0JFNjRfVE9fQ1BVKGppYi0+b2Zmc2V0KSAvIFBFRF9TRUNUT1JfU0laRV9ERUZBVUxUOworCWxlbmd0aCA9IFBFRF9CRTY0X1RPX0NQVShqaWItPnNpemUpICAgLyBQRURfU0VDVE9SX1NJWkVfREVGQVVMVDsKKworCWppYiA9IE5VTEw7CisJaWYgKCFwZWRfZ2VvbWV0cnlfcmVhZChwcml2X2RhdGEtPnBsdXNfZ2VvbSwgYnVmLCBzZWN0b3IsIDEpKQorCQlyZXR1cm4gMDsKKwlqaCA9IChIZnNKSm91cm5hbEhlYWRlciopIGJ1ZjsKKworCWlmIChqaC0+ZW5kaWFuID09IFBFRF9MRTMyX1RPX0NQVShIRlNKX0VORElBTl9NQUdJQykpCisJICAgIGlzX2xlID0gMTsKKworCWlmICggICAoamgtPm1hZ2ljICAhPSBIRlNfMzJfVE9fQ1BVKEhGU0pfSEVBREVSX01BR0lDLCBpc19sZSkpCisJICAgIHx8IChqaC0+ZW5kaWFuICE9IEhGU18zMl9UT19DUFUoSEZTSl9FTkRJQU5fTUFHSUMsIGlzX2xlKSkgKSB7CisJCXBlZF9leGNlcHRpb25fdGhyb3cgKAorCQkJUEVEX0VYQ0VQVElPTl9FUlJPUiwKKwkJCVBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJXygiSW5jb3JyZWN0IG1hZ2ljIHZhbHVlcyBpbiB0aGUgam91cm5hbCBoZWFkZXIuIikpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIChIRlNfNjRfVE9fQ1BVKGpoLT5zaXplLCBpc19sZSklUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQpCisJICB8fCAoSEZTXzY0X1RPX0NQVShqaC0+c2l6ZSwgaXNfbGUpL1BFRF9TRUNUT1JfU0laRV9ERUZBVUxUCisJCSAgIT0gKHVpbnQ2NF90KWxlbmd0aCkgKSB7CisJCXBlZF9leGNlcHRpb25fdGhyb3cgKAorCQkJUEVEX0VYQ0VQVElPTl9FUlJPUiwKKwkJCVBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJXygiSm91cm5hbCBzaXplIG1pc21hdGNoIGJldHdlZW4gam91cm5hbCBpbmZvIGJsb2NrICIKKwkJCSAgImFuZCBqb3VybmFsIGhlYWRlci4iKSk7CisJCXJldHVybiAwOworCX0KKworCWlmICggICAoSEZTXzY0X1RPX0NQVShqaC0+c3RhcnQsIGlzX2xlKSAlIFBFRF9TRUNUT1JfU0laRV9ERUZBVUxUKQorCSAgICB8fCAoSEZTXzY0X1RPX0NQVShqaC0+ZW5kLCBpc19sZSkgICAlIFBFRF9TRUNUT1JfU0laRV9ERUZBVUxUKQorCSAgICB8fCAoSEZTXzMyX1RPX0NQVShqaC0+YmxoZHJfc2l6ZSwgaXNfbGUpICUgUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQpCisJICAgIHx8IChIRlNfMzJfVE9fQ1BVKGpoLT5qaGRyX3NpemUsIGlzX2xlKSAgJSBQRURfU0VDVE9SX1NJWkVfREVGQVVMVCkgKSB7CisJCXBlZF9leGNlcHRpb25fdGhyb3cgKAorCQkJUEVEX0VYQ0VQVElPTl9FUlJPUiwKKwkJCVBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJXygiU29tZSBoZWFkZXIgZmllbGRzIGFyZSBub3QgbXVsdGlwbGUgb2YgdGhlIHNlY3RvciAiCisJCQkgICJzaXplLiIpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKEhGU18zMl9UT19DUFUoamgtPmpoZHJfc2l6ZSwgaXNfbGUpICE9IFBFRF9TRUNUT1JfU0laRV9ERUZBVUxUKSB7CisJCXBlZF9leGNlcHRpb25fdGhyb3cgKAorCQkJUEVEX0VYQ0VQVElPTl9FUlJPUiwKKwkJCVBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJXygiVGhlIHNlY3RvciBzaXplIHN0b3JlZCBpbiB0aGUgam91cm5hbCBpcyBub3QgNTEyICIKKwkJCSAgImJ5dGVzLiAgUGFydGVkIG9ubHkgc3VwcG9ydHMgNTEyIGJ5dGVzIGxlbmd0aCAiCisJCQkgICJzZWN0b3JzLiIpKTsKKwkJcmV0dXJuIDA7CQorCX0KKworCWNrc3VtID0gSEZTXzMyX1RPX0NQVShqaC0+Y2hlY2tzdW0sIGlzX2xlKTsKKwlqaC0+Y2hlY2tzdW0gPSAwOworCWlmIChja3N1bSAhPSBoZnNqX2NhbGNfY2hlY2tzdW0oKHVpbnQ4X3QqKWpoLCBzaXplb2YoKmpoKSkpIHsKKwkJcGVkX2V4Y2VwdGlvbl90aHJvdyAoCisJCQlQRURfRVhDRVBUSU9OX0VSUk9SLAorCQkJUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQlfKCJCYWQgam91cm5hbCBjaGVja3N1bS4iKSk7CisJCXJldHVybiAwOworCX0KKwlqaC0+Y2hlY2tzdW0gPSBIRlNfQ1BVX1RPXzMyKGNrc3VtLCBpc19sZSk7CisKKwkvKiBUaGUgMiBmb2xsb3dpbmcgdGVzdCBhcmUgaW4gdGhlIFhOVSBEYXJ3aW4gc291cmNlIGNvZGUgKi8KKwkvKiBzbyBJIGFzc3VtZSB0aGV5J3JlIG5lZWRlZCAqLworCWlmIChqaC0+c3RhcnQgPT0gamgtPnNpemUpCisJCWpoLT5zdGFydCA9IEhGU19DUFVfVE9fNjQoUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQsIGlzX2xlKTsKKwlpZiAoamgtPmVuZCAgID09IGpoLT5zaXplKQorCQlqaC0+c3RhcnQgPSBIRlNfQ1BVX1RPXzY0KFBFRF9TRUNUT1JfU0laRV9ERUZBVUxULCBpc19sZSk7CisKKwlpZiAoamgtPnN0YXJ0ID09IGpoLT5lbmQpCisJCXJldHVybiAxOworCisJaWYgKHBlZF9leGNlcHRpb25fdGhyb3cgKAorCQlQRURfRVhDRVBUSU9OX1dBUk5JTkcsCisJCVBFRF9FWENFUFRJT05fRklYIHwgUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCV8oIlRoZSBqb3VybmFsIGlzIG5vdCBlbXB0eS4gIFBhcnRlZCBtdXN0IHJlcGxheSB0aGUgIgorCQkgICJ0cmFuc2FjdGlvbnMgYmVmb3JlIG9wZW5pbmcgdGhlIGZpbGUgc3lzdGVtLiAgVGhpcyB3aWxsICIKKwkJICAibW9kaWZ5IHRoZSBmaWxlIHN5c3RlbS4iKSkKKwkJCSE9IFBFRF9FWENFUFRJT05fRklYKQorCQlyZXR1cm4gMDsKKworCXdoaWxlIChqaC0+c3RhcnQgIT0gamgtPmVuZCkgeworCQkvKiBSZXBsYXkgb25lIGNvbXBsZXRlIHRyYW5zYWN0aW9uICovCisJCWlmICghaGZzal9yZXBsYXlfdHJhbnNhY3Rpb24oZnMsIGpoLCBzZWN0b3IsIGxlbmd0aCkpCisJCQlyZXR1cm4gMDsKKworCQkvKiBSZWNhbGN1bGF0ZSBja3N1bSBvZiB0aGUgam91cm5hbCBoZWFkZXIgKi8KKwkJamgtPmNoZWNrc3VtID0gMDsgLyogbmVlZCB0byBiZSAwIHdoaWxlIGNhbGN1bGF0aW5nIHRoZSBja3N1bSAqLworCQlja3N1bSA9IGhmc2pfY2FsY19jaGVja3N1bSgodWludDhfdCopamgsIHNpemVvZigqamgpKTsKKwkJamgtPmNoZWNrc3VtID0gSEZTX0NQVV9UT18zMihja3N1bSwgaXNfbGUpOworCisJCS8qIFVwZGF0ZSB0aGUgSm91cm5hbCBIZWFkZXIgKi8KKwkJaWYgKCFwZWRfZ2VvbWV0cnlfd3JpdGUocHJpdl9kYXRhLT5wbHVzX2dlb20sIGJ1Ziwgc2VjdG9yLCAxKQorCQkgICAgfHwgIXBlZF9nZW9tZXRyeV9zeW5jKHByaXZfZGF0YS0+cGx1c19nZW9tKSkKKwkJCXJldHVybiAwOworCX0KKworCWlmIChoZnNqX3ZoX3JlcGxheWVkKSB7CisJCS8qIHByb2JlIGNvdWxkIGhhdmUgcmVwb3J0ZWQgaW5jb3JyZWN0IGluZm8gISAqLworCQkvKiBpcyB0aGVyZSBhIHdheSB0byBhc2sgcGFydGVkIHRvIHF1aXQgPyAqLworCQlwZWRfZXhjZXB0aW9uX3Rocm93KAorCQkJUEVEX0VYQ0VQVElPTl9XQVJOSU5HLAorCQkJUEVEX0VYQ0VQVElPTl9PSywKKwkJCV8oIlRoZSB2b2x1bWUgaGVhZGVyIG9yIHRoZSBtYXN0ZXIgZGlyZWN0b3J5IGJsb2NrIGhhcyAiCisJCQkgICJjaGFuZ2VkIHdoaWxlIHJlcGxheWluZyB0aGUgam91cm5hbC4gIFlvdSBzaG91bGQgIgorCQkJICAicmVzdGFydCBQYXJ0ZWQuIikpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworI2VuZGlmIC8qIERJU0NPVkVSX09OTFkgKi8KZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuaCBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGJlYTYxCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgICAgbGlicGFydGVkIC0gYSBsaWJyYXJ5IGZvciBtYW5pcHVsYXRpbmcgZGlzayBwYXJ0aXRpb25zCisgICAgQ29weXJpZ2h0IChDKSAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQorKi8KKworI2lmbmRlZiBfSk9VUk5BTF9ICisjZGVmaW5lIF9KT1VSTkFMX0gKKworI2luY2x1ZGUgPHBhcnRlZC9wYXJ0ZWQuaD4KKyNpbmNsdWRlIDxwYXJ0ZWQvZW5kaWFuLmg+CisjaW5jbHVkZSA8cGFydGVkL2RlYnVnLmg+CisKKyNpbmNsdWRlICJoZnMuaCIKKworaW50CitoZnNqX3JlcGxheV9qb3VybmFsKFBlZEZpbGVTeXN0ZW0qIGZzKTsKKworaW50CitoZnNqX3VwZGF0ZV9qaWIoUGVkRmlsZVN5c3RlbSogZnMsIHVpbnQzMl90IGJsb2NrKTsKKworaW50CitoZnNqX3VwZGF0ZV9qbChQZWRGaWxlU3lzdGVtKiBmcywgdWludDMyX3QgYmxvY2spOworCisjZGVmaW5lIEhGU18xNl9UT19DUFUoeCwgaXNfbGl0dGxlX2VuZGlhbikgKChpc19saXR0bGVfZW5kaWFuKSA/ICh1aW50MTZfdClQRURfTEUxNl9UT19DUFUoeCkgOiAodWludDE2X3QpUEVEX0JFMTZfVE9fQ1BVKHgpKQorI2RlZmluZSBIRlNfMzJfVE9fQ1BVKHgsIGlzX2xpdHRsZV9lbmRpYW4pICgoaXNfbGl0dGxlX2VuZGlhbikgPyAodWludDMyX3QpUEVEX0xFMzJfVE9fQ1BVKHgpIDogKHVpbnQzMl90KVBFRF9CRTMyX1RPX0NQVSh4KSkKKyNkZWZpbmUgSEZTXzY0X1RPX0NQVSh4LCBpc19saXR0bGVfZW5kaWFuKSAoKGlzX2xpdHRsZV9lbmRpYW4pID8gKHVpbnQ2NF90KVBFRF9MRTY0X1RPX0NQVSh4KSA6ICh1aW50NjRfdClQRURfQkU2NF9UT19DUFUoeCkpCisjZGVmaW5lIEhGU19DUFVfVE9fMTYoeCwgaXNfbGl0dGxlX2VuZGlhbikgKChpc19saXR0bGVfZW5kaWFuKSA/ICh1aW50MTZfdClQRURfQ1BVX1RPX0xFMTYoeCkgOiAodWludDE2X3QpUEVEX0NQVV9UT19CRTE2KHgpKQorI2RlZmluZSBIRlNfQ1BVX1RPXzMyKHgsIGlzX2xpdHRsZV9lbmRpYW4pICgoaXNfbGl0dGxlX2VuZGlhbikgPyAodWludDMyX3QpUEVEX0NQVV9UT19MRTMyKHgpIDogKHVpbnQzMl90KVBFRF9DUFVfVE9fQkUzMih4KSkKKyNkZWZpbmUgSEZTX0NQVV9UT182NCh4LCBpc19saXR0bGVfZW5kaWFuKSAoKGlzX2xpdHRsZV9lbmRpYW4pID8gKHVpbnQ2NF90KVBFRF9DUFVfVE9fTEU2NCh4KSA6ICh1aW50NjRfdClQRURfQ1BVX1RPX0JFNjQoeCkpCisKKyNlbmRpZiAvKiBfSk9VUk5BTF9IICovCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2hmcy9wcm9iZS5jIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9oZnMvcHJvYmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTIzMmY5Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9oZnMvcHJvYmUuYwpAQCAtMCwwICsxLDIzMSBAQAorLyoKKyAgICBsaWJwYXJ0ZWQgLSBhIGxpYnJhcnkgZm9yIG1hbmlwdWxhdGluZyBkaXNrIHBhcnRpdGlvbnMKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCisqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpbmNsdWRlIDxwYXJ0ZWQvcGFydGVkLmg+CisjaW5jbHVkZSA8cGFydGVkL2VuZGlhbi5oPgorI2luY2x1ZGUgPHBhcnRlZC9kZWJ1Zy5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaWYgRU5BQkxFX05MUworIyAgaW5jbHVkZSA8bGliaW50bC5oPgorIyAgZGVmaW5lIF8oU3RyaW5nKSBkZ2V0dGV4dCAoUEFDS0FHRSwgU3RyaW5nKQorI2Vsc2UKKyMgIGRlZmluZSBfKFN0cmluZykgKFN0cmluZykKKyNlbmRpZiAvKiBFTkFCTEVfTkxTICovCisKKyNpbmNsdWRlICJoZnMuaCIKKworI2luY2x1ZGUgInByb2JlLmgiCisKK2ludAoraGZzY19jYW5fdXNlX2dlb20gKFBlZEdlb21ldHJ5KiBnZW9tKQoreworCVBlZERldmljZSogZGV2OworCisJZGV2ID0gZ2VvbS0+ZGV2OworCVBFRF9BU1NFUlQgKGdlb20gIT0gTlVMTCwgcmV0dXJuIDApOworCVBFRF9BU1NFUlQgKGRldiAhPSBOVUxMLCByZXR1cm4gMCk7CisKKwlpZiAoZGV2LT5zZWN0b3Jfc2l6ZSAhPSBQRURfU0VDVE9SX1NJWkVfREVGQVVMVCkgeworCQlwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCVBFRF9FWENFUFRJT05fRVJST1IsCisJCQlQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCV8oIlBhcnRlZCBjYW4ndCB1c2UgSEZTIGZpbGUgc3lzdGVtcyBvbiBkaXNrcyAiCisJCQkgICJ3aXRoIGEgc2VjdG9yIHNpemUgbm90IGVxdWFsIHRvICVkIGJ5dGVzLiIpLAorCQkJKGludClQRURfU0VDVE9SX1NJWkVfREVGQVVMVCApOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworLyogUHJvYmUgYW4gSEZTIHZvbHVtZSwgZGV0ZWN0aW5nIGl0IGV2ZW4gaWYKK2l0IGlzIGluIGZhY3QgYSB3cmFwcGVyIHRvIGFuIEhGUysgdm9sdW1lICovCisvKiBVc2VkIGJ5IGhmc3BsdXNfcHJvYmUgYW5kIGhmc19wcm9iZSAqLworUGVkR2VvbWV0cnkqCitoZnNfYW5kX3dyYXBwZXJfcHJvYmUgKFBlZEdlb21ldHJ5KiBnZW9tKQoreworCXVpbnQ4X3QJCWJ1ZltQRURfU0VDVE9SX1NJWkVfREVGQVVMVF07CisJSGZzTWFzdGVyRGlyZWN0b3J5QmxvY2sJKm1kYjsKKwlQZWRHZW9tZXRyeSoJZ2VvbV9yZXQ7CisJUGVkU2VjdG9yCXNlYXJjaCwgbWF4OworCisJUEVEX0FTU0VSVCAoZ2VvbSAhPSBOVUxMLCByZXR1cm4gTlVMTCk7CisJUEVEX0FTU0VSVCAoaGZzY19jYW5fdXNlX2dlb20gKGdlb20pLCByZXR1cm4gTlVMTCk7CisKKwltZGIgPSAoSGZzTWFzdGVyRGlyZWN0b3J5QmxvY2sgKikgYnVmOworCisJLyogaXMgNSBhbiBpbnRlbGxpZ2VudCB2YWx1ZSA/ICovCisJaWYgKChnZW9tLT5sZW5ndGggPCA1KQorCSAgICB8fCAoIXBlZF9nZW9tZXRyeV9yZWFkIChnZW9tLCBidWYsIDIsIDEpKQorCSAgICB8fCAobWRiLT5zaWduYXR1cmUgIT0gUEVEX0NQVV9UT19CRTE2IChIRlNfU0lHTkFUVVJFKSkgKQorCQlyZXR1cm4gTlVMTDsKKworCXNlYXJjaCA9ICgoUGVkU2VjdG9yKSBQRURfQkUxNl9UT19DUFUgKG1kYi0+c3RhcnRfYmxvY2spCisJCSAgKyAoKFBlZFNlY3RvcikgUEVEX0JFMTZfVE9fQ1BVIChtZGItPnRvdGFsX2Jsb2NrcykKKwkJICAgICAqIChQRURfQkUzMl9UT19DUFUgKG1kYi0+YmxvY2tfc2l6ZSkgLyBQRURfU0VDVE9SX1NJWkVfREVGQVVMVCApKSk7CisJbWF4ID0gc2VhcmNoICsgKFBFRF9CRTMyX1RPX0NQVSAobWRiLT5ibG9ja19zaXplKSAvIFBFRF9TRUNUT1JfU0laRV9ERUZBVUxUKTsKKwlpZiAoIShnZW9tX3JldCA9IHBlZF9nZW9tZXRyeV9uZXcgKGdlb20tPmRldiwgZ2VvbS0+c3RhcnQsIHNlYXJjaCArIDIpKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlmb3IgKDsgc2VhcmNoIDwgbWF4OyBzZWFyY2grKykgeworCQlpZiAoIXBlZF9nZW9tZXRyeV9zZXQgKGdlb21fcmV0LCBnZW9tX3JldC0+c3RhcnQsIHNlYXJjaCArIDIpCisJCSAgICB8fCAhcGVkX2dlb21ldHJ5X3JlYWQgKGdlb21fcmV0LCBidWYsIHNlYXJjaCwgMSkpCisJCQlicmVhazsKKwkJaWYgKG1kYi0+c2lnbmF0dXJlID09IFBFRF9DUFVfVE9fQkUxNiAoSEZTX1NJR05BVFVSRSkpCisJCQlyZXR1cm4gZ2VvbV9yZXQ7CisJfQorCisJcGVkX2dlb21ldHJ5X2Rlc3Ryb3kgKGdlb21fcmV0KTsKKwlyZXR1cm4gTlVMTDsKK30KKworUGVkR2VvbWV0cnkqCitoZnNwbHVzX3Byb2JlIChQZWRHZW9tZXRyeSogZ2VvbSkKK3sKKwlQZWRHZW9tZXRyeSoJZ2VvbV9yZXQ7CisJdWludDhfdAkJYnVmW1BFRF9TRUNUT1JfU0laRV9ERUZBVUxUXTsKKworCVBFRF9BU1NFUlQgKGdlb20gIT0gTlVMTCwgcmV0dXJuIE5VTEwpOworCisJaWYgKCFoZnNjX2Nhbl91c2VfZ2VvbSAoZ2VvbSkpCisJCXJldHVybiBOVUxMOworCisJaWYgKChnZW9tX3JldCA9IGhmc19hbmRfd3JhcHBlcl9wcm9iZShnZW9tKSkpIHsKKwkJLyogSEZTKyBpcyBlbWJlZGRlZCBpbiBhbiBIRlMgdm9sdW1lID8gKi8KKwkJSGZzTWFzdGVyRGlyZWN0b3J5QmxvY2sJKm1kYjsKKwkJbWRiID0gKEhmc01hc3RlckRpcmVjdG9yeUJsb2NrICopIGJ1ZjsKKworCQlpZiAoIXBlZF9nZW9tZXRyeV9yZWFkIChnZW9tLCBidWYsIDIsIDEpCisJCSAgICB8fCAobWRiLT5vbGRfbmV3LmVtYmVkZGVkLnNpZ25hdHVyZQorCQkJIT0gUEVEX0NQVV9UT19CRTE2IChIRlNQX1NJR05BVFVSRSkpKSB7CisJCQlwZWRfZ2VvbWV0cnlfZGVzdHJveSAoZ2VvbV9yZXQpOworCQkJcmV0dXJuIE5VTEw7CisJCX0gZWxzZQorCQkJcmV0dXJuIGdlb21fcmV0OworCX0gZWxzZSB7CisJCS8qIFRoaXMgaXMgYSBzdGFuZGFsb25lIEhGUysgdm9sdW1lID8gKi8KKwkJUGVkU2VjdG9yCXNlYXJjaCwgbWF4OworCQlIZnNQVm9sdW1lSGVhZGVyICp2aDsKKwkJdmggPSAoSGZzUFZvbHVtZUhlYWRlciAqKSBidWY7CisKKwkJaWYgKChnZW9tLT5sZW5ndGggPCA1KQorCQkgICAgfHwgIXBlZF9nZW9tZXRyeV9yZWFkIChnZW9tLCBidWYsIDIsIDEpCisJCSAgICB8fCAodmgtPnNpZ25hdHVyZSAhPSBQRURfQ1BVX1RPX0JFMTYgKEhGU1BfU0lHTkFUVVJFKSkpCisJCQlyZXR1cm4gTlVMTDsKKworCQkvKiBDb3JyZWN0IHJhbmdlIGlzIGluZGVlZCBbIGJsb2Nrcypzei0yOyhibG9jcysxKSpzei0yICggKi8KKwkJLyogQnV0IHByZXZpb3VzIHZlcnNpb25zIG9mIG15IGltcGxlbWVudGF0aW9uIHVzZWQgdG8gKi8KKwkJLyogYXNzdW1lIHJhbmdlIGlzIFsoYmxvY2tzLTEpKnN6LTE7KGJsb2NrcypzeikgKCAqLworCQkvKiAoYmxvY2tzLTEpKnN6LTEgaGFzIHRvIGJlIHNjYW5uZWQgbGFzdCwgYmVjYXVzZSAqLworCQkvKiBpdCBjYW4gYmVsb25nIHRvIGEgcmVndWxhciBmaWxlICovCisJCW1heCA9ICgoUGVkU2VjdG9yKSBQRURfQkUzMl9UT19DUFUgKHZoLT50b3RhbF9ibG9ja3MpICsgMSkKKwkJICAgICAgKiAoIFBFRF9CRTMyX1RPX0NQVSAodmgtPmJsb2NrX3NpemUpIC8gUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQgKQorCQkgICAgICAtIDI7CisJCXNlYXJjaCA9IG1heCAtIDIgKiAoIFBFRF9CRTMyX1RPX0NQVSAodmgtPmJsb2NrX3NpemUpCisJCQkJICAgICAvIFBFRF9TRUNUT1JfU0laRV9ERUZBVUxUICkgKyAyOworCQlpZiAoIShnZW9tX3JldCA9IHBlZF9nZW9tZXRyeV9uZXcgKGdlb20tPmRldiwgZ2VvbS0+c3RhcnQsCisJCQkJCQkgICBzZWFyY2ggKyAyKSkpCisJCQlyZXR1cm4gTlVMTDsKKworCQlmb3IgKDsgc2VhcmNoIDwgbWF4OyBzZWFyY2grKykgeworCQkJaWYgKCFwZWRfZ2VvbWV0cnlfc2V0IChnZW9tX3JldCwgZ2VvbV9yZXQtPnN0YXJ0LAorCQkJCQkgICAgICAgc2VhcmNoICsgMikKKwkJCSAgICB8fCAhcGVkX2dlb21ldHJ5X3JlYWQgKGdlb21fcmV0LCBidWYsIHNlYXJjaCwgMSkpCisJCQkJYnJlYWs7CisJCQlpZiAodmgtPnNpZ25hdHVyZSA9PSBQRURfQ1BVX1RPX0JFMTYgKEhGU1BfU0lHTkFUVVJFKSkKKwkJCQlyZXR1cm4gZ2VvbV9yZXQ7CisJCX0KKwkJc2VhcmNoID0gKChQZWRTZWN0b3IpIFBFRF9CRTMyX1RPX0NQVSAodmgtPnRvdGFsX2Jsb2NrcykgLSAxKQorCQkgICAgICAqICggUEVEX0JFMzJfVE9fQ1BVICh2aC0+YmxvY2tfc2l6ZSkgLyBQRURfU0VDVE9SX1NJWkVfREVGQVVMVCApCisJCSAgICAgIC0gMTsKKwkJaWYgKCFwZWRfZ2VvbWV0cnlfc2V0IChnZW9tX3JldCwgZ2VvbV9yZXQtPnN0YXJ0LAorCQkJCQkgICAgICAgc2VhcmNoICsgMikKKwkJICAgIHx8ICFwZWRfZ2VvbWV0cnlfcmVhZCAoZ2VvbV9yZXQsIGJ1Ziwgc2VhcmNoLCAxKQorCQkgICAgfHwgdmgtPnNpZ25hdHVyZSAhPSBQRURfQ1BVX1RPX0JFMTYgKEhGU1BfU0lHTkFUVVJFKSkgeworCQkgICAgCXBlZF9nZW9tZXRyeV9kZXN0cm95IChnZW9tX3JldCk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfSBlbHNlCisJCQlyZXR1cm4gZ2VvbV9yZXQ7CisJfQorfQorCitQZWRHZW9tZXRyeSoKK2hmc19wcm9iZSAoUGVkR2VvbWV0cnkqIGdlb20pCit7CisJUGVkR2VvbWV0cnkqCWdlb21fYmFzZTsKKwlQZWRHZW9tZXRyeSoJZ2VvbV9wbHVzID0gTlVMTDsKKwkKKwlQRURfQVNTRVJUIChnZW9tICE9IE5VTEwsIHJldHVybiBOVUxMKTsKKwkKKwlpZiAoIWhmc2NfY2FuX3VzZV9nZW9tIChnZW9tKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoKGdlb21fYmFzZSA9IGhmc19hbmRfd3JhcHBlcl9wcm9iZShnZW9tKSkKKwkgICAgJiYgKCEoZ2VvbV9wbHVzID0gaGZzcGx1c19wcm9iZShnZW9tX2Jhc2UpKSkpCisJCXJldHVybiBnZW9tX2Jhc2U7CisJZWxzZSB7CisJCWlmIChnZW9tX2Jhc2UpIHBlZF9nZW9tZXRyeV9kZXN0cm95IChnZW9tX2Jhc2UpOworCQlpZiAoZ2VvbV9wbHVzKSBwZWRfZ2VvbWV0cnlfZGVzdHJveSAoZ2VvbV9wbHVzKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorfQorCitQZWRHZW9tZXRyeSoKK2hmc3hfcHJvYmUgKFBlZEdlb21ldHJ5KiBnZW9tKQoreworCVBlZEdlb21ldHJ5KglnZW9tX3JldDsKKwl1aW50OF90CQlidWZbUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFRdOworCVBlZFNlY3RvcglzZWFyY2gsIG1heDsKKwlIZnNQVm9sdW1lSGVhZGVyICp2aCA9IChIZnNQVm9sdW1lSGVhZGVyICopIGJ1ZjsKKworCVBFRF9BU1NFUlQgKGdlb20gIT0gTlVMTCwgcmV0dXJuIE5VTEwpOworCisJaWYgKCFoZnNjX2Nhbl91c2VfZ2VvbSAoZ2VvbSkpCisJCXJldHVybiBOVUxMOworCisJaWYgKChnZW9tLT5sZW5ndGggPCA1KQorCSAgICB8fCAhcGVkX2dlb21ldHJ5X3JlYWQgKGdlb20sIGJ1ZiwgMiwgMSkKKwkgICAgfHwgKHZoLT5zaWduYXR1cmUgIT0gUEVEX0NQVV9UT19CRTE2IChIRlNYX1NJR05BVFVSRSkpKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIHVubGlrZSB0aGUgaGZzKyBjb2RlLCB3aGljaCBzaG91bGQgYmUga2VwdCBjb21wYXRpYmxlCisJd2l0aCBteSBvbGQgcHJldmlvdXMgaW1wbGVtZW50YXRpb25zLCB3ZSBvbmx5IGNhcmUgaGVyZQorCWFib3V0IGxlZ2FsIGFsdGVybmF0ZSBWSCBwb3NpdGlvbnMsIGxpa2UgVE4xMTUwIGRlc2NyaWJlcyB0aGVtICovCisJbWF4ID0gKChQZWRTZWN0b3IpIFBFRF9CRTMyX1RPX0NQVSAodmgtPnRvdGFsX2Jsb2NrcykgKyAxKQorCQkgICAgICAqICggUEVEX0JFMzJfVE9fQ1BVICh2aC0+YmxvY2tfc2l6ZSkgLyBQRURfU0VDVE9SX1NJWkVfREVGQVVMVCApCisJCSAgICAgIC0gMjsKKwlzZWFyY2ggPSBtYXggLSAoIFBFRF9CRTMyX1RPX0NQVSAodmgtPmJsb2NrX3NpemUpIC8gUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQgKTsKKwlpZiAoIShnZW9tX3JldCA9IHBlZF9nZW9tZXRyeV9uZXcgKGdlb20tPmRldiwgZ2VvbS0+c3RhcnQsCisJCQkJCSAgIHNlYXJjaCArIDIpKSkKKwkJcmV0dXJuIE5VTEw7CisJZm9yICg7IHNlYXJjaCA8IG1heDsgc2VhcmNoKyspIHsKKwkJaWYgKCFwZWRfZ2VvbWV0cnlfc2V0IChnZW9tX3JldCwgZ2VvbV9yZXQtPnN0YXJ0LAorCQkJCSAgICAgICBzZWFyY2ggKyAyKQorCQkgICAgfHwgIXBlZF9nZW9tZXRyeV9yZWFkIChnZW9tX3JldCwgYnVmLCBzZWFyY2gsIDEpKQorCQkJYnJlYWs7CisJCWlmICh2aC0+c2lnbmF0dXJlID09IFBFRF9DUFVfVE9fQkUxNiAoSEZTWF9TSUdOQVRVUkUpKQorCQkJcmV0dXJuIGdlb21fcmV0OworCX0KKworCXBlZF9nZW9tZXRyeV9kZXN0cm95IChnZW9tX3JldCk7CisJcmV0dXJuIE5VTEw7Cit9CmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2hmcy9wcm9iZS5oIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9oZnMvcHJvYmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDAxMDA2Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9oZnMvcHJvYmUuaApAQCAtMCwwICsxLDQ0IEBACisvKgorICAgIGxpYnBhcnRlZCAtIGEgbGlicmFyeSBmb3IgbWFuaXB1bGF0aW5nIGRpc2sgcGFydGl0aW9ucworICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKKyovCisKKyNpZm5kZWYgX1BST0JFX0gKKyNkZWZpbmUgX1BST0JFX0gKKworI2luY2x1ZGUgPHBhcnRlZC9wYXJ0ZWQuaD4KKyNpbmNsdWRlIDxwYXJ0ZWQvZW5kaWFuLmg+CisjaW5jbHVkZSA8cGFydGVkL2RlYnVnLmg+CisKKyNpbmNsdWRlICJoZnMuaCIKKworaW50CitoZnNjX2Nhbl91c2VfZ2VvbSAoUGVkR2VvbWV0cnkqIGdlb20pOworCitQZWRHZW9tZXRyeSoKK2hmc19hbmRfd3JhcHBlcl9wcm9iZSAoUGVkR2VvbWV0cnkqIGdlb20pOworCitQZWRHZW9tZXRyeSoKK2hmc3BsdXNfcHJvYmUgKFBlZEdlb21ldHJ5KiBnZW9tKTsKKworUGVkR2VvbWV0cnkqCitoZnNfcHJvYmUgKFBlZEdlb21ldHJ5KiBnZW9tKTsKKworUGVkR2VvbWV0cnkqCitoZnN4X3Byb2JlIChQZWRHZW9tZXRyeSogZ2VvbSk7CisKKyNlbmRpZiAvKiBfUFJPQkVfSCAqLwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRkMTVlNwotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmMKQEAgLTAsMCArMSw2NzEgQEAKKy8qCisgICAgbGlicGFydGVkIC0gYSBsaWJyYXJ5IGZvciBtYW5pcHVsYXRpbmcgZGlzayBwYXJ0aXRpb25zCisgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQorKi8KKworI2lmbmRlZiBESVNDT1ZFUl9PTkxZCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworI2luY2x1ZGUgPHBhcnRlZC9wYXJ0ZWQuaD4KKyNpbmNsdWRlIDxwYXJ0ZWQvZW5kaWFuLmg+CisjaW5jbHVkZSA8cGFydGVkL2RlYnVnLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpZiBFTkFCTEVfTkxTCisjICBpbmNsdWRlIDxsaWJpbnRsLmg+CisjICBkZWZpbmUgXyhTdHJpbmcpIGRnZXR0ZXh0IChQQUNLQUdFLCBTdHJpbmcpCisjZWxzZQorIyAgZGVmaW5lIF8oU3RyaW5nKSAoU3RyaW5nKQorI2VuZGlmIC8qIEVOQUJMRV9OTFMgKi8KKworI2luY2x1ZGUgImhmcy5oIgorI2luY2x1ZGUgImZpbGUuaCIKKyNpbmNsdWRlICJhZHZmcy5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisKKyNpbmNsdWRlICJyZWxvYy5oIgorCisvKiBUaGlzIGZ1bmN0aW9uIG1vdmVzIGRhdGEgb2Ygc2l6ZSBibG9ja3Mgc3RhcnRpbmcKKyAgIGF0IGJsb2NrICpwdHJfZmJsb2NrIHRvIGJsb2NrICpwdHJfdG9fZmJsb2NrICovCisvKiByZXR1cm4gbmV3IHN0YXJ0IG9yIC0xIG9uIGZhaWx1cmUgKi8KK3N0YXRpYyBpbnQKK2hmc19lZmZlY3RfbW92ZV9leHRlbnQgKFBlZEZpbGVTeXN0ZW0gKmZzLCB1bnNpZ25lZCBpbnQgKnB0cl9mYmxvY2ssCisJCQl1bnNpZ25lZCBpbnQgKnB0cl90b19mYmxvY2ssIHVuc2lnbmVkIGludCBzaXplKQoreworCUhmc1ByaXZhdGVGU0RhdGEqIAlwcml2X2RhdGEgPSAoSGZzUHJpdmF0ZUZTRGF0YSopCisJCQkJCQlmcy0+dHlwZV9zcGVjaWZpYzsKKwl1bnNpZ25lZCBpbnQJCWksIG9rID0gMDsKKwl1bnNpZ25lZCBpbnQJCW5leHRfdG9fZmJsb2NrOworCXVuc2lnbmVkIGludAkJc3RhcnQsIHN0b3A7CisKKwlQRURfQVNTRVJUIChoZnNfYmxvY2sgIT0gTlVMTCwgcmV0dXJuIC0xKTsKKwlQRURfQVNTRVJUICgqcHRyX3RvX2ZibG9jayA8PSAqcHRyX2ZibG9jaywgcmV0dXJuIC0xKTsKKwkvKiBxdWlldCBnY2MgKi8KKwluZXh0X3RvX2ZibG9jayA9IHN0YXJ0ID0gc3RvcCA9IDA7CisKKy8qCisJVHJ5IHRvIGZpdCB0aGUgZXh0ZW50IEFUIG9yIF9CRUZPUkVfIHRoZSB3YW50ZWQgcGxhY2UsCisJb3IgdGhlbiBpbiB0aGUgZ2FwIGJldHdlZW4gZGVzdCBhbmQgc291cmNlLgorCUlmIGZhaWxlZCB0cnkgdG8gZml0IHRoZSBleHRlbnQgYWZ0ZXIgc291cmNlLCBmb3IgMiBwYXNzIHJlbG9jYXRpb24KKwlUaGUgZXh0ZW50IGlzIGFsd2F5cyBjb3BpZWQgaW4gYSBub24gb3ZlcmxhcHBpbmcgd2F5CisqLworCisJLyogQmFja3dhcmQgc2VhcmNoICovCisJLyogMSBwYXNzIHJlbG9jYXRpb24gQVQgb3IgQkVGT1JFICpwdHJfdG9fZmJsb2NrICovCisJaWYgKCpwdHJfdG9fZmJsb2NrICE9ICpwdHJfZmJsb2NrKSB7CisJCXN0YXJ0ID0gc3RvcCA9ICpwdHJfZmJsb2NrIDwgKnB0cl90b19mYmxvY2src2l6ZSA/CisJCQkgICAgICAgKnB0cl9mYmxvY2sgOiAqcHRyX3RvX2ZibG9jaytzaXplOworCQl3aGlsZSAoc3RhcnQgJiYgc3RvcC1zdGFydCAhPSBzaXplKSB7CisJCQktLXN0YXJ0OworCQkJaWYgKFRTVF9CTE9DX09DQ1VQQVRJT04ocHJpdl9kYXRhLT5hbGxvY19tYXAsc3RhcnQpKQorCQkJCXN0b3AgPSBzdGFydDsKKwkJfQorCQlvayA9IChzdG9wLXN0YXJ0ID09IHNpemUpOworCX0KKwkKKwkvKiBGb3J3YXJkIHNlYXJjaCAqLworCS8qIDEgcGFzcyByZWxvY2F0aW9uIGluIHRoZSBnYXAgbWVyZ2VkIHdpdGggMiBwYXNzIHJlbG9jIGFmdGVyIHNvdXJjZSAqLworCWlmICghb2sgJiYgKnB0cl90b19mYmxvY2sgIT0gKnB0cl9mYmxvY2spIHsKKwkJc3RhcnQgPSBzdG9wID0gKnB0cl90b19mYmxvY2srMTsKKwkJd2hpbGUgKHN0b3AgPCBQRURfQkUxNl9UT19DUFUocHJpdl9kYXRhLT5tZGItPnRvdGFsX2Jsb2NrcykKKwkJICAgICAgICYmIHN0b3Atc3RhcnQgIT0gc2l6ZSkgeworCQkJaWYgKFRTVF9CTE9DX09DQ1VQQVRJT04ocHJpdl9kYXRhLT5hbGxvY19tYXAsc3RvcCkpCisJCQkJc3RhcnQgPSBzdG9wICsgMTsKKwkJCSsrc3RvcDsKKwkJfQorCQlvayA9IChzdG9wLXN0YXJ0ID09IHNpemUpOworCX0KKworCS8qIG5ldyBub24gb3ZlcmxhcHBpbmcgcm9vbSBoYXMgYmVlbiBmb3VuZCA/ICovCisJaWYgKG9rKSB7CisJCS8qIGVub3VnaCByb29tICovCisJCXVuc2lnbmVkIGludCBqOworCQl1bnNpZ25lZCBpbnQgc3RhcnRfYmxvY2sgPQorCQkJUEVEX0JFMTZfVE9fQ1BVIChwcml2X2RhdGEtPm1kYi0+c3RhcnRfYmxvY2sgKTsKKwkJdW5zaWduZWQgaW50IGJsb2NrX3N6ID0gCisJCQkoUEVEX0JFMzJfVE9fQ1BVIChwcml2X2RhdGEtPm1kYi0+YmxvY2tfc2l6ZSkKKwkJCSAvIFBFRF9TRUNUT1JfU0laRV9ERUZBVUxUKTsKKworCQlpZiAoc3RvcCA+ICpwdHJfdG9fZmJsb2NrICYmIHN0b3AgPD0gKnB0cl9mYmxvY2spCisJCQkvKiBGaXQgaW4gdGhlIGdhcCAqLworCQkJbmV4dF90b19mYmxvY2sgPSBzdG9wOworCQllbHNlCisJCQkvKiBCZWZvcmUgb3IgYWZ0ZXIgdGhlIGdhcCAqLworCQkJbmV4dF90b19mYmxvY2sgPSAqcHRyX3RvX2ZibG9jazsKKworCQkvKiBtb3ZlIGJsb2NrcyAqLworCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgLyppKz1qKi8pIHsKKwkJCVBlZFNlY3RvciAJYWJzX3NlY3RvcjsKKwkJCXVuc2lnbmVkIGludAlhaTsKKworCQkJaiA9IHNpemUgLSBpOyBqID0gKGogPCBoZnNfYmxvY2tfY291bnQpID8KKwkJCQkJICAgaiA6IGhmc19ibG9ja19jb3VudCA7CisKKwkJCWFic19zZWN0b3IgPSBzdGFydF9ibG9jaworCQkJCSAgICAgKyAoUGVkU2VjdG9yKSAoKnB0cl9mYmxvY2sgKyBpKSAqIGJsb2NrX3N6OworCQkJaWYgKCFwZWRfZ2VvbWV0cnlfcmVhZCAoZnMtPmdlb20sIGhmc19ibG9jaywgYWJzX3NlY3RvciwKKwkJCQkJCWJsb2NrX3N6ICogaikpCisJCQkJcmV0dXJuIC0xOworCisJCQlhYnNfc2VjdG9yID0gc3RhcnRfYmxvY2sKKwkJCQkgICAgICsgKFBlZFNlY3RvcikgKHN0YXJ0ICsgaSkgKiBibG9ja19zejsKKwkJCWlmICghcGVkX2dlb21ldHJ5X3dyaXRlIChmcy0+Z2VvbSxoZnNfYmxvY2ssYWJzX3NlY3RvciwKKwkJCQkJCSBibG9ja19zeiAqIGopKQorCQkJCXJldHVybiAtMTsKKworCQkJZm9yIChhaSA9IGkrajsgaSA8IGFpOyBpKyspIHsKKwkJCQkvKiBmcmVlIHNvdXJjZSBibG9jayAqLworCQkJCUNMUl9CTE9DX09DQ1VQQVRJT04ocHJpdl9kYXRhLT5hbGxvY19tYXAsCisJCQkJCQkgICAgKnB0cl9mYmxvY2sgKyBpKTsKKworCQkJCS8qIHNldCBkZXN0IGJsb2NrICovCisJCQkJU0VUX0JMT0NfT0NDVVBBVElPTihwcml2X2RhdGEtPmFsbG9jX21hcCwKKwkJCQkJCSAgICBzdGFydCArIGkpOworCQkJfQorCQl9CisJCWlmICghcGVkX2dlb21ldHJ5X3N5bmNfZmFzdCAoZnMtPmdlb20pKQorCQkJcmV0dXJuIC0xOworCisJCSpwdHJfZmJsb2NrICs9IHNpemU7CisJCSpwdHJfdG9fZmJsb2NrID0gbmV4dF90b19mYmxvY2s7CisJfSBlbHNlIHsKKwkJaWYgKCpwdHJfZmJsb2NrICE9ICpwdHJfdG9fZmJsb2NrKQorCQkJLyogbm90IGVub3VnaCByb29tLCBidXQgdHJ5IHRvIGNvbnRpbnVlICovCisJCQlwZWRfZXhjZXB0aW9uX3Rocm93IChQRURfRVhDRVBUSU9OX1dBUk5JTkcsCisJCQkJCVBFRF9FWENFUFRJT05fSUdOT1JFLAorCQkJCQlfKCJBbiBleHRlbnQgaGFzIG5vdCBiZWVuIHJlbG9jYXRlZC4iKSk7CisJCXN0YXJ0ID0gKnB0cl9mYmxvY2s7CisJCSpwdHJfZmJsb2NrID0gKnB0cl90b19mYmxvY2sgPSBzdGFydCArIHNpemU7CisJfQorCisJcmV0dXJuIHN0YXJ0OworfQorCisvKiBVcGRhdGUgTURCICovCisvKiBSZXR1cm4gMCBpZiBhbiBlcnJvciBvY2N1cnJlZCAqLworLyogUmV0dXJuIDEgaWYgZXZlcnl0aGluZyBvayAqLworaW50CitoZnNfdXBkYXRlX21kYiAoUGVkRmlsZVN5c3RlbSAqZnMpCit7CisJSGZzUHJpdmF0ZUZTRGF0YSogCXByaXZfZGF0YSA9IChIZnNQcml2YXRlRlNEYXRhKikKKwkJCQkJCWZzLT50eXBlX3NwZWNpZmljOworCXVpbnQ4X3QJCQlub2RlW1BFRF9TRUNUT1JfU0laRV9ERUZBVUxUXTsKKworICAgIAlpZiAoIXBlZF9nZW9tZXRyeV9yZWFkIChmcy0+Z2VvbSwgbm9kZSwgMiwgMSkpCisJCXJldHVybiAwOworCW1lbWNweSAobm9kZSwgcHJpdl9kYXRhLT5tZGIsIHNpemVvZiAoSGZzTWFzdGVyRGlyZWN0b3J5QmxvY2spKTsKKwlpZiAoICAgIXBlZF9nZW9tZXRyeV93cml0ZSAoZnMtPmdlb20sIG5vZGUsIDIsIDEpCisJICAgIHx8ICFwZWRfZ2VvbWV0cnlfd3JpdGUgKGZzLT5nZW9tLCBub2RlLCBmcy0+Z2VvbS0+bGVuZ3RoIC0gMiwgMSkKKwkgICAgfHwgIXBlZF9nZW9tZXRyeV9zeW5jX2Zhc3QgKGZzLT5nZW9tKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKKy8qIEdlbmVyaWMgcmVsb2NhdG9yICovCisvKiByZXBsYWNlIHByZXZpb3VzIGhmc19kb19tb3ZlXyogKi8KK3N0YXRpYyBpbnQKK2hmc19kb19tb3ZlIChQZWRGaWxlU3lzdGVtKiBmcywgdW5zaWduZWQgaW50ICpwdHJfc3JjLAorCSAgICAgdW5zaWduZWQgaW50ICpwdHJfZGVzdCwgSGZzQ1ByaXZhdGVDYWNoZSogY2FjaGUsCisJICAgICBIZnNDUHJpdmF0ZUV4dGVudCogcmVmKQoreworCXVpbnQ4X3QJCQlub2RlW1BFRF9TRUNUT1JfU0laRV9ERUZBVUxUXTsKKwlIZnNQcml2YXRlRlNEYXRhKiAJcHJpdl9kYXRhID0gKEhmc1ByaXZhdGVGU0RhdGEqKQorCQkJCQkJZnMtPnR5cGVfc3BlY2lmaWM7CisJSGZzUHJpdmF0ZUZpbGUqCQlmaWxlOworCUhmc0V4dERlc2NyaXB0b3IqCWV4dGVudDsKKwlIZnNDUHJpdmF0ZUV4dGVudCoJbW92ZTsKKwlpbnQJCQluZXdfc3RhcnQ7CisKKwluZXdfc3RhcnQgPSBoZnNfZWZmZWN0X21vdmVfZXh0ZW50IChmcywgcHRyX3NyYywgcHRyX2Rlc3QsIAorCQkJCQkgICAgcmVmLT5leHRfbGVuZ3RoKTsKKwlpZiAobmV3X3N0YXJ0ID09IC0xKSByZXR1cm4gLTE7CisKKwlpZiAocmVmLT5leHRfc3RhcnQgIT0gKHVuc2lnbmVkKSBuZXdfc3RhcnQpIHsKKwkJLyogTG9hZCwgbW9kaWZ5ICYgc2F2ZSAqLworCQlzd2l0Y2ggKHJlZi0+d2hlcmUpIHsKKwkJLyoqKioqKioqIE1EQiAqKioqKioqKiovCisJCSAgICBjYXNlIENSX1BSSU1fQ0FUIDoKKwkJCXByaXZfZGF0YS0+Y2F0YWxvZ19maWxlCisJCQktPmZpcnN0W3JlZi0+cmVmX2luZGV4XS5zdGFydF9ibG9jayA9IAorCQkJCVBFRF9DUFVfVE9fQkUxNihuZXdfc3RhcnQpOworCQkJZ290byBDUl9QUklNOworCQkgICAgY2FzZSBDUl9QUklNX0VYVCA6CisJCQlwcml2X2RhdGEtPmV4dGVudF9maWxlCisJCQktPmZpcnN0W3JlZi0+cmVmX2luZGV4XS5zdGFydF9ibG9jayA9IAorCQkJCVBFRF9DUFVfVE9fQkUxNihuZXdfc3RhcnQpOwkJICAgIAorCQkgICAgQ1JfUFJJTSA6CisJCQlleHRlbnQgPSAoIEhmc0V4dERlc2NyaXB0b3IqICkKKwkJCQkgKCAodWludDhfdCopcHJpdl9kYXRhLT5tZGIgKyByZWYtPnJlZl9vZmZzZXQgKTsKKwkJCWV4dGVudFtyZWYtPnJlZl9pbmRleF0uc3RhcnRfYmxvY2sgPQorCQkJCVBFRF9DUFVfVE9fQkUxNihuZXdfc3RhcnQpOworCQkJaWYgKCFoZnNfdXBkYXRlX21kYihmcykpIHJldHVybiAtMTsKKwkJCWJyZWFrOworCisJCS8qKioqKioqKiogQlRSRUUgKioqKioqKi8KKwkJICAgIGNhc2UgQ1JfQlRSRUVfRVhUX0NBVCA6CisJCQlpZiAocHJpdl9kYXRhLT5jYXRhbG9nX2ZpbGUKKwkJCSAgICAtPmNhY2hlW3JlZi0+cmVmX2luZGV4XS5zdGFydF9ibG9jaworCQkJICAgID09IFBFRF9DUFVfVE9fQkUxNihyZWYtPmV4dF9zdGFydCkpCisJCQkJcHJpdl9kYXRhLT5jYXRhbG9nX2ZpbGUKKwkJCQktPmNhY2hlW3JlZi0+cmVmX2luZGV4XS5zdGFydF9ibG9jayA9CisJCQkJUEVEX0NQVV9UT19CRTE2KG5ld19zdGFydCk7CisJCSAgICBjYXNlIENSX0JUUkVFX0VYVF8wIDoKKwkJCWZpbGUgPSBwcml2X2RhdGEtPmV4dGVudF9maWxlOworCQkJZ290byBDUl9CVFJFRTsKKwkJICAgIGNhc2UgQ1JfQlRSRUVfQ0FUIDoKKwkJCWZpbGUgPSBwcml2X2RhdGEtPmNhdGFsb2dfZmlsZTsKKwkJICAgIENSX0JUUkVFOgorCQkJUEVEX0FTU0VSVChyZWYtPnNlY3RfYnlfYmxvY2sgPT0gMQorCQkJICAgICAgICAgICAmJiByZWYtPnJlZl9vZmZzZXQgPCBQRURfU0VDVE9SX1NJWkVfREVGQVVMVCwKKwkJCQkgICByZXR1cm4gLTEpOworCQkJaWYgKCFoZnNfZmlsZV9yZWFkX3NlY3RvcihmaWxlLCBub2RlLCByZWYtPnJlZl9ibG9jaykpCisJCQkJcmV0dXJuIC0xOworCQkJZXh0ZW50ID0gKCBIZnNFeHREZXNjcmlwdG9yKiApIChub2RlICsgcmVmLT5yZWZfb2Zmc2V0KTsKKwkJCWV4dGVudFtyZWYtPnJlZl9pbmRleF0uc3RhcnRfYmxvY2sgPQorCQkJCVBFRF9DUFVfVE9fQkUxNihuZXdfc3RhcnQpOworCQkJaWYgKCFoZnNfZmlsZV93cml0ZV9zZWN0b3IoZmlsZSwgbm9kZSwgcmVmLT5yZWZfYmxvY2spCisJCQkgICAgfHwgIXBlZF9nZW9tZXRyeV9zeW5jX2Zhc3QgKGZzLT5nZW9tKSkKKwkJCQlyZXR1cm4gLTE7CisJCQlicmVhazsKKworCQkvKioqKioqKioqKiBCVUcgKioqKioqKiovCisJCSAgICBkZWZhdWx0IDoKKwkJCXBlZF9leGNlcHRpb25fdGhyb3cgKAorCQkJCVBFRF9FWENFUFRJT05fRVJST1IsCisJCQkJUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQkJXygiQSByZWZlcmVuY2UgdG8gYW4gZXh0ZW50IGNvbWVzIGZyb20gYSBwbGFjZSAiCisJCQkJICAiaXQgc2hvdWxkIG5vdC4gIFlvdSBzaG91bGQgY2hlY2sgdGhlIGZpbGUgIgorCQkJCSAgInN5c3RlbSEiKSk7CisJCQlyZXR1cm4gLTE7CisJCQlicmVhazsKKwkJfQorCisJCS8qIFVwZGF0ZSB0aGUgY2FjaGUgKi8KKwkJbW92ZSA9IGhmc2NfY2FjaGVfbW92ZV9leHRlbnQoY2FjaGUsIHJlZi0+ZXh0X3N0YXJ0LCBuZXdfc3RhcnQpOworCQlpZiAoIW1vdmUpIHJldHVybiAtMTsgLyogImNsZWFubHkiIGZhaWwgKi8KKwkJUEVEX0FTU0VSVChtb3ZlID09IHJlZiwgcmV0dXJuIC0xKTsgLyogZ2VuZXJhdGUgYSBidWcgKi8KKwl9CisKKwlyZXR1cm4gbmV3X3N0YXJ0OworfQorCisvKiAwIGVycm9yLCAxIG9rICovCitzdGF0aWMgaW50CitoZnNfc2F2ZV9hbGxvY2F0aW9uKFBlZEZpbGVTeXN0ZW0qIGZzKQoreworCUhmc1ByaXZhdGVGU0RhdGEqCXByaXZfZGF0YSA9IChIZnNQcml2YXRlRlNEYXRhKikKKwkJCQkJCWZzLT50eXBlX3NwZWNpZmljOworCXVuc2lnbmVkIGludAkJbWFwX3NlY3RvcnM7CisKKwltYXBfc2VjdG9ycyA9ICggUEVEX0JFMTZfVE9fQ1BVIChwcml2X2RhdGEtPm1kYi0+dG90YWxfYmxvY2tzKQorCQkJKyBQRURfU0VDVE9SX1NJWkVfREVGQVVMVCAqIDggLSAxICkKKwkJICAgICAgLyAoUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQgKiA4KTsKKwlyZXR1cm4gKCBwZWRfZ2VvbWV0cnlfd3JpdGUgKGZzLT5nZW9tLCBwcml2X2RhdGEtPmFsbG9jX21hcCwKKwkJCVBFRF9CRTE2X1RPX0NQVSAocHJpdl9kYXRhLT5tZGItPnZvbHVtZV9iaXRtYXBfYmxvY2spLAorCQkJbWFwX3NlY3RvcnMpICk7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gbW92ZXMgYW4gZXh0ZW50IHN0YXJ0aW5nIGF0IGJsb2NrIGZibG9jayB0byBibG9jayB0b19mYmxvY2sKKyAgIGlmIHRoZXJlJ3MgZW5vdWdoIHJvb20gKi8KKy8qIFJldHVybiAxIGlmIGV2ZXJ5dGhpbmcgd2FzIGZpbmUgKi8KKy8qIFJldHVybiAtMSBpZiBhbiBlcnJvciBvY2N1cnJlZCAqLworLyogUmV0dXJuIDAgaWYgbm8gZXh0ZW50IHdhcyBmb3VuZCAqLworLyogR2VuZXJpYyBzZWFyY2ggdGhhbmtzIHRvIHRoZSBmaWxlIHN5c3RlbSBjYWNoZSAqLworc3RhdGljIGludAoraGZzX21vdmVfZXh0ZW50X3N0YXJ0aW5nX2F0IChQZWRGaWxlU3lzdGVtICpmcywgdW5zaWduZWQgaW50ICpwdHJfZmJsb2NrLAorCQkJICAgICB1bnNpZ25lZCBpbnQgKnB0cl90b19mYmxvY2ssIAorCQkJICAgICBIZnNDUHJpdmF0ZUNhY2hlKiBjYWNoZSkKK3sKKwlIZnNDUHJpdmF0ZUV4dGVudCoJcmVmOworCXVuc2lnbmVkIGludAkJb2xkX3N0YXJ0LCBuZXdfc3RhcnQ7CisJCisJLyogUmVmZXJlbmNlIHNlYXJjaCBwb3dlcmVkIGJ5IHRoZSBjYWNoZS4uLiAqLworCS8qIFRoaXMgaXMgdGhlIG9wdGltaXNhdGlvbiBzZWNyZXQgOikgKi8KKwlyZWYgPSBoZnNjX2NhY2hlX3NlYXJjaF9leHRlbnQoY2FjaGUsICpwdHJfZmJsb2NrKTsKKwlpZiAoIXJlZikgcmV0dXJuIDA7IC8qIG5vdCBmb3VuZCAqLworCisJb2xkX3N0YXJ0ID0gKnB0cl9mYmxvY2s7CisJbmV3X3N0YXJ0ID0gaGZzX2RvX21vdmUoZnMsIHB0cl9mYmxvY2ssIHB0cl90b19mYmxvY2ssIGNhY2hlLCByZWYpOworCWlmIChuZXdfc3RhcnQgPT0gKHVuc2lnbmVkIGludCkgLTEpIHJldHVybiAtMTsKKwlpZiAobmV3X3N0YXJ0ID4gb2xkX3N0YXJ0KSB7IC8qIGRldGVjdCAyIHBhc3MgcmVsb2MgKi8KKwkJbmV3X3N0YXJ0ID0gaGZzX2RvX21vdmUoZnMsJm5ld19zdGFydCxwdHJfdG9fZmJsb2NrLGNhY2hlLHJlZik7CisJCWlmIChuZXdfc3RhcnQgPT0gKHVuc2lnbmVkIGludCkgLTEgfHwgbmV3X3N0YXJ0ID4gb2xkX3N0YXJ0KQorCQkJcmV0dXJuIC0xOworCX0KKworCS8qIGFsbG9jYXRpb24gYml0bWFwIHNhdmUgaXMgbm90IGF0b21pYyB3aXRoIGRhdGEgcmVsb2NhdGlvbiAqLworCS8qIHNvIHdlIG9ubHkgZG8gaXQgYSBmZXcgdGltZXMsIGFuZCB3aXRob3V0IHN5bmNpbmcgKi8KKwkvKiBUaGUgdW5tb3VudGVkIGJpdCBwcm90ZWN0IHVzIGFueXdheSAqLworCWhmc19zYXZlX2FsbG9jYXRpb24oZnMpOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50CitoZnNfY2FjaGVfZnJvbV9tZGIoSGZzQ1ByaXZhdGVDYWNoZSogY2FjaGUsIFBlZEZpbGVTeXN0ZW0qIGZzLAorCQkgICBQZWRUaW1lciogdGltZXIpCit7CisJSGZzUHJpdmF0ZUZTRGF0YSogCXByaXZfZGF0YSA9IChIZnNQcml2YXRlRlNEYXRhKikKKwkJCQkJCWZzLT50eXBlX3NwZWNpZmljOworCUhmc0V4dERlc2NyaXB0b3IqCWV4dGVudDsKKwl1bnNpZ25lZCBpbnQJCWo7CisKKwlleHRlbnQgPSBwcml2X2RhdGEtPm1kYi0+ZXh0ZW50c19maWxlX3JlYzsKKyAgICAJZm9yIChqID0gMDsgaiA8IEhGU19FWFRfTkI7ICsraikgeworCQlpZiAoIWV4dGVudFtqXS5ibG9ja19jb3VudCkgYnJlYWs7CisJCWlmICghaGZzY19jYWNoZV9hZGRfZXh0ZW50KAorCQkJY2FjaGUsCisJCQlQRURfQkUxNl9UT19DUFUoZXh0ZW50W2pdLnN0YXJ0X2Jsb2NrKSwKKwkJCVBFRF9CRTE2X1RPX0NQVShleHRlbnRbal0uYmxvY2tfY291bnQpLAorCQkJMCwgLyogdW51c2VkIGZvciBtZGIgKi8KKwkJCSgodWludDhfdCopZXh0ZW50KSAtICgodWludDhfdCopcHJpdl9kYXRhLT5tZGIpLAorCQkJMSwgLyogbG9hZC9zYXZlIG9ubHkgMSBzZWN0b3IgKi8KKwkJCUNSX1BSSU1fRVhULAorCQkJaiApCisJCSAgICkKKwkJCXJldHVybiAwOworCX0KKworCWV4dGVudCA9IHByaXZfZGF0YS0+bWRiLT5jYXRhbG9nX2ZpbGVfcmVjOworCWZvciAoaiA9IDA7IGogPCBIRlNfRVhUX05COyArK2opIHsKKwkJaWYgKCFleHRlbnRbal0uYmxvY2tfY291bnQpIGJyZWFrOworCQlpZiAoIWhmc2NfY2FjaGVfYWRkX2V4dGVudCgKKwkJCWNhY2hlLAorCQkJUEVEX0JFMTZfVE9fQ1BVKGV4dGVudFtqXS5zdGFydF9ibG9jayksCisJCQlQRURfQkUxNl9UT19DUFUoZXh0ZW50W2pdLmJsb2NrX2NvdW50KSwKKwkJCTAsCisJCQkoKHVpbnQ4X3QqKWV4dGVudCkgLSAoKHVpbnQ4X3QqKXByaXZfZGF0YS0+bWRiKSwKKwkJCTEsCisJCQlDUl9QUklNX0NBVCwKKwkJCWogKQorCQkgICApCisJCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludAoraGZzX2NhY2hlX2Zyb21fY2F0YWxvZyhIZnNDUHJpdmF0ZUNhY2hlKiBjYWNoZSwgUGVkRmlsZVN5c3RlbSogZnMsCisJCSAgIFBlZFRpbWVyKiB0aW1lcikKK3sKKwlIZnNQcml2YXRlRlNEYXRhKiAJcHJpdl9kYXRhID0gKEhmc1ByaXZhdGVGU0RhdGEqKQorCQkJCQkJZnMtPnR5cGVfc3BlY2lmaWM7CisJdWludDhfdAkJCW5vZGVbUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFRdOworCUhmc0hlYWRlclJlY29yZCoJaGVhZGVyOworCUhmc05vZGVEZXNjcmlwdG9yKglkZXNjID0gKEhmc05vZGVEZXNjcmlwdG9yKikgbm9kZTsKKwlIZnNDYXRhbG9nS2V5KgkJY2F0YWxvZ19rZXk7CisJSGZzQ2F0YWxvZyoJCWNhdGFsb2dfZGF0YTsKKwlIZnNFeHREZXNjcmlwdG9yKglleHRlbnQ7CisJdW5zaWduZWQgaW50CQlsZWFmX25vZGUsIHJlY29yZF9udW1iZXI7CisJdW5zaWduZWQgaW50CQlpLCBqOworCisJaWYgKCFwcml2X2RhdGEtPmNhdGFsb2dfZmlsZS0+c2VjdF9uYikgeworCQlwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCVBFRF9FWENFUFRJT05fSU5GT1JNQVRJT04sCisJCQlQRURfRVhDRVBUSU9OX09LLAorCQkJXygiVGhpcyBIRlMgdm9sdW1lIGhhcyBubyBjYXRhbG9nIGZpbGUuICAiCisJCQkgICJUaGlzIGlzIHZlcnkgdW51c3VhbCEiKSk7CisJCXJldHVybiAxOworCX0KKworCWlmICghaGZzX2ZpbGVfcmVhZF9zZWN0b3IgKHByaXZfZGF0YS0+Y2F0YWxvZ19maWxlLCBub2RlLCAwKSkKKwkJcmV0dXJuIDA7CisJaGVhZGVyID0gKEhmc0hlYWRlclJlY29yZCopKG5vZGUgKyAgUEVEX0JFMTZfVE9fQ1BVKCooKHVpbnQxNl90KikKKwkJCQkJCShub2RlKyhQRURfU0VDVE9SX1NJWkVfREVGQVVMVC0yKSkpKSk7CisKKwlmb3IgKGxlYWZfbm9kZSA9IFBFRF9CRTMyX1RPX0NQVSAoaGVhZGVyLT5maXJzdF9sZWFmX25vZGUpOworCSAgICAgbGVhZl9ub2RlOworCSAgICAgbGVhZl9ub2RlID0gUEVEX0JFMzJfVE9fQ1BVIChkZXNjLT5uZXh0KSkgeworCQlpZiAoIWhmc19maWxlX3JlYWRfc2VjdG9yIChwcml2X2RhdGEtPmNhdGFsb2dfZmlsZSwKKwkJCQkJICAgbm9kZSwgbGVhZl9ub2RlKSkKKwkJCXJldHVybiAwOworCQlyZWNvcmRfbnVtYmVyID0gUEVEX0JFMTZfVE9fQ1BVIChkZXNjLT5yZWNfbmIpOworCQlmb3IgKGkgPSAxOyBpIDw9IHJlY29yZF9udW1iZXI7ICsraSkgeworCQkgICAgICAgLyogdW5kb2N1bWVudGVkIGFsaWduZW1lbnQgKi8KKwkJCXVuc2lnbmVkIGludCBza2lwOworCQkJY2F0YWxvZ19rZXkgPSAoSGZzQ2F0YWxvZ0tleSopIChub2RlICsgUEVEX0JFMTZfVE9fQ1BVKAorCQkJCSooKHVpbnQxNl90Kikobm9kZSsoUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQgLSAyKmkpKSkpKTsKKwkJCXNraXAgPSAoMSArIGNhdGFsb2dfa2V5LT5rZXlfbGVuZ3RoICsgMSkgJiB+MTsKKwkJCWNhdGFsb2dfZGF0YSA9IChIZnNDYXRhbG9nKikoICgodWludDhfdCopY2F0YWxvZ19rZXkpCisJCQkJCQkJKyBza2lwICk7CisJCQkvKiBjaGVjayBmb3Igb2J2aW91cyBlcnJvciBpbiBGUyAqLworCQkJaWYgKCgodWludDhfdCopY2F0YWxvZ19rZXkgLSBub2RlIDwgSEZTX0ZJUlNUX1JFQykKKwkJCSAgICB8fCAoKHVpbnQ4X3QqKWNhdGFsb2dfZGF0YSAtIG5vZGUKKwkJCQk+PSBQRURfU0VDVE9SX1NJWkVfREVGQVVMVCAKKwkJCQkgICAtIDIgKiAoc2lnbmVkKShyZWNvcmRfbnVtYmVyKzEpKSkgeworCQkJCXBlZF9leGNlcHRpb25fdGhyb3cgKAorCQkJCQlQRURfRVhDRVBUSU9OX0VSUk9SLAorCQkJCQlQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCQkJXygiVGhlIGZpbGUgc3lzdGVtIGNvbnRhaW5zIGVycm9ycy4iKSk7CisJCQkJcmV0dXJuIDA7CisJCQl9CisKKwkJCWlmIChjYXRhbG9nX2RhdGEtPnR5cGUgIT0gSEZTX0NBVF9GSUxFKSBjb250aW51ZTsKKworCQkJZXh0ZW50ID0gY2F0YWxvZ19kYXRhLT5zZWwuZmlsZS5leHRlbnRzX2RhdGE7CisJCQlmb3IgKGogPSAwOyBqIDwgSEZTX0VYVF9OQjsgKytqKSB7CisJCQkJaWYgKCFleHRlbnRbal0uYmxvY2tfY291bnQpIGJyZWFrOworCQkJCWlmICghaGZzY19jYWNoZV9hZGRfZXh0ZW50KAorCQkJCQljYWNoZSwKKwkJCQkJUEVEX0JFMTZfVE9fQ1BVKGV4dGVudFtqXS5zdGFydF9ibG9jayksCisJCQkJCVBFRF9CRTE2X1RPX0NQVShleHRlbnRbal0uYmxvY2tfY291bnQpLAorCQkJCQlsZWFmX25vZGUsCisJCQkJCSh1aW50OF90KilleHRlbnQgLSBub2RlLAorCQkJCQkxLCAvKiBoZnMgPT4gYnRyZWUgYmxvY2sgPSA1MTIgYiAqLworCQkJCQlDUl9CVFJFRV9DQVQsCisJCQkJCWogKQorCQkJCSAgICkKKwkJCQkJcmV0dXJuIDA7CisJCQl9CisKKwkJCWV4dGVudCA9IGNhdGFsb2dfZGF0YS0+c2VsLmZpbGUuZXh0ZW50c19yZXM7CisJCQlmb3IgKGogPSAwOyBqIDwgSEZTX0VYVF9OQjsgKytqKSB7CisJCQkJaWYgKCFleHRlbnRbal0uYmxvY2tfY291bnQpIGJyZWFrOworCQkJCWlmICghaGZzY19jYWNoZV9hZGRfZXh0ZW50KAorCQkJCQljYWNoZSwKKwkJCQkJUEVEX0JFMTZfVE9fQ1BVKGV4dGVudFtqXS5zdGFydF9ibG9jayksCisJCQkJCVBFRF9CRTE2X1RPX0NQVShleHRlbnRbal0uYmxvY2tfY291bnQpLAorCQkJCQlsZWFmX25vZGUsCisJCQkJCSh1aW50OF90KilleHRlbnQgLSBub2RlLAorCQkJCQkxLCAvKiBoZnMgPT4gYnRyZWUgYmxvY2sgPSA1MTIgYiAqLworCQkJCQlDUl9CVFJFRV9DQVQsCisJCQkJCWogKQorCQkJCSAgICkKKwkJCQkJcmV0dXJuIDA7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludAoraGZzX2NhY2hlX2Zyb21fZXh0ZW50KEhmc0NQcml2YXRlQ2FjaGUqIGNhY2hlLCBQZWRGaWxlU3lzdGVtKiBmcywKKwkJICAgUGVkVGltZXIqIHRpbWVyKQoreworCUhmc1ByaXZhdGVGU0RhdGEqIAlwcml2X2RhdGEgPSAoSGZzUHJpdmF0ZUZTRGF0YSopCisJCQkJCQlmcy0+dHlwZV9zcGVjaWZpYzsKKwl1aW50OF90CQkJbm9kZVtQRURfU0VDVE9SX1NJWkVfREVGQVVMVF07CisJSGZzSGVhZGVyUmVjb3JkKgloZWFkZXI7CisJSGZzTm9kZURlc2NyaXB0b3IqCWRlc2MgPSAoSGZzTm9kZURlc2NyaXB0b3IqKSBub2RlOworCUhmc0V4dGVudEtleSoJCWV4dGVudF9rZXk7CisJSGZzRXh0RGVzY3JpcHRvcioJZXh0ZW50OworCXVuc2lnbmVkIGludAkJbGVhZl9ub2RlLCByZWNvcmRfbnVtYmVyOworCXVuc2lnbmVkIGludAkJaSwgajsKKworCWlmICghcHJpdl9kYXRhLT5leHRlbnRfZmlsZS0+c2VjdF9uYikgeworCQlwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCVBFRF9FWENFUFRJT05fSU5GT1JNQVRJT04sCisJCQlQRURfRVhDRVBUSU9OX09LLAorCQkJXygiVGhpcyBIRlMgdm9sdW1lIGhhcyBubyBleHRlbnRzIG92ZXJmbG93ICIKKwkJCSAgImZpbGUuICBUaGlzIGlzIHF1aXRlIHVudXN1YWwhIikpOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoIWhmc19maWxlX3JlYWRfc2VjdG9yIChwcml2X2RhdGEtPmV4dGVudF9maWxlLCBub2RlLCAwKSkKKwkJcmV0dXJuIDA7CisJaGVhZGVyID0gKChIZnNIZWFkZXJSZWNvcmQqKSAobm9kZSArIFBFRF9CRTE2X1RPX0NQVSgqKCh1aW50MTZfdCAqKQorCQkJCQkJKG5vZGUrKFBFRF9TRUNUT1JfU0laRV9ERUZBVUxULTIpKSkpKSk7CisKKwlmb3IgKGxlYWZfbm9kZSA9IFBFRF9CRTMyX1RPX0NQVSAoaGVhZGVyLT5maXJzdF9sZWFmX25vZGUpOworCSAgICAgbGVhZl9ub2RlOworCSAgICAgbGVhZl9ub2RlID0gUEVEX0JFMzJfVE9fQ1BVIChkZXNjLT5uZXh0KSkgeworCQlpZiAoIWhmc19maWxlX3JlYWRfc2VjdG9yIChwcml2X2RhdGEtPmV4dGVudF9maWxlLCBub2RlLAorCQkJCQkgICBsZWFmX25vZGUpKQorCQkJcmV0dXJuIDA7CisJCXJlY29yZF9udW1iZXIgPSBQRURfQkUxNl9UT19DUFUgKGRlc2MtPnJlY19uYik7CisJCWZvciAoaSA9IDE7IGkgPD0gcmVjb3JkX251bWJlcjsgaSsrKSB7CisJCQl1aW50OF90CXdoZXJlOworCQkJZXh0ZW50X2tleSA9IChIZnNFeHRlbnRLZXkqKQorCQkJCQkobm9kZSArIFBFRF9CRTE2X1RPX0NQVSgqKCh1aW50MTZfdCAqKQorCQkJCQkgICAgICAobm9kZSsoUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQgLSAyKmkpKSkpKTsKKwkJCS8qIHNpemUgaXMgY3N0ICovCisJCQlleHRlbnQgPSAoSGZzRXh0RGVzY3JpcHRvciopKCgodWludDhfdCopZXh0ZW50X2tleSkKKwkJCQkJCSAgICAgICArIHNpemVvZiAoSGZzRXh0ZW50S2V5KSk7CisJCQkvKiBjaGVjayBmb3Igb2J2aW91cyBlcnJvciBpbiBGUyAqLworCQkJaWYgKCgodWludDhfdCopZXh0ZW50X2tleSAtIG5vZGUgPCBIRlNfRklSU1RfUkVDKQorCQkJICAgIHx8ICgodWludDhfdCopZXh0ZW50IC0gbm9kZSAKKwkJCSAgICAgICAgPj0gUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQKKwkJCQkgICAtIDIgKiAoc2lnbmVkKShyZWNvcmRfbnVtYmVyKzEpKSkgeworCQkJCXBlZF9leGNlcHRpb25fdGhyb3cgKAorCQkJCQlQRURfRVhDRVBUSU9OX0VSUk9SLAorCQkJCQlQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCQkJXygiVGhlIGZpbGUgc3lzdGVtIGNvbnRhaW5zIGVycm9ycy4iKSk7CisJCQkJcmV0dXJuIDA7CisJCQl9CisKKwkJCXN3aXRjaCAoZXh0ZW50X2tleS0+ZmlsZV9JRCkgeworCQkJICAgIGNhc2UgUEVEX0NQVV9UT19CRTMyIChIRlNfWFRFTlRfSUQpIDoKKwkJCQlpZiAocGVkX2V4Y2VwdGlvbl90aHJvdyAoCisJCQkJCVBFRF9FWENFUFRJT05fV0FSTklORywKKwkJCQkJUEVEX0VYQ0VQVElPTl9JR05PUkVfQ0FOQ0VMLAorCQkJCQlfKCJUaGUgZXh0ZW50cyBvdmVyZmxvdyBmaWxlIHNob3VsZCBub3QiCisJCQkJCSAgIiBjb250YWluIGl0cyBvd24gZXh0ZW50cyEgIFlvdSAiCisJCQkJCSAgInNob3VsZCBjaGVjayB0aGUgZmlsZSBzeXN0ZW0uIikpCisJCQkJCQkhPSBQRURfRVhDRVBUSU9OX0lHTk9SRSkKKwkJCQkJcmV0dXJuIDA7CisJCQkJd2hlcmUgPSBDUl9CVFJFRV9FWFRfRVhUOworCQkJCWJyZWFrOworCQkJICAgIGNhc2UgUEVEX0NQVV9UT19CRTMyIChIRlNfQ0FUQUxPR19JRCkgOgorCQkJCXdoZXJlID0gQ1JfQlRSRUVfRVhUX0NBVDsKKwkJCQlicmVhazsKKwkJCSAgICBkZWZhdWx0IDoKKwkJCQl3aGVyZSA9IENSX0JUUkVFX0VYVF8wOworCQkJCWJyZWFrOworCQkJfQorCisJCQlmb3IgKGogPSAwOyBqIDwgSEZTX0VYVF9OQjsgKytqKSB7CisJCQkJaWYgKCFleHRlbnRbal0uYmxvY2tfY291bnQpIGJyZWFrOworCQkJCWlmICghaGZzY19jYWNoZV9hZGRfZXh0ZW50KAorCQkJCQljYWNoZSwKKwkJCQkJUEVEX0JFMTZfVE9fQ1BVKGV4dGVudFtqXS5zdGFydF9ibG9jayksCisJCQkJCVBFRF9CRTE2X1RPX0NQVShleHRlbnRbal0uYmxvY2tfY291bnQpLAorCQkJCQlsZWFmX25vZGUsCisJCQkJCSh1aW50OF90KilleHRlbnQgLSBub2RlLAorCQkJCQkxLCAvKiBoZnMgPT4gYnRyZWUgYmxvY2sgPSA1MTIgYiAqLworCQkJCQl3aGVyZSwKKwkJCQkJaiApCisJCQkJICAgKQorCQkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiAxOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIGNhY2hlIGV2ZXJ5IGV4dGVudHMgc3RhcnQgYW5kIGxlbmd0aCBzdG9yZWQgaW4gYW55CisgICBmcyBzdHJ1Y3R1cmUgaW50byB0aGUgYWR0IGRlZmluZWQgaW4gY2FjaGUuW2NoXQorICAgUmV0dXJucyBOVUxMIG9uIGZhaWx1cmUgKi8KK3N0YXRpYyBIZnNDUHJpdmF0ZUNhY2hlKgoraGZzX2NhY2hlX2V4dGVudHMoUGVkRmlsZVN5c3RlbSAqZnMsIFBlZFRpbWVyKiB0aW1lcikKK3sKKwlIZnNQcml2YXRlRlNEYXRhKiAJcHJpdl9kYXRhID0gKEhmc1ByaXZhdGVGU0RhdGEqKQorCQkJCQkJZnMtPnR5cGVfc3BlY2lmaWM7CisJSGZzQ1ByaXZhdGVDYWNoZSoJcmV0OworCXVuc2lnbmVkIGludAkJZmlsZV9udW1iZXIsIGJsb2NrX251bWJlcjsKKworCWZpbGVfbnVtYmVyID0gUEVEX0JFMzJfVE9fQ1BVKHByaXZfZGF0YS0+bWRiLT5maWxlX2NvdW50KTsKKwlibG9ja19udW1iZXIgPSBQRURfQkUxNl9UT19DUFUocHJpdl9kYXRhLT5tZGItPnRvdGFsX2Jsb2Nrcyk7CisJcmV0ID0gaGZzY19uZXdfY2FjaGUoYmxvY2tfbnVtYmVyLCBmaWxlX251bWJlcik7CisJaWYgKCFyZXQpIHJldHVybiBOVUxMOworCisJaWYgKCFoZnNfY2FjaGVfZnJvbV9tZGIocmV0LCBmcywgdGltZXIpIHx8CisJICAgICFoZnNfY2FjaGVfZnJvbV9jYXRhbG9nKHJldCwgZnMsIHRpbWVyKSB8fAorCSAgICAhaGZzX2NhY2hlX2Zyb21fZXh0ZW50KHJldCwgZnMsIHRpbWVyKSkgeworCQlwZWRfZXhjZXB0aW9uX3Rocm93KAorCQkJUEVEX0VYQ0VQVElPTl9FUlJPUiwKKwkJCVBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJXygiQ291bGQgbm90IGNhY2hlIHRoZSBmaWxlIHN5c3RlbSBpbiBtZW1vcnkuIikpOworCQloZnNjX2RlbGV0ZV9jYWNoZShyZXQpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBUaGlzIGZ1bmN0aW9uIG1vdmVzIGZpbGUncyBkYXRhIHRvIGNvbXBhY3QgdXNlZCBhbmQgZnJlZSBzcGFjZSwKKyAgIHN0YXJ0aW5nIGF0IGZibG9jayBibG9jayAqLworLyogcmV0dXJuIDAgb24gZXJyb3IgKi8KK2ludAoraGZzX3BhY2tfZnJlZV9zcGFjZV9mcm9tX2Jsb2NrIChQZWRGaWxlU3lzdGVtICpmcywgdW5zaWduZWQgaW50IGZibG9jaywKKwkJCSAgICAgICAgUGVkVGltZXIqIHRpbWVyLCB1bnNpZ25lZCBpbnQgdG9fZnJlZSkKK3sKKwlQZWRTZWN0b3IJCWJ5dGVzX2J1ZmY7CisJSGZzUHJpdmF0ZUZTRGF0YSogCXByaXZfZGF0YSA9IChIZnNQcml2YXRlRlNEYXRhKikKKwkJCQkJCWZzLT50eXBlX3NwZWNpZmljOworCUhmc01hc3RlckRpcmVjdG9yeUJsb2NrKiBtZGIgPSBwcml2X2RhdGEtPm1kYjsKKwlIZnNDUHJpdmF0ZUNhY2hlKgljYWNoZTsKKwl1bnNpZ25lZCBpbnQgCQl0b19mYmxvY2sgPSBmYmxvY2s7CisJdW5zaWduZWQgaW50CQlzdGFydCA9IGZibG9jazsKKwl1bnNpZ25lZCBpbnQJCWRpdmlzb3IgPSBQRURfQkUxNl9UT19DUFUgKG1kYi0+dG90YWxfYmxvY2tzKQorCQkJCSAgICAgICAgICArIDEgLSBzdGFydCAtIHRvX2ZyZWU7CisJaW50CQkJcmV0OworCisJUEVEX0FTU0VSVCAoIWhmc19ibG9jaywgcmV0dXJuIDApOworCisJY2FjaGUgPSBoZnNfY2FjaGVfZXh0ZW50cyAoZnMsIHRpbWVyKTsKKwlpZiAoIWNhY2hlKQorCQlyZXR1cm4gMDsKKworCS8qIENhbGN1bGF0ZSB0aGUgc2l6ZSBvZiB0aGUgY29weSBidWZmZXIgOgorCSAqIFRha2VzIEJMT0NLX01BWF9CVUZGIEhGUyBibG9ja3MsIGJ1dCBpZiA+IEJZVEVTX01BWF9CVUZGCisJICogdGFrZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIEhGUyBibG9ja3Mgc28gdGhhdCB0aGUgYnVmZmVyCisJICogd2lsbCByZW1haW4gc21hbGxlciB0aGFuIG9yIGVxdWFsIHRvIEJZVEVTX01BWF9CVUZGLCB3aXRoCisJICogYSBtaW5pbXVtIG9mIDEgSEZTIGJsb2NrICovCisJYnl0ZXNfYnVmZiA9IFBFRF9CRTMyX1RPX0NQVSAocHJpdl9kYXRhLT5tZGItPmJsb2NrX3NpemUpCisJCSAgICAgKiAoUGVkU2VjdG9yKSBCTE9DS19NQVhfQlVGRjsKKwlpZiAoYnl0ZXNfYnVmZiA+IEJZVEVTX01BWF9CVUZGKSB7CisJCWhmc19ibG9ja19jb3VudCA9IEJZVEVTX01BWF9CVUZGCisJCQkJIC8gUEVEX0JFMzJfVE9fQ1BVIChwcml2X2RhdGEtPm1kYi0+YmxvY2tfc2l6ZSk7CisJCWlmICghaGZzX2Jsb2NrX2NvdW50KQorCQkJaGZzX2Jsb2NrX2NvdW50ID0gMTsKKwkJYnl0ZXNfYnVmZiA9IChQZWRTZWN0b3IpIGhmc19ibG9ja19jb3VudAorCQkJICAgICAqIFBFRF9CRTMyX1RPX0NQVSAocHJpdl9kYXRhLT5tZGItPmJsb2NrX3NpemUpOworCX0gZWxzZQorCQloZnNfYmxvY2tfY291bnQgPSBCTE9DS19NQVhfQlVGRjsKKworCS8qIElmIHRoZSBjYWNoZSBjb2RlIHJlcXVlc3RzIG1vcmUgc3BhY2UsIGdpdmUgaXQgdG8gaGltICovCisJaWYgKGJ5dGVzX2J1ZmYgPCBoZnNjX2NhY2hlX25lZWRlZF9idWZmZXIgKGNhY2hlKSkKKwkJYnl0ZXNfYnVmZiA9IGhmc2NfY2FjaGVfbmVlZGVkX2J1ZmZlciAoY2FjaGUpOworCisJaGZzX2Jsb2NrID0gKHVpbnQ4X3QqKSBwZWRfbWFsbG9jIChieXRlc19idWZmKTsKKwlpZiAoIWhmc19ibG9jaykKKwkJZ290byBlcnJvcl9jYWNoZTsKKworCWlmICghaGZzX3JlYWRfYmFkX2Jsb2NrcyAoZnMpKSB7CisJCXBlZF9leGNlcHRpb25fdGhyb3cgKAorCQkJUEVEX0VYQ0VQVElPTl9FUlJPUiwKKwkJCVBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJXygiQmFkIGJsb2NrcyBsaXN0IGNvdWxkIG5vdCBiZSBsb2FkZWQuIikpOworCQlnb3RvIGVycm9yX2FsbG9jOworCX0KKworCXdoaWxlIChmYmxvY2sgPCBQRURfQkUxNl9UT19DUFUgKG1kYi0+dG90YWxfYmxvY2tzKSkgeworCQlpZiAoVFNUX0JMT0NfT0NDVVBBVElPTihwcml2X2RhdGEtPmFsbG9jX21hcCxmYmxvY2spCisJCSAgICAmJiAoIWhmc19pc19iYWRfYmxvY2sgKGZzLCBmYmxvY2spKSkgeworCQkJaWYgKCEocmV0ID0gaGZzX21vdmVfZXh0ZW50X3N0YXJ0aW5nX2F0IChmcywgJmZibG9jaywKKwkJCQkJCSZ0b19mYmxvY2ssIGNhY2hlKSkpCisJCQkJdG9fZmJsb2NrID0gKytmYmxvY2s7CisJCQllbHNlIGlmIChyZXQgPT0gLTEpIHsKKwkJCQlwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCQkJUEVEX0VYQ0VQVElPTl9FUlJPUiwKKwkJCQkJUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQkJCV8oIkFuIGVycm9yIG9jY3VycmVkIGR1cmluZyBleHRlbnQgIgorCQkJCQkgICJyZWxvY2F0aW9uLiIpKTsKKwkJCQlnb3RvIGVycm9yX2FsbG9jOworCQkJfQorCQl9IGVsc2UgeworCQkJZmJsb2NrKys7CisJCX0KKworCQlwZWRfdGltZXJfdXBkYXRlKHRpbWVyLCAoZmxvYXQpKHRvX2ZibG9jayAtIHN0YXJ0KS9kaXZpc29yKTsKKwl9CisKKwlwZWRfZnJlZSAoaGZzX2Jsb2NrKTsgaGZzX2Jsb2NrID0gTlVMTDsgaGZzX2Jsb2NrX2NvdW50ID0gMDsKKwloZnNjX2RlbGV0ZV9jYWNoZSAoY2FjaGUpOworCXJldHVybiAxOworCitlcnJvcl9hbGxvYzoKKwlwZWRfZnJlZSAoaGZzX2Jsb2NrKTsgaGZzX2Jsb2NrID0gTlVMTDsgaGZzX2Jsb2NrX2NvdW50ID0gMDsKK2Vycm9yX2NhY2hlOgorCWhmc2NfZGVsZXRlX2NhY2hlIChjYWNoZSk7CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiAhRElTQ09WRVJfT05MWSAqLwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9oZnMvcmVsb2MuaCBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI3ZGQwYwotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAgICBsaWJwYXJ0ZWQgLSBhIGxpYnJhcnkgZm9yIG1hbmlwdWxhdGluZyBkaXNrIHBhcnRpdGlvbnMKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCisqLworCisjaWZuZGVmIF9SRUxPQ19ICisjZGVmaW5lIF9SRUxPQ19ICisKKyNpbmNsdWRlIDxwYXJ0ZWQvcGFydGVkLmg+CisjaW5jbHVkZSA8cGFydGVkL2VuZGlhbi5oPgorI2luY2x1ZGUgPHBhcnRlZC9kZWJ1Zy5oPgorCisjaW5jbHVkZSAiaGZzLmgiCisKK2ludAoraGZzX3VwZGF0ZV9tZGIgKFBlZEZpbGVTeXN0ZW0gKmZzKTsKKworaW50CitoZnNfcGFja19mcmVlX3NwYWNlX2Zyb21fYmxvY2sgKFBlZEZpbGVTeXN0ZW0gKmZzLCB1bnNpZ25lZCBpbnQgZmJsb2NrLAorCQkJICAgICAgICBQZWRUaW1lciogdGltZXIsIHVuc2lnbmVkIGludCB0b19mcmVlKTsKKworI2VuZGlmIC8qIF9SRUxPQ19IICovCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmMgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI3NGIyOAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYwpAQCAtMCwwICsxLDk0NiBAQAorLyoKKyAgICBsaWJwYXJ0ZWQgLSBhIGxpYnJhcnkgZm9yIG1hbmlwdWxhdGluZyBkaXNrIHBhcnRpdGlvbnMKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCisqLworCisjaWZuZGVmIERJU0NPVkVSX09OTFkKKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaW5jbHVkZSA8cGFydGVkL3BhcnRlZC5oPgorI2luY2x1ZGUgPHBhcnRlZC9lbmRpYW4uaD4KKyNpbmNsdWRlIDxwYXJ0ZWQvZGVidWcuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2lmIEVOQUJMRV9OTFMKKyMgIGluY2x1ZGUgPGxpYmludGwuaD4KKyMgIGRlZmluZSBfKFN0cmluZykgZGdldHRleHQgKFBBQ0tBR0UsIFN0cmluZykKKyNlbHNlCisjICBkZWZpbmUgXyhTdHJpbmcpIChTdHJpbmcpCisjZW5kaWYgLyogRU5BQkxFX05MUyAqLworCisjaW5jbHVkZSAiaGZzLmgiCisjaW5jbHVkZSAiZmlsZV9wbHVzLmgiCisjaW5jbHVkZSAiYWR2ZnNfcGx1cy5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiam91cm5hbC5oIgorCisjaW5jbHVkZSAicmVsb2NfcGx1cy5oIgorCisvKiBUaGlzIGZ1bmN0aW9uIG1vdmVzIGRhdGEgb2Ygc2l6ZSBibG9ja3Mgc3RhcnRpbmcgYXQgYmxvY2sgKnB0cl9mYmxvY2sKKyAgIHRvIGJsb2NrICpwdHJfdG9fZmJsb2NrICovCisvKiByZXR1cm4gbmV3IHN0YXJ0IG9yIC0xIG9uIGZhaWx1cmUgKi8KKy8qIC0xIGlzIG9rIGJlY2F1c2UgdGhlcmUgY2FuIG9ubHkgYmUgMl4zMi0xIGJsb2Nrcywgc28gdGhlIG1heCBwb3NzaWJsZQorICAgbGFzdCBvbmUgaXMgMl4zMi0yIChhbmQgYW55d2F5IGl0IGNvbnRhaW5zIEFsdGVybmF0ZSBWSCksIHNvCisgICAtMSAoPT0gMl4zMi0xWzJeMzJdKSBuZXZlciByZXByZXNlbnQgYSB2YWxpZCBibG9jayAqLworc3RhdGljIGludAoraGZzcGx1c19lZmZlY3RfbW92ZV9leHRlbnQgKFBlZEZpbGVTeXN0ZW0gKmZzLCB1bnNpZ25lZCBpbnQgKnB0cl9mYmxvY2ssCisJCQkgICAgdW5zaWduZWQgaW50ICpwdHJfdG9fZmJsb2NrLCB1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKwlIZnNQUHJpdmF0ZUZTRGF0YSogCXByaXZfZGF0YSA9IChIZnNQUHJpdmF0ZUZTRGF0YSopCisJCQkJCQlmcy0+dHlwZV9zcGVjaWZpYzsKKwl1bnNpZ25lZCBpbnQJCWksIG9rID0gMDsKKwl1bnNpZ25lZCBpbnQJCW5leHRfdG9fZmJsb2NrOworCXVuc2lnbmVkIGludAkJc3RhcnQsIHN0b3A7CisKKwlQRURfQVNTRVJUIChoZnNwX2Jsb2NrICE9IE5VTEwsIHJldHVybiAtMSk7CisJUEVEX0FTU0VSVCAoKnB0cl90b19mYmxvY2sgPD0gKnB0cl9mYmxvY2ssIHJldHVybiAtMSk7CisJLyogcXVpZXQgR0NDICovCisJbmV4dF90b19mYmxvY2sgPSBzdGFydCA9IHN0b3AgPSAwOworCisvKgorCVRyeSB0byBmaXQgdGhlIGV4dGVudCBBVCBvciBfQkVGT1JFXyB0aGUgd2FudGVkIHBsYWNlLAorCW9yIHRoZW4gaW4gdGhlIGdhcCBiZXR3ZWVuIGRlc3QgYW5kIHNvdXJjZS4KKwlJZiBmYWlsZWQgdHJ5IHRvIGZpdCB0aGUgZXh0ZW50IGFmdGVyIHNvdXJjZSwgZm9yIDIgcGFzcyByZWxvY2F0aW9uCisJVGhlIGV4dGVudCBpcyBhbHdheXMgY29waWVkIGluIGEgbm9uIG92ZXJsYXBwaW5nIHdheQorKi8KKworCS8qIEJhY2t3YXJkIHNlYXJjaCAqLworCS8qIDEgcGFzcyByZWxvY2F0aW9uIEFUIG9yIEJFRk9SRSAqcHRyX3RvX2ZibG9jayAqLworCWlmICgqcHRyX3RvX2ZibG9jayAhPSAqcHRyX2ZibG9jaykgeworCQlzdGFydCA9IHN0b3AgPSAqcHRyX2ZibG9jayA8ICpwdHJfdG9fZmJsb2NrK3NpemUgPworCQkJICAgICAgICpwdHJfZmJsb2NrIDogKnB0cl90b19mYmxvY2src2l6ZTsKKwkJd2hpbGUgKHN0YXJ0ICYmIHN0b3Atc3RhcnQgIT0gc2l6ZSkgeworCQkJLS1zdGFydDsKKwkJCWlmIChUU1RfQkxPQ19PQ0NVUEFUSU9OKHByaXZfZGF0YS0+YWxsb2NfbWFwLHN0YXJ0KSkKKwkJCQlzdG9wID0gc3RhcnQ7CisJCX0KKwkJb2sgPSAoc3RvcC1zdGFydCA9PSBzaXplKTsKKwl9CisJCisJLyogRm9yd2FyZCBzZWFyY2ggKi8KKwkvKiAxIHBhc3MgcmVsb2NhdGlvbiBpbiB0aGUgZ2FwIG1lcmdlZCB3aXRoIDIgcGFzcyByZWxvYyBhZnRlciBzb3VyY2UgKi8KKwlpZiAoIW9rICYmICpwdHJfdG9fZmJsb2NrICE9ICpwdHJfZmJsb2NrKSB7CisJCXN0YXJ0ID0gc3RvcCA9ICpwdHJfdG9fZmJsb2NrKzE7CisJCXdoaWxlIChzdG9wIDwgUEVEX0JFMzJfVE9fQ1BVKHByaXZfZGF0YS0+dmgtPnRvdGFsX2Jsb2NrcykKKwkJICAgICAgICYmIHN0b3Atc3RhcnQgIT0gc2l6ZSkgeworCQkJaWYgKFRTVF9CTE9DX09DQ1VQQVRJT04ocHJpdl9kYXRhLT5hbGxvY19tYXAsc3RvcCkpCisJCQkJc3RhcnQgPSBzdG9wICsgMTsKKwkJCSsrc3RvcDsKKwkJfQorCQlvayA9IChzdG9wLXN0YXJ0ID09IHNpemUpOworCX0KKworCS8qIG5ldyBub24gb3ZlcmxhcHBpbmcgcm9vbSBoYXMgYmVlbiBmb3VuZCA/ICovCisJaWYgKG9rKSB7CisJCS8qIGVub3VnaCByb29tICovCisJCVBlZFNlY3RvcglhYnNfc2VjdG9yOworCQl1bnNpZ25lZCBpbnQJYWksIGosIGJsb2NrOworCQl1bnNpZ25lZCBpbnQgCWJsb2NrX3N6ID0gKFBFRF9CRTMyX1RPX0NQVSAoCisJCQkJCXByaXZfZGF0YS0+dmgtPmJsb2NrX3NpemUpCisJCQkJCS8gUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQpOworCisJCWlmIChzdG9wID4gKnB0cl90b19mYmxvY2sgJiYgc3RvcCA8PSAqcHRyX2ZibG9jaykKKwkJCS8qIEZpdCBpbiB0aGUgZ2FwICovCisJCQluZXh0X3RvX2ZibG9jayA9IHN0b3A7CisJCWVsc2UKKwkJCS8qIEJlZm9yZSBvciBhZnRlciB0aGUgZ2FwICovCisJCQluZXh0X3RvX2ZibG9jayA9ICpwdHJfdG9fZmJsb2NrOworCisJCS8qIG1vdmUgYmxvY2tzICovCisJCWZvciAoaSA9IDA7IGkgPCBzaXplOyAvKmkrKyovKSB7CisJCQlqID0gc2l6ZSAtIGk7IGogPSAoaiA8IGhmc3BfYmxvY2tfY291bnQpID8KKwkJCQkJICAgaiA6IGhmc3BfYmxvY2tfY291bnQgOworCisJCQlhYnNfc2VjdG9yID0gKFBlZFNlY3RvcikgKCpwdHJfZmJsb2NrICsgaSkgKiBibG9ja19zejsKKwkJCWlmICghcGVkX2dlb21ldHJ5X3JlYWQgKHByaXZfZGF0YS0+cGx1c19nZW9tLAorCQkJCQkJaGZzcF9ibG9jaywgYWJzX3NlY3RvciwKKwkJCQkJCWJsb2NrX3N6ICogaikpCisJCQkJcmV0dXJuIC0xOworCisJCQlhYnNfc2VjdG9yID0gKFBlZFNlY3RvcikgKHN0YXJ0ICsgaSkgKiBibG9ja19zejsKKwkJCWlmICghcGVkX2dlb21ldHJ5X3dyaXRlIChwcml2X2RhdGEtPnBsdXNfZ2VvbSwKKwkJCQkJCSBoZnNwX2Jsb2NrLCBhYnNfc2VjdG9yLAorCQkJCQkJIGJsb2NrX3N6ICogaikpCisJCQkJcmV0dXJuIC0xOworCisJCQlmb3IgKGFpID0gaStqOyBpIDwgYWk7IGkrKykgeworCQkJCS8qIGZyZWUgc291cmNlIGJsb2NrICovCisJCQkJYmxvY2sgPSAqcHRyX2ZibG9jayArIGk7CisJCQkJQ0xSX0JMT0NfT0NDVVBBVElPTihwcml2X2RhdGEtPmFsbG9jX21hcCxibG9jayk7CisJCQkJU0VUX0JMT0NfT0NDVVBBVElPTihwcml2X2RhdGEtPmRpcnR5X2FsbG9jX21hcCwKKwkJCQkJCSAgICBibG9jay8oUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQqOCkpOworCisJCQkJLyogc2V0IGRlc3QgYmxvY2sgKi8KKwkJCQlibG9jayA9IHN0YXJ0ICsgaTsKKwkJCQlTRVRfQkxPQ19PQ0NVUEFUSU9OKHByaXZfZGF0YS0+YWxsb2NfbWFwLGJsb2NrKTsKKwkJCQlTRVRfQkxPQ19PQ0NVUEFUSU9OKHByaXZfZGF0YS0+ZGlydHlfYWxsb2NfbWFwLAorCQkJCQkJICAgIGJsb2NrLyhQRURfU0VDVE9SX1NJWkVfREVGQVVMVCo4KSk7CisJCQl9CisJCX0KKwkJaWYgKCFwZWRfZ2VvbWV0cnlfc3luY19mYXN0IChwcml2X2RhdGEtPnBsdXNfZ2VvbSkpCisJCQlyZXR1cm4gLTE7CisKKwkJKnB0cl9mYmxvY2sgKz0gc2l6ZTsKKwkJKnB0cl90b19mYmxvY2sgPSBuZXh0X3RvX2ZibG9jazsKKwl9IGVsc2UgeworCQlpZiAoKnB0cl9mYmxvY2sgIT0gKnB0cl90b19mYmxvY2spCisJCQkvKiBub3QgZW5vdWdoIHJvb20gKi8KKwkJCXBlZF9leGNlcHRpb25fdGhyb3cgKFBFRF9FWENFUFRJT05fV0FSTklORywKKwkJCSAgICAgIFBFRF9FWENFUFRJT05fSUdOT1JFLAorCQkJICAgICAgXygiQW4gZXh0ZW50IGhhcyBub3QgYmVlbiByZWxvY2F0ZWQuIikpOworCQlzdGFydCA9ICpwdHJfZmJsb2NrOworCQkqcHRyX2ZibG9jayA9ICpwdHJfdG9fZmJsb2NrID0gc3RhcnQgKyBzaXplOworCX0KKworCXJldHVybiBzdGFydDsKK30KKworLyogUmV0dXJucyAwIG9uIGVycm9yICovCisvKiAgICAgICAgIDEgb24gc3VjY2VzICovCitpbnQKK2hmc3BsdXNfdXBkYXRlX3ZoIChQZWRGaWxlU3lzdGVtICpmcykKK3sKKwlIZnNQUHJpdmF0ZUZTRGF0YSogCXByaXZfZGF0YSA9IChIZnNQUHJpdmF0ZUZTRGF0YSopCisJCQkJCQlmcy0+dHlwZV9zcGVjaWZpYzsKKwl1aW50OF90CQkJbm9kZVtQRURfU0VDVE9SX1NJWkVfREVGQVVMVF07CisKKyAgICAJaWYgKCFwZWRfZ2VvbWV0cnlfcmVhZCAocHJpdl9kYXRhLT5wbHVzX2dlb20sIG5vZGUsIDIsIDEpKQorCQlyZXR1cm4gMDsKKwltZW1jcHkgKG5vZGUsIHByaXZfZGF0YS0+dmgsIHNpemVvZiAoSGZzUFZvbHVtZUhlYWRlcikpOworCWlmICghcGVkX2dlb21ldHJ5X3dyaXRlIChwcml2X2RhdGEtPnBsdXNfZ2VvbSwgbm9kZSwgMiwgMSkKKwkgICAgfHwgIXBlZF9nZW9tZXRyeV93cml0ZSAocHJpdl9kYXRhLT5wbHVzX2dlb20sIG5vZGUsCisJCQkJIHByaXZfZGF0YS0+cGx1c19nZW9tLT5sZW5ndGggLSAyLCAxKQorCSAgICB8fCAhcGVkX2dlb21ldHJ5X3N5bmNfZmFzdCAocHJpdl9kYXRhLT5wbHVzX2dlb20pKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludAoraGZzcGx1c19kb19tb3ZlIChQZWRGaWxlU3lzdGVtKiBmcywgdW5zaWduZWQgaW50ICpwdHJfc3JjLAorCQkgdW5zaWduZWQgaW50ICpwdHJfZGVzdCwgSGZzQ1ByaXZhdGVDYWNoZSogY2FjaGUsCisJCSBIZnNDUHJpdmF0ZUV4dGVudCogcmVmKQoreworCUhmc1BQcml2YXRlRlNEYXRhKglwcml2X2RhdGEgPSAoSGZzUFByaXZhdGVGU0RhdGEqKQorCQkJCQkJZnMtPnR5cGVfc3BlY2lmaWM7CisJSGZzUFByaXZhdGVGaWxlKglmaWxlOworCUhmc1BFeHREZXNjcmlwdG9yKglleHRlbnQ7CisJSGZzQ1ByaXZhdGVFeHRlbnQqCW1vdmU7CisJaW50CQkJbmV3X3N0YXJ0OworCisJbmV3X3N0YXJ0ID0gaGZzcGx1c19lZmZlY3RfbW92ZV9leHRlbnQgKGZzLCBwdHJfc3JjLCBwdHJfZGVzdCwKKwkJCQkJCXJlZi0+ZXh0X2xlbmd0aCk7CisKKwlpZiAobmV3X3N0YXJ0ID09IC0xKSByZXR1cm4gLTE7CisJCisJaWYgKHJlZi0+ZXh0X3N0YXJ0ICE9ICh1bnNpZ25lZCkgbmV3X3N0YXJ0KSB7CisJCXN3aXRjaCAocmVmLT53aGVyZSkgeworCQkvKioqKioqKioqKioqIFZIICoqKioqKioqKioqKi8KKwkJICAgIGNhc2UgQ1JfUFJJTV9DQVQgOgorCQkJcHJpdl9kYXRhLT5jYXRhbG9nX2ZpbGUKKwkJCS0+Zmlyc3RbcmVmLT5yZWZfaW5kZXhdLnN0YXJ0X2Jsb2NrID0gCisJCQkJUEVEX0NQVV9UT19CRTMyKG5ld19zdGFydCk7CisJCQlnb3RvIENSX1BSSU07CisJCSAgICBjYXNlIENSX1BSSU1fRVhUIDoKKwkJCXByaXZfZGF0YS0+ZXh0ZW50c19maWxlCisJCQktPmZpcnN0W3JlZi0+cmVmX2luZGV4XS5zdGFydF9ibG9jayA9CisJCQkJUEVEX0NQVV9UT19CRTMyKG5ld19zdGFydCk7CisJCQlnb3RvIENSX1BSSU07CisJCSAgICBjYXNlIENSX1BSSU1fQVRUUiA6CisJCQlwcml2X2RhdGEtPmF0dHJpYnV0ZXNfZmlsZQorCQkJLT5maXJzdFtyZWYtPnJlZl9pbmRleF0uc3RhcnRfYmxvY2sgPQorCQkJCVBFRF9DUFVfVE9fQkUzMihuZXdfc3RhcnQpOworCQkJZ290byBDUl9QUklNOworCQkgICAgY2FzZSBDUl9QUklNX0FMTE9DIDoKKwkJCXByaXZfZGF0YS0+YWxsb2NhdGlvbl9maWxlCisJCQktPmZpcnN0W3JlZi0+cmVmX2luZGV4XS5zdGFydF9ibG9jayA9CisJCQkJUEVEX0NQVV9UT19CRTMyKG5ld19zdGFydCk7CisJCQlnb3RvIENSX1BSSU07CisJCSAgICBjYXNlIENSX1BSSU1fU1RBUlQgOgorCQkJLyogTm8gc3RhcnR1cCBmaWxlIG9wZW5lZCAqLworCQkgICAgQ1JfUFJJTSA6CisJCQlleHRlbnQgPSAoIEhmc1BFeHREZXNjcmlwdG9yKiApCisJCQkJICggKHVpbnQ4X3QqKXByaXZfZGF0YS0+dmggKyByZWYtPnJlZl9vZmZzZXQgKTsKKwkJCWV4dGVudFtyZWYtPnJlZl9pbmRleF0uc3RhcnRfYmxvY2sgPQorCQkJCVBFRF9DUFVfVE9fQkUzMihuZXdfc3RhcnQpOworCQkJaWYgKCFoZnNwbHVzX3VwZGF0ZV92aChmcykpCisJCQkJcmV0dXJuIC0xOworCQkJYnJlYWs7CisKKwkJLyoqKioqKioqKioqKioqIEJUUkVFICoqKioqKioqKioqKiovCisJCSAgICBjYXNlIENSX0JUUkVFX0NBVF9KSUIgOgorCQkJaWYgKCFoZnNqX3VwZGF0ZV9qaWIoZnMsIG5ld19zdGFydCkpCisJCQkJcmV0dXJuIC0xOworCQkJZ290byBCVFJFRV9DQVQ7CisKKwkJICAgIGNhc2UgQ1JfQlRSRUVfQ0FUX0pMIDoKKwkJCWlmICghaGZzal91cGRhdGVfamwoZnMsIG5ld19zdGFydCkpCisJCQkJcmV0dXJuIC0xOworCQkJZ290byBCVFJFRV9DQVQ7CisKKwkJICAgIEJUUkVFX0NBVDoKKwkJICAgIGNhc2UgQ1JfQlRSRUVfQ0FUIDoKKwkJCWZpbGUgPSBwcml2X2RhdGEtPmNhdGFsb2dfZmlsZTsKKwkJCWdvdG8gQ1JfQlRSRUU7CisKKwkJICAgIGNhc2UgQ1JfQlRSRUVfQVRUUiA6CisJCQlmaWxlID0gcHJpdl9kYXRhLT5hdHRyaWJ1dGVzX2ZpbGU7CisJCQlnb3RvIENSX0JUUkVFOworCisJCSAgICBjYXNlIENSX0JUUkVFX0VYVF9BVFRSIDoKKwkJCWlmIChwcml2X2RhdGEtPmF0dHJpYnV0ZXNfZmlsZQorCQkJICAgIC0+Y2FjaGVbcmVmLT5yZWZfaW5kZXhdLnN0YXJ0X2Jsb2NrCisJCQkgICAgPT0gUEVEX0NQVV9UT19CRTMyKHJlZi0+ZXh0X3N0YXJ0KSkKKwkJCQlwcml2X2RhdGEtPmF0dHJpYnV0ZXNfZmlsZQorCQkJCS0+Y2FjaGVbcmVmLT5yZWZfaW5kZXhdLnN0YXJ0X2Jsb2NrID0KKwkJCQlQRURfQ1BVX1RPX0JFMzIobmV3X3N0YXJ0KTsKKwkJCWdvdG8gQ1JfQlRSRUVfRVhUOworCQkgICAgY2FzZSBDUl9CVFJFRV9FWFRfQ0FUIDoKKwkJCWlmIChwcml2X2RhdGEtPmNhdGFsb2dfZmlsZQorCQkJICAgIC0+Y2FjaGVbcmVmLT5yZWZfaW5kZXhdLnN0YXJ0X2Jsb2NrCisJCQkgICAgPT0gUEVEX0NQVV9UT19CRTMyKHJlZi0+ZXh0X3N0YXJ0KSkKKwkJCQlwcml2X2RhdGEtPmNhdGFsb2dfZmlsZQorCQkJCS0+Y2FjaGVbcmVmLT5yZWZfaW5kZXhdLnN0YXJ0X2Jsb2NrID0KKwkJCQlQRURfQ1BVX1RPX0JFMzIobmV3X3N0YXJ0KTsKKwkJCWdvdG8gQ1JfQlRSRUVfRVhUOworCQkgICAgY2FzZSBDUl9CVFJFRV9FWFRfQUxMT0MgOgorCQkJaWYgKHByaXZfZGF0YS0+YWxsb2NhdGlvbl9maWxlCisJCQkgICAgLT5jYWNoZVtyZWYtPnJlZl9pbmRleF0uc3RhcnRfYmxvY2sKKwkJCSAgICA9PSBQRURfQ1BVX1RPX0JFMzIocmVmLT5leHRfc3RhcnQpKQorCQkJCXByaXZfZGF0YS0+YWxsb2NhdGlvbl9maWxlCisJCQkJLT5jYWNoZVtyZWYtPnJlZl9pbmRleF0uc3RhcnRfYmxvY2sgPQorCQkJCVBFRF9DUFVfVE9fQkUzMihuZXdfc3RhcnQpOworCQkJZ290byBDUl9CVFJFRV9FWFQ7CisJCSAgICBjYXNlIENSX0JUUkVFX0VYVF9TVEFSVCA6CisJCSAgICAJLyogTm8gc3RhcnR1cCBmaWxlIG9wZW5lZCAqLworCQkgICAgQ1JfQlRSRUVfRVhUIDoKKwkJICAgIGNhc2UgQ1JfQlRSRUVfRVhUXzAgOgorCQkJZmlsZSA9IHByaXZfZGF0YS0+ZXh0ZW50c19maWxlOworCisJCSAgICBDUl9CVFJFRSA6CisJCQlQRURfQVNTRVJUKFBFRF9TRUNUT1JfU0laRV9ERUZBVUxUICogcmVmLT5zZWN0X2J5X2Jsb2NrCisJCQkJICAgPiByZWYtPnJlZl9vZmZzZXQsIHJldHVybiAtMSApOworCQkJaWYgKCFoZnNwbHVzX2ZpbGVfcmVhZChmaWxlLCBoZnNwX2Jsb2NrLCAKKwkJCQkoUGVkU2VjdG9yKXJlZi0+cmVmX2Jsb2NrICogcmVmLT5zZWN0X2J5X2Jsb2NrLAorCQkJCXJlZi0+c2VjdF9ieV9ibG9jaykpCisJCQkJcmV0dXJuIC0xOworCQkJZXh0ZW50ID0gKCBIZnNQRXh0RGVzY3JpcHRvciogKQorCQkJCSggaGZzcF9ibG9jayArIHJlZi0+cmVmX29mZnNldCApOworCQkJZXh0ZW50W3JlZi0+cmVmX2luZGV4XS5zdGFydF9ibG9jayA9CisJCQkJUEVEX0NQVV9UT19CRTMyKG5ld19zdGFydCk7CisJCQlpZiAoIWhmc3BsdXNfZmlsZV93cml0ZShmaWxlLCBoZnNwX2Jsb2NrLAorCQkJCShQZWRTZWN0b3IpcmVmLT5yZWZfYmxvY2sgKiByZWYtPnNlY3RfYnlfYmxvY2ssCisJCQkJcmVmLT5zZWN0X2J5X2Jsb2NrKQorCQkJICAgIHx8ICFwZWRfZ2VvbWV0cnlfc3luY19mYXN0IChwcml2X2RhdGEtPnBsdXNfZ2VvbSkpCisJCQkJcmV0dXJuIC0xOworCQkJYnJlYWs7CisKKwkJICAgIC8qKioqKioqKioqIEJVRyAqKioqKioqKiovCisJCSAgICBkZWZhdWx0IDoKKwkJCXBlZF9leGNlcHRpb25fdGhyb3cgKAorCQkJCVBFRF9FWENFUFRJT05fRVJST1IsCisJCQkJUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQkJXygiQSByZWZlcmVuY2UgdG8gYW4gZXh0ZW50IGNvbWVzIGZyb20gYSBwbGFjZSAiCisJCQkJICAiaXQgc2hvdWxkIG5vdC4gIFlvdSBzaG91bGQgY2hlY2sgdGhlIGZpbGUgIgorCQkJCSAgInN5c3RlbSEiKSk7CisJCQlyZXR1cm4gLTE7CisJCQlicmVhazsKKwkJfQorCisJCW1vdmUgPSBoZnNjX2NhY2hlX21vdmVfZXh0ZW50KGNhY2hlLCByZWYtPmV4dF9zdGFydCwgbmV3X3N0YXJ0KTsKKwkJaWYgKCFtb3ZlKSByZXR1cm4gLTE7CisJCVBFRF9BU1NFUlQobW92ZSA9PSByZWYsIHJldHVybiAtMSk7CisJfQorCisJcmV0dXJuIG5ld19zdGFydDsKK30KKworLyogc2F2ZSBhbnkgZGlydHkgc2VjdG9yIG9mIHRoZSBhbGxvY2F0aW9uIGJpdG1hcCBmaWxlICovCitzdGF0aWMgaW50CitoZnNwbHVzX3NhdmVfYWxsb2NhdGlvbihQZWRGaWxlU3lzdGVtICpmcykKK3sKKwlIZnNQUHJpdmF0ZUZTRGF0YSoJcHJpdl9kYXRhID0gKEhmc1BQcml2YXRlRlNEYXRhKikKKwkJCQkJCWZzLT50eXBlX3NwZWNpZmljOworCXVuc2lnbmVkIGludAkJbWFwX3NlY3RvcnMsIGksIGo7CisJaW50CQkJcmV0ID0gMTsKKworCW1hcF9zZWN0b3JzID0gKCBQRURfQkUzMl9UT19DUFUgKHByaXZfZGF0YS0+dmgtPnRvdGFsX2Jsb2NrcykgCisJCQkrIFBFRF9TRUNUT1JfU0laRV9ERUZBVUxUICogOCAtIDEgKSAvIChQRURfU0VDVE9SX1NJWkVfREVGQVVMVCAqIDgpOworCisJZm9yIChpID0gMDsgaSA8IG1hcF9zZWN0b3JzOykgeworCQlmb3IgKGogPSBpOyAKKwkJICAgICAoVFNUX0JMT0NfT0NDVVBBVElPTihwcml2X2RhdGEtPmRpcnR5X2FsbG9jX21hcCxqKSk7CisJCSAgICAgKytqKQorCQkJQ0xSX0JMT0NfT0NDVVBBVElPTihwcml2X2RhdGEtPmRpcnR5X2FsbG9jX21hcCxqKTsKKwkJaWYgKGotaSkgeworCQkJcmV0ID0gaGZzcGx1c19maWxlX3dyaXRlKHByaXZfZGF0YS0+YWxsb2NhdGlvbl9maWxlLAorCQkJCSAgICBwcml2X2RhdGEtPmFsbG9jX21hcCArIGkgKiBQRURfU0VDVE9SX1NJWkVfREVGQVVMVCwKKwkJCQkgICAgaSwgai1pKSAmJiByZXQ7CisJCQlpID0gajsKKwkJfSBlbHNlCisJCQkrK2k7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyogVGhpcyBmdW5jdGlvbiBtb3ZlcyBhbiBleHRlbnQgc3RhcnRpbmcgYXQgYmxvY2sgZmJsb2NrCisgICB0byBibG9jayB0b19mYmxvY2sgaWYgdGhlcmUncyBlbm91Z2ggcm9vbSAqLworLyogUmV0dXJuIDEgaWYgZXZlcnl0aGluZyB3YXMgZmluZSAqLworLyogUmV0dXJuIC0xIGlmIGFuIGVycm9yIG9jY3VycmVkICovCisvKiBSZXR1cm4gMCBpZiBubyBleHRlbnQgd2FzIGZvdW5kICovCitzdGF0aWMgaW50CitoZnNwbHVzX21vdmVfZXh0ZW50X3N0YXJ0aW5nX2F0IChQZWRGaWxlU3lzdGVtICpmcywgdW5zaWduZWQgaW50ICpwdHJfZmJsb2NrLAorCQkJCSB1bnNpZ25lZCBpbnQgKnB0cl90b19mYmxvY2ssCisJCQkJIEhmc0NQcml2YXRlQ2FjaGUqIGNhY2hlKQoreworCUhmc0NQcml2YXRlRXh0ZW50KglyZWY7CisJdW5zaWduZWQgaW50CQlvbGRfc3RhcnQsIG5ld19zdGFydDsKKworCXJlZiA9IGhmc2NfY2FjaGVfc2VhcmNoX2V4dGVudChjYWNoZSwgKnB0cl9mYmxvY2spOworCWlmICghcmVmKSByZXR1cm4gMDsKKworCW9sZF9zdGFydCA9ICpwdHJfZmJsb2NrOworCW5ld19zdGFydCA9IGhmc3BsdXNfZG9fbW92ZShmcywgcHRyX2ZibG9jaywgcHRyX3RvX2ZibG9jaywgY2FjaGUsIHJlZik7CisJaWYgKG5ld19zdGFydCA9PSAodW5zaWduZWQpLTEpIHJldHVybiAtMTsKKwlpZiAobmV3X3N0YXJ0ID4gb2xkX3N0YXJ0KSB7CisJCW5ld19zdGFydCA9IGhmc3BsdXNfZG9fbW92ZShmcywgJm5ld19zdGFydCwgcHRyX3RvX2ZibG9jaywKKwkJCQkJICAgIGNhY2hlLCByZWYpOworCQlpZiAobmV3X3N0YXJ0ID09ICh1bnNpZ25lZCktMSB8fCBuZXdfc3RhcnQgPiBvbGRfc3RhcnQpCisJCQlyZXR1cm4gLTE7CisJfQorCisJaGZzcGx1c19zYXZlX2FsbG9jYXRpb24oZnMpOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50CitoZnNwbHVzX2NhY2hlX2Zyb21fdmgoSGZzQ1ByaXZhdGVDYWNoZSogY2FjaGUsIFBlZEZpbGVTeXN0ZW0qIGZzLAorCQkgICAgICBQZWRUaW1lciogdGltZXIpCit7CisJSGZzUFByaXZhdGVGU0RhdGEqIAlwcml2X2RhdGEgPSAoSGZzUFByaXZhdGVGU0RhdGEqKQorCQkJCQkJZnMtPnR5cGVfc3BlY2lmaWM7CisJSGZzUEV4dERlc2NyaXB0b3IqCWV4dGVudDsKKwl1bnNpZ25lZCBpbnQJCWo7CisKKwlleHRlbnQgPSBwcml2X2RhdGEtPnZoLT5hbGxvY2F0aW9uX2ZpbGUuZXh0ZW50czsKKwlmb3IgKGogPSAwOyBqIDwgSEZTUF9FWFRfTkI7ICsraikgeworCQlpZiAoIWV4dGVudFtqXS5ibG9ja19jb3VudCkgYnJlYWs7CisJCWlmICghaGZzY19jYWNoZV9hZGRfZXh0ZW50KAorCQkJY2FjaGUsCisJCQlQRURfQkUzMl9UT19DUFUoZXh0ZW50W2pdLnN0YXJ0X2Jsb2NrKSwKKwkJCVBFRF9CRTMyX1RPX0NQVShleHRlbnRbal0uYmxvY2tfY291bnQpLAorCQkJMCwgLyogdW51c2VkIGZvciB2aCAqLworCQkJKCh1aW50OF90KilleHRlbnQpIC0gKCh1aW50OF90Kilwcml2X2RhdGEtPnZoKSwKKwkJCTEsIC8qIGxvYWQgLyBzYXZlIDEgc2VjdG9yICovCisJCQlDUl9QUklNX0FMTE9DLAorCQkJaiApCisJCSAgICkKKwkJCXJldHVybiAwOworCX0KKworCWV4dGVudCA9IHByaXZfZGF0YS0+dmgtPmV4dGVudHNfZmlsZS5leHRlbnRzOworCWZvciAoaiA9IDA7IGogPCBIRlNQX0VYVF9OQjsgKytqKSB7CisJCWlmICghZXh0ZW50W2pdLmJsb2NrX2NvdW50KSBicmVhazsKKwkJaWYgKCFoZnNjX2NhY2hlX2FkZF9leHRlbnQoCisJCQljYWNoZSwKKwkJCVBFRF9CRTMyX1RPX0NQVShleHRlbnRbal0uc3RhcnRfYmxvY2spLAorCQkJUEVEX0JFMzJfVE9fQ1BVKGV4dGVudFtqXS5ibG9ja19jb3VudCksCisJCQkwLCAvKiB1bnVzZWQgZm9yIHZoICovCisJCQkoKHVpbnQ4X3QqKWV4dGVudCkgLSAoKHVpbnQ4X3QqKXByaXZfZGF0YS0+dmgpLAorCQkJMSwgLyogbG9hZCAvIHNhdmUgMSBzZWN0b3IgKi8KKwkJCUNSX1BSSU1fRVhULAorCQkJaiApCisJCSAgICkKKwkJCXJldHVybiAwOworCX0KKworCWV4dGVudCA9IHByaXZfZGF0YS0+dmgtPmNhdGFsb2dfZmlsZS5leHRlbnRzOworCWZvciAoaiA9IDA7IGogPCBIRlNQX0VYVF9OQjsgKytqKSB7CisJCWlmICghZXh0ZW50W2pdLmJsb2NrX2NvdW50KSBicmVhazsKKwkJaWYgKCFoZnNjX2NhY2hlX2FkZF9leHRlbnQoCisJCQljYWNoZSwKKwkJCVBFRF9CRTMyX1RPX0NQVShleHRlbnRbal0uc3RhcnRfYmxvY2spLAorCQkJUEVEX0JFMzJfVE9fQ1BVKGV4dGVudFtqXS5ibG9ja19jb3VudCksCisJCQkwLCAvKiB1bnVzZWQgZm9yIHZoICovCisJCQkoKHVpbnQ4X3QqKWV4dGVudCkgLSAoKHVpbnQ4X3QqKXByaXZfZGF0YS0+dmgpLAorCQkJMSwgLyogbG9hZCAvIHNhdmUgMSBzZWN0b3IgKi8KKwkJCUNSX1BSSU1fQ0FULAorCQkJaiApCisJCSAgICkKKwkJCXJldHVybiAwOworCX0KKworCWV4dGVudCA9IHByaXZfZGF0YS0+dmgtPmF0dHJpYnV0ZXNfZmlsZS5leHRlbnRzOworCWZvciAoaiA9IDA7IGogPCBIRlNQX0VYVF9OQjsgKytqKSB7CisJCWlmICghZXh0ZW50W2pdLmJsb2NrX2NvdW50KSBicmVhazsKKwkJaWYgKCFoZnNjX2NhY2hlX2FkZF9leHRlbnQoCisJCQljYWNoZSwKKwkJCVBFRF9CRTMyX1RPX0NQVShleHRlbnRbal0uc3RhcnRfYmxvY2spLAorCQkJUEVEX0JFMzJfVE9fQ1BVKGV4dGVudFtqXS5ibG9ja19jb3VudCksCisJCQkwLCAvKiB1bnVzZWQgZm9yIHZoICovCisJCQkoKHVpbnQ4X3QqKWV4dGVudCkgLSAoKHVpbnQ4X3QqKXByaXZfZGF0YS0+dmgpLAorCQkJMSwgLyogbG9hZCAvIHNhdmUgMSBzZWN0b3IgKi8KKwkJCUNSX1BSSU1fQVRUUiwKKwkJCWogKQorCQkgICApCisJCQlyZXR1cm4gMDsKKwl9CisKKwlleHRlbnQgPSBwcml2X2RhdGEtPnZoLT5zdGFydHVwX2ZpbGUuZXh0ZW50czsKKwlmb3IgKGogPSAwOyBqIDwgSEZTUF9FWFRfTkI7ICsraikgeworCQlpZiAoIWV4dGVudFtqXS5ibG9ja19jb3VudCkgYnJlYWs7CisJCWlmICghaGZzY19jYWNoZV9hZGRfZXh0ZW50KAorCQkJY2FjaGUsCisJCQlQRURfQkUzMl9UT19DUFUoZXh0ZW50W2pdLnN0YXJ0X2Jsb2NrKSwKKwkJCVBFRF9CRTMyX1RPX0NQVShleHRlbnRbal0uYmxvY2tfY291bnQpLAorCQkJMCwgLyogdW51c2VkIGZvciB2aCAqLworCQkJKCh1aW50OF90KilleHRlbnQpIC0gKCh1aW50OF90Kilwcml2X2RhdGEtPnZoKSwKKwkJCTEsIC8qIGxvYWQgLyBzYXZlIDEgc2VjdG9yICovCisJCQlDUl9QUklNX1NUQVJULAorCQkJaiApCisJCSAgICkKKwkJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50CitoZnNwbHVzX2NhY2hlX2Zyb21fY2F0YWxvZyhIZnNDUHJpdmF0ZUNhY2hlKiBjYWNoZSwgUGVkRmlsZVN5c3RlbSogZnMsCisJCQkgICBQZWRUaW1lciogdGltZXIpCit7CisJSGZzUFByaXZhdGVGU0RhdGEqIAlwcml2X2RhdGEgPSAoSGZzUFByaXZhdGVGU0RhdGEqKQorCQkJCQkJZnMtPnR5cGVfc3BlY2lmaWM7CisJdWludDhfdAkJCW5vZGVfMVtQRURfU0VDVE9SX1NJWkVfREVGQVVMVF07CisJdWludDhfdCoJCW5vZGU7CisJSGZzUEhlYWRlclJlY29yZCoJaGVhZGVyOworCUhmc1BOb2RlRGVzY3JpcHRvcioJZGVzYyA9IChIZnNQTm9kZURlc2NyaXB0b3IqKSBub2RlXzE7CisJSGZzUENhdGFsb2dLZXkqCQljYXRhbG9nX2tleTsKKwlIZnNQQ2F0YWxvZyoJCWNhdGFsb2dfZGF0YTsKKwlIZnNQRXh0RGVzY3JpcHRvcioJZXh0ZW50OworCXVuc2lnbmVkIGludAkJbGVhZl9ub2RlLCByZWNvcmRfbnVtYmVyOworCXVuc2lnbmVkIGludAkJaSwgaiwgc2l6ZSwgYnNpemU7CisJdWludDMyX3QJCWppYiA9IHByaXZfZGF0YS0+amliX3N0YXJ0X2Jsb2NrLAorCQkJCWpsICA9IHByaXZfZGF0YS0+amxfc3RhcnRfYmxvY2s7CisKKwlpZiAoIXByaXZfZGF0YS0+Y2F0YWxvZ19maWxlLT5zZWN0X25iKSB7CisJCXBlZF9leGNlcHRpb25fdGhyb3cgKAorCQkJUEVEX0VYQ0VQVElPTl9JTkZPUk1BVElPTiwKKwkJCVBFRF9FWENFUFRJT05fT0ssCisJCQlfKCJUaGlzIEhGUysgdm9sdW1lIGhhcyBubyBjYXRhbG9nIGZpbGUuICAiCisJCQkgICJUaGlzIGlzIHZlcnkgdW51c3VhbCEiKSk7CisJCXJldHVybiAxOworCX0KKworCS8qIFNlYXJjaCB0aGUgZXh0ZW50IHN0YXJ0aW5nIGF0ICpwdHJfYmxvY2sgaW4gdGhlIGNhdGFsb2cgZmlsZSAqLworCWlmICghaGZzcGx1c19maWxlX3JlYWRfc2VjdG9yIChwcml2X2RhdGEtPmNhdGFsb2dfZmlsZSwgbm9kZV8xLCAwKSkKKwkJcmV0dXJuIDA7CisJaGVhZGVyID0gKEhmc1BIZWFkZXJSZWNvcmQqKSAobm9kZV8xICsgSEZTX0ZJUlNUX1JFQyk7CisJbGVhZl9ub2RlID0gUEVEX0JFMzJfVE9fQ1BVIChoZWFkZXItPmZpcnN0X2xlYWZfbm9kZSk7CisJYnNpemUgPSBQRURfQkUxNl9UT19DUFUgKGhlYWRlci0+bm9kZV9zaXplKTsKKwlzaXplID0gYnNpemUgLyBQRURfU0VDVE9SX1NJWkVfREVGQVVMVDsKKwlQRURfQVNTRVJUKHNpemUgPCAyNTYsIHJldHVybiAwKTsKKworCW5vZGUgPSAodWludDhfdCopIHBlZF9tYWxsb2MoYnNpemUpOworCWlmICghbm9kZSkgcmV0dXJuIDA7CisJZGVzYyA9IChIZnNQTm9kZURlc2NyaXB0b3IqKSBub2RlOworCisJZm9yICg7IGxlYWZfbm9kZTsgbGVhZl9ub2RlID0gUEVEX0JFMzJfVE9fQ1BVIChkZXNjLT5uZXh0KSkgeworCQlpZiAoIWhmc3BsdXNfZmlsZV9yZWFkIChwcml2X2RhdGEtPmNhdGFsb2dfZmlsZSwgbm9kZSwKKwkJCQkJKFBlZFNlY3RvcikgbGVhZl9ub2RlICogc2l6ZSwgc2l6ZSkpIHsKKwkJCXBlZF9mcmVlIChub2RlKTsKKwkJCXJldHVybiAwOworCQl9CisJCXJlY29yZF9udW1iZXIgPSBQRURfQkUxNl9UT19DUFUgKGRlc2MtPnJlY19uYik7CisJCWZvciAoaSA9IDE7IGkgPD0gcmVjb3JkX251bWJlcjsgaSsrKSB7CisJCQl1bnNpZ25lZCBpbnQJc2tpcDsKKwkJCXVpbnQ4X3QJCXdoZXJlOworCisJCQljYXRhbG9nX2tleSA9IChIZnNQQ2F0YWxvZ0tleSopCisJCQkgICAgKCBub2RlICsgUEVEX0JFMTZfVE9fQ1BVICgqKCh1aW50MTZfdCAqKQorCQkJCQkobm9kZSsoYnNpemUgLSAyKmkpKSkpICk7CisJCQlza2lwID0gKCAyICsgUEVEX0JFMTZfVE9fQ1BVIChjYXRhbG9nX2tleS0+a2V5X2xlbmd0aCkKKwkJCQkgKyAxKSAmIH4xOworCQkJY2F0YWxvZ19kYXRhID0gKEhmc1BDYXRhbG9nKikKKwkJCQkJICAgICgoKHVpbnQ4X3QqKWNhdGFsb2dfa2V5KSArIHNraXApOworCQkJLyogY2hlY2sgZm9yIG9idmlvdXMgZXJyb3IgaW4gRlMgKi8KKwkJCWlmICgoKHVpbnQ4X3QqKWNhdGFsb2dfa2V5IC0gbm9kZSA8IEhGU19GSVJTVF9SRUMpCisJCQkgICAgfHwgKCh1aW50OF90KiljYXRhbG9nX2RhdGEgLSBub2RlCisJCQkgICAgICAgID49IChzaWduZWQpIGJzaXplCisJCQkJICAgLSAyICogKHNpZ25lZCkocmVjb3JkX251bWJlcisxKSkpIHsKKwkJCQlwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCQkJUEVEX0VYQ0VQVElPTl9FUlJPUiwKKwkJCQkJUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQkJCV8oIlRoZSBmaWxlIHN5c3RlbSBjb250YWlucyBlcnJvcnMuIikpOworCQkJCXBlZF9mcmVlIChub2RlKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKworCQkJaWYgKFBFRF9CRTE2X1RPX0NQVShjYXRhbG9nX2RhdGEtPnR5cGUpIT1IRlNfQ0FUX0ZJTEUpCisJCQkJY29udGludWU7CisKKwkJCWV4dGVudCA9IGNhdGFsb2dfZGF0YS0+c2VsLmZpbGUuZGF0YV9mb3JrLmV4dGVudHM7CisJCQlmb3IgKGogPSAwOyBqIDwgSEZTUF9FWFRfTkI7ICsraikgeworCQkJCWlmICghZXh0ZW50W2pdLmJsb2NrX2NvdW50KSBicmVhazsKKwkJCQl3aGVyZSA9IENSX0JUUkVFX0NBVDsKKwkJCQlpZiAoIFBFRF9CRTMyX1RPX0NQVShleHRlbnRbal0uc3RhcnRfYmxvY2spCisJCQkJICAgICA9PSBqaWIgKSB7CisJCQkJCWppYiA9IDA7CisJCQkJCXdoZXJlID0gQ1JfQlRSRUVfQ0FUX0pJQjsKKwkJCQl9IGVsc2UKKwkJCQkgIGlmICggUEVEX0JFMzJfVE9fQ1BVKGV4dGVudFtqXS5zdGFydF9ibG9jaykKKwkJCQkgICAgICAgPT0gamwgKSB7CisJCQkJCWpsID0gMDsKKwkJCQkJd2hlcmUgPSBDUl9CVFJFRV9DQVRfSkw7CisJCQkJfQorCQkJCWlmICghaGZzY19jYWNoZV9hZGRfZXh0ZW50KAorCQkJCQljYWNoZSwKKwkJCQkJUEVEX0JFMzJfVE9fQ1BVKGV4dGVudFtqXS5zdGFydF9ibG9jayksCisJCQkJCVBFRF9CRTMyX1RPX0NQVShleHRlbnRbal0uYmxvY2tfY291bnQpLAorCQkJCQlsZWFmX25vZGUsCisJCQkJCSh1aW50OF90KilleHRlbnQgLSBub2RlLAorCQkJCQlzaXplLAorCQkJCQl3aGVyZSwKKwkJCQkJaiApCisJCQkJICAgKSB7CisJCQkJCXBlZF9mcmVlIChub2RlKTsKKwkJCQkgCXJldHVybiAwOworCQkJCX0KKwkJCX0KKworCQkJZXh0ZW50ID0gY2F0YWxvZ19kYXRhLT5zZWwuZmlsZS5yZXNfZm9yay5leHRlbnRzOworCQkJZm9yIChqID0gMDsgaiA8IEhGU1BfRVhUX05COyArK2opIHsKKwkJCQlpZiAoIWV4dGVudFtqXS5ibG9ja19jb3VudCkgYnJlYWs7CisJCQkJaWYgKCFoZnNjX2NhY2hlX2FkZF9leHRlbnQoCisJCQkJCWNhY2hlLAorCQkJCQlQRURfQkUzMl9UT19DUFUoZXh0ZW50W2pdLnN0YXJ0X2Jsb2NrKSwKKwkJCQkJUEVEX0JFMzJfVE9fQ1BVKGV4dGVudFtqXS5ibG9ja19jb3VudCksCisJCQkJCWxlYWZfbm9kZSwKKwkJCQkJKHVpbnQ4X3QqKWV4dGVudCAtIG5vZGUsCisJCQkJCXNpemUsCisJCQkJCUNSX0JUUkVFX0NBVCwKKwkJCQkJaiApCisJCQkJICAgKSB7CisJCQkJCXBlZF9mcmVlIChub2RlKTsKKwkJCQkgCXJldHVybiAwOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCXBlZF9mcmVlIChub2RlKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludAoraGZzcGx1c19jYWNoZV9mcm9tX2V4dGVudChIZnNDUHJpdmF0ZUNhY2hlKiBjYWNoZSwgUGVkRmlsZVN5c3RlbSogZnMsCisJCQkgIFBlZFRpbWVyKiB0aW1lcikKK3sKKwlIZnNQUHJpdmF0ZUZTRGF0YSogCXByaXZfZGF0YSA9IChIZnNQUHJpdmF0ZUZTRGF0YSopCisJCQkJCQlmcy0+dHlwZV9zcGVjaWZpYzsKKwl1aW50OF90CQkJbm9kZV8xW1BFRF9TRUNUT1JfU0laRV9ERUZBVUxUXTsKKwl1aW50OF90KgkJbm9kZTsKKwlIZnNQSGVhZGVyUmVjb3JkKgloZWFkZXI7CisJSGZzUE5vZGVEZXNjcmlwdG9yKglkZXNjID0gKEhmc1BOb2RlRGVzY3JpcHRvciopIG5vZGVfMTsKKwlIZnNQRXh0ZW50S2V5KgkJZXh0ZW50X2tleTsKKwlIZnNQRXh0RGVzY3JpcHRvcioJZXh0ZW50OworCXVuc2lnbmVkIGludAkJbGVhZl9ub2RlLCByZWNvcmRfbnVtYmVyOworCXVuc2lnbmVkIGludAkJaSwgaiwgc2l6ZSwgYnNpemU7CisKKwlpZiAoIXByaXZfZGF0YS0+ZXh0ZW50c19maWxlLT5zZWN0X25iKSB7CisJCXBlZF9leGNlcHRpb25fdGhyb3cgKAorCQkJUEVEX0VYQ0VQVElPTl9JTkZPUk1BVElPTiwKKwkJCVBFRF9FWENFUFRJT05fT0ssCisJCQlfKCJUaGlzIEhGUysgdm9sdW1lIGhhcyBubyBleHRlbnRzIG92ZXJmbG93ICIKKwkJCSAgImZpbGUuICBUaGlzIGlzIHF1aXRlIHVudXN1YWwhIikpOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoIWhmc3BsdXNfZmlsZV9yZWFkX3NlY3RvciAocHJpdl9kYXRhLT5leHRlbnRzX2ZpbGUsIG5vZGVfMSwgMCkpCisJCXJldHVybiAwOworCWhlYWRlciA9ICgoSGZzUEhlYWRlclJlY29yZCopIChub2RlXzEgKyBIRlNfRklSU1RfUkVDKSk7CisJbGVhZl9ub2RlID0gUEVEX0JFMzJfVE9fQ1BVIChoZWFkZXItPmZpcnN0X2xlYWZfbm9kZSk7CisJYnNpemUgPSBQRURfQkUxNl9UT19DUFUgKGhlYWRlci0+bm9kZV9zaXplKTsKKwlzaXplID0gYnNpemUgLyBQRURfU0VDVE9SX1NJWkVfREVGQVVMVDsKKwlQRURfQVNTRVJUKHNpemUgPCAyNTYsIHJldHVybiAwKTsKKworCW5vZGUgPSAodWludDhfdCopIHBlZF9tYWxsb2MgKGJzaXplKTsKKwlpZiAoIW5vZGUpIHJldHVybiAtMTsKKwlkZXNjID0gKEhmc1BOb2RlRGVzY3JpcHRvciopIG5vZGU7CisKKwlmb3IgKDsgbGVhZl9ub2RlOyBsZWFmX25vZGUgPSBQRURfQkUzMl9UT19DUFUgKGRlc2MtPm5leHQpKSB7CisJCWlmICghaGZzcGx1c19maWxlX3JlYWQgKHByaXZfZGF0YS0+ZXh0ZW50c19maWxlLCBub2RlLAorCQkJCQkoUGVkU2VjdG9yKSBsZWFmX25vZGUgKiBzaXplLCBzaXplKSkgeworCQkJcGVkX2ZyZWUgKG5vZGUpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJcmVjb3JkX251bWJlciA9IFBFRF9CRTE2X1RPX0NQVSAoZGVzYy0+cmVjX25iKTsKKwkJZm9yIChpID0gMTsgaSA8PSByZWNvcmRfbnVtYmVyOyBpKyspIHsKKwkJCXVpbnQ4X3Qgd2hlcmU7CisJCQlleHRlbnRfa2V5ID0gKEhmc1BFeHRlbnRLZXkqKQorCQkJICAgIChub2RlICsgUEVEX0JFMTZfVE9fQ1BVKCooKHVpbnQxNl90ICopCisJCQkJCSAgICAobm9kZSsoYnNpemUgLSAyKmkpKSkpKTsKKwkJCWV4dGVudCA9IChIZnNQRXh0RGVzY3JpcHRvciopCisJCQkgICAgKCgodWludDhfdCopZXh0ZW50X2tleSkgKyBzaXplb2YgKEhmc1BFeHRlbnRLZXkpKTsKKwkJCS8qIGNoZWNrIGZvciBvYnZpb3VzIGVycm9yIGluIEZTICovCisJCQlpZiAoKCh1aW50OF90KilleHRlbnRfa2V5IC0gbm9kZSA8IEhGU19GSVJTVF9SRUMpCisJCQkgICAgfHwgKCh1aW50OF90KilleHRlbnQgLSBub2RlCisJCQkgICAgICAgID49IChzaWduZWQpYnNpemUKKwkJCQkgICAtIDIgKiAoc2lnbmVkKShyZWNvcmRfbnVtYmVyKzEpKSkgeworCQkJCXBlZF9leGNlcHRpb25fdGhyb3cgKAorCQkJCQlQRURfRVhDRVBUSU9OX0VSUk9SLAorCQkJCQlQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCQkJXygiVGhlIGZpbGUgc3lzdGVtIGNvbnRhaW5zIGVycm9ycy4iKSk7CisJCQkJcGVkX2ZyZWUgKG5vZGUpOworCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJCQorCQkJc3dpdGNoIChleHRlbnRfa2V5LT5maWxlX0lEKSB7CisJCQkgICAgY2FzZSBQRURfQ1BVX1RPX0JFMzIgKEhGU19YVEVOVF9JRCkgOgorCQkJCWlmIChwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCQkJUEVEX0VYQ0VQVElPTl9XQVJOSU5HLAorCQkJCQlQRURfRVhDRVBUSU9OX0lHTk9SRV9DQU5DRUwsCisJCQkJCV8oIlRoZSBleHRlbnRzIG92ZXJmbG93IGZpbGUgc2hvdWxkIG5vdCIKKwkJCQkJIiBjb250YWluIGl0cyBvd24gZXh0ZW50cyEgIFlvdSBzaG91bGQgIgorCQkJCQkiY2hlY2sgdGhlIGZpbGUgc3lzdGVtLiIpKQorCQkJCQkJIT0gUEVEX0VYQ0VQVElPTl9JR05PUkUpCisJCQkJCXJldHVybiAwOworCQkJCXdoZXJlID0gQ1JfQlRSRUVfRVhUX0VYVDsKKwkJCQlicmVhazsKKwkJCSAgICBjYXNlIFBFRF9DUFVfVE9fQkUzMiAoSEZTX0NBVEFMT0dfSUQpIDoKKwkJCQl3aGVyZSA9IENSX0JUUkVFX0VYVF9DQVQ7CisJCQkJYnJlYWs7CisJCQkgICAgY2FzZSBQRURfQ1BVX1RPX0JFMzIgKEhGU1BfQUxMT0NfSUQpIDoKKwkJCQl3aGVyZSA9IENSX0JUUkVFX0VYVF9BTExPQzsKKwkJCQlicmVhazsKKwkJCSAgICBjYXNlIFBFRF9DUFVfVE9fQkUzMiAoSEZTUF9TVEFSVFVQX0lEKSA6CisJCQkJd2hlcmUgPSBDUl9CVFJFRV9FWFRfU1RBUlQ7CisJCQkJYnJlYWs7CisJCQkgICAgY2FzZSBQRURfQ1BVX1RPX0JFMzIgKEhGU1BfQVRUUklCX0lEKSA6CisJCQkgICAgCXdoZXJlID0gQ1JfQlRSRUVfRVhUX0FUVFI7CisJCQkJYnJlYWs7CisJCQkgICAgZGVmYXVsdCA6CisJCQkgICAgCXdoZXJlID0gQ1JfQlRSRUVfRVhUXzA7CisJCQkJYnJlYWs7CisJCQl9CisJCQkKKwkJCWZvciAoaiA9IDA7IGogPCBIRlNQX0VYVF9OQjsgKytqKSB7CisJCQkJaWYgKCFleHRlbnRbal0uYmxvY2tfY291bnQpIGJyZWFrOworCQkJCWlmICghaGZzY19jYWNoZV9hZGRfZXh0ZW50KAorCQkJCQljYWNoZSwKKwkJCQkJUEVEX0JFMzJfVE9fQ1BVKGV4dGVudFtqXS5zdGFydF9ibG9jayksCisJCQkJCVBFRF9CRTMyX1RPX0NQVShleHRlbnRbal0uYmxvY2tfY291bnQpLAorCQkJCQlsZWFmX25vZGUsCisJCQkJCSh1aW50OF90KilleHRlbnQgLSBub2RlLAorCQkJCQlzaXplLAorCQkJCQl3aGVyZSwKKwkJCQkJaiApCisJCQkJICAgKSB7CisJCQkJCXBlZF9mcmVlIChub2RlKTsKKwkJCQkJcmV0dXJuIDA7CisJCQkJfQorCQkJfQorCQl9CisJfQorCQorCXBlZF9mcmVlIChub2RlKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludAoraGZzcGx1c19jYWNoZV9mcm9tX2F0dHJpYnV0ZXMoSGZzQ1ByaXZhdGVDYWNoZSogY2FjaGUsIFBlZEZpbGVTeXN0ZW0qIGZzLAorCQkJICAgICAgUGVkVGltZXIqIHRpbWVyKQoreworCUhmc1BQcml2YXRlRlNEYXRhKiAJcHJpdl9kYXRhID0gKEhmc1BQcml2YXRlRlNEYXRhKikKKwkJCQkJCWZzLT50eXBlX3NwZWNpZmljOworCXVpbnQ4X3QJCQlub2RlXzFbUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFRdOworCXVpbnQ4X3QqCQlub2RlOworCUhmc1BIZWFkZXJSZWNvcmQqCWhlYWRlcjsKKwlIZnNQTm9kZURlc2NyaXB0b3IqCWRlc2MgPSAoSGZzUE5vZGVEZXNjcmlwdG9yKikgbm9kZV8xOworCUhmc1BQcml2YXRlR2VuZXJpY0tleSoJZ2VuZXJpY19rZXk7CisJSGZzUEZvcmtEYXRhQXR0cioJZm9ya19leHRfZGF0YTsKKwlIZnNQRXh0RGVzY3JpcHRvcioJZXh0ZW50OworCXVuc2lnbmVkIGludAkJbGVhZl9ub2RlLCByZWNvcmRfbnVtYmVyOworCXVuc2lnbmVkIGludAkJaSwgaiwgc2l6ZSwgYnNpemU7CisKKwkvKiBhdHRyaWJ1dGVzIGZpbGUgaXMgZmFjdWx0YXRpdmUgKi8KKwlpZiAoIXByaXZfZGF0YS0+YXR0cmlidXRlc19maWxlLT5zZWN0X25iKQorCQlyZXR1cm4gMTsKKworCS8qIFNlYXJjaCB0aGUgZXh0ZW50IHN0YXJ0aW5nIGF0ICpwdHJfYmxvY2sgaW4gdGhlIGNhdGFsb2cgZmlsZSAqLworCWlmICghaGZzcGx1c19maWxlX3JlYWRfc2VjdG9yIChwcml2X2RhdGEtPmF0dHJpYnV0ZXNfZmlsZSwgbm9kZV8xLCAwKSkKKwkJcmV0dXJuIDA7CisJaGVhZGVyID0gKChIZnNQSGVhZGVyUmVjb3JkKikgKG5vZGVfMSArIEhGU19GSVJTVF9SRUMpKTsKKwlsZWFmX25vZGUgPSBQRURfQkUzMl9UT19DUFUgKGhlYWRlci0+Zmlyc3RfbGVhZl9ub2RlKTsKKwlic2l6ZSA9IFBFRF9CRTE2X1RPX0NQVSAoaGVhZGVyLT5ub2RlX3NpemUpOworCXNpemUgPSBic2l6ZSAvIFBFRF9TRUNUT1JfU0laRV9ERUZBVUxUOworCVBFRF9BU1NFUlQoc2l6ZSA8IDI1NiwgcmV0dXJuIDApOworCisJbm9kZSA9ICh1aW50OF90KikgcGVkX21hbGxvYyhic2l6ZSk7CisJaWYgKCFub2RlKSByZXR1cm4gMDsKKwlkZXNjID0gKEhmc1BOb2RlRGVzY3JpcHRvciopIG5vZGU7CisKKwlmb3IgKDsgbGVhZl9ub2RlOyBsZWFmX25vZGUgPSBQRURfQkUzMl9UT19DUFUgKGRlc2MtPm5leHQpKSB7CisJCWlmICghaGZzcGx1c19maWxlX3JlYWQgKHByaXZfZGF0YS0+YXR0cmlidXRlc19maWxlLCBub2RlLAorCQkJCQkoUGVkU2VjdG9yKSBsZWFmX25vZGUgKiBzaXplLCBzaXplKSkgeworCQkJcGVkX2ZyZWUgKG5vZGUpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJcmVjb3JkX251bWJlciA9IFBFRF9CRTE2X1RPX0NQVSAoZGVzYy0+cmVjX25iKTsKKwkJZm9yIChpID0gMTsgaSA8PSByZWNvcmRfbnVtYmVyOyBpKyspIHsKKwkJCXVuc2lnbmVkIGludAlza2lwOworCQkJZ2VuZXJpY19rZXkgPSAoSGZzUFByaXZhdGVHZW5lcmljS2V5KikKKwkJCQkobm9kZSArIFBFRF9CRTE2X1RPX0NQVSgqKCh1aW50MTZfdCAqKQorCQkJCQkgICAgKG5vZGUrKGJzaXplIC0gMippKSkpKSk7CisJCQlza2lwID0gKCAyICsgUEVEX0JFMTZfVE9fQ1BVIChnZW5lcmljX2tleS0+a2V5X2xlbmd0aCkKKwkJCSAgICAgICAgICsgMSApICYgfjE7CisJCQlmb3JrX2V4dF9kYXRhID0gKEhmc1BGb3JrRGF0YUF0dHIqKQorCQkJCQkgICAgKCgodWludDhfdCopZ2VuZXJpY19rZXkpICsgc2tpcCk7CisJCQkvKiBjaGVjayBmb3Igb2J2aW91cyBlcnJvciBpbiBGUyAqLworCQkJaWYgKCgodWludDhfdCopZ2VuZXJpY19rZXkgLSBub2RlIDwgSEZTX0ZJUlNUX1JFQykKKwkJCSAgICB8fCAoKHVpbnQ4X3QqKWZvcmtfZXh0X2RhdGEgLSBub2RlCisJCQkgICAgICAgID49IChzaWduZWQpIGJzaXplCisJCQkJICAgLSAyICogKHNpZ25lZCkocmVjb3JkX251bWJlcisxKSkpIHsKKwkJCQlwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCQkJUEVEX0VYQ0VQVElPTl9FUlJPUiwKKwkJCQkJUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQkJCV8oIlRoZSBmaWxlIHN5c3RlbSBjb250YWlucyBlcnJvcnMuIikpOworCQkJCXBlZF9mcmVlIChub2RlKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKworCQkJaWYgKGZvcmtfZXh0X2RhdGEtPnJlY29yZF90eXBlCisJCQkgICAgPT0gUEVEX0NQVV9UT19CRTMyICggSEZTUF9BVFRSX0ZPUksgKSApIHsKKwkJCQlleHRlbnQgPSBmb3JrX2V4dF9kYXRhLT5mb3JrX3Jlcy5mb3JrLmV4dGVudHM7CisJCQkJZm9yIChqID0gMDsgaiA8IEhGU1BfRVhUX05COyArK2opIHsKKwkJCQkJaWYgKCFleHRlbnRbal0uYmxvY2tfY291bnQpIGJyZWFrOworCQkJCQlpZiAoIWhmc2NfY2FjaGVfYWRkX2V4dGVudCgKKwkJCQkJCWNhY2hlLAorCQkJCQkJUEVEX0JFMzJfVE9fQ1BVICgKKwkJCQkJCQlleHRlbnRbal0uc3RhcnRfYmxvY2sgKSwKKwkJCQkJCVBFRF9CRTMyX1RPX0NQVSAoCisJCQkJCQkJZXh0ZW50W2pdLmJsb2NrX2NvdW50ICksCisJCQkJCQlsZWFmX25vZGUsCisJCQkJCQkodWludDhfdCopZXh0ZW50LW5vZGUsCisJCQkJCQlzaXplLAorCQkJCQkJQ1JfQlRSRUVfQVRUUiwKKwkJCQkJCWogKQorCQkJCQkgICApIHsKKwkJCQkJCXBlZF9mcmVlKG5vZGUpOworCQkJCQkJcmV0dXJuIDA7CisJCQkJCX0KKwkJCQl9CisJCQl9IGVsc2UgaWYgKGZvcmtfZXh0X2RhdGEtPnJlY29yZF90eXBlCisJCQkgICAgPT0gUEVEX0NQVV9UT19CRTMyICggSEZTUF9BVFRSX0VYVEVOVFMgKSApIHsKKwkJCQlleHRlbnQgPSBmb3JrX2V4dF9kYXRhLT5mb3JrX3Jlcy5leHRlbnRzOworCQkJCWZvciAoaiA9IDA7IGogPCBIRlNQX0VYVF9OQjsgKytqKSB7CisJCQkJCWlmICghZXh0ZW50W2pdLmJsb2NrX2NvdW50KSBicmVhazsKKwkJCQkJaWYgKCFoZnNjX2NhY2hlX2FkZF9leHRlbnQoCisJCQkJCQljYWNoZSwKKwkJCQkJCVBFRF9CRTMyX1RPX0NQVSAoCisJCQkJCQkJZXh0ZW50W2pdLnN0YXJ0X2Jsb2NrICksCisJCQkJCQlQRURfQkUzMl9UT19DUFUgKAorCQkJCQkJCWV4dGVudFtqXS5ibG9ja19jb3VudCApLAorCQkJCQkJbGVhZl9ub2RlLAorCQkJCQkJKHVpbnQ4X3QqKWV4dGVudC1ub2RlLAorCQkJCQkJc2l6ZSwKKwkJCQkJCUNSX0JUUkVFX0FUVFIsCisJCQkJCQlqICkKKwkJCQkJICAgKSB7CisJCQkJCQlwZWRfZnJlZShub2RlKTsKKwkJCQkJCXJldHVybiAwOworCQkJCQl9CisJCQkJfQorCQkJfSBlbHNlIGNvbnRpbnVlOworCQl9CisJfQorCisJcGVkX2ZyZWUgKG5vZGUpOworCXJldHVybiAxOworfQorCitzdGF0aWMgSGZzQ1ByaXZhdGVDYWNoZSoKK2hmc3BsdXNfY2FjaGVfZXh0ZW50cyhQZWRGaWxlU3lzdGVtKiBmcywgUGVkVGltZXIqIHRpbWVyKQoreworCUhmc1BQcml2YXRlRlNEYXRhKglwcml2X2RhdGEgPSAoSGZzUFByaXZhdGVGU0RhdGEqKQorCQkJCQkJZnMtPnR5cGVfc3BlY2lmaWM7CisJSGZzQ1ByaXZhdGVDYWNoZSoJcmV0OworCXVuc2lnbmVkIGludAkJZmlsZV9udW1iZXIsIGJsb2NrX251bWJlcjsKKworCWZpbGVfbnVtYmVyID0gUEVEX0JFMzJfVE9fQ1BVKHByaXZfZGF0YS0+dmgtPmZpbGVfY291bnQpOworCWJsb2NrX251bWJlciA9IFBFRF9CRTMyX1RPX0NQVShwcml2X2RhdGEtPnZoLT50b3RhbF9ibG9ja3MpOworCXJldCA9IGhmc2NfbmV3X2NhY2hlKGJsb2NrX251bWJlciwgZmlsZV9udW1iZXIpOworCWlmICghcmV0KSByZXR1cm4gTlVMTDsKKworCWlmICghaGZzcGx1c19jYWNoZV9mcm9tX3ZoKHJldCwgZnMsIHRpbWVyKSB8fAorCSAgICAhaGZzcGx1c19jYWNoZV9mcm9tX2NhdGFsb2cocmV0LCBmcywgdGltZXIpIHx8CisJICAgICFoZnNwbHVzX2NhY2hlX2Zyb21fZXh0ZW50KHJldCwgZnMsIHRpbWVyKSB8fAorCSAgICAhaGZzcGx1c19jYWNoZV9mcm9tX2F0dHJpYnV0ZXMocmV0LCBmcywgdGltZXIpKSB7CisJCXBlZF9leGNlcHRpb25fdGhyb3coCisJCQlQRURfRVhDRVBUSU9OX0VSUk9SLAorCQkJUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQlfKCJDb3VsZCBub3QgY2FjaGUgdGhlIGZpbGUgc3lzdGVtIGluIG1lbW9yeS4iKSk7CisJCWhmc2NfZGVsZXRlX2NhY2hlKHJldCk7CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gbW92ZXMgZmlsZSdzIGRhdGEgdG8gY29tcGFjdCB1c2VkIGFuZCBmcmVlIHNwYWNlLAorICAgc3RhcnRpbmcgYXQgZmJsb2NrIGJsb2NrICovCisvKiByZXR1cm4gMCBvbiBlcnJvciAqLworaW50CitoZnNwbHVzX3BhY2tfZnJlZV9zcGFjZV9mcm9tX2Jsb2NrIChQZWRGaWxlU3lzdGVtICpmcywgdW5zaWduZWQgaW50IGZibG9jaywKKwkJCQkgICAgUGVkVGltZXIqIHRpbWVyLCB1bnNpZ25lZCBpbnQgdG9fZnJlZSkKK3sKKwlQZWRTZWN0b3IJCWJ5dGVzX2J1ZmY7CisJSGZzUFByaXZhdGVGU0RhdGEqIAlwcml2X2RhdGEgPSAoSGZzUFByaXZhdGVGU0RhdGEqKQorCQkJCQkJZnMtPnR5cGVfc3BlY2lmaWM7CisJSGZzUFZvbHVtZUhlYWRlcioJdmggPSBwcml2X2RhdGEtPnZoOworCUhmc0NQcml2YXRlQ2FjaGUqCWNhY2hlOworCXVuc2lnbmVkIGludCAJCXRvX2ZibG9jayA9IGZibG9jazsKKwl1bnNpZ25lZCBpbnQJCXN0YXJ0ID0gZmJsb2NrOworCXVuc2lnbmVkIGludAkJZGl2aXNvciA9IFBFRF9CRTMyX1RPX0NQVSAodmgtPnRvdGFsX2Jsb2NrcykKKwkJCQkgICAgICAgICAgKyAxIC0gc3RhcnQgLSB0b19mcmVlOworCWludAkJCXJldDsKKworCVBFRF9BU1NFUlQgKCFoZnNwX2Jsb2NrLCByZXR1cm4gMCk7CisKKwljYWNoZSA9IGhmc3BsdXNfY2FjaGVfZXh0ZW50cyAoZnMsIHRpbWVyKTsKKwlpZiAoIWNhY2hlKQorCQlyZXR1cm4gMDsKKworCS8qIENhbGN1bGF0ZSB0aGUgc2l6ZSBvZiB0aGUgY29weSBidWZmZXIgOgorCSAqIFRha2VzIEJMT0NLX01BWF9CVUZGIEhGUyBibG9ja3MsIGJ1dCBpZiA+IEJZVEVTX01BWF9CVUZGCisJICogdGFrZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIEhGUyBibG9ja3Mgc28gdGhhdCB0aGUgYnVmZmVyCisJICogd2lsbCByZW1haW4gc21hbGxlciB0aGFuIG9yIGVxdWFsIHRvIEJZVEVTX01BWF9CVUZGLCB3aXRoCisJICogYSBtaW5pbXVtIG9mIDEgSEZTIGJsb2NrICovCisJYnl0ZXNfYnVmZiA9IFBFRF9CRTMyX1RPX0NQVSAocHJpdl9kYXRhLT52aC0+YmxvY2tfc2l6ZSkKKwkJICAgICAqIChQZWRTZWN0b3IpIEJMT0NLX01BWF9CVUZGOworCWlmIChieXRlc19idWZmID4gQllURVNfTUFYX0JVRkYpIHsKKwkJaGZzcF9ibG9ja19jb3VudCA9IEJZVEVTX01BWF9CVUZGCisJCQkJIC8gUEVEX0JFMzJfVE9fQ1BVIChwcml2X2RhdGEtPnZoLT5ibG9ja19zaXplKTsKKwkJaWYgKCFoZnNwX2Jsb2NrX2NvdW50KQorCQkJaGZzcF9ibG9ja19jb3VudCA9IDE7CisJCWJ5dGVzX2J1ZmYgPSAoUGVkU2VjdG9yKSBoZnNwX2Jsb2NrX2NvdW50CisJCQkgICAgICogUEVEX0JFMzJfVE9fQ1BVIChwcml2X2RhdGEtPnZoLT5ibG9ja19zaXplKTsKKwl9IGVsc2UKKwkJaGZzcF9ibG9ja19jb3VudCA9IEJMT0NLX01BWF9CVUZGOworCisJLyogSWYgdGhlIGNhY2hlIGNvZGUgcmVxdWVzdHMgbW9yZSBzcGFjZSwgZ2l2ZSBpdCB0byBoaW0gKi8KKwlpZiAoYnl0ZXNfYnVmZiA8IGhmc2NfY2FjaGVfbmVlZGVkX2J1ZmZlciAoY2FjaGUpKQorCQlieXRlc19idWZmID0gaGZzY19jYWNoZV9uZWVkZWRfYnVmZmVyIChjYWNoZSk7CisKKwloZnNwX2Jsb2NrID0gKHVpbnQ4X3QqKSBwZWRfbWFsbG9jIChieXRlc19idWZmKTsKKwlpZiAoIWhmc3BfYmxvY2spCisJCWdvdG8gZXJyb3JfY2FjaGU7CisKKwlpZiAoIWhmc3BsdXNfcmVhZF9iYWRfYmxvY2tzIChmcykpIHsKKwkJcGVkX2V4Y2VwdGlvbl90aHJvdyAoCisJCQlQRURfRVhDRVBUSU9OX0VSUk9SLAorCQkJUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQlfKCJCYWQgYmxvY2tzIGxpc3QgY291bGQgbm90IGJlIGxvYWRlZC4iKSk7CisJCWdvdG8gZXJyb3JfYWxsb2M7CisJfQorCisJd2hpbGUgKCBmYmxvY2sgPCAoIHByaXZfZGF0YS0+cGx1c19nZW9tLT5sZW5ndGggLSAyICkKKwkJCSAvICggUEVEX0JFMzJfVE9fQ1BVICh2aC0+YmxvY2tfc2l6ZSkKKwkJCSAgICAgLyBQRURfU0VDVE9SX1NJWkVfREVGQVVMVCApICkgeworCQlpZiAoVFNUX0JMT0NfT0NDVVBBVElPTiAocHJpdl9kYXRhLT5hbGxvY19tYXAsIGZibG9jaykKKwkJICAgICYmICghaGZzcGx1c19pc19iYWRfYmxvY2sgKGZzLCBmYmxvY2spKSkgeworCQkJaWYgKCEocmV0ID0gaGZzcGx1c19tb3ZlX2V4dGVudF9zdGFydGluZ19hdCAoZnMsCisJCQkJCQkmZmJsb2NrLCAmdG9fZmJsb2NrLCBjYWNoZSkpKQorCQkJCXRvX2ZibG9jayA9ICsrZmJsb2NrOworCQkJZWxzZSBpZiAocmV0ID09IC0xKSB7CisJCQkJcGVkX2V4Y2VwdGlvbl90aHJvdyAoCisJCQkJCVBFRF9FWENFUFRJT05fRVJST1IsCisJCQkJCVBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJCQlfKCJBbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgZXh0ZW50ICIKKwkJCQkJICAicmVsb2NhdGlvbi4iKSk7CisJCQkJZ290byBlcnJvcl9hbGxvYzsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWZibG9jaysrOworCQl9CisKKwkJcGVkX3RpbWVyX3VwZGF0ZSh0aW1lciwgKGZsb2F0KSh0b19mYmxvY2sgLSBzdGFydCkgLyBkaXZpc29yKTsKKwl9CisKKwlwZWRfZnJlZSAoaGZzcF9ibG9jayk7IGhmc3BfYmxvY2sgPSBOVUxMOyBoZnNwX2Jsb2NrX2NvdW50ID0gMDsKKwloZnNjX2RlbGV0ZV9jYWNoZSAoY2FjaGUpOworCXJldHVybiAxOworCitlcnJvcl9hbGxvYzoKKwlwZWRfZnJlZSAoaGZzcF9ibG9jayk7IGhmc3BfYmxvY2sgPSBOVUxMOyBoZnNwX2Jsb2NrX2NvdW50ID0gMDsKK2Vycm9yX2NhY2hlOgorCWhmc2NfZGVsZXRlX2NhY2hlIChjYWNoZSk7CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiAhRElTQ09WRVJfT05MWSAqLwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5oIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3ZGIwYWEKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmgKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAgICBsaWJwYXJ0ZWQgLSBhIGxpYnJhcnkgZm9yIG1hbmlwdWxhdGluZyBkaXNrIHBhcnRpdGlvbnMKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCisqLworCisjaWZuZGVmIF9SRUxPQ19QTFVTX0gKKyNkZWZpbmUgX1JFTE9DX1BMVVNfSAorCisjaW5jbHVkZSA8cGFydGVkL3BhcnRlZC5oPgorI2luY2x1ZGUgPHBhcnRlZC9lbmRpYW4uaD4KKyNpbmNsdWRlIDxwYXJ0ZWQvZGVidWcuaD4KKworI2luY2x1ZGUgImhmcy5oIgorCitpbnQKK2hmc3BsdXNfdXBkYXRlX3ZoIChQZWRGaWxlU3lzdGVtICpmcyk7CisKK2ludAoraGZzcGx1c19wYWNrX2ZyZWVfc3BhY2VfZnJvbV9ibG9jayAoUGVkRmlsZVN5c3RlbSAqZnMsIHVuc2lnbmVkIGludCBmYmxvY2ssCisJCQkJICAgIFBlZFRpbWVyKiB0aW1lciwgdW5zaWduZWQgaW50IHRvX2ZyZWUpOworCisKKyNlbmRpZiAvKiBfUkVMT0NfUExVU19IICovCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2pmcy9NYWtlZmlsZS5hbSBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvamZzL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMTg2NjcKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2pmcy9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDggQEAKK3BhcnRlZGluY2x1ZGVkaXIJPSAtSSQodG9wX3NyY2RpcikvaW5jbHVkZQorCitub2luc3RfTFRMSUJSQVJJRVMJPSBsaWJqZnMubGEKK2xpYmpmc19sYV9TT1VSQ0VTCT0gamZzLmMgamZzX3N1cGVyYmxvY2suaCBqZnNfdHlwZXMuaAorCitJTkNMVURFUyA9ICQocGFydGVkaW5jbHVkZWRpcikgJChJTlRMSU5DUykKKworTUFJTlRBSU5FUkNMRUFORklMRVMgPSBNYWtlZmlsZS5pbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvamZzL01ha2VmaWxlLmluIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9qZnMvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdlMmFmZAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvamZzL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNjI0IEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjEwIGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK3N1YmRpciA9IGxpYnBhcnRlZC9mcy9qZnMKK0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbgorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvbTQvYWJzb2x1dGUtaGVhZGVyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2FsbG9jYS5tNCAkKHRvcF9zcmNkaXIpL200L2Fzc2VydC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9hdGV4aXQubTQgJCh0b3Bfc3JjZGlyKS9tNC9jYWxsb2MubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY2xvc2Utc3RyZWFtLm00ICQodG9wX3NyY2RpcikvbTQvY2xvc2VvdXQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY29kZXNldC5tNCAkKHRvcF9zcmNkaXIpL200L2NvbmZpZy1oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2Rpcm5hbWUubTQgJCh0b3Bfc3JjZGlyKS9tNC9kb3MubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZG91YmxlLXNsYXNoLXJvb3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZXJyb3IubTQgJCh0b3Bfc3JjZGlyKS9tNC9leGl0ZmFpbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9leHRlbnNpb25zLm00ICQodG9wX3NyY2RpcikvbTQvZnBlbmRpbmcubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZnJlZS5tNCAkKHRvcF9zcmNkaXIpL200L2dldG9wdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00ICQodG9wX3NyY2RpcikvbTQvZ2xpYmMyMS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9nbnVsaWItY29tbW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2dudWxpYi1jb21wLm00ICQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaW5saW5lLm00ICQodG9wX3NyY2RpcikvbTQvaW50dHlwZXMtcHJpLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ludHR5cGVzLm00ICQodG9wX3NyY2RpcikvbTQvbGliLWlnbm9yZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xvY2FsY2hhcnNldC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sb25nLW9wdGlvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9sb25nbG9uZy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tYnJ0b3djLm00ICQodG9wX3NyY2RpcikvbTQvbWJzdGF0ZV90Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21lbWNoci5tNCAkKHRvcF9zcmNkaXIpL200L21lbWNtcC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tZW1jcHkubTQgJCh0b3Bfc3JjZGlyKS9tNC9tZW1tb3ZlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21lbXNldC5tNCAkKHRvcF9zcmNkaXIpL200L25scy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCAkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3F1b3RlYXJnLm00ICQodG9wX3NyY2RpcikvbTQvcmVnZXgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcmVuYW1lLm00ICQodG9wX3NyY2RpcikvbTQvcnBtYXRjaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zYWZlLXJlYWQubTQgJCh0b3Bfc3JjZGlyKS9tNC9zYWZlLXdyaXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3NzaXplX3QubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGRhcmcubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RkYm9vbC5tNCAkKHRvcF9zcmNkaXIpL200L3N0ZGludC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdGRsaWJfaC5tNCAkKHRvcF9zcmNkaXIpL200L3N0cmNzcG4ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RyaW5nX2gubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHJuZHVwLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0cm5sZW4ubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHJ0b2QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RydG9sLm00ICQodG9wX3NyY2RpcikvbTQvdW5pc3RkX2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdXRpbWJ1Zi5tNCAkKHRvcF9zcmNkaXIpL200L3V0aW1lLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3V0aW1lcy1udWxsLm00ICQodG9wX3NyY2RpcikvbTQvd2NoYXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvd2N0eXBlLm00ICQodG9wX3NyY2RpcikvbTQvd2ludF90Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3hhbGxvYy5tNCAkKHRvcF9zcmNkaXIpL200L3hzdHJuZHVwLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitMVExJQlJBUklFUyA9ICQobm9pbnN0X0xUTElCUkFSSUVTKQorbGliamZzX2xhX0xJQkFERCA9CithbV9saWJqZnNfbGFfT0JKRUNUUyA9IGpmcy5sbworbGliamZzX2xhX09CSkVDVFMgPSAkKGFtX2xpYmpmc19sYV9PQkpFQ1RTKQorREVGQVVMVF9JTkNMVURFUyA9IC1JLiAtSSQodG9wX2J1aWxkZGlyKS9saWJAYW1fX2lzcmNACitkZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvZGVwY29tcAorYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKK0NPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAorCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0xUQ09NUElMRSA9ICQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCisJLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpIFwKKwkkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitDQ0xEID0gJChDQykKK0xJTksgPSAkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorCS0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpIFwKKwkkKExERkxBR1MpIC1vICRACitTT1VSQ0VTID0gJChsaWJqZnNfbGFfU09VUkNFUykKK0RJU1RfU09VUkNFUyA9ICQobGliamZzX2xhX1NPVVJDRVMpCitFVEFHUyA9IGV0YWdzCitDVEFHUyA9IGN0YWdzCitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUJTT0xVVEVfSU5UVFlQRVNfSCA9IEBBQlNPTFVURV9JTlRUWVBFU19IQAorQUJTT0xVVEVfU1RESU5UX0ggPSBAQUJTT0xVVEVfU1RESU5UX0hACitBQlNPTFVURV9TVERMSUJfSCA9IEBBQlNPTFVURV9TVERMSUJfSEAKK0FCU09MVVRFX1NUUklOR19IID0gQEFCU09MVVRFX1NUUklOR19IQAorQUJTT0xVVEVfVU5JU1REX0ggPSBAQUJTT0xVVEVfVU5JU1REX0hACitBQlNPTFVURV9XQ0hBUl9IID0gQEFCU09MVVRFX1dDSEFSX0hACitBQlNPTFVURV9XQ1RZUEVfSCA9IEBBQlNPTFVURV9XQ1RZUEVfSEAKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FMTE9DQSA9IEBBTExPQ0FACitBTExPQ0FfSCA9IEBBTExPQ0FfSEAKK0FNVEFSID0gQEFNVEFSQAorQVIgPSBAQVJACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0JJVFNJWkVPRl9QVFJESUZGX1QgPSBAQklUU0laRU9GX1BUUkRJRkZfVEAKK0JJVFNJWkVPRl9TSUdfQVRPTUlDX1QgPSBAQklUU0laRU9GX1NJR19BVE9NSUNfVEAKK0JJVFNJWkVPRl9TSVpFX1QgPSBAQklUU0laRU9GX1NJWkVfVEAKK0JJVFNJWkVPRl9XQ0hBUl9UID0gQEJJVFNJWkVPRl9XQ0hBUl9UQAorQklUU0laRU9GX1dJTlRfVCA9IEBCSVRTSVpFT0ZfV0lOVF9UQAorQlVJTERJTkZPID0gQEJVSUxESU5GT0AKK0NDID0gQENDQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDSEVDS19DRkxBR1MgPSBAQ0hFQ0tfQ0ZMQUdTQAorQ0hFQ0tfTElCUyA9IEBDSEVDS19MSUJTQAorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ1hYID0gQENYWEAKK0NYWENQUCA9IEBDWFhDUFBACitDWFhERVBNT0RFID0gQENYWERFUE1PREVACitDWFhGTEFHUyA9IEBDWFhGTEFHU0AKK0NZR1BBVEhfVyA9IEBDWUdQQVRIX1dACitERUZTID0gQERFRlNACitERVBESVIgPSBAREVQRElSQAorRExfTElCUyA9IEBETF9MSUJTQAorRE1fTElCUyA9IEBETV9MSUJTQAorRUNITyA9IEBFQ0hPQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFWEVFWFQgPSBARVhFRVhUQAorRjc3ID0gQEY3N0AKK0ZGTEFHUyA9IEBGRkxBR1NACitHRVRPUFRfSCA9IEBHRVRPUFRfSEAKK0dMSUJDMjEgPSBAR0xJQkMyMUAKK0dNU0dGTVQgPSBAR01TR0ZNVEAKK0dNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAorR05VTElCX0NIT1dOID0gQEdOVUxJQl9DSE9XTkAKK0dOVUxJQl9EVVAyID0gQEdOVUxJQl9EVVAyQAorR05VTElCX0ZDSERJUiA9IEBHTlVMSUJfRkNIRElSQAorR05VTElCX0ZUUlVOQ0FURSA9IEBHTlVMSUJfRlRSVU5DQVRFQAorR05VTElCX0dFVENXRCA9IEBHTlVMSUJfR0VUQ1dEQAorR05VTElCX0dFVExPR0lOX1IgPSBAR05VTElCX0dFVExPR0lOX1JACitHTlVMSUJfR0VUU1VCT1BUID0gQEdOVUxJQl9HRVRTVUJPUFRACitHTlVMSUJfSU1BWEFCUyA9IEBHTlVMSUJfSU1BWEFCU0AKK0dOVUxJQl9JTUFYRElWID0gQEdOVUxJQl9JTUFYRElWQAorR05VTElCX01CU0NBU0VDTVAgPSBAR05VTElCX01CU0NBU0VDTVBACitHTlVMSUJfTUJTQ0FTRVNUUiA9IEBHTlVMSUJfTUJTQ0FTRVNUUkAKK0dOVUxJQl9NQlNDSFIgPSBAR05VTElCX01CU0NIUkAKK0dOVUxJQl9NQlNDU1BOID0gQEdOVUxJQl9NQlNDU1BOQAorR05VTElCX01CU0xFTiA9IEBHTlVMSUJfTUJTTEVOQAorR05VTElCX01CU05DQVNFQ01QID0gQEdOVUxJQl9NQlNOQ0FTRUNNUEAKK0dOVUxJQl9NQlNQQlJLID0gQEdOVUxJQl9NQlNQQlJLQAorR05VTElCX01CU1BDQVNFQ01QID0gQEdOVUxJQl9NQlNQQ0FTRUNNUEAKK0dOVUxJQl9NQlNSQ0hSID0gQEdOVUxJQl9NQlNSQ0hSQAorR05VTElCX01CU1NFUCA9IEBHTlVMSUJfTUJTU0VQQAorR05VTElCX01CU1NQTiA9IEBHTlVMSUJfTUJTU1BOQAorR05VTElCX01CU1NUUiA9IEBHTlVMSUJfTUJTU1RSQAorR05VTElCX01CU1RPS19SID0gQEdOVUxJQl9NQlNUT0tfUkAKK0dOVUxJQl9NRU1NRU0gPSBAR05VTElCX01FTU1FTUAKK0dOVUxJQl9NRU1QQ1BZID0gQEdOVUxJQl9NRU1QQ1BZQAorR05VTElCX01FTVJDSFIgPSBAR05VTElCX01FTVJDSFJACitHTlVMSUJfTUtEVEVNUCA9IEBHTlVMSUJfTUtEVEVNUEAKK0dOVUxJQl9NS1NURU1QID0gQEdOVUxJQl9NS1NURU1QQAorR05VTElCX1JFQURMSU5LID0gQEdOVUxJQl9SRUFETElOS0AKK0dOVUxJQl9TTEVFUCA9IEBHTlVMSUJfU0xFRVBACitHTlVMSUJfU1RQQ1BZID0gQEdOVUxJQl9TVFBDUFlACitHTlVMSUJfU1RQTkNQWSA9IEBHTlVMSUJfU1RQTkNQWUAKK0dOVUxJQl9TVFJDQVNFU1RSID0gQEdOVUxJQl9TVFJDQVNFU1RSQAorR05VTElCX1NUUkNIUk5VTCA9IEBHTlVMSUJfU1RSQ0hSTlVMQAorR05VTElCX1NUUkRVUCA9IEBHTlVMSUJfU1RSRFVQQAorR05VTElCX1NUUk5EVVAgPSBAR05VTElCX1NUUk5EVVBACitHTlVMSUJfU1RSTkxFTiA9IEBHTlVMSUJfU1RSTkxFTkAKK0dOVUxJQl9TVFJQQlJLID0gQEdOVUxJQl9TVFJQQlJLQAorR05VTElCX1NUUlNFUCA9IEBHTlVMSUJfU1RSU0VQQAorR05VTElCX1NUUlRPSU1BWCA9IEBHTlVMSUJfU1RSVE9JTUFYQAorR05VTElCX1NUUlRPS19SID0gQEdOVUxJQl9TVFJUT0tfUkAKK0dOVUxJQl9TVFJUT1VNQVggPSBAR05VTElCX1NUUlRPVU1BWEAKK0dSRVAgPSBAR1JFUEAKK0hBVkVfREVDTF9HRVRMT0dJTl9SID0gQEhBVkVfREVDTF9HRVRMT0dJTl9SQAorSEFWRV9ERUNMX0lNQVhBQlMgPSBASEFWRV9ERUNMX0lNQVhBQlNACitIQVZFX0RFQ0xfSU1BWERJViA9IEBIQVZFX0RFQ0xfSU1BWERJVkAKK0hBVkVfREVDTF9NRU1NRU0gPSBASEFWRV9ERUNMX01FTU1FTUAKK0hBVkVfREVDTF9NRU1SQ0hSID0gQEhBVkVfREVDTF9NRU1SQ0hSQAorSEFWRV9ERUNMX1NUUkRVUCA9IEBIQVZFX0RFQ0xfU1RSRFVQQAorSEFWRV9ERUNMX1NUUk5DQVNFQ01QID0gQEhBVkVfREVDTF9TVFJOQ0FTRUNNUEAKK0hBVkVfREVDTF9TVFJORFVQID0gQEhBVkVfREVDTF9TVFJORFVQQAorSEFWRV9ERUNMX1NUUk5MRU4gPSBASEFWRV9ERUNMX1NUUk5MRU5ACitIQVZFX0RFQ0xfU1RSVE9JTUFYID0gQEhBVkVfREVDTF9TVFJUT0lNQVhACitIQVZFX0RFQ0xfU1RSVE9LX1IgPSBASEFWRV9ERUNMX1NUUlRPS19SQAorSEFWRV9ERUNMX1NUUlRPVU1BWCA9IEBIQVZFX0RFQ0xfU1RSVE9VTUFYQAorSEFWRV9EVVAyID0gQEhBVkVfRFVQMkAKK0hBVkVfRlRSVU5DQVRFID0gQEhBVkVfRlRSVU5DQVRFQAorSEFWRV9HRVRTVUJPUFQgPSBASEFWRV9HRVRTVUJPUFRACitIQVZFX0lOVFRZUEVTX0ggPSBASEFWRV9JTlRUWVBFU19IQAorSEFWRV9JU1dDTlRSTCA9IEBIQVZFX0lTV0NOVFJMQAorSEFWRV9MT05HX0xPTkdfSU5UID0gQEhBVkVfTE9OR19MT05HX0lOVEAKK0hBVkVfTUVNUENQWSA9IEBIQVZFX01FTVBDUFlACitIQVZFX01LRFRFTVAgPSBASEFWRV9NS0RURU1QQAorSEFWRV9SRUFETElOSyA9IEBIQVZFX1JFQURMSU5LQAorSEFWRV9TSUdORURfU0lHX0FUT01JQ19UID0gQEhBVkVfU0lHTkVEX1NJR19BVE9NSUNfVEAKK0hBVkVfU0lHTkVEX1dDSEFSX1QgPSBASEFWRV9TSUdORURfV0NIQVJfVEAKK0hBVkVfU0lHTkVEX1dJTlRfVCA9IEBIQVZFX1NJR05FRF9XSU5UX1RACitIQVZFX1NMRUVQID0gQEhBVkVfU0xFRVBACitIQVZFX1NURElOVF9IID0gQEhBVkVfU1RESU5UX0hACitIQVZFX1NUUENQWSA9IEBIQVZFX1NUUENQWUAKK0hBVkVfU1RQTkNQWSA9IEBIQVZFX1NUUE5DUFlACitIQVZFX1NUUkNBU0VDTVAgPSBASEFWRV9TVFJDQVNFQ01QQAorSEFWRV9TVFJDQVNFU1RSID0gQEhBVkVfU1RSQ0FTRVNUUkAKK0hBVkVfU1RSQ0hSTlVMID0gQEhBVkVfU1RSQ0hSTlVMQAorSEFWRV9TVFJORFVQID0gQEhBVkVfU1RSTkRVUEAKK0hBVkVfU1RSUEJSSyA9IEBIQVZFX1NUUlBCUktACitIQVZFX1NUUlNFUCA9IEBIQVZFX1NUUlNFUEAKK0hBVkVfU1lTX0JJVFlQRVNfSCA9IEBIQVZFX1NZU19CSVRZUEVTX0hACitIQVZFX1NZU19JTlRUWVBFU19IID0gQEhBVkVfU1lTX0lOVFRZUEVTX0hACitIQVZFX1NZU19UWVBFU19IID0gQEhBVkVfU1lTX1RZUEVTX0hACitIQVZFX1VOSVNURF9IID0gQEhBVkVfVU5JU1REX0hACitIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlQgPSBASEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UQAorSEFWRV9XQ1RZUEVfSCA9IEBIQVZFX1dDVFlQRV9IQAorSEFWRV9XSU5UX1QgPSBASEFWRV9XSU5UX1RACitIQVZFX19CT09MID0gQEhBVkVfX0JPT0xACitJTlNUQUxMID0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lOVExJTkNTID0gQElOVExJTkNTQAorSU5UTExJQlMgPSBASU5UTExJQlNACitJTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACitJTlRUWVBFU19IID0gQElOVFRZUEVTX0hACitMREZMQUdTID0gQExERkxBR1NACitMSUJJQ09OViA9IEBMSUJJQ09OVkAKK0xJQklOVEwgPSBATElCSU5UTEAKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xOX1MgPSBATE5fU0AKK0xUQUxMT0NBID0gQExUQUxMT0NBQAorTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAorTFRMSUJJTlRMID0gQExUTElCSU5UTEAKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitMVF9BR0UgPSBATFRfQUdFQAorTFRfQ1VSUkVOVCA9IEBMVF9DVVJSRU5UQAorTFRfUkVMRUFTRSA9IEBMVF9SRUxFQVNFQAorTFRfUkVWSVNJT04gPSBATFRfUkVWSVNJT05ACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01LRElSX1AgPSBATUtESVJfUEAKK01TR0ZNVCA9IEBNU0dGTVRACitNU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACitNU0dNRVJHRSA9IEBNU0dNRVJHRUAKK09CSkVYVCA9IEBPQkpFWFRACitPUyA9IEBPU0AKK09TX0xJQlMgPSBAT1NfTElCU0AKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQVJURURMREZMQUdTID0gQFBBUlRFRExERkxBR1NACitQQVJURURfTElCUyA9IEBQQVJURURfTElCU0AKK1BBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAorUE9TVUIgPSBAUE9TVUJACitQT1dfTElCID0gQFBPV19MSUJACitQUklQVFJfUFJFRklYID0gQFBSSVBUUl9QUkVGSVhACitQUklfTUFDUk9TX0JST0tFTiA9IEBQUklfTUFDUk9TX0JST0tFTkAKK1BUUkRJRkZfVF9TVUZGSVggPSBAUFRSRElGRl9UX1NVRkZJWEAKK1JBTkxJQiA9IEBSQU5MSUJACitSRUlTRVJfTElCUyA9IEBSRUlTRVJfTElCU0AKK1JFUExBQ0VfQ0hPV04gPSBAUkVQTEFDRV9DSE9XTkAKK1JFUExBQ0VfRkNIRElSID0gQFJFUExBQ0VfRkNIRElSQAorUkVQTEFDRV9HRVRDV0QgPSBAUkVQTEFDRV9HRVRDV0RACitSRVBMQUNFX01LU1RFTVAgPSBAUkVQTEFDRV9NS1NURU1QQAorU0VEID0gQFNFREAKK1NFTElOVVhfTElCUyA9IEBTRUxJTlVYX0xJQlNACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU0lHX0FUT01JQ19UX1NVRkZJWCA9IEBTSUdfQVRPTUlDX1RfU1VGRklYQAorU0laRV9UX1NVRkZJWCA9IEBTSVpFX1RfU1VGRklYQAorU1REQk9PTF9IID0gQFNUREJPT0xfSEAKK1NURElOVF9IID0gQFNURElOVF9IQAorU1RSSVAgPSBAU1RSSVBACitVU0VfTkxTID0gQFVTRV9OTFNACitVVUlEX0xJQlMgPSBAVVVJRF9MSUJTQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorV0NIQVJfSCA9IEBXQ0hBUl9IQAorV0NIQVJfVF9TVUZGSVggPSBAV0NIQVJfVF9TVUZGSVhACitXQ1RZUEVfSCA9IEBXQ1RZUEVfSEAKK1dJTlRfVF9TVUZGSVggPSBAV0lOVF9UX1NVRkZJWEAKK1hHRVRURVhUID0gQFhHRVRURVhUQAorWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKK2Fic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACithYnNfc3JjZGlyID0gQGFic19zcmNkaXJACithYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACithYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKK2FjX2N0X0Y3NyA9IEBhY19jdF9GNzdACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAorZ2xfTElCT0JKUyA9IEBnbF9MSUJPQkpTQAorZ2xfTFRMSUJPQkpTID0gQGdsX0xUTElCT0JKU0AKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3BzZGlyID0gQHBzZGlyQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzcmNkaXIgPSBAc3JjZGlyQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKK3RvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitwYXJ0ZWRpbmNsdWRlZGlyID0gLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUKK25vaW5zdF9MVExJQlJBUklFUyA9IGxpYmpmcy5sYQorbGliamZzX2xhX1NPVVJDRVMgPSBqZnMuYyBqZnNfc3VwZXJibG9jay5oIGpmc190eXBlcy5oCitJTkNMVURFUyA9ICQocGFydGVkaW5jbHVkZWRpcikgJChJTlRMSU5DUykKK01BSU5UQUlORVJDTEVBTkZJTEVTID0gTWFrZWZpbGUuaW4KK2FsbDogYWxsLWFtCisKKy5TVUZGSVhFUzoKKy5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoIFwKKwkJJiYgZXhpdCAwOyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSAgbGlicGFydGVkL2ZzL2pmcy9NYWtlZmlsZSc7IFwKKwljZCAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZ251ICBsaWJwYXJ0ZWQvZnMvamZzL01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCitjbGVhbi1ub2luc3RMVExJQlJBUklFUzoKKwktdGVzdCAteiAiJChub2luc3RfTFRMSUJSQVJJRVMpIiB8fCBybSAtZiAkKG5vaW5zdF9MVExJQlJBUklFUykKKwlAbGlzdD0nJChub2luc3RfTFRMSUJSQVJJRVMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBkaXI9ImBlY2hvICQkcCB8IHNlZCAtZSAnc3wvW14vXSokJHx8J2AiOyBcCisJICB0ZXN0ICIkJGRpciIgIT0gIiQkcCIgfHwgZGlyPS47IFwKKwkgIGVjaG8gInJtIC1mIFwiJCR7ZGlyfS9zb19sb2NhdGlvbnNcIiI7IFwKKwkgIHJtIC1mICIkJHtkaXJ9L3NvX2xvY2F0aW9ucyI7IFwKKwlkb25lCitsaWJqZnMubGE6ICQobGliamZzX2xhX09CSkVDVFMpICQobGliamZzX2xhX0RFUEVOREVOQ0lFUykgCisJJChMSU5LKSAgJChsaWJqZnNfbGFfT0JKRUNUUykgJChsaWJqZnNfbGFfTElCQUREKSAkKExJQlMpCisKK21vc3RseWNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICouJChPQkpFWFQpCisKK2Rpc3RjbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLnRhYi5jCisKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9qZnMuUGxvQGFtX19xdW90ZUAKKworLmMubzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyAkPAorCisuYy5vYmo6CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKK0BhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyBgJChDWUdQQVRIX1cpICckPCdgCisKKy5jLmxvOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMVENPTVBJTEUpIC1jIC1vICRAICQ8CisKK21vc3RseWNsZWFuLWxpYnRvb2w6CisJLXJtIC1mICoubG8KKworY2xlYW4tbGlidG9vbDoKKwktcm0gLXJmIC5saWJzIF9saWJzCisKK0lEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKKwkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKKwlta2lkIC1mSUQgJCR1bmlxdWUKK3RhZ3M6IFRBR1MKKworVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwl0YWdzPTsgXAorCWhlcmU9YHB3ZGA7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKKwkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorCSAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAkJHRhZ3MgJCR1bmlxdWU7IFwKKwlmaQorY3RhZ3M6IENUQUdTCitDVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwl0YWdzPTsgXAorCWhlcmU9YHB3ZGA7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKKwkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKKwl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiIFwKKwkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKKwkgICAgICQkdGFncyAkJHVuaXF1ZQorCitHVEFHUzoKKwloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorCSAgJiYgY2QgJCh0b3Bfc3JjZGlyKSBcCisJICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICQkaGVyZQorCitkaXN0Y2xlYW4tdGFnczoKKwktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLXBSICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtcFIgJCRkLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAkKGRpc3RkaXIpLyQkZmlsZSBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgJChkaXN0ZGlyKS8kJGZpbGUgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorY2hlY2stYW06IGFsbC1hbQorY2hlY2s6IGNoZWNrLWFtCithbGwtYW06IE1ha2VmaWxlICQoTFRMSUJSQVJJRVMpCitpbnN0YWxsZGlyczoKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCisJICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCisJLXRlc3QgLXogIiQoTUFJTlRBSU5FUkNMRUFORklMRVMpIiB8fCBybSAtZiAkKE1BSU5UQUlORVJDTEVBTkZJTEVTKQorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0TFRMSUJSQVJJRVMgXAorCW1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1leGVjLWFtOgorCitpbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1hbQorCitwZGYtYW06CisKK3BzOiBwcy1hbQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOgorCisuTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisKKy5QSE9OWTogQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKKwljbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdExUTElCUkFSSUVTIGN0YWdzIGRpc3RjbGVhbiBcCisJZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgXAorCWRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIFwKKwlpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBcCisJaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgXAorCWluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIFwKKwlpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAorCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCisJbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAorCW1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIFwKKwlwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbQorCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2pmcy9qZnMuYyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvamZzL2pmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1OTE1OGMKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2pmcy9qZnMuYwpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAgICBsaWJwYXJ0ZWQgLSBhIGxpYnJhcnkgZm9yIG1hbmlwdWxhdGluZyBkaXNrIHBhcnRpdGlvbnMKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCisqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpbmNsdWRlIDxwYXJ0ZWQvcGFydGVkLmg+CisjaW5jbHVkZSA8cGFydGVkL2VuZGlhbi5oPgorCisjZGVmaW5lIF9KRlNfVVRJTElUWQorI2luY2x1ZGUgImpmc190eXBlcy5oIgorI2luY2x1ZGUgImpmc19zdXBlcmJsb2NrLmgiCisKKyNkZWZpbmUgSkZTX1NVUEVSX1NFQ1RPUiA2NAorCisjaWYgRU5BQkxFX05MUworIyAgaW5jbHVkZSA8bGliaW50bC5oPgorIyAgZGVmaW5lIF8oU3RyaW5nKSBkZ2V0dGV4dCAoUEFDS0FHRSwgU3RyaW5nKQorI2Vsc2UKKyMgIGRlZmluZSBfKFN0cmluZykgKFN0cmluZykKKyNlbmRpZiAvKiBFTkFCTEVfTkxTICovCisKKyNkZWZpbmUgSkZTX0JMT0NLX1NJWkVTCQkoKGludFsyXSl7NTEyLCAwfSkKKworc3RhdGljIFBlZEdlb21ldHJ5KgoramZzX3Byb2JlIChQZWRHZW9tZXRyeSogZ2VvbSkKK3sKKwl1bmlvbiB7CisJCXN0cnVjdCBzdXBlcmJsb2NrCXNiOworCQljaGFyCQkJYnl0ZXNbNTEyXTsKKwl9IGJ1ZjsKKworCWlmIChnZW9tLT5sZW5ndGggPCBKRlNfU1VQRVJfU0VDVE9SICsgMSkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKCFwZWRfZ2VvbWV0cnlfcmVhZCAoZ2VvbSwgJmJ1ZiwgSkZTX1NVUEVSX1NFQ1RPUiwgMSkpCisJCXJldHVybiBOVUxMOworCisJaWYgKHN0cm5jbXAgKGJ1Zi5zYi5zX21hZ2ljLCBKRlNfTUFHSUMsIDQpID09IDApIHsKKwkJUGVkU2VjdG9yIGJsb2NrX3NpemUgPSBQRURfTEUzMl9UT19DUFUgKGJ1Zi5zYi5zX3Bic2l6ZSkgLyA1MTI7CisJCVBlZFNlY3RvciBibG9ja19jb3VudCA9IFBFRF9MRTY0X1RPX0NQVSAoYnVmLnNiLnNfc2l6ZSk7CisKKwkJcmV0dXJuIHBlZF9nZW9tZXRyeV9uZXcgKGdlb20tPmRldiwgZ2VvbS0+c3RhcnQsCisJCQkJCSBibG9ja19zaXplICogYmxvY2tfY291bnQpOworCX0gZWxzZSB7CisJCXJldHVybiBOVUxMOworCX0KK30KKworI2lmbmRlZiBESVNDT1ZFUl9PTkxZCitzdGF0aWMgaW50CitqZnNfY2xvYmJlciAoUGVkR2VvbWV0cnkqIGdlb20pCit7CisJY2hhcglidWZbNTEyXTsKKworCW1lbXNldCAoYnVmLCAwLCA1MTIpOworCXJldHVybiBwZWRfZ2VvbWV0cnlfd3JpdGUgKGdlb20sIGJ1ZiwgSkZTX1NVUEVSX1NFQ1RPUiwgMSk7Cit9CisjZW5kaWYgLyogIURJU0NPVkVSX09OTFkgKi8KKworc3RhdGljIFBlZEZpbGVTeXN0ZW1PcHMgamZzX29wcyA9IHsKKwlwcm9iZToJCWpmc19wcm9iZSwKKyNpZm5kZWYgRElTQ09WRVJfT05MWQorCWNsb2JiZXI6CWpmc19jbG9iYmVyLAorI2Vsc2UKKwljbG9iYmVyOglOVUxMLAorI2VuZGlmCisJb3BlbjoJCU5VTEwsCisJY3JlYXRlOgkJTlVMTCwKKwljbG9zZToJCU5VTEwsCisJY2hlY2s6CQlOVUxMLAorCWNvcHk6CQlOVUxMLAorCXJlc2l6ZToJCU5VTEwsCisJZ2V0X2NyZWF0ZV9jb25zdHJhaW50OglOVUxMLAorCWdldF9yZXNpemVfY29uc3RyYWludDoJTlVMTCwKKwlnZXRfY29weV9jb25zdHJhaW50OglOVUxMCit9OworCitzdGF0aWMgUGVkRmlsZVN5c3RlbVR5cGUgamZzX3R5cGUgPSB7CisJbmV4dDoJTlVMTCwKKwlvcHM6CSZqZnNfb3BzLAorCW5hbWU6CSJqZnMiLAorCWJsb2NrX3NpemVzOiBKRlNfQkxPQ0tfU0laRVMKK307CisKK3ZvaWQKK3BlZF9maWxlX3N5c3RlbV9qZnNfaW5pdCAoKQoreworCXBlZF9maWxlX3N5c3RlbV90eXBlX3JlZ2lzdGVyICgmamZzX3R5cGUpOworfQorCit2b2lkCitwZWRfZmlsZV9zeXN0ZW1famZzX2RvbmUgKCkKK3sKKwlwZWRfZmlsZV9zeXN0ZW1fdHlwZV91bnJlZ2lzdGVyICgmamZzX3R5cGUpOworfQpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9qZnMvamZzX3N1cGVyYmxvY2suaCBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvamZzL2pmc19zdXBlcmJsb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYxZGMyNAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvamZzL2pmc19zdXBlcmJsb2NrLmgKQEAgLTAsMCArMSwxNDUgQEAKKy8qCisgKiAgIENvcHlyaWdodCAoYykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyAgQ29ycC4sIDIwMDAKKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyAgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAKKyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIAorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyAgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZQorICogICB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyAgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSAKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQorICoKKyAqLworI2lmbmRlZglfSF9KRlNfU1VQRVJCTE9DSworI2RlZmluZSBfSF9KRlNfU1VQRVJCTE9DSworLyoKKyAqCWpmc19zdXBlcmJsb2NrLmgKKyAqLworCisvKgorICogbWFrZSB0aGUgbWFnaWMgbnVtYmVyIHNvbWV0aGluZyBhIGh1bWFuIGNvdWxkIHJlYWQKKyAqLworI2RlZmluZSBKRlNfTUFHSUMgCSJKRlMxIgkvKiBNYWdpYyB3b3JkOiBWZXJzaW9uIDEgKi8KKworI2RlZmluZSBKRlNfVkVSU0lPTgkxCS8qIFZlcnNpb24gbnVtYmVyOiBWZXJzaW9uIDEgKi8KKworI2RlZmluZSBMVl9OQU1FX1NJWkUJMTEJLyogTVVTVCBCRSAxMSBmb3IgT1MvMiBib290IHNlY3RvciAqLworCisvKiAKKyAqCWFnZ3JlZ2F0ZSBzdXBlcmJsb2NrIAorICoKKyAqIFRoZSBuYW1lIHN1cGVyYmxvY2sgaXMgdG9vIGNsb3NlIHRvIHN1cGVyX2Jsb2NrLCBzbyB0aGUgbmFtZSBoYXMgYmVlbgorICogY2hhbmdlZCB0byBqZnNfc3VwZXJibG9jay4gIFRoZSB1dGlsaXRpZXMgYXJlIHN0aWxsIHVzaW5nIHRoZSBvbGQgbmFtZS4KKyAqLworI2lmZGVmIF9KRlNfVVRJTElUWQorc3RydWN0IHN1cGVyYmxvY2sKKyNlbHNlCitzdHJ1Y3QgamZzX3N1cGVyYmxvY2sKKyNlbmRpZgoreworCWNoYXIgc19tYWdpY1s0XTsJLyogNDogbWFnaWMgbnVtYmVyICovCisJdTMyIHNfdmVyc2lvbjsJCS8qIDQ6IHZlcnNpb24gbnVtYmVyICovCisKKwlzNjQgc19zaXplOwkJLyogODogYWdncmVnYXRlIHNpemUgaW4gaGFyZHdhcmUvTFZNIGJsb2NrczsKKwkJCQkgKiBWRlM6IG51bWJlciBvZiBibG9ja3MKKwkJCQkgKi8KKwlzMzIgc19ic2l6ZTsJCS8qIDQ6IGFnZ3JlZ2F0ZSBibG9jayBzaXplIGluIGJ5dGVzOyAKKwkJCQkgKiBWRlM6IGZyYWdtZW50IHNpemUKKwkJCQkgKi8KKwlzMTYgc19sMmJzaXplOwkJLyogMjogbG9nMiBvZiBzX2JzaXplICovCisJczE2IHNfbDJiZmFjdG9yOwkvKiAyOiBsb2cyKHNfYnNpemUvaGFyZHdhcmUgYmxvY2sgc2l6ZSkgKi8KKwlzMzIgc19wYnNpemU7CQkvKiA0OiBoYXJkd2FyZS9MVk0gYmxvY2sgc2l6ZSBpbiBieXRlcyAqLworCXMxNiBzX2wycGJzaXplOwkJLyogMjogbG9nMiBvZiBzX3Bic2l6ZSAqLworCXMxNiBwYWQ7CQkvKiAyOiBwYWRkaW5nIG5lY2Vzc2FyeSBmb3IgYWxpZ25tZW50ICovCisKKwl1MzIgc19hZ3NpemU7CQkvKiA0OiBhbGxvY2F0aW9uIGdyb3VwIHNpemUgaW4gYWdnci4gYmxvY2tzICovCisKKwl1MzIgc19mbGFnOwkJLyogNDogYWdncmVnYXRlIGF0dHJpYnV0ZXM6CisJCQkJICogICAgc2VlIGpmc19maWxzeXMuaAorCQkJCSAqLworCXUzMiBzX3N0YXRlOwkJLyogNDogbW91bnQvdW5tb3VudC9yZWNvdmVyeSBzdGF0ZTogCisJCQkJICogICAgc2VlIGpmc19maWxzeXMuaAorCQkJCSAqLworCXMzMiBzX2NvbXByZXNzOwkJLyogNDogPiAwIGlmIGRhdGEgY29tcHJlc3Npb24gKi8KKworCXB4ZF90IHNfYWl0MjsJCS8qIDg6IGZpcnN0IGV4dGVudCBvZiBzZWNvbmRhcnkKKwkJCQkgKiAgICBhZ2dyZWdhdGUgaW5vZGUgdGFibGUKKwkJCQkgKi8KKworCXB4ZF90IHNfYWltMjsJCS8qIDg6IGZpcnN0IGV4dGVudCBvZiBzZWNvbmRhcnkKKwkJCQkgKiAgICBhZ2dyZWdhdGUgaW5vZGUgbWFwCisJCQkJICovCisJdTMyIHNfbG9nZGV2OwkJLyogNDogZGV2aWNlIGFkZHJlc3Mgb2YgbG9nICovCisJczMyIHNfbG9nc2VyaWFsOwkvKiA0OiBsb2cgc2VyaWFsIG51bWJlciBhdCBhZ2dyZWdhdGUgbW91bnQgKi8KKwlweGRfdCBzX2xvZ3B4ZDsJCS8qIDg6IGlubGluZSBsb2cgZXh0ZW50ICovCisKKwlweGRfdCBzX2ZzY2tweGQ7CS8qIDg6IGlubGluZSBmc2NrIHdvcmsgc3BhY2UgZXh0ZW50ICovCisKKwlzdHJ1Y3QgdGltZXN0cnVjX3Qgc190aW1lOwkvKiA4OiB0aW1lIGxhc3QgdXBkYXRlZCAqLworCisJczMyIHNfZnNja2xvZ2xlbjsJLyogNDogTnVtYmVyIG9mIGZpbGUgc3lzdGVtIGJsb2NrcyByZXNlcnZlZCBmb3IKKwkJCQkgKiAgICB0aGUgZnNjayBzZXJ2aWNlIGxvZy4gIAorCQkJCSAqICAgIE4uQi4gVGhlc2UgYmxvY2tzIGFyZSBkaXZpZGVkIGFtb25nIHRoZQorCQkJCSAqICAgICAgICAgdmVyc2lvbnMga2VwdC4gIFRoaXMgaXMgbm90IGEgcGVyCisJCQkJICogICAgICAgICB2ZXJzaW9uIHNpemUuCisJCQkJICogICAgTi5CLiBUaGVzZSBibG9ja3MgYXJlIGluY2x1ZGVkIGluIHRoZSAKKwkJCQkgKiAgICAgICAgIGxlbmd0aCBmaWVsZCBvZiBzX2ZzY2tweGQuCisJCQkJICovCisJczggc19mc2NrbG9nOwkJLyogMTogd2hpY2ggZnNjayBzZXJ2aWNlIGxvZyBpcyBtb3N0IHJlY2VudAorCQkJCSAqICAgIDAgPT4gbm8gc2VydmljZSBsb2cgZGF0YSB5ZXQKKwkJCQkgKiAgICAxID0+IHRoZSBmaXJzdCBvbmUKKwkJCQkgKiAgICAyID0+IHRoZSAybmQgb25lCisJCQkJICovCisJY2hhciBzX2ZwYWNrWzExXTsJLyogMTE6IGZpbGUgc3lzdGVtIHZvbHVtZSBuYW1lIAorCQkJCSAqICAgICBOLkIuIFRoaXMgbXVzdCBiZSAxMSBieXRlcyB0bworCQkJCSAqICAgICAgICAgIGNvbmZvcm0gd2l0aCB0aGUgT1MvMiBCb290U2VjdG9yCisJCQkJICogICAgICAgICAgcmVxdWlyZW1lbnRzCisJCQkJICovCisKKwkvKiBleHRlbmRmcygpIHBhcmFtZXRlciB1bmRlciBzX3N0YXRlICYgRk1fRVhURU5ERlMgKi8KKwlzNjQgc194c2l6ZTsJCS8qIDg6IGV4dGVuZGZzIHNfc2l6ZSAqLworCXB4ZF90IHNfeGZzY2tweGQ7CS8qIDg6IGV4dGVuZGZzIGZzY2tweGQgKi8KKwlweGRfdCBzX3hsb2dweGQ7CS8qIDg6IGV4dGVuZGZzIGxvZ3B4ZCAqLworCS8qIC0gMTI4IGJ5dGUgYm91bmRhcnkgLSAqLworCisJLyoKKwkgKiAgICAgIERGUyBWRlMgc3VwcG9ydCAocHJlbGltaW5hcnkpIAorCSAqLworCWNoYXIgc19hdHRhY2g7CQkvKiAxOiBWRlM6IGZsYWc6IHNldCB3aGVuIGFnZ3JlZ2F0ZSBpcyBhdHRhY2hlZAorCQkJCSAqLworCXU4IHJzcnZkNFs3XTsJCS8qIDc6IHJlc2VydmVkIC0gc2V0IHRvIDAgKi8KKworCXU2NCB0b3RhbFVzYWJsZTsJLyogODogVkZTOiB0b3RhbCBvZiAxSyBibG9ja3Mgd2hpY2ggYXJlCisJCQkJICogYXZhaWxhYmxlIHRvICJub3JtYWwiIChub24tcm9vdCkgdXNlcnMuCisJCQkJICovCisJdTY0IG1pbkZyZWU7CQkvKiA4OiBWRlM6ICMgb2YgMUsgYmxvY2tzIGhlbGQgaW4gcmVzZXJ2ZSBmb3IgCisJCQkJICogZXhjbHVzaXZlIHVzZSBvZiByb290LiAgVGhpcyB2YWx1ZSBjYW4gYmUgMCwKKwkJCQkgKiBhbmQgaWYgaXQgaXMgdGhlbiB0b3RhbFVzYWJsZSB3aWxsIGJlIGVxdWFsIAorCQkJCSAqIHRvICMgb2YgYmxvY2tzIGluIGFnZ3JlZ2F0ZS4gIEkgYmVsaWV2ZSB0aGlzCisJCQkJICogbWVhbnMgdGhhdCBtaW5GcmVlICsgdG90YWxVc2FibGUgPSAjIGJsb2Nrcy4KKwkJCQkgKiBJbiB0aGF0IGNhc2UsIHdlIGRvbid0IG5lZWQgdG8gc3RvcmUgYm90aCAKKwkJCQkgKiB0b3RhbFVzYWJsZSBhbmQgbWluRnJlZSBzaW5jZSB3ZSBjYW4gY29tcHV0ZQorCQkJCSAqIG9uZSBmcm9tIHRoZSBvdGhlci4gIEkgd291bGQgZ3Vlc3MgbWluRnJlZSAKKwkJCQkgKiB3b3VsZCBiZSB0aGUgb25lIHdlIHNob3VsZCBzdG9yZSwgYW5kIAorCQkJCSAqIHRvdGFsVXNhYmxlIHdvdWxkIGJlIHRoZSBvbmUgd2Ugc2hvdWxkIAorCQkJCSAqIGNvbXB1dGUuICAoSnVzdCBhIGd1ZXNzLi4uKQorCQkJCSAqLworCisJdTY0IHJlYWxGcmVlOwkJLyogODogVkZTOiAjIG9mIGZyZWUgMUsgYmxvY2tzIGNhbiBiZSB1c2VkIGJ5IAorCQkJCSAqICJub3JtYWwiIHVzZXJzLiAgSXQgbWF5IGJlIHRoaXMgaXMgc29tZXRoaW5nCisJCQkJICogd2Ugc2hvdWxkIGNvbXB1dGUgd2hlbiBhc2tlZCBmb3IgaW5zdGVhZCBvZiAKKwkJCQkgKiBzdG9yaW5nIGluIHRoZSBzdXBlcmJsb2NrLiAgSSBkb24ndCBrbm93IGhvdworCQkJCSAqIG9mdGVuIHRoaXMgaW5mb3JtYXRpb24gaXMgbmVlZGVkLgorCQkJCSAqLworCS8qCisJICogICAgICBncmFmZml0aSBhcmVhCisJICovCit9OworCisjZW5kaWYgLypfSF9KRlNfU1VQRVJCTE9DSyAqLwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9qZnMvamZzX3R5cGVzLmggYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL2pmcy9qZnNfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTc3ZjJhCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9qZnMvamZzX3R5cGVzLmgKQEAgLTAsMCArMSw1MjggQEAKKy8qCisgKiAgIENvcHlyaWdodCAoYykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyAgQ29ycC4sIDIwMDAKKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyAgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgIHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUKKyAqICAgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgIGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQorICovCisKKyNpZm5kZWYgX0hfSkZTX1RZUEVTCisjZGVmaW5lCV9IX0pGU19UWVBFUworCisvKgorICoJamZzX3R5cGVzLmg6CisgKgorICogYmFzaWMgdHlwZS91dGlsaXR5ICBkZWZpbml0aW9ucworICoKKyAqIG5vdGU6IHRoaXMgaGVhZGVyIGZpbGUgbXVzdCBiZSB0aGUgMXN0IGluY2x1ZGUgZmlsZQorICogb2YgSkZTIGluY2x1ZGUgbGlzdCBpbiBhbGwgSkZTIC5jIGZpbGUuCisgKi8KKworI2lmZGVmIF9KRlNfVVRJTElUWQorLyogdGhpcyBpcyBkZWZpbmVkIGluIGFzbS9ieXRlb3JkZXIuaCBmb3IgaTM4NiwgYnV0CisgKiBpcyBOT1QgZGVmaW5lZCBpbiBhc20vYnl0ZW9yZGVyLmggZm9yIHBwYyAobm9uLWtlcm5lbCkuCisgKiBVbnRpbCB0aGF0IGlzIGNoYW5nZWQsIHdlJ2xsIGRlZmluZSBpdCBoZXJlLiAgICAqLworI2RlZmluZSBfX0JZVEVPUkRFUl9IQVNfVTY0X18KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorLy8jaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBVbmlDaGFyOworI2Vsc2UKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2pmc19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L25scy5oPgorCisjaWZuZGVmIF9VTFNfVU5JQ0hBUl9ERUZJTkVECisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsMywwKSkKK3R5cGVkZWYgd2NoYXJfdCBVbmlDaGFyOworI2Vsc2UKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgVW5pQ2hhcjsKKyNlbmRpZgorI2RlZmluZSBfVUxTX1VOSUNIQVJfREVGSU5FRAorI2VuZGlmCisjZW5kaWYKKy8qICNpbmNsdWRlICJlbmRpYW4yNC5oIiAqLworCisvKgorICoJcHJpbWl0aXZlIHR5cGVzCisgKi8KKyNpZmRlZiBfSkZTX1VUSUxJVFkKK3R5cGVkZWYgaW50OF90IHM4OwordHlwZWRlZiB1aW50OF90IHU4OwordHlwZWRlZiBpbnQxNl90IHMxNjsKK3R5cGVkZWYgdWludDE2X3QgdTE2OwordHlwZWRlZiBpbnQzMl90IHMzMjsKK3R5cGVkZWYgdWludDMyX3QgdTMyOwordHlwZWRlZiBpbnQ2NF90IHM2NDsKK3R5cGVkZWYgdWludDY0X3QgdTY0OworCisjaWZuZGVmIF9VSU5UX1RZUEVTCisJLyogICAgICB1bmljb2RlIGluY2x1ZGVzIGFsc28gZGVmaW5lIHRoZXNlICovCit0eXBlZGVmIHUxNiB1aW50MTY7Cit0eXBlZGVmIHUzMiB1aW50MzI7CisjZGVmaW5lIF9VSU5UX1RZUEVTCisjZW5kaWYKKwordHlwZWRlZiBzOCBpbnQ4OwordHlwZWRlZiB1OCB1aW50ODsKK3R5cGVkZWYgczE2IGludDE2OwordHlwZWRlZiBzMzIgaW50MzI7Cit0eXBlZGVmIHM2NCBpbnQ2NDsKK3R5cGVkZWYgdTY0IHVpbnQ2NDsKKworI2VuZGlmCQkJCS8qIF9KRlNfVVRJTElUWSAqLworLyoKKyAqIEhvbGRvdmVycyBmcm9tIE9TLzIuICBUcnkgdG8gZ2V0IGF3YXkgZnJvbSB1c2luZyB0aGVzZSBhbHRvZ2V0aGVyLgorICovCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgVUxPTkc7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IFVTSE9SVDsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBVQ0hBUjsKK3R5cGVkZWYgdm9pZCAqUFZPSUQ7CisjZGVmaW5lIE1BWFBBVEhMRU4gICAgICAyNTUKKworCisvKgorICogQWxtb3N0IGlkZW50aWNhbCB0byBMaW51eCdzIHRpbWVzcGVjLCBidXQgbm90IHF1aXRlCisgKi8KK3N0cnVjdCB0aW1lc3RydWNfdCB7CisJdTMyIHR2X3NlYzsKKwl1MzIgdHZfbnNlYzsKK307CisKKy8qCisgKgloYW5keQorICovCisjdW5kZWYgTUlOCisjZGVmaW5lCU1JTihhLGIpICgoKGEpPChiKSk/KGEpOihiKSkKKyN1bmRlZiBNQVgKKyNkZWZpbmUJTUFYKGEsYikgKCgoYSk+KGIpKT8oYSk6KGIpKQorI3VuZGVmIFJPVU5EVVAKKyNkZWZpbmUJUk9VTkRVUCh4LCB5KQkoICgoeCkgKyAoKHkpIC0gMSkpICYgfigoeSkgLSAxKSApCisKKyNkZWZpbmUgTEVGVE1PU1RPTkUJMHg4MDAwMDAwMAorI2RlZmluZQlISUdIT1JERVIJMHg4MDAwMDAwMHUJLyogaGlnaCBvcmRlciBiaXQgb24gICAgICAgICAgICAqLworI2RlZmluZQlPTkVTCQkweGZmZmZmZmZmdQkvKiBhbGwgYml0IG9uICAgICAgICAgICAgICAgICAgICovCisKK3R5cGVkZWYgaW50IGJvb2xlYW5fdDsKKyNkZWZpbmUgVFJVRSAxCisjZGVmaW5lIEZBTFNFIDAKKworLyoKKyAqCWxvZ2ljYWwgeGQgKGx4ZCkKKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGxlbjoyNDsKKwl1bnNpZ25lZCBvZmYxOjg7CisJdTMyIG9mZjI7Cit9IGx4ZF90OworCisvKiBseGRfdCBmaWVsZCBjb25zdHJ1Y3Rpb24gKi8KKyNkZWZpbmUJTFhEbGVuZ3RoKGx4ZCwgbGVuZ3RoMzIpCSggKGx4ZCktPmxlbiA9IGxlbmd0aDMyICkKKyNkZWZpbmUJTFhEb2Zmc2V0KGx4ZCwgb2Zmc2V0NjQpXAore1wKKwkobHhkKS0+b2ZmMSA9ICgoczY0KW9mZnNldDY0KSA+PiAzMjtcCisJKGx4ZCktPm9mZjIgPSAob2Zmc2V0NjQpICYgMHhmZmZmZmZmZjtcCit9CisKKy8qIGx4ZF90IGZpZWxkIGV4dHJhY3Rpb24gKi8KKyNkZWZpbmUJbGVuZ3RoTFhEKGx4ZCkJKCAobHhkKS0+bGVuICkKKyNkZWZpbmUJb2Zmc2V0TFhEKGx4ZClcCisJKCAoKHM2NCkoKGx4ZCktPm9mZjEpKSA8PCAzMiB8IChseGQpLT5vZmYyICkKKworLyogbHhkIGxpc3QgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwlzMTYgbWF4bmx4ZDsKKwlzMTYgbmx4ZDsKKwlseGRfdCAqbHhkOworfSBseGRsaXN0X3Q7CisKKy8qCisgKglwaHlzaWNhbCB4ZCAocHhkKQorICovCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgbGVuOjI0OworCXVuc2lnbmVkIGFkZHIxOjg7CisJdTMyIGFkZHIyOworfSBweGRfdDsKKworLyogeGRfdCBmaWVsZCBjb25zdHJ1Y3Rpb24gKi8KKworI2RlZmluZQlQWERsZW5ndGgocHhkLCBsZW5ndGgzMikJKChweGQpLT5sZW4gPSBfX2NwdV90b19sZTI0KGxlbmd0aDMyKSkKKyNkZWZpbmUJUFhEYWRkcmVzcyhweGQsIGFkZHJlc3M2NClcCit7XAorCShweGQpLT5hZGRyMSA9ICgoczY0KWFkZHJlc3M2NCkgPj4gMzI7XAorCShweGQpLT5hZGRyMiA9IF9fY3B1X3RvX2xlMzIoKGFkZHJlc3M2NCkgJiAweGZmZmZmZmZmKTtcCit9CisKKy8qIHhkX3QgZmllbGQgZXh0cmFjdGlvbiAqLworI2RlZmluZQlsZW5ndGhQWEQocHhkKQlfX2xlMjRfdG9fY3B1KChweGQpLT5sZW4pCisjZGVmaW5lCWFkZHJlc3NQWEQocHhkKVwKKwkoICgoczY0KSgocHhkKS0+YWRkcjEpKSA8PCAzMiB8IF9fbGUzMl90b19jcHUoKHB4ZCktPmFkZHIyKSkKKworLyogcHhkIGxpc3QgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwlzMTYgbWF4bnB4ZDsKKwlzMTYgbnB4ZDsKKwlweGRfdCBweGRbOF07Cit9IHB4ZGxpc3RfdDsKKworCisvKgorICoJZGF0YSBleHRlbnQgZGVzY3JpcHRvciAoZHhkKQorICovCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgZmxhZzo4OwkvKiAxOiBmbGFncyAqLworCXVuc2lnbmVkIHJzcnZkOjI0OwkvKiAzOiAqLworCXUzMiBzaXplOwkJLyogNDogc2l6ZSBpbiBieXRlICovCisJdW5zaWduZWQgbGVuOjI0OwkvKiAzOiBsZW5ndGggaW4gdW5pdCBvZiBmc2Jsa3NpemUgKi8KKwl1bnNpZ25lZCBhZGRyMTo4OwkvKiAxOiBhZGRyZXNzIGluIHVuaXQgb2YgZnNibGtzaXplICovCisJdTMyIGFkZHIyOwkJLyogNDogYWRkcmVzcyBpbiB1bml0IG9mIGZzYmxrc2l6ZSAqLworfSBkeGRfdDsJCQkvKiAtIDE2IC0gKi8KKworLyogZHhkX3QgZmxhZ3MgKi8KKyNkZWZpbmUJRFhEX0lOREVYCTB4ODAJLyogQistdHJlZSBpbmRleCAqLworI2RlZmluZQlEWERfSU5MSU5FCTB4NDAJLyogaW4tbGluZSBkYXRhIGV4dGVudCAqLworI2RlZmluZQlEWERfRVhURU5UCTB4MjAJLyogb3V0LW9mLWxpbmUgc2luZ2xlIGV4dGVudCAqLworI2RlZmluZQlEWERfRklMRQkweDEwCS8qIG91dC1vZi1saW5lIGZpbGUgKGlub2RlKSAqLworI2RlZmluZSBEWERfQ09SUlVQVAkweDA4CS8qIEluY29uc2lzdGVuY3kgZGV0ZWN0ZWQgKi8KKworLyogZHhkX3QgZmllbGQgY29uc3RydWN0aW9uCisgKglDb252ZW5pZW50bHksIHRoZSBQWEQgbWFjcm9zIHdvcmsgZm9yIERYRAorICovCisjZGVmaW5lCURYRGxlbmd0aAlQWERsZW5ndGgKKyNkZWZpbmUJRFhEYWRkcmVzcwlQWERhZGRyZXNzCisjZGVmaW5lCWxlbmd0aERYRAlsZW5ndGhQWEQKKyNkZWZpbmUJYWRkcmVzc0RYRAlhZGRyZXNzUFhECisKKy8qCisgKiAgICAgIGRpcmVjdG9yeSBlbnRyeSBhcmd1bWVudAorICovCit0eXBlZGVmIHN0cnVjdCBjb21wb25lbnRfbmFtZSB7CisJaW50IG5hbWxlbjsKKwlVbmlDaGFyICpuYW1lOworfSBjb21wb25lbnRfdDsKKworCisvKgorICoJREFTRCBsaW1pdCBpbmZvcm1hdGlvbiAtIHN0b3JlZCBpbiBkaXJlY3RvcnkgaW5vZGUKKyAqLwordHlwZWRlZiBzdHJ1Y3QgZGFzZCB7CisJdTggdGhyZXNoOwkJLyogQWxlcnQgVGhyZXNob2xkIChpbiBwZXJjZW50KSAqLworCXU4IGRlbHRhOwkJLyogQWxlcnQgVGhyZXNob2xkIGRlbHRhIChpbiBwZXJjZW50KSAgICovCisJdTggcnNydmQxOworCXU4IGxpbWl0X2hpOwkJLyogREFTRCBsaW1pdCAoaW4gbG9naWNhbCBibG9ja3MpICAgICAgICovCisJdTMyIGxpbWl0X2xvOwkJLyogREFTRCBsaW1pdCAoaW4gbG9naWNhbCBibG9ja3MpICAgICAgICovCisJdTggcnNydmQyWzNdOworCXU4IHVzZWRfaGk7CQkvKiBEQVNEIHVzYWdlIChpbiBsb2dpY2FsIGJsb2NrcykgICAgICAgKi8KKwl1MzIgdXNlZF9sbzsJCS8qIERBU0QgdXNhZ2UgKGluIGxvZ2ljYWwgYmxvY2tzKSAgICAgICAqLworfSBkYXNkX3Q7CisKKyNkZWZpbmUgREFTRExJTUlUKGRhc2RwKSBcCisJKCgodTY0KSgoZGFzZHApLT5saW1pdF9oaSkgPDwgMzIpICsgX19sZTMyX3RvX2NwdSgoZGFzZHApLT5saW1pdF9sbykpCisjZGVmaW5lIHNldERBU0RMSU1JVChkYXNkcCwgbGltaXQpXAore1wKKwkoZGFzZHApLT5saW1pdF9oaSA9ICgodTY0KWxpbWl0KSA+PiAzMjtcCisJKGRhc2RwKS0+bGltaXRfbG8gPSBfX2NwdV90b19sZTMyKGxpbWl0KTtcCit9CisjZGVmaW5lIERBU0RVU0VEKGRhc2RwKSBcCisJKCgodTY0KSgoZGFzZHApLT51c2VkX2hpKSA8PCAzMikgKyBfX2xlMzJfdG9fY3B1KChkYXNkcCktPnVzZWRfbG8pKQorI2RlZmluZSBzZXREQVNEVVNFRChkYXNkcCwgdXNlZClcCit7XAorCShkYXNkcCktPnVzZWRfaGkgPSAoKHU2NCl1c2VkKSA+PiAzMjtcCisJKGRhc2RwKS0+dXNlZF9sbyA9IF9fY3B1X3RvX2xlMzIodXNlZCk7XAorfQorCisvKgorICoJCWNpcmN1bGFyIGRvdWJseS1saW5rZWQgbGlzdCAoY2RsbCkKKyAqCisgKiBBIGNpcmN1bGFyIGRvdWJseS1saW5rZWQgbGlzdCAoY2RsbCkgaXMgYW5jaG9yZWQgYnkgYSBwYWlyIG9mIHBvaW50ZXJzLAorICogb25lIHRvIHRoZSBoZWFkIG9mIHRoZSBsaXN0IGFuZCB0aGUgb3RoZXIgdG8gdGhlIHRhaWwgb2YgdGhlIGxpc3QuCisgKiBUaGUgZWxlbWVudHMgYXJlIGRvdWJseSBsaW5rZWQgc28gdGhhdCBhbiBhcmJpdHJhcnkgZWxlbWVudCBjYW4gYmUKKyAqIHJlbW92ZWQgd2l0aG91dCBhIG5lZWQgdG8gdHJhdmVyc2UgdGhlIGxpc3QuCisgKiBOZXcgZWxlbWVudHMgY2FuIGJlIGFkZGVkIHRvIHRoZSBsaXN0IGJlZm9yZSBvciBhZnRlciBhbiBleGlzdGluZyBlbGVtZW50LAorICogYXQgdGhlIGhlYWQgb2YgdGhlIGxpc3QsIG9yIGF0IHRoZSB0YWlsIG9mIHRoZSBsaXN0LgorICogQSBjaXJjbGUgcXVldWUgbWF5IGJlIHRyYXZlcnNlZCBpbiBlaXRoZXIgZGlyZWN0aW9uLgorICoKKyAqICstLS0tLS0tLS0tKyAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKiB8ICAgICAgICAgIHwgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogKy0+Ky0tLS0tKyB8ICAgICAgICArLT4rLS0tLS0rICArLT4rLS0tLS0rICAgICstPistLS0tLSsgIHwKKyAqIHwgIHwgIGggICstKyAgICAgICAgfCAgfCAgaCAgKy0tKyAgfCAgbiAgKy0tLS0rICB8ICBuICArLS0rCisgKiB8ICArLS0tLS0rICAgICAgICAgIHwgICstLS0tLSsgIHwgICstLS0tLSsgICAgfCAgKy0tLS0tKworICogfCAgfCAgdCAgKy0rICAgICArLS0tLS0rICB0ICB8ICB8ICB8ICBwICArLS0rIHwgIHwgIHAgICstLSsKKyAqIHwgICstLS0tLSsgfCAgICAgfCAgfCAgKy0tLS0tKyAgfCAgKy0tLS0tKyAgfCB8ICArLS0tLS0rICB8CisgKiArLS0tLS0tLS0tLSsgICAgIHwgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgfCAgICAgICAgICAgfAorICogICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgIHwgICAgICAgICAgIHwKKyAqICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKiAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqLworLyoKKyAqCWRlZmluZSBoZWFkZXIKKyAqCisgKiBsaXN0IGhlYWRlciBmaWVsZCBkZWZpbml0aW9uIGluIGhlYWRlciBlbGVtZW50OgorICoKKyAqIHR5cGUgLSB0eXBlIG9mIGxpc3QgZWxlbWVudCBzdHJ1Y3QgZW1iZWRkaW5nIHRoZSBsaW5rIGZpZWxkCisgKi8KKyNkZWZpbmUgQ0RMTF9IRUFERVIodHlwZSlcCitzdHJ1Y3Qge1wKKwlzdHJ1Y3QgdHlwZSAqaGVhZDtcCisJc3RydWN0IHR5cGUgKnRhaWw7XAorfQorCitzdHJ1Y3QgY2RsbF9oZWFkZXIgeworCXN0cnVjdCBjZGxsX2hlYWRlciAqaGVhZDsKKwlzdHJ1Y3QgY2RsbF9oZWFkZXIgKnRhaWw7Cit9OworCisvKgorICoJZGVmaW5lIGxpbmsKKyAqCisgKiBsaXN0IGxpbmsgZmllbGQgZGVmaW5pdGlvbiBpbiBsaXN0IGVsZW1lbnQ6CisgKgorICogdHlwZSAtIHR5cGUgb2YgcGFyZW50IGxpc3QgZWxlbWVudCBzdHJ1Y3QgZW1iZWRkaW5nIHRoZSBsaW5rIGZpZWxkCisgKi8KKyNkZWZpbmUgQ0RMTF9FTlRSWSh0eXBlKVwKK3N0cnVjdCB7XAorCXN0cnVjdCB0eXBlICpuZXh0O1wKKwlzdHJ1Y3QgdHlwZSAqcHJldjtcCit9CisKK3N0cnVjdCBjZGxsX2VudHJ5IHsKKwlzdHJ1Y3QgY2RsbF9lbnRyeSAqbmV4dDsKKwlzdHJ1Y3QgY2RsbF9lbnRyeSAqcHJldjsKK307CisKKy8qCisgKglpbml0aWFsaXplIGhlYWRlcgorICoKKyAqIGhlYWRlciAtIHB0ciB0byB0aGUgaGVhZGVyIGZpZWxkIGluIHRoZSBoZWFkZXIgZWxlbWVudAorICovCisjZGVmaW5lCUNETExfSU5JVChoZWFkZXIpIHtcCisJKGhlYWRlciktPmhlYWQgPSAodm9pZCAqKShoZWFkZXIpO1wKKwkoaGVhZGVyKS0+dGFpbCA9ICh2b2lkICopKGhlYWRlcik7XAorfQorCisvKgorICoJc2NhbiBsaXN0CisgKgorICogaGVhZGVyIC0gcHRyIHRvIHRoZSBoZWFkZXIgZmllbGQgaW4gdGhlIGhlYWRlciBlbGVtZW50CisgKiBlbG0gLSBwdHIgdG8gdGhlIGVsZW1lbnQgdG8gYmUgaW5zZXJ0ZWQKKyAqIGZpZWxkIC0gbmFtZSBvZiB0aGUgbGluayBmaWVsZCBpbiB0aGUgbGlzdCBlbGVtZW50CisgKgorICogc3RydWN0IGhlYWRlcl9jb250YWluZXIJKmNvbnRhaW5lcjsKKyAqIHN0cnVjdCBoZWFkZXJfdHlwZQkqaGVhZGVyOworICogc3RydWN0IGVsZW1lbnRfdHlwZQkqZWxtOworICoKKyAqIGhlYWRlciA9ICZjb250YWluZXItPmhlYWRlcl9maWVsZDsKKyAqIGZvciAoZWxtID0gaGVhZGVyLT5oZWFkOyBlbG0gIT0gKHZvaWQgKiloZWFkZXI7IGVsbSA9IGVsbS0+ZmllbGQubmV4dCkKKyAqLworCisvKgorICoJaW5zZXJ0IDxlbG0+IGF0IGhlYWQgb2YgbGlzdCBhbmNob3JlZCBhdCA8aGVhZGVyPgorICoKKyAqIGhlYWRlciAtIHB0ciB0byB0aGUgaGVhZGVyIGZpZWxkIGluIHRoZSBoZWFkZXIgZWxlbWVudAorICogZWxtIC0gcHRyIHRvIHRoZSBsaXN0IGVsZW1lbnQgdG8gYmUgaW5zZXJ0ZWQKKyAqIGZpZWxkIC0gbmFtZSBvZiB0aGUgbGluayBmaWVsZCBpbiB0aGUgbGlzdCBlbGVtZW50CisgKi8KKyNkZWZpbmUgQ0RMTF9JTlNFUlRfSEVBRChoZWFkZXIsIGVsbSwgZmllbGQpIHtcCisJKGVsbSktPmZpZWxkLm5leHQgPSAoaGVhZGVyKS0+aGVhZDtcCisJKGVsbSktPmZpZWxkLnByZXYgPSAodm9pZCAqKShoZWFkZXIpO1wKKwlpZiAoKGhlYWRlciktPnRhaWwgPT0gKHZvaWQgKikoaGVhZGVyKSlcCisJCShoZWFkZXIpLT50YWlsID0gKGVsbSk7XAorCWVsc2VcCisJCShoZWFkZXIpLT5oZWFkLT5maWVsZC5wcmV2ID0gKGVsbSk7XAorCShoZWFkZXIpLT5oZWFkID0gKGVsbSk7XAorfQorCisvKgorICoJaW5zZXJ0IDxlbG0+IGF0IHRhaWwgb2YgbGlzdCBhbmNob3JlZCBhdCA8aGVhZGVyPgorICoKKyAqIGhlYWRlciAtIHB0ciB0byB0aGUgaGVhZGVyIGZpZWxkIGluIHRoZSBoZWFkZXIgZWxlbWVudAorICogZWxtIC0gcHRyIHRvIHRoZSBsaXN0IGVsZW1lbnQgdG8gYmUgaW5zZXJ0ZWQKKyAqIGZpZWxkIC0gbmFtZSBvZiB0aGUgbGluayBmaWVsZCBpbiB0aGUgbGlzdCBlbGVtZW50CisgKi8KKyNkZWZpbmUgQ0RMTF9JTlNFUlRfVEFJTChoZWFkZXIsIGVsbSwgZmllbGQpIHtcCisJKGVsbSktPmZpZWxkLm5leHQgPSAodm9pZCAqKShoZWFkZXIpO1wKKwkoZWxtKS0+ZmllbGQucHJldiA9IChoZWFkZXIpLT50YWlsO1wKKwlpZiAoKGhlYWRlciktPmhlYWQgPT0gKHZvaWQgKikoaGVhZGVyKSlcCisJCShoZWFkZXIpLT5oZWFkID0gKGVsbSk7XAorCWVsc2VcCisJCShoZWFkZXIpLT50YWlsLT5maWVsZC5uZXh0ID0gKGVsbSk7XAorCShoZWFkZXIpLT50YWlsID0gKGVsbSk7XAorfQorCisvKgorICoJaW5zZXJ0IDxlbG0+IGFmdGVyIDxsaXN0ZWxtPiBvZiBsaXN0IGFuY2hvcmVkIGF0IDxoZWFkZXI+CisgKgorICogaGVhZGVyIC0gcHRyIHRvIHRoZSBoZWFkZXIgZmllbGQgaW4gdGhlIGhlYWRlciBlbGVtZW50CisgKiBsaXN0ZWxtIC0gcHRyIHRvIHRoZSBsaXN0IGVsZW1lbnQgYXQgaW5zZXJ0aW9uIHBvaW50CisgKiBlbG0gLSBwdHIgdG8gdGhlIGxpc3QgZWxlbWVudCB0byBiZSBpbnNlcnRlZAorICogZmllbGQgLSBuYW1lIG9mIHRoZSBsaW5rIGZpZWxkIGluIHRoZSBsaXN0IGVsZW1lbnQKKyAqLworI2RlZmluZSBDRExMX0lOU0VSVF9BRlRFUihoZWFkZXIsIGxpc3RlbG0sIGVsbSwgZmllbGQpIHtcCisJKGVsbSktPmZpZWxkLm5leHQgPSAobGlzdGVsbSktPmZpZWxkLm5leHQ7XAorCShlbG0pLT5maWVsZC5wcmV2ID0gKGxpc3RlbG0pO1wKKwlpZiAoKGxpc3RlbG0pLT5maWVsZC5uZXh0ID09ICh2b2lkICopKGhlYWRlcikpXAorCQkoaGVhZGVyKS0+dGFpbCA9IChlbG0pO1wKKwllbHNlXAorCQkobGlzdGVsbSktPmZpZWxkLm5leHQtPmZpZWxkLnByZXYgPSAoZWxtKTtcCisJKGxpc3RlbG0pLT5maWVsZC5uZXh0ID0gKGVsbSk7XAorfQorCisvKgorICoJaW5zZXJ0IDxlbG0+IGJlZm9yZSA8bGlzdGVsbT4gb2YgbGlzdCBhbmNob3JlZCBhdCA8aGVhZGVyPgorICoKKyAqIGhlYWRlciAtIHB0ciB0byB0aGUgaGVhZGVyIGZpZWxkIGluIHRoZSBoZWFkZXIgZWxlbWVudAorICogbGlzdGVsbSAtIHB0ciB0byBsaXN0IGVsZW1lbnQgYXQgaW5zZXJ0aW9uIHBvaW50CisgKiBlbG0gLSBwdHIgdG8gdGhlIGVsZW1lbnQgdG8gYmUgaW5zZXJ0ZWQKKyAqIGZpZWxkIC0gbmFtZSBvZiB0aGUgbGluayBmaWVsZCBpbiB0aGUgbGlzdCBlbGVtZW50CisgKi8KKyNkZWZpbmUgQ0RMTF9JTlNFUlRfQkVGT1JFKGhlYWRlciwgbGlzdGVsbSwgZWxtLCBmaWVsZCkge1wKKwkoZWxtKS0+ZmllbGQubmV4dCA9IChsaXN0ZWxtKTtcCisJKGVsbSktPmZpZWxkLnByZXYgPSAobGlzdGVsbSktPmZpZWxkLnByZXY7XAorCWlmICgobGlzdGVsbSktPmZpZWxkLnByZXYgPT0gKHZvaWQgKikoaGVhZGVyKSlcCisJCShoZWFkZXIpLT5oZWFkID0gKGVsbSk7XAorCWVsc2VcCisJCShsaXN0ZWxtKS0+ZmllbGQucHJldi0+ZmllbGQubmV4dCA9IChlbG0pO1wKKwkobGlzdGVsbSktPmZpZWxkLnByZXYgPSAoZWxtKTtcCit9CisKKy8qCisgKglyZW1vdmUgPGVsbT4gZnJvbSBsaXN0IGFuY2hvcmVkIGF0IDxoZWFkZXI+CisgKgorICogaGVhZGVyIC0gcHRyIHRvIHRoZSBoZWFkZXIgZmllbGQgaW4gdGhlIGhlYWRlciBlbGVtZW50CisgKiBlbG0gLSBwdHIgdG8gdGhlIGxpc3QgZWxlbWVudCB0byBiZSByZW1vdmVkCisgKiBmaWVsZCAtIG5hbWUgb2YgdGhlIGxpbmsgZmllbGQgaW4gdGhlIGxpc3QgZWxlbWVudAorICovCisjZGVmaW5lCUNETExfUkVNT1ZFKGhlYWRlciwgZWxtLCBmaWVsZCkge1wKKwlpZiAoKGVsbSktPmZpZWxkLm5leHQgPT0gKHZvaWQgKikoaGVhZGVyKSlcCisJCShoZWFkZXIpLT50YWlsID0gKGVsbSktPmZpZWxkLnByZXY7XAorCWVsc2VcCisJCShlbG0pLT5maWVsZC5uZXh0LT5maWVsZC5wcmV2ID0gKGVsbSktPmZpZWxkLnByZXY7XAorCWlmICgoZWxtKS0+ZmllbGQucHJldiA9PSAodm9pZCAqKShoZWFkZXIpKVwKKwkJKGhlYWRlciktPmhlYWQgPSAoZWxtKS0+ZmllbGQubmV4dDtcCisJZWxzZVwKKwkJKGVsbSktPmZpZWxkLnByZXYtPmZpZWxkLm5leHQgPSAoZWxtKS0+ZmllbGQubmV4dDtcCit9CisKKyNkZWZpbmUgQ0RMTF9NT1ZFX1RPX0hFQUQoaGVhZGVyLCBlbG0sIGZpZWxkKSB7XAorCWlmICgoZWxtKS0+ZmllbGQucHJldiAhPSAodm9pZCAqKShoZWFkZXIpKVwKKwl7XAorCQlpZiAoKGVsbSktPmZpZWxkLm5leHQgPT0gKHZvaWQgKikoaGVhZGVyKSlcCisJCQkoaGVhZGVyKS0+dGFpbCA9IChlbG0pLT5maWVsZC5wcmV2O1wKKwkJZWxzZVwKKwkJCShlbG0pLT5maWVsZC5uZXh0LT5maWVsZC5wcmV2ID0gKGVsbSktPmZpZWxkLnByZXY7XAorCQkoZWxtKS0+ZmllbGQucHJldi0+ZmllbGQubmV4dCA9IChlbG0pLT5maWVsZC5uZXh0O1wKKwkJKGVsbSktPmZpZWxkLm5leHQgPSAoaGVhZGVyKS0+aGVhZDtcCisJCShlbG0pLT5maWVsZC5wcmV2ID0gKHZvaWQgKikoaGVhZGVyKTtcCisJCShoZWFkZXIpLT5oZWFkLT5maWVsZC5wcmV2ID0gKGVsbSk7XAorCQkoaGVhZGVyKS0+aGVhZCA9IChlbG0pO1wKKwl9XAorfQorCisjZGVmaW5lIENETExfTU9WRV9UT19UQUlMKGhlYWRlciwgZWxtLCBmaWVsZCkge1wKKwlpZiAoKGVsbSktPmZpZWxkLm5leHQgIT0gKHZvaWQgKikoaGVhZGVyKSlcCisJe1wKKwkJKGVsbSktPmZpZWxkLm5leHQtPmZpZWxkLnByZXYgPSAoZWxtKS0+ZmllbGQucHJldjtcCisJCWlmICgoZWxtKS0+ZmllbGQucHJldiA9PSAodm9pZCAqKShoZWFkZXIpKVwKKwkJCShoZWFkZXIpLT5oZWFkID0gKGVsbSktPmZpZWxkLm5leHQ7XAorCQllbHNlXAorCQkJKGVsbSktPmZpZWxkLnByZXYtPmZpZWxkLm5leHQgPSAoZWxtKS0+ZmllbGQubmV4dDtcCisJCShlbG0pLT5maWVsZC5uZXh0ID0gKHZvaWQgKikoaGVhZGVyKTtcCisJCShlbG0pLT5maWVsZC5wcmV2ID0gKGhlYWRlciktPnRhaWw7XAorCQkoaGVhZGVyKS0+dGFpbC0+ZmllbGQubmV4dCA9IChlbG0pO1wKKwkJKGhlYWRlciktPnRhaWwgPSAoZWxtKTtcCisJfVwKK30KKworLyoKKyAqCW9ycGhhbiBsaXN0IGVsZW1lbnQKKyAqLworI2RlZmluZQlDRExMX1NFTEYoZWxtLCBmaWVsZClcCisJKGVsbSktPmZpZWxkLm5leHQgPSAoZWxtKS0+ZmllbGQucHJldiA9IChlbG0pOworCisKKy8qCisgKgkJc2luZ2xlIGhlYWQgZG91Ymx5LWxpbmtlZCBsaXN0CisgKgorICogQSBsaXN0IGlzIGhlYWRlZCBieSBhIHNpbmdsZSBoZWFkIHBvaW50ZXIuCisgKiBUaGUgZWxlbWVudHMgYXJlIGRvdWJseSBsaW5rZWQgc28gdGhhdCBhbiBhcmJpdHJhcnkgZWxlbWVudCBjYW4gYmUKKyAqIHJlbW92ZWQgd2l0aG91dCBhIG5lZWQgdG8gdHJhdmVyc2UgdGhlIGxpc3QuCisgKiBOZXcgZWxlbWVudHMgY2FuIGJlIGFkZGVkIHRvIHRoZSBsaXN0IGF0IHRoZSBoZWFkIG9mIHRoZSBsaXN0LCBvcgorICogYWZ0ZXIgYW4gZXhpc3RpbmcgZWxlbWVudCAoTk8gaW5zZXJ0IGF0IHRhaWwpLgorICogQSBsaXN0IG1heSBvbmx5IGJlIHRyYXZlcnNlZCBpbiB0aGUgZm9yd2FyZCBkaXJlY3Rpb24uCisgKiAobm90ZTogdGhlIGxpc3QgaXMgTlVMTCB0ZXJtaW5hdGVkIGluIG5leHQgZmllbGQuKQorICoKKyAqICAgKy0tLS0tKyAgICAgICAgICArLT4rLS0tLS0rICArLT4rLS0tLS0rICAgICstPistLS0tLSsKKyAqICAgfCBOVUxMfCAgICAgICAgICB8ICB8ICBoICArLS0rICB8ICBuICArLS0tLSsgIHwgTlVMTHwKKyAqICAgKy0tLS0tKyAgICAgICAgICB8ICArLS0tLS0rICB8ICArLS0tLS0rICAgICAgICstLS0tLSsKKyAqICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICB8ICBwICArLS0rICAgIHwgIHAgICstLSsKKyAqICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICArLS0tLS0rICB8ICAgICstLS0tLSsgIHwKKyAqICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqLworI2RlZmluZSBMSVNUX0hFQURFUih0eXBlKVwKK3N0cnVjdCB7XAorCXN0cnVjdCB0eXBlICpoZWFkO1wKK30KKworI2RlZmluZSBMSVNUX0VOVFJZKHR5cGUpXAorc3RydWN0IHtcCisJc3RydWN0IHR5cGUgKm5leHQ7XAorCXN0cnVjdCB0eXBlICoqcHJldjtcCit9CisKKyNkZWZpbmUJTElTVF9JTklUKGhlYWRlcikJeyAoaGVhZGVyKS0+aGVhZCA9IE5VTEw7IH0KKworLyoKKyAqCXNjYW4gbGlzdAorICoKKyAqIGhlYWRlciAtIHB0ciB0byB0aGUgaGVhZGVyIChmaWVsZCBpbiBoZWFkZXIgZWxlbWVudCkKKyAqIGVsbSAtIHB0ciB0byB0aGUgZWxlbWVudCB0byBiZSBpbnNlcnRlZAorICogZmllbGQgLSBuYW1lIG9mIHRoZSBsaW5rIGZpZWxkIGluIGxpc3QgZWxlbWVudAorICoKKyAqIHN0cnVjdCBoZWFkZXJfY29udGFpbmVyCSpjb250YWluZXI7CisgKiBzdHJ1Y3QgaGVhZGVyX3R5cGUJKmhlYWRlcjsKKyAqIHN0cnVjdCBlbGVtZW50X3R5cGUJKmVsbTsKKyAqCisgKiBoZWFkZXIgPSAmY29udGFpbmVyLT5oZWFkZXJfZmllbGQ7CisgKiBmb3IgKGVsbSA9IGhlYWRlci0+aGVhZDsgZWxtOyBlbG0gPSBlbG0tPmZpZWxkLm5leHQpCisgKi8KKworI2RlZmluZSBMSVNUX0lOU0VSVF9IRUFEKGhlYWRlciwgZWxtLCBmaWVsZCkge1wKKwlpZiAoKChlbG0pLT5maWVsZC5uZXh0ID0gKGhlYWRlciktPmhlYWQpICE9IE5VTEwpXAorCQkoaGVhZGVyKS0+aGVhZC0+ZmllbGQucHJldiA9ICYoZWxtKS0+ZmllbGQubmV4dDtcCisJKGhlYWRlciktPmhlYWQgPSAoZWxtKTtcCisJKGVsbSktPmZpZWxkLnByZXYgPSAmKGhlYWRlciktPmhlYWQ7XAorfQorCisjZGVmaW5lIExJU1RfSU5TRVJUX0FGVEVSKGxpc3RlbG0sIGVsbSwgZmllbGQpIHtcCisJaWYgKCgoZWxtKS0+ZmllbGQubmV4dCA9IChsaXN0ZWxtKS0+ZmllbGQubmV4dCkgIT0gTlVMTClcCisJCShsaXN0ZWxtKS0+ZmllbGQubmV4dC0+ZmllbGQucHJldiA9ICYoZWxtKS0+ZmllbGQubmV4dDtcCisJKGxpc3RlbG0pLT5maWVsZC5uZXh0ID0gKGVsbSk7XAorCShlbG0pLT5maWVsZC5wcmV2ID0gJihsaXN0ZWxtKS0+ZmllbGQubmV4dDtcCit9CisKKyNkZWZpbmUgTElTVF9SRU1PVkUoZWxtLCBmaWVsZCkge1wKKwlpZiAoKGVsbSktPmZpZWxkLm5leHQgIT0gTlVMTClcCisJCShlbG0pLT5maWVsZC5uZXh0LT5maWVsZC5wcmV2ID0gKGVsbSktPmZpZWxkLnByZXY7XAorCSooZWxtKS0+ZmllbGQucHJldiA9IChlbG0pLT5maWVsZC5uZXh0O1wKK30KKworI2RlZmluZSBMSVNUX1NFTEYoZWxtLCBmaWVsZCkge1wKKwkoZWxtKS0+ZmllbGQubmV4dCA9IE5VTEw7XAorCShlbG0pLT5maWVsZC5wcmV2ID0gJihlbG0pLT5maWVsZC5uZXh0O1wKK30KKworI2VuZGlmCQkJCS8qICFfSF9KRlNfVFlQRVMgKi8KZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvbGludXhfc3dhcC9NYWtlZmlsZS5hbSBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvbGludXhfc3dhcC9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzY2ZmM2Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9saW51eF9zd2FwL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsOCBAQAorcGFydGVkaW5jbHVkZWRpcgk9IC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlCisKK25vaW5zdF9MVExJQlJBUklFUwk9IGxpYmxpbnV4c3dhcC5sYQorbGlibGludXhzd2FwX2xhX1NPVVJDRVMJPSBsaW51eF9zd2FwLmMKKworSU5DTFVERVMgPSAkKHBhcnRlZGluY2x1ZGVkaXIpICQoSU5UTElOQ1MpCisKK01BSU5UQUlORVJDTEVBTkZJTEVTID0gTWFrZWZpbGUuaW4KZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvbGludXhfc3dhcC9NYWtlZmlsZS5pbiBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvbGludXhfc3dhcC9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWFhYzczCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9saW51eF9zd2FwL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNjI0IEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjEwIGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK3N1YmRpciA9IGxpYnBhcnRlZC9mcy9saW51eF9zd2FwCitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200L2Fic29sdXRlLWhlYWRlci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9hbGxvY2EubTQgJCh0b3Bfc3JjZGlyKS9tNC9hc3NlcnQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvYXRleGl0Lm00ICQodG9wX3NyY2RpcikvbTQvY2FsbG9jLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2Nsb3NlLXN0cmVhbS5tNCAkKHRvcF9zcmNkaXIpL200L2Nsb3Nlb3V0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NvZGVzZXQubTQgJCh0b3Bfc3JjZGlyKS9tNC9jb25maWctaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9kaXJuYW1lLm00ICQodG9wX3NyY2RpcikvbTQvZG9zLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2RvdWJsZS1zbGFzaC1yb290Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2Vycm9yLm00ICQodG9wX3NyY2RpcikvbTQvZXhpdGZhaWwubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZXh0ZW5zaW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2ZwZW5kaW5nLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ZyZWUubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXRvcHQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCAkKHRvcF9zcmNkaXIpL200L2dsaWJjMjEubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZ251bGliLWNvbW1vbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9nbnVsaWItY29tcC5tNCAkKHRvcF9zcmNkaXIpL200L2ljb252Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2lubGluZS5tNCAkKHRvcF9zcmNkaXIpL200L2ludHR5cGVzLXByaS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pbnR0eXBlcy5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1pZ25vcmUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sb2NhbGNoYXJzZXQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbG9uZy1vcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbG9uZ2xvbmcubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWJydG93Yy5tNCAkKHRvcF9zcmNkaXIpL200L21ic3RhdGVfdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tZW1jaHIubTQgJCh0b3Bfc3JjZGlyKS9tNC9tZW1jbXAubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWVtY3B5Lm00ICQodG9wX3NyY2RpcikvbTQvbWVtbW92ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tZW1zZXQubTQgJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcG8ubTQgJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9xdW90ZWFyZy5tNCAkKHRvcF9zcmNkaXIpL200L3JlZ2V4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3JlbmFtZS5tNCAkKHRvcF9zcmNkaXIpL200L3JwbWF0Y2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc2FmZS1yZWFkLm00ICQodG9wX3NyY2RpcikvbTQvc2FmZS13cml0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zc2l6ZV90Lm00ICQodG9wX3NyY2RpcikvbTQvc3RkYXJnLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0ZGJvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGRpbnQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RkbGliX2gubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHJjc3BuLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0cmluZ19oLm00ICQodG9wX3NyY2RpcikvbTQvc3RybmR1cC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdHJubGVuLm00ICQodG9wX3NyY2RpcikvbTQvc3RydG9kLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0cnRvbC5tNCAkKHRvcF9zcmNkaXIpL200L3VuaXN0ZF9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3V0aW1idWYubTQgJCh0b3Bfc3JjZGlyKS9tNC91dGltZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC91dGltZXMtbnVsbC5tNCAkKHRvcF9zcmNkaXIpL200L3djaGFyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3djdHlwZS5tNCAkKHRvcF9zcmNkaXIpL200L3dpbnRfdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC94YWxsb2MubTQgJCh0b3Bfc3JjZGlyKS9tNC94c3RybmR1cC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oCitDT05GSUdfQ0xFQU5fRklMRVMgPQorTFRMSUJSQVJJRVMgPSAkKG5vaW5zdF9MVExJQlJBUklFUykKK2xpYmxpbnV4c3dhcF9sYV9MSUJBREQgPQorYW1fbGlibGludXhzd2FwX2xhX09CSkVDVFMgPSBsaW51eF9zd2FwLmxvCitsaWJsaW51eHN3YXBfbGFfT0JKRUNUUyA9ICQoYW1fbGlibGludXhzd2FwX2xhX09CSkVDVFMpCitERUZBVUxUX0lOQ0xVREVTID0gLUkuIC1JJCh0b3BfYnVpbGRkaXIpL2xpYkBhbV9faXNyY0AKK2RlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9kZXBjb21wCithbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcworQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCisJJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorTFRDT01QSUxFID0gJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIFwKKwktLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgXAorCSQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0NDTEQgPSAkKENDKQorTElOSyA9ICQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCisJLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgXAorCSQoTERGTEFHUykgLW8gJEAKK1NPVVJDRVMgPSAkKGxpYmxpbnV4c3dhcF9sYV9TT1VSQ0VTKQorRElTVF9TT1VSQ0VTID0gJChsaWJsaW51eHN3YXBfbGFfU09VUkNFUykKK0VUQUdTID0gZXRhZ3MKK0NUQUdTID0gY3RhZ3MKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitBQlNPTFVURV9JTlRUWVBFU19IID0gQEFCU09MVVRFX0lOVFRZUEVTX0hACitBQlNPTFVURV9TVERJTlRfSCA9IEBBQlNPTFVURV9TVERJTlRfSEAKK0FCU09MVVRFX1NURExJQl9IID0gQEFCU09MVVRFX1NURExJQl9IQAorQUJTT0xVVEVfU1RSSU5HX0ggPSBAQUJTT0xVVEVfU1RSSU5HX0hACitBQlNPTFVURV9VTklTVERfSCA9IEBBQlNPTFVURV9VTklTVERfSEAKK0FCU09MVVRFX1dDSEFSX0ggPSBAQUJTT0xVVEVfV0NIQVJfSEAKK0FCU09MVVRFX1dDVFlQRV9IID0gQEFCU09MVVRFX1dDVFlQRV9IQAorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQUxMT0NBID0gQEFMTE9DQUAKK0FMTE9DQV9IID0gQEFMTE9DQV9IQAorQU1UQVIgPSBAQU1UQVJACitBUiA9IEBBUkAKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBV0sgPSBAQVdLQAorQklUU0laRU9GX1BUUkRJRkZfVCA9IEBCSVRTSVpFT0ZfUFRSRElGRl9UQAorQklUU0laRU9GX1NJR19BVE9NSUNfVCA9IEBCSVRTSVpFT0ZfU0lHX0FUT01JQ19UQAorQklUU0laRU9GX1NJWkVfVCA9IEBCSVRTSVpFT0ZfU0laRV9UQAorQklUU0laRU9GX1dDSEFSX1QgPSBAQklUU0laRU9GX1dDSEFSX1RACitCSVRTSVpFT0ZfV0lOVF9UID0gQEJJVFNJWkVPRl9XSU5UX1RACitCVUlMRElORk8gPSBAQlVJTERJTkZPQAorQ0MgPSBAQ0NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NIRUNLX0NGTEFHUyA9IEBDSEVDS19DRkxBR1NACitDSEVDS19MSUJTID0gQENIRUNLX0xJQlNACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitETF9MSUJTID0gQERMX0xJQlNACitETV9MSUJTID0gQERNX0xJQlNACitFQ0hPID0gQEVDSE9ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VYRUVYVCA9IEBFWEVFWFRACitGNzcgPSBARjc3QAorRkZMQUdTID0gQEZGTEFHU0AKK0dFVE9QVF9IID0gQEdFVE9QVF9IQAorR0xJQkMyMSA9IEBHTElCQzIxQAorR01TR0ZNVCA9IEBHTVNHRk1UQAorR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACitHTlVMSUJfQ0hPV04gPSBAR05VTElCX0NIT1dOQAorR05VTElCX0RVUDIgPSBAR05VTElCX0RVUDJACitHTlVMSUJfRkNIRElSID0gQEdOVUxJQl9GQ0hESVJACitHTlVMSUJfRlRSVU5DQVRFID0gQEdOVUxJQl9GVFJVTkNBVEVACitHTlVMSUJfR0VUQ1dEID0gQEdOVUxJQl9HRVRDV0RACitHTlVMSUJfR0VUTE9HSU5fUiA9IEBHTlVMSUJfR0VUTE9HSU5fUkAKK0dOVUxJQl9HRVRTVUJPUFQgPSBAR05VTElCX0dFVFNVQk9QVEAKK0dOVUxJQl9JTUFYQUJTID0gQEdOVUxJQl9JTUFYQUJTQAorR05VTElCX0lNQVhESVYgPSBAR05VTElCX0lNQVhESVZACitHTlVMSUJfTUJTQ0FTRUNNUCA9IEBHTlVMSUJfTUJTQ0FTRUNNUEAKK0dOVUxJQl9NQlNDQVNFU1RSID0gQEdOVUxJQl9NQlNDQVNFU1RSQAorR05VTElCX01CU0NIUiA9IEBHTlVMSUJfTUJTQ0hSQAorR05VTElCX01CU0NTUE4gPSBAR05VTElCX01CU0NTUE5ACitHTlVMSUJfTUJTTEVOID0gQEdOVUxJQl9NQlNMRU5ACitHTlVMSUJfTUJTTkNBU0VDTVAgPSBAR05VTElCX01CU05DQVNFQ01QQAorR05VTElCX01CU1BCUksgPSBAR05VTElCX01CU1BCUktACitHTlVMSUJfTUJTUENBU0VDTVAgPSBAR05VTElCX01CU1BDQVNFQ01QQAorR05VTElCX01CU1JDSFIgPSBAR05VTElCX01CU1JDSFJACitHTlVMSUJfTUJTU0VQID0gQEdOVUxJQl9NQlNTRVBACitHTlVMSUJfTUJTU1BOID0gQEdOVUxJQl9NQlNTUE5ACitHTlVMSUJfTUJTU1RSID0gQEdOVUxJQl9NQlNTVFJACitHTlVMSUJfTUJTVE9LX1IgPSBAR05VTElCX01CU1RPS19SQAorR05VTElCX01FTU1FTSA9IEBHTlVMSUJfTUVNTUVNQAorR05VTElCX01FTVBDUFkgPSBAR05VTElCX01FTVBDUFlACitHTlVMSUJfTUVNUkNIUiA9IEBHTlVMSUJfTUVNUkNIUkAKK0dOVUxJQl9NS0RURU1QID0gQEdOVUxJQl9NS0RURU1QQAorR05VTElCX01LU1RFTVAgPSBAR05VTElCX01LU1RFTVBACitHTlVMSUJfUkVBRExJTksgPSBAR05VTElCX1JFQURMSU5LQAorR05VTElCX1NMRUVQID0gQEdOVUxJQl9TTEVFUEAKK0dOVUxJQl9TVFBDUFkgPSBAR05VTElCX1NUUENQWUAKK0dOVUxJQl9TVFBOQ1BZID0gQEdOVUxJQl9TVFBOQ1BZQAorR05VTElCX1NUUkNBU0VTVFIgPSBAR05VTElCX1NUUkNBU0VTVFJACitHTlVMSUJfU1RSQ0hSTlVMID0gQEdOVUxJQl9TVFJDSFJOVUxACitHTlVMSUJfU1RSRFVQID0gQEdOVUxJQl9TVFJEVVBACitHTlVMSUJfU1RSTkRVUCA9IEBHTlVMSUJfU1RSTkRVUEAKK0dOVUxJQl9TVFJOTEVOID0gQEdOVUxJQl9TVFJOTEVOQAorR05VTElCX1NUUlBCUksgPSBAR05VTElCX1NUUlBCUktACitHTlVMSUJfU1RSU0VQID0gQEdOVUxJQl9TVFJTRVBACitHTlVMSUJfU1RSVE9JTUFYID0gQEdOVUxJQl9TVFJUT0lNQVhACitHTlVMSUJfU1RSVE9LX1IgPSBAR05VTElCX1NUUlRPS19SQAorR05VTElCX1NUUlRPVU1BWCA9IEBHTlVMSUJfU1RSVE9VTUFYQAorR1JFUCA9IEBHUkVQQAorSEFWRV9ERUNMX0dFVExPR0lOX1IgPSBASEFWRV9ERUNMX0dFVExPR0lOX1JACitIQVZFX0RFQ0xfSU1BWEFCUyA9IEBIQVZFX0RFQ0xfSU1BWEFCU0AKK0hBVkVfREVDTF9JTUFYRElWID0gQEhBVkVfREVDTF9JTUFYRElWQAorSEFWRV9ERUNMX01FTU1FTSA9IEBIQVZFX0RFQ0xfTUVNTUVNQAorSEFWRV9ERUNMX01FTVJDSFIgPSBASEFWRV9ERUNMX01FTVJDSFJACitIQVZFX0RFQ0xfU1RSRFVQID0gQEhBVkVfREVDTF9TVFJEVVBACitIQVZFX0RFQ0xfU1RSTkNBU0VDTVAgPSBASEFWRV9ERUNMX1NUUk5DQVNFQ01QQAorSEFWRV9ERUNMX1NUUk5EVVAgPSBASEFWRV9ERUNMX1NUUk5EVVBACitIQVZFX0RFQ0xfU1RSTkxFTiA9IEBIQVZFX0RFQ0xfU1RSTkxFTkAKK0hBVkVfREVDTF9TVFJUT0lNQVggPSBASEFWRV9ERUNMX1NUUlRPSU1BWEAKK0hBVkVfREVDTF9TVFJUT0tfUiA9IEBIQVZFX0RFQ0xfU1RSVE9LX1JACitIQVZFX0RFQ0xfU1RSVE9VTUFYID0gQEhBVkVfREVDTF9TVFJUT1VNQVhACitIQVZFX0RVUDIgPSBASEFWRV9EVVAyQAorSEFWRV9GVFJVTkNBVEUgPSBASEFWRV9GVFJVTkNBVEVACitIQVZFX0dFVFNVQk9QVCA9IEBIQVZFX0dFVFNVQk9QVEAKK0hBVkVfSU5UVFlQRVNfSCA9IEBIQVZFX0lOVFRZUEVTX0hACitIQVZFX0lTV0NOVFJMID0gQEhBVkVfSVNXQ05UUkxACitIQVZFX0xPTkdfTE9OR19JTlQgPSBASEFWRV9MT05HX0xPTkdfSU5UQAorSEFWRV9NRU1QQ1BZID0gQEhBVkVfTUVNUENQWUAKK0hBVkVfTUtEVEVNUCA9IEBIQVZFX01LRFRFTVBACitIQVZFX1JFQURMSU5LID0gQEhBVkVfUkVBRExJTktACitIQVZFX1NJR05FRF9TSUdfQVRPTUlDX1QgPSBASEFWRV9TSUdORURfU0lHX0FUT01JQ19UQAorSEFWRV9TSUdORURfV0NIQVJfVCA9IEBIQVZFX1NJR05FRF9XQ0hBUl9UQAorSEFWRV9TSUdORURfV0lOVF9UID0gQEhBVkVfU0lHTkVEX1dJTlRfVEAKK0hBVkVfU0xFRVAgPSBASEFWRV9TTEVFUEAKK0hBVkVfU1RESU5UX0ggPSBASEFWRV9TVERJTlRfSEAKK0hBVkVfU1RQQ1BZID0gQEhBVkVfU1RQQ1BZQAorSEFWRV9TVFBOQ1BZID0gQEhBVkVfU1RQTkNQWUAKK0hBVkVfU1RSQ0FTRUNNUCA9IEBIQVZFX1NUUkNBU0VDTVBACitIQVZFX1NUUkNBU0VTVFIgPSBASEFWRV9TVFJDQVNFU1RSQAorSEFWRV9TVFJDSFJOVUwgPSBASEFWRV9TVFJDSFJOVUxACitIQVZFX1NUUk5EVVAgPSBASEFWRV9TVFJORFVQQAorSEFWRV9TVFJQQlJLID0gQEhBVkVfU1RSUEJSS0AKK0hBVkVfU1RSU0VQID0gQEhBVkVfU1RSU0VQQAorSEFWRV9TWVNfQklUWVBFU19IID0gQEhBVkVfU1lTX0JJVFlQRVNfSEAKK0hBVkVfU1lTX0lOVFRZUEVTX0ggPSBASEFWRV9TWVNfSU5UVFlQRVNfSEAKK0hBVkVfU1lTX1RZUEVTX0ggPSBASEFWRV9TWVNfVFlQRVNfSEAKK0hBVkVfVU5JU1REX0ggPSBASEFWRV9VTklTVERfSEAKK0hBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVCA9IEBIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlRACitIQVZFX1dDVFlQRV9IID0gQEhBVkVfV0NUWVBFX0hACitIQVZFX1dJTlRfVCA9IEBIQVZFX1dJTlRfVEAKK0hBVkVfX0JPT0wgPSBASEFWRV9fQk9PTEAKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSU5UTElOQ1MgPSBASU5UTElOQ1NACitJTlRMTElCUyA9IEBJTlRMTElCU0AKK0lOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKK0lOVFRZUEVTX0ggPSBASU5UVFlQRVNfSEAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQklDT05WID0gQExJQklDT05WQAorTElCSU5UTCA9IEBMSUJJTlRMQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTE5fUyA9IEBMTl9TQAorTFRBTExPQ0EgPSBATFRBTExPQ0FACitMVExJQklDT05WID0gQExUTElCSUNPTlZACitMVExJQklOVEwgPSBATFRMSUJJTlRMQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK0xUX0FHRSA9IEBMVF9BR0VACitMVF9DVVJSRU5UID0gQExUX0NVUlJFTlRACitMVF9SRUxFQVNFID0gQExUX1JFTEVBU0VACitMVF9SRVZJU0lPTiA9IEBMVF9SRVZJU0lPTkAKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTVNHRk1UID0gQE1TR0ZNVEAKK01TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKK01TR01FUkdFID0gQE1TR01FUkdFQAorT0JKRVhUID0gQE9CSkVYVEAKK09TID0gQE9TQAorT1NfTElCUyA9IEBPU19MSUJTQAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBUlRFRExERkxBR1MgPSBAUEFSVEVETERGTEFHU0AKK1BBUlRFRF9MSUJTID0gQFBBUlRFRF9MSUJTQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQT1NVQiA9IEBQT1NVQkAKK1BPV19MSUIgPSBAUE9XX0xJQkAKK1BSSVBUUl9QUkVGSVggPSBAUFJJUFRSX1BSRUZJWEAKK1BSSV9NQUNST1NfQlJPS0VOID0gQFBSSV9NQUNST1NfQlJPS0VOQAorUFRSRElGRl9UX1NVRkZJWCA9IEBQVFJESUZGX1RfU1VGRklYQAorUkFOTElCID0gQFJBTkxJQkAKK1JFSVNFUl9MSUJTID0gQFJFSVNFUl9MSUJTQAorUkVQTEFDRV9DSE9XTiA9IEBSRVBMQUNFX0NIT1dOQAorUkVQTEFDRV9GQ0hESVIgPSBAUkVQTEFDRV9GQ0hESVJACitSRVBMQUNFX0dFVENXRCA9IEBSRVBMQUNFX0dFVENXREAKK1JFUExBQ0VfTUtTVEVNUCA9IEBSRVBMQUNFX01LU1RFTVBACitTRUQgPSBAU0VEQAorU0VMSU5VWF9MSUJTID0gQFNFTElOVVhfTElCU0AKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTSUdfQVRPTUlDX1RfU1VGRklYID0gQFNJR19BVE9NSUNfVF9TVUZGSVhACitTSVpFX1RfU1VGRklYID0gQFNJWkVfVF9TVUZGSVhACitTVERCT09MX0ggPSBAU1REQk9PTF9IQAorU1RESU5UX0ggPSBAU1RESU5UX0hACitTVFJJUCA9IEBTVFJJUEAKK1VTRV9OTFMgPSBAVVNFX05MU0AKK1VVSURfTElCUyA9IEBVVUlEX0xJQlNACitWRVJTSU9OID0gQFZFUlNJT05ACitXQ0hBUl9IID0gQFdDSEFSX0hACitXQ0hBUl9UX1NVRkZJWCA9IEBXQ0hBUl9UX1NVRkZJWEAKK1dDVFlQRV9IID0gQFdDVFlQRV9IQAorV0lOVF9UX1NVRkZJWCA9IEBXSU5UX1RfU1VGRklYQAorWEdFVFRFWFQgPSBAWEdFVFRFWFRACitYR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9DWFggPSBAYWNfY3RfQ1hYQAorYWNfY3RfRjc3ID0gQGFjX2N0X0Y3N0AKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitnbF9MSUJPQkpTID0gQGdsX0xJQk9CSlNACitnbF9MVExJQk9CSlMgPSBAZ2xfTFRMSUJPQkpTQAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK3BhcnRlZGluY2x1ZGVkaXIgPSAtSSQodG9wX3NyY2RpcikvaW5jbHVkZQorbm9pbnN0X0xUTElCUkFSSUVTID0gbGlibGludXhzd2FwLmxhCitsaWJsaW51eHN3YXBfbGFfU09VUkNFUyA9IGxpbnV4X3N3YXAuYworSU5DTFVERVMgPSAkKHBhcnRlZGluY2x1ZGVkaXIpICQoSU5UTElOQ1MpCitNQUlOVEFJTkVSQ0xFQU5GSUxFUyA9IE1ha2VmaWxlLmluCithbGw6IGFsbC1hbQorCisuU1VGRklYRVM6CisuU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCiskKHNyY2RpcikvTWFrZWZpbGUuaW46ICAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCBcCisJCSYmIGV4aXQgMDsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgIGxpYnBhcnRlZC9mcy9saW51eF9zd2FwL01ha2VmaWxlJzsgXAorCWNkICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1nbnUgIGxpYnBhcnRlZC9mcy9saW51eF9zd2FwL01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCitjbGVhbi1ub2luc3RMVExJQlJBUklFUzoKKwktdGVzdCAteiAiJChub2luc3RfTFRMSUJSQVJJRVMpIiB8fCBybSAtZiAkKG5vaW5zdF9MVExJQlJBUklFUykKKwlAbGlzdD0nJChub2luc3RfTFRMSUJSQVJJRVMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBkaXI9ImBlY2hvICQkcCB8IHNlZCAtZSAnc3wvW14vXSokJHx8J2AiOyBcCisJICB0ZXN0ICIkJGRpciIgIT0gIiQkcCIgfHwgZGlyPS47IFwKKwkgIGVjaG8gInJtIC1mIFwiJCR7ZGlyfS9zb19sb2NhdGlvbnNcIiI7IFwKKwkgIHJtIC1mICIkJHtkaXJ9L3NvX2xvY2F0aW9ucyI7IFwKKwlkb25lCitsaWJsaW51eHN3YXAubGE6ICQobGlibGludXhzd2FwX2xhX09CSkVDVFMpICQobGlibGludXhzd2FwX2xhX0RFUEVOREVOQ0lFUykgCisJJChMSU5LKSAgJChsaWJsaW51eHN3YXBfbGFfT0JKRUNUUykgJChsaWJsaW51eHN3YXBfbGFfTElCQUREKSAkKExJQlMpCisKK21vc3RseWNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICouJChPQkpFWFQpCisKK2Rpc3RjbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLnRhYi5jCisKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saW51eF9zd2FwLlBsb0BhbV9fcXVvdGVACisKKy5jLm86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgJDwKKworLmMub2JqOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgYCQoQ1lHUEFUSF9XKSAnJDwnYAorCisuYy5sbzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJbWtpZCAtZklEICQkdW5pcXVlCit0YWdzOiBUQUdTCisKK1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJdGFncz07IFwKKwloZXJlPWBwd2RgOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKwkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKKwkgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgJCR0YWdzICQkdW5pcXVlOyBcCisJZmkKK2N0YWdzOiBDVEFHUworQ1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJdGFncz07IFwKKwloZXJlPWBwd2RgOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIiBcCisJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCisJICAgICAkJHRhZ3MgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmIGNkICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAkJGhlcmUKKworZGlzdGNsZWFuLXRhZ3M6CisJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1wUiAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLXBSICQkZC8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgJChkaXN0ZGlyKS8kJGZpbGUgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICQoZGlzdGRpcikvJCRmaWxlIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1hbQorYWxsLWFtOiBNYWtlZmlsZSAkKExUTElCUkFSSUVTKQoraW5zdGFsbGRpcnM6CitpbnN0YWxsOiBpbnN0YWxsLWFtCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KK3VuaW5zdGFsbDogdW5pbnN0YWxsLWFtCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCitpbnN0YWxsLXN0cmlwOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorCS10ZXN0IC16ICIkKE1BSU5UQUlORVJDTEVBTkZJTEVTKSIgfHwgcm0gLWYgJChNQUlOVEFJTkVSQ0xFQU5GSUxFUykKK2NsZWFuOiBjbGVhbi1hbQorCitjbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdExUTElCUkFSSUVTIFwKKwltb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi10YWdzCisKK2R2aTogZHZpLWFtCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1hbQorCitpbmZvOiBpbmZvLWFtCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbToKKworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1tYW46CisKK2luc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQorCitpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtYW0KKworcGRmLWFtOgorCitwczogcHMtYW0KKworcHMtYW06CisKK3VuaW5zdGFsbC1hbToKKworLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAorCisuUEhPTlk6IENUQUdTIEdUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCisJY2xlYW4tbGlidG9vbCBjbGVhbi1ub2luc3RMVExJQlJBUklFUyBjdGFncyBkaXN0Y2xlYW4gXAorCWRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIFwKKwlkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBcCisJaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgXAorCWluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIFwKKwlpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBcCisJaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKKwlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAorCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKKwltb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCisJcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0KKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9saW51eF9zd2FwL2xpbnV4X3N3YXAuYyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvbGludXhfc3dhcC9saW51eF9zd2FwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThlOTVmZAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvbGludXhfc3dhcC9saW51eF9zd2FwLmMKQEAgLTAsMCArMSw3NDMgQEAKKy8qCisgICAgbGlicGFydGVkIC0gYSBsaWJyYXJ5IGZvciBtYW5pcHVsYXRpbmcgZGlzayBwYXJ0aXRpb25zCisgICAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAyLCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQorKi8KKworLyogSXQncyBhIGJpdCBzaWxseSBjYWxsaW5nIGEgc3dhcCBwYXJ0aXRpb24gYSBmaWxlIHN5c3RlbS4gIE9oIHdlbGwuLi4gICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworI2luY2x1ZGUgPHBhcnRlZC9wYXJ0ZWQuaD4KKyNpbmNsdWRlIDxwYXJ0ZWQvZW5kaWFuLmg+CisKKyNpZiBFTkFCTEVfTkxTCisjICBpbmNsdWRlIDxsaWJpbnRsLmg+CisjICBkZWZpbmUgXyhTdHJpbmcpIGRnZXR0ZXh0IChQQUNLQUdFLCBTdHJpbmcpCisjZWxzZQorIyAgZGVmaW5lIF8oU3RyaW5nKSAoU3RyaW5nKQorI2VuZGlmIC8qIEVOQUJMRV9OTFMgKi8KKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjZGVmaW5lIFNXQVBfU1BFQ0lGSUMoZnMpICgoU3dhcFNwZWNpZmljKikgKGZzLT50eXBlX3NwZWNpZmljKSkKKyNkZWZpbmUgQlVGRkVSX1NJWkUgMTI4CisKKyNkZWZpbmUgTElOVVhTV0FQX0JMT0NLX1NJWkVTICAgICAgICgoaW50WzJdKXs1MTIsIDB9KQorCit0eXBlZGVmIHN0cnVjdCB7CisJY2hhcgkJcGFnZV9tYXBbMV07Cit9IFN3YXBPbGRIZWFkZXI7CisKKy8qIHJpcHBlZCBmcm9tIG1rc3dhcCAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgICAgICBjaGFyICAgICAgICAgICAgYm9vdGJpdHNbMTAyNF07ICAgIC8qIFNwYWNlIGZvciBkaXNrbGFiZWwgZXRjLiAqLworICAgICAgICB1aW50MzJfdCAgICAgICAgdmVyc2lvbjsKKyAgICAgICAgdWludDMyX3QgICAgICAgIGxhc3RfcGFnZTsKKyAgICAgICAgdWludDMyX3QgICAgICAgIG5yX2JhZHBhZ2VzOworICAgICAgICB1bnNpZ25lZCBjaGFyICAgc3dzX3V1aWRbMTZdOworICAgICAgICB1bnNpZ25lZCBjaGFyICAgc3dzX3ZvbHVtZVsxNl07CisgICAgICAgIHVpbnQzMl90ICAgICAgICBwYWRkaW5nWzExN107CisgICAgICAgIHVpbnQzMl90ICAgICAgICBiYWRwYWdlc1sxXTsKK30gU3dhcE5ld0hlYWRlcjsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuaW9uIHsKKwkJU3dhcE5ld0hlYWRlcgluZXc7CisJCVN3YXBPbGRIZWFkZXIJb2xkOworCX0qIGhlYWRlcjsKKworCXZvaWQqCQlidWZmZXI7CisJaW50CQlidWZmZXJfc2l6ZTsKKworCVBlZFNlY3RvcglwYWdlX3NlY3RvcnM7CisJdW5zaWduZWQgaW50CXBhZ2VfY291bnQ7CisJdW5zaWduZWQgaW50CXZlcnNpb247CisJdW5zaWduZWQgaW50CW1heF9iYWRfcGFnZXM7Cit9IFN3YXBTcGVjaWZpYzsKKworc3RhdGljIFBlZEZpbGVTeXN0ZW1UeXBlIF9zd2FwX3YxX3R5cGU7CitzdGF0aWMgUGVkRmlsZVN5c3RlbVR5cGUgX3N3YXBfdjJfdHlwZTsKK3N0YXRpYyBQZWRGaWxlU3lzdGVtVHlwZSBfc3dhcF9zd3N1c3BfdHlwZTsKKworc3RhdGljIFBlZEZpbGVTeXN0ZW0qIF9zd2FwX3YxX29wZW4gKFBlZEdlb21ldHJ5KiBnZW9tKTsKK3N0YXRpYyBQZWRGaWxlU3lzdGVtKiBfc3dhcF92Ml9vcGVuIChQZWRHZW9tZXRyeSogZ2VvbSk7CitzdGF0aWMgUGVkRmlsZVN5c3RlbSogX3N3YXBfc3dzdXNwX29wZW4gKFBlZEdlb21ldHJ5KiBnZW9tKTsKK3N0YXRpYyBpbnQgc3dhcF9jbG9zZSAoUGVkRmlsZVN5c3RlbSogZnMpOworCitzdGF0aWMgUGVkR2VvbWV0cnkqCitfZ2VuZXJpY19zd2FwX3Byb2JlIChQZWRHZW9tZXRyeSogZ2VvbSwgaW50IGtpbmQpCit7CisJUGVkRmlsZVN5c3RlbSoJZnM7CisJU3dhcFNwZWNpZmljKglmc19pbmZvOworCVBlZEdlb21ldHJ5Kglwcm9iZWRfZ2VvbTsKKwlQZWRTZWN0b3IJbGVuZ3RoOworCisgICAgICAgIHN3aXRjaCAoa2luZCkgeworICAgICAgICAvKiBDaGVjayBmb3Igb2xkIHN0eWxlIHN3YXAgcGFydGl0aW9ucy4gKi8KKyAgICAgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgICAgICAgICBmcyA9IF9zd2FwX3YxX29wZW4oZ2VvbSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgLyogQ2hlY2sgZm9yIG5ldyBzdHlsZSBzd2FwIHBhcnRpdGlvbnMuICovCisgICAgICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgICAgICAgICAgZnMgPSBfc3dhcF92Ml9vcGVuKGdlb20pOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIC8qIENoZWNrIGZvciBzd2FwIHBhcnRpdGlvbnMgY29udGFpbmluZyBzd3N1c3AgZGF0YS4gKi8KKyAgICAgICAgICAgICAgICBjYXNlIC0xOgorICAgICAgICAgICAgICAgICAgICAgICAgZnMgPSBfc3dhcF9zd3N1c3Bfb3BlbihnZW9tKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAvKiBOb3QgcmVhY2hlZC4gKi8KKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorCisJaWYgKCFmcykKKwkJZ290byBlcnJvcjsKKwlmc19pbmZvID0gU1dBUF9TUEVDSUZJQyAoZnMpOworCisJaWYgKGZzX2luZm8tPnZlcnNpb24pCisJCWxlbmd0aCA9IGZzX2luZm8tPnBhZ2Vfc2VjdG9ycyAqIGZzX2luZm8tPnBhZ2VfY291bnQ7CisJZWxzZQorCSAgICAgICAgbGVuZ3RoID0gZ2VvbS0+bGVuZ3RoOworCisJcHJvYmVkX2dlb20gPSBwZWRfZ2VvbWV0cnlfbmV3IChnZW9tLT5kZXYsIGdlb20tPnN0YXJ0LCBsZW5ndGgpOworCWlmICghcHJvYmVkX2dlb20pCisJCWdvdG8gZXJyb3JfY2xvc2VfZnM7CisJc3dhcF9jbG9zZSAoZnMpOworCXJldHVybiBwcm9iZWRfZ2VvbTsKKworZXJyb3JfY2xvc2VfZnM6CisJc3dhcF9jbG9zZSAoZnMpOworZXJyb3I6CisJcmV0dXJuIE5VTEw7Cit9CisKKyNpZm5kZWYgRElTQ09WRVJfT05MWQorc3RhdGljIGludAorX2dlbmVyaWNfc3dhcF9jbG9iYmVyIChQZWRHZW9tZXRyeSogZ2VvbSwgaW50IGtpbmQpCit7CisJUGVkRmlsZVN5c3RlbSoJCWZzOworCWNoYXIJCQlidWZbNTEyXTsKKworICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICAgICAgLyogQ2hlY2sgZm9yIG9sZCBzdHlsZSBzd2FwIHBhcnRpdGlvbnMuICovCisgICAgICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgZnMgPSBfc3dhcF92MV9vcGVuKGdlb20pOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIC8qIENoZWNrIGZvciBuZXcgc3R5bGUgc3dhcCBwYXJ0aXRpb25zLiAqLworICAgICAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZzID0gX3N3YXBfdjJfb3BlbihnZW9tKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAvKiBDaGVjayBmb3Igc3dhcCBwYXJ0aXRpb25zIGNvbnRhaW5pbmcgc3dzdXNwIGRhdGEuICovCisgICAgICAgICAgICAgICAgY2FzZSAtMToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZzID0gX3N3YXBfc3dzdXNwX29wZW4oZ2VvbSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgLyogTm90IHJlYWNoZWQgKi8KKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorCisJaWYgKCFmcykKKwkJcmV0dXJuIDE7CisKKwltZW1zZXQgKGJ1ZiwgMCwgNTEyKTsKKwlpZiAoIXBlZF9nZW9tZXRyeV93cml0ZSAoZ2VvbSwgYnVmLCBnZXRwYWdlc2l6ZSgpIC8gNTEyIC0gMSwgMSkpCisJCWdvdG8gZXJyb3JfY2xvc2VfZnM7CisKKwlzd2FwX2Nsb3NlIChmcyk7CisJcmV0dXJuIDE7CisKK2Vycm9yX2Nsb3NlX2ZzOgorCXN3YXBfY2xvc2UgKGZzKTsKK2Vycm9yOgorCXJldHVybiAwOworfQorI2VuZGlmIC8qICFESVNDT1ZFUl9PTkxZICovCisKK3N0YXRpYyBpbnQKK3N3YXBfaW5pdCAoUGVkRmlsZVN5c3RlbSogZnMsIGludCBmcmVzaCkKK3sKKwlTd2FwU3BlY2lmaWMqCWZzX2luZm8gPSBTV0FQX1NQRUNJRklDIChmcyk7CisKKwlmc19pbmZvLT5wYWdlX3NlY3RvcnMgPSBnZXRwYWdlc2l6ZSAoKSAvIDUxMjsKKwlmc19pbmZvLT5wYWdlX2NvdW50ID0gZnMtPmdlb20tPmxlbmd0aCAvIGZzX2luZm8tPnBhZ2Vfc2VjdG9yczsKKwlmc19pbmZvLT52ZXJzaW9uID0gMTsKKwlmc19pbmZvLT5tYXhfYmFkX3BhZ2VzID0gKGdldHBhZ2VzaXplKCkKKwkJCQkJLSBzaXplb2YgKFN3YXBOZXdIZWFkZXIpKSAvIDQ7CisKKwlpZiAoZnJlc2gpIHsKKwkJbWVtc2V0IChmc19pbmZvLT5oZWFkZXIsIDAsIGdldHBhZ2VzaXplKCkpOworICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisJZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBwZWRfZ2VvbWV0cnlfcmVhZCAoZnMtPmdlb20sIGZzX2luZm8tPmhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIGZzX2luZm8tPnBhZ2Vfc2VjdG9ycyk7Cit9CisKK3N0YXRpYyBQZWRGaWxlU3lzdGVtKgorc3dhcF9hbGxvYyAoUGVkR2VvbWV0cnkqIGdlb20pCit7CisJUGVkRmlsZVN5c3RlbSoJZnM7CisJU3dhcFNwZWNpZmljKglmc19pbmZvOworCisJZnMgPSAoUGVkRmlsZVN5c3RlbSopIHBlZF9tYWxsb2MgKHNpemVvZiAoUGVkRmlsZVN5c3RlbSkpOworCWlmICghZnMpCisJCWdvdG8gZXJyb3I7CisKKwlmcy0+dHlwZV9zcGVjaWZpYyA9IChTd2FwU3BlY2lmaWMqKSBwZWRfbWFsbG9jIChzaXplb2YgKFN3YXBTcGVjaWZpYykpOworCWlmICghZnMtPnR5cGVfc3BlY2lmaWMpCisJCWdvdG8gZXJyb3JfZnJlZV9mczsKKworCWZzX2luZm8gPSBTV0FQX1NQRUNJRklDIChmcyk7CisJZnNfaW5mby0+aGVhZGVyID0gcGVkX21hbGxvYyAoZ2V0cGFnZXNpemUoKSk7CisJaWYgKCFmc19pbmZvLT5oZWFkZXIpCisJCWdvdG8gZXJyb3JfZnJlZV90eXBlX3NwZWNpZmljOworCisJZnNfaW5mbyA9IFNXQVBfU1BFQ0lGSUMgKGZzKTsKKwlmc19pbmZvLT5idWZmZXJfc2l6ZSA9IGdldHBhZ2VzaXplKCkgKiBCVUZGRVJfU0laRTsKKwlmc19pbmZvLT5idWZmZXIgPSBwZWRfbWFsbG9jIChmc19pbmZvLT5idWZmZXJfc2l6ZSk7CisJaWYgKCFmc19pbmZvLT5idWZmZXIpCisJCWdvdG8gZXJyb3JfZnJlZV9oZWFkZXI7CisKKwlmcy0+Z2VvbSA9IHBlZF9nZW9tZXRyeV9kdXBsaWNhdGUgKGdlb20pOworCWlmICghZnMtPmdlb20pCisJCWdvdG8gZXJyb3JfZnJlZV9idWZmZXI7CisJZnMtPnR5cGUgPSAmX3N3YXBfdjJfdHlwZTsKKwlyZXR1cm4gZnM7CisKK2Vycm9yX2ZyZWVfYnVmZmVyOgorCXBlZF9mcmVlIChmc19pbmZvLT5idWZmZXIpOworZXJyb3JfZnJlZV9oZWFkZXI6CisJcGVkX2ZyZWUgKGZzX2luZm8tPmhlYWRlcik7CitlcnJvcl9mcmVlX3R5cGVfc3BlY2lmaWM6CisJcGVkX2ZyZWUgKGZzLT50eXBlX3NwZWNpZmljKTsKK2Vycm9yX2ZyZWVfZnM6CisJcGVkX2ZyZWUgKGZzKTsKK2Vycm9yOgorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZAorc3dhcF9mcmVlIChQZWRGaWxlU3lzdGVtKiBmcykKK3sKKwlTd2FwU3BlY2lmaWMqCWZzX2luZm8gPSBTV0FQX1NQRUNJRklDIChmcyk7CisKKwlwZWRfZnJlZSAoZnNfaW5mby0+YnVmZmVyKTsKKwlwZWRfZnJlZSAoZnNfaW5mby0+aGVhZGVyKTsKKwlwZWRfZnJlZSAoZnMtPnR5cGVfc3BlY2lmaWMpOworCisJcGVkX2dlb21ldHJ5X2Rlc3Ryb3kgKGZzLT5nZW9tKTsKKwlwZWRfZnJlZSAoZnMpOworfQorCitzdGF0aWMgUGVkRmlsZVN5c3RlbSoKK19zd2FwX3YxX29wZW4gKFBlZEdlb21ldHJ5KiBnZW9tKQoreworCVBlZEZpbGVTeXN0ZW0qCQlmczsKKwlTd2FwU3BlY2lmaWMqCQlmc19pbmZvOworCWNvbnN0IGNoYXIqCQlzaWc7CisKKwlmcyA9IHN3YXBfYWxsb2MgKGdlb20pOworCWlmICghZnMpCisJCWdvdG8gZXJyb3I7CisJc3dhcF9pbml0IChmcywgMCk7CisKKwlmc19pbmZvID0gU1dBUF9TUEVDSUZJQyAoZnMpOworCWlmICghcGVkX2dlb21ldHJ5X3JlYWQgKGZzLT5nZW9tLCBmc19pbmZvLT5oZWFkZXIsIDAsCisJCQkJZnNfaW5mby0+cGFnZV9zZWN0b3JzKSkKKwkJZ290byBlcnJvcl9mcmVlX2ZzOworCisJc2lnID0gKChjaGFyKikgZnNfaW5mby0+aGVhZGVyKSArIGdldHBhZ2VzaXplKCkgLSAxMDsKKwlpZiAoc3RybmNtcCAoc2lnLCAiU1dBUC1TUEFDRSIsIDEwKSA9PSAwKSB7CisJCWZzX2luZm8tPnZlcnNpb24gPSAwOworCQlmc19pbmZvLT5wYWdlX2NvdW50CisJCQk9IFBFRF9NSU4gKGZzLT5nZW9tLT5sZW5ndGggLyBmc19pbmZvLT5wYWdlX3NlY3RvcnMsCisJCQkJICAgOCAqIChnZXRwYWdlc2l6ZSgpIC0gMTApKTsKKwl9IGVsc2UgeworCQljaGFyCV9zaWcgWzExXTsKKworCQltZW1jcHkgKF9zaWcsIHNpZywgMTApOworCQlfc2lnIFsxMF0gPSAwOworIAkJcGVkX2V4Y2VwdGlvbl90aHJvdyAoUEVEX0VYQ0VQVElPTl9FUlJPUiwgUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQlfKCJVbnJlY29nbmlzZWQgb2xkIHN0eWxlIGxpbnV4IHN3YXAgc2lnbmF0dXJlICclMTBzJy4iKSwgX3NpZyk7CisgCQlnb3RvIGVycm9yX2ZyZWVfZnM7CisJfQorCisJZnMtPmNoZWNrZWQgPSAxOworCXJldHVybiBmczsKKworZXJyb3JfZnJlZV9mczoKKwlzd2FwX2ZyZWUgKGZzKTsKK2Vycm9yOgorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgUGVkRmlsZVN5c3RlbSoKK19zd2FwX3YyX29wZW4gKFBlZEdlb21ldHJ5KiBnZW9tKQoreworCVBlZEZpbGVTeXN0ZW0qCQlmczsKKwlTd2FwU3BlY2lmaWMqCQlmc19pbmZvOworCWNvbnN0IGNoYXIqCQlzaWc7CisKKwlmcyA9IHN3YXBfYWxsb2MgKGdlb20pOworCWlmICghZnMpCisJCWdvdG8gZXJyb3I7CisvKiAJc3dhcF9pbml0IChmcywgMCk7ICovCisKKy8qIAlmc19pbmZvID0gU1dBUF9TUEVDSUZJQyAoZnMpOyAqLworLyogCWlmICghcGVkX2dlb21ldHJ5X3JlYWQgKGZzLT5nZW9tLCBmc19pbmZvLT5oZWFkZXIsIDAsICovCisvKiAJCQkJZnNfaW5mby0+cGFnZV9zZWN0b3JzKSkgKi8KKyAgICAgICAgaWYgKCFzd2FwX2luaXQoZnMsIDApKQorCQlnb3RvIGVycm9yX2ZyZWVfZnM7CisKKyAgICAgICAgZnNfaW5mbyA9IFNXQVBfU1BFQ0lGSUMgKGZzKTsKKworCXNpZyA9ICgoY2hhciopIGZzX2luZm8tPmhlYWRlcikgKyBnZXRwYWdlc2l6ZSgpIC0gMTA7CisJaWYgKHN0cm5jbXAgKHNpZywgIlNXQVBTUEFDRTIiLCAxMCkgPT0gMCkgeworCQlmc19pbmZvLT52ZXJzaW9uID0gMTsKKwkJZnNfaW5mby0+cGFnZV9jb3VudCA9IGZzX2luZm8tPmhlYWRlci0+bmV3Lmxhc3RfcGFnZTsKKwl9IGVsc2UgeworCQljaGFyCV9zaWcgWzExXTsKKworCQltZW1jcHkgKF9zaWcsIHNpZywgMTApOworCQlfc2lnIFsxMF0gPSAwOworIAkJcGVkX2V4Y2VwdGlvbl90aHJvdyAoUEVEX0VYQ0VQVElPTl9FUlJPUiwgUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQlfKCJVbnJlY29nbmlzZWQgbmV3IHN0eWxlIGxpbnV4IHN3YXAgc2lnbmF0dXJlICclMTBzJy4iKSwgX3NpZyk7CisgCQlnb3RvIGVycm9yX2ZyZWVfZnM7CisJfQorCisJZnMtPmNoZWNrZWQgPSAxOworCXJldHVybiBmczsKKworZXJyb3JfZnJlZV9mczoKKwlzd2FwX2ZyZWUgKGZzKTsKK2Vycm9yOgorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgUGVkRmlsZVN5c3RlbSoKK19zd2FwX3N3c3VzcF9vcGVuIChQZWRHZW9tZXRyeSogZ2VvbSkKK3sKKwlQZWRGaWxlU3lzdGVtKgkJZnM7CisJU3dhcFNwZWNpZmljKgkJZnNfaW5mbzsKKwljb25zdCBjaGFyKgkJc2lnOworCisJZnMgPSBzd2FwX2FsbG9jIChnZW9tKTsKKwlpZiAoIWZzKQorCQlnb3RvIGVycm9yOworICAgICAgICBmcy0+dHlwZSA9ICZfc3dhcF9zd3N1c3BfdHlwZTsKKwlzd2FwX2luaXQgKGZzLCAwKTsKKworCWZzX2luZm8gPSBTV0FQX1NQRUNJRklDIChmcyk7CisJaWYgKCFwZWRfZ2VvbWV0cnlfcmVhZCAoZnMtPmdlb20sIGZzX2luZm8tPmhlYWRlciwgMCwKKwkJCQlmc19pbmZvLT5wYWdlX3NlY3RvcnMpKQorCQlnb3RvIGVycm9yX2ZyZWVfZnM7CisKKwlzaWcgPSAoKGNoYXIqKSBmc19pbmZvLT5oZWFkZXIpICsgZ2V0cGFnZXNpemUoKSAtIDEwOworICAgICAgIAlpZiAoc3RybmNtcCAoc2lnLCAiUzFTVVNQRU5EIiwgOSkgPT0gMCkgeworCSAgICAgICAgZnNfaW5mby0+dmVyc2lvbiA9IC0xOworCX0gZWxzZSB7CisJCWNoYXIJX3NpZyBbMTBdOworCisJCW1lbWNweSAoX3NpZywgc2lnLCA5KTsKKwkJX3NpZyBbOV0gPSAwOworIAkJcGVkX2V4Y2VwdGlvbl90aHJvdyAoUEVEX0VYQ0VQVElPTl9FUlJPUiwgUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQlfKCJVbnJlY29nbmlzZWQgc3dzdXNwIGxpbnV4IHN3YXAgc2lnbmF0dXJlICclOXMnLiIpLCBfc2lnKTsKKyAJCWdvdG8gZXJyb3JfZnJlZV9mczsKKwl9CisKKwlmcy0+Y2hlY2tlZCA9IDE7CisJcmV0dXJuIGZzOworCitlcnJvcl9mcmVlX2ZzOgorCXN3YXBfZnJlZSAoZnMpOworZXJyb3I6CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQKK3N3YXBfY2xvc2UgKFBlZEZpbGVTeXN0ZW0qIGZzKQoreworCXN3YXBfZnJlZSAoZnMpOworCXJldHVybiAxOworfQorCisjaWZuZGVmIERJU0NPVkVSX09OTFkKK3N0YXRpYyBpbnQKK3N3YXBfbmV3X2ZpbmRfYmFkX3BhZ2UgKFBlZEZpbGVTeXN0ZW0qIGZzLCB1bnNpZ25lZCBpbnQgcGFnZSkKK3sKKwlTd2FwU3BlY2lmaWMqCWZzX2luZm8gPSBTV0FQX1NQRUNJRklDIChmcyk7CisJdW5zaWduZWQgaW50CWk7CisKKwlmb3IgKGk9MDsgaSA8IGZzX2luZm8tPmhlYWRlci0+bmV3Lm5yX2JhZHBhZ2VzOyBpKyspIHsKKwkJaWYgKGZzX2luZm8tPmhlYWRlci0+bmV3LmJhZHBhZ2VzIFtpXSA9PSBwYWdlKQorCQkJcmV0dXJuIGk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3N3YXBfbmV3X3JlbW92ZV9iYWRfcGFnZSAoUGVkRmlsZVN5c3RlbSogZnMsIHVuc2lnbmVkIGludCBwYWdlKQoreworCVN3YXBTcGVjaWZpYyoJZnNfaW5mbyA9IFNXQVBfU1BFQ0lGSUMgKGZzKTsKKwl1bnNpZ25lZCBpbnQJcG9zOworCisJcG9zID0gc3dhcF9uZXdfZmluZF9iYWRfcGFnZSAoZnMsIHBhZ2UpOworCWlmICghcG9zKQorCQlyZXR1cm4gMDsKKworCWZvciAoOyBwb3MgPCBmc19pbmZvLT5oZWFkZXItPm5ldy5ucl9iYWRwYWdlczsgcG9zKyspIHsKKwkJZnNfaW5mby0+aGVhZGVyLT5uZXcuYmFkcGFnZXMgW3BvcyAtIDFdCisJCQk9IGZzX2luZm8tPmhlYWRlci0+bmV3LmJhZHBhZ2VzIFtwb3NdOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50Citzd2FwX21hcmtfcGFnZSAoUGVkRmlsZVN5c3RlbSogZnMsIHVuc2lnbmVkIGludCBwYWdlLCBpbnQgb2spCit7CisJU3dhcFNwZWNpZmljKglmc19pbmZvID0gU1dBUF9TUEVDSUZJQyAoZnMpOworCWNoYXIqCQlwdHI7CisJdW5zaWduZWQgaW50CW1hc2s7CisKKwlpZiAoZnNfaW5mby0+dmVyc2lvbiA9PSAwKSB7CisJCXB0ciA9ICZmc19pbmZvLT5oZWFkZXItPm9sZC5wYWdlX21hcCBbcGFnZS84XTsKKwkJbWFzayA9IDEgPDwgKHBhZ2UlOCk7CisJCSpwdHIgPSAoKnB0ciAmIH5tYXNrKSArIG9rICogbWFzazsKKwl9IGVsc2UgeworCQlpZiAob2spIHsKKwkJCWlmIChzd2FwX25ld19yZW1vdmVfYmFkX3BhZ2UgKGZzLCBwYWdlKSkKKwkJCQlmc19pbmZvLT5oZWFkZXItPm5ldy5ucl9iYWRwYWdlcy0tOworCQl9IGVsc2UgeworCQkJaWYgKHN3YXBfbmV3X2ZpbmRfYmFkX3BhZ2UgKGZzLCBwYWdlKSkKKwkJCQlyZXR1cm4gMTsKKworCQkJaWYgKGZzX2luZm8tPmhlYWRlci0+bmV3Lm5yX2JhZHBhZ2VzCisJCQkJCT4gZnNfaW5mby0+bWF4X2JhZF9wYWdlcykgeworCQkJCXBlZF9leGNlcHRpb25fdGhyb3cgKFBFRF9FWENFUFRJT05fRVJST1IsCisJCQkJCVBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJCQlfKCJUb28gbWFueSBiYWQgcGFnZXMuIikpOworCQkJCXJldHVybiAwOworCQkJfQorCisJCQlmc19pbmZvLT5oZWFkZXItPm5ldy5iYWRwYWdlcworCQkJCVtmc19pbmZvLT5oZWFkZXItPm5ldy5ucl9iYWRwYWdlc10gPSBwYWdlOworCQkJZnNfaW5mby0+aGVhZGVyLT5uZXcubnJfYmFkcGFnZXMrKzsKKwkJfQorCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZAorc3dhcF9jbGVhcl9wYWdlcyAoUGVkRmlsZVN5c3RlbSogZnMpCit7CisJU3dhcFNwZWNpZmljKglmc19pbmZvID0gU1dBUF9TUEVDSUZJQyAoZnMpOworCXVuc2lnbmVkIGludAlpOworCisJZm9yIChpID0gMTsgaSA8IGZzX2luZm8tPnBhZ2VfY291bnQ7IGkrKykgeworCQlzd2FwX21hcmtfcGFnZSAoZnMsIGksIDEpOworCX0KKworCWlmIChmc19pbmZvLT52ZXJzaW9uID09IDApIHsKKwkJZm9yICg7IGkgPCAxMDI0OyBpKyspIHsKKwkJCXN3YXBfbWFya19wYWdlIChmcywgaSwgMCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQKK3N3YXBfY2hlY2tfcGFnZXMgKFBlZEZpbGVTeXN0ZW0qIGZzLCBQZWRUaW1lciogdGltZXIpCit7CisJU3dhcFNwZWNpZmljKglmc19pbmZvID0gU1dBUF9TUEVDSUZJQyAoZnMpOworCVBlZFNlY3RvcglyZXN1bHQ7CisJaW50CQlmaXJzdF9wYWdlID0gMTsKKwlpbnQJCXN0b3BfcGFnZSA9IDA7CisJaW50CQlsYXN0X3BhZ2UgPSBmc19pbmZvLT5wYWdlX2NvdW50IC0gMTsKKwlQZWRUaW1lcioJbmVzdGVkX3RpbWVyOworCisJcGVkX3RpbWVyX3Jlc2V0ICh0aW1lcik7CisJcGVkX3RpbWVyX3NldF9zdGF0ZV9uYW1lICh0aW1lciwgXygiY2hlY2tpbmcgZm9yIGJhZCBibG9ja3MiKSk7CisKKwlzd2FwX2NsZWFyX3BhZ2VzIChmcyk7CisJd2hpbGUgKGZpcnN0X3BhZ2UgPD0gbGFzdF9wYWdlKSB7CisJCW5lc3RlZF90aW1lciA9IHBlZF90aW1lcl9uZXdfbmVzdGVkICgKKwkJCQkgIHRpbWVyLAorCQkJICAgICAgIAkgIDEuMCAqIChsYXN0X3BhZ2UgLSBmaXJzdF9wYWdlKSAvIGxhc3RfcGFnZSk7CisJCXJlc3VsdCA9IHBlZF9nZW9tZXRyeV9jaGVjayAoCisJCQkJZnMtPmdlb20sCisJCQkJZnNfaW5mby0+YnVmZmVyLAorCQkJCWZzX2luZm8tPmJ1ZmZlcl9zaXplIC8gNTEyLAorCQkJCWZpcnN0X3BhZ2UgKiBmc19pbmZvLT5wYWdlX3NlY3RvcnMsCisJCQkJZnNfaW5mby0+cGFnZV9zZWN0b3JzLAorCQkJCShsYXN0X3BhZ2UgLSBmaXJzdF9wYWdlICsgMSkKKwkJCQkJKiBmc19pbmZvLT5wYWdlX3NlY3RvcnMsCisJCQkJbmVzdGVkX3RpbWVyKTsKKwkJcGVkX3RpbWVyX2Rlc3Ryb3lfbmVzdGVkIChuZXN0ZWRfdGltZXIpOworCQlpZiAoIXJlc3VsdCkKKwkJCXJldHVybiAxOworCQlzdG9wX3BhZ2UgPSByZXN1bHQgLyBmc19pbmZvLT5wYWdlX3NlY3RvcnM7CisJCWlmICghc3dhcF9tYXJrX3BhZ2UgKGZzLCBzdG9wX3BhZ2UsIDApKQorCQkJcmV0dXJuIDA7CisJCWZpcnN0X3BhZ2UgPSBzdG9wX3BhZ2UgKyAxOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludAorc3dhcF93cml0ZSAoUGVkRmlsZVN5c3RlbSogZnMpCit7CisJU3dhcFNwZWNpZmljKglmc19pbmZvID0gU1dBUF9TUEVDSUZJQyAoZnMpOworCWNoYXIqCQlzaWcgPSAoKGNoYXIqKSBmc19pbmZvLT5oZWFkZXIpICsgZ2V0cGFnZXNpemUoKSAtIDEwOworCisJaWYgKGZzX2luZm8tPnZlcnNpb24gPT0gMCkgeworCQltZW1jcHkgKHNpZywgIlNXQVAtU1BBQ0UiLCAxMCk7CisJfSBlbHNlIHsKKwkJZnNfaW5mby0+aGVhZGVyLT5uZXcudmVyc2lvbiA9IDE7CisJCWZzX2luZm8tPmhlYWRlci0+bmV3Lmxhc3RfcGFnZSA9IGZzX2luZm8tPnBhZ2VfY291bnQgLSAxOworCQlmc19pbmZvLT5oZWFkZXItPm5ldy5ucl9iYWRwYWdlcyA9IDA7CisJCW1lbWNweSAoc2lnLCAiU1dBUFNQQUNFMiIsIDEwKTsKKwl9CisKKwlyZXR1cm4gcGVkX2dlb21ldHJ5X3dyaXRlIChmcy0+Z2VvbSwgZnNfaW5mby0+aGVhZGVyLCAwLAorCQkJCSAgIGZzX2luZm8tPnBhZ2Vfc2VjdG9ycyk7Cit9CisKK3N0YXRpYyBQZWRGaWxlU3lzdGVtKgorc3dhcF9jcmVhdGUgKFBlZEdlb21ldHJ5KiBnZW9tLCBQZWRUaW1lciogdGltZXIpCit7CisJUGVkRmlsZVN5c3RlbSoJCWZzOworCisJZnMgPSBzd2FwX2FsbG9jIChnZW9tKTsKKwlpZiAoIWZzKQorCQlnb3RvIGVycm9yOworCXN3YXBfaW5pdCAoZnMsIDEpOworCWlmICghc3dhcF93cml0ZSAoZnMpKQorCQlnb3RvIGVycm9yX2ZyZWVfZnM7CisJcmV0dXJuIGZzOworCitlcnJvcl9mcmVlX2ZzOgorCXN3YXBfZnJlZSAoZnMpOworZXJyb3I6CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQKK3N3YXBfcmVzaXplIChQZWRGaWxlU3lzdGVtKiBmcywgUGVkR2VvbWV0cnkqIGdlb20sIFBlZFRpbWVyKiB0aW1lcikKK3sKKwlQZWRHZW9tZXRyeSoJb2xkX2dlb20gPSBmcy0+Z2VvbTsKKworCWZzLT5nZW9tID0gcGVkX2dlb21ldHJ5X2R1cGxpY2F0ZSAoZ2VvbSk7CisJc3dhcF9pbml0IChmcywgb2xkX2dlb20tPnN0YXJ0ICE9IGdlb20tPnN0YXJ0KTsKKwlpZiAoIXN3YXBfd3JpdGUgKGZzKSkKKwkJZ290byBlcnJvcjsKKwlwZWRfZ2VvbWV0cnlfZGVzdHJveSAob2xkX2dlb20pOworCXJldHVybiAxOworCitlcnJvcjoKKwlwZWRfZ2VvbWV0cnlfZGVzdHJveSAoZnMtPmdlb20pOworCWZzLT5nZW9tID0gb2xkX2dlb207CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBQZWRGaWxlU3lzdGVtKgorc3dhcF9jb3B5IChjb25zdCBQZWRGaWxlU3lzdGVtKiBmcywgUGVkR2VvbWV0cnkqIGdlb20sIFBlZFRpbWVyKiB0aW1lcikKK3sKKwlyZXR1cm4gcGVkX2ZpbGVfc3lzdGVtX2NyZWF0ZSAoZ2VvbSwgJl9zd2FwX3YyX3R5cGUsIHRpbWVyKTsKK30KKworc3RhdGljIGludAorc3dhcF9jaGVjayAoUGVkRmlsZVN5c3RlbSogZnMsIFBlZFRpbWVyKiB0aW1lcikKK3sKKwlyZXR1cm4gc3dhcF9jaGVja19wYWdlcyAoZnMsIHRpbWVyKQorCQkmJiBzd2FwX3dyaXRlIChmcyk7Cit9CisKK3N0YXRpYyBQZWRDb25zdHJhaW50Kgorc3dhcF9nZXRfY3JlYXRlX2NvbnN0cmFpbnQgKGNvbnN0IFBlZERldmljZSogZGV2KQoreworCVBlZEdlb21ldHJ5CWZ1bGxfZGV2OworCisJaWYgKCFwZWRfZ2VvbWV0cnlfaW5pdCAoJmZ1bGxfZGV2LCBkZXYsIDAsIGRldi0+bGVuZ3RoIC0gMSkpCisJCXJldHVybiBOVUxMOworCQorCXJldHVybiBwZWRfY29uc3RyYWludF9uZXcgKHBlZF9hbGlnbm1lbnRfYW55LCBwZWRfYWxpZ25tZW50X2FueSwKKwkJCQkgICAmZnVsbF9kZXYsICZmdWxsX2RldiwKKwkJCQkgICBnZXRwYWdlc2l6ZSgpIC8gNTEyLCBkZXYtPmxlbmd0aCk7Cit9CisKK3N0YXRpYyBQZWRDb25zdHJhaW50Kgorc3dhcF9nZXRfcmVzaXplX2NvbnN0cmFpbnQgKGNvbnN0IFBlZEZpbGVTeXN0ZW0qIGZzKQoreworCXJldHVybiBzd2FwX2dldF9jcmVhdGVfY29uc3RyYWludCAoZnMtPmdlb20tPmRldik7Cit9CisKK3N0YXRpYyBQZWRDb25zdHJhaW50Kgorc3dhcF9nZXRfY29weV9jb25zdHJhaW50IChjb25zdCBQZWRGaWxlU3lzdGVtKiBmcywgY29uc3QgUGVkRGV2aWNlKiBkZXYpCit7CisJcmV0dXJuIHN3YXBfZ2V0X2NyZWF0ZV9jb25zdHJhaW50IChkZXYpOworfQorI2VuZGlmIC8qICFESVNDT1ZFUl9PTkxZICovCisKK3N0YXRpYyBQZWRHZW9tZXRyeSoKK19zd2FwX3YxX3Byb2JlIChQZWRHZW9tZXRyeSogZ2VvbSkgeworICAgICAgICByZXR1cm4gX2dlbmVyaWNfc3dhcF9wcm9iZSAoZ2VvbSwgMCk7Cit9CisKK3N0YXRpYyBQZWRHZW9tZXRyeSoKK19zd2FwX3YyX3Byb2JlIChQZWRHZW9tZXRyeSogZ2VvbSkgeworICAgICAgICByZXR1cm4gX2dlbmVyaWNfc3dhcF9wcm9iZSAoZ2VvbSwgMSk7Cit9CisKK3N0YXRpYyBQZWRHZW9tZXRyeSoKK19zd2FwX3N3c3VzcF9wcm9iZSAoUGVkR2VvbWV0cnkqIGdlb20pIHsKKyAgICAgICAgcmV0dXJuIF9nZW5lcmljX3N3YXBfcHJvYmUgKGdlb20sIC0xKTsKK30KKworc3RhdGljIGludAorX3N3YXBfdjFfY2xvYmJlciAoUGVkR2VvbWV0cnkqIGdlb20pIHsKKyAgICAgICAgcmV0dXJuIF9nZW5lcmljX3N3YXBfY2xvYmJlciAoZ2VvbSwgMCk7Cit9CisKK3N0YXRpYyBpbnQKK19zd2FwX3YyX2Nsb2JiZXIgKFBlZEdlb21ldHJ5KiBnZW9tKSB7CisgICAgICAgIHJldHVybiBfZ2VuZXJpY19zd2FwX2Nsb2JiZXIgKGdlb20sIDEpOworfQorCitzdGF0aWMgaW50Citfc3dhcF9zd3N1c3BfY2xvYmJlciAoUGVkR2VvbWV0cnkqIGdlb20pIHsKKyAgICAgICAgcmV0dXJuIF9nZW5lcmljX3N3YXBfY2xvYmJlciAoZ2VvbSwgLTEpOworfQorCitzdGF0aWMgUGVkRmlsZVN5c3RlbU9wcyBfc3dhcF92MV9vcHMgPSB7CisJcHJvYmU6CQlfc3dhcF92MV9wcm9iZSwKKyNpZm5kZWYgRElTQ09WRVJfT05MWQorCWNsb2JiZXI6CV9zd2FwX3YxX2Nsb2JiZXIsCisJb3BlbjoJCV9zd2FwX3YxX29wZW4sCisJY3JlYXRlOgkJc3dhcF9jcmVhdGUsCisJY2xvc2U6CQlzd2FwX2Nsb3NlLAorCWNoZWNrOgkJc3dhcF9jaGVjaywKKwljb3B5OgkJc3dhcF9jb3B5LAorCXJlc2l6ZToJCXN3YXBfcmVzaXplLAorCWdldF9jcmVhdGVfY29uc3RyYWludDoJc3dhcF9nZXRfY3JlYXRlX2NvbnN0cmFpbnQsCisJZ2V0X3Jlc2l6ZV9jb25zdHJhaW50Oglzd2FwX2dldF9yZXNpemVfY29uc3RyYWludCwKKwlnZXRfY29weV9jb25zdHJhaW50Oglzd2FwX2dldF9jb3B5X2NvbnN0cmFpbnQKKyNlbHNlCisJY2xvYmJlcjoJTlVMTCwKKwlvcGVuOgkJTlVMTCwKKwljcmVhdGU6CQlOVUxMLAorCWNsb3NlOgkJTlVMTCwKKwljaGVjazoJCU5VTEwsCisJY29weToJCU5VTEwsCisJcmVzaXplOgkJTlVMTCwKKwlnZXRfY3JlYXRlX2NvbnN0cmFpbnQ6CU5VTEwsCisJZ2V0X3Jlc2l6ZV9jb25zdHJhaW50OglOVUxMLAorCWdldF9jb3B5X2NvbnN0cmFpbnQ6CU5VTEwKKyNlbmRpZiAvKiAhRElTQ09WRVJfT05MWSAqLworfTsKKworc3RhdGljIFBlZEZpbGVTeXN0ZW1PcHMgX3N3YXBfdjJfb3BzID0geworCXByb2JlOgkJX3N3YXBfdjJfcHJvYmUsCisjaWZuZGVmIERJU0NPVkVSX09OTFkKKwljbG9iYmVyOglfc3dhcF92Ml9jbG9iYmVyLAorCW9wZW46CQlfc3dhcF92Ml9vcGVuLAorCWNyZWF0ZToJCXN3YXBfY3JlYXRlLAorCWNsb3NlOgkJc3dhcF9jbG9zZSwKKwljaGVjazoJCXN3YXBfY2hlY2ssCisJY29weToJCXN3YXBfY29weSwKKwlyZXNpemU6CQlzd2FwX3Jlc2l6ZSwKKwlnZXRfY3JlYXRlX2NvbnN0cmFpbnQ6CXN3YXBfZ2V0X2NyZWF0ZV9jb25zdHJhaW50LAorCWdldF9yZXNpemVfY29uc3RyYWludDoJc3dhcF9nZXRfcmVzaXplX2NvbnN0cmFpbnQsCisJZ2V0X2NvcHlfY29uc3RyYWludDoJc3dhcF9nZXRfY29weV9jb25zdHJhaW50CisjZWxzZQorCWNsb2JiZXI6CU5VTEwsCisJb3BlbjoJCU5VTEwsCisJY3JlYXRlOgkJTlVMTCwKKwljbG9zZToJCU5VTEwsCisJY2hlY2s6CQlOVUxMLAorCWNvcHk6CQlOVUxMLAorCXJlc2l6ZToJCU5VTEwsCisJZ2V0X2NyZWF0ZV9jb25zdHJhaW50OglOVUxMLAorCWdldF9yZXNpemVfY29uc3RyYWludDoJTlVMTCwKKwlnZXRfY29weV9jb25zdHJhaW50OglOVUxMCisjZW5kaWYgLyogIURJU0NPVkVSX09OTFkgKi8KK307CisKK3N0YXRpYyBQZWRGaWxlU3lzdGVtT3BzIF9zd2FwX3N3c3VzcF9vcHMgPSB7CisgIHByb2JlOgkJX3N3YXBfc3dzdXNwX3Byb2JlLAorI2lmbmRlZiBESVNDT1ZFUl9PTkxZCisJY2xvYmJlcjoJX3N3YXBfc3dzdXNwX2Nsb2JiZXIsCisJb3BlbjoJCV9zd2FwX3N3c3VzcF9vcGVuLAorCWNyZWF0ZToJCXN3YXBfY3JlYXRlLAorCWNsb3NlOgkJc3dhcF9jbG9zZSwKKwljaGVjazoJCXN3YXBfY2hlY2ssCisJY29weToJCXN3YXBfY29weSwKKwlyZXNpemU6CQlzd2FwX3Jlc2l6ZSwKKwlnZXRfY3JlYXRlX2NvbnN0cmFpbnQ6CXN3YXBfZ2V0X2NyZWF0ZV9jb25zdHJhaW50LAorCWdldF9yZXNpemVfY29uc3RyYWludDoJc3dhcF9nZXRfcmVzaXplX2NvbnN0cmFpbnQsCisJZ2V0X2NvcHlfY29uc3RyYWludDoJc3dhcF9nZXRfY29weV9jb25zdHJhaW50CisjZWxzZQorCWNsb2JiZXI6CU5VTEwsCisJb3BlbjoJCU5VTEwsCisJY3JlYXRlOgkJTlVMTCwKKwljbG9zZToJCU5VTEwsCisJY2hlY2s6CQlOVUxMLAorCWNvcHk6CQlOVUxMLAorCXJlc2l6ZToJCU5VTEwsCisJZ2V0X2NyZWF0ZV9jb25zdHJhaW50OglOVUxMLAorCWdldF9yZXNpemVfY29uc3RyYWludDoJTlVMTCwKKwlnZXRfY29weV9jb25zdHJhaW50OglOVUxMCisjZW5kaWYgLyogIURJU0NPVkVSX09OTFkgKi8KK307CisKK3N0YXRpYyBQZWRGaWxlU3lzdGVtVHlwZSBfc3dhcF92MV90eXBlID0geworCW5leHQ6CU5VTEwsCisJb3BzOgkmX3N3YXBfdjFfb3BzLAorCW5hbWU6CSJsaW51eC1zd2FwKG9sZCkiLAorCWJsb2NrX3NpemVzOiBMSU5VWFNXQVBfQkxPQ0tfU0laRVMKK307CisKK3N0YXRpYyBQZWRGaWxlU3lzdGVtVHlwZSBfc3dhcF92Ml90eXBlID0geworCW5leHQ6CU5VTEwsCisJb3BzOgkmX3N3YXBfdjJfb3BzLAorCW5hbWU6CSJsaW51eC1zd2FwKG5ldykiLAorCWJsb2NrX3NpemVzOiBMSU5VWFNXQVBfQkxPQ0tfU0laRVMKK307CisKK3N0YXRpYyBQZWRGaWxlU3lzdGVtVHlwZSBfc3dhcF9zd3N1c3BfdHlwZSA9IHsKKyAgICAgICAgbmV4dDogICBOVUxMLAorCW9wczogICAgJl9zd2FwX3N3c3VzcF9vcHMsCisJbmFtZTogICAic3dzdXNwIiwKKyAgICAgICAgYmxvY2tfc2l6ZXM6IExJTlVYU1dBUF9CTE9DS19TSVpFUworfTsKKwordm9pZAorcGVkX2ZpbGVfc3lzdGVtX2xpbnV4X3N3YXBfaW5pdCAoKQoreworCXBlZF9maWxlX3N5c3RlbV90eXBlX3JlZ2lzdGVyICgmX3N3YXBfdjFfdHlwZSk7CisJcGVkX2ZpbGVfc3lzdGVtX3R5cGVfcmVnaXN0ZXIgKCZfc3dhcF92Ml90eXBlKTsKKwlwZWRfZmlsZV9zeXN0ZW1fdHlwZV9yZWdpc3RlciAoJl9zd2FwX3N3c3VzcF90eXBlKTsKK30KKwordm9pZAorcGVkX2ZpbGVfc3lzdGVtX2xpbnV4X3N3YXBfZG9uZSAoKQoreworCXBlZF9maWxlX3N5c3RlbV90eXBlX3VucmVnaXN0ZXIgKCZfc3dhcF92MV90eXBlKTsKKwlwZWRfZmlsZV9zeXN0ZW1fdHlwZV91bnJlZ2lzdGVyICgmX3N3YXBfdjJfdHlwZSk7CisJcGVkX2ZpbGVfc3lzdGVtX3R5cGVfdW5yZWdpc3RlciAoJl9zd2FwX3N3c3VzcF90eXBlKTsKK30KZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvbnRmcy9NYWtlZmlsZS5hbSBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvbnRmcy9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGZjYTQxCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9udGZzL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsOCBAQAorcGFydGVkaW5jbHVkZWRpcgk9IC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlCisKK25vaW5zdF9MVExJQlJBUklFUwk9IGxpYm50ZnMubGEKK2xpYm50ZnNfbGFfU09VUkNFUwk9IG50ZnMuYworCitJTkNMVURFUyA9ICQocGFydGVkaW5jbHVkZWRpcikgJChJTlRMSU5DUykKKworTUFJTlRBSU5FUkNMRUFORklMRVMgPSBNYWtlZmlsZS5pbgpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9udGZzL01ha2VmaWxlLmluIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9udGZzL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxODM0MDMKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL250ZnMvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw2MjQgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTAgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorCitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorc3ViZGlyID0gbGlicGFydGVkL2ZzL250ZnMKK0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbgorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvbTQvYWJzb2x1dGUtaGVhZGVyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2FsbG9jYS5tNCAkKHRvcF9zcmNkaXIpL200L2Fzc2VydC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9hdGV4aXQubTQgJCh0b3Bfc3JjZGlyKS9tNC9jYWxsb2MubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY2xvc2Utc3RyZWFtLm00ICQodG9wX3NyY2RpcikvbTQvY2xvc2VvdXQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY29kZXNldC5tNCAkKHRvcF9zcmNkaXIpL200L2NvbmZpZy1oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2Rpcm5hbWUubTQgJCh0b3Bfc3JjZGlyKS9tNC9kb3MubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZG91YmxlLXNsYXNoLXJvb3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZXJyb3IubTQgJCh0b3Bfc3JjZGlyKS9tNC9leGl0ZmFpbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9leHRlbnNpb25zLm00ICQodG9wX3NyY2RpcikvbTQvZnBlbmRpbmcubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZnJlZS5tNCAkKHRvcF9zcmNkaXIpL200L2dldG9wdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00ICQodG9wX3NyY2RpcikvbTQvZ2xpYmMyMS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9nbnVsaWItY29tbW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2dudWxpYi1jb21wLm00ICQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaW5saW5lLm00ICQodG9wX3NyY2RpcikvbTQvaW50dHlwZXMtcHJpLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ludHR5cGVzLm00ICQodG9wX3NyY2RpcikvbTQvbGliLWlnbm9yZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xvY2FsY2hhcnNldC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sb25nLW9wdGlvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9sb25nbG9uZy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tYnJ0b3djLm00ICQodG9wX3NyY2RpcikvbTQvbWJzdGF0ZV90Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21lbWNoci5tNCAkKHRvcF9zcmNkaXIpL200L21lbWNtcC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tZW1jcHkubTQgJCh0b3Bfc3JjZGlyKS9tNC9tZW1tb3ZlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21lbXNldC5tNCAkKHRvcF9zcmNkaXIpL200L25scy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCAkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3F1b3RlYXJnLm00ICQodG9wX3NyY2RpcikvbTQvcmVnZXgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcmVuYW1lLm00ICQodG9wX3NyY2RpcikvbTQvcnBtYXRjaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zYWZlLXJlYWQubTQgJCh0b3Bfc3JjZGlyKS9tNC9zYWZlLXdyaXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3NzaXplX3QubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGRhcmcubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RkYm9vbC5tNCAkKHRvcF9zcmNkaXIpL200L3N0ZGludC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdGRsaWJfaC5tNCAkKHRvcF9zcmNkaXIpL200L3N0cmNzcG4ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RyaW5nX2gubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHJuZHVwLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0cm5sZW4ubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHJ0b2QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RydG9sLm00ICQodG9wX3NyY2RpcikvbTQvdW5pc3RkX2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdXRpbWJ1Zi5tNCAkKHRvcF9zcmNkaXIpL200L3V0aW1lLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3V0aW1lcy1udWxsLm00ICQodG9wX3NyY2RpcikvbTQvd2NoYXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvd2N0eXBlLm00ICQodG9wX3NyY2RpcikvbTQvd2ludF90Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3hhbGxvYy5tNCAkKHRvcF9zcmNkaXIpL200L3hzdHJuZHVwLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitMVExJQlJBUklFUyA9ICQobm9pbnN0X0xUTElCUkFSSUVTKQorbGlibnRmc19sYV9MSUJBREQgPQorYW1fbGlibnRmc19sYV9PQkpFQ1RTID0gbnRmcy5sbworbGlibnRmc19sYV9PQkpFQ1RTID0gJChhbV9saWJudGZzX2xhX09CSkVDVFMpCitERUZBVUxUX0lOQ0xVREVTID0gLUkuIC1JJCh0b3BfYnVpbGRkaXIpL2xpYkBhbV9faXNyY0AKK2RlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9kZXBjb21wCithbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcworQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCisJJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorTFRDT01QSUxFID0gJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIFwKKwktLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgXAorCSQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0NDTEQgPSAkKENDKQorTElOSyA9ICQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCisJLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgXAorCSQoTERGTEFHUykgLW8gJEAKK1NPVVJDRVMgPSAkKGxpYm50ZnNfbGFfU09VUkNFUykKK0RJU1RfU09VUkNFUyA9ICQobGlibnRmc19sYV9TT1VSQ0VTKQorRVRBR1MgPSBldGFncworQ1RBR1MgPSBjdGFncworRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FCU09MVVRFX0lOVFRZUEVTX0ggPSBAQUJTT0xVVEVfSU5UVFlQRVNfSEAKK0FCU09MVVRFX1NURElOVF9IID0gQEFCU09MVVRFX1NURElOVF9IQAorQUJTT0xVVEVfU1RETElCX0ggPSBAQUJTT0xVVEVfU1RETElCX0hACitBQlNPTFVURV9TVFJJTkdfSCA9IEBBQlNPTFVURV9TVFJJTkdfSEAKK0FCU09MVVRFX1VOSVNURF9IID0gQEFCU09MVVRFX1VOSVNURF9IQAorQUJTT0xVVEVfV0NIQVJfSCA9IEBBQlNPTFVURV9XQ0hBUl9IQAorQUJTT0xVVEVfV0NUWVBFX0ggPSBAQUJTT0xVVEVfV0NUWVBFX0hACitBQ0xPQ0FMID0gQEFDTE9DQUxACitBTExPQ0EgPSBAQUxMT0NBQAorQUxMT0NBX0ggPSBAQUxMT0NBX0hACitBTVRBUiA9IEBBTVRBUkAKK0FSID0gQEFSQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitCSVRTSVpFT0ZfUFRSRElGRl9UID0gQEJJVFNJWkVPRl9QVFJESUZGX1RACitCSVRTSVpFT0ZfU0lHX0FUT01JQ19UID0gQEJJVFNJWkVPRl9TSUdfQVRPTUlDX1RACitCSVRTSVpFT0ZfU0laRV9UID0gQEJJVFNJWkVPRl9TSVpFX1RACitCSVRTSVpFT0ZfV0NIQVJfVCA9IEBCSVRTSVpFT0ZfV0NIQVJfVEAKK0JJVFNJWkVPRl9XSU5UX1QgPSBAQklUU0laRU9GX1dJTlRfVEAKK0JVSUxESU5GTyA9IEBCVUlMRElORk9ACitDQyA9IEBDQ0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ0hFQ0tfQ0ZMQUdTID0gQENIRUNLX0NGTEFHU0AKK0NIRUNLX0xJQlMgPSBAQ0hFQ0tfTElCU0AKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RMX0xJQlMgPSBARExfTElCU0AKK0RNX0xJQlMgPSBARE1fTElCU0AKK0VDSE8gPSBARUNIT0AKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRVhFRVhUID0gQEVYRUVYVEAKK0Y3NyA9IEBGNzdACitGRkxBR1MgPSBARkZMQUdTQAorR0VUT1BUX0ggPSBAR0VUT1BUX0hACitHTElCQzIxID0gQEdMSUJDMjFACitHTVNHRk1UID0gQEdNU0dGTVRACitHTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKK0dOVUxJQl9DSE9XTiA9IEBHTlVMSUJfQ0hPV05ACitHTlVMSUJfRFVQMiA9IEBHTlVMSUJfRFVQMkAKK0dOVUxJQl9GQ0hESVIgPSBAR05VTElCX0ZDSERJUkAKK0dOVUxJQl9GVFJVTkNBVEUgPSBAR05VTElCX0ZUUlVOQ0FURUAKK0dOVUxJQl9HRVRDV0QgPSBAR05VTElCX0dFVENXREAKK0dOVUxJQl9HRVRMT0dJTl9SID0gQEdOVUxJQl9HRVRMT0dJTl9SQAorR05VTElCX0dFVFNVQk9QVCA9IEBHTlVMSUJfR0VUU1VCT1BUQAorR05VTElCX0lNQVhBQlMgPSBAR05VTElCX0lNQVhBQlNACitHTlVMSUJfSU1BWERJViA9IEBHTlVMSUJfSU1BWERJVkAKK0dOVUxJQl9NQlNDQVNFQ01QID0gQEdOVUxJQl9NQlNDQVNFQ01QQAorR05VTElCX01CU0NBU0VTVFIgPSBAR05VTElCX01CU0NBU0VTVFJACitHTlVMSUJfTUJTQ0hSID0gQEdOVUxJQl9NQlNDSFJACitHTlVMSUJfTUJTQ1NQTiA9IEBHTlVMSUJfTUJTQ1NQTkAKK0dOVUxJQl9NQlNMRU4gPSBAR05VTElCX01CU0xFTkAKK0dOVUxJQl9NQlNOQ0FTRUNNUCA9IEBHTlVMSUJfTUJTTkNBU0VDTVBACitHTlVMSUJfTUJTUEJSSyA9IEBHTlVMSUJfTUJTUEJSS0AKK0dOVUxJQl9NQlNQQ0FTRUNNUCA9IEBHTlVMSUJfTUJTUENBU0VDTVBACitHTlVMSUJfTUJTUkNIUiA9IEBHTlVMSUJfTUJTUkNIUkAKK0dOVUxJQl9NQlNTRVAgPSBAR05VTElCX01CU1NFUEAKK0dOVUxJQl9NQlNTUE4gPSBAR05VTElCX01CU1NQTkAKK0dOVUxJQl9NQlNTVFIgPSBAR05VTElCX01CU1NUUkAKK0dOVUxJQl9NQlNUT0tfUiA9IEBHTlVMSUJfTUJTVE9LX1JACitHTlVMSUJfTUVNTUVNID0gQEdOVUxJQl9NRU1NRU1ACitHTlVMSUJfTUVNUENQWSA9IEBHTlVMSUJfTUVNUENQWUAKK0dOVUxJQl9NRU1SQ0hSID0gQEdOVUxJQl9NRU1SQ0hSQAorR05VTElCX01LRFRFTVAgPSBAR05VTElCX01LRFRFTVBACitHTlVMSUJfTUtTVEVNUCA9IEBHTlVMSUJfTUtTVEVNUEAKK0dOVUxJQl9SRUFETElOSyA9IEBHTlVMSUJfUkVBRExJTktACitHTlVMSUJfU0xFRVAgPSBAR05VTElCX1NMRUVQQAorR05VTElCX1NUUENQWSA9IEBHTlVMSUJfU1RQQ1BZQAorR05VTElCX1NUUE5DUFkgPSBAR05VTElCX1NUUE5DUFlACitHTlVMSUJfU1RSQ0FTRVNUUiA9IEBHTlVMSUJfU1RSQ0FTRVNUUkAKK0dOVUxJQl9TVFJDSFJOVUwgPSBAR05VTElCX1NUUkNIUk5VTEAKK0dOVUxJQl9TVFJEVVAgPSBAR05VTElCX1NUUkRVUEAKK0dOVUxJQl9TVFJORFVQID0gQEdOVUxJQl9TVFJORFVQQAorR05VTElCX1NUUk5MRU4gPSBAR05VTElCX1NUUk5MRU5ACitHTlVMSUJfU1RSUEJSSyA9IEBHTlVMSUJfU1RSUEJSS0AKK0dOVUxJQl9TVFJTRVAgPSBAR05VTElCX1NUUlNFUEAKK0dOVUxJQl9TVFJUT0lNQVggPSBAR05VTElCX1NUUlRPSU1BWEAKK0dOVUxJQl9TVFJUT0tfUiA9IEBHTlVMSUJfU1RSVE9LX1JACitHTlVMSUJfU1RSVE9VTUFYID0gQEdOVUxJQl9TVFJUT1VNQVhACitHUkVQID0gQEdSRVBACitIQVZFX0RFQ0xfR0VUTE9HSU5fUiA9IEBIQVZFX0RFQ0xfR0VUTE9HSU5fUkAKK0hBVkVfREVDTF9JTUFYQUJTID0gQEhBVkVfREVDTF9JTUFYQUJTQAorSEFWRV9ERUNMX0lNQVhESVYgPSBASEFWRV9ERUNMX0lNQVhESVZACitIQVZFX0RFQ0xfTUVNTUVNID0gQEhBVkVfREVDTF9NRU1NRU1ACitIQVZFX0RFQ0xfTUVNUkNIUiA9IEBIQVZFX0RFQ0xfTUVNUkNIUkAKK0hBVkVfREVDTF9TVFJEVVAgPSBASEFWRV9ERUNMX1NUUkRVUEAKK0hBVkVfREVDTF9TVFJOQ0FTRUNNUCA9IEBIQVZFX0RFQ0xfU1RSTkNBU0VDTVBACitIQVZFX0RFQ0xfU1RSTkRVUCA9IEBIQVZFX0RFQ0xfU1RSTkRVUEAKK0hBVkVfREVDTF9TVFJOTEVOID0gQEhBVkVfREVDTF9TVFJOTEVOQAorSEFWRV9ERUNMX1NUUlRPSU1BWCA9IEBIQVZFX0RFQ0xfU1RSVE9JTUFYQAorSEFWRV9ERUNMX1NUUlRPS19SID0gQEhBVkVfREVDTF9TVFJUT0tfUkAKK0hBVkVfREVDTF9TVFJUT1VNQVggPSBASEFWRV9ERUNMX1NUUlRPVU1BWEAKK0hBVkVfRFVQMiA9IEBIQVZFX0RVUDJACitIQVZFX0ZUUlVOQ0FURSA9IEBIQVZFX0ZUUlVOQ0FURUAKK0hBVkVfR0VUU1VCT1BUID0gQEhBVkVfR0VUU1VCT1BUQAorSEFWRV9JTlRUWVBFU19IID0gQEhBVkVfSU5UVFlQRVNfSEAKK0hBVkVfSVNXQ05UUkwgPSBASEFWRV9JU1dDTlRSTEAKK0hBVkVfTE9OR19MT05HX0lOVCA9IEBIQVZFX0xPTkdfTE9OR19JTlRACitIQVZFX01FTVBDUFkgPSBASEFWRV9NRU1QQ1BZQAorSEFWRV9NS0RURU1QID0gQEhBVkVfTUtEVEVNUEAKK0hBVkVfUkVBRExJTksgPSBASEFWRV9SRUFETElOS0AKK0hBVkVfU0lHTkVEX1NJR19BVE9NSUNfVCA9IEBIQVZFX1NJR05FRF9TSUdfQVRPTUlDX1RACitIQVZFX1NJR05FRF9XQ0hBUl9UID0gQEhBVkVfU0lHTkVEX1dDSEFSX1RACitIQVZFX1NJR05FRF9XSU5UX1QgPSBASEFWRV9TSUdORURfV0lOVF9UQAorSEFWRV9TTEVFUCA9IEBIQVZFX1NMRUVQQAorSEFWRV9TVERJTlRfSCA9IEBIQVZFX1NURElOVF9IQAorSEFWRV9TVFBDUFkgPSBASEFWRV9TVFBDUFlACitIQVZFX1NUUE5DUFkgPSBASEFWRV9TVFBOQ1BZQAorSEFWRV9TVFJDQVNFQ01QID0gQEhBVkVfU1RSQ0FTRUNNUEAKK0hBVkVfU1RSQ0FTRVNUUiA9IEBIQVZFX1NUUkNBU0VTVFJACitIQVZFX1NUUkNIUk5VTCA9IEBIQVZFX1NUUkNIUk5VTEAKK0hBVkVfU1RSTkRVUCA9IEBIQVZFX1NUUk5EVVBACitIQVZFX1NUUlBCUksgPSBASEFWRV9TVFJQQlJLQAorSEFWRV9TVFJTRVAgPSBASEFWRV9TVFJTRVBACitIQVZFX1NZU19CSVRZUEVTX0ggPSBASEFWRV9TWVNfQklUWVBFU19IQAorSEFWRV9TWVNfSU5UVFlQRVNfSCA9IEBIQVZFX1NZU19JTlRUWVBFU19IQAorSEFWRV9TWVNfVFlQRVNfSCA9IEBIQVZFX1NZU19UWVBFU19IQAorSEFWRV9VTklTVERfSCA9IEBIQVZFX1VOSVNURF9IQAorSEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UID0gQEhBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVEAKK0hBVkVfV0NUWVBFX0ggPSBASEFWRV9XQ1RZUEVfSEAKK0hBVkVfV0lOVF9UID0gQEhBVkVfV0lOVF9UQAorSEFWRV9fQk9PTCA9IEBIQVZFX19CT09MQAorSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitJTlRMSU5DUyA9IEBJTlRMSU5DU0AKK0lOVExMSUJTID0gQElOVExMSUJTQAorSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAorSU5UVFlQRVNfSCA9IEBJTlRUWVBFU19IQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCSUNPTlYgPSBATElCSUNPTlZACitMSUJJTlRMID0gQExJQklOVExACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQExJQlNACitMSUJUT09MID0gQExJQlRPT0xACitMTl9TID0gQExOX1NACitMVEFMTE9DQSA9IEBMVEFMTE9DQUAKK0xUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKK0xUTElCSU5UTCA9IEBMVExJQklOVExACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTFRfQUdFID0gQExUX0FHRUAKK0xUX0NVUlJFTlQgPSBATFRfQ1VSUkVOVEAKK0xUX1JFTEVBU0UgPSBATFRfUkVMRUFTRUAKK0xUX1JFVklTSU9OID0gQExUX1JFVklTSU9OQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitNS0RJUl9QID0gQE1LRElSX1BACitNU0dGTVQgPSBATVNHRk1UQAorTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAorTVNHTUVSR0UgPSBATVNHTUVSR0VACitPQkpFWFQgPSBAT0JKRVhUQAorT1MgPSBAT1NACitPU19MSUJTID0gQE9TX0xJQlNACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFSVEVETERGTEFHUyA9IEBQQVJURURMREZMQUdTQAorUEFSVEVEX0xJQlMgPSBAUEFSVEVEX0xJQlNACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKK1BPU1VCID0gQFBPU1VCQAorUE9XX0xJQiA9IEBQT1dfTElCQAorUFJJUFRSX1BSRUZJWCA9IEBQUklQVFJfUFJFRklYQAorUFJJX01BQ1JPU19CUk9LRU4gPSBAUFJJX01BQ1JPU19CUk9LRU5ACitQVFJESUZGX1RfU1VGRklYID0gQFBUUkRJRkZfVF9TVUZGSVhACitSQU5MSUIgPSBAUkFOTElCQAorUkVJU0VSX0xJQlMgPSBAUkVJU0VSX0xJQlNACitSRVBMQUNFX0NIT1dOID0gQFJFUExBQ0VfQ0hPV05ACitSRVBMQUNFX0ZDSERJUiA9IEBSRVBMQUNFX0ZDSERJUkAKK1JFUExBQ0VfR0VUQ1dEID0gQFJFUExBQ0VfR0VUQ1dEQAorUkVQTEFDRV9NS1NURU1QID0gQFJFUExBQ0VfTUtTVEVNUEAKK1NFRCA9IEBTRURACitTRUxJTlVYX0xJQlMgPSBAU0VMSU5VWF9MSUJTQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NJR19BVE9NSUNfVF9TVUZGSVggPSBAU0lHX0FUT01JQ19UX1NVRkZJWEAKK1NJWkVfVF9TVUZGSVggPSBAU0laRV9UX1NVRkZJWEAKK1NUREJPT0xfSCA9IEBTVERCT09MX0hACitTVERJTlRfSCA9IEBTVERJTlRfSEAKK1NUUklQID0gQFNUUklQQAorVVNFX05MUyA9IEBVU0VfTkxTQAorVVVJRF9MSUJTID0gQFVVSURfTElCU0AKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1dDSEFSX0ggPSBAV0NIQVJfSEAKK1dDSEFSX1RfU1VGRklYID0gQFdDSEFSX1RfU1VGRklYQAorV0NUWVBFX0ggPSBAV0NUWVBFX0hACitXSU5UX1RfU1VGRklYID0gQFdJTlRfVF9TVUZGSVhACitYR0VUVEVYVCA9IEBYR0VUVEVYVEAKK1hHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9GNzcgPSBAYWNfY3RfRjc3QAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitidWlsZGRpciA9IEBidWlsZGRpckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZG9jZGlyID0gQGRvY2RpckAKK2R2aWRpciA9IEBkdmlkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2dsX0xJQk9CSlMgPSBAZ2xfTElCT0JKU0AKK2dsX0xUTElCT0JKUyA9IEBnbF9MVExJQk9CSlNACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorcGFydGVkaW5jbHVkZWRpciA9IC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlCitub2luc3RfTFRMSUJSQVJJRVMgPSBsaWJudGZzLmxhCitsaWJudGZzX2xhX1NPVVJDRVMgPSBudGZzLmMKK0lOQ0xVREVTID0gJChwYXJ0ZWRpbmNsdWRlZGlyKSAkKElOVExJTkNTKQorTUFJTlRBSU5FUkNMRUFORklMRVMgPSBNYWtlZmlsZS5pbgorYWxsOiBhbGwtYW0KKworLlNVRkZJWEVTOgorLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagorJChzcmNkaXIpL01ha2VmaWxlLmluOiAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggXAorCQkmJiBleGl0IDA7IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251ICBsaWJwYXJ0ZWQvZnMvbnRmcy9NYWtlZmlsZSc7IFwKKwljZCAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZ251ICBsaWJwYXJ0ZWQvZnMvbnRmcy9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworY2xlYW4tbm9pbnN0TFRMSUJSQVJJRVM6CisJLXRlc3QgLXogIiQobm9pbnN0X0xUTElCUkFSSUVTKSIgfHwgcm0gLWYgJChub2luc3RfTFRMSUJSQVJJRVMpCisJQGxpc3Q9JyQobm9pbnN0X0xUTElCUkFSSUVTKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgZGlyPSJgZWNobyAkJHAgfCBzZWQgLWUgJ3N8L1teL10qJCR8fCdgIjsgXAorCSAgdGVzdCAiJCRkaXIiICE9ICIkJHAiIHx8IGRpcj0uOyBcCisJICBlY2hvICJybSAtZiBcIiQke2Rpcn0vc29fbG9jYXRpb25zXCIiOyBcCisJICBybSAtZiAiJCR7ZGlyfS9zb19sb2NhdGlvbnMiOyBcCisJZG9uZQorbGlibnRmcy5sYTogJChsaWJudGZzX2xhX09CSkVDVFMpICQobGlibnRmc19sYV9ERVBFTkRFTkNJRVMpIAorCSQoTElOSykgICQobGlibnRmc19sYV9PQkpFQ1RTKSAkKGxpYm50ZnNfbGFfTElCQUREKSAkKExJQlMpCisKK21vc3RseWNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICouJChPQkpFWFQpCisKK2Rpc3RjbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLnRhYi5jCisKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9udGZzLlBsb0BhbV9fcXVvdGVACisKKy5jLm86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgJDwKKworLmMub2JqOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgYCQoQ1lHUEFUSF9XKSAnJDwnYAorCisuYy5sbzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJbWtpZCAtZklEICQkdW5pcXVlCit0YWdzOiBUQUdTCisKK1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJdGFncz07IFwKKwloZXJlPWBwd2RgOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKwkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKKwkgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgJCR0YWdzICQkdW5pcXVlOyBcCisJZmkKK2N0YWdzOiBDVEFHUworQ1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJdGFncz07IFwKKwloZXJlPWBwd2RgOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIiBcCisJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCisJICAgICAkJHRhZ3MgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmIGNkICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAkJGhlcmUKKworZGlzdGNsZWFuLXRhZ3M6CisJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1wUiAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLXBSICQkZC8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgJChkaXN0ZGlyKS8kJGZpbGUgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICQoZGlzdGRpcikvJCRmaWxlIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1hbQorYWxsLWFtOiBNYWtlZmlsZSAkKExUTElCUkFSSUVTKQoraW5zdGFsbGRpcnM6CitpbnN0YWxsOiBpbnN0YWxsLWFtCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KK3VuaW5zdGFsbDogdW5pbnN0YWxsLWFtCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCitpbnN0YWxsLXN0cmlwOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorCS10ZXN0IC16ICIkKE1BSU5UQUlORVJDTEVBTkZJTEVTKSIgfHwgcm0gLWYgJChNQUlOVEFJTkVSQ0xFQU5GSUxFUykKK2NsZWFuOiBjbGVhbi1hbQorCitjbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdExUTElCUkFSSUVTIFwKKwltb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi10YWdzCisKK2R2aTogZHZpLWFtCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1hbQorCitpbmZvOiBpbmZvLWFtCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbToKKworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1tYW46CisKK2luc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQorCitpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtYW0KKworcGRmLWFtOgorCitwczogcHMtYW0KKworcHMtYW06CisKK3VuaW5zdGFsbC1hbToKKworLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAorCisuUEhPTlk6IENUQUdTIEdUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCisJY2xlYW4tbGlidG9vbCBjbGVhbi1ub2luc3RMVExJQlJBUklFUyBjdGFncyBkaXN0Y2xlYW4gXAorCWRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIFwKKwlkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBcCisJaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgXAorCWluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIFwKKwlpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBcCisJaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKKwlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAorCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKKwltb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCisJcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0KKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9udGZzL250ZnMuYyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvbnRmcy9udGZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVkZTQ0MQotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvbnRmcy9udGZzLmMKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgICAgbGlicGFydGVkIC0gYSBsaWJyYXJ5IGZvciBtYW5pcHVsYXRpbmcgZGlzayBwYXJ0aXRpb25zCisgICAgQ29weXJpZ2h0IChDKSAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQorKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaW5jbHVkZSA8cGFydGVkL3BhcnRlZC5oPgorI2luY2x1ZGUgPHBhcnRlZC9lbmRpYW4uaD4KKworI2lmIEVOQUJMRV9OTFMKKyMgIGluY2x1ZGUgPGxpYmludGwuaD4KKyMgIGRlZmluZSBfKFN0cmluZykgZGdldHRleHQgKFBBQ0tBR0UsIFN0cmluZykKKyNlbHNlCisjICBkZWZpbmUgXyhTdHJpbmcpIChTdHJpbmcpCisjZW5kaWYgLyogRU5BQkxFX05MUyAqLworCisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNkZWZpbmUgTlRGU19CTE9DS19TSVpFUyAgICAgICAoKGludFsyXSl7NTEyLCAwfSkKKworI2RlZmluZSBOVEZTX1NJR05BVFVSRQkiTlRGUyIKKworc3RhdGljIFBlZEdlb21ldHJ5KgorbnRmc19wcm9iZSAoUGVkR2VvbWV0cnkqIGdlb20pCit7CisJY2hhcglidWZbNTEyXTsKKworCWlmICghcGVkX2dlb21ldHJ5X3JlYWQgKGdlb20sIGJ1ZiwgMCwgMSkpCisJCXJldHVybiAwOworCisJaWYgKHN0cm5jbXAgKE5URlNfU0lHTkFUVVJFLCBidWYgKyAzLCBzdHJsZW4gKE5URlNfU0lHTkFUVVJFKSkgPT0gMCkKKwkJcmV0dXJuIHBlZF9nZW9tZXRyeV9uZXcgKGdlb20tPmRldiwgZ2VvbS0+c3RhcnQsCisJCQkJCSBQRURfTEU2NF9UT19DUFUgKCoodWludDY0X3QqKQorCQkJCQkJIAkgIChidWYgKyAweDI4KSkpOworCWVsc2UKKwkJcmV0dXJuIE5VTEw7Cit9CisKKyNpZm5kZWYgRElTQ09WRVJfT05MWQorc3RhdGljIGludAorbnRmc19jbG9iYmVyIChQZWRHZW9tZXRyeSogZ2VvbSkKK3sKKwljaGFyCWJ1Zls1MTJdOworCisJbWVtc2V0IChidWYsIDAsIDUxMik7CisJcmV0dXJuIHBlZF9nZW9tZXRyeV93cml0ZSAoZ2VvbSwgYnVmLCAwLCAxKTsKK30KKyNlbmRpZiAvKiAhRElTQ09WRVJfT05MWSAqLworCitzdGF0aWMgUGVkRmlsZVN5c3RlbU9wcyBudGZzX29wcyA9IHsKKwlwcm9iZToJCW50ZnNfcHJvYmUsCisjaWZuZGVmIERJU0NPVkVSX09OTFkKKwljbG9iYmVyOgludGZzX2Nsb2JiZXIsCisjZWxzZQorCWNsb2JiZXI6CU5VTEwsCisjZW5kaWYgCisJb3BlbjoJCU5VTEwsCisJY3JlYXRlOgkJTlVMTCwKKwljbG9zZToJCU5VTEwsCisJY2hlY2s6CQlOVUxMLAorCWNvcHk6CQlOVUxMLAorCXJlc2l6ZToJCU5VTEwsCisJZ2V0X2NyZWF0ZV9jb25zdHJhaW50OglOVUxMLAorCWdldF9yZXNpemVfY29uc3RyYWludDoJTlVMTCwKKwlnZXRfY29weV9jb25zdHJhaW50OglOVUxMCit9OworCitzdGF0aWMgUGVkRmlsZVN5c3RlbVR5cGUgbnRmc190eXBlID0geworCW5leHQ6CU5VTEwsCisJb3BzOgkmbnRmc19vcHMsCisJbmFtZToJIm50ZnMiLAorCWJsb2NrX3NpemVzOiBOVEZTX0JMT0NLX1NJWkVTCit9OworCit2b2lkCitwZWRfZmlsZV9zeXN0ZW1fbnRmc19pbml0ICgpCit7CisJcGVkX2ZpbGVfc3lzdGVtX3R5cGVfcmVnaXN0ZXIgKCZudGZzX3R5cGUpOworfQorCit2b2lkCitwZWRfZmlsZV9zeXN0ZW1fbnRmc19kb25lICgpCit7CisJcGVkX2ZpbGVfc3lzdGVtX3R5cGVfdW5yZWdpc3RlciAoJm50ZnNfdHlwZSk7Cit9CisKKwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9yZWlzZXJmcy9NYWtlZmlsZS5hbSBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvcmVpc2VyZnMvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U2NWFiNAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvcmVpc2VyZnMvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSw5IEBACitwYXJ0ZWRpbmNsdWRlZGlyCT0gLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUKKworbm9pbnN0X0xUTElCUkFSSUVTCT0gbGlicmVpc2VyZnMubGEKKworbGlicmVpc2VyZnNfbGFfU09VUkNFUwk9IHJlaXNlcmZzLmMgcmVpc2VyZnMuaCBnZW9tX2RhbC5jIGdlb21fZGFsLmgKKworSU5DTFVERVMgPSAkKHBhcnRlZGluY2x1ZGVkaXIpICQoSU5UTElOQ1MpCisKK01BSU5UQUlORVJDTEVBTkZJTEVTID0gTWFrZWZpbGUuaW4KZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvcmVpc2VyZnMvTWFrZWZpbGUuaW4gYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL3JlaXNlcmZzL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4NDIzMjAKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL3JlaXNlcmZzL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNjI1IEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjEwIGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK3N1YmRpciA9IGxpYnBhcnRlZC9mcy9yZWlzZXJmcworRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9hYnNvbHV0ZS1oZWFkZXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvYWxsb2NhLm00ICQodG9wX3NyY2RpcikvbTQvYXNzZXJ0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2F0ZXhpdC5tNCAkKHRvcF9zcmNkaXIpL200L2NhbGxvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jbG9zZS1zdHJlYW0ubTQgJCh0b3Bfc3JjZGlyKS9tNC9jbG9zZW91dC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jb2Rlc2V0Lm00ICQodG9wX3NyY2RpcikvbTQvY29uZmlnLWgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZGlybmFtZS5tNCAkKHRvcF9zcmNkaXIpL200L2Rvcy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9kb3VibGUtc2xhc2gtcm9vdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9lcnJvci5tNCAkKHRvcF9zcmNkaXIpL200L2V4aXRmYWlsLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2V4dGVuc2lvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9mcGVuZGluZy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9mcmVlLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0b3B0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgJCh0b3Bfc3JjZGlyKS9tNC9nbGliYzIxLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2dudWxpYi1jb21tb24ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZ251bGliLWNvbXAubTQgJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pbmxpbmUubTQgJCh0b3Bfc3JjZGlyKS9tNC9pbnR0eXBlcy1wcmkubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaW50dHlwZXMubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItaWdub3JlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbG9jYWxjaGFyc2V0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xvbmctb3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2xvbmdsb25nLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21icnRvd2MubTQgJCh0b3Bfc3JjZGlyKS9tNC9tYnN0YXRlX3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWVtY2hyLm00ICQodG9wX3NyY2RpcikvbTQvbWVtY21wLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21lbWNweS5tNCAkKHRvcF9zcmNkaXIpL200L21lbW1vdmUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWVtc2V0Lm00ICQodG9wX3NyY2RpcikvbTQvbmxzLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3BvLm00ICQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcXVvdGVhcmcubTQgJCh0b3Bfc3JjZGlyKS9tNC9yZWdleC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9yZW5hbWUubTQgJCh0b3Bfc3JjZGlyKS9tNC9ycG1hdGNoLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3NhZmUtcmVhZC5tNCAkKHRvcF9zcmNkaXIpL200L3NhZmUtd3JpdGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3NpemVfdC5tNCAkKHRvcF9zcmNkaXIpL200L3N0ZGFyZy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdGRib29sLm00ICQodG9wX3NyY2RpcikvbTQvc3RkaW50Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0ZGxpYl9oLm00ICQodG9wX3NyY2RpcikvbTQvc3RyY3Nwbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdHJpbmdfaC5tNCAkKHRvcF9zcmNkaXIpL200L3N0cm5kdXAubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3Rybmxlbi5tNCAkKHRvcF9zcmNkaXIpL200L3N0cnRvZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdHJ0b2wubTQgJCh0b3Bfc3JjZGlyKS9tNC91bmlzdGRfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC91dGltYnVmLm00ICQodG9wX3NyY2RpcikvbTQvdXRpbWUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdXRpbWVzLW51bGwubTQgJCh0b3Bfc3JjZGlyKS9tNC93Y2hhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC93Y3R5cGUubTQgJCh0b3Bfc3JjZGlyKS9tNC93aW50X3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQveGFsbG9jLm00ICQodG9wX3NyY2RpcikvbTQveHN0cm5kdXAubTQgXAorCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCithbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorCSQoQUNMT0NBTF9NNCkKK21raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK0xUTElCUkFSSUVTID0gJChub2luc3RfTFRMSUJSQVJJRVMpCitsaWJyZWlzZXJmc19sYV9MSUJBREQgPQorYW1fbGlicmVpc2VyZnNfbGFfT0JKRUNUUyA9IHJlaXNlcmZzLmxvIGdlb21fZGFsLmxvCitsaWJyZWlzZXJmc19sYV9PQkpFQ1RTID0gJChhbV9saWJyZWlzZXJmc19sYV9PQkpFQ1RTKQorREVGQVVMVF9JTkNMVURFUyA9IC1JLiAtSSQodG9wX2J1aWxkZGlyKS9saWJAYW1fX2lzcmNACitkZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvZGVwY29tcAorYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKK0NPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAorCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0xUQ09NUElMRSA9ICQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCisJLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpIFwKKwkkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitDQ0xEID0gJChDQykKK0xJTksgPSAkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorCS0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpIFwKKwkkKExERkxBR1MpIC1vICRACitTT1VSQ0VTID0gJChsaWJyZWlzZXJmc19sYV9TT1VSQ0VTKQorRElTVF9TT1VSQ0VTID0gJChsaWJyZWlzZXJmc19sYV9TT1VSQ0VTKQorRVRBR1MgPSBldGFncworQ1RBR1MgPSBjdGFncworRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FCU09MVVRFX0lOVFRZUEVTX0ggPSBAQUJTT0xVVEVfSU5UVFlQRVNfSEAKK0FCU09MVVRFX1NURElOVF9IID0gQEFCU09MVVRFX1NURElOVF9IQAorQUJTT0xVVEVfU1RETElCX0ggPSBAQUJTT0xVVEVfU1RETElCX0hACitBQlNPTFVURV9TVFJJTkdfSCA9IEBBQlNPTFVURV9TVFJJTkdfSEAKK0FCU09MVVRFX1VOSVNURF9IID0gQEFCU09MVVRFX1VOSVNURF9IQAorQUJTT0xVVEVfV0NIQVJfSCA9IEBBQlNPTFVURV9XQ0hBUl9IQAorQUJTT0xVVEVfV0NUWVBFX0ggPSBAQUJTT0xVVEVfV0NUWVBFX0hACitBQ0xPQ0FMID0gQEFDTE9DQUxACitBTExPQ0EgPSBAQUxMT0NBQAorQUxMT0NBX0ggPSBAQUxMT0NBX0hACitBTVRBUiA9IEBBTVRBUkAKK0FSID0gQEFSQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitCSVRTSVpFT0ZfUFRSRElGRl9UID0gQEJJVFNJWkVPRl9QVFJESUZGX1RACitCSVRTSVpFT0ZfU0lHX0FUT01JQ19UID0gQEJJVFNJWkVPRl9TSUdfQVRPTUlDX1RACitCSVRTSVpFT0ZfU0laRV9UID0gQEJJVFNJWkVPRl9TSVpFX1RACitCSVRTSVpFT0ZfV0NIQVJfVCA9IEBCSVRTSVpFT0ZfV0NIQVJfVEAKK0JJVFNJWkVPRl9XSU5UX1QgPSBAQklUU0laRU9GX1dJTlRfVEAKK0JVSUxESU5GTyA9IEBCVUlMRElORk9ACitDQyA9IEBDQ0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ0hFQ0tfQ0ZMQUdTID0gQENIRUNLX0NGTEFHU0AKK0NIRUNLX0xJQlMgPSBAQ0hFQ0tfTElCU0AKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RMX0xJQlMgPSBARExfTElCU0AKK0RNX0xJQlMgPSBARE1fTElCU0AKK0VDSE8gPSBARUNIT0AKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRVhFRVhUID0gQEVYRUVYVEAKK0Y3NyA9IEBGNzdACitGRkxBR1MgPSBARkZMQUdTQAorR0VUT1BUX0ggPSBAR0VUT1BUX0hACitHTElCQzIxID0gQEdMSUJDMjFACitHTVNHRk1UID0gQEdNU0dGTVRACitHTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKK0dOVUxJQl9DSE9XTiA9IEBHTlVMSUJfQ0hPV05ACitHTlVMSUJfRFVQMiA9IEBHTlVMSUJfRFVQMkAKK0dOVUxJQl9GQ0hESVIgPSBAR05VTElCX0ZDSERJUkAKK0dOVUxJQl9GVFJVTkNBVEUgPSBAR05VTElCX0ZUUlVOQ0FURUAKK0dOVUxJQl9HRVRDV0QgPSBAR05VTElCX0dFVENXREAKK0dOVUxJQl9HRVRMT0dJTl9SID0gQEdOVUxJQl9HRVRMT0dJTl9SQAorR05VTElCX0dFVFNVQk9QVCA9IEBHTlVMSUJfR0VUU1VCT1BUQAorR05VTElCX0lNQVhBQlMgPSBAR05VTElCX0lNQVhBQlNACitHTlVMSUJfSU1BWERJViA9IEBHTlVMSUJfSU1BWERJVkAKK0dOVUxJQl9NQlNDQVNFQ01QID0gQEdOVUxJQl9NQlNDQVNFQ01QQAorR05VTElCX01CU0NBU0VTVFIgPSBAR05VTElCX01CU0NBU0VTVFJACitHTlVMSUJfTUJTQ0hSID0gQEdOVUxJQl9NQlNDSFJACitHTlVMSUJfTUJTQ1NQTiA9IEBHTlVMSUJfTUJTQ1NQTkAKK0dOVUxJQl9NQlNMRU4gPSBAR05VTElCX01CU0xFTkAKK0dOVUxJQl9NQlNOQ0FTRUNNUCA9IEBHTlVMSUJfTUJTTkNBU0VDTVBACitHTlVMSUJfTUJTUEJSSyA9IEBHTlVMSUJfTUJTUEJSS0AKK0dOVUxJQl9NQlNQQ0FTRUNNUCA9IEBHTlVMSUJfTUJTUENBU0VDTVBACitHTlVMSUJfTUJTUkNIUiA9IEBHTlVMSUJfTUJTUkNIUkAKK0dOVUxJQl9NQlNTRVAgPSBAR05VTElCX01CU1NFUEAKK0dOVUxJQl9NQlNTUE4gPSBAR05VTElCX01CU1NQTkAKK0dOVUxJQl9NQlNTVFIgPSBAR05VTElCX01CU1NUUkAKK0dOVUxJQl9NQlNUT0tfUiA9IEBHTlVMSUJfTUJTVE9LX1JACitHTlVMSUJfTUVNTUVNID0gQEdOVUxJQl9NRU1NRU1ACitHTlVMSUJfTUVNUENQWSA9IEBHTlVMSUJfTUVNUENQWUAKK0dOVUxJQl9NRU1SQ0hSID0gQEdOVUxJQl9NRU1SQ0hSQAorR05VTElCX01LRFRFTVAgPSBAR05VTElCX01LRFRFTVBACitHTlVMSUJfTUtTVEVNUCA9IEBHTlVMSUJfTUtTVEVNUEAKK0dOVUxJQl9SRUFETElOSyA9IEBHTlVMSUJfUkVBRExJTktACitHTlVMSUJfU0xFRVAgPSBAR05VTElCX1NMRUVQQAorR05VTElCX1NUUENQWSA9IEBHTlVMSUJfU1RQQ1BZQAorR05VTElCX1NUUE5DUFkgPSBAR05VTElCX1NUUE5DUFlACitHTlVMSUJfU1RSQ0FTRVNUUiA9IEBHTlVMSUJfU1RSQ0FTRVNUUkAKK0dOVUxJQl9TVFJDSFJOVUwgPSBAR05VTElCX1NUUkNIUk5VTEAKK0dOVUxJQl9TVFJEVVAgPSBAR05VTElCX1NUUkRVUEAKK0dOVUxJQl9TVFJORFVQID0gQEdOVUxJQl9TVFJORFVQQAorR05VTElCX1NUUk5MRU4gPSBAR05VTElCX1NUUk5MRU5ACitHTlVMSUJfU1RSUEJSSyA9IEBHTlVMSUJfU1RSUEJSS0AKK0dOVUxJQl9TVFJTRVAgPSBAR05VTElCX1NUUlNFUEAKK0dOVUxJQl9TVFJUT0lNQVggPSBAR05VTElCX1NUUlRPSU1BWEAKK0dOVUxJQl9TVFJUT0tfUiA9IEBHTlVMSUJfU1RSVE9LX1JACitHTlVMSUJfU1RSVE9VTUFYID0gQEdOVUxJQl9TVFJUT1VNQVhACitHUkVQID0gQEdSRVBACitIQVZFX0RFQ0xfR0VUTE9HSU5fUiA9IEBIQVZFX0RFQ0xfR0VUTE9HSU5fUkAKK0hBVkVfREVDTF9JTUFYQUJTID0gQEhBVkVfREVDTF9JTUFYQUJTQAorSEFWRV9ERUNMX0lNQVhESVYgPSBASEFWRV9ERUNMX0lNQVhESVZACitIQVZFX0RFQ0xfTUVNTUVNID0gQEhBVkVfREVDTF9NRU1NRU1ACitIQVZFX0RFQ0xfTUVNUkNIUiA9IEBIQVZFX0RFQ0xfTUVNUkNIUkAKK0hBVkVfREVDTF9TVFJEVVAgPSBASEFWRV9ERUNMX1NUUkRVUEAKK0hBVkVfREVDTF9TVFJOQ0FTRUNNUCA9IEBIQVZFX0RFQ0xfU1RSTkNBU0VDTVBACitIQVZFX0RFQ0xfU1RSTkRVUCA9IEBIQVZFX0RFQ0xfU1RSTkRVUEAKK0hBVkVfREVDTF9TVFJOTEVOID0gQEhBVkVfREVDTF9TVFJOTEVOQAorSEFWRV9ERUNMX1NUUlRPSU1BWCA9IEBIQVZFX0RFQ0xfU1RSVE9JTUFYQAorSEFWRV9ERUNMX1NUUlRPS19SID0gQEhBVkVfREVDTF9TVFJUT0tfUkAKK0hBVkVfREVDTF9TVFJUT1VNQVggPSBASEFWRV9ERUNMX1NUUlRPVU1BWEAKK0hBVkVfRFVQMiA9IEBIQVZFX0RVUDJACitIQVZFX0ZUUlVOQ0FURSA9IEBIQVZFX0ZUUlVOQ0FURUAKK0hBVkVfR0VUU1VCT1BUID0gQEhBVkVfR0VUU1VCT1BUQAorSEFWRV9JTlRUWVBFU19IID0gQEhBVkVfSU5UVFlQRVNfSEAKK0hBVkVfSVNXQ05UUkwgPSBASEFWRV9JU1dDTlRSTEAKK0hBVkVfTE9OR19MT05HX0lOVCA9IEBIQVZFX0xPTkdfTE9OR19JTlRACitIQVZFX01FTVBDUFkgPSBASEFWRV9NRU1QQ1BZQAorSEFWRV9NS0RURU1QID0gQEhBVkVfTUtEVEVNUEAKK0hBVkVfUkVBRExJTksgPSBASEFWRV9SRUFETElOS0AKK0hBVkVfU0lHTkVEX1NJR19BVE9NSUNfVCA9IEBIQVZFX1NJR05FRF9TSUdfQVRPTUlDX1RACitIQVZFX1NJR05FRF9XQ0hBUl9UID0gQEhBVkVfU0lHTkVEX1dDSEFSX1RACitIQVZFX1NJR05FRF9XSU5UX1QgPSBASEFWRV9TSUdORURfV0lOVF9UQAorSEFWRV9TTEVFUCA9IEBIQVZFX1NMRUVQQAorSEFWRV9TVERJTlRfSCA9IEBIQVZFX1NURElOVF9IQAorSEFWRV9TVFBDUFkgPSBASEFWRV9TVFBDUFlACitIQVZFX1NUUE5DUFkgPSBASEFWRV9TVFBOQ1BZQAorSEFWRV9TVFJDQVNFQ01QID0gQEhBVkVfU1RSQ0FTRUNNUEAKK0hBVkVfU1RSQ0FTRVNUUiA9IEBIQVZFX1NUUkNBU0VTVFJACitIQVZFX1NUUkNIUk5VTCA9IEBIQVZFX1NUUkNIUk5VTEAKK0hBVkVfU1RSTkRVUCA9IEBIQVZFX1NUUk5EVVBACitIQVZFX1NUUlBCUksgPSBASEFWRV9TVFJQQlJLQAorSEFWRV9TVFJTRVAgPSBASEFWRV9TVFJTRVBACitIQVZFX1NZU19CSVRZUEVTX0ggPSBASEFWRV9TWVNfQklUWVBFU19IQAorSEFWRV9TWVNfSU5UVFlQRVNfSCA9IEBIQVZFX1NZU19JTlRUWVBFU19IQAorSEFWRV9TWVNfVFlQRVNfSCA9IEBIQVZFX1NZU19UWVBFU19IQAorSEFWRV9VTklTVERfSCA9IEBIQVZFX1VOSVNURF9IQAorSEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UID0gQEhBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVEAKK0hBVkVfV0NUWVBFX0ggPSBASEFWRV9XQ1RZUEVfSEAKK0hBVkVfV0lOVF9UID0gQEhBVkVfV0lOVF9UQAorSEFWRV9fQk9PTCA9IEBIQVZFX19CT09MQAorSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitJTlRMSU5DUyA9IEBJTlRMSU5DU0AKK0lOVExMSUJTID0gQElOVExMSUJTQAorSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAorSU5UVFlQRVNfSCA9IEBJTlRUWVBFU19IQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCSUNPTlYgPSBATElCSUNPTlZACitMSUJJTlRMID0gQExJQklOVExACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQExJQlNACitMSUJUT09MID0gQExJQlRPT0xACitMTl9TID0gQExOX1NACitMVEFMTE9DQSA9IEBMVEFMTE9DQUAKK0xUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKK0xUTElCSU5UTCA9IEBMVExJQklOVExACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTFRfQUdFID0gQExUX0FHRUAKK0xUX0NVUlJFTlQgPSBATFRfQ1VSUkVOVEAKK0xUX1JFTEVBU0UgPSBATFRfUkVMRUFTRUAKK0xUX1JFVklTSU9OID0gQExUX1JFVklTSU9OQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitNS0RJUl9QID0gQE1LRElSX1BACitNU0dGTVQgPSBATVNHRk1UQAorTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAorTVNHTUVSR0UgPSBATVNHTUVSR0VACitPQkpFWFQgPSBAT0JKRVhUQAorT1MgPSBAT1NACitPU19MSUJTID0gQE9TX0xJQlNACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFSVEVETERGTEFHUyA9IEBQQVJURURMREZMQUdTQAorUEFSVEVEX0xJQlMgPSBAUEFSVEVEX0xJQlNACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKK1BPU1VCID0gQFBPU1VCQAorUE9XX0xJQiA9IEBQT1dfTElCQAorUFJJUFRSX1BSRUZJWCA9IEBQUklQVFJfUFJFRklYQAorUFJJX01BQ1JPU19CUk9LRU4gPSBAUFJJX01BQ1JPU19CUk9LRU5ACitQVFJESUZGX1RfU1VGRklYID0gQFBUUkRJRkZfVF9TVUZGSVhACitSQU5MSUIgPSBAUkFOTElCQAorUkVJU0VSX0xJQlMgPSBAUkVJU0VSX0xJQlNACitSRVBMQUNFX0NIT1dOID0gQFJFUExBQ0VfQ0hPV05ACitSRVBMQUNFX0ZDSERJUiA9IEBSRVBMQUNFX0ZDSERJUkAKK1JFUExBQ0VfR0VUQ1dEID0gQFJFUExBQ0VfR0VUQ1dEQAorUkVQTEFDRV9NS1NURU1QID0gQFJFUExBQ0VfTUtTVEVNUEAKK1NFRCA9IEBTRURACitTRUxJTlVYX0xJQlMgPSBAU0VMSU5VWF9MSUJTQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NJR19BVE9NSUNfVF9TVUZGSVggPSBAU0lHX0FUT01JQ19UX1NVRkZJWEAKK1NJWkVfVF9TVUZGSVggPSBAU0laRV9UX1NVRkZJWEAKK1NUREJPT0xfSCA9IEBTVERCT09MX0hACitTVERJTlRfSCA9IEBTVERJTlRfSEAKK1NUUklQID0gQFNUUklQQAorVVNFX05MUyA9IEBVU0VfTkxTQAorVVVJRF9MSUJTID0gQFVVSURfTElCU0AKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1dDSEFSX0ggPSBAV0NIQVJfSEAKK1dDSEFSX1RfU1VGRklYID0gQFdDSEFSX1RfU1VGRklYQAorV0NUWVBFX0ggPSBAV0NUWVBFX0hACitXSU5UX1RfU1VGRklYID0gQFdJTlRfVF9TVUZGSVhACitYR0VUVEVYVCA9IEBYR0VUVEVYVEAKK1hHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9GNzcgPSBAYWNfY3RfRjc3QAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitidWlsZGRpciA9IEBidWlsZGRpckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZG9jZGlyID0gQGRvY2RpckAKK2R2aWRpciA9IEBkdmlkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2dsX0xJQk9CSlMgPSBAZ2xfTElCT0JKU0AKK2dsX0xUTElCT0JKUyA9IEBnbF9MVExJQk9CSlNACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorcGFydGVkaW5jbHVkZWRpciA9IC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlCitub2luc3RfTFRMSUJSQVJJRVMgPSBsaWJyZWlzZXJmcy5sYQorbGlicmVpc2VyZnNfbGFfU09VUkNFUyA9IHJlaXNlcmZzLmMgcmVpc2VyZnMuaCBnZW9tX2RhbC5jIGdlb21fZGFsLmgKK0lOQ0xVREVTID0gJChwYXJ0ZWRpbmNsdWRlZGlyKSAkKElOVExJTkNTKQorTUFJTlRBSU5FUkNMRUFORklMRVMgPSBNYWtlZmlsZS5pbgorYWxsOiBhbGwtYW0KKworLlNVRkZJWEVTOgorLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagorJChzcmNkaXIpL01ha2VmaWxlLmluOiAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggXAorCQkmJiBleGl0IDA7IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251ICBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvTWFrZWZpbGUnOyBcCisJY2QgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWdudSAgbGlicGFydGVkL2ZzL3JlaXNlcmZzL01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCitjbGVhbi1ub2luc3RMVExJQlJBUklFUzoKKwktdGVzdCAteiAiJChub2luc3RfTFRMSUJSQVJJRVMpIiB8fCBybSAtZiAkKG5vaW5zdF9MVExJQlJBUklFUykKKwlAbGlzdD0nJChub2luc3RfTFRMSUJSQVJJRVMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBkaXI9ImBlY2hvICQkcCB8IHNlZCAtZSAnc3wvW14vXSokJHx8J2AiOyBcCisJICB0ZXN0ICIkJGRpciIgIT0gIiQkcCIgfHwgZGlyPS47IFwKKwkgIGVjaG8gInJtIC1mIFwiJCR7ZGlyfS9zb19sb2NhdGlvbnNcIiI7IFwKKwkgIHJtIC1mICIkJHtkaXJ9L3NvX2xvY2F0aW9ucyI7IFwKKwlkb25lCitsaWJyZWlzZXJmcy5sYTogJChsaWJyZWlzZXJmc19sYV9PQkpFQ1RTKSAkKGxpYnJlaXNlcmZzX2xhX0RFUEVOREVOQ0lFUykgCisJJChMSU5LKSAgJChsaWJyZWlzZXJmc19sYV9PQkpFQ1RTKSAkKGxpYnJlaXNlcmZzX2xhX0xJQkFERCkgJChMSUJTKQorCittb3N0bHljbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLiQoT0JKRVhUKQorCitkaXN0Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi50YWIuYworCitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZ2VvbV9kYWwuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9yZWlzZXJmcy5QbG9AYW1fX3F1b3RlQAorCisuYy5vOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jICQ8CisKKy5jLm9iajoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jIGAkKENZR1BBVEhfVykgJyQ8J2AKKworLmMubG86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKKworSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAorCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAorCW1raWQgLWZJRCAkJHVuaXF1ZQordGFnczogVEFHUworCitUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXRhZ3M9OyBcCisJaGVyZT1gcHdkYDsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAorCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAorCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisJICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCisJICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICQkdGFncyAkJHVuaXF1ZTsgXAorCWZpCitjdGFnczogQ1RBR1MKK0NUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXRhZ3M9OyBcCisJaGVyZT1gcHdkYDsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAorCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAorCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSIgXAorCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorCSAgICAgJCR0YWdzICQkdW5pcXVlCisKK0dUQUdTOgorCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCisJICAmJiBjZCAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgJCRoZXJlCisKK2Rpc3RjbGVhbi10YWdzOgorCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgXAorCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKKwkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCisJICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAorCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKKwkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKKwkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKKwkJCSAgIHNvcnQgLXVgIDs7IFwKKwllc2FjOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtcFIgJChzcmNkaXIpLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1wUiAkJGQvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICQoZGlzdGRpcikvJCRmaWxlIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAkKGRpc3RkaXIpLyQkZmlsZSBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUgJChMVExJQlJBUklFUykKK2luc3RhbGxkaXJzOgoraW5zdGFsbDogaW5zdGFsbC1hbQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCit1bmluc3RhbGw6IHVuaW5zdGFsbC1hbQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQoraW5zdGFsbC1zdHJpcDoKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKKwkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKKwktdGVzdCAteiAiJChNQUlOVEFJTkVSQ0xFQU5GSUxFUykiIHx8IHJtIC1mICQoTUFJTlRBSU5FUkNMRUFORklMRVMpCitjbGVhbjogY2xlYW4tYW0KKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1ub2luc3RMVExJQlJBUklFUyBcCisJbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKKwlkaXN0Y2xlYW4tdGFncworCitkdmk6IGR2aS1hbQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtYW0KKworaW5mbzogaW5mby1hbQorCitpbmZvLWFtOgorCitpbnN0YWxsLWRhdGEtYW06CisKK2luc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQorCitpbnN0YWxsLWV4ZWMtYW06CisKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCisKK2luc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQorCitpbnN0YWxsY2hlY2stYW06CisKK21haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKKwltb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLWFtCisKK3BkZi1hbToKKworcHM6IHBzLWFtCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06CisKKy5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKKworLlBIT05ZOiBDVEFHUyBHVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAorCWNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0TFRMSUJSQVJJRVMgY3RhZ3MgZGlzdGNsZWFuIFwKKwlkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBcCisJZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gXAorCWluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIFwKKwlpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBcCisJaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gXAorCWluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCisJaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKKwltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBcCisJbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgXAorCXBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB1bmluc3RhbGwgdW5pbnN0YWxsLWFtCisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvcmVpc2VyZnMvZ2VvbV9kYWwuYyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvcmVpc2VyZnMvZ2VvbV9kYWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGFjZDQ2Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9yZWlzZXJmcy9nZW9tX2RhbC5jCkBAIC0wLDAgKzEsMTM5IEBACisvKgorICAgIGdlb21fZGFsLmMgLS0gcGFydGVkIGRldmljZSBhYnN0cmFjdGlvbiBsYXllcgorICAgIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCisqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpZiAoRFlOQU1JQ19MT0FESU5HIHx8IEhBVkVfTElCUkVJU0VSRlMpICYmICFESVNDT1ZFUl9PTkxZCisKKyNpbmNsdWRlICJnZW9tX2RhbC5oIgorCisjaW5jbHVkZSA8cGFydGVkL3BhcnRlZC5oPgorI2luY2x1ZGUgPHBhcnRlZC9kZWJ1Zy5oPgorCitzdGF0aWMgYmxrX3QgX19sZW4oZGFsX3QgKmRhbCkgeworICAgIFBFRF9BU1NFUlQoZGFsICE9IE5VTEwsIHJldHVybiAwKTsKKyAgICAKKyAgICByZXR1cm4gKChQZWRHZW9tZXRyeSAqKWRhbC0+ZGV2KS0+bGVuZ3RoIC8gCisJKGRhbC0+YmxvY2tfc2l6ZSAvIFBFRF9TRUNUT1JfU0laRV9ERUZBVUxUKTsKK30KKworc3RhdGljIGludCBfX3JlYWQoZGFsX3QgKmRhbCwgdm9pZCAqYnVmZiwgYmxrX3QgYmxvY2ssIGJsa190IGNvdW50KSB7CisgICAgYmxrX3QgazsKKyAgICBQZWRTZWN0b3IgYmxvY2tfcG9zOworICAgIFBlZFNlY3RvciBibG9ja19jb3VudDsKKyAgICAKKyAgICBQRURfQVNTRVJUKGRhbCAhPSBOVUxMLCByZXR1cm4gMCk7CisgICAgCisgICAgayA9IGRhbC0+YmxvY2tfc2l6ZSAvIFBFRF9TRUNUT1JfU0laRV9ERUZBVUxUOworICAgIGJsb2NrX3BvcyA9IChQZWRTZWN0b3IpKGJsb2NrICogayk7CisgICAgYmxvY2tfY291bnQgPSAoUGVkU2VjdG9yKShjb3VudCAqIGspOworICAgIAorICAgIHJldHVybiBwZWRfZ2VvbWV0cnlfcmVhZCgoUGVkR2VvbWV0cnkgKilkYWwtPmRldiwgYnVmZiwgYmxvY2tfcG9zLCBibG9ja19jb3VudCk7Cit9CisKK3N0YXRpYyBpbnQgX193cml0ZShkYWxfdCAqZGFsLCB2b2lkICpidWZmLCBibGtfdCBibG9jaywgYmxrX3QgY291bnQpIHsKKyAgICBibGtfdCBrOworICAgIFBlZFNlY3RvciBibG9ja19wb3M7CisgICAgUGVkU2VjdG9yIGJsb2NrX2NvdW50OworICAgIAorICAgIFBFRF9BU1NFUlQoZGFsICE9IE5VTEwsIHJldHVybiAwKTsKKyAgICAKKyAgICBrID0gZGFsLT5ibG9ja19zaXplIC8gUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQ7CisgICAgYmxvY2tfcG9zID0gKFBlZFNlY3RvcikoYmxvY2sgKiBrKTsKKyAgICBibG9ja19jb3VudCA9IChQZWRTZWN0b3IpKGNvdW50ICogayk7CisgICAgCisgICAgcmV0dXJuIHBlZF9nZW9tZXRyeV93cml0ZSgoUGVkR2VvbWV0cnkgKilkYWwtPmRldiwgYnVmZiwgYmxvY2tfcG9zLCAKKwlibG9ja19jb3VudCk7Cit9CisKK3N0YXRpYyBpbnQgX19zeW5jKGRhbF90ICpkYWwpIHsKKyAgICBQRURfQVNTRVJUKGRhbCAhPSBOVUxMLCByZXR1cm4gMCk7CisgICAgcmV0dXJuIHBlZF9nZW9tZXRyeV9zeW5jKChQZWRHZW9tZXRyeSAqKWRhbC0+ZGV2KTsKK30KKworc3RhdGljIGludCBfX2ZsYWdzKGRhbF90ICpkYWwpIHsKKyAgICBQRURfQVNTRVJUKGRhbCAhPSBOVUxMLCByZXR1cm4gMCk7CisgICAgcmV0dXJuIGRhbC0+ZmxhZ3M7Cit9CisKK3N0YXRpYyBpbnQgX19lcXVhbHMoZGFsX3QgKmRhbDEsIGRhbF90ICpkYWwyKSB7CisgICAgUEVEX0FTU0VSVChkYWwxICE9IE5VTEwsIHJldHVybiAwKTsKKyAgICBQRURfQVNTRVJUKGRhbDIgIT0gTlVMTCwgcmV0dXJuIDApOworCisgICAgcmV0dXJuIHBlZF9nZW9tZXRyeV90ZXN0X2VxdWFsKChQZWRHZW9tZXRyeSAqKWRhbDEtPmRldiwgCisJKFBlZEdlb21ldHJ5ICopZGFsMi0+ZGV2KTsKK30KKworc3RhdGljIGludCBfX3N0YXQoZGFsX3QgKmRhbCwgc3RydWN0IHN0YXQgKnN0KSB7CisgICAgCisgICAgUEVEX0FTU0VSVChkYWwgIT0gTlVMTCwgcmV0dXJuIDApOworICAgIFBFRF9BU1NFUlQoc3QgIT0gTlVMTCwgcmV0dXJuIDApOworICAgIAorICAgIGlmIChzdGF0KCgoUGVkR2VvbWV0cnkgKilkYWwtPmRldiktPmRldi0+cGF0aCwgc3QpKQorCXJldHVybiAwOworCisgICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBkZXZfdCBfX2RldihkYWxfdCAqZGFsKSB7CisgICAgc3RydWN0IHN0YXQgc3Q7CisgICAgCisgICAgaWYgKCFfX3N0YXQoZGFsLCAmc3QpKQorCXJldHVybiAoZGV2X3QpMDsKKwkKKyAgICByZXR1cm4gc3Quc3RfZGV2OworfQorCitzdGF0aWMgc3RydWN0IGRhbF9vcHMgb3BzID0geworICAgIF9fbGVuLCBfX3JlYWQsIF9fd3JpdGUsIF9fc3luYywgCisgICAgX19mbGFncywgX19lcXVhbHMsIF9fc3RhdCwgX19kZXYKK307CisKK2RhbF90ICpnZW9tX2RhbF9jcmVhdGUoUGVkR2VvbWV0cnkgKmdlb20sIHNpemVfdCBibG9ja19zaXplLCBpbnQgZmxhZ3MpIHsKKyAgICBkYWxfdCAqZGFsOworCisgICAgaWYgKCFnZW9tKSAKKwlyZXR1cm4gTlVMTDsKKyAgICAKKyAgICBpZiAoIShkYWwgPSBwZWRfbWFsbG9jKHNpemVvZihkYWxfdCkpKSkKKwlyZXR1cm4gTlVMTDsKKyAgICAKKyAgICBkYWwtPm9wcyA9ICZvcHM7CisgICAgZGFsLT5kZXYgPSBnZW9tOworICAgIGRhbC0+YmxvY2tfc2l6ZSA9IGJsb2NrX3NpemU7CisgICAgZGFsLT5mbGFncyA9IGZsYWdzOworICAgIGRhbC0+bGVuID0gMDsKKworICAgIHJldHVybiBkYWw7Cit9CisKK2ludCBnZW9tX2RhbF9yZW9wZW4oZGFsX3QgKmRhbCwgaW50IGZsYWdzKSB7CisKKyAgICBpZiAoIWRhbCkgcmV0dXJuIDA7CisgICAgZGFsLT5mbGFncyA9IGZsYWdzOworICAgIAorICAgIHJldHVybiAxOworfQorCit2b2lkIGdlb21fZGFsX2ZyZWUoZGFsX3QgKmRhbCkgeworICAgIFBFRF9BU1NFUlQoZGFsICE9IE5VTEwsIHJldHVybik7CisgICAgcGVkX2ZyZWUoZGFsKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL3JlaXNlcmZzL2dlb21fZGFsLmggYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL3JlaXNlcmZzL2dlb21fZGFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTlkMGEwNgotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvcmVpc2VyZnMvZ2VvbV9kYWwuaApAQCAtMCwwICsxLDYzIEBACisvKgorICAgIGdlb21fZGFsLmggLS0gcGFydGVkIGRldmljZSBhYnN0cmFjdGlvbiBsYXllcgorICAgIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKKyovCisKKyNpZm5kZWYgR0VPTV9EQUxfSAorI2RlZmluZSBHRU9NX0RBTF9ICisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworI2luY2x1ZGUgPHBhcnRlZC9wYXJ0ZWQuaD4KKworI2lmIERZTkFNSUNfTE9BRElORyB8fCAhRElTQ09WRVJfT05MWQorCisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGJsa190OworCitzdHJ1Y3QgZGFsX29wczsKKworc3RydWN0IF9kYWwgeworICAgIHN0cnVjdCBkYWxfb3BzICpvcHM7CisgICAgY29uc3Qgdm9pZCAqZGV2OworICAgIHNpemVfdCBibG9ja19zaXplOworICAgIGludCBmbGFnczsKKyAgICB2b2lkICpkYXRhOworICAgIGJsa190IGxlbjsKK307CisKK3R5cGVkZWYgc3RydWN0IF9kYWwgZGFsX3Q7CisKK3N0cnVjdCBkYWxfb3BzIHsKKyAgICBibGtfdCAoKmxlbikoZGFsX3QgKik7CisgICAgaW50ICgqcmVhZCkoZGFsX3QgKiwgdm9pZCAqLCBibGtfdCwgYmxrX3QpOworICAgIGludCAoKndyaXRlKShkYWxfdCAqLCB2b2lkICosIGJsa190LCBibGtfdCk7CisgICAgaW50ICgqc3luYykoZGFsX3QgKik7CisgICAgaW50ICgqZmxhZ3MpKGRhbF90ICopOworICAgIGludCAoKmVxdWFscykoZGFsX3QgKiwgZGFsX3QgKik7CisgICAgaW50ICgqc3RhdCkoZGFsX3QgKiwgc3RydWN0IHN0YXQgKik7CisgICAgZGV2X3QgKCpkZXYpKGRhbF90ICopOworfTsKKworZXh0ZXJuIGRhbF90ICpnZW9tX2RhbF9jcmVhdGUoUGVkR2VvbWV0cnkgKmdlb20sIHNpemVfdCBibG9ja19zaXplLCBpbnQgZmxhZ3MpOworZXh0ZXJuIGludCBnZW9tX2RhbF9yZW9wZW4oZGFsX3QgKmRhbCwgaW50IGZsYWdzKTsKK2V4dGVybiB2b2lkIGdlb21fZGFsX2ZyZWUoZGFsX3QgKmRhbCk7CisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGZhYTE0Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jCkBAIC0wLDAgKzEsODY3IEBACisvKgorICAgIHJlaXNlcmZzLmMgLS0gbGlicGFydGVkIC8gbGlicmVpc2VyZnMgZ2x1ZQorICAgIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwNyAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCisKKyAgICBUaGlzIGlzIGFsbCByYXRoZXIgY29tcGxpY2F0ZWQuICBUaGVyZSBhcmUgYSBmZXcgY29tYmluYXRpb25zOgorCSogc2hhcmVkIGxpYnJhcmllcyBmdWxsIHN1cHBvcnQKKwkqIGR5bmFtaWMgbGlicmFyaWVzIHByZXNlbnQgZnVsbCBzdXBwb3J0ICh2aWEgZGxvcGVuKQorCSogZHluYW1pYyBsaWJyYXJpZXMgYWJzZW50IChmdWxsIHN1cHBvcnQgZGlzYWJsZWQpICh2aWEgZGxvcGVuKQorCSogZGlzY292ZXIgb25seQorCisgICAgV2UnZCBsb3ZlIHRvIGhlYXIgY29tbWVudHMuLi4KKworICAgIFNvIGZhciwgd2UndmUgb3B0ZWQgZm9yIG1heGltdW0gZmxleGliaWxpdHkgZm9yIHRoZSB1c2VyLiAgSXMgaXQKKyAgICBhbGwgd29ydGggaXQ/CisqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpZiAoSEFWRV9MSUJSRUlTRVJGUyB8fCBEWU5BTUlDX0xPQURJTkcpICYmICFESVNDT1ZFUl9PTkxZCisjCWRlZmluZSBSRUlTRVJfRlVMTF9TVVBQT1JUCisjZW5kaWYKKworI2luY2x1ZGUgPHV1aWQvdXVpZC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2lmZGVmIERZTkFNSUNfTE9BRElORworIwlpbmNsdWRlIDxkbGZjbi5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxwYXJ0ZWQvcGFydGVkLmg+CisjaW5jbHVkZSA8cGFydGVkL2RlYnVnLmg+CisjaW5jbHVkZSA8cGFydGVkL2VuZGlhbi5oPgorCisjaWYgRU5BQkxFX05MUworIwlpbmNsdWRlIDxsaWJpbnRsLmg+CisjCWRlZmluZSBfKFN0cmluZykgZGdldHRleHQgKFBBQ0tBR0UsIFN0cmluZykKKyNlbHNlCisjCWRlZmluZSBfKFN0cmluZykgKFN0cmluZykKKyNlbmRpZgorCisjaW5jbHVkZSAicmVpc2VyZnMuaCIKKyNpbmNsdWRlICJnZW9tX2RhbC5oIgorCisjZGVmaW5lIFJFSVNFUkZTX0JMT0NLX1NJWkVTICAgICAgICgoaW50WzJdKXs1MTIsIDB9KQorCitzdGF0aWMgUGVkU2VjdG9yIHJlaXNlcmZzX3N1cGVyX29mZnNldFtdID0geyAxMjgsIDE2LCAtMSB9Oworc3RhdGljIFBlZEZpbGVTeXN0ZW1UeXBlKiByZWlzZXJmc190eXBlOworCisjaWZkZWYgRFlOQU1JQ19MT0FESU5HCisjCWRlZmluZSBGUFRSICoKKyMJZGVmaW5lIEZDTEFTUyBzdGF0aWMKKyNlbHNlCisjCWRlZmluZSBGUFRSCisjCWRlZmluZSBGQ0xBU1MgZXh0ZXJuCisjZW5kaWYKKworI2lmZGVmIERZTkFNSUNfTE9BRElORworCitzdGF0aWMgaW50IGxpYnJlaXNlcmZzX3ByZXNlbnQ7CisKK3N0YXRpYyB2b2lkICpsaWJkYWxfaGFuZGxlOworc3RhdGljIHZvaWQgKmxpYnJlaXNlcmZzX2hhbmRsZTsKKworI2VuZGlmIC8qIERZTkFNSUNfTE9BRElORyAqLworCisjaWZkZWYgUkVJU0VSX0ZVTExfU1VQUE9SVAorCitGQ0xBU1MgYmxrX3QgKEZQVFIgcmVpc2VyZnNfZnNfcHJvYmUpIChkYWxfdCAqKTsKKworRkNMQVNTIGludCAoRlBUUiBsaWJyZWlzZXJmc19leGNlcHRpb25fdHlwZSkgKHJlaXNlcmZzX2V4Y2VwdGlvbl90ICopOworRkNMQVNTIGludCAoRlBUUiBsaWJyZWlzZXJmc19leGNlcHRpb25fb3B0aW9uKSAocmVpc2VyZnNfZXhjZXB0aW9uX3QgKik7CitGQ0xBU1MgY2hhciAqKEZQVFIgbGlicmVpc2VyZnNfZXhjZXB0aW9uX21lc3NhZ2UpIChyZWlzZXJmc19leGNlcHRpb25fdCAqKTsKK0ZDTEFTUyB2b2lkIChGUFRSIGxpYnJlaXNlcmZzX2V4Y2VwdGlvbl9zZXRfaGFuZGxlcikKKwkJKGludChGUFRSKShyZWlzZXJmc19leGNlcHRpb25fdCAqKSk7CisKK0ZDTEFTUyB2b2lkIChGUFRSIGRhbF9yZWFsaXplKSAoZGFsX3QgKik7CitGQ0xBU1Mgc2l6ZV90IChGUFRSIGRhbF9ibG9ja19zaXplKSAoZGFsX3QgKik7CitGQ0xBU1MgYmxrX3QgKEZQVFIgZGFsX2xlbikgKGRhbF90ICopOworRkNMQVNTIGludCAoRlBUUiBkYWxfZmxhZ3MpIChkYWxfdCAqKTsKKworRkNMQVNTIHJlaXNlcmZzX2ZzX3QqIChGUFRSIHJlaXNlcmZzX2ZzX29wZW4pIChkYWxfdCAqLCBkYWxfdCAqKTsKK0ZDTEFTUyByZWlzZXJmc19mc190KiAoRlBUUiByZWlzZXJmc19mc19jcmVhdGUpIChkYWxfdCAqLCBkYWxfdCAqLAorCQkJCQkgIGJsa190LCBibGtfdCwgYmxrX3QsIHNpemVfdCwKKwkJCQkJICBpbnQsIGludCwgY29uc3QgY2hhciAqLAorCQkJCQkgIGNvbnN0IGNoYXIgKiwgYmxrX3QsCisJCQkJICAgICAgICAgIHJlaXNlcmZzX2dhdWdlX3QgKik7CisKK0ZDTEFTUyBpbnQgKEZQVFIgcmVpc2VyZnNfZnNfcmVzaXplKSAocmVpc2VyZnNfZnNfdCAqLCBibGtfdCwgcmVpc2VyZnNfZ2F1Z2VfdCAqKTsKKyNpZmRlZiBIQVZFX1JFSVNFUkZTX0ZTX0NIRUNLCitGQ0xBU1MgaW50IChGUFRSIHJlaXNlcmZzX2ZzX2NoZWNrKSAocmVpc2VyZnNfZnNfdCAqLCByZWlzZXJmc19nYXVnZV90ICopOworI2VuZGlmCisKK0ZDTEFTUyByZWlzZXJmc19mc190ICooRlBUUiByZWlzZXJmc19mc19jb3B5KSAocmVpc2VyZnNfZnNfdCAqLCBkYWxfdCAqLAorCQkJCQlyZWlzZXJmc19nYXVnZV90ICopOworCitGQ0xBU1MgaW50IChGUFRSIHJlaXNlcmZzX2ZzX2Nsb2JiZXIpIChkYWxfdCAqKTsKK0ZDTEFTUyB2b2lkIChGUFRSIHJlaXNlcmZzX2ZzX2Nsb3NlKSAocmVpc2VyZnNfZnNfdCAqKTsKKworRkNMQVNTIGludCAoRlBUUiByZWlzZXJmc19mc19pc19yZXNpemVhYmxlKSAocmVpc2VyZnNfZnNfdCAqKTsKK0ZDTEFTUyBpbnQgKEZQVFIgcmVpc2VyZnNfZnNfaXNfY29uc2lzdGVudCkgKHJlaXNlcmZzX2ZzX3QgKik7CisKK0ZDTEFTUyBibGtfdCAoRlBUUiByZWlzZXJmc19mc19taW5fc2l6ZSkgKHJlaXNlcmZzX2ZzX3QgKik7CitGQ0xBU1MgYmxrX3QgKEZQVFIgcmVpc2VyZnNfZnNfYmxvY2tfc2l6ZSkgKHJlaXNlcmZzX2ZzX3QgKik7CitGQ0xBU1MgZGFsX3QqIChGUFRSIHJlaXNlcmZzX2ZzX2hvc3RfZGFsKSAocmVpc2VyZnNfZnNfdCAqKTsKKworRkNMQVNTIGJsa190IChGUFRSIHJlaXNlcmZzX2ZzX2JpdG1hcF91c2VkKSAocmVpc2VyZnNfZnNfdCAqKTsKK0ZDTEFTUyBpbnQgKEZQVFIgcmVpc2VyZnNfZnNfYml0bWFwX2NoZWNrKSAocmVpc2VyZnNfZnNfdCAqKTsKKworRkNMQVNTIHJlaXNlcmZzX2dhdWdlX3QgKihGUFRSIGxpYnJlaXNlcmZzX2dhdWdlX2NyZWF0ZSkgKAorCWNoYXIgKiwgcmVpc2VyZnNfZ2F1Z2VfaGFuZGxlcl90LCB2b2lkICopOworCitGQ0xBU1Mgdm9pZCAoRlBUUiBsaWJyZWlzZXJmc19nYXVnZV9mcmVlKSAocmVpc2VyZnNfZ2F1Z2VfdCAqKTsKKworc3RhdGljIHZvaWQgZ2F1Z2VfaGFuZGxlcihjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgdmFsdWUsIHZvaWQgKmRhdGEsCisJCQkgIGludCBkZXRlcm1pbmVkLCBpbnQgdXBkYXRlX2hlYWRlciwKKwkJCSAgaW50IHVwZGF0ZV9mb290ZXIpCit7CisJUGVkVGltZXIgKnRpbWVyID0gKFBlZFRpbWVyICopIGRhdGE7CisJcGVkX3RpbWVyX3NldF9zdGF0ZV9uYW1lKHRpbWVyLCBuYW1lKTsKKwlwZWRfdGltZXJfdXBkYXRlKHRpbWVyLCAxLjAgKiB2YWx1ZSAvIDEwMCk7Cit9CisKK3N0YXRpYyBQZWRFeGNlcHRpb25PcHRpb24KK2V4b3B0X2xpYnJlaXNlcmZzX3RvX3BhcnRlZChyZWlzZXJmc19leGNlcHRpb25fb3B0aW9uX3Qgb3B0aW9uKQoreworCXN3aXRjaCAob3B0aW9uKSB7CisJY2FzZSBFWENFUFRJT05fVU5IQU5ETEVEOgorCQlyZXR1cm4gUEVEX0VYQ0VQVElPTl9VTkhBTkRMRUQ7CisJY2FzZSBFWENFUFRJT05fRklYOgorCQlyZXR1cm4gUEVEX0VYQ0VQVElPTl9GSVg7CisJY2FzZSBFWENFUFRJT05fWUVTOgorCQlyZXR1cm4gUEVEX0VYQ0VQVElPTl9ZRVM7CisJY2FzZSBFWENFUFRJT05fTk86CisJCXJldHVybiBQRURfRVhDRVBUSU9OX05POworCWNhc2UgRVhDRVBUSU9OX09LOgorCQlyZXR1cm4gUEVEX0VYQ0VQVElPTl9PSzsKKwljYXNlIEVYQ0VQVElPTl9SRVRSWToKKwkJcmV0dXJuIFBFRF9FWENFUFRJT05fUkVUUlk7CisJY2FzZSBFWENFUFRJT05fSUdOT1JFOgorCQlyZXR1cm4gUEVEX0VYQ0VQVElPTl9JR05PUkU7CisJY2FzZSBFWENFUFRJT05fQ0FOQ0VMOgorCQlyZXR1cm4gUEVEX0VYQ0VQVElPTl9DQU5DRUw7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gUEVEX0VYQ0VQVElPTl9VTkhBTkRMRUQ7CisJfQorfQorCitzdGF0aWMgUGVkRXhjZXB0aW9uVHlwZQorZXh0eXBlX2xpYnJlaXNlcmZzX3RvX3BhcnRlZChyZWlzZXJmc19leGNlcHRpb25fdHlwZV90IHR5cGUpCit7CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBFWENFUFRJT05fSU5GT1JNQVRJT046CisJCXJldHVybiBQRURfRVhDRVBUSU9OX0lORk9STUFUSU9OOworCWNhc2UgRVhDRVBUSU9OX1dBUk5JTkc6CisJCXJldHVybiBQRURfRVhDRVBUSU9OX1dBUk5JTkc7CisJY2FzZSBFWENFUFRJT05fRVJST1I6CisJCXJldHVybiBQRURfRVhDRVBUSU9OX0VSUk9SOworCWNhc2UgRVhDRVBUSU9OX0ZBVEFMOgorCQlyZXR1cm4gUEVEX0VYQ0VQVElPTl9GQVRBTDsKKwljYXNlIEVYQ0VQVElPTl9CVUc6CisJCXJldHVybiBQRURfRVhDRVBUSU9OX0JVRzsKKwljYXNlIEVYQ0VQVElPTl9OT19GRUFUVVJFOgorCQlyZXR1cm4gUEVEX0VYQ0VQVElPTl9OT19GRUFUVVJFOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIFBFRF9FWENFUFRJT05fTk9fRkVBVFVSRTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZXhjZXB0aW9uX2hhbmRsZXIocmVpc2VyZnNfZXhjZXB0aW9uX3QgKmV4Y2VwdGlvbikKK3sKKwlpbnQgZXhfdHlwZSA9IGxpYnJlaXNlcmZzX2V4Y2VwdGlvbl90eXBlKGV4Y2VwdGlvbik7CisJaW50IGV4X29wdGlvbiA9IGxpYnJlaXNlcmZzX2V4Y2VwdGlvbl9vcHRpb24oZXhjZXB0aW9uKTsKKwljaGFyICpleF9tZXNzYWdlID0gbGlicmVpc2VyZnNfZXhjZXB0aW9uX21lc3NhZ2UoZXhjZXB0aW9uKTsKKworCXJldHVybiBwZWRfZXhjZXB0aW9uX3Rocm93IChleHR5cGVfbGlicmVpc2VyZnNfdG9fcGFydGVkIChleF90eXBlKSwKKwkJCQkgICAgZXhvcHRfbGlicmVpc2VyZnNfdG9fcGFydGVkIChleF9vcHRpb24pLAorCQkJCSAgICBleF9tZXNzYWdlKTsKK30KKyNlbmRpZiAvKiBSRUlTRVJfRlVMTF9TVVBQT1JUICovCisKK3N0YXRpYyBQZWRHZW9tZXRyeSAqcmVpc2VyZnNfcHJvYmUoUGVkR2VvbWV0cnkgKmdlb20pCit7CisJaW50IGk7CisJcmVpc2VyZnNfc3VwZXJfYmxvY2tfdCBzYjsKKworCVBFRF9BU1NFUlQoZ2VvbSAhPSBOVUxMLCByZXR1cm4gTlVMTCk7CisKKwlmb3IgKGkgPSAwOyByZWlzZXJmc19zdXBlcl9vZmZzZXRbaV0gIT0gLTE7IGkrKykgeworCQlpZiAocmVpc2VyZnNfc3VwZXJfb2Zmc2V0W2ldID49IGdlb20tPmxlbmd0aCkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXBlZF9nZW9tZXRyeV9yZWFkIChnZW9tLCAmc2IsIHJlaXNlcmZzX3N1cGVyX29mZnNldFtpXSwgMSkpCisJCQljb250aW51ZTsKKworCQlpZiAoc3RybmNtcChSRUlTRVJGU19TSUdOQVRVUkUsIHNiLnNfbWFnaWMsCisJCSAgICAgICAgICAgIHN0cmxlbihSRUlTRVJGU19TSUdOQVRVUkUpKSA9PSAwCisJCSAgICB8fCBzdHJuY21wKFJFSVNFUjJGU19TSUdOQVRVUkUsIHNiLnNfbWFnaWMsCisJCQkgICAgICAgc3RybGVuKFJFSVNFUjJGU19TSUdOQVRVUkUpKSA9PSAwCisJCSAgICB8fCBzdHJuY21wKFJFSVNFUjNGU19TSUdOQVRVUkUsIHNiLnNfbWFnaWMsCisJCQkgICAgICAgc3RybGVuKFJFSVNFUjNGU19TSUdOQVRVUkUpKSA9PSAwKSB7CisJCQlQZWRTZWN0b3IgYmxvY2tfc2l6ZTsKKwkJCVBlZFNlY3RvciBibG9ja19jb3VudDsKKworCQkJYmxvY2tfc2l6ZSA9IFBFRF9MRTE2X1RPX0NQVShzYi5zX2Jsb2Nrc2l6ZSkKKwkJCQkJLyBQRURfU0VDVE9SX1NJWkVfREVGQVVMVDsKKwkJCWJsb2NrX2NvdW50ID0gUEVEX0xFMzJfVE9fQ1BVKHNiLnNfYmxvY2tfY291bnQpOworCisJCQlyZXR1cm4gcGVkX2dlb21ldHJ5X25ldyhnZW9tLT5kZXYsIGdlb20tPnN0YXJ0LAorCQkJCQkJYmxvY2tfc2l6ZSAqIGJsb2NrX2NvdW50KTsKKwkJfQorCX0KKwlyZXR1cm4gTlVMTDsKK30KKworI2lmbmRlZiBESVNDT1ZFUl9PTkxZCitzdGF0aWMgaW50IHJlaXNlcmZzX2Nsb2JiZXIoUGVkR2VvbWV0cnkgKmdlb20pCit7CisJaW50IGk7CisJY2hhciBidWZbNTEyXTsKKworCVBFRF9BU1NFUlQoZ2VvbSAhPSBOVUxMLCByZXR1cm4gMCk7CisKKwltZW1zZXQoYnVmLCAwLCA1MTIpOworCWZvciAoaSA9IDA7IHJlaXNlcmZzX3N1cGVyX29mZnNldFtpXSAhPSAtMTsgaSsrKSB7CisJCWlmIChyZWlzZXJmc19zdXBlcl9vZmZzZXRbaV0gPj0gZ2VvbS0+bGVuZ3RoKQorCQkJY29udGludWU7CisJCWlmICghcGVkX2dlb21ldHJ5X3dyaXRlCisJCSAgICAoZ2VvbSwgYnVmLCByZWlzZXJmc19zdXBlcl9vZmZzZXRbaV0sIDEpKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorI2VuZGlmIC8qICFESVNDT1ZFUl9PTkxZICovCisKKyNpZmRlZiBSRUlTRVJfRlVMTF9TVVBQT1JUCisKK3N0YXRpYyBQZWRGaWxlU3lzdGVtICpyZWlzZXJmc19vcGVuKFBlZEdlb21ldHJ5ICpnZW9tKQoreworCVBlZEZpbGVTeXN0ZW0gKmZzOworCVBlZEdlb21ldHJ5ICpmc19nZW9tOworCWRhbF90ICpkYWw7CisJcmVpc2VyZnNfZnNfdCAqZnNfaW5mbzsKKworCVBFRF9BU1NFUlQoZ2VvbSAhPSBOVUxMLCByZXR1cm4gTlVMTCk7CisKKwlpZiAoIShmc19nZW9tID0gcGVkX2dlb21ldHJ5X2R1cGxpY2F0ZShnZW9tKSkpCisJCWdvdG8gZXJyb3I7CisKKwlpZiAoISAoZGFsID0gZ2VvbV9kYWxfY3JlYXRlKGZzX2dlb20sIERFRkFVTFRfQkxPQ0tfU0laRSwgT19SRE9OTFkpKSkKKwkJZ290byBlcnJvcl9mc19nZW9tX2ZyZWU7CisKKwkvKgorCSAgIFdlIGFyZSBwYXNzaW5nIE5VTEwgYXMgREFMIGZvciBqb3VybmFsLiBUaGVyZWZvcmUgd2UgbGV0IGxpYnJlaXNlcmZzIGtub3csIAorCSAgIHRoYXQgam91cm5hbCBub3QgYXZhaWxhYmxlIGFuZCBwYXJ0ZWQgd2lsbCBiZSB3b3JraW5nIGZpbmUgZm9yIHJlaXNlcmZzIAorCSAgIHdpdGggcmVsb2NhdGVkIGpvdXJuYWwgdG9vLgorCSAqLworCWlmICghKGZzID0gKFBlZEZpbGVTeXN0ZW0gKikgcGVkX21hbGxvYyhzaXplb2YoUGVkRmlsZVN5c3RlbSkpKSkKKwkJZ290byBlcnJvcl9mcmVlX2RhbDsKKworCWlmICghKGZzX2luZm8gPSByZWlzZXJmc19mc19vcGVuKGRhbCwgTlVMTCkpKQorCQlnb3RvIGVycm9yX2ZyZWVfZnM7CisKKwlmcy0+dHlwZSA9IHJlaXNlcmZzX3R5cGU7CisJZnMtPmdlb20gPSBmc19nZW9tOworCWZzLT50eXBlX3NwZWNpZmljID0gKHZvaWQgKikgZnNfaW5mbzsKKworCXJldHVybiBmczsKKworZXJyb3JfZnJlZV9mczoKKwlwZWRfZnJlZShmcyk7CitlcnJvcl9mcmVlX2RhbDoKKwlnZW9tX2RhbF9mcmVlKGRhbCk7CitlcnJvcl9mc19nZW9tX2ZyZWU6CisJcGVkX2dlb21ldHJ5X2Rlc3Ryb3koZnNfZ2VvbSk7CitlcnJvcjoKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIFBlZEZpbGVTeXN0ZW0gKnJlaXNlcmZzX2NyZWF0ZShQZWRHZW9tZXRyeSAqZ2VvbSwgUGVkVGltZXIgKnRpbWVyKQoreworCWRhbF90ICpkYWw7CisJdXVpZF90IHV1aWQ7CisJUGVkRmlsZVN5c3RlbSAqZnM7CisJUGVkR2VvbWV0cnkgKmZzX2dlb207CisJcmVpc2VyZnNfZnNfdCAqZnNfaW5mbzsKKwlyZWlzZXJmc19nYXVnZV90ICpnYXVnZSA9IE5VTEw7CisKKwlQRURfQVNTRVJUKGdlb20gIT0gTlVMTCwgcmV0dXJuIE5VTEwpOworCisJZnNfZ2VvbSA9IHBlZF9nZW9tZXRyeV9kdXBsaWNhdGUoZ2VvbSk7CisKKwlpZiAoIShkYWwgPSBnZW9tX2RhbF9jcmVhdGUoZnNfZ2VvbSwgREVGQVVMVF9CTE9DS19TSVpFLCBPX1JEV1IpKSkKKwkJZ290byBlcnJvcl9mc19nZW9tX2ZyZWU7CisKKwltZW1zZXQodXVpZCwgMCwgc2l6ZW9mKHV1aWQpKTsKKwl1dWlkX2dlbmVyYXRlKHV1aWQpOworCisJcGVkX3RpbWVyX3Jlc2V0KHRpbWVyKTsKKwlwZWRfdGltZXJfc2V0X3N0YXRlX25hbWUodGltZXIsIF8oImNyZWF0aW5nIikpOworCisJaWYgKGxpYnJlaXNlcmZzX2dhdWdlX2NyZWF0ZSAmJiBsaWJyZWlzZXJmc19nYXVnZV9mcmVlKSB7CisJCWlmICghIChnYXVnZSA9CisJCSAgICAgbGlicmVpc2VyZnNfZ2F1Z2VfY3JlYXRlKE5VTEwsIGdhdWdlX2hhbmRsZXIsIHRpbWVyKSkpCisJCQlnb3RvIGVycm9yX2ZyZWVfZGFsOworCX0KKworCWlmICghKGZzX2luZm8gPSByZWlzZXJmc19mc19jcmVhdGUoZGFsLCBkYWwsIDAsIEpPVVJOQUxfTUFYX1RSQU5TLAorCQkJCQkgICBERUZBVUxUX0pPVVJOQUxfU0laRSwKKwkJCQkJICAgREVGQVVMVF9CTE9DS19TSVpFLAorCQkJCQkgICBGU19GT1JNQVRfM182LCBSNV9IQVNILCBOVUxMLAorCQkJCQkgICAoY2hhciAqKSB1dWlkLCBkYWxfbGVuKGRhbCksCisJCQkJCSAgIGdhdWdlKSkpCisJCWdvdG8gZXJyb3JfZnJlZV9nYXVnZTsKKworCXBlZF90aW1lcl91cGRhdGUodGltZXIsIDEuMCk7CisKKwlpZiAoZ2F1Z2UpCisJCWxpYnJlaXNlcmZzX2dhdWdlX2ZyZWUoZ2F1Z2UpOworCisJaWYgKCEoZnMgPSAoUGVkRmlsZVN5c3RlbSAqKSBwZWRfbWFsbG9jKHNpemVvZihQZWRGaWxlU3lzdGVtKSkpKQorCQlnb3RvIGVycm9yX2ZyZWVfZnNfaW5mbzsKKworCWZzLT50eXBlID0gcmVpc2VyZnNfdHlwZTsKKwlmcy0+Z2VvbSA9IGZzX2dlb207CisJZnMtPnR5cGVfc3BlY2lmaWMgPSAodm9pZCAqKSBmc19pbmZvOworCisJcmV0dXJuIGZzOworCitlcnJvcl9mcmVlX2ZzX2luZm86CisJcGVkX2ZyZWUoZnNfaW5mbyk7CitlcnJvcl9mcmVlX2dhdWdlOgorCWlmIChnYXVnZSkKKwkJbGlicmVpc2VyZnNfZ2F1Z2VfZnJlZShnYXVnZSk7CitlcnJvcl9mcmVlX2RhbDoKKwlnZW9tX2RhbF9mcmVlKGRhbCk7CitlcnJvcl9mc19nZW9tX2ZyZWU6CisJcGVkX2dlb21ldHJ5X2Rlc3Ryb3koZnNfZ2VvbSk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgcmVpc2VyZnNfY2xvc2UoUGVkRmlsZVN5c3RlbSAqZnMpCit7CisJZGFsX3QgKmRhbDsKKworCVBFRF9BU1NFUlQoZnMgIT0gTlVMTCwgcmV0dXJuIDApOworCisJZGFsID0gcmVpc2VyZnNfZnNfaG9zdF9kYWwoZnMtPnR5cGVfc3BlY2lmaWMpOworCXJlaXNlcmZzX2ZzX2Nsb3NlKGZzLT50eXBlX3NwZWNpZmljKTsKKworCWdlb21fZGFsX2ZyZWUoZGFsKTsKKwlwZWRfZ2VvbWV0cnlfc3luYyhmcy0+Z2VvbSk7CisKKwlwZWRfZnJlZShmcyk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBQZWRDb25zdHJhaW50ICpyZWlzZXJmc19nZXRfY3JlYXRlX2NvbnN0cmFpbnQoY29uc3QgUGVkRGV2aWNlICpkZXYpCit7CisJUGVkR2VvbWV0cnkgZnVsbF9kZXY7CisJUGVkU2VjdG9yIG1pbl9ibGtzID0gKFNVUEVSX09GRlNFVF9JTl9CWVRFUyAvIERFRkFVTFRfQkxPQ0tfU0laRSkKKwkJCSAgICAgKyAyICsgREVGQVVMVF9KT1VSTkFMX1NJWkUgKyAxICsgMTAwICsgMTsKKworCWlmICghcGVkX2dlb21ldHJ5X2luaXQoJmZ1bGxfZGV2LCBkZXYsIDAsIGRldi0+bGVuZ3RoIC0gMSkpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIHBlZF9jb25zdHJhaW50X25ldyhwZWRfYWxpZ25tZW50X2FueSwgcGVkX2FsaWdubWVudF9hbnksCisJCQkJICAmZnVsbF9kZXYsICZmdWxsX2RldiwKKwkJCQkgIG1pbl9ibGtzICogKERFRkFVTFRfQkxPQ0tfU0laRSAvIDUxMiksCisJCQkJICBkZXYtPmxlbmd0aCk7Cit9CisKK3N0YXRpYyBpbnQgcmVpc2VyZnNfY2hlY2soUGVkRmlsZVN5c3RlbSAqZnMsIFBlZFRpbWVyICp0aW1lcikKK3sKKwlyZWlzZXJmc19mc190ICpmc19pbmZvOworI2lmZGVmIEhBVkVfUkVJU0VSRlNfRlNfQ0hFQ0sKKwlyZWlzZXJmc19nYXVnZV90ICpnYXVnZSA9IE5VTEw7CisjZW5kaWYKKworCVBFRF9BU1NFUlQoZnMgIT0gTlVMTCwgcmV0dXJuIDApOworCisJZnNfaW5mbyA9IGZzLT50eXBlX3NwZWNpZmljOworCisJaWYgKCFyZWlzZXJmc19mc19pc19jb25zaXN0ZW50KGZzX2luZm8pKSB7CisJCXBlZF9leGNlcHRpb25fdGhyb3coUEVEX0VYQ0VQVElPTl9FUlJPUiwKKwkJCQkgICAgUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQkJICAgIF8oIlRoZSBmaWxlIHN5c3RlbSBpcyBpbiBhbiBpbnZhbGlkICIKKwkJCQkgICAgICAic3RhdGUuICBQZXJoYXBzIGl0IGlzIG1vdW50ZWQ/IikpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXJlaXNlcmZzX2ZzX2lzX3Jlc2l6ZWFibGUoZnNfaW5mbykpCisJCXBlZF9leGNlcHRpb25fdGhyb3coUEVEX0VYQ0VQVElPTl9XQVJOSU5HLAorCQkJCSAgICBQRURfRVhDRVBUSU9OX0lHTk9SRSwKKwkJCQkgICAgXygiVGhlIGZpbGUgc3lzdGVtIGlzIGluIG9sZCAiCisJCQkJICAgICAgIih1bnJlc2l6ZWFibGUpIGZvcm1hdC4iKSk7CisKKwlpZiAoIXJlaXNlcmZzX2ZzX2JpdG1hcF9jaGVjayhmc19pbmZvKSkgeworCQlwZWRfZXhjZXB0aW9uX3Rocm93KFBFRF9FWENFUFRJT05fRVJST1IsCisJCQkJICAgIFBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJCSAgICBfKCJJbnZhbGlkIGZyZWUgYmxvY2tzIGNvdW50LiAgUnVuICIKKwkJCQkgICAgICAicmVpc2VyZnNjayAtLWNoZWNrIGZpcnN0LiIpKTsKKwkJcmV0dXJuIDA7CisJfQorCisjaWZkZWYgSEFWRV9SRUlTRVJGU19GU19DSEVDSworCXBlZF90aW1lcl9yZXNldCh0aW1lcik7CisJCisJaWYgKGxpYnJlaXNlcmZzX2dhdWdlX2NyZWF0ZSAmJiBsaWJyZWlzZXJmc19nYXVnZV9mcmVlKSB7CisJCWlmICghCisJCSAgICAoZ2F1Z2UgPQorCQkgICAgIGxpYnJlaXNlcmZzX2dhdWdlX2NyZWF0ZShOVUxMLCBnYXVnZV9oYW5kbGVyLCB0aW1lcikpKQorCQkJcmV0dXJuIDA7CisJfQorCQkKKwlwZWRfdGltZXJfc2V0X3N0YXRlX25hbWUodGltZXIsIF8oImNoZWNraW5nIikpOworCXBlZF90aW1lcl91cGRhdGUodGltZXIsIDAuMCk7CisKKwlpZiAoIXJlaXNlcmZzX2ZzX2NoZWNrKGZzX2luZm8sIGdhdWdlKSkgeworCQlwZWRfZXhjZXB0aW9uX3Rocm93KFBFRF9FWENFUFRJT05fRVJST1IsCisJCQkJICAgIFBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJCSAgICBfKCJSZWlzZXJmcyB0cmVlIHNlZW1zIHRvIGJlIGNvcnJ1cHRlZC4gICIKKwkJCQkgICAgICAiUnVuIHJlaXNlcmZzY2sgLS1jaGVjayBmaXJzdC4iKSk7CisJCXJldHVybiAwOworCX0KKwkKKwlwZWRfdGltZXJfdXBkYXRlKHRpbWVyLCAxLjApOworCisJaWYgKGdhdWdlKQorCQlsaWJyZWlzZXJmc19nYXVnZV9mcmVlKGdhdWdlKTsKKyNlbmRpZgorCQorCXBlZF9leGNlcHRpb25fdGhyb3coUEVEX0VYQ0VQVElPTl9JTkZPUk1BVElPTiwgUEVEX0VYQ0VQVElPTl9PSywKKwkJCSAgICBfKCJUaGUgcmVpc2VyZnMgZmlsZSBzeXN0ZW0gcGFzc2VkIGEgYmFzaWMgY2hlY2suICAiCisJCQkgICAgICAiRm9yIGEgbW9yZSBjb21wcmVoZW5zaXZlIGNoZWNrLCBydW4gIgorCQkJICAgICAgInJlaXNlcmZzY2sgLS1jaGVjay4iKSk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCByZWlzZXJmc19yZXNpemUoUGVkRmlsZVN5c3RlbSAqZnMsIFBlZEdlb21ldHJ5ICpnZW9tLAorCQkJICAgUGVkVGltZXIgKnRpbWVyKQoreworCWRhbF90ICpkYWw7CisJYmxrX3QgZnNfbGVuOworCVBlZFNlY3RvciBvbGRfbGVuZ3RoOworCXJlaXNlcmZzX2ZzX3QgKmZzX2luZm87CisJcmVpc2VyZnNfZ2F1Z2VfdCAqZ2F1Z2UgPSBOVUxMOworCisJUEVEX0FTU0VSVChmcyAhPSBOVUxMLCByZXR1cm4gMCk7CisKKwlvbGRfbGVuZ3RoID0gZnMtPmdlb20tPmxlbmd0aDsKKworCVBFRF9BU1NFUlQgKGZzLT5nZW9tLT5kZXYgPT0gZ2VvbS0+ZGV2LCByZXR1cm4gMCk7CisKKwlpZiAoZnMtPmdlb20tPnN0YXJ0ICE9IGdlb20tPnN0YXJ0KSB7CisJCXBlZF9leGNlcHRpb25fdGhyb3coUEVEX0VYQ0VQVElPTl9FUlJPUiwKKwkJCQkgICAgUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQkJICAgIF8oIlNvcnJ5LCBjYW4ndCBtb3ZlIHRoZSBzdGFydCBvZiAiCisJCQkJICAgICAgInJlaXNlcmZzIHBhcnRpdGlvbnMgeWV0LiIpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJZnNfaW5mbyA9IGZzLT50eXBlX3NwZWNpZmljOworCisJZnNfbGVuID0gKGJsa190KSAoZ2VvbS0+bGVuZ3RoIC8gKHJlaXNlcmZzX2ZzX2Jsb2NrX3NpemUoZnNfaW5mbykgLworCQkJCQkgIFBFRF9TRUNUT1JfU0laRV9ERUZBVUxUKSk7CisKKwlkYWwgPSByZWlzZXJmc19mc19ob3N0X2RhbChmc19pbmZvKTsKKworCWlmIChkYWxfZmxhZ3MoZGFsKSAmJiBPX1JET05MWSkgeworCQlpZiAoIWdlb21fZGFsX3Jlb3BlbihkYWwsIE9fUkRXUikpIHsKKwkJCXBlZF9leGNlcHRpb25fdGhyb3coUEVEX0VYQ0VQVElPTl9FUlJPUiwKKwkJCQkJICAgIFBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJCQkgICAgXygiQ291bGRuJ3QgcmVvcGVuIGRldmljZSAiCisJCQkJCSAgICAgICJhYnN0cmFjdGlvbiBsYXllciBmb3IgIgorCQkJCQkgICAgICAicmVhZC93cml0ZS4iKSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCXBlZF90aW1lcl9yZXNldCh0aW1lcik7CisKKwlpZiAobGlicmVpc2VyZnNfZ2F1Z2VfY3JlYXRlICYmIGxpYnJlaXNlcmZzX2dhdWdlX2ZyZWUpIHsKKwkJaWYgKCEKKwkJICAgIChnYXVnZSA9CisJCSAgICAgbGlicmVpc2VyZnNfZ2F1Z2VfY3JlYXRlKE5VTEwsIGdhdWdlX2hhbmRsZXIsIHRpbWVyKSkpCisJCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAob2xkX2xlbmd0aCA+IGdlb20tPmxlbmd0aCkgeworCisJCXBlZF90aW1lcl9zZXRfc3RhdGVfbmFtZSh0aW1lciwgXygic2hyaW5raW5nIikpOworCQlwZWRfdGltZXJfdXBkYXRlKHRpbWVyLCAwLjApOworCisJCWlmICghcmVpc2VyZnNfZnNfcmVzaXplKGZzX2luZm8sIGZzX2xlbiwgZ2F1Z2UpKQorCQkJZ290byBlcnJvcl9mcmVlX2dhdWdlOworCisJCXBlZF9nZW9tZXRyeV9zZXRfZW5kIChmcy0+Z2VvbSwgZ2VvbS0+ZW5kKTsKKwkJZGFsX3JlYWxpemUoZGFsKTsKKwl9IGVsc2UgeworCQlwZWRfZ2VvbWV0cnlfc2V0X2VuZCAoZnMtPmdlb20sIGdlb20tPmVuZCk7CisJCWRhbF9yZWFsaXplKGRhbCk7CisKKwkJcGVkX3RpbWVyX3NldF9zdGF0ZV9uYW1lKHRpbWVyLCBfKCJleHBhbmRpbmciKSk7CisJCXBlZF90aW1lcl91cGRhdGUodGltZXIsIDAuMCk7CisKKwkJaWYgKCFyZWlzZXJmc19mc19yZXNpemUoZnNfaW5mbywgZnNfbGVuLCBnYXVnZSkpCisJCQlnb3RvIGVycm9yX2ZyZWVfZ2F1Z2U7CisJfQorCisJcGVkX3RpbWVyX3VwZGF0ZSh0aW1lciwgMS4wKTsKKworCWlmIChnYXVnZSkKKwkJbGlicmVpc2VyZnNfZ2F1Z2VfZnJlZShnYXVnZSk7CisKKwlyZXR1cm4gMTsKKworZXJyb3JfZnJlZV9nYXVnZToKKwlpZiAoZ2F1Z2UpCisJCWxpYnJlaXNlcmZzX2dhdWdlX2ZyZWUoZ2F1Z2UpOworCXBlZF9nZW9tZXRyeV9zZXRfZW5kIChmcy0+Z2VvbSwgZnMtPmdlb20tPnN0YXJ0ICsgb2xkX2xlbmd0aCAtIDEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgUGVkQ29uc3RyYWludCAqcmVpc2VyZnNfZ2V0X3Jlc2l6ZV9jb25zdHJhaW50KGNvbnN0IFBlZEZpbGVTeXN0ZW0gKgorCQkJCQkJICAgICBmcykKK3sKKwlQZWREZXZpY2UgKmRldjsKKwlQZWRTZWN0b3IgbWluX3NpemU7CisJUGVkR2VvbWV0cnkgZnVsbF9kaXNrOworCXJlaXNlcmZzX2ZzX3QgKmZzX2luZm87CisJUGVkQWxpZ25tZW50IHN0YXJ0X2FsaWduOworCVBlZEdlb21ldHJ5IHN0YXJ0X3NlY3RvcjsKKworCVBFRF9BU1NFUlQoZnMgIT0gTlVMTCwgcmV0dXJuIE5VTEwpOworCisJZnNfaW5mbyA9IGZzLT50eXBlX3NwZWNpZmljOworCWRldiA9IGZzLT5nZW9tLT5kZXY7CisKKwlpZiAoIXBlZF9hbGlnbm1lbnRfaW5pdCgmc3RhcnRfYWxpZ24sIGZzLT5nZW9tLT5zdGFydCwgMCkpCisJCXJldHVybiBOVUxMOworCWlmICghcGVkX2dlb21ldHJ5X2luaXQoJmZ1bGxfZGlzaywgZGV2LCAwLCBkZXYtPmxlbmd0aCAtIDEpKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAoIXBlZF9nZW9tZXRyeV9pbml0KCZzdGFydF9zZWN0b3IsIGRldiwgZnMtPmdlb20tPnN0YXJ0LCAxKSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiAKKwkgICBNaW5zaXplIGZvciByZWlzZXJmcyBpcyBhcmVhIG9jY3VwaWVkIGJ5IGRhdGEgYmxvY2tzIGFuZCAKKwkgICBtZXRhZGF0YSBibG9ja3MgbWludXMgZnJlZSBzcGFjZSBibG9ja3MgYW5kIG1pbnVzIGJpdG1hcCAKKwkgICBibG9ja3Mgd2hpY2ggZGVzY3JpYmVzIGZyZWUgc3BhY2UgYmxvY2tzLgorCSAqLworCW1pbl9zaXplID0gcmVpc2VyZnNfZnNfbWluX3NpemUoZnNfaW5mbykgKgorCSAgICAocmVpc2VyZnNfZnNfYmxvY2tfc2l6ZShmc19pbmZvKSAvIFBFRF9TRUNUT1JfU0laRV9ERUZBVUxUKTsKKworCXJldHVybiBwZWRfY29uc3RyYWludF9uZXcoJnN0YXJ0X2FsaWduLCBwZWRfYWxpZ25tZW50X2FueSwKKwkJCQkgICZzdGFydF9zZWN0b3IsICZmdWxsX2Rpc2ssIG1pbl9zaXplLAorCQkJCSAgZGV2LT5sZW5ndGgpOworfQorCitzdGF0aWMgUGVkRmlsZVN5c3RlbSAqcmVpc2VyZnNfY29weShjb25zdCBQZWRGaWxlU3lzdGVtICpmcywKKwkJCQkgICAgUGVkR2VvbWV0cnkgKmdlb20sIFBlZFRpbWVyICp0aW1lcikKK3sKKwlkYWxfdCAqZGFsOworCVBlZEdlb21ldHJ5ICpmc19nZW9tOworCVBlZEZpbGVTeXN0ZW0gKm5ld19mczsKKwlibGtfdCBmc19sZW4sIG1pbl9uZWVkZWRfYmxrOworCisJcmVpc2VyZnNfZnNfdCAqZGVzdF9mcywgKnNyY19mczsKKwlyZWlzZXJmc19nYXVnZV90ICpnYXVnZSA9IE5VTEw7CisKKwlmc19nZW9tID0gcGVkX2dlb21ldHJ5X2R1cGxpY2F0ZShnZW9tKTsKKworCWlmICghKGRhbCA9IGdlb21fZGFsX2NyZWF0ZShmc19nZW9tLCBERUZBVUxUX0JMT0NLX1NJWkUsIE9fUkRXUikpKSB7CisJCXBlZF9leGNlcHRpb25fdGhyb3coUEVEX0VYQ0VQVElPTl9FUlJPUiwKKwkJCQkgICAgUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQkJICAgIF8oIkNvdWxkbid0IGNyZWF0ZSByZWlzZXJmcyBkZXZpY2UgIgorCQkJCSAgICAgICJhYnN0cmFjdGlvbiBoYW5kbGVyLiIpKTsKKwkJZ290byBlcnJvcl9mcmVlX2ZzX2dlb207CisJfQorCisJc3JjX2ZzID0gZnMtPnR5cGVfc3BlY2lmaWM7CisKKwlmc19sZW4gPQorCSAgICAoZ2VvbS0+bGVuZ3RoIC8gKHJlaXNlcmZzX2ZzX2Jsb2NrX3NpemUoc3JjX2ZzKSAvIFBFRF9TRUNUT1JfU0laRV9ERUZBVUxUKSk7CisJbWluX25lZWRlZF9ibGsgPSByZWlzZXJmc19mc19iaXRtYXBfdXNlZChzcmNfZnMpOworCisJaWYgKGZzX2xlbiA8PSBtaW5fbmVlZGVkX2JsaykgeworCQlwZWRfZXhjZXB0aW9uX3Rocm93KFBFRF9FWENFUFRJT05fRVJST1IsCisJCQkJICAgIFBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJCSAgICBfKCJEZXZpY2UgaXMgdG9vIHNtYWxsIGZvciAlbHUgYmxvY2tzLiIpLAorCQkJCSAgICBtaW5fbmVlZGVkX2Jsayk7CisJCWdvdG8gZXJyb3JfZnJlZV9kYWw7CisJfQorCisJaWYgKCEgKG5ld19mcyA9IChQZWRGaWxlU3lzdGVtICopIHBlZF9tYWxsb2Moc2l6ZW9mKFBlZEZpbGVTeXN0ZW0pKSkpCisJCWdvdG8gZXJyb3JfZnJlZV9kYWw7CisKKwlwZWRfdGltZXJfcmVzZXQodGltZXIpOworCXBlZF90aW1lcl9zZXRfc3RhdGVfbmFtZSh0aW1lciwgXygiY29weWluZyIpKTsKKwlwZWRfdGltZXJfdXBkYXRlKHRpbWVyLCAwLjApOworCisJaWYgKGxpYnJlaXNlcmZzX2dhdWdlX2NyZWF0ZSAmJiBsaWJyZWlzZXJmc19nYXVnZV9mcmVlKSB7CisJCWlmICghIChnYXVnZSA9CisJCSAgICAgbGlicmVpc2VyZnNfZ2F1Z2VfY3JlYXRlKE5VTEwsIGdhdWdlX2hhbmRsZXIsIHRpbWVyKSkpCisJCQlnb3RvIGVycm9yX2ZyZWVfbmV3X2ZzOworCX0KKworCWlmICghKGRlc3RfZnMgPSByZWlzZXJmc19mc19jb3B5KHNyY19mcywgZGFsLCBnYXVnZSkpKQorCQlnb3RvIGVycm9yX2ZyZWVfZ2F1Z2U7CisKKwlwZWRfdGltZXJfdXBkYXRlKHRpbWVyLCAxLjApOworCisJaWYgKGdhdWdlKQorCQlsaWJyZWlzZXJmc19nYXVnZV9mcmVlKGdhdWdlKTsKKworCW5ld19mcy0+dHlwZSA9IHJlaXNlcmZzX3R5cGU7CisJbmV3X2ZzLT5nZW9tID0gZnNfZ2VvbTsKKwluZXdfZnMtPnR5cGVfc3BlY2lmaWMgPSAodm9pZCAqKSBkZXN0X2ZzOworCisJcmV0dXJuIG5ld19mczsKKworZXJyb3JfZnJlZV9nYXVnZToKKwlpZiAoZ2F1Z2UpCisJCWxpYnJlaXNlcmZzX2dhdWdlX2ZyZWUoZ2F1Z2UpOworZXJyb3JfZnJlZV9uZXdfZnM6CisJcGVkX2ZyZWUobmV3X2ZzKTsKK2Vycm9yX2ZyZWVfZGFsOgorCWdlb21fZGFsX2ZyZWUoZGFsKTsKK2Vycm9yX2ZyZWVfZnNfZ2VvbToKKwlwZWRfZ2VvbWV0cnlfZGVzdHJveShmc19nZW9tKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIFBlZENvbnN0cmFpbnQgKnJlaXNlcmZzX2dldF9jb3B5X2NvbnN0cmFpbnQoY29uc3QgUGVkRmlsZVN5c3RlbSAqZnMsCisJCQkJCQkgICBjb25zdCBQZWREZXZpY2UgKmRldikKK3sKKwlQZWRHZW9tZXRyeSBmdWxsX2RldjsKKworCVBFRF9BU1NFUlQoZnMgIT0gTlVMTCwgcmV0dXJuIE5VTEwpOworCVBFRF9BU1NFUlQoZGV2ICE9IE5VTEwsIHJldHVybiBOVUxMKTsKKworCWlmICghcGVkX2dlb21ldHJ5X2luaXQoJmZ1bGxfZGV2LCBkZXYsIDAsIGRldi0+bGVuZ3RoIC0gMSkpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIHBlZF9jb25zdHJhaW50X25ldyhwZWRfYWxpZ25tZW50X2FueSwgcGVkX2FsaWdubWVudF9hbnksCisJCQkJICAmZnVsbF9kZXYsICZmdWxsX2RldiwKKwkJCQkgIHJlaXNlcmZzX2ZzX2JpdG1hcF91c2VkKGZzLT50eXBlX3NwZWNpZmljKSwKKwkJCQkgIGRldi0+bGVuZ3RoKTsKK30KKworI2VuZGlmIC8qICFSRUlTRVJfRlVMTF9TVVBQT1JUICovCisKKyNpZmRlZiBEWU5BTUlDX0xPQURJTkcKKworI2RlZmluZSBJTklUX1NZTShTWU0pCVNZTSA9IGdldHN5bSAobGlicmVpc2VyZnNfaGFuZGxlLCAjU1lNKQorCitzdGF0aWMgdm9pZCAqZ2V0c3ltKHZvaWQgKmhhbmRsZSwgY29uc3QgY2hhciAqc3ltYm9sKQoreworCXZvaWQgKmVudHJ5OworCWNoYXIgKmVycm9yOworCisJZW50cnkgPSBkbHN5bShoYW5kbGUsIHN5bWJvbCk7CisJaWYgKChlcnJvciA9IGRsZXJyb3IoKSkgIT0gTlVMTCkgeworCQlwZWRfZXhjZXB0aW9uX3Rocm93KFBFRF9FWENFUFRJT05fV0FSTklORywKKwkJCQkgICAgUEVEX0VYQ0VQVElPTl9JR05PUkUsCisJCQkJICAgIF8oIkNvdWxkbid0IHJlc29sdmUgc3ltYm9sICVzLiAgIgorCQkJCSAgICAgICJFcnJvcjogJXMuIiksCisJCQkJICAgIHN5bWJvbCwgZXJyb3IpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gZW50cnk7Cit9CisKK3N0YXRpYyBpbnQgcmVpc2VyZnNfb3BzX2ludGVyZmFjZV92ZXJzaW9uX2NoZWNrKHZvaWQpCit7CisJaW50IG1pbl9pbnRlcmZhY2VfdmVyc2lvbiwgbWF4X2ludGVyZmFjZV92ZXJzaW9uOworCWludCAoKmxpYnJlaXNlcmZzX2dldF9tYXhfaW50ZXJmYWNlX3ZlcnNpb24pICh2b2lkKTsKKwlpbnQgKCpsaWJyZWlzZXJmc19nZXRfbWluX2ludGVyZmFjZV92ZXJzaW9uKSAodm9pZCk7CisKKwlJTklUX1NZTShsaWJyZWlzZXJmc19nZXRfbWF4X2ludGVyZmFjZV92ZXJzaW9uKTsKKwlJTklUX1NZTShsaWJyZWlzZXJmc19nZXRfbWluX2ludGVyZmFjZV92ZXJzaW9uKTsKKworCWlmICghbGlicmVpc2VyZnNfZ2V0X21pbl9pbnRlcmZhY2VfdmVyc2lvbiB8fAorCSAgICAhbGlicmVpc2VyZnNfZ2V0X21heF9pbnRlcmZhY2VfdmVyc2lvbikgeworCQlwZWRfZXhjZXB0aW9uX3Rocm93KAorCQkJUEVEX0VYQ0VQVElPTl9XQVJOSU5HLCBQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCV8oIkdOVSBQYXJ0ZWQgZm91bmQgYW4gaW52YWxpZCBsaWJyZWlzZXJmcyBsaWJyYXJ5LiIpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJbWluX2ludGVyZmFjZV92ZXJzaW9uID0gbGlicmVpc2VyZnNfZ2V0X21pbl9pbnRlcmZhY2VfdmVyc2lvbigpOworCW1heF9pbnRlcmZhY2VfdmVyc2lvbiA9IGxpYnJlaXNlcmZzX2dldF9tYXhfaW50ZXJmYWNlX3ZlcnNpb24oKTsKKworCWlmIChSRUlTRVJGU19BUElfVkVSU0lPTiA8IG1pbl9pbnRlcmZhY2VfdmVyc2lvbiB8fAorCSAgICBSRUlTRVJGU19BUElfVkVSU0lPTiA+IG1heF9pbnRlcmZhY2VfdmVyc2lvbikgeworCQlwZWRfZXhjZXB0aW9uX3Rocm93KAorCQkJUEVEX0VYQ0VQVElPTl9XQVJOSU5HLCBQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCV8oIkdOVSBQYXJ0ZWQgaGFzIGRldGVjdGVkIGxpYnJlaXNlcmZzIGludGVyZmFjZSAiCisJCQkgICJ2ZXJzaW9uIG1pc21hdGNoLiAgRm91bmQgJWQtJWQsIHJlcXVpcmVkICVkLiAiCisJCQkgICJSZWlzZXJGUyBzdXBwb3J0IHdpbGwgYmUgZGlzYWJsZWQuIiksCisJCQltaW5faW50ZXJmYWNlX3ZlcnNpb24sCisJCQltYXhfaW50ZXJmYWNlX3ZlcnNpb24sCisJCQlSRUlTRVJGU19BUElfVkVSU0lPTik7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHJlaXNlcmZzX29wc19pbml0KHZvaWQpCit7CisJaWYgKCEobGlicmVpc2VyZnNfaGFuZGxlID0gZGxvcGVuKCJsaWJyZWlzZXJmcy5zbyIsIFJUTERfTk9XKSkpCisJCWdvdG8gZXJyb3I7CisKKwlpZiAoIXJlaXNlcmZzX29wc19pbnRlcmZhY2VfdmVyc2lvbl9jaGVjaygpKQorCQlnb3RvIGVycm9yX2ZyZWVfbGlicmVpc2VyZnNfaGFuZGxlOworCisJaWYgKCEobGliZGFsX2hhbmRsZSA9IGRsb3BlbigibGliZGFsLnNvIiwgUlRMRF9OT1cpKSkKKwkJZ290byBlcnJvcl9mcmVlX2xpYnJlaXNlcmZzX2hhbmRsZTsKKworCUlOSVRfU1lNKHJlaXNlcmZzX2ZzX3Byb2JlKTsKKwlJTklUX1NZTShsaWJyZWlzZXJmc19leGNlcHRpb25fdHlwZSk7CisKKwlJTklUX1NZTShsaWJyZWlzZXJmc19leGNlcHRpb25fb3B0aW9uKTsKKwlJTklUX1NZTShsaWJyZWlzZXJmc19leGNlcHRpb25fbWVzc2FnZSk7CisJSU5JVF9TWU0obGlicmVpc2VyZnNfZXhjZXB0aW9uX3NldF9oYW5kbGVyKTsKKworCUlOSVRfU1lNKHJlaXNlcmZzX2ZzX2Nsb2JiZXIpOworCUlOSVRfU1lNKHJlaXNlcmZzX2ZzX29wZW4pOworCUlOSVRfU1lNKHJlaXNlcmZzX2ZzX2NyZWF0ZSk7CisJSU5JVF9TWU0ocmVpc2VyZnNfZnNfcmVzaXplKTsKKwlJTklUX1NZTShyZWlzZXJmc19mc19jb3B5KTsKKworCUlOSVRfU1lNKHJlaXNlcmZzX2ZzX2lzX3Jlc2l6ZWFibGUpOworCUlOSVRfU1lNKHJlaXNlcmZzX2ZzX2lzX2NvbnNpc3RlbnQpOworCisJSU5JVF9TWU0ocmVpc2VyZnNfZnNfYml0bWFwX2NoZWNrKTsKKwlJTklUX1NZTShyZWlzZXJmc19mc19iaXRtYXBfdXNlZCk7CisKKwlJTklUX1NZTShyZWlzZXJmc19mc19taW5fc2l6ZSk7CisJSU5JVF9TWU0ocmVpc2VyZnNfZnNfYmxvY2tfc2l6ZSk7CisKKwlJTklUX1NZTShyZWlzZXJmc19mc19ob3N0X2RhbCk7CisJSU5JVF9TWU0ocmVpc2VyZnNfZnNfY2xvc2UpOworCisJSU5JVF9TWU0obGlicmVpc2VyZnNfZ2F1Z2VfY3JlYXRlKTsKKwlJTklUX1NZTShsaWJyZWlzZXJmc19nYXVnZV9mcmVlKTsKKworCUlOSVRfU1lNKGRhbF9yZWFsaXplKTsKKwlJTklUX1NZTShkYWxfZmxhZ3MpOworCisJSU5JVF9TWU0oZGFsX2Jsb2NrX3NpemUpOworCUlOSVRfU1lNKGRhbF9sZW4pOworCisJcmV0dXJuIDE7CisKK2Vycm9yX2ZyZWVfbGlicmVpc2VyZnNfaGFuZGxlOgorCWRsY2xvc2UobGlicmVpc2VyZnNfaGFuZGxlKTsKKwlsaWJyZWlzZXJmc19oYW5kbGUgPSBOVUxMOworZXJyb3I6CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHJlaXNlcmZzX29wc19kb25lKCkKK3sKKwlpZiAobGliZGFsX2hhbmRsZSkKKwkJZGxjbG9zZShsaWJkYWxfaGFuZGxlKTsKKwlpZiAobGlicmVpc2VyZnNfaGFuZGxlKQorCQlkbGNsb3NlKGxpYnJlaXNlcmZzX2hhbmRsZSk7Cit9CisjZW5kaWYgLyogRFlOQU1JQ19MT0FESU5HICovCisKKyNkZWZpbmUgUkVJU0VSX0JMT0NLX1NJWkVTICgoaW50W10pezUxMiwgMTAyNCwgMjA0OCwgNDA5NiwgODE5MiwgMH0pCisKKyNpZmRlZiBSRUlTRVJfRlVMTF9TVVBQT1JUCitzdGF0aWMgUGVkRmlsZVN5c3RlbU9wcyByZWlzZXJmc19mdWxsX29wcyA9IHsKKwlwcm9iZToJCXJlaXNlcmZzX3Byb2JlLAorCWNsb2JiZXI6CXJlaXNlcmZzX2Nsb2JiZXIsCisJb3BlbjoJCXJlaXNlcmZzX29wZW4sCisJY3JlYXRlOgkJcmVpc2VyZnNfY3JlYXRlLAorCWNsb3NlOgkJcmVpc2VyZnNfY2xvc2UsCisJY2hlY2s6CQlyZWlzZXJmc19jaGVjaywKKwljb3B5OgkJcmVpc2VyZnNfY29weSwKKwlyZXNpemU6CQlyZWlzZXJmc19yZXNpemUsCisJZ2V0X2NyZWF0ZV9jb25zdHJhaW50OglyZWlzZXJmc19nZXRfY3JlYXRlX2NvbnN0cmFpbnQsCisJZ2V0X3Jlc2l6ZV9jb25zdHJhaW50OglyZWlzZXJmc19nZXRfcmVzaXplX2NvbnN0cmFpbnQsCisJZ2V0X2NvcHlfY29uc3RyYWludDoJcmVpc2VyZnNfZ2V0X2NvcHlfY29uc3RyYWludAorfTsKKworc3RhdGljIFBlZEZpbGVTeXN0ZW1UeXBlIHJlaXNlcmZzX2Z1bGxfdHlwZSA9IHsKKwluZXh0OglOVUxMLAorCW9wczoJJnJlaXNlcmZzX2Z1bGxfb3BzLAorCW5hbWU6CSJyZWlzZXJmcyIsCisgICAgICAgIGJsb2NrX3NpemVzOiAgICBSRUlTRVJfQkxPQ0tfU0laRVMKK307CisjZW5kaWYgLyogUkVJU0VSX0ZVTExfU1VQUE9SVCAqLworCitzdGF0aWMgUGVkRmlsZVN5c3RlbU9wcyByZWlzZXJmc19zaW1wbGVfb3BzID0geworCXByb2JlOgkJcmVpc2VyZnNfcHJvYmUsCisjaWZkZWYgRElTQ09WRVJfT05MWQorCWNsb2JiZXI6CU5VTEwsCisjZWxzZQorCWNsb2JiZXI6CXJlaXNlcmZzX2Nsb2JiZXIsCisjZW5kaWYKKwlvcGVuOgkJTlVMTCwKKwljcmVhdGU6CQlOVUxMLAorCWNsb3NlOgkJTlVMTCwKKwljaGVjazoJCU5VTEwsCisJY29weToJCU5VTEwsCisJcmVzaXplOgkJTlVMTCwKKwlnZXRfY3JlYXRlX2NvbnN0cmFpbnQ6CU5VTEwsCisJZ2V0X3Jlc2l6ZV9jb25zdHJhaW50OglOVUxMLAorCWdldF9jb3B5X2NvbnN0cmFpbnQ6CU5VTEwKK307CisKK3N0YXRpYyBQZWRGaWxlU3lzdGVtVHlwZSByZWlzZXJmc19zaW1wbGVfdHlwZSA9IHsKKwluZXh0OgkgICAgICAgIE5VTEwsCisJb3BzOgkgICAgICAgICZyZWlzZXJmc19zaW1wbGVfb3BzLAorCW5hbWU6CSAgICAgICAgInJlaXNlcmZzIiwKKyAgICAgICAgYmxvY2tfc2l6ZXM6ICAgIFJFSVNFUl9CTE9DS19TSVpFUworfTsKKwordm9pZCBwZWRfZmlsZV9zeXN0ZW1fcmVpc2VyZnNfaW5pdCgpCit7CisjaWZkZWYgRFlOQU1JQ19MT0FESU5HCisJbGlicmVpc2VyZnNfcHJlc2VudCA9IHJlaXNlcmZzX29wc19pbml0KCk7CisJaWYgKGxpYnJlaXNlcmZzX3ByZXNlbnQpIHsKKwkJcmVpc2VyZnNfdHlwZSA9ICZyZWlzZXJmc19mdWxsX3R5cGU7CisJCWxpYnJlaXNlcmZzX2V4Y2VwdGlvbl9zZXRfaGFuZGxlcihleGNlcHRpb25faGFuZGxlcik7CisJfSBlbHNlIHsKKwkJcmVpc2VyZnNfdHlwZSA9ICZyZWlzZXJmc19zaW1wbGVfdHlwZTsKKwl9CisjZWxzZQkvKiAhRFlOQU1JQ19MT0FESU5HICovCisjaWZkZWYgUkVJU0VSX0ZVTExfU1VQUE9SVAorCWxpYnJlaXNlcmZzX2V4Y2VwdGlvbl9zZXRfaGFuZGxlcihleGNlcHRpb25faGFuZGxlcik7CisJcmVpc2VyZnNfdHlwZSA9ICZyZWlzZXJmc19mdWxsX3R5cGU7CisjZWxzZQorCXJlaXNlcmZzX3R5cGUgPSAmcmVpc2VyZnNfc2ltcGxlX3R5cGU7CisjZW5kaWYKKyNlbmRpZgkvKiAhRFlOQU1JQ19MT0FESU5HICovCisJcGVkX2ZpbGVfc3lzdGVtX3R5cGVfcmVnaXN0ZXIocmVpc2VyZnNfdHlwZSk7Cit9CisKK3ZvaWQgcGVkX2ZpbGVfc3lzdGVtX3JlaXNlcmZzX2RvbmUoKQoreworCXBlZF9maWxlX3N5c3RlbV90eXBlX3VucmVnaXN0ZXIocmVpc2VyZnNfdHlwZSk7CisjaWZkZWYgRFlOQU1JQ19MT0FESU5HCisJcmVpc2VyZnNfb3BzX2RvbmUoKTsKKyNlbmRpZiAvKiBEWU5BTUlDX0xPQURJTkcgKi8KK30KZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuaCBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2JmOWJmCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5oCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICAgIGxpYnBhcnRlZCAtIGEgbGlicmFyeSBmb3IgbWFuaXB1bGF0aW5nIGRpc2sgcGFydGl0aW9ucworICAgIENvcHlyaWdodCAoQykgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKKyovCisKKyNpZm5kZWYgUkVJU0VSRlNfSAorI2RlZmluZSBSRUlTRVJGU19ICisKKyNkZWZpbmUgUkVJU0VSRlNfQVBJX1ZFUlNJT04gMAorCisjZGVmaW5lIFJFSVNFUkZTX1NJR05BVFVSRSAiUmVJc0VyRnMiCisjZGVmaW5lIFJFSVNFUjJGU19TSUdOQVRVUkUgIlJlSXNFcjJGcyIKKyNkZWZpbmUgUkVJU0VSM0ZTX1NJR05BVFVSRSAiUmVJc0VyM0ZzIgorCisjZGVmaW5lIERFRkFVTFRfQkxPQ0tfU0laRSA0MDk2CisKK3N0cnVjdCByZWlzZXJmc19zdXBlcl9ibG9jayB7CisgICAgdWludDMyX3Qgc19ibG9ja19jb3VudDsKKyAgICB1aW50MzJfdCBzX2ZyZWVfYmxvY2tzOworICAgIHVpbnQzMl90IHNfcm9vdF9ibG9jazsKKyAgICB1aW50MzJfdCBzX2pvdXJuYWxfYmxvY2s7CisgICAgdWludDMyX3Qgc19qb3VybmFsX2RldjsKKyAgICB1aW50MzJfdCBzX29yaWdfam91cm5hbF9zaXplOworICAgIHVpbnQzMl90IHNfam91cm5hbF90cmFuc19tYXg7CisgICAgdWludDMyX3Qgc19qb3VybmFsX2Jsb2NrX2NvdW50OworICAgIHVpbnQzMl90IHNfam91cm5hbF9tYXhfYmF0Y2g7CisgICAgdWludDMyX3Qgc19qb3VybmFsX21heF9jb21taXRfYWdlOworICAgIHVpbnQzMl90IHNfam91cm5hbF9tYXhfdHJhbnNfYWdlOworICAgIHVpbnQxNl90IHNfYmxvY2tzaXplOworICAgIHVpbnQxNl90IHNfb2lkX21heHNpemU7CisgICAgdWludDE2X3Qgc19vaWRfY3Vyc2l6ZTsKKyAgICB1aW50MTZfdCBzX3N0YXRlOworICAgIGNoYXIgc19tYWdpY1sxMF07CisgICAgdWludDE2X3Qgc19mc2NrX3N0YXRlOworICAgIHVpbnQzMl90IHNfaGFzaF9mdW5jdGlvbl9jb2RlOworICAgIHVpbnQxNl90IHNfdHJlZV9oZWlnaHQ7CisgICAgdWludDE2X3Qgc19ibWFwX25yOworICAgIHVpbnQxNl90IHNfdmVyc2lvbjsKKyAgICBjaGFyIHBhZGRpbmdbNDM4XTsKK307CisKK3R5cGVkZWYgc3RydWN0IHJlaXNlcmZzX3N1cGVyX2Jsb2NrIHJlaXNlcmZzX3N1cGVyX2Jsb2NrX3Q7CisKK2VudW0gcmVpc2VyZnNfZXhjZXB0aW9uX3R5cGUgeworICAgIEVYQ0VQVElPTl9JTkZPUk1BVElPTiAJPSAxLAorICAgIEVYQ0VQVElPTl9XQVJOSU5HIAkJPSAyLAorICAgIEVYQ0VQVElPTl9FUlJPUiAJCT0gMywKKyAgICBFWENFUFRJT05fRkFUQUwgCQk9IDQsCisgICAgRVhDRVBUSU9OX0JVRyAJCT0gNSwKKyAgICBFWENFUFRJT05fTk9fRkVBVFVSRSAJPSA2Cit9OworCit0eXBlZGVmIGVudW0gcmVpc2VyZnNfZXhjZXB0aW9uX3R5cGUgcmVpc2VyZnNfZXhjZXB0aW9uX3R5cGVfdDsKKworZW51bSByZWlzZXJmc19leGNlcHRpb25fb3B0aW9uIHsKKyAgICBFWENFUFRJT05fVU5IQU5ETEVEIAk9IDEgPDwgMCwKKyAgICBFWENFUFRJT05fRklYIAkJPSAxIDw8IDEsCisgICAgRVhDRVBUSU9OX1lFUyAJCT0gMSA8PCAyLAorICAgIEVYQ0VQVElPTl9OTyAJCT0gMSA8PCAzLAorICAgIEVYQ0VQVElPTl9PSyAJCT0gMSA8PCA0LAorICAgIEVYQ0VQVElPTl9SRVRSWSAJCT0gMSA8PCA1LAorICAgIEVYQ0VQVElPTl9JR05PUkUgCQk9IDEgPDwgNiwKKyAgICBFWENFUFRJT05fQ0FOQ0VMIAkJPSAxIDw8IDcKK307CisKK3R5cGVkZWYgZW51bSByZWlzZXJmc19leGNlcHRpb25fb3B0aW9uIHJlaXNlcmZzX2V4Y2VwdGlvbl9vcHRpb25fdDsKKwordHlwZWRlZiB2b2lkIChyZWlzZXJmc19nYXVnZV9oYW5kbGVyX3QpKGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgaW50LCB2b2lkICosIGludCwgaW50LCBpbnQpOworCit0eXBlZGVmIHZvaWQgKiByZWlzZXJmc19leGNlcHRpb25fdDsKK3R5cGVkZWYgdm9pZCAqIHJlaXNlcmZzX2dhdWdlX3Q7Cit0eXBlZGVmIHZvaWQgKiByZWlzZXJmc19mc190OworCisjZGVmaW5lIEZTX0ZPUk1BVF8zXzUgCQkJMAorI2RlZmluZSBGU19GT1JNQVRfM182IAkJCTIKKworI2RlZmluZSBTVVBFUl9PRkZTRVRfSU5fQllURVMgCQk2NCoxMDI0CisKKyNkZWZpbmUgREVGQVVMVF9KT1VSTkFMX1NJWkUgODE5MgorCisjZGVmaW5lIEpPVVJOQUxfTUlOX1NJWkUgCQk1MTIKKyNkZWZpbmUgSk9VUk5BTF9NSU5fVFJBTlMgCQkyNTYKKyNkZWZpbmUgSk9VUk5BTF9NQVhfVFJBTlMgCQkxMDI0CisKKyNkZWZpbmUgSk9VUk5BTF9ERUZfUkFUSU8gCQk4CisjZGVmaW5lIEpPVVJOQUxfTUlOX1JBVElPIAkJMgorI2RlZmluZSBKT1VSTkFMX01BWF9CQVRDSCAgIAkJOTAwCisjZGVmaW5lIEpPVVJOQUxfTUFYX0NPTU1JVF9BR0UgCQkzMCAKKyNkZWZpbmUgSk9VUk5BTF9NQVhfVFJBTlNfQUdFIAkJMzAKKworI2RlZmluZSBURUFfSEFTSCAgCQkJMQorI2RlZmluZSBZVVJBX0hBU0gJCQkyCisjZGVmaW5lIFI1X0hBU0gJCQkJMworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvdWZzL01ha2VmaWxlLmFtIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy91ZnMvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTkxM2MyZAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvdWZzL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsOCBAQAorcGFydGVkaW5jbHVkZWRpcgk9IC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlCisKK25vaW5zdF9MVExJQlJBUklFUwk9IGxpYnVmcy5sYQorbGlidWZzX2xhX1NPVVJDRVMJPSB1ZnMuYworCitJTkNMVURFUyA9ICQocGFydGVkaW5jbHVkZWRpcikgJChJTlRMSU5DUykKKworTUFJTlRBSU5FUkNMRUFORklMRVMgPSBNYWtlZmlsZS5pbgpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy91ZnMvTWFrZWZpbGUuaW4gYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL3Vmcy9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2Q4ODlmCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy91ZnMvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw2MjQgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTAgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorCitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorc3ViZGlyID0gbGlicGFydGVkL2ZzL3VmcworRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9hYnNvbHV0ZS1oZWFkZXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvYWxsb2NhLm00ICQodG9wX3NyY2RpcikvbTQvYXNzZXJ0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2F0ZXhpdC5tNCAkKHRvcF9zcmNkaXIpL200L2NhbGxvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jbG9zZS1zdHJlYW0ubTQgJCh0b3Bfc3JjZGlyKS9tNC9jbG9zZW91dC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jb2Rlc2V0Lm00ICQodG9wX3NyY2RpcikvbTQvY29uZmlnLWgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZGlybmFtZS5tNCAkKHRvcF9zcmNkaXIpL200L2Rvcy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9kb3VibGUtc2xhc2gtcm9vdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9lcnJvci5tNCAkKHRvcF9zcmNkaXIpL200L2V4aXRmYWlsLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2V4dGVuc2lvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9mcGVuZGluZy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9mcmVlLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0b3B0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgJCh0b3Bfc3JjZGlyKS9tNC9nbGliYzIxLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2dudWxpYi1jb21tb24ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZ251bGliLWNvbXAubTQgJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pbmxpbmUubTQgJCh0b3Bfc3JjZGlyKS9tNC9pbnR0eXBlcy1wcmkubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaW50dHlwZXMubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItaWdub3JlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbG9jYWxjaGFyc2V0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xvbmctb3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2xvbmdsb25nLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21icnRvd2MubTQgJCh0b3Bfc3JjZGlyKS9tNC9tYnN0YXRlX3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWVtY2hyLm00ICQodG9wX3NyY2RpcikvbTQvbWVtY21wLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21lbWNweS5tNCAkKHRvcF9zcmNkaXIpL200L21lbW1vdmUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWVtc2V0Lm00ICQodG9wX3NyY2RpcikvbTQvbmxzLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3BvLm00ICQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcXVvdGVhcmcubTQgJCh0b3Bfc3JjZGlyKS9tNC9yZWdleC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9yZW5hbWUubTQgJCh0b3Bfc3JjZGlyKS9tNC9ycG1hdGNoLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3NhZmUtcmVhZC5tNCAkKHRvcF9zcmNkaXIpL200L3NhZmUtd3JpdGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3NpemVfdC5tNCAkKHRvcF9zcmNkaXIpL200L3N0ZGFyZy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdGRib29sLm00ICQodG9wX3NyY2RpcikvbTQvc3RkaW50Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0ZGxpYl9oLm00ICQodG9wX3NyY2RpcikvbTQvc3RyY3Nwbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdHJpbmdfaC5tNCAkKHRvcF9zcmNkaXIpL200L3N0cm5kdXAubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3Rybmxlbi5tNCAkKHRvcF9zcmNkaXIpL200L3N0cnRvZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdHJ0b2wubTQgJCh0b3Bfc3JjZGlyKS9tNC91bmlzdGRfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC91dGltYnVmLm00ICQodG9wX3NyY2RpcikvbTQvdXRpbWUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdXRpbWVzLW51bGwubTQgJCh0b3Bfc3JjZGlyKS9tNC93Y2hhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC93Y3R5cGUubTQgJCh0b3Bfc3JjZGlyKS9tNC93aW50X3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQveGFsbG9jLm00ICQodG9wX3NyY2RpcikvbTQveHN0cm5kdXAubTQgXAorCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCithbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorCSQoQUNMT0NBTF9NNCkKK21raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK0xUTElCUkFSSUVTID0gJChub2luc3RfTFRMSUJSQVJJRVMpCitsaWJ1ZnNfbGFfTElCQUREID0KK2FtX2xpYnVmc19sYV9PQkpFQ1RTID0gdWZzLmxvCitsaWJ1ZnNfbGFfT0JKRUNUUyA9ICQoYW1fbGlidWZzX2xhX09CSkVDVFMpCitERUZBVUxUX0lOQ0xVREVTID0gLUkuIC1JJCh0b3BfYnVpbGRkaXIpL2xpYkBhbV9faXNyY0AKK2RlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9kZXBjb21wCithbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcworQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCisJJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorTFRDT01QSUxFID0gJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIFwKKwktLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgXAorCSQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0NDTEQgPSAkKENDKQorTElOSyA9ICQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCisJLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgXAorCSQoTERGTEFHUykgLW8gJEAKK1NPVVJDRVMgPSAkKGxpYnVmc19sYV9TT1VSQ0VTKQorRElTVF9TT1VSQ0VTID0gJChsaWJ1ZnNfbGFfU09VUkNFUykKK0VUQUdTID0gZXRhZ3MKK0NUQUdTID0gY3RhZ3MKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitBQlNPTFVURV9JTlRUWVBFU19IID0gQEFCU09MVVRFX0lOVFRZUEVTX0hACitBQlNPTFVURV9TVERJTlRfSCA9IEBBQlNPTFVURV9TVERJTlRfSEAKK0FCU09MVVRFX1NURExJQl9IID0gQEFCU09MVVRFX1NURExJQl9IQAorQUJTT0xVVEVfU1RSSU5HX0ggPSBAQUJTT0xVVEVfU1RSSU5HX0hACitBQlNPTFVURV9VTklTVERfSCA9IEBBQlNPTFVURV9VTklTVERfSEAKK0FCU09MVVRFX1dDSEFSX0ggPSBAQUJTT0xVVEVfV0NIQVJfSEAKK0FCU09MVVRFX1dDVFlQRV9IID0gQEFCU09MVVRFX1dDVFlQRV9IQAorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQUxMT0NBID0gQEFMTE9DQUAKK0FMTE9DQV9IID0gQEFMTE9DQV9IQAorQU1UQVIgPSBAQU1UQVJACitBUiA9IEBBUkAKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBV0sgPSBAQVdLQAorQklUU0laRU9GX1BUUkRJRkZfVCA9IEBCSVRTSVpFT0ZfUFRSRElGRl9UQAorQklUU0laRU9GX1NJR19BVE9NSUNfVCA9IEBCSVRTSVpFT0ZfU0lHX0FUT01JQ19UQAorQklUU0laRU9GX1NJWkVfVCA9IEBCSVRTSVpFT0ZfU0laRV9UQAorQklUU0laRU9GX1dDSEFSX1QgPSBAQklUU0laRU9GX1dDSEFSX1RACitCSVRTSVpFT0ZfV0lOVF9UID0gQEJJVFNJWkVPRl9XSU5UX1RACitCVUlMRElORk8gPSBAQlVJTERJTkZPQAorQ0MgPSBAQ0NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NIRUNLX0NGTEFHUyA9IEBDSEVDS19DRkxBR1NACitDSEVDS19MSUJTID0gQENIRUNLX0xJQlNACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitETF9MSUJTID0gQERMX0xJQlNACitETV9MSUJTID0gQERNX0xJQlNACitFQ0hPID0gQEVDSE9ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VYRUVYVCA9IEBFWEVFWFRACitGNzcgPSBARjc3QAorRkZMQUdTID0gQEZGTEFHU0AKK0dFVE9QVF9IID0gQEdFVE9QVF9IQAorR0xJQkMyMSA9IEBHTElCQzIxQAorR01TR0ZNVCA9IEBHTVNHRk1UQAorR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACitHTlVMSUJfQ0hPV04gPSBAR05VTElCX0NIT1dOQAorR05VTElCX0RVUDIgPSBAR05VTElCX0RVUDJACitHTlVMSUJfRkNIRElSID0gQEdOVUxJQl9GQ0hESVJACitHTlVMSUJfRlRSVU5DQVRFID0gQEdOVUxJQl9GVFJVTkNBVEVACitHTlVMSUJfR0VUQ1dEID0gQEdOVUxJQl9HRVRDV0RACitHTlVMSUJfR0VUTE9HSU5fUiA9IEBHTlVMSUJfR0VUTE9HSU5fUkAKK0dOVUxJQl9HRVRTVUJPUFQgPSBAR05VTElCX0dFVFNVQk9QVEAKK0dOVUxJQl9JTUFYQUJTID0gQEdOVUxJQl9JTUFYQUJTQAorR05VTElCX0lNQVhESVYgPSBAR05VTElCX0lNQVhESVZACitHTlVMSUJfTUJTQ0FTRUNNUCA9IEBHTlVMSUJfTUJTQ0FTRUNNUEAKK0dOVUxJQl9NQlNDQVNFU1RSID0gQEdOVUxJQl9NQlNDQVNFU1RSQAorR05VTElCX01CU0NIUiA9IEBHTlVMSUJfTUJTQ0hSQAorR05VTElCX01CU0NTUE4gPSBAR05VTElCX01CU0NTUE5ACitHTlVMSUJfTUJTTEVOID0gQEdOVUxJQl9NQlNMRU5ACitHTlVMSUJfTUJTTkNBU0VDTVAgPSBAR05VTElCX01CU05DQVNFQ01QQAorR05VTElCX01CU1BCUksgPSBAR05VTElCX01CU1BCUktACitHTlVMSUJfTUJTUENBU0VDTVAgPSBAR05VTElCX01CU1BDQVNFQ01QQAorR05VTElCX01CU1JDSFIgPSBAR05VTElCX01CU1JDSFJACitHTlVMSUJfTUJTU0VQID0gQEdOVUxJQl9NQlNTRVBACitHTlVMSUJfTUJTU1BOID0gQEdOVUxJQl9NQlNTUE5ACitHTlVMSUJfTUJTU1RSID0gQEdOVUxJQl9NQlNTVFJACitHTlVMSUJfTUJTVE9LX1IgPSBAR05VTElCX01CU1RPS19SQAorR05VTElCX01FTU1FTSA9IEBHTlVMSUJfTUVNTUVNQAorR05VTElCX01FTVBDUFkgPSBAR05VTElCX01FTVBDUFlACitHTlVMSUJfTUVNUkNIUiA9IEBHTlVMSUJfTUVNUkNIUkAKK0dOVUxJQl9NS0RURU1QID0gQEdOVUxJQl9NS0RURU1QQAorR05VTElCX01LU1RFTVAgPSBAR05VTElCX01LU1RFTVBACitHTlVMSUJfUkVBRExJTksgPSBAR05VTElCX1JFQURMSU5LQAorR05VTElCX1NMRUVQID0gQEdOVUxJQl9TTEVFUEAKK0dOVUxJQl9TVFBDUFkgPSBAR05VTElCX1NUUENQWUAKK0dOVUxJQl9TVFBOQ1BZID0gQEdOVUxJQl9TVFBOQ1BZQAorR05VTElCX1NUUkNBU0VTVFIgPSBAR05VTElCX1NUUkNBU0VTVFJACitHTlVMSUJfU1RSQ0hSTlVMID0gQEdOVUxJQl9TVFJDSFJOVUxACitHTlVMSUJfU1RSRFVQID0gQEdOVUxJQl9TVFJEVVBACitHTlVMSUJfU1RSTkRVUCA9IEBHTlVMSUJfU1RSTkRVUEAKK0dOVUxJQl9TVFJOTEVOID0gQEdOVUxJQl9TVFJOTEVOQAorR05VTElCX1NUUlBCUksgPSBAR05VTElCX1NUUlBCUktACitHTlVMSUJfU1RSU0VQID0gQEdOVUxJQl9TVFJTRVBACitHTlVMSUJfU1RSVE9JTUFYID0gQEdOVUxJQl9TVFJUT0lNQVhACitHTlVMSUJfU1RSVE9LX1IgPSBAR05VTElCX1NUUlRPS19SQAorR05VTElCX1NUUlRPVU1BWCA9IEBHTlVMSUJfU1RSVE9VTUFYQAorR1JFUCA9IEBHUkVQQAorSEFWRV9ERUNMX0dFVExPR0lOX1IgPSBASEFWRV9ERUNMX0dFVExPR0lOX1JACitIQVZFX0RFQ0xfSU1BWEFCUyA9IEBIQVZFX0RFQ0xfSU1BWEFCU0AKK0hBVkVfREVDTF9JTUFYRElWID0gQEhBVkVfREVDTF9JTUFYRElWQAorSEFWRV9ERUNMX01FTU1FTSA9IEBIQVZFX0RFQ0xfTUVNTUVNQAorSEFWRV9ERUNMX01FTVJDSFIgPSBASEFWRV9ERUNMX01FTVJDSFJACitIQVZFX0RFQ0xfU1RSRFVQID0gQEhBVkVfREVDTF9TVFJEVVBACitIQVZFX0RFQ0xfU1RSTkNBU0VDTVAgPSBASEFWRV9ERUNMX1NUUk5DQVNFQ01QQAorSEFWRV9ERUNMX1NUUk5EVVAgPSBASEFWRV9ERUNMX1NUUk5EVVBACitIQVZFX0RFQ0xfU1RSTkxFTiA9IEBIQVZFX0RFQ0xfU1RSTkxFTkAKK0hBVkVfREVDTF9TVFJUT0lNQVggPSBASEFWRV9ERUNMX1NUUlRPSU1BWEAKK0hBVkVfREVDTF9TVFJUT0tfUiA9IEBIQVZFX0RFQ0xfU1RSVE9LX1JACitIQVZFX0RFQ0xfU1RSVE9VTUFYID0gQEhBVkVfREVDTF9TVFJUT1VNQVhACitIQVZFX0RVUDIgPSBASEFWRV9EVVAyQAorSEFWRV9GVFJVTkNBVEUgPSBASEFWRV9GVFJVTkNBVEVACitIQVZFX0dFVFNVQk9QVCA9IEBIQVZFX0dFVFNVQk9QVEAKK0hBVkVfSU5UVFlQRVNfSCA9IEBIQVZFX0lOVFRZUEVTX0hACitIQVZFX0lTV0NOVFJMID0gQEhBVkVfSVNXQ05UUkxACitIQVZFX0xPTkdfTE9OR19JTlQgPSBASEFWRV9MT05HX0xPTkdfSU5UQAorSEFWRV9NRU1QQ1BZID0gQEhBVkVfTUVNUENQWUAKK0hBVkVfTUtEVEVNUCA9IEBIQVZFX01LRFRFTVBACitIQVZFX1JFQURMSU5LID0gQEhBVkVfUkVBRExJTktACitIQVZFX1NJR05FRF9TSUdfQVRPTUlDX1QgPSBASEFWRV9TSUdORURfU0lHX0FUT01JQ19UQAorSEFWRV9TSUdORURfV0NIQVJfVCA9IEBIQVZFX1NJR05FRF9XQ0hBUl9UQAorSEFWRV9TSUdORURfV0lOVF9UID0gQEhBVkVfU0lHTkVEX1dJTlRfVEAKK0hBVkVfU0xFRVAgPSBASEFWRV9TTEVFUEAKK0hBVkVfU1RESU5UX0ggPSBASEFWRV9TVERJTlRfSEAKK0hBVkVfU1RQQ1BZID0gQEhBVkVfU1RQQ1BZQAorSEFWRV9TVFBOQ1BZID0gQEhBVkVfU1RQTkNQWUAKK0hBVkVfU1RSQ0FTRUNNUCA9IEBIQVZFX1NUUkNBU0VDTVBACitIQVZFX1NUUkNBU0VTVFIgPSBASEFWRV9TVFJDQVNFU1RSQAorSEFWRV9TVFJDSFJOVUwgPSBASEFWRV9TVFJDSFJOVUxACitIQVZFX1NUUk5EVVAgPSBASEFWRV9TVFJORFVQQAorSEFWRV9TVFJQQlJLID0gQEhBVkVfU1RSUEJSS0AKK0hBVkVfU1RSU0VQID0gQEhBVkVfU1RSU0VQQAorSEFWRV9TWVNfQklUWVBFU19IID0gQEhBVkVfU1lTX0JJVFlQRVNfSEAKK0hBVkVfU1lTX0lOVFRZUEVTX0ggPSBASEFWRV9TWVNfSU5UVFlQRVNfSEAKK0hBVkVfU1lTX1RZUEVTX0ggPSBASEFWRV9TWVNfVFlQRVNfSEAKK0hBVkVfVU5JU1REX0ggPSBASEFWRV9VTklTVERfSEAKK0hBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVCA9IEBIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlRACitIQVZFX1dDVFlQRV9IID0gQEhBVkVfV0NUWVBFX0hACitIQVZFX1dJTlRfVCA9IEBIQVZFX1dJTlRfVEAKK0hBVkVfX0JPT0wgPSBASEFWRV9fQk9PTEAKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSU5UTElOQ1MgPSBASU5UTElOQ1NACitJTlRMTElCUyA9IEBJTlRMTElCU0AKK0lOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKK0lOVFRZUEVTX0ggPSBASU5UVFlQRVNfSEAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQklDT05WID0gQExJQklDT05WQAorTElCSU5UTCA9IEBMSUJJTlRMQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTE5fUyA9IEBMTl9TQAorTFRBTExPQ0EgPSBATFRBTExPQ0FACitMVExJQklDT05WID0gQExUTElCSUNPTlZACitMVExJQklOVEwgPSBATFRMSUJJTlRMQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK0xUX0FHRSA9IEBMVF9BR0VACitMVF9DVVJSRU5UID0gQExUX0NVUlJFTlRACitMVF9SRUxFQVNFID0gQExUX1JFTEVBU0VACitMVF9SRVZJU0lPTiA9IEBMVF9SRVZJU0lPTkAKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTVNHRk1UID0gQE1TR0ZNVEAKK01TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKK01TR01FUkdFID0gQE1TR01FUkdFQAorT0JKRVhUID0gQE9CSkVYVEAKK09TID0gQE9TQAorT1NfTElCUyA9IEBPU19MSUJTQAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBUlRFRExERkxBR1MgPSBAUEFSVEVETERGTEFHU0AKK1BBUlRFRF9MSUJTID0gQFBBUlRFRF9MSUJTQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQT1NVQiA9IEBQT1NVQkAKK1BPV19MSUIgPSBAUE9XX0xJQkAKK1BSSVBUUl9QUkVGSVggPSBAUFJJUFRSX1BSRUZJWEAKK1BSSV9NQUNST1NfQlJPS0VOID0gQFBSSV9NQUNST1NfQlJPS0VOQAorUFRSRElGRl9UX1NVRkZJWCA9IEBQVFJESUZGX1RfU1VGRklYQAorUkFOTElCID0gQFJBTkxJQkAKK1JFSVNFUl9MSUJTID0gQFJFSVNFUl9MSUJTQAorUkVQTEFDRV9DSE9XTiA9IEBSRVBMQUNFX0NIT1dOQAorUkVQTEFDRV9GQ0hESVIgPSBAUkVQTEFDRV9GQ0hESVJACitSRVBMQUNFX0dFVENXRCA9IEBSRVBMQUNFX0dFVENXREAKK1JFUExBQ0VfTUtTVEVNUCA9IEBSRVBMQUNFX01LU1RFTVBACitTRUQgPSBAU0VEQAorU0VMSU5VWF9MSUJTID0gQFNFTElOVVhfTElCU0AKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTSUdfQVRPTUlDX1RfU1VGRklYID0gQFNJR19BVE9NSUNfVF9TVUZGSVhACitTSVpFX1RfU1VGRklYID0gQFNJWkVfVF9TVUZGSVhACitTVERCT09MX0ggPSBAU1REQk9PTF9IQAorU1RESU5UX0ggPSBAU1RESU5UX0hACitTVFJJUCA9IEBTVFJJUEAKK1VTRV9OTFMgPSBAVVNFX05MU0AKK1VVSURfTElCUyA9IEBVVUlEX0xJQlNACitWRVJTSU9OID0gQFZFUlNJT05ACitXQ0hBUl9IID0gQFdDSEFSX0hACitXQ0hBUl9UX1NVRkZJWCA9IEBXQ0hBUl9UX1NVRkZJWEAKK1dDVFlQRV9IID0gQFdDVFlQRV9IQAorV0lOVF9UX1NVRkZJWCA9IEBXSU5UX1RfU1VGRklYQAorWEdFVFRFWFQgPSBAWEdFVFRFWFRACitYR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9DWFggPSBAYWNfY3RfQ1hYQAorYWNfY3RfRjc3ID0gQGFjX2N0X0Y3N0AKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitnbF9MSUJPQkpTID0gQGdsX0xJQk9CSlNACitnbF9MVExJQk9CSlMgPSBAZ2xfTFRMSUJPQkpTQAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK3BhcnRlZGluY2x1ZGVkaXIgPSAtSSQodG9wX3NyY2RpcikvaW5jbHVkZQorbm9pbnN0X0xUTElCUkFSSUVTID0gbGlidWZzLmxhCitsaWJ1ZnNfbGFfU09VUkNFUyA9IHVmcy5jCitJTkNMVURFUyA9ICQocGFydGVkaW5jbHVkZWRpcikgJChJTlRMSU5DUykKK01BSU5UQUlORVJDTEVBTkZJTEVTID0gTWFrZWZpbGUuaW4KK2FsbDogYWxsLWFtCisKKy5TVUZGSVhFUzoKKy5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoIFwKKwkJJiYgZXhpdCAwOyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSAgbGlicGFydGVkL2ZzL3Vmcy9NYWtlZmlsZSc7IFwKKwljZCAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZ251ICBsaWJwYXJ0ZWQvZnMvdWZzL01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCitjbGVhbi1ub2luc3RMVExJQlJBUklFUzoKKwktdGVzdCAteiAiJChub2luc3RfTFRMSUJSQVJJRVMpIiB8fCBybSAtZiAkKG5vaW5zdF9MVExJQlJBUklFUykKKwlAbGlzdD0nJChub2luc3RfTFRMSUJSQVJJRVMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBkaXI9ImBlY2hvICQkcCB8IHNlZCAtZSAnc3wvW14vXSokJHx8J2AiOyBcCisJICB0ZXN0ICIkJGRpciIgIT0gIiQkcCIgfHwgZGlyPS47IFwKKwkgIGVjaG8gInJtIC1mIFwiJCR7ZGlyfS9zb19sb2NhdGlvbnNcIiI7IFwKKwkgIHJtIC1mICIkJHtkaXJ9L3NvX2xvY2F0aW9ucyI7IFwKKwlkb25lCitsaWJ1ZnMubGE6ICQobGlidWZzX2xhX09CSkVDVFMpICQobGlidWZzX2xhX0RFUEVOREVOQ0lFUykgCisJJChMSU5LKSAgJChsaWJ1ZnNfbGFfT0JKRUNUUykgJChsaWJ1ZnNfbGFfTElCQUREKSAkKExJQlMpCisKK21vc3RseWNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICouJChPQkpFWFQpCisKK2Rpc3RjbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLnRhYi5jCisKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS91ZnMuUGxvQGFtX19xdW90ZUAKKworLmMubzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyAkPAorCisuYy5vYmo6CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKK0BhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyBgJChDWUdQQVRIX1cpICckPCdgCisKKy5jLmxvOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMVENPTVBJTEUpIC1jIC1vICRAICQ8CisKK21vc3RseWNsZWFuLWxpYnRvb2w6CisJLXJtIC1mICoubG8KKworY2xlYW4tbGlidG9vbDoKKwktcm0gLXJmIC5saWJzIF9saWJzCisKK0lEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKKwkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKKwlta2lkIC1mSUQgJCR1bmlxdWUKK3RhZ3M6IFRBR1MKKworVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwl0YWdzPTsgXAorCWhlcmU9YHB3ZGA7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKKwkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorCSAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAkJHRhZ3MgJCR1bmlxdWU7IFwKKwlmaQorY3RhZ3M6IENUQUdTCitDVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwl0YWdzPTsgXAorCWhlcmU9YHB3ZGA7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKKwkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKKwl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiIFwKKwkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKKwkgICAgICQkdGFncyAkJHVuaXF1ZQorCitHVEFHUzoKKwloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorCSAgJiYgY2QgJCh0b3Bfc3JjZGlyKSBcCisJICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICQkaGVyZQorCitkaXN0Y2xlYW4tdGFnczoKKwktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLXBSICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtcFIgJCRkLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAkKGRpc3RkaXIpLyQkZmlsZSBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgJChkaXN0ZGlyKS8kJGZpbGUgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorY2hlY2stYW06IGFsbC1hbQorY2hlY2s6IGNoZWNrLWFtCithbGwtYW06IE1ha2VmaWxlICQoTFRMSUJSQVJJRVMpCitpbnN0YWxsZGlyczoKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCisJICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCisJLXRlc3QgLXogIiQoTUFJTlRBSU5FUkNMRUFORklMRVMpIiB8fCBybSAtZiAkKE1BSU5UQUlORVJDTEVBTkZJTEVTKQorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0TFRMSUJSQVJJRVMgXAorCW1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1leGVjLWFtOgorCitpbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1hbQorCitwZGYtYW06CisKK3BzOiBwcy1hbQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOgorCisuTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisKKy5QSE9OWTogQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKKwljbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdExUTElCUkFSSUVTIGN0YWdzIGRpc3RjbGVhbiBcCisJZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgXAorCWRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIFwKKwlpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBcCisJaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgXAorCWluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIFwKKwlpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAorCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCisJbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAorCW1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIFwKKwlwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbQorCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL3Vmcy91ZnMuYyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMvdWZzL3Vmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0MjcyZTMKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL3Vmcy91ZnMuYwpAQCAtMCwwICsxLDMyNSBAQAorLyoKKyAgICBsaWJwYXJ0ZWQgLSBhIGxpYnJhcnkgZm9yIG1hbmlwdWxhdGluZyBkaXNrIHBhcnRpdGlvbnMKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCisKKyAgICBDb250cmlidXRvcjogQmVuIENvbGxpbnMgPGJjb2xsaW5zQGRlYmlhbi5vcmc+CisqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpbmNsdWRlIDxwYXJ0ZWQvcGFydGVkLmg+CisjaW5jbHVkZSA8cGFydGVkL2VuZGlhbi5oPgorI2luY2x1ZGUgPHBhcnRlZC9kZWJ1Zy5oPgorCisjaWYgRU5BQkxFX05MUworIyAgaW5jbHVkZSA8bGliaW50bC5oPgorIyAgZGVmaW5lIF8oU3RyaW5nKSBkZ2V0dGV4dCAoUEFDS0FHRSwgU3RyaW5nKQorI2Vsc2UKKyMgIGRlZmluZSBfKFN0cmluZykgKFN0cmluZykKKyNlbmRpZiAvKiBFTkFCTEVfTkxTICovCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2RlZmluZSBTVU5fVUZTX0JMT0NLX1NJWkVTICAgICAgICgoaW50WzJdKXs1MTIsIDB9KQorI2RlZmluZSBIUF9VRlNfQkxPQ0tfU0laRVMgICAgICAgICgoaW50WzJdKXs1MTIsIDB9KQorCisKKy8qIHRha2VuIGZyb20gdWZzX2ZzLmggaW4gTGludXggKi8KKyNkZWZpbmUJVUZTX01BWE5BTUxFTiAyNTUKKyNkZWZpbmUgVUZTX01BWE1OVExFTiA1MTIKKyNkZWZpbmUgVUZTX01BWENTQlVGUyAzMQorI2RlZmluZSBVRlNfTElOS19NQVggMzIwMDAKKworI2RlZmluZSBVRlNfTUFHSUMJMHgwMDAxMTk1NAorI2RlZmluZSBVRlNfTUFHSUNfTEZOCTB4MDAwOTUwMTQKKyNkZWZpbmUgVUZTX01BR0lDX0ZFQQkweDAwMTk1NjEyCisjZGVmaW5lIFVGU19NQUdJQ180R0IJMHgwNTIzMTk5NAorCitzdHJ1Y3QgdWZzX2NzdW0geworCXVpbnQzMl90CWNzX25kaXI7CS8qIG51bWJlciBvZiBkaXJlY3RvcmllcyAqLworCXVpbnQzMl90CWNzX25iZnJlZTsJLyogbnVtYmVyIG9mIGZyZWUgYmxvY2tzICovCisJdWludDMyX3QJY3NfbmlmcmVlOwkvKiBudW1iZXIgb2YgZnJlZSBpbm9kZXMgKi8KKwl1aW50MzJfdAljc19uZmZyZWU7CS8qIG51bWJlciBvZiBmcmVlIGZyYWdzICovCit9OworCitzdHJ1Y3QgdWZzX3N1cGVyX2Jsb2NrIHsKKwl1aW50MzJfdAlmc19saW5rOwkvKiBVTlVTRUQgKi8KKwl1aW50MzJfdAlmc19ybGluazsJLyogVU5VU0VEICovCisJdWludDMyX3QJZnNfc2Jsa25vOwkvKiBhZGRyIG9mIHN1cGVyLWJsb2NrIGluIGZpbGVzeXMgKi8KKwl1aW50MzJfdAlmc19jYmxrbm87CS8qIG9mZnNldCBvZiBjeWwtYmxvY2sgaW4gZmlsZXN5cyAqLworCXVpbnQzMl90CWZzX2libGtubzsJLyogb2Zmc2V0IG9mIGlub2RlLWJsb2NrcyBpbiBmaWxlc3lzICovCisJdWludDMyX3QJZnNfZGJsa25vOwkvKiBvZmZzZXQgb2YgZmlyc3QgZGF0YSBhZnRlciBjZyAqLworCXVpbnQzMl90CWZzX2Nnb2Zmc2V0OwkvKiBjeWxpbmRlciBncm91cCBvZmZzZXQgaW4gY3lsaW5kZXIgKi8KKwl1aW50MzJfdAlmc19jZ21hc2s7CS8qIHVzZWQgdG8gY2FsYyBtb2QgZnNfbnRyYWsgKi8KKwl1aW50MzJfdAlmc190aW1lOwkvKiBsYXN0IHRpbWUgd3JpdHRlbiAtLSB0aW1lX3QgKi8KKwl1aW50MzJfdAlmc19zaXplOwkvKiBudW1iZXIgb2YgYmxvY2tzIGluIGZzICovCisJdWludDMyX3QJZnNfZHNpemU7CS8qIG51bWJlciBvZiBkYXRhIGJsb2NrcyBpbiBmcyAqLworCXVpbnQzMl90CWZzX25jZzsJCS8qIG51bWJlciBvZiBjeWxpbmRlciBncm91cHMgKi8KKwl1aW50MzJfdAlmc19ic2l6ZTsJLyogc2l6ZSBvZiBiYXNpYyBibG9ja3MgaW4gZnMgKi8KKwl1aW50MzJfdAlmc19mc2l6ZTsJLyogc2l6ZSBvZiBmcmFnIGJsb2NrcyBpbiBmcyAqLworCXVpbnQzMl90CWZzX2ZyYWc7CS8qIG51bWJlciBvZiBmcmFncyBpbiBhIGJsb2NrIGluIGZzICovCisvKiB0aGVzZSBhcmUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzICovCisJdWludDMyX3QJZnNfbWluZnJlZTsJLyogbWluaW11bSBwZXJjZW50YWdlIG9mIGZyZWUgYmxvY2tzICovCisJdWludDMyX3QJZnNfcm90ZGVsYXk7CS8qIG51bSBvZiBtcyBmb3Igb3B0aW1hbCBuZXh0IGJsb2NrICovCisJdWludDMyX3QJZnNfcnBzOwkJLyogZGlzayByZXZvbHV0aW9ucyBwZXIgc2Vjb25kICovCisvKiB0aGVzZSBmaWVsZHMgY2FuIGJlIGNvbXB1dGVkIGZyb20gdGhlIG90aGVycyAqLworCXVpbnQzMl90CWZzX2JtYXNrOwkvKiBgYGJsa29mZicnIGNhbGMgb2YgYmxrIG9mZnNldHMgKi8KKwl1aW50MzJfdAlmc19mbWFzazsJLyogYGBmcmFnb2ZmJycgY2FsYyBvZiBmcmFnIG9mZnNldHMgKi8KKwl1aW50MzJfdAlmc19ic2hpZnQ7CS8qIGBgbGJsa25vJycgY2FsYyBvZiBsb2dpY2FsIGJsa25vICovCisJdWludDMyX3QJZnNfZnNoaWZ0OwkvKiBgYG51bWZyYWdzJycgY2FsYyBudW1iZXIgb2YgZnJhZ3MgKi8KKy8qIHRoZXNlIGFyZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgKi8KKwl1aW50MzJfdAlmc19tYXhjb250aWc7CS8qIG1heCBudW1iZXIgb2YgY29udGlndW91cyBibGtzICovCisJdWludDMyX3QJZnNfbWF4YnBnOwkvKiBtYXggbnVtYmVyIG9mIGJsa3MgcGVyIGN5bCBncm91cCAqLworLyogdGhlc2UgZmllbGRzIGNhbiBiZSBjb21wdXRlZCBmcm9tIHRoZSBvdGhlcnMgKi8KKwl1aW50MzJfdAlmc19mcmFnc2hpZnQ7CS8qIGJsb2NrIHRvIGZyYWcgc2hpZnQgKi8KKwl1aW50MzJfdAlmc19mc2J0b2RiOwkvKiBmc2J0b2RiIGFuZCBkYnRvZnNiIHNoaWZ0IGNvbnN0YW50ICovCisJdWludDMyX3QJZnNfc2JzaXplOwkvKiBhY3R1YWwgc2l6ZSBvZiBzdXBlciBibG9jayAqLworCXVpbnQzMl90CWZzX2NzbWFzazsJLyogY3N1bSBibG9jayBvZmZzZXQgKi8KKwl1aW50MzJfdAlmc19jc3NoaWZ0OwkvKiBjc3VtIGJsb2NrIG51bWJlciAqLworCXVpbnQzMl90CWZzX25pbmRpcjsJLyogdmFsdWUgb2YgTklORElSICovCisJdWludDMyX3QJZnNfaW5vcGI7CS8qIHZhbHVlIG9mIElOT1BCICovCisJdWludDMyX3QJZnNfbnNwZjsJLyogdmFsdWUgb2YgTlNQRiAqLworLyogeWV0IGFub3RoZXIgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgKi8KKwl1aW50MzJfdAlmc19vcHRpbTsJLyogb3B0aW1pemF0aW9uIHByZWZlcmVuY2UsIHNlZSBiZWxvdyAqLworLyogdGhlc2UgZmllbGRzIGFyZSBkZXJpdmVkIGZyb20gdGhlIGhhcmR3YXJlICovCisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdWludDMyX3QJZnNfbnBzZWN0OwkvKiAjIHNlY3RvcnMvdHJhY2sgaW5jbHVkaW5nIHNwYXJlcyAqLworCQl9IGZzX3N1bjsKKwkJc3RydWN0IHsKKwkJCWludDMyX3QJCWZzX3N0YXRlOwkvKiBmaWxlIHN5c3RlbSBzdGF0ZSB0aW1lIHN0YW1wICovCisJCX0gZnNfc3VueDg2OworCX0gZnNfdTE7CisJdWludDMyX3QJZnNfaW50ZXJsZWF2ZTsJLyogaGFyZHdhcmUgc2VjdG9yIGludGVybGVhdmUgKi8KKwl1aW50MzJfdAlmc190cmFja3NrZXc7CS8qIHNlY3RvciAwIHNrZXcsIHBlciB0cmFjayAqLworLyogYSB1bmlxdWUgaWQgZm9yIHRoaXMgZmlsZSBzeXN0ZW0gKGN1cnJlbnRseSB1bnVzZWQgYW5kIHVubWFpbnRhaW5lZCkgKi8KKy8qIEluIDQuMyBUYWhvZSB0aGlzIHNwYWNlIGlzIHVzZWQgYnkgZnNfaGVhZHN3aXRjaCBhbmQgZnNfdHJrc2VlayAqLworLyogTmVpdGhlciBvZiB0aG9zZSBmaWVsZHMgaXMgdXNlZCBpbiB0aGUgVGFob2UgY29kZSByaWdodCBub3cgYnV0ICovCisvKiB0aGVyZSBjb3VsZCBiZSBwcm9ibGVtcyBpZiB0aGV5IGFyZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwl1aW50MzJfdAlmc19pZFsyXTsJLyogZmlsZSBzeXN0ZW0gaWQgKi8KKy8qIHNpemVzIGRldGVybWluZWQgYnkgbnVtYmVyIG9mIGN5bGluZGVyIGdyb3VwcyBhbmQgdGhlaXIgc2l6ZXMgKi8KKwl1aW50MzJfdAlmc19jc2FkZHI7CS8qIGJsayBhZGRyIG9mIGN5bCBncnAgc3VtbWFyeSBhcmVhICovCisJdWludDMyX3QJZnNfY3NzaXplOwkvKiBzaXplIG9mIGN5bCBncnAgc3VtbWFyeSBhcmVhICovCisJdWludDMyX3QJZnNfY2dzaXplOwkvKiBjeWxpbmRlciBncm91cCBzaXplICovCisvKiB0aGVzZSBmaWVsZHMgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaGFyZHdhcmUgKi8KKwl1aW50MzJfdAlmc19udHJhazsJLyogdHJhY2tzIHBlciBjeWxpbmRlciAqLworCXVpbnQzMl90CWZzX25zZWN0OwkvKiBzZWN0b3JzIHBlciB0cmFjayAqLworCXVpbnQzMl90CWZzX3NwYzsJCS8qIHNlY3RvcnMgcGVyIGN5bGluZGVyICovCisvKiB0aGlzIGNvbWVzIGZyb20gdGhlIGRpc2sgZHJpdmVyIHBhcnRpdGlvbmluZyAqLworCXVpbnQzMl90CWZzX25jeWw7CS8qIGN5bGluZGVycyBpbiBmaWxlIHN5c3RlbSAqLworLyogdGhlc2UgZmllbGRzIGNhbiBiZSBjb21wdXRlZCBmcm9tIHRoZSBvdGhlcnMgKi8KKwl1aW50MzJfdAlmc19jcGc7CQkvKiBjeWxpbmRlcnMgcGVyIGdyb3VwICovCisJdWludDMyX3QJZnNfaXBnOwkJLyogaW5vZGVzIHBlciBncm91cCAqLworCXVpbnQzMl90CWZzX2ZwZzsJCS8qIGJsb2NrcyBwZXIgZ3JvdXAgKiBmc19mcmFnICovCisvKiB0aGlzIGRhdGEgbXVzdCBiZSByZS1jb21wdXRlZCBhZnRlciBjcmFzaGVzICovCisJc3RydWN0IHVmc19jc3VtIGZzX2NzdG90YWw7CS8qIGN5bGluZGVyIHN1bW1hcnkgaW5mb3JtYXRpb24gKi8KKy8qIHRoZXNlIGZpZWxkcyBhcmUgY2xlYXJlZCBhdCBtb3VudCB0aW1lICovCisJaW50OF90CQlmc19mbW9kOwkvKiBzdXBlciBibG9jayBtb2RpZmllZCBmbGFnICovCisJaW50OF90CQlmc19jbGVhbjsJLyogZmlsZSBzeXN0ZW0gaXMgY2xlYW4gZmxhZyAqLworCWludDhfdAkJZnNfcm9ubHk7CS8qIG1vdW50ZWQgcmVhZC1vbmx5IGZsYWcgKi8KKwlpbnQ4X3QJCWZzX2ZsYWdzOwkvKiBjdXJyZW50bHkgdW51c2VkIGZsYWcgKi8KKwlpbnQ4X3QJCWZzX2ZzbW50W1VGU19NQVhNTlRMRU5dOwkvKiBuYW1lIG1vdW50ZWQgb24gKi8KKy8qIHRoZXNlIGZpZWxkcyByZXRhaW4gdGhlIGN1cnJlbnQgYmxvY2sgYWxsb2NhdGlvbiBpbmZvICovCisJdWludDMyX3QJZnNfY2dyb3RvcjsJLyogbGFzdCBjZyBzZWFyY2hlZCAqLworCXVpbnQzMl90CWZzX2NzcFtVRlNfTUFYQ1NCVUZTXTsJLyogbGlzdCBvZiBmc19jcyBpbmZvIGJ1ZmZlcnMgKi8KKwl1aW50MzJfdAlmc19tYXhjbHVzdGVyOworCXVpbnQzMl90CWZzX2NwYzsJCS8qIGN5bCBwZXIgY3ljbGUgaW4gcG9zdGJsICovCisJdWludDE2X3QJZnNfb3Bvc3RibFsxNl1bOF07CS8qIG9sZCByb3RhdGlvbiBibG9jayBsaXN0IGhlYWQgKi8JCisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJaW50MzJfdAkJZnNfc3BhcmVjb25bNTNdOy8qIHJlc2VydmVkIGZvciBmdXR1cmUgY29uc3RhbnRzICovCisJCQlpbnQzMl90CQlmc19yZWNsYWltOworCQkJaW50MzJfdAkJZnNfc3BhcmVjb24yWzFdOworCQkJaW50MzJfdAkJZnNfc3RhdGU7CS8qIGZpbGUgc3lzdGVtIHN0YXRlIHRpbWUgc3RhbXAgKi8KKwkJCXVpbnQzMl90CWZzX3FibWFza1syXTsJLyogfnVzYl9ibWFzayAqLworCQkJdWludDMyX3QJZnNfcWZtYXNrWzJdOwkvKiB+dXNiX2ZtYXNrICovCisJCX0gZnNfc3VuOworCQlzdHJ1Y3QgeworCQkJaW50MzJfdAkJZnNfc3BhcmVjb25bNTNdOy8qIHJlc2VydmVkIGZvciBmdXR1cmUgY29uc3RhbnRzICovCisJCQlpbnQzMl90CQlmc19yZWNsYWltOworCQkJaW50MzJfdAkJZnNfc3BhcmVjb24yWzFdOworCQkJdWludDMyX3QJZnNfbnBzZWN0OwkvKiAjIHNlY3RvcnMvdHJhY2sgaW5jbHVkaW5nIHNwYXJlcyAqLworCQkJdWludDMyX3QJZnNfcWJtYXNrWzJdOwkvKiB+dXNiX2JtYXNrICovCisJCQl1aW50MzJfdAlmc19xZm1hc2tbMl07CS8qIH51c2JfZm1hc2sgKi8KKwkJfSBmc19zdW54ODY7CisJCXN0cnVjdCB7CisJCQlpbnQzMl90CQlmc19zcGFyZWNvbls1MF07LyogcmVzZXJ2ZWQgZm9yIGZ1dHVyZSBjb25zdGFudHMgKi8KKwkJCWludDMyX3QJCWZzX2NvbnRpZ3N1bXNpemU7Lyogc2l6ZSBvZiBjbHVzdGVyIHN1bW1hcnkgYXJyYXkgKi8KKwkJCWludDMyX3QJCWZzX21heHN5bWxpbmtsZW47LyogbWF4IGxlbmd0aCBvZiBhbiBpbnRlcm5hbCBzeW1saW5rICovCisJCQlpbnQzMl90CQlmc19pbm9kZWZtdDsJLyogZm9ybWF0IG9mIG9uLWRpc2sgaW5vZGVzICovCisJCQl1aW50MzJfdAlmc19tYXhmaWxlc2l6ZVsyXTsJLyogbWF4IHJlcHJlc2VudGFibGUgZmlsZSBzaXplICovCisJCQl1aW50MzJfdAlmc19xYm1hc2tbMl07CS8qIH51c2JfYm1hc2sgKi8KKwkJCXVpbnQzMl90CWZzX3FmbWFza1syXTsJLyogfnVzYl9mbWFzayAqLworCQkJaW50MzJfdAkJZnNfc3RhdGU7CS8qIGZpbGUgc3lzdGVtIHN0YXRlIHRpbWUgc3RhbXAgKi8KKwkJfSBmc180NDsKKwl9IGZzX3UyOworCWludDMyX3QJZnNfcG9zdGJsZm9ybWF0OwkvKiBmb3JtYXQgb2YgcG9zaXRpb25hbCBsYXlvdXQgdGFibGVzICovCisJaW50MzJfdAlmc19ucnBvczsJCS8qIG51bWJlciBvZiByb3RhdGlvbmFsIHBvc2l0aW9ucyAqLworCWludDMyX3QJZnNfcG9zdGJsb2ZmOwkJLyogKF9fczE2KSByb3RhdGlvbiBibG9jayBsaXN0IGhlYWQgKi8KKwlpbnQzMl90CWZzX3JvdGJsb2ZmOwkJLyogKHVpbnQ4X3QpIGJsb2NrcyBmb3IgZWFjaCByb3RhdGlvbiAqLworCWludDMyX3QJZnNfbWFnaWM7CQkvKiBtYWdpYyBudW1iZXIgKi8KKwl1aW50OF90CWZzX3NwYWNlWzRdOwkJLyogbGlzdCBvZiBibG9ja3MgZm9yIGVhY2ggcm90YXRpb24gKi8KK307CisKK3N0YXRpYyBQZWRHZW9tZXRyeSoKK3Vmc19wcm9iZV9zdW4gKFBlZEdlb21ldHJ5KiBnZW9tKQoreworCWludDhfdCBidWZbNTEyICogM107CisJc3RydWN0IHVmc19zdXBlcl9ibG9jayAqc2I7CisKKwlpZiAoZ2VvbS0+bGVuZ3RoIDwgNSkKKwkJcmV0dXJuIDA7CisJaWYgKCFwZWRfZ2VvbWV0cnlfcmVhZCAoZ2VvbSwgYnVmLCAxNiwgMykpCisJCXJldHVybiAwOworCisJc2IgPSAoc3RydWN0IHVmc19zdXBlcl9ibG9jayAqKWJ1ZjsKKworCWlmIChQRURfQkUzMl9UT19DUFUoc2ItPmZzX21hZ2ljKSA9PSBVRlNfTUFHSUMpIHsKKwkJUGVkU2VjdG9yIGJsb2NrX3NpemUgPSBQRURfQkUzMl9UT19DUFUoc2ItPmZzX2JzaXplKSAvIDUxMjsKKwkJUGVkU2VjdG9yIGJsb2NrX2NvdW50ID0gUEVEX0JFMzJfVE9fQ1BVKHNiLT5mc19zaXplKTsKKwkJcmV0dXJuIHBlZF9nZW9tZXRyeV9uZXcgKGdlb20tPmRldiwgZ2VvbS0+c3RhcnQsCisJCQkJCSBibG9ja19zaXplICogYmxvY2tfY291bnQpOworCX0KKwlpZiAoUEVEX0xFMzJfVE9fQ1BVKHNiLT5mc19tYWdpYykgPT0gVUZTX01BR0lDKSB7CisJCVBlZFNlY3RvciBibG9ja19zaXplID0gUEVEX0xFMzJfVE9fQ1BVKHNiLT5mc19ic2l6ZSkgLyA1MTI7CisJCVBlZFNlY3RvciBibG9ja19jb3VudCA9IFBFRF9MRTMyX1RPX0NQVShzYi0+ZnNfc2l6ZSk7CisJCXJldHVybiBwZWRfZ2VvbWV0cnlfbmV3IChnZW9tLT5kZXYsIGdlb20tPnN0YXJ0LAorCQkJCQkgYmxvY2tfc2l6ZSAqIGJsb2NrX2NvdW50KTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBQZWRHZW9tZXRyeSoKK3Vmc19wcm9iZV9ocCAoUGVkR2VvbWV0cnkqIGdlb20pCit7CisJaW50OF90IGJ1ZlsxNTM2XTsKKwlzdHJ1Y3QgdWZzX3N1cGVyX2Jsb2NrICpzYjsKKwlQZWRTZWN0b3IgYmxvY2tfc2l6ZTsKKwlQZWRTZWN0b3IgYmxvY2tfY291bnQ7CisKKwlpZiAoZ2VvbS0+bGVuZ3RoIDwgNSkKKwkJcmV0dXJuIDA7CisJaWYgKCFwZWRfZ2VvbWV0cnlfcmVhZCAoZ2VvbSwgYnVmLCAxNiwgMykpCisJCXJldHVybiAwOworCisJc2IgPSAoc3RydWN0IHVmc19zdXBlcl9ibG9jayAqKWJ1ZjsKKworCS8qIFRyeSBzYW5lIGJ5dGVzZXggKi8KKwlzd2l0Y2ggKFBFRF9CRTMyX1RPX0NQVShzYi0+ZnNfbWFnaWMpKSB7CisJCWNhc2UgVUZTX01BR0lDX0xGTjoKKwkJY2FzZSBVRlNfTUFHSUNfRkVBOgorCQljYXNlIFVGU19NQUdJQ180R0I6CisJCQlibG9ja19zaXplID0gUEVEX0JFMzJfVE9fQ1BVKHNiLT5mc19ic2l6ZSkgLyA1MTI7CisJCQlibG9ja19jb3VudCA9IFBFRF9CRTMyX1RPX0NQVShzYi0+ZnNfc2l6ZSk7CisJCQlyZXR1cm4gcGVkX2dlb21ldHJ5X25ldyAoZ2VvbS0+ZGV2LCBnZW9tLT5zdGFydCwKKwkJCQkJCSBibG9ja19zaXplICogYmxvY2tfY291bnQpOworCX0KKworCS8qIFRyeSBwZXJ2ZXJ0ZWQgYnl0ZXNleCAqLworCXN3aXRjaCAoUEVEX0xFMzJfVE9fQ1BVKHNiLT5mc19tYWdpYykpIHsKKwkJY2FzZSBVRlNfTUFHSUNfTEZOOgorCQljYXNlIFVGU19NQUdJQ19GRUE6CisJCWNhc2UgVUZTX01BR0lDXzRHQjoKKwkJCWJsb2NrX3NpemUgPSBQRURfTEUzMl9UT19DUFUoc2ItPmZzX2JzaXplKSAvIDUxMjsKKwkJCWJsb2NrX2NvdW50ID0gUEVEX0xFMzJfVE9fQ1BVKHNiLT5mc19zaXplKTsKKwkJCXJldHVybiBwZWRfZ2VvbWV0cnlfbmV3IChnZW9tLT5kZXYsIGdlb20tPnN0YXJ0LAorCQkJCQkJIGJsb2NrX3NpemUgKiBibG9ja19jb3VudCk7CisJfQorCXJldHVybiBOVUxMOworfQorCisjaWZuZGVmIERJU0NPVkVSX09OTFkKK3N0YXRpYyBpbnQKK3Vmc19jbG9iYmVyIChQZWRHZW9tZXRyeSogZ2VvbSkKK3sKKwljaGFyCWJ1ZlsxNTM2XTsKKworCWlmICghcGVkX2dlb21ldHJ5X3JlYWQgKGdlb20sIGJ1ZiwgMTYsIDMpKQorCQlyZXR1cm4gMDsKKworCW1lbXNldCAoYnVmLCAwLCBzaXplb2Yoc3RydWN0IHVmc19zdXBlcl9ibG9jaykpOworCisJcmV0dXJuIHBlZF9nZW9tZXRyeV93cml0ZSAoZ2VvbSwgYnVmLCAxNiwgMyk7Cit9CisjZW5kaWYgLyogIURJU0NPVkVSX09OTFkgKi8KKworc3RhdGljIFBlZEZpbGVTeXN0ZW1PcHMgdWZzX29wc19zdW4gPSB7CisJcHJvYmU6CQl1ZnNfcHJvYmVfc3VuLAorI2lmbmRlZiBESVNDT1ZFUl9PTkxZCisJY2xvYmJlcjoJdWZzX2Nsb2JiZXIsCisjZWxzZQorCWNsb2JiZXI6CU5VTEwsCisjZW5kaWYKKwlvcGVuOgkJTlVMTCwKKwljcmVhdGU6CQlOVUxMLAorCWNsb3NlOgkJTlVMTCwKKwljaGVjazoJCU5VTEwsCisJY29weToJCU5VTEwsCisJcmVzaXplOgkJTlVMTCwKKwlnZXRfY3JlYXRlX2NvbnN0cmFpbnQ6CU5VTEwsCisJZ2V0X3Jlc2l6ZV9jb25zdHJhaW50OglOVUxMLAorCWdldF9jb3B5X2NvbnN0cmFpbnQ6CU5VTEwKK307CisKK3N0YXRpYyBQZWRGaWxlU3lzdGVtT3BzIHVmc19vcHNfaHAgPSB7CisJcHJvYmU6CQl1ZnNfcHJvYmVfaHAsCisjaWZuZGVmIERJU0NPVkVSX09OTFkKKwljbG9iYmVyOgl1ZnNfY2xvYmJlciwKKyNlbHNlCisJY2xvYmJlcjoJTlVMTCwKKyNlbmRpZgorCW9wZW46CQlOVUxMLAorCWNyZWF0ZToJCU5VTEwsCisJY2xvc2U6CQlOVUxMLAorCWNoZWNrOgkJTlVMTCwKKwljb3B5OgkJTlVMTCwKKwlyZXNpemU6CQlOVUxMLAorCWdldF9jcmVhdGVfY29uc3RyYWludDoJTlVMTCwKKwlnZXRfcmVzaXplX2NvbnN0cmFpbnQ6CU5VTEwsCisJZ2V0X2NvcHlfY29uc3RyYWludDoJTlVMTAorfTsKKworc3RhdGljIFBlZEZpbGVTeXN0ZW1UeXBlIHVmc190eXBlX3N1biA9IHsKKwluZXh0OglOVUxMLAorCW9wczoJJnVmc19vcHNfc3VuLAorCW5hbWU6CSJzdW4tdWZzIiwKKwlibG9ja19zaXplczogU1VOX1VGU19CTE9DS19TSVpFUworfTsKKworc3RhdGljIFBlZEZpbGVTeXN0ZW1UeXBlIHVmc190eXBlX2hwID0geworCW5leHQ6ICAgTlVMTCwKKwlvcHM6ICAgICZ1ZnNfb3BzX2hwLAorCW5hbWU6ICAgImhwLXVmcyIsCisJYmxvY2tfc2l6ZXM6IEhQX1VGU19CTE9DS19TSVpFUworfTsKKwordm9pZAorcGVkX2ZpbGVfc3lzdGVtX3Vmc19pbml0ICgpCit7CisJUEVEX0FTU0VSVCAoc2l6ZW9mIChzdHJ1Y3QgdWZzX3N1cGVyX2Jsb2NrKSA9PSAxMzgwLCByZXR1cm4pOworCisJcGVkX2ZpbGVfc3lzdGVtX3R5cGVfcmVnaXN0ZXIgKCZ1ZnNfdHlwZV9zdW4pOworCXBlZF9maWxlX3N5c3RlbV90eXBlX3JlZ2lzdGVyICgmdWZzX3R5cGVfaHApOworfQorCit2b2lkCitwZWRfZmlsZV9zeXN0ZW1fdWZzX2RvbmUgKCkKK3sKKwlwZWRfZmlsZV9zeXN0ZW1fdHlwZV91bnJlZ2lzdGVyICgmdWZzX3R5cGVfaHApOworCXBlZF9maWxlX3N5c3RlbV90eXBlX3VucmVnaXN0ZXIgKCZ1ZnNfdHlwZV9zdW4pOworfQpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy94ZnMvTWFrZWZpbGUuYW0gYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL3hmcy9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTU1OWMyCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy94ZnMvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSw4IEBACitwYXJ0ZWRpbmNsdWRlZGlyCT0gLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUKKworbm9pbnN0X0xUTElCUkFSSUVTCT0gbGlieGZzLmxhCitsaWJ4ZnNfbGFfU09VUkNFUwk9IHhmcy5jIHhmc19zYi5oIHhmc190eXBlcy5oIHBsYXRmb3JtX2RlZnMuaAorCitJTkNMVURFUyA9ICQocGFydGVkaW5jbHVkZWRpcikgJChJTlRMSU5DUykKKworTUFJTlRBSU5FUkNMRUFORklMRVMgPSBNYWtlZmlsZS5pbgpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy94ZnMvTWFrZWZpbGUuaW4gYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL3hmcy9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmE5MmVlCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy94ZnMvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw2MjQgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTAgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorCitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorc3ViZGlyID0gbGlicGFydGVkL2ZzL3hmcworRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9hYnNvbHV0ZS1oZWFkZXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvYWxsb2NhLm00ICQodG9wX3NyY2RpcikvbTQvYXNzZXJ0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2F0ZXhpdC5tNCAkKHRvcF9zcmNkaXIpL200L2NhbGxvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jbG9zZS1zdHJlYW0ubTQgJCh0b3Bfc3JjZGlyKS9tNC9jbG9zZW91dC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jb2Rlc2V0Lm00ICQodG9wX3NyY2RpcikvbTQvY29uZmlnLWgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZGlybmFtZS5tNCAkKHRvcF9zcmNkaXIpL200L2Rvcy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9kb3VibGUtc2xhc2gtcm9vdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9lcnJvci5tNCAkKHRvcF9zcmNkaXIpL200L2V4aXRmYWlsLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2V4dGVuc2lvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9mcGVuZGluZy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9mcmVlLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0b3B0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgJCh0b3Bfc3JjZGlyKS9tNC9nbGliYzIxLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2dudWxpYi1jb21tb24ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZ251bGliLWNvbXAubTQgJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pbmxpbmUubTQgJCh0b3Bfc3JjZGlyKS9tNC9pbnR0eXBlcy1wcmkubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaW50dHlwZXMubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItaWdub3JlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbG9jYWxjaGFyc2V0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xvbmctb3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2xvbmdsb25nLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21icnRvd2MubTQgJCh0b3Bfc3JjZGlyKS9tNC9tYnN0YXRlX3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWVtY2hyLm00ICQodG9wX3NyY2RpcikvbTQvbWVtY21wLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21lbWNweS5tNCAkKHRvcF9zcmNkaXIpL200L21lbW1vdmUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWVtc2V0Lm00ICQodG9wX3NyY2RpcikvbTQvbmxzLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3BvLm00ICQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcXVvdGVhcmcubTQgJCh0b3Bfc3JjZGlyKS9tNC9yZWdleC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9yZW5hbWUubTQgJCh0b3Bfc3JjZGlyKS9tNC9ycG1hdGNoLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3NhZmUtcmVhZC5tNCAkKHRvcF9zcmNkaXIpL200L3NhZmUtd3JpdGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3NpemVfdC5tNCAkKHRvcF9zcmNkaXIpL200L3N0ZGFyZy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdGRib29sLm00ICQodG9wX3NyY2RpcikvbTQvc3RkaW50Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0ZGxpYl9oLm00ICQodG9wX3NyY2RpcikvbTQvc3RyY3Nwbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdHJpbmdfaC5tNCAkKHRvcF9zcmNkaXIpL200L3N0cm5kdXAubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3Rybmxlbi5tNCAkKHRvcF9zcmNkaXIpL200L3N0cnRvZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdHJ0b2wubTQgJCh0b3Bfc3JjZGlyKS9tNC91bmlzdGRfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC91dGltYnVmLm00ICQodG9wX3NyY2RpcikvbTQvdXRpbWUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdXRpbWVzLW51bGwubTQgJCh0b3Bfc3JjZGlyKS9tNC93Y2hhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC93Y3R5cGUubTQgJCh0b3Bfc3JjZGlyKS9tNC93aW50X3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQveGFsbG9jLm00ICQodG9wX3NyY2RpcikvbTQveHN0cm5kdXAubTQgXAorCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCithbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorCSQoQUNMT0NBTF9NNCkKK21raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK0xUTElCUkFSSUVTID0gJChub2luc3RfTFRMSUJSQVJJRVMpCitsaWJ4ZnNfbGFfTElCQUREID0KK2FtX2xpYnhmc19sYV9PQkpFQ1RTID0geGZzLmxvCitsaWJ4ZnNfbGFfT0JKRUNUUyA9ICQoYW1fbGlieGZzX2xhX09CSkVDVFMpCitERUZBVUxUX0lOQ0xVREVTID0gLUkuIC1JJCh0b3BfYnVpbGRkaXIpL2xpYkBhbV9faXNyY0AKK2RlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9kZXBjb21wCithbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcworQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCisJJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorTFRDT01QSUxFID0gJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIFwKKwktLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgXAorCSQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0NDTEQgPSAkKENDKQorTElOSyA9ICQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCisJLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgXAorCSQoTERGTEFHUykgLW8gJEAKK1NPVVJDRVMgPSAkKGxpYnhmc19sYV9TT1VSQ0VTKQorRElTVF9TT1VSQ0VTID0gJChsaWJ4ZnNfbGFfU09VUkNFUykKK0VUQUdTID0gZXRhZ3MKK0NUQUdTID0gY3RhZ3MKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitBQlNPTFVURV9JTlRUWVBFU19IID0gQEFCU09MVVRFX0lOVFRZUEVTX0hACitBQlNPTFVURV9TVERJTlRfSCA9IEBBQlNPTFVURV9TVERJTlRfSEAKK0FCU09MVVRFX1NURExJQl9IID0gQEFCU09MVVRFX1NURExJQl9IQAorQUJTT0xVVEVfU1RSSU5HX0ggPSBAQUJTT0xVVEVfU1RSSU5HX0hACitBQlNPTFVURV9VTklTVERfSCA9IEBBQlNPTFVURV9VTklTVERfSEAKK0FCU09MVVRFX1dDSEFSX0ggPSBAQUJTT0xVVEVfV0NIQVJfSEAKK0FCU09MVVRFX1dDVFlQRV9IID0gQEFCU09MVVRFX1dDVFlQRV9IQAorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQUxMT0NBID0gQEFMTE9DQUAKK0FMTE9DQV9IID0gQEFMTE9DQV9IQAorQU1UQVIgPSBAQU1UQVJACitBUiA9IEBBUkAKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBV0sgPSBAQVdLQAorQklUU0laRU9GX1BUUkRJRkZfVCA9IEBCSVRTSVpFT0ZfUFRSRElGRl9UQAorQklUU0laRU9GX1NJR19BVE9NSUNfVCA9IEBCSVRTSVpFT0ZfU0lHX0FUT01JQ19UQAorQklUU0laRU9GX1NJWkVfVCA9IEBCSVRTSVpFT0ZfU0laRV9UQAorQklUU0laRU9GX1dDSEFSX1QgPSBAQklUU0laRU9GX1dDSEFSX1RACitCSVRTSVpFT0ZfV0lOVF9UID0gQEJJVFNJWkVPRl9XSU5UX1RACitCVUlMRElORk8gPSBAQlVJTERJTkZPQAorQ0MgPSBAQ0NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NIRUNLX0NGTEFHUyA9IEBDSEVDS19DRkxBR1NACitDSEVDS19MSUJTID0gQENIRUNLX0xJQlNACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitETF9MSUJTID0gQERMX0xJQlNACitETV9MSUJTID0gQERNX0xJQlNACitFQ0hPID0gQEVDSE9ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VYRUVYVCA9IEBFWEVFWFRACitGNzcgPSBARjc3QAorRkZMQUdTID0gQEZGTEFHU0AKK0dFVE9QVF9IID0gQEdFVE9QVF9IQAorR0xJQkMyMSA9IEBHTElCQzIxQAorR01TR0ZNVCA9IEBHTVNHRk1UQAorR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACitHTlVMSUJfQ0hPV04gPSBAR05VTElCX0NIT1dOQAorR05VTElCX0RVUDIgPSBAR05VTElCX0RVUDJACitHTlVMSUJfRkNIRElSID0gQEdOVUxJQl9GQ0hESVJACitHTlVMSUJfRlRSVU5DQVRFID0gQEdOVUxJQl9GVFJVTkNBVEVACitHTlVMSUJfR0VUQ1dEID0gQEdOVUxJQl9HRVRDV0RACitHTlVMSUJfR0VUTE9HSU5fUiA9IEBHTlVMSUJfR0VUTE9HSU5fUkAKK0dOVUxJQl9HRVRTVUJPUFQgPSBAR05VTElCX0dFVFNVQk9QVEAKK0dOVUxJQl9JTUFYQUJTID0gQEdOVUxJQl9JTUFYQUJTQAorR05VTElCX0lNQVhESVYgPSBAR05VTElCX0lNQVhESVZACitHTlVMSUJfTUJTQ0FTRUNNUCA9IEBHTlVMSUJfTUJTQ0FTRUNNUEAKK0dOVUxJQl9NQlNDQVNFU1RSID0gQEdOVUxJQl9NQlNDQVNFU1RSQAorR05VTElCX01CU0NIUiA9IEBHTlVMSUJfTUJTQ0hSQAorR05VTElCX01CU0NTUE4gPSBAR05VTElCX01CU0NTUE5ACitHTlVMSUJfTUJTTEVOID0gQEdOVUxJQl9NQlNMRU5ACitHTlVMSUJfTUJTTkNBU0VDTVAgPSBAR05VTElCX01CU05DQVNFQ01QQAorR05VTElCX01CU1BCUksgPSBAR05VTElCX01CU1BCUktACitHTlVMSUJfTUJTUENBU0VDTVAgPSBAR05VTElCX01CU1BDQVNFQ01QQAorR05VTElCX01CU1JDSFIgPSBAR05VTElCX01CU1JDSFJACitHTlVMSUJfTUJTU0VQID0gQEdOVUxJQl9NQlNTRVBACitHTlVMSUJfTUJTU1BOID0gQEdOVUxJQl9NQlNTUE5ACitHTlVMSUJfTUJTU1RSID0gQEdOVUxJQl9NQlNTVFJACitHTlVMSUJfTUJTVE9LX1IgPSBAR05VTElCX01CU1RPS19SQAorR05VTElCX01FTU1FTSA9IEBHTlVMSUJfTUVNTUVNQAorR05VTElCX01FTVBDUFkgPSBAR05VTElCX01FTVBDUFlACitHTlVMSUJfTUVNUkNIUiA9IEBHTlVMSUJfTUVNUkNIUkAKK0dOVUxJQl9NS0RURU1QID0gQEdOVUxJQl9NS0RURU1QQAorR05VTElCX01LU1RFTVAgPSBAR05VTElCX01LU1RFTVBACitHTlVMSUJfUkVBRExJTksgPSBAR05VTElCX1JFQURMSU5LQAorR05VTElCX1NMRUVQID0gQEdOVUxJQl9TTEVFUEAKK0dOVUxJQl9TVFBDUFkgPSBAR05VTElCX1NUUENQWUAKK0dOVUxJQl9TVFBOQ1BZID0gQEdOVUxJQl9TVFBOQ1BZQAorR05VTElCX1NUUkNBU0VTVFIgPSBAR05VTElCX1NUUkNBU0VTVFJACitHTlVMSUJfU1RSQ0hSTlVMID0gQEdOVUxJQl9TVFJDSFJOVUxACitHTlVMSUJfU1RSRFVQID0gQEdOVUxJQl9TVFJEVVBACitHTlVMSUJfU1RSTkRVUCA9IEBHTlVMSUJfU1RSTkRVUEAKK0dOVUxJQl9TVFJOTEVOID0gQEdOVUxJQl9TVFJOTEVOQAorR05VTElCX1NUUlBCUksgPSBAR05VTElCX1NUUlBCUktACitHTlVMSUJfU1RSU0VQID0gQEdOVUxJQl9TVFJTRVBACitHTlVMSUJfU1RSVE9JTUFYID0gQEdOVUxJQl9TVFJUT0lNQVhACitHTlVMSUJfU1RSVE9LX1IgPSBAR05VTElCX1NUUlRPS19SQAorR05VTElCX1NUUlRPVU1BWCA9IEBHTlVMSUJfU1RSVE9VTUFYQAorR1JFUCA9IEBHUkVQQAorSEFWRV9ERUNMX0dFVExPR0lOX1IgPSBASEFWRV9ERUNMX0dFVExPR0lOX1JACitIQVZFX0RFQ0xfSU1BWEFCUyA9IEBIQVZFX0RFQ0xfSU1BWEFCU0AKK0hBVkVfREVDTF9JTUFYRElWID0gQEhBVkVfREVDTF9JTUFYRElWQAorSEFWRV9ERUNMX01FTU1FTSA9IEBIQVZFX0RFQ0xfTUVNTUVNQAorSEFWRV9ERUNMX01FTVJDSFIgPSBASEFWRV9ERUNMX01FTVJDSFJACitIQVZFX0RFQ0xfU1RSRFVQID0gQEhBVkVfREVDTF9TVFJEVVBACitIQVZFX0RFQ0xfU1RSTkNBU0VDTVAgPSBASEFWRV9ERUNMX1NUUk5DQVNFQ01QQAorSEFWRV9ERUNMX1NUUk5EVVAgPSBASEFWRV9ERUNMX1NUUk5EVVBACitIQVZFX0RFQ0xfU1RSTkxFTiA9IEBIQVZFX0RFQ0xfU1RSTkxFTkAKK0hBVkVfREVDTF9TVFJUT0lNQVggPSBASEFWRV9ERUNMX1NUUlRPSU1BWEAKK0hBVkVfREVDTF9TVFJUT0tfUiA9IEBIQVZFX0RFQ0xfU1RSVE9LX1JACitIQVZFX0RFQ0xfU1RSVE9VTUFYID0gQEhBVkVfREVDTF9TVFJUT1VNQVhACitIQVZFX0RVUDIgPSBASEFWRV9EVVAyQAorSEFWRV9GVFJVTkNBVEUgPSBASEFWRV9GVFJVTkNBVEVACitIQVZFX0dFVFNVQk9QVCA9IEBIQVZFX0dFVFNVQk9QVEAKK0hBVkVfSU5UVFlQRVNfSCA9IEBIQVZFX0lOVFRZUEVTX0hACitIQVZFX0lTV0NOVFJMID0gQEhBVkVfSVNXQ05UUkxACitIQVZFX0xPTkdfTE9OR19JTlQgPSBASEFWRV9MT05HX0xPTkdfSU5UQAorSEFWRV9NRU1QQ1BZID0gQEhBVkVfTUVNUENQWUAKK0hBVkVfTUtEVEVNUCA9IEBIQVZFX01LRFRFTVBACitIQVZFX1JFQURMSU5LID0gQEhBVkVfUkVBRExJTktACitIQVZFX1NJR05FRF9TSUdfQVRPTUlDX1QgPSBASEFWRV9TSUdORURfU0lHX0FUT01JQ19UQAorSEFWRV9TSUdORURfV0NIQVJfVCA9IEBIQVZFX1NJR05FRF9XQ0hBUl9UQAorSEFWRV9TSUdORURfV0lOVF9UID0gQEhBVkVfU0lHTkVEX1dJTlRfVEAKK0hBVkVfU0xFRVAgPSBASEFWRV9TTEVFUEAKK0hBVkVfU1RESU5UX0ggPSBASEFWRV9TVERJTlRfSEAKK0hBVkVfU1RQQ1BZID0gQEhBVkVfU1RQQ1BZQAorSEFWRV9TVFBOQ1BZID0gQEhBVkVfU1RQTkNQWUAKK0hBVkVfU1RSQ0FTRUNNUCA9IEBIQVZFX1NUUkNBU0VDTVBACitIQVZFX1NUUkNBU0VTVFIgPSBASEFWRV9TVFJDQVNFU1RSQAorSEFWRV9TVFJDSFJOVUwgPSBASEFWRV9TVFJDSFJOVUxACitIQVZFX1NUUk5EVVAgPSBASEFWRV9TVFJORFVQQAorSEFWRV9TVFJQQlJLID0gQEhBVkVfU1RSUEJSS0AKK0hBVkVfU1RSU0VQID0gQEhBVkVfU1RSU0VQQAorSEFWRV9TWVNfQklUWVBFU19IID0gQEhBVkVfU1lTX0JJVFlQRVNfSEAKK0hBVkVfU1lTX0lOVFRZUEVTX0ggPSBASEFWRV9TWVNfSU5UVFlQRVNfSEAKK0hBVkVfU1lTX1RZUEVTX0ggPSBASEFWRV9TWVNfVFlQRVNfSEAKK0hBVkVfVU5JU1REX0ggPSBASEFWRV9VTklTVERfSEAKK0hBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVCA9IEBIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlRACitIQVZFX1dDVFlQRV9IID0gQEhBVkVfV0NUWVBFX0hACitIQVZFX1dJTlRfVCA9IEBIQVZFX1dJTlRfVEAKK0hBVkVfX0JPT0wgPSBASEFWRV9fQk9PTEAKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSU5UTElOQ1MgPSBASU5UTElOQ1NACitJTlRMTElCUyA9IEBJTlRMTElCU0AKK0lOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKK0lOVFRZUEVTX0ggPSBASU5UVFlQRVNfSEAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQklDT05WID0gQExJQklDT05WQAorTElCSU5UTCA9IEBMSUJJTlRMQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTE5fUyA9IEBMTl9TQAorTFRBTExPQ0EgPSBATFRBTExPQ0FACitMVExJQklDT05WID0gQExUTElCSUNPTlZACitMVExJQklOVEwgPSBATFRMSUJJTlRMQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK0xUX0FHRSA9IEBMVF9BR0VACitMVF9DVVJSRU5UID0gQExUX0NVUlJFTlRACitMVF9SRUxFQVNFID0gQExUX1JFTEVBU0VACitMVF9SRVZJU0lPTiA9IEBMVF9SRVZJU0lPTkAKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTVNHRk1UID0gQE1TR0ZNVEAKK01TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKK01TR01FUkdFID0gQE1TR01FUkdFQAorT0JKRVhUID0gQE9CSkVYVEAKK09TID0gQE9TQAorT1NfTElCUyA9IEBPU19MSUJTQAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBUlRFRExERkxBR1MgPSBAUEFSVEVETERGTEFHU0AKK1BBUlRFRF9MSUJTID0gQFBBUlRFRF9MSUJTQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQT1NVQiA9IEBQT1NVQkAKK1BPV19MSUIgPSBAUE9XX0xJQkAKK1BSSVBUUl9QUkVGSVggPSBAUFJJUFRSX1BSRUZJWEAKK1BSSV9NQUNST1NfQlJPS0VOID0gQFBSSV9NQUNST1NfQlJPS0VOQAorUFRSRElGRl9UX1NVRkZJWCA9IEBQVFJESUZGX1RfU1VGRklYQAorUkFOTElCID0gQFJBTkxJQkAKK1JFSVNFUl9MSUJTID0gQFJFSVNFUl9MSUJTQAorUkVQTEFDRV9DSE9XTiA9IEBSRVBMQUNFX0NIT1dOQAorUkVQTEFDRV9GQ0hESVIgPSBAUkVQTEFDRV9GQ0hESVJACitSRVBMQUNFX0dFVENXRCA9IEBSRVBMQUNFX0dFVENXREAKK1JFUExBQ0VfTUtTVEVNUCA9IEBSRVBMQUNFX01LU1RFTVBACitTRUQgPSBAU0VEQAorU0VMSU5VWF9MSUJTID0gQFNFTElOVVhfTElCU0AKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTSUdfQVRPTUlDX1RfU1VGRklYID0gQFNJR19BVE9NSUNfVF9TVUZGSVhACitTSVpFX1RfU1VGRklYID0gQFNJWkVfVF9TVUZGSVhACitTVERCT09MX0ggPSBAU1REQk9PTF9IQAorU1RESU5UX0ggPSBAU1RESU5UX0hACitTVFJJUCA9IEBTVFJJUEAKK1VTRV9OTFMgPSBAVVNFX05MU0AKK1VVSURfTElCUyA9IEBVVUlEX0xJQlNACitWRVJTSU9OID0gQFZFUlNJT05ACitXQ0hBUl9IID0gQFdDSEFSX0hACitXQ0hBUl9UX1NVRkZJWCA9IEBXQ0hBUl9UX1NVRkZJWEAKK1dDVFlQRV9IID0gQFdDVFlQRV9IQAorV0lOVF9UX1NVRkZJWCA9IEBXSU5UX1RfU1VGRklYQAorWEdFVFRFWFQgPSBAWEdFVFRFWFRACitYR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9DWFggPSBAYWNfY3RfQ1hYQAorYWNfY3RfRjc3ID0gQGFjX2N0X0Y3N0AKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitnbF9MSUJPQkpTID0gQGdsX0xJQk9CSlNACitnbF9MVExJQk9CSlMgPSBAZ2xfTFRMSUJPQkpTQAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK3BhcnRlZGluY2x1ZGVkaXIgPSAtSSQodG9wX3NyY2RpcikvaW5jbHVkZQorbm9pbnN0X0xUTElCUkFSSUVTID0gbGlieGZzLmxhCitsaWJ4ZnNfbGFfU09VUkNFUyA9IHhmcy5jIHhmc19zYi5oIHhmc190eXBlcy5oIHBsYXRmb3JtX2RlZnMuaAorSU5DTFVERVMgPSAkKHBhcnRlZGluY2x1ZGVkaXIpICQoSU5UTElOQ1MpCitNQUlOVEFJTkVSQ0xFQU5GSUxFUyA9IE1ha2VmaWxlLmluCithbGw6IGFsbC1hbQorCisuU1VGRklYRVM6CisuU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCiskKHNyY2RpcikvTWFrZWZpbGUuaW46ICAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCBcCisJCSYmIGV4aXQgMDsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgIGxpYnBhcnRlZC9mcy94ZnMvTWFrZWZpbGUnOyBcCisJY2QgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWdudSAgbGlicGFydGVkL2ZzL3hmcy9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworY2xlYW4tbm9pbnN0TFRMSUJSQVJJRVM6CisJLXRlc3QgLXogIiQobm9pbnN0X0xUTElCUkFSSUVTKSIgfHwgcm0gLWYgJChub2luc3RfTFRMSUJSQVJJRVMpCisJQGxpc3Q9JyQobm9pbnN0X0xUTElCUkFSSUVTKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgZGlyPSJgZWNobyAkJHAgfCBzZWQgLWUgJ3N8L1teL10qJCR8fCdgIjsgXAorCSAgdGVzdCAiJCRkaXIiICE9ICIkJHAiIHx8IGRpcj0uOyBcCisJICBlY2hvICJybSAtZiBcIiQke2Rpcn0vc29fbG9jYXRpb25zXCIiOyBcCisJICBybSAtZiAiJCR7ZGlyfS9zb19sb2NhdGlvbnMiOyBcCisJZG9uZQorbGlieGZzLmxhOiAkKGxpYnhmc19sYV9PQkpFQ1RTKSAkKGxpYnhmc19sYV9ERVBFTkRFTkNJRVMpIAorCSQoTElOSykgICQobGlieGZzX2xhX09CSkVDVFMpICQobGlieGZzX2xhX0xJQkFERCkgJChMSUJTKQorCittb3N0bHljbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLiQoT0JKRVhUKQorCitkaXN0Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi50YWIuYworCitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikveGZzLlBsb0BhbV9fcXVvdGVACisKKy5jLm86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgJDwKKworLmMub2JqOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgYCQoQ1lHUEFUSF9XKSAnJDwnYAorCisuYy5sbzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJbWtpZCAtZklEICQkdW5pcXVlCit0YWdzOiBUQUdTCisKK1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJdGFncz07IFwKKwloZXJlPWBwd2RgOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKwkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKKwkgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgJCR0YWdzICQkdW5pcXVlOyBcCisJZmkKK2N0YWdzOiBDVEFHUworQ1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJdGFncz07IFwKKwloZXJlPWBwd2RgOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIiBcCisJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCisJICAgICAkJHRhZ3MgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmIGNkICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAkJGhlcmUKKworZGlzdGNsZWFuLXRhZ3M6CisJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1wUiAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLXBSICQkZC8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgJChkaXN0ZGlyKS8kJGZpbGUgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICQoZGlzdGRpcikvJCRmaWxlIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1hbQorYWxsLWFtOiBNYWtlZmlsZSAkKExUTElCUkFSSUVTKQoraW5zdGFsbGRpcnM6CitpbnN0YWxsOiBpbnN0YWxsLWFtCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KK3VuaW5zdGFsbDogdW5pbnN0YWxsLWFtCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCitpbnN0YWxsLXN0cmlwOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorCS10ZXN0IC16ICIkKE1BSU5UQUlORVJDTEVBTkZJTEVTKSIgfHwgcm0gLWYgJChNQUlOVEFJTkVSQ0xFQU5GSUxFUykKK2NsZWFuOiBjbGVhbi1hbQorCitjbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdExUTElCUkFSSUVTIFwKKwltb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi10YWdzCisKK2R2aTogZHZpLWFtCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1hbQorCitpbmZvOiBpbmZvLWFtCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbToKKworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1tYW46CisKK2luc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQorCitpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtYW0KKworcGRmLWFtOgorCitwczogcHMtYW0KKworcHMtYW06CisKK3VuaW5zdGFsbC1hbToKKworLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAorCisuUEhPTlk6IENUQUdTIEdUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCisJY2xlYW4tbGlidG9vbCBjbGVhbi1ub2luc3RMVExJQlJBUklFUyBjdGFncyBkaXN0Y2xlYW4gXAorCWRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIFwKKwlkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBcCisJaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgXAorCWluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIFwKKwlpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBcCisJaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKKwlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAorCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKKwltb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCisJcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0KKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy94ZnMvcGxhdGZvcm1fZGVmcy5oIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy94ZnMvcGxhdGZvcm1fZGVmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyYjQ1YjkKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL3hmcy9wbGF0Zm9ybV9kZWZzLmgKQEAgLTAsMCArMSwxMTUgQEAKKy8qIGluY2x1ZGUvcGxhdGZvcm1fZGVmcy5oLiAgR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgY29uZmlndXJlLiAgKi8KKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAgU2lsaWNvbiBHcmFwaGljcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdvdWxkIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKgorICogRnVydGhlciwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCB3aXRob3V0IGFueSB3YXJyYW50eSB0aGF0IGl0IGlzCisgKiBmcmVlIG9mIHRoZSByaWdodGZ1bCBjbGFpbSBvZiBhbnkgdGhpcmQgcGVyc29uIHJlZ2FyZGluZyBpbmZyaW5nZW1lbnQKKyAqIG9yIHRoZSBsaWtlLiAgQW55IGxpY2Vuc2UgcHJvdmlkZWQgaGVyZWluLCB3aGV0aGVyIGltcGxpZWQgb3IKKyAqIG90aGVyd2lzZSwgYXBwbGllcyBvbmx5IHRvIHRoaXMgc29mdHdhcmUgZmlsZS4gIFBhdGVudCBsaWNlbnNlcywgaWYKKyAqIGFueSwgcHJvdmlkZWQgaGVyZWluIGRvIG5vdCBhcHBseSB0byBjb21iaW5hdGlvbnMgb2YgdGhpcyBwcm9ncmFtIHdpdGgKKyAqIG90aGVyIHNvZnR3YXJlLCBvciBhbnkgb3RoZXIgcHJvZHVjdCB3aGF0c29ldmVyLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqIENvbnRhY3QgaW5mb3JtYXRpb246IFNpbGljb24gR3JhcGhpY3MsIEluYy4sIDE2MDAgQW1waGl0aGVhdHJlIFBrd3ksCisgKiBNb3VudGFpbiBWaWV3LCBDQSAgOTQwNDMsIG9yOgorICoKKyAqIGh0dHA6Ly93d3cuc2dpLmNvbQorICoKKyAqIEZvciBmdXJ0aGVyIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB0aGlzIG5vdGljZSwgc2VlOgorICoKKyAqIGh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9HZW5JbmZvL1NHSUdQTE5vdGljZUV4cGxhbi8KKyAqCisgKiBAY29uZmlndXJlX2lucHV0QAorICovCisjaWZuZGVmIF9fWEZTX1BMQVRGT1JNX0RFRlNfSF9fCisjZGVmaW5lIF9fWEZTX1BMQVRGT1JNX0RFRlNfSF9fCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGVuZGlhbi5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjaWYgKF9fR0xJQkNfXyA8PSAyKSAmJiAoX19HTElCQ19NSU5PUl9fIDw9IDEpCisjIGRlZmluZSBjb25zdHBwCWNvbnN0IGNoYXIgKiBjb25zdCAqCisjZWxzZQorIyBkZWZpbmUgY29uc3RwcAljaGFyICogY29uc3QgKgorI2VuZGlmCisKKyNpZmRlZiBfX3NwYXJjX18KKyMgaWZuZGVmIE9fRElSRUNUCisjICBkZWZpbmUgT19ESVJFQ1QJMHgxMDAwMDAKKyMgZW5kaWYKKyNlbmRpZgorCit0eXBlZGVmIGxvZmZfdAkJeGZzX29mZl90OwordHlwZWRlZiB1aW50NjRfdAl4ZnNfaW5vX3Q7Cit0eXBlZGVmIHVpbnQzMl90CXhmc19kZXZfdDsKK3R5cGVkZWYgaW50NjRfdCAgICAgICAgIHhmc19kYWRkcl90OwordHlwZWRlZiBjaGFyKgkJeGZzX2NhZGRyX3Q7CisKKy8qIGxvbmcgYW5kIHBvaW50ZXIgbXVzdCBiZSBlaXRoZXIgMzIgYml0IG9yIDY0IGJpdCAqLworLyogI3VuZGVmIEhBVkVfNjRCSVRfTE9ORyAqLworI2RlZmluZSBIQVZFXzMyQklUX0xPTkcgMQorI2RlZmluZSBIQVZFXzMyQklUX1BUUiAxCisvKiAjdW5kZWYgSEFWRV82NEJJVF9QVFIgKi8KKworLyogQ2hlY2sgaWYgX19wc2ludF90IGlzIHNldCB0byBzb21ldGhpbmcgbWVhbmluZ2Z1bCAqLworLyogI3VuZGVmIEhBVkVfX19QU0lOVF9UICovCisjaWZuZGVmIEhBVkVfX19QU0lOVF9UCisjIGlmZGVmIEhBVkVfMzJCSVRfUFRSCit0eXBlZGVmIGludCBfX3BzaW50X3Q7CisjIGVsaWYgZGVmaW5lZCBIQVZFXzY0QklUX1BUUgorIyAgaWZkZWYgSEFWRV82NEJJVF9MT05HCit0eXBlZGVmIGxvbmcgX19wc2ludF90OworIyAgZWxzZQorLyogVGhpcyBpcyBhIHZlcnkgc3RyYW5nZSBhcmNoaXRlY3R1cmUsIHdoaWNoIGhhcyA2NCBiaXQgcG9pbnRlcnMgYnV0CisgKiBub3QgNjQgYml0IGxvbmdzLiBTbywgSSdkIGp1c3QgcHVudCBoZXJlIGFuZCBhc3N1bWUgbG9uZyBsb25nIGlzIE9rICovCit0eXBlZGVmIGxvbmcgbG9uZyBfX3BzaW50X3Q7CisjICBlbmRpZgorIyBlbHNlCisjICBlcnJvciBVbmtub3duIHBvaW50ZXIgc2l6ZQorIyBlbmRpZgorI2VuZGlmCisKKy8qIENoZWNrIGlmIF9fcHN1bnNpZ25lZF90IGlzIHNldCB0byBzb21ldGhpbmcgbWVhbmluZ2Z1bCAqLworLyogI3VuZGVmIEhBVkVfX19QU1VOU0lHTkVEX1QgKi8KKyNpZm5kZWYgSEFWRV9fX1BTVU5TSUdORURfVAorIyBpZmRlZiBIQVZFXzMyQklUX1BUUgordHlwZWRlZiB1bnNpZ25lZCBpbnQgX19wc3Vuc2lnbmVkX3Q7CisjIGVsaWYgZGVmaW5lZCBIQVZFXzY0QklUX1BUUgorIyAgaWZkZWYgSEFWRV82NEJJVF9MT05HCit0eXBlZGVmIGxvbmcgX19wc3Vuc2lnbmVkX3Q7CisjICBlbHNlCisvKiBUaGlzIGlzIGEgdmVyeSBzdHJhbmdlIGFyY2hpdGVjdHVyZSwgd2hpY2ggaGFzIDY0IGJpdCBwb2ludGVycyBidXQKKyAqIG5vdCA2NCBiaXQgbG9uZ3MuIFNvLCBJJ2QganVzdCBwdW50IGhlcmUgYW5kIGFzc3VtZSBsb25nIGxvbmcgaXMgT2sgKi8KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIF9fcHN1bnNpZ25lZF90OworIyAgZW5kaWYKKyMgZWxzZQorIyAgZXJyb3IgVW5rbm93biBwb2ludGVyIHNpemUKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgREVCVUcKKyMgZGVmaW5lIEFTU0VSVAkJYXNzZXJ0CisjZWxzZQorIyBkZWZpbmUgQVNTRVJUKEVYKQkoKHZvaWQpIDApCisjZW5kaWYKKworI2VuZGlmCS8qIF9fWEZTX1BMQVRGT1JNX0RFRlNfSF9fICovCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL3hmcy94ZnMuYyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMveGZzL3hmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2ZDg4ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL3hmcy94ZnMuYwpAQCAtMCwwICsxLDEyMCBAQAorLyoKKyAgICBsaWJwYXJ0ZWQgLSBhIGxpYnJhcnkgZm9yIG1hbmlwdWxhdGluZyBkaXNrIHBhcnRpdGlvbnMKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCisqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpbmNsdWRlIDxwYXJ0ZWQvcGFydGVkLmg+CisjaW5jbHVkZSA8cGFydGVkL2VuZGlhbi5oPgorCisjaWYgRU5BQkxFX05MUworIyAgaW5jbHVkZSA8bGliaW50bC5oPgorIyAgZGVmaW5lIF8oU3RyaW5nKSBkZ2V0dGV4dCAoUEFDS0FHRSwgU3RyaW5nKQorI2Vsc2UKKyMgIGRlZmluZSBfKFN0cmluZykgKFN0cmluZykKKyNlbmRpZiAvKiBFTkFCTEVfTkxTICovCisKKyNpbmNsdWRlIDx1dWlkL3V1aWQuaD4KKyNpbmNsdWRlICJwbGF0Zm9ybV9kZWZzLmgiCisjaW5jbHVkZSAieGZzX3R5cGVzLmgiCisjaW5jbHVkZSAieGZzX3NiLmgiCisKKyNkZWZpbmUgWEZTX0JMT0NLX1NJWkVTCQkoKGludFsyXSl7NTEyLCAwfSkKKworc3RhdGljIFBlZEdlb21ldHJ5KgoreGZzX3Byb2JlIChQZWRHZW9tZXRyeSogZ2VvbSkKK3sKKwlQZWRTZWN0b3IJYmxvY2tfc2l6ZTsKKwlQZWRTZWN0b3IJYmxvY2tfY291bnQ7CisJdW5pb24geworCQlzdHJ1Y3QgeGZzX3NiCXNiOworCQljaGFyCQlieXRlcyBbNTEyXTsKKwl9IGJ1ZjsKKworCWlmIChnZW9tLT5sZW5ndGggPCBYRlNfU0JfREFERFIgKyAxKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAoIXBlZF9nZW9tZXRyeV9yZWFkIChnZW9tLCAmYnVmLCBYRlNfU0JfREFERFIsIDEpKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChQRURfTEUzMl9UT19DUFUgKGJ1Zi5zYi5zYl9tYWdpY251bSkgPT0gWEZTX1NCX01BR0lDKSB7CisJCWJsb2NrX3NpemUgPSBQRURfTEUzMl9UT19DUFUgKGJ1Zi5zYi5zYl9ibG9ja3NpemUpIC8gNTEyOworCQlibG9ja19jb3VudCA9IFBFRF9MRTY0X1RPX0NQVSAoYnVmLnNiLnNiX2RibG9ja3MpOworCisJCXJldHVybiBwZWRfZ2VvbWV0cnlfbmV3IChnZW9tLT5kZXYsIGdlb20tPnN0YXJ0LAorCQkJCQkgYmxvY2tfc2l6ZSAqIGJsb2NrX2NvdW50KTsKKwl9CisKKwlpZiAoUEVEX0JFMzJfVE9fQ1BVIChidWYuc2Iuc2JfbWFnaWNudW0pID09IFhGU19TQl9NQUdJQykgeworCQlibG9ja19zaXplID0gUEVEX0JFMzJfVE9fQ1BVIChidWYuc2Iuc2JfYmxvY2tzaXplKSAvIDUxMjsKKwkJYmxvY2tfY291bnQgPSBQRURfQkU2NF9UT19DUFUgKGJ1Zi5zYi5zYl9kYmxvY2tzKTsKKworCQlyZXR1cm4gcGVkX2dlb21ldHJ5X25ldyAoZ2VvbS0+ZGV2LCBnZW9tLT5zdGFydCwKKwkJCQkJIGJsb2NrX3NpemUgKiBibG9ja19jb3VudCk7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKyNpZm5kZWYgRElTQ09WRVJfT05MWQorc3RhdGljIGludAoreGZzX2Nsb2JiZXIgKFBlZEdlb21ldHJ5KiBnZW9tKQoreworCWNoYXIJYnVmWzUxMl07CisKKwltZW1zZXQgKGJ1ZiwgMCwgNTEyKTsKKwlyZXR1cm4gcGVkX2dlb21ldHJ5X3dyaXRlIChnZW9tLCBidWYsIFhGU19TQl9EQUREUiwgMSk7Cit9CisjZW5kaWYgLyogIURJU0NPVkVSX09OTFkgKi8KKworc3RhdGljIFBlZEZpbGVTeXN0ZW1PcHMgeGZzX29wcyA9IHsKKwlwcm9iZToJCXhmc19wcm9iZSwKKyNpZm5kZWYgRElTQ09WRVJfT05MWQorCWNsb2JiZXI6CXhmc19jbG9iYmVyLAorI2Vsc2UKKwljbG9iYmVyOglOVUxMLAorI2VuZGlmCisJb3BlbjoJCU5VTEwsCisJY3JlYXRlOgkJTlVMTCwKKwljbG9zZToJCU5VTEwsCisJY2hlY2s6CQlOVUxMLAorCWNvcHk6CQlOVUxMLAorCXJlc2l6ZToJCU5VTEwsCisJZ2V0X2NyZWF0ZV9jb25zdHJhaW50OglOVUxMLAorCWdldF9yZXNpemVfY29uc3RyYWludDoJTlVMTCwKKwlnZXRfY29weV9jb25zdHJhaW50OglOVUxMCit9OworCitzdGF0aWMgUGVkRmlsZVN5c3RlbVR5cGUgeGZzX3R5cGUgPSB7CisJbmV4dDoJTlVMTCwKKwlvcHM6CSZ4ZnNfb3BzLAorCW5hbWU6CSJ4ZnMiLAorCWJsb2NrX3NpemVzOiBYRlNfQkxPQ0tfU0laRVMKK307CisKK3ZvaWQKK3BlZF9maWxlX3N5c3RlbV94ZnNfaW5pdCAoKQoreworCXBlZF9maWxlX3N5c3RlbV90eXBlX3JlZ2lzdGVyICgmeGZzX3R5cGUpOworfQorCit2b2lkCitwZWRfZmlsZV9zeXN0ZW1feGZzX2RvbmUgKCkKK3sKKwlwZWRfZmlsZV9zeXN0ZW1fdHlwZV91bnJlZ2lzdGVyICgmeGZzX3R5cGUpOworfQorCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL3hmcy94ZnNfc2IuaCBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvZnMveGZzL3hmc19zYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MTFjNDcKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL3hmcy94ZnNfc2IuaApAQCAtMCwwICsxLDQ5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3b3VsZCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICogCisgKiBGdXJ0aGVyLCB0aGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIHdpdGhvdXQgYW55IHdhcnJhbnR5IHRoYXQgaXQgaXMKKyAqIGZyZWUgb2YgdGhlIHJpZ2h0ZnVsIGNsYWltIG9mIGFueSB0aGlyZCBwZXJzb24gcmVnYXJkaW5nIGluZnJpbmdlbWVudAorICogb3IgdGhlIGxpa2UuICBBbnkgbGljZW5zZSBwcm92aWRlZCBoZXJlaW4sIHdoZXRoZXIgaW1wbGllZCBvcgorICogb3RoZXJ3aXNlLCBhcHBsaWVzIG9ubHkgdG8gdGhpcyBzb2Z0d2FyZSBmaWxlLiAgUGF0ZW50IGxpY2Vuc2VzLCBpZgorICogYW55LCBwcm92aWRlZCBoZXJlaW4gZG8gbm90IGFwcGx5IHRvIGNvbWJpbmF0aW9ucyBvZiB0aGlzIHByb2dyYW0gd2l0aAorICogb3RoZXIgc29mdHdhcmUsIG9yIGFueSBvdGhlciBwcm9kdWN0IHdoYXRzb2V2ZXIuCisgKiAKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSwgVVNBLgorICogCisgKiBDb250YWN0IGluZm9ybWF0aW9uOiBTaWxpY29uIEdyYXBoaWNzLCBJbmMuLCAxNjAwIEFtcGhpdGhlYXRyZSBQa3d5LAorICogTW91bnRhaW4gVmlldywgQ0EgIDk0MDQzLCBvcjoKKyAqIAorICogaHR0cDovL3d3dy5zZ2kuY29tIAorICogCisgKiBGb3IgZnVydGhlciBpbmZvcm1hdGlvbiByZWdhcmRpbmcgdGhpcyBub3RpY2UsIHNlZTogCisgKiAKKyAqIGh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9HZW5JbmZvL1NHSUdQTE5vdGljZUV4cGxhbi8KKyAqLworI2lmbmRlZiBfX1hGU19TQl9IX18KKyNkZWZpbmUJX19YRlNfU0JfSF9fCisKKy8qCisgKiBTdXBlciBibG9jaworICogRml0cyBpbnRvIGEgNTEyLWJ5dGUgYnVmZmVyIGF0IGRhZGRyX3QgMCBvZiBlYWNoIGFsbG9jYXRpb24gZ3JvdXAuCisgKiBPbmx5IHRoZSBmaXJzdCBvZiB0aGVzZSBpcyBldmVyIHVwZGF0ZWQgZXhjZXB0IGR1cmluZyBncm93ZnMuCisgKi8KKworc3RydWN0IHhmc19idWY7CitzdHJ1Y3QgeGZzX21vdW50OworCisjZGVmaW5lCVhGU19TQl9NQUdJQwkJMHg1ODQ2NTM0MgkvKiAnWEZTQicgKi8KKyNkZWZpbmUJWEZTX1NCX1ZFUlNJT05fMQkxCQkvKiA1LjMsIDYuMC4xLCA2LjEgKi8KKyNkZWZpbmUJWEZTX1NCX1ZFUlNJT05fMgkyCQkvKiA2LjIgLSBhdHRyaWJ1dGVzICovCisjZGVmaW5lCVhGU19TQl9WRVJTSU9OXzMJMwkJLyogNi4yIC0gbmV3IGlub2RlIHZlcnNpb24gKi8KKyNkZWZpbmUJWEZTX1NCX1ZFUlNJT05fNAk0CQkvKiA2LjIrIC0gYml0bWFzayB2ZXJzaW9uICovCisjZGVmaW5lCVhGU19TQl9WRVJTSU9OX05VTUJJVFMJCTB4MDAwZgorI2RlZmluZQlYRlNfU0JfVkVSU0lPTl9BTExGQklUUwkJMHhmZmYwCisjZGVmaW5lCVhGU19TQl9WRVJTSU9OX1NBU0hGQklUUwkweGYwMDAKKyNkZWZpbmUJWEZTX1NCX1ZFUlNJT05fUkVBTEZCSVRTCTB4MGZmMAorI2RlZmluZQlYRlNfU0JfVkVSU0lPTl9BVFRSQklUCQkweDAwMTAKKyNkZWZpbmUJWEZTX1NCX1ZFUlNJT05fTkxJTktCSVQJCTB4MDAyMAorI2RlZmluZQlYRlNfU0JfVkVSU0lPTl9RVU9UQUJJVAkJMHgwMDQwCisjZGVmaW5lCVhGU19TQl9WRVJTSU9OX0FMSUdOQklUCQkweDAwODAKKyNkZWZpbmUJWEZTX1NCX1ZFUlNJT05fREFMSUdOQklUCTB4MDEwMAorI2RlZmluZQlYRlNfU0JfVkVSU0lPTl9TSEFSRURCSVQJMHgwMjAwCisjZGVmaW5lCVhGU19TQl9WRVJTSU9OX0VYVEZMR0JJVAkweDEwMDAKKyNkZWZpbmUJWEZTX1NCX1ZFUlNJT05fRElSVjJCSVQJCTB4MjAwMAorI2RlZmluZQlYRlNfU0JfVkVSU0lPTl9PS1NBU0hGQklUUwlcCisJKFhGU19TQl9WRVJTSU9OX0VYVEZMR0JJVCB8IFwKKwkgWEZTX1NCX1ZFUlNJT05fRElSVjJCSVQpCisjZGVmaW5lCVhGU19TQl9WRVJTSU9OX09LUkVBTEZCSVRTCVwKKwkoWEZTX1NCX1ZFUlNJT05fQVRUUkJJVCB8IFwKKwkgWEZTX1NCX1ZFUlNJT05fTkxJTktCSVQgfCBcCisJIFhGU19TQl9WRVJTSU9OX1FVT1RBQklUIHwgXAorCSBYRlNfU0JfVkVSU0lPTl9BTElHTkJJVCB8IFwKKwkgWEZTX1NCX1ZFUlNJT05fREFMSUdOQklUIHwgXAorCSBYRlNfU0JfVkVSU0lPTl9TSEFSRURCSVQpCisjZGVmaW5lCVhGU19TQl9WRVJTSU9OX09LU0FTSEJJVFMJXAorCShYRlNfU0JfVkVSU0lPTl9OVU1CSVRTIHwgXAorCSBYRlNfU0JfVkVSU0lPTl9SRUFMRkJJVFMgfCBcCisJIFhGU19TQl9WRVJTSU9OX09LU0FTSEZCSVRTKQorI2RlZmluZQlYRlNfU0JfVkVSU0lPTl9PS1JFQUxCSVRTCVwKKwkoWEZTX1NCX1ZFUlNJT05fTlVNQklUUyB8IFwKKwkgWEZTX1NCX1ZFUlNJT05fT0tSRUFMRkJJVFMgfCBcCisJIFhGU19TQl9WRVJTSU9OX09LU0FTSEZCSVRTKQorI2RlZmluZQlYRlNfU0JfVkVSU0lPTl9NS0ZTKGlhLGRpYSxleHRmbGFnLGRpcnYyKQlcCisJKCgoaWEpIHx8IChkaWEpIHx8IChleHRmbGFnKSB8fCAoZGlydjIpKSA/IFwKKwkJKFhGU19TQl9WRVJTSU9OXzQgfCBcCisJCSAoKGlhKSA/IFhGU19TQl9WRVJTSU9OX0FMSUdOQklUIDogMCkgfCBcCisJCSAoKGRpYSkgPyBYRlNfU0JfVkVSU0lPTl9EQUxJR05CSVQgOiAwKSB8IFwKKwkJICgoZXh0ZmxhZykgPyBYRlNfU0JfVkVSU0lPTl9FWFRGTEdCSVQgOiAwKSB8IFwKKwkJICgoZGlydjIpID8gWEZTX1NCX1ZFUlNJT05fRElSVjJCSVQgOiAwKSkgOiBcCisJCVhGU19TQl9WRVJTSU9OXzEpCisKK3R5cGVkZWYgc3RydWN0IHhmc19zYgoreworCXVpbnQzMl90CXNiX21hZ2ljbnVtOwkvKiBtYWdpYyBudW1iZXIgPT0gWEZTX1NCX01BR0lDICovCisJdWludDMyX3QJc2JfYmxvY2tzaXplOwkvKiBsb2dpY2FsIGJsb2NrIHNpemUsIGJ5dGVzICovCisJeGZzX2RyZnNibm9fdAlzYl9kYmxvY2tzOwkvKiBudW1iZXIgb2YgZGF0YSBibG9ja3MgKi8KKwl4ZnNfZHJmc2Jub190CXNiX3JibG9ja3M7CS8qIG51bWJlciBvZiByZWFsdGltZSBibG9ja3MgKi8KKwl4ZnNfZHJ0Ym5vX3QJc2JfcmV4dGVudHM7CS8qIG51bWJlciBvZiByZWFsdGltZSBleHRlbnRzICovCisJdXVpZF90CQlzYl91dWlkOwkvKiBmaWxlIHN5c3RlbSB1bmlxdWUgaWQgKi8KKwl4ZnNfZGZzYm5vX3QJc2JfbG9nc3RhcnQ7CS8qIHN0YXJ0aW5nIGJsb2NrIG9mIGxvZyBpZiBpbnRlcm5hbCAqLworCXhmc19pbm9fdAlzYl9yb290aW5vOwkvKiByb290IGlub2RlIG51bWJlciAqLworCXhmc19pbm9fdAlzYl9yYm1pbm87CS8qIGJpdG1hcCBpbm9kZSBmb3IgcmVhbHRpbWUgZXh0ZW50cyAqLworCXhmc19pbm9fdAlzYl9yc3VtaW5vOwkvKiBzdW1tYXJ5IGlub2RlIGZvciBydCBiaXRtYXAgKi8KKwl4ZnNfYWdibG9ja190CXNiX3JleHRzaXplOwkvKiByZWFsdGltZSBleHRlbnQgc2l6ZSwgYmxvY2tzICovCisJeGZzX2FnYmxvY2tfdAlzYl9hZ2Jsb2NrczsJLyogc2l6ZSBvZiBhbiBhbGxvY2F0aW9uIGdyb3VwICovCisJeGZzX2FnbnVtYmVyX3QJc2JfYWdjb3VudDsJLyogbnVtYmVyIG9mIGFsbG9jYXRpb24gZ3JvdXBzICovCisJeGZzX2V4dGxlbl90CXNiX3JibWJsb2NrczsJLyogbnVtYmVyIG9mIHJ0IGJpdG1hcCBibG9ja3MgKi8KKwl4ZnNfZXh0bGVuX3QJc2JfbG9nYmxvY2tzOwkvKiBudW1iZXIgb2YgbG9nIGJsb2NrcyAqLworCXVpbnQxNl90CXNiX3ZlcnNpb25udW07CS8qIGhlYWRlciB2ZXJzaW9uID09IFhGU19TQl9WRVJTSU9OICovCisJdWludDE2X3QJc2Jfc2VjdHNpemU7CS8qIHZvbHVtZSBzZWN0b3Igc2l6ZSwgYnl0ZXMgKi8KKwl1aW50MTZfdAlzYl9pbm9kZXNpemU7CS8qIGlub2RlIHNpemUsIGJ5dGVzICovCisJdWludDE2X3QJc2JfaW5vcGJsb2NrOwkvKiBpbm9kZXMgcGVyIGJsb2NrICovCisJY2hhcgkJc2JfZm5hbWVbMTJdOwkvKiBmaWxlIHN5c3RlbSBuYW1lICovCisJdWludDhfdAkJc2JfYmxvY2tsb2c7CS8qIGxvZzIgb2Ygc2JfYmxvY2tzaXplICovCisJdWludDhfdAkJc2Jfc2VjdGxvZzsJLyogbG9nMiBvZiBzYl9zZWN0c2l6ZSAqLworCXVpbnQ4X3QJCXNiX2lub2RlbG9nOwkvKiBsb2cyIG9mIHNiX2lub2Rlc2l6ZSAqLworCXVpbnQ4X3QJCXNiX2lub3BibG9nOwkvKiBsb2cyIG9mIHNiX2lub3BibG9jayAqLworCXVpbnQ4X3QJCXNiX2FnYmxrbG9nOwkvKiBsb2cyIG9mIHNiX2FnYmxvY2tzIChyb3VuZGVkIHVwKSAqLworCXVpbnQ4X3QJCXNiX3JleHRzbG9nOwkvKiBsb2cyIG9mIHNiX3JleHRlbnRzICovCisJdWludDhfdAkJc2JfaW5wcm9ncmVzczsJLyogbWtmcyBpcyBpbiBwcm9ncmVzcywgZG9uJ3QgbW91bnQgKi8KKwl1aW50OF90CQlzYl9pbWF4X3BjdDsJLyogbWF4ICUgb2YgZnMgZm9yIGlub2RlIHNwYWNlICovCisJCQkJCS8qIHN0YXRpc3RpY3MgKi8KKwkvKgorCSAqIFRoZXNlIGZpZWxkcyBtdXN0IHJlbWFpbiBjb250aWd1b3VzLiAgSWYgeW91IHJlYWxseQorCSAqIHdhbnQgdG8gY2hhbmdlIHRoZWlyIGxheW91dCwgbWFrZSBzdXJlIHlvdSBmaXggdGhlCisJICogY29kZSBpbiB4ZnNfdHJhbnNfYXBwbHlfc2JfZGVsdGFzKCkuCisJICovCisJdWludDY0X3QJc2JfaWNvdW50OwkvKiBhbGxvY2F0ZWQgaW5vZGVzICovCisJdWludDY0X3QJc2JfaWZyZWU7CS8qIGZyZWUgaW5vZGVzICovCisJdWludDY0X3QJc2JfZmRibG9ja3M7CS8qIGZyZWUgZGF0YSBibG9ja3MgKi8KKwl1aW50NjRfdAlzYl9mcmV4dGVudHM7CS8qIGZyZWUgcmVhbHRpbWUgZXh0ZW50cyAqLworCS8qCisJICogRW5kIGNvbnRpZ3VvdXMgZmllbGRzLgorCSAqLworCXhmc19pbm9fdAlzYl91cXVvdGlubzsJLyogdXNlciBxdW90YSBpbm9kZSAqLworCXhmc19pbm9fdAlzYl9ncXVvdGlubzsJLyogZ3JvdXAgcXVvdGEgaW5vZGUgKi8KKwl1aW50MTZfdAlzYl9xZmxhZ3M7CS8qIHF1b3RhIGZsYWdzICovCisJdWludDhfdAkJc2JfZmxhZ3M7CS8qIG1pc2MuIGZsYWdzICovCisJdWludDhfdAkJc2Jfc2hhcmVkX3ZuOwkvKiBzaGFyZWQgdmVyc2lvbiBudW1iZXIgKi8KKwl4ZnNfZXh0bGVuX3QJc2JfaW5vYWxpZ25tdDsJLyogaW5vZGUgY2h1bmsgYWxpZ25tZW50LCBmc2Jsb2NrcyAqLworCXVpbnQzMl90CXNiX3VuaXQ7CS8qIHN0cmlwZSBvciByYWlkIHVuaXQgKi8KKwl1aW50MzJfdAlzYl93aWR0aDsJLyogc3RyaXBlIG9yIHJhaWQgd2lkdGggKi8JCisJdWludDhfdAkJc2JfZGlyYmxrbG9nOwkvKiBsb2cyIG9mIGRpciBibG9jayBzaXplIChmc2JzKSAqLworICAgICAgICB1aW50OF90CQlzYl9kdW1teVs3XTsgICAgLyogcGFkZGluZyAqLworfSB4ZnNfc2JfdDsKKworLyoKKyAqIFNlcXVlbmNlIG51bWJlciB2YWx1ZXMgZm9yIHRoZSBmaWVsZHMuCisgKi8KK3R5cGVkZWYgZW51bSB7CisJWEZTX1NCU19NQUdJQ05VTSwgWEZTX1NCU19CTE9DS1NJWkUsIFhGU19TQlNfREJMT0NLUywgWEZTX1NCU19SQkxPQ0tTLAorCVhGU19TQlNfUkVYVEVOVFMsIFhGU19TQlNfVVVJRCwgWEZTX1NCU19MT0dTVEFSVCwgWEZTX1NCU19ST09USU5PLAorCVhGU19TQlNfUkJNSU5PLCBYRlNfU0JTX1JTVU1JTk8sIFhGU19TQlNfUkVYVFNJWkUsIFhGU19TQlNfQUdCTE9DS1MsCisJWEZTX1NCU19BR0NPVU5ULCBYRlNfU0JTX1JCTUJMT0NLUywgWEZTX1NCU19MT0dCTE9DS1MsCisJWEZTX1NCU19WRVJTSU9OTlVNLCBYRlNfU0JTX1NFQ1RTSVpFLCBYRlNfU0JTX0lOT0RFU0laRSwKKwlYRlNfU0JTX0lOT1BCTE9DSywgWEZTX1NCU19GTkFNRSwgWEZTX1NCU19CTE9DS0xPRywKKwlYRlNfU0JTX1NFQ1RMT0csIFhGU19TQlNfSU5PREVMT0csIFhGU19TQlNfSU5PUEJMT0csIFhGU19TQlNfQUdCTEtMT0csCisJWEZTX1NCU19SRVhUU0xPRywgWEZTX1NCU19JTlBST0dSRVNTLCBYRlNfU0JTX0lNQVhfUENULCBYRlNfU0JTX0lDT1VOVCwKKwlYRlNfU0JTX0lGUkVFLCBYRlNfU0JTX0ZEQkxPQ0tTLCBYRlNfU0JTX0ZSRVhURU5UUywgWEZTX1NCU19VUVVPVElOTywKKwlYRlNfU0JTX0dRVU9USU5PLCBYRlNfU0JTX1FGTEFHUywgWEZTX1NCU19GTEFHUywgWEZTX1NCU19TSEFSRURfVk4sCisJWEZTX1NCU19JTk9BTElHTk1ULCBYRlNfU0JTX1VOSVQsIFhGU19TQlNfV0lEVEgsIFhGU19TQlNfRElSQkxLTE9HLAorICAgICAgICBYRlNfU0JTX0RVTU1ZLAorCVhGU19TQlNfRklFTERDT1VOVAorfSB4ZnNfc2JfZmllbGRfdDsKKworLyoKKyAqIE1hc2sgdmFsdWVzLCBkZWZpbmVkIGJhc2VkIG9uIHRoZSB4ZnNfc2JfZmllbGRfdCB2YWx1ZXMuCisgKiBPbmx5IGRlZmluZSB0aGUgb25lcyB3ZSdyZSB1c2luZy4KKyAqLworI2RlZmluZQlYRlNfU0JfTVZBTCh4KQkJKDFMTCA8PCBYRlNfU0JTXyAjIyB4KQorI2RlZmluZQlYRlNfU0JfVVVJRAkJWEZTX1NCX01WQUwoVVVJRCkKKyNkZWZpbmUJWEZTX1NCX0ZOQU1FCQlYRlNfU0JfTVZBTChGTkFNRSkKKyNkZWZpbmUJWEZTX1NCX1JPT1RJTk8JCVhGU19TQl9NVkFMKFJPT1RJTk8pCisjZGVmaW5lCVhGU19TQl9SQk1JTk8JCVhGU19TQl9NVkFMKFJCTUlOTykKKyNkZWZpbmUJWEZTX1NCX1JTVU1JTk8JCVhGU19TQl9NVkFMKFJTVU1JTk8pCisjZGVmaW5lCVhGU19TQl9WRVJTSU9OTlVNCVhGU19TQl9NVkFMKFZFUlNJT05OVU0pCisjZGVmaW5lIFhGU19TQl9VUVVPVElOTwkJWEZTX1NCX01WQUwoVVFVT1RJTk8pCisjZGVmaW5lIFhGU19TQl9HUVVPVElOTwkJWEZTX1NCX01WQUwoR1FVT1RJTk8pCisjZGVmaW5lIFhGU19TQl9RRkxBR1MJCVhGU19TQl9NVkFMKFFGTEFHUykKKyNkZWZpbmUgWEZTX1NCX1NIQVJFRF9WTglYRlNfU0JfTVZBTChTSEFSRURfVk4pCisjZGVmaW5lIFhGU19TQl9VTklUCQlYRlNfU0JfTVZBTChVTklUKQorI2RlZmluZSBYRlNfU0JfV0lEVEgJCVhGU19TQl9NVkFMKFdJRFRIKQorI2RlZmluZQlYRlNfU0JfTlVNX0JJVFMJCSgoaW50KVhGU19TQlNfRklFTERDT1VOVCkKKyNkZWZpbmUJWEZTX1NCX0FMTF9CSVRTCQkoKDFMTCA8PCBYRlNfU0JfTlVNX0JJVFMpIC0gMSkKKyNkZWZpbmUJWEZTX1NCX01PRF9CSVRTCQlcCisJKFhGU19TQl9VVUlEIHwgWEZTX1NCX1JPT1RJTk8gfCBYRlNfU0JfUkJNSU5PIHwgWEZTX1NCX1JTVU1JTk8gfCBcCisJIFhGU19TQl9WRVJTSU9OTlVNIHwgWEZTX1NCX1VRVU9USU5PIHwgWEZTX1NCX0dRVU9USU5PIHwgXAorCSBYRlNfU0JfUUZMQUdTIHwgWEZTX1NCX1NIQVJFRF9WTiB8IFhGU19TQl9VTklUIHwgWEZTX1NCX1dJRFRIKQorCisvKgorICogTWlzYy4gRmxhZ3MgLSB3YXJuaW5nIC0gdGhlc2Ugd2lsbCBiZSBjbGVhcmVkIGJ5IHhmc19yZXBhaXIgdW5sZXNzCisgKiBhIGZlYXR1cmUgYml0IGlzIHNldCB3aGVuIHRoZSBmbGFnIGlzIHVzZWQuCisgKi8KKyNkZWZpbmUgWEZTX1NCRl9OT0ZMQUdTCQkweDAwCS8qIG5vIGZsYWdzIHNldCAqLworI2RlZmluZSBYRlNfU0JGX1JFQURPTkxZCTB4MDEJLyogb25seSByZWFkLW9ubHkgbW91bnRzIGFsbG93ZWQgKi8KKworLyoKKyAqIGRlZmluZSBtYXguIHNoYXJlZCB2ZXJzaW9uIHdlIGNhbiBpbnRlcm9wZXJhdGUgd2l0aAorICovCisjZGVmaW5lIFhGU19TQl9NQVhfU0hBUkVEX1ZOCTAKKworI2lmIFhGU19XQU5UX0ZVTkNTIHx8IChYRlNfV0FOVF9TUEFDRSAmJiBYRlNTT19YRlNfU0JfVkVSU0lPTl9OVU0pCitpbnQgeGZzX3NiX3ZlcnNpb25fbnVtKHhmc19zYl90ICpzYnApOworI2RlZmluZQlYRlNfU0JfVkVSU0lPTl9OVU0oc2JwKQl4ZnNfc2JfdmVyc2lvbl9udW0oc2JwKQorI2Vsc2UKKyNkZWZpbmUJWEZTX1NCX1ZFUlNJT05fTlVNKHNicCkJKChzYnApLT5zYl92ZXJzaW9ubnVtICYgWEZTX1NCX1ZFUlNJT05fTlVNQklUUykKKyNlbmRpZgorCisjaWYgWEZTX1dBTlRfRlVOQ1MgfHwgKFhGU19XQU5UX1NQQUNFICYmIFhGU1NPX1hGU19TQl9HT09EX1ZFUlNJT04pCitpbnQgeGZzX3NiX2dvb2RfdmVyc2lvbih4ZnNfc2JfdCAqc2JwKTsKKyNkZWZpbmUJWEZTX1NCX0dPT0RfVkVSU0lPTihzYnApCXhmc19zYl9nb29kX3ZlcnNpb24oc2JwKQorI2Vsc2UKKyNkZWZpbmUJWEZTX1NCX0dPT0RfVkVSU0lPTl9JTlQoc2JwKQlcCisJKCgoKHNicCktPnNiX3ZlcnNpb25udW0gPj0gWEZTX1NCX1ZFUlNJT05fMSkgJiYgXAorCSAgKChzYnApLT5zYl92ZXJzaW9ubnVtIDw9IFhGU19TQl9WRVJTSU9OXzMpKSB8fCBcCisJICgoWEZTX1NCX1ZFUlNJT05fTlVNKHNicCkgPT0gWEZTX1NCX1ZFUlNJT05fNCkgJiYgXAorCSAgISgoc2JwKS0+c2JfdmVyc2lvbm51bSAmIH5YRlNfU0JfVkVSU0lPTl9PS1JFQUxCSVRTKQorI2lmZGVmIF9fS0VSTkVMX18KKyNkZWZpbmUJWEZTX1NCX0dPT0RfVkVSU0lPTihzYnApCVwKKwkoWEZTX1NCX0dPT0RfVkVSU0lPTl9JTlQoc2JwKSAmJiBcCisJICAoc2JwKS0+c2Jfc2hhcmVkX3ZuIDw9IFhGU19TQl9NQVhfU0hBUkVEX1ZOKSApKQorI2Vsc2UKKy8qCisgKiBleHRyYSAyIHBhcmVuJ3MgaGVyZSAoKCB0byB1bmNvbmZ1c2UgcGFyZW4tbWF0Y2hpbmcgZWRpdG9ycworICogbGlrZSB2aSBiZWNhdXNlIFhGU19TQl9HT09EX1ZFUlNJT05fSU5UIGlzIGEgcGFydGlhbCBleHByZXNzaW9uCisgKiBhbmQgdGhlIHR3byBYRlNfU0JfR09PRF9WRVJTSU9OJ3MgZWFjaCAyIG1vcmUgY2xvc2UgcGFyZW4ncyB0bworICogY29tcGxldGUgdGhlIGV4cHJlc3Npb24uCisgKi8KKyNkZWZpbmUgWEZTX1NCX0dPT0RfVkVSU0lPTihzYnApCVwKKwkoWEZTX1NCX0dPT0RfVkVSU0lPTl9JTlQoc2JwKSAmJiBcCisJICAoISgoc2JwKS0+c2JfdmVyc2lvbm51bSAmIFhGU19TQl9WRVJTSU9OX1NIQVJFREJJVCkgfHwgXAorCSAgIChzYnApLT5zYl9zaGFyZWRfdm4gPD0gWEZTX1NCX01BWF9TSEFSRURfVk4pKSApKQorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZgorCisjZGVmaW5lCVhGU19TQl9HT09EX1NBU0hfVkVSU0lPTihzYnApCVwKKwkoKCgoc2JwKS0+c2JfdmVyc2lvbm51bSA+PSBYRlNfU0JfVkVSU0lPTl8xKSAmJiBcCisJICAoKHNicCktPnNiX3ZlcnNpb25udW0gPD0gWEZTX1NCX1ZFUlNJT05fMykpIHx8IFwKKwkgKChYRlNfU0JfVkVSU0lPTl9OVU0oc2JwKSA9PSBYRlNfU0JfVkVSU0lPTl80KSAmJiBcCisJICAhKChzYnApLT5zYl92ZXJzaW9ubnVtICYgflhGU19TQl9WRVJTSU9OX09LU0FTSEJJVFMpKSkKKworI2lmIFhGU19XQU5UX0ZVTkNTIHx8IChYRlNfV0FOVF9TUEFDRSAmJiBYRlNTT19YRlNfU0JfVkVSU0lPTl9UT05FVykKK3Vuc2lnbmVkIHhmc19zYl92ZXJzaW9uX3RvbmV3KHVuc2lnbmVkIHYpOworI2RlZmluZQlYRlNfU0JfVkVSU0lPTl9UT05FVyh2KQl4ZnNfc2JfdmVyc2lvbl90b25ldyh2KQorI2Vsc2UKKyNkZWZpbmUJWEZTX1NCX1ZFUlNJT05fVE9ORVcodikJXAorCSgoKCh2KSA9PSBYRlNfU0JfVkVSU0lPTl8xKSA/IFwKKwkJMCA6IFwKKwkJKCgodikgPT0gWEZTX1NCX1ZFUlNJT05fMikgPyBcCisJCQlYRlNfU0JfVkVSU0lPTl9BVFRSQklUIDogXAorCQkJKFhGU19TQl9WRVJTSU9OX0FUVFJCSVQgfCBYRlNfU0JfVkVSU0lPTl9OTElOS0JJVCkpKSB8IFwKKwkgWEZTX1NCX1ZFUlNJT05fNCkKKyNlbmRpZgorCisjaWYgWEZTX1dBTlRfRlVOQ1MgfHwgKFhGU19XQU5UX1NQQUNFICYmIFhGU1NPX1hGU19TQl9WRVJTSU9OX1RPT0xEKQordW5zaWduZWQgeGZzX3NiX3ZlcnNpb25fdG9vbGQodW5zaWduZWQgdik7CisjZGVmaW5lCVhGU19TQl9WRVJTSU9OX1RPT0xEKHYpCXhmc19zYl92ZXJzaW9uX3Rvb2xkKHYpCisjZWxzZQorI2RlZmluZQlYRlNfU0JfVkVSU0lPTl9UT09MRCh2KQlcCisJKCgodikgJiAoWEZTX1NCX1ZFUlNJT05fUVVPVEFCSVQgfCBYRlNfU0JfVkVSU0lPTl9BTElHTkJJVCkpID8gXAorCQkwIDogXAorCQkoKCh2KSAmIFhGU19TQl9WRVJTSU9OX05MSU5LQklUKSA/IFwKKwkJCVhGU19TQl9WRVJTSU9OXzMgOiBcCisJCQkoKCh2KSAmIFhGU19TQl9WRVJTSU9OX0FUVFJCSVQpID8gIFwKKwkJCQlYRlNfU0JfVkVSU0lPTl8yIDogXAorCQkJCVhGU19TQl9WRVJTSU9OXzEpKSkKKyNlbmRpZgorCisjaWYgWEZTX1dBTlRfRlVOQ1MgfHwgKFhGU19XQU5UX1NQQUNFICYmIFhGU1NPX1hGU19TQl9WRVJTSU9OX0hBU0FUVFIpCitpbnQgeGZzX3NiX3ZlcnNpb25faGFzYXR0cih4ZnNfc2JfdCAqc2JwKTsKKyNkZWZpbmUJWEZTX1NCX1ZFUlNJT05fSEFTQVRUUihzYnApCXhmc19zYl92ZXJzaW9uX2hhc2F0dHIoc2JwKQorI2Vsc2UKKyNkZWZpbmUJWEZTX1NCX1ZFUlNJT05fSEFTQVRUUihzYnApCVwKKwkoKChzYnApLT5zYl92ZXJzaW9ubnVtID09IFhGU19TQl9WRVJTSU9OXzIpIHx8IFwKKwkgKChzYnApLT5zYl92ZXJzaW9ubnVtID09IFhGU19TQl9WRVJTSU9OXzMpIHx8IFwKKwkgKChYRlNfU0JfVkVSU0lPTl9OVU0oc2JwKSA9PSBYRlNfU0JfVkVSU0lPTl80KSAmJiBcCisJICAoKHNicCktPnNiX3ZlcnNpb25udW0gJiBYRlNfU0JfVkVSU0lPTl9BVFRSQklUKSkpCisjZW5kaWYKKworI2lmIFhGU19XQU5UX0ZVTkNTIHx8IChYRlNfV0FOVF9TUEFDRSAmJiBYRlNTT19YRlNfU0JfVkVSU0lPTl9BRERBVFRSKQordm9pZCB4ZnNfc2JfdmVyc2lvbl9hZGRhdHRyKHhmc19zYl90ICpzYnApOworI2RlZmluZQlYRlNfU0JfVkVSU0lPTl9BRERBVFRSKHNicCkJeGZzX3NiX3ZlcnNpb25fYWRkYXR0cihzYnApCisjZWxzZQorI2RlZmluZQlYRlNfU0JfVkVSU0lPTl9BRERBVFRSKHNicCkJXAorCSgoc2JwKS0+c2JfdmVyc2lvbm51bSA9IFwKKwkgKCgoc2JwKS0+c2JfdmVyc2lvbm51bSA9PSBYRlNfU0JfVkVSU0lPTl8xKSA/IFwKKwkJWEZTX1NCX1ZFUlNJT05fMiA6IFwKKwkJKChYRlNfU0JfVkVSU0lPTl9OVU0oc2JwKSA9PSBYRlNfU0JfVkVSU0lPTl80KSA/IFwKKwkJCSgoc2JwKS0+c2JfdmVyc2lvbm51bSB8IFhGU19TQl9WRVJTSU9OX0FUVFJCSVQpIDogXAorCQkJKFhGU19TQl9WRVJTSU9OXzQgfCBYRlNfU0JfVkVSU0lPTl9BVFRSQklUKSkpKQorI2VuZGlmCisKKyNpZiBYRlNfV0FOVF9GVU5DUyB8fCAoWEZTX1dBTlRfU1BBQ0UgJiYgWEZTU09fWEZTX1NCX1ZFUlNJT05fSEFTTkxJTkspCitpbnQgeGZzX3NiX3ZlcnNpb25faGFzbmxpbmsoeGZzX3NiX3QgKnNicCk7CisjZGVmaW5lCVhGU19TQl9WRVJTSU9OX0hBU05MSU5LKHNicCkJeGZzX3NiX3ZlcnNpb25faGFzbmxpbmsoc2JwKQorI2Vsc2UKKyNkZWZpbmUJWEZTX1NCX1ZFUlNJT05fSEFTTkxJTksoc2JwKQlcCisJKCgoc2JwKS0+c2JfdmVyc2lvbm51bSA9PSBYRlNfU0JfVkVSU0lPTl8zKSB8fCBcCisJICgoWEZTX1NCX1ZFUlNJT05fTlVNKHNicCkgPT0gWEZTX1NCX1ZFUlNJT05fNCkgJiYgXAorCSAgKChzYnApLT5zYl92ZXJzaW9ubnVtICYgWEZTX1NCX1ZFUlNJT05fTkxJTktCSVQpKSkKKyNlbmRpZgorCisjaWYgWEZTX1dBTlRfRlVOQ1MgfHwgKFhGU19XQU5UX1NQQUNFICYmIFhGU1NPX1hGU19TQl9WRVJTSU9OX0FERE5MSU5LKQordm9pZCB4ZnNfc2JfdmVyc2lvbl9hZGRubGluayh4ZnNfc2JfdCAqc2JwKTsKKyNkZWZpbmUJWEZTX1NCX1ZFUlNJT05fQURETkxJTksoc2JwKQl4ZnNfc2JfdmVyc2lvbl9hZGRubGluayhzYnApCisjZWxzZQorI2RlZmluZQlYRlNfU0JfVkVSU0lPTl9BREROTElOSyhzYnApCVwKKwkoKHNicCktPnNiX3ZlcnNpb25udW0gPSBcCisJICgoc2JwKS0+c2JfdmVyc2lvbm51bSA8PSBYRlNfU0JfVkVSU0lPTl8yID8gXAorCQlYRlNfU0JfVkVSU0lPTl8zIDogXAorCQkoKHNicCktPnNiX3ZlcnNpb25udW0gfCBYRlNfU0JfVkVSU0lPTl9OTElOS0JJVCkpKQorI2VuZGlmCisKKyNpZiBYRlNfV0FOVF9GVU5DUyB8fCAoWEZTX1dBTlRfU1BBQ0UgJiYgWEZTU09fWEZTX1NCX1ZFUlNJT05fSEFTUVVPVEEpCitpbnQgeGZzX3NiX3ZlcnNpb25faGFzcXVvdGEoeGZzX3NiX3QgKnNicCk7CisjZGVmaW5lCVhGU19TQl9WRVJTSU9OX0hBU1FVT1RBKHNicCkJeGZzX3NiX3ZlcnNpb25faGFzcXVvdGEoc2JwKQorI2Vsc2UKKyNkZWZpbmUJWEZTX1NCX1ZFUlNJT05fSEFTUVVPVEEoc2JwKQlcCisJKChYRlNfU0JfVkVSU0lPTl9OVU0oc2JwKSA9PSBYRlNfU0JfVkVSU0lPTl80KSAmJiBcCisJICgoc2JwKS0+c2JfdmVyc2lvbm51bSAmIFhGU19TQl9WRVJTSU9OX1FVT1RBQklUKSkKKyNlbmRpZgorCisjaWYgWEZTX1dBTlRfRlVOQ1MgfHwgKFhGU19XQU5UX1NQQUNFICYmIFhGU1NPX1hGU19TQl9WRVJTSU9OX0FERFFVT1RBKQordm9pZCB4ZnNfc2JfdmVyc2lvbl9hZGRxdW90YSh4ZnNfc2JfdCAqc2JwKTsKKyNkZWZpbmUJWEZTX1NCX1ZFUlNJT05fQUREUVVPVEEoc2JwKQl4ZnNfc2JfdmVyc2lvbl9hZGRxdW90YShzYnApCisjZWxzZQorI2RlZmluZQlYRlNfU0JfVkVSU0lPTl9BRERRVU9UQShzYnApCVwKKwkoKHNicCktPnNiX3ZlcnNpb25udW0gPSBcCisJIChYRlNfU0JfVkVSU0lPTl9OVU0oc2JwKSA9PSBYRlNfU0JfVkVSU0lPTl80ID8gXAorCQkoKHNicCktPnNiX3ZlcnNpb25udW0gfCBYRlNfU0JfVkVSU0lPTl9RVU9UQUJJVCkgOiBcCisJCShYRlNfU0JfVkVSU0lPTl9UT05FVygoc2JwKS0+c2JfdmVyc2lvbm51bSkgfCBcCisJCSBYRlNfU0JfVkVSU0lPTl9RVU9UQUJJVCkpKQorI2VuZGlmCisKKyNpZiBYRlNfV0FOVF9GVU5DUyB8fCAoWEZTX1dBTlRfU1BBQ0UgJiYgWEZTU09fWEZTX1NCX1ZFUlNJT05fSEFTQUxJR04pCitpbnQgeGZzX3NiX3ZlcnNpb25faGFzYWxpZ24oeGZzX3NiX3QgKnNicCk7CisjZGVmaW5lCVhGU19TQl9WRVJTSU9OX0hBU0FMSUdOKHNicCkJeGZzX3NiX3ZlcnNpb25faGFzYWxpZ24oc2JwKQorI2Vsc2UKKyNkZWZpbmUJWEZTX1NCX1ZFUlNJT05fSEFTQUxJR04oc2JwKQlcCisJKChYRlNfU0JfVkVSU0lPTl9OVU0oc2JwKSA9PSBYRlNfU0JfVkVSU0lPTl80KSAmJiBcCisJICgoc2JwKS0+c2JfdmVyc2lvbm51bSAmIFhGU19TQl9WRVJTSU9OX0FMSUdOQklUKSkKKyNlbmRpZgorCisjaWYgWEZTX1dBTlRfRlVOQ1MgfHwgKFhGU19XQU5UX1NQQUNFICYmIFhGU1NPX1hGU19TQl9WRVJTSU9OX1NVQkFMSUdOKQordm9pZCB4ZnNfc2JfdmVyc2lvbl9zdWJhbGlnbih4ZnNfc2JfdCAqc2JwKTsKKyNkZWZpbmUJWEZTX1NCX1ZFUlNJT05fU1VCQUxJR04oc2JwKQl4ZnNfc2JfdmVyc2lvbl9zdWJhbGlnbihzYnApCisjZWxzZQorI2RlZmluZQlYRlNfU0JfVkVSU0lPTl9TVUJBTElHTihzYnApCVwKKwkoKHNicCktPnNiX3ZlcnNpb25udW0gPSBcCisJIFhGU19TQl9WRVJTSU9OX1RPT0xEKChzYnApLT5zYl92ZXJzaW9ubnVtICYgflhGU19TQl9WRVJTSU9OX0FMSUdOQklUKSkKKyNlbmRpZgorCisjaWYgWEZTX1dBTlRfRlVOQ1MgfHwgKFhGU19XQU5UX1NQQUNFICYmIFhGU1NPX1hGU19TQl9WRVJTSU9OX0hBU0RBTElHTikKK2ludCB4ZnNfc2JfdmVyc2lvbl9oYXNkYWxpZ24oeGZzX3NiX3QgKnNicCk7CisjZGVmaW5lIFhGU19TQl9WRVJTSU9OX0hBU0RBTElHTihzYnApCXhmc19zYl92ZXJzaW9uX2hhc2RhbGlnbihzYnApCisjZWxzZQorI2RlZmluZSBYRlNfU0JfVkVSU0lPTl9IQVNEQUxJR04oc2JwKQlcCisJKChYRlNfU0JfVkVSU0lPTl9OVU0oc2JwKSA9PSBYRlNfU0JfVkVSU0lPTl80KSAmJiBcCisJICgoc2JwKS0+c2JfdmVyc2lvbm51bSAmIFhGU19TQl9WRVJTSU9OX0RBTElHTkJJVCkpCisjZW5kaWYKKworI2lmIFhGU19XQU5UX0ZVTkNTIHx8IChYRlNfV0FOVF9TUEFDRSAmJiBYRlNTT19YRlNfU0JfVkVSU0lPTl9BREREQUxJR04pCitpbnQgeGZzX3NiX3ZlcnNpb25fYWRkZGFsaWduKHhmc19zYl90ICpzYnApOworI2RlZmluZSBYRlNfU0JfVkVSU0lPTl9BREREQUxJR04oc2JwKQl4ZnNfc2JfdmVyc2lvbl9hZGRkYWxpZ24oc2JwKQorI2Vsc2UKKyNkZWZpbmUgWEZTX1NCX1ZFUlNJT05fQUREREFMSUdOKHNicCkJXAorICAgICAgICAoKHNicCktPnNiX3ZlcnNpb25udW0gPSBcCisgICAgICAgICAgICAgICAgKChzYnApLT5zYl92ZXJzaW9ubnVtIHwgWEZTX1NCX1ZFUlNJT05fREFMSUdOQklUKSkKKyNlbmRpZgorCisjaWYgWEZTX1dBTlRfRlVOQ1MgfHwgKFhGU19XQU5UX1NQQUNFICYmIFhGU1NPX1hGU19TQl9WRVJTSU9OX0hBU1NIQVJFRCkKK2ludCB4ZnNfc2JfdmVyc2lvbl9oYXNzaGFyZWQoeGZzX3NiX3QgKnNicCk7CisjZGVmaW5lIFhGU19TQl9WRVJTSU9OX0hBU1NIQVJFRChzYnApCXhmc19zYl92ZXJzaW9uX2hhc3NoYXJlZChzYnApCisjZWxzZQorI2RlZmluZSBYRlNfU0JfVkVSU0lPTl9IQVNTSEFSRUQoc2JwKQlcCisgICAgICAgICgoWEZTX1NCX1ZFUlNJT05fTlVNKHNicCkgPT0gWEZTX1NCX1ZFUlNJT05fNCkgJiYgXAorCSAoKHNicCktPnNiX3ZlcnNpb25udW0gJiBYRlNfU0JfVkVSU0lPTl9TSEFSRURCSVQpKQorI2VuZGlmCisKKyNpZiBYRlNfV0FOVF9GVU5DUyB8fCAoWEZTX1dBTlRfU1BBQ0UgJiYgWEZTU09fWEZTX1NCX1ZFUlNJT05fQUREU0hBUkVEKQoraW50IHhmc19zYl92ZXJzaW9uX2FkZHNoYXJlZCh4ZnNfc2JfdCAqc2JwKTsKKyNkZWZpbmUgWEZTX1NCX1ZFUlNJT05fQUREU0hBUkVEKHNicCkJeGZzX3NiX3ZlcnNpb25fYWRkc2hhcmVkKHNicCkKKyNlbHNlCisjZGVmaW5lIFhGU19TQl9WRVJTSU9OX0FERFNIQVJFRChzYnApCVwKKyAgICAgICAgKChzYnApLT5zYl92ZXJzaW9ubnVtID0gXAorICAgICAgICAgICAgICAgICgoc2JwKS0+c2JfdmVyc2lvbm51bSB8IFhGU19TQl9WRVJTSU9OX1NIQVJFREJJVCkpCisjZW5kaWYKKworI2lmIFhGU19XQU5UX0ZVTkNTIHx8IChYRlNfV0FOVF9TUEFDRSAmJiBYRlNTT19YRlNfU0JfVkVSU0lPTl9TVUJTSEFSRUQpCitpbnQgeGZzX3NiX3ZlcnNpb25fc3Vic2hhcmVkKHhmc19zYl90ICpzYnApOworI2RlZmluZSBYRlNfU0JfVkVSU0lPTl9TVUJTSEFSRUQoc2JwKQl4ZnNfc2JfdmVyc2lvbl9zdWJzaGFyZWQoc2JwKQorI2Vsc2UKKyNkZWZpbmUgWEZTX1NCX1ZFUlNJT05fU1VCU0hBUkVEKHNicCkJXAorICAgICAgICAoKHNicCktPnNiX3ZlcnNpb25udW0gPSBcCisgICAgICAgICAgICAgICAgKChzYnApLT5zYl92ZXJzaW9ubnVtICYgflhGU19TQl9WRVJTSU9OX1NIQVJFREJJVCkpCisjZW5kaWYKKworI2lmIFhGU19XQU5UX0ZVTkNTIHx8IChYRlNfV0FOVF9TUEFDRSAmJiBYRlNTT19YRlNfU0JfVkVSU0lPTl9IQVNESVJWMikKK2ludCB4ZnNfc2JfdmVyc2lvbl9oYXNkaXJ2Mih4ZnNfc2JfdCAqc2JwKTsKKyNkZWZpbmUgWEZTX1NCX1ZFUlNJT05fSEFTRElSVjIoc2JwKQl4ZnNfc2JfdmVyc2lvbl9oYXNkaXJ2MihzYnApCisjZWxzZQorI2RlZmluZSBYRlNfU0JfVkVSU0lPTl9IQVNESVJWMihzYnApCVwKKyAgICAgICAgKChYRlNfU0JfVkVSU0lPTl9OVU0oc2JwKSA9PSBYRlNfU0JfVkVSU0lPTl80KSAmJiBcCisJICgoc2JwKS0+c2JfdmVyc2lvbm51bSAmIFhGU19TQl9WRVJTSU9OX0RJUlYyQklUKSkKKyNlbmRpZgorCisjaWYgWEZTX1dBTlRfRlVOQ1MgfHwgKFhGU19XQU5UX1NQQUNFICYmIFhGU1NPX1hGU19TQl9WRVJTSU9OX0hBU0VYVEZMR0JJVCkKK2ludCB4ZnNfc2JfdmVyc2lvbl9oYXNleHRmbGdiaXQoeGZzX3NiX3QgKnNicCk7CisjZGVmaW5lIFhGU19TQl9WRVJTSU9OX0hBU0VYVEZMR0JJVChzYnApCXhmc19zYl92ZXJzaW9uX2hhc2V4dGZsZ2JpdChzYnApCisjZWxzZQorI2RlZmluZSBYRlNfU0JfVkVSU0lPTl9IQVNFWFRGTEdCSVQoc2JwKQlcCisgICAgICAgICgoWEZTX1NCX1ZFUlNJT05fTlVNKHNicCkgPT0gWEZTX1NCX1ZFUlNJT05fNCkgJiYgXAorCSAoKHNicCktPnNiX3ZlcnNpb25udW0gJiBYRlNfU0JfVkVSU0lPTl9FWFRGTEdCSVQpKQorI2VuZGlmCisKKyNpZiBYRlNfV0FOVF9GVU5DUyB8fCAoWEZTX1dBTlRfU1BBQ0UgJiYgWEZTU09fWEZTX1NCX1ZFUlNJT05fQURERVhURkxHQklUKQoraW50IHhmc19zYl92ZXJzaW9uX2FkZGV4dGZsZ2JpdCh4ZnNfc2JfdCAqc2JwKTsKKyNkZWZpbmUgWEZTX1NCX1ZFUlNJT05fQURERVhURkxHQklUKHNicCkJeGZzX3NiX3ZlcnNpb25fYWRkZXh0ZmxnYml0KHNicCkKKyNlbHNlCisjZGVmaW5lIFhGU19TQl9WRVJTSU9OX0FEREVYVEZMR0JJVChzYnApCVwKKyAgICAgICAgKChzYnApLT5zYl92ZXJzaW9ubnVtID0gXAorICAgICAgICAgICAgICAgICgoc2JwKS0+c2JfdmVyc2lvbm51bSB8IFhGU19TQl9WRVJTSU9OX0VYVEZMR0JJVCkpCisjZW5kaWYKKworI2lmIFhGU19XQU5UX0ZVTkNTIHx8IChYRlNfV0FOVF9TUEFDRSAmJiBYRlNTT19YRlNfU0JfVkVSU0lPTl9TVUJFWFRGTEdCSVQpCitpbnQgeGZzX3NiX3ZlcnNpb25fc3ViZXh0ZmxnYml0KHhmc19zYl90ICpzYnApOworI2RlZmluZSBYRlNfU0JfVkVSU0lPTl9TVUJFWFRGTEdCSVQoc2JwKQl4ZnNfc2JfdmVyc2lvbl9zdWJleHRmbGdiaXQoc2JwKQorI2Vsc2UKKyNkZWZpbmUgWEZTX1NCX1ZFUlNJT05fU1VCRVhURkxHQklUKHNicCkJXAorICAgICAgICAoKHNicCktPnNiX3ZlcnNpb25udW0gPSBcCisgICAgICAgICAgICAgICAgKChzYnApLT5zYl92ZXJzaW9ubnVtICYgflhGU19TQl9WRVJTSU9OX0VYVEZMR0JJVCkpCisjZW5kaWYKKworLyoKKyAqIGVuZCBvZiBzdXBlcmJsb2NrIHZlcnNpb24gbWFjcm9zCisgKi8KKworI2RlZmluZQlYRlNfU0JfREFERFIJKCh4ZnNfZGFkZHJfdCkwKQkJLyogZGFkZHIgaW4gZmlsZSBzeXN0ZW0vYWcgKi8KKyNpZiBYRlNfV0FOVF9GVU5DUyB8fCAoWEZTX1dBTlRfU1BBQ0UgJiYgWEZTU09fWEZTX1NCX0JMT0NLKQoreGZzX2FnYmxvY2tfdCB4ZnNfc2JfYmxvY2soc3RydWN0IHhmc19tb3VudCAqbXApOworI2RlZmluZQlYRlNfU0JfQkxPQ0sobXApCXhmc19zYl9ibG9jayhtcCkKKyNlbHNlCisjZGVmaW5lCVhGU19TQl9CTE9DSyhtcCkJWEZTX0hEUl9CTE9DSyhtcCwgWEZTX1NCX0RBRERSKQorI2VuZGlmCisKKyNpZiBYRlNfV0FOVF9GVU5DUyB8fCAoWEZTX1dBTlRfU1BBQ0UgJiYgWEZTU09fWEZTX0hEUl9CTE9DSykKK3hmc19hZ2Jsb2NrX3QgeGZzX2hkcl9ibG9jayhzdHJ1Y3QgeGZzX21vdW50ICptcCwgeGZzX2RhZGRyX3QgZCk7CisjZGVmaW5lCVhGU19IRFJfQkxPQ0sobXAsZCkJeGZzX2hkcl9ibG9jayhtcCxkKQorI2Vsc2UKKyNkZWZpbmUJWEZTX0hEUl9CTE9DSyhtcCxkKQkoKHhmc19hZ2Jsb2NrX3QpKFhGU19CQl9UT19GU0JUKG1wLGQpKSkKKyNlbmRpZgorI2lmIFhGU19XQU5UX0ZVTkNTIHx8IChYRlNfV0FOVF9TUEFDRSAmJiBYRlNTT19YRlNfREFERFJfVE9fRlNCKQoreGZzX2ZzYmxvY2tfdCB4ZnNfZGFkZHJfdG9fZnNiKHN0cnVjdCB4ZnNfbW91bnQgKm1wLCB4ZnNfZGFkZHJfdCBkKTsKKyNkZWZpbmUJWEZTX0RBRERSX1RPX0ZTQihtcCxkKQkJeGZzX2RhZGRyX3RvX2ZzYihtcCxkKQorI2Vsc2UKKyNkZWZpbmUJWEZTX0RBRERSX1RPX0ZTQihtcCxkKSBcCisJWEZTX0FHQl9UT19GU0IobXAsIFhGU19EQUREUl9UT19BR05PKG1wLGQpLCBYRlNfREFERFJfVE9fQUdCTk8obXAsZCkpCisjZW5kaWYKKyNpZiBYRlNfV0FOVF9GVU5DUyB8fCAoWEZTX1dBTlRfU1BBQ0UgJiYgWEZTU09fWEZTX0ZTQl9UT19EQUREUikKK3hmc19kYWRkcl90IHhmc19mc2JfdG9fZGFkZHIoc3RydWN0IHhmc19tb3VudCAqbXAsIHhmc19mc2Jsb2NrX3QgZnNibm8pOworI2RlZmluZQlYRlNfRlNCX1RPX0RBRERSKG1wLGZzYm5vKQl4ZnNfZnNiX3RvX2RhZGRyKG1wLGZzYm5vKQorI2Vsc2UKKyNkZWZpbmUJWEZTX0ZTQl9UT19EQUREUihtcCxmc2JubykgXAorCVhGU19BR0JfVE9fREFERFIobXAsIFhGU19GU0JfVE9fQUdOTyhtcCxmc2JubyksIFwKKwkJCSBYRlNfRlNCX1RPX0FHQk5PKG1wLGZzYm5vKSkKKyNlbmRpZgorCisvKgorICogRmlsZSBzeXN0ZW0gYmxvY2sgdG8gYmFzaWMgYmxvY2sgY29udmVyc2lvbnMuCisgKi8KKyNkZWZpbmUJWEZTX0ZTQl9UT19CQihtcCxmc2JubykJKChmc2JubykgPDwgKG1wKS0+bV9ibGtiYl9sb2cpCisjZGVmaW5lCVhGU19CQl9UT19GU0IobXAsYmIpCVwKKwkoKChiYikgKyAoWEZTX0ZTQl9UT19CQihtcCwxKSAtIDEpKSA+PiAobXApLT5tX2Jsa2JiX2xvZykKKyNkZWZpbmUJWEZTX0JCX1RPX0ZTQlQobXAsYmIpCSgoYmIpID4+IChtcCktPm1fYmxrYmJfbG9nKQorI2RlZmluZQlYRlNfQkJfRlNCX09GRlNFVChtcCxiYikgKChiYikgJiAoKG1wKS0+bV9ic2l6ZSAtIDEpKQorCisvKgorICogRmlsZSBzeXN0ZW0gYmxvY2sgdG8gYnl0ZSBjb252ZXJzaW9ucy4KKyAqLworI2RlZmluZQlYRlNfRlNCX1RPX0IobXAsZnNibm8pCSgoeGZzX2ZzaXplX3QpKGZzYm5vKSA8PCBcCisJCQkJIChtcCktPm1fc2Iuc2JfYmxvY2tsb2cpCisjZGVmaW5lCVhGU19CX1RPX0ZTQihtcCxiKQlcCisJKCgoKHVpbnQ2NF90KShiKSkgKyAobXApLT5tX2Jsb2NrbWFzaykgPj4gKG1wKS0+bV9zYi5zYl9ibG9ja2xvZykKKyNkZWZpbmUJWEZTX0JfVE9fRlNCVChtcCxiKQkoKCh1aW50NjRfdCkoYikpID4+IChtcCktPm1fc2Iuc2JfYmxvY2tsb2cpCisjZGVmaW5lCVhGU19CX0ZTQl9PRkZTRVQobXAsYikJKChiKSAmIChtcCktPm1fYmxvY2ttYXNrKSAgICAgCisKKyNpZiBYRlNfV0FOVF9GVU5DUyB8fCAoWEZTX1dBTlRfU1BBQ0UgJiYgWEZTU09fWEZTX0JVRl9UT19TQlApCit4ZnNfc2JfdCAqeGZzX2J1Zl90b19zYnAoc3RydWN0IHhmc19idWYgKmJwKTsKKyNkZWZpbmUJWEZTX0JVRl9UT19TQlAoYnApCXhmc19idWZfdG9fc2JwKGJwKQorI2Vsc2UKKyNkZWZpbmUJWEZTX0JVRl9UT19TQlAoYnApCSgoeGZzX3NiX3QgKilYRlNfQlVGX1BUUihicCkpCisjZW5kaWYKKworI2VuZGlmCS8qIF9fWEZTX1NCX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy94ZnMveGZzX3R5cGVzLmggYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2ZzL3hmcy94ZnNfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjJkZDUzCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9mcy94ZnMveGZzX3R5cGVzLmgKQEAgLTAsMCArMSwzMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAgU2lsaWNvbiBHcmFwaGljcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIAorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqIAorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd291bGQgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqIAorICogRnVydGhlciwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCB3aXRob3V0IGFueSB3YXJyYW50eSB0aGF0IGl0IGlzCisgKiBmcmVlIG9mIHRoZSByaWdodGZ1bCBjbGFpbSBvZiBhbnkgdGhpcmQgcGVyc29uIHJlZ2FyZGluZyBpbmZyaW5nZW1lbnQKKyAqIG9yIHRoZSBsaWtlLiAgQW55IGxpY2Vuc2UgcHJvdmlkZWQgaGVyZWluLCB3aGV0aGVyIGltcGxpZWQgb3IKKyAqIG90aGVyd2lzZSwgYXBwbGllcyBvbmx5IHRvIHRoaXMgc29mdHdhcmUgZmlsZS4gIFBhdGVudCBsaWNlbnNlcywgaWYKKyAqIGFueSwgcHJvdmlkZWQgaGVyZWluIGRvIG5vdCBhcHBseSB0byBjb21iaW5hdGlvbnMgb2YgdGhpcyBwcm9ncmFtIHdpdGgKKyAqIG90aGVyIHNvZnR3YXJlLCBvciBhbnkgb3RoZXIgcHJvZHVjdCB3aGF0c29ldmVyLgorICogCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqIAorICogQ29udGFjdCBpbmZvcm1hdGlvbjogU2lsaWNvbiBHcmFwaGljcywgSW5jLiwgMTYwMCBBbXBoaXRoZWF0cmUgUGt3eSwKKyAqIE1vdW50YWluIFZpZXcsIENBICA5NDA0Mywgb3I6CisgKiAKKyAqIGh0dHA6Ly93d3cuc2dpLmNvbSAKKyAqIAorICogRm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHRoaXMgbm90aWNlLCBzZWU6IAorICogCisgKiBodHRwOi8vb3NzLnNnaS5jb20vcHJvamVjdHMvR2VuSW5mby9TR0lHUExOb3RpY2VFeHBsYW4vCisgKi8KKyNpZm5kZWYgX19YRlNfVFlQRVNfSF9fCisjZGVmaW5lCV9fWEZTX1RZUEVTX0hfXworCisvKgorICogU29tZSB0eXBlcyBhcmUgY29uZGl0aW9uYWwgYmFzZWQgb24gdGhlIHNlbGVjdGVkIGNvbmZpZ3VyYXRpb24uCisgKiBTZXQgWEZTX0JJR19GSUxFUz0xIG9yIDAgYW5kIFhGU19CSUdfRklMRVNZU1RFTVM9MSBvciAwIGRlcGVuZGluZworICogb24gdGhlIGRlc2lyZWQgY29uZmlndXJhdGlvbi4KKyAqIFhGU19CSUdfRklMRVMgbmVlZHMgcGdub190IHRvIGJlIDY0IGJpdHMgKDY0LWJpdCBrZXJuZWxzKS4KKyAqIFhGU19CSUdfRklMRVNZU1RFTVMgbmVlZHMgZGFkZHJfdCB0byBiZSA2NCBiaXRzIChOMzIgYW5kIDY0LWJpdCBrZXJuZWxzKS4KKyAqCisgKiBFeHBlY3QgdGhlc2UgdG8gYmUgc2V0IGZyb20ga2xvY2FsZGVmcywgb3IgZnJvbSB0aGUgbWFjaGluZS10eXBlCisgKiBkZWZzIGZpbGVzIGZvciB0aGUgbm9ybWFsIGNhc2UuCisgKi8KKworI2RlZmluZQlYRlNfQklHX0ZJTEVTCQkxCisjZGVmaW5lCVhGU19CSUdfRklMRVNZU1RFTVMJMQorCit0eXBlZGVmIHVpbnQzMl90CXhmc19hZ2Jsb2NrX3Q7CS8qIGJsb2Nrbm8gaW4gYWxsb2MuIGdyb3VwICovCit0eXBlZGVmCXVpbnQzMl90CXhmc19leHRsZW5fdDsJLyogZXh0ZW50IGxlbmd0aCBpbiBibG9ja3MgKi8KK3R5cGVkZWYJdWludDMyX3QJeGZzX2FnbnVtYmVyX3Q7CS8qIGFsbG9jYXRpb24gZ3JvdXAgbnVtYmVyICovCit0eXBlZGVmIGludDMyX3QJeGZzX2V4dG51bV90OwkvKiAjIG9mIGV4dGVudHMgaW4gYSBmaWxlICovCit0eXBlZGVmIGludDE2X3QJeGZzX2FleHRudW1fdDsJLyogIyBleHRlbnRzIGluIGFuIGF0dHJpYnV0ZSBmb3JrICovCit0eXBlZGVmCWludDY0X3QJeGZzX2ZzaXplX3Q7CS8qIGJ5dGVzIGluIGEgZmlsZSAqLwordHlwZWRlZiB1aW50NjRfdAl4ZnNfdWZzaXplX3Q7CS8qIHVuc2lnbmVkIGJ5dGVzIGluIGEgZmlsZSAqLworCit0eXBlZGVmCWludDMyX3QJeGZzX3N1bWluZm9fdDsJLyogdHlwZSBvZiBiaXRtYXAgc3VtbWFyeSBpbmZvICovCit0eXBlZGVmCWludDMyX3QJeGZzX3J0d29yZF90OwkvKiB3b3JkIHR5cGUgZm9yIGJpdG1hcCBtYW5pcHVsYXRpb25zICovCisKK3R5cGVkZWYJaW50NjRfdAl4ZnNfbHNuX3Q7CS8qIGxvZyBzZXF1ZW5jZSBudW1iZXIgKi8KK3R5cGVkZWYJaW50MzJfdAl4ZnNfdGlkX3Q7CS8qIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIgKi8KKwordHlwZWRlZgl1aW50MzJfdAl4ZnNfZGFibGtfdDsJLyogZGlyL2F0dHIgYmxvY2sgbnVtYmVyIChpbiBmaWxlKSAqLwordHlwZWRlZgl1aW50MzJfdAl4ZnNfZGFoYXNoX3Q7CS8qIGRpci9hdHRyIGhhc2ggdmFsdWUgKi8KKwordHlwZWRlZiB1aW50MTZfdAl4ZnNfcHJpZF90OwkvKiBwcmlkX3QgdHJ1bmNhdGVkIHRvIDE2Yml0cyBpbiBYRlMgKi8KKworLyoKKyAqIFRoZXNlIHR5cGVzIGFyZSA2NCBiaXRzIG9uIGRpc2sgYnV0IGFyZSBlaXRoZXIgMzIgb3IgNjQgYml0cyBpbiBtZW1vcnkuCisgKiBEaXNrIGJhc2VkIHR5cGVzOgorICovCit0eXBlZGVmIHVpbnQ2NF90CXhmc19kZnNibm9fdDsJLyogYmxvY2tubyBpbiBmaWxlc3lzdGVtIChhZ25vfGFnYm5vKSAqLwordHlwZWRlZiB1aW50NjRfdAl4ZnNfZHJmc2Jub190OwkvKiBibG9ja25vIGluIGZpbGVzeXN0ZW0gKHJhdykgKi8KK3R5cGVkZWYJdWludDY0X3QJeGZzX2RydGJub190OwkvKiBleHRlbnQgKGJsb2NrKSBpbiByZWFsdGltZSBhcmVhICovCit0eXBlZGVmCXVpbnQ2NF90CXhmc19kZmlsb2ZmX3Q7CS8qIGJsb2NrIG51bWJlciBpbiBhIGZpbGUgKi8KK3R5cGVkZWYJdWludDY0X3QJeGZzX2RmaWxibGtzX3Q7CS8qIG51bWJlciBvZiBibG9ja3MgaW4gYSBmaWxlICovCisKKy8qCisgKiBNZW1vcnkgYmFzZWQgdHlwZXMgYXJlIGNvbmRpdGlvbmFsLgorICovCisjaWYgWEZTX0JJR19GSUxFU1lTVEVNUwordHlwZWRlZgl1aW50NjRfdAl4ZnNfZnNibG9ja190OwkvKiBibG9ja25vIGluIGZpbGVzeXN0ZW0gKGFnbm98YWdibm8pICovCit0eXBlZGVmIHVpbnQ2NF90CXhmc19yZnNibG9ja190OwkvKiBibG9ja25vIGluIGZpbGVzeXN0ZW0gKHJhdykgKi8KK3R5cGVkZWYgdWludDY0X3QJeGZzX3J0YmxvY2tfdDsJLyogZXh0ZW50IChibG9jaykgaW4gcmVhbHRpbWUgYXJlYSAqLwordHlwZWRlZglpbnQ2NF90CXhmc19zcnRibG9ja190OwkvKiBzaWduZWQgdmVyc2lvbiBvZiB4ZnNfcnRibG9ja190ICovCisjZWxzZQordHlwZWRlZgl1aW50MzJfdAl4ZnNfZnNibG9ja190OwkvKiBibG9ja25vIGluIGZpbGVzeXN0ZW0gKGFnbm98YWdibm8pICovCit0eXBlZGVmIHVpbnQzMl90CXhmc19yZnNibG9ja190OwkvKiBibG9ja25vIGluIGZpbGVzeXN0ZW0gKHJhdykgKi8KK3R5cGVkZWYgdWludDMyX3QJeGZzX3J0YmxvY2tfdDsJLyogZXh0ZW50IChibG9jaykgaW4gcmVhbHRpbWUgYXJlYSAqLwordHlwZWRlZglpbnQzMl90CXhmc19zcnRibG9ja190OwkvKiBzaWduZWQgdmVyc2lvbiBvZiB4ZnNfcnRibG9ja190ICovCisjZW5kaWYKKyNpZiBYRlNfQklHX0ZJTEVTCit0eXBlZGVmCXVpbnQ2NF90CXhmc19maWxlb2ZmX3Q7CS8qIGJsb2NrIG51bWJlciBpbiBhIGZpbGUgKi8KK3R5cGVkZWYJaW50NjRfdAl4ZnNfc2ZpbG9mZl90OwkvKiBzaWduZWQgYmxvY2sgbnVtYmVyIGluIGEgZmlsZSAqLwordHlwZWRlZgl1aW50NjRfdAl4ZnNfZmlsYmxrc190OwkvKiBudW1iZXIgb2YgYmxvY2tzIGluIGEgZmlsZSAqLworI2Vsc2UKK3R5cGVkZWYJdWludDMyX3QJeGZzX2ZpbGVvZmZfdDsJLyogYmxvY2sgbnVtYmVyIGluIGEgZmlsZSAqLwordHlwZWRlZglpbnQzMl90CXhmc19zZmlsb2ZmX3Q7CS8qIHNpZ25lZCBibG9jayBudW1iZXIgaW4gYSBmaWxlICovCit0eXBlZGVmCXVpbnQzMl90CXhmc19maWxibGtzX3Q7CS8qIG51bWJlciBvZiBibG9ja3MgaW4gYSBmaWxlICovCisjZW5kaWYKKwordHlwZWRlZiB1aW50OF90ICAgICAgIHhmc19hcmNoX3Q7ICAgICAvKiBhcmNoaXRlY3V0cmUgb2YgYW4geGZzIGZzICovCisKKy8qCisgKiBOdWxsIHZhbHVlcyBmb3IgdGhlIHR5cGVzLgorICovCisjZGVmaW5lCU5VTExERlNCTk8JKCh4ZnNfZGZzYm5vX3QpLTEpCisjZGVmaW5lCU5VTExEUkZTQk5PCSgoeGZzX2RyZnNibm9fdCktMSkKKyNkZWZpbmUJTlVMTERSVEJOTwkoKHhmc19kcnRibm9fdCktMSkKKyNkZWZpbmUJTlVMTERGSUxPRkYJKCh4ZnNfZGZpbG9mZl90KS0xKQorCisjZGVmaW5lCU5VTExGU0JMT0NLCSgoeGZzX2ZzYmxvY2tfdCktMSkKKyNkZWZpbmUJTlVMTFJGU0JMT0NLCSgoeGZzX3Jmc2Jsb2NrX3QpLTEpCisjZGVmaW5lCU5VTExSVEJMT0NLCSgoeGZzX3J0YmxvY2tfdCktMSkKKyNkZWZpbmUJTlVMTEZJTEVPRkYJKCh4ZnNfZmlsZW9mZl90KS0xKQorCisjZGVmaW5lCU5VTExBR0JMT0NLCSgoeGZzX2FnYmxvY2tfdCktMSkKKyNkZWZpbmUJTlVMTEFHTlVNQkVSCSgoeGZzX2FnbnVtYmVyX3QpLTEpCisjZGVmaW5lCU5VTExFWFROVU0JKCh4ZnNfZXh0bnVtX3QpLTEpCisKKyNkZWZpbmUgTlVMTENPTU1JVExTTgkoKHhmc19sc25fdCktMSkKKworLyoKKyAqIE1heCB2YWx1ZXMgZm9yIGV4dGxlbiwgZXh0bnVtLCBhZXh0bnVtLgorICovCisjZGVmaW5lCU1BWEVYVExFTgkoKHhmc19leHRsZW5fdCkweDAwMWZmZmZmKQkvKiAyMSBiaXRzICovCisjZGVmaW5lCU1BWEVYVE5VTQkoKHhmc19leHRudW1fdCkweDdmZmZmZmZmKQkvKiBzaWduZWQgaW50ICovCisjZGVmaW5lCU1BWEFFWFROVU0JKCh4ZnNfYWV4dG51bV90KTB4N2ZmZikJCS8qIHNpZ25lZCBzaG9ydCAqLworCisvKgorICogTUFYTkFNRUxFTiBpcyB0aGUgbGVuZ3RoIChpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nIG51bGwpIG9mCisgKiB0aGUgbG9uZ2VzdCBwZXJtaXNzaWJsZSBmaWxlIChjb21wb25lbnQpIG5hbWUuCisgKi8KKyNkZWZpbmUgTUFYTkFNRUxFTgkyNTYKKwordHlwZWRlZiBlbnVtIHsKKwlYRlNfTE9PS1VQX0VRaSwgWEZTX0xPT0tVUF9MRWksIFhGU19MT09LVVBfR0VpCit9IHhmc19sb29rdXBfdDsKKwordHlwZWRlZiBlbnVtIHsKKwlYRlNfQlROVU1fQk5PaSwgWEZTX0JUTlVNX0NOVGksIFhGU19CVE5VTV9CTUFQaSwgWEZTX0JUTlVNX0lOT2ksCisJWEZTX0JUTlVNX01BWAorfSB4ZnNfYnRudW1fdDsKKworCisjaWZkZWYgQ09ORklHX1BST0NfRlMKKy8qCisgKiBYRlMgZ2xvYmFsIHN0YXRpc3RpY3MKKyAqLworc3RydWN0IHhmc3N0YXRzIHsKKyMgZGVmaW5lIFhGU1NUQVRfRU5EX0VYVEVOVF9BTExPQwk0CisJdWludDMyX3QJCXhzX2FsbG9jeDsKKwl1aW50MzJfdAkJeHNfYWxsb2NiOworCXVpbnQzMl90CQl4c19mcmVleDsKKwl1aW50MzJfdAkJeHNfZnJlZWI7CisjIGRlZmluZSBYRlNTVEFUX0VORF9BTExPQ19CVFJFRSAgIAkoWEZTU1RBVF9FTkRfRVhURU5UX0FMTE9DKzQpCisJdWludDMyX3QJCXhzX2FidF9sb29rdXA7CisJdWludDMyX3QJCXhzX2FidF9jb21wYXJlOworCXVpbnQzMl90CQl4c19hYnRfaW5zcmVjOworCXVpbnQzMl90CQl4c19hYnRfZGVscmVjOworIyBkZWZpbmUgWEZTU1RBVF9FTkRfQkxPQ0tfTUFQUElORwkoWEZTU1RBVF9FTkRfQUxMT0NfQlRSRUUrNykKKwl1aW50MzJfdAkJeHNfYmxrX21hcHI7CisJdWludDMyX3QJCXhzX2Jsa19tYXB3OworCXVpbnQzMl90CQl4c19ibGtfdW5tYXA7CisJdWludDMyX3QJCXhzX2FkZF9leGxpc3Q7CisJdWludDMyX3QJCXhzX2RlbF9leGxpc3Q7CisJdWludDMyX3QJCXhzX2xvb2tfZXhsaXN0OworCXVpbnQzMl90CQl4c19jbXBfZXhsaXN0OworIyBkZWZpbmUgWEZTU1RBVF9FTkRfQkxPQ0tfTUFQX0JUUkVFCShYRlNTVEFUX0VORF9CTE9DS19NQVBQSU5HKzQpCisJdWludDMyX3QJCXhzX2JtYnRfbG9va3VwOworCXVpbnQzMl90CQl4c19ibWJ0X2NvbXBhcmU7CisJdWludDMyX3QJCXhzX2JtYnRfaW5zcmVjOworCXVpbnQzMl90CQl4c19ibWJ0X2RlbHJlYzsKKyMgZGVmaW5lIFhGU1NUQVRfRU5EX0RJUkVDVE9SWV9PUFMJKFhGU1NUQVRfRU5EX0JMT0NLX01BUF9CVFJFRSs0KQorCXVpbnQzMl90CQl4c19kaXJfbG9va3VwOworCXVpbnQzMl90CQl4c19kaXJfY3JlYXRlOworCXVpbnQzMl90CQl4c19kaXJfcmVtb3ZlOworCXVpbnQzMl90CQl4c19kaXJfZ2V0ZGVudHM7CisjIGRlZmluZSBYRlNTVEFUX0VORF9UUkFOU0FDVElPTlMJKFhGU1NUQVRfRU5EX0RJUkVDVE9SWV9PUFMrMykKKwl1aW50MzJfdAkJeHNfdHJhbnNfc3luYzsKKwl1aW50MzJfdAkJeHNfdHJhbnNfYXN5bmM7CisJdWludDMyX3QJCXhzX3RyYW5zX2VtcHR5OworIyBkZWZpbmUgWEZTU1RBVF9FTkRfSU5PREVfT1BTCQkoWEZTU1RBVF9FTkRfVFJBTlNBQ1RJT05TKzcpCisJdWludDMyX3QJCXhzX2lnX2F0dGVtcHRzOworCXVpbnQzMl90CQl4c19pZ19mb3VuZDsKKwl1aW50MzJfdAkJeHNfaWdfZnJlY3ljbGU7CisJdWludDMyX3QJCXhzX2lnX21pc3NlZDsKKwl1aW50MzJfdAkJeHNfaWdfZHVwOworCXVpbnQzMl90CQl4c19pZ19yZWNsYWltczsKKwl1aW50MzJfdAkJeHNfaWdfYXR0cmNoZzsKKyMgZGVmaW5lIFhGU1NUQVRfRU5EX0xPR19PUFMJCShYRlNTVEFUX0VORF9JTk9ERV9PUFMrNSkKKwl1aW50MzJfdAkJeHNfbG9nX3dyaXRlczsKKwl1aW50MzJfdAkJeHNfbG9nX2Jsb2NrczsKKwl1aW50MzJfdAkJeHNfbG9nX25vaWNsb2dzOworCXVpbnQzMl90CQl4c19sb2dfZm9yY2U7CisJdWludDMyX3QJCXhzX2xvZ19mb3JjZV9zbGVlcDsKKyMgZGVmaW5lIFhGU1NUQVRfRU5EX1RBSUxfUFVTSElORwkoWEZTU1RBVF9FTkRfTE9HX09QUysxMCkKKwl1aW50MzJfdAkJeHNfdHJ5X2xvZ3NwYWNlOworCXVpbnQzMl90CQl4c19zbGVlcF9sb2dzcGFjZTsKKwl1aW50MzJfdAkJeHNfcHVzaF9haWw7CisJdWludDMyX3QJCXhzX3B1c2hfYWlsX3N1Y2Nlc3M7CisJdWludDMyX3QJCXhzX3B1c2hfYWlsX3B1c2hidWY7CisJdWludDMyX3QJCXhzX3B1c2hfYWlsX3Bpbm5lZDsKKwl1aW50MzJfdAkJeHNfcHVzaF9haWxfbG9ja2VkOworCXVpbnQzMl90CQl4c19wdXNoX2FpbF9mbHVzaGluZzsKKwl1aW50MzJfdAkJeHNfcHVzaF9haWxfcmVzdGFydHM7CisJdWludDMyX3QJCXhzX3B1c2hfYWlsX2ZsdXNoOworIyBkZWZpbmUgWEZTU1RBVF9FTkRfV1JJVEVfQ09OVkVSVAkoWEZTU1RBVF9FTkRfVEFJTF9QVVNISU5HKzIpCisJdWludDMyX3QJCXhzX3hzdHJhdF9xdWljazsKKwl1aW50MzJfdAkJeHNfeHN0cmF0X3NwbGl0OworIyBkZWZpbmUgWEZTU1RBVF9FTkRfUkVBRF9XUklURV9PUFMJKFhGU1NUQVRfRU5EX1dSSVRFX0NPTlZFUlQrMikKKwl1aW50MzJfdAkJeHNfd3JpdGVfY2FsbHM7CisJdWludDMyX3QJCXhzX3JlYWRfY2FsbHM7CisjIGRlZmluZSBYRlNTVEFUX0VORF9BVFRSSUJVVEVfT1BTCShYRlNTVEFUX0VORF9SRUFEX1dSSVRFX09QUys0KQorCXVpbnQzMl90CQl4c19hdHRyX2dldDsKKwl1aW50MzJfdAkJeHNfYXR0cl9zZXQ7CisJdWludDMyX3QJCXhzX2F0dHJfcmVtb3ZlOworCXVpbnQzMl90CQl4c19hdHRyX2xpc3Q7CisjIGRlZmluZSBYRlNTVEFUX0VORF9RVU9UQV9PUFMJCShYRlNTVEFUX0VORF9BVFRSSUJVVEVfT1BTKzgpCisJdWludDMyX3QJCXhzX3FtX2RxcmVjbGFpbXM7CisJdWludDMyX3QJCXhzX3FtX2RxcmVjbGFpbV9taXNzZXM7CisJdWludDMyX3QJCXhzX3FtX2RxdW90X2R1cHM7CisJdWludDMyX3QJCXhzX3FtX2RxY2FjaGVtaXNzZXM7CisJdWludDMyX3QJCXhzX3FtX2RxY2FjaGVoaXRzOworCXVpbnQzMl90CQl4c19xbV9kcXdhbnRzOworCXVpbnQzMl90CQl4c19xbV9kcXNoYWtlX3JlY2xhaW1zOworCXVpbnQzMl90CQl4c19xbV9kcWluYWN0X3JlY2xhaW1zOworIyBkZWZpbmUgWEZTU1RBVF9FTkRfSU5PREVfQ0xVU1RFUgkoWEZTU1RBVF9FTkRfUVVPVEFfT1BTKzMpCisJdWludDMyX3QJCXhzX2lmbHVzaF9jb3VudDsKKwl1aW50MzJfdAkJeHNfaWNsdXN0ZXJfZmx1c2hjbnQ7CisJdWludDMyX3QJCXhzX2ljbHVzdGVyX2ZsdXNoaW5vZGU7CisjIGRlZmluZSBYRlNTVEFUX0VORF9WTk9ERV9PUFMJCShYRlNTVEFUX0VORF9JTk9ERV9DTFVTVEVSKzgpCisJdWludDMyX3QJCXZuX2FjdGl2ZTsJLyogIyB2bm9kZXMgbm90IG9uIGZyZWUgbGlzdHMgKi8KKwl1aW50MzJfdAkJdm5fYWxsb2M7CS8qICMgdGltZXMgdm5fYWxsb2MgY2FsbGVkICovCisJdWludDMyX3QJCXZuX2dldDsJCS8qICMgdGltZXMgdm5fZ2V0IGNhbGxlZCAqLworCXVpbnQzMl90CQl2bl9ob2xkOwkvKiAjIHRpbWVzIHZuX2hvbGQgY2FsbGVkICovCisJdWludDMyX3QJCXZuX3JlbGU7CS8qICMgdGltZXMgdm5fcmVsZSBjYWxsZWQgKi8KKwl1aW50MzJfdAkJdm5fcmVjbGFpbTsJLyogIyB0aW1lcyB2bl9yZWNsYWltIGNhbGxlZCAqLworCXVpbnQzMl90CQl2bl9yZW1vdmU7CS8qICMgdGltZXMgdm5fcmVtb3ZlIGNhbGxlZCAqLworCXVpbnQzMl90CQl2bl9mcmVlOwkvKiAjIHRpbWVzIHZuX2ZyZWUgY2FsbGVkICovCisJc3RydWN0IHhmc3N0YXRzX3hwYyB7CisJCXVpbnQ2NF90CXhzX3hzdHJhdF9ieXRlczsKKwkJdWludDY0X3QJeHNfd3JpdGVfYnl0ZXM7CisJCXVpbnQ2NF90CXhzX3JlYWRfYnl0ZXM7CisJfSB4cGM7Cit9IHhmc3N0YXRzOworCisjIGRlZmluZSBYRlNfU1RBVFNfSU5DKGNvdW50KQkJKCB4ZnNzdGF0cy4jI2NvdW50ICsrICkKKyMgZGVmaW5lIFhGU19TVEFUU19ERUMoY291bnQpCQkoIHhmc3N0YXRzLiMjY291bnQgLS0gKQorIyBkZWZpbmUgWEZTX1NUQVRTX0FERChjb3VudCwgaW5jKQkoIHhmc3N0YXRzLiMjY291bnQgKz0gKGluYykgKQorIyBkZWZpbmUgWEZTX1NUQVRTNjRfSU5DKGNvdW50KQkJKCB4ZnNzdGF0cy54cGMuIyNjb3VudCArKyApCisjIGRlZmluZSBYRlNfU1RBVFM2NF9BREQoY291bnQsIGluYykJKCB4ZnNzdGF0cy54cGMuIyNjb3VudCArPSAoaW5jKSApCisjZWxzZQkvKiAhQ09ORklHX1BST0NfRlMgKi8KKyMgZGVmaW5lIFhGU19TVEFUU19JTkMoY291bnQpCisjIGRlZmluZSBYRlNfU1RBVFNfREVDKGNvdW50KQorIyBkZWZpbmUgWEZTX1NUQVRTX0FERChjb3VudCwgaW5jKQorIyBkZWZpbmUgWEZTX1NUQVRTNjRfSU5DKGNvdW50KQorIyBkZWZpbmUgWEZTX1NUQVRTNjRfQUREKGNvdW50LCBpbmMpCisjZW5kaWYJLyogIUNPTkZJR19QUk9DX0ZTICovCisKKworI2lmZGVmIF9fS0VSTkVMX18KKworLyoganVnZ2xlIElSSVggZGV2aWNlIG51bWJlcnMgLSBzdGlsbCB1c2VkIGluIG9uZGlzayBzdHJ1Y3R1cmVzICovCisKKyNkZWZpbmUgSVJJWF9ERVZfQklUU01BSk9SICAgICAgMTQKKyNkZWZpbmUgSVJJWF9ERVZfQklUU01JTk9SICAgICAgMTggCisjZGVmaW5lIElSSVhfREVWX01BWE1BSiAgICAgICAgIDB4MWZmIAorI2RlZmluZSBJUklYX0RFVl9NQVhNSU4gICAgICAgICAweDNmZmZmCisjZGVmaW5lIElSSVhfREVWX01BSk9SKGRldikgICAgICgoaW50KSgoKHVuc2lnbmVkKShkZXYpPj5JUklYX0RFVl9CSVRTTUlOT1IpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgSVJJWF9ERVZfTUFYTUFKKSkKKyNkZWZpbmUgSVJJWF9ERVZfTUlOT1IoZGV2KSAgICAgKChpbnQpKChkZXYpJklSSVhfREVWX01BWE1JTikpCisjZGVmaW5lIElSSVhfTUtERVYobWFqb3IsbWlub3IpICgoeGZzX2Rldl90KSgoKG1ham9yKTw8SVJJWF9ERVZfQklUU01JTk9SKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChtaW5vciZJUklYX0RFVl9NQVhNSU4pKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorI2RlZmluZSBJUklYX0RFVl9UT19LREVWVChkZXYpICBNS0RFVihJUklYX0RFVl9NQUpPUihkZXYpLElSSVhfREVWX01JTk9SKGRldikpCisjZGVmaW5lIElSSVhfREVWX1RPX0RFVlQoZGV2KSAgICgoSVJJWF9ERVZfTUFKT1IoZGV2KTw8OCl8SVJJWF9ERVZfTUlOT1IoZGV2KSkKKworLyogX19wc2ludF90IGlzIHRoZSBzYW1lIHNpemUgYXMgYSBwb2ludGVyICovCisjaWYgKEJJVFNfUEVSX0xPTkcgPT0gMzIpCit0eXBlZGVmIGludDMyX3QgX19wc2ludF90OwordHlwZWRlZiB1aW50MzJfdCBfX3BzdW5zaWduZWRfdDsKKyNlbGlmIChCSVRTX1BFUl9MT05HID09IDY0KQordHlwZWRlZiBpbnQ2NF90IF9fcHNpbnRfdDsKK3R5cGVkZWYgdWludDY0X3QgX19wc3Vuc2lnbmVkX3Q7CisjZWxzZQorI2Vycm9yIEJJVFNfUEVSX0xPTkcgbXVzdCBiZSAzMiBvciA2NAorI2VuZGlmCisKKworLyoKKyAqIHN0cnVjdCBmb3IgcGFzc2luZyBvd25lci9yZXF1ZXN0b3IgaWQKKyAqLwordHlwZWRlZiBzdHJ1Y3QgZmxpZCB7CisjaWZkZWYgQ0VMTF9DQVBBQkxFCisgICAgICAgIHBpZF90ICAgZmxfcGlkOworICAgICAgICBzeXNpZF90IGZsX3N5c2lkOworI2VuZGlmCit9IGZsaWRfdDsKKworI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmCS8qICFfX1hGU19UWVBFU19IICovCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2xhYmVscy9NYWtlZmlsZS5hbSBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvbGFiZWxzL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ZDdkMTQKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2xhYmVscy9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDMzIEBACisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBQYXJ0ZWQKKyMgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxLCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgbWF5IGJlIG1vZGlmaWVkIGFuZC9vciBkaXN0cmlidXRlZCB3aXRob3V0IHJlc3RyaWN0aW9uLgorCitpZiBDT01QSUxFX0ZPUl9TMzkwCitTMzkwX1NSQ1MgPSBkYXNkLmMgZmRhc2QuYyB2dG9jLmMKK2Vsc2UKK1MzOTBfU1JDUyA9CitlbmRpZgorCitwYXJ0ZWRpbmNsdWRlZGlyICAgICAgPQktSSQodG9wX3NyY2RpcikvaW5jbHVkZQorbm9pbnN0X0xUTElCUkFSSUVTICAgID0JbGlibGFiZWxzLmxhCisKK2xpYmxhYmVsc19sYV9TT1VSQ0VTICA9IHJkYi5jCQlcCisJCQlic2QuYyAgCQlcCisJCQkkKFMzOTBfU1JDUykJXAorCQkJZWZpX2NyYzMyLmMJXAorCQkJZG9zLmMgIAkJXAorCQkJZHZoLmgJCVwKKwkJCWR2aC5jICAJCVwKKwkJCWdwdC5jICAJCVwKKwkJCWxvb3AuYyAJCVwKKwkJCW1hYy5jICAJCVwKKwkJCXBjOTguYyAJCVwKKwkJCXN1bi5jCQlcCisJCQlhaXguYworCitsaWJsYWJlbHNfbGFfTElCQUREID0gJChPU19MSUJTKSAkKElOVExMSUJTKQorCitJTkNMVURFUyA9ICQocGFydGVkaW5jbHVkZWRpcikgJChJTlRMSU5DUykKKworTUFJTlRBSU5FUkNMRUFORklMRVMgPSBNYWtlZmlsZS5pbgpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9sYWJlbHMvTWFrZWZpbGUuaW4gYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2xhYmVscy9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmNmOGVkCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9sYWJlbHMvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw2NjUgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTAgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBQYXJ0ZWQKKyMgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxLCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgbWF5IGJlIG1vZGlmaWVkIGFuZC9vciBkaXN0cmlidXRlZCB3aXRob3V0IHJlc3RyaWN0aW9uLgorCitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorc3ViZGlyID0gbGlicGFydGVkL2xhYmVscworRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9hYnNvbHV0ZS1oZWFkZXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvYWxsb2NhLm00ICQodG9wX3NyY2RpcikvbTQvYXNzZXJ0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2F0ZXhpdC5tNCAkKHRvcF9zcmNkaXIpL200L2NhbGxvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jbG9zZS1zdHJlYW0ubTQgJCh0b3Bfc3JjZGlyKS9tNC9jbG9zZW91dC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jb2Rlc2V0Lm00ICQodG9wX3NyY2RpcikvbTQvY29uZmlnLWgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZGlybmFtZS5tNCAkKHRvcF9zcmNkaXIpL200L2Rvcy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9kb3VibGUtc2xhc2gtcm9vdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9lcnJvci5tNCAkKHRvcF9zcmNkaXIpL200L2V4aXRmYWlsLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2V4dGVuc2lvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9mcGVuZGluZy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9mcmVlLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0b3B0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgJCh0b3Bfc3JjZGlyKS9tNC9nbGliYzIxLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2dudWxpYi1jb21tb24ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZ251bGliLWNvbXAubTQgJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pbmxpbmUubTQgJCh0b3Bfc3JjZGlyKS9tNC9pbnR0eXBlcy1wcmkubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaW50dHlwZXMubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItaWdub3JlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbG9jYWxjaGFyc2V0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xvbmctb3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2xvbmdsb25nLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21icnRvd2MubTQgJCh0b3Bfc3JjZGlyKS9tNC9tYnN0YXRlX3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWVtY2hyLm00ICQodG9wX3NyY2RpcikvbTQvbWVtY21wLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21lbWNweS5tNCAkKHRvcF9zcmNkaXIpL200L21lbW1vdmUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWVtc2V0Lm00ICQodG9wX3NyY2RpcikvbTQvbmxzLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3BvLm00ICQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcXVvdGVhcmcubTQgJCh0b3Bfc3JjZGlyKS9tNC9yZWdleC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9yZW5hbWUubTQgJCh0b3Bfc3JjZGlyKS9tNC9ycG1hdGNoLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3NhZmUtcmVhZC5tNCAkKHRvcF9zcmNkaXIpL200L3NhZmUtd3JpdGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3NpemVfdC5tNCAkKHRvcF9zcmNkaXIpL200L3N0ZGFyZy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdGRib29sLm00ICQodG9wX3NyY2RpcikvbTQvc3RkaW50Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0ZGxpYl9oLm00ICQodG9wX3NyY2RpcikvbTQvc3RyY3Nwbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdHJpbmdfaC5tNCAkKHRvcF9zcmNkaXIpL200L3N0cm5kdXAubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3Rybmxlbi5tNCAkKHRvcF9zcmNkaXIpL200L3N0cnRvZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdHJ0b2wubTQgJCh0b3Bfc3JjZGlyKS9tNC91bmlzdGRfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC91dGltYnVmLm00ICQodG9wX3NyY2RpcikvbTQvdXRpbWUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdXRpbWVzLW51bGwubTQgJCh0b3Bfc3JjZGlyKS9tNC93Y2hhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC93Y3R5cGUubTQgJCh0b3Bfc3JjZGlyKS9tNC93aW50X3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQveGFsbG9jLm00ICQodG9wX3NyY2RpcikvbTQveHN0cm5kdXAubTQgXAorCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCithbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorCSQoQUNMT0NBTF9NNCkKK21raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK0xUTElCUkFSSUVTID0gJChub2luc3RfTFRMSUJSQVJJRVMpCithbV9fREVQRU5ERU5DSUVTXzEgPQorbGlibGFiZWxzX2xhX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCisJJChhbV9fREVQRU5ERU5DSUVTXzEpCithbV9fbGlibGFiZWxzX2xhX1NPVVJDRVNfRElTVCA9IHJkYi5jIGJzZC5jIGRhc2QuYyBmZGFzZC5jIHZ0b2MuYyBcCisJZWZpX2NyYzMyLmMgZG9zLmMgZHZoLmggZHZoLmMgZ3B0LmMgbG9vcC5jIG1hYy5jIHBjOTguYyBzdW4uYyBcCisJYWl4LmMKK0BDT01QSUxFX0ZPUl9TMzkwX1RSVUVAYW1fX29iamVjdHNfMSA9IGRhc2QubG8gZmRhc2QubG8gdnRvYy5sbworYW1fbGlibGFiZWxzX2xhX09CSkVDVFMgPSByZGIubG8gYnNkLmxvICQoYW1fX29iamVjdHNfMSkgZWZpX2NyYzMyLmxvIFwKKwlkb3MubG8gZHZoLmxvIGdwdC5sbyBsb29wLmxvIG1hYy5sbyBwYzk4LmxvIHN1bi5sbyBhaXgubG8KK2xpYmxhYmVsc19sYV9PQkpFQ1RTID0gJChhbV9saWJsYWJlbHNfbGFfT0JKRUNUUykKK0RFRkFVTFRfSU5DTFVERVMgPSAtSS4gLUkkKHRvcF9idWlsZGRpcikvbGliQGFtX19pc3JjQAorZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L2RlcGNvbXAKK2FtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCitDT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKKwkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitMVENPTVBJTEUgPSAkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorCS0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSBcCisJJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorQ0NMRCA9ICQoQ0MpCitMSU5LID0gJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIFwKKwktLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSBcCisJJChMREZMQUdTKSAtbyAkQAorU09VUkNFUyA9ICQobGlibGFiZWxzX2xhX1NPVVJDRVMpCitESVNUX1NPVVJDRVMgPSAkKGFtX19saWJsYWJlbHNfbGFfU09VUkNFU19ESVNUKQorRVRBR1MgPSBldGFncworQ1RBR1MgPSBjdGFncworRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FCU09MVVRFX0lOVFRZUEVTX0ggPSBAQUJTT0xVVEVfSU5UVFlQRVNfSEAKK0FCU09MVVRFX1NURElOVF9IID0gQEFCU09MVVRFX1NURElOVF9IQAorQUJTT0xVVEVfU1RETElCX0ggPSBAQUJTT0xVVEVfU1RETElCX0hACitBQlNPTFVURV9TVFJJTkdfSCA9IEBBQlNPTFVURV9TVFJJTkdfSEAKK0FCU09MVVRFX1VOSVNURF9IID0gQEFCU09MVVRFX1VOSVNURF9IQAorQUJTT0xVVEVfV0NIQVJfSCA9IEBBQlNPTFVURV9XQ0hBUl9IQAorQUJTT0xVVEVfV0NUWVBFX0ggPSBAQUJTT0xVVEVfV0NUWVBFX0hACitBQ0xPQ0FMID0gQEFDTE9DQUxACitBTExPQ0EgPSBAQUxMT0NBQAorQUxMT0NBX0ggPSBAQUxMT0NBX0hACitBTVRBUiA9IEBBTVRBUkAKK0FSID0gQEFSQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitCSVRTSVpFT0ZfUFRSRElGRl9UID0gQEJJVFNJWkVPRl9QVFJESUZGX1RACitCSVRTSVpFT0ZfU0lHX0FUT01JQ19UID0gQEJJVFNJWkVPRl9TSUdfQVRPTUlDX1RACitCSVRTSVpFT0ZfU0laRV9UID0gQEJJVFNJWkVPRl9TSVpFX1RACitCSVRTSVpFT0ZfV0NIQVJfVCA9IEBCSVRTSVpFT0ZfV0NIQVJfVEAKK0JJVFNJWkVPRl9XSU5UX1QgPSBAQklUU0laRU9GX1dJTlRfVEAKK0JVSUxESU5GTyA9IEBCVUlMRElORk9ACitDQyA9IEBDQ0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ0hFQ0tfQ0ZMQUdTID0gQENIRUNLX0NGTEFHU0AKK0NIRUNLX0xJQlMgPSBAQ0hFQ0tfTElCU0AKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RMX0xJQlMgPSBARExfTElCU0AKK0RNX0xJQlMgPSBARE1fTElCU0AKK0VDSE8gPSBARUNIT0AKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRVhFRVhUID0gQEVYRUVYVEAKK0Y3NyA9IEBGNzdACitGRkxBR1MgPSBARkZMQUdTQAorR0VUT1BUX0ggPSBAR0VUT1BUX0hACitHTElCQzIxID0gQEdMSUJDMjFACitHTVNHRk1UID0gQEdNU0dGTVRACitHTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKK0dOVUxJQl9DSE9XTiA9IEBHTlVMSUJfQ0hPV05ACitHTlVMSUJfRFVQMiA9IEBHTlVMSUJfRFVQMkAKK0dOVUxJQl9GQ0hESVIgPSBAR05VTElCX0ZDSERJUkAKK0dOVUxJQl9GVFJVTkNBVEUgPSBAR05VTElCX0ZUUlVOQ0FURUAKK0dOVUxJQl9HRVRDV0QgPSBAR05VTElCX0dFVENXREAKK0dOVUxJQl9HRVRMT0dJTl9SID0gQEdOVUxJQl9HRVRMT0dJTl9SQAorR05VTElCX0dFVFNVQk9QVCA9IEBHTlVMSUJfR0VUU1VCT1BUQAorR05VTElCX0lNQVhBQlMgPSBAR05VTElCX0lNQVhBQlNACitHTlVMSUJfSU1BWERJViA9IEBHTlVMSUJfSU1BWERJVkAKK0dOVUxJQl9NQlNDQVNFQ01QID0gQEdOVUxJQl9NQlNDQVNFQ01QQAorR05VTElCX01CU0NBU0VTVFIgPSBAR05VTElCX01CU0NBU0VTVFJACitHTlVMSUJfTUJTQ0hSID0gQEdOVUxJQl9NQlNDSFJACitHTlVMSUJfTUJTQ1NQTiA9IEBHTlVMSUJfTUJTQ1NQTkAKK0dOVUxJQl9NQlNMRU4gPSBAR05VTElCX01CU0xFTkAKK0dOVUxJQl9NQlNOQ0FTRUNNUCA9IEBHTlVMSUJfTUJTTkNBU0VDTVBACitHTlVMSUJfTUJTUEJSSyA9IEBHTlVMSUJfTUJTUEJSS0AKK0dOVUxJQl9NQlNQQ0FTRUNNUCA9IEBHTlVMSUJfTUJTUENBU0VDTVBACitHTlVMSUJfTUJTUkNIUiA9IEBHTlVMSUJfTUJTUkNIUkAKK0dOVUxJQl9NQlNTRVAgPSBAR05VTElCX01CU1NFUEAKK0dOVUxJQl9NQlNTUE4gPSBAR05VTElCX01CU1NQTkAKK0dOVUxJQl9NQlNTVFIgPSBAR05VTElCX01CU1NUUkAKK0dOVUxJQl9NQlNUT0tfUiA9IEBHTlVMSUJfTUJTVE9LX1JACitHTlVMSUJfTUVNTUVNID0gQEdOVUxJQl9NRU1NRU1ACitHTlVMSUJfTUVNUENQWSA9IEBHTlVMSUJfTUVNUENQWUAKK0dOVUxJQl9NRU1SQ0hSID0gQEdOVUxJQl9NRU1SQ0hSQAorR05VTElCX01LRFRFTVAgPSBAR05VTElCX01LRFRFTVBACitHTlVMSUJfTUtTVEVNUCA9IEBHTlVMSUJfTUtTVEVNUEAKK0dOVUxJQl9SRUFETElOSyA9IEBHTlVMSUJfUkVBRExJTktACitHTlVMSUJfU0xFRVAgPSBAR05VTElCX1NMRUVQQAorR05VTElCX1NUUENQWSA9IEBHTlVMSUJfU1RQQ1BZQAorR05VTElCX1NUUE5DUFkgPSBAR05VTElCX1NUUE5DUFlACitHTlVMSUJfU1RSQ0FTRVNUUiA9IEBHTlVMSUJfU1RSQ0FTRVNUUkAKK0dOVUxJQl9TVFJDSFJOVUwgPSBAR05VTElCX1NUUkNIUk5VTEAKK0dOVUxJQl9TVFJEVVAgPSBAR05VTElCX1NUUkRVUEAKK0dOVUxJQl9TVFJORFVQID0gQEdOVUxJQl9TVFJORFVQQAorR05VTElCX1NUUk5MRU4gPSBAR05VTElCX1NUUk5MRU5ACitHTlVMSUJfU1RSUEJSSyA9IEBHTlVMSUJfU1RSUEJSS0AKK0dOVUxJQl9TVFJTRVAgPSBAR05VTElCX1NUUlNFUEAKK0dOVUxJQl9TVFJUT0lNQVggPSBAR05VTElCX1NUUlRPSU1BWEAKK0dOVUxJQl9TVFJUT0tfUiA9IEBHTlVMSUJfU1RSVE9LX1JACitHTlVMSUJfU1RSVE9VTUFYID0gQEdOVUxJQl9TVFJUT1VNQVhACitHUkVQID0gQEdSRVBACitIQVZFX0RFQ0xfR0VUTE9HSU5fUiA9IEBIQVZFX0RFQ0xfR0VUTE9HSU5fUkAKK0hBVkVfREVDTF9JTUFYQUJTID0gQEhBVkVfREVDTF9JTUFYQUJTQAorSEFWRV9ERUNMX0lNQVhESVYgPSBASEFWRV9ERUNMX0lNQVhESVZACitIQVZFX0RFQ0xfTUVNTUVNID0gQEhBVkVfREVDTF9NRU1NRU1ACitIQVZFX0RFQ0xfTUVNUkNIUiA9IEBIQVZFX0RFQ0xfTUVNUkNIUkAKK0hBVkVfREVDTF9TVFJEVVAgPSBASEFWRV9ERUNMX1NUUkRVUEAKK0hBVkVfREVDTF9TVFJOQ0FTRUNNUCA9IEBIQVZFX0RFQ0xfU1RSTkNBU0VDTVBACitIQVZFX0RFQ0xfU1RSTkRVUCA9IEBIQVZFX0RFQ0xfU1RSTkRVUEAKK0hBVkVfREVDTF9TVFJOTEVOID0gQEhBVkVfREVDTF9TVFJOTEVOQAorSEFWRV9ERUNMX1NUUlRPSU1BWCA9IEBIQVZFX0RFQ0xfU1RSVE9JTUFYQAorSEFWRV9ERUNMX1NUUlRPS19SID0gQEhBVkVfREVDTF9TVFJUT0tfUkAKK0hBVkVfREVDTF9TVFJUT1VNQVggPSBASEFWRV9ERUNMX1NUUlRPVU1BWEAKK0hBVkVfRFVQMiA9IEBIQVZFX0RVUDJACitIQVZFX0ZUUlVOQ0FURSA9IEBIQVZFX0ZUUlVOQ0FURUAKK0hBVkVfR0VUU1VCT1BUID0gQEhBVkVfR0VUU1VCT1BUQAorSEFWRV9JTlRUWVBFU19IID0gQEhBVkVfSU5UVFlQRVNfSEAKK0hBVkVfSVNXQ05UUkwgPSBASEFWRV9JU1dDTlRSTEAKK0hBVkVfTE9OR19MT05HX0lOVCA9IEBIQVZFX0xPTkdfTE9OR19JTlRACitIQVZFX01FTVBDUFkgPSBASEFWRV9NRU1QQ1BZQAorSEFWRV9NS0RURU1QID0gQEhBVkVfTUtEVEVNUEAKK0hBVkVfUkVBRExJTksgPSBASEFWRV9SRUFETElOS0AKK0hBVkVfU0lHTkVEX1NJR19BVE9NSUNfVCA9IEBIQVZFX1NJR05FRF9TSUdfQVRPTUlDX1RACitIQVZFX1NJR05FRF9XQ0hBUl9UID0gQEhBVkVfU0lHTkVEX1dDSEFSX1RACitIQVZFX1NJR05FRF9XSU5UX1QgPSBASEFWRV9TSUdORURfV0lOVF9UQAorSEFWRV9TTEVFUCA9IEBIQVZFX1NMRUVQQAorSEFWRV9TVERJTlRfSCA9IEBIQVZFX1NURElOVF9IQAorSEFWRV9TVFBDUFkgPSBASEFWRV9TVFBDUFlACitIQVZFX1NUUE5DUFkgPSBASEFWRV9TVFBOQ1BZQAorSEFWRV9TVFJDQVNFQ01QID0gQEhBVkVfU1RSQ0FTRUNNUEAKK0hBVkVfU1RSQ0FTRVNUUiA9IEBIQVZFX1NUUkNBU0VTVFJACitIQVZFX1NUUkNIUk5VTCA9IEBIQVZFX1NUUkNIUk5VTEAKK0hBVkVfU1RSTkRVUCA9IEBIQVZFX1NUUk5EVVBACitIQVZFX1NUUlBCUksgPSBASEFWRV9TVFJQQlJLQAorSEFWRV9TVFJTRVAgPSBASEFWRV9TVFJTRVBACitIQVZFX1NZU19CSVRZUEVTX0ggPSBASEFWRV9TWVNfQklUWVBFU19IQAorSEFWRV9TWVNfSU5UVFlQRVNfSCA9IEBIQVZFX1NZU19JTlRUWVBFU19IQAorSEFWRV9TWVNfVFlQRVNfSCA9IEBIQVZFX1NZU19UWVBFU19IQAorSEFWRV9VTklTVERfSCA9IEBIQVZFX1VOSVNURF9IQAorSEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UID0gQEhBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVEAKK0hBVkVfV0NUWVBFX0ggPSBASEFWRV9XQ1RZUEVfSEAKK0hBVkVfV0lOVF9UID0gQEhBVkVfV0lOVF9UQAorSEFWRV9fQk9PTCA9IEBIQVZFX19CT09MQAorSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitJTlRMSU5DUyA9IEBJTlRMSU5DU0AKK0lOVExMSUJTID0gQElOVExMSUJTQAorSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAorSU5UVFlQRVNfSCA9IEBJTlRUWVBFU19IQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCSUNPTlYgPSBATElCSUNPTlZACitMSUJJTlRMID0gQExJQklOVExACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQExJQlNACitMSUJUT09MID0gQExJQlRPT0xACitMTl9TID0gQExOX1NACitMVEFMTE9DQSA9IEBMVEFMTE9DQUAKK0xUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKK0xUTElCSU5UTCA9IEBMVExJQklOVExACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTFRfQUdFID0gQExUX0FHRUAKK0xUX0NVUlJFTlQgPSBATFRfQ1VSUkVOVEAKK0xUX1JFTEVBU0UgPSBATFRfUkVMRUFTRUAKK0xUX1JFVklTSU9OID0gQExUX1JFVklTSU9OQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitNS0RJUl9QID0gQE1LRElSX1BACitNU0dGTVQgPSBATVNHRk1UQAorTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAorTVNHTUVSR0UgPSBATVNHTUVSR0VACitPQkpFWFQgPSBAT0JKRVhUQAorT1MgPSBAT1NACitPU19MSUJTID0gQE9TX0xJQlNACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFSVEVETERGTEFHUyA9IEBQQVJURURMREZMQUdTQAorUEFSVEVEX0xJQlMgPSBAUEFSVEVEX0xJQlNACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKK1BPU1VCID0gQFBPU1VCQAorUE9XX0xJQiA9IEBQT1dfTElCQAorUFJJUFRSX1BSRUZJWCA9IEBQUklQVFJfUFJFRklYQAorUFJJX01BQ1JPU19CUk9LRU4gPSBAUFJJX01BQ1JPU19CUk9LRU5ACitQVFJESUZGX1RfU1VGRklYID0gQFBUUkRJRkZfVF9TVUZGSVhACitSQU5MSUIgPSBAUkFOTElCQAorUkVJU0VSX0xJQlMgPSBAUkVJU0VSX0xJQlNACitSRVBMQUNFX0NIT1dOID0gQFJFUExBQ0VfQ0hPV05ACitSRVBMQUNFX0ZDSERJUiA9IEBSRVBMQUNFX0ZDSERJUkAKK1JFUExBQ0VfR0VUQ1dEID0gQFJFUExBQ0VfR0VUQ1dEQAorUkVQTEFDRV9NS1NURU1QID0gQFJFUExBQ0VfTUtTVEVNUEAKK1NFRCA9IEBTRURACitTRUxJTlVYX0xJQlMgPSBAU0VMSU5VWF9MSUJTQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NJR19BVE9NSUNfVF9TVUZGSVggPSBAU0lHX0FUT01JQ19UX1NVRkZJWEAKK1NJWkVfVF9TVUZGSVggPSBAU0laRV9UX1NVRkZJWEAKK1NUREJPT0xfSCA9IEBTVERCT09MX0hACitTVERJTlRfSCA9IEBTVERJTlRfSEAKK1NUUklQID0gQFNUUklQQAorVVNFX05MUyA9IEBVU0VfTkxTQAorVVVJRF9MSUJTID0gQFVVSURfTElCU0AKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1dDSEFSX0ggPSBAV0NIQVJfSEAKK1dDSEFSX1RfU1VGRklYID0gQFdDSEFSX1RfU1VGRklYQAorV0NUWVBFX0ggPSBAV0NUWVBFX0hACitXSU5UX1RfU1VGRklYID0gQFdJTlRfVF9TVUZGSVhACitYR0VUVEVYVCA9IEBYR0VUVEVYVEAKK1hHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9GNzcgPSBAYWNfY3RfRjc3QAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitidWlsZGRpciA9IEBidWlsZGRpckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZG9jZGlyID0gQGRvY2RpckAKK2R2aWRpciA9IEBkdmlkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2dsX0xJQk9CSlMgPSBAZ2xfTElCT0JKU0AKK2dsX0xUTElCT0JKUyA9IEBnbF9MVExJQk9CSlNACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorQENPTVBJTEVfRk9SX1MzOTBfRkFMU0VAUzM5MF9TUkNTID0gCitAQ09NUElMRV9GT1JfUzM5MF9UUlVFQFMzOTBfU1JDUyA9IGRhc2QuYyBmZGFzZC5jIHZ0b2MuYworcGFydGVkaW5jbHVkZWRpciA9IC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlCitub2luc3RfTFRMSUJSQVJJRVMgPSBsaWJsYWJlbHMubGEKK2xpYmxhYmVsc19sYV9TT1VSQ0VTID0gcmRiLmMJCVwKKwkJCWJzZC5jICAJCVwKKwkJCSQoUzM5MF9TUkNTKQlcCisJCQllZmlfY3JjMzIuYwlcCisJCQlkb3MuYyAgCQlcCisJCQlkdmguaAkJXAorCQkJZHZoLmMgIAkJXAorCQkJZ3B0LmMgIAkJXAorCQkJbG9vcC5jIAkJXAorCQkJbWFjLmMgIAkJXAorCQkJcGM5OC5jIAkJXAorCQkJc3VuLmMJCVwKKwkJCWFpeC5jCisKK2xpYmxhYmVsc19sYV9MSUJBREQgPSAkKE9TX0xJQlMpICQoSU5UTExJQlMpCitJTkNMVURFUyA9ICQocGFydGVkaW5jbHVkZWRpcikgJChJTlRMSU5DUykKK01BSU5UQUlORVJDTEVBTkZJTEVTID0gTWFrZWZpbGUuaW4KK2FsbDogYWxsLWFtCisKKy5TVUZGSVhFUzoKKy5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoIFwKKwkJJiYgZXhpdCAwOyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSAgbGlicGFydGVkL2xhYmVscy9NYWtlZmlsZSc7IFwKKwljZCAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZ251ICBsaWJwYXJ0ZWQvbGFiZWxzL01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCitjbGVhbi1ub2luc3RMVExJQlJBUklFUzoKKwktdGVzdCAteiAiJChub2luc3RfTFRMSUJSQVJJRVMpIiB8fCBybSAtZiAkKG5vaW5zdF9MVExJQlJBUklFUykKKwlAbGlzdD0nJChub2luc3RfTFRMSUJSQVJJRVMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBkaXI9ImBlY2hvICQkcCB8IHNlZCAtZSAnc3wvW14vXSokJHx8J2AiOyBcCisJICB0ZXN0ICIkJGRpciIgIT0gIiQkcCIgfHwgZGlyPS47IFwKKwkgIGVjaG8gInJtIC1mIFwiJCR7ZGlyfS9zb19sb2NhdGlvbnNcIiI7IFwKKwkgIHJtIC1mICIkJHtkaXJ9L3NvX2xvY2F0aW9ucyI7IFwKKwlkb25lCitsaWJsYWJlbHMubGE6ICQobGlibGFiZWxzX2xhX09CSkVDVFMpICQobGlibGFiZWxzX2xhX0RFUEVOREVOQ0lFUykgCisJJChMSU5LKSAgJChsaWJsYWJlbHNfbGFfT0JKRUNUUykgJChsaWJsYWJlbHNfbGFfTElCQUREKSAkKExJQlMpCisKK21vc3RseWNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICouJChPQkpFWFQpCisKK2Rpc3RjbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLnRhYi5jCisKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9haXguUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9ic2QuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9kYXNkLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZG9zLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZHZoLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZWZpX2NyYzMyLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZmRhc2QuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9ncHQuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9sb29wLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbWFjLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcGM5OC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3JkYi5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3N1bi5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3Z0b2MuUGxvQGFtX19xdW90ZUAKKworLmMubzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyAkPAorCisuYy5vYmo6CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKK0BhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyBgJChDWUdQQVRIX1cpICckPCdgCisKKy5jLmxvOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMVENPTVBJTEUpIC1jIC1vICRAICQ8CisKK21vc3RseWNsZWFuLWxpYnRvb2w6CisJLXJtIC1mICoubG8KKworY2xlYW4tbGlidG9vbDoKKwktcm0gLXJmIC5saWJzIF9saWJzCisKK0lEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKKwkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKKwlta2lkIC1mSUQgJCR1bmlxdWUKK3RhZ3M6IFRBR1MKKworVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwl0YWdzPTsgXAorCWhlcmU9YHB3ZGA7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKKwkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorCSAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAkJHRhZ3MgJCR1bmlxdWU7IFwKKwlmaQorY3RhZ3M6IENUQUdTCitDVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwl0YWdzPTsgXAorCWhlcmU9YHB3ZGA7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKKwkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKKwl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiIFwKKwkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKKwkgICAgICQkdGFncyAkJHVuaXF1ZQorCitHVEFHUzoKKwloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorCSAgJiYgY2QgJCh0b3Bfc3JjZGlyKSBcCisJICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICQkaGVyZQorCitkaXN0Y2xlYW4tdGFnczoKKwktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLXBSICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtcFIgJCRkLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAkKGRpc3RkaXIpLyQkZmlsZSBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgJChkaXN0ZGlyKS8kJGZpbGUgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorY2hlY2stYW06IGFsbC1hbQorY2hlY2s6IGNoZWNrLWFtCithbGwtYW06IE1ha2VmaWxlICQoTFRMSUJSQVJJRVMpCitpbnN0YWxsZGlyczoKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCisJICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCisJLXRlc3QgLXogIiQoTUFJTlRBSU5FUkNMRUFORklMRVMpIiB8fCBybSAtZiAkKE1BSU5UQUlORVJDTEVBTkZJTEVTKQorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0TFRMSUJSQVJJRVMgXAorCW1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1leGVjLWFtOgorCitpbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1hbQorCitwZGYtYW06CisKK3BzOiBwcy1hbQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOgorCisuTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisKKy5QSE9OWTogQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKKwljbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdExUTElCUkFSSUVTIGN0YWdzIGRpc3RjbGVhbiBcCisJZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgXAorCWRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIFwKKwlpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBcCisJaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgXAorCWluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIFwKKwlpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAorCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCisJbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAorCW1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIFwKKwlwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbQorCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2xhYmVscy9haXguYyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvbGFiZWxzL2FpeC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllN2EzZTIKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2xhYmVscy9haXguYwpAQCAtMCwwICsxLDI5NiBAQAorLyogLSotIE1vZGU6IGM7IHRhYi13aWR0aDogODsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogOCAtKi0KKworICAgIGxpYnBhcnRlZCAtIGEgbGlicmFyeSBmb3IgbWFuaXB1bGF0aW5nIGRpc2sgcGFydGl0aW9ucworICAgIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKworICAgIENvbnRyaWJ1dG9yOiAgTWF0dCBXaWxzb24gPG1zd0ByZWRoYXQuY29tPgorKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaW5jbHVkZSA8cGFydGVkL3BhcnRlZC5oPgorI2luY2x1ZGUgPHBhcnRlZC9kZWJ1Zy5oPgorI2luY2x1ZGUgPHBhcnRlZC9lbmRpYW4uaD4KKworI2lmIEVOQUJMRV9OTFMKKyMgIGluY2x1ZGUgPGxpYmludGwuaD4KKyMgIGRlZmluZSBfKFN0cmluZykgZGdldHRleHQgKFBBQ0tBR0UsIFN0cmluZykKKyNlbHNlCisjICBkZWZpbmUgXyhTdHJpbmcpIChTdHJpbmcpCisjZW5kaWYgLyogRU5BQkxFX05MUyAqLworCisjZGVmaW5lCUFJWF9MQUJFTF9NQUdJQwkJMHhjOWMyZDRjMQorCitzdGF0aWMgUGVkRGlza1R5cGUgYWl4X2Rpc2tfdHlwZTsKKworc3RhdGljIGlubGluZSBpbnQKK2FpeF9sYWJlbF9tYWdpY19nZXQgKGNvbnN0IGNoYXIgKmxhYmVsKQoreworCXJldHVybiAqKHVuc2lnbmVkIGludCAqKWxhYmVsOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2FpeF9sYWJlbF9tYWdpY19zZXQgKGNoYXIgKmxhYmVsLCBpbnQgbWFnaWNfdmFsKQoreworCSoodW5zaWduZWQgaW50ICopbGFiZWwgPSBtYWdpY192YWw7Cit9CisKKy8qIFJlYWQgYSBzaW5nbGUgc2VjdG9yLCBvZiBsZW5ndGggREVWLT5zZWN0b3Jfc2l6ZSwgaW50byBtYWxsb2MnZCBzdG9yYWdlLgorICAgSWYgdGhlIHJlYWQgZmFpbHMsIGZyZWUgdGhlIG1lbW9yeSBhbmQgcmV0dXJuIHplcm8gd2l0aG91dCBtb2RpZnlpbmcgKkJVRi4KKyAgIE90aGVyd2lzZSwgc2V0ICpCVUYgdG8gdGhlIG5ldyBidWZmZXIgYW5kIHJldHVybiAxLiAgKi8KK3N0YXRpYyBpbnQKK3JlYWRfc2VjdG9yIChjb25zdCBQZWREZXZpY2UgKmRldiwgY2hhciAqKmJ1ZikKK3sKKwljaGFyICpiID0gcGVkX21hbGxvYyAoZGV2LT5zZWN0b3Jfc2l6ZSk7CisJUEVEX0FTU0VSVCAoYiAhPSBOVUxMLCByZXR1cm4gMCk7CisJaWYgKCFwZWRfZGV2aWNlX3JlYWQgKGRldiwgYiwgMCwgMSkpIHsKKwkJcGVkX2ZyZWUgKGIpOworCQlyZXR1cm4gMDsKKwl9CisJKmJ1ZiA9IGI7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2FpeF9wcm9iZSAoY29uc3QgUGVkRGV2aWNlICpkZXYpCit7CisJUEVEX0FTU0VSVCAoZGV2ICE9IE5VTEwsIHJldHVybiAwKTsKKworCWNoYXIgKmxhYmVsOworCWlmICghcmVhZF9zZWN0b3IgKGRldiwgJmxhYmVsKSkKKwkJcmV0dXJuIDA7CisJdW5zaWduZWQgaW50IG1hZ2ljID0gYWl4X2xhYmVsX21hZ2ljX2dldCAobGFiZWwpOworCXBlZF9mcmVlIChsYWJlbCk7CisJcmV0dXJuIG1hZ2ljID09IEFJWF9MQUJFTF9NQUdJQzsKK30KKworI2lmbmRlZiBESVNDT1ZFUl9PTkxZCitzdGF0aWMgaW50CithaXhfY2xvYmJlciAoUGVkRGV2aWNlKiBkZXYpCit7CisJUEVEX0FTU0VSVCAoZGV2ICE9IE5VTEwsIHJldHVybiAwKTsKKworCWlmICghYWl4X3Byb2JlIChkZXYpKQorCQlyZXR1cm4gMDsKKworCWNoYXIgKmxhYmVsOworCWlmICghcmVhZF9zZWN0b3IgKGRldiwgJmxhYmVsKSkKKwkJcmV0dXJuIDA7CisKKwlhaXhfbGFiZWxfbWFnaWNfc2V0IChsYWJlbCwgMCk7CisJaW50IHJlc3VsdCA9IHBlZF9kZXZpY2Vfd3JpdGUgKGRldiwgbGFiZWwsIDAsIDEpOworCXBlZF9mcmVlIChsYWJlbCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKyNlbmRpZiAvKiAhRElTQ09WRVJfT05MWSAqLworCitzdGF0aWMgUGVkRGlzayoKK2FpeF9hbGxvYyAoY29uc3QgUGVkRGV2aWNlKiBkZXYpCit7CisJUGVkRGlzayoJZGlzazsKKworICAgICAgICBkaXNrID0gX3BlZF9kaXNrX2FsbG9jIChkZXYsICZhaXhfZGlza190eXBlKTsKKwlpZiAoIWRpc2spCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIGRpc2s7Cit9CisKK3N0YXRpYyBQZWREaXNrKgorYWl4X2R1cGxpY2F0ZSAoY29uc3QgUGVkRGlzayogZGlzaykKK3sKKwlQZWREaXNrKgluZXdfZGlzazsKKyAgICAgICAKKwluZXdfZGlzayA9IHBlZF9kaXNrX25ld19mcmVzaCAoZGlzay0+ZGV2LCAmYWl4X2Rpc2tfdHlwZSk7CisJaWYgKCFuZXdfZGlzaykKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gbmV3X2Rpc2s7Cit9CisKK3N0YXRpYyB2b2lkCithaXhfZnJlZSAoUGVkRGlzayAqZGlzaykKK3sKKwlfcGVkX2Rpc2tfZnJlZSAoZGlzayk7Cit9CisKK3N0YXRpYyBpbnQKK2FpeF9yZWFkIChQZWREaXNrKiBkaXNrKQoreworCXBlZF9kaXNrX2RlbGV0ZV9hbGwgKGRpc2spOworICAgICAgICBwZWRfZXhjZXB0aW9uX3Rocm93IChQRURfRVhDRVBUSU9OX05PX0ZFQVRVUkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBFRF9FWENFUFRJT05fQ0FOQ0VMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJTdXBwb3J0IGZvciByZWFkaW5nIEFJWCBkaXNrIGxhYmVscyBpcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIikpOworICAgICAgICByZXR1cm4gMDsKK30KKworI2lmbmRlZiBESVNDT1ZFUl9PTkxZCitzdGF0aWMgaW50CithaXhfd3JpdGUgKGNvbnN0IFBlZERpc2sqIGRpc2spCit7CisgICAgICAgIHBlZF9leGNlcHRpb25fdGhyb3cgKFBFRF9FWENFUFRJT05fTk9fRkVBVFVSRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlN1cHBvcnQgZm9yIHdyaXRpbmcgQUlYIGRpc2sgbGFiZWxzIGlzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaXMgbm90IGltcGxlbWVudGVkIHlldC4iKSk7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogIURJU0NPVkVSX09OTFkgKi8KKworc3RhdGljIFBlZFBhcnRpdGlvbioKK2FpeF9wYXJ0aXRpb25fbmV3IChjb25zdCBQZWREaXNrKiBkaXNrLCBQZWRQYXJ0aXRpb25UeXBlIHBhcnRfdHlwZSwKKwkJICAgY29uc3QgUGVkRmlsZVN5c3RlbVR5cGUqIGZzX3R5cGUsCisJCSAgIFBlZFNlY3RvciBzdGFydCwgUGVkU2VjdG9yIGVuZCkKK3sKKyAgICAgICAgcGVkX2V4Y2VwdGlvbl90aHJvdyAoUEVEX0VYQ0VQVElPTl9OT19GRUFUVVJFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQRURfRVhDRVBUSU9OX0NBTkNFTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiU3VwcG9ydCBmb3IgYWRkaW5nIHBhcnRpdGlvbnMgdG8gQUlYIGRpc2sgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsYWJlbHMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iKSk7CisgICAgICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgUGVkUGFydGl0aW9uKgorYWl4X3BhcnRpdGlvbl9kdXBsaWNhdGUgKGNvbnN0IFBlZFBhcnRpdGlvbiogcGFydCkKK3sKKyAgICAgICAgcGVkX2V4Y2VwdGlvbl90aHJvdyAoUEVEX0VYQ0VQVElPTl9OT19GRUFUVVJFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQRURfRVhDRVBUSU9OX0NBTkNFTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiU3VwcG9ydCBmb3IgZHVwbGljYXRpbmcgcGFydGl0aW9ucyBpbiBBSVggIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaXNrIGxhYmVscyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIpKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCithaXhfcGFydGl0aW9uX2Rlc3Ryb3kgKFBlZFBhcnRpdGlvbiogcGFydCkKK3sKKwlQRURfQVNTRVJUIChwYXJ0ICE9IE5VTEwsIHJldHVybik7CisKKwlfcGVkX3BhcnRpdGlvbl9mcmVlIChwYXJ0KTsKK30KKworc3RhdGljIGludAorYWl4X3BhcnRpdGlvbl9zZXRfc3lzdGVtIChQZWRQYXJ0aXRpb24qIHBhcnQsIGNvbnN0IFBlZEZpbGVTeXN0ZW1UeXBlKiBmc190eXBlKQoreworICAgICAgICBwZWRfZXhjZXB0aW9uX3Rocm93IChQRURfRVhDRVBUSU9OX05PX0ZFQVRVUkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBFRF9FWENFUFRJT05fQ0FOQ0VMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJTdXBwb3J0IGZvciBzZXR0aW5nIHN5c3RlbSB0eXBlIG9mIHBhcnRpdGlvbnMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbiBBSVggZGlzayBsYWJlbHMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2FpeF9wYXJ0aXRpb25fc2V0X2ZsYWcgKFBlZFBhcnRpdGlvbiogcGFydCwgUGVkUGFydGl0aW9uRmxhZyBmbGFnLCBpbnQgc3RhdGUpCit7CisgICAgICAgIHBlZF9leGNlcHRpb25fdGhyb3cgKFBFRF9FWENFUFRJT05fTk9fRkVBVFVSRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlN1cHBvcnQgZm9yIHNldHRpbmcgZmxhZ3MgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbiBBSVggZGlzayBsYWJlbHMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iKSk7CisgICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CithaXhfcGFydGl0aW9uX2dldF9mbGFnIChjb25zdCBQZWRQYXJ0aXRpb24qIHBhcnQsIFBlZFBhcnRpdGlvbkZsYWcgZmxhZykKK3sKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludAorYWl4X3BhcnRpdGlvbl9pc19mbGFnX2F2YWlsYWJsZSAoY29uc3QgUGVkUGFydGl0aW9uKiBwYXJ0LAorCQkJCSBQZWRQYXJ0aXRpb25GbGFnIGZsYWcpCit7CisgICAgICAgIHJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQKK2FpeF9nZXRfbWF4X3ByaW1hcnlfcGFydGl0aW9uX2NvdW50IChjb25zdCBQZWREaXNrKiBkaXNrKQoreworCXJldHVybiA0OworfQorCitzdGF0aWMgaW50CithaXhfcGFydGl0aW9uX2FsaWduIChQZWRQYXJ0aXRpb24qIHBhcnQsIGNvbnN0IFBlZENvbnN0cmFpbnQqIGNvbnN0cmFpbnQpCit7CisgICAgICAgIFBFRF9BU1NFUlQgKHBhcnQgIT0gTlVMTCwgcmV0dXJuIDApOworCisgICAgICAgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CithaXhfcGFydGl0aW9uX2VudW1lcmF0ZSAoUGVkUGFydGl0aW9uKiBwYXJ0KQoreworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50CithaXhfYWxsb2NfbWV0YWRhdGEgKFBlZERpc2sqIGRpc2spCit7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBQZWREaXNrT3BzIGFpeF9kaXNrX29wcyA9IHsKKwlwcm9iZToJCQlhaXhfcHJvYmUsCisjaWZuZGVmIERJU0NPVkVSX09OTFkKKwljbG9iYmVyOgkJYWl4X2Nsb2JiZXIsCisjZWxzZQorCWNsb2JiZXI6CQlOVUxMLAorI2VuZGlmCisJYWxsb2M6CQkJYWl4X2FsbG9jLAorCWR1cGxpY2F0ZToJCWFpeF9kdXBsaWNhdGUsCisJZnJlZToJCQlhaXhfZnJlZSwKKwlyZWFkOgkJCWFpeF9yZWFkLAorI2lmbmRlZiBESVNDT1ZFUl9PTkxZCisJd3JpdGU6CQkJYWl4X3dyaXRlLAorI2Vsc2UKKwl3cml0ZToJCQlOVUxMLAorI2VuZGlmCisKKwlwYXJ0aXRpb25fbmV3OgkJYWl4X3BhcnRpdGlvbl9uZXcsCisJcGFydGl0aW9uX2R1cGxpY2F0ZToJYWl4X3BhcnRpdGlvbl9kdXBsaWNhdGUsCisJcGFydGl0aW9uX2Rlc3Ryb3k6CWFpeF9wYXJ0aXRpb25fZGVzdHJveSwKKwlwYXJ0aXRpb25fc2V0X3N5c3RlbToJYWl4X3BhcnRpdGlvbl9zZXRfc3lzdGVtLAorCXBhcnRpdGlvbl9zZXRfZmxhZzoJYWl4X3BhcnRpdGlvbl9zZXRfZmxhZywKKwlwYXJ0aXRpb25fZ2V0X2ZsYWc6CWFpeF9wYXJ0aXRpb25fZ2V0X2ZsYWcsCisJcGFydGl0aW9uX2lzX2ZsYWdfYXZhaWxhYmxlOglhaXhfcGFydGl0aW9uX2lzX2ZsYWdfYXZhaWxhYmxlLAorCXBhcnRpdGlvbl9hbGlnbjoJYWl4X3BhcnRpdGlvbl9hbGlnbiwKKwlwYXJ0aXRpb25fZW51bWVyYXRlOglhaXhfcGFydGl0aW9uX2VudW1lcmF0ZSwKKwlhbGxvY19tZXRhZGF0YToJCWFpeF9hbGxvY19tZXRhZGF0YSwKKwlnZXRfbWF4X3ByaW1hcnlfcGFydGl0aW9uX2NvdW50OgorCQkJCWFpeF9nZXRfbWF4X3ByaW1hcnlfcGFydGl0aW9uX2NvdW50LAorCisJcGFydGl0aW9uX3NldF9uYW1lOgkJTlVMTCwKKwlwYXJ0aXRpb25fZ2V0X25hbWU6CQlOVUxMLAorfTsKKworc3RhdGljIFBlZERpc2tUeXBlIGFpeF9kaXNrX3R5cGUgPSB7CisJbmV4dDoJCU5VTEwsCisJbmFtZToJCSJhaXgiLAorCW9wczoJCSZhaXhfZGlza19vcHMsCisJZmVhdHVyZXM6CTAKK307CisKK3ZvaWQKK3BlZF9kaXNrX2FpeF9pbml0ICgpCit7CisJcGVkX2Rpc2tfdHlwZV9yZWdpc3RlciAoJmFpeF9kaXNrX3R5cGUpOworfQorCit2b2lkCitwZWRfZGlza19haXhfZG9uZSAoKQoreworCXBlZF9kaXNrX3R5cGVfdW5yZWdpc3RlciAoJmFpeF9kaXNrX3R5cGUpOworfQpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9sYWJlbHMvYnNkLmMgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2xhYmVscy9ic2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDdhOWM1Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9sYWJlbHMvYnNkLmMKQEAgLTAsMCArMSw2MTMgQEAKKy8qIC0qLSBNb2RlOiBjOyB0YWItd2lkdGg6IDg7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDggLSotCisKKyAgICBsaWJwYXJ0ZWQgLSBhIGxpYnJhcnkgZm9yIG1hbmlwdWxhdGluZyBkaXNrIHBhcnRpdGlvbnMKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCisKKyAgICBDb250cmlidXRvcjogIE1hdHQgV2lsc29uIDxtc3dAcmVkaGF0LmNvbT4KKyovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworI2luY2x1ZGUgPHBhcnRlZC9wYXJ0ZWQuaD4KKyNpbmNsdWRlIDxwYXJ0ZWQvZGVidWcuaD4KKyNpbmNsdWRlIDxwYXJ0ZWQvZW5kaWFuLmg+CisKKyNpZiBFTkFCTEVfTkxTCisjICBpbmNsdWRlIDxsaWJpbnRsLmg+CisjICBkZWZpbmUgXyhTdHJpbmcpIGRnZXR0ZXh0IChQQUNLQUdFLCBTdHJpbmcpCisjZWxzZQorIyAgZGVmaW5lIF8oU3RyaW5nKSAoU3RyaW5nKQorI2VuZGlmIC8qIEVOQUJMRV9OTFMgKi8KKworLyogc3RydWN0J3MgJiAjZGVmaW5lJ3Mgc3RvbGVuIGZyb20gbGliZmRpc2ssIHdoaWNoIHByb2JhYmx5IGNhbWUgZnJvbQorICogTGludXguLi4KKyAqLworCisjZGVmaW5lIEJTRF9ESVNLTUFHSUMJKDB4ODI1NjQ1NTdVTCkJLyogVGhlIGRpc2sgbWFnaWMgbnVtYmVyICovCisjZGVmaW5lIEJTRF9NQVhQQVJUSVRJT05TCTgKKyNkZWZpbmUgQlNEX0ZTX1VOVVNFRAkJMAkvKiBkaXNrbGFiZWwgdW51c2VkIHBhcnRpdGlvbiBlbnRyeSBJRCAqLworI2RlZmluZSBCU0RfTEFCRUxfT0ZGU0VUCTY0CisKKyNkZWZpbmUJQlNEX0RUWVBFX1NNRAkJMQkJLyogU01ELCBYU01EOyBWQVggaHAvdXAgKi8KKyNkZWZpbmUJQlNEX0RUWVBFX01TQ1AJCTIJCS8qIE1TQ1AgKi8KKyNkZWZpbmUJQlNEX0RUWVBFX0RFQwkJMwkJLyogb3RoZXIgREVDIChyaywgcmwpICovCisjZGVmaW5lCUJTRF9EVFlQRV9TQ1NJCQk0CQkvKiBTQ1NJICovCisjZGVmaW5lCUJTRF9EVFlQRV9FU0RJCQk1CQkvKiBFU0RJIGludGVyZmFjZSAqLworI2RlZmluZQlCU0RfRFRZUEVfU1Q1MDYJCTYJCS8qIFNUNTA2IGV0Yy4gKi8KKyNkZWZpbmUJQlNEX0RUWVBFX0hQSUIJCTcJCS8qIENTLzgwIG9uIEhQLUlCICovCisjZGVmaW5lIEJTRF9EVFlQRV9IUEZMCQk4CQkvKiBIUCBGaWJlci1saW5rICovCisjZGVmaW5lCUJTRF9EVFlQRV9GTE9QUFkJMTAJCS8qIGZsb3BweSAqLworCisjZGVmaW5lCUJTRF9CQlNJWkUJODE5MgkJLyogc2l6ZSBvZiBib290IGFyZWEsIHdpdGggbGFiZWwgKi8KKyNkZWZpbmUJQlNEX1NCU0laRQk4MTkyCQkvKiBtYXggc2l6ZSBvZiBmcyBzdXBlcmJsb2NrICovCisKK3R5cGVkZWYgc3RydWN0IF9CU0RSYXdQYXJ0aXRpb24JCUJTRFJhd1BhcnRpdGlvbjsKK3R5cGVkZWYgc3RydWN0IF9CU0RSYXdMYWJlbAkJQlNEUmF3TGFiZWw7CisKK3N0cnVjdCBfQlNEUmF3UGFydGl0aW9uIHsJCS8qIHRoZSBwYXJ0aXRpb24gdGFibGUgKi8KKwl1aW50MzJfdAlwX3NpemU7CQkvKiBudW1iZXIgb2Ygc2VjdG9ycyBpbiBwYXJ0aXRpb24gKi8KKwl1aW50MzJfdAlwX29mZnNldDsJLyogc3RhcnRpbmcgc2VjdG9yICovCisJdWludDMyX3QJcF9mc2l6ZTsJLyogZmlsZSBzeXN0ZW0gYmFzaWMgZnJhZ21lbnQgc2l6ZSAqLworCXVpbnQ4X3QJCXBfZnN0eXBlOwkvKiBmaWxlIHN5c3RlbSB0eXBlLCBzZWUgYmVsb3cgKi8KKwl1aW50OF90CQlwX2ZyYWc7CQkvKiBmaWxlIHN5c3RlbSBmcmFnbWVudHMgcGVyIGJsb2NrICovCisJdWludDE2X3QJcF9jcGc7CQkvKiBmaWxlIHN5c3RlbSBjeWxpbmRlcnMgcGVyIGdyb3VwICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgX0JTRFJhd0xhYmVsIHsKKwl1aW50MzJfdAlkX21hZ2ljOwkJLyogdGhlIG1hZ2ljIG51bWJlciAqLworCWludDE2X3QJCWRfdHlwZTsJCQkvKiBkcml2ZSB0eXBlICovCisJaW50MTZfdAkJZF9zdWJ0eXBlOwkJLyogY29udHJvbGxlci9kX3R5cGUgc3BlY2lmaWMgKi8KKwlpbnQ4X3QJCWRfdHlwZW5hbWVbMTZdOwkJLyogdHlwZSBuYW1lLCBlLmcuICJlYWdsZSIgKi8KKwlpbnQ4X3QJCWRfcGFja25hbWVbMTZdOwkJLyogcGFjayBpZGVudGlmaWVyICovIAorCXVpbnQzMl90CWRfc2Vjc2l6ZTsJCS8qICMgb2YgYnl0ZXMgcGVyIHNlY3RvciAqLworCXVpbnQzMl90CWRfbnNlY3RvcnM7CQkvKiAjIG9mIGRhdGEgc2VjdG9ycyBwZXIgdHJhY2sgKi8KKwl1aW50MzJfdAlkX250cmFja3M7CQkvKiAjIG9mIHRyYWNrcyBwZXIgY3lsaW5kZXIgKi8KKwl1aW50MzJfdAlkX25jeWxpbmRlcnM7CQkvKiAjIG9mIGRhdGEgY3lsaW5kZXJzIHBlciB1bml0ICovCisJdWludDMyX3QJZF9zZWNwZXJjeWw7CQkvKiAjIG9mIGRhdGEgc2VjdG9ycyBwZXIgY3lsaW5kZXIgKi8KKwl1aW50MzJfdAlkX3NlY3BlcnVuaXQ7CQkvKiAjIG9mIGRhdGEgc2VjdG9ycyBwZXIgdW5pdCAqLworCXVpbnQxNl90CWRfc3BhcmVzcGVydHJhY2s7CS8qICMgb2Ygc3BhcmUgc2VjdG9ycyBwZXIgdHJhY2sgKi8KKwl1aW50MTZfdAlkX3NwYXJlc3BlcmN5bDsJCS8qICMgb2Ygc3BhcmUgc2VjdG9ycyBwZXIgY3lsaW5kZXIgKi8KKwl1aW50MzJfdAlkX2FjeWxpbmRlcnM7CQkvKiAjIG9mIGFsdC4gY3lsaW5kZXJzIHBlciB1bml0ICovCisJdWludDE2X3QJZF9ycG07CQkJLyogcm90YXRpb25hbCBzcGVlZCAqLworCXVpbnQxNl90CWRfaW50ZXJsZWF2ZTsJCS8qIGhhcmR3YXJlIHNlY3RvciBpbnRlcmxlYXZlICovCisJdWludDE2X3QJZF90cmFja3NrZXc7CQkvKiBzZWN0b3IgMCBza2V3LCBwZXIgdHJhY2sgKi8KKwl1aW50MTZfdAlkX2N5bHNrZXc7CQkvKiBzZWN0b3IgMCBza2V3LCBwZXIgY3lsaW5kZXIgKi8KKwl1aW50MzJfdAlkX2hlYWRzd2l0Y2g7CQkvKiBoZWFkIHN3aXRjaCB0aW1lLCB1c2VjICovCisJdWludDMyX3QJZF90cmtzZWVrOwkJLyogdHJhY2stdG8tdHJhY2sgc2VlaywgdXNlYyAqLworCXVpbnQzMl90CWRfZmxhZ3M7CQkvKiBnZW5lcmljIGZsYWdzICovCisjZGVmaW5lIE5EREFUQSA1CisJdWludDMyX3QJZF9kcml2ZWRhdGFbTkREQVRBXTsJLyogZHJpdmUtdHlwZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiAqLworI2RlZmluZSBOU1BBUkUgNQorCXVpbnQzMl90CWRfc3BhcmVbTlNQQVJFXTsJLyogcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi8KKwl1aW50MzJfdAlkX21hZ2ljMjsJCS8qIHRoZSBtYWdpYyBudW1iZXIgKGFnYWluKSAqLworCXVpbnQxNl90CWRfY2hlY2tzdW07CQkvKiB4b3Igb2YgZGF0YSBpbmNsLiBwYXJ0aXRpb25zICovCisJCisJLyogZmlsZSBzeXN0ZW0gYW5kIHBhcnRpdGlvbiBpbmZvcm1hdGlvbjogKi8KKwl1aW50MTZfdAlkX25wYXJ0aXRpb25zOwkJLyogbnVtYmVyIG9mIHBhcnRpdGlvbnMgaW4gZm9sbG93aW5nICovCisJdWludDMyX3QJZF9iYnNpemU7CQkvKiBzaXplIG9mIGJvb3QgYXJlYSBhdCBzbjAsIGJ5dGVzICovCisJdWludDMyX3QJZF9zYnNpemU7CQkvKiBtYXggc2l6ZSBvZiBmcyBzdXBlcmJsb2NrLCBieXRlcyAqLworCUJTRFJhd1BhcnRpdGlvbiBkX3BhcnRpdGlvbnNbQlNEX01BWFBBUlRJVElPTlNdOwkvKiBhY3R1YWxseSBtYXkgYmUgbW9yZSAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCWNoYXIJCWJvb3RfY29kZSBbNTEyXTsKK30gQlNERGlza0RhdGE7CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1aW50OF90CQl0eXBlOworfSBCU0RQYXJ0aXRpb25EYXRhOworCitzdGF0aWMgUGVkRGlza1R5cGUgYnNkX2Rpc2tfdHlwZTsKKworLyogWFhYIGZpeG1lOiBlbmRpYW4/ICovCitzdGF0aWMgdW5zaWduZWQgc2hvcnQKK3hic2RfZGtja3N1bSAoQlNEUmF3TGFiZWwgKmxwKSB7CisJdW5zaWduZWQgc2hvcnQgKnN0YXJ0LCAqZW5kOworCXVuc2lnbmVkIHNob3J0IHN1bSA9IDA7CisJCisJbHAtPmRfY2hlY2tzdW0gPSAwOworCXN0YXJ0ID0gKHVfc2hvcnQqKSBscDsKKwllbmQgPSAodV9zaG9ydCopICZscC0+ZF9wYXJ0aXRpb25zIFsKKwkJCQlQRURfTEUxNl9UT19DUFUgKGxwLT5kX25wYXJ0aXRpb25zKV07CisJd2hpbGUgKHN0YXJ0IDwgZW5kKQorCQlzdW0gXj0gKnN0YXJ0Kys7CisJcmV0dXJuIHN1bTsKK30KKworLyogWFhYIGZpeG1lOiBlbmRpYW4/ICovCitzdGF0aWMgdm9pZAorYWxwaGFfYm9vdGJsb2NrX2NoZWNrc3VtIChjaGFyICpib290KSB7CisJdWludDY0X3QgKmRwLCBzdW07CisJaW50IGk7CisJCisJZHAgPSAodWludDY0X3QgKilib290OworCXN1bSA9IDA7CisJZm9yIChpID0gMDsgaSA8IDYzOyBpKyspCisJCXN1bSArPSBkcFtpXTsKKwlkcFs2M10gPSBzdW07Cit9CisKKworc3RhdGljIGludAorYnNkX3Byb2JlIChjb25zdCBQZWREZXZpY2UgKmRldikKK3sKKwljaGFyCQlib290WzUxMl07CisJQlNEUmF3TGFiZWwJKmxhYmVsOworCisJUEVEX0FTU0VSVCAoZGV2ICE9IE5VTEwsIHJldHVybiAwKTsKKworICAgICAgICBpZiAoZGV2LT5zZWN0b3Jfc2l6ZSAhPSA1MTIpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisKKwlpZiAoIXBlZF9kZXZpY2VfcmVhZCAoZGV2LCBib290LCAwLCAxKSkKKwkJcmV0dXJuIDA7CisKKwlsYWJlbCA9IChCU0RSYXdMYWJlbCAqKSAoYm9vdCArIEJTRF9MQUJFTF9PRkZTRVQpOworCisJYWxwaGFfYm9vdGJsb2NrX2NoZWNrc3VtKGJvb3QpOworCQorCS8qIGNoZWNrIG1hZ2ljICovCisJaWYgKFBFRF9MRTMyX1RPX0NQVSAobGFiZWwtPmRfbWFnaWMpICE9IEJTRF9ESVNLTUFHSUMpCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBQZWREaXNrKgorYnNkX2FsbG9jIChjb25zdCBQZWREZXZpY2UqIGRldikKK3sKKwlQZWREaXNrKglkaXNrOworCUJTRERpc2tEYXRhKglic2Rfc3BlY2lmaWM7CisJQlNEUmF3TGFiZWwqCWxhYmVsOworCisJUEVEX0FTU0VSVChkZXYtPnNlY3Rvcl9zaXplICUgUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQgPT0gMCwgcmV0dXJuIDApOworCisJZGlzayA9IF9wZWRfZGlza19hbGxvYyAoKFBlZERldmljZSopZGV2LCAmYnNkX2Rpc2tfdHlwZSk7CisJaWYgKCFkaXNrKQorCQlnb3RvIGVycm9yOworCWRpc2stPmRpc2tfc3BlY2lmaWMgPSBic2Rfc3BlY2lmaWMgPSBwZWRfbWFsbG9jIChzaXplb2YgKEJTRERpc2tEYXRhKSk7CisJaWYgKCFic2Rfc3BlY2lmaWMpCisJCWdvdG8gZXJyb3JfZnJlZV9kaXNrOworCisJbGFiZWwgPSAoQlNEUmF3TGFiZWwqKSAoYnNkX3NwZWNpZmljLT5ib290X2NvZGUgKyBCU0RfTEFCRUxfT0ZGU0VUKTsKKwltZW1zZXQobGFiZWwsIDAsIHNpemVvZihCU0RSYXdMYWJlbCkpOworCisJbGFiZWwtPmRfbWFnaWMgPSBQRURfQ1BVX1RPX0xFMzIgKEJTRF9ESVNLTUFHSUMpOworCWxhYmVsLT5kX3R5cGUgPSBQRURfQ1BVX1RPX0xFMTYgKEJTRF9EVFlQRV9TQ1NJKTsKKwlsYWJlbC0+ZF9mbGFncyA9IDA7CisJbGFiZWwtPmRfc2Vjc2l6ZSA9IFBFRF9DUFVfVE9fTEUxNiAoZGV2LT5zZWN0b3Jfc2l6ZSk7CisJbGFiZWwtPmRfbnNlY3RvcnMgPSBQRURfQ1BVX1RPX0xFMzIgKGRldi0+Ymlvc19nZW9tLnNlY3RvcnMpOworCWxhYmVsLT5kX250cmFja3MgPSBQRURfQ1BVX1RPX0xFMzIgKGRldi0+Ymlvc19nZW9tLmhlYWRzKTsKKwlsYWJlbC0+ZF9uY3lsaW5kZXJzID0gUEVEX0NQVV9UT19MRTMyIChkZXYtPmJpb3NfZ2VvbS5jeWxpbmRlcnMpOworCWxhYmVsLT5kX3NlY3BlcmN5bCA9IFBFRF9DUFVfVE9fTEUzMiAoZGV2LT5iaW9zX2dlb20uc2VjdG9ycworCQkJCQkJKiBkZXYtPmJpb3NfZ2VvbS5oZWFkcyk7CisJbGFiZWwtPmRfc2VjcGVydW5pdAorCQk9IFBFRF9DUFVfVE9fTEUzMiAoZGV2LT5iaW9zX2dlb20uc2VjdG9ycworCQkJCSAgICogZGV2LT5iaW9zX2dlb20uaGVhZHMKKwkJCQkgICAqIGRldi0+Ymlvc19nZW9tLmN5bGluZGVycyk7CisJCisJbGFiZWwtPmRfcnBtID0gUEVEX0NQVV9UT19MRTE2ICgzNjAwKTsKKwlsYWJlbC0+ZF9pbnRlcmxlYXZlID0gUEVEX0NQVV9UT19MRTE2ICgxKTs7CisJbGFiZWwtPmRfdHJhY2tza2V3ID0gMDsKKwlsYWJlbC0+ZF9jeWxza2V3ID0gMDsKKwlsYWJlbC0+ZF9oZWFkc3dpdGNoID0gMDsKKwlsYWJlbC0+ZF90cmtzZWVrID0gMDsKKwkKKwlsYWJlbC0+ZF9tYWdpYzIgPSBQRURfQ1BVX1RPX0xFMzIgKEJTRF9ESVNLTUFHSUMpOworCWxhYmVsLT5kX2Jic2l6ZSA9IFBFRF9DUFVfVE9fTEUzMiAoQlNEX0JCU0laRSk7CisJbGFiZWwtPmRfc2JzaXplID0gUEVEX0NQVV9UT19MRTMyIChCU0RfU0JTSVpFKTsKKwkKKwlsYWJlbC0+ZF9ucGFydGl0aW9ucyA9IDA7CisJbGFiZWwtPmRfY2hlY2tzdW0gPSB4YnNkX2RrY2tzdW0gKGxhYmVsKTsKKwlyZXR1cm4gZGlzazsKKworZXJyb3JfZnJlZV9kaXNrOgorCXBlZF9mcmVlIChkaXNrKTsKK2Vycm9yOgorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgUGVkRGlzayoKK2JzZF9kdXBsaWNhdGUgKGNvbnN0IFBlZERpc2sqIGRpc2spCit7CisJUGVkRGlzayoJbmV3X2Rpc2s7CisJQlNERGlza0RhdGEqCW5ld19ic2RfZGF0YTsKKwlCU0REaXNrRGF0YSoJb2xkX2JzZF9kYXRhID0gKEJTRERpc2tEYXRhKikgZGlzay0+ZGlza19zcGVjaWZpYzsKKyAgICAgICAKKwluZXdfZGlzayA9IHBlZF9kaXNrX25ld19mcmVzaCAoZGlzay0+ZGV2LCAmYnNkX2Rpc2tfdHlwZSk7CisJaWYgKCFuZXdfZGlzaykKKwkJcmV0dXJuIE5VTEw7CisKKwluZXdfYnNkX2RhdGEgPSAoQlNERGlza0RhdGEqKSBuZXdfZGlzay0+ZGlza19zcGVjaWZpYzsKKwltZW1jcHkgKG5ld19ic2RfZGF0YS0+Ym9vdF9jb2RlLCBvbGRfYnNkX2RhdGEtPmJvb3RfY29kZSwgNTEyKTsKKwlyZXR1cm4gbmV3X2Rpc2s7Cit9CisKK3N0YXRpYyB2b2lkCitic2RfZnJlZSAoUGVkRGlzayogZGlzaykKK3sKKwlwZWRfZnJlZSAoZGlzay0+ZGlza19zcGVjaWZpYyk7CisJX3BlZF9kaXNrX2ZyZWUgKGRpc2spOworfQorCisjaWZuZGVmIERJU0NPVkVSX09OTFkKK3N0YXRpYyBpbnQKK2JzZF9jbG9iYmVyIChQZWREZXZpY2UqIGRldikKK3sKKwljaGFyCQlib290IFs1MTJdOworCUJTRFJhd0xhYmVsKglsYWJlbCA9IChCU0RSYXdMYWJlbCAqKSAoYm9vdCArIEJTRF9MQUJFTF9PRkZTRVQpOworCisJaWYgKCFwZWRfZGV2aWNlX3JlYWQgKGRldiwgYm9vdCwgMCwgMSkpCisJCXJldHVybiAwOworCWxhYmVsLT5kX21hZ2ljID0gMDsKKwlyZXR1cm4gcGVkX2RldmljZV93cml0ZSAoZGV2LCAodm9pZCopIGJvb3QsIDAsIDEpOworfQorI2VuZGlmIC8qICFESVNDT1ZFUl9PTkxZICovCisKK3N0YXRpYyBpbnQKK2JzZF9yZWFkIChQZWREaXNrKiBkaXNrKQoreworCUJTRERpc2tEYXRhKglic2Rfc3BlY2lmaWMgPSAoQlNERGlza0RhdGEqKSBkaXNrLT5kaXNrX3NwZWNpZmljOworCUJTRFJhd0xhYmVsKglsYWJlbDsKKwlpbnQgCQlpOworCQorCXBlZF9kaXNrX2RlbGV0ZV9hbGwgKGRpc2spOworCisJaWYgKCFwZWRfZGV2aWNlX3JlYWQgKGRpc2stPmRldiwgYnNkX3NwZWNpZmljLT5ib290X2NvZGUsIDAsIDEpKQorCQlnb3RvIGVycm9yOworCWxhYmVsID0gKEJTRFJhd0xhYmVsICopIChic2Rfc3BlY2lmaWMtPmJvb3RfY29kZSArIEJTRF9MQUJFTF9PRkZTRVQpOworCisJZm9yIChpID0gMTsgaSA8PSBCU0RfTUFYUEFSVElUSU9OUzsgaSsrKSB7CisJCVBlZFBhcnRpdGlvbiogCQlwYXJ0OworCQlCU0RQYXJ0aXRpb25EYXRhKglic2RfcGFydF9kYXRhOworCQlQZWRTZWN0b3IJCXN0YXJ0OworCQlQZWRTZWN0b3IJCWVuZDsKKwkJUGVkQ29uc3RyYWludCoJCWNvbnN0cmFpbnRfZXhhY3Q7CisKKwkJaWYgKCFsYWJlbC0+ZF9wYXJ0aXRpb25zW2kgLSAxXS5wX3NpemUKKwkJICAgIHx8ICFsYWJlbC0+ZF9wYXJ0aXRpb25zW2kgLSAxXS5wX2ZzdHlwZSkKKwkJCWNvbnRpbnVlOworCQlzdGFydCA9IFBFRF9MRTMyX1RPX0NQVShsYWJlbC0+ZF9wYXJ0aXRpb25zW2kgLSAxXS5wX29mZnNldCk7CisJCWVuZCA9IFBFRF9MRTMyX1RPX0NQVShsYWJlbC0+ZF9wYXJ0aXRpb25zW2kgLSAxXS5wX29mZnNldCkKKwkJICAgICAgKyBQRURfTEUzMl9UT19DUFUobGFiZWwtPmRfcGFydGl0aW9uc1tpIC0gMV0ucF9zaXplKSAtIDE7CisJCXBhcnQgPSBwZWRfcGFydGl0aW9uX25ldyAoZGlzaywgMCwgTlVMTCwgc3RhcnQsIGVuZCk7CisJCWlmICghcGFydCkKKwkJCWdvdG8gZXJyb3I7CisJCWJzZF9wYXJ0X2RhdGEgPSBwYXJ0LT5kaXNrX3NwZWNpZmljOworCQlic2RfcGFydF9kYXRhLT50eXBlID0gbGFiZWwtPmRfcGFydGl0aW9uc1tpIC0gMV0ucF9mc3R5cGU7CisJCXBhcnQtPm51bSA9IGk7CisJCXBhcnQtPmZzX3R5cGUgPSBwZWRfZmlsZV9zeXN0ZW1fcHJvYmUgKCZwYXJ0LT5nZW9tKTsKKwkJCisJCWNvbnN0cmFpbnRfZXhhY3QgPSBwZWRfY29uc3RyYWludF9leGFjdCAoJnBhcnQtPmdlb20pOworCQlpZiAoIXBlZF9kaXNrX2FkZF9wYXJ0aXRpb24gKGRpc2ssIHBhcnQsIGNvbnN0cmFpbnRfZXhhY3QpKQorCQkJZ290byBlcnJvcjsKKwkJcGVkX2NvbnN0cmFpbnRfZGVzdHJveSAoY29uc3RyYWludF9leGFjdCk7CisJfQorCisJcmV0dXJuIDE7CisKK2Vycm9yOgorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorX3Byb2JlX2FuZF9hZGRfYm9vdF9jb2RlIChjb25zdCBQZWREaXNrKiBkaXNrKQoreworCUJTRERpc2tEYXRhKgkJYnNkX3NwZWNpZmljOworCUJTRFJhd0xhYmVsKgkJb2xkX2xhYmVsOworCWNoYXIJCQlvbGRfYm9vdF9jb2RlIFs1MTJdOworCisJYnNkX3NwZWNpZmljID0gKEJTRERpc2tEYXRhKikgZGlzay0+ZGlza19zcGVjaWZpYzsKKwlvbGRfbGFiZWwgPSAoQlNEUmF3TGFiZWwqKSAob2xkX2Jvb3RfY29kZSArIEJTRF9MQUJFTF9PRkZTRVQpOworCisJaWYgKCFwZWRfZGV2aWNlX3JlYWQgKGRpc2stPmRldiwgb2xkX2Jvb3RfY29kZSwgMCwgMSkpCisJCXJldHVybjsKKwlpZiAob2xkX2Jvb3RfY29kZSBbMF0KKwkgICAgJiYgb2xkX2xhYmVsLT5kX21hZ2ljID09IFBFRF9DUFVfVE9fTEUzMiAoQlNEX0RJU0tNQUdJQykpCisJCW1lbWNweSAoYnNkX3NwZWNpZmljLT5ib290X2NvZGUsIG9sZF9ib290X2NvZGUsIDUxMik7Cit9CisKKyNpZm5kZWYgRElTQ09WRVJfT05MWQorc3RhdGljIGludAorYnNkX3dyaXRlIChjb25zdCBQZWREaXNrKiBkaXNrKQoreworCUJTRERpc2tEYXRhKgkJYnNkX3NwZWNpZmljOworCUJTRFJhd0xhYmVsKgkJbGFiZWw7CisJQlNEUGFydGl0aW9uRGF0YSoJYnNkX2RhdGE7CisJUGVkUGFydGl0aW9uKgkJcGFydDsKKwlpbnQJCQlpOworCWludAkJCW1heF9wYXJ0ID0gMDsKKworCVBFRF9BU1NFUlQgKGRpc2sgIT0gTlVMTCwgcmV0dXJuIDApOworCVBFRF9BU1NFUlQgKGRpc2stPmRldiAhPSBOVUxMLCByZXR1cm4gMCk7CisKKwlic2Rfc3BlY2lmaWMgPSAoQlNERGlza0RhdGEqKSBkaXNrLT5kaXNrX3NwZWNpZmljOworCWxhYmVsID0gKEJTRFJhd0xhYmVsICopIChic2Rfc3BlY2lmaWMtPmJvb3RfY29kZSArIEJTRF9MQUJFTF9PRkZTRVQpOworCisJaWYgKCFic2Rfc3BlY2lmaWMtPmJvb3RfY29kZSBbMF0pCisJCV9wcm9iZV9hbmRfYWRkX2Jvb3RfY29kZSAoZGlzayk7CisKKwltZW1zZXQgKGxhYmVsLT5kX3BhcnRpdGlvbnMsIDAsCisJCXNpemVvZiAoQlNEUmF3UGFydGl0aW9uKSAqIEJTRF9NQVhQQVJUSVRJT05TKTsKKworCWZvciAoaSA9IDE7IGkgPD0gQlNEX01BWFBBUlRJVElPTlM7IGkrKykgeworCQlwYXJ0ID0gcGVkX2Rpc2tfZ2V0X3BhcnRpdGlvbiAoZGlzaywgaSk7CisJCWlmICghcGFydCkKKwkJCWNvbnRpbnVlOworCQlic2RfZGF0YSA9IHBhcnQtPmRpc2tfc3BlY2lmaWM7CisJCWxhYmVsLT5kX3BhcnRpdGlvbnNbaSAtIDFdLnBfZnN0eXBlID0gYnNkX2RhdGEtPnR5cGU7CisJCWxhYmVsLT5kX3BhcnRpdGlvbnNbaSAtIDFdLnBfb2Zmc2V0CisJCQk9IFBFRF9DUFVfVE9fTEUzMiAocGFydC0+Z2VvbS5zdGFydCk7CisJCWxhYmVsLT5kX3BhcnRpdGlvbnNbaSAtIDFdLnBfc2l6ZQorCQkJPSBQRURfQ1BVX1RPX0xFMzIgKHBhcnQtPmdlb20ubGVuZ3RoKTsKKwkJbWF4X3BhcnQgPSBpOworCX0KKworCWxhYmVsLT5kX25wYXJ0aXRpb25zID0gUEVEX0NQVV9UT19MRTE2IChtYXhfcGFydCkgKyAxOworCWxhYmVsLT5kX2NoZWNrc3VtID0geGJzZF9ka2Nrc3VtIChsYWJlbCk7CisKKwlhbHBoYV9ib290YmxvY2tfY2hlY2tzdW0gKGJzZF9zcGVjaWZpYy0+Ym9vdF9jb2RlKTsKKworCWlmICghcGVkX2RldmljZV93cml0ZSAoZGlzay0+ZGV2LCAodm9pZCopIGJzZF9zcGVjaWZpYy0+Ym9vdF9jb2RlLAorCQkJICAgICAgIDAsIDEpKQorCQlnb3RvIGVycm9yOworCXJldHVybiBwZWRfZGV2aWNlX3N5bmMgKGRpc2stPmRldik7CisKK2Vycm9yOgorCXJldHVybiAwOworfQorI2VuZGlmIC8qICFESVNDT1ZFUl9PTkxZICovCisKK3N0YXRpYyBQZWRQYXJ0aXRpb24qCitic2RfcGFydGl0aW9uX25ldyAoY29uc3QgUGVkRGlzayogZGlzaywgUGVkUGFydGl0aW9uVHlwZSBwYXJ0X3R5cGUsCisJCSAgIGNvbnN0IFBlZEZpbGVTeXN0ZW1UeXBlKiBmc190eXBlLAorCQkgICBQZWRTZWN0b3Igc3RhcnQsIFBlZFNlY3RvciBlbmQpCit7CisJUGVkUGFydGl0aW9uKgkJcGFydDsKKwlCU0RQYXJ0aXRpb25EYXRhKglic2RfZGF0YTsKKworCXBhcnQgPSBfcGVkX3BhcnRpdGlvbl9hbGxvYyAoZGlzaywgcGFydF90eXBlLCBmc190eXBlLCBzdGFydCwgZW5kKTsKKwlpZiAoIXBhcnQpCisJCWdvdG8gZXJyb3I7CisKKwlpZiAocGVkX3BhcnRpdGlvbl9pc19hY3RpdmUgKHBhcnQpKSB7CisJCXBhcnQtPmRpc2tfc3BlY2lmaWMKKwkJICAgICAgIAk9IGJzZF9kYXRhID0gcGVkX21hbGxvYyAoc2l6ZW9mIChCU0RQYXJ0aXRpb25EYXRhKSk7CisJCWlmICghYnNkX2RhdGEpCisJCQlnb3RvIGVycm9yX2ZyZWVfcGFydDsKKwkJYnNkX2RhdGEtPnR5cGUgPSAwOworCX0gZWxzZSB7CisJCXBhcnQtPmRpc2tfc3BlY2lmaWMgPSBOVUxMOworCX0KKwlyZXR1cm4gcGFydDsKKworCXBlZF9mcmVlIChic2RfZGF0YSk7CitlcnJvcl9mcmVlX3BhcnQ6CisJcGVkX2ZyZWUgKHBhcnQpOworZXJyb3I6CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBQZWRQYXJ0aXRpb24qCitic2RfcGFydGl0aW9uX2R1cGxpY2F0ZSAoY29uc3QgUGVkUGFydGl0aW9uKiBwYXJ0KQoreworCVBlZFBhcnRpdGlvbioJCW5ld19wYXJ0OworCUJTRFBhcnRpdGlvbkRhdGEqCW5ld19ic2RfZGF0YTsKKwlCU0RQYXJ0aXRpb25EYXRhKglvbGRfYnNkX2RhdGE7CisKKwluZXdfcGFydCA9IHBlZF9wYXJ0aXRpb25fbmV3IChwYXJ0LT5kaXNrLCBwYXJ0LT50eXBlLAorCQkJCSAgICAgIHBhcnQtPmZzX3R5cGUsIHBhcnQtPmdlb20uc3RhcnQsCisJCQkJICAgICAgcGFydC0+Z2VvbS5lbmQpOworCWlmICghbmV3X3BhcnQpCisJCXJldHVybiBOVUxMOworCW5ld19wYXJ0LT5udW0gPSBwYXJ0LT5udW07CisKKwlvbGRfYnNkX2RhdGEgPSAoQlNEUGFydGl0aW9uRGF0YSopIHBhcnQtPmRpc2tfc3BlY2lmaWM7CisJbmV3X2JzZF9kYXRhID0gKEJTRFBhcnRpdGlvbkRhdGEqKSBuZXdfcGFydC0+ZGlza19zcGVjaWZpYzsKKwluZXdfYnNkX2RhdGEtPnR5cGUgPSBvbGRfYnNkX2RhdGEtPnR5cGU7CisJcmV0dXJuIG5ld19wYXJ0OworfQorCitzdGF0aWMgdm9pZAorYnNkX3BhcnRpdGlvbl9kZXN0cm95IChQZWRQYXJ0aXRpb24qIHBhcnQpCit7CisJUEVEX0FTU0VSVCAocGFydCAhPSBOVUxMLCByZXR1cm4pOworCisJaWYgKHBlZF9wYXJ0aXRpb25faXNfYWN0aXZlIChwYXJ0KSkKKwkJcGVkX2ZyZWUgKHBhcnQtPmRpc2tfc3BlY2lmaWMpOworCV9wZWRfcGFydGl0aW9uX2ZyZWUgKHBhcnQpOworfQorCitzdGF0aWMgaW50Citic2RfcGFydGl0aW9uX3NldF9zeXN0ZW0gKFBlZFBhcnRpdGlvbiogcGFydCwgY29uc3QgUGVkRmlsZVN5c3RlbVR5cGUqIGZzX3R5cGUpCit7CisJQlNEUGFydGl0aW9uRGF0YSogYnNkX2RhdGEgPSBwYXJ0LT5kaXNrX3NwZWNpZmljOworCisJcGFydC0+ZnNfdHlwZSA9IGZzX3R5cGU7CisKKwlpZiAoIWZzX3R5cGUpCisJCWJzZF9kYXRhLT50eXBlID0gMHg4OworCWVsc2UgaWYgKCFzdHJjbXAgKGZzX3R5cGUtPm5hbWUsICJsaW51eC1zd2FwIikpCisJCWJzZF9kYXRhLT50eXBlID0gMHgxOworCWVsc2UKKwkJYnNkX2RhdGEtPnR5cGUgPSAweDg7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludAorYnNkX3BhcnRpdGlvbl9zZXRfZmxhZyAoUGVkUGFydGl0aW9uKiBwYXJ0LCBQZWRQYXJ0aXRpb25GbGFnIGZsYWcsIGludCBzdGF0ZSkKK3sKKwkvKiBubyBmbGFncyBmb3IgYnNkICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2JzZF9wYXJ0aXRpb25fZ2V0X2ZsYWcgKGNvbnN0IFBlZFBhcnRpdGlvbiogcGFydCwgUGVkUGFydGl0aW9uRmxhZyBmbGFnKQoreworCS8qIG5vIGZsYWdzIGZvciBic2QgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorYnNkX3BhcnRpdGlvbl9pc19mbGFnX2F2YWlsYWJsZSAoY29uc3QgUGVkUGFydGl0aW9uKiBwYXJ0LAorCQkJCSBQZWRQYXJ0aXRpb25GbGFnIGZsYWcpCit7CisJLyogbm8gZmxhZ3MgZm9yIGJzZCAqLworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQKK2JzZF9nZXRfbWF4X3ByaW1hcnlfcGFydGl0aW9uX2NvdW50IChjb25zdCBQZWREaXNrKiBkaXNrKQoreworCXJldHVybiBCU0RfTUFYUEFSVElUSU9OUzsKK30KKworc3RhdGljIFBlZENvbnN0cmFpbnQqCitfZ2V0X2NvbnN0cmFpbnQgKGNvbnN0IFBlZERldmljZSogZGV2KQoreworCVBlZEdlb21ldHJ5CW1heDsKKworCXBlZF9nZW9tZXRyeV9pbml0ICgmbWF4LCBkZXYsIDEsIGRldi0+bGVuZ3RoIC0gMSk7CisJcmV0dXJuIHBlZF9jb25zdHJhaW50X25ld19mcm9tX21heCAoJm1heCk7Cit9CisKK3N0YXRpYyBpbnQKK2JzZF9wYXJ0aXRpb25fYWxpZ24gKFBlZFBhcnRpdGlvbiogcGFydCwgY29uc3QgUGVkQ29uc3RyYWludCogY29uc3RyYWludCkKK3sKKwlpZiAoX3BlZF9wYXJ0aXRpb25fYXR0ZW1wdF9hbGlnbiAocGFydCwgY29uc3RyYWludCwKKwkJCQkJICBfZ2V0X2NvbnN0cmFpbnQgKHBhcnQtPmRpc2stPmRldikpKQorCSAgICAgICAJcmV0dXJuIDE7CisKKyNpZm5kZWYgRElTQ09WRVJfT05MWQorCXBlZF9leGNlcHRpb25fdGhyb3cgKAorCQlQRURfRVhDRVBUSU9OX0VSUk9SLAorCQlQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJXygiVW5hYmxlIHRvIHNhdGlzZnkgYWxsIGNvbnN0cmFpbnRzIG9uIHRoZSBwYXJ0aXRpb24uIikpOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2JzZF9wYXJ0aXRpb25fZW51bWVyYXRlIChQZWRQYXJ0aXRpb24qIHBhcnQpCit7CisJaW50IGk7CisJUGVkUGFydGl0aW9uKiBwOworCQorCS8qIG5ldmVyIGNoYW5nZSB0aGUgcGFydGl0aW9uIG51bWJlcnMgKi8KKwlpZiAocGFydC0+bnVtICE9IC0xKQorCQlyZXR1cm4gMTsKKwlmb3IgKGkgPSAxOyBpIDw9IEJTRF9NQVhQQVJUSVRJT05TOyBpKyspIHsKKwkJcCA9IHBlZF9kaXNrX2dldF9wYXJ0aXRpb24gKHBhcnQtPmRpc2ssIGkpOworCQlpZiAoIXApIHsKKwkJCXBhcnQtPm51bSA9IGk7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCS8qIGZhaWxlZCB0byBhbGxvY2F0ZSBhIG51bWJlciAqLworI2lmbmRlZiBESVNDT1ZFUl9PTkxZCisJcGVkX2V4Y2VwdGlvbl90aHJvdyAoUEVEX0VYQ0VQVElPTl9FUlJPUiwgUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQkgICAgIF8oIlVuYWJsZSB0byBhbGxvY2F0ZSBhIGJzZCBkaXNrbGFiZWwgc2xvdC4iKSk7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorYnNkX2FsbG9jX21ldGFkYXRhIChQZWREaXNrKiBkaXNrKQoreworCVBlZFBhcnRpdGlvbioJCW5ld19wYXJ0OworCVBlZENvbnN0cmFpbnQqCQljb25zdHJhaW50X2FueSA9IE5VTEw7CisKKwlQRURfQVNTRVJUIChkaXNrICE9IE5VTEwsIGdvdG8gZXJyb3IpOworCVBFRF9BU1NFUlQgKGRpc2stPmRldiAhPSBOVUxMLCBnb3RvIGVycm9yKTsKKworCWNvbnN0cmFpbnRfYW55ID0gcGVkX2NvbnN0cmFpbnRfYW55IChkaXNrLT5kZXYpOworCisJLyogYWxsb2NhdGUgMSBzZWN0b3IgZm9yIHRoZSBkaXNrIGxhYmVsIGF0IHRoZSBzdGFydCAqLworCW5ld19wYXJ0ID0gcGVkX3BhcnRpdGlvbl9uZXcgKGRpc2ssIFBFRF9QQVJUSVRJT05fTUVUQURBVEEsIE5VTEwsIDAsIDApOworCWlmICghbmV3X3BhcnQpCisJCWdvdG8gZXJyb3I7CisKKwlpZiAoIXBlZF9kaXNrX2FkZF9wYXJ0aXRpb24gKGRpc2ssIG5ld19wYXJ0LCBjb25zdHJhaW50X2FueSkpIHsKKwkJcGVkX3BhcnRpdGlvbl9kZXN0cm95IChuZXdfcGFydCk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJcGVkX2NvbnN0cmFpbnRfZGVzdHJveSAoY29uc3RyYWludF9hbnkpOworCXJldHVybiAxOworZXJyb3I6CisJcGVkX2NvbnN0cmFpbnRfZGVzdHJveSAoY29uc3RyYWludF9hbnkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgUGVkRGlza09wcyBic2RfZGlza19vcHMgPSB7CisJcHJvYmU6CQkJYnNkX3Byb2JlLAorI2lmbmRlZiBESVNDT1ZFUl9PTkxZCisJY2xvYmJlcjoJCWJzZF9jbG9iYmVyLAorI2Vsc2UKKwljbG9iYmVyOgkJTlVMTCwKKyNlbmRpZgorCWFsbG9jOgkJCWJzZF9hbGxvYywKKwlkdXBsaWNhdGU6CQlic2RfZHVwbGljYXRlLAorCWZyZWU6CQkJYnNkX2ZyZWUsCisJcmVhZDoJCQlic2RfcmVhZCwKKyNpZm5kZWYgRElTQ09WRVJfT05MWQorCXdyaXRlOgkJCWJzZF93cml0ZSwKKyNlbHNlCisJd3JpdGU6CQkJTlVMTCwKKyNlbmRpZgorCisJcGFydGl0aW9uX25ldzoJCWJzZF9wYXJ0aXRpb25fbmV3LAorCXBhcnRpdGlvbl9kdXBsaWNhdGU6CWJzZF9wYXJ0aXRpb25fZHVwbGljYXRlLAorCXBhcnRpdGlvbl9kZXN0cm95Oglic2RfcGFydGl0aW9uX2Rlc3Ryb3ksCisJcGFydGl0aW9uX3NldF9zeXN0ZW06CWJzZF9wYXJ0aXRpb25fc2V0X3N5c3RlbSwKKwlwYXJ0aXRpb25fc2V0X2ZsYWc6CWJzZF9wYXJ0aXRpb25fc2V0X2ZsYWcsCisJcGFydGl0aW9uX2dldF9mbGFnOglic2RfcGFydGl0aW9uX2dldF9mbGFnLAorCXBhcnRpdGlvbl9pc19mbGFnX2F2YWlsYWJsZToJYnNkX3BhcnRpdGlvbl9pc19mbGFnX2F2YWlsYWJsZSwKKwlwYXJ0aXRpb25fc2V0X25hbWU6CU5VTEwsCisJcGFydGl0aW9uX2dldF9uYW1lOglOVUxMLAorCXBhcnRpdGlvbl9hbGlnbjoJYnNkX3BhcnRpdGlvbl9hbGlnbiwKKwlwYXJ0aXRpb25fZW51bWVyYXRlOglic2RfcGFydGl0aW9uX2VudW1lcmF0ZSwKKworCWFsbG9jX21ldGFkYXRhOgkJYnNkX2FsbG9jX21ldGFkYXRhLAorCWdldF9tYXhfcHJpbWFyeV9wYXJ0aXRpb25fY291bnQ6CisJCQkJYnNkX2dldF9tYXhfcHJpbWFyeV9wYXJ0aXRpb25fY291bnQKK307CisKK3N0YXRpYyBQZWREaXNrVHlwZSBic2RfZGlza190eXBlID0geworCW5leHQ6CQlOVUxMLAorCW5hbWU6CQkiYnNkIiwKKwlvcHM6CQkmYnNkX2Rpc2tfb3BzLAorCWZlYXR1cmVzOgkwCit9OworCit2b2lkCitwZWRfZGlza19ic2RfaW5pdCAoKQoreworCVBFRF9BU1NFUlQgKHNpemVvZiAoQlNEUmF3UGFydGl0aW9uKSA9PSAxNiwgcmV0dXJuKTsKKwlQRURfQVNTRVJUIChzaXplb2YgKEJTRFJhd0xhYmVsKSA9PSAyNzYsIHJldHVybik7CisKKwlwZWRfZGlza190eXBlX3JlZ2lzdGVyICgmYnNkX2Rpc2tfdHlwZSk7Cit9CisKK3ZvaWQKK3BlZF9kaXNrX2JzZF9kb25lICgpCit7CisJcGVkX2Rpc2tfdHlwZV91bnJlZ2lzdGVyICgmYnNkX2Rpc2tfdHlwZSk7Cit9CmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2xhYmVscy9kYXNkLmMgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2xhYmVscy9kYXNkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjExYmM1MgotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvbGFiZWxzL2Rhc2QuYwpAQCAtMCwwICsxLDg2NCBAQAorLyogLSotIE1vZGU6IGM7IHRhYi13aWR0aDogODsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogOCAtKi0KKworICAgIGxpYnBhcnRlZCAtIGEgbGlicmFyeSBmb3IgbWFuaXB1bGF0aW5nIGRpc2sgcGFydGl0aW9ucworICAgIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKworICAgIENvbnRyaWJ1dG9yOiAgUGhpbCBLbmlyc2NoIDxwaGlsQHJlZGhhdC5kZT4KKyAgICAgICAgICAgICAgICAgIEhhcmFsZCBIb3llciA8aGFyYWxkQHJlZGhhdC5kZT4KKyovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxwYXJ0ZWQvcGFydGVkLmg+CisjaW5jbHVkZSA8cGFydGVkL2VuZGlhbi5oPgorI2luY2x1ZGUgPHBhcnRlZC9kZWJ1Zy5oPgorCisjaW5jbHVkZSA8cGFydGVkL3Z0b2MuaD4KKyNpbmNsdWRlIDxwYXJ0ZWQvZmRhc2QuaD4KKyNpbmNsdWRlIDxwYXJ0ZWQvbGludXguaD4KKworI2luY2x1ZGUgPGxpYmludGwuaD4KKyNpZiBFTkFCTEVfTkxTCisjICBkZWZpbmUgXyhTdHJpbmcpIGRnZXR0ZXh0IChQQUNLQUdFLCBTdHJpbmcpCisjZWxzZQorIyAgZGVmaW5lIF8oU3RyaW5nKSAoU3RyaW5nKQorI2VuZGlmIC8qIEVOQUJMRV9OTFMgKi8KKworI2RlZmluZSBQQVJUSVRJT05fTElOVVhfU1dBUCAweDgyCisjZGVmaW5lIFBBUlRJVElPTl9MSU5VWCAweDgzCisjZGVmaW5lIFBBUlRJVElPTl9MSU5VWF9FWFQgMHg4NQorI2RlZmluZSBQQVJUSVRJT05fTElOVVhfTFZNIDB4OGUKKyNkZWZpbmUgUEFSVElUSU9OX0xJTlVYX1JBSUQgMHhmZAorI2RlZmluZSBQQVJUSVRJT05fTElOVVhfTFZNX09MRCAweGZlCisKK2V4dGVybiB2b2lkIHBlZF9kaXNrX2Rhc2RfaW5pdCAoKTsKK2V4dGVybiB2b2lkIHBlZF9kaXNrX2Rhc2RfZG9uZSAoKTsKKworI2RlZmluZSBEQVNEX05BTUUgImRhc2QiCisKK3R5cGVkZWYgc3RydWN0IHsKKwlpbnQgdHlwZTsKKwlpbnQgc3lzdGVtOworCWludAlyYWlkOworCWludAlsdm07CisJdm9pZCAqcGFydF9pbmZvOworfSBEYXNkUGFydGl0aW9uRGF0YTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludCByZWFsX3NlY3Rvcl9zaXplOworCXVuc2lnbmVkIGludCBmb3JtYXRfdHlwZTsKKwkvKiBJQk0gaW50ZXJuYWwgZGFzZCBzdHJ1Y3R1cmUgKGkgZ3Vlc3MgOyksIHJlcXVpcmVkLiAqLworCXN0cnVjdCBmZGFzZF9hbmNob3IgKmFuY2hvcjsKK30gRGFzZERpc2tTcGVjaWZpYzsKKworc3RhdGljIGludCBkYXNkX3Byb2JlIChjb25zdCBQZWREZXZpY2UgKmRldik7CitzdGF0aWMgaW50IGRhc2RfY2xvYmJlciAoUGVkRGV2aWNlKiBkZXYpOworc3RhdGljIGludCBkYXNkX3JlYWQgKFBlZERpc2sqIGRpc2spOworc3RhdGljIGludCBkYXNkX3dyaXRlIChjb25zdCBQZWREaXNrKiBkaXNrKTsKKworc3RhdGljIFBlZFBhcnRpdGlvbiogZGFzZF9wYXJ0aXRpb25fbmV3IChjb25zdCBQZWREaXNrKiBkaXNrLAorCQkJCQkJCQkJCSBQZWRQYXJ0aXRpb25UeXBlIHBhcnRfdHlwZSwKKwkJCQkJCQkJCQkgY29uc3QgUGVkRmlsZVN5c3RlbVR5cGUqIGZzX3R5cGUsCisJCQkJCQkJCQkJIFBlZFNlY3RvciBzdGFydCwKKwkJCQkJCQkJCQkgUGVkU2VjdG9yIGVuZCk7CitzdGF0aWMgdm9pZCBkYXNkX3BhcnRpdGlvbl9kZXN0cm95IChQZWRQYXJ0aXRpb24qIHBhcnQpOworc3RhdGljIGludCBkYXNkX3BhcnRpdGlvbl9zZXRfZmxhZyAoUGVkUGFydGl0aW9uKiBwYXJ0LAorCQkJCQkJCQkJUGVkUGFydGl0aW9uRmxhZyBmbGFnLAorCQkJCQkJCQkJaW50IHN0YXRlKTsKK3N0YXRpYyBpbnQgZGFzZF9wYXJ0aXRpb25fZ2V0X2ZsYWcgKGNvbnN0IFBlZFBhcnRpdGlvbiogcGFydCwKKwkJCQkJCQkJCVBlZFBhcnRpdGlvbkZsYWcgZmxhZyk7CitzdGF0aWMgaW50IGRhc2RfcGFydGl0aW9uX2lzX2ZsYWdfYXZhaWxhYmxlIChjb25zdCBQZWRQYXJ0aXRpb24qIHBhcnQsCisJCQkJCQkJCQkJCSBQZWRQYXJ0aXRpb25GbGFnIGZsYWcpOworc3RhdGljIGludCBkYXNkX3BhcnRpdGlvbl9hbGlnbiAoUGVkUGFydGl0aW9uKiBwYXJ0LAorCQkJCQkJCQkgY29uc3QgUGVkQ29uc3RyYWludCogY29uc3RyYWludCk7CitzdGF0aWMgaW50IGRhc2RfcGFydGl0aW9uX2VudW1lcmF0ZSAoUGVkUGFydGl0aW9uKiBwYXJ0KTsKK3N0YXRpYyBpbnQgZGFzZF9nZXRfbWF4X3ByaW1hcnlfcGFydGl0aW9uX2NvdW50IChjb25zdCBQZWREaXNrKiBkaXNrKTsKKworc3RhdGljIFBlZERpc2sqIGRhc2RfYWxsb2MgKGNvbnN0IFBlZERldmljZSogZGV2KTsKK3N0YXRpYyBQZWREaXNrKiBkYXNkX2R1cGxpY2F0ZSAoY29uc3QgUGVkRGlzayogZGlzayk7CitzdGF0aWMgdm9pZCBkYXNkX2ZyZWUgKFBlZERpc2sqIGRpc2spOworc3RhdGljIGludCBkYXNkX3BhcnRpdGlvbl9zZXRfc3lzdGVtIChQZWRQYXJ0aXRpb24qIHBhcnQsCisJCQkJCQkJCQkgIGNvbnN0IFBlZEZpbGVTeXN0ZW1UeXBlKiBmc190eXBlKTsKK3N0YXRpYyBpbnQgZGFzZF9hbGxvY19tZXRhZGF0YSAoUGVkRGlzayogZGlzayk7CisKK3N0YXRpYyBQZWREaXNrT3BzIGRhc2RfZGlza19vcHMgPSB7CisJcHJvYmU6IGRhc2RfcHJvYmUsCisJY2xvYmJlcjogZGFzZF9jbG9iYmVyLAorCXJlYWQ6IGRhc2RfcmVhZCwKKwl3cml0ZTogZGFzZF93cml0ZSwKKworCWFsbG9jOiBkYXNkX2FsbG9jLAorCWR1cGxpY2F0ZTogZGFzZF9kdXBsaWNhdGUsCisJZnJlZTogZGFzZF9mcmVlLAorCXBhcnRpdGlvbl9zZXRfc3lzdGVtOiBkYXNkX3BhcnRpdGlvbl9zZXRfc3lzdGVtLAorCisJcGFydGl0aW9uX25ldzogZGFzZF9wYXJ0aXRpb25fbmV3LAorCXBhcnRpdGlvbl9kZXN0cm95OiBkYXNkX3BhcnRpdGlvbl9kZXN0cm95LAorCXBhcnRpdGlvbl9zZXRfZmxhZzoJZGFzZF9wYXJ0aXRpb25fc2V0X2ZsYWcsCisJcGFydGl0aW9uX2dldF9mbGFnOglkYXNkX3BhcnRpdGlvbl9nZXRfZmxhZywKKwlwYXJ0aXRpb25faXNfZmxhZ19hdmFpbGFibGU6IGRhc2RfcGFydGl0aW9uX2lzX2ZsYWdfYXZhaWxhYmxlLAorCXBhcnRpdGlvbl9zZXRfbmFtZToJTlVMTCwKKwlwYXJ0aXRpb25fZ2V0X25hbWU6CU5VTEwsCisJcGFydGl0aW9uX2FsaWduOiBkYXNkX3BhcnRpdGlvbl9hbGlnbiwKKwlwYXJ0aXRpb25fZW51bWVyYXRlOiBkYXNkX3BhcnRpdGlvbl9lbnVtZXJhdGUsCisKKwlhbGxvY19tZXRhZGF0YTogZGFzZF9hbGxvY19tZXRhZGF0YSwKKwlnZXRfbWF4X3ByaW1hcnlfcGFydGl0aW9uX2NvdW50OiBkYXNkX2dldF9tYXhfcHJpbWFyeV9wYXJ0aXRpb25fY291bnQsCisKKwlwYXJ0aXRpb25fZHVwbGljYXRlOiBOVUxMCit9OworCitzdGF0aWMgUGVkRGlza1R5cGUgZGFzZF9kaXNrX3R5cGUgPSB7CisJbmV4dDogTlVMTCwKKwluYW1lOiAiZGFzZCIsCisJb3BzOiAmZGFzZF9kaXNrX29wcywKKwlmZWF0dXJlczogMAorfTsKKworc3RhdGljIFBlZERpc2sqCitkYXNkX2FsbG9jIChjb25zdCBQZWREZXZpY2UqIGRldikKK3sKKwlQZWREaXNrKiBkaXNrOworCUxpbnV4U3BlY2lmaWMqIGFyY2hfc3BlY2lmaWM7CisJRGFzZERpc2tTcGVjaWZpYyAqZGlza19zcGVjaWZpYzsKKworCVBFRF9BU1NFUlQgKGRldiAhPSBOVUxMLCByZXR1cm4gTlVMTCk7CisKKwlhcmNoX3NwZWNpZmljID0gTElOVVhfU1BFQ0lGSUMgKGRldik7CisJZGlzayA9IF9wZWRfZGlza19hbGxvYyAoZGV2LCAmZGFzZF9kaXNrX3R5cGUpOworCWlmICghZGlzaykKKwkJcmV0dXJuIE5VTEw7CisKKwlkaXNrLT5kaXNrX3NwZWNpZmljID0gZGlza19zcGVjaWZpYyA9IHBlZF9tYWxsb2Moc2l6ZW9mKERhc2REaXNrU3BlY2lmaWMpKTsKKwlpZiAoIWRpc2stPmRpc2tfc3BlY2lmaWMpIHsKKwkJcGVkX2ZyZWUgKGRpc2spOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKiBiZWNhdXNlIHdlIGxpZSB0byBwYXJ0ZWQgd2UgaGF2ZSB0byBjb21wZW5zYXRlIHdpdGggdGhlCisJICAgcmVhbCBzZWN0b3Igc2l6ZS4gIFJlY29yZCB0aGF0IG5vdy4gKi8KKwlpZiAoaW9jdGwoYXJjaF9zcGVjaWZpYy0+ZmQsIEJMS1NTWkdFVCwKKwkJCSAgJmRpc2tfc3BlY2lmaWMtPnJlYWxfc2VjdG9yX3NpemUpID09IC0xKSB7CisJCXBlZF9leGNlcHRpb25fdGhyb3coUEVEX0VYQ0VQVElPTl9FUlJPUiwgUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQkJCQkJXygiVW5hYmxlIHRvIGRldGVybWluZSB0aGUgYmxvY2sgIgorCQkJCQkJCSAgInNpemUgb2YgdGhpcyBkYXNkIikpOworCQlwZWRfZnJlZShkaXNrX3NwZWNpZmljKTsKKwkJcGVkX2ZyZWUoZGlzayk7CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiBkaXNrOworfQorCitzdGF0aWMgUGVkRGlzayoKK2Rhc2RfZHVwbGljYXRlIChjb25zdCBQZWREaXNrKiBkaXNrKQoreworCVBlZERpc2sqIG5ld19kaXNrOworCisJbmV3X2Rpc2sgPSBwZWRfZGlza19uZXdfZnJlc2goZGlzay0+ZGV2LCAmZGFzZF9kaXNrX3R5cGUpOworCisJaWYgKCFuZXdfZGlzaykKKwkJcmV0dXJuIE5VTEw7CisKKwluZXdfZGlzay0+ZGlza19zcGVjaWZpYyA9IE5VTEw7CisKKwlyZXR1cm4gbmV3X2Rpc2s7Cit9CisKK3N0YXRpYyB2b2lkCitkYXNkX2ZyZWUgKFBlZERpc2sqIGRpc2spCit7CisJUEVEX0FTU0VSVChkaXNrICE9IE5VTEwsIHJldHVybik7CisKKwlfcGVkX2Rpc2tfZnJlZShkaXNrKTsKK30KKworCit2b2lkCitwZWRfZGlza19kYXNkX2luaXQgKCkKK3sKKwlwZWRfZGlza190eXBlX3JlZ2lzdGVyKCZkYXNkX2Rpc2tfdHlwZSk7Cit9CisKK3ZvaWQKK3BlZF9kaXNrX2Rhc2RfZG9uZSAoKQoreworCXBlZF9kaXNrX3R5cGVfdW5yZWdpc3RlcigmZGFzZF9kaXNrX3R5cGUpOworfQorCitzdGF0aWMgaW50CitkYXNkX3Byb2JlIChjb25zdCBQZWREZXZpY2UgKmRldikKK3sKKwljaGFyICplcnJzdHIgPSAwOworCUxpbnV4U3BlY2lmaWMqIGFyY2hfc3BlY2lmaWM7CisJc3RydWN0IGZkYXNkX2FuY2hvciBhbmNob3I7CisKKwlQRURfQVNTRVJUKGRldiAhPSBOVUxMLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCgoZGV2LT50eXBlID09IFBFRF9ERVZJQ0VfREFTRAorCQkJICAgfHwgZGV2LT50eXBlID09IFBFRF9ERVZJQ0VfVklPREFTRCksIHJldHVybiAwKTsKKworCWFyY2hfc3BlY2lmaWMgPSBMSU5VWF9TUEVDSUZJQyhkZXYpOworCisJLyogYWRkIHBhcnRpdGlvbiB0ZXN0IGhlcmUgKi8KKwlmZGFzZF9pbml0aWFsaXplX2FuY2hvcigmYW5jaG9yKTsKKworCWZkYXNkX2dldF9nZW9tZXRyeSgmYW5jaG9yLCBhcmNoX3NwZWNpZmljLT5mZCk7CisKKwlmZGFzZF9jaGVja19hcGlfdmVyc2lvbigmYW5jaG9yLCBhcmNoX3NwZWNpZmljLT5mZCk7CisKKwlpZiAoZmRhc2RfY2hlY2tfdm9sdW1lKCZhbmNob3IsIGFyY2hfc3BlY2lmaWMtPmZkKSkKKwkJZ290byBlcnJvcl9jbGVhbnVwOworCisJZmRhc2RfY2xlYW51cCgmYW5jaG9yKTsKKworCXJldHVybiAxOworCitlcnJvcl9jbGVhbnVwOgorCWZkYXNkX2NsZWFudXAoJmFuY2hvcik7CisJcGVkX2V4Y2VwdGlvbl90aHJvdyhQRURfRVhDRVBUSU9OX0VSUk9SLFBFRF9FWENFUFRJT05fSUdOT1JFX0NBTkNFTCxlcnJzdHIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2Rhc2RfY2xvYmJlciAoUGVkRGV2aWNlKiBkZXYpCit7CisJTGludXhTcGVjaWZpYyogYXJjaF9zcGVjaWZpYzsKKwlzdHJ1Y3QgZmRhc2RfYW5jaG9yIGFuY2hvcjsKKworCVBFRF9BU1NFUlQoZGV2ICE9IE5VTEwsIHJldHVybiAwKTsKKworCWFyY2hfc3BlY2lmaWMgPSBMSU5VWF9TUEVDSUZJQyhkZXYpOworCisJZmRhc2RfaW5pdGlhbGl6ZV9hbmNob3IoJmFuY2hvcik7CisJZmRhc2RfZ2V0X2dlb21ldHJ5KCZhbmNob3IsIGFyY2hfc3BlY2lmaWMtPmZkKTsKKworCWZkYXNkX3JlY3JlYXRlX3Z0b2MoJmFuY2hvcik7CisJZmRhc2Rfd3JpdGVfbGFiZWxzKCZhbmNob3IsIGFyY2hfc3BlY2lmaWMtPmZkKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50CitkYXNkX3JlYWQgKFBlZERpc2sqIGRpc2spCit7CisJaW50IGk7CisJY2hhciBzdHJbMjBdOworCVBlZERldmljZSogZGV2OworCVBlZFBhcnRpdGlvbiogcGFydDsKKwlQZWRTZWN0b3Igc3RhcnQsIGVuZDsKKwlQZWRDb25zdHJhaW50KiBjb25zdHJhaW50X2V4YWN0OworCXBhcnRpdGlvbl9pbmZvX3QgKnA7CisJTGludXhTcGVjaWZpYyogYXJjaF9zcGVjaWZpYzsKKwlEYXNkRGlza1NwZWNpZmljKiBkaXNrX3NwZWNpZmljOworCisJUERFQlVHOworCisJUEVEX0FTU0VSVCAoZGlzayAhPSBOVUxMLCByZXR1cm4gMCk7CisJUERFQlVHOworCVBFRF9BU1NFUlQgKGRpc2stPmRldiAhPSBOVUxMLCByZXR1cm4gMCk7CisJUERFQlVHOworCisJZGV2ID0gZGlzay0+ZGV2OworCisJYXJjaF9zcGVjaWZpYyA9IExJTlVYX1NQRUNJRklDKGRldik7CisJZGlza19zcGVjaWZpYyA9IGRpc2stPmRpc2tfc3BlY2lmaWM7CisKKwlkaXNrX3NwZWNpZmljLT5hbmNob3IgPSBwZWRfbWFsbG9jKHNpemVvZihmZGFzZF9hbmNob3JfdCkpOworCisJUERFQlVHOworCisJZmRhc2RfaW5pdGlhbGl6ZV9hbmNob3IoZGlza19zcGVjaWZpYy0+YW5jaG9yKTsKKworCWZkYXNkX2dldF9nZW9tZXRyeShkaXNrX3NwZWNpZmljLT5hbmNob3IsIGFyY2hfc3BlY2lmaWMtPmZkKTsKKworCS8qIGNoZWNrIGRhc2QgZm9yIGxhYmVscyBhbmQgdnRvYyAqLworCWlmIChmZGFzZF9jaGVja192b2x1bWUoZGlza19zcGVjaWZpYy0+YW5jaG9yLCBhcmNoX3NwZWNpZmljLT5mZCkpCisJCWdvdG8gZXJyb3JfY2xvc2VfZGV2OworCisJaWYgKChkaXNrX3NwZWNpZmljLT5hbmNob3ItPmdlby5jeWxpbmRlcnMKKwkJKiBkaXNrX3NwZWNpZmljLT5hbmNob3ItPmdlby5oZWFkcykgPiBCSUdfRElTS19TSVpFKQorCQlkaXNrX3NwZWNpZmljLT5hbmNob3ItPmJpZ19kaXNrKys7CisKKwlwZWRfZGlza19kZWxldGVfYWxsIChkaXNrKTsKKworCWlmIChzdHJuY21wKGRpc2tfc3BlY2lmaWMtPmFuY2hvci0+dmxhYmVsLT52b2xrZXksCisJCQkJdnRvY19lYmNkaWNfZW5jICgiTE5YMSIsIHN0ciwgNCksIDQpID09IDApIHsKKwkJRGFzZFBhcnRpdGlvbkRhdGEqIGRhc2RfZGF0YTsKKworCQkvKiBMREwgZm9ybWF0LCBvbGQgb25lICovCisJCWRpc2tfc3BlY2lmaWMtPmZvcm1hdF90eXBlID0gMTsKKwkJc3RhcnQgPSAyNDsKKwkJZW5kID0gKGxvbmcgbG9uZykobG9uZyBsb25nKSBkaXNrX3NwZWNpZmljLT5hbmNob3ItPmdlby5jeWxpbmRlcnMKKwkJICAgICAgKiAobG9uZyBsb25nKWRpc2tfc3BlY2lmaWMtPmFuY2hvci0+Z2VvLmhlYWRzCisJCSAgICAgICogKGxvbmcgbG9uZylkaXNrLT5kZXYtPmh3X2dlb20uc2VjdG9ycworCQkgICAgICAqIChsb25nIGxvbmcpZGlza19zcGVjaWZpYy0+cmVhbF9zZWN0b3Jfc2l6ZQorCQkgICAgICAvIChsb25nIGxvbmcpZGlzay0+ZGV2LT5zZWN0b3Jfc2l6ZSAtIDE7CisJCXBhcnQgPSBwZWRfcGFydGl0aW9uX25ldyAoZGlzaywgUEVEX1BBUlRJVElPTl9QUk9URUNURUQsIE5VTEwsIHN0YXJ0LCBlbmQpOworCQlpZiAoIXBhcnQpCisJCQlnb3RvIGVycm9yX2Nsb3NlX2RldjsKKworCQlwYXJ0LT5udW0gPSAxOworCQlwYXJ0LT5mc190eXBlID0gcGVkX2ZpbGVfc3lzdGVtX3Byb2JlICgmcGFydC0+Z2VvbSk7CisJCWRhc2RfZGF0YSA9IHBhcnQtPmRpc2tfc3BlY2lmaWM7CisJCWRhc2RfZGF0YS0+cmFpZCA9IDA7CisJCWRhc2RfZGF0YS0+bHZtID0gMDsKKwkJZGFzZF9kYXRhLT50eXBlID0gMDsKKworCQlpZiAoIXBlZF9kaXNrX2FkZF9wYXJ0aXRpb24gKGRpc2ssIHBhcnQsIE5VTEwpKQorCQkJZ290byBlcnJvcl9jbG9zZV9kZXY7CisKKwkJcmV0dXJuIDE7CisJfQorCisJLyogQ0RMIGZvcm1hdCwgbmV3ZXIgKi8KKwlkaXNrX3NwZWNpZmljLT5mb3JtYXRfdHlwZSA9IDI7CisKKwlwID0gZGlza19zcGVjaWZpYy0+YW5jaG9yLT5maXJzdDsKKwlQREVCVUc7CisKKwlmb3IgKGkgPSAxIDsgaSA8PSBVU0FCTEVfUEFSVElUSU9OUzsgaSsrKSB7CisJCWNoYXIgKmNoID0gcC0+ZjEtPkRTMURTTkFNOworCQlEYXNkUGFydGl0aW9uRGF0YSogZGFzZF9kYXRhOworCisKKwkJaWYgKHAtPnVzZWQgIT0gMHgwMSkKKwkJCWNvbnRpbnVlOworCisgICAgICAgIFBERUJVRzsKKworCQlzdGFydCA9IChsb25nIGxvbmcpKGxvbmcgbG9uZykgcC0+c3RhcnRfdHJrCisJCQkJKiAobG9uZyBsb25nKSBkaXNrLT5kZXYtPmh3X2dlb20uc2VjdG9ycworCQkJCSogKGxvbmcgbG9uZykgZGlza19zcGVjaWZpYy0+cmVhbF9zZWN0b3Jfc2l6ZQorCQkJCS8gKGxvbmcgbG9uZykgZGlzay0+ZGV2LT5zZWN0b3Jfc2l6ZTsKKwkJZW5kICAgPSAobG9uZyBsb25nKSgobG9uZyBsb25nKSBwLT5lbmRfdHJrICsgMSkKKwkJCQkqIChsb25nIGxvbmcpIGRpc2stPmRldi0+aHdfZ2VvbS5zZWN0b3JzCisJCQkJKiAobG9uZyBsb25nKSBkaXNrX3NwZWNpZmljLT5yZWFsX3NlY3Rvcl9zaXplCisJCQkJLyAobG9uZyBsb25nKSBkaXNrLT5kZXYtPnNlY3Rvcl9zaXplIC0gMTsKKwkJcGFydCA9IHBlZF9wYXJ0aXRpb25fbmV3KGRpc2ssIDAsIE5VTEwsIHN0YXJ0LCBlbmQpOworICAgICAgICBQREVCVUc7CisKKwkJaWYgKCFwYXJ0KQorCQkJZ290byBlcnJvcl9jbG9zZV9kZXY7CisKKyAgICAgICAgUERFQlVHOworCisJCXBhcnQtPm51bSA9IGk7CisJCXBhcnQtPmZzX3R5cGUgPSBwZWRfZmlsZV9zeXN0ZW1fcHJvYmUoJnBhcnQtPmdlb20pOworCisJCXZ0b2NfZWJjZGljX2RlYyhwLT5mMS0+RFMxRFNOQU0sIHAtPmYxLT5EUzFEU05BTSwgNDQpOworCQljaCA9IHN0cnN0cihwLT5mMS0+RFMxRFNOQU0sICJQQVJUIik7CisKKwkJaWYgKGNoICE9IE5VTEwpIHsKKwkJCXN0cm5jcHkoc3RyLCBjaCs5LCA2KTsKKwkJCXN0cls2XSA9ICdcMCc7CisJCX0KKworCQlkYXNkX2RhdGEgPSBwYXJ0LT5kaXNrX3NwZWNpZmljOworCisJCWlmIChzdHJuY21wKFBBUlRfVFlQRV9SQUlELCBzdHIsIDYpID09IDApCisJCQlwZWRfcGFydGl0aW9uX3NldF9mbGFnKHBhcnQsIFBFRF9QQVJUSVRJT05fUkFJRCwgMSk7CisJCWVsc2UKKwkJCXBlZF9wYXJ0aXRpb25fc2V0X2ZsYWcocGFydCwgUEVEX1BBUlRJVElPTl9SQUlELCAwKTsKKworCQlpZiAoc3RybmNtcChQQVJUX1RZUEVfTFZNLCBzdHIsIDYpID09IDApCisJCQlwZWRfcGFydGl0aW9uX3NldF9mbGFnKHBhcnQsIFBFRF9QQVJUSVRJT05fTFZNLCAxKTsKKwkJZWxzZQorCQkJcGVkX3BhcnRpdGlvbl9zZXRfZmxhZyhwYXJ0LCBQRURfUEFSVElUSU9OX0xWTSwgMCk7CisKKwkJaWYgKHN0cm5jbXAoUEFSVF9UWVBFX1NXQVAsIHN0ciwgNikgPT0gMCkgeworCQkJZGFzZF9kYXRhLT5zeXN0ZW0gPSBQQVJUSVRJT05fTElOVVhfU1dBUDsKKwkJCVBERUJVRzsKKwkJfQorCisJCXZ0b2NfZWJjZGljX2VuYyhwLT5mMS0+RFMxRFNOQU0sIHAtPmYxLT5EUzFEU05BTSwgNDQpOworCisJCWRhc2RfZGF0YS0+cGFydF9pbmZvID0gKHZvaWQgKikgcDsKKwkJZGFzZF9kYXRhLT50eXBlID0gMDsKKworCQljb25zdHJhaW50X2V4YWN0ID0gcGVkX2NvbnN0cmFpbnRfZXhhY3QgKCZwYXJ0LT5nZW9tKTsKKwkJaWYgKCFjb25zdHJhaW50X2V4YWN0KQorCQkJZ290byBlcnJvcl9jbG9zZV9kZXY7CisJCWlmICghcGVkX2Rpc2tfYWRkX3BhcnRpdGlvbihkaXNrLCBwYXJ0LCBjb25zdHJhaW50X2V4YWN0KSkKKwkJCWdvdG8gZXJyb3JfY2xvc2VfZGV2OworCQlwZWRfY29uc3RyYWludF9kZXN0cm95KGNvbnN0cmFpbnRfZXhhY3QpOworCisJCWlmIChwLT5mc3BhY2VfdHJrID4gMCkgeworCQkJc3RhcnQgPSAobG9uZyBsb25nKSgobG9uZyBsb25nKSBwLT5lbmRfdHJrICsgMSkKKwkJCQkJKiAobG9uZyBsb25nKSBkaXNrLT5kZXYtPmh3X2dlb20uc2VjdG9ycworCQkJCQkqIChsb25nIGxvbmcpIGRpc2tfc3BlY2lmaWMtPnJlYWxfc2VjdG9yX3NpemUKKwkJCQkJLyAobG9uZyBsb25nKSBkaXNrLT5kZXYtPnNlY3Rvcl9zaXplOworCQkJZW5kICAgPSAobG9uZyBsb25nKSgobG9uZyBsb25nKSBwLT5lbmRfdHJrICsgMSArIHAtPmZzcGFjZV90cmspCisJCQkJCSogKGxvbmcgbG9uZykgZGlzay0+ZGV2LT5od19nZW9tLnNlY3RvcnMKKwkJCQkJKiAobG9uZyBsb25nKSBkaXNrX3NwZWNpZmljLT5yZWFsX3NlY3Rvcl9zaXplCisJCQkJCS8gKGxvbmcgbG9uZykgZGlzay0+ZGV2LT5zZWN0b3Jfc2l6ZSAtIDE7CisJCQlwYXJ0ID0gcGVkX3BhcnRpdGlvbl9uZXcgKGRpc2ssIDAsIE5VTEwsIHN0YXJ0LCBlbmQpOworCisJCQlpZiAoIXBhcnQpCisJCQkJZ290byBlcnJvcl9jbG9zZV9kZXY7CisKKwkJCXBhcnQtPnR5cGUgPSBQRURfUEFSVElUSU9OX0ZSRUVTUEFDRTsKKwkJCWNvbnN0cmFpbnRfZXhhY3QgPSBwZWRfY29uc3RyYWludF9leGFjdCgmcGFydC0+Z2VvbSk7CisKKwkJCWlmICghY29uc3RyYWludF9leGFjdCkKKwkJCQlnb3RvIGVycm9yX2Nsb3NlX2RldjsKKwkJCWlmICghcGVkX2Rpc2tfYWRkX3BhcnRpdGlvbihkaXNrLCBwYXJ0LCBjb25zdHJhaW50X2V4YWN0KSkKKwkJCQlnb3RvIGVycm9yX2Nsb3NlX2RldjsKKworCQkJcGVkX2NvbnN0cmFpbnRfZGVzdHJveSAoY29uc3RyYWludF9leGFjdCk7CisJCX0KKworCQlwID0gcC0+bmV4dDsKKwl9CisKKwlQREVCVUc7CisJcmV0dXJuIDE7CisKK2Vycm9yX2Nsb3NlX2RldjoKKwlQREVCVUc7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2Rhc2RfdXBkYXRlX3R5cGUgKGNvbnN0IFBlZERpc2sqIGRpc2spCit7CisJUGVkUGFydGl0aW9uKiBwYXJ0OworCUxpbnV4U3BlY2lmaWMqIGFyY2hfc3BlY2lmaWM7CisJRGFzZERpc2tTcGVjaWZpYyogZGlza19zcGVjaWZpYzsKKworCWFyY2hfc3BlY2lmaWMgPSBMSU5VWF9TUEVDSUZJQyhkaXNrLT5kZXYpOworCWRpc2tfc3BlY2lmaWMgPSBkaXNrLT5kaXNrX3NwZWNpZmljOworCisJUERFQlVHOworCisJZm9yIChwYXJ0ID0gcGVkX2Rpc2tfbmV4dF9wYXJ0aXRpb24oZGlzaywgTlVMTCk7IHBhcnQ7CisJICAgICBwYXJ0ID0gcGVkX2Rpc2tfbmV4dF9wYXJ0aXRpb24oZGlzaywgcGFydCkpIHsKKwkJcGFydGl0aW9uX2luZm9fdCAqcDsKKwkJY2hhciAqY2ggPSBOVUxMOworCQlEYXNkUGFydGl0aW9uRGF0YSogZGFzZF9kYXRhOworCisJCVBERUJVRzsKKworCQlpZiAocGFydC0+dHlwZSAmIFBFRF9QQVJUSVRJT05fRlJFRVNQQUNFCisJCQl8fCBwYXJ0LT50eXBlICYgUEVEX1BBUlRJVElPTl9NRVRBREFUQSkKKwkJCWNvbnRpbnVlOworCisJCVBERUJVRzsKKworCQlkYXNkX2RhdGEgPSBwYXJ0LT5kaXNrX3NwZWNpZmljOworCQlwID0gZGFzZF9kYXRhLT5wYXJ0X2luZm87CisKKwkJaWYgKCFwICkgeworCQkJUERFQlVHOworCQkJY29udGludWU7CisJCX0KKworCQl2dG9jX2ViY2RpY19kZWMocC0+ZjEtPkRTMURTTkFNLCBwLT5mMS0+RFMxRFNOQU0sIDQ0KTsKKwkJY2ggPSBzdHJzdHIocC0+ZjEtPkRTMURTTkFNLCAiUEFSVCIpOworCisJCVBERUJVRzsKKwkJaWYgKGNoID09IE5VTEwpIHsKKwkJCXZ0b2NfZWJjZGljX2VuYyhwLT5mMS0+RFMxRFNOQU0sIHAtPmYxLT5EUzFEU05BTSwgNDQpOworCQkJUERFQlVHOworCQkJY29udGludWU7CisJCX0KKworCQljaCArPSA5OworCisJCXN3aXRjaCAoZGFzZF9kYXRhLT5zeXN0ZW0pIHsKKwkJCWNhc2UgUEFSVElUSU9OX0xJTlVYX0xWTToKKwkJCQlQREVCVUc7CisJCQkJc3RybmNweShjaCwgUEFSVF9UWVBFX0xWTSwgNik7CisJCQkJYnJlYWs7CisJCQljYXNlIFBBUlRJVElPTl9MSU5VWF9SQUlEOgorCQkJCVBERUJVRzsKKwkJCQlzdHJuY3B5KGNoLCBQQVJUX1RZUEVfUkFJRCwgNik7CisJCQkJYnJlYWs7CisJCQljYXNlIFBBUlRJVElPTl9MSU5VWDoKKwkJCQlQREVCVUc7CisJCQkJc3RybmNweShjaCwgUEFSVF9UWVBFX05BVElWRSwgNik7CisJCQkJYnJlYWs7CisJCQljYXNlIFBBUlRJVElPTl9MSU5VWF9TV0FQOgorCQkJCVBERUJVRzsKKwkJCQlzdHJuY3B5KGNoLCBQQVJUX1RZUEVfU1dBUCwgNik7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCVBERUJVRzsKKwkJCQlzdHJuY3B5KGNoLCBQQVJUX1RZUEVfTkFUSVZFLCA2KTsKKwkJCQlicmVhazsKKwkJfQorCisJCWRpc2tfc3BlY2lmaWMtPmFuY2hvci0+dnRvY19jaGFuZ2VkKys7CisJCXZ0b2NfZWJjZGljX2VuYyhwLT5mMS0+RFMxRFNOQU0sIHAtPmYxLT5EUzFEU05BTSwgNDQpOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50CitkYXNkX3dyaXRlIChjb25zdCBQZWREaXNrKiBkaXNrKQoreworCURhc2RQYXJ0aXRpb25EYXRhKiBkYXNkX2RhdGE7CisJUGVkUGFydGl0aW9uKiBwYXJ0OworCWludCBpOworCXBhcnRpdGlvbl9pbmZvX3QgKnA7CisJTGludXhTcGVjaWZpYyogYXJjaF9zcGVjaWZpYzsKKwlEYXNkRGlza1NwZWNpZmljKiBkaXNrX3NwZWNpZmljOworCVBFRF9BU1NFUlQoZGlzayAhPSBOVUxMLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVChkaXNrLT5kZXYgIT0gTlVMTCwgcmV0dXJuIDApOworCisJYXJjaF9zcGVjaWZpYyA9IExJTlVYX1NQRUNJRklDIChkaXNrLT5kZXYpOworCWRpc2tfc3BlY2lmaWMgPSBkaXNrLT5kaXNrX3NwZWNpZmljOworCisJUERFQlVHOworCisJLyogSWYgZm9ybWF0ZWQgaW4gTERMLCBkb24ndCB3cml0ZSBhbnl0aGluZy4gKi8KKwlpZiAoZGlza19zcGVjaWZpYy0+Zm9ybWF0X3R5cGUgPT0gMSkKKwkJcmV0dXJuIDE7CisKKwkvKiBYWFggcmUtaW5pdGlhbGl6ZSBhbmNob3I/ICovCisJZmRhc2RfaW5pdGlhbGl6ZV9hbmNob3IoZGlza19zcGVjaWZpYy0+YW5jaG9yKTsKKwlmZGFzZF9nZXRfZ2VvbWV0cnkoZGlza19zcGVjaWZpYy0+YW5jaG9yLCBhcmNoX3NwZWNpZmljLT5mZCk7CisKKwkvKiBjaGVjayBkYXNkIGZvciBsYWJlbHMgYW5kIHZ0b2MgKi8KKwlpZiAoZmRhc2RfY2hlY2tfdm9sdW1lKGRpc2tfc3BlY2lmaWMtPmFuY2hvciwgYXJjaF9zcGVjaWZpYy0+ZmQpKQorCQlnb3RvIGVycm9yOworCisJaWYgKChkaXNrX3NwZWNpZmljLT5hbmNob3ItPmdlby5jeWxpbmRlcnMKKwkJKiBkaXNrX3NwZWNpZmljLT5hbmNob3ItPmdlby5oZWFkcykgPiBCSUdfRElTS19TSVpFKQorCQlkaXNrX3NwZWNpZmljLT5hbmNob3ItPmJpZ19kaXNrKys7CisKKwlmZGFzZF9yZWNyZWF0ZV92dG9jKGRpc2tfc3BlY2lmaWMtPmFuY2hvcik7CisKKwlmb3IgKGkgPSAxOyBpIDw9IFVTQUJMRV9QQVJUSVRJT05TOyBpKyspIHsKKwkJdW5zaWduZWQgaW50IHN0YXJ0LCBzdG9wOworCQlpbnQgdHlwZTsKKworCQlQREVCVUc7CisJCXBhcnQgPSBwZWRfZGlza19nZXRfcGFydGl0aW9uKGRpc2ssIGkpOworCQlpZiAoIXBhcnQpCisJCQljb250aW51ZTsKKworCQlQREVCVUc7CisKKwkJc3RhcnQgPSBwYXJ0LT5nZW9tLnN0YXJ0ICogZGlzay0+ZGV2LT5zZWN0b3Jfc2l6ZQorCQkJCS8gZGlza19zcGVjaWZpYy0+cmVhbF9zZWN0b3Jfc2l6ZSAvIGRpc2stPmRldi0+aHdfZ2VvbS5zZWN0b3JzOworCQlzdG9wID0gKHBhcnQtPmdlb20uZW5kICsgMSkKKwkJCSAgICogZGlzay0+ZGV2LT5zZWN0b3Jfc2l6ZSAvIGRpc2tfc3BlY2lmaWMtPnJlYWxfc2VjdG9yX3NpemUKKwkJCSAgIC8gZGlzay0+ZGV2LT5od19nZW9tLnNlY3RvcnMgLSAxOworCisJCVBERUJVRzsKKwkJZGFzZF9kYXRhID0gcGFydC0+ZGlza19zcGVjaWZpYzsKKworCQl0eXBlID0gZGFzZF9kYXRhLT50eXBlOworCQlQREVCVUc7CisKKwkJcCA9IGZkYXNkX2FkZF9wYXJ0aXRpb24oZGlza19zcGVjaWZpYy0+YW5jaG9yLCBzdGFydCwgc3RvcCk7CisJCWlmICghcCkgeworCQkJUERFQlVHOworCQkJcmV0dXJuIDA7CisJCX0KKwkJZGFzZF9kYXRhLT5wYXJ0X2luZm8gPSAodm9pZCAqKSBwOworCQlwLT50eXBlID0gZGFzZF9kYXRhLT5zeXN0ZW07CisJfQorCisJUERFQlVHOworCisJaWYgKCFmZGFzZF9wcmVwYXJlX2xhYmVscyhkaXNrX3NwZWNpZmljLT5hbmNob3IsIGFyY2hfc3BlY2lmaWMtPmZkKSkKKwkJcmV0dXJuIDA7CisKKwlkYXNkX3VwZGF0ZV90eXBlKGRpc2spOworCVBERUJVRzsKKworCWlmICghZmRhc2Rfd3JpdGVfbGFiZWxzKGRpc2tfc3BlY2lmaWMtPmFuY2hvciwgYXJjaF9zcGVjaWZpYy0+ZmQpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworCitlcnJvcjoKKwlQREVCVUc7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBQZWRQYXJ0aXRpb24qCitkYXNkX3BhcnRpdGlvbl9uZXcgKGNvbnN0IFBlZERpc2sqIGRpc2ssIFBlZFBhcnRpdGlvblR5cGUgcGFydF90eXBlLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBQZWRGaWxlU3lzdGVtVHlwZSogZnNfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgUGVkU2VjdG9yIHN0YXJ0LCBQZWRTZWN0b3IgZW5kKQoreworCVBlZFBhcnRpdGlvbiogcGFydDsKKworCXBhcnQgPSBfcGVkX3BhcnRpdGlvbl9hbGxvYyhkaXNrLCBwYXJ0X3R5cGUsIGZzX3R5cGUsIHN0YXJ0LCBlbmQpOworCWlmICghcGFydCkKKwkJZ290byBlcnJvcjsKKworCXBhcnQtPmRpc2tfc3BlY2lmaWMgPSBwZWRfbWFsbG9jIChzaXplb2YgKERhc2RQYXJ0aXRpb25EYXRhKSk7CisJcmV0dXJuIHBhcnQ7CisKK2Vycm9yOgorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorZGFzZF9wYXJ0aXRpb25fZGVzdHJveSAoUGVkUGFydGl0aW9uKiBwYXJ0KQoreworCVBFRF9BU1NFUlQocGFydCAhPSBOVUxMLCByZXR1cm4pOworCisJaWYgKHBlZF9wYXJ0aXRpb25faXNfYWN0aXZlKHBhcnQpKQorCQlwZWRfZnJlZShwYXJ0LT5kaXNrX3NwZWNpZmljKTsKKwlwZWRfZnJlZShwYXJ0KTsKK30KKworc3RhdGljIGludAorZGFzZF9wYXJ0aXRpb25fc2V0X2ZsYWcgKFBlZFBhcnRpdGlvbiogcGFydCwgUGVkUGFydGl0aW9uRmxhZyBmbGFnLCBpbnQgc3RhdGUpCit7CisJRGFzZFBhcnRpdGlvbkRhdGEqIGRhc2RfZGF0YTsKKworCVBFRF9BU1NFUlQocGFydCAhPSBOVUxMLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVChwYXJ0LT5kaXNrX3NwZWNpZmljICE9IE5VTEwsIHJldHVybiAwKTsKKwlkYXNkX2RhdGEgPSBwYXJ0LT5kaXNrX3NwZWNpZmljOworCisJc3dpdGNoIChmbGFnKSB7CisJCWNhc2UgUEVEX1BBUlRJVElPTl9SQUlEOgorCQkJaWYgKHN0YXRlKQorCQkJCWRhc2RfZGF0YS0+bHZtID0gMDsKKwkJCWRhc2RfZGF0YS0+cmFpZCA9IHN0YXRlOworCQkJcmV0dXJuIHBlZF9wYXJ0aXRpb25fc2V0X3N5c3RlbShwYXJ0LCBwYXJ0LT5mc190eXBlKTsKKwkJY2FzZSBQRURfUEFSVElUSU9OX0xWTToKKwkJCWlmIChzdGF0ZSkKKwkJCQlkYXNkX2RhdGEtPnJhaWQgPSAwOworCQkJZGFzZF9kYXRhLT5sdm0gPSBzdGF0ZTsKKwkJCXJldHVybiBwZWRfcGFydGl0aW9uX3NldF9zeXN0ZW0ocGFydCwgcGFydC0+ZnNfdHlwZSk7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK2Rhc2RfcGFydGl0aW9uX2dldF9mbGFnIChjb25zdCBQZWRQYXJ0aXRpb24qIHBhcnQsIFBlZFBhcnRpdGlvbkZsYWcgZmxhZykKK3sKKwlEYXNkUGFydGl0aW9uRGF0YSogZGFzZF9kYXRhOworCisJUEVEX0FTU0VSVCAocGFydCAhPSBOVUxMLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAocGFydC0+ZGlza19zcGVjaWZpYyAhPSBOVUxMLCByZXR1cm4gMCk7CisJZGFzZF9kYXRhID0gcGFydC0+ZGlza19zcGVjaWZpYzsKKworCXN3aXRjaCAoZmxhZykgeworCQljYXNlIFBFRF9QQVJUSVRJT05fUkFJRDoKKwkJCXJldHVybiBkYXNkX2RhdGEtPnJhaWQ7CisJCWNhc2UgUEVEX1BBUlRJVElPTl9MVk06CisJCQlyZXR1cm4gZGFzZF9kYXRhLT5sdm07CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK2Rhc2RfcGFydGl0aW9uX2lzX2ZsYWdfYXZhaWxhYmxlIChjb25zdCBQZWRQYXJ0aXRpb24qIHBhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGVkUGFydGl0aW9uRmxhZyBmbGFnKQoreworCXN3aXRjaCAoZmxhZykgeworCQljYXNlIFBFRF9QQVJUSVRJT05fUkFJRDoKKwkJCXJldHVybiAxOworCQljYXNlIFBFRF9QQVJUSVRJT05fTFZNOgorCQkJcmV0dXJuIDE7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gMDsKKwl9Cit9CisKKworc3RhdGljIGludAorZGFzZF9nZXRfbWF4X3ByaW1hcnlfcGFydGl0aW9uX2NvdW50IChjb25zdCBQZWREaXNrKiBkaXNrKQoreworCURhc2REaXNrU3BlY2lmaWMqIGRpc2tfc3BlY2lmaWM7CisKKwlkaXNrX3NwZWNpZmljID0gZGlzay0+ZGlza19zcGVjaWZpYzsKKwkvKiBJZiBmb3JtYXRlZCBpbiBMREwsIG1heGltdW0gcGFydGl0aW9uIG51bWJlciBpcyAxICovCisJaWYgKGRpc2tfc3BlY2lmaWMtPmZvcm1hdF90eXBlID09IDEpCisJCXJldHVybiAxOworCisJcmV0dXJuIFVTQUJMRV9QQVJUSVRJT05TOworfQorCitzdGF0aWMgUGVkQ29uc3RyYWludCoKK19wcmltYXJ5X2NvbnN0cmFpbnQgKFBlZERpc2sqIGRpc2spCit7CisJUGVkQWxpZ25tZW50IHN0YXJ0X2FsaWduOworCVBlZEFsaWdubWVudCBlbmRfYWxpZ247CisJUGVkR2VvbWV0cnkJbWF4X2dlb207CisJUGVkU2VjdG9yIHNlY3Rvcl9zaXplOworCUxpbnV4U3BlY2lmaWMqIGFyY2hfc3BlY2lmaWM7CisJRGFzZERpc2tTcGVjaWZpYyogZGlza19zcGVjaWZpYzsKKworCVBERUJVRzsKKworCWFyY2hfc3BlY2lmaWMgPSBMSU5VWF9TUEVDSUZJQyAoZGlzay0+ZGV2KTsKKwlkaXNrX3NwZWNpZmljID0gZGlzay0+ZGlza19zcGVjaWZpYzsKKwlzZWN0b3Jfc2l6ZSA9IGRpc2tfc3BlY2lmaWMtPnJlYWxfc2VjdG9yX3NpemUgLyBkaXNrLT5kZXYtPnNlY3Rvcl9zaXplOworCisJaWYgKCFwZWRfYWxpZ25tZW50X2luaXQgKCZzdGFydF9hbGlnbiwgMCwKKwkJCQkJCQkgZGlzay0+ZGV2LT5od19nZW9tLnNlY3RvcnMgKiBzZWN0b3Jfc2l6ZSkpCisJCXJldHVybiBOVUxMOworCWlmICghcGVkX2FsaWdubWVudF9pbml0ICgmZW5kX2FsaWduLCAtMSwKKwkJCQkJCSAgICAgZGlzay0+ZGV2LT5od19nZW9tLnNlY3RvcnMgKiBzZWN0b3Jfc2l6ZSkpCisJCXJldHVybiBOVUxMOworCWlmICghcGVkX2dlb21ldHJ5X2luaXQgKCZtYXhfZ2VvbSwgZGlzay0+ZGV2LCAwLCBkaXNrLT5kZXYtPmxlbmd0aCkpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIHBlZF9jb25zdHJhaW50X25ldygmc3RhcnRfYWxpZ24sICZlbmRfYWxpZ24sICZtYXhfZ2VvbSwKKwkJCQkJCQkgICZtYXhfZ2VvbSwgMSwgZGlzay0+ZGV2LT5sZW5ndGgpOworfQorCitzdGF0aWMgaW50CitkYXNkX3BhcnRpdGlvbl9hbGlnbiAoUGVkUGFydGl0aW9uKiBwYXJ0LCBjb25zdCBQZWRDb25zdHJhaW50KiBjb25zdHJhaW50KQoreworCURhc2REaXNrU3BlY2lmaWMqIGRpc2tfc3BlY2lmaWM7CisKKwlQRURfQVNTRVJUIChwYXJ0ICE9IE5VTEwsIHJldHVybiAwKTsKKworCWRpc2tfc3BlY2lmaWMgPSBwYXJ0LT5kaXNrLT5kaXNrX3NwZWNpZmljOworCS8qIElmIGZvcm1hdGVkIGluIExETCwgaWdub3JlIG1ldGFkYXRhIHBhcnRpdGlvbiAqLworCWlmIChkaXNrX3NwZWNpZmljLT5mb3JtYXRfdHlwZSA9PSAxKQorCQlyZXR1cm4gMTsKKworCWlmIChfcGVkX3BhcnRpdGlvbl9hdHRlbXB0X2FsaWduKHBhcnQsIGNvbnN0cmFpbnQsCisJCQkJCQkJCSAgICAgX3ByaW1hcnlfY29uc3RyYWludChwYXJ0LT5kaXNrKSkpCisJCXJldHVybiAxOworCisjaWZuZGVmIERJU0NPVkVSX09OTFkKKwlwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJUEVEX0VYQ0VQVElPTl9FUlJPUiwKKwkJUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCV8oIlVuYWJsZSB0byBzYXRpc2Z5IGFsbCBjb25zdHJhaW50cyBvbiB0aGUgcGFydGl0aW9uLiIpKTsKKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2Rhc2RfcGFydGl0aW9uX2VudW1lcmF0ZSAoUGVkUGFydGl0aW9uKiBwYXJ0KQoreworCWludCBpOworCVBlZFBhcnRpdGlvbiogcDsKKworCS8qIG5ldmVyIGNoYW5nZSB0aGUgcGFydGl0aW9uIG51bWJlcnMgKi8KKwlpZiAocGFydC0+bnVtICE9IC0xKQorCQlyZXR1cm4gMTsKKworCWZvciAoaSA9IDE7IGkgPD0gVVNBQkxFX1BBUlRJVElPTlM7IGkrKykgeworCQlwID0gcGVkX2Rpc2tfZ2V0X3BhcnRpdGlvbiAocGFydC0+ZGlzaywgaSk7CisJCWlmICghcCkgeworCQkJcGFydC0+bnVtID0gaTsKKwkJCXJldHVybiAxOworCQl9CisJfQorCisJLyogZmFpbGVkIHRvIGFsbG9jYXRlIGEgbnVtYmVyICovCisJcGVkX2V4Y2VwdGlvbl90aHJvdyhQRURfRVhDRVBUSU9OX0VSUk9SLCBQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCQkJCV8oIlVuYWJsZSB0byBhbGxvY2F0ZSBhIGRhc2QgZGlza2xhYmVsIHNsb3QiKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2Rhc2RfcGFydGl0aW9uX3NldF9zeXN0ZW0gKFBlZFBhcnRpdGlvbiogcGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBlZEZpbGVTeXN0ZW1UeXBlKiBmc190eXBlKQoreworCURhc2RQYXJ0aXRpb25EYXRhKiBkYXNkX2RhdGEgPSBwYXJ0LT5kaXNrX3NwZWNpZmljOworCVBlZFNlY3RvciBjeWxfc2l6ZTsKKworCWN5bF9zaXplPXBhcnQtPmRpc2stPmRldi0+aHdfZ2VvbS5zZWN0b3JzICogcGFydC0+ZGlzay0+ZGV2LT5od19nZW9tLmhlYWRzOworCVBERUJVRzsKKworCXBhcnQtPmZzX3R5cGUgPSBmc190eXBlOworCisJaWYgKGRhc2RfZGF0YS0+bHZtKSB7CisJCWRhc2RfZGF0YS0+c3lzdGVtID0gUEFSVElUSU9OX0xJTlVYX0xWTTsKKyAgICAgICAgUERFQlVHOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoZGFzZF9kYXRhLT5yYWlkKSB7CisJCWRhc2RfZGF0YS0+c3lzdGVtID0gUEFSVElUSU9OX0xJTlVYX1JBSUQ7CisgICAgICAgIFBERUJVRzsKKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKCFmc190eXBlKSB7CisJCWRhc2RfZGF0YS0+c3lzdGVtID0gUEFSVElUSU9OX0xJTlVYOworICAgICAgICBQREVCVUc7CisJfSBlbHNlIGlmICghc3RyY21wIChmc190eXBlLT5uYW1lLCAibGludXgtc3dhcCIpKSB7CisJCWRhc2RfZGF0YS0+c3lzdGVtID0gUEFSVElUSU9OX0xJTlVYX1NXQVA7CisgICAgICAgIFBERUJVRzsKKwl9IGVsc2UgeworCQlkYXNkX2RhdGEtPnN5c3RlbSA9IFBBUlRJVElPTl9MSU5VWDsKKyAgICAgICAgUERFQlVHOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50CitkYXNkX2FsbG9jX21ldGFkYXRhIChQZWREaXNrKiBkaXNrKQoreworCVBlZFBhcnRpdGlvbiogbmV3X3BhcnQ7CisJUGVkQ29uc3RyYWludCogY29uc3RyYWludF9hbnkgPSBOVUxMOworCVBlZFNlY3RvciB2dG9jX2VuZDsKKwlMaW51eFNwZWNpZmljKiBhcmNoX3NwZWNpZmljOworCURhc2REaXNrU3BlY2lmaWMqIGRpc2tfc3BlY2lmaWM7CisKKwlQRURfQVNTRVJUIChkaXNrICE9IE5VTEwsIGdvdG8gZXJyb3IpOworCVBFRF9BU1NFUlQgKGRpc2stPmRldiAhPSBOVUxMLCBnb3RvIGVycm9yKTsKKworCWFyY2hfc3BlY2lmaWMgPSBMSU5VWF9TUEVDSUZJQyAoZGlzay0+ZGV2KTsKKwlkaXNrX3NwZWNpZmljID0gZGlzay0+ZGlza19zcGVjaWZpYzsKKworCWNvbnN0cmFpbnRfYW55ID0gcGVkX2NvbnN0cmFpbnRfYW55IChkaXNrLT5kZXYpOworCisJLyogSWYgZm9ybWF0ZWQgaW4gTERMLCB0aGUgcmVhbCBwYXJ0aXRpb24gc3RhcnRzIGF0IHNlY3RvciAyNC4gKi8KKwlpZiAoZGlza19zcGVjaWZpYy0+Zm9ybWF0X3R5cGUgPT0gMSkKKwkJdnRvY19lbmQgPSAyMzsKKwllbHNlCisgICAgICAgIC8qIE1hcmsgdGhlIHN0YXJ0IG9mIHRoZSBkaXNrIGFzIG1ldGFkYXRhLiAqLworCQl2dG9jX2VuZCA9IChGSVJTVF9VU0FCTEVfVFJLICogKGxvbmcgbG9uZykgZGlzay0+ZGV2LT5od19nZW9tLnNlY3RvcnMKKwkJCQkgICAqIChsb25nIGxvbmcpIGRpc2tfc3BlY2lmaWMtPnJlYWxfc2VjdG9yX3NpemUKKwkJCQkgICAvIChsb25nIGxvbmcpIGRpc2stPmRldi0+c2VjdG9yX3NpemUpIC0gMTsKKworCW5ld19wYXJ0ID0gcGVkX3BhcnRpdGlvbl9uZXcgKGRpc2ssUEVEX1BBUlRJVElPTl9NRVRBREFUQSxOVUxMLDAsdnRvY19lbmQpOworCWlmICghbmV3X3BhcnQpCisJCWdvdG8gZXJyb3I7CisKKwlpZiAoIXBlZF9kaXNrX2FkZF9wYXJ0aXRpb24gKGRpc2ssIG5ld19wYXJ0LCBjb25zdHJhaW50X2FueSkpIHsKKwkJcGVkX3BhcnRpdGlvbl9kZXN0cm95IChuZXdfcGFydCk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJcGVkX2NvbnN0cmFpbnRfZGVzdHJveSAoY29uc3RyYWludF9hbnkpOworCXJldHVybiAxOworCitlcnJvcjoKKwlwZWRfY29uc3RyYWludF9kZXN0cm95IChjb25zdHJhaW50X2FueSk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2xhYmVscy9kb3MuYyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvbGFiZWxzL2Rvcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhMzFmYzEKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2xhYmVscy9kb3MuYwpAQCAtMCwwICsxLDIyMzcgQEAKKy8qCisgICAgbGlicGFydGVkIC0gYSBsaWJyYXJ5IGZvciBtYW5pcHVsYXRpbmcgZGlzayBwYXJ0aXRpb25zCisgICAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxLCAyMDA0LCAyMDA1LCAyMDA3CisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCisqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHBhcnRlZC9wYXJ0ZWQuaD4KKyNpbmNsdWRlIDxwYXJ0ZWQvZGVidWcuaD4KKyNpbmNsdWRlIDxwYXJ0ZWQvZW5kaWFuLmg+CisKKyNpZiBFTkFCTEVfTkxTCisjICBpbmNsdWRlIDxsaWJpbnRsLmg+CisjICBkZWZpbmUgXyhTdHJpbmcpIGRnZXR0ZXh0IChQQUNLQUdFLCBTdHJpbmcpCisjZWxzZQorIyAgZGVmaW5lIF8oU3RyaW5nKSAoU3RyaW5nKQorI2VuZGlmIC8qIEVOQUJMRV9OTFMgKi8KKworLyogdGhpcyBNQlIgYm9vdCBjb2RlIGlzIGxvYWRlZCBpbnRvIDAwMDA6N2MwMCBieSB0aGUgQklPUy4gIFNlZSBtYnIucyBmb3IKKyAqIHRoZSBzb3VyY2UsIGFuZCBob3cgdG8gYnVpbGQgaXQKKyAqLworCitzdGF0aWMgY29uc3QgY2hhciBNQlJfQk9PVF9DT0RFW10gPSB7CisJMHhmYSwgMHhiOCwgMHgwMCwgMHgxMCwgMHg4ZSwgMHhkMCwgMHhiYywgMHgwMCwKKwkweGIwLCAweGI4LCAweDAwLCAweDAwLCAweDhlLCAweGQ4LCAweDhlLCAweGMwLAorCTB4ZmIsIDB4YmUsIDB4MDAsIDB4N2MsIDB4YmYsIDB4MDAsIDB4MDYsIDB4YjksCisJMHgwMCwgMHgwMiwgMHhmMywgMHhhNCwgMHhlYSwgMHgyMSwgMHgwNiwgMHgwMCwKKwkweDAwLCAweGJlLCAweGJlLCAweDA3LCAweDM4LCAweDA0LCAweDc1LCAweDBiLAorCTB4ODMsIDB4YzYsIDB4MTAsIDB4ODEsIDB4ZmUsIDB4ZmUsIDB4MDcsIDB4NzUsCisJMHhmMywgMHhlYiwgMHgxNiwgMHhiNCwgMHgwMiwgMHhiMCwgMHgwMSwgMHhiYiwKKwkweDAwLCAweDdjLCAweGIyLCAweDgwLCAweDhhLCAweDc0LCAweDAxLCAweDhiLAorCTB4NGMsIDB4MDIsIDB4Y2QsIDB4MTMsIDB4ZWEsIDB4MDAsIDB4N2MsIDB4MDAsCisJMHgwMCwgMHhlYiwgMHhmZQorfTsKKworI2RlZmluZSBNU0RPU19NQUdJQwkJMHhBQTU1CisjZGVmaW5lIFBBUlRJVElPTl9NQUdJQ19NQUdJQwkweGY2ZjYKKworI2RlZmluZSBQQVJUSVRJT05fRU1QVFkJCTB4MDAKKyNkZWZpbmUgUEFSVElUSU9OX0ZBVDEyCQkweDAxCisjZGVmaW5lIFBBUlRJVElPTl9GQVQxNl9TTQkweDA0CisjZGVmaW5lIFBBUlRJVElPTl9ET1NfRVhUCTB4MDUKKyNkZWZpbmUgUEFSVElUSU9OX0ZBVDE2CQkweDA2CisjZGVmaW5lIFBBUlRJVElPTl9OVEZTCQkweDA3CisjZGVmaW5lIFBBUlRJVElPTl9IUEZTCQkweDA3CisjZGVmaW5lIFBBUlRJVElPTl9GQVQzMgkJMHgwYgorI2RlZmluZSBQQVJUSVRJT05fRkFUMzJfTEJBCTB4MGMKKyNkZWZpbmUgUEFSVElUSU9OX0ZBVDE2X0xCQQkweDBlCisjZGVmaW5lIFBBUlRJVElPTl9FWFRfTEJBCTB4MGYKKworI2RlZmluZSBQQVJUX0ZMQUdfSElEREVOCTB4MTAJLyogVmFsaWQgZm9yIEZBVC9OVEZTIG9ubHkgKi8KKyNkZWZpbmUgUEFSVElUSU9OX0ZBVDEyX0gJKFBBUlRJVElPTl9GQVQxMgl8IFBBUlRfRkxBR19ISURERU4pCisjZGVmaW5lIFBBUlRJVElPTl9GQVQxNl9TTV9ICShQQVJUSVRJT05fRkFUMTZfU00JfCBQQVJUX0ZMQUdfSElEREVOKQorI2RlZmluZSBQQVJUSVRJT05fRE9TX0VYVF9ICShQQVJUSVRJT05fRE9TX0VYVAl8IFBBUlRfRkxBR19ISURERU4pCisjZGVmaW5lIFBBUlRJVElPTl9GQVQxNl9ICShQQVJUSVRJT05fRkFUMTYJfCBQQVJUX0ZMQUdfSElEREVOKQorI2RlZmluZSBQQVJUSVRJT05fTlRGU19ICShQQVJUSVRJT05fTlRGUwkJfCBQQVJUX0ZMQUdfSElEREVOKQorI2RlZmluZSBQQVJUSVRJT05fRkFUMzJfSAkoUEFSVElUSU9OX0ZBVDMyCXwgUEFSVF9GTEFHX0hJRERFTikKKyNkZWZpbmUgUEFSVElUSU9OX0ZBVDMyX0xCQV9ICShQQVJUSVRJT05fRkFUMzJfTEJBCXwgUEFSVF9GTEFHX0hJRERFTikKKyNkZWZpbmUgUEFSVElUSU9OX0ZBVDE2X0xCQV9ICShQQVJUSVRJT05fRkFUMTZfTEJBCXwgUEFSVF9GTEFHX0hJRERFTikKKworI2RlZmluZSBQQVJUSVRJT05fQ09NUEFRX0RJQUcJMHgxMgorI2RlZmluZSBQQVJUSVRJT05fTERNCQkweDQyCisjZGVmaW5lIFBBUlRJVElPTl9MSU5VWF9TV0FQCTB4ODIKKyNkZWZpbmUgUEFSVElUSU9OX0xJTlVYCQkweDgzCisjZGVmaW5lIFBBUlRJVElPTl9MSU5VWF9FWFQJMHg4NQorI2RlZmluZSBQQVJUSVRJT05fTElOVVhfTFZNCTB4OGUKKyNkZWZpbmUgUEFSVElUSU9OX1NVTl9VRlMJMHhiZgorI2RlZmluZSBQQVJUSVRJT05fREVMTF9ESUFHCTB4ZGUKKyNkZWZpbmUgUEFSVElUSU9OX0dQVAkJMHhlZQorI2RlZmluZSBQQVJUSVRJT05fUEFMTwkJMHhmMAorI2RlZmluZSBQQVJUSVRJT05fUFJFUAkJMHg0MQorI2RlZmluZSBQQVJUSVRJT05fTElOVVhfUkFJRAkweGZkCisjZGVmaW5lIFBBUlRJVElPTl9MSU5VWF9MVk1fT0xEIDB4ZmUKKworLyogVGhpcyBjb25zdGFudCBjb250YWlucyB0aGUgbWF4aW11bSBjeWxpbmRlciBudW1iZXIgdGhhdCBjYW4gYmUgcmVwcmVzZW50ZWQKKyAqIGluIChDLEgsUykgbm90YXRpb24uICBIaWdoZXIgY3lsaW5kZXIgbnVtYmVycyBhcmUgcmVzZXJ2ZWQgZm9yCisgKiAidG9vIGJpZyIgaW5kaWNhdG9ycyAoaW4gd2hpY2ggY2FzZSBvbmx5IExCQSBhZGRyZXNzaW5nIGNhbiBiZSB1c2VkKS4KKyAqIAlTb21lIHBhcnRpdGlvbiB0YWJsZXMgaW4gdGhlIHdpbGQgaW5kaWNhdGUgdGhpcyBudW1iZXIgaXMgMTAyMS4KKyAqIChpLmUuIDEwMjIgaXMgc29tZXRpbWVzIHVzZWQgdG8gaW5kaWNhdGUgInVzZSBMQkEiKS4KKyAqLworI2RlZmluZSBNQVhfQ0hTX0NZTElOREVSCTEwMjEKKwordHlwZWRlZiBzdHJ1Y3QgX0Rvc1Jhd1BhcnRpdGlvbgkJRG9zUmF3UGFydGl0aW9uOwordHlwZWRlZiBzdHJ1Y3QgX0Rvc1Jhd1RhYmxlCQlEb3NSYXdUYWJsZTsKKworLyogbm90ZTogbG90cyBvZiBiaXQtYmFzaGluZyBoZXJlLCB0aHVzLCB5b3Ugc2hvdWxkbid0IGxvb2sgaW5zaWRlIGl0LgorICogVXNlIGNoc190b19zZWN0b3IoKSBhbmQgc2VjdG9yX3RvX2NocygpIGluc3RlYWQuCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwl1aW50OF90CQloZWFkOworCXVpbnQ4X3QJCXNlY3RvcjsKKwl1aW50OF90CQljeWxpbmRlcjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgUmF3Q0hTOworCisvKiByaXBwZWQgZnJvbSBMaW51eCBzb3VyY2UgKi8KK3N0cnVjdCBfRG9zUmF3UGFydGl0aW9uIHsKKyAgICAgICAgdWludDhfdAkJYm9vdF9pbmQ7CS8qIDAwOiAgMHg4MCAtIGFjdGl2ZSAqLworCVJhd0NIUwkJY2hzX3N0YXJ0OwkvKiAwMTogKi8KKwl1aW50OF90CQl0eXBlOwkJLyogMDQ6IHBhcnRpdGlvbiB0eXBlICovCisJUmF3Q0hTCQljaHNfZW5kOwkvKiAwNTogKi8KKwl1aW50MzJfdAlzdGFydDsJCS8qIDA4OiBzdGFydGluZyBzZWN0b3IgY291bnRpbmcgZnJvbSAwICovCisJdWludDMyX3QJbGVuZ3RoOwkJLyogMGM6IG5yIG9mIHNlY3RvcnMgaW4gcGFydGl0aW9uICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgX0Rvc1Jhd1RhYmxlIHsKKwljaGFyCQkJYm9vdF9jb2RlIFs0NDBdOworCXVpbnQzMl90ICAgICAgICAgICAgICAgIG1icl9zaWduYXR1cmU7CS8qIHJlYWxseSBhIHVuaXF1ZSBJRCAqLworCXVpbnQxNl90ICAgICAgICAgICAgICAgIFVua25vd247CisJRG9zUmF3UGFydGl0aW9uCQlwYXJ0aXRpb25zIFs0XTsKKwl1aW50MTZfdAkJbWFnaWM7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBPcmlnU3RhdGUgaXMgaW5mb3JtYXRpb24gd2Ugd2FudCB0byBwcmVzZXJ2ZSBhYm91dCB0aGUgcGFydGl0aW9uIGZvcgorICogZGVhbGluZyB3aXRoIENIUyBpc3N1ZXMKKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCVBlZEdlb21ldHJ5CWdlb207CisJRG9zUmF3UGFydGl0aW9uCXJhd19wYXJ0OworCVBlZFNlY3RvcglsYmFfb2Zmc2V0OwkvKiBuZWVkZWQgZm9yIGNvbXB1dGluZyBzdGFydC9lbmQgZm9yCisJCQkJCSAqIGxvZ2ljYWwgcGFydGl0aW9ucyAqLworfSBPcmlnU3RhdGU7CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBjaGFyCXN5c3RlbTsKKwlpbnQJCWJvb3Q7CisJaW50CQloaWRkZW47CisJaW50CQlyYWlkOworCWludAkJbHZtOworCWludAkJbGJhOworCWludAkJcGFsbzsKKwlpbnQJCXByZXA7CisJT3JpZ1N0YXRlKglvcmlnOwkJCS8qIHVzZWQgZm9yIENIUyBzdHVmZiAqLworfSBEb3NQYXJ0aXRpb25EYXRhOworCitzdGF0aWMgUGVkRGlza1R5cGUgbXNkb3NfZGlza190eXBlOworCitzdGF0aWMgaW50Cittc2Rvc19wcm9iZSAoY29uc3QgUGVkRGV2aWNlICpkZXYpCit7CisJUGVkRGlza1R5cGUqCWRpc2tfdHlwZTsKKwlEb3NSYXdUYWJsZQlwYXJ0X3RhYmxlOworCWludAkJaTsKKworCVBFRF9BU1NFUlQgKGRldiAhPSBOVUxMLCByZXR1cm4gMCk7CisKKyAgICAgICAgaWYgKGRldi0+c2VjdG9yX3NpemUgIT0gNTEyKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworCisJaWYgKCFwZWRfZGV2aWNlX3JlYWQgKGRldiwgJnBhcnRfdGFibGUsIDAsIDEpKQorCQlyZXR1cm4gMDsKKworCS8qIGNoZWNrIG1hZ2ljICovCisJaWYgKFBFRF9MRTE2X1RPX0NQVSAocGFydF90YWJsZS5tYWdpYykgIT0gTVNET1NfTUFHSUMpCisJCXJldHVybiAwOworCisJLyogaWYgdGhpcyBpcyBhIEZBVCBmcywgZmFpbCBoZXJlLiAgTm90ZSB0aGF0IHRoZSBTbWFydCBCb290IE1hbmFnZXIKKwkgKiBMb2FkZXIgKFNCTUwpIHNpZ25hdHVyZSBpbmRpY2F0ZXMgYSBwYXJ0aXRpb24gdGFibGUsIG5vdCBhIGZpbGUKKwkgKiBzeXN0ZW0uCisJICovCisgICAgICAgLyogY2hlY2sgYmVsb3cgY29tbWVudGVkIG91dCB0byBhbGxvdyBGQVQgZnMgaW1hZ2VzIHdpdGhvdXQgYSBNQlIgKi8gCisvKglpZiAoKCFzdHJuY21wIChwYXJ0X3RhYmxlLmJvb3RfY29kZSArIDB4MzYsICJGQVQiLCAzKQorCSAgICAmJiBzdHJuY21wIChwYXJ0X3RhYmxlLmJvb3RfY29kZSArIDB4NDAsICJTQk1MIiwgNCkgIT0gMCkKKwkgICAgfHwgIXN0cm5jbXAgKHBhcnRfdGFibGUuYm9vdF9jb2RlICsgMHg1MiwgIkZBVCIsIDMpKQorCQlyZXR1cm4gMDsKKyovCisKKwkvKiBJZiB0aGlzIGlzIGEgR1BUIGRpc2ssIGZhaWwgaGVyZSAqLworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJaWYgKHBhcnRfdGFibGUucGFydGl0aW9uc1tpXS50eXBlID09IFBBUlRJVElPTl9HUFQpCisJCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBJZiB0aGlzIGlzIGFuIEFJWCBQaHlzaWNhbCBWb2x1bWUsIGZhaWwgaGVyZS4gIElCTUEgaW4gRUJDRElDICovCisJaWYgKHBhcnRfdGFibGUuYm9vdF9jb2RlWzBdID09IChjaGFyKSAweGM5ICYmIAorCSAgICBwYXJ0X3RhYmxlLmJvb3RfY29kZVsxXSA9PSAoY2hhcikgMHhjMiAmJgorCSAgICBwYXJ0X3RhYmxlLmJvb3RfY29kZVsyXSA9PSAoY2hhcikgMHhkNCAmJiAKKwkgICAgcGFydF90YWJsZS5ib290X2NvZGVbM10gPT0gKGNoYXIpIDB4YzEpCisJCXJldHVybiAwOworCisjaWZkZWYgRU5BQkxFX1BDOTgKKwkvKiBIQUNLOiBpdCdzIGltcG9zc2libGUgdG8gdGVsbCBQQzk4IGFuZCBtc2RvcyBkaXNrIGxhYmVscyBhcGFydC4KKwkgKiBTb21lb25lIG1hZGUgdGhlIHNpZ25hdHVyZXMgdGhlIHNhbWUgKHZlcnkgY2xldmVyKS4gIFNpbmNlCisJICogUEM5OCBoYXMgc29tZSBpZGlvc3luY3JhY2llcyB3aXRoIGl0J3MgYm9vdC1sb2FkZXIsIGl0J3MgZGV0ZWN0aW9uCisJICogaXMgbW9yZSByZWxpYWJsZSAqLworCWRpc2tfdHlwZSA9IHBlZF9kaXNrX3R5cGVfZ2V0ICgicGM5OCIpOworCWlmIChkaXNrX3R5cGUgJiYgZGlza190eXBlLT5vcHMtPnByb2JlIChkZXYpKQorCQlyZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEVfUEM5OCAqLworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBQZWREaXNrKgorbXNkb3NfYWxsb2MgKGNvbnN0IFBlZERldmljZSogZGV2KQoreworCVBlZERpc2sqIGRpc2s7CisJUEVEX0FTU0VSVCAoZGV2ICE9IE5VTEwsIHJldHVybiBOVUxMKTsKKworCWRpc2sgPSBfcGVkX2Rpc2tfYWxsb2MgKChQZWREZXZpY2UqKWRldiwgJm1zZG9zX2Rpc2tfdHlwZSk7CisJaWYgKGRpc2spCisJCWRpc2stPmRpc2tfc3BlY2lmaWMgPSBOVUxMOworCXJldHVybiBkaXNrOworfQorCitzdGF0aWMgUGVkRGlzayoKK21zZG9zX2R1cGxpY2F0ZSAoY29uc3QgUGVkRGlzayogZGlzaykKK3sKKwlQZWREaXNrKgluZXdfZGlzazsKKyAgICAgICAKKwluZXdfZGlzayA9IHBlZF9kaXNrX25ld19mcmVzaCAoZGlzay0+ZGV2LCAmbXNkb3NfZGlza190eXBlKTsKKwlpZiAoIW5ld19kaXNrKQorCQlyZXR1cm4gTlVMTDsKKwluZXdfZGlzay0+ZGlza19zcGVjaWZpYyA9IE5VTEw7CisJcmV0dXJuIG5ld19kaXNrOworfQorCitzdGF0aWMgdm9pZAorbXNkb3NfZnJlZSAoUGVkRGlzayogZGlzaykKK3sKKwlQRURfQVNTRVJUIChkaXNrICE9IE5VTEwsIHJldHVybik7CisKKwlfcGVkX2Rpc2tfZnJlZSAoZGlzayk7Cit9CisKKyNpZm5kZWYgRElTQ09WRVJfT05MWQorc3RhdGljIGludAorbXNkb3NfY2xvYmJlciAoUGVkRGV2aWNlKiBkZXYpCit7CisJRG9zUmF3VGFibGUJCXRhYmxlOworCisJUEVEX0FTU0VSVCAoZGV2ICE9IE5VTEwsIHJldHVybiAwKTsKKwlQRURfQVNTRVJUIChtc2Rvc19wcm9iZSAoZGV2KSwgcmV0dXJuIDApOworCisJaWYgKCFwZWRfZGV2aWNlX3JlYWQgKGRldiwgJnRhYmxlLCAwLCAxKSkKKwkJcmV0dXJuIDA7CisJdGFibGUubWFnaWMgPSAwOworCXJldHVybiBwZWRfZGV2aWNlX3dyaXRlIChkZXYsICh2b2lkKikgJnRhYmxlLCAwLCAxKTsKK30KKyNlbmRpZiAvKiAhRElTQ09WRVJfT05MWSAqLworCitzdGF0aWMgaW50CitjaHNfZ2V0X2N5bGluZGVyIChjb25zdCBSYXdDSFMqIGNocykKK3sKKwlyZXR1cm4gY2hzLT5jeWxpbmRlciArICgoY2hzLT5zZWN0b3IgPj4gNikgPDwgOCk7Cit9CisKK3N0YXRpYyBpbnQKK2Noc19nZXRfaGVhZCAoY29uc3QgUmF3Q0hTKiBjaHMpCit7CisJcmV0dXJuIGNocy0+aGVhZDsKK30KKworLyogY291bnRzIGZyb20gMCAqLworc3RhdGljIGludAorY2hzX2dldF9zZWN0b3IgKGNvbnN0IFJhd0NIUyogY2hzKQoreworCXJldHVybiAoY2hzLT5zZWN0b3IgJiAweDNmKSAtIDE7Cit9CisKK3N0YXRpYyBQZWRTZWN0b3IKK2Noc190b19zZWN0b3IgKGNvbnN0IFBlZERldmljZSogZGV2LCBjb25zdCBQZWRDSFNHZW9tZXRyeSAqYmlvc19nZW9tLAorCSAgICAgICBjb25zdCBSYXdDSFMqIGNocykKK3sKKwlQZWRTZWN0b3IJYzsJCS8qIG5vdCBtZWFzdXJlZCBpbiBzZWN0b3JzLCBidXQgbmVlZCAqLworCVBlZFNlY3RvcgloOwkJLyogbG90cyBvZiBiaXRzICovCisJUGVkU2VjdG9yCXM7CisKKwlQRURfQVNTRVJUIChiaW9zX2dlb20gIT0gTlVMTCwgcmV0dXJuIDApOworCVBFRF9BU1NFUlQgKGNocyAhPSBOVUxMLCByZXR1cm4gMCk7CisKKwljID0gY2hzX2dldF9jeWxpbmRlciAoY2hzKTsKKwloID0gY2hzX2dldF9oZWFkIChjaHMpOworCXMgPSBjaHNfZ2V0X3NlY3RvciAoY2hzKTsKKworCWlmIChjID4gTUFYX0NIU19DWUxJTkRFUikJCS8qIE1BR0lDOiBDL0gvUyBpcyBpcnJlbGV2YW50ICovCisJCXJldHVybiAwOworCWlmIChzIDwgMCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuICgoYyAqIGJpb3NfZ2VvbS0+aGVhZHMgKyBoKSAqIGJpb3NfZ2VvbS0+c2VjdG9ycyArIHMpCisJCSogKGRldi0+c2VjdG9yX3NpemUgLyA1MTIpOworfQorCitzdGF0aWMgdm9pZAorc2VjdG9yX3RvX2NocyAoY29uc3QgUGVkRGV2aWNlKiBkZXYsIGNvbnN0IFBlZENIU0dlb21ldHJ5KiBiaW9zX2dlb20sCisJICAgICAgIFBlZFNlY3RvciBzZWN0b3IsIFJhd0NIUyogY2hzKQoreworCVBlZFNlY3RvcglyZWFsX2MsIHJlYWxfaCwgcmVhbF9zOworCisJUEVEX0FTU0VSVCAoZGV2ICE9IE5VTEwsIHJldHVybik7CisJUEVEX0FTU0VSVCAoY2hzICE9IE5VTEwsIHJldHVybik7CisJCisJaWYgKCFiaW9zX2dlb20pCisJCWJpb3NfZ2VvbSA9ICZkZXYtPmJpb3NfZ2VvbTsKKworCXNlY3RvciAvPSAoZGV2LT5zZWN0b3Jfc2l6ZSAvIDUxMik7CisKKwlyZWFsX2MgPSBzZWN0b3IgLyAoYmlvc19nZW9tLT5oZWFkcyAqIGJpb3NfZ2VvbS0+c2VjdG9ycyk7CisJcmVhbF9oID0gKHNlY3RvciAvIGJpb3NfZ2VvbS0+c2VjdG9ycykgJSBiaW9zX2dlb20tPmhlYWRzOworCXJlYWxfcyA9IHNlY3RvciAlIGJpb3NfZ2VvbS0+c2VjdG9yczsKKworCWlmIChyZWFsX2MgPiBNQVhfQ0hTX0NZTElOREVSKSB7CisJCXJlYWxfYyA9IDEwMjM7CisJCXJlYWxfaCA9IGJpb3NfZ2VvbS0+aGVhZHMgLSAxOworCQlyZWFsX3MgPSBiaW9zX2dlb20tPnNlY3RvcnMgLSAxOworCX0KKworCWNocy0+Y3lsaW5kZXIgPSByZWFsX2MgJSAweDEwMDsKKwljaHMtPmhlYWQgPSByZWFsX2g7CisJY2hzLT5zZWN0b3IgPSByZWFsX3MgKyAxICsgKHJlYWxfYyA+PiA4IDw8IDYpOworfQorCitzdGF0aWMgUGVkU2VjdG9yCitsZWdhY3lfc3RhcnQgKGNvbnN0IFBlZERpc2sqIGRpc2ssIGNvbnN0IFBlZENIU0dlb21ldHJ5KiBiaW9zX2dlb20sCisJICAgICAgY29uc3QgRG9zUmF3UGFydGl0aW9uKiByYXdfcGFydCkKK3sKKwlQRURfQVNTRVJUIChkaXNrICE9IE5VTEwsIHJldHVybiAwKTsKKwlQRURfQVNTRVJUIChyYXdfcGFydCAhPSBOVUxMLCByZXR1cm4gMCk7CisKKwlyZXR1cm4gY2hzX3RvX3NlY3RvciAoZGlzay0+ZGV2LCBiaW9zX2dlb20sICZyYXdfcGFydC0+Y2hzX3N0YXJ0KTsKK30KKworc3RhdGljIFBlZFNlY3RvcgorbGVnYWN5X2VuZCAoY29uc3QgUGVkRGlzayogZGlzaywgY29uc3QgUGVkQ0hTR2VvbWV0cnkqIGJpb3NfZ2VvbSwKKwkgICAgY29uc3QgRG9zUmF3UGFydGl0aW9uKiByYXdfcGFydCkKK3sKKwlQRURfQVNTRVJUIChkaXNrICE9IE5VTEwsIHJldHVybiAwKTsKKwlQRURfQVNTRVJUIChyYXdfcGFydCAhPSBOVUxMLCByZXR1cm4gMCk7CisKKwlyZXR1cm4gY2hzX3RvX3NlY3RvciAoZGlzay0+ZGV2LCBiaW9zX2dlb20sICZyYXdfcGFydC0+Y2hzX2VuZCk7Cit9CisKK3N0YXRpYyBQZWRTZWN0b3IKK2xpbmVhcl9zdGFydCAoY29uc3QgUGVkRGlzayogZGlzaywgY29uc3QgRG9zUmF3UGFydGl0aW9uKiByYXdfcGFydCwKKwkgICAgICBQZWRTZWN0b3Igb2Zmc2V0KQoreworCVBFRF9BU1NFUlQgKGRpc2sgIT0gTlVMTCwgcmV0dXJuIDApOworCVBFRF9BU1NFUlQgKHJhd19wYXJ0ICE9IE5VTEwsIHJldHVybiAwKTsKKworCXJldHVybiBvZmZzZXQKKwkgICAgICAgKyBQRURfTEUzMl9UT19DUFUgKHJhd19wYXJ0LT5zdGFydCkKKwkgICAgICAgCSAJKiAoZGlzay0+ZGV2LT5zZWN0b3Jfc2l6ZSAvIDUxMik7Cit9CisKK3N0YXRpYyBQZWRTZWN0b3IKK2xpbmVhcl9lbmQgKGNvbnN0IFBlZERpc2sqIGRpc2ssIGNvbnN0IERvc1Jhd1BhcnRpdGlvbiogcmF3X3BhcnQsCisJICAgIFBlZFNlY3RvciBvZmZzZXQpCit7CisJUEVEX0FTU0VSVCAoZGlzayAhPSBOVUxMLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAocmF3X3BhcnQgIT0gTlVMTCwgcmV0dXJuIDApOworCisJcmV0dXJuIGxpbmVhcl9zdGFydCAoZGlzaywgcmF3X3BhcnQsIG9mZnNldCkKKwkgICAgICAgKyAoUEVEX0xFMzJfVE9fQ1BVIChyYXdfcGFydC0+bGVuZ3RoKSAtIDEpCisJICAgICAgIAkgCSogKGRpc2stPmRldi0+c2VjdG9yX3NpemUgLyA1MTIpOworfQorCisjaWZuZGVmIERJU0NPVkVSX09OTFkKK3N0YXRpYyBpbnQKK3BhcnRpdGlvbl9jaGVja19iaW9zX2dlb21ldHJ5IChQZWRQYXJ0aXRpb24qIHBhcnQsIFBlZENIU0dlb21ldHJ5KiBiaW9zX2dlb20pCit7CisJUGVkU2VjdG9yCQlsZWdfc3RhcnQsIGxlZ19lbmQ7CisJRG9zUGFydGl0aW9uRGF0YSoJZG9zX2RhdGE7CisJUGVkRGlzayoJCWRpc2s7CisKKwlQRURfQVNTRVJUIChwYXJ0ICE9IE5VTEwsIHJldHVybiAwKTsKKwlQRURfQVNTRVJUIChwYXJ0LT5kaXNrICE9IE5VTEwsIHJldHVybiAwKTsKKwlQRURfQVNTRVJUIChwYXJ0LT5kaXNrX3NwZWNpZmljICE9IE5VTEwsIHJldHVybiAwKTsKKwlkb3NfZGF0YSA9IHBhcnQtPmRpc2tfc3BlY2lmaWM7CisKKwlpZiAoIWRvc19kYXRhLT5vcmlnKQorCQlyZXR1cm4gMTsKKworCWRpc2sgPSBwYXJ0LT5kaXNrOworCWxlZ19zdGFydCA9IGxlZ2FjeV9zdGFydCAoZGlzaywgYmlvc19nZW9tLCAmZG9zX2RhdGEtPm9yaWctPnJhd19wYXJ0KTsKKwlsZWdfZW5kID0gbGVnYWN5X2VuZCAoZGlzaywgYmlvc19nZW9tLCAmZG9zX2RhdGEtPm9yaWctPnJhd19wYXJ0KTsKKworCWlmIChsZWdfc3RhcnQgJiYgbGVnX3N0YXJ0ICE9IGRvc19kYXRhLT5vcmlnLT5nZW9tLnN0YXJ0KQorCQlyZXR1cm4gMDsKKwlpZiAobGVnX2VuZCAmJiBsZWdfZW5kICE9IGRvc19kYXRhLT5vcmlnLT5nZW9tLmVuZCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2Rpc2tfY2hlY2tfYmlvc19nZW9tZXRyeSAoY29uc3QgUGVkRGlzayogZGlzaywgUGVkQ0hTR2VvbWV0cnkqIGJpb3NfZ2VvbSkKK3sKKwlQZWRQYXJ0aXRpb24qIHBhcnQgPSBOVUxMOworCisJUEVEX0FTU0VSVCAoZGlzayAhPSBOVUxMLCByZXR1cm4gMCk7CisKKwl3aGlsZSAoKHBhcnQgPSBwZWRfZGlza19uZXh0X3BhcnRpdGlvbiAoZGlzaywgcGFydCkpKSB7CisJCWlmIChwZWRfcGFydGl0aW9uX2lzX2FjdGl2ZSAocGFydCkpIHsKKwkJCWlmICghcGFydGl0aW9uX2NoZWNrX2Jpb3NfZ2VvbWV0cnkgKHBhcnQsIGJpb3NfZ2VvbSkpCisJCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludAorcHJvYmVfZmlsZXN5c3RlbV9mb3JfZ2VvbSAoY29uc3QgUGVkUGFydGl0aW9uKiBwYXJ0LCBQZWRDSFNHZW9tZXRyeSogYmlvc19nZW9tKQoreworCWNvbnN0IGNoYXIqIG1zX3R5cGVzW10gPSB7Im50ZnMiLCAiZmF0MTYiLCAiZmF0MzIiLCBOVUxMfTsKKwlpbnQgaTsKKwlpbnQgZm91bmQ7CisJdW5zaWduZWQgY2hhciogYnVmOworCWludCBzZWN0b3JzOworCWludCBoZWFkczsKKwlpbnQgcmVzID0gMDsKKworCVBFRF9BU1NFUlQgKGJpb3NfZ2VvbSAgICAgICAgIT0gTlVMTCwgcmV0dXJuIDApOworICAgICAgICBQRURfQVNTRVJUIChwYXJ0ICAgICAgICAgICAgICE9IE5VTEwsIHJldHVybiAwKTsKKyAgICAgICAgUEVEX0FTU0VSVCAocGFydC0+ZGlzayAgICAgICAhPSBOVUxMLCByZXR1cm4gMCk7CisgICAgICAgIFBFRF9BU1NFUlQgKHBhcnQtPmRpc2stPmRldiAgIT0gTlVMTCwgcmV0dXJuIDApOworICAgICAgICBQRURfQVNTRVJUIChwYXJ0LT5kaXNrLT5kZXYtPnNlY3Rvcl9zaXplICUgUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQgPT0gMCwKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDApOworCisgICAgICAgIGJ1ZiA9IHBlZF9tYWxsb2MgKHBhcnQtPmRpc2stPmRldi0+c2VjdG9yX3NpemUpOworICAgICAgICAKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIDA7CisKKwlpZiAoIXBhcnQtPmZzX3R5cGUpCisJCWdvdG8gZW5kOworCisJZm91bmQgPSAwOworCWZvciAoaSA9IDA7IG1zX3R5cGVzW2ldOyBpKyspIHsKKwkJaWYgKCFzdHJjbXAobXNfdHlwZXNbaV0sIHBhcnQtPmZzX3R5cGUtPm5hbWUpKQorCQkJZm91bmQgPSAxOworCX0KKwlpZiAoIWZvdW5kKQorCQlnb3RvIGVuZDsKKworCWlmICghcGVkX2dlb21ldHJ5X3JlYWQoJnBhcnQtPmdlb20sIGJ1ZiwgMCwgMSkpCisJCWdvdG8gZW5kOworCisJLyogc2hhcmVkIGJ5IHRoZSBzdGFydCBvZiBhbGwgTWljcm9zb2Z0IGZpbGUgc3lzdGVtcyAqLworCXNlY3RvcnMgPSBidWZbMHgxOF0gKyAoYnVmWzB4MTldIDw8IDgpOworCWhlYWRzID0gYnVmWzB4MWFdICsgKGJ1ZlsweDFiXSA8PCA4KTsKKworCWlmIChzZWN0b3JzIDwgMSB8fCBzZWN0b3JzID4gNjMpCisJCWdvdG8gZW5kOworCWlmIChoZWFkcyA+IDI1NSB8fCBoZWFkcyA8IDEpCisJCWdvdG8gZW5kOworCisJYmlvc19nZW9tLT5zZWN0b3JzID0gc2VjdG9yczsKKwliaW9zX2dlb20tPmhlYWRzID0gaGVhZHM7CisJYmlvc19nZW9tLT5jeWxpbmRlcnMgPSBwYXJ0LT5kaXNrLT5kZXYtPmxlbmd0aCAvIChzZWN0b3JzICogaGVhZHMpOworCXJlcyA9IDE7CitlbmQ6CisJcGVkX2ZyZWUoYnVmKTsKKwlyZXR1cm4gcmVzOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIGF0dGVtcHRzIHRvIGluZmVyIHRoZSBCSU9TIENIUyBnZW9tZXRyeSBvZiB0aGUgaGFyZCBkaXNrCisgKiBmcm9tIHRoZSBDSFMgKyBMQkEgaW5mb3JtYXRpb24gY29udGFpbmVkIGluIHRoZSBwYXJ0aXRpb24gdGFibGUgZnJvbQorICogYSBzaW5nbGUgcGFydGl0aW9uJ3MgZW50cnkuCisgKgorICogVGhpcyBpbnZvbHZlcyBzb21lIG1hdGhzLiAgTGV0IChjLGgscyxhKSBiZSB0aGUgc3RhcnRpbmcgY3lsaW5kZXIsCisgKiBzdGFydGluZyBoZWFkLCBzdGFydGluZyBzZWN0b3IgYW5kIExCQSBzdGFydCBhZGRyZXNzIG9mIHRoZSBwYXJ0aXRpb24uCisgKiBMaWtld2lzZSwgKEMsSCxTLEEpIHRoZSBlbmQgYWRkcmVzc2VzLiAgVXNpbmcgYm90aCBvZiB0aGVzZSBwaWVjZXMKKyAqIG9mIGluZm9ybWF0aW9uLCB3ZSB3YW50IHRvIGRlZHVjZSBjeWxfc2VjdG9ycyBhbmQgaGVhZF9zZWN0b3JzIHdoaWNoCisgKiBhcmUgdGhlIHNpemVzIG9mIGEgc2luZ2xlIGN5bGluZGVyIGFuZCBhIHNpbmdsZSBoZWFkLCByZXNwZWN0aXZlbHkuCisgKgorICogVGhlIHJlbGF0aW9uc2hpcHMgYXJlOgorICogYypjeWxfc2VjdG9ycyArIGggKiBoZWFkX3NlY3RvcnMgKyBzID0gYQorICogQypjeWxfc2VjdG9ycyArIEggKiBoZWFkX3NlY3RvcnMgKyBTID0gQQorICoKKyAqIFdlIGNhbiByZXdyaXRlIHRoaXMgaW4gbWF0cml4IGZvcm06CisgKgorICogWyBjIGggXSBbIGN5bF9zZWN0b3JzICBdICA9ICBbIHMgLSBhIF0gID0gIFsgYV8gXQorICogWyBDIEggXSBbIGhlYWRfc2VjdG9ycyBdICAgICBbIFMgLSBBIF0gICAgIFsgQV8gXS4KKyAqIAorICogKHMgLSBhIGlzIGFiYnJldmlhdGVkIHRvIGFfdG8gc2ltcGxpZnkgdGhlIG5vdGF0aW9uLikKKyAqCisgKiBUaGlzIGNhbiBiZSBhYmJyZXZpYXRlZCBpbnRvIGF1Z21lbnRlZCBtYXRyaXggZm9ybToKKyAqCisgKiBbIGMgaCB8IGFfIF0KKyAqIFsgQyBIIHwgQV8gXS4KKyAqIAorICogU29sdmluZyB0aGVzZSBlcXVhdGlvbnMgcmVxdWlyZXMgZm9sbG93aW5nIHRoZSByb3cgcmVkdWN0aW9uIGFsZ29yaXRobS4gIFdlCisgKiBuZWVkIHRvIGJlIGNhcmVmdWwgYWJvdXQgYSBmZXcgdGhpbmdzIHRob3VnaDoKKyAqIAktIHRoZSBlcXVhdGlvbnMgbWlnaHQgYmUgbGluZWFybHkgZGVwZW5kZW50LCBpbiB3aGljaCBjYXNlIHRoZXJlCisgKiAJYXJlIG1hbnkgc29sdXRpb25zLgorICogCS0gdGhlIGVxdWF0aW9ucyBtaWdodCBiZSBpbmNvbnNpc3RlbnQsIGluIHdoaWNoIGNhc2UgdGhlcmUKKyAqIAlhcmUgbm8gc29sdXRpb25zLiAgKEluY29uc2lzdGVudCBwYXJ0aXRpb24gdGFibGUgZW50cnkhKQorICogCS0gdGhlcmUgbWlnaHQgYmUgemVyb3MsIHNvIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCBhcHBseWluZworICogCXRoZSBhbGdvcml0aG0uICBXZSBrbm93LCBob3dldmVyLCB0aGF0IEMgPiAwLgorICovCitzdGF0aWMgaW50Citwcm9iZV9wYXJ0aXRpb25fZm9yX2dlb20gKGNvbnN0IFBlZFBhcnRpdGlvbiogcGFydCwgUGVkQ0hTR2VvbWV0cnkqIGJpb3NfZ2VvbSkKK3sKKwlEb3NQYXJ0aXRpb25EYXRhKiBkb3NfZGF0YTsKKwlSYXdDSFMqIHN0YXJ0X2NoczsKKwlSYXdDSFMqIGVuZF9jaHM7CisJUGVkU2VjdG9yIGMsIGgsIHMsIGEsIGFfOwkvKiBzdGFydCAqLworCVBlZFNlY3RvciBDLCBILCBTLCBBLCBBXzsJLyogZW5kICovCisJUGVkU2VjdG9yIGRvbnRfb3ZlcmZsb3csIGRlbnVtOworCVBlZFNlY3RvciBjeWxfc2l6ZSwgaGVhZF9zaXplOworCVBlZFNlY3RvciBjeWxpbmRlcnMsIGhlYWRzLCBzZWN0b3JzOworCisJUEVEX0FTU0VSVCAocGFydCAhPSBOVUxMLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAocGFydC0+ZGlza19zcGVjaWZpYyAhPSBOVUxMLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAoYmlvc19nZW9tICE9IE5VTEwsIHJldHVybiAwKTsKKworCWRvc19kYXRhID0gcGFydC0+ZGlza19zcGVjaWZpYzsKKworCWlmICghZG9zX2RhdGEtPm9yaWcpCisJCXJldHVybiAwOworCisJc3RhcnRfY2hzID0gJmRvc19kYXRhLT5vcmlnLT5yYXdfcGFydC5jaHNfc3RhcnQ7CisJYyA9IGNoc19nZXRfY3lsaW5kZXIgKHN0YXJ0X2Nocyk7CisJaCA9IGNoc19nZXRfaGVhZCAoc3RhcnRfY2hzKTsKKwlzID0gY2hzX2dldF9zZWN0b3IgKHN0YXJ0X2Nocyk7CisJYSA9IGRvc19kYXRhLT5vcmlnLT5nZW9tLnN0YXJ0OworCWFfID0gYSAtIHM7CisKKwllbmRfY2hzID0gJmRvc19kYXRhLT5vcmlnLT5yYXdfcGFydC5jaHNfZW5kOworCUMgPSBjaHNfZ2V0X2N5bGluZGVyIChlbmRfY2hzKTsKKwlIID0gY2hzX2dldF9oZWFkIChlbmRfY2hzKTsKKwlTID0gY2hzX2dldF9zZWN0b3IgKGVuZF9jaHMpOworCUEgPSBkb3NfZGF0YS0+b3JpZy0+Z2VvbS5lbmQ7CisJQV8gPSBBIC0gUzsKKworCWlmIChoIDwgMCB8fCBIIDwgMCB8fCBoID4gMjU0IHx8IEggPiAyNTQpCisJCXJldHVybiAwOworCWlmIChjID4gQykKKwkJcmV0dXJuIDA7CisKKwkvKiBJZiBubyBnZW9tZXRyeSBpcyBmZWFzaWJsZSwgdGhlbiBkb24ndCBldmVuIGJvdGhlci4KKwkgKiBVc2VmdWwgZm9yIGVsaW1pbmF0aW5nIGFzc2VydGlvbnMgZm9yIGJyb2tlbiBwYXJ0aXRpb24KKwkgKiB0YWJsZXMgZ2VuZXJhdGVkIGJ5IE5vcnRvbiBHaG9zdCBldCBhbC4KKwkgKi8KKwlpZiAoQSA+IChDKzEpICogMjU1ICogNjMpCisJCXJldHVybiAwOworCisJLyogTm90IGVub3VnaCBpbmZvcm1hdGlvbi4gIEluIHRoZW9yeSwgd2UgY2FuIGRvIGJldHRlci4gIFNob3VsZCB3ZT8gKi8KKwlpZiAoQyA+IE1BWF9DSFNfQ1lMSU5ERVIpCisJCXJldHVybiAwOworCWlmIChDID09IDApCisJCXJldHVybiAwOworCisJLyogQ2FsY3VsYXRlIHRoZSBtYXhpbXVtIG51bWJlciB0aGF0IGNhbiBiZSBtdWx0aXBsaWVkIGJ5CisJICogYW55IGhlYWQgY291bnQgd2l0aG91dCBvdmVyZmxvd2luZyBhIFBlZFNlY3RvcgorCSAqIDJeOCA9IDI1NiwgOCBiaXRzICsgMShzaWduIGJpdCkgPSA5CisJICovCisJZG9udF9vdmVyZmxvdyA9IDE7CisJZG9udF9vdmVyZmxvdyA8PD0gKDgqc2l6ZW9mKGRvbnRfb3ZlcmZsb3cpKSAtIDk7CisJZG9udF9vdmVyZmxvdy0tOworCisJaWYgKGFfID4gZG9udF9vdmVyZmxvdyB8fCBBXyA+IGRvbnRfb3ZlcmZsb3cpCisJCXJldHVybiAwOworCisJLyogVGhlIG1hdHJpeCBpcyBzb2x2ZWQgYnkgOgorCSAqCisJICogWyBjIGggfCBhX10JCQlSMQorCSAqIFsgQyBIIHwgQV9dCQkJUjIKKwkgKgorCSAqIChjSCAtIENoKSBjeWxfc2l6ZSA9IGFfSCAtIEFfaAkJSCBSMSAtIGggUjIKKwkgKiA9PiAoaWYgY0ggLSBDaCAhPSAwKSBjeWxfc2l6ZSA9IChhX0ggLSBBX2gpIC8gKGNIIC0gQ2gpCisJICoKKwkgKiAoSGMgLSBoQykgaGVhZF9zaXplID0gQV9jIC0gYV9DCQljIFIyIC0gQyBSMQorCSAqID0+IChpZiBjSCAtIENoICE9IDApIGhlYWRfc2l6ZSA9IChBX2MgLSBhX0MpIC8gKGNIIC0gQ2gpCisJICoKKwkgKiAgIEJ1dCB0aGlzIGNhbGN1bGF0aW9uIG9mIGhlYWRfc2l6ZSB3b3VsZCBuZWVkCisJICogICBub3Qgb3ZlcmZsb3dpbmcgQV9jIG9yIGFfQworCSAqICAgU28gc3Vic3RpdHV0aW9uIGlzIHVzZSBpbnN0ZWFkLCB0byBtaW5pbWl6ZSBkaW1lbnNpb24KKwkgKiAgIG9mIHRlbXBvcmFyeSByZXN1bHRzIDoKKwkgKgorCSAqIElmIGggIT0gMCA6IGhlYWRfc2l6ZSA9ICggYV8gLSBjIGN5bF9zaXplICkgLyBoCisJICogSWYgSCAhPSAwIDogaGVhZF9zaXplID0gKCBBXyAtIEMgY3lsX3NpemUgKSAvIEgKKwkgKgorCSAqLworCWRlbnVtID0gYyAqIEggLSBDICogaDsKKwlpZiAoZGVudW0gPT0gMCkKKwkJcmV0dXJuIDA7CisKKwljeWxfc2l6ZSA9IChhXypIIC0gQV8qaCkgLyBkZW51bTsKKwkvKiBDaGVjayBmb3Igbm9uIGludGVnZXIgcmVzdWx0ICovCisJaWYgKGN5bF9zaXplICogZGVudW0gIT0gYV8qSCAtIEFfKmgpCisJCXJldHVybiAwOworCisJUEVEX0FTU0VSVCAoY3lsX3NpemUgPiAwLCByZXR1cm4gMCk7CisgCVBFRF9BU1NFUlQgKGN5bF9zaXplIDw9IDI1NSAqIDYzLCByZXR1cm4gMCk7CisKKwlpZiAoaCA+IDApCisJCWhlYWRfc2l6ZSA9ICggYV8gLSBjICogY3lsX3NpemUgKSAvIGg7CisJZWxzZSBpZiAoSCA+IDApCisJCWhlYWRfc2l6ZSA9ICggQV8gLSBDICogY3lsX3NpemUgKSAvIEg7CisJZWxzZSB7IAorCQkvKiBzaG91bGQgbm90IGhhcHBlbiBiZWNhdXNlIGRlbnVtICE9IDAgKi8KKwkJaGVhZF9zaXplID0gMDsKKwkJUEVEX0FTU0VSVCAoMCwgcmV0dXJuIDApOworCX0KKworCVBFRF9BU1NFUlQgKGhlYWRfc2l6ZSA+IDAsIHJldHVybiAwKTsKKwlQRURfQVNTRVJUIChoZWFkX3NpemUgPD0gNjMsIHJldHVybiAwKTsKKworCWN5bGluZGVycyA9IHBhcnQtPmRpc2stPmRldi0+bGVuZ3RoIC8gY3lsX3NpemU7CisJaGVhZHMgPSBjeWxfc2l6ZSAvIGhlYWRfc2l6ZTsKKwlzZWN0b3JzID0gaGVhZF9zaXplOworCisJUEVEX0FTU0VSVCAoaGVhZHMgPiAwLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAoaGVhZHMgPCAyNTYsIHJldHVybiAwKTsKKworCVBFRF9BU1NFUlQgKHNlY3RvcnMgPiAwLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAoc2VjdG9ycyA8PSA2MywgcmV0dXJuIDApOworCisJLyogU29tZSBicm9rZW4gT0VNIHBhcnRpdGlvbmluZyBwcm9ncmFtKHMpIHNlZW0gdG8gaGF2ZSBhbiBvdXQtYnktb25lCisJICogZXJyb3Igb24gdGhlIGVuZCBvZiBwYXJ0aXRpb25zLiAgV2Ugc2hvdWxkIG9mZmVyIHRvIGZpeCB0aGUKKwkgKiBwYXJ0aXRpb24gdGFibGUuLi4KKwkgKi8KKwlpZiAoKChDICsgMSkgKiBoZWFkcyArIEgpICogc2VjdG9ycyArIFMgPT0gQSkKKwkJQysrOworCisJUEVEX0FTU0VSVCAoKGMgKiBoZWFkcyArIGgpICogc2VjdG9ycyArIHMgPT0gYSwgcmV0dXJuIDApOworCVBFRF9BU1NFUlQgKChDICogaGVhZHMgKyBIKSAqIHNlY3RvcnMgKyBTID09IEEsIHJldHVybiAwKTsKKworCWJpb3NfZ2VvbS0+Y3lsaW5kZXJzID0gY3lsaW5kZXJzOworCWJpb3NfZ2VvbS0+aGVhZHMgPSBoZWFkczsKKwliaW9zX2dlb20tPnNlY3RvcnMgPSBzZWN0b3JzOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCitwYXJ0aXRpb25fcHJvYmVfYmlvc19nZW9tZXRyeSAoY29uc3QgUGVkUGFydGl0aW9uKiBwYXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBlZENIU0dlb21ldHJ5KiBiaW9zX2dlb20pCit7CisJUEVEX0FTU0VSVCAocGFydCAhPSBOVUxMLCByZXR1cm4pOworCVBFRF9BU1NFUlQgKHBhcnQtPmRpc2sgIT0gTlVMTCwgcmV0dXJuKTsKKwlQRURfQVNTRVJUIChiaW9zX2dlb20gIT0gTlVMTCwgcmV0dXJuKTsKKworCWlmIChwZWRfcGFydGl0aW9uX2lzX2FjdGl2ZSAocGFydCkpIHsKKwkJaWYgKHByb2JlX3BhcnRpdGlvbl9mb3JfZ2VvbSAocGFydCwgYmlvc19nZW9tKSkKKwkJCXJldHVybjsKKwkJaWYgKHBhcnQtPnR5cGUgJiBQRURfUEFSVElUSU9OX0VYVEVOREVEKSB7CisJCQlpZiAocHJvYmVfZmlsZXN5c3RlbV9mb3JfZ2VvbSAocGFydCwgYmlvc19nZW9tKSkKKwkJCQlyZXR1cm47CisJCX0KKwl9CisJaWYgKHBhcnQtPnR5cGUgJiBQRURfUEFSVElUSU9OX0xPR0lDQUwpIHsKKwkJUGVkUGFydGl0aW9uKiBleHRfcGFydDsKKwkJZXh0X3BhcnQgPSBwZWRfZGlza19leHRlbmRlZF9wYXJ0aXRpb24gKHBhcnQtPmRpc2spOworCQlQRURfQVNTRVJUIChleHRfcGFydCAhPSBOVUxMLCByZXR1cm4pOworCQlwYXJ0aXRpb25fcHJvYmVfYmlvc19nZW9tZXRyeSAoZXh0X3BhcnQsIGJpb3NfZ2VvbSk7CisJfSBlbHNlIHsKKwkJKmJpb3NfZ2VvbSA9IHBhcnQtPmRpc2stPmRldi0+Ymlvc19nZW9tOworCX0KK30KKworc3RhdGljIHZvaWQKK2Rpc2tfcHJvYmVfYmlvc19nZW9tZXRyeSAoY29uc3QgUGVkRGlzayogZGlzaywgUGVkQ0hTR2VvbWV0cnkqIGJpb3NfZ2VvbSkKK3sKKwlQZWRQYXJ0aXRpb24qCXBhcnQ7CisKKwkvKiBmaXJzdCBsb29rIGF0IHRoZSBib290IHBhcnRpdGlvbiAqLworCXBhcnQgPSBOVUxMOworCXdoaWxlICgocGFydCA9IHBlZF9kaXNrX25leHRfcGFydGl0aW9uIChkaXNrLCBwYXJ0KSkpIHsKKwkJaWYgKCFwZWRfcGFydGl0aW9uX2lzX2FjdGl2ZSAocGFydCkpCisJCQljb250aW51ZTsKKwkJaWYgKHBlZF9wYXJ0aXRpb25fZ2V0X2ZsYWcgKHBhcnQsIFBFRF9QQVJUSVRJT05fQk9PVCkpIHsKKwkJCWlmIChwcm9iZV9maWxlc3lzdGVtX2Zvcl9nZW9tIChwYXJ0LCBiaW9zX2dlb20pKQorCQkJCXJldHVybjsKKwkJCWlmIChwcm9iZV9wYXJ0aXRpb25fZm9yX2dlb20gKHBhcnQsIGJpb3NfZ2VvbSkpCisJCQkJcmV0dXJuOworCQl9CisJfQorCisJLyogdGhhdCBkaWRuJ3Qgd29yay4uLiB0cnkgYWxsIHBhcnRpdGlvbiB0YWJsZSBlbnRyaWVzICovCisJcGFydCA9IE5VTEw7CisJd2hpbGUgKChwYXJ0ID0gcGVkX2Rpc2tfbmV4dF9wYXJ0aXRpb24gKGRpc2ssIHBhcnQpKSkgeworCQlpZiAocGVkX3BhcnRpdGlvbl9pc19hY3RpdmUgKHBhcnQpKSB7CisJCQlpZiAocHJvYmVfcGFydGl0aW9uX2Zvcl9nZW9tIChwYXJ0LCBiaW9zX2dlb20pKQorCQkJCXJldHVybjsKKwkJfQorCX0KKworCS8qIHRoYXQgZGlkbid0IHdvcmsuLi4gbG9vayBhdCBhbGwgZmlsZSBzeXN0ZW1zICovCisJcGFydCA9IE5VTEw7CisJd2hpbGUgKChwYXJ0ID0gcGVkX2Rpc2tfbmV4dF9wYXJ0aXRpb24gKGRpc2ssIHBhcnQpKSkgeworCQlpZiAocGVkX3BhcnRpdGlvbl9pc19hY3RpdmUgKHBhcnQpKSB7CisJCQlpZiAocHJvYmVfZmlsZXN5c3RlbV9mb3JfZ2VvbSAocGFydCwgYmlvc19nZW9tKSkKKwkJCQlyZXR1cm47CisJCX0KKwl9Cit9CisjZW5kaWYgLyogIURJU0NPVkVSX09OTFkgKi8KKworc3RhdGljIGludAorcmF3X3BhcnRfaXNfZXh0ZW5kZWQgKGNvbnN0IERvc1Jhd1BhcnRpdGlvbiogcmF3X3BhcnQpCit7CisJUEVEX0FTU0VSVCAocmF3X3BhcnQgIT0gTlVMTCwgcmV0dXJuIDApOworCisJc3dpdGNoIChyYXdfcGFydC0+dHlwZSkgeworCWNhc2UgUEFSVElUSU9OX0RPU19FWFQ6CisJY2FzZSBQQVJUSVRJT05fRVhUX0xCQToKKwljYXNlIFBBUlRJVElPTl9MSU5VWF9FWFQ6CisJCXJldHVybiAxOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3Jhd19wYXJ0X2lzX2hpZGRlbiAoY29uc3QgRG9zUmF3UGFydGl0aW9uKiByYXdfcGFydCkKK3sKKwlQRURfQVNTRVJUIChyYXdfcGFydCAhPSBOVUxMLCByZXR1cm4gMCk7CisKKwlzd2l0Y2ggKHJhd19wYXJ0LT50eXBlKSB7CisJY2FzZSBQQVJUSVRJT05fRkFUMTJfSDoKKwljYXNlIFBBUlRJVElPTl9GQVQxNl9TTV9IOgorCWNhc2UgUEFSVElUSU9OX0ZBVDE2X0g6CisJY2FzZSBQQVJUSVRJT05fRkFUMzJfSDoKKwljYXNlIFBBUlRJVElPTl9OVEZTX0g6CisJY2FzZSBQQVJUSVRJT05fRkFUMzJfTEJBX0g6CisJY2FzZSBQQVJUSVRJT05fRkFUMTZfTEJBX0g6CisJCXJldHVybiAxOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3Jhd19wYXJ0X2lzX2xiYSAoY29uc3QgRG9zUmF3UGFydGl0aW9uKiByYXdfcGFydCkKK3sKKwlQRURfQVNTRVJUIChyYXdfcGFydCAhPSBOVUxMLCByZXR1cm4gMCk7CisKKwlzd2l0Y2ggKHJhd19wYXJ0LT50eXBlKSB7CisJY2FzZSBQQVJUSVRJT05fRkFUMzJfTEJBOgorCWNhc2UgUEFSVElUSU9OX0ZBVDE2X0xCQToKKwljYXNlIFBBUlRJVElPTl9FWFRfTEJBOgorCWNhc2UgUEFSVElUSU9OX0ZBVDMyX0xCQV9IOgorCWNhc2UgUEFSVElUSU9OX0ZBVDE2X0xCQV9IOgorCQlyZXR1cm4gMTsKKworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgUGVkUGFydGl0aW9uKgorcmF3X3BhcnRfcGFyc2UgKGNvbnN0IFBlZERpc2sqIGRpc2ssIGNvbnN0IERvc1Jhd1BhcnRpdGlvbiogcmF3X3BhcnQsCisJICAgICAgICBQZWRTZWN0b3IgbGJhX29mZnNldCwgUGVkUGFydGl0aW9uVHlwZSB0eXBlKQoreworCVBlZFBhcnRpdGlvbiogcGFydDsKKwlEb3NQYXJ0aXRpb25EYXRhKiBkb3NfZGF0YTsKKworCVBFRF9BU1NFUlQgKGRpc2sgIT0gTlVMTCwgcmV0dXJuIE5VTEwpOworCVBFRF9BU1NFUlQgKHJhd19wYXJ0ICE9IE5VTEwsIHJldHVybiBOVUxMKTsKKworCXBhcnQgPSBwZWRfcGFydGl0aW9uX25ldyAoCisJCWRpc2ssIHR5cGUsIE5VTEwsCisJCWxpbmVhcl9zdGFydCAoZGlzaywgcmF3X3BhcnQsIGxiYV9vZmZzZXQpLAorCQlsaW5lYXJfZW5kIChkaXNrLCByYXdfcGFydCwgbGJhX29mZnNldCkpOworCWlmICghcGFydCkKKwkJcmV0dXJuIE5VTEw7CisJZG9zX2RhdGEgPSBwYXJ0LT5kaXNrX3NwZWNpZmljOworCWRvc19kYXRhLT5zeXN0ZW0gPSByYXdfcGFydC0+dHlwZTsKKwlkb3NfZGF0YS0+Ym9vdCA9IHJhd19wYXJ0LT5ib290X2luZCAhPSAwOworCWRvc19kYXRhLT5oaWRkZW4gPSByYXdfcGFydF9pc19oaWRkZW4gKHJhd19wYXJ0KTsKKwlkb3NfZGF0YS0+cmFpZCA9IHJhd19wYXJ0LT50eXBlID09IFBBUlRJVElPTl9MSU5VWF9SQUlEOworCWRvc19kYXRhLT5sdm0gPSByYXdfcGFydC0+dHlwZSA9PSBQQVJUSVRJT05fTElOVVhfTFZNX09MRAorCQkJfHwgcmF3X3BhcnQtPnR5cGUgPT0gUEFSVElUSU9OX0xJTlVYX0xWTTsKKwlkb3NfZGF0YS0+bGJhID0gcmF3X3BhcnRfaXNfbGJhIChyYXdfcGFydCk7CisJZG9zX2RhdGEtPnBhbG8gPSByYXdfcGFydC0+dHlwZSA9PSBQQVJUSVRJT05fUEFMTzsKKwlkb3NfZGF0YS0+cHJlcCA9IHJhd19wYXJ0LT50eXBlID09IFBBUlRJVElPTl9QUkVQOworCWRvc19kYXRhLT5vcmlnID0gcGVkX21hbGxvYyAoc2l6ZW9mIChPcmlnU3RhdGUpKTsKKwlpZiAoIWRvc19kYXRhLT5vcmlnKSB7CisJCXBlZF9wYXJ0aXRpb25fZGVzdHJveSAocGFydCk7CisJCXJldHVybiBOVUxMOworCX0KKwlkb3NfZGF0YS0+b3JpZy0+Z2VvbSA9IHBhcnQtPmdlb207CisJZG9zX2RhdGEtPm9yaWctPnJhd19wYXJ0ID0gKnJhd19wYXJ0OworCWRvc19kYXRhLT5vcmlnLT5sYmFfb2Zmc2V0ID0gbGJhX29mZnNldDsKKwlyZXR1cm4gcGFydDsKK30KKworc3RhdGljIGludAorcmVhZF90YWJsZSAoUGVkRGlzayogZGlzaywgUGVkU2VjdG9yIHNlY3RvciwgaW50IGlzX2V4dGVuZGVkX3RhYmxlKQoreworCWludAkJCWk7CisJRG9zUmF3VGFibGUJCXRhYmxlOworCURvc1Jhd1BhcnRpdGlvbioJcmF3X3BhcnQ7CisJUGVkUGFydGl0aW9uKgkJcGFydDsKKwlQZWRQYXJ0aXRpb25UeXBlCXR5cGU7CisJUGVkU2VjdG9yCQlsYmFfb2Zmc2V0OworCVBlZENvbnN0cmFpbnQqCQljb25zdHJhaW50X2V4YWN0OworCisJUEVEX0FTU0VSVCAoZGlzayAhPSBOVUxMLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAoZGlzay0+ZGV2ICE9IE5VTEwsIHJldHVybiAwKTsKKworCWlmICghcGVkX2RldmljZV9yZWFkIChkaXNrLT5kZXYsICh2b2lkKikgJnRhYmxlLCBzZWN0b3IsIDEpKQorCQlnb3RvIGVycm9yOworCisJLyogd2VpcmQ6IGVtcHR5IGV4dGVuZGVkIHBhcnRpdGlvbnMgYXJlIGZpbGxlZCB3aXRoIDB4ZjYgYnkgUE0gKi8KKwlpZiAoaXNfZXh0ZW5kZWRfdGFibGUKKwkgICAgJiYgUEVEX0xFMTZfVE9fQ1BVICh0YWJsZS5tYWdpYykgPT0gUEFSVElUSU9OX01BR0lDX01BR0lDKQorCQlyZXR1cm4gMTsKKworI2lmbmRlZiBESVNDT1ZFUl9PTkxZCisJaWYgKFBFRF9MRTE2X1RPX0NQVSAodGFibGUubWFnaWMpICE9IE1TRE9TX01BR0lDKSB7CisJCWlmIChwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCVBFRF9FWENFUFRJT05fRVJST1IsIFBFRF9FWENFUFRJT05fSUdOT1JFX0NBTkNFTCwKKwkJCV8oIkludmFsaWQgcGFydGl0aW9uIHRhYmxlIG9uICVzICIKKwkJCSAgIi0tIHdyb25nIHNpZ25hdHVyZSAleC4iKSwKKwkJCWRpc2stPmRldi0+cGF0aCwKKwkJCVBFRF9MRTE2X1RPX0NQVSAodGFibGUubWFnaWMpKQorCQkJCSE9IFBFRF9FWENFUFRJT05fSUdOT1JFKQorCQkJZ290byBlcnJvcjsKKwkJcmV0dXJuIDE7CisJfQorI2VuZGlmCisKKwkvKiBwYXJzZSB0aGUgcGFydGl0aW9ucyBmcm9tIHRoaXMgdGFibGUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCXJhd19wYXJ0ID0gJnRhYmxlLnBhcnRpdGlvbnMgW2ldOworCQlpZiAocmF3X3BhcnQtPnR5cGUgPT0gUEFSVElUSU9OX0VNUFRZIHx8ICFyYXdfcGFydC0+bGVuZ3RoKQorCQkJY29udGludWU7CisKKwkJLyogcHJvY2VzcyBuZXN0ZWQgZXh0ZW5kZWQgcGFydGl0aW9ucyBhZnRlciBub3JtYWwgbG9naWNhbAorCQkgKiBwYXJ0aXRpb25zLCB0byBtYWtlIHN1cmUgd2UgZ2V0IHRoZSBvcmRlciByaWdodC4KKwkJICovCisJCWlmIChpc19leHRlbmRlZF90YWJsZSAmJiByYXdfcGFydF9pc19leHRlbmRlZCAocmF3X3BhcnQpKQorCQkJY29udGludWU7CQorCisJCWxiYV9vZmZzZXQgPSBpc19leHRlbmRlZF90YWJsZSA/IHNlY3RvciA6IDA7CisKKwkJaWYgKGxpbmVhcl9zdGFydCAoZGlzaywgcmF3X3BhcnQsIGxiYV9vZmZzZXQpID09IHNlY3RvcikgeworCQkJaWYgKHBlZF9leGNlcHRpb25fdGhyb3cgKAorCQkJCVBFRF9FWENFUFRJT05fRVJST1IsCisJCQkJUEVEX0VYQ0VQVElPTl9JR05PUkVfQ0FOQ0VMLAorCQkJCV8oIkludmFsaWQgcGFydGl0aW9uIHRhYmxlIC0gcmVjdXJzaXZlICIKKwkJCQkicGFydGl0aW9uIG9uICVzLiIpLAorCQkJCWRpc2stPmRldi0+cGF0aCkKKwkJCQkJIT0gUEVEX0VYQ0VQVElPTl9JR05PUkUpCisJCQkJZ290byBlcnJvcjsKKwkJCWNvbnRpbnVlOwkvKiBhdm9pZCBpbmZpbml0ZSByZWN1cnNpb24gKi8KKwkJfQorCisJCWlmIChpc19leHRlbmRlZF90YWJsZSkKKwkJCXR5cGUgPSBQRURfUEFSVElUSU9OX0xPR0lDQUw7CisJCWVsc2UgaWYgKHJhd19wYXJ0X2lzX2V4dGVuZGVkIChyYXdfcGFydCkpCisJCQl0eXBlID0gUEVEX1BBUlRJVElPTl9FWFRFTkRFRDsKKwkJZWxzZQorCQkJdHlwZSA9IFBFRF9QQVJUSVRJT05fTk9STUFMOworCisJCXBhcnQgPSByYXdfcGFydF9wYXJzZSAoZGlzaywgcmF3X3BhcnQsIGxiYV9vZmZzZXQsIHR5cGUpOworCQlpZiAoIXBhcnQpCisJCQlnb3RvIGVycm9yOworCQlpZiAoIWlzX2V4dGVuZGVkX3RhYmxlKQorCQkJcGFydC0+bnVtID0gaSArIDE7CisJCWlmICh0eXBlICE9IFBFRF9QQVJUSVRJT05fRVhURU5ERUQpCisJCQlwYXJ0LT5mc190eXBlID0gcGVkX2ZpbGVfc3lzdGVtX3Byb2JlICgmcGFydC0+Z2VvbSk7CisKKwkJY29uc3RyYWludF9leGFjdCA9IHBlZF9jb25zdHJhaW50X2V4YWN0ICgmcGFydC0+Z2VvbSk7CisJCWlmICghcGVkX2Rpc2tfYWRkX3BhcnRpdGlvbiAoZGlzaywgcGFydCwgY29uc3RyYWludF9leGFjdCkpCisJCQlnb3RvIGVycm9yOworCQlwZWRfY29uc3RyYWludF9kZXN0cm95IChjb25zdHJhaW50X2V4YWN0KTsKKworCQkvKiBub24tbmVzdGVkIGV4dGVuZGVkIHBhcnRpdGlvbiAqLworCQlpZiAocGFydC0+dHlwZSA9PSBQRURfUEFSVElUSU9OX0VYVEVOREVEKSB7CisJCQlpZiAoIXJlYWRfdGFibGUgKGRpc2ssIHBhcnQtPmdlb20uc3RhcnQsIDEpKQorCQkJCWdvdG8gZXJyb3I7CisJCX0KKwl9CisKKwlpZiAoaXNfZXh0ZW5kZWRfdGFibGUpIHsKKwkJLyogcHJvY2VzcyB0aGUgbmVzdGVkIGV4dGVuZGVkIHBhcnRpdGlvbnMgKi8KKwkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQkJUGVkU2VjdG9yIHBhcnRfc3RhcnQ7CisKKwkJCXJhd19wYXJ0ID0gJnRhYmxlLnBhcnRpdGlvbnMgW2ldOworCQkJaWYgKCFyYXdfcGFydF9pc19leHRlbmRlZCAocmF3X3BhcnQpKQorCQkJCWNvbnRpbnVlOworCisJCQlsYmFfb2Zmc2V0ID0gcGVkX2Rpc2tfZXh0ZW5kZWRfcGFydGl0aW9uCisJCQkJCShkaXNrKS0+Z2VvbS5zdGFydDsKKwkJCXBhcnRfc3RhcnQgPSBsaW5lYXJfc3RhcnQgKGRpc2ssIHJhd19wYXJ0LCBsYmFfb2Zmc2V0KTsKKwkJCWlmIChwYXJ0X3N0YXJ0ID09IHNlY3RvcikgeworCQkJCS8qIHJlY3Vyc2l2ZSB0YWJsZSAtIGFscmVhZHkgdGhyZXcgYW4KKwkJCQkgKiBleGNlcHRpb24gYWJvdmUuCisJCQkJICovCisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXJlYWRfdGFibGUgKGRpc2ssIHBhcnRfc3RhcnQsIDEpKQorCQkJCWdvdG8gZXJyb3I7CisJCX0KKwl9CisKKwlyZXR1cm4gMTsKKworZXJyb3I6CisJcGVkX2Rpc2tfZGVsZXRlX2FsbCAoZGlzayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK21zZG9zX3JlYWQgKFBlZERpc2sqIGRpc2spCit7CisJUEVEX0FTU0VSVCAoZGlzayAhPSBOVUxMLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAoZGlzay0+ZGV2ICE9IE5VTEwsIHJldHVybiAwKTsKKworCXBlZF9kaXNrX2RlbGV0ZV9hbGwgKGRpc2spOworCWlmICghcmVhZF90YWJsZSAoZGlzaywgMCwgMCkpCisJCXJldHVybiAwOworCisjaWZuZGVmIERJU0NPVkVSX09OTFkKKwkvKiB0cnkgdG8gZmlndXJlIG91dCB0aGUgY29ycmVjdCBCSU9TIENIUyB2YWx1ZXMgKi8KKwlpZiAoIWRpc2tfY2hlY2tfYmlvc19nZW9tZXRyeSAoZGlzaywgJmRpc2stPmRldi0+Ymlvc19nZW9tKSkgeworCQlQZWRDSFNHZW9tZXRyeSBiaW9zX2dlb20gPSBkaXNrLT5kZXYtPmJpb3NfZ2VvbTsKKwkJZGlza19wcm9iZV9iaW9zX2dlb21ldHJ5IChkaXNrLCAmYmlvc19nZW9tKTsKKworCQkvKiBpZiB0aGUgZ2VvbWV0cnkgd2FzIHdyb25nLCB0aGVuIHdlIHNob3VsZCByZXJlYWQsIHRvCisJCSAqIG1ha2Ugc3VyZSB0aGUgbWV0YWRhdGEgaXMgYWxsb2NhdGVkIGluIHRoZSByaWdodCBwbGFjZXMuCisJCSAqLworCQlpZiAoZGlzay0+ZGV2LT5iaW9zX2dlb20uY3lsaW5kZXJzICE9IGJpb3NfZ2VvbS5jeWxpbmRlcnMKKwkJICAgIHx8IGRpc2stPmRldi0+Ymlvc19nZW9tLmhlYWRzICE9IGJpb3NfZ2VvbS5oZWFkcworCQkgICAgfHwgZGlzay0+ZGV2LT5iaW9zX2dlb20uc2VjdG9ycyAhPSBiaW9zX2dlb20uc2VjdG9ycykgeworCQkJZGlzay0+ZGV2LT5iaW9zX2dlb20gPSBiaW9zX2dlb207CisJCQlyZXR1cm4gbXNkb3NfcmVhZCAoZGlzayk7CisJCX0KKwl9CisjZW5kaWYKKworCXJldHVybiAxOworfQorCisjaWZuZGVmIERJU0NPVkVSX09OTFkKK3N0YXRpYyBpbnQKK2ZpbGxfcmF3X3BhcnQgKERvc1Jhd1BhcnRpdGlvbiogcmF3X3BhcnQsCisgICAgICAgICAgICAgICBjb25zdCBQZWRQYXJ0aXRpb24qIHBhcnQsIFBlZFNlY3RvciBvZmZzZXQpCit7CisJRG9zUGFydGl0aW9uRGF0YSoJZG9zX2RhdGE7CisJUGVkQ0hTR2VvbWV0cnkJCWJpb3NfZ2VvbTsKKworCVBFRF9BU1NFUlQgKHJhd19wYXJ0ICE9IE5VTEwsIHJldHVybiAwKTsKKwlQRURfQVNTRVJUIChwYXJ0ICE9IE5VTEwsIHJldHVybiAwKTsKKworCXBhcnRpdGlvbl9wcm9iZV9iaW9zX2dlb21ldHJ5IChwYXJ0LCAmYmlvc19nZW9tKTsKKworCWRvc19kYXRhID0gcGFydC0+ZGlza19zcGVjaWZpYzsKKworCXJhd19wYXJ0LT5ib290X2luZCA9IDB4ODAgKiBkb3NfZGF0YS0+Ym9vdDsKKwlyYXdfcGFydC0+dHlwZSA9IGRvc19kYXRhLT5zeXN0ZW07CisJcmF3X3BhcnQtPnN0YXJ0ID0gUEVEX0NQVV9UT19MRTMyICgocGFydC0+Z2VvbS5zdGFydCAtIG9mZnNldCkKKwkJCQkvIChwYXJ0LT5kaXNrLT5kZXYtPnNlY3Rvcl9zaXplIC8gNTEyKSk7CisJcmF3X3BhcnQtPmxlbmd0aCA9IFBFRF9DUFVfVE9fTEUzMiAocGFydC0+Z2VvbS5sZW5ndGgKKwkJCQkvIChwYXJ0LT5kaXNrLT5kZXYtPnNlY3Rvcl9zaXplIC8gNTEyKSk7CisKKwlzZWN0b3JfdG9fY2hzIChwYXJ0LT5kaXNrLT5kZXYsICZiaW9zX2dlb20sIHBhcnQtPmdlb20uc3RhcnQsCisJCSAgICAgICAmcmF3X3BhcnQtPmNoc19zdGFydCk7CisJc2VjdG9yX3RvX2NocyAocGFydC0+ZGlzay0+ZGV2LCAmYmlvc19nZW9tLCBwYXJ0LT5nZW9tLmVuZCwKKwkJICAgICAgICZyYXdfcGFydC0+Y2hzX2VuZCk7CisKKwlpZiAoZG9zX2RhdGEtPm9yaWcpIHsKKwkJRG9zUmF3UGFydGl0aW9uKiBvcmlnX3Jhd19wYXJ0ID0gJmRvc19kYXRhLT5vcmlnLT5yYXdfcGFydDsKKwkJaWYgKGRvc19kYXRhLT5vcmlnLT5nZW9tLnN0YXJ0ID09IHBhcnQtPmdlb20uc3RhcnQpCisJCQlyYXdfcGFydC0+Y2hzX3N0YXJ0ID0gb3JpZ19yYXdfcGFydC0+Y2hzX3N0YXJ0OworCQlpZiAoZG9zX2RhdGEtPm9yaWctPmdlb20uZW5kID09IHBhcnQtPmdlb20uZW5kKQorCQkJcmF3X3BhcnQtPmNoc19lbmQgPSBvcmlnX3Jhd19wYXJ0LT5jaHNfZW5kOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50CitmaWxsX2V4dF9yYXdfcGFydF9nZW9tIChEb3NSYXdQYXJ0aXRpb24qIHJhd19wYXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGVkQ0hTR2VvbWV0cnkqIGJpb3NfZ2VvbSwKKwkJCWNvbnN0IFBlZEdlb21ldHJ5KiBnZW9tLCBQZWRTZWN0b3Igb2Zmc2V0KQoreworCVBFRF9BU1NFUlQgKHJhd19wYXJ0ICE9IE5VTEwsIHJldHVybiAwKTsKKwlQRURfQVNTRVJUIChnZW9tICE9IE5VTEwsIHJldHVybiAwKTsKKwlQRURfQVNTRVJUIChnZW9tLT5kZXYgIT0gTlVMTCwgcmV0dXJuIDApOworCisJcmF3X3BhcnQtPmJvb3RfaW5kID0gMDsKKwlyYXdfcGFydC0+dHlwZSA9IFBBUlRJVElPTl9ET1NfRVhUOworCXJhd19wYXJ0LT5zdGFydCA9IFBFRF9DUFVfVE9fTEUzMiAoKGdlb20tPnN0YXJ0IC0gb2Zmc2V0KQorCQkJCS8gKGdlb20tPmRldi0+c2VjdG9yX3NpemUgLyA1MTIpKTsKKwlyYXdfcGFydC0+bGVuZ3RoID0gUEVEX0NQVV9UT19MRTMyIChnZW9tLT5sZW5ndGgKKwkJCQkvIChnZW9tLT5kZXYtPnNlY3Rvcl9zaXplIC8gNTEyKSk7CisKKwlzZWN0b3JfdG9fY2hzIChnZW9tLT5kZXYsIGJpb3NfZ2VvbSwgZ2VvbS0+c3RhcnQsICZyYXdfcGFydC0+Y2hzX3N0YXJ0KTsKKwlzZWN0b3JfdG9fY2hzIChnZW9tLT5kZXYsIGJpb3NfZ2VvbSwgZ2VvbS0+c3RhcnQgKyBnZW9tLT5sZW5ndGggLSAxLAorCQkgICAgICAgJnJhd19wYXJ0LT5jaHNfZW5kKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50Cit3cml0ZV9leHRfdGFibGUgKGNvbnN0IFBlZERpc2sqIGRpc2ssCisgICAgICAgICAgICAgICAgIFBlZFNlY3RvciBzZWN0b3IsIGNvbnN0IFBlZFBhcnRpdGlvbiogbG9naWNhbCkKK3sKKwlEb3NSYXdUYWJsZQkJdGFibGU7CisJUGVkUGFydGl0aW9uKgkJcGFydDsKKwlQZWRTZWN0b3IJCWxiYV9vZmZzZXQ7CisKKwlQRURfQVNTRVJUIChkaXNrICE9IE5VTEwsIHJldHVybiAwKTsKKwlQRURfQVNTRVJUIChwZWRfZGlza19leHRlbmRlZF9wYXJ0aXRpb24gKGRpc2spICE9IE5VTEwsIHJldHVybiAwKTsKKwlQRURfQVNTRVJUIChsb2dpY2FsICE9IE5VTEwsIHJldHVybiAwKTsKKworCWxiYV9vZmZzZXQgPSBwZWRfZGlza19leHRlbmRlZF9wYXJ0aXRpb24gKGRpc2spLT5nZW9tLnN0YXJ0OworCisJbWVtc2V0ICgmdGFibGUsIDAsIHNpemVvZiAoRG9zUmF3VGFibGUpKTsKKwl0YWJsZS5tYWdpYyA9IFBFRF9DUFVfVE9fTEUxNiAoTVNET1NfTUFHSUMpOworCisJaWYgKCFmaWxsX3Jhd19wYXJ0ICgmdGFibGUucGFydGl0aW9uc1swXSwgbG9naWNhbCwgc2VjdG9yKSkKKwkJcmV0dXJuIDA7CisKKwlwYXJ0ID0gcGVkX2Rpc2tfZ2V0X3BhcnRpdGlvbiAoZGlzaywgbG9naWNhbC0+bnVtICsgMSk7CisJaWYgKHBhcnQpIHsKKwkJUGVkR2VvbWV0cnkqCQlnZW9tOworCQlQZWRDSFNHZW9tZXRyeQkJYmlvc19nZW9tOworCisJCWdlb20gPSBwZWRfZ2VvbWV0cnlfbmV3IChkaXNrLT5kZXYsIHBhcnQtPnByZXYtPmdlb20uc3RhcnQsCisJCQkJcGFydC0+Z2VvbS5lbmQgLSBwYXJ0LT5wcmV2LT5nZW9tLnN0YXJ0ICsgMSk7CisJCWlmICghZ2VvbSkKKwkJCXJldHVybiAwOworCQlwYXJ0aXRpb25fcHJvYmVfYmlvc19nZW9tZXRyeSAocGFydCwgJmJpb3NfZ2VvbSk7CisJCWZpbGxfZXh0X3Jhd19wYXJ0X2dlb20gKCZ0YWJsZS5wYXJ0aXRpb25zWzFdLCAmYmlvc19nZW9tLAorCQkJCSAgICAgICAgZ2VvbSwgbGJhX29mZnNldCk7CisJCXBlZF9nZW9tZXRyeV9kZXN0cm95IChnZW9tKTsKKworCQlpZiAoIXdyaXRlX2V4dF90YWJsZSAoZGlzaywgcGFydC0+cHJldi0+Z2VvbS5zdGFydCwgcGFydCkpCisJCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gcGVkX2RldmljZV93cml0ZSAoZGlzay0+ZGV2LCAodm9pZCopICZ0YWJsZSwgc2VjdG9yLCAxKTsKK30KKworc3RhdGljIGludAord3JpdGVfZW1wdHlfdGFibGUgKGNvbnN0IFBlZERpc2sqIGRpc2ssIFBlZFNlY3RvciBzZWN0b3IpCit7CisJRG9zUmF3VGFibGUJCXRhYmxlOworCisJUEVEX0FTU0VSVCAoZGlzayAhPSBOVUxMLCByZXR1cm4gMCk7CisKKwltZW1zZXQgKCZ0YWJsZSwgMCwgc2l6ZW9mIChEb3NSYXdUYWJsZSkpOworCXRhYmxlLm1hZ2ljID0gUEVEX0NQVV9UT19MRTE2IChNU0RPU19NQUdJQyk7CisKKwlyZXR1cm4gcGVkX2RldmljZV93cml0ZSAoZGlzay0+ZGV2LCAodm9pZCopICZ0YWJsZSwgc2VjdG9yLCAxKTsKK30KKworLyogRmluZCB0aGUgZmlyc3QgbG9naWNhbCBwYXJ0aXRpb24sIGFuZCB3cml0ZSB0aGUgcGFydGl0aW9uIHRhYmxlIGZvciBpdC4KKyAqLworc3RhdGljIGludAord3JpdGVfZXh0ZW5kZWRfcGFydGl0aW9ucyAoY29uc3QgUGVkRGlzayogZGlzaykKK3sKKwlQZWRQYXJ0aXRpb24qCQlleHRfcGFydDsKKwlQZWRQYXJ0aXRpb24qCQlwYXJ0OworCVBlZENIU0dlb21ldHJ5CQliaW9zX2dlb207CisKKwlQRURfQVNTRVJUIChkaXNrICE9IE5VTEwsIHJldHVybiAwKTsKKworCWV4dF9wYXJ0ID0gcGVkX2Rpc2tfZXh0ZW5kZWRfcGFydGl0aW9uIChkaXNrKTsKKwlwYXJ0aXRpb25fcHJvYmVfYmlvc19nZW9tZXRyeSAoZXh0X3BhcnQsICZiaW9zX2dlb20pOworCXBhcnQgPSBwZWRfZGlza19nZXRfcGFydGl0aW9uIChkaXNrLCA1KTsKKwlpZiAocGFydCkKKwkJcmV0dXJuIHdyaXRlX2V4dF90YWJsZSAoZGlzaywgZXh0X3BhcnQtPmdlb20uc3RhcnQsIHBhcnQpOworCWVsc2UKKwkJcmV0dXJuIHdyaXRlX2VtcHR5X3RhYmxlIChkaXNrLCBleHRfcGFydC0+Z2VvbS5zdGFydCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgZ2VuZXJhdGVfcmFuZG9tX2lkICh2b2lkKQoreworCXN0cnVjdCB0aW1ldmFsIHR2OworCWludCByYzsKKwlyYyA9IGdldHRpbWVvZmRheSgmdHYsIE5VTEwpOworCWlmIChyYyA9PSAtMSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuICh1aW50MzJfdCkodHYudHZfdXNlYyAmIDB4RkZGRkZGRkZVTCk7Cit9CisKK3N0YXRpYyBpbnQKK21zZG9zX3dyaXRlIChjb25zdCBQZWREaXNrKiBkaXNrKQoreworCURvc1Jhd1RhYmxlCQl0YWJsZTsKKwlQZWRQYXJ0aXRpb24qCQlwYXJ0OworCWludAkJCWk7CisKKwlQRURfQVNTRVJUIChkaXNrICE9IE5VTEwsIHJldHVybiAwKTsKKwlQRURfQVNTRVJUIChkaXNrLT5kZXYgIT0gTlVMTCwgcmV0dXJuIDApOworCisJcGVkX2RldmljZV9yZWFkIChkaXNrLT5kZXYsICZ0YWJsZSwgMCwgMSk7CisKKwlpZiAoIXRhYmxlLmJvb3RfY29kZVswXSkgeworCQltZW1zZXQgKHRhYmxlLmJvb3RfY29kZSwgMCwgNTEyKTsKKwkJbWVtY3B5ICh0YWJsZS5ib290X2NvZGUsIE1CUl9CT09UX0NPREUsIHNpemVvZiAoTUJSX0JPT1RfQ09ERSkpOworCX0KKworCS8qIElmIHRoZXJlIGlzIG5vIHVuaXF1ZSBpZGVudGlmaWVyLCBnZW5lcmF0ZSBhIHJhbmRvbSBvbmUgKi8KKwlpZiAoIXRhYmxlLm1icl9zaWduYXR1cmUpCisJCXRhYmxlLm1icl9zaWduYXR1cmUgPSBnZW5lcmF0ZV9yYW5kb21faWQoKTsKKworCW1lbXNldCAodGFibGUucGFydGl0aW9ucywgMCwgc2l6ZW9mIChEb3NSYXdQYXJ0aXRpb24pICogNCk7CisJdGFibGUubWFnaWMgPSBQRURfQ1BVX1RPX0xFMTYgKE1TRE9TX01BR0lDKTsKKworCWZvciAoaT0xOyBpPD00OyBpKyspIHsKKwkJcGFydCA9IHBlZF9kaXNrX2dldF9wYXJ0aXRpb24gKGRpc2ssIGkpOworCQlpZiAoIXBhcnQpCisJCQljb250aW51ZTsKKworCQlpZiAoIWZpbGxfcmF3X3BhcnQgKCZ0YWJsZS5wYXJ0aXRpb25zIFtpIC0gMV0sIHBhcnQsIDApKQorCQkJcmV0dXJuIDA7CisKKwkJaWYgKHBhcnQtPnR5cGUgPT0gUEVEX1BBUlRJVElPTl9FWFRFTkRFRCkgeworCQkJaWYgKCF3cml0ZV9leHRlbmRlZF9wYXJ0aXRpb25zIChkaXNrKSkKKwkJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCWlmICghcGVkX2RldmljZV93cml0ZSAoZGlzay0+ZGV2LCAodm9pZCopICZ0YWJsZSwgMCwgMSkpCisJCXJldHVybiAwOworCXJldHVybiBwZWRfZGV2aWNlX3N5bmMgKGRpc2stPmRldik7Cit9CisjZW5kaWYgLyogIURJU0NPVkVSX09OTFkgKi8KKworc3RhdGljIFBlZFBhcnRpdGlvbioKK21zZG9zX3BhcnRpdGlvbl9uZXcgKGNvbnN0IFBlZERpc2sqIGRpc2ssIFBlZFBhcnRpdGlvblR5cGUgcGFydF90eXBlLAorCQkgICAgIGNvbnN0IFBlZEZpbGVTeXN0ZW1UeXBlKiBmc190eXBlLAorCQkgICAgIFBlZFNlY3RvciBzdGFydCwgUGVkU2VjdG9yIGVuZCkKK3sKKwlQZWRQYXJ0aXRpb24qCQlwYXJ0OworCURvc1BhcnRpdGlvbkRhdGEqCWRvc19kYXRhOworCisJcGFydCA9IF9wZWRfcGFydGl0aW9uX2FsbG9jIChkaXNrLCBwYXJ0X3R5cGUsIGZzX3R5cGUsIHN0YXJ0LCBlbmQpOworCWlmICghcGFydCkKKwkJZ290byBlcnJvcjsKKworCWlmIChwZWRfcGFydGl0aW9uX2lzX2FjdGl2ZSAocGFydCkpIHsKKwkJcGFydC0+ZGlza19zcGVjaWZpYworCQkgICAgICAgCT0gZG9zX2RhdGEgPSBwZWRfbWFsbG9jIChzaXplb2YgKERvc1BhcnRpdGlvbkRhdGEpKTsKKwkJaWYgKCFkb3NfZGF0YSkKKwkJCWdvdG8gZXJyb3JfZnJlZV9wYXJ0OworCQlkb3NfZGF0YS0+b3JpZyA9IE5VTEw7CisJCWRvc19kYXRhLT5zeXN0ZW0gPSBQQVJUSVRJT05fTElOVVg7CisJCWRvc19kYXRhLT5oaWRkZW4gPSAwOworCQlkb3NfZGF0YS0+Ym9vdCA9IDA7CisJCWRvc19kYXRhLT5yYWlkID0gMDsKKwkJZG9zX2RhdGEtPmx2bSA9IDA7CisJCWRvc19kYXRhLT5sYmEgPSAwOworCQlkb3NfZGF0YS0+cGFsbyA9IDA7CisJCWRvc19kYXRhLT5wcmVwID0gMDsKKwl9IGVsc2UgeworCQlwYXJ0LT5kaXNrX3NwZWNpZmljID0gTlVMTDsKKwl9CisJcmV0dXJuIHBhcnQ7CisKKwlwZWRfZnJlZSAoZG9zX2RhdGEpOworZXJyb3JfZnJlZV9wYXJ0OgorCXBlZF9mcmVlIChwYXJ0KTsKK2Vycm9yOgorCXJldHVybiAwOworfQorCitzdGF0aWMgUGVkUGFydGl0aW9uKgorbXNkb3NfcGFydGl0aW9uX2R1cGxpY2F0ZSAoY29uc3QgUGVkUGFydGl0aW9uKiBwYXJ0KQoreworCVBlZFBhcnRpdGlvbioJCW5ld19wYXJ0OworCURvc1BhcnRpdGlvbkRhdGEqCW5ld19kb3NfZGF0YTsKKwlEb3NQYXJ0aXRpb25EYXRhKglvbGRfZG9zX2RhdGE7CisKKwluZXdfcGFydCA9IHBlZF9wYXJ0aXRpb25fbmV3IChwYXJ0LT5kaXNrLCBwYXJ0LT50eXBlLCBwYXJ0LT5mc190eXBlLAorCQkJCSAgICAgIHBhcnQtPmdlb20uc3RhcnQsIHBhcnQtPmdlb20uZW5kKTsKKwlpZiAoIW5ld19wYXJ0KQorCQlyZXR1cm4gTlVMTDsKKwluZXdfcGFydC0+bnVtID0gcGFydC0+bnVtOworCisJb2xkX2Rvc19kYXRhID0gKERvc1BhcnRpdGlvbkRhdGEqKSBwYXJ0LT5kaXNrX3NwZWNpZmljOworCW5ld19kb3NfZGF0YSA9IChEb3NQYXJ0aXRpb25EYXRhKikgbmV3X3BhcnQtPmRpc2tfc3BlY2lmaWM7CisJbmV3X2Rvc19kYXRhLT5zeXN0ZW0gPSBvbGRfZG9zX2RhdGEtPnN5c3RlbTsKKwluZXdfZG9zX2RhdGEtPmJvb3QgPSBvbGRfZG9zX2RhdGEtPmJvb3Q7CisJbmV3X2Rvc19kYXRhLT5oaWRkZW4gPSBvbGRfZG9zX2RhdGEtPmhpZGRlbjsKKwluZXdfZG9zX2RhdGEtPnJhaWQgPSBvbGRfZG9zX2RhdGEtPnJhaWQ7CisJbmV3X2Rvc19kYXRhLT5sdm0gPSBvbGRfZG9zX2RhdGEtPmx2bTsKKwluZXdfZG9zX2RhdGEtPmxiYSA9IG9sZF9kb3NfZGF0YS0+bGJhOworCW5ld19kb3NfZGF0YS0+cGFsbyA9IG9sZF9kb3NfZGF0YS0+cGFsbzsKKwluZXdfZG9zX2RhdGEtPnByZXAgPSBvbGRfZG9zX2RhdGEtPnByZXA7CisKKwlpZiAob2xkX2Rvc19kYXRhLT5vcmlnKSB7CisJCW5ld19kb3NfZGF0YS0+b3JpZyA9IHBlZF9tYWxsb2MgKHNpemVvZiAoT3JpZ1N0YXRlKSk7CisJCWlmICghbmV3X2Rvc19kYXRhLT5vcmlnKSB7CisJCQlwZWRfcGFydGl0aW9uX2Rlc3Ryb3kgKG5ld19wYXJ0KTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCW5ld19kb3NfZGF0YS0+b3JpZy0+Z2VvbSA9IG9sZF9kb3NfZGF0YS0+b3JpZy0+Z2VvbTsKKwkJbmV3X2Rvc19kYXRhLT5vcmlnLT5yYXdfcGFydCA9IG9sZF9kb3NfZGF0YS0+b3JpZy0+cmF3X3BhcnQ7CisJCW5ld19kb3NfZGF0YS0+b3JpZy0+bGJhX29mZnNldCA9IG9sZF9kb3NfZGF0YS0+b3JpZy0+bGJhX29mZnNldDsKKwl9CisJcmV0dXJuIG5ld19wYXJ0OworfQorCitzdGF0aWMgdm9pZAorbXNkb3NfcGFydGl0aW9uX2Rlc3Ryb3kgKFBlZFBhcnRpdGlvbiogcGFydCkKK3sKKwlQRURfQVNTRVJUIChwYXJ0ICE9IE5VTEwsIHJldHVybik7CisKKwlpZiAocGVkX3BhcnRpdGlvbl9pc19hY3RpdmUgKHBhcnQpKSB7CisJCURvc1BhcnRpdGlvbkRhdGEqIGRvc19kYXRhOworCQlkb3NfZGF0YSA9IChEb3NQYXJ0aXRpb25EYXRhKikgcGFydC0+ZGlza19zcGVjaWZpYzsKKwkJaWYgKGRvc19kYXRhLT5vcmlnKQorCQkJcGVkX2ZyZWUgKGRvc19kYXRhLT5vcmlnKTsKKwkJcGVkX2ZyZWUgKHBhcnQtPmRpc2tfc3BlY2lmaWMpOworCX0KKwlwZWRfZnJlZSAocGFydCk7Cit9CisKK3N0YXRpYyBpbnQKK21zZG9zX3BhcnRpdGlvbl9zZXRfc3lzdGVtIChQZWRQYXJ0aXRpb24qIHBhcnQsCisJCQkgICAgY29uc3QgUGVkRmlsZVN5c3RlbVR5cGUqIGZzX3R5cGUpCit7CisJRG9zUGFydGl0aW9uRGF0YSogZG9zX2RhdGEgPSBwYXJ0LT5kaXNrX3NwZWNpZmljOworCisJcGFydC0+ZnNfdHlwZSA9IGZzX3R5cGU7CisKKwlpZiAoZG9zX2RhdGEtPmhpZGRlbgorCQkgICAgJiYgZnNfdHlwZQorCQkgICAgJiYgc3RybmNtcCAoZnNfdHlwZS0+bmFtZSwgImZhdCIsIDMpICE9IDAKKwkJICAgICYmIHN0cmNtcCAoZnNfdHlwZS0+bmFtZSwgIm50ZnMiKSAhPSAwKQorCQlkb3NfZGF0YS0+aGlkZGVuID0gMDsKKworCWlmIChwYXJ0LT50eXBlICYgUEVEX1BBUlRJVElPTl9FWFRFTkRFRCkgeworCQlkb3NfZGF0YS0+cmFpZCA9IDA7CisJCWRvc19kYXRhLT5sdm0gPSAwOworCQlkb3NfZGF0YS0+cGFsbyA9IDA7CisJCWRvc19kYXRhLT5wcmVwID0gMDsKKwkJaWYgKGRvc19kYXRhLT5sYmEpCisJCQlkb3NfZGF0YS0+c3lzdGVtID0gUEFSVElUSU9OX0VYVF9MQkE7CisJCWVsc2UKKwkJCWRvc19kYXRhLT5zeXN0ZW0gPSBQQVJUSVRJT05fRE9TX0VYVDsKKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKGRvc19kYXRhLT5sdm0pIHsKKwkJZG9zX2RhdGEtPnN5c3RlbSA9IFBBUlRJVElPTl9MSU5VWF9MVk07CisJCXJldHVybiAxOworCX0KKwlpZiAoZG9zX2RhdGEtPnJhaWQpIHsKKwkJZG9zX2RhdGEtPnN5c3RlbSA9IFBBUlRJVElPTl9MSU5VWF9SQUlEOworCQlyZXR1cm4gMTsKKwl9CisJaWYgKGRvc19kYXRhLT5wYWxvKSB7CisJCWRvc19kYXRhLT5zeXN0ZW0gPSBQQVJUSVRJT05fUEFMTzsKKwkJcmV0dXJuIDE7CisJfQorCWlmIChkb3NfZGF0YS0+cHJlcCkgeworCQlkb3NfZGF0YS0+c3lzdGVtID0gUEFSVElUSU9OX1BSRVA7CisJCXJldHVybiAxOworCX0KKworCWlmICghZnNfdHlwZSkKKwkJZG9zX2RhdGEtPnN5c3RlbSA9IFBBUlRJVElPTl9MSU5VWDsKKwllbHNlIGlmICghc3RyY21wIChmc190eXBlLT5uYW1lLCAiZmF0MTYiKSkgeworCQlkb3NfZGF0YS0+c3lzdGVtID0gZG9zX2RhdGEtPmxiYQorCQkJCSAgID8gUEFSVElUSU9OX0ZBVDE2X0xCQSA6IFBBUlRJVElPTl9GQVQxNjsKKwkJZG9zX2RhdGEtPnN5c3RlbSB8PSBkb3NfZGF0YS0+aGlkZGVuID8gUEFSVF9GTEFHX0hJRERFTiA6IDA7CisJfSBlbHNlIGlmICghc3RyY21wIChmc190eXBlLT5uYW1lLCAiZmF0MzIiKSkgeworCQlkb3NfZGF0YS0+c3lzdGVtID0gZG9zX2RhdGEtPmxiYQorCQkJCSAgID8gUEFSVElUSU9OX0ZBVDMyX0xCQSA6IFBBUlRJVElPTl9GQVQzMjsKKwkJZG9zX2RhdGEtPnN5c3RlbSB8PSBkb3NfZGF0YS0+aGlkZGVuID8gUEFSVF9GTEFHX0hJRERFTiA6IDA7CisJfSBlbHNlIGlmICghc3RyY21wIChmc190eXBlLT5uYW1lLCAibnRmcyIpCisJCSAgIHx8ICFzdHJjbXAgKGZzX3R5cGUtPm5hbWUsICJocGZzIikpIHsKKwkJZG9zX2RhdGEtPnN5c3RlbSA9IFBBUlRJVElPTl9OVEZTOworCQlkb3NfZGF0YS0+c3lzdGVtIHw9IGRvc19kYXRhLT5oaWRkZW4gPyBQQVJUX0ZMQUdfSElEREVOIDogMDsKKwl9IGVsc2UgaWYgKCFzdHJjbXAgKGZzX3R5cGUtPm5hbWUsICJzdW4tdWZzIikpCisJCWRvc19kYXRhLT5zeXN0ZW0gPSBQQVJUSVRJT05fU1VOX1VGUzsKKwllbHNlIGlmICghc3RyY21wIChmc190eXBlLT5uYW1lLCAibGludXgtc3dhcCIpKQorCQlkb3NfZGF0YS0+c3lzdGVtID0gUEFSVElUSU9OX0xJTlVYX1NXQVA7CisJZWxzZQorCQlkb3NfZGF0YS0+c3lzdGVtID0gUEFSVElUSU9OX0xJTlVYOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK21zZG9zX3BhcnRpdGlvbl9zZXRfZmxhZyAoUGVkUGFydGl0aW9uKiBwYXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBQZWRQYXJ0aXRpb25GbGFnIGZsYWcsIGludCBzdGF0ZSkKK3sKKwlQZWREaXNrKgkJCWRpc2s7CisJUGVkUGFydGl0aW9uKgkJCXdhbGs7CisJRG9zUGFydGl0aW9uRGF0YSoJCWRvc19kYXRhOworCisJUEVEX0FTU0VSVCAocGFydCAhPSBOVUxMLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAocGFydC0+ZGlza19zcGVjaWZpYyAhPSBOVUxMLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAocGFydC0+ZGlzayAhPSBOVUxMLCByZXR1cm4gMCk7CisKKwlkb3NfZGF0YSA9IHBhcnQtPmRpc2tfc3BlY2lmaWM7CisJZGlzayA9IHBhcnQtPmRpc2s7CisKKwlzd2l0Y2ggKGZsYWcpIHsKKwljYXNlIFBFRF9QQVJUSVRJT05fSElEREVOOgorCQlpZiAocGFydC0+dHlwZSA9PSBQRURfUEFSVElUSU9OX0VYVEVOREVEKSB7CisJCQlwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCQlQRURfRVhDRVBUSU9OX0VSUk9SLAorCQkJCVBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJCV8oIkV4dGVuZGVkIHBhcnRpdGlvbnMgY2Fubm90IGJlIGhpZGRlbiBvbiAiCisJCQkJICAibXNkb3MgZGlzayBsYWJlbHMuIikpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJZG9zX2RhdGEtPmhpZGRlbiA9IHN0YXRlOworCQlyZXR1cm4gcGVkX3BhcnRpdGlvbl9zZXRfc3lzdGVtIChwYXJ0LCBwYXJ0LT5mc190eXBlKTsKKworCWNhc2UgUEVEX1BBUlRJVElPTl9CT09UOgorCQlkb3NfZGF0YS0+Ym9vdCA9IHN0YXRlOworCQlpZiAoIXN0YXRlKQorCQkJcmV0dXJuIDE7CisKKwkJd2FsayA9IHBlZF9kaXNrX25leHRfcGFydGl0aW9uIChkaXNrLCBOVUxMKTsKKwkJZm9yICg7IHdhbGs7IHdhbGsgPSBwZWRfZGlza19uZXh0X3BhcnRpdGlvbiAoZGlzaywgd2FsaykpIHsKKwkJCWlmICh3YWxrID09IHBhcnQgfHwgIXBlZF9wYXJ0aXRpb25faXNfYWN0aXZlICh3YWxrKSkKKwkJCQljb250aW51ZTsKKwkJCW1zZG9zX3BhcnRpdGlvbl9zZXRfZmxhZyAod2FsaywgUEVEX1BBUlRJVElPTl9CT09ULCAwKTsKKwkJfQorCQlyZXR1cm4gMTsKKworCWNhc2UgUEVEX1BBUlRJVElPTl9SQUlEOgorCQlpZiAoc3RhdGUpIHsKKwkJCWRvc19kYXRhLT5oaWRkZW4gPSAwOworCQkJZG9zX2RhdGEtPmx2bSA9IDA7CisJCQlkb3NfZGF0YS0+cGFsbyA9IDA7CisJCQlkb3NfZGF0YS0+cHJlcCA9IDA7CisJCX0KKwkJZG9zX2RhdGEtPnJhaWQgPSBzdGF0ZTsKKwkJcmV0dXJuIHBlZF9wYXJ0aXRpb25fc2V0X3N5c3RlbSAocGFydCwgcGFydC0+ZnNfdHlwZSk7CisKKwljYXNlIFBFRF9QQVJUSVRJT05fTFZNOgorCQlpZiAoc3RhdGUpIHsKKwkJCWRvc19kYXRhLT5oaWRkZW4gPSAwOworCQkJZG9zX2RhdGEtPnJhaWQgPSAwOworCQkJZG9zX2RhdGEtPnBhbG8gPSAwOworCQkJZG9zX2RhdGEtPnByZXAgPSAwOworCQl9CisJCWRvc19kYXRhLT5sdm0gPSBzdGF0ZTsKKwkJcmV0dXJuIHBlZF9wYXJ0aXRpb25fc2V0X3N5c3RlbSAocGFydCwgcGFydC0+ZnNfdHlwZSk7CisKKwljYXNlIFBFRF9QQVJUSVRJT05fTEJBOgorCQlkb3NfZGF0YS0+bGJhID0gc3RhdGU7CisJCXJldHVybiBwZWRfcGFydGl0aW9uX3NldF9zeXN0ZW0gKHBhcnQsIHBhcnQtPmZzX3R5cGUpOworCisJY2FzZSBQRURfUEFSVElUSU9OX1BBTE86CisJCWlmIChzdGF0ZSkgeworCQkJZG9zX2RhdGEtPmhpZGRlbiA9IDA7CisJCQlkb3NfZGF0YS0+cmFpZCA9IDA7CisJCQlkb3NfZGF0YS0+bHZtID0gMDsKKwkJfQorCQlkb3NfZGF0YS0+cGFsbyA9IHN0YXRlOworCQlyZXR1cm4gcGVkX3BhcnRpdGlvbl9zZXRfc3lzdGVtIChwYXJ0LCBwYXJ0LT5mc190eXBlKTsKKworCWNhc2UgUEVEX1BBUlRJVElPTl9QUkVQOgorCQlpZiAoc3RhdGUpIHsKKwkJCWRvc19kYXRhLT5oaWRkZW4gPSAwOworCQkJZG9zX2RhdGEtPnJhaWQgPSAwOworCQkJZG9zX2RhdGEtPmx2bSA9IDA7CisJCX0KKwkJZG9zX2RhdGEtPnByZXAgPSBzdGF0ZTsKKwkJcmV0dXJuIHBlZF9wYXJ0aXRpb25fc2V0X3N5c3RlbSAocGFydCwgcGFydC0+ZnNfdHlwZSk7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK21zZG9zX3BhcnRpdGlvbl9nZXRfZmxhZyAoY29uc3QgUGVkUGFydGl0aW9uKiBwYXJ0LCBQZWRQYXJ0aXRpb25GbGFnIGZsYWcpCit7CisJRG9zUGFydGl0aW9uRGF0YSoJZG9zX2RhdGE7CisKKwlQRURfQVNTRVJUIChwYXJ0ICE9IE5VTEwsIHJldHVybiAwKTsKKwlQRURfQVNTRVJUIChwYXJ0LT5kaXNrX3NwZWNpZmljICE9IE5VTEwsIHJldHVybiAwKTsKKworCWRvc19kYXRhID0gcGFydC0+ZGlza19zcGVjaWZpYzsKKwlzd2l0Y2ggKGZsYWcpIHsKKwljYXNlIFBFRF9QQVJUSVRJT05fSElEREVOOgorCQlyZXR1cm4gZG9zX2RhdGEtPmhpZGRlbjsKKworCWNhc2UgUEVEX1BBUlRJVElPTl9CT09UOgorCQlyZXR1cm4gZG9zX2RhdGEtPmJvb3Q7CisKKwljYXNlIFBFRF9QQVJUSVRJT05fUkFJRDoKKwkJcmV0dXJuIGRvc19kYXRhLT5yYWlkOworCisJY2FzZSBQRURfUEFSVElUSU9OX0xWTToKKwkJcmV0dXJuIGRvc19kYXRhLT5sdm07CisKKwljYXNlIFBFRF9QQVJUSVRJT05fTEJBOgorCQlyZXR1cm4gZG9zX2RhdGEtPmxiYTsKKworCWNhc2UgUEVEX1BBUlRJVElPTl9QQUxPOgorCQlyZXR1cm4gZG9zX2RhdGEtPnBhbG87CisKKwljYXNlIFBFRF9QQVJUSVRJT05fUFJFUDoKKwkJcmV0dXJuIGRvc19kYXRhLT5wcmVwOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgaW50Cittc2Rvc19wYXJ0aXRpb25faXNfZmxhZ19hdmFpbGFibGUgKGNvbnN0IFBlZFBhcnRpdGlvbiogcGFydCwKKwkJCQkgICBQZWRQYXJ0aXRpb25GbGFnIGZsYWcpCit7CisJc3dpdGNoIChmbGFnKSB7CisJY2FzZSBQRURfUEFSVElUSU9OX0hJRERFTjoKKwljYXNlIFBFRF9QQVJUSVRJT05fQk9PVDoKKwljYXNlIFBFRF9QQVJUSVRJT05fUkFJRDoKKwljYXNlIFBFRF9QQVJUSVRJT05fTFZNOgorCWNhc2UgUEVEX1BBUlRJVElPTl9MQkE6CisJY2FzZSBQRURfUEFSVElUSU9OX1BBTE86CisJY2FzZSBQRURfUEFSVElUSU9OX1BSRVA6CisJCXJldHVybiAxOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgUGVkR2VvbWV0cnkqCitfdHJ5X2NvbnN0cmFpbnQgKGNvbnN0IFBlZFBhcnRpdGlvbiogcGFydCwgY29uc3QgUGVkQ29uc3RyYWludCogZXh0ZXJuYWwsCisJCSBQZWRDb25zdHJhaW50KiBpbnRlcm5hbCkKK3sKKwlQZWRDb25zdHJhaW50KgkJaW50ZXJzZWN0aW9uOworCVBlZEdlb21ldHJ5KgkJc29sdXRpb247CisKKwlpbnRlcnNlY3Rpb24gPSBwZWRfY29uc3RyYWludF9pbnRlcnNlY3QgKGV4dGVybmFsLCBpbnRlcm5hbCk7CisJcGVkX2NvbnN0cmFpbnRfZGVzdHJveSAoaW50ZXJuYWwpOworCWlmICghaW50ZXJzZWN0aW9uKQorCQlyZXR1cm4gTlVMTDsKKworCXNvbHV0aW9uID0gcGVkX2NvbnN0cmFpbnRfc29sdmVfbmVhcmVzdCAoaW50ZXJzZWN0aW9uLCAmcGFydC0+Z2VvbSk7CisJcGVkX2NvbnN0cmFpbnRfZGVzdHJveSAoaW50ZXJzZWN0aW9uKTsKKwlyZXR1cm4gc29sdXRpb247Cit9CisKK3N0YXRpYyBQZWRHZW9tZXRyeSoKK19iZXN0X3NvbHV0aW9uIChjb25zdCBQZWRQYXJ0aXRpb24qIHBhcnQsIGNvbnN0IFBlZENIU0dlb21ldHJ5KiBiaW9zX2dlb20sCisJCVBlZEdlb21ldHJ5KiBhLCBQZWRHZW9tZXRyeSogYikKK3sKKwlQZWRTZWN0b3IJY3lsX3NpemUgPSBiaW9zX2dlb20tPmhlYWRzICogYmlvc19nZW9tLT5zZWN0b3JzOworCWludAkJYV9jeWxpbmRlcjsKKwlpbnQJCWJfY3lsaW5kZXI7CisKKwlpZiAoIWEpCisJCXJldHVybiBiOworCWlmICghYikKKwkJcmV0dXJuIGE7CisKKwlhX2N5bGluZGVyID0gYS0+c3RhcnQgLyBjeWxfc2l6ZTsKKwliX2N5bGluZGVyID0gYi0+c3RhcnQgLyBjeWxfc2l6ZTsKKworCWlmIChhX2N5bGluZGVyID09IGJfY3lsaW5kZXIpIHsKKwkJaWYgKCAoYS0+c3RhcnQgLyBiaW9zX2dlb20tPnNlY3RvcnMpICUgYmlvc19nZW9tLT5oZWFkcworCQkJICA8IChiLT5zdGFydCAvIGJpb3NfZ2VvbS0+c2VjdG9ycykgJSBiaW9zX2dlb20tPmhlYWRzKQorCSAgICAgICAJCWdvdG8gY2hvb3NlX2E7CisJCWVsc2UKKwkJCWdvdG8gY2hvb3NlX2I7CisJfSBlbHNlIHsKKwkJUGVkU2VjdG9yCWFfZGVsdGE7CisJCVBlZFNlY3RvcgliX2RlbHRhOworCisJCWFfZGVsdGEgPSBhYnMgKHBhcnQtPmdlb20uc3RhcnQgLSBhLT5zdGFydCk7CisJCWJfZGVsdGEgPSBhYnMgKHBhcnQtPmdlb20uc3RhcnQgLSBiLT5zdGFydCk7CisKKwkJaWYgKGFfZGVsdGEgPCBiX2RlbHRhKQorCQkJZ290byBjaG9vc2VfYTsKKwkJZWxzZQorCQkJZ290byBjaG9vc2VfYjsKKwl9CisKKwlyZXR1cm4gTlVMTDsJLyogbmV2ZXIgZ2V0IGhlcmUhICovCisKK2Nob29zZV9hOgorCXBlZF9nZW9tZXRyeV9kZXN0cm95IChiKTsKKwlyZXR1cm4gYTsKKworY2hvb3NlX2I6CisJcGVkX2dlb21ldHJ5X2Rlc3Ryb3kgKGEpOworCXJldHVybiBiOworfQorCisvKiBUaGlzIGNvbnN0cmFpbnQgaXMgZm9yICJub3JtYWwiIHByaW1hcnkgcGFydGl0aW9ucywgdGhhdCBzdGFydCBhdCB0aGUKKyAqIGJlZ2lubmluZyBvZiBhIGN5bGluZGVyLCBhbmQgZW5kIGF0IHRoZSBlbmQgb2YgYSBjeWxpbmRlci4KKyAqIAlOb3RlOiB5b3UgY2FuJ3Qgc3RhcnQgYSBwYXJ0aXRpb24gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgMXN0CisgKiBjeWxpbmRlciwgYmVjYXVzZSB0aGF0J3Mgd2hlcmUgdGhlIHBhcnRpdGlvbiB0YWJsZSBpcyEgIFRoZXJlIGFyZSBkaWZmZXJlbnQKKyAqIHJ1bGVzIGZvciB0aGF0IC0gc2VlIHRoZSBfcHJpbWFyeV9zdGFydF9jb25zdHJhaW50LgorICovCitzdGF0aWMgUGVkQ29uc3RyYWludCoKK19wcmltYXJ5X2NvbnN0cmFpbnQgKGNvbnN0IFBlZERpc2sqIGRpc2ssIGNvbnN0IFBlZENIU0dlb21ldHJ5KiBiaW9zX2dlb20sCisJCSAgICAgUGVkR2VvbWV0cnkqIG1pbl9nZW9tKQoreworCVBlZERldmljZSoJZGV2ID0gZGlzay0+ZGV2OworCVBlZFNlY3RvcgljeWxpbmRlcl9zaXplID0gYmlvc19nZW9tLT5zZWN0b3JzICogYmlvc19nZW9tLT5oZWFkczsKKwlQZWRBbGlnbm1lbnQJc3RhcnRfYWxpZ247CisJUGVkQWxpZ25tZW50CWVuZF9hbGlnbjsKKwlQZWRHZW9tZXRyeQlzdGFydF9nZW9tOworCVBlZEdlb21ldHJ5CWVuZF9nZW9tOworCisJaWYgKCFwZWRfYWxpZ25tZW50X2luaXQgKCZzdGFydF9hbGlnbiwgMCwgY3lsaW5kZXJfc2l6ZSkpCisJCXJldHVybiBOVUxMOworCWlmICghcGVkX2FsaWdubWVudF9pbml0ICgmZW5kX2FsaWduLCAtMSwgY3lsaW5kZXJfc2l6ZSkpCisJCXJldHVybiBOVUxMOworCisJaWYgKG1pbl9nZW9tKSB7CisJCWlmIChtaW5fZ2VvbS0+c3RhcnQgPCBjeWxpbmRlcl9zaXplKQorCQkJcmV0dXJuIE5VTEw7CisJCWlmICghcGVkX2dlb21ldHJ5X2luaXQgKCZzdGFydF9nZW9tLCBkZXYsIGN5bGluZGVyX3NpemUsCisJCQkgICAgICAgCQltaW5fZ2VvbS0+c3RhcnQgKyAxIC0gY3lsaW5kZXJfc2l6ZSkpCisJCQlyZXR1cm4gTlVMTDsKKwkJaWYgKCFwZWRfZ2VvbWV0cnlfaW5pdCAoJmVuZF9nZW9tLCBkZXYsIG1pbl9nZW9tLT5lbmQsCisJCQkgICAgICAgCQlkZXYtPmxlbmd0aCAtIG1pbl9nZW9tLT5lbmQpKQorCQkJcmV0dXJuIE5VTEw7CisJfSBlbHNlIHsKKwkJaWYgKCFwZWRfZ2VvbWV0cnlfaW5pdCAoJnN0YXJ0X2dlb20sIGRldiwgY3lsaW5kZXJfc2l6ZSwKKwkJCSAgICAgICAJCWRldi0+bGVuZ3RoIC0gY3lsaW5kZXJfc2l6ZSkpCisJCQlyZXR1cm4gTlVMTDsKKwkJaWYgKCFwZWRfZ2VvbWV0cnlfaW5pdCAoJmVuZF9nZW9tLCBkZXYsIDAsIGRldi0+bGVuZ3RoKSkKKwkJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiBwZWRfY29uc3RyYWludF9uZXcgKCZzdGFydF9hbGlnbiwgJmVuZF9hbGlnbiwgJnN0YXJ0X2dlb20sCisJCQkJICAgJmVuZF9nZW9tLCAxLCBkZXYtPmxlbmd0aCk7Cit9CisKKy8qIFRoaXMgY29uc3RyYWludCBpcyBmb3IgcGFydGl0aW9ucyBzdGFydGluZyBvbiB0aGUgZmlyc3QgY3lsaW5kZXIuICBUaGV5CisgKiBtdXN0IHN0YXJ0IG9uIHRoZSAybmQgaGVhZCBvZiB0aGUgMXN0IGN5bGluZGVyLgorICoKKyAqIE5PVEU6IFdlIGRvbid0IGFsd2F5cyBzdGFydCBvbiB0aGUgMm5kIGhlYWQgb2YgdGhlIDFzdCBjeWxpbmRlci4gIFdpbmRvd3MKKyAqIFZpc3RhIGFsaWducyBzdGFydGluZyBwYXJ0aXRpb25zIGF0IHNlY3RvciAyMDQ4ICgweDgwMCkgYnkgZGVmYXVsdC4gIFNlZToKKyAqIGh0dHA6Ly9zdXBwb3J0Lm1pY3Jvc29mdC5jb20va2IvOTIzMzMyCisgKi8KK3N0YXRpYyBQZWRDb25zdHJhaW50KgorX3ByaW1hcnlfc3RhcnRfY29uc3RyYWludCAoY29uc3QgUGVkRGlzayogZGlzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBlZFBhcnRpdGlvbiAqcGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBlZENIU0dlb21ldHJ5KiBiaW9zX2dlb20sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQZWRHZW9tZXRyeSogbWluX2dlb20pCit7CisJUGVkRGV2aWNlKglkZXYgPSBkaXNrLT5kZXY7CisJUGVkU2VjdG9yCWN5bGluZGVyX3NpemUgPSBiaW9zX2dlb20tPnNlY3RvcnMgKiBiaW9zX2dlb20tPmhlYWRzOworCVBlZEFsaWdubWVudAlzdGFydF9hbGlnbjsKKwlQZWRBbGlnbm1lbnQJZW5kX2FsaWduOworCVBlZEdlb21ldHJ5CXN0YXJ0X2dlb207CisJUGVkR2VvbWV0cnkJZW5kX2dlb207CisJUGVkU2VjdG9yIHN0YXJ0X3BvczsKKworCWlmIChwYXJ0LT5nZW9tLnN0YXJ0ID09IDIwNDgpCisJCS8qIGNoZWNrIGZvciBrbm93biBXaW5kb3dzIFZpc3RhIChOVEZTID49IDMuMSkgYWxpZ25tZW50cyAqLworCQkvKiBzZWN0b3IgMHg4MDAgPT0gMjA0OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJc3RhcnRfcG9zID0gMjA0ODsKKwllbHNlCisJCS8qIGFsbCBvdGhlciBwcmltYXJ5IHBhcnRpdGlvbnMgb24gYSBET1MgbGFiZWwgYWxpZ24gdG8gICAqLworCQkvKiB0aGUgMm5kIGhlYWQgb2YgdGhlIGZpcnN0IGN5bGluZGVyICgweDNGID09IDYzKSAgICAgICAgKi8KKwkJc3RhcnRfcG9zID0gYmlvc19nZW9tLT5zZWN0b3JzOworCisJaWYgKCFwZWRfYWxpZ25tZW50X2luaXQgKCZzdGFydF9hbGlnbiwgc3RhcnRfcG9zLCAwKSkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKCFwZWRfYWxpZ25tZW50X2luaXQgKCZlbmRfYWxpZ24sIC0xLCBjeWxpbmRlcl9zaXplKSkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKG1pbl9nZW9tKSB7CisJCWlmICghcGVkX2dlb21ldHJ5X2luaXQgKCZzdGFydF9nZW9tLCBkZXYsIHN0YXJ0X3BvcywgMSkpCisJCQlyZXR1cm4gTlVMTDsKKwkJaWYgKCFwZWRfZ2VvbWV0cnlfaW5pdCAoJmVuZF9nZW9tLCBkZXYsIG1pbl9nZW9tLT5lbmQsCisJCQkgICAgICAgCQlkZXYtPmxlbmd0aCAtIG1pbl9nZW9tLT5lbmQpKQorCQkJcmV0dXJuIE5VTEw7CisJfSBlbHNlIHsKKwkJaWYgKCFwZWRfZ2VvbWV0cnlfaW5pdCAoJnN0YXJ0X2dlb20sIGRldiwgc3RhcnRfcG9zLAorCQkJZGV2LT5sZW5ndGggLSBzdGFydF9wb3MpKQorCQkJcmV0dXJuIE5VTEw7CisJCWlmICghcGVkX2dlb21ldHJ5X2luaXQgKCZlbmRfZ2VvbSwgZGV2LCAwLCBkZXYtPmxlbmd0aCkpCisJCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gcGVkX2NvbnN0cmFpbnRfbmV3ICgmc3RhcnRfYWxpZ24sICZlbmRfYWxpZ24sICZzdGFydF9nZW9tLAorCQkJCSAgICZlbmRfZ2VvbSwgMSwgZGV2LT5sZW5ndGgpOworfQorCisvKiBjb25zdHJhaW50cyBmb3IgbG9naWNhbCBwYXJ0aXRpb25zOgorICogCS0gc3RhcnRfb2Zmc2V0IGlzIHRoZSBvZmZzZXQgaW4gdGhlIHN0YXJ0IGFsaWdubWVudC4gICJub3JtYWxseSIsCisgKiB0aGlzIGlzIGJpb3NfZ2VvbS0+c2VjdG9ycy4gIGV4Y2VwdGlvbnM6IE1JTk9SID4gNSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZQorICogZXh0ZW5kZWQgcGFydGl0aW9uLCBvciBNSU5PUiA9PSA1IGluIHRoZSBtaWRkbGUgb2YgdGhlIGV4dGVuZGVkIHBhcnRpdGlvbgorICogCS0gaXNfc3RhcnRfcGFydCA9PSAxIGlmIHRoZSBjb25zdHJhaW50IGlzIGZvciB0aGUgZmlyc3QgY3lsaW5kZXIgb2YKKyAqIHRoZSBleHRlbmRlZCBwYXJ0aXRpb24sIG9yID09IDAgaWYgdGhlIGNvbnN0cmFpbnQgaXMgZm9yIHRoZSBzZWNvbmQgY3lsaW5kZXIKKyAqIG9ud2FyZHMgb2YgdGhlIGV4dGVuZGVkIHBhcnRpdGlvbi4KKyAqLworc3RhdGljIFBlZENvbnN0cmFpbnQqCitfbG9naWNhbF9jb25zdHJhaW50IChjb25zdCBQZWREaXNrKiBkaXNrLCBjb25zdCBQZWRDSFNHZW9tZXRyeSogYmlvc19nZW9tLAorCQkgICAgIFBlZFNlY3RvciBzdGFydF9vZmZzZXQsIGludCBpc19zdGFydF9wYXJ0KQoreworCVBlZFBhcnRpdGlvbioJZXh0X3BhcnQgPSBwZWRfZGlza19leHRlbmRlZF9wYXJ0aXRpb24gKGRpc2spOworCVBlZERldmljZSoJZGV2ID0gZGlzay0+ZGV2OworCVBlZFNlY3RvcgljeWxpbmRlcl9zaXplID0gYmlvc19nZW9tLT5zZWN0b3JzICogYmlvc19nZW9tLT5oZWFkczsKKwlQZWRBbGlnbm1lbnQJc3RhcnRfYWxpZ247CisJUGVkQWxpZ25tZW50CWVuZF9hbGlnbjsKKwlQZWRHZW9tZXRyeQltYXhfZ2VvbTsKKworCVBFRF9BU1NFUlQgKGV4dF9wYXJ0ICE9IE5VTEwsIHJldHVybiBOVUxMKTsKKworCWlmICghcGVkX2FsaWdubWVudF9pbml0ICgmc3RhcnRfYWxpZ24sIHN0YXJ0X29mZnNldCwgY3lsaW5kZXJfc2l6ZSkpCisJCXJldHVybiBOVUxMOworCWlmICghcGVkX2FsaWdubWVudF9pbml0ICgmZW5kX2FsaWduLCAtMSwgY3lsaW5kZXJfc2l6ZSkpCisJCXJldHVybiBOVUxMOworCWlmIChpc19zdGFydF9wYXJ0KSB7CisJCWlmICghcGVkX2dlb21ldHJ5X2luaXQgKCZtYXhfZ2VvbSwgZGV2LAorCQkJCQlleHRfcGFydC0+Z2VvbS5zdGFydCwKKwkJCQkJZXh0X3BhcnQtPmdlb20ubGVuZ3RoKSkKKwkJCXJldHVybiBOVUxMOworCX0gZWxzZSB7CisJCVBlZFNlY3RvcgltaW5fc3RhcnQ7CisJCVBlZFNlY3RvcgltYXhfbGVuZ3RoOworCisJCW1pbl9zdGFydCA9IHBlZF9yb3VuZF91cF90byAoZXh0X3BhcnQtPmdlb20uc3RhcnQgKyAxLAorCQkJCQkgICAgIGN5bGluZGVyX3NpemUpOworCQltYXhfbGVuZ3RoID0gZXh0X3BhcnQtPmdlb20uZW5kIC0gbWluX3N0YXJ0ICsgMTsKKwkJaWYgKG1pbl9zdGFydCA+PSBleHRfcGFydC0+Z2VvbS5lbmQpCisJCQlyZXR1cm4gTlVMTDsKKworCQlpZiAoIXBlZF9nZW9tZXRyeV9pbml0ICgmbWF4X2dlb20sIGRldiwgbWluX3N0YXJ0LCBtYXhfbGVuZ3RoKSkKKwkJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiBwZWRfY29uc3RyYWludF9uZXcgKCZzdGFydF9hbGlnbiwgJmVuZF9hbGlnbiwgJm1heF9nZW9tLAorCQkgICAgICAgCQkgICAmbWF4X2dlb20sIDEsIGRldi0+bGVuZ3RoKTsKK30KKworLyogcmV0dXJucyB0aGUgbWluaW11bSBnZW9tZXRyeSBmb3IgdGhlIGV4dGVuZGVkIHBhcnRpdGlvbiwgZ2l2ZW4gdGhhdCB0aGUKKyAqIGV4dGVuZGVkIHBhcnRpdGlvbiBtdXN0IGNvbnRhaW46CisgKiAgICogYWxsIGxvZ2ljYWwgcGFydGl0aW9ucworICogICAqIGFsbCBwYXJ0aXRpb24gdGFibGVzIGZvciBhbGwgbG9naWNhbCBwYXJ0aXRpb25zIChleGNlcHQgdGhlIGZpcnN0KQorICogICAqIHRoZSBleHRlbmRlZCBwYXJ0aXRpb24gdGFibGUKKyAqLworc3RhdGljIFBlZEdlb21ldHJ5KgorX2dldF9taW5fZXh0ZW5kZWRfcGFydF9nZW9tIChjb25zdCBQZWRQYXJ0aXRpb24qIGV4dF9wYXJ0LAorCQkJICAgICBjb25zdCBQZWRDSFNHZW9tZXRyeSogYmlvc19nZW9tKQoreworCVBlZERpc2sqCQlkaXNrID0gZXh0X3BhcnQtPmRpc2s7CisJUGVkU2VjdG9yCQloZWFkX3NpemUgPSBiaW9zX2dlb20gPyBiaW9zX2dlb20tPnNlY3RvcnMgOiAxOworCVBlZFBhcnRpdGlvbioJCXdhbGs7CisJUGVkR2VvbWV0cnkqCQltaW5fZ2VvbTsKKworCXdhbGsgPSBwZWRfZGlza19nZXRfcGFydGl0aW9uIChkaXNrLCA1KTsKKwlpZiAoIXdhbGspCisJCXJldHVybiBOVUxMOworCisJbWluX2dlb20gPSBwZWRfZ2VvbWV0cnlfZHVwbGljYXRlICgmd2Fsay0+Z2VvbSk7CisJaWYgKCFtaW5fZ2VvbSkKKwkJcmV0dXJuIE5VTEw7CisJcGVkX2dlb21ldHJ5X3NldF9zdGFydCAobWluX2dlb20sIHdhbGstPmdlb20uc3RhcnQgLSAxICogaGVhZF9zaXplKTsKKworCWZvciAod2FsayA9IGV4dF9wYXJ0LT5wYXJ0X2xpc3Q7IHdhbGs7IHdhbGsgPSB3YWxrLT5uZXh0KSB7CisJCWlmICghcGVkX3BhcnRpdGlvbl9pc19hY3RpdmUgKHdhbGspIHx8IHdhbGstPm51bSA9PSA1KQorCQkJY29udGludWU7CisJCWlmICh3YWxrLT5nZW9tLnN0YXJ0IDwgbWluX2dlb20tPnN0YXJ0KQorCQkJcGVkX2dlb21ldHJ5X3NldF9zdGFydCAobWluX2dlb20sCisJCQkJCXdhbGstPmdlb20uc3RhcnQgLSAyICogaGVhZF9zaXplKTsKKwkJaWYgKHdhbGstPmdlb20uZW5kID4gbWluX2dlb20tPmVuZCkKKwkJCXBlZF9nZW9tZXRyeV9zZXRfZW5kIChtaW5fZ2VvbSwgd2Fsay0+Z2VvbS5lbmQpOworCX0KKworCXJldHVybiBtaW5fZ2VvbTsKK30KKworc3RhdGljIGludAorX2FsaWduX3ByaW1hcnkgKFBlZFBhcnRpdGlvbiogcGFydCwgY29uc3QgUGVkQ0hTR2VvbWV0cnkqIGJpb3NfZ2VvbSwKKwkJY29uc3QgUGVkQ29uc3RyYWludCogY29uc3RyYWludCkKK3sKKwlQZWREaXNrKglkaXNrID0gcGFydC0+ZGlzazsKKwlQZWRHZW9tZXRyeSoJbWluX2dlb20gPSBOVUxMOworCVBlZEdlb21ldHJ5Kglzb2x1dGlvbiA9IE5VTEw7CisKKwlpZiAocGFydC0+dHlwZSA9PSBQRURfUEFSVElUSU9OX0VYVEVOREVEKQorCQltaW5fZ2VvbSA9IF9nZXRfbWluX2V4dGVuZGVkX3BhcnRfZ2VvbSAocGFydCwgYmlvc19nZW9tKTsKKworCXNvbHV0aW9uID0gX2Jlc3Rfc29sdXRpb24gKHBhcnQsIGJpb3NfZ2VvbSwgc29sdXRpb24sCisJCQlfdHJ5X2NvbnN0cmFpbnQgKHBhcnQsIGNvbnN0cmFpbnQsCisJCQkJCSBfcHJpbWFyeV9zdGFydF9jb25zdHJhaW50IChkaXNrLCBwYXJ0LAorCQkJCQkJIGJpb3NfZ2VvbSwgbWluX2dlb20pKSk7CisKKwlzb2x1dGlvbiA9IF9iZXN0X3NvbHV0aW9uIChwYXJ0LCBiaW9zX2dlb20sIHNvbHV0aW9uLAorCQkJX3RyeV9jb25zdHJhaW50IChwYXJ0LCBjb25zdHJhaW50LAorCQkJCV9wcmltYXJ5X2NvbnN0cmFpbnQgKGRpc2ssIGJpb3NfZ2VvbSwKKwkJCQltaW5fZ2VvbSkpKTsKKworCWlmIChtaW5fZ2VvbSkKKwkJcGVkX2dlb21ldHJ5X2Rlc3Ryb3kgKG1pbl9nZW9tKTsKKworCWlmIChzb2x1dGlvbikgeworCQlwZWRfZ2VvbWV0cnlfc2V0ICgmcGFydC0+Z2VvbSwgc29sdXRpb24tPnN0YXJ0LAorCQkJCSAgc29sdXRpb24tPmxlbmd0aCk7CisJCXBlZF9nZW9tZXRyeV9kZXN0cm95IChzb2x1dGlvbik7CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitfbG9naWNhbF9taW5fc3RhcnRfaGVhZCAoY29uc3QgUGVkUGFydGl0aW9uKiBwYXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBlZENIU0dlb21ldHJ5KiBiaW9zX2dlb20sCisJCQkgY29uc3QgUGVkUGFydGl0aW9uKiBleHRfcGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaXNfc3RhcnRfZXh0X3BhcnQpCit7CisJUGVkU2VjdG9yCWN5bGluZGVyX3NpemUgPSBiaW9zX2dlb20tPnNlY3RvcnMgKiBiaW9zX2dlb20tPmhlYWRzOworCVBlZFNlY3RvcgliYXNlX2hlYWQ7CisKKwlpZiAoaXNfc3RhcnRfZXh0X3BhcnQpCisJCWJhc2VfaGVhZCA9IDEgKyAoZXh0X3BhcnQtPmdlb20uc3RhcnQgJSBjeWxpbmRlcl9zaXplKQorCQkJCQkvIGJpb3NfZ2VvbS0+c2VjdG9yczsKKwllbHNlCisJCWJhc2VfaGVhZCA9IDA7CisKKwlpZiAocGFydC0+bnVtID09IDUpCisJCXJldHVybiBiYXNlX2hlYWQgKyAwOworCWVsc2UKKwkJcmV0dXJuIGJhc2VfaGVhZCArIDE7Cit9CisKKy8qIFNoYW1lbGVzc2x5IGNvcGllZCBhbmQgYWRhcHRlZCBmcm9tIF9wYXJ0aXRpb25fZ2V0X292ZXJsYXBfY29uc3RyYWludAorICogKGluIGRpc2suYykKKyAqIFRoaXMgc2hvdWxkIGdldCByaWRlIG9mIHRoZSBpbmZhbW91cyBBc3NlcnRpb24gKG1ldGFkYXRhX2xlbmd0aCA+IDApIGZhaWxlZAorICogYnVnIGZvciBleHRlbmRlZCBtc2RvcyBkaXNrbGFiZWxzIGdlbmVyYXRlZCBieSBQYXJ0ZWQuCisgKiAxKSBUaGVyZSBhbHdheXMgaXMgYSBwYXJ0aXRpb24gdGFibGUgYXQgdGhlIHN0YXJ0IG9mIGV4dF9wYXJ0LCBzbyB3ZSBsZWF2ZQorICogICAgYSBvbmUgc2VjdG9yIGdhcCB0aGVyZS4KKyAqIDIpKlRoZSBwYXJ0aXRpb24gdGFibGUgb2YgcGFydDUgaXMgYWx3YXlzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGV4dF9wYXJ0CisgKiAgICBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIGxlYXZlIGEgb25lIHNlY3RvciBnYXAgYmVmb3JlIHBhcnQ1LgorICogICAqVGhlcmUgYWx3YXlzIGlzIGEgcGFydGl0aW9uIHRhYmxlIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBwYXJ0aXRpb24gIT0gNS4KKyAqIFdlIGRvbid0IG5lZWQgdG8gd29ycnkgdG8gbXVjaCBhYm91dCBjb25zaXN0ZW5jeSB3aXRoIAorICogX3BhcnRpdGlvbl9nZXRfb3ZlcmxhcF9jb25zdHJhaW50IGJlY2F1c2UgbWlzc2luZyBpdCBtZWFucyB3ZSBhcmUgaW4gZWRnZQorICogY2FzZXMgYW55d2F5LCBhbmQgd2UgZG9uJ3QgbG9zZSBhbnl0aGluZyBieSBqdXN0IHJlZnVzaW5nIHRvIGRvIHRoZSBqb2IgaW4KKyAqIHRob3NlIGNhc2VzLgorICovCitzdGF0aWMgUGVkQ29uc3RyYWludCoKK19sb2dfbWV0YV9vdmVybGFwX2NvbnN0cmFpbnQgKFBlZFBhcnRpdGlvbiogcGFydCwgY29uc3QgUGVkR2VvbWV0cnkqIGdlb20pCit7CisJUGVkR2VvbWV0cnkJc2FmZV9zcGFjZTsKKwlQZWRTZWN0b3IJbWluX3N0YXJ0OworCVBlZFNlY3RvcgltYXhfZW5kOworCVBlZFBhcnRpdGlvbioJZXh0X3BhcnQgPSBwZWRfZGlza19leHRlbmRlZF9wYXJ0aXRpb24gKHBhcnQtPmRpc2spOworCVBlZFBhcnRpdGlvbioJd2FsazsKKwlpbnQJCW5vdF81ID0gKHBhcnQtPm51bSAhPSA1KTsKKworCVBFRF9BU1NFUlQgKGV4dF9wYXJ0ICE9IE5VTEwsIHJldHVybiBOVUxMKTsKKworCXdhbGsgPSBleHRfcGFydC0+cGFydF9saXN0OworCisJLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxKSAgMikgICAgICovCisJbWluX3N0YXJ0ID0gZXh0X3BhcnQtPmdlb20uc3RhcnQgKyAxICsgbm90XzU7CisJbWF4X2VuZCA9IGV4dF9wYXJ0LT5nZW9tLmVuZDsKKworCXdoaWxlICh3YWxrICE9IE5VTEwgICAgICAgICAgICAgLyogICAgICAyKSAgICAgICAgICAgICAgICAgICAgICAgICAyKSAqLworCQkmJiAoICAgd2Fsay0+Z2VvbS5zdGFydCAtICh3YWxrLT5udW0gIT0gNSkgPCBnZW9tLT5zdGFydCAtIG5vdF81CisJCSAgICB8fCB3YWxrLT5nZW9tLnN0YXJ0IC0gKHdhbGstPm51bSAhPSA1KSA8PSBtaW5fc3RhcnQgKSkgeworCQlpZiAod2FsayAhPSBwYXJ0ICYmIHBlZF9wYXJ0aXRpb25faXNfYWN0aXZlICh3YWxrKSkKKwkJCW1pbl9zdGFydCA9IHdhbGstPmdlb20uZW5kICsgMSArIG5vdF81OyAvKiAyKSAqLworCQl3YWxrID0gd2Fsay0+bmV4dDsKKwl9CisKKwl3aGlsZSAod2FsayAmJiAod2FsayA9PSBwYXJ0IHx8ICFwZWRfcGFydGl0aW9uX2lzX2FjdGl2ZSAod2FsaykpKQorCQl3YWxrID0gd2Fsay0+bmV4dDsKKworCWlmICh3YWxrKQorCQltYXhfZW5kID0gd2Fsay0+Z2VvbS5zdGFydCAtIDEgLSAod2Fsay0+bnVtICE9IDUpOyAvKiAyKSAqLworCisJaWYgKG1pbl9zdGFydCA+PSBtYXhfZW5kKQorCQlyZXR1cm4gTlVMTDsKKworCXBlZF9nZW9tZXRyeV9pbml0ICgmc2FmZV9zcGFjZSwgcGFydC0+ZGlzay0+ZGV2LAorCQkJICAgbWluX3N0YXJ0LCBtYXhfZW5kIC0gbWluX3N0YXJ0ICsgMSk7CisJcmV0dXJuIHBlZF9jb25zdHJhaW50X25ld19mcm9tX21heCAoJnNhZmVfc3BhY2UpOworfQorCitzdGF0aWMgaW50CitfYWxpZ25fbG9naWNhbCAoUGVkUGFydGl0aW9uKiBwYXJ0LCBjb25zdCBQZWRDSFNHZW9tZXRyeSogYmlvc19nZW9tLAorCQljb25zdCBQZWRDb25zdHJhaW50KiBjb25zdHJhaW50KQoreworCVBlZERpc2sqCWRpc2sgPSBwYXJ0LT5kaXNrOworCVBlZFBhcnRpdGlvbioJZXh0X3BhcnQgPSBwZWRfZGlza19leHRlbmRlZF9wYXJ0aXRpb24gKGRpc2spOworCVBlZFNlY3RvcgljeWxfc2l6ZSA9IGJpb3NfZ2VvbS0+c2VjdG9ycyAqIGJpb3NfZ2VvbS0+aGVhZHM7CisJUGVkU2VjdG9yCXN0YXJ0X2Jhc2U7CisJaW50CQloZWFkOworCVBlZEdlb21ldHJ5Kglzb2x1dGlvbiA9IE5VTEw7CisJUGVkQ29uc3RyYWludCAgICppbnRlcnNlY3QsICpsb2dfbWV0YV9vdmVybGFwOworCisJUEVEX0FTU0VSVCAoZXh0X3BhcnQgIT0gTlVMTCwgcmV0dXJuIDApOworCisJbG9nX21ldGFfb3ZlcmxhcCA9IF9sb2dfbWV0YV9vdmVybGFwX2NvbnN0cmFpbnQocGFydCwgJnBhcnQtPmdlb20pOworCWludGVyc2VjdCA9IHBlZF9jb25zdHJhaW50X2ludGVyc2VjdCAoY29uc3RyYWludCwgbG9nX21ldGFfb3ZlcmxhcCk7CisJcGVkX2NvbnN0cmFpbnRfZGVzdHJveSAobG9nX21ldGFfb3ZlcmxhcCk7CisJaWYgKCFpbnRlcnNlY3QpCisJCXJldHVybiAwOworCisJc3RhcnRfYmFzZSA9IHBlZF9yb3VuZF9kb3duX3RvIChwYXJ0LT5nZW9tLnN0YXJ0LCBjeWxfc2l6ZSk7CisKKwlmb3IgKGhlYWQgPSBfbG9naWNhbF9taW5fc3RhcnRfaGVhZCAocGFydCwgYmlvc19nZW9tLCBleHRfcGFydCwgMCk7CisJICAgICBoZWFkIDwgUEVEX01JTiAoNSwgYmlvc19nZW9tLT5oZWFkcyk7IGhlYWQrKykgeworCQlQZWRDb25zdHJhaW50KglkaXNrX2NvbnN0cmFpbnQ7CisJCVBlZFNlY3RvcglzdGFydCA9IHN0YXJ0X2Jhc2UgKyBoZWFkICogYmlvc19nZW9tLT5zZWN0b3JzOworCisJCWlmIChoZWFkID49IF9sb2dpY2FsX21pbl9zdGFydF9oZWFkIChwYXJ0LCBiaW9zX2dlb20sCisJCQkJCQkgICAgIGV4dF9wYXJ0LCAxKSkKKwkJCWRpc2tfY29uc3RyYWludCA9CisJCQkJX2xvZ2ljYWxfY29uc3RyYWludCAoZGlzaywgYmlvc19nZW9tLCBzdGFydCwgMSk7CisJCWVsc2UKKwkJCWRpc2tfY29uc3RyYWludCA9CisJCQkJX2xvZ2ljYWxfY29uc3RyYWludCAoZGlzaywgYmlvc19nZW9tLCBzdGFydCwgMCk7CisKKwkJc29sdXRpb24gPSBfYmVzdF9zb2x1dGlvbiAocGFydCwgYmlvc19nZW9tLCBzb2x1dGlvbiwKKwkJCQlfdHJ5X2NvbnN0cmFpbnQgKHBhcnQsIGludGVyc2VjdCwKKwkJCQkJCSBkaXNrX2NvbnN0cmFpbnQpKTsKKwl9CisKKwlwZWRfY29uc3RyYWludF9kZXN0cm95IChpbnRlcnNlY3QpOworCisJaWYgKHNvbHV0aW9uKSB7CisJCXBlZF9nZW9tZXRyeV9zZXQgKCZwYXJ0LT5nZW9tLCBzb2x1dGlvbi0+c3RhcnQsCisJCQkJICBzb2x1dGlvbi0+bGVuZ3RoKTsKKwkJcGVkX2dlb21ldHJ5X2Rlc3Ryb3kgKHNvbHV0aW9uKTsKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK19hbGlnbiAoUGVkUGFydGl0aW9uKiBwYXJ0LCBjb25zdCBQZWRDSFNHZW9tZXRyeSogYmlvc19nZW9tLAorCWNvbnN0IFBlZENvbnN0cmFpbnQqIGNvbnN0cmFpbnQpCit7CisJaWYgKHBhcnQtPnR5cGUgPT0gUEVEX1BBUlRJVElPTl9MT0dJQ0FMKQorCQlyZXR1cm4gX2FsaWduX2xvZ2ljYWwgKHBhcnQsIGJpb3NfZ2VvbSwgY29uc3RyYWludCk7CisJZWxzZQorCQlyZXR1cm4gX2FsaWduX3ByaW1hcnkgKHBhcnQsIGJpb3NfZ2VvbSwgY29uc3RyYWludCk7Cit9CisKK3N0YXRpYyBQZWRDb25zdHJhaW50KgorX25vX2dlb21fY29uc3RyYWludCAoY29uc3QgUGVkRGlzayogZGlzaywgUGVkU2VjdG9yIHN0YXJ0LCBQZWRTZWN0b3IgZW5kKQoreworCVBlZEdlb21ldHJ5CSBtYXg7CisKKwlwZWRfZ2VvbWV0cnlfaW5pdCAoJm1heCwgZGlzay0+ZGV2LCBzdGFydCwgZW5kIC0gc3RhcnQgKyAxKTsKKwlyZXR1cm4gcGVkX2NvbnN0cmFpbnRfbmV3X2Zyb21fbWF4ICgmbWF4KTsKK30KKworc3RhdGljIFBlZENvbnN0cmFpbnQqCitfbm9fZ2VvbV9leHRlbmRlZF9jb25zdHJhaW50IChjb25zdCBQZWRQYXJ0aXRpb24qIHBhcnQpCit7CisJUGVkRGV2aWNlKglkZXYgPSBwYXJ0LT5kaXNrLT5kZXY7CisJUGVkR2VvbWV0cnkqCW1pbiA9IF9nZXRfbWluX2V4dGVuZGVkX3BhcnRfZ2VvbSAocGFydCwgTlVMTCk7CisJUGVkR2VvbWV0cnkJc3RhcnRfcmFuZ2U7CisJUGVkR2VvbWV0cnkJZW5kX3JhbmdlOworCVBlZENvbnN0cmFpbnQqCWNvbnN0cmFpbnQ7CisKKwlpZiAobWluKSB7CisJCXBlZF9nZW9tZXRyeV9pbml0ICgmc3RhcnRfcmFuZ2UsIGRldiwgMSwgbWluLT5zdGFydCk7CisJCXBlZF9nZW9tZXRyeV9pbml0ICgmZW5kX3JhbmdlLCBkZXYsIG1pbi0+ZW5kLAorCQkJCSAgIGRldi0+bGVuZ3RoIC0gbWluLT5lbmQpOworCQlwZWRfZ2VvbWV0cnlfZGVzdHJveSAobWluKTsKKwl9IGVsc2UgeworCQlwZWRfZ2VvbWV0cnlfaW5pdCAoJnN0YXJ0X3JhbmdlLCBkZXYsIDEsIGRldi0+bGVuZ3RoIC0gMSk7CisJCXBlZF9nZW9tZXRyeV9pbml0ICgmZW5kX3JhbmdlLCBkZXYsIDEsIGRldi0+bGVuZ3RoIC0gMSk7CisJfQorCWNvbnN0cmFpbnQgPSBwZWRfY29uc3RyYWludF9uZXcgKHBlZF9hbGlnbm1lbnRfYW55LCBwZWRfYWxpZ25tZW50X2FueSwKKwkJCSZzdGFydF9yYW5nZSwgJmVuZF9yYW5nZSwgMSwgZGV2LT5sZW5ndGgpOworCXJldHVybiBjb25zdHJhaW50OworfQorCitzdGF0aWMgaW50CitfYWxpZ25fcHJpbWFyeV9ub19nZW9tIChQZWRQYXJ0aXRpb24qIHBhcnQsIGNvbnN0IFBlZENvbnN0cmFpbnQqIGNvbnN0cmFpbnQpCit7CisJUGVkRGlzayoJZGlzayA9IHBhcnQtPmRpc2s7CisJUGVkR2VvbWV0cnkqCXNvbHV0aW9uOworCisJaWYgKHBhcnQtPnR5cGUgPT0gUEVEX1BBUlRJVElPTl9FWFRFTkRFRCkgeworCQlzb2x1dGlvbiA9IF90cnlfY29uc3RyYWludCAocGFydCwgY29uc3RyYWludCwKKwkJCQlfbm9fZ2VvbV9leHRlbmRlZF9jb25zdHJhaW50IChwYXJ0KSk7CisJfSBlbHNlIHsKKwkJc29sdXRpb24gPSBfdHJ5X2NvbnN0cmFpbnQgKHBhcnQsIGNvbnN0cmFpbnQsCisJCQkJX25vX2dlb21fY29uc3RyYWludCAoZGlzaywgMSwKKwkJCQkJCSAgICAgZGlzay0+ZGV2LT5sZW5ndGggLSAxKSk7CisJfQorCisJaWYgKHNvbHV0aW9uKSB7CisJCXBlZF9nZW9tZXRyeV9zZXQgKCZwYXJ0LT5nZW9tLCBzb2x1dGlvbi0+c3RhcnQsCisJCQkJICBzb2x1dGlvbi0+bGVuZ3RoKTsKKwkJcGVkX2dlb21ldHJ5X2Rlc3Ryb3kgKHNvbHV0aW9uKTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitfYWxpZ25fbG9naWNhbF9ub19nZW9tIChQZWRQYXJ0aXRpb24qIHBhcnQsIGNvbnN0IFBlZENvbnN0cmFpbnQqIGNvbnN0cmFpbnQpCit7CisJUGVkR2VvbWV0cnkqCXNvbHV0aW9uOworCisJc29sdXRpb24gPSBfdHJ5X2NvbnN0cmFpbnQgKHBhcnQsIGNvbnN0cmFpbnQsCisJCQlfbG9nX21ldGFfb3ZlcmxhcF9jb25zdHJhaW50IChwYXJ0LCAmcGFydC0+Z2VvbSkpOworCisJaWYgKHNvbHV0aW9uKSB7CisJCXBlZF9nZW9tZXRyeV9zZXQgKCZwYXJ0LT5nZW9tLCBzb2x1dGlvbi0+c3RhcnQsCisJCQkJICBzb2x1dGlvbi0+bGVuZ3RoKTsKKwkJcGVkX2dlb21ldHJ5X2Rlc3Ryb3kgKHNvbHV0aW9uKTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitfYWxpZ25fbm9fZ2VvbSAoUGVkUGFydGl0aW9uKiBwYXJ0LCBjb25zdCBQZWRDb25zdHJhaW50KiBjb25zdHJhaW50KQoreworCWlmIChwYXJ0LT50eXBlID09IFBFRF9QQVJUSVRJT05fTE9HSUNBTCkKKwkJcmV0dXJuIF9hbGlnbl9sb2dpY2FsX25vX2dlb20gKHBhcnQsIGNvbnN0cmFpbnQpOworCWVsc2UKKwkJcmV0dXJuIF9hbGlnbl9wcmltYXJ5X25vX2dlb20gKHBhcnQsIGNvbnN0cmFpbnQpOworfQorCitzdGF0aWMgaW50Cittc2Rvc19wYXJ0aXRpb25fYWxpZ24gKFBlZFBhcnRpdGlvbiogcGFydCwgY29uc3QgUGVkQ29uc3RyYWludCogY29uc3RyYWludCkKK3sKKwlQZWRDSFNHZW9tZXRyeQliaW9zX2dlb207CisJRG9zUGFydGl0aW9uRGF0YSogZG9zX2RhdGE7CisKKyAJUEVEX0FTU0VSVCAocGFydCAhPSBOVUxMLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAocGFydC0+ZGlza19zcGVjaWZpYyAhPSBOVUxMLCByZXR1cm4gMCk7CisKKwlkb3NfZGF0YSA9IHBhcnQtPmRpc2tfc3BlY2lmaWM7CisJaWYgKGRvc19kYXRhLT5zeXN0ZW0gPT0gUEFSVElUSU9OX0xETSAmJiBkb3NfZGF0YS0+b3JpZykgeworCQlQZWRHZW9tZXRyeSAqb3JpZ19nZW9tID0gJmRvc19kYXRhLT5vcmlnLT5nZW9tOworCisJCWlmIChwZWRfZ2VvbWV0cnlfdGVzdF9lcXVhbCAoJnBhcnQtPmdlb20sIG9yaWdfZ2VvbSkKKwkJICAgICYmIHBlZF9jb25zdHJhaW50X2lzX3NvbHV0aW9uIChjb25zdHJhaW50LCAmcGFydC0+Z2VvbSkpCisJCQlyZXR1cm4gMTsKKworCQlwZWRfZ2VvbWV0cnlfc2V0ICgmcGFydC0+Z2VvbSwgb3JpZ19nZW9tLT5zdGFydCwKKwkJCQkgIG9yaWdfZ2VvbS0+bGVuZ3RoKTsKKwkJcGVkX2V4Y2VwdGlvbl90aHJvdyAoCisJCQlQRURfRVhDRVBUSU9OX0VSUk9SLAorCQkJUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQlfKCJQYXJ0ZWQgY2FuJ3QgcmVzaXplIHBhcnRpdGlvbnMgbWFuYWdlZCBieSAiCisJCQkgICJXaW5kb3dzIER5bmFtaWMgRGlzay4iKSk7CisJCXJldHVybiAwOworCX0KKworCXBhcnRpdGlvbl9wcm9iZV9iaW9zX2dlb21ldHJ5IChwYXJ0LCAmYmlvc19nZW9tKTsKKworCWlmIChfYWxpZ24gKHBhcnQsICZiaW9zX2dlb20sIGNvbnN0cmFpbnQpKQorCQlyZXR1cm4gMTsKKwlpZiAoX2FsaWduX25vX2dlb20gKHBhcnQsIGNvbnN0cmFpbnQpKQorCQlyZXR1cm4gMTsKKyAKKyNpZm5kZWYgRElTQ09WRVJfT05MWQorCXBlZF9leGNlcHRpb25fdGhyb3cgKAorCQlQRURfRVhDRVBUSU9OX0VSUk9SLAorCQlQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJXygiVW5hYmxlIHRvIHNhdGlzZnkgYWxsIGNvbnN0cmFpbnRzIG9uIHRoZSBwYXJ0aXRpb24uIikpOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2FkZF9tZXRhZGF0YV9wYXJ0IChQZWREaXNrKiBkaXNrLCBQZWRQYXJ0aXRpb25UeXBlIHR5cGUsIFBlZFNlY3RvciBzdGFydCwKKwkJICAgUGVkU2VjdG9yIGVuZCkKK3sKKwlQZWRQYXJ0aXRpb24qCQluZXdfcGFydDsKKworCVBFRF9BU1NFUlQgKGRpc2sgIT0gTlVMTCwgcmV0dXJuIDApOworCisJbmV3X3BhcnQgPSBwZWRfcGFydGl0aW9uX25ldyAoZGlzaywgdHlwZSB8IFBFRF9QQVJUSVRJT05fTUVUQURBVEEsIE5VTEwsCisJCQkJICAgICAgc3RhcnQsIGVuZCk7CisJaWYgKCFuZXdfcGFydCkKKwkJZ290byBlcnJvcjsKKwlpZiAoIXBlZF9kaXNrX2FkZF9wYXJ0aXRpb24gKGRpc2ssIG5ld19wYXJ0LCBOVUxMKSkKKwkJZ290byBlcnJvcl9kZXN0cm95X25ld19wYXJ0OworCisJcmV0dXJuIDE7CisKK2Vycm9yX2Rlc3Ryb3lfbmV3X3BhcnQ6CisJcGVkX3BhcnRpdGlvbl9kZXN0cm95IChuZXdfcGFydCk7CitlcnJvcjoKKwlyZXR1cm4gMDsKK30KKworLyogVGhlcmUgYXJlIGEgZmV3IG9iamVjdGl2ZXMgaGVyZToKKyAqIAktIGF2b2lkIGhhdmluZyBsb3RzIG9mICJmcmVlIHNwYWNlIiBwYXJ0aXRpb25zIGx5aW5nIGFyb3VuZCwgdG8gY29uZnVzZQorICogdGhlIGZyb250IGVuZC4KKyAqIAktIGVuc3VyZSB0aGF0IHRoZXJlJ3MgZW5vdWdoIHJvb20gdG8gcHV0IGluIHRoZSBleHRlbmRlZCBwYXJ0aXRpb24KKyAqIHRhYmxlcywgZXRjLgorICovCitzdGF0aWMgaW50CithZGRfbG9naWNhbF9wYXJ0X21ldGFkYXRhIChQZWREaXNrKiBkaXNrLCBjb25zdCBQZWRQYXJ0aXRpb24qIGxvZ19wYXJ0KQoreworCVBlZFBhcnRpdGlvbioJZXh0X3BhcnQgPSBwZWRfZGlza19leHRlbmRlZF9wYXJ0aXRpb24gKGRpc2spOworCVBlZFBhcnRpdGlvbioJcHJldiA9IGxvZ19wYXJ0LT5wcmV2OworCVBlZENIU0dlb21ldHJ5CWJpb3NfZ2VvbTsKKwlQZWRTZWN0b3IJY3lsX3NpemU7CisJUGVkU2VjdG9yCW1ldGFkYXRhX3N0YXJ0OworCVBlZFNlY3RvcgltZXRhZGF0YV9lbmQ7CisJUGVkU2VjdG9yCW1ldGFkYXRhX2xlbmd0aDsKKworCXBhcnRpdGlvbl9wcm9iZV9iaW9zX2dlb21ldHJ5IChleHRfcGFydCwgJmJpb3NfZ2VvbSk7CisJY3lsX3NpemUgPSBiaW9zX2dlb20uc2VjdG9ycyAqIGJpb3NfZ2VvbS5oZWFkczsKKworCS8qIGlmIHRoZXJlJ3MgbWV0YWRhdGEgc2hvcnRseSBiZWZvcmUgdGhlIHBhcnRpdGlvbiAob24gdGhlIHNhbWUKKwkgKiBjeWxpbmRlciksIHRoZW4gbWFrZSB0aGlzIG5ldyBtZXRhZGF0YSBwYXJ0aXRpb24gdG91Y2ggdGhlIGVuZCBvZgorCSAqIHRoZSBvdGhlci4gIE5vIHBvaW50IGhhdmluZyA2MyBieXRlcyAob3Igd2hhdGV2ZXIpIG9mIGZyZWUgc3BhY2UKKwkgKiBwYXJ0aXRpb24gLSBqdXN0IGNvbmZ1c2VzIGZyb250LWVuZHMsIGV0Yy4KKwkgKiAJT3RoZXJ3aXNlLCBzdGFydCB0aGUgbWV0YWRhdGEgYXQgdGhlIHN0YXJ0IG9mIHRoZSBjeWxpbmRlcgorCSAqLworCisJbWV0YWRhdGFfZW5kID0gbG9nX3BhcnQtPmdlb20uc3RhcnQgLSAxOworCW1ldGFkYXRhX3N0YXJ0ID0gcGVkX3JvdW5kX2Rvd25fdG8gKG1ldGFkYXRhX2VuZCwgY3lsX3NpemUpOworCWlmIChwcmV2KQorCQltZXRhZGF0YV9zdGFydCA9IFBFRF9NQVggKG1ldGFkYXRhX3N0YXJ0LCBwcmV2LT5nZW9tLmVuZCArIDEpOworCWVsc2UKKwkJbWV0YWRhdGFfc3RhcnQgPSBQRURfTUFYIChtZXRhZGF0YV9zdGFydCwKKwkJCQkJICBleHRfcGFydC0+Z2VvbS5zdGFydCArIDEpOworCW1ldGFkYXRhX2xlbmd0aCA9IG1ldGFkYXRhX2VuZCAtIG1ldGFkYXRhX3N0YXJ0ICsgMTsKKworCS8qIHBhcnRpdGlvbiA1IGRvZXNuJ3QgbmVlZCB0byBoYXZlIGFueSBtZXRhZGF0YSAqLworCWlmIChsb2dfcGFydC0+bnVtID09IDUgJiYgbWV0YWRhdGFfbGVuZ3RoIDwgYmlvc19nZW9tLnNlY3RvcnMpCisJCXJldHVybiAxOworCisJUEVEX0FTU0VSVCAobWV0YWRhdGFfbGVuZ3RoID4gMCwgcmV0dXJuIDApOworCisJcmV0dXJuIGFkZF9tZXRhZGF0YV9wYXJ0IChkaXNrLCBQRURfUEFSVElUSU9OX0xPR0lDQUwsCisJCQkJICBtZXRhZGF0YV9zdGFydCwgbWV0YWRhdGFfZW5kKTsKK30KKworc3RhdGljIFBlZFBhcnRpdGlvbioKK2dldF9sYXN0X3BhcnQgKGNvbnN0IFBlZERpc2sqIGRpc2spCit7CisJUGVkUGFydGl0aW9uKiBmaXJzdF9wYXJ0ID0gZGlzay0+cGFydF9saXN0OworCVBlZFBhcnRpdGlvbiogd2FsazsKKworCWlmICghZmlyc3RfcGFydCkKKwkJcmV0dXJuIE5VTEw7CisJZm9yICh3YWxrID0gZmlyc3RfcGFydDsgd2Fsay0+bmV4dDsgd2FsayA9IHdhbGstPm5leHQpOworCXJldHVybiB3YWxrOworfQorCisvKiBBZGRzIG1ldGFkYXRhIHBsYWNlaG9sZGVyIHBhcnRpdGlvbnMgdG8gY292ZXIgdGhlIHBhcnRpdGlvbiB0YWJsZSAoYW5kCisgKiAiZnJlZSIgc3BhY2UgYWZ0ZXIgaXQgdGhhdCBvZnRlbiBoYXMgYm9vdGxvYWRlciBzdHVmZiksIGFuZCB0aGUgbGFzdAorICogaW5jb21wbGV0ZSBjeWxpbmRlciBhdCB0aGUgZW5kIG9mIHRoZSBkaXNrLgorICogCVBhcnRlZCBoYXMgdG8gYmUgbWluZGZ1bCBvZiB0aGUgdW5jZXJ0YWludHkgb2YgZGV2LT5iaW9zX2dlb20uCisgKiBJdCB0aGVyZWZvcmUgbWFrZXMgc3VyZSB0aGlzIG1ldGFkYXRhIGRvZXNuJ3Qgb3ZlcmxhcCB3aXRoIHBhcnRpdGlvbnMuCisgKi8KK3N0YXRpYyBpbnQKK2FkZF9zdGFydGVuZF9tZXRhZGF0YSAoUGVkRGlzayogZGlzaykKK3sKKwlQZWREZXZpY2UqIGRldiA9IGRpc2stPmRldjsKKwlQZWRTZWN0b3IgY3lsX3NpemUgPSBkZXYtPmJpb3NfZ2VvbS5zZWN0b3JzICogZGV2LT5iaW9zX2dlb20uaGVhZHM7CisJUGVkUGFydGl0aW9uKiBmaXJzdF9wYXJ0ID0gZGlzay0+cGFydF9saXN0OworCVBlZFBhcnRpdGlvbiogbGFzdF9wYXJ0ID0gZ2V0X2xhc3RfcGFydCAoZGlzayk7CisJUGVkU2VjdG9yIHN0YXJ0LCBlbmQ7CisKKwlpZiAoIWZpcnN0X3BhcnQpCisJCXJldHVybiAxOworCisJc3RhcnQgPSAwOworCWVuZCA9IFBFRF9NSU4gKGRldi0+Ymlvc19nZW9tLnNlY3RvcnMgLSAxLCBmaXJzdF9wYXJ0LT5nZW9tLnN0YXJ0IC0gMSk7CisJaWYgKCFhZGRfbWV0YWRhdGFfcGFydCAoZGlzaywgUEVEX1BBUlRJVElPTl9OT1JNQUwsIHN0YXJ0LCBlbmQpKQorCQlyZXR1cm4gMDsKKworCXN0YXJ0ID0gUEVEX01BWCAobGFzdF9wYXJ0LT5nZW9tLmVuZCArIDEsCisJCQkgcGVkX3JvdW5kX2Rvd25fdG8gKGRldi0+bGVuZ3RoLCBjeWxfc2l6ZSkpOworCWVuZCA9IGRldi0+bGVuZ3RoIC0gMTsKKwlpZiAoc3RhcnQgPCBlbmQpIHsKKwkJaWYgKCFhZGRfbWV0YWRhdGFfcGFydCAoZGlzaywgUEVEX1BBUlRJVElPTl9OT1JNQUwsIHN0YXJ0LCBlbmQpKQorCQkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK21zZG9zX2FsbG9jX21ldGFkYXRhIChQZWREaXNrKiBkaXNrKQoreworCVBlZFBhcnRpdGlvbioJCWV4dF9wYXJ0OworCisJUEVEX0FTU0VSVCAoZGlzayAhPSBOVUxMLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAoZGlzay0+ZGV2ICE9IE5VTEwsIHJldHVybiAwKTsKKworCWlmICghYWRkX3N0YXJ0ZW5kX21ldGFkYXRhIChkaXNrKSkKKwkJcmV0dXJuIDA7CisKKwlleHRfcGFydCA9IHBlZF9kaXNrX2V4dGVuZGVkX3BhcnRpdGlvbiAoZGlzayk7CisJaWYgKGV4dF9wYXJ0KSB7CisJCWludAkJaTsKKwkJUGVkU2VjdG9yCXN0YXJ0LCBlbmQ7CisJCVBlZENIU0dlb21ldHJ5CWJpb3NfZ2VvbTsKKwkJCisJCWZvciAoaT01OyAxOyBpKyspIHsKKwkJCVBlZFBhcnRpdGlvbiogbG9nX3BhcnQ7CisJCQlsb2dfcGFydCA9IHBlZF9kaXNrX2dldF9wYXJ0aXRpb24gKGRpc2ssIGkpOworCQkJaWYgKCFsb2dfcGFydCkKKwkJCQlicmVhazsKKwkJCWlmICghYWRkX2xvZ2ljYWxfcGFydF9tZXRhZGF0YSAoZGlzaywgbG9nX3BhcnQpKQorCQkJCXJldHVybiAwOworCQl9CisKKwkJcGFydGl0aW9uX3Byb2JlX2Jpb3NfZ2VvbWV0cnkgKGV4dF9wYXJ0LCAmYmlvc19nZW9tKTsKKwkJc3RhcnQgPSBleHRfcGFydC0+Z2VvbS5zdGFydDsKKwkJZW5kID0gc3RhcnQgKyBiaW9zX2dlb20uc2VjdG9ycyAtIDE7CisJCWlmIChleHRfcGFydC0+cGFydF9saXN0KQorCQkJZW5kID0gUEVEX01JTiAoZW5kLAorCQkJCSAgICAgICBleHRfcGFydC0+cGFydF9saXN0LT5nZW9tLnN0YXJ0IC0gMSk7CisJCWlmICghYWRkX21ldGFkYXRhX3BhcnQgKGRpc2ssIFBFRF9QQVJUSVRJT05fTE9HSUNBTCwKKwkJCQkJc3RhcnQsIGVuZCkpCisJCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludAorbmV4dF9wcmltYXJ5IChjb25zdCBQZWREaXNrKiBkaXNrKQoreworCWludAlpOworCWZvciAoaT0xOyBpPD00OyBpKyspIHsKKwkJaWYgKCFwZWRfZGlza19nZXRfcGFydGl0aW9uIChkaXNrLCBpKSkKKwkJCXJldHVybiBpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorbmV4dF9sb2dpY2FsIChjb25zdCBQZWREaXNrKiBkaXNrKQoreworCWludAlpOworCWZvciAoaT01OyAxOyBpKyspIHsKKwkJaWYgKCFwZWRfZGlza19nZXRfcGFydGl0aW9uIChkaXNrLCBpKSkKKwkJCXJldHVybiBpOworCX0KK30KKworc3RhdGljIGludAorbXNkb3NfcGFydGl0aW9uX2VudW1lcmF0ZSAoUGVkUGFydGl0aW9uKiBwYXJ0KQoreworCVBFRF9BU1NFUlQgKHBhcnQgIT0gTlVMTCwgcmV0dXJuIDApOworCVBFRF9BU1NFUlQgKHBhcnQtPmRpc2sgIT0gTlVMTCwgcmV0dXJuIDApOworCisJLyogZG9uJ3QgcmUtbnVtYmVyIGEgcHJpbWFyeSBwYXJ0aXRpb24gKi8KKwlpZiAocGFydC0+bnVtICE9IC0xICYmIHBhcnQtPm51bSA8PSA0KQorCQlyZXR1cm4gMTsKKworCXBhcnQtPm51bSA9IC0xOworCisJaWYgKHBhcnQtPnR5cGUgJiBQRURfUEFSVElUSU9OX0xPR0lDQUwpCisJCXBhcnQtPm51bSA9IG5leHRfbG9naWNhbCAocGFydC0+ZGlzayk7CisJZWxzZQorCQlwYXJ0LT5udW0gPSBuZXh0X3ByaW1hcnkgKHBhcnQtPmRpc2spOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK21zZG9zX2dldF9tYXhfcHJpbWFyeV9wYXJ0aXRpb25fY291bnQgKGNvbnN0IFBlZERpc2sqIGRpc2spCit7CisJcmV0dXJuIDQ7Cit9CisKK3N0YXRpYyBQZWREaXNrT3BzIG1zZG9zX2Rpc2tfb3BzID0geworCXByb2JlOgkJCW1zZG9zX3Byb2JlLAorI2lmbmRlZiBESVNDT1ZFUl9PTkxZCisJY2xvYmJlcjoJCW1zZG9zX2Nsb2JiZXIsCisjZWxzZQorCWNsb2JiZXI6CQlOVUxMLAorI2VuZGlmCisJYWxsb2M6CQkJbXNkb3NfYWxsb2MsCisJZHVwbGljYXRlOgkJbXNkb3NfZHVwbGljYXRlLAorCWZyZWU6CQkJbXNkb3NfZnJlZSwKKwlyZWFkOgkJCW1zZG9zX3JlYWQsCisjaWZuZGVmIERJU0NPVkVSX09OTFkKKwl3cml0ZToJCQltc2Rvc193cml0ZSwKKyNlbHNlCisJd3JpdGU6CQkJTlVMTCwKKyNlbmRpZgorCisJcGFydGl0aW9uX25ldzoJCW1zZG9zX3BhcnRpdGlvbl9uZXcsCisJcGFydGl0aW9uX2R1cGxpY2F0ZToJbXNkb3NfcGFydGl0aW9uX2R1cGxpY2F0ZSwKKwlwYXJ0aXRpb25fZGVzdHJveToJbXNkb3NfcGFydGl0aW9uX2Rlc3Ryb3ksCisJcGFydGl0aW9uX3NldF9zeXN0ZW06CW1zZG9zX3BhcnRpdGlvbl9zZXRfc3lzdGVtLAorCXBhcnRpdGlvbl9zZXRfZmxhZzoJbXNkb3NfcGFydGl0aW9uX3NldF9mbGFnLAorCXBhcnRpdGlvbl9nZXRfZmxhZzoJbXNkb3NfcGFydGl0aW9uX2dldF9mbGFnLAorCXBhcnRpdGlvbl9pc19mbGFnX2F2YWlsYWJsZToJbXNkb3NfcGFydGl0aW9uX2lzX2ZsYWdfYXZhaWxhYmxlLAorCXBhcnRpdGlvbl9zZXRfbmFtZToJTlVMTCwKKwlwYXJ0aXRpb25fZ2V0X25hbWU6CU5VTEwsCisJcGFydGl0aW9uX2FsaWduOgltc2Rvc19wYXJ0aXRpb25fYWxpZ24sCisJcGFydGl0aW9uX2VudW1lcmF0ZToJbXNkb3NfcGFydGl0aW9uX2VudW1lcmF0ZSwKKworCWFsbG9jX21ldGFkYXRhOgkJbXNkb3NfYWxsb2NfbWV0YWRhdGEsCisJZ2V0X21heF9wcmltYXJ5X3BhcnRpdGlvbl9jb3VudDoKKwkJCQltc2Rvc19nZXRfbWF4X3ByaW1hcnlfcGFydGl0aW9uX2NvdW50Cit9OworCitzdGF0aWMgUGVkRGlza1R5cGUgbXNkb3NfZGlza190eXBlID0geworCW5leHQ6CQlOVUxMLAorCW5hbWU6CQkibXNkb3MiLAorCW9wczoJCSZtc2Rvc19kaXNrX29wcywKKwlmZWF0dXJlczoJUEVEX0RJU0tfVFlQRV9FWFRFTkRFRAorfTsKKwordm9pZAorcGVkX2Rpc2tfbXNkb3NfaW5pdCAoKQoreworCVBFRF9BU1NFUlQgKHNpemVvZiAoRG9zUmF3UGFydGl0aW9uKSA9PSAxNiwgcmV0dXJuKTsKKwlQRURfQVNTRVJUIChzaXplb2YgKERvc1Jhd1RhYmxlKSA9PSA1MTIsIHJldHVybik7CisKKwlwZWRfZGlza190eXBlX3JlZ2lzdGVyICgmbXNkb3NfZGlza190eXBlKTsKK30KKwordm9pZAorcGVkX2Rpc2tfbXNkb3NfZG9uZSAoKQoreworCXBlZF9kaXNrX3R5cGVfdW5yZWdpc3RlciAoJm1zZG9zX2Rpc2tfdHlwZSk7Cit9CmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2xhYmVscy9kdmguYyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvbGFiZWxzL2R2aC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjZThlNWMKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2xhYmVscy9kdmguYwpAQCAtMCwwICsxLDkxMiBAQAorLyoKKyAgICBsaWJwYXJ0ZWQgLSBhIGxpYnJhcnkgZm9yIG1hbmlwdWxhdGluZyBkaXNrIHBhcnRpdGlvbnMKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDUsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCisqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8cGFydGVkL3BhcnRlZC5oPgorI2luY2x1ZGUgPHBhcnRlZC9kZWJ1Zy5oPgorI2luY2x1ZGUgPHBhcnRlZC9lbmRpYW4uaD4KKworI2luY2x1ZGUgImR2aC5oIgorCisjaWYgRU5BQkxFX05MUworIyAgaW5jbHVkZSA8bGliaW50bC5oPgorIyAgZGVmaW5lIF8oU3RyaW5nKSBkZ2V0dGV4dCAoUEFDS0FHRSwgU3RyaW5nKQorI2Vsc2UKKyMgIGRlZmluZSBfKFN0cmluZykgKFN0cmluZykKKyNlbmRpZiAvKiBFTkFCTEVfTkxTICovCisKKy8qIERlZmF1bHQgc2l6ZSBmb3Igdm9saGRyIHBhcnQsIHNhbWUgdmFsIGFzIElSSVgncyBmeCB1c2VzICovCisjZGVmaW5lIFBUWVBFX1ZPTEhEUl9ERkxUU1ogNDA5NgorCisvKiBQYXJ0aXRpb24gbnVtYmVycyB0aGF0IHNlZW0gdG8gYmUgc3Ryb25nbHkgaGVsZCBjb252ZW50aW9uICovCisjZGVmaW5lIFBOVU1fVk9MSERSIDgKKyNkZWZpbmUgUE5VTV9WT0xVTUUgMTAKKworLyogT3RoZXIgbm90ZXMgb2YgaW50ZXJlc3Q6CisgKiAgUEVEX1BBUlRJVElPTl9FWFRFTkRFRCBpcyB1c2VkIGZvciB2b2x1bWUgaGVhZGVycworICogIFBFRF9QQVJUSVRJT05fTE9HSUNBTCAgaXMgdXNlZCBmb3IgYm9vdGZpbGVzCisgKiAgUEVEX1BBUlRJVElPTl9OT1JNQUwgICBpcyB1c2VkIGZvciBhbGwgZWxzZQorICovCisKK3R5cGVkZWYgc3RydWN0IF9EVkhEaXNrRGF0YSB7CisJc3RydWN0IGRldmljZV9wYXJhbWV0ZXJzCWRldl9wYXJhbXM7CisJaW50CQkJCXN3YXA7CS8qIHBhcnQgbnVtIG9mIHN3YXAsIDA9bm9uZSAqLworCWludAkJCQlyb290OwkvKiBwYXJ0IG51bSBvZiByb290LCAwPW5vbmUgKi8KKwlpbnQJCQkJYm9vdDsJLyogcGFydCBudW0gb2YgYm9vdCwgMD1ub25lICovCit9IERWSERpc2tEYXRhOworCit0eXBlZGVmIHN0cnVjdCBfRFZIUGFydERhdGEgeworCWludAl0eXBlOworCWNoYXIJbmFtZVtWRE5BTUVTSVpFICsgMV07CS8qIGJvb3Qgdm9sdW1lcyBvbmx5ICovCisJaW50CXJlYWxfZmlsZV9zaXplOwkJLyogYm9vdCB2b2x1bWVzIG9ubHkgKi8KK30gRFZIUGFydERhdGE7CisKK3N0YXRpYyBQZWREaXNrVHlwZSBkdmhfZGlza190eXBlOworCitzdGF0aWMgaW50CitkdmhfcHJvYmUgKGNvbnN0IFBlZERldmljZSAqZGV2KQoreworCXN0cnVjdCB2b2x1bWVfaGVhZGVyCXZoOworCisgICAgICAgIGlmIChkZXYtPnNlY3Rvcl9zaXplICE9IDUxMikKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKworCWlmICghcGVkX2RldmljZV9yZWFkIChkZXYsICZ2aCwgMCwgMSkpCisJCXJldHVybiAwOworCisJcmV0dXJuIFBFRF9CRTMyX1RPX0NQVSAodmgudmhfbWFnaWMpID09IFZITUFHSUM7Cit9CisKKyNpZm5kZWYgRElTQ09WRVJfT05MWQorc3RhdGljIGludAorZHZoX2Nsb2JiZXIgKFBlZERldmljZSogZGV2KQoreworCWNoYXIJemVyb3NbNTEyXTsKKworCW1lbXNldCAoemVyb3MsIDAsIDUxMik7CisJcmV0dXJuIHBlZF9kZXZpY2Vfd3JpdGUgKGRldiwgemVyb3MsIDAsIDEpOworfQorI2VuZGlmIC8qICFESVNDT1ZFUl9PTkxZICovCisKK3N0YXRpYyBQZWREaXNrKgorZHZoX2FsbG9jIChjb25zdCBQZWREZXZpY2UqIGRldikKK3sKKwlQZWREaXNrKglkaXNrOworCURWSERpc2tEYXRhKglkdmhfZGlza19kYXRhOworCVBlZFBhcnRpdGlvbioJdm9sdW1lX3BhcnQ7CisJUGVkQ29uc3RyYWludCoJY29uc3RyYWludF9hbnk7CisKKwlkaXNrID0gX3BlZF9kaXNrX2FsbG9jIChkZXYsICZkdmhfZGlza190eXBlKTsKKwlpZiAoIWRpc2spCisJCWdvdG8gZXJyb3I7CisKKwlkaXNrLT5kaXNrX3NwZWNpZmljID0gZHZoX2Rpc2tfZGF0YQorCQk9IHBlZF9tYWxsb2MgKHNpemVvZiAoRFZIRGlza0RhdGEpKTsKKwlpZiAoIWR2aF9kaXNrX2RhdGEpCisJCWdvdG8gZXJyb3JfZnJlZV9kaXNrOworCisJbWVtc2V0ICgmZHZoX2Rpc2tfZGF0YS0+ZGV2X3BhcmFtcywgMCwKKwkJc2l6ZW9mIChzdHJ1Y3QgZGV2aWNlX3BhcmFtZXRlcnMpKTsKKwlkdmhfZGlza19kYXRhLT5zd2FwID0gMDsKKwlkdmhfZGlza19kYXRhLT5yb290ID0gMDsKKwlkdmhfZGlza19kYXRhLT5ib290ID0gMDsKKworCXZvbHVtZV9wYXJ0ID0gcGVkX3BhcnRpdGlvbl9uZXcgKGRpc2ssIFBFRF9QQVJUSVRJT05fRVhURU5ERUQsIE5VTEwsCisJCQkJCSAwLCBQVFlQRV9WT0xIRFJfREZMVFNaIC0gMSk7CisJaWYgKCF2b2x1bWVfcGFydCkKKwkJZ290byBlcnJvcl9mcmVlX2Rpc2tfc3BlY2lmaWM7CisJdm9sdW1lX3BhcnQtPm51bSA9IFBOVU1fVk9MSERSICsgMTsKKwljb25zdHJhaW50X2FueSA9IHBlZF9jb25zdHJhaW50X2FueSAoZGV2KTsKKwlpZiAoIXBlZF9kaXNrX2FkZF9wYXJ0aXRpb24gKGRpc2ssIHZvbHVtZV9wYXJ0LCBjb25zdHJhaW50X2FueSkpCisJCWdvdG8gZXJyb3JfZGVzdHJveV9jb25zdHJhaW50X2FueTsKKwlwZWRfY29uc3RyYWludF9kZXN0cm95IChjb25zdHJhaW50X2FueSk7CisJcmV0dXJuIGRpc2s7CisKK2Vycm9yX2Rlc3Ryb3lfY29uc3RyYWludF9hbnk6CisJcGVkX2NvbnN0cmFpbnRfZGVzdHJveSAoY29uc3RyYWludF9hbnkpOworCXBlZF9wYXJ0aXRpb25fZGVzdHJveSAodm9sdW1lX3BhcnQpOworZXJyb3JfZnJlZV9kaXNrX3NwZWNpZmljOgorCXBlZF9mcmVlIChkaXNrLT5kaXNrX3NwZWNpZmljKTsKK2Vycm9yX2ZyZWVfZGlzazoKKwlwZWRfZnJlZSAoZGlzayk7CitlcnJvcjoKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIFBlZERpc2sqCitkdmhfZHVwbGljYXRlIChjb25zdCBQZWREaXNrKiBkaXNrKQoreworCVBlZERpc2sqCW5ld19kaXNrOworCURWSERpc2tEYXRhKgluZXdfZHZoX2Rpc2tfZGF0YTsKKwlEVkhEaXNrRGF0YSoJb2xkX2R2aF9kaXNrX2RhdGEgPSBkaXNrLT5kaXNrX3NwZWNpZmljOworCisJUEVEX0FTU0VSVCAob2xkX2R2aF9kaXNrX2RhdGEgIT0gTlVMTCwgZ290byBlcnJvcik7CisKKwluZXdfZGlzayA9IF9wZWRfZGlza19hbGxvYyAoZGlzay0+ZGV2LCAmZHZoX2Rpc2tfdHlwZSk7CisJaWYgKCFuZXdfZGlzaykKKwkJZ290byBlcnJvcjsKKworCW5ld19kaXNrLT5kaXNrX3NwZWNpZmljID0gbmV3X2R2aF9kaXNrX2RhdGEKKwkJPSBwZWRfbWFsbG9jIChzaXplb2YgKERWSERpc2tEYXRhKSk7CisJaWYgKCFuZXdfZHZoX2Rpc2tfZGF0YSkKKwkJZ290byBlcnJvcl9mcmVlX25ld19kaXNrOworCisJbmV3X2R2aF9kaXNrX2RhdGEtPmRldl9wYXJhbXMgPSBvbGRfZHZoX2Rpc2tfZGF0YS0+ZGV2X3BhcmFtczsKKwlyZXR1cm4gbmV3X2Rpc2s7CisKK2Vycm9yX2ZyZWVfbmV3X2Rpc2s6CisJcGVkX2ZyZWUgKG5ld19kaXNrKTsKK2Vycm9yOgorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZAorZHZoX2ZyZWUgKFBlZERpc2sqIGRpc2spCit7CisJcGVkX2ZyZWUgKGRpc2stPmRpc2tfc3BlY2lmaWMpOworCV9wZWRfZGlza19mcmVlIChkaXNrKTsKK30KKworLyogdHdvJ3MgY29tcGxlbWVudCAzMi1iaXQgY2hlY2tzdW0gKi8KK3N0YXRpYyB1aW50MzJfdAorX2NoZWNrc3VtIChjb25zdCB1aW50MzJfdCogYmFzZSwgc2l6ZV90IHNpemUpCit7CisJdWludDMyX3QJc3VtID0gMDsKKwlzaXplX3QJCWk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZSAvIHNpemVvZiAodWludDMyX3QpOyBpKyspCisJCXN1bSA9IHN1bSAtIFBFRF9CRTMyX1RPX0NQVSAoYmFzZVtpXSk7CisKKwlyZXR1cm4gc3VtOworfQorCisvKiB0cnkgdG8gbWFrZSBhIHJlYXNvbmFibGUgdm9sdW1lIGhlYWRlciBwYXJ0aXRpb24uLi4gKi8KK3N0YXRpYyBQZWRFeGNlcHRpb25PcHRpb24KK19oYW5kbGVfbm9fdm9sdW1lX2hlYWRlciAoUGVkRGlzayogZGlzaykKK3sKKwlQZWRFeGNlcHRpb25PcHRpb24JcmV0OworCVBlZFBhcnRpdGlvbioJCXBhcnQ7CisJUGVkQ29uc3RyYWludCoJCWNvbnN0cmFpbnQ7CisKKwlzd2l0Y2ggKHBlZF9leGNlcHRpb25fdGhyb3cgKAorCQlQRURfRVhDRVBUSU9OX1dBUk5JTkcsCisJCVBFRF9FWENFUFRJT05fRklYICsgUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCV8oIiVzIGhhcyBubyBleHRlbmRlZCBwYXJ0aXRpb24gKHZvbHVtZSBoZWFkZXIgcGFydGl0aW9uKS4iKSwKKwkJZGlzay0+ZGV2LT5wYXRoKSkgeworCQljYXNlIFBFRF9FWENFUFRJT05fVU5IQU5ETEVEOgorCQljYXNlIFBFRF9FWENFUFRJT05fRklYOgorCQlkZWZhdWx0OgorCQkJcGFydCA9IHBlZF9wYXJ0aXRpb25fbmV3ICgKKwkJCQlkaXNrLCBQRURfUEFSVElUSU9OX0VYVEVOREVELCBOVUxMLAorCQkJCTAsIFBUWVBFX1ZPTEhEUl9ERkxUU1ogLSAxKTsKKwkJCWlmICghcGFydCkKKwkJCQlnb3RvIGVycm9yOworCQkJcGFydC0+bnVtID0gUE5VTV9WT0xIRFIgKyAxOworCQkJY29uc3RyYWludCA9IHBlZF9jb25zdHJhaW50X2FueSAocGFydC0+ZGlzay0+ZGV2KTsKKwkJCWlmICghY29uc3RyYWludCkKKwkJCQlnb3RvIGVycm9yX2Rlc3Ryb3lfcGFydDsKKwkJCWlmICghcGVkX2Rpc2tfYWRkX3BhcnRpdGlvbiAoZGlzaywgcGFydCwgY29uc3RyYWludCkpCisJCQkJZ290byBlcnJvcl9kZXN0cm95X2NvbnN0cmFpbnQ7CisJCQlwZWRfY29uc3RyYWludF9kZXN0cm95IChjb25zdHJhaW50KTsKKwkJCXJldCA9IFBFRF9FWENFUFRJT05fRklYOworCQkJYnJlYWs7CisKKwkJY2FzZSBQRURfRVhDRVBUSU9OX0NBTkNFTDoKKwkJCWdvdG8gZXJyb3I7CisJfQorCXJldHVybiByZXQ7CisKK2Vycm9yX2Rlc3Ryb3lfY29uc3RyYWludDoKKwlwZWRfY29uc3RyYWludF9kZXN0cm95IChjb25zdHJhaW50KTsKK2Vycm9yX2Rlc3Ryb3lfcGFydDoKKwlwZWRfcGFydGl0aW9uX2Rlc3Ryb3kgKHBhcnQpOworZXJyb3I6CisJcmV0dXJuIFBFRF9FWENFUFRJT05fQ0FOQ0VMOworfQorCitzdGF0aWMgUGVkUGFydGl0aW9uKgorX3BhcnNlX3BhcnRpdGlvbiAoUGVkRGlzayogZGlzaywgc3RydWN0IHBhcnRpdGlvbl90YWJsZSogcHQpCit7CisJUGVkUGFydGl0aW9uKglwYXJ0OworCURWSFBhcnREYXRhKglkdmhfcGFydF9kYXRhOworCVBlZFNlY3RvcglzdGFydCA9IFBFRF9CRTMyX1RPX0NQVSAocHQtPnB0X2ZpcnN0bGJuKTsKKwlQZWRTZWN0b3IJbGVuZ3RoID0gUEVEX0JFMzJfVE9fQ1BVIChwdC0+cHRfbmJsa3MpOworCisJcGFydCA9IHBlZF9wYXJ0aXRpb25fbmV3IChkaXNrLAorCQkJICAgICAgICAgIHB0LT5wdF90eXBlID8gMCA6IFBFRF9QQVJUSVRJT05fRVhURU5ERUQsCisJCQkJICBOVUxMLAorCQkJCSAgc3RhcnQsIHN0YXJ0ICsgbGVuZ3RoIC0gMSk7CisJaWYgKCFwYXJ0KQorCQlyZXR1cm4gTlVMTDsKKworCWR2aF9wYXJ0X2RhdGEgPSBwYXJ0LT5kaXNrX3NwZWNpZmljOworCWR2aF9wYXJ0X2RhdGEtPnR5cGUgPSBQRURfQkUzMl9UT19DUFUgKHB0LT5wdF90eXBlKTsKKwlzdHJjcHkgKGR2aF9wYXJ0X2RhdGEtPm5hbWUsICIiKTsKKworCXJldHVybiBwYXJ0OworfQorCitzdGF0aWMgUGVkUGFydGl0aW9uKgorX3BhcnNlX2Jvb3RfZmlsZSAoUGVkRGlzayogZGlzaywgc3RydWN0IHZvbHVtZV9kaXJlY3RvcnkqIHZkKQoreworCVBlZFBhcnRpdGlvbioJcGFydDsKKwlEVkhQYXJ0RGF0YSoJZHZoX3BhcnRfZGF0YTsKKwlQZWRTZWN0b3IJc3RhcnQgPSBQRURfQkUzMl9UT19DUFUgKHZkLT52ZF9sYm4pOworCWludAkJbGVuZ3RoID0gUEVEX0JFMzJfVE9fQ1BVICh2ZC0+dmRfbmJ5dGVzKTsKKworCXBhcnQgPSBwZWRfcGFydGl0aW9uX25ldyAoZGlzaywgUEVEX1BBUlRJVElPTl9MT0dJQ0FMLCBOVUxMLAorCQkJCSAgc3RhcnQsIHN0YXJ0ICsgbGVuZ3RoLzUxMiAtIDEpOworCWlmICghcGFydCkKKwkJcmV0dXJuIE5VTEw7CisKKwlkdmhfcGFydF9kYXRhID0gcGFydC0+ZGlza19zcGVjaWZpYzsKKwlkdmhfcGFydF9kYXRhLT5yZWFsX2ZpbGVfc2l6ZSA9IGxlbmd0aDsKKworCXN0cm5jcHkgKGR2aF9wYXJ0X2RhdGEtPm5hbWUsIHZkLT52ZF9uYW1lLCBWRE5BTUVTSVpFKTsKKwlkdmhfcGFydF9kYXRhLT5uYW1lW1ZETkFNRVNJWkVdID0gMDsKKwlyZXR1cm4gcGFydDsKK30KKworc3RhdGljIGludCBkdmhfd3JpdGUgKGNvbnN0IFBlZERpc2sqIGRpc2spOworCisvKiBZVUNLCisgKgorICogIElmIHlvdSByZW1vdmUgYSBib290L3Jvb3Qvc3dhcCBwYXJ0aXRpb24sIHRoZSBkaXNrLT5kaXNrX3NwZWNpZmljCisgKiB0aGluZyBpc24ndCB1cGRhdGVkLiAgKFByb2JhYmx5IHJlZmxlY3RzIGEgZGVzaWduIGJ1ZyBzb21ld2hlcmUuLi4pCisgKiBBbnl3YXksIHRoZSB3b3JrYXJvdW5kIGlzOiBmbHVzaCBzdGFsZSBmbGFncyB3aGVuZXZlciB3ZSBhbGxvY2F0ZQorICogbmV3IHBhcnRpdGlvbiBudW1iZXJzLCBhbmQgYmVmb3JlIHdlIHdyaXRlIHRvIGRpc2suCisgKi8KK3N0YXRpYyB2b2lkCitfZmx1c2hfc3RhbGVfZmxhZ3MgKGNvbnN0IFBlZERpc2sqIGRpc2spCit7CisJRFZIRGlza0RhdGEqCQlkdmhfZGlza19kYXRhID0gZGlzay0+ZGlza19zcGVjaWZpYzsKKworCWlmIChkdmhfZGlza19kYXRhLT5yb290CisJCSAgICAgICAmJiAhcGVkX2Rpc2tfZ2V0X3BhcnRpdGlvbiAoZGlzaywgZHZoX2Rpc2tfZGF0YS0+cm9vdCkpCisJCWR2aF9kaXNrX2RhdGEtPnJvb3QgPSAwOworCWlmIChkdmhfZGlza19kYXRhLT5zd2FwCisJCSAgICAgICAmJiAhcGVkX2Rpc2tfZ2V0X3BhcnRpdGlvbiAoZGlzaywgZHZoX2Rpc2tfZGF0YS0+c3dhcCkpCisJCWR2aF9kaXNrX2RhdGEtPnN3YXAgPSAwOworCWlmIChkdmhfZGlza19kYXRhLT5ib290CisJCSAgICAgICAmJiAhcGVkX2Rpc2tfZ2V0X3BhcnRpdGlvbiAoZGlzaywgZHZoX2Rpc2tfZGF0YS0+Ym9vdCkpCisJCWR2aF9kaXNrX2RhdGEtPmJvb3QgPSAwOworfQorCitzdGF0aWMgaW50CitkdmhfcmVhZCAoUGVkRGlzayogZGlzaykKK3sKKwlEVkhEaXNrRGF0YSoJCWR2aF9kaXNrX2RhdGEgPSBkaXNrLT5kaXNrX3NwZWNpZmljOworCWludAkJCWk7CisJc3RydWN0IHZvbHVtZV9oZWFkZXIJdmg7CisJY2hhcgkJCWJvb3RfbmFtZSBbQkZOQU1FU0laRSArIDFdOworI2lmbmRlZiBESVNDT1ZFUl9PTkxZCisJaW50CQkJd3JpdGVfYmFjayA9IDA7CisjZW5kaWYKKworCVBFRF9BU1NFUlQgKGR2aF9kaXNrX2RhdGEgIT0gTlVMTCwgcmV0dXJuIDApOworCisJcGVkX2Rpc2tfZGVsZXRlX2FsbCAoZGlzayk7CisKKwlpZiAoIXBlZF9kZXZpY2VfcmVhZCAoZGlzay0+ZGV2LCAmdmgsIDAsIDEpKQorCQlyZXR1cm4gMDsKKworCWlmIChfY2hlY2tzdW0gKCh1aW50MzJfdCopICZ2aCwgc2l6ZW9mIChzdHJ1Y3Qgdm9sdW1lX2hlYWRlcikpKSB7CisJCWlmIChwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCVBFRF9FWENFUFRJT05fRVJST1IsCisJCQlQRURfRVhDRVBUSU9OX0lHTk9SRV9DQU5DRUwsCisJCQlfKCJDaGVja3N1bSBpcyB3cm9uZywgaW5kaWNhdGluZyB0aGUgcGFydGl0aW9uICIKKwkJCSAgInRhYmxlIGlzIGNvcnJ1cHQuIikpCisJCQkJPT0gUEVEX0VYQ0VQVElPTl9DQU5DRUwpCisJCQlyZXR1cm4gMDsKKwl9CisKKwlQRURfQVNTRVJUIChQRURfQkUzMl9UT19DUFUgKHZoLnZoX21hZ2ljKSA9PSBWSE1BR0lDLCByZXR1cm4gMCk7CisKKwlkdmhfZGlza19kYXRhLT5kZXZfcGFyYW1zID0gdmgudmhfZHA7CisJc3RybmNweSAoYm9vdF9uYW1lLCB2aC52aF9ib290ZmlsZSwgQkZOQU1FU0laRSk7CisJYm9vdF9uYW1lW0JGTkFNRVNJWkVdID0gMDsKKworCS8qIG5vcm1hbCBwYXJ0aXRpb25zICovCisJZm9yIChpID0gMDsgaSA8IE5QQVJUQUI7IGkrKykgeworCQlQZWRQYXJ0aXRpb24qIHBhcnQ7CisJCVBlZENvbnN0cmFpbnQqIGNvbnN0cmFpbnRfZXhhY3Q7CisKKwkJaWYgKCF2aC52aF9wdFtpXS5wdF9uYmxrcykKKwkJCWNvbnRpbnVlOworCQkvKiBTa2lwIHRoZSB3aG9sZS1kaXNrIHBhcnRpdGlvbiwgcGFydGVkIGRpc2tsaWtlcyBvdmVybGFwICovCisJCWlmIChQRURfQkUzMl9UT19DUFUgKHZoLnZoX3B0W2ldLnB0X3R5cGUpID09IFBUWVBFX1ZPTFVNRSkKKwkJCWNvbnRpbnVlOworCisJCXBhcnQgPSBfcGFyc2VfcGFydGl0aW9uIChkaXNrLCAmdmgudmhfcHRbaV0pOworCQlpZiAoIXBhcnQpCisJCQlnb3RvIGVycm9yX2RlbGV0ZV9hbGw7CisKKwkJcGFydC0+ZnNfdHlwZSA9IHBlZF9maWxlX3N5c3RlbV9wcm9iZSAoJnBhcnQtPmdlb20pOworCQlwYXJ0LT5udW0gPSBpICsgMTsKKworCQlpZiAoUEVEX0JFMTZfVE9fQ1BVICh2aC52aF9yb290cHQpID09IGkpCisJCQlwZWRfcGFydGl0aW9uX3NldF9mbGFnIChwYXJ0LCBQRURfUEFSVElUSU9OX1JPT1QsIDEpOworCQlpZiAoUEVEX0JFMTZfVE9fQ1BVICh2aC52aF9zd2FwcHQpID09IGkpCisJCQlwZWRfcGFydGl0aW9uX3NldF9mbGFnIChwYXJ0LCBQRURfUEFSVElUSU9OX1NXQVAsIDEpOworCisJCWNvbnN0cmFpbnRfZXhhY3QgPSBwZWRfY29uc3RyYWludF9leGFjdCAoJnBhcnQtPmdlb20pOworCQlpZiAoIXBlZF9kaXNrX2FkZF9wYXJ0aXRpb24oZGlzaywgcGFydCwgY29uc3RyYWludF9leGFjdCkpIHsKKwkJCXBlZF9wYXJ0aXRpb25fZGVzdHJveSAocGFydCk7CisJCQlnb3RvIGVycm9yX2RlbGV0ZV9hbGw7CisJCX0KKwkJcGVkX2NvbnN0cmFpbnRfZGVzdHJveSAoY29uc3RyYWludF9leGFjdCk7CisJfQorCisJaWYgKCFwZWRfZGlza19leHRlbmRlZF9wYXJ0aXRpb24gKGRpc2spKSB7CisjaWZkZWYgRElTQ09WRVJfT05MWQorCQlyZXR1cm4gMTsKKyNlbHNlCisJCXN3aXRjaCAoX2hhbmRsZV9ub192b2x1bWVfaGVhZGVyIChkaXNrKSkgeworCQkJY2FzZSBQRURfRVhDRVBUSU9OX0NBTkNFTDoKKwkJCQlyZXR1cm4gMDsKKwkJCWNhc2UgUEVEX0VYQ0VQVElPTl9JR05PUkU6CisJCQkJcmV0dXJuIDE7CisJCQljYXNlIFBFRF9FWENFUFRJT05fRklYOgorCQkJCXdyaXRlX2JhY2sgPSAxOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJfQorI2VuZGlmCisJfQorCisJLyogYm9vdCBwYXJ0aXRpb25zICovCisJZm9yIChpID0gMDsgaSA8IE5WRElSOyBpKyspIHsKKwkJUGVkUGFydGl0aW9uKiBwYXJ0OworCQlQZWRDb25zdHJhaW50KiBjb25zdHJhaW50X2V4YWN0OworCisJCWlmICghdmgudmhfdmRbaV0udmRfbmJ5dGVzKQorCQkJY29udGludWU7CisKKwkJcGFydCA9IF9wYXJzZV9ib290X2ZpbGUgKGRpc2ssICZ2aC52aF92ZFtpXSk7CisJCWlmICghcGFydCkKKwkJCWdvdG8gZXJyb3JfZGVsZXRlX2FsbDsKKworCQlwYXJ0LT5mc190eXBlID0gcGVkX2ZpbGVfc3lzdGVtX3Byb2JlICgmcGFydC0+Z2VvbSk7CisJCXBhcnQtPm51bSA9IE5QQVJUQUIgKyBpICsgMTsKKworCQlpZiAoIXN0cmNtcCAoYm9vdF9uYW1lLCBwZWRfcGFydGl0aW9uX2dldF9uYW1lIChwYXJ0KSkpCisJCQlwZWRfcGFydGl0aW9uX3NldF9mbGFnIChwYXJ0LCBQRURfUEFSVElUSU9OX0JPT1QsIDEpOworCisJCWNvbnN0cmFpbnRfZXhhY3QgPSBwZWRfY29uc3RyYWludF9leGFjdCAoJnBhcnQtPmdlb20pOworCQlpZiAoIXBlZF9kaXNrX2FkZF9wYXJ0aXRpb24oZGlzaywgcGFydCwgY29uc3RyYWludF9leGFjdCkpIHsKKwkJCXBlZF9wYXJ0aXRpb25fZGVzdHJveSAocGFydCk7CisJCQlnb3RvIGVycm9yX2RlbGV0ZV9hbGw7CisJCX0KKwkJcGVkX2NvbnN0cmFpbnRfZGVzdHJveSAoY29uc3RyYWludF9leGFjdCk7CisJfQorI2lmbmRlZiBESVNDT1ZFUl9PTkxZCisJaWYgKHdyaXRlX2JhY2spCisJCWR2aF93cml0ZSAoZGlzayk7CisjZW5kaWYKKwlyZXR1cm4gMTsKKworZXJyb3JfZGVsZXRlX2FsbDoKKwlwZWRfZGlza19kZWxldGVfYWxsIChkaXNrKTsKKwlyZXR1cm4gMDsKK30KKworI2lmbmRlZiBESVNDT1ZFUl9PTkxZCitzdGF0aWMgdm9pZAorX2dlbmVyYXRlX3BhcnRpdGlvbiAoUGVkUGFydGl0aW9uKiBwYXJ0LCBzdHJ1Y3QgcGFydGl0aW9uX3RhYmxlKiBwdCkKK3sKKwlEVkhQYXJ0RGF0YSoJZHZoX3BhcnRfZGF0YSA9IHBhcnQtPmRpc2tfc3BlY2lmaWM7CisKKwkvKiBBc3NlcnQgbm90IGEgYm9vdGZpbGUgKi8KKwlQRURfQVNTRVJUICgocGFydC0+dHlwZSAmIFBFRF9QQVJUSVRJT05fTE9HSUNBTCkgPT0gMCwgcmV0dXJuKTsKKworCXB0LT5wdF9uYmxrcyA9IFBFRF9DUFVfVE9fQkUzMiAocGFydC0+Z2VvbS5sZW5ndGgpOworCXB0LT5wdF9maXJzdGxibiA9IFBFRF9DUFVfVE9fQkUzMiAocGFydC0+Z2VvbS5zdGFydCk7CisJcHQtPnB0X3R5cGUgPSBQRURfQ1BVX1RPX0JFMzIgKGR2aF9wYXJ0X2RhdGEtPnR5cGUpOworfQorCitzdGF0aWMgdm9pZAorX2dlbmVyYXRlX2Jvb3RfZmlsZSAoUGVkUGFydGl0aW9uKiBwYXJ0LCBzdHJ1Y3Qgdm9sdW1lX2RpcmVjdG9yeSogdmQpCit7CisJRFZIUGFydERhdGEqCWR2aF9wYXJ0X2RhdGEgPSBwYXJ0LT5kaXNrX3NwZWNpZmljOworCisJLyogQXNzZXJ0IGl0J3MgYSBib290ZmlsZSAqLworCVBFRF9BU1NFUlQgKChwYXJ0LT50eXBlICYgUEVEX1BBUlRJVElPTl9MT0dJQ0FMKSAhPSAwLCByZXR1cm4pOworCisJdmQtPnZkX25ieXRlcyA9IFBFRF9DUFVfVE9fQkUzMiAoZHZoX3BhcnRfZGF0YS0+cmVhbF9maWxlX3NpemUpOworCXZkLT52ZF9sYm4gPSBQRURfQ1BVX1RPX0JFMzIgKHBhcnQtPmdlb20uc3RhcnQpOworCisJbWVtc2V0ICh2ZC0+dmRfbmFtZSwgMCwgVkROQU1FU0laRSk7CisJc3RybmNweSAodmQtPnZkX25hbWUsIGR2aF9wYXJ0X2RhdGEtPm5hbWUsIFZETkFNRVNJWkUpOworfQorCitzdGF0aWMgaW50Citkdmhfd3JpdGUgKGNvbnN0IFBlZERpc2sqIGRpc2spCit7CisJRFZIRGlza0RhdGEqCQlkdmhfZGlza19kYXRhID0gZGlzay0+ZGlza19zcGVjaWZpYzsKKwlzdHJ1Y3Qgdm9sdW1lX2hlYWRlcgl2aDsKKwlpbnQJCQlpOworCisJUEVEX0FTU0VSVCAoZHZoX2Rpc2tfZGF0YSAhPSBOVUxMLCByZXR1cm4gMCk7CisKKwlfZmx1c2hfc3RhbGVfZmxhZ3MgKGRpc2spOworCisJbWVtc2V0ICgmdmgsIDAsIHNpemVvZiAoc3RydWN0IHZvbHVtZV9oZWFkZXIpKTsKKworCXZoLnZoX21hZ2ljID0gUEVEX0NQVV9UT19CRTMyIChWSE1BR0lDKTsKKwl2aC52aF9yb290cHQgPSBQRURfQ1BVX1RPX0JFMTYgKGR2aF9kaXNrX2RhdGEtPnJvb3QgLSAxKTsKKwl2aC52aF9zd2FwcHQgPSBQRURfQ1BVX1RPX0JFMTYgKGR2aF9kaXNrX2RhdGEtPnN3YXAgLSAxKTsKKworCWlmIChkdmhfZGlza19kYXRhLT5ib290KSB7CisJCVBlZFBhcnRpdGlvbiogYm9vdF9wYXJ0OworCQlib290X3BhcnQgPSBwZWRfZGlza19nZXRfcGFydGl0aW9uIChkaXNrLCBkdmhfZGlza19kYXRhLT5ib290KTsKKwkJc3RyY3B5ICh2aC52aF9ib290ZmlsZSwgcGVkX3BhcnRpdGlvbl9nZXRfbmFtZSAoYm9vdF9wYXJ0KSk7CisJfQorCisJdmgudmhfZHAgPSBkdmhfZGlza19kYXRhLT5kZXZfcGFyYW1zOworCS8qIFNldCB1cCBydWRpbWVudGFyeSBkZXZpY2UgZ2VvbWV0cnkgKi8KKwl2aC52aF9kcC5kcF9jeWxzCisJCT0gUEVEX0NQVV9UT19CRTE2ICgoc2hvcnQpZGlzay0+ZGV2LT5iaW9zX2dlb20uY3lsaW5kZXJzKTsKKwl2aC52aF9kcC5kcF90cmtzMCA9IFBFRF9DUFVfVE9fQkUxNiAoKHNob3J0KWRpc2stPmRldi0+Ymlvc19nZW9tLmhlYWRzKTsKKwl2aC52aF9kcC5kcF9zZWNzCisJCT0gUEVEX0NQVV9UT19CRTE2ICgoc2hvcnQpZGlzay0+ZGV2LT5iaW9zX2dlb20uc2VjdG9ycyk7CisJdmgudmhfZHAuZHBfc2VjYnl0ZXMgPSBQRURfQ1BVX1RPX0JFMTYgKChzaG9ydClkaXNrLT5kZXYtPnNlY3Rvcl9zaXplKTsKKworCWZvciAoaSA9IDA7IGkgPCBOUEFSVEFCOyBpKyspIHsKKwkJUGVkUGFydGl0aW9uKiBwYXJ0ID0gcGVkX2Rpc2tfZ2V0X3BhcnRpdGlvbiAoZGlzaywgaSArIDEpOworCQlpZiAocGFydCkKKwkJCV9nZW5lcmF0ZV9wYXJ0aXRpb24gKHBhcnQsICZ2aC52aF9wdFtpXSk7CisJfQorCisJLyogd2hvbGUgZGlzayBwYXJ0aXRpb24KKwkgKiBUaGlzIGlzIG9ubHkgZXZlciB3cml0dGVuIGhlcmUsIGFuZCBuZXZlciBtb2RpZmllZCAKKwkgKiAob3IgZXZlbiBzaG93bikgYXMgaXQgbXVzdCBjb250YWluIHRoZSBlbnRpcmUgZGlzaywgCisJICogYW5kIHBhcnRlZCBkb2VzIG5vdCBsaWtlIG92ZXJsYXBwaW5nIHBhcnRpdGlvbnMKKwkgKi8KKwl2aC52aF9wdFtQTlVNX1ZPTFVNRV0ucHRfbmJsa3MgPSBQRURfQ1BVX1RPX0JFMzIgKGRpc2stPmRldi0+bGVuZ3RoKTsKKwl2aC52aF9wdFtQTlVNX1ZPTFVNRV0ucHRfZmlyc3RsYm4gPSBQRURfQ1BVX1RPX0JFMzIgKDApOworCXZoLnZoX3B0W1BOVU1fVk9MVU1FXS5wdF90eXBlID0gUEVEX0NQVV9UT19CRTMyIChQVFlQRV9WT0xVTUUpOworCisJZm9yIChpID0gMDsgaSA8IE5WRElSOyBpKyspIHsKKwkJUGVkUGFydGl0aW9uKiBwYXJ0ID0gcGVkX2Rpc2tfZ2V0X3BhcnRpdGlvbiAoZGlzaywKKwkJCQkJCQkgICAgIGkgKyAxICsgTlBBUlRBQik7CisJCWlmIChwYXJ0KQorCQkJX2dlbmVyYXRlX2Jvb3RfZmlsZSAocGFydCwgJnZoLnZoX3ZkW2ldKTsKKwl9CisKKwl2aC52aF9jc3VtID0gMDsKKwl2aC52aF9jc3VtID0gUEVEX0NQVV9UT19CRTMyIChfY2hlY2tzdW0gKCh1aW50MzJfdCopICZ2aCwKKwkJCSAgICAgICAJICAgICAgc2l6ZW9mIChzdHJ1Y3Qgdm9sdW1lX2hlYWRlcikpKTsKKworCXJldHVybiBwZWRfZGV2aWNlX3dyaXRlIChkaXNrLT5kZXYsICZ2aCwgMCwgMSkKKwkgICAgICAgJiYgcGVkX2RldmljZV9zeW5jIChkaXNrLT5kZXYpOworfQorI2VuZGlmIC8qICFESVNDT1ZFUl9PTkxZICovCisKK3N0YXRpYyBQZWRQYXJ0aXRpb24qCitkdmhfcGFydGl0aW9uX25ldyAoY29uc3QgUGVkRGlzayogZGlzaywgUGVkUGFydGl0aW9uVHlwZSBwYXJ0X3R5cGUsCisJCSAgICBjb25zdCBQZWRGaWxlU3lzdGVtVHlwZSogZnNfdHlwZSwKKwkJICAgIFBlZFNlY3RvciBzdGFydCwgUGVkU2VjdG9yIGVuZCkKK3sKKwlQZWRQYXJ0aXRpb24qIHBhcnQ7CisJRFZIUGFydERhdGEqIGR2aF9wYXJ0X2RhdGE7CisKKwlwYXJ0ID0gX3BlZF9wYXJ0aXRpb25fYWxsb2MgKGRpc2ssIHBhcnRfdHlwZSwgZnNfdHlwZSwgc3RhcnQsIGVuZCk7CisJaWYgKCFwYXJ0KQorCQlnb3RvIGVycm9yOworCisJaWYgKCFwZWRfcGFydGl0aW9uX2lzX2FjdGl2ZSAocGFydCkpIHsKKwkJcGFydC0+ZGlza19zcGVjaWZpYyA9IE5VTEw7CisJCXJldHVybiBwYXJ0OworCX0KKworCWR2aF9wYXJ0X2RhdGEgPSBwYXJ0LT5kaXNrX3NwZWNpZmljID0KKwkJcGVkX21hbGxvYyAoc2l6ZW9mIChEVkhQYXJ0RGF0YSkpOworCWlmICghZHZoX3BhcnRfZGF0YSkKKwkJZ290byBlcnJvcl9mcmVlX3BhcnQ7CisKKwlkdmhfcGFydF9kYXRhLT50eXBlID0gKHBhcnRfdHlwZSA9PSBQRURfUEFSVElUSU9OX0VYVEVOREVEKQorCQkJCQk/IFBUWVBFX1ZPTEhEUgorCQkJCQk6IFBUWVBFX1JBVzsKKwlzdHJjcHkgKGR2aF9wYXJ0X2RhdGEtPm5hbWUsICIiKTsKKwlkdmhfcGFydF9kYXRhLT5yZWFsX2ZpbGVfc2l6ZSA9IHBhcnQtPmdlb20ubGVuZ3RoICogNTEyOworCXJldHVybiBwYXJ0OworCitlcnJvcl9mcmVlX3BhcnQ6CisJX3BlZF9wYXJ0aXRpb25fZnJlZSAocGFydCk7CitlcnJvcjoKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIFBlZFBhcnRpdGlvbioKK2R2aF9wYXJ0aXRpb25fZHVwbGljYXRlIChjb25zdCBQZWRQYXJ0aXRpb24qIHBhcnQpCit7CisJUGVkUGFydGl0aW9uKiByZXN1bHQ7CisJRFZIUGFydERhdGEqIHBhcnRfZGF0YSA9IHBhcnQtPmRpc2tfc3BlY2lmaWM7CisJRFZIUGFydERhdGEqIHJlc3VsdF9kYXRhOworCisJcmVzdWx0ID0gX3BlZF9wYXJ0aXRpb25fYWxsb2MgKHBhcnQtPmRpc2ssIHBhcnQtPnR5cGUsIHBhcnQtPmZzX3R5cGUsCisJCQkJICAgICAgIHBhcnQtPmdlb20uc3RhcnQsIHBhcnQtPmdlb20uZW5kKTsKKwlpZiAoIXJlc3VsdCkKKwkJZ290byBlcnJvcjsKKwlyZXN1bHQtPm51bSA9IHBhcnQtPm51bTsKKworCWlmICghcGVkX3BhcnRpdGlvbl9pc19hY3RpdmUgKHBhcnQpKSB7CisJCXJlc3VsdC0+ZGlza19zcGVjaWZpYyA9IE5VTEw7CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJcmVzdWx0X2RhdGEgPSByZXN1bHQtPmRpc2tfc3BlY2lmaWMgPQorCQlwZWRfbWFsbG9jIChzaXplb2YgKERWSFBhcnREYXRhKSk7CisJaWYgKCFyZXN1bHRfZGF0YSkKKwkJZ290byBlcnJvcl9mcmVlX3BhcnQ7CisKKwlyZXN1bHRfZGF0YS0+dHlwZSA9IHBhcnRfZGF0YS0+dHlwZTsKKwlzdHJjcHkgKHJlc3VsdF9kYXRhLT5uYW1lLCBwYXJ0X2RhdGEtPm5hbWUpOworCXJlc3VsdF9kYXRhLT5yZWFsX2ZpbGVfc2l6ZSA9IHBhcnRfZGF0YS0+cmVhbF9maWxlX3NpemU7CisJcmV0dXJuIHJlc3VsdDsKKworZXJyb3JfZnJlZV9wYXJ0OgorCV9wZWRfcGFydGl0aW9uX2ZyZWUgKHJlc3VsdCk7CitlcnJvcjoKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQKK2R2aF9wYXJ0aXRpb25fZGVzdHJveSAoUGVkUGFydGl0aW9uKiBwYXJ0KQoreworCWlmIChwZWRfcGFydGl0aW9uX2lzX2FjdGl2ZSAocGFydCkpIHsKKwkJUEVEX0FTU0VSVCAocGFydC0+ZGlza19zcGVjaWZpYyAhPSBOVUxMLCByZXR1cm4pOworCQlwZWRfZnJlZSAocGFydC0+ZGlza19zcGVjaWZpYyk7CisJfQorCV9wZWRfcGFydGl0aW9uX2ZyZWUgKHBhcnQpOworfQorCitzdGF0aWMgaW50CitkdmhfcGFydGl0aW9uX3NldF9zeXN0ZW0gKFBlZFBhcnRpdGlvbiogcGFydCwgY29uc3QgUGVkRmlsZVN5c3RlbVR5cGUqIGZzX3R5cGUpCit7CisJRFZIUGFydERhdGEqIGR2aF9wYXJ0X2RhdGEgPSBwYXJ0LT5kaXNrX3NwZWNpZmljOworCisJcGFydC0+ZnNfdHlwZSA9IGZzX3R5cGU7CisKKwlpZiAocGFydC0+dHlwZSA9PSBQRURfUEFSVElUSU9OX0VYVEVOREVEKSB7CisJCWR2aF9wYXJ0X2RhdGEtPnR5cGUgPSBQVFlQRV9WT0xIRFI7CisJCXJldHVybiAxOworCX0KKworCS8qIElzIHRoaXMgYSBib290ZmlsZT8gKi8KKwlpZiAocGFydC0+dHlwZSA9PSBQRURfUEFSVElUSU9OX0xPR0lDQUwpCisJCXJldHVybiAxOworCisJaWYgKGZzX3R5cGUgJiYgIXN0cmNtcCAoZnNfdHlwZS0+bmFtZSwgInhmcyIpKQorCQlkdmhfcGFydF9kYXRhLT50eXBlID0gUFRZUEVfWEZTOworCWVsc2UKKwkJZHZoX3BhcnRfZGF0YS0+dHlwZSA9IFBUWVBFX1JBVzsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludAorZHZoX3BhcnRpdGlvbl9zZXRfZmxhZyAoUGVkUGFydGl0aW9uKiBwYXJ0LCBQZWRQYXJ0aXRpb25GbGFnIGZsYWcsIGludCBzdGF0ZSkKK3sKKwlEVkhEaXNrRGF0YSogZHZoX2Rpc2tfZGF0YSA9IHBhcnQtPmRpc2stPmRpc2tfc3BlY2lmaWM7CisKKwlzd2l0Y2ggKGZsYWcpIHsKKwljYXNlIFBFRF9QQVJUSVRJT05fUk9PVDoKKwkJaWYgKHBhcnQtPnR5cGUgIT0gMCAmJiBzdGF0ZSkgeworI2lmbmRlZiBESVNDT1ZFUl9PTkxZCisJCQlwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCQlQRURfRVhDRVBUSU9OX0VSUk9SLAorCQkJCVBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJCV8oIk9ubHkgcHJpbWFyeSBwYXJ0aXRpb25zIGNhbiBiZSByb290ICIKKwkJCQkgICJwYXJ0aXRpb25zLiIpKTsKKyNlbmRpZgorCQkJcmV0dXJuIDA7CisJCX0KKwkJZHZoX2Rpc2tfZGF0YS0+cm9vdCA9IHN0YXRlID8gcGFydC0+bnVtIDogMDsKKwkJYnJlYWs7CisKKwljYXNlIFBFRF9QQVJUSVRJT05fU1dBUDoKKwkJaWYgKHBhcnQtPnR5cGUgIT0gMCAmJiBzdGF0ZSkgeworI2lmbmRlZiBESVNDT1ZFUl9PTkxZCisJCQlwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCQlQRURfRVhDRVBUSU9OX0VSUk9SLAorCQkJCVBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJCV8oIk9ubHkgcHJpbWFyeSBwYXJ0aXRpb25zIGNhbiBiZSBzd2FwICIKKwkJCQkgICJwYXJ0aXRpb25zLiIpKTsKKwkJCXJldHVybiAwOworI2VuZGlmCisJCX0KKwkJZHZoX2Rpc2tfZGF0YS0+c3dhcCA9IHN0YXRlID8gcGFydC0+bnVtIDogMDsKKwkJYnJlYWs7CisKKwljYXNlIFBFRF9QQVJUSVRJT05fQk9PVDoKKwkJaWYgKHBhcnQtPnR5cGUgIT0gUEVEX1BBUlRJVElPTl9MT0dJQ0FMICYmIHN0YXRlKSB7CisjaWZuZGVmIERJU0NPVkVSX09OTFkKKwkJCXBlZF9leGNlcHRpb25fdGhyb3cgKAorCQkJCVBFRF9FWENFUFRJT05fRVJST1IsCisJCQkJUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQkJXygiT25seSBsb2dpY2FsIHBhcnRpdGlvbnMgY2FuIGJlIGEgYm9vdCAiCisJCQkJICAiZmlsZS4iKSk7CisjZW5kaWYKKwkJCXJldHVybiAwOworCQl9CisJCWR2aF9kaXNrX2RhdGEtPmJvb3QgPSBzdGF0ZSA/IHBhcnQtPm51bSA6IDA7CisJCWJyZWFrOworCisJY2FzZSBQRURfUEFSVElUSU9OX0xWTToKKwljYXNlIFBFRF9QQVJUSVRJT05fTEJBOgorCWNhc2UgUEVEX1BBUlRJVElPTl9ISURERU46CisJY2FzZSBQRURfUEFSVElUSU9OX1JBSUQ6CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgaW50CitkdmhfcGFydGl0aW9uX2dldF9mbGFnIChjb25zdCBQZWRQYXJ0aXRpb24qIHBhcnQsIFBlZFBhcnRpdGlvbkZsYWcgZmxhZykKK3sKKwlEVkhEaXNrRGF0YSogZHZoX2Rpc2tfZGF0YSA9IHBhcnQtPmRpc2stPmRpc2tfc3BlY2lmaWM7CisKKwlzd2l0Y2ggKGZsYWcpIHsKKwljYXNlIFBFRF9QQVJUSVRJT05fUk9PVDoKKwkJcmV0dXJuIGR2aF9kaXNrX2RhdGEtPnJvb3QgPT0gcGFydC0+bnVtOworCisJY2FzZSBQRURfUEFSVElUSU9OX1NXQVA6CisJCXJldHVybiBkdmhfZGlza19kYXRhLT5zd2FwID09IHBhcnQtPm51bTsKKworCWNhc2UgUEVEX1BBUlRJVElPTl9CT09UOgorCQlyZXR1cm4gZHZoX2Rpc2tfZGF0YS0+Ym9vdCA9PSBwYXJ0LT5udW07CisKKwljYXNlIFBFRF9QQVJUSVRJT05fTFZNOgorCWNhc2UgUEVEX1BBUlRJVElPTl9MQkE6CisJY2FzZSBQRURfUEFSVElUSU9OX0hJRERFTjoKKwljYXNlIFBFRF9QQVJUSVRJT05fUkFJRDoKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2R2aF9wYXJ0aXRpb25faXNfZmxhZ19hdmFpbGFibGUgKGNvbnN0IFBlZFBhcnRpdGlvbiogcGFydCwKKwkJCQkgIFBlZFBhcnRpdGlvbkZsYWcgZmxhZykKK3sKKwlzd2l0Y2ggKGZsYWcpIHsKKwljYXNlIFBFRF9QQVJUSVRJT05fUk9PVDoKKwljYXNlIFBFRF9QQVJUSVRJT05fU1dBUDoKKwljYXNlIFBFRF9QQVJUSVRJT05fQk9PVDoKKwkJcmV0dXJuIDE7CisKKwljYXNlIFBFRF9QQVJUSVRJT05fTFZNOgorCWNhc2UgUEVEX1BBUlRJVElPTl9MQkE6CisJY2FzZSBQRURfUEFSVElUSU9OX0hJRERFTjoKKwljYXNlIFBFRF9QQVJUSVRJT05fUkFJRDoKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCitkdmhfcGFydGl0aW9uX3NldF9uYW1lIChQZWRQYXJ0aXRpb24qIHBhcnQsIGNvbnN0IGNoYXIqIG5hbWUpCit7CisJRFZIUGFydERhdGEqIGR2aF9wYXJ0X2RhdGEgPSBwYXJ0LT5kaXNrX3NwZWNpZmljOworCisJaWYgKHBhcnQtPnR5cGUgPT0gUEVEX1BBUlRJVElPTl9MT0dJQ0FMKSB7CisJCS8qIEJvb3RmaWxlICovCisJCXN0cm5jcHkgKGR2aF9wYXJ0X2RhdGEtPm5hbWUsIG5hbWUsIFZETkFNRVNJWkUpOworCQlkdmhfcGFydF9kYXRhLT5uYW1lW1ZETkFNRVNJWkVdID0gMDsKKwl9IGVsc2UgeworI2lmbmRlZiBESVNDT1ZFUl9PTkxZCisJCXBlZF9leGNlcHRpb25fdGhyb3cgKAorCQkJUEVEX0VYQ0VQVElPTl9FUlJPUiwKKwkJCVBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJXygiT25seSBsb2dpY2FsIHBhcnRpdGlvbnMgKGJvb3QgZmlsZXMpIGhhdmUgYSBuYW1lLiIpKTsKKyNlbmRpZgorCX0KK30KKworc3RhdGljIGNvbnN0IGNoYXIqCitkdmhfcGFydGl0aW9uX2dldF9uYW1lIChjb25zdCBQZWRQYXJ0aXRpb24qIHBhcnQpCit7CisJRFZIUGFydERhdGEqIGR2aF9wYXJ0X2RhdGEgPSBwYXJ0LT5kaXNrX3NwZWNpZmljOworCXJldHVybiBkdmhfcGFydF9kYXRhLT5uYW1lOworfQorCisvKiBUaGUgY29uc3RyYWludCBmb3IgdGhlIHZvbHVtZSBoZWFkZXIgcGFydGl0aW9uIGlzIGRpZmZlcmVudCwgYmVjYXVzZSBpdCBtdXN0CisgKiBjb250YWluIHRoZSBmaXJzdCBzZWN0b3Igb2YgdGhlIGRpc2suCisgKi8KK3N0YXRpYyBQZWRDb25zdHJhaW50KgorX2dldF9leHRlbmRlZF9jb25zdHJhaW50IChQZWREaXNrKiBkaXNrKQoreworICAgICAgICBQZWRHZW9tZXRyeSAgICAgbWluX2dlb207CisJaWYgKCFwZWRfZ2VvbWV0cnlfaW5pdCAoJm1pbl9nZW9tLCBkaXNrLT5kZXYsIDAsIDEpKQorCQlyZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIHBlZF9jb25zdHJhaW50X25ld19mcm9tX21pbiAoJm1pbl9nZW9tKTsKK30KKworc3RhdGljIFBlZENvbnN0cmFpbnQqCitfZ2V0X3ByaW1hcnlfY29uc3RyYWludCAoUGVkRGlzayogZGlzaykKK3sKKyAgICAgICAgUGVkR2VvbWV0cnkgICAgIG1heF9nZW9tOworCWlmICghcGVkX2dlb21ldHJ5X2luaXQgKCZtYXhfZ2VvbSwgZGlzay0+ZGV2LCAxLCBkaXNrLT5kZXYtPmxlbmd0aCAtIDEpKQorCQlyZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIHBlZF9jb25zdHJhaW50X25ld19mcm9tX21heCAoJm1heF9nZW9tKTsKK30KKworc3RhdGljIGludAorZHZoX3BhcnRpdGlvbl9hbGlnbiAoUGVkUGFydGl0aW9uKiBwYXJ0LCBjb25zdCBQZWRDb25zdHJhaW50KiBjb25zdHJhaW50KQoreworICAgICAgICBQRURfQVNTRVJUIChwYXJ0ICE9IE5VTEwsIHJldHVybiAwKTsKKworCWlmIChfcGVkX3BhcnRpdGlvbl9hdHRlbXB0X2FsaWduICgKKwkJCXBhcnQsIGNvbnN0cmFpbnQsCisJCQkocGFydC0+dHlwZSA9PSBQRURfUEFSVElUSU9OX0VYVEVOREVEKQorCQkJCT8gX2dldF9leHRlbmRlZF9jb25zdHJhaW50IChwYXJ0LT5kaXNrKQorCQkJCTogX2dldF9wcmltYXJ5X2NvbnN0cmFpbnQgKHBhcnQtPmRpc2spKSkKKwkJcmV0dXJuIDE7CisKKyNpZm5kZWYgRElTQ09WRVJfT05MWQorCXBlZF9leGNlcHRpb25fdGhyb3cgKAorCQlQRURfRVhDRVBUSU9OX0VSUk9SLAorCQlQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJXygiVW5hYmxlIHRvIHNhdGlzZnkgYWxsIGNvbnN0cmFpbnRzIG9uIHRoZSBwYXJ0aXRpb24uIikpOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2R2aF9wYXJ0aXRpb25fZW51bWVyYXRlIChQZWRQYXJ0aXRpb24qIHBhcnQpCit7CisJaW50IGk7CisKKwkvKiBuZXZlciBjaGFuZ2UgdGhlIHBhcnRpdGlvbiBudW1iZXJzICovCisJaWYgKHBhcnQtPm51bSAhPSAtMSkKKwkJcmV0dXJuIDE7CisKKwlfZmx1c2hfc3RhbGVfZmxhZ3MgKHBhcnQtPmRpc2spOworCisJaWYgKHBhcnQtPnR5cGUgJiBQRURfUEFSVElUSU9OX0xPR0lDQUwpIHsKKwkJLyogQm9vdGZpbGUgKi8KKwkJZm9yIChpID0gMSArIE5QQVJUQUI7IGkgPD0gTlBBUlRBQiArIE5WRElSOyBpKyspIHsKKwkJCWlmICghcGVkX2Rpc2tfZ2V0X3BhcnRpdGlvbiAocGFydC0+ZGlzaywgaSkpIHsKKwkJCQlwYXJ0LT5udW0gPSBpOworCQkJCXJldHVybiAxOworCQkJfQorCQl9CisJCVBFRF9BU1NFUlQgKDAsIHJldHVybiAwKTsKKwl9IGVsc2UgaWYgKHBhcnQtPnR5cGUgJiBQRURfUEFSVElUSU9OX0VYVEVOREVEKSB7CisJCS8qIFZvbGhlYWRlciAqLworCQlwYXJ0LT5udW0gPSBQTlVNX1ZPTEhEUiArIDE7CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMTsgaSA8PSBOUEFSVEFCOyBpKyspIHsKKwkJCS8qIHJlc2VydmVkIGZvciBmdWxsIHZvbHVtZSBwYXJ0aXRpb24gKi8KKwkJCWlmIChpID09IFBOVU1fVk9MVU1FICsgMSkKKwkJCQljb250aW51ZTsKKworCQkJaWYgKCFwZWRfZGlza19nZXRfcGFydGl0aW9uIChwYXJ0LT5kaXNrLCBpKSkgeworCQkJCXBhcnQtPm51bSA9IGk7CisJCQkJcmV0dXJuIDE7CisJCQl9CisJCX0KKwkJcGVkX2V4Y2VwdGlvbl90aHJvdyAoCisJCQlQRURfRVhDRVBUSU9OX0VSUk9SLAorCQkJUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQlfKCJUb28gbWFueSBwcmltYXJ5IHBhcnRpdGlvbnMiKSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2R2aF9nZXRfbWF4X3ByaW1hcnlfcGFydGl0aW9uX2NvdW50IChjb25zdCBQZWREaXNrKiBkaXNrKQoreworCXJldHVybiBOUEFSVEFCOworfQorCitzdGF0aWMgaW50CitkdmhfYWxsb2NfbWV0YWRhdGEgKFBlZERpc2sqIGRpc2spCit7CisJUGVkUGFydGl0aW9uKiBwYXJ0OworCVBlZFBhcnRpdGlvbiogZXh0ZW5kZWRfcGFydDsKKwlQZWRDb25zdHJhaW50KiBjb25zdHJhaW50X2V4YWN0OworCVBlZFBhcnRpdGlvblR5cGUgbWV0YWRhdGFfdHlwZTsKKwlQRURfQVNTRVJUKGRpc2sgIT0gTlVMTCwgcmV0dXJuIDApOworCisJLyogV2UgZG9uJ3QgbmVlZCB0byAicHJvdGVjdCIgdGhlIHN0YXJ0IG9mIHRoZSBkaXNrIGZyb20gdGhlIHZvbHVtZQorCSAqIGhlYWRlci4KKwkgKi8KKwlleHRlbmRlZF9wYXJ0ID0gcGVkX2Rpc2tfZXh0ZW5kZWRfcGFydGl0aW9uIChkaXNrKTsKKwlpZiAoZXh0ZW5kZWRfcGFydCAmJiBleHRlbmRlZF9wYXJ0LT5nZW9tLnN0YXJ0ID09IDApCisJCW1ldGFkYXRhX3R5cGUgPSBQRURfUEFSVElUSU9OX01FVEFEQVRBIHwgUEVEX1BBUlRJVElPTl9MT0dJQ0FMOworCWVsc2UKKwkJbWV0YWRhdGFfdHlwZSA9IFBFRF9QQVJUSVRJT05fTUVUQURBVEE7CisKKwlwYXJ0ID0gcGVkX3BhcnRpdGlvbl9uZXcgKGRpc2ssIG1ldGFkYXRhX3R5cGUsIE5VTEwsIDAsIDApOworCWlmICghcGFydCkKKwkJZ290byBlcnJvcjsKKworCWNvbnN0cmFpbnRfZXhhY3QgPSBwZWRfY29uc3RyYWludF9leGFjdCAoJnBhcnQtPmdlb20pOworCWlmICghcGVkX2Rpc2tfYWRkX3BhcnRpdGlvbiAoZGlzaywgcGFydCwgY29uc3RyYWludF9leGFjdCkpCisJCWdvdG8gZXJyb3JfZGVzdHJveV9wYXJ0OworCXBlZF9jb25zdHJhaW50X2Rlc3Ryb3kgKGNvbnN0cmFpbnRfZXhhY3QpOworCXJldHVybiAxOworCisJcGVkX2NvbnN0cmFpbnRfZGVzdHJveSAoY29uc3RyYWludF9leGFjdCk7CitlcnJvcl9kZXN0cm95X3BhcnQ6CisJcGVkX3BhcnRpdGlvbl9kZXN0cm95IChwYXJ0KTsKK2Vycm9yOgorCXJldHVybiAwOworfQorCitzdGF0aWMgUGVkRGlza09wcyBkdmhfZGlza19vcHMgPSB7CisJcHJvYmU6CQkJZHZoX3Byb2JlLAorI2lmbmRlZiBESVNDT1ZFUl9PTkxZCisJY2xvYmJlcjoJCWR2aF9jbG9iYmVyLAorI2Vsc2UKKwljbG9iYmVyOgkJTlVMTCwKKyNlbmRpZgorCWFsbG9jOgkJCWR2aF9hbGxvYywKKwlkdXBsaWNhdGU6CQlkdmhfZHVwbGljYXRlLAorCWZyZWU6CQkJZHZoX2ZyZWUsCisJcmVhZDoJCQlkdmhfcmVhZCwKKyNpZm5kZWYgRElTQ09WRVJfT05MWQorCXdyaXRlOgkJCWR2aF93cml0ZSwKKyNlbHNlCisJd3JpdGU6CQkJTlVMTCwKKyNlbmRpZgorCisJcGFydGl0aW9uX25ldzoJCWR2aF9wYXJ0aXRpb25fbmV3LAorCXBhcnRpdGlvbl9kdXBsaWNhdGU6CWR2aF9wYXJ0aXRpb25fZHVwbGljYXRlLAorCXBhcnRpdGlvbl9kZXN0cm95OglkdmhfcGFydGl0aW9uX2Rlc3Ryb3ksCisJcGFydGl0aW9uX3NldF9zeXN0ZW06CWR2aF9wYXJ0aXRpb25fc2V0X3N5c3RlbSwKKwlwYXJ0aXRpb25fc2V0X2ZsYWc6CWR2aF9wYXJ0aXRpb25fc2V0X2ZsYWcsCisJcGFydGl0aW9uX2dldF9mbGFnOglkdmhfcGFydGl0aW9uX2dldF9mbGFnLAorCXBhcnRpdGlvbl9pc19mbGFnX2F2YWlsYWJsZToJZHZoX3BhcnRpdGlvbl9pc19mbGFnX2F2YWlsYWJsZSwKKwlwYXJ0aXRpb25fc2V0X25hbWU6CWR2aF9wYXJ0aXRpb25fc2V0X25hbWUsCisJcGFydGl0aW9uX2dldF9uYW1lOglkdmhfcGFydGl0aW9uX2dldF9uYW1lLAorCXBhcnRpdGlvbl9hbGlnbjoJZHZoX3BhcnRpdGlvbl9hbGlnbiwKKwlwYXJ0aXRpb25fZW51bWVyYXRlOglkdmhfcGFydGl0aW9uX2VudW1lcmF0ZSwKKworCWFsbG9jX21ldGFkYXRhOgkJZHZoX2FsbG9jX21ldGFkYXRhLAorCWdldF9tYXhfcHJpbWFyeV9wYXJ0aXRpb25fY291bnQ6CisJCQkJZHZoX2dldF9tYXhfcHJpbWFyeV9wYXJ0aXRpb25fY291bnQKK307CisKK3N0YXRpYyBQZWREaXNrVHlwZSBkdmhfZGlza190eXBlID0geworCW5leHQ6CQlOVUxMLAorCW5hbWU6CQkiZHZoIiwKKwlvcHM6CQkmZHZoX2Rpc2tfb3BzLAorCWZlYXR1cmVzOglQRURfRElTS19UWVBFX1BBUlRJVElPTl9OQU1FIHwgUEVEX0RJU0tfVFlQRV9FWFRFTkRFRAorfTsKKwordm9pZAorcGVkX2Rpc2tfZHZoX2luaXQgKCkKK3sKKwlQRURfQVNTRVJUIChzaXplb2YgKHN0cnVjdCB2b2x1bWVfaGVhZGVyKSA9PSA1MTIsIHJldHVybik7CisKKwlwZWRfZGlza190eXBlX3JlZ2lzdGVyICgmZHZoX2Rpc2tfdHlwZSk7Cit9CisKK3ZvaWQKK3BlZF9kaXNrX2R2aF9kb25lICgpCit7CisJcGVkX2Rpc2tfdHlwZV91bnJlZ2lzdGVyICgmZHZoX2Rpc2tfdHlwZSk7Cit9CmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2xhYmVscy9kdmguaCBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvbGFiZWxzL2R2aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwNzVkYTgKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2xhYmVscy9kdmguaApAQCAtMCwwICsxLDE3OSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDE5ODUgTUlQUyBDb21wdXRlciBTeXN0ZW1zLCBJbmMuCisgICAgQ29weXJpZ2h0IChDKSAyMDAwIFNpbGljb24gR3JhcGhpY3MgQ29tcHV0ZXIgU3lzdGVtcywgSW5jLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQorKi8KKworI2lmbmRlZiBfU1lTX0RWSF9ICisjZGVmaW5lIF9TWVNfRFZIX0gKKworLyoKKyAqIEZvcm1hdCBmb3Igdm9sdW1lIGhlYWRlciBpbmZvcm1hdGlvbgorICoKKyAqIFRoZSB2b2x1bWUgaGVhZGVyIGlzIGEgYmxvY2sgbG9jYXRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGFsbCBkaXNrCisgKiBtZWRpYSAoc2VjdG9yIDApLiAgSXQgY29udGFpbnMgaW5mb3JtYXRpb24gcGVydGFpbmluZyB0byBwaHlzaWNhbAorICogZGV2aWNlIHBhcmFtZXRlcnMgYW5kIGxvZ2ljYWwgcGFydGl0aW9uIGluZm9ybWF0aW9uLgorICoKKyAqIFRoZSB2b2x1bWUgaGVhZGVyIGlzIG1hbmlwdWxhdGVkIGJ5IGRpc2sgZm9ybWF0dGVycy92ZXJpZmllcnMsIAorICogcGFydGl0aW9uIGJ1aWxkZXJzIChlLmcuIGZ4LCBkdmh0b29sLCBhbmQgbWtmcyksIGFuZCBkaXNrIGRyaXZlcnMuCisgKgorICogUHJldmlvdXMgdmVyc2lvbnMgb2YgSVJJWCB3cm90ZSBhIGNvcHkgb2YgdGhlIHZvbHVtZSBoZWFkZXIgaXMKKyAqIGxvY2F0ZWQgYXQgc2VjdG9yIDAgb2YgZWFjaCB0cmFjayBvZiBjeWxpbmRlciAwLiAgVGhlc2UgY29waWVzIHdlcmUKKyAqIG5ldmVyIHVzZWQsIGFuZCByZWR1Y2VkIHRoZSBjYXBhY2l0eSBvZiB0aGUgdm9sdW1lIGhlYWRlciB0byBob2xkIGxhcmdlCisgKiBmaWxlcywgc28gdGhpcyBwcmFjdGljZSB3YXMgZGlzY29udGludWVkLgorICogVGhlIHZvbHVtZSBoZWFkZXIgaXMgY29uc3RyYWluZWQgdG8gYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDUxMgorICogYnl0ZXMgbG9uZy4gIEEgcGFydGljdWxhciBjb3B5IGlzIGFzc3VtZWQgdmFsaWQgaWYgbm8gZHJpdmUgZXJyb3JzCisgKiBhcmUgZGV0ZWN0ZWQsIHRoZSBtYWdpYyBudW1iZXIgaXMgY29ycmVjdCwgYW5kIHRoZSAzMiBiaXQgMidzIGNvbXBsZW1lbnQKKyAqIG9mIHRoZSB2b2x1bWUgaGVhZGVyIGlzIGNvcnJlY3QuICBUaGUgY2hlY2tzdW0gaXMgY2FsY3VsYXRlZCBieSBpbml0aWFsbHkKKyAqIHplcm9pbmcgdmhfY3N1bSwgc3VtbWluZyB0aGUgZW50aXJlIHN0cnVjdHVyZSBhbmQgdGhlbiBzdG9yaW5nIHRoZQorICogMidzIGNvbXBsZW1lbnQgb2YgdGhlIHN1bS4gIFRodXMgYSBjaGVja3N1bSB0byB2ZXJpZnkgdGhlIHZvbHVtZSBoZWFkZXIKKyAqIHNob3VsZCBiZSAwLgorICoKKyAqIFRoZSBlcnJvciBzdW1tYXJ5IHRhYmxlLCBiYWQgc2VjdG9yIHJlcGxhY2VtZW50IHRhYmxlLCBhbmQgYm9vdCBibG9ja3MgYXJlCisgKiBsb2NhdGVkIGJ5IHNlYXJjaGluZyB0aGUgdm9sdW1lIGRpcmVjdG9yeSB3aXRoaW4gdGhlIHZvbHVtZSBoZWFkZXIuCisgKgorICogVGFibGVzIGFyZSBzaXplZCBzaW1wbHkgYnkgdGhlIGludGVncmFsIG51bWJlciBvZiB0YWJsZSByZWNvcmRzIHRoYXQKKyAqIHdpbGwgZml0IGluIHRoZSBzcGFjZSBpbmRpY2F0ZWQgYnkgdGhlIGRpcmVjdG9yeSBlbnRyeS4KKyAqCisgKiBUaGUgYW1vdW50IG9mIHNwYWNlIGFsbG9jYXRlZCB0byB0aGUgdm9sdW1lIGhlYWRlciwgcmVwbGFjZW1lbnQgYmxvY2tzLAorICogYW5kIG90aGVyIHRhYmxlcyBpcyB1c2VyIGRlZmluZWQgd2hlbiB0aGUgZGV2aWNlIGlzIGZvcm1hdHRlZC4KKyAqLworCisvKgorICogZGV2aWNlIHBhcmFtZXRlcnMgYXJlIGluIHRoZSB2b2x1bWUgaGVhZGVyIHRvIGRldGVybWluZSBtYXBwaW5nCisgKiBmcm9tIGxvZ2ljYWwgYmxvY2sgbnVtYmVycyB0byBwaHlzaWNhbCBkZXZpY2UgYWRkcmVzc2VzCisgKgorICogTGludXggZG9lc24ndCBjYXJlIC4uLgorICovCitzdHJ1Y3QgZGV2aWNlX3BhcmFtZXRlcnMgeworCXVuc2lnbmVkIGNoYXIJZHBfc2tldzsJLyogc3BpcmFsIGFkZHJlc3Npbmcgc2tldyAqLworCXVuc2lnbmVkIGNoYXIJZHBfZ2FwMTsJLyogd29yZHMgb2YgMCBiZWZvcmUgaGVhZGVyICovCisJdW5zaWduZWQgY2hhcglkcF9nYXAyOwkvKiB3b3JkcyBvZiAwIGJldHdlZW4gaGRyIGFuZCBkYXRhICovCisJdW5zaWduZWQgY2hhcglkcF9zcGFyZXNfY3lsOwkvKiBUaGlzIGlzIGZvciBkcml2ZXMgKHN1Y2ggYXMgU0NTSQorCQl0aGF0IHN1cHBvcnQgem9uZSBvcmllbnRlZCBzcGFyaW5nLCB3aGVyZSB0aGUgem9uZSBpcyBsYXJnZXIKKwkJdGhhbiBvbmUgdHJhY2suICBJdCBnZXRzIHN1YnJhY3RlZGVkIGZyb20gdGhlIGN5bGluZGVyIHNpemUKKwkJKCBkcF90cmtzMCAqIGRwX3NlYykgd2hlbiBkb2luZyBwYXJ0aXRpb24gc2l6ZSBjYWxjdWxhdGlvbnMgKi8KKwl1bnNpZ25lZCBzaG9ydAlkcF9jeWxzOwkvKiBudW1iZXIgb2YgdXNhYmxlIGN5bGluZGVycyAoaS5lLiwKKwkJZG9lc24ndCBpbmNsdWRlIGN5bGluZGVycyByZXNlcnZlZCBieSB0aGUgZHJpdmUgZm9yIGJhZGJsb2NrcywKKwkJZXRjLikuIEZvciBkcml2ZXMgd2l0aCB2YXJpYWJsZSBnZW9tZXRyeSwgdGhpcyBudW1iZXIgbWF5IGJlCisJCWRlY3JlYXNlZCBzbyB0aGF0OgorCQlkcF9jeWxzICogKChkcF9oZWFkcyAqIGRwX3Rya3MwKSAtIGRwX3NwYXJlc19jeWwpIDw9IGFjdHVhbGNhcGFjaXR5CisJCVRoaXMgaGFwcGVucyBvbiBTQ1NJIGRyaXZlcyBzdWNoIGFzIHRoZSBXcmVuIElWIGFuZCBUb3NoaWJhIDE1NgorCQlBbHNvIHNlZSBkcF9jeWxzaGkgYmVsb3cgKi8KKwl1bnNpZ25lZCBzaG9ydAlkcF9zaGQwOwkvKiBzdGFydGluZyBoZWFkIHZvbCAwICovCisJdW5zaWduZWQgc2hvcnQJZHBfdHJrczA7CS8qIG51bWJlciBvZiB0cmFja3MgLyBjeWxpbmRlciB2b2wgMCovCisJdW5zaWduZWQgY2hhcglkcF9jdHFfZGVwdGg7CS8qIERlcHRoIG9mIENUUSBxdWV1ZSAqLworCXVuc2lnbmVkIGNoYXIJZHBfY3lsc2hpOwkvKiBoaWdoIGJ5dGUgb2YgMjQgYml0cyBvZiBjeWxpbmRlciBjb3VudCAqLworCXVuc2lnbmVkIHNob3J0CWRwX3VudXNlZDsJLyogbm90IHVzZWQgKi8KKwl1bnNpZ25lZCBzaG9ydAlkcF9zZWNzOwkvKiBudW1iZXIgb2Ygc2VjdG9ycy90cmFjayAqLworCXVuc2lnbmVkIHNob3J0CWRwX3NlY2J5dGVzOwkvKiBsZW5ndGggb2Ygc2VjdG9yIGluIGJ5dGVzICovCisJdW5zaWduZWQgc2hvcnQJZHBfaW50ZXJsZWF2ZTsJLyogc2VjdG9yIGludGVybGVhdmUgKi8KKwlpbnQJZHBfZmxhZ3M7CQkvKiBjb250cm9sbGVyIGNoYXJhY3RlcmlzdGljcyAqLworCWludAlkcF9kYXRhcmF0ZTsJCS8qIGJ5dGVzL3NlYyBmb3Iga2VybmVsIHN0YXRzICovCisJaW50CWRwX25yZXRyaWVzOwkJLyogbWF4IG51bSByZXRyaWVzIG9uIGRhdGEgZXJyb3IgKi8KKwlpbnQJZHBfbXNwdzsJCS8qIG1zIHBlciB3b3JkIHRvIHhmZXIsIGZvciBpb3N0YXQgKi8KKwl1bnNpZ25lZCBzaG9ydCBkcF94Z2FwMTsJLyogR2FwIDEgZm9yIHh5bG9naWNzIGNvbnRyb2xsZXJzICovCisJdW5zaWduZWQgc2hvcnQgZHBfeHN5bmM7ICAgIC8qIHN5bmMgZGVsYXkgZm9yIHh5bG9naWNzIGNvbnRyb2xsZXJzICovCisJdW5zaWduZWQgc2hvcnQgZHBfeHJkbHk7ICAgIC8qIHJlYWQgZGVsYXkgZm9yIHh5bG9naWNzIGNvbnRyb2xsZXJzICovCisJdW5zaWduZWQgc2hvcnQgZHBfeGdhcDI7ICAgIC8qIGdhcCAyIGZvciB4eWxvZ2ljcyBjb250cm9sbGVycyAqLworCXVuc2lnbmVkIHNob3J0IGRwX3hyZ2F0ZTsgICAvKiByZWFkIGdhdGUgZm9yIHh5bG9naWNzIGNvbnRyb2xsZXJzICovCisJdW5zaWduZWQgc2hvcnQgZHBfeHdjb250OyAgIC8qIHdyaXRlIGNvbnRpbnVhdGlvbiBmb3IgeHlsb2dpY3MgKi8KK307CisKKy8qCisgKiBEZXZpY2UgY2hhcmFjdGVyaXphdGlvbiBmbGFncworICogKGRwX2ZsYWdzKQorICovCisjZGVmaW5lCURQX1NFQ1RTTElQCTB4MDAwMDAwMDEJLyogc2VjdG9yIHNsaXAgdG8gc3BhcmUgc2VjdG9yICovCisjZGVmaW5lCURQX1NFQ1RGV0QJMHgwMDAwMDAwMgkvKiBmb3J3YXJkIHRvIHJlcGxhY2VtZW50IHNlY3RvciAqLworI2RlZmluZQlEUF9UUktGV0QJMHgwMDAwMDAwNAkvKiBmb3J3YXJkIHRvIHJlcGxhY2VtZW50IHRyYWNrICovCisjZGVmaW5lCURQX01VTFRJVk9MCTB4MDAwMDAwMDgJLyogbXVsdGlwbGUgdm9sdW1lcyBwZXIgc3BpbmRsZSAqLworI2RlZmluZQlEUF9JR05PUkVFUlJPUlMJMHgwMDAwMDAxMAkvKiB0cmFuc2ZlciBkYXRhIHJlZ2FyZGxlc3Mgb2YgZXJyb3JzICovCisjZGVmaW5lIERQX1JFU0VFSwkweDAwMDAwMDIwCS8qIHJlY2FsaWJyYXRlIGFzIGxhc3QgcmVzb3J0ICovCisjZGVmaW5lCURQX0NUUV9FTgkweDAwMDAwMDQwCS8qIGVuYWJsZSBjb21tYW5kIHRhZyBxdWV1ZWluZyAqLworCisvKgorICogQm9vdCBibG9ja3MsIGJhZCBzZWN0b3IgdGFibGVzLCBhbmQgdGhlIGVycm9yIHN1bW1hcnkgdGFibGUsIGFyZSBsb2NhdGVkCisgKiB2aWEgdGhlIHZvbHVtZV9kaXJlY3RvcnkuCisgKi8KKyNkZWZpbmUgVkROQU1FU0laRQk4CisKK3N0cnVjdCB2b2x1bWVfZGlyZWN0b3J5IHsKKwljaGFyCXZkX25hbWVbVkROQU1FU0laRV07CS8qIG5hbWUgKi8KKwlpbnQJdmRfbGJuOwkJCS8qIGxvZ2ljYWwgYmxvY2sgbnVtYmVyICovCisJaW50CXZkX25ieXRlczsJCS8qIGZpbGUgbGVuZ3RoIGluIGJ5dGVzICovCit9OworCisvKgorICogcGFydGl0aW9uIHRhYmxlIGRlc2NyaWJlcyBsb2dpY2FsIGRldmljZSBwYXJ0aXRpb25zCisgKiAoZGV2aWNlIGRyaXZlcnMgZXhhbWluZSB0aGlzIHRvIGRldGVybWluZSBtYXBwaW5nIGZyb20gbG9naWNhbCB1bml0cworICogdG8gY3lsaW5kZXIgZ3JvdXBzLCBkZXZpY2UgZm9ybWF0dGVycy92ZXJpZmllcnMgZXhhbWluZSB0aGlzIHRvIGRldGVybWluZQorICogbG9jYXRpb24gb2YgcmVwbGFjZW1lbnQgdHJhY2tzL3NlY3RvcnMsIGV0YykKKyAqCisgKiBOT1RFOiBwdF9maXJzdGxibiBTSE9VTEQgQkUgQ1lMSU5ERVIgQUxJR05FRAorICovCitzdHJ1Y3QgcGFydGl0aW9uX3RhYmxlIHsJCS8qIG9uZSBwZXIgbG9naWNhbCBwYXJ0aXRpb24gKi8KKwlpbnQJcHRfbmJsa3M7CQkvKiAjIG9mIGxvZ2ljYWwgYmxrcyBpbiBwYXJ0aXRpb24gKi8KKwlpbnQJcHRfZmlyc3RsYm47CQkvKiBmaXJzdCBsYm4gb2YgcGFydGl0aW9uICovCisJaW50CXB0X3R5cGU7CQkvKiB1c2Ugb2YgcGFydGl0aW9uICovCit9OworCisjZGVmaW5lCVBUWVBFX1ZPTEhEUgkwCQkvKiBwYXJ0aXRpb24gaXMgdm9sdW1lIGhlYWRlciAqLworI2RlZmluZQlQVFlQRV9UUktSRVBMCTEJCS8qIHBhcnRpdGlvbiBpcyB1c2VkIGZvciByZXBsIHRya3MgKi8KKyNkZWZpbmUJUFRZUEVfU0VDUkVQTAkyCQkvKiBwYXJ0aXRpb24gaXMgdXNlZCBmb3IgcmVwbCBzZWNzICovCisjZGVmaW5lCVBUWVBFX1JBVwkzCQkvKiBwYXJ0aXRpb24gaXMgdXNlZCBmb3IgZGF0YSAqLworI2RlZmluZQlQVFlQRV9CU0Q0Mgk0CQkvKiBwYXJ0aXRpb24gaXMgNC4yQlNEIGZpbGUgc3lzdGVtICovCisjZGVmaW5lCVBUWVBFX0JTRAk0CQkvKiBwYXJ0aXRpb24gaXMgNC4yQlNEIGZpbGUgc3lzdGVtICovCisjZGVmaW5lCVBUWVBFX1NZU1YJNQkJLyogcGFydGl0aW9uIGlzIFN5c1YgZmlsZSBzeXN0ZW0gKi8KKyNkZWZpbmUJUFRZUEVfVk9MVU1FCTYJCS8qIHBhcnRpdGlvbiBpcyBlbnRpcmUgdm9sdW1lICovCisjZGVmaW5lCVBUWVBFX0VGUwk3CQkvKiBwYXJ0aXRpb24gaXMgc2dpIEVGUyAqLworI2RlZmluZQlQVFlQRV9MVk9MCTgJCS8qIHBhcnRpdGlvbiBpcyBwYXJ0IG9mIGEgbG9naWNhbCB2b2wgKi8KKyNkZWZpbmUJUFRZUEVfUkxWT0wJOQkJLyogcGFydCBvZiBhICJyYXciIGxvZ2ljYWwgdm9sICovCisjZGVmaW5lCVBUWVBFX1hGUwkxMAkJLyogcGFydGl0aW9uIGlzIHNnaSBYRlMgKi8KKyNkZWZpbmUJUFRZUEVfWEZTTE9HCTExCQkvKiBwYXJ0aXRpb24gaXMgc2dpIFhGUyBsb2cgKi8KKyNkZWZpbmUJUFRZUEVfWExWCTEyCQkvKiBwYXJ0aXRpb24gaXMgcGFydCBvZiBhbiBYTFYgdm9sICovCisjZGVmaW5lCVBUWVBFX1hWTQkxMwkJLyogcGFydGl0aW9uIGlzIHNnaSBYVk0gKi8KKyNkZWZpbmUgTlBUWVBFUwkJMTYKKworI2RlZmluZQlWSE1BR0lDCQkweGJlNWE5NDEJLyogcmFuZG9tbHkgY2hvc2VuIHZhbHVlICovCisjZGVmaW5lCU5QQVJUQUIJCTE2CQkvKiAxNiB1bml4IHBhcnRpdGlvbnMgKi8KKyNkZWZpbmUJTlZESVIJCTE1CQkvKiBtYXggb2YgMTUgZGlyZWN0b3J5IGVudHJpZXMgKi8KKyNkZWZpbmUgQkZOQU1FU0laRQkxNgkJLyogbWF4IDE2IGNoYXJzIGluIGJvb3QgZmlsZSBuYW1lICovCisKKy8qIFBhcnRpdGlvbiB0eXBlcyBmb3IgQVJDUyAqLworI2RlZmluZSBOT1RfVVNFRCAgICAgICAgMCAgICAgICAvKiBOb3QgdXNlZCAJCQkJKi8KKyNkZWZpbmUgRkFUX1NIT1JUICAgICAgIDEgICAgICAgLyogRkFUIGZpbGUgc3lzdGVtLCAxMi1iaXQgRkFUIGVudHJpZXMgCSovCisjZGVmaW5lIEZBVF9MT05HICAgICAgICA0ICAgICAgIC8qIEZBVCBmaWxlIHN5c3RlbSwgMTYtYml0IEZBVCBlbnRyaWVzIAkqLworI2RlZmluZSBFWFRFTkRFRCAgICAgICAgNSAgICAgICAvKiBleHRlbmRlZCBwYXJ0aXRpb24gCQkJKi8KKyNkZWZpbmUgSFVHRSAgICAgICAgICAgIDYgICAgICAgLyogaHVnZSBwYXJ0aXRpb24tIE1TL0RPUyA0LjAgYW5kIGxhdGVyICovCisKKy8qIEFjdGl2ZSBmbGFncyBmb3IgQVJDUyAqLworI2RlZmluZSBCT09UQUJMRSAgICAgICAgMHgwMDsKKyNkZWZpbmUgTk9UX0JPT1RBQkxFICAgIDB4ODA7CisKK3N0cnVjdCB2b2x1bWVfaGVhZGVyIHsKKwlpbnQgdmhfbWFnaWM7CQkJCS8qIGlkZW50aWZpZXMgdm9sdW1lIGhlYWRlciAqLworCXNob3J0IHZoX3Jvb3RwdDsJCQkvKiByb290IHBhcnRpdGlvbiBudW1iZXIgKi8KKwlzaG9ydCB2aF9zd2FwcHQ7CQkJLyogc3dhcCBwYXJ0aXRpb24gbnVtYmVyICovCisJY2hhciB2aF9ib290ZmlsZVtCRk5BTUVTSVpFXTsJCS8qIG5hbWUgb2YgZmlsZSB0byBib290ICovCisJc3RydWN0IGRldmljZV9wYXJhbWV0ZXJzIHZoX2RwOwkJLyogZGV2aWNlIHBhcmFtZXRlcnMgKi8KKwlzdHJ1Y3Qgdm9sdW1lX2RpcmVjdG9yeSB2aF92ZFtOVkRJUl07CS8qIG90aGVyIHZvbCBoZHIgY29udGVudHMgKi8KKwlzdHJ1Y3QgcGFydGl0aW9uX3RhYmxlIHZoX3B0W05QQVJUQUJdOwkvKiBkZXZpY2UgcGFydGl0aW9uIGxheW91dCAqLworCWludCB2aF9jc3VtOwkJCQkvKiB2b2x1bWUgaGVhZGVyIGNoZWNrc3VtICovCisJaW50IHZoX2ZpbGw7CS8qIGZpbGwgb3V0IHRvIDUxMiBieXRlcyAqLworfTsKKworI2VuZGlmIC8qIF9TWVNfRFZIX0ggKi8KZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvbGFiZWxzL2VmaV9jcmMzMi5jIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9sYWJlbHMvZWZpX2NyYzMyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI3ZmIyZAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvbGFiZWxzL2VmaV9jcmMzMi5jCkBAIC0wLDAgKzEsMTI2IEBACisvKiAKKyAqIERlYyA1LCAyMDAwIE1hdHQgRG9tc2NoIDxNYXR0X0RvbXNjaEBkZWxsLmNvbT4KKyAqIC0gQ29waWVkIGNyYzMyLmMgZnJvbSB0aGUgbGludXgvZHJpdmVycy9uZXQvY2lwZSBkaXJlY3RvcnkuCisgKiAtIE5vdyBwYXNzIHNlZWQgYXMgYW4gYXJnCisgKiAtIGNoYW5nZWQgdW5zaWduZWQgbG9uZyB0byB1aW50MzJfdCwgYWRkZWQgI2luY2x1ZGU8c3RkaW50Lmg+CisgKiAtIGNoYW5nZWQgbGVuIHRvIGJlIGFuIHVuc2lnbmVkIGxvbmcKKyAqIC0gY2hhbmdlZCBjcmMzMnZhbCB0byBiZSBhIHJlZ2lzdGVyCisgKiAtIExpY2Vuc2UgcmVtYWlucyB1bmNoYW5nZWQhICBJdCdzIHN0aWxsIEdQTC1jb21wYXRhYmxlIQorICovCisKKyAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworICAvKiAgQ09QWVJJR0hUIChDKSAxOTg2IEdhcnkgUy4gQnJvd24uICBZb3UgbWF5IHVzZSB0aGlzIHByb2dyYW0sIG9yICAgICAgICovCisgIC8qICBjb2RlIG9yIHRhYmxlcyBleHRyYWN0ZWQgZnJvbSBpdCwgYXMgZGVzaXJlZCB3aXRob3V0IHJlc3RyaWN0aW9uLiAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgRmlyc3QsIHRoZSBwb2x5bm9taWFsIGl0c2VsZiBhbmQgaXRzIHRhYmxlIG9mIGZlZWRiYWNrIHRlcm1zLiAgVGhlICAgICovCisgIC8qICBwb2x5bm9taWFsIGlzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogIFheMzIrWF4yNitYXjIzK1heMjIrWF4xNitYXjEyK1heMTErWF4xMCtYXjgrWF43K1heNStYXjQrWF4yK1heMStYXjAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICBOb3RlIHRoYXQgd2UgdGFrZSBpdCAiYmFja3dhcmRzIiBhbmQgcHV0IHRoZSBoaWdoZXN0LW9yZGVyIHRlcm0gaW4gICAgKi8KKyAgLyogIHRoZSBsb3dlc3Qtb3JkZXIgYml0LiAgVGhlIFheMzIgdGVybSBpcyAiaW1wbGllZCI7IHRoZSBMU0IgaXMgdGhlICAgICAqLworICAvKiAgWF4zMSB0ZXJtLCBldGMuICBUaGUgWF4wIHRlcm0gKHVzdWFsbHkgc2hvd24gYXMgIisxIikgcmVzdWx0cyBpbiAgICAgICovCisgIC8qICB0aGUgTVNCIGJlaW5nIDEuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgTm90ZSB0aGF0IHRoZSB1c3VhbCBoYXJkd2FyZSBzaGlmdCByZWdpc3RlciBpbXBsZW1lbnRhdGlvbiwgd2hpY2ggICAgICovCisgIC8qICBpcyB3aGF0IHdlJ3JlIHVzaW5nICh3ZSdyZSBtZXJlbHkgb3B0aW1pemluZyBpdCBieSBkb2luZyBlaWdodC1iaXQgICAgKi8KKyAgLyogIGNodW5rcyBhdCBhIHRpbWUpIHNoaWZ0cyBiaXRzIGludG8gdGhlIGxvd2VzdC1vcmRlciB0ZXJtLiAgSW4gb3VyICAgICAqLworICAvKiAgaW1wbGVtZW50YXRpb24sIHRoYXQgbWVhbnMgc2hpZnRpbmcgdG93YXJkcyB0aGUgcmlnaHQuICBXaHkgZG8gd2UgICAgICovCisgIC8qICBkbyBpdCB0aGlzIHdheT8gIEJlY2F1c2UgdGhlIGNhbGN1bGF0ZWQgQ1JDIG11c3QgYmUgdHJhbnNtaXR0ZWQgaW4gICAgKi8KKyAgLyogIG9yZGVyIGZyb20gaGlnaGVzdC1vcmRlciB0ZXJtIHRvIGxvd2VzdC1vcmRlciB0ZXJtLiAgVUFSVHMgdHJhbnNtaXQgICAqLworICAvKiAgY2hhcmFjdGVycyBpbiBvcmRlciBmcm9tIExTQiB0byBNU0IuICBCeSBzdG9yaW5nIHRoZSBDUkMgdGhpcyB3YXksICAgICovCisgIC8qICB3ZSBoYW5kIGl0IHRvIHRoZSBVQVJUIGluIHRoZSBvcmRlciBsb3ctYnl0ZSB0byBoaWdoLWJ5dGU7IHRoZSBVQVJUICAgKi8KKyAgLyogIHNlbmRzIGVhY2ggbG93LWJpdCB0byBoaWdodC1iaXQ7IGFuZCB0aGUgcmVzdWx0IGlzIHRyYW5zbWlzc2lvbiBiaXQgICAqLworICAvKiAgYnkgYml0IGZyb20gaGlnaGVzdC0gdG8gbG93ZXN0LW9yZGVyIHRlcm0gd2l0aG91dCByZXF1aXJpbmcgYW55IGJpdCAgICovCisgIC8qICBzaHVmZmxpbmcgb24gb3VyIHBhcnQuICBSZWNlcHRpb24gd29ya3Mgc2ltaWxhcmx5LiAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgVGhlIGZlZWRiYWNrIHRlcm1zIHRhYmxlIGNvbnNpc3RzIG9mIDI1NiwgMzItYml0IGVudHJpZXMuICBOb3RlczogICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBUaGUgdGFibGUgY2FuIGJlIGdlbmVyYXRlZCBhdCBydW50aW1lIGlmIGRlc2lyZWQ7IGNvZGUgdG8gZG8gc28gICAqLworICAvKiAgICAgIGlzIHNob3duIGxhdGVyLiAgSXQgbWlnaHQgbm90IGJlIG9idmlvdXMsIGJ1dCB0aGUgZmVlZGJhY2sgICAgICAgICovCisgIC8qICAgICAgdGVybXMgc2ltcGx5IHJlcHJlc2VudCB0aGUgcmVzdWx0cyBvZiBlaWdodCBzaGlmdC94b3Igb3BlcmEtICAgICAgKi8KKyAgLyogICAgICB0aW9ucyBmb3IgYWxsIGNvbWJpbmF0aW9ucyBvZiBkYXRhIGFuZCBDUkMgcmVnaXN0ZXIgdmFsdWVzLiAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgVGhlIHZhbHVlcyBtdXN0IGJlIHJpZ2h0LXNoaWZ0ZWQgYnkgZWlnaHQgYml0cyBieSB0aGUgInVwZGNyYyIgICAgKi8KKyAgLyogICAgICBsb2dpYzsgdGhlIHNoaWZ0IG11c3QgYmUgdW5zaWduZWQgKGJyaW5nIGluIHplcm9lcykuICBPbiBzb21lICAgICAqLworICAvKiAgICAgIGhhcmR3YXJlIHlvdSBjb3VsZCBwcm9iYWJseSBvcHRpbWl6ZSB0aGUgc2hpZnQgaW4gYXNzZW1ibGVyIGJ5ICAgICovCisgIC8qICAgICAgdXNpbmcgYnl0ZS1zd2FwIGluc3RydWN0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBwb2x5bm9taWFsICRlZGI4ODMyMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCitzdGF0aWMgY29uc3QgdWludDMyX3QgY3JjMzJfdGFiW10gPSB7CisgICAgICAweDAwMDAwMDAwTCwgMHg3NzA3MzA5NkwsIDB4ZWUwZTYxMmNMLCAweDk5MDk1MWJhTCwgMHgwNzZkYzQxOUwsCisgICAgICAweDcwNmFmNDhmTCwgMHhlOTYzYTUzNUwsIDB4OWU2NDk1YTNMLCAweDBlZGI4ODMyTCwgMHg3OWRjYjhhNEwsCisgICAgICAweGUwZDVlOTFlTCwgMHg5N2QyZDk4OEwsIDB4MDliNjRjMmJMLCAweDdlYjE3Y2JkTCwgMHhlN2I4MmQwN0wsCisgICAgICAweDkwYmYxZDkxTCwgMHgxZGI3MTA2NEwsIDB4NmFiMDIwZjJMLCAweGYzYjk3MTQ4TCwgMHg4NGJlNDFkZUwsCisgICAgICAweDFhZGFkNDdkTCwgMHg2ZGRkZTRlYkwsIDB4ZjRkNGI1NTFMLCAweDgzZDM4NWM3TCwgMHgxMzZjOTg1NkwsCisgICAgICAweDY0NmJhOGMwTCwgMHhmZDYyZjk3YUwsIDB4OGE2NWM5ZWNMLCAweDE0MDE1YzRmTCwgMHg2MzA2NmNkOUwsCisgICAgICAweGZhMGYzZDYzTCwgMHg4ZDA4MGRmNUwsIDB4M2I2ZTIwYzhMLCAweDRjNjkxMDVlTCwgMHhkNTYwNDFlNEwsCisgICAgICAweGEyNjc3MTcyTCwgMHgzYzAzZTRkMUwsIDB4NGIwNGQ0NDdMLCAweGQyMGQ4NWZkTCwgMHhhNTBhYjU2YkwsCisgICAgICAweDM1YjVhOGZhTCwgMHg0MmIyOTg2Y0wsIDB4ZGJiYmM5ZDZMLCAweGFjYmNmOTQwTCwgMHgzMmQ4NmNlM0wsCisgICAgICAweDQ1ZGY1Yzc1TCwgMHhkY2Q2MGRjZkwsIDB4YWJkMTNkNTlMLCAweDI2ZDkzMGFjTCwgMHg1MWRlMDAzYUwsCisgICAgICAweGM4ZDc1MTgwTCwgMHhiZmQwNjExNkwsIDB4MjFiNGY0YjVMLCAweDU2YjNjNDIzTCwgMHhjZmJhOTU5OUwsCisgICAgICAweGI4YmRhNTBmTCwgMHgyODAyYjg5ZUwsIDB4NWYwNTg4MDhMLCAweGM2MGNkOWIyTCwgMHhiMTBiZTkyNEwsCisgICAgICAweDJmNmY3Yzg3TCwgMHg1ODY4NGMxMUwsIDB4YzE2MTFkYWJMLCAweGI2NjYyZDNkTCwgMHg3NmRjNDE5MEwsCisgICAgICAweDAxZGI3MTA2TCwgMHg5OGQyMjBiY0wsIDB4ZWZkNTEwMmFMLCAweDcxYjE4NTg5TCwgMHgwNmI2YjUxZkwsCisgICAgICAweDlmYmZlNGE1TCwgMHhlOGI4ZDQzM0wsIDB4NzgwN2M5YTJMLCAweDBmMDBmOTM0TCwgMHg5NjA5YTg4ZUwsCisgICAgICAweGUxMGU5ODE4TCwgMHg3ZjZhMGRiYkwsIDB4MDg2ZDNkMmRMLCAweDkxNjQ2Yzk3TCwgMHhlNjYzNWMwMUwsCisgICAgICAweDZiNmI1MWY0TCwgMHgxYzZjNjE2MkwsIDB4ODU2NTMwZDhMLCAweGYyNjIwMDRlTCwgMHg2YzA2OTVlZEwsCisgICAgICAweDFiMDFhNTdiTCwgMHg4MjA4ZjRjMUwsIDB4ZjUwZmM0NTdMLCAweDY1YjBkOWM2TCwgMHgxMmI3ZTk1MEwsCisgICAgICAweDhiYmViOGVhTCwgMHhmY2I5ODg3Y0wsIDB4NjJkZDFkZGZMLCAweDE1ZGEyZDQ5TCwgMHg4Y2QzN2NmM0wsCisgICAgICAweGZiZDQ0YzY1TCwgMHg0ZGIyNjE1OEwsIDB4M2FiNTUxY2VMLCAweGEzYmMwMDc0TCwgMHhkNGJiMzBlMkwsCisgICAgICAweDRhZGZhNTQxTCwgMHgzZGQ4OTVkN0wsIDB4YTRkMWM0NmRMLCAweGQzZDZmNGZiTCwgMHg0MzY5ZTk2YUwsCisgICAgICAweDM0NmVkOWZjTCwgMHhhZDY3ODg0NkwsIDB4ZGE2MGI4ZDBMLCAweDQ0MDQyZDczTCwgMHgzMzAzMWRlNUwsCisgICAgICAweGFhMGE0YzVmTCwgMHhkZDBkN2NjOUwsIDB4NTAwNTcxM2NMLCAweDI3MDI0MWFhTCwgMHhiZTBiMTAxMEwsCisgICAgICAweGM5MGMyMDg2TCwgMHg1NzY4YjUyNUwsIDB4MjA2Zjg1YjNMLCAweGI5NjZkNDA5TCwgMHhjZTYxZTQ5ZkwsCisgICAgICAweDVlZGVmOTBlTCwgMHgyOWQ5Yzk5OEwsIDB4YjBkMDk4MjJMLCAweGM3ZDdhOGI0TCwgMHg1OWIzM2QxN0wsCisgICAgICAweDJlYjQwZDgxTCwgMHhiN2JkNWMzYkwsIDB4YzBiYTZjYWRMLCAweGVkYjg4MzIwTCwgMHg5YWJmYjNiNkwsCisgICAgICAweDAzYjZlMjBjTCwgMHg3NGIxZDI5YUwsIDB4ZWFkNTQ3MzlMLCAweDlkZDI3N2FmTCwgMHgwNGRiMjYxNUwsCisgICAgICAweDczZGMxNjgzTCwgMHhlMzYzMGIxMkwsIDB4OTQ2NDNiODRMLCAweDBkNmQ2YTNlTCwgMHg3YTZhNWFhOEwsCisgICAgICAweGU0MGVjZjBiTCwgMHg5MzA5ZmY5ZEwsIDB4MGEwMGFlMjdMLCAweDdkMDc5ZWIxTCwgMHhmMDBmOTM0NEwsCisgICAgICAweDg3MDhhM2QyTCwgMHgxZTAxZjI2OEwsIDB4NjkwNmMyZmVMLCAweGY3NjI1NzVkTCwgMHg4MDY1NjdjYkwsCisgICAgICAweDE5NmMzNjcxTCwgMHg2ZTZiMDZlN0wsIDB4ZmVkNDFiNzZMLCAweDg5ZDMyYmUwTCwgMHgxMGRhN2E1YUwsCisgICAgICAweDY3ZGQ0YWNjTCwgMHhmOWI5ZGY2ZkwsIDB4OGViZWVmZjlMLCAweDE3YjdiZTQzTCwgMHg2MGIwOGVkNUwsCisgICAgICAweGQ2ZDZhM2U4TCwgMHhhMWQxOTM3ZUwsIDB4MzhkOGMyYzRMLCAweDRmZGZmMjUyTCwgMHhkMWJiNjdmMUwsCisgICAgICAweGE2YmM1NzY3TCwgMHgzZmI1MDZkZEwsIDB4NDhiMjM2NGJMLCAweGQ4MGQyYmRhTCwgMHhhZjBhMWI0Y0wsCisgICAgICAweDM2MDM0YWY2TCwgMHg0MTA0N2E2MEwsIDB4ZGY2MGVmYzNMLCAweGE4NjdkZjU1TCwgMHgzMTZlOGVlZkwsCisgICAgICAweDQ2NjliZTc5TCwgMHhjYjYxYjM4Y0wsIDB4YmM2NjgzMWFMLCAweDI1NmZkMmEwTCwgMHg1MjY4ZTIzNkwsCisgICAgICAweGNjMGM3Nzk1TCwgMHhiYjBiNDcwM0wsIDB4MjIwMjE2YjlMLCAweDU1MDUyNjJmTCwgMHhjNWJhM2JiZUwsCisgICAgICAweGIyYmQwYjI4TCwgMHgyYmI0NWE5MkwsIDB4NWNiMzZhMDRMLCAweGMyZDdmZmE3TCwgMHhiNWQwY2YzMUwsCisgICAgICAweDJjZDk5ZThiTCwgMHg1YmRlYWUxZEwsIDB4OWI2NGMyYjBMLCAweGVjNjNmMjI2TCwgMHg3NTZhYTM5Y0wsCisgICAgICAweDAyNmQ5MzBhTCwgMHg5YzA5MDZhOUwsIDB4ZWIwZTM2M2ZMLCAweDcyMDc2Nzg1TCwgMHgwNTAwNTcxM0wsCisgICAgICAweDk1YmY0YTgyTCwgMHhlMmI4N2ExNEwsIDB4N2JiMTJiYWVMLCAweDBjYjYxYjM4TCwgMHg5MmQyOGU5YkwsCisgICAgICAweGU1ZDViZTBkTCwgMHg3Y2RjZWZiN0wsIDB4MGJkYmRmMjFMLCAweDg2ZDNkMmQ0TCwgMHhmMWQ0ZTI0MkwsCisgICAgICAweDY4ZGRiM2Y4TCwgMHgxZmRhODM2ZUwsIDB4ODFiZTE2Y2RMLCAweGY2YjkyNjViTCwgMHg2ZmIwNzdlMUwsCisgICAgICAweDE4Yjc0Nzc3TCwgMHg4ODA4NWFlNkwsIDB4ZmYwZjZhNzBMLCAweDY2MDYzYmNhTCwgMHgxMTAxMGI1Y0wsCisgICAgICAweDhmNjU5ZWZmTCwgMHhmODYyYWU2OUwsIDB4NjE2YmZmZDNMLCAweDE2NmNjZjQ1TCwgMHhhMDBhZTI3OEwsCisgICAgICAweGQ3MGRkMmVlTCwgMHg0ZTA0ODM1NEwsIDB4MzkwM2IzYzJMLCAweGE3NjcyNjYxTCwgMHhkMDYwMTZmN0wsCisgICAgICAweDQ5Njk0NzRkTCwgMHgzZTZlNzdkYkwsIDB4YWVkMTZhNGFMLCAweGQ5ZDY1YWRjTCwgMHg0MGRmMGI2NkwsCisgICAgICAweDM3ZDgzYmYwTCwgMHhhOWJjYWU1M0wsIDB4ZGViYjllYzVMLCAweDQ3YjJjZjdmTCwgMHgzMGI1ZmZlOUwsCisgICAgICAweGJkYmRmMjFjTCwgMHhjYWJhYzI4YUwsIDB4NTNiMzkzMzBMLCAweDI0YjRhM2E2TCwgMHhiYWQwMzYwNUwsCisgICAgICAweGNkZDcwNjkzTCwgMHg1NGRlNTcyOUwsIDB4MjNkOTY3YmZMLCAweGIzNjY3YTJlTCwgMHhjNDYxNGFiOEwsCisgICAgICAweDVkNjgxYjAyTCwgMHgyYTZmMmI5NEwsIDB4YjQwYmJlMzdMLCAweGMzMGM4ZWExTCwgMHg1YTA1ZGYxYkwsCisgICAgICAweDJkMDJlZjhkTAorICAgfTsKKworLyogUmV0dXJuIGEgMzItYml0IENSQyBvZiB0aGUgY29udGVudHMgb2YgdGhlIGJ1ZmZlci4gKi8KKwordWludDMyX3QKK19fZWZpX2NyYzMyKGNvbnN0IHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyBsZW4sIHVpbnQzMl90IHNlZWQpCit7CisgIHVuc2lnbmVkIGxvbmcgaTsKKyAgcmVnaXN0ZXIgdWludDMyX3QgY3JjMzJ2YWw7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnMgPSBidWY7CisKKyAgY3JjMzJ2YWwgPSBzZWVkOworICBmb3IgKGkgPSAwOyAgaSA8IGxlbjsgIGkgKyspCisgICAgeworICAgICAgY3JjMzJ2YWwgPQorCWNyYzMyX3RhYlsoY3JjMzJ2YWwgXiBzW2ldKSAmIDB4ZmZdIF4KKwkgIChjcmMzMnZhbCA+PiA4KTsKKyAgICB9CisgIHJldHVybiBjcmMzMnZhbDsKK30KZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmMgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2xhYmVscy9mZGFzZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5OGJjZTIKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2xhYmVscy9mZGFzZC5jCkBAIC0wLDAgKzEsMTA1MSBAQAorLyoKKyAqIEZpbGUuLi4uLi4uLi4uLjogYXJjaC9zMzkwL3Rvb2xzL2ZkYXNkLmMKKyAqIEF1dGhvcihzKS4uLi4uLjogVm9sa2VyIFNhbWVza2UgPHNhbWVza2VAZGUuaWJtLmNvbT4KKyAqIEJ1Z3JlcG9ydHMudG8uLjogPExpbnV4MzkwQGRlLmlibS5jb20+CisgKiAoQykgSUJNIENvcnBvcmF0aW9uLCBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwgMjAwMQorICoKKyAqIEhpc3Rvcnkgb2YgY2hhbmdlcyAoc3RhcnRzIE1hcmNoIDIwMDEpCisgKiAyMDAxLTA0LTExIHBvc3NpYmlsaXR5IHRvIGNoYW5nZSB2b2x1bWUgc2VyaWFsIGFkZGVkCisgKiAgICAgICAgICAgIHBvc3NpYmlsaXR5IHRvIGNoYW5nZSBwYXJ0aXRpb24gdHlwZSBhZGRlZAorICogICAgICAgICAgICBzb21lIGNoYW5nZXMgdG8gRFM0SFBDSFIgYW5kIERTNERTUkVDCisgKiAyMDAxLTA1LTAzIGNoZWNrIGZvciBpbnZhbGlkIHBhcnRpdGlvbiBudW1iZXJzIGFkZGVkCisgKiAgICAgICAgICAgIHdyb25nIGZyZWVfc3BhY2UgY2FsY3VsYXRpb24gYnVnIGZpeGVkCisgKiAyMDAxLTA2LTI2ICctYScgb3B0aW9uIGFkZGVkLCBpdCBpcyBub3cgcG9zc2libGUgdG8gYWRkIGEgc2luZ2xlCisgKiAgICAgICAgICAgIHBhcnRpdGlvbiBpbiBub24taW50ZXJhY3RpdmUgbW9kZQorICogMjAwMS0wNi0yNiBsb25nIHBhcmFtZXRlciBzdXBwb3J0IGFkZGVkCisgKiAgICAgICAgICAgCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPHBhcnRlZC92dG9jLmg+CisjaW5jbHVkZSA8cGFydGVkL2ZkYXNkLmg+CisKKyNpbmNsdWRlIDxwYXJ0ZWQvcGFydGVkLmg+CisKKyNpbmNsdWRlIDxsaWJpbnRsLmg+CisjaWYgRU5BQkxFX05MUworIyAgZGVmaW5lIF8oU3RyaW5nKSBkZ2V0dGV4dCAoUEFDS0FHRSwgU3RyaW5nKQorI2Vsc2UKKyMgIGRlZmluZSBfKFN0cmluZykgKFN0cmluZykKKyNlbmRpZiAvKiBFTkFCTEVfTkxTICovCisKK3N0YXRpYyBpbnQKK2dldHBvcyAoZmRhc2RfYW5jaG9yX3QgKmFuYywgaW50IGRzbikKK3sKKwlQREVCVUcKKwlyZXR1cm4gYW5jLT5wYXJ0bm9bZHNuXTsKK30KKworc3RhdGljIGludAorZ2V0ZHNuIChmZGFzZF9hbmNob3JfdCAqYW5jLCBpbnQgcG9zKQoreworCVBERUJVRworCWludCBpOworCisJZm9yIChpPTA7IGk8VVNBQkxFX1BBUlRJVElPTlM7IGkrKykgeworCQlpZiAoYW5jLT5wYXJ0bm9baV0gPT0gcG9zKQorCQkJcmV0dXJuIGk7CisJfQorCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgdm9pZAorc2V0cG9zIChmZGFzZF9hbmNob3JfdCAqYW5jLCBpbnQgZHNuLCBpbnQgcG9zKQoreworCVBERUJVRworCWFuYy0+cGFydG5vW2Rzbl0gPSBwb3M7Cit9CisKK3ZvaWQKK2ZkYXNkX2NsZWFudXAgKGZkYXNkX2FuY2hvcl90ICphbmNob3IpIAoreworCVBERUJVRworCWludCBpOworCXBhcnRpdGlvbl9pbmZvX3QgKnAsICpxOworCisJaWYgKGFuY2hvciA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlpZiAoYW5jaG9yLT5mNCAhPSBOVUxMKQorCQlmcmVlKGFuY2hvci0+ZjQpOworCisJaWYgKGFuY2hvci0+ZjUgIT0gTlVMTCkKKwkJZnJlZShhbmNob3ItPmY1KTsKKworCWlmIChhbmNob3ItPmY3ICE9IE5VTEwpCisJCWZyZWUoYW5jaG9yLT5mNyk7CisKKwlpZiAoYW5jaG9yLT52bGFiZWwgIT0gTlVMTCkKKwkJZnJlZShhbmNob3ItPnZsYWJlbCk7CisKKwlwID0gYW5jaG9yLT5maXJzdDsKKwlpZiAocCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlmb3IgKGk9MTsgaSA8PSBVU0FCTEVfUEFSVElUSU9OUzsgaSsrKSB7CisJCWlmIChwID09IE5VTEwpCisJCQlyZXR1cm47CisJCXEgPSBwLT5uZXh0OworCQlmcmVlKHApOworCQlwID0gcTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIAorZmRhc2RfZXJyb3IgKGZkYXNkX2FuY2hvcl90ICphbmMsIGVudW0gZmRhc2RfZmFpbHVyZSB3aHksIGNoYXIgKiBzdHIpIAoreworCVBERUJVRworCWNoYXIgZXJyb3JbMipMSU5FX0xFTkdUSF0sICptZXNzYWdlID0gZXJyb3I7CisKKwlzd2l0Y2ggKHdoeSkgeworCQljYXNlIHVuYWJsZV90b19vcGVuX2Rpc2s6CisJCQlzcHJpbnRmKGVycm9yLCBfKCIlcyBvcGVuIGVycm9yXG4lc1xuIiksIAorCQkJRkRBU0RfRVJST1IsIHN0cik7CisJCQlicmVhazsKKwkJY2FzZSB1bmFibGVfdG9fc2Vla19kaXNrOgorCQkJc3ByaW50ZihlcnJvciwgXygiJXMgc2VlayBlcnJvclxuJXNcbiIpLCBGREFTRF9FUlJPUiwgc3RyKTsKKwkJCWJyZWFrOworCQljYXNlIHVuYWJsZV90b19yZWFkX2Rpc2s6CisJCQlzcHJpbnRmKGVycm9yLCBfKCIlcyByZWFkIGVycm9yXG4lc1xuIiksIEZEQVNEX0VSUk9SLCBzdHIpOworCQkJYnJlYWs7CisJCWNhc2UgcmVhZF9vbmx5X2Rpc2s6CisJCQlzcHJpbnRmKGVycm9yLCBfKCIlcyB3cml0ZSBlcnJvclxuJXNcbiIpLCBGREFTRF9FUlJPUiwgc3RyKTsKKwkJCWJyZWFrOworCQljYXNlIHVuYWJsZV90b19pb2N0bDoKKwkJCXNwcmludGYoZXJyb3IsIF8oIiVzIElPQ1RMIGVycm9yXG4lc1xuIiksIEZEQVNEX0VSUk9SLCBzdHIpOworCQkJYnJlYWs7CisJCWNhc2UgYXBpX3ZlcnNpb25fbWlzbWF0Y2g6CisJCQlzcHJpbnRmKGVycm9yLCBfKCIlcyBBUEkgdmVyc2lvbiBtaXNtYXRjaFxuJXNcbiIpLCBGREFTRF9FUlJPUixzdHIpOworCQkJYnJlYWs7ICAgICAKKwkJY2FzZSB3cm9uZ19kaXNrX3R5cGU6CisJCQlzcHJpbnRmKGVycm9yLCBfKCIlcyBVbnN1cHBvcnRlZCBkaXNrIHR5cGVcbiVzXG4iKSwKKwkJCSAgICAgICAgRkRBU0RfRVJST1IsIHN0cik7CisJCQlicmVhazsgCisJCWNhc2Ugd3JvbmdfZGlza19mb3JtYXQ6CisJCQlzcHJpbnRmKGVycm9yLCBfKCIlcyBVbnN1cHBvcnRlZCBkaXNrIGZvcm1hdFxuJXNcbiIpLAorCQkJICAgICAgICBGREFTRF9FUlJPUiwgc3RyKTsKKwkJCWJyZWFrOyAgIAorCQljYXNlIGRpc2tfaW5fdXNlOgorCQkJc3ByaW50ZihlcnJvciwgXygiJXMgRGlzayBpbiB1c2VcbiVzXG4iKSwgRkRBU0RfRVJST1IsIHN0cik7CisJCQlicmVhazsgICAgICAKKwkJY2FzZSBjb25maWdfc3ludGF4X2Vycm9yOgorCQkJc3ByaW50ZihlcnJvciwgXygiJXMgQ29uZmlnIGZpbGUgc3ludGF4IGVycm9yXG4lc1xuIiksCisJCQkgICAgICAgIEZEQVNEX0VSUk9SLCBzdHIpOworCQkJYnJlYWs7ICAgICAgIAorCQljYXNlIHZsYWJlbF9jb3JydXB0ZWQ6CisJCQlzcHJpbnRmKGVycm9yLCBfKCIlcyBWb2x1bWUgbGFiZWwgaXMgY29ycnVwdGVkLlxuJXNcbiIpLCAKKwkJCSAgICAgICAgRkRBU0RfRVJST1IsIHN0cik7CisJCQlicmVhazsKKwkJY2FzZSBkc25hbWVfY29ycnVwdGVkOgorCQkJc3ByaW50ZihlcnJvciwgXygiJXMgYSBkYXRhIHNldCBuYW1lIGlzIGNvcnJ1cHRlZC5cbiVzXG4iKSwgCisJCQkgICAgICAgIEZEQVNEX0VSUk9SLCBzdHIpOworCQkJYnJlYWs7CisJCWNhc2UgbWFsbG9jX2ZhaWxlZDoKKwkJCXNwcmludGYoZXJyb3IsIF8oIiVzIHNwYWNlIGFsbG9jYXRpb25cbiVzXG4iKSwKKwkJCSAgICAgICAgRkRBU0RfRVJST1IsIHN0cik7CisJCQlicmVhazsKKwkJY2FzZSBkZXZpY2VfdmVyaWZpY2F0aW9uX2ZhaWxlZDoKKwkJCXNwcmludGYoZXJyb3IsIF8oIiVzIGRldmljZSB2ZXJpZmljYXRpb24gZmFpbGVkXG4iIFwKKwkJCSAgICAgICAgIlRoZSBzcGVjaWZpZWQgZGV2aWNlIGlzIG5vdCBhIHZhbGlkIERBU0QgZGV2aWNlXG4iKSwKKwkJCSAgICAgICAgRkRBU0RfRVJST1IpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6IAorCQkJc3ByaW50ZihlcnJvciwgXygiJXMgRmF0YWwgZXJyb3JcbiVzXG4iKSwgRkRBU0RfRVJST1IsIHN0cik7CisJfQorCisJcGVkX2V4Y2VwdGlvbl90aHJvdyhQRURfRVhDRVBUSU9OX0VSUk9SLCBQRURfRVhDRVBUSU9OX0NBTkNFTCwgbWVzc2FnZSk7Cit9CisKKy8qCisgKiBjb252ZXJ0cyBjeWwtY3lsLWhlYWQtaGVhZC1ibGsgdG8gYmxrCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIAorY2NoaGIyYmxrIChjY2hoYl90ICpwLCBzdHJ1Y3QgZmRhc2RfaGRfZ2VvbWV0cnkgKmdlbykgCit7CisJUERFQlVHCisJcmV0dXJuICh1bnNpZ25lZCBsb25nKSAocC0+Y2MgKiBnZW8tPmhlYWRzICogZ2VvLT5zZWN0b3JzCisJICAgICAgICAgICAgICAgICAgICAgICAgKyBwLT5oaCAqIGdlby0+c2VjdG9ycyArIHAtPmIpOworfQorCisvKgorICogaW5pdGlhbGl6ZXMgdGhlIGFuY2hvciBzdHJ1Y3R1cmUgYW5kIGFsbG9jYXRlcyBzb21lCisgKiBtZW1vcnkgZm9yIHRoZSBsYWJlbHMKKyAqLwordm9pZAorZmRhc2RfaW5pdGlhbGl6ZV9hbmNob3IgKGZkYXNkX2FuY2hvcl90ICogYW5jKSAKK3sKKwlQREVCVUcKKwlpbnQgaTsKKwl2b2x1bWVfbGFiZWxfdCAqdjsKKwlwYXJ0aXRpb25faW5mb190ICpwID0gTlVMTDsKKwlwYXJ0aXRpb25faW5mb190ICpxID0gTlVMTDsKKworCWFuYy0+ZGV2bm8gICAgICAgICAgICAgPSAwOworCWFuYy0+ZGV2X3R5cGUgICAgICAgICAgPSAwOworCWFuYy0+dXNlZF9wYXJ0aXRpb25zICAgPSAwOworCisJYW5jLT5zaWxlbnQgICAgICAgICAgICA9IDA7CisJYW5jLT52ZXJib3NlICAgICAgICAgICA9IDA7CisJYW5jLT5iaWdfZGlzayAgICAgICAgICA9IDA7CisJYW5jLT52b2xpZF9zcGVjaWZpZWQgICA9IDA7CisJYW5jLT5jb25maWdfc3BlY2lmaWVkICA9IDA7CisJYW5jLT5hdXRvX3BhcnRpdGlvbiAgICA9IDA7CisJYW5jLT5kZXZuYW1lX3NwZWNpZmllZCA9IDA7CisJYW5jLT5wcmludF90YWJsZSAgICAgICA9IDA7CisKKwlhbmMtPm9wdGlvbl9yZXVzZSAgICAgID0gMDsKKwlhbmMtPm9wdGlvbl9yZWNyZWF0ZSAgID0gMDsKKworCWFuYy0+dmxhYmVsX2NoYW5nZWQgICAgPSAwOworCWFuYy0+dnRvY19jaGFuZ2VkICAgICAgPSAwOworCWFuYy0+Ymxrc2l6ZSAgICAgICAgICAgPSAwOworCWFuYy0+ZnNwYWNlX3RyayAgICAgICAgPSAwOworCWFuYy0+bGFiZWxfcG9zICAgICAgICAgPSAwOworCisJZm9yIChpPTA7IGk8VVNBQkxFX1BBUlRJVElPTlM7IGkrKykKKwkJc2V0cG9zKGFuYywgaSwgLTEpOworCisJYnplcm8oYW5jLT5jb25mZGF0YSwgc2l6ZW9mKGNvbmZpZ19kYXRhX3QpKTsKKworCWFuYy0+ZjQgPSBtYWxsb2Moc2l6ZW9mKGZvcm1hdDRfbGFiZWxfdCkpOworCWlmIChhbmMtPmY0ID09IE5VTEwpIAorCQlmZGFzZF9lcnJvcihhbmMsIG1hbGxvY19mYWlsZWQsIAorCQkJICAgICJGTVQ0IERTQ0IgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLiIpOworCisJYW5jLT5mNSA9IG1hbGxvYyhzaXplb2YoZm9ybWF0NV9sYWJlbF90KSk7CisJaWYgKGFuYy0+ZjUgPT0gTlVMTCkgCisJCWZkYXNkX2Vycm9yKGFuYywgbWFsbG9jX2ZhaWxlZCwKKwkJCSAgICAiRk1UNSBEU0NCIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC4iKTsKKworCWFuYy0+ZjcgPSBtYWxsb2Moc2l6ZW9mKGZvcm1hdDdfbGFiZWxfdCkpOworCWlmIChhbmMtPmY3ID09IE5VTEwpIAorCQlmZGFzZF9lcnJvcihhbmMsIG1hbGxvY19mYWlsZWQsCisJCQkgICAgIkZNVDcgRFNDQiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuIik7CisKKwliemVybyhhbmMtPmY0LCBzaXplb2YoZm9ybWF0NF9sYWJlbF90KSk7CisJYnplcm8oYW5jLT5mNSwgc2l6ZW9mKGZvcm1hdDVfbGFiZWxfdCkpOworCWJ6ZXJvKGFuYy0+ZjcsIHNpemVvZihmb3JtYXQ3X2xhYmVsX3QpKTsKKworCXYgPSBtYWxsb2Moc2l6ZW9mKHZvbHVtZV9sYWJlbF90KSk7CisJaWYgKHYgPT0gTlVMTCkgCisJCWZkYXNkX2Vycm9yKGFuYywgbWFsbG9jX2ZhaWxlZCwKKwkJCSAgICAiVm9sdW1lIGxhYmVsIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC4iKTsKKwliemVybyh2LCBzaXplb2Yodm9sdW1lX2xhYmVsX3QpKTsKKwlhbmMtPnZsYWJlbCA9IHY7CisKKwlmb3IgKGk9MTsgaTw9VVNBQkxFX1BBUlRJVElPTlM7IGkrKykgeworICAgICAgICBwID0gbWFsbG9jKHNpemVvZihwYXJ0aXRpb25faW5mb190KSk7CisJCWlmIChwID09IE5VTEwpIAorCQkJZmRhc2RfZXJyb3IoYW5jLCBtYWxsb2NfZmFpbGVkLAorCQkJCSAgICJQYXJ0aXRpb24gaW5mbyBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuIik7CisJCXAtPnVzZWQgICAgICAgPSAweDAwOworCQlwLT5sZW5fdHJrICAgID0gMDsKKwkJcC0+c3RhcnRfdHJrICA9IDA7CisJCXAtPmZzcGFjZV90cmsgPSAwOworCQlwLT50eXBlICAgICAgID0gMDsKKworCQkvKiBhZGQgcCB0byBkb3VibGUgcG9pbnRlcmVkIGxpc3QgKi8KKwkJaWYgKGkgPT0gMSkgeworCSAgICAgICAgYW5jLT5maXJzdCA9IHA7CisJCQlwLT5wcmV2ID0gTlVMTDsKKwkJfSBlbHNlIGlmIChpID09IFVTQUJMRV9QQVJUSVRJT05TKSB7CisJICAgICAgICBhbmMtPmxhc3QgPSBwOworCSAgICAgICAgcC0+bmV4dCA9IE5VTEw7CisJCQlwLT5wcmV2ID0gcTsKKwkJCXEtPm5leHQgPSBwOworCQl9IGVsc2UgeworCSAgICAgICAgcC0+cHJldiA9IHE7CisJICAgICAgICBxLT5uZXh0ID0gcDsKKwkJfQorCisJCXAtPmYxID0gbWFsbG9jKHNpemVvZihmb3JtYXQxX2xhYmVsX3QpKTsKKwkJaWYgKHAtPmYxID09IE5VTEwpIAorCQkJZmRhc2RfZXJyb3IoYW5jLCBtYWxsb2NfZmFpbGVkLAorCQkJICAgICJGTVQxIERTQ0IgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLiIpOworCQliemVybyhwLT5mMSwgc2l6ZW9mKGZvcm1hdDFfbGFiZWxfdCkpOworCQkKKwkJcSA9IHA7CisJfQorfQorCisvKgorICogd3JpdGVzIGFsbCBjaGFuZ2VzIHRvIGRhc2QKKyAqLworc3RhdGljIHZvaWQKK2ZkYXNkX3dyaXRlX3Z0b2NfbGFiZWxzIChmZGFzZF9hbmNob3JfdCAqIGFuYywgaW50IGZkKQoreyAKKwlQREVCVUcKKwlwYXJ0aXRpb25faW5mb190ICpwOworCXVuc2lnbmVkIGxvbmcgYjsKKwljaGFyIGRzbm9bNl0sIHMxWzddLCBzMls0NV0sICpjMSwgKmMyLCAqY2g7CisJaW50IGkgPSAwLCBrID0gMDsKKyAgICAKKwliID0gKGNjaGhiMmJsayAoJmFuYy0+dmxhYmVsLT52dG9jLCAmYW5jLT5nZW8pIC0gMSkgKiBhbmMtPmJsa3NpemU7CisJaWYgKGIgPD0gMCkKKwkJZmRhc2RfZXJyb3IgKGFuYywgdmxhYmVsX2NvcnJ1cHRlZCwgIiIpOworCisJLyogd3JpdGUgRk1UNCBEU0NCICovCisJdnRvY193cml0ZV9sYWJlbCAoZmQsIGIsIE5VTEwsIGFuYy0+ZjQsIE5VTEwsIE5VTEwpOworCisJLyogd3JpdGUgRk1UNSBEU0NCICovCisJYiArPSBhbmMtPmJsa3NpemU7CisJdnRvY193cml0ZV9sYWJlbCAoZmQsIGIsIE5VTEwsIE5VTEwsIGFuYy0+ZjUsIE5VTEwpOworCisJLyogd3JpdGUgRk1UNyBEU0NCICovCisJaWYgKGFuYy0+YmlnX2Rpc2spIHsKKwkJYiArPSBhbmMtPmJsa3NpemU7CisJCXZ0b2Nfd3JpdGVfbGFiZWwgKGZkLCBiLCBOVUxMLCBOVUxMLCBOVUxMLCBhbmMtPmY3KTsKKwl9CisKKwkvKiBsb29wIG92ZXIgYWxsIEZNVDEgRFNDQnMgKi8KKwlwID0gYW5jLT5maXJzdDsKKwlmb3IgKGkgPSAwOyBpIDwgVVNBQkxFX1BBUlRJVElPTlM7IGkrKykgeworCQliICs9IGFuYy0+Ymxrc2l6ZTsKKworCQlpZiAocC0+dXNlZCAhPSAweDAxKSB7CisJCQl2dG9jX3dyaXRlX2xhYmVsIChmZCwgYiwgcC0+ZjEsIE5VTEwsIE5VTEwsIE5VTEwpOworCQkJY29udGludWU7CisJCX0KKyAgCisJCXN0cm5jcHkgKHAtPmYxLT5EUzFEU1NOLCBhbmMtPnZsYWJlbC0+dm9saWQsIDYpOworCisJCWNoID0gcC0+ZjEtPkRTMURTTkFNOworCQl2dG9jX2ViY2RpY19kZWMgKGNoLCBjaCwgNDQpOworCQljMSA9IGNoICsgNzsKKyAgCisJCWlmIChnZXRkc24gKGFuYywgaSkgPiAtMSkgeworCQkJLyogcmUtdXNlIHRoZSBleGlzdGluZyBkYXRhIHNldCBuYW1lICovCisJCQljMiA9IHN0cmNociAoYzEsICcuJyk7CisJCQlpZiAoYzIgIT0gTlVMTCkKKwkJCQlzdHJuY3B5IChzMiwgYzIsIDMxKTsKKwkJCWVsc2UKKwkJCQlmZGFzZF9lcnJvciAoYW5jLCBkc25hbWVfY29ycnVwdGVkLCAiIik7CisKKwkJCXN0cm5jcHkgKHMxLCBhbmMtPnZsYWJlbC0+dm9saWQsIDYpOworCQkJdnRvY19lYmNkaWNfZGVjIChzMSwgczEsIDYpOworCQkJczFbNl0gPSAnICc7CisJCQlzdHJuY3B5IChjMSwgczEsIDcpOworCQkJYzEgPSBzdHJjaHIgKGNoLCAnICcpOworCQkJc3RybmNweSAoYzEsIHMyLCAzMSk7CisJCX0gZWxzZSB7CisJCQkvKiBjcmVhdGUgYSBuZXcgZGF0YSBzZXQgbmFtZSAqLworCQkJd2hpbGUgKGdldHBvcyAoYW5jLCBrKSA+IC0xKQorCQkJCWsrKzsKKworCQkJc2V0cG9zIChhbmMsIGssIGkpOworCisJCQlzdHJuY3B5IChzMiwgY2gsIDQ0KTsKKwkJCXMyWzQ0XSA9IDA7CisJCQl2dG9jX2ViY2RpY19kZWMgKHMyLCBzMiwgNDQpOworCisJCQlzdHJuY3B5IChjaCwgIkxJTlVYLlYgICAgICAgICAgICAgICAiICIgICAgICAgICAgICAgICAgICAgICAgIiwgNDQpOworCisJCQlzdHJuY3B5IChzMSwgYW5jLT52bGFiZWwtPnZvbGlkLCA2KTsKKwkJCXZ0b2NfZWJjZGljX2RlYyAoczEsIHMxLCA2KTsKKwkJCXN0cm5jcHkgKGMxLCBzMSwgNik7CisKKwkJCWMxID0gc3RyY2hyIChjaCwgJyAnKTsKKwkJCXN0cm5jcHkgKGMxLCAiLlBBUlQiLCA1KTsKKwkJCWMxICs9IDU7CisKKwkJCXNwcmludGYgKGRzbm8sICIlMDRkLiIsIGsgKyAxKTsKKwkJCXN0cm5jcHkgKGMxLCBkc25vLCA1KTsKKworCQkJYzEgKz0gNTsKKwkJCXN3aXRjaChwLT50eXBlKSB7CisJCQkJY2FzZSBQQVJUSVRJT05fTElOVVhfTFZNOgorCQkJCQlzdHJuY3B5KGMxLCBQQVJUX1RZUEVfTFZNLCA2KTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBQQVJUSVRJT05fTElOVVhfUkFJRDoKKwkJCQkJc3RybmNweShjMSwgUEFSVF9UWVBFX1JBSUQsIDYpOworCQkJCQlicmVhazsKKwkJCQljYXNlIFBBUlRJVElPTl9MSU5VWDoKKwkJCQkJc3RybmNweShjMSwgUEFSVF9UWVBFX05BVElWRSwgNik7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgUEFSVElUSU9OX0xJTlVYX1NXQVA6CisJCQkJCXN0cm5jcHkoYzEsIFBBUlRfVFlQRV9TV0FQLCA2KTsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJc3RybmNweShjMSwgUEFSVF9UWVBFX05BVElWRSwgNik7CisJCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJdnRvY19lYmNkaWNfZW5jIChjaCwgY2gsIDQ0KTsKKworCQl2dG9jX3dyaXRlX2xhYmVsIChmZCwgYiwgcC0+ZjEsIE5VTEwsIE5VTEwsIE5VTEwpOworCQlwID0gcC0+bmV4dDsKKwl9Cit9CisKKy8qCisgKiB3cml0ZXMgYWxsIGNoYW5nZXMgdG8gZGFzZAorICovCitpbnQKK2ZkYXNkX3dyaXRlX2xhYmVscyAoZmRhc2RfYW5jaG9yX3QgKiBhbmMsIGludCBmZCkKK3sKKwlQREVCVUcKKwlpZiAoYW5jLT52bGFiZWxfY2hhbmdlZCkKKwkJdnRvY193cml0ZV92b2x1bWVfbGFiZWwgKGZkLCBhbmMtPmxhYmVsX3BvcywgYW5jLT52bGFiZWwpOworCisJaWYgKGFuYy0+dnRvY19jaGFuZ2VkKQorCQlmZGFzZF93cml0ZV92dG9jX2xhYmVscyAoYW5jLCBmZCk7CisKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIHdyaXRlcyBhbGwgY2hhbmdlcyB0byBkYXNkCisgKi8KK2ludAorZmRhc2RfcHJlcGFyZV9sYWJlbHMgKGZkYXNkX2FuY2hvcl90ICphbmMsIGludCBmZCkgCit7CisJUERFQlVHCisJcGFydGl0aW9uX2luZm9fdCAqcCA9IGFuYy0+Zmlyc3Q7CisJY2hhciBkc25vWzZdLCBzMVs3XSwgczJbNDVdLCAqYzEsICpjMiwgKmNoOworCWludCBpID0gMCwgayA9IDA7CisKKwkvKiBsb29wIG92ZXIgYWxsIEZNVDEgRFNDQnMgKi8KKwlwID0gYW5jLT5maXJzdDsKKwlmb3IgKGkgPSAwOyBpIDwgVVNBQkxFX1BBUlRJVElPTlM7IGkrKykgeworCQlzdHJuY3B5IChwLT5mMS0+RFMxRFNTTiwgYW5jLT52bGFiZWwtPnZvbGlkLCA2KTsKKworCQljaCA9IHAtPmYxLT5EUzFEU05BTTsKKwkJdnRvY19lYmNkaWNfZGVjIChjaCwgY2gsIDQ0KTsKKwkJYzEgPSBjaCArIDc7CisgIAorCQlpZiAoZ2V0ZHNuIChhbmMsIGkpID4gLTEpIHsKKwkJCS8qIHJlLXVzZSB0aGUgZXhpc3RpbmcgZGF0YSBzZXQgbmFtZSAqLworCQkJYzIgPSBzdHJjaHIgKGMxLCAnLicpOworCQkJaWYgKGMyICE9IE5VTEwpCisJCQkJc3RybmNweSAoczIsIGMyLCAzMSk7CisJCQllbHNlCisJCQkJZmRhc2RfZXJyb3IgKGFuYywgZHNuYW1lX2NvcnJ1cHRlZCwgIiIpOworCisJCQlzdHJuY3B5IChzMSwgYW5jLT52bGFiZWwtPnZvbGlkLCA2KTsKKwkJCXZ0b2NfZWJjZGljX2RlYyAoczEsIHMxLCA2KTsKKwkJCXMxWzZdID0gJyAnOworCQkJc3RybmNweSAoYzEsIHMxLCA3KTsKKwkJCWMxID0gc3RyY2hyIChjaCwgJyAnKTsKKwkJCXN0cm5jcHkgKGMxLCBzMiwgMzEpOworCQl9IGVsc2UgeworCQkJLyogY3JlYXRlIGEgbmV3IGRhdGEgc2V0IG5hbWUgKi8KKwkJCXdoaWxlIChnZXRwb3MgKGFuYywgaykgPiAtMSkKKwkJCQlrKys7CisKKwkJCXNldHBvcyAoYW5jLCBrLCBpKTsKKworCQkJc3RybmNweSAoczIsIGNoLCA0NCk7CisJCQlzMls0NF0gPSAwOworCQkJdnRvY19lYmNkaWNfZGVjIChzMiwgczIsIDQ0KTsKKworCQkJc3RybmNweSAoY2gsICJMSU5VWC5WICAgICAgICAgICAgICAgIiAiICAgICAgICAgICAgICAgICAgICAgICIsIDQ0KTsKKworCQkJc3RybmNweSAoczEsIGFuYy0+dmxhYmVsLT52b2xpZCwgNik7CisJCQl2dG9jX2ViY2RpY19kZWMgKHMxLCBzMSwgNik7CisJCQlzdHJuY3B5IChjMSwgczEsIDYpOworCisJCQljMSA9IHN0cmNociAoY2gsICcgJyk7CisJCQlzdHJuY3B5IChjMSwgIi5QQVJUIiwgNSk7CisJCQljMSArPSA1OworCisJCQlzcHJpbnRmIChkc25vLCAiJTA0ZC4iLCBrICsgMSk7CisJCQlzdHJuY3B5IChjMSwgZHNubywgNSk7CisKKwkJCWMxICs9IDU7CisJCQlzd2l0Y2gocC0+dHlwZSkgeworCQkJCWNhc2UgUEFSVElUSU9OX0xJTlVYX0xWTToKKwkJCQkJc3RybmNweShjMSwgUEFSVF9UWVBFX0xWTSwgNik7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgUEFSVElUSU9OX0xJTlVYX1JBSUQ6CisJCQkJCXN0cm5jcHkoYzEsIFBBUlRfVFlQRV9SQUlELCA2KTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBQQVJUSVRJT05fTElOVVg6CisJCQkJCXN0cm5jcHkoYzEsIFBBUlRfVFlQRV9OQVRJVkUsIDYpOworCQkJCQlicmVhazsKKwkJCQljYXNlIFBBUlRJVElPTl9MSU5VWF9TV0FQOgorCQkJCQlzdHJuY3B5KGMxLCBQQVJUX1RZUEVfU1dBUCwgNik7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCXN0cm5jcHkoYzEsIFBBUlRfVFlQRV9OQVRJVkUsIDYpOworCQkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCXZ0b2NfZWJjZGljX2VuYyAoY2gsIGNoLCA0NCk7CisJCXAgPSBwLT5uZXh0OworCX0KKworCXJldHVybiAxOworfQorCit2b2lkCitmZGFzZF9yZWNyZWF0ZV92dG9jIChmZGFzZF9hbmNob3JfdCAqYW5jKQoreworCVBERUJVRworCXBhcnRpdGlvbl9pbmZvX3QgKnAgPSBhbmMtPmZpcnN0OworCWludCBpOworCisJdnRvY19pbml0X2Zvcm1hdDRfbGFiZWwoYW5jLT5mNCwKKwkJCQkJCQlVU0FCTEVfUEFSVElUSU9OUywKKwkJCQkJCQlhbmMtPmdlby5jeWxpbmRlcnMsCisJCQkJCQkJYW5jLT5nZW8uaGVhZHMsCisJCQkJCQkJYW5jLT5nZW8uc2VjdG9ycywKKwkJCQkJCQlhbmMtPmJsa3NpemUsCisJCQkJCQkJYW5jLT5kZXZfdHlwZSk7CisKKwl2dG9jX2luaXRfZm9ybWF0NV9sYWJlbChhbmMtPmY1KTsKKwl2dG9jX2luaXRfZm9ybWF0N19sYWJlbChhbmMtPmY3KTsKKwl2dG9jX3NldF9mcmVlc3BhY2UoYW5jLT5mNCwgYW5jLT5mNSwgYW5jLT5mNywgCisJCQkJCSAgICcrJywgYW5jLT52ZXJib3NlLAorCQkJCQkgICBGSVJTVF9VU0FCTEVfVFJLLAorCQkJCQkgICBhbmMtPmdlby5jeWxpbmRlcnMgKiBhbmMtPmdlby5oZWFkcyAtIDEsCisJCQkJCSAgIGFuYy0+Z2VvLmN5bGluZGVycywgYW5jLT5nZW8uaGVhZHMpOworCisJZm9yIChpID0gMDsgaSA8IFVTQUJMRV9QQVJUSVRJT05TOyBpKyspIHsKKwkJYnplcm8ocC0+ZjEsIHNpemVvZihmb3JtYXQxX2xhYmVsX3QpKTsKKwkJcC0+dXNlZCAgICAgICA9IDB4MDA7CisJCXAtPnN0YXJ0X3RyayAgPSAwOworCQlwLT5lbmRfdHJrICAgID0gMDsKKwkJcC0+bGVuX3RyayAgICA9IDA7CisJCXAtPmZzcGFjZV90cmsgPSAwOworCQlwLT50eXBlICAgICAgID0gMDsKKwkJcCA9IHAtPm5leHQ7CisJfQorCisJYW5jLT51c2VkX3BhcnRpdGlvbnMgPSAwOworCWFuYy0+ZnNwYWNlX3RyayA9IGFuYy0+Z2VvLmN5bGluZGVycyAqIGFuYy0+Z2VvLmhlYWRzIC0gRklSU1RfVVNBQkxFX1RSSzsKKworCWZvciAoaT0wOyBpPFVTQUJMRV9QQVJUSVRJT05TOyBpKyspCisJCXNldHBvcyhhbmMsIGksIC0xKTsKKworCWFuYy0+dnRvY19jaGFuZ2VkKys7Cit9CisKKy8qCisgKiBzZXRzIHNvbWUgaW1wb3J0YW50IHBhcnRpdGlvbiBkYXRhCisgKiAobGlrZSB1c2VkLCBzdGFydF90cmssIGVuZF90cmssIGxlbl90cmspCisgKiBieSBjYWxjdWxhdGluZyB0aGVzZSB2YWx1ZXMgd2l0aCB0aGUKKyAqIGluZm9ybWF0aW9uIHByb3ZpZGVkIGluIHRoZSBsYWJlbHMKKyAqLworc3RhdGljIHZvaWQKK2ZkYXNkX3VwZGF0ZV9wYXJ0aXRpb25faW5mbyAoZmRhc2RfYW5jaG9yX3QgKmFuYykgCit7CisJUERFQlVHCisJcGFydGl0aW9uX2luZm9fdCAqcSA9IE5VTEwsICpwID0gYW5jLT5maXJzdDsKKwl1bnNpZ25lZCBpbnQgaCA9IGFuYy0+Z2VvLmhlYWRzOworCXVuc2lnbmVkIGxvbmcgbWF4ID0gYW5jLT5nZW8uY3lsaW5kZXJzICogaCAtIDE7CisJaW50IGk7CisJY2hhciAqY2g7CisKKwlhbmMtPnVzZWRfcGFydGl0aW9ucyA9IGFuYy0+Z2VvLnNlY3RvcnMgLSAyIC0gYW5jLT5mNC0+RFM0RFNSRUM7CisKKwlmb3IgKGkgPSAxOyBpIDw9IFVTQUJMRV9QQVJUSVRJT05TOyBpKyspIHsKKwkJaWYgKHAtPmYxLT5EUzFGTVRJRCAhPSAweGYxKSB7CisJCQlpZiAoaSA9PSAxKQorCQkJCS8qIHRoZXJlIGlzIG5vIHBhcnRpdGlvbiBhdCBhbGwgKi8KKwkJCQlhbmMtPmZzcGFjZV90cmsgPSBtYXggLSBGSVJTVF9VU0FCTEVfVFJLICsgMTsKKwkJCWVsc2UKKwkJCQkvKiBwcmV2aW91cyBwYXJ0aXRpb24gd2FzIHRoZSBsYXN0IG9uZSAqLworCQkJCXEtPmZzcGFjZV90cmsgPSBtYXggLSBxLT5lbmRfdHJrOworCQkJYnJlYWs7CisJCX0KKworCQkvKiB0aGlzIGlzIGEgdmFsaWQgZm9ybWF0IDEgbGFiZWwgKi8KKwkJcC0+dXNlZCA9IDB4MDE7CisJCXAtPnN0YXJ0X3RyayA9IHAtPmYxLT5EUzFFWFQxLmxsaW1pdC5jYyAqIGggKyBwLT5mMS0+RFMxRVhUMS5sbGltaXQuaGg7CisJCXAtPmVuZF90cmsgICA9IHAtPmYxLT5EUzFFWFQxLnVsaW1pdC5jYyAqIGggKyBwLT5mMS0+RFMxRVhUMS51bGltaXQuaGg7CisJCXAtPmxlbl90cmsgICA9IHAtPmVuZF90cmsgLSBwLT5zdGFydF90cmsgKyAxOworCisJCWlmIChpID09IDEpIHsKKwkJCS8qIGZpcnN0IHBhcnRpdGlvbiwgdGhlcmUgaXMgYXQgbGVhc3Qgb25lICovCisJCQlhbmMtPmZzcGFjZV90cmsgPSBwLT5zdGFydF90cmsgLSBGSVJTVF9VU0FCTEVfVFJLOworCQl9IGVsc2UgeworCQkJaWYgKGkgPT0gVVNBQkxFX1BBUlRJVElPTlMpCisJCQkJLyogbGFzdCBwb3NzaWJsZSBwYXJ0aXRpb24gKi8KKwkJCQlwLT5mc3BhY2VfdHJrID0gbWF4IC0gcC0+ZW5kX3RyazsKKworCQkJLyogc2V0IGZyZWUgc3BhY2UgdmFsdWVzIG9mIHByZXZpb3VzIHBhcnRpdGlvbiAqLworCQkJcS0+ZnNwYWNlX3RyayA9IHAtPnN0YXJ0X3RyayAtIHEtPmVuZF90cmsgLSAxOworCQl9CisKKwkJY2ggPSBwLT5mMS0+RFMxRFNOQU07CisJCXZ0b2NfZWJjZGljX2RlYyAoY2gsIGNoLCA0NCk7CisJCWlmIChzdHJzdHIoY2gsIFBBUlRfVFlQRV9MVk0pKQorCQkJcC0+dHlwZSA9IFBBUlRJVElPTl9MSU5VWF9MVk07CisJCWVsc2UgaWYgKHN0cnN0cihjaCwgUEFSVF9UWVBFX1JBSUQpKQorCQkJcC0+dHlwZSA9IFBBUlRJVElPTl9MSU5VWF9SQUlEOworCQllbHNlIGlmIChzdHJzdHIoY2gsIFBBUlRfVFlQRV9OQVRJVkUpKQorCQkJcC0+dHlwZSA9IFBBUlRJVElPTl9MSU5VWDsKKwkJZWxzZSBpZiAoc3Ryc3RyKGNoLCBQQVJUX1RZUEVfU1dBUCkpCisJCQlwLT50eXBlID0gUEFSVElUSU9OX0xJTlVYX1NXQVA7CisJCWVsc2UKKwkJCXAtPnR5cGUgPSBQQVJUSVRJT05fTElOVVg7CisJCXZ0b2NfZWJjZGljX2VuYyAoY2gsIGNoLCA0NCk7CisKKwkJcSA9IHA7CisJCXAgPSBwLT5uZXh0OworCX0KK30KKworLyoKKyAqIHJlb3JnYW5pemVzIGFsbCBGTVQxcywgYWZ0ZXIgdGhhdCBhbGwgdXNlZCBGTVQxcyBzaG91bGQgYmUgcmlnaHQgaW4gCisgKiBmcm9udCBvZiBhbGwgdW51c2VkIEZNVDFzCisgKi8KK3N0YXRpYyB2b2lkCitmZGFzZF9yZW9yZ2FuaXplX0ZNVDFzIChmZGFzZF9hbmNob3JfdCAqYW5jKSAKK3sKKwlQREVCVUcKKwlpbnQgaSwgajsKKwlmb3JtYXQxX2xhYmVsX3QgKmx0bXA7CisJcGFydGl0aW9uX2luZm9fdCAqcHRtcDsKKworCWZvciAoaT0xOyBpPD1VU0FCTEVfUEFSVElUSU9OUyAtIDE7IGkrKykgeworCQlwdG1wID0gYW5jLT5maXJzdDsKKworCQlmb3IgKGo9MTsgajw9VVNBQkxFX1BBUlRJVElPTlMgLSBpOyBqKyspIHsKKwkJCWlmIChwdG1wLT5mMS0+RFMxRk1USUQgPCBwdG1wLT5uZXh0LT5mMS0+RFMxRk1USUQpIHsKKwkJCQlsdG1wID0gcHRtcC0+ZjE7CisJCQkJcHRtcC0+ZjEgPSBwdG1wLT5uZXh0LT5mMTsKKwkJCQlwdG1wLT5uZXh0LT5mMSA9IGx0bXA7CisJCQl9CisKKwkJCXB0bXA9cHRtcC0+bmV4dDsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQKK2ZkYXNkX3Byb2Nlc3NfdmFsaWRfdnRvYyAoZmRhc2RfYW5jaG9yX3QgKiBhbmMsIHVuc2lnbmVkIGxvbmcgYiwgaW50IGZkKQoreworCVBERUJVRworCWludCBmNV9jb3VudGVyID0gMCwgZjdfY291bnRlciA9IDAsIGYxX2NvdW50ZXIgPSAwLCBvbGRmbXQgPSAwOworCWludCBpLCBuLCBmMXNpemUgPSBzaXplb2YgKGZvcm1hdDFfbGFiZWxfdCk7CisJcGFydGl0aW9uX2luZm9fdCAqcCA9IGFuYy0+Zmlyc3Q7CisJZm9ybWF0MV9sYWJlbF90IHE7CisJY2hhciBzWzVdLCAqY2g7CisKKwliICs9IGFuYy0+Ymxrc2l6ZTsKKworCWZvciAoaSA9IDE7IGkgPD0gYW5jLT5nZW8uc2VjdG9yczsgaSsrKSB7CisJCWJ6ZXJvICgmcSwgZjFzaXplKTsKKwkJdnRvY19yZWFkX2xhYmVsIChmZCwgYiwgJnEsIE5VTEwsIE5VTEwsIE5VTEwpOworCisJCXN3aXRjaCAocS5EUzFGTVRJRCkgeworCQkJY2FzZSAweGYxOgorCQkJCWlmIChwID09IE5VTEwpCisJCQkJCWJyZWFrOworCQkJCW1lbWNweSAocC0+ZjEsICZxLCBmMXNpemUpOworCisJCQkJbiA9IC0xOworCQkJCXZ0b2NfZWJjZGljX2RlYyAocC0+ZjEtPkRTMURTTkFNLCBwLT5mMS0+RFMxRFNOQU0sIDQ0KTsKKwkJCQljaCA9IHN0cnN0ciAocC0+ZjEtPkRTMURTTkFNLCAiUEFSVCIpOworCQkJCWlmIChjaCAhPSBOVUxMKSB7CisJCQkJCXN0cm5jcHkgKHMsIGNoICsgNCwgNCk7CisJCQkJCXNbNF0gPSAnXDAnOworCQkJCQluID0gYXRvaSAocykgLSAxOworCQkJCX0KKworCQkJCXZ0b2NfZWJjZGljX2VuYyAocC0+ZjEtPkRTMURTTkFNLCBwLT5mMS0+RFMxRFNOQU0sIDQ0KTsKKworCQkJCS8qIHRoaXMgZGFzZCBoYXMgZGF0YSBzZXQgbmFtZXMgMDAwMC0wMDAyCisJCQkJYnV0IHdlIHVzZSBub3cgMDAwMS0wMDAzICovCisJCQkJaWYgKG4gPT0gLTEpCisJCQkJCW9sZGZtdCsrOworCisJCQkJaWYgKCgob2xkZm10ID09IDApICYmIChuIDwgMCkpIHx8IChuID49IFVTQUJMRV9QQVJUSVRJT05TKSkgeworCQkJCQkvKiBubyBvcCAqLworCQkJCX0gZWxzZSB7CisJCQkJCWlmIChvbGRmbXQpIHsKKwkJCQkJCS8qIGNvcnJlY3QgKzEgKi8KKwkJCQkJCXNldHBvcyAoYW5jLCBuICsgMSwgZjFfY291bnRlcik7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlzZXRwb3MgKGFuYywgbiwgZjFfY291bnRlcik7CisJCQkJCX0KKwkJCQl9CisKKwkJCQlwID0gcC0+bmV4dDsKKwkJCQlmMV9jb3VudGVyKys7CisJCQkJYnJlYWs7CisJCQljYXNlIDB4ZjU6CisJCQkJbWVtY3B5IChhbmMtPmY1LCAmcSwgZjFzaXplKTsKKwkJCQlmNV9jb3VudGVyKys7CisJCQkJYnJlYWs7CisJCQljYXNlIDB4Zjc6CisJCQkJaWYgKGY3X2NvdW50ZXIgPT0gMCkKKwkJCQkJbWVtY3B5IChhbmMtPmY3LCAmcSwgZjFzaXplKTsKKwkJCQlmN19jb3VudGVyKys7CisJCQkJYnJlYWs7CisJCX0KKworCQliICs9IGFuYy0+Ymxrc2l6ZTsKKwl9CisKKwlpZiAob2xkZm10ID4gMCkgeworCQkvKiB0aGlzIGlzIHRoZSBvbGQgZm9ybWF0IFBBUlQwMDAwIC0gUEFSVDAwMDIgKi8KKwkJYW5jLT52dG9jX2NoYW5nZWQrKzsKKwl9CisKKwlpZiAoKGY1X2NvdW50ZXIgPT0gMCkgfHwgKGFuYy0+YmlnX2Rpc2spKQorCQl2dG9jX2luaXRfZm9ybWF0NV9sYWJlbCAoYW5jLT5mNSk7CisKKwlpZiAoZjdfY291bnRlciA9PSAwKQorCQl2dG9jX2luaXRfZm9ybWF0N19sYWJlbCAoYW5jLT5mNyk7CisKKwlmZGFzZF9yZW9yZ2FuaXplX0ZNVDFzIChhbmMpOworCWZkYXNkX3VwZGF0ZV9wYXJ0aXRpb25faW5mbyAoYW5jKTsKK30KKworc3RhdGljIGludAorZmRhc2RfdmFsaWRfdnRvY19wb2ludGVyKGZkYXNkX2FuY2hvcl90ICphbmMsIHVuc2lnbmVkIGxvbmcgYiwgaW50IGZkKQoreworCVBERUJVRworCWNoYXIgc3RyW0xJTkVfTEVOR1RIXTsKKworCS8qIFZPTDEgbGFiZWwgY29udGFpbnMgdmFsaWQgVlRPQyBwb2ludGVyICovIAorCXZ0b2NfcmVhZF9sYWJlbCAoZmQsIGIsIE5VTEwsIGFuYy0+ZjQsIE5VTEwsIE5VTEwpOworCisJaWYgKGFuYy0+ZjQtPkRTNElERk1UICE9IDB4ZjQpIHsKKwkJaWYgKHN0cm5jbXAoYW5jLT52bGFiZWwtPnZvbGtleSx2dG9jX2ViY2RpY19lbmMoIkxOWDEiLHN0ciw0KSw0KSA9PSAwKQorCQkJcmV0dXJuIDA7CisJCWZkYXNkX2Vycm9yKGFuYywgd3JvbmdfZGlza19mb3JtYXQsICJJbnZhbGlkIFZUT0MiKTsKKwl9IGVsc2UgeworCQlmZGFzZF9wcm9jZXNzX3ZhbGlkX3Z0b2MgKGFuYywgYiwgZmQpOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogY2hlY2sgdGhlIGRhc2QgZm9yIGEgdm9sdW1lIGxhYmVsCisgKi8KK2ludCAKK2ZkYXNkX2NoZWNrX3ZvbHVtZSAoZmRhc2RfYW5jaG9yX3QgKmFuYywgaW50IGZkKSAKK3sKKwlQREVCVUcKKwl2b2x1bWVfbGFiZWxfdCAqdiA9IGFuYy0+dmxhYmVsOworCXVuc2lnbmVkIGxvbmcgYiA9IC0xOworCWNoYXIgc3RyW0xJTkVfTEVOR1RIXTsKKworCXZ0b2NfcmVhZF92b2x1bWVfbGFiZWwgKGZkLCBhbmMtPmxhYmVsX3Bvcywgdik7CisKKwlpZiAoc3RybmNtcCh2LT52b2xsYmwsIHZ0b2NfZWJjZGljX2VuYyAoIlZPTDEiLCBzdHIsIDQpLCA0KSA9PSAwKSB7CisJCS8qIGZvdW5kIFZPTDEgdm9sdW1lIGxhYmVsICovCisJCWIgPSAoY2NoaGIyYmxrICgmdi0+dnRvYywgJmFuYy0+Z2VvKSAtIDEpICogYW5jLT5ibGtzaXplOworCisJCWlmIChiID4gMCkgeworCQkJaW50IHJjOworCQkJcmMgPSBmZGFzZF92YWxpZF92dG9jX3BvaW50ZXIgKGFuYywgYiwgZmQpOworCisJCQlpZiAocmMgPCAwKQorCQkJCXJldHVybiAxOworCQkJZWxzZQorCQkJCXJldHVybiAwOworCQl9IGVsc2UgeworCQkJcmV0dXJuIDE7CisJCX0KKwl9IGVsc2UgaWYgKHN0cm5jbXAgKHYtPnZvbGtleSwgdnRvY19lYmNkaWNfZW5jICgiTE5YMSIsIHN0ciwgNCksIDQpID09IDApIHsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBjaGVja3MgdGhlIGN1cnJlbnQgQVBJIHZlcnNpb24gd2l0aCB0aGUgQVBJIHZlcnNpb24gb2YgdGhlIGRhc2QgZHJpdmVyCisgKi8KK3ZvaWQKK2ZkYXNkX2NoZWNrX2FwaV92ZXJzaW9uIChmZGFzZF9hbmNob3JfdCAqYW5jLCBpbnQgZikKK3sKKwlQREVCVUcKKwlpbnQgYXBpOworCWNoYXIgc1tMSU5FX0xFTkdUSF07CisgCisJaWYgKGlvY3RsKGYsIERBU0RBUElWRVIsICZhcGkpICE9IDApCisJCWZkYXNkX2Vycm9yKGFuYywgdW5hYmxlX3RvX2lvY3RsLCAiQ291bGQgbm90IHJldHJpZXZlIEFQSSB2ZXJzaW9uLiIpOworIAorCWlmIChhcGkgIT0gREFTRF9NSU5fQVBJX1ZFUlNJT04pIHsKKwkJc3ByaW50ZihzLCAiVGhlIGN1cnJlbnQgQVBJIHZlcnNpb24gJyVkJyBkb2Vzbid0ICIgXAorCQkJCSJtYXRjaCBkYXNkIGRyaXZlciBBUEkgdmVyc2lvbiAiIFwKKwkJCQkiJyVkJyEiLCBhcGksIERBU0RfTUlOX0FQSV9WRVJTSU9OKTsKKwkJZmRhc2RfZXJyb3IoYW5jLCBhcGlfdmVyc2lvbl9taXNtYXRjaCwgcyk7CisJfQorfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKKy8qCisgKiByZWFkcyBkYXNkIGdlb21ldHJ5IGRhdGEKKyAqLwordm9pZCAKK2ZkYXNkX2dldF9nZW9tZXRyeSAoZmRhc2RfYW5jaG9yX3QgKmFuYywgaW50IGYpIAoreworCVBERUJVRworCWludCBibGtzaXplID0gMDsKKwlkYXNkX2luZm9ybWF0aW9uX3QgZGFzZF9pbmZvOworCWNoYXIgc1tMSU5FX0xFTkdUSF07CisKKwlpZiAoaW9jdGwoZiwgSERJT19HRVRHRU8sICZhbmMtPmdlbykgIT0gMCkgCisJCWZkYXNkX2Vycm9yKGFuYywgdW5hYmxlX3RvX2lvY3RsLAorCQkJCQkiQ291bGQgbm90IHJldHJpZXZlIGRpc2sgZ2VvbWV0cnkgaW5mb3JtYXRpb24uIik7CisKKwlpZiAoaW9jdGwoZiwgQkxLU1NaR0VULCAmYmxrc2l6ZSkgIT0gMCkKKwkJZmRhc2RfZXJyb3IoYW5jLCB1bmFibGVfdG9faW9jdGwsCisJCQkJCSJDb3VsZCBub3QgcmV0cmlldmUgYmxvY2tzaXplIGluZm9ybWF0aW9uLiIpOworCisJLyogZ2V0IGRpc2sgdHlwZSAqLworCWlmIChpb2N0bChmLCBCSU9EQVNESU5GTywgJmRhc2RfaW5mbykgIT0gMCkgCisJCWZkYXNkX2Vycm9yKGFuYywgdW5hYmxlX3RvX2lvY3RsLCAKKwkJCQkJIkNvdWxkIG5vdCByZXRyaWV2ZSBkaXNrIGluZm9ybWF0aW9uLiIpOworCisJaWYgKHN0cm5jbXAoZGFzZF9pbmZvLnR5cGUsICJFQ0tEIiwgNCkgIT0gMCkgeworCQlzcHJpbnRmKHMsICJUaGlzIGlzIG5vdCBhbiBFQ0tEIGRpc2shIFRoaXMgZGlzayB0eXBlICIgXAorCQkJCSJpcyBub3Qgc3VwcG9ydGVkISIpOworCQlmZGFzZF9lcnJvcihhbmMsd3JvbmdfZGlza190eXBlLCBzKTsKKwl9CisKKwlhbmMtPmRldl90eXBlICAgPSBkYXNkX2luZm8uZGV2X3R5cGU7CisJYW5jLT5ibGtzaXplICAgID0gYmxrc2l6ZTsKKwlhbmMtPmxhYmVsX3BvcyAgPSBkYXNkX2luZm8ubGFiZWxfYmxvY2sgKiBibGtzaXplOworCWFuYy0+ZGV2bm8gICAgICA9IGRhc2RfaW5mby5kZXZubzsKKwlhbmMtPmZzcGFjZV90cmsgPSBhbmMtPmdlby5jeWxpbmRlcnMgKiBhbmMtPmdlby5oZWFkcyAtIEZJUlNUX1VTQUJMRV9UUks7Cit9CisKKy8qCisgKiByZXR1cm5zIHVudXNlZCBwYXJ0aXRpb24gaW5mbyBwb2ludGVyIGlmIHRoZXJlCisgKiBpcyBhIGZyZWUgcGFydGl0aW9uLCBvdGhlcndpc2UgTlVMTAorICovCitzdGF0aWMgcGFydGl0aW9uX2luZm9fdCAqIAorZmRhc2RfZ2V0X2VtcHR5X2YxX2xhYmVsIChmZGFzZF9hbmNob3JfdCAqIGFuYykgCit7CisJUERFQlVHCisJaWYgKGFuYy0+dXNlZF9wYXJ0aXRpb25zIDwgVVNBQkxFX1BBUlRJVElPTlMpCSAgCisJCXJldHVybiBhbmMtPmxhc3Q7CSAgICAgIAorCWVsc2UKKwkJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBhc2tzIGZvciBhbmQgc2V0cyBzb21lIGltcG9ydGFudCBwYXJ0aXRpb24gZGF0YQorICovCitzdGF0aWMgaW50IAorZmRhc2RfZ2V0X3BhcnRpdGlvbl9kYXRhIChmZGFzZF9hbmNob3JfdCAqYW5jLCBleHRlbnRfdCAqcGFydF9leHRlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpdGlvbl9pbmZvX3QgKnAsIHVuc2lnbmVkIGludCAqc3RhcnRfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKnN0b3BfcHRyKSAKK3sKKwlQREVCVUcKKwl1bnNpZ25lZCBpbnQgbGltaXQsIGNjLCBoaDsKKwljY2hoX3QgbGxpbWl0LCB1bGltaXQ7CisJcGFydGl0aW9uX2luZm9fdCAqcTsKKwl1X2ludDhfdCBiMSwgYjI7CisJdV9pbnQxNl90IGMsIGg7CisJdW5zaWduZWQgaW50IHN0YXJ0ID0gKnN0YXJ0X3B0ciwgc3RvcCA9ICpzdG9wX3B0cjsKKwlpbnQgaTsKKwljaGFyICpjaDsKKworCWlmIChhbmMtPmY0LT5EUzRERVZDVC5EUzRERVZGRyAmIEFMVEVSTkFURV9DWUxJTkRFUlNfVVNFRCkKKwkJYyA9IGFuYy0+ZjQtPkRTNERFVkNULkRTNERTQ1lMIC0gKHVfaW50MTZfdCkgYW5jLT5mNC0+RFM0REVWQUM7CisJZWxzZQorCQljID0gYW5jLT5mNC0+RFM0REVWQ1QuRFM0RFNDWUw7CisKKwloID0gYW5jLT5mNC0+RFM0REVWQ1QuRFM0RFNUUks7CisJbGltaXQgPSAoaCAqIGMgLSAxKTsKKworCS8qIGNoZWNrIHN0YXJ0IHZhbHVlIGZyb20gdXNlciAqLworCXEgPSBhbmMtPmZpcnN0OworCWZvciAoaSA9IDA7IGkgPCBVU0FCTEVfUEFSVElUSU9OUzsgaSsrKSB7CisJCWlmICggcS0+bmV4dCA9PSBOVUxMICkKKwkJCWJyZWFrOworCisJCWlmIChzdGFydCA+PSBxLT5zdGFydF90cmsgJiYgc3RhcnQgPD0gcS0+ZW5kX3RyaykgeworCQkJLyogc3RhcnQgaXMgd2l0aGluIGFub3RoZXIgcGFydGl0aW9uICovCisJCQlzdGFydCA9IHEtPmVuZF90cmsgKyAxOworCisJCQlpZiAoc3RhcnQgPiBsaW1pdCkgeworCQkJCXN0YXJ0ID0gRklSU1RfVVNBQkxFX1RSSzsKKwkJCQlxID0gYW5jLT5maXJzdDsKKwkJCX0KKwkJfQorCisJCWlmIChzdGFydCA8IHEtPnN0YXJ0X3RyaykgeworCQkJbGltaXQgPSBxLT5zdGFydF90cmsgLSAxOworCQkJYnJlYWs7CisJCX0KKworCQlxID0gcS0+bmV4dDsKKwl9CisKKwlpZiAoc3RhcnQgPT0gbGltaXQpCisJCXN0b3AgPSBzdGFydDsKKworCS8qIHVwZGF0ZSBwYXJ0aXRpb24gaW5mbyAqLworCXAtPmxlbl90cmsgICAgPSBzdG9wIC0gc3RhcnQgKyAxOworCXAtPnN0YXJ0X3RyayAgPSBzdGFydDsKKwlwLT5lbmRfdHJrICAgID0gc3RvcDsKKworCWNjID0gc3RhcnQgLyBhbmMtPmdlby5oZWFkczsKKwloaCA9IHN0YXJ0IC0gKGNjICogYW5jLT5nZW8uaGVhZHMpOworCXZ0b2Nfc2V0X2NjaGgoJmxsaW1pdCwgY2MsIGhoKTsKKworCS8qIGNoZWNrIGZvciBjeWxpbmRlciBib3VuZGFyeSAqLworCWlmIChoaCA9PSAwKSAgCisJCWIxID0gMHg4MTsKKwllbHNlCisJCWIxID0gMHgwMTsKKworCWNjID0gc3RvcCAvIGFuYy0+Z2VvLmhlYWRzOworCWhoID0gc3RvcCAtIGNjICogYW5jLT5nZW8uaGVhZHM7CisJdnRvY19zZXRfY2NoaCgmdWxpbWl0LCBjYywgaGgpOworCisJLyogaXQgaXMgYWx3YXlzIHRoZSAxc3QgZXh0ZW50ICovCisJYjIgPSAweDAwOworCisJdnRvY19zZXRfZXh0ZW50KHBhcnRfZXh0ZW50LCBiMSwgYjIsICZsbGltaXQsICZ1bGltaXQpOworCisJKnN0YXJ0X3B0ciA9IHN0YXJ0OworCSpzdG9wX3B0ciA9IHN0b3A7CisKKwljaCA9IHAtPmYxLT5EUzFEU05BTTsKKwl2dG9jX2ViY2RpY19kZWMgKGNoLCBjaCwgNDQpOworCisJaWYgKHN0cnN0cihjaCwgUEFSVF9UWVBFX0xWTSkpCisJCXAtPnR5cGUgPSBQQVJUSVRJT05fTElOVVhfTFZNOworCWVsc2UgaWYgKHN0cnN0cihjaCwgUEFSVF9UWVBFX1JBSUQpKQorCQlwLT50eXBlID0gUEFSVElUSU9OX0xJTlVYX1JBSUQ7CisJZWxzZSBpZiAoc3Ryc3RyKGNoLCBQQVJUX1RZUEVfTkFUSVZFKSkKKwkJcC0+dHlwZSA9IFBBUlRJVElPTl9MSU5VWDsKKwllbHNlIGlmIChzdHJzdHIoY2gsIFBBUlRfVFlQRV9TV0FQKSkKKwkJcC0+dHlwZSA9IFBBUlRJVElPTl9MSU5VWF9TV0FQOworCWVsc2UKKwkJcC0+dHlwZSA9IFBBUlRJVElPTl9MSU5VWDsKKworCXZ0b2NfZWJjZGljX2VuYyAoY2gsIGNoLCA0NCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2ZkYXNkX2VucXVldWVfbmV3X3BhcnRpdGlvbiAoZmRhc2RfYW5jaG9yX3QgKmFuYykgCit7CisJUERFQlVHCisJcGFydGl0aW9uX2luZm9fdCAqcSA9IGFuYy0+Zmlyc3QsICpwID0gYW5jLT5sYXN0OworCWludCBpLCBrPTA7CisKKwlmb3IgKGk9MTsgaTxVU0FCTEVfUEFSVElUSU9OUzsgaSsrKSB7CisJCWlmICgocS0+ZW5kX3RyayA9PSAwKSB8fCAocC0+c3RhcnRfdHJrIDwgcS0+c3RhcnRfdHJrKSkgeworCQkJYnJlYWs7CisJCX0gZWxzZSB7IAorCQkJcSA9IHEtPm5leHQ7CisJCQlrKys7CisJCX0KKwl9CisKKwlpZiAoYW5jLT5maXJzdCA9PSBxKQorCQlhbmMtPmZpcnN0ID0gcDsKKwkKKwlpZiAocCAhPSBxKSB7CisJCWFuYy0+bGFzdC0+cHJldi0+bmV4dCA9IE5VTEw7CisJCWFuYy0+bGFzdCA9IGFuYy0+bGFzdC0+cHJldjsKKworCQlwLT5uZXh0ID0gcTsKKwkJcC0+cHJldiA9IHEtPnByZXY7CisJCXEtPnByZXYgPSBwOworCQkKKwkJaWYgKHAtPnByZXYgIT0gTlVMTCkKKwkJCXAtPnByZXYtPm5leHQgPSBwOworCX0KKworCXAtPnVzZWQgPSAweDAxOworCXAtPnR5cGUgPSBQQVJUSVRJT05fTElOVVg7CisKKwlmb3IgKGk9MDsgaTxVU0FCTEVfUEFSVElUSU9OUzsgaSsrKSB7CisJCWludCBqID0gZ2V0cG9zKGFuYywgaSk7CisJCWlmIChqID49IGspCisJCQlzZXRwb3MoYW5jLCBpLCBqICsgMSk7CisJfQorCisJLyogdXBkYXRlIGZyZWUtc3BhY2UgY291bnRlcnMgKi8KKwlpZiAoYW5jLT5maXJzdCA9PSBwKSB7CisJCS8qIHBhcnRpdGlvbiBpcyB0aGUgZmlyc3QgdXNlZCBwYXJ0aXRpb24gKi8KKwkJaWYgKHAtPnN0YXJ0X3RyayA9PSBGSVJTVF9VU0FCTEVfVFJLKSB7CisJCQkvKiBwYXJ0aXRpb24gc3RhcnRzIHJpZ2h0IGJlaGluZCBWVE9DICovCisJCQlwLT5mc3BhY2VfdHJrID0gYW5jLT5mc3BhY2VfdHJrIC0gcC0+bGVuX3RyazsKKwkJCWFuYy0+ZnNwYWNlX3RyayA9IDA7CisJCX0gZWxzZSB7CisJCQkvKiB0aGVyZSBpcyBzb21lIHNwYWNlIGJldHdlZW4gVlRPQyBhbmQgcGFydGl0aW9uICovCisJCQlwLT5mc3BhY2VfdHJrID0gYW5jLT5mc3BhY2VfdHJrIC0gcC0+bGVuX3RyayAtIHAtPnN0YXJ0X3RyaworCQkJCQkJCSsgRklSU1RfVVNBQkxFX1RSSzsKKwkJCWFuYy0+ZnNwYWNlX3RyayA9IHAtPnN0YXJ0X3RyayAtIEZJUlNUX1VTQUJMRV9UUks7CisJCX0KKwl9IGVsc2UgeworCQkvKiB0aGVyZSBhcmUgcGFydGl0b25zIGluIGZyb250IG9mIHRoZSBuZXcgb25lICovCisJCWlmIChwLT5zdGFydF90cmsgPT0gcC0+cHJldi0+ZW5kX3RyayArIDEpIHsKKwkJCS8qIG5ldyBwYXJ0aXRpb24gaXMgcmlnaHQgYmVoaW5kIHRoZSBwcmV2aW91cyBvbmUgKi8KKwkJCXAtPmZzcGFjZV90cmsgPSBwLT5wcmV2LT5mc3BhY2VfdHJrIC0gcC0+bGVuX3RyazsKKwkJCXAtPnByZXYtPmZzcGFjZV90cmsgPSAwOworCQl9IGVsc2UgeworCQkJLyogdGhlcmUgaXMgc29tZSBzcGFjZSBiZXR3ZWVuIG5ldyBhbmQgcHJldi4gcGFydC4gKi8KKwkJCXAtPmZzcGFjZV90cmsgPSBwLT5wcmV2LT5mc3BhY2VfdHJrIC0gcC0+bGVuX3RyaworCQkJCQkJCS0gcC0+c3RhcnRfdHJrICsgcC0+cHJldi0+ZW5kX3RyayArIDE7CisJCQlwLT5wcmV2LT5mc3BhY2VfdHJrID0gcC0+c3RhcnRfdHJrIC0gcC0+cHJldi0+ZW5kX3RyayAtIDE7CisJCX0KKwl9Cit9CisKKy8qCisgKiBhZGRzIGEgbmV3IHBhcnRpdGlvbiB0byB0aGUgJ3BhcnRpdGlvbiB0YWJsZScKKyAqLworcGFydGl0aW9uX2luZm9fdCAqCitmZGFzZF9hZGRfcGFydGl0aW9uIChmZGFzZF9hbmNob3JfdCAqYW5jLCB1bnNpZ25lZCBpbnQgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3RvcCkgCit7CisJUERFQlVHCisJY2NoaGJfdCBoZjE7CisJcGFydGl0aW9uX2luZm9fdCAqcDsKKwlleHRlbnRfdCBleHQ7CisJaW50IGk7CisKKwlQREVCVUc7CisKKwlpZiAoKHAgPSBmZGFzZF9nZXRfZW1wdHlfZjFfbGFiZWwoYW5jKSkgPT0gTlVMTCkgeworCQlQREVCVUc7CisJCXJldHVybiAwOworCX0KKworCVBERUJVRzsKKwlpZiAoZmRhc2RfZ2V0X3BhcnRpdGlvbl9kYXRhKGFuYywgJmV4dCwgcCwgJnN0YXJ0LCAmc3RvcCkgIT0gMCkKKwkJcmV0dXJuIDA7CisKKwlQREVCVUc7CisJdnRvY19pbml0X2Zvcm1hdDFfbGFiZWwoYW5jLT52bGFiZWwtPnZvbGlkLCBhbmMtPmJsa3NpemUsICZleHQsIHAtPmYxKTsKKworCVBERUJVRzsKKwlmZGFzZF9lbnF1ZXVlX25ld19wYXJ0aXRpb24oYW5jKTsKKwkKKwlQREVCVUc7CisJYW5jLT51c2VkX3BhcnRpdGlvbnMgKz0gMTsKKworCWkgPSBhbmMtPnVzZWRfcGFydGl0aW9ucyArIDI7CisJaWYgKGFuYy0+YmlnX2Rpc2spCisJCWkrKzsKKwlQREVCVUc7CisKKwl2dG9jX3NldF9jY2hoYigmaGYxLCBWVE9DX1NUQVJUX0NDLCBWVE9DX1NUQVJUX0hILCBpKTsKKworCXZ0b2NfdXBkYXRlX2Zvcm1hdDRfbGFiZWwoYW5jLT5mNCwgJmhmMSwgYW5jLT5mNC0+RFM0RFNSRUMgLSAxKTsKKworCVBERUJVRzsKKworCXN0YXJ0ID0gZXh0LmxsaW1pdC5jYyAqIGFuYy0+Z2VvLmhlYWRzICsgZXh0LmxsaW1pdC5oaDsKKwlzdG9wICA9IGV4dC51bGltaXQuY2MgKiBhbmMtPmdlby5oZWFkcyArIGV4dC51bGltaXQuaGg7CisKKwlQREVCVUc7CisJdnRvY19zZXRfZnJlZXNwYWNlKGFuYy0+ZjQsIGFuYy0+ZjUsIGFuYy0+ZjcsICctJywgYW5jLT52ZXJib3NlLAorCQkJCQkgICBzdGFydCwgc3RvcCwgYW5jLT5nZW8uY3lsaW5kZXJzLCBhbmMtPmdlby5oZWFkcyk7CisKKwlhbmMtPnZ0b2NfY2hhbmdlZCsrOworCisJUERFQlVHOworCXJldHVybiBwOworfQorCisvKiB2aW06c2V0IHRhYnN0b3A9NCBzaGlmdHdpZHRoPTQgc29mdHRhYnN0b3A9NDogKi8KZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvbGFiZWxzL2dwdC5jIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9sYWJlbHMvZ3B0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZjMzFjNwotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvbGFiZWxzL2dwdC5jCkBAIC0wLDAgKzEsMTUwNCBAQAorLyoKKyAgICBsaWJwYXJ0ZWQgLSBhIGxpYnJhcnkgZm9yIG1hbmlwdWxhdGluZyBkaXNrIHBhcnRpdGlvbnMKKworICAgIG9yaWdpbmFsIHZlcnNpb24gYnkgTWF0dCBEb21zY2ggPE1hdHRfRG9tc2NoQGRlbGwuY29tPgorICAgIERpc2NsYWltZWQgaW50byB0aGUgUHVibGljIERvbWFpbgorCisgICAgUG9ydGlvbnMgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA1LCAyMDA2LCAyMDA3CisgICAgICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICAgRUZJIEdVSUQgUGFydGl0aW9uIFRhYmxlIGhhbmRsaW5nCisgICAgUGVyIEludGVsIEVGSSBTcGVjaWZpY2F0aW9uIHYxLjAyCisgICAgaHR0cDovL2RldmVsb3Blci5pbnRlbC5jb20vdGVjaG5vbG9neS9lZmkvZWZpLmh0bQorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQorKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaW5jbHVkZSA8cGFydGVkL3BhcnRlZC5oPgorI2luY2x1ZGUgPHBhcnRlZC9kZWJ1Zy5oPgorI2luY2x1ZGUgPHBhcnRlZC9lbmRpYW4uaD4KKyNpbmNsdWRlIDxwYXJ0ZWQvY3JjMzIuaD4KKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDx1dWlkL3V1aWQuaD4KKworI2lmIEVOQUJMRV9OTFMKKyMgIGluY2x1ZGUgPGxpYmludGwuaD4KKyMgIGRlZmluZSBfKFN0cmluZykgZ2V0dGV4dCAoU3RyaW5nKQorI2Vsc2UKKyMgIGRlZmluZSBfKFN0cmluZykgKFN0cmluZykKKyNlbmRpZgkJCQkvKiBFTkFCTEVfTkxTICovCisKKyNkZWZpbmUgRUZJX1BNQlJfT1NUWVBFX0VGSSAweEVFCisjZGVmaW5lIE1TRE9TX01CUl9TSUdOQVRVUkUgMHhhYTU1CisKKyNkZWZpbmUgR1BUX0hFQURFUl9TSUdOQVRVUkUgMHg1NDUyNDE1MDIwNDk0NjQ1TEwKKworLyogTk9URTogdGhlIGRvY3VtZW50IHRoYXQgZGVzY3JpYmVzIHJldmlzaW9uIDEuMDAgaXMgbGFiZWxsZWQgInZlcnNpb24gMS4wMiIsCisgKiBzbyBzb21lIGltcGxlbWVudG9ycyBnb3QgY29uZnVzZWQuLi4KKyAqLworI2RlZmluZSBHUFRfSEVBREVSX1JFVklTSU9OX1YxXzAyIDB4MDAwMTAyMDAKKyNkZWZpbmUgR1BUX0hFQURFUl9SRVZJU0lPTl9WMV8wMCAweDAwMDEwMDAwCisjZGVmaW5lIEdQVF9IRUFERVJfUkVWSVNJT05fVjBfOTkgMHgwMDAwOTkwMAorCit0eXBlZGVmIHVpbnQxNl90IGVmaV9jaGFyMTZfdDsJLyogVU5JQ09ERSBjaGFyYWN0ZXIgKi8KK3R5cGVkZWYgc3RydWN0IF9HdWlkUGFydGl0aW9uVGFibGVIZWFkZXJfdCBHdWlkUGFydGl0aW9uVGFibGVIZWFkZXJfdDsKK3R5cGVkZWYgc3RydWN0IF9HdWlkUGFydGl0aW9uRW50cnlBdHRyaWJ1dGVzX3QgR3VpZFBhcnRpdGlvbkVudHJ5QXR0cmlidXRlc190OwordHlwZWRlZiBzdHJ1Y3QgX0d1aWRQYXJ0aXRpb25FbnRyeV90IEd1aWRQYXJ0aXRpb25FbnRyeV90OwordHlwZWRlZiBzdHJ1Y3QgX1BhcnRpdGlvblJlY29yZF90IFBhcnRpdGlvblJlY29yZF90OwordHlwZWRlZiBzdHJ1Y3QgX0xlZ2FjeU1CUl90IExlZ2FjeU1CUl90OwordHlwZWRlZiBzdHJ1Y3QgX0dQVERpc2tEYXRhIEdQVERpc2tEYXRhOwordHlwZWRlZiBzdHJ1Y3QgeworICAgICAgICB1aW50MzJfdCB0aW1lX2xvdzsKKyAgICAgICAgdWludDE2X3QgdGltZV9taWQ7CisgICAgICAgIHVpbnQxNl90IHRpbWVfaGlfYW5kX3ZlcnNpb247CisgICAgICAgIHVpbnQ4X3QgIGNsb2NrX3NlcV9oaV9hbmRfcmVzZXJ2ZWQ7CisgICAgICAgIHVpbnQ4X3QgIGNsb2NrX3NlcV9sb3c7CisgICAgICAgIHVpbnQ4X3QgIG5vZGVbNl07Cit9IC8qIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAqLyBlZmlfZ3VpZF90OworLyogY29tbWVudGVkIG91dCAiX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIiB0byB3b3JrIGFyb3VuZCBnY2MgYnVnIChmaXhlZAorICogaW4gZ2NjMy4xKTogX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGJyZWFrcyBhZGRyZXNzaW5nIG9uIGluaXRpYWxpemVkCisgKiBkYXRhLiAgSXQgdHVybnMgb3V0IHdlIGRvbid0IG5lZWQgaXQgaW4gdGhpcyBjYXNlLCBzbyBpdCBkb2Vzbid0IGJyZWFrCisgKiBhbnl0aGluZyA6KQorICovCisKKyNkZWZpbmUgVU5VU0VEX0VOVFJZX0dVSUQgICAgXAorICAgICgoZWZpX2d1aWRfdCkgeyAweDAwMDAwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMCwgMHgwMCwgXAorICAgIAkJICAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9fSkKKyNkZWZpbmUgUEFSVElUSU9OX1NZU1RFTV9HVUlEIFwKKyAgICAoKGVmaV9ndWlkX3QpIHsgUEVEX0NQVV9UT19MRTMyICgweEMxMkE3MzI4KSwgUEVEX0NQVV9UT19MRTE2ICgweEY4MUYpLCBcCisgICAgCQkgICAgUEVEX0NQVV9UT19MRTE2ICgweDExZDIpLCAweEJBLCAweDRCLCBcCisJCSAgICB7IDB4MDAsIDB4QTAsIDB4QzksIDB4M0UsIDB4QzksIDB4M0IgfX0pCisjZGVmaW5lIExFR0FDWV9NQlJfUEFSVElUSU9OX0dVSUQgXAorICAgICgoZWZpX2d1aWRfdCkgeyBQRURfQ1BVX1RPX0xFMzIgKDB4MDI0REVFNDEpLCBQRURfQ1BVX1RPX0xFMTYgKDB4MzNFNyksIFwKKwkJICAgIFBFRF9DUFVfVE9fTEUxNiAoMHgxMWQzLCAweDlELCAweDY5LCBcCisJCSAgICB7IDB4MDAsIDB4MDgsIDB4QzcsIDB4ODEsIDB4RjMsIDB4OUYgfX0pCisjZGVmaW5lIFBBUlRJVElPTl9NU0ZUX1JFU0VSVkVEX0dVSUQgXAorICAgICgoZWZpX2d1aWRfdCkgeyBQRURfQ1BVX1RPX0xFMzIgKDB4RTNDOUUzMTYpLCBQRURfQ1BVX1RPX0xFMTYgKDB4MEI1QyksIFwKKyAgICAJCSAgICBQRURfQ1BVX1RPX0xFMTYgKDB4NERCOCksIDB4ODEsIDB4N0QsIFwKKwkJICAgIHsgMHhGOSwgMHgyRCwgMHhGMCwgMHgwMiwgMHgxNSwgMHhBRSB9fSkKKyNkZWZpbmUgUEFSVElUSU9OX0JBU0lDX0RBVEFfR1VJRCBcCisgICAgKChlZmlfZ3VpZF90KSB7IFBFRF9DUFVfVE9fTEUzMiAoMHhFQkQwQTBBMiksIFBFRF9DUFVfVE9fTEUxNiAoMHhCOUU1KSwgXAorICAgIAkJICAgIFBFRF9DUFVfVE9fTEUxNiAoMHg0NDMzKSwgMHg4NywgMHhDMCwgXAorCQkgICAgeyAweDY4LCAweEI2LCAweEI3LCAweDI2LCAweDk5LCAweEM3IH19KQorI2RlZmluZSBQQVJUSVRJT05fUkFJRF9HVUlEIFwKKyAgICAoKGVmaV9ndWlkX3QpIHsgUEVEX0NQVV9UT19MRTMyICgweGExOWQ4ODBmKSwgUEVEX0NQVV9UT19MRTE2ICgweDA1ZmMpLCBcCisgICAgCQkgICAgUEVEX0NQVV9UT19MRTE2ICgweDRkM2IpLCAweGEwLCAweDA2LCBcCisJCSAgICB7IDB4NzQsIDB4M2YsIDB4MGYsIDB4ODQsIDB4OTEsIDB4MWUgfX0pCisjZGVmaW5lIFBBUlRJVElPTl9TV0FQX0dVSUQgXAorICAgICgoZWZpX2d1aWRfdCkgeyBQRURfQ1BVX1RPX0xFMzIgKDB4MDY1N2ZkNmQpLCBQRURfQ1BVX1RPX0xFMTYgKDB4YTRhYiksIFwKKyAgICAJCSAgICBQRURfQ1BVX1RPX0xFMTYgKDB4NDNjNCksIDB4ODQsIDB4ZTUsIFwKKwkJICAgIHsgMHgwOSwgMHgzMywgMHhjOCwgMHg0YiwgMHg0ZiwgMHg0ZiB9fSkKKyNkZWZpbmUgUEFSVElUSU9OX0xWTV9HVUlEIFwKKyAgICAoKGVmaV9ndWlkX3QpIHsgUEVEX0NQVV9UT19MRTMyICgweGU2ZDZkMzc5KSwgUEVEX0NQVV9UT19MRTE2ICgweGY1MDcpLCBcCisgICAgCQkgICAgUEVEX0NQVV9UT19MRTE2ICgweDQ0YzIpLCAweGEyLCAweDNjLCBcCisJCSAgICB7IDB4MjMsIDB4OGYsIDB4MmEsIDB4M2QsIDB4ZjksIDB4MjggfX0pCisjZGVmaW5lIFBBUlRJVElPTl9SRVNFUlZFRF9HVUlEIFwKKyAgICAoKGVmaV9ndWlkX3QpIHsgUEVEX0NQVV9UT19MRTMyICgweDhkYTYzMzM5KSwgUEVEX0NQVV9UT19MRTE2ICgweDAwMDcpLCBcCisgICAgCQkgICAgUEVEX0NQVV9UT19MRTE2ICgweDYwYzApLCAweGM0LCAweDM2LCBcCisJCSAgICB7IDB4MDgsIDB4M2EsIDB4YzgsIDB4MjMsIDB4MDksIDB4MDggfX0pCisjZGVmaW5lIFBBUlRJVElPTl9IUFNFUlZJQ0VfR1VJRCBcCisgICAgKChlZmlfZ3VpZF90KSB7IFBFRF9DUFVfVE9fTEUzMiAoMHhlMmExZTcyOCksIFBFRF9DUFVfVE9fTEUxNiAoMHgzMmUzKSwgXAorCQkgICAgUEVEX0NQVV9UT19MRTE2ICgweDExZDYpLCAweGE2LCAweDgyLCBcCisJCSAgICB7IDB4N2IsIDB4MDMsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MDAgfX0pCisjZGVmaW5lIFBBUlRJVElPTl9BUFBMRV9IRlNfR1VJRCBcCisgICAgKChlZmlfZ3VpZF90KSB7IFBFRF9DUFVfVE9fTEUzMiAoMHg0ODQ2NTMwMCksIFBFRF9DUFVfVE9fTEUxNiAoMHgwMDAwKSwgXAorCQkgICAgUEVEX0NQVV9UT19MRTE2ICgweDExQUEpLCAweGFhLCAweDExLCBcCisJCSAgICB7IDB4MDAsIDB4MzAsIDB4NjUsIDB4NDMsIDB4RUMsIDB4QUMgfX0pCisKK3N0cnVjdCBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgX0d1aWRQYXJ0aXRpb25UYWJsZUhlYWRlcl90IHsKKwl1aW50NjRfdCBTaWduYXR1cmU7CisJdWludDMyX3QgUmV2aXNpb247CisJdWludDMyX3QgSGVhZGVyU2l6ZTsKKwl1aW50MzJfdCBIZWFkZXJDUkMzMjsKKwl1aW50MzJfdCBSZXNlcnZlZDE7CisJdWludDY0X3QgTXlMQkE7CisJdWludDY0X3QgQWx0ZXJuYXRlTEJBOworCXVpbnQ2NF90IEZpcnN0VXNhYmxlTEJBOworCXVpbnQ2NF90IExhc3RVc2FibGVMQkE7CisJZWZpX2d1aWRfdCBEaXNrR1VJRDsKKwl1aW50NjRfdCBQYXJ0aXRpb25FbnRyeUxCQTsKKwl1aW50MzJfdCBOdW1iZXJPZlBhcnRpdGlvbkVudHJpZXM7CisJdWludDMyX3QgU2l6ZU9mUGFydGl0aW9uRW50cnk7CisJdWludDMyX3QgUGFydGl0aW9uRW50cnlBcnJheUNSQzMyOworCXVpbnQ4X3QqIFJlc2VydmVkMjsKK307CisKK3N0cnVjdCBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgX0d1aWRQYXJ0aXRpb25FbnRyeUF0dHJpYnV0ZXNfdCB7CisjaWZkZWYgX19HTlVDX18gLyogWFhYIG5hcnJvdyB0aGlzIGRvd24gdG8gIVRpbnlDQyAqLworCXVpbnQ2NF90IFJlcXVpcmVkVG9GdW5jdGlvbjoxOworCXVpbnQ2NF90IFJlc2VydmVkOjQ3OworICAgICAgICB1aW50NjRfdCBHdWlkU3BlY2lmaWM6MTY7CisjZWxzZQorIyAgICAgICB3YXJuaW5nICJVc2luZyBjcmlwcGxlZCBwYXJ0aXRpb24gZW50cnkgdHlwZSIKKwl1aW50MzJfdCBSZXF1aXJlZFRvRnVuY3Rpb246MTsKKwl1aW50MzJfdCBSZXNlcnZlZDozMjsKKwl1aW50MzJfdCBMT1NUOjU7CisgICAgICAgIHVpbnQzMl90IEd1aWRTcGVjaWZpYzoxNjsKKyNlbmRpZgorfTsKKworc3RydWN0IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBfR3VpZFBhcnRpdGlvbkVudHJ5X3QgeworCWVmaV9ndWlkX3QgUGFydGl0aW9uVHlwZUd1aWQ7CisJZWZpX2d1aWRfdCBVbmlxdWVQYXJ0aXRpb25HdWlkOworCXVpbnQ2NF90IFN0YXJ0aW5nTEJBOworCXVpbnQ2NF90IEVuZGluZ0xCQTsKKwlHdWlkUGFydGl0aW9uRW50cnlBdHRyaWJ1dGVzX3QgQXR0cmlidXRlczsKKwllZmlfY2hhcjE2X3QgUGFydGl0aW9uTmFtZVs3MiAvIHNpemVvZihlZmlfY2hhcjE2X3QpXTsKK307CisKKyNkZWZpbmUgR1BUX1BNQlJfTEJBIDAKKyNkZWZpbmUgR1BUX1BNQlJfU0VDVE9SUyAxCisjZGVmaW5lIEdQVF9QUklNQVJZX0hFQURFUl9MQkEgMQorI2RlZmluZSBHUFRfSEVBREVSX1NFQ1RPUlMgMQorI2RlZmluZSBHUFRfUFJJTUFSWV9QQVJUX1RBQkxFX0xCQSAyIAorCisvKiAKKyAgIFRoZXNlIHZhbHVlcyBhcmUgb25seSBkZWZhdWx0cy4gIFRoZSBhY3R1YWwgb24tZGlzayBzdHJ1Y3R1cmVzCisgICBtYXkgZGVmaW5lIGRpZmZlcmVudCBzaXplcywgc28gdXNlIHRob3NlIHVubGVzcyBjcmVhdGluZyBhIG5ldyBHUFQgZGlzayEKKyovCisKKyNkZWZpbmUgR1BUX0RFRkFVTFRfUEFSVElUSU9OX0VOVFJZX0FSUkFZX1NJWkUgMTYzODQKKworLyogTnVtYmVyIG9mIGFjdHVhbCBwYXJ0aXRpb24gZW50cmllcyBzaG91bGQgYmUgY2FsY3VsYXRlZCBhczogKi8KKyNkZWZpbmUgR1BUX0RFRkFVTFRfUEFSVElUSU9OX0VOVFJJRVMgXAorICAgICAgICAoR1BUX0RFRkFVTFRfUEFSVElUSU9OX0VOVFJZX0FSUkFZX1NJWkUgLyBcCisgICAgICAgICBzaXplb2YoR3VpZFBhcnRpdGlvbkVudHJ5X3QpKQorCisKK3N0cnVjdCBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgX1BhcnRpdGlvblJlY29yZF90IHsKKwkvKiBOb3QgdXNlZCBieSBFRkkgZmlybXdhcmUuIFNldCB0byAweDgwIHRvIGluZGljYXRlIHRoYXQgdGhpcworCSAgIGlzIHRoZSBib290YWJsZSBsZWdhY3kgcGFydGl0aW9uLiAqLworCXVpbnQ4X3QgQm9vdEluZGljYXRvcjsKKworCS8qIFN0YXJ0IG9mIHBhcnRpdGlvbiBpbiBDSFMgYWRkcmVzcywgbm90IHVzZWQgYnkgRUZJIGZpcm13YXJlLiAqLworCXVpbnQ4X3QgU3RhcnRIZWFkOworCisJLyogU3RhcnQgb2YgcGFydGl0aW9uIGluIENIUyBhZGRyZXNzLCBub3QgdXNlZCBieSBFRkkgZmlybXdhcmUuICovCisJdWludDhfdCBTdGFydFNlY3RvcjsKKworCS8qIFN0YXJ0IG9mIHBhcnRpdGlvbiBpbiBDSFMgYWRkcmVzcywgbm90IHVzZWQgYnkgRUZJIGZpcm13YXJlLiAqLworCXVpbnQ4X3QgU3RhcnRUcmFjazsKKworCS8qIE9TIHR5cGUuIEEgdmFsdWUgb2YgMHhFRiBkZWZpbmVzIGFuIEVGSSBzeXN0ZW0gcGFydGl0aW9uLgorCSAgIE90aGVyIHZhbHVlcyBhcmUgcmVzZXJ2ZWQgZm9yIGxlZ2FjeSBvcGVyYXRpbmcgc3lzdGVtcywgYW5kCisJICAgYWxsb2NhdGVkIGluZGVwZW5kZW50bHkgb2YgdGhlIEVGSSBzcGVjaWZpY2F0aW9uLiAqLworCXVpbnQ4X3QgT1NUeXBlOworCisJLyogRW5kIG9mIHBhcnRpdGlvbiBpbiBDSFMgYWRkcmVzcywgbm90IHVzZWQgYnkgRUZJIGZpcm13YXJlLiAqLworCXVpbnQ4X3QgRW5kSGVhZDsKKworCS8qIEVuZCBvZiBwYXJ0aXRpb24gaW4gQ0hTIGFkZHJlc3MsIG5vdCB1c2VkIGJ5IEVGSSBmaXJtd2FyZS4gKi8KKwl1aW50OF90IEVuZFNlY3RvcjsKKworCS8qIEVuZCBvZiBwYXJ0aXRpb24gaW4gQ0hTIGFkZHJlc3MsIG5vdCB1c2VkIGJ5IEVGSSBmaXJtd2FyZS4gKi8KKwl1aW50OF90IEVuZFRyYWNrOworCisJLyogU3RhcnRpbmcgTEJBIGFkZHJlc3Mgb2YgdGhlIHBhcnRpdGlvbiBvbiB0aGUgZGlzay4gVXNlZCBieQorCSAgIEVGSSBmaXJtd2FyZSB0byBkZWZpbmUgdGhlIHN0YXJ0IG9mIHRoZSBwYXJ0aXRpb24uICovCisJdWludDMyX3QgU3RhcnRpbmdMQkE7CisKKwkvKiBTaXplIG9mIHBhcnRpdGlvbiBpbiBMQkEuIFVzZWQgYnkgRUZJIGZpcm13YXJlIHRvIGRldGVybWluZQorCSAgIHRoZSBzaXplIG9mIHRoZSBwYXJ0aXRpb24uICovCisJdWludDMyX3QgU2l6ZUluTEJBOworfTsKKworLyogUHJvdGVjdGVkIE1hc3RlciBCb290IFJlY29yZCAgJiBMZWdhY3kgTUJSIHNoYXJlIHNhbWUgc3RydWN0dXJlICovCisvKiBOZWVkcyB0byBiZSBwYWNrZWQgYmVjYXVzZSB0aGUgdTE2cyBmb3JjZSBtaXNhbGlnbm1lbnQuICovCitzdHJ1Y3QgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIF9MZWdhY3lNQlJfdCB7CisJdWludDhfdCBCb290Q29kZVs0NDBdOworCXVpbnQzMl90IFVuaXF1ZU1CUlNpZ25hdHVyZTsKKwl1aW50MTZfdCBVbmtub3duOworCVBhcnRpdGlvblJlY29yZF90IFBhcnRpdGlvblJlY29yZFs0XTsKKwl1aW50MTZfdCBTaWduYXR1cmU7Cit9OworCisvKiB1c2VzIGxpYnBhcnRlZCdzIGRpc2tfc3BlY2lmaWMgZmllbGQgaW4gUGVkRGlzaywgdG8gc3RvcmUgb3VyIGluZm8gKi8KK3N0cnVjdCBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgX0dQVERpc2tEYXRhIHsKKwlQZWRHZW9tZXRyeQlkYXRhX2FyZWE7CisJaW50CQllbnRyeV9jb3VudDsKKwllZmlfZ3VpZF90CXV1aWQ7Cit9OworCisvKiB1c2VzIGxpYnBhcnRlZCdzIGRpc2tfc3BlY2lmaWMgZmllbGQgaW4gUGVkUGFydGl0aW9uLCB0byBzdG9yZSBvdXIgaW5mbyAqLwordHlwZWRlZiBzdHJ1Y3QgX0dQVFBhcnRpdGlvbkRhdGEgeworCWVmaV9ndWlkX3QJdHlwZTsKKwllZmlfZ3VpZF90CXV1aWQ7CisJY2hhcgkJbmFtZVszN107CisJaW50CQlsdm07CisJaW50CQlyYWlkOworCWludAkJYm9vdDsKKwlpbnQJCWhwX3NlcnZpY2U7CisgICAgICAgIGludCAgICAgICAgICAgICBoaWRkZW47CisgICAgICAgIGludCAgICAgICAgICAgICBtc2Z0cmVzOworfSBHUFRQYXJ0aXRpb25EYXRhOworCitzdGF0aWMgUGVkRGlza1R5cGUgZ3B0X2Rpc2tfdHlwZTsKKworCitzdGF0aWMgaW5saW5lIHVpbnQzMl90CitwdGhfZ2V0X3NpemUgKGNvbnN0IFBlZERldmljZSogZGV2KQoreworICAgICAgICByZXR1cm4gR1BUX0hFQURFUl9TRUNUT1JTICogZGV2LT5zZWN0b3Jfc2l6ZTsKK30KKworCitzdGF0aWMgaW5saW5lIHVpbnQzMl90CitwdGhfZ2V0X3NpemVfc3RhdGljIChjb25zdCBQZWREZXZpY2UqIGRldikKK3sKKyAgICAgICAgcmV0dXJuIHNpemVvZiAoR3VpZFBhcnRpdGlvblRhYmxlSGVhZGVyX3QpIC0gc2l6ZW9mICh1aW50OF90Kik7Cit9CisKKworc3RhdGljIGlubGluZSB1aW50MzJfdAorcHRoX2dldF9zaXplX3JzdjIgKGNvbnN0IFBlZERldmljZSogZGV2KQoreworICAgICAgICByZXR1cm4gcHRoX2dldF9zaXplKGRldikgLSBwdGhfZ2V0X3NpemVfc3RhdGljKGRldik7Cit9CisKKworc3RhdGljIEd1aWRQYXJ0aXRpb25UYWJsZUhlYWRlcl90KgorcHRoX25ldyAoY29uc3QgUGVkRGV2aWNlKiBkZXYpCit7CisgICAgICAgIEd1aWRQYXJ0aXRpb25UYWJsZUhlYWRlcl90KiBwdGggPSBwZWRfbWFsbG9jICgKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoR3VpZFBhcnRpdGlvblRhYmxlSGVhZGVyX3QpCisgICAgICAgICAgICAgICAgICAgICAgICArIHNpemVvZiAodWludDhfdCkpOworICAgICAgICAKKyAgICAgICAgcHRoLT5SZXNlcnZlZDIgPSBwZWRfbWFsbG9jICggcHRoX2dldF9zaXplX3JzdjIgKGRldikgKTsKKworICAgICAgICByZXR1cm4gcHRoOworfQorCisKK3N0YXRpYyBHdWlkUGFydGl0aW9uVGFibGVIZWFkZXJfdCoKK3B0aF9uZXdfemVyb2VkIChjb25zdCBQZWREZXZpY2UqIGRldikKK3sKKyAgICAgICAgR3VpZFBhcnRpdGlvblRhYmxlSGVhZGVyX3QqIHB0aCA9IHB0aF9uZXcgKGRldik7CisgICAgICAgIAorICAgICAgICBtZW1zZXQgKHB0aCwgMCwgcHRoX2dldF9zaXplX3N0YXRpYyAoZGV2KSk7CisgICAgICAgIG1lbXNldCAocHRoLT5SZXNlcnZlZDIsIDAsIHB0aF9nZXRfc2l6ZV9yc3YyIChkZXYpKTsgICAgICAgIAorICAgICAgICAKKyAgICAgICAgcmV0dXJuIChwdGgpOworfQorICAgICAgICAgICAgICAgICAgICAgICAgCisKK3N0YXRpYyBHdWlkUGFydGl0aW9uVGFibGVIZWFkZXJfdCoKK3B0aF9uZXdfZnJvbV9yYXcgKGNvbnN0IFBlZERldmljZSogZGV2LCBjb25zdCB1aW50OF90KiBwdGhfcmF3KQoreworICAgICAgICBHdWlkUGFydGl0aW9uVGFibGVIZWFkZXJfdCogcHRoID0gcHRoX25ldyAoZGV2KTsgCisKKyAgICAgICAgUEVEX0FTU0VSVCAocHRoX3JhdyAhPSBOVUxMLCByZXR1cm4gMCk7CisgICAgICAgIAorICAgICAgICBtZW1jcHkgKHB0aCwgcHRoX3JhdywgcHRoX2dldF9zaXplX3N0YXRpYyAoZGV2KSk7CisgICAgICAgIG1lbWNweSAocHRoLT5SZXNlcnZlZDIsIHB0aF9yYXcgKyBwdGhfZ2V0X3NpemVfc3RhdGljIChkZXYpLAorICAgICAgICAgICAgICAgICAgICAgICAgcHRoX2dldF9zaXplX3JzdjIgKGRldikpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHB0aDsKK30KKworc3RhdGljIHZvaWQKK3B0aF9mcmVlIChHdWlkUGFydGl0aW9uVGFibGVIZWFkZXJfdCogcHRoKQoreworCVBFRF9BU1NFUlQgKHB0aCAhPSBOVUxMLCByZXR1cm4pOworCVBFRF9BU1NFUlQgKHB0aC0+UmVzZXJ2ZWQyICE9IE5VTEwsIHJldHVybik7CisKKwlwZWRfZnJlZSAocHRoLT5SZXNlcnZlZDIpOworCXBlZF9mcmVlIChwdGgpOworfQorCitzdGF0aWMgdWludDhfdCoKK3B0aF9nZXRfcmF3IChjb25zdCBQZWREZXZpY2UqIGRldiwgY29uc3QgR3VpZFBhcnRpdGlvblRhYmxlSGVhZGVyX3QqIHB0aCkKK3sKKyAgICAgICAgdWludDhfdCogcHRoX3JhdyA9IHBlZF9tYWxsb2MgKHB0aF9nZXRfc2l6ZSAoZGV2KSk7CisgICAgICAgIGludCBzaXplX3N0YXRpYyA9IHB0aF9nZXRfc2l6ZV9zdGF0aWMgKGRldik7CisgICAgICAgIAorICAgICAgICBQRURfQVNTRVJUIChwdGggIT0gTlVMTCwgcmV0dXJuIDApOworICAgICAgICBQRURfQVNTRVJUIChwdGgtPlJlc2VydmVkMiAhPSBOVUxMLCByZXR1cm4gMCk7CisgICAgICAgCisgICAgICAgIG1lbWNweSAocHRoX3JhdywgcHRoLCBzaXplX3N0YXRpYyk7CisgICAgICAgIG1lbWNweSAocHRoX3JhdyArIHNpemVfc3RhdGljLCBwdGgtPlJlc2VydmVkMiwgcHRoX2dldF9zaXplX3JzdjIgKGRldikpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHB0aF9yYXc7Cit9CisKKworLyoqCisgKiBzd2FwX3V1aWRfYW5kX2VmaV9ndWlkKCkgLSBjb252ZXJ0cyBiZXR3ZWVuIHV1aWQgZm9ybWF0cworICogQHV1aWQgLSB1dWlkX3QgaW4gZWl0aGVyIGZvcm1hdCAoY29udmVydHMgaXQgdG8gdGhlIG90aGVyKQorICoKKyAqIFRoZXJlIGFyZSB0d28gZGlmZmVyZW50IHJlcHJlc2VudGF0aW9ucyBmb3IgR2xvYmFsbHkgVW5pcXVlIElkZW50aWZpZXJzCisgKiAoR1VJRHMgb3IgVVVJRHMpLgorICogCisgKiBUaGUgUkZDIHNwZWNpZmllcyBhIFVVSUQgYXMgYSBzdHJpbmcgb2YgMTYgYnl0ZXMsIGVzc2VudGlhbGx5CisgKiBhIGJpZy1lbmRpYW4gYXJyYXkgb2YgY2hhci4KKyAqIEludGVsLCBpbiB0aGVpciBFRkkgU3BlY2lmaWNhdGlvbiwgcmVmZXJlbmNlcyB0aGUgc2FtZSBSRkMsIGJ1dAorICogdGhlbiBkZWZpbmVzIGEgR1VJRCBhcyBhIHN0cnVjdHVyZSBvZiBsaXR0bGUtZW5kaWFuIGZpZWxkcy4KKyAqIENvaW5jaWRlbnRhbGx5LCBib3RoIHN0cnVjdHVyZXMgaGF2ZSB0aGUgc2FtZSBmb3JtYXQgd2hlbiB1bnBhcnNlZC4KKyAqCisgKiBXaGVuIHJlYWQgZnJvbSBkaXNrLCBFRkkgR1VJRHMgYXJlIGluIHN0cnVjdCBvZiBsaXR0bGUgZW5kaWFuIGZvcm1hdCwKKyAqIGFuZCBuZWVkIHRvIGJlIGNvbnZlcnRlZCB0byBiZSB0cmVhdGVkIGFzIHV1aWRfdCBpbiBtZW1vcnkuCisgKgorICogV2hlbiB3cml0aW5nIHRvIGRpc2ssIHV1aWRfdHMgbmVlZCB0byBiZSBjb252ZXJ0ZWQgaW50byBFRkkgR1VJRHMuCisgKgorICogQmxhbWUgSW50ZWwuCisgKi8KK3N0YXRpYyB2b2lkCitzd2FwX3V1aWRfYW5kX2VmaV9ndWlkKHV1aWRfdCB1dWlkKQoreworCWVmaV9ndWlkX3QgKmd1aWQgPSAoZWZpX2d1aWRfdCAqKXV1aWQ7CisKKwlQRURfQVNTRVJUKHV1aWQgIT0gTlVMTCwgcmV0dXJuKTsKKwlndWlkLT50aW1lX2xvdyAgICAgICAgICAgID0gUEVEX1NXQVAzMihndWlkLT50aW1lX2xvdyk7CisJZ3VpZC0+dGltZV9taWQgICAgICAgICAgICA9IFBFRF9TV0FQMTYoZ3VpZC0+dGltZV9taWQpOworCWd1aWQtPnRpbWVfaGlfYW5kX3ZlcnNpb24gPSBQRURfU1dBUDE2KGd1aWQtPnRpbWVfaGlfYW5kX3ZlcnNpb24pOworfQorCisvKiByZXR1cm5zIHRoZSBFRkktc3R5bGUgQ1JDMzIgdmFsdWUgZm9yIGJ1ZgorICoJVGhpcyBmdW5jdGlvbiB1c2VzIHRoZSBjcmMzMiBmdW5jdGlvbiBieSBHYXJ5IFMuIEJyb3duLAorICogYnV0IHNlZWRzIHRoZSBmdW5jdGlvbiB3aXRoIH4wLCBhbmQgeG9yJ3Mgd2l0aCB+MCBhdCB0aGUgZW5kLgorICovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90CitlZmlfY3JjMzIoY29uc3Qgdm9pZCAqYnVmLCB1bnNpZ25lZCBsb25nIGxlbikKK3sKKwlyZXR1cm4gKF9fZWZpX2NyYzMyKGJ1ZiwgbGVuLCB+MEwpIF4gfjBMKTsKK30KKworc3RhdGljIGlubGluZSB1aW50MzJfdAorcHRoX2NyYzMyKGNvbnN0IFBlZERldmljZSogZGV2LCBjb25zdCBHdWlkUGFydGl0aW9uVGFibGVIZWFkZXJfdCogcHRoKQoreworICAgICAgICB1aW50OF90KiBwdGhfcmF3ID0gcHRoX2dldF9yYXcgKGRldiwgcHRoKTsKKyAgICAgICAgdWludDMyX3QgY3JjMzIgPSAwOworICAgICAgIAorICAgICAgICBQRURfQVNTRVJUIChkZXYgIT0gTlVMTCwgcmV0dXJuIDApOworICAgICAgICBQRURfQVNTRVJUIChwdGggIT0gTlVMTCwgcmV0dXJuIDApOworICAgICAgIAorICAgICAgICBjcmMzMiA9IGVmaV9jcmMzMiAocHRoX3JhdywgcHRoX2dldF9zaXplX3N0YXRpYyAoZGV2KSk7CisKKyAgICAgICAgcGVkX2ZyZWUgKHB0aF9yYXcpOworICAgICAgCisgICAgICAgIHJldHVybiBjcmMzMjsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2d1aWRfY21wIChlZmlfZ3VpZF90IGxlZnQsIGVmaV9ndWlkX3QgcmlnaHQpCit7CisJcmV0dXJuIG1lbWNtcCgmbGVmdCwgJnJpZ2h0LCBzaXplb2YoZWZpX2d1aWRfdCkpOworfQorCisvKiBjaGVja3MgaWYgJ21icicgaXMgYSBwcm90ZWN0aXZlIE1CUiBwYXJ0aXRpb24gdGFibGUgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitfcG1icl9pc192YWxpZCAoY29uc3QgTGVnYWN5TUJSX3QqIG1icikKK3sKKwlpbnQgaTsKKworCVBFRF9BU1NFUlQobWJyICE9IE5VTEwsIHJldHVybiAwKTsKKworCWlmIChtYnItPlNpZ25hdHVyZSAhPSBQRURfQ1BVX1RPX0xFMTYoTVNET1NfTUJSX1NJR05BVFVSRSkpCisJCXJldHVybiAwOworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJaWYgKG1ici0+UGFydGl0aW9uUmVjb3JkW2ldLk9TVHlwZSA9PSBFRklfUE1CUl9PU1RZUEVfRUZJKQorCQkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitncHRfcHJvYmUgKGNvbnN0IFBlZERldmljZSAqIGRldikKK3sKKwlHdWlkUGFydGl0aW9uVGFibGVIZWFkZXJfdCogZ3B0ID0gTlVMTDsKKyAgICAgICAgdWludDhfdCogcHRoX3JhdyA9IHBlZF9tYWxsb2MgKHB0aF9nZXRfc2l6ZSAoZGV2KSk7CisJTGVnYWN5TUJSX3QgbGVnYWN5X21icjsKKwlpbnQgZ3B0X3NpZ19mb3VuZCA9IDA7CisKKwlQRURfQVNTRVJUIChkZXYgIT0gTlVMTCwgcmV0dXJuIDApOworCisJaWYgKHBlZF9kZXZpY2VfcmVhZChkZXYsIHB0aF9yYXcsIDEsIEdQVF9IRUFERVJfU0VDVE9SUykKKwl8fCBwZWRfZGV2aWNlX3JlYWQoZGV2LCBwdGhfcmF3LCBkZXYtPmxlbmd0aCAtIDEsIEdQVF9IRUFERVJfU0VDVE9SUykpIHsKKwkJZ3B0ID0gcHRoX25ld19mcm9tX3JhdyAoZGV2LCBwdGhfcmF3KTsKKwkJaWYgKGdwdC0+U2lnbmF0dXJlID09IFBFRF9DUFVfVE9fTEU2NChHUFRfSEVBREVSX1NJR05BVFVSRSkpCisJCQlncHRfc2lnX2ZvdW5kID0gMTsKKwl9CisJCisgICAgICAgIHBlZF9mcmVlIChwdGhfcmF3KTsKKworICAgICAgICBpZiAoZ3B0KQorCSAgICAgICAgcHRoX2ZyZWUgKGdwdCk7CisKKyAgICAgICAgCisJaWYgKCFncHRfc2lnX2ZvdW5kKQorCQlyZXR1cm4gMDsKKworCWlmIChwZWRfZGV2aWNlX3JlYWQoZGV2LCAmbGVnYWN5X21iciwgMCwgR1BUX0hFQURFUl9TRUNUT1JTKSkgeworCQlpZiAoIV9wbWJyX2lzX3ZhbGlkICgmbGVnYWN5X21icikpIHsKKwkJCWludCBleF9zdGF0dXMgPSBwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCQlQRURfRVhDRVBUSU9OX1dBUk5JTkcsCisJCQkJUEVEX0VYQ0VQVElPTl9ZRVNfTk8sCisJCQlfKCIlcyBjb250YWlucyBHUFQgc2lnbmF0dXJlcywgaW5kaWNhdGluZyB0aGF0IGl0IGhhcyAiCisJCQkgICJhIEdQVCB0YWJsZS4gIEhvd2V2ZXIsIGl0IGRvZXMgbm90IGhhdmUgYSB2YWxpZCAiCisJCQkgICJmYWtlIG1zZG9zIHBhcnRpdGlvbiB0YWJsZSwgYXMgaXQgc2hvdWxkLiAgUGVyaGFwcyAiCisJCQkgICJpdCB3YXMgY29ycnVwdGVkIC0tIHBvc3NpYmx5IGJ5IGEgcHJvZ3JhbSB0aGF0ICIKKwkJCSAgImRvZXNuJ3QgdW5kZXJzdGFuZCBHUFQgcGFydGl0aW9uIHRhYmxlcy4gIE9yICIKKwkJCSAgInBlcmhhcHMgeW91IGRlbGV0ZWQgdGhlIEdQVCB0YWJsZSwgYW5kIGFyZSBub3cgIgorCQkJICAidXNpbmcgYW4gbXNkb3MgcGFydGl0aW9uIHRhYmxlLiAgSXMgdGhpcyBhIEdQVCAiCisJCQkgICJwYXJ0aXRpb24gdGFibGU/IiksCisJCQkJZGV2LT5wYXRoKTsKKwkJCWlmIChleF9zdGF0dXMgPT0gUEVEX0VYQ0VQVElPTl9OTykKKwkJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCXJldHVybiAxOworfQorCisjaWZuZGVmIERJU0NPVkVSX09OTFkKKy8qIHdyaXRlcyB6ZXJvcyB0byB0aGUgUE1CUiBhbmQgdGhlIHByaW1hcnkgYW5kIGFsdGVybmF0ZSBHUFRIcyBhbmQgUFRFcyAqLworc3RhdGljIGludAorZ3B0X2Nsb2JiZXIoUGVkRGV2aWNlICogZGV2KQoreworCUxlZ2FjeU1CUl90IHBtYnI7CisgICAgICAgIHVpbnQ4X3QqIHplcm9lZF9wdGhfcmF3ID0gcGVkX21hbGxvYyAocHRoX2dldF9zaXplIChkZXYpKTsKKyAgICAgICAgdWludDhfdCogcHRoX3JhdyA9IHBlZF9tYWxsb2MgKHB0aF9nZXRfc2l6ZSAoZGV2KSk7CisJR3VpZFBhcnRpdGlvblRhYmxlSGVhZGVyX3QqIGdwdDsKKworCVBFRF9BU1NFUlQgKGRldiAhPSBOVUxMLCByZXR1cm4gMCk7CisKKwltZW1zZXQoJnBtYnIsIDAsIHNpemVvZihwbWJyKSk7CisJbWVtc2V0KHplcm9lZF9wdGhfcmF3LCAwLCBwdGhfZ2V0X3NpemUgKGRldikpOworCQorICAgICAgICAvKgorICAgICAgICAgKiBUTyBESVNDVVNTOiBjaGVjayB3aGV0aGVyIGNoZWNrc3VtIGlzIGNvcnJlY3Q/CisgICAgICAgICAqIElmIG5vdCwgd2UgbWlnaHQgZ2V0IGEgd3JvbmcgQWx0ZXJuYXRlTEJBIGZpZWxkIGFuZCBkZXN0cm95CisgICAgICAgICAqIG9uZSBzZWN0b3Igb2YgcmFuZG9tIGRhdGEuCisgICAgICAgICAqLworCWlmICghcGVkX2RldmljZV9yZWFkKGRldiwgcHRoX3JhdywKKwkJCSAgICAgR1BUX1BSSU1BUllfSEVBREVSX0xCQSwgR1BUX0hFQURFUl9TRUNUT1JTKSkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yX2ZyZWU7CisKKyAgICAgICAgZ3B0ID0gcHRoX25ld19mcm9tX3JhdyAoZGV2LCBwdGhfcmF3KTsKKyAgICAgICAgCisJaWYgKCFwZWRfZGV2aWNlX3dyaXRlKGRldiwgJnBtYnIsIEdQVF9QTUJSX0xCQSwgR1BUX1BNQlJfU0VDVE9SUykpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcl9mcmVlX3dpdGhfZ3B0OworCWlmICghcGVkX2RldmljZV93cml0ZShkZXYsICZ6ZXJvZWRfcHRoX3JhdywKKwkJCSAgICAgIEdQVF9QUklNQVJZX0hFQURFUl9MQkEsIEdQVF9IRUFERVJfU0VDVE9SUykpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcl9mcmVlX3dpdGhfZ3B0OworCWlmICghcGVkX2RldmljZV93cml0ZShkZXYsICZ6ZXJvZWRfcHRoX3JhdywgZGV2LT5sZW5ndGggLSBHUFRfSEVBREVSX1NFQ1RPUlMsCisJCQkgICAgICBHUFRfSEVBREVSX1NFQ1RPUlMpKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JfZnJlZV93aXRoX2dwdDsKKworCWlmICgoUGVkU2VjdG9yKSBQRURfTEU2NF9UT19DUFUgKGdwdC0+QWx0ZXJuYXRlTEJBKSA8IGRldi0+bGVuZ3RoIC0gMSkgeworCQlpZiAoIXBlZF9kZXZpY2Vfd3JpdGUoZGV2LCBncHQsCisJCQkJICAgICAgUEVEX0xFNjRfVE9fQ1BVIChncHQtPkFsdGVybmF0ZUxCQSksCisJCQkJICAgICAgR1BUX0hFQURFUl9TRUNUT1JTKSkKKwkJCXJldHVybiAwOworCX0KKyAgICAgICAgCisJcHRoX2ZyZWUgKGdwdCk7CisKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIAorZXJyb3JfZnJlZV93aXRoX2dwdDoKKyAgICAgICAgcHRoX2ZyZWUgKGdwdCk7CitlcnJvcl9mcmVlOgorICAgICAgICBwZWRfZnJlZSAocHRoX3Jhdyk7CisgICAgICAgIHBlZF9mcmVlICh6ZXJvZWRfcHRoX3Jhdyk7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogIURJU0NPVkVSX09OTFkgKi8KKworc3RhdGljIFBlZERpc2sgKgorZ3B0X2FsbG9jIChjb25zdCBQZWREZXZpY2UgKiBkZXYpCit7CisJUGVkRGlzayogZGlzazsKKwlHUFREaXNrRGF0YSAqZ3B0X2Rpc2tfZGF0YTsKKwlQZWRTZWN0b3IgZGF0YV9zdGFydCwgZGF0YV9lbmQ7CisKKwlkaXNrID0gX3BlZF9kaXNrX2FsbG9jICgoUGVkRGV2aWNlKilkZXYsICZncHRfZGlza190eXBlKTsKKwlpZiAoIWRpc2spCisJCWdvdG8gZXJyb3I7CisJZGlzay0+ZGlza19zcGVjaWZpYyA9IGdwdF9kaXNrX2RhdGEgPSBwZWRfbWFsbG9jIChzaXplb2YgKEdQVERpc2tEYXRhKSk7CisJaWYgKCFkaXNrLT5kaXNrX3NwZWNpZmljKQorCQlnb3RvIGVycm9yX2ZyZWVfZGlzazsKKworCWRhdGFfc3RhcnQgPSAyICsgR1BUX0RFRkFVTFRfUEFSVElUSU9OX0VOVFJZX0FSUkFZX1NJWkUgLyBkZXYtPnNlY3Rvcl9zaXplOworCWRhdGFfZW5kID0gZGV2LT5sZW5ndGggLSAyCisJCSAgIC0gR1BUX0RFRkFVTFRfUEFSVElUSU9OX0VOVFJZX0FSUkFZX1NJWkUgLyBkZXYtPnNlY3Rvcl9zaXplOworCXBlZF9nZW9tZXRyeV9pbml0ICgmZ3B0X2Rpc2tfZGF0YS0+ZGF0YV9hcmVhLCBkZXYsIGRhdGFfc3RhcnQsCisJCQkgICBkYXRhX2VuZCAtIGRhdGFfc3RhcnQgKyAxKTsKKwlncHRfZGlza19kYXRhLT5lbnRyeV9jb3VudCA9IEdQVF9ERUZBVUxUX1BBUlRJVElPTl9FTlRSSUVTOworCXV1aWRfZ2VuZXJhdGUgKCh1bnNpZ25lZCBjaGFyKikgJmdwdF9kaXNrX2RhdGEtPnV1aWQpOworCXN3YXBfdXVpZF9hbmRfZWZpX2d1aWQoKHVuc2lnbmVkIGNoYXIqKSgmZ3B0X2Rpc2tfZGF0YS0+dXVpZCkpOworCXJldHVybiBkaXNrOworCitlcnJvcl9mcmVlX2Rpc2s6CisJcGVkX2ZyZWUgKGRpc2spOworZXJyb3I6CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBQZWREaXNrKgorZ3B0X2R1cGxpY2F0ZSAoY29uc3QgUGVkRGlzayogZGlzaykKK3sKKwlQZWREaXNrKiBuZXdfZGlzazsKKwlHUFREaXNrRGF0YSogbmV3X2Rpc2tfZGF0YTsKKwlHUFREaXNrRGF0YSogb2xkX2Rpc2tfZGF0YTsKKworCW5ld19kaXNrID0gcGVkX2Rpc2tfbmV3X2ZyZXNoIChkaXNrLT5kZXYsICZncHRfZGlza190eXBlKTsKKwlpZiAoIW5ld19kaXNrKQorCQlyZXR1cm4gTlVMTDsKKworCW9sZF9kaXNrX2RhdGEgPSBkaXNrLT5kaXNrX3NwZWNpZmljOworCW5ld19kaXNrX2RhdGEgPSBuZXdfZGlzay0+ZGlza19zcGVjaWZpYzsKKworCXBlZF9nZW9tZXRyeV9pbml0ICgmbmV3X2Rpc2tfZGF0YS0+ZGF0YV9hcmVhLCBkaXNrLT5kZXYsCisJCQkgICBvbGRfZGlza19kYXRhLT5kYXRhX2FyZWEuc3RhcnQsCisJCQkgICBvbGRfZGlza19kYXRhLT5kYXRhX2FyZWEubGVuZ3RoKTsKKwluZXdfZGlza19kYXRhLT5lbnRyeV9jb3VudCA9IG9sZF9kaXNrX2RhdGEtPmVudHJ5X2NvdW50OworCW5ld19kaXNrX2RhdGEtPnV1aWQgPSBvbGRfZGlza19kYXRhLT51dWlkOworCXJldHVybiBuZXdfZGlzazsKK30KKworc3RhdGljIHZvaWQKK2dwdF9mcmVlKFBlZERpc2sgKiBkaXNrKQoreworCXBlZF9kaXNrX2RlbGV0ZV9hbGwgKGRpc2spOworCXBlZF9mcmVlIChkaXNrLT5kaXNrX3NwZWNpZmljKTsKKwlfcGVkX2Rpc2tfZnJlZSAoZGlzayk7Cit9CisKK3N0YXRpYyBpbnQKK19oZWFkZXJfaXNfdmFsaWQgKGNvbnN0IFBlZERldmljZSogZGV2LCBHdWlkUGFydGl0aW9uVGFibGVIZWFkZXJfdCogZ3B0KQoreworCXVpbnQzMl90IGNyYywgb3JpZ2NyYzsKKworCWlmIChQRURfTEU2NF9UT19DUFUgKGdwdC0+U2lnbmF0dXJlKSAhPSBHUFRfSEVBREVSX1NJR05BVFVSRSkKKwkJcmV0dXJuIDA7CisJaWYgKFBFRF9MRTMyX1RPX0NQVSAoZ3B0LT5IZWFkZXJTaXplKQorCQkJPiBwdGhfZ2V0X3NpemVfc3RhdGljIChkZXYpKQorCQlyZXR1cm4gMDsKKworCW9yaWdjcmMgPSBncHQtPkhlYWRlckNSQzMyOworCWdwdC0+SGVhZGVyQ1JDMzIgPSAwOworCWNyYyA9IHB0aF9jcmMzMiAoZGV2LCBncHQpOworCWdwdC0+SGVhZGVyQ1JDMzIgPSBvcmlnY3JjOworCisJcmV0dXJuIGNyYyA9PSBQRURfTEUzMl9UT19DUFUgKG9yaWdjcmMpOworfQorCitzdGF0aWMgaW50CitfcmVhZF9oZWFkZXIgKGNvbnN0IFBlZERldmljZSogZGV2LCBHdWlkUGFydGl0aW9uVGFibGVIZWFkZXJfdCoqIGdwdCwKKyAgICAgICAgICAgICAgUGVkU2VjdG9yIHdoZXJlKQoreworICAgICAgICB1aW50OF90KiBwdGhfcmF3ID0gcGVkX21hbGxvYyAocHRoX2dldF9zaXplIChkZXYpKTsKKworCVBFRF9BU1NFUlQgKGRldiAhPSBOVUxMLCByZXR1cm4gMCk7CisKKwlpZiAoIXBlZF9kZXZpY2VfcmVhZCAoZGV2LCBwdGhfcmF3LCB3aGVyZSwgR1BUX0hFQURFUl9TRUNUT1JTKSkgeworICAgICAgICAgICAgICAgIHBlZF9mcmVlIChwdGhfcmF3KTsgCisJCXJldHVybiAwOworICAgICAgICB9CisgCisgICAgICAgICpncHQgPSBwdGhfbmV3X2Zyb21fcmF3IChkZXYsIHB0aF9yYXcpOworICAgICAgICAKKyAgICAgICAgcGVkX2ZyZWUgKHB0aF9yYXcpOworCisgICAgICAgIGlmIChfaGVhZGVyX2lzX3ZhbGlkIChkZXYsICpncHQpKQorICAgICAgICAgICAgICAgIHJldHVybiAxOworCisgICAgICAgIHB0aF9mcmVlICgqZ3B0KTsKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK19wYXJzZV9oZWFkZXIgKFBlZERpc2sqIGRpc2ssIEd1aWRQYXJ0aXRpb25UYWJsZUhlYWRlcl90KiBncHQsIAorCSAgICAgICBpbnQgKnVwZGF0ZV9uZWVkZWQpCit7IAorCUdQVERpc2tEYXRhKiBncHRfZGlza19kYXRhID0gZGlzay0+ZGlza19zcGVjaWZpYzsKKwlQZWRTZWN0b3IgZmlyc3RfdXNhYmxlOworCVBlZFNlY3RvciBsYXN0X3VzYWJsZTsKKwlQZWRTZWN0b3IgbGFzdF91c2FibGVfaWZfZ3Jvd24sIGxhc3RfdXNhYmxlX21pbl9kZWZhdWx0OworCXN0YXRpYyBpbnQgYXNrZWRfYWxyZWFkeTsKKworCVBFRF9BU1NFUlQgKF9oZWFkZXJfaXNfdmFsaWQgKGRpc2stPmRldiwgZ3B0KSwgcmV0dXJuIDApOworCisjaWZuZGVmIERJU0NPVkVSX09OTFkKKwlpZiAoUEVEX0xFMzJfVE9fQ1BVIChncHQtPlJldmlzaW9uKSA+IEdQVF9IRUFERVJfUkVWSVNJT05fVjFfMDIKKwkgICAgfHwgUEVEX0xFMzJfVE9fQ1BVIChncHQtPkhlYWRlclNpemUpICE9IHB0aF9nZXRfc2l6ZV9zdGF0aWMgKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNrLT5kZXYpKSB7CisJCWlmIChwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCVBFRF9FWENFUFRJT05fV0FSTklORywKKwkJCVBFRF9FWENFUFRJT05fSUdOT1JFX0NBTkNFTCwKKwkJCV8oIlRoZSBmb3JtYXQgb2YgdGhlIEdQVCBwYXJ0aXRpb24gdGFibGUgaXMgdmVyc2lvbiAiCisJCQkgICIleCwgd2hpY2ggaXMgbmV3ZXIgdGhhbiB3aGF0IFBhcnRlZCBjYW4gIgorCQkJICAicmVjb2duaXNlLiAgUGxlYXNlIHRlbGwgdXMhICBidWctcGFydGVkQGdudS5vcmciKSwKKwkJCVBFRF9MRTMyX1RPX0NQVSAoZ3B0LT5SZXZpc2lvbikpCisJCQkJIT0gUEVEX0VYQ0VQVElPTl9JR05PUkUpCisJCQlyZXR1cm4gMDsKKwl9CisjZW5kaWYKKworCWZpcnN0X3VzYWJsZSA9IFBFRF9MRTY0X1RPX0NQVSAoZ3B0LT5GaXJzdFVzYWJsZUxCQSk7CisJbGFzdF91c2FibGUgPSBQRURfTEU2NF9UT19DUFUgKGdwdC0+TGFzdFVzYWJsZUxCQSk7CisKKworLyoKKyAgIE5lZWQgdG8gY2hlY2sgd2hldGhlciB0aGUgdm9sdW1lIGhhcyBncm93biwgdGhlIExhc3RVc2FibGVMQkEgaXMKKyAgIG5vcm1hbGx5IHNldCB0byBkaXNrLT5kZXYtPmxlbmd0aCAtIDIgLSBwdGVzX3NpemUgKGF0IGxlYXN0IGZvciBwYXJ0ZWQKKyAgIGNyZWF0ZWQgdm9sdW1lcyksIHdoZXJlIHB0ZXNfc2l6ZSBpcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgKiAKKyAgIHNpemUgb2YgZWFjaCBlbnRyeSAvIHNlY3RvciBzaXplIG9yIDE2ayAvIHNlY3RvciBzaXplLCB3aGF0ZXZlciB0aGUgZ3JlYXRlci4KKyAgIElmIHRoZSB2b2x1bWUgaGFzIGdyb3duLCBvZmZlciB0aGUgdXNlciB0aGUgY2hhbmNlIHRvIHVzZSB0aGUgbmV3CisgICBzcGFjZSBvciBjb250aW51ZSB3aXRoIHRoZSBjdXJyZW50IHVzYWJsZSBhcmVhLiAgT25seSBhc2sgb25jZSBwZXIgCisgICBwYXJ0ZWQgaW52b2NhdGlvbi4KKyovCisgICAKKwlsYXN0X3VzYWJsZV9pZl9ncm93biAKKwkJPSBQRURfQ1BVX1RPX0xFNjQgKGRpc2stPmRldi0+bGVuZ3RoIC0gMiAtIAorCQkoKFBlZFNlY3RvcikoUEVEX0xFMzJfVE9fQ1BVKGdwdC0+TnVtYmVyT2ZQYXJ0aXRpb25FbnRyaWVzKSkgKiAKKwkJKFBlZFNlY3RvcikoUEVEX0xFMzJfVE9fQ1BVKGdwdC0+U2l6ZU9mUGFydGl0aW9uRW50cnkpKSAvIAorCQlkaXNrLT5kZXYtPnNlY3Rvcl9zaXplKSk7CisKKwlsYXN0X3VzYWJsZV9taW5fZGVmYXVsdCA9IGRpc2stPmRldi0+bGVuZ3RoIC0gMiAtIAorCQlHUFRfREVGQVVMVF9QQVJUSVRJT05fRU5UUllfQVJSQVlfU0laRSAvIGRpc2stPmRldi0+c2VjdG9yX3NpemU7CisKKwlpZiAoIGxhc3RfdXNhYmxlX2lmX2dyb3duID4gbGFzdF91c2FibGVfbWluX2RlZmF1bHQgKSB7CisKKwkJbGFzdF91c2FibGVfaWZfZ3Jvd24gPSBsYXN0X3VzYWJsZV9taW5fZGVmYXVsdDsKKwl9CisKKworCVBFRF9BU1NFUlQgKGxhc3RfdXNhYmxlID4gZmlyc3RfdXNhYmxlLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAobGFzdF91c2FibGUgPD0gZGlzay0+ZGV2LT5sZW5ndGgsIHJldHVybiAwKTsKKworCVBFRF9BU1NFUlQgKGxhc3RfdXNhYmxlX2lmX2dyb3duID4gZmlyc3RfdXNhYmxlLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAobGFzdF91c2FibGVfaWZfZ3Jvd24gPD0gZGlzay0+ZGV2LT5sZW5ndGgsIHJldHVybiAwKTsKKworCWlmICggIWFza2VkX2FscmVhZHkgJiYgbGFzdF91c2FibGUgPCBsYXN0X3VzYWJsZV9pZl9ncm93biApIHsKKworCQlQZWRFeGNlcHRpb25PcHRpb24gcTsKKworCQlxID0gcGVkX2V4Y2VwdGlvbl90aHJvdyAoUEVEX0VYQ0VQVElPTl9XQVJOSU5HLAorCQkJUEVEX0VYQ0VQVElPTl9GSVggfCBQRURfRVhDRVBUSU9OX0lHTk9SRSwKKwkJCV8oIk5vdCBhbGwgb2YgdGhlIHNwYWNlIGF2YWlsYWJsZSB0byAlcyBhcHBlYXJzICIKKwkJCSJ0byBiZSB1c2VkLCB5b3UgY2FuIGZpeCB0aGUgR1BUIHRvIHVzZSBhbGwgb2YgdGhlICIKKwkJCSJzcGFjZSAoYW4gZXh0cmEgJWxsdSBibG9ja3MpIG9yIGNvbnRpbnVlIHdpdGggdGhlICIKKwkJCSJjdXJyZW50IHNldHRpbmc/ICIpLCBkaXNrLT5kZXYtPnBhdGgsIAorCQkJKHVpbnQ2NF90KShsYXN0X3VzYWJsZV9pZl9ncm93biAtIGxhc3RfdXNhYmxlKSk7CisKKworCQlpZiAocSA9PSBQRURfRVhDRVBUSU9OX0ZJWCkgeworCisJCQlsYXN0X3VzYWJsZSA9IGxhc3RfdXNhYmxlX2lmX2dyb3duOworCQkJKnVwZGF0ZV9uZWVkZWQgPSAxOworCisJCX0KKwkJZWxzZSBpZiAocSAhPSBQRURfRVhDRVBUSU9OX1VOSEFORExFRCApIHsKKworCQkJYXNrZWRfYWxyZWFkeSA9IDE7CisJCX0KKwl9CisKKwlwZWRfZ2VvbWV0cnlfaW5pdCAoJmdwdF9kaXNrX2RhdGEtPmRhdGFfYXJlYSwgZGlzay0+ZGV2LAorCQkJICAgZmlyc3RfdXNhYmxlLCBsYXN0X3VzYWJsZSAtIGZpcnN0X3VzYWJsZSArIDEpOworCisKKwlncHRfZGlza19kYXRhLT5lbnRyeV9jb3VudAorCQk9IFBFRF9MRTMyX1RPX0NQVSAoZ3B0LT5OdW1iZXJPZlBhcnRpdGlvbkVudHJpZXMpOworCVBFRF9BU1NFUlQgKGdwdF9kaXNrX2RhdGEtPmVudHJ5X2NvdW50ID4gMCwgcmV0dXJuIDApOworCVBFRF9BU1NFUlQgKGdwdF9kaXNrX2RhdGEtPmVudHJ5X2NvdW50IDw9IDgxOTIsIHJldHVybiAwKTsKKworCWdwdF9kaXNrX2RhdGEtPnV1aWQgPSBncHQtPkRpc2tHVUlEOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBQZWRQYXJ0aXRpb24qCitfcGFyc2VfcGFydF9lbnRyeSAoUGVkRGlzayogZGlzaywgR3VpZFBhcnRpdGlvbkVudHJ5X3QqIHB0ZSkKK3sKKwlQZWRQYXJ0aXRpb24qIHBhcnQ7CisJR1BUUGFydGl0aW9uRGF0YSogZ3B0X3BhcnRfZGF0YTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCXBhcnQgPSBwZWRfcGFydGl0aW9uX25ldyAoZGlzaywgMCwgTlVMTCwKKwkJCVBFRF9MRTY0X1RPX0NQVShwdGUtPlN0YXJ0aW5nTEJBKSwKKwkJCVBFRF9MRTY0X1RPX0NQVShwdGUtPkVuZGluZ0xCQSkpOworCWlmICghcGFydCkKKwkJcmV0dXJuIE5VTEw7CisKKwlncHRfcGFydF9kYXRhID0gcGFydC0+ZGlza19zcGVjaWZpYzsKKwlncHRfcGFydF9kYXRhLT50eXBlID0gcHRlLT5QYXJ0aXRpb25UeXBlR3VpZDsKKwlncHRfcGFydF9kYXRhLT51dWlkID0gcHRlLT5VbmlxdWVQYXJ0aXRpb25HdWlkOworCWZvciAoaSA9IDA7IGkgPCA3MiAvIHNpemVvZiAoZWZpX2NoYXIxNl90KTsgaSsrKQorCQlncHRfcGFydF9kYXRhLT5uYW1lW2ldID0gKGVmaV9jaGFyMTZfdCkgUEVEX0xFMTZfVE9fQ1BVKAorCQkJCQkgICAodWludDE2X3QpIHB0ZS0+UGFydGl0aW9uTmFtZVtpXSk7CisJZ3B0X3BhcnRfZGF0YS0+bmFtZVtpXSA9IDA7CisgICAgICAgIAorICAgICAgICBncHRfcGFydF9kYXRhLT5sdm0gPSBncHRfcGFydF9kYXRhLT5yYWlkIAorICAgICAgICAgICAgICAgID0gZ3B0X3BhcnRfZGF0YS0+Ym9vdCA9IGdwdF9wYXJ0X2RhdGEtPmhwX3NlcnZpY2UKKyAgICAgICAgICAgICAgICA9IGdwdF9wYXJ0X2RhdGEtPmhpZGRlbiA9IGdwdF9wYXJ0X2RhdGEtPm1zZnRyZXMgPSAwOworCisgICAgICAgIGlmIChwdGUtPkF0dHJpYnV0ZXMuUmVxdWlyZWRUb0Z1bmN0aW9uICYgMHgxKQorICAgICAgICAgICAgICAgIGdwdF9wYXJ0X2RhdGEtPmhpZGRlbiA9IDE7CisgICAgICAgCisJaWYgKCFndWlkX2NtcCAoZ3B0X3BhcnRfZGF0YS0+dHlwZSwgUEFSVElUSU9OX1NZU1RFTV9HVUlEKSkKKwkJZ3B0X3BhcnRfZGF0YS0+Ym9vdCA9IDE7CisJZWxzZSBpZiAoIWd1aWRfY21wIChncHRfcGFydF9kYXRhLT50eXBlLCBQQVJUSVRJT05fUkFJRF9HVUlEKSkKKwkJZ3B0X3BhcnRfZGF0YS0+cmFpZCA9IDE7CisJZWxzZSBpZiAoIWd1aWRfY21wIChncHRfcGFydF9kYXRhLT50eXBlLCBQQVJUSVRJT05fTFZNX0dVSUQpKQorCQlncHRfcGFydF9kYXRhLT5sdm0gPSAxOworCWVsc2UgaWYgKCFndWlkX2NtcCAoZ3B0X3BhcnRfZGF0YS0+dHlwZSwgUEFSVElUSU9OX0hQU0VSVklDRV9HVUlEKSkKKwkJZ3B0X3BhcnRfZGF0YS0+aHBfc2VydmljZSA9IDE7CisgICAgICAgIGVsc2UgaWYgKCFndWlkX2NtcCAoZ3B0X3BhcnRfZGF0YS0+dHlwZSwgUEFSVElUSU9OX01TRlRfUkVTRVJWRURfR1VJRCkpCisgICAgICAgICAgICAgICAgZ3B0X3BhcnRfZGF0YS0+bXNmdHJlcyA9IDE7CisgICAgICAgIAorCXJldHVybiBwYXJ0OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgSW50ZWwgaXMgY2hhbmdpbmcgdGhlIEVGSSBTcGVjLiAoYWZ0ZXIgdjEuMDIpIHRvIHNheSB0aGF0IGEKKyAqICBkaXNrIGlzIGNvbnNpZGVyZWQgdG8gaGF2ZSBhIEdQVCBsYWJlbCBvbmx5IGlmIHRoZSBHUFQKKyAqICBzdHJ1Y3R1cmVzIGFyZSBjb3JyZWN0LCBhbmQgdGhlIE1CUiBpcyBhY3R1YWxseSBhIFByb3RlY3RpdmUKKyAqICBNQlIgKGhhcyBvbmUgMHhFRSB0eXBlIHBhcnRpdGlvbikuCisgKiAgUHJvYmxlbSBvY2N1cnMgd2hlbiBhIEdQVC1wYXJ0aXRpb25lZCBkaXNrIGlzIHRoZW4KKyAqICBlZGl0ZWQgd2l0aCBhIGxlZ2FjeSAobm9uLUdQVC1hd2FyZSkgYXBwbGljYXRpb24sIHN1Y2ggYXMKKyAqICBmZGlzayAod2hpY2ggZG9lc24ndCBnZW5lcmFsbHkgZXJhc2UgdGhlIFBHUFQgb3IgQUdQVCkuCisgKiAgSG93IHNob3VsZCBzdWNoIGEgZGlzayBnZXQgaGFuZGxlZD8gIEFzIGEgR1BUIGRpc2sgKHRocm93aW5nCisgKiAgYXdheSB0aGUgZmRpc2sgY2hhbmdlcyksIG9yIGFzIGFuIE1TRE9TIGRpc2sgKHRocm93aW5nIGF3YXkKKyAqICB0aGUgR1BUIGluZm9ybWF0aW9uKS4gIFByZXZpb3VzbHksIEkndmUgdGFrZW4gdGhlIEdQVC1pcy1yaWdodCwKKyAqICBNQlIgaXMgd3JvbmcsIGFwcHJvYWNoLCB0byBzdGF5IGNvbnNpc3RlbnQgd2l0aCB0aGUgRUZJIFNwZWMuCisgKiAgSW50ZWwgZGlzYWdyZWVzLCBzYXlpbmcgdGhlIGRpc2sgc2hvdWxkIHRoZW4gYmUgdHJlYXRlZAorICogIGFzIGhhdmluZyBhIG1zZG9zIGxhYmVsLCBub3QgYSBHUFQgbGFiZWwuICBJZiB0aGlzIGlzIHRydWUsCisgKiAgdGhlbiB3aGF0J3MgdGhlIHBvaW50IG9mIGhhdmluZyBhbiBBR1BULCBzaW5jZSBpZiB0aGUgUEdQVAorICogIGlzIHNjcmV3ZWQgdXAsIGxpa2VseSB0aGUgUE1CUiBpcyB0b28sIGFuZCB0aGUgUE1CUiBiZWNvbWVzCisgKiAgYSBzaW5nbGUgcG9pbnQgb2YgZmFpbHVyZS4KKyAqICBTbywgaW4gdGhlIExpbnV4IGtlcm5lbCwgSSdtIGdvaW5nIHRvIHRlc3QgZm9yIFBNQlIsIGFuZAorICogIHdhcm4gaWYgaXQncyBub3QgdGhlcmUsIGFuZCB0cmVhdCB0aGUgZGlzayBhcyBNU0RPUywgd2l0aCBhIG5vdGUKKyAqICBmb3IgdXNlcnMgdG8gdXNlIFBhcnRlZCB0byAiZml4IHVwIiB0aGVpciBkaXNrIGlmIHRoZXkKKyAqICByZWFsbHkgd2FudCBpdCB0byBiZSBjb25zaWRlcmVkIEdQVC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50CitncHRfcmVhZCAoUGVkRGlzayAqIGRpc2spCit7CisJR1BURGlza0RhdGEgKmdwdF9kaXNrX2RhdGEgPSBkaXNrLT5kaXNrX3NwZWNpZmljOworCUd1aWRQYXJ0aXRpb25UYWJsZUhlYWRlcl90KiBncHQ7CisJR3VpZFBhcnRpdGlvbkVudHJ5X3QqIHB0ZXM7CisJaW50IHB0ZXNfc2l6ZTsKKwlpbnQgaTsKKyNpZm5kZWYgRElTQ09WRVJfT05MWQorCWludCB3cml0ZV9iYWNrID0gMDsKKyNlbmRpZgorCisJcGVkX2Rpc2tfZGVsZXRlX2FsbCAoZGlzayk7CisKKyAgICAgICAgLyogCisgICAgICAgICAqIG1vdGl2YXRpb246IGxldCB0aGUgdXNlciBkZWNpZGUgYWJvdXQgdGhlIHBtYnIuLi4gZHVyaW5nCisgICAgICAgICAqIHBlZF9kaXNrX3Byb2JlKCksIHRoZXkgcHJvYmFibHkgZGlkbid0IGdldCBhIGNob2ljZS4uLgorICAgICAgICAgKi8KKwlpZiAoIWdwdF9wcm9iZSAoZGlzay0+ZGV2KSkKKwkJZ290byBlcnJvcjsKKworCWlmIChfcmVhZF9oZWFkZXIgKGRpc2stPmRldiwgJmdwdCwgMSkpIHsKKwkJUEVEX0FTU0VSVCAoKFBlZFNlY3RvcikgUEVEX0xFNjRfVE9fQ1BVIChncHQtPkFsdGVybmF0ZUxCQSkKKwkJCQk8PSBkaXNrLT5kZXYtPmxlbmd0aCAtIDEsIGdvdG8gZXJyb3JfZnJlZV9ncHQpOworCQlpZiAoKFBlZFNlY3RvcikgUEVEX0xFNjRfVE9fQ1BVIChncHQtPkFsdGVybmF0ZUxCQSkKKwkJCQk8IGRpc2stPmRldi0+bGVuZ3RoIC0gMSkgeworCQkJY2hhciogemVyb3MgPSBwZWRfbWFsbG9jIChwdGhfZ2V0X3NpemUgKGRpc2stPmRldikpOworCisjaWZuZGVmIERJU0NPVkVSX09OTFkKKwkJCWlmIChwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCQlQRURfRVhDRVBUSU9OX0VSUk9SLAorCQkJCVBFRF9FWENFUFRJT05fRklYIHwgUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCV8oIlRoZSBiYWNrdXAgR1BUIHRhYmxlIGlzIG5vdCBhdCB0aGUgZW5kIG9mIHRoZSBkaXNrLCBhcyBpdCAiCisJCSAgInNob3VsZCBiZS4gIFRoaXMgbWlnaHQgbWVhbiB0aGF0IGFub3RoZXIgb3BlcmF0aW5nIHN5c3RlbSAiCisJCSAgImJlbGlldmVzIHRoZSBkaXNrIGlzIHNtYWxsZXIuICBGaXgsIGJ5IG1vdmluZyB0aGUgYmFja3VwICIKKwkJICAidG8gdGhlIGVuZCAoYW5kIHJlbW92aW5nIHRoZSBvbGQgYmFja3VwKT8iKSkKKwkJCQkJPT0gUEVEX0VYQ0VQVElPTl9DQU5DRUwpCisJCQkJZ290byBlcnJvcl9mcmVlX2dwdDsKKworCQkJd3JpdGVfYmFjayA9IDE7CisJCQltZW1zZXQgKHplcm9zLCAwLCBkaXNrLT5kZXYtPnNlY3Rvcl9zaXplKTsKKwkJCXBlZF9kZXZpY2Vfd3JpdGUgKGRpc2stPmRldiwgemVyb3MsCisJCQkJCSAgUEVEX0xFNjRfVE9fQ1BVIChncHQtPkFsdGVybmF0ZUxCQSksCisJCQkJCSAgMSk7CisjZW5kaWYgLyogIURJU0NPVkVSX09OTFkgKi8KKwkJfQorCX0gZWxzZSB7IC8qIHByaW1hcnkgR1BUICpub3QqIG9rICovCisJCWludCBhbHRlcm5hdGVfb2sgPSAwOworCisjaWZuZGVmIERJU0NPVkVSX09OTFkKKwkJd3JpdGVfYmFjayA9IDE7CisjZW5kaWYKKworCQlpZiAoKFBlZFNlY3RvcikgUEVEX0xFNjRfVE9fQ1BVIChncHQtPkFsdGVybmF0ZUxCQSkKKwkJCQk8IGRpc2stPmRldi0+bGVuZ3RoIC0gMSkgeworCQkJYWx0ZXJuYXRlX29rID0gX3JlYWRfaGVhZGVyIChkaXNrLT5kZXYsICZncHQsCisJCQkJCSAgICBQRURfTEU2NF9UT19DUFUoZ3B0LT5BbHRlcm5hdGVMQkEpKTsKKwkJfQorCQlpZiAoIWFsdGVybmF0ZV9vaykgeworCQkJYWx0ZXJuYXRlX29rID0gX3JlYWRfaGVhZGVyIChkaXNrLT5kZXYsICZncHQsCisJCQkJCQkgICAgIGRpc2stPmRldi0+bGVuZ3RoIC0gMSk7CisJCX0KKworCQlpZiAoYWx0ZXJuYXRlX29rKSB7CisJCQlpZiAocGVkX2V4Y2VwdGlvbl90aHJvdyAoCisJCQkJUEVEX0VYQ0VQVElPTl9FUlJPUiwKKwkJCQlQRURfRVhDRVBUSU9OX09LX0NBTkNFTCwKKwkJCQlfKCJUaGUgcHJpbWFyeSBHUFQgdGFibGUgaXMgY29ycnVwdCwgYnV0IHRoZSAiCisJCQkJICAiYmFja3VwIGFwcGVhcnMgT0ssIHNvIHRoYXQgd2lsbCBiZSB1c2VkLiIpKQorCQkJCSAgICA9PSBQRURfRVhDRVBUSU9OX0NBTkNFTCkKKwkJCQlnb3RvIGVycm9yX2ZyZWVfZ3B0OworCQl9IGVsc2UgeworCQkJcGVkX2V4Y2VwdGlvbl90aHJvdyAoCisJCQkJUEVEX0VYQ0VQVElPTl9FUlJPUiwKKwkJCQlQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCQlfKCJCb3RoIHRoZSBwcmltYXJ5IGFuZCBiYWNrdXAgR1BUIHRhYmxlcyAiCisJCQkJICAiYXJlIGNvcnJ1cHQuICBUcnkgbWFraW5nIGEgZnJlc2ggdGFibGUsICIKKwkJCQkgICJhbmQgdXNpbmcgUGFydGVkJ3MgcmVzY3VlIGZlYXR1cmUgdG8gIgorCQkJCSAgInJlY292ZXIgcGFydGl0aW9ucy4iKSk7CisJCQlnb3RvIGVycm9yOworCQl9CisJfQorCisJaWYgKCFfcGFyc2VfaGVhZGVyIChkaXNrLCBncHQsICZ3cml0ZV9iYWNrKSkKKwkJZ290byBlcnJvcl9mcmVlX2dwdDsKKworCisJcHRlc19zaXplID0gc2l6ZW9mIChHdWlkUGFydGl0aW9uRW50cnlfdCkgKiBncHRfZGlza19kYXRhLT5lbnRyeV9jb3VudDsKKwlwdGVzID0gKEd1aWRQYXJ0aXRpb25FbnRyeV90KikgcGVkX21hbGxvYyAocHRlc19zaXplKTsKKwlpZiAoIXBlZF9kZXZpY2VfcmVhZCAoZGlzay0+ZGV2LCBwdGVzLAorCQkJICAgICAgUEVEX0xFNjRfVE9fQ1BVKGdwdC0+UGFydGl0aW9uRW50cnlMQkEpLAorCQkJICAgICAgcHRlc19zaXplIC8gZGlzay0+ZGV2LT5zZWN0b3Jfc2l6ZSkpCisJCWdvdG8gZXJyb3JfZnJlZV9wdGVzOworCisJZm9yIChpID0gMDsgaSA8IGdwdF9kaXNrX2RhdGEtPmVudHJ5X2NvdW50OyBpKyspIHsKKwkJUGVkUGFydGl0aW9uKiBwYXJ0OworCQlQZWRDb25zdHJhaW50KiBjb25zdHJhaW50X2V4YWN0OworCisJCWlmICghZ3VpZF9jbXAgKHB0ZXNbaV0uUGFydGl0aW9uVHlwZUd1aWQsIFVOVVNFRF9FTlRSWV9HVUlEKSkKKwkJCWNvbnRpbnVlOworCisJCXBhcnQgPSBfcGFyc2VfcGFydF9lbnRyeSAoZGlzaywgJnB0ZXNbaV0pOworCQlpZiAoIXBhcnQpCisJCQlnb3RvIGVycm9yX2RlbGV0ZV9hbGw7CisKKwkJcGFydC0+ZnNfdHlwZSA9IHBlZF9maWxlX3N5c3RlbV9wcm9iZSAoJnBhcnQtPmdlb20pOworCQlwYXJ0LT5udW0gPSBpICsgMTsKKworCQljb25zdHJhaW50X2V4YWN0ID0gcGVkX2NvbnN0cmFpbnRfZXhhY3QgKCZwYXJ0LT5nZW9tKTsKKwkJaWYgKCFwZWRfZGlza19hZGRfcGFydGl0aW9uKGRpc2ssIHBhcnQsIGNvbnN0cmFpbnRfZXhhY3QpKSB7CisJCQlwZWRfcGFydGl0aW9uX2Rlc3Ryb3kgKHBhcnQpOworCQkJZ290byBlcnJvcl9kZWxldGVfYWxsOworCQl9CisJCXBlZF9jb25zdHJhaW50X2Rlc3Ryb3kgKGNvbnN0cmFpbnRfZXhhY3QpOworCX0KKwlwZWRfZnJlZSAocHRlcyk7CisKKyNpZm5kZWYgRElTQ09WRVJfT05MWQorCWlmICh3cml0ZV9iYWNrKQorCQlwZWRfZGlza19jb21taXRfdG9fZGV2IChkaXNrKTsKKyNlbmRpZgorCisJcmV0dXJuIDE7CisKK2Vycm9yX2RlbGV0ZV9hbGw6CisJcGVkX2Rpc2tfZGVsZXRlX2FsbCAoZGlzayk7CitlcnJvcl9mcmVlX3B0ZXM6CisJcGVkX2ZyZWUgKHB0ZXMpOworZXJyb3JfZnJlZV9ncHQ6CisgICAgICAgIHB0aF9mcmVlIChncHQpOworZXJyb3I6CisJcmV0dXJuIDA7Cit9CisKKyNpZm5kZWYgRElTQ09WRVJfT05MWQorLyogV3JpdGVzIHRoZSBwcm90ZWN0aXZlIE1CUiAodG8ga2VlcCBET1MgaGFwcHkpICovCitzdGF0aWMgaW50Citfd3JpdGVfcG1iciAoUGVkRGV2aWNlICogZGV2KQoreworCUxlZ2FjeU1CUl90IHBtYnI7CisKKwltZW1zZXQoJnBtYnIsIDAsIHNpemVvZihwbWJyKSk7CisJcG1ici5TaWduYXR1cmUgPSBQRURfQ1BVX1RPX0xFMTYoTVNET1NfTUJSX1NJR05BVFVSRSk7CisJcG1ici5QYXJ0aXRpb25SZWNvcmRbMF0uT1NUeXBlICAgICAgPSBFRklfUE1CUl9PU1RZUEVfRUZJOworCXBtYnIuUGFydGl0aW9uUmVjb3JkWzBdLlN0YXJ0U2VjdG9yID0gMTsKKwlwbWJyLlBhcnRpdGlvblJlY29yZFswXS5FbmRIZWFkICAgICA9IDB4RkU7CisJcG1ici5QYXJ0aXRpb25SZWNvcmRbMF0uRW5kU2VjdG9yICAgPSAweEZGOworCXBtYnIuUGFydGl0aW9uUmVjb3JkWzBdLkVuZFRyYWNrICAgID0gMHhGRjsKKwlwbWJyLlBhcnRpdGlvblJlY29yZFswXS5TdGFydGluZ0xCQSA9IFBFRF9DUFVfVE9fTEUzMigxKTsKKwlpZiAoKGRldi0+bGVuZ3RoIC0gMVVMTCkgPiAweEZGRkZGRkZGVUxMKSAKKwkJcG1ici5QYXJ0aXRpb25SZWNvcmRbMF0uU2l6ZUluTEJBID0gUEVEX0NQVV9UT19MRTMyKDB4RkZGRkZGRkYpOworCWVsc2UKKwkJcG1ici5QYXJ0aXRpb25SZWNvcmRbMF0uU2l6ZUluTEJBID0gUEVEX0NQVV9UT19MRTMyKGRldi0+bGVuZ3RoIC0gMVVMKTsKKworCXJldHVybiBwZWRfZGV2aWNlX3dyaXRlIChkZXYsICZwbWJyLCBHUFRfUE1CUl9MQkEsIEdQVF9QTUJSX1NFQ1RPUlMpOworfQorCitzdGF0aWMgdm9pZAorX2dlbmVyYXRlX2hlYWRlciAoY29uc3QgUGVkRGlzayogZGlzaywgaW50IGFsdGVybmF0ZSwgdWludDMyX3QgcHRlc19jcmMsCisJCSAgR3VpZFBhcnRpdGlvblRhYmxlSGVhZGVyX3QqKiBncHRfcCkKK3sKKwlHUFREaXNrRGF0YSogZ3B0X2Rpc2tfZGF0YSA9IGRpc2stPmRpc2tfc3BlY2lmaWM7CisgICAgICAgIEd1aWRQYXJ0aXRpb25UYWJsZUhlYWRlcl90KiBncHQ7CisKKyAgICAgICAgKmdwdF9wID0gcHRoX25ld196ZXJvZWQgKGRpc2stPmRldik7CisgICAgICAgIAorICAgICAgICBncHQgPSAqZ3B0X3A7CisgICAgICAgIAorCWdwdC0+U2lnbmF0dXJlID0gUEVEX0NQVV9UT19MRTY0IChHUFRfSEVBREVSX1NJR05BVFVSRSk7CisJZ3B0LT5SZXZpc2lvbiA9IFBFRF9DUFVfVE9fTEUzMiAoR1BUX0hFQURFUl9SRVZJU0lPTl9WMV8wMCk7CisKKwkvKiBwZXIgMS4wMCBzcGVjICovCisJZ3B0LT5IZWFkZXJTaXplID0gUEVEX0NQVV9UT19MRTMyIChwdGhfZ2V0X3NpemVfc3RhdGljIChkaXNrLT5kZXYpKTsKKwlncHQtPkhlYWRlckNSQzMyID0gMDsKKwlncHQtPlJlc2VydmVkMSA9IDA7CisKKwlpZiAoYWx0ZXJuYXRlKSB7CisJCVBlZFNlY3RvciBwdGVzX3NpemUgPSBncHRfZGlza19kYXRhLT5lbnRyeV9jb3VudAorCQkJCSAgICAgICogc2l6ZW9mIChHdWlkUGFydGl0aW9uRW50cnlfdCkgLyBkaXNrLT5kZXYtPnNlY3Rvcl9zaXplOworCisJCWdwdC0+TXlMQkEgPSBQRURfQ1BVX1RPX0xFNjQgKGRpc2stPmRldi0+bGVuZ3RoIC0gMSk7CisJCWdwdC0+QWx0ZXJuYXRlTEJBID0gUEVEX0NQVV9UT19MRTY0ICgxKTsKKwkJZ3B0LT5QYXJ0aXRpb25FbnRyeUxCQQorCQkJPSBQRURfQ1BVX1RPX0xFNjQgKGRpc2stPmRldi0+bGVuZ3RoIC0gMSAtIHB0ZXNfc2l6ZSk7CisJfSBlbHNlIHsKKwkJZ3B0LT5NeUxCQSA9IFBFRF9DUFVfVE9fTEU2NCAoMSk7CisJCWdwdC0+QWx0ZXJuYXRlTEJBID0gUEVEX0NQVV9UT19MRTY0IChkaXNrLT5kZXYtPmxlbmd0aCAtIDEpOworCQlncHQtPlBhcnRpdGlvbkVudHJ5TEJBID0gUEVEX0NQVV9UT19MRTY0ICgyKTsKKwl9CisKKwlncHQtPkZpcnN0VXNhYmxlTEJBID0gUEVEX0NQVV9UT19MRTY0IChncHRfZGlza19kYXRhLT5kYXRhX2FyZWEuc3RhcnQpOworCWdwdC0+TGFzdFVzYWJsZUxCQSA9IFBFRF9DUFVfVE9fTEU2NCAoZ3B0X2Rpc2tfZGF0YS0+ZGF0YV9hcmVhLmVuZCk7CisJZ3B0LT5EaXNrR1VJRCA9IGdwdF9kaXNrX2RhdGEtPnV1aWQ7CisJZ3B0LT5OdW1iZXJPZlBhcnRpdGlvbkVudHJpZXMKKwkJPSBQRURfQ1BVX1RPX0xFMzIgKGdwdF9kaXNrX2RhdGEtPmVudHJ5X2NvdW50KTsKKwlncHQtPlNpemVPZlBhcnRpdGlvbkVudHJ5CisJCT0gUEVEX0NQVV9UT19MRTMyIChzaXplb2YgKEd1aWRQYXJ0aXRpb25FbnRyeV90KSk7CisJZ3B0LT5QYXJ0aXRpb25FbnRyeUFycmF5Q1JDMzIgPSBQRURfQ1BVX1RPX0xFMzIgKHB0ZXNfY3JjKTsKKwlncHQtPkhlYWRlckNSQzMyID0gUEVEX0NQVV9UT19MRTMyIChwdGhfY3JjMzIgKGRpc2stPmRldiwgZ3B0KSk7Cit9CisKK3N0YXRpYyB2b2lkCitfcGFydGl0aW9uX2dlbmVyYXRlX3BhcnRfZW50cnkgKFBlZFBhcnRpdGlvbiogcGFydCwgR3VpZFBhcnRpdGlvbkVudHJ5X3QqIHB0ZSkKK3sKKwlHUFRQYXJ0aXRpb25EYXRhKiBncHRfcGFydF9kYXRhID0gcGFydC0+ZGlza19zcGVjaWZpYzsKKwl1bnNpZ25lZCBpbnQgaTsKKworCVBFRF9BU1NFUlQgKGdwdF9wYXJ0X2RhdGEgIT0gTlVMTCwgcmV0dXJuKTsKKworCXB0ZS0+UGFydGl0aW9uVHlwZUd1aWQgPSBncHRfcGFydF9kYXRhLT50eXBlOworCXB0ZS0+VW5pcXVlUGFydGl0aW9uR3VpZCA9IGdwdF9wYXJ0X2RhdGEtPnV1aWQ7CisJcHRlLT5TdGFydGluZ0xCQSA9IFBFRF9DUFVfVE9fTEU2NChwYXJ0LT5nZW9tLnN0YXJ0KTsKKwlwdGUtPkVuZGluZ0xCQSA9IFBFRF9DUFVfVE9fTEU2NChwYXJ0LT5nZW9tLmVuZCk7CisJbWVtc2V0ICgmcHRlLT5BdHRyaWJ1dGVzLCAwLCBzaXplb2YgKEd1aWRQYXJ0aXRpb25FbnRyeUF0dHJpYnV0ZXNfdCkpOworCisgICAgICAgIGlmIChncHRfcGFydF9kYXRhLT5oaWRkZW4pCisgICAgICAgICAgICAgICAgcHRlLT5BdHRyaWJ1dGVzLlJlcXVpcmVkVG9GdW5jdGlvbiA9IDE7CisgICAgICAgIAorCWZvciAoaSA9IDA7IGkgPCA3MiAvIHNpemVvZihlZmlfY2hhcjE2X3QpOyBpKyspCisJCXB0ZS0+UGFydGl0aW9uTmFtZVtpXQorCQkJPSAoZWZpX2NoYXIxNl90KSBQRURfQ1BVX1RPX0xFMTYoCisJCQkJKHVpbnQxNl90KSBncHRfcGFydF9kYXRhLT5uYW1lW2ldKTsKK30KKworc3RhdGljIGludAorZ3B0X3dyaXRlKGNvbnN0IFBlZERpc2sgKiBkaXNrKQoreworCUdQVERpc2tEYXRhKiBncHRfZGlza19kYXRhOworCUd1aWRQYXJ0aXRpb25FbnRyeV90KiBwdGVzOworCXVpbnQzMl90IHB0ZXNfY3JjOworICAgICAgICB1aW50OF90KiBwdGhfcmF3ID0gcGVkX21hbGxvYyAocHRoX2dldF9zaXplIChkaXNrLT5kZXYpKTsKKwlHdWlkUGFydGl0aW9uVGFibGVIZWFkZXJfdCogZ3B0OworCVBlZFBhcnRpdGlvbiogcGFydDsKKwlpbnQgcHRlc19zaXplOworCisJUEVEX0FTU0VSVCAoZGlzayAhPSBOVUxMLCBnb3RvIGVycm9yKTsKKwlQRURfQVNTRVJUIChkaXNrLT5kZXYgIT0gTlVMTCwgZ290byBlcnJvcik7CisJUEVEX0FTU0VSVCAoZGlzay0+ZGlza19zcGVjaWZpYyAhPSBOVUxMLCBnb3RvIGVycm9yKTsKKworCWdwdF9kaXNrX2RhdGEgPSBkaXNrLT5kaXNrX3NwZWNpZmljOworCisJcHRlc19zaXplID0gc2l6ZW9mIChHdWlkUGFydGl0aW9uRW50cnlfdCkgKiBncHRfZGlza19kYXRhLT5lbnRyeV9jb3VudDsKKwlwdGVzID0gKEd1aWRQYXJ0aXRpb25FbnRyeV90KikgcGVkX21hbGxvYyAocHRlc19zaXplKTsKKwlpZiAoIXB0ZXMpCisJCWdvdG8gZXJyb3I7CisJbWVtc2V0IChwdGVzLCAwLCBwdGVzX3NpemUpOworCWZvciAocGFydCA9IHBlZF9kaXNrX25leHRfcGFydGl0aW9uIChkaXNrLCBOVUxMKTsgcGFydDsKKwkgICAgIHBhcnQgPSBwZWRfZGlza19uZXh0X3BhcnRpdGlvbiAoZGlzaywgcGFydCkpIHsKKwkJaWYgKHBhcnQtPnR5cGUgIT0gMCkKKwkJCWNvbnRpbnVlOworCQlfcGFydGl0aW9uX2dlbmVyYXRlX3BhcnRfZW50cnkgKHBhcnQsICZwdGVzW3BhcnQtPm51bSAtIDFdKTsKKwl9CisKKwlwdGVzX2NyYyA9IGVmaV9jcmMzMiAocHRlcywgcHRlc19zaXplKTsKKworCS8qIFdyaXRlIHByb3RlY3RpdmUgTUJSICovCisJaWYgKCFfd3JpdGVfcG1iciAoZGlzay0+ZGV2KSkKKwkJZ290byBlcnJvcl9mcmVlX3B0ZXM7CisKKwkvKiBXcml0ZSBQVEggYW5kIFBURXMgKi8KKwlfZ2VuZXJhdGVfaGVhZGVyIChkaXNrLCAwLCBwdGVzX2NyYywgJmdwdCk7CisgICAgICAgIHB0aF9yYXcgPSBwdGhfZ2V0X3JhdyAoZGlzay0+ZGV2LCBncHQpOworCWlmICghcGVkX2RldmljZV93cml0ZSAoZGlzay0+ZGV2LCBwdGhfcmF3LCAxLCAxKSkKKwkJZ290byBlcnJvcl9mcmVlX3B0ZXM7CisJaWYgKCFwZWRfZGV2aWNlX3dyaXRlIChkaXNrLT5kZXYsIHB0ZXMsIDIsIHB0ZXNfc2l6ZSAvIGRpc2stPmRldi0+c2VjdG9yX3NpemUpKQorCQlnb3RvIGVycm9yX2ZyZWVfcHRlczsKKworCS8qIFdyaXRlIEFsdGVybmF0ZSBQVEggJiBQVEVzICovCisJX2dlbmVyYXRlX2hlYWRlciAoZGlzaywgMSwgcHRlc19jcmMsICZncHQpOworICAgICAgICBwdGhfcmF3ID0gcHRoX2dldF9yYXcgKGRpc2stPmRldiwgZ3B0KTsKKwlpZiAoIXBlZF9kZXZpY2Vfd3JpdGUgKGRpc2stPmRldiwgcHRoX3JhdywgZGlzay0+ZGV2LT5sZW5ndGggLSAxLCAxKSkKKwkJZ290byBlcnJvcl9mcmVlX3B0ZXM7CisJaWYgKCFwZWRfZGV2aWNlX3dyaXRlIChkaXNrLT5kZXYsIHB0ZXMsCisJCQkgICAgICAgZGlzay0+ZGV2LT5sZW5ndGggLSAxIC0gcHRlc19zaXplIC8gZGlzay0+ZGV2LT5zZWN0b3Jfc2l6ZSwKKwkJCSAgICAgICBwdGVzX3NpemUgLyBkaXNrLT5kZXYtPnNlY3Rvcl9zaXplKSkKKwkJZ290byBlcnJvcl9mcmVlX3B0ZXM7CisKKwlwZWRfZnJlZSAocHRlcyk7CisJcmV0dXJuIHBlZF9kZXZpY2Vfc3luYyAoZGlzay0+ZGV2KTsKKworZXJyb3JfZnJlZV9wdGVzOgorCXBlZF9mcmVlIChwdGVzKTsKK2Vycm9yOgorCXJldHVybiAwOworfQorI2VuZGlmIC8qICFESVNDT1ZFUl9PTkxZICovCisKK3N0YXRpYyBpbnQKK2FkZF9tZXRhZGF0YV9wYXJ0KFBlZERpc2sgKiBkaXNrLCBQZWRTZWN0b3Igc3RhcnQsIFBlZFNlY3RvciBsZW5ndGgpCit7CisJUGVkUGFydGl0aW9uKiBwYXJ0OworCVBlZENvbnN0cmFpbnQqIGNvbnN0cmFpbnRfZXhhY3Q7CisJUEVEX0FTU0VSVChkaXNrICE9IE5VTEwsIHJldHVybiAwKTsKKworCXBhcnQgPSBwZWRfcGFydGl0aW9uX25ldyAoZGlzaywgUEVEX1BBUlRJVElPTl9NRVRBREFUQSwgTlVMTCwKKwkJCQkgIHN0YXJ0LCBzdGFydCArIGxlbmd0aCAtIDEpOworCWlmICghcGFydCkKKwkJZ290byBlcnJvcjsKKworCWNvbnN0cmFpbnRfZXhhY3QgPSBwZWRfY29uc3RyYWludF9leGFjdCAoJnBhcnQtPmdlb20pOworCWlmICghcGVkX2Rpc2tfYWRkX3BhcnRpdGlvbiAoZGlzaywgcGFydCwgY29uc3RyYWludF9leGFjdCkpCisJCWdvdG8gZXJyb3JfZGVzdHJveV9jb25zdHJhaW50OworCXBlZF9jb25zdHJhaW50X2Rlc3Ryb3kgKGNvbnN0cmFpbnRfZXhhY3QpOworCXJldHVybiAxOworCitlcnJvcl9kZXN0cm95X2NvbnN0cmFpbnQ6CisJcGVkX2NvbnN0cmFpbnRfZGVzdHJveSAoY29uc3RyYWludF9leGFjdCk7CisJcGVkX3BhcnRpdGlvbl9kZXN0cm95IChwYXJ0KTsKK2Vycm9yOgorCXJldHVybiAwOworfQorCitzdGF0aWMgUGVkUGFydGl0aW9uKgorZ3B0X3BhcnRpdGlvbl9uZXcgKGNvbnN0IFBlZERpc2sqIGRpc2ssCisJCSAgUGVkUGFydGl0aW9uVHlwZSBwYXJ0X3R5cGUsIGNvbnN0IFBlZEZpbGVTeXN0ZW1UeXBlKiBmc190eXBlLAorCQkgIFBlZFNlY3RvciBzdGFydCwgUGVkU2VjdG9yIGVuZCkKK3sKKwlQZWRQYXJ0aXRpb24qIHBhcnQ7CisJR1BUUGFydGl0aW9uRGF0YSogZ3B0X3BhcnRfZGF0YTsKKworCXBhcnQgPSBfcGVkX3BhcnRpdGlvbl9hbGxvYyAoZGlzaywgcGFydF90eXBlLCBmc190eXBlLCBzdGFydCwgZW5kKTsKKwlpZiAoIXBhcnQpCisJCWdvdG8gZXJyb3I7CisKKwlpZiAocGFydF90eXBlICE9IDApCisJCXJldHVybiBwYXJ0OworCisJZ3B0X3BhcnRfZGF0YSA9IHBhcnQtPmRpc2tfc3BlY2lmaWMgPQorCQlwZWRfbWFsbG9jIChzaXplb2YgKEdQVFBhcnRpdGlvbkRhdGEpKTsKKwlpZiAoIWdwdF9wYXJ0X2RhdGEpCisJCWdvdG8gZXJyb3JfZnJlZV9wYXJ0OworCisJZ3B0X3BhcnRfZGF0YS0+dHlwZSA9IFBBUlRJVElPTl9CQVNJQ19EQVRBX0dVSUQ7CisJZ3B0X3BhcnRfZGF0YS0+bHZtID0gMDsKKwlncHRfcGFydF9kYXRhLT5yYWlkID0gMDsKKwlncHRfcGFydF9kYXRhLT5ib290ID0gMDsKKwlncHRfcGFydF9kYXRhLT5ocF9zZXJ2aWNlID0gMDsKKyAgICAgICAgZ3B0X3BhcnRfZGF0YS0+aGlkZGVuID0gMDsKKyAgICAgICAgZ3B0X3BhcnRfZGF0YS0+bXNmdHJlcyA9IDA7CisJdXVpZF9nZW5lcmF0ZSAoKHVuc2lnbmVkIGNoYXIqKSAmZ3B0X3BhcnRfZGF0YS0+dXVpZCk7CisJc3dhcF91dWlkX2FuZF9lZmlfZ3VpZCgodW5zaWduZWQgY2hhciopKCZncHRfcGFydF9kYXRhLT51dWlkKSk7CisJc3RyY3B5IChncHRfcGFydF9kYXRhLT5uYW1lLCAiIik7CisJcmV0dXJuIHBhcnQ7CisKK2Vycm9yX2ZyZWVfcGFydDoKKwlfcGVkX3BhcnRpdGlvbl9mcmVlIChwYXJ0KTsKK2Vycm9yOgorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgUGVkUGFydGl0aW9uKgorZ3B0X3BhcnRpdGlvbl9kdXBsaWNhdGUgKGNvbnN0IFBlZFBhcnRpdGlvbiogcGFydCkKK3sKKwlQZWRQYXJ0aXRpb24qIHJlc3VsdDsKKwlHUFRQYXJ0aXRpb25EYXRhKiBwYXJ0X2RhdGEgPSBwYXJ0LT5kaXNrX3NwZWNpZmljOworCUdQVFBhcnRpdGlvbkRhdGEqIHJlc3VsdF9kYXRhOworCisJcmVzdWx0ID0gX3BlZF9wYXJ0aXRpb25fYWxsb2MgKHBhcnQtPmRpc2ssIHBhcnQtPnR5cGUsIHBhcnQtPmZzX3R5cGUsCisJCQkJICAgICAgIHBhcnQtPmdlb20uc3RhcnQsIHBhcnQtPmdlb20uZW5kKTsKKwlpZiAoIXJlc3VsdCkKKwkJZ290byBlcnJvcjsKKwlyZXN1bHQtPm51bSA9IHBhcnQtPm51bTsKKworCWlmIChyZXN1bHQtPnR5cGUgIT0gMCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCXJlc3VsdF9kYXRhID0gcmVzdWx0LT5kaXNrX3NwZWNpZmljID0KKwkJcGVkX21hbGxvYyAoc2l6ZW9mIChHUFRQYXJ0aXRpb25EYXRhKSk7CisJaWYgKCFyZXN1bHRfZGF0YSkKKwkJZ290byBlcnJvcl9mcmVlX3BhcnQ7CisKKwlyZXN1bHRfZGF0YS0+dHlwZSA9IHBhcnRfZGF0YS0+dHlwZTsKKwlyZXN1bHRfZGF0YS0+dXVpZCA9IHBhcnRfZGF0YS0+dXVpZDsKKwlzdHJjcHkgKHJlc3VsdF9kYXRhLT5uYW1lLCBwYXJ0X2RhdGEtPm5hbWUpOworCXJldHVybiByZXN1bHQ7CisKK2Vycm9yX2ZyZWVfcGFydDoKKwlfcGVkX3BhcnRpdGlvbl9mcmVlIChyZXN1bHQpOworZXJyb3I6CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCitncHRfcGFydGl0aW9uX2Rlc3Ryb3kgKFBlZFBhcnRpdGlvbiAqcGFydCkKK3sKKwlpZiAocGFydC0+dHlwZSA9PSAwKSB7CisJCVBFRF9BU1NFUlQgKHBhcnQtPmRpc2tfc3BlY2lmaWMgIT0gTlVMTCwgcmV0dXJuKTsKKwkJcGVkX2ZyZWUgKHBhcnQtPmRpc2tfc3BlY2lmaWMpOworCX0KKworCV9wZWRfcGFydGl0aW9uX2ZyZWUgKHBhcnQpOworfQorCitzdGF0aWMgaW50CitncHRfcGFydGl0aW9uX3NldF9zeXN0ZW0gKFBlZFBhcnRpdGlvbiogcGFydCwgY29uc3QgUGVkRmlsZVN5c3RlbVR5cGUqIGZzX3R5cGUpCit7CisJR1BUUGFydGl0aW9uRGF0YSogZ3B0X3BhcnRfZGF0YSA9IHBhcnQtPmRpc2tfc3BlY2lmaWM7CisKKwlQRURfQVNTRVJUIChncHRfcGFydF9kYXRhICE9IE5VTEwsIHJldHVybiAwKTsKKworCXBhcnQtPmZzX3R5cGUgPSBmc190eXBlOworCisJaWYgKGdwdF9wYXJ0X2RhdGEtPmx2bSkgeworCQlncHRfcGFydF9kYXRhLT50eXBlID0gUEFSVElUSU9OX0xWTV9HVUlEOworCQlyZXR1cm4gMTsKKwl9CisJaWYgKGdwdF9wYXJ0X2RhdGEtPnJhaWQpIHsKKwkJZ3B0X3BhcnRfZGF0YS0+dHlwZSA9IFBBUlRJVElPTl9SQUlEX0dVSUQ7CisJCXJldHVybiAxOworCX0KKwlpZiAoZ3B0X3BhcnRfZGF0YS0+Ym9vdCkgeworCQlncHRfcGFydF9kYXRhLT50eXBlID0gUEFSVElUSU9OX1NZU1RFTV9HVUlEOworCQlyZXR1cm4gMTsKKwl9CisJaWYgKGdwdF9wYXJ0X2RhdGEtPmhwX3NlcnZpY2UpIHsKKwkJZ3B0X3BhcnRfZGF0YS0+dHlwZSA9IFBBUlRJVElPTl9IUFNFUlZJQ0VfR1VJRDsKKwkJcmV0dXJuIDE7CisJfQorICAgICAgICBpZiAoZ3B0X3BhcnRfZGF0YS0+bXNmdHJlcykgeworICAgICAgICAgICAgICAgIGdwdF9wYXJ0X2RhdGEtPnR5cGUgPSBQQVJUSVRJT05fTVNGVF9SRVNFUlZFRF9HVUlEOworICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgICAgIAorCWlmIChmc190eXBlKSB7CisJCWlmIChzdHJuY21wIChmc190eXBlLT5uYW1lLCAiZmF0IiwgMykgPT0gMAorCQkgICAgfHwgc3RyY21wIChmc190eXBlLT5uYW1lLCAibnRmcyIpID09IDApIHsKKwkJCWdwdF9wYXJ0X2RhdGEtPnR5cGUgPSBQQVJUSVRJT05fTVNGVF9SRVNFUlZFRF9HVUlEOworCQkJcmV0dXJuIDE7CisJCX0KKwkJaWYgKHN0cm5jbXAgKGZzX3R5cGUtPm5hbWUsICJoZnMiLCAzKSA9PSAwKSB7CisJCQlncHRfcGFydF9kYXRhLT50eXBlID0gUEFSVElUSU9OX0FQUExFX0hGU19HVUlEOworCQkJcmV0dXJuIDE7CisJCX0KKwkJaWYgKHN0cnN0ciAoZnNfdHlwZS0+bmFtZSwgInN3YXAiKSkgeworCQkJZ3B0X3BhcnRfZGF0YS0+dHlwZSA9IFBBUlRJVElPTl9TV0FQX0dVSUQ7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCWdwdF9wYXJ0X2RhdGEtPnR5cGUgPSBQQVJUSVRJT05fQkFTSUNfREFUQV9HVUlEOworCXJldHVybiAxOworfQorCisvKiBBbGxvY2F0ZSBtZXRhZGF0YSBwYXJ0aXRpb25zIGZvciB0aGUgR1BUSCBhbmQgUFRFUyAqLworc3RhdGljIGludAorZ3B0X2FsbG9jX21ldGFkYXRhIChQZWREaXNrICogZGlzaykKK3sKKwlQZWRTZWN0b3IgZ3B0bGVuZ3RoLCBwdGVzbGVuZ3RoID0gMDsKKwlHUFREaXNrRGF0YSAqZ3B0X2Rpc2tfZGF0YTsKKworCVBFRF9BU1NFUlQoZGlzayAhPSBOVUxMLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVChkaXNrLT5kZXYgIT0gTlVMTCwgcmV0dXJuIDApOworCVBFRF9BU1NFUlQoZGlzay0+ZGlza19zcGVjaWZpYyAhPSBOVUxMLCByZXR1cm4gMCk7CisJZ3B0X2Rpc2tfZGF0YSA9IGRpc2stPmRpc2tfc3BlY2lmaWM7CisKKwlncHRsZW5ndGggPSBwZWRfZGl2X3JvdW5kX3VwIChzaXplb2YgKEd1aWRQYXJ0aXRpb25UYWJsZUhlYWRlcl90KSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNrLT5kZXYtPnNlY3Rvcl9zaXplKTsKKwlwdGVzbGVuZ3RoID0gcGVkX2Rpdl9yb3VuZF91cCAoZ3B0X2Rpc2tfZGF0YS0+ZW50cnlfY291bnQKKwkJCQkgICAgICAgKiBzaXplb2YgKEd1aWRQYXJ0aXRpb25FbnRyeV90KSwgZGlzay0+ZGV2LT5zZWN0b3Jfc2l6ZSk7CisKKwkvKiBtZXRhZGF0YSBhdCB0aGUgc3RhcnQgb2YgdGhlIGRpc2sgaW5jbHVkZXMgdGhlIE1CUiAqLworCWlmICghYWRkX21ldGFkYXRhX3BhcnQoZGlzaywgR1BUX1BNQlJfTEJBLAorCQkJICAgICAgIEdQVF9QTUJSX1NFQ1RPUlMgKyBncHRsZW5ndGggKyBwdGVzbGVuZ3RoKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBtZXRhZGF0YSBhdCB0aGUgZW5kIG9mIHRoZSBkaXNrICovCisJaWYgKCFhZGRfbWV0YWRhdGFfcGFydChkaXNrLCBkaXNrLT5kZXYtPmxlbmd0aCAtIGdwdGxlbmd0aCAtIHB0ZXNsZW5ndGgsCisJCQkgICAgICAgZ3B0bGVuZ3RoICsgcHRlc2xlbmd0aCkpCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisKKy8qIERvZXMgbm90aGluZywgYXMgdGhlIHJlYWQvbmV3L2Rlc3Ryb3kgZnVuY3Rpb25zIG1haW50YWluIHBhcnQtPm51bSAqLworc3RhdGljIGludAorZ3B0X3BhcnRpdGlvbl9lbnVtZXJhdGUgKFBlZFBhcnRpdGlvbiogcGFydCkKK3sKKwlHUFREaXNrRGF0YSogZ3B0X2Rpc2tfZGF0YSA9IHBhcnQtPmRpc2stPmRpc2tfc3BlY2lmaWM7CisJaW50IGk7CisKKwkvKiBuZXZlciBjaGFuZ2UgdGhlIHBhcnRpdGlvbiBudW1iZXJzICovCisJaWYgKHBhcnQtPm51bSAhPSAtMSkKKwkJcmV0dXJuIDE7CisKKwlmb3IgKGkgPSAxOyBpIDw9IGdwdF9kaXNrX2RhdGEtPmVudHJ5X2NvdW50OyBpKyspIHsKKwkJaWYgKCFwZWRfZGlza19nZXRfcGFydGl0aW9uIChwYXJ0LT5kaXNrLCBpKSkgeworCQkJcGFydC0+bnVtID0gaTsKKwkJCXJldHVybiAxOworCQl9CisJfQorCisJUEVEX0FTU0VSVCAoMCwgcmV0dXJuIDApOworCisJcmV0dXJuIDA7IC8qIHVzZWQgaWYgZGVidWcgaXMgZGlzYWJsZWQgKi8KK30KKworc3RhdGljIGludAorZ3B0X3BhcnRpdGlvbl9zZXRfZmxhZyhQZWRQYXJ0aXRpb24gKnBhcnQsCisJCSAgICAgICBQZWRQYXJ0aXRpb25GbGFnIGZsYWcsCisJCSAgICAgICBpbnQgc3RhdGUpCit7CisJR1BUUGFydGl0aW9uRGF0YSAqZ3B0X3BhcnRfZGF0YTsKKwlQRURfQVNTRVJUKHBhcnQgIT0gTlVMTCwgcmV0dXJuIDApOworCVBFRF9BU1NFUlQocGFydC0+ZGlza19zcGVjaWZpYyAhPSBOVUxMLCByZXR1cm4gMCk7CisJZ3B0X3BhcnRfZGF0YSA9IHBhcnQtPmRpc2tfc3BlY2lmaWM7CisKKwlzd2l0Y2ggKGZsYWcpIHsKKwljYXNlIFBFRF9QQVJUSVRJT05fQk9PVDoKKwkJZ3B0X3BhcnRfZGF0YS0+Ym9vdCA9IHN0YXRlOworCQlpZiAoc3RhdGUpCisgICAgICAgICAgICAgICAgICAgICAgICBncHRfcGFydF9kYXRhLT5yYWlkIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGdwdF9wYXJ0X2RhdGEtPmx2bQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGdwdF9wYXJ0X2RhdGEtPmhwX3NlcnZpY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBncHRfcGFydF9kYXRhLT5tc2Z0cmVzID0gMDsKKwkJcmV0dXJuIGdwdF9wYXJ0aXRpb25fc2V0X3N5c3RlbSAocGFydCwgcGFydC0+ZnNfdHlwZSk7CisJY2FzZSBQRURfUEFSVElUSU9OX1JBSUQ6CisJCWdwdF9wYXJ0X2RhdGEtPnJhaWQgPSBzdGF0ZTsKKwkJaWYgKHN0YXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgZ3B0X3BhcnRfZGF0YS0+Ym9vdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGdwdF9wYXJ0X2RhdGEtPmx2bQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGdwdF9wYXJ0X2RhdGEtPmhwX3NlcnZpY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBncHRfcGFydF9kYXRhLT5tc2Z0cmVzID0gMDsKKwkJcmV0dXJuIGdwdF9wYXJ0aXRpb25fc2V0X3N5c3RlbSAocGFydCwgcGFydC0+ZnNfdHlwZSk7CisJY2FzZSBQRURfUEFSVElUSU9OX0xWTToKKwkJZ3B0X3BhcnRfZGF0YS0+bHZtID0gc3RhdGU7CisJCWlmIChzdGF0ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdwdF9wYXJ0X2RhdGEtPmJvb3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBncHRfcGFydF9kYXRhLT5yYWlkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gZ3B0X3BhcnRfZGF0YS0+aHBfc2VydmljZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGdwdF9wYXJ0X2RhdGEtPm1zZnRyZXMgPSAwOworCQlyZXR1cm4gZ3B0X3BhcnRpdGlvbl9zZXRfc3lzdGVtIChwYXJ0LCBwYXJ0LT5mc190eXBlKTsKKwljYXNlIFBFRF9QQVJUSVRJT05fSFBTRVJWSUNFOgorCQlncHRfcGFydF9kYXRhLT5ocF9zZXJ2aWNlID0gc3RhdGU7CisJCWlmIChzdGF0ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdwdF9wYXJ0X2RhdGEtPmJvb3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBncHRfcGFydF9kYXRhLT5yYWlkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gZ3B0X3BhcnRfZGF0YS0+bHZtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gZ3B0X3BhcnRfZGF0YS0+bXNmdHJlcyA9IDA7CisJCXJldHVybiBncHRfcGFydGl0aW9uX3NldF9zeXN0ZW0gKHBhcnQsIHBhcnQtPmZzX3R5cGUpOworICAgICAgICBjYXNlIFBFRF9QQVJUSVRJT05fTVNGVF9SRVNFUlZFRDoKKyAgICAgICAgICAgICAgICBncHRfcGFydF9kYXRhLT5tc2Z0cmVzID0gc3RhdGU7CisgICAgICAgICAgICAgICAgaWYgKHN0YXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgZ3B0X3BhcnRfZGF0YS0+Ym9vdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGdwdF9wYXJ0X2RhdGEtPnJhaWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBncHRfcGFydF9kYXRhLT5sdm0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBncHRfcGFydF9kYXRhLT5ocF9zZXJ2aWNlID0gMDsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ3B0X3BhcnRpdGlvbl9zZXRfc3lzdGVtIChwYXJ0LCBwYXJ0LT5mc190eXBlKTsKKyAgICAgICAgY2FzZSBQRURfUEFSVElUSU9OX0hJRERFTjoKKyAgICAgICAgICAgICAgICBncHRfcGFydF9kYXRhLT5oaWRkZW4gPSBzdGF0ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKwljYXNlIFBFRF9QQVJUSVRJT05fU1dBUDoKKwljYXNlIFBFRF9QQVJUSVRJT05fUk9PVDoKKwljYXNlIFBFRF9QQVJUSVRJT05fTEJBOgorCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludAorZ3B0X3BhcnRpdGlvbl9nZXRfZmxhZyhjb25zdCBQZWRQYXJ0aXRpb24gKnBhcnQsIFBlZFBhcnRpdGlvbkZsYWcgZmxhZykKK3sKKwlHUFRQYXJ0aXRpb25EYXRhICpncHRfcGFydF9kYXRhOworCVBFRF9BU1NFUlQocGFydC0+ZGlza19zcGVjaWZpYyAhPSBOVUxMLCByZXR1cm4gMCk7CisJZ3B0X3BhcnRfZGF0YSA9IHBhcnQtPmRpc2tfc3BlY2lmaWM7CisKKwlzd2l0Y2ggKGZsYWcpIHsKKwljYXNlIFBFRF9QQVJUSVRJT05fUkFJRDoKKwkJcmV0dXJuIGdwdF9wYXJ0X2RhdGEtPnJhaWQ7CisJY2FzZSBQRURfUEFSVElUSU9OX0xWTToKKwkJcmV0dXJuIGdwdF9wYXJ0X2RhdGEtPmx2bTsKKwljYXNlIFBFRF9QQVJUSVRJT05fQk9PVDoKKwkJcmV0dXJuIGdwdF9wYXJ0X2RhdGEtPmJvb3Q7CisJY2FzZSBQRURfUEFSVElUSU9OX0hQU0VSVklDRToKKwkJcmV0dXJuIGdwdF9wYXJ0X2RhdGEtPmhwX3NlcnZpY2U7CisgICAgICAgIGNhc2UgUEVEX1BBUlRJVElPTl9NU0ZUX1JFU0VSVkVEOgorICAgICAgICAgICAgICAgIHJldHVybiBncHRfcGFydF9kYXRhLT5tc2Z0cmVzOworICAgICAgICBjYXNlIFBFRF9QQVJUSVRJT05fSElEREVOOgorICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ3B0X3BhcnRfZGF0YS0+aGlkZGVuOworCWNhc2UgUEVEX1BBUlRJVElPTl9TV0FQOgorCWNhc2UgUEVEX1BBUlRJVElPTl9MQkE6CisJY2FzZSBQRURfUEFSVElUSU9OX1JPT1Q6CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitncHRfcGFydGl0aW9uX2lzX2ZsYWdfYXZhaWxhYmxlKGNvbnN0IFBlZFBhcnRpdGlvbiAqIHBhcnQsCisJCQkJUGVkUGFydGl0aW9uRmxhZyBmbGFnKQoreworCXN3aXRjaCAoZmxhZykgeworCWNhc2UgUEVEX1BBUlRJVElPTl9SQUlEOgorCWNhc2UgUEVEX1BBUlRJVElPTl9MVk06CisJY2FzZSBQRURfUEFSVElUSU9OX0JPT1Q6CisJY2FzZSBQRURfUEFSVElUSU9OX0hQU0VSVklDRToKKyAgICAgICAgY2FzZSBQRURfUEFSVElUSU9OX01TRlRfUkVTRVJWRUQ6CisgICAgICAgIGNhc2UgUEVEX1BBUlRJVElPTl9ISURERU46ICAgICAgICAKKwkJcmV0dXJuIDE7CisJY2FzZSBQRURfUEFSVElUSU9OX1NXQVA6CisJY2FzZSBQRURfUEFSVElUSU9OX1JPT1Q6CisJY2FzZSBQRURfUEFSVElUSU9OX0xCQToKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitncHRfcGFydGl0aW9uX3NldF9uYW1lIChQZWRQYXJ0aXRpb24gKnBhcnQsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJR1BUUGFydGl0aW9uRGF0YSAqZ3B0X3BhcnRfZGF0YSA9IHBhcnQtPmRpc2tfc3BlY2lmaWM7CisKKwlzdHJuY3B5IChncHRfcGFydF9kYXRhLT5uYW1lLCBuYW1lLCAzNik7CisJZ3B0X3BhcnRfZGF0YS0+bmFtZSBbMzZdID0gMDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKgorZ3B0X3BhcnRpdGlvbl9nZXRfbmFtZSAoY29uc3QgUGVkUGFydGl0aW9uICogcGFydCkKK3sKKwlHUFRQYXJ0aXRpb25EYXRhKiBncHRfcGFydF9kYXRhID0gcGFydC0+ZGlza19zcGVjaWZpYzsKKwlyZXR1cm4gZ3B0X3BhcnRfZGF0YS0+bmFtZTsKK30KKworc3RhdGljIGludAorZ3B0X2dldF9tYXhfcHJpbWFyeV9wYXJ0aXRpb25fY291bnQgKGNvbnN0IFBlZERpc2sgKmRpc2spCit7CisJY29uc3QgR1BURGlza0RhdGEqIGdwdF9kaXNrX2RhdGEgPSBkaXNrLT5kaXNrX3NwZWNpZmljOworCXJldHVybiBncHRfZGlza19kYXRhLT5lbnRyeV9jb3VudDsKK30KKworc3RhdGljIFBlZENvbnN0cmFpbnQqCitfbm9uX21ldGFkYXRhX2NvbnN0cmFpbnQgKGNvbnN0IFBlZERpc2sqIGRpc2spCit7CisJR1BURGlza0RhdGEqIGdwdF9kaXNrX2RhdGEgPSBkaXNrLT5kaXNrX3NwZWNpZmljOworCisJcmV0dXJuIHBlZF9jb25zdHJhaW50X25ld19mcm9tX21heCAoJmdwdF9kaXNrX2RhdGEtPmRhdGFfYXJlYSk7Cit9CisKK3N0YXRpYyBpbnQKK2dwdF9wYXJ0aXRpb25fYWxpZ24gKFBlZFBhcnRpdGlvbiogcGFydCwgY29uc3QgUGVkQ29uc3RyYWludCogY29uc3RyYWludCkKK3sKKwlQRURfQVNTRVJUIChwYXJ0ICE9IE5VTEwsIHJldHVybiAwKTsKKworCWlmIChfcGVkX3BhcnRpdGlvbl9hdHRlbXB0X2FsaWduIChwYXJ0LCBjb25zdHJhaW50LAorCQkJX25vbl9tZXRhZGF0YV9jb25zdHJhaW50IChwYXJ0LT5kaXNrKSkpCisJICAgICAgIAlyZXR1cm4gMTsKKworI2lmbmRlZiBESVNDT1ZFUl9PTkxZCisJcGVkX2V4Y2VwdGlvbl90aHJvdyAoCisJCVBFRF9FWENFUFRJT05fRVJST1IsCisJCVBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQlfKCJVbmFibGUgdG8gc2F0aXNmeSBhbGwgY29uc3RyYWludHMgb24gdGhlIHBhcnRpdGlvbi4iKSk7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIFBlZERpc2tPcHMgZ3B0X2Rpc2tfb3BzID0geworCXByb2JlOgkJZ3B0X3Byb2JlLAorI2lmbmRlZiBESVNDT1ZFUl9PTkxZCisJY2xvYmJlcjoJZ3B0X2Nsb2JiZXIsCisjZWxzZQorCWNsb2JiZXI6CU5VTEwsCisjZW5kaWYKKwlhbGxvYzoJCWdwdF9hbGxvYywKKwlkdXBsaWNhdGU6CWdwdF9kdXBsaWNhdGUsCisJZnJlZToJCWdwdF9mcmVlLAorCXJlYWQ6CQlncHRfcmVhZCwKKyNpZm5kZWYgRElTQ09WRVJfT05MWQorCXdyaXRlOgkJZ3B0X3dyaXRlLAorI2Vsc2UKKwl3cml0ZToJCU5VTEwsCisjZW5kaWYKKwlwYXJ0aXRpb25fbmV3OgkJCWdwdF9wYXJ0aXRpb25fbmV3LAorCXBhcnRpdGlvbl9kdXBsaWNhdGU6CQlncHRfcGFydGl0aW9uX2R1cGxpY2F0ZSwKKwlwYXJ0aXRpb25fZGVzdHJveToJCWdwdF9wYXJ0aXRpb25fZGVzdHJveSwKKwlwYXJ0aXRpb25fc2V0X3N5c3RlbToJCWdwdF9wYXJ0aXRpb25fc2V0X3N5c3RlbSwKKwlwYXJ0aXRpb25fc2V0X2ZsYWc6CQlncHRfcGFydGl0aW9uX3NldF9mbGFnLAorCXBhcnRpdGlvbl9nZXRfZmxhZzoJCWdwdF9wYXJ0aXRpb25fZ2V0X2ZsYWcsCisJcGFydGl0aW9uX2lzX2ZsYWdfYXZhaWxhYmxlOglncHRfcGFydGl0aW9uX2lzX2ZsYWdfYXZhaWxhYmxlLAorCXBhcnRpdGlvbl9zZXRfbmFtZToJCWdwdF9wYXJ0aXRpb25fc2V0X25hbWUsCisJcGFydGl0aW9uX2dldF9uYW1lOgkJZ3B0X3BhcnRpdGlvbl9nZXRfbmFtZSwKKwlwYXJ0aXRpb25fYWxpZ246CQlncHRfcGFydGl0aW9uX2FsaWduLAorCXBhcnRpdGlvbl9lbnVtZXJhdGU6CQlncHRfcGFydGl0aW9uX2VudW1lcmF0ZSwKKwlhbGxvY19tZXRhZGF0YToJCQlncHRfYWxsb2NfbWV0YWRhdGEsCisJZ2V0X21heF9wcmltYXJ5X3BhcnRpdGlvbl9jb3VudDogZ3B0X2dldF9tYXhfcHJpbWFyeV9wYXJ0aXRpb25fY291bnQKK307CisKK3N0YXRpYyBQZWREaXNrVHlwZSBncHRfZGlza190eXBlID0geworCW5leHQ6CQlOVUxMLAorCW5hbWU6CQkiZ3B0IiwKKwlvcHM6CQkmZ3B0X2Rpc2tfb3BzLAorCWZlYXR1cmVzOglQRURfRElTS19UWVBFX1BBUlRJVElPTl9OQU1FCit9OworCit2b2lkCitwZWRfZGlza19ncHRfaW5pdCgpCit7CisJUEVEX0FTU0VSVCAoc2l6ZW9mIChHdWlkUGFydGl0aW9uRW50cnlBdHRyaWJ1dGVzX3QpID09IDgsIHJldHVybik7CisJUEVEX0FTU0VSVCAoc2l6ZW9mIChHdWlkUGFydGl0aW9uRW50cnlfdCkgPT0gMTI4LCByZXR1cm4pOworCisJcGVkX2Rpc2tfdHlwZV9yZWdpc3RlciAoJmdwdF9kaXNrX3R5cGUpOworfQorCit2b2lkCitwZWRfZGlza19ncHRfZG9uZSgpCit7CisJcGVkX2Rpc2tfdHlwZV91bnJlZ2lzdGVyICgmZ3B0X2Rpc2tfdHlwZSk7Cit9CmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2xhYmVscy9sb29wLmMgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2xhYmVscy9sb29wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE3ZTBkNgotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvbGFiZWxzL2xvb3AuYwpAQCAtMCwwICsxLDMzNCBAQAorLyoKKyAgICBsaWJwYXJ0ZWQgLSBhIGxpYnJhcnkgZm9yIG1hbmlwdWxhdGluZyBkaXNrIHBhcnRpdGlvbnMKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCisqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpbmNsdWRlIDxwYXJ0ZWQvcGFydGVkLmg+CisjaW5jbHVkZSA8cGFydGVkL2RlYnVnLmg+CisjaW5jbHVkZSA8cGFydGVkL2VuZGlhbi5oPgorCisjaWYgRU5BQkxFX05MUworIyAgaW5jbHVkZSA8bGliaW50bC5oPgorIyAgZGVmaW5lIF8oU3RyaW5nKSBkZ2V0dGV4dCAoUEFDS0FHRSwgU3RyaW5nKQorI2Vsc2UKKyMgIGRlZmluZSBfKFN0cmluZykgKFN0cmluZykKKyNlbmRpZiAvKiBFTkFCTEVfTkxTICovCisKKyNkZWZpbmUJTE9PUF9TSUdOQVRVUkUJCSJHTlUgUGFydGVkIExvb3BiYWNrIDAiCisKK3N0YXRpYyBQZWREaXNrVHlwZSBsb29wX2Rpc2tfdHlwZTsKKworc3RhdGljIFBlZERpc2sqIGxvb3BfYWxsb2MgKGNvbnN0IFBlZERldmljZSogZGV2KTsKK3N0YXRpYyB2b2lkIGxvb3BfZnJlZSAoUGVkRGlzayogZGlzayk7CisKK3N0YXRpYyBpbnQKK2xvb3BfcHJvYmUgKGNvbnN0IFBlZERldmljZSogZGV2KQoreworCVBlZERpc2sqCWRpc2s7CisJY2hhcgkJYnVmIFs1MTJdOworCWludAkJcmVzdWx0OworCisgICAgICAgIGlmIChkZXYtPnNlY3Rvcl9zaXplICE9IDUxMikKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKworCWRpc2sgPSBsb29wX2FsbG9jIChkZXYpOworCWlmICghZGlzaykKKwkJZ290byBlcnJvcjsKKworCWlmICghcGVkX2RldmljZV9yZWFkIChkZXYsIGJ1ZiwgMCwgMSkpCisJCWdvdG8gZXJyb3JfZGVzdHJveV9kaXNrOworCWlmIChzdHJuY21wIChidWYsIExPT1BfU0lHTkFUVVJFLCBzdHJsZW4gKExPT1BfU0lHTkFUVVJFKSkgPT0gMCkgeworCQlyZXN1bHQgPSAxOworCX0gZWxzZSB7CisJCVBlZEdlb21ldHJ5KglnZW9tOworCisJCWdlb20gPSBwZWRfZ2VvbWV0cnlfbmV3IChkZXYsIDAsIGRpc2stPmRldi0+bGVuZ3RoKTsKKwkJaWYgKCFnZW9tKQorCQkJZ290byBlcnJvcl9kZXN0cm95X2Rpc2s7CisJCXJlc3VsdCA9IHBlZF9maWxlX3N5c3RlbV9wcm9iZSAoZ2VvbSkgIT0gTlVMTDsKKwkJcGVkX2dlb21ldHJ5X2Rlc3Ryb3kgKGdlb20pOworCX0KKwlsb29wX2ZyZWUgKGRpc2spOworCXJldHVybiByZXN1bHQ7CisKK2Vycm9yX2Rlc3Ryb3lfZGlzazoKKwlsb29wX2ZyZWUgKGRpc2spOworZXJyb3I6CisJcmV0dXJuIDA7Cit9CisKKyNpZm5kZWYgRElTQ09WRVJfT05MWQorc3RhdGljIGludAorbG9vcF9jbG9iYmVyIChQZWREZXZpY2UqIGRldikKK3sKKwljaGFyCQlidWYgWzUxMl07CisJUGVkU2VjdG9yCWkgPSAwOworCisJUEVEX0FTU0VSVCAoZGV2ICE9IE5VTEwsIHJldHVybiAwKTsKKworCW1lbXNldCAoYnVmLCAwLCA1MTIpOworCisJd2hpbGUgKGxvb3BfcHJvYmUgKGRldikpIHsKKwkJaWYgKCFwZWRfZGV2aWNlX3dyaXRlIChkZXYsIGJ1ZiwgaSsrLCAxKSkKKwkJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKyNlbmRpZiAvKiAhRElTQ09WRVJfT05MWSAqLworCitzdGF0aWMgUGVkRGlzayoKK2xvb3BfYWxsb2MgKGNvbnN0IFBlZERldmljZSogZGV2KQoreworCVBFRF9BU1NFUlQgKGRldiAhPSBOVUxMLCByZXR1cm4gMCk7CisKKwlpZiAoZGV2LT5sZW5ndGggPCAyNTYpCisJCXJldHVybiBOVUxMOworCXJldHVybiBfcGVkX2Rpc2tfYWxsb2MgKChQZWREZXZpY2UqKWRldiwgJmxvb3BfZGlza190eXBlKTsKK30KKworc3RhdGljIFBlZERpc2sqCitsb29wX2R1cGxpY2F0ZSAoY29uc3QgUGVkRGlzayogZGlzaykKK3sKKwlyZXR1cm4gcGVkX2Rpc2tfbmV3X2ZyZXNoIChkaXNrLT5kZXYsICZsb29wX2Rpc2tfdHlwZSk7Cit9CisKK3N0YXRpYyB2b2lkCitsb29wX2ZyZWUgKFBlZERpc2sqIGRpc2spCit7CisJUEVEX0FTU0VSVCAoZGlzayAhPSBOVUxMLCByZXR1cm4pOworCisJX3BlZF9kaXNrX2ZyZWUgKGRpc2spOworfQorCitzdGF0aWMgaW50Citsb29wX3JlYWQgKFBlZERpc2sqIGRpc2spCit7CisJUGVkRGV2aWNlKgkJZGV2ID0gTlVMTDsKKwljaGFyCQkJYnVmIFs1MTJdOworCVBlZEdlb21ldHJ5KgkJZ2VvbTsKKwlQZWRGaWxlU3lzdGVtVHlwZSoJZnNfdHlwZTsKKwlQZWRQYXJ0aXRpb24qCQlwYXJ0OworCVBlZENvbnN0cmFpbnQqCQljb25zdHJhaW50X2FueTsKKworCVBFRF9BU1NFUlQgKGRpc2sgIT0gTlVMTCwgcmV0dXJuIDApOworCWRldiA9IGRpc2stPmRldjsKKwljb25zdHJhaW50X2FueSA9IHBlZF9jb25zdHJhaW50X2FueSAoZGV2KTsKKworCXBlZF9kaXNrX2RlbGV0ZV9hbGwgKGRpc2spOworCisJaWYgKCFwZWRfZGV2aWNlX3JlYWQgKGRldiwgYnVmLCAwLCAxKSkKKwkJZ290byBlcnJvcjsKKwlpZiAoIXN0cm5jbXAgKGJ1ZiwgTE9PUF9TSUdOQVRVUkUsIHN0cmxlbiAoTE9PUF9TSUdOQVRVUkUpKSkKKwkJcmV0dXJuIDE7CisKKwlnZW9tID0gcGVkX2dlb21ldHJ5X25ldyAoZGV2LCAwLCBkZXYtPmxlbmd0aCk7CisJaWYgKCFnZW9tKQorCQlnb3RvIGVycm9yOworCisJZnNfdHlwZSA9IHBlZF9maWxlX3N5c3RlbV9wcm9iZSAoZ2VvbSk7CisJaWYgKCFmc190eXBlKQorCQlnb3RvIGVycm9yX2ZyZWVfZ2VvbTsKKworCXBhcnQgPSBwZWRfcGFydGl0aW9uX25ldyAoZGlzaywgMCwgZnNfdHlwZSwgZ2VvbS0+c3RhcnQsIGdlb20tPmVuZCk7CisJcGVkX2dlb21ldHJ5X2Rlc3Ryb3kgKGdlb20pOworCWlmICghcGFydCkKKwkJZ290byBlcnJvcjsKKwlwYXJ0LT5mc190eXBlID0gZnNfdHlwZTsKKworCWlmICghcGVkX2Rpc2tfYWRkX3BhcnRpdGlvbiAoZGlzaywgcGFydCwgY29uc3RyYWludF9hbnkpKQorCQlnb3RvIGVycm9yOworCXBlZF9jb25zdHJhaW50X2Rlc3Ryb3kgKGNvbnN0cmFpbnRfYW55KTsKKwlyZXR1cm4gMTsKKworZXJyb3JfZnJlZV9nZW9tOgorCXBlZF9nZW9tZXRyeV9kZXN0cm95IChnZW9tKTsKK2Vycm9yOgorCXBlZF9jb25zdHJhaW50X2Rlc3Ryb3kgKGNvbnN0cmFpbnRfYW55KTsKKwlyZXR1cm4gMDsKK30KKworI2lmbmRlZiBESVNDT1ZFUl9PTkxZCitzdGF0aWMgaW50Citsb29wX3dyaXRlIChjb25zdCBQZWREaXNrKiBkaXNrKQoreworCWNoYXIJCWJ1ZiBbNTEyXTsKKworCWlmIChwZWRfZGlza19nZXRfcGFydGl0aW9uIChkaXNrLCAxKSkgeworCQlpZiAoIXBlZF9kZXZpY2VfcmVhZCAoZGlzay0+ZGV2LCBidWYsIDAsIDEpKQorCQkJcmV0dXJuIDA7CisJCWlmIChzdHJuY21wIChidWYsIExPT1BfU0lHTkFUVVJFLCBzdHJsZW4gKExPT1BfU0lHTkFUVVJFKSkgIT0gMCkKKwkgICAgICAgCQlyZXR1cm4gMTsKKwkJbWVtc2V0IChidWYsIDAsIHN0cmxlbiAoTE9PUF9TSUdOQVRVUkUpKTsKKwkJcmV0dXJuIHBlZF9kZXZpY2Vfd3JpdGUgKGRpc2stPmRldiwgYnVmLCAwLCAxKTsKKwl9CisKKwltZW1zZXQgKGJ1ZiwgMCwgNTEyKTsKKwlzdHJjcHkgKGJ1ZiwgTE9PUF9TSUdOQVRVUkUpOworCisJcmV0dXJuIHBlZF9kZXZpY2Vfd3JpdGUgKGRpc2stPmRldiwgYnVmLCAwLCAxKTsKK30KKyNlbmRpZiAvKiAhRElTQ09WRVJfT05MWSAqLworCitzdGF0aWMgUGVkUGFydGl0aW9uKgorbG9vcF9wYXJ0aXRpb25fbmV3IChjb25zdCBQZWREaXNrKiBkaXNrLCBQZWRQYXJ0aXRpb25UeXBlIHBhcnRfdHlwZSwKKwkJICAgIGNvbnN0IFBlZEZpbGVTeXN0ZW1UeXBlKiBmc190eXBlLAorCQkgICAgUGVkU2VjdG9yIHN0YXJ0LCBQZWRTZWN0b3IgZW5kKQoreworCVBlZFBhcnRpdGlvbioJcGFydDsKKwkKKwlwYXJ0ID0gX3BlZF9wYXJ0aXRpb25fYWxsb2MgKGRpc2ssIHBhcnRfdHlwZSwgZnNfdHlwZSwgc3RhcnQsIGVuZCk7CisJaWYgKCFwYXJ0KQorCQlyZXR1cm4gTlVMTDsKKwlwYXJ0LT5kaXNrX3NwZWNpZmljID0gTlVMTDsKKwlyZXR1cm4gcGFydDsKK30KKworc3RhdGljIFBlZFBhcnRpdGlvbioKK2xvb3BfcGFydGl0aW9uX2R1cGxpY2F0ZSAoY29uc3QgUGVkUGFydGl0aW9uKiBwYXJ0KQoreworCVBlZFBhcnRpdGlvbiogcmVzdWx0OworCQorCXJlc3VsdCA9IHBlZF9wYXJ0aXRpb25fbmV3IChwYXJ0LT5kaXNrLCBwYXJ0LT50eXBlLCBwYXJ0LT5mc190eXBlLAorCQkJCSAgICBwYXJ0LT5nZW9tLnN0YXJ0LCBwYXJ0LT5nZW9tLmVuZCk7CisJcmVzdWx0LT5udW0gPSBwYXJ0LT5udW07CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK2xvb3BfcGFydGl0aW9uX2Rlc3Ryb3kgKFBlZFBhcnRpdGlvbiogcGFydCkKK3sKKwlwZWRfZnJlZSAocGFydCk7Cit9CisKK3N0YXRpYyBpbnQKK2xvb3BfcGFydGl0aW9uX3NldF9zeXN0ZW0gKFBlZFBhcnRpdGlvbiogcGFydCwgY29uc3QgUGVkRmlsZVN5c3RlbVR5cGUqIGZzX3R5cGUpCit7CisJcGFydC0+ZnNfdHlwZSA9IGZzX3R5cGU7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2xvb3BfcGFydGl0aW9uX3NldF9mbGFnIChQZWRQYXJ0aXRpb24qIHBhcnQsIFBlZFBhcnRpdGlvbkZsYWcgZmxhZywgaW50IHN0YXRlKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50Citsb29wX3BhcnRpdGlvbl9nZXRfZmxhZyAoY29uc3QgUGVkUGFydGl0aW9uKiBwYXJ0LCBQZWRQYXJ0aXRpb25GbGFnIGZsYWcpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2xvb3BfcGFydGl0aW9uX2FsaWduIChQZWRQYXJ0aXRpb24qIHBhcnQsIGNvbnN0IFBlZENvbnN0cmFpbnQqIGNvbnN0cmFpbnQpCit7CisJUGVkR2VvbWV0cnkqCW5ld19nZW9tOworCisJbmV3X2dlb20gPSBwZWRfY29uc3RyYWludF9zb2x2ZV9uZWFyZXN0IChjb25zdHJhaW50LCAmcGFydC0+Z2VvbSk7CisJaWYgKCFuZXdfZ2VvbSkgeworCQlwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCVBFRF9FWENFUFRJT05fRVJST1IsCisJCQlQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCV8oIlVuYWJsZSB0byBzYXRpc2Z5IGFsbCBjb25zdHJhaW50cyBvbiB0aGUgIgorCQkJICAicGFydGl0aW9uLiIpKTsKKwkJcmV0dXJuIDA7CisJfQorCXBlZF9nZW9tZXRyeV9zZXQgKCZwYXJ0LT5nZW9tLCBuZXdfZ2VvbS0+c3RhcnQsIG5ld19nZW9tLT5sZW5ndGgpOworCXBlZF9nZW9tZXRyeV9kZXN0cm95IChuZXdfZ2VvbSk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2xvb3BfcGFydGl0aW9uX2lzX2ZsYWdfYXZhaWxhYmxlIChjb25zdCBQZWRQYXJ0aXRpb24qIHBhcnQsCisJICAgICAgIAkJCSAgUGVkUGFydGl0aW9uRmxhZyBmbGFnKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50Citsb29wX3BhcnRpdGlvbl9lbnVtZXJhdGUgKFBlZFBhcnRpdGlvbiogcGFydCkKK3sKKwlwYXJ0LT5udW0gPSAxOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50Citsb29wX2FsbG9jX21ldGFkYXRhIChQZWREaXNrKiBkaXNrKQoreworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50Citsb29wX2dldF9tYXhfcHJpbWFyeV9wYXJ0aXRpb25fY291bnQgKGNvbnN0IFBlZERpc2sqIGRpc2spCit7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBQZWREaXNrT3BzIGxvb3BfZGlza19vcHMgPSB7CisJcHJvYmU6CQkJbG9vcF9wcm9iZSwKKyNpZm5kZWYgRElTQ09WRVJfT05MWQorCWNsb2JiZXI6CQlsb29wX2Nsb2JiZXIsCisjZWxzZQorCWNsb2JiZXI6CQlOVUxMLAorI2VuZGlmCisJYWxsb2M6CQkJbG9vcF9hbGxvYywKKwlkdXBsaWNhdGU6CQlsb29wX2R1cGxpY2F0ZSwKKwlmcmVlOgkJCWxvb3BfZnJlZSwKKwlyZWFkOgkJCWxvb3BfcmVhZCwKKyNpZm5kZWYgRElTQ09WRVJfT05MWQorCXdyaXRlOgkJCWxvb3Bfd3JpdGUsCisjZWxzZQorCXdyaXRlOgkJCU5VTEwsCisjZW5kaWYKKworCXBhcnRpdGlvbl9uZXc6CQlsb29wX3BhcnRpdGlvbl9uZXcsCisJcGFydGl0aW9uX2R1cGxpY2F0ZToJbG9vcF9wYXJ0aXRpb25fZHVwbGljYXRlLAorCXBhcnRpdGlvbl9kZXN0cm95Oglsb29wX3BhcnRpdGlvbl9kZXN0cm95LAorCXBhcnRpdGlvbl9zZXRfc3lzdGVtOglsb29wX3BhcnRpdGlvbl9zZXRfc3lzdGVtLAorCXBhcnRpdGlvbl9zZXRfZmxhZzoJbG9vcF9wYXJ0aXRpb25fc2V0X2ZsYWcsCisJcGFydGl0aW9uX2dldF9mbGFnOglsb29wX3BhcnRpdGlvbl9nZXRfZmxhZywKKwlwYXJ0aXRpb25faXNfZmxhZ19hdmFpbGFibGU6CWxvb3BfcGFydGl0aW9uX2lzX2ZsYWdfYXZhaWxhYmxlLAorCXBhcnRpdGlvbl9zZXRfbmFtZToJTlVMTCwKKwlwYXJ0aXRpb25fZ2V0X25hbWU6CU5VTEwsCisJcGFydGl0aW9uX2FsaWduOglsb29wX3BhcnRpdGlvbl9hbGlnbiwKKwlwYXJ0aXRpb25fZW51bWVyYXRlOglsb29wX3BhcnRpdGlvbl9lbnVtZXJhdGUsCisKKwlhbGxvY19tZXRhZGF0YToJCWxvb3BfYWxsb2NfbWV0YWRhdGEsCisJZ2V0X21heF9wcmltYXJ5X3BhcnRpdGlvbl9jb3VudDoKKwkJCQlsb29wX2dldF9tYXhfcHJpbWFyeV9wYXJ0aXRpb25fY291bnQKK307CisKK3N0YXRpYyBQZWREaXNrVHlwZSBsb29wX2Rpc2tfdHlwZSA9IHsKKwluZXh0OgkJTlVMTCwKKwluYW1lOgkJImxvb3AiLAorCW9wczoJCSZsb29wX2Rpc2tfb3BzLAorCWZlYXR1cmVzOgkwCit9OworCit2b2lkCitwZWRfZGlza19sb29wX2luaXQgKCkKK3sKKwlwZWRfZGlza190eXBlX3JlZ2lzdGVyICgmbG9vcF9kaXNrX3R5cGUpOworfQorCit2b2lkCitwZWRfZGlza19sb29wX2RvbmUgKCkKK3sKKwlwZWRfZGlza190eXBlX3VucmVnaXN0ZXIgKCZsb29wX2Rpc2tfdHlwZSk7Cit9CmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2xhYmVscy9tYWMuYyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvbGFiZWxzL21hYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxOGY3MGUKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2xhYmVscy9tYWMuYwpAQCAtMCwwICsxLDE2MjAgQEAKKy8qCisgICAgbGlicGFydGVkIC0gYSBsaWJyYXJ5IGZvciBtYW5pcHVsYXRpbmcgZGlzayBwYXJ0aXRpb25zCisgICAgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAyLCAyMDA0LCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQorKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaW5jbHVkZSA8cGFydGVkL3BhcnRlZC5oPgorI2luY2x1ZGUgPHBhcnRlZC9kZWJ1Zy5oPgorI2luY2x1ZGUgPHBhcnRlZC9lbmRpYW4uaD4KKworI2lmIEVOQUJMRV9OTFMKKyMgIGluY2x1ZGUgPGxpYmludGwuaD4KKyMgIGRlZmluZSBfKFN0cmluZykgZGdldHRleHQgKFBBQ0tBR0UsIFN0cmluZykKKyNlbHNlCisjICBkZWZpbmUgXyhTdHJpbmcpIChTdHJpbmcpCisjZW5kaWYgLyogRU5BQkxFX05MUyAqLworCisvKiBzdHJ1Y3QncyBoYWNrZWQgZnJvbSBMaW51eCBzb3VyY2U6ICBmcy9wYXJ0aXRpb25zL21hYy5oCisgKiBJIGJlbGlldmUgaXQgd2FzIG9yaWdpbmFsbHkgd3JpdHRlbiBieSBQYXVsIE1hY2tlcnJhcyAoZnJvbSBjb21tZW50cyBpbgorICogUXVpayBzb3VyY2UpCisgKgorICogU2VlIGFsc286CisgKglodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL21hYy9EZXZpY2VzL0RldmljZXMtMTI2Lmh0bWwKKyAqCWh0dHA6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24vbWFjL0RldmljZXMvRGV2aWNlcy0xMjEuaHRtbAorICoJaHR0cDovL2RldndvcmxkLmFwcGxlLmNvbS90ZWNobm90ZXMvdG4vdG4xMTg5Lmh0bWwKKyAqCisgKiBQYXJ0aXRpb24gdHlwZXM6CisgKglBcHBsZV9Cb290c3RyYXAJCW5ldy13b3JsZCAoSEZTKSBib290IHBhcnRpdGlvbgorICoJQXBwbGVfcGFydGl0aW9uX21hcAlwYXJ0aXRpb24gbWFwICh0YWJsZSkKKyAqCUFwcGxlX0RyaXZlcgkJZGV2aWNlIGRyaXZlcgorICoJQXBwbGVfRHJpdmVyNDMJCVNDU0kgTWFuYWdlciA0LjMgZGV2aWNlIGRyaXZlcgorICoJQXBwbGVfTUZTCQlvcmlnaW5hbCBNYWNpbnRvc2ggRmlsZSBTeXN0ZW0gCisgKglBcHBsZV9IRlMJCUhpZXJhcmNoaWNhbCBGaWxlIFN5c3RlbSAoYW5kICspCisgKglBcHBsZV9IRlNYCQlIRlMrIHdpdGggY2FzZSBzZW5zaXRpdml0eSBhbmQgbW9yZQorICoJQXBwbGVfVU5JWF9TVlIyCQlVTklYIGZpbGUgc3lzdGVtIChVRlM/KQorICoJQXBwbGVfUFJPRE9TCQlQcm9ET1MgZmlsZSBzeXN0ZW0gCisgKglBcHBsZV9GcmVlCQl1bnVzZWQgc3BhY2UKKyAqCUFwcGxlX1NjcmF0Y2gJCWVtcHR5CisgKglBcHBsZV9Wb2lkCQlwYWRkaW5nIGZvciBpc285NjYwCisgKglBcHBsZV9FeHRyYQkJYW4gdW51c2VkIHBhcnRpdGlvbiBtYXAgZW50cnkKKyAqCisgKiBRdWljayBleHBsYW5hdGlvbjoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLQorICogVGVybWlub2xvZ3k6CisgKgorICogCVBhcnRlZAkJCUFwcGxlCisgKiAJLS0tLS0tCQkJLS0tLS0KKyAqIAlkZXZpY2UJCQlkaXNrL2RldmljZQorICogCWRpc2sJCQlubyBlcXVpdmFsZW50LgorICogCXBhcnRpdGlvbgkJdm9sdW1lIG9yIHBhcnRpdGlvbgorICogCXNlY3RvcgkJCWJsb2NrCisgKgorICogCSogQWxsIHNwYWNlIG11c3QgYmUgYWNjb3VudGVkIGZvciwgZXhjZXB0IGJsb2NrIDAgKGRyaXZlciBibG9jaykgYW5kCisgKiAJYmxvY2sgMS1YICh0aGUgcGFydGl0aW9uIG1hcDogaS5lLiBsb3RzIG9mIE1hY1Jhd1BhcnRpdGlvbnMpCisgKgorICogCSogSXQncyByZWFsbHkgaGFyZCB0byBncm93L3NocmluayB0aGUgbnVtYmVyIG9mIE1hY1Jhd1BhcnRpdGlvbgorICogCWVudHJpZXMgaW4gdGhlIHBhcnRpdGlvbiBtYXAsIGJlY2F1c2UgdGhlIGZpcnN0IHBhcnRpdGlvbiBzdGFydHMKKyAqIAlpbW1lZGlhdGVseSBhZnRlciB0aGUgcGFydGl0aW9uIG1hcC4gIFdoZW4gd2UgY2FuIG1vdmUgdGhlIHN0YXJ0IG9mCisgKiAJSEZTIGFuZCBleHQyIHBhcnRpdGlvbnMsIHRoaXMgcHJvYmxlbSB3aWxsIGRpc2FwcGVhciA7LSkKKyAqLworCisjZGVmaW5lIE1BQ19QQVJUSVRJT05fTUFHSUNfMQkweDU0NTMJCS8qIG9sZCAqLworI2RlZmluZSBNQUNfUEFSVElUSU9OX01BR0lDXzIJMHg1MDRkCisjZGVmaW5lIE1BQ19ESVNLX01BR0lDCQkweDQ1NTIKKworI2RlZmluZSBNQUNfU1RBVFVTX0JPT1RBQkxFICAgICA4ICAgICAgIC8qIHBhcnRpdGlvbiBpcyBib290YWJsZSAqLworCit0eXBlZGVmIHN0cnVjdCBfTWFjUmF3UGFydGl0aW9uICAgICBNYWNSYXdQYXJ0aXRpb247Cit0eXBlZGVmIHN0cnVjdCBfTWFjUmF3RGlzayAgICAgICAgICBNYWNSYXdEaXNrOwordHlwZWRlZiBzdHJ1Y3QgX01hY0RldmljZURyaXZlciAgICAgTWFjRGV2aWNlRHJpdmVyOwordHlwZWRlZiBzdHJ1Y3QgX01hY1BhcnRpdGlvbkRhdGEgICAgTWFjUGFydGl0aW9uRGF0YTsKK3R5cGVkZWYgc3RydWN0IF9NYWNEaXNrRGF0YSAgICAgICAgIE1hY0Rpc2tEYXRhOworCitzdHJ1Y3QgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIF9NYWNSYXdQYXJ0aXRpb24geworCXVpbnQxNl90CXNpZ25hdHVyZTsgICAgICAvKiBleHBlY3RlZCB0byBiZSBNQUNfUEFSVElUSU9OX01BR0lDICovCisJdWludDE2X3QJcmVzMTsKKwl1aW50MzJfdAltYXBfY291bnQ7ICAgICAgLyogIyBibG9ja3MgaW4gcGFydGl0aW9uIG1hcCAqLworCXVpbnQzMl90CXN0YXJ0X2Jsb2NrOyAgICAvKiBhYnNvbHV0ZSBzdGFydGluZyBibG9jayAjIG9mIHBhcnRpdGlvbiAqLworCXVpbnQzMl90CWJsb2NrX2NvdW50OyAgICAvKiBudW1iZXIgb2YgYmxvY2tzIGluIHBhcnRpdGlvbiAqLworCWNoYXIJCW5hbWVbMzJdOyAgICAgICAvKiBwYXJ0aXRpb24gbmFtZSAqLworCWNoYXIJCXR5cGVbMzJdOyAgICAgICAvKiBzdHJpbmcgdHlwZSBkZXNjcmlwdGlvbiAqLworCXVpbnQzMl90CWRhdGFfc3RhcnQ7ICAgICAvKiByZWwgYmxvY2sgIyBvZiBmaXJzdCBkYXRhIGJsb2NrICovCisJdWludDMyX3QJZGF0YV9jb3VudDsgICAgIC8qIG51bWJlciBvZiBkYXRhIGJsb2NrcyAqLworCXVpbnQzMl90CXN0YXR1czsgICAgICAgICAvKiBwYXJ0aXRpb24gc3RhdHVzIGJpdHMgKi8KKwl1aW50MzJfdAlib290X3N0YXJ0OworCXVpbnQzMl90CWJvb3RfY291bnQ7CisJdWludDMyX3QJYm9vdF9sb2FkOworCXVpbnQzMl90CWJvb3RfbG9hZDI7CisJdWludDMyX3QJYm9vdF9lbnRyeTsKKwl1aW50MzJfdAlib290X2VudHJ5MjsKKwl1aW50MzJfdAlib290X2Nrc3VtOworCWNoYXIJCXByb2Nlc3NvclsxNl07ICAvKiBDb250YWlucyA2ODB4MCwgeD0wLDIsMyw0OyBvciBlbXB0eSAqLworCXVpbnQzMl90CWRyaXZlcl9zaWc7CisJY2hhcgkJX3BhZGRpbmdbMzcyXTsKK307CisKKy8qIERyaXZlciBkZXNjcmlwdG9yIHN0cnVjdHVyZSwgaW4gYmxvY2sgMCAqLworc3RydWN0IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBfTWFjUmF3RGlzayB7CisJdWludDE2X3QJc2lnbmF0dXJlOyAgICAgIC8qIGV4cGVjdGVkIHRvIGJlIE1BQ19EUklWRVJfTUFHSUMgKi8KKwl1aW50MTZfdAlibG9ja19zaXplOwkvKiBwaHlzaWNhbCBzZWN0b3Igc2l6ZSAqLworCXVpbnQzMl90CWJsb2NrX2NvdW50OwkvKiBzaXplIG9mIGRldmljZSBpbiBibG9ja3MgKi8KKwl1aW50MTZfdAlkZXZfdHlwZTsJLyogcmVzZXJ2ZWQgKi8KKwl1aW50MTZfdAlkZXZfaWQ7CQkvKiByZXNlcnZlZCAqLworCXVpbnQzMl90CWRhdGE7CQkvKiByZXNlcnZlZCAqLworCXVpbnQxNl90CWRyaXZlcl9jb3VudDsJLyogIyBvZiBkcml2ZXIgZGVzY3JpcHRvciBlbnRyaWVzICovCisJdWludDhfdAkJZHJpdmVybGlzdFs0ODhdOy8qIGluZm8gYWJvdXQgYXZhaWxhYmxlIGRyaXZlcnMgKi8KKwl1aW50MTZfdAlwYWRkaW5nWzNdOwkvKiBwYWQgdG8gNTEyIGJ5dGVzICovCit9OworCitzdHJ1Y3QgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIF9NYWNEZXZpY2VEcml2ZXIgeworCXVpbnQzMl90CWJsb2NrOwkJLyogc3RhcnRibG9jayBpbiBNYWNSYXdEaXNrLT5ibG9ja19zaXplIHVuaXRzICovCisJdWludDE2X3QJc2l6ZTsJCS8qIHNpemUgaW4gNTEyIGJ5dGUgdW5pdHMgKi8KKwl1aW50MTZfdAl0eXBlOwkJLyogb3BlcmF0aW5nIHN5c3RlbSB0eXBlIChNYWNPUyA9IDEpICovCit9OworCitzdHJ1Y3QgX01hY1BhcnRpdGlvbkRhdGEgeworCWNoYXIJCXZvbHVtZV9uYW1lWzMzXTsJLyogZWc6ICJHYW1lcyIgKi8KKwljaGFyCQlzeXN0ZW1fbmFtZVszM107CS8qIGVnOiAiQXBwbGVfVW5peF9TVlIyIiAqLworCWNoYXIJCXByb2Nlc3Nvcl9uYW1lWzE3XTsKKworCWludAkJaXNfYm9vdDsKKwlpbnQJCWlzX2RyaXZlcjsKKwlpbnQJCWhhc19kcml2ZXI7CisJaW50CQlpc19yb290OworCWludAkJaXNfc3dhcDsKKwlpbnQJCWlzX2x2bTsKKwlpbnQJCWlzX3JhaWQ7CisKKwlQZWRTZWN0b3IJZGF0YV9yZWdpb25fbGVuZ3RoOworCVBlZFNlY3Rvcglib290X3JlZ2lvbl9sZW5ndGg7CisKKwl1aW50MzJfdAlib290X2Jhc2VfYWRkcmVzczsKKwl1aW50MzJfdAlib290X2VudHJ5X2FkZHJlc3M7CisJdWludDMyX3QJYm9vdF9jaGVja3N1bTsKKworCXVpbnQzMl90CXN0YXR1czsKKwl1aW50MzJfdAlkcml2ZXJfc2lnOworfTsKKworc3RydWN0IF9NYWNEaXNrRGF0YSB7CisJaW50CQlnaG9zdF9zaXplOwkJLyogc2VjdG9ycyBwZXIgImRyaXZlciIgYmxvY2sgKi8KKwlpbnQJCXBhcnRfbWFwX2VudHJ5X2NvdW50OwkvKiAjIGVudHJpZXMgKGluY2wuIGdob3N0KSAqLworCWludAkJcGFydF9tYXBfZW50cnlfbnVtOwkvKiBwYXJ0aXRpb24gbWFwIGxvY2F0aW9uICovCisKKwlpbnQJCWFjdGl2ZV9wYXJ0X2VudHJ5X2NvdW50OwkvKiAjIHJlYWwgcGFydGl0aW9ucyAqLworCWludAkJZnJlZV9wYXJ0X2VudHJ5X2NvdW50OwkJLyogIyBmcmVlIHNwYWNlICovCisJaW50CQlsYXN0X3BhcnRfZW50cnlfbnVtOwkJLyogbGFzdCBlbnRyeSBudW1iZXIgKi8KKworCXVpbnQxNl90CWJsb2NrX3NpemU7CQkvKiBwaHlzaWNhbCBzZWN0b3Igc2l6ZSAqLworCXVpbnQxNl90CWRyaXZlcl9jb3VudDsKKwlNYWNEZXZpY2VEcml2ZXIJZHJpdmVybGlzdFsxICsgNjBdOwkvKiA0ODggYnl0ZXMgKi8KK307CisKK3N0YXRpYyBQZWREaXNrVHlwZSBtYWNfZGlza190eXBlOworCitzdGF0aWMgaW50CitfY2hlY2tfc2lnbmF0dXJlIChNYWNSYXdEaXNrKiByYXdfZGlzaykKK3sKKwlpZiAoUEVEX0JFMTZfVE9fQ1BVIChyYXdfZGlzay0+c2lnbmF0dXJlKSAhPSBNQUNfRElTS19NQUdJQykgeworI2lmZGVmIERJU0NPVkVSX09OTFkKKwkJcmV0dXJuIDA7CisjZWxzZQorCQlyZXR1cm4gcGVkX2V4Y2VwdGlvbl90aHJvdyAoCisJCQlQRURfRVhDRVBUSU9OX0VSUk9SLAorCQkJUEVEX0VYQ0VQVElPTl9JR05PUkVfQ0FOQ0VMLAorCQkJXygiSW52YWxpZCBzaWduYXR1cmUgJXggZm9yIE1hYyBkaXNrIGxhYmVscy4iKSwKKwkJCShpbnQpIFBFRF9CRTE2X1RPX0NQVSAocmF3X2Rpc2stPnNpZ25hdHVyZSkpCisJCQk9PSBQRURfRVhDRVBUSU9OX0lHTk9SRTsKKyNlbmRpZgorCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50CitfcmF3cGFydF9jaGVja19zaWduYXR1cmUgKE1hY1Jhd1BhcnRpdGlvbiogcmF3X3BhcnQpCit7CisJaW50CXNpZyA9IChpbnQpIFBFRF9CRTE2X1RPX0NQVSAocmF3X3BhcnQtPnNpZ25hdHVyZSk7CisJcmV0dXJuIHNpZyA9PSBNQUNfUEFSVElUSU9OX01BR0lDXzEgfHwgc2lnID09IE1BQ19QQVJUSVRJT05fTUFHSUNfMjsKK30KKworc3RhdGljIGludAorbWFjX3Byb2JlIChjb25zdCBQZWREZXZpY2UgKiBkZXYpCit7CisJTWFjUmF3RGlzawlidWY7CisKKwlQRURfQVNTRVJUIChkZXYgIT0gTlVMTCwgcmV0dXJuIDApOworCisgICAgICAgIGlmIChkZXYtPnNlY3Rvcl9zaXplICE9IDUxMikKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKworCWlmICghcGVkX2RldmljZV9yZWFkIChkZXYsICZidWYsIDAsIDEpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBfY2hlY2tfc2lnbmF0dXJlICgmYnVmKTsKK30KKworc3RhdGljIGludAorX2Rpc2tfYWRkX3BhcnRfbWFwX2VudHJ5IChQZWREaXNrKiBkaXNrLCBpbnQgd2FybikKK3sKKwlNYWNEaXNrRGF0YSoJCW1hY19kaXNrX2RhdGEgPSBkaXNrLT5kaXNrX3NwZWNpZmljOworCVBlZFBhcnRpdGlvbioJCW5ld19wYXJ0OworCU1hY1BhcnRpdGlvbkRhdGEqCW1hY19wYXJ0X2RhdGE7CisJUGVkU2VjdG9yCQlwYXJ0X21hcF9zaXplOworCVBlZENvbnN0cmFpbnQqCQljb25zdHJhaW50X2FueSA9IHBlZF9jb25zdHJhaW50X2FueSAoZGlzay0+ZGV2KTsKKworI2lmbmRlZiBESVNDT1ZFUl9PTkxZCisJaWYgKHdhcm4gJiYgcGVkX2V4Y2VwdGlvbl90aHJvdyAoCisJCVBFRF9FWENFUFRJT05fRVJST1IsCisJCVBFRF9FWENFUFRJT05fRklYIHwgUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCV8oIlBhcnRpdGlvbiBtYXAgaGFzIG5vIHBhcnRpdGlvbiBtYXAgZW50cnkhIikpCisJCQkhPSBQRURfRVhDRVBUSU9OX0ZJWCkKKwkJZ290byBlcnJvcjsKKyNlbmRpZiAvKiAhRElTQ09WRVJfT05MWSAqLworCisJcGFydF9tYXBfc2l6ZQorCQk9IHBlZF9yb3VuZF91cF90byAobWFjX2Rpc2tfZGF0YS0+bGFzdF9wYXJ0X2VudHJ5X251bSwgNjQpOworCWlmIChwYXJ0X21hcF9zaXplID09IDApCisJCXBhcnRfbWFwX3NpemUgPSA2NDsKKworCW5ld19wYXJ0ID0gcGVkX3BhcnRpdGlvbl9uZXcgKGRpc2ssIDAsIE5VTEwsIDEsIHBhcnRfbWFwX3NpemUgLSAxKTsKKwlpZiAoIW5ld19wYXJ0KQorCQlnb3RvIGVycm9yOworCisJbWFjX3BhcnRfZGF0YSA9IG5ld19wYXJ0LT5kaXNrX3NwZWNpZmljOworCXN0cmNweSAobWFjX3BhcnRfZGF0YS0+dm9sdW1lX25hbWUsICJBcHBsZSIpOworCXN0cmNweSAobWFjX3BhcnRfZGF0YS0+c3lzdGVtX25hbWUsICJBcHBsZV9wYXJ0aXRpb25fbWFwIik7CisKKwlpZiAoIXBlZF9kaXNrX2FkZF9wYXJ0aXRpb24gKGRpc2ssIG5ld19wYXJ0LCBjb25zdHJhaW50X2FueSkpCisJCWdvdG8gZXJyb3JfZGVzdHJveV9uZXdfcGFydDsKKworCW1hY19kaXNrX2RhdGEtPnBhcnRfbWFwX2VudHJ5X251bSA9IG5ld19wYXJ0LT5udW07CisJbWFjX2Rpc2tfZGF0YS0+cGFydF9tYXBfZW50cnlfY291bnQKKwkJPSBuZXdfcGFydC0+Z2VvbS5lbmQgLSBtYWNfZGlza19kYXRhLT5naG9zdF9zaXplOworCXBlZF9jb25zdHJhaW50X2Rlc3Ryb3kgKGNvbnN0cmFpbnRfYW55KTsKKwlyZXR1cm4gMTsKKworZXJyb3JfZGVzdHJveV9uZXdfcGFydDoKKwlwZWRfcGFydGl0aW9uX2Rlc3Ryb3kgKG5ld19wYXJ0KTsKK2Vycm9yOgorCXBlZF9jb25zdHJhaW50X2Rlc3Ryb3kgKGNvbnN0cmFpbnRfYW55KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIFBlZERpc2sqCittYWNfYWxsb2MgKGNvbnN0IFBlZERldmljZSogZGV2KQoreworCVBlZERpc2sqCQlkaXNrOworCU1hY0Rpc2tEYXRhKgkJbWFjX2Rpc2tfZGF0YTsKKworCVBFRF9BU1NFUlQgKGRldiAhPSBOVUxMLCByZXR1cm4gTlVMTCk7CisKKyNpZm5kZWYgRElTQ09WRVJfT05MWQorCWlmIChkZXYtPmxlbmd0aCA8IDI1NikgeworCQlwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCVBFRF9FWENFUFRJT05fRVJST1IsCisJCQlQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCV8oIiVzIGlzIHRvbyBzbWFsbCBmb3IgYSBNYWMgZGlzayBsYWJlbCEiKSwKKwkJCWRldi0+cGF0aCk7CisJCWdvdG8gZXJyb3I7CisJfQorI2VuZGlmCisKKwlkaXNrID0gX3BlZF9kaXNrX2FsbG9jIChkZXYsICZtYWNfZGlza190eXBlKTsKKwlpZiAoIWRpc2spCisJCWdvdG8gZXJyb3I7CisKKwltYWNfZGlza19kYXRhID0gKE1hY0Rpc2tEYXRhKikgcGVkX21hbGxvYyAoc2l6ZW9mIChNYWNEaXNrRGF0YSkpOworCWlmICghbWFjX2Rpc2tfZGF0YSkKKwkJZ290byBlcnJvcl9mcmVlX2Rpc2s7CisJZGlzay0+ZGlza19zcGVjaWZpYyA9IG1hY19kaXNrX2RhdGE7CisJbWFjX2Rpc2tfZGF0YS0+Z2hvc3Rfc2l6ZSA9IGRpc2stPmRldi0+c2VjdG9yX3NpemUgLyA1MTI7CisJbWFjX2Rpc2tfZGF0YS0+YWN0aXZlX3BhcnRfZW50cnlfY291bnQgPSAwOworCW1hY19kaXNrX2RhdGEtPmZyZWVfcGFydF9lbnRyeV9jb3VudCA9IDE7CisJbWFjX2Rpc2tfZGF0YS0+bGFzdF9wYXJ0X2VudHJ5X251bSA9IDE7CisJbWFjX2Rpc2tfZGF0YS0+YmxvY2tfc2l6ZSA9IDA7CisJbWFjX2Rpc2tfZGF0YS0+ZHJpdmVyX2NvdW50ID0gMDsKKwltZW1zZXQoJm1hY19kaXNrX2RhdGEtPmRyaXZlcmxpc3RbMF0sIDAsIHNpemVvZihtYWNfZGlza19kYXRhLT5kcml2ZXJsaXN0KSk7CisKKwlpZiAoIV9kaXNrX2FkZF9wYXJ0X21hcF9lbnRyeSAoZGlzaywgMCkpCisJCWdvdG8gZXJyb3JfZnJlZV9kaXNrOworCXJldHVybiBkaXNrOworCitlcnJvcl9mcmVlX2Rpc2s6CisJX3BlZF9kaXNrX2ZyZWUgKGRpc2spOworZXJyb3I6CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBQZWREaXNrKgorbWFjX2R1cGxpY2F0ZSAoY29uc3QgUGVkRGlzayogZGlzaykKK3sKKwlQZWREaXNrKgluZXdfZGlzazsKKwlNYWNEaXNrRGF0YSoJbmV3X21hY19kYXRhOworCU1hY0Rpc2tEYXRhKglvbGRfbWFjX2RhdGEgPSAoTWFjRGlza0RhdGEqKSBkaXNrLT5kaXNrX3NwZWNpZmljOworCVBlZFBhcnRpdGlvbioJcGFydGl0aW9uX21hcDsKKyAgICAgICAKKwluZXdfZGlzayA9IHBlZF9kaXNrX25ld19mcmVzaCAoZGlzay0+ZGV2LCAmbWFjX2Rpc2tfdHlwZSk7CisJaWYgKCFuZXdfZGlzaykKKwkJZ290byBlcnJvcjsKKworCW5ld19tYWNfZGF0YSA9IChNYWNEaXNrRGF0YSopIG5ld19kaXNrLT5kaXNrX3NwZWNpZmljOworCisJLyogcmVtb3ZlIHRoZSBwYXJ0aXRpb24gbWFwIHBhcnRpdGlvbiAtIGl0IHdpbGwgYmUgZHVwbGljYXRlZAorCSAqIGxhdGVyLgorCSAqLworCXBhcnRpdGlvbl9tYXAgPSBwZWRfZGlza19nZXRfcGFydGl0aW9uX2J5X3NlY3RvciAobmV3X2Rpc2ssIDEpOworCVBFRF9BU1NFUlQgKHBhcnRpdGlvbl9tYXAgIT0gTlVMTCwgcmV0dXJuIDApOworCXBlZF9kaXNrX3JlbW92ZV9wYXJ0aXRpb24gKG5ld19kaXNrLCBwYXJ0aXRpb25fbWFwKTsKKworCS8qIHVnbHksIGJ1dCBDIGlzIHVnbHkgOnAgKi8KKwltZW1jcHkgKG5ld19tYWNfZGF0YSwgb2xkX21hY19kYXRhLCBzaXplb2YgKE1hY0Rpc2tEYXRhKSk7CisJcmV0dXJuIG5ld19kaXNrOworCisJX3BlZF9kaXNrX2ZyZWUgKG5ld19kaXNrKTsKK2Vycm9yOgorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZAorbWFjX2ZyZWUgKFBlZERpc2sqIGRpc2spCit7CisJTWFjRGlza0RhdGEqCW1hY19kaXNrX2RhdGEgPSBkaXNrLT5kaXNrX3NwZWNpZmljOworCisJX3BlZF9kaXNrX2ZyZWUgKGRpc2spOworCXBlZF9mcmVlIChtYWNfZGlza19kYXRhKTsKK30KKworI2lmbmRlZiBESVNDT1ZFUl9PTkxZCitzdGF0aWMgaW50CitfY2xvYmJlcl9wYXJ0X21hcCAoUGVkRGV2aWNlKiBkZXYpCit7CisJTWFjUmF3UGFydGl0aW9uCQlyYXdfcGFydDsKKwlQZWRTZWN0b3IJCXNlY3RvcjsKKworCWZvciAoc2VjdG9yPTE7IDE7IHNlY3RvcisrKSB7CisJCWlmICghcGVkX2RldmljZV9yZWFkIChkZXYsICZyYXdfcGFydCwgc2VjdG9yLCAxKSkKKwkJCXJldHVybiAwOworCQlpZiAoIV9yYXdwYXJ0X2NoZWNrX3NpZ25hdHVyZSAoJnJhd19wYXJ0KSkKKwkJCXJldHVybiAxOworCQltZW1zZXQgKCZyYXdfcGFydCwgMCwgNTEyKTsKKwkJaWYgKCFwZWRfZGV2aWNlX3dyaXRlIChkZXYsICZyYXdfcGFydCwgc2VjdG9yLCAxKSkKKwkJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIGludAorbWFjX2Nsb2JiZXIgKFBlZERldmljZSogZGV2KQoreworCU1hY1Jhd0Rpc2sJCXJhd19kaXNrOworCisJaWYgKCFwZWRfZGV2aWNlX3JlYWQgKGRldiwgJnJhd19kaXNrLCAwLCAxKSkKKwkJcmV0dXJuIDA7CisJaWYgKCFfY2hlY2tfc2lnbmF0dXJlICgmcmF3X2Rpc2spKQorCQlyZXR1cm4gMDsKKwltZW1zZXQgKCZyYXdfZGlzaywgMCwgNTEyKTsKKwlpZiAoIXBlZF9kZXZpY2Vfd3JpdGUgKGRldiwgJnJhd19kaXNrLCAwLCAxKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gX2Nsb2JiZXJfcGFydF9tYXAgKGRldik7Cit9CisjZW5kaWYgLyogIURJU0NPVkVSX09OTFkgKi8KKworc3RhdGljIGludAorX3Jhd3BhcnRfY21wX3R5cGUgKE1hY1Jhd1BhcnRpdGlvbiogcmF3X3BhcnQsIGNoYXIqIHR5cGUpCit7CisJcmV0dXJuIHN0cm5jYXNlY21wIChyYXdfcGFydC0+dHlwZSwgdHlwZSwgMzIpID09IDA7Cit9CisKK3N0YXRpYyBpbnQKK19yYXdwYXJ0X2NtcF9uYW1lIChNYWNSYXdQYXJ0aXRpb24qIHJhd19wYXJ0LCBjaGFyKiBuYW1lKQoreworCXJldHVybiBzdHJuY2FzZWNtcCAocmF3X3BhcnQtPm5hbWUsIG5hbWUsIDMyKSA9PSAwOworfQorCitzdGF0aWMgaW50CitfcmF3cGFydF9pc19wYXJ0aXRpb25fbWFwIChNYWNSYXdQYXJ0aXRpb24qIHJhd19wYXJ0KQoreworCXJldHVybiBfcmF3cGFydF9jbXBfdHlwZSAocmF3X3BhcnQsICJBcHBsZV9wYXJ0aXRpb25fbWFwIik7Cit9CisKK3N0YXRpYyBpbnQKK3N0cm5jYXNlc3RyIChjb25zdCBjaGFyKiBoYXlzdGFjaywgY29uc3QgY2hhciogbmVlZGxlLCBpbnQgbikKK3sKKwlpbnQJbmVlZGxlX3NpemUgPSBzdHJsZW4gKG5lZWRsZSk7CisJaW50CWk7CisKKwlmb3IgKGkgPSAwOyBoYXlzdGFja1tpXSAmJiBpIDwgbiAtIG5lZWRsZV9zaXplOyBpKyspIHsKKwkJaWYgKHN0cm5jYXNlY21wIChoYXlzdGFjayArIGksIG5lZWRsZSwgbmVlZGxlX3NpemUpID09IDApCisJCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorX3Jhd3BhcnRfaXNfYm9vdCAoTWFjUmF3UGFydGl0aW9uKiByYXdfcGFydCkKK3sKKwlpZiAoIXN0cmNhc2VjbXAocmF3X3BhcnQtPnR5cGUsICJBcHBsZV9Cb290c3RyYXAiKSkKKwkJcmV0dXJuIDE7CisKKwlpZiAoIXN0cmNhc2VjbXAocmF3X3BhcnQtPnR5cGUsICJBcHBsZV9Cb290IikpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK19yYXdwYXJ0X2lzX2RyaXZlciAoTWFjUmF3UGFydGl0aW9uKiByYXdfcGFydCkKK3sKKwlpZiAoc3RybmNtcCAocmF3X3BhcnQtPnR5cGUsICJBcHBsZV8iLCA2KSAhPSAwKQorCQlyZXR1cm4gMDsKKwlpZiAoIXN0cm5jYXNlc3RyIChyYXdfcGFydC0+dHlwZSwgImRyaXZlciIsIDMyKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK19yYXdwYXJ0X2hhc19kcml2ZXIgKE1hY1Jhd1BhcnRpdGlvbiogcmF3X3BhcnQsIE1hY0Rpc2tEYXRhKiBtYWNfZGlza19kYXRhKQoreworCU1hY0RldmljZURyaXZlciAqZHJpdmVybGlzdDsKKwl1aW50MTZfdCBpLCBic3o7CisJdWludDMyX3QgZHJpdmVyX2JzLCBkcml2ZXJfYmUsIHBhcnRfYmU7CisKKwlkcml2ZXJsaXN0ID0gJm1hY19kaXNrX2RhdGEtPmRyaXZlcmxpc3RbMF07CisJYnN6ID0gbWFjX2Rpc2tfZGF0YS0+YmxvY2tfc2l6ZSAvIDUxMjsKKwlmb3IgKGkgPSAwOyBpIDwgbWFjX2Rpc2tfZGF0YS0+ZHJpdmVyX2NvdW50OyBpKyspIHsKKwkJZHJpdmVyX2JzID0gZHJpdmVybGlzdC0+YmxvY2sgKiBic3o7CisJCWRyaXZlcl9iZSA9IGRyaXZlcl9icyArIGRyaXZlcmxpc3QtPnNpemU7CisJCXBhcnRfYmUgPSByYXdfcGFydC0+c3RhcnRfYmxvY2sgKyByYXdfcGFydC0+YmxvY2tfY291bnQ7CisJCWlmIChkcml2ZXJfYnMgPj0gcmF3X3BhcnQtPnN0YXJ0X2Jsb2NrICYmIGRyaXZlcl9iZSA8PSBwYXJ0X2JlKQorCQkJcmV0dXJuIDE7CisJCWRyaXZlcmxpc3QrKzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK19yYXdwYXJ0X2lzX3Jvb3QgKE1hY1Jhd1BhcnRpdGlvbiogcmF3X3BhcnQpCit7CisJaWYgKCFfcmF3cGFydF9jbXBfdHlwZSAocmF3X3BhcnQsICJBcHBsZV9VTklYX1NWUjIiKSkKKwkJcmV0dXJuIDA7CisJaWYgKHN0cmNtcCAocmF3X3BhcnQtPm5hbWUsICJyb290IikgIT0gMCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK19yYXdwYXJ0X2lzX3N3YXAgKE1hY1Jhd1BhcnRpdGlvbiogcmF3X3BhcnQpCit7CisJaWYgKCFfcmF3cGFydF9jbXBfdHlwZSAocmF3X3BhcnQsICJBcHBsZV9VTklYX1NWUjIiKSkKKwkJcmV0dXJuIDA7CisJaWYgKHN0cmNtcCAocmF3X3BhcnQtPm5hbWUsICJzd2FwIikgIT0gMCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK19yYXdwYXJ0X2lzX2x2bSAoTWFjUmF3UGFydGl0aW9uKiByYXdfcGFydCkKK3sKKwlpZiAoc3RyY21wIChyYXdfcGFydC0+dHlwZSwgIkxpbnV4X0xWTSIpICE9IDApCisJCXJldHVybiAwOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50CitfcmF3cGFydF9pc19yYWlkIChNYWNSYXdQYXJ0aXRpb24qIHJhd19wYXJ0KQoreworCWlmIChzdHJjbXAgKHJhd19wYXJ0LT50eXBlLCAiTGludXhfUkFJRCIpICE9IDApCisJCXJldHVybiAwOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50CitfcmF3cGFydF9pc192b2lkIChNYWNSYXdQYXJ0aXRpb24qIHJhd19wYXJ0KQoreworCXJldHVybiBfcmF3cGFydF9jbXBfdHlwZSAocmF3X3BhcnQsICJBcHBsZV9Wb2lkIik7Cit9CisKKy8qIHJldHVybnMgMSBpZiB0aGUgcmF3X3BhcnQgcmVwcmVzZW50cyBhIHBhcnRpdGlvbiB0aGF0IGlzICJ1bnVzZWQgc3BhY2UiLCBvcgorICogZG9lc24ndCByZXByZXNlbnQgYSBwYXJ0aXRpb24gYXQgYWxsLiAgTk9URTogc29tZSBwZW9wbGUgbWFrZSBBcHBsZV9GcmVlCisgKiBwYXJ0aXRpb25zIHdpdGggTWFjT1MsIGJlY2F1c2UgdGhleSBjYW4ndCBzZWxlY3QgYW5vdGhlciB0eXBlLiAgU28sIGlmIHRoZQorICogbmFtZSBpcyBhbnl0aGluZyBvdGhlciB0aGFuICJFeHRyYSIgb3IgIiIsIGl0IGlzIHRyZWF0ZWQgYXMgYSAicmVhbCIKKyAqIHBhcnRpdGlvbi4KKyAqLworc3RhdGljIGludAorX3Jhd3BhcnRfaXNfYWN0aXZlIChNYWNSYXdQYXJ0aXRpb24qIHJhd19wYXJ0KQoreworCWlmIChfcmF3cGFydF9jbXBfdHlwZSAocmF3X3BhcnQsICJBcHBsZV9GcmVlIikKKwkgICAgJiYgKF9yYXdwYXJ0X2NtcF9uYW1lIChyYXdfcGFydCwgIkV4dHJhIikKKwkJfHwgX3Jhd3BhcnRfY21wX25hbWUgKHJhd19wYXJ0LCAiIikpKQorCQlyZXR1cm4gMDsKKwlpZiAoX3Jhd3BhcnRfY21wX3R5cGUgKHJhd19wYXJ0LCAiQXBwbGVfVm9pZCIpKQorCQlyZXR1cm4gMDsKKwlpZiAoX3Jhd3BhcnRfY21wX3R5cGUgKHJhd19wYXJ0LCAiQXBwbGVfU2NyYXRjaCIpKQorCQlyZXR1cm4gMDsKKwlpZiAoX3Jhd3BhcnRfY21wX3R5cGUgKHJhd19wYXJ0LCAiQXBwbGVfRXh0cmEiKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIFBlZFBhcnRpdGlvbioKK19yYXdwYXJ0X2FuYWx5c2UgKE1hY1Jhd1BhcnRpdGlvbiogcmF3X3BhcnQsIFBlZERpc2sqIGRpc2ssIGludCBudW0pCit7CisJTWFjRGlza0RhdGEqCQltYWNfZGlza19kYXRhOworCVBlZFBhcnRpdGlvbioJCXBhcnQ7CisJTWFjUGFydGl0aW9uRGF0YSoJbWFjX3BhcnRfZGF0YTsKKwlQZWRTZWN0b3IJCWJsb2NrX3NpemU7CisJUGVkU2VjdG9yCQlzdGFydCwgbGVuZ3RoOworCisJaWYgKCFfcmF3cGFydF9jaGVja19zaWduYXR1cmUgKHJhd19wYXJ0KSkgeworI2lmbmRlZiBESVNDT1ZFUl9PTkxZCisJCWlmIChwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCVBFRF9FWENFUFRJT05fV0FSTklORywKKwkJCVBFRF9FWENFUFRJT05fSUdOT1JFX0NBTkNFTCwKKwkJCV8oIlBhcnRpdGlvbiAlZCBoYXMgYW4gaW52YWxpZCBzaWduYXR1cmUgJXguIiksCisJCQludW0sCisJCQkoaW50KSBQRURfQkUxNl9UT19DUFUgKHJhd19wYXJ0LT5zaWduYXR1cmUpKQorCQkJCSE9IFBFRF9FWENFUFRJT05fSUdOT1JFKQorI2VuZGlmCisJCQlnb3RvIGVycm9yOworCX0KKworCW1hY19kaXNrX2RhdGEgPSAoTWFjRGlza0RhdGEqKSBkaXNrLT5kaXNrX3NwZWNpZmljOworCWJsb2NrX3NpemUgPSBkaXNrLT5kZXYtPnNlY3Rvcl9zaXplIC8gNTEyOworCisJc3RhcnQgPSBQRURfQkUzMl9UT19DUFUgKHJhd19wYXJ0LT5zdGFydF9ibG9jaykgKiBibG9ja19zaXplOworCWxlbmd0aCA9IFBFRF9CRTMyX1RPX0NQVSAocmF3X3BhcnQtPmJsb2NrX2NvdW50KSAqIGJsb2NrX3NpemU7CisJaWYgKGxlbmd0aCA9PSAwKSB7CisjaWZuZGVmIERJU0NPVkVSX09OTFkKKwkJcGVkX2V4Y2VwdGlvbl90aHJvdyAoCisJCQlQRURfRVhDRVBUSU9OX0VSUk9SLAorCQkJUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQlfKCJQYXJ0aXRpb24gJWQgaGFzIGFuIGludmFsaWQgbGVuZ3RoIG9mIDAgYnl0ZXMhIiksCisJCQludW0pOworI2VuZGlmCisJCXJldHVybiBOVUxMOworCX0KKwlwYXJ0ID0gcGVkX3BhcnRpdGlvbl9uZXcgKGRpc2ssIDAsIE5VTEwsIHN0YXJ0LCBzdGFydCArIGxlbmd0aCAtIDEpOworCWlmICghcGFydCkKKwkJZ290byBlcnJvcjsKKworCW1hY19wYXJ0X2RhdGEgPSBwYXJ0LT5kaXNrX3NwZWNpZmljOworCisJc3RybmNweSAobWFjX3BhcnRfZGF0YS0+dm9sdW1lX25hbWUsIHJhd19wYXJ0LT5uYW1lLCAzMik7CisJc3RybmNweSAobWFjX3BhcnRfZGF0YS0+c3lzdGVtX25hbWUsIHJhd19wYXJ0LT50eXBlLCAzMik7CisJc3RybmNweSAobWFjX3BhcnRfZGF0YS0+cHJvY2Vzc29yX25hbWUsIHJhd19wYXJ0LT5wcm9jZXNzb3IsIDE2KTsKKworCW1hY19wYXJ0X2RhdGEtPmlzX2Jvb3QgPSBfcmF3cGFydF9pc19ib290IChyYXdfcGFydCk7CisJbWFjX3BhcnRfZGF0YS0+aXNfZHJpdmVyID0gX3Jhd3BhcnRfaXNfZHJpdmVyIChyYXdfcGFydCk7CisJaWYgKG1hY19wYXJ0X2RhdGEtPmlzX2RyaXZlcikKKwkJbWFjX3BhcnRfZGF0YS0+aGFzX2RyaXZlciA9IF9yYXdwYXJ0X2hhc19kcml2ZXIocmF3X3BhcnQsIG1hY19kaXNrX2RhdGEpOworCW1hY19wYXJ0X2RhdGEtPmlzX3Jvb3QgPSBfcmF3cGFydF9pc19yb290IChyYXdfcGFydCk7CisJbWFjX3BhcnRfZGF0YS0+aXNfc3dhcCA9IF9yYXdwYXJ0X2lzX3N3YXAgKHJhd19wYXJ0KTsKKwltYWNfcGFydF9kYXRhLT5pc19sdm0gPSBfcmF3cGFydF9pc19sdm0gKHJhd19wYXJ0KTsKKwltYWNfcGFydF9kYXRhLT5pc19yYWlkID0gX3Jhd3BhcnRfaXNfcmFpZCAocmF3X3BhcnQpOworCisJLyogImRhdGEiIHJlZ2lvbiAqLworI2lmbmRlZiBESVNDT1ZFUl9PTkxZCisJaWYgKHJhd19wYXJ0LT5kYXRhX3N0YXJ0KSB7CisJCXBlZF9leGNlcHRpb25fdGhyb3cgKAorCQkJUEVEX0VYQ0VQVElPTl9FUlJPUiwKKwkJCVBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJXygiVGhlIGRhdGEgcmVnaW9uIGRvZXNuJ3Qgc3RhcnQgYXQgdGhlIHN0YXJ0ICIKKwkJCSAgIm9mIHRoZSBwYXJ0aXRpb24uIikpOworCQlnb3RvIGVycm9yX2Rlc3Ryb3lfcGFydDsKKwl9CisjZW5kaWYgLyogIURJU0NPVkVSX09OTFkgKi8KKwltYWNfcGFydF9kYXRhLT5kYXRhX3JlZ2lvbl9sZW5ndGgKKwkJPSBQRURfQkUzMl9UT19DUFUgKHJhd19wYXJ0LT5kYXRhX2NvdW50KSAqIGJsb2NrX3NpemU7CisKKwkvKiBib290IHJlZ2lvbiAtIHdlIGhhdmUgbm8gaWRlYSB3aGF0IHRoaXMgaXMgZm9yLCBidXQgTWFjIE9TWAorCSAqIHNlZW1zIHRvIHB1dCBnYXJiYWdlIGhlcmUsIGFuZCBkb2Vzbid0IHBheSBhbnkgYXR0ZW50aW9uIHRvCisJICogaXQgYWZ0ZXJ3YXJkcy4gIFtjbGF1c2VuLCBkYW4gYnVyY2F3XQorCSAqLworI2lmIDAKKwlpZiAocmF3X3BhcnQtPmJvb3Rfc3RhcnQpIHsKKwkJcGVkX2V4Y2VwdGlvbl90aHJvdyAoCisJCQlQRURfRVhDRVBUSU9OX0VSUk9SLAorCQkJUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQlfKCJUaGUgYm9vdCByZWdpb24gZG9lc24ndCBzdGFydCBhdCB0aGUgc3RhcnQgIgorCQkJICAib2YgdGhlIHBhcnRpdGlvbi4iKSk7CisJCWdvdG8gZXJyb3JfZGVzdHJveV9wYXJ0OworCX0KKyNlbmRpZgorCW1hY19wYXJ0X2RhdGEtPmJvb3RfcmVnaW9uX2xlbmd0aAorCQk9IFBFRF9CRTMyX1RPX0NQVSAocmF3X3BhcnQtPmJvb3RfY291bnQpICogYmxvY2tfc2l6ZTsKKworI2lmbmRlZiBESVNDT1ZFUl9PTkxZCisJaWYgKG1hY19wYXJ0X2RhdGEtPmhhc19kcml2ZXIpIHsKKwkJaWYgKG1hY19wYXJ0X2RhdGEtPmJvb3RfcmVnaW9uX2xlbmd0aCA8IHBhcnQtPmdlb20ubGVuZ3RoKSB7CisJCQlpZiAocGVkX2V4Y2VwdGlvbl90aHJvdyAoCisJCQkJUEVEX0VYQ0VQVElPTl9FUlJPUiwKKwkJCQlQRURfRVhDRVBUSU9OX0lHTk9SRV9DQU5DRUwsCisJCQkJXygiVGhlIHBhcnRpdGlvbidzIGJvb3QgcmVnaW9uIGRvZXNuJ3Qgb2NjdXB5ICIKKwkJCQkgICJ0aGUgZW50aXJlIHBhcnRpdGlvbi4iKSkKKwkJCQkJIT0gUEVEX0VYQ0VQVElPTl9JR05PUkUpCisJCQkJZ290byBlcnJvcl9kZXN0cm95X3BhcnQ7CisJCX0KKwl9IGVsc2UgeworCQlpZiAobWFjX3BhcnRfZGF0YS0+ZGF0YV9yZWdpb25fbGVuZ3RoIDwgcGFydC0+Z2VvbS5sZW5ndGggJiYKKwkJICAgICFtYWNfcGFydF9kYXRhLT5pc19ib290KSB7CisJCQlpZiAocGVkX2V4Y2VwdGlvbl90aHJvdyAoCisJCQkJUEVEX0VYQ0VQVElPTl9FUlJPUiwKKwkJCQlQRURfRVhDRVBUSU9OX0lHTk9SRV9DQU5DRUwsCisJCQkJXygiVGhlIHBhcnRpdGlvbidzIGRhdGEgcmVnaW9uIGRvZXNuJ3Qgb2NjdXB5ICIKKwkJCQkgICJ0aGUgZW50aXJlIHBhcnRpdGlvbi4iKSkKKwkJCQkJIT0gUEVEX0VYQ0VQVElPTl9JR05PUkUpCisJCQkJZ290byBlcnJvcl9kZXN0cm95X3BhcnQ7CisJCX0KKwl9CisjZW5kaWYgLyogIURJU0NPVkVSX09OTFkgKi8KKworCW1hY19wYXJ0X2RhdGEtPmJvb3RfYmFzZV9hZGRyZXNzCisJCT0gUEVEX0JFMzJfVE9fQ1BVIChyYXdfcGFydC0+Ym9vdF9sb2FkKTsKKwltYWNfcGFydF9kYXRhLT5ib290X2VudHJ5X2FkZHJlc3MKKwkJPSBQRURfQkUzMl9UT19DUFUgKHJhd19wYXJ0LT5ib290X2VudHJ5KTsKKwltYWNfcGFydF9kYXRhLT5ib290X2NoZWNrc3VtCisJCT0gUEVEX0JFMzJfVE9fQ1BVIChyYXdfcGFydC0+Ym9vdF9ja3N1bSk7CisKKwltYWNfcGFydF9kYXRhLT5zdGF0dXMgPSBQRURfQkUzMl9UT19DUFUgKHJhd19wYXJ0LT5zdGF0dXMpOworCW1hY19wYXJ0X2RhdGEtPmRyaXZlcl9zaWcgPSBQRURfQkUzMl9UT19DUFUgKHJhd19wYXJ0LT5kcml2ZXJfc2lnKTsKKworCXJldHVybiBwYXJ0OworCitlcnJvcl9kZXN0cm95X3BhcnQ6CisJcGVkX3BhcnRpdGlvbl9kZXN0cm95IChwYXJ0KTsKK2Vycm9yOgorCXJldHVybiBOVUxMOworfQorCisvKiBsb29rcyBhdCB0aGUgcGFydGl0aW9uIG1hcCBzaXplIGZpZWxkIGluIGEgbWFjIHJhdyBwYXJ0aXRpb24sIGFuZCBjYWxjdWxhdGVzCisgKiB3aGF0IHRoZSBzaXplIG9mIHRoZSBwYXJ0aXRpb24gbWFwIHNob3VsZCBiZSwgZnJvbSBpdAorICovCitzdGF0aWMgaW50CitfcmF3cGFydF9nZXRfcGFydG1hcF9zaXplIChNYWNSYXdQYXJ0aXRpb24qIHJhd19wYXJ0LCBQZWREaXNrKiBkaXNrKQoreworCU1hY0Rpc2tEYXRhKgltYWNfZGlza19kYXRhID0gZGlzay0+ZGlza19zcGVjaWZpYzsKKwlQZWRTZWN0b3IJc2VjdG9yX3NpemUgPSBkaXNrLT5kZXYtPnNlY3Rvcl9zaXplIC8gNTEyOworCVBlZFNlY3RvcglwYXJ0X21hcF9zdGFydDsKKwlQZWRTZWN0b3IJcGFydF9tYXBfZW5kOworCisJcGFydF9tYXBfc3RhcnQgPSBtYWNfZGlza19kYXRhLT5naG9zdF9zaXplOworCXBhcnRfbWFwX2VuZCA9IHNlY3Rvcl9zaXplICogUEVEX0JFMzJfVE9fQ1BVIChyYXdfcGFydC0+bWFwX2NvdW50KTsKKworCXJldHVybiBwYXJ0X21hcF9lbmQgLSBwYXJ0X21hcF9zdGFydCArIDE7Cit9CisKK3N0YXRpYyBpbnQKK19kaXNrX2FuYWx5c2VfYmxvY2tfc2l6ZSAoUGVkRGlzayogZGlzaywgTWFjUmF3RGlzayogcmF3X2Rpc2spCit7CisJUGVkU2VjdG9yCWJsb2NrX3NpemU7CisKKwlpZiAoUEVEX0JFMTZfVE9fQ1BVIChyYXdfZGlzay0+YmxvY2tfc2l6ZSkgJSA1MTIpIHsKKyNpZm5kZWYgRElTQ09WRVJfT05MWQorCQlwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCVBFRF9FWENFUFRJT05fRVJST1IsCisJCQlQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCV8oIldlaXJkIGJsb2NrIHNpemUgb24gZGV2aWNlIGRlc2NyaXB0b3I6ICVkIGJ5dGVzIGlzICIKKwkJCSAgIm5vdCBkaXZpc2libGUgYnkgNTEyLiIpLAorCQkJKGludCkgUEVEX0JFMTZfVE9fQ1BVIChyYXdfZGlzay0+YmxvY2tfc2l6ZSkpOworI2VuZGlmCisJCWdvdG8gZXJyb3I7CisJfQorCisJYmxvY2tfc2l6ZSA9IFBFRF9CRTE2X1RPX0NQVSAocmF3X2Rpc2stPmJsb2NrX3NpemUpIC8gNTEyOworCWlmIChibG9ja19zaXplICE9IGRpc2stPmRldi0+c2VjdG9yX3NpemUgLyA1MTIpIHsKKyNpZm5kZWYgRElTQ09WRVJfT05MWQorCQlpZiAocGVkX2V4Y2VwdGlvbl90aHJvdyAoCisJCQlQRURfRVhDRVBUSU9OX1dBUk5JTkcsCisJCQlQRURfRVhDRVBUSU9OX0lHTk9SRV9DQU5DRUwsCisJCQlfKCJUaGUgZHJpdmVyIGRlc2NyaXB0b3Igc2F5cyB0aGUgcGh5c2ljYWwgYmxvY2sgc2l6ZSAiCisJCQkgICJpcyAlZCBieXRlcywgYnV0IExpbnV4IHNheXMgaXQgaXMgJWQgYnl0ZXMuIiksCisJCQkoaW50KSBibG9ja19zaXplICogNTEyLAorCQkJKGludCkgZGlzay0+ZGV2LT5zZWN0b3Jfc2l6ZSkKKwkJCQkhPSBQRURfRVhDRVBUSU9OX0lHTk9SRSkKKwkJCWdvdG8gZXJyb3I7CisjZW5kaWYKKwkJZGlzay0+ZGV2LT5zZWN0b3Jfc2l6ZSA9IGJsb2NrX3NpemUgKiA1MTI7CisJfQorCisJcmV0dXJuIDE7CisKK2Vycm9yOgorCXJldHVybiAwOworfQorCisvKiBUcmllcyB0byBmaWd1cmUgb3V0IHRoZSBibG9jayBzaXplIHVzZWQgYnkgdGhlIGRyaXZlcnMsIGZvciB0aGUgZ2hvc3QKKyAqIHBhcnRpdGlvbmluZyBzY2hlbWUuICBHaG9zdCBwYXJ0aXRpb25pbmcgd29ya3MgbGlrZSB0aGlzOiB0aGUgT3BlbkZpcm13YXJlCisgKiAoT0YpIHNlZXMgNTEyIGJ5dGUgYmxvY2tzLCBidXQgc29tZSBkcml2ZXJzIHVzZSAyMDQ4IGJ5dGUgYmxvY2tzIChhbmQsCisgKiBwZXJoYXBzLCBzb21lIG90aGVyIG51bWJlcj8pLiAgVG8gcmVtYWluIGNvbXBhdGlibGUsIHRoZSBwYXJ0aXRpb24gbWFwCisgKiBvbmx5IGhhcyAicmVhbCIgcGFydGl0aW9uIG1hcCBlbnRyaWVzIG9uIGdob3N0LWFsaWduZWQgYmxvY2sgbnVtYmVycyAoYW5kCisgKiB0aGUgb3RoZXJzIGFyZSBwYWRkZWQgd2l0aCBBcHBsZV9Wb2lkIHBhcnRpdGlvbnMpLiAgVGhpcyBmdW5jdGlvbiB0cmllcworICogdG8gZmlndXJlIG91dCB3aGF0IHRoZSAiZ2hvc3QtYWxpZ25lZCIgc2l6ZSBpcy4uLiAod2hpY2gsIGJlbGlldmUtaXQtb3Itbm90LAorICogZG9lc24ndCBhbHdheXMgZXF1YWwgMjA0OCEhISkKKyAqLworc3RhdGljIGludAorX2Rpc2tfYW5hbHlzZV9naG9zdF9zaXplIChQZWREaXNrKiBkaXNrKQoreworCU1hY0Rpc2tEYXRhKgkJbWFjX2Rpc2tfZGF0YSA9IGRpc2stPmRpc2tfc3BlY2lmaWM7CisJTWFjUmF3UGFydGl0aW9uCQlyYXdfcGFydDsKKwlpbnQJCQlpOworCisJZm9yIChpID0gMTsgaSA8IDY0OyBpICo9IDIpIHsKKwkJaWYgKCFwZWRfZGV2aWNlX3JlYWQgKGRpc2stPmRldiwgJnJhd19wYXJ0LCBpLCAxKSkKKwkJCXJldHVybiAwOworCQlpZiAoX3Jhd3BhcnRfY2hlY2tfc2lnbmF0dXJlICgmcmF3X3BhcnQpCisJCSAgICAmJiAhX3Jhd3BhcnRfaXNfdm9pZCAoJnJhd19wYXJ0KSkgeworCQkJbWFjX2Rpc2tfZGF0YS0+Z2hvc3Rfc2l6ZSA9IGk7CisJCQlQRURfQVNTRVJUIChpIDw9IGRpc2stPmRldi0+c2VjdG9yX3NpemUgLyA1MTIsCisJCQkJICAgIHJldHVybiAwKTsKKwkJCXJldHVybiAxOworCQl9CisJfQorCisjaWZuZGVmIERJU0NPVkVSX09OTFkKKwlwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJUEVEX0VYQ0VQVElPTl9FUlJPUiwKKwkJUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCV8oIk5vIHZhbGlkIHBhcnRpdGlvbiBtYXAgZm91bmQuIikpOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK21hY19yZWFkIChQZWREaXNrKiBkaXNrKQoreworCU1hY1Jhd0Rpc2sJCXJhd19kaXNrOworCU1hY1Jhd1BhcnRpdGlvbgkJcmF3X3BhcnQ7CisJTWFjRGlza0RhdGEqCQltYWNfZGlza19kYXRhOworCVBlZFBhcnRpdGlvbioJCXBhcnQ7CisJaW50CQkJbnVtOworCVBlZFNlY3RvcgkJZ2hvc3Rfc2l6ZTsKKwlQZWRDb25zdHJhaW50KgkJY29uc3RyYWludF9leGFjdDsKKwlpbnQJCQlsYXN0X3BhcnRfZW50cnlfbnVtID0gMDsKKworCVBFRF9BU1NFUlQgKGRpc2sgIT0gTlVMTCwgcmV0dXJuIDApOworCisJbWFjX2Rpc2tfZGF0YSA9IGRpc2stPmRpc2tfc3BlY2lmaWM7CisJbWFjX2Rpc2tfZGF0YS0+cGFydF9tYXBfZW50cnlfbnVtID0gMDsJCS8qIDAgPT0gbm9uZSAqLworCisJaWYgKCFwZWRfZGV2aWNlX3JlYWQgKGRpc2stPmRldiwgJnJhd19kaXNrLCAwLCAxKSkKKwkJZ290byBlcnJvcjsKKwlpZiAoIV9jaGVja19zaWduYXR1cmUgKCZyYXdfZGlzaykpCisJCWdvdG8gZXJyb3I7CisKKwlpZiAoIV9kaXNrX2FuYWx5c2VfYmxvY2tfc2l6ZSAoZGlzaywgJnJhd19kaXNrKSkKKwkJZ290byBlcnJvcjsKKwlpZiAoIV9kaXNrX2FuYWx5c2VfZ2hvc3Rfc2l6ZSAoZGlzaykpCisJCWdvdG8gZXJyb3I7CisJZ2hvc3Rfc2l6ZSA9IG1hY19kaXNrX2RhdGEtPmdob3N0X3NpemU7CisKKwlpZiAoIXBlZF9kaXNrX2RlbGV0ZV9hbGwgKGRpc2spKQorCQlnb3RvIGVycm9yOworCisJaWYgKHJhd19kaXNrLmRyaXZlcl9jb3VudCAmJiByYXdfZGlzay5kcml2ZXJfY291bnQgPCA2MikgeworCQltZW1jcHkoJm1hY19kaXNrX2RhdGEtPmRyaXZlcmxpc3RbMF0sICZyYXdfZGlzay5kcml2ZXJsaXN0WzBdLAorCQkJCXNpemVvZihtYWNfZGlza19kYXRhLT5kcml2ZXJsaXN0KSk7CisJCW1hY19kaXNrX2RhdGEtPmRyaXZlcl9jb3VudCA9IHJhd19kaXNrLmRyaXZlcl9jb3VudDsKKwkJbWFjX2Rpc2tfZGF0YS0+YmxvY2tfc2l6ZSA9IHJhd19kaXNrLmJsb2NrX3NpemU7CisJfQorCisJZm9yIChudW09MTsgbnVtPT0xIHx8IG51bSA8PSBsYXN0X3BhcnRfZW50cnlfbnVtOyBudW0rKykgeworCQlpZiAoIXBlZF9kZXZpY2VfcmVhZCAoZGlzay0+ZGV2LCAmcmF3X3BhcnQsCisJCQkJICAgICAgbnVtICogZ2hvc3Rfc2l6ZSwgMSkpCisJCQlnb3RvIGVycm9yX2RlbGV0ZV9hbGw7CisKKwkJaWYgKCFfcmF3cGFydF9jaGVja19zaWduYXR1cmUgKCZyYXdfcGFydCkpCisJCQljb250aW51ZTsKKworCQlpZiAobnVtID09IDEpCisJCQlsYXN0X3BhcnRfZW50cnlfbnVtCisJCQkJPSBfcmF3cGFydF9nZXRfcGFydG1hcF9zaXplICgmcmF3X3BhcnQsIGRpc2spOworCQlpZiAoX3Jhd3BhcnRfZ2V0X3BhcnRtYXBfc2l6ZSAoJnJhd19wYXJ0LCBkaXNrKQorCQkJCSE9IGxhc3RfcGFydF9lbnRyeV9udW0pIHsKKwkJCWlmIChwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCQlQRURfRVhDRVBUSU9OX0VSUk9SLAorCQkJCVBFRF9FWENFUFRJT05fSUdOT1JFX0NBTkNFTCwKKwkJCQlfKCJDb25mbGljdGluZyBwYXJ0aXRpb24gbWFwIGVudHJ5IHNpemVzISAgIgorCQkJCSAgIkVudHJ5IDEgc2F5cyBpdCBpcyAlZCwgYnV0IGVudHJ5ICVkIHNheXMgIgorCQkJCSAgIml0IGlzICVkISIpLAorCQkJCWxhc3RfcGFydF9lbnRyeV9udW0sCisJCQkJX3Jhd3BhcnRfZ2V0X3BhcnRtYXBfc2l6ZSAoJnJhd19wYXJ0LCBkaXNrKSkKKwkJCQkJIT0gUEVEX0VYQ0VQVElPTl9JR05PUkUpCisJCQkJZ290byBlcnJvcl9kZWxldGVfYWxsOworCQl9CisKKwkJaWYgKCFfcmF3cGFydF9pc19hY3RpdmUgKCZyYXdfcGFydCkpCisJCQljb250aW51ZTsKKworCQlwYXJ0ID0gX3Jhd3BhcnRfYW5hbHlzZSAoJnJhd19wYXJ0LCBkaXNrLCBudW0pOworCQlpZiAoIXBhcnQpCisJCQlnb3RvIGVycm9yX2RlbGV0ZV9hbGw7CisJCXBhcnQtPm51bSA9IG51bTsKKwkJcGFydC0+ZnNfdHlwZSA9IHBlZF9maWxlX3N5c3RlbV9wcm9iZSAoJnBhcnQtPmdlb20pOworCQljb25zdHJhaW50X2V4YWN0ID0gcGVkX2NvbnN0cmFpbnRfZXhhY3QgKCZwYXJ0LT5nZW9tKTsKKwkJaWYgKCFwZWRfZGlza19hZGRfcGFydGl0aW9uIChkaXNrLCBwYXJ0LCBjb25zdHJhaW50X2V4YWN0KSkKKwkJCWdvdG8gZXJyb3JfZGVsZXRlX2FsbDsKKwkJcGVkX2NvbnN0cmFpbnRfZGVzdHJveSAoY29uc3RyYWludF9leGFjdCk7CisKKwkJaWYgKF9yYXdwYXJ0X2lzX3BhcnRpdGlvbl9tYXAgKCZyYXdfcGFydCkpIHsKKwkJCWlmIChtYWNfZGlza19kYXRhLT5wYXJ0X21hcF9lbnRyeV9udW0KKwkJCSAgICAmJiBwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCQkJUEVEX0VYQ0VQVElPTl9FUlJPUiwKKwkJCQkJUEVEX0VYQ0VQVElPTl9JR05PUkVfQ0FOQ0VMLAorCQkJCQlfKCJXZWlyZCEgIFRoZXJlIGFyZSAyIHBhcnRpdGlvbnMgIgorCQkJCQkgICJtYXAgZW50cmllcyEiKSkKKwkJCSAgICAhPSBQRURfRVhDRVBUSU9OX0lHTk9SRSkKKwkJCQlnb3RvIGVycm9yX2RlbGV0ZV9hbGw7CisKKwkJCW1hY19kaXNrX2RhdGEtPnBhcnRfbWFwX2VudHJ5X251bSA9IG51bTsKKwkJCW1hY19kaXNrX2RhdGEtPnBhcnRfbWFwX2VudHJ5X2NvdW50CisJCQkJPSBwYXJ0LT5nZW9tLmVuZCAtIGdob3N0X3NpemUgKyAxOworCQl9CisJfQorCisJaWYgKCFtYWNfZGlza19kYXRhLT5wYXJ0X21hcF9lbnRyeV9udW0pIHsKKwkJaWYgKCFfZGlza19hZGRfcGFydF9tYXBfZW50cnkgKGRpc2ssIDEpKQorCQkJZ290byBlcnJvcl9kZWxldGVfYWxsOworCQlwZWRfZGlza19jb21taXRfdG9fZGV2IChkaXNrKTsKKwl9CisJcmV0dXJuIDE7CisKK2Vycm9yX2RlbGV0ZV9hbGw6CisJcGVkX2Rpc2tfZGVsZXRlX2FsbCAoZGlzayk7CitlcnJvcjoKKwlyZXR1cm4gMDsKK30KKworI2lmbmRlZiBESVNDT1ZFUl9PTkxZCisvKiBUaGUgR2hvc3QgcGFydGl0aW9uOiBpcyBhIGJsYW5rIGVudHJ5LCB1c2VkIHRvIHBhZCBvdXQgZWFjaCBibG9jayAod2hlcmUKKyAqIHRoZXJlIHBoeXNpY2FsIGJsb2NrIHNpemUgPiA1MTIgYnl0ZXMpLiAgVGhpcyBpcyBiZWNhdXNlIE9wZW5GaXJtd2FyZSB1c2VzCisgKiA1MTIgYnl0ZSBibG9ja3MsIGJ1dCBkZXZpY2UgZHJpdmVycyBUaGluayBEaWZmZXJlbnQgVE0sIHdpdGggYSBkaWZmZXJlbnQKKyAqIGxib2NrIHNpemUsIHNvIHdlIG5lZWQgdG8gZG8gdGhpcyB0byBhdm9pZCBhIGNsYXNoICghKQorICovCitzdGF0aWMgaW50CitfcGFkX3Jhd19wYXJ0IChQZWREaXNrKiBkaXNrLCBpbnQgbnVtLCBNYWNSYXdQYXJ0aXRpb24qIHBhcnRfbWFwKQoreworCU1hY0Rpc2tEYXRhKgkJbWFjX2Rpc2tfZGF0YSA9IGRpc2stPmRpc2tfc3BlY2lmaWM7CisJTWFjUmF3UGFydGl0aW9uCQlnaG9zdF9lbnRyeTsKKwlpbnQJCQlpOworCisJbWVtc2V0ICgmZ2hvc3RfZW50cnksIDAsIHNpemVvZiAoZ2hvc3RfZW50cnkpKTsKKwlnaG9zdF9lbnRyeS5zaWduYXR1cmUgPSBQRURfQ1BVX1RPX0JFMTYgKE1BQ19QQVJUSVRJT05fTUFHSUNfMik7CisJc3RyY3B5IChnaG9zdF9lbnRyeS50eXBlLCAiQXBwbGVfVm9pZCIpOworCWdob3N0X2VudHJ5Lm1hcF9jb3VudAorCQk9IFBFRF9DUFVfVE9fQkUzMiAobWFjX2Rpc2tfZGF0YS0+bGFzdF9wYXJ0X2VudHJ5X251bSk7CisKKwlmb3IgKGk9MDsgaSA8IG1hY19kaXNrX2RhdGEtPmdob3N0X3NpemUgLSAxOyBpKyspCisJCW1lbWNweSAoJnBhcnRfbWFwIFtpICsgKG51bSAtIDEpICogbWFjX2Rpc2tfZGF0YS0+Z2hvc3Rfc2l6ZV0sCisJCQkmZ2hvc3RfZW50cnksIHNpemVvZiAoTWFjUmF3UGFydGl0aW9uKSk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQKK191cGRhdGVfZHJpdmVyX2NvdW50IChNYWNSYXdQYXJ0aXRpb24qIHBhcnRfbWFwX2VudHJ5LAorCQkgICAgICBNYWNEaXNrRGF0YSAqbWFjX2RyaXZlcmRhdGEsIGNvbnN0IE1hY0Rpc2tEYXRhKiBtYWNfZGlza19kYXRhKQoreworCXVpbnQxNl90CWksIGNvdW50X29yaWcsIGNvdW50X2N1ciwgYnN6OworCXVpbnQzMl90CWRyaXZlcl9icywgZHJpdmVyX2JlLCBwYXJ0X2JlOworCisJYnN6ID0gbWFjX2Rpc2tfZGF0YS0+YmxvY2tfc2l6ZSAvIDUxMjsKKwljb3VudF9jdXIgPSBtYWNfZHJpdmVyZGF0YS0+ZHJpdmVyX2NvdW50OworCWNvdW50X29yaWcgPSBtYWNfZGlza19kYXRhLT5kcml2ZXJfY291bnQ7CisJZm9yIChpID0gMDsgaSA8IGNvdW50X29yaWc7IGkrKykgeworCQlkcml2ZXJfYnMgPSBtYWNfZGlza19kYXRhLT5kcml2ZXJsaXN0W2ldLmJsb2NrICogYnN6OworCQlkcml2ZXJfYmUgPSBkcml2ZXJfYnMgKyBtYWNfZGlza19kYXRhLT5kcml2ZXJsaXN0W2ldLnNpemU7CisJCXBhcnRfYmUgPSBwYXJ0X21hcF9lbnRyeS0+c3RhcnRfYmxvY2sgKyBwYXJ0X21hcF9lbnRyeS0+YmxvY2tfY291bnQ7CisJCWlmIChkcml2ZXJfYnMgPj0gcGFydF9tYXBfZW50cnktPnN0YXJ0X2Jsb2NrCisJCQkJJiYgZHJpdmVyX2JlIDw9IHBhcnRfYmUpIHsKKwkJCW1hY19kcml2ZXJkYXRhLT5kcml2ZXJsaXN0W2NvdW50X2N1cl0uYmxvY2sKKwkJCQk9IG1hY19kaXNrX2RhdGEtPmRyaXZlcmxpc3RbaV0uYmxvY2s7CisJCQltYWNfZHJpdmVyZGF0YS0+ZHJpdmVybGlzdFtjb3VudF9jdXJdLnNpemUKKwkJCQk9IG1hY19kaXNrX2RhdGEtPmRyaXZlcmxpc3RbaV0uc2l6ZTsKKwkJCW1hY19kcml2ZXJkYXRhLT5kcml2ZXJsaXN0W2NvdW50X2N1cl0udHlwZQorCQkJCT0gbWFjX2Rpc2tfZGF0YS0+ZHJpdmVybGlzdFtpXS50eXBlOworCQkJbWFjX2RyaXZlcmRhdGEtPmRyaXZlcl9jb3VudCsrOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQKK19nZW5lcmF0ZV9yYXdfcGFydCAoUGVkRGlzayogZGlzaywgUGVkUGFydGl0aW9uKiBwYXJ0LAorCSAgICAgICAJICAgIE1hY1Jhd1BhcnRpdGlvbiogcGFydF9tYXAsIE1hY0Rpc2tEYXRhICptYWNfZHJpdmVyZGF0YSkKK3sKKwlNYWNEaXNrRGF0YSoJCW1hY19kaXNrX2RhdGE7CisJTWFjUGFydGl0aW9uRGF0YSoJbWFjX3BhcnRfZGF0YTsKKwlNYWNSYXdQYXJ0aXRpb24qCXBhcnRfbWFwX2VudHJ5OworCVBlZFNlY3RvcgkJYmxvY2tfc2l6ZSA9IGRpc2stPmRldi0+c2VjdG9yX3NpemUgLyA1MTI7CisKKwlQRURfQVNTRVJUIChwYXJ0LT5udW0gPiAwLCBnb3RvIGVycm9yKTsKKworCW1hY19kaXNrX2RhdGEgPSBkaXNrLT5kaXNrX3NwZWNpZmljOworCW1hY19wYXJ0X2RhdGEgPSBwYXJ0LT5kaXNrX3NwZWNpZmljOworCisJcGFydF9tYXBfZW50cnkgPSAmcGFydF9tYXAgW3BhcnQtPm51bSAqIG1hY19kaXNrX2RhdGEtPmdob3N0X3NpemUgLSAxXTsKKworCXBhcnRfbWFwX2VudHJ5LT5zaWduYXR1cmUgPSBQRURfQ1BVX1RPX0JFMTYgKE1BQ19QQVJUSVRJT05fTUFHSUNfMik7CisJcGFydF9tYXBfZW50cnktPm1hcF9jb3VudAorCQk9IFBFRF9DUFVfVE9fQkUzMiAobWFjX2Rpc2tfZGF0YS0+bGFzdF9wYXJ0X2VudHJ5X251bSk7CisJcGFydF9tYXBfZW50cnktPnN0YXJ0X2Jsb2NrCisJCT0gUEVEX0NQVV9UT19CRTMyIChwYXJ0LT5nZW9tLnN0YXJ0IC8gYmxvY2tfc2l6ZSk7CisJcGFydF9tYXBfZW50cnktPmJsb2NrX2NvdW50CisJCT0gUEVEX0NQVV9UT19CRTMyIChwYXJ0LT5nZW9tLmxlbmd0aCAvIGJsb2NrX3NpemUpOworCXN0cmNweSAocGFydF9tYXBfZW50cnktPm5hbWUsIG1hY19wYXJ0X2RhdGEtPnZvbHVtZV9uYW1lKTsKKwlzdHJjcHkgKHBhcnRfbWFwX2VudHJ5LT50eXBlLCBtYWNfcGFydF9kYXRhLT5zeXN0ZW1fbmFtZSk7CisKKwlpZiAobWFjX3BhcnRfZGF0YS0+aXNfZHJpdmVyKSB7CisJCW1hY19wYXJ0X2RhdGEtPmJvb3RfcmVnaW9uX2xlbmd0aCA9IHBhcnQtPmdlb20ubGVuZ3RoOworCQlpZiAobWFjX3BhcnRfZGF0YS0+aGFzX2RyaXZlcikKKwkJCV91cGRhdGVfZHJpdmVyX2NvdW50KHBhcnRfbWFwX2VudHJ5LCBtYWNfZHJpdmVyZGF0YSwKKwkJCQkJbWFjX2Rpc2tfZGF0YSk7CisJfSBlbHNlCisJCW1hY19wYXJ0X2RhdGEtPmRhdGFfcmVnaW9uX2xlbmd0aCA9IHBhcnQtPmdlb20ubGVuZ3RoOworCXBhcnRfbWFwX2VudHJ5LT5kYXRhX2NvdW50ID0gUEVEX0NQVV9UT19CRTMyICgKKwkJCW1hY19wYXJ0X2RhdGEtPmRhdGFfcmVnaW9uX2xlbmd0aCAvIGJsb2NrX3NpemUpOworCXBhcnRfbWFwX2VudHJ5LT5ib290X2NvdW50ID0gUEVEX0NQVV9UT19CRTMyICgKKwkJCW1hY19wYXJ0X2RhdGEtPmJvb3RfcmVnaW9uX2xlbmd0aCAvIGJsb2NrX3NpemUpOworCXBhcnRfbWFwX2VudHJ5LT5zdGF0dXMgPSBQRURfQ1BVX1RPX0JFMzIgKG1hY19wYXJ0X2RhdGEtPnN0YXR1cyk7CisJcGFydF9tYXBfZW50cnktPmRyaXZlcl9zaWcKKwkJPSBQRURfQ1BVX1RPX0JFMzIgKG1hY19wYXJ0X2RhdGEtPmRyaXZlcl9zaWcpOworCisJcGFydF9tYXBfZW50cnktPmJvb3RfbG9hZCA9CisJCVBFRF9DUFVfVE9fQkUzMiAobWFjX3BhcnRfZGF0YS0+Ym9vdF9iYXNlX2FkZHJlc3MpOworCXBhcnRfbWFwX2VudHJ5LT5ib290X2VudHJ5ID0KKwkJUEVEX0NQVV9UT19CRTMyIChtYWNfcGFydF9kYXRhLT5ib290X2VudHJ5X2FkZHJlc3MpOworCXBhcnRfbWFwX2VudHJ5LT5ib290X2Nrc3VtID0KKwkJUEVEX0NQVV9UT19CRTMyIChtYWNfcGFydF9kYXRhLT5ib290X2NoZWNrc3VtKTsKKworCXN0cm5jcHkgKHBhcnRfbWFwX2VudHJ5LT5wcm9jZXNzb3IsIG1hY19wYXJ0X2RhdGEtPnByb2Nlc3Nvcl9uYW1lLCAxNik7CisKKwlpZiAoIV9wYWRfcmF3X3BhcnQgKGRpc2ssIHBhcnQtPm51bSwgcGFydF9tYXApKQorCQlnb3RvIGVycm9yOworCisJcmV0dXJuIDE7CisKK2Vycm9yOgorCXJldHVybiAwOwkKK30KKworc3RhdGljIGludAorX2dlbmVyYXRlX3Jhd19mcmVlc3BhY2VfcGFydCAoUGVkRGlzayogZGlzaywgUGVkR2VvbWV0cnkqIGdlb20sIGludCBudW0sCisJCQkgICAgICBNYWNSYXdQYXJ0aXRpb24qIHBhcnRfbWFwKQoreworCU1hY0Rpc2tEYXRhKgkJbWFjX2Rpc2tfZGF0YSA9IGRpc2stPmRpc2tfc3BlY2lmaWM7CisJTWFjUmF3UGFydGl0aW9uKglwYXJ0X21hcF9lbnRyeTsKKwlQZWRTZWN0b3IJCWJsb2NrX3NpemUgPSBkaXNrLT5kZXYtPnNlY3Rvcl9zaXplIC8gNTEyOworCisJUEVEX0FTU0VSVCAobnVtID4gMCwgZ290byBlcnJvcik7CisKKwlwYXJ0X21hcF9lbnRyeSA9ICZwYXJ0X21hcCBbbnVtICogbWFjX2Rpc2tfZGF0YS0+Z2hvc3Rfc2l6ZSAtIDFdOworCisJcGFydF9tYXBfZW50cnktPnNpZ25hdHVyZSA9IFBFRF9DUFVfVE9fQkUxNiAoTUFDX1BBUlRJVElPTl9NQUdJQ18yKTsKKwlwYXJ0X21hcF9lbnRyeS0+bWFwX2NvdW50CisJCT0gUEVEX0NQVV9UT19CRTMyIChtYWNfZGlza19kYXRhLT5sYXN0X3BhcnRfZW50cnlfbnVtKTsKKwlwYXJ0X21hcF9lbnRyeS0+c3RhcnRfYmxvY2sKKwkJPSBQRURfQ1BVX1RPX0JFMzIgKGdlb20tPnN0YXJ0IC8gYmxvY2tfc2l6ZSk7CisJcGFydF9tYXBfZW50cnktPmJsb2NrX2NvdW50CisJCT0gUEVEX0NQVV9UT19CRTMyIChnZW9tLT5sZW5ndGggLyBibG9ja19zaXplKTsKKwlzdHJjcHkgKHBhcnRfbWFwX2VudHJ5LT5uYW1lLCAiRXh0cmEiKTsKKwlzdHJjcHkgKHBhcnRfbWFwX2VudHJ5LT50eXBlLCAiQXBwbGVfRnJlZSIpOworCisJcGFydF9tYXBfZW50cnktPmRhdGFfY291bnQgPSBQRURfQ1BVX1RPX0JFMzIgKGdlb20tPmxlbmd0aCk7CisJcGFydF9tYXBfZW50cnktPnN0YXR1cyA9IDA7CisJcGFydF9tYXBfZW50cnktPmRyaXZlcl9zaWcgPSAwOworCisJaWYgKCFfcGFkX3Jhd19wYXJ0IChkaXNrLCBudW0sIHBhcnRfbWFwKSkKKwkJZ290byBlcnJvcjsKKworCXJldHVybiAxOworCitlcnJvcjoKKwlyZXR1cm4gMDsJCit9CisKK3N0YXRpYyBpbnQKK19nZW5lcmF0ZV9lbXB0eV9wYXJ0IChQZWREaXNrKiBkaXNrLCBpbnQgbnVtLCBNYWNSYXdQYXJ0aXRpb24qIHBhcnRfbWFwKQoreworCU1hY0Rpc2tEYXRhKgkJbWFjX2Rpc2tfZGF0YSA9IGRpc2stPmRpc2tfc3BlY2lmaWM7CisJTWFjUmF3UGFydGl0aW9uKglwYXJ0X21hcF9lbnRyeTsKKworCVBFRF9BU1NFUlQgKG51bSA+IDAsIHJldHVybiAwKTsKKworCXBhcnRfbWFwX2VudHJ5ID0gJnBhcnRfbWFwIFtudW0gKiBtYWNfZGlza19kYXRhLT5naG9zdF9zaXplIC0gMV07CisJcGFydF9tYXBfZW50cnktPnNpZ25hdHVyZSA9IFBFRF9DUFVfVE9fQkUxNiAoTUFDX1BBUlRJVElPTl9NQUdJQ18yKTsKKwlwYXJ0X21hcF9lbnRyeS0+bWFwX2NvdW50CisJCT0gUEVEX0NQVV9UT19CRTMyIChtYWNfZGlza19kYXRhLT5sYXN0X3BhcnRfZW50cnlfbnVtKTsKKwlzdHJjcHkgKHBhcnRfbWFwX2VudHJ5LT50eXBlLCAiQXBwbGVfVm9pZCIpOworCisJcmV0dXJuIF9wYWRfcmF3X3BhcnQgKGRpc2ssIG51bSwgcGFydF9tYXApOworfQorCisvKiByZXR1cm5zIHRoZSBmaXJzdCBlbXB0eSBlbnRyeSBpbiB0aGUgcGFydGl0aW9uIG1hcCAqLworc3RhdGljIGludAorX2dldF9maXJzdF9lbXB0eV9wYXJ0X2VudHJ5IChQZWREaXNrKiBkaXNrLCBNYWNSYXdQYXJ0aXRpb24qIHBhcnRfbWFwKQoreworCU1hY0Rpc2tEYXRhKgltYWNfZGlza19kYXRhID0gZGlzay0+ZGlza19zcGVjaWZpYzsKKwlpbnQJCWk7CisKKwlmb3IgKGk9MTsgaSA8PSBtYWNfZGlza19kYXRhLT5sYXN0X3BhcnRfZW50cnlfbnVtOyBpKyspIHsKKwkJaWYgKCFwYXJ0X21hcFtpICogbWFjX2Rpc2tfZGF0YS0+Z2hvc3Rfc2l6ZSAtIDFdLnNpZ25hdHVyZSkKKwkJCXJldHVybiBpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit3cml0ZV9ibG9ja196ZXJvIChQZWREaXNrKiBkaXNrLCBNYWNEaXNrRGF0YSogbWFjX2RyaXZlcmRhdGEpCit7CisJUGVkRGV2aWNlKglkZXYgPSBkaXNrLT5kZXY7CisJTWFjUmF3RGlzawlyYXdfZGlzazsKKworCWlmICghcGVkX2RldmljZV9yZWFkIChkZXYsICZyYXdfZGlzaywgMCwgMSkpCisJCXJldHVybiAwOworCisJcmF3X2Rpc2suc2lnbmF0dXJlID0gUEVEX0NQVV9UT19CRTE2IChNQUNfRElTS19NQUdJQyk7CisJcmF3X2Rpc2suYmxvY2tfc2l6ZSA9IFBFRF9DUFVfVE9fQkUxNiAoZGV2LT5zZWN0b3Jfc2l6ZSk7CisJcmF3X2Rpc2suYmxvY2tfY291bnQKKwkJPSBQRURfQ1BVX1RPX0JFMzIgKGRldi0+bGVuZ3RoIC8gKGRldi0+c2VjdG9yX3NpemUgLyA1MTIpKTsKKworCXJhd19kaXNrLmRyaXZlcl9jb3VudCA9IG1hY19kcml2ZXJkYXRhLT5kcml2ZXJfY291bnQ7CisJbWVtY3B5KCZyYXdfZGlzay5kcml2ZXJsaXN0WzBdLCAmbWFjX2RyaXZlcmRhdGEtPmRyaXZlcmxpc3RbMF0sCisJCQlzaXplb2YocmF3X2Rpc2suZHJpdmVybGlzdCkpOworCisJcmV0dXJuIHBlZF9kZXZpY2Vfd3JpdGUgKGRldiwgJnJhd19kaXNrLCAwLCAxKTsKK30KKworc3RhdGljIGludAorbWFjX3dyaXRlIChQZWREaXNrKiBkaXNrKQoreworCU1hY1Jhd1BhcnRpdGlvbioJcGFydF9tYXA7CisJTWFjRGlza0RhdGEqCQltYWNfZGlza19kYXRhOworCU1hY0Rpc2tEYXRhKgkJbWFjX2RyaXZlcmRhdGE7CS8qIHVwZGF0ZWQgZHJpdmVyIGxpc3QgKi8KKwlQZWRQYXJ0aXRpb24qCQlwYXJ0OworCWludAkJCW51bTsKKworCVBFRF9BU1NFUlQgKGRpc2sgIT0gTlVMTCwgcmV0dXJuIDApOworCVBFRF9BU1NFUlQgKGRpc2stPmRpc2tfc3BlY2lmaWMgIT0gTlVMTCwgcmV0dXJuIDApOworCVBFRF9BU1NFUlQgKGRpc2stPmRldiAhPSBOVUxMLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAoIWRpc2stPnVwZGF0ZV9tb2RlLCByZXR1cm4gMCk7CisKKwltYWNfZGlza19kYXRhID0gZGlzay0+ZGlza19zcGVjaWZpYzsKKworCWlmICghcGVkX2Rpc2tfZ2V0X3BhcnRpdGlvbiAoZGlzaywgbWFjX2Rpc2tfZGF0YS0+cGFydF9tYXBfZW50cnlfbnVtKSkgeworCQlpZiAoIV9kaXNrX2FkZF9wYXJ0X21hcF9lbnRyeSAoZGlzaywgMSkpCisJCQlnb3RvIGVycm9yOworCX0KKworCW1hY19kcml2ZXJkYXRhID0gcGVkX21hbGxvYyhzaXplb2YoTWFjRGlza0RhdGEpKTsKKwlpZiAoIW1hY19kcml2ZXJkYXRhKQorCQlnb3RvIGVycm9yOworCW1lbXNldCAobWFjX2RyaXZlcmRhdGEsIDAsIHNpemVvZihNYWNEaXNrRGF0YSkpOworCisJcGFydF9tYXAgPSAoTWFjUmF3UGFydGl0aW9uKikKKwkJCXBlZF9tYWxsb2MgKG1hY19kaXNrX2RhdGEtPnBhcnRfbWFwX2VudHJ5X2NvdW50ICogNTEyKTsKKwlpZiAoIXBhcnRfbWFwKQorCQlnb3RvIGVycm9yX2ZyZWVfZHJpdmVyZGF0YTsKKwltZW1zZXQgKHBhcnRfbWFwLCAwLCBtYWNfZGlza19kYXRhLT5wYXJ0X21hcF9lbnRyeV9jb3VudCAqIDUxMik7CisKKy8qIHdyaXRlICh0byBtZW1vcnkpIHRoZSAicmVhbCIgcGFydGl0aW9ucyAqLworCWZvciAocGFydCA9IHBlZF9kaXNrX25leHRfcGFydGl0aW9uIChkaXNrLCBOVUxMKTsgcGFydDsKKwkgICAgIHBhcnQgPSBwZWRfZGlza19uZXh0X3BhcnRpdGlvbiAoZGlzaywgcGFydCkpIHsKKwkJaWYgKCFwZWRfcGFydGl0aW9uX2lzX2FjdGl2ZSAocGFydCkpCisJCQljb250aW51ZTsKKwkJaWYgKCFfZ2VuZXJhdGVfcmF3X3BhcnQgKGRpc2ssIHBhcnQsIHBhcnRfbWFwLCBtYWNfZHJpdmVyZGF0YSkpCisJCQlnb3RvIGVycm9yX2ZyZWVfcGFydF9tYXA7CisJfQorCisvKiB3cml0ZSB0aGUgImZyZWUgc3BhY2UiIHBhcnRpdGlvbnMgKi8KKwlmb3IgKHBhcnQgPSBwZWRfZGlza19uZXh0X3BhcnRpdGlvbiAoZGlzaywgTlVMTCk7IHBhcnQ7CisJICAgICBwYXJ0ID0gcGVkX2Rpc2tfbmV4dF9wYXJ0aXRpb24gKGRpc2ssIHBhcnQpKSB7CisJCWlmIChwYXJ0LT50eXBlICE9IFBFRF9QQVJUSVRJT05fRlJFRVNQQUNFKQorCQkJY29udGludWU7CisJCW51bSA9IF9nZXRfZmlyc3RfZW1wdHlfcGFydF9lbnRyeSAoZGlzaywgcGFydF9tYXApOworCQlpZiAoIV9nZW5lcmF0ZV9yYXdfZnJlZXNwYWNlX3BhcnQgKGRpc2ssICZwYXJ0LT5nZW9tLCBudW0sCisJCQkJCQkgICBwYXJ0X21hcCkpCisJCQlnb3RvIGVycm9yX2ZyZWVfcGFydF9tYXA7CisJfQorCisvKiB3cml0ZSB0aGUgInZvaWQiIChlbXB0eSkgcGFydGl0aW9ucyAqLworCWZvciAobnVtID0gX2dldF9maXJzdF9lbXB0eV9wYXJ0X2VudHJ5IChkaXNrLCBwYXJ0X21hcCk7IG51bTsKKwkgICAgIG51bSA9IF9nZXRfZmlyc3RfZW1wdHlfcGFydF9lbnRyeSAoZGlzaywgcGFydF9tYXApKQorCQlfZ2VuZXJhdGVfZW1wdHlfcGFydCAoZGlzaywgbnVtLCBwYXJ0X21hcCk7CisKKy8qIHdyaXRlIHRvIGRpc2sgKi8KKwlpZiAoIXBlZF9kZXZpY2Vfd3JpdGUgKGRpc2stPmRldiwgcGFydF9tYXAsIDEsCisJCQkgICAgICAgbWFjX2Rpc2tfZGF0YS0+cGFydF9tYXBfZW50cnlfY291bnQpKQorCQlnb3RvIGVycm9yX2ZyZWVfcGFydF9tYXA7CisJcGVkX2ZyZWUgKHBhcnRfbWFwKTsKKwlyZXR1cm4gd3JpdGVfYmxvY2tfemVybyAoZGlzaywgbWFjX2RyaXZlcmRhdGEpOworCitlcnJvcl9mcmVlX3BhcnRfbWFwOgorCXBlZF9mcmVlIChwYXJ0X21hcCk7CitlcnJvcl9mcmVlX2RyaXZlcmRhdGE6CisJcGVkX2ZyZWUgKG1hY19kcml2ZXJkYXRhKTsKK2Vycm9yOgorCXJldHVybiAwOworfQorI2VuZGlmIC8qICFESVNDT1ZFUl9PTkxZICovCisKK3N0YXRpYyBQZWRQYXJ0aXRpb24qCittYWNfcGFydGl0aW9uX25ldyAoCisJY29uc3QgUGVkRGlzayogZGlzaywgUGVkUGFydGl0aW9uVHlwZSBwYXJ0X3R5cGUsCisJY29uc3QgUGVkRmlsZVN5c3RlbVR5cGUqIGZzX3R5cGUsIFBlZFNlY3RvciBzdGFydCwgUGVkU2VjdG9yIGVuZCkKK3sKKwlQZWRQYXJ0aXRpb24qCQlwYXJ0OworCU1hY1BhcnRpdGlvbkRhdGEqCW1hY19kYXRhOworCisJcGFydCA9IF9wZWRfcGFydGl0aW9uX2FsbG9jIChkaXNrLCBwYXJ0X3R5cGUsIGZzX3R5cGUsIHN0YXJ0LCBlbmQpOworCWlmICghcGFydCkKKwkJZ290byBlcnJvcjsKKworCWlmIChwZWRfcGFydGl0aW9uX2lzX2FjdGl2ZSAocGFydCkpIHsKKwkJcGFydC0+ZGlza19zcGVjaWZpYworCQkJPSBtYWNfZGF0YSA9IHBlZF9tYWxsb2MgKHNpemVvZiAoTWFjUGFydGl0aW9uRGF0YSkpOworCQlpZiAoIW1hY19kYXRhKQorCQkJZ290byBlcnJvcl9mcmVlX3BhcnQ7CisKKwkJbWVtc2V0IChtYWNfZGF0YSwgMCwgc2l6ZW9mIChNYWNQYXJ0aXRpb25EYXRhKSk7CisJCXN0cmNweSAobWFjX2RhdGEtPnZvbHVtZV9uYW1lLCAidW50aXRsZWQiKTsKKwl9IGVsc2UgeworCQlwYXJ0LT5kaXNrX3NwZWNpZmljID0gTlVMTDsKKwl9CisJcmV0dXJuIHBhcnQ7CisKKwlwZWRfZnJlZSAobWFjX2RhdGEpOworZXJyb3JfZnJlZV9wYXJ0OgorCXBlZF9mcmVlIChwYXJ0KTsKK2Vycm9yOgorCXJldHVybiAwOworfQorCitzdGF0aWMgUGVkUGFydGl0aW9uKgorbWFjX3BhcnRpdGlvbl9kdXBsaWNhdGUgKGNvbnN0IFBlZFBhcnRpdGlvbiogcGFydCkKK3sKKwlQZWRQYXJ0aXRpb24qCQluZXdfcGFydDsKKwlNYWNQYXJ0aXRpb25EYXRhKgluZXdfbWFjX2RhdGE7CisJTWFjUGFydGl0aW9uRGF0YSoJb2xkX21hY19kYXRhOworCisJbmV3X3BhcnQgPSBwZWRfcGFydGl0aW9uX25ldyAocGFydC0+ZGlzaywgcGFydC0+dHlwZSwKKwkJCQkgICAgICBwYXJ0LT5mc190eXBlLCBwYXJ0LT5nZW9tLnN0YXJ0LAorCQkJCSAgICAgIHBhcnQtPmdlb20uZW5kKTsKKwlpZiAoIW5ld19wYXJ0KQorCQlyZXR1cm4gTlVMTDsKKwluZXdfcGFydC0+bnVtID0gcGFydC0+bnVtOworCisJb2xkX21hY19kYXRhID0gKE1hY1BhcnRpdGlvbkRhdGEqKSBwYXJ0LT5kaXNrX3NwZWNpZmljOworCW5ld19tYWNfZGF0YSA9IChNYWNQYXJ0aXRpb25EYXRhKikgbmV3X3BhcnQtPmRpc2tfc3BlY2lmaWM7CisKKwkvKiB1Z2x5LCBidXQgQyBpcyB1Z2x5IDpwICovCisJbWVtY3B5IChuZXdfbWFjX2RhdGEsIG9sZF9tYWNfZGF0YSwgc2l6ZW9mIChNYWNQYXJ0aXRpb25EYXRhKSk7CisJcmV0dXJuIG5ld19wYXJ0OworfQorCitzdGF0aWMgdm9pZAorbWFjX3BhcnRpdGlvbl9kZXN0cm95IChQZWRQYXJ0aXRpb24qIHBhcnQpCit7CisJUEVEX0FTU0VSVCAocGFydCAhPSBOVUxMLCByZXR1cm4pOworCisJaWYgKHBlZF9wYXJ0aXRpb25faXNfYWN0aXZlIChwYXJ0KSkKKwkJcGVkX2ZyZWUgKHBhcnQtPmRpc2tfc3BlY2lmaWMpOworCXBlZF9mcmVlIChwYXJ0KTsKK30KKworc3RhdGljIGludAorbWFjX3BhcnRpdGlvbl9zZXRfc3lzdGVtIChQZWRQYXJ0aXRpb24qIHBhcnQsIGNvbnN0IFBlZEZpbGVTeXN0ZW1UeXBlKiBmc190eXBlKQoreworCU1hY1BhcnRpdGlvbkRhdGEqIG1hY19kYXRhID0gcGFydC0+ZGlza19zcGVjaWZpYzsKKworCXBhcnQtPmZzX3R5cGUgPSBmc190eXBlOworCisJaWYgKGZzX3R5cGUgJiYgIXN0cmNtcCAoZnNfdHlwZS0+bmFtZSwgImxpbnV4LXN3YXAiKSkKKwkJcGVkX3BhcnRpdGlvbl9zZXRfZmxhZyAocGFydCwgUEVEX1BBUlRJVElPTl9TV0FQLCAxKTsKKworCWlmIChtYWNfZGF0YS0+aXNfYm9vdCkgeworCQlzdHJjcHkgKG1hY19kYXRhLT5zeXN0ZW1fbmFtZSwgIkFwcGxlX0Jvb3RzdHJhcCIpOworCQltYWNfZGF0YS0+c3RhdHVzID0gMHgzMzsKKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKGZzX3R5cGUgJiYgKCFzdHJjbXAgKGZzX3R5cGUtPm5hbWUsICJoZnMiKQorCQkJfHwgIXN0cmNtcCAoZnNfdHlwZS0+bmFtZSwgImhmcysiKSkpIHsKKwkJc3RyY3B5IChtYWNfZGF0YS0+c3lzdGVtX25hbWUsICJBcHBsZV9IRlMiKTsKKwkJbWFjX2RhdGEtPnN0YXR1cyB8PSAweDdmOworCX0gZWxzZSBpZiAoZnNfdHlwZSAmJiAhc3RyY21wIChmc190eXBlLT5uYW1lLCAiaGZzeCIpKSB7CisJCXN0cmNweSAobWFjX2RhdGEtPnN5c3RlbV9uYW1lLCAiQXBwbGVfSEZTWCIpOworCQltYWNfZGF0YS0+c3RhdHVzIHw9IDB4N2Y7CisJfSBlbHNlIHsKKwkJc3RyY3B5IChtYWNfZGF0YS0+c3lzdGVtX25hbWUsICJBcHBsZV9VTklYX1NWUjIiKTsKKwkJbWFjX2RhdGEtPnN0YXR1cyA9IDB4MzM7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK21hY19wYXJ0aXRpb25fc2V0X2ZsYWcgKFBlZFBhcnRpdGlvbiogcGFydCwgUGVkUGFydGl0aW9uRmxhZyBmbGFnLCBpbnQgc3RhdGUpCit7CisJTWFjUGFydGl0aW9uRGF0YSoJbWFjX2RhdGE7CisKKwlQRURfQVNTRVJUIChwYXJ0ICE9IE5VTEwsIHJldHVybiAwKTsKKwlQRURfQVNTRVJUIChwYXJ0LT5kaXNrX3NwZWNpZmljICE9IE5VTEwsIHJldHVybiAwKTsKKworCW1hY19kYXRhID0gcGFydC0+ZGlza19zcGVjaWZpYzsKKworCXN3aXRjaCAoZmxhZykgeworCWNhc2UgUEVEX1BBUlRJVElPTl9CT09UOgorCQltYWNfZGF0YS0+aXNfYm9vdCA9IHN0YXRlOworCisJCWlmIChwYXJ0LT5mc190eXBlKQorCQkJcmV0dXJuIG1hY19wYXJ0aXRpb25fc2V0X3N5c3RlbSAocGFydCwgcGFydC0+ZnNfdHlwZSk7CisKKwkJaWYgKHN0YXRlKSB7CisJCQlzdHJjcHkgKG1hY19kYXRhLT5zeXN0ZW1fbmFtZSwgIkFwcGxlX0Jvb3RzdHJhcCIpOworCQkJbWFjX2RhdGEtPnN0YXR1cyA9IDB4MzM7CisJCX0KKwkJcmV0dXJuIDE7CisKKwljYXNlIFBFRF9QQVJUSVRJT05fUk9PVDoKKwkJaWYgKHN0YXRlKSB7CisJCQlzdHJjcHkgKG1hY19kYXRhLT52b2x1bWVfbmFtZSwgInJvb3QiKTsKKwkJCW1hY19kYXRhLT5pc19zd2FwID0gMDsKKwkJfSBlbHNlIHsKKwkJCWlmIChtYWNfZGF0YS0+aXNfcm9vdCkKKwkJCQlzdHJjcHkgKG1hY19kYXRhLT52b2x1bWVfbmFtZSwgInVudGl0bGVkIik7CisJCX0KKwkJbWFjX2RhdGEtPmlzX3Jvb3QgPSBzdGF0ZTsKKwkJcmV0dXJuIDE7CisKKwljYXNlIFBFRF9QQVJUSVRJT05fU1dBUDoKKwkJaWYgKHN0YXRlKSB7CisJCQlzdHJjcHkgKG1hY19kYXRhLT52b2x1bWVfbmFtZSwgInN3YXAiKTsKKwkJCW1hY19kYXRhLT5pc19yb290ID0gMDsKKwkJfSBlbHNlIHsKKwkJCWlmIChtYWNfZGF0YS0+aXNfc3dhcCkKKwkJCQlzdHJjcHkgKG1hY19kYXRhLT52b2x1bWVfbmFtZSwgInVudGl0bGVkIik7CisJCX0KKwkJbWFjX2RhdGEtPmlzX3N3YXAgPSBzdGF0ZTsKKwkJcmV0dXJuIDE7CisKKwljYXNlIFBFRF9QQVJUSVRJT05fTFZNOgorCQlpZiAoc3RhdGUpIHsKKwkJCXN0cmNweSAobWFjX2RhdGEtPnN5c3RlbV9uYW1lLCAiTGludXhfTFZNIik7CisJCQltYWNfZGF0YS0+aXNfbHZtID0gc3RhdGU7CisJCX0gZWxzZSB7CisJCQlpZiAobWFjX2RhdGEtPmlzX2x2bSkKKwkJCQltYWNfcGFydGl0aW9uX3NldF9zeXN0ZW0gKHBhcnQsIHBhcnQtPmZzX3R5cGUpOworCQl9CisJCXJldHVybiAxOworCisJY2FzZSBQRURfUEFSVElUSU9OX1JBSUQ6CisJCWlmIChzdGF0ZSkgeworCQkJc3RyY3B5IChtYWNfZGF0YS0+c3lzdGVtX25hbWUsICJMaW51eF9SQUlEIik7CisJCQltYWNfZGF0YS0+aXNfcmFpZCA9IHN0YXRlOworCQl9IGVsc2UgeworCQkJaWYgKG1hY19kYXRhLT5pc19yYWlkKQorCQkJCW1hY19wYXJ0aXRpb25fc2V0X3N5c3RlbSAocGFydCwgcGFydC0+ZnNfdHlwZSk7CisJCX0KKwkJcmV0dXJuIDE7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK21hY19wYXJ0aXRpb25fZ2V0X2ZsYWcgKGNvbnN0IFBlZFBhcnRpdGlvbiogcGFydCwgUGVkUGFydGl0aW9uRmxhZyBmbGFnKQoreworCU1hY1BhcnRpdGlvbkRhdGEqCW1hY19kYXRhOworCisJUEVEX0FTU0VSVCAocGFydCAhPSBOVUxMLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAocGFydC0+ZGlza19zcGVjaWZpYyAhPSBOVUxMLCByZXR1cm4gMCk7CisKKwltYWNfZGF0YSA9IHBhcnQtPmRpc2tfc3BlY2lmaWM7CisJc3dpdGNoIChmbGFnKSB7CisJY2FzZSBQRURfUEFSVElUSU9OX0JPT1Q6CisJCXJldHVybiBtYWNfZGF0YS0+aXNfYm9vdDsKKworCWNhc2UgUEVEX1BBUlRJVElPTl9ST09UOgorCQlyZXR1cm4gbWFjX2RhdGEtPmlzX3Jvb3Q7CisKKwljYXNlIFBFRF9QQVJUSVRJT05fU1dBUDoKKwkJcmV0dXJuIG1hY19kYXRhLT5pc19zd2FwOworCisJY2FzZSBQRURfUEFSVElUSU9OX0xWTToKKwkJcmV0dXJuIG1hY19kYXRhLT5pc19sdm07CisKKwljYXNlIFBFRF9QQVJUSVRJT05fUkFJRDoKKwkJcmV0dXJuIG1hY19kYXRhLT5pc19yYWlkOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgaW50CittYWNfcGFydGl0aW9uX2lzX2ZsYWdfYXZhaWxhYmxlICgKKwljb25zdCBQZWRQYXJ0aXRpb24qIHBhcnQsIFBlZFBhcnRpdGlvbkZsYWcgZmxhZykKK3sKKwlzd2l0Y2ggKGZsYWcpIHsKKwljYXNlIFBFRF9QQVJUSVRJT05fQk9PVDoKKwljYXNlIFBFRF9QQVJUSVRJT05fUk9PVDoKKwljYXNlIFBFRF9QQVJUSVRJT05fU1dBUDoKKwljYXNlIFBFRF9QQVJUSVRJT05fTFZNOgorCWNhc2UgUEVEX1BBUlRJVElPTl9SQUlEOgorCQlyZXR1cm4gMTsKKworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIHZvaWQKK21hY19wYXJ0aXRpb25fc2V0X25hbWUgKFBlZFBhcnRpdGlvbiogcGFydCwgY29uc3QgY2hhciogbmFtZSkKK3sKKwlNYWNQYXJ0aXRpb25EYXRhKgltYWNfZGF0YTsKKwlpbnQJCQlpOworCisJUEVEX0FTU0VSVCAocGFydCAhPSBOVUxMLCByZXR1cm4pOworCVBFRF9BU1NFUlQgKHBhcnQtPmRpc2tfc3BlY2lmaWMgIT0gTlVMTCwgcmV0dXJuKTsKKwltYWNfZGF0YSA9IHBhcnQtPmRpc2tfc3BlY2lmaWM7CisKKyNpZm5kZWYgRElTQ09WRVJfT05MWQorCWlmIChtYWNfZGF0YS0+aXNfcm9vdCB8fCBtYWNfZGF0YS0+aXNfc3dhcCkgeworCQlpZiAocGVkX2V4Y2VwdGlvbl90aHJvdyAoCisJCQlQRURfRVhDRVBUSU9OX1dBUk5JTkcsCisJCQlQRURfRVhDRVBUSU9OX0lHTk9SRV9DQU5DRUwsCisJCQlfKCJDaGFuZ2luZyB0aGUgbmFtZSBvZiBhIHJvb3Qgb3Igc3dhcCBwYXJ0aXRpb24gIgorCQkJICAid2lsbCBwcmV2ZW50IExpbnV4IGZyb20gcmVjb2duaXNpbmcgaXQgYXMgc3VjaC4iKSkKKwkJCQkhPSBQRURfRVhDRVBUSU9OX0lHTk9SRSkKKwkJCXJldHVybjsKKwkJbWFjX2RhdGEtPmlzX3Jvb3QgPSBtYWNfZGF0YS0+aXNfc3dhcCA9IDA7CisJfQorI2VuZGlmCisKKwlzdHJuY3B5IChtYWNfZGF0YS0+dm9sdW1lX25hbWUsIG5hbWUsIDMyKTsKKwltYWNfZGF0YS0+dm9sdW1lX25hbWUgWzMyXSA9IDA7CisJZm9yIChpID0gc3RybGVuIChtYWNfZGF0YS0+dm9sdW1lX25hbWUpIC0gMTsKKwkJCW1hY19kYXRhLT52b2x1bWVfbmFtZVtpXSA9PSAnICc7IGktLSkKKwkJbWFjX2RhdGEtPnZvbHVtZV9uYW1lIFtpXSA9IDA7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyKgorbWFjX3BhcnRpdGlvbl9nZXRfbmFtZSAoY29uc3QgUGVkUGFydGl0aW9uKiBwYXJ0KQoreworCU1hY1BhcnRpdGlvbkRhdGEqCW1hY19kYXRhOworCisJUEVEX0FTU0VSVCAocGFydCAhPSBOVUxMLCByZXR1cm4gTlVMTCk7CisJUEVEX0FTU0VSVCAocGFydC0+ZGlza19zcGVjaWZpYyAhPSBOVUxMLCByZXR1cm4gTlVMTCk7CisJbWFjX2RhdGEgPSBwYXJ0LT5kaXNrX3NwZWNpZmljOworCisJcmV0dXJuIG1hY19kYXRhLT52b2x1bWVfbmFtZTsKK30KKworc3RhdGljIFBlZENvbnN0cmFpbnQqCitfcHJpbWFyeV9jb25zdHJhaW50IChQZWREaXNrKiBkaXNrKQoreworCVBlZEFsaWdubWVudAlzdGFydF9hbGlnbjsKKwlQZWRBbGlnbm1lbnQJZW5kX2FsaWduOworCVBlZEdlb21ldHJ5CW1heF9nZW9tOworCVBlZFNlY3RvcglzZWN0b3Jfc2l6ZTsKKworCXNlY3Rvcl9zaXplID0gZGlzay0+ZGV2LT5zZWN0b3Jfc2l6ZSAvIDUxMjsKKworCWlmICghcGVkX2FsaWdubWVudF9pbml0ICgmc3RhcnRfYWxpZ24sIDAsIHNlY3Rvcl9zaXplKSkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKCFwZWRfYWxpZ25tZW50X2luaXQgKCZlbmRfYWxpZ24sIC0xLCBzZWN0b3Jfc2l6ZSkpCisJCXJldHVybiBOVUxMOworCWlmICghcGVkX2dlb21ldHJ5X2luaXQgKCZtYXhfZ2VvbSwgZGlzay0+ZGV2LCAxLCBkaXNrLT5kZXYtPmxlbmd0aCAtIDEpKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBwZWRfY29uc3RyYWludF9uZXcgKCZzdGFydF9hbGlnbiwgJmVuZF9hbGlnbiwgJm1heF9nZW9tLAorCQkJCSAgICZtYXhfZ2VvbSwgMSwgZGlzay0+ZGV2LT5sZW5ndGgpOworfQorCitzdGF0aWMgaW50CittYWNfcGFydGl0aW9uX2FsaWduIChQZWRQYXJ0aXRpb24qIHBhcnQsIGNvbnN0IFBlZENvbnN0cmFpbnQqIGNvbnN0cmFpbnQpCit7CisJUEVEX0FTU0VSVCAocGFydCAhPSBOVUxMLCByZXR1cm4gMCk7CisKKwlpZiAoX3BlZF9wYXJ0aXRpb25fYXR0ZW1wdF9hbGlnbiAocGFydCwgY29uc3RyYWludCwKKwkJCQkJICBfcHJpbWFyeV9jb25zdHJhaW50IChwYXJ0LT5kaXNrKSkpCisJICAgICAgIAlyZXR1cm4gMTsKKworI2lmbmRlZiBESVNDT1ZFUl9PTkxZCisJcGVkX2V4Y2VwdGlvbl90aHJvdyAoCisJCVBFRF9FWENFUFRJT05fRVJST1IsCisJCVBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQlfKCJVbmFibGUgdG8gc2F0aXNmeSBhbGwgY29uc3RyYWludHMgb24gdGhlIHBhcnRpdGlvbi4iKSk7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorbWFjX3BhcnRpdGlvbl9lbnVtZXJhdGUgKFBlZFBhcnRpdGlvbiogcGFydCkKK3sKKwlQZWREaXNrKgkJZGlzazsKKwlNYWNEaXNrRGF0YSoJCW1hY19kaXNrX2RhdGE7CisJaW50CQkJaTsKKwlpbnQJCQltYXhfcGFydF9jb3VudDsKKworCVBFRF9BU1NFUlQgKHBhcnQgIT0gTlVMTCwgcmV0dXJuIDApOworCVBFRF9BU1NFUlQgKHBhcnQtPmRpc2sgIT0gTlVMTCwgcmV0dXJuIDApOworCisJZGlzayA9IHBhcnQtPmRpc2s7CisJbWFjX2Rpc2tfZGF0YSA9IChNYWNEaXNrRGF0YSopIGRpc2stPmRpc2tfc3BlY2lmaWM7CisKKwltYXhfcGFydF9jb3VudCA9IHBlZF9kaXNrX2dldF9tYXhfcHJpbWFyeV9wYXJ0aXRpb25fY291bnQgKGRpc2spOworCisJaWYgKHBhcnQtPm51bSA+IDAgJiYgcGFydC0+bnVtIDw9IG1hY19kaXNrX2RhdGEtPnBhcnRfbWFwX2VudHJ5X2NvdW50KQorCQlyZXR1cm4gMTsKKworCWZvciAoaSA9IDE7IGkgPD0gbWF4X3BhcnRfY291bnQ7IGkrKykgeworCQlpZiAoIXBlZF9kaXNrX2dldF9wYXJ0aXRpb24gKGRpc2ssIGkpKSB7CisJCQlwYXJ0LT5udW0gPSBpOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKyNpZm5kZWYgRElTQ09WRVJfT05MWQorCXBlZF9leGNlcHRpb25fdGhyb3cgKAorCQlQRURfRVhDRVBUSU9OX0VSUk9SLAorCQlQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJXygiQ2FuJ3QgYWRkIGFub3RoZXIgcGFydGl0aW9uIC0tIHRoZSBwYXJ0aXRpb24gbWFwIGlzIHRvbyAiCisJCSAgInNtYWxsISIpKTsKKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK19kaXNrX2NvdW50X3BhcnRpdGlvbnMgKFBlZERpc2sqIGRpc2spCit7CisJTWFjRGlza0RhdGEqCQltYWNfZGlza19kYXRhID0gZGlzay0+ZGlza19zcGVjaWZpYzsKKwlQZWRQYXJ0aXRpb24qCQlwYXJ0ID0gTlVMTDsKKwlQZWRQYXJ0aXRpb24qCQlsYXN0ID0gTlVMTDsKKworCVBFRF9BU1NFUlQgKGRpc2stPnVwZGF0ZV9tb2RlLCByZXR1cm4gMCk7CisKKwltYWNfZGlza19kYXRhLT5hY3RpdmVfcGFydF9lbnRyeV9jb3VudCA9IDA7CisJbWFjX2Rpc2tfZGF0YS0+ZnJlZV9wYXJ0X2VudHJ5X2NvdW50ID0gMDsKKwltYWNfZGlza19kYXRhLT5sYXN0X3BhcnRfZW50cnlfbnVtID0gMDsKKworCS8qIHN1YnRsZTogd2Ugb25seSBjYXJlIGFib3V0IGZyZWUgc3BhY2UgYWZ0ZXIgdGhlIHBhcnRpdGlvbiBtYXAuCisJICogdGhlIHBhcnRpdGlvbiBtYXAgaXMgYW4gImFjdGl2ZSIgcGFydGl0aW9uLCBCVFcuLi4gKi8KKwlmb3IgKHBhcnQgPSBwZWRfZGlza19uZXh0X3BhcnRpdGlvbiAoZGlzaywgcGFydCk7IHBhcnQ7CisJICAgICBwYXJ0ID0gcGVkX2Rpc2tfbmV4dF9wYXJ0aXRpb24gKGRpc2ssIHBhcnQpKSB7CisJCWlmICghcGVkX3BhcnRpdGlvbl9pc19hY3RpdmUgKHBhcnQpKQorCQkJY29udGludWU7CisKKwkJbWFjX2Rpc2tfZGF0YS0+YWN0aXZlX3BhcnRfZW50cnlfY291bnQrKzsKKwkJaWYgKGxhc3QgJiYgbGFzdC0+Z2VvbS5lbmQgKyAxIDwgcGFydC0+Z2VvbS5zdGFydCkKKwkJCW1hY19kaXNrX2RhdGEtPmZyZWVfcGFydF9lbnRyeV9jb3VudCsrOworCQltYWNfZGlza19kYXRhLT5sYXN0X3BhcnRfZW50cnlfbnVtCisJCQk9IFBFRF9NQVggKG1hY19kaXNrX2RhdGEtPmxhc3RfcGFydF9lbnRyeV9udW0sCisJCQkJICAgcGFydC0+bnVtKTsKKworCQlsYXN0ID0gcGFydDsKKwl9CisKKwlpZiAobGFzdCAmJiBsYXN0LT5nZW9tLmVuZCA8IGRpc2stPmRldi0+bGVuZ3RoIC0gMSkKKwkJbWFjX2Rpc2tfZGF0YS0+ZnJlZV9wYXJ0X2VudHJ5X2NvdW50Kys7CisKKwltYWNfZGlza19kYXRhLT5sYXN0X3BhcnRfZW50cnlfbnVtCisJCT0gUEVEX01BWCAobWFjX2Rpc2tfZGF0YS0+bGFzdF9wYXJ0X2VudHJ5X251bSwKKwkJCSAgIG1hY19kaXNrX2RhdGEtPmFjdGl2ZV9wYXJ0X2VudHJ5X2NvdW50CisJCQkJKyBtYWNfZGlza19kYXRhLT5mcmVlX3BhcnRfZW50cnlfY291bnQpOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50CithZGRfbWV0YWRhdGFfcGFydCAoUGVkRGlzayogZGlzaywgUGVkU2VjdG9yIHN0YXJ0LCBQZWRTZWN0b3IgZW5kKQoreworCVBlZFBhcnRpdGlvbioJCW5ld19wYXJ0OworCVBlZENvbnN0cmFpbnQqCQljb25zdHJhaW50X2FueSA9IHBlZF9jb25zdHJhaW50X2FueSAoZGlzay0+ZGV2KTsKKworCVBFRF9BU1NFUlQgKGRpc2sgIT0gTlVMTCwgcmV0dXJuIDApOworCisJbmV3X3BhcnQgPSBwZWRfcGFydGl0aW9uX25ldyAoZGlzaywgUEVEX1BBUlRJVElPTl9NRVRBREFUQSwgTlVMTCwKKwkJCQkgICAgICBzdGFydCwgZW5kKTsKKwlpZiAoIW5ld19wYXJ0KQorCQlnb3RvIGVycm9yOworCWlmICghcGVkX2Rpc2tfYWRkX3BhcnRpdGlvbiAoZGlzaywgbmV3X3BhcnQsIGNvbnN0cmFpbnRfYW55KSkKKwkJZ290byBlcnJvcl9kZXN0cm95X25ld19wYXJ0OworCisJcGVkX2NvbnN0cmFpbnRfZGVzdHJveSAoY29uc3RyYWludF9hbnkpOworCXJldHVybiAxOworCitlcnJvcl9kZXN0cm95X25ld19wYXJ0OgorCXBlZF9wYXJ0aXRpb25fZGVzdHJveSAobmV3X3BhcnQpOworZXJyb3I6CisJcGVkX2NvbnN0cmFpbnRfZGVzdHJveSAoY29uc3RyYWludF9hbnkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CittYWNfYWxsb2NfbWV0YWRhdGEgKFBlZERpc2sqIGRpc2spCit7CisJTWFjRGlza0RhdGEqCQltYWNfZGlza19kYXRhOworCisJUEVEX0FTU0VSVCAoZGlzayAhPSBOVUxMLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAoZGlzay0+ZGlza19zcGVjaWZpYyAhPSBOVUxMLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAoZGlzay0+ZGV2ICE9IE5VTEwsIHJldHVybiAwKTsKKworCW1hY19kaXNrX2RhdGEgPSBkaXNrLT5kaXNrX3NwZWNpZmljOworCisJaWYgKCFhZGRfbWV0YWRhdGFfcGFydCAoZGlzaywgMCwgZGlzay0+ZGV2LT5zZWN0b3Jfc2l6ZSAvIDUxMiAtIDEpKQorCQlyZXR1cm4gMDsKKworCS8qIGhhY2s6IHRoaXMgc2VlbXMgdG8gYmUgYSBnb29kIHBsYWNlLCB0byB1cGRhdGUgdGhlIHBhcnRpdGlvbgltYXAKKwkgKiBlbnRyeSBjb3VudCwgc2luY2UgbWFjX2FsbG9jX21ldGFkYXRhKCkgZ2V0cyBjYWxsZWQgZHVyaW5nCisJICogX2Rpc2tfcG9wX3VwZGF0ZV9tb2RlKCkKKwkgKi8KKwlyZXR1cm4gX2Rpc2tfY291bnRfcGFydGl0aW9ucyAoZGlzayk7Cit9CisKK3N0YXRpYyBpbnQKK21hY19nZXRfbWF4X3ByaW1hcnlfcGFydGl0aW9uX2NvdW50IChjb25zdCBQZWREaXNrKiBkaXNrKQoreworCU1hY0Rpc2tEYXRhKgltYWNfZGlza19kYXRhID0gZGlzay0+ZGlza19zcGVjaWZpYzsKKwlQZWRQYXJ0aXRpb24qCXBhcnRfbWFwX3BhcnRpdGlvbjsKKworCXBhcnRfbWFwX3BhcnRpdGlvbiA9IHBlZF9kaXNrX2dldF9wYXJ0aXRpb24gKGRpc2ssCisJCSAgICAgICAJCQltYWNfZGlza19kYXRhLT5wYXJ0X21hcF9lbnRyeV9udW0pOworCisJLyogSEFDSzogaWYgd2UgaGF2ZW4ndCBmb3VuZCB0aGUgcGFydGl0aW9uIG1hcCBwYXJ0aXRpb24gKHlldCksCisJICogd2UgcmV0dXJuIHRoaXMuCisJICovCisJaWYgKCFwYXJ0X21hcF9wYXJ0aXRpb24pIHsKKwkJbWFjX2Rpc2tfZGF0YS0+cGFydF9tYXBfZW50cnlfbnVtID0gMDsKKwkJcmV0dXJuIDY1NTM2OworCX0KKworCS8qIEhBQ0s6IHNpbmNlIE1hYyBsYWJlbHMgbmVlZCBhbiBlbnRyeSBmb3IgZnJlZS1zcGFjZSByZWdpb25zLCB3ZQorCSAqIG11c3QgYWxsb3cgaGFsZiBwbHVzIDEgZW50cmllcyBmb3IgZnJlZS1zcGFjZSBwYXJ0aXRpb25zLiAgSSBoYXRlCisJICogdGhpcywgYnV0IHRoaW5ncyBnZXQgUkVBTExZIGNvbXBsaWNhdGVkLCBvdGhlcndpc2UuCisJICogICAgIChJJ20gcHJlcGFyZWQgdG8gY29tcGxpY2F0ZSB0aGluZ3MgbGF0ZXIsIGJ1dCBJIHdhbnQgdG8gZ2V0CisJICogZXZlcnl0aGluZyB3b3JraW5nLCBmaXJzdCkKKwkgKi8KKwlyZXR1cm4gbWFjX2Rpc2tfZGF0YS0+cGFydF9tYXBfZW50cnlfY291bnQgLyBtYWNfZGlza19kYXRhLT5naG9zdF9zaXplCisJCS0gbWFjX2Rpc2tfZGF0YS0+ZnJlZV9wYXJ0X2VudHJ5X2NvdW50ICsgMTsKK30KKworc3RhdGljIFBlZERpc2tPcHMgbWFjX2Rpc2tfb3BzID0geworCXByb2JlOgkJCW1hY19wcm9iZSwKKyNpZm5kZWYgRElTQ09WRVJfT05MWQorCWNsb2JiZXI6CQltYWNfY2xvYmJlciwKKyNlbHNlCisJY2xvYmJlcjoJCU5VTEwsCisjZW5kaWYKKwlhbGxvYzoJCQltYWNfYWxsb2MsCisJZHVwbGljYXRlOgkJbWFjX2R1cGxpY2F0ZSwKKwlmcmVlOgkJCW1hY19mcmVlLAorCXJlYWQ6CQkJbWFjX3JlYWQsCisjaWZuZGVmIERJU0NPVkVSX09OTFkKKyAgICAgICAgLyogRklYTUU6IHJlbW92ZSB0aGlzIGNhc3QsIG9uY2UgbWFjX3dyaXRlIGlzIGZpeGVkIG5vdCB0bworICAgICAgICAgICBtb2RpZnkgaXRzICpESVNLIHBhcmFtZXRlci4gICovCisJd3JpdGU6CQkJKGludCAoKikgKGNvbnN0IFBlZERpc2sqKSkgbWFjX3dyaXRlLAorI2Vsc2UKKwl3cml0ZToJCQlOVUxMLAorI2VuZGlmCisKKwlwYXJ0aXRpb25fbmV3OgkJbWFjX3BhcnRpdGlvbl9uZXcsCisJcGFydGl0aW9uX2R1cGxpY2F0ZToJbWFjX3BhcnRpdGlvbl9kdXBsaWNhdGUsCisJcGFydGl0aW9uX2Rlc3Ryb3k6CW1hY19wYXJ0aXRpb25fZGVzdHJveSwKKwlwYXJ0aXRpb25fc2V0X3N5c3RlbToJbWFjX3BhcnRpdGlvbl9zZXRfc3lzdGVtLAorCXBhcnRpdGlvbl9zZXRfZmxhZzoJbWFjX3BhcnRpdGlvbl9zZXRfZmxhZywKKwlwYXJ0aXRpb25fZ2V0X2ZsYWc6CW1hY19wYXJ0aXRpb25fZ2V0X2ZsYWcsCisJcGFydGl0aW9uX2lzX2ZsYWdfYXZhaWxhYmxlOgltYWNfcGFydGl0aW9uX2lzX2ZsYWdfYXZhaWxhYmxlLAorCXBhcnRpdGlvbl9zZXRfbmFtZToJbWFjX3BhcnRpdGlvbl9zZXRfbmFtZSwKKwlwYXJ0aXRpb25fZ2V0X25hbWU6CW1hY19wYXJ0aXRpb25fZ2V0X25hbWUsCisJcGFydGl0aW9uX2FsaWduOgltYWNfcGFydGl0aW9uX2FsaWduLAorCXBhcnRpdGlvbl9lbnVtZXJhdGU6CW1hY19wYXJ0aXRpb25fZW51bWVyYXRlLAorCisJYWxsb2NfbWV0YWRhdGE6CQltYWNfYWxsb2NfbWV0YWRhdGEsCisJZ2V0X21heF9wcmltYXJ5X3BhcnRpdGlvbl9jb3VudDoKKwkJCQltYWNfZ2V0X21heF9wcmltYXJ5X3BhcnRpdGlvbl9jb3VudAorfTsKKworc3RhdGljIFBlZERpc2tUeXBlIG1hY19kaXNrX3R5cGUgPSB7CisJbmV4dDoJCU5VTEwsCisJbmFtZToJCSJtYWMiLAorCW9wczoJCSZtYWNfZGlza19vcHMsCisJZmVhdHVyZXM6CVBFRF9ESVNLX1RZUEVfUEFSVElUSU9OX05BTUUKK307CisKK3ZvaWQKK3BlZF9kaXNrX21hY19pbml0ICgpCit7CisJUEVEX0FTU0VSVCAoc2l6ZW9mIChNYWNSYXdQYXJ0aXRpb24pID09IDUxMiwgcmV0dXJuKTsKKwlQRURfQVNTRVJUIChzaXplb2YgKE1hY1Jhd0Rpc2spID09IDUxMiwgcmV0dXJuKTsKKworCXBlZF9kaXNrX3R5cGVfcmVnaXN0ZXIgKCZtYWNfZGlza190eXBlKTsKK30KKwordm9pZAorcGVkX2Rpc2tfbWFjX2RvbmUgKCkKK3sKKwlwZWRfZGlza190eXBlX3VucmVnaXN0ZXIgKCZtYWNfZGlza190eXBlKTsKK30KKwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9sYWJlbHMvcGM5OC5jIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9sYWJlbHMvcGM5OC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3Zjg0YTUKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2xhYmVscy9wYzk4LmMKQEAgLTAsMCArMSw4ODcgQEAKKy8qCisgICAgbGlicGFydGVkIC0gYSBsaWJyYXJ5IGZvciBtYW5pcHVsYXRpbmcgZGlzayBwYXJ0aXRpb25zCisgICAgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQorKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaW5jbHVkZSA8cGFydGVkL3BhcnRlZC5oPgorI2luY2x1ZGUgPHBhcnRlZC9kZWJ1Zy5oPgorI2luY2x1ZGUgPHBhcnRlZC9lbmRpYW4uaD4KKworI2lmIEVOQUJMRV9OTFMKKyMgIGluY2x1ZGUgPGxpYmludGwuaD4KKyMgIGRlZmluZSBfKFN0cmluZykgZGdldHRleHQgKFBBQ0tBR0UsIFN0cmluZykKKyNlbHNlCisjICBkZWZpbmUgXyhTdHJpbmcpIChTdHJpbmcpCisjZW5kaWYgLyogRU5BQkxFX05MUyAqLworCisvKiBoYWNrZWQgZnJvbSBMaW51eC85OCBzb3VyY2U6IGZzL3BhcnRpdGlvbnMvbmVjOTguaAorICoKKyAqIFNlZSBhbHNvOgorICogICAgICBodHRwOi8vcGVvcGxlLkZyZWVCU0Qub3JnL35rYXRvL3BjOTguaHRtbAorICogICAgICBodHRwOi8vd3d3LmttYy5reW90by11LmFjLmpwL3Byb2ovbGludXg5OC9pbmRleC1lbmdsaXNoLmh0bWwKKyAqCisgKiBQYXJ0aXRpb24gdHlwZXM6CisgKiAKKyAqICAgaWQwKG1pZCk6CisgKiAgICAgIGJpdCA3OiAxPWJvb3RhYmxlLCAwPW5vdCBib290YWJsZQorICogICAgICAgICMgTGludXggdXNlcyB0aGlzIGZsYWcgdG8gbWFrZSBhIGRpc3RpbmN0aW9uIGJldHdlZW4gZXh0MiBhbmQgc3dhcC4KKyAqICAgICAgYml0IDYtLTA6CisgKiAgICAgICAgMDBIICAgICAgOiBOODgtQkFTSUMoZGF0YSk/LCBQQy1VWChkYXRhKT8KKyAqICAgICAgICAwNEggICAgICA6IFBDLVVYKGRhdGEpCisgKiAgICAgICAgMDZIICAgICAgOiBOODgtQkFTSUMKKyAqICAgICAgICAxMEggICAgICA6IE44OC1CQVNJQworICogICAgICAgIDE0SCAgICAgIDogKkJTRCwgUEMtVVgKKyAqICAgICAgICAyMEggICAgICA6IERPUyhkYXRhKSwgV2luZG93czk1Lzk4L05ULCBMaW51eAorICogICAgICAgIDIxSC4uMkZIIDogRE9TKHN5c3RlbSMxIC4uIHN5c3RlbSMxNSkKKyAqICAgICAgICA0MEggICAgICA6IE1pbml4CisgKiAgICAgICAgCisgKiAgIGlkMShzaWQpOgorICogICAgICBiaXQgNzogMT1hY3RpdmUsIDA9c2xlZXAoaGlkZGVuKQorICogICAgICAgICMgUEMtVVggdXNlcyB0aGlzIGZsYWcgdG8gbWFrZSBhIGRpc3RpbmN0aW9uIGJldHdlZW4gaXRzIGZpbGUgc3lzdGVtCisgKiAgICAgICAgIyBhbmQgaXRzIHN3YXAuCisgKiAgICAgIGJpdCA2LS0wOgorICogICAgICAgIDAxSDogRkFUMTIKKyAqICAgICAgICAxMUg6IEZBVDE2LCA8MzJNQiBbYWNjZXNzaWJsZSB0byBET1MgMy4zXQorICogICAgICAgIDIxSDogRkFUMTYsID49MzJNQiBbTGFyZ2UgUGFydGl0aW9uXQorICogICAgICAgIDMxSDogTlRGUworICogICAgICAgIDI4SDogV2luZG93cyBOVCAoVm9sdW1lL1N0cmlwZSBTZXQ/KQorICogICAgICAgIDQxSDogV2luZG93cyBOVCAoVm9sdW1lL1N0cmlwZSBTZXQ/KQorICogICAgICAgIDQ4SDogV2luZG93cyBOVCAoVm9sdW1lL1N0cmlwZSBTZXQ/KQorICogICAgICAgIDYxSDogRkFUMzIKKyAqICAgICAgICAwNEg6IFBDLVVYCisgKiAgICAgICAgMDZIOiBOODgtQkFTSUMKKyAqICAgICAgICA0NEg6ICpCU0QKKyAqICAgICAgICA2Mkg6IGV4dDIsIGxpbnV4LXN3YXAKKyAqLworCisjZGVmaW5lIE1BWF9QQVJUX0NPVU5UIDE2CisjZGVmaW5lIFBDOTgwMF9FWFRGTVRfTUFHSUMgMHhBQTU1CisKKyNkZWZpbmUgQklUKHgpICgxIDw8ICh4KSkKKyNkZWZpbmUgR0VUX0JJVChuLGJpdCkgKCgobikgJiBCSVQoYml0KSkgIT0gMCkKKyNkZWZpbmUgU0VUX0JJVChuLGJpdCx2YWwpIG4gPSAodmFsKT8gIChuIHwgQklUKGJpdCkpICA6ICAobiAmIH5CSVQoYml0KSkKKwordHlwZWRlZiBzdHJ1Y3QgX1BDOThSYXdQYXJ0aXRpb24JUEM5OFJhd1BhcnRpdGlvbjsKK3R5cGVkZWYgc3RydWN0IF9QQzk4UmF3VGFibGUJCVBDOThSYXdUYWJsZTsKKworLyogcmlwcGVkIGZyb20gTGludXgvOTggc291cmNlICovCitzdHJ1Y3QgX1BDOThSYXdQYXJ0aXRpb24geworCXVpbnQ4X3QJCW1pZDsJCS8qIDB4ODAgLSBib290ICovCisJdWludDhfdAkJc2lkOwkJLyogMHg4MCAtIGFjdGl2ZSAqLworCXVpbnQ4X3QJCWR1bTE7CQkvKiBkdW1teSBmb3IgcGFkZGluZyAqLworCXVpbnQ4X3QJCWR1bTI7CQkvKiBkdW1teSBmb3IgcGFkZGluZyAqLworCXVpbnQ4X3QJCWlwbF9zZWN0OwkvKiBJUEwgc2VjdG9yICovCisJdWludDhfdAkJaXBsX2hlYWQ7CS8qIElQTCBoZWFkICovCisJdWludDE2X3QJaXBsX2N5bDsJLyogSVBMIGN5bGluZGVyICovCisJdWludDhfdAkJc2VjdG9yOwkJLyogc3RhcnRpbmcgc2VjdG9yICovCisJdWludDhfdAkJaGVhZDsJCS8qIHN0YXJ0aW5nIGhlYWQgKi8KKwl1aW50MTZfdAljeWw7CQkvKiBzdGFydGluZyBjeWxpbmRlciAqLworCXVpbnQ4X3QJCWVuZF9zZWN0b3I7CS8qIGVuZCBzZWN0b3IgKi8KKwl1aW50OF90CQllbmRfaGVhZDsJLyogZW5kIGhlYWQgKi8KKwl1aW50MTZfdAllbmRfY3lsOwkvKiBlbmQgY3lsaW5kZXIgKi8KKwljaGFyCQluYW1lWzE2XTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBfUEM5OFJhd1RhYmxlIHsKKwl1aW50OF90CQkJYm9vdF9jb2RlIFs1MTBdOworCXVpbnQxNl90CQltYWdpYzsKKwlQQzk4UmF3UGFydGl0aW9uCXBhcnRpdGlvbnMgW01BWF9QQVJUX0NPVU5UXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlQZWRTZWN0b3IJaXBsX3NlY3RvcjsKKwlpbnQJCXN5c3RlbTsKKwlpbnQJCWJvb3Q7CisJaW50CQloaWRkZW47CisJY2hhcgkJbmFtZSBbMTddOworfSBQQzk4UGFydGl0aW9uRGF0YTsKKworLyogdGhpcyBNQlIgYm9vdCBjb2RlIGlzIGR1bW15ICovCitzdGF0aWMgY29uc3QgY2hhciBNQlJfQk9PVF9DT0RFW10gPSB7CisJMHhjYiwJCQkvKiByZXRmICovCisJMHgwMCwgMHgwMCwgMHgwMCwJLyogKi8KKwkweDQ5LCAweDUwLCAweDRjLCAweDMxICAvKiAiSVBMMSIgKi8KK307CisKK3N0YXRpYyBQZWREaXNrVHlwZSBwYzk4X2Rpc2tfdHlwZTsKKworc3RhdGljIFBlZFNlY3RvciBjaHNfdG9fc2VjdG9yIChjb25zdCBQZWREZXZpY2UqIGRldiwgaW50IGMsIGludCBoLCBpbnQgcyk7CitzdGF0aWMgdm9pZCBzZWN0b3JfdG9fY2hzIChjb25zdCBQZWREZXZpY2UqIGRldiwgUGVkU2VjdG9yIHNlY3RvciwKKwkJCSAgIGludCogYywgaW50KiBoLCBpbnQqIHMpOworCisvKiBtYWdpYyg/KSBjaGVjayAqLworc3RhdGljIGludAorcGM5OF9jaGVja19tYWdpYyAoY29uc3QgUEM5OFJhd1RhYmxlICpwYXJ0X3RhYmxlKQoreworCS8qIGNoZWNrICJleHRlbmRlZC1mb3JtYXQiIChoYXZlIHBhcnRpdGlvbiB0YWJsZT8pICovCisJaWYgKFBFRF9MRTE2X1RPX0NQVShwYXJ0X3RhYmxlLT5tYWdpYykgIT0gUEM5ODAwX0VYVEZNVF9NQUdJQykKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludAorcGM5OF9jaGVja19pcGxfc2lnbmF0dXJlIChjb25zdCBQQzk4UmF3VGFibGUgKnBhcnRfdGFibGUpCit7CisJcmV0dXJuICFtZW1jbXAgKHBhcnRfdGFibGUtPmJvb3RfY29kZSArIDQsICJJUEwxIiwgNCk7Cit9CQkKKworc3RhdGljIGludAorY2hlY2tfcGFydGl0aW9uX2NvbnNpc3RlbmN5IChjb25zdCBQZWREZXZpY2UqIGRldiwKKwkgICAgICAgCQkgICAgIGNvbnN0IFBDOThSYXdQYXJ0aXRpb24qIHJhd19wYXJ0KQoreworCWlmIChyYXdfcGFydC0+aXBsX3NlY3QgPj0gZGV2LT5od19nZW9tLnNlY3RvcnMKKwkgICB8fCByYXdfcGFydC0+c2VjdG9yID49IGRldi0+aHdfZ2VvbS5zZWN0b3JzCisJICAgfHwgcmF3X3BhcnQtPmVuZF9zZWN0b3IgPj0gZGV2LT5od19nZW9tLnNlY3RvcnMKKwkgICB8fCByYXdfcGFydC0+aXBsX2hlYWQgPj0gZGV2LT5od19nZW9tLmhlYWRzCisJICAgfHwgcmF3X3BhcnQtPmhlYWQgPj0gZGV2LT5od19nZW9tLmhlYWRzCisJICAgfHwgcmF3X3BhcnQtPmVuZF9oZWFkID49IGRldi0+aHdfZ2VvbS5oZWFkcworCSAgIHx8IFBFRF9MRTE2X1RPX0NQVShyYXdfcGFydC0+aXBsX2N5bCkgPj0gZGV2LT5od19nZW9tLmN5bGluZGVycworCSAgIHx8IFBFRF9MRTE2X1RPX0NQVShyYXdfcGFydC0+Y3lsKSA+PSBkZXYtPmh3X2dlb20uY3lsaW5kZXJzCisJICAgfHwgUEVEX0xFMTZfVE9fQ1BVKHJhd19wYXJ0LT5lbmRfY3lsKSA+PSBkZXYtPmh3X2dlb20uY3lsaW5kZXJzCisJICAgfHwgUEVEX0xFMTZfVE9fQ1BVKHJhd19wYXJ0LT5jeWwpCisJICAgCT4gUEVEX0xFMTZfVE9fQ1BVKHJhd19wYXJ0LT5lbmRfY3lsKQorI2lmIDAKKwkgICB8fCAhY2hzX3RvX3NlY3RvcihkZXYsIFBFRF9MRTE2X1RPX0NQVShyYXdfcGFydC0+aXBsX2N5bCksCisJCQkgICAgIHJhd19wYXJ0LT5pcGxfaGVhZCwgcmF3X3BhcnQtPmlwbF9zZWN0KQorCSAgIHx8ICFjaHNfdG9fc2VjdG9yKGRldiwgUEVEX0xFMTZfVE9fQ1BVKHJhd19wYXJ0LT5jeWwpLAorCQkJICAgICByYXdfcGFydC0+aGVhZCwgcmF3X3BhcnQtPnNlY3RvcikKKwkgICB8fCAhY2hzX3RvX3NlY3RvcihkZXYsIFBFRF9MRTE2X1RPX0NQVShyYXdfcGFydC0+ZW5kX2N5bCksCisJCQkgICAgIHJhd19wYXJ0LT5lbmRfaGVhZCwgcmF3X3BhcnQtPmVuZF9zZWN0b3IpCisjZW5kaWYKKwkgICB8fCBQRURfTEUxNl9UT19DUFUocmF3X3BhcnQtPmVuZF9jeWwpCisJICAJCTwgUEVEX0xFMTZfVE9fQ1BVKHJhd19wYXJ0LT5jeWwpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50CitwYzk4X3Byb2JlIChjb25zdCBQZWREZXZpY2UgKmRldikKK3sKKwlQQzk4UmF3VGFibGUJCXBhcnRfdGFibGU7CisJaW50CQkJZW1wdHk7CisJY29uc3QgUEM5OFJhd1BhcnRpdGlvbioJcDsKKworCVBFRF9BU1NFUlQgKGRldiAhPSBOVUxMLCByZXR1cm4gMCk7CisKKyAgICAgICAgaWYgKGRldi0+c2VjdG9yX3NpemUgIT0gNTEyKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworCisJaWYgKCFwZWRfZGV2aWNlX3JlYWQgKGRldiwgJnBhcnRfdGFibGUsIDAsIDIpKQorCQlyZXR1cm4gMDsKKworCS8qIGNoZWNrIG1hZ2ljICovCisJaWYgKCFwYzk4X2NoZWNrX21hZ2ljICgmcGFydF90YWJsZSkpCisJCXJldHVybiAwOworCisJLyogY2hlY2sgY29uc2lzdGVuY3kgKi8KKwllbXB0eSA9IDE7CisJZm9yIChwID0gcGFydF90YWJsZS5wYXJ0aXRpb25zOworCSAgICAgcCA8IHBhcnRfdGFibGUucGFydGl0aW9ucyArIE1BWF9QQVJUX0NPVU5UOworCSAgICAgcCsrKQorCXsKKwkJaWYgKHAtPm1pZCA9PSAwICYmIHAtPnNpZCA9PSAwKQorCQkJY29udGludWU7CisJCWVtcHR5ID0gMDsKKwkJaWYgKCFjaGVja19wYXJ0aXRpb25fY29uc2lzdGVuY3kgKGRldiwgcCkpCisJCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBjaGVjayBib290IGxvYWRlciAqLworCWlmIChwYzk4X2NoZWNrX2lwbF9zaWduYXR1cmUgKCZwYXJ0X3RhYmxlKSkKKwkJcmV0dXJuIDE7CisJZWxzZSBpZiAocGFydF90YWJsZS5ib290X2NvZGVbMF0pCS8qIGludmFsaWQgYm9vdCBsb2FkZXIgKi8KKwkJcmV0dXJuIDA7CisKKwkvKiBOb3QgdG8gbWlzdGFrZSBtc2RvcyBkaXNrIG1hcCBmb3IgUEMtOTgwMCdzIGVtcHR5IGRpc2sgbWFwICAqLworCWlmIChlbXB0eSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKworI2lmbmRlZiBESVNDT1ZFUl9PTkxZCitzdGF0aWMgaW50CitwYzk4X2Nsb2JiZXIgKFBlZERldmljZSogZGV2KQoreworCVBDOThSYXdUYWJsZQl0YWJsZTsKKworCVBFRF9BU1NFUlQgKGRldiAhPSBOVUxMLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAocGM5OF9wcm9iZSAoZGV2KSwgcmV0dXJuIDApOworCisJaWYgKCFwZWRfZGV2aWNlX3JlYWQgKGRldiwgJnRhYmxlLCAwLCAxKSkKKwkJcmV0dXJuIDA7CisKKwltZW1zZXQgKHRhYmxlLnBhcnRpdGlvbnMsIDAsIHNpemVvZiAodGFibGUucGFydGl0aW9ucykpOworCXRhYmxlLm1hZ2ljID0gUEVEX0NQVV9UT19MRTE2KDApOworCisJaWYgKHBjOThfY2hlY2tfaXBsX3NpZ25hdHVyZSAoJnRhYmxlKSkKKwkJbWVtc2V0ICh0YWJsZS5ib290X2NvZGUsIDAsIHNpemVvZiAodGFibGUuYm9vdF9jb2RlKSk7CisKKwlpZiAoIXBlZF9kZXZpY2Vfd3JpdGUgKGRldiwgKHZvaWQqKSAmdGFibGUsIDAsIDEpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gcGVkX2RldmljZV9zeW5jIChkZXYpOworfQorI2VuZGlmIC8qICFESVNDT1ZFUl9PTkxZICovCisKK3N0YXRpYyBQZWREaXNrKgorcGM5OF9hbGxvYyAoY29uc3QgUGVkRGV2aWNlKiBkZXYpCit7CisJUEVEX0FTU0VSVCAoZGV2ICE9IE5VTEwsIHJldHVybiAwKTsKKworCXJldHVybiBfcGVkX2Rpc2tfYWxsb2MgKGRldiwgJnBjOThfZGlza190eXBlKTsKK30KKworc3RhdGljIFBlZERpc2sqCitwYzk4X2R1cGxpY2F0ZSAoY29uc3QgUGVkRGlzayogZGlzaykKK3sKKwlyZXR1cm4gcGVkX2Rpc2tfbmV3X2ZyZXNoIChkaXNrLT5kZXYsICZwYzk4X2Rpc2tfdHlwZSk7Cit9CisKK3N0YXRpYyB2b2lkCitwYzk4X2ZyZWUgKFBlZERpc2sqIGRpc2spCit7CisJUEVEX0FTU0VSVCAoZGlzayAhPSBOVUxMLCByZXR1cm4pOworCisJX3BlZF9kaXNrX2ZyZWUgKGRpc2spOworfQorCitzdGF0aWMgUGVkU2VjdG9yCitjaHNfdG9fc2VjdG9yIChjb25zdCBQZWREZXZpY2UqIGRldiwgaW50IGMsIGludCBoLCBpbnQgcykKK3sKKwlQRURfQVNTRVJUIChkZXYgIT0gTlVMTCwgcmV0dXJuIDApOworCXJldHVybiAoYyAqIGRldi0+aHdfZ2VvbS5oZWFkcyArIGgpICogZGV2LT5od19nZW9tLnNlY3RvcnMgKyBzOworfQorCitzdGF0aWMgdm9pZAorc2VjdG9yX3RvX2NocyAoY29uc3QgUGVkRGV2aWNlKiBkZXYsIFBlZFNlY3RvciBzZWN0b3IsIGludCogYywgaW50KiBoLCBpbnQqIHMpCit7CisJUGVkU2VjdG9yIGN5bF9zaXplOworCisJUEVEX0FTU0VSVCAoZGV2ICE9IE5VTEwsIHJldHVybik7CisJUEVEX0FTU0VSVCAoYyAhPSBOVUxMLCByZXR1cm4pOworCVBFRF9BU1NFUlQgKGggIT0gTlVMTCwgcmV0dXJuKTsKKwlQRURfQVNTRVJUIChzICE9IE5VTEwsIHJldHVybik7CisKKwljeWxfc2l6ZSA9IGRldi0+aHdfZ2VvbS5oZWFkcyAqIGRldi0+aHdfZ2VvbS5zZWN0b3JzOworCisJKmMgPSBzZWN0b3IgLyBjeWxfc2l6ZTsKKwkqaCA9IChzZWN0b3IpICUgY3lsX3NpemUgLyBkZXYtPmh3X2dlb20uc2VjdG9yczsKKwkqcyA9IChzZWN0b3IpICUgY3lsX3NpemUgJSBkZXYtPmh3X2dlb20uc2VjdG9yczsKK30KKworc3RhdGljIFBlZFNlY3RvcgorbGVnYWN5X3N0YXJ0IChjb25zdCBQZWREaXNrKiBkaXNrLCBjb25zdCBQQzk4UmF3UGFydGl0aW9uKiByYXdfcGFydCkKK3sKKwlQRURfQVNTRVJUIChkaXNrICE9IE5VTEwsIHJldHVybiAwKTsKKwlQRURfQVNTRVJUIChyYXdfcGFydCAhPSBOVUxMLCByZXR1cm4gMCk7CisKKwlyZXR1cm4gY2hzX3RvX3NlY3RvciAoZGlzay0+ZGV2LCBQRURfTEUxNl9UT19DUFUocmF3X3BhcnQtPmN5bCksCisJCQkgICAgICByYXdfcGFydC0+aGVhZCwgcmF3X3BhcnQtPnNlY3Rvcik7Cit9CisKK3N0YXRpYyBQZWRTZWN0b3IKK2xlZ2FjeV9lbmQgKGNvbnN0IFBlZERpc2sqIGRpc2ssIGNvbnN0IFBDOThSYXdQYXJ0aXRpb24qIHJhd19wYXJ0KQoreworCVBFRF9BU1NFUlQgKGRpc2sgIT0gTlVMTCwgcmV0dXJuIDApOworCVBFRF9BU1NFUlQgKHJhd19wYXJ0ICE9IE5VTEwsIHJldHVybiAwKTsKKworCWlmIChyYXdfcGFydC0+ZW5kX2hlYWQgPT0gMCAmJiByYXdfcGFydC0+ZW5kX3NlY3RvciA9PSAwKSB7CisJCXJldHVybiBjaHNfdG9fc2VjdG9yIChkaXNrLT5kZXYsCisJCQkJICAgICAgUEVEX0xFMTZfVE9fQ1BVKHJhd19wYXJ0LT5lbmRfY3lsKSwKKwkJCQkgICAgICBkaXNrLT5kZXYtPmh3X2dlb20uaGVhZHMgLSAxLAorCQkJCSAgICAgIGRpc2stPmRldi0+aHdfZ2VvbS5zZWN0b3JzIC0gMSk7CisJfSBlbHNlIHsKKwkJcmV0dXJuIGNoc190b19zZWN0b3IgKGRpc2stPmRldiwKKwkJCQkgICAgICBQRURfTEUxNl9UT19DUFUocmF3X3BhcnQtPmVuZF9jeWwpLAorCQkJCSAgICAgIHJhd19wYXJ0LT5lbmRfaGVhZCwKKwkJCQkgICAgICByYXdfcGFydC0+ZW5kX3NlY3Rvcik7CisJfQorfQorCitzdGF0aWMgaW50Citpc191bnVzZWRfcGFydGl0aW9uKGNvbnN0IFBDOThSYXdQYXJ0aXRpb24qIHJhd19wYXJ0KQoreworCWlmIChyYXdfcGFydC0+bWlkIHx8IHJhd19wYXJ0LT5zaWQKKwkgICAgfHwgcmF3X3BhcnQtPmlwbF9zZWN0CisJICAgIHx8IHJhd19wYXJ0LT5pcGxfaGVhZAorCSAgICB8fCBQRURfTEUxNl9UT19DUFUocmF3X3BhcnQtPmlwbF9jeWwpCisJICAgIHx8IHJhd19wYXJ0LT5zZWN0b3IKKwkgICAgfHwgcmF3X3BhcnQtPmhlYWQKKwkgICAgfHwgUEVEX0xFMTZfVE9fQ1BVKHJhd19wYXJ0LT5jeWwpCisJICAgIHx8IHJhd19wYXJ0LT5lbmRfc2VjdG9yCisJICAgIHx8IHJhd19wYXJ0LT5lbmRfaGVhZAorCSAgICB8fCBQRURfTEUxNl9UT19DUFUocmF3X3BhcnQtPmVuZF9jeWwpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludAorcmVhZF90YWJsZSAoUGVkRGlzayogZGlzaykKK3sKKwlpbnQJCQlpOworCVBDOThSYXdUYWJsZQkJdGFibGU7CisJUGVkQ29uc3RyYWludCoJCWNvbnN0cmFpbnRfYW55OworCisJUEVEX0FTU0VSVCAoZGlzayAhPSBOVUxMLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAoZGlzay0+ZGV2ICE9IE5VTEwsIHJldHVybiAwKTsKKworCWNvbnN0cmFpbnRfYW55ID0gcGVkX2NvbnN0cmFpbnRfYW55IChkaXNrLT5kZXYpOworCisJaWYgKCFwZWRfZGV2aWNlX3JlYWQgKGRpc2stPmRldiwgKHZvaWQqKSAmdGFibGUsIDAsIDIpKQorCQlnb3RvIGVycm9yOworCisJaWYgKCFwYzk4X2NoZWNrX21hZ2ljKCZ0YWJsZSkpIHsKKwkJaWYgKHBlZF9leGNlcHRpb25fdGhyb3cgKAorCQkJUEVEX0VYQ0VQVElPTl9FUlJPUiwgUEVEX0VYQ0VQVElPTl9JR05PUkVfQ0FOQ0VMLAorCQkJXygiSW52YWxpZCBwYXJ0aXRpb24gdGFibGUgb24gJXMuIiksCisJCQlkaXNrLT5kZXYtPnBhdGgpKQorCQkJZ290byBlcnJvcjsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX1BBUlRfQ09VTlQ7IGkrKykgeworCQlQQzk4UmF3UGFydGl0aW9uKglyYXdfcGFydDsKKwkJUGVkUGFydGl0aW9uKgkJcGFydDsKKwkJUEM5OFBhcnRpdGlvbkRhdGEqCXBjOThfZGF0YTsKKwkJUGVkU2VjdG9yCQlwYXJ0X3N0YXJ0OworCQlQZWRTZWN0b3IJCXBhcnRfZW5kOworCisJCXJhd19wYXJ0ID0gJnRhYmxlLnBhcnRpdGlvbnMgW2ldOworCisJCWlmIChpc191bnVzZWRfcGFydGl0aW9uKHJhd19wYXJ0KSkKKwkJCWNvbnRpbnVlOworCisJCXBhcnRfc3RhcnQgPSBsZWdhY3lfc3RhcnQgKGRpc2ssIHJhd19wYXJ0KTsKKwkJcGFydF9lbmQgICA9IGxlZ2FjeV9lbmQgKGRpc2ssIHJhd19wYXJ0KTsKKworCQlwYXJ0ID0gcGVkX3BhcnRpdGlvbl9uZXcgKGRpc2ssIDAsIE5VTEwsIHBhcnRfc3RhcnQsIHBhcnRfZW5kKTsKKwkJaWYgKCFwYXJ0KQorCQkJZ290byBlcnJvcjsKKwkJcGM5OF9kYXRhID0gcGFydC0+ZGlza19zcGVjaWZpYzsKKwkJUEVEX0FTU0VSVCAocGM5OF9kYXRhICE9IE5VTEwsIGdvdG8gZXJyb3IpOworCisJCXBjOThfZGF0YS0+c3lzdGVtID0gKHJhd19wYXJ0LT5taWQgPDwgOCkgfCByYXdfcGFydC0+c2lkOworCQlwYzk4X2RhdGEtPmJvb3QgPSBHRVRfQklUKHJhd19wYXJ0LT5taWQsIDcpOworCQlwYzk4X2RhdGEtPmhpZGRlbiA9ICFHRVRfQklUKHJhd19wYXJ0LT5zaWQsIDcpOworCisJCXBlZF9wYXJ0aXRpb25fc2V0X25hbWUgKHBhcnQsIHJhd19wYXJ0LT5uYW1lKTsKKworCQlwYzk4X2RhdGEtPmlwbF9zZWN0b3IgPSBjaHNfdG9fc2VjdG9yICgKKwkJCWRpc2stPmRldiwKKwkJCVBFRF9MRTE2X1RPX0NQVShyYXdfcGFydC0+aXBsX2N5bCksCisJCQlyYXdfcGFydC0+aXBsX2hlYWQsCisJCQlyYXdfcGFydC0+aXBsX3NlY3QpOworCisJCS8qIGhhY2sgKi8KKwkJaWYgKHBjOThfZGF0YS0+aXBsX3NlY3RvciA9PSBwYXJ0LT5nZW9tLnN0YXJ0KQorCQkJcGM5OF9kYXRhLT5pcGxfc2VjdG9yID0gMDsKKworCQlwYXJ0LT5udW0gPSBpICsgMTsKKworCQlpZiAoIXBlZF9kaXNrX2FkZF9wYXJ0aXRpb24gKGRpc2ssIHBhcnQsIGNvbnN0cmFpbnRfYW55KSkKKwkJCWdvdG8gZXJyb3I7CisKKwkJaWYgKHBhcnQtPmdlb20uc3RhcnQgIT0gcGFydF9zdGFydAorCQkgICAgfHwgcGFydC0+Z2VvbS5lbmQgIT0gcGFydF9lbmQpIHsKKwkJCXBlZF9leGNlcHRpb25fdGhyb3cgKAorCQkJCVBFRF9FWENFUFRJT05fTk9fRkVBVFVSRSwKKwkJCQlQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCQlfKCJQYXJ0aXRpb24gJWQgaXNuJ3QgYWxpZ25lZCB0byBjeWxpbmRlciAiCisJCQkJICAiYm91bmRhcmllcy4gIFRoaXMgaXMgc3RpbGwgdW5zdXBwb3J0ZWQuIiksCisJCQkJcGFydC0+bnVtKTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKworCQlwYXJ0LT5mc190eXBlID0gcGVkX2ZpbGVfc3lzdGVtX3Byb2JlICgmcGFydC0+Z2VvbSk7CisJfQorCisJcGVkX2NvbnN0cmFpbnRfZGVzdHJveSAoY29uc3RyYWludF9hbnkpOworCXJldHVybiAxOworCitlcnJvcjoKKwlwZWRfZGlza19kZWxldGVfYWxsIChkaXNrKTsKKwlwZWRfY29uc3RyYWludF9kZXN0cm95IChjb25zdHJhaW50X2FueSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3BjOThfcmVhZCAoUGVkRGlzayogZGlzaykKK3sKKwlQRURfQVNTRVJUIChkaXNrICE9IE5VTEwsIHJldHVybiAwKTsKKwlQRURfQVNTRVJUIChkaXNrLT5kZXYgIT0gTlVMTCwgcmV0dXJuIDApOworCisJcGVkX2Rpc2tfZGVsZXRlX2FsbCAoZGlzayk7CisJcmV0dXJuIHJlYWRfdGFibGUgKGRpc2spOworfQorCisjaWZuZGVmIERJU0NPVkVSX09OTFkKK3N0YXRpYyBpbnQKK2ZpbGxfcmF3X3BhcnQgKFBDOThSYXdQYXJ0aXRpb24qIHJhd19wYXJ0LCBjb25zdCBQZWRQYXJ0aXRpb24qIHBhcnQpCit7CisJUEM5OFBhcnRpdGlvbkRhdGEqCXBjOThfZGF0YTsKKwlpbnQJCQljLCBoLCBzOworCWNvbnN0IGNoYXIqCQluYW1lOworCisJUEVEX0FTU0VSVCAocmF3X3BhcnQgIT0gTlVMTCwgcmV0dXJuIDApOworCVBFRF9BU1NFUlQgKHBhcnQgIT0gTlVMTCwgcmV0dXJuIDApOworCVBFRF9BU1NFUlQgKHBhcnQtPmRpc2tfc3BlY2lmaWMgIT0gTlVMTCwgcmV0dXJuIDApOworCisJcGM5OF9kYXRhID0gcGFydC0+ZGlza19zcGVjaWZpYzsKKwlyYXdfcGFydC0+bWlkID0gKHBjOThfZGF0YS0+c3lzdGVtID4+IDgpICYgMHhGRjsKKwlyYXdfcGFydC0+c2lkID0gcGM5OF9kYXRhLT5zeXN0ZW0gJiAweEZGOworCisJU0VUX0JJVChyYXdfcGFydC0+bWlkLCA3LCBwYzk4X2RhdGEtPmJvb3QpOworCVNFVF9CSVQocmF3X3BhcnQtPnNpZCwgNywgIXBjOThfZGF0YS0+aGlkZGVuKTsKKworCW1lbXNldCAocmF3X3BhcnQtPm5hbWUsICcgJywgc2l6ZW9mKHJhd19wYXJ0LT5uYW1lKSk7CisJbmFtZSA9IHBlZF9wYXJ0aXRpb25fZ2V0X25hbWUgKHBhcnQpOworCVBFRF9BU1NFUlQgKG5hbWUgIT0gTlVMTCwgcmV0dXJuIDApOworCVBFRF9BU1NFUlQgKHN0cmxlbiAobmFtZSkgPD0gMTYsIHJldHVybiAwKTsKKwlpZiAoIXN0cmxlbiAobmFtZSkgJiYgcGFydC0+ZnNfdHlwZSkKKwkJbmFtZSA9IHBhcnQtPmZzX3R5cGUtPm5hbWU7CisJbWVtY3B5IChyYXdfcGFydC0+bmFtZSwgbmFtZSwgc3RybGVuIChuYW1lKSk7CisKKwlzZWN0b3JfdG9fY2hzIChwYXJ0LT5kaXNrLT5kZXYsIHBhcnQtPmdlb20uc3RhcnQsICZjLCAmaCwgJnMpOworCXJhd19wYXJ0LT5jeWwJID0gUEVEX0NQVV9UT19MRTE2KGMpOworCXJhd19wYXJ0LT5oZWFkCSA9IGg7CisJcmF3X3BhcnQtPnNlY3RvciA9IHM7CisKKwlpZiAocGM5OF9kYXRhLT5pcGxfc2VjdG9yKSB7CisJCXNlY3Rvcl90b19jaHMgKHBhcnQtPmRpc2stPmRldiwgcGM5OF9kYXRhLT5pcGxfc2VjdG9yLAorCQkJICAgICAgICZjLCAmaCwgJnMpOworCQlyYXdfcGFydC0+aXBsX2N5bCAgPSBQRURfQ1BVX1RPX0xFMTYoYyk7CisJCXJhd19wYXJ0LT5pcGxfaGVhZCA9IGg7CisJCXJhd19wYXJ0LT5pcGxfc2VjdCA9IHM7CisJfSBlbHNlIHsKKwkJcmF3X3BhcnQtPmlwbF9jeWwgID0gcmF3X3BhcnQtPmN5bDsKKwkJcmF3X3BhcnQtPmlwbF9oZWFkID0gcmF3X3BhcnQtPmhlYWQ7CisJCXJhd19wYXJ0LT5pcGxfc2VjdCA9IHJhd19wYXJ0LT5zZWN0b3I7CisJfQorCisJc2VjdG9yX3RvX2NocyAocGFydC0+ZGlzay0+ZGV2LCBwYXJ0LT5nZW9tLmVuZCwgJmMsICZoLCAmcyk7CisJaWYgKGggIT0gcGFydC0+ZGlzay0+ZGV2LT5od19nZW9tLmhlYWRzIC0gMQorCSAgICB8fCBzICE9IHBhcnQtPmRpc2stPmRldi0+aHdfZ2VvbS5zZWN0b3JzIC0gMSkgeworCQlwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJICAgIFBFRF9FWENFUFRJT05fTk9fRkVBVFVSRSwKKwkJICAgIFBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkgICAgXygiUGFydGl0aW9uICVkIGlzbid0IGFsaWduZWQgdG8gY3lsaW5kZXIgIgorCQkgICAgICAiYm91bmRhcmllcy4gIFRoaXMgaXMgc3RpbGwgdW5zdXBwb3J0ZWQuIiksCisJCSAgICBwYXJ0LT5udW0pOworCQlyZXR1cm4gMDsKKwl9CisJcmF3X3BhcnQtPmVuZF9jeWwgICAgPSBQRURfQ1BVX1RPX0xFMTYoYyk7CisjaWYgMAorCXJhd19wYXJ0LT5lbmRfaGVhZCAgID0gaDsKKwlyYXdfcGFydC0+ZW5kX3NlY3RvciA9IHM7CisjZWxzZQorCXJhd19wYXJ0LT5lbmRfaGVhZCAgID0gMDsKKwlyYXdfcGFydC0+ZW5kX3NlY3RvciA9IDA7CisjZW5kaWYKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50CitwYzk4X3dyaXRlIChjb25zdCBQZWREaXNrKiBkaXNrKQoreworCVBDOThSYXdUYWJsZQkJdGFibGU7CisJUGVkUGFydGl0aW9uKgkJcGFydDsKKwlpbnQJCQlpOworCisJUEVEX0FTU0VSVCAoZGlzayAhPSBOVUxMLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAoZGlzay0+ZGV2ICE9IE5VTEwsIHJldHVybiAwKTsKKworCWlmICghcGVkX2RldmljZV9yZWFkIChkaXNrLT5kZXYsICZ0YWJsZSwgMCwgMikpCisJCXJldHVybiAwOworCisJaWYgKCFwYzk4X2NoZWNrX2lwbF9zaWduYXR1cmUgKCZ0YWJsZSkpIHsKKwkJbWVtc2V0ICh0YWJsZS5ib290X2NvZGUsIDAsIHNpemVvZih0YWJsZS5ib290X2NvZGUpKTsKKwkJbWVtY3B5ICh0YWJsZS5ib290X2NvZGUsIE1CUl9CT09UX0NPREUsIHNpemVvZihNQlJfQk9PVF9DT0RFKSk7CisJfQorCisJbWVtc2V0ICh0YWJsZS5wYXJ0aXRpb25zLCAwLCBzaXplb2YgKHRhYmxlLnBhcnRpdGlvbnMpKTsKKwl0YWJsZS5tYWdpYyA9IFBFRF9DUFVfVE9fTEUxNihQQzk4MDBfRVhURk1UX01BR0lDKTsKKworCWZvciAoaSA9IDE7IGkgPD0gTUFYX1BBUlRfQ09VTlQ7IGkrKykgeworCQlwYXJ0ID0gcGVkX2Rpc2tfZ2V0X3BhcnRpdGlvbiAoZGlzaywgaSk7CisJCWlmICghcGFydCkKKwkJCWNvbnRpbnVlOworCisJCWlmICghZmlsbF9yYXdfcGFydCAoJnRhYmxlLnBhcnRpdGlvbnMgW2kgLSAxXSwgcGFydCkpCisJCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXBlZF9kZXZpY2Vfd3JpdGUgKGRpc2stPmRldiwgKHZvaWQqKSAmdGFibGUsIDAsIDIpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gcGVkX2RldmljZV9zeW5jIChkaXNrLT5kZXYpOworfQorI2VuZGlmIC8qICFESVNDT1ZFUl9PTkxZICovCisKK3N0YXRpYyBQZWRQYXJ0aXRpb24qCitwYzk4X3BhcnRpdGlvbl9uZXcgKAorCWNvbnN0IFBlZERpc2sqIGRpc2ssIFBlZFBhcnRpdGlvblR5cGUgcGFydF90eXBlLAorCWNvbnN0IFBlZEZpbGVTeXN0ZW1UeXBlKiBmc190eXBlLCBQZWRTZWN0b3Igc3RhcnQsIFBlZFNlY3RvciBlbmQpCit7CisJUGVkUGFydGl0aW9uKgkJcGFydDsKKwlQQzk4UGFydGl0aW9uRGF0YSoJcGM5OF9kYXRhOworCisJcGFydCA9IF9wZWRfcGFydGl0aW9uX2FsbG9jIChkaXNrLCBwYXJ0X3R5cGUsIGZzX3R5cGUsIHN0YXJ0LCBlbmQpOworCWlmICghcGFydCkKKwkJZ290byBlcnJvcjsKKworCWlmIChwZWRfcGFydGl0aW9uX2lzX2FjdGl2ZSAocGFydCkpIHsKKwkJcGFydC0+ZGlza19zcGVjaWZpYworCQkJPSBwYzk4X2RhdGEgPSBwZWRfbWFsbG9jIChzaXplb2YgKFBDOThQYXJ0aXRpb25EYXRhKSk7CisJCWlmICghcGM5OF9kYXRhKQorCQkJZ290byBlcnJvcl9mcmVlX3BhcnQ7CisJCXBjOThfZGF0YS0+aXBsX3NlY3RvciA9IDA7CisJCXBjOThfZGF0YS0+aGlkZGVuID0gMDsKKwkJcGM5OF9kYXRhLT5ib290ID0gMDsKKwkJc3RyY3B5IChwYzk4X2RhdGEtPm5hbWUsICIiKTsKKwl9IGVsc2UgeworCQlwYXJ0LT5kaXNrX3NwZWNpZmljID0gTlVMTDsKKwl9CisJcmV0dXJuIHBhcnQ7CisKKwlwZWRfZnJlZSAocGM5OF9kYXRhKTsKK2Vycm9yX2ZyZWVfcGFydDoKKwlwZWRfZnJlZSAocGFydCk7CitlcnJvcjoKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIFBlZFBhcnRpdGlvbioKK3BjOThfcGFydGl0aW9uX2R1cGxpY2F0ZSAoY29uc3QgUGVkUGFydGl0aW9uKiBwYXJ0KQoreworCVBlZFBhcnRpdGlvbioJCW5ld19wYXJ0OworCVBDOThQYXJ0aXRpb25EYXRhKgluZXdfcGM5OF9kYXRhOworCVBDOThQYXJ0aXRpb25EYXRhKglvbGRfcGM5OF9kYXRhOworCisJbmV3X3BhcnQgPSBwZWRfcGFydGl0aW9uX25ldyAocGFydC0+ZGlzaywgcGFydC0+dHlwZSwKKwkJCQkgICAgICBwYXJ0LT5mc190eXBlLCBwYXJ0LT5nZW9tLnN0YXJ0LAorCQkJCSAgICAgIHBhcnQtPmdlb20uZW5kKTsKKwlpZiAoIW5ld19wYXJ0KQorCQlyZXR1cm4gTlVMTDsKKwluZXdfcGFydC0+bnVtID0gcGFydC0+bnVtOworCisJb2xkX3BjOThfZGF0YSA9IChQQzk4UGFydGl0aW9uRGF0YSopIHBhcnQtPmRpc2tfc3BlY2lmaWM7CisJbmV3X3BjOThfZGF0YSA9IChQQzk4UGFydGl0aW9uRGF0YSopIG5ld19wYXJ0LT5kaXNrX3NwZWNpZmljOworCisJLyogdWdseSwgYnV0IEMgaXMgdWdseSA6cCAqLworCW1lbWNweSAobmV3X3BjOThfZGF0YSwgb2xkX3BjOThfZGF0YSwgc2l6ZW9mIChQQzk4UGFydGl0aW9uRGF0YSkpOworCXJldHVybiBuZXdfcGFydDsKK30KKworc3RhdGljIHZvaWQKK3BjOThfcGFydGl0aW9uX2Rlc3Ryb3kgKFBlZFBhcnRpdGlvbiogcGFydCkKK3sKKwlQRURfQVNTRVJUIChwYXJ0ICE9IE5VTEwsIHJldHVybik7CisKKwlpZiAocGVkX3BhcnRpdGlvbl9pc19hY3RpdmUgKHBhcnQpKQorCQlwZWRfZnJlZSAocGFydC0+ZGlza19zcGVjaWZpYyk7CisJcGVkX2ZyZWUgKHBhcnQpOworfQorCitzdGF0aWMgaW50CitwYzk4X3BhcnRpdGlvbl9zZXRfc3lzdGVtIChQZWRQYXJ0aXRpb24qIHBhcnQsIGNvbnN0IFBlZEZpbGVTeXN0ZW1UeXBlKiBmc190eXBlKQoreworCVBDOThQYXJ0aXRpb25EYXRhKiBwYzk4X2RhdGEgPSBwYXJ0LT5kaXNrX3NwZWNpZmljOworCQorCXBhcnQtPmZzX3R5cGUgPSBmc190eXBlOworCisJcGM5OF9kYXRhLT5zeXN0ZW0gPSAweDIwNjI7CisJaWYgKGZzX3R5cGUpIHsKKwkJaWYgKCFzdHJjbXAgKGZzX3R5cGUtPm5hbWUsICJmYXQxNiIpKSB7CisJCQlpZiAocGFydC0+Z2VvbS5sZW5ndGggKiA1MTIgPj0gMzIgKiAxMDI0ICogMTAyNCkKKwkJCQlwYzk4X2RhdGEtPnN5c3RlbSA9IDB4MjAyMTsKKwkJCWVsc2UKKwkJCQlwYzk4X2RhdGEtPnN5c3RlbSA9IDB4MjAxMTsKKwkJfSBlbHNlIGlmICghc3RyY21wIChmc190eXBlLT5uYW1lLCAiZmF0MzIiKSkgeworCQkJcGM5OF9kYXRhLT5zeXN0ZW0gPSAweDIwNjE7CisJCX0gZWxzZSBpZiAoIXN0cmNtcCAoZnNfdHlwZS0+bmFtZSwgIm50ZnMiKSkgeworCQkJcGM5OF9kYXRhLT5zeXN0ZW0gPSAweDIwMzE7CisJCX0gZWxzZSBpZiAoIXN0cm5jbXAgKGZzX3R5cGUtPm5hbWUsICJ1ZnMiLCAzKSkgeworCQkJcGM5OF9kYXRhLT5zeXN0ZW0gPSAweDIwNDQ7CisJCX0gZWxzZSB7IC8qIGV4dDIsIHJlaXNlciwgeGZzLCBldGMuICovCisJCQkvKiBleHQyIHBhcnRpdGlvbnMgbXVzdCBiZSBtYXJrZWQgYm9vdCAqLworCQkJcGM5OF9kYXRhLT5ib290ID0gMTsKKwkJCXBjOThfZGF0YS0+c3lzdGVtID0gMHhhMDYyOworCQl9CisJfQorCisJaWYgKHBjOThfZGF0YS0+Ym9vdCkKKwkJcGM5OF9kYXRhLT5zeXN0ZW0gfD0gMHg4MDAwOworCWlmICghcGM5OF9kYXRhLT5oaWRkZW4pCisJCXBjOThfZGF0YS0+c3lzdGVtIHw9IDB4MDA4MDsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludAorcGM5OF9wYXJ0aXRpb25fc2V0X2ZsYWcgKFBlZFBhcnRpdGlvbiogcGFydCwgUGVkUGFydGl0aW9uRmxhZyBmbGFnLCBpbnQgc3RhdGUpCit7CisJUEM5OFBhcnRpdGlvbkRhdGEqCQlwYzk4X2RhdGE7CisKKwlQRURfQVNTRVJUIChwYXJ0ICE9IE5VTEwsIHJldHVybiAwKTsKKwlQRURfQVNTRVJUIChwYXJ0LT5kaXNrX3NwZWNpZmljICE9IE5VTEwsIHJldHVybiAwKTsKKworCXBjOThfZGF0YSA9IHBhcnQtPmRpc2tfc3BlY2lmaWM7CisKKwlzd2l0Y2ggKGZsYWcpIHsKKwljYXNlIFBFRF9QQVJUSVRJT05fSElEREVOOgorCQlwYzk4X2RhdGEtPmhpZGRlbiA9IHN0YXRlOworCQlyZXR1cm4gcGVkX3BhcnRpdGlvbl9zZXRfc3lzdGVtIChwYXJ0LCBwYXJ0LT5mc190eXBlKTsKKworCWNhc2UgUEVEX1BBUlRJVElPTl9CT09UOgorCQlwYzk4X2RhdGEtPmJvb3QgPSBzdGF0ZTsKKwkJcmV0dXJuIHBlZF9wYXJ0aXRpb25fc2V0X3N5c3RlbSAocGFydCwgcGFydC0+ZnNfdHlwZSk7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK3BjOThfcGFydGl0aW9uX2dldF9mbGFnIChjb25zdCBQZWRQYXJ0aXRpb24qIHBhcnQsIFBlZFBhcnRpdGlvbkZsYWcgZmxhZykKK3sKKwlQQzk4UGFydGl0aW9uRGF0YSoJcGM5OF9kYXRhOworCisJUEVEX0FTU0VSVCAocGFydCAhPSBOVUxMLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAocGFydC0+ZGlza19zcGVjaWZpYyAhPSBOVUxMLCByZXR1cm4gMCk7CisKKwlwYzk4X2RhdGEgPSBwYXJ0LT5kaXNrX3NwZWNpZmljOworCXN3aXRjaCAoZmxhZykgeworCWNhc2UgUEVEX1BBUlRJVElPTl9ISURERU46CisJCXJldHVybiBwYzk4X2RhdGEtPmhpZGRlbjsKKworCWNhc2UgUEVEX1BBUlRJVElPTl9CT09UOgorCQlyZXR1cm4gcGM5OF9kYXRhLT5ib290OworCisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgaW50CitwYzk4X3BhcnRpdGlvbl9pc19mbGFnX2F2YWlsYWJsZSAoCisJY29uc3QgUGVkUGFydGl0aW9uKiBwYXJ0LCBQZWRQYXJ0aXRpb25GbGFnIGZsYWcpCit7CisJc3dpdGNoIChmbGFnKSB7CisJY2FzZSBQRURfUEFSVElUSU9OX0hJRERFTjoKKwljYXNlIFBFRF9QQVJUSVRJT05fQk9PVDoKKwkJcmV0dXJuIDE7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitwYzk4X3BhcnRpdGlvbl9zZXRfbmFtZSAoUGVkUGFydGl0aW9uKiBwYXJ0LCBjb25zdCBjaGFyKiBuYW1lKQoreworCVBDOThQYXJ0aXRpb25EYXRhKglwYzk4X2RhdGE7CisJaW50CQkJaTsKKworCVBFRF9BU1NFUlQgKHBhcnQgIT0gTlVMTCwgcmV0dXJuKTsKKwlQRURfQVNTRVJUIChwYXJ0LT5kaXNrX3NwZWNpZmljICE9IE5VTEwsIHJldHVybik7CisJcGM5OF9kYXRhID0gcGFydC0+ZGlza19zcGVjaWZpYzsKKworCXN0cm5jcHkgKHBjOThfZGF0YS0+bmFtZSwgbmFtZSwgMTYpOworCXBjOThfZGF0YS0+bmFtZSBbMTZdID0gMDsKKwlmb3IgKGkgPSBzdHJsZW4gKHBjOThfZGF0YS0+bmFtZSkgLSAxOyBwYzk4X2RhdGEtPm5hbWVbaV0gPT0gJyAnOyBpLS0pCisJCXBjOThfZGF0YS0+bmFtZSBbaV0gPSAwOworfQorCitzdGF0aWMgY29uc3QgY2hhcioKK3BjOThfcGFydGl0aW9uX2dldF9uYW1lIChjb25zdCBQZWRQYXJ0aXRpb24qIHBhcnQpCit7CisJUEM5OFBhcnRpdGlvbkRhdGEqCXBjOThfZGF0YTsKKworCVBFRF9BU1NFUlQgKHBhcnQgIT0gTlVMTCwgcmV0dXJuIE5VTEwpOworCVBFRF9BU1NFUlQgKHBhcnQtPmRpc2tfc3BlY2lmaWMgIT0gTlVMTCwgcmV0dXJuIE5VTEwpOworCXBjOThfZGF0YSA9IHBhcnQtPmRpc2tfc3BlY2lmaWM7CisKKwlyZXR1cm4gcGM5OF9kYXRhLT5uYW1lOworfQorCitzdGF0aWMgUGVkQ29uc3RyYWludCoKK19wcmltYXJ5X2NvbnN0cmFpbnQgKFBlZERpc2sqIGRpc2spCit7CisJUGVkRGV2aWNlKglkZXYgPSBkaXNrLT5kZXY7CisJUGVkQWxpZ25tZW50CXN0YXJ0X2FsaWduOworCVBlZEFsaWdubWVudAllbmRfYWxpZ247CisJUGVkR2VvbWV0cnkJbWF4X2dlb207CisJUGVkU2VjdG9yCWN5bGluZGVyX3NpemU7CisKKwljeWxpbmRlcl9zaXplID0gZGV2LT5od19nZW9tLnNlY3RvcnMgKiBkZXYtPmh3X2dlb20uaGVhZHM7CisKKwlpZiAoIXBlZF9hbGlnbm1lbnRfaW5pdCAoJnN0YXJ0X2FsaWduLCAwLCBjeWxpbmRlcl9zaXplKSkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKCFwZWRfYWxpZ25tZW50X2luaXQgKCZlbmRfYWxpZ24sIC0xLCBjeWxpbmRlcl9zaXplKSkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKCFwZWRfZ2VvbWV0cnlfaW5pdCAoJm1heF9nZW9tLCBkZXYsIGN5bGluZGVyX3NpemUsCisJCQkgICAgICAgCWRldi0+bGVuZ3RoIC0gY3lsaW5kZXJfc2l6ZSkpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIHBlZF9jb25zdHJhaW50X25ldyAoJnN0YXJ0X2FsaWduLCAmZW5kX2FsaWduLCAmbWF4X2dlb20sCisJCQkJICAgJm1heF9nZW9tLCAxLCBkZXYtPmxlbmd0aCk7Cit9CisKK3N0YXRpYyBpbnQKK3BjOThfcGFydGl0aW9uX2FsaWduIChQZWRQYXJ0aXRpb24qIHBhcnQsIGNvbnN0IFBlZENvbnN0cmFpbnQqIGNvbnN0cmFpbnQpCit7CisJUEVEX0FTU0VSVCAocGFydCAhPSBOVUxMLCByZXR1cm4gMCk7CisKKwlpZiAoX3BlZF9wYXJ0aXRpb25fYXR0ZW1wdF9hbGlnbiAocGFydCwgY29uc3RyYWludCwKKwkJCQkJICBfcHJpbWFyeV9jb25zdHJhaW50IChwYXJ0LT5kaXNrKSkpCisJICAgICAgIAlyZXR1cm4gMTsKKworI2lmbmRlZiBESVNDT1ZFUl9PTkxZCisJcGVkX2V4Y2VwdGlvbl90aHJvdyAoCisJCVBFRF9FWENFUFRJT05fRVJST1IsCisJCVBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQlfKCJVbmFibGUgdG8gc2F0aXNmeSBhbGwgY29uc3RyYWludHMgb24gdGhlIHBhcnRpdGlvbi4iKSk7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorbmV4dF9wcmltYXJ5IChQZWREaXNrKiBkaXNrKQoreworCWludAlpOworCWZvciAoaT0xOyBpPD1NQVhfUEFSVF9DT1VOVDsgaSsrKSB7CisJCWlmICghcGVkX2Rpc2tfZ2V0X3BhcnRpdGlvbiAoZGlzaywgaSkpCisJCQlyZXR1cm4gaTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3BjOThfcGFydGl0aW9uX2VudW1lcmF0ZSAoUGVkUGFydGl0aW9uKiBwYXJ0KQoreworCVBFRF9BU1NFUlQgKHBhcnQgIT0gTlVMTCwgcmV0dXJuIDApOworCVBFRF9BU1NFUlQgKHBhcnQtPmRpc2sgIT0gTlVMTCwgcmV0dXJuIDApOworCisJLyogZG9uJ3QgcmUtbnVtYmVyIGEgcGFydGl0aW9uICovCisJaWYgKHBhcnQtPm51bSAhPSAtMSkKKwkJcmV0dXJuIDE7CisKKwlQRURfQVNTRVJUIChwZWRfcGFydGl0aW9uX2lzX2FjdGl2ZSAocGFydCksIHJldHVybiAwKTsKKworCXBhcnQtPm51bSA9IG5leHRfcHJpbWFyeSAocGFydC0+ZGlzayk7CisJaWYgKCFwYXJ0LT5udW0pIHsKKwkJcGVkX2V4Y2VwdGlvbl90aHJvdyAoUEVEX0VYQ0VQVElPTl9FUlJPUiwKKwkJCVBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJXygiQ2FuJ3QgYWRkIGFub3RoZXIgcGFydGl0aW9uLiIpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3BjOThfYWxsb2NfbWV0YWRhdGEgKFBlZERpc2sqIGRpc2spCit7CisJUGVkUGFydGl0aW9uKgkJbmV3X3BhcnQ7CisJUGVkQ29uc3RyYWludCoJCWNvbnN0cmFpbnRfYW55ID0gTlVMTDsKKwlQZWRTZWN0b3IJCWN5bF9zaXplOworCisJUEVEX0FTU0VSVCAoZGlzayAhPSBOVUxMLCBnb3RvIGVycm9yKTsKKwlQRURfQVNTRVJUIChkaXNrLT5kZXYgIT0gTlVMTCwgZ290byBlcnJvcik7CisKKwljb25zdHJhaW50X2FueSA9IHBlZF9jb25zdHJhaW50X2FueSAoZGlzay0+ZGV2KTsKKworCWN5bF9zaXplID0gZGlzay0+ZGV2LT5od19nZW9tLnNlY3RvcnMgKiBkaXNrLT5kZXYtPmh3X2dlb20uaGVhZHM7CisJbmV3X3BhcnQgPSBwZWRfcGFydGl0aW9uX25ldyAoZGlzaywgUEVEX1BBUlRJVElPTl9NRVRBREFUQSwgTlVMTCwKKwkJCQkgICAgICAwLCBjeWxfc2l6ZSAtIDEpOworCWlmICghbmV3X3BhcnQpCisJCWdvdG8gZXJyb3I7CisKKwlpZiAoIXBlZF9kaXNrX2FkZF9wYXJ0aXRpb24gKGRpc2ssIG5ld19wYXJ0LCBjb25zdHJhaW50X2FueSkpIHsKKwkJcGVkX3BhcnRpdGlvbl9kZXN0cm95IChuZXdfcGFydCk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJcGVkX2NvbnN0cmFpbnRfZGVzdHJveSAoY29uc3RyYWludF9hbnkpOworCXJldHVybiAxOworCitlcnJvcjoKKwlwZWRfY29uc3RyYWludF9kZXN0cm95IChjb25zdHJhaW50X2FueSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3BjOThfZ2V0X21heF9wcmltYXJ5X3BhcnRpdGlvbl9jb3VudCAoY29uc3QgUGVkRGlzayogZGlzaykKK3sKKwlyZXR1cm4gTUFYX1BBUlRfQ09VTlQ7Cit9CisKK3N0YXRpYyBQZWREaXNrT3BzIHBjOThfZGlza19vcHMgPSB7CisJcHJvYmU6CQkJcGM5OF9wcm9iZSwKKyNpZm5kZWYgRElTQ09WRVJfT05MWQorCWNsb2JiZXI6CQlwYzk4X2Nsb2JiZXIsCisjZWxzZQorCWNsb2JiZXI6CQlOVUxMLAorI2VuZGlmCisJYWxsb2M6CQkJcGM5OF9hbGxvYywKKwlkdXBsaWNhdGU6CQlwYzk4X2R1cGxpY2F0ZSwKKwlmcmVlOgkJCXBjOThfZnJlZSwKKwlyZWFkOgkJCXBjOThfcmVhZCwKKyNpZm5kZWYgRElTQ09WRVJfT05MWQorCXdyaXRlOgkJCXBjOThfd3JpdGUsCisjZWxzZQorCXdyaXRlOgkJCU5VTEwsCisjZW5kaWYKKwkKKwlwYXJ0aXRpb25fbmV3OgkJcGM5OF9wYXJ0aXRpb25fbmV3LAorCXBhcnRpdGlvbl9kdXBsaWNhdGU6CXBjOThfcGFydGl0aW9uX2R1cGxpY2F0ZSwKKwlwYXJ0aXRpb25fZGVzdHJveToJcGM5OF9wYXJ0aXRpb25fZGVzdHJveSwKKwlwYXJ0aXRpb25fc2V0X3N5c3RlbToJcGM5OF9wYXJ0aXRpb25fc2V0X3N5c3RlbSwKKwlwYXJ0aXRpb25fc2V0X2ZsYWc6CXBjOThfcGFydGl0aW9uX3NldF9mbGFnLAorCXBhcnRpdGlvbl9nZXRfZmxhZzoJcGM5OF9wYXJ0aXRpb25fZ2V0X2ZsYWcsCisJcGFydGl0aW9uX2lzX2ZsYWdfYXZhaWxhYmxlOglwYzk4X3BhcnRpdGlvbl9pc19mbGFnX2F2YWlsYWJsZSwKKwlwYXJ0aXRpb25fc2V0X25hbWU6CXBjOThfcGFydGl0aW9uX3NldF9uYW1lLAorCXBhcnRpdGlvbl9nZXRfbmFtZToJcGM5OF9wYXJ0aXRpb25fZ2V0X25hbWUsCisJcGFydGl0aW9uX2FsaWduOglwYzk4X3BhcnRpdGlvbl9hbGlnbiwKKwlwYXJ0aXRpb25fZW51bWVyYXRlOglwYzk4X3BhcnRpdGlvbl9lbnVtZXJhdGUsCisKKwlhbGxvY19tZXRhZGF0YToJCXBjOThfYWxsb2NfbWV0YWRhdGEsCisJZ2V0X21heF9wcmltYXJ5X3BhcnRpdGlvbl9jb3VudDoKKwkJCQlwYzk4X2dldF9tYXhfcHJpbWFyeV9wYXJ0aXRpb25fY291bnQKK307CisKK3N0YXRpYyBQZWREaXNrVHlwZSBwYzk4X2Rpc2tfdHlwZSA9IHsKKwluZXh0OgkJTlVMTCwKKwluYW1lOgkJInBjOTgiLAorCW9wczoJCSZwYzk4X2Rpc2tfb3BzLAorCWZlYXR1cmVzOglQRURfRElTS19UWVBFX1BBUlRJVElPTl9OQU1FCit9OworCit2b2lkCitwZWRfZGlza19wYzk4X2luaXQgKCkKK3sKKwlQRURfQVNTRVJUIChzaXplb2YgKFBDOThSYXdUYWJsZSkgPT0gNTEyICogMiwgcmV0dXJuKTsKKwlwZWRfZGlza190eXBlX3JlZ2lzdGVyICgmcGM5OF9kaXNrX3R5cGUpOworfQorCit2b2lkCitwZWRfZGlza19wYzk4X2RvbmUgKCkKK3sKKwlwZWRfZGlza190eXBlX3VucmVnaXN0ZXIgKCZwYzk4X2Rpc2tfdHlwZSk7Cit9CmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2xhYmVscy9yZGIuYyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvbGFiZWxzL3JkYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ZWQxNTYKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2xhYmVscy9yZGIuYwpAQCAtMCwwICsxLDExNjggQEAKKy8qIC0qLSBNb2RlOiBjOyB0YWItd2lkdGg6IDg7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDggLSotCisKKyAgICBsaWJwYXJ0ZWQgLSBhIGxpYnJhcnkgZm9yIG1hbmlwdWxhdGluZyBkaXNrIHBhcnRpdGlvbnMKKyAgICBkaXNrX2FtaWdhLmMgLSBsaWJwYXJ0ZWQgbW9kdWxlIHRvIG1hbmlwdWxhdGUgYW1pZ2EgUkRCIHBhcnRpdGlvbiB0YWJsZXMuCisgICAgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDA0LCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQorCisgICAgQ29udHJpYnV0b3I6ICBTdmVuIEx1dGhlciA8bHV0aGVyQGRlYmlhbi5vcmc+CisqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpbmNsdWRlIDxwYXJ0ZWQvcGFydGVkLmg+CisjaW5jbHVkZSA8cGFydGVkL2RlYnVnLmg+CisjaW5jbHVkZSA8cGFydGVkL2VuZGlhbi5oPgorCisjaWYgRU5BQkxFX05MUworIyAgaW5jbHVkZSA8bGliaW50bC5oPgorIyAgZGVmaW5lIF8oU3RyaW5nKSBkZ2V0dGV4dCAoUEFDS0FHRSwgU3RyaW5nKQorI2Vsc2UKKyMgIGRlZmluZSBfKFN0cmluZykgKFN0cmluZykKKyNlbmRpZiAvKiBFTkFCTEVfTkxTICovCisKKy8qIFN0cmluZyBtYW5pcHVsYXRpb24gKi8KK3N0YXRpYyB2b2lkIF9hbWlnYV9zZXRfYnN0ciAoY29uc3QgY2hhciAqY3N0ciwgY2hhciAqYnN0ciwgaW50IG1heHNpemUpIHsKKwlpbnQgc2l6ZSA9IHN0cmxlbiAoY3N0cik7CisJaW50IGk7CisKKwlpZiAoc2l6ZSA+PSBtYXhzaXplKSByZXR1cm47CisJYnN0clswXSA9IHNpemU7CisJZm9yIChpID0gMDsgaTxzaXplOyBpKyspIGJzdHJbaSsxXSA9IGNzdHJbaV07Cit9CitzdGF0aWMgY29uc3QgY2hhciAqIF9hbWlnYV9nZXRfYnN0ciAoY2hhciAqIGJzdHIpIHsKKwljaGFyICogY3N0ciA9IGJzdHIgKyAxOworCWludCBzaXplID0gYnN0clswXTsKKwkKKwljc3RyW3NpemVdID0gJ1wwJzsKKwlyZXR1cm4gY3N0cjsKK30KKworI2RlZmluZQlJRE5BTUVfUklHSURESVNLCSh1aW50MzJfdCkweDUyNDQ1MzRCCS8qICdSRFNLJyAqLworI2RlZmluZSBJRE5BTUVfQkFEQkxPQ0sJCSh1aW50MzJfdCkweDQyNDE0NDQyCS8qICdCQURCJyAqLworI2RlZmluZQlJRE5BTUVfUEFSVElUSU9OCSh1aW50MzJfdCkweDUwNDE1MjU0CS8qICdQQVJUJyAqLworI2RlZmluZSBJRE5BTUVfRklMRVNZU0hFQURFUgkodWludDMyX3QpMHg0NjUzNDg0NAkvKiAnRlNIRCcgKi8KKyNkZWZpbmUgSUROQU1FX0xPQURTRUcJCSh1aW50MzJfdCkweDRDNTM0NTQ3CS8qICdMU0VHJyAqLworI2RlZmluZSBJRE5BTUVfQk9PVAkJKHVpbnQzMl90KTB4NDI0ZjRmNTQJLyogJ0JPT1QnICovCisjZGVmaW5lIElETkFNRV9GUkVFCQkodWludDMyX3QpMHhmZmZmZmZmZgkKKworc3RhdGljIGNvbnN0IGNoYXIgKgorX2FtaWdhX2Jsb2NrX2lkICh1aW50MzJfdCBpZCkgeworCXN3aXRjaCAoaWQpIHsKKwkJY2FzZSBJRE5BTUVfUklHSURESVNLIDoKKwkJCXJldHVybiAiUkRTSyI7CisJCWNhc2UgSUROQU1FX0JBREJMT0NLIDoKKwkJCXJldHVybiAiQkFEQiI7CisJCWNhc2UgSUROQU1FX1BBUlRJVElPTiA6CisJCQlyZXR1cm4gIlBBUlQiOworCQljYXNlIElETkFNRV9GSUxFU1lTSEVBREVSIDoKKwkJCXJldHVybiAiRlNIRCI7CisJCWNhc2UgSUROQU1FX0xPQURTRUcgOgorCQkJcmV0dXJuICJMU0VHIjsKKwkJY2FzZSBJRE5BTUVfQk9PVCA6CisJCQlyZXR1cm4gIkJPT1QiOworCQljYXNlIElETkFNRV9GUkVFIDoKKwkJCXJldHVybiAiPGZyZWU+IjsKKwkJZGVmYXVsdCA6CisJCQlyZXR1cm4gIjx1bmtub3duPiI7CisJfQorfQorCitzdHJ1Y3QgQW1pZ2FJZHMgeworCXVpbnQzMl90IElEOworCXN0cnVjdCBBbWlnYUlkcyAqbmV4dDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgQW1pZ2FJZHMgKgorX2FtaWdhX2FkZF9pZCAodWludDMyX3QgaWQsIHN0cnVjdCBBbWlnYUlkcyAqaWRzKSB7CisJc3RydWN0IEFtaWdhSWRzICpuZXdpZDsKKworCWlmICgobmV3aWQ9cGVkX21hbGxvYyhzaXplb2YgKHN0cnVjdCBBbWlnYUlkcykpKT09TlVMTCkKKwkJcmV0dXJuIDA7CisJbmV3aWQtPklEID0gaWQ7CisJbmV3aWQtPm5leHQgPSBpZHM7CisJcmV0dXJuIG5ld2lkOworfQorCitzdGF0aWMgdm9pZAorX2FtaWdhX2ZyZWVfaWRzIChzdHJ1Y3QgQW1pZ2FJZHMgKmlkcykgeworCXN0cnVjdCBBbWlnYUlkcyAqY3VycmVudCwgKm5leHQ7CisKKwlmb3IgKGN1cnJlbnQgPSBpZHM7IGN1cnJlbnQgIT0gTlVMTDsgY3VycmVudCA9IG5leHQpIHsKKwkJbmV4dCA9IGN1cnJlbnQtPm5leHQ7CisJCXBlZF9mcmVlIChjdXJyZW50KTsKKwl9Cit9CitzdGF0aWMgaW50CitfYW1pZ2FfaWRfaW5fbGlzdCAodWludDMyX3QgaWQsIHN0cnVjdCBBbWlnYUlkcyAqaWRzKSB7CisJc3RydWN0IEFtaWdhSWRzICpjdXJyZW50OworCisJZm9yIChjdXJyZW50ID0gaWRzOyBjdXJyZW50ICE9IE5VTEw7IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0KSB7CisJCWlmIChpZCA9PSBjdXJyZW50LT5JRCkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RydWN0IEFtaWdhQmxvY2sgeworCXVpbnQzMl90CWFtaWdhX0lEOwkJLyogSWRlbnRpZmllciAzMiBiaXQgd29yZCAqLworCXVpbnQzMl90CWFtaWdhX1N1bW1lZExvbmdzczsJLyogU2l6ZSBvZiB0aGUgc3RydWN0dXJlIGZvciBjaGVja3N1bXMgKi8KKwlpbnQzMl90CQlhbWlnYV9DaGtTdW07CQkvKiBDaGVja3N1bSBvZiB0aGUgc3RydWN0dXJlICovCit9OworI2RlZmluZSBBTUlHQShwb3MpICgoc3RydWN0IEFtaWdhQmxvY2sgKikocG9zKSkgCisKK3N0YXRpYyBpbnQKK19hbWlnYV9jaGVja3N1bSAoc3RydWN0IEFtaWdhQmxvY2sgKmJsaykgeworCXVpbnQzMl90ICpyZGIgPSAodWludDMyX3QgKikgYmxrOworCXVpbnQzMl90IHN1bTsKKwlpbnQgaSwgZW5kOworCisJc3VtID0gUEVEX0JFMzJfVE9fQ1BVIChyZGJbMF0pOworCWVuZCA9IFBFRF9CRTMyX1RPX0NQVSAocmRiWzFdKTsKKworCWlmIChlbmQgPiBQRURfU0VDVE9SX1NJWkVfREVGQVVMVCkgZW5kID0gUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQ7CisKKwlmb3IgKGkgPSAxOyBpIDwgZW5kOyBpKyspIHN1bSArPSBQRURfQkUzMl9UT19DUFUgKHJkYltpXSk7CisKKwlyZXR1cm4gc3VtOworfQorCitzdGF0aWMgdm9pZAorX2FtaWdhX2NhbGN1bGF0ZV9jaGVja3N1bSAoc3RydWN0IEFtaWdhQmxvY2sgKmJsaykgeworCWJsay0+YW1pZ2FfQ2hrU3VtID0gUEVEX0NQVV9UT19CRTMyKAorCQlQRURfQkUzMl9UT19DUFUoYmxrLT5hbWlnYV9DaGtTdW0pIC0KKwkJX2FtaWdhX2NoZWNrc3VtKChzdHJ1Y3QgQW1pZ2FCbG9jayAqKSBibGspKTsKKwlyZXR1cm47CQorfQorCitzdGF0aWMgc3RydWN0IEFtaWdhQmxvY2sgKgorX2FtaWdhX3JlYWRfYmxvY2sgKGNvbnN0IFBlZERldmljZSAqZGV2LCBzdHJ1Y3QgQW1pZ2FCbG9jayAqYmxrLAorICAgICAgICAgICAgICAgICAgIFBlZFNlY3RvciBibG9jaywgc3RydWN0IEFtaWdhSWRzICppZHMpCit7CisJaWYgKCFwZWRfZGV2aWNlX3JlYWQgKGRldiwgYmxrLCBibG9jaywgMSkpCisJCXJldHVybiBOVUxMOworCWlmIChpZHMgJiYgIV9hbWlnYV9pZF9pbl9saXN0KFBFRF9CRTMyX1RPX0NQVShibGstPmFtaWdhX0lEKSwgaWRzKSkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKF9hbWlnYV9jaGVja3N1bSAoYmxrKSAhPSAwKSB7CisJCXN3aXRjaCAocGVkX2V4Y2VwdGlvbl90aHJvdyhQRURfRVhDRVBUSU9OX0VSUk9SLAorCQkJUEVEX0VYQ0VQVElPTl9GSVggfCBQRURfRVhDRVBUSU9OX0lHTk9SRSB8IFBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJXygiJXMgOiBCYWQgY2hlY2tzdW0gb24gYmxvY2sgJWxsdSBvZiB0eXBlICVzLiIpLAorCQkJX19mdW5jX18sIGJsb2NrLCBfYW1pZ2FfYmxvY2tfaWQoUEVEX0JFMzJfVE9fQ1BVKGJsay0+YW1pZ2FfSUQpKSkpCisJCXsKKwkJCWNhc2UgUEVEX0VYQ0VQVElPTl9DQU5DRUwgOgorCQkJCXJldHVybiBOVUxMOworCQkJY2FzZSBQRURfRVhDRVBUSU9OX0ZJWCA6CisJCQkJX2FtaWdhX2NhbGN1bGF0ZV9jaGVja3N1bShBTUlHQShibGspKTsKKwkJCQlpZiAoIXBlZF9kZXZpY2Vfd3JpdGUgKChQZWREZXZpY2UqKWRldiwgYmxrLCBibG9jaywgMSkpCisJCQkJCXJldHVybiBOVUxMOworCQkJY2FzZSBQRURfRVhDRVBUSU9OX0lHTk9SRSA6CisJCQljYXNlIFBFRF9FWENFUFRJT05fVU5IQU5ETEVEIDoKKwkJCWRlZmF1bHQgOiAKKwkJCQlyZXR1cm4gYmxrOworCQl9CisJfQorCXJldHVybiBibGs7Cit9CisKK3N0cnVjdCBSaWdpZERpc2tCbG9jayB7CisgICAgdWludDMyX3QJcmRiX0lEOwkJCS8qIElkZW50aWZpZXIgMzIgYml0IHdvcmQgOiAnUkRTSycgKi8KKyAgICB1aW50MzJfdAlyZGJfU3VtbWVkTG9uZ3M7CS8qIFNpemUgb2YgdGhlIHN0cnVjdHVyZSBmb3IgY2hlY2tzdW1zICovCisgICAgaW50MzJfdAlyZGJfQ2hrU3VtOwkJLyogQ2hlY2tzdW0gb2YgdGhlIHN0cnVjdHVyZSAqLworICAgIHVpbnQzMl90CXJkYl9Ib3N0SUQ7CQkvKiBTQ1NJIFRhcmdldCBJRCBvZiBob3N0LCBub3QgcmVhbGx5IHVzZWQgKi8KKyAgICB1aW50MzJfdAlyZGJfQmxvY2tCeXRlczsJCS8qIFNpemUgb2YgZGlzayBibG9ja3MgKi8KKyAgICB1aW50MzJfdAlyZGJfRmxhZ3M7CQkvKiBSREIgRmxhZ3MgKi8KKyAgICAvKiBibG9jayBsaXN0IGhlYWRzICovCisgICAgdWludDMyX3QJcmRiX0JhZEJsb2NrTGlzdDsJLyogQmFkIGJsb2NrIGxpc3QgKi8KKyAgICB1aW50MzJfdAlyZGJfUGFydGl0aW9uTGlzdDsJLyogUGFydGl0aW9uIGxpc3QgKi8KKyAgICB1aW50MzJfdAlyZGJfRmlsZVN5c0hlYWRlckxpc3Q7CS8qIEZpbGUgc3lzdGVtIGhlYWRlciBsaXN0ICovCisgICAgdWludDMyX3QJcmRiX0RyaXZlSW5pdDsJCS8qIERyaXZlIHNwZWNpZmljIGluaXQgY29kZSAqLworICAgIHVpbnQzMl90CXJkYl9Cb290QmxvY2tMaXN0OwkvKiBBbWlnYSBPUyA0IEJvb3QgQmxvY2tzICovCisgICAgdWludDMyX3QJcmRiX1Jlc2VydmVkMVs1XTsJLyogVW51c2VkIHdvcmQsIG5lZWQgdG8gYmUgc2V0IHRvICRmZmZmZmZmZiAqLworICAgIC8qIHBoeXNpY2FsIGRyaXZlIGNoYXJhY3RlcmlzdGljcyAqLworICAgIHVpbnQzMl90CXJkYl9DeWxpbmRlcnM7CQkvKiBOdW1iZXIgb2YgdGhlIGN5bGluZGVycyBvZiB0aGUgZHJpdmUgKi8KKyAgICB1aW50MzJfdAlyZGJfU2VjdG9yczsJCS8qIE51bWJlciBvZiBzZWN0b3JzIG9mIHRoZSBkcml2ZSAqLworICAgIHVpbnQzMl90CXJkYl9IZWFkczsJCS8qIE51bWJlciBvZiBoZWFkcyBvZiB0aGUgZHJpdmUgKi8KKyAgICB1aW50MzJfdAlyZGJfSW50ZXJsZWF2ZTsJCS8qIEludGVybGVhdmUgKi8KKyAgICB1aW50MzJfdAlyZGJfUGFyazsJCS8qIEhlYWQgcGFya2luZyBjeWxpbmRlciAqLworICAgIHVpbnQzMl90CXJkYl9SZXNlcnZlZDJbM107CS8qIFVudXNlZCB3b3JkLCBuZWVkIHRvIGJlIHNldCB0byAkZmZmZmZmZmYgKi8KKyAgICB1aW50MzJfdAlyZGJfV3JpdGVQcmVDb21wOwkvKiBTdGFydGluZyBjeWxpbmRlciBvZiB3cml0ZSBwcmVjb21wZW5zYXRpb24gKi8KKyAgICB1aW50MzJfdAlyZGJfUmVkdWNlZFdyaXRlOwkvKiBTdGFydGluZyBjeWxpbmRlciBvZiByZWR1Y2VkIHdyaXRlIGN1cnJlbnQgKi8KKyAgICB1aW50MzJfdAlyZGJfU3RlcFJhdGU7CQkvKiBTdGVwIHJhdGUgb2YgdGhlIGRyaXZlICovCisgICAgdWludDMyX3QJcmRiX1Jlc2VydmVkM1s1XTsJLyogVW51c2VkIHdvcmQsIG5lZWQgdG8gYmUgc2V0IHRvICRmZmZmZmZmZiAqLworICAgIC8qIGxvZ2ljYWwgZHJpdmUgY2hhcmFjdGVyaXN0aWNzICovCisgICAgdWludDMyX3QJcmRiX1JEQkJsb2Nrc0xvOwkvKiBsb3cgYmxvY2sgb2YgcmFuZ2UgcmVzZXJ2ZWQgZm9yIGhhcmRibG9ja3MgKi8KKyAgICB1aW50MzJfdAlyZGJfUkRCQmxvY2tzSGk7CS8qIGhpZ2ggYmxvY2sgb2YgcmFuZ2UgZm9yIHRoZXNlIGhhcmRibG9ja3MgKi8KKyAgICB1aW50MzJfdAlyZGJfTG9DeWxpbmRlcjsJCS8qIGxvdyBjeWxpbmRlciBvZiBwYXJ0aXRpb25hYmxlIGRpc2sgYXJlYSAqLworICAgIHVpbnQzMl90CXJkYl9IaUN5bGluZGVyOwkJLyogaGlnaCBjeWxpbmRlciBvZiBwYXJ0aXRpb25hYmxlIGRhdGEgYXJlYSAqLworICAgIHVpbnQzMl90CXJkYl9DeWxCbG9ja3M7CQkvKiBudW1iZXIgb2YgYmxvY2tzIGF2YWlsYWJsZSBwZXIgY3lsaW5kZXIgKi8KKyAgICB1aW50MzJfdAlyZGJfQXV0b1BhcmtTZWNvbmRzOwkvKiB6ZXJvIGZvciBubyBhdXRvIHBhcmsgKi8KKyAgICB1aW50MzJfdAlyZGJfSGlnaFJEU0tCbG9jazsJLyogaGlnaGVzdCBibG9jayB1c2VkIGJ5IFJEU0sgKi8KKwkJCQkJLyogKG5vdCBpbmNsdWRpbmcgcmVwbGFjZW1lbnQgYmFkIGJsb2NrcykgKi8KKyAgICB1aW50MzJfdAlyZGJfUmVzZXJ2ZWQ0OworICAgIC8qIGRyaXZlIGlkZW50aWZpY2F0aW9uICovCisgICAgY2hhcglyZGJfRGlza1ZlbmRvcls4XTsKKyAgICBjaGFyCXJkYl9EaXNrUHJvZHVjdFsxNl07CisgICAgY2hhcglyZGJfRGlza1JldmlzaW9uWzRdOworICAgIGNoYXIJcmRiX0NvbnRyb2xsZXJWZW5kb3JbOF07CisgICAgY2hhcglyZGJfQ29udHJvbGxlclByb2R1Y3RbMTZdOworICAgIGNoYXIJcmRiX0NvbnRyb2xsZXJSZXZpc2lvbls0XTsKKyAgICB1aW50MzJfdAlyZGJfUmVzZXJ2ZWQ1WzEwXTsKK307CisKKyNkZWZpbmUgUkRTSyhwb3MpICgoc3RydWN0IFJpZ2lkRGlza0Jsb2NrICopKHBvcykpIAorCisjZGVmaW5lIEFNSUdBX1JEQl9OT1RfRk9VTkQgKCh1aW50MzJfdCkweGZmZmZmZmZmKQorI2RlZmluZQlSREJfTE9DQVRJT05fTElNSVQJMTYKKyNkZWZpbmUgQU1JR0FfTUFYX1BBUlRJVElPTlMgMTI4CisjZGVmaW5lIE1BWF9SREJfQkxPQ0sgKFJEQl9MT0NBVElPTl9MSU1JVCArIDIgKiBBTUlHQV9NQVhfUEFSVElUSU9OUyArIDIpCisKK3N0YXRpYyB1aW50MzJfdAorX2FtaWdhX2ZpbmRfcmRiIChjb25zdCBQZWREZXZpY2UgKmRldiwgc3RydWN0IFJpZ2lkRGlza0Jsb2NrICpyZGIpIHsKKwlpbnQgaTsKKwlzdHJ1Y3QgQW1pZ2FJZHMgKmlkczsKKworCWlkcyA9IF9hbWlnYV9hZGRfaWQgKElETkFNRV9SSUdJRERJU0ssIE5VTEwpOworCisJZm9yIChpID0gMDsgaTxSREJfTE9DQVRJT05fTElNSVQ7IGkrKykgeworCQlpZiAoIV9hbWlnYV9yZWFkX2Jsb2NrIChkZXYsIEFNSUdBKHJkYiksIGksIGlkcykpIHsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChQRURfQkUzMl9UT19DUFUgKHJkYi0+cmRiX0lEKSA9PSBJRE5BTUVfUklHSURESVNLKSB7CisJCQlfYW1pZ2FfZnJlZV9pZHMgKGlkcyk7CisJCQlyZXR1cm4gaTsKKwkJfQorCX0KKwlfYW1pZ2FfZnJlZV9pZHMgKGlkcyk7CisJcmV0dXJuIEFNSUdBX1JEQl9OT1RfRk9VTkQ7Cit9CisKK3N0cnVjdCBQYXJ0aXRpb25CbG9jayB7CisgICAgdWludDMyX3QJcGJfSUQ7CQkJLyogSWRlbnRpZmllciAzMiBiaXQgd29yZCA6ICdQQVJUJyAqLworICAgIHVpbnQzMl90CXBiX1N1bW1lZExvbmdzOwkJLyogU2l6ZSBvZiB0aGUgc3RydWN0dXJlIGZvciBjaGVja3N1bXMgKi8KKyAgICBpbnQzMl90CXBiX0Noa1N1bTsJCS8qIENoZWNrc3VtIG9mIHRoZSBzdHJ1Y3R1cmUgKi8KKyAgICB1aW50MzJfdAlwYl9Ib3N0SUQ7CQkvKiBTQ1NJIFRhcmdldCBJRCBvZiBob3N0LCBub3QgcmVhbGx5IHVzZWQgKi8KKyAgICB1aW50MzJfdAlwYl9OZXh0OwkJLyogQmxvY2sgbnVtYmVyIG9mIHRoZSBuZXh0IFBhcnRpdGlvbkJsb2NrICovCisgICAgdWludDMyX3QJcGJfRmxhZ3M7CQkvKiBQYXJ0IEZsYWdzIChOT01PVU5UIGFuZCBCT09UQUJMRSkgKi8KKyAgICB1aW50MzJfdAlwYl9SZXNlcnZlZDFbMl07CisgICAgdWludDMyX3QJcGJfRGV2RmxhZ3M7CQkvKiBQcmVmZXJyZWQgZmxhZ3MgZm9yIE9wZW5EZXZpY2UgKi8KKyAgICBjaGFyCXBiX0RyaXZlTmFtZVszMl07CS8qIFByZWZlcnJlZCBET1MgZGV2aWNlIG5hbWU6IEJTVFIgZm9ybSAqLworICAgIHVpbnQzMl90CXBiX1Jlc2VydmVkMlsxNV07CisgICAgdWludDMyX3QJZGVfVGFibGVTaXplOwkJLyogU2l6ZSBvZiBFbnZpcm9ubWVudCB2ZWN0b3IgKi8KKwkvKiBTaXplIG9mIHRoZSBibG9ja3MgaW4gMzIgYml0IHdvcmRzLCB1c3VhbGx5IDEyOCAqLworICAgIHVpbnQzMl90CWRlX1NpemVCbG9jazsKKyAgICB1aW50MzJfdAlkZV9TZWNPcmc7CSAgICAgCS8qIE5vdCB1c2VkOyBtdXN0IGJlIDAgKi8KKyAgICB1aW50MzJfdAlkZV9TdXJmYWNlczsJCS8qIE51bWJlciBvZiBoZWFkcyAoc3VyZmFjZXMpICovCisJLyogRGlzayBzZWN0b3JzIHBlciBibG9jaywgdXNlZCB3aXRoIFNpemVCbG9jaywgdXN1YWxseSAxICovCisgICAgdWludDMyX3QJZGVfU2VjdG9yUGVyQmxvY2s7CisgICAgdWludDMyX3QJZGVfQmxvY2tzUGVyVHJhY2s7CS8qIEJsb2NrcyBwZXIgdHJhY2suIGRyaXZlIHNwZWNpZmljICovCisgICAgdWludDMyX3QJZGVfUmVzZXJ2ZWQ7CQkvKiBET1MgcmVzZXJ2ZWQgYmxvY2tzIGF0IHN0YXJ0IG9mIHBhcnRpdGlvbi4gKi8KKyAgICB1aW50MzJfdAlkZV9QcmVBbGxvYzsJCS8qIERPUyByZXNlcnZlZCBibG9ja3MgYXQgZW5kIG9mIHBhcnRpdGlvbiAqLworICAgIHVpbnQzMl90CWRlX0ludGVybGVhdmU7CQkvKiBOb3QgdXNlZCwgdXN1YWxseSAwICovCisgICAgdWludDMyX3QJZGVfTG93Q3lsOwkJLyogRmlyc3QgY3lsaW5kZXIgb2YgdGhlIHBhcnRpdGlvbiAqLworICAgIHVpbnQzMl90CWRlX0hpZ2hDeWw7CQkvKiBMYXN0IGN5bGluZGVyIG9mIHRoZSBwYXJ0aXRpb24gKi8KKyAgICB1aW50MzJfdAlkZV9OdW1CdWZmZXJzOwkJLyogSW5pdGlhbCAjIERPUyBvZiBidWZmZXJzLiAgKi8KKyAgICB1aW50MzJfdAlkZV9CdWZNZW1UeXBlOwkJLyogVHlwZSBvZiBtZW0gdG8gYWxsb2NhdGUgZm9yIGJ1ZmZlcnMgKi8KKyAgICB1aW50MzJfdAlkZV9NYXhUcmFuc2ZlcjsJCS8qIE1heCBudW1iZXIgb2YgYnl0ZXMgdG8gdHJhbnNmZXIgYXQgYSB0aW1lICovCisgICAgdWludDMyX3QJZGVfTWFzazsJCS8qIEFkZHJlc3MgTWFzayB0byBibG9jayBvdXQgY2VydGFpbiBtZW1vcnkgKi8KKyAgICBpbnQzMl90CWRlX0Jvb3RQcmk7CQkvKiBCb290IHByaW9yaXR5IGZvciBhdXRvYm9vdCAqLworICAgIHVpbnQzMl90CWRlX0Rvc1R5cGU7CQkvKiBEb3N0eXBlIG9mIHRoZSBmaWxlIHN5c3RlbSAqLworICAgIHVpbnQzMl90CWRlX0JhdWQ7CQkvKiBCYXVkIHJhdGUgZm9yIHNlcmlhbCBoYW5kbGVyICovCisgICAgdWludDMyX3QJZGVfQ29udHJvbDsJCS8qIENvbnRyb2wgd29yZCBmb3IgaGFuZGxlci9maWxlc3lzdGVtICovCisgICAgdWludDMyX3QJZGVfQm9vdEJsb2NrczsJCS8qIE51bWJlciBvZiBibG9ja3MgY29udGFpbmluZyBib290IGNvZGUgKi8KKyAgICB1aW50MzJfdAlwYl9FUmVzZXJ2ZWRbMTJdOworfTsKKworI2RlZmluZSBQQVJUKHBvcykgKChzdHJ1Y3QgUGFydGl0aW9uQmxvY2sgKikocG9zKSkKKworI2RlZmluZQlQQkZCX0JPT1RBQkxFCTAJLyogdGhpcyBwYXJ0aXRpb24gaXMgaW50ZW5kZWQgdG8gYmUgYm9vdGFibGUgKi8KKyNkZWZpbmUJUEJGRl9CT09UQUJMRQkxTAkvKiAgIChleHBlY3RlZCBkaXJlY3RvcmllcyBhbmQgZmlsZXMgZXhpc3QpICovCisjZGVmaW5lCVBCRkJfTk9NT1VOVAkxCS8qIGRvIG5vdCBtb3VudCB0aGlzIHBhcnRpdGlvbiAoZS5nLiBtYW51YWxseSAqLworI2RlZmluZQlQQkZGX05PTU9VTlQJMkwJLyogICBtb3VudGVkLCBidXQgc3BhY2UgcmVzZXJ2ZWQgaGVyZSkgKi8KKyNkZWZpbmUJUEJGQl9SQUlECTIJLyogdGhpcyBwYXJ0aXRpb24gaXMgaW50ZW5kZWQgdG8gYmUgcGFydCBvZiAqLworI2RlZmluZQlQQkZGX1JBSUQJNEwJLyogICBhIFJBSUQgYXJyYXkgKi8KKyNkZWZpbmUJUEJGQl9MVk0JMwkvKiB0aGlzIHBhcnRpdGlvbiBpcyBpbnRlbmRlZCB0byBiZSBwYXJ0IG9mICovCisjZGVmaW5lCVBCRkZfTFZNCThMCS8qICAgYSBMVk0gdm9sdW1lIGdyb3VwICovCisKKworc3RydWN0IExpbmtlZEJsb2NrIHsKKyAgICB1aW50MzJfdAlsa19JRDsJCQkvKiBJZGVudGlmaWVyIDMyIGJpdCB3b3JkICovCisgICAgdWludDMyX3QJbGtfU3VtbWVkTG9uZ3M7CQkvKiBTaXplIG9mIHRoZSBzdHJ1Y3R1cmUgZm9yIGNoZWNrc3VtcyAqLworICAgIGludDMyX3QJbGtfQ2hrU3VtOwkJLyogQ2hlY2tzdW0gb2YgdGhlIHN0cnVjdHVyZSAqLworICAgIHVpbnQzMl90CXBiX0hvc3RJRDsJCS8qIFNDU0kgVGFyZ2V0IElEIG9mIGhvc3QsIG5vdCByZWFsbHkgdXNlZCAqLworICAgIHVpbnQzMl90CWxrX05leHQ7CQkvKiBCbG9jayBudW1iZXIgb2YgdGhlIG5leHQgUGFydGl0aW9uQmxvY2sgKi8KK307CitzdHJ1Y3QgTGlua2VkMkJsb2NrIHsKKyAgICB1aW50MzJfdAlsazJfSUQ7CQkJLyogSWRlbnRpZmllciAzMiBiaXQgd29yZCAqLworICAgIHVpbnQzMl90CWxrMl9TdW1tZWRMb25nczsJCS8qIFNpemUgb2YgdGhlIHN0cnVjdHVyZSBmb3IgY2hlY2tzdW1zICovCisgICAgaW50MzJfdAlsazJfQ2hrU3VtOwkJLyogQ2hlY2tzdW0gb2YgdGhlIHN0cnVjdHVyZSAqLworICAgIHVpbnQzMl90CWxrMl9Ib3N0SUQ7CQkvKiBTQ1NJIFRhcmdldCBJRCBvZiBob3N0LCBub3QgcmVhbGx5IHVzZWQgKi8KKyAgICB1aW50MzJfdAlsazJfTmV4dDsJCS8qIEJsb2NrIG51bWJlciBvZiB0aGUgbmV4dCBQYXJ0aXRpb25CbG9jayAqLworICAgIHVpbnQzMl90CWxrMl9SZXZlcnZlZFsxM107CisgICAgdWludDMyX3QJbGsyX0xpbmtlZDsJCS8qIFNlY29uZGFyeSBsaW5rZWQgbGlzdCAqLworfTsKKyNkZWZpbmUgTElOS19FTkQJKHVpbnQzMl90KTB4ZmZmZmZmZmYKKyNkZWZpbmUgTE5LKHBvcykJKChzdHJ1Y3QgTGlua2VkQmxvY2sgKikocG9zKSkKKyNkZWZpbmUgTE5LMihwb3MpCSgoc3RydWN0IExpbmtlZDJCbG9jayAqKShwb3MpKQorCisKK3N0YXRpYyBQZWREaXNrVHlwZSBhbWlnYV9kaXNrX3R5cGU7CisKK3N0YXRpYyBpbnQKK2FtaWdhX3Byb2JlIChjb25zdCBQZWREZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgUmlnaWREaXNrQmxvY2sgKnJkYjsKKwl1aW50MzJfdCBmb3VuZDsKKwlQRURfQVNTRVJUKGRldiAhPSBOVUxMLCByZXR1cm4gMCk7CisKKwlpZiAoKHJkYj1SRFNLKHBlZF9tYWxsb2MoZGV2LT5zZWN0b3Jfc2l6ZSkpKT09TlVMTCkKKwkJcmV0dXJuIDA7CisJZm91bmQgPSBfYW1pZ2FfZmluZF9yZGIgKGRldiwgcmRiKTsKKwlwZWRfZnJlZSAocmRiKTsKKworCXJldHVybiAoZm91bmQgPT0gQU1JR0FfUkRCX05PVF9GT1VORCA/IDAgOiAxKTsKK30KKwkJCitzdGF0aWMgUGVkRGlzayoKK2FtaWdhX2FsbG9jIChjb25zdCBQZWREZXZpY2UqIGRldikKK3sKKwlQZWREaXNrICpkaXNrOworCXN0cnVjdCBSaWdpZERpc2tCbG9jayAqcmRiOworCVBlZFNlY3RvciBjeWxfc2l6ZTsKKwlpbnQgaGlnaGVzdF9jeWxpbmRlciwgaGlnaGVzdF9ibG9jazsKKworCVBFRF9BU1NFUlQoZGV2ICE9IE5VTEwsIHJldHVybiBOVUxMKTsKKwljeWxfc2l6ZSA9IGRldi0+aHdfZ2VvbS5zZWN0b3JzICogZGV2LT5od19nZW9tLmhlYWRzOworCisJaWYgKCEoZGlzayA9IF9wZWRfZGlza19hbGxvYyAoZGV2LCAmYW1pZ2FfZGlza190eXBlKSkpCisJCXJldHVybiBOVUxMOworCisJaWYgKCEoZGlzay0+ZGlza19zcGVjaWZpYyA9IHBlZF9tYWxsb2MgKFBFRF9TRUNUT1JfU0laRV9ERUZBVUxUKSkpIHsKKwkJcGVkX2ZyZWUgKGRpc2spOworCQlyZXR1cm4gTlVMTDsKKwl9CisJcmRiID0gZGlzay0+ZGlza19zcGVjaWZpYzsKKworCW1lbXNldChyZGIsIDAsIHNpemVvZihzdHJ1Y3QgUmlnaWREaXNrQmxvY2spKTsKKworCXJkYi0+cmRiX0lEID0gUEVEX0NQVV9UT19CRTMyIChJRE5BTUVfUklHSURESVNLKTsKKwlyZGItPnJkYl9TdW1tZWRMb25ncyA9IFBFRF9DUFVfVE9fQkUzMiAoNjQpOworCXJkYi0+cmRiX0hvc3RJRCA9IFBFRF9DUFVfVE9fQkUzMiAoMCk7CisJcmRiLT5yZGJfQmxvY2tCeXRlcyA9IFBFRF9DUFVfVE9fQkUzMiAoUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQpOworCXJkYi0+cmRiX0ZsYWdzID0gUEVEX0NQVV9UT19CRTMyICgwKTsKKworCS8qIEJsb2NrIGxpc3RzICovCisJcmRiLT5yZGJfQmFkQmxvY2tMaXN0ID0gUEVEX0NQVV9UT19CRTMyIChMSU5LX0VORCk7CisJcmRiLT5yZGJfUGFydGl0aW9uTGlzdCA9IFBFRF9DUFVfVE9fQkUzMiAoTElOS19FTkQpOworCXJkYi0+cmRiX0ZpbGVTeXNIZWFkZXJMaXN0ID0gUEVEX0NQVV9UT19CRTMyIChMSU5LX0VORCk7CisJcmRiLT5yZGJfRHJpdmVJbml0ID0gUEVEX0NQVV9UT19CRTMyIChMSU5LX0VORCk7CisJcmRiLT5yZGJfQm9vdEJsb2NrTGlzdCA9IFBFRF9DUFVfVE9fQkUzMiAoTElOS19FTkQpOworCQorCS8qIFBoeXNpY2FsIGRyaXZlIGNoYXJhY3RlcmlzdGljcyAqLworCXJkYi0+cmRiX0N5bGluZGVycyA9IFBFRF9DUFVfVE9fQkUzMiAoZGV2LT5od19nZW9tLmN5bGluZGVycyk7CisJcmRiLT5yZGJfU2VjdG9ycyA9IFBFRF9DUFVfVE9fQkUzMiAoZGV2LT5od19nZW9tLnNlY3RvcnMpOworCXJkYi0+cmRiX0hlYWRzID0gUEVEX0NQVV9UT19CRTMyIChkZXYtPmh3X2dlb20uaGVhZHMpOworCXJkYi0+cmRiX0ludGVybGVhdmUgPSBQRURfQ1BVX1RPX0JFMzIgKDApOworCXJkYi0+cmRiX1BhcmsgPSBQRURfQ1BVX1RPX0JFMzIgKGRldi0+aHdfZ2VvbS5jeWxpbmRlcnMpOworCXJkYi0+cmRiX1dyaXRlUHJlQ29tcCA9IFBFRF9DUFVfVE9fQkUzMiAoZGV2LT5od19nZW9tLmN5bGluZGVycyk7CisJcmRiLT5yZGJfUmVkdWNlZFdyaXRlID0gUEVEX0NQVV9UT19CRTMyIChkZXYtPmh3X2dlb20uY3lsaW5kZXJzKTsKKwlyZGItPnJkYl9TdGVwUmF0ZSA9IFBFRF9DUFVfVE9fQkUzMiAoMCk7CisKKwloaWdoZXN0X2N5bGluZGVyID0gMSArIE1BWF9SREJfQkxPQ0sgLyBjeWxfc2l6ZTsKKwloaWdoZXN0X2Jsb2NrID0gaGlnaGVzdF9jeWxpbmRlciAqIGN5bF9zaXplIC0gMTsKKworCS8qIExvZ2ljYWwgZHJpdmVyIGNoYXJhY3RlcmlzdGljcyAqLworCXJkYi0+cmRiX1JEQkJsb2Nrc0xvID0gUEVEX0NQVV9UT19CRTMyICgwKTsKKwlyZGItPnJkYl9SREJCbG9ja3NIaSA9IFBFRF9DUFVfVE9fQkUzMiAoaGlnaGVzdF9ibG9jayk7CisJcmRiLT5yZGJfTG9DeWxpbmRlciA9IFBFRF9DUFVfVE9fQkUzMiAoaGlnaGVzdF9jeWxpbmRlcik7CisJcmRiLT5yZGJfSGlDeWxpbmRlciA9IFBFRF9DUFVfVE9fQkUzMiAoZGV2LT5od19nZW9tLmN5bGluZGVycyAtMSk7CisJcmRiLT5yZGJfQ3lsQmxvY2tzID0gUEVEX0NQVV9UT19CRTMyIChjeWxfc2l6ZSk7CisJcmRiLT5yZGJfQXV0b1BhcmtTZWNvbmRzID0gUEVEX0NQVV9UT19CRTMyICgwKTsKKwkvKiByZGJfSGlnaFJEU0tCbG9jayB3aWxsIG9ubHkgYmUgc2V0IHdoZW4gd3JpdGluZyAqLworCXJkYi0+cmRiX0hpZ2hSRFNLQmxvY2sgPSBQRURfQ1BVX1RPX0JFMzIgKDApOworCisJLyogRHJpdmVyIGlkZW50aWZpY2F0aW9uICovCisJX2FtaWdhX3NldF9ic3RyKCIiLCByZGItPnJkYl9EaXNrVmVuZG9yLCA4KTsKKwlfYW1pZ2Ffc2V0X2JzdHIoZGV2LT5tb2RlbCwgcmRiLT5yZGJfRGlza1Byb2R1Y3QsIDE2KTsKKwlfYW1pZ2Ffc2V0X2JzdHIoIiIsIHJkYi0+cmRiX0Rpc2tSZXZpc2lvbiwgNCk7CisJX2FtaWdhX3NldF9ic3RyKCIiLCByZGItPnJkYl9Db250cm9sbGVyVmVuZG9yLCA4KTsKKwlfYW1pZ2Ffc2V0X2JzdHIoIiIsIHJkYi0+cmRiX0NvbnRyb2xsZXJQcm9kdWN0LCAxNik7CisJX2FtaWdhX3NldF9ic3RyKCIiLCByZGItPnJkYl9Db250cm9sbGVyUmV2aXNpb24sIDQpOworCisJLyogQW5kIGNhbGN1bGF0ZSB0aGUgY2hlY2tzdW0gKi8KKwlfYW1pZ2FfY2FsY3VsYXRlX2NoZWNrc3VtICgoc3RydWN0IEFtaWdhQmxvY2sgKikgcmRiKTsKKwkKKwlyZXR1cm4gZGlzazsKK30KKworc3RhdGljIFBlZERpc2sqCithbWlnYV9kdXBsaWNhdGUgKGNvbnN0IFBlZERpc2sqIGRpc2spCit7CisJUGVkRGlzayoJbmV3X2Rpc2s7CisJc3RydWN0IFJpZ2lkRGlza0Jsb2NrICoJbmV3X3JkYjsKKwlzdHJ1Y3QgUmlnaWREaXNrQmxvY2sgKiBvbGRfcmRiOworCVBFRF9BU1NFUlQoZGlzayAhPSBOVUxMLCByZXR1cm4gTlVMTCk7CisJUEVEX0FTU0VSVChkaXNrLT5kZXYgIT0gTlVMTCwgcmV0dXJuIE5VTEwpOworCVBFRF9BU1NFUlQoZGlzay0+ZGlza19zcGVjaWZpYyAhPSBOVUxMLCByZXR1cm4gTlVMTCk7CisKKwlvbGRfcmRiID0gKHN0cnVjdCBSaWdpZERpc2tCbG9jayAqKSBkaXNrLT5kaXNrX3NwZWNpZmljOworICAgICAgIAorCWlmICghKG5ld19kaXNrID0gcGVkX2Rpc2tfbmV3X2ZyZXNoIChkaXNrLT5kZXYsICZhbWlnYV9kaXNrX3R5cGUpKSkKKwkJcmV0dXJuIE5VTEw7CisKKwluZXdfcmRiID0gKHN0cnVjdCBSaWdpZERpc2tCbG9jayAqKSBuZXdfZGlzay0+ZGlza19zcGVjaWZpYzsKKwltZW1jcHkgKG5ld19yZGIsIG9sZF9yZGIsIDI1Nik7CisJcmV0dXJuIG5ld19kaXNrOworfQorCitzdGF0aWMgdm9pZAorYW1pZ2FfZnJlZSAoUGVkRGlzayogZGlzaykKK3sKKwlQRURfQVNTRVJUKGRpc2sgIT0gTlVMTCwgcmV0dXJuKTsKKwlQRURfQVNTRVJUKGRpc2stPmRpc2tfc3BlY2lmaWMgIT0gTlVMTCwgcmV0dXJuKTsKKworCXBlZF9mcmVlIChkaXNrLT5kaXNrX3NwZWNpZmljKTsKKwlfcGVkX2Rpc2tfZnJlZSAoZGlzayk7Cit9CisKKyNpZm5kZWYgRElTQ09WRVJfT05MWQorc3RhdGljIGludAorYW1pZ2FfY2xvYmJlciAoUGVkRGV2aWNlKiBkZXYpCit7CisJc3RydWN0IFJpZ2lkRGlza0Jsb2NrICpyZGI7CisJdWludDMyX3QgaTsKKwlpbnQgcmVzdWx0ID0gMDsKKwlQRURfQVNTRVJUKGRldiAhPSBOVUxMLCByZXR1cm4gMCk7CisKKwlpZiAoKHJkYj1SRFNLKHBlZF9tYWxsb2MoUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQpKSk9PU5VTEwpCisJCXJldHVybiAwOworCisJd2hpbGUgKChpID0gX2FtaWdhX2ZpbmRfcmRiIChkZXYsIHJkYikpICE9IEFNSUdBX1JEQl9OT1RfRk9VTkQpIHsKKwkJcmRiLT5yZGJfSUQgPSBQRURfQ1BVX1RPX0JFMzIgKDApOworCQlyZXN1bHQgPSBwZWRfZGV2aWNlX3dyaXRlIChkZXYsICh2b2lkKikgcmRiLCBpLCAxKTsKKwl9CisKKwlwZWRfZnJlZSAocmRiKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisjZW5kaWYgLyogIURJU0NPVkVSX09OTFkgKi8KKworc3RhdGljIGludAorX2FtaWdhX2xvb3BfY2hlY2sgKHVpbnQzMl90IGJsb2NrLCB1aW50MzJfdCAqIGJsb2NrbGlzdCwgdWludDMyX3QgbWF4KQoreworCXVpbnQzMl90IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbWF4OyBpKyspCisJCWlmIChibG9jayA9PSBibG9ja2xpc3RbaV0pIHsKKwkJCS8qIFdlIGFyZSBsb29waW5nLCBsZXQncyBzdG9wLiAgKi8KKwkJCXJldHVybiAxOworCQl9CisJYmxvY2tsaXN0W21heF0gPSBibG9jazsKKwlyZXR1cm4gMDsKK30KKworLyogV2UgaGF2ZSBhbHJlYWR5IGFsbG9jYXRlZCBhIHJkYiwgd2UgYXJlIG5vdyByZWFkaW5nIGl0IGZyb20gdGhlIGRpc2sgKi8KK3N0YXRpYyBpbnQKK2FtaWdhX3JlYWQgKFBlZERpc2sqIGRpc2spCit7CisJc3RydWN0IFJpZ2lkRGlza0Jsb2NrICpyZGI7CisJc3RydWN0IFBhcnRpdGlvbkJsb2NrICpwYXJ0aXRpb247CisJdWludDMyX3QgcGFydGJsb2NrOworCXVpbnQzMl90IHBhcnRsaXN0W0FNSUdBX01BWF9QQVJUSVRJT05TXTsKKwlQZWRTZWN0b3IgY3lsYmxvY2tzOworCWludCBpOworCisJUEVEX0FTU0VSVChkaXNrICE9IE5VTEwsIHJldHVybiAwKTsKKwlQRURfQVNTRVJUKGRpc2stPmRldiAhPSBOVUxMLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVChkaXNrLT5kZXYtPnNlY3Rvcl9zaXplICUgUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQgPT0gMCwKKyAgICAgICAgICAgICAgICAgICByZXR1cm4gMCk7CisJUEVEX0FTU0VSVChkaXNrLT5kaXNrX3NwZWNpZmljICE9IE5VTEwsIHJldHVybiAwKTsKKwlyZGIgPSBSRFNLKGRpc2stPmRpc2tfc3BlY2lmaWMpOworCisJaWYgKF9hbWlnYV9maW5kX3JkYiAoZGlzay0+ZGV2LCByZGIpID09IEFNSUdBX1JEQl9OT1RfRk9VTkQpIHsKKwkJcGVkX2V4Y2VwdGlvbl90aHJvdyhQRURfRVhDRVBUSU9OX0VSUk9SLCBQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCV8oIiVzIDogRGlkbid0IGZpbmQgcmRiIGJsb2NrLCBzaG91bGQgbmV2ZXIgaGFwcGVuLiIpLCBfX2Z1bmNfXyk7CisJCXJldHVybiAwOworCX0KKworCS8qIExldCdzIGNvcHkgdGhlIHJkYiByZWFkIGdlb21ldHJ5IHRvIHRoZSBkZXYgKi8KKwkvKiBGSVhNRTogc2hvdWxkIHRoaXMgZ28gaW50byBkaXNrLT5kZXYtPmJpb3NfZ2VvbSBpbnN0ZWFkPyAqLworCWRpc2stPmRldi0+aHdfZ2VvbS5jeWxpbmRlcnMgPSBQRURfQkUzMl9UT19DUFUgKHJkYi0+cmRiX0N5bGluZGVycyk7CisJZGlzay0+ZGV2LT5od19nZW9tLmhlYWRzID0gUEVEX0JFMzJfVE9fQ1BVIChyZGItPnJkYl9IZWFkcyk7CisJZGlzay0+ZGV2LT5od19nZW9tLnNlY3RvcnMgPSBQRURfQkUzMl9UT19DUFUgKHJkYi0+cmRiX1NlY3RvcnMpOworCWN5bGJsb2NrcyA9IChQZWRTZWN0b3IpIFBFRF9CRTMyX1RPX0NQVSAocmRiLT5yZGJfSGVhZHMpICoKKwkJKFBlZFNlY3RvcikgUEVEX0JFMzJfVE9fQ1BVIChyZGItPnJkYl9TZWN0b3JzKTsKKworCS8qIFJlbW92ZSBhbGwgcGFydGl0aW9ucyBpbiB0aGUgZm9ybWVyIGluIG1lbW9yeSB0YWJsZSAqLworCXBlZF9kaXNrX2RlbGV0ZV9hbGwgKGRpc2spOworCisJLyogTGV0J3MgYWxsb2NhdGUgYSBwYXJ0aXRpb24gYmxvY2sgKi8KKwlpZiAoIShwYXJ0aXRpb24gPSBwZWRfbWFsbG9jIChkaXNrLT5kZXYtPnNlY3Rvcl9zaXplKSkpCisJCXJldHVybiAwOworCisJLyogV2UgaW5pdGlhbGl6ZSB0aGUgaGFyZGJsb2NrIGZyZWUgbGlzdCB0byBkZXRlY3QgbG9vcHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQU1JR0FfTUFYX1BBUlRJVElPTlM7IGkrKykgcGFydGxpc3RbaV0gPSBMSU5LX0VORDsKKworCWZvciAoaSA9IDEsIHBhcnRibG9jayA9IFBFRF9CRTMyX1RPX0NQVShyZGItPnJkYl9QYXJ0aXRpb25MaXN0KTsKKwkJaSA8IEFNSUdBX01BWF9QQVJUSVRJT05TICYmIHBhcnRibG9jayAhPSBMSU5LX0VORDsKKwkJaSsrLCBwYXJ0YmxvY2sgPSBQRURfQkUzMl9UT19DUFUocGFydGl0aW9uLT5wYl9OZXh0KSkKKwl7CisJCVBlZFBhcnRpdGlvbiAqcGFydDsKKwkJUGVkU2VjdG9yIHN0YXJ0LCBlbmQ7CisJCVBlZENvbnN0cmFpbnQgKmNvbnN0cmFpbnRfZXhhY3Q7CisKKwkJLyogTGV0J3MgbG9vayBmb3IgbG9vcHMgaW4gdGhlIHBhcnRpdGlvbiB0YWJsZSAqLworCQlpZiAoX2FtaWdhX2xvb3BfY2hlY2socGFydGJsb2NrLCBwYXJ0bGlzdCwgaSkpIHsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogTGV0J3MgYWxsb2NhdGUgYW5kIHJlYWQgYSBwYXJ0aXRpb24gYmxvY2sgdG8gZ2V0IGl0cyBnZW9tZXRyeSovCisJCWlmICghX2FtaWdhX3JlYWRfYmxvY2sgKGRpc2stPmRldiwgQU1JR0EocGFydGl0aW9uKSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgKFBlZFNlY3RvcilwYXJ0YmxvY2ssIE5VTEwpKSB7CisJCQlwZWRfZnJlZShwYXJ0aXRpb24pOworCQkJcmV0dXJuIDA7CisJCX0KKworCQlzdGFydCA9ICgoUGVkU2VjdG9yKSBQRURfQkUzMl9UT19DUFUgKHBhcnRpdGlvbi0+ZGVfTG93Q3lsKSkKKwkJCSogY3lsYmxvY2tzOworCQllbmQgPSAoKChQZWRTZWN0b3IpIFBFRF9CRTMyX1RPX0NQVSAocGFydGl0aW9uLT5kZV9IaWdoQ3lsKSkKKwkJCSsgMSkgKiBjeWxibG9ja3MgLSAxOworCisJCS8qIFdlIGNhbiBub3cgY29uc3RydWN0IGEgbmV3IHBhcnRpdGlvbiAqLworCQlpZiAoIShwYXJ0ID0gcGVkX3BhcnRpdGlvbl9uZXcgKGRpc2ssIDAsIE5VTEwsIHN0YXJ0LCBlbmQpKSkgeworCQkJcGVkX2ZyZWUocGFydGl0aW9uKTsKKwkJCXJldHVybiAwOworCQl9CisJCS8qIEFuZCBjb3B5IG92ZXIgdGhlIHBhcnRpdGlvbiBibG9jayAqLworCQltZW1jcHkocGFydC0+ZGlza19zcGVjaWZpYywgcGFydGl0aW9uLCAyNTYpOworCisJCXBhcnQtPm51bSA9IGk7CisJCXBhcnQtPnR5cGUgPSAwOworCQkvKiBMZXQncyBwcm9iZSB3aGF0IGZpbGUgc3lzdGVtIGlzIHByZXNlbnQgb24gdGhlIGRpc2sgKi8KKwkJcGFydC0+ZnNfdHlwZSA9IHBlZF9maWxlX3N5c3RlbV9wcm9iZSAoJnBhcnQtPmdlb20pOworCQkKKwkJY29uc3RyYWludF9leGFjdCA9IHBlZF9jb25zdHJhaW50X2V4YWN0ICgmcGFydC0+Z2VvbSk7CisJCWlmICghcGVkX2Rpc2tfYWRkX3BhcnRpdGlvbiAoZGlzaywgcGFydCwgY29uc3RyYWludF9leGFjdCkpIHsKKwkJCXBlZF9wYXJ0aXRpb25fZGVzdHJveShwYXJ0KTsKKwkJCXBlZF9mcmVlKHBhcnRpdGlvbik7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlwZWRfY29uc3RyYWludF9kZXN0cm95IChjb25zdHJhaW50X2V4YWN0KTsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK19hbWlnYV9maW5kX2ZyZWVfYmxvY2tzKGNvbnN0IFBlZERpc2sgKmRpc2ssIHVpbnQzMl90ICp0YWJsZSwKKwlzdHJ1Y3QgTGlua2VkQmxvY2sgKmJsb2NrLCB1aW50MzJfdCBmaXJzdCwgdWludDMyX3QgdHlwZSkKK3sKKwlQZWRTZWN0b3IgbmV4dDsKKworCVBFRF9BU1NFUlQoZGlzayAhPSBOVUxMLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVChkaXNrLT5kZXYgIT0gTlVMTCwgcmV0dXJuIDApOworCisJZm9yIChuZXh0ID0gZmlyc3Q7IG5leHQgIT0gTElOS19FTkQ7IG5leHQgPSBQRURfQkUzMl9UT19DUFUoYmxvY2stPmxrX05leHQpKSB7CisJCWlmICh0YWJsZVtuZXh0XSAhPSBJRE5BTUVfRlJFRSkgeworCQkJc3dpdGNoIChwZWRfZXhjZXB0aW9uX3Rocm93KFBFRF9FWENFUFRJT05fRVJST1IsCisJCQkJUEVEX0VYQ0VQVElPTl9GSVggfCBQRURfRVhDRVBUSU9OX0lHTk9SRSB8IFBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJCV8oIiVzIDogTG9vcCBkZXRlY3RlZCBhdCBibG9jayAlZC4iKSwgX19mdW5jX18sIG5leHQpKQorCQkJeworCQkJCWNhc2UgUEVEX0VYQ0VQVElPTl9DQU5DRUwgOgorCQkJCQlyZXR1cm4gMDsKKwkJCQljYXNlIFBFRF9FWENFUFRJT05fRklYIDoKKwkJCQkJLyogVE9ETyA6IE5lZWQgdG8gYWRkIGZpeGluZyBjb2RlICovCisJCQkJY2FzZSBQRURfRVhDRVBUSU9OX0lHTk9SRSA6CisJCQkJY2FzZSBQRURfRVhDRVBUSU9OX1VOSEFORExFRCA6CisJCQkJZGVmYXVsdCA6IAorCQkJCQlyZXR1cm4gMTsKKwkJCX0KKwkJfQorCisJCWlmICghX2FtaWdhX3JlYWRfYmxvY2sgKGRpc2stPmRldiwgQU1JR0EoYmxvY2spLCBuZXh0LCBOVUxMKSkgeworCQkJcmV0dXJuIDA7CisJCX0KKwkJaWYgKFBFRF9CRTMyX1RPX0NQVShibG9jay0+bGtfSUQpICE9IHR5cGUpIHsKKwkJCXN3aXRjaCAocGVkX2V4Y2VwdGlvbl90aHJvdyhQRURfRVhDRVBUSU9OX0VSUk9SLAorCQkJCVBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJCV8oIiVzIDogVGhlICVzIGxpc3Qgc2VlbXMgYmFkIGF0IGJsb2NrICVzLiIpLAorCQkJCV9fZnVuY19fLCBfYW1pZ2FfYmxvY2tfaWQoUEVEX0JFMzJfVE9fQ1BVKGJsb2NrLT5sa19JRCkpLCBuZXh0KSkKKwkJCXsKKwkJCQkvKiBUT0RPIDogdG8gbW9yZSBzdWJ0aWxlIHRoaW5ncyBoZXJlICovCisJCQkJY2FzZSBQRURfRVhDRVBUSU9OX0NBTkNFTCA6CisJCQkJY2FzZSBQRURfRVhDRVBUSU9OX1VOSEFORExFRCA6CisJCQkJZGVmYXVsdCA6IAorCQkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfQorCQl0YWJsZVtuZXh0XSA9IHR5cGU7CisJCWlmIChQRURfQkUzMl9UT19DUFUoYmxvY2stPmxrX0lEKSA9PSBJRE5BTUVfRklMRVNZU0hFQURFUikgeworCQkJaWYgKF9hbWlnYV9maW5kX2ZyZWVfYmxvY2tzKGRpc2ssIHRhYmxlLCBibG9jaywKKwkJCQlQRURfQkUzMl9UT19DUFUoTE5LMihibG9jayktPmxrMl9MaW5rZWQpLAorCQkJCUlETkFNRV9MT0FEU0VHKSA9PSAwKSByZXR1cm4gMDsKKwkJfQorCX0KKwlyZXR1cm4gMTsKK30KK3N0YXRpYyB1aW50MzJfdAorX2FtaWdhX25leHRfZnJlZV9ibG9jayh1aW50MzJfdCAqdGFibGUsIHVpbnQzMl90IHN0YXJ0LCB1aW50MzJfdCB0eXBlKSB7CisJaW50IGk7CisKKwlmb3IgKGkgPSBzdGFydDsgdGFibGVbaV0gIT0gdHlwZSAmJiB0YWJsZVtpXSAhPSBJRE5BTUVfRlJFRTsgaSsrKTsKKwlyZXR1cm4gaTsKK30KK3N0YXRpYyBQZWRQYXJ0aXRpb24gKgorX2FtaWdhX25leHRfcmVhbF9wYXJ0aXRpb24oY29uc3QgUGVkRGlzayAqZGlzaywgUGVkUGFydGl0aW9uICpwYXJ0KSB7CisJUGVkUGFydGl0aW9uICpuZXh0OworCisJZm9yIChuZXh0ID0gcGVkX2Rpc2tfbmV4dF9wYXJ0aXRpb24gKGRpc2ssIHBhcnQpOworCQluZXh0ICE9IE5VTEwgJiYgIXBlZF9wYXJ0aXRpb25faXNfYWN0aXZlIChuZXh0KTsKKwkJbmV4dCA9IHBlZF9kaXNrX25leHRfcGFydGl0aW9uIChkaXNrLCBuZXh0KSk7CisJcmV0dXJuIG5leHQ7Cit9CisjaWZuZGVmIERJU0NPVkVSX09OTFkKK3N0YXRpYyBpbnQKK2FtaWdhX3dyaXRlIChjb25zdCBQZWREaXNrKiBkaXNrKQoreworCXN0cnVjdCBSaWdpZERpc2tCbG9jayAqcmRiOworCXN0cnVjdCBMaW5rZWRCbG9jayAqYmxvY2s7CisJc3RydWN0IFBhcnRpdGlvbkJsb2NrICpwYXJ0aXRpb247CisJUGVkUGFydGl0aW9uICpwYXJ0LCAqbmV4dF9wYXJ0OworCVBlZFNlY3RvciBjeWxibG9ja3MsIGZpcnN0X2hiLCBsYXN0X2hiLCBsYXN0X3VzZWRfaGI7CisJdWludDMyX3QgKiB0YWJsZTsKKwl1aW50MzJfdCBpOworCXVpbnQzMl90IHJkYl9udW0sIHBhcnRfbnVtLCBibG9ja19udW0sIG5leHRfbnVtOworCisJUEVEX0FTU0VSVCAoZGlzayAhPSBOVUxMLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAoZGlzay0+ZGV2ICE9IE5VTEwsIHJldHVybiAwKTsKKwlQRURfQVNTRVJUIChkaXNrLT5kaXNrX3NwZWNpZmljICE9IE5VTEwsIHJldHVybiAwKTsKKworCWlmICghKHJkYiA9IHBlZF9tYWxsb2MgKFBFRF9TRUNUT1JfU0laRV9ERUZBVUxUKSkpCisJCXJldHVybiAwOworCisJLyogTGV0J3MgcmVhZCB0aGUgcmRiICovCisJaWYgKChyZGJfbnVtID0gX2FtaWdhX2ZpbmRfcmRiIChkaXNrLT5kZXYsIHJkYikpID09IEFNSUdBX1JEQl9OT1RfRk9VTkQpIHsKKwkJcmRiX251bSA9IDI7CisJfSBlbHNlIHsKKwkJbWVtY3B5IChSRFNLKGRpc2stPmRpc2tfc3BlY2lmaWMpLCByZGIsIFBFRF9TRUNUT1JfU0laRV9ERUZBVUxUKTsKKwl9CisJcGVkX2ZyZWUgKHJkYik7CisJcmRiID0gUkRTSyhkaXNrLT5kaXNrX3NwZWNpZmljKTsKKworCWN5bGJsb2NrcyA9IChQZWRTZWN0b3IpIFBFRF9CRTMyX1RPX0NQVSAocmRiLT5yZGJfSGVhZHMpICoKKwkJKFBlZFNlY3RvcikgUEVEX0JFMzJfVE9fQ1BVIChyZGItPnJkYl9TZWN0b3JzKTsKKwlmaXJzdF9oYiA9IChQZWRTZWN0b3IpIFBFRF9CRTMyX1RPX0NQVSAocmRiLT5yZGJfUkRCQmxvY2tzTG8pOworCWxhc3RfaGIgPSAoUGVkU2VjdG9yKSBQRURfQkUzMl9UT19DUFUgKHJkYi0+cmRiX1JEQkJsb2Nrc0hpKTsKKwlsYXN0X3VzZWRfaGIgPSAoUGVkU2VjdG9yKSBQRURfQkUzMl9UT19DUFUgKHJkYi0+cmRiX0hpZ2hSRFNLQmxvY2spOworCisJLyogbGV0J3MgYWxsb2NhdGUgYSBmcmVlIGJsb2NrIHRhYmxlIGFuZCBpbml0aWFsaXplIGl0ICovCisJaWYgKCEodGFibGUgPSBwZWRfbWFsbG9jICgobGFzdF9oYiAtIGZpcnN0X2hiICsgMSkgKiBzaXplb2YodWludDMyX3QpKSkpCisJCXJldHVybiAwOworCisJbWVtc2V0KHRhYmxlLCAweGZmLCAobGFzdF9oYiAtIGZpcnN0X2hiICsgMSkgKiBzaXplb2YodWludDMyX3QpKTsKKwlmb3IgKGkgPSAwOyBpPD1yZGJfbnVtOyBpKyspIHRhYmxlW2ldID0gSUROQU1FX1JJR0lERElTSzsKKwkKKwkvKiBMZXQncyBhbGxvY2F0ZSBhIHBhcnRpdGlvbiBibG9jayAqLworCWlmICghKGJsb2NrID0gcGVkX21hbGxvYyAoUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQpKSkgeworCQlwZWRfZnJlZSAodGFibGUpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBBbmQgZmlsbCB0aGUgZnJlZSBibG9jayB0YWJsZSAqLworCWlmIChfYW1pZ2FfZmluZF9mcmVlX2Jsb2NrcyhkaXNrLCB0YWJsZSwgYmxvY2ssCisJCVBFRF9CRTMyX1RPX0NQVSAocmRiLT5yZGJfQmFkQmxvY2tMaXN0KSwgSUROQU1FX0JBREJMT0NLKSA9PSAwKQorCXsKKwkJcGVkX2V4Y2VwdGlvbl90aHJvdyhQRURfRVhDRVBUSU9OX0VSUk9SLAorCQkJUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQlfKCIlcyA6IEZhaWxlZCB0byBsaXN0IGJhZCBibG9ja3MuIiksIF9fZnVuY19fKTsKKwkJZ290byBlcnJvcl9mcmVlX3RhYmxlOworCX0KKwlpZiAoX2FtaWdhX2ZpbmRfZnJlZV9ibG9ja3MoZGlzaywgdGFibGUsIGJsb2NrLAorCQlQRURfQkUzMl9UT19DUFUgKHJkYi0+cmRiX1BhcnRpdGlvbkxpc3QpLCBJRE5BTUVfUEFSVElUSU9OKSA9PSAwKQorCXsKKwkJcGVkX2V4Y2VwdGlvbl90aHJvdyhQRURfRVhDRVBUSU9OX0VSUk9SLAorCQkJUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQlfKCIlcyA6IEZhaWxlZCB0byBsaXN0IHBhcnRpdGlvbiBibG9ja3MuIiksIF9fZnVuY19fKTsKKwkJZ290byBlcnJvcl9mcmVlX3RhYmxlOworCX0KKwlpZiAoX2FtaWdhX2ZpbmRfZnJlZV9ibG9ja3MoZGlzaywgdGFibGUsIGJsb2NrLAorCQlQRURfQkUzMl9UT19DUFUgKHJkYi0+cmRiX0ZpbGVTeXNIZWFkZXJMaXN0KSwgSUROQU1FX0ZJTEVTWVNIRUFERVIpID09IDApCisJeworCQlwZWRfZXhjZXB0aW9uX3Rocm93KFBFRF9FWENFUFRJT05fRVJST1IsCisJCQlQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCV8oIiVzIDogRmFpbGVkIHRvIGxpc3QgZmlsZSBzeXN0ZW0gYmxvY2tzLiIpLCBfX2Z1bmNfXyk7CisJCWdvdG8gZXJyb3JfZnJlZV90YWJsZTsKKwl9CisJaWYgKF9hbWlnYV9maW5kX2ZyZWVfYmxvY2tzKGRpc2ssIHRhYmxlLCBibG9jaywKKwkJUEVEX0JFMzJfVE9fQ1BVIChyZGItPnJkYl9Cb290QmxvY2tMaXN0KSwgSUROQU1FX0JPT1QpID09IDApCisJeworCQlwZWRfZXhjZXB0aW9uX3Rocm93KFBFRF9FWENFUFRJT05fRVJST1IsCisJCQlQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCV8oIiVzIDogRmFpbGVkIHRvIGxpc3QgYm9vdCBibG9ja3MuIiksIF9fZnVuY19fKTsKKwkJZ290byBlcnJvcl9mcmVlX3RhYmxlOworCX0KKworCWJsb2NrX251bSA9IG5leHRfbnVtID0gcGFydF9udW0gPSBfYW1pZ2FfbmV4dF9mcmVlX2Jsb2NrKHRhYmxlLCByZGJfbnVtKzEsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUROQU1FX1BBUlRJVElPTik7CisJcGFydCA9IF9hbWlnYV9uZXh0X3JlYWxfcGFydGl0aW9uKGRpc2ssIE5VTEwpOworCXJkYi0+cmRiX1BhcnRpdGlvbkxpc3QgPSBQRURfQ1BVX1RPX0JFMzIocGFydCA/IHBhcnRfbnVtIDogTElOS19FTkQpOworCWZvciAoOyBwYXJ0ICE9IE5VTEw7IHBhcnQgPSBuZXh0X3BhcnQsIGJsb2NrX251bSA9IG5leHRfbnVtKSB7CisJCVBFRF9BU1NFUlQocGFydC0+ZGlza19zcGVjaWZpYyAhPSBOVUxMLCByZXR1cm4gMCk7CisJCVBFRF9BU1NFUlQocGFydC0+Z2VvbS5zdGFydCAlIGN5bGJsb2NrcyA9PSAwLCByZXR1cm4gMCk7CisJCVBFRF9BU1NFUlQoKHBhcnQtPmdlb20uZW5kICsgMSkgJSBjeWxibG9ja3MgPT0gMCwgcmV0dXJuIDApOworCisJCW5leHRfcGFydCA9IF9hbWlnYV9uZXh0X3JlYWxfcGFydGl0aW9uKGRpc2ssIHBhcnQpOworCQluZXh0X251bSA9IF9hbWlnYV9uZXh0X2ZyZWVfYmxvY2sodGFibGUsIGJsb2NrX251bSsxLCBJRE5BTUVfUEFSVElUSU9OKTsKKworCQlwYXJ0aXRpb24gPSBQQVJUKHBhcnQtPmRpc2tfc3BlY2lmaWMpOworCQlpZiAobmV4dF9wYXJ0ID09IE5VTEwpCisJCQlwYXJ0aXRpb24tPnBiX05leHQgPSBQRURfQ1BVX1RPX0JFMzIoTElOS19FTkQpOworCQllbHNlCisJCQlwYXJ0aXRpb24tPnBiX05leHQgPSBQRURfQ1BVX1RPX0JFMzIobmV4dF9udW0pOworCQlwYXJ0aXRpb24tPmRlX0xvd0N5bCA9IFBFRF9DUFVfVE9fQkUzMihwYXJ0LT5nZW9tLnN0YXJ0L2N5bGJsb2Nrcyk7CisJCXBhcnRpdGlvbi0+ZGVfSGlnaEN5bCA9IFBFRF9DUFVfVE9fQkUzMigocGFydC0+Z2VvbS5lbmQrMSkvY3lsYmxvY2tzLTEpOworCQlfYW1pZ2FfY2FsY3VsYXRlX2NoZWNrc3VtKEFNSUdBKHBhcnRpdGlvbikpOworCQlpZiAoIXBlZF9kZXZpY2Vfd3JpdGUgKGRpc2stPmRldiwgKHZvaWQqKSBwYXJ0aXRpb24sIGJsb2NrX251bSwgMSkpIHsKKwkJCXBlZF9leGNlcHRpb25fdGhyb3coUEVEX0VYQ0VQVElPTl9FUlJPUiwKKwkJCQlQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCQlfKCJGYWlsZWQgdG8gd3JpdGUgcGFydGl0aW9uIGJsb2NrIGF0ICVkLiIpLAorCQkJCWJsb2NrX251bSk7CisJCQlnb3RvIGVycm9yX2ZyZWVfdGFibGU7CisJCQkvKiBXQVJOSU5HIDogSWYgd2UgZmFpbCBoZXJlLCB3ZSBzdG9wIGV2ZXJ5dGhpbmcsCisJCQkgKiBhbmQgdGhlIHBhcnRpdGlvbiB0YWJsZSBpcyBsb3N0LiBBIGJldHRlcgorCQkJICogc29sdXRpb24gc2hvdWxkIGJlIGZvdW5kLCB1c2luZyB0aGUgc2Vjb25kCisJCQkgKiBoYWxmIG9mIHRoZSBoYXJkYmxvY2tzIHRvIG5vdCBvdmVyd3JpdGUgdGhlCisJCQkgKiBvbGQgcGFydGl0aW9uIHRhYmxlLiBJdCBiZWNvbWVzIHByb2JsZW1hdGljCisJCQkgKiBpZiB3ZSB1c2UgbW9yZSB0aGFuIGhhbGYgb2YgdGhlIGhhcmRibG9ja3MuICovCisJCX0KKwl9CisKKwlpZiAoYmxvY2tfbnVtID4gUEVEX0JFMzJfVE9fQ1BVIChyZGItPnJkYl9IaWdoUkRTS0Jsb2NrKSkKKwkJcmRiLT5yZGJfSGlnaFJEU0tCbG9jayA9IFBFRF9DUFVfVE9fQkUzMihibG9ja19udW0pOworCisJX2FtaWdhX2NhbGN1bGF0ZV9jaGVja3N1bShBTUlHQShyZGIpKTsKKwlpZiAoIXBlZF9kZXZpY2Vfd3JpdGUgKGRpc2stPmRldiwgKHZvaWQqKSBkaXNrLT5kaXNrX3NwZWNpZmljLCByZGJfbnVtLCAxKSkKKwkJZ290byBlcnJvcl9mcmVlX3RhYmxlOworCisJcGVkX2ZyZWUgKHRhYmxlKTsKKwlwZWRfZnJlZSAoYmxvY2spOworCXJldHVybiBwZWRfZGV2aWNlX3N5bmMgKGRpc2stPmRldik7CisKK2Vycm9yX2ZyZWVfdGFibGU6CisJcGVkX2ZyZWUgKHRhYmxlKTsKKwlwZWRfZnJlZSAoYmxvY2spOworCXJldHVybiAwOworfQorI2VuZGlmIC8qICFESVNDT1ZFUl9PTkxZICovCisKK3N0YXRpYyBQZWRQYXJ0aXRpb24qCithbWlnYV9wYXJ0aXRpb25fbmV3IChjb25zdCBQZWREaXNrKiBkaXNrLCBQZWRQYXJ0aXRpb25UeXBlIHBhcnRfdHlwZSwKKwkJICAgY29uc3QgUGVkRmlsZVN5c3RlbVR5cGUqIGZzX3R5cGUsCisJCSAgIFBlZFNlY3RvciBzdGFydCwgUGVkU2VjdG9yIGVuZCkKK3sKKwlQZWRQYXJ0aXRpb24gKnBhcnQ7CisJUGVkRGV2aWNlICpkZXY7CisJUGVkU2VjdG9yIGN5bDsKKwlzdHJ1Y3QgUGFydGl0aW9uQmxvY2sgKnBhcnRpdGlvbjsKKwlzdHJ1Y3QgUmlnaWREaXNrQmxvY2sgKnJkYjsKKworCVBFRF9BU1NFUlQoZGlzayAhPSBOVUxMLCByZXR1cm4gTlVMTCk7CisJUEVEX0FTU0VSVChkaXNrLT5kZXYgIT0gTlVMTCwgcmV0dXJuIE5VTEwpOworCVBFRF9BU1NFUlQoZGlzay0+ZGlza19zcGVjaWZpYyAhPSBOVUxMLCByZXR1cm4gTlVMTCk7CisJZGV2ID0gZGlzay0+ZGV2OworCWN5bCA9IChQZWRTZWN0b3IpIChkZXYtPmh3X2dlb20uc2VjdG9ycyAqIGRldi0+aHdfZ2VvbS5oZWFkcyk7CisJcmRiID0gUkRTSyhkaXNrLT5kaXNrX3NwZWNpZmljKTsKKworCWlmICghKHBhcnQgPSBfcGVkX3BhcnRpdGlvbl9hbGxvYyAoZGlzaywgcGFydF90eXBlLCBmc190eXBlLCBzdGFydCwgZW5kKSkpCisJCXJldHVybiBOVUxMOworCisJaWYgKHBlZF9wYXJ0aXRpb25faXNfYWN0aXZlIChwYXJ0KSkgeworCQlpZiAoIShwYXJ0LT5kaXNrX3NwZWNpZmljID0gcGVkX21hbGxvYyAoUEVEX1NFQ1RPUl9TSVpFX0RFRkFVTFQpKSkgeworCQkJcGVkX2ZyZWUgKHBhcnQpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJcGFydGl0aW9uID0gUEFSVChwYXJ0LT5kaXNrX3NwZWNpZmljKTsKKwkJbWVtc2V0KHBhcnRpdGlvbiwgMCwgc2l6ZW9mKHN0cnVjdCBQYXJ0aXRpb25CbG9jaykpOworCisJCXBhcnRpdGlvbi0+cGJfSUQgPSBQRURfQ1BVX1RPX0JFMzIoSUROQU1FX1BBUlRJVElPTik7CisJCXBhcnRpdGlvbi0+cGJfU3VtbWVkTG9uZ3MgPSBQRURfQ1BVX1RPX0JFMzIoNjQpOworCQlwYXJ0aXRpb24tPnBiX0hvc3RJRCA9IHJkYi0+cmRiX0hvc3RJRDsKKwkJcGFydGl0aW9uLT5wYl9GbGFncyA9IFBFRF9DUFVfVE9fQkUzMigwKTsKKwkJLyogVE9ETyA6IHVzZSBhIHNjaGVtZSBpbmNsdWRpbmcgdGhlIGRldmljZSBuYW1lIGFuZCB0aGUKKwkJICogcGFydGl0aW9uIG51bWJlciwgaWYgaXQgaXMgcG9zc2libGUgKi8KKwkJX2FtaWdhX3NldF9ic3RyKCJkaHgiLCBwYXJ0aXRpb24tPnBiX0RyaXZlTmFtZSwgMzIpOworCisJCXBhcnRpdGlvbi0+ZGVfVGFibGVTaXplID0gUEVEX0NQVV9UT19CRTMyKDE5KTsKKwkJcGFydGl0aW9uLT5kZV9TaXplQmxvY2sgPSBQRURfQ1BVX1RPX0JFMzIoMTI4KTsKKwkJcGFydGl0aW9uLT5kZV9TZWNPcmcgPSBQRURfQ1BVX1RPX0JFMzIoMCk7CisJCXBhcnRpdGlvbi0+ZGVfU3VyZmFjZXMgPSBQRURfQ1BVX1RPX0JFMzIoZGV2LT5od19nZW9tLmhlYWRzKTsKKwkJcGFydGl0aW9uLT5kZV9TZWN0b3JQZXJCbG9jayA9IFBFRF9DUFVfVE9fQkUzMigxKTsKKwkJcGFydGl0aW9uLT5kZV9CbG9ja3NQZXJUcmFjaworCQkJPSBQRURfQ1BVX1RPX0JFMzIoZGV2LT5od19nZW9tLnNlY3RvcnMpOworCQlwYXJ0aXRpb24tPmRlX1Jlc2VydmVkID0gUEVEX0NQVV9UT19CRTMyKDIpOworCQlwYXJ0aXRpb24tPmRlX1ByZUFsbG9jID0gUEVEX0NQVV9UT19CRTMyKDApOworCQlwYXJ0aXRpb24tPmRlX0ludGVybGVhdmUgPSBQRURfQ1BVX1RPX0JFMzIoMCk7CisJCXBhcnRpdGlvbi0+ZGVfTG93Q3lsID0gUEVEX0NQVV9UT19CRTMyKHN0YXJ0L2N5bCk7CisJCXBhcnRpdGlvbi0+ZGVfSGlnaEN5bCA9IFBFRF9DUFVfVE9fQkUzMigoZW5kKzEpL2N5bC0xKTsKKwkJcGFydGl0aW9uLT5kZV9OdW1CdWZmZXJzID0gUEVEX0NQVV9UT19CRTMyKDMwKTsKKwkJcGFydGl0aW9uLT5kZV9CdWZNZW1UeXBlID0gUEVEX0NQVV9UT19CRTMyKDApOworCQlwYXJ0aXRpb24tPmRlX01heFRyYW5zZmVyID0gUEVEX0NQVV9UT19CRTMyKDB4N2ZmZmZmZmYpOworCQlwYXJ0aXRpb24tPmRlX01hc2sgPSBQRURfQ1BVX1RPX0JFMzIoMHhmZmZmZmZmZik7CisJCXBhcnRpdGlvbi0+ZGVfQm9vdFByaSA9IFBFRF9DUFVfVE9fQkUzMigwKTsKKwkJcGFydGl0aW9uLT5kZV9Eb3NUeXBlID0gUEVEX0NQVV9UT19CRTMyKDB4NGM0ZTU4MDApOworCQlwYXJ0aXRpb24tPmRlX0JhdWQgPSBQRURfQ1BVX1RPX0JFMzIoMCk7CisJCXBhcnRpdGlvbi0+ZGVfQ29udHJvbCA9IFBFRF9DUFVfVE9fQkUzMigwKTsKKwkJcGFydGl0aW9uLT5kZV9Cb290QmxvY2tzID0gUEVEX0NQVV9UT19CRTMyKDApOworCisJfSBlbHNlIHsKKwkJcGFydC0+ZGlza19zcGVjaWZpYyA9IE5VTEw7CisJfQorCXJldHVybiBwYXJ0OworfQorCitzdGF0aWMgUGVkUGFydGl0aW9uKgorYW1pZ2FfcGFydGl0aW9uX2R1cGxpY2F0ZSAoY29uc3QgUGVkUGFydGl0aW9uKiBwYXJ0KQoreworCVBlZFBhcnRpdGlvbiAqbmV3X3BhcnQ7CisJc3RydWN0IFBhcnRpdGlvbkJsb2NrICpuZXdfYW1pZ2FfcGFydDsKKwlzdHJ1Y3QgUGFydGl0aW9uQmxvY2sgKm9sZF9hbWlnYV9wYXJ0OworCisJUEVEX0FTU0VSVChwYXJ0ICE9IE5VTEwsIHJldHVybiBOVUxMKTsKKwlQRURfQVNTRVJUKHBhcnQtPmRpc2sgIT0gTlVMTCwgcmV0dXJuIE5VTEwpOworCVBFRF9BU1NFUlQocGFydC0+ZGlza19zcGVjaWZpYyAhPSBOVUxMLCByZXR1cm4gTlVMTCk7CisJb2xkX2FtaWdhX3BhcnQgPSAoc3RydWN0IFBhcnRpdGlvbkJsb2NrICopIHBhcnQtPmRpc2tfc3BlY2lmaWM7CisKKwluZXdfcGFydCA9IHBlZF9wYXJ0aXRpb25fbmV3IChwYXJ0LT5kaXNrLCBwYXJ0LT50eXBlLAorCQkJCSAgICAgIHBhcnQtPmZzX3R5cGUsIHBhcnQtPmdlb20uc3RhcnQsCisJCQkJICAgICAgcGFydC0+Z2VvbS5lbmQpOworCWlmICghbmV3X3BhcnQpCisJCXJldHVybiBOVUxMOworCisJbmV3X2FtaWdhX3BhcnQgPSAoc3RydWN0IFBhcnRpdGlvbkJsb2NrICopIG5ld19wYXJ0LT5kaXNrX3NwZWNpZmljOworCW1lbWNweSAobmV3X2FtaWdhX3BhcnQsIG9sZF9hbWlnYV9wYXJ0LCAyNTYpOworCisJcmV0dXJuIG5ld19wYXJ0OworfQorCitzdGF0aWMgdm9pZAorYW1pZ2FfcGFydGl0aW9uX2Rlc3Ryb3kgKFBlZFBhcnRpdGlvbiogcGFydCkKK3sKKwlQRURfQVNTRVJUIChwYXJ0ICE9IE5VTEwsIHJldHVybik7CisKKwlpZiAocGVkX3BhcnRpdGlvbl9pc19hY3RpdmUgKHBhcnQpKSB7CisJCVBFRF9BU1NFUlQgKHBhcnQtPmRpc2tfc3BlY2lmaWMgIT0gTlVMTCwgcmV0dXJuKTsKKwkJcGVkX2ZyZWUgKHBhcnQtPmRpc2tfc3BlY2lmaWMpOworCX0KKwlfcGVkX3BhcnRpdGlvbl9mcmVlIChwYXJ0KTsKK30KKworc3RhdGljIGludAorYW1pZ2FfcGFydGl0aW9uX3NldF9zeXN0ZW0gKFBlZFBhcnRpdGlvbiogcGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQZWRGaWxlU3lzdGVtVHlwZSogZnNfdHlwZSkKK3sKKwlzdHJ1Y3QgUGFydGl0aW9uQmxvY2sgKnBhcnRpdGlvbjsKKworCVBFRF9BU1NFUlQgKHBhcnQgIT0gTlVMTCwgcmV0dXJuIDApOworCVBFRF9BU1NFUlQgKHBhcnQtPmRpc2tfc3BlY2lmaWMgIT0gTlVMTCwgcmV0dXJuIDApOworCXBhcnRpdGlvbiA9IFBBUlQocGFydC0+ZGlza19zcGVjaWZpYyk7CisKKwlwYXJ0LT5mc190eXBlID0gZnNfdHlwZTsKKworCWlmICghZnNfdHlwZSkKKwkJcGFydGl0aW9uLT5kZV9Eb3NUeXBlID0gUEVEX0NQVV9UT19CRTMyKDB4NGM0ZTU4MDApOyAvKiAnTE5YXDAnICovCisJZWxzZSBpZiAoIXN0cmNtcCAoZnNfdHlwZS0+bmFtZSwgImV4dDIiKSkKKwkJcGFydGl0aW9uLT5kZV9Eb3NUeXBlID0gUEVEX0NQVV9UT19CRTMyKDB4NGM0ZTU4MDApOyAvKiAnTE5YXDAnICovCisJZWxzZSBpZiAoIXN0cmNtcCAoZnNfdHlwZS0+bmFtZSwgImV4dDMiKSkKKwkJcGFydGl0aW9uLT5kZV9Eb3NUeXBlID0gUEVEX0NQVV9UT19CRTMyKDB4NDU1ODU0MDMpOyAvKiAnRVhUXDMnICovCisJZWxzZSBpZiAoIXN0cmNtcCAoZnNfdHlwZS0+bmFtZSwgImxpbnV4LXN3YXAiKSkKKwkJcGFydGl0aW9uLT5kZV9Eb3NUeXBlID0gUEVEX0NQVV9UT19CRTMyKDB4NTM1NzUwMDApOyAvKiAnU1dQXDAnICovCisJZWxzZSBpZiAoIXN0cmNtcCAoZnNfdHlwZS0+bmFtZSwgImZhdDE2IikpCisJCXBhcnRpdGlvbi0+ZGVfRG9zVHlwZSA9IFBFRF9DUFVfVE9fQkUzMigweDQ2NDE1NDAwKTsgLyogJ0ZBVFwwJyAqLworCWVsc2UgaWYgKCFzdHJjbXAgKGZzX3R5cGUtPm5hbWUsICJmYXQzMiIpKQorCQlwYXJ0aXRpb24tPmRlX0Rvc1R5cGUgPSBQRURfQ1BVX1RPX0JFMzIoMHg0NjQxNTQwMSk7IC8qICdGQVRcMScqLworCWVsc2UgaWYgKCFzdHJjbXAgKGZzX3R5cGUtPm5hbWUsICJoZnMiKSkKKwkJcGFydGl0aW9uLT5kZV9Eb3NUeXBlID0gUEVEX0NQVV9UT19CRTMyKDB4NDg0NjUzMDApOyAvKiAnSEZTXDAnICovCisJZWxzZSBpZiAoIXN0cmNtcCAoZnNfdHlwZS0+bmFtZSwgImpmcyIpKQorCQlwYXJ0aXRpb24tPmRlX0Rvc1R5cGUgPSBQRURfQ1BVX1RPX0JFMzIoMHg0YTQ2NTMwMCk7IC8qICdKRlNcMCcgKi8KKwllbHNlIGlmICghc3RyY21wIChmc190eXBlLT5uYW1lLCAibnRmcyIpKQorCQlwYXJ0aXRpb24tPmRlX0Rvc1R5cGUgPSBQRURfQ1BVX1RPX0JFMzIoMHg0ZTU0NDY1Myk7IC8qICdOVEZTJyAqLworCWVsc2UgaWYgKCFzdHJjbXAgKGZzX3R5cGUtPm5hbWUsICJyZWlzZXJmcyIpKQorCQlwYXJ0aXRpb24tPmRlX0Rvc1R5cGUgPSBQRURfQ1BVX1RPX0JFMzIoMHg1MjQ2NTMwMCk7IC8qICdSRlNcMCcgKi8KKwllbHNlIGlmICghc3RyY21wIChmc190eXBlLT5uYW1lLCAic3VuLXVmcyIpKQorCQlwYXJ0aXRpb24tPmRlX0Rvc1R5cGUgPSBQRURfQ1BVX1RPX0JFMzIoMHg1MzU1NDY1Myk7IC8qICdTVUZTJyAqLworCWVsc2UgaWYgKCFzdHJjbXAgKGZzX3R5cGUtPm5hbWUsICJocC11ZnMiKSkKKwkJcGFydGl0aW9uLT5kZV9Eb3NUeXBlID0gUEVEX0NQVV9UT19CRTMyKDB4NDg1NTQ2NTMpOyAvKiAnSFVGUycgKi8KKwllbHNlIGlmICghc3RyY21wIChmc190eXBlLT5uYW1lLCAieGZzIikpCisJCXBhcnRpdGlvbi0+ZGVfRG9zVHlwZSA9IFBFRF9DUFVfVE9fQkUzMigweDU4NDY1MzAwKTsgLyogJ1hGU1wwJyAqLworCWVsc2UKKwkJcGFydGl0aW9uLT5kZV9Eb3NUeXBlID0gUEVEX0NQVV9UT19CRTMyKDB4MDAwMDAwMDApOyAvKiB1bmtub3duICovCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2FtaWdhX3BhcnRpdGlvbl9zZXRfZmxhZyAoUGVkUGFydGl0aW9uKiBwYXJ0LCBQZWRQYXJ0aXRpb25GbGFnIGZsYWcsIGludCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgUGFydGl0aW9uQmxvY2sgKnBhcnRpdGlvbjsKKworCVBFRF9BU1NFUlQgKHBhcnQgIT0gTlVMTCwgcmV0dXJuIDApOworCVBFRF9BU1NFUlQgKHBhcnQtPmRpc2tfc3BlY2lmaWMgIT0gTlVMTCwgcmV0dXJuIDApOworCisJcGFydGl0aW9uID0gUEFSVChwYXJ0LT5kaXNrX3NwZWNpZmljKTsKKworCXN3aXRjaCAoZmxhZykgeworCQljYXNlIFBFRF9QQVJUSVRJT05fQk9PVDoKKwkJCWlmIChzdGF0ZSkgcGFydGl0aW9uLT5wYl9GbGFncyB8PSBQRURfQ1BVX1RPX0JFMzIoUEJGRl9CT09UQUJMRSk7CisJCQllbHNlIHBhcnRpdGlvbi0+cGJfRmxhZ3MgJj0gfihQRURfQ1BVX1RPX0JFMzIoUEJGRl9CT09UQUJMRSkpOworCQkJcmV0dXJuIDE7CisJCWNhc2UgUEVEX1BBUlRJVElPTl9ISURERU46CisJCQlpZiAoc3RhdGUpIHBhcnRpdGlvbi0+cGJfRmxhZ3MgfD0gUEVEX0NQVV9UT19CRTMyKFBCRkZfTk9NT1VOVCk7CisJCQllbHNlIHBhcnRpdGlvbi0+cGJfRmxhZ3MgJj0gfihQRURfQ1BVX1RPX0JFMzIoUEJGRl9OT01PVU5UKSk7CisJCQlyZXR1cm4gMTsKKwkJY2FzZSBQRURfUEFSVElUSU9OX1JBSUQ6CisJCQlpZiAoc3RhdGUpIHBhcnRpdGlvbi0+cGJfRmxhZ3MgfD0gUEVEX0NQVV9UT19CRTMyKFBCRkZfUkFJRCk7CisJCQllbHNlIHBhcnRpdGlvbi0+cGJfRmxhZ3MgJj0gfihQRURfQ1BVX1RPX0JFMzIoUEJGRl9SQUlEKSk7CisJCQlyZXR1cm4gMTsKKwkJY2FzZSBQRURfUEFSVElUSU9OX0xWTToKKwkJCWlmIChzdGF0ZSkgcGFydGl0aW9uLT5wYl9GbGFncyB8PSBQRURfQ1BVX1RPX0JFMzIoUEJGRl9MVk0pOworCQkJZWxzZSBwYXJ0aXRpb24tPnBiX0ZsYWdzICY9IH4oUEVEX0NQVV9UT19CRTMyKFBCRkZfTFZNKSk7CisJCQlyZXR1cm4gMTsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIGludAorYW1pZ2FfcGFydGl0aW9uX2dldF9mbGFnIChjb25zdCBQZWRQYXJ0aXRpb24qIHBhcnQsIFBlZFBhcnRpdGlvbkZsYWcgZmxhZykKK3sKKwlzdHJ1Y3QgUGFydGl0aW9uQmxvY2sgKnBhcnRpdGlvbjsKKworCVBFRF9BU1NFUlQgKHBhcnQgIT0gTlVMTCwgcmV0dXJuIDApOworCVBFRF9BU1NFUlQgKHBhcnQtPmRpc2tfc3BlY2lmaWMgIT0gTlVMTCwgcmV0dXJuIDApOworCisJcGFydGl0aW9uID0gUEFSVChwYXJ0LT5kaXNrX3NwZWNpZmljKTsKKworCXN3aXRjaCAoZmxhZykgeworCQljYXNlIFBFRF9QQVJUSVRJT05fQk9PVDoKKwkJCXJldHVybiAocGFydGl0aW9uLT5wYl9GbGFncyAmIFBFRF9DUFVfVE9fQkUzMihQQkZGX0JPT1RBQkxFKSk7CisJCWNhc2UgUEVEX1BBUlRJVElPTl9ISURERU46CisJCQlyZXR1cm4gKHBhcnRpdGlvbi0+cGJfRmxhZ3MgJiBQRURfQ1BVX1RPX0JFMzIoUEJGRl9OT01PVU5UKSk7CisJCWNhc2UgUEVEX1BBUlRJVElPTl9SQUlEOgorCQkJcmV0dXJuIChwYXJ0aXRpb24tPnBiX0ZsYWdzICYgUEVEX0NQVV9UT19CRTMyKFBCRkZfUkFJRCkpOworCQljYXNlIFBFRF9QQVJUSVRJT05fTFZNOgorCQkJcmV0dXJuIChwYXJ0aXRpb24tPnBiX0ZsYWdzICYgUEVEX0NQVV9UT19CRTMyKFBCRkZfTFZNKSk7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK2FtaWdhX3BhcnRpdGlvbl9pc19mbGFnX2F2YWlsYWJsZSAoY29uc3QgUGVkUGFydGl0aW9uKiBwYXJ0LAorCQkJCSBQZWRQYXJ0aXRpb25GbGFnIGZsYWcpCit7CisJc3dpdGNoIChmbGFnKSB7CisJY2FzZSBQRURfUEFSVElUSU9OX0JPT1Q6CisJY2FzZSBQRURfUEFSVElUSU9OX0hJRERFTjoKKwljYXNlIFBFRF9QQVJUSVRJT05fUkFJRDoKKwljYXNlIFBFRF9QQVJUSVRJT05fTFZNOgorCQlyZXR1cm4gMTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkICAgICAgICAgICAgIAorYW1pZ2FfcGFydGl0aW9uX3NldF9uYW1lIChQZWRQYXJ0aXRpb24qIHBhcnQsIGNvbnN0IGNoYXIqIG5hbWUpCit7ICAgICAgICAgICAgICAgCisJc3RydWN0IFBhcnRpdGlvbkJsb2NrICpwYXJ0aXRpb247CisKKwlQRURfQVNTRVJUIChwYXJ0ICE9IE5VTEwsIHJldHVybik7CisJUEVEX0FTU0VSVCAocGFydC0+ZGlza19zcGVjaWZpYyAhPSBOVUxMLCByZXR1cm4pOworCisJcGFydGl0aW9uID0gUEFSVChwYXJ0LT5kaXNrX3NwZWNpZmljKTsKKwlfYW1pZ2Ffc2V0X2JzdHIobmFtZSwgcGFydGl0aW9uLT5wYl9Ecml2ZU5hbWUsIDMyKTsKK30KK3N0YXRpYyBjb25zdCBjaGFyKgorYW1pZ2FfcGFydGl0aW9uX2dldF9uYW1lIChjb25zdCBQZWRQYXJ0aXRpb24qIHBhcnQpCit7CisJc3RydWN0IFBhcnRpdGlvbkJsb2NrICpwYXJ0aXRpb247CisKKwlQRURfQVNTRVJUIChwYXJ0ICE9IE5VTEwsIHJldHVybiAwKTsKKwlQRURfQVNTRVJUIChwYXJ0LT5kaXNrX3NwZWNpZmljICE9IE5VTEwsIHJldHVybiAwKTsKKworCXBhcnRpdGlvbiA9IFBBUlQocGFydC0+ZGlza19zcGVjaWZpYyk7CisKKwlyZXR1cm4gX2FtaWdhX2dldF9ic3RyKHBhcnRpdGlvbi0+cGJfRHJpdmVOYW1lKTsKK30KKworc3RhdGljIFBlZENvbnN0cmFpbnQqCitfYW1pZ2FfZ2V0X2NvbnN0cmFpbnQgKGNvbnN0IFBlZERpc2sgKmRpc2spCit7CisJUGVkRGV2aWNlICpkZXYgPSBkaXNrLT5kZXY7CisJUGVkQWxpZ25tZW50IHN0YXJ0X2FsaWduLCBlbmRfYWxpZ247CisJUGVkR2VvbWV0cnkgbWF4X2dlb207CisJUGVkU2VjdG9yIGN5bF9zaXplID0gZGV2LT5od19nZW9tLnNlY3RvcnMgKiBkZXYtPmh3X2dlb20uaGVhZHM7CisKKwlpZiAoIXBlZF9hbGlnbm1lbnRfaW5pdCgmc3RhcnRfYWxpZ24sIDAsIGN5bF9zaXplKSkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKCFwZWRfYWxpZ25tZW50X2luaXQoJmVuZF9hbGlnbiwgLTEsIGN5bF9zaXplKSkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKCFwZWRfZ2VvbWV0cnlfaW5pdCgmbWF4X2dlb20sIGRldiwgTUFYX1JEQl9CTE9DSyArIDEsCisJCQkgICAgICAgZGV2LT5sZW5ndGggLSBNQVhfUkRCX0JMT0NLIC0gMSkpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIHBlZF9jb25zdHJhaW50X25ldyAoJnN0YXJ0X2FsaWduLCAmZW5kX2FsaWduLAorCQkmbWF4X2dlb20sICZtYXhfZ2VvbSwgMSwgZGV2LT5sZW5ndGgpOworfQorCitzdGF0aWMgaW50CithbWlnYV9wYXJ0aXRpb25fYWxpZ24gKFBlZFBhcnRpdGlvbiogcGFydCwgY29uc3QgUGVkQ29uc3RyYWludCogY29uc3RyYWludCkKK3sKKwlQRURfQVNTRVJUIChwYXJ0ICE9IE5VTEwsIHJldHVybiAwKTsKKwlQRURfQVNTRVJUIChwYXJ0LT5kaXNrICE9IE5VTEwsIHJldHVybiAwKTsKKwkKKwlpZiAoX3BlZF9wYXJ0aXRpb25fYXR0ZW1wdF9hbGlnbiAocGFydCwgY29uc3RyYWludCwKKwkJCQkJICBfYW1pZ2FfZ2V0X2NvbnN0cmFpbnQgKHBhcnQtPmRpc2spKSkKKwkgICAgICAgCXJldHVybiAxOworCisjaWZuZGVmIERJU0NPVkVSX09OTFkKKwlwZWRfZXhjZXB0aW9uX3Rocm93IChQRURfRVhDRVBUSU9OX0VSUk9SLCBQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJXygiVW5hYmxlIHRvIHNhdGlzZnkgYWxsIGNvbnN0cmFpbnRzIG9uIHRoZSBwYXJ0aXRpb24uIikpOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2FtaWdhX3BhcnRpdGlvbl9lbnVtZXJhdGUgKFBlZFBhcnRpdGlvbiogcGFydCkKK3sKKwlpbnQgaTsKKwlQZWRQYXJ0aXRpb24qIHA7CisJCisJUEVEX0FTU0VSVCAocGFydCAhPSBOVUxMLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAocGFydC0+ZGlzayAhPSBOVUxMLCByZXR1cm4gMCk7CisKKwkvKiBuZXZlciBjaGFuZ2UgdGhlIHBhcnRpdGlvbiBudW1iZXJzICovCisJaWYgKHBhcnQtPm51bSAhPSAtMSkKKwkJcmV0dXJuIDE7CisJZm9yIChpID0gMTsgaSA8PSBBTUlHQV9NQVhfUEFSVElUSU9OUzsgaSsrKSB7CisJCXAgPSBwZWRfZGlza19nZXRfcGFydGl0aW9uIChwYXJ0LT5kaXNrLCBpKTsKKwkJaWYgKCFwKSB7CisJCQlwYXJ0LT5udW0gPSBpOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwkvKiBmYWlsZWQgdG8gYWxsb2NhdGUgYSBudW1iZXIgKi8KKyNpZm5kZWYgRElTQ09WRVJfT05MWQorCXBlZF9leGNlcHRpb25fdGhyb3cgKFBFRF9FWENFUFRJT05fRVJST1IsIFBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQlfKCJVbmFibGUgdG8gYWxsb2NhdGUgYSBwYXJ0aXRpb24gbnVtYmVyLiIpKTsKKyNlbmRpZgorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CithbWlnYV9hbGxvY19tZXRhZGF0YSAoUGVkRGlzayogZGlzaykKK3sKKwlQZWRQYXJ0aXRpb24qCQluZXdfcGFydDsKKwlQZWRDb25zdHJhaW50KgkJY29uc3RyYWludF9hbnkgPSBOVUxMOworCisJUEVEX0FTU0VSVCAoZGlzayAhPSBOVUxMLCBnb3RvIGVycm9yKTsKKwlQRURfQVNTRVJUIChkaXNrLT5kZXYgIT0gTlVMTCwgZ290byBlcnJvcik7CisKKwljb25zdHJhaW50X2FueSA9IHBlZF9jb25zdHJhaW50X2FueSAoZGlzay0+ZGV2KTsKKworCS8qIEFsbG9jYXRlIHNwYWNlIGZvciB0aGUgUkRCICovCisJbmV3X3BhcnQgPSBwZWRfcGFydGl0aW9uX25ldyAoZGlzaywgUEVEX1BBUlRJVElPTl9NRVRBREFUQSwgTlVMTCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBNQVhfUkRCX0JMT0NLKTsKKwlpZiAoIW5ld19wYXJ0KQorCQlnb3RvIGVycm9yOworCisJaWYgKCFwZWRfZGlza19hZGRfcGFydGl0aW9uIChkaXNrLCBuZXdfcGFydCwgY29uc3RyYWludF9hbnkpKSB7CisJCXBlZF9wYXJ0aXRpb25fZGVzdHJveSAobmV3X3BhcnQpOworCQlnb3RvIGVycm9yOworCX0KKworCXBlZF9jb25zdHJhaW50X2Rlc3Ryb3kgKGNvbnN0cmFpbnRfYW55KTsKKwlyZXR1cm4gMTsKK2Vycm9yOgorCXBlZF9jb25zdHJhaW50X2Rlc3Ryb3kgKGNvbnN0cmFpbnRfYW55KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorYW1pZ2FfZ2V0X21heF9wcmltYXJ5X3BhcnRpdGlvbl9jb3VudCAoY29uc3QgUGVkRGlzayogZGlzaykKK3sKKwlyZXR1cm4gQU1JR0FfTUFYX1BBUlRJVElPTlM7Cit9CisKK3N0YXRpYyBQZWREaXNrT3BzIGFtaWdhX2Rpc2tfb3BzID0geworCXByb2JlOgkJCWFtaWdhX3Byb2JlLAorI2lmbmRlZiBESVNDT1ZFUl9PTkxZCisJY2xvYmJlcjoJCWFtaWdhX2Nsb2JiZXIsCisjZWxzZQorCWNsb2JiZXI6CQlOVUxMLAorI2VuZGlmCisJYWxsb2M6CQkJYW1pZ2FfYWxsb2MsCisJZHVwbGljYXRlOgkJYW1pZ2FfZHVwbGljYXRlLAorCWZyZWU6CQkJYW1pZ2FfZnJlZSwKKwlyZWFkOgkJCWFtaWdhX3JlYWQsCisjaWZuZGVmIERJU0NPVkVSX09OTFkKKwl3cml0ZToJCQlhbWlnYV93cml0ZSwKKyNlbHNlCisJd3JpdGU6CQkJTlVMTCwKKyNlbmRpZgorCisJcGFydGl0aW9uX25ldzoJCWFtaWdhX3BhcnRpdGlvbl9uZXcsCisJcGFydGl0aW9uX2R1cGxpY2F0ZToJYW1pZ2FfcGFydGl0aW9uX2R1cGxpY2F0ZSwKKwlwYXJ0aXRpb25fZGVzdHJveToJYW1pZ2FfcGFydGl0aW9uX2Rlc3Ryb3ksCisJcGFydGl0aW9uX3NldF9zeXN0ZW06CWFtaWdhX3BhcnRpdGlvbl9zZXRfc3lzdGVtLAorCXBhcnRpdGlvbl9zZXRfZmxhZzoJYW1pZ2FfcGFydGl0aW9uX3NldF9mbGFnLAorCXBhcnRpdGlvbl9nZXRfZmxhZzoJYW1pZ2FfcGFydGl0aW9uX2dldF9mbGFnLAorCXBhcnRpdGlvbl9pc19mbGFnX2F2YWlsYWJsZToKKwkJCQlhbWlnYV9wYXJ0aXRpb25faXNfZmxhZ19hdmFpbGFibGUsCisJcGFydGl0aW9uX3NldF9uYW1lOglhbWlnYV9wYXJ0aXRpb25fc2V0X25hbWUsCisJcGFydGl0aW9uX2dldF9uYW1lOglhbWlnYV9wYXJ0aXRpb25fZ2V0X25hbWUsCisJcGFydGl0aW9uX2FsaWduOglhbWlnYV9wYXJ0aXRpb25fYWxpZ24sCisJcGFydGl0aW9uX2VudW1lcmF0ZToJYW1pZ2FfcGFydGl0aW9uX2VudW1lcmF0ZSwKKworCisJYWxsb2NfbWV0YWRhdGE6CQlhbWlnYV9hbGxvY19tZXRhZGF0YSwKKwlnZXRfbWF4X3ByaW1hcnlfcGFydGl0aW9uX2NvdW50OgorCQkJCWFtaWdhX2dldF9tYXhfcHJpbWFyeV9wYXJ0aXRpb25fY291bnQKK307CisKK3N0YXRpYyBQZWREaXNrVHlwZSBhbWlnYV9kaXNrX3R5cGUgPSB7CisJbmV4dDoJCU5VTEwsCisJbmFtZToJCSJhbWlnYSIsCisJb3BzOgkJJmFtaWdhX2Rpc2tfb3BzLAorCWZlYXR1cmVzOglQRURfRElTS19UWVBFX1BBUlRJVElPTl9OQU1FCit9OworCit2b2lkCitwZWRfZGlza19hbWlnYV9pbml0ICgpCit7CisJUEVEX0FTU0VSVCAoc2l6ZW9mIChzdHJ1Y3QgQW1pZ2FCbG9jaykgIT0gMywgcmV0dXJuKTsKKwlQRURfQVNTRVJUIChzaXplb2YgKHN0cnVjdCBSaWdpZERpc2tCbG9jaykgIT0gNjQsIHJldHVybik7CisJUEVEX0FTU0VSVCAoc2l6ZW9mIChzdHJ1Y3QgUGFydGl0aW9uQmxvY2spICE9IDY0LCByZXR1cm4pOworCVBFRF9BU1NFUlQgKHNpemVvZiAoc3RydWN0IExpbmtlZEJsb2NrKSAhPSA1LCByZXR1cm4pOworCVBFRF9BU1NFUlQgKHNpemVvZiAoc3RydWN0IExpbmtlZDJCbG9jaykgIT0gMTgsIHJldHVybik7CisKKwlwZWRfZGlza190eXBlX3JlZ2lzdGVyICgmYW1pZ2FfZGlza190eXBlKTsKK30KKwordm9pZAorcGVkX2Rpc2tfYW1pZ2FfZG9uZSAoKQoreworCXBlZF9kaXNrX3R5cGVfdW5yZWdpc3RlciAoJmFtaWdhX2Rpc2tfdHlwZSk7Cit9CmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2xhYmVscy9zdW4uYyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvbGFiZWxzL3N1bi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlYjQxMjMKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2xhYmVscy9zdW4uYwpAQCAtMCwwICsxLDg1MyBAQAorLyogLSotIE1vZGU6IGM7IHRhYi13aWR0aDogODsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogOCAtKi0KKworICAgIGxpYnBhcnRlZCAtIGEgbGlicmFyeSBmb3IgbWFuaXB1bGF0aW5nIGRpc2sgcGFydGl0aW9ucworICAgIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwNSwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKKworICAgIENvbnRyaWJ1dG9yOiAgQmVuIENvbGxpbnMgPGJjb2xsaW5zQGRlYmlhbi5vcmc+CisqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpbmNsdWRlIDxwYXJ0ZWQvcGFydGVkLmg+CisjaW5jbHVkZSA8cGFydGVkL2RlYnVnLmg+CisjaW5jbHVkZSA8cGFydGVkL2VuZGlhbi5oPgorCisjaWYgRU5BQkxFX05MUworIyAgaW5jbHVkZSA8bGliaW50bC5oPgorIyAgZGVmaW5lIF8oU3RyaW5nKSBkZ2V0dGV4dCAoUEFDS0FHRSwgU3RyaW5nKQorI2Vsc2UKKyMgIGRlZmluZSBfKFN0cmluZykgKFN0cmluZykKKyNlbmRpZiAvKiBFTkFCTEVfTkxTICovCisKKy8qIE1vc3Qgb2YgdGhpcyBjYW1lIGZyb20gdXRpbC1saW51eCdzIHN1biBzdXBwb3J0LCB3aGljaCB3YXMgbW9zdGx5IGRvbmUKKyAgIGJ5IEpha3ViIEplbGluZWsuICAqLworCisjZGVmaW5lIFNVTl9ESVNLX01BR0lDCQkweERBQkUJLyogRGlzayBtYWdpYyBudW1iZXIgKi8KKyNkZWZpbmUgU1VOX0RJU0tfTUFYUEFSVElUSU9OUwk4CisKKyNkZWZpbmUgV0hPTEVfRElTS19JRAkJMHgwNQorI2RlZmluZSBXSE9MRV9ESVNLX1BBUlQJCTIJLyogYXMgaW4gMCwgMSwgMiAoM3JkIHBhcnRpdGlvbikgKi8KKyNkZWZpbmUgTElOVVhfU1dBUF9JRAkJMHg4MgorCit0eXBlZGVmIHN0cnVjdCBfU3VuUmF3UGFydGl0aW9uICAgICBTdW5SYXdQYXJ0aXRpb247Cit0eXBlZGVmIHN0cnVjdCBfU3VuUGFydGl0aW9uSW5mbyAgICBTdW5QYXJ0aXRpb25JbmZvOwordHlwZWRlZiBzdHJ1Y3QgX1N1blJhd0xhYmVsICAgICAgICAgU3VuUmF3TGFiZWw7Cit0eXBlZGVmIHN0cnVjdCBfU3VuUGFydGl0aW9uRGF0YSAgICBTdW5QYXJ0aXRpb25EYXRhOwordHlwZWRlZiBzdHJ1Y3QgX1N1bkRpc2tEYXRhICAgICAgICAgU3VuRGlza0RhdGE7CisKK3N0cnVjdCBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgX1N1blJhd1BhcnRpdGlvbiB7CisJdV9pbnQzMl90CXN0YXJ0X2N5bGluZGVyOyAvKiB3aGVyZSB0aGUgcGFydCBzdGFydHMuLi4gKi8KKwl1X2ludDMyX3QJbnVtX3NlY3RvcnM7CS8qIC4uLmFuZCBpdCdzIGxlbmd0aCAqLworfTsKKworc3RydWN0IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBfU3VuUGFydGl0aW9uSW5mbyB7CisJdV9pbnQ4X3QJc3BhcmUxOworCXVfaW50OF90CWlkOwkJLyogUGFydGl0aW9uIHR5cGUgKi8KKwl1X2ludDhfdAlzcGFyZTI7CisJdV9pbnQ4X3QJZmxhZ3M7CQkvKiBQYXJ0aXRpb24gZmxhZ3MgKi8KK307CisKK3N0cnVjdCBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgX1N1blJhd0xhYmVsIHsKKwljaGFyIAkJaW5mb1sxMjhdOwkvKiBJbmZvcm1hdGl2ZSB0ZXh0IHN0cmluZyAqLworCXVfaW50OF90CXNwYXJlMFsxNF07CisJU3VuUGFydGl0aW9uSW5mbyBpbmZvc1tTVU5fRElTS19NQVhQQVJUSVRJT05TXTsKKwl1X2ludDhfdAlzcGFyZTFbMjQ2XTsJLyogQm9vdCBpbmZvcm1hdGlvbiBldGMuICovCisJdV9pbnQxNl90CXJzcGVlZDsJCS8qIERpc2sgcm90YXRpb25hbCBzcGVlZCAqLworCXVfaW50MTZfdAlwY3lsY291bnQ7CS8qIFBoeXNpY2FsIGN5bGluZGVyIGNvdW50ICovCisJdV9pbnQxNl90CXNwYXJlY3lsOwkvKiBleHRyYSBzZWN0cyBwZXIgY3lsaW5kZXIgKi8KKwl1X2ludDhfdAlzcGFyZTJbNF07CS8qIE1vcmUgbWFnaWMuLi4gKi8KKwl1X2ludDE2X3QJaWxmYWN0OwkJLyogSW50ZXJsZWF2ZSBmYWN0b3IgKi8KKwl1X2ludDE2X3QJbmN5bDsJCS8qIERhdGEgY3lsaW5kZXIgY291bnQgKi8KKwl1X2ludDE2X3QJbmFjeWw7CQkvKiBBbHQuIGN5bGluZGVyIGNvdW50ICovCisJdV9pbnQxNl90CW50cmtzOwkJLyogVHJhY2tzIHBlciBjeWxpbmRlciAqLworCXVfaW50MTZfdAluc2VjdDsJCS8qIFNlY3RvcnMgcGVyIHRyYWNrICovCisJdV9pbnQ4X3QJc3BhcmUzWzRdOwkvKiBFdmVuIG1vcmUgbWFnaWMuLi4gKi8KKwlTdW5SYXdQYXJ0aXRpb24gcGFydGl0aW9uc1tTVU5fRElTS19NQVhQQVJUSVRJT05TXTsKKwl1X2ludDE2X3QJbWFnaWM7CQkvKiBNYWdpYyBudW1iZXIgKi8KKwl1X2ludDE2X3QJY3N1bTsJCS8qIExhYmVsIHhvcidkIGNoZWNrc3VtICovCit9OworCitzdHJ1Y3QgX1N1blBhcnRpdGlvbkRhdGEgeworCXVfaW50OF90CQl0eXBlOworCWludAkJCWlzX2Jvb3Q7CisJaW50CQkJaXNfcm9vdDsKKwlpbnQJCQlpc19sdm07Cit9OworCitzdHJ1Y3QgX1N1bkRpc2tEYXRhIHsKKwlQZWRTZWN0b3IJCWxlbmd0aDsgLyogVGhpcyBpcyBiYXNlZCBvbiBjeWwgLSBhbHQtY3lsICovCisJU3VuUmF3TGFiZWwJCXJhd19sYWJlbDsKK307CisKK3N0YXRpYyBQZWREaXNrVHlwZSBzdW5fZGlza190eXBlOworCisvKiBDaGVja3N1bSBjb21wdXRhdGlvbiAqLworc3RhdGljIHZvaWQKK3N1bl9jb21wdXRlX2NoZWNrc3VtIChTdW5SYXdMYWJlbCAqbGFiZWwpCit7CisJdV9pbnQxNl90ICp1c2ggPSAodV9pbnQxNl90ICopbGFiZWw7CisJdV9pbnQxNl90IGNzdW0gPSAwOworCisgICAgICAgIHdoaWxlKHVzaCA8ICh1X2ludDE2X3QgKikoJmxhYmVsLT5jc3VtKSkKKyAgICAgICAgICAgICAgICBjc3VtIF49ICp1c2grKzsKKyAgICAgICAgbGFiZWwtPmNzdW0gPSBjc3VtOworfQorCisvKiBDaGVja3N1bSBWZXJpZmljYXRpb24gKi8KK3N0YXRpYyBpbnQKK3N1bl92ZXJpZnlfY2hlY2tzdW0gKFN1blJhd0xhYmVsICpsYWJlbCkKK3sKKwl1X2ludDE2X3QgKnVzaCA9ICgodV9pbnQxNl90ICopKGxhYmVsICsgMSkpIC0gMTsKKwl1X2ludDE2X3QgY3N1bSA9IDA7CisKKwl3aGlsZSAodXNoID49ICh1X2ludDE2X3QgKilsYWJlbCkKKwkJY3N1bSBePSAqdXNoLS07CisKKwlyZXR1cm4gIWNzdW07Cit9CisKK3N0YXRpYyBpbnQKK3N1bl9wcm9iZSAoY29uc3QgUGVkRGV2aWNlICpkZXYpCit7CisJU3VuUmF3TGFiZWwJbGFiZWw7CisKKwlQRURfQVNTRVJUIChkZXYgIT0gTlVMTCwgcmV0dXJuIDApOworCisgICAgICAgIGlmIChkZXYtPnNlY3Rvcl9zaXplICE9IDUxMikKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKworCWlmICghcGVkX2RldmljZV9yZWFkIChkZXYsICZsYWJlbCwgMCwgMSkpCisJCXJldHVybiAwOworCisJLyogY2hlY2sgbWFnaWMgKi8KKwlpZiAoUEVEX0JFMTZfVE9fQ1BVIChsYWJlbC5tYWdpYykgIT0gU1VOX0RJU0tfTUFHSUMpCisJCXJldHVybiAwOworCisjaWZuZGVmIERJU0NPVkVSX09OTFkKKwlpZiAoIXN1bl92ZXJpZnlfY2hlY2tzdW0oJmxhYmVsKSkgeworCQlwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCVBFRF9FWENFUFRJT05fRVJST1IsCisJCQlQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCV8oIkNvcnJ1cHRlZCBTdW4gZGlzayBsYWJlbCBkZXRlY3RlZC4iKSk7CisJCXJldHVybiAwOworCX0KKyNlbmRpZgorCisJcmV0dXJuIDE7Cit9CisKKyNpZm5kZWYgRElTQ09WRVJfT05MWQorc3RhdGljIGludAorc3VuX2Nsb2JiZXIgKFBlZERldmljZSogZGV2KQoreworCVN1blJhd0xhYmVsIGxhYmVsOworCisJUEVEX0FTU0VSVCAoZGV2ICE9IE5VTEwsIHJldHVybiAwKTsKKwlQRURfQVNTRVJUIChzdW5fcHJvYmUgKGRldiksIHJldHVybiAwKTsKKworCWlmICghcGVkX2RldmljZV9yZWFkIChkZXYsICZsYWJlbCwgMCwgMSkpCisJCXJldHVybiAwOworCQorCWxhYmVsLm1hZ2ljID0gMDsKKwlyZXR1cm4gcGVkX2RldmljZV93cml0ZSAoZGV2LCAmbGFiZWwsIDAsIDEpOworfQorI2VuZGlmIC8qICFESVNDT1ZFUl9PTkxZICovCisKK3N0YXRpYyBQZWREaXNrKgorc3VuX2FsbG9jIChjb25zdCBQZWREZXZpY2UqIGRldikKK3sKKwlQZWREaXNrKglkaXNrOworCVN1blJhd0xhYmVsKglsYWJlbDsKKwlTdW5EaXNrRGF0YSoJc3VuX3NwZWNpZmljOworCVBlZENIU0dlb21ldHJ5KgliaW9zX2dlb20gPSAmKChQZWREZXZpY2UqKWRldiktPmJpb3NfZ2VvbTsKKwlQZWRTZWN0b3IJY3lsX3NpemUgPSBiaW9zX2dlb20tPnNlY3RvcnMgKiBiaW9zX2dlb20tPmhlYWRzOworCisgICAgICAgIGRpc2sgPSBfcGVkX2Rpc2tfYWxsb2MgKGRldiwgJnN1bl9kaXNrX3R5cGUpOworCWlmICghZGlzaykKKwkJZ290byBlcnJvcjsKKworCWRpc2stPmRpc2tfc3BlY2lmaWMgPSAoU3VuRGlza0RhdGEqKSBwZWRfbWFsbG9jIChzaXplb2YgKFN1bkRpc2tEYXRhKSk7CisJaWYgKCFkaXNrLT5kaXNrX3NwZWNpZmljKQorCQlnb3RvIGVycm9yX2ZyZWVfZGlzazsKKwlzdW5fc3BlY2lmaWMgPSAoU3VuRGlza0RhdGEqKSBkaXNrLT5kaXNrX3NwZWNpZmljOworCisJYmlvc19nZW9tLT5jeWxpbmRlcnMgPSBkZXYtPmxlbmd0aCAvIGN5bF9zaXplOworCXN1bl9zcGVjaWZpYy0+bGVuZ3RoID0gYmlvc19nZW9tLT5jeWxpbmRlcnMgKiBjeWxfc2l6ZTsKKworCWxhYmVsID0gJnN1bl9zcGVjaWZpYy0+cmF3X2xhYmVsOworCW1lbXNldChsYWJlbCwgMCwgc2l6ZW9mKFN1blJhd0xhYmVsKSk7CisKKwkvKiAjZ2VudG9vLXNwYXJjIHBlb3BsZSBhZ3JlZSB0aGF0IG5hY3lsID0gMCBpcyB0aGUgYmVzdCBvcHRpb24gKi8KKwlsYWJlbC0+bWFnaWMJPSBQRURfQ1BVX1RPX0JFMTYgKFNVTl9ESVNLX01BR0lDKTsKKwlsYWJlbC0+bmFjeWwJPSAwOworCWxhYmVsLT5wY3lsY291bnQJPSBQRURfQ1BVX1RPX0JFMTYgKGJpb3NfZ2VvbS0+Y3lsaW5kZXJzKTsKKwlsYWJlbC0+cnNwZWVkCT0gUEVEX0NQVV9UT19CRTE2ICg1NDAwKTsKKwlsYWJlbC0+aWxmYWN0CT0gUEVEX0NQVV9UT19CRTE2ICgxKTsKKwlsYWJlbC0+c3BhcmVjeWwJPSAwOworCWxhYmVsLT5udHJrcwk9IFBFRF9DUFVfVE9fQkUxNiAoYmlvc19nZW9tLT5oZWFkcyk7CisJbGFiZWwtPm5zZWN0CT0gUEVEX0NQVV9UT19CRTE2IChiaW9zX2dlb20tPnNlY3RvcnMpOworCWxhYmVsLT5uY3lsCT0gUEVEX0NQVV9UT19CRTE2IChiaW9zX2dlb20tPmN5bGluZGVycyAtIDApOworCisJLyogQWRkIGEgd2hvbGUgZGlzayBwYXJ0aXRpb24gYXQgYSBtaW5pbXVtICovCisJbGFiZWwtPmluZm9zW1dIT0xFX0RJU0tfUEFSVF0uaWQgPSBXSE9MRV9ESVNLX0lEOworCWxhYmVsLT5wYXJ0aXRpb25zW1dIT0xFX0RJU0tfUEFSVF0uc3RhcnRfY3lsaW5kZXIgPSAwOworCWxhYmVsLT5wYXJ0aXRpb25zW1dIT0xFX0RJU0tfUEFSVF0ubnVtX3NlY3RvcnMgPQorCQlQRURfQ1BVX1RPX0JFMzIoYmlvc19nZW9tLT5jeWxpbmRlcnMgKiBjeWxfc2l6ZSk7CisKKwkvKiBOb3cgYSBuZWF0byBzdHJpbmcgdG8gZGVzY3JpYmUgdGhpcyBsYWJlbCAqLworCXNucHJpbnRmKGxhYmVsLT5pbmZvLCBzaXplb2YobGFiZWwtPmluZm8pIC0gMSwKKwkJICJHTlUgUGFydGVkIEN1c3RvbSBjeWwgJWQgYWx0ICVkIGhkICVkIHNlYyAlZCIsCisJCSBQRURfQkUxNl9UT19DUFUobGFiZWwtPm5jeWwpLAorCQkgUEVEX0JFMTZfVE9fQ1BVKGxhYmVsLT5uYWN5bCksCisJCSBQRURfQkUxNl9UT19DUFUobGFiZWwtPm50cmtzKSwKKwkJIFBFRF9CRTE2X1RPX0NQVShsYWJlbC0+bnNlY3QpKTsKKworCXN1bl9jb21wdXRlX2NoZWNrc3VtKGxhYmVsKTsKKwlyZXR1cm4gZGlzazsKKworZXJyb3JfZnJlZV9kaXNrOgorCV9wZWRfZGlza19mcmVlIChkaXNrKTsKK2Vycm9yOgorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgUGVkRGlzayoKK3N1bl9kdXBsaWNhdGUgKGNvbnN0IFBlZERpc2sqIGRpc2spCit7CisJUGVkRGlzayoJbmV3X2Rpc2s7CisJU3VuRGlza0RhdGEqCW5ld19zdW5fZGF0YTsKKwlTdW5EaXNrRGF0YSoJb2xkX3N1bl9kYXRhID0gKFN1bkRpc2tEYXRhKikgZGlzay0+ZGlza19zcGVjaWZpYzsKKyAgICAgICAKKwluZXdfZGlzayA9IHBlZF9kaXNrX25ld19mcmVzaCAoZGlzay0+ZGV2LCAmc3VuX2Rpc2tfdHlwZSk7CisJaWYgKCFuZXdfZGlzaykKKwkJcmV0dXJuIE5VTEw7CisKKwluZXdfc3VuX2RhdGEgPSAoU3VuRGlza0RhdGEqKSBuZXdfZGlzay0+ZGlza19zcGVjaWZpYzsKKwltZW1jcHkgKG5ld19zdW5fZGF0YSwgb2xkX3N1bl9kYXRhLCBzaXplb2YgKFN1bkRpc2tEYXRhKSk7CisJcmV0dXJuIG5ld19kaXNrOworfQorCitzdGF0aWMgdm9pZAorc3VuX2ZyZWUgKFBlZERpc2sgKmRpc2spCit7CisJcGVkX2ZyZWUgKGRpc2stPmRpc2tfc3BlY2lmaWMpOworCV9wZWRfZGlza19mcmVlIChkaXNrKTsKK30KKworc3RhdGljIGludAorX2NoZWNrX2dlb21ldHJ5X3Nhbml0eSAoUGVkRGlzayogZGlzaywgU3VuUmF3TGFiZWwqIGxhYmVsKQoreworCVBlZERldmljZSoJZGV2ID0gZGlzay0+ZGV2OworCisJaWYgKFBFRF9CRTE2X1RPX0NQVShsYWJlbC0+bnNlY3QpID09IGRldi0+aHdfZ2VvbS5zZWN0b3JzICYmCisJICAgIFBFRF9CRTE2X1RPX0NQVShsYWJlbC0+bnRya3MpID09IGRldi0+aHdfZ2VvbS5oZWFkcykKKwkJZGV2LT5iaW9zX2dlb20gPSBkZXYtPmh3X2dlb207CisKKwlpZiAoUEVEX0JFMTZfVE9fQ1BVKGxhYmVsLT5uc2VjdCkgIT0gZGV2LT5iaW9zX2dlb20uc2VjdG9ycyB8fAorCSAgICBQRURfQkUxNl9UT19DUFUobGFiZWwtPm50cmtzKSAhPSBkZXYtPmJpb3NfZ2VvbS5oZWFkcykgeworI2lmbmRlZiBESVNDT1ZFUl9PTkxZCisJCWlmIChwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCQlQRURfRVhDRVBUSU9OX1dBUk5JTkcsCisJCQkJUEVEX0VYQ0VQVElPTl9JR05PUkVfQ0FOQ0VMLAorCQkJCV8oIlRoZSBkaXNrIENIUyBnZW9tZXRyeSAoJWQsJWQsJWQpIHJlcG9ydGVkICIKKwkJCQkgICJieSB0aGUgb3BlcmF0aW5nIHN5c3RlbSBkb2VzIG5vdCBtYXRjaCAiCisJCQkJICAidGhlIGdlb21ldHJ5IHN0b3JlZCBvbiB0aGUgZGlzayBsYWJlbCAiCisJCQkJICAiKCVkLCVkLCVkKS4iKSwKKwkJCQlkZXYtPmJpb3NfZ2VvbS5jeWxpbmRlcnMsCisJCQkgICAgICAgCWRldi0+Ymlvc19nZW9tLmhlYWRzLAorCQkJICAgICAgIAlkZXYtPmJpb3NfZ2VvbS5zZWN0b3JzLAorCQkJCVBFRF9CRTE2X1RPX0NQVShsYWJlbC0+cGN5bGNvdW50KSwKKwkJCQlQRURfQkUxNl9UT19DUFUobGFiZWwtPm50cmtzKSwKKwkJCQlQRURfQkUxNl9UT19DUFUobGFiZWwtPm5zZWN0KSkKKwkJCT09IFBFRF9FWENFUFRJT05fQ0FOQ0VMKQorCQkJcmV0dXJuIDA7CisjZW5kaWYKKwkJZGV2LT5iaW9zX2dlb20uc2VjdG9ycyA9IFBFRF9CRTE2X1RPX0NQVShsYWJlbC0+bnNlY3QpOworCQlkZXYtPmJpb3NfZ2VvbS5oZWFkcyA9IFBFRF9CRTE2X1RPX0NQVShsYWJlbC0+bnRya3MpOworCQlkZXYtPmJpb3NfZ2VvbS5jeWxpbmRlcnMgPSBQRURfQkUxNl9UT19DUFUobGFiZWwtPnBjeWxjb3VudCk7CisKKwkJaWYgKGRldi0+Ymlvc19nZW9tLnNlY3RvcnMgKiBkZXYtPmJpb3NfZ2VvbS5oZWFkcworCQkJICAgICAgCSogZGV2LT5iaW9zX2dlb20uY3lsaW5kZXJzID4gZGV2LT5sZW5ndGgpIHsKKwkJCWlmIChwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCQlQRURfRVhDRVBUSU9OX1dBUk5JTkcsCisJCQkJUEVEX0VYQ0VQVElPTl9JR05PUkVfQ0FOQ0VMLAorCQkJCV8oIlRoZSBkaXNrIGxhYmVsIGRlc2NyaWJlcyBhIGRpc2sgYmlnZ2VyIHRoYW4gIgorCQkJCSAgIiVzLiIpLAorCQkJCWRldi0+cGF0aCkKKwkJCQkhPSBQRURfRVhDRVBUSU9OX0lHTk9SRSkKKwkJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludAorc3VuX3JlYWQgKFBlZERpc2sqIGRpc2spCit7CisJU3VuUmF3TGFiZWwqIGxhYmVsOworCVN1blBhcnRpdGlvbkRhdGEqIHN1bl9kYXRhOworCVN1bkRpc2tEYXRhKiBkaXNrX2RhdGE7CisJaW50IGk7CisJUGVkUGFydGl0aW9uKiBwYXJ0OworCVBlZFNlY3RvciBlbmQsIHN0YXJ0LCBibG9jazsKKwlQZWRDb25zdHJhaW50KiBjb25zdHJhaW50X2V4YWN0OworCQorCVBFRF9BU1NFUlQgKGRpc2sgIT0gTlVMTCwgcmV0dXJuIDApOworCVBFRF9BU1NFUlQgKGRpc2stPmRldiAhPSBOVUxMLCByZXR1cm4gMCk7CisJUEVEX0FTU0VSVCAoZGlzay0+ZGlza19zcGVjaWZpYyAhPSBOVUxMLCByZXR1cm4gMCk7CisJCisJZGlza19kYXRhID0gKFN1bkRpc2tEYXRhKikgZGlzay0+ZGlza19zcGVjaWZpYzsKKwlsYWJlbCA9ICZkaXNrX2RhdGEtPnJhd19sYWJlbDsKKworCXBlZF9kaXNrX2RlbGV0ZV9hbGwgKGRpc2spOworCisJaWYgKCFwZWRfZGV2aWNlX3JlYWQgKGRpc2stPmRldiwgbGFiZWwsIDAsIDEpKQorCQlnb3RvIGVycm9yOworCWlmICghX2NoZWNrX2dlb21ldHJ5X3Nhbml0eSAoZGlzaywgbGFiZWwpKQorCQlnb3RvIGVycm9yOworCisJYmxvY2sgPSBkaXNrLT5kZXYtPmJpb3NfZ2VvbS5zZWN0b3JzICogZGlzay0+ZGV2LT5iaW9zX2dlb20uaGVhZHM7CisJZGlza19kYXRhLT5sZW5ndGggPSBibG9jayAqIGRpc2stPmRldi0+Ymlvc19nZW9tLmN5bGluZGVyczsKKworCWZvciAoaSA9IDA7IGkgPCBTVU5fRElTS19NQVhQQVJUSVRJT05TOyBpKyspIHsKKwkJaWYgKCFQRURfQkUzMl9UT19DUFUobGFiZWwtPnBhcnRpdGlvbnNbaV0ubnVtX3NlY3RvcnMpKQorCQkJY29udGludWU7CisJCWlmICghbGFiZWwtPmluZm9zW2ldLmlkKQorCQkJY29udGludWU7CisJCWlmIChsYWJlbC0+aW5mb3NbaV0uaWQgPT0gV0hPTEVfRElTS19JRCkKKwkgICAgICAgCQljb250aW51ZTsKKworCQlzdGFydCA9IFBFRF9CRTMyX1RPX0NQVShsYWJlbC0+cGFydGl0aW9uc1tpXS5zdGFydF9jeWxpbmRlcikKKwkJCQkgICAgKiBibG9jazsKKwkJZW5kID0gc3RhcnQKKwkJICAgICAgKyBQRURfQkUzMl9UT19DUFUobGFiZWwtPnBhcnRpdGlvbnNbaV0ubnVtX3NlY3RvcnMpIC0gMTsKKworCQlwYXJ0ID0gcGVkX3BhcnRpdGlvbl9uZXcgKGRpc2ssIDAsIE5VTEwsIHN0YXJ0LCBlbmQpOworCQlpZiAoIXBhcnQpCisJCQlnb3RvIGVycm9yOworCisJCXN1bl9kYXRhID0gcGFydC0+ZGlza19zcGVjaWZpYzsKKwkJc3VuX2RhdGEtPnR5cGUgPSBsYWJlbC0+aW5mb3NbaV0uaWQ7CisJCXN1bl9kYXRhLT5pc19ib290ID0gc3VuX2RhdGEtPnR5cGUgPT0gMHgxOworCQlzdW5fZGF0YS0+aXNfcm9vdCA9IHN1bl9kYXRhLT50eXBlID09IDB4MjsKKwkJc3VuX2RhdGEtPmlzX2x2bSA9IHN1bl9kYXRhLT50eXBlID09IDB4OGU7CisKKwkJcGFydC0+bnVtID0gaSArIDE7CisJCXBhcnQtPmZzX3R5cGUgPSBwZWRfZmlsZV9zeXN0ZW1fcHJvYmUgKCZwYXJ0LT5nZW9tKTsKKwkKKwkJY29uc3RyYWludF9leGFjdCA9IHBlZF9jb25zdHJhaW50X2V4YWN0ICgmcGFydC0+Z2VvbSk7CisJCWlmICghcGVkX2Rpc2tfYWRkX3BhcnRpdGlvbiAoZGlzaywgcGFydCwgY29uc3RyYWludF9leGFjdCkpCisJCQlnb3RvIGVycm9yOworCQlwZWRfY29uc3RyYWludF9kZXN0cm95IChjb25zdHJhaW50X2V4YWN0KTsKKwl9CisKKwlyZXR1cm4gMTsKKworIGVycm9yOgorCXJldHVybiAwOworfQorCisjaWZuZGVmIERJU0NPVkVSX09OTFkKK3N0YXRpYyB2b2lkCitfcHJvYmVfYW5kX3VzZV9vbGRfaW5mbyAoY29uc3QgUGVkRGlzayogZGlzaykKK3sKKwlTdW5EaXNrRGF0YSoJCXN1bl9zcGVjaWZpYzsKKwlTdW5SYXdMYWJlbAkJb2xkX2xhYmVsOworCisJc3VuX3NwZWNpZmljID0gKFN1bkRpc2tEYXRhKikgZGlzay0+ZGlza19zcGVjaWZpYzsKKworCWlmICghcGVkX2RldmljZV9yZWFkIChkaXNrLT5kZXYsICZvbGRfbGFiZWwsIDAsIDEpKQorCQlyZXR1cm47CisJaWYgKG9sZF9sYWJlbC5pbmZvIFswXQorCSAgICAmJiBQRURfQkUxNl9UT19DUFUgKG9sZF9sYWJlbC5tYWdpYykgPT0gU1VOX0RJU0tfTUFHSUMpCisJCW1lbWNweSAoJnN1bl9zcGVjaWZpYy0+cmF3X2xhYmVsLCAmb2xkX2xhYmVsLCA1MTIpOworfQorCitzdGF0aWMgaW50CitzdW5fd3JpdGUgKGNvbnN0IFBlZERpc2sqIGRpc2spCit7CisJU3VuUmF3TGFiZWwqCQlsYWJlbDsKKwlTdW5QYXJ0aXRpb25EYXRhKglzdW5fZGF0YTsKKwlTdW5EaXNrRGF0YSoJCWRpc2tfZGF0YTsKKwlQZWRQYXJ0aXRpb24qCQlwYXJ0OworCWludAkJCWk7CisKKwlQRURfQVNTRVJUIChkaXNrICE9IE5VTEwsIHJldHVybiAwKTsKKwlQRURfQVNTRVJUIChkaXNrLT5kZXYgIT0gTlVMTCwgcmV0dXJuIDApOworCisJX3Byb2JlX2FuZF91c2Vfb2xkX2luZm8gKGRpc2spOworCisJZGlza19kYXRhID0gKFN1bkRpc2tEYXRhKikgZGlzay0+ZGlza19zcGVjaWZpYzsKKwlsYWJlbCA9ICZkaXNrX2RhdGEtPnJhd19sYWJlbDsKKworCW1lbXNldCAobGFiZWwtPnBhcnRpdGlvbnMsIDAsCisJCXNpemVvZiAoU3VuUmF3UGFydGl0aW9uKSAqIFNVTl9ESVNLX01BWFBBUlRJVElPTlMpOworCW1lbXNldCAobGFiZWwtPmluZm9zLCAwLAorCQlzaXplb2YgKFN1blBhcnRpdGlvbkluZm8pICogU1VOX0RJU0tfTUFYUEFSVElUSU9OUyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgU1VOX0RJU0tfTUFYUEFSVElUSU9OUzsgaSsrKSB7CisJCXBhcnQgPSBwZWRfZGlza19nZXRfcGFydGl0aW9uIChkaXNrLCBpICsgMSk7CisKKwkJaWYgKCFwYXJ0ICYmIGkgPT0gV0hPTEVfRElTS19QQVJUKSB7CisJCQkvKiBPaywgbm90aGluZyBleHBsaWNpdGx5IGluIHRoZSB3aG9sZSBkaXNrCisJCQkgICBwYXJ0aXRpb24sIHNvIGxldCdzIHB1dCBpdCB0aGVyZSBmb3Igc2FmZXR5CisJCQkgICBzYWtlLiAgKi8KKworCQkJbGFiZWwtPmluZm9zW2ldLmlkID0gV0hPTEVfRElTS19JRDsKKwkJCWxhYmVsLT5wYXJ0aXRpb25zW2ldLnN0YXJ0X2N5bGluZGVyID0gMDsKKwkJCWxhYmVsLT5wYXJ0aXRpb25zW2ldLm51bV9zZWN0b3JzID0gCisJCQkJUEVEX0NQVV9UT19CRTMyKGRpc2tfZGF0YS0+bGVuZ3RoKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghcGFydCkKKwkJCWNvbnRpbnVlOworCisJCXN1bl9kYXRhID0gcGFydC0+ZGlza19zcGVjaWZpYzsKKwkJbGFiZWwtPmluZm9zW2ldLmlkID0gc3VuX2RhdGEtPnR5cGU7CisJCWxhYmVsLT5wYXJ0aXRpb25zW2ldLnN0YXJ0X2N5bGluZGVyCisJCQk9IFBFRF9DUFVfVE9fQkUzMiAocGFydC0+Z2VvbS5zdGFydAorCQkJCS8gKGRpc2stPmRldi0+Ymlvc19nZW9tLnNlY3RvcnMKKwkJCQkgICAgICAgCSogZGlzay0+ZGV2LT5iaW9zX2dlb20uaGVhZHMpKTsKKwkJbGFiZWwtPnBhcnRpdGlvbnNbaV0ubnVtX3NlY3RvcnMKKwkJCT0gUEVEX0NQVV9UT19CRTMyIChwYXJ0LT5nZW9tLmVuZAorCQkJCQkgICAtIHBhcnQtPmdlb20uc3RhcnQgKyAxKTsKKwl9CisKKwkvKiBXZSBhc3N1bWUgdGhlIGhhcmRkcml2ZSBpcyBhbHdheXMgcmlnaHQsIGFuZCB0aGF0IHRoZSBsYWJlbCBtYXkKKwkgICBiZSB3cm9uZy4gSSBkb24ndCB0aGluayB0aGlzIHdpbGwgY2F1c2UgYW55IHByb2JsZW1zLCBzaW5jZSB0aGUKKwkgICBjeWxpbmRlciBjb3VudCBpcyBhbHdheXMgZW5mb3JjZWQgYnkgb3VyIGFsaWdubWVudCwgYW5kIHdlCisJICAgc2FuaXR5IGNoZWNrZWQgdGhlIHNlY3RvcnMvaGVhZHMgd2hlbiB3ZSBkZXRlY3RlZCB0aGUgZGV2aWNlLiBUaGUKKwkgICB3b3JzdCB0aGF0IGNvdWxkIGhhcHBlbiBoZXJlIGlzIHRoYXQgdGhlIGRyaXZlIHNlZW1zIGJpZ2dlciBvcgorCSAgIHNtYWxsZXIgdGhhbiBpdCByZWFsbHkgaXMsIGJ1dCB3ZSdsbCBoYXZlIHRoYXQgcHJvYmxlbSBldmVuIGlmIHdlCisJICAgZG9uJ3QgZG8gdGhpcy4gICovCisKKwlpZiAoZGlzay0+ZGV2LT5iaW9zX2dlb20uY3lsaW5kZXJzID4gNjU1MzYpIHsKKwkJcGVkX2V4Y2VwdGlvbl90aHJvdyAoCisJCQlQRURfRVhDRVBUSU9OX1dBUk5JTkcsCisJCQlQRURfRVhDRVBUSU9OX0lHTk9SRSwKKwkJCV8oIlRoZSBkaXNrIGhhcyAlZCBjeWxpbmRlcnMsIHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiAiCisJCQkgICJ0aGUgbWF4aW11bSBvZiA2NTUzNi4iKSwKKwkJCWRpc2stPmRldi0+Ymlvc19nZW9tLmN5bGluZGVycyk7CisJfQorCisJbGFiZWwtPnBjeWxjb3VudCA9IFBFRF9DUFVfVE9fQkUxNiAoZGlzay0+ZGV2LT5iaW9zX2dlb20uY3lsaW5kZXJzKTsKKwlsYWJlbC0+bmN5bCA9IFBFRF9DUFVfVE9fQkUxNiAoZGlzay0+ZGV2LT5iaW9zX2dlb20uY3lsaW5kZXJzCisJCQktIFBFRF9CRTE2X1RPX0NQVSAobGFiZWwtPm5hY3lsKSk7CisKKwlzdW5fY29tcHV0ZV9jaGVja3N1bSAobGFiZWwpOworCisJaWYgKCFwZWRfZGV2aWNlX3dyaXRlIChkaXNrLT5kZXYsIGxhYmVsLCAwLCAxKSkKKwkJZ290byBlcnJvcjsKKwlyZXR1cm4gcGVkX2RldmljZV9zeW5jIChkaXNrLT5kZXYpOworCitlcnJvcjoKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvKiAhRElTQ09WRVJfT05MWSAqLworCitzdGF0aWMgUGVkUGFydGl0aW9uKgorc3VuX3BhcnRpdGlvbl9uZXcgKGNvbnN0IFBlZERpc2sqIGRpc2ssIFBlZFBhcnRpdGlvblR5cGUgcGFydF90eXBlLAorCQkgICBjb25zdCBQZWRGaWxlU3lzdGVtVHlwZSogZnNfdHlwZSwKKwkJICAgUGVkU2VjdG9yIHN0YXJ0LCBQZWRTZWN0b3IgZW5kKQoreworCVBlZFBhcnRpdGlvbioJCXBhcnQ7CisJU3VuUGFydGl0aW9uRGF0YSoJc3VuX2RhdGE7CisKKwlwYXJ0ID0gX3BlZF9wYXJ0aXRpb25fYWxsb2MgKGRpc2ssIHBhcnRfdHlwZSwgZnNfdHlwZSwgc3RhcnQsIGVuZCk7CisJaWYgKCFwYXJ0KQorCQlnb3RvIGVycm9yOworCisJaWYgKHBlZF9wYXJ0aXRpb25faXNfYWN0aXZlIChwYXJ0KSkgeworCQlwYXJ0LT5kaXNrX3NwZWNpZmljCisJCSAgICAgICAJPSBzdW5fZGF0YSA9IHBlZF9tYWxsb2MgKHNpemVvZiAoU3VuUGFydGl0aW9uRGF0YSkpOworCQlpZiAoIXN1bl9kYXRhKQorCQkJZ290byBlcnJvcl9mcmVlX3BhcnQ7CisJCXN1bl9kYXRhLT50eXBlID0gMDsKKwkJc3VuX2RhdGEtPmlzX2Jvb3QgPSAwOworCQlzdW5fZGF0YS0+aXNfcm9vdCA9IDA7CisJCXN1bl9kYXRhLT5pc19sdm0gPSAwOworCX0gZWxzZSB7CisJCXBhcnQtPmRpc2tfc3BlY2lmaWMgPSBOVUxMOworCX0KKworCXJldHVybiBwYXJ0OworCisJcGVkX2ZyZWUgKHN1bl9kYXRhKTsKK2Vycm9yX2ZyZWVfcGFydDoKKwlwZWRfZnJlZSAocGFydCk7CitlcnJvcjoKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIFBlZFBhcnRpdGlvbioKK3N1bl9wYXJ0aXRpb25fZHVwbGljYXRlIChjb25zdCBQZWRQYXJ0aXRpb24qIHBhcnQpCit7CisJUGVkUGFydGl0aW9uKgkJbmV3X3BhcnQ7CisJU3VuUGFydGl0aW9uRGF0YSoJbmV3X3N1bl9kYXRhOworCVN1blBhcnRpdGlvbkRhdGEqCW9sZF9zdW5fZGF0YTsKKworCW5ld19wYXJ0ID0gcGVkX3BhcnRpdGlvbl9uZXcgKHBhcnQtPmRpc2ssIHBhcnQtPnR5cGUsCisJCQkJICAgICAgcGFydC0+ZnNfdHlwZSwgcGFydC0+Z2VvbS5zdGFydCwKKwkJCQkgICAgICBwYXJ0LT5nZW9tLmVuZCk7CisJaWYgKCFuZXdfcGFydCkKKwkJcmV0dXJuIE5VTEw7CisJbmV3X3BhcnQtPm51bSA9IHBhcnQtPm51bTsKKworCW9sZF9zdW5fZGF0YSA9IChTdW5QYXJ0aXRpb25EYXRhKikgcGFydC0+ZGlza19zcGVjaWZpYzsKKwluZXdfc3VuX2RhdGEgPSAoU3VuUGFydGl0aW9uRGF0YSopIG5ld19wYXJ0LT5kaXNrX3NwZWNpZmljOworCW5ld19zdW5fZGF0YS0+dHlwZSA9IG9sZF9zdW5fZGF0YS0+dHlwZTsKKwluZXdfc3VuX2RhdGEtPmlzX2Jvb3QgPSBvbGRfc3VuX2RhdGEtPmlzX2Jvb3Q7CisJbmV3X3N1bl9kYXRhLT5pc19yb290ID0gb2xkX3N1bl9kYXRhLT5pc19yb290OworCW5ld19zdW5fZGF0YS0+aXNfbHZtID0gb2xkX3N1bl9kYXRhLT5pc19sdm07CisJcmV0dXJuIG5ld19wYXJ0OworfQorCitzdGF0aWMgdm9pZAorc3VuX3BhcnRpdGlvbl9kZXN0cm95IChQZWRQYXJ0aXRpb24qIHBhcnQpCit7CisJUEVEX0FTU0VSVCAocGFydCAhPSBOVUxMLCByZXR1cm4pOworCisJaWYgKHBlZF9wYXJ0aXRpb25faXNfYWN0aXZlIChwYXJ0KSkKKwkJcGVkX2ZyZWUgKHBhcnQtPmRpc2tfc3BlY2lmaWMpOworCXBlZF9mcmVlIChwYXJ0KTsKK30KKworc3RhdGljIGludAorc3VuX3BhcnRpdGlvbl9zZXRfc3lzdGVtIChQZWRQYXJ0aXRpb24qIHBhcnQsIGNvbnN0IFBlZEZpbGVTeXN0ZW1UeXBlKiBmc190eXBlKQoreworCVN1blBhcnRpdGlvbkRhdGEqCQlzdW5fZGF0YSA9IHBhcnQtPmRpc2tfc3BlY2lmaWM7CisKKwlwYXJ0LT5mc190eXBlID0gZnNfdHlwZTsKKworCWlmIChzdW5fZGF0YS0+aXNfYm9vdCkgeworCQlzdW5fZGF0YS0+dHlwZSA9IDB4MTsKKwkJcmV0dXJuIDE7CisJfQorCWlmIChzdW5fZGF0YS0+aXNfcm9vdCkgeworCQlzdW5fZGF0YS0+dHlwZSA9IDB4MjsKKwkJcmV0dXJuIDE7CisJfQorCWlmIChzdW5fZGF0YS0+aXNfbHZtKSB7CisJCXN1bl9kYXRhLT50eXBlID0gMHg4ZTsKKwkJcmV0dXJuIDE7CisJfQorCisJc3VuX2RhdGEtPnR5cGUgPSAweDgzOworCWlmIChmc190eXBlKSB7CisJCWlmICghc3RyY21wIChmc190eXBlLT5uYW1lLCAibGludXgtc3dhcCIpKQorCQkJc3VuX2RhdGEtPnR5cGUgPSAweDgyOworCQllbHNlIGlmICghc3RyY21wIChmc190eXBlLT5uYW1lLCAidWZzIikpCisJCQlzdW5fZGF0YS0+dHlwZSA9IDB4NjsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludAorc3VuX3BhcnRpdGlvbl9zZXRfZmxhZyAoUGVkUGFydGl0aW9uKiBwYXJ0LCBQZWRQYXJ0aXRpb25GbGFnIGZsYWcsIGludCBzdGF0ZSkKK3sKKwlTdW5QYXJ0aXRpb25EYXRhKgkJc3VuX2RhdGE7CisKKwlQRURfQVNTRVJUIChwYXJ0ICE9IE5VTEwsIHJldHVybiAwKTsKKwlQRURfQVNTRVJUIChwYXJ0LT5kaXNrX3NwZWNpZmljICE9IE5VTEwsIHJldHVybiAwKTsKKwlQRURfQVNTRVJUIChwZWRfcGFydGl0aW9uX2lzX2ZsYWdfYXZhaWxhYmxlIChwYXJ0LCBmbGFnKSwgcmV0dXJuIDApOworCisJc3VuX2RhdGEgPSBwYXJ0LT5kaXNrX3NwZWNpZmljOworCisJc3dpdGNoIChmbGFnKSB7CisJCWNhc2UgUEVEX1BBUlRJVElPTl9CT09UOgorCQkJc3VuX2RhdGEtPmlzX2Jvb3QgPSBzdGF0ZTsKKwkJCWlmIChzdGF0ZSkKKwkJCQlzdW5fZGF0YS0+aXNfcm9vdCA9IHN1bl9kYXRhLT5pc19sdm0gPSAwOworCQkJcmV0dXJuIHBlZF9wYXJ0aXRpb25fc2V0X3N5c3RlbSAocGFydCwgcGFydC0+ZnNfdHlwZSk7CisKKwkJY2FzZSBQRURfUEFSVElUSU9OX1JPT1Q6CisJCQlzdW5fZGF0YS0+aXNfcm9vdCA9IHN0YXRlOworCQkJaWYgKHN0YXRlKQorCQkJCXN1bl9kYXRhLT5pc19ib290ID0gc3VuX2RhdGEtPmlzX2x2bSA9IDA7CisJCQlyZXR1cm4gcGVkX3BhcnRpdGlvbl9zZXRfc3lzdGVtIChwYXJ0LCBwYXJ0LT5mc190eXBlKTsKKworCQljYXNlIFBFRF9QQVJUSVRJT05fTFZNOgorCQkJc3VuX2RhdGEtPmlzX2x2bSA9IHN0YXRlOworCQkJaWYgKHN0YXRlKQorCQkJCXN1bl9kYXRhLT5pc19yb290ID0gc3VuX2RhdGEtPmlzX2Jvb3QgPSAwOworCQkJcmV0dXJuIHBlZF9wYXJ0aXRpb25fc2V0X3N5c3RlbSAocGFydCwgcGFydC0+ZnNfdHlwZSk7CisKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAwOworCX0KK30KKworCitzdGF0aWMgaW50CitzdW5fcGFydGl0aW9uX2dldF9mbGFnIChjb25zdCBQZWRQYXJ0aXRpb24qIHBhcnQsIFBlZFBhcnRpdGlvbkZsYWcgZmxhZykKK3sKKwlTdW5QYXJ0aXRpb25EYXRhKiAgICAgICBzdW5fZGF0YTsKKworCVBFRF9BU1NFUlQgKHBhcnQgIT0gTlVMTCwgcmV0dXJuIDApOworCVBFRF9BU1NFUlQgKHBhcnQtPmRpc2tfc3BlY2lmaWMgIT0gTlVMTCwgcmV0dXJuIDApOworCisJc3VuX2RhdGEgPSBwYXJ0LT5kaXNrX3NwZWNpZmljOworCisJc3dpdGNoIChmbGFnKSB7CisJCWNhc2UgUEVEX1BBUlRJVElPTl9CT09UOgorCQkJcmV0dXJuIHN1bl9kYXRhLT5pc19ib290OworCQljYXNlIFBFRF9QQVJUSVRJT05fUk9PVDoKKwkJCXJldHVybiBzdW5fZGF0YS0+aXNfcm9vdDsKKwkJY2FzZSBQRURfUEFSVElUSU9OX0xWTToKKwkJCXJldHVybiBzdW5fZGF0YS0+aXNfbHZtOworCisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gMDsKKwl9Cit9CisKKworc3RhdGljIGludAorc3VuX3BhcnRpdGlvbl9pc19mbGFnX2F2YWlsYWJsZSAoY29uc3QgUGVkUGFydGl0aW9uKiBwYXJ0LAorCQkJCSBQZWRQYXJ0aXRpb25GbGFnIGZsYWcpCit7CisJc3dpdGNoIChmbGFnKSB7CisJCWNhc2UgUEVEX1BBUlRJVElPTl9CT09UOgorCQljYXNlIFBFRF9QQVJUSVRJT05fUk9PVDoKKwkJY2FzZSBQRURfUEFSVElUSU9OX0xWTToKKwkJCXJldHVybiAxOworCisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gMDsKKwl9Cit9CisKKworc3RhdGljIGludAorc3VuX2dldF9tYXhfcHJpbWFyeV9wYXJ0aXRpb25fY291bnQgKGNvbnN0IFBlZERpc2sqIGRpc2spCit7CisJcmV0dXJuIFNVTl9ESVNLX01BWFBBUlRJVElPTlM7Cit9CisKK3N0YXRpYyBQZWRDb25zdHJhaW50KgorX2dldF9zdHJpY3RfY29uc3RyYWludCAoUGVkRGlzayogZGlzaykKK3sKKwlQZWREZXZpY2UqCWRldiA9IGRpc2stPmRldjsKKyAgICAgICAgUGVkQWxpZ25tZW50ICAgIHN0YXJ0X2FsaWduOworICAgICAgICBQZWRBbGlnbm1lbnQgICAgZW5kX2FsaWduOworICAgICAgICBQZWRHZW9tZXRyeSAgICAgbWF4X2dlb207CisJU3VuRGlza0RhdGEqCWRpc2tfZGF0YSA9IGRpc2stPmRpc2tfc3BlY2lmaWM7CisJUGVkU2VjdG9yCWJsb2NrID0gZGV2LT5iaW9zX2dlb20uc2VjdG9ycyAqIGRldi0+Ymlvc19nZW9tLmhlYWRzOworCisgICAgICAgIGlmICghcGVkX2FsaWdubWVudF9pbml0ICgmc3RhcnRfYWxpZ24sIDAsIGJsb2NrKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgaWYgKCFwZWRfYWxpZ25tZW50X2luaXQgKCZlbmRfYWxpZ24sIC0xLCBibG9jaykpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisJaWYgKCFwZWRfZ2VvbWV0cnlfaW5pdCAoJm1heF9nZW9tLCBkZXYsIDAsIGRpc2tfZGF0YS0+bGVuZ3RoKSkKKwkJcmV0dXJuIE5VTEw7CisKKyAgICAgICAgcmV0dXJuIHBlZF9jb25zdHJhaW50X25ldyAoJnN0YXJ0X2FsaWduLCAmZW5kX2FsaWduLCAmbWF4X2dlb20sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtYXhfZ2VvbSwgMSwgZGV2LT5sZW5ndGgpOworfQorCitzdGF0aWMgUGVkQ29uc3RyYWludCoKK19nZXRfbGF4X2NvbnN0cmFpbnQgKFBlZERpc2sqIGRpc2spCit7CisJUGVkRGV2aWNlKglkZXYgPSBkaXNrLT5kZXY7CisgICAgICAgIFBlZEFsaWdubWVudCAgICBzdGFydF9hbGlnbjsKKyAgICAgICAgUGVkR2VvbWV0cnkgICAgIG1heF9nZW9tOworCVN1bkRpc2tEYXRhKglkaXNrX2RhdGEgPSBkaXNrLT5kaXNrX3NwZWNpZmljOworCVBlZFNlY3RvcglibG9jayA9IGRldi0+Ymlvc19nZW9tLnNlY3RvcnMgKiBkZXYtPmJpb3NfZ2VvbS5oZWFkczsKKworICAgICAgICBpZiAoIXBlZF9hbGlnbm1lbnRfaW5pdCAoJnN0YXJ0X2FsaWduLCAwLCBibG9jaykpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisJaWYgKCFwZWRfZ2VvbWV0cnlfaW5pdCAoJm1heF9nZW9tLCBkZXYsIDAsIGRpc2tfZGF0YS0+bGVuZ3RoKSkKKwkJcmV0dXJuIE5VTEw7CisKKyAgICAgICAgcmV0dXJuIHBlZF9jb25zdHJhaW50X25ldyAoJnN0YXJ0X2FsaWduLCBwZWRfYWxpZ25tZW50X2FueSwgJm1heF9nZW9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbWF4X2dlb20sIDEsIGRldi0+bGVuZ3RoKTsKK30KKworLyogX2dldF9zdHJpY3RfY29uc3RyYWludCgpIHdpbGwgYWxpZ24gdGhlIHBhcnRpdGlvbiB0byB0aGUgZW5kIG9mIHRoZSBjeWxpbmRlci4KKyAqIFRoaXMgaXNuJ3QgcmVxdWlyZWQsIGJ1dCBzaW5jZSBwYXJ0aXRpb25zIG11c3Qgc3RhcnQgYXQgdGhlIHN0YXJ0IG9mIHRoZQorICogY3lsaW5kZXIsIHNwYWNlIGJldHdlZW4gdGhlIGVuZCBvZiBhIHBhcnRpdGlvbiBhbmQgdGhlIGVuZCBvZiBhIGN5bGluZGVyCisgKiBpcyB1bnVzYWJsZSwgc28gdGhlcmUncyBubyBwb2ludCB3YXN0aW5nIHNwYWNlIQorICoJSG93ZXZlciwgaWYgdGhleSByZWFsbHkgaW5zaXN0ICh2aWEgY29uc3RyYWludCkuLi4gd2hpY2ggdGhleSB3aWxsCisgKiBpZiB0aGV5J3JlIHJlYWRpbmcgYSB3ZWlyZCB0YWJsZSBvZiB0aGUgZGlzay4uLiB0aGVuIHdlIGFsbG93IHRoZSBlbmQgdG8KKyAqIGJlIGFueXdoZXJlLCB3aXRoIF9nZXRfbGF4X2NvbnN0cmFpbnQoKQorICovCitzdGF0aWMgaW50CitzdW5fcGFydGl0aW9uX2FsaWduIChQZWRQYXJ0aXRpb24qIHBhcnQsIGNvbnN0IFBlZENvbnN0cmFpbnQqIGNvbnN0cmFpbnQpCit7CisgICAgICAgIFBFRF9BU1NFUlQgKHBhcnQgIT0gTlVMTCwgcmV0dXJuIDApOworCisJaWYgKF9wZWRfcGFydGl0aW9uX2F0dGVtcHRfYWxpZ24gKHBhcnQsIGNvbnN0cmFpbnQsCisJCQkJCSAgX2dldF9zdHJpY3RfY29uc3RyYWludCAocGFydC0+ZGlzaykpKQorCSAgICAgICAJcmV0dXJuIDE7CisJaWYgKF9wZWRfcGFydGl0aW9uX2F0dGVtcHRfYWxpZ24gKHBhcnQsIGNvbnN0cmFpbnQsCisJCQkJCSAgX2dldF9sYXhfY29uc3RyYWludCAocGFydC0+ZGlzaykpKQorCSAgICAgICAJcmV0dXJuIDE7CisKKyNpZm5kZWYgRElTQ09WRVJfT05MWQorCXBlZF9leGNlcHRpb25fdGhyb3cgKAorCQlQRURfRVhDRVBUSU9OX0VSUk9SLAorCQlQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJXygiVW5hYmxlIHRvIHNhdGlzZnkgYWxsIGNvbnN0cmFpbnRzIG9uIHRoZSBwYXJ0aXRpb24uIikpOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3N1bl9wYXJ0aXRpb25fZW51bWVyYXRlIChQZWRQYXJ0aXRpb24qIHBhcnQpCit7CisJaW50IGk7CisJUGVkUGFydGl0aW9uKiBwOworCQorCS8qIG5ldmVyIGNoYW5nZSB0aGUgcGFydGl0aW9uIG51bWJlcnMgKi8KKwlpZiAocGFydC0+bnVtICE9IC0xKQorCQlyZXR1cm4gMTsKKwlmb3IgKGkgPSAxOyBpIDw9IFNVTl9ESVNLX01BWFBBUlRJVElPTlM7IGkrKykgeworCQkvKiBza2lwIHRoZSBXaG9sZSBEaXNrIHBhcnRpdGlvbiBmb3Igbm93ICovCisJCWlmIChpID09IFdIT0xFX0RJU0tfUEFSVCArIDEpCisJCQljb250aW51ZTsKKwkJcCA9IHBlZF9kaXNrX2dldF9wYXJ0aXRpb24gKHBhcnQtPmRpc2ssIGkpOworCQlpZiAoIXApIHsKKwkJCXBhcnQtPm51bSA9IGk7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworI2lmbmRlZiBESVNDT1ZFUl9PTkxZCisJLyogT2ssIG5vdyBhbGxvY2F0ZSB0aGUgV2hvbGUgZGlzayBpZiBpdCBpc24ndCBhbHJlYWR5ICovCisJcCA9IHBlZF9kaXNrX2dldF9wYXJ0aXRpb24gKHBhcnQtPmRpc2ssIFdIT0xFX0RJU0tfUEFSVCArIDEpOworCWlmICghcCkgeworCQlpbnQgaiA9IHBlZF9leGNlcHRpb25fdGhyb3cgKAorCQkJCVBFRF9FWENFUFRJT05fV0FSTklORywKKwkJCQlQRURfRVhDRVBUSU9OX0lHTk9SRV9DQU5DRUwsCisJCQkJXygiVGhlIFdob2xlIERpc2sgcGFydGl0aW9uIGlzIHRoZSBvbmx5ICIKKwkJCQkgICJhdmFpbGFibGUgb25lIGxlZnQuICBHZW5lcmFsbHksIGl0IGlzIG5vdCBhICIKKwkJCQkgICJnb29kIGlkZWEgdG8gb3ZlcndyaXRlIHRoaXMgcGFydGl0aW9uIHdpdGggIgorCQkJCSAgImEgcmVhbCBvbmUuICBTb2xhcmlzIG1heSBub3QgYmUgYWJsZSB0byAiCisJCQkJICAiYm9vdCB3aXRob3V0IGl0LCBhbmQgU0lMTyAodGhlIHNwYXJjIGJvb3QgIgorCQkJCSAgImxvYWRlcikgYXBwcmVjaWF0ZXMgaXQgYXMgd2VsbC4iKSk7CisJCWlmIChqID09IFBFRF9FWENFUFRJT05fSUdOT1JFKSB7CisJCQkvKiBiYWQgYmFkIGJhZC4uLnlvdSB3aWxsIHN1ZmZlciB5b3VyIG93biBmYXRlICovCisJCQlwYXJ0LT5udW0gPSBXSE9MRV9ESVNLX1BBUlQgKyAxOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwkvKiBmYWlsZWQgdG8gYWxsb2NhdGUgYSBudW1iZXIsIHRoaXMgbWVhbnMgd2UgYXJlIGZ1bGwgKi8KKwlwZWRfZXhjZXB0aW9uX3Rocm93IChQRURfRVhDRVBUSU9OX0VSUk9SLCBQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCSAgICAgXygiU3VuIGRpc2sgbGFiZWwgaXMgZnVsbC4iKSk7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorc3VuX2FsbG9jX21ldGFkYXRhIChQZWREaXNrKiBkaXNrKQoreworCVBlZFBhcnRpdGlvbioJbmV3X3BhcnQ7CisJU3VuRGlza0RhdGEqCWRpc2tfZGF0YTsKKwlQZWRDb25zdHJhaW50Kgljb25zdHJhaW50X2FueTsKKworCVBFRF9BU1NFUlQgKGRpc2sgIT0gTlVMTCwgcmV0dXJuIDApOworCVBFRF9BU1NFUlQgKGRpc2stPmRpc2tfc3BlY2lmaWMgIT0gTlVMTCwgcmV0dXJuIDApOworCVBFRF9BU1NFUlQgKGRpc2stPmRldiAhPSBOVUxMLCByZXR1cm4gMCk7CisKKwljb25zdHJhaW50X2FueSA9IHBlZF9jb25zdHJhaW50X2FueSAoZGlzay0+ZGV2KTsKKworCS8qIFN1biBkaXNrIGxhYmVsIGRvZXMgbm90IG5lZWQgdG8gYWxsb2NhdGUgYSBzZWN0b3IuIFRoZSBkaXNrCisJICAgbGFiZWwgaXMgY29udGFpbmVkIHdpdGhpbiB0aGUgZmlyc3QgNTEyIGJ5dGVzLCB3aGljaCBzaG91bGQgbm90CisJICAgYmUgb3ZlcndyaXR0ZW4gYnkgYW55IGJvb3QgbG9hZGVyIG9yIHN1cGVyYmxvY2suIEl0IGlzIHNhZmUgZm9yCisJICAgbW9zdCBwYXJ0aXRpb25zIHRvIHN0YXJ0IGF0IHNlY3RvciAwLiBXZSBkbyBob3dldmVyLCBhbGxvY2F0ZQorCSAgIHRoZSBzcGFjZSB1c2VkIGJ5IGFsdC1jeWwncywgc2luY2Ugd2UgY2Fubm90IHVzZSB0aG9zZS4gUHV0IHRoZW0KKwkgICBhdCB0aGUgZW5kIG9mIHRoZSBkaXNrLiAgKi8KKworCWRpc2tfZGF0YSA9IGRpc2stPmRpc2tfc3BlY2lmaWM7CisKKwlpZiAoZGlzay0+ZGV2LT5sZW5ndGggPD0gMCB8fAorCSAgICBkaXNrX2RhdGEtPmxlbmd0aCA8PSAwIHx8CisJICAgIGRpc2stPmRldi0+bGVuZ3RoID09IGRpc2tfZGF0YS0+bGVuZ3RoKQorCQlnb3RvIGVycm9yOworCisJbmV3X3BhcnQgPSBwZWRfcGFydGl0aW9uX25ldyAoZGlzaywgUEVEX1BBUlRJVElPTl9NRVRBREFUQSwgTlVMTCwKKwkJCWRpc2tfZGF0YS0+bGVuZ3RoLCBkaXNrLT5kZXYtPmxlbmd0aCAtIDEpOworCWlmICghbmV3X3BhcnQpCisJCWdvdG8gZXJyb3I7CisKKwlpZiAoIXBlZF9kaXNrX2FkZF9wYXJ0aXRpb24gKGRpc2ssIG5ld19wYXJ0LCBjb25zdHJhaW50X2FueSkpIHsKKwkJcGVkX3BhcnRpdGlvbl9kZXN0cm95IChuZXdfcGFydCk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJcGVkX2NvbnN0cmFpbnRfZGVzdHJveSAoY29uc3RyYWludF9hbnkpOworCXJldHVybiAxOworZXJyb3I6CisJcGVkX2NvbnN0cmFpbnRfZGVzdHJveSAoY29uc3RyYWludF9hbnkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgUGVkRGlza09wcyBzdW5fZGlza19vcHMgPSB7CisJcHJvYmU6CQkJc3VuX3Byb2JlLAorI2lmbmRlZiBESVNDT1ZFUl9PTkxZCisJY2xvYmJlcjoJCXN1bl9jbG9iYmVyLAorI2Vsc2UKKwljbG9iYmVyOgkJTlVMTCwKKyNlbmRpZgorCWFsbG9jOgkJCXN1bl9hbGxvYywKKwlkdXBsaWNhdGU6CQlzdW5fZHVwbGljYXRlLAorCWZyZWU6CQkJc3VuX2ZyZWUsCisJcmVhZDoJCQlzdW5fcmVhZCwKKyNpZm5kZWYgRElTQ09WRVJfT05MWQorCXdyaXRlOgkJCXN1bl93cml0ZSwKKyNlbHNlCisJd3JpdGU6CQkJTlVMTCwKKyNlbmRpZgorCisJcGFydGl0aW9uX25ldzoJCXN1bl9wYXJ0aXRpb25fbmV3LAorCXBhcnRpdGlvbl9kdXBsaWNhdGU6CXN1bl9wYXJ0aXRpb25fZHVwbGljYXRlLAorCXBhcnRpdGlvbl9kZXN0cm95OglzdW5fcGFydGl0aW9uX2Rlc3Ryb3ksCisJcGFydGl0aW9uX3NldF9zeXN0ZW06CXN1bl9wYXJ0aXRpb25fc2V0X3N5c3RlbSwKKwlwYXJ0aXRpb25fc2V0X2ZsYWc6CXN1bl9wYXJ0aXRpb25fc2V0X2ZsYWcsCisJcGFydGl0aW9uX2dldF9mbGFnOglzdW5fcGFydGl0aW9uX2dldF9mbGFnLAorCXBhcnRpdGlvbl9pc19mbGFnX2F2YWlsYWJsZToJc3VuX3BhcnRpdGlvbl9pc19mbGFnX2F2YWlsYWJsZSwKKwlwYXJ0aXRpb25fYWxpZ246CXN1bl9wYXJ0aXRpb25fYWxpZ24sCisJcGFydGl0aW9uX2VudW1lcmF0ZToJc3VuX3BhcnRpdGlvbl9lbnVtZXJhdGUsCisJYWxsb2NfbWV0YWRhdGE6CQlzdW5fYWxsb2NfbWV0YWRhdGEsCisJZ2V0X21heF9wcmltYXJ5X3BhcnRpdGlvbl9jb3VudDoKKwkJCQlzdW5fZ2V0X21heF9wcmltYXJ5X3BhcnRpdGlvbl9jb3VudCwKKworCXBhcnRpdGlvbl9zZXRfbmFtZToJCU5VTEwsCisJcGFydGl0aW9uX2dldF9uYW1lOgkJTlVMTCwKK307CisKK3N0YXRpYyBQZWREaXNrVHlwZSBzdW5fZGlza190eXBlID0geworCW5leHQ6CQlOVUxMLAorCW5hbWU6CQkic3VuIiwKKwlvcHM6CQkmc3VuX2Rpc2tfb3BzLAorCWZlYXR1cmVzOgkwCit9OworCit2b2lkCitwZWRfZGlza19zdW5faW5pdCAoKQoreworCVBFRF9BU1NFUlQgKHNpemVvZiAoU3VuUmF3TGFiZWwpID09IDUxMiwgcmV0dXJuKTsKKwlwZWRfZGlza190eXBlX3JlZ2lzdGVyICgmc3VuX2Rpc2tfdHlwZSk7Cit9CisKK3ZvaWQKK3BlZF9kaXNrX3N1bl9kb25lICgpCit7CisJcGVkX2Rpc2tfdHlwZV91bnJlZ2lzdGVyICgmc3VuX2Rpc2tfdHlwZSk7Cit9CmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2xhYmVscy92dG9jLmMgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL2xhYmVscy92dG9jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQyYzkwNQotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYwpAQCAtMCwwICsxLDExNTQgQEAKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxwYXJ0ZWQvdnRvYy5oPgorCisjaWZkZWYgREVCVUdfREFTRAorI2RlZmluZSBQREVCVUcgZnByaW50ZihzdGRlcnIsICIlczolZDolc1xuIiwgXAorICAgICAgICAgICAgICAgICAgICAgICBfX0ZJTEVfXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgIF9fTElORV9fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgX19QUkVUVFlfRlVOQ1RJT05fXyk7CisjZWxzZQorI2RlZmluZSBQREVCVUcKKyNlbmRpZgorCisjaW5jbHVkZSA8cGFydGVkL3BhcnRlZC5oPgorCisjaW5jbHVkZSA8bGliaW50bC5oPgorI2lmIEVOQUJMRV9OTFMKKyMgIGRlZmluZSBfKFN0cmluZykgZGdldHRleHQgKFBBQ0tBR0UsIFN0cmluZykKKyNlbHNlCisjICBkZWZpbmUgXyhTdHJpbmcpIChTdHJpbmcpCisjZW5kaWYgLyogRU5BQkxFX05MUyAqLworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBFQkN0b0FTQ1syNTZdID0KK3sKKy8qIDB4MDAgIE5VTCAgIFNPSCAgIFNUWCAgIEVUWCAgKlNFTCAgICBIVCAgKlJOTCAgIERFTCAqLworCTB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDcsIDB4MDksIDB4MDcsIDB4N0YsCisvKiAweDA4ICAtR0UgIC1TUFMgIC1SUFQgICAgVlQgICAgRkYgICAgQ1IgICAgU08gICAgU0kgKi8KKwkweDA3LCAweDA3LCAweDA3LCAweDBCLCAweDBDLCAweDBELCAweDBFLCAweDBGLAorLyogMHgxMCAgRExFICAgREMxICAgREMyICAgREMzICAtUkVTICAgLU5MICAgIEJTICAtUE9DCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1FTlAgIC0+TEYgICAgICAgICAgICAgKi8KKwkweDEwLCAweDExLCAweDEyLCAweDEzLCAweDA3LCAweDBBLCAweDA4LCAweDA3LAorLyogMHgxOCAgQ0FOICAgIEVNICAtVUJTICAtQ1UxICAtSUZTICAtSUdTICAtSVJTICAtSVRCCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1JVVMgKi8KKwkweDE4LCAweDE5LCAweDA3LCAweDA3LCAweDA3LCAweDA3LCAweDA3LCAweDA3LAorLyogMHgyMCAgLURTICAtU09TICAgIEZTICAtV1VTICAtQllQICAgIExGICAgRVRCICAgRVNDCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1JTlAgICAgICAgICAgICAgICAgICAgKi8KKwkweDA3LCAweDA3LCAweDFDLCAweDA3LCAweDA3LCAweDBBLCAweDE3LCAweDFCLAorLyogMHgyOCAgLVNBICAtU0ZFICAgLVNNICAtQ1NQICAtTUZBICAgRU5RICAgQUNLICAgQkVMCisgICAgICAgICAgICAgICAgICAgICAtU1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gCisJMHgwNywgMHgwNywgMHgwNywgMHgwNywgMHgwNywgMHgwNSwgMHgwNiwgMHgwNywKKy8qIDB4MzAgLS0tLSAgLS0tLSAgIFNZTiAgIC1JUiAgIC1QUCAgLVRSTiAgLU5CUyAgIEVPVCAqLworCTB4MDcsIDB4MDcsIDB4MTYsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDQsCisvKiAweDM4IC1TQlMgICAtSVQgIC1SRkYgIC1DVTMgICBEQzQgICBOQUsgIC0tLS0gICBTVUIgKi8KKwkweDA3LCAweDA3LCAweDA3LCAweDA3LCAweDE0LCAweDE1LCAweDA3LCAweDFBLAorLyogMHg0MCAgIFNQICAgUlNQICAgICAgICAgICDkICAgICAgICAgICAgICAtLS0tICAgICAgICovCisJMHgyMCwgMHhGRiwgMHg4MywgMHg4NCwgMHg4NSwgMHhBMCwgMHgwNywgMHg4NiwKKy8qIDB4NDggICAgICAgICAgICAgICAgICAgICAgLiAgICAgPCAgICAgKCAgICAgKyAgICAgfCAqLworCTB4ODcsIDB4QTQsIDB4OUIsIDB4MkUsIDB4M0MsIDB4MjgsIDB4MkIsIDB4N0MsCisvKiAweDUwICAgICYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0gKi8KKwkweDI2LCAweDgyLCAweDg4LCAweDg5LCAweDhBLCAweEExLCAweDhDLCAweDA3LAorLyogMHg1OCAgICAgICAgICDfICAgICAhICAgICAkICAgICAqICAgICApICAgICA7ICAgICAgICovCisJMHg4RCwgMHhFMSwgMHgyMSwgMHgyNCwgMHgyQSwgMHgyOSwgMHgzQiwgMHhBQSwKKy8qIDB4NjAgICAgLSAgICAgLyAgLS0tLSAgICAgxCAgLS0tLSAgLS0tLSAgLS0tLSAgICAgICAqLworCTB4MkQsIDB4MkYsIDB4MDcsIDB4OEUsIDB4MDcsIDB4MDcsIDB4MDcsIDB4OEYsCisvKiAweDY4ICAgICAgICAgICAgIC0tLS0gICAgICwgICAgICUgICAgIF8gICAgID4gICAgID8gKi8gCisJMHg4MCwgMHhBNSwgMHgwNywgMHgyQywgMHgyNSwgMHg1RiwgMHgzRSwgMHgzRiwKKy8qIDB4NzAgIC0tLSAgICAgICAgLS0tLSAgLS0tLSAgLS0tLSAgLS0tLSAgLS0tLSAgLS0tLSAqLworCTB4MDcsIDB4OTAsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsCisvKiAweDc4ICAgICogICAgIGAgICAgIDogICAgICMgICAgIEAgICAgICcgICAgID0gICAgICIgKi8KKwkweDcwLCAweDYwLCAweDNBLCAweDIzLCAweDQwLCAweDI3LCAweDNELCAweDIyLAorLyogMHg4MCAgICAqICAgICBhICAgICBiICAgICBjICAgICBkICAgICBlICAgICBmICAgICBnICovCisJMHgwNywgMHg2MSwgMHg2MiwgMHg2MywgMHg2NCwgMHg2NSwgMHg2NiwgMHg2NywKKy8qIDB4ODggICAgaCAgICAgaSAgICAgICAgICAgICAgLS0tLSAgLS0tLSAgLS0tLSAgICAgICAqLworCTB4NjgsIDB4NjksIDB4QUUsIDB4QUYsIDB4MDcsIDB4MDcsIDB4MDcsIDB4RjEsCisvKiAweDkwICAgILAgICAgIGogICAgIGsgICAgIGwgICAgIG0gICAgIG4gICAgIG8gICAgIHAgKi8KKwkweEY4LCAweDZBLCAweDZCLCAweDZDLCAweDZELCAweDZFLCAweDZGLCAweDcwLAorLyogMHg5OCAgICBxICAgICByICAgICAgICAgICAgICAgICAgICAtLS0tICAgICAgICAtLS0tICovCisJMHg3MSwgMHg3MiwgMHhBNiwgMHhBNywgMHg5MSwgMHgwNywgMHg5MiwgMHgwNywKKy8qIDB4QTAgICAgICAgICAgfiAgICAgcyAgICAgdCAgICAgdSAgICAgdiAgICAgdyAgICAgeCAqLworCTB4RTYsIDB4N0UsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsIDB4NzcsIDB4NzgsCisvKiAweEE4ICAgIHkgICAgIHogICAgICAgICAgICAgIC0tLS0gIC0tLS0gIC0tLS0gIC0tLS0gKi8KKwkweDc5LCAweDdBLCAweEFELCAweEFCLCAweDA3LCAweDA3LCAweDA3LCAweDA3LAorLyogMHhCMCAgICBeICAgICAgICAgICAgICAgICAgICAtLS0tICAgICCnICAtLS0tICAgICAgICovCisJMHg1RSwgMHg5QywgMHg5RCwgMHhGQSwgMHgwNywgMHgwNywgMHgwNywgMHhBQywKKy8qIDB4QjggICAgICAgLS0tLSAgICAgWyAgICAgXSAgLS0tLSAgLS0tLSAgLS0tLSAgLS0tLSAqLworCTB4QUIsIDB4MDcsIDB4NUIsIDB4NUQsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsCisvKiAweEMwICAgIHsgICAgIEEgICAgIEIgICAgIEMgICAgIEQgICAgIEUgICAgIEYgICAgIEcgKi8KKwkweDdCLCAweDQxLCAweDQyLCAweDQzLCAweDQ0LCAweDQ1LCAweDQ2LCAweDQ3LAorLyogMHhDOCAgICBIICAgICBJICAtLS0tICAgICAgICAgICD2ICAgICAgICAgICAgICAtLS0tICovCisJMHg0OCwgMHg0OSwgMHgwNywgMHg5MywgMHg5NCwgMHg5NSwgMHhBMiwgMHgwNywKKy8qIDB4RDAgICAgfSAgICAgSiAgICAgSyAgICAgTCAgICAgTSAgICAgTiAgICAgTyAgICAgUCAqLworCTB4N0QsIDB4NEEsIDB4NEIsIDB4NEMsIDB4NEQsIDB4NEUsIDB4NEYsIDB4NTAsCisvKiAweEQ4ICAgIFEgICAgIFIgIC0tLS0gICAgICAgICAgIPwgICAgICAgICAgICAgICAgICAgKi8KKwkweDUxLCAweDUyLCAweDA3LCAweDk2LCAweDgxLCAweDk3LCAweEEzLCAweDk4LAorLyogMHhFMCAgICBcICAgICAgICAgICBTICAgICBUICAgICBVICAgICBWICAgICBXICAgICBYICovCisJMHg1QywgMHhGNiwgMHg1MywgMHg1NCwgMHg1NSwgMHg1NiwgMHg1NywgMHg1OCwKKy8qIDB4RTggICAgWSAgICAgWiAgICAgICAgLS0tLSAgICAg1iAgLS0tLSAgLS0tLSAgLS0tLSAqLworCTB4NTksIDB4NUEsIDB4RkQsIDB4MDcsIDB4OTksIDB4MDcsIDB4MDcsIDB4MDcsCisvKiAweEYwICAgIDAgICAgIDEgICAgIDIgICAgIDMgICAgIDQgICAgIDUgICAgIDYgICAgIDcgKi8KKwkweDMwLCAweDMxLCAweDMyLCAweDMzLCAweDM0LCAweDM1LCAweDM2LCAweDM3LAorLyogMHhGOCAgICA4ICAgICA5ICAtLS0tICAtLS0tICAgICDcICAtLS0tICAtLS0tICAtLS0tICovCisJMHgzOCwgMHgzOSwgMHgwNywgMHgwNywgMHg5QSwgMHgwNywgMHgwNywgMHgwNworfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgQVNDdG9FQkNbMjU2XSA9Cit7CisgICAgLyowMCAgTkwgICAgU0ggICAgU1ggICAgRVggICAgRVQgICAgTlEgICAgQUsgICAgQkwgKi8KKwkweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDM3LCAweDJELCAweDJFLCAweDJGLAorICAgIC8qMDggIEJTICAgIEhUICAgIExGICAgIFZUICAgIEZGICAgIENSICAgIFNPICAgIFNJICovCisJMHgxNiwgMHgwNSwgMHgxNSwgMHgwQiwgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwKKyAgICAvKjEwICBETCAgICBEMSAgICBEMiAgICBEMyAgICBENCAgICBOSyAgICBTTiAgICBFQiAqLworCTB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4M0MsIDB4MTUsIDB4MzIsIDB4MjYsCisgICAgLyoxOCAgQ04gICAgRU0gICAgU0IgICAgRUMgICAgRlMgICAgR1MgICAgUlMgICAgVVMgKi8KKwkweDE4LCAweDE5LCAweDNGLCAweDI3LCAweDFDLCAweDFELCAweDFFLCAweDFGLAorICAgIC8qMjAgIFNQICAgICAhICAgICAiICAgICAjICAgICAkICAgICAlICAgICAmICAgICAnICovCisJMHg0MCwgMHg1QSwgMHg3RiwgMHg3QiwgMHg1QiwgMHg2QywgMHg1MCwgMHg3RCwKKyAgICAvKjI4ICAgKCAgICAgKSAgICAgKiAgICAgKyAgICAgLCAgICAgLSAgICAuICAgICAgLyAqLworCTB4NEQsIDB4NUQsIDB4NUMsIDB4NEUsIDB4NkIsIDB4NjAsIDB4NEIsIDB4NjEsCisgICAgLyozMCAgIDAgICAgIDEgICAgIDIgICAgIDMgICAgIDQgICAgIDUgICAgIDYgICAgIDcgKi8KKwkweEYwLCAweEYxLCAweEYyLCAweEYzLCAweEY0LCAweEY1LCAweEY2LCAweEY3LAorICAgIC8qMzggICA4ICAgICA5ICAgICA6ICAgICA7ICAgICA8ICAgICA9ICAgICA+ICAgICA/ICovCisJMHhGOCwgMHhGOSwgMHg3QSwgMHg1RSwgMHg0QywgMHg3RSwgMHg2RSwgMHg2RiwKKyAgICAvKjQwICAgQCAgICAgQSAgICAgQiAgICAgQyAgICAgRCAgICAgRSAgICAgRiAgICAgRyAqLworCTB4N0MsIDB4QzEsIDB4QzIsIDB4QzMsIDB4QzQsIDB4QzUsIDB4QzYsIDB4QzcsCisgICAgLyo0OCAgIEggICAgIEkgICAgIEogICAgIEsgICAgIEwgICAgIE0gICAgIE4gICAgIE8gKi8KKwkweEM4LCAweEM5LCAweEQxLCAweEQyLCAweEQzLCAweEQ0LCAweEQ1LCAweEQ2LAorICAgIC8qNTAgICBQICAgICBRICAgICBSICAgICBTICAgICBUICAgICBVICAgICBWICAgICBXICovCisJMHhENywgMHhEOCwgMHhEOSwgMHhFMiwgMHhFMywgMHhFNCwgMHhFNSwgMHhFNiwKKyAgICAvKjU4ICAgWCAgICAgWSAgICAgWiAgICAgWyAgICAgXCAgICAgXSAgICAgXiAgICAgXyAqLworCTB4RTcsIDB4RTgsIDB4RTksIDB4QUQsIDB4RTAsIDB4QkQsIDB4NUYsIDB4NkQsCisgICAgLyo2MCAgIGAgICAgIGEgICAgIGIgICAgIGMgICAgIGQgICAgIGUgICAgIGYgICAgIGcgKi8KKwkweDc5LCAweDgxLCAweDgyLCAweDgzLCAweDg0LCAweDg1LCAweDg2LCAweDg3LAorICAgIC8qNjggICBoICAgICBpICAgICBqICAgICBrICAgICBsICAgICBtICAgICBuICAgICBvICovCisJMHg4OCwgMHg4OSwgMHg5MSwgMHg5MiwgMHg5MywgMHg5NCwgMHg5NSwgMHg5NiwKKyAgICAvKjcwICAgcCAgICAgcSAgICAgciAgICAgcyAgICAgdCAgICAgdSAgICAgdiAgICAgdyAqLworCTB4OTcsIDB4OTgsIDB4OTksIDB4QTIsIDB4QTMsIDB4QTQsIDB4QTUsIDB4QTYsCisgICAgLyo3OCAgIHggICAgIHkgICAgIHogICAgIHsgICAgIHwgICAgIH0gICAgIH4gICAgREwgKi8KKwkweEE3LCAweEE4LCAweEE5LCAweEMwLCAweDRGLCAweEQwLCAweEExLCAweDA3LAorCTB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsCisJMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwKKwkweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLAorCTB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsCisJMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwKKwkweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLAorCTB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsCisJMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwKKwkweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLAorCTB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsCisJMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwKKwkweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLAorCTB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsCisJMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwKKwkweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLAorCTB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4RkYKK307CisKK2VudW0gZmFpbHVyZSB7CisJdW5hYmxlX3RvX29wZW4sCisJdW5hYmxlX3RvX3NlZWssCisJdW5hYmxlX3RvX3dyaXRlLAorCXVuYWJsZV90b19yZWFkCit9OworCitzdGF0aWMgY2hhciBidWZmZXJbODVdOworCitzdGF0aWMgdm9pZCAKK3Z0b2NfZXJyb3IgKGVudW0gZmFpbHVyZSB3aHksIGNoYXIgKnMxLCBjaGFyICpzMikgCit7CisJUERFQlVHCisJY2hhciBlcnJvcls4MTkyXTsKKworCXN3aXRjaCAod2h5KSB7CisJCWNhc2UgdW5hYmxlX3RvX29wZW46CisJCQlzcHJpbnRmKGVycm9yLCBfKCIlcyBvcGVuaW5nIGRldmljZSAnJXMnIGZhaWxlZC5cbiVzXG4iKSwKKwkJCQkJVlRPQ19FUlJPUiwgczEsIHMyKTsKKwkJCWJyZWFrOworCQljYXNlIHVuYWJsZV90b19zZWVrOgorCQkJc3ByaW50ZihlcnJvciwgXygiJXMgc2Vla2luZyBkZXZpY2UgJyVzJyBmYWlsZWQuXG4lc1xuIiksCisJCQkJCVZUT0NfRVJST1IsIHMxLCBzMik7CisJCQlicmVhazsKKwkJY2FzZSB1bmFibGVfdG9fd3JpdGU6CisJCQlzcHJpbnRmKGVycm9yLCBfKCIlcyB3cml0aW5nIHRvIGRldmljZSAnJXMnIGZhaWxlZCxcbiVzXG4iKSwKKwkJCQkJVlRPQ19FUlJPUiwgczEsIHMyKTsKKwkJCWJyZWFrOworCQljYXNlIHVuYWJsZV90b19yZWFkOgorCQkJc3ByaW50ZihlcnJvciwgXygiJXMgcmVhZGluZyBmcm9tIGRldmljZSAnJXMnIGZhaWxlZC5cbiVzXG4iKSwKKwkJCQkJVlRPQ19FUlJPUiwgczEsIHMyKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJc3ByaW50ZihlcnJvciwgXygiRmF0YWwgZXJyb3JcbiIpKTsKKwl9CisKKwlwZWRfZXhjZXB0aW9uX3Rocm93KFBFRF9FWENFUFRJT05fRVJST1IsIFBFRF9FWENFUFRJT05fQ0FOQ0VMLCBlcnJvcik7Cit9CisKK2NoYXIgKiAKK3Z0b2NfZWJjZGljX2VuYyAoY2hhciBzb3VyY2VbTElORV9MRU5HVEhdLAorICAgICAgICAgICAgICAgICBjaGFyIHRhcmdldFtMSU5FX0xFTkdUSF0sCisgICAgICAgICAgICAgICAgIGludCBsKSAKK3sKKwlQREVCVUcKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBsOyBpKyspIAorCQl0YXJnZXRbaV09QVNDdG9FQkNbKHVuc2lnbmVkIGNoYXIpKHNvdXJjZVtpXSldOworCisJcmV0dXJuIHRhcmdldDsKK30KKworY2hhciAqIAordnRvY19lYmNkaWNfZGVjIChjaGFyIHNvdXJjZVtMSU5FX0xFTkdUSF0sCisgICAgICAgICAgICAgICAgIGNoYXIgdGFyZ2V0W0xJTkVfTEVOR1RIXSwKKyAgICAgICAgICAgICAgICAgaW50IGwpCit7CisJUERFQlVHCisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbDsgaSsrKSAKKwkJdGFyZ2V0W2ldPUVCQ3RvQVNDWyh1bnNpZ25lZCBjaGFyKShzb3VyY2VbaV0pXTsKKworCXJldHVybiB0YXJnZXQ7Cit9CisKK3ZvaWQgCit2dG9jX3NldF9leHRlbnQgKGV4dGVudF90ICpleHQsIHVfaW50OF90IHR5cGVpbmQsIHVfaW50OF90IHNlcW5vLAorICAgICAgICAgICAgICAgICBjY2hoX3QgKmxvd2VyLCBjY2hoX3QgKnVwcGVyKSAKK3sgCisJUERFQlVHCisJZXh0LT50eXBlaW5kID0gdHlwZWluZDsKKwlleHQtPnNlcW5vICAgPSBzZXFubzsKKwltZW1jcHkoJmV4dC0+bGxpbWl0LGxvd2VyLHNpemVvZihjY2hoX3QpKTsKKwltZW1jcHkoJmV4dC0+dWxpbWl0LHVwcGVyLHNpemVvZihjY2hoX3QpKTsKK30KKwordm9pZCAKK3Z0b2Nfc2V0X2NjaGggKGNjaGhfdCAqYWRkciwgdV9pbnQxNl90IGNjLCB1X2ludDE2X3QgaGgpIAoreworCVBERUJVRworCWFkZHItPmNjID0gY2M7CisJYWRkci0+aGggPSBoaDsKK30KKworc3RhdGljIHZvaWQgCit2dG9jX3NldF90dHIgKHR0cl90ICphZGRyLCB1X2ludDE2X3QgdHQsIHVfaW50OF90IHIpIAoreworCVBERUJVRworCWFkZHItPnR0ID0gdHQ7CisJYWRkci0+ciA9IHI7Cit9CisKK3ZvaWQgCit2dG9jX3NldF9jY2hoYiAoY2NoaGJfdCAqYWRkciwgdV9pbnQxNl90IGNjLCB1X2ludDE2X3QgaGgsIHVfaW50OF90IGIpIAoreworCVBERUJVRworCWFkZHItPmNjID0gY2M7CisJYWRkci0+aGggPSBoaDsKKwlhZGRyLT5iID0gYjsKK30KKwordm9pZCAKK3Z0b2Nfc2V0X2RhdGUgKGxhYmVsZGF0ZV90ICogZCwgdV9pbnQ4X3QgeWVhciwgdV9pbnQxNl90IGRheSkgCit7CisJUERFQlVHCisJZC0+eWVhciA9IHllYXI7CisJZC0+ZGF5ID0gZGF5OworfQorCisvKgorICogaW5pdGlhbGl6ZXMgdGhlIHZvbHVtZSBsYWJlbCB3aXRoIEVCQ0RJQyBzcGFjZXMKKyAqLwordm9pZAordnRvY192b2x1bWVfbGFiZWxfaW5pdCAodm9sdW1lX2xhYmVsX3QgKnZsYWJlbCkKK3sKKwlQREVCVUcKKwlzcHJpbnRmKGJ1ZmZlciwgIiU4NHMiLCAiICIpOworCXZ0b2NfZWJjZGljX2VuYyhidWZmZXIsIGJ1ZmZlciwgODQpOwkKKwlzdHJuY3B5KHZsYWJlbC0+dm9sa2V5LCBidWZmZXIsIDg0KTsKK30KKworLyoKKyAqIHJlYWRzIHRoZSB2b2x1bWUgbGFiZWwgZnJvbSBkYXNkCisgKi8KK2ludCAKK3Z0b2NfcmVhZF92b2x1bWVfbGFiZWwgKGludCBmLCB1bnNpZ25lZCBsb25nIHZsYWJlbF9zdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZvbHVtZV9sYWJlbF90ICp2bGFiZWwpIAoreworCVBERUJVRworCWludCByYzsKKworCWlmIChsc2VlayhmLCB2bGFiZWxfc3RhcnQsIFNFRUtfU0VUKSA9PSAtMSkgeworCQl2dG9jX2Vycm9yKHVuYWJsZV90b19zZWVrLCAidnRvY19yZWFkX3ZvbHVtZV9sYWJlbCIsCisJCQkJICAgIkNvdWxkIG5vdCByZWFkIHZvbHVtZSBsYWJlbC4iKTsKKwkJcmV0dXJuIDE7CisJfQorCisJcmMgPSByZWFkKGYsIHZsYWJlbCwgc2l6ZW9mKHZvbHVtZV9sYWJlbF90KSk7CisJaWYgKHJjICE9IHNpemVvZih2b2x1bWVfbGFiZWxfdCkpIHsKKwkJdnRvY19lcnJvcih1bmFibGVfdG9fcmVhZCwgInZ0b2NfcmVhZF92b2x1bWVfbGFiZWwiLAorCQkJCSAgICJDb3VsZCBub3QgcmVhZCB2b2x1bWUgbGFiZWwuIik7CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogd3JpdGVzIHRoZSB2b2x1bWUgbGFiZWwgdG8gZGFzZAorICovCitpbnQgCit2dG9jX3dyaXRlX3ZvbHVtZV9sYWJlbCAoaW50IGYsIHVuc2lnbmVkIGxvbmcgdmxhYmVsX3N0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgIHZvbHVtZV9sYWJlbF90ICp2bGFiZWwpIAoreworCVBERUJVRworCWludCByYzsKKworCWlmIChsc2VlayhmLCB2bGFiZWxfc3RhcnQsIFNFRUtfU0VUKSA9PSAtMSkKKwkJdnRvY19lcnJvcih1bmFibGVfdG9fc2VlaywgInZ0b2Nfd3JpdGVfdm9sdW1lX2xhYmVsIiwKKwkJCQkgICAiQ291bGQgbm90IHdyaXRlIHZvbHVtZSBsYWJlbC4iKTsKKworCXJjID0gd3JpdGUoZiwgdmxhYmVsLCBzaXplb2Yodm9sdW1lX2xhYmVsX3QpKTsgCisJaWYgKHJjICE9IHNpemVvZih2b2x1bWVfbGFiZWxfdCkpIAorCQl2dG9jX2Vycm9yKHVuYWJsZV90b193cml0ZSwgInZ0b2Nfd3JpdGVfdm9sdW1lX2xhYmVsIiwKKwkJCQkgICAiQ291bGQgbm90IHdyaXRlIHZvbHVtZSBsYWJlbC4iKTsKKworCXJldHVybiAwOworfQorCisvKgorICogdGFrZXMgYSBzdHJpbmcgYXMgaW5wdXQsIGNvbnZlcnRzIGl0IHRvIHVwcGVyY2FzZSwgdHJhbnNsYXRlcworICogaXQgdG8gRUJDRElDIGFuZCBmaWxscyBpdCB1cCB3aXRoIHNwYWNlcyBiZWZvcmUgaXQgY29waWVzIGl0CisgKiBhcyB2b2x1bWUgc2VyaWFsIHRvIHRoZSB2b2x1bWUgbGFiZWwKKyAqLwordm9pZAordnRvY192b2x1bWVfbGFiZWxfc2V0X3ZvbHNlciAodm9sdW1lX2xhYmVsX3QgKnZsYWJlbCwgY2hhciAqdm9sc2VyKQoreworCVBERUJVRworCWludCBqLCBpID0gc3RybGVuKHZvbHNlcik7CisJY2hhciBzW1ZPTFNFUl9MRU5HVEggKyAxXTsKKworCXN0cmNweShzLCAiICAgICAgIik7CisJdnRvY19lYmNkaWNfZW5jKHMsIHMsIFZPTFNFUl9MRU5HVEgpOworCXN0cm5jcHkodmxhYmVsLT52b2xpZCwgcywgVk9MU0VSX0xFTkdUSCk7CisKKwlpZiAoaSA+IFZPTFNFUl9MRU5HVEgpCisJCWkgPSBWT0xTRVJfTEVOR1RIOworCisJc3RybmNweShzLCB2b2xzZXIsIGkpOworCWZvciAoaj0wOyBqPGk7IGorKykKKwkJc1tqXSA9IHRvdXBwZXIoc1tqXSk7CisKKwlzW1ZPTFNFUl9MRU5HVEhdID0gMHgwMDsKKwl2dG9jX2ViY2RpY19lbmMocywgcywgaSk7CisJc3RybmNweSh2bGFiZWwtPnZvbGlkLCBzLCBpKTsKKworCXJldHVybjsKK30KKworLyoKKyAqIHJldHVybnMgdGhlIHZvbHVtZSBzZXJpYWwgbnVtYmVyIHJpZ2h0IGFmdGVyIGl0IGlzIHRyYW5zbGF0ZWQgCisgKiB0byBBU0NJSQorICovCitjaGFyICoKK3Z0b2Nfdm9sdW1lX2xhYmVsX2dldF92b2xzZXIgKHZvbHVtZV9sYWJlbF90ICp2bGFiZWwsIGNoYXIgKnZvbHNlcikKK3sKKwlQREVCVUcKKwl2dG9jX2ViY2RpY19kZWModmxhYmVsLT52b2xpZCwgdm9sc2VyLCBWT0xTRVJfTEVOR1RIKTsKKworCXJldHVybiB2b2xzZXI7Cit9CisKKy8qCisgKiBzZXRzIHRoZSB2b2x1bWUgbGFiZWwga2V5IHJpZ2h0IGFmdGVyCisgKiBpdCBoYXMgYmVlbiB0cmFuc2xhdGVkIHRvIEVCQ0RJQworICovCit2b2lkCit2dG9jX3ZvbHVtZV9sYWJlbF9zZXRfa2V5ICh2b2x1bWVfbGFiZWxfdCAqdmxhYmVsLCBjaGFyICprZXkpCit7CisJUERFQlVHCisJY2hhciBzWzRdOworIAorCXZ0b2NfZWJjZGljX2VuYyhrZXksIHMsIDQpOworCXN0cm5jcHkodmxhYmVsLT52b2xrZXksIHMsIDQpOworIAorCXJldHVybjsKK30gICAgICAgICAgICAgICAgCisKKy8qCisgKiBzZXRzIHRoZSB2b2x1bWUgbGFiZWwgaWRlbnRpZmllciByaWdodAorICogYWZ0ZXIgaXQgaGFzIGJlZW4gdHJhbnNsYXRlZCB0byBFQkNESUMKKyAqLwordm9pZAordnRvY192b2x1bWVfbGFiZWxfc2V0X2xhYmVsICh2b2x1bWVfbGFiZWxfdCAqdmxhYmVsLCBjaGFyICpsYmwpCit7CisJUERFQlVHCisJY2hhciBzWzRdOworCisJdnRvY19lYmNkaWNfZW5jKGxibCwgcywgNCk7CisJc3RybmNweSh2bGFiZWwtPnZvbGxibCwgcywgNCk7CisKKwlyZXR1cm47Cit9CisKKy8qCisgKiByZXR1cm5zIHRoZSB2b2x1bWUgbGFiZWwga2V5ID0gdGhlIGxhYmVsIGlkZW50aWZpZXIKKyAqIHJpZ2h0IGFmdGVyIGl0IGhhcyBiZWVuIHRyYW5zbGF0ZWQgdG8gQVNDSUkKKyAqLworY2hhciAqCit2dG9jX3ZvbHVtZV9sYWJlbF9nZXRfbGFiZWwgKHZvbHVtZV9sYWJlbF90ICp2bGFiZWwsIGNoYXIgKmxibCkKK3sKKwlQREVCVUcKKwl2dG9jX2ViY2RpY19kZWModmxhYmVsLT52b2xsYmwsIGxibCwgNCk7CisKKwlyZXR1cm4gbGJsOworfQorCisvKgorICogcmVhZHMgZWl0aGVyIGEgZm9ybWF0NCBsYWJlbCBvciBhIGZvcm1hdDEgbGFiZWwKKyAqIGZyb20gdGhlIHNwZWNpZmllZCBwb3NpdGlvbgorICovCit2b2lkIAordnRvY19yZWFkX2xhYmVsIChpbnQgZiwgdW5zaWduZWQgbG9uZyBwb3NpdGlvbiwgZm9ybWF0MV9sYWJlbF90ICpmMSwKKyAgICAgICAgICAgICAgICAgZm9ybWF0NF9sYWJlbF90ICpmNCwgZm9ybWF0NV9sYWJlbF90ICpmNSwgZm9ybWF0N19sYWJlbF90ICpmNykgCit7ICAgICAgICAKKwlQREVCVUcKKwlpbnQgdDsKKworCWlmIChsc2VlayhmLCBwb3NpdGlvbiwgU0VFS19TRVQpID09IC0xKSAKKwkJdnRvY19lcnJvcih1bmFibGVfdG9fc2VlaywgInZ0b2NfcmVhZF9sYWJlbCIsCisJCQkJICAgXygiQ291bGQgbm90IHJlYWQgVlRPQyBsYWJlbHMuIikpOworCisJaWYgKGYxICE9IE5VTEwpIHsKKwkJdCA9IHNpemVvZihmb3JtYXQxX2xhYmVsX3QpOworCQlpZiAocmVhZChmLCBmMSwgdCkgIT0gdCkgCisJCQl2dG9jX2Vycm9yKHVuYWJsZV90b19yZWFkLCAidnRvY19yZWFkX2xhYmVsIiwKKwkJCQkJICAgXygiQ291bGQgbm90IHJlYWQgVlRPQyBGTVQxIERTQ0IuIikpOworCX0KKworCWlmIChmNCAhPSBOVUxMKSB7CisJCXQgPSBzaXplb2YoZm9ybWF0NF9sYWJlbF90KTsKKwkJaWYgKHJlYWQoZiwgZjQsIHQpICE9IHQpIAorCQkJdnRvY19lcnJvcih1bmFibGVfdG9fcmVhZCwgInZ0b2NfcmVhZF9sYWJlbCIsCisJCQkJCSAgIF8oIkNvdWxkIG5vdCByZWFkIFZUT0MgRk1UNCBEU0NCLiIpKTsKKwl9CisKKwlpZiAoZjUgIT0gTlVMTCkgeworCQl0ID0gc2l6ZW9mKGZvcm1hdDVfbGFiZWxfdCk7CisJCWlmIChyZWFkKGYsIGY1LCB0KSAhPSB0KQorCQkJdnRvY19lcnJvcih1bmFibGVfdG9fcmVhZCwgInZ0b2NfcmVhZF9sYWJlbCIsCisJCQkJCSAgIF8oIkNvdWxkIG5vdCByZWFkIFZUT0MgRk1UNSBEU0NCLiIpKTsKKwl9CisKKwlpZiAoZjcgIT0gTlVMTCkgeworCQl0ID0gc2l6ZW9mKGZvcm1hdDdfbGFiZWxfdCk7CisJCWlmIChyZWFkKGYsIGY3LCB0KSAhPSB0KSAKKwkJCXZ0b2NfZXJyb3IodW5hYmxlX3RvX3JlYWQsICJ2dG9jX3JlYWRfbGFiZWwiLAorCQkJCQkgICBfKCJDb3VsZCBub3QgcmVhZCBWVE9DIEZNVDcgRFNDQi4iKSk7CisJfQorfQorCisvKgorICogd3JpdGVzIGVpdGhlciBhIEZNVDEsIEZNVDQgb3IgRk1UNSBsYWJlbAorICogdG8gdGhlIHNwZWNpZmllZCBwb3NpdGlvbgorICovCit2b2lkCit2dG9jX3dyaXRlX2xhYmVsIChpbnQgZiwgdW5zaWduZWQgbG9uZyBwb3NpdGlvbiwgZm9ybWF0MV9sYWJlbF90ICpmMSwgCisgICAgICAgICAgICAgICAgICBmb3JtYXQ0X2xhYmVsX3QgKmY0LCBmb3JtYXQ1X2xhYmVsX3QgKmY1LCBmb3JtYXQ3X2xhYmVsX3QgKmY3KQoreworCVBERUJVRworCWludCB0OworCisJaWYgKGxzZWVrKGYsIHBvc2l0aW9uLCBTRUVLX1NFVCkgPT0gLTEpIAorCQl2dG9jX2Vycm9yKHVuYWJsZV90b19zZWVrLCAidnRvY193cml0ZV9sYWJlbCIsCisJCQkJICAgXygiQ291bGQgbm90IHdyaXRlIFZUT0MgbGFiZWxzLiIpKTsKKworCWlmIChmMSAhPSBOVUxMKSB7CisJCXQgPSBzaXplb2YoZm9ybWF0MV9sYWJlbF90KTsKKwkJaWYgKHdyaXRlKGYsIGYxLCB0KSAhPSB0KSAKKwkJCXZ0b2NfZXJyb3IodW5hYmxlX3RvX3dyaXRlLCAidnRvY193cml0ZV9sYWJlbCIsCisJCQkJCSAgIF8oIkNvdWxkIG5vdCB3cml0ZSBWVE9DIEZNVDEgRFNDQi4iKSk7CisJfQorCisJaWYgKGY0ICE9IE5VTEwpIHsKKwkJdCA9IHNpemVvZihmb3JtYXQ0X2xhYmVsX3QpOworCQlpZiAod3JpdGUoZiwgZjQsIHQpICE9IHQpIAorCQkJdnRvY19lcnJvcih1bmFibGVfdG9fd3JpdGUsICJ2dG9jX3dyaXRlX2xhYmVsIiwKKwkJCQkJICAgXygiQ291bGQgbm90IHdyaXRlIFZUT0MgRk1UNCBEU0NCLiIpKTsKKwl9CisKKwlpZiAoZjUgIT0gTlVMTCkgeworCQl0ID0gc2l6ZW9mKGZvcm1hdDVfbGFiZWxfdCk7CisJCWlmICh3cml0ZShmLCBmNSwgdCkgIT0gdCkgCisJCQl2dG9jX2Vycm9yKHVuYWJsZV90b193cml0ZSwgInZ0b2Nfd3JpdGVfbGFiZWwiLAorCQkJCQkgICBfKCJDb3VsZCBub3Qgd3JpdGUgVlRPQyBGTVQ1IERTQ0IuIikpOworCX0KKworCWlmIChmNyAhPSBOVUxMKSB7CisJCXQgPSBzaXplb2YoZm9ybWF0N19sYWJlbF90KTsKKwkJaWYgKHdyaXRlKGYsIGY3LCB0KSAhPSB0KSAKKwkJCXZ0b2NfZXJyb3IodW5hYmxlX3RvX3dyaXRlLCAidnRvY193cml0ZV9sYWJlbCIsCisJCQkJCSAgIF8oIkNvdWxkIG5vdCB3cml0ZSBWVE9DIEZNVDcgRFNDQi4iKSk7CisJfQorfQorCisvKgorICogaW5pdGlhbGl6ZXMgYSBmb3JtYXQ0IGxhYmVsCisgKi8KK3ZvaWQgCit2dG9jX2luaXRfZm9ybWF0NF9sYWJlbCAoZm9ybWF0NF9sYWJlbF90ICpmNCwgdW5zaWduZWQgaW50IHVzYWJsZV9wYXJ0aXRpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjeWxpbmRlcnMsIHVuc2lnbmVkIGludCB0cmFja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJsb2NrcywgdW5zaWduZWQgaW50IGJsa3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQxNl90IGRldl90eXBlKSAKK3sKKwlQREVCVUcKKwlpbnQgaTsKKworCWNjaGhfdCBsb3dlciA9IHtWVE9DX1NUQVJUX0NDLCBWVE9DX1NUQVJUX0hIfTsKKwljY2hoX3QgdXBwZXIgPSB7VlRPQ19TVEFSVF9DQywgVlRPQ19TVEFSVF9ISH07CisKKwlmb3IgKGk9MDsgaTw0NDsgaSsrKSBmNC0+RFM0S0VZQ0RbaV0gPSAweDA0OworICAgICAgICBmNC0+RFM0SURGTVQgPSAweGY0OworCisJdnRvY19zZXRfY2NoaGIoJmY0LT5EUzRIUENIUiwgMHgwMDAwLCAweDAwMDAsIDB4MDApOworCWY0LT5EUzREU1JFQyA9IGJsb2NrcyAtIDI7CisJLyogZnJlZSBzcGFjZSBzdGFydHMgcmlnaHQgYmVoaW5kIFZUT0MKKwkgICB2dG9jX3NldF9jY2hoKCZmNC0+RFM0SENDSEgsIFZUT0NfU1RBUlRfQ0MsIFZUT0NfU1RBUlRfSEggKyAxKTsqLworCXZ0b2Nfc2V0X2NjaGgoJmY0LT5EUzRIQ0NISCwgMHgwMDAwLCAweDAwMDApOworCWY0LT5EUzROT0FUSyA9IDB4MDAwMDsKKwlmNC0+RFM0VlRPQ0kgPSAweDAwOworCWY0LT5EUzROT0VYVCA9IDB4MDE7CisJZjQtPkRTNFNNU0ZHID0gMHgwMDsKKwlmNC0+RFM0REVWQUMgPSAweDAwOworCisJLyogLS0gYmVnaW4gZjQtPkRTNERFVkNUIC0tICovCisJZjQtPkRTNERFVkNULkRTNERTQ1lMID0gY3lsaW5kZXJzOworCWY0LT5EUzRERVZDVC5EUzREU1RSSyA9IHRyYWNrczsKKworCXN3aXRjaCAoZGV2X3R5cGUpIHsKKwkJY2FzZSBEQVNEXzMzODBfVFlQRToKKwkJCWY0LT5EUzRERVZDVC5EUzRERVZUSyA9IERBU0RfMzM4MF9WQUxVRTsKKwkJCWJyZWFrOworCQljYXNlIERBU0RfMzM5MF9UWVBFOgorCQkJZjQtPkRTNERFVkNULkRTNERFVlRLID0gREFTRF8zMzkwX1ZBTFVFOworCQkJYnJlYWs7CisJCWNhc2UgREFTRF85MzQ1X1RZUEU6CisJCQlmNC0+RFM0REVWQ1QuRFM0REVWVEsgPSBEQVNEXzkzNDVfVkFMVUU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWY0LT5EUzRERVZDVC5EUzRERVZUSyA9IGJsb2NrcyAqIGJsa3NpemU7OworCX0KKworCWY0LT5EUzRERVZDVC5EUzRERVZJICA9IDB4MDA7CisJZjQtPkRTNERFVkNULkRTNERFVkwgID0gMHgwMDsKKwlmNC0+RFM0REVWQ1QuRFM0REVWSyAgPSAweDAwOworCWY0LT5EUzRERVZDVC5EUzRERVZGRyA9IDB4MzA7CisJZjQtPkRTNERFVkNULkRTNERFVlRMID0gMHgwMDAwOworCWY0LT5EUzRERVZDVC5EUzRERVZEVCA9IGJsb2NrczsKKwlmNC0+RFM0REVWQ1QuRFM0REVWREIgPSAweDAwOworCS8qIC0tIGVuZCBmNC0+RFM0REVWQ1QgLS0gKi8KKworCWJ6ZXJvKGY0LT5EUzRBTVRJTSwgc2l6ZW9mKGY0LT5EUzRBTVRJTSkpOworCWJ6ZXJvKGY0LT5EUzRBTUNBVCwgc2l6ZW9mKGY0LT5EUzRBTUNBVCkpOworCWJ6ZXJvKGY0LT5EUzRSMlRJTSwgc2l6ZW9mKGY0LT5EUzRSMlRJTSkpOworCWJ6ZXJvKGY0LT5yZXMxLCBzaXplb2YoZjQtPnJlczEpKTsKKwliemVybyhmNC0+RFM0RjZQVFIsIHNpemVvZihmNC0+RFM0RjZQVFIpKTsKKworCS8qIC0tIGJlZ2luIGY0bGJsLT5EUzRWVE9DRSAtLSAqLworCXZ0b2Nfc2V0X2V4dGVudCgmZjQtPkRTNFZUT0NFLCAweDAxLCAweDAwLCAmbG93ZXIsICZ1cHBlcik7CisJLyogLS0gZW5kIGY0bGJsLT5EUzRWVE9DRSAtLSAqLworCisJYnplcm8oZjQtPnJlczIsIHNpemVvZihmNC0+cmVzMikpOworCWY0LT5EUzRFRkxWTCA9IDB4MDA7CisJYnplcm8oJmY0LT5EUzRFRlBUUiwgc2l6ZW9mKGY0LT5EUzRFRlBUUikpOworCWJ6ZXJvKGY0LT5yZXMzLCBzaXplb2YoZjQtPnJlczMpKTsKK30KKworLyoKKyAqIGluaXRpYWxpemVzIGEgZm9ybWF0NSBsYWJlbAorICovCit2b2lkCit2dG9jX2luaXRfZm9ybWF0NV9sYWJlbCAoZm9ybWF0NV9sYWJlbF90ICpmNSkgCit7CisJUERFQlVHCisJaW50IGk7CisKKwliemVybyhmNSwgc2l6ZW9mKGZvcm1hdDVfbGFiZWxfdCkpOworCWZvciAoaT0wOyBpPDQ7IGkrKykKKwkJZjUtPkRTNUtFWUlEW2ldID0gMHgwNTsKKwlmNS0+RFM1Rk1USUQgPSAweGY1OworfQorCisvKgorICogaW5pdGlhbGl6ZXMgYSBmb3JtYXQ3IGxhYmVsCisgKi8KK3ZvaWQKK3Z0b2NfaW5pdF9mb3JtYXQ3X2xhYmVsIChmb3JtYXQ3X2xhYmVsX3QgKmY3KSAKK3sKKwlQREVCVUcKKwlpbnQgaTsKKworCWJ6ZXJvKGY3LCBzaXplb2YoZm9ybWF0N19sYWJlbF90KSk7CisJZm9yIChpPTA7IGk8NDsgaSsrKQorCQlmNy0+RFM3S0VZSURbaV0gPSAweDA3OworCWY3LT5EUzdGTVRJRCA9IDB4Zjc7Cit9CisKKy8qCisgKiBpbml0aWFsaXplcyBhIGZvcm1hdDEgbGFiZWwKKyAqLwordm9pZCAKK3Z0b2NfaW5pdF9mb3JtYXQxX2xhYmVsIChjaGFyICp2b2xpZCwgdW5zaWduZWQgaW50IGJsa3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW50X3QgKnBhcnRfZXh0ZW50LCBmb3JtYXQxX2xhYmVsX3QgKmYxKSAKK3sKKwlQREVCVUcKKwlzdHJ1Y3QgdG0gKiBjcmVhdGltZTsKKwl0aW1lX3QgdDsKKwljaGFyIHN0cls4MF07CisKKwkvKiBnZXQgYWN0dWFsIGRhdGUgKi8KKwl0ID0gdGltZShOVUxMKTsKKwljcmVhdGltZSA9IGdtdGltZSgmdCk7CisKKwliemVybyhmMS0+RFMxRFNOQU0sIHNpemVvZihmMS0+RFMxRFNOQU0pKTsKKwlzcHJpbnRmKHN0ciwgIlBBUlQgICAgLk5FVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIik7CisJdnRvY19lYmNkaWNfZW5jKHN0ciwgc3RyLCA0NCk7CisJc3RybmNweShmMS0+RFMxRFNOQU0sIHN0ciwgNDQpOworCWYxLT5EUzFGTVRJRCA9IDB4ZjE7CisJc3RybmNweShmMS0+RFMxRFNTTiwgIiAgICAgICIsIDYpOworCWYxLT5EUzFWT0xTUSA9IDB4MDAwMTsKKworCXZ0b2Nfc2V0X2RhdGUoJmYxLT5EUzFDUkVEVCwgKHVfaW50OF90KSBjcmVhdGltZS0+dG1feWVhciwKKwkJCQkgICh1X2ludDE2X3QpIGNyZWF0aW1lLT50bV95ZGF5KTsKKwkvKiBleHBpcmVzIG5ldmVyIC0gOTkgMzY1ICovCisJdnRvY19zZXRfZGF0ZSgmZjEtPkRTMUVYUERULCAweDYzLCAweDAxNkQpOworCWYxLT5EUzFOT0VQViA9IDB4MDE7CisJZjEtPkRTMU5PQkRCID0gMHgwMDsKKwlmMS0+RFMxRkxBRzEgPSAweDAwOworCXZ0b2NfZWJjZGljX2VuYygiSUJNIExJTlVYICAgICIsIHN0ciwgMTMpOworCXN0cm5jcHkoZjEtPkRTMVNZU0NELCBzdHIsIDEzKTsKKwl2dG9jX3NldF9kYXRlKCZmMS0+RFMxUkVGRCwgKHVfaW50OF90KSBjcmVhdGltZS0+dG1feWVhciwKKwkJCQkgICh1X2ludDE2X3QpIGNyZWF0aW1lLT50bV95ZGF5KTsKKwlmMS0+RFMxU01TRkcgPSAweDAwOworCWYxLT5EUzFTQ1hURiA9IDB4MDA7CisJZjEtPkRTMVNDWFRWID0gMHgwMDAwOworCWYxLT5EUzFEU1JHMSA9IDB4MDA7CisJZjEtPkRTMURTUkcyID0gMHgwMDsKKwlmMS0+RFMxUkVDRk0gPSAweDg4OworCWYxLT5EUzFPUFRDRCA9IDB4MDA7CisJZjEtPkRTMUJMS0wgID0gYmxrc2l6ZTsKKwlmMS0+RFMxTFJFQ0wgPSBibGtzaXplOworCWYxLT5EUzFLRVlMICA9IDB4MDA7CisJZjEtPkRTMVJLUCAgID0gMHgwMDAwOworCWYxLT5EUzFEU0lORCA9IDB4ODA7IC8qIGxhc3Qgdm9sdW1lIGZvciB0aGlzIGRhdGFzZXQgKi8KKwlmMS0+RFMxU0NBTDEgPSAweDgwOworCWJ6ZXJvKCZmMS0+RFMxU0NBTDMsIHNpemVvZihmMS0+RFMxU0NBTDMpKTsKKwl2dG9jX3NldF90dHIoJmYxLT5EUzFMU1RBUiwgMHgwMDAwLCAweDAwKTsKKwlmMS0+RFMxVFJCQUwgPSAweDAwOworCWJ6ZXJvKCZmMS0+cmVzMSwgc2l6ZW9mKGYxLT5yZXMxKSk7CisJbWVtY3B5KCZmMS0+RFMxRVhUMSwgcGFydF9leHRlbnQsIHNpemVvZihleHRlbnRfdCkpOworCWJ6ZXJvKCZmMS0+RFMxRVhUMiwgc2l6ZW9mKGV4dGVudF90KSk7CisJYnplcm8oJmYxLT5EUzFFWFQzLCBzaXplb2YoZXh0ZW50X3QpKTsKKwl2dG9jX3NldF9jY2hoYigmZjEtPkRTMVBUUkRTLCAweDAwMDAsIDB4MDAwMCwgMHgwMCk7Cit9CisKKy8qCisgKiBkbyBzb21lIHVwZGF0ZXMgdG8gdGhlIFZUT0MgZm9ybWF0NCBsYWJlbAorICovCit2b2lkIAordnRvY191cGRhdGVfZm9ybWF0NF9sYWJlbCAoZm9ybWF0NF9sYWJlbF90ICpmNCwgY2NoaGJfdCAqaGlnaGVzdF9mMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50MTZfdCB1bnVzZWRfdXBkYXRlKQoreworCVBERUJVRworCS8qIHVwZGF0ZSBoaWdoZXN0IGFkZHJlc3Mgb2YgYSBmb3JtYXQgMSBsYWJlbCAqLworCW1lbWNweSgmZjQtPkRTNEhQQ0hSLCBoaWdoZXN0X2YxLCBzaXplb2YoY2NoaGJfdCkpOworCisJLyogdXBkYXRlIHVudXNlZCBEU0NCIGNvdW50ICovCisJZjQtPkRTNERTUkVDID0gdW51c2VkX3VwZGF0ZTsKK30KKworLyoKKyAqIHJlb3JnYW5pemVzIGFsbCBleHRlbnRzIHdpdGhpbiBhIEZNVDUgbGFiZWwKKyAqLworc3RhdGljIHZvaWQKK3Z0b2NfcmVvcmdhbml6ZV9GTVQ1X2V4dGVudHMgKGZvcm1hdDVfbGFiZWxfdCAqZjUpIAoreworCVBERUJVRworCWRzNWV4dF90ICpleHQsICpsYXN0LCB0bXA7CisJaW50IGksIGo7CisKKwlmb3IgKGk9MDsgaTwyNjsgaSsrKSB7CisJCWlmIChpPT0wKSAKKwkJCWxhc3QgPSAmZjUtPkRTNUFWRVhUOyAKKwkJZWxzZSBpZiAoKGkgPiAwKSAmJiAoaSA8IDgpKQorCQkJbGFzdCA9ICZmNS0+RFM1RVhUQVZbaS0xXTsKKwkJZWxzZQorCQkJbGFzdCA9ICZmNS0+RFM1TUFWRVRbaS04XTsKKworCQlmb3IgKGo9aTsgajwyNjsgaisrKSB7CisJCQlpZiAoaj09MCkgCisJCQkJZXh0ID0gJmY1LT5EUzVBVkVYVDsgCisJCQllbHNlIGlmICgoaiA+IDApICYmIChqIDwgOCkpCisJCQkJZXh0ID0gJmY1LT5EUzVFWFRBVltqLTFdOworCQkJZWxzZQorCQkJCWV4dCA9ICZmNS0+RFM1TUFWRVRbai04XTsKKworCQkJaWYgKCgoZXh0LT50ID4gMCkgJiYgKGxhc3QtPnQgPT0gMCkpIHx8IAorCQkJICAgICgoZXh0LT50ID4gMCkgJiYgKGV4dC0+dCA8IGxhc3QtPnQpKSkKKwkJCXsKKwkJCQl0bXAudCAgPSBsYXN0LT50OworCQkJCXRtcC5mYyA9IGxhc3QtPmZjOworCQkJCXRtcC5mdCA9IGxhc3QtPmZ0OworCQkJCWxhc3QtPnQgID0gZXh0LT50OworCQkJCWxhc3QtPmZjID0gZXh0LT5mYzsKKwkJCQlsYXN0LT5mdCA9IGV4dC0+ZnQ7CisJCQkJZXh0LT50ICA9IHRtcC50OworCQkJCWV4dC0+ZmMgPSB0bXAuZmM7CisJCQkJZXh0LT5mdCA9IHRtcC5mdDsKKwkJCX0KKwkJfQorCX0KK30KKworLyoKKyAqIGFkZCBhIGZyZWUgc3BhY2UgZXh0ZW50IGRlc2NyaXB0aW9uIHRvIHRoZSBWVE9DIEZNVDUgRFNDQgorICovCit2b2lkIAordnRvY191cGRhdGVfZm9ybWF0NV9sYWJlbF9hZGQgKGZvcm1hdDVfbGFiZWxfdCAqZjUsIGludCB2ZXJib3NlLCBpbnQgY3lsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0cmssIHVfaW50MTZfdCBhLCB1X2ludDE2X3QgYiwgdV9pbnQ4X3QgYykgCit7CisJUERFQlVHCisJZHM1ZXh0X3QgKmV4dCA9IE5VTEwsICp0bXAgPSBOVUxMOworCWludCBpOwkKKworCWZvciAoaT0wOyBpPDI2OyBpKyspIHsKKwkJaWYgKGk9PTApIAorCQkJZXh0ID0gJmY1LT5EUzVBVkVYVDsgCisJCWVsc2UgaWYgKChpID4gMCkgJiYgKGkgPCA4KSkKKwkJCWV4dCA9ICZmNS0+RFM1RVhUQVZbaS0xXTsKKwkJZWxzZQorCQkJZXh0ID0gJmY1LT5EUzVNQVZFVFtpLThdOworCisJCWlmICgoKGEgPCBleHQtPnQpICYmIChhICsgYip0cmsgKyBjID4gZXh0LT50KSkgfHwgCisJCSAgICAoKGEgPiBleHQtPnQpICYmIChleHQtPnQgKyBleHQtPmZjKnRyayArIGV4dC0+ZnQgPiBhKSkpCisJCXsKKwkJCXB1dHMgKCJCVUc6IG92ZXJsYXBwaW5nIGZyZWUgc3BhY2UgZXh0ZW50cyAiCisJCQkgICAgICAiaW4gRk1UNSBEU0NCIVxuZXhpdGluZy4uLiIpOworCQkJZXhpdCgxKTsKKwkJfQorCisJCWlmICgoZXh0LT50ICsgZXh0LT5mYyArIGV4dC0+ZnQpID09IDB4MDAwMCkgeworCQkJZXh0LT50ICA9IGE7CisJCQlleHQtPmZjID0gYjsKKwkJCWV4dC0+ZnQgPSBjOworCQkJdG1wID0gZXh0OworCQkJaWYgKHZlcmJvc2UpIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRzICgiRk1UNSBhZGQgZXh0ZW50OiBhZGQgbmV3IGV4dGVudCIpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAodG1wID09IE5VTEwpIHsKKwkJLyogQlVHOiBubyBmcmVlIGV4dGVudCBmb3VuZCAqLworCQlwdXRzICgiQlVHOiBubyBmcmVlIEZNVDUgRFNDQiBleHRlbnQgZm91bmQhXG5leGl0aW5nLi4uIik7CisJCWV4aXQoMSk7CisJfQorCisJZm9yIChpPTA7IGk8MjY7IGkrKykgeworCQlpZiAoaT09MCkKKwkJCWV4dCA9ICZmNS0+RFM1QVZFWFQ7CisJCWVsc2UgaWYgKChpID4gMCkgJiYgKGkgPCA4KSkKKwkJCWV4dCA9ICZmNS0+RFM1RVhUQVZbaS0xXTsKKwkJZWxzZQorCQkJZXh0ID0gJmY1LT5EUzVNQVZFVFtpLThdOworCisJCWlmICgoZXh0LT50ICsgZXh0LT5mYyArIGV4dC0+ZnQpID09IDB4MDAwMCkKKwkJCWNvbnRpbnVlOworCisJCWlmICgoZXh0LT50ICsgZXh0LT5mYyp0cmsgKyBleHQtPmZ0KSA9PSB0bXAtPnQpIHsKKwkJCS8qIHRoaXMgZXh0ZW50IHByZWNlZGVzIHRoZSBuZXcgb25lICovCisJCQlleHQtPmZjICs9ICh0bXAtPmZjICsgKHRtcC0+ZnQgKyBleHQtPmZ0KS90cmspOworCQkJZXh0LT5mdCA9ICh0bXAtPmZ0ICsgZXh0LT5mdCkgJSB0cms7CisJCQliemVybyh0bXAsIHNpemVvZihkczVleHRfdCkpOworCQkJdG1wID0gZXh0OworCisJCQlpZiAodmVyYm9zZSkgCisJCQkJcHV0cyAoIkZNVDUgYWRkIGV4dGVudDogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWVyZ2Ugd2l0aCBwcmVkZWNlc3NvciIpOworCisJCQlpID0gLTE7CisJCQljb250aW51ZTsKKwkJfSAKKworCQlpZiAoKHRtcC0+dCArIHRtcC0+ZmMqdHJrICsgdG1wLT5mdCkgPT0gZXh0LT50KSB7CisJCQkvKiB0aGlzIGV4dGVudCBzdWNjZWVkcyB0aGUgbmV3IG9uZSAqLworCQkJZXh0LT50ID0gdG1wLT50OworCQkJZXh0LT5mYyArPSAodG1wLT5mYyArICh0bXAtPmZ0ICsgZXh0LT5mdCkvdHJrKTsKKwkJCWV4dC0+ZnQgPSAodG1wLT5mdCArIGV4dC0+ZnQpICUgdHJrOworCQkJYnplcm8odG1wLCBzaXplb2YoZHM1ZXh0X3QpKTsKKwkJCXRtcCA9IGV4dDsKKworCQkJaWYgKHZlcmJvc2UpIAorCQkJCXB1dHMgKCJGTVQ1IGFkZCBleHRlbnQ6ICIKKwkJCQkgICAgICAibWVyZ2Ugd2l0aCBzdWNjZXNzb3IiKTsKKworCQkJaSA9IC0xOworCQkJY29udGludWU7CisJCX0gCisJfQorfQorCisvKgorICogcmVtb3ZlIGEgZnJlZSBzcGFjZSBleHRlbnQgZGVzY3JpcHRpb24gZnJvbSB0aGUgVlRPQyBGTVQ1IERTQ0IKKyAqLwordm9pZCAKK3Z0b2NfdXBkYXRlX2Zvcm1hdDVfbGFiZWxfZGVsIChmb3JtYXQ1X2xhYmVsX3QgKmY1LCBpbnQgdmVyYm9zZSwgaW50IGN5bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdHJrLCB1X2ludDE2X3QgYSwgdV9pbnQxNl90IGIsIHVfaW50OF90IGMpIAoreworCVBERUJVRworCWRzNWV4dF90ICpleHQ7CisJaW50IGksIGNvdW50ZXI9MDsKKwkKKwlmb3IgKGk9MDsgaTwyNjsgaSsrKSB7CisJCWlmIChpPT0wKSAKKwkJCWV4dCA9ICZmNS0+RFM1QVZFWFQ7IAorCQllbHNlIGlmICgoaSA+IDApICYmIChpIDwgOCkpCisJCQlleHQgPSAmZjUtPkRTNUVYVEFWW2ktMV07CisJCWVsc2UKKwkJCWV4dCA9ICZmNS0+RFM1TUFWRVRbaS04XTsKKworCQlpZiAoKGEgPT0gZXh0LT50KSAmJiAoYiA9PSBleHQtPmZjKSAmJiAoYyA9PSBleHQtPmZ0KSkgeworCQkJLyogZmlsbHMgdXAgd2hvbGUgZnJlZSBzcGFjZSBnYXAgKi8KKwkJCWJ6ZXJvKGV4dCwgc2l6ZW9mKGRzNWV4dF90KSk7CisKKwkJCWlmICh2ZXJib3NlKSAKKwkJCQlwdXRzICgiRk1UNSBkZWwgZXh0ZW50OiBmaWxscyB3aG9sZSBnYXAiKTsKKworCQkJY291bnRlcisrOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoKGEgPT0gZXh0LT50KSAmJiAoKGIgPCBleHQtPmZjKSB8fCAoYyA8IGV4dC0+ZnQpKSkgeworCQkJLyogbGVmdC1ib3VuZGVkIGluIGZyZWUgc3BhY2UgZ2FwICovCisJCQlleHQtPnQgPSBleHQtPnQgKyBiKnRyayArIGM7CisKKwkJCWlmIChjID4gZXh0LT5mdCkgeworCQkJCWV4dC0+ZmMgLT0gKGIgKyAxKTsKKwkJCQlleHQtPmZ0IC09IChjIC0gdHJrKTsKKwkJCX0gZWxzZSB7CisJCQkJZXh0LT5mYyAtPSBiOworCQkJCWV4dC0+ZnQgLT0gYzsKKwkJCX0KKworCQkJaWYgKHZlcmJvc2UpIAorCQkJCXB1dHMgKCJGTVQ1IGRlbCBleHRlbnQ6IGxlZnQgYm91bmRlZCIpOworCisJCQljb3VudGVyKys7CisJCQlicmVhazsKKwkJfQorCisJCWlmICgoZXh0LT50IDwgYSkKKwkJICAgICYmICgoZXh0LT50ICsgZXh0LT5mYyp0cmsgKyBleHQtPmZ0KSA9PSAoYSArIGIqdHJrICsgYykpKQorCQl7CisJCQkvKiByaWdodC1ib3VuZGVkIGluIGZyZWUgc3BhY2UgZ2FwICovCisJCQlpZiAoYyA+IGV4dC0+ZnQpIHsKKwkJCQlleHQtPmZjIC09IChiICsgMSk7CisJCQkJZXh0LT5mdCAtPSAoYyAtIHRyayk7CisJCQl9IGVsc2UgeworCQkJCWV4dC0+ZmMgLT0gYjsKKwkJCQlleHQtPmZ0IC09IGM7CisJCQl9CisKKwkJCWlmICh2ZXJib3NlKSAKKwkJCQlwdXRzICgiRk1UNSBkZWwgZXh0ZW50OiByaWdodCBib3VuZGVkIik7CisKKwkJCWNvdW50ZXIrKzsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKChhID4gZXh0LT50KQorCQkJJiYgKChleHQtPnQgKyBleHQtPmZjKnRyayArIGV4dC0+ZnQpID4gKGEgKyBiKnRyayArIGMpKSkKKwkJeworCQkJLyogcGFydGl0aW9uIGRldmlkZXMgZnJlZSBzcGFjZSBpbnRvIDIgcGllY2VzICovCisJCQl1X2ludDE2X3QgeCA9IGEgKyBiKnRyayArIGM7CisJCQl1X2ludDE2X3Qgdyx5OworCQkJdV9pbnQ4X3QgejsKKworCQkJdyA9IChleHQtPnQgKyBleHQtPmZjKnRyayArIGV4dC0+ZnQpIC0gKGEgKyBiKnRyayArIGMpOworCQkJeSA9IHcgLyB0cms7CisJCQl6ID0gdyAlIHRyazsKKworCQkJZXh0LT5mYyA9IChhIC0gZXh0LT50KSAvIHRyazsKKwkJCWV4dC0+ZnQgPSAoYSAtIGV4dC0+dCkgJSB0cms7CisKKwkJCXZ0b2NfdXBkYXRlX2Zvcm1hdDVfbGFiZWxfYWRkKGY1LCB2ZXJib3NlLCAKKwkJCQkJCSAgICAgIGN5bCwgdHJrLCB4LCB5LCB6KTsKKworCQkJaWYgKHZlcmJvc2UpIAorCQkJCXB1dHMgKCJGTVQ1IGRlbCBleHRlbnQ6IDIgcGllY2VzIik7CisKKwkJCWNvdW50ZXIrKzsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKChhIDwgZXh0LT50KSAmJiAoYSArIGIqdHJrICsgYyA+IGV4dC0+dCkKKwkJICAgICYmIChhICsgYip0cmsgKyBjIDwgZXh0LT50ICsgZXh0LT5mYyp0cmsgKyBleHQtPmZ0KSkKKwkJeworCQkJcHV0cyAoIkJVRzogY29ycmVzcG9uZGluZyBmcmVlIHNwYWNlIGV4dGVudCAiCisJCQkgICAgICAiZG9lc24ndCBtYXRjaCBmcmVlIHNwYWNlIGN1cnJlbnRseSBzaG93biAiCisJCQkgICAgICAiaW4gRk1UNSBEU0NCIVxuZXhpdGluZy4uLiIpOworCQkJZXhpdCgxKTsKKwkJfQorCQkKKwkJaWYgKChhID4gZXh0LT50KSAmJiAoYSA8IGV4dC0+dCArIGV4dC0+ZmMqdHJrICsgZXh0LT5mdCkKKwkJICAgICYmIChhICsgYip0cmsgKyBjID4gZXh0LT50ICsgZXh0LT5mYyp0cmsgKyBleHQtPmZ0KSkKKwkJeworCQkJcHV0cyAoIkJVRzogc3BlY2lmaWVkIGZyZWUgc3BhY2UgZXh0ZW50IGZvciAiCisJCQkgICAgICAiZGVsZXRpbmcgZG9lc24ndCBtYXRjaCBmcmVlIHNwYWNlICIKKwkJCSAgICAgICJjdXJyZW50bHkgc2hvd24gaW4gRk1UNSBEU0NCIVxuIgorCQkJICAgICAgImV4aXRpbmcuLi4iKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9CisKKwlpZiAoY291bnRlciA+IDApCisJCXJldHVybjsKKworCXB1dHMgKCJCVUc6IHNwZWNpZmllZCBmcmVlIHNwYWNlIGV4dGVudCBmb3IgIgorCSAgICAgICJkZWxldGluZyBub3QgZm91bmQgaW4gRk1UNSBEU0NCIVxuIgorCSAgICAgICJleGl0aW5nLi4uIik7CisJZXhpdCgxKTsKK30KKworLyoKKyAqIHJlb3JnYW5pemVzIGFsbCBleHRlbnRzIHdpdGhpbiBhIEZNVDcgbGFiZWwKKyAqLworc3RhdGljIHZvaWQKK3Z0b2NfcmVvcmdhbml6ZV9GTVQ3X2V4dGVudHMgKGZvcm1hdDdfbGFiZWxfdCAqZjcpIAoreworCVBERUJVRworCWRzN2V4dF90ICpleHQsICpsYXN0LCB0bXA7CisJaW50IGksIGo7CisKKwlmb3IgKGk9MDsgaTwxNjsgaSsrKSB7CisJCWlmIChpPDUpIAorCQkJbGFzdCA9ICZmNy0+RFM3RVhUTlRbaV07IAorCQllbHNlIAorCQkJbGFzdCA9ICZmNy0+RFM3QURFWFRbaS01XTsKKworCQlmb3IgKGo9aTsgajwxNjsgaisrKSB7CisJCQlpZiAoajw1KSAKKwkJCQlleHQgPSAmZjctPkRTN0VYVE5UW2pdOyAKKwkJCWVsc2UgCisJCQkJZXh0ID0gJmY3LT5EUzdBREVYVFtqLTVdOworCisJCQlpZiAoKChleHQtPmEgPiAwKSAmJiAobGFzdC0+YSA9PSAwKSkKKwkJCSAgICB8fCAoKGV4dC0+YSA+IDApICYmIChleHQtPmEgPCBsYXN0LT5hKSkpCisJCQl7CisJCQkJdG1wLmEgPSBsYXN0LT5hOworCQkJCXRtcC5iID0gbGFzdC0+YjsKKwkJCQlsYXN0LT5hID0gZXh0LT5hOworCQkJCWxhc3QtPmIgPSBleHQtPmI7CisJCQkJZXh0LT5hID0gdG1wLmE7CisJCQkJZXh0LT5iID0gdG1wLmI7CisJCQl9CisJCX0KKwl9Cit9CisKKy8qCisgKiBhZGQgYSBmcmVlIHNwYWNlIGV4dGVudCBkZXNjcmlwdGlvbiB0byB0aGUgVlRPQyBGTVQ3IERTQ0IKKyAqLwordm9pZCAKK3Z0b2NfdXBkYXRlX2Zvcm1hdDdfbGFiZWxfYWRkIChmb3JtYXQ3X2xhYmVsX3QgKmY3LCBpbnQgdmVyYm9zZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludDMyX3QgYSwgdV9pbnQzMl90IGIpIAoreworCVBERUJVRworCWRzN2V4dF90ICpleHQgPSBOVUxMLCAqdG1wID0gTlVMTDsKKwlpbnQgaTsJCisKKwlmb3IgKGk9MDsgaTwxNjsgaSsrKSB7CisJCWlmIChpPDUpIAorCQkJZXh0ID0gJmY3LT5EUzdFWFROVFtpXTsgCisJCWVsc2UgCisJCQlleHQgPSAmZjctPkRTN0FERVhUW2ktNV07CisKKwkJaWYgKCgoYSA8IGV4dC0+YSkgJiYgKGIgPiBleHQtPmEpICYmIChiIDwgZXh0LT5iKSkKKwkJICAgIHx8ICgoYSA+IGV4dC0+YSkgJiYgKGEgPCBleHQtPmIpICYmIChiID4gZXh0LT5iKSkpCisJCXsKKwkJCXB1dHMgKCJCVUc6IG92ZXJsYXBwaW5nIGZyZWUgc3BhY2UgZXh0ZW50cyAiCisJCQkgICAgICAiaW4gRk1UNyBEU0NCIVxuZXhpdGluZy4uLiIpOworCQkJZXhpdCgxKTsKKwkJfQorCisJCWlmICgoZXh0LT5hICsgZXh0LT5iKSA9PSAweDAwMDAwMDAwKSB7CisJCQlleHQtPmEgPSBhOworCQkJZXh0LT5iID0gYjsKKwkJCXRtcCA9IGV4dDsKKworCQkJaWYgKHZlcmJvc2UpIAorCQkJCXB1dHMgKCJGTVQ3IGFkZCBleHRlbnQ6IGFkZCBuZXcgZXh0ZW50Iik7CisKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKHRtcCA9PSBOVUxMKSB7CisJCS8qIEJVRzogbm8gZnJlZSBleHRlbnQgZm91bmQgKi8KKwkJcHV0cyAoIkJVRzogbm8gZnJlZSBGTVQ3IERTQ0IgZXh0ZW50IGZvdW5kIVxuZXhpdGluZy4uLiIpOworCQlleGl0KDEpOworCX0KKworCWZvciAoaT0wOyBpPDE2OyBpKyspIHsKKwkJaWYgKGk8NSkgCisJCQlleHQgPSAmZjctPkRTN0VYVE5UW2ldOyAKKwkJZWxzZSAKKwkJCWV4dCA9ICZmNy0+RFM3QURFWFRbaS01XTsKKworCQlpZiAoKGV4dC0+YSArIGV4dC0+YikgPT0gMHgwMDAwMDAwMCkKKwkJCWNvbnRpbnVlOworCisJCWlmICgoZXh0LT5iICsgMSkgPT0gdG1wLT5hKSB7CisJCQkvKiB0aGlzIGV4dGVudCBwcmVjZWRlcyB0aGUgbmV3IG9uZSAqLworCQkJZXh0LT5iID0gdG1wLT5iOworCQkJYnplcm8odG1wLCBzaXplb2YoZHM3ZXh0X3QpKTsKKwkJCXRtcCA9IGV4dDsKKworCQkJaWYgKHZlcmJvc2UpIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRzICgiRk1UNyBhZGQgZXh0ZW50OiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtZXJnZSB3aXRoIHByZWRlY2Vzc29yIik7CisKKwkJCWkgPSAtMTsKKwkJCWNvbnRpbnVlOworCQl9IAorCisJCWlmIChleHQtPmEgPT0gKHRtcC0+YiArIDEpKSB7CisJCQkvKiB0aGlzIGV4dGVudCBzdWNjZWVkcyB0aGUgbmV3IG9uZSAqLworCQkJZXh0LT5hID0gdG1wLT5hOworCQkJYnplcm8odG1wLCBzaXplb2YoZHM3ZXh0X3QpKTsKKwkJCXRtcCA9IGV4dDsKKworCQkJaWYgKHZlcmJvc2UpIAorCQkJCXB1dHMgKCJGTVQ3IGFkZCBleHRlbnQ6IG1lcmdlIHdpdGggc3VjY2Vzc29yIik7CisKKwkJCWkgPSAtMTsKKwkJCWNvbnRpbnVlOworCQl9IAorCX0KK30KKworLyoKKyAqIHJlbW92ZSBhIGZyZWUgc3BhY2UgZXh0ZW50IGRlc2NyaXB0aW9uIGZyb20gdGhlIFZUT0MgRk1UNyBEU0NCCisgKi8KK3ZvaWQgCit2dG9jX3VwZGF0ZV9mb3JtYXQ3X2xhYmVsX2RlbCAoZm9ybWF0N19sYWJlbF90ICpmNywgaW50IHZlcmJvc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQzMl90IGEsIHVfaW50MzJfdCBiKSAKK3sKKwlQREVCVUcKKwlkczdleHRfdCAqZXh0OworCWludCBpLCBjb3VudGVyPTA7CisJCisJZm9yIChpPTA7IGk8MTY7IGkrKykgeworCQlpZiAoaTw1KSAKKwkJCWV4dCA9ICZmNy0+RFM3RVhUTlRbaV07IAorCQllbHNlIAorCQkJZXh0ID0gJmY3LT5EUzdBREVYVFtpLTVdOworCisJCWlmICgoYSA9PSBleHQtPmEpICYmIChiID09IGV4dC0+YikpIHsKKwkJCS8qIGZpbGxzIHVwIHdob2xlIGZyZWUgc3BhY2UgZ2FwICovCisJCQliemVybyhleHQsIHNpemVvZihkczdleHRfdCkpOworCisJCQlpZiAodmVyYm9zZSkgCisJCQkJcHV0cyAoIkZNVDcgZGVsIGV4dGVudDogZmlsbHMgd2hvbGUgZ2FwIik7CisKKwkJCWNvdW50ZXIrKzsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKChhID09IGV4dC0+YSkgJiYgKGIgPCBleHQtPmIpKSB7CisJCQkvKiBsZWZ0LWJvdW5kZWQgaW4gZnJlZSBzcGFjZSBnYXAgKi8KKwkJCWV4dC0+YSA9IGIgKyAxOworCisJCQlpZiAodmVyYm9zZSkgCisJCQkJcHV0cyAoIkZNVDcgYWRkIGV4dGVudDogbGVmdC1ib3VuZGVkIik7CisKKwkJCWNvdW50ZXIrKzsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKChhID4gZXh0LT5hKSAmJiAoYiA9PSBleHQtPmIpKSB7CisJCQkvKiByaWdodC1ib3VuZGVkIGluIGZyZWUgc3BhY2UgZ2FwICovCisJCQlleHQtPmIgPSBhIC0gMTsKKworCQkJaWYgKHZlcmJvc2UpIAorCQkJCXB1dHMgKCJGTVQ3IGFkZCBleHRlbnQ6IHJpZ2h0LWJvdW5kZWQiKTsKKworCQkJY291bnRlcisrOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoKGEgPiBleHQtPmEpICYmIChiIDwgZXh0LT5iKSkgeworCQkJLyogcGFydGl0aW9uIGRldmlkZXMgZnJlZSBzcGFjZSBpbnRvIDIgcGllY2VzICovCisJCQl2dG9jX3VwZGF0ZV9mb3JtYXQ3X2xhYmVsX2FkZChmNywgdmVyYm9zZSwgYisxLCBleHQtPmIpOworCQkJZXh0LT5iID0gYSAtIDE7CisKKwkJCWlmICh2ZXJib3NlKSAKKwkJCQlwdXRzICgiRk1UNyBhZGQgZXh0ZW50OiAyIHBpZWNlcyIpOworCisJCQljb3VudGVyKys7CisJCQlicmVhazsKKwkJfQorCisJCWlmICgoKGEgPCBleHQtPmEpICYmIChiID4gZXh0LT5hKSkgfHwgKChhIDwgZXh0LT5iKSAmJiAoYiA+IGV4dC0+YikpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwdXRzICgiQlVHOiBzcGVjaWZpZWQgZnJlZSBzcGFjZSBleHRlbnQgZm9yIGRlbGV0aW5nICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkb2Vzbid0IG1hdGNoIGZyZWUgc3BhY2UgY3VycmVudGx5IHNob3duIGluICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGTVQ3IERTQ0IhXG5leGl0aW5nLi4uIik7CisJCQlwcmludGYgKCIlZCAlZCAlZCAlZFxuIiwgYSwgYiwgZXh0LT5hLCBleHQtPmIpOworCQkJZXhpdCgxKTsKKwkJfQorCX0KKworCWlmIChjb3VudGVyID4gMCkKKwkJcmV0dXJuOworCisJcHV0cyAoIkJVRzogc3BlY2lmaWVkIGZyZWUgc3BhY2UgZXh0ZW50IGZvciAiCisJICAgICAgImRlbGV0aW5nIG5vdCBmb3VuZCBpbiBGTVQ3IERTQ0IhXG4iCisJICAgICAgImV4aXRpbmcuLi4iKTsKKwlleGl0KDEpOworfQorCit2b2lkCit2dG9jX3NldF9mcmVlc3BhY2UoZm9ybWF0NF9sYWJlbF90ICpmNCwgZm9ybWF0NV9sYWJlbF90ICpmNSwKKyAgICAgICAgICAgICAgICAgICBmb3JtYXQ3X2xhYmVsX3QgKmY3LCBjaGFyIGNoLCBpbnQgdmVyYm9zZSwKKyAgICAgICAgICAgICAgICAgICB1X2ludDMyX3Qgc3RhcnQsIHVfaW50MzJfdCBzdG9wLCBpbnQgY3lsLCBpbnQgdHJrKQoreworCVBERUJVRworCWlmICgoY3lsICogdHJrKSA+IEJJR19ESVNLX1NJWkUpIHsKKwkJaWYgKGNoID09ICcrJykKKwkJCXZ0b2NfdXBkYXRlX2Zvcm1hdDdfbGFiZWxfYWRkKGY3LCB2ZXJib3NlLCBzdGFydCwgc3RvcCk7CisJCWVsc2UgaWYgKGNoID09ICctJykKKwkJCXZ0b2NfdXBkYXRlX2Zvcm1hdDdfbGFiZWxfZGVsKGY3LCB2ZXJib3NlLCBzdGFydCwgc3RvcCk7CisJCWVsc2UKKwkJCXB1dHMgKCJCVUc6IHN5bnRheCBlcnJvciBpbiB2dG9jX3NldF9mcmVlc3BhY2UgY2FsbCIpOworCisJCXZ0b2NfcmVvcmdhbml6ZV9GTVQ3X2V4dGVudHMgKGY3KTsKKworCQlmNC0+RFM0VlRPQ0kgPSAweGEwOworCQlmNC0+RFM0RUZMVkwgPSAweDA3OworCQl2dG9jX3NldF9jY2hoYigmZjQtPkRTNEVGUFRSLCAweDAwMDAsIDB4MDAwMSwgMHgwMyk7CisJfSBlbHNlIHsKKwkJdV9pbnQxNl90IHgseTsKKwkJdV9pbnQ4X3QgejsKKworCQl4ID0gKHVfaW50MTZfdCkgc3RhcnQ7CisJCXkgPSAodV9pbnQxNl90KSAoKHN0b3AgLSBzdGFydCArIDEpIC8gdHJrKTsKKwkJeiA9ICAodV9pbnQ4X3QpICgoc3RvcCAtIHN0YXJ0ICsgMSkgJSB0cmspOworCisJCWlmIChjaCA9PSAnKycpCisJCQl2dG9jX3VwZGF0ZV9mb3JtYXQ1X2xhYmVsX2FkZChmNSwgdmVyYm9zZSwgY3lsLCB0cmssIHgsIHksIHopOworCQllbHNlIGlmIChjaCA9PSAnLScpCisJCQl2dG9jX3VwZGF0ZV9mb3JtYXQ1X2xhYmVsX2RlbChmNSwgdmVyYm9zZSwgY3lsLCB0cmssIHgsIHksIHopOworCQllbHNlCisJCQlwdXRzICgiQlVHOiBzeW50YXggZXJyb3IgaW4gdnRvY19zZXRfZnJlZXNwYWNlIGNhbGwiKTsKKworCQl2dG9jX3Jlb3JnYW5pemVfRk1UNV9leHRlbnRzIChmNSk7CisJfQorfQpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9saWJwYXJ0ZWQuYyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvbGlicGFydGVkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFhNjIwMQotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvbGlicGFydGVkLmMKQEAgLTAsMCArMSwzNDMgQEAKKy8qCisgICAgbGlicGFydGVkIC0gYSBsaWJyYXJ5IGZvciBtYW5pcHVsYXRpbmcgZGlzayBwYXJ0aXRpb25zCisgICAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxLCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQorKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgImNvbmZpZ21ha2UuaCIKKworI2luY2x1ZGUgPHBhcnRlZC9wYXJ0ZWQuaD4KKyNpbmNsdWRlIDxwYXJ0ZWQvZGVidWcuaD4KKworI2lmZGVmIGxpbnV4CisjICBpbmNsdWRlIDxwYXJ0ZWQvbGludXguaD4KKyNlbGlmIGRlZmluZWQoX19CRU9TX18pCisjICBpbmNsdWRlIDxwYXJ0ZWQvYmVvcy5oPgorI2Vsc2UKKyMgIGluY2x1ZGUgPHBhcnRlZC9nbnUuaD4KKyNlbmRpZgorCisjaWYgRU5BQkxFX05MUworIyAgaW5jbHVkZSA8bG9jYWxlLmg+CisjICBpbmNsdWRlIDxsaWJpbnRsLmg+CisjICBkZWZpbmUgXyhTdHJpbmcpIGRnZXR0ZXh0IChQQUNLQUdFLCBTdHJpbmcpCisjZWxzZQorIyAgZGVmaW5lIF8oU3RyaW5nKSAoU3RyaW5nKQorI2VuZGlmIC8qIEVOQUJMRV9OTFMgKi8KKworY29uc3QgUGVkQXJjaGl0ZWN0dXJlKiBwZWRfYXJjaGl0ZWN0dXJlOworCisvKiBwZWRfbWFsbG9jKCkgZGVidWdnaW5nLiAgU3RpY2sgdGhlIGFkZHJlc3MgYW5kIHNpemUgb2YgbWVtb3J5IGJsb2NrcyB0aGF0CisgKiB3ZXJlbid0IHBlZF9mcmVlKClkIGluIGhlcmUsIGFuZCBhbiBleGNlcHRpb24gd2lsbCBiZSB0aHJvd24gd2hlbiBpdCBpcworICogYWxsb2NhdGVkLiAgVGhhdCB3YXksIHlvdSBjYW4gZmluZCBvdXQgd2hhdCwgZXhhY3RseSwgdGhlIGFsbG9jYXRlZCB0aGluZworICogaXMsIGFuZCB3aGVyZSBpdCBpcyBjcmVhdGVkLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIHZvaWQqCXBvaW50ZXI7CisgICAgc2l6ZV90CXNpemU7Cit9IHBvaW50ZXJfc2l6ZV90eXBlOworCisjaWZkZWYgREVCVUcKK3N0YXRpYyBwb2ludGVyX3NpemVfdHlwZSBkb2RneV9tYWxsb2NfbGlzdFtdID0geworIHswLAkJMH0sCisgezAsCQkwfSwKKyB7MCwJCTB9LAorIHswLAkJMH0sCisgezAsCQkwfSwKKyB7MCwJCTB9LAorIHswLAkJMH0sCisgezAsCQkwfSwKKyB7MCwJCTB9LAorIHswLAkJMH0KK307CisKK3N0YXRpYyBpbnQJZG9kZ3lfbWVtb3J5X2FjdGl2ZVsxMDBdOworI2VuZGlmIC8qIERFQlVHICovCisKK2ludAorcGVkX3NldF9hcmNoaXRlY3R1cmUgKGNvbnN0IFBlZEFyY2hpdGVjdHVyZSogYXJjaCkKK3sKKwlQRURfQVNTRVJUIChwZWRfZGV2aWNlX2dldF9uZXh0IChOVUxMKSA9PSBOVUxMLCByZXR1cm4gMCk7CisKKwlwZWRfYXJjaGl0ZWN0dXJlID0gYXJjaDsKKwlyZXR1cm4gMTsKK30KKworZXh0ZXJuIHZvaWQgcGVkX2Rpc2tfYWl4X2luaXQgKCk7CitleHRlcm4gdm9pZCBwZWRfZGlza19ic2RfaW5pdCAoKTsKK2V4dGVybiB2b2lkIHBlZF9kaXNrX2R2aF9pbml0ICgpOworZXh0ZXJuIHZvaWQgcGVkX2Rpc2tfZ3B0X2luaXQgKCk7CitleHRlcm4gdm9pZCBwZWRfZGlza19sb29wX2luaXQgKCk7CitleHRlcm4gdm9pZCBwZWRfZGlza19tYWNfaW5pdCAoKTsKK2V4dGVybiB2b2lkIHBlZF9kaXNrX21zZG9zX2luaXQgKCk7CitleHRlcm4gdm9pZCBwZWRfZGlza19wYzk4X2luaXQgKCk7CitleHRlcm4gdm9pZCBwZWRfZGlza19zdW5faW5pdCAoKTsKK2V4dGVybiB2b2lkIHBlZF9kaXNrX2FtaWdhX2luaXQgKCk7CitleHRlcm4gdm9pZCBwZWRfZGlza19kYXNkX2luaXQgKCk7CisKK3N0YXRpYyB2b2lkCitpbml0X2Rpc2tfdHlwZXMgKCkKK3sKKwlwZWRfZGlza19sb29wX2luaXQgKCk7CS8qIG11c3QgYmUgbGFzdCBpbiB0aGUgcHJvYmUgbGlzdCAqLworCisjaWYgZGVmaW5lZChfX3MzOTBfXykgfHwgZGVmaW5lZChfX3MzOTB4X18pCisJcGVkX2Rpc2tfZGFzZF9pbml0KCk7CisjZW5kaWYKKworCXBlZF9kaXNrX3N1bl9pbml0ICgpOworI2lmZGVmIEVOQUJMRV9QQzk4CisJcGVkX2Rpc2tfcGM5OF9pbml0ICgpOworI2VuZGlmCisJcGVkX2Rpc2tfbXNkb3NfaW5pdCAoKTsKKwlwZWRfZGlza19tYWNfaW5pdCAoKTsKKwlwZWRfZGlza19ncHRfaW5pdCAoKTsKKwlwZWRfZGlza19kdmhfaW5pdCAoKTsKKwlwZWRfZGlza19ic2RfaW5pdCAoKTsKKwlwZWRfZGlza19hbWlnYV9pbml0ICgpOworCXBlZF9kaXNrX2FpeF9pbml0ICgpOworfQorCisjaWZkZWYgRU5BQkxFX0ZTCitleHRlcm4gdm9pZCBwZWRfZmlsZV9zeXN0ZW1fYW1pZ2FfaW5pdCAodm9pZCk7CitleHRlcm4gdm9pZCBwZWRfZmlsZV9zeXN0ZW1feGZzX2luaXQgKHZvaWQpOworZXh0ZXJuIHZvaWQgcGVkX2ZpbGVfc3lzdGVtX3Vmc19pbml0ICh2b2lkKTsKK2V4dGVybiB2b2lkIHBlZF9maWxlX3N5c3RlbV9yZWlzZXJmc19pbml0ICh2b2lkKTsKK2V4dGVybiB2b2lkIHBlZF9maWxlX3N5c3RlbV9udGZzX2luaXQgKHZvaWQpOworZXh0ZXJuIHZvaWQgcGVkX2ZpbGVfc3lzdGVtX2xpbnV4X3N3YXBfaW5pdCAodm9pZCk7CitleHRlcm4gdm9pZCBwZWRfZmlsZV9zeXN0ZW1famZzX2luaXQgKHZvaWQpOworZXh0ZXJuIHZvaWQgcGVkX2ZpbGVfc3lzdGVtX2hmc19pbml0ICh2b2lkKTsKK2V4dGVybiB2b2lkIHBlZF9maWxlX3N5c3RlbV9mYXRfaW5pdCAodm9pZCk7CitleHRlcm4gdm9pZCBwZWRfZmlsZV9zeXN0ZW1fZXh0Ml9pbml0ICh2b2lkKTsKKworc3RhdGljIHZvaWQKK2luaXRfZmlsZV9zeXN0ZW1fdHlwZXMgKCkKK3sKKwlwZWRfZmlsZV9zeXN0ZW1fYW1pZ2FfaW5pdCAoKTsKKwlwZWRfZmlsZV9zeXN0ZW1feGZzX2luaXQgKCk7CisJcGVkX2ZpbGVfc3lzdGVtX3Vmc19pbml0ICgpOworCXBlZF9maWxlX3N5c3RlbV9yZWlzZXJmc19pbml0ICgpOworCXBlZF9maWxlX3N5c3RlbV9udGZzX2luaXQgKCk7CisJcGVkX2ZpbGVfc3lzdGVtX2xpbnV4X3N3YXBfaW5pdCAoKTsKKwlwZWRfZmlsZV9zeXN0ZW1famZzX2luaXQgKCk7CisJcGVkX2ZpbGVfc3lzdGVtX2hmc19pbml0ICgpOworCXBlZF9maWxlX3N5c3RlbV9mYXRfaW5pdCAoKTsKKwlwZWRfZmlsZV9zeXN0ZW1fZXh0Ml9pbml0ICgpOworfQorI2VuZGlmIC8qIEVOQUJMRV9GUyAqLworCitleHRlcm4gdm9pZCBwZWRfZGlza19haXhfZG9uZSAoKTsKK2V4dGVybiB2b2lkIHBlZF9kaXNrX2JzZF9kb25lICgpOworZXh0ZXJuIHZvaWQgcGVkX2Rpc2tfZHZoX2RvbmUgKCk7CitleHRlcm4gdm9pZCBwZWRfZGlza19ncHRfZG9uZSAoKTsKK2V4dGVybiB2b2lkIHBlZF9kaXNrX2xvb3BfZG9uZSAoKTsKK2V4dGVybiB2b2lkIHBlZF9kaXNrX21hY19kb25lICgpOworZXh0ZXJuIHZvaWQgcGVkX2Rpc2tfbXNkb3NfZG9uZSAoKTsKK2V4dGVybiB2b2lkIHBlZF9kaXNrX3BjOThfZG9uZSAoKTsKK2V4dGVybiB2b2lkIHBlZF9kaXNrX3N1bl9kb25lICgpOworZXh0ZXJuIHZvaWQgcGVkX2Rpc2tfYW1pZ2FfZG9uZSAoKTsKK2V4dGVybiB2b2lkIHBlZF9kaXNrX2Rhc2RfZG9uZSAoKTsKKworc3RhdGljIHZvaWQKK2RvbmVfZGlza190eXBlcyAoKQoreworI2lmIGRlZmluZWQoX19zMzkwX18pIHx8IChfX3MzOTB4X18pCisJcGVkX2Rpc2tfZGFzZF9kb25lICgpOworI2VuZGlmCisJcGVkX2Rpc2tfc3VuX2RvbmUgKCk7CisjaWZkZWYgRU5BQkxFX1BDOTgKKwlwZWRfZGlza19wYzk4X2RvbmUgKCk7CisjZW5kaWYKKwlwZWRfZGlza19tc2Rvc19kb25lICgpOworCXBlZF9kaXNrX21hY19kb25lICgpOworCXBlZF9kaXNrX2xvb3BfZG9uZSAoKTsKKwlwZWRfZGlza19ncHRfZG9uZSAoKTsKKwlwZWRfZGlza19kdmhfZG9uZSAoKTsKKwlwZWRfZGlza19ic2RfZG9uZSAoKTsKKwlwZWRfZGlza19hbWlnYV9kb25lICgpOworCXBlZF9kaXNrX2FpeF9kb25lICgpOworfQorCitzdGF0aWMgdm9pZCBfaW5pdCgpIF9fYXR0cmlidXRlX18gKChjb25zdHJ1Y3RvcikpOworCitzdGF0aWMgdm9pZAorX2luaXQoKQoreworI2lmZGVmIEVOQUJMRV9OTFMKKwliaW5kdGV4dGRvbWFpbiAoUEFDS0FHRSwgTE9DQUxFRElSKTsKKyNlbmRpZgorCisJaW5pdF9kaXNrX3R5cGVzICgpOworCisjaWZkZWYgRU5BQkxFX0ZTCisJaW5pdF9maWxlX3N5c3RlbV90eXBlcyAoKTsKKyNlbmRpZgorCisJLyogRklYTUU6IGEgYmV0dGVyIHdheSBvZiBkb2luZyB0aGlzPyAqLworI2lmZGVmIGxpbnV4CisJcGVkX3NldF9hcmNoaXRlY3R1cmUgKCZwZWRfbGludXhfYXJjaCk7CisjZWxpZiBkZWZpbmVkKF9fQkVPU19fKQorCXBlZF9zZXRfYXJjaGl0ZWN0dXJlICgmcGVkX2Jlb3NfYXJjaCk7CisjZWxzZQorCXBlZF9zZXRfYXJjaGl0ZWN0dXJlICgmcGVkX2dudV9hcmNoKTsKKyNlbmRpZgorCisjaWZkZWYgREVCVUcKKwltZW1zZXQgKGRvZGd5X21lbW9yeV9hY3RpdmUsIDAsIHNpemVvZiAoZG9kZ3lfbWVtb3J5X2FjdGl2ZSkpOworI2VuZGlmCit9CisKKyNpZmRlZiBFTkFCTEVfRlMKK2V4dGVybiB2b2lkIHBlZF9maWxlX3N5c3RlbV9leHQyX2RvbmUgKHZvaWQpOworZXh0ZXJuIHZvaWQgcGVkX2ZpbGVfc3lzdGVtX2ZhdF9kb25lICh2b2lkKTsKK2V4dGVybiB2b2lkIHBlZF9maWxlX3N5c3RlbV9oZnNfZG9uZSAodm9pZCk7CitleHRlcm4gdm9pZCBwZWRfZmlsZV9zeXN0ZW1famZzX2RvbmUgKHZvaWQpOworZXh0ZXJuIHZvaWQgcGVkX2ZpbGVfc3lzdGVtX2xpbnV4X3N3YXBfZG9uZSAodm9pZCk7CitleHRlcm4gdm9pZCBwZWRfZmlsZV9zeXN0ZW1fbnRmc19kb25lICh2b2lkKTsKK2V4dGVybiB2b2lkIHBlZF9maWxlX3N5c3RlbV9yZWlzZXJmc19kb25lICh2b2lkKTsKK2V4dGVybiB2b2lkIHBlZF9maWxlX3N5c3RlbV91ZnNfZG9uZSAodm9pZCk7CitleHRlcm4gdm9pZCBwZWRfZmlsZV9zeXN0ZW1feGZzX2RvbmUgKHZvaWQpOworZXh0ZXJuIHZvaWQgcGVkX2ZpbGVfc3lzdGVtX2FtaWdhX2RvbmUgKHZvaWQpOworCitzdGF0aWMgdm9pZAorZG9uZV9maWxlX3N5c3RlbV90eXBlcyAoKQoreworCXBlZF9maWxlX3N5c3RlbV9leHQyX2RvbmUgKCk7CisJcGVkX2ZpbGVfc3lzdGVtX2ZhdF9kb25lICgpOworCXBlZF9maWxlX3N5c3RlbV9oZnNfZG9uZSAoKTsKKwlwZWRfZmlsZV9zeXN0ZW1famZzX2RvbmUgKCk7CisJcGVkX2ZpbGVfc3lzdGVtX2xpbnV4X3N3YXBfZG9uZSAoKTsKKwlwZWRfZmlsZV9zeXN0ZW1fbnRmc19kb25lICgpOworCXBlZF9maWxlX3N5c3RlbV9yZWlzZXJmc19kb25lICgpOworCXBlZF9maWxlX3N5c3RlbV91ZnNfZG9uZSAoKTsKKwlwZWRfZmlsZV9zeXN0ZW1feGZzX2RvbmUgKCk7CisJcGVkX2ZpbGVfc3lzdGVtX2FtaWdhX2RvbmUgKCk7Cit9CisjZW5kaWYgLyogRU5BQkxFX0ZTICovCisKK3N0YXRpYyB2b2lkIF9kb25lKCkgX19hdHRyaWJ1dGVfXyAoKGRlc3RydWN0b3IpKTsKKworc3RhdGljIHZvaWQKK19kb25lKCkKK3sKKwlwZWRfZGV2aWNlX2ZyZWVfYWxsICgpOworCisJZG9uZV9kaXNrX3R5cGVzICgpOworCisjaWZkZWYgRU5BQkxFX0ZTCisJZG9uZV9maWxlX3N5c3RlbV90eXBlcyAoKTsKKyNlbmRpZgorfQorCitjb25zdCBjaGFyKgorcGVkX2dldF92ZXJzaW9uICgpCit7CisJcmV0dXJuIFZFUlNJT047Cit9CisKKyNpZmRlZiBERUJVRworc3RhdGljIHZvaWQKK19jaGVja19kb2RneV9wb2ludGVyIChjb25zdCB2b2lkKiBwdHIsIHNpemVfdCBzaXplLCBpbnQgaXNfbWFsbG9jKQoreworCWludAkJaTsKKworCWZvciAoaT0wOyBkb2RneV9tYWxsb2NfbGlzdFtpXS5wb2ludGVyOyBpKyspIHsKKwkJaWYgKGRvZGd5X21hbGxvY19saXN0W2ldLnBvaW50ZXIgIT0gcHRyKQorIAkJCWNvbnRpbnVlOworCQlpZiAoaXNfbWFsbG9jICYmIGRvZGd5X21hbGxvY19saXN0W2ldLnNpemUgIT0gc2l6ZSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIWlzX21hbGxvYyAmJiAhZG9kZ3lfbWVtb3J5X2FjdGl2ZVtpXSkKKwkJCWNvbnRpbnVlOworCisKKwkJaWYgKGlzX21hbGxvYykgeworCQkJcGVkX2V4Y2VwdGlvbl90aHJvdyAoCisJCQkJUEVEX0VYQ0VQVElPTl9JTkZPUk1BVElPTiwKKwkJCQlQRURfRVhDRVBUSU9OX09LLAorCQkJCSJEb2RneSBtYWxsb2MoJXgpID09ICVwIG9jY3VycmVkIChhY3RpdmU9PSVkKSIsCisJCQkJc2l6ZSwgcHRyLCBkb2RneV9tZW1vcnlfYWN0aXZlW2ldKTsKKwkJCWRvZGd5X21lbW9yeV9hY3RpdmVbaV0rKzsKKwkJfSBlbHNlIHsKKwkJCXBlZF9leGNlcHRpb25fdGhyb3cgKAorCQkJCVBFRF9FWENFUFRJT05fSU5GT1JNQVRJT04sCisJCQkJUEVEX0VYQ0VQVElPTl9PSywKKwkJCQkiRG9kZ3kgZnJlZSglcCkgb2NjdXJyZWQgKGFjdGl2ZT09JWQpIiwKKwkJCQlwdHIsIGRvZGd5X21lbW9yeV9hY3RpdmVbaV0pOworCQkJZG9kZ3lfbWVtb3J5X2FjdGl2ZVtpXS0tOworCQl9CisKKwkJcmV0dXJuOworCX0KK30KKyNlbmRpZiAvKiBERUJVRyAqLworCit2b2lkKgorcGVkX21hbGxvYyAoc2l6ZV90IHNpemUpCit7CisJdm9pZCoJCW1lbTsKKworCW1lbSA9ICh2b2lkKikgbWFsbG9jIChzaXplKTsKKwlpZiAoIW1lbSkgeworCQlwZWRfZXhjZXB0aW9uX3Rocm93IChQRURfRVhDRVBUSU9OX0ZBVEFMLCBQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCQkgICAgIF8oIk91dCBvZiBtZW1vcnkuIikpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKyNpZmRlZiBERUJVRworCW1lbXNldCAobWVtLCAweGZmLCBzaXplKTsKKwlfY2hlY2tfZG9kZ3lfcG9pbnRlciAobWVtLCBzaXplLCAxKTsKKyNlbmRpZgorCisJcmV0dXJuIG1lbTsKK30KKworaW50CitwZWRfcmVhbGxvYyAodm9pZCoqIG9sZCwgc2l6ZV90IHNpemUpCit7CisJdm9pZCoJCW1lbTsKKworCW1lbSA9ICh2b2lkKikgcmVhbGxvYyAoKm9sZCwgc2l6ZSk7CisJaWYgKCFtZW0pIHsKKwkJcGVkX2V4Y2VwdGlvbl90aHJvdyAoUEVEX0VYQ0VQVElPTl9GQVRBTCwgUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQkJICAgICBfKCJPdXQgb2YgbWVtb3J5LiIpKTsKKwkJcmV0dXJuIDA7CisJfQorCSpvbGQgPSBtZW07CisJcmV0dXJuIDE7Cit9CisKKwordm9pZCogcGVkX2NhbGxvYyAoc2l6ZV90IHNpemUpCit7CisgICAgICAgIHZvaWQqIGJ1ZiA9IHBlZF9tYWxsb2MgKHNpemUpOworCisgICAgICAgIG1lbXNldCAoYnVmLCAwLCBzaXplKTsKKworICAgICAgICByZXR1cm4gYnVmOworfQorCisKK3ZvaWQKK3BlZF9mcmVlICh2b2lkKiBwdHIpCit7CisjaWZkZWYgREVCVUcKKwlfY2hlY2tfZG9kZ3lfcG9pbnRlciAocHRyLCAwLCAwKTsKKyNlbmRpZgorCisJZnJlZSAocHRyKTsKK30KKwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC9tYnIucyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvbWJyLnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQzNWFhOQotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvbWJyLnMKQEAgLTAsMCArMSw4NiBAQAorOyAgIGxpYnBhcnRlZCAtIGEgbGlicmFyeSBmb3IgbWFuaXB1bGF0aW5nIGRpc2sgcGFydGl0aW9ucworOyAgIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKzsKKzsgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorOyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cis7ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKzsgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorOworOyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorOyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCis7ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorOyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCis7Cis7ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKzsgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorOyAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKKworOyBOT1RFOiBJIGJ1aWxkIHRoaXMgd2l0aDoKKzsJJCBhczg2IC1iIC9kZXYvc3Rkb3V0IG1ici5zIHwgaGV4ZHVtcCAtZSAnOC8xICIweCUwMngsICIgIlxuIicKKzsKKzsgVGhlIGJ1aWxkIGlzbid0IGRvbmUgYXV0b21hZ2ljYWxseSBieSBtYWtlLCBiZWNhdXNlIGFzODYgbWF5IG5vdCBiZSBvbiBtYW55Cis7IG1hY2hpbmVzIChwYXJ0aWN1bGFybHkgbm9uLXg4NikuICBBbHNvLCBpdCBzZWVtcyByYXRoZXIgZGlmZmljdWx0IHRvIGdldAorOyBhczg2IHRvIGJ1aWxkIG9iamVjdCBmaWxlcyB0aGF0IGNhbiBiZSBsaW5rZWQsIGVzcGVjaWFsbHkgYXMgaXQncyAxNiBiaXQKKzsgY29kZS4uLgorCitVU0UxNgorCis7IFRoaXMgY29kZSwgcGx1cyB0aGUgcGFydGl0aW9uIHRhYmxlIGlzIGxvYWRlZCBpbnRvIDAwMDA6N0MwMCBieSB0aGUgQklPUworCisudGV4dAorCis7IHNldCB0b3Agb2Ygc3RhY2sgdG8gMTAwMDpCMDAwCisKKwljbGkKKworCW1vdglheCwgIzB4MTAwMAorCW1vdglzcywgYXgKKwltb3YJc3AsICMweEIwMDAKKworCW1vdglheCwgIzB4MDAwMAorCW1vdglkcywgYXgKKwltb3YJZXMsIGF4CisKKwlzdGkKKworOyBDb3B5IHdoYXQgdGhlIEJJT1MgbG9hZGVkIChpLmUuIHRoZSBNQlIgKyBoZWFkIG9mIHBhcnRpdGlvbiB0YWJsZSkgZnJvbQorOyAwMDAwOjdjMDAgdG8gMDAwMDowNjAwCisKKwltb3YJc2ksICMweDdjMDAKKwltb3YJZGksICMweDA2MDAKKwltb3YJY3gsICMweDIwMAorCXJlcAorCW1vdnNiCisKKzsgSnVtcCB0byB0aGUgY29weSBvZiB0aGUgTUJSCisKKwlqbXAJMHgwMDAwOmZpbmRfYm9vdF9wYXJ0aXRpb24gKyAweDA2MDAKKworZmluZF9ib290X3BhcnRpdGlvbjoKKwltb3YJc2ksICMweDA3QkUKKworY2hlY2tfbmV4dF9ib290YWJsZToKKwljbXAJW3NpXSwgYWwKKwlqbnoJZm91bmRfYm9vdGFibGUKKwlhZGQJc2ksICMweDAwMTAKKwljbXAJc2ksICMweDA3RkUKKwlqbnoJY2hlY2tfbmV4dF9ib290YWJsZQorCWptcAllcnJvcgorCitmb3VuZF9ib290YWJsZToKKworOyBMb2FkIGluIHRoZSBib290IHNlY3RvciBhdCAwMDAwOjdjMDAKKworCW1vdglhaCwgIzIJCQk7IEJJT1MgY29tbWFuZCAocmVhZCkKKwltb3YJYWwsICMxCQkJOyBjb3VudAorCW1vdglieCwgIzB4N2MwMAkJOyBkZXN0aW5hdGlvbiBwb2ludGVyCisJbW92CWRsLCAjMHg4MAkJOyBkcml2ZQorCW1vdglkaCwgYnl0ZSBwdHIgW3NpICsgMV0JOyBoZWFkCisJbW92CWN4LCB3b3JkIHB0ciBbc2kgKyAyXQk7IHNlY3RvciAvIGN5bGluZGVyCisJaW50CSMweDEzCQkJOyBCSU9TIHJlYWQgaW50ZXJydXB0CisKKwlqbXAJMHgwMDAwOjB4N2MwMAkJOyBoYW5kIGNvbnRyb2wgdG8gYm9vdCBzZWN0b3IKKworZXJyb3I6CisJam1wCWVycm9yCisKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvdGVzdHMvTWFrZWZpbGUuYW0gYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL3Rlc3RzL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMWUwN2IKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL3Rlc3RzL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMTIgQEAKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIFBhcnRlZAorIyBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBtYXkgYmUgbW9kaWZpZWQgYW5kL29yIGRpc3RyaWJ1dGVkIHdpdGhvdXQgcmVzdHJpY3Rpb24uCisKK1RFU1RTID0gbGFiZWwKK2Jpbl9QUk9HUkFNUyAgICAgPSBsYWJlbAorbGFiZWxfQ0ZMQUdTICAgID0gJChDSEVDS19DRkxBR1MpIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlCitsYWJlbF9MREFERCAgICAgPSAkKENIRUNLX0xJQlMpICQodG9wX2J1aWxkZGlyKS9saWJwYXJ0ZWQvbGlicGFydGVkLmxhCitsYWJlbF9TT1VSQ0VTICAgPSBjb21tb24uaCBjb21tb24uYyBsYWJlbC5jCisKK01BSU5UQUlORVJDTEVBTkZJTEVTID0gTWFrZWZpbGUuaW4KZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvdGVzdHMvTWFrZWZpbGUuaW4gYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL3Rlc3RzL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhNzA4YzIKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL3Rlc3RzL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNzYzIEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjEwIGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgUGFydGVkCisjIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIG1heSBiZSBtb2RpZmllZCBhbmQvb3IgZGlzdHJpYnV0ZWQgd2l0aG91dCByZXN0cmljdGlvbi4KKworVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK1RFU1RTID0gbGFiZWwkKEVYRUVYVCkKK2Jpbl9QUk9HUkFNUyA9IGxhYmVsJChFWEVFWFQpCitzdWJkaXIgPSBsaWJwYXJ0ZWQvdGVzdHMKK0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbgorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvbTQvYWJzb2x1dGUtaGVhZGVyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2FsbG9jYS5tNCAkKHRvcF9zcmNkaXIpL200L2Fzc2VydC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9hdGV4aXQubTQgJCh0b3Bfc3JjZGlyKS9tNC9jYWxsb2MubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY2xvc2Utc3RyZWFtLm00ICQodG9wX3NyY2RpcikvbTQvY2xvc2VvdXQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY29kZXNldC5tNCAkKHRvcF9zcmNkaXIpL200L2NvbmZpZy1oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2Rpcm5hbWUubTQgJCh0b3Bfc3JjZGlyKS9tNC9kb3MubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZG91YmxlLXNsYXNoLXJvb3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZXJyb3IubTQgJCh0b3Bfc3JjZGlyKS9tNC9leGl0ZmFpbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9leHRlbnNpb25zLm00ICQodG9wX3NyY2RpcikvbTQvZnBlbmRpbmcubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZnJlZS5tNCAkKHRvcF9zcmNkaXIpL200L2dldG9wdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00ICQodG9wX3NyY2RpcikvbTQvZ2xpYmMyMS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9nbnVsaWItY29tbW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2dudWxpYi1jb21wLm00ICQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaW5saW5lLm00ICQodG9wX3NyY2RpcikvbTQvaW50dHlwZXMtcHJpLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ludHR5cGVzLm00ICQodG9wX3NyY2RpcikvbTQvbGliLWlnbm9yZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xvY2FsY2hhcnNldC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sb25nLW9wdGlvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9sb25nbG9uZy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tYnJ0b3djLm00ICQodG9wX3NyY2RpcikvbTQvbWJzdGF0ZV90Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21lbWNoci5tNCAkKHRvcF9zcmNkaXIpL200L21lbWNtcC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tZW1jcHkubTQgJCh0b3Bfc3JjZGlyKS9tNC9tZW1tb3ZlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21lbXNldC5tNCAkKHRvcF9zcmNkaXIpL200L25scy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCAkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3F1b3RlYXJnLm00ICQodG9wX3NyY2RpcikvbTQvcmVnZXgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcmVuYW1lLm00ICQodG9wX3NyY2RpcikvbTQvcnBtYXRjaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zYWZlLXJlYWQubTQgJCh0b3Bfc3JjZGlyKS9tNC9zYWZlLXdyaXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3NzaXplX3QubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGRhcmcubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RkYm9vbC5tNCAkKHRvcF9zcmNkaXIpL200L3N0ZGludC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdGRsaWJfaC5tNCAkKHRvcF9zcmNkaXIpL200L3N0cmNzcG4ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RyaW5nX2gubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHJuZHVwLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0cm5sZW4ubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHJ0b2QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RydG9sLm00ICQodG9wX3NyY2RpcikvbTQvdW5pc3RkX2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdXRpbWJ1Zi5tNCAkKHRvcF9zcmNkaXIpL200L3V0aW1lLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3V0aW1lcy1udWxsLm00ICQodG9wX3NyY2RpcikvbTQvd2NoYXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvd2N0eXBlLm00ICQodG9wX3NyY2RpcikvbTQvd2ludF90Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3hhbGxvYy5tNCAkKHRvcF9zcmNkaXIpL200L3hzdHJuZHVwLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CithbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQoYmluZGlyKSIKK2JpblBST0dSQU1TX0lOU1RBTEwgPSAkKElOU1RBTExfUFJPR1JBTSkKK1BST0dSQU1TID0gJChiaW5fUFJPR1JBTVMpCithbV9sYWJlbF9PQkpFQ1RTID0gbGFiZWwtY29tbW9uLiQoT0JKRVhUKSBsYWJlbC1sYWJlbC4kKE9CSkVYVCkKK2xhYmVsX09CSkVDVFMgPSAkKGFtX2xhYmVsX09CSkVDVFMpCithbV9fREVQRU5ERU5DSUVTXzEgPQorbGFiZWxfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKKwkkKHRvcF9idWlsZGRpcikvbGlicGFydGVkL2xpYnBhcnRlZC5sYQorbGFiZWxfTElOSyA9ICQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCisJLS1tb2RlPWxpbmsgJChDQ0xEKSAkKGxhYmVsX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgXAorCSQoTERGTEFHUykgLW8gJEAKK0RFRkFVTFRfSU5DTFVERVMgPSAtSS4gLUkkKHRvcF9idWlsZGRpcikvbGliQGFtX19pc3JjQAorZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L2RlcGNvbXAKK2FtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCitDT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKKwkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitMVENPTVBJTEUgPSAkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorCS0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSBcCisJJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorQ0NMRCA9ICQoQ0MpCitMSU5LID0gJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIFwKKwktLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSBcCisJJChMREZMQUdTKSAtbyAkQAorU09VUkNFUyA9ICQobGFiZWxfU09VUkNFUykKK0RJU1RfU09VUkNFUyA9ICQobGFiZWxfU09VUkNFUykKK0VUQUdTID0gZXRhZ3MKK0NUQUdTID0gY3RhZ3MKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitBQlNPTFVURV9JTlRUWVBFU19IID0gQEFCU09MVVRFX0lOVFRZUEVTX0hACitBQlNPTFVURV9TVERJTlRfSCA9IEBBQlNPTFVURV9TVERJTlRfSEAKK0FCU09MVVRFX1NURExJQl9IID0gQEFCU09MVVRFX1NURExJQl9IQAorQUJTT0xVVEVfU1RSSU5HX0ggPSBAQUJTT0xVVEVfU1RSSU5HX0hACitBQlNPTFVURV9VTklTVERfSCA9IEBBQlNPTFVURV9VTklTVERfSEAKK0FCU09MVVRFX1dDSEFSX0ggPSBAQUJTT0xVVEVfV0NIQVJfSEAKK0FCU09MVVRFX1dDVFlQRV9IID0gQEFCU09MVVRFX1dDVFlQRV9IQAorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQUxMT0NBID0gQEFMTE9DQUAKK0FMTE9DQV9IID0gQEFMTE9DQV9IQAorQU1UQVIgPSBAQU1UQVJACitBUiA9IEBBUkAKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBV0sgPSBAQVdLQAorQklUU0laRU9GX1BUUkRJRkZfVCA9IEBCSVRTSVpFT0ZfUFRSRElGRl9UQAorQklUU0laRU9GX1NJR19BVE9NSUNfVCA9IEBCSVRTSVpFT0ZfU0lHX0FUT01JQ19UQAorQklUU0laRU9GX1NJWkVfVCA9IEBCSVRTSVpFT0ZfU0laRV9UQAorQklUU0laRU9GX1dDSEFSX1QgPSBAQklUU0laRU9GX1dDSEFSX1RACitCSVRTSVpFT0ZfV0lOVF9UID0gQEJJVFNJWkVPRl9XSU5UX1RACitCVUlMRElORk8gPSBAQlVJTERJTkZPQAorQ0MgPSBAQ0NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NIRUNLX0NGTEFHUyA9IEBDSEVDS19DRkxBR1NACitDSEVDS19MSUJTID0gQENIRUNLX0xJQlNACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitETF9MSUJTID0gQERMX0xJQlNACitETV9MSUJTID0gQERNX0xJQlNACitFQ0hPID0gQEVDSE9ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VYRUVYVCA9IEBFWEVFWFRACitGNzcgPSBARjc3QAorRkZMQUdTID0gQEZGTEFHU0AKK0dFVE9QVF9IID0gQEdFVE9QVF9IQAorR0xJQkMyMSA9IEBHTElCQzIxQAorR01TR0ZNVCA9IEBHTVNHRk1UQAorR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACitHTlVMSUJfQ0hPV04gPSBAR05VTElCX0NIT1dOQAorR05VTElCX0RVUDIgPSBAR05VTElCX0RVUDJACitHTlVMSUJfRkNIRElSID0gQEdOVUxJQl9GQ0hESVJACitHTlVMSUJfRlRSVU5DQVRFID0gQEdOVUxJQl9GVFJVTkNBVEVACitHTlVMSUJfR0VUQ1dEID0gQEdOVUxJQl9HRVRDV0RACitHTlVMSUJfR0VUTE9HSU5fUiA9IEBHTlVMSUJfR0VUTE9HSU5fUkAKK0dOVUxJQl9HRVRTVUJPUFQgPSBAR05VTElCX0dFVFNVQk9QVEAKK0dOVUxJQl9JTUFYQUJTID0gQEdOVUxJQl9JTUFYQUJTQAorR05VTElCX0lNQVhESVYgPSBAR05VTElCX0lNQVhESVZACitHTlVMSUJfTUJTQ0FTRUNNUCA9IEBHTlVMSUJfTUJTQ0FTRUNNUEAKK0dOVUxJQl9NQlNDQVNFU1RSID0gQEdOVUxJQl9NQlNDQVNFU1RSQAorR05VTElCX01CU0NIUiA9IEBHTlVMSUJfTUJTQ0hSQAorR05VTElCX01CU0NTUE4gPSBAR05VTElCX01CU0NTUE5ACitHTlVMSUJfTUJTTEVOID0gQEdOVUxJQl9NQlNMRU5ACitHTlVMSUJfTUJTTkNBU0VDTVAgPSBAR05VTElCX01CU05DQVNFQ01QQAorR05VTElCX01CU1BCUksgPSBAR05VTElCX01CU1BCUktACitHTlVMSUJfTUJTUENBU0VDTVAgPSBAR05VTElCX01CU1BDQVNFQ01QQAorR05VTElCX01CU1JDSFIgPSBAR05VTElCX01CU1JDSFJACitHTlVMSUJfTUJTU0VQID0gQEdOVUxJQl9NQlNTRVBACitHTlVMSUJfTUJTU1BOID0gQEdOVUxJQl9NQlNTUE5ACitHTlVMSUJfTUJTU1RSID0gQEdOVUxJQl9NQlNTVFJACitHTlVMSUJfTUJTVE9LX1IgPSBAR05VTElCX01CU1RPS19SQAorR05VTElCX01FTU1FTSA9IEBHTlVMSUJfTUVNTUVNQAorR05VTElCX01FTVBDUFkgPSBAR05VTElCX01FTVBDUFlACitHTlVMSUJfTUVNUkNIUiA9IEBHTlVMSUJfTUVNUkNIUkAKK0dOVUxJQl9NS0RURU1QID0gQEdOVUxJQl9NS0RURU1QQAorR05VTElCX01LU1RFTVAgPSBAR05VTElCX01LU1RFTVBACitHTlVMSUJfUkVBRExJTksgPSBAR05VTElCX1JFQURMSU5LQAorR05VTElCX1NMRUVQID0gQEdOVUxJQl9TTEVFUEAKK0dOVUxJQl9TVFBDUFkgPSBAR05VTElCX1NUUENQWUAKK0dOVUxJQl9TVFBOQ1BZID0gQEdOVUxJQl9TVFBOQ1BZQAorR05VTElCX1NUUkNBU0VTVFIgPSBAR05VTElCX1NUUkNBU0VTVFJACitHTlVMSUJfU1RSQ0hSTlVMID0gQEdOVUxJQl9TVFJDSFJOVUxACitHTlVMSUJfU1RSRFVQID0gQEdOVUxJQl9TVFJEVVBACitHTlVMSUJfU1RSTkRVUCA9IEBHTlVMSUJfU1RSTkRVUEAKK0dOVUxJQl9TVFJOTEVOID0gQEdOVUxJQl9TVFJOTEVOQAorR05VTElCX1NUUlBCUksgPSBAR05VTElCX1NUUlBCUktACitHTlVMSUJfU1RSU0VQID0gQEdOVUxJQl9TVFJTRVBACitHTlVMSUJfU1RSVE9JTUFYID0gQEdOVUxJQl9TVFJUT0lNQVhACitHTlVMSUJfU1RSVE9LX1IgPSBAR05VTElCX1NUUlRPS19SQAorR05VTElCX1NUUlRPVU1BWCA9IEBHTlVMSUJfU1RSVE9VTUFYQAorR1JFUCA9IEBHUkVQQAorSEFWRV9ERUNMX0dFVExPR0lOX1IgPSBASEFWRV9ERUNMX0dFVExPR0lOX1JACitIQVZFX0RFQ0xfSU1BWEFCUyA9IEBIQVZFX0RFQ0xfSU1BWEFCU0AKK0hBVkVfREVDTF9JTUFYRElWID0gQEhBVkVfREVDTF9JTUFYRElWQAorSEFWRV9ERUNMX01FTU1FTSA9IEBIQVZFX0RFQ0xfTUVNTUVNQAorSEFWRV9ERUNMX01FTVJDSFIgPSBASEFWRV9ERUNMX01FTVJDSFJACitIQVZFX0RFQ0xfU1RSRFVQID0gQEhBVkVfREVDTF9TVFJEVVBACitIQVZFX0RFQ0xfU1RSTkNBU0VDTVAgPSBASEFWRV9ERUNMX1NUUk5DQVNFQ01QQAorSEFWRV9ERUNMX1NUUk5EVVAgPSBASEFWRV9ERUNMX1NUUk5EVVBACitIQVZFX0RFQ0xfU1RSTkxFTiA9IEBIQVZFX0RFQ0xfU1RSTkxFTkAKK0hBVkVfREVDTF9TVFJUT0lNQVggPSBASEFWRV9ERUNMX1NUUlRPSU1BWEAKK0hBVkVfREVDTF9TVFJUT0tfUiA9IEBIQVZFX0RFQ0xfU1RSVE9LX1JACitIQVZFX0RFQ0xfU1RSVE9VTUFYID0gQEhBVkVfREVDTF9TVFJUT1VNQVhACitIQVZFX0RVUDIgPSBASEFWRV9EVVAyQAorSEFWRV9GVFJVTkNBVEUgPSBASEFWRV9GVFJVTkNBVEVACitIQVZFX0dFVFNVQk9QVCA9IEBIQVZFX0dFVFNVQk9QVEAKK0hBVkVfSU5UVFlQRVNfSCA9IEBIQVZFX0lOVFRZUEVTX0hACitIQVZFX0lTV0NOVFJMID0gQEhBVkVfSVNXQ05UUkxACitIQVZFX0xPTkdfTE9OR19JTlQgPSBASEFWRV9MT05HX0xPTkdfSU5UQAorSEFWRV9NRU1QQ1BZID0gQEhBVkVfTUVNUENQWUAKK0hBVkVfTUtEVEVNUCA9IEBIQVZFX01LRFRFTVBACitIQVZFX1JFQURMSU5LID0gQEhBVkVfUkVBRExJTktACitIQVZFX1NJR05FRF9TSUdfQVRPTUlDX1QgPSBASEFWRV9TSUdORURfU0lHX0FUT01JQ19UQAorSEFWRV9TSUdORURfV0NIQVJfVCA9IEBIQVZFX1NJR05FRF9XQ0hBUl9UQAorSEFWRV9TSUdORURfV0lOVF9UID0gQEhBVkVfU0lHTkVEX1dJTlRfVEAKK0hBVkVfU0xFRVAgPSBASEFWRV9TTEVFUEAKK0hBVkVfU1RESU5UX0ggPSBASEFWRV9TVERJTlRfSEAKK0hBVkVfU1RQQ1BZID0gQEhBVkVfU1RQQ1BZQAorSEFWRV9TVFBOQ1BZID0gQEhBVkVfU1RQTkNQWUAKK0hBVkVfU1RSQ0FTRUNNUCA9IEBIQVZFX1NUUkNBU0VDTVBACitIQVZFX1NUUkNBU0VTVFIgPSBASEFWRV9TVFJDQVNFU1RSQAorSEFWRV9TVFJDSFJOVUwgPSBASEFWRV9TVFJDSFJOVUxACitIQVZFX1NUUk5EVVAgPSBASEFWRV9TVFJORFVQQAorSEFWRV9TVFJQQlJLID0gQEhBVkVfU1RSUEJSS0AKK0hBVkVfU1RSU0VQID0gQEhBVkVfU1RSU0VQQAorSEFWRV9TWVNfQklUWVBFU19IID0gQEhBVkVfU1lTX0JJVFlQRVNfSEAKK0hBVkVfU1lTX0lOVFRZUEVTX0ggPSBASEFWRV9TWVNfSU5UVFlQRVNfSEAKK0hBVkVfU1lTX1RZUEVTX0ggPSBASEFWRV9TWVNfVFlQRVNfSEAKK0hBVkVfVU5JU1REX0ggPSBASEFWRV9VTklTVERfSEAKK0hBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVCA9IEBIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlRACitIQVZFX1dDVFlQRV9IID0gQEhBVkVfV0NUWVBFX0hACitIQVZFX1dJTlRfVCA9IEBIQVZFX1dJTlRfVEAKK0hBVkVfX0JPT0wgPSBASEFWRV9fQk9PTEAKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSU5UTElOQ1MgPSBASU5UTElOQ1NACitJTlRMTElCUyA9IEBJTlRMTElCU0AKK0lOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKK0lOVFRZUEVTX0ggPSBASU5UVFlQRVNfSEAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQklDT05WID0gQExJQklDT05WQAorTElCSU5UTCA9IEBMSUJJTlRMQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTE5fUyA9IEBMTl9TQAorTFRBTExPQ0EgPSBATFRBTExPQ0FACitMVExJQklDT05WID0gQExUTElCSUNPTlZACitMVExJQklOVEwgPSBATFRMSUJJTlRMQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK0xUX0FHRSA9IEBMVF9BR0VACitMVF9DVVJSRU5UID0gQExUX0NVUlJFTlRACitMVF9SRUxFQVNFID0gQExUX1JFTEVBU0VACitMVF9SRVZJU0lPTiA9IEBMVF9SRVZJU0lPTkAKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTVNHRk1UID0gQE1TR0ZNVEAKK01TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKK01TR01FUkdFID0gQE1TR01FUkdFQAorT0JKRVhUID0gQE9CSkVYVEAKK09TID0gQE9TQAorT1NfTElCUyA9IEBPU19MSUJTQAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBUlRFRExERkxBR1MgPSBAUEFSVEVETERGTEFHU0AKK1BBUlRFRF9MSUJTID0gQFBBUlRFRF9MSUJTQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQT1NVQiA9IEBQT1NVQkAKK1BPV19MSUIgPSBAUE9XX0xJQkAKK1BSSVBUUl9QUkVGSVggPSBAUFJJUFRSX1BSRUZJWEAKK1BSSV9NQUNST1NfQlJPS0VOID0gQFBSSV9NQUNST1NfQlJPS0VOQAorUFRSRElGRl9UX1NVRkZJWCA9IEBQVFJESUZGX1RfU1VGRklYQAorUkFOTElCID0gQFJBTkxJQkAKK1JFSVNFUl9MSUJTID0gQFJFSVNFUl9MSUJTQAorUkVQTEFDRV9DSE9XTiA9IEBSRVBMQUNFX0NIT1dOQAorUkVQTEFDRV9GQ0hESVIgPSBAUkVQTEFDRV9GQ0hESVJACitSRVBMQUNFX0dFVENXRCA9IEBSRVBMQUNFX0dFVENXREAKK1JFUExBQ0VfTUtTVEVNUCA9IEBSRVBMQUNFX01LU1RFTVBACitTRUQgPSBAU0VEQAorU0VMSU5VWF9MSUJTID0gQFNFTElOVVhfTElCU0AKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTSUdfQVRPTUlDX1RfU1VGRklYID0gQFNJR19BVE9NSUNfVF9TVUZGSVhACitTSVpFX1RfU1VGRklYID0gQFNJWkVfVF9TVUZGSVhACitTVERCT09MX0ggPSBAU1REQk9PTF9IQAorU1RESU5UX0ggPSBAU1RESU5UX0hACitTVFJJUCA9IEBTVFJJUEAKK1VTRV9OTFMgPSBAVVNFX05MU0AKK1VVSURfTElCUyA9IEBVVUlEX0xJQlNACitWRVJTSU9OID0gQFZFUlNJT05ACitXQ0hBUl9IID0gQFdDSEFSX0hACitXQ0hBUl9UX1NVRkZJWCA9IEBXQ0hBUl9UX1NVRkZJWEAKK1dDVFlQRV9IID0gQFdDVFlQRV9IQAorV0lOVF9UX1NVRkZJWCA9IEBXSU5UX1RfU1VGRklYQAorWEdFVFRFWFQgPSBAWEdFVFRFWFRACitYR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9DWFggPSBAYWNfY3RfQ1hYQAorYWNfY3RfRjc3ID0gQGFjX2N0X0Y3N0AKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitnbF9MSUJPQkpTID0gQGdsX0xJQk9CSlNACitnbF9MVExJQk9CSlMgPSBAZ2xfTFRMSUJPQkpTQAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK2xhYmVsX0NGTEFHUyA9ICQoQ0hFQ0tfQ0ZMQUdTKSAtSSQodG9wX3NyY2RpcikvaW5jbHVkZQorbGFiZWxfTERBREQgPSAkKENIRUNLX0xJQlMpICQodG9wX2J1aWxkZGlyKS9saWJwYXJ0ZWQvbGlicGFydGVkLmxhCitsYWJlbF9TT1VSQ0VTID0gY29tbW9uLmggY29tbW9uLmMgbGFiZWwuYworTUFJTlRBSU5FUkNMRUFORklMRVMgPSBNYWtlZmlsZS5pbgorYWxsOiBhbGwtYW0KKworLlNVRkZJWEVTOgorLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagorJChzcmNkaXIpL01ha2VmaWxlLmluOiAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggXAorCQkmJiBleGl0IDA7IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251ICBsaWJwYXJ0ZWQvdGVzdHMvTWFrZWZpbGUnOyBcCisJY2QgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWdudSAgbGlicGFydGVkL3Rlc3RzL01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAoraW5zdGFsbC1iaW5QUk9HUkFNUzogJChiaW5fUFJPR1JBTVMpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJdGVzdCAteiAiJChiaW5kaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJChiaW5kaXIpIgorCUBsaXN0PSckKGJpbl9QUk9HUkFNUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIHAxPWBlY2hvICQkcHxzZWQgJ3MvJChFWEVFWFQpJCQvLydgOyBcCisJICBpZiB0ZXN0IC1mICQkcCBcCisJICAgICB8fCB0ZXN0IC1mICQkcDEgXAorCSAgOyB0aGVuIFwKKwkgICAgZj1gZWNobyAiJCRwMSIgfCBzZWQgJ3MsXi4qLywsOyQodHJhbnNmb3JtKTtzLyQkLyQoRVhFRVhUKS8nYDsgXAorCSAgIGVjaG8gIiAkKElOU1RBTExfUFJPR1JBTV9FTlYpICQoTElCVE9PTCkgLS1tb2RlPWluc3RhbGwgJChiaW5QUk9HUkFNU19JTlNUQUxMKSAnJCRwJyAnJChERVNURElSKSQoYmluZGlyKS8kJGYnIjsgXAorCSAgICQoSU5TVEFMTF9QUk9HUkFNX0VOVikgJChMSUJUT09MKSAtLW1vZGU9aW5zdGFsbCAkKGJpblBST0dSQU1TX0lOU1RBTEwpICIkJHAiICIkKERFU1RESVIpJChiaW5kaXIpLyQkZiIgfHwgZXhpdCAxOyBcCisJICBlbHNlIDo7IGZpOyBcCisJZG9uZQorCit1bmluc3RhbGwtYmluUFJPR1JBTVM6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChiaW5fUFJPR1JBTVMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBmPWBlY2hvICIkJHAiIHwgc2VkICdzLF4uKi8sLDtzLyQoRVhFRVhUKSQkLy87JCh0cmFuc2Zvcm0pO3MvJCQvJChFWEVFWFQpLydgOyBcCisJICBlY2hvICIgcm0gLWYgJyQoREVTVERJUikkKGJpbmRpcikvJCRmJyI7IFwKKwkgIHJtIC1mICIkKERFU1RESVIpJChiaW5kaXIpLyQkZiI7IFwKKwlkb25lCisKK2NsZWFuLWJpblBST0dSQU1TOgorCUBsaXN0PSckKGJpbl9QUk9HUkFNUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGY9YGVjaG8gJCRwfHNlZCAncy8kKEVYRUVYVCkkJC8vJ2A7IFwKKwkgIGVjaG8gIiBybSAtZiAkJHAgJCRmIjsgXAorCSAgcm0gLWYgJCRwICQkZiA7IFwKKwlkb25lCitsYWJlbCQoRVhFRVhUKTogJChsYWJlbF9PQkpFQ1RTKSAkKGxhYmVsX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGxhYmVsJChFWEVFWFQpCisJJChsYWJlbF9MSU5LKSAkKGxhYmVsX09CSkVDVFMpICQobGFiZWxfTERBREQpICQoTElCUykKKworbW9zdGx5Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi4kKE9CSkVYVCkKKworZGlzdGNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICoudGFiLmMKKworQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xhYmVsLWNvbW1vbi5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGFiZWwtbGFiZWwuUG9AYW1fX3F1b3RlQAorCisuYy5vOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jICQ8CisKKy5jLm9iajoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jIGAkKENZR1BBVEhfVykgJyQ8J2AKKworLmMubG86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKKworbGFiZWwtY29tbW9uLm86IGNvbW1vbi5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsYWJlbF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGFiZWwtY29tbW9uLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xhYmVsLWNvbW1vbi5UcG8gLWMgLW8gbGFiZWwtY29tbW9uLm8gYHRlc3QgLWYgJ2NvbW1vbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bjb21tb24uYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xhYmVsLWNvbW1vbi5UcG8gJChERVBESVIpL2xhYmVsLWNvbW1vbi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nY29tbW9uLmMnIG9iamVjdD0nbGFiZWwtY29tbW9uLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxhYmVsX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxhYmVsLWNvbW1vbi5vIGB0ZXN0IC1mICdjb21tb24uYycgfHwgZWNobyAnJChzcmNkaXIpLydgY29tbW9uLmMKKworbGFiZWwtY29tbW9uLm9iajogY29tbW9uLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxhYmVsX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsYWJlbC1jb21tb24ub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9sYWJlbC1jb21tb24uVHBvIC1jIC1vIGxhYmVsLWNvbW1vbi5vYmogYGlmIHRlc3QgLWYgJ2NvbW1vbi5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2NvbW1vbi5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9jb21tb24uYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xhYmVsLWNvbW1vbi5UcG8gJChERVBESVIpL2xhYmVsLWNvbW1vbi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nY29tbW9uLmMnIG9iamVjdD0nbGFiZWwtY29tbW9uLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGFiZWxfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGFiZWwtY29tbW9uLm9iaiBgaWYgdGVzdCAtZiAnY29tbW9uLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnY29tbW9uLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2NvbW1vbi5jJzsgZmlgCisKK2xhYmVsLWxhYmVsLm86IGxhYmVsLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxhYmVsX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsYWJlbC1sYWJlbC5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9sYWJlbC1sYWJlbC5UcG8gLWMgLW8gbGFiZWwtbGFiZWwubyBgdGVzdCAtZiAnbGFiZWwuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbGFiZWwuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xhYmVsLWxhYmVsLlRwbyAkKERFUERJUikvbGFiZWwtbGFiZWwuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2xhYmVsLmMnIG9iamVjdD0nbGFiZWwtbGFiZWwubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGFiZWxfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGFiZWwtbGFiZWwubyBgdGVzdCAtZiAnbGFiZWwuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbGFiZWwuYworCitsYWJlbC1sYWJlbC5vYmo6IGxhYmVsLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxhYmVsX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsYWJlbC1sYWJlbC5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2xhYmVsLWxhYmVsLlRwbyAtYyAtbyBsYWJlbC1sYWJlbC5vYmogYGlmIHRlc3QgLWYgJ2xhYmVsLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnbGFiZWwuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvbGFiZWwuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL2xhYmVsLWxhYmVsLlRwbyAkKERFUERJUikvbGFiZWwtbGFiZWwuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2xhYmVsLmMnIG9iamVjdD0nbGFiZWwtbGFiZWwub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsYWJlbF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsYWJlbC1sYWJlbC5vYmogYGlmIHRlc3QgLWYgJ2xhYmVsLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnbGFiZWwuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvbGFiZWwuYyc7IGZpYAorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJbWtpZCAtZklEICQkdW5pcXVlCit0YWdzOiBUQUdTCisKK1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJdGFncz07IFwKKwloZXJlPWBwd2RgOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKwkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKKwkgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgJCR0YWdzICQkdW5pcXVlOyBcCisJZmkKK2N0YWdzOiBDVEFHUworQ1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJdGFncz07IFwKKwloZXJlPWBwd2RgOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIiBcCisJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCisJICAgICAkJHRhZ3MgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmIGNkICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAkJGhlcmUKKworZGlzdGNsZWFuLXRhZ3M6CisJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKKworY2hlY2stVEVTVFM6ICQoVEVTVFMpCisJQGZhaWxlZD0wOyBhbGw9MDsgeGZhaWw9MDsgeHBhc3M9MDsgc2tpcD0wOyB3cz0nWwkgXSc7IFwKKwlzcmNkaXI9JChzcmNkaXIpOyBleHBvcnQgc3JjZGlyOyBcCisJbGlzdD0nICQoVEVTVFMpICc7IFwKKwlpZiB0ZXN0IC1uICIkJGxpc3QiOyB0aGVuIFwKKwkgIGZvciB0c3QgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgLi8kJHRzdDsgdGhlbiBkaXI9Li87IFwKKwkgICAgZWxpZiB0ZXN0IC1mICQkdHN0OyB0aGVuIGRpcj07IFwKKwkgICAgZWxzZSBkaXI9IiQoc3JjZGlyKS8iOyBmaTsgXAorCSAgICBpZiAkKFRFU1RTX0VOVklST05NRU5UKSAkJHtkaXJ9JCR0c3Q7IHRoZW4gXAorCSAgICAgIGFsbD1gZXhwciAkJGFsbCArIDFgOyBcCisJICAgICAgY2FzZSAiICQoWEZBSUxfVEVTVFMpICIgaW4gXAorCSAgICAgICokJHdzJCR0c3QkJHdzKikgXAorCQl4cGFzcz1gZXhwciAkJHhwYXNzICsgMWA7IFwKKwkJZmFpbGVkPWBleHByICQkZmFpbGVkICsgMWA7IFwKKwkJZWNobyAiWFBBU1M6ICQkdHN0IjsgXAorCSAgICAgIDs7IFwKKwkgICAgICAqKSBcCisJCWVjaG8gIlBBU1M6ICQkdHN0IjsgXAorCSAgICAgIDs7IFwKKwkgICAgICBlc2FjOyBcCisJICAgIGVsaWYgdGVzdCAkJD8gLW5lIDc3OyB0aGVuIFwKKwkgICAgICBhbGw9YGV4cHIgJCRhbGwgKyAxYDsgXAorCSAgICAgIGNhc2UgIiAkKFhGQUlMX1RFU1RTKSAiIGluIFwKKwkgICAgICAqJCR3cyQkdHN0JCR3cyopIFwKKwkJeGZhaWw9YGV4cHIgJCR4ZmFpbCArIDFgOyBcCisJCWVjaG8gIlhGQUlMOiAkJHRzdCI7IFwKKwkgICAgICA7OyBcCisJICAgICAgKikgXAorCQlmYWlsZWQ9YGV4cHIgJCRmYWlsZWQgKyAxYDsgXAorCQllY2hvICJGQUlMOiAkJHRzdCI7IFwKKwkgICAgICA7OyBcCisJICAgICAgZXNhYzsgXAorCSAgICBlbHNlIFwKKwkgICAgICBza2lwPWBleHByICQkc2tpcCArIDFgOyBcCisJICAgICAgZWNobyAiU0tJUDogJCR0c3QiOyBcCisJICAgIGZpOyBcCisJICBkb25lOyBcCisJICBpZiB0ZXN0ICIkJGZhaWxlZCIgLWVxIDA7IHRoZW4gXAorCSAgICBpZiB0ZXN0ICIkJHhmYWlsIiAtZXEgMDsgdGhlbiBcCisJICAgICAgYmFubmVyPSJBbGwgJCRhbGwgdGVzdHMgcGFzc2VkIjsgXAorCSAgICBlbHNlIFwKKwkgICAgICBiYW5uZXI9IkFsbCAkJGFsbCB0ZXN0cyBiZWhhdmVkIGFzIGV4cGVjdGVkICgkJHhmYWlsIGV4cGVjdGVkIGZhaWx1cmVzKSI7IFwKKwkgICAgZmk7IFwKKwkgIGVsc2UgXAorCSAgICBpZiB0ZXN0ICIkJHhwYXNzIiAtZXEgMDsgdGhlbiBcCisJICAgICAgYmFubmVyPSIkJGZhaWxlZCBvZiAkJGFsbCB0ZXN0cyBmYWlsZWQiOyBcCisJICAgIGVsc2UgXAorCSAgICAgIGJhbm5lcj0iJCRmYWlsZWQgb2YgJCRhbGwgdGVzdHMgZGlkIG5vdCBiZWhhdmUgYXMgZXhwZWN0ZWQgKCQkeHBhc3MgdW5leHBlY3RlZCBwYXNzZXMpIjsgXAorCSAgICBmaTsgXAorCSAgZmk7IFwKKwkgIGRhc2hlcz0iJCRiYW5uZXIiOyBcCisJICBza2lwcGVkPSIiOyBcCisJICBpZiB0ZXN0ICIkJHNraXAiIC1uZSAwOyB0aGVuIFwKKwkgICAgc2tpcHBlZD0iKCQkc2tpcCB0ZXN0cyB3ZXJlIG5vdCBydW4pIjsgXAorCSAgICB0ZXN0IGBlY2hvICIkJHNraXBwZWQiIHwgd2MgLWNgIC1sZSBgZWNobyAiJCRiYW5uZXIiIHwgd2MgLWNgIHx8IFwKKwkgICAgICBkYXNoZXM9IiQkc2tpcHBlZCI7IFwKKwkgIGZpOyBcCisJICByZXBvcnQ9IiI7IFwKKwkgIGlmIHRlc3QgIiQkZmFpbGVkIiAtbmUgMCAmJiB0ZXN0IC1uICIkKFBBQ0tBR0VfQlVHUkVQT1JUKSI7IHRoZW4gXAorCSAgICByZXBvcnQ9IlBsZWFzZSByZXBvcnQgdG8gJChQQUNLQUdFX0JVR1JFUE9SVCkiOyBcCisJICAgIHRlc3QgYGVjaG8gIiQkcmVwb3J0IiB8IHdjIC1jYCAtbGUgYGVjaG8gIiQkYmFubmVyIiB8IHdjIC1jYCB8fCBcCisJICAgICAgZGFzaGVzPSIkJHJlcG9ydCI7IFwKKwkgIGZpOyBcCisJICBkYXNoZXM9YGVjaG8gIiQkZGFzaGVzIiB8IHNlZCBzLy4vPS9nYDsgXAorCSAgZWNobyAiJCRkYXNoZXMiOyBcCisJICBlY2hvICIkJGJhbm5lciI7IFwKKwkgIHRlc3QgLXogIiQkc2tpcHBlZCIgfHwgZWNobyAiJCRza2lwcGVkIjsgXAorCSAgdGVzdCAteiAiJCRyZXBvcnQiIHx8IGVjaG8gIiQkcmVwb3J0IjsgXAorCSAgZWNobyAiJCRkYXNoZXMiOyBcCisJICB0ZXN0ICIkJGZhaWxlZCIgLWVxIDA7IFwKKwllbHNlIDo7IGZpCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgXAorCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKKwkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCisJICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAorCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKKwkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKKwkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKKwkJCSAgIHNvcnQgLXVgIDs7IFwKKwllc2FjOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtcFIgJChzcmNkaXIpLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1wUiAkJGQvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICQoZGlzdGRpcikvJCRmaWxlIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAkKGRpc3RkaXIpLyQkZmlsZSBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY2hlY2stVEVTVFMKK2NoZWNrOiBjaGVjay1hbQorYWxsLWFtOiBNYWtlZmlsZSAkKFBST0dSQU1TKQoraW5zdGFsbGRpcnM6CisJZm9yIGRpciBpbiAiJChERVNURElSKSQoYmluZGlyKSI7IGRvIFwKKwkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKE1LRElSX1ApICIkJGRpciI7IFwKKwlkb25lCitpbnN0YWxsOiBpbnN0YWxsLWFtCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KK3VuaW5zdGFsbDogdW5pbnN0YWxsLWFtCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCitpbnN0YWxsLXN0cmlwOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorCS10ZXN0IC16ICIkKE1BSU5UQUlORVJDTEVBTkZJTEVTKSIgfHwgcm0gLWYgJChNQUlOVEFJTkVSQ0xFQU5GSUxFUykKK2NsZWFuOiBjbGVhbi1hbQorCitjbGVhbi1hbTogY2xlYW4tYmluUFJPR1JBTVMgY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIG1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1leGVjLWFtOiBpbnN0YWxsLWJpblBST0dSQU1TCisKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCisKK2luc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQorCitpbnN0YWxsY2hlY2stYW06CisKK21haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKKwltb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLWFtCisKK3BkZi1hbToKKworcHM6IHBzLWFtCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06IHVuaW5zdGFsbC1iaW5QUk9HUkFNUworCisuTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisKKy5QSE9OWTogQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1URVNUUyBjaGVjay1hbSBjbGVhbiBcCisJY2xlYW4tYmluUFJPR1JBTVMgY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGN0YWdzIGRpc3RjbGVhbiBcCisJZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgXAorCWRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIFwKKwlpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1iaW5QUk9HUkFNUyBpbnN0YWxsLWRhdGEgXAorCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgXAorCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBcCisJaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKKwlpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgXAorCWluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIFwKKwltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBcCisJbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAorCXRhZ3MgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSB1bmluc3RhbGwtYmluUFJPR1JBTVMKKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC90ZXN0cy9jb21tb24uYyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvdGVzdHMvY29tbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdjZTU2ZgotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvdGVzdHMvY29tbW9uLmMKQEAgLTAsMCArMSw3NCBAQAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxjaGVjay5oPgorCisjaW5jbHVkZSAiY29tbW9uLmgiCisKK1BlZEV4Y2VwdGlvbk9wdGlvbgorX3Rlc3RfZXhjZXB0aW9uX2hhbmRsZXIgKFBlZEV4Y2VwdGlvbiogZSkKK3sKKyAgICAgICAgZmFpbCAoIkV4Y2VwdGlvbiBvZiB0eXBlICVzIGhhcyBiZWVuIHJhaXNlZDogJXMiLAorICAgICAgICAgICAgICBwZWRfZXhjZXB0aW9uX2dldF90eXBlX3N0cmluZyAoZS0+dHlwZSksCisgICAgICAgICAgICAgIGUtPm1lc3NhZ2UpOworCisgICAgICAgIHJldHVybiBQRURfRVhDRVBUSU9OX1VOSEFORExFRDsKK30KKworY2hhcioKK19jcmVhdGVfZGlzayAoY29uc3Qgb2ZmX3Qgc2l6ZSkKK3sKKyAgICAgICAgY2hhciogZmlsZW5hbWUgPSBzdHJkdXAgKCJwYXJ0ZWQtdGVzdC1YWFhYWFgiKTsKKworICAgICAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKworICAgICAgICBpbnQgZmQgPSBta3N0ZW1wIChmaWxlbmFtZSk7CisgICAgICAgIGlmIChmZCA8IDApIHsKKyAgICAgICAgZnJlZV9maWxlbmFtZToKKyAgICAgICAgICAgICAgICBmcmVlIChmaWxlbmFtZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKworICAgICAgICBGSUxFKiBkaXNrID0gZmRvcGVuIChmZCwgInciKTsKKyAgICAgICAgaWYgKGRpc2sgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGZyZWVfZmlsZW5hbWU7CisKKyAgICAgICAgb2ZmX3QgdG90YWxfc2l6ZSA9IHNpemUgKiAxMDI0ICogMTAyNDsJLyogTWIgKi8KKworICAgICAgICBpbnQgZmFpbCA9IChmc2VlayAoZGlzaywgdG90YWxfc2l6ZSwgU0VFS19TRVQpICE9IDAKKyAgICAgICAgICAgICAgICAgICAgfHwgZndyaXRlICgiIiwgc2l6ZW9mIChjaGFyKSwgMSwgZGlzaykgIT0gMSk7CisKKyAgICAgICAgaWYgKGZjbG9zZSAoZGlzaykgIT0gMCB8fCBmYWlsKQorICAgICAgICAgICAgICAgIGdvdG8gZnJlZV9maWxlbmFtZTsKKworICAgICAgICByZXR1cm4gZmlsZW5hbWU7Cit9CisKK1BlZERpc2sqCitfY3JlYXRlX2Rpc2tfbGFiZWwgKFBlZERldmljZSAqZGV2LCBQZWREaXNrVHlwZSAqdHlwZSkKK3sKKyAgICAgICAgUGVkRGlzayogZGlzayA9IE5VTEw7CisKKyAgICAgICAgLyogQ3JlYXRlIHRoZSBsYWJlbCAqLworICAgICAgICBkaXNrID0gcGVkX2Rpc2tfbmV3X2ZyZXNoIChkZXYsIHR5cGUpOworICAgICAgICBmYWlsX2lmICghZGlzaywgIkZhaWxlZCB0byBjcmVhdGUgYSBsYWJlbCBvZiB0eXBlOiAlcyIsCisgICAgICAgICAgICAgICAgIHR5cGUtPm5hbWUpOworICAgICAgICBmYWlsX2lmICghcGVkX2Rpc2tfY29tbWl0KGRpc2spLAorCQkgIkZhaWxlZCB0byBjb21taXQgbGFiZWwgdG8gZGV2aWNlIik7CisKKyAgICAgICAgcmV0dXJuIGRpc2s7Cit9CisKK2ludAorX2ltcGxlbWVudGVkX2Rpc2tfbGFiZWwgKGNvbnN0IGNoYXIgKmxhYmVsKQoreworICAgICAgICAvKiBOb3QgaW1wbGVtZW50ZWQgeWV0ICovCisgICAgICAgIGlmIChzdHJuY21wIChsYWJlbCwgImFpeCIsIDMpID09IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIAorICAgICAgICByZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvdGVzdHMvY29tbW9uLmggYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL3Rlc3RzL2NvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmYmFkNzMKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL3Rlc3RzL2NvbW1vbi5oCkBAIC0wLDAgKzEsMjcgQEAKKyNpbmNsdWRlIDxwYXJ0ZWQvcGFydGVkLmg+CisKKy8qIENyZWF0ZSBhbiBlbXB0eSBkaXNrIGltYWdlCisgKgorICogZmlsZW5hbWU6IGZpbGUgKHdpdGggZnVsbCBwYXRoKSB3aGVyZSB0byB3cml0ZSB0aGUgZGlzayBpbWFnZQorICogICAgIHNpemU6IHNpemUgb2YgZGlzayBpbWFnZSAobWVnYWJ5dGVzKQorICovCitjaGFyKiBfY3JlYXRlX2Rpc2sgKGNvbnN0IG9mZl90IHNpemUpOworCisvKiBDcmVhdGUgYSBkaXNrIGxhYmVsCisgKgorICogIGRldjogZGV2aWNlIHRvIHVzZSB3aGVuIGNyZWF0aW5nIHRoZSBsYWJlbAorICogdHlwZTogbGFiZWwgdHlwZQorICovCitQZWREaXNrKiBfY3JlYXRlX2Rpc2tfbGFiZWwgKFBlZERldmljZSogZGV2LCBQZWREaXNrVHlwZSogdHlwZSk7CisKKy8qIFJldHVybiBpZiBhIGRpc2sgbGFiZWwgaXMgaW1wbGVtZW50ZWQKKyAqCisgKiBsYWJlbDogZGlzayBsYWJlbCBuYW1lCisgKi8KK2ludCBfaW1wbGVtZW50ZWRfZGlza19sYWJlbCAoY29uc3QgY2hhciogbGFiZWwpOworCisvKiBUZXN0IHNwZWNpZmljIGV4Y2VwdGlvbiBoYW5kbGVyCisgKgorICovCitQZWRFeGNlcHRpb25PcHRpb24gX3Rlc3RfZXhjZXB0aW9uX2hhbmRsZXIgKFBlZEV4Y2VwdGlvbiogZSk7CisKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvdGVzdHMvbGFiZWwuYyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvdGVzdHMvbGFiZWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGY0MGMzCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC90ZXN0cy9sYWJlbC5jCkBAIC0wLDAgKzEsMTkzIEBACisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlIDxjaGVjay5oPgorCisjaW5jbHVkZSA8cGFydGVkL3BhcnRlZC5oPgorCisjaW5jbHVkZSAiY29tbW9uLmgiCisKK3N0YXRpYyBjaGFyKiB0ZW1wb3JhcnlfZGlzazsKKworc3RhdGljIHZvaWQKK2NyZWF0ZV9kaXNrICh2b2lkKQoreworICAgICAgICB0ZW1wb3JhcnlfZGlzayA9IF9jcmVhdGVfZGlzayAoMjApOworICAgICAgICBmYWlsX2lmICh0ZW1wb3JhcnlfZGlzayA9PSBOVUxMLCAiRmFpbGVkIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZGlzayIpOworfQorCitzdGF0aWMgdm9pZAorZGVzdHJveV9kaXNrICh2b2lkKQoreworICAgICAgICB1bmxpbmsgKHRlbXBvcmFyeV9kaXNrKTsKKyAgICAgICAgZnJlZSAodGVtcG9yYXJ5X2Rpc2spOworfQorCisvKiBURVNUOiBDcmVhdGUgYSBkaXNrbGFiZWwgb24gYSBzaW1wbGUgZGlzayBpbWFnZSAqLworU1RBUlRfVEVTVCAodGVzdF9jcmVhdGVfbGFiZWwpCit7CisgICAgICAgIFBlZERldmljZSogZGV2ID0gcGVkX2RldmljZV9nZXQgKHRlbXBvcmFyeV9kaXNrKTsKKyAgICAgICAgaWYgKGRldiA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBQZWREaXNrVHlwZSogdHlwZTsKKyAgICAgICAgUGVkRGlzayogZGlzazsKKworICAgICAgICBmb3IgKHR5cGUgPSBwZWRfZGlza190eXBlX2dldF9uZXh0IChOVUxMKTsgdHlwZTsKKyAgICAgICAgICAgICB0eXBlID0gcGVkX2Rpc2tfdHlwZV9nZXRfbmV4dCAodHlwZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIV9pbXBsZW1lbnRlZF9kaXNrX2xhYmVsICh0eXBlLT5uYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgZGlzayA9IF9jcmVhdGVfZGlza19sYWJlbCAoZGV2LCB0eXBlKTsKKyAgICAgICAgICAgICAgICBwZWRfZGlza19kZXN0cm95IChkaXNrKTsKKyAgICAgICAgfQorICAgICAgICBwZWRfZGV2aWNlX2Rlc3Ryb3kgKGRldik7Cit9CitFTkRfVEVTVAorCisvKiBURVNUOiBQcm9iZSB0aGUgZGlzayBsYWJlbCBvZiBhIGxvb3AgZGV2aWNlLiAqLworU1RBUlRfVEVTVCAodGVzdF9wcm9iZV9sYWJlbCkKK3sKKyAgICAgICAgUGVkRGV2aWNlKiBkZXYgPSBwZWRfZGV2aWNlX2dldCAodGVtcG9yYXJ5X2Rpc2spOworICAgICAgICBpZiAoZGV2ID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFBlZERpc2tUeXBlKiBwcm9iZWQ7CisgICAgICAgIFBlZERpc2tUeXBlKiB0eXBlOworICAgICAgICBQZWREaXNrKiBkaXNrOworCisgICAgICAgIGZvciAodHlwZSA9IHBlZF9kaXNrX3R5cGVfZ2V0X25leHQgKE5VTEwpOyB0eXBlOworICAgICAgICAgICAgIHR5cGUgPSBwZWRfZGlza190eXBlX2dldF9uZXh0ICh0eXBlKSkgeworICAgICAgICAgICAgICAgIGlmICghX2ltcGxlbWVudGVkX2Rpc2tfbGFiZWwgKHR5cGUtPm5hbWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBkaXNrID0gX2NyZWF0ZV9kaXNrX2xhYmVsIChkZXYsIHR5cGUpOworICAgICAgICAgICAgICAgIHBlZF9kaXNrX2Rlc3Ryb3kgKGRpc2spOworCisgICAgICAgICAgICAgICAgLyogVHJ5IHRvIHByb2JlIHRoZSBkaXNrIGxhYmVsLiAqLworICAgICAgICAgICAgICAgIHByb2JlZCA9IHBlZF9kaXNrX3Byb2JlIChkZXYpOworICAgICAgICAgICAgICAgIGZhaWxfaWYgKCFwcm9iZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBwcm9iZSB0aGUganVzdCBjcmVhdGVkIGxhYmVsIG9mIHR5cGU6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLT5uYW1lKTsKKyAgICAgICAgICAgICAgICBmYWlsX2lmIChzdHJjbXAgKHByb2JlZC0+bmFtZSwgdHlwZS0+bmFtZSkgIT0gMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiUHJvYmUgcmV0dXJuZWQgbGFiZWwgb2YgdHlwZTogJXMgYXMgdHlwZTogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUtPm5hbWUsIHByb2JlZC0+bmFtZSk7CisgICAgICAgIH0KKyAgICAgICAgcGVkX2RldmljZV9kZXN0cm95IChkZXYpOworfQorRU5EX1RFU1QKKworLyogVEVTVDogUmVhZCB0aGUgZGlzayBsYWJlbCBvZiBhIGxvb3AgZGV2aWNlLiAqLworU1RBUlRfVEVTVCAodGVzdF9yZWFkX2xhYmVsKQoreworICAgICAgICBQZWREZXZpY2UqIGRldiA9IHBlZF9kZXZpY2VfZ2V0ICh0ZW1wb3JhcnlfZGlzayk7CisgICAgICAgIGlmIChkZXYgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgUGVkRGlza1R5cGUqIHR5cGU7CisgICAgICAgIFBlZERpc2sqIGRpc2s7CisKKyAgICAgICAgZm9yICh0eXBlID0gcGVkX2Rpc2tfdHlwZV9nZXRfbmV4dCAoTlVMTCk7IHR5cGU7CisgICAgICAgICAgICAgdHlwZSA9IHBlZF9kaXNrX3R5cGVfZ2V0X25leHQgKHR5cGUpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFfaW1wbGVtZW50ZWRfZGlza19sYWJlbCAodHlwZS0+bmFtZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIGRpc2sgPSBfY3JlYXRlX2Rpc2tfbGFiZWwgKGRldiwgdHlwZSk7CisgICAgICAgICAgICAgICAgcGVkX2Rpc2tfZGVzdHJveSAoZGlzayk7CisKKyAgICAgICAgICAgICAgICAvKiBUcnkgdG8gcmVhZCB0aGUgZGlzayBsYWJlbC4gKi8KKyAgICAgICAgICAgICAgICBkaXNrID0gcGVkX2Rpc2tfbmV3IChkZXYpOworICAgICAgICAgICAgICAgIGZhaWxfaWYgKCFkaXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gcmVhZCB0aGUganVzdCBjcmVhdGVkIGxhYmVsIG9mIHR5cGU6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLT5uYW1lKTsKKyAgICAgICAgICAgICAgICBmYWlsX2lmIChzdHJjbXAgKGRpc2stPnR5cGUtPm5hbWUsIHR5cGUtPm5hbWUpICE9IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIlJlYWQgcmV0dXJuZWQgbGFiZWwgb2YgdHlwZTogJXMgYXMgdHlwZTogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUtPm5hbWUsIGRpc2stPnR5cGUtPm5hbWUpOworCisgICAgICAgICAgICAgICAgcGVkX2Rpc2tfZGVzdHJveSAoZGlzayk7CisgICAgICAgIH0KKyAgICAgICAgcGVkX2RldmljZV9kZXN0cm95IChkZXYpOworfQorRU5EX1RFU1QKKworLyogVEVTVDogQ2xvbmUgdGhlIGRpc2sgbGFiZWwgb2YgYSBsb29wIGRldmljZS4gKi8KK1NUQVJUX1RFU1QgKHRlc3RfY2xvbmVfbGFiZWwpCit7CisgICAgICAgIFBlZERldmljZSogZGV2ID0gcGVkX2RldmljZV9nZXQgKHRlbXBvcmFyeV9kaXNrKTsKKyAgICAgICAgaWYgKGRldiA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBQZWREaXNrVHlwZSogdHlwZTsKKyAgICAgICAgUGVkRGlzayogY2xvbmU7CisgICAgICAgIFBlZERpc2sqIGRpc2s7CisKKyAgICAgICAgZm9yICh0eXBlID0gcGVkX2Rpc2tfdHlwZV9nZXRfbmV4dCAoTlVMTCk7IHR5cGU7CisgICAgICAgICAgICAgdHlwZSA9IHBlZF9kaXNrX3R5cGVfZ2V0X25leHQgKHR5cGUpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFfaW1wbGVtZW50ZWRfZGlza19sYWJlbCAodHlwZS0+bmFtZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIC8qIEZJWE1FOiBza2lwIHRoaXMgdGVzdCB0ZW1wb3JhcmlseSwgd2hpbGUgd2Ugd2FpdAorICAgICAgICAgICAgICAgICAgIGZvciBzb21lb25lIHRvIGZpbmQgdGhlIGN5Y2xlcyB0byBmaXggdGhlIGJ1Zy4gICovCisgICAgICAgICAgICAgICAgaWYgKHN0cmNtcCAodHlwZS0+bmFtZSwgImR2aCIpID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIGRpc2sgPSBfY3JlYXRlX2Rpc2tfbGFiZWwgKGRldiwgdHlwZSk7CisKKyAgICAgICAgICAgICAgICAvKiBUcnkgdG8gY2xvbmUgdGhlIGRpc2sgbGFiZWwuICovCisgICAgICAgICAgICAgICAgY2xvbmUgPSBwZWRfZGlza19kdXBsaWNhdGUgKGRpc2spOworICAgICAgICAgICAgICAgIGZhaWxfaWYgKCFjbG9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIGNsb25lIHRoZSBqdXN0IGNyZWF0ZWQgbGFiZWwgb2YgdHlwZTogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUtPm5hbWUpOworCisgICAgICAgICAgICAgICAgcGVkX2Rpc2tfZGVzdHJveSAoY2xvbmUpOworICAgICAgICAgICAgICAgIHBlZF9kaXNrX2Rlc3Ryb3kgKGRpc2spOworICAgICAgICB9CisgICAgICAgIHBlZF9kZXZpY2VfZGVzdHJveSAoZGV2KTsKK30KK0VORF9URVNUCisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgICAgICAgaW50IG51bWJlcl9mYWlsZWQ7CisgICAgICAgIFN1aXRlKiBzdWl0ZSA9IHN1aXRlX2NyZWF0ZSAoIkRpc2sgTGFiZWwiKTsKKyAgICAgICAgVENhc2UqIHRjYXNlX2Jhc2ljID0gdGNhc2VfY3JlYXRlICgiQ3JlYXRlIik7CisgICAgICAgIFRDYXNlKiB0Y2FzZV9wcm9iZSA9IHRjYXNlX2NyZWF0ZSAoIlByb2JlIik7CisgICAgICAgIFRDYXNlKiB0Y2FzZV9yZWFkID0gdGNhc2VfY3JlYXRlICgiUmVhZCIpOworICAgICAgICBUQ2FzZSogdGNhc2VfY2xvbmUgPSB0Y2FzZV9jcmVhdGUgKCJDbG9uZSIpOworCisgICAgICAgIC8qIEZhaWwgd2hlbiBhbiBleGNlcHRpb24gaXMgcmFpc2VkICovCisgICAgICAgIHBlZF9leGNlcHRpb25fc2V0X2hhbmRsZXIgKF90ZXN0X2V4Y2VwdGlvbl9oYW5kbGVyKTsKKworICAgICAgICB0Y2FzZV9hZGRfY2hlY2tlZF9maXh0dXJlICh0Y2FzZV9iYXNpYywgY3JlYXRlX2Rpc2ssIGRlc3Ryb3lfZGlzayk7CisgICAgICAgIHRjYXNlX2FkZF90ZXN0ICh0Y2FzZV9iYXNpYywgdGVzdF9jcmVhdGVfbGFiZWwpOworICAgICAgICAvKiBEaXNhYmxlIHRpbWVvdXQgZm9yIHRoaXMgdGVzdCAqLworICAgICAgICB0Y2FzZV9zZXRfdGltZW91dCAodGNhc2VfYmFzaWMsIDApOworICAgICAgICBzdWl0ZV9hZGRfdGNhc2UgKHN1aXRlLCB0Y2FzZV9iYXNpYyk7CisKKyAgICAgICAgdGNhc2VfYWRkX2NoZWNrZWRfZml4dHVyZSAodGNhc2VfcHJvYmUsIGNyZWF0ZV9kaXNrLCBkZXN0cm95X2Rpc2spOworICAgICAgICB0Y2FzZV9hZGRfdGVzdCAodGNhc2VfcHJvYmUsIHRlc3RfcHJvYmVfbGFiZWwpOworICAgICAgICAvKiBEaXNhYmxlIHRpbWVvdXQgZm9yIHRoaXMgdGVzdC4gKi8KKyAgICAgICAgdGNhc2Vfc2V0X3RpbWVvdXQgKHRjYXNlX3Byb2JlLCAwKTsKKyAgICAgICAgc3VpdGVfYWRkX3RjYXNlIChzdWl0ZSwgdGNhc2VfcHJvYmUpOworCisgICAgICAgIHRjYXNlX2FkZF9jaGVja2VkX2ZpeHR1cmUgKHRjYXNlX3JlYWQsIGNyZWF0ZV9kaXNrLCBkZXN0cm95X2Rpc2spOworICAgICAgICB0Y2FzZV9hZGRfdGVzdCAodGNhc2VfcmVhZCwgdGVzdF9yZWFkX2xhYmVsKTsKKyAgICAgICAgLyogRGlzYWJsZSB0aW1lb3V0IGZvciB0aGlzIHRlc3QuICovCisgICAgICAgIHRjYXNlX3NldF90aW1lb3V0ICh0Y2FzZV9yZWFkLCAwKTsKKyAgICAgICAgc3VpdGVfYWRkX3RjYXNlIChzdWl0ZSwgdGNhc2VfcmVhZCk7CisKKyAgICAgICAgdGNhc2VfYWRkX2NoZWNrZWRfZml4dHVyZSAodGNhc2VfY2xvbmUsIGNyZWF0ZV9kaXNrLCBkZXN0cm95X2Rpc2spOworICAgICAgICB0Y2FzZV9hZGRfdGVzdCAodGNhc2VfY2xvbmUsIHRlc3RfY2xvbmVfbGFiZWwpOworICAgICAgICAvKiBEaXNhYmxlIHRpbWVvdXQgZm9yIHRoaXMgdGVzdC4gKi8KKyAgICAgICAgdGNhc2Vfc2V0X3RpbWVvdXQgKHRjYXNlX2Nsb25lLCAwKTsKKyAgICAgICAgc3VpdGVfYWRkX3RjYXNlIChzdWl0ZSwgdGNhc2VfY2xvbmUpOworCisgICAgICAgIFNSdW5uZXIqIHNydW5uZXIgPSBzcnVubmVyX2NyZWF0ZSAoc3VpdGUpOworICAgICAgICBzcnVubmVyX3J1bl9hbGwgKHNydW5uZXIsIENLX1ZFUkJPU0UpOworCisgICAgICAgIG51bWJlcl9mYWlsZWQgPSBzcnVubmVyX250ZXN0c19mYWlsZWQgKHNydW5uZXIpOworICAgICAgICBzcnVubmVyX2ZyZWUgKHNydW5uZXIpOworCisgICAgICAgIHJldHVybiAobnVtYmVyX2ZhaWxlZCA9PSAwKSA/IEVYSVRfU1VDQ0VTUyA6IEVYSVRfRkFJTFVSRTsKK30KZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvdGltZXIuYyBiL3BhcnRlZC0xLjguNy9saWJwYXJ0ZWQvdGltZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzE1MjczCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC90aW1lci5jCkBAIC0wLDAgKzEsMjQ2IEBACisvKgorICAgIGxpYnBhcnRlZCAtIGEgbGlicmFyeSBmb3IgbWFuaXB1bGF0aW5nIGRpc2sgcGFydGl0aW9ucworICAgIENvcHlyaWdodCAoQykgMjAwMSwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKKyovCisKKy8qKiBcZmlsZSB0aW1lci5jICovCisKKy8qKgorICogXGFkZHRvZ3JvdXAgUGVkVGltZXIKKyAqCisgKiBcYnJpZWYgQSBQZWRUaW1lciBrZWVwcyB0cmFjayBvZiB0aGUgcHJvZ3Jlc3Mgb2YgYSBzaW5nbGUgKHBvc3NpYmx5IAorICogY29tcG91bmQpIG9wZXJhdGlvbi4gIAorICoKKyAqIFRoZSB1c2VyIG9mIGxpYnBhcnRlZCBjb25zdHJ1Y3RzIGEgUGVkVGltZXIsIGFuZCBwYXNzZXMgaXQgdG8gbGlicGFydGVkIAorICogZnVuY3Rpb25zIHRoYXQgYXJlIGxpa2VseSB0byBiZSBleHBlbnNpdmUgb3BlcmF0aW9ucyAKKyAqIChsaWtlIHBlZF9maWxlX3N5c3RlbV9yZXNpemUpLiAgVXNlIG9mIHRpbWVycyBpcyBvcHRpb25hbC4uLiB5b3UgbWF5CisgKiBwYXNzIE5VTEwgaW5zdGVhZC4KKyAqIAorICogV2hlbiB5b3UgY3JlYXRlIGEgUGVkVGltZXIsIHlvdSBtdXN0IHNwZWNpZnkgYSB0aW1lciBoYW5kbGVyIGZ1bmN0aW9uLgorICogVGhpcyB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZXJlJ3MgYW4gdXBkYXRlIG9uIGhvdyB3b3JrIGlzIHByb2dyZXNzaW5nLgorICogCisgKiBUaW1lcnMgbWF5IGJlIG5lc3RlZC4gIFdoZW4gYSB0aW1lciBpcyBjb25zdHJ1Y3RlZCwgeW91IGNhbiBjaG9vc2UKKyAqIHRvIGFzc2lnbiBpdCBhIHBhcmVudCwgYWxvbmcgd2l0aCBhbiBlc3RpbWF0ZSBvZiB3aGF0IHByb3BvcnRpb24gb2YKKyAqIHRoZSB0b3RhbCAocGFyZW50J3MpIHRpbWUgd2lsbCBiZSB1c2VkIGluIHRoZSBuZXN0ZWQgb3BlcmF0aW9uLiAgSW4KKyAqIHRoaXMgY2FzZSwgdGhlIG5lc3RlZCB0aW1lcidzIGhhbmRsZXIgaXMgaW50ZXJuYWwgdG8gbGlicGFydGVkLAorICogYW5kIHNpbXBseSB1cGRhdGVzIHRoZSBwYXJlbnQncyBwcm9ncmVzcywgYW5kIGNhbGxzIGl0cyBoYW5kbGVyLgorICogCisgKiBAeworICovCisKKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPHBhcnRlZC9wYXJ0ZWQuaD4KKyNpbmNsdWRlIDxwYXJ0ZWQvZGVidWcuaD4KKworI2RlZmluZSBQRURfVElNRVJfU1RBUlRfREVMQVkJMgorCit0eXBlZGVmIHN0cnVjdCB7CisJUGVkVGltZXIqCXBhcmVudDsKKwlmbG9hdAkJbmVzdF9mcmFjOworCWZsb2F0CQlzdGFydF9mcmFjOworfSBOZXN0ZWRDb250ZXh0OworCisKKy8qKgorICogXGJyaWVmIENyZWF0ZXMgYSB0aW1lci4gIAorICoKKyAqIENvbnRleHQgd2lsbCBiZSBwYXNzZWQgaW4gdGhlIFxwIGNvbnRleHQKKyAqICAgICAgICAgYXJndW1lbnQgdG8gdGhlIFxwIGhhbmRsZXIsIHdoZW4gaXQgaXMgaW52b2tlZC4KKyAqCisgKiBccmV0dXJuIGEgbmV3IFBlZFRpbWVyCisgKi8KK1BlZFRpbWVyKgorcGVkX3RpbWVyX25ldyAoUGVkVGltZXJIYW5kbGVyKiBoYW5kbGVyLCB2b2lkKiBjb250ZXh0KQoreworCVBlZFRpbWVyKgl0aW1lcjsKKworCVBFRF9BU1NFUlQgKGhhbmRsZXIgIT0gTlVMTCwgcmV0dXJuIE5VTEwpOworCisJdGltZXIgPSAoUGVkVGltZXIqKSBwZWRfbWFsbG9jIChzaXplb2YgKFBlZFRpbWVyKSk7CisJaWYgKCF0aW1lcikKKwkJcmV0dXJuIE5VTEw7CisKKwl0aW1lci0+aGFuZGxlciA9IGhhbmRsZXI7CisJdGltZXItPmNvbnRleHQgPSBjb250ZXh0OworCXBlZF90aW1lcl9yZXNldCAodGltZXIpOworCXJldHVybiB0aW1lcjsKK30KKworCisvKioKKyAqIFxicmllZiBEZXN0cm95cyBhIFxwIHRpbWVyLgorICovCit2b2lkCitwZWRfdGltZXJfZGVzdHJveSAoUGVkVGltZXIqIHRpbWVyKQoreworCWlmICghdGltZXIpCisJCXJldHVybjsKKworCXBlZF9mcmVlICh0aW1lcik7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieSBwZWRfdGltZXJfbmV3X25lc3RlZCgpIGFzIHRoZSB0aW1lci0+aGFuZGxlcgorICogZnVuY3Rpb24uCisgKi8KK3N0YXRpYyB2b2lkCitfbmVzdF9oYW5kbGVyIChQZWRUaW1lciogdGltZXIsIHZvaWQqIGNvbnRleHQpCit7CisJTmVzdGVkQ29udGV4dCoJbmNvbnRleHQgPSAoTmVzdGVkQ29udGV4dCopIGNvbnRleHQ7CisKKwlwZWRfdGltZXJfdXBkYXRlICgKKwkJbmNvbnRleHQtPnBhcmVudCwKKwkJbmNvbnRleHQtPnN0YXJ0X2ZyYWMgKyBuY29udGV4dC0+bmVzdF9mcmFjICogdGltZXItPmZyYWMpOworfQorCisKKy8qKiAKKyAqIFxicmllZiBDcmVhdGVzIGEgbmV3IG5lc3RlZCB0aW1lci4gCisgKgorICogVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGEgIm5lc3RlZCIgdGltZXIgdGhhdCBkZXNjcmliZXMgdGhlIHByb2dyZXNzCisgKiBvZiBhIHN1YnRhc2suIFxwIHBhcmVudCBpcyB0aGUgcGFyZW50IHRpbWVyLCBhbmQgXHAgbmVzdGVkX2ZyYWMgaXMgCisgKiB0aGUgZXN0aW1hdGVkIHByb3BvcnRpb24gKGJldHdlZW4gMCBhbmQgMSkgb2YgdGhlIHRpbWUgdGhhdCB3aWxsIGJlIAorICogc3BlbnQgZG9pbmcgdGhlIG5lc3RlZCB0aW1lcidzIG9wZXJhdGlvbi4gVGhlIHRpbWVyIHNob3VsZCBvbmx5IGJlIAorICogY29uc3RydWN0ZWQgaW1tZWRpYXRlbHkgcHJpb3IgdG8gc3RhcnRpbmcgdGhlIG5lc3RlZCBvcGVyYXRpb24uICAKKyAqIChJdCB3aWxsIGJlIGluYWNjdXJhdGUsIG90aGVyd2lzZSkuCisgKiBVcGRhdGVzIHRvIHRoZSBwcm9ncmVzcyBvZiB0aGUgc3VidGFzayBhcmUgcHJvcGFnYXRlZAorICogYmFjayB0aHJvdWdoIHRvIHRoZSBwYXJlbnQgdGFzaydzIHRpbWVyLgorICoKKyAqIFxyZXR1cm4gbmVzdGVkIHRpbWVyCisgKi8KK1BlZFRpbWVyKgorcGVkX3RpbWVyX25ld19uZXN0ZWQgKFBlZFRpbWVyKiBwYXJlbnQsIGZsb2F0IG5lc3RfZnJhYykKK3sKKwlOZXN0ZWRDb250ZXh0Kgljb250ZXh0OworCisJaWYgKCFwYXJlbnQpCisJCXJldHVybiBOVUxMOworCisJUEVEX0FTU0VSVCAobmVzdF9mcmFjID49IDAuMCwgcmV0dXJuIE5VTEwpOworCVBFRF9BU1NFUlQgKG5lc3RfZnJhYyA8PSAxLjAsIHJldHVybiBOVUxMKTsKKworCWNvbnRleHQgPSAoTmVzdGVkQ29udGV4dCopIHBlZF9tYWxsb2MgKHNpemVvZiAoTmVzdGVkQ29udGV4dCkpOworCWlmICghY29udGV4dCkKKwkJcmV0dXJuIE5VTEw7CisJY29udGV4dC0+cGFyZW50ID0gcGFyZW50OworCWNvbnRleHQtPm5lc3RfZnJhYyA9IG5lc3RfZnJhYzsKKwljb250ZXh0LT5zdGFydF9mcmFjID0gcGFyZW50LT5mcmFjOworCisJcmV0dXJuIHBlZF90aW1lcl9uZXcgKF9uZXN0X2hhbmRsZXIsIGNvbnRleHQpOworfQorCisvKioKKyAqIFxicmllZiBEZXN0cm95cyBhIG5lc3RlZCBccCB0aW1lci4KKyAqLwordm9pZAorcGVkX3RpbWVyX2Rlc3Ryb3lfbmVzdGVkIChQZWRUaW1lciogdGltZXIpCit7CisJaWYgKCF0aW1lcikKKwkJcmV0dXJuOworCisJcGVkX2ZyZWUgKHRpbWVyLT5jb250ZXh0KTsKKwlwZWRfdGltZXJfZGVzdHJveSAodGltZXIpOworfQorCisvKioKKyAqIFxpbnRlcm5hbCAKKyAqCisgKiBcYnJpZWYgVGhpcyBmdW5jdGlvbiBjYWxscyB0aGUgdXBkYXRlIGhhbmRsZXIsIG1ha2luZyBzdXJlIHRoYXQgaXQgaGFzCisgKiAJdGhlIGxhdGVzdCB0aW1lLiAKKyAqCisgKiBGaXJzdCBpdCB1cGRhdGVzIFxwIHRpbWVyLT5ub3cgYW5kIHJlY29tcHV0ZXMgXHAgdGltZXItPnByZWRpY3RlZF9lbmQsIAorICogYW5kIHRoZW4gY2FsbHMgdGhlIGhhbmRsZXIuCisgKi8KK3ZvaWQKK3BlZF90aW1lcl90b3VjaCAoUGVkVGltZXIqIHRpbWVyKQoreworCWlmICghdGltZXIpCisJICAgICAgIHJldHVybjsKKworCXRpbWVyLT5ub3cgPSB0aW1lIChOVUxMKTsKKwlpZiAodGltZXItPm5vdyA+IHRpbWVyLT5wcmVkaWN0ZWRfZW5kKQorCQl0aW1lci0+cHJlZGljdGVkX2VuZCA9IHRpbWVyLT5ub3c7CisKKwl0aW1lci0+aGFuZGxlciAodGltZXIsIHRpbWVyLT5jb250ZXh0KTsKK30KKworLyoqIAorICogXGludGVybmFsCisgKiAKKyAqIFxicmllZiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIFxwIHRpbWVyIGludG8gYSAic3RhcnQgb2YgdGFzayIgcG9zaXRpb24uCisgKiAKKyAqIEl0IHJlc2V0cyB0aGUgXHAgdGltZXIsIGJ5IHNldHRpbmcgXHAgdGltZXItPnN0YXJ0IGFuZCBccCB0aW1lci0+bm93CisgKiB0byB0aGUgY3VycmVudCB0aW1lLgorICovCit2b2lkCitwZWRfdGltZXJfcmVzZXQgKFBlZFRpbWVyKiB0aW1lcikKK3sKKwlpZiAoIXRpbWVyKQorCSAgICAgICByZXR1cm47CisKKwl0aW1lci0+c3RhcnQgPSB0aW1lci0+bm93ID0gdGltZXItPnByZWRpY3RlZF9lbmQgPSB0aW1lIChOVUxMKTsKKwl0aW1lci0+c3RhdGVfbmFtZSA9IE5VTEw7CisJdGltZXItPmZyYWMgPSAwOworCisJcGVkX3RpbWVyX3RvdWNoICh0aW1lcik7Cit9CisKKy8qKiAKKyAqIFxpbnRlcm5hbAorICogCisgKiBcYnJpZWYgVGhpcyBmdW5jdGlvbiB0ZWxscyBhIFxwIHRpbWVyIHdoYXQgZnJhY3Rpb24gXHAgZnJhYyBvZiB0aGUgdGFzaworICogaGFzIGJlZW4gY29tcGxldGVkLgorICogCisgKiBTZXRzIHRoZSBuZXcgXHAgdGltZXItPmZyYWMsIGFuZCBjYWxscyBwZWRfdGltZXJfdG91Y2goKS4KKyAqLwordm9pZAorcGVkX3RpbWVyX3VwZGF0ZSAoUGVkVGltZXIqIHRpbWVyLCBmbG9hdCBmcmFjKQoreworCWlmICghdGltZXIpCisJICAgICAgIHJldHVybjsKKworCXRpbWVyLT5ub3cgPSB0aW1lIChOVUxMKTsKKwl0aW1lci0+ZnJhYyA9IGZyYWM7CisKKwlpZiAoZnJhYykKKwkJdGltZXItPnByZWRpY3RlZF9lbmQKKwkJCT0gdGltZXItPnN0YXJ0CisJCQkgICsgKGxvbmcpICgodGltZXItPm5vdyAtIHRpbWVyLT5zdGFydCkgLyBmcmFjKTsKKworCXBlZF90aW1lcl90b3VjaCAodGltZXIpOworfQorCisvKioKKyAqIFxpbnRlcm5hbCAKKyAqIAorICogXGJyaWVmIFRoaXMgZnVuY3Rpb24gY2hhbmdlcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGN1cnJlbnQgdGFzayB0aGF0IHRoZQorICogCVxwIHRpbWVyIGRlc2NyaWJlcy4KKyAqIAkKKyAqIFNldHMgYSBuZXcgbmFtZSAtIFxwIHN0YXRlX25hbWUgLSBmb3IgdGhlIGN1cnJlbnQgInBoYXNlIiBvZiB0aGUgb3BlcmF0aW9uLAorICogYW5kIGNhbGxzIHBlZF90aW1lcl90b3VjaCgpLgorICovCit2b2lkCitwZWRfdGltZXJfc2V0X3N0YXRlX25hbWUgKFBlZFRpbWVyKiB0aW1lciwgY29uc3QgY2hhciogc3RhdGVfbmFtZSkKK3sKKwlpZiAoIXRpbWVyKQorCSAgICAgICByZXR1cm47CisKKwl0aW1lci0+c3RhdGVfbmFtZSA9IHN0YXRlX25hbWU7CisJcGVkX3RpbWVyX3RvdWNoICh0aW1lcik7Cit9CisKKy8qKiBAfSAqLwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L2xpYnBhcnRlZC91bml0LmMgYi9wYXJ0ZWQtMS44LjcvbGlicGFydGVkL3VuaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODEwMjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L2xpYnBhcnRlZC91bml0LmMKQEAgLTAsMCArMSw1NjYgQEAKKy8qCisgICAgbGlicGFydGVkIC0gYSBsaWJyYXJ5IGZvciBtYW5pcHVsYXRpbmcgZGlzayBwYXJ0aXRpb25zCisgICAgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQorKi8KKworLyoqIFxmaWxlIHVuaXQuYyAqLworCisvKioKKyAqIFxhZGR0b2dyb3VwIFBlZFVuaXQKKyAqIAorICogXGJyaWVmIFRoZSBQZWRVbml0IG1vZHVsZSBwcm92aWRlcyBhIHN0YW5kYXJkIG1lY2hhbmlzbSBmb3IgZGVzY3JpYmluZworICogYW5kIHBhcnNpbmcgbG9jYXRpb25zIHdpdGhpbiBkZXZpY2VzIGluIGh1bWFuLWZyaWVuZGx5IHBsYWluIHRleHQuIAorICoKKyAqIEludGVybmFsbHksIGxpYnBhcnRlZCB1c2VzIFBlZFNlY3RvciAod2hpY2ggaXMgdHlwZWRlZidlZCB0byBiZSBsb25nIGxvbmcgCisgKiBpbiA8cGFydGVkL2RldmljZS5oPikgdG8gZGVzY3JpYmUgZGV2aWNlIGxvY2F0aW9ucyBzdWNoIGFzIHRoZSBzdGFydCBhbmQgCisgKiBlbmQgb2YgcGFydGl0aW9ucy4gIEhvd2V2ZXIsIHNlY3RvciBudW1iZXJzIGFyZSBvZnRlbiBsb25nIGFuZCB1bmludHVpdGl2ZS4gIAorICogRm9yIGV4YW1wbGUsIG15IGV4dGVuZGVkIHBhcnRpdGlvbiBzdGFydHMgYXQgc2VjdG9yIDIwODg0NS4gIFBlZFVuaXQgYWxsb3dzIAorICogdGhpcyBsb2NhdGlvbiB0byBiZSByZXByZXNlbnRlZCBpbiBtb3JlIGludHV0aXRpdmUgd2F5cywgaW5jbHVkaW5nICIxMDZNYiIsIAorICogIjBHYiIgYW5kICIwJSIsIGFzIHdlbGwgYXMgIjIwODg0NXMiLiAgUGVkVW5pdCBhaW1zIHRvIHByb3ZpZGUgZmFjaWxpdGllcyAKKyAqIHRvIHByb3ZpZGUgYSBjb25zaXN0ZW50IHN5c3RlbSBmb3IgZGVzY3JpYmluZyBkZXZpY2UgbG9jYXRpb25zIGFsbAorICogdGhyb3VnaG91dCBsaWJwYXJ0ZWQuCisgKiAKKyAqIFBlZFVuaXQgcHJvdmlkZXMgdHdvIGJhc2ljIHNlcnZpY2VzOiBjb252ZXJ0aW5nIGEgUGVkU2VjdG9yIGludG8gYSB0ZXh0CisgKiByZXByZXNlbnRhdGlvbiwgYW5kIHBhcnNpbmcgYSB0ZXh0IHJlcHJlc2VudGF0aW9uIGludG8gYSBQZWRTZWN0b3IuCisgKiBQZWRVbml0IGN1cnJlbnRseSBzdXBwb3J0cyB0aGVzZSB1bml0czoKKyAqIAorICogCXNlY3RvcnMsIGJ5dGVzLCBraWxvYnl0ZXMsIG1lZ2FieXRlcywgZ2lnYWJ5dGVzLCB0ZXJhYnl0ZXMsIGNvbXBhY3QsCisgKiAJY3lsaW5kZXIgYW5kIHBlcmNlbnQuCisgKiAJCisgKiBQZWRVbml0IGhhcyBhIGdsb2JhbCB2YXJpYWJsZSB0aGF0IGNvbnRhaW5zIHRoZSBkZWZhdWx0IHVuaXQgZm9yIGFsbAorICogY29udmVyc2lvbnMuCisgKgorICogQHsKKyAqLworCisKKworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8cGFydGVkL3BhcnRlZC5oPgorI2luY2x1ZGUgPHBhcnRlZC9kZWJ1Zy5oPgorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGZsb2F0Lmg+CisKKyNkZWZpbmUgTl8oU3RyaW5nKSBTdHJpbmcKKyNpZiBFTkFCTEVfTkxTCisjICBpbmNsdWRlIDxsaWJpbnRsLmg+CisjICBkZWZpbmUgXyhTdHJpbmcpIGRnZXR0ZXh0IChQQUNLQUdFLCBTdHJpbmcpCisjZWxzZQorIyAgZGVmaW5lIF8oU3RyaW5nKSAoU3RyaW5nKQorI2VuZGlmIC8qIEVOQUJMRV9OTFMgKi8KKworCitzdGF0aWMgUGVkVW5pdCBkZWZhdWx0X3VuaXQgPSBQRURfVU5JVF9DT01QQUNUOworc3RhdGljIGNvbnN0IGNoYXIqIHVuaXRfbmFtZXNbXSA9IHsKKwkicyIsCisJIkIiLAorCSJrQiIsCisJIk1CIiwKKwkiR0IiLAorCSJUQiIsCisJImNvbXBhY3QiLAorCSJjeWwiLAorCSJjaHMiLAorCSIlIiwKKwkia2lCIiwKKwkiTWlCIiwKKwkiR2lCIiwKKwkiVGlCIgorfTsKKworCisvKioKKyAqIFxicmllZiBTZXQgdGhlIGRlZmF1bHQgXHAgdW5pdCB1c2VkIGJ5IHN1YnNlcXVlbnQgY2FsbHMgdG8gdGhlIFBlZFVuaXQgQVBJLgorICoKKyAqIEluIHBhcnRpY3VsYXIsIHRoaXMgYWZmZWN0cyBob3cgbG9jYXRpb25zIGluc2lkZSBlcnJvciBtZXNzYWdlcworICogKGV4Y2VwdGlvbnMpIGFyZSBkaXNwbGF5ZWQuCisgKi8KK3ZvaWQKK3BlZF91bml0X3NldF9kZWZhdWx0IChQZWRVbml0IHVuaXQpCit7CisJZGVmYXVsdF91bml0ID0gdW5pdDsKK30KKworCisvKioKKyAqIFxicmllZiBHZXQgdGhlIGN1cnJlbnQgZGVmYXVsdCB1bml0LgorICovCitQZWRVbml0CitwZWRfdW5pdF9nZXRfZGVmYXVsdCAoKQoreworCXJldHVybiBkZWZhdWx0X3VuaXQ7Cit9CisKKy8qKgorICogR2V0IHRoZSBieXRlIHNpemUgb2YgYSBnaXZlbiBccCB1bml0LgorICovCitsb25nIGxvbmcKK3BlZF91bml0X2dldF9zaXplIChjb25zdCBQZWREZXZpY2UqIGRldiwgUGVkVW5pdCB1bml0KQoreworCVBlZFNlY3RvciBjeWxfc2l6ZSA9IGRldi0+Ymlvc19nZW9tLmhlYWRzICogZGV2LT5iaW9zX2dlb20uc2VjdG9yczsKKworCXN3aXRjaCAodW5pdCkgeworCQljYXNlIFBFRF9VTklUX1NFQ1RPUjoJcmV0dXJuIGRldi0+c2VjdG9yX3NpemU7CisJCWNhc2UgUEVEX1VOSVRfQllURToJcmV0dXJuIDE7CisJCWNhc2UgUEVEX1VOSVRfS0lMT0JZVEU6CXJldHVybiBQRURfS0lMT0JZVEVfU0laRTsKKwkJY2FzZSBQRURfVU5JVF9NRUdBQllURToJcmV0dXJuIFBFRF9NRUdBQllURV9TSVpFOworCQljYXNlIFBFRF9VTklUX0dJR0FCWVRFOglyZXR1cm4gUEVEX0dJR0FCWVRFX1NJWkU7CisJCWNhc2UgUEVEX1VOSVRfVEVSQUJZVEU6CXJldHVybiBQRURfVEVSQUJZVEVfU0laRTsKKwkJY2FzZSBQRURfVU5JVF9LSUJJQllURToJcmV0dXJuIFBFRF9LSUJJQllURV9TSVpFOworCQljYXNlIFBFRF9VTklUX01FQklCWVRFOglyZXR1cm4gUEVEX01FQklCWVRFX1NJWkU7CisJCWNhc2UgUEVEX1VOSVRfR0lCSUJZVEU6CXJldHVybiBQRURfR0lCSUJZVEVfU0laRTsKKwkJY2FzZSBQRURfVU5JVF9URUJJQllURToJcmV0dXJuIFBFRF9URUJJQllURV9TSVpFOworCQljYXNlIFBFRF9VTklUX0NZTElOREVSOglyZXR1cm4gY3lsX3NpemUgKiBkZXYtPnNlY3Rvcl9zaXplOworCQljYXNlIFBFRF9VTklUX0NIUzoJcmV0dXJuIGRldi0+c2VjdG9yX3NpemU7CisKKwkJY2FzZSBQRURfVU5JVF9QRVJDRU5UOgorCQkJcmV0dXJuIGRldi0+bGVuZ3RoICogZGV2LT5zZWN0b3Jfc2l6ZSAvIDEwMDsKKworCQljYXNlIFBFRF9VTklUX0NPTVBBQ1Q6CisJCQlwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCQlQRURfRVhDRVBUSU9OX0VSUk9SLCBQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCQlfKCJDYW5ub3QgZ2V0IHVuaXQgc2l6ZSBmb3Igc3BlY2lhbCB1bml0ICIKKwkJCQkgICInQ09NUEFDVCcuIikpOworCQkJcmV0dXJuIDA7CisJfQorCisJLyogbmV2ZXIgcmVhY2hlZCAqLworCVBFRF9BU1NFUlQoMCwgcmV0dXJuIDApOworCXJldHVybiAwOworfQorCisvKioKKyAqIEdldCBhIHRleHR1YWwgKG5vbi1pbnRlcm5hdGlvbmFsaXplZCkgcmVwcmVzZW50YXRpb24gb2YgYSBccCB1bml0LgorICogCisgKiBGb3IgZXhhbXBsZSwgdGhlIHRleHR1YWwgcmVwcmVzZW50YXRpb24gb2YgUEVEX1VOSVRfU0VDVE9SIGlzICJzIi4KKyAqLworY29uc3QgY2hhcioKK3BlZF91bml0X2dldF9uYW1lIChQZWRVbml0IHVuaXQpCit7CisJcmV0dXJuIHVuaXRfbmFtZXNbdW5pdF07Cit9CisKKy8qKgorICogR2V0IGEgdW5pdCBiYXNlZCBvbiBpdHMgdGV4dHVhbCByZXByZXNlbnRhdGlvbjogXHAgdW5pdF9uYW1lLgorICoKKyAqIEZvciBleGFtcGxlLCBwZWRfdW5pdF9nZXRfYnlfbmFtZSgiTWIiKSByZXR1cm5zIFBFRF9VTklUX01FR0FCWVRFLgorICovCitQZWRVbml0CitwZWRfdW5pdF9nZXRfYnlfbmFtZSAoY29uc3QgY2hhciogdW5pdF9uYW1lKQoreworCVBlZFVuaXQgdW5pdDsKKwlmb3IgKHVuaXQgPSBQRURfVU5JVF9GSVJTVDsgdW5pdCA8PSBQRURfVU5JVF9MQVNUOyB1bml0KyspIHsKKwkJaWYgKCFzdHJjYXNlY21wICh1bml0X25hbWVzW3VuaXRdLCB1bml0X25hbWUpKQorCQkJcmV0dXJuIHVuaXQ7CisJfQorCXJldHVybiAtMTsKK30KKworc3RhdGljIGNoYXIqCitwZWRfc3RyZHVwIChjb25zdCBjaGFyICpzdHIpCit7CisJY2hhciAqcmVzdWx0OworCXJlc3VsdCA9IHBlZF9tYWxsb2MgKHN0cmxlbiAoc3RyKSArIDEpOworCWlmICghcmVzdWx0KQorCQlyZXR1cm4gTlVMTDsKKwlzdHJjcHkgKHJlc3VsdCwgc3RyKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKioKKyAqIFxicmllZiBHZXQgYSBzdHJpbmcgdGhhdCBkZXNjcmliZXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBccCBieXRlIG9uCisgKiBkZXZpY2UgXHAgZGV2LgorICogCisgKiBUaGUgc3RyaW5nIGlzIGRlc2NyaWJlZCB3aXRoIHRoZSBkZXNpcmVkIFxwIHVuaXQuCisgKiBUaGUgcmV0dXJuZWQgc3RyaW5nIG11c3QgYmUgZnJlZWQgd2l0aCBwZWRfZnJlZSgpLgorICovCitjaGFyKgorcGVkX3VuaXRfZm9ybWF0X2N1c3RvbV9ieXRlIChjb25zdCBQZWREZXZpY2UqIGRldiwgUGVkU2VjdG9yIGJ5dGUsIFBlZFVuaXQgdW5pdCkKK3sKKwljaGFyIGJ1ZlsxMDBdOworCVBlZFNlY3RvciBzZWN0b3IgPSBieXRlIC8gZGV2LT5zZWN0b3Jfc2l6ZTsKKwlkb3VibGUgZCwgdzsKKwlpbnQgcDsKKworCVBFRF9BU1NFUlQgKGRldiAhPSBOVUxMLCByZXR1cm4gTlVMTCk7CisJCisJLyogQ0hTIGhhcyBhIHNwZWNpYWwgY29tbWEtc2VwYXJhdGVkIGZvcm1hdC4gKi8KKwlpZiAodW5pdCA9PSBQRURfVU5JVF9DSFMpIHsKKwkJY29uc3QgUGVkQ0hTR2VvbWV0cnkgKmNocyA9ICZkZXYtPmJpb3NfZ2VvbTsKKwkJc25wcmludGYgKGJ1ZiwgMTAwLCAiJWxsZCwlbGxkLCVsbGQiLAorCQkJICBzZWN0b3IgLyBjaHMtPnNlY3RvcnMgLyBjaHMtPmhlYWRzLAorCQkJICAoc2VjdG9yIC8gY2hzLT5zZWN0b3JzKSAlIGNocy0+aGVhZHMsCisJCQkgIHNlY3RvciAlIGNocy0+c2VjdG9ycyk7CisJCXJldHVybiBwZWRfc3RyZHVwIChidWYpOworCX0KKworCS8qIEN5bGluZGVycywgc2VjdG9ycyBhbmQgYnl0ZXMgc2hvdWxkIGJlIHJvdW5kZWQgZG93bi4uLiAqLworCWlmICh1bml0ID09IFBFRF9VTklUX0NZTElOREVSCisJICAgIHx8IHVuaXQgPT0gUEVEX1VOSVRfU0VDVE9SCisJICAgIHx8IHVuaXQgPT0gUEVEX1VOSVRfQllURSkgeworCQlzbnByaW50ZiAoYnVmLCAxMDAsICIlbGxkJXMiLAorCQkJICBieXRlIC8gcGVkX3VuaXRfZ2V0X3NpemUgKGRldiwgdW5pdCksCisJCQkgIHBlZF91bml0X2dldF9uYW1lICh1bml0KSk7CisJCXJldHVybiBwZWRfc3RyZHVwIChidWYpOworCX0KKwkKKyAgICAgICAgaWYgKHVuaXQgPT0gUEVEX1VOSVRfQ09NUEFDVCkgeworICAgICAgICAgICAgICAgIGlmIChieXRlID49IDEwTEwgKiBQRURfVEVSQUJZVEVfU0laRSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuaXQgPSBQRURfVU5JVF9URVJBQllURTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChieXRlID49IDEwTEwgKiBQRURfR0lHQUJZVEVfU0laRSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuaXQgPSBQRURfVU5JVF9HSUdBQllURTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChieXRlID49IDEwTEwgKiBQRURfTUVHQUJZVEVfU0laRSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuaXQgPSBQRURfVU5JVF9NRUdBQllURTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChieXRlID49IDEwTEwgKiBQRURfS0lMT0JZVEVfU0laRSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuaXQgPSBQRURfVU5JVF9LSUxPQllURTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB1bml0ID0gUEVEX1VOSVRfQllURTsKKwl9CisKKwkvKiBJRUVFNzU0IHNheXMgdGhhdCAxMDAuNSBoYXMgdG8gYmUgcm91bmRlZCB0byAxMDAgKGJ5IHByaW50ZikgKi8KKwkvKiBidXQgMTAxLjUgaGFzIHRvIGJlIHJvdW5kZWQgdG8gMTAyLi4uIHNvIHdlIG11bHRpcGx5IGJ5IDErRS4gKi8KKwkvKiBUaGlzIGp1c3QgZGl2aWRlIGJ5IDIgdGhlIG5hdHVyYWwgSUVFRTc1NCBleHRlbmRlZCBwcmVjaXNpb24gKi8KKwkvKiBhbmQgd29uJ3QgY2F1c2UgYW55IHRyb3VibGUgYmVmb3JlIDEwMDAgVEIgKi8KKwlkID0gKChkb3VibGUpYnl0ZSAvIChkb3VibGUpcGVkX3VuaXRfZ2V0X3NpemUgKGRldiwgdW5pdCkpCisJICAgICogKDEuICsgREJMX0VQU0lMT04pOworCXcgPSBkICsgKCAoZCA8IDEwLiApID8gMC4wMDUgOgorCQkgIChkIDwgMTAwLikgPyAwLjA1ICA6CisJCQkgICAgICAgMC41ICApOworCXAgPSAodyA8IDEwLiApID8gMiA6CisJICAgICh3IDwgMTAwLikgPyAxIDoKKwkJCSAwIDsKKworI2lmZGVmIF9fQkVPU19fCisJc25wcmludGYgKGJ1ZiwgMTAwLCAiJS4qZiVzIiwgcCwgZCwgcGVkX3VuaXRfZ2V0X25hbWUodW5pdCkpOworI2Vsc2UKKwlzbnByaW50ZiAoYnVmLCAxMDAsICIlMSQuKjIkZiUzJHMiLCBkLCBwLCBwZWRfdW5pdF9nZXRfbmFtZSAodW5pdCkpOworI2VuZGlmCisKKwlyZXR1cm4gcGVkX3N0cmR1cCAoYnVmKTsKK30KKworLyoqCisgKiBcYnJpZWYgR2V0IGEgc3RyaW5nIHRoYXQgZGVzY3JpYmVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgXHAgYnl0ZSBvbgorICogZGV2aWNlIFxwIGRldi4KKyAqIAorICogVGhlIHN0cmluZyBpcyBkZXNjcmliZWQgd2l0aCB0aGUgZGVmYXVsdCB1bml0LCB3aGljaCBpcyBzZXQKKyAqIGJ5IHBlZF91bml0X3NldF9kZWZhdWx0KCkuCisgKiBUaGUgcmV0dXJuZWQgc3RyaW5nIG11c3QgYmUgZnJlZWQgd2l0aCBwZWRfZnJlZSgpLgorICovCitjaGFyKgorcGVkX3VuaXRfZm9ybWF0X2J5dGUgKGNvbnN0IFBlZERldmljZSogZGV2LCBQZWRTZWN0b3IgYnl0ZSkKK3sKKwlQRURfQVNTRVJUIChkZXYgIT0gTlVMTCwgcmV0dXJuIE5VTEwpOworCXJldHVybiBwZWRfdW5pdF9mb3JtYXRfY3VzdG9tX2J5dGUgKGRldiwgYnl0ZSwgZGVmYXVsdF91bml0KTsKK30KKworLyoqCisgKiBcYnJpZWYgR2V0IGEgc3RyaW5nIHRoYXQgZGVzY3JpYmVzIHRoZSBsb2NhdGlvbiBccCBzZWN0b3Igb24gZGV2aWNlIFxwIGRldi4KKyAqIAorICogVGhlIHN0cmluZyBpcyBkZXNjcmliZWQgd2l0aCB0aGUgZGVzaXJlZCBccCB1bml0LgorICogVGhlIHJldHVybmVkIHN0cmluZyBtdXN0IGJlIGZyZWVkIHdpdGggcGVkX2ZyZWUoKS4KKyAqLworY2hhcioKK3BlZF91bml0X2Zvcm1hdF9jdXN0b20gKGNvbnN0IFBlZERldmljZSogZGV2LCBQZWRTZWN0b3Igc2VjdG9yLCBQZWRVbml0IHVuaXQpCit7CisJUEVEX0FTU0VSVCAoZGV2ICE9IE5VTEwsIHJldHVybiBOVUxMKTsKKwlyZXR1cm4gcGVkX3VuaXRfZm9ybWF0X2N1c3RvbV9ieXRlKGRldiwgc2VjdG9yKmRldi0+c2VjdG9yX3NpemUsIHVuaXQpOworfQorCisvKioKKyAqIFxicmllZiBHZXQgYSBzdHJpbmcgdGhhdCBkZXNjcmliZXMgdGhlIGxvY2F0aW9uIFxwIHNlY3RvciBvbiBkZXZpY2UgXHAgZGV2LgorICogCisgKiBUaGUgc3RyaW5nIGlzIGRlc2NyaWJlZCB3aXRoIHRoZSBkZWZhdWx0IHVuaXQsIHdoaWNoIGlzIHNldAorICogYnkgcGVkX3VuaXRfc2V0X2RlZmF1bHQoKS4KKyAqIFRoZSByZXR1cm5lZCBzdHJpbmcgbXVzdCBiZSBmcmVlZCB3aXRoIHBlZF9mcmVlKCkuCisgKi8KK2NoYXIqCitwZWRfdW5pdF9mb3JtYXQgKGNvbnN0IFBlZERldmljZSogZGV2LCBQZWRTZWN0b3Igc2VjdG9yKQoreworCVBFRF9BU1NFUlQgKGRldiAhPSBOVUxMLCByZXR1cm4gTlVMTCk7CisJcmV0dXJuIHBlZF91bml0X2Zvcm1hdF9jdXN0b21fYnl0ZSAoZGV2LCBzZWN0b3IgKiBkZXYtPnNlY3Rvcl9zaXplLAorCQkJCQkgICAgZGVmYXVsdF91bml0KTsKK30KKworLyoqCisgKiBJZiBccCBzdHIgY29udGFpbnMgYSB2YWxpZCBkZXNjcmlwdGlvbiBvZiBhIGxvY2F0aW9uIG9uIFxwIGRldiwgCisgKiB0aGVuIFxwICpzZWN0b3IgaXMgbW9kaWZpZWQgdG8gZGVzY3JpYmUgdGhlIGxvY2F0aW9uIGFuZCBhIGdlb21ldHJ5IAorICogaXMgY3JlYXRlZCBpbiBccCAqcmFuZ2UgZGVzY3JpYmluZyBhIDIgdW5pdHMgbGFyZ2UgYXJlYSBjZW50ZXJlZCBvbiAKKyAqIFxwICpzZWN0b3IuICBJZiB0aGUgXHAgcmFuZ2UgYXMgZGVzY3JpYmVkIGhlcmUgd291bGQgYmUgcGFydGlhbGx5IG91dHNpZGUgCisgKiB0aGUgZGV2aWNlIFxwIGRldiwgdGhlIGdlb21ldHJ5IHJldHVybmVkIGlzIHRoZSBpbnRlcnNlY3Rpb24gYmV0d2VlbiB0aGUgCisgKiBmb3JtZXIgYW5kIHRoZSB3aG9sZQlkZXZpY2UgZ2VvbWV0cnkuICBJZiBubyB1bml0cyBhcmUgc3BlY2lmaWVkLCB0aGVuIHRoZSAKKyAqIGRlZmF1bHQgdW5pdCBpcyBhc3N1bWVkLiAgCisgKgorICogXHJldHVybiBcYyAxIGlmIFxwIHN0ciBpcyBhIHZhbGlkIGxvY2F0aW9uIGRlc2NyaXB0aW9uLCBcYyAwIG90aGVyd2lzZQorICovCitpbnQKK3BlZF91bml0X3BhcnNlIChjb25zdCBjaGFyKiBzdHIsIGNvbnN0IFBlZERldmljZSogZGV2LCBQZWRTZWN0b3IgKnNlY3RvciwKKwkJUGVkR2VvbWV0cnkqKiByYW5nZSkKK3sKKwlyZXR1cm4gcGVkX3VuaXRfcGFyc2VfY3VzdG9tIChzdHIsIGRldiwgZGVmYXVsdF91bml0LCBzZWN0b3IsIHJhbmdlKTsKK30KKworLyogSW5lZmZpY2llbnRseSByZW1vdmVzIGFsbCBzcGFjZXMgZnJvbSBhIHN0cmluZywgaW4tcGxhY2UuICovCitzdGF0aWMgdm9pZAorc3RyaXBfc3RyaW5nIChjaGFyKiBzdHIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBzdHJbaV0gIT0gMDsgaSsrKSB7CisJCWlmIChpc3NwYWNlIChzdHJbaV0pKSB7CisJCQlpbnQgajsKKwkJCWZvciAoaiA9IGkgKyAxOyBzdHJbal0gIT0gMDsgaisrKQorCQkJCXN0cltqIC0gMV0gPSBzdHJbal07CisJCX0KKwl9Cit9CisKKworLyogRmluZCBub24tbnVtYmVyIHN1ZmZpeC4gIEVnOiBmaW5kX3N1ZmZpeCgiMzJNYiIpIHJldHVybnMgYSBwb2ludGVyIHRvCisgKiAiTWIiLiAqLworc3RhdGljIGNoYXIqCitmaW5kX3N1ZmZpeCAoY29uc3QgY2hhciogc3RyKQoreworCXdoaWxlIChzdHJbMF0gIT0gMCAmJiAoaXNkaWdpdCAoc3RyWzBdKSB8fCBzdHJjaHIoIiwuLSIsIHN0clswXSkpKQorCQlzdHIrKzsKKwlyZXR1cm4gKGNoYXIgKikgc3RyOworfQorCitzdGF0aWMgdm9pZAorcmVtb3ZlX3B1bmN0IChjaGFyKiBzdHIpCit7CisJaW50IGkgPSAwOworCisJZm9yIChpID0gMDsgc3RyW2ldOyBpKyspIHsKKwkJaWYgKGlzcHVuY3QgKHN0cltpXSkpCisJCQlzdHJbaV0gPSAnICc7CisJfQorfQorCitzdGF0aWMgaW50Citpc19jaHMgKGNvbnN0IGNoYXIqIHN0cikKK3sKKwlpbnQgcHVuY3RfY291bnQgPSAwOworCWludCBpID0gMDsKKworCWZvciAoaSA9IDA7IHN0cltpXTsgaSsrKQorCQlwdW5jdF9jb3VudCArPSBpc3B1bmN0IChzdHJbaV0pICE9IDA7CisJcmV0dXJuIHB1bmN0X2NvdW50ID09IDI7Cit9CisKK3N0YXRpYyBpbnQKK3BhcnNlX2NocyAoY29uc3QgY2hhciogc3RyLCBjb25zdCBQZWREZXZpY2UqIGRldiwgUGVkU2VjdG9yKiBzZWN0b3IsCisJCVBlZEdlb21ldHJ5KiogcmFuZ2UpCit7CisJUGVkU2VjdG9yIGN5bF9zaXplID0gZGV2LT5iaW9zX2dlb20uaGVhZHMgKiBkZXYtPmJpb3NfZ2VvbS5zZWN0b3JzOworCWNoYXIqIGNvcHkgPSBwZWRfc3RyZHVwIChzdHIpOworCVBlZENIU0dlb21ldHJ5IGNoczsKKworCWNvcHkgPSBwZWRfc3RyZHVwIChzdHIpOworCWlmICghY29weSkKKwkJcmV0dXJuIDA7CisJc3RyaXBfc3RyaW5nIChjb3B5KTsKKwlyZW1vdmVfcHVuY3QgKGNvcHkpOworCisJaWYgKHNzY2FuZiAoY29weSwgIiVkICVkICVkIiwKKwkJICAgICZjaHMuY3lsaW5kZXJzLCAmY2hzLmhlYWRzLCAmY2hzLnNlY3RvcnMpICE9IDMpIHsKKwkJcGVkX2V4Y2VwdGlvbl90aHJvdyAoCisJCQkJUEVEX0VYQ0VQVElPTl9FUlJPUiwgUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisJCQkJXygiXCIlc1wiIGhhcyBpbnZhbGlkIHN5bnRheCBmb3IgbG9jYXRpb25zLiIpLAorCQkJCWNvcHkpOworCQlnb3RvIGVycm9yX2ZyZWVfY29weTsKKwl9CisKKwlpZiAoY2hzLmhlYWRzID49IGRldi0+Ymlvc19nZW9tLmhlYWRzKSB7CisJCXBlZF9leGNlcHRpb25fdGhyb3cgKAorCQkJCVBFRF9FWENFUFRJT05fRVJST1IsIFBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJCV8oIlRoZSBtYXhpbXVtIGhlYWQgdmFsdWUgaXMgJWQuIiksCisJCQkJZGV2LT5iaW9zX2dlb20uaGVhZHMgLSAxKTsKKwkJZ290byBlcnJvcl9mcmVlX2NvcHk7CisJfQorCWlmIChjaHMuc2VjdG9ycyA+PSBkZXYtPmJpb3NfZ2VvbS5zZWN0b3JzKSB7CisJCXBlZF9leGNlcHRpb25fdGhyb3cgKAorCQkJCVBFRF9FWENFUFRJT05fRVJST1IsIFBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJCV8oIlRoZSBtYXhpbXVtIHNlY3RvciB2YWx1ZSBpcyAlZC4iKSwKKwkJCQlkZXYtPmJpb3NfZ2VvbS5zZWN0b3JzIC0gMSk7CisJCWdvdG8gZXJyb3JfZnJlZV9jb3B5OworCX0KKworCSpzZWN0b3IgPSAxTEwgKiBjaHMuY3lsaW5kZXJzICogY3lsX3NpemUKKwkJKyBjaHMuaGVhZHMgKiBkZXYtPmJpb3NfZ2VvbS5zZWN0b3JzCisJCSsgY2hzLnNlY3RvcnM7CisKKwlpZiAoKnNlY3RvciA+PSBkZXYtPmxlbmd0aCkgeworCQlwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCQlQRURfRVhDRVBUSU9OX0VSUk9SLCBQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCQlfKCJUaGUgbG9jYXRpb24gJXMgaXMgb3V0c2lkZSBvZiB0aGUgIgorCQkJCSAgImRldmljZSAlcy4iKSwKKwkJCQlzdHIsIGRldi0+cGF0aCk7CisJCWdvdG8gZXJyb3JfZnJlZV9jb3B5OworCX0KKwlpZiAocmFuZ2UpCisJCSpyYW5nZSA9IHBlZF9nZW9tZXRyeV9uZXcgKGRldiwgKnNlY3RvciwgMSk7CisJcGVkX2ZyZWUgKGNvcHkpOworCXJldHVybiAhcmFuZ2UgfHwgKnJhbmdlICE9IE5VTEw7CisKK2Vycm9yX2ZyZWVfY29weToKKwlwZWRfZnJlZSAoY29weSk7CisJKnNlY3RvciA9IDA7CisJaWYgKHJhbmdlKQorCQkqcmFuZ2UgPSBOVUxMOworCXJldHVybiAwOworfQorCitzdGF0aWMgUGVkU2VjdG9yCitjbGlwIChjb25zdCBQZWREZXZpY2UqIGRldiwgUGVkU2VjdG9yIHNlY3RvcikKK3sKKwlpZiAoc2VjdG9yIDwgMCkKKwkJcmV0dXJuIDA7CisJaWYgKHNlY3RvciA+IGRldi0+bGVuZ3RoIC0gMSkKKwkJcmV0dXJuIGRldi0+bGVuZ3RoIC0gMTsKKwlyZXR1cm4gc2VjdG9yOworfQorCitzdGF0aWMgUGVkR2VvbWV0cnkqCitnZW9tZXRyeV9mcm9tX2NlbnRyZV9yYWRpdXMgKGNvbnN0IFBlZERldmljZSogZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQZWRTZWN0b3Igc2VjdG9yLCBQZWRTZWN0b3IgcmFkaXVzKQoreworCVBlZFNlY3RvciBzdGFydCA9IGNsaXAgKGRldiwgc2VjdG9yIC0gcmFkaXVzKTsKKwlQZWRTZWN0b3IgZW5kID0gY2xpcCAoZGV2LCBzZWN0b3IgKyByYWRpdXMpOworCWlmIChzZWN0b3IgLSBlbmQgPiByYWRpdXMgfHwgc3RhcnQgLSBzZWN0b3IgPiByYWRpdXMpCisJCXJldHVybiBOVUxMOworCXJldHVybiBwZWRfZ2VvbWV0cnlfbmV3IChkZXYsIHN0YXJ0LCBlbmQgLSBzdGFydCArIDEpOworfQorCitzdGF0aWMgUGVkVW5pdAorcGFyc2VfdW5pdF9zdWZmaXggKGNvbnN0IGNoYXIqIHN1ZmZpeCwgUGVkVW5pdCBzdWdnZXN0ZWRfdW5pdCkKK3sKKwlpZiAoc3RybGVuIChzdWZmaXgpID4gMSAmJiB0b2xvd2VyIChzdWZmaXhbMV0pID09ICdpJykgeworCQlzd2l0Y2ggKHRvbG93ZXIgKHN1ZmZpeFswXSkpIHsKKwkJCWNhc2UgJ2snOiByZXR1cm4gUEVEX1VOSVRfS0lCSUJZVEU7CisJCQljYXNlICdtJzogcmV0dXJuIFBFRF9VTklUX01FQklCWVRFOworCQkJY2FzZSAnZyc6IHJldHVybiBQRURfVU5JVF9HSUJJQllURTsKKwkJCWNhc2UgJ3QnOiByZXR1cm4gUEVEX1VOSVRfVEVCSUJZVEU7CisJCX0KKwl9IGVsc2UgaWYgKHN0cmxlbiAoc3VmZml4KSA+IDApIHsKKwkJc3dpdGNoICh0b2xvd2VyIChzdWZmaXhbMF0pKSB7CisJCQljYXNlICdzJzogcmV0dXJuIFBFRF9VTklUX1NFQ1RPUjsKKwkJCWNhc2UgJ2InOiByZXR1cm4gUEVEX1VOSVRfQllURTsKKwkJCWNhc2UgJ2snOiByZXR1cm4gUEVEX1VOSVRfS0lMT0JZVEU7CisJCQljYXNlICdtJzogcmV0dXJuIFBFRF9VTklUX01FR0FCWVRFOworCQkJY2FzZSAnZyc6IHJldHVybiBQRURfVU5JVF9HSUdBQllURTsgCisJCQljYXNlICd0JzogcmV0dXJuIFBFRF9VTklUX1RFUkFCWVRFOworCQkJY2FzZSAnYyc6IHJldHVybiBQRURfVU5JVF9DWUxJTkRFUjsgCisJCQljYXNlICclJzogcmV0dXJuIFBFRF9VTklUX1BFUkNFTlQ7CisJCX0KKwl9CisKKwlpZiAoc3VnZ2VzdGVkX3VuaXQgPT0gUEVEX1VOSVRfQ09NUEFDVCkgeworCQlpZiAoZGVmYXVsdF91bml0ID09IFBFRF9VTklUX0NPTVBBQ1QpCisJCQlyZXR1cm4gUEVEX1VOSVRfTUVHQUJZVEU7CisJCWVsc2UKKwkJCXJldHVybiBkZWZhdWx0X3VuaXQ7CisJfQorCisJcmV0dXJuIHN1Z2dlc3RlZF91bml0OworfQorCisvKioKKyAqIElmIFxwIHN0ciBjb250YWlucyBhIHZhbGlkIGRlc2NyaXB0aW9uIG9mIGEgbG9jYXRpb24gb24gXHAgZGV2LCB0aGVuIAorICogXHAgKnNlY3RvciBpcyBtb2RpZmllZCB0byBkZXNjcmliZSB0aGUgbG9jYXRpb24gYW5kIGEgZ2VvbWV0cnkgaXMgY3JlYXRlZAorICogaW4gXHAgKnJhbmdlIGRlc2NyaWJpbmcgYSAyIHVuaXRzIGxhcmdlIGFyZWEgY2VudGVyZWQgb24gXHAgKnNlY3Rvci4gIElmIHRoZQorICogXHAgcmFuZ2UgYXMgZGVzY3JpYmVkIGhlcmUgd291bGQgYmUgcGFydGlhbGx5IG91dHNpZGUgdGhlIGRldmljZSBccCBkZXYsIHRoZQorICogZ2VvbWV0cnkgcmV0dXJuZWQgaXMgdGhlIGludGVyc2VjdGlvbiBiZXR3ZWVuIHRoZSBmb3JtZXIgYW5kIHRoZSB3aG9sZQorICogZGV2aWNlIGdlb21ldHJ5LiAgSWYgbm8gdW5pdHMgYXJlIHNwZWNpZmllZCwgdGhlbiB0aGUgZGVmYXVsdCB1bml0IGlzCisgKiBhc3N1bWVkLiAKKyAqCisgKiBcdGhyb3dzIFBFRF9FWENFUFRJT05fRVJST1IgaWYgXHAgc3RyIGNvbnRhaW5zIGludmFsaWQgZGVzY3JpcHRpb24gb2YgYQorICogbG9jYXRpb24KKyAqIFx0aHJvd3MgUEVEX0VYQ0VQVElPTl9FUlJPUiBpZiBsb2NhdGlvbiBkZXNjcmliZWQgYnkgXHAgc3RyIAorICogaXMgb3V0c2lkZSBvZiB0aGUgZGV2aWNlIFxwIGRldi0+cGF0aAorICoKKyAqIFxyZXR1cm4gXGMgMSBpZiBccCBzdHIgaXMgYSB2YWxpZCBsb2NhdGlvbiBkZXNjcmlwdGlvbiwgXGMgMCBvdGhlcndpc2UuCisgKi8KK2ludAorcGVkX3VuaXRfcGFyc2VfY3VzdG9tIChjb25zdCBjaGFyKiBzdHIsIGNvbnN0IFBlZERldmljZSogZGV2LCBQZWRVbml0IHVuaXQsCisJCSAgICAgICBQZWRTZWN0b3IqIHNlY3RvciwgUGVkR2VvbWV0cnkqKiByYW5nZSkKK3sKKwljaGFyKiAgICAgY29weTsKKwljaGFyKiAgICAgc3VmZml4OworCWRvdWJsZSAgICBudW07CisJbG9uZyBsb25nIHVuaXRfc2l6ZTsKKwlQZWRTZWN0b3IgcmFkaXVzOworCisJaWYgKGlzX2NocyAoc3RyKSkKKwkJcmV0dXJuIHBhcnNlX2NocyAoc3RyLCBkZXYsIHNlY3RvciwgcmFuZ2UpOworCisJY29weSA9IHBlZF9zdHJkdXAgKHN0cik7CisJaWYgKCFjb3B5KQorCQlnb3RvIGVycm9yOworCXN0cmlwX3N0cmluZyAoY29weSk7CisKKwlzdWZmaXggPSBmaW5kX3N1ZmZpeCAoY29weSk7CisJdW5pdCA9IHBhcnNlX3VuaXRfc3VmZml4IChzdWZmaXgsIHVuaXQpOworCXN1ZmZpeFswXSA9IDA7CisKKwlpZiAoc3NjYW5mIChjb3B5LCAiJWxmIiwgJm51bSkgIT0gMSkgeworCQlwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCQlQRURfRVhDRVBUSU9OX0VSUk9SLAorCQkJCVBFRF9FWENFUFRJT05fQ0FOQ0VMLAorCQkJCV8oIkludmFsaWQgbnVtYmVyLiIpKTsKKwkJZ290byBlcnJvcl9mcmVlX2NvcHk7CisJfQorCisJdW5pdF9zaXplID0gcGVkX3VuaXRfZ2V0X3NpemUgKGRldiwgdW5pdCk7CisJcmFkaXVzID0gcGVkX2Rpdl9yb3VuZF91cCAodW5pdF9zaXplLCBkZXYtPnNlY3Rvcl9zaXplKSAtIDE7CisJaWYgKHJhZGl1cyA8IDApCisJCXJhZGl1cyA9IDA7CisKKwkqc2VjdG9yID0gbnVtICogdW5pdF9zaXplIC8gZGV2LT5zZWN0b3Jfc2l6ZTsKKwkvKiBuZWdhdGl2ZSBudW1iZXJzIGNvdW50IGZyb20gdGhlIGVuZCAqLworCWlmIChjb3B5WzBdID09ICctJykKKwkJKnNlY3RvciArPSBkZXYtPmxlbmd0aDsKKwlpZiAocmFuZ2UpIHsKKwkJKnJhbmdlID0gZ2VvbWV0cnlfZnJvbV9jZW50cmVfcmFkaXVzIChkZXYsICpzZWN0b3IsIHJhZGl1cyk7CisJCWlmICghKnJhbmdlKSB7CisJCQlwZWRfZXhjZXB0aW9uX3Rocm93ICgKKwkJCQlQRURfRVhDRVBUSU9OX0VSUk9SLCBQRURfRVhDRVBUSU9OX0NBTkNFTCwKKwkJCQlfKCJUaGUgbG9jYXRpb24gJXMgaXMgb3V0c2lkZSBvZiB0aGUgIgorCQkJCSAgImRldmljZSAlcy4iKSwKKwkJCQlzdHIsIGRldi0+cGF0aCk7CisJCQlnb3RvIGVycm9yX2ZyZWVfY29weTsKKwkJfQorCX0KKwkqc2VjdG9yID0gY2xpcCAoZGV2LCAqc2VjdG9yKTsKKworCXBlZF9mcmVlIChjb3B5KTsKKwlyZXR1cm4gMTsKKworZXJyb3JfZnJlZV9jb3B5OgorCXBlZF9mcmVlIChjb3B5KTsKK2Vycm9yOgorCSpzZWN0b3IgPSAwOworCWlmIChyYW5nZSkKKwkJKnJhbmdlID0gTlVMTDsKKwlyZXR1cm4gMDsKK30KKworCisvKiogQH0gKi8KZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9tNC9hYnNvbHV0ZS1oZWFkZXIubTQgYi9wYXJ0ZWQtMS44LjcvbTQvYWJzb2x1dGUtaGVhZGVyLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NDlkZjAKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbTQvYWJzb2x1dGUtaGVhZGVyLm00CkBAIC0wLDAgKzEsNDQgQEAKKyMgYWJzb2x1dGUtaGVhZGVyLm00IHNlcmlhbCA2CitkbmwgQ29weXJpZ2h0IChDKSAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK2RubCBGcm9tIERlcmVrIFByaWNlLgorCisjIGdsX0FCU09MVVRFX0hFQURFUihIRUFERVIxIEhFQURFUjIgLi4uKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRmluZCB0aGUgYWJzb2x1dGUgbmFtZSBvZiBhIGhlYWRlciBmaWxlLCBhc3N1bWluZyB0aGUgaGVhZGVyIGV4aXN0cy4KKyMgSWYgdGhlIGhlYWRlciB3ZXJlIHN5cy9pbnR0eXBlcy5oLCB0aGlzIG1hY3JvIHdvdWxkIGRlZmluZQorIyBBQlNPTFVURV9TWVNfSU5UVFlQRVNfSCB0byB0aGUgYCIiJyBxdW90ZWQgYWJzb2x1dGUgbmFtZSBvZiBzeXMvaW50dHlwZXMuaAorIyBpbiBjb25maWcuaAorIyAoZS5nLiBgI2RlZmluZSBBQlNPTFVURV9TWVNfSU5UVFlQRVNfSCAiLy8vdXNyL2luY2x1ZGUvc3lzL2ludHR5cGVzLmgiJykuCisjIFRoZSB0aHJlZSAiLy8vIiBhcmUgdG8gcGFjaWZ5IFN1biBDIDUuOCwgd2hpY2ggb3RoZXJ3aXNlIHdvdWxkIHNheQorIyAid2FybmluZzogI2luY2x1ZGUgb2YgL3Vzci9pbmNsdWRlLy4uLiBtYXkgYmUgbm9uLXBvcnRhYmxlIi4KKyMgVXNlIGAiIicsIG5vdCBgPD4nLCBzbyB0aGF0IHRoZSAvLy8gY2Fubm90IGJlIGNvbmZ1c2VkIHdpdGggYSBDOTkgY29tbWVudC4KK0FDX0RFRlVOKFtnbF9BQlNPTFVURV9IRUFERVJdLAorW0FDX0xBTkdfUFJFUFJPQ19SRVFVSVJFKClkbmwKK0FDX0ZPUkVBQ0goW2dsX0hFQURFUl9OQU1FXSwgWyQxXSwKKyAgW0FTX1ZBUl9QVVNIREVGKFtnbF9hYnNvbHV0ZV9oZWFkZXJdLAorICAgICAgICAgICAgICAgICAgW2dsX2N2X2Fic29sdXRlX11tNF9xdW90ZShtNF9kZWZuKFtnbF9IRUFERVJfTkFNRV0pKSlkbmwKKyAgQUNfQ0FDSEVfQ0hFQ0soW2Fic29sdXRlIG5hbWUgb2YgPF1tNF9xdW90ZShtNF9kZWZuKFtnbF9IRUFERVJfTkFNRV0pKVs+XSwKKyAgICBtNF9xdW90ZShtNF9kZWZuKFtnbF9hYnNvbHV0ZV9oZWFkZXJdKSksCisgICAgW0FTX1ZBUl9QVVNIREVGKFthY19oZWFkZXJfZXhpc3RzXSwKKyAgICAgICAgICAgICAgICAgICAgW2FjX2N2X2hlYWRlcl9dbTRfcXVvdGUobTRfZGVmbihbZ2xfSEVBREVSX05BTUVdKSkpZG5sCisgICAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFKG00X3F1b3RlKG00X2RlZm4oW2dsX0hFQURFUl9OQU1FXSkpKWRubAorICAgIGlmIHRlc3QgQVNfVkFSX0dFVChhY19oZWFkZXJfZXhpc3RzKSA9IHllczsgdGhlbgorICAgICAgQUNfTEFOR19DT05GVEVTVChbQUNfTEFOR19TT1VSQ0UoW1sjaW5jbHVkZSA8XV1tNF9kcXVvdGUobTRfZGVmbihbZ2xfSEVBREVSX05BTUVdKSlbWz5dXSldKQorZG5sIGV2YWwgaXMgbmVjZXNzYXJ5IHRvIGV4cGFuZCBhY19jcHAuCitkbmwgVWx0cml4IGFuZCBQeXJhbWlkIHNoIHJlZnVzZSB0byByZWRpcmVjdCBvdXRwdXQgb2YgZXZhbCwgc28gdXNlIHN1YnNoZWxsLgorICAgICAgQVNfVkFSX1NFVChnbF9hYnNvbHV0ZV9oZWFkZXIsCitbYChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiZBU19NRVNTQUdFX0xPR19GRCB8CitzZWQgLW4gJ1wjL11tNF9xdW90ZShtNF9kZWZuKFtnbF9IRUFERVJfTkFNRV0pKVsje3MjLioiXCguKi9dbTRfcXVvdGUobTRfZGVmbihbZ2xfSEVBREVSX05BTUVdKSlbXCkiLiojXDEjO3MjXi9bXi9dIy8vJiM7cDtxO30nYF0pCisgICAgZmkKKyAgICBBU19WQVJfUE9QREVGKFthY19oZWFkZXJfZXhpc3RzXSlkbmwKKyAgICBdKWRubAorICBBQ19ERUZJTkVfVU5RVU9URUQoQVNfVFJfQ1BQKFtBQlNPTFVURV9dbTRfcXVvdGUobTRfZGVmbihbZ2xfSEVBREVSX05BTUVdKSkpLAorICAgICAgICAgICAgICAgICAgICAgWyJBU19WQVJfR0VUKGdsX2Fic29sdXRlX2hlYWRlcikiXSwKKyAgICAgICAgICAgICAgICAgICAgIFtEZWZpbmUgdGhpcyB0byBhbiBhYnNvbHV0ZSBuYW1lIG9mIDxdbTRfcXVvdGUobTRfZGVmbihbZ2xfSEVBREVSX05BTUVdKSlbPi5dKQorICBBU19WQVJfUE9QREVGKFtnbF9hYnNvbHV0ZV9oZWFkZXJdKWRubAorXSlkbmwKK10pIyBnbF9BQlNPTFVURV9IRUFERVIKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9tNC9hbGxvY2EubTQgYi9wYXJ0ZWQtMS44LjcvbTQvYWxsb2NhLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNjJlMGUKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbTQvYWxsb2NhLm00CkBAIC0wLDAgKzEsNTAgQEAKKyMgYWxsb2NhLm00IHNlcmlhbCA3CitkbmwgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDQsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworQUNfREVGVU4oW2dsX0ZVTkNfQUxMT0NBXSwKK1sKKyAgZG5sIFdvcmsgYXJvdW5kIGEgYnVnIG9mIEFDX0VHUkVQX0NQUCBpbiBhdXRvY29uZi0yLjU3LgorICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NQUF0pCisgIEFDX1JFUVVJUkUoW0FDX1BST0dfRUdSRVBdKQorCisgIEFDX1JFUVVJUkUoW0FDX0ZVTkNfQUxMT0NBXSkKKyAgaWYgdGVzdCAkYWNfY3ZfZnVuY19hbGxvY2Ffd29ya3MgPSBubzsgdGhlbgorICAgIGdsX1BSRVJFUV9BTExPQ0EKKyAgZmkKKworICAjIERlZmluZSBhbiBhZGRpdGlvbmFsIHZhcmlhYmxlIHVzZWQgaW4gdGhlIE1ha2VmaWxlIHN1YnN0aXR1dGlvbi4KKyAgaWYgdGVzdCAkYWNfY3Zfd29ya2luZ19hbGxvY2FfaCA9IHllczsgdGhlbgorICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgYWxsb2NhIGFzIGEgY29tcGlsZXIgYnVpbHQtaW5dLCBbZ2xfY3ZfcnBsX2FsbG9jYV0sIFsKKyAgICAgIEFDX0VHUkVQX0NQUChbTmVlZCBvd24gYWxsb2NhXSwgWworI2lmIGRlZmluZWQgX19HTlVDX18gfHwgZGVmaW5lZCBfQUlYIHx8IGRlZmluZWQgX01TQ19WRVIKKyAgICAgICAgTmVlZCBvd24gYWxsb2NhCisjZW5kaWYKKyAgICAgICAgXSwgW2dsX2N2X3JwbF9hbGxvY2E9eWVzXSwgW2dsX2N2X3JwbF9hbGxvY2E9bm9dKQorICAgIF0pCisgICAgaWYgdGVzdCAkZ2xfY3ZfcnBsX2FsbG9jYSA9IHllczsgdGhlbgorICAgICAgZG5sIE9LLCBhbGxvY2EgY2FuIGJlIGltcGxlbWVudGVkIHRocm91Z2ggYSBjb21waWxlciBidWlsdC1pbi4KKyAgICAgIEFDX0RFRklORShbSEFWRV9BTExPQ0FdLCAxLAorICAgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgJ2FsbG9jYScgYWZ0ZXIgaW5jbHVkaW5nIDxhbGxvY2EuaD4sCisgICAgICAgICBhIGhlYWRlciB0aGF0IG1heSBiZSBzdXBwbGllZCBieSB0aGlzIGRpc3RyaWJ1dGlvbi5dKQorICAgICAgQUxMT0NBX0g9YWxsb2NhLmgKKyAgICBlbHNlCisgICAgICBkbmwgYWxsb2NhIGV4aXN0cyBhcyBhIGxpYnJhcnkgZnVuY3Rpb24sIGkuZS4gaXQgaXMgc2xvdyBhbmQgcHJvYmFibHkKKyAgICAgIGRubCBhIG1lbW9yeSBsZWFrLiBEb24ndCBkZWZpbmUgSEFWRV9BTExPQ0EgaW4gdGhpcyBjYXNlLgorICAgICAgQUxMT0NBX0g9CisgICAgZmkKKyAgZWxzZQorICAgIEFMTE9DQV9IPWFsbG9jYS5oCisgIGZpCisgIEFDX1NVQlNUKFtBTExPQ0FfSF0pCisKKyAgQUNfREVGSU5FKEhBVkVfQUxMT0NBX0gsIDEsCisgICAgW0RlZmluZSBIQVZFX0FMTE9DQV9IIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgY29kZQorICAgICB0aGF0IGluY2x1ZGVzIDxhbGxvY2EuaD4gb25seSBpZiBIQVZFX0FMTE9DQV9IIGlzIGRlZmluZWQuXSkKK10pCisKKyMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvYWxsb2NhLmMuCisjIFNUQUNLX0RJUkVDVElPTiBpcyBhbHJlYWR5IGhhbmRsZWQgYnkgQUNfRlVOQ19BTExPQ0EuCitBQ19ERUZVTihbZ2xfUFJFUkVRX0FMTE9DQV0sIFs6XSkKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9tNC9hc3NlcnQubTQgYi9wYXJ0ZWQtMS44LjcvbTQvYXNzZXJ0Lm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZGMwMGYKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbTQvYXNzZXJ0Lm00CkBAIC0wLDAgKzEsMTkgQEAKKyNzZXJpYWwgNQorCisjIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMSwgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitkbmwgYmFzZWQgb24gY29kZSBmcm9tIEVsZWZ0aGVyaW9zIEdraW91bGVrYXMKKworQUNfREVGVU4oW2dsX0FTU0VSVF0sCitbCisgIEFDX01TR19DSEVDS0lORyh3aGV0aGVyIHRvIGVuYWJsZSBhc3NlcnRpb25zKQorICBBQ19BUkdfRU5BQkxFKGFzc2VydCwKKwlbICAtLWRpc2FibGUtYXNzZXJ0ICAgICAgICB0dXJuIG9mZiBhc3NlcnRpb25zXSwKKwlbIEFDX01TR19SRVNVTFQobm8pCisJICBBQ19ERUZJTkUoTkRFQlVHLDEsW0RlZmluZSB0byAxIGlmIGFzc2VydGlvbnMgc2hvdWxkIGJlIGRpc2FibGVkLl0pIF0sCisJWyBBQ19NU0dfUkVTVUxUKHllcykgXQorICAgICAgICAgICAgICAgKQorXSkKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9tNC9hdGV4aXQubTQgYi9wYXJ0ZWQtMS44LjcvbTQvYXRleGl0Lm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ODkxMmYKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbTQvYXRleGl0Lm00CkBAIC0wLDAgKzEsMTggQEAKKyMgYXRleGl0Lm00IHNlcmlhbCAyCitkbmwgQ29weXJpZ2h0IChDKSAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK0FDX0RFRlVOKFtnbF9GVU5DX0FURVhJVF0sCitbCisgIEFDX1JFUExBQ0VfRlVOQ1MoYXRleGl0KQorICBpZiB0ZXN0ICRhY19jdl9mdW5jX2F0ZXhpdCA9IG5vOyB0aGVuCisgICAgZ2xfUFJFUkVRX0FURVhJVAorICBmaQorXSkKKworIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi9hdGV4aXQuYy4KK0FDX0RFRlVOKFtnbF9QUkVSRVFfQVRFWElUXSwgWworICA6CitdKQpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L200L2NhbGxvYy5tNCBiL3BhcnRlZC0xLjguNy9tNC9jYWxsb2MubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzEwOTE3MQotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9tNC9jYWxsb2MubTQKQEAgLTAsMCArMSw0MyBAQAorIyBjYWxsb2MubTQgc2VyaWFsIDYKKworIyBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBXcml0dGVuIGJ5IEppbSBNZXllcmluZy4KKworIyBEZXRlcm1pbmUgd2hldGhlciBjYWxsb2MgKE4sIFMpIHJldHVybnMgbm9uLU5VTEwgd2hlbiBOKlMgaXMgemVybywKKyMgYW5kIHJldHVybnMgTlVMTCB3aGVuIE4qUyBvdmVyZmxvd3MuCisjIElmIHNvLCBkZWZpbmUgSEFWRV9DQUxMT0MuICBPdGhlcndpc2UsIGRlZmluZSBjYWxsb2MgdG8gcnBsX2NhbGxvYworIyBhbmQgYXJyYW5nZSB0byB1c2UgYSBjYWxsb2Mgd3JhcHBlciBmdW5jdGlvbiB0aGF0IGRvZXMgd29yayBpbiB0aGF0IGNhc2UuCisKKyMgX0FDX0ZVTkNfQ0FMTE9DX0lGKElGLVdPUktTLCBJRi1OT1QpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSWYgYGNhbGxvYyAoMCwgMCknIGlzIHByb3Blcmx5IGhhbmRsZWQsIHJ1biBJRi1XT1JLUywgb3RoZXJ3aXNlLCBJRi1OT1QuCitBQ19ERUZVTihbX0FDX0ZVTkNfQ0FMTE9DX0lGXSwKK1tBQ19SRVFVSVJFKFtBQ19UWVBFX1NJWkVfVF0pZG5sCitBQ19DQUNIRV9DSEVDSyhbZm9yIEdOVSBsaWJjIGNvbXBhdGlibGUgY2FsbG9jXSwgYWNfY3ZfZnVuY19jYWxsb2NfMF9ub25udWxsLAorW0FDX1JVTl9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbQUNfSU5DTFVERVNfREVGQVVMVF0sCisJCSAgW2V4aXQgKCFjYWxsb2MgKDAsIDApIHx8IGNhbGxvYyAoKHNpemVfdCkgLTEgLyA4ICsgMSwgOCkpO10pXSwKKwkgICAgICAgW2FjX2N2X2Z1bmNfY2FsbG9jXzBfbm9ubnVsbD15ZXNdLAorCSAgICAgICBbYWNfY3ZfZnVuY19jYWxsb2NfMF9ub25udWxsPW5vXSwKKwkgICAgICAgW2FjX2N2X2Z1bmNfY2FsbG9jXzBfbm9ubnVsbD1ub10pXSkKK0FTX0lGKFt0ZXN0ICRhY19jdl9mdW5jX2NhbGxvY18wX25vbm51bGwgPSB5ZXNdLCBbJDFdLCBbJDJdKQorXSkjIEFDX0ZVTkNfQ0FMTE9DCisKKworIyBBQ19GVU5DX0NBTExPQworIyAtLS0tLS0tLS0tLS0tLS0KKyMgUmVwb3J0IHdoZXRoZXIgYGNhbGxvYyAoMCwgMCknIGlzIHByb3Blcmx5IGhhbmRsZWQsIGFuZCByZXBsYWNlIGNhbGxvYyBpZgorIyBuZWVkZWQuCitBQ19ERUZVTihbQUNfRlVOQ19DQUxMT0NdLAorW19BQ19GVU5DX0NBTExPQ19JRigKKyAgW0FDX0RFRklORShbSEFWRV9DQUxMT0NdLCAxLAorCSAgICAgW0RlZmluZSB0byAxIGlmIHlvdXIgc3lzdGVtIGhhcyBhIEdOVSBsaWJjIGNvbXBhdGlibGUgYGNhbGxvYycKKwkgICAgICBmdW5jdGlvbiwgYW5kIHRvIDAgb3RoZXJ3aXNlLl0pXSwKKyAgW0FDX0RFRklORShbSEFWRV9DQUxMT0NdLCAwKQorICAgQUNfTElCT0JKKFtjYWxsb2NdKQorICAgQUNfREVGSU5FKFtjYWxsb2NdLCBbcnBsX2NhbGxvY10sCisgICAgICBbRGVmaW5lIHRvIHJwbF9jYWxsb2MgaWYgdGhlIHJlcGxhY2VtZW50IGZ1bmN0aW9uIHNob3VsZCBiZSB1c2VkLl0pXSkKK10pIyBBQ19GVU5DX0NBTExPQwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L200L2Nsb3NlLXN0cmVhbS5tNCBiL3BhcnRlZC0xLjguNy9tNC9jbG9zZS1zdHJlYW0ubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFmOWQ1NAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9tNC9jbG9zZS1zdHJlYW0ubTQKQEAgLTAsMCArMSwxMyBAQAorI3NlcmlhbCAzCitkbmwgQ29weXJpZ2h0IChDKSAyMDA2LTIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworQUNfREVGVU4oW2dsX0NMT1NFX1NUUkVBTV0sCitbCisgIEFDX0xJQk9CSihbY2xvc2Utc3RyZWFtXSkKKworICBkbmwgUHJlcmVxdWlzaXRlcyBvZiBsaWIvY2xvc2Utc3RyZWFtLmMuCisgIDoKK10pCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbTQvY2xvc2VvdXQubTQgYi9wYXJ0ZWQtMS44LjcvbTQvY2xvc2VvdXQubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVhNjVmMAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9tNC9jbG9zZW91dC5tNApAQCAtMCwwICsxLDEzIEBACisjIGNsb3Nlb3V0Lm00IHNlcmlhbCA1CitkbmwgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzLCAyMDA1LCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK0FDX0RFRlVOKFtnbF9DTE9TRU9VVF0sCitbCisgIEFDX0xJQk9CSihbY2xvc2VvdXRdKQorCisgIGRubCBQcmVyZXF1aXNpdGVzIG9mIGxpYi9jbG9zZW91dC5jLgorICA6CitdKQpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L200L2NvZGVzZXQubTQgYi9wYXJ0ZWQtMS44LjcvbTQvY29kZXNldC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjM5NTViCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L200L2NvZGVzZXQubTQKQEAgLTAsMCArMSwyMSBAQAorIyBjb2Rlc2V0Lm00IHNlcmlhbCAyIChnZXR0ZXh0LTAuMTYpCitkbmwgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorCitBQ19ERUZVTihbQU1fTEFOR0lORk9fQ09ERVNFVF0sCitbCisgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgbmxfbGFuZ2luZm8gYW5kIENPREVTRVRdLCBhbV9jdl9sYW5naW5mb19jb2Rlc2V0LAorICAgIFtBQ19UUllfTElOSyhbI2luY2x1ZGUgPGxhbmdpbmZvLmg+XSwKKyAgICAgIFtjaGFyKiBjcyA9IG5sX2xhbmdpbmZvKENPREVTRVQpOyByZXR1cm4gIWNzO10sCisgICAgICBhbV9jdl9sYW5naW5mb19jb2Rlc2V0PXllcywKKyAgICAgIGFtX2N2X2xhbmdpbmZvX2NvZGVzZXQ9bm8pCisgICAgXSkKKyAgaWYgdGVzdCAkYW1fY3ZfbGFuZ2luZm9fY29kZXNldCA9IHllczsgdGhlbgorICAgIEFDX0RFRklORShIQVZFX0xBTkdJTkZPX0NPREVTRVQsIDEsCisgICAgICBbRGVmaW5lIGlmIHlvdSBoYXZlIDxsYW5naW5mby5oPiBhbmQgbmxfbGFuZ2luZm8oQ09ERVNFVCkuXSkKKyAgZmkKK10pCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbTQvY29uZmlnLWgubTQgYi9wYXJ0ZWQtMS44LjcvbTQvY29uZmlnLWgubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA3ZDUxNQotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9tNC9jb25maWctaC5tNApAQCAtMCwwICsxLDEzIEBACisjIFNheSB0aGF0IC1ESEFWRV9DT05GSUdfSCBpcyBub3QgbmVlZGVkLgorCitkbmwgQ29weXJpZ2h0IChDKSAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK2RubCBXcml0dGVuIGJ5IFBhdWwgRWdnZXJ0LgorCisjIFRoaXMgcGFja2FnZSdzIHNvdXJjZSBmaWxlcyBhbGwgaW5jbHVkZSBjb25maWcuaCB1bmNvbmRpdGlvbmFsbHksCisjIHNvIHRoZXJlJ3Mgbm8gbmVlZCB0byBwYXNzIC1ESEFWRV9DT05GSUdfSCB0byB0aGUgY29tcGlsZXIuCitBQ19ERUZVTihbZ2xfQ09ORklHX0hdLAorICBbQUNfQ09ORklHX0NPTU1BTkRTX1BSRShbdGVzdCAiWCRERUZTIiA9IFgtREhBVkVfQ09ORklHX0ggJiYgREVGUz1dKV0pCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbTQvZGlybmFtZS5tNCBiL3BhcnRlZC0xLjguNy9tNC9kaXJuYW1lLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNWRhOTYKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbTQvZGlybmFtZS5tNApAQCAtMCwwICsxLDE4IEBACisjc2VyaWFsIDcgICAtKi0gYXV0b2NvbmYgLSotCitkbmwgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworQUNfREVGVU4oW2dsX0RJUk5BTUVdLAorWworICBBQ19MSUJPQkooW2Jhc2VuYW1lXSkKKyAgQUNfTElCT0JKKFtkaXJuYW1lXSkKKyAgQUNfTElCT0JKKFtzdHJpcHNsYXNoXSkKKworICBkbmwgUHJlcmVxdWlzaXRlcyBvZiBsaWIvZGlybmFtZS5oLgorICBBQ19SRVFVSVJFKFtnbF9BQ19ET1NdKQorICBBQ19SRVFVSVJFKFtnbF9ET1VCTEVfU0xBU0hfUk9PVF0pCisKKyAgZG5sIE5vIHByZXJlcXVpc2l0ZXMgb2YgbGliL2Jhc2VuYW1lLmMsIGxpYi9kaXJuYW1lLmMsIGxpYi9zdHJpcHNsYXNoLmMuCitdKQpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L200L2Rvcy5tNCBiL3BhcnRlZC0xLjguNy9tNC9kb3MubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ1OTU3MQotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9tNC9kb3MubTQKQEAgLTAsMCArMSw3MSBAQAorI3NlcmlhbCAxMCAgIC0qLSBhdXRvY29uZiAtKi0KKworIyBEZWZpbmUgc29tZSBtYWNyb3MgcmVxdWlyZWQgZm9yIHByb3BlciBvcGVyYXRpb24gb2YgY29kZSBpbiBsaWIvKi5jCisjIG9uIE1TRE9TL1dpbmRvd3Mgc3lzdGVtcy4KKworIyBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDQsIDIwMDUsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBGcm9tIEppbSBNZXllcmluZy4KKworQUNfREVGVU4oW2dsX0FDX0RPU10sCisgIFsKKyAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBzeXN0ZW0gaXMgV2luZG93cyBvciBNU0RPU10sIFthY19jdl93aW5fb3JfZG9zXSwKKyAgICAgIFsKKwlBQ19UUllfQ09NUElMRShbXSwKKwlbI2lmICFkZWZpbmVkIF9XSU4zMiAmJiAhZGVmaW5lZCBfX1dJTjMyX18gJiYgIWRlZmluZWQgX19NU0RPU19fICYmICFkZWZpbmVkIF9fQ1lHV0lOX18KK25laXRoZXIgTVNET1Mgbm9yIFdpbmRvd3MKKyNlbmRpZl0sCisJW2FjX2N2X3dpbl9vcl9kb3M9eWVzXSwKKwlbYWNfY3Zfd2luX29yX2Rvcz1ub10pCisgICAgICBdKQorCisgICAgaWYgdGVzdCB4IiRhY19jdl93aW5fb3JfZG9zIiA9IHh5ZXM7IHRoZW4KKyAgICAgIGFjX2ZzX2FjY2VwdHNfZHJpdmVfbGV0dGVyX3ByZWZpeD0xCisgICAgICBhY19mc19iYWNrc2xhc2hfaXNfZmlsZV9uYW1lX3NlcGFyYXRvcj0xCisgICAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBkcml2ZSBsZXR0ZXIgY2FuIHN0YXJ0IHJlbGF0aXZlIHBhdGhdLAorCQkgICAgIFthY19jdl9kcml2ZV9sZXR0ZXJfY2FuX2JlX3JlbGF0aXZlXSwKKwlbCisJICBBQ19UUllfQ09NUElMRShbXSwKKwkgIFsjaWYgZGVmaW5lZCBfX0NZR1dJTl9fCitkcml2ZSBsZXR0ZXJzIGFyZSBhbHdheXMgYWJzb2x1dGUKKyNlbmRpZl0sCisJICBbYWNfY3ZfZHJpdmVfbGV0dGVyX2Nhbl9iZV9yZWxhdGl2ZT15ZXNdLAorCSAgW2FjX2N2X2RyaXZlX2xldHRlcl9jYW5fYmVfcmVsYXRpdmU9bm9dKQorCV0pCisgICAgICBpZiB0ZXN0IHgiJGFjX2N2X2RyaXZlX2xldHRlcl9jYW5fYmVfcmVsYXRpdmUiID0geHllczsgdGhlbgorCWFjX2ZzX2RyaXZlX2xldHRlcl9jYW5fYmVfcmVsYXRpdmU9MQorICAgICAgZWxzZQorCWFjX2ZzX2RyaXZlX2xldHRlcl9jYW5fYmVfcmVsYXRpdmU9MAorICAgICAgZmkKKyAgICBlbHNlCisgICAgICBhY19mc19hY2NlcHRzX2RyaXZlX2xldHRlcl9wcmVmaXg9MAorICAgICAgYWNfZnNfYmFja3NsYXNoX2lzX2ZpbGVfbmFtZV9zZXBhcmF0b3I9MAorICAgICAgYWNfZnNfZHJpdmVfbGV0dGVyX2Nhbl9iZV9yZWxhdGl2ZT0wCisgICAgZmkKKworICAgIEFDX0RFRklORV9VTlFVT1RFRChbRklMRV9TWVNURU1fQUNDRVBUU19EUklWRV9MRVRURVJfUFJFRklYXSwKKyAgICAgICRhY19mc19hY2NlcHRzX2RyaXZlX2xldHRlcl9wcmVmaXgsCisgICAgICBbRGVmaW5lIG9uIHN5c3RlbXMgZm9yIHdoaWNoIGZpbGUgbmFtZXMgbWF5IGhhdmUgYSBzby1jYWxsZWQKKyAgICAgICBgZHJpdmUgbGV0dGVyJyBwcmVmaXgsIGRlZmluZSB0aGlzIHRvIGNvbXB1dGUgdGhlIGxlbmd0aCBvZiB0aGF0CisgICAgICAgcHJlZml4LCBpbmNsdWRpbmcgdGhlIGNvbG9uLl0pCisKKyAgICBBSF9WRVJCQVRJTShJU1NMQVNILAorICAgIFsjaWYgRklMRV9TWVNURU1fQkFDS1NMQVNIX0lTX0ZJTEVfTkFNRV9TRVBBUkFUT1IKKyMgZGVmaW5lIElTU0xBU0goQykgKChDKSA9PSAnLycgfHwgKEMpID09ICdcXCcpCisjZWxzZQorIyBkZWZpbmUgSVNTTEFTSChDKSAoKEMpID09ICcvJykKKyNlbmRpZl0pCisKKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoW0ZJTEVfU1lTVEVNX0JBQ0tTTEFTSF9JU19GSUxFX05BTUVfU0VQQVJBVE9SXSwKKyAgICAgICRhY19mc19iYWNrc2xhc2hfaXNfZmlsZV9uYW1lX3NlcGFyYXRvciwKKyAgICAgIFtEZWZpbmUgaWYgdGhlIGJhY2tzbGFzaCBjaGFyYWN0ZXIgbWF5IGFsc28gc2VydmUgYXMgYSBmaWxlIG5hbWUKKyAgICAgICBjb21wb25lbnQgc2VwYXJhdG9yLl0pCisKKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoW0ZJTEVfU1lTVEVNX0RSSVZFX1BSRUZJWF9DQU5fQkVfUkVMQVRJVkVdLAorICAgICAgJGFjX2ZzX2RyaXZlX2xldHRlcl9jYW5fYmVfcmVsYXRpdmUsCisgICAgICBbRGVmaW5lIGlmIGEgZHJpdmUgbGV0dGVyIHByZWZpeCBkZW5vdGVzIGEgcmVsYXRpdmUgcGF0aCBpZiBpdCBpcworICAgICAgIG5vdCBmb2xsb3dlZCBieSBhIGZpbGUgbmFtZSBjb21wb25lbnQgc2VwYXJhdG9yLl0pCisgIF0pCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbTQvZG91YmxlLXNsYXNoLXJvb3QubTQgYi9wYXJ0ZWQtMS44LjcvbTQvZG91YmxlLXNsYXNoLXJvb3QubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjlkNjBkMAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9tNC9kb3VibGUtc2xhc2gtcm9vdC5tNApAQCAtMCwwICsxLDM4IEBACisjIGRvdWJsZS1zbGFzaC1yb290Lm00IHNlcmlhbCAyICAgLSotIEF1dG9jb25mIC0qLQorZG5sIENvcHlyaWdodCAoQykgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitBQ19ERUZVTihbZ2xfRE9VQkxFX1NMQVNIX1JPT1RdLAorWworICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pCisgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIC8vIGlzIGRpc3RpbmN0IGZyb20gL10sIFtnbF9jdl9kb3VibGVfc2xhc2hfcm9vdF0sCisgICAgWyBpZiB0ZXN0IHgiJGNyb3NzX2NvbXBpbGluZyIgPSB4eWVzIDsgdGhlbgorCSMgV2hlbiBjcm9zcy1jb21waWxpbmcsIHRoZXJlIGlzIG5vIHdheSB0byB0ZWxsIHdoZXRoZXIgLy8gaXMgc3BlY2lhbAorCSMgc2hvcnQgb2YgYSBsaXN0IG9mIGhvc3RzLiAgSG93ZXZlciwgdGhlIG9ubHkga25vd24gaG9zdHMgdG8gZGF0ZQorCSMgdGhhdCBoYXZlIGEgZGlzdGluY3QgLy8gYXJlIEFwb2xsbyBEb21haW5PUyAodG9vIG9sZCB0byBwb3J0IHRvKSwKKwkjIEN5Z3dpbiwgYW5kIHovT1MuICBJZiBhbnlvbmUga25vd3Mgb2YgYW5vdGhlciBzeXN0ZW0gZm9yIHdoaWNoIC8vIGhhcworCSMgc3BlY2lhbCBzZW1hbnRpY3MgYW5kIGlzIGRpc3RpbmN0IGZyb20gLywgcGxlYXNlIHJlcG9ydCBpdCB0bworCSMgPGJ1Zy1nbnVsaWJAZ251Lm9yZz4uCisJY2FzZSAkaG9zdCBpbgorCSAgKi1jeWd3aW4gfCBpMzcwLWlibS1vcGVuZWRpdGlvbikKKwkgICAgZ2xfY3ZfZG91YmxlX3NsYXNoX3Jvb3Q9eWVzIDs7CisJICAqKQorCSAgICAjIEJlIG9wdGltaXN0aWMgYW5kIGFzc3VtZSB0aGF0IC8gYW5kIC8vIGFyZSB0aGUgc2FtZSB3aGVuIHdlCisJICAgICMgZG9uJ3Qga25vdy4KKwkgICAgZ2xfY3ZfZG91YmxlX3NsYXNoX3Jvb3Q9J3Vua25vd24sIGFzc3VtaW5nIG5vJyA7OworCWVzYWMKKyAgICAgIGVsc2UKKwlzZXQgeCBgbHMgLWRpIC8gLy9gCisJaWYgdGVzdCAkWzJdID0gJFs0XSAmJiB3YyAvL2Rldi9udWxsID4vZGV2L251bGwgMj4mMTsgdGhlbgorCSAgZ2xfY3ZfZG91YmxlX3NsYXNoX3Jvb3Q9bm8KKwllbHNlCisJICBnbF9jdl9kb3VibGVfc2xhc2hfcm9vdD15ZXMKKwlmaQorICAgICAgZmldKQorICBpZiB0ZXN0ICIkZ2xfY3ZfZG91YmxlX3NsYXNoX3Jvb3QiID0geWVzOyB0aGVuCisgICAgQUNfREVGSU5FKFtET1VCTEVfU0xBU0hfSVNfRElTVElOQ1RfUk9PVF0sIDEsCisgICAgICBbRGVmaW5lIHRvIDEgaWYgLy8gaXMgYSBmaWxlIHN5c3RlbSByb290IGRpc3RpbmN0IGZyb20gLy5dKQorICBmaQorXSkKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9tNC9lcnJvci5tNCBiL3BhcnRlZC0xLjguNy9tNC9lcnJvci5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Yzc3NDZlCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L200L2Vycm9yLm00CkBAIC0wLDAgKzEsMjIgQEAKKyNzZXJpYWwgMTEKKworIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworQUNfREVGVU4oW2dsX0VSUk9SXSwKK1sKKyAgQUNfRlVOQ19FUlJPUl9BVF9MSU5FCisgIGRubCBOb3RlOiBBQ19GVU5DX0VSUk9SX0FUX0xJTkUgZG9lcyBBQ19MSUJTT1VSQ0VTKFtlcnJvci5oLCBlcnJvci5jXSkuCisgIGdsX1BSRVJFUV9FUlJPUgorXSkKKworIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi9lcnJvci5jLgorQUNfREVGVU4oW2dsX1BSRVJFUV9FUlJPUl0sCitbCisgIEFDX1JFUVVJUkUoW0FDX0ZVTkNfU1RSRVJST1JfUl0pCisgIDoKK10pCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbTQvZXhpdGZhaWwubTQgYi9wYXJ0ZWQtMS44LjcvbTQvZXhpdGZhaWwubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdhNjkxZQotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9tNC9leGl0ZmFpbC5tNApAQCAtMCwwICsxLDEzIEBACisjIGV4aXRmYWlsLm00IHNlcmlhbCA2CitkbmwgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzLCAyMDA1LCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK0FDX0RFRlVOKFtnbF9FWElURkFJTF0sCitbCisgIEFDX0xJQk9CSihbZXhpdGZhaWxdKQorCisgIGRubCBObyBwcmVyZXF1aXNpdGVzIG9mIGxpYi9leGl0ZmFpbC5jLgorICA6CitdKQpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L200L2V4dGVuc2lvbnMubTQgYi9wYXJ0ZWQtMS44LjcvbTQvZXh0ZW5zaW9ucy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDNhOWU1Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L200L2V4dGVuc2lvbnMubTQKQEAgLTAsMCArMSw1OCBAQAorIyBzZXJpYWwgNCAgLSotIEF1dG9jb25mIC0qLQorIyBFbmFibGUgZXh0ZW5zaW9ucyBvbiBzeXN0ZW1zIHRoYXQgbm9ybWFsbHkgZGlzYWJsZSB0aGVtLgorCisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgZGVmaW5pdGlvbiBvZiBBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlMgaXMgc3RvbGVuIGZyb20gQ1ZTCisjIEF1dG9jb25mLiAgUGVyaGFwcyB3ZSBjYW4gcmVtb3ZlIHRoaXMgb25jZSB3ZSBjYW4gYXNzdW1lIEF1dG9jb25mCisjIDIuNjEgb3IgbGF0ZXIgZXZlcnl3aGVyZSwgYnV0IHNpbmNlIENWUyBBdXRvY29uZiBtdXRhdGVzIHJhcGlkbHkKKyMgZW5vdWdoIGluIHRoaXMgYXJlYSBpdCdzIGxpa2VseSB3ZSdsbCBuZWVkIHRvIHJlZGVmaW5lCisjIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUyBmb3IgcXVpdGUgc29tZSB0aW1lLgorCisjIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW5hYmxlIGV4dGVuc2lvbnMgb24gc3lzdGVtcyB0aGF0IG5vcm1hbGx5IGRpc2FibGUgdGhlbSwKKyMgdHlwaWNhbGx5IGR1ZSB0byBzdGFuZGFyZHMtY29uZm9ybWFuY2UgaXNzdWVzLgorQUNfREVGVU4oW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10sCitbCisgIEFDX0JFRk9SRShbJDBdLCBbQUNfQ09NUElMRV9JRkVMU0VdKQorICBBQ19CRUZPUkUoWyQwXSwgW0FDX1JVTl9JRkVMU0VdKQorCisgIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorICBBQ19SRVFVSVJFKFtBQ19BSVhdKQorICBBQ19SRVFVSVJFKFtBQ19NSU5JWF0pCisKKyAgQUhfVkVSQkFUSU0oW19fRVhURU5TSU9OU19fXSwKK1svKiBFbmFibGUgZXh0ZW5zaW9ucyBvbiBTb2xhcmlzLiAgKi8KKyNpZm5kZWYgX19FWFRFTlNJT05TX18KKyMgdW5kZWYgX19FWFRFTlNJT05TX18KKyNlbmRpZgorI2lmbmRlZiBfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1MKKyMgdW5kZWYgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTCisjZW5kaWYKKyNpZm5kZWYgX1RBTkRFTV9TT1VSQ0UKKyMgdW5kZWYgX1RBTkRFTV9TT1VSQ0UKKyNlbmRpZl0pCisgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGl0IGlzIHNhZmUgdG8gZGVmaW5lIF9fRVhURU5TSU9OU19fXSwKKyAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX19dLAorICAgIFtBQ19DT01QSUxFX0lGRUxTRSgKKyAgICAgICBbQUNfTEFOR19QUk9HUkFNKFsKKyMJICBkZWZpbmUgX19FWFRFTlNJT05TX18gMQorCSAgQUNfSU5DTFVERVNfREVGQVVMVF0pXSwKKyAgICAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX189eWVzXSwKKyAgICAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX189bm9dKV0pCisgIHRlc3QgJGFjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fID0geWVzICYmCisgICAgQUNfREVGSU5FKFtfX0VYVEVOU0lPTlNfX10pCisgIEFDX0RFRklORShbX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTXSkKKyAgQUNfREVGSU5FKFtfVEFOREVNX1NPVVJDRV0pCitdKQorCisjIGdsX1VTRV9TWVNURU1fRVhURU5TSU9OUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW5hYmxlIGV4dGVuc2lvbnMgb24gc3lzdGVtcyB0aGF0IG5vcm1hbGx5IGRpc2FibGUgdGhlbSwKKyMgdHlwaWNhbGx5IGR1ZSB0byBzdGFuZGFyZHMtY29uZm9ybWFuY2UgaXNzdWVzLgorQUNfREVGVU4oW2dsX1VTRV9TWVNURU1fRVhURU5TSU9OU10sCisgIFtBQ19SRVFVSVJFKFtBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlNdKV0pCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbTQvZnBlbmRpbmcubTQgYi9wYXJ0ZWQtMS44LjcvbTQvZnBlbmRpbmcubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA3MzQ4MwotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9tNC9mcGVuZGluZy5tNApAQCAtMCwwICsxLDc4IEBACisjc2VyaWFsIDEwCisKKyMgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDA0LCAyMDA1LCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK2RubCBGcm9tIEppbSBNZXllcmluZworZG5sIFVzaW5nIGNvZGUgZnJvbSBlbWFjcywgYmFzZWQgb24gc3VnZ2VzdGlvbnMgZnJvbSBQYXVsIEVnZ2VydAorZG5sIGFuZCBVbHJpY2ggRHJlcHBlci4KKworZG5sIEZpbmQgb3V0IGhvdyB0byBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBwZW5kaW5nIG91dHB1dCBieXRlcyBvbiBhIHN0cmVhbS4KK2RubCBnbGliYyAoMi4xLjkzIGFuZCBuZXdlcikgYW5kIFNvbGFyaXMgcHJvdmlkZSBfX2ZwZW5kaW5nLiAgT24gb3RoZXIgc3lzdGVtcywKK2RubCB3ZSBoYXZlIHRvIGdydWIgYXJvdW5kIGluIHRoZSBGSUxFIHN0cnVjdC4KKworQUNfREVGVU4oW2dsX0ZVTkNfRlBFTkRJTkddLAorWworICBBQ19DSEVDS19IRUFERVJTX09OQ0Uoc3RkaW9fZXh0LmgpCisgIEFDX1JFUExBQ0VfRlVOQ1MoW19fZnBlbmRpbmddKQorICBmcF9oZWFkZXJzPScKKyMgICAgIGluY2x1ZGUgPHN0ZGlvLmg+CisjICAgICBpZiBIQVZFX1NURElPX0VYVF9ICisjICAgICAgaW5jbHVkZSA8c3RkaW9fZXh0Lmg+CisjICAgICBlbmRpZgorJworICBBQ19DSEVDS19ERUNMUyhbX19mcGVuZGluZ10sICwgLCAkZnBfaGVhZGVycykKKyAgaWYgdGVzdCAkYWNfY3ZfZnVuY19fX2ZwZW5kaW5nID0gbm87IHRoZW4KKyAgICBBQ19DQUNIRV9DSEVDSygKKwkgICAgICBbaG93IHRvIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIHBlbmRpbmcgb3V0cHV0IGJ5dGVzIG9uIGEgc3RyZWFtXSwKKwkJICAgYWNfY3Zfc3lzX3BlbmRpbmdfb3V0cHV0X25fYnl0ZXMsCisgICAgICBbCisJZm9yIGFjX2V4cHIgaW4JCQkJCQlcCisJCQkJCQkJCVwKKwkgICAgJyMgZ2xpYmMyJwkJCQkJCVwKKwkgICAgJ2ZwLT5fSU9fd3JpdGVfcHRyIC0gZnAtPl9JT193cml0ZV9iYXNlJwkJXAorCQkJCQkJCQlcCisJICAgICcjIHRyYWRpdGlvbmFsIFVuaXgnCQkJCVwKKwkgICAgJ2ZwLT5fcHRyIC0gZnAtPl9iYXNlJwkJCQlcCisJCQkJCQkJCVwKKwkgICAgJyMgQlNEJwkJCQkJCVwKKwkgICAgJ2ZwLT5fcCAtIGZwLT5fYmYuX2Jhc2UnCQkJCVwKKwkJCQkJCQkJXAorCSAgICAnIyBTQ08sIFVuaXh3YXJlJwkJCQkJXAorCSAgICAnKGZwLT5fX3B0ciA/IGZwLT5fX3B0ciAtIGZwLT5fX2Jhc2UgOiAwKScJCVwKKwkJCQkJCQkJXAorCSAgICAnIyBvbGQgZ2xpYmM/JwkJCQkJXAorCSAgICAnZnAtPl9fYnVmcCAtIGZwLT5fX2J1ZmZlcicJCQkJXAorCQkJCQkJCQlcCisJICAgICcjIG9sZCBnbGliYyBpb3N0cmVhbT8nCQkJCVwKKwkgICAgJ2ZwLT5fcHB0ciAtIGZwLT5fcGJhc2UnCQkJCVwKKwkJCQkJCQkJXAorCSAgICAnIyBWTVMnCQkJCQkJXAorCSAgICAnKCpmcCktPl9wdHIgLSAoKmZwKS0+X2Jhc2UnCQkJXAorCQkJCQkJCQlcCisJICAgICcjIGUuZy4sIERHVVggUjQuMTE7IHRoZSBpbmZvIGlzIG5vdCBhdmFpbGFibGUnCVwKKwkgICAgMQkJCQkJCQlcCisJICAgIDsgZG8KKworCSAgIyBTa2lwIGVhY2ggZW1iZWRkZWQgY29tbWVudC4KKwkgIGNhc2UgIiRhY19leHByIiBpbiAnIycqKSBjb250aW51ZTs7IGVzYWMKKworCSAgQUNfVFJZX0NPTVBJTEUoCisJICAgIFsjaW5jbHVkZSA8c3RkaW8uaD4KKwkgICAgXSwKKwkgICAgW0ZJTEUgKmZwID0gc3RkaW47ICh2b2lkKSAoJGFjX2V4cHIpO10sCisJICAgIGZwX2RvbmU9eWVzCisJICApCisJICB0ZXN0ICIkZnBfZG9uZSIgPSB5ZXMgJiYgYnJlYWsKKwlkb25lCisKKwlhY19jdl9zeXNfcGVuZGluZ19vdXRwdXRfbl9ieXRlcz0kYWNfZXhwcgorICAgICAgXQorICAgICkKKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoUEVORElOR19PVVRQVVRfTl9CWVRFUywKKyAgICAgICRhY19jdl9zeXNfcGVuZGluZ19vdXRwdXRfbl9ieXRlcywKKyAgICAgIFt0aGUgbnVtYmVyIG9mIHBlbmRpbmcgb3V0cHV0IGJ5dGVzIG9uIHN0cmVhbSBgZnAnXSkKKyAgZmkKK10pCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbTQvZnJlZS5tNCBiL3BhcnRlZC0xLjguNy9tNC9mcmVlLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NjczNGIKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbTQvZnJlZS5tNApAQCAtMCwwICsxLDQwIEBACisjIENoZWNrIHdoZXRoZXIgZnJlZSAoTlVMTCkgaXMgc3VwcG9zZWQgdG8gd29yay4KKworIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBXcml0dGVuIGJ5IFBhdWwgRWdnZXJ0LgorCisjIFdlIGNhbid0IHRlc3QgZm9yIGZyZWUgKE5VTEwpIGV2ZW4gYXQgcnVudGltZSwgc2luY2UgaXQgbWlnaHQKKyMgaGFwcGVuIHRvICJ3b3JrIiBmb3Igb3VyIHRlc3QgcHJvZ3JhbSwgYnV0IG5vdCBpbiBnZW5lcmFsLiAgU28sIGJlCisjIGNvbnNlcnZhdGl2ZSBhbmQgdXNlIGZlYXR1cmUgdGVzdHMgZm9yIHJlbGF0aXZlbHkgbW9kZXJuIGhvc3RzLAorIyB3aGVyZSBmcmVlIChOVUxMKSBpcyBrbm93biB0byB3b3JrLiAgVGhpcyBjb3N0cyBhIGJpdCBvZgorIyBwZXJmb3JtYW5jZSBvbiBzb21lIG9sZGVyIGhvc3RzLCBidXQgd2UgY2FuIGZpeCB0aGF0IGxhdGVyIGlmCisjIG5lZWRlZC4KKworQUNfREVGVU4oW2dsX0ZVTkNfRlJFRV0sCitbCisgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGZyZWUgKE5VTEwpIGlzIGtub3duIHRvIHdvcmtdLAorICAgIFtnbF9jdl9mdW5jX2ZyZWVdLAorICAgIFtBQ19DT01QSUxFX0lGRUxTRSgKKyAgICAgICBbQUNfTEFOR19QUk9HUkFNKAorCSAgW1tAJTpAaW5jbHVkZSA8dW5pc3RkLmg+XV0sCisJICBbW0AlOkBpZiBfUE9TSVhfVkVSU0lPTiA8IDE5OTAwOUwgJiYgXAorCSAgICAgICAgKGRlZmluZWQgdW5peCB8fCBkZWZpbmVkIF91bml4IHx8IGRlZmluZWQgX3VuaXhfIFwKKwkgICAgICAgICB8fCBkZWZpbmVkIF9fdW5peCB8fCBkZWZpbmVkIF9fdW5peF9fKQorCSAgICAgIEAlOkBlcnJvciAiJ2ZyZWUgKE5VTEwpJyBpcyBub3Qga25vd24gdG8gd29yayIKKwkgICAgQCU6QGVuZGlmXV0pXSwKKyAgICAgICBbZ2xfY3ZfZnVuY19mcmVlPXllc10sCisgICAgICAgW2dsX2N2X2Z1bmNfZnJlZT1ub10pXSkKKworICBpZiB0ZXN0ICRnbF9jdl9mdW5jX2ZyZWUgPSBubzsgdGhlbgorICAgIEFDX0xJQk9CSihmcmVlKQorICAgIEFDX0RFRklORShmcmVlLCBycGxfZnJlZSwKKyAgICAgIFtEZWZpbmUgdG8gcnBsX2ZyZWUgaWYgdGhlIHJlcGxhY2VtZW50IGZ1bmN0aW9uIHNob3VsZCBiZSB1c2VkLl0pCisgIGZpCitdKQorCisjIFByZXJlcXVpc2l0ZXMgb2YgbGliL2ZyZWUuYy4KK0FDX0RFRlVOKFtnbF9QUkVSRVFfRlJFRV0sIFs6XSkKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9tNC9nZXRvcHQubTQgYi9wYXJ0ZWQtMS44LjcvbTQvZ2V0b3B0Lm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwYTczYjIKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbTQvZ2V0b3B0Lm00CkBAIC0wLDAgKzEsODMgQEAKKyMgZ2V0b3B0Lm00IHNlcmlhbCAxMworZG5sIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoZSBnZXRvcHQgbW9kdWxlIGFzc3VtZSB5b3Ugd2FudCBHTlUgZ2V0b3B0LCB3aXRoIGdldG9wdF9sb25nIGV0YywKKyMgcmF0aGVyIHRoYW4gdmFuaWxsYSBQT1NJWCBnZXRvcHQuICBUaGlzIG1lYW5zIHlvdXIgY29kZSBzaG91bGQKKyMgYWx3YXlzIGluY2x1ZGUgPGdldG9wdC5oPiBmb3IgdGhlIGdldG9wdCBwcm90b3R5cGVzLgorCitBQ19ERUZVTihbZ2xfR0VUT1BUX1NVQlNUSVRVVEVdLAorWworICBBQ19MSUJPQkooW2dldG9wdF0pCisgIEFDX0xJQk9CSihbZ2V0b3B0MV0pCisgIGdsX0dFVE9QVF9TVUJTVElUVVRFX0hFQURFUgorICBnbF9QUkVSRVFfR0VUT1BUCitdKQorCitBQ19ERUZVTihbZ2xfR0VUT1BUX1NVQlNUSVRVVEVfSEVBREVSXSwKK1sKKyAgR0VUT1BUX0g9Z2V0b3B0LmgKKyAgQUNfREVGSU5FKFtfX0dFVE9QVF9QUkVGSVhdLCBbW3JwbF9dXSwKKyAgICBbRGVmaW5lIHRvIHJwbF8gaWYgdGhlIGdldG9wdCByZXBsYWNlbWVudCBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcworICAgICBzaG91bGQgYmUgdXNlZC5dKQorICBBQ19TVUJTVChbR0VUT1BUX0hdKQorXSkKKworQUNfREVGVU4oW2dsX0dFVE9QVF9DSEVDS19IRUFERVJTXSwKK1sKKyAgaWYgdGVzdCAteiAiJEdFVE9QVF9IIjsgdGhlbgorICAgIEFDX0NIRUNLX0hFQURFUlMoW2dldG9wdC5oXSwgW10sIFtHRVRPUFRfSD1nZXRvcHQuaF0pCisgIGZpCisKKyAgaWYgdGVzdCAteiAiJEdFVE9QVF9IIjsgdGhlbgorICAgIEFDX0NIRUNLX0ZVTkNTKFtnZXRvcHRfbG9uZ19vbmx5XSwgW10sIFtHRVRPUFRfSD1nZXRvcHQuaF0pCisgIGZpCisKKyAgZG5sIEJTRCBnZXRvcHRfbG9uZyB1c2VzIGFuIGluY29tcGF0aWJsZSBtZXRob2QgdG8gcmVzZXQgb3B0aW9uIHByb2Nlc3NpbmcsCisgIGRubCBhbmQgKGFzIG9mIDIwMDQtMTAtMTUpIG1pc2hhbmRsZXMgb3B0aW9uYWwgb3B0aW9uLWFyZ3VtZW50cy4KKyAgaWYgdGVzdCAteiAiJEdFVE9QVF9IIjsgdGhlbgorICAgIEFDX0NIRUNLX0RFQ0woW29wdHJlc2V0XSwgW0dFVE9QVF9IPWdldG9wdC5oXSwgW10sIFsjaW5jbHVkZSA8Z2V0b3B0Lmg+XSkKKyAgZmkKKworICBkbmwgU29sYXJpcyAxMCBnZXRvcHQgZG9lc24ndCBoYW5kbGUgYCsnIGFzIGEgbGVhZGluZyBjaGFyYWN0ZXIgaW4gYW4KKyAgZG5sIG9wdGlvbiBzdHJpbmcgKGFzIG9mIDIwMDUtMDUtMDUpLgorICBpZiB0ZXN0IC16ICIkR0VUT1BUX0giOyB0aGVuCisgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciB3b3JraW5nIEdOVSBnZXRvcHQgZnVuY3Rpb25dLCBbZ2xfY3ZfZnVuY19nbnVfZ2V0b3B0XSwKKyAgICAgIFtBQ19SVU5fSUZFTFNFKAorCVtBQ19MQU5HX1BST0dSQU0oWyNpbmNsdWRlIDxnZXRvcHQuaD5dLAorCSAgIFtbCisJICAgICBjaGFyICpteWFyZ3ZbM107CisJICAgICBteWFyZ3ZbMF0gPSAiY29uZnRlc3QiOworCSAgICAgbXlhcmd2WzFdID0gIi0rIjsKKwkgICAgIG15YXJndlsyXSA9IDA7CisJICAgICByZXR1cm4gZ2V0b3B0ICgyLCBteWFyZ3YsICIrYSIpICE9ICc/JzsKKwkgICBdXSldLAorCVtnbF9jdl9mdW5jX2dudV9nZXRvcHQ9eWVzXSwKKwlbZ2xfY3ZfZnVuY19nbnVfZ2V0b3B0PW5vXSwKKwlbZG5sIGNyb3NzIGNvbXBpbGluZyAtIHBlc3NpbWlzdGljYWxseSBndWVzcyBiYXNlZCBvbiBkZWNscworCSBkbmwgU29sYXJpcyAxMCBnZXRvcHQgZG9lc24ndCBoYW5kbGUgYCsnIGFzIGEgbGVhZGluZyBjaGFyYWN0ZXIgaW4gYW4KKwkgZG5sIG9wdGlvbiBzdHJpbmcgKGFzIG9mIDIwMDUtMDUtMDUpLgorCSBBQ19DSEVDS19ERUNMKFtnZXRvcHRfY2xpcF0sCisJICAgW2dsX2N2X2Z1bmNfZ251X2dldG9wdD1ub10sIFtnbF9jdl9mdW5jX2dudV9nZXRvcHQ9eWVzXSwKKwkgICBbI2luY2x1ZGUgPGdldG9wdC5oPl0pXSldKQorICAgIGlmIHRlc3QgIiRnbF9jdl9mdW5jX2dudV9nZXRvcHQiID0gIm5vIjsgdGhlbgorICAgICAgR0VUT1BUX0g9Z2V0b3B0LmgKKyAgICBmaQorICBmaQorXSkKKworQUNfREVGVU4oW2dsX0dFVE9QVF9JRkVMU0VdLAorWworICBBQ19SRVFVSVJFKFtnbF9HRVRPUFRfQ0hFQ0tfSEVBREVSU10pCisgIEFTX0lGKFt0ZXN0IC1uICIkR0VUT1BUX0giXSwgWyQxXSwgWyQyXSkKK10pCisKK0FDX0RFRlVOKFtnbF9HRVRPUFRdLCBbZ2xfR0VUT1BUX0lGRUxTRShbZ2xfR0VUT1BUX1NVQlNUSVRVVEVdKV0pCisKKyMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvZ2V0b3B0Ki4KK0FDX0RFRlVOKFtnbF9QUkVSRVFfR0VUT1BUXSwKK1sKKyAgQUNfQ0hFQ0tfREVDTFNfT05DRShbZ2V0ZW52XSkKK10pCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbTQvZ2V0dGV4dC5tNCBiL3BhcnRlZC0xLjguNy9tNC9nZXR0ZXh0Lm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmZmU0MzMKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbTQvZ2V0dGV4dC5tNApAQCAtMCwwICsxLDQyMCBAQAorIyBnZXR0ZXh0Lm00IHNlcmlhbCA1OSAoZ2V0dGV4dC0wLjE2LjEpCitkbmwgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KK2RubAorZG5sIFRoaXMgZmlsZSBjYW4gY2FuIGJlIHVzZWQgaW4gcHJvamVjdHMgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgdW5kZXIKK2RubCB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugb3IgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCitkbmwgTGljZW5zZSBidXQgd2hpY2ggc3RpbGwgd2FudCB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHRoZSBHTlUgZ2V0dGV4dAorZG5sIGZ1bmN0aW9uYWxpdHkuCitkbmwgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYWN0dWFsIGNvZGUgb2YgdGhlIEdOVSBnZXR0ZXh0IGxpYnJhcnkgaXMgY292ZXJlZAorZG5sIGJ5IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhbmQgdGhlIHJlc3Qgb2YgdGhlIEdOVQorZG5sIGdldHRleHQgcGFja2FnZSBwYWNrYWdlIGlzIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorZG5sIFRoZXkgYXJlICpub3QqIGluIHRoZSBwdWJsaWMgZG9tYWluLgorCitkbmwgQXV0aG9yczoKK2RubCAgIFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGN5Z251cy5jb20+LCAxOTk1LTIwMDAuCitkbmwgICBCcnVubyBIYWlibGUgPGhhaWJsZUBjbGlzcC5jb25zLm9yZz4sIDIwMDAtMjAwNi4KKworZG5sIE1hY3JvIHRvIGFkZCBmb3IgdXNpbmcgR05VIGdldHRleHQuCisKK2RubCBVc2FnZTogQU1fR05VX0dFVFRFWFQoW0lOVExTWU1CT0xdLCBbTkVFRFNZTUJPTF0sIFtJTlRMRElSXSkuCitkbmwgSU5UTFNZTUJPTCBjYW4gYmUgb25lIG9mICdleHRlcm5hbCcsICduby1saWJ0b29sJywgJ3VzZS1saWJ0b29sJy4gVGhlCitkbmwgICAgZGVmYXVsdCAoaWYgaXQgaXMgbm90IHNwZWNpZmllZCBvciBlbXB0eSkgaXMgJ25vLWxpYnRvb2wnLgorZG5sICAgIElOVExTWU1CT0wgc2hvdWxkIGJlICdleHRlcm5hbCcgZm9yIHBhY2thZ2VzIHdpdGggbm8gaW50bCBkaXJlY3RvcnksCitkbmwgICAgYW5kICduby1saWJ0b29sJyBvciAndXNlLWxpYnRvb2wnIGZvciBwYWNrYWdlcyB3aXRoIGFuIGludGwgZGlyZWN0b3J5LgorZG5sICAgIElmIElOVExTWU1CT0wgaXMgJ3VzZS1saWJ0b29sJywgdGhlbiBhIGxpYnRvb2wgbGlicmFyeQorZG5sICAgICQodG9wX2J1aWxkZGlyKS9pbnRsL2xpYmludGwubGEgd2lsbCBiZSBjcmVhdGVkIChzaGFyZWQgYW5kL29yIHN0YXRpYywKK2RubCAgICBkZXBlbmRpbmcgb24gLS17ZW5hYmxlLGRpc2FibGV9LXtzaGFyZWQsc3RhdGljfSBhbmQgb24gdGhlIHByZXNlbmNlIG9mCitkbmwgICAgQU0tRElTQUJMRS1TSEFSRUQpLiBJZiBJTlRMU1lNQk9MIGlzICduby1saWJ0b29sJywgYSBzdGF0aWMgbGlicmFyeQorZG5sICAgICQodG9wX2J1aWxkZGlyKS9pbnRsL2xpYmludGwuYSB3aWxsIGJlIGNyZWF0ZWQuCitkbmwgSWYgTkVFRFNZTUJPTCBpcyBzcGVjaWZpZWQgYW5kIGlzICduZWVkLW5nZXR0ZXh0JywgdGhlbiBHTlUgZ2V0dGV4dAorZG5sICAgIGltcGxlbWVudGF0aW9ucyAoaW4gbGliYyBvciBsaWJpbnRsKSB3aXRob3V0IHRoZSBuZ2V0dGV4dCgpIGZ1bmN0aW9uCitkbmwgICAgd2lsbCBiZSBpZ25vcmVkLiAgSWYgTkVFRFNZTUJPTCBpcyBzcGVjaWZpZWQgYW5kIGlzCitkbmwgICAgJ25lZWQtZm9ybWF0c3RyaW5nLW1hY3JvcycsIHRoZW4gR05VIGdldHRleHQgaW1wbGVtZW50YXRpb25zIHRoYXQgZG9uJ3QKK2RubCAgICBzdXBwb3J0IHRoZSBJU08gQyA5OSA8aW50dHlwZXMuaD4gZm9ybWF0c3RyaW5nIG1hY3JvcyB3aWxsIGJlIGlnbm9yZWQuCitkbmwgSU5UTERJUiBpcyB1c2VkIHRvIGZpbmQgdGhlIGludGwgbGlicmFyaWVzLiAgSWYgZW1wdHksCitkbmwgICAgdGhlIHZhbHVlIGAkKHRvcF9idWlsZGRpcikvaW50bC8nIGlzIHVzZWQuCitkbmwKK2RubCBUaGUgcmVzdWx0IG9mIHRoZSBjb25maWd1cmF0aW9uIGlzIG9uZSBvZiB0aHJlZSBjYXNlczoKK2RubCAxKSBHTlUgZ2V0dGV4dCwgYXMgaW5jbHVkZWQgaW4gdGhlIGludGwgc3ViZGlyZWN0b3J5LCB3aWxsIGJlIGNvbXBpbGVkCitkbmwgICAgYW5kIHVzZWQuCitkbmwgICAgQ2F0YWxvZyBmb3JtYXQ6IEdOVSAtLT4gaW5zdGFsbCBpbiAkKGRhdGFkaXIpCitkbmwgICAgQ2F0YWxvZyBleHRlbnNpb246IC5tbyBhZnRlciBpbnN0YWxsYXRpb24sIC5nbW8gaW4gc291cmNlIHRyZWUKK2RubCAyKSBHTlUgZ2V0dGV4dCBoYXMgYmVlbiBmb3VuZCBpbiB0aGUgc3lzdGVtJ3MgQyBsaWJyYXJ5LgorZG5sICAgIENhdGFsb2cgZm9ybWF0OiBHTlUgLS0+IGluc3RhbGwgaW4gJChkYXRhZGlyKQorZG5sICAgIENhdGFsb2cgZXh0ZW5zaW9uOiAubW8gYWZ0ZXIgaW5zdGFsbGF0aW9uLCAuZ21vIGluIHNvdXJjZSB0cmVlCitkbmwgMykgTm8gaW50ZXJuYXRpb25hbGl6YXRpb24sIGFsd2F5cyB1c2UgRW5nbGlzaCBtc2dpZC4KK2RubCAgICBDYXRhbG9nIGZvcm1hdDogbm9uZQorZG5sICAgIENhdGFsb2cgZXh0ZW5zaW9uOiBub25lCitkbmwgSWYgSU5UTFNZTUJPTCBpcyAnZXh0ZXJuYWwnLCBvbmx5IGNhc2VzIDIgYW5kIDMgY2FuIG9jY3VyLgorZG5sIFRoZSB1c2Ugb2YgLmdtbyBpcyBoaXN0b3JpY2FsIChpdCB3YXMgbmVlZGVkIHRvIGF2b2lkIG92ZXJ3cml0aW5nIHRoZQorZG5sIEdOVSBmb3JtYXQgY2F0YWxvZ3Mgd2hlbiBidWlsZGluZyBvbiBhIHBsYXRmb3JtIHdpdGggYW4gWC9PcGVuIGdldHRleHQpLAorZG5sIGJ1dCB3ZSBrZWVwIGl0IGluIG9yZGVyIG5vdCB0byBmb3JjZSBpcnJlbGV2YW50IGZpbGVuYW1lIGNoYW5nZXMgb24gdGhlCitkbmwgbWFpbnRhaW5lcnMuCitkbmwKK0FDX0RFRlVOKFtBTV9HTlVfR0VUVEVYVF0sCitbCisgIGRubCBBcmd1bWVudCBjaGVja2luZy4KKyAgaWZlbHNlKFskMV0sIFtdLCAsIFtpZmVsc2UoWyQxXSwgW2V4dGVybmFsXSwgLCBbaWZlbHNlKFskMV0sIFtuby1saWJ0b29sXSwgLCBbaWZlbHNlKFskMV0sIFt1c2UtbGlidG9vbF0sICwKKyAgICBbZXJycHJpbnQoW0VSUk9SOiBpbnZhbGlkIGZpcnN0IGFyZ3VtZW50IHRvIEFNX0dOVV9HRVRURVhUCitdKV0pXSldKV0pCisgIGlmZWxzZShbJDJdLCBbXSwgLCBbaWZlbHNlKFskMl0sIFtuZWVkLW5nZXR0ZXh0XSwgLCBbaWZlbHNlKFskMl0sIFtuZWVkLWZvcm1hdHN0cmluZy1tYWNyb3NdLCAsCisgICAgW2VycnByaW50KFtFUlJPUjogaW52YWxpZCBzZWNvbmQgYXJndW1lbnQgdG8gQU1fR05VX0dFVFRFWFQKK10pXSldKV0pCisgIGRlZmluZShbZ3RfaW5jbHVkZWRfaW50bF0sCisgICAgaWZlbHNlKFskMV0sIFtleHRlcm5hbF0sCisgICAgICBpZmRlZihbQU1fR05VX0dFVFRFWFRfXVtJTlRMX1NVQkRJUl0sIFt5ZXNdLCBbbm9dKSwKKyAgICAgIFt5ZXNdKSkKKyAgZGVmaW5lKFtndF9saWJ0b29sX3N1ZmZpeF9wcmVmaXhdLCBpZmVsc2UoWyQxXSwgW3VzZS1saWJ0b29sXSwgW2xdLCBbXSkpCisgIGd0X05FRURTX0lOSVQKKyAgQU1fR05VX0dFVFRFWFRfTkVFRChbJDJdKQorCisgIEFDX1JFUVVJUkUoW0FNX1BPX1NVQkRJUlNdKWRubAorICBpZmVsc2UoZ3RfaW5jbHVkZWRfaW50bCwgeWVzLCBbCisgICAgQUNfUkVRVUlSRShbQU1fSU5UTF9TVUJESVJdKWRubAorICBdKQorCisgIGRubCBQcmVyZXF1aXNpdGVzIG9mIEFDX0xJQl9MSU5LRkxBR1NfQk9EWS4KKyAgQUNfUkVRVUlSRShbQUNfTElCX1BSRVBBUkVfUFJFRklYXSkKKyAgQUNfUkVRVUlSRShbQUNfTElCX1JQQVRIXSkKKworICBkbmwgU29tZXRpbWVzIGxpYmludGwgcmVxdWlyZXMgbGliaWNvbnYsIHNvIGZpcnN0IHNlYXJjaCBmb3IgbGliaWNvbnYuCisgIGRubCBJZGVhbGx5IHdlIHdvdWxkIGRvIHRoaXMgc2VhcmNoIG9ubHkgYWZ0ZXIgdGhlCisgIGRubCAgICAgIGlmIHRlc3QgIiRVU0VfTkxTIiA9ICJ5ZXMiOyB0aGVuCisgIGRubCAgICAgICAgaWYgeyBldmFsICJndF92YWw9XCQkZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmMiOyB0ZXN0ICIkZ3RfdmFsIiAhPSAieWVzIjsgfTsgdGhlbgorICBkbmwgdGVzdHMuIEJ1dCBpZiBjb25maWd1cmUuaW4gaW52b2tlcyBBTV9JQ09OViBhZnRlciBBTV9HTlVfR0VUVEVYVAorICBkbmwgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgd291bGQgbmVlZCB0byBjb250YWluIHRoZSBzYW1lIHNoZWxsIGNvZGUKKyAgZG5sIGFnYWluLCBvdXRzaWRlIGFueSAnaWYnLiBUaGVyZSBhcmUgdHdvIHNvbHV0aW9uczoKKyAgZG5sIC0gSW52b2tlIEFNX0lDT05WX0xJTktGTEFHU19CT0RZIGhlcmUsIG91dHNpZGUgYW55ICdpZicuCisgIGRubCAtIENvbnRyb2wgdGhlIGV4cGFuc2lvbnMgaW4gbW9yZSBkZXRhaWwgdXNpbmcgQUNfUFJPVklERV9JRkVMU0UuCisgIGRubCBTaW5jZSBBQ19QUk9WSURFX0lGRUxTRSBpcyBvbmx5IGluIGF1dG9jb25mID49IDIuNTIgYW5kIG5vdAorICBkbmwgZG9jdW1lbnRlZCwgd2UgYXZvaWQgaXQuCisgIGlmZWxzZShndF9pbmNsdWRlZF9pbnRsLCB5ZXMsICwgWworICAgIEFDX1JFUVVJUkUoW0FNX0lDT05WX0xJTktGTEFHU19CT0RZXSkKKyAgXSkKKworICBkbmwgU29tZXRpbWVzLCBvbiBNYWNPUyBYLCBsaWJpbnRsIHJlcXVpcmVzIGxpbmtpbmcgd2l0aCBDb3JlRm91bmRhdGlvbi4KKyAgZ3RfSU5UTF9NQUNPU1gKKworICBkbmwgU2V0IFVTRV9OTFMuCisgIEFDX1JFUVVJUkUoW0FNX05MU10pCisKKyAgaWZlbHNlKGd0X2luY2x1ZGVkX2ludGwsIHllcywgWworICAgIEJVSUxEX0lOQ0xVREVEX0xJQklOVEw9bm8KKyAgICBVU0VfSU5DTFVERURfTElCSU5UTD1ubworICBdKQorICBMSUJJTlRMPQorICBMVExJQklOVEw9CisgIFBPU1VCPQorCisgIGRubCBBZGQgYSB2ZXJzaW9uIG51bWJlciB0byB0aGUgY2FjaGUgbWFjcm9zLgorICBjYXNlICIgJGd0X25lZWRzICIgaW4KKyAgICAqIiBuZWVkLWZvcm1hdHN0cmluZy1tYWNyb3MgIiopIGd0X2FwaV92ZXJzaW9uPTMgOzsKKyAgICAqIiBuZWVkLW5nZXR0ZXh0ICIqKSBndF9hcGlfdmVyc2lvbj0yIDs7CisgICAgKikgZ3RfYXBpX3ZlcnNpb249MSA7OworICBlc2FjCisgIGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJjPSJndF9jdl9mdW5jX2dudWdldHRleHQke2d0X2FwaV92ZXJzaW9ufV9saWJjIgorICBndF9mdW5jX2dudWdldHRleHRfbGliaW50bD0iZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0JHtndF9hcGlfdmVyc2lvbn1fbGliaW50bCIKKworICBkbmwgSWYgd2UgdXNlIE5MUyBmaWd1cmUgb3V0IHdoYXQgbWV0aG9kCisgIGlmIHRlc3QgIiRVU0VfTkxTIiA9ICJ5ZXMiOyB0aGVuCisgICAgZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0PW5vCisgICAgaWZlbHNlKGd0X2luY2x1ZGVkX2ludGwsIHllcywgWworICAgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIGluY2x1ZGVkIGdldHRleHQgaXMgcmVxdWVzdGVkXSkKKyAgICAgIEFDX0FSR19XSVRIKGluY2x1ZGVkLWdldHRleHQsCisgICAgICAgIFsgIC0td2l0aC1pbmNsdWRlZC1nZXR0ZXh0IHVzZSB0aGUgR05VIGdldHRleHQgbGlicmFyeSBpbmNsdWRlZCBoZXJlXSwKKyAgICAgICAgbmxzX2N2X2ZvcmNlX3VzZV9nbnVfZ2V0dGV4dD0kd2l0aHZhbCwKKyAgICAgICAgbmxzX2N2X2ZvcmNlX3VzZV9nbnVfZ2V0dGV4dD1ubykKKyAgICAgIEFDX01TR19SRVNVTFQoJG5sc19jdl9mb3JjZV91c2VfZ251X2dldHRleHQpCisKKyAgICAgIG5sc19jdl91c2VfZ251X2dldHRleHQ9IiRubHNfY3ZfZm9yY2VfdXNlX2dudV9nZXR0ZXh0IgorICAgICAgaWYgdGVzdCAiJG5sc19jdl9mb3JjZV91c2VfZ251X2dldHRleHQiICE9ICJ5ZXMiOyB0aGVuCisgICAgXSkKKyAgICAgICAgZG5sIFVzZXIgZG9lcyBub3QgaW5zaXN0IG9uIHVzaW5nIEdOVSBOTFMgbGlicmFyeS4gIEZpZ3VyZSBvdXQgd2hhdAorICAgICAgICBkbmwgdG8gdXNlLiAgSWYgR05VIGdldHRleHQgaXMgYXZhaWxhYmxlIHdlIHVzZSB0aGlzLiAgRWxzZSB3ZSBoYXZlCisgICAgICAgIGRubCB0byBmYWxsIGJhY2sgdG8gR05VIE5MUyBsaWJyYXJ5LgorCisgICAgICAgIGlmIHRlc3QgJGd0X2FwaV92ZXJzaW9uIC1nZSAzOyB0aGVuCisgICAgICAgICAgZ3RfcmV2aXNpb25fdGVzdF9jb2RlPScKKyNpZm5kZWYgX19HTlVfR0VUVEVYVF9TVVBQT1JURURfUkVWSVNJT04KKyNkZWZpbmUgX19HTlVfR0VUVEVYVF9TVVBQT1JURURfUkVWSVNJT04obWFqb3IpICgobWFqb3IpID09IDAgPyAwIDogLTEpCisjZW5kaWYKK2NoYW5nZXF1b3RlKCwpZG5sCit0eXBlZGVmIGludCBhcnJheSBbMiAqIChfX0dOVV9HRVRURVhUX1NVUFBPUlRFRF9SRVZJU0lPTigwKSA+PSAxKSAtIDFdOworY2hhbmdlcXVvdGUoWyxdKWRubAorJworICAgICAgICBlbHNlCisgICAgICAgICAgZ3RfcmV2aXNpb25fdGVzdF9jb2RlPQorICAgICAgICBmaQorICAgICAgICBpZiB0ZXN0ICRndF9hcGlfdmVyc2lvbiAtZ2UgMjsgdGhlbgorICAgICAgICAgIGd0X2V4cHJlc3Npb25fdGVzdF9jb2RlPScgKyAqIG5nZXR0ZXh0ICgiIiwgIiIsIDApJworICAgICAgICBlbHNlCisgICAgICAgICAgZ3RfZXhwcmVzc2lvbl90ZXN0X2NvZGU9CisgICAgICAgIGZpCisKKyAgICAgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBHTlUgZ2V0dGV4dCBpbiBsaWJjXSwgWyRndF9mdW5jX2dudWdldHRleHRfbGliY10sCisgICAgICAgICBbQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxsaWJpbnRsLmg+CiskZ3RfcmV2aXNpb25fdGVzdF9jb2RlCitleHRlcm4gaW50IF9ubF9tc2dfY2F0X2NudHI7CitleHRlcm4gaW50ICpfbmxfZG9tYWluX2JpbmRpbmdzO10sCisgICAgICAgICAgICBbYmluZHRleHRkb21haW4gKCIiLCAiIik7CityZXR1cm4gKiBnZXR0ZXh0ICgiIikkZ3RfZXhwcmVzc2lvbl90ZXN0X2NvZGUgKyBfbmxfbXNnX2NhdF9jbnRyICsgKl9ubF9kb21haW5fYmluZGluZ3NdLAorICAgICAgICAgICAgW2V2YWwgIiRndF9mdW5jX2dudWdldHRleHRfbGliYz15ZXMiXSwKKyAgICAgICAgICAgIFtldmFsICIkZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmM9bm8iXSldKQorCisgICAgICAgIGlmIHsgZXZhbCAiZ3RfdmFsPVwkJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJjIjsgdGVzdCAiJGd0X3ZhbCIgIT0gInllcyI7IH07IHRoZW4KKyAgICAgICAgICBkbmwgU29tZXRpbWVzIGxpYmludGwgcmVxdWlyZXMgbGliaWNvbnYsIHNvIGZpcnN0IHNlYXJjaCBmb3IgbGliaWNvbnYuCisgICAgICAgICAgaWZlbHNlKGd0X2luY2x1ZGVkX2ludGwsIHllcywgLCBbCisgICAgICAgICAgICBBTV9JQ09OVl9MSU5LCisgICAgICAgICAgXSkKKyAgICAgICAgICBkbmwgU2VhcmNoIGZvciBsaWJpbnRsIGFuZCBkZWZpbmUgTElCSU5UTCwgTFRMSUJJTlRMIGFuZCBJTkNJTlRMCisgICAgICAgICAgZG5sIGFjY29yZGluZ2x5LiBEb24ndCB1c2UgQUNfTElCX0xJTktGTEFHU19CT0RZKFtpbnRsXSxbaWNvbnZdKQorICAgICAgICAgIGRubCBiZWNhdXNlIHRoYXQgd291bGQgYWRkICItbGljb252IiB0byBMSUJJTlRMIGFuZCBMVExJQklOVEwKKyAgICAgICAgICBkbmwgZXZlbiBpZiBsaWJpY29udiBkb2Vzbid0IGV4aXN0LgorICAgICAgICAgIEFDX0xJQl9MSU5LRkxBR1NfQk9EWShbaW50bF0pCisgICAgICAgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBHTlUgZ2V0dGV4dCBpbiBsaWJpbnRsXSwKKyAgICAgICAgICAgIFskZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmludGxdLAorICAgICAgICAgICBbZ3Rfc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorICAgICAgICAgICAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAkSU5DSU5UTCIKKyAgICAgICAgICAgIGd0X3NhdmVfTElCUz0iJExJQlMiCisgICAgICAgICAgICBMSUJTPSIkTElCUyAkTElCSU5UTCIKKyAgICAgICAgICAgIGRubCBOb3cgc2VlIHdoZXRoZXIgbGliaW50bCBleGlzdHMgYW5kIGRvZXMgbm90IGRlcGVuZCBvbiBsaWJpY29udi4KKyAgICAgICAgICAgIEFDX1RSWV9MSU5LKFsjaW5jbHVkZSA8bGliaW50bC5oPgorJGd0X3JldmlzaW9uX3Rlc3RfY29kZQorZXh0ZXJuIGludCBfbmxfbXNnX2NhdF9jbnRyOworZXh0ZXJuCisjaWZkZWYgX19jcGx1c3BsdXMKKyJDIgorI2VuZGlmCitjb25zdCBjaGFyICpfbmxfZXhwYW5kX2FsaWFzIChjb25zdCBjaGFyICopO10sCisgICAgICAgICAgICAgIFtiaW5kdGV4dGRvbWFpbiAoIiIsICIiKTsKK3JldHVybiAqIGdldHRleHQgKCIiKSRndF9leHByZXNzaW9uX3Rlc3RfY29kZSArIF9ubF9tc2dfY2F0X2NudHIgKyAqX25sX2V4cGFuZF9hbGlhcyAoIiIpXSwKKyAgICAgICAgICAgICAgW2V2YWwgIiRndF9mdW5jX2dudWdldHRleHRfbGliaW50bD15ZXMiXSwKKyAgICAgICAgICAgICAgW2V2YWwgIiRndF9mdW5jX2dudWdldHRleHRfbGliaW50bD1ubyJdKQorICAgICAgICAgICAgZG5sIE5vdyBzZWUgd2hldGhlciBsaWJpbnRsIGV4aXN0cyBhbmQgZGVwZW5kcyBvbiBsaWJpY29udi4KKyAgICAgICAgICAgIGlmIHsgZXZhbCAiZ3RfdmFsPVwkJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsIjsgdGVzdCAiJGd0X3ZhbCIgIT0geWVzOyB9ICYmIHRlc3QgLW4gIiRMSUJJQ09OViI7IHRoZW4KKyAgICAgICAgICAgICAgTElCUz0iJExJQlMgJExJQklDT05WIgorICAgICAgICAgICAgICBBQ19UUllfTElOSyhbI2luY2x1ZGUgPGxpYmludGwuaD4KKyRndF9yZXZpc2lvbl90ZXN0X2NvZGUKK2V4dGVybiBpbnQgX25sX21zZ19jYXRfY250cjsKK2V4dGVybgorI2lmZGVmIF9fY3BsdXNwbHVzCisiQyIKKyNlbmRpZgorY29uc3QgY2hhciAqX25sX2V4cGFuZF9hbGlhcyAoY29uc3QgY2hhciAqKTtdLAorICAgICAgICAgICAgICAgIFtiaW5kdGV4dGRvbWFpbiAoIiIsICIiKTsKK3JldHVybiAqIGdldHRleHQgKCIiKSRndF9leHByZXNzaW9uX3Rlc3RfY29kZSArIF9ubF9tc2dfY2F0X2NudHIgKyAqX25sX2V4cGFuZF9hbGlhcyAoIiIpXSwKKyAgICAgICAgICAgICAgIFtMSUJJTlRMPSIkTElCSU5UTCAkTElCSUNPTlYiCisgICAgICAgICAgICAgICAgTFRMSUJJTlRMPSIkTFRMSUJJTlRMICRMVExJQklDT05WIgorICAgICAgICAgICAgICAgIGV2YWwgIiRndF9mdW5jX2dudWdldHRleHRfbGliaW50bD15ZXMiCisgICAgICAgICAgICAgICBdKQorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIENQUEZMQUdTPSIkZ3Rfc2F2ZV9DUFBGTEFHUyIKKyAgICAgICAgICAgIExJQlM9IiRndF9zYXZlX0xJQlMiXSkKKyAgICAgICAgZmkKKworICAgICAgICBkbmwgSWYgYW4gYWxyZWFkeSBwcmVzZW50IG9yIHByZWluc3RhbGxlZCBHTlUgZ2V0dGV4dCgpIGlzIGZvdW5kLAorICAgICAgICBkbmwgdXNlIGl0LiAgQnV0IGlmIHRoaXMgbWFjcm8gaXMgdXNlZCBpbiBHTlUgZ2V0dGV4dCwgYW5kIEdOVQorICAgICAgICBkbmwgZ2V0dGV4dCBpcyBhbHJlYWR5IHByZWluc3RhbGxlZCBpbiBsaWJpbnRsLCB3ZSB1cGRhdGUgdGhpcworICAgICAgICBkbmwgbGliaW50bC4gIChDZi4gdGhlIGluc3RhbGwgcnVsZSBpbiBpbnRsL01ha2VmaWxlLmluLikKKyAgICAgICAgaWYgeyBldmFsICJndF92YWw9XCQkZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmMiOyB0ZXN0ICIkZ3RfdmFsIiA9ICJ5ZXMiOyB9IFwKKyAgICAgICAgICAgfHwgeyB7IGV2YWwgImd0X3ZhbD1cJCRndF9mdW5jX2dudWdldHRleHRfbGliaW50bCI7IHRlc3QgIiRndF92YWwiID0gInllcyI7IH0gXAorICAgICAgICAgICAgICAgICYmIHRlc3QgIiRQQUNLQUdFIiAhPSBnZXR0ZXh0LXJ1bnRpbWUgXAorICAgICAgICAgICAgICAgICYmIHRlc3QgIiRQQUNLQUdFIiAhPSBnZXR0ZXh0LXRvb2xzOyB9OyB0aGVuCisgICAgICAgICAgZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0PXllcworICAgICAgICBlbHNlCisgICAgICAgICAgZG5sIFJlc2V0IHRoZSB2YWx1ZXMgc2V0IGJ5IHNlYXJjaGluZyBmb3IgbGliaW50bC4KKyAgICAgICAgICBMSUJJTlRMPQorICAgICAgICAgIExUTElCSU5UTD0KKyAgICAgICAgICBJTkNJTlRMPQorICAgICAgICBmaQorCisgICAgaWZlbHNlKGd0X2luY2x1ZGVkX2ludGwsIHllcywgWworICAgICAgICBpZiB0ZXN0ICIkZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0IiAhPSAieWVzIjsgdGhlbgorICAgICAgICAgIGRubCBHTlUgZ2V0dGV4dCBpcyBub3QgZm91bmQgaW4gdGhlIEMgbGlicmFyeS4KKyAgICAgICAgICBkbmwgRmFsbCBiYWNrIG9uIGluY2x1ZGVkIEdOVSBnZXR0ZXh0IGxpYnJhcnkuCisgICAgICAgICAgbmxzX2N2X3VzZV9nbnVfZ2V0dGV4dD15ZXMKKyAgICAgICAgZmkKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgIiRubHNfY3ZfdXNlX2dudV9nZXR0ZXh0IiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgIGRubCBNYXJrIGFjdGlvbnMgdXNlZCB0byBnZW5lcmF0ZSBHTlUgTkxTIGxpYnJhcnkuCisgICAgICAgIEJVSUxEX0lOQ0xVREVEX0xJQklOVEw9eWVzCisgICAgICAgIFVTRV9JTkNMVURFRF9MSUJJTlRMPXllcworICAgICAgICBMSUJJTlRMPSJpZmVsc2UoWyQzXSxbXSxcJHt0b3BfYnVpbGRkaXJ9L2ludGwsWyQzXSkvbGliaW50bC5bXWd0X2xpYnRvb2xfc3VmZml4X3ByZWZpeFtdYSAkTElCSUNPTlYgJExJQlRIUkVBRCIKKyAgICAgICAgTFRMSUJJTlRMPSJpZmVsc2UoWyQzXSxbXSxcJHt0b3BfYnVpbGRkaXJ9L2ludGwsWyQzXSkvbGliaW50bC5bXWd0X2xpYnRvb2xfc3VmZml4X3ByZWZpeFtdYSAkTFRMSUJJQ09OViAkTFRMSUJUSFJFQUQiCisgICAgICAgIExJQlM9YGVjaG8gIiAkTElCUyAiIHwgc2VkIC1lICdzLyAtbGludGwgLyAvJyAtZSAncy9eIC8vJyAtZSAncy8gJC8vJ2AKKyAgICAgIGZpCisKKyAgICAgIENBVE9CSkVYVD0KKyAgICAgIGlmIHRlc3QgIiRndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQiID0gInllcyIgXAorICAgICAgICAgfHwgdGVzdCAiJG5sc19jdl91c2VfZ251X2dldHRleHQiID0gInllcyI7IHRoZW4KKyAgICAgICAgZG5sIE1hcmsgYWN0aW9ucyB0byB1c2UgR05VIGdldHRleHQgdG9vbHMuCisgICAgICAgIENBVE9CSkVYVD0uZ21vCisgICAgICBmaQorICAgIF0pCisKKyAgICBpZiB0ZXN0IC1uICIkSU5UTF9NQUNPU1hfTElCUyI7IHRoZW4KKyAgICAgIGlmIHRlc3QgIiRndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQiID0gInllcyIgXAorICAgICAgICAgfHwgdGVzdCAiJG5sc19jdl91c2VfZ251X2dldHRleHQiID0gInllcyI7IHRoZW4KKyAgICAgICAgZG5sIFNvbWUgZXh0cmEgZmxhZ3MgYXJlIG5lZWRlZCBkdXJpbmcgbGlua2luZy4KKyAgICAgICAgTElCSU5UTD0iJExJQklOVEwgJElOVExfTUFDT1NYX0xJQlMiCisgICAgICAgIExUTElCSU5UTD0iJExUTElCSU5UTCAkSU5UTF9NQUNPU1hfTElCUyIKKyAgICAgIGZpCisgICAgZmkKKworICAgIGlmIHRlc3QgIiRndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQiID0gInllcyIgXAorICAgICAgIHx8IHRlc3QgIiRubHNfY3ZfdXNlX2dudV9nZXR0ZXh0IiA9ICJ5ZXMiOyB0aGVuCisgICAgICBBQ19ERUZJTkUoRU5BQkxFX05MUywgMSwKKyAgICAgICAgW0RlZmluZSB0byAxIGlmIHRyYW5zbGF0aW9uIG9mIHByb2dyYW0gbWVzc2FnZXMgdG8gdGhlIHVzZXIncyBuYXRpdmUgbGFuZ3VhZ2UKKyAgIGlzIHJlcXVlc3RlZC5dKQorICAgIGVsc2UKKyAgICAgIFVTRV9OTFM9bm8KKyAgICBmaQorICBmaQorCisgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byB1c2UgTkxTXSkKKyAgQUNfTVNHX1JFU1VMVChbJFVTRV9OTFNdKQorICBpZiB0ZXN0ICIkVVNFX05MUyIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbd2hlcmUgdGhlIGdldHRleHQgZnVuY3Rpb24gY29tZXMgZnJvbV0pCisgICAgaWYgdGVzdCAiJGd0X3VzZV9wcmVpbnN0YWxsZWRfZ251Z2V0dGV4dCIgPSAieWVzIjsgdGhlbgorICAgICAgaWYgeyBldmFsICJndF92YWw9XCQkZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmludGwiOyB0ZXN0ICIkZ3RfdmFsIiA9ICJ5ZXMiOyB9OyB0aGVuCisgICAgICAgIGd0X3NvdXJjZT0iZXh0ZXJuYWwgbGliaW50bCIKKyAgICAgIGVsc2UKKyAgICAgICAgZ3Rfc291cmNlPSJsaWJjIgorICAgICAgZmkKKyAgICBlbHNlCisgICAgICBndF9zb3VyY2U9ImluY2x1ZGVkIGludGwgZGlyZWN0b3J5IgorICAgIGZpCisgICAgQUNfTVNHX1JFU1VMVChbJGd0X3NvdXJjZV0pCisgIGZpCisKKyAgaWYgdGVzdCAiJFVTRV9OTFMiID0gInllcyI7IHRoZW4KKworICAgIGlmIHRlc3QgIiRndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQiID0gInllcyI7IHRoZW4KKyAgICAgIGlmIHsgZXZhbCAiZ3RfdmFsPVwkJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsIjsgdGVzdCAiJGd0X3ZhbCIgPSAieWVzIjsgfTsgdGhlbgorICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBsaW5rIHdpdGggbGliaW50bF0pCisgICAgICAgIEFDX01TR19SRVNVTFQoWyRMSUJJTlRMXSkKKyAgICAgICAgQUNfTElCX0FQUEVORFRPVkFSKFtDUFBGTEFHU10sIFskSU5DSU5UTF0pCisgICAgICBmaQorCisgICAgICBkbmwgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIFNvbWUgcGFja2FnZXMgbWF5IGJlIHVzaW5nIHRoaXMuCisgICAgICBBQ19ERUZJTkUoSEFWRV9HRVRURVhULCAxLAorICAgICAgIFtEZWZpbmUgaWYgdGhlIEdOVSBnZXR0ZXh0KCkgZnVuY3Rpb24gaXMgYWxyZWFkeSBwcmVzZW50IG9yIHByZWluc3RhbGxlZC5dKQorICAgICAgQUNfREVGSU5FKEhBVkVfRENHRVRURVhULCAxLAorICAgICAgIFtEZWZpbmUgaWYgdGhlIEdOVSBkY2dldHRleHQoKSBmdW5jdGlvbiBpcyBhbHJlYWR5IHByZXNlbnQgb3IgcHJlaW5zdGFsbGVkLl0pCisgICAgZmkKKworICAgIGRubCBXZSBuZWVkIHRvIHByb2Nlc3MgdGhlIHBvLyBkaXJlY3RvcnkuCisgICAgUE9TVUI9cG8KKyAgZmkKKworICBpZmVsc2UoZ3RfaW5jbHVkZWRfaW50bCwgeWVzLCBbCisgICAgZG5sIElmIHRoaXMgaXMgdXNlZCBpbiBHTlUgZ2V0dGV4dCB3ZSBoYXZlIHRvIHNldCBCVUlMRF9JTkNMVURFRF9MSUJJTlRMCisgICAgZG5sIHRvICd5ZXMnIGJlY2F1c2Ugc29tZSBvZiB0aGUgdGVzdHN1aXRlIHJlcXVpcmVzIGl0LgorICAgIGlmIHRlc3QgIiRQQUNLQUdFIiA9IGdldHRleHQtcnVudGltZSB8fCB0ZXN0ICIkUEFDS0FHRSIgPSBnZXR0ZXh0LXRvb2xzOyB0aGVuCisgICAgICBCVUlMRF9JTkNMVURFRF9MSUJJTlRMPXllcworICAgIGZpCisKKyAgICBkbmwgTWFrZSBhbGwgdmFyaWFibGVzIHdlIHVzZSBrbm93biB0byBhdXRvY29uZi4KKyAgICBBQ19TVUJTVChCVUlMRF9JTkNMVURFRF9MSUJJTlRMKQorICAgIEFDX1NVQlNUKFVTRV9JTkNMVURFRF9MSUJJTlRMKQorICAgIEFDX1NVQlNUKENBVE9CSkVYVCkKKworICAgIGRubCBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gU29tZSBjb25maWd1cmUuaW5zIG1heSBiZSB1c2luZyB0aGlzLgorICAgIG5sc19jdl9oZWFkZXJfaW50bD0KKyAgICBubHNfY3ZfaGVhZGVyX2xpYmd0PQorCisgICAgZG5sIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiBTb21lIE1ha2VmaWxlcyBtYXkgYmUgdXNpbmcgdGhpcy4KKyAgICBEQVRBRElSTkFNRT1zaGFyZQorICAgIEFDX1NVQlNUKERBVEFESVJOQU1FKQorCisgICAgZG5sIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiBTb21lIE1ha2VmaWxlcyBtYXkgYmUgdXNpbmcgdGhpcy4KKyAgICBJTlNUT0JKRVhUPS5tbworICAgIEFDX1NVQlNUKElOU1RPQkpFWFQpCisKKyAgICBkbmwgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIFNvbWUgTWFrZWZpbGVzIG1heSBiZSB1c2luZyB0aGlzLgorICAgIEdFTkNBVD1nZW5jYXQKKyAgICBBQ19TVUJTVChHRU5DQVQpCisKKyAgICBkbmwgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIFNvbWUgTWFrZWZpbGVzIG1heSBiZSB1c2luZyB0aGlzLgorICAgIElOVExPQkpTPQorICAgIGlmIHRlc3QgIiRVU0VfSU5DTFVERURfTElCSU5UTCIgPSB5ZXM7IHRoZW4KKyAgICAgIElOVExPQkpTPSJcJChHRVRUT0JKUykiCisgICAgZmkKKyAgICBBQ19TVUJTVChJTlRMT0JKUykKKworICAgIGRubCBFbmFibGUgbGlidG9vbCBzdXBwb3J0IGlmIHRoZSBzdXJyb3VuZGluZyBwYWNrYWdlIHdpc2hlcyBpdC4KKyAgICBJTlRMX0xJQlRPT0xfU1VGRklYX1BSRUZJWD1ndF9saWJ0b29sX3N1ZmZpeF9wcmVmaXgKKyAgICBBQ19TVUJTVChJTlRMX0xJQlRPT0xfU1VGRklYX1BSRUZJWCkKKyAgXSkKKworICBkbmwgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIFNvbWUgTWFrZWZpbGVzIG1heSBiZSB1c2luZyB0aGlzLgorICBJTlRMTElCUz0iJExJQklOVEwiCisgIEFDX1NVQlNUKElOVExMSUJTKQorCisgIGRubCBNYWtlIGFsbCBkb2N1bWVudGVkIHZhcmlhYmxlcyBrbm93biB0byBhdXRvY29uZi4KKyAgQUNfU1VCU1QoTElCSU5UTCkKKyAgQUNfU1VCU1QoTFRMSUJJTlRMKQorICBBQ19TVUJTVChQT1NVQikKK10pCisKKworZG5sIENoZWNrcyBmb3Igc3BlY2lhbCBvcHRpb25zIG5lZWRlZCBvbiBNYWNPUyBYLgorZG5sIERlZmluZXMgSU5UTF9NQUNPU1hfTElCUy4KK0FDX0RFRlVOKFtndF9JTlRMX01BQ09TWF0sCitbCisgIGRubCBDaGVjayBmb3IgQVBJIGludHJvZHVjZWQgaW4gTWFjT1MgWCAxMC4yLgorICBBQ19DQUNIRV9DSEVDSyhbZm9yIENGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWVdLAorICAgIGd0X2N2X2Z1bmNfQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZSwKKyAgICBbZ3Rfc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgTElCUz0iJExJQlMgLVdsLC1mcmFtZXdvcmsgLVdsLENvcmVGb3VuZGF0aW9uIgorICAgICBBQ19UUllfTElOSyhbI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NGUHJlZmVyZW5jZXMuaD5dLAorICAgICAgIFtDRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlKE5VTEwsIE5VTEwpXSwKKyAgICAgICBbZ3RfY3ZfZnVuY19DRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlPXllc10sCisgICAgICAgW2d0X2N2X2Z1bmNfQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZT1ub10pCisgICAgIExJQlM9IiRndF9zYXZlX0xJQlMiXSkKKyAgaWYgdGVzdCAkZ3RfY3ZfZnVuY19DRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlID0geWVzOyB0aGVuCisgICAgQUNfREVGSU5FKFtIQVZFX0NGUFJFRkVSRU5DRVNDT1BZQVBQVkFMVUVdLCAxLAorICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBNYWNPUyBYIGZ1bmN0aW9uIENGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWUgaW4gdGhlIENvcmVGb3VuZGF0aW9uIGZyYW1ld29yay5dKQorICBmaQorICBkbmwgQ2hlY2sgZm9yIEFQSSBpbnRyb2R1Y2VkIGluIE1hY09TIFggMTAuMy4KKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBDRkxvY2FsZUNvcHlDdXJyZW50XSwgZ3RfY3ZfZnVuY19DRkxvY2FsZUNvcHlDdXJyZW50LAorICAgIFtndF9zYXZlX0xJQlM9IiRMSUJTIgorICAgICBMSUJTPSIkTElCUyAtV2wsLWZyYW1ld29yayAtV2wsQ29yZUZvdW5kYXRpb24iCisgICAgIEFDX1RSWV9MSU5LKFsjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ0ZMb2NhbGUuaD5dLCBbQ0ZMb2NhbGVDb3B5Q3VycmVudCgpO10sCisgICAgICAgW2d0X2N2X2Z1bmNfQ0ZMb2NhbGVDb3B5Q3VycmVudD15ZXNdLAorICAgICAgIFtndF9jdl9mdW5jX0NGTG9jYWxlQ29weUN1cnJlbnQ9bm9dKQorICAgICBMSUJTPSIkZ3Rfc2F2ZV9MSUJTIl0pCisgIGlmIHRlc3QgJGd0X2N2X2Z1bmNfQ0ZMb2NhbGVDb3B5Q3VycmVudCA9IHllczsgdGhlbgorICAgIEFDX0RFRklORShbSEFWRV9DRkxPQ0FMRUNPUFlDVVJSRU5UXSwgMSwKKyAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgTWFjT1MgWCBmdW5jdGlvbiBDRkxvY2FsZUNvcHlDdXJyZW50IGluIHRoZSBDb3JlRm91bmRhdGlvbiBmcmFtZXdvcmsuXSkKKyAgZmkKKyAgSU5UTF9NQUNPU1hfTElCUz0KKyAgaWYgdGVzdCAkZ3RfY3ZfZnVuY19DRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlID0geWVzIHx8IHRlc3QgJGd0X2N2X2Z1bmNfQ0ZMb2NhbGVDb3B5Q3VycmVudCA9IHllczsgdGhlbgorICAgIElOVExfTUFDT1NYX0xJQlM9Ii1XbCwtZnJhbWV3b3JrIC1XbCxDb3JlRm91bmRhdGlvbiIKKyAgZmkKKyAgQUNfU1VCU1QoW0lOVExfTUFDT1NYX0xJQlNdKQorXSkKKworCitkbmwgZ3RfTkVFRFNfSU5JVCBlbnN1cmVzIHRoYXQgdGhlIGd0X25lZWRzIHZhcmlhYmxlIGlzIGluaXRpYWxpemVkLgorbTRfZGVmaW5lKFtndF9ORUVEU19JTklUXSwKK1sKKyAgbTRfZGl2ZXJ0X3RleHQoW0RFRkFVTFRTXSwgW2d0X25lZWRzPV0pCisgIG00X2RlZmluZShbZ3RfTkVFRFNfSU5JVF0sIFtdKQorXSkKKworCitkbmwgVXNhZ2U6IEFNX0dOVV9HRVRURVhUX05FRUQoW05FRURTWU1CT0xdKQorQUNfREVGVU4oW0FNX0dOVV9HRVRURVhUX05FRURdLAorWworICBtNF9kaXZlcnRfdGV4dChbSU5JVF9QUkVQQVJFXSwgW2d0X25lZWRzPSIkZ3RfbmVlZHMgJDEiXSkKK10pCisKKworZG5sIFVzYWdlOiBBTV9HTlVfR0VUVEVYVF9WRVJTSU9OKFtnZXR0ZXh0LXZlcnNpb25dKQorQUNfREVGVU4oW0FNX0dOVV9HRVRURVhUX1ZFUlNJT05dLCBbXSkKKwkgICAgICBBQ19ERUZVTihbZ2xfTE9DS19FQVJMWV0sIFtdKQpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L200L2dsaWJjMjEubTQgYi9wYXJ0ZWQtMS44LjcvbTQvZ2xpYmMyMS5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTVmZDk4Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L200L2dsaWJjMjEubTQKQEAgLTAsMCArMSwzMCBAQAorIyBnbGliYzIxLm00IHNlcmlhbCAzCitkbmwgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUZXN0IGZvciB0aGUgR05VIEMgTGlicmFyeSwgdmVyc2lvbiAyLjEgb3IgbmV3ZXIuCisjIEZyb20gQnJ1bm8gSGFpYmxlLgorCitBQ19ERUZVTihbZ2xfR0xJQkMyMV0sCisgIFsKKyAgICBBQ19DQUNIRV9DSEVDSyh3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgTGlicmFyeSAyLjEgb3IgbmV3ZXIsCisgICAgICBhY19jdl9nbnVfbGlicmFyeV8yXzEsCisgICAgICBbQUNfRUdSRVBfQ1BQKFtMdWNreSBHTlUgdXNlcl0sCisJWworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisjaWZkZWYgX19HTlVfTElCUkFSWV9fCisgI2lmIChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPj0gMSkgfHwgKF9fR0xJQkNfXyA+IDIpCisgIEx1Y2t5IEdOVSB1c2VyCisgI2VuZGlmCisjZW5kaWYKKwldLAorCWFjX2N2X2dudV9saWJyYXJ5XzJfMT15ZXMsCisJYWNfY3ZfZ251X2xpYnJhcnlfMl8xPW5vKQorICAgICAgXQorICAgICkKKyAgICBBQ19TVUJTVChHTElCQzIxKQorICAgIEdMSUJDMjE9IiRhY19jdl9nbnVfbGlicmFyeV8yXzEiCisgIF0KKykKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9tNC9nbnVsaWItY29tbW9uLm00IGIvcGFydGVkLTEuOC43L200L2dudWxpYi1jb21tb24ubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM5ODAxMAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9tNC9nbnVsaWItY29tbW9uLm00CkBAIC0wLDAgKzEsMjIgQEAKKyMgZ251bGliLWNvbW1vbi5tNCBzZXJpYWwgMgorZG5sIENvcHlyaWdodCAoQykgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIGdsX01PRFVMRV9JTkRJQ0FUT1IoW21vZHVsZW5hbWVdKQorIyBkZWZpbmVzIGEgQyBtYWNybyBpbmRpY2F0aW5nIHRoZSBwcmVzZW5jZSBvZiB0aGUgZ2l2ZW4gbW9kdWxlLgorQUNfREVGVU4oW2dsX01PRFVMRV9JTkRJQ0FUT1JdLAorWworICBBQ19ERUZJTkUoW0dOVUxJQl9ddHJhbnNsaXQoWyQxXSxbYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy1dLFtBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fX10pLCBbMV0sCisgICAgW0RlZmluZSB0byAxIHdoZW4gdXNpbmcgdGhlIGdudWxpYiBtb2R1bGUgXSQxWy5dKQorXSkKKworIyBBQ19QUk9HX01LRElSX1AKKyMgaXMgYSBiYWNrcG9ydCBvZiBhdXRvY29uZi0yLjYwJ3MgQUNfUFJPR19NS0RJUl9QLgorIyBSZW1vdmUgdGhpcyBtYWNybyB3aGVuIHdlIGNhbiBhc3N1bWUgYXV0b2NvbmYgPj0gMi42MC4KK200X2lmZGVmKFtBQ19QUk9HX01LRElSX1BdLCBbXSwgWworICBBQ19ERUZVTihbQUNfUFJPR19NS0RJUl9QXSwKKyAgICBbQUNfUkVRVUlSRShbQU1fUFJPR19NS0RJUl9QXSlkbmwgZGVmaW5lZCBieSBhdXRvbWFrZQorICAgICBNS0RJUl9QPSckKG1rZGlyX3ApJworICAgICBBQ19TVUJTVChbTUtESVJfUF0pXSldKQpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L200L2dudWxpYi1jb21wLm00IGIvcGFydGVkLTEuOC43L200L2dudWxpYi1jb21wLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4MjA4M2EKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbTQvZ251bGliLWNvbXAubTQKQEAgLTAsMCArMSwzMTIgQEAKKyMgLSotIGJ1ZmZlci1yZWFkLW9ubHk6IHQgLSotIHZpOiBzZXQgcm86CisjIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEKKyMgRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZIQorIyBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisjIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorIyBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorIyB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorIworIyBHZW5lcmF0ZWQgYnkgZ251bGliLXRvb2wuCisjCisjIFRoaXMgZmlsZSByZXByZXNlbnRzIHRoZSBjb21waWxlZCBzdW1tYXJ5IG9mIHRoZSBzcGVjaWZpY2F0aW9uIGluCisjIGdudWxpYi1jYWNoZS5tNC4gSXQgbGlzdHMgdGhlIGNvbXB1dGVkIG1hY3JvIGludm9jYXRpb25zIHRoYXQgbmVlZAorIyB0byBiZSBpbnZva2VkIGZyb20gY29uZmlndXJlLmFjLgorIyBJbiBwcm9qZWN0cyB1c2luZyBDVlMsIHRoaXMgZmlsZSBjYW4gYmUgdHJlYXRlZCBsaWtlIG90aGVyIGJ1aWx0IGZpbGVzLgorCisKKyMgVGhpcyBtYWNybyBzaG91bGQgYmUgaW52b2tlZCBmcm9tIC4vY29uZmlndXJlLmFjLCBpbiB0aGUgc2VjdGlvbgorIyAiQ2hlY2tzIGZvciBwcm9ncmFtcyIsIHJpZ2h0IGFmdGVyIEFDX1BST0dfQ0MsIGFuZCBjZXJ0YWlubHkgYmVmb3JlCisjIGFueSBjaGVja3MgZm9yIGxpYnJhcmllcywgaGVhZGVyIGZpbGVzLCB0eXBlcyBhbmQgbGlicmFyeSBmdW5jdGlvbnMuCitBQ19ERUZVTihbZ2xfRUFSTFldLAorWworICBtNF9wYXR0ZXJuX2ZvcmJpZChbXmdsX1tBLVpdXSlkbmwgdGhlIGdudWxpYiBtYWNybyBuYW1lc3BhY2UKKyAgbTRfcGF0dGVybl9hbGxvdyhbXmdsX0VTJF0pZG5sIGEgdmFsaWQgbG9jYWxlIG5hbWUKKyAgbTRfcGF0dGVybl9hbGxvdyhbXmdsX0xJQk9CSlMkXSlkbmwgYSB2YXJpYWJsZQorICBtNF9wYXR0ZXJuX2FsbG93KFteZ2xfTFRMSUJPQkpTJF0pZG5sIGEgdmFyaWFibGUKKyAgQUNfUkVRVUlSRShbQUNfUFJPR19SQU5MSUJdKQorICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKyAgQUNfUkVRVUlSRShbZ2xfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSkKKyAgZG5sIFNvbWUgY29tcGlsZXJzIChlLmcuLCBBSVggNS4zIGNjKSBuZWVkIHRvIGJlIGluIGM5OSBtb2RlCisgIGRubCBmb3IgdGhlIGJ1aWx0aW4gdmFfY29weSB0byB3b3JrLiAgV2l0aCBBdXRvY29uZiAyLjYwIG9yIGxhdGVyLAorICBkbmwgQUNfUFJPR19DQ19TVERDIGFycmFuZ2VzIGZvciB0aGlzLiAgV2l0aCBvbGRlciBBdXRvY29uZiBBQ19QUk9HX0NDX1NUREMKKyAgZG5sIHNob3VsZG4ndCBodXJ0LCB0aG91Z2ggaW5zdGFsbGVycyBhcmUgb24gdGhlaXIgb3duIHRvIHNldCBjOTkgbW9kZS4KKyAgQUNfUkVRVUlSRShbQUNfUFJPR19DQ19TVERDXSkKK10pCisKKyMgVGhpcyBtYWNybyBzaG91bGQgYmUgaW52b2tlZCBmcm9tIC4vY29uZmlndXJlLmFjLCBpbiB0aGUgc2VjdGlvbgorIyAiQ2hlY2sgZm9yIGhlYWRlciBmaWxlcywgdHlwZXMgYW5kIGxpYnJhcnkgZnVuY3Rpb25zIi4KK0FDX0RFRlVOKFtnbF9JTklUXSwKK1sKKyAgbTRfcHVzaGRlZihbQUNfTElCT0JKXSwgbTRfZGVmbihbZ2xfTElCT0JKXSkpCisgIG00X3B1c2hkZWYoW0FDX1JFUExBQ0VfRlVOQ1NdLCBtNF9kZWZuKFtnbF9SRVBMQUNFX0ZVTkNTXSkpCisgIG00X3B1c2hkZWYoW0FDX0xJQlNPVVJDRVNdLCBtNF9kZWZuKFtnbF9MSUJTT1VSQ0VTXSkpCisgIEFNX0NPTkRJVElPTkFMKFtHTF9DT05EX0xJQlRPT0xdLCBbdHJ1ZV0pCisgIGdsX2NvbmRfbGlidG9vbD10cnVlCisgIGdsX3NvdXJjZV9iYXNlPSdsaWInCitjaGFuZ2VxdW90ZSgsKWRubAorTFRBTExPQ0E9YGVjaG8gIiRBTExPQ0EiIHwgc2VkICdzL1wuW14uXSogLy5sbyAvZztzL1wuW14uXSokLy5sby8nYAorY2hhbmdlcXVvdGUoWywgXSlkbmwKK0FDX1NVQlNUKFtMVEFMTE9DQV0pCisgIGdsX0ZVTkNfQUxMT0NBCisgIGdsX0FTU0VSVAorICBnbF9GVU5DX0FURVhJVAorICBBQ19GVU5DX0NBTExPQworICBnbF9DTE9TRV9TVFJFQU0KKyAgZ2xfTU9EVUxFX0lORElDQVRPUihbY2xvc2Utc3RyZWFtXSkKKyAgZ2xfQ0xPU0VPVVQKKyAgZ2xfQ09ORklHX0gKKyAgZ2xfRElSTkFNRQorICBnbF9ET1VCTEVfU0xBU0hfUk9PVAorICBnbF9FUlJPUgorICBnbF9FWElURkFJTAorICBnbF9GVU5DX0ZQRU5ESU5HCisgIGdsX0ZVTkNfRlJFRQorICBnbF9HRVRPUFQKKyAgZG5sIHlvdSBtdXN0IGFkZCBBTV9HTlVfR0VUVEVYVChbZXh0ZXJuYWxdKSBvciBzaW1pbGFyIHRvIGNvbmZpZ3VyZS5hYy4KKyAgQU1fR05VX0dFVFRFWFRfVkVSU0lPTihbMC4xNi4xXSkKKyAgQUNfU1VCU1QoW0xJQklOVExdKQorICBBQ19TVUJTVChbTFRMSUJJTlRMXSkKKyAgZ2xfSU5MSU5FCisgIGdsX0lOVFRZUEVTX0gKKyAgZ2xfSUdOT1JFX1VOVVNFRF9MSUJSQVJJRVMKKyAgZ2xfTE9DQUxDSEFSU0VUCisgIGdsX0xPTkdfT1BUSU9OUworICBBQ19GVU5DX01BTExPQworICBnbF9GVU5DX01FTUNIUgorICBnbF9GVU5DX01FTUNNUAorICBnbF9GVU5DX01FTUNQWQorICBnbF9GVU5DX01FTU1PVkUKKyAgZ2xfRlVOQ19NRU1TRVQKKyAgZ2xfUVVPVEVBUkcKKyAgQUNfRlVOQ19SRUFMTE9DCisgIGdsX1JFR0VYCisgIGdsX0ZVTkNfUkVOQU1FCisgIGdsX0ZVTkNfUlBNQVRDSAorICBnbF9TQUZFX1JFQUQKKyAgZ2xfU0FGRV9XUklURQorICBndF9UWVBFX1NTSVpFX1QKKyAgZ2xfU1REQVJHX0gKKyAgQU1fU1REQk9PTF9ICisgIGdsX1NURElOVF9ICisgIGdsX1NURExJQl9ICisgIGdsX0ZVTkNfU1RSQ1NQTgorICBnbF9IRUFERVJfU1RSSU5HX0gKKyAgZ2xfRlVOQ19TVFJORFVQCisgIGdsX1NUUklOR19NT0RVTEVfSU5ESUNBVE9SKFtzdHJuZHVwXSkKKyAgZ2xfRlVOQ19TVFJOTEVOCisgIGdsX1NUUklOR19NT0RVTEVfSU5ESUNBVE9SKFtzdHJubGVuXSkKKyAgZ2xfRlVOQ19TVFJUT0QKKyAgZ2xfRlVOQ19TVFJUT0wKKyAgZ2xfVU5JU1REX0gKKyAgZ2xfRlVOQ19VVElNRQorICBnbF9XQ0hBUl9ICisgIGdsX1dDVFlQRV9ICisgIGdsX1hBTExPQworICBnbF9YU1RSTkRVUAorICBtNF9wb3BkZWYoW0FDX0xJQlNPVVJDRVNdKQorICBtNF9wb3BkZWYoW0FDX1JFUExBQ0VfRlVOQ1NdKQorICBtNF9wb3BkZWYoW0FDX0xJQk9CSl0pCisgIEFDX0NPTkZJR19DT01NQU5EU19QUkUoWworICAgIGdsX2xpYm9ianM9CisgICAgZ2xfbHRsaWJvYmpzPQorICAgIGlmIHRlc3QgLW4gIiRnbF9MSUJPQkpTIjsgdGhlbgorICAgICAgIyBSZW1vdmUgdGhlIGV4dGVuc2lvbi4KKyAgICAgIHNlZF9kcm9wX29iamV4dD0ncy9cLm8kLy87cy9cLm9iaiQvLycKKyAgICAgIGZvciBpIGluIGBmb3IgaSBpbiAkZ2xfTElCT0JKUzsgZG8gZWNobyAiJGkiOyBkb25lIHwgc2VkICIkc2VkX2Ryb3Bfb2JqZXh0IiB8IHNvcnQgfCB1bmlxYDsgZG8KKyAgICAgICAgZ2xfbGlib2Jqcz0iJGdsX2xpYm9ianMgJGkuJGFjX29iamV4dCIKKyAgICAgICAgZ2xfbHRsaWJvYmpzPSIkZ2xfbHRsaWJvYmpzICRpLmxvIgorICAgICAgZG9uZQorICAgIGZpCisgICAgQUNfU1VCU1QoW2dsX0xJQk9CSlNdLCBbJGdsX2xpYm9ianNdKQorICAgIEFDX1NVQlNUKFtnbF9MVExJQk9CSlNdLCBbJGdsX2x0bGlib2Jqc10pCisgIF0pCitdKQorCisjIExpa2UgQUNfTElCT0JKLCBleGNlcHQgdGhhdCB0aGUgbW9kdWxlIG5hbWUgZ29lcworIyBpbnRvIGdsX0xJQk9CSlMgaW5zdGVhZCBvZiBpbnRvIExJQk9CSlMuCitBQ19ERUZVTihbZ2xfTElCT0JKXSwKKyAgW2dsX0xJQk9CSlM9IiRnbF9MSUJPQkpTICQxLiRhY19vYmpleHQiXSkKKworIyBMaWtlIEFDX1JFUExBQ0VfRlVOQ1MsIGV4Y2VwdCB0aGF0IHRoZSBtb2R1bGUgbmFtZSBnb2VzCisjIGludG8gZ2xfTElCT0JKUyBpbnN0ZWFkIG9mIGludG8gTElCT0JKUy4KK0FDX0RFRlVOKFtnbF9SRVBMQUNFX0ZVTkNTXSwKKyAgW0FDX0NIRUNLX0ZVTkNTKFskMV0sICwgW2dsX0xJQk9CSigkYWNfZnVuYyldKV0pCisKKyMgTGlrZSBBQ19MSUJTT1VSQ0VTLCBleGNlcHQgdGhhdCBpdCBkb2VzIG5vdGhpbmcuCisjIFdlIHJlbHkgb24gRVhUUkFfbGliLi4uX1NPVVJDRVMgaW5zdGVhZC4KK0FDX0RFRlVOKFtnbF9MSUJTT1VSQ0VTXSwKKyAgW10pCisKKyMgVGhpcyBtYWNybyByZWNvcmRzIHRoZSBsaXN0IG9mIGZpbGVzIHdoaWNoIGhhdmUgYmVlbiBpbnN0YWxsZWQgYnkKKyMgZ251bGliLXRvb2wgYW5kIG1heSBiZSByZW1vdmVkIGJ5IGZ1dHVyZSBnbnVsaWItdG9vbCBpbnZvY2F0aW9ucy4KK0FDX0RFRlVOKFtnbF9GSUxFX0xJU1RdLCBbCisgIGJ1aWxkLWF1eC9hbm5vdW5jZS1nZW4KKyAgYnVpbGQtYXV4L2NvbmZpZy5ycGF0aAorICBidWlsZC1hdXgvZ251cGxvYWQKKyAgYnVpbGQtYXV4L2xpbmstd2FybmluZy5oCisgIGRvYy9mZGwudGV4aQorICBsaWIvX19mcGVuZGluZy5jCisgIGxpYi9fX2ZwZW5kaW5nLmgKKyAgbGliL2FsbG9jYS5jCisgIGxpYi9hbGxvY2FfLmgKKyAgbGliL2F0ZXhpdC5jCisgIGxpYi9iYXNlbmFtZS5jCisgIGxpYi9jYWxsb2MuYworICBsaWIvY2xvc2Utc3RyZWFtLmMKKyAgbGliL2Nsb3NlLXN0cmVhbS5oCisgIGxpYi9jbG9zZW91dC5jCisgIGxpYi9jbG9zZW91dC5oCisgIGxpYi9jb25maWcuY2hhcnNldAorICBsaWIvZGlybmFtZS5jCisgIGxpYi9kaXJuYW1lLmgKKyAgbGliL2Vycm9yLmMKKyAgbGliL2Vycm9yLmgKKyAgbGliL2V4aXRmYWlsLmMKKyAgbGliL2V4aXRmYWlsLmgKKyAgbGliL2ZyZWUuYworICBsaWIvZnVsbC13cml0ZS5jCisgIGxpYi9mdWxsLXdyaXRlLmgKKyAgbGliL2dldG9wdC5jCisgIGxpYi9nZXRvcHQxLmMKKyAgbGliL2dldG9wdF8uaAorICBsaWIvZ2V0b3B0X2ludC5oCisgIGxpYi9nZXR0ZXh0LmgKKyAgbGliL2ludHR5cGVzXy5oCisgIGxpYi9sb2NhbGNoYXJzZXQuYworICBsaWIvbG9jYWxjaGFyc2V0LmgKKyAgbGliL2xvbmctb3B0aW9ucy5jCisgIGxpYi9sb25nLW9wdGlvbnMuaAorICBsaWIvbWFsbG9jLmMKKyAgbGliL21lbWNoci5jCisgIGxpYi9tZW1jbXAuYworICBsaWIvbWVtY3B5LmMKKyAgbGliL21lbW1vdmUuYworICBsaWIvbWVtc2V0LmMKKyAgbGliL3F1b3RlYXJnLmMKKyAgbGliL3F1b3RlYXJnLmgKKyAgbGliL3JlYWxsb2MuYworICBsaWIvcmVmLWFkZC5zaW4KKyAgbGliL3JlZi1kZWwuc2luCisgIGxpYi9yZWdjb21wLmMKKyAgbGliL3JlZ2V4LmMKKyAgbGliL3JlZ2V4LmgKKyAgbGliL3JlZ2V4X2ludGVybmFsLmMKKyAgbGliL3JlZ2V4X2ludGVybmFsLmgKKyAgbGliL3JlZ2V4ZWMuYworICBsaWIvcmVuYW1lLmMKKyAgbGliL3JwbWF0Y2guYworICBsaWIvc2FmZS1yZWFkLmMKKyAgbGliL3NhZmUtcmVhZC5oCisgIGxpYi9zYWZlLXdyaXRlLmMKKyAgbGliL3NhZmUtd3JpdGUuaAorICBsaWIvc3RkYm9vbF8uaAorICBsaWIvc3RkaW50Xy5oCisgIGxpYi9zdGRsaWJfLmgKKyAgbGliL3N0cmNzcG4uYworICBsaWIvc3RyaW5nXy5oCisgIGxpYi9zdHJpcHNsYXNoLmMKKyAgbGliL3N0cm5kdXAuYworICBsaWIvc3Rybmxlbi5jCisgIGxpYi9zdHJ0b2QuYworICBsaWIvc3RydG9sLmMKKyAgbGliL3VuaXN0ZF8uaAorICBsaWIvdXRpbWUuYworICBsaWIvdmVyc2lvbi1ldGMtZnNmLmMKKyAgbGliL3ZlcnNpb24tZXRjLmMKKyAgbGliL3ZlcnNpb24tZXRjLmgKKyAgbGliL3djaGFyXy5oCisgIGxpYi93Y3R5cGVfLmgKKyAgbGliL3hhbGxvYy1kaWUuYworICBsaWIveGFsbG9jLmgKKyAgbGliL3htYWxsb2MuYworICBsaWIveHN0cm5kdXAuYworICBsaWIveHN0cm5kdXAuaAorICBtNC9hYnNvbHV0ZS1oZWFkZXIubTQKKyAgbTQvYWxsb2NhLm00CisgIG00L2Fzc2VydC5tNAorICBtNC9hdGV4aXQubTQKKyAgbTQvY2FsbG9jLm00CisgIG00L2Nsb3NlLXN0cmVhbS5tNAorICBtNC9jbG9zZW91dC5tNAorICBtNC9jb2Rlc2V0Lm00CisgIG00L2NvbmZpZy1oLm00CisgIG00L2Rpcm5hbWUubTQKKyAgbTQvZG9zLm00CisgIG00L2RvdWJsZS1zbGFzaC1yb290Lm00CisgIG00L2Vycm9yLm00CisgIG00L2V4aXRmYWlsLm00CisgIG00L2V4dGVuc2lvbnMubTQKKyAgbTQvZnBlbmRpbmcubTQKKyAgbTQvZnJlZS5tNAorICBtNC9nZXRvcHQubTQKKyAgbTQvZ2V0dGV4dC5tNAorICBtNC9nbGliYzIubTQKKyAgbTQvZ2xpYmMyMS5tNAorICBtNC9nbnVsaWItY29tbW9uLm00CisgIG00L2ljb252Lm00CisgIG00L2lubGluZS5tNAorICBtNC9pbnRkaXYwLm00CisgIG00L2ludGwubTQKKyAgbTQvaW50bGRpci5tNAorICBtNC9pbnRtYXgubTQKKyAgbTQvaW50dHlwZXMtcHJpLm00CisgIG00L2ludHR5cGVzLm00CisgIG00L2ludHR5cGVzX2gubTQKKyAgbTQvbGNtZXNzYWdlLm00CisgIG00L2xpYi1pZ25vcmUubTQKKyAgbTQvbGliLWxkLm00CisgIG00L2xpYi1saW5rLm00CisgIG00L2xpYi1wcmVmaXgubTQKKyAgbTQvbG9jYWxjaGFyc2V0Lm00CisgIG00L2xvY2subTQKKyAgbTQvbG9uZy1vcHRpb25zLm00CisgIG00L2xvbmdsb25nLm00CisgIG00L21icnRvd2MubTQKKyAgbTQvbWJzdGF0ZV90Lm00CisgIG00L21lbWNoci5tNAorICBtNC9tZW1jbXAubTQKKyAgbTQvbWVtY3B5Lm00CisgIG00L21lbW1vdmUubTQKKyAgbTQvbWVtc2V0Lm00CisgIG00L25scy5tNAorICBtNC9wby5tNAorICBtNC9wcmludGYtcG9zaXgubTQKKyAgbTQvcHJvZ3Rlc3QubTQKKyAgbTQvcXVvdGVhcmcubTQKKyAgbTQvcmVnZXgubTQKKyAgbTQvcmVuYW1lLm00CisgIG00L3JwbWF0Y2gubTQKKyAgbTQvc2FmZS1yZWFkLm00CisgIG00L3NhZmUtd3JpdGUubTQKKyAgbTQvc2l6ZV9tYXgubTQKKyAgbTQvc3NpemVfdC5tNAorICBtNC9zdGRhcmcubTQKKyAgbTQvc3RkYm9vbC5tNAorICBtNC9zdGRpbnQubTQKKyAgbTQvc3RkaW50X2gubTQKKyAgbTQvc3RkbGliX2gubTQKKyAgbTQvc3RyY3Nwbi5tNAorICBtNC9zdHJpbmdfaC5tNAorICBtNC9zdHJuZHVwLm00CisgIG00L3N0cm5sZW4ubTQKKyAgbTQvc3RydG9kLm00CisgIG00L3N0cnRvbC5tNAorICBtNC91aW50bWF4X3QubTQKKyAgbTQvdWxvbmdsb25nLm00CisgIG00L3VuaXN0ZF9oLm00CisgIG00L3V0aW1idWYubTQKKyAgbTQvdXRpbWUubTQKKyAgbTQvdXRpbWVzLW51bGwubTQKKyAgbTQvdXRpbWVzLm00CisgIG00L3Zpc2liaWxpdHkubTQKKyAgbTQvd2NoYXIubTQKKyAgbTQvd2NoYXJfdC5tNAorICBtNC93Y3R5cGUubTQKKyAgbTQvd2ludF90Lm00CisgIG00L3hhbGxvYy5tNAorICBtNC94c2l6ZS5tNAorICBtNC94c3RybmR1cC5tNAorXSkKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9tNC9pY29udi5tNCBiL3BhcnRlZC0xLjguNy9tNC9pY29udi5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjIzOWUzCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L200L2ljb252Lm00CkBAIC0wLDAgKzEsMTc5IEBACisjIGljb252Lm00IHNlcmlhbCBBTTUgKGdldHRleHQtMC4xNi4yKQorZG5sIENvcHlyaWdodCAoQykgMjAwMC0yMDAyLCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK2RubCBGcm9tIEJydW5vIEhhaWJsZS4KKworQUNfREVGVU4oW0FNX0lDT05WX0xJTktGTEFHU19CT0RZXSwKK1sKKyAgZG5sIFByZXJlcXVpc2l0ZXMgb2YgQUNfTElCX0xJTktGTEFHU19CT0RZLgorICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9QUkVGSVhdKQorICBBQ19SRVFVSVJFKFtBQ19MSUJfUlBBVEhdKQorCisgIGRubCBTZWFyY2ggZm9yIGxpYmljb252IGFuZCBkZWZpbmUgTElCSUNPTlYsIExUTElCSUNPTlYgYW5kIElOQ0lDT05WCisgIGRubCBhY2NvcmRpbmdseS4KKyAgQUNfTElCX0xJTktGTEFHU19CT0RZKFtpY29udl0pCitdKQorCitBQ19ERUZVTihbQU1fSUNPTlZfTElOS10sCitbCisgIGRubCBTb21lIHN5c3RlbXMgaGF2ZSBpY29udiBpbiBsaWJjLCBzb21lIGhhdmUgaXQgaW4gbGliaWNvbnYgKE9TRi8xIGFuZAorICBkbmwgdGhvc2Ugd2l0aCB0aGUgc3RhbmRhbG9uZSBwb3J0YWJsZSBHTlUgbGliaWNvbnYgaW5zdGFsbGVkKS4KKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKSBkbmwgZm9yIGNyb3NzLWNvbXBpbGVzCisKKyAgZG5sIFNlYXJjaCBmb3IgbGliaWNvbnYgYW5kIGRlZmluZSBMSUJJQ09OViwgTFRMSUJJQ09OViBhbmQgSU5DSUNPTlYKKyAgZG5sIGFjY29yZGluZ2x5LgorICBBQ19SRVFVSVJFKFtBTV9JQ09OVl9MSU5LRkxBR1NfQk9EWV0pCisKKyAgZG5sIEFkZCAkSU5DSUNPTlYgdG8gQ1BQRkxBR1MgYmVmb3JlIHBlcmZvcm1pbmcgdGhlIGZvbGxvd2luZyBjaGVja3MsCisgIGRubCBiZWNhdXNlIGlmIHRoZSB1c2VyIGhhcyBpbnN0YWxsZWQgbGliaWNvbnYgYW5kIG5vdCBkaXNhYmxlZCBpdHMgdXNlCisgIGRubCB2aWEgLS13aXRob3V0LWxpYmljb252LXByZWZpeCwgaGUgd2FudHMgdG8gdXNlIGl0LiBUaGUgZmlyc3QKKyAgZG5sIEFDX1RSWV9MSU5LIHdpbGwgdGhlbiBmYWlsLCB0aGUgc2Vjb25kIEFDX1RSWV9MSU5LIHdpbGwgc3VjY2VlZC4KKyAgYW1fc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorICBBQ19MSUJfQVBQRU5EVE9WQVIoW0NQUEZMQUdTXSwgWyRJTkNJQ09OVl0pCisKKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBpY29udl0sIGFtX2N2X2Z1bmNfaWNvbnYsIFsKKyAgICBhbV9jdl9mdW5jX2ljb252PSJubywgY29uc2lkZXIgaW5zdGFsbGluZyBHTlUgbGliaWNvbnYiCisgICAgYW1fY3ZfbGliX2ljb252PW5vCisgICAgQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxpY29udi5oPl0sCisgICAgICBbaWNvbnZfdCBjZCA9IGljb252X29wZW4oIiIsIiIpOworICAgICAgIGljb252KGNkLE5VTEwsTlVMTCxOVUxMLE5VTEwpOworICAgICAgIGljb252X2Nsb3NlKGNkKTtdLAorICAgICAgYW1fY3ZfZnVuY19pY29udj15ZXMpCisgICAgaWYgdGVzdCAiJGFtX2N2X2Z1bmNfaWNvbnYiICE9IHllczsgdGhlbgorICAgICAgYW1fc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgIExJQlM9IiRMSUJTICRMSUJJQ09OViIKKyAgICAgIEFDX1RSWV9MSU5LKFsjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8aWNvbnYuaD5dLAorICAgICAgICBbaWNvbnZfdCBjZCA9IGljb252X29wZW4oIiIsIiIpOworICAgICAgICAgaWNvbnYoY2QsTlVMTCxOVUxMLE5VTEwsTlVMTCk7CisgICAgICAgICBpY29udl9jbG9zZShjZCk7XSwKKyAgICAgICAgYW1fY3ZfbGliX2ljb252PXllcworICAgICAgICBhbV9jdl9mdW5jX2ljb252PXllcykKKyAgICAgIExJQlM9IiRhbV9zYXZlX0xJQlMiCisgICAgZmkKKyAgXSkKKyAgaWYgdGVzdCAiJGFtX2N2X2Z1bmNfaWNvbnYiID0geWVzOyB0aGVuCisgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciB3b3JraW5nIGljb252XSwgYW1fY3ZfZnVuY19pY29udl93b3JrcywgWworICAgICAgZG5sIFRoaXMgdGVzdHMgYWdhaW5zdCBidWdzIGluIEFJWCA1LjEgYW5kIEhQLVVYIDExLjExLgorICAgICAgYW1fc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgIGlmIHRlc3QgJGFtX2N2X2xpYl9pY29udiA9IHllczsgdGhlbgorICAgICAgICBMSUJTPSIkTElCUyAkTElCSUNPTlYiCisgICAgICBmaQorICAgICAgQUNfVFJZX1JVTihbCisjaW5jbHVkZSA8aWNvbnYuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KK2ludCBtYWluICgpCit7CisgIC8qIFRlc3QgYWdhaW5zdCBBSVggNS4xIGJ1ZzogRmFpbHVyZXMgYXJlIG5vdCBkaXN0aW5ndWlzaGFibGUgZnJvbSBzdWNjZXNzZnVsCisgICAgIHJldHVybnMuICAqLworICB7CisgICAgaWNvbnZfdCBjZF91dGY4X3RvXzg4NTkxID0gaWNvbnZfb3BlbiAoIklTTzg4NTktMSIsICJVVEYtOCIpOworICAgIGlmIChjZF91dGY4X3RvXzg4NTkxICE9IChpY29udl90KSgtMSkpCisgICAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyIGlucHV0W10gPSAiXDM0MlwyMDJcMjU0IjsgLyogRVVSTyBTSUdOICovCisgICAgICAgIGNoYXIgYnVmWzEwXTsKKyAgICAgICAgY29uc3QgY2hhciAqaW5wdHIgPSBpbnB1dDsKKyAgICAgICAgc2l6ZV90IGluYnl0ZXNsZWZ0ID0gc3RybGVuIChpbnB1dCk7CisgICAgICAgIGNoYXIgKm91dHB0ciA9IGJ1ZjsKKyAgICAgICAgc2l6ZV90IG91dGJ5dGVzbGVmdCA9IHNpemVvZiAoYnVmKTsKKyAgICAgICAgc2l6ZV90IHJlcyA9IGljb252IChjZF91dGY4X3RvXzg4NTkxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICoqKSAmaW5wdHIsICZpbmJ5dGVzbGVmdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3V0cHRyLCAmb3V0Ynl0ZXNsZWZ0KTsKKyAgICAgICAgaWYgKHJlcyA9PSAwKQorICAgICAgICAgIHJldHVybiAxOworICAgICAgfQorICB9CisjaWYgMCAvKiBUaGlzIGJ1ZyBjb3VsZCBiZSB3b3JrZWQgYXJvdW5kIGJ5IHRoZSBjYWxsZXIuICAqLworICAvKiBUZXN0IGFnYWluc3QgSFAtVVggMTEuMTEgYnVnOiBQb3NpdGl2ZSByZXR1cm4gdmFsdWUgaW5zdGVhZCBvZiAwLiAgKi8KKyAgeworICAgIGljb252X3QgY2RfODg1OTFfdG9fdXRmOCA9IGljb252X29wZW4gKCJ1dGY4IiwgImlzbzg4NTkxIik7CisgICAgaWYgKGNkXzg4NTkxX3RvX3V0ZjggIT0gKGljb252X3QpKC0xKSkKKyAgICAgIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgaW5wdXRbXSA9ICJcMzA0cmdlciBtaXQgYlwzNjZzZW4gQlwzNzRiY2hlbiBvaG5lIEF1Z2VubWFcMzM3IjsKKyAgICAgICAgY2hhciBidWZbNTBdOworICAgICAgICBjb25zdCBjaGFyICppbnB0ciA9IGlucHV0OworICAgICAgICBzaXplX3QgaW5ieXRlc2xlZnQgPSBzdHJsZW4gKGlucHV0KTsKKyAgICAgICAgY2hhciAqb3V0cHRyID0gYnVmOworICAgICAgICBzaXplX3Qgb3V0Ynl0ZXNsZWZ0ID0gc2l6ZW9mIChidWYpOworICAgICAgICBzaXplX3QgcmVzID0gaWNvbnYgKGNkXzg4NTkxX3RvX3V0ZjgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKiopICZpbnB0ciwgJmluYnl0ZXNsZWZ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvdXRwdHIsICZvdXRieXRlc2xlZnQpOworICAgICAgICBpZiAoKGludClyZXMgPiAwKQorICAgICAgICAgIHJldHVybiAxOworICAgICAgfQorICB9CisjZW5kaWYKKyAgLyogVGVzdCBhZ2FpbnN0IEhQLVVYIDExLjExIGJ1ZzogTm8gY29udmVydGVyIGZyb20gRVVDLUpQIHRvIFVURi04IGlzCisgICAgIHByb3ZpZGVkLiAgKi8KKyAgaWYgKC8qIFRyeSBzdGFuZGFyZGl6ZWQgbmFtZXMuICAqLworICAgICAgaWNvbnZfb3BlbiAoIlVURi04IiwgIkVVQy1KUCIpID09IChpY29udl90KSgtMSkKKyAgICAgIC8qIFRyeSBJUklYLCBPU0YvMSBuYW1lcy4gICovCisgICAgICAmJiBpY29udl9vcGVuICgiVVRGLTgiLCAiZXVjSlAiKSA9PSAoaWNvbnZfdCkoLTEpCisgICAgICAvKiBUcnkgQUlYIG5hbWVzLiAgKi8KKyAgICAgICYmIGljb252X29wZW4gKCJVVEYtOCIsICJJQk0tZXVjSlAiKSA9PSAoaWNvbnZfdCkoLTEpCisgICAgICAvKiBUcnkgSFAtVVggbmFtZXMuICAqLworICAgICAgJiYgaWNvbnZfb3BlbiAoInV0ZjgiLCAiZXVjSlAiKSA9PSAoaWNvbnZfdCkoLTEpKQorICByZXR1cm4gMDsKK31dLCBbYW1fY3ZfZnVuY19pY29udl93b3Jrcz15ZXNdLCBbYW1fY3ZfZnVuY19pY29udl93b3Jrcz1ub10sCisgICAgICAgIFtjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgYWl4KiB8IGhwdXgqKSBhbV9jdl9mdW5jX2ljb252X3dvcmtzPSJndWVzc2luZyBubyIgOzsKKyAgICAgICAgICAgKikgICAgICAgICAgICBhbV9jdl9mdW5jX2ljb252X3dvcmtzPSJndWVzc2luZyB5ZXMiIDs7CisgICAgICAgICBlc2FjXSkKKyAgICAgIExJQlM9IiRhbV9zYXZlX0xJQlMiCisgICAgXSkKKyAgICBjYXNlICIkYW1fY3ZfZnVuY19pY29udl93b3JrcyIgaW4KKyAgICAgICpubykgYW1fZnVuY19pY29udj1ubyBhbV9jdl9saWJfaWNvbnY9bm8gOzsKKyAgICAgICopICAgYW1fZnVuY19pY29udj15ZXMgOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICBhbV9mdW5jX2ljb252PW5vIGFtX2N2X2xpYl9pY29udj1ubworICBmaQorICBpZiB0ZXN0ICIkYW1fZnVuY19pY29udiIgPSB5ZXM7IHRoZW4KKyAgICBBQ19ERUZJTkUoSEFWRV9JQ09OViwgMSwKKyAgICAgIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGljb252KCkgZnVuY3Rpb24gYW5kIGl0IHdvcmtzLl0pCisgIGZpCisgIGlmIHRlc3QgIiRhbV9jdl9saWJfaWNvbnYiID0geWVzOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gbGluayB3aXRoIGxpYmljb252XSkKKyAgICBBQ19NU0dfUkVTVUxUKFskTElCSUNPTlZdKQorICBlbHNlCisgICAgZG5sIElmICRMSUJJQ09OViBkaWRuJ3QgbGVhZCB0byBhIHVzYWJsZSBsaWJyYXJ5LCB3ZSBkb24ndCBuZWVkICRJTkNJQ09OVgorICAgIGRubCBlaXRoZXIuCisgICAgQ1BQRkxBR1M9IiRhbV9zYXZlX0NQUEZMQUdTIgorICAgIExJQklDT05WPQorICAgIExUTElCSUNPTlY9CisgIGZpCisgIEFDX1NVQlNUKExJQklDT05WKQorICBBQ19TVUJTVChMVExJQklDT05WKQorXSkKKworQUNfREVGVU4oW0FNX0lDT05WXSwKK1sKKyAgQU1fSUNPTlZfTElOSworICBpZiB0ZXN0ICIkYW1fY3ZfZnVuY19pY29udiIgPSB5ZXM7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBpY29udiBkZWNsYXJhdGlvbl0pCisgICAgQUNfQ0FDSEVfVkFMKGFtX2N2X3Byb3RvX2ljb252LCBbCisgICAgICBBQ19UUllfQ09NUElMRShbCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8aWNvbnYuaD4KK2V4dGVybgorI2lmZGVmIF9fY3BsdXNwbHVzCisiQyIKKyNlbmRpZgorI2lmIGRlZmluZWQoX19TVERDX18pIHx8IGRlZmluZWQoX19jcGx1c3BsdXMpCitzaXplX3QgaWNvbnYgKGljb252X3QgY2QsIGNoYXIgKiAqaW5idWYsIHNpemVfdCAqaW5ieXRlc2xlZnQsIGNoYXIgKiAqb3V0YnVmLCBzaXplX3QgKm91dGJ5dGVzbGVmdCk7CisjZWxzZQorc2l6ZV90IGljb252KCk7CisjZW5kaWYKK10sIFtdLCBhbV9jdl9wcm90b19pY29udl9hcmcxPSIiLCBhbV9jdl9wcm90b19pY29udl9hcmcxPSJjb25zdCIpCisgICAgICBhbV9jdl9wcm90b19pY29udj0iZXh0ZXJuIHNpemVfdCBpY29udiAoaWNvbnZfdCBjZCwgJGFtX2N2X3Byb3RvX2ljb252X2FyZzEgY2hhciAqICppbmJ1Ziwgc2l6ZV90ICppbmJ5dGVzbGVmdCwgY2hhciAqICpvdXRidWYsIHNpemVfdCAqb3V0Ynl0ZXNsZWZ0KTsiXSkKKyAgICBhbV9jdl9wcm90b19pY29udj1gZWNobyAiWyRdYW1fY3ZfcHJvdG9faWNvbnYiIHwgdHIgLXMgJyAnIHwgc2VkIC1lICdzLyggLygvJ2AKKyAgICBBQ19NU0dfUkVTVUxUKFskXXthY190Oi0KKyAgICAgICAgIH1bJF1hbV9jdl9wcm90b19pY29udikKKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoSUNPTlZfQ09OU1QsICRhbV9jdl9wcm90b19pY29udl9hcmcxLAorICAgICAgW0RlZmluZSBhcyBjb25zdCBpZiB0aGUgZGVjbGFyYXRpb24gb2YgaWNvbnYoKSBuZWVkcyBjb25zdC5dKQorICBmaQorXSkKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9tNC9pbmxpbmUubTQgYi9wYXJ0ZWQtMS44LjcvbTQvaW5saW5lLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwNzA3NmMKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbTQvaW5saW5lLm00CkBAIC0wLDAgKzEsNDAgQEAKKyMgaW5saW5lLm00IHNlcmlhbCAzCitkbmwgQ29weXJpZ2h0IChDKSAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK2RubCBUZXN0IGZvciB0aGUgJ2lubGluZScga2V5d29yZCBvciBlcXVpdmFsZW50LgorZG5sIERlZmluZSAnaW5saW5lJyB0byBhIHN1cHBvcnRlZCBlcXVpdmFsZW50LCBvciB0byBub3RoaW5nIGlmIG5vdCBzdXBwb3J0ZWQsCitkbmwgbGlrZSBBQ19DX0lOTElORSBkb2VzLiAgQWxzbywgZGVmaW5lIEhBVkVfSU5MSU5FIGlmICdpbmxpbmUnIG9yIGFuCitkbmwgZXF1aXZhbGVudCBpcyBlZmZlY3RpdmVseSBzdXBwb3J0ZWQsIGkuZS4gaWYgdGhlIGNvbXBpbGVyIGlzIGxpa2VseSB0bworZG5sIGRyb3AgdW51c2VkICdzdGF0aWMgaW5saW5lJyBmdW5jdGlvbnMuCitBQ19ERUZVTihbZ2xfSU5MSU5FXSwKK1sKKyAgQUNfUkVRVUlSRShbQUNfQ19JTkxJTkVdKQorICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciB0aGUgY29tcGlsZXIgZ2VuZXJhbGx5IHJlc3BlY3RzIGlubGluZV0sCisgICAgW2dsX2N2X2NfaW5saW5lX2VmZmVjdGl2ZV0sCisgICAgW2lmIHRlc3QgJGFjX2N2X2NfaW5saW5lID0gbm87IHRoZW4KKyAgICAgICBnbF9jdl9jX2lubGluZV9lZmZlY3RpdmU9bm8KKyAgICAgZWxzZQorICAgICAgIGRubCBHQ0MgZGVmaW5lcyBfX05PX0lOTElORV9fIGlmIG5vdCBvcHRpbWl6aW5nIG9yIGlmIC1mbm8taW5saW5lIGlzCisgICAgICAgZG5sIHNwZWNpZmllZC4KKyAgICAgICBkbmwgVXNlIEFDX0NPTVBJTEVfSUZFTFNFIGhlcmUsIG5vdCBBQ19FR1JFUF9DUFAsIGJlY2F1c2UgdGhlIHJlc3VsdAorICAgICAgIGRubCBkZXBlbmRzIG9uIG9wdGltaXphdGlvbiBmbGFncywgd2hpY2ggY2FuIGJlIGluIENGTEFHUy4KKyAgICAgICBkbmwgKEFDX0VHUkVQX0NQUCBsb29rcyBvbmx5IGF0IHRoZSBDUFBGTEFHUy4pCisgICAgICAgQUNfQ09NUElMRV9JRkVMU0UoCisgICAgICAgICBbQUNfTEFOR19QUk9HUkFNKFtbXV0sCisgICAgICAgICAgIFtbI2lmZGVmIF9fTk9fSU5MSU5FX18KKyAgICAgICAgICAgICAgICNlcnJvciAiaW5saW5lIGlzIG5vdCBlZmZlY3RpdmUiCisgICAgICAgICAgICAgI2VuZGlmXV0pXSwKKyAgICAgICAgIFtnbF9jdl9jX2lubGluZV9lZmZlY3RpdmU9eWVzXSwKKyAgICAgICAgIFtnbF9jdl9jX2lubGluZV9lZmZlY3RpdmU9bm9dKQorICAgICBmaQorICAgIF0pCisgIGlmIHRlc3QgJGdsX2N2X2NfaW5saW5lX2VmZmVjdGl2ZSA9IHllczsgdGhlbgorICAgIEFDX0RFRklORShbSEFWRV9JTkxJTkVdLCAxLAorICAgICAgW0RlZmluZSB0byAxIGlmIHRoZSBjb21waWxlciBzdXBwb3J0cyBvbmUgb2YgdGhlIGtleXdvcmRzCisgICAgICAgJ2lubGluZScsICdfX2lubGluZV9fJywgJ19faW5saW5lJyBhbmQgZWZmZWN0aXZlbHkgaW5saW5lcworICAgICAgIGZ1bmN0aW9ucyBtYXJrZWQgYXMgc3VjaC5dKQorICBmaQorXSkKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9tNC9pbnR0eXBlcy1wcmkubTQgYi9wYXJ0ZWQtMS44LjcvbTQvaW50dHlwZXMtcHJpLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjN2Y4OTQKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbTQvaW50dHlwZXMtcHJpLm00CkBAIC0wLDAgKzEsMzYgQEAKKyMgaW50dHlwZXMtcHJpLm00IHNlcmlhbCA0IChnZXR0ZXh0LTAuMTYpCitkbmwgQ29weXJpZ2h0IChDKSAxOTk3LTIwMDIsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorCitBQ19QUkVSRVEoMi41MikKKworIyBEZWZpbmUgUFJJX01BQ1JPU19CUk9LRU4gaWYgPGludHR5cGVzLmg+IGV4aXN0cyBhbmQgZGVmaW5lcyB0aGUgUFJJKgorIyBtYWNyb3MgdG8gbm9uLXN0cmluZyB2YWx1ZXMuICBUaGlzIGlzIHRoZSBjYXNlIG9uIEFJWCA0LjMuMy4KKworQUNfREVGVU4oW2d0X0lOVFRZUEVTX1BSSV0sCitbCisgIEFDX0NIRUNLX0hFQURFUlMoW2ludHR5cGVzLmhdKQorICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfaW50dHlwZXNfaCA9IHllczsgdGhlbgorICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHRoZSBpbnR0eXBlcy5oIFBSSXhOTiBtYWNyb3MgYXJlIGJyb2tlbl0sCisgICAgICBndF9jdl9pbnR0eXBlc19wcmlfYnJva2VuLAorICAgICAgWworICAgICAgICBBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPGludHR5cGVzLmg+CisjaWZkZWYgUFJJZDMyCitjaGFyICpwID0gUFJJZDMyOworI2VuZGlmCitdLCBbXSwgZ3RfY3ZfaW50dHlwZXNfcHJpX2Jyb2tlbj1ubywgZ3RfY3ZfaW50dHlwZXNfcHJpX2Jyb2tlbj15ZXMpCisgICAgICBdKQorICBmaQorICBpZiB0ZXN0ICIkZ3RfY3ZfaW50dHlwZXNfcHJpX2Jyb2tlbiIgPSB5ZXM7IHRoZW4KKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoUFJJX01BQ1JPU19CUk9LRU4sIDEsCisgICAgICBbRGVmaW5lIGlmIDxpbnR0eXBlcy5oPiBleGlzdHMgYW5kIGRlZmluZXMgdW51c2FibGUgUFJJKiBtYWNyb3MuXSkKKyAgICBQUklfTUFDUk9TX0JST0tFTj0xCisgIGVsc2UKKyAgICBQUklfTUFDUk9TX0JST0tFTj0wCisgIGZpCisgIEFDX1NVQlNUKFtQUklfTUFDUk9TX0JST0tFTl0pCitdKQpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L200L2ludHR5cGVzLm00IGIvcGFydGVkLTEuOC43L200L2ludHR5cGVzLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5NWFjZTkKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbTQvaW50dHlwZXMubTQKQEAgLTAsMCArMSwyMjMgQEAKKyMgaW50dHlwZXMubTQgc2VyaWFsIDgKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitkbmwgRnJvbSBEZXJlayBQcmljZSwgQnJ1bm8gSGFpYmxlLgorZG5sIFRlc3Qgd2hldGhlciA8aW50dHlwZXMuaD4gaXMgc3VwcG9ydGVkIG9yIG11c3QgYmUgc3Vic3RpdHV0ZWQuCisKK0FDX0RFRlVOKFtnbF9JTlRUWVBFU19IXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfU1RESU5UX0hdKQorICBBQ19SRVFVSVJFKFtndF9JTlRUWVBFU19QUkldKQorICBBQ19DSEVDS19ERUNMU19PTkNFKFtpbWF4YWJzXSkKKyAgQUNfQ0hFQ0tfREVDTFNfT05DRShbaW1heGRpdl0pCisgIEFDX0NIRUNLX0RFQ0xTX09OQ0UoW3N0cnRvaW1heF0pCisgIEFDX0NIRUNLX0RFQ0xTX09OQ0UoW3N0cnRvdW1heF0pCisKKyAgZG5sIE5vdyBzZWUgaWYgd2UgbmVlZCBhIHN1YnN0aXR1dGUgPGludHR5cGVzLmg+LgorICBkbmwgQSBjb21wbGV0ZSA8aW50dHlwZXMuaD4gcmVxdWlyZXMKKyAgZG5sICAgLSBhIGNvbXBsZXRlIDxzdGRpbnQuaD4sCisgIGRubCAgIC0gdGhlIGV4aXN0ZW5jZSBvZiBhbiA8aW50dHlwZXMuaD4sCisgIGRubCAgIC0gdGhhdCBpbWF4YWJzLCBpbWF4ZGl2LCBzdHJ0b2ltYXgsIHN0cnRvdW1heCBhcmUgZGVjbGFyZWQsCisgIGRubCAgIC0gc29tZSBhZGRpdGlvbmFsIHRlc3RzLgorICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBpbnR0eXBlcy5oIGNvbmZvcm1zIHRvIEM5OV0sCisgICAgW2dsX2N2X2hlYWRlcl93b3JraW5nX2ludHR5cGVzX2hdLAorICAgIFtnbF9jdl9oZWFkZXJfd29ya2luZ19pbnR0eXBlc19oPW5vCisgICAgIGlmIHRlc3QgIiRnbF9jdl9oZWFkZXJfd29ya2luZ19zdGRpbnRfaCIgPSB5ZXMgXAorCSYmIHRlc3QgJGFjX2N2X2hlYWRlcl9pbnR0eXBlc19oID0geWVzIFwKKwkmJiB0ZXN0ICIkYWNfY3ZfaGF2ZV9kZWNsX2ltYXhhYnMiID0geWVzIFwKKwkmJiB0ZXN0ICIkYWNfY3ZfaGF2ZV9kZWNsX2ltYXhkaXYiID0geWVzIFwKKwkmJiB0ZXN0ICIkYWNfY3ZfaGF2ZV9kZWNsX3N0cnRvaW1heCIgPSB5ZXMgXAorCSYmIHRlc3QgIiRhY19jdl9oYXZlX2RlY2xfc3RydG91bWF4IiA9IHllczsgdGhlbgorICAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKwkgQUNfTEFOR19QUk9HUkFNKFsKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JPUyAxIC8qIHRvIG1ha2UgaXQgd29yayBhbHNvIGluIEMrKyBtb2RlICovCisjZGVmaW5lIF9fU1REQ19DT05TVEFOVF9NQUNST1MgMSAvKiB0byBtYWtlIGl0IHdvcmsgYWxzbyBpbiBDKysgbW9kZSAqLworI2RlZmluZSBfX1NURENfRk9STUFUX01BQ1JPUyAxIC8qIHRvIG1ha2UgaXQgd29yayBhbHNvIGluIEMrKyBtb2RlICovCisjaW5jbHVkZSBBQlNPTFVURV9JTlRUWVBFU19ICisKKy8qIE5vIG5lZWQgdG8gZHVwbGljYXRlIHRoZSB0ZXN0cyBvZiBzdGRpbnQubTQ7IHRoZXkgYXJlIHN1YnN1bWVkIGJ5CisgICAkZ2xfY3ZfaGVhZGVyX3dvcmtpbmdfc3RkaW50X2ggPSB5ZXMuICAqLworCisvKiBUZXN0cyBmb3IgbWFjcm9zIHN1cHBvc2VkIHRvIGJlIGRlZmluZWQgaW4gaW50dHlwZXMuaC4gICovCisKK2NvbnN0IGNoYXIgKmsgPSAvKiBpbXBsaWNpdCBzdHJpbmcgY29uY2F0ZW5hdGlvbiAqLworI2lmZGVmIElOVDhfTUFYCisgIFBSSWQ4IFBSSWk4CisjZW5kaWYKKyNpZmRlZiBVSU5UOF9NQVgKKyAgUFJJbzggUFJJdTggUFJJeDggUFJJWDgKKyNlbmRpZgorI2lmZGVmIElOVDE2X01BWAorICBQUklkMTYgUFJJaTE2CisjZW5kaWYKKyNpZmRlZiBVSU5UMTZfTUFYCisgIFBSSW8xNiBQUkl1MTYgUFJJeDE2IFBSSVgxNgorI2VuZGlmCisjaWZkZWYgSU5UMzJfTUFYCisgIFBSSWQzMiBQUklpMzIKKyNlbmRpZgorI2lmZGVmIFVJTlQzMl9NQVgKKyAgUFJJbzMyIFBSSXUzMiBQUkl4MzIgUFJJWDMyCisjZW5kaWYKKyNpZmRlZiBJTlQ2NF9NQVgKKyAgUFJJZDY0IFBSSWk2NAorI2VuZGlmCisjaWZkZWYgVUlOVDY0X01BWAorICBQUklvNjQgUFJJdTY0IFBSSXg2NCBQUklYNjQKKyNlbmRpZgorICBQUklkTEVBU1Q4IFBSSWlMRUFTVDggUFJJb0xFQVNUOCBQUkl1TEVBU1Q4IFBSSXhMRUFTVDggUFJJWExFQVNUOAorICBQUklkTEVBU1QxNiBQUklpTEVBU1QxNiBQUklvTEVBU1QxNiBQUkl1TEVBU1QxNiBQUkl4TEVBU1QxNiBQUklYTEVBU1QxNgorICBQUklkTEVBU1QzMiBQUklpTEVBU1QzMiBQUklvTEVBU1QzMiBQUkl1TEVBU1QzMiBQUkl4TEVBU1QzMiBQUklYTEVBU1QzMgorICBQUklkTEVBU1Q2NCBQUklpTEVBU1Q2NAorICBQUklvTEVBU1Q2NCBQUkl1TEVBU1Q2NCBQUkl4TEVBU1Q2NCBQUklYTEVBU1Q2NAorICBQUklkRkFTVDggUFJJaUZBU1Q4IFBSSW9GQVNUOCBQUkl1RkFTVDggUFJJeEZBU1Q4IFBSSVhGQVNUOAorICBQUklkRkFTVDE2IFBSSWlGQVNUMTYgUFJJb0ZBU1QxNiBQUkl1RkFTVDE2IFBSSXhGQVNUMTYgUFJJWEZBU1QxNgorICBQUklkRkFTVDMyIFBSSWlGQVNUMzIgUFJJb0ZBU1QzMiBQUkl1RkFTVDMyIFBSSXhGQVNUMzIgUFJJWEZBU1QzMgorICBQUklkRkFTVDY0IFBSSWlGQVNUNjQKKyAgUFJJb0ZBU1Q2NCBQUkl1RkFTVDY0IFBSSXhGQVNUNjQgUFJJWEZBU1Q2NAorICBQUklkTUFYIFBSSWlNQVggUFJJb01BWCBQUkl1TUFYIFBSSXhNQVggUFJJWE1BWAorI2lmZGVmIElOVFBUUl9NQVgKKyAgUFJJZFBUUiBQUklpUFRSCisjZW5kaWYKKyNpZmRlZiBVSU5UUFRSX01BWAorICBQUklvUFRSIFBSSXVQVFIgUFJJeFBUUiBQUklYUFRSCisjZW5kaWYKKyAgOworY29uc3QgY2hhciAqbCA9IC8qIGltcGxpY2l0IHN0cmluZyBjb25jYXRlbmF0aW9uICovCisjaWZkZWYgSU5UOF9NQVgKKyAgU0NOZDggU0NOaTgKKyNlbmRpZgorI2lmZGVmIFVJTlQ4X01BWAorICBTQ05vOCBTQ051OCBTQ054OAorI2VuZGlmCisjaWZkZWYgSU5UMTZfTUFYCisgIFNDTmQxNiBTQ05pMTYKKyNlbmRpZgorI2lmZGVmIFVJTlQxNl9NQVgKKyAgU0NObzE2IFNDTnUxNiBTQ054MTYKKyNlbmRpZgorI2lmZGVmIElOVDMyX01BWAorICBTQ05kMzIgU0NOaTMyCisjZW5kaWYKKyNpZmRlZiBVSU5UMzJfTUFYCisgIFNDTm8zMiBTQ051MzIgU0NOeDMyCisjZW5kaWYKKyNpZmRlZiBJTlQ2NF9NQVgKKyAgU0NOZDY0IFNDTmk2NAorI2VuZGlmCisjaWZkZWYgVUlOVDY0X01BWAorICBTQ05vNjQgU0NOdTY0IFNDTng2NAorI2VuZGlmCisgIFNDTmRMRUFTVDggU0NOaUxFQVNUOCBTQ05vTEVBU1Q4IFNDTnVMRUFTVDggU0NOeExFQVNUOAorICBTQ05kTEVBU1QxNiBTQ05pTEVBU1QxNiBTQ05vTEVBU1QxNiBTQ051TEVBU1QxNiBTQ054TEVBU1QxNgorICBTQ05kTEVBU1QzMiBTQ05pTEVBU1QzMiBTQ05vTEVBU1QzMiBTQ051TEVBU1QzMiBTQ054TEVBU1QzMgorICBTQ05kTEVBU1Q2NCBTQ05pTEVBU1Q2NAorICBTQ05vTEVBU1Q2NCBTQ051TEVBU1Q2NCBTQ054TEVBU1Q2NAorICBTQ05kRkFTVDggU0NOaUZBU1Q4IFNDTm9GQVNUOCBTQ051RkFTVDggU0NOeEZBU1Q4CisgIFNDTmRGQVNUMTYgU0NOaUZBU1QxNiBTQ05vRkFTVDE2IFNDTnVGQVNUMTYgU0NOeEZBU1QxNgorICBTQ05kRkFTVDMyIFNDTmlGQVNUMzIgU0NOb0ZBU1QzMiBTQ051RkFTVDMyIFNDTnhGQVNUMzIKKyAgU0NOZEZBU1Q2NCBTQ05pRkFTVDY0CisgIFNDTm9GQVNUNjQgU0NOdUZBU1Q2NCBTQ054RkFTVDY0CisgIFNDTmRNQVggU0NOaU1BWCBTQ05vTUFYIFNDTnVNQVggU0NOeE1BWAorI2lmZGVmIElOVFBUUl9NQVgKKyAgU0NOZFBUUiBTQ05pUFRSCisjZW5kaWYKKyNpZmRlZiBVSU5UUFRSX01BWAorICBTQ05vUFRSIFNDTnVQVFIgU0NOeFBUUgorI2VuZGlmCisgIDsKKwkgXSldLAorCSBbZ2xfY3ZfaGVhZGVyX3dvcmtpbmdfaW50dHlwZXNfaD15ZXNdKQorICAgICBmaV0pCisKKyAgZG5sIE92ZXJyaWRlIDxpbnR0eXBlcy5oPiBhbHdheXMsIHNvIHRoYXQgdGhlIHBvcnRhYmlsaXR5IHdhcm5pbmdzIHdvcmsuCisgIGlmIGZhbHNlICYmIHRlc3QgJGdsX2N2X2hlYWRlcl93b3JraW5nX2ludHR5cGVzX2ggPSB5ZXM7IHRoZW4KKyAgICBkbmwgVXNlIHRoZSBleGlzdGluZyA8aW50dHlwZXMuaD4uCisgICAgSU5UVFlQRVNfSD0nJworICBlbHNlCisKKyAgICBBQ19SRVFVSVJFKFtnbF9JTlRUWVBFU19IX0RFRkFVTFRTXSkKKyAgICBkbmwgQUNfSU5DTFVERVNfREVGQVVMVCBkZWZpbmVzICRhY19jdl9oZWFkZXJfaW50dHlwZXNfaC4KKyAgICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfaW50dHlwZXNfaCA9IHllczsgdGhlbgorICAgICAgZ2xfQUJTT0xVVEVfSEVBREVSKFtpbnR0eXBlcy5oXSkKKyAgICAgIEFCU09MVVRFX0lOVFRZUEVTX0g9XCIkZ2xfY3ZfYWJzb2x1dGVfaW50dHlwZXNfaFwiCisgICAgZWxzZQorICAgICAgQUJTT0xVVEVfSU5UVFlQRVNfSD1cIm5vL3N1Y2gvZmlsZS9pbnR0eXBlcy5oXCIKKyAgICBmaQorICAgIEFDX1NVQlNUKFtBQlNPTFVURV9JTlRUWVBFU19IXSkKKworICAgIFBSSVBUUl9QUkVGSVg9CisgICAgaWYgdGVzdCAtbiAiJFNURElOVF9IIjsgdGhlbgorICAgICAgZG5sIFVzaW5nIHRoZSBnbnVsaWIgPHN0ZGludC5oPi4gSXQgYWx3YXlzIGRlZmluZXMgaW50cHRyX3QgdG8gJ2xvbmcnLgorICAgICAgUFJJUFRSX1BSRUZJWD0nImwiJworICAgIGVsc2UKKyAgICAgIGRubCBVc2luZyB0aGUgc3lzdGVtJ3MgPHN0ZGludC5oPi4KKyAgICAgIGZvciBnbHBmeCBpbiAnJyBsIGxsIEk2NDsgZG8KKyAgICAgICAgY2FzZSAkZ2xwZnggaW4KKyAgICAgICAgICAnJykgIGdsdHlwZTE9J2ludCc7OworICAgICAgICAgIGwpICAgZ2x0eXBlMT0nbG9uZyBpbnQnOzsKKyAgICAgICAgICBsbCkgIGdsdHlwZTE9J2xvbmcgbG9uZyBpbnQnOzsKKyAgICAgICAgICBJNjQpIGdsdHlwZTE9J19faW50NjQnOzsKKyAgICAgICAgZXNhYworICAgICAgICBBQ19DT01QSUxFX0lGRUxTRSgKKyAgICAgICAgICBbQUNfTEFOR19QUk9HUkFNKFsjaW5jbHVkZSA8c3RkaW50Lmg+CisgICAgICAgICAgICAgZXh0ZXJuIGludHB0cl90IGZvbzsKKyAgICAgICAgICAgICBleHRlcm4gJGdsdHlwZTEgZm9vO10pXSwKKyAgICAgICAgICBbUFJJUFRSX1BSRUZJWD0nIickZ2xwZngnIiddKQorICAgICAgICB0ZXN0IC1uICIkUFJJUFRSX1BSRUZJWCIgJiYgYnJlYWsKKyAgICAgIGRvbmUKKyAgICBmaQorICAgIEFDX1NVQlNUKFtQUklQVFJfUFJFRklYXSkKKworICAgIGlmIHRlc3QgIiRhY19jdl9oYXZlX2RlY2xfaW1heGFicyIgPSB5ZXM7IHRoZW4KKyAgICAgIEhBVkVfREVDTF9JTUFYQUJTPTEKKyAgICBlbHNlCisgICAgICBIQVZFX0RFQ0xfSU1BWEFCUz0wCisgICAgZmkKKworICAgIGlmIHRlc3QgIiRhY19jdl9oYXZlX2RlY2xfaW1heGRpdiIgPSB5ZXM7IHRoZW4KKyAgICAgIEhBVkVfREVDTF9JTUFYRElWPTEKKyAgICBlbHNlCisgICAgICBIQVZFX0RFQ0xfSU1BWERJVj0wCisgICAgZmkKKworICAgIGlmIHRlc3QgIiRhY19jdl9oYXZlX2RlY2xfc3RydG9pbWF4IiA9IHllczsgdGhlbgorICAgICAgSEFWRV9ERUNMX1NUUlRPSU1BWD0xCisgICAgZWxzZQorICAgICAgSEFWRV9ERUNMX1NUUlRPSU1BWD0wCisgICAgZmkKKworICAgIGlmIHRlc3QgIiRhY19jdl9oYXZlX2RlY2xfc3RydG91bWF4IiA9IHllczsgdGhlbgorICAgICAgSEFWRV9ERUNMX1NUUlRPVU1BWD0xCisgICAgZWxzZQorICAgICAgSEFWRV9ERUNMX1NUUlRPVU1BWD0wCisgICAgZmkKKworICAgIElOVFRZUEVTX0g9J2ludHR5cGVzLmgnCisgIGZpCisgIEFDX1NVQlNUKElOVFRZUEVTX0gpCitdKQorCitBQ19ERUZVTihbZ2xfSU5UVFlQRVNfTU9EVUxFX0lORElDQVRPUl0sCitbCisgIGRubCBVc2UgQUNfUkVRVUlSRSBoZXJlLCBzbyB0aGF0IHRoZSBkZWZhdWx0IHNldHRpbmdzIGFyZSBleHBhbmRlZCBvbmNlIG9ubHkuCisgIEFDX1JFUVVJUkUoW2dsX0lOVFRZUEVTX0hfREVGQVVMVFNdKQorICBHTlVMSUJfW11tNF90cmFuc2xpdChbJDFdLFthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLV0sW0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fXSk9MQorXSkKKworQUNfREVGVU4oW2dsX0lOVFRZUEVTX0hfREVGQVVMVFNdLAorWworICBHTlVMSUJfSU1BWEFCUz0wOyAgICAgIEFDX1NVQlNUKFtHTlVMSUJfSU1BWEFCU10pCisgIEdOVUxJQl9JTUFYRElWPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9JTUFYRElWXSkKKyAgR05VTElCX1NUUlRPSU1BWD0wOyAgICBBQ19TVUJTVChbR05VTElCX1NUUlRPSU1BWF0pCisgIEdOVUxJQl9TVFJUT1VNQVg9MDsgICAgQUNfU1VCU1QoW0dOVUxJQl9TVFJUT1VNQVhdKQorICBkbmwgQXNzdW1lIHByb3BlciBHTlUgYmVoYXZpb3IgdW5sZXNzIGFub3RoZXIgbW9kdWxlIHNheXMgb3RoZXJ3aXNlLgorICBIQVZFX0RFQ0xfSU1BWEFCUz0xOyAgIEFDX1NVQlNUKFtIQVZFX0RFQ0xfSU1BWEFCU10pCisgIEhBVkVfREVDTF9JTUFYRElWPTE7ICAgQUNfU1VCU1QoW0hBVkVfREVDTF9JTUFYRElWXSkKKyAgSEFWRV9ERUNMX1NUUlRPSU1BWD0xOyBBQ19TVUJTVChbSEFWRV9ERUNMX1NUUlRPSU1BWF0pCisgIEhBVkVfREVDTF9TVFJUT1VNQVg9MTsgQUNfU1VCU1QoW0hBVkVfREVDTF9TVFJUT1VNQVhdKQorXSkKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9tNC9saWItaWdub3JlLm00IGIvcGFydGVkLTEuOC43L200L2xpYi1pZ25vcmUubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUxOGY4MQotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9tNC9saWItaWdub3JlLm00CkBAIC0wLDAgKzEsNDMgQEAKKyMgSWYgcG9zc2libGUsIGlnbm9yZSBsaWJyYXJpZXMgdGhhdCBhcmUgbm90IGRlcGVuZGVkIG9uLgorCitkbmwgQ29weXJpZ2h0IChDKSAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK2RubCBXcml0dGVuIGJ5IFBhdWwgRWdnZXJ0LgorCitBQ19ERUZVTihbZ2xfSUdOT1JFX1VOVVNFRF9MSUJSQVJJRVNdLAorWworICBBQ19DQUNIRV9DSEVDSyhbZm9yIGZsYWcgdG8gaWdub3JlIHVudXNlZCBsaWJyYXJpZXNdLAorICAgIFtnbF9jdl9pZ25vcmVfdW51c2VkX2xpYnJhcmllc10sCisgICAgW2dsX2N2X2lnbm9yZV91bnVzZWRfbGlicmFyaWVzPW5vbmUKKyAgICAgZ2xfc2F2ZWRfbGRmbGFncz0kTERGTEFHUworICAgICBnbF9zYXZlZF9saWJzPSRMSUJTCisgICAgICMgTGluayB3aXRoIC1sbSB0byBkZXRlY3QgYmludXRpbHMgMi4xNiBidWcgd2l0aCAtLWFzLW5lZWRlZDsgc2VlCisgICAgICMgPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctZ251bGliLzIwMDYtMDYvbXNnMDAxMzEuaHRtbD4uCisgICAgIExJQlM9IiRMSUJTIC1sbSIKKyAgICAgIyBVc2UgbG9uZyBvcHRpb24gc2VxdWVuY2VzIGxpa2UgJy16IGlnbm9yZScgdG8gdGVzdCBmb3IgdGhlIGZlYXR1cmUsCisgICAgICMgdG8gZm9yZXN0YWxsIHByb2JsZW1zIHdpdGggbGlua2VycyB0aGF0IGhhdmUgLXosIC1pLCAtZywgLW4sIGV0Yy4gZmxhZ3MuCisgICAgICMgR0NDICsgYmludXRpbHMgbGlrZXMgJy1XbCwtLWFzLW5lZWRlZCcuCisgICAgICMgR0NDICsgU29sYXJpcyBsZCBsaWtlcyAnLVdsLC16LGlnbm9yZScuCisgICAgICMgU3VuIEMgbGlrZXMgJy16IGlnbm9yZScuCisgICAgICMgRG9uJ3QgdHJ5IGJhcmUgJy0tYXMtbmVlZGVkJzsgbm90aGluZyBsaWtlcyBpdCBhbmQgdGhlIEhQLVVYIDExLjExCisgICAgICMgbmF0aXZlIGNjIGlzc3VlcyBhbm5veWluZyB3YXJuaW5ncyBhbmQgdGhlbiBpZ25vcmVzIGl0LAorICAgICAjIHdoaWNoIHdvdWxkIGNhdXNlIHVzIHRvIGluY29ycmVjdGx5IGNvbmNsdWRlIHRoYXQgaXQgd29ya2VkLgorICAgICBmb3IgZ2xfZmxhZ3MgaW4gXAorCSctV2wsLS1hcy1uZWVkZWQnIFwKKwknLVdsLC16LGlnbm9yZScgXAorCScteiBpZ25vcmUnCisgICAgIGRvCisgICAgICAgTERGTEFHUz0iJGdsX2ZsYWdzICRMREZMQUdTIgorICAgICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oKV0sCisJIFtnbF9jdl9pZ25vcmVfdW51c2VkX2xpYnJhcmllcz0kZ2xfZmxhZ3NdKQorICAgICAgIExERkxBR1M9JGdsX3NhdmVkX2xkZmxhZ3MKKyAgICAgICB0ZXN0ICIkZ2xfY3ZfaWdub3JlX3VudXNlZF9saWJyYXJpZXMiICE9IG5vbmUgJiYgYnJlYWsKKyAgICAgZG9uZQorICAgICBMSUJTPSRnbF9zYXZlZF9saWJzXSkKKworICB0ZXN0ICIkZ2xfY3ZfaWdub3JlX3VudXNlZF9saWJyYXJpZXMiICE9IG5vbmUgJiYKKyAgICBMREZMQUdTPSIkTERGTEFHUyAkZ2xfY3ZfaWdub3JlX3VudXNlZF9saWJyYXJpZXMiCitdKQpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L200L2xpYi1sZC5tNCBiL3BhcnRlZC0xLjguNy9tNC9saWItbGQubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZjNGUyYwotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9tNC9saWItbGQubTQKQEAgLTAsMCArMSwxMTAgQEAKKyMgbGliLWxkLm00IHNlcmlhbCAzIChnZXR0ZXh0LTAuMTMpCitkbmwgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworZG5sIFN1YnJvdXRpbmVzIG9mIGxpYnRvb2wubTQsCitkbmwgd2l0aCByZXBsYWNlbWVudHMgcy9BQ18vQUNfTElCLyBhbmQgcy9sdF9jdi9hY2xfY3YvIHRvIGF2b2lkIGNvbGxpc2lvbgorZG5sIHdpdGggbGlidG9vbC5tNC4KKworZG5sIEZyb20gbGlidG9vbC0xLjQuIFNldHMgdGhlIHZhcmlhYmxlIHdpdGhfZ251X2xkIHRvIHllcyBvciBuby4KK0FDX0RFRlVOKFtBQ19MSUJfUFJPR19MRF9HTlVdLAorW0FDX0NBQ0hFX0NIRUNLKFtpZiB0aGUgbGlua2VyICgkTEQpIGlzIEdOVSBsZF0sIGFjbF9jdl9wcm9nX2dudV9sZCwKK1sjIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiBoZXJlLCBidXQgYXBwYXJlbnRseSBzb21lIEdOVSBsZCdzIG9ubHkgYWNjZXB0IC12LgorY2FzZSBgJExEIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KKypHTlUqIHwgKid3aXRoIEJGRCcqKQorICBhY2xfY3ZfcHJvZ19nbnVfbGQ9eWVzIDs7CisqKQorICBhY2xfY3ZfcHJvZ19nbnVfbGQ9bm8gOzsKK2VzYWNdKQord2l0aF9nbnVfbGQ9JGFjbF9jdl9wcm9nX2dudV9sZAorXSkKKworZG5sIEZyb20gbGlidG9vbC0xLjQuIFNldHMgdGhlIHZhcmlhYmxlIExELgorQUNfREVGVU4oW0FDX0xJQl9QUk9HX0xEXSwKK1tBQ19BUkdfV0lUSChnbnUtbGQsCitbICAtLXdpdGgtZ251LWxkICAgICAgICAgICBhc3N1bWUgdGhlIEMgY29tcGlsZXIgdXNlcyBHTlUgbGQgW2RlZmF1bHQ9bm9dXSwKK3Rlc3QgIiR3aXRodmFsIiA9IG5vIHx8IHdpdGhfZ251X2xkPXllcywgd2l0aF9nbnVfbGQ9bm8pCitBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKK0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKKyMgUHJlcGFyZSBQQVRIX1NFUEFSQVRPUi4KKyMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgoraWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KKyAgZWNobyAiIyEgL2Jpbi9zaCIgPmNvbmYkJC5zaAorICBlY2hvICAiZXhpdCAwIiAgID4+Y29uZiQkLnNoCisgIGNobW9kICt4IGNvbmYkJC5zaAorICBpZiAoUEFUSD0iL25vbmV4aXN0ZW50Oy4iOyBjb25mJCQuc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgIFBBVEhfU0VQQVJBVE9SPSc7JworICBlbHNlCisgICAgUEFUSF9TRVBBUkFUT1I9OgorICBmaQorICBybSAtZiBjb25mJCQuc2gKK2ZpCithY19wcm9nPWxkCitpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAjIENoZWNrIGlmIGdjYyAtcHJpbnQtcHJvZy1uYW1lPWxkIGdpdmVzIGEgcGF0aC4KKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgbGQgdXNlZCBieSBHQ0NdKQorICBjYXNlICRob3N0IGluCisgICotKi1taW5ndyopCisgICAgIyBnY2MgbGVhdmVzIGEgdHJhaWxpbmcgY2FycmlhZ2UgcmV0dXJuIHdoaWNoIHVwc2V0cyBtaW5ndworICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNSB8IHRyIC1kICdcMDE1J2AgOzsKKyAgKikKKyAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjVgIDs7CisgIGVzYWMKKyAgY2FzZSAkYWNfcHJvZyBpbgorICAgICMgQWNjZXB0IGFic29sdXRlIHBhdGhzLgorICAgIFtbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopXQorICAgICAgW3JlX2RpcmVsdD0nL1teL11bXi9dKi9cLlwuLyddCisgICAgICAjIENhbm9uaWNhbGl6ZSB0aGUgcGF0aCBvZiBsZAorICAgICAgYWNfcHJvZz1gZWNobyAkYWNfcHJvZ3wgc2VkICdzJVxcXFwlLyVnJ2AKKyAgICAgIHdoaWxlIGVjaG8gJGFjX3Byb2cgfCBncmVwICIkcmVfZGlyZWx0IiA+IC9kZXYvbnVsbCAyPiYxOyBkbworCWFjX3Byb2c9YGVjaG8gJGFjX3Byb2d8IHNlZCAicyUkcmVfZGlyZWx0JS8lImAKKyAgICAgIGRvbmUKKyAgICAgIHRlc3QgLXogIiRMRCIgJiYgTEQ9IiRhY19wcm9nIgorICAgICAgOzsKKyAgIiIpCisgICAgIyBJZiBpdCBmYWlscywgdGhlbiBwcmV0ZW5kIHdlIGFyZW4ndCB1c2luZyBHQ0MuCisgICAgYWNfcHJvZz1sZAorICAgIDs7CisgICopCisgICAgIyBJZiBpdCBpcyByZWxhdGl2ZSwgdGhlbiBzZWFyY2ggZm9yIHRoZSBmaXJzdCBsZCBpbiBQQVRILgorICAgIHdpdGhfZ251X2xkPXVua25vd24KKyAgICA7OworICBlc2FjCitlbGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgR05VIGxkXSkKK2Vsc2UKKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3Igbm9uLUdOVSBsZF0pCitmaQorQUNfQ0FDSEVfVkFMKGFjbF9jdl9wYXRoX0xELAorW2lmIHRlc3QgLXogIiRMRCI7IHRoZW4KKyAgSUZTPSIke0lGUz0gCX0iOyBhY19zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JHtQQVRIX1NFUEFSQVRPUi06fSIKKyAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ciIHx8IHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ckYWNfZXhlZXh0IjsgdGhlbgorICAgICAgYWNsX2N2X3BhdGhfTEQ9IiRhY19kaXIvJGFjX3Byb2ciCisgICAgICAjIENoZWNrIHRvIHNlZSBpZiB0aGUgcHJvZ3JhbSBpcyBHTlUgbGQuICBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24sCisgICAgICAjIGJ1dCBhcHBhcmVudGx5IHNvbWUgR05VIGxkJ3Mgb25seSBhY2NlcHQgLXYuCisgICAgICAjIEJyZWFrIG9ubHkgaWYgaXQgd2FzIHRoZSBHTlUvbm9uLUdOVSBsZCB0aGF0IHdlIHByZWZlci4KKyAgICAgIGNhc2UgYCIkYWNsX2N2X3BhdGhfTEQiIC12IDI+JjEgPCAvZGV2L251bGxgIGluCisgICAgICAqR05VKiB8ICond2l0aCBCRkQnKikKKwl0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IG5vICYmIGJyZWFrIDs7CisgICAgICAqKQorCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0geWVzICYmIGJyZWFrIDs7CisgICAgICBlc2FjCisgICAgZmkKKyAgZG9uZQorICBJRlM9IiRhY19zYXZlX2lmcyIKK2Vsc2UKKyAgYWNsX2N2X3BhdGhfTEQ9IiRMRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCitmaV0pCitMRD0iJGFjbF9jdl9wYXRoX0xEIgoraWYgdGVzdCAtbiAiJExEIjsgdGhlbgorICBBQ19NU0dfUkVTVUxUKCRMRCkKK2Vsc2UKKyAgQUNfTVNHX1JFU1VMVChubykKK2ZpCit0ZXN0IC16ICIkTEQiICYmIEFDX01TR19FUlJPUihbbm8gYWNjZXB0YWJsZSBsZCBmb3VuZCBpbiBcJFBBVEhdKQorQUNfTElCX1BST0dfTERfR05VCitdKQpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L200L2xpYi1saW5rLm00IGIvcGFydGVkLTEuOC43L200L2xpYi1saW5rLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNTdkOTgKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbTQvbGliLWxpbmsubTQKQEAgLTAsMCArMSw3MDkgQEAKKyMgbGliLWxpbmsubTQgc2VyaWFsIDEzIChnZXR0ZXh0LTAuMTYuMikKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitkbmwgRnJvbSBCcnVubyBIYWlibGUuCisKK0FDX1BSRVJFUSgyLjU0KQorCitkbmwgQUNfTElCX0xJTktGTEFHUyhuYW1lIFssIGRlcGVuZGVuY2llc10pIHNlYXJjaGVzIGZvciBsaWJuYW1lIGFuZAorZG5sIHRoZSBsaWJyYXJpZXMgY29ycmVzcG9uZGluZyB0byBleHBsaWNpdCBhbmQgaW1wbGljaXQgZGVwZW5kZW5jaWVzLgorZG5sIFNldHMgYW5kIEFDX1NVQlNUcyB0aGUgTElCJHtOQU1FfSBhbmQgTFRMSUIke05BTUV9IHZhcmlhYmxlcyBhbmQKK2RubCBhdWdtZW50cyB0aGUgQ1BQRkxBR1MgdmFyaWFibGUuCitkbmwgU2V0cyBhbmQgQUNfU1VCU1RzIHRoZSBMSUIke05BTUV9X1BSRUZJWCB2YXJpYWJsZSB0byBub25lbXB0eSBpZiBsaWJuYW1lCitkbmwgd2FzIGZvdW5kIGluICR7TElCJHtOQU1FfV9QUkVGSVh9LyRhY2xfbGliZGlyc3RlbS4KK0FDX0RFRlVOKFtBQ19MSUJfTElOS0ZMQUdTXSwKK1sKKyAgQUNfUkVRVUlSRShbQUNfTElCX1BSRVBBUkVfUFJFRklYXSkKKyAgQUNfUkVRVUlSRShbQUNfTElCX1JQQVRIXSkKKyAgZGVmaW5lKFtOYW1lXSxbdHJhbnNsaXQoWyQxXSxbLi8tXSwgW19fX10pXSkKKyAgZGVmaW5lKFtOQU1FXSxbdHJhbnNsaXQoWyQxXSxbYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fX10pXSkKKyAgQUNfQ0FDSEVfQ0hFQ0soW2hvdyB0byBsaW5rIHdpdGggbGliW10kMV0sIFthY19jdl9saWJbXU5hbWVbXV9saWJzXSwgWworICAgIEFDX0xJQl9MSU5LRkxBR1NfQk9EWShbJDFdLCBbJDJdKQorICAgIGFjX2N2X2xpYltdTmFtZVtdX2xpYnM9IiRMSUJbXU5BTUUiCisgICAgYWNfY3ZfbGliW11OYW1lW11fbHRsaWJzPSIkTFRMSUJbXU5BTUUiCisgICAgYWNfY3ZfbGliW11OYW1lW11fY3BwZmxhZ3M9IiRJTkNbXU5BTUUiCisgICAgYWNfY3ZfbGliW11OYW1lW11fcHJlZml4PSIkTElCW11OQU1FW11fUFJFRklYIgorICBdKQorICBMSUJbXU5BTUU9IiRhY19jdl9saWJbXU5hbWVbXV9saWJzIgorICBMVExJQltdTkFNRT0iJGFjX2N2X2xpYltdTmFtZVtdX2x0bGlicyIKKyAgSU5DW11OQU1FPSIkYWNfY3ZfbGliW11OYW1lW11fY3BwZmxhZ3MiCisgIExJQltdTkFNRVtdX1BSRUZJWD0iJGFjX2N2X2xpYltdTmFtZVtdX3ByZWZpeCIKKyAgQUNfTElCX0FQUEVORFRPVkFSKFtDUFBGTEFHU10sIFskSU5DXU5BTUUpCisgIEFDX1NVQlNUKFtMSUJdTkFNRSkKKyAgQUNfU1VCU1QoW0xUTElCXU5BTUUpCisgIEFDX1NVQlNUKFtMSUJdTkFNRVtfUFJFRklYXSkKKyAgZG5sIEFsc28gc2V0IEhBVkVfTElCW11OQU1FIHNvIHRoYXQgQUNfTElCX0hBVkVfTElOS0ZMQUdTIGNhbiByZXVzZSB0aGUKKyAgZG5sIHJlc3VsdHMgb2YgdGhpcyBzZWFyY2ggd2hlbiB0aGlzIGxpYnJhcnkgYXBwZWFycyBhcyBhIGRlcGVuZGVuY3kuCisgIEhBVkVfTElCW11OQU1FPXllcworICB1bmRlZmluZShbTmFtZV0pCisgIHVuZGVmaW5lKFtOQU1FXSkKK10pCisKK2RubCBBQ19MSUJfSEFWRV9MSU5LRkxBR1MobmFtZSwgZGVwZW5kZW5jaWVzLCBpbmNsdWRlcywgdGVzdGNvZGUpCitkbmwgc2VhcmNoZXMgZm9yIGxpYm5hbWUgYW5kIHRoZSBsaWJyYXJpZXMgY29ycmVzcG9uZGluZyB0byBleHBsaWNpdCBhbmQKK2RubCBpbXBsaWNpdCBkZXBlbmRlbmNpZXMsIHRvZ2V0aGVyIHdpdGggdGhlIHNwZWNpZmllZCBpbmNsdWRlIGZpbGVzIGFuZAorZG5sIHRoZSBhYmlsaXR5IHRvIGNvbXBpbGUgYW5kIGxpbmsgdGhlIHNwZWNpZmllZCB0ZXN0Y29kZS4gSWYgZm91bmQsIGl0Citkbmwgc2V0cyBhbmQgQUNfU1VCU1RzIEhBVkVfTElCJHtOQU1FfT15ZXMgYW5kIHRoZSBMSUIke05BTUV9IGFuZAorZG5sIExUTElCJHtOQU1FfSB2YXJpYWJsZXMgYW5kIGF1Z21lbnRzIHRoZSBDUFBGTEFHUyB2YXJpYWJsZSwgYW5kCitkbmwgI2RlZmluZXMgSEFWRV9MSUIke05BTUV9IHRvIDEuIE90aGVyd2lzZSwgaXQgc2V0cyBhbmQgQUNfU1VCU1RzCitkbmwgSEFWRV9MSUIke05BTUV9PW5vIGFuZCBMSUIke05BTUV9IGFuZCBMVExJQiR7TkFNRX0gdG8gZW1wdHkuCitkbmwgU2V0cyBhbmQgQUNfU1VCU1RzIHRoZSBMSUIke05BTUV9X1BSRUZJWCB2YXJpYWJsZSB0byBub25lbXB0eSBpZiBsaWJuYW1lCitkbmwgd2FzIGZvdW5kIGluICR7TElCJHtOQU1FfV9QUkVGSVh9LyRhY2xfbGliZGlyc3RlbS4KK0FDX0RFRlVOKFtBQ19MSUJfSEFWRV9MSU5LRkxBR1NdLAorWworICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9QUkVGSVhdKQorICBBQ19SRVFVSVJFKFtBQ19MSUJfUlBBVEhdKQorICBkZWZpbmUoW05hbWVdLFt0cmFuc2xpdChbJDFdLFsuLy1dLCBbX19fXSldKQorICBkZWZpbmUoW05BTUVdLFt0cmFuc2xpdChbJDFdLFthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fXSldKQorCisgIGRubCBTZWFyY2ggZm9yIGxpYltdTmFtZSBhbmQgZGVmaW5lIExJQltdTkFNRSwgTFRMSUJbXU5BTUUgYW5kIElOQ1tdTkFNRQorICBkbmwgYWNjb3JkaW5nbHkuCisgIEFDX0xJQl9MSU5LRkxBR1NfQk9EWShbJDFdLCBbJDJdKQorCisgIGRubCBBZGQgJElOQ1tdTkFNRSB0byBDUFBGTEFHUyBiZWZvcmUgcGVyZm9ybWluZyB0aGUgZm9sbG93aW5nIGNoZWNrcywKKyAgZG5sIGJlY2F1c2UgaWYgdGhlIHVzZXIgaGFzIGluc3RhbGxlZCBsaWJbXU5hbWUgYW5kIG5vdCBkaXNhYmxlZCBpdHMgdXNlCisgIGRubCB2aWEgLS13aXRob3V0LWxpYltdTmFtZS1wcmVmaXgsIGhlIHdhbnRzIHRvIHVzZSBpdC4KKyAgYWNfc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorICBBQ19MSUJfQVBQRU5EVE9WQVIoW0NQUEZMQUdTXSwgWyRJTkNdTkFNRSkKKworICBBQ19DQUNIRV9DSEVDSyhbZm9yIGxpYltdJDFdLCBbYWNfY3ZfbGliW11OYW1lXSwgWworICAgIGFjX3NhdmVfTElCUz0iJExJQlMiCisgICAgTElCUz0iJExJQlMgJExJQltdTkFNRSIKKyAgICBBQ19UUllfTElOSyhbJDNdLCBbJDRdLCBbYWNfY3ZfbGliW11OYW1lPXllc10sIFthY19jdl9saWJbXU5hbWU9bm9dKQorICAgIExJQlM9IiRhY19zYXZlX0xJQlMiCisgIF0pCisgIGlmIHRlc3QgIiRhY19jdl9saWJbXU5hbWUiID0geWVzOyB0aGVuCisgICAgSEFWRV9MSUJbXU5BTUU9eWVzCisgICAgQUNfREVGSU5FKFtIQVZFX0xJQl1OQU1FLCAxLCBbRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAkMSBsaWJyYXJ5Ll0pCisgICAgQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gbGluayB3aXRoIGxpYltdJDFdKQorICAgIEFDX01TR19SRVNVTFQoWyRMSUJbXU5BTUVdKQorICBlbHNlCisgICAgSEFWRV9MSUJbXU5BTUU9bm8KKyAgICBkbmwgSWYgJExJQltdTkFNRSBkaWRuJ3QgbGVhZCB0byBhIHVzYWJsZSBsaWJyYXJ5LCB3ZSBkb24ndCBuZWVkCisgICAgZG5sICRJTkNbXU5BTUUgZWl0aGVyLgorICAgIENQUEZMQUdTPSIkYWNfc2F2ZV9DUFBGTEFHUyIKKyAgICBMSUJbXU5BTUU9CisgICAgTFRMSUJbXU5BTUU9CisgICAgTElCW11OQU1FW11fUFJFRklYPQorICBmaQorICBBQ19TVUJTVChbSEFWRV9MSUJdTkFNRSkKKyAgQUNfU1VCU1QoW0xJQl1OQU1FKQorICBBQ19TVUJTVChbTFRMSUJdTkFNRSkKKyAgQUNfU1VCU1QoW0xJQl1OQU1FW19QUkVGSVhdKQorICB1bmRlZmluZShbTmFtZV0pCisgIHVuZGVmaW5lKFtOQU1FXSkKK10pCisKK2RubCBEZXRlcm1pbmUgdGhlIHBsYXRmb3JtIGRlcGVuZGVudCBwYXJhbWV0ZXJzIG5lZWRlZCB0byB1c2UgcnBhdGg6CitkbmwgICBhY2xfbGliZXh0LAorZG5sICAgYWNsX3NobGliZXh0LAorZG5sICAgYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsCitkbmwgICBhY2xfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwKK2RubCAgIGFjbF9oYXJkY29kZV9kaXJlY3QsCitkbmwgICBhY2xfaGFyZGNvZGVfbWludXNfTC4KK0FDX0RFRlVOKFtBQ19MSUJfUlBBVEhdLAorWworICBkbmwgVGVsbCBhdXRvbWFrZSA+PSAxLjEwIHRvIGNvbXBsYWluIGlmIGNvbmZpZy5ycGF0aCBpcyBtaXNzaW5nLgorICBtNF9pZmRlZihbQUNfUkVRVUlSRV9BVVhfRklMRV0sIFtBQ19SRVFVSVJFX0FVWF9GSUxFKFtjb25maWcucnBhdGhdKV0pCisgIEFDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKSAgICAgICAgICAgICAgICBkbmwgd2UgdXNlICRDQywgJEdDQywgJExERkxBR1MKKyAgQUNfUkVRVUlSRShbQUNfTElCX1BST0dfTERdKSAgICAgICAgICAgIGRubCB3ZSB1c2UgJExELCAkd2l0aF9nbnVfbGQKKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKSAgICAgICAgIGRubCB3ZSB1c2UgJGhvc3QKKyAgQUNfUkVRVUlSRShbQUNfQ09ORklHX0FVWF9ESVJfREVGQVVMVF0pIGRubCB3ZSB1c2UgJGFjX2F1eF9kaXIKKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBzaGFyZWQgbGlicmFyeSBydW4gcGF0aCBvcmlnaW5dLCBhY2xfY3ZfcnBhdGgsIFsKKyAgICBDQz0iJENDIiBHQ0M9IiRHQ0MiIExERkxBR1M9IiRMREZMQUdTIiBMRD0iJExEIiB3aXRoX2dudV9sZD0iJHdpdGhfZ251X2xkIiBcCisgICAgJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0gIiRhY19hdXhfZGlyL2NvbmZpZy5ycGF0aCIgIiRob3N0IiA+IGNvbmZ0ZXN0LnNoCisgICAgLiAuL2NvbmZ0ZXN0LnNoCisgICAgcm0gLWYgLi9jb25mdGVzdC5zaAorICAgIGFjbF9jdl9ycGF0aD1kb25lCisgIF0pCisgIHdsPSIkYWNsX2N2X3dsIgorICBhY2xfbGliZXh0PSIkYWNsX2N2X2xpYmV4dCIKKyAgYWNsX3NobGliZXh0PSIkYWNsX2N2X3NobGliZXh0IgorICBhY2xfbGlibmFtZV9zcGVjPSIkYWNsX2N2X2xpYm5hbWVfc3BlYyIKKyAgYWNsX2xpYnJhcnlfbmFtZXNfc3BlYz0iJGFjbF9jdl9saWJyYXJ5X25hbWVzX3NwZWMiCisgIGFjbF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSIkYWNsX2N2X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiCisgIGFjbF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSIkYWNsX2N2X2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiCisgIGFjbF9oYXJkY29kZV9kaXJlY3Q9IiRhY2xfY3ZfaGFyZGNvZGVfZGlyZWN0IgorICBhY2xfaGFyZGNvZGVfbWludXNfTD0iJGFjbF9jdl9oYXJkY29kZV9taW51c19MIgorICBkbmwgRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHVzZXIgd2FudHMgcnBhdGggaGFuZGxpbmcgYXQgYWxsLgorICBBQ19BUkdfRU5BQkxFKHJwYXRoLAorICAgIFsgIC0tZGlzYWJsZS1ycGF0aCAgICAgICAgIGRvIG5vdCBoYXJkY29kZSBydW50aW1lIGxpYnJhcnkgcGF0aHNdLAorICAgIDosIGVuYWJsZV9ycGF0aD15ZXMpCitdKQorCitkbmwgQUNfTElCX0xJTktGTEFHU19CT0RZKG5hbWUgWywgZGVwZW5kZW5jaWVzXSkgc2VhcmNoZXMgZm9yIGxpYm5hbWUgYW5kCitkbmwgdGhlIGxpYnJhcmllcyBjb3JyZXNwb25kaW5nIHRvIGV4cGxpY2l0IGFuZCBpbXBsaWNpdCBkZXBlbmRlbmNpZXMuCitkbmwgU2V0cyB0aGUgTElCJHtOQU1FfSwgTFRMSUIke05BTUV9IGFuZCBJTkMke05BTUV9IHZhcmlhYmxlcy4KK2RubCBBbHNvLCBzZXRzIHRoZSBMSUIke05BTUV9X1BSRUZJWCB2YXJpYWJsZSB0byBub25lbXB0eSBpZiBsaWJuYW1lIHdhcyBmb3VuZAorZG5sIGluICR7TElCJHtOQU1FfV9QUkVGSVh9LyRhY2xfbGliZGlyc3RlbS4KK0FDX0RFRlVOKFtBQ19MSUJfTElOS0ZMQUdTX0JPRFldLAorWworICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9NVUxUSUxJQl0pCisgIGRlZmluZShbTkFNRV0sW3RyYW5zbGl0KFskMV0sW2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX19dKV0pCisgIGRubCBBdXRvY29uZiA+PSAyLjYxIHN1cHBvcnRzIGRvdHMgaW4gLS13aXRoIG9wdGlvbnMuCisgIGRlZmluZShbTl9BX01fRV0sW200X2lmKG00X3ZlcnNpb25fY29tcGFyZShtNF9kZWZuKFttNF9QQUNLQUdFX1ZFUlNJT05dKSxbMi42MV0pLFstMV0sW3RyYW5zbGl0KFskMV0sWy5dLFtfXSldLFskMV0pXSkKKyAgZG5sIEJ5IGRlZmF1bHQsIGxvb2sgaW4gJGluY2x1ZGVkaXIgYW5kICRsaWJkaXIuCisgIHVzZV9hZGRpdGlvbmFsPXllcworICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoWworICAgIGV2YWwgYWRkaXRpb25hbF9pbmNsdWRlZGlyPVwiJGluY2x1ZGVkaXJcIgorICAgIGV2YWwgYWRkaXRpb25hbF9saWJkaXI9XCIkbGliZGlyXCIKKyAgXSkKKyAgQUNfTElCX0FSR19XSVRIKFtsaWJdTl9BX01fRVstcHJlZml4XSwKK1sgIC0td2l0aC1saWJdTl9BX01fRVstcHJlZml4Wz1ESVJdICBzZWFyY2ggZm9yIGxpYiQxIGluIERJUi9pbmNsdWRlIGFuZCBESVIvbGliCisgIC0td2l0aG91dC1saWJdTl9BX01fRVstcHJlZml4ICAgICBkb24ndCBzZWFyY2ggZm9yIGxpYiQxIGluIGluY2x1ZGVkaXIgYW5kIGxpYmRpcl0sCitbCisgICAgaWYgdGVzdCAiWCR3aXRodmFsIiA9ICJYbm8iOyB0aGVuCisgICAgICB1c2VfYWRkaXRpb25hbD1ubworICAgIGVsc2UKKyAgICAgIGlmIHRlc3QgIlgkd2l0aHZhbCIgPSAiWCI7IHRoZW4KKyAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFsKKyAgICAgICAgICBldmFsIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj1cIiRpbmNsdWRlZGlyXCIKKyAgICAgICAgICBldmFsIGFkZGl0aW9uYWxfbGliZGlyPVwiJGxpYmRpclwiCisgICAgICAgIF0pCisgICAgICBlbHNlCisgICAgICAgIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj0iJHdpdGh2YWwvaW5jbHVkZSIKKyAgICAgICAgYWRkaXRpb25hbF9saWJkaXI9IiR3aXRodmFsLyRhY2xfbGliZGlyc3RlbSIKKyAgICAgIGZpCisgICAgZmkKK10pCisgIGRubCBTZWFyY2ggdGhlIGxpYnJhcnkgYW5kIGl0cyBkZXBlbmRlbmNpZXMgaW4gJGFkZGl0aW9uYWxfbGliZGlyIGFuZAorICBkbmwgJExERkxBR1MuIFVzaW5nIGJyZWFkdGgtZmlyc3Qtc2VhY2guCisgIExJQltdTkFNRT0KKyAgTFRMSUJbXU5BTUU9CisgIElOQ1tdTkFNRT0KKyAgTElCW11OQU1FW11fUFJFRklYPQorICBycGF0aGRpcnM9CisgIGx0cnBhdGhkaXJzPQorICBuYW1lc19hbHJlYWR5X2hhbmRsZWQ9CisgIG5hbWVzX25leHRfcm91bmQ9JyQxICQyJworICB3aGlsZSB0ZXN0IC1uICIkbmFtZXNfbmV4dF9yb3VuZCI7IGRvCisgICAgbmFtZXNfdGhpc19yb3VuZD0iJG5hbWVzX25leHRfcm91bmQiCisgICAgbmFtZXNfbmV4dF9yb3VuZD0KKyAgICBmb3IgbmFtZSBpbiAkbmFtZXNfdGhpc19yb3VuZDsgZG8KKyAgICAgIGFscmVhZHlfaGFuZGxlZD0KKyAgICAgIGZvciBuIGluICRuYW1lc19hbHJlYWR5X2hhbmRsZWQ7IGRvCisgICAgICAgIGlmIHRlc3QgIiRuIiA9ICIkbmFtZSI7IHRoZW4KKyAgICAgICAgICBhbHJlYWR5X2hhbmRsZWQ9eWVzCisgICAgICAgICAgYnJlYWsKKyAgICAgICAgZmkKKyAgICAgIGRvbmUKKyAgICAgIGlmIHRlc3QgLXogIiRhbHJlYWR5X2hhbmRsZWQiOyB0aGVuCisgICAgICAgIG5hbWVzX2FscmVhZHlfaGFuZGxlZD0iJG5hbWVzX2FscmVhZHlfaGFuZGxlZCAkbmFtZSIKKyAgICAgICAgZG5sIFNlZSBpZiBpdCB3YXMgYWxyZWFkeSBsb2NhdGVkIGJ5IGFuIGVhcmxpZXIgQUNfTElCX0xJTktGTEFHUworICAgICAgICBkbmwgb3IgQUNfTElCX0hBVkVfTElOS0ZMQUdTIGNhbGwuCisgICAgICAgIHVwcGVybmFtZT1gZWNobyAiJG5hbWUiIHwgc2VkIC1lICd5fGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tfEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19ffCdgCisgICAgICAgIGV2YWwgdmFsdWU9XCJcJEhBVkVfTElCJHVwcGVybmFtZVwiCisgICAgICAgIGlmIHRlc3QgLW4gIiR2YWx1ZSI7IHRoZW4KKyAgICAgICAgICBpZiB0ZXN0ICIkdmFsdWUiID0geWVzOyB0aGVuCisgICAgICAgICAgICBldmFsIHZhbHVlPVwiXCRMSUIkdXBwZXJuYW1lXCIKKyAgICAgICAgICAgIHRlc3QgLXogIiR2YWx1ZSIgfHwgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kdmFsdWUiCisgICAgICAgICAgICBldmFsIHZhbHVlPVwiXCRMVExJQiR1cHBlcm5hbWVcIgorICAgICAgICAgICAgdGVzdCAteiAiJHZhbHVlIiB8fCBMVExJQltdTkFNRT0iJHtMVExJQltdTkFNRX0ke0xUTElCW11OQU1FOisgfSR2YWx1ZSIKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBkbmwgQW4gZWFybGllciBjYWxsIHRvIEFDX0xJQl9IQVZFX0xJTktGTEFHUyBoYXMgZGV0ZXJtaW5lZAorICAgICAgICAgICAgZG5sIHRoYXQgdGhpcyBsaWJyYXJ5IGRvZXNuJ3QgZXhpc3QuIFNvIGp1c3QgZHJvcCBpdC4KKyAgICAgICAgICAgIDoKKyAgICAgICAgICBmaQorICAgICAgICBlbHNlCisgICAgICAgICAgZG5sIFNlYXJjaCB0aGUgbGlicmFyeSBsaWIkbmFtZSBpbiAkYWRkaXRpb25hbF9saWJkaXIgYW5kICRMREZMQUdTCisgICAgICAgICAgZG5sIGFuZCB0aGUgYWxyZWFkeSBjb25zdHJ1Y3RlZCAkTElCTkFNRS8kTFRMSUJOQU1FLgorICAgICAgICAgIGZvdW5kX2Rpcj0KKyAgICAgICAgICBmb3VuZF9sYT0KKyAgICAgICAgICBmb3VuZF9zbz0KKyAgICAgICAgICBmb3VuZF9hPQorICAgICAgICAgIGV2YWwgbGlibmFtZT1cIiRhY2xfbGlibmFtZV9zcGVjXCIgICAgIyB0eXBpY2FsbHk6IGxpYm5hbWU9bGliJG5hbWUKKyAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX3NobGliZXh0IjsgdGhlbgorICAgICAgICAgICAgc2hyZXh0PSIuJGFjbF9zaGxpYmV4dCIgICAgICAgICAgICAgIyB0eXBpY2FsbHk6IHNocmV4dD0uc28KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBzaHJleHQ9CisgICAgICAgICAgZmkKKyAgICAgICAgICBpZiB0ZXN0ICR1c2VfYWRkaXRpb25hbCA9IHllczsgdGhlbgorICAgICAgICAgICAgZGlyPSIkYWRkaXRpb25hbF9saWJkaXIiCisgICAgICAgICAgICBkbmwgVGhlIHNhbWUgY29kZSBhcyBpbiB0aGUgbG9vcCBiZWxvdzoKKyAgICAgICAgICAgIGRubCBGaXJzdCBsb29rIGZvciBhIHNoYXJlZCBsaWJyYXJ5LgorICAgICAgICAgICAgaWYgdGVzdCAtbiAiJGFjbF9zaGxpYmV4dCI7IHRoZW4KKyAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZSRzaHJleHQiOyB0aGVuCisgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRsaWJuYW1lJHNocmV4dCIKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRhY2xfbGlicmFyeV9uYW1lc19zcGVjIiA9ICckbGlibmFtZSRzaHJleHQkdmVyc3VmZml4JzsgdGhlbgorICAgICAgICAgICAgICAgICAgdmVyPWAoY2QgIiRkaXIiICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmIGluICIkbGlibmFtZSRzaHJleHQiLio7IGRvIGVjaG8gIiRmIjsgZG9uZSBcCisgICAgICAgICAgICAgICAgICAgICAgICB8IHNlZCAtZSAicyxeJGxpYm5hbWUkc2hyZXh0XFxcXC4sLCIgXAorICAgICAgICAgICAgICAgICAgICAgICAgfCBzb3J0IC10ICcuJyAtbiAtciAtazEsMSAtazIsMiAtazMsMyAtazQsNCAtazUsNSBcCisgICAgICAgICAgICAgICAgICAgICAgICB8IHNlZCAxcSApIDI+L2Rldi9udWxsYAorICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJHZlciIgJiYgdGVzdCAtZiAiJGRpci8kbGlibmFtZSRzaHJleHQuJHZlciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kbGlibmFtZSRzaHJleHQuJHZlciIKKyAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgZXZhbCBsaWJyYXJ5X25hbWVzPVwiJGFjbF9saWJyYXJ5X25hbWVzX3NwZWNcIgorICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gJGxpYnJhcnlfbmFtZXM7IGRvCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGYiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRmIgorICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBkbmwgVGhlbiBsb29rIGZvciBhIHN0YXRpYyBsaWJyYXJ5LgorICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiID0gIlgiOyB0aGVuCisgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUuJGFjbF9saWJleHQiOyB0aGVuCisgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorICAgICAgICAgICAgICAgIGZvdW5kX2E9IiRkaXIvJGxpYm5hbWUuJGFjbF9saWJleHQiCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiICE9ICJYIjsgdGhlbgorICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lLmxhIjsgdGhlbgorICAgICAgICAgICAgICAgIGZvdW5kX2xhPSIkZGlyLyRsaWJuYW1lLmxhIgorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZmkKKyAgICAgICAgICBmaQorICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiA9ICJYIjsgdGhlbgorICAgICAgICAgICAgZm9yIHggaW4gJExERkxBR1MgJExUTElCW11OQU1FOyBkbworICAgICAgICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorICAgICAgICAgICAgICBjYXNlICIkeCIgaW4KKyAgICAgICAgICAgICAgICAtTCopCisgICAgICAgICAgICAgICAgICBkaXI9YGVjaG8gIlgkeCIgfCBzZWQgLWUgJ3MvXlgtTC8vJ2AKKyAgICAgICAgICAgICAgICAgIGRubCBGaXJzdCBsb29rIGZvciBhIHNoYXJlZCBsaWJyYXJ5LgorICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJGFjbF9zaGxpYmV4dCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZSRzaHJleHQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRsaWJuYW1lJHNocmV4dCIKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRhY2xfbGlicmFyeV9uYW1lc19zcGVjIiA9ICckbGlibmFtZSRzaHJleHQkdmVyc3VmZml4JzsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgdmVyPWAoY2QgIiRkaXIiICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmIGluICIkbGlibmFtZSRzaHJleHQiLio7IGRvIGVjaG8gIiRmIjsgZG9uZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNlZCAtZSAicyxeJGxpYm5hbWUkc2hyZXh0XFxcXC4sLCIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzb3J0IC10ICcuJyAtbiAtciAtazEsMSAtazIsMiAtazMsMyAtazQsNCAtazUsNSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNlZCAxcSApIDI+L2Rldi9udWxsYAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJHZlciIgJiYgdGVzdCAtZiAiJGRpci8kbGlibmFtZSRzaHJleHQuJHZlciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kbGlibmFtZSRzaHJleHQuJHZlciIKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgZXZhbCBsaWJyYXJ5X25hbWVzPVwiJGFjbF9saWJyYXJ5X25hbWVzX3NwZWNcIgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gJGxpYnJhcnlfbmFtZXM7IGRvCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGYiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRmIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICBkbmwgVGhlbiBsb29rIGZvciBhIHN0YXRpYyBsaWJyYXJ5LgorICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiID0gIlgiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUuJGFjbF9saWJleHQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2E9IiRkaXIvJGxpYm5hbWUuJGFjbF9saWJleHQiCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiICE9ICJYIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lLmxhIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2xhPSIkZGlyLyRsaWJuYW1lLmxhIgorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiICE9ICJYIjsgdGhlbgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBkb25lCisgICAgICAgICAgZmkKKyAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgIT0gIlgiOyB0aGVuCisgICAgICAgICAgICBkbmwgRm91bmQgdGhlIGxpYnJhcnkuCisgICAgICAgICAgICBMVExJQltdTkFNRT0iJHtMVExJQltdTkFNRX0ke0xUTElCW11OQU1FOisgfS1MJGZvdW5kX2RpciAtbCRuYW1lIgorICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9zbyIgIT0gIlgiOyB0aGVuCisgICAgICAgICAgICAgIGRubCBMaW5raW5nIHdpdGggYSBzaGFyZWQgbGlicmFyeS4gV2UgYXR0ZW1wdCB0byBoYXJkY29kZSBpdHMKKyAgICAgICAgICAgICAgZG5sIGRpcmVjdG9yeSBpbnRvIHRoZSBleGVjdXRhYmxlJ3MgcnVucGF0aCwgdW5sZXNzIGl0J3MgdGhlCisgICAgICAgICAgICAgIGRubCBzdGFuZGFyZCAvdXNyL2xpYi4KKyAgICAgICAgICAgICAgaWYgdGVzdCAiJGVuYWJsZV9ycGF0aCIgPSBubyB8fCB0ZXN0ICJYJGZvdW5kX2RpciIgPSAiWC91c3IvJGFjbF9saWJkaXJzdGVtIjsgdGhlbgorICAgICAgICAgICAgICAgIGRubCBObyBoYXJkY29kaW5nIGlzIG5lZWRlZC4KKyAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmb3VuZF9zbyIKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGRubCBVc2UgYW4gZXhwbGljaXQgb3B0aW9uIHRvIGhhcmRjb2RlIERJUiBpbnRvIHRoZSByZXN1bHRpbmcKKyAgICAgICAgICAgICAgICBkbmwgYmluYXJ5LgorICAgICAgICAgICAgICAgIGRubCBQb3RlbnRpYWxseSBhZGQgRElSIHRvIGx0cnBhdGhkaXJzLgorICAgICAgICAgICAgICAgIGRubCBUaGUgbHRycGF0aGRpcnMgd2lsbCBiZSBhcHBlbmRlZCB0byAkTFRMSUJOQU1FIGF0IHRoZSBlbmQuCisgICAgICAgICAgICAgICAgaGF2ZWl0PQorICAgICAgICAgICAgICAgIGZvciB4IGluICRsdHJwYXRoZGlyczsgZG8KKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRmb3VuZF9kaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICBsdHJwYXRoZGlycz0iJGx0cnBhdGhkaXJzICRmb3VuZF9kaXIiCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBkbmwgVGhlIGhhcmRjb2RpbmcgaW50byAkTElCTkFNRSBpcyBzeXN0ZW0gZGVwZW5kZW50LgorICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRhY2xfaGFyZGNvZGVfZGlyZWN0IiA9IHllczsgdGhlbgorICAgICAgICAgICAgICAgICAgZG5sIFVzaW5nIERJUi9saWJOQU1FLnNvIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKKyAgICAgICAgICAgICAgICAgIGRubCByZXN1bHRpbmcgYmluYXJ5LgorICAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZm91bmRfc28iCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJGFjbF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIiAmJiB0ZXN0ICIkYWNsX2hhcmRjb2RlX21pbnVzX0wiID0gbm87IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgZG5sIFVzZSBhbiBleHBsaWNpdCBvcHRpb24gdG8gaGFyZGNvZGUgRElSIGludG8gdGhlIHJlc3VsdGluZworICAgICAgICAgICAgICAgICAgICBkbmwgYmluYXJ5LgorICAgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmb3VuZF9zbyIKKyAgICAgICAgICAgICAgICAgICAgZG5sIFBvdGVudGlhbGx5IGFkZCBESVIgdG8gcnBhdGhkaXJzLgorICAgICAgICAgICAgICAgICAgICBkbmwgVGhlIHJwYXRoZGlycyB3aWxsIGJlIGFwcGVuZGVkIHRvICRMSUJOQU1FIGF0IHRoZSBlbmQuCisgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKyAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJHJwYXRoZGlyczsgZG8KKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZm91bmRfZGlyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgcnBhdGhkaXJzPSIkcnBhdGhkaXJzICRmb3VuZF9kaXIiCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGRubCBSZWx5IG9uICItTCRmb3VuZF9kaXIiLgorICAgICAgICAgICAgICAgICAgICBkbmwgQnV0IGRvbid0IGFkZCBpdCBpZiBpdCdzIGFscmVhZHkgY29udGFpbmVkIGluIHRoZSBMREZMQUdTCisgICAgICAgICAgICAgICAgICAgIGRubCBvciB0aGUgYWxyZWFkeSBjb25zdHJ1Y3RlZCAkTElCTkFNRQorICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRMREZMQUdTICRMSUJbXU5BTUU7IGRvCisgICAgICAgICAgICAgICAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtTCRmb3VuZF9kaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfS1MJGZvdW5kX2RpciIKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGFjbF9oYXJkY29kZV9taW51c19MIiAhPSBubzsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIGRubCBGSVhNRTogTm90IHN1cmUgd2hldGhlciB3ZSBzaG91bGQgdXNlCisgICAgICAgICAgICAgICAgICAgICAgZG5sICItTCRmb3VuZF9kaXIgLWwkbmFtZSIgb3IgIi1MJGZvdW5kX2RpciAkZm91bmRfc28iCisgICAgICAgICAgICAgICAgICAgICAgZG5sIGhlcmUuCisgICAgICAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZm91bmRfc28iCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICBkbmwgV2UgY2Fubm90IHVzZSAkYWNsX2hhcmRjb2RlX3J1bnBhdGhfdmFyIGFuZCBMRF9SVU5fUEFUSAorICAgICAgICAgICAgICAgICAgICAgIGRubCBoZXJlLCBiZWNhdXNlIHRoaXMgZG9lc24ndCBmaXQgaW4gZmxhZ3MgcGFzc2VkIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgIGRubCBjb21waWxlci4gU28gZ2l2ZSB1cC4gTm8gaGFyZGNvZGluZy4gVGhpcyBhZmZlY3RzIG9ubHkKKyAgICAgICAgICAgICAgICAgICAgICBkbmwgdmVyeSBvbGQgc3lzdGVtcy4KKyAgICAgICAgICAgICAgICAgICAgICBkbmwgRklYTUU6IE5vdCBzdXJlIHdoZXRoZXIgd2Ugc2hvdWxkIHVzZQorICAgICAgICAgICAgICAgICAgICAgIGRubCAiLUwkZm91bmRfZGlyIC1sJG5hbWUiIG9yICItTCRmb3VuZF9kaXIgJGZvdW5kX3NvIgorICAgICAgICAgICAgICAgICAgICAgIGRubCBoZXJlLgorICAgICAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9LWwkbmFtZSIKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9hIiAhPSAiWCI7IHRoZW4KKyAgICAgICAgICAgICAgICBkbmwgTGlua2luZyB3aXRoIGEgc3RhdGljIGxpYnJhcnkuCisgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZm91bmRfYSIKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGRubCBXZSBzaG91bGRuJ3QgY29tZSBoZXJlLCBidXQgYW55d2F5IGl0J3MgZ29vZCB0byBoYXZlIGEKKyAgICAgICAgICAgICAgICBkbmwgZmFsbGJhY2suCisgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0tTCRmb3VuZF9kaXIgLWwkbmFtZSIKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBkbmwgQXNzdW1lIHRoZSBpbmNsdWRlIGZpbGVzIGFyZSBuZWFyYnkuCisgICAgICAgICAgICBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9CisgICAgICAgICAgICBjYXNlICIkZm91bmRfZGlyIiBpbgorICAgICAgICAgICAgICAqLyRhY2xfbGliZGlyc3RlbSB8ICovJGFjbF9saWJkaXJzdGVtLykKKyAgICAgICAgICAgICAgICBiYXNlZGlyPWBlY2hvICJYJGZvdW5kX2RpciIgfCBzZWQgLWUgJ3MsXlgsLCcgLWUgInMsLyRhY2xfbGliZGlyc3RlbS8iJyokLCwnYAorICAgICAgICAgICAgICAgIExJQltdTkFNRVtdX1BSRUZJWD0iJGJhc2VkaXIiCisgICAgICAgICAgICAgICAgYWRkaXRpb25hbF9pbmNsdWRlZGlyPSIkYmFzZWRpci9pbmNsdWRlIgorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIgIT0gIlgiOyB0aGVuCisgICAgICAgICAgICAgIGRubCBQb3RlbnRpYWxseSBhZGQgJGFkZGl0aW9uYWxfaW5jbHVkZWRpciB0byAkSU5DTkFNRS4KKyAgICAgICAgICAgICAgZG5sIEJ1dCBkb24ndCBhZGQgaXQKKyAgICAgICAgICAgICAgZG5sICAgMS4gaWYgaXQncyB0aGUgc3RhbmRhcmQgL3Vzci9pbmNsdWRlLAorICAgICAgICAgICAgICBkbmwgICAyLiBpZiBpdCdzIC91c3IvbG9jYWwvaW5jbHVkZSBhbmQgd2UgYXJlIHVzaW5nIEdDQyBvbiBMaW51eCwKKyAgICAgICAgICAgICAgZG5sICAgMy4gaWYgaXQncyBhbHJlYWR5IHByZXNlbnQgaW4gJENQUEZMQUdTIG9yIHRoZSBhbHJlYWR5CisgICAgICAgICAgICAgIGRubCAgICAgIGNvbnN0cnVjdGVkICRJTkNOQU1FLAorICAgICAgICAgICAgICBkbmwgICA0LiBpZiBpdCBkb2Vzbid0IGV4aXN0IGFzIGEgZGlyZWN0b3J5LgorICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIgIT0gIlgvdXNyL2luY2x1ZGUiOyB0aGVuCisgICAgICAgICAgICAgICAgaGF2ZWl0PQorICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiA9ICJYL3Vzci9sb2NhbC9pbmNsdWRlIjsgdGhlbgorICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJEdDQyI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgICAgICAgICAgICAgICAgIGxpbnV4KiB8IGdudSogfCBrKmJzZCotZ251KSBoYXZlaXQ9eWVzOzsKKyAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkQ1BQRkxBR1MgJElOQ1tdTkFNRTsgZG8KKyAgICAgICAgICAgICAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUkkYWRkaXRpb25hbF9pbmNsdWRlZGlyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKyAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZCAiJGFkZGl0aW9uYWxfaW5jbHVkZWRpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICBkbmwgUmVhbGx5IGFkZCAkYWRkaXRpb25hbF9pbmNsdWRlZGlyIHRvICRJTkNOQU1FLgorICAgICAgICAgICAgICAgICAgICAgIElOQ1tdTkFNRT0iJHtJTkNbXU5BTUV9JHtJTkNbXU5BTUU6KyB9LUkkYWRkaXRpb25hbF9pbmNsdWRlZGlyIgorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGRubCBMb29rIGZvciBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICBpZiB0ZXN0IC1uICIkZm91bmRfbGEiOyB0aGVuCisgICAgICAgICAgICAgIGRubCBSZWFkIHRoZSAubGEgZmlsZS4gSXQgZGVmaW5lcyB0aGUgdmFyaWFibGVzCisgICAgICAgICAgICAgIGRubCBkbG5hbWUsIGxpYnJhcnlfbmFtZXMsIG9sZF9saWJyYXJ5LCBkZXBlbmRlbmN5X2xpYnMsIGN1cnJlbnQsCisgICAgICAgICAgICAgIGRubCBhZ2UsIHJldmlzaW9uLCBpbnN0YWxsZWQsIGRsb3BlbiwgZGxwcmVvcGVuLCBsaWJkaXIuCisgICAgICAgICAgICAgIHNhdmVfbGliZGlyPSIkbGliZGlyIgorICAgICAgICAgICAgICBjYXNlICIkZm91bmRfbGEiIGluCisgICAgICAgICAgICAgICAgKi8qIHwgKlxcKikgLiAiJGZvdW5kX2xhIiA7OworICAgICAgICAgICAgICAgICopIC4gIi4vJGZvdW5kX2xhIiA7OworICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgIGxpYmRpcj0iJHNhdmVfbGliZGlyIgorICAgICAgICAgICAgICBkbmwgV2UgdXNlIG9ubHkgZGVwZW5kZW5jeV9saWJzLgorICAgICAgICAgICAgICBmb3IgZGVwIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisgICAgICAgICAgICAgICAgY2FzZSAiJGRlcCIgaW4KKyAgICAgICAgICAgICAgICAgIC1MKikKKyAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbF9saWJkaXI9YGVjaG8gIlgkZGVwIiB8IHNlZCAtZSAncy9eWC1MLy8nYAorICAgICAgICAgICAgICAgICAgICBkbmwgUG90ZW50aWFsbHkgYWRkICRhZGRpdGlvbmFsX2xpYmRpciB0byAkTElCTkFNRSBhbmQgJExUTElCTkFNRS4KKyAgICAgICAgICAgICAgICAgICAgZG5sIEJ1dCBkb24ndCBhZGQgaXQKKyAgICAgICAgICAgICAgICAgICAgZG5sICAgMS4gaWYgaXQncyB0aGUgc3RhbmRhcmQgL3Vzci9saWIsCisgICAgICAgICAgICAgICAgICAgIGRubCAgIDIuIGlmIGl0J3MgL3Vzci9sb2NhbC9saWIgYW5kIHdlIGFyZSB1c2luZyBHQ0Mgb24gTGludXgsCisgICAgICAgICAgICAgICAgICAgIGRubCAgIDMuIGlmIGl0J3MgYWxyZWFkeSBwcmVzZW50IGluICRMREZMQUdTIG9yIHRoZSBhbHJlYWR5CisgICAgICAgICAgICAgICAgICAgIGRubCAgICAgIGNvbnN0cnVjdGVkICRMSUJOQU1FLAorICAgICAgICAgICAgICAgICAgICBkbmwgICA0LiBpZiBpdCBkb2Vzbid0IGV4aXN0IGFzIGEgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiAhPSAiWC91c3IvJGFjbF9saWJkaXJzdGVtIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiA9ICJYL3Vzci9sb2NhbC8kYWNsX2xpYmRpcnN0ZW0iOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkR0NDIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICRob3N0X29zIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGludXgqIHwgZ251KiB8IGsqYnNkKi1nbnUpIGhhdmVpdD15ZXM7OworICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRMREZMQUdTICRMSUJbXU5BTUU7IGRvCisgICAgICAgICAgICAgICAgICAgICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbZXZhbCB4PVwiJHhcIl0pCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1MJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZCAiJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRubCBSZWFsbHkgYWRkICRhZGRpdGlvbmFsX2xpYmRpciB0byAkTElCTkFNRS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfS1MJGFkZGl0aW9uYWxfbGliZGlyIgorICAgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRMREZMQUdTICRMVExJQltdTkFNRTsgZG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUwkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1kICIkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG5sIFJlYWxseSBhZGQgJGFkZGl0aW9uYWxfbGliZGlyIHRvICRMVExJQk5BTUUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRMSUJbXU5BTUU9IiR7TFRMSUJbXU5BTUV9JHtMVExJQltdTkFNRTorIH0tTCRhZGRpdGlvbmFsX2xpYmRpciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgIC1SKikKKyAgICAgICAgICAgICAgICAgICAgZGlyPWBlY2hvICJYJGRlcCIgfCBzZWQgLWUgJ3MvXlgtUi8vJ2AKKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGVuYWJsZV9ycGF0aCIgIT0gbm87IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICBkbmwgUG90ZW50aWFsbHkgYWRkIERJUiB0byBycGF0aGRpcnMuCisgICAgICAgICAgICAgICAgICAgICAgZG5sIFRoZSBycGF0aGRpcnMgd2lsbCBiZSBhcHBlbmRlZCB0byAkTElCTkFNRSBhdCB0aGUgZW5kLgorICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKyAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkcnBhdGhkaXJzOyBkbworICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGRpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJwYXRoZGlycz0iJHJwYXRoZGlycyAkZGlyIgorICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgZG5sIFBvdGVudGlhbGx5IGFkZCBESVIgdG8gbHRycGF0aGRpcnMuCisgICAgICAgICAgICAgICAgICAgICAgZG5sIFRoZSBsdHJwYXRoZGlycyB3aWxsIGJlIGFwcGVuZGVkIHRvICRMVExJQk5BTUUgYXQgdGhlIGVuZC4KKyAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJGx0cnBhdGhkaXJzOyBkbworICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGRpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGx0cnBhdGhkaXJzPSIkbHRycGF0aGRpcnMgJGRpciIKKyAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgLWwqKQorICAgICAgICAgICAgICAgICAgICBkbmwgSGFuZGxlIHRoaXMgaW4gdGhlIG5leHQgcm91bmQuCisgICAgICAgICAgICAgICAgICAgIG5hbWVzX25leHRfcm91bmQ9IiRuYW1lc19uZXh0X3JvdW5kICJgZWNobyAiWCRkZXAiIHwgc2VkIC1lICdzL15YLWwvLydgCisgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAqLmxhKQorICAgICAgICAgICAgICAgICAgICBkbmwgSGFuZGxlIHRoaXMgaW4gdGhlIG5leHQgcm91bmQuIFRocm93IGF3YXkgdGhlIC5sYSdzCisgICAgICAgICAgICAgICAgICAgIGRubCBkaXJlY3Rvcnk7IGl0IGlzIGFscmVhZHkgY29udGFpbmVkIGluIGEgcHJlY2VkaW5nIC1MCisgICAgICAgICAgICAgICAgICAgIGRubCBvcHRpb24uCisgICAgICAgICAgICAgICAgICAgIG5hbWVzX25leHRfcm91bmQ9IiRuYW1lc19uZXh0X3JvdW5kICJgZWNobyAiWCRkZXAiIHwgc2VkIC1lICdzLF5YLiovLCwnIC1lICdzLF5saWIsLCcgLWUgJ3MsXC5sYSQsLCdgCisgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAqKQorICAgICAgICAgICAgICAgICAgICBkbmwgTW9zdCBsaWtlbHkgYW4gaW1tZWRpYXRlIGxpYnJhcnkgbmFtZS4KKyAgICAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZGVwIgorICAgICAgICAgICAgICAgICAgICBMVExJQltdTkFNRT0iJHtMVExJQltdTkFNRX0ke0xUTElCW11OQU1FOisgfSRkZXAiCisgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICBmaQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRubCBEaWRuJ3QgZmluZCB0aGUgbGlicmFyeTsgYXNzdW1lIGl0IGlzIGluIHRoZSBzeXN0ZW0gZGlyZWN0b3JpZXMKKyAgICAgICAgICAgIGRubCBrbm93biB0byB0aGUgbGlua2VyIGFuZCBydW50aW1lIGxvYWRlci4gKEFsbCB0aGUgc3lzdGVtCisgICAgICAgICAgICBkbmwgZGlyZWN0b3JpZXMga25vd24gdG8gdGhlIGxpbmtlciBzaG91bGQgYWxzbyBiZSBrbm93biB0byB0aGUKKyAgICAgICAgICAgIGRubCBydW50aW1lIGxvYWRlciwgb3RoZXJ3aXNlIHRoZSBzeXN0ZW0gaXMgc2V2ZXJlbHkgbWlzY29uZmlndXJlZC4pCisgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfS1sJG5hbWUiCisgICAgICAgICAgICBMVExJQltdTkFNRT0iJHtMVExJQltdTkFNRX0ke0xUTElCW11OQU1FOisgfS1sJG5hbWUiCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgZG9uZQorICBkb25lCisgIGlmIHRlc3QgIlgkcnBhdGhkaXJzIiAhPSAiWCI7IHRoZW4KKyAgICBpZiB0ZXN0IC1uICIkYWNsX2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisgICAgICBkbmwgV2VpcmQgcGxhdGZvcm06IG9ubHkgdGhlIGxhc3QgLXJwYXRoIG9wdGlvbiBjb3VudHMsIHRoZSB1c2VyIG11c3QKKyAgICAgIGRubCBwYXNzIGFsbCBwYXRoIGVsZW1lbnRzIGluIG9uZSBvcHRpb24uIFdlIGNhbiBhcnJhbmdlIHRoYXQgZm9yIGEKKyAgICAgIGRubCBzaW5nbGUgbGlicmFyeSwgYnV0IG5vdCB3aGVuIG1vcmUgdGhhbiBvbmUgJExJQk5BTUVzIGFyZSB1c2VkLgorICAgICAgYWxsZGlycz0KKyAgICAgIGZvciBmb3VuZF9kaXIgaW4gJHJwYXRoZGlyczsgZG8KKyAgICAgICAgYWxsZGlycz0iJHthbGxkaXJzfSR7YWxsZGlyczorJGFjbF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yfSRmb3VuZF9kaXIiCisgICAgICBkb25lCisgICAgICBkbmwgTm90ZTogYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgdXNlcyAkbGliZGlyIGFuZCAkd2wuCisgICAgICBhY2xfc2F2ZV9saWJkaXI9IiRsaWJkaXIiCisgICAgICBsaWJkaXI9IiRhbGxkaXJzIgorICAgICAgZXZhbCBmbGFnPVwiJGFjbF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKyAgICAgIGxpYmRpcj0iJGFjbF9zYXZlX2xpYmRpciIKKyAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZsYWciCisgICAgZWxzZQorICAgICAgZG5sIFRoZSAtcnBhdGggb3B0aW9ucyBhcmUgY3VtdWxhdGl2ZS4KKyAgICAgIGZvciBmb3VuZF9kaXIgaW4gJHJwYXRoZGlyczsgZG8KKyAgICAgICAgYWNsX3NhdmVfbGliZGlyPSIkbGliZGlyIgorICAgICAgICBsaWJkaXI9IiRmb3VuZF9kaXIiCisgICAgICAgIGV2YWwgZmxhZz1cIiRhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisgICAgICAgIGxpYmRpcj0iJGFjbF9zYXZlX2xpYmRpciIKKyAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZmxhZyIKKyAgICAgIGRvbmUKKyAgICBmaQorICBmaQorICBpZiB0ZXN0ICJYJGx0cnBhdGhkaXJzIiAhPSAiWCI7IHRoZW4KKyAgICBkbmwgV2hlbiB1c2luZyBsaWJ0b29sLCB0aGUgb3B0aW9uIHRoYXQgd29ya3MgZm9yIGJvdGggbGlicmFyaWVzIGFuZAorICAgIGRubCBleGVjdXRhYmxlcyBpcyAtUi4gVGhlIC1SIG9wdGlvbnMgYXJlIGN1bXVsYXRpdmUuCisgICAgZm9yIGZvdW5kX2RpciBpbiAkbHRycGF0aGRpcnM7IGRvCisgICAgICBMVExJQltdTkFNRT0iJHtMVExJQltdTkFNRX0ke0xUTElCW11OQU1FOisgfS1SJGZvdW5kX2RpciIKKyAgICBkb25lCisgIGZpCitdKQorCitkbmwgQUNfTElCX0FQUEVORFRPVkFSKFZBUiwgQ09OVEVOVFMpIGFwcGVuZHMgdGhlIGVsZW1lbnRzIG9mIENPTlRFTlRTIHRvIFZBUiwKK2RubCB1bmxlc3MgYWxyZWFkeSBwcmVzZW50IGluIFZBUi4KK2RubCBXb3JrcyBvbmx5IGZvciBDUFBGTEFHUywgbm90IGZvciBMSUIqIHZhcmlhYmxlcyBiZWNhdXNlIHRoYXQgc29tZXRpbWVzCitkbmwgY29udGFpbnMgdHdvIG9yIHRocmVlIGNvbnNlY3V0aXZlIGVsZW1lbnRzIHRoYXQgYmVsb25nIHRvZ2V0aGVyLgorQUNfREVGVU4oW0FDX0xJQl9BUFBFTkRUT1ZBUl0sCitbCisgIGZvciBlbGVtZW50IGluIFskMl07IGRvCisgICAgaGF2ZWl0PQorICAgIGZvciB4IGluICRbJDFdOyBkbworICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKKyAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRlbGVtZW50IjsgdGhlbgorICAgICAgICBoYXZlaXQ9eWVzCisgICAgICAgIGJyZWFrCisgICAgICBmaQorICAgIGRvbmUKKyAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgWyQxXT0iJHtbJDFdfSR7WyQxXTorIH0kZWxlbWVudCIKKyAgICBmaQorICBkb25lCitdKQorCitkbmwgRm9yIHRob3NlIGNhc2VzIHdoZXJlIGEgdmFyaWFibGUgY29udGFpbnMgc2V2ZXJhbCAtTCBhbmQgLWwgb3B0aW9ucworZG5sIHJlZmVycmluZyB0byB1bmtub3duIGxpYnJhcmllcyBhbmQgZGlyZWN0b3JpZXMsIHRoaXMgbWFjcm8gZGV0ZXJtaW5lcyB0aGUKK2RubCBuZWNlc3NhcnkgYWRkaXRpb25hbCBsaW5rZXIgb3B0aW9ucyBmb3IgdGhlIHJ1bnRpbWUgcGF0aC4KK2RubCBBQ19MSUJfTElOS0ZMQUdTX0ZST01fTElCUyhbTERBRERWQVJdLCBbTElCU1ZBTFVFXSwgW1VTRS1MSUJUT09MXSkKK2RubCBzZXRzIExEQUREVkFSIHRvIGxpbmtlciBvcHRpb25zIG5lZWRlZCB0b2dldGhlciB3aXRoIExJQlNWQUxVRS4KK2RubCBJZiBVU0UtTElCVE9PTCBldmFsdWF0ZXMgdG8gbm9uLWVtcHR5LCBsaW5raW5nIHdpdGggbGlidG9vbCBpcyBhc3N1bWVkLAorZG5sIG90aGVyd2lzZSBsaW5raW5nIHdpdGhvdXQgbGlidG9vbCBpcyBhc3N1bWVkLgorQUNfREVGVU4oW0FDX0xJQl9MSU5LRkxBR1NfRlJPTV9MSUJTXSwKK1sKKyAgQUNfUkVRVUlSRShbQUNfTElCX1JQQVRIXSkKKyAgQUNfUkVRVUlSRShbQUNfTElCX1BSRVBBUkVfTVVMVElMSUJdKQorICAkMT0KKyAgaWYgdGVzdCAiJGVuYWJsZV9ycGF0aCIgIT0gbm87IHRoZW4KKyAgICBpZiB0ZXN0IC1uICIkYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiICYmIHRlc3QgIiRhY2xfaGFyZGNvZGVfbWludXNfTCIgPSBubzsgdGhlbgorICAgICAgZG5sIFVzZSBhbiBleHBsaWNpdCBvcHRpb24gdG8gaGFyZGNvZGUgZGlyZWN0b3JpZXMgaW50byB0aGUgcmVzdWx0aW5nCisgICAgICBkbmwgYmluYXJ5LgorICAgICAgcnBhdGhkaXJzPQorICAgICAgbmV4dD0KKyAgICAgIGZvciBvcHQgaW4gJDI7IGRvCisgICAgICAgIGlmIHRlc3QgLW4gIiRuZXh0IjsgdGhlbgorICAgICAgICAgIGRpcj0iJG5leHQiCisgICAgICAgICAgZG5sIE5vIG5lZWQgdG8gaGFyZGNvZGUgdGhlIHN0YW5kYXJkIC91c3IvbGliLgorICAgICAgICAgIGlmIHRlc3QgIlgkZGlyIiAhPSAiWC91c3IvJGFjbF9saWJkaXJzdGVtIjsgdGhlbgorICAgICAgICAgICAgcnBhdGhkaXJzPSIkcnBhdGhkaXJzICRkaXIiCisgICAgICAgICAgZmkKKyAgICAgICAgICBuZXh0PQorICAgICAgICBlbHNlCisgICAgICAgICAgY2FzZSAkb3B0IGluCisgICAgICAgICAgICAtTCkgbmV4dD15ZXMgOzsKKyAgICAgICAgICAgIC1MKikgZGlyPWBlY2hvICJYJG9wdCIgfCBzZWQgLWUgJ3MsXlgtTCwsJ2AKKyAgICAgICAgICAgICAgICAgZG5sIE5vIG5lZWQgdG8gaGFyZGNvZGUgdGhlIHN0YW5kYXJkIC91c3IvbGliLgorICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGRpciIgIT0gIlgvdXNyLyRhY2xfbGliZGlyc3RlbSI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICBycGF0aGRpcnM9IiRycGF0aGRpcnMgJGRpciIKKyAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgbmV4dD0gOzsKKyAgICAgICAgICAgICopIG5leHQ9IDs7CisgICAgICAgICAgZXNhYworICAgICAgICBmaQorICAgICAgZG9uZQorICAgICAgaWYgdGVzdCAiWCRycGF0aGRpcnMiICE9ICJYIjsgdGhlbgorICAgICAgICBpZiB0ZXN0IC1uICIiJDMiIjsgdGhlbgorICAgICAgICAgIGRubCBsaWJ0b29sIGlzIHVzZWQgZm9yIGxpbmtpbmcuIFVzZSAtUiBvcHRpb25zLgorICAgICAgICAgIGZvciBkaXIgaW4gJHJwYXRoZGlyczsgZG8KKyAgICAgICAgICAgICQxPSIkeyQxfSR7JDE6KyB9LVIkZGlyIgorICAgICAgICAgIGRvbmUKKyAgICAgICAgZWxzZQorICAgICAgICAgIGRubCBUaGUgbGlua2VyIGlzIHVzZWQgZm9yIGxpbmtpbmcgZGlyZWN0bHkuCisgICAgICAgICAgaWYgdGVzdCAtbiAiJGFjbF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgorICAgICAgICAgICAgZG5sIFdlaXJkIHBsYXRmb3JtOiBvbmx5IHRoZSBsYXN0IC1ycGF0aCBvcHRpb24gY291bnRzLCB0aGUgdXNlcgorICAgICAgICAgICAgZG5sIG11c3QgcGFzcyBhbGwgcGF0aCBlbGVtZW50cyBpbiBvbmUgb3B0aW9uLgorICAgICAgICAgICAgYWxsZGlycz0KKyAgICAgICAgICAgIGZvciBkaXIgaW4gJHJwYXRoZGlyczsgZG8KKyAgICAgICAgICAgICAgYWxsZGlycz0iJHthbGxkaXJzfSR7YWxsZGlyczorJGFjbF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yfSRkaXIiCisgICAgICAgICAgICBkb25lCisgICAgICAgICAgICBhY2xfc2F2ZV9saWJkaXI9IiRsaWJkaXIiCisgICAgICAgICAgICBsaWJkaXI9IiRhbGxkaXJzIgorICAgICAgICAgICAgZXZhbCBmbGFnPVwiJGFjbF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKyAgICAgICAgICAgIGxpYmRpcj0iJGFjbF9zYXZlX2xpYmRpciIKKyAgICAgICAgICAgICQxPSIkZmxhZyIKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBkbmwgVGhlIC1ycGF0aCBvcHRpb25zIGFyZSBjdW11bGF0aXZlLgorICAgICAgICAgICAgZm9yIGRpciBpbiAkcnBhdGhkaXJzOyBkbworICAgICAgICAgICAgICBhY2xfc2F2ZV9saWJkaXI9IiRsaWJkaXIiCisgICAgICAgICAgICAgIGxpYmRpcj0iJGRpciIKKyAgICAgICAgICAgICAgZXZhbCBmbGFnPVwiJGFjbF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKyAgICAgICAgICAgICAgbGliZGlyPSIkYWNsX3NhdmVfbGliZGlyIgorICAgICAgICAgICAgICAkMT0iJHskMX0keyQxOisgfSRmbGFnIgorICAgICAgICAgICAgZG9uZQorICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICBmaQorICAgIGZpCisgIGZpCisgIEFDX1NVQlNUKFskMV0pCitdKQpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L200L2xpYi1wcmVmaXgubTQgYi9wYXJ0ZWQtMS44LjcvbTQvbGliLXByZWZpeC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODY4NGUxCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L200L2xpYi1wcmVmaXgubTQKQEAgLTAsMCArMSwxODUgQEAKKyMgbGliLXByZWZpeC5tNCBzZXJpYWwgNSAoZ2V0dGV4dC0wLjE1KQorZG5sIENvcHlyaWdodCAoQykgMjAwMS0yMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK2RubCBGcm9tIEJydW5vIEhhaWJsZS4KKworZG5sIEFDX0xJQl9BUkdfV0lUSCBpcyBzeW5vbnltb3VzIHRvIEFDX0FSR19XSVRIIGluIGF1dG9jb25mLTIuMTMsIGFuZAorZG5sIHNpbWlsYXIgdG8gQUNfQVJHX1dJVEggaW4gYXV0b2NvbmYgMi41Mi4uLjIuNTcgZXhjZXB0IHRoYXQgaXMgZG9lc24ndAorZG5sIHJlcXVpcmUgZXhjZXNzaXZlIGJyYWNrZXRpbmcuCitpZmRlZihbQUNfSEVMUF9TVFJJTkddLAorW0FDX0RFRlVOKFtBQ19MSUJfQVJHX1dJVEhdLCBbQUNfQVJHX1dJVEgoWyQxXSxbWyQyXV0sWyQzXSxbJDRdKV0pXSwKK1tBQ19ERUZVTihbQUNfXVtMSUJfQVJHX1dJVEhdLCBbQUNfQVJHX1dJVEgoWyQxXSxbJDJdLFskM10sWyQ0XSldKV0pCisKK2RubCBBQ19MSUJfUFJFRklYIGFkZHMgdG8gdGhlIENQUEZMQUdTIGFuZCBMREZMQUdTIHRoZSBmbGFncyB0aGF0IGFyZSBuZWVkZWQKK2RubCB0byBhY2Nlc3MgcHJldmlvdXNseSBpbnN0YWxsZWQgbGlicmFyaWVzLiBUaGUgYmFzaWMgYXNzdW1wdGlvbiBpcyB0aGF0CitkbmwgYSB1c2VyIHdpbGwgd2FudCBwYWNrYWdlcyB0byB1c2Ugb3RoZXIgcGFja2FnZXMgaGUgcHJldmlvdXNseSBpbnN0YWxsZWQKK2RubCB3aXRoIHRoZSBzYW1lIC0tcHJlZml4IG9wdGlvbi4KK2RubCBUaGlzIG1hY3JvIGlzIG5vdCBuZWVkZWQgaWYgb25seSBBQ19MSUJfTElOS0ZMQUdTIGlzIHVzZWQgdG8gbG9jYXRlCitkbmwgbGlicmFyaWVzLCBidXQgaXMgb3RoZXJ3aXNlIHZlcnkgY29udmVuaWVudC4KK0FDX0RFRlVOKFtBQ19MSUJfUFJFRklYXSwKK1sKKyAgQUNfQkVGT1JFKFskMF0sIFtBQ19MSUJfTElOS0ZMQUdTXSkKKyAgQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pCisgIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkKKyAgQUNfUkVRVUlSRShbQUNfTElCX1BSRVBBUkVfTVVMVElMSUJdKQorICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9QUkVGSVhdKQorICBkbmwgQnkgZGVmYXVsdCwgbG9vayBpbiAkaW5jbHVkZWRpciBhbmQgJGxpYmRpci4KKyAgdXNlX2FkZGl0aW9uYWw9eWVzCisgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbCisgICAgZXZhbCBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9XCIkaW5jbHVkZWRpclwiCisgICAgZXZhbCBhZGRpdGlvbmFsX2xpYmRpcj1cIiRsaWJkaXJcIgorICBdKQorICBBQ19MSUJfQVJHX1dJVEgoW2xpYi1wcmVmaXhdLAorWyAgLS13aXRoLWxpYi1wcmVmaXhbPURJUl0gc2VhcmNoIGZvciBsaWJyYXJpZXMgaW4gRElSL2luY2x1ZGUgYW5kIERJUi9saWIKKyAgLS13aXRob3V0LWxpYi1wcmVmaXggICAgZG9uJ3Qgc2VhcmNoIGZvciBsaWJyYXJpZXMgaW4gaW5jbHVkZWRpciBhbmQgbGliZGlyXSwKK1sKKyAgICBpZiB0ZXN0ICJYJHdpdGh2YWwiID0gIlhubyI7IHRoZW4KKyAgICAgIHVzZV9hZGRpdGlvbmFsPW5vCisgICAgZWxzZQorICAgICAgaWYgdGVzdCAiWCR3aXRodmFsIiA9ICJYIjsgdGhlbgorICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoWworICAgICAgICAgIGV2YWwgYWRkaXRpb25hbF9pbmNsdWRlZGlyPVwiJGluY2x1ZGVkaXJcIgorICAgICAgICAgIGV2YWwgYWRkaXRpb25hbF9saWJkaXI9XCIkbGliZGlyXCIKKyAgICAgICAgXSkKKyAgICAgIGVsc2UKKyAgICAgICAgYWRkaXRpb25hbF9pbmNsdWRlZGlyPSIkd2l0aHZhbC9pbmNsdWRlIgorICAgICAgICBhZGRpdGlvbmFsX2xpYmRpcj0iJHdpdGh2YWwvJGFjbF9saWJkaXJzdGVtIgorICAgICAgZmkKKyAgICBmaQorXSkKKyAgaWYgdGVzdCAkdXNlX2FkZGl0aW9uYWwgPSB5ZXM7IHRoZW4KKyAgICBkbmwgUG90ZW50aWFsbHkgYWRkICRhZGRpdGlvbmFsX2luY2x1ZGVkaXIgdG8gJENQUEZMQUdTLgorICAgIGRubCBCdXQgZG9uJ3QgYWRkIGl0CisgICAgZG5sICAgMS4gaWYgaXQncyB0aGUgc3RhbmRhcmQgL3Vzci9pbmNsdWRlLAorICAgIGRubCAgIDIuIGlmIGl0J3MgYWxyZWFkeSBwcmVzZW50IGluICRDUFBGTEFHUywKKyAgICBkbmwgICAzLiBpZiBpdCdzIC91c3IvbG9jYWwvaW5jbHVkZSBhbmQgd2UgYXJlIHVzaW5nIEdDQyBvbiBMaW51eCwKKyAgICBkbmwgICA0LiBpZiBpdCBkb2Vzbid0IGV4aXN0IGFzIGEgZGlyZWN0b3J5LgorICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiAhPSAiWC91c3IvaW5jbHVkZSI7IHRoZW4KKyAgICAgIGhhdmVpdD0KKyAgICAgIGZvciB4IGluICRDUFBGTEFHUzsgZG8KKyAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKKyAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUkkYWRkaXRpb25hbF9pbmNsdWRlZGlyIjsgdGhlbgorICAgICAgICAgIGhhdmVpdD15ZXMKKyAgICAgICAgICBicmVhaworICAgICAgICBmaQorICAgICAgZG9uZQorICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiID0gIlgvdXNyL2xvY2FsL2luY2x1ZGUiOyB0aGVuCisgICAgICAgICAgaWYgdGVzdCAtbiAiJEdDQyI7IHRoZW4KKyAgICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgICAgICAgICAgbGludXgqIHwgZ251KiB8IGsqYnNkKi1nbnUpIGhhdmVpdD15ZXM7OworICAgICAgICAgICAgZXNhYworICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgaWYgdGVzdCAtZCAiJGFkZGl0aW9uYWxfaW5jbHVkZWRpciI7IHRoZW4KKyAgICAgICAgICAgIGRubCBSZWFsbHkgYWRkICRhZGRpdGlvbmFsX2luY2x1ZGVkaXIgdG8gJENQUEZMQUdTLgorICAgICAgICAgICAgQ1BQRkxBR1M9IiR7Q1BQRkxBR1N9JHtDUFBGTEFHUzorIH0tSSRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgZmkKKyAgICBkbmwgUG90ZW50aWFsbHkgYWRkICRhZGRpdGlvbmFsX2xpYmRpciB0byAkTERGTEFHUy4KKyAgICBkbmwgQnV0IGRvbid0IGFkZCBpdAorICAgIGRubCAgIDEuIGlmIGl0J3MgdGhlIHN0YW5kYXJkIC91c3IvbGliLAorICAgIGRubCAgIDIuIGlmIGl0J3MgYWxyZWFkeSBwcmVzZW50IGluICRMREZMQUdTLAorICAgIGRubCAgIDMuIGlmIGl0J3MgL3Vzci9sb2NhbC9saWIgYW5kIHdlIGFyZSB1c2luZyBHQ0Mgb24gTGludXgsCisgICAgZG5sICAgNC4gaWYgaXQgZG9lc24ndCBleGlzdCBhcyBhIGRpcmVjdG9yeS4KKyAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiAhPSAiWC91c3IvJGFjbF9saWJkaXJzdGVtIjsgdGhlbgorICAgICAgaGF2ZWl0PQorICAgICAgZm9yIHggaW4gJExERkxBR1M7IGRvCisgICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbZXZhbCB4PVwiJHhcIl0pCisgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1MJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgorICAgICAgICAgIGhhdmVpdD15ZXMKKyAgICAgICAgICBicmVhaworICAgICAgICBmaQorICAgICAgZG9uZQorICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2xpYmRpciIgPSAiWC91c3IvbG9jYWwvJGFjbF9saWJkaXJzdGVtIjsgdGhlbgorICAgICAgICAgIGlmIHRlc3QgLW4gIiRHQ0MiOyB0aGVuCisgICAgICAgICAgICBjYXNlICRob3N0X29zIGluCisgICAgICAgICAgICAgIGxpbnV4KikgaGF2ZWl0PXllczs7CisgICAgICAgICAgICBlc2FjCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICBpZiB0ZXN0IC1kICIkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCisgICAgICAgICAgICBkbmwgUmVhbGx5IGFkZCAkYWRkaXRpb25hbF9saWJkaXIgdG8gJExERkxBR1MuCisgICAgICAgICAgICBMREZMQUdTPSIke0xERkxBR1N9JHtMREZMQUdTOisgfS1MJGFkZGl0aW9uYWxfbGliZGlyIgorICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICBmaQorICAgIGZpCisgIGZpCitdKQorCitkbmwgQUNfTElCX1BSRVBBUkVfUFJFRklYIGNyZWF0ZXMgdmFyaWFibGVzIGFjbF9maW5hbF9wcmVmaXgsCitkbmwgYWNsX2ZpbmFsX2V4ZWNfcHJlZml4LCBjb250YWluaW5nIHRoZSB2YWx1ZXMgdG8gd2hpY2ggJHByZWZpeCBhbmQKK2RubCAkZXhlY19wcmVmaXggd2lsbCBleHBhbmQgYXQgdGhlIGVuZCBvZiB0aGUgY29uZmlndXJlIHNjcmlwdC4KK0FDX0RFRlVOKFtBQ19MSUJfUFJFUEFSRV9QUkVGSVhdLAorWworICBkbmwgVW5mb3J0dW5hdGVseSwgcHJlZml4IGFuZCBleGVjX3ByZWZpeCBnZXQgb25seSBmaW5hbGx5IGRldGVybWluZWQKKyAgZG5sIGF0IHRoZSBlbmQgb2YgY29uZmlndXJlLgorICBpZiB0ZXN0ICJYJHByZWZpeCIgPSAiWE5PTkUiOyB0aGVuCisgICAgYWNsX2ZpbmFsX3ByZWZpeD0iJGFjX2RlZmF1bHRfcHJlZml4IgorICBlbHNlCisgICAgYWNsX2ZpbmFsX3ByZWZpeD0iJHByZWZpeCIKKyAgZmkKKyAgaWYgdGVzdCAiWCRleGVjX3ByZWZpeCIgPSAiWE5PTkUiOyB0aGVuCisgICAgYWNsX2ZpbmFsX2V4ZWNfcHJlZml4PScke3ByZWZpeH0nCisgIGVsc2UKKyAgICBhY2xfZmluYWxfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCIKKyAgZmkKKyAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4IgorICBwcmVmaXg9IiRhY2xfZmluYWxfcHJlZml4IgorICBldmFsIGFjbF9maW5hbF9leGVjX3ByZWZpeD1cIiRhY2xfZmluYWxfZXhlY19wcmVmaXhcIgorICBwcmVmaXg9IiRhY2xfc2F2ZV9wcmVmaXgiCitdKQorCitkbmwgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtzdGF0ZW1lbnRdKSBldmFsdWF0ZXMgc3RhdGVtZW50LCB3aXRoIHRoZQorZG5sIHZhcmlhYmxlcyBwcmVmaXggYW5kIGV4ZWNfcHJlZml4IGJvdW5kIHRvIHRoZSB2YWx1ZXMgdGhleSB3aWxsIGhhdmUKK2RubCBhdCB0aGUgZW5kIG9mIHRoZSBjb25maWd1cmUgc2NyaXB0LgorQUNfREVGVU4oW0FDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWF0sCitbCisgIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCIKKyAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZpeCIKKyAgYWNsX3NhdmVfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCIKKyAgZXhlY19wcmVmaXg9IiRhY2xfZmluYWxfZXhlY19wcmVmaXgiCisgICQxCisgIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhlY19wcmVmaXgiCisgIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKK10pCisKK2RubCBBQ19MSUJfUFJFUEFSRV9NVUxUSUxJQiBjcmVhdGVzIGEgdmFyaWFibGUgYWNsX2xpYmRpcnN0ZW0sIGNvbnRhaW5pbmcKK2RubCB0aGUgYmFzZW5hbWUgb2YgdGhlIGxpYmRpciwgZWl0aGVyICJsaWIiIG9yICJsaWI2NCIuCitBQ19ERUZVTihbQUNfTElCX1BSRVBBUkVfTVVMVElMSUJdLAorWworICBkbmwgVGhlcmUgaXMgbm8gZm9ybWFsIHN0YW5kYXJkIHJlZ2FyZGluZyBsaWIgYW5kIGxpYjY0LiBUaGUgY3VycmVudAorICBkbmwgcHJhY3RpY2UgaXMgdGhhdCBvbiBhIHN5c3RlbSBzdXBwb3J0aW5nIDMyLWJpdCBhbmQgNjQtYml0IGluc3RydWN0aW9uCisgIGRubCBzZXRzIG9yIEFCSXMsIDY0LWJpdCBsaWJyYXJpZXMgZ28gdW5kZXIgJHByZWZpeC9saWI2NCBhbmQgMzItYml0CisgIGRubCBsaWJyYXJpZXMgZ28gdW5kZXIgJHByZWZpeC9saWIuIFdlIGRldGVybWluZSB0aGUgY29tcGlsZXIncyBkZWZhdWx0CisgIGRubCBtb2RlIGJ5IGxvb2tpbmcgYXQgdGhlIGNvbXBpbGVyJ3MgbGlicmFyeSBzZWFyY2ggcGF0aC4gSWYgYXQgbGVhc3QKKyAgZG5sIG9mIGl0cyBlbGVtZW50cyBlbmRzIGluIC9saWI2NCBvciBwb2ludHMgdG8gYSBkaXJlY3Rvcnkgd2hvc2UgYWJzb2x1dGUKKyAgZG5sIHBhdGhuYW1lIGVuZHMgaW4gL2xpYjY0LCB3ZSBhc3N1bWUgYSA2NC1iaXQgQUJJLiBPdGhlcndpc2Ugd2UgdXNlIHRoZQorICBkbmwgZGVmYXVsdCwgbmFtZWx5ICJsaWIiLgorICBhY2xfbGliZGlyc3RlbT1saWIKKyAgc2VhcmNocGF0aD1gKExDX0FMTD1DICRDQyAtcHJpbnQtc2VhcmNoLWRpcnMpIDI+L2Rldi9udWxsIHwgc2VkIC1uIC1lICdzLF5saWJyYXJpZXM6ICwscCcgfCBzZWQgLWUgJ3MsXj0sLCdgCisgIGlmIHRlc3QgLW4gIiRzZWFyY2hwYXRoIjsgdGhlbgorICAgIGFjbF9zYXZlX0lGUz0iJHtJRlM9IAl9IjsgSUZTPSI6IgorICAgIGZvciBzZWFyY2hkaXIgaW4gJHNlYXJjaHBhdGg7IGRvCisgICAgICBpZiB0ZXN0IC1kICIkc2VhcmNoZGlyIjsgdGhlbgorICAgICAgICBjYXNlICIkc2VhcmNoZGlyIiBpbgorICAgICAgICAgICovbGliNjQvIHwgKi9saWI2NCApIGFjbF9saWJkaXJzdGVtPWxpYjY0IDs7CisgICAgICAgICAgKikgc2VhcmNoZGlyPWBjZCAiJHNlYXJjaGRpciIgJiYgcHdkYAorICAgICAgICAgICAgIGNhc2UgIiRzZWFyY2hkaXIiIGluCisgICAgICAgICAgICAgICAqL2xpYjY0ICkgYWNsX2xpYmRpcnN0ZW09bGliNjQgOzsKKyAgICAgICAgICAgICBlc2FjIDs7CisgICAgICAgIGVzYWMKKyAgICAgIGZpCisgICAgZG9uZQorICAgIElGUz0iJGFjbF9zYXZlX0lGUyIKKyAgZmkKK10pCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbTQvbG9jYWxjaGFyc2V0Lm00IGIvcGFydGVkLTEuOC43L200L2xvY2FsY2hhcnNldC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmI3NzMzCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L200L2xvY2FsY2hhcnNldC5tNApAQCAtMCwwICsxLDE2IEBACisjIGxvY2FsY2hhcnNldC5tNCBzZXJpYWwgNQorZG5sIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNCwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitBQ19ERUZVTihbZ2xfTE9DQUxDSEFSU0VUXSwKK1sKKyAgZG5sIFByZXJlcXVpc2l0ZXMgb2YgbGliL2xvY2FsY2hhcnNldC5jLgorICBBQ19SRVFVSVJFKFtBTV9MQU5HSU5GT19DT0RFU0VUXSkKKyAgQUNfQ0hFQ0tfREVDTFNfT05DRShnZXRjX3VubG9ja2VkKQorCisgIGRubCBQcmVyZXF1aXNpdGVzIG9mIHRoZSBsaWIvTWFrZWZpbGUuYW0gc25pcHBldC4KKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKQorICBBQ19SRVFVSVJFKFtnbF9HTElCQzIxXSkKK10pCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbTQvbG9uZy1vcHRpb25zLm00IGIvcGFydGVkLTEuOC43L200L2xvbmctb3B0aW9ucy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzEyYmFkCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L200L2xvbmctb3B0aW9ucy5tNApAQCAtMCwwICsxLDEyIEBACisjIGxvbmctb3B0aW9ucy5tNCBzZXJpYWwgNQorZG5sIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNSwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitBQ19ERUZVTihbZ2xfTE9OR19PUFRJT05TXSwKK1sKKyAgQUNfTElCT0JKKFtsb25nLW9wdGlvbnNdKQorCisgIGRubCBQcmVyZXF1aXNpdGVzIG9mIGxpYi9sb25nLW9wdGlvbnMuYy4KK10pCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbTQvbG9uZ2xvbmcubTQgYi9wYXJ0ZWQtMS44LjcvbTQvbG9uZ2xvbmcubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY5ZTg2MgotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9tNC9sb25nbG9uZy5tNApAQCAtMCwwICsxLDcyIEBACisjIGxvbmdsb25nLm00IHNlcmlhbCAxMAorZG5sIENvcHlyaWdodCAoQykgMTk5OS0yMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK2RubCBGcm9tIFBhdWwgRWdnZXJ0LgorCisjIERlZmluZSBIQVZFX0xPTkdfTE9OR19JTlQgaWYgJ2xvbmcgbG9uZyBpbnQnIHdvcmtzLgorIyBUaGlzIGZpeGVzIGEgYnVnIGluIEF1dG9jb25mIDIuNjAsIGJ1dCBjYW4gYmUgcmVtb3ZlZCBvbmNlIHdlCisjIGFzc3VtZSAyLjYxIGV2ZXJ5d2hlcmUuCisKKyMgTm90ZTogSWYgdGhlIHR5cGUgJ2xvbmcgbG9uZyBpbnQnIGV4aXN0cyBidXQgaXMgb25seSAzMiBiaXRzIGxhcmdlCisjIChhcyBvbiBzb21lIHZlcnkgb2xkIGNvbXBpbGVycyksIEhBVkVfTE9OR19MT05HX0lOVCB3aWxsIG5vdCBiZQorIyBkZWZpbmVkLiBJbiB0aGlzIGNhc2UgeW91IGNhbiB0cmVhdCAnbG9uZyBsb25nIGludCcgbGlrZSAnbG9uZyBpbnQnLgorCitBQ19ERUZVTihbQUNfVFlQRV9MT05HX0xPTkdfSU5UXSwKK1sKKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBsb25nIGxvbmcgaW50XSwgW2FjX2N2X3R5cGVfbG9uZ19sb25nX2ludF0sCisgICAgW0FDX0xJTktfSUZFTFNFKAorICAgICAgIFtBQ19MQU5HX1BST0dSQU0oCisJICBbW2xvbmcgbG9uZyBpbnQgbGwgPSA5MjIzMzcyMDM2ODU0Nzc1ODA3bGw7CisJICAgIGxvbmcgbG9uZyBpbnQgbmxsID0gLTkyMjMzNzIwMzY4NTQ3NzU4MDdMTDsKKwkgICAgdHlwZWRlZiBpbnQgYVsoKC05MjIzMzcyMDM2ODU0Nzc1ODA3TEwgPCAwCisJCQkgICAgJiYgMCA8IDkyMjMzNzIwMzY4NTQ3NzU4MDdsbCkKKwkJCSAgID8gMSA6IC0xKV07CisJICAgIGludCBpID0gNjM7XV0sCisJICBbW2xvbmcgbG9uZyBpbnQgbGxtYXggPSA5MjIzMzcyMDM2ODU0Nzc1ODA3bGw7CisJICAgIHJldHVybiAoKGxsIDw8IDYzKSB8IChsbCA+PiA2MykgfCAobGwgPCBpKSB8IChsbCA+IGkpCisJCSAgICB8IChsbG1heCAvIGxsKSB8IChsbG1heCAlIGxsKSk7XV0pXSwKKyAgICAgICBbZG5sIFRoaXMgY2F0Y2hlcyBhIGJ1ZyBpbiBUYW5kZW0gTm9uU3RvcCBLZXJuZWwgKE9TUykgY2MgLU8gY2lyY2EgMjAwNC4KKwlkbmwgSWYgY3Jvc3MgY29tcGlsaW5nLCBhc3N1bWUgdGhlIGJ1ZyBpc24ndCBpbXBvcnRhbnQsIHNpbmNlCisJZG5sIG5vYm9keSBjcm9zcyBjb21waWxlcyBmb3IgdGhpcyBwbGF0Zm9ybSBhcyBmYXIgYXMgd2Uga25vdy4KKyAgICAgICAgQUNfUlVOX0lGRUxTRSgKKwkgIFtBQ19MQU5HX1BST0dSQU0oCisJICAgICBbW0AlOkBpbmNsdWRlIDxsaW1pdHMuaD4KKwkgICAgICAgQCU6QGlmbmRlZiBMTE9OR19NQVgKKwkgICAgICAgQCU6QCBkZWZpbmUgSEFMRiBcCisJCQkoMUxMIDw8IChzaXplb2YgKGxvbmcgbG9uZyBpbnQpICogQ0hBUl9CSVQgLSAyKSkKKwkgICAgICAgQCU6QCBkZWZpbmUgTExPTkdfTUFYIChIQUxGIC0gMSArIEhBTEYpCisJICAgICAgIEAlOkBlbmRpZl1dLAorCSAgICAgW1tsb25nIGxvbmcgaW50IG4gPSAxOworCSAgICAgICBpbnQgaTsKKwkgICAgICAgZm9yIChpID0gMDsgOyBpKyspCisJCSB7CisJCSAgIGxvbmcgbG9uZyBpbnQgbSA9IG4gPDwgaTsKKwkJICAgaWYgKG0gPj4gaSAhPSBuKQorCQkgICAgIHJldHVybiAxOworCQkgICBpZiAoTExPTkdfTUFYIC8gMiA8IG0pCisJCSAgICAgYnJlYWs7CisJCSB9CisJICAgICAgIHJldHVybiAwO11dKV0sCisJICBbYWNfY3ZfdHlwZV9sb25nX2xvbmdfaW50PXllc10sCisJICBbYWNfY3ZfdHlwZV9sb25nX2xvbmdfaW50PW5vXSwKKwkgIFthY19jdl90eXBlX2xvbmdfbG9uZ19pbnQ9eWVzXSldLAorICAgICAgIFthY19jdl90eXBlX2xvbmdfbG9uZ19pbnQ9bm9dKV0pCisgIGlmIHRlc3QgJGFjX2N2X3R5cGVfbG9uZ19sb25nX2ludCA9IHllczsgdGhlbgorICAgIEFDX0RFRklORShbSEFWRV9MT05HX0xPTkdfSU5UXSwgMSwKKyAgICAgIFtEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgbG9uZyBsb25nIGludCcuXSkKKyAgZmkKK10pCisKKyMgVGhpcyBtYWNybyBpcyBvYnNvbGVzY2VudCBhbmQgc2hvdWxkIGdvIGF3YXkgc29vbi4KK0FDX0RFRlVOKFtnbF9BQ19UWVBFX0xPTkdfTE9OR10sCitbCisgIEFDX1JFUVVJUkUoW0FDX1RZUEVfTE9OR19MT05HX0lOVF0pCisgIGFjX2N2X3R5cGVfbG9uZ19sb25nPSRhY19jdl90eXBlX2xvbmdfbG9uZ19pbnQKKyAgaWYgdGVzdCAkYWNfY3ZfdHlwZV9sb25nX2xvbmcgPSB5ZXM7IHRoZW4KKyAgICBBQ19ERUZJTkUoSEFWRV9MT05HX0xPTkcsIDEsCisgICAgICBbRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnbG9uZyBsb25nJyB0eXBlLl0pCisgIGZpCitdKQpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L200L21icnRvd2MubTQgYi9wYXJ0ZWQtMS44LjcvbTQvbWJydG93Yy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2JkOTExCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L200L21icnRvd2MubTQKQEAgLTAsMCArMSwzMSBAQAorIyBtYnJ0b3djLm00IHNlcmlhbCA4CitkbmwgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIsIDIwMDQtMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitkbmwgRnJvbSBQYXVsIEVnZ2VydAorCitkbmwgVGhpcyBmaWxlIGNhbiBiZSByZW1vdmVkLCBhbmQgZ2xfRlVOQ19NQlJUT1dDIHJlcGxhY2VkIHdpdGgKK2RubCBBQ19GVU5DX01CUlRPV0MsIHdoZW4gYXV0b2NvbmYgMi42MCBjYW4gYmUgYXNzdW1lZCBldmVyeXdoZXJlLgorCitBQ19ERUZVTihbZ2xfRlVOQ19NQlJUT1dDXSwKK1sKKyAgZG5sIFNhbWUgYXMgQUNfRlVOQ19NQlJUT1dDIGluIGF1dG9jb25mLTIuNjAuCisgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIG1icnRvd2MgYW5kIG1ic3RhdGVfdCBhcmUgcHJvcGVybHkgZGVjbGFyZWRdLAorICAgIGdsX2N2X2Z1bmNfbWJydG93YywKKyAgICBbQUNfTElOS19JRkVMU0UoCisgICAgICAgW0FDX0xBTkdfUFJPR1JBTSgKKyAgICAgICAgICAgIFtbI2luY2x1ZGUgPHdjaGFyLmg+XV0sCisgICAgICAgICAgICBbW3djaGFyX3Qgd2M7CisgICAgICAgICAgICAgIGNoYXIgY29uc3Qgc1tdID0gIiI7CisgICAgICAgICAgICAgIHNpemVfdCBuID0gMTsKKyAgICAgICAgICAgICAgbWJzdGF0ZV90IHN0YXRlOworICAgICAgICAgICAgICByZXR1cm4gISAoc2l6ZW9mIHN0YXRlICYmIChtYnJ0b3djKSAoJndjLCBzLCBuLCAmc3RhdGUpKTtdXSldLAorICAgICAgIGdsX2N2X2Z1bmNfbWJydG93Yz15ZXMsCisgICAgICAgZ2xfY3ZfZnVuY19tYnJ0b3djPW5vKV0pCisgIGlmIHRlc3QgJGdsX2N2X2Z1bmNfbWJydG93YyA9IHllczsgdGhlbgorICAgIEFDX0RFRklORShbSEFWRV9NQlJUT1dDXSwgMSwKKyAgICAgIFtEZWZpbmUgdG8gMSBpZiBtYnJ0b3djIGFuZCBtYnN0YXRlX3QgYXJlIHByb3Blcmx5IGRlY2xhcmVkLl0pCisgIGZpCitdKQpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L200L21ic3RhdGVfdC5tNCBiL3BhcnRlZC0xLjguNy9tNC9tYnN0YXRlX3QubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYyYTI3NQotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9tNC9tYnN0YXRlX3QubTQKQEAgLTAsMCArMSwzMCBAQAorIyBtYnN0YXRlX3QubTQgc2VyaWFsIDkKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBGcm9tIFBhdWwgRWdnZXJ0LgorCisjIEJlT1MgNSBoYXMgPHdjaGFyLmg+IGJ1dCBkb2VzIG5vdCBkZWZpbmUgbWJzdGF0ZV90LAorIyBzbyB5b3UgY2FuJ3QgZGVjbGFyZSBhbiBvYmplY3Qgb2YgdGhhdCB0eXBlLgorIyBDaGVjayBmb3IgdGhpcyBpbmNvbXBhdGliaWxpdHkgd2l0aCBTdGFuZGFyZCBDLgorCisjIEFDX1RZUEVfTUJTVEFURV9UCisjIC0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQUNfVFlQRV9NQlNUQVRFX1RdLAorICBbQUNfQ0FDSEVfQ0hFQ0soW2ZvciBtYnN0YXRlX3RdLCBhY19jdl90eXBlX21ic3RhdGVfdCwKKyAgICAgW0FDX0NPTVBJTEVfSUZFTFNFKAorCVtBQ19MQU5HX1BST0dSQU0oCisJICAgW0FDX0lOQ0xVREVTX0RFRkFVTFQKKyMJICAgIGluY2x1ZGUgPHdjaGFyLmg+XSwKKwkgICBbbWJzdGF0ZV90IHg7IHJldHVybiBzaXplb2YgeDtdKV0sCisJW2FjX2N2X3R5cGVfbWJzdGF0ZV90PXllc10sCisJW2FjX2N2X3R5cGVfbWJzdGF0ZV90PW5vXSldKQorICAgaWYgdGVzdCAkYWNfY3ZfdHlwZV9tYnN0YXRlX3QgPSB5ZXM7IHRoZW4KKyAgICAgQUNfREVGSU5FKFtIQVZFX01CU1RBVEVfVF0sIDEsCisJICAgICAgIFtEZWZpbmUgdG8gMSBpZiA8d2NoYXIuaD4gZGVjbGFyZXMgbWJzdGF0ZV90Ll0pCisgICBlbHNlCisgICAgIEFDX0RFRklORShbbWJzdGF0ZV90XSwgaW50LAorCSAgICAgICBbRGVmaW5lIHRvIGEgdHlwZSBpZiA8d2NoYXIuaD4gZG9lcyBub3QgZGVmaW5lLl0pCisgICBmaV0pCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbTQvbWVtY2hyLm00IGIvcGFydGVkLTEuOC43L200L21lbWNoci5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWI4NjM2Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L200L21lbWNoci5tNApAQCAtMCwwICsxLDE4IEBACisjIG1lbWNoci5tNCBzZXJpYWwgNAorZG5sIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitBQ19ERUZVTihbZ2xfRlVOQ19NRU1DSFJdLAorWworICBBQ19SRVBMQUNFX0ZVTkNTKG1lbWNocikKKyAgaWYgdGVzdCAkYWNfY3ZfZnVuY19tZW1jaHIgPSBubzsgdGhlbgorICAgIGdsX1BSRVJFUV9NRU1DSFIKKyAgZmkKK10pCisKKyMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvbWVtY2hyLmMuCitBQ19ERUZVTihbZ2xfUFJFUkVRX01FTUNIUl0sIFsKKyAgQUNfQ0hFQ0tfSEVBREVSUyhicC1zeW0uaCkKK10pCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbTQvbWVtY21wLm00IGIvcGFydGVkLTEuOC43L200L21lbWNtcC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTliMTQxCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L200L21lbWNtcC5tNApAQCAtMCwwICsxLDE5IEBACisjIG1lbWNtcC5tNCBzZXJpYWwgMTIKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworQUNfREVGVU4oW2dsX0ZVTkNfTUVNQ01QXSwKK1sKKyAgQUNfRlVOQ19NRU1DTVAKKyAgZG5sIE5vdGU6IEFDX0ZVTkNfTUVNQ01QIGRvZXMgQUNfTElCT0JKKG1lbWNtcCkuCisgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmcgPSBubzsgdGhlbgorICAgIEFDX0RFRklORShtZW1jbXAsIHJwbF9tZW1jbXAsCisgICAgICBbRGVmaW5lIHRvIHJwbF9tZW1jbXAgaWYgdGhlIHJlcGxhY2VtZW50IGZ1bmN0aW9uIHNob3VsZCBiZSB1c2VkLl0pCisgICAgZ2xfUFJFUkVRX01FTUNNUAorICBmaQorXSkKKworIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi9tZW1jbXAuYy4KK0FDX0RFRlVOKFtnbF9QUkVSRVFfTUVNQ01QXSwgWzpdKQpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L200L21lbWNweS5tNCBiL3BhcnRlZC0xLjguNy9tNC9tZW1jcHkubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VkYzYyZQotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9tNC9tZW1jcHkubTQKQEAgLTAsMCArMSwxOCBAQAorIyBtZW1jcHkubTQgc2VyaWFsIDIKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworQUNfREVGVU4oW2dsX0ZVTkNfTUVNQ1BZXSwKK1sKKyAgQUNfUkVQTEFDRV9GVU5DUyhtZW1jcHkpCisgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfbWVtY3B5ID0gbm87IHRoZW4KKyAgICBnbF9QUkVSRVFfTUVNQ1BZCisgIGZpCitdKQorCisjIFByZXJlcXVpc2l0ZXMgb2YgbGliL21lbWNweS5jLgorQUNfREVGVU4oW2dsX1BSRVJFUV9NRU1DUFldLCBbCisgIDoKK10pCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbTQvbWVtbW92ZS5tNCBiL3BhcnRlZC0xLjguNy9tNC9tZW1tb3ZlLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2MDU0ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbTQvbWVtbW92ZS5tNApAQCAtMCwwICsxLDE4IEBACisjIG1lbW1vdmUubTQgc2VyaWFsIDIKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworQUNfREVGVU4oW2dsX0ZVTkNfTUVNTU9WRV0sCitbCisgIEFDX1JFUExBQ0VfRlVOQ1MobWVtbW92ZSkKKyAgaWYgdGVzdCAkYWNfY3ZfZnVuY19tZW1tb3ZlID0gbm87IHRoZW4KKyAgICBnbF9QUkVSRVFfTUVNTU9WRQorICBmaQorXSkKKworIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi9tZW1tb3ZlLmMuCitBQ19ERUZVTihbZ2xfUFJFUkVRX01FTU1PVkVdLCBbCisgIDoKK10pCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbTQvbWVtc2V0Lm00IGIvcGFydGVkLTEuOC43L200L21lbXNldC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGFjMjY3Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L200L21lbXNldC5tNApAQCAtMCwwICsxLDE4IEBACisjIG1lbXNldC5tNCBzZXJpYWwgMgorZG5sIENvcHlyaWdodCAoQykgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitBQ19ERUZVTihbZ2xfRlVOQ19NRU1TRVRdLAorWworICBBQ19SRVBMQUNFX0ZVTkNTKG1lbXNldCkKKyAgaWYgdGVzdCAkYWNfY3ZfZnVuY19tZW1zZXQgPSBubzsgdGhlbgorICAgIGdsX1BSRVJFUV9NRU1TRVQKKyAgZmkKK10pCisKKyMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvbWVtc2V0LmMuCitBQ19ERUZVTihbZ2xfUFJFUkVRX01FTVNFVF0sIFsKKyAgOgorXSkKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9tNC9ubHMubTQgYi9wYXJ0ZWQtMS44LjcvbTQvbmxzLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NjdjYzIKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbTQvbmxzLm00CkBAIC0wLDAgKzEsMzEgQEAKKyMgbmxzLm00IHNlcmlhbCAzIChnZXR0ZXh0LTAuMTUpCitkbmwgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDMsIDIwMDUtMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorZG5sCitkbmwgVGhpcyBmaWxlIGNhbiBjYW4gYmUgdXNlZCBpbiBwcm9qZWN0cyB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSB1bmRlcgorZG5sIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBvciB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKK2RubCBMaWNlbnNlIGJ1dCB3aGljaCBzdGlsbCB3YW50IHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdOVSBnZXR0ZXh0CitkbmwgZnVuY3Rpb25hbGl0eS4KK2RubCBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBhY3R1YWwgY29kZSBvZiB0aGUgR05VIGdldHRleHQgbGlicmFyeSBpcyBjb3ZlcmVkCitkbmwgYnkgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB0aGUgcmVzdCBvZiB0aGUgR05VCitkbmwgZ2V0dGV4dCBwYWNrYWdlIHBhY2thZ2UgaXMgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCitkbmwgVGhleSBhcmUgKm5vdCogaW4gdGhlIHB1YmxpYyBkb21haW4uCisKK2RubCBBdXRob3JzOgorZG5sICAgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDE5OTUtMjAwMC4KK2RubCAgIEJydW5vIEhhaWJsZSA8aGFpYmxlQGNsaXNwLmNvbnMub3JnPiwgMjAwMC0yMDAzLgorCitBQ19QUkVSRVEoMi41MCkKKworQUNfREVGVU4oW0FNX05MU10sCitbCisgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBOTFMgaXMgcmVxdWVzdGVkXSkKKyAgZG5sIERlZmF1bHQgaXMgZW5hYmxlZCBOTFMKKyAgQUNfQVJHX0VOQUJMRShubHMsCisgICAgWyAgLS1kaXNhYmxlLW5scyAgICAgICAgICAgZG8gbm90IHVzZSBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydF0sCisgICAgVVNFX05MUz0kZW5hYmxldmFsLCBVU0VfTkxTPXllcykKKyAgQUNfTVNHX1JFU1VMVCgkVVNFX05MUykKKyAgQUNfU1VCU1QoVVNFX05MUykKK10pCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbTQvcG8ubTQgYi9wYXJ0ZWQtMS44LjcvbTQvcG8ubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAxMzNlZgotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9tNC9wby5tNApAQCAtMCwwICsxLDQyOCBAQAorIyBwby5tNCBzZXJpYWwgMTMgKGdldHRleHQtMC4xNSkKK2RubCBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorZG5sCitkbmwgVGhpcyBmaWxlIGNhbiBjYW4gYmUgdXNlZCBpbiBwcm9qZWN0cyB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSB1bmRlcgorZG5sIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBvciB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKK2RubCBMaWNlbnNlIGJ1dCB3aGljaCBzdGlsbCB3YW50IHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdOVSBnZXR0ZXh0CitkbmwgZnVuY3Rpb25hbGl0eS4KK2RubCBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBhY3R1YWwgY29kZSBvZiB0aGUgR05VIGdldHRleHQgbGlicmFyeSBpcyBjb3ZlcmVkCitkbmwgYnkgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB0aGUgcmVzdCBvZiB0aGUgR05VCitkbmwgZ2V0dGV4dCBwYWNrYWdlIHBhY2thZ2UgaXMgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCitkbmwgVGhleSBhcmUgKm5vdCogaW4gdGhlIHB1YmxpYyBkb21haW4uCisKK2RubCBBdXRob3JzOgorZG5sICAgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDE5OTUtMjAwMC4KK2RubCAgIEJydW5vIEhhaWJsZSA8aGFpYmxlQGNsaXNwLmNvbnMub3JnPiwgMjAwMC0yMDAzLgorCitBQ19QUkVSRVEoMi41MCkKKworZG5sIENoZWNrcyBmb3IgYWxsIHByZXJlcXVpc2l0ZXMgb2YgdGhlIHBvIHN1YmRpcmVjdG9yeS4KK0FDX0RFRlVOKFtBTV9QT19TVUJESVJTXSwKK1sKKyAgQUNfUkVRVUlSRShbQUNfUFJPR19NQUtFX1NFVF0pZG5sCisgIEFDX1JFUVVJUkUoW0FDX1BST0dfSU5TVEFMTF0pZG5sCisgIEFDX1JFUVVJUkUoW0FNX1BST0dfTUtESVJfUF0pZG5sIGRlZmluZWQgYnkgYXV0b21ha2UKKyAgQUNfUkVRVUlSRShbQU1fTkxTXSlkbmwKKworICBkbmwgUGVyZm9ybSB0aGUgZm9sbG93aW5nIHRlc3RzIGFsc28gaWYgLS1kaXNhYmxlLW5scyBoYXMgYmVlbiBnaXZlbiwKKyAgZG5sIGJlY2F1c2UgdGhleSBhcmUgbmVlZGVkIGZvciAibWFrZSBkaXN0IiB0byB3b3JrLgorCisgIGRubCBTZWFyY2ggZm9yIEdOVSBtc2dmbXQgaW4gdGhlIFBBVEguCisgIGRubCBUaGUgZmlyc3QgdGVzdCBleGNsdWRlcyBTb2xhcmlzIG1zZ2ZtdCBhbmQgZWFybHkgR05VIG1zZ2ZtdCB2ZXJzaW9ucy4KKyAgZG5sIFRoZSBzZWNvbmQgdGVzdCBleGNsdWRlcyBGcmVlQlNEIG1zZ2ZtdC4KKyAgQU1fUEFUSF9QUk9HX1dJVEhfVEVTVChNU0dGTVQsIG1zZ2ZtdCwKKyAgICBbJGFjX2Rpci8kYWNfd29yZCAtLXN0YXRpc3RpY3MgL2Rldi9udWxsID4mXUFTX01FU1NBR0VfTE9HX0ZEWyAyPiYxICYmCisgICAgIChpZiAkYWNfZGlyLyRhY193b3JkIC0tc3RhdGlzdGljcyAvZGV2L251bGwgMj4mMSA+L2Rldi9udWxsIHwgZ3JlcCB1c2FnZSA+L2Rldi9udWxsOyB0aGVuIGV4aXQgMTsgZWxzZSBleGl0IDA7IGZpKV0sCisgICAgOikKKyAgQUNfUEFUSF9QUk9HKEdNU0dGTVQsIGdtc2dmbXQsICRNU0dGTVQpCisKKyAgZG5sIFRlc3Qgd2hldGhlciBpdCBpcyBHTlUgbXNnZm10ID49IDAuMTUuCitjaGFuZ2VxdW90ZSgsKWRubAorICBjYXNlIGAkTVNHRk1UIC0tdmVyc2lvbiB8IHNlZCAxcSB8IHNlZCAtZSAncyxeW14wLTldKiwsJ2AgaW4KKyAgICAnJyB8IDAuWzAtOV0gfCAwLlswLTldLiogfCAwLjFbMC00XSB8IDAuMVswLTRdLiopIE1TR0ZNVF8wMTU9OiA7OworICAgICopIE1TR0ZNVF8wMTU9JE1TR0ZNVCA7OworICBlc2FjCitjaGFuZ2VxdW90ZShbLF0pZG5sCisgIEFDX1NVQlNUKFtNU0dGTVRfMDE1XSkKK2NoYW5nZXF1b3RlKCwpZG5sCisgIGNhc2UgYCRHTVNHRk1UIC0tdmVyc2lvbiB8IHNlZCAxcSB8IHNlZCAtZSAncyxeW14wLTldKiwsJ2AgaW4KKyAgICAnJyB8IDAuWzAtOV0gfCAwLlswLTldLiogfCAwLjFbMC00XSB8IDAuMVswLTRdLiopIEdNU0dGTVRfMDE1PTogOzsKKyAgICAqKSBHTVNHRk1UXzAxNT0kR01TR0ZNVCA7OworICBlc2FjCitjaGFuZ2VxdW90ZShbLF0pZG5sCisgIEFDX1NVQlNUKFtHTVNHRk1UXzAxNV0pCisKKyAgZG5sIFNlYXJjaCBmb3IgR05VIHhnZXR0ZXh0IDAuMTIgb3IgbmV3ZXIgaW4gdGhlIFBBVEguCisgIGRubCBUaGUgZmlyc3QgdGVzdCBleGNsdWRlcyBTb2xhcmlzIHhnZXR0ZXh0IGFuZCBlYXJseSBHTlUgeGdldHRleHQgdmVyc2lvbnMuCisgIGRubCBUaGUgc2Vjb25kIHRlc3QgZXhjbHVkZXMgRnJlZUJTRCB4Z2V0dGV4dC4KKyAgQU1fUEFUSF9QUk9HX1dJVEhfVEVTVChYR0VUVEVYVCwgeGdldHRleHQsCisgICAgWyRhY19kaXIvJGFjX3dvcmQgLS1vbWl0LWhlYWRlciAtLWNvcHlyaWdodC1ob2xkZXI9IC0tbXNnaWQtYnVncy1hZGRyZXNzPSAvZGV2L251bGwgPiZdQVNfTUVTU0FHRV9MT0dfRkRbIDI+JjEgJiYKKyAgICAgKGlmICRhY19kaXIvJGFjX3dvcmQgLS1vbWl0LWhlYWRlciAtLWNvcHlyaWdodC1ob2xkZXI9IC0tbXNnaWQtYnVncy1hZGRyZXNzPSAvZGV2L251bGwgMj4mMSA+L2Rldi9udWxsIHwgZ3JlcCB1c2FnZSA+L2Rldi9udWxsOyB0aGVuIGV4aXQgMTsgZWxzZSBleGl0IDA7IGZpKV0sCisgICAgOikKKyAgZG5sIFJlbW92ZSBsZWZ0b3ZlciBmcm9tIEZyZWVCU0QgeGdldHRleHQgY2FsbC4KKyAgcm0gLWYgbWVzc2FnZXMucG8KKworICBkbmwgVGVzdCB3aGV0aGVyIGl0IGlzIEdOVSB4Z2V0dGV4dCA+PSAwLjE1LgorY2hhbmdlcXVvdGUoLClkbmwKKyAgY2FzZSBgJFhHRVRURVhUIC0tdmVyc2lvbiB8IHNlZCAxcSB8IHNlZCAtZSAncyxeW14wLTldKiwsJ2AgaW4KKyAgICAnJyB8IDAuWzAtOV0gfCAwLlswLTldLiogfCAwLjFbMC00XSB8IDAuMVswLTRdLiopIFhHRVRURVhUXzAxNT06IDs7CisgICAgKikgWEdFVFRFWFRfMDE1PSRYR0VUVEVYVCA7OworICBlc2FjCitjaGFuZ2VxdW90ZShbLF0pZG5sCisgIEFDX1NVQlNUKFtYR0VUVEVYVF8wMTVdKQorCisgIGRubCBTZWFyY2ggZm9yIEdOVSBtc2dtZXJnZSAwLjExIG9yIG5ld2VyIGluIHRoZSBQQVRILgorICBBTV9QQVRIX1BST0dfV0lUSF9URVNUKE1TR01FUkdFLCBtc2dtZXJnZSwKKyAgICBbJGFjX2Rpci8kYWNfd29yZCAtLXVwZGF0ZSAtcSAvZGV2L251bGwgL2Rldi9udWxsID4mXUFTX01FU1NBR0VfTE9HX0ZEWyAyPiYxXSwgOikKKworICBkbmwgSW5zdGFsbGF0aW9uIGRpcmVjdG9yaWVzLgorICBkbmwgQXV0b2NvbmYgPj0gMi42MCBkZWZpbmVzIGxvY2FsZWRpci4gRm9yIG9sZGVyIHZlcnNpb25zIG9mIGF1dG9jb25mLCB3ZQorICBkbmwgaGF2ZSB0byBkZWZpbmUgaXQgaGVyZSwgc28gdGhhdCBpdCBjYW4gYmUgdXNlZCBpbiBwby9NYWtlZmlsZS4KKyAgdGVzdCAtbiAiJGxvY2FsZWRpciIgfHwgbG9jYWxlZGlyPScke2RhdGFkaXJ9L2xvY2FsZScKKyAgQUNfU1VCU1QoW2xvY2FsZWRpcl0pCisKKyAgQUNfQ09ORklHX0NPTU1BTkRTKFtwby1kaXJlY3Rvcmllc10sIFtbCisgICAgZm9yIGFjX2ZpbGUgaW4gJENPTkZJR19GSUxFUzsgZG8KKyAgICAgICMgU3VwcG9ydCAib3V0ZmlsZVs6aW5maWxlWzppbmZpbGUuLi5dXSIKKyAgICAgIGNhc2UgIiRhY19maWxlIiBpbgorICAgICAgICAqOiopIGFjX2ZpbGU9YGVjaG8gIiRhY19maWxlInxzZWQgJ3MlOi4qJSUnYCA7OworICAgICAgZXNhYworICAgICAgIyBQTyBkaXJlY3RvcmllcyBoYXZlIGEgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGZyb20gTWFrZWZpbGUuaW4uaW4uCisgICAgICBjYXNlICIkYWNfZmlsZSIgaW4gKi9NYWtlZmlsZS5pbikKKyAgICAgICAgIyBBZGp1c3QgYSByZWxhdGl2ZSBzcmNkaXIuCisgICAgICAgIGFjX2Rpcj1gZWNobyAiJGFjX2ZpbGUifHNlZCAncyUvW14vXVteL10qJCUlJ2AKKyAgICAgICAgYWNfZGlyX3N1ZmZpeD0iL2BlY2hvICIkYWNfZGlyInxzZWQgJ3MlXlwuLyUlJ2AiCisgICAgICAgIGFjX2RvdHM9YGVjaG8gIiRhY19kaXJfc3VmZml4InxzZWQgJ3MlL1teL10qJS4uLyVnJ2AKKyAgICAgICAgIyBJbiBhdXRvY29uZi0yLjEzIGl0IGlzIGNhbGxlZCAkYWNfZ2l2ZW5fc3JjZGlyLgorICAgICAgICAjIEluIGF1dG9jb25mLTIuNTAgaXQgaXMgY2FsbGVkICRzcmNkaXIuCisgICAgICAgIHRlc3QgLW4gIiRhY19naXZlbl9zcmNkaXIiIHx8IGFjX2dpdmVuX3NyY2Rpcj0iJHNyY2RpciIKKyAgICAgICAgY2FzZSAiJGFjX2dpdmVuX3NyY2RpciIgaW4KKyAgICAgICAgICAuKSAgdG9wX3NyY2Rpcj1gZWNobyAkYWNfZG90c3xzZWQgJ3MlLyQlJSdgIDs7CisgICAgICAgICAgLyopIHRvcF9zcmNkaXI9IiRhY19naXZlbl9zcmNkaXIiIDs7CisgICAgICAgICAgKikgIHRvcF9zcmNkaXI9IiRhY19kb3RzJGFjX2dpdmVuX3NyY2RpciIgOzsKKyAgICAgICAgZXNhYworICAgICAgICAjIFRyZWF0IGEgZGlyZWN0b3J5IGFzIGEgUE8gZGlyZWN0b3J5IGlmIGFuZCBvbmx5IGlmIGl0IGhhcyBhCisgICAgICAgICMgUE9URklMRVMuaW4gZmlsZS4gVGhpcyBhbGxvd3MgcGFja2FnZXMgdG8gaGF2ZSBtdWx0aXBsZSBQTworICAgICAgICAjIGRpcmVjdG9yaWVzIHVuZGVyIGRpZmZlcmVudCBuYW1lcyBvciBpbiBkaWZmZXJlbnQgbG9jYXRpb25zLgorICAgICAgICBpZiB0ZXN0IC1mICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvUE9URklMRVMuaW4iOyB0aGVuCisgICAgICAgICAgcm0gLWYgIiRhY19kaXIvUE9URklMRVMiCisgICAgICAgICAgdGVzdCAtbiAiJGFzX21lIiAmJiBlY2hvICIkYXNfbWU6IGNyZWF0aW5nICRhY19kaXIvUE9URklMRVMiIHx8IGVjaG8gImNyZWF0aW5nICRhY19kaXIvUE9URklMRVMiCisgICAgICAgICAgY2F0ICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvUE9URklMRVMuaW4iIHwgc2VkIC1lICIvXiMvZCIgLWUgIi9eWyAJXSpcJC9kIiAtZSAicywuKiwgICAgICR0b3Bfc3JjZGlyLyYgXFxcXCwiIHwgc2VkIC1lICJcJHMvXCguKlwpIFxcXFwvXDEvIiA+ICIkYWNfZGlyL1BPVEZJTEVTIgorICAgICAgICAgIFBPTUFLRUZJTEVERVBTPSJQT1RGSUxFUy5pbiIKKyAgICAgICAgICAjIEFMTF9MSU5HVUFTLCBQT0ZJTEVTLCBVUERBVEVQT0ZJTEVTLCBEVU1NWVBPRklMRVMsIEdNT0ZJTEVTIGRlcGVuZAorICAgICAgICAgICMgb24gJGFjX2RpciBidXQgZG9uJ3QgZGVwZW5kIG9uIHVzZXItc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAjIHBhcmFtZXRlcnMuCisgICAgICAgICAgaWYgdGVzdCAtZiAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL0xJTkdVQVMiOyB0aGVuCisgICAgICAgICAgICAjIFRoZSBMSU5HVUFTIGZpbGUgY29udGFpbnMgdGhlIHNldCBvZiBhdmFpbGFibGUgbGFuZ3VhZ2VzLgorICAgICAgICAgICAgaWYgdGVzdCAtbiAiJE9CU09MRVRFX0FMTF9MSU5HVUFTIjsgdGhlbgorICAgICAgICAgICAgICB0ZXN0IC1uICIkYXNfbWUiICYmIGVjaG8gIiRhc19tZTogc2V0dGluZyBBTExfTElOR1VBUyBpbiBjb25maWd1cmUuaW4gaXMgb2Jzb2xldGUiIHx8IGVjaG8gInNldHRpbmcgQUxMX0xJTkdVQVMgaW4gY29uZmlndXJlLmluIGlzIG9ic29sZXRlIgorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIEFMTF9MSU5HVUFTXz1gc2VkIC1lICIvXiMvZCIgLWUgInMvIy4qLy8iICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvTElOR1VBUyJgCisgICAgICAgICAgICAjIEhpZGUgdGhlIEFMTF9MSU5HVUFTIGFzc2lnbWVudCBmcm9tIGF1dG9tYWtlIDwgMS41LgorICAgICAgICAgICAgZXZhbCAnQUxMX0xJTkdVQVMnJz0kQUxMX0xJTkdVQVNfJworICAgICAgICAgICAgUE9NQUtFRklMRURFUFM9IiRQT01BS0VGSUxFREVQUyBMSU5HVUFTIgorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICMgVGhlIHNldCBvZiBhdmFpbGFibGUgbGFuZ3VhZ2VzIHdhcyBnaXZlbiBpbiBjb25maWd1cmUuaW4uCisgICAgICAgICAgICAjIEhpZGUgdGhlIEFMTF9MSU5HVUFTIGFzc2lnbWVudCBmcm9tIGF1dG9tYWtlIDwgMS41LgorICAgICAgICAgICAgZXZhbCAnQUxMX0xJTkdVQVMnJz0kT0JTT0xFVEVfQUxMX0xJTkdVQVMnCisgICAgICAgICAgZmkKKyAgICAgICAgICAjIENvbXB1dGUgUE9GSUxFUworICAgICAgICAgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQoc3JjZGlyKS8kKGxhbmcpLnBvKQorICAgICAgICAgICMgQ29tcHV0ZSBVUERBVEVQT0ZJTEVTCisgICAgICAgICAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChsYW5nKS5wby11cGRhdGUpCisgICAgICAgICAgIyBDb21wdXRlIERVTU1ZUE9GSUxFUworICAgICAgICAgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQobGFuZykubm9wKQorICAgICAgICAgICMgQ29tcHV0ZSBHTU9GSUxFUworICAgICAgICAgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQoc3JjZGlyKS8kKGxhbmcpLmdtbykKKyAgICAgICAgICBjYXNlICIkYWNfZ2l2ZW5fc3JjZGlyIiBpbgorICAgICAgICAgICAgLikgc3JjZGlycHJlPSA7OworICAgICAgICAgICAgKikgc3JjZGlycHJlPSckKHNyY2RpcikvJyA7OworICAgICAgICAgIGVzYWMKKyAgICAgICAgICBQT0ZJTEVTPQorICAgICAgICAgIFVQREFURVBPRklMRVM9CisgICAgICAgICAgRFVNTVlQT0ZJTEVTPQorICAgICAgICAgIEdNT0ZJTEVTPQorICAgICAgICAgIGZvciBsYW5nIGluICRBTExfTElOR1VBUzsgZG8KKyAgICAgICAgICAgIFBPRklMRVM9IiRQT0ZJTEVTICRzcmNkaXJwcmUkbGFuZy5wbyIKKyAgICAgICAgICAgIFVQREFURVBPRklMRVM9IiRVUERBVEVQT0ZJTEVTICRsYW5nLnBvLXVwZGF0ZSIKKyAgICAgICAgICAgIERVTU1ZUE9GSUxFUz0iJERVTU1ZUE9GSUxFUyAkbGFuZy5ub3AiCisgICAgICAgICAgICBHTU9GSUxFUz0iJEdNT0ZJTEVTICRzcmNkaXJwcmUkbGFuZy5nbW8iCisgICAgICAgICAgZG9uZQorICAgICAgICAgICMgQ0FUQUxPR1MgZGVwZW5kcyBvbiBib3RoICRhY19kaXIgYW5kIHRoZSB1c2VyJ3MgTElOR1VBUworICAgICAgICAgICMgZW52aXJvbm1lbnQgdmFyaWFibGUuCisgICAgICAgICAgSU5TVF9MSU5HVUFTPQorICAgICAgICAgIGlmIHRlc3QgLW4gIiRBTExfTElOR1VBUyI7IHRoZW4KKyAgICAgICAgICAgIGZvciBwcmVzZW50bGFuZyBpbiAkQUxMX0xJTkdVQVM7IGRvCisgICAgICAgICAgICAgIHVzZWl0PW5vCisgICAgICAgICAgICAgIGlmIHRlc3QgIiVVTlNFVCUiICE9ICIkTElOR1VBUyI7IHRoZW4KKyAgICAgICAgICAgICAgICBkZXNpcmVkbGFuZ3VhZ2VzPSIkTElOR1VBUyIKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGRlc2lyZWRsYW5ndWFnZXM9IiRBTExfTElOR1VBUyIKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgZm9yIGRlc2lyZWRsYW5nIGluICRkZXNpcmVkbGFuZ3VhZ2VzOyBkbworICAgICAgICAgICAgICAgICMgVXNlIHRoZSBwcmVzZW50bGFuZyBjYXRhbG9nIGlmIGRlc2lyZWRsYW5nIGlzCisgICAgICAgICAgICAgICAgIyAgIGEuIGVxdWFsIHRvIHByZXNlbnRsYW5nLCBvcgorICAgICAgICAgICAgICAgICMgICBiLiBhIHZhcmlhbnQgb2YgcHJlc2VudGxhbmcgKGJlY2F1c2UgaW4gdGhpcyBjYXNlLAorICAgICAgICAgICAgICAgICMgICAgICBwcmVzZW50bGFuZyBjYW4gYmUgdXNlZCBhcyBhIGZhbGxiYWNrIGZvciBtZXNzYWdlcworICAgICAgICAgICAgICAgICMgICAgICB3aGljaCBhcmUgbm90IHRyYW5zbGF0ZWQgaW4gdGhlIGRlc2lyZWRsYW5nIGNhdGFsb2cpLgorICAgICAgICAgICAgICAgIGNhc2UgIiRkZXNpcmVkbGFuZyIgaW4KKyAgICAgICAgICAgICAgICAgICIkcHJlc2VudGxhbmciKikgdXNlaXQ9eWVzOzsKKyAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgaWYgdGVzdCAkdXNlaXQgPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgICAgICBJTlNUX0xJTkdVQVM9IiRJTlNUX0xJTkdVQVMgJHByZXNlbnRsYW5nIgorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZG9uZQorICAgICAgICAgIGZpCisgICAgICAgICAgQ0FUQUxPR1M9CisgICAgICAgICAgaWYgdGVzdCAtbiAiJElOU1RfTElOR1VBUyI7IHRoZW4KKyAgICAgICAgICAgIGZvciBsYW5nIGluICRJTlNUX0xJTkdVQVM7IGRvCisgICAgICAgICAgICAgIENBVEFMT0dTPSIkQ0FUQUxPR1MgJGxhbmcuZ21vIgorICAgICAgICAgICAgZG9uZQorICAgICAgICAgIGZpCisgICAgICAgICAgdGVzdCAtbiAiJGFzX21lIiAmJiBlY2hvICIkYXNfbWU6IGNyZWF0aW5nICRhY19kaXIvTWFrZWZpbGUiIHx8IGVjaG8gImNyZWF0aW5nICRhY19kaXIvTWFrZWZpbGUiCisgICAgICAgICAgc2VkIC1lICIvXlBPVEZJTEVTID0vciAkYWNfZGlyL1BPVEZJTEVTIiAtZSAiL14jIE1ha2V2YXJzL3IgJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL01ha2V2YXJzIiAtZSAic3xAUE9GSUxFU0B8JFBPRklMRVN8ZyIgLWUgInN8QFVQREFURVBPRklMRVNAfCRVUERBVEVQT0ZJTEVTfGciIC1lICJzfEBEVU1NWVBPRklMRVNAfCREVU1NWVBPRklMRVN8ZyIgLWUgInN8QEdNT0ZJTEVTQHwkR01PRklMRVN8ZyIgLWUgInN8QENBVEFMT0dTQHwkQ0FUQUxPR1N8ZyIgLWUgInN8QFBPTUFLRUZJTEVERVBTQHwkUE9NQUtFRklMRURFUFN8ZyIgIiRhY19kaXIvTWFrZWZpbGUuaW4iID4gIiRhY19kaXIvTWFrZWZpbGUiCisgICAgICAgICAgZm9yIGYgaW4gIiRhY19naXZlbl9zcmNkaXIvJGFjX2RpciIvUnVsZXMtKjsgZG8KKyAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRmIjsgdGhlbgorICAgICAgICAgICAgICBjYXNlICIkZiIgaW4KKyAgICAgICAgICAgICAgICAqLm9yaWcgfCAqLmJhayB8ICp+KSA7OworICAgICAgICAgICAgICAgICopIGNhdCAiJGYiID4+ICIkYWNfZGlyL01ha2VmaWxlIiA7OworICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICBmaQorICAgICAgICAgIGRvbmUKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICBkb25lXV0sCisgICBbIyBDYXB0dXJlIHRoZSB2YWx1ZSBvZiBvYnNvbGV0ZSBBTExfTElOR1VBUyBiZWNhdXNlIHdlIG5lZWQgaXQgdG8gY29tcHV0ZQorICAgICMgUE9GSUxFUywgVVBEQVRFUE9GSUxFUywgRFVNTVlQT0ZJTEVTLCBHTU9GSUxFUywgQ0FUQUxPR1MuIEJ1dCBoaWRlIGl0CisgICAgIyBmcm9tIGF1dG9tYWtlIDwgMS41LgorICAgIGV2YWwgJ09CU09MRVRFX0FMTF9MSU5HVUFTJyc9IiRBTExfTElOR1VBUyInCisgICAgIyBDYXB0dXJlIHRoZSB2YWx1ZSBvZiBMSU5HVUFTIGJlY2F1c2Ugd2UgbmVlZCBpdCB0byBjb21wdXRlIENBVEFMT0dTLgorICAgIExJTkdVQVM9IiR7TElOR1VBUy0lVU5TRVQlfSIKKyAgIF0pCitdKQorCitkbmwgUG9zdHByb2Nlc3NlcyBhIE1ha2VmaWxlIGluIGEgZGlyZWN0b3J5IGNvbnRhaW5pbmcgUE8gZmlsZXMuCitBQ19ERUZVTihbQU1fUE9TVFBST0NFU1NfUE9fTUFLRUZJTEVdLAorWworICAjIFdoZW4gdGhpcyBjb2RlIGlzIHJ1biwgaW4gY29uZmlnLnN0YXR1cywgdHdvIHZhcmlhYmxlcyBoYXZlIGFscmVhZHkgYmVlbgorICAjIHNldDoKKyAgIyAtIE9CU09MRVRFX0FMTF9MSU5HVUFTIGlzIHRoZSB2YWx1ZSBvZiBMSU5HVUFTIHNldCBpbiBjb25maWd1cmUuaW4sCisgICMgLSBMSU5HVUFTIGlzIHRoZSB2YWx1ZSBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgTElOR1VBUyBhdCBjb25maWd1cmUKKyAgIyAgIHRpbWUuCisKK2NoYW5nZXF1b3RlKCwpZG5sCisgICMgQWRqdXN0IGEgcmVsYXRpdmUgc3JjZGlyLgorICBhY19kaXI9YGVjaG8gIiRhY19maWxlInxzZWQgJ3MlL1teL11bXi9dKiQlJSdgCisgIGFjX2Rpcl9zdWZmaXg9Ii9gZWNobyAiJGFjX2RpciJ8c2VkICdzJV5cLi8lJSdgIgorICBhY19kb3RzPWBlY2hvICIkYWNfZGlyX3N1ZmZpeCJ8c2VkICdzJS9bXi9dKiUuLi8lZydgCisgICMgSW4gYXV0b2NvbmYtMi4xMyBpdCBpcyBjYWxsZWQgJGFjX2dpdmVuX3NyY2Rpci4KKyAgIyBJbiBhdXRvY29uZi0yLjUwIGl0IGlzIGNhbGxlZCAkc3JjZGlyLgorICB0ZXN0IC1uICIkYWNfZ2l2ZW5fc3JjZGlyIiB8fCBhY19naXZlbl9zcmNkaXI9IiRzcmNkaXIiCisgIGNhc2UgIiRhY19naXZlbl9zcmNkaXIiIGluCisgICAgLikgIHRvcF9zcmNkaXI9YGVjaG8gJGFjX2RvdHN8c2VkICdzJS8kJSUnYCA7OworICAgIC8qKSB0b3Bfc3JjZGlyPSIkYWNfZ2l2ZW5fc3JjZGlyIiA7OworICAgICopICB0b3Bfc3JjZGlyPSIkYWNfZG90cyRhY19naXZlbl9zcmNkaXIiIDs7CisgIGVzYWMKKworICAjIEZpbmQgYSB3YXkgdG8gZWNobyBzdHJpbmdzIHdpdGhvdXQgaW50ZXJwcmV0aW5nIGJhY2tzbGFzaC4KKyAgaWYgdGVzdCAiWGAoZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAiID0gJ1hcdCc7IHRoZW4KKyAgICBndF9lY2hvPSdlY2hvJworICBlbHNlCisgICAgaWYgdGVzdCAiWGAocHJpbnRmICclc1xuJyAnXHQnKSAyPi9kZXYvbnVsbGAiID0gJ1hcdCc7IHRoZW4KKyAgICAgIGd0X2VjaG89J3ByaW50ZiAlc1xuJworICAgIGVsc2UKKyAgICAgIGVjaG9fZnVuYyAoKSB7CisgICAgICAgIGNhdCA8PEVPVAorJCoKK0VPVAorICAgICAgfQorICAgICAgZ3RfZWNobz0nZWNob19mdW5jJworICAgIGZpCisgIGZpCisKKyAgIyBBIHNlZCBzY3JpcHQgdGhhdCBleHRyYWN0cyB0aGUgdmFsdWUgb2YgVkFSSUFCTEUgZnJvbSBhIE1ha2VmaWxlLgorICBzZWRfeF92YXJpYWJsZT0nCisjIFRlc3QgaWYgdGhlIGhvbGQgc3BhY2UgaXMgZW1wdHkuCit4CitzL1AvUC8KK3gKK3RhCisjIFllcyBpdCB3YXMgZW1wdHkuIExvb2sgaWYgd2UgaGF2ZSB0aGUgZXhwZWN0ZWQgdmFyaWFibGUgZGVmaW5pdGlvbi4KKy9eWwkgXSpWQVJJQUJMRVsJIF0qPS97CisgICMgU2VlbiB0aGUgZmlyc3QgbGluZSBvZiB0aGUgdmFyaWFibGUgZGVmaW5pdGlvbi4KKyAgcy9eWwkgXSpWQVJJQUJMRVsJIF0qPS8vCisgIGJhCit9CitiZAorOmEKKyMgSGVyZSB3ZSBhcmUgcHJvY2Vzc2luZyBhIGxpbmUgZnJvbSB0aGUgdmFyaWFibGUgZGVmaW5pdGlvbi4KKyMgUmVtb3ZlIGNvbW1lbnQsIG1vcmUgcHJlY2lzZWx5IHJlcGxhY2UgaXQgd2l0aCBhIHNwYWNlLgorcy8jLiokLyAvCisjIFNlZSBpZiB0aGUgbGluZSBlbmRzIGluIGEgYmFja3NsYXNoLgordGIKKzpiCitzL1xcJC8vCisjIFByaW50IHRoZSBsaW5lLCB3aXRob3V0IHRoZSB0cmFpbGluZyBiYWNrc2xhc2guCitwCit0YworIyBUaGVyZSB3YXMgbm8gdHJhaWxpbmcgYmFja3NsYXNoLiBUaGUgZW5kIG9mIHRoZSB2YXJpYWJsZSBkZWZpbml0aW9uIGlzCisjIHJlYWNoZWQuIENsZWFyIHRoZSBob2xkIHNwYWNlLgorcy9eLiokLy8KK3gKK2JkCis6YworIyBBIHRyYWlsaW5nIGJhY2tzbGFzaCBtZWFucyB0aGF0IHRoZSB2YXJpYWJsZSBkZWZpbml0aW9uIGNvbnRpbnVlcyBpbiB0aGUKKyMgbmV4dCBsaW5lLiBQdXQgYSBub25lbXB0eSBzdHJpbmcgaW50byB0aGUgaG9sZCBzcGFjZSB0byBpbmRpY2F0ZSB0aGlzLgorcy9eLiokL1AvCit4Cis6ZAorJworY2hhbmdlcXVvdGUoWyxdKWRubAorCisgICMgU2V0IFBPVEZJTEVTIHRvIHRoZSB2YWx1ZSBvZiB0aGUgTWFrZWZpbGUgdmFyaWFibGUgUE9URklMRVMuCisgIHNlZF94X1BPVEZJTEVTPWAkZ3RfZWNobyAiJHNlZF94X3ZhcmlhYmxlIiB8IHNlZCAtZSAnL14gKiMvZCcgLWUgJ3MvVkFSSUFCTEUvUE9URklMRVMvZydgCisgIFBPVEZJTEVTPWBzZWQgLW4gLWUgIiRzZWRfeF9QT1RGSUxFUyIgPCAiJGFjX2ZpbGUiYAorICAjIENvbXB1dGUgUE9URklMRVNfREVQUyBhcworICAjICAgJChmb3JlYWNoIGZpbGUsICQoUE9URklMRVMpLCAkKHRvcF9zcmNkaXIpLyQoZmlsZSkpCisgIFBPVEZJTEVTX0RFUFM9CisgIGZvciBmaWxlIGluICRQT1RGSUxFUzsgZG8KKyAgICBQT1RGSUxFU19ERVBTPSIkUE9URklMRVNfREVQUyAiJyQodG9wX3NyY2RpcikvJyIkZmlsZSIKKyAgZG9uZQorICBQT01BS0VGSUxFREVQUz0iIgorCisgIGlmIHRlc3QgLW4gIiRPQlNPTEVURV9BTExfTElOR1VBUyI7IHRoZW4KKyAgICB0ZXN0IC1uICIkYXNfbWUiICYmIGVjaG8gIiRhc19tZTogc2V0dGluZyBBTExfTElOR1VBUyBpbiBjb25maWd1cmUuaW4gaXMgb2Jzb2xldGUiIHx8IGVjaG8gInNldHRpbmcgQUxMX0xJTkdVQVMgaW4gY29uZmlndXJlLmluIGlzIG9ic29sZXRlIgorICBmaQorICBpZiB0ZXN0IC1mICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvTElOR1VBUyI7IHRoZW4KKyAgICAjIFRoZSBMSU5HVUFTIGZpbGUgY29udGFpbnMgdGhlIHNldCBvZiBhdmFpbGFibGUgbGFuZ3VhZ2VzLgorICAgIEFMTF9MSU5HVUFTXz1gc2VkIC1lICIvXiMvZCIgLWUgInMvIy4qLy8iICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvTElOR1VBUyJgCisgICAgUE9NQUtFRklMRURFUFM9IiRQT01BS0VGSUxFREVQUyBMSU5HVUFTIgorICBlbHNlCisgICAgIyBTZXQgQUxMX0xJTkdVQVMgdG8gdGhlIHZhbHVlIG9mIHRoZSBNYWtlZmlsZSB2YXJpYWJsZSBMSU5HVUFTLgorICAgIHNlZF94X0xJTkdVQVM9YCRndF9lY2hvICIkc2VkX3hfdmFyaWFibGUiIHwgc2VkIC1lICcvXiAqIy9kJyAtZSAncy9WQVJJQUJMRS9MSU5HVUFTL2cnYAorICAgIEFMTF9MSU5HVUFTXz1gc2VkIC1uIC1lICIkc2VkX3hfTElOR1VBUyIgPCAiJGFjX2ZpbGUiYAorICBmaQorICAjIEhpZGUgdGhlIEFMTF9MSU5HVUFTIGFzc2lnbWVudCBmcm9tIGF1dG9tYWtlIDwgMS41LgorICBldmFsICdBTExfTElOR1VBUycnPSRBTExfTElOR1VBU18nCisgICMgQ29tcHV0ZSBQT0ZJTEVTCisgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQoc3JjZGlyKS8kKGxhbmcpLnBvKQorICAjIENvbXB1dGUgVVBEQVRFUE9GSUxFUworICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKGxhbmcpLnBvLXVwZGF0ZSkKKyAgIyBDb21wdXRlIERVTU1ZUE9GSUxFUworICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKGxhbmcpLm5vcCkKKyAgIyBDb21wdXRlIEdNT0ZJTEVTCisgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQoc3JjZGlyKS8kKGxhbmcpLmdtbykKKyAgIyBDb21wdXRlIFBST1BFUlRJRVNGSUxFUworICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHRvcF9zcmNkaXIpLyQoRE9NQUlOKV8kKGxhbmcpLnByb3BlcnRpZXMpCisgICMgQ29tcHV0ZSBDTEFTU0ZJTEVTCisgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQodG9wX3NyY2RpcikvJChET01BSU4pXyQobGFuZykuY2xhc3MpCisgICMgQ29tcHV0ZSBRTUZJTEVTCisgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQoc3JjZGlyKS8kKGxhbmcpLnFtKQorICAjIENvbXB1dGUgTVNHRklMRVMKKyAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChzcmNkaXIpLyQoZnJvYiAkKGxhbmcpKS5tc2cpCisgICMgQ29tcHV0ZSBSRVNPVVJDRVNETExGSUxFUworICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHNyY2RpcikvJChmcm9iICQobGFuZykpLyQoRE9NQUlOKS5yZXNvdXJjZXMuZGxsKQorICBjYXNlICIkYWNfZ2l2ZW5fc3JjZGlyIiBpbgorICAgIC4pIHNyY2RpcnByZT0gOzsKKyAgICAqKSBzcmNkaXJwcmU9JyQoc3JjZGlyKS8nIDs7CisgIGVzYWMKKyAgUE9GSUxFUz0KKyAgVVBEQVRFUE9GSUxFUz0KKyAgRFVNTVlQT0ZJTEVTPQorICBHTU9GSUxFUz0KKyAgUFJPUEVSVElFU0ZJTEVTPQorICBDTEFTU0ZJTEVTPQorICBRTUZJTEVTPQorICBNU0dGSUxFUz0KKyAgUkVTT1VSQ0VTRExMRklMRVM9CisgIGZvciBsYW5nIGluICRBTExfTElOR1VBUzsgZG8KKyAgICBQT0ZJTEVTPSIkUE9GSUxFUyAkc3JjZGlycHJlJGxhbmcucG8iCisgICAgVVBEQVRFUE9GSUxFUz0iJFVQREFURVBPRklMRVMgJGxhbmcucG8tdXBkYXRlIgorICAgIERVTU1ZUE9GSUxFUz0iJERVTU1ZUE9GSUxFUyAkbGFuZy5ub3AiCisgICAgR01PRklMRVM9IiRHTU9GSUxFUyAkc3JjZGlycHJlJGxhbmcuZ21vIgorICAgIFBST1BFUlRJRVNGSUxFUz0iJFBST1BFUlRJRVNGSUxFUyBcJCh0b3Bfc3JjZGlyKS9cJChET01BSU4pXyRsYW5nLnByb3BlcnRpZXMiCisgICAgQ0xBU1NGSUxFUz0iJENMQVNTRklMRVMgXCQodG9wX3NyY2RpcikvXCQoRE9NQUlOKV8kbGFuZy5jbGFzcyIKKyAgICBRTUZJTEVTPSIkUU1GSUxFUyAkc3JjZGlycHJlJGxhbmcucW0iCisgICAgZnJvYmJlZGxhbmc9YGVjaG8gJGxhbmcgfCBzZWQgLWUgJ3MvXC4uKiQvLycgLWUgJ3kvQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVovYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXovJ2AKKyAgICBNU0dGSUxFUz0iJE1TR0ZJTEVTICRzcmNkaXJwcmUkZnJvYmJlZGxhbmcubXNnIgorICAgIGZyb2JiZWRsYW5nPWBlY2hvICRsYW5nIHwgc2VkIC1lICdzL18vLS9nJyAtZSAncy9ec3ItQ1Mvc3ItU1AvJyAtZSAncy9AbGF0aW4kLy1MYXRuLycgLWUgJ3MvQGN5cmlsbGljJC8tQ3lybC8nIC1lICdzL15zci1TUCQvc3ItU1AtTGF0bi8nIC1lICdzL151ei1VWiQvdXotVVotTGF0bi8nYAorICAgIFJFU09VUkNFU0RMTEZJTEVTPSIkUkVTT1VSQ0VTRExMRklMRVMgJHNyY2RpcnByZSRmcm9iYmVkbGFuZy9cJChET01BSU4pLnJlc291cmNlcy5kbGwiCisgIGRvbmUKKyAgIyBDQVRBTE9HUyBkZXBlbmRzIG9uIGJvdGggJGFjX2RpciBhbmQgdGhlIHVzZXIncyBMSU5HVUFTCisgICMgZW52aXJvbm1lbnQgdmFyaWFibGUuCisgIElOU1RfTElOR1VBUz0KKyAgaWYgdGVzdCAtbiAiJEFMTF9MSU5HVUFTIjsgdGhlbgorICAgIGZvciBwcmVzZW50bGFuZyBpbiAkQUxMX0xJTkdVQVM7IGRvCisgICAgICB1c2VpdD1ubworICAgICAgaWYgdGVzdCAiJVVOU0VUJSIgIT0gIiRMSU5HVUFTIjsgdGhlbgorICAgICAgICBkZXNpcmVkbGFuZ3VhZ2VzPSIkTElOR1VBUyIKKyAgICAgIGVsc2UKKyAgICAgICAgZGVzaXJlZGxhbmd1YWdlcz0iJEFMTF9MSU5HVUFTIgorICAgICAgZmkKKyAgICAgIGZvciBkZXNpcmVkbGFuZyBpbiAkZGVzaXJlZGxhbmd1YWdlczsgZG8KKyAgICAgICAgIyBVc2UgdGhlIHByZXNlbnRsYW5nIGNhdGFsb2cgaWYgZGVzaXJlZGxhbmcgaXMKKyAgICAgICAgIyAgIGEuIGVxdWFsIHRvIHByZXNlbnRsYW5nLCBvcgorICAgICAgICAjICAgYi4gYSB2YXJpYW50IG9mIHByZXNlbnRsYW5nIChiZWNhdXNlIGluIHRoaXMgY2FzZSwKKyAgICAgICAgIyAgICAgIHByZXNlbnRsYW5nIGNhbiBiZSB1c2VkIGFzIGEgZmFsbGJhY2sgZm9yIG1lc3NhZ2VzCisgICAgICAgICMgICAgICB3aGljaCBhcmUgbm90IHRyYW5zbGF0ZWQgaW4gdGhlIGRlc2lyZWRsYW5nIGNhdGFsb2cpLgorICAgICAgICBjYXNlICIkZGVzaXJlZGxhbmciIGluCisgICAgICAgICAgIiRwcmVzZW50bGFuZyIqKSB1c2VpdD15ZXM7OworICAgICAgICBlc2FjCisgICAgICBkb25lCisgICAgICBpZiB0ZXN0ICR1c2VpdCA9IHllczsgdGhlbgorICAgICAgICBJTlNUX0xJTkdVQVM9IiRJTlNUX0xJTkdVQVMgJHByZXNlbnRsYW5nIgorICAgICAgZmkKKyAgICBkb25lCisgIGZpCisgIENBVEFMT0dTPQorICBKQVZBQ0FUQUxPR1M9CisgIFFUQ0FUQUxPR1M9CisgIFRDTENBVEFMT0dTPQorICBDU0hBUlBDQVRBTE9HUz0KKyAgaWYgdGVzdCAtbiAiJElOU1RfTElOR1VBUyI7IHRoZW4KKyAgICBmb3IgbGFuZyBpbiAkSU5TVF9MSU5HVUFTOyBkbworICAgICAgQ0FUQUxPR1M9IiRDQVRBTE9HUyAkbGFuZy5nbW8iCisgICAgICBKQVZBQ0FUQUxPR1M9IiRKQVZBQ0FUQUxPR1MgXCQoRE9NQUlOKV8kbGFuZy5wcm9wZXJ0aWVzIgorICAgICAgUVRDQVRBTE9HUz0iJFFUQ0FUQUxPR1MgJGxhbmcucW0iCisgICAgICBmcm9iYmVkbGFuZz1gZWNobyAkbGFuZyB8IHNlZCAtZSAncy9cLi4qJC8vJyAtZSAneS9BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei8nYAorICAgICAgVENMQ0FUQUxPR1M9IiRUQ0xDQVRBTE9HUyAkZnJvYmJlZGxhbmcubXNnIgorICAgICAgZnJvYmJlZGxhbmc9YGVjaG8gJGxhbmcgfCBzZWQgLWUgJ3MvXy8tL2cnIC1lICdzL15zci1DUy9zci1TUC8nIC1lICdzL0BsYXRpbiQvLUxhdG4vJyAtZSAncy9AY3lyaWxsaWMkLy1DeXJsLycgLWUgJ3MvXnNyLVNQJC9zci1TUC1MYXRuLycgLWUgJ3MvXnV6LVVaJC91ei1VWi1MYXRuLydgCisgICAgICBDU0hBUlBDQVRBTE9HUz0iJENTSEFSUENBVEFMT0dTICRmcm9iYmVkbGFuZy9cJChET01BSU4pLnJlc291cmNlcy5kbGwiCisgICAgZG9uZQorICBmaQorCisgIHNlZCAtZSAic3xAUE9URklMRVNfREVQU0B8JFBPVEZJTEVTX0RFUFN8ZyIgLWUgInN8QFBPRklMRVNAfCRQT0ZJTEVTfGciIC1lICJzfEBVUERBVEVQT0ZJTEVTQHwkVVBEQVRFUE9GSUxFU3xnIiAtZSAic3xARFVNTVlQT0ZJTEVTQHwkRFVNTVlQT0ZJTEVTfGciIC1lICJzfEBHTU9GSUxFU0B8JEdNT0ZJTEVTfGciIC1lICJzfEBQUk9QRVJUSUVTRklMRVNAfCRQUk9QRVJUSUVTRklMRVN8ZyIgLWUgInN8QENMQVNTRklMRVNAfCRDTEFTU0ZJTEVTfGciIC1lICJzfEBRTUZJTEVTQHwkUU1GSUxFU3xnIiAtZSAic3xATVNHRklMRVNAfCRNU0dGSUxFU3xnIiAtZSAic3xAUkVTT1VSQ0VTRExMRklMRVNAfCRSRVNPVVJDRVNETExGSUxFU3xnIiAtZSAic3xAQ0FUQUxPR1NAfCRDQVRBTE9HU3xnIiAtZSAic3xASkFWQUNBVEFMT0dTQHwkSkFWQUNBVEFMT0dTfGciIC1lICJzfEBRVENBVEFMT0dTQHwkUVRDQVRBTE9HU3xnIiAtZSAic3xAVENMQ0FUQUxPR1NAfCRUQ0xDQVRBTE9HU3xnIiAtZSAic3xAQ1NIQVJQQ0FUQUxPR1NAfCRDU0hBUlBDQVRBTE9HU3xnIiAtZSAncyxeI2Rpc3RkaXI6LGRpc3RkaXI6LCcgPCAiJGFjX2ZpbGUiID4gIiRhY19maWxlLnRtcCIKKyAgaWYgZ3JlcCAtbCAnQFRDTENBVEFMT0dTQCcgIiRhY19maWxlIiA+IC9kZXYvbnVsbDsgdGhlbgorICAgICMgQWRkIGRlcGVuZGVuY2llcyB0aGF0IGNhbm5vdCBiZSBmb3JtdWxhdGVkIGFzIGEgc2ltcGxlIHN1ZmZpeCBydWxlLgorICAgIGZvciBsYW5nIGluICRBTExfTElOR1VBUzsgZG8KKyAgICAgIGZyb2JiZWRsYW5nPWBlY2hvICRsYW5nIHwgc2VkIC1lICdzL1wuLiokLy8nIC1lICd5L0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaL2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6LydgCisgICAgICBjYXQgPj4gIiRhY19maWxlLnRtcCIgPDxFT0YKKyRmcm9iYmVkbGFuZy5tc2c6ICRsYW5nLnBvCisJQGVjaG8gIlwkKE1TR0ZNVCkgLWMgLS10Y2wgLWQgXCQoc3JjZGlyKSAtbCAkbGFuZyAkc3JjZGlycHJlJGxhbmcucG8iOyBcCisJXCQoTVNHRk1UKSAtYyAtLXRjbCAtZCAiXCQoc3JjZGlyKSIgLWwgJGxhbmcgJHNyY2RpcnByZSRsYW5nLnBvIHx8IHsgcm0gLWYgIlwkKHNyY2RpcikvJGZyb2JiZWRsYW5nLm1zZyI7IGV4aXQgMTsgfQorRU9GCisgICAgZG9uZQorICBmaQorICBpZiBncmVwIC1sICdAQ1NIQVJQQ0FUQUxPR1NAJyAiJGFjX2ZpbGUiID4gL2Rldi9udWxsOyB0aGVuCisgICAgIyBBZGQgZGVwZW5kZW5jaWVzIHRoYXQgY2Fubm90IGJlIGZvcm11bGF0ZWQgYXMgYSBzaW1wbGUgc3VmZml4IHJ1bGUuCisgICAgZm9yIGxhbmcgaW4gJEFMTF9MSU5HVUFTOyBkbworICAgICAgZnJvYmJlZGxhbmc9YGVjaG8gJGxhbmcgfCBzZWQgLWUgJ3MvXy8tL2cnIC1lICdzL15zci1DUy9zci1TUC8nIC1lICdzL0BsYXRpbiQvLUxhdG4vJyAtZSAncy9AY3lyaWxsaWMkLy1DeXJsLycgLWUgJ3MvXnNyLVNQJC9zci1TUC1MYXRuLycgLWUgJ3MvXnV6LVVaJC91ei1VWi1MYXRuLydgCisgICAgICBjYXQgPj4gIiRhY19maWxlLnRtcCIgPDxFT0YKKyRmcm9iYmVkbGFuZy9cJChET01BSU4pLnJlc291cmNlcy5kbGw6ICRsYW5nLnBvCisJQGVjaG8gIlwkKE1TR0ZNVCkgLWMgLS1jc2hhcnAgLWQgXCQoc3JjZGlyKSAtbCAkbGFuZyAkc3JjZGlycHJlJGxhbmcucG8gLXIgXCQoRE9NQUlOKSI7IFwKKwlcJChNU0dGTVQpIC1jIC0tY3NoYXJwIC1kICJcJChzcmNkaXIpIiAtbCAkbGFuZyAkc3JjZGlycHJlJGxhbmcucG8gLXIgIlwkKERPTUFJTikiIHx8IHsgcm0gLWYgIlwkKHNyY2RpcikvJGZyb2JiZWRsYW5nLm1zZyI7IGV4aXQgMTsgfQorRU9GCisgICAgZG9uZQorICBmaQorICBpZiB0ZXN0IC1uICIkUE9NQUtFRklMRURFUFMiOyB0aGVuCisgICAgY2F0ID4+ICIkYWNfZmlsZS50bXAiIDw8RU9GCitNYWtlZmlsZTogJFBPTUFLRUZJTEVERVBTCitFT0YKKyAgZmkKKyAgbXYgIiRhY19maWxlLnRtcCIgIiRhY19maWxlIgorXSkKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9tNC9wcm9ndGVzdC5tNCBiL3BhcnRlZC0xLjguNy9tNC9wcm9ndGVzdC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTYzNjVjCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L200L3Byb2d0ZXN0Lm00CkBAIC0wLDAgKzEsOTIgQEAKKyMgcHJvZ3Rlc3QubTQgc2VyaWFsIDQgKGdldHRleHQtMC4xNC4yKQorZG5sIENvcHlyaWdodCAoQykgMTk5Ni0yMDAzLCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCitkbmwKK2RubCBUaGlzIGZpbGUgY2FuIGNhbiBiZSB1c2VkIGluIHByb2plY3RzIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIHVuZGVyCitkbmwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIG9yIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworZG5sIExpY2Vuc2UgYnV0IHdoaWNoIHN0aWxsIHdhbnQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgR05VIGdldHRleHQKK2RubCBmdW5jdGlvbmFsaXR5LgorZG5sIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCBjb2RlIG9mIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGlzIGNvdmVyZWQKK2RubCBieSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYW5kIHRoZSByZXN0IG9mIHRoZSBHTlUKK2RubCBnZXR0ZXh0IHBhY2thZ2UgcGFja2FnZSBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KK2RubCBUaGV5IGFyZSAqbm90KiBpbiB0aGUgcHVibGljIGRvbWFpbi4KKworZG5sIEF1dGhvcnM6CitkbmwgICBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMTk5Ni4KKworQUNfUFJFUkVRKDIuNTApCisKKyMgU2VhcmNoIHBhdGggZm9yIGEgcHJvZ3JhbSB3aGljaCBwYXNzZXMgdGhlIGdpdmVuIHRlc3QuCisKK2RubCBBTV9QQVRIX1BST0dfV0lUSF9URVNUKFZBUklBQkxFLCBQUk9HLVRPLUNIRUNLLUZPUiwKK2RubCAgIFRFU1QtUEVSRk9STUVELU9OLUZPVU5EX1BST0dSQU0gWywgVkFMVUUtSUYtTk9ULUZPVU5EIFssIFBBVEhdXSkKK0FDX0RFRlVOKFtBTV9QQVRIX1BST0dfV0lUSF9URVNUXSwKK1sKKyMgUHJlcGFyZSBQQVRIX1NFUEFSQVRPUi4KKyMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgoraWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KKyAgZWNobyAiIyEgL2Jpbi9zaCIgPmNvbmYkJC5zaAorICBlY2hvICAiZXhpdCAwIiAgID4+Y29uZiQkLnNoCisgIGNobW9kICt4IGNvbmYkJC5zaAorICBpZiAoUEFUSD0iL25vbmV4aXN0ZW50Oy4iOyBjb25mJCQuc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgIFBBVEhfU0VQQVJBVE9SPSc7JworICBlbHNlCisgICAgUEFUSF9TRVBBUkFUT1I9OgorICBmaQorICBybSAtZiBjb25mJCQuc2gKK2ZpCisKKyMgRmluZCBvdXQgaG93IHRvIHRlc3QgZm9yIGV4ZWN1dGFibGUgZmlsZXMuIERvbid0IHVzZSBhIHplcm8tYnl0ZSBmaWxlLAorIyBhcyBzeXN0ZW1zIG1heSB1c2UgbWV0aG9kcyBvdGhlciB0aGFuIG1vZGUgYml0cyB0byBkZXRlcm1pbmUgZXhlY3V0YWJpbGl0eS4KK2NhdCA+Y29uZiQkLmZpbGUgPDxfQVNFT0YKKyMhIC9iaW4vc2gKK2V4aXQgMAorX0FTRU9GCitjaG1vZCAreCBjb25mJCQuZmlsZQoraWYgdGVzdCAteCBjb25mJCQuZmlsZSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYWNfZXhlY3V0YWJsZV9wPSJ0ZXN0IC14IgorZWxzZQorICBhY19leGVjdXRhYmxlX3A9InRlc3QgLWYiCitmaQorcm0gLWYgY29uZiQkLmZpbGUKKworIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkMiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJDI7IGFjX3dvcmQ9WyRdMgorQUNfTVNHX0NIRUNLSU5HKFtmb3IgJGFjX3dvcmRdKQorQUNfQ0FDSEVfVkFMKGFjX2N2X3BhdGhfJDEsCitbY2FzZSAiWyRdJDEiIGluCisgIFtbXFwvXV0qIHwgPzpbW1xcL11dKikKKyAgICBhY19jdl9wYXRoXyQxPSJbJF0kMSIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgICAgOzsKKyAgKikKKyAgICBhY19zYXZlX0lGUz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgICBmb3IgYWNfZGlyIGluIGlmZWxzZShbJDVdLCAsICRQQVRILCBbJDVdKTsgZG8KKyAgICAgIElGUz0iJGFjX3NhdmVfSUZTIgorICAgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgICAgICBpZiAkYWNfZXhlY3V0YWJsZV9wICIkYWNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgICAgICAgIGVjaG8gIiRhc19tZTogdHJ5aW5nICRhY19kaXIvJGFjX3dvcmQuLi4iID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgICAgICBpZiBbJDNdOyB0aGVuCisgICAgICAgICAgICBhY19jdl9wYXRoXyQxPSIkYWNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICAgICAgICAgYnJlYWsgMgorICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICBkb25lCisgICAgZG9uZQorICAgIElGUz0iJGFjX3NhdmVfSUZTIgorZG5sIElmIG5vIDR0aCBhcmcgaXMgZ2l2ZW4sIGxlYXZlIHRoZSBjYWNoZSB2YXJpYWJsZSB1bnNldCwKK2RubCBzbyBBQ19QQVRIX1BST0dTIHdpbGwga2VlcCBsb29raW5nLgoraWZlbHNlKFskNF0sICwgLCBbICB0ZXN0IC16ICJbJF1hY19jdl9wYXRoXyQxIiAmJiBhY19jdl9wYXRoXyQxPSIkNCIKK10pZG5sCisgICAgOzsKK2VzYWNdKWRubAorJDE9IiRhY19jdl9wYXRoXyQxIgoraWYgdGVzdCBpZmVsc2UoWyQ0XSwgLCBbLW4gIlskXSQxIl0sIFsiWyRdJDEiICE9ICIkNCJdKTsgdGhlbgorICBBQ19NU0dfUkVTVUxUKFskXSQxKQorZWxzZQorICBBQ19NU0dfUkVTVUxUKG5vKQorZmkKK0FDX1NVQlNUKCQxKWRubAorXSkKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9tNC9xdW90ZWFyZy5tNCBiL3BhcnRlZC0xLjguNy9tNC9xdW90ZWFyZy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjYzNWQwCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L200L3F1b3RlYXJnLm00CkBAIC0wLDAgKzEsMTUgQEAKKyMgcXVvdGVhcmcubTQgc2VyaWFsIDYKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworQUNfREVGVU4oW2dsX1FVT1RFQVJHXSwKK1sKKyAgQUNfTElCT0JKKFtxdW90ZWFyZ10pCisKKyAgZG5sIFByZXJlcXVpc2l0ZXMgb2YgbGliL3F1b3RlYXJnLmMuCisgIEFDX0NIRUNLX0ZVTkNTX09OQ0UoW21ic2luaXRdKQorICBBQ19UWVBFX01CU1RBVEVfVAorICBnbF9GVU5DX01CUlRPV0MKK10pCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbTQvcmVnZXgubTQgYi9wYXJ0ZWQtMS44LjcvbTQvcmVnZXgubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhkNWIxZQotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9tNC9yZWdleC5tNApAQCAtMCwwICsxLDIxMSBAQAorI3NlcmlhbCA0NgorCisjIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwKKyMgMjAwNiwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitkbmwgSW5pdGlhbGx5IGRlcml2ZWQgZnJvbSBjb2RlIGluIEdOVSBncmVwLgorZG5sIE1vc3RseSB3cml0dGVuIGJ5IEppbSBNZXllcmluZy4KKworQUNfUFJFUkVRKFsyLjUwXSkKKworQUNfREVGVU4oW2dsX1JFR0VYXSwKK1sKKyAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFKFtsb2NhbGUuaF0pCisKKyAgQUNfQVJHX1dJVEgoW2luY2x1ZGVkLXJlZ2V4XSwKKyAgICBbQUNfSEVMUF9TVFJJTkcoWy0td2l0aG91dC1pbmNsdWRlZC1yZWdleF0sCisJCSAgICBbZG9uJ3QgY29tcGlsZSByZWdleDsgdGhpcyBpcyB0aGUgZGVmYXVsdCBvbiAzMi1iaXQKKwkJICAgICBzeXN0ZW1zIHdpdGggcmVjZW50LWVub3VnaCB2ZXJzaW9ucyBvZiB0aGUgR05VIEMKKwkJICAgICBMaWJyYXJ5ICh1c2Ugd2l0aCBjYXV0aW9uIG9uIG90aGVyIHN5c3RlbXMpLgorCQkgICAgIE9uIHN5c3RlbXMgd2l0aCA2NC1iaXQgcHRyZGlmZl90IGFuZCAzMi1iaXQgaW50LAorCQkgICAgIC0td2l0aC1pbmNsdWRlZC1yZWdleCBpcyB0aGUgZGVmYXVsdCwgaW4gY2FzZQorCQkgICAgIHJlZ2V4IGZ1bmN0aW9ucyBvcGVyYXRlIG9uIHZlcnkgbG9uZyBzdHJpbmdzICg+MkdCKV0pXSkKKworICBjYXNlICR3aXRoX2luY2x1ZGVkX3JlZ2V4IGluICMoCisgIHllc3xubykgYWNfdXNlX2luY2x1ZGVkX3JlZ2V4PSR3aXRoX2luY2x1ZGVkX3JlZ2V4CisJOzsKKyAgJycpCisgICAgIyBJZiB0aGUgc3lzdGVtIHJlZ2V4IHN1cHBvcnQgaXMgZ29vZCBlbm91Z2ggdGhhdCBpdCBwYXNzZXMgdGhlCisgICAgIyBmb2xsb3dpbmcgcnVuIHRlc3QsIHRoZW4gZGVmYXVsdCB0byAqbm90KiB1c2luZyB0aGUgaW5jbHVkZWQgcmVnZXguYy4KKyAgICAjIElmIGNyb3NzIGNvbXBpbGluZywgYXNzdW1lIHRoZSB0ZXN0IHdvdWxkIGZhaWwgYW5kIHVzZSB0aGUgaW5jbHVkZWQKKyAgICAjIHJlZ2V4LmMuCisgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciB3b3JraW5nIHJlX2NvbXBpbGVfcGF0dGVybl0sCisJCSAgIFtnbF9jdl9mdW5jX3JlX2NvbXBpbGVfcGF0dGVybl93b3JraW5nXSwKKyAgICAgIFtBQ19SVU5fSUZFTFNFKAorCVtBQ19MQU5HX1BST0dSQU0oCisJICBbQUNfSU5DTFVERVNfREVGQVVMVAorCSAgICNpZiBIQVZFX0xPQ0FMRV9ICisJICAgICNpbmNsdWRlIDxsb2NhbGUuaD4KKwkgICAjZW5kaWYKKwkgICAjaW5jbHVkZSA8bGltaXRzLmg+CisJICAgI2luY2x1ZGUgPHJlZ2V4Lmg+CisJICAgXSwKKwkgIFtbc3RhdGljIHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciByZWdleDsKKwkgICAgdW5zaWduZWQgY2hhciBmb2xkZWRfY2hhcnNbVUNIQVJfTUFYICsgMV07CisJICAgIGludCBpOworCSAgICBjb25zdCBjaGFyICpzOworCSAgICBzdHJ1Y3QgcmVfcmVnaXN0ZXJzIHJlZ3M7CisKKwkgICAgI2lmIEhBVkVfTE9DQUxFX0gKKwkgICAgICAvKiBodHRwOi8vc291cmNld2FyZS5vcmcvbWwvbGliYy1oYWNrZXIvMjAwNi0wOS9tc2cwMDAwOC5odG1sCisJCSBUaGlzIHRlc3QgbmVlZHMgdmFsZ3JpbmQgdG8gY2F0Y2ggdGhlIGJ1ZyBvbiBEZWJpYW4KKwkJIEdOVS9MaW51eCAzLjEgeDg2LCBidXQgaXQgbWlnaHQgY2F0Y2ggdGhlIGJ1ZyBiZXR0ZXIKKwkJIG9uIG90aGVyIHBsYXRmb3JtcyBhbmQgaXQgc2hvdWxkbid0IGh1cnQgdG8gdHJ5IHRoZQorCQkgdGVzdCBoZXJlLiAgKi8KKwkgICAgICBpZiAoc2V0bG9jYWxlIChMQ19BTEwsICJlbl9VUy5VVEYtOCIpKQorCQl7CisJCSAgc3RhdGljIGNoYXIgY29uc3QgcGF0W10gPSAiaW5zZXJ0IGludG8iOworCQkgIHN0YXRpYyBjaGFyIGNvbnN0IGRhdGFbXSA9CisJCSAgICAiXHhGRlwwXHgxMlx4QTJceEFBXHhDNFx4QjEsS1x4MTJceEM0XHhCMSpceEFDSyI7CisJCSAgcmVfc2V0X3N5bnRheCAoUkVfU1lOVEFYX0dSRVAgfCBSRV9IQVRfTElTVFNfTk9UX05FV0xJTkUKKwkJCQkgfCBSRV9JQ0FTRSk7CisJCSAgbWVtc2V0ICgmcmVnZXgsIDAsIHNpemVvZiByZWdleCk7CisJCSAgcyA9IHJlX2NvbXBpbGVfcGF0dGVybiAocGF0LCBzaXplb2YgcGF0IC0gMSwgJnJlZ2V4KTsKKwkJICBpZiAocykKKwkJICAgIHJldHVybiAxOworCQkgIGlmIChyZV9zZWFyY2ggKCZyZWdleCwgZGF0YSwgc2l6ZW9mIGRhdGEgLSAxLAorCQkJCSAwLCBzaXplb2YgZGF0YSAtIDEsICZyZWdzKQorCQkgICAgICAhPSAtMSkKKwkJICAgIHJldHVybiAxOworCQkgIGlmICghIHNldGxvY2FsZSAoTENfQUxMLCAiQyIpKQorCQkgICAgcmV0dXJuIDE7CisJCX0KKwkgICAgI2VuZGlmCisKKwkgICAgLyogVGhpcyB0ZXN0IGlzIGZyb20gZ2xpYmMgYnVnIDM5NTcsIHJlcG9ydGVkIGJ5IEFuZHJldyBNYWNrZXkuICAqLworCSAgICByZV9zZXRfc3ludGF4IChSRV9TWU5UQVhfRUdSRVAgfCBSRV9IQVRfTElTVFNfTk9UX05FV0xJTkUpOworCSAgICBtZW1zZXQgKCZyZWdleCwgMCwgc2l6ZW9mIHJlZ2V4KTsKKwkgICAgcyA9IHJlX2NvbXBpbGVfcGF0dGVybiAoImFbXnhdYiIsIDYsICZyZWdleCk7CisJICAgIGlmIChzKQorCSAgICAgIHJldHVybiAxOworCisJICAgIC8qIFRoaXMgc2hvdWxkIGZhaWwsIGJ1dCBzdWNjZWVkcyBmb3IgZ2xpYmMtMi41LiAgKi8KKwkgICAgaWYgKHJlX3NlYXJjaCAoJnJlZ2V4LCAiYVxuYiIsIDMsIDAsIDMsICZyZWdzKSAhPSAtMSkKKwkgICAgICByZXR1cm4gMTsKKworCSAgICAvKiBUaGlzIHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyBmcm9tIFNwZW5jZXIgZXJlIHRlc3QgbnVtYmVyIDc1CisJICAgICAgIGluIGdyZXAtMi4zLiAgKi8KKwkgICAgcmVfc2V0X3N5bnRheCAoUkVfU1lOVEFYX1BPU0lYX0VHUkVQKTsKKwkgICAgbWVtc2V0ICgmcmVnZXgsIDAsIHNpemVvZiByZWdleCk7CisJICAgIGZvciAoaSA9IDA7IGkgPD0gVUNIQVJfTUFYOyBpKyspCisJICAgICAgZm9sZGVkX2NoYXJzW2ldID0gaTsKKwkgICAgcmVnZXgudHJhbnNsYXRlID0gZm9sZGVkX2NoYXJzOworCSAgICBzID0gcmVfY29tcGlsZV9wYXR0ZXJuICgiYVtbOkA6PkA6XV1iXG4iLCAxMSwgJnJlZ2V4KTsKKwkgICAgLyogVGhpcyBzaG91bGQgZmFpbCB3aXRoIF9JbnZhbGlkIGNoYXJhY3RlciBjbGFzcyBuYW1lXyBlcnJvci4gICovCisJICAgIGlmICghcykKKwkgICAgICByZXR1cm4gMTsKKworCSAgICAvKiBUaGlzIHNob3VsZCBzdWNjZWVkLCBidXQgZG9lcyBub3QgZm9yIGdsaWJjLTIuMS4zLiAgKi8KKwkgICAgbWVtc2V0ICgmcmVnZXgsIDAsIHNpemVvZiByZWdleCk7CisJICAgIHMgPSByZV9jb21waWxlX3BhdHRlcm4gKCJ7MSIsIDIsICZyZWdleCk7CisKKwkgICAgaWYgKHMpCisJICAgICAgcmV0dXJuIDE7CisKKwkgICAgLyogVGhlIGZvbGxvd2luZyBleGFtcGxlIGlzIGRlcml2ZWQgZnJvbSBhIHByb2JsZW0gcmVwb3J0CisJICAgICAgIGFnYWluc3QgZ2F3ayBmcm9tIEpvcmdlIFN0b2xmaSA8c3RvbGZpQGljLnVuaWNhbXAuYnI+LiAgKi8KKwkgICAgbWVtc2V0ICgmcmVnZXgsIDAsIHNpemVvZiByZWdleCk7CisJICAgIHMgPSByZV9jb21waWxlX3BhdHRlcm4gKCJbYW5cMzcxXSpuIiwgNywgJnJlZ2V4KTsKKwkgICAgaWYgKHMpCisJICAgICAgcmV0dXJuIDE7CisKKwkgICAgLyogVGhpcyBzaG91bGQgbWF0Y2gsIGJ1dCBkb2VzIG5vdCBmb3IgZ2xpYmMtMi4yLjEuICAqLworCSAgICBpZiAocmVfbWF0Y2ggKCZyZWdleCwgImFuIiwgMiwgMCwgJnJlZ3MpICE9IDIpCisJICAgICAgcmV0dXJuIDE7CisKKwkgICAgbWVtc2V0ICgmcmVnZXgsIDAsIHNpemVvZiByZWdleCk7CisJICAgIHMgPSByZV9jb21waWxlX3BhdHRlcm4gKCJ4IiwgMSwgJnJlZ2V4KTsKKwkgICAgaWYgKHMpCisJICAgICAgcmV0dXJuIDE7CisKKwkgICAgLyogZ2xpYmMtMi4yLjkzIGRvZXMgbm90IHdvcmsgd2l0aCBhIG5lZ2F0aXZlIFJBTkdFIGFyZ3VtZW50LiAgKi8KKwkgICAgaWYgKHJlX3NlYXJjaCAoJnJlZ2V4LCAid3h5IiwgMywgMiwgLTIsICZyZWdzKSAhPSAxKQorCSAgICAgIHJldHVybiAxOworCisJICAgIC8qIFRoZSB2ZXJzaW9uIG9mIHJlZ2V4LmMgaW4gb2xkZXIgdmVyc2lvbnMgb2YgZ251bGliCisJICAgICAgIGlnbm9yZWQgUkVfSUNBU0UuICBEZXRlY3QgdGhhdCBwcm9ibGVtIHRvby4gICovCisJICAgIHJlX3NldF9zeW50YXggKFJFX1NZTlRBWF9FTUFDUyB8IFJFX0lDQVNFKTsKKwkgICAgbWVtc2V0ICgmcmVnZXgsIDAsIHNpemVvZiByZWdleCk7CisJICAgIHMgPSByZV9jb21waWxlX3BhdHRlcm4gKCJ4IiwgMSwgJnJlZ2V4KTsKKwkgICAgaWYgKHMpCisJICAgICAgcmV0dXJuIDE7CisKKwkgICAgaWYgKHJlX3NlYXJjaCAoJnJlZ2V4LCAiV1hZIiwgMywgMCwgMywgJnJlZ3MpIDwgMCkKKwkgICAgICByZXR1cm4gMTsKKworCSAgICAvKiBSRUdfU1RBUlRFTkQgd2FzIGFkZGVkIHRvIGdsaWJjIG9uIDIwMDQtMDEtMTUuCisJICAgICAgIFJlamVjdCBvbGRlciB2ZXJzaW9ucy4gICovCisJICAgIGlmICghIFJFR19TVEFSVEVORCkKKwkgICAgICByZXR1cm4gMTsKKworCSAgICAvKiBSZWplY3QgaG9zdHMgd2hvc2UgcmVnb2ZmX3QgdmFsdWVzIGFyZSB0b28gbmFycm93LgorCSAgICAgICBUaGVzZSBpbmNsdWRlIGdsaWJjIDIuMy41IG9uIGhvc3RzIHdpdGggNjQtYml0IHB0cmRpZmZfdAorCSAgICAgICBhbmQgMzItYml0IGludC4gICovCisJICAgIGlmIChzaXplb2YgKHJlZ29mZl90KSA8IHNpemVvZiAocHRyZGlmZl90KQorCQl8fCBzaXplb2YgKHJlZ29mZl90KSA8IHNpemVvZiAoc3NpemVfdCkpCisJICAgICAgcmV0dXJuIDE7CisKKwkgICAgcmV0dXJuIDA7XV0pXSwKKyAgICAgICBbZ2xfY3ZfZnVuY19yZV9jb21waWxlX3BhdHRlcm5fd29ya2luZz15ZXNdLAorICAgICAgIFtnbF9jdl9mdW5jX3JlX2NvbXBpbGVfcGF0dGVybl93b3JraW5nPW5vXSwKKyAgICAgICBkbmwgV2hlbiBjcm9zc2NvbXBpbGluZywgYXNzdW1lIGl0IGlzIG5vdCB3b3JraW5nLgorICAgICAgIFtnbF9jdl9mdW5jX3JlX2NvbXBpbGVfcGF0dGVybl93b3JraW5nPW5vXSldKQorICAgIGNhc2UgJGdsX2N2X2Z1bmNfcmVfY29tcGlsZV9wYXR0ZXJuX3dvcmtpbmcgaW4gIygKKyAgICB5ZXMpIGFjX3VzZV9pbmNsdWRlZF9yZWdleD1ubzs7ICMoCisgICAgbm8pIGFjX3VzZV9pbmNsdWRlZF9yZWdleD15ZXM7OworICAgIGVzYWMKKyAgICA7OworICAqKSBBQ19NU0dfRVJST1IoW0ludmFsaWQgdmFsdWUgZm9yIC0td2l0aC1pbmNsdWRlZC1yZWdleDogJHdpdGhfaW5jbHVkZWRfcmVnZXhdKQorICAgIDs7CisgIGVzYWMKKworICBpZiB0ZXN0ICRhY191c2VfaW5jbHVkZWRfcmVnZXggPSB5ZXM7IHRoZW4KKyAgICBBQ19ERUZJTkUoW19SRUdFWF9MQVJHRV9PRkZTRVRTXSwgMSwKKyAgICAgIFtEZWZpbmUgaWYgeW91IHdhbnQgcmVnb2ZmX3QgdG8gYmUgYXQgbGVhc3QgYXMgd2lkZSBQT1NJWCByZXF1aXJlcy5dKQorICAgIEFDX0RFRklORShbcmVfc3ludGF4X29wdGlvbnNdLCBbcnBsX3JlX3N5bnRheF9vcHRpb25zXSwKKyAgICAgIFtEZWZpbmUgdG8gcnBsX3JlX3N5bnRheF9vcHRpb25zIGlmIHRoZSByZXBsYWNlbWVudCBzaG91bGQgYmUgdXNlZC5dKQorICAgIEFDX0RFRklORShbcmVfc2V0X3N5bnRheF0sIFtycGxfcmVfc2V0X3N5bnRheF0sCisgICAgICBbRGVmaW5lIHRvIHJwbF9yZV9zZXRfc3ludGF4IGlmIHRoZSByZXBsYWNlbWVudCBzaG91bGQgYmUgdXNlZC5dKQorICAgIEFDX0RFRklORShbcmVfY29tcGlsZV9wYXR0ZXJuXSwgW3JwbF9yZV9jb21waWxlX3BhdHRlcm5dLAorICAgICAgW0RlZmluZSB0byBycGxfcmVfY29tcGlsZV9wYXR0ZXJuIGlmIHRoZSByZXBsYWNlbWVudCBzaG91bGQgYmUgdXNlZC5dKQorICAgIEFDX0RFRklORShbcmVfY29tcGlsZV9mYXN0bWFwXSwgW3JwbF9yZV9jb21waWxlX2Zhc3RtYXBdLAorICAgICAgW0RlZmluZSB0byBycGxfcmVfY29tcGlsZV9mYXN0bWFwIGlmIHRoZSByZXBsYWNlbWVudCBzaG91bGQgYmUgdXNlZC5dKQorICAgIEFDX0RFRklORShbcmVfc2VhcmNoXSwgW3JwbF9yZV9zZWFyY2hdLAorICAgICAgW0RlZmluZSB0byBycGxfcmVfc2VhcmNoIGlmIHRoZSByZXBsYWNlbWVudCBzaG91bGQgYmUgdXNlZC5dKQorICAgIEFDX0RFRklORShbcmVfc2VhcmNoXzJdLCBbcnBsX3JlX3NlYXJjaF8yXSwKKyAgICAgIFtEZWZpbmUgdG8gcnBsX3JlX3NlYXJjaF8yIGlmIHRoZSByZXBsYWNlbWVudCBzaG91bGQgYmUgdXNlZC5dKQorICAgIEFDX0RFRklORShbcmVfbWF0Y2hdLCBbcnBsX3JlX21hdGNoXSwKKyAgICAgIFtEZWZpbmUgdG8gcnBsX3JlX21hdGNoIGlmIHRoZSByZXBsYWNlbWVudCBzaG91bGQgYmUgdXNlZC5dKQorICAgIEFDX0RFRklORShbcmVfbWF0Y2hfMl0sIFtycGxfcmVfbWF0Y2hfMl0sCisgICAgICBbRGVmaW5lIHRvIHJwbF9yZV9tYXRjaF8yIGlmIHRoZSByZXBsYWNlbWVudCBzaG91bGQgYmUgdXNlZC5dKQorICAgIEFDX0RFRklORShbcmVfc2V0X3JlZ2lzdGVyc10sIFtycGxfcmVfc2V0X3JlZ2lzdGVyc10sCisgICAgICBbRGVmaW5lIHRvIHJwbF9yZV9zZXRfcmVnaXN0ZXJzIGlmIHRoZSByZXBsYWNlbWVudCBzaG91bGQgYmUgdXNlZC5dKQorICAgIEFDX0RFRklORShbcmVfY29tcF0sIFtycGxfcmVfY29tcF0sCisgICAgICBbRGVmaW5lIHRvIHJwbF9yZV9jb21wIGlmIHRoZSByZXBsYWNlbWVudCBzaG91bGQgYmUgdXNlZC5dKQorICAgIEFDX0RFRklORShbcmVfZXhlY10sIFtycGxfcmVfZXhlY10sCisgICAgICBbRGVmaW5lIHRvIHJwbF9yZV9leGVjIGlmIHRoZSByZXBsYWNlbWVudCBzaG91bGQgYmUgdXNlZC5dKQorICAgIEFDX0RFRklORShbcmVnY29tcF0sIFtycGxfcmVnY29tcF0sCisgICAgICBbRGVmaW5lIHRvIHJwbF9yZWdjb21wIGlmIHRoZSByZXBsYWNlbWVudCBzaG91bGQgYmUgdXNlZC5dKQorICAgIEFDX0RFRklORShbcmVnZXhlY10sIFtycGxfcmVnZXhlY10sCisgICAgICBbRGVmaW5lIHRvIHJwbF9yZWdleGVjIGlmIHRoZSByZXBsYWNlbWVudCBzaG91bGQgYmUgdXNlZC5dKQorICAgIEFDX0RFRklORShbcmVnZXJyb3JdLCBbcnBsX3JlZ2Vycm9yXSwKKyAgICAgIFtEZWZpbmUgdG8gcnBsX3JlZ2Vycm9yIGlmIHRoZSByZXBsYWNlbWVudCBzaG91bGQgYmUgdXNlZC5dKQorICAgIEFDX0RFRklORShbcmVnZnJlZV0sIFtycGxfcmVnZnJlZV0sCisgICAgICBbRGVmaW5lIHRvIHJwbF9yZWdmcmVlIGlmIHRoZSByZXBsYWNlbWVudCBzaG91bGQgYmUgdXNlZC5dKQorICAgIEFDX0xJQk9CSihbcmVnZXhdKQorICAgIGdsX1BSRVJFUV9SRUdFWAorICBmaQorXSkKKworIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi9yZWdleC5jIGFuZCBsaWIvcmVnZXhfaW50ZXJuYWwuYy4KK0FDX0RFRlVOKFtnbF9QUkVSRVFfUkVHRVhdLAorWworICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKyAgQUNfUkVRVUlSRShbQUNfQ19SRVNUUklDVF0pCisgIEFDX0NIRUNLX0ZVTkNTX09OQ0UoW2lzd2N0eXBlIG1icnRvd2Mgd2NydG9tYiB3Y3Njb2xsXSkKKyAgQUNfQ0hFQ0tfREVDTFMoW2lzYmxhbmtdLCBbXSwgW10sIFsjaW5jbHVkZSA8Y3R5cGUuaD5dKQorXSkKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9tNC9yZW5hbWUubTQgYi9wYXJ0ZWQtMS44LjcvbTQvcmVuYW1lLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5YWQ1ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbTQvcmVuYW1lLm00CkBAIC0wLDAgKzEsNTIgQEAKKyNzZXJpYWwgMTAKKworIyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDMsIDIwMDUsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworZG5sIEZyb20gVm9sa2VyIEJvcmNoZXJ0LgorZG5sIERldGVybWluZSB3aGV0aGVyIHJlbmFtZSB3b3JrcyBmb3Igc291cmNlIGZpbGUgbmFtZXMgd2l0aCBhIHRyYWlsaW5nIHNsYXNoLgorZG5sIFRoZSByZW5hbWUgZnJvbSBTdW5PUyA0LjEuMV9VMSBkb2Vzbid0LgorZG5sCitkbmwgSWYgaXQgZG9lc24ndCwgdGhlbiBkZWZpbmUgUkVOQU1FX1RSQUlMSU5HX1NMQVNIX0JVRyBhbmQgYXJyYW5nZQorZG5sIHRvIGNvbXBpbGUgdGhlIHdyYXBwZXIgZnVuY3Rpb24uCitkbmwKKworQUNfREVGVU4oW2dsX0ZVTkNfUkVOQU1FXSwKK1sKKyBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciByZW5hbWUgaXMgYnJva2VuXSwKKyAgZ2xfY3ZfZnVuY19yZW5hbWVfdHJhaWxpbmdfc2xhc2hfYnVnLAorICBbCisgICAgcm0gLXJmIGNvbmZ0ZXN0LmQxIGNvbmZ0ZXN0LmQyCisgICAgbWtkaXIgY29uZnRlc3QuZDEgfHwKKyAgICAgIEFDX01TR19FUlJPUihbY2Fubm90IGNyZWF0ZSB0ZW1wb3JhcnkgZGlyZWN0b3J5XSkKKyAgICBBQ19UUllfUlVOKFsKKyMgICAgICAgaW5jbHVkZSA8c3RkaW8uaD4KKyMgICAgICAgaW5jbHVkZSA8c3RkbGliLmg+CisgICAgICAgIGludAorICAgICAgICBtYWluICgpCisgICAgICAgIHsKKyAgICAgICAgICBleGl0IChyZW5hbWUgKCJjb25mdGVzdC5kMS8iLCAiY29uZnRlc3QuZDIiKSA/IDEgOiAwKTsKKyAgICAgICAgfQorICAgICAgXSwKKyAgICAgIGdsX2N2X2Z1bmNfcmVuYW1lX3RyYWlsaW5nX3NsYXNoX2J1Zz1ubywKKyAgICAgIGdsX2N2X2Z1bmNfcmVuYW1lX3RyYWlsaW5nX3NsYXNoX2J1Zz15ZXMsCisgICAgICBkbmwgV2hlbiBjcm9zc2NvbXBpbGluZywgYXNzdW1lIHJlbmFtZSBpcyBicm9rZW4uCisgICAgICBnbF9jdl9mdW5jX3JlbmFtZV90cmFpbGluZ19zbGFzaF9idWc9eWVzKQorCisgICAgICBybSAtcmYgY29uZnRlc3QuZDEgY29uZnRlc3QuZDIKKyAgXSkKKyAgaWYgdGVzdCAkZ2xfY3ZfZnVuY19yZW5hbWVfdHJhaWxpbmdfc2xhc2hfYnVnID0geWVzOyB0aGVuCisgICAgQUNfTElCT0JKKHJlbmFtZSkKKyAgICBBQ19ERUZJTkUocmVuYW1lLCBycGxfcmVuYW1lLAorICAgICAgW0RlZmluZSB0byBycGxfcmVuYW1lIGlmIHRoZSByZXBsYWNlbWVudCBmdW5jdGlvbiBzaG91bGQgYmUgdXNlZC5dKQorICAgIEFDX0RFRklORShSRU5BTUVfVFJBSUxJTkdfU0xBU0hfQlVHLCAxLAorICAgICAgW0RlZmluZSBpZiByZW5hbWUgZG9lcyBub3Qgd29yayBmb3Igc291cmNlIGZpbGUgbmFtZXMgd2l0aCBhIHRyYWlsaW5nCisgICAgICAgc2xhc2gsIGxpa2UgdGhlIG9uZSBmcm9tIFN1bk9TIDQuMS4xX1UxLl0pCisgICAgZ2xfUFJFUkVRX1JFTkFNRQorICBmaQorXSkKKworIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi9yZW5hbWUuYy4KK0FDX0RFRlVOKFtnbF9QUkVSRVFfUkVOQU1FXSwgWzpdKQpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L200L3JwbWF0Y2gubTQgYi9wYXJ0ZWQtMS44LjcvbTQvcnBtYXRjaC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTQ3MWFjCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L200L3JwbWF0Y2gubTQKQEAgLTAsMCArMSwxNiBAQAorIyBycG1hdGNoLm00IHNlcmlhbCA1CitkbmwgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK0FDX0RFRlVOKFtnbF9GVU5DX1JQTUFUQ0hdLAorWworICBBQ19SRVBMQUNFX0ZVTkNTKHJwbWF0Y2gpCisgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfcnBtYXRjaCA9IG5vOyB0aGVuCisgICAgZ2xfUFJFUkVRX1JQTUFUQ0gKKyAgZmkKK10pCisKKyMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvcnBtYXRjaC5jLgorQUNfREVGVU4oW2dsX1BSRVJFUV9SUE1BVENIXSwgWzpdKQpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L200L3NhZmUtcmVhZC5tNCBiL3BhcnRlZC0xLjguNy9tNC9zYWZlLXJlYWQubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E4OWQwYQotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9tNC9zYWZlLXJlYWQubTQKQEAgLTAsMCArMSwxOCBAQAorIyBzYWZlLXJlYWQubTQgc2VyaWFsIDUKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMsIDIwMDUsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworQUNfREVGVU4oW2dsX1NBRkVfUkVBRF0sCitbCisgIEFDX0xJQk9CSihbc2FmZS1yZWFkXSkKKworICBnbF9QUkVSRVFfU0FGRV9SRUFECitdKQorCisjIFByZXJlcXVpc2l0ZXMgb2YgbGliL3NhZmUtcmVhZC5jLgorQUNfREVGVU4oW2dsX1BSRVJFUV9TQUZFX1JFQURdLAorWworICBBQ19SRVFVSVJFKFtndF9UWVBFX1NTSVpFX1RdKQorXSkKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9tNC9zYWZlLXdyaXRlLm00IGIvcGFydGVkLTEuOC43L200L3NhZmUtd3JpdGUubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIxMTlmZgotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9tNC9zYWZlLXdyaXRlLm00CkBAIC0wLDAgKzEsMTggQEAKKyMgc2FmZS13cml0ZS5tNCBzZXJpYWwgMworZG5sIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNSwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitBQ19ERUZVTihbZ2xfU0FGRV9XUklURV0sCitbCisgIEFDX0xJQk9CSihbc2FmZS13cml0ZV0pCisKKyAgZ2xfUFJFUkVRX1NBRkVfV1JJVEUKK10pCisKKyMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvc2FmZS13cml0ZS5jLgorQUNfREVGVU4oW2dsX1BSRVJFUV9TQUZFX1dSSVRFXSwKK1sKKyAgZ2xfUFJFUkVRX1NBRkVfUkVBRAorXSkKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9tNC9zc2l6ZV90Lm00IGIvcGFydGVkLTEuOC43L200L3NzaXplX3QubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVhZWY5MwotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9tNC9zc2l6ZV90Lm00CkBAIC0wLDAgKzEsMjEgQEAKKyMgc3NpemVfdC5tNCBzZXJpYWwgNCAoZ2V0dGV4dC0wLjE1KQorZG5sIENvcHlyaWdodCAoQykgMjAwMS0yMDAzLCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK2RubCBGcm9tIEJydW5vIEhhaWJsZS4KK2RubCBUZXN0IHdoZXRoZXIgc3NpemVfdCBpcyBkZWZpbmVkLgorCitBQ19ERUZVTihbZ3RfVFlQRV9TU0laRV9UXSwKK1sKKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBzc2l6ZV90XSwgW2d0X2N2X3NzaXplX3RdLAorICAgIFtBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHN5cy90eXBlcy5oPl0sCisgICAgICAgW2ludCB4ID0gc2l6ZW9mIChzc2l6ZV90ICopICsgc2l6ZW9mIChzc2l6ZV90KTsKKyAgICAgICAgcmV0dXJuICF4O10sCisgICAgICAgW2d0X2N2X3NzaXplX3Q9eWVzXSwgW2d0X2N2X3NzaXplX3Q9bm9dKV0pCisgIGlmIHRlc3QgJGd0X2N2X3NzaXplX3QgPSBubzsgdGhlbgorICAgIEFDX0RFRklORShbc3NpemVfdF0sIFtpbnRdLAorICAgICAgICAgICAgICBbRGVmaW5lIGFzIGEgc2lnbmVkIHR5cGUgb2YgdGhlIHNhbWUgc2l6ZSBhcyBzaXplX3QuXSkKKyAgZmkKK10pCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbTQvc3RkYXJnLm00IGIvcGFydGVkLTEuOC43L200L3N0ZGFyZy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGU2ODBhCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L200L3N0ZGFyZy5tNApAQCAtMCwwICsxLDQwIEBACisjIHN0ZGFyZy5tNCBzZXJpYWwgMQorZG5sIENvcHlyaWdodCAoQykgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitkbmwgRnJvbSBCcnVubyBIYWlibGUuCitkbmwgUHJvdmlkZSBhIHdvcmtpbmcgdmFfY29weSBpbiBjb21iaW5hdGlvbiB3aXRoIDxzdGRhcmcuaD4uCisKK0FDX0RFRlVOKFtnbF9TVERBUkdfSF0sCitbCisgIEFDX01TR19DSEVDS0lORyhbZm9yIHZhX2NvcHldKQorICBBQ19DQUNIRV9WQUwoW2dsX2N2X2Z1bmNfdmFfY29weV0sIFsKKyAgICBBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHN0ZGFyZy5oPl0sIFsKKyNpZm5kZWYgdmFfY29weQordm9pZCAoKmZ1bmMpICh2YV9saXN0LCB2YV9saXN0KSA9IHZhX2NvcHk7CisjZW5kaWYKK10sCisgICAgICBbZ2xfY3ZfZnVuY192YV9jb3B5PXllc10sIFtnbF9jdl9mdW5jX3ZhX2NvcHk9bm9dKV0pCisgIEFDX01TR19SRVNVTFQoWyRnbF9jdl9mdW5jX3ZhX2NvcHldKQorICBpZiB0ZXN0ICRnbF9jdl9mdW5jX3ZhX2NvcHkgPSBubzsgdGhlbgorICAgICMgUHJvdmlkZSBhIHN1YnN0aXR1dGUsIGVpdGhlciBfX3ZhX2NvcHkgb3IgYXMgYSBzaW1wbGUgYXNzaWdubWVudC4KKyAgICBBQ19DQUNIRV9WQUwoW2dsX2N2X2Z1bmNfX192YV9jb3B5XSwgWworICAgICAgQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxzdGRhcmcuaD5dLCBbCisjaWZuZGVmIF9fdmFfY29weQorZXJyb3IsIGJhaWwgb3V0CisjZW5kaWYKK10sCisgICAgICAgIFtnbF9jdl9mdW5jX19fdmFfY29weT15ZXNdLCBbZ2xfY3ZfZnVuY19fX3ZhX2NvcHk9bm9dKV0pCisgICAgaWYgdGVzdCAkZ2xfY3ZfZnVuY19fX3ZhX2NvcHkgPSB5ZXM7IHRoZW4KKyAgICAgIEFDX0RFRklORShbdmFfY29weV0sIFtfX3ZhX2NvcHldLAorICAgICAgICBbRGVmaW5lIGFzIGEgbWFjcm8gZm9yIGNvcHlpbmcgdmFfbGlzdCB2YXJpYWJsZXMuXSkKKyAgICBlbHNlCisgICAgICBBSF9WRVJCQVRJTShbZ2xfVkFfQ09QWV0sIFsvKiBBIHJlcGxhY2VtZW50IGZvciB2YV9jb3B5LCBpZiBuZWVkZWQuICAqLworI2RlZmluZSBnbF92YV9jb3B5KGEsYikgKChhKSA9IChiKSldKQorICAgICAgQUNfREVGSU5FKFt2YV9jb3B5XSwgW2dsX3ZhX2NvcHldLAorICAgICAgICBbRGVmaW5lIGFzIGEgbWFjcm8gZm9yIGNvcHlpbmcgdmFfbGlzdCB2YXJpYWJsZXMuXSkKKyAgICBmaQorICBmaQorXSkKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9tNC9zdGRib29sLm00IGIvcGFydGVkLTEuOC43L200L3N0ZGJvb2wubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIwNGVjZAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9tNC9zdGRib29sLm00CkBAIC0wLDAgKzEsMTE1IEBACisjIENoZWNrIGZvciBzdGRib29sLmggdGhhdCBjb25mb3JtcyB0byBDOTkuCisKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFByZXBhcmUgZm9yIHN1YnN0aXR1dGluZyA8c3RkYm9vbC5oPiBpZiBpdCBpcyBub3Qgc3VwcG9ydGVkLgorCitBQ19ERUZVTihbQU1fU1REQk9PTF9IXSwKK1sKKyAgQUNfUkVRVUlSRShbQUNfSEVBREVSX1NUREJPT0xdKQorCisgICMgRGVmaW5lIHR3byBhZGRpdGlvbmFsIHZhcmlhYmxlcyB1c2VkIGluIHRoZSBNYWtlZmlsZSBzdWJzdGl0dXRpb24uCisKKyAgaWYgdGVzdCAiJGFjX2N2X2hlYWRlcl9zdGRib29sX2giID0geWVzOyB0aGVuCisgICAgU1REQk9PTF9IPScnCisgIGVsc2UKKyAgICBTVERCT09MX0g9J3N0ZGJvb2wuaCcKKyAgZmkKKyAgQUNfU1VCU1QoW1NUREJPT0xfSF0pCisKKyAgaWYgdGVzdCAiJGFjX2N2X3R5cGVfX0Jvb2wiID0geWVzOyB0aGVuCisgICAgSEFWRV9fQk9PTD0xCisgIGVsc2UKKyAgICBIQVZFX19CT09MPTAKKyAgZmkKKyAgQUNfU1VCU1QoW0hBVkVfX0JPT0xdKQorXSkKKworIyBBTV9TVERCT09MX0ggd2lsbCBiZSByZW5hbWVkIHRvIGdsX1NUREJPT0xfSCBpbiB0aGUgZnV0dXJlLgorQUNfREVGVU4oW2dsX1NUREJPT0xfSF0sIFtBTV9TVERCT09MX0hdKQorCisjIFRoaXMgbWFjcm8gaXMgb25seSBuZWVkZWQgaW4gYXV0b2NvbmYgPD0gMi41OS4gIE5ld2VyIHZlcnNpb25zIG9mIGF1dG9jb25mCisjIGhhdmUgdGhpcyBtYWNybyBidWlsdC1pbi4KKworQUNfREVGVU4oW0FDX0hFQURFUl9TVERCT09MXSwKKyAgW0FDX0NBQ0hFX0NIRUNLKFtmb3Igc3RkYm9vbC5oIHRoYXQgY29uZm9ybXMgdG8gQzk5XSwKKyAgICAgW2FjX2N2X2hlYWRlcl9zdGRib29sX2hdLAorICAgICBbQUNfVFJZX0NPTVBJTEUoCisJWworCSAgI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKwkgICNpZm5kZWYgYm9vbAorCSAgICJlcnJvcjogYm9vbCBpcyBub3QgZGVmaW5lZCIKKwkgICNlbmRpZgorCSAgI2lmbmRlZiBmYWxzZQorCSAgICJlcnJvcjogZmFsc2UgaXMgbm90IGRlZmluZWQiCisJICAjZW5kaWYKKwkgICNpZiBmYWxzZQorCSAgICJlcnJvcjogZmFsc2UgaXMgbm90IDAiCisJICAjZW5kaWYKKwkgICNpZm5kZWYgdHJ1ZQorCSAgICJlcnJvcjogdHJ1ZSBpcyBub3QgZGVmaW5lZCIKKwkgICNlbmRpZgorCSAgI2lmIHRydWUgIT0gMQorCSAgICJlcnJvcjogdHJ1ZSBpcyBub3QgMSIKKwkgICNlbmRpZgorCSAgI2lmbmRlZiBfX2Jvb2xfdHJ1ZV9mYWxzZV9hcmVfZGVmaW5lZAorCSAgICJlcnJvcjogX19ib29sX3RydWVfZmFsc2VfYXJlX2RlZmluZWQgaXMgbm90IGRlZmluZWQiCisJICAjZW5kaWYKKworCSAgc3RydWN0IHMgeyBfQm9vbCBzOiAxOyBfQm9vbCB0OyB9IHM7CisKKwkgIGNoYXIgYVt0cnVlID09IDEgPyAxIDogLTFdOworCSAgY2hhciBiW2ZhbHNlID09IDAgPyAxIDogLTFdOworCSAgY2hhciBjW19fYm9vbF90cnVlX2ZhbHNlX2FyZV9kZWZpbmVkID09IDEgPyAxIDogLTFdOworCSAgY2hhciBkWyhib29sKSAwLjUgPT0gdHJ1ZSA/IDEgOiAtMV07CisJICBib29sIGUgPSAmczsKKwkgIGNoYXIgZlsoX0Jvb2wpIDAuMCA9PSBmYWxzZSA/IDEgOiAtMV07CisJICBjaGFyIGdbdHJ1ZV07CisJICBjaGFyIGhbc2l6ZW9mIChfQm9vbCldOworCSAgY2hhciBpW3NpemVvZiBzLnRdOworCSAgZW51bSB7IGogPSBmYWxzZSwgayA9IHRydWUsIGwgPSBmYWxzZSAqIHRydWUsIG0gPSB0cnVlICogMjU2IH07CisJICBfQm9vbCBuW21dOworCSAgY2hhciBvW3NpemVvZiBuID09IG0gKiBzaXplb2YgblswXSA/IDEgOiAtMV07CisJICBjaGFyIHBbLTEgLSAoX0Jvb2wpIDAgPCAwICYmIC0xIC0gKGJvb2wpIDAgPCAwID8gMSA6IC0xXTsKKwkgICNpZiBkZWZpbmVkIF9feGxjX18gfHwgZGVmaW5lZCBfX0dOVUNfXworCSAgIC8qIENhdGNoIGEgYnVnIGluIElCTSBBSVggeGxjIGNvbXBpbGVyIHZlcnNpb24gNi4wLjAuMAorCSAgICAgIHJlcG9ydGVkIGJ5IEphbWVzIExlbWxleSBvbiAyMDA1LTEwLTA1OyBzZWUKKwkgICAgICBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWNvcmV1dGlscy8yMDA1LTEwL21zZzAwMDg2Lmh0bWwKKwkgICAgICBUaGlzIHRlc3QgaXMgbm90IHF1aXRlIHJpZ2h0LCBzaW5jZSB4bGMgaXMgYWxsb3dlZCB0bworCSAgICAgIHJlamVjdCB0aGlzIHByb2dyYW0sIGFzIHRoZSBpbml0aWFsaXplciBmb3IgeGxjYnVnIGlzCisJICAgICAgbm90IG9uZSBvZiB0aGUgZm9ybXMgdGhhdCBDIHJlcXVpcmVzIHN1cHBvcnQgZm9yLgorCSAgICAgIEhvd2V2ZXIsIGRvaW5nIHRoZSB0ZXN0IHJpZ2h0IHdvdWxkIHJlcXVpcmUgYSBydW4tdGltZQorCSAgICAgIHRlc3QsIGFuZCB0aGF0IHdvdWxkIG1ha2UgY3Jvc3MtY29tcGlsYXRpb24gaGFyZGVyLgorCSAgICAgIExldCB1cyBob3BlIHRoYXQgSUJNIGZpeGVzIHRoZSB4bGMgYnVnLCBhbmQgYWxzbyBhZGRzCisJICAgICAgc3VwcG9ydCBmb3IgdGhpcyBraW5kIG9mIGNvbnN0YW50IGV4cHJlc3Npb24uICBJbiB0aGUKKwkgICAgICBtZWFudGltZSwgdGhpcyB0ZXN0IHdpbGwgcmVqZWN0IHhsYywgd2hpY2ggaXMgT0ssIHNpbmNlCisJICAgICAgb3VyIHN0ZGJvb2wuaCBzdWJzdGl0dXRlIHNob3VsZCBzdWZmaWNlLiAgV2UgYWxzbyB0ZXN0CisJICAgICAgdGhpcyB3aXRoIEdDQywgd2hlcmUgaXQgc2hvdWxkIHdvcmssIHRvIGRldGVjdCBtb3JlCisJICAgICAgcXVpY2tseSB3aGV0aGVyIHNvbWVvbmUgbWVzc2VzIHVwIHRoZSB0ZXN0IGluIHRoZQorCSAgICAgIGZ1dHVyZS4gICovCisJICAgY2hhciBkaWdzW10gPSAiMDEyMzQ1Njc4OSI7CisJICAgaW50IHhsY2J1ZyA9IDEgLyAoJihkaWdzICsgNSlbLTIgKyAoYm9vbCkgMV0gPT0gJmRpZ3NbNF0gPyAxIDogLTEpOworCSAgI2VuZGlmCisJICAvKiBDYXRjaCBhIGJ1ZyBpbiBhbiBIUC1VWCBDIGNvbXBpbGVyLiAgU2VlCisJICAgICBodHRwOi8vZ2NjLmdudS5vcmcvbWwvZ2NjLXBhdGNoZXMvMjAwMy0xMi9tc2cwMjMwMy5odG1sCisJICAgICBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWNvcmV1dGlscy8yMDA1LTExL21zZzAwMTYxLmh0bWwKKwkgICAqLworCSAgX0Jvb2wgcSA9IHRydWU7CisJICBfQm9vbCAqcHEgPSAmcTsKKwldLAorCVsKKwkgICpwcSB8PSBxOworCSAgKnBxIHw9ICEgcTsKKwkgIC8qIFJlZmVyIHRvIGV2ZXJ5IGRlY2xhcmVkIHZhbHVlLCB0byBhdm9pZCBjb21waWxlciBvcHRpbWl6YXRpb25zLiAgKi8KKwkgIHJldHVybiAoIWEgKyAhYiArICFjICsgIWQgKyAhZSArICFmICsgIWcgKyAhaCArICFpICsgISFqICsgIWsgKyAhIWwKKwkJICArICFtICsgIW4gKyAhbyArICFwICsgIXEgKyAhcHEpOworCV0sCisJW2FjX2N2X2hlYWRlcl9zdGRib29sX2g9eWVzXSwKKwlbYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaD1ub10pXSkKKyAgIEFDX0NIRUNLX1RZUEVTKFtfQm9vbF0pCisgICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYm9vbF9oID0geWVzOyB0aGVuCisgICAgIEFDX0RFRklORShIQVZFX1NUREJPT0xfSCwgMSwgW0RlZmluZSB0byAxIGlmIHN0ZGJvb2wuaCBjb25mb3JtcyB0byBDOTkuXSkKKyAgIGZpXSkKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9tNC9zdGRpbnQubTQgYi9wYXJ0ZWQtMS44LjcvbTQvc3RkaW50Lm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1OWNhODUKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbTQvc3RkaW50Lm00CkBAIC0wLDAgKzEsMzY5IEBACisjIHN0ZGludC5tNCBzZXJpYWwgMjMKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiwgMjAwNC0yMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK2RubCBGcm9tIFBhdWwgRWdnZXJ0IGFuZCBCcnVubyBIYWlibGUuCitkbmwgVGVzdCB3aGV0aGVyIDxzdGRpbnQuaD4gaXMgc3VwcG9ydGVkIG9yIG11c3QgYmUgc3Vic3RpdHV0ZWQuCisKK0FDX0RFRlVOKFtnbF9TVERJTlRfSF0sCitbCisgIEFDX1BSRVJFUSgyLjU5KWRubAorCisgIGRubCBDaGVjayBmb3IgbG9uZyBsb25nIGludCBhbmQgdW5zaWduZWQgbG9uZyBsb25nIGludC4KKyAgQUNfUkVRVUlSRShbQUNfVFlQRV9MT05HX0xPTkdfSU5UXSkKKyAgaWYgdGVzdCAkYWNfY3ZfdHlwZV9sb25nX2xvbmdfaW50ID0geWVzOyB0aGVuCisgICAgSEFWRV9MT05HX0xPTkdfSU5UPTEKKyAgZWxzZQorICAgIEhBVkVfTE9OR19MT05HX0lOVD0wCisgIGZpCisgIEFDX1NVQlNUKFtIQVZFX0xPTkdfTE9OR19JTlRdKQorICBBQ19SRVFVSVJFKFtBQ19UWVBFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlRdKQorICBpZiB0ZXN0ICRhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZ19pbnQgPSB5ZXM7IHRoZW4KKyAgICBIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlQ9MQorICBlbHNlCisgICAgSEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UPTAKKyAgZmkKKyAgQUNfU1VCU1QoW0hBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVF0pCisKKyAgZG5sIENoZWNrIGZvciA8aW50dHlwZXMuaD4uCisgIGRubCBBQ19JTkNMVURFU19ERUZBVUxUIGRlZmluZXMgJGFjX2N2X2hlYWRlcl9pbnR0eXBlc19oLgorICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfaW50dHlwZXNfaCA9IHllczsgdGhlbgorICAgIEhBVkVfSU5UVFlQRVNfSD0xCisgIGVsc2UKKyAgICBIQVZFX0lOVFRZUEVTX0g9MAorICBmaQorICBBQ19TVUJTVChbSEFWRV9JTlRUWVBFU19IXSkKKworICBkbmwgQ2hlY2sgZm9yIDxzeXMvdHlwZXMuaD4uCisgIGRubCBBQ19JTkNMVURFU19ERUZBVUxUIGRlZmluZXMgJGFjX2N2X2hlYWRlcl9zeXNfdHlwZXNfaC4KKyAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N5c190eXBlc19oID0geWVzOyB0aGVuCisgICAgSEFWRV9TWVNfVFlQRVNfSD0xCisgIGVsc2UKKyAgICBIQVZFX1NZU19UWVBFU19IPTAKKyAgZmkKKyAgQUNfU1VCU1QoW0hBVkVfU1lTX1RZUEVTX0hdKQorCisgIGRubCBBQ19JTkNMVURFU19ERUZBVUxUIGRlZmluZXMgJGFjX2N2X2hlYWRlcl9zdGRpbnRfaC4KKyAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGludF9oID0geWVzOyB0aGVuCisgICAgZ2xfQUJTT0xVVEVfSEVBREVSKFtzdGRpbnQuaF0pCisgICAgQUJTT0xVVEVfU1RESU5UX0g9XCIkZ2xfY3ZfYWJzb2x1dGVfc3RkaW50X2hcIgorICAgIEhBVkVfU1RESU5UX0g9MQorICBlbHNlCisgICAgQUJTT0xVVEVfU1RESU5UX0g9XCJuby9zdWNoL2ZpbGUvc3RkaW50LmhcIgorICAgIEhBVkVfU1RESU5UX0g9MAorICBmaQorICBBQ19TVUJTVChbQUJTT0xVVEVfU1RESU5UX0hdKQorICBBQ19TVUJTVChbSEFWRV9TVERJTlRfSF0pCisKKyAgZG5sIE5vdyBzZWUgd2hldGhlciB3ZSBuZWVkIGEgc3Vic3RpdHV0ZSA8c3RkaW50Lmg+LiAgVXNlCisgIGRubCBBQlNPTFVURV9TVERJTlRfSCwgbm90IDxzdGRpbnQuaD4sIHNvIHRoYXQgaXQgYWxzbyB3b3JrcyBkdXJpbmcKKyAgZG5sIGEgImNvbmZpZy5zdGF0dXMgLS1yZWNoZWNrIiBpZiBhIHN0ZGludC5oIGhhcyBiZWVuCisgIGRubCBjcmVhdGVkIGluIHRoZSBidWlsZCBkaXJlY3RvcnkuCisgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRpbnRfaCA9IHllczsgdGhlbgorICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHN0ZGludC5oIGNvbmZvcm1zIHRvIEM5OV0sCisgICAgICBbZ2xfY3ZfaGVhZGVyX3dvcmtpbmdfc3RkaW50X2hdLAorICAgICAgW2dsX2N2X2hlYWRlcl93b3JraW5nX3N0ZGludF9oPW5vCisgICAgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgICAgQUNfTEFOR19QUk9HUkFNKFtnbF9TVERJTlRfSU5DTFVERVMKKyAgICAgICAgIFsKKyNkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JPUyAxIC8qIHRvIG1ha2UgaXQgd29yayBhbHNvIGluIEMrKyBtb2RlICovCisjZGVmaW5lIF9fU1REQ19DT05TVEFOVF9NQUNST1MgMSAvKiB0byBtYWtlIGl0IHdvcmsgYWxzbyBpbiBDKysgbW9kZSAqLworI2luY2x1ZGUgQUJTT0xVVEVfU1RESU5UX0gKKyNpZmRlZiBJTlQ4X01BWAoraW50OF90IGExID0gSU5UOF9NQVg7CitpbnQ4X3QgYTFtaW4gPSBJTlQ4X01JTjsKKyNlbmRpZgorI2lmZGVmIElOVDE2X01BWAoraW50MTZfdCBhMiA9IElOVDE2X01BWDsKK2ludDE2X3QgYTJtaW4gPSBJTlQxNl9NSU47CisjZW5kaWYKKyNpZmRlZiBJTlQzMl9NQVgKK2ludDMyX3QgYTMgPSBJTlQzMl9NQVg7CitpbnQzMl90IGEzbWluID0gSU5UMzJfTUlOOworI2VuZGlmCisjaWZkZWYgSU5UNjRfTUFYCitpbnQ2NF90IGE0ID0gSU5UNjRfTUFYOworaW50NjRfdCBhNG1pbiA9IElOVDY0X01JTjsKKyNlbmRpZgorI2lmZGVmIFVJTlQ4X01BWAordWludDhfdCBiMSA9IFVJTlQ4X01BWDsKKyNlbHNlCit0eXBlZGVmIGludCBiMVsodW5zaWduZWQgY2hhcikgLTEgIT0gMjU1ID8gMSA6IC0xXTsKKyNlbmRpZgorI2lmZGVmIFVJTlQxNl9NQVgKK3VpbnQxNl90IGIyID0gVUlOVDE2X01BWDsKKyNlbmRpZgorI2lmZGVmIFVJTlQzMl9NQVgKK3VpbnQzMl90IGIzID0gVUlOVDMyX01BWDsKKyNlbmRpZgorI2lmZGVmIFVJTlQ2NF9NQVgKK3VpbnQ2NF90IGI0ID0gVUlOVDY0X01BWDsKKyNlbmRpZgoraW50X2xlYXN0OF90IGMxID0gSU5UOF9DICgweDdmKTsKK2ludF9sZWFzdDhfdCBjMW1heCA9IElOVF9MRUFTVDhfTUFYOworaW50X2xlYXN0OF90IGMxbWluID0gSU5UX0xFQVNUOF9NSU47CitpbnRfbGVhc3QxNl90IGMyID0gSU5UMTZfQyAoMHg3ZmZmKTsKK2ludF9sZWFzdDE2X3QgYzJtYXggPSBJTlRfTEVBU1QxNl9NQVg7CitpbnRfbGVhc3QxNl90IGMybWluID0gSU5UX0xFQVNUMTZfTUlOOworaW50X2xlYXN0MzJfdCBjMyA9IElOVDMyX0MgKDB4N2ZmZmZmZmYpOworaW50X2xlYXN0MzJfdCBjM21heCA9IElOVF9MRUFTVDMyX01BWDsKK2ludF9sZWFzdDMyX3QgYzNtaW4gPSBJTlRfTEVBU1QzMl9NSU47CitpbnRfbGVhc3Q2NF90IGM0ID0gSU5UNjRfQyAoMHg3ZmZmZmZmZmZmZmZmZmZmKTsKK2ludF9sZWFzdDY0X3QgYzRtYXggPSBJTlRfTEVBU1Q2NF9NQVg7CitpbnRfbGVhc3Q2NF90IGM0bWluID0gSU5UX0xFQVNUNjRfTUlOOwordWludF9sZWFzdDhfdCBkMSA9IFVJTlQ4X0MgKDB4ZmYpOwordWludF9sZWFzdDhfdCBkMW1heCA9IFVJTlRfTEVBU1Q4X01BWDsKK3VpbnRfbGVhc3QxNl90IGQyID0gVUlOVDE2X0MgKDB4ZmZmZik7Cit1aW50X2xlYXN0MTZfdCBkMm1heCA9IFVJTlRfTEVBU1QxNl9NQVg7Cit1aW50X2xlYXN0MzJfdCBkMyA9IFVJTlQzMl9DICgweGZmZmZmZmZmKTsKK3VpbnRfbGVhc3QzMl90IGQzbWF4ID0gVUlOVF9MRUFTVDMyX01BWDsKK3VpbnRfbGVhc3Q2NF90IGQ0ID0gVUlOVDY0X0MgKDB4ZmZmZmZmZmZmZmZmZmZmZik7Cit1aW50X2xlYXN0NjRfdCBkNG1heCA9IFVJTlRfTEVBU1Q2NF9NQVg7CitpbnRfZmFzdDhfdCBlMSA9IElOVF9GQVNUOF9NQVg7CitpbnRfZmFzdDhfdCBlMW1pbiA9IElOVF9GQVNUOF9NSU47CitpbnRfZmFzdDE2X3QgZTIgPSBJTlRfRkFTVDE2X01BWDsKK2ludF9mYXN0MTZfdCBlMm1pbiA9IElOVF9GQVNUMTZfTUlOOworaW50X2Zhc3QzMl90IGUzID0gSU5UX0ZBU1QzMl9NQVg7CitpbnRfZmFzdDMyX3QgZTNtaW4gPSBJTlRfRkFTVDMyX01JTjsKK2ludF9mYXN0NjRfdCBlNCA9IElOVF9GQVNUNjRfTUFYOworaW50X2Zhc3Q2NF90IGU0bWluID0gSU5UX0ZBU1Q2NF9NSU47Cit1aW50X2Zhc3Q4X3QgZjEgPSBVSU5UX0ZBU1Q4X01BWDsKK3VpbnRfZmFzdDE2X3QgZjIgPSBVSU5UX0ZBU1QxNl9NQVg7Cit1aW50X2Zhc3QzMl90IGYzID0gVUlOVF9GQVNUMzJfTUFYOwordWludF9mYXN0NjRfdCBmNCA9IFVJTlRfRkFTVDY0X01BWDsKKyNpZmRlZiBJTlRQVFJfTUFYCitpbnRwdHJfdCBnID0gSU5UUFRSX01BWDsKK2ludHB0cl90IGdtaW4gPSBJTlRQVFJfTUlOOworI2VuZGlmCisjaWZkZWYgVUlOVFBUUl9NQVgKK3VpbnRwdHJfdCBoID0gVUlOVFBUUl9NQVg7CisjZW5kaWYKK2ludG1heF90IGkgPSBJTlRNQVhfTUFYOwordWludG1heF90IGogPSBVSU5UTUFYX01BWDsKK3N0cnVjdCBzIHsKKyAgaW50IGNoZWNrX1BUUkRJRkY6IFBUUkRJRkZfTUlOIDwgKHB0cmRpZmZfdCkgMCAmJiAocHRyZGlmZl90KSAwIDwgUFRSRElGRl9NQVggPyAxIDogLTE7CisgIGludCBjaGVja19TSUdfQVRPTUlDOiBTSUdfQVRPTUlDX01JTiA8PSAoc2lnX2F0b21pY190KSAwICYmIChzaWdfYXRvbWljX3QpIDAgPCBTSUdfQVRPTUlDX01BWCA/IDEgOiAtMTsKKyAgaW50IGNoZWNrX1NJWkU6IChzaXplX3QpIDAgPCBTSVpFX01BWCA/IDEgOiAtMTsKKyAgaW50IGNoZWNrX1dDSEFSOiBXQ0hBUl9NSU4gPD0gKHdjaGFyX3QpIDAgJiYgKHdjaGFyX3QpIDAgPCBXQ0hBUl9NQVggPyAxIDogLTE7CisgIGludCBjaGVja19XSU5UOiBXSU5UX01JTiA8PSAod2ludF90KSAwICYmICh3aW50X3QpIDAgPCBXSU5UX01BWCA/IDEgOiAtMTsKKworICAvKiBEZXRlY3QgYnVncyBpbiBnbGliYyAyLjQgYW5kIFNvbGFyaXMgMTAgc3RkaW50LmgsIGFtb25nIG90aGVycy4gICovCisgIGludCBjaGVja19VSU5UOF9DOgorICAgICAgICAoLTEgPCBVSU5UOF9DICgwKSkgPT0gKC0xIDwgKHVpbnRfbGVhc3Q4X3QpIDApID8gMSA6IC0xOworICBpbnQgY2hlY2tfVUlOVDE2X0M6CisgICAgICAgICgtMSA8IFVJTlQxNl9DICgwKSkgPT0gKC0xIDwgKHVpbnRfbGVhc3QxNl90KSAwKSA/IDEgOiAtMTsKKworICAvKiBEZXRlY3QgYnVncyBpbiBPcGVuQlNEIDMuOSBzdGRpbnQuaC4gICovCisjaWZkZWYgVUlOVDhfTUFYCisgIGludCBjaGVja191aW50ODogKHVpbnQ4X3QpIC0xID09IFVJTlQ4X01BWCA/IDEgOiAtMTsKKyNlbmRpZgorI2lmZGVmIFVJTlQxNl9NQVgKKyAgaW50IGNoZWNrX3VpbnQxNjogKHVpbnQxNl90KSAtMSA9PSBVSU5UMTZfTUFYID8gMSA6IC0xOworI2VuZGlmCisjaWZkZWYgVUlOVDMyX01BWAorICBpbnQgY2hlY2tfdWludDMyOiAodWludDMyX3QpIC0xID09IFVJTlQzMl9NQVggPyAxIDogLTE7CisjZW5kaWYKKyNpZmRlZiBVSU5UNjRfTUFYCisgIGludCBjaGVja191aW50NjQ6ICh1aW50NjRfdCkgLTEgPT0gVUlOVDY0X01BWCA/IDEgOiAtMTsKKyNlbmRpZgorICBpbnQgY2hlY2tfdWludF9sZWFzdDg6ICh1aW50X2xlYXN0OF90KSAtMSA9PSBVSU5UX0xFQVNUOF9NQVggPyAxIDogLTE7CisgIGludCBjaGVja191aW50X2xlYXN0MTY6ICh1aW50X2xlYXN0MTZfdCkgLTEgPT0gVUlOVF9MRUFTVDE2X01BWCA/IDEgOiAtMTsKKyAgaW50IGNoZWNrX3VpbnRfbGVhc3QzMjogKHVpbnRfbGVhc3QzMl90KSAtMSA9PSBVSU5UX0xFQVNUMzJfTUFYID8gMSA6IC0xOworICBpbnQgY2hlY2tfdWludF9sZWFzdDY0OiAodWludF9sZWFzdDY0X3QpIC0xID09IFVJTlRfTEVBU1Q2NF9NQVggPyAxIDogLTE7CisgIGludCBjaGVja191aW50X2Zhc3Q4OiAodWludF9mYXN0OF90KSAtMSA9PSBVSU5UX0ZBU1Q4X01BWCA/IDEgOiAtMTsKKyAgaW50IGNoZWNrX3VpbnRfZmFzdDE2OiAodWludF9mYXN0MTZfdCkgLTEgPT0gVUlOVF9GQVNUMTZfTUFYID8gMSA6IC0xOworICBpbnQgY2hlY2tfdWludF9mYXN0MzI6ICh1aW50X2Zhc3QzMl90KSAtMSA9PSBVSU5UX0ZBU1QzMl9NQVggPyAxIDogLTE7CisgIGludCBjaGVja191aW50X2Zhc3Q2NDogKHVpbnRfZmFzdDY0X3QpIC0xID09IFVJTlRfRkFTVDY0X01BWCA/IDEgOiAtMTsKKyAgaW50IGNoZWNrX3VpbnRwdHI6ICh1aW50cHRyX3QpIC0xID09IFVJTlRQVFJfTUFYID8gMSA6IC0xOworICBpbnQgY2hlY2tfdWludG1heDogKHVpbnRtYXhfdCkgLTEgPT0gVUlOVE1BWF9NQVggPyAxIDogLTE7CisgIGludCBjaGVja19zaXplOiAoc2l6ZV90KSAtMSA9PSBTSVpFX01BWCA/IDEgOiAtMTsKK307CisgICAgICAgICBdXSldLAorICAgICAgICAgW2dsX2N2X2hlYWRlcl93b3JraW5nX3N0ZGludF9oPXllc10pXSkKKyAgZmkKKyAgaWYgdGVzdCAiJGdsX2N2X2hlYWRlcl93b3JraW5nX3N0ZGludF9oIiA9IHllczsgdGhlbgorICAgIFNURElOVF9IPQorICBlbHNlCisgICAgZG5sIENoZWNrIGZvciA8c3lzL2ludHR5cGVzLmg+LCBhbmQgZm9yCisgICAgZG5sIDxzeXMvYml0eXBlcy5oPiAodXNlZCBpbiBMaW51eCBsaWJjNCA+PSA0LjYuNyBhbmQgbGliYzUpLgorICAgIEFDX0NIRUNLX0hFQURFUlMoW3N5cy9pbnR0eXBlcy5oIHN5cy9iaXR5cGVzLmhdKQorICAgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zeXNfaW50dHlwZXNfaCA9IHllczsgdGhlbgorICAgICAgSEFWRV9TWVNfSU5UVFlQRVNfSD0xCisgICAgZWxzZQorICAgICAgSEFWRV9TWVNfSU5UVFlQRVNfSD0wCisgICAgZmkKKyAgICBBQ19TVUJTVChbSEFWRV9TWVNfSU5UVFlQRVNfSF0pCisgICAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N5c19iaXR5cGVzX2ggPSB5ZXM7IHRoZW4KKyAgICAgIEhBVkVfU1lTX0JJVFlQRVNfSD0xCisgICAgZWxzZQorICAgICAgSEFWRV9TWVNfQklUWVBFU19IPTAKKyAgICBmaQorICAgIEFDX1NVQlNUKFtIQVZFX1NZU19CSVRZUEVTX0hdKQorCisgICAgZ2xfU1RESU5UX1RZUEVfUFJPUEVSVElFUworICAgIFNURElOVF9IPXN0ZGludC5oCisgIGZpCisgIEFDX1NVQlNUKFNURElOVF9IKQorXSkKKworZG5sIGdsX1NURElOVF9CSVRTSVpFT0YoVFlQRVMsIElOQ0xVREVTKQorZG5sIERldGVybWluZSB0aGUgc2l6ZSBvZiBlYWNoIG9mIHRoZSBnaXZlbiB0eXBlcyBpbiBiaXRzLgorQUNfREVGVU4oW2dsX1NURElOVF9CSVRTSVpFT0ZdLAorWworICBkbmwgVXNlIGEgc2hlbGwgbG9vcCwgdG8gYXZvaWQgYmxvYXRpbmcgY29uZmlndXJlLCBhbmQKKyAgZG5sIC0gZXh0cmEgQUhfVEVNUExBVEUgY2FsbHMsIHNvIHRoYXQgYXV0b2hlYWRlciBrbm93cyB3aGF0IHRvIHB1dCBpbnRvCisgIGRubCAgIGNvbmZpZy5oLmluLAorICBkbmwgLSBleHRyYSBBQ19TVUJTVCBjYWxscywgc28gdGhhdCB0aGUgcmlnaHQgc3Vic3RpdHV0aW9ucyBhcmUgbWFkZS4KKyAgQUNfRk9SRUFDSChbZ2x0eXBlXSwgWyQxXSwKKyAgICBbQUhfVEVNUExBVEUoW0JJVFNJWkVPRl9ddHJhbnNsaXQoZ2x0eXBlLFthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiBdLFtBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9dKSwKKyAgICAgICBbRGVmaW5lIHRvIHRoZSBudW1iZXIgb2YgYml0cyBpbiB0eXBlICddZ2x0eXBlWycuXSldKQorICBmb3IgZ2x0eXBlIGluICQxIDsgZG8KKyAgICBBQ19DQUNIRV9DSEVDSyhbZm9yIGJpdCBzaXplIG9mICRnbHR5cGVdLCBbZ2xfY3ZfYml0c2l6ZW9mXyR7Z2x0eXBlfV0sCisgICAgICBbQUNfQ09NUFVURV9JTlQoW3Jlc3VsdF0sIFtzaXplb2YgKCRnbHR5cGUpICogQ0hBUl9CSVRdLAorICAgICAgICAgWyQyCisjaW5jbHVkZSA8bGltaXRzLmg+XSwgW3Jlc3VsdD11bmtub3duXSkKKyAgICAgICBldmFsIGdsX2N2X2JpdHNpemVvZl8ke2dsdHlwZX09XCRyZXN1bHQKKyAgICAgIF0pCisgICAgZXZhbCByZXN1bHQ9XCRnbF9jdl9iaXRzaXplb2ZfJHtnbHR5cGV9CisgICAgaWYgdGVzdCAkcmVzdWx0ID0gdW5rbm93bjsgdGhlbgorICAgICAgZG5sIFVzZSBhIG5vbmVtcHR5IGRlZmF1bHQsIGJlY2F1c2Ugc29tZSBjb21waWxlcnMsIHN1Y2ggYXMgSVJJWCA1IGNjLAorICAgICAgZG5sIGRvIGEgc3ludGF4IGNoZWNrIGV2ZW4gb24gdW51c2VkICNpZiBjb25kaXRpb25zIGFuZCBnaXZlIGFuIGVycm9yCisgICAgICBkbmwgb24gdmFsaWQgQyBjb2RlIGxpa2UgdGhpczoKKyAgICAgIGRubCAgICNpZiAwCisgICAgICBkbmwgICAjIGlmICA+IDMyCisgICAgICBkbmwgICAjIGVuZGlmCisgICAgICBkbmwgICAjZW5kaWYKKyAgICAgIHJlc3VsdD0wCisgICAgZmkKKyAgICBHTFRZUEU9YGVjaG8gIiRnbHR5cGUiIHwgdHIgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6ICcgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaXydgCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKFtCSVRTSVpFT0ZfJHtHTFRZUEV9XSwgWyRyZXN1bHRdKQorICAgIGV2YWwgQklUU0laRU9GXyR7R0xUWVBFfT1cJHJlc3VsdAorICBkb25lCisgIEFDX0ZPUkVBQ0goW2dsdHlwZV0sIFskMV0sCisgICAgW0FDX1NVQlNUKFtCSVRTSVpFT0ZfXXRyYW5zbGl0KGdsdHlwZSxbYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXogXSxbQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfXSkpXSkKK10pCisKK2RubCBnbF9DSEVDS19UWVBFU19TSUdORUQoVFlQRVMsIElOQ0xVREVTKQorZG5sIERldGVybWluZSB0aGUgc2lnbmVkbmVzcyBvZiBlYWNoIG9mIHRoZSBnaXZlbiB0eXBlcy4KK2RubCBEZWZpbmUgSEFWRV9TSUdORURfVFlQRSBpZiB0eXBlIGlzIHNpZ25lZC4KK0FDX0RFRlVOKFtnbF9DSEVDS19UWVBFU19TSUdORURdLAorWworICBkbmwgVXNlIGEgc2hlbGwgbG9vcCwgdG8gYXZvaWQgYmxvYXRpbmcgY29uZmlndXJlLCBhbmQKKyAgZG5sIC0gZXh0cmEgQUhfVEVNUExBVEUgY2FsbHMsIHNvIHRoYXQgYXV0b2hlYWRlciBrbm93cyB3aGF0IHRvIHB1dCBpbnRvCisgIGRubCAgIGNvbmZpZy5oLmluLAorICBkbmwgLSBleHRyYSBBQ19TVUJTVCBjYWxscywgc28gdGhhdCB0aGUgcmlnaHQgc3Vic3RpdHV0aW9ucyBhcmUgbWFkZS4KKyAgQUNfRk9SRUFDSChbZ2x0eXBlXSwgWyQxXSwKKyAgICBbQUhfVEVNUExBVEUoW0hBVkVfU0lHTkVEX110cmFuc2xpdChnbHR5cGUsW2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IF0sW0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX10pLAorICAgICAgIFtEZWZpbmUgdG8gMSBpZiAnXWdsdHlwZVsnIGlzIGEgc2lnbmVkIGludGVnZXIgdHlwZS5dKV0pCisgIGZvciBnbHR5cGUgaW4gJDEgOyBkbworICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyICRnbHR5cGUgaXMgc2lnbmVkXSwgW2dsX2N2X3R5cGVfJHtnbHR5cGV9X3NpZ25lZF0sCisgICAgICBbQUNfQ09NUElMRV9JRkVMU0UoCisgICAgICAgICBbQUNfTEFOR19QUk9HUkFNKFskMlsKKyAgICAgICAgICAgIGludCB2ZXJpZnlbMiAqICgoJGdsdHlwZSkgLTEgPCAoJGdsdHlwZSkgMCkgLSAxXTtdXSldLAorICAgICAgICAgcmVzdWx0PXllcywgcmVzdWx0PW5vKQorICAgICAgIGV2YWwgZ2xfY3ZfdHlwZV8ke2dsdHlwZX1fc2lnbmVkPVwkcmVzdWx0CisgICAgICBdKQorICAgIGV2YWwgcmVzdWx0PVwkZ2xfY3ZfdHlwZV8ke2dsdHlwZX1fc2lnbmVkCisgICAgR0xUWVBFPWBlY2hvICRnbHR5cGUgfCB0ciAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXogJyAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfJ2AKKyAgICBpZiB0ZXN0ICIkcmVzdWx0IiA9IHllczsgdGhlbgorICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFtIQVZFX1NJR05FRF8ke0dMVFlQRX1dLCAxKQorICAgICAgZXZhbCBIQVZFX1NJR05FRF8ke0dMVFlQRX09MQorICAgIGVsc2UKKyAgICAgIGV2YWwgSEFWRV9TSUdORURfJHtHTFRZUEV9PTAKKyAgICBmaQorICBkb25lCisgIEFDX0ZPUkVBQ0goW2dsdHlwZV0sIFskMV0sCisgICAgW0FDX1NVQlNUKFtIQVZFX1NJR05FRF9ddHJhbnNsaXQoZ2x0eXBlLFthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiBdLFtBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9dKSldKQorXSkKKworZG5sIGdsX0lOVEVHRVJfVFlQRV9TVUZGSVgoVFlQRVMsIElOQ0xVREVTKQorZG5sIERldGVybWluZSB0aGUgc3VmZml4IHRvIHVzZSBmb3IgaW50ZWdlciBjb25zdGFudHMgb2YgdGhlIGdpdmVuIHR5cGVzLgorZG5sIERlZmluZSB0X1NVRkZJWCBmb3IgZWFjaCBzdWNoIHR5cGUuCitBQ19ERUZVTihbZ2xfSU5URUdFUl9UWVBFX1NVRkZJWF0sCitbCisgIGRubCBVc2UgYSBzaGVsbCBsb29wLCB0byBhdm9pZCBibG9hdGluZyBjb25maWd1cmUsIGFuZAorICBkbmwgLSBleHRyYSBBSF9URU1QTEFURSBjYWxscywgc28gdGhhdCBhdXRvaGVhZGVyIGtub3dzIHdoYXQgdG8gcHV0IGludG8KKyAgZG5sICAgY29uZmlnLmguaW4sCisgIGRubCAtIGV4dHJhIEFDX1NVQlNUIGNhbGxzLCBzbyB0aGF0IHRoZSByaWdodCBzdWJzdGl0dXRpb25zIGFyZSBtYWRlLgorICBBQ19GT1JFQUNIKFtnbHR5cGVdLCBbJDFdLAorICAgIFtBSF9URU1QTEFURSh0cmFuc2xpdChnbHR5cGUsW2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IF0sW0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX10pW19TVUZGSVhdLAorICAgICAgIFtEZWZpbmUgdG8gbCwgbGwsIHUsIHVsLCB1bGwsIGV0Yy4sIGFzIHN1aXRhYmxlIGZvcgorICAgICAgICBjb25zdGFudHMgb2YgdHlwZSAnXWdsdHlwZVsnLl0pXSkKKyAgZm9yIGdsdHlwZSBpbiAkMSA7IGRvCisgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciAkZ2x0eXBlIGludGVnZXIgbGl0ZXJhbCBzdWZmaXhdLAorICAgICAgW2dsX2N2X3R5cGVfJHtnbHR5cGV9X3N1ZmZpeF0sCisgICAgICBbZXZhbCBnbF9jdl90eXBlXyR7Z2x0eXBlfV9zdWZmaXg9bm8KKyAgICAgICBldmFsIHJlc3VsdD1cJGdsX2N2X3R5cGVfJHtnbHR5cGV9X3NpZ25lZAorICAgICAgIGlmIHRlc3QgIiRyZXN1bHQiID0geWVzOyB0aGVuCisgICAgICAgICBnbHN1ZnU9CisgICAgICAgZWxzZQorICAgICAgICAgZ2xzdWZ1PXUKKyAgICAgICBmaQorICAgICAgIGZvciBnbHN1ZiBpbiAiJGdsc3VmdSIgJHtnbHN1ZnV9bCAke2dsc3VmdX1sbCAke2dsc3VmdX1pNjQ7IGRvCisgICAgICAgICBjYXNlICRnbHN1ZiBpbgorICAgICAgICAgICAnJykgIGdsdHlwZTE9J2ludCc7OworICAgICAgICAgICBsKQlnbHR5cGUxPSdsb25nIGludCc7OworICAgICAgICAgICBsbCkJZ2x0eXBlMT0nbG9uZyBsb25nIGludCc7OworICAgICAgICAgICBpNjQpCWdsdHlwZTE9J19faW50NjQnOzsKKyAgICAgICAgICAgdSkJZ2x0eXBlMT0ndW5zaWduZWQgaW50Jzs7CisgICAgICAgICAgIHVsKQlnbHR5cGUxPSd1bnNpZ25lZCBsb25nIGludCc7OworICAgICAgICAgICB1bGwpCWdsdHlwZTE9J3Vuc2lnbmVkIGxvbmcgbG9uZyBpbnQnOzsKKyAgICAgICAgICAgdWk2NClnbHR5cGUxPSd1bnNpZ25lZCBfX2ludDY0Jzs7CisgICAgICAgICBlc2FjCisgICAgICAgICBBQ19DT01QSUxFX0lGRUxTRSgKKyAgICAgICAgICAgW0FDX0xBTkdfUFJPR1JBTShbJDIKKyAgICAgICAgICAgICAgZXh0ZXJuICRnbHR5cGUgZm9vOworICAgICAgICAgICAgICBleHRlcm4gJGdsdHlwZTEgZm9vO10pXSwKKyAgICAgICAgICAgW2V2YWwgZ2xfY3ZfdHlwZV8ke2dsdHlwZX1fc3VmZml4PVwkZ2xzdWZdKQorICAgICAgICAgZXZhbCByZXN1bHQ9XCRnbF9jdl90eXBlXyR7Z2x0eXBlfV9zdWZmaXgKKyAgICAgICAgIHRlc3QgIiRyZXN1bHQiICE9IG5vICYmIGJyZWFrCisgICAgICAgZG9uZV0pCisgICAgR0xUWVBFPWBlY2hvICRnbHR5cGUgfCB0ciAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXogJyAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfJ2AKKyAgICBldmFsIHJlc3VsdD1cJGdsX2N2X3R5cGVfJHtnbHR5cGV9X3N1ZmZpeAorICAgIHRlc3QgIiRyZXN1bHQiID0gbm8gJiYgcmVzdWx0PQorICAgIGV2YWwgJHtHTFRZUEV9X1NVRkZJWD1cJHJlc3VsdAorICAgIEFDX0RFRklORV9VTlFVT1RFRChbJHtHTFRZUEV9X1NVRkZJWF0sICRyZXN1bHQpCisgIGRvbmUKKyAgQUNfRk9SRUFDSChbZ2x0eXBlXSwgWyQxXSwKKyAgICBbQUNfU1VCU1QodHJhbnNsaXQoZ2x0eXBlLFthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiBdLFtBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9dKVtfU1VGRklYXSldKQorXSkKKworZG5sIGdsX1NURElOVF9JTkNMVURFUworQUNfREVGVU4oW2dsX1NURElOVF9JTkNMVURFU10sCitbWworICAvKiBCU0QvT1MgNC4wLjEgaGFzIGEgYnVnOiA8c3RkZGVmLmg+LCA8c3RkaW8uaD4gYW5kIDx0aW1lLmg+IG11c3QgYmUKKyAgICAgaW5jbHVkZWQgYmVmb3JlIDx3Y2hhci5oPi4gICovCisgICNpbmNsdWRlIDxzdGRkZWYuaD4KKyAgI2luY2x1ZGUgPHNpZ25hbC5oPgorICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgI2luY2x1ZGUgPHRpbWUuaD4KKyAgI2luY2x1ZGUgPHdjaGFyLmg+CitdXSkKKworZG5sIGdsX1NURElOVF9UWVBFX1BST1BFUlRJRVMKK2RubCBDb21wdXRlIEhBVkVfU0lHTkVEX3QsIEJJVFNJWkVPRl90IGFuZCB0X1NVRkZJWCwgZm9yIGFsbCB0aGUgdHlwZXMgdAorZG5sIG9mIGludGVyZXN0IHRvIHN0ZGludF8uaC4KK0FDX0RFRlVOKFtnbF9TVERJTlRfVFlQRV9QUk9QRVJUSUVTXSwKK1sKKyAgZ2xfU1RESU5UX0JJVFNJWkVPRihbcHRyZGlmZl90IHNpZ19hdG9taWNfdCBzaXplX3Qgd2NoYXJfdCB3aW50X3RdLAorICAgIFtnbF9TVERJTlRfSU5DTFVERVNdKQorICBnbF9DSEVDS19UWVBFU19TSUdORUQoW3NpZ19hdG9taWNfdCB3Y2hhcl90IHdpbnRfdF0sCisgICAgW2dsX1NURElOVF9JTkNMVURFU10pCisgIGdsX2N2X3R5cGVfcHRyZGlmZl90X3NpZ25lZD15ZXMKKyAgZ2xfY3ZfdHlwZV9zaXplX3Rfc2lnbmVkPW5vCisgIGdsX0lOVEVHRVJfVFlQRV9TVUZGSVgoW3B0cmRpZmZfdCBzaWdfYXRvbWljX3Qgc2l6ZV90IHdjaGFyX3Qgd2ludF90XSwKKyAgICBbZ2xfU1RESU5UX0lOQ0xVREVTXSkKK10pCisKK2RubCBBdXRvY29uZiA+PSAyLjYxIGhhcyBBQ19DT01QVVRFX0lOVCBidWlsdC1pbi4KK2RubCBSZW1vdmUgdGhpcyB3aGVuIHdlIGNhbiBhc3N1bWUgYXV0b2NvbmYgPj0gMi42MS4KK200X2lmZGVmKFtBQ19DT01QVVRFX0lOVF0sIFtdLCBbCisgIEFDX0RFRlVOKFtBQ19DT01QVVRFX0lOVF0sIFtfQUNfQ09NUFVURV9JTlQoWyQyXSxbJDFdLFskM10sWyQ0XSldKQorXSkKKworIyBIZXkgRW1hY3MhCisjIExvY2FsIFZhcmlhYmxlczoKKyMgaW5kZW50LXRhYnMtbW9kZTogbmlsCisjIEVuZDoKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9tNC9zdGRsaWJfaC5tNCBiL3BhcnRlZC0xLjguNy9tNC9zdGRsaWJfaC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDZhNWYwCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L200L3N0ZGxpYl9oLm00CkBAIC0wLDAgKzEsMzEgQEAKKyMgc3RkbGliX2gubTQgc2VyaWFsIDEKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworQUNfREVGVU4oW2dsX1NURExJQl9IXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfU1RETElCX0hfREVGQVVMVFNdKQorICBnbF9BQlNPTFVURV9IRUFERVIoW3N0ZGxpYi5oXSkKKyAgQUJTT0xVVEVfU1RETElCX0g9XCIkZ2xfY3ZfYWJzb2x1dGVfc3RkbGliX2hcIgorICBBQ19TVUJTVChbQUJTT0xVVEVfU1RETElCX0hdKQorXSkKKworQUNfREVGVU4oW2dsX1NURExJQl9NT0RVTEVfSU5ESUNBVE9SXSwKK1sKKyAgZG5sIFVzZSBBQ19SRVFVSVJFIGhlcmUsIHNvIHRoYXQgdGhlIGRlZmF1bHQgc2V0dGluZ3MgYXJlIGV4cGFuZGVkIG9uY2Ugb25seS4KKyAgQUNfUkVRVUlSRShbZ2xfU1RETElCX0hfREVGQVVMVFNdKQorICBHTlVMSUJfW11tNF90cmFuc2xpdChbJDFdLFthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLV0sW0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fXSk9MQorXSkKKworQUNfREVGVU4oW2dsX1NURExJQl9IX0RFRkFVTFRTXSwKK1sKKyAgR05VTElCX0dFVFNVQk9QVD0wOyBBQ19TVUJTVChbR05VTElCX0dFVFNVQk9QVF0pCisgIEdOVUxJQl9NS0RURU1QPTA7ICAgQUNfU1VCU1QoW0dOVUxJQl9NS0RURU1QXSkKKyAgR05VTElCX01LU1RFTVA9MDsgICBBQ19TVUJTVChbR05VTElCX01LU1RFTVBdKQorICBkbmwgQXNzdW1lIHByb3BlciBHTlUgYmVoYXZpb3IgdW5sZXNzIGFub3RoZXIgbW9kdWxlIHNheXMgb3RoZXJ3aXNlLgorICBIQVZFX0dFVFNVQk9QVD0xOyAgIEFDX1NVQlNUKFtIQVZFX0dFVFNVQk9QVF0pCisgIEhBVkVfTUtEVEVNUD0xOyAgICAgQUNfU1VCU1QoW0hBVkVfTUtEVEVNUF0pCisgIFJFUExBQ0VfTUtTVEVNUD0wOyAgQUNfU1VCU1QoW1JFUExBQ0VfTUtTVEVNUF0pCitdKQpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L200L3N0cmNzcG4ubTQgYi9wYXJ0ZWQtMS44LjcvbTQvc3RyY3Nwbi5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTY1MDA0Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L200L3N0cmNzcG4ubTQKQEAgLTAsMCArMSwxNiBAQAorIyBzdHJjc3BuLm00IHNlcmlhbCAyCitkbmwgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworQUNfREVGVU4oW2dsX0ZVTkNfU1RSQ1NQTl0sCitbCisgIEFDX1JFUExBQ0VfRlVOQ1Moc3RyY3NwbikKKyAgaWYgdGVzdCAkYWNfY3ZfZnVuY19zdHJjc3BuID0gbm87IHRoZW4KKyAgICBnbF9QUkVSRVFfU1RSQ1NQTgorICBmaQorXSkKKworIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi9zdHJjc3BuLmMuCitBQ19ERUZVTihbZ2xfUFJFUkVRX1NUUkNTUE5dLCBbOl0pCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbTQvc3RyaW5nX2gubTQgYi9wYXJ0ZWQtMS44LjcvbTQvc3RyaW5nX2gubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjcwNmQ0OQotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9tNC9zdHJpbmdfaC5tNApAQCAtMCwwICsxLDc4IEBACisjIENvbmZpZ3VyZSBhIEdOVS1saWtlIHJlcGxhY2VtZW50IGZvciA8c3RyaW5nLmg+LgorCisjIENvcHlyaWdodCAoQykgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFdyaXR0ZW4gYnkgUGF1bCBFZ2dlcnQuCisKK0FDX0RFRlVOKFtnbF9IRUFERVJfU1RSSU5HX0hdLAorWworICBkbmwgVXNlIEFDX1JFUVVJUkUgaGVyZSwgc28gdGhhdCB0aGUgZGVmYXVsdCBiZWhhdmlvciBiZWxvdyBpcyBleHBhbmRlZAorICBkbmwgb25jZSBvbmx5LCBiZWZvcmUgYWxsIHN0YXRlbWVudHMgdGhhdCBvY2N1ciBpbiBvdGhlciBtYWNyb3MuCisgIEFDX1JFUVVJUkUoW2dsX0hFQURFUl9TVFJJTkdfSF9CT0RZXSkKK10pCisKK0FDX0RFRlVOKFtnbF9IRUFERVJfU1RSSU5HX0hfQk9EWV0sCitbCisgIEFDX1JFUVVJUkUoW0FDX0NfUkVTVFJJQ1RdKQorICBBQ19SRVFVSVJFKFtnbF9IRUFERVJfU1RSSU5HX0hfREVGQVVMVFNdKQorICBnbF9BQlNPTFVURV9IRUFERVIoW3N0cmluZy5oXSkKKyAgQUJTT0xVVEVfU1RSSU5HX0g9XCIkZ2xfY3ZfYWJzb2x1dGVfc3RyaW5nX2hcIgorICBBQ19TVUJTVChbQUJTT0xVVEVfU1RSSU5HX0hdKQorXSkKKworQUNfREVGVU4oW2dsX1NUUklOR19NT0RVTEVfSU5ESUNBVE9SXSwKK1sKKyAgZG5sIFVzZSBBQ19SRVFVSVJFIGhlcmUsIHNvIHRoYXQgdGhlIGRlZmF1bHQgc2V0dGluZ3MgYXJlIGV4cGFuZGVkIG9uY2Ugb25seS4KKyAgQUNfUkVRVUlSRShbZ2xfSEVBREVSX1NUUklOR19IX0RFRkFVTFRTXSkKKyAgR05VTElCX1tdbTRfdHJhbnNsaXQoWyQxXSxbYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy1dLFtBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fX10pPTEKK10pCisKK0FDX0RFRlVOKFtnbF9IRUFERVJfU1RSSU5HX0hfREVGQVVMVFNdLAorWworICBHTlVMSUJfTUVNTUVNPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9NRU1NRU1dKQorICBHTlVMSUJfTUVNUENQWT0wOyAgICAgQUNfU1VCU1QoW0dOVUxJQl9NRU1QQ1BZXSkKKyAgR05VTElCX01FTVJDSFI9MDsgICAgIEFDX1NVQlNUKFtHTlVMSUJfTUVNUkNIUl0pCisgIEdOVUxJQl9TVFBDUFk9MDsgICAgICBBQ19TVUJTVChbR05VTElCX1NUUENQWV0pCisgIEdOVUxJQl9TVFBOQ1BZPTA7ICAgICBBQ19TVUJTVChbR05VTElCX1NUUE5DUFldKQorICBHTlVMSUJfU1RSQ0hSTlVMPTA7ICAgQUNfU1VCU1QoW0dOVUxJQl9TVFJDSFJOVUxdKQorICBHTlVMSUJfU1RSRFVQPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9TVFJEVVBdKQorICBHTlVMSUJfU1RSTkRVUD0wOyAgICAgQUNfU1VCU1QoW0dOVUxJQl9TVFJORFVQXSkKKyAgR05VTElCX1NUUk5MRU49MDsgICAgIEFDX1NVQlNUKFtHTlVMSUJfU1RSTkxFTl0pCisgIEdOVUxJQl9TVFJQQlJLPTA7ICAgICBBQ19TVUJTVChbR05VTElCX1NUUlBCUktdKQorICBHTlVMSUJfU1RSU0VQPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9TVFJTRVBdKQorICBHTlVMSUJfU1RSQ0FTRVNUUj0wOyAgQUNfU1VCU1QoW0dOVUxJQl9TVFJDQVNFU1RSXSkKKyAgR05VTElCX1NUUlRPS19SPTA7ICAgIEFDX1NVQlNUKFtHTlVMSUJfU1RSVE9LX1JdKQorICBHTlVMSUJfTUJTTEVOPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9NQlNMRU5dKQorICBHTlVMSUJfTUJTQ0hSPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9NQlNDSFJdKQorICBHTlVMSUJfTUJTUkNIUj0wOyAgICAgQUNfU1VCU1QoW0dOVUxJQl9NQlNSQ0hSXSkKKyAgR05VTElCX01CU1NUUj0wOyAgICAgIEFDX1NVQlNUKFtHTlVMSUJfTUJTU1RSXSkKKyAgR05VTElCX01CU0NBU0VDTVA9MDsgIEFDX1NVQlNUKFtHTlVMSUJfTUJTQ0FTRUNNUF0pCisgIEdOVUxJQl9NQlNOQ0FTRUNNUD0wOyBBQ19TVUJTVChbR05VTElCX01CU05DQVNFQ01QXSkKKyAgR05VTElCX01CU1BDQVNFQ01QPTA7IEFDX1NVQlNUKFtHTlVMSUJfTUJTUENBU0VDTVBdKQorICBHTlVMSUJfTUJTQ0FTRVNUUj0wOyAgQUNfU1VCU1QoW0dOVUxJQl9NQlNDQVNFU1RSXSkKKyAgR05VTElCX01CU0NTUE49MDsgICAgIEFDX1NVQlNUKFtHTlVMSUJfTUJTQ1NQTl0pCisgIEdOVUxJQl9NQlNQQlJLPTA7ICAgICBBQ19TVUJTVChbR05VTElCX01CU1BCUktdKQorICBHTlVMSUJfTUJTU1BOPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9NQlNTUE5dKQorICBHTlVMSUJfTUJTU0VQPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9NQlNTRVBdKQorICBHTlVMSUJfTUJTVE9LX1I9MDsgICAgQUNfU1VCU1QoW0dOVUxJQl9NQlNUT0tfUl0pCisgIGRubCBBc3N1bWUgcHJvcGVyIEdOVSBiZWhhdmlvciB1bmxlc3MgYW5vdGhlciBtb2R1bGUgc2F5cyBvdGhlcndpc2UuCisgIEhBVkVfREVDTF9NRU1NRU09MTsJCUFDX1NVQlNUKFtIQVZFX0RFQ0xfTUVNTUVNXSkKKyAgSEFWRV9NRU1QQ1BZPTE7CQlBQ19TVUJTVChbSEFWRV9NRU1QQ1BZXSkKKyAgSEFWRV9ERUNMX01FTVJDSFI9MTsJCUFDX1NVQlNUKFtIQVZFX0RFQ0xfTUVNUkNIUl0pCisgIEhBVkVfU1RQQ1BZPTE7CQlBQ19TVUJTVChbSEFWRV9TVFBDUFldKQorICBIQVZFX1NUUE5DUFk9MTsJCUFDX1NVQlNUKFtIQVZFX1NUUE5DUFldKQorICBIQVZFX1NUUkNBU0VDTVA9MTsJCUFDX1NVQlNUKFtIQVZFX1NUUkNBU0VDTVBdKQorICBIQVZFX0RFQ0xfU1RSTkNBU0VDTVA9MTsJQUNfU1VCU1QoW0hBVkVfREVDTF9TVFJOQ0FTRUNNUF0pCisgIEhBVkVfU1RSQ0hSTlVMPTE7CQlBQ19TVUJTVChbSEFWRV9TVFJDSFJOVUxdKQorICBIQVZFX0RFQ0xfU1RSRFVQPTE7CQlBQ19TVUJTVChbSEFWRV9ERUNMX1NUUkRVUF0pCisgIEhBVkVfU1RSTkRVUD0xOwkJQUNfU1VCU1QoW0hBVkVfU1RSTkRVUF0pCisgIEhBVkVfREVDTF9TVFJORFVQPTE7CQlBQ19TVUJTVChbSEFWRV9ERUNMX1NUUk5EVVBdKQorICBIQVZFX0RFQ0xfU1RSTkxFTj0xOwkJQUNfU1VCU1QoW0hBVkVfREVDTF9TVFJOTEVOXSkKKyAgSEFWRV9TVFJQQlJLPTE7CQlBQ19TVUJTVChbSEFWRV9TVFJQQlJLXSkKKyAgSEFWRV9TVFJTRVA9MTsJCUFDX1NVQlNUKFtIQVZFX1NUUlNFUF0pCisgIEhBVkVfU1RSQ0FTRVNUUj0xOwkJQUNfU1VCU1QoW0hBVkVfU1RSQ0FTRVNUUl0pCisgIEhBVkVfREVDTF9TVFJUT0tfUj0xOwkJQUNfU1VCU1QoW0hBVkVfREVDTF9TVFJUT0tfUl0pCitdKQpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L200L3N0cm5kdXAubTQgYi9wYXJ0ZWQtMS44LjcvbTQvc3RybmR1cC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWE2YzAzCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L200L3N0cm5kdXAubTQKQEAgLTAsMCArMSw1MyBAQAorIyBzdHJuZHVwLm00IHNlcmlhbCAxMworZG5sIENvcHlyaWdodCAoQykgMjAwMi0yMDAzLCAyMDA1LTIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworQUNfREVGVU4oW2dsX0ZVTkNfU1RSTkRVUF0sCitbCisgIGRubCBQZXJzdWFkZSBnbGliYyA8c3RyaW5nLmg+IHRvIGRlY2xhcmUgc3RybmR1cCgpLgorICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKworICBBQ19SRVFVSVJFKFtnbF9IRUFERVJfU1RSSU5HX0hfREVGQVVMVFNdKQorICBBQ19DSEVDS19ERUNMU19PTkNFKFtzdHJuZHVwXSkKKyAgaWYgdGVzdCAkYWNfY3ZfaGF2ZV9kZWNsX3N0cm5kdXAgPSBubzsgdGhlbgorICAgIEhBVkVfREVDTF9TVFJORFVQPTAKKyAgZmkKKworICAjIEFJWCA0LjMuMywgQUlYIDUuMSBoYXZlIGEgZnVuY3Rpb24gdGhhdCBmYWlscyB0byBhZGQgdGhlIHRlcm1pbmF0aW5nICdcMCcuCisgIEFDX0NBQ0hFX0NIRUNLKFtmb3Igd29ya2luZyBzdHJuZHVwXSwgZ2xfY3ZfZnVuY19zdHJuZHVwLAorICAgIFtBQ19SVU5fSUZFTFNFKFsKKyAgICAgICBBQ19MQU5HX1BST0dSQU0oWyNpbmNsdWRlIDxzdHJpbmcuaD4KKwkJIAkjaW5jbHVkZSA8c3RkbGliLmg+XSwgW1sKKyNpZm5kZWYgSEFWRV9ERUNMX1NUUk5EVVAKKyAgZXh0ZXJuIGNoYXIgKnN0cm5kdXAgKGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKKyNlbmRpZgorICBjaGFyICpzOworICBzID0gc3RybmR1cCAoInNvbWUgbG9uZ2VyIHN0cmluZyIsIDE1KTsKKyAgZnJlZSAocyk7CisgIHMgPSBzdHJuZHVwICgic2hvcnRlciBzdHJpbmciLCAxMyk7CisgIHJldHVybiBzWzEzXSAhPSAnXDAnO11dKV0sCisgICAgICAgW2dsX2N2X2Z1bmNfc3RybmR1cD15ZXNdLAorICAgICAgIFtnbF9jdl9mdW5jX3N0cm5kdXA9bm9dLAorICAgICAgIFtBQ19DSEVDS19GVU5DKFtzdHJuZHVwXSwKKyAgICAgICAgICBbQUNfRUdSRVBfQ1BQKFt0b28gcmlza3ldLCBbCisjaWZkZWYgX0FJWAorICAgICAgICAgICAgICAgdG9vIHJpc2t5CisjZW5kaWYKKyAgICAgICAgICAgICBdLAorICAgICAgICAgICAgIFtnbF9jdl9mdW5jX3N0cm5kdXA9bm9dLAorICAgICAgICAgICAgIFtnbF9jdl9mdW5jX3N0cm5kdXA9eWVzXSldLAorICAgICAgICAgIFtnbF9jdl9mdW5jX3N0cm5kdXA9bm9dKV0pXSkKKyAgaWYgdGVzdCAkZ2xfY3ZfZnVuY19zdHJuZHVwID0geWVzOyB0aGVuCisgICAgQUNfREVGSU5FKFtIQVZFX1NUUk5EVVBdLCAxLAorICAgICAgW0RlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc3RybmR1cCgpIGZ1bmN0aW9uIGFuZCBpdCB3b3Jrcy5dKQorICBlbHNlCisgICAgSEFWRV9TVFJORFVQPTAKKyAgICBBQ19MSUJPQkooW3N0cm5kdXBdKQorICAgIGdsX1BSRVJFUV9TVFJORFVQCisgIGZpCitdKQorCisjIFByZXJlcXVpc2l0ZXMgb2YgbGliL3N0cm5kdXAuYy4KK0FDX0RFRlVOKFtnbF9QUkVSRVFfU1RSTkRVUF0sIFs6XSkKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9tNC9zdHJubGVuLm00IGIvcGFydGVkLTEuOC43L200L3N0cm5sZW4ubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUyODE1YgotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9tNC9zdHJubGVuLm00CkBAIC0wLDAgKzEsMzEgQEAKKyMgc3Rybmxlbi5tNCBzZXJpYWwgOAorZG5sIENvcHlyaWdodCAoQykgMjAwMi0yMDAzLCAyMDA1LTIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworQUNfREVGVU4oW2dsX0ZVTkNfU1RSTkxFTl0sCitbCisgIGRubCBQZXJzdWFkZSBnbGliYyA8c3RyaW5nLmg+IHRvIGRlY2xhcmUgc3RybmxlbigpLgorICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKworICBBQ19SRVFVSVJFKFtnbF9IRUFERVJfU1RSSU5HX0hfREVGQVVMVFNdKQorICBBQ19DSEVDS19ERUNMU19PTkNFKFtzdHJubGVuXSkKKyAgaWYgdGVzdCAkYWNfY3ZfaGF2ZV9kZWNsX3N0cm5sZW4gPSBubzsgdGhlbgorICAgIEhBVkVfREVDTF9TVFJOTEVOPTAKKyAgZmkKKworICBBQ19GVU5DX1NUUk5MRU4KKyAgaWYgdGVzdCAkYWNfY3ZfZnVuY19zdHJubGVuX3dvcmtpbmcgPSBubzsgdGhlbgorICAgICMgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBhdXRvbWFrZS0xLjYuMSBkb2Vucyd0IHVuZGVyc3RhbmQKKyAgICAjIHRoYXQgdGhlIGFib3ZlIHVzZSBvZiBBQ19GVU5DX1NUUk5MRU4gbWVhbnMgd2UgbWF5IGhhdmUgdG8gdXNlCisgICAgIyBsaWIvc3Rybmxlbi5jLgorICAgICNBQ19MSUJPQkooc3RybmxlbikKKyAgICBBQ19ERUZJTkUoc3RybmxlbiwgcnBsX3N0cm5sZW4sCisgICAgICBbRGVmaW5lIHRvIHJwbF9zdHJubGVuIGlmIHRoZSByZXBsYWNlbWVudCBmdW5jdGlvbiBzaG91bGQgYmUgdXNlZC5dKQorICAgIGdsX1BSRVJFUV9TVFJOTEVOCisgIGZpCitdKQorCisjIFByZXJlcXVpc2l0ZXMgb2YgbGliL3N0cm5sZW4uYy4KK0FDX0RFRlVOKFtnbF9QUkVSRVFfU1RSTkxFTl0sIFs6XSkKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9tNC9zdHJ0b2QubTQgYi9wYXJ0ZWQtMS44LjcvbTQvc3RydG9kLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkZTJmMmYKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbTQvc3RydG9kLm00CkBAIC0wLDAgKzEsMjAgQEAKKyMgc3RydG9kLm00IHNlcmlhbCA2CitkbmwgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzLCAyMDA2LCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK0FDX0RFRlVOKFtnbF9GVU5DX1NUUlRPRF0sCitbCisgIEFDX0ZVTkNfU1RSVE9ECisgIGRubCBOb3RlOiBBQ19GVU5DX1NUUlRPRCBkb2VzIEFDX0xJQk9CSihzdHJ0b2QpLgorICBpZiB0ZXN0ICRhY19jdl9mdW5jX3N0cnRvZCA9IG5vOyB0aGVuCisgICAgQUNfREVGSU5FKHN0cnRvZCwgcnBsX3N0cnRvZCwKKyAgICAgIFtEZWZpbmUgdG8gcnBsX3N0cnRvZCBpZiB0aGUgcmVwbGFjZW1lbnQgZnVuY3Rpb24gc2hvdWxkIGJlIHVzZWQuXSkKKyAgICBnbF9QUkVSRVFfU1RSVE9ECisgIGZpCitdKQorCisjIFByZXJlcXVpc2l0ZXMgb2YgbGliL3N0cnRvZC5jLgorIyBUaGUgbmVlZCBmb3IgcG93KCkgaXMgYWxyZWFkeSBoYW5kbGVkIGJ5IEFDX0ZVTkNfU1RSVE9ELgorQUNfREVGVU4oW2dsX1BSRVJFUV9TVFJUT0RdLCBbOl0pCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbTQvc3RydG9sLm00IGIvcGFydGVkLTEuOC43L200L3N0cnRvbC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmJhZTYwCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L200L3N0cnRvbC5tNApAQCAtMCwwICsxLDEwIEBACisjIHN0cnRvbC5tNCBzZXJpYWwgNAorZG5sIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitBQ19ERUZVTihbZ2xfRlVOQ19TVFJUT0xdLAorWworICBBQ19SRVBMQUNFX0ZVTkNTKHN0cnRvbCkKK10pCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbTQvdW5pc3RkX2gubTQgYi9wYXJ0ZWQtMS44LjcvbTQvdW5pc3RkX2gubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYyZGE2OQotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9tNC91bmlzdGRfaC5tNApAQCAtMCwwICsxLDUzIEBACisjIHVuaXN0ZF9oLm00IHNlcmlhbCA2CitkbmwgQ29weXJpZ2h0IChDKSAyMDA2LTIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworZG5sIFdyaXR0ZW4gYnkgU2ltb24gSm9zZWZzc29uLCBCcnVubyBIYWlibGUuCisKK0FDX0RFRlVOKFtnbF9VTklTVERfSF0sCitbCisgIGRubCBVc2UgQUNfUkVRVUlSRSBoZXJlLCBzbyB0aGF0IHRoZSBkZWZhdWx0IGJlaGF2aW9yIGJlbG93IGlzIGV4cGFuZGVkCisgIGRubCBvbmNlIG9ubHksIGJlZm9yZSBhbGwgc3RhdGVtZW50cyB0aGF0IG9jY3VyIGluIG90aGVyIG1hY3Jvcy4KKyAgQUNfUkVRVUlSRShbZ2xfVU5JU1REX0hfREVGQVVMVFNdKQorCisgIEFDX0NIRUNLX0hFQURFUlNfT05DRShbdW5pc3RkLmhdKQorICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfdW5pc3RkX2ggPSB5ZXM7IHRoZW4KKyAgICBIQVZFX1VOSVNURF9IPTEKKyAgICBnbF9BQlNPTFVURV9IRUFERVIoW3VuaXN0ZC5oXSkKKyAgICBBQlNPTFVURV9VTklTVERfSD1cIiRnbF9jdl9hYnNvbHV0ZV91bmlzdGRfaFwiCisgIGVsc2UKKyAgICBIQVZFX1VOSVNURF9IPTAKKyAgZmkKKyAgQUNfU1VCU1QoW0hBVkVfVU5JU1REX0hdKQorICBBQ19TVUJTVChbQUJTT0xVVEVfVU5JU1REX0hdKQorXSkKKworQUNfREVGVU4oW2dsX1VOSVNURF9NT0RVTEVfSU5ESUNBVE9SXSwKK1sKKyAgZG5sIFVzZSBBQ19SRVFVSVJFIGhlcmUsIHNvIHRoYXQgdGhlIGRlZmF1bHQgc2V0dGluZ3MgYXJlIGV4cGFuZGVkIG9uY2Ugb25seS4KKyAgQUNfUkVRVUlSRShbZ2xfVU5JU1REX0hfREVGQVVMVFNdKQorICBHTlVMSUJfW11tNF90cmFuc2xpdChbJDFdLFthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLV0sW0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fXSk9MQorXSkKKworQUNfREVGVU4oW2dsX1VOSVNURF9IX0RFRkFVTFRTXSwKK1sKKyAgR05VTElCX0NIT1dOPTA7ICAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9DSE9XTl0pCisgIEdOVUxJQl9EVVAyPTA7ICAgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfRFVQMl0pCisgIEdOVUxJQl9GQ0hESVI9MDsgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfRkNIRElSXSkKKyAgR05VTElCX0ZUUlVOQ0FURT0wOyAgICAgQUNfU1VCU1QoW0dOVUxJQl9GVFJVTkNBVEVdKQorICBHTlVMSUJfR0VUQ1dEPTA7ICAgICAgICBBQ19TVUJTVChbR05VTElCX0dFVENXRF0pCisgIEdOVUxJQl9HRVRMT0dJTl9SPTA7ICAgIEFDX1NVQlNUKFtHTlVMSUJfR0VUTE9HSU5fUl0pCisgIEdOVUxJQl9SRUFETElOSz0wOyAgICAgIEFDX1NVQlNUKFtHTlVMSUJfUkVBRExJTktdKQorICBHTlVMSUJfU0xFRVA9MDsgICAgICAgICBBQ19TVUJTVChbR05VTElCX1NMRUVQXSkKKyAgZG5sIEFzc3VtZSBwcm9wZXIgR05VIGJlaGF2aW9yIHVubGVzcyBhbm90aGVyIG1vZHVsZSBzYXlzIG90aGVyd2lzZS4KKyAgSEFWRV9EVVAyPTE7ICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfRFVQMl0pCisgIEhBVkVfRlRSVU5DQVRFPTE7ICAgICAgIEFDX1NVQlNUKFtIQVZFX0ZUUlVOQ0FURV0pCisgIEhBVkVfUkVBRExJTks9MTsgICAgICAgIEFDX1NVQlNUKFtIQVZFX1JFQURMSU5LXSkKKyAgSEFWRV9TTEVFUD0xOyAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfU0xFRVBdKQorICBIQVZFX0RFQ0xfR0VUTE9HSU5fUj0xOyBBQ19TVUJTVChbSEFWRV9ERUNMX0dFVExPR0lOX1JdKQorICBSRVBMQUNFX0NIT1dOPTA7ICAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9DSE9XTl0pCisgIFJFUExBQ0VfRkNIRElSPTA7ICAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX0ZDSERJUl0pCisgIFJFUExBQ0VfR0VUQ1dEPTA7ICAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX0dFVENXRF0pCitdKQpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L200L3V0aW1idWYubTQgYi9wYXJ0ZWQtMS44LjcvbTQvdXRpbWJ1Zi5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTI3OTA4Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L200L3V0aW1idWYubTQKQEAgLTAsMCArMSwzOSBAQAorI3NlcmlhbCA4CisKKyMgQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA3IEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK2RubCBGcm9tIEppbSBNZXllcmluZworCitkbmwgRGVmaW5lIEhBVkVfU1RSVUNUX1VUSU1CVUYgaWYgYHN0cnVjdCB1dGltYnVmJyBpcyBkZWNsYXJlZCAtLQorZG5sIHVzdWFsbHkgaW4gPHV0aW1lLmg+LgorZG5sIFNvbWUgc3lzdGVtcyBoYXZlIHV0aW1lLmggYnV0IGRvbid0IGRlY2xhcmUgdGhlIHN0cnVjdCBhbnl3aGVyZS4KKworQUNfREVGVU4oW2dsX0NIRUNLX1RZUEVfU1RSVUNUX1VUSU1CVUZdLAorWworICBBQ19DSEVDS19IRUFERVJTX09OQ0Uoc3lzL3RpbWUuaCB1dGltZS5oKQorICBBQ19DQUNIRV9DSEVDSyhbZm9yIHN0cnVjdCB1dGltYnVmXSwgW2dsX2N2X3N5c19zdHJ1Y3RfdXRpbWJ1Zl0sCisgICAgW0FDX0NPTVBJTEVfSUZFTFNFKAorICAgICAgIFtBQ19MQU5HX1BST0dSQU0oCisJICBbWyNpZiBIQVZFX1NZU19USU1FX0gKKwkgICAgICNpbmNsdWRlIDxzeXMvdGltZS5oPgorCSAgICAjZW5kaWYKKwkgICAgI2luY2x1ZGUgPHRpbWUuaD4KKwkgICAgI2lmZGVmIEhBVkVfVVRJTUVfSAorCSAgICAgI2luY2x1ZGUgPHV0aW1lLmg+CisJICAgICNlbmRpZgorCSAgXV0sCisJICBbW3N0YXRpYyBzdHJ1Y3QgdXRpbWJ1ZiB4OyB4LmFjdGltZSA9IHgubW9kdGltZTtdXSldLAorICAgICAgIFtnbF9jdl9zeXNfc3RydWN0X3V0aW1idWY9eWVzXSwKKyAgICAgICBbZ2xfY3Zfc3lzX3N0cnVjdF91dGltYnVmPW5vXSldKQorCisgIGlmIHRlc3QgJGdsX2N2X3N5c19zdHJ1Y3RfdXRpbWJ1ZiA9IHllczsgdGhlbgorICAgIEFDX0RFRklORShIQVZFX1NUUlVDVF9VVElNQlVGLCAxLAorICAgICAgW0RlZmluZSBpZiBzdHJ1Y3QgdXRpbWJ1ZiBpcyBkZWNsYXJlZCAtLSB1c3VhbGx5IGluIDx1dGltZS5oPi4KKyAgICAgICBTb21lIHN5c3RlbXMgaGF2ZSB1dGltZS5oIGJ1dCBkb24ndCBkZWNsYXJlIHRoZSBzdHJ1Y3QgYW55d2hlcmUuIF0pCisgIGZpCitdKQpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L200L3V0aW1lLm00IGIvcGFydGVkLTEuOC43L200L3V0aW1lLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2N2ZhYTIKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbTQvdXRpbWUubTQKQEAgLTAsMCArMSwzMCBAQAorI3NlcmlhbCA3CisKK2RubCBGcm9tIEppbSBNZXllcmluZworZG5sIFJlcGxhY2UgdGhlIHV0aW1lIGZ1bmN0aW9uIG9uIHN5c3RlbXMgdGhhdCBuZWVkIGl0LgorCisjIENvcHlyaWdodCAoQykgMTk5OCwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitkbmwgRklYTUUKKworQUNfREVGVU4oW2dsX0ZVTkNfVVRJTUVdLAorWworICBBQ19SRVFVSVJFKFtBQ19GVU5DX1VUSU1FX05VTExdKQorICBpZiB0ZXN0ICRhY19jdl9mdW5jX3V0aW1lX251bGwgPSBubzsgdGhlbgorICAgIEFDX0xJQk9CSih1dGltZSkKKyAgICBBQ19ERUZJTkUodXRpbWUsIHJwbF91dGltZSwKKyAgICAgIFtEZWZpbmUgdG8gcnBsX3V0aW1lIGlmIHRoZSByZXBsYWNlbWVudCBmdW5jdGlvbiBzaG91bGQgYmUgdXNlZC5dKQorICAgIGdsX1BSRVJFUV9VVElNRQorICBmaQorXSkKKworIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi91dGltZS5jLgorQUNfREVGVU4oW2dsX1BSRVJFUV9VVElNRV0sCitbCisgIEFDX0NIRUNLX0hFQURFUlNfT05DRSh1dGltZS5oKQorICBBQ19SRVFVSVJFKFtnbF9DSEVDS19UWVBFX1NUUlVDVF9VVElNQlVGXSkKKyAgZ2xfRlVOQ19VVElNRVNfTlVMTAorXSkKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9tNC91dGltZXMtbnVsbC5tNCBiL3BhcnRlZC0xLjguNy9tNC91dGltZXMtbnVsbC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDVjOGFlCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L200L3V0aW1lcy1udWxsLm00CkBAIC0wLDAgKzEsNDEgQEAKKyNzZXJpYWwgNworCisjIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNiBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK2RubCBTaGFtZWxlc3NseSBjbG9uZWQgZnJvbSBhY3NwZWNpZmljLm00J3MgQUNfRlVOQ19VVElNRV9OVUxMLAorZG5sIHRoZW4gZG8gY2FzZS1pbnNlbnNpdGl2ZSBzL3V0aW1lL3V0aW1lcy8uCisKK0FDX0RFRlVOKFtnbF9GVU5DX1VUSU1FU19OVUxMXSwKK1tBQ19DQUNIRV9DSEVDSyh3aGV0aGVyIHV0aW1lcyBhY2NlcHRzIGEgbnVsbCBhcmd1bWVudCwgYWNfY3ZfZnVuY191dGltZXNfbnVsbCwKK1tybSAtZiBjb25mdGVzdC5kYXRhOyA+IGNvbmZ0ZXN0LmRhdGEKK0FDX1RSWV9SVU4oWworLyogSW4gY2FzZSBzdGF0IGhhcyBiZWVuIGRlZmluZWQgdG8gcnBsX3N0YXQsIHVuZGVmIGl0IGhlcmUuICAqLworI3VuZGVmIHN0YXQKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CitpbnQKK21haW4gKCkgeworc3RydWN0IHN0YXQgcywgdDsKK3JldHVybiAhIChzdGF0ICgiY29uZnRlc3QuZGF0YSIsICZzKSA9PSAwCisJICAmJiB1dGltZXMgKCJjb25mdGVzdC5kYXRhIiwgMCkgPT0gMAorCSAgJiYgc3RhdCAoImNvbmZ0ZXN0LmRhdGEiLCAmdCkgPT0gMAorCSAgJiYgdC5zdF9tdGltZSA+PSBzLnN0X210aW1lCisJICAmJiB0LnN0X210aW1lIC0gcy5zdF9tdGltZSA8IDEyMCkpOworfV0sCisgIGFjX2N2X2Z1bmNfdXRpbWVzX251bGw9eWVzLAorICBhY19jdl9mdW5jX3V0aW1lc19udWxsPW5vLAorICBhY19jdl9mdW5jX3V0aW1lc19udWxsPW5vKQorcm0gLWYgY29yZSBjb3JlLiogKi5jb3JlXSkKKworICAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfdXRpbWVzX251bGwgPSB5ZXM7IHRoZW4KKyAgICAgIEFDX0RFRklORShIQVZFX1VUSU1FU19OVUxMLCAxLAorCQlbRGVmaW5lIGlmIHV0aW1lcyBhY2NlcHRzIGEgbnVsbCBhcmd1bWVudF0pCisgICAgZmkKKyAgXQorKQpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L200L3djaGFyLm00IGIvcGFydGVkLTEuOC43L200L3djaGFyLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2OGYyMmQKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbTQvd2NoYXIubTQKQEAgLTAsMCArMSwyOSBAQAorZG5sIEEgcGxhY2Vob2xkZXIgZm9yIElTTyBDOTkgPHdjaGFyLmg+LCBmb3IgcGxhdGZvcm1zIHRoYXQgaGF2ZSBpc3N1ZXMuCisKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworZG5sIFdyaXR0ZW4gYnkgRXJpYyBCbGFrZS4KKworIyB3Y2hhci5tNCBzZXJpYWwgMQorCitBQ19ERUZVTihbZ2xfV0NIQVJfSF0sCitbCisgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIDx3Y2hhci5oPiBpcyBzdGFuZGFsb25lXSwKKyAgICBbZ2xfY3ZfaGVhZGVyX3djaGFyX2hfc3RhbmRhbG9uZV0sCisgICAgW0FDX0NPTVBJTEVfSUZFTFNFKFtbI2luY2x1ZGUgPHdjaGFyLmg+Cit3Y2hhcl90IHc7XV0sCisgICAgICBbZ2xfY3ZfaGVhZGVyX3djaGFyX2hfc3RhbmRhbG9uZT15ZXNdLAorICAgICAgW2dsX2N2X2hlYWRlcl93Y2hhcl9oX3N0YW5kYWxvbmU9bm9dKV0pCisgIGlmIHRlc3QgJGdsX2N2X2hlYWRlcl93Y2hhcl9oX3N0YW5kYWxvbmUgPSB5ZXM7IHRoZW4KKyAgICBXQ0hBUl9IPQorICBlbHNlCisgICAgZ2xfQUJTT0xVVEVfSEVBREVSKFt3Y2hhci5oXSkKKyAgICBBQlNPTFVURV9XQ0hBUl9IPVwiJGdsX2N2X2Fic29sdXRlX3djaGFyX2hcIgorICAgIFdDSEFSX0g9d2NoYXIuaAorICBmaQorICBBQ19TVUJTVChbQUJTT0xVVEVfV0NIQVJfSF0pCisgIEFDX1NVQlNUKFtXQ0hBUl9IXSkKK10pCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbTQvd2N0eXBlLm00IGIvcGFydGVkLTEuOC43L200L3djdHlwZS5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTY4MzRkCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L200L3djdHlwZS5tNApAQCAtMCwwICsxLDQ3IEBACitkbmwgQSBwbGFjZWhvbGRlciBmb3IgSVNPIEM5OSA8d2N0eXBlLmg+LCBmb3IgcGxhdGZvcm1zIHRoYXQgbGFjayBpdC4KKworZG5sIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitkbmwgV3JpdHRlbiBieSBQYXVsIEVnZ2VydC4KKworQUNfREVGVU4oW2dsX1dDVFlQRV9IXSwKK1sKKyAgQUNfQ0hFQ0tfRlVOQ1NfT05DRShbaXN3Y250cmxdKQorICBpZiB0ZXN0ICRhY19jdl9mdW5jX2lzd2NudHJsID0geWVzOyB0aGVuCisgICAgSEFWRV9JU1dDTlRSTD0xCisgIGVsc2UKKyAgICBIQVZFX0lTV0NOVFJMPTAKKyAgZmkKKyAgQUNfU1VCU1QoW0hBVkVfSVNXQ05UUkxdKQorICBBQ19DSEVDS19IRUFERVJTX09OQ0UoW3djdHlwZS5oXSkKKyAgQUNfUkVRVUlSRShbQUNfQ19JTkxJTkVdKQorCisgIEFDX1JFUVVJUkUoW2d0X1RZUEVfV0lOVF9UXSkKKyAgaWYgdGVzdCAkZ3RfY3ZfY193aW50X3QgPSB5ZXM7IHRoZW4KKyAgICBIQVZFX1dJTlRfVD0xCisgIGVsc2UKKyAgICBIQVZFX1dJTlRfVD0wCisgIGZpCisgIEFDX1NVQlNUKFtIQVZFX1dJTlRfVF0pCisKKyAgV0NUWVBFX0g9d2N0eXBlLmgKKyAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3djdHlwZV9oID0geWVzOyB0aGVuCisgICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19pc3djbnRybCA9IHllczsgdGhlbgorICAgICAgV0NUWVBFX0g9CisgICAgZmkKKyAgICBkbmwgQ29tcHV0ZSBBQlNPTFVURV9XQ1RZUEVfSCBldmVuIGlmIFdDVFlQRV9IIGlzIGVtcHR5LAorICAgIGRubCBmb3IgdGhlIGJlbmVmaXQgb2YgYnVpbGRzIGZyb20gbm9uLWRpc3RjbGVhbiBkaXJlY3Rvcmllcy4KKyAgICBnbF9BQlNPTFVURV9IRUFERVIoW3djdHlwZS5oXSkKKyAgICBBQlNPTFVURV9XQ1RZUEVfSD1cIiRnbF9jdl9hYnNvbHV0ZV93Y3R5cGVfaFwiCisgICAgSEFWRV9XQ1RZUEVfSD0xCisgIGVsc2UKKyAgICBBQlNPTFVURV9XQ1RZUEVfSD1cIm5vL3N1Y2gvZmlsZS93Y3R5cGUuaFwiCisgICAgSEFWRV9XQ1RZUEVfSD0wCisgIGZpCisgIEFDX1NVQlNUKFtBQlNPTFVURV9XQ1RZUEVfSF0pCisgIEFDX1NVQlNUKFtIQVZFX1dDVFlQRV9IXSkKKyAgQUNfU1VCU1QoW1dDVFlQRV9IXSkKK10pCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvbTQvd2ludF90Lm00IGIvcGFydGVkLTEuOC43L200L3dpbnRfdC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzA2YzA0Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L200L3dpbnRfdC5tNApAQCAtMCwwICsxLDI4IEBACisjIHdpbnRfdC5tNCBzZXJpYWwgMiAoZ2V0dGV4dC0wLjEyKQorZG5sIENvcHlyaWdodCAoQykgMjAwMywgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitkbmwgRnJvbSBCcnVubyBIYWlibGUuCitkbmwgVGVzdCB3aGV0aGVyIDx3Y2hhci5oPiBoYXMgdGhlICd3aW50X3QnIHR5cGUuCitkbmwgUHJlcmVxdWlzaXRlOiBBQ19QUk9HX0NDCisKK0FDX0RFRlVOKFtndF9UWVBFX1dJTlRfVF0sCitbCisgIEFDX0NBQ0hFX0NIRUNLKFtmb3Igd2ludF90XSwgZ3RfY3ZfY193aW50X3QsCisgICAgW0FDX1RSWV9DT01QSUxFKFsKKy8qIFRydTY0IHdpdGggRGVza3RvcCBUb29sa2l0IEMgaGFzIGEgYnVnOiA8c3RkaW8uaD4gbXVzdCBiZSBpbmNsdWRlZCBiZWZvcmUKKyAgIDx3Y2hhci5oPi4KKyAgIEJTRC9PUyA0LjAuMSBoYXMgYSBidWc6IDxzdGRkZWYuaD4sIDxzdGRpby5oPiBhbmQgPHRpbWUuaD4gbXVzdCBiZSBpbmNsdWRlZAorICAgYmVmb3JlIDx3Y2hhci5oPi4gICovCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KKyAgICAgICB3aW50X3QgZm9vID0gKHdjaGFyX3QpJ1wwJztdLCAsCisgICAgICAgZ3RfY3ZfY193aW50X3Q9eWVzLCBndF9jdl9jX3dpbnRfdD1ubyldKQorICBpZiB0ZXN0ICRndF9jdl9jX3dpbnRfdCA9IHllczsgdGhlbgorICAgIEFDX0RFRklORShIQVZFX1dJTlRfVCwgMSwgW0RlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ3dpbnRfdCcgdHlwZS5dKQorICBmaQorXSkKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9tNC94YWxsb2MubTQgYi9wYXJ0ZWQtMS44LjcvbTQveGFsbG9jLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzN2E5NDgKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbTQveGFsbG9jLm00CkBAIC0wLDAgKzEsMjQgQEAKKyMgeGFsbG9jLm00IHNlcmlhbCAxNgorZG5sIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitBQ19ERUZVTihbZ2xfWEFMTE9DXSwKK1sKKyAgQUNfTElCT0JKKFt4bWFsbG9jXSkKKworICBnbF9QUkVSRVFfWEFMTE9DCisgIGdsX1BSRVJFUV9YTUFMTE9DCitdKQorCisjIFByZXJlcXVpc2l0ZXMgb2YgbGliL3hhbGxvYy5oLgorQUNfREVGVU4oW2dsX1BSRVJFUV9YQUxMT0NdLCBbCisgIEFDX1JFUVVJUkUoW2dsX0lOTElORV0pCisgIDoKK10pCisKKyMgUHJlcmVxdWlzaXRlcyBvZiBsaWIveG1hbGxvYy5jLgorQUNfREVGVU4oW2dsX1BSRVJFUV9YTUFMTE9DXSwgWworICA6CitdKQpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L200L3hzdHJuZHVwLm00IGIvcGFydGVkLTEuOC43L200L3hzdHJuZHVwLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMzBhYjEKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvbTQveHN0cm5kdXAubTQKQEAgLTAsMCArMSwxNSBAQAorIyB4c3RybmR1cC5tNCBzZXJpYWwgMgorZG5sIENvcHlyaWdodCAoQykgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitBQ19ERUZVTihbZ2xfWFNUUk5EVVBdLAorWworICBnbF9QUkVSRVFfWFNUUk5EVVAKK10pCisKKyMgUHJlcmVxdWlzaXRlcyBvZiBsaWIveHN0cm5kdXAuYy4KK0FDX0RFRlVOKFtnbF9QUkVSRVFfWFNUUk5EVVBdLCBbCisgIDoKK10pCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvcGFydGVkLnNwZWMgYi9wYXJ0ZWQtMS44LjcvcGFydGVkLnNwZWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc5NjcyZgotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9wYXJ0ZWQuc3BlYwpAQCAtMCwwICsxLDEwNSBAQAorIyBEZWZhdWx0IHRvIGRpc2FibGluZyBkZXZpY2UtbWFwcGVyIGFuZCBTRUxpbnV4CislZGVmaW5lIHVzZV9kZXZtYXBwZXIgMAorJWRlZmluZSB1c2Vfc2VsaW51eCAwCislZGVmaW5lIHVzZV9zZXBvbCAwCisKKyMgRW5hYmxlIGRldmljZS1tYXBwZXIgc3VwcG9ydCBpZiB3ZSBmaW5kIGRldm1hcHBlcgorJWRlZmluZSB1c2VfZGV2bWFwcGVyICUocGtnLWNvbmZpZyAtLWxpYnMgZGV2bWFwcGVyID4vZGV2L251bGwgMj4mMTsgWyAkPyAtZXEgMCBdICYmIGVjaG8gMSkKKworIyBFbmFibGUgU0VMaW51eCBpZiB3ZSBmaW5kIGxpYnNlbGludXggYW5kIGxpYnNlcG9sCislZGVmaW5lIHVzZV9zZWxpbnV4ICUoWyAtciAle19saWJkaXJ9L2xpYnNlbGludXguYSBdICYmIGVjaG8gMSkKKyVkZWZpbmUgdXNlX3NlcG9sICUoWyAtciAle19saWJkaXJ9L2xpYnNlcG9sLnNvIF0gJiYgZWNobyAxKQorCitTdW1tYXJ5OiAgIFRoZSBHTlUgZGlzayBwYXJ0aXRpb24gbWFuaXB1bGF0aW9uIHByb2dyYW0KK05hbWU6ICAgICAgcGFydGVkCitWZXJzaW9uOiAgIDEuOC43CitSZWxlYXNlOiAgIDEKK1NvdXJjZTogICAgZnRwOi8vZnRwLmdudS5vcmcvZ251LyV7bmFtZX0vJXtuYW1lfS0le3ZlcnNpb259LnRhci5iejIKK0J1aWxkcm9vdDogJXtfdG1wcGF0aH0vJXtuYW1lfS0le3ZlcnNpb259LSV7cmVsZWFzZX0tcm9vdC0lKCV7X19pZF91fSAtbikKK0xpY2Vuc2U6ICAgR1BMCitHcm91cDogICAgIEFwcGxpY2F0aW9ucy9TeXN0ZW0KKworQnVpbGRSZXF1aXJlczogZTJmc3Byb2dzLWRldmVsIHJlYWRsaW5lLWRldmVsIG5jdXJzZXMtZGV2ZWwKK0J1aWxkUmVxdWlyZXM6IGF1dG9tYWtlIGxpYnRvb2wgZ2V0dGV4dC1kZXZlbCB0ZXhpbmZvIHBrZ2NvbmZpZworCitCdWlsZFJlcXVpcmVzOiBkZXZpY2UtbWFwcGVyLWRldmVsLCBsaWJzZWxpbnV4LWRldmVsIGxpYnNlcG9sLWRldmVsCisKK1ByZXJlcTogL3NiaW4vaW5zdGFsbC1pbmZvCisKKyVkZXNjcmlwdGlvbgorVGhlIEdOVSBQYXJ0ZWQgcHJvZ3JhbSBhbGxvd3MgeW91IHRvIGNyZWF0ZSwgZGVzdHJveSwgcmVzaXplLCBtb3ZlLAorYW5kIGNvcHkgaGFyZCBkaXNrIHBhcnRpdGlvbnMuIFBhcnRlZCBjYW4gYmUgdXNlZCBmb3IgY3JlYXRpbmcgc3BhY2UKK2ZvciBuZXcgb3BlcmF0aW5nIHN5c3RlbXMsIHJlb3JnYW5pemluZyBkaXNrIHVzYWdlLCBhbmQgY29weWluZyBkYXRhCit0byBuZXcgaGFyZCBkaXNrcy4KKworJXBhY2thZ2UgZGV2ZWwKK1N1bW1hcnk6ICBGaWxlcyBmb3IgZGV2ZWxvcGluZyBhcHBzIHdoaWNoIHdpbGwgbWFuaXB1bGF0ZSBkaXNrIHBhcnRpdGlvbnMKK0dyb3VwOiAgICBEZXZlbG9wbWVudC9MaWJyYXJpZXMKK1JlcXVpcmVzOiAle25hbWV9LSV7dmVyc2lvbn0tJXtyZWxlYXNlfQorJWRlc2NyaXB0aW9uIGRldmVsCitUaGUgR05VIFBhcnRlZCBsaWJyYXJ5IGlzIGEgc2V0IG9mIHJvdXRpbmVzIGZvciBoYXJkIGRpc2sgcGFydGl0aW9uCittYW5pcHVsYXRpb24uIElmIHlvdSB3YW50IHRvIGRldmVsb3AgcHJvZ3JhbXMgdGhhdCBtYW5pcHVsYXRlIGRpc2sKK3BhcnRpdGlvbnMgYW5kIGZpbGVzeXN0ZW1zIHVzaW5nIHRoZSByb3V0aW5lcyBwcm92aWRlZCBieSB0aGUgR05VCitQYXJ0ZWQgbGlicmFyeSwgeW91IG5lZWQgdG8gaW5zdGFsbCB0aGlzIHBhY2thZ2UuCisKKyVwcmVwCislc2V0dXAgLXEKKworJWJ1aWxkCislY29uZmlndXJlIFwKKyAgIC0tZW5hYmxlLXNoYXJlZCBcCislaWYgIiV7dXNlX2Rldm1hcHBlcn0iID09ICIxIgorICAgLS1lbmFibGUtZGV2aWNlLW1hcHBlciBcCislZWxzZQorICAgLS1kaXNhYmxlLWRldm1hcHBlciBcCislZW5kaWYKKyVpZiAiJXt1c2Vfc2VsaW51eH0iID09ICIxIiAmJiAiJXt1c2Vfc2Vwb2x9IiA9PSAiMSIKKyAgIC0tZW5hYmxlLXNlbGludXggXAorJWVsc2UKKyAgIC0tZGlzYWJsZS1zZWxpbnV4IFwKKyVlbmRpZgorICAgLS1lbmFibGUtcGFydC1zdGF0aWMgXAorICAgLS1lbmFibGUtcGM5OD1ubyBcCisgICAtLWVuYWJsZS1XZXJyb3I9bm8gXAorICAgLS1kaXNhYmxlLWR5bmFtaWMtbG9hZGluZworJXtfX21ha2V9ICV7P19zbXBfbWZsYWdzfQorCislaW5zdGFsbAorJXtfX3JtfSAtcmYgJXtidWlsZHJvb3R9Cisle19fbWFrZX0gaW5zdGFsbCBERVNURElSPSV7YnVpbGRyb290fQorCislZmluZF9sYW5nICV7bmFtZX0KKworJWNsZWFuCisle19fcm19IC1yZiAle2J1aWxkcm9vdH0KKworJXBvc3QgLXAgL3NiaW4vbGRjb25maWcKKworJXBvc3R1biAtcCAvc2Jpbi9sZGNvbmZpZworCislZmlsZXMgLWYgJXtuYW1lfS5sYW5nCislZGVmYXR0cigtLHJvb3Qscm9vdCwtKQorJWRvYyBBVVRIT1JTIEJVR1MgQ09QWUlORyBDaGFuZ2VMb2cgTkVXUyBSRUFETUUgVEhBTktTIFRPRE8gZG9jL0FQSSBkb2MvRkFUCisle19zYmluZGlyfS9wYXJ0ZWQKKyV7X3NiaW5kaXJ9L3BhcnRwcm9iZQorJXtfbWFuZGlyfS9tYW44L3BhcnRlZC44Lmd6Cisle19tYW5kaXJ9L21hbjgvcGFydHByb2JlLjguZ3oKKyV7X2xpYmRpcn0vbGlicGFydGVkLSouc28uKgorJXtfbGliZGlyfS9saWJwYXJ0ZWQtKi5zby4qCisle19pbmZvZGlyfS9wYXJ0ZWQuaW5mby5negorCislZmlsZXMgZGV2ZWwKKyVkZWZhdHRyKC0scm9vdCxyb290LC0pCisle19pbmNsdWRlZGlyfS9wYXJ0ZWQKKyV7X2xpYmRpcn0vbGlicGFydGVkLmEKKyV7X2xpYmRpcn0vbGlicGFydGVkLnNvCisle19saWJkaXJ9L3BrZ2NvbmZpZy9saWJwYXJ0ZWQucGMKKworJWNoYW5nZWxvZworKiBUdWUgTWFyIDEzIDIwMDcgRGF2aWQgQ2FudHJlbGwgPGRjYW50cmVsbEByZWRoYXQuY29tPgorLSBVcGRhdGVkIHNwZWMgZmlsZQorCisqIE1vbiBNYXIgMTMgMjAwMCBGYWJpYW4gRW1tZXMgPGZhYkBvcmxlbi5kZT4KKy0gY2hhbmdlZCAidW5zZXQgTElOR1VBUyIgbGluZQorLSByZWludHJvZHVjZWQgJWJ1aWxkIHNlY3Rpb24gOykKKy0gc3RhcnRlZCBjaGFuZ2Vsb2cKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9wYXJ0ZWQuc3BlYy5pbiBiL3BhcnRlZC0xLjguNy9wYXJ0ZWQuc3BlYy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzUxMDdlCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L3BhcnRlZC5zcGVjLmluCkBAIC0wLDAgKzEsMTA1IEBACisjIERlZmF1bHQgdG8gZGlzYWJsaW5nIGRldmljZS1tYXBwZXIgYW5kIFNFTGludXgKKyVkZWZpbmUgdXNlX2Rldm1hcHBlciAwCislZGVmaW5lIHVzZV9zZWxpbnV4IDAKKyVkZWZpbmUgdXNlX3NlcG9sIDAKKworIyBFbmFibGUgZGV2aWNlLW1hcHBlciBzdXBwb3J0IGlmIHdlIGZpbmQgZGV2bWFwcGVyCislZGVmaW5lIHVzZV9kZXZtYXBwZXIgJShwa2ctY29uZmlnIC0tbGlicyBkZXZtYXBwZXIgPi9kZXYvbnVsbCAyPiYxOyBbICQ/IC1lcSAwIF0gJiYgZWNobyAxKQorCisjIEVuYWJsZSBTRUxpbnV4IGlmIHdlIGZpbmQgbGlic2VsaW51eCBhbmQgbGlic2Vwb2wKKyVkZWZpbmUgdXNlX3NlbGludXggJShbIC1yICV7X2xpYmRpcn0vbGlic2VsaW51eC5hIF0gJiYgZWNobyAxKQorJWRlZmluZSB1c2Vfc2Vwb2wgJShbIC1yICV7X2xpYmRpcn0vbGlic2Vwb2wuc28gXSAmJiBlY2hvIDEpCisKK1N1bW1hcnk6ICAgVGhlIEdOVSBkaXNrIHBhcnRpdGlvbiBtYW5pcHVsYXRpb24gcHJvZ3JhbQorTmFtZTogICAgICBAUEFDS0FHRUAKK1ZlcnNpb246ICAgQFZFUlNJT05ACitSZWxlYXNlOiAgIDEKK1NvdXJjZTogICAgZnRwOi8vZnRwLmdudS5vcmcvZ251LyV7bmFtZX0vJXtuYW1lfS0le3ZlcnNpb259LnRhci5iejIKK0J1aWxkcm9vdDogJXtfdG1wcGF0aH0vJXtuYW1lfS0le3ZlcnNpb259LSV7cmVsZWFzZX0tcm9vdC0lKCV7X19pZF91fSAtbikKK0xpY2Vuc2U6ICAgR1BMCitHcm91cDogICAgIEFwcGxpY2F0aW9ucy9TeXN0ZW0KKworQnVpbGRSZXF1aXJlczogZTJmc3Byb2dzLWRldmVsIHJlYWRsaW5lLWRldmVsIG5jdXJzZXMtZGV2ZWwKK0J1aWxkUmVxdWlyZXM6IGF1dG9tYWtlIGxpYnRvb2wgZ2V0dGV4dC1kZXZlbCB0ZXhpbmZvIHBrZ2NvbmZpZworCitCdWlsZFJlcXVpcmVzOiBkZXZpY2UtbWFwcGVyLWRldmVsLCBsaWJzZWxpbnV4LWRldmVsIGxpYnNlcG9sLWRldmVsCisKK1ByZXJlcTogL3NiaW4vaW5zdGFsbC1pbmZvCisKKyVkZXNjcmlwdGlvbgorVGhlIEdOVSBQYXJ0ZWQgcHJvZ3JhbSBhbGxvd3MgeW91IHRvIGNyZWF0ZSwgZGVzdHJveSwgcmVzaXplLCBtb3ZlLAorYW5kIGNvcHkgaGFyZCBkaXNrIHBhcnRpdGlvbnMuIFBhcnRlZCBjYW4gYmUgdXNlZCBmb3IgY3JlYXRpbmcgc3BhY2UKK2ZvciBuZXcgb3BlcmF0aW5nIHN5c3RlbXMsIHJlb3JnYW5pemluZyBkaXNrIHVzYWdlLCBhbmQgY29weWluZyBkYXRhCit0byBuZXcgaGFyZCBkaXNrcy4KKworJXBhY2thZ2UgZGV2ZWwKK1N1bW1hcnk6ICBGaWxlcyBmb3IgZGV2ZWxvcGluZyBhcHBzIHdoaWNoIHdpbGwgbWFuaXB1bGF0ZSBkaXNrIHBhcnRpdGlvbnMKK0dyb3VwOiAgICBEZXZlbG9wbWVudC9MaWJyYXJpZXMKK1JlcXVpcmVzOiAle25hbWV9LSV7dmVyc2lvbn0tJXtyZWxlYXNlfQorJWRlc2NyaXB0aW9uIGRldmVsCitUaGUgR05VIFBhcnRlZCBsaWJyYXJ5IGlzIGEgc2V0IG9mIHJvdXRpbmVzIGZvciBoYXJkIGRpc2sgcGFydGl0aW9uCittYW5pcHVsYXRpb24uIElmIHlvdSB3YW50IHRvIGRldmVsb3AgcHJvZ3JhbXMgdGhhdCBtYW5pcHVsYXRlIGRpc2sKK3BhcnRpdGlvbnMgYW5kIGZpbGVzeXN0ZW1zIHVzaW5nIHRoZSByb3V0aW5lcyBwcm92aWRlZCBieSB0aGUgR05VCitQYXJ0ZWQgbGlicmFyeSwgeW91IG5lZWQgdG8gaW5zdGFsbCB0aGlzIHBhY2thZ2UuCisKKyVwcmVwCislc2V0dXAgLXEKKworJWJ1aWxkCislY29uZmlndXJlIFwKKyAgIC0tZW5hYmxlLXNoYXJlZCBcCislaWYgIiV7dXNlX2Rldm1hcHBlcn0iID09ICIxIgorICAgLS1lbmFibGUtZGV2aWNlLW1hcHBlciBcCislZWxzZQorICAgLS1kaXNhYmxlLWRldm1hcHBlciBcCislZW5kaWYKKyVpZiAiJXt1c2Vfc2VsaW51eH0iID09ICIxIiAmJiAiJXt1c2Vfc2Vwb2x9IiA9PSAiMSIKKyAgIC0tZW5hYmxlLXNlbGludXggXAorJWVsc2UKKyAgIC0tZGlzYWJsZS1zZWxpbnV4IFwKKyVlbmRpZgorICAgLS1lbmFibGUtcGFydC1zdGF0aWMgXAorICAgLS1lbmFibGUtcGM5OD1ubyBcCisgICAtLWVuYWJsZS1XZXJyb3I9bm8gXAorICAgLS1kaXNhYmxlLWR5bmFtaWMtbG9hZGluZworJXtfX21ha2V9ICV7P19zbXBfbWZsYWdzfQorCislaW5zdGFsbAorJXtfX3JtfSAtcmYgJXtidWlsZHJvb3R9Cisle19fbWFrZX0gaW5zdGFsbCBERVNURElSPSV7YnVpbGRyb290fQorCislZmluZF9sYW5nICV7bmFtZX0KKworJWNsZWFuCisle19fcm19IC1yZiAle2J1aWxkcm9vdH0KKworJXBvc3QgLXAgL3NiaW4vbGRjb25maWcKKworJXBvc3R1biAtcCAvc2Jpbi9sZGNvbmZpZworCislZmlsZXMgLWYgJXtuYW1lfS5sYW5nCislZGVmYXR0cigtLHJvb3Qscm9vdCwtKQorJWRvYyBBVVRIT1JTIEJVR1MgQ09QWUlORyBDaGFuZ2VMb2cgTkVXUyBSRUFETUUgVEhBTktTIFRPRE8gZG9jL0FQSSBkb2MvRkFUCisle19zYmluZGlyfS9wYXJ0ZWQKKyV7X3NiaW5kaXJ9L3BhcnRwcm9iZQorJXtfbWFuZGlyfS9tYW44L3BhcnRlZC44Lmd6Cisle19tYW5kaXJ9L21hbjgvcGFydHByb2JlLjguZ3oKKyV7X2xpYmRpcn0vbGlicGFydGVkLSouc28uKgorJXtfbGliZGlyfS9saWJwYXJ0ZWQtKi5zby4qCisle19pbmZvZGlyfS9wYXJ0ZWQuaW5mby5negorCislZmlsZXMgZGV2ZWwKKyVkZWZhdHRyKC0scm9vdCxyb290LC0pCisle19pbmNsdWRlZGlyfS9wYXJ0ZWQKKyV7X2xpYmRpcn0vbGlicGFydGVkLmEKKyV7X2xpYmRpcn0vbGlicGFydGVkLnNvCisle19saWJkaXJ9L3BrZ2NvbmZpZy9saWJwYXJ0ZWQucGMKKworJWNoYW5nZWxvZworKiBUdWUgTWFyIDEzIDIwMDcgRGF2aWQgQ2FudHJlbGwgPGRjYW50cmVsbEByZWRoYXQuY29tPgorLSBVcGRhdGVkIHNwZWMgZmlsZQorCisqIE1vbiBNYXIgMTMgMjAwMCBGYWJpYW4gRW1tZXMgPGZhYkBvcmxlbi5kZT4KKy0gY2hhbmdlZCAidW5zZXQgTElOR1VBUyIgbGluZQorLSByZWludHJvZHVjZWQgJWJ1aWxkIHNlY3Rpb24gOykKKy0gc3RhcnRlZCBjaGFuZ2Vsb2cKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9wYXJ0ZWQvTWFrZWZpbGUuYW0gYi9wYXJ0ZWQtMS44LjcvcGFydGVkL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2OTkxMDIKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvcGFydGVkL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMjggQEAKK3NiaW5fUFJPR1JBTVMgPSBwYXJ0ZWQKKworcGFydGVkaW5jbHVkZWRpciAgICAgID0gLUkkKHRvcF9zcmNkaXIpL2xpYiAtSSQodG9wX3NyY2RpcikvaW5jbHVkZQorCitwYXJ0ZWRfU09VUkNFUyA9IGNvbW1hbmQuYwlcCisJCSBjb21tYW5kLmgJXAorCQkgcGFydGVkLmMJXAorCQkgc3RybGlzdC5jCVwKKwkJIHN0cmxpc3QuaAlcCisJCSB1aS5jCQlcCisJCSB1aS5oCQlcCisJCSB0YWJsZS5jCVwKKwkJIHRhYmxlLmgKKworI3BhcnRlZF9DRkxBR1MgPSAtREJVSUxESU5GTz0nIlwiJyQoQlVJTERJTkZPKSdcIiInCitwYXJ0ZWRfQ0ZMQUdTID0gLURCVUlMRElORk89CisKK3BhcnRlZF9MREFERCA9IFwKKyAgJCh0b3BfYnVpbGRkaXIpL2xpYi9saWJwYXJ0ZWQubGEgXAorICAkKHRvcF9idWlsZGRpcikvbGlicGFydGVkL2xpYnBhcnRlZC5sYSBcCisgICQoSU5UTExJQlMpICQoTElCUykgXAorICAkKFBBUlRFRF9MSUJTKQorCitwYXJ0ZWRfTERGTEFHUyA9ICQoUEFSVEVETERGTEFHUykKKworSU5DTFVERVMJPSAkKHBhcnRlZGluY2x1ZGVkaXIpICQoSU5UTElOQ1MpCisKK01BSU5UQUlORVJDTEVBTkZJTEVTID0gTWFrZWZpbGUuaW4KZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9wYXJ0ZWQvTWFrZWZpbGUuaW4gYi9wYXJ0ZWQtMS44LjcvcGFydGVkL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxMDEyN2YKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvcGFydGVkL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNzUxIEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjEwIGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK3NiaW5fUFJPR1JBTVMgPSBwYXJ0ZWQkKEVYRUVYVCkKK3N1YmRpciA9IHBhcnRlZAorRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9hYnNvbHV0ZS1oZWFkZXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvYWxsb2NhLm00ICQodG9wX3NyY2RpcikvbTQvYXNzZXJ0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2F0ZXhpdC5tNCAkKHRvcF9zcmNkaXIpL200L2NhbGxvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jbG9zZS1zdHJlYW0ubTQgJCh0b3Bfc3JjZGlyKS9tNC9jbG9zZW91dC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jb2Rlc2V0Lm00ICQodG9wX3NyY2RpcikvbTQvY29uZmlnLWgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZGlybmFtZS5tNCAkKHRvcF9zcmNkaXIpL200L2Rvcy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9kb3VibGUtc2xhc2gtcm9vdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9lcnJvci5tNCAkKHRvcF9zcmNkaXIpL200L2V4aXRmYWlsLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2V4dGVuc2lvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9mcGVuZGluZy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9mcmVlLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0b3B0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgJCh0b3Bfc3JjZGlyKS9tNC9nbGliYzIxLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2dudWxpYi1jb21tb24ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZ251bGliLWNvbXAubTQgJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pbmxpbmUubTQgJCh0b3Bfc3JjZGlyKS9tNC9pbnR0eXBlcy1wcmkubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaW50dHlwZXMubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItaWdub3JlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbG9jYWxjaGFyc2V0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xvbmctb3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2xvbmdsb25nLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21icnRvd2MubTQgJCh0b3Bfc3JjZGlyKS9tNC9tYnN0YXRlX3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWVtY2hyLm00ICQodG9wX3NyY2RpcikvbTQvbWVtY21wLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21lbWNweS5tNCAkKHRvcF9zcmNkaXIpL200L21lbW1vdmUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWVtc2V0Lm00ICQodG9wX3NyY2RpcikvbTQvbmxzLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3BvLm00ICQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcXVvdGVhcmcubTQgJCh0b3Bfc3JjZGlyKS9tNC9yZWdleC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9yZW5hbWUubTQgJCh0b3Bfc3JjZGlyKS9tNC9ycG1hdGNoLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3NhZmUtcmVhZC5tNCAkKHRvcF9zcmNkaXIpL200L3NhZmUtd3JpdGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3NpemVfdC5tNCAkKHRvcF9zcmNkaXIpL200L3N0ZGFyZy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdGRib29sLm00ICQodG9wX3NyY2RpcikvbTQvc3RkaW50Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0ZGxpYl9oLm00ICQodG9wX3NyY2RpcikvbTQvc3RyY3Nwbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdHJpbmdfaC5tNCAkKHRvcF9zcmNkaXIpL200L3N0cm5kdXAubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3Rybmxlbi5tNCAkKHRvcF9zcmNkaXIpL200L3N0cnRvZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdHJ0b2wubTQgJCh0b3Bfc3JjZGlyKS9tNC91bmlzdGRfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC91dGltYnVmLm00ICQodG9wX3NyY2RpcikvbTQvdXRpbWUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdXRpbWVzLW51bGwubTQgJCh0b3Bfc3JjZGlyKS9tNC93Y2hhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC93Y3R5cGUubTQgJCh0b3Bfc3JjZGlyKS9tNC93aW50X3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQveGFsbG9jLm00ICQodG9wX3NyY2RpcikvbTQveHN0cm5kdXAubTQgXAorCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCithbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorCSQoQUNMT0NBTF9NNCkKK21raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK2FtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChzYmluZGlyKSIKK3NiaW5QUk9HUkFNU19JTlNUQUxMID0gJChJTlNUQUxMX1BST0dSQU0pCitQUk9HUkFNUyA9ICQoc2Jpbl9QUk9HUkFNUykKK2FtX3BhcnRlZF9PQkpFQ1RTID0gcGFydGVkLWNvbW1hbmQuJChPQkpFWFQpIHBhcnRlZC1wYXJ0ZWQuJChPQkpFWFQpIFwKKwlwYXJ0ZWQtc3RybGlzdC4kKE9CSkVYVCkgcGFydGVkLXVpLiQoT0JKRVhUKSBcCisJcGFydGVkLXRhYmxlLiQoT0JKRVhUKQorcGFydGVkX09CSkVDVFMgPSAkKGFtX3BhcnRlZF9PQkpFQ1RTKQorYW1fX0RFUEVOREVOQ0lFU18xID0KK3BhcnRlZF9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGliL2xpYnBhcnRlZC5sYSBcCisJJCh0b3BfYnVpbGRkaXIpL2xpYnBhcnRlZC9saWJwYXJ0ZWQubGEgJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKKwkkKGFtX19ERVBFTkRFTkNJRVNfMSkgJChhbV9fREVQRU5ERU5DSUVTXzEpCitwYXJ0ZWRfTElOSyA9ICQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCisJLS1tb2RlPWxpbmsgJChDQ0xEKSAkKHBhcnRlZF9DRkxBR1MpICQoQ0ZMQUdTKSBcCisJJChwYXJ0ZWRfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorREVGQVVMVF9JTkNMVURFUyA9IC1JLiAtSSQodG9wX2J1aWxkZGlyKS9saWJAYW1fX2lzcmNACitkZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvZGVwY29tcAorYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKK0NPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAorCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0xUQ09NUElMRSA9ICQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCisJLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpIFwKKwkkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitDQ0xEID0gJChDQykKK0xJTksgPSAkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorCS0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpIFwKKwkkKExERkxBR1MpIC1vICRACitTT1VSQ0VTID0gJChwYXJ0ZWRfU09VUkNFUykKK0RJU1RfU09VUkNFUyA9ICQocGFydGVkX1NPVVJDRVMpCitFVEFHUyA9IGV0YWdzCitDVEFHUyA9IGN0YWdzCitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUJTT0xVVEVfSU5UVFlQRVNfSCA9IEBBQlNPTFVURV9JTlRUWVBFU19IQAorQUJTT0xVVEVfU1RESU5UX0ggPSBAQUJTT0xVVEVfU1RESU5UX0hACitBQlNPTFVURV9TVERMSUJfSCA9IEBBQlNPTFVURV9TVERMSUJfSEAKK0FCU09MVVRFX1NUUklOR19IID0gQEFCU09MVVRFX1NUUklOR19IQAorQUJTT0xVVEVfVU5JU1REX0ggPSBAQUJTT0xVVEVfVU5JU1REX0hACitBQlNPTFVURV9XQ0hBUl9IID0gQEFCU09MVVRFX1dDSEFSX0hACitBQlNPTFVURV9XQ1RZUEVfSCA9IEBBQlNPTFVURV9XQ1RZUEVfSEAKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FMTE9DQSA9IEBBTExPQ0FACitBTExPQ0FfSCA9IEBBTExPQ0FfSEAKK0FNVEFSID0gQEFNVEFSQAorQVIgPSBAQVJACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0JJVFNJWkVPRl9QVFJESUZGX1QgPSBAQklUU0laRU9GX1BUUkRJRkZfVEAKK0JJVFNJWkVPRl9TSUdfQVRPTUlDX1QgPSBAQklUU0laRU9GX1NJR19BVE9NSUNfVEAKK0JJVFNJWkVPRl9TSVpFX1QgPSBAQklUU0laRU9GX1NJWkVfVEAKK0JJVFNJWkVPRl9XQ0hBUl9UID0gQEJJVFNJWkVPRl9XQ0hBUl9UQAorQklUU0laRU9GX1dJTlRfVCA9IEBCSVRTSVpFT0ZfV0lOVF9UQAorQlVJTERJTkZPID0gQEJVSUxESU5GT0AKK0NDID0gQENDQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDSEVDS19DRkxBR1MgPSBAQ0hFQ0tfQ0ZMQUdTQAorQ0hFQ0tfTElCUyA9IEBDSEVDS19MSUJTQAorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ1hYID0gQENYWEAKK0NYWENQUCA9IEBDWFhDUFBACitDWFhERVBNT0RFID0gQENYWERFUE1PREVACitDWFhGTEFHUyA9IEBDWFhGTEFHU0AKK0NZR1BBVEhfVyA9IEBDWUdQQVRIX1dACitERUZTID0gQERFRlNACitERVBESVIgPSBAREVQRElSQAorRExfTElCUyA9IEBETF9MSUJTQAorRE1fTElCUyA9IEBETV9MSUJTQAorRUNITyA9IEBFQ0hPQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFWEVFWFQgPSBARVhFRVhUQAorRjc3ID0gQEY3N0AKK0ZGTEFHUyA9IEBGRkxBR1NACitHRVRPUFRfSCA9IEBHRVRPUFRfSEAKK0dMSUJDMjEgPSBAR0xJQkMyMUAKK0dNU0dGTVQgPSBAR01TR0ZNVEAKK0dNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAorR05VTElCX0NIT1dOID0gQEdOVUxJQl9DSE9XTkAKK0dOVUxJQl9EVVAyID0gQEdOVUxJQl9EVVAyQAorR05VTElCX0ZDSERJUiA9IEBHTlVMSUJfRkNIRElSQAorR05VTElCX0ZUUlVOQ0FURSA9IEBHTlVMSUJfRlRSVU5DQVRFQAorR05VTElCX0dFVENXRCA9IEBHTlVMSUJfR0VUQ1dEQAorR05VTElCX0dFVExPR0lOX1IgPSBAR05VTElCX0dFVExPR0lOX1JACitHTlVMSUJfR0VUU1VCT1BUID0gQEdOVUxJQl9HRVRTVUJPUFRACitHTlVMSUJfSU1BWEFCUyA9IEBHTlVMSUJfSU1BWEFCU0AKK0dOVUxJQl9JTUFYRElWID0gQEdOVUxJQl9JTUFYRElWQAorR05VTElCX01CU0NBU0VDTVAgPSBAR05VTElCX01CU0NBU0VDTVBACitHTlVMSUJfTUJTQ0FTRVNUUiA9IEBHTlVMSUJfTUJTQ0FTRVNUUkAKK0dOVUxJQl9NQlNDSFIgPSBAR05VTElCX01CU0NIUkAKK0dOVUxJQl9NQlNDU1BOID0gQEdOVUxJQl9NQlNDU1BOQAorR05VTElCX01CU0xFTiA9IEBHTlVMSUJfTUJTTEVOQAorR05VTElCX01CU05DQVNFQ01QID0gQEdOVUxJQl9NQlNOQ0FTRUNNUEAKK0dOVUxJQl9NQlNQQlJLID0gQEdOVUxJQl9NQlNQQlJLQAorR05VTElCX01CU1BDQVNFQ01QID0gQEdOVUxJQl9NQlNQQ0FTRUNNUEAKK0dOVUxJQl9NQlNSQ0hSID0gQEdOVUxJQl9NQlNSQ0hSQAorR05VTElCX01CU1NFUCA9IEBHTlVMSUJfTUJTU0VQQAorR05VTElCX01CU1NQTiA9IEBHTlVMSUJfTUJTU1BOQAorR05VTElCX01CU1NUUiA9IEBHTlVMSUJfTUJTU1RSQAorR05VTElCX01CU1RPS19SID0gQEdOVUxJQl9NQlNUT0tfUkAKK0dOVUxJQl9NRU1NRU0gPSBAR05VTElCX01FTU1FTUAKK0dOVUxJQl9NRU1QQ1BZID0gQEdOVUxJQl9NRU1QQ1BZQAorR05VTElCX01FTVJDSFIgPSBAR05VTElCX01FTVJDSFJACitHTlVMSUJfTUtEVEVNUCA9IEBHTlVMSUJfTUtEVEVNUEAKK0dOVUxJQl9NS1NURU1QID0gQEdOVUxJQl9NS1NURU1QQAorR05VTElCX1JFQURMSU5LID0gQEdOVUxJQl9SRUFETElOS0AKK0dOVUxJQl9TTEVFUCA9IEBHTlVMSUJfU0xFRVBACitHTlVMSUJfU1RQQ1BZID0gQEdOVUxJQl9TVFBDUFlACitHTlVMSUJfU1RQTkNQWSA9IEBHTlVMSUJfU1RQTkNQWUAKK0dOVUxJQl9TVFJDQVNFU1RSID0gQEdOVUxJQl9TVFJDQVNFU1RSQAorR05VTElCX1NUUkNIUk5VTCA9IEBHTlVMSUJfU1RSQ0hSTlVMQAorR05VTElCX1NUUkRVUCA9IEBHTlVMSUJfU1RSRFVQQAorR05VTElCX1NUUk5EVVAgPSBAR05VTElCX1NUUk5EVVBACitHTlVMSUJfU1RSTkxFTiA9IEBHTlVMSUJfU1RSTkxFTkAKK0dOVUxJQl9TVFJQQlJLID0gQEdOVUxJQl9TVFJQQlJLQAorR05VTElCX1NUUlNFUCA9IEBHTlVMSUJfU1RSU0VQQAorR05VTElCX1NUUlRPSU1BWCA9IEBHTlVMSUJfU1RSVE9JTUFYQAorR05VTElCX1NUUlRPS19SID0gQEdOVUxJQl9TVFJUT0tfUkAKK0dOVUxJQl9TVFJUT1VNQVggPSBAR05VTElCX1NUUlRPVU1BWEAKK0dSRVAgPSBAR1JFUEAKK0hBVkVfREVDTF9HRVRMT0dJTl9SID0gQEhBVkVfREVDTF9HRVRMT0dJTl9SQAorSEFWRV9ERUNMX0lNQVhBQlMgPSBASEFWRV9ERUNMX0lNQVhBQlNACitIQVZFX0RFQ0xfSU1BWERJViA9IEBIQVZFX0RFQ0xfSU1BWERJVkAKK0hBVkVfREVDTF9NRU1NRU0gPSBASEFWRV9ERUNMX01FTU1FTUAKK0hBVkVfREVDTF9NRU1SQ0hSID0gQEhBVkVfREVDTF9NRU1SQ0hSQAorSEFWRV9ERUNMX1NUUkRVUCA9IEBIQVZFX0RFQ0xfU1RSRFVQQAorSEFWRV9ERUNMX1NUUk5DQVNFQ01QID0gQEhBVkVfREVDTF9TVFJOQ0FTRUNNUEAKK0hBVkVfREVDTF9TVFJORFVQID0gQEhBVkVfREVDTF9TVFJORFVQQAorSEFWRV9ERUNMX1NUUk5MRU4gPSBASEFWRV9ERUNMX1NUUk5MRU5ACitIQVZFX0RFQ0xfU1RSVE9JTUFYID0gQEhBVkVfREVDTF9TVFJUT0lNQVhACitIQVZFX0RFQ0xfU1RSVE9LX1IgPSBASEFWRV9ERUNMX1NUUlRPS19SQAorSEFWRV9ERUNMX1NUUlRPVU1BWCA9IEBIQVZFX0RFQ0xfU1RSVE9VTUFYQAorSEFWRV9EVVAyID0gQEhBVkVfRFVQMkAKK0hBVkVfRlRSVU5DQVRFID0gQEhBVkVfRlRSVU5DQVRFQAorSEFWRV9HRVRTVUJPUFQgPSBASEFWRV9HRVRTVUJPUFRACitIQVZFX0lOVFRZUEVTX0ggPSBASEFWRV9JTlRUWVBFU19IQAorSEFWRV9JU1dDTlRSTCA9IEBIQVZFX0lTV0NOVFJMQAorSEFWRV9MT05HX0xPTkdfSU5UID0gQEhBVkVfTE9OR19MT05HX0lOVEAKK0hBVkVfTUVNUENQWSA9IEBIQVZFX01FTVBDUFlACitIQVZFX01LRFRFTVAgPSBASEFWRV9NS0RURU1QQAorSEFWRV9SRUFETElOSyA9IEBIQVZFX1JFQURMSU5LQAorSEFWRV9TSUdORURfU0lHX0FUT01JQ19UID0gQEhBVkVfU0lHTkVEX1NJR19BVE9NSUNfVEAKK0hBVkVfU0lHTkVEX1dDSEFSX1QgPSBASEFWRV9TSUdORURfV0NIQVJfVEAKK0hBVkVfU0lHTkVEX1dJTlRfVCA9IEBIQVZFX1NJR05FRF9XSU5UX1RACitIQVZFX1NMRUVQID0gQEhBVkVfU0xFRVBACitIQVZFX1NURElOVF9IID0gQEhBVkVfU1RESU5UX0hACitIQVZFX1NUUENQWSA9IEBIQVZFX1NUUENQWUAKK0hBVkVfU1RQTkNQWSA9IEBIQVZFX1NUUE5DUFlACitIQVZFX1NUUkNBU0VDTVAgPSBASEFWRV9TVFJDQVNFQ01QQAorSEFWRV9TVFJDQVNFU1RSID0gQEhBVkVfU1RSQ0FTRVNUUkAKK0hBVkVfU1RSQ0hSTlVMID0gQEhBVkVfU1RSQ0hSTlVMQAorSEFWRV9TVFJORFVQID0gQEhBVkVfU1RSTkRVUEAKK0hBVkVfU1RSUEJSSyA9IEBIQVZFX1NUUlBCUktACitIQVZFX1NUUlNFUCA9IEBIQVZFX1NUUlNFUEAKK0hBVkVfU1lTX0JJVFlQRVNfSCA9IEBIQVZFX1NZU19CSVRZUEVTX0hACitIQVZFX1NZU19JTlRUWVBFU19IID0gQEhBVkVfU1lTX0lOVFRZUEVTX0hACitIQVZFX1NZU19UWVBFU19IID0gQEhBVkVfU1lTX1RZUEVTX0hACitIQVZFX1VOSVNURF9IID0gQEhBVkVfVU5JU1REX0hACitIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlQgPSBASEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UQAorSEFWRV9XQ1RZUEVfSCA9IEBIQVZFX1dDVFlQRV9IQAorSEFWRV9XSU5UX1QgPSBASEFWRV9XSU5UX1RACitIQVZFX19CT09MID0gQEhBVkVfX0JPT0xACitJTlNUQUxMID0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lOVExJTkNTID0gQElOVExJTkNTQAorSU5UTExJQlMgPSBASU5UTExJQlNACitJTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACitJTlRUWVBFU19IID0gQElOVFRZUEVTX0hACitMREZMQUdTID0gQExERkxBR1NACitMSUJJQ09OViA9IEBMSUJJQ09OVkAKK0xJQklOVEwgPSBATElCSU5UTEAKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xOX1MgPSBATE5fU0AKK0xUQUxMT0NBID0gQExUQUxMT0NBQAorTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAorTFRMSUJJTlRMID0gQExUTElCSU5UTEAKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitMVF9BR0UgPSBATFRfQUdFQAorTFRfQ1VSUkVOVCA9IEBMVF9DVVJSRU5UQAorTFRfUkVMRUFTRSA9IEBMVF9SRUxFQVNFQAorTFRfUkVWSVNJT04gPSBATFRfUkVWSVNJT05ACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01LRElSX1AgPSBATUtESVJfUEAKK01TR0ZNVCA9IEBNU0dGTVRACitNU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACitNU0dNRVJHRSA9IEBNU0dNRVJHRUAKK09CSkVYVCA9IEBPQkpFWFRACitPUyA9IEBPU0AKK09TX0xJQlMgPSBAT1NfTElCU0AKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQVJURURMREZMQUdTID0gQFBBUlRFRExERkxBR1NACitQQVJURURfTElCUyA9IEBQQVJURURfTElCU0AKK1BBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAorUE9TVUIgPSBAUE9TVUJACitQT1dfTElCID0gQFBPV19MSUJACitQUklQVFJfUFJFRklYID0gQFBSSVBUUl9QUkVGSVhACitQUklfTUFDUk9TX0JST0tFTiA9IEBQUklfTUFDUk9TX0JST0tFTkAKK1BUUkRJRkZfVF9TVUZGSVggPSBAUFRSRElGRl9UX1NVRkZJWEAKK1JBTkxJQiA9IEBSQU5MSUJACitSRUlTRVJfTElCUyA9IEBSRUlTRVJfTElCU0AKK1JFUExBQ0VfQ0hPV04gPSBAUkVQTEFDRV9DSE9XTkAKK1JFUExBQ0VfRkNIRElSID0gQFJFUExBQ0VfRkNIRElSQAorUkVQTEFDRV9HRVRDV0QgPSBAUkVQTEFDRV9HRVRDV0RACitSRVBMQUNFX01LU1RFTVAgPSBAUkVQTEFDRV9NS1NURU1QQAorU0VEID0gQFNFREAKK1NFTElOVVhfTElCUyA9IEBTRUxJTlVYX0xJQlNACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU0lHX0FUT01JQ19UX1NVRkZJWCA9IEBTSUdfQVRPTUlDX1RfU1VGRklYQAorU0laRV9UX1NVRkZJWCA9IEBTSVpFX1RfU1VGRklYQAorU1REQk9PTF9IID0gQFNUREJPT0xfSEAKK1NURElOVF9IID0gQFNURElOVF9IQAorU1RSSVAgPSBAU1RSSVBACitVU0VfTkxTID0gQFVTRV9OTFNACitVVUlEX0xJQlMgPSBAVVVJRF9MSUJTQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorV0NIQVJfSCA9IEBXQ0hBUl9IQAorV0NIQVJfVF9TVUZGSVggPSBAV0NIQVJfVF9TVUZGSVhACitXQ1RZUEVfSCA9IEBXQ1RZUEVfSEAKK1dJTlRfVF9TVUZGSVggPSBAV0lOVF9UX1NVRkZJWEAKK1hHRVRURVhUID0gQFhHRVRURVhUQAorWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKK2Fic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACithYnNfc3JjZGlyID0gQGFic19zcmNkaXJACithYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACithYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKK2FjX2N0X0Y3NyA9IEBhY19jdF9GNzdACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAorZ2xfTElCT0JKUyA9IEBnbF9MSUJPQkpTQAorZ2xfTFRMSUJPQkpTID0gQGdsX0xUTElCT0JKU0AKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3BzZGlyID0gQHBzZGlyQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzcmNkaXIgPSBAc3JjZGlyQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKK3RvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitwYXJ0ZWRpbmNsdWRlZGlyID0gLUkkKHRvcF9zcmNkaXIpL2xpYiAtSSQodG9wX3NyY2RpcikvaW5jbHVkZQorcGFydGVkX1NPVVJDRVMgPSBjb21tYW5kLmMJXAorCQkgY29tbWFuZC5oCVwKKwkJIHBhcnRlZC5jCVwKKwkJIHN0cmxpc3QuYwlcCisJCSBzdHJsaXN0LmgJXAorCQkgdWkuYwkJXAorCQkgdWkuaAkJXAorCQkgdGFibGUuYwlcCisJCSB0YWJsZS5oCisKKworI3BhcnRlZF9DRkxBR1MgPSAtREJVSUxESU5GTz0nIlwiJyQoQlVJTERJTkZPKSdcIiInCitwYXJ0ZWRfQ0ZMQUdTID0gLURCVUlMRElORk89CitwYXJ0ZWRfTERBREQgPSBcCisgICQodG9wX2J1aWxkZGlyKS9saWIvbGlicGFydGVkLmxhIFwKKyAgJCh0b3BfYnVpbGRkaXIpL2xpYnBhcnRlZC9saWJwYXJ0ZWQubGEgXAorICAkKElOVExMSUJTKSAkKExJQlMpIFwKKyAgJChQQVJURURfTElCUykKKworcGFydGVkX0xERkxBR1MgPSAkKFBBUlRFRExERkxBR1MpCitJTkNMVURFUyA9ICQocGFydGVkaW5jbHVkZWRpcikgJChJTlRMSU5DUykKK01BSU5UQUlORVJDTEVBTkZJTEVTID0gTWFrZWZpbGUuaW4KK2FsbDogYWxsLWFtCisKKy5TVUZGSVhFUzoKKy5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoIFwKKwkJJiYgZXhpdCAwOyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSAgcGFydGVkL01ha2VmaWxlJzsgXAorCWNkICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1nbnUgIHBhcnRlZC9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKK2luc3RhbGwtc2JpblBST0dSQU1TOiAkKHNiaW5fUFJPR1JBTVMpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJdGVzdCAteiAiJChzYmluZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQoc2JpbmRpcikiCisJQGxpc3Q9JyQoc2Jpbl9QUk9HUkFNUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIHAxPWBlY2hvICQkcHxzZWQgJ3MvJChFWEVFWFQpJCQvLydgOyBcCisJICBpZiB0ZXN0IC1mICQkcCBcCisJICAgICB8fCB0ZXN0IC1mICQkcDEgXAorCSAgOyB0aGVuIFwKKwkgICAgZj1gZWNobyAiJCRwMSIgfCBzZWQgJ3MsXi4qLywsOyQodHJhbnNmb3JtKTtzLyQkLyQoRVhFRVhUKS8nYDsgXAorCSAgIGVjaG8gIiAkKElOU1RBTExfUFJPR1JBTV9FTlYpICQoTElCVE9PTCkgLS1tb2RlPWluc3RhbGwgJChzYmluUFJPR1JBTVNfSU5TVEFMTCkgJyQkcCcgJyQoREVTVERJUikkKHNiaW5kaXIpLyQkZiciOyBcCisJICAgJChJTlNUQUxMX1BST0dSQU1fRU5WKSAkKExJQlRPT0wpIC0tbW9kZT1pbnN0YWxsICQoc2JpblBST0dSQU1TX0lOU1RBTEwpICIkJHAiICIkKERFU1RESVIpJChzYmluZGlyKS8kJGYiIHx8IGV4aXQgMTsgXAorCSAgZWxzZSA6OyBmaTsgXAorCWRvbmUKKwordW5pbnN0YWxsLXNiaW5QUk9HUkFNUzoKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKHNiaW5fUFJPR1JBTVMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBmPWBlY2hvICIkJHAiIHwgc2VkICdzLF4uKi8sLDtzLyQoRVhFRVhUKSQkLy87JCh0cmFuc2Zvcm0pO3MvJCQvJChFWEVFWFQpLydgOyBcCisJICBlY2hvICIgcm0gLWYgJyQoREVTVERJUikkKHNiaW5kaXIpLyQkZiciOyBcCisJICBybSAtZiAiJChERVNURElSKSQoc2JpbmRpcikvJCRmIjsgXAorCWRvbmUKKworY2xlYW4tc2JpblBST0dSQU1TOgorCUBsaXN0PSckKHNiaW5fUFJPR1JBTVMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBmPWBlY2hvICQkcHxzZWQgJ3MvJChFWEVFWFQpJCQvLydgOyBcCisJICBlY2hvICIgcm0gLWYgJCRwICQkZiI7IFwKKwkgIHJtIC1mICQkcCAkJGYgOyBcCisJZG9uZQorcGFydGVkJChFWEVFWFQpOiAkKHBhcnRlZF9PQkpFQ1RTKSAkKHBhcnRlZF9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBwYXJ0ZWQkKEVYRUVYVCkKKwkkKHBhcnRlZF9MSU5LKSAkKHBhcnRlZF9PQkpFQ1RTKSAkKHBhcnRlZF9MREFERCkgJChMSUJTKQorCittb3N0bHljbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLiQoT0JKRVhUKQorCitkaXN0Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi50YWIuYworCitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcGFydGVkLWNvbW1hbmQuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3BhcnRlZC1wYXJ0ZWQuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3BhcnRlZC1zdHJsaXN0LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9wYXJ0ZWQtdGFibGUuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3BhcnRlZC11aS5Qb0BhbV9fcXVvdGVACisKKy5jLm86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgJDwKKworLmMub2JqOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgYCQoQ1lHUEFUSF9XKSAnJDwnYAorCisuYy5sbzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAorCitwYXJ0ZWQtY29tbWFuZC5vOiBjb21tYW5kLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHBhcnRlZF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgcGFydGVkLWNvbW1hbmQubyAtTUQgLU1QIC1NRiAkKERFUERJUikvcGFydGVkLWNvbW1hbmQuVHBvIC1jIC1vIHBhcnRlZC1jb21tYW5kLm8gYHRlc3QgLWYgJ2NvbW1hbmQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgY29tbWFuZC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvcGFydGVkLWNvbW1hbmQuVHBvICQoREVQRElSKS9wYXJ0ZWQtY29tbWFuZC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nY29tbWFuZC5jJyBvYmplY3Q9J3BhcnRlZC1jb21tYW5kLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHBhcnRlZF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBwYXJ0ZWQtY29tbWFuZC5vIGB0ZXN0IC1mICdjb21tYW5kLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGNvbW1hbmQuYworCitwYXJ0ZWQtY29tbWFuZC5vYmo6IGNvbW1hbmQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocGFydGVkX0NGTEFHUykgJChDRkxBR1MpIC1NVCBwYXJ0ZWQtY29tbWFuZC5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL3BhcnRlZC1jb21tYW5kLlRwbyAtYyAtbyBwYXJ0ZWQtY29tbWFuZC5vYmogYGlmIHRlc3QgLWYgJ2NvbW1hbmQuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdjb21tYW5kLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2NvbW1hbmQuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL3BhcnRlZC1jb21tYW5kLlRwbyAkKERFUERJUikvcGFydGVkLWNvbW1hbmQuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2NvbW1hbmQuYycgb2JqZWN0PSdwYXJ0ZWQtY29tbWFuZC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHBhcnRlZF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBwYXJ0ZWQtY29tbWFuZC5vYmogYGlmIHRlc3QgLWYgJ2NvbW1hbmQuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdjb21tYW5kLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2NvbW1hbmQuYyc7IGZpYAorCitwYXJ0ZWQtcGFydGVkLm86IHBhcnRlZC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChwYXJ0ZWRfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHBhcnRlZC1wYXJ0ZWQubyAtTUQgLU1QIC1NRiAkKERFUERJUikvcGFydGVkLXBhcnRlZC5UcG8gLWMgLW8gcGFydGVkLXBhcnRlZC5vIGB0ZXN0IC1mICdwYXJ0ZWQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgcGFydGVkLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9wYXJ0ZWQtcGFydGVkLlRwbyAkKERFUERJUikvcGFydGVkLXBhcnRlZC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0ncGFydGVkLmMnIG9iamVjdD0ncGFydGVkLXBhcnRlZC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChwYXJ0ZWRfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gcGFydGVkLXBhcnRlZC5vIGB0ZXN0IC1mICdwYXJ0ZWQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgcGFydGVkLmMKKworcGFydGVkLXBhcnRlZC5vYmo6IHBhcnRlZC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChwYXJ0ZWRfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHBhcnRlZC1wYXJ0ZWQub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9wYXJ0ZWQtcGFydGVkLlRwbyAtYyAtbyBwYXJ0ZWQtcGFydGVkLm9iaiBgaWYgdGVzdCAtZiAncGFydGVkLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAncGFydGVkLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3BhcnRlZC5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvcGFydGVkLXBhcnRlZC5UcG8gJChERVBESVIpL3BhcnRlZC1wYXJ0ZWQuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J3BhcnRlZC5jJyBvYmplY3Q9J3BhcnRlZC1wYXJ0ZWQub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChwYXJ0ZWRfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gcGFydGVkLXBhcnRlZC5vYmogYGlmIHRlc3QgLWYgJ3BhcnRlZC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3BhcnRlZC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9wYXJ0ZWQuYyc7IGZpYAorCitwYXJ0ZWQtc3RybGlzdC5vOiBzdHJsaXN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHBhcnRlZF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgcGFydGVkLXN0cmxpc3QubyAtTUQgLU1QIC1NRiAkKERFUERJUikvcGFydGVkLXN0cmxpc3QuVHBvIC1jIC1vIHBhcnRlZC1zdHJsaXN0Lm8gYHRlc3QgLWYgJ3N0cmxpc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3RybGlzdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkKERFUERJUikvcGFydGVkLXN0cmxpc3QuVHBvICQoREVQRElSKS9wYXJ0ZWQtc3RybGlzdC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nc3RybGlzdC5jJyBvYmplY3Q9J3BhcnRlZC1zdHJsaXN0Lm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHBhcnRlZF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBwYXJ0ZWQtc3RybGlzdC5vIGB0ZXN0IC1mICdzdHJsaXN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHN0cmxpc3QuYworCitwYXJ0ZWQtc3RybGlzdC5vYmo6IHN0cmxpc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocGFydGVkX0NGTEFHUykgJChDRkxBR1MpIC1NVCBwYXJ0ZWQtc3RybGlzdC5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL3BhcnRlZC1zdHJsaXN0LlRwbyAtYyAtbyBwYXJ0ZWQtc3RybGlzdC5vYmogYGlmIHRlc3QgLWYgJ3N0cmxpc3QuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdzdHJsaXN0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3N0cmxpc3QuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL3BhcnRlZC1zdHJsaXN0LlRwbyAkKERFUERJUikvcGFydGVkLXN0cmxpc3QuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J3N0cmxpc3QuYycgb2JqZWN0PSdwYXJ0ZWQtc3RybGlzdC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHBhcnRlZF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBwYXJ0ZWQtc3RybGlzdC5vYmogYGlmIHRlc3QgLWYgJ3N0cmxpc3QuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdzdHJsaXN0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3N0cmxpc3QuYyc7IGZpYAorCitwYXJ0ZWQtdWkubzogdWkuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocGFydGVkX0NGTEFHUykgJChDRkxBR1MpIC1NVCBwYXJ0ZWQtdWkubyAtTUQgLU1QIC1NRiAkKERFUERJUikvcGFydGVkLXVpLlRwbyAtYyAtbyBwYXJ0ZWQtdWkubyBgdGVzdCAtZiAndWkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdWkuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL3BhcnRlZC11aS5UcG8gJChERVBESVIpL3BhcnRlZC11aS5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0ndWkuYycgb2JqZWN0PSdwYXJ0ZWQtdWkubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocGFydGVkX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHBhcnRlZC11aS5vIGB0ZXN0IC1mICd1aS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B1aS5jCisKK3BhcnRlZC11aS5vYmo6IHVpLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHBhcnRlZF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgcGFydGVkLXVpLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvcGFydGVkLXVpLlRwbyAtYyAtbyBwYXJ0ZWQtdWkub2JqIGBpZiB0ZXN0IC1mICd1aS5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3VpLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3VpLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9wYXJ0ZWQtdWkuVHBvICQoREVQRElSKS9wYXJ0ZWQtdWkuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J3VpLmMnIG9iamVjdD0ncGFydGVkLXVpLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocGFydGVkX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHBhcnRlZC11aS5vYmogYGlmIHRlc3QgLWYgJ3VpLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAndWkuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvdWkuYyc7IGZpYAorCitwYXJ0ZWQtdGFibGUubzogdGFibGUuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocGFydGVkX0NGTEFHUykgJChDRkxBR1MpIC1NVCBwYXJ0ZWQtdGFibGUubyAtTUQgLU1QIC1NRiAkKERFUERJUikvcGFydGVkLXRhYmxlLlRwbyAtYyAtbyBwYXJ0ZWQtdGFibGUubyBgdGVzdCAtZiAndGFibGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdGFibGUuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpL3BhcnRlZC10YWJsZS5UcG8gJChERVBESVIpL3BhcnRlZC10YWJsZS5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0ndGFibGUuYycgb2JqZWN0PSdwYXJ0ZWQtdGFibGUubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocGFydGVkX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHBhcnRlZC10YWJsZS5vIGB0ZXN0IC1mICd0YWJsZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B0YWJsZS5jCisKK3BhcnRlZC10YWJsZS5vYmo6IHRhYmxlLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHBhcnRlZF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgcGFydGVkLXRhYmxlLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvcGFydGVkLXRhYmxlLlRwbyAtYyAtbyBwYXJ0ZWQtdGFibGUub2JqIGBpZiB0ZXN0IC1mICd0YWJsZS5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3RhYmxlLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3RhYmxlLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS9wYXJ0ZWQtdGFibGUuVHBvICQoREVQRElSKS9wYXJ0ZWQtdGFibGUuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J3RhYmxlLmMnIG9iamVjdD0ncGFydGVkLXRhYmxlLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocGFydGVkX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHBhcnRlZC10YWJsZS5vYmogYGlmIHRlc3QgLWYgJ3RhYmxlLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAndGFibGUuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvdGFibGUuYyc7IGZpYAorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJbWtpZCAtZklEICQkdW5pcXVlCit0YWdzOiBUQUdTCisKK1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJdGFncz07IFwKKwloZXJlPWBwd2RgOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKwkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKKwkgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgJCR0YWdzICQkdW5pcXVlOyBcCisJZmkKK2N0YWdzOiBDVEFHUworQ1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJdGFncz07IFwKKwloZXJlPWBwd2RgOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIiBcCisJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCisJICAgICAkJHRhZ3MgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmIGNkICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAkJGhlcmUKKworZGlzdGNsZWFuLXRhZ3M6CisJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1wUiAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLXBSICQkZC8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgJChkaXN0ZGlyKS8kJGZpbGUgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICQoZGlzdGRpcikvJCRmaWxlIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1hbQorYWxsLWFtOiBNYWtlZmlsZSAkKFBST0dSQU1TKQoraW5zdGFsbGRpcnM6CisJZm9yIGRpciBpbiAiJChERVNURElSKSQoc2JpbmRpcikiOyBkbyBcCisJICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCisJZG9uZQoraW5zdGFsbDogaW5zdGFsbC1hbQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCit1bmluc3RhbGw6IHVuaW5zdGFsbC1hbQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQoraW5zdGFsbC1zdHJpcDoKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKKwkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKKwktdGVzdCAteiAiJChNQUlOVEFJTkVSQ0xFQU5GSUxFUykiIHx8IHJtIC1mICQoTUFJTlRBSU5FUkNMRUFORklMRVMpCitjbGVhbjogY2xlYW4tYW0KKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1zYmluUFJPR1JBTVMgXAorCW1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1leGVjLWFtOiBpbnN0YWxsLXNiaW5QUk9HUkFNUworCitpbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1hbQorCitwZGYtYW06CisKK3BzOiBwcy1hbQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtc2JpblBST0dSQU1TCisKKy5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKKworLlBIT05ZOiBDVEFHUyBHVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAorCWNsZWFuLWxpYnRvb2wgY2xlYW4tc2JpblBST0dSQU1TIGN0YWdzIGRpc3RjbGVhbiBcCisJZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgXAorCWRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIFwKKwlpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBcCisJaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgXAorCWluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIFwKKwlpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAorCWluc3RhbGwtc2JpblBST0dSQU1TIGluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIFwKKwlpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBcCisJbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWNvbXBpbGUgXAorCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKKwl0YWdzIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gdW5pbnN0YWxsLXNiaW5QUk9HUkFNUworCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvcGFydGVkL2NvbW1hbmQuYyBiL3BhcnRlZC0xLjguNy9wYXJ0ZWQvY29tbWFuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjZTkwOTAKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvcGFydGVkL2NvbW1hbmQuYwpAQCAtMCwwICsxLDE0MSBAQAorLyoKKyAgICBwYXJ0ZWQgLSBhIGZyb250ZW5kIHRvIGxpYnBhcnRlZAorICAgIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKKyovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlICJjb21tYW5kLmgiCisjaW5jbHVkZSAidWkuaCIKKworI2luY2x1ZGUgPHBhcnRlZC9kZWJ1Zy5oPgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK0NvbW1hbmQqCitjb21tYW5kX2NyZWF0ZSAoY29uc3QgU3RyTGlzdCogbmFtZXMsCisJCWludCAoKm1ldGhvZCkgKFBlZERldmljZSoqIGRldiksCisJCWNvbnN0IFN0ckxpc3QqIHN1bW1hcnksCisJCWNvbnN0IFN0ckxpc3QqIGhlbHAsCisgICAgICAgICAgICAgICAgY29uc3QgaW50IG5vbl9pbnRlcmFjdGl2ZSkKK3sKKwlDb21tYW5kKgljbWQ7CisKKwljbWQgPSBtYWxsb2MgKHNpemVvZiAoQ29tbWFuZCkpOworICAgICAgICAKKyAgICAgICAgaWYgKG5vbl9pbnRlcmFjdGl2ZSkKKyAgICAgICAgICAgICAgICBjbWQtPm5vbl9pbnRlcmFjdGl2ZSA9IDE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjbWQtPm5vbl9pbnRlcmFjdGl2ZSA9IDA7CisgICAgICAgICAgICAgICAgCisJY21kLT5uYW1lcyA9IChTdHJMaXN0KikgbmFtZXM7CisJY21kLT5tZXRob2QgPSBtZXRob2Q7CisJY21kLT5zdW1tYXJ5ID0gKFN0ckxpc3QqKSBzdW1tYXJ5OworCWNtZC0+aGVscCA9IChTdHJMaXN0KikgaGVscDsKKworCXJldHVybiBjbWQ7Cit9CisKK3ZvaWQKK2NvbW1hbmRfZGVzdHJveSAoQ29tbWFuZCogY21kKQoreworCXN0cl9saXN0X2Rlc3Ryb3kgKGNtZC0+bmFtZXMpOworCXN0cl9saXN0X2Rlc3Ryb3kgKGNtZC0+c3VtbWFyeSk7CisJc3RyX2xpc3RfZGVzdHJveSAoY21kLT5oZWxwKTsKKwlmcmVlIChjbWQpOworfQorCit2b2lkCitjb21tYW5kX3JlZ2lzdGVyIChDb21tYW5kKiogbGlzdCwgQ29tbWFuZCogY21kKQoreworCWludAlpOworCisJZm9yIChpID0gMDsgbGlzdCBbaV07IGkrKyk7CisKKwlsaXN0IFtpXSA9IGNtZDsKKwlsaXN0IFtpICsgMV0gPSAoQ29tbWFuZCopIE5VTEw7Cit9CisKK0NvbW1hbmQqCitjb21tYW5kX2dldCAoQ29tbWFuZCoqIGxpc3QsIGNoYXIqIG5hbWUpCit7CisJaW50CQlpOworCWludAkJcGFydGlhbF9tYXRjaCA9IC0xOworCWludAkJYW1iaWd1b3VzID0gMDsKKworCWlmICghbmFtZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlmb3IgKGk9MDsgbGlzdCBbaV07IGkrKykgeworCQlzd2l0Y2ggKHN0cl9saXN0X21hdGNoX2FueSAobGlzdCBbaV0tPm5hbWVzLCBuYW1lKSkgeworCQljYXNlIDI6CisJCQlyZXR1cm4gbGlzdCBbaV07CisKKwkJY2FzZSAxOgorCQkJaWYgKCFhbWJpZ3VvdXMpIHsKKwkJCQlpZiAocGFydGlhbF9tYXRjaCA9PSAtMSkgeworCQkJCQlwYXJ0aWFsX21hdGNoID0gaTsKKwkJCQl9IGVsc2UgeworCQkJCQlwYXJ0aWFsX21hdGNoID0gLTE7CisJCQkJCWFtYmlndW91cyA9IDE7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJaWYgKHBhcnRpYWxfbWF0Y2ggPT0gLTEpCisJCXJldHVybiBOVUxMOworCWVsc2UKKwkJcmV0dXJuIGxpc3QgW3BhcnRpYWxfbWF0Y2hdOworfQorCitTdHJMaXN0KgorY29tbWFuZF9nZXRfbmFtZXMgKENvbW1hbmQqKiBsaXN0KQoreworCUNvbW1hbmQqKgl3YWxrOworCVN0ckxpc3QqCXJlc3VsdCA9IE5VTEw7CisKKwlmb3IgKHdhbGsgPSBsaXN0OyAqd2Fsazsgd2FsaysrKQorCQlyZXN1bHQgPSBzdHJfbGlzdF9qb2luIChyZXN1bHQsCisJCQkJCXN0cl9saXN0X2R1cGxpY2F0ZSAoKCp3YWxrKS0+bmFtZXMpKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCit2b2lkCitjb21tYW5kX3ByaW50X3N1bW1hcnkgKENvbW1hbmQqIGNtZCkKK3sKKyAgICAgICAgZnB1dHMgKCIgICIsIHN0ZG91dCk7CisJc3RyX2xpc3RfcHJpbnRfd3JhcCAoY21kLT5zdW1tYXJ5LCBzY3JlZW5fd2lkdGgoKSwgMiwgOCk7CisJcHV0Y2hhciAoJ1xuJyk7Cit9CisKK3ZvaWQKK2NvbW1hbmRfcHJpbnRfaGVscCAoQ29tbWFuZCogY21kKQoreworCWNvbW1hbmRfcHJpbnRfc3VtbWFyeSAoY21kKTsKKwlpZiAoY21kLT5oZWxwKSB7CisgICAgICAgICAgICAgICAgZnB1dHMgKCJcblx0Iiwgc3Rkb3V0KTsKKwkJc3RyX2xpc3RfcHJpbnRfd3JhcCAoY21kLT5oZWxwLCBzY3JlZW5fd2lkdGgoKSwgOCwgOCk7CisJfQorfQorCitpbnQKK2NvbW1hbmRfcnVuIChDb21tYW5kKiBjbWQsIFBlZERldmljZSoqIGRldikKK3sKKwlyZXR1cm4gY21kLT5tZXRob2QgKGRldik7Cit9CisKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9wYXJ0ZWQvY29tbWFuZC5oIGIvcGFydGVkLTEuOC43L3BhcnRlZC9jb21tYW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYzNmFmNwotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9wYXJ0ZWQvY29tbWFuZC5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgICAgcGFydGVkIC0gYSBmcm9udGVuZCB0byBsaWJwYXJ0ZWQKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCisqLworCisjaWZuZGVmIENPTU1BTkRfSF9JTkNMVURFRAorI2RlZmluZSBDT01NQU5EX0hfSU5DTFVERUQKKworI2luY2x1ZGUgPHBhcnRlZC9wYXJ0ZWQuaD4KKyNpbmNsdWRlICJzdHJsaXN0LmgiCisKK3R5cGVkZWYgc3RydWN0IHsKKwlTdHJMaXN0KgluYW1lczsKKwlpbnQJCSgqbWV0aG9kKSAoUGVkRGV2aWNlKiogZGV2KTsKKwlTdHJMaXN0KglzdW1tYXJ5OworCVN0ckxpc3QqCWhlbHA7CisgICAgICAgIGludCAgICAgICAgICAgICBub25faW50ZXJhY3RpdmU6MTsKK30gQ29tbWFuZDsKKworZXh0ZXJuIENvbW1hbmQqIGNvbW1hbmRfY3JlYXRlIChjb25zdCBTdHJMaXN0KiBuYW1lcywKKwkJCQlpbnQgKCptZXRob2QpIChQZWREZXZpY2UqKiBkZXYpLAorCQkJCWNvbnN0IFN0ckxpc3QqIHN1bW1hcnksCisJCQkJY29uc3QgU3RyTGlzdCogaGVscCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5vbl9pbnRlcmFjdGl2ZSk7CitleHRlcm4gdm9pZCBjb21tYW5kX2Rlc3Ryb3kgKENvbW1hbmQqIGNtZCk7Cit2b2lkIGNvbW1hbmRfcmVnaXN0ZXIgKENvbW1hbmQqKiBsaXN0LCBDb21tYW5kKiBjbWQpOworCitleHRlcm4gQ29tbWFuZCogY29tbWFuZF9nZXQgKENvbW1hbmQqKiBsaXN0LCBjaGFyKiBuYW1lKTsKK2V4dGVybiBTdHJMaXN0KiBjb21tYW5kX2dldF9uYW1lcyAoQ29tbWFuZCoqIGxpc3QpOworZXh0ZXJuIHZvaWQgY29tbWFuZF9wcmludF9zdW1tYXJ5IChDb21tYW5kKiBjbWQpOworZXh0ZXJuIHZvaWQgY29tbWFuZF9wcmludF9oZWxwIChDb21tYW5kKiBjbWQpOworZXh0ZXJuIGludCBjb21tYW5kX3J1biAoQ29tbWFuZCogY21kLCBQZWREZXZpY2UqKiBkZXYpOworCisjZW5kaWYgLyogQ09NTUFORF9IX0lOQ0xVREVEICovCisKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9wYXJ0ZWQvcGFydGVkLmMgYi9wYXJ0ZWQtMS44LjcvcGFydGVkL3BhcnRlZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNmFkOTYKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvcGFydGVkL3BhcnRlZC5jCkBAIC0wLDAgKzEsMjQ4MiBAQAorLyoKKyAgICBwYXJ0ZWQgLSBhIGZyb250ZW5kIHRvIGxpYnBhcnRlZAorICAgIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNSwgMjAwNiwgMjAwNworICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQorKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaW5jbHVkZSAiY2xvc2VvdXQuaCIKKyNpbmNsdWRlICJjb25maWdtYWtlLmgiCisjaW5jbHVkZSAidmVyc2lvbi1ldGMuaCIKKyNpbmNsdWRlICJjb21tYW5kLmgiCisjaW5jbHVkZSAidWkuaCIKKyNpbmNsdWRlICJ0YWJsZS5oIgorCisjZGVmaW5lIEFVVEhPUlMgXAorICAiPGh0dHA6Ly9wYXJ0ZWQuYWxpb3RoLmRlYmlhbi5vcmcvY2dpLWJpbi90cmFjLmNnaS9icm93c2VyL0FVVEhPUlM+IgorCisvKiBUaGUgb2ZmaWNpYWwgbmFtZSBvZiB0aGlzIHByb2dyYW0gKGUuZy4sIG5vIGBnJyBwcmVmaXgpLiAgKi8KKyNkZWZpbmUgUFJPR1JBTV9OQU1FICJwYXJ0ZWQiCisKKyNkZWZpbmUgTl8oU3RyaW5nKSBTdHJpbmcKKyNpZiBFTkFCTEVfTkxTCisjICBpbmNsdWRlIDxsaWJpbnRsLmg+CisjICBpbmNsdWRlIDxsb2NhbGUuaD4KKyMgIGRlZmluZSBfKFN0cmluZykgZGdldHRleHQgKFBBQ0tBR0UsIFN0cmluZykKKyNlbHNlCisjICBkZWZpbmUgXyhTdHJpbmcpIChTdHJpbmcpCisjZW5kaWYgLyogRU5BQkxFX05MUyAqLworCisjaW5jbHVkZSA8cGFydGVkL3BhcnRlZC5oPgorI2luY2x1ZGUgPHBhcnRlZC9kZWJ1Zy5oPgorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworI2lmZGVmIEVOQUJMRV9NVFJBQ0UKKyNpbmNsdWRlIDxtY2hlY2suaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8Z2V0b3B0Lmg+CisKKy8qIG1pbmltdW0gYW1vdW50IG9mIGZyZWUgc3BhY2UgdG8gbGVhdmUsIG9yIG1heGltdW0gYW1vdW50IHRvIGdvYmJsZSB1cCAqLworI2RlZmluZSBNSU5fRlJFRVNQQUNFICAgICAgICAgICAoMTAwMCAqIDIpICAgICAgLyogMTAwMGsgKi8KKworc3RhdGljIGludCBNRUdBQllURV9TRUNUT1JTIChQZWREZXZpY2UqIGRldikKK3sKKyAgICAgICAgcmV0dXJuIFBFRF9NRUdBQllURV9TSVpFIC8gZGV2LT5zZWN0b3Jfc2l6ZTsKK30KKworLyogRm9yIGxvbmcgb3B0aW9ucyB0aGF0IGhhdmUgbm8gZXF1aXZhbGVudCBzaG9ydCBvcHRpb24sIHVzZSBhCisgICBub24tY2hhcmFjdGVyIGFzIGEgcHNldWRvIHNob3J0IG9wdGlvbiwgc3RhcnRpbmcgd2l0aCBDSEFSX01BWCArIDEuICAqLworZW51bQoreworICBQUkVURU5EX0lOUFVUX1RUWSA9IENIQVJfTUFYICsgMSwKK307CisKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgICAgICB0aW1lX3QgIGxhc3RfdXBkYXRlOworICAgICAgICB0aW1lX3QgIHByZWRpY3RlZF90aW1lX2xlZnQ7Cit9IFRpbWVyQ29udGV4dDsKKworc3RhdGljIHN0cnVjdCBvcHRpb24gICAgb3B0aW9uc1tdID0geworICAgICAgICAvKiBuYW1lLCBoYXMtYXJnLCBzdHJpbmctcmV0dXJuLXZhbCwgY2hhci1yZXR1cm4tdmFsICovCisgICAgICAgIHsiaGVscCIsICAgICAgICAwLCBOVUxMLCAnaCd9LAorICAgICAgICB7Imxpc3QiLCAgICAgICAgMCwgTlVMTCwgJ2wnfSwKKyAgICAgICAgeyJtYWNoaW5lIiwgICAgIDAsIE5VTEwsICdtJ30sCisgICAgICAgIHsic2NyaXB0IiwgICAgICAwLCBOVUxMLCAncyd9LAorICAgICAgICB7InZlcnNpb24iLCAgICAgMCwgTlVMTCwgJ3YnfSwKKyAgICAgICAgeyItcHJldGVuZC1pbnB1dC10dHkiLCAwLCBOVUxMLCBQUkVURU5EX0lOUFVUX1RUWX0sCisgICAgICAgIHtOVUxMLCAgICAgICAgICAwLCBOVUxMLCAwfQorfTsKKworc3RhdGljIGNoYXIqICAgIG9wdGlvbnNfaGVscCBbXVsyXSA9IHsKKyAgICAgICAgeyJoZWxwIiwgICAgICAgIE5fKCJkaXNwbGF5cyB0aGlzIGhlbHAgbWVzc2FnZSIpfSwKKyAgICAgICAgeyJsaXN0IiwgICAgICAgIE5fKCJsaXN0cyBwYXJ0aXRpb24gbGF5b3V0IG9uIGFsbCBibG9jayBkZXZpY2VzIil9LAorICAgICAgICB7Im1hY2hpbmUiLCAgICAgTl8oImRpc3BsYXlzIG1hY2hpbmUgcGFyc2VhYmxlIG91dHB1dCIpfSwKKyAgICAgICAgeyJzY3JpcHQiLCAgICAgIE5fKCJuZXZlciBwcm9tcHRzIGZvciB1c2VyIGludGVydmVudGlvbiIpfSwKKyAgICAgICAgeyJ2ZXJzaW9uIiwgICAgIE5fKCJkaXNwbGF5cyB0aGUgdmVyc2lvbiIpfSwKKyAgICAgICAge05VTEwsICAgICAgICAgIE5VTEx9Cit9OworCitjaGFyICpwcm9ncmFtX25hbWU7CisKK2ludCAgICAgb3B0X3NjcmlwdF9tb2RlID0gMDsKK2ludCAgICAgcHJldGVuZF9pbnB1dF90dHkgPSAwOworaW50ICAgICBvcHRfbWFjaGluZV9tb2RlID0gMDsKK2ludCAgICAgZGlza19pc19tb2RpZmllZCA9IDA7CitpbnQgICAgIGlzX3RvZ2dsZV9tb2RlID0gMDsKKworc3RhdGljIGNoYXIqIG51bWJlcl9tc2cgPSBOXygKKyJOVU1CRVIgaXMgdGhlIHBhcnRpdGlvbiBudW1iZXIgdXNlZCBieSBMaW51eC4gIE9uIE1TLURPUyBkaXNrIGxhYmVscywgdGhlICIKKyJwcmltYXJ5IHBhcnRpdGlvbnMgbnVtYmVyIGZyb20gMSB0byA0LCBsb2dpY2FsIHBhcnRpdGlvbnMgZnJvbSA1IG9ud2FyZHMuXG4iKTsKKworc3RhdGljIGNoYXIqIGxhYmVsX3R5cGVfbXNnX3N0YXJ0ID0gTl8oIkxBQkVMLVRZUEUgaXMgb25lIG9mOiAiKTsKK3N0YXRpYyBjaGFyKiBmbGFnX21zZ19zdGFydCA9ICAgTl8oIkZMQUcgaXMgb25lIG9mOiAiKTsKK3N0YXRpYyBjaGFyKiB1bml0X21zZ19zdGFydCA9ICAgTl8oIlVOSVQgaXMgb25lIG9mOiAiKTsKK3N0YXRpYyBjaGFyKiBwYXJ0X3R5cGVfbXNnID0gICAgTl8oIlBBUlQtVFlQRSBpcyBvbmUgb2Y6IHByaW1hcnksIGxvZ2ljYWwsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4dGVuZGVkXG4iKTsKK3N0YXRpYyBjaGFyKiBmc190eXBlX21zZ19zdGFydCA9IE5fKCJGUy1UWVBFIGlzIG9uZSBvZjogIik7CitzdGF0aWMgY2hhciogc3RhcnRfZW5kX21zZyA9ICAgIE5fKCJTVEFSVCBhbmQgRU5EIGFyZSBkaXNrIGxvY2F0aW9ucywgc3VjaCBhcyAiCisgICAgICAgICAgICAgICAgIjRHQiBvciAxMCUuICBOZWdhdGl2ZSB2YWx1ZXMgY291bnQgZnJvbSB0aGUgZW5kIG9mIHRoZSBkaXNrLiAgIgorICAgICAgICAgICAgICAgICJGb3IgZXhhbXBsZSwgLTFzIHNwZWNpZmllcyBleGFjdGx5IHRoZSBsYXN0IHNlY3Rvci5cbiIpOworc3RhdGljIGNoYXIqIHN0YXRlX21zZyA9ICAgICAgICBOXygiU1RBVEUgaXMgb25lIG9mOiBvbiwgb2ZmXG4iKTsKK3N0YXRpYyBjaGFyKiBkZXZpY2VfbXNnID0gICAgICAgTl8oIkRFVklDRSBpcyB1c3VhbGx5IC9kZXYvaGRhIG9yIC9kZXYvc2RhXG4iKTsKK3N0YXRpYyBjaGFyKiBuYW1lX21zZyA9ICAgICAgICAgTl8oIk5BTUUgaXMgYW55IHdvcmQgeW91IHdhbnRcbiIpOworc3RhdGljIGNoYXIqIHJlc2l6ZV9tc2dfc3RhcnQgPSBOXygiVGhlIHBhcnRpdGlvbiBtdXN0IGhhdmUgb25lIG9mIHRoZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb2xsb3dpbmcgRlMtVFlQRXM6ICIpOworCitzdGF0aWMgY2hhciogY29weXJpZ2h0X21zZyA9IE5fKAorIkNvcHlyaWdodCAoQykgMTk5OCAtIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuXG4iCisiVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmUsIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLlxuIgorIlxuIgorIlRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuIgorImJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4iCisiTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuIgorIkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbiIpOworCitzdGF0aWMgY2hhciogbGFiZWxfdHlwZV9tc2c7CitzdGF0aWMgY2hhciogZmxhZ19tc2c7CitzdGF0aWMgY2hhciogdW5pdF9tc2c7CisKK3N0YXRpYyBjaGFyKiBta2ZzX2ZzX3R5cGVfbXNnOworc3RhdGljIGNoYXIqIG1rcGFydF9mc190eXBlX21zZzsKK3N0YXRpYyBjaGFyKiByZXNpemVfZnNfdHlwZV9tc2c7CisKK3N0YXRpYyBDb21tYW5kKiBjb21tYW5kcyBbMjU2XSA9IHtOVUxMfTsKK3N0YXRpYyBQZWRUaW1lciogZ190aW1lcjsKK3N0YXRpYyBUaW1lckNvbnRleHQgdGltZXJfY29udGV4dDsKKworc3RhdGljIGludCBfcHJpbnRfbGlzdCAoKTsKK3N0YXRpYyB2b2lkIF9kb25lIChQZWREZXZpY2UqIGRldik7CisKK3N0YXRpYyB2b2lkCitfdGltZXJfaGFuZGxlciAoUGVkVGltZXIqIHRpbWVyLCB2b2lkKiBjb250ZXh0KQoreworICAgICAgICBUaW1lckNvbnRleHQqICAgdGNvbnRleHQgPSAoVGltZXJDb250ZXh0KikgY29udGV4dDsKKyAgICAgICAgaW50ICAgICAgICAgICAgIGRyYXdfdGhpc190aW1lOworCisgICAgICAgIGlmIChvcHRfc2NyaXB0X21vZGUgfHwgIWlzYXR0eShmaWxlbm8oc3Rkb3V0KSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICh0Y29udGV4dC0+bGFzdF91cGRhdGUgIT0gdGltZXItPm5vdyAmJiB0aW1lci0+bm93ID4gdGltZXItPnN0YXJ0KSB7CisgICAgICAgICAgICAgICAgdGNvbnRleHQtPnByZWRpY3RlZF90aW1lX2xlZnQKKyAgICAgICAgICAgICAgICAgICAgICAgID0gdGltZXItPnByZWRpY3RlZF9lbmQgLSB0aW1lci0+bm93OworICAgICAgICAgICAgICAgIHRjb250ZXh0LT5sYXN0X3VwZGF0ZSA9IHRpbWVyLT5ub3c7CisgICAgICAgICAgICAgICAgZHJhd190aGlzX3RpbWUgPSAxOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGRyYXdfdGhpc190aW1lID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChkcmF3X3RoaXNfdGltZSkgeworICAgICAgICAgICAgICAgIHdpcGVfbGluZSAoKTsKKworICAgICAgICAgICAgICAgIGlmICh0aW1lci0+c3RhdGVfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZiAoIiVzLi4uICIsIHRpbWVyLT5zdGF0ZV9uYW1lKTsKKyAgICAgICAgICAgICAgICBwcmludGYgKF8oIiUwLmYlJVx0KHRpbWUgbGVmdCAlLjJkOiUuMmQpIiksCisgICAgICAgICAgICAgICAgICAgICAgICAxMDAuMCAqIHRpbWVyLT5mcmFjLAorICAgICAgICAgICAgICAgICAgICAgICAgKGludCkgKHRjb250ZXh0LT5wcmVkaWN0ZWRfdGltZV9sZWZ0IC8gNjApLAorICAgICAgICAgICAgICAgICAgICAgICAgKGludCkgKHRjb250ZXh0LT5wcmVkaWN0ZWRfdGltZV9sZWZ0ICUgNjApKTsKKworICAgICAgICAgICAgICAgIGZmbHVzaCAoc3Rkb3V0KTsKKyAgICAgICAgfQorfQorCitzdGF0aWMgaW50CitfcGFydGl0aW9uX3dhcm5fYnVzeSAoUGVkUGFydGl0aW9uKiBwYXJ0KQoreworICAgICAgICBjaGFyKiBwYXRoOworCisgICAgICAgIGlmIChwZWRfcGFydGl0aW9uX2lzX2J1c3kgKHBhcnQpKSB7CisgICAgICAgICAgICAgICAgcGF0aCA9IHBlZF9wYXJ0aXRpb25fZ2V0X3BhdGggKHBhcnQpOworICAgICAgICAgICAgICAgIHBlZF9leGNlcHRpb25fdGhyb3cgKAorICAgICAgICAgICAgICAgICAgICAgICAgUEVEX0VYQ0VQVElPTl9FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFBFRF9FWENFUFRJT05fQ0FOQ0VMLAorICAgICAgICAgICAgICAgICAgICAgICAgXygiUGFydGl0aW9uICVzIGlzIGJlaW5nIHVzZWQuIFlvdSBtdXN0IHVubW91bnQgaXQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiYmVmb3JlIHlvdSBtb2RpZnkgaXQgd2l0aCBQYXJ0ZWQuIiksCisgICAgICAgICAgICAgICAgICAgICAgICBwYXRoKTsKKyAgICAgICAgICAgICAgICBwZWRfZnJlZSAocGF0aCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK19kaXNrX3dhcm5fYnVzeSAoUGVkRGlzayogZGlzaykKK3sKKyAgICAgICAgaWYgKHBlZF9kZXZpY2VfaXNfYnVzeSAoZGlzay0+ZGV2KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcGVkX2V4Y2VwdGlvbl90aHJvdyAoCisgICAgICAgICAgICAgICAgICAgICAgICBQRURfRVhDRVBUSU9OX1dBUk5JTkcsCisgICAgICAgICAgICAgICAgICAgICAgICBQRURfRVhDRVBUSU9OX0lHTk9SRV9DQU5DRUwsCisgICAgICAgICAgICAgICAgICAgICAgICBfKCJQYXJ0aXRpb24ocykgb24gJXMgYXJlIGJlaW5nIHVzZWQuIiksCisgICAgICAgICAgICAgICAgICAgICAgICBkaXNrLT5kZXYtPnBhdGgpID09IFBFRF9FWENFUFRJT05fSUdOT1JFOworCisgICAgICAgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitfcGFydGl0aW9uX3dhcm5fbG9zcyAoKQoreworICAgICAgICByZXR1cm4gcGVkX2V4Y2VwdGlvbl90aHJvdyAoCisgICAgICAgICAgICAgICAgUEVEX0VYQ0VQVElPTl9XQVJOSU5HLAorICAgICAgICAgICAgICAgIFBFRF9FWENFUFRJT05fWUVTX05PLAorICAgICAgICAgICAgICAgIF8oIlRoZSBleGlzdGluZyBmaWxlIHN5c3RlbSB3aWxsIGJlIGRlc3Ryb3llZCBhbmQgIgorICAgICAgICAgICAgICAgICAgImFsbCBkYXRhIG9uIHRoZSBwYXJ0aXRpb24gd2lsbCBiZSBsb3N0LiBEbyAiCisgICAgICAgICAgICAgICAgICAieW91IHdhbnQgdG8gY29udGludWU/IiksIAorICAgICAgICAgICAgICAgIE5VTEwpID09IFBFRF9FWENFUFRJT05fWUVTOworfQorCitzdGF0aWMgaW50CitfZGlza193YXJuX2xvc3MgKFBlZERpc2sqIGRpc2spCit7CisgICAgICAgIHJldHVybiBwZWRfZXhjZXB0aW9uX3Rocm93ICgKKyAgICAgICAgICAgICAgICBQRURfRVhDRVBUSU9OX1dBUk5JTkcsCisgICAgICAgICAgICAgICAgUEVEX0VYQ0VQVElPTl9ZRVNfTk8sCisgICAgICAgICAgICAgICAgXygiVGhlIGV4aXN0aW5nIGRpc2sgbGFiZWwgb24gJXMgd2lsbCBiZSBkZXN0cm95ZWQgIgorICAgICAgICAgICAgICAgICAgImFuZCBhbGwgZGF0YSBvbiB0aGlzIGRpc2sgd2lsbCBiZSBsb3N0LiBEbyB5b3UgIgorICAgICAgICAgICAgICAgICAgIndhbnQgdG8gY29udGludWU/IiksIAorICAgICAgICAgICAgICAgIGRpc2stPmRldi0+cGF0aCkgPT0gUEVEX0VYQ0VQVElPTl9ZRVM7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gY2hhbmdlcyAic2VjdG9yIiB0byAibmV3X3NlY3RvciIgaWYgdGhlIG5ldyB2YWx1ZSBsaWVzCisgKiB3aXRoaW4gdGhlIHJlcXVpcmVkIHJhbmdlLgorICovCitzdGF0aWMgaW50CitzbmFwIChQZWRTZWN0b3IqIHNlY3RvciwgUGVkU2VjdG9yIG5ld19zZWN0b3IsIFBlZEdlb21ldHJ5KiByYW5nZSkKK3sKKyAgICAgICAgUEVEX0FTU0VSVCAocGVkX2dlb21ldHJ5X3Rlc3Rfc2VjdG9yX2luc2lkZSAocmFuZ2UsICpzZWN0b3IpLCByZXR1cm4gMCk7CisgICAgICAgIGlmICghcGVkX2dlb21ldHJ5X3Rlc3Rfc2VjdG9yX2luc2lkZSAocmFuZ2UsIG5ld19zZWN0b3IpKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAqc2VjdG9yID0gbmV3X3NlY3RvcjsKKyAgICAgICAgcmV0dXJuIDE7Cit9CisKK3R5cGVkZWYgZW51bSB7CisgICAgICAgIE1PVkVfTk8gICAgICAgICA9IDAsCisgICAgICAgIE1PVkVfU1RJTEwgICAgICA9IDEsCisgICAgICAgIE1PVkVfVVAgICAgICAgICA9IDIsCisgICAgICAgIE1PVkVfRE9XTiAgICAgICA9IDQKK30gRU1vdmVzOworCitlbnVtIHsgLyogRG9uJ3QgY2hhbmdlIHRoZXNlIHZhbHVlcyAqLworICAgICAgICBTRUNUX1NUQVJUICAgICAgPSAgMCwKKyAgICAgICAgU0VDVF9FTkQgICAgICAgID0gLTEKK307CisKKy8qIEZpbmQgdGhlIHByZWZlcmVkIHdheSB0byBhZGp1c3QgdGhlIHNlY3RvciBzIGluc2lkZSByYW5nZS4KKyAqIElmIGEgbW92ZSBpc24ndCBhbGxvd2VkIG9yIGlzIG91dCBvZiByYW5nZSBpdCBjYW4ndCBiZSBzZWxlY3RlZC4KKyAqIHdoYXQgY29udGFpbnMgU0VDVF9TVEFSVCBpZiB0aGUgc2VjdG9yIHRvIGFkanVzdCBpcyBhIHN0YXJ0IHNlY3RvcgorICogb3IgU0VDVF9FTkQgaWYgaXQncyBhbiBlbmQgb25lLgorICogVGhlIHByZWZlcmVkIG1vdmUgaXMgdG8gdGhlIG5lYXJlc3QgYWxsb3dlZCBib3VuZGFyeSBvZiB0aGUgcGFydAorICogcGFydGl0aW9uIChpZiBhdCBlcXVhbCBkaXN0YW5jZTogdG8gc3RhcnQgaWYgU0VDVF9TVEFSVCBvciB0byBlbmQKKyAqIGlmIFNFQ1RfRU5EKS4KKyAqIFRoZSBkaXN0YW5jZSBpcyByZXR1cm5lZCBpbiBkaXN0LgorICovCitzdGF0aWMgRU1vdmVzCitwcmVmZXJfc25hcCAoUGVkU2VjdG9yIHMsIGludCB3aGF0LCBQZWRHZW9tZXRyeSogcmFuZ2UsIEVNb3ZlcyogYWxsb3csCisgICAgICAgICAgICAgUGVkUGFydGl0aW9uKiBwYXJ0LCBQZWRTZWN0b3IqIGRpc3QpCit7CisgICAgICAgIFBlZFNlY3RvciB1cF9kaXN0ID0gLTEsIGRvd25fZGlzdCA9IC0xOworICAgICAgICBQZWRTZWN0b3IgbmV3X3NlY3Q7CisgICAgICAgIEVNb3ZlcyBtb3ZlOworCisgICAgICAgIFBFRF9BU1NFUlQgKHdoYXQgPT0gU0VDVF9TVEFSVCB8fCB3aGF0ID09IFNFQ1RfRU5ELCByZXR1cm4gMCk7CisKKyAgICAgICAgaWYgKCEoKmFsbG93ICYgKE1PVkVfVVAgfCBNT1ZFX0RPV04pKSkgeworICAgICAgICAgICAgICAgICpkaXN0ID0gMDsKKyAgICAgICAgICAgICAgICByZXR1cm4gTU9WRV9TVElMTDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgqYWxsb3cgJiBNT1ZFX1VQKSB7CisgICAgICAgICAgICAgICAgbmV3X3NlY3QgPSBwYXJ0LT5nZW9tLmVuZCArIDEgKyB3aGF0OworICAgICAgICAgICAgICAgIGlmIChwZWRfZ2VvbWV0cnlfdGVzdF9zZWN0b3JfaW5zaWRlIChyYW5nZSwgbmV3X3NlY3QpKQorICAgICAgICAgICAgICAgICAgICAgICAgdXBfZGlzdCA9IG5ld19zZWN0IC0gczsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAqYWxsb3cgJj0gfk1PVkVfVVA7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKmFsbG93ICYgTU9WRV9ET1dOKSB7CisgICAgICAgICAgICAgICAgbmV3X3NlY3QgPSBwYXJ0LT5nZW9tLnN0YXJ0ICsgd2hhdDsKKyAgICAgICAgICAgICAgICBpZiAocGVkX2dlb21ldHJ5X3Rlc3Rfc2VjdG9yX2luc2lkZSAocmFuZ2UsIG5ld19zZWN0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvd25fZGlzdCA9IHMgLSBuZXdfc2VjdDsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAqYWxsb3cgJj0gfk1PVkVfRE9XTjsKKyAgICAgICAgfQorCisgICAgICAgIG1vdmUgPSBNT1ZFX1NUSUxMOworICAgICAgICBpZiAoKCphbGxvdyAmIE1PVkVfVVApICYmICgqYWxsb3cgJiBNT1ZFX0RPV04pKSB7CisgICAgICAgICAgICAgICAgaWYgKGRvd25fZGlzdCA8IHVwX2Rpc3QgfHwgKGRvd25fZGlzdCA9PSB1cF9kaXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHdoYXQgPT0gU0VDVF9TVEFSVCkgKQorICAgICAgICAgICAgICAgICAgICAgICAgbW92ZSA9IE1PVkVfRE9XTjsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICh1cF9kaXN0IDwgZG93bl9kaXN0IHx8IChkb3duX2Rpc3QgPT0gdXBfZGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHdoYXQgPT0gU0VDVF9FTkQpICkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vdmUgPSBNT1ZFX1VQOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIFBFRF9BU1NFUlQgKDAsIHJldHVybiAwKTsKKyAgICAgICAgfSBlbHNlIGlmICgqYWxsb3cgJiBNT1ZFX1VQKQorICAgICAgICAgICAgICAgIG1vdmUgPSBNT1ZFX1VQOworICAgICAgICBlbHNlIGlmICgqYWxsb3cgJiBNT1ZFX0RPV04pCisgICAgICAgICAgICAgICAgbW92ZSA9IE1PVkVfRE9XTjsKKworICAgICAgICAqZGlzdCA9ICggbW92ZSA9PSBNT1ZFX0RPV04gPyBkb3duX2Rpc3QgOgorICAgICAgICAgICAgICAgICggbW92ZSA9PSBNT1ZFX1VQICAgPyB1cF9kaXN0ICAgOgorICAgICAgICAgICAgICAgICAgMCApICk7CisgICAgICAgIHJldHVybiBtb3ZlOworfQorCisvKiBTbmFwcyBhIHBhcnRpdGlvbiB0byBuZWFyYnkgcGFydGl0aW9uIGJvdW5kYXJpZXMuICBUaGlzIGlzIHVzZWZ1bCBmb3IKKyAqIGdvYmJsaW5nIHVwIHNtYWxsIGFtb3VudHMgb2YgZnJlZSBzcGFjZSwgYW5kIGFsc28gZm9yIHJlaW50ZXJwcmV0aW5nIHNtYWxsCisgKiBjaGFuZ2VzIHRvIGEgcGFydGl0aW9uIGFzIG5vbi1jaGFuZ2VzIChlZzogcGVyaGFwcyB0aGUgdXNlciBvbmx5IHdhbnRlZCB0bworICogcmVzaXplIHRoZSBlbmQgb2YgYSBwYXJ0aXRpb24pLgorICogICAgICBOb3RlIHRoYXQgdGhpcyBpc24ndCB0aGUgZW5kIG9mIHRoZSBzdG9yeS4uLiB0aGlzIGZ1bmN0aW9uIGlzCisgKiBhbHdheXMgY2FsbGVkIGJlZm9yZSB0aGUgY29uc3RyYWludCBzb2x2ZXIga2lja3MgaW4uICBTbyB5b3UgZG9uJ3QgbmVlZCB0bworICogd29ycnkgdG9vIG11Y2ggYWJvdXQgaW5hZHZlcnRhbnRseSBjcmVhdGluZyBvdmVybGFwcGluZyBwYXJ0aXRpb25zLCBldGMuCisgKi8KK3N0YXRpYyB2b2lkCitzbmFwX3RvX2JvdW5kYXJpZXMgKFBlZEdlb21ldHJ5KiBuZXdfZ2VvbSwgUGVkR2VvbWV0cnkqIG9sZF9nZW9tLAorICAgICAgICAgICAgICAgICAgICBQZWREaXNrKiBkaXNrLAorICAgICAgICAgICAgICAgICAgICBQZWRHZW9tZXRyeSogc3RhcnRfcmFuZ2UsIFBlZEdlb21ldHJ5KiBlbmRfcmFuZ2UpCit7CisgICAgICAgIFBlZFBhcnRpdGlvbiogICBzdGFydF9wYXJ0OworICAgICAgICBQZWRQYXJ0aXRpb24qICAgZW5kX3BhcnQ7CisgICAgICAgIFBlZFNlY3RvciAgICAgICBzdGFydCA9IG5ld19nZW9tLT5zdGFydDsKKyAgICAgICAgUGVkU2VjdG9yICAgICAgIGVuZCA9IG5ld19nZW9tLT5lbmQ7CisgICAgICAgIFBlZFNlY3RvciAgICAgICBzdGFydF9kaXN0ID0gLTEsIGVuZF9kaXN0ID0gLTE7CisgICAgICAgIEVNb3ZlcyAgICAgICAgICBzdGFydF9hbGxvdywgZW5kX2FsbG93LCBzdGFydF93YW50LCBlbmRfd2FudDsKKyAgICAgICAgaW50ICAgICAgICAgICAgIGFkamFjZW50OworCisgICAgICAgIHN0YXJ0X3dhbnQgPSBlbmRfd2FudCA9IE1PVkVfTk87CisgICAgICAgIHN0YXJ0X2FsbG93ID0gZW5kX2FsbG93ID0gTU9WRV9TVElMTCB8IE1PVkVfVVAgfCBNT1ZFX0RPV047CisKKyAgICAgICAgc3RhcnRfcGFydCA9IHBlZF9kaXNrX2dldF9wYXJ0aXRpb25fYnlfc2VjdG9yIChkaXNrLCBzdGFydCk7CisgICAgICAgIGVuZF9wYXJ0ID0gcGVkX2Rpc2tfZ2V0X3BhcnRpdGlvbl9ieV9zZWN0b3IgKGRpc2ssIGVuZCk7CisgICAgICAgIGFkamFjZW50ID0gKHN0YXJ0X3BhcnQtPmdlb20uZW5kICsgMSA9PSBlbmRfcGFydC0+Z2VvbS5zdGFydCk7CisKKyAgICAgICAgLyogSWYgd2UgY2FuIHNuYXAgdG8gb2xkX2dlb20sIHRoZW4gd2Ugd2lsbC4uLiAqLworICAgICAgICAvKiBhbmQgdGhpcyB3aWxsIGVuZm9yY2UgdGhlIHNuYXBwZWQgcG9zaXRpb25zICAqLworICAgICAgICBpZiAob2xkX2dlb20pIHsKKyAgICAgICAgICAgICAgICBpZiAoc25hcCAoJnN0YXJ0LCBvbGRfZ2VvbS0+c3RhcnQsIHN0YXJ0X3JhbmdlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2FsbG93ID0gTU9WRV9TVElMTDsKKyAgICAgICAgICAgICAgICBpZiAoc25hcCAoJmVuZCwgb2xkX2dlb20tPmVuZCwgZW5kX3JhbmdlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZF9hbGxvdyA9IE1PVkVfU1RJTEw7CisgICAgICAgIH0KKworICAgICAgICAvKiBJZiBzdGFydCBhbmQgZW5kIGFyZSBvbiB0aGUgc2FtZSBwYXJ0aXRpb24sIHdlICovCisgICAgICAgIC8qIGRvbid0IGFsbG93IHRoZW0gdG8gY3Jvc3MuICovCisgICAgICAgIGlmIChzdGFydF9wYXJ0ID09IGVuZF9wYXJ0KSB7CisgICAgICAgICAgICAgICAgc3RhcnRfYWxsb3cgJj0gfk1PVkVfVVA7CisgICAgICAgICAgICAgICAgZW5kX2FsbG93ICY9IH5NT1ZFX0RPV047CisgICAgICAgIH0KKworICAgICAgICAvKiBMZXQncyBmaW5kIG91ciB3YXkgKi8KKyAgICAgICAgc3RhcnRfd2FudCA9IHByZWZlcl9zbmFwIChzdGFydCwgU0VDVF9TVEFSVCwgc3RhcnRfcmFuZ2UsICZzdGFydF9hbGxvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9wYXJ0LCAmc3RhcnRfZGlzdCApOworICAgICAgICBlbmRfd2FudCA9IHByZWZlcl9zbmFwIChlbmQsIFNFQ1RfRU5ELCBlbmRfcmFuZ2UsICZlbmRfYWxsb3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZF9wYXJ0LCAmZW5kX2Rpc3QgKTsKKworICAgICAgICBQRURfQVNTRVJUIChzdGFydF9kaXN0ID49IDAgJiYgZW5kX2Rpc3QgPj0gMCwgcmV0dXJuKTsKKworICAgICAgICAvKiBJZiBzdGFydCBhbmQgZW5kIGFyZSBvbiBhZGphY2VudCBwYXJ0aXRpb25zLCAgICAqLworICAgICAgICAvKiBhbmQgaWYgdGhleSB3b3VsZCBwcmVmZXIgY3Jvc3NpbmcsIHRoZW4gcmVmcmFpbiAqLworICAgICAgICAvKiB0aGUgZmFydGhlc3QgdG8gZG8gc28uICovCisgICAgICAgIGlmIChhZGphY2VudCAmJiBzdGFydF93YW50ID09IE1PVkVfVVAgJiYgZW5kX3dhbnQgPT0gTU9WRV9ET1dOKSB7CisgICAgICAgICAgICAgICAgaWYgKGVuZF9kaXN0IDwgc3RhcnRfZGlzdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRfYWxsb3cgJj0gfk1PVkVfVVA7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF93YW50ID0gcHJlZmVyX3NuYXAgKHN0YXJ0LCBTRUNUX1NUQVJULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9yYW5nZSwgJnN0YXJ0X2FsbG93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9wYXJ0LCAmc3RhcnRfZGlzdCApOworICAgICAgICAgICAgICAgICAgICAgICAgUEVEX0FTU0VSVCAoc3RhcnRfZGlzdCA+PSAwLCByZXR1cm4pOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmRfYWxsb3cgJj0gfk1PVkVfRE9XTjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZF93YW50ID0gcHJlZmVyX3NuYXAgKGVuZCwgU0VDVF9FTkQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRfcmFuZ2UsICZlbmRfYWxsb3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRfcGFydCwgJmVuZF9kaXN0ICk7CisgICAgICAgICAgICAgICAgICAgICAgICBQRURfQVNTRVJUIChlbmRfZGlzdCA+PSAwLCByZXR1cm4pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qIE5ldyBwb3NpdGlvbnMgKi8KKyAgICAgICAgc3RhcnQgPSAoIHN0YXJ0X3dhbnQgPT0gTU9WRV9ET1dOID8gc3RhcnRfcGFydC0+Z2VvbS5zdGFydCA6CisgICAgICAgICAgICAgICAgKCBzdGFydF93YW50ID09IE1PVkVfVVAgPyBzdGFydF9wYXJ0LT5nZW9tLmVuZCArIDEgOgorICAgICAgICAgICAgICAgICAgc3RhcnQgKSApOworICAgICAgICBlbmQgPSAoIGVuZF93YW50ID09IE1PVkVfRE9XTiA/IGVuZF9wYXJ0LT5nZW9tLnN0YXJ0IC0gMSA6CisgICAgICAgICAgICAgICggZW5kX3dhbnQgPT0gTU9WRV9VUCA/IGVuZF9wYXJ0LT5nZW9tLmVuZCA6CisgICAgICAgICAgICAgICAgZW5kICkgKTsKKyAgICAgICAgUEVEX0FTU0VSVCAocGVkX2dlb21ldHJ5X3Rlc3Rfc2VjdG9yX2luc2lkZShzdGFydF9yYW5nZSxzdGFydCksIHJldHVybik7CisgICAgICAgIFBFRF9BU1NFUlQgKHBlZF9nZW9tZXRyeV90ZXN0X3NlY3Rvcl9pbnNpZGUgKGVuZF9yYW5nZSwgZW5kKSwgcmV0dXJuKTsKKyAgICAgICAgUEVEX0FTU0VSVCAoc3RhcnQgPD0gZW5kLAorICAgICAgICAgICAgICAgICAgICBQRURfREVCVUcgKDAsICJzdGFydCA9ICVkLCBlbmQgPSAlZFxuIiwgc3RhcnQsIGVuZCkpOworICAgICAgICBwZWRfZ2VvbWV0cnlfc2V0IChuZXdfZ2VvbSwgc3RhcnQsIGVuZCAtIHN0YXJ0ICsgMSk7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb25zIGNvbnN0cnVjdHMgYSBjb25zdHJhaW50IGZyb20gdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjoKKyAqICAgICAgc3RhcnQsIGlzX3N0YXJ0X2V4YWN0LCBlbmQsIGlzX2VuZF9leGFjdC4KKyAqICAgICAgCisgKiBJZiBpc19zdGFydF9leGFjdCA9PSAxLCB0aGVuIHRoZSBjb25zdHJhaW50IHJlcXVpcmVzIHN0YXJ0IGJlIGFzIGdpdmVuIGluCisgKiAic3RhcnQiLiAgT3RoZXJ3aXNlLCB0aGUgY29uc3RyYWludCBkb2VzIG5vdCBzZXQgYW55IHJlcXVpcmVtZW50cyBvbiB0aGUKKyAqIHN0YXJ0LgorICovCitzdGF0aWMgUGVkQ29uc3RyYWludCoKK2NvbnN0cmFpbnRfZnJvbV9zdGFydF9lbmQgKFBlZERldmljZSogZGV2LCBQZWRHZW9tZXRyeSogcmFuZ2Vfc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBQZWRHZW9tZXRyeSogcmFuZ2VfZW5kKQoreworICAgICAgICByZXR1cm4gcGVkX2NvbnN0cmFpbnRfbmV3IChwZWRfYWxpZ25tZW50X2FueSwgcGVkX2FsaWdubWVudF9hbnksCisgICAgICAgICAgICAgICAgcmFuZ2Vfc3RhcnQsIHJhbmdlX2VuZCwgMSwgZGV2LT5sZW5ndGgpOworfQorCitzdGF0aWMgUGVkQ29uc3RyYWludCoKK2NvbnN0cmFpbnRfaW50ZXJzZWN0X2FuZF9kZXN0cm95IChQZWRDb25zdHJhaW50KiBhLCBQZWRDb25zdHJhaW50KiBiKQoreworICAgICAgICBQZWRDb25zdHJhaW50KiByZXN1bHQgPSBwZWRfY29uc3RyYWludF9pbnRlcnNlY3QgKGEsIGIpOworICAgICAgICBwZWRfY29uc3RyYWludF9kZXN0cm95IChhKTsKKyAgICAgICAgcGVkX2NvbnN0cmFpbnRfZGVzdHJveSAoYik7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQKK2hlbHBfb24gKGNoYXIqIHRvcGljKQoreworICAgICAgICBDb21tYW5kKiAgICAgICAgY21kOworCisgICAgICAgIGNtZCA9IGNvbW1hbmRfZ2V0IChjb21tYW5kcywgdG9waWMpOworICAgICAgICBpZiAoIWNtZCkgcmV0dXJuOworCisgICAgICAgIGNvbW1hbmRfcHJpbnRfaGVscCAoY21kKTsKK30KKworc3RhdGljIGludAorZG9fY2hlY2sgKFBlZERldmljZSoqIGRldikKK3sKKyAgICAgICAgUGVkRGlzayogICAgICAgIGRpc2s7CisgICAgICAgIFBlZEZpbGVTeXN0ZW0qICBmczsKKyAgICAgICAgUGVkUGFydGl0aW9uKiAgIHBhcnQgPSBOVUxMOworCisgICAgICAgIGRpc2sgPSBwZWRfZGlza19uZXcgKCpkZXYpOworICAgICAgICBpZiAoIWRpc2spCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICBpZiAoIWNvbW1hbmRfbGluZV9nZXRfcGFydGl0aW9uIChfKCJQYXJ0aXRpb24gbnVtYmVyPyIpLCBkaXNrLCAmcGFydCkpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcl9kZXN0cm95X2Rpc2s7CisgICAgICAgIGlmICghX3BhcnRpdGlvbl93YXJuX2J1c3kgKHBhcnQpKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JfZGVzdHJveV9kaXNrOworCisgICAgICAgIGlmICghcGVkX2Rpc2tfY2hlY2sgKGRpc2spKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JfZGVzdHJveV9kaXNrOworCisgICAgICAgIGZzID0gcGVkX2ZpbGVfc3lzdGVtX29wZW4gKCZwYXJ0LT5nZW9tKTsKKyAgICAgICAgaWYgKCFmcykKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yX2Rlc3Ryb3lfZGlzazsKKyAgICAgICAgaWYgKCFwZWRfZmlsZV9zeXN0ZW1fY2hlY2sgKGZzLCBnX3RpbWVyKSkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yX2Nsb3NlX2ZzOworICAgICAgICBwZWRfZmlsZV9zeXN0ZW1fY2xvc2UgKGZzKTsKKyAgICAgICAgcGVkX2Rpc2tfZGVzdHJveSAoZGlzayk7CisgICAgICAgIHJldHVybiAxOworCitlcnJvcl9jbG9zZV9mczoKKyAgICAgICAgcGVkX2ZpbGVfc3lzdGVtX2Nsb3NlIChmcyk7CitlcnJvcl9kZXN0cm95X2Rpc2s6CisgICAgICAgIHBlZF9kaXNrX2Rlc3Ryb3kgKGRpc2spOworZXJyb3I6CisgICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Citkb19jcCAoUGVkRGV2aWNlKiogZGV2KQoreworICAgICAgICBQZWREaXNrKiAgICAgICAgICAgICAgICBzcmNfZGlzazsKKyAgICAgICAgUGVkRGlzayogICAgICAgICAgICAgICAgZHN0X2Rpc2s7CisgICAgICAgIFBlZFBhcnRpdGlvbiogICAgICAgICAgIHNyYyA9IE5VTEw7CisgICAgICAgIFBlZFBhcnRpdGlvbiogICAgICAgICAgIGRzdCA9IE5VTEw7CisgICAgICAgIFBlZEZpbGVTeXN0ZW0qICAgICAgICAgIHNyY19mczsKKyAgICAgICAgUGVkRmlsZVN5c3RlbSogICAgICAgICAgZHN0X2ZzOworICAgICAgICBQZWRGaWxlU3lzdGVtVHlwZSogICAgICBkc3RfZnNfdHlwZTsKKworICAgICAgICBkc3RfZGlzayA9IHBlZF9kaXNrX25ldyAoKmRldik7CisgICAgICAgIGlmICghZHN0X2Rpc2spCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICBzcmNfZGlzayA9IGRzdF9kaXNrOworICAgICAgICBpZiAoIWNvbW1hbmRfbGluZV9pc19pbnRlZ2VyICgpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFjb21tYW5kX2xpbmVfZ2V0X2Rpc2sgKF8oIlNvdXJjZSBkZXZpY2U/IiksICZzcmNfZGlzaykpCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yX2Rlc3Ryb3lfZGlzazsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghY29tbWFuZF9saW5lX2dldF9wYXJ0aXRpb24gKF8oIlNvdXJjZSBwYXJ0aXRpb24gbnVtYmVyPyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfZGlzaywgJnNyYykpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcl9kZXN0cm95X2Rpc2s7CisgICAgICAgIGlmIChzcmMtPnR5cGUgPT0gUEVEX1BBUlRJVElPTl9FWFRFTkRFRCkgeworICAgICAgICAgICAgICAgIHBlZF9leGNlcHRpb25fdGhyb3cgKFBFRF9FWENFUFRJT05fRVJST1IsIFBFRF9FWENFUFRJT05fQ0FOQ0VMLAorICAgICAgICAgICAgICAgICAgICAgICAgXygiQ2FuJ3QgY29weSBhbiBleHRlbmRlZCBwYXJ0aXRpb24uIikpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JfZGVzdHJveV9kaXNrOworICAgICAgICB9CisgICAgICAgIGlmICghX3BhcnRpdGlvbl93YXJuX2J1c3kgKHNyYykpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcl9kZXN0cm95X2Rpc2s7CisKKyAgICAgICAgaWYgKCFjb21tYW5kX2xpbmVfZ2V0X3BhcnRpdGlvbiAoXygiRGVzdGluYXRpb24gcGFydGl0aW9uIG51bWJlcj8iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0X2Rpc2ssICZkc3QpKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JfZGVzdHJveV9kaXNrOworICAgICAgICBpZiAoIV9wYXJ0aXRpb25fd2Fybl9idXN5IChkc3QpKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JfZGVzdHJveV9kaXNrOworCisvKiBkbyB0aGUgY29weSAqLworICAgICAgICBzcmNfZnMgPSBwZWRfZmlsZV9zeXN0ZW1fb3BlbiAoJnNyYy0+Z2VvbSk7CisgICAgICAgIGlmICghc3JjX2ZzKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JfZGVzdHJveV9kaXNrOworICAgICAgICBkc3RfZnMgPSBwZWRfZmlsZV9zeXN0ZW1fY29weSAoc3JjX2ZzLCAmZHN0LT5nZW9tLCBnX3RpbWVyKTsKKyAgICAgICAgaWYgKCFkc3RfZnMpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcl9jbG9zZV9zcmNfZnM7CisgICAgICAgIGRzdF9mc190eXBlID0gZHN0X2ZzLT50eXBlOyAgICAgLyogbWF5IGJlIGRpZmZlcmVudCB0byBzcmNfZnMtPnR5cGUgKi8KKyAgICAgICAgcGVkX2ZpbGVfc3lzdGVtX2Nsb3NlIChzcmNfZnMpOworICAgICAgICBwZWRfZmlsZV9zeXN0ZW1fY2xvc2UgKGRzdF9mcyk7CisKKy8qIHVwZGF0ZSB0aGUgcGFydGl0aW9uIHRhYmxlLCBjbG9zZSBkaXNrcyAqLworICAgICAgICBpZiAoIXBlZF9wYXJ0aXRpb25fc2V0X3N5c3RlbSAoZHN0LCBkc3RfZnNfdHlwZSkpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcl9kZXN0cm95X2Rpc2s7CisgICAgICAgIGlmICghcGVkX2Rpc2tfY29tbWl0IChkc3RfZGlzaykpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcl9kZXN0cm95X2Rpc2s7CisgICAgICAgIGlmIChzcmNfZGlzayAhPSBkc3RfZGlzaykKKyAgICAgICAgICAgICAgICBwZWRfZGlza19kZXN0cm95IChzcmNfZGlzayk7CisgICAgICAgIHBlZF9kaXNrX2Rlc3Ryb3kgKGRzdF9kaXNrKTsKKworICAgICAgICBpZiAoKCpkZXYpLT50eXBlICE9IFBFRF9ERVZJQ0VfRklMRSkKKyAgICAgICAgICAgICAgICBkaXNrX2lzX21vZGlmaWVkID0gMTsKKworICAgICAgICByZXR1cm4gMTsKKworZXJyb3JfY2xvc2Vfc3JjX2ZzOgorICAgICAgICBwZWRfZmlsZV9zeXN0ZW1fY2xvc2UgKHNyY19mcyk7CitlcnJvcl9kZXN0cm95X2Rpc2s6CisgICAgICAgIGlmIChzcmNfZGlzayAmJiBzcmNfZGlzayAhPSBkc3RfZGlzaykKKyAgICAgICAgICAgICAgICBwZWRfZGlza19kZXN0cm95IChzcmNfZGlzayk7CisgICAgICAgIHBlZF9kaXNrX2Rlc3Ryb3kgKGRzdF9kaXNrKTsKK2Vycm9yOgorICAgICAgICByZXR1cm4gMDsKK30KKwordm9pZAorcHJpbnRfY29tbWFuZHNfaGVscCAoKQoreworICAgICAgICBpbnQgICAgICAgICAgICAgaTsKKworICAgICAgICBmb3IgKGk9MDsgY29tbWFuZHMgW2ldOyBpKyspCisgICAgICAgICAgICAgICAgY29tbWFuZF9wcmludF9zdW1tYXJ5IChjb21tYW5kcyBbaV0pOworfQorCit2b2lkCitwcmludF9vcHRpb25zX2hlbHAgKCkKK3sKKyAgICAgICAgaW50ICAgICAgICAgICAgIGk7CisKKyAgICAgICAgZm9yIChpPTA7IG9wdGlvbnNfaGVscCBbaV1bMF07IGkrKykgeworICAgICAgICAgICAgICAgIHByaW50ZiAoIiAgLSVjLCAtLSUtMjMuMjNzICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uc19oZWxwIFtpXVswXVswXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNfaGVscCBbaV1bMF0sCisgICAgICAgICAgICAgICAgICAgICAgICBfKG9wdGlvbnNfaGVscCBbaV1bMV0pKTsKKyAgICAgICAgfQorfQorCitpbnQKK2RvX2hlbHAgKFBlZERldmljZSoqIGRldikKK3sKKyAgICAgICAgaWYgKGNvbW1hbmRfbGluZV9nZXRfd29yZF9jb3VudCAoKSkgeworICAgICAgICAgICAgICAgIGNoYXIqICAgd29yZCA9IGNvbW1hbmRfbGluZV9wb3Bfd29yZCAoKTsKKyAgICAgICAgICAgICAgICBpZiAod29yZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaGVscF9vbiAod29yZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmcmVlICh3b3JkKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHJpbnRfY29tbWFuZHNfaGVscCgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50Citkb19ta2xhYmVsIChQZWREZXZpY2UqKiBkZXYpCit7CisgICAgICAgIFBlZERpc2sqICAgICAgICAgICAgICAgIGRpc2s7CisgICAgICAgIGNvbnN0IFBlZERpc2tUeXBlKiAgICAgIHR5cGUgPSBwZWRfZGlza19wcm9iZSAoKmRldik7CisKKyAgICAgICAgcGVkX2V4Y2VwdGlvbl9mZXRjaF9hbGwgKCk7CisgICAgICAgIGRpc2sgPSBwZWRfZGlza19uZXcgKCpkZXYpOworICAgICAgICBpZiAoIWRpc2spIHBlZF9leGNlcHRpb25fY2F0Y2ggKCk7CisgICAgICAgIHBlZF9leGNlcHRpb25fbGVhdmVfYWxsICgpOworCisgICAgICAgIGlmIChkaXNrKSB7CisgICAgICAgICAgICAgICAgaWYgKCFvcHRfc2NyaXB0X21vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghX2Rpc2tfd2Fybl9idXN5IChkaXNrKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcl9kZXN0cm95X2Rpc2s7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIV9kaXNrX3dhcm5fbG9zcyAoZGlzaykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JfZGVzdHJveV9kaXNrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHBlZF9kaXNrX2Rlc3Ryb3kgKGRpc2spOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFjb21tYW5kX2xpbmVfZ2V0X2Rpc2tfdHlwZSAoXygiTmV3IGRpc2sgbGFiZWwgdHlwZT8iKSwgJnR5cGUpKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAgZGlzayA9IHBlZF9kaXNrX25ld19mcmVzaCAoKmRldiwgdHlwZSk7CisgICAgICAgIGlmICghZGlzaykKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgIGlmICghcGVkX2Rpc2tfY29tbWl0IChkaXNrKSkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yX2Rlc3Ryb3lfZGlzazsKKyAgICAgICAgcGVkX2Rpc2tfZGVzdHJveSAoZGlzayk7CisKKyAgICAgICAgaWYgKCgqZGV2KS0+dHlwZSAhPSBQRURfREVWSUNFX0ZJTEUpCisgICAgICAgICAgICAgICAgZGlza19pc19tb2RpZmllZCA9IDE7CisKKyAgICAgICAgcmV0dXJuIDE7CisKK2Vycm9yX2Rlc3Ryb3lfZGlzazoKKyAgICAgICAgcGVkX2Rpc2tfZGVzdHJveSAoZGlzayk7CitlcnJvcjoKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2RvX21rZnMgKFBlZERldmljZSoqIGRldikKK3sKKyAgICAgICAgUGVkRGlzayogICAgICAgICAgICAgICAgZGlzazsKKyAgICAgICAgUGVkUGFydGl0aW9uKiAgICAgICAgICAgcGFydCA9IE5VTEw7CisgICAgICAgIGNvbnN0IFBlZEZpbGVTeXN0ZW1UeXBlKiB0eXBlID0gcGVkX2ZpbGVfc3lzdGVtX3R5cGVfZ2V0ICgiZXh0MiIpOworICAgICAgICBQZWRGaWxlU3lzdGVtKiAgICAgICAgICBmczsKKworICAgICAgICBkaXNrID0gcGVkX2Rpc2tfbmV3ICgqZGV2KTsKKyAgICAgICAgaWYgKCFkaXNrKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAgaWYgICghb3B0X3NjcmlwdF9tb2RlICYmICFfcGFydGl0aW9uX3dhcm5fbG9zcygpKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JfZGVzdHJveV9kaXNrOworCisgICAgICAgIGlmICghY29tbWFuZF9saW5lX2dldF9wYXJ0aXRpb24gKF8oIlBhcnRpdGlvbiBudW1iZXI/IiksIGRpc2ssICZwYXJ0KSkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yX2Rlc3Ryb3lfZGlzazsKKyAgICAgICAgaWYgKCFfcGFydGl0aW9uX3dhcm5fYnVzeSAocGFydCkpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcl9kZXN0cm95X2Rpc2s7CisgICAgICAgIGlmICghY29tbWFuZF9saW5lX2dldF9mc190eXBlIChfKCJGaWxlIHN5c3RlbT8iKSwgJnR5cGUpKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JfZGVzdHJveV9kaXNrOworCisgICAgICAgIGZzID0gcGVkX2ZpbGVfc3lzdGVtX2NyZWF0ZSAoJnBhcnQtPmdlb20sIHR5cGUsIGdfdGltZXIpOworICAgICAgICBpZiAoIWZzKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JfZGVzdHJveV9kaXNrOworICAgICAgICBwZWRfZmlsZV9zeXN0ZW1fY2xvc2UgKGZzKTsKKworICAgICAgICBpZiAoIXBlZF9wYXJ0aXRpb25fc2V0X3N5c3RlbSAocGFydCwgdHlwZSkpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcl9kZXN0cm95X2Rpc2s7CisgICAgICAgIGlmIChwZWRfcGFydGl0aW9uX2lzX2ZsYWdfYXZhaWxhYmxlIChwYXJ0LCBQRURfUEFSVElUSU9OX0xCQSkpCisgICAgICAgICAgICAgICAgcGVkX3BhcnRpdGlvbl9zZXRfZmxhZyAocGFydCwgUEVEX1BBUlRJVElPTl9MQkEsIDEpOworICAgICAgICBpZiAoIXBlZF9kaXNrX2NvbW1pdCAoZGlzaykpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcl9kZXN0cm95X2Rpc2s7CisgICAgICAgIHBlZF9kaXNrX2Rlc3Ryb3kgKGRpc2spOworCisgICAgICAgIGlmICgoKmRldiktPnR5cGUgIT0gUEVEX0RFVklDRV9GSUxFKQorICAgICAgICAgICAgICAgIGRpc2tfaXNfbW9kaWZpZWQgPSAxOworCisgICAgICAgIHJldHVybiAxOworCitlcnJvcl9kZXN0cm95X2Rpc2s6CisgICAgICAgIHBlZF9kaXNrX2Rlc3Ryb3kgKGRpc2spOworZXJyb3I6CisgICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Citkb19ta3BhcnQgKFBlZERldmljZSoqIGRldikKK3sKKyAgICAgICAgUGVkRGlzayogICAgICAgICAgICAgICAgIGRpc2s7CisgICAgICAgIFBlZFBhcnRpdGlvbiogICAgICAgICAgICBwYXJ0OworICAgICAgICBQZWRQYXJ0aXRpb25UeXBlICAgICAgICAgcGFydF90eXBlOworICAgICAgICBjb25zdCBQZWRGaWxlU3lzdGVtVHlwZSogZnNfdHlwZSA9IHBlZF9maWxlX3N5c3RlbV90eXBlX2dldCAoImV4dDIiKTsKKyAgICAgICAgUGVkU2VjdG9yICAgICAgICAgICAgICAgIHN0YXJ0ID0gMCwgZW5kID0gMDsKKyAgICAgICAgUGVkR2VvbWV0cnkgICAgICAgICAgICAgICpyYW5nZV9zdGFydCA9IE5VTEwsICpyYW5nZV9lbmQgPSBOVUxMOworICAgICAgICBQZWRDb25zdHJhaW50KiAgICAgICAgICAgdXNlcl9jb25zdHJhaW50OworICAgICAgICBQZWRDb25zdHJhaW50KiAgICAgICAgICAgZGV2X2NvbnN0cmFpbnQ7CisgICAgICAgIFBlZENvbnN0cmFpbnQqICAgICAgICAgICBmaW5hbF9jb25zdHJhaW50OworICAgICAgICBjaGFyKiAgICAgICAgICAgICAgICAgICAgcGVla193b3JkOworICAgICAgICBjaGFyKiAgICAgICAgICAgICAgICAgICAgcGFydF9uYW1lID0gTlVMTDsKKyAgICAgICAgY2hhciAgICAgICAgICAgICAgICAgICAgICpzdGFydF91c3IgPSBOVUxMLCAqZW5kX3VzciA9IE5VTEw7CisgICAgICAgIGNoYXIgICAgICAgICAgICAgICAgICAgICAqc3RhcnRfc29sID0gTlVMTCwgKmVuZF9zb2wgPSBOVUxMOworICAgICAgICAKKyAgICAgICAgZGlzayA9IHBlZF9kaXNrX25ldyAoKmRldik7CisgICAgICAgIGlmICghZGlzaykKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgIGlmICghcGVkX2Rpc2tfdHlwZV9jaGVja19mZWF0dXJlIChkaXNrLT50eXBlLCBQRURfRElTS19UWVBFX0VYVEVOREVEKSkgeworICAgICAgICAgICAgICAgIHBhcnRfdHlwZSA9IFBFRF9QQVJUSVRJT05fTk9STUFMOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICghY29tbWFuZF9saW5lX2dldF9wYXJ0X3R5cGUgKF8oIlBhcnRpdGlvbiB0eXBlPyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzaywgJnBhcnRfdHlwZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yX2Rlc3Ryb3lfZGlzazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChwZWRfZGlza190eXBlX2NoZWNrX2ZlYXR1cmUgKGRpc2stPnR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBFRF9ESVNLX1RZUEVfUEFSVElUSU9OX05BTUUpKSAKKyAgICAgICAgICAgICAgICBwYXJ0X25hbWUgPSBjb21tYW5kX2xpbmVfZ2V0X3dvcmQgKF8oIlBhcnRpdGlvbiBuYW1lPyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIsIE5VTEwsIDEpOyAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgcGVla193b3JkID0gY29tbWFuZF9saW5lX3BlZWtfd29yZCAoKTsKKyAgICAgICAgaWYgKHBhcnRfdHlwZSA9PSBQRURfUEFSVElUSU9OX0VYVEVOREVECisgICAgICAgICAgICB8fCAocGVla193b3JkICYmIGlzZGlnaXQgKHBlZWtfd29yZFswXSkpKSB7CisgICAgICAgICAgICAgICAgZnNfdHlwZSA9IE5VTEw7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKCFjb21tYW5kX2xpbmVfZ2V0X2ZzX3R5cGUgKF8oIkZpbGUgc3lzdGVtIHR5cGU/IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmc190eXBlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JfZGVzdHJveV9kaXNrOworICAgICAgICB9CisgICAgICAgIGlmIChwZWVrX3dvcmQpCisgICAgICAgICAgICAgICAgcGVkX2ZyZWUgKHBlZWtfd29yZCk7CisKKyAgICAgICAgaWYgKCFjb21tYW5kX2xpbmVfZ2V0X3NlY3RvciAoXygiU3RhcnQ/IiksICpkZXYsICZzdGFydCwgJnJhbmdlX3N0YXJ0KSkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yX2Rlc3Ryb3lfZGlzazsKKyAgICAgICAgaWYgKCFjb21tYW5kX2xpbmVfZ2V0X3NlY3RvciAoXygiRW5kPyIpLCAqZGV2LCAmZW5kLCAmcmFuZ2VfZW5kKSkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yX2Rlc3Ryb3lfZGlzazsKKyAgICAgICAgCisgICAgICAgIC8qIHByb2Nlc3Npbmcgc3RhcnRzIGhlcmUgKi8KKyAgICAgICAgcGFydCA9IHBlZF9wYXJ0aXRpb25fbmV3IChkaXNrLCBwYXJ0X3R5cGUsIGZzX3R5cGUsIHN0YXJ0LCBlbmQpOworICAgICAgICBpZiAoIXBhcnQpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcl9kZXN0cm95X2Rpc2s7CisKKyAgICAgICAgc25hcF90b19ib3VuZGFyaWVzICgmcGFydC0+Z2VvbSwgTlVMTCwgZGlzaywgcmFuZ2Vfc3RhcnQsIHJhbmdlX2VuZCk7CisKKyAgICAgICAgLyogY3JlYXRlIGNvbnN0cmFpbnRzICovCisgICAgICAgIHVzZXJfY29uc3RyYWludCA9IGNvbnN0cmFpbnRfZnJvbV9zdGFydF9lbmQgKCpkZXYsIHJhbmdlX3N0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VfZW5kKTsKKyAgICAgICAgUEVEX0FTU0VSVCAodXNlcl9jb25zdHJhaW50ICE9IE5VTEwsIHJldHVybiAwKTsKKworICAgICAgICBkZXZfY29uc3RyYWludCA9IHBlZF9kZXZpY2VfZ2V0X2NvbnN0cmFpbnQgKCpkZXYpOworICAgICAgICBQRURfQVNTRVJUIChkZXZfY29uc3RyYWludCAhPSBOVUxMLCByZXR1cm4gMCk7CisKKyAgICAgICAgZmluYWxfY29uc3RyYWludCA9IHBlZF9jb25zdHJhaW50X2ludGVyc2VjdCAodXNlcl9jb25zdHJhaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2NvbnN0cmFpbnQpOworICAgICAgICBpZiAoIWZpbmFsX2NvbnN0cmFpbnQpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcl9kZXN0cm95X3NpbXBsZV9jb25zdHJhaW50czsKKworICAgICAgICAvKiBzdWJqZWN0IHRvIHBhcnRpdGlvbiBjb25zdHJhaW50ICovCisgICAgICAgIHBlZF9leGNlcHRpb25fZmV0Y2hfYWxsKCk7CisgICAgICAgIGlmICghcGVkX2Rpc2tfYWRkX3BhcnRpdGlvbiAoZGlzaywgcGFydCwgZmluYWxfY29uc3RyYWludCkpIHsKKyAgICAgICAgICAgICAgICBwZWRfZXhjZXB0aW9uX2xlYXZlX2FsbCgpOworICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHBlZF9kaXNrX2FkZF9wYXJ0aXRpb24gKGRpc2ssIHBhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVkX2NvbnN0cmFpbnRfYW55ICgqZGV2KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X3VzciA9IHBlZF91bml0X2Zvcm1hdCAoKmRldiwgc3RhcnQpOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kX3VzciAgID0gcGVkX3VuaXRfZm9ybWF0ICgqZGV2LCBlbmQpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRfc29sID0gcGVkX3VuaXRfZm9ybWF0ICgqZGV2LCBwYXJ0LT5nZW9tLnN0YXJ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZF9zb2wgICA9IHBlZF91bml0X2Zvcm1hdCAoKmRldiwgcGFydC0+Z2VvbS5lbmQpOworCisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHBlZF9leGNlcHRpb25fdGhyb3cgKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQRURfRVhDRVBUSU9OX1dBUk5JTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBFRF9FWENFUFRJT05fWUVTX05PLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJZb3UgcmVxdWVzdGVkIGEgcGFydGl0aW9uIGZyb20gJXMgdG8gJXMuXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBjbG9zZXN0IGxvY2F0aW9uIHdlIGNhbiBtYW5hZ2UgaXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyB0byAlcy4gICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSXMgdGhpcyBzdGlsbCBhY2NlcHRhYmxlIHRvIHlvdT8iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRfdXNyLCBlbmRfdXNyLCBzdGFydF9zb2wsIGVuZF9zb2wpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFBFRF9FWENFUFRJT05fWUVTOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFsbCBpcyB3ZWxsIGluIHRoaXMgc3RhdGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBQRURfRVhDRVBUSU9OX05POgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFBFRF9FWENFUFRJT05fVU5IQU5ETEVEOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHVuZG8gcGFydGl0aW9uIGFkZGl0aW9uICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcl9yZW1vdmVfcGFydDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcl9yZW1vdmVfcGFydDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcGVkX2V4Y2VwdGlvbl9jYXRjaCgpOworCisgICAgICAgIC8qIHNldCBtaW5vciBhdHRyaWJ1dGVzICovCisgICAgICAgIGlmIChwYXJ0X25hbWUpCisgICAgICAgICAgICAgICAgUEVEX0FTU0VSVCAocGVkX3BhcnRpdGlvbl9zZXRfbmFtZSAocGFydCwgcGFydF9uYW1lKSwgcmV0dXJuIDApOworICAgICAgICBpZiAoIXBlZF9wYXJ0aXRpb25fc2V0X3N5c3RlbSAocGFydCwgZnNfdHlwZSkpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcl9kZXN0cm95X2Rpc2s7CisgICAgICAgIGlmIChwZWRfcGFydGl0aW9uX2lzX2ZsYWdfYXZhaWxhYmxlIChwYXJ0LCBQRURfUEFSVElUSU9OX0xCQSkpCisgICAgICAgICAgICAgICAgcGVkX3BhcnRpdGlvbl9zZXRfZmxhZyAocGFydCwgUEVEX1BBUlRJVElPTl9MQkEsIDEpOworICAgICAgICAKKyAgICAgICAgaWYgKCFwZWRfZGlza19jb21taXQgKGRpc2spKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JfZGVzdHJveV9kaXNrOworICAgICAgICAKKyAgICAgICAgLyogY2xlYW4gdXAgKi8KKyAgICAgICAgcGVkX2NvbnN0cmFpbnRfZGVzdHJveSAoZmluYWxfY29uc3RyYWludCk7CisgICAgICAgIHBlZF9jb25zdHJhaW50X2Rlc3Ryb3kgKHVzZXJfY29uc3RyYWludCk7CisgICAgICAgIHBlZF9jb25zdHJhaW50X2Rlc3Ryb3kgKGRldl9jb25zdHJhaW50KTsKKworICAgICAgICBwZWRfZGlza19kZXN0cm95IChkaXNrKTsKKyAgICAgICAgCisgICAgICAgIGlmIChyYW5nZV9zdGFydCAhPSBOVUxMKQorICAgICAgICAgICAgICAgIHBlZF9nZW9tZXRyeV9kZXN0cm95IChyYW5nZV9zdGFydCk7CisgICAgICAgIGlmIChyYW5nZV9lbmQgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICBwZWRfZ2VvbWV0cnlfZGVzdHJveSAocmFuZ2VfZW5kKTsKKyAgICAgICAgCisgICAgICAgIGlmIChzdGFydF91c3IgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICBwZWRfZnJlZSAoc3RhcnRfdXNyKTsKKyAgICAgICAgaWYgKGVuZF91c3IgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICBwZWRfZnJlZSAoZW5kX3Vzcik7CisgICAgICAgIGlmIChzdGFydF9zb2wgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICBwZWRfZnJlZSAoc3RhcnRfc29sKTsKKyAgICAgICAgaWYgKGVuZF9zb2wgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICBwZWRfZnJlZSAoZW5kX3NvbCk7CisKKyAgICAgICAgaWYgKCgqZGV2KS0+dHlwZSAhPSBQRURfREVWSUNFX0ZJTEUpCisgICAgICAgICAgICAgICAgZGlza19pc19tb2RpZmllZCA9IDE7CisKKyAgICAgICAgcmV0dXJuIDE7CisKK2Vycm9yX3JlbW92ZV9wYXJ0OgorICAgICAgICBwZWRfZGlza19yZW1vdmVfcGFydGl0aW9uIChkaXNrLCBwYXJ0KTsKKyAgICAgICAgcGVkX2NvbnN0cmFpbnRfZGVzdHJveSAoZmluYWxfY29uc3RyYWludCk7CitlcnJvcl9kZXN0cm95X3NpbXBsZV9jb25zdHJhaW50czoKKyAgICAgICAgcGVkX2NvbnN0cmFpbnRfZGVzdHJveSAodXNlcl9jb25zdHJhaW50KTsKKyAgICAgICAgcGVkX2NvbnN0cmFpbnRfZGVzdHJveSAoZGV2X2NvbnN0cmFpbnQpOworICAgICAgICBwZWRfcGFydGl0aW9uX2Rlc3Ryb3kgKHBhcnQpOworZXJyb3JfZGVzdHJveV9kaXNrOgorICAgICAgICBwZWRfZGlza19kZXN0cm95IChkaXNrKTsKK2Vycm9yOgorICAgICAgICBpZiAocmFuZ2Vfc3RhcnQgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICBwZWRfZ2VvbWV0cnlfZGVzdHJveSAocmFuZ2Vfc3RhcnQpOworICAgICAgICBpZiAocmFuZ2VfZW5kICE9IE5VTEwpCisgICAgICAgICAgICAgICAgcGVkX2dlb21ldHJ5X2Rlc3Ryb3kgKHJhbmdlX2VuZCk7CisKKyAgICAgICAgaWYgKHN0YXJ0X3VzciAhPSBOVUxMKQorICAgICAgICAgICAgICAgIHBlZF9mcmVlIChzdGFydF91c3IpOworICAgICAgICBpZiAoZW5kX3VzciAhPSBOVUxMKQorICAgICAgICAgICAgICAgIHBlZF9mcmVlIChlbmRfdXNyKTsKKyAgICAgICAgaWYgKHN0YXJ0X3NvbCAhPSBOVUxMKQorICAgICAgICAgICAgICAgIHBlZF9mcmVlIChzdGFydF9zb2wpOworICAgICAgICBpZiAoZW5kX3NvbCAhPSBOVUxMKQorICAgICAgICAgICAgICAgIHBlZF9mcmVlIChlbmRfc29sKTsKKworICAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorZG9fbWtwYXJ0ZnMgKFBlZERldmljZSoqIGRldikKK3sKKyAgICAgICAgUGVkRGlzayogICAgICAgICAgICBkaXNrOworICAgICAgICBQZWRQYXJ0aXRpb24qICAgICAgIHBhcnQ7CisgICAgICAgIFBlZFBhcnRpdGlvblR5cGUgICAgcGFydF90eXBlOworICAgICAgICBjb25zdCBQZWRGaWxlU3lzdGVtVHlwZSogZnNfdHlwZSA9IHBlZF9maWxlX3N5c3RlbV90eXBlX2dldCAoImV4dDIiKTsKKyAgICAgICAgUGVkU2VjdG9yICAgICAgICAgICBzdGFydCA9IDAsIGVuZCA9IDA7CisgICAgICAgIFBlZEdlb21ldHJ5ICAgICAgICAgKnJhbmdlX3N0YXJ0ID0gTlVMTCwgKnJhbmdlX2VuZCA9IE5VTEw7CisgICAgICAgIFBlZENvbnN0cmFpbnQqICAgICAgdXNlcl9jb25zdHJhaW50OworICAgICAgICBQZWRDb25zdHJhaW50KiAgICAgIGRldl9jb25zdHJhaW50OworICAgICAgICBQZWRDb25zdHJhaW50KiAgICAgIGZpbmFsX2NvbnN0cmFpbnQ7CisgICAgICAgIFBlZEZpbGVTeXN0ZW0qICAgICAgZnM7CisgICAgICAgIGNoYXIqICAgICAgICAgICAgICAgcGFydF9uYW1lID0gTlVMTDsKKyAgICAgICAgY2hhciAgICAgICAgICAgICAgICAqc3RhcnRfdXNyID0gTlVMTCwgKmVuZF91c3IgPSBOVUxMOworICAgICAgICBjaGFyICAgICAgICAgICAgICAgICpzdGFydF9zb2wgPSBOVUxMLCAqZW5kX3NvbCA9IE5VTEw7CisKKyAgICAgICAgZGlzayA9IHBlZF9kaXNrX25ldyAoKmRldik7CisgICAgICAgIGlmICghZGlzaykKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgIGlmICghcGVkX2Rpc2tfdHlwZV9jaGVja19mZWF0dXJlIChkaXNrLT50eXBlLCBQRURfRElTS19UWVBFX0VYVEVOREVEKSkgeworICAgICAgICAgICAgICAgIHBhcnRfdHlwZSA9IFBFRF9QQVJUSVRJT05fTk9STUFMOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICghY29tbWFuZF9saW5lX2dldF9wYXJ0X3R5cGUgKF8oIlBhcnRpdGlvbiB0eXBlPyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzaywgJnBhcnRfdHlwZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yX2Rlc3Ryb3lfZGlzazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChwZWRfZGlza190eXBlX2NoZWNrX2ZlYXR1cmUgKGRpc2stPnR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBFRF9ESVNLX1RZUEVfUEFSVElUSU9OX05BTUUpKSAKKyAgICAgICAgICAgICAgICBwYXJ0X25hbWUgPSBjb21tYW5kX2xpbmVfZ2V0X3dvcmQgKF8oIlBhcnRpdGlvbiBuYW1lPyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIsIE5VTEwsIDEpOyAKKworICAgICAgICBpZiAocGFydF90eXBlID09IFBFRF9QQVJUSVRJT05fRVhURU5ERUQpIHsKKyAgICAgICAgICAgICAgICBwZWRfZXhjZXB0aW9uX3Rocm93IChQRURfRVhDRVBUSU9OX0VSUk9SLCBQRURfRVhDRVBUSU9OX0NBTkNFTCwKKyAgICAgICAgICAgICAgICAgICAgICAgIF8oIkFuIGV4dGVuZGVkIHBhcnRpdGlvbiBjYW5ub3QgaG9sZCBhIGZpbGUgc3lzdGVtLiAgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiRGlkIHlvdSB3YW50IG1rcGFydD8iKSk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcl9kZXN0cm95X2Rpc2s7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWNvbW1hbmRfbGluZV9nZXRfZnNfdHlwZSAoXygiRmlsZSBzeXN0ZW0gdHlwZT8iKSwgJmZzX3R5cGUpKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JfZGVzdHJveV9kaXNrOworICAgICAgICBpZiAoIWNvbW1hbmRfbGluZV9nZXRfc2VjdG9yIChfKCJTdGFydD8iKSwgKmRldiwgJnN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmFuZ2Vfc3RhcnQpKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JfZGVzdHJveV9kaXNrOworICAgICAgICBpZiAoIWNvbW1hbmRfbGluZV9nZXRfc2VjdG9yIChfKCJFbmQ/IiksICpkZXYsICZlbmQsICZyYW5nZV9lbmQpKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JfZGVzdHJveV9kaXNrOworCisgICAgICAgIC8qIGF0dGVtcHQgdG8gY3JlYXRlIHRoZSBwYXJ0aXRpb24gbm93ICovCisgICAgICAgIHBhcnQgPSBwZWRfcGFydGl0aW9uX25ldyAoZGlzaywgcGFydF90eXBlLCBmc190eXBlLCBzdGFydCwgZW5kKTsKKyAgICAgICAgaWYgKCFwYXJ0KQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JfZGVzdHJveV9kaXNrOworCisgICAgICAgIHNuYXBfdG9fYm91bmRhcmllcyAoJnBhcnQtPmdlb20sIE5VTEwsIGRpc2ssIHJhbmdlX3N0YXJ0LCByYW5nZV9lbmQpOworCisgICAgICAgIC8qIGNyZWF0ZSBjb25zdHJhaW50cyAqLworICAgICAgICB1c2VyX2NvbnN0cmFpbnQgPSBjb25zdHJhaW50X2Zyb21fc3RhcnRfZW5kICgqZGV2LCByYW5nZV9zdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZV9lbmQpOworICAgICAgICBQRURfQVNTRVJUICh1c2VyX2NvbnN0cmFpbnQgIT0gTlVMTCwgcmV0dXJuIDApOworCisgICAgICAgIGRldl9jb25zdHJhaW50ID0gcGVkX2RldmljZV9nZXRfY29uc3RyYWludCAoKmRldik7CisgICAgICAgIFBFRF9BU1NFUlQgKGRldl9jb25zdHJhaW50ICE9IE5VTEwsIHJldHVybiAwKTsKKworICAgICAgICBmaW5hbF9jb25zdHJhaW50ID0gcGVkX2NvbnN0cmFpbnRfaW50ZXJzZWN0ICh1c2VyX2NvbnN0cmFpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldl9jb25zdHJhaW50KTsKKyAgICAgICAgaWYgKCFmaW5hbF9jb25zdHJhaW50KQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JfZGVzdHJveV9zaW1wbGVfY29uc3RyYWludHM7CisKKyAgICAgICAgLyogc3ViamVjdCB0byBwYXJ0aXRpb24gY29uc3RyYWludCAqLworICAgICAgICBwZWRfZXhjZXB0aW9uX2ZldGNoX2FsbCgpOworICAgICAgICBpZiAoIXBlZF9kaXNrX2FkZF9wYXJ0aXRpb24gKGRpc2ssIHBhcnQsIGZpbmFsX2NvbnN0cmFpbnQpKSB7CisgICAgICAgICAgICAgICAgcGVkX2V4Y2VwdGlvbl9sZWF2ZV9hbGwoKTsKKyAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChwZWRfZGlza19hZGRfcGFydGl0aW9uIChkaXNrLCBwYXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZF9jb25zdHJhaW50X2FueSAoKmRldikpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF91c3IgPSBwZWRfdW5pdF9mb3JtYXQgKCpkZXYsIHN0YXJ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZF91c3IgICA9IHBlZF91bml0X2Zvcm1hdCAoKmRldiwgZW5kKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X3NvbCA9IHBlZF91bml0X2Zvcm1hdCAoKmRldiwgcGFydC0+Z2VvbS5zdGFydCk7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmRfc29sICAgPSBwZWRfdW5pdF9mb3JtYXQgKCpkZXYsIHBhcnQtPmdlb20uZW5kKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChwZWRfZXhjZXB0aW9uX3Rocm93ICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEVEX0VYQ0VQVElPTl9XQVJOSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQRURfRVhDRVBUSU9OX1lFU19OTywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiWW91IHJlcXVlc3RlZCBhIHBhcnRpdGlvbiBmcm9tICVzIHRvICVzLlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgY2xvc2VzdCBsb2NhdGlvbiB3ZSBjYW4gbWFuYWdlIGlzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgdG8gJXMuICAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIklzIHRoaXMgc3RpbGwgYWNjZXB0YWJsZSB0byB5b3U/IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X3VzciwgZW5kX3Vzciwgc3RhcnRfc29sLCBlbmRfc29sKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFBFRF9FWENFUFRJT05fWUVTOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFsbCBpcyB3ZWxsIGluIHRoaXMgc3RhdGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBQRURfRVhDRVBUSU9OX05POgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFBFRF9FWENFUFRJT05fVU5IQU5ETEVEOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHVuZG8gcGFydGl0aW9uIGFkZGl0aW9uICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcl9yZW1vdmVfcGFydDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcl9yZW1vdmVfcGFydDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcGVkX2V4Y2VwdGlvbl9jYXRjaCgpOworICAgICAgICBwZWRfZXhjZXB0aW9uX2xlYXZlX2FsbCgpOworCisgICAgICAgIC8qIHNldCBMQkEgZmxhZyBhdXRvbWF0aWNhbGx5IGlmIGF2YWlsYWJsZSAqLworICAgICAgICBpZiAocGVkX3BhcnRpdGlvbl9pc19mbGFnX2F2YWlsYWJsZSAocGFydCwgUEVEX1BBUlRJVElPTl9MQkEpKQorICAgICAgICAgICAgICAgIHBlZF9wYXJ0aXRpb25fc2V0X2ZsYWcgKHBhcnQsIFBFRF9QQVJUSVRJT05fTEJBLCAxKTsKKworICAgICAgICAvKiBmcyBjcmVhdGlvbiAqLworICAgICAgICBmcyA9IHBlZF9maWxlX3N5c3RlbV9jcmVhdGUgKCZwYXJ0LT5nZW9tLCBmc190eXBlLCBnX3RpbWVyKTsKKyAgICAgICAgaWYgKCFmcykgCisgICAgICAgICAgICAgICAgZ290byBlcnJvcl9kZXN0cm95X2Rpc2s7CisgICAgICAgIHBlZF9maWxlX3N5c3RlbV9jbG9zZSAoZnMpOworCisgICAgICAgIGlmICghcGVkX3BhcnRpdGlvbl9zZXRfc3lzdGVtIChwYXJ0LCBmc190eXBlKSkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yX2Rlc3Ryb3lfZGlzazsKKworICAgICAgICBpZiAoIXBlZF9kaXNrX2NvbW1pdCAoZGlzaykpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcl9kZXN0cm95X2Rpc2s7CisKKyAgICAgICAgLyogY2xlYW4gdXAgKi8KKyAgICAgICAgcGVkX2NvbnN0cmFpbnRfZGVzdHJveSAoZmluYWxfY29uc3RyYWludCk7CisgICAgICAgIHBlZF9jb25zdHJhaW50X2Rlc3Ryb3kgKHVzZXJfY29uc3RyYWludCk7CisgICAgICAgIHBlZF9jb25zdHJhaW50X2Rlc3Ryb3kgKGRldl9jb25zdHJhaW50KTsKKworICAgICAgICBwZWRfZGlza19kZXN0cm95IChkaXNrKTsKKworICAgICAgICBpZiAocmFuZ2Vfc3RhcnQgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICBwZWRfZ2VvbWV0cnlfZGVzdHJveSAocmFuZ2Vfc3RhcnQpOworICAgICAgICBpZiAocmFuZ2VfZW5kICE9IE5VTEwpCisgICAgICAgICAgICAgICAgcGVkX2dlb21ldHJ5X2Rlc3Ryb3kgKHJhbmdlX2VuZCk7CisKKyAgICAgICAgaWYgKHN0YXJ0X3VzciAhPSBOVUxMKQorICAgICAgICAgICAgICAgIHBlZF9mcmVlIChzdGFydF91c3IpOworICAgICAgICBpZiAoZW5kX3VzciAhPSBOVUxMKQorICAgICAgICAgICAgICAgIHBlZF9mcmVlIChlbmRfdXNyKTsKKyAgICAgICAgaWYgKHN0YXJ0X3NvbCAhPSBOVUxMKQorICAgICAgICAgICAgICAgIHBlZF9mcmVlIChzdGFydF9zb2wpOworICAgICAgICBpZiAoZW5kX3NvbCAhPSBOVUxMKQorICAgICAgICAgICAgICAgIHBlZF9mcmVlIChlbmRfc29sKTsKKworICAgICAgICBpZiAoKCpkZXYpLT50eXBlICE9IFBFRF9ERVZJQ0VfRklMRSkKKyAgICAgICAgICAgICAgICBkaXNrX2lzX21vZGlmaWVkID0gMTsKKworICAgICAgICByZXR1cm4gMTsKKworZXJyb3JfcmVtb3ZlX3BhcnQ6CisgICAgICAgIHBlZF9kaXNrX3JlbW92ZV9wYXJ0aXRpb24gKGRpc2ssIHBhcnQpOworICAgICAgICBwZWRfY29uc3RyYWludF9kZXN0cm95IChmaW5hbF9jb25zdHJhaW50KTsKK2Vycm9yX2Rlc3Ryb3lfc2ltcGxlX2NvbnN0cmFpbnRzOgorICAgICAgICBwZWRfY29uc3RyYWludF9kZXN0cm95ICh1c2VyX2NvbnN0cmFpbnQpOworICAgICAgICBwZWRfY29uc3RyYWludF9kZXN0cm95IChkZXZfY29uc3RyYWludCk7CisgICAgICAgIHBlZF9wYXJ0aXRpb25fZGVzdHJveSAocGFydCk7CitlcnJvcl9kZXN0cm95X2Rpc2s6CisgICAgICAgIHBlZF9kaXNrX2Rlc3Ryb3kgKGRpc2spOworZXJyb3I6CisgICAgICAgIGlmIChyYW5nZV9zdGFydCAhPSBOVUxMKQorICAgICAgICAgICAgICAgIHBlZF9nZW9tZXRyeV9kZXN0cm95IChyYW5nZV9zdGFydCk7CisgICAgICAgIGlmIChyYW5nZV9lbmQgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICBwZWRfZ2VvbWV0cnlfZGVzdHJveSAocmFuZ2VfZW5kKTsKKworICAgICAgICBpZiAoc3RhcnRfdXNyICE9IE5VTEwpCisgICAgICAgICAgICAgICAgcGVkX2ZyZWUgKHN0YXJ0X3Vzcik7CisgICAgICAgIGlmIChlbmRfdXNyICE9IE5VTEwpCisgICAgICAgICAgICAgICAgcGVkX2ZyZWUgKGVuZF91c3IpOworICAgICAgICBpZiAoc3RhcnRfc29sICE9IE5VTEwpCisgICAgICAgICAgICAgICAgcGVkX2ZyZWUgKHN0YXJ0X3NvbCk7CisgICAgICAgIGlmIChlbmRfc29sICE9IE5VTEwpCisgICAgICAgICAgICAgICAgcGVkX2ZyZWUgKGVuZF9zb2wpOworCisgICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Citkb19tb3ZlIChQZWREZXZpY2UqKiBkZXYpCit7CisgICAgICAgIFBlZERpc2sqICAgICAgICBkaXNrOworICAgICAgICBQZWRQYXJ0aXRpb24qICAgcGFydCA9IE5VTEw7CisgICAgICAgIFBlZEZpbGVTeXN0ZW0qICBmczsKKyAgICAgICAgUGVkRmlsZVN5c3RlbSogIGZzX2NvcHk7CisgICAgICAgIFBlZENvbnN0cmFpbnQqICBjb25zdHJhaW50OworICAgICAgICBQZWRTZWN0b3IgICAgICAgc3RhcnQgPSAwLCBlbmQgPSAwOworICAgICAgICBQZWRHZW9tZXRyeSAgICAgKnJhbmdlX3N0YXJ0ID0gTlVMTCwgKnJhbmdlX2VuZCA9IE5VTEw7CisgICAgICAgIFBlZEdlb21ldHJ5ICAgICBvbGRfZ2VvbSwgbmV3X2dlb207CisKKyAgICAgICAgZGlzayA9IHBlZF9kaXNrX25ldyAoKmRldik7CisgICAgICAgIGlmICghZGlzaykKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgIGlmICghY29tbWFuZF9saW5lX2dldF9wYXJ0aXRpb24gKF8oIlBhcnRpdGlvbiBudW1iZXI/IiksIGRpc2ssICZwYXJ0KSkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yX2Rlc3Ryb3lfZGlzazsKKyAgICAgICAgaWYgKCFfcGFydGl0aW9uX3dhcm5fYnVzeSAocGFydCkpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcl9kZXN0cm95X2Rpc2s7CisgICAgICAgIGlmIChwYXJ0LT50eXBlID09IFBFRF9QQVJUSVRJT05fRVhURU5ERUQpIHsKKyAgICAgICAgICAgICAgICBwZWRfZXhjZXB0aW9uX3Rocm93IChQRURfRVhDRVBUSU9OX0VSUk9SLCBQRURfRVhDRVBUSU9OX0NBTkNFTCwKKyAgICAgICAgICAgICAgICAgICAgICAgIF8oIkNhbid0IG1vdmUgYW4gZXh0ZW5kZWQgcGFydGl0aW9uLiIpKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yX2Rlc3Ryb3lfZGlzazsKKyAgICAgICAgfQorICAgICAgICBvbGRfZ2VvbSA9IHBhcnQtPmdlb207CisgICAgICAgIGZzID0gcGVkX2ZpbGVfc3lzdGVtX29wZW4gKCZvbGRfZ2VvbSk7CisgICAgICAgIGlmICghZnMpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcl9kZXN0cm95X2Rpc2s7CisKKyAgICAgICAgLyogZ2V0IG5ldyB0YXJnZXQgKi8KKyAgICAgICAgaWYgKCFjb21tYW5kX2xpbmVfZ2V0X3NlY3RvciAoXygiU3RhcnQ/IiksICpkZXYsICZzdGFydCwgJnJhbmdlX3N0YXJ0KSkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yX2Nsb3NlX2ZzOworICAgICAgICBlbmQgPSBzdGFydCArIG9sZF9nZW9tLmxlbmd0aCAtIDE7CisgICAgICAgIGlmICghY29tbWFuZF9saW5lX2dldF9zZWN0b3IgKF8oIkVuZD8iKSwgKmRldiwgJmVuZCwgJnJhbmdlX2VuZCkpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcl9jbG9zZV9mczsKKworICAgICAgICAvKiBzZXQgLyB0ZXN0IG9uICJkaXNrIiAqLworICAgICAgICBpZiAoIXBlZF9nZW9tZXRyeV9pbml0ICgmbmV3X2dlb20sICpkZXYsIHN0YXJ0LCBlbmQgLSBzdGFydCArIDEpKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JfY2xvc2VfZnM7CisgICAgICAgIHNuYXBfdG9fYm91bmRhcmllcyAoJm5ld19nZW9tLCBOVUxMLCBkaXNrLCByYW5nZV9zdGFydCwgcmFuZ2VfZW5kKTsKKworICAgICAgICBjb25zdHJhaW50ID0gY29uc3RyYWludF9pbnRlcnNlY3RfYW5kX2Rlc3Ryb3kgKAorICAgICAgICAgICAgICAgICAgICAgICAgcGVkX2ZpbGVfc3lzdGVtX2dldF9jb3B5X2NvbnN0cmFpbnQgKGZzLCAqZGV2KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cmFpbnRfZnJvbV9zdGFydF9lbmQoKmRldixyYW5nZV9zdGFydCxyYW5nZV9lbmQpKTsKKyAgICAgICAgaWYgKCFwZWRfZGlza19zZXRfcGFydGl0aW9uX2dlb20gKGRpc2ssIHBhcnQsIGNvbnN0cmFpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfZ2VvbS5zdGFydCwgbmV3X2dlb20uZW5kKSkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yX2Rlc3Ryb3lfY29uc3RyYWludDsKKyAgICAgICAgcGVkX2NvbnN0cmFpbnRfZGVzdHJveSAoY29uc3RyYWludCk7CisgICAgICAgIGlmIChwZWRfZ2VvbWV0cnlfdGVzdF9vdmVybGFwICgmb2xkX2dlb20sICZwYXJ0LT5nZW9tKSkgeworICAgICAgICAgICAgICAgIHBlZF9leGNlcHRpb25fdGhyb3cgKFBFRF9FWENFUFRJT05fRVJST1IsIFBFRF9FWENFUFRJT05fQ0FOQ0VMLAorICAgICAgICAgICAgICAgICAgICAgICAgXygiQ2FuJ3QgbW92ZSBhIHBhcnRpdGlvbiBvbnRvIGl0c2VsZi4gIFRyeSB1c2luZyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXNpemUsIHBlcmhhcHM/IikpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JfY2xvc2VfZnM7CisgICAgICAgIH0KKworICAgICAgICAvKiBkbyB0aGUgbW92ZSAqLworICAgICAgICBmc19jb3B5ID0gcGVkX2ZpbGVfc3lzdGVtX2NvcHkgKGZzLCAmcGFydC0+Z2VvbSwgZ190aW1lcik7CisgICAgICAgIGlmICghZnNfY29weSkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yX2Nsb3NlX2ZzOworICAgICAgICBwZWRfZmlsZV9zeXN0ZW1fY2xvc2UgKGZzX2NvcHkpOworICAgICAgICBwZWRfZmlsZV9zeXN0ZW1fY2xvc2UgKGZzKTsKKyAgICAgICAgaWYgKCFwZWRfZGlza19jb21taXQgKGRpc2spKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JfZGVzdHJveV9kaXNrOworICAgICAgICBwZWRfZGlza19kZXN0cm95IChkaXNrKTsKKyAgICAgICAgaWYgKHJhbmdlX3N0YXJ0ICE9IE5VTEwpCisgICAgICAgICAgICAgICAgcGVkX2dlb21ldHJ5X2Rlc3Ryb3kgKHJhbmdlX3N0YXJ0KTsKKyAgICAgICAgaWYgKHJhbmdlX2VuZCAhPSBOVUxMKQorICAgICAgICAgICAgICAgIHBlZF9nZW9tZXRyeV9kZXN0cm95IChyYW5nZV9lbmQpOworCisgICAgICAgIGlmICgoKmRldiktPnR5cGUgIT0gUEVEX0RFVklDRV9GSUxFKQorICAgICAgICAgICAgICAgIGRpc2tfaXNfbW9kaWZpZWQgPSAxOworCisgICAgICAgIHJldHVybiAxOworCitlcnJvcl9kZXN0cm95X2NvbnN0cmFpbnQ6CisgICAgICAgIHBlZF9jb25zdHJhaW50X2Rlc3Ryb3kgKGNvbnN0cmFpbnQpOworZXJyb3JfY2xvc2VfZnM6CisgICAgICAgIHBlZF9maWxlX3N5c3RlbV9jbG9zZSAoZnMpOworZXJyb3JfZGVzdHJveV9kaXNrOgorICAgICAgICBwZWRfZGlza19kZXN0cm95IChkaXNrKTsKK2Vycm9yOgorICAgICAgICBpZiAocmFuZ2Vfc3RhcnQgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICBwZWRfZ2VvbWV0cnlfZGVzdHJveSAocmFuZ2Vfc3RhcnQpOworICAgICAgICBpZiAocmFuZ2VfZW5kICE9IE5VTEwpCisgICAgICAgICAgICAgICAgcGVkX2dlb21ldHJ5X2Rlc3Ryb3kgKHJhbmdlX2VuZCk7CisgICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Citkb19uYW1lIChQZWREZXZpY2UqKiBkZXYpCit7CisgICAgICAgIFBlZERpc2sqICAgICAgICBkaXNrOworICAgICAgICBQZWRQYXJ0aXRpb24qICAgcGFydCA9IE5VTEw7CisgICAgICAgIGNoYXIqICAgICAgICAgICBuYW1lOworCisgICAgICAgIGRpc2sgPSBwZWRfZGlza19uZXcgKCpkZXYpOworICAgICAgICBpZiAoIWRpc2spCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICBpZiAoIWNvbW1hbmRfbGluZV9nZXRfcGFydGl0aW9uIChfKCJQYXJ0aXRpb24gbnVtYmVyPyIpLCBkaXNrLCAmcGFydCkpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcl9kZXN0cm95X2Rpc2s7CisKKyAgICAgICAgbmFtZSA9IGNvbW1hbmRfbGluZV9nZXRfd29yZCAoXygiUGFydGl0aW9uIG5hbWU/IiksCisgICAgICAgICAgICAgICAgICAgICAgICBwZWRfcGFydGl0aW9uX2dldF9uYW1lIChwYXJ0KSwgTlVMTCwgMCk7CisgICAgICAgIGlmICghbmFtZSkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yX2Rlc3Ryb3lfZGlzazsKKyAgICAgICAgaWYgKCFwZWRfcGFydGl0aW9uX3NldF9uYW1lIChwYXJ0LCBuYW1lKSkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yX2ZyZWVfbmFtZTsKKyAgICAgICAgZnJlZSAobmFtZSk7CisKKyAgICAgICAgaWYgKCFwZWRfZGlza19jb21taXQgKGRpc2spKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JfZGVzdHJveV9kaXNrOworICAgICAgICBwZWRfZGlza19kZXN0cm95IChkaXNrKTsKKyAgICAgICAgcmV0dXJuIDE7CisKK2Vycm9yX2ZyZWVfbmFtZToKKyAgICAgICAgZnJlZSAobmFtZSk7CitlcnJvcl9kZXN0cm95X2Rpc2s6CisgICAgICAgIHBlZF9kaXNrX2Rlc3Ryb3kgKGRpc2spOworZXJyb3I6CisgICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgY2hhcioKK3BhcnRpdGlvbl9wcmludF9mbGFncyAoUGVkUGFydGl0aW9uKiBwYXJ0KQoreworICAgICAgICBQZWRQYXJ0aXRpb25GbGFnICAgICAgICBmbGFnOworICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICBmaXJzdF9mbGFnOworICAgICAgICBjb25zdCBjaGFyKiAgICAgICAgICAgICBuYW1lOworICAgICAgICBjaGFyKiAgICAgICAgICAgICAgICAgICByZXMgPSBwZWRfbWFsbG9jKDEpOyAKKyAgICAgICAgdm9pZCogICAgICAgICAgICAgICAgICAgX3JlcyA9IHJlczsKKworICAgICAgICAqcmVzID0gJ1wwJzsKKworICAgICAgICBmaXJzdF9mbGFnID0gMTsKKyAgICAgICAgZm9yIChmbGFnID0gcGVkX3BhcnRpdGlvbl9mbGFnX25leHQgKDApOyBmbGFnOworICAgICAgICAgICAgIGZsYWcgPSBwZWRfcGFydGl0aW9uX2ZsYWdfbmV4dCAoZmxhZykpIHsKKyAgICAgICAgICAgICAgICBpZiAocGVkX3BhcnRpdGlvbl9nZXRfZmxhZyAocGFydCwgZmxhZykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdF9mbGFnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdF9mbGFnID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVzID0gcmVzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWRfcmVhbGxvYyAoJl9yZXMsIHN0cmxlbiAocmVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIDEgKyAyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gX3JlczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybmNhdCAocmVzLCAiLCAiLCAyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IF8ocGVkX3BhcnRpdGlvbl9mbGFnX2dldF9uYW1lIChmbGFnKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBfcmVzID0gcmVzOworICAgICAgICAgICAgICAgICAgICAgICAgcGVkX3JlYWxsb2MgKCZfcmVzLCBzdHJsZW4gKHJlcykgKyAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHN0cmxlbiAobmFtZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gX3JlczsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cm5jYXQgKHJlcywgbmFtZSwgMjEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXM7Cit9CisKKy8qIFByaW50cyBhIHNlY3RvciBvdXQsIGZpcnN0IGluIGNvbXBhY3QgZm9ybSwgYW5kIHRoZW4gd2l0aCBhIHBlcmNlbnRhZ2UuCisgKiBFZzogMzJHYiAoNDAlKQorICovCitzdGF0aWMgdm9pZAorcHJpbnRfc2VjdG9yX2NvbXBhY3RfYW5kX3BlcmNlbnQgKFBlZFNlY3RvciBzZWN0b3IsIFBlZERldmljZSogZGV2KQoreworICAgICAgICBjaGFyKiBjb21wYWN0OworICAgICAgICBjaGFyKiBwZXJjZW50OworCisgICAgICAgIGlmIChwZWRfdW5pdF9nZXRfZGVmYXVsdCgpID09IFBFRF9VTklUX1BFUkNFTlQpCisgICAgICAgICAgICAgICAgY29tcGFjdCA9IHBlZF91bml0X2Zvcm1hdCAoZGV2LCBzZWN0b3IpOworICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY29tcGFjdCA9IHBlZF91bml0X2Zvcm1hdF9jdXN0b20gKGRldiwgc2VjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQRURfVU5JVF9DT01QQUNUKTsKKworICAgICAgICBwZXJjZW50ID0gcGVkX3VuaXRfZm9ybWF0X2N1c3RvbSAoZGV2LCBzZWN0b3IsIFBFRF9VTklUX1BFUkNFTlQpOworCisgICAgICAgIHByaW50ZiAoIiVzICglcylcbiIsIGNvbXBhY3QsIHBlcmNlbnQpOworCisgICAgICAgIHBlZF9mcmVlIChjb21wYWN0KTsKKyAgICAgICAgcGVkX2ZyZWUgKHBlcmNlbnQpOworfQorCitzdGF0aWMgaW50CitwYXJ0aXRpb25fcHJpbnQgKFBlZFBhcnRpdGlvbiogcGFydCkKK3sKKyAgICAgICAgUGVkRmlsZVN5c3RlbSogIGZzOworICAgICAgICBQZWRDb25zdHJhaW50KiAgcmVzaXplX2NvbnN0cmFpbnQ7CisgICAgICAgIGNoYXIqICAgICAgICAgICBmbGFnczsKKworICAgICAgICBmcyA9IHBlZF9maWxlX3N5c3RlbV9vcGVuICgmcGFydC0+Z2VvbSk7CisgICAgICAgIGlmICghZnMpCisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgICAgcHV0Y2hhciAoJ1xuJyk7CisKKyAgICAgICAgZmxhZ3MgPSBwYXJ0aXRpb25fcHJpbnRfZmxhZ3MgKHBhcnQpOworICAgICAKKyAgICAgICAgcHJpbnRmIChfKCJNaW5vcjogJWRcbiIpLCBwYXJ0LT5udW0pOworICAgICAgICBwcmludGYgKF8oIkZsYWdzOiAlc1xuIiksIGZsYWdzKTsKKyAgICAgICAgcHJpbnRmIChfKCJGaWxlIFN5c3RlbTogJXNcbiIpLCBmcy0+dHlwZS0+bmFtZSk7CisgICAgICAgIGZwdXRzIChfKCJTaXplOiAgICAgICAgICIpLCBzdGRvdXQpOworICAgICAgICBwcmludF9zZWN0b3JfY29tcGFjdF9hbmRfcGVyY2VudCAocGFydC0+Z2VvbS5sZW5ndGgsIHBhcnQtPmdlb20uZGV2KTsKKworICAgICAgICByZXNpemVfY29uc3RyYWludCA9IHBlZF9maWxlX3N5c3RlbV9nZXRfcmVzaXplX2NvbnN0cmFpbnQgKGZzKTsKKyAgICAgICAgaWYgKHJlc2l6ZV9jb25zdHJhaW50KSB7CisgICAgICAgICAgICAgICAgZnB1dHMgKF8oIk1pbmltdW0gc2l6ZTogIiksIHN0ZG91dCk7CisgICAgICAgICAgICAgICAgcHJpbnRfc2VjdG9yX2NvbXBhY3RfYW5kX3BlcmNlbnQgKHJlc2l6ZV9jb25zdHJhaW50LT5taW5fc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnQtPmdlb20uZGV2KTsKKyAgICAgICAgICAgICAgICBmcHV0cyAoXygiTWF4aW11bSBzaXplOiAiKSwgc3Rkb3V0KTsKKyAgICAgICAgICAgICAgICBwcmludF9zZWN0b3JfY29tcGFjdF9hbmRfcGVyY2VudCAocmVzaXplX2NvbnN0cmFpbnQtPm1heF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgcGFydC0+Z2VvbS5kZXYpOworICAgICAgICAgICAgICAgIHBlZF9jb25zdHJhaW50X2Rlc3Ryb3kgKHJlc2l6ZV9jb25zdHJhaW50KTsKKyAgICAgICAgfQorCisgICAgICAgIHB1dGNoYXIgKCdcbicpOworCisgICAgICAgIHBlZF9mcmVlIChmbGFncyk7CisgICAgICAgIHBlZF9maWxlX3N5c3RlbV9jbG9zZSAoZnMpOworCisgICAgICAgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50Citkb19wcmludCAoUGVkRGV2aWNlKiogZGV2KQoreworICAgICAgICBQZWRVbml0ICAgICAgICAgZGVmYXVsdF91bml0OworICAgICAgICBQZWREaXNrKiAgICAgICAgZGlzazsKKyAgICAgICAgVGFibGUqICAgICAgICAgIHRhYmxlOworICAgICAgICBTdHJMaXN0KiAgICAgICAgcm93OworICAgICAgICBpbnQgICAgICAgICAgICAgaGFzX2V4dGVuZGVkOworICAgICAgICBpbnQgICAgICAgICAgICAgaGFzX25hbWU7CisgICAgICAgIGludCAgICAgICAgICAgICBoYXNfZGV2aWNlc19hcmcgPSAwOworICAgICAgICBpbnQgICAgICAgICAgICAgaGFzX2ZyZWVfYXJnID0gMDsKKyAgICAgICAgaW50ICAgICAgICAgICAgIGhhc19saXN0X2FyZyA9IDA7CisgICAgICAgIGludCAgICAgICAgICAgICBoYXNfbnVtX2FyZyA9IDA7CisgICAgICAgIGNoYXIqICAgICAgICAgICB0cmFuc3BvcnRbMTNdID0geyJ1bmtub3duIiwgInNjc2kiLCAiaWRlIiwgImRhYzk2MCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjcHFhcnJheSIsICJmaWxlIiwgImF0YXJhaWQiLCAiaTJvIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInViZCIsICJkYXNkIiwgInZpb2Rhc2QiLCAic3g4IiwgImRtIn07CisgICAgICAgIGNoYXIqICAgICAgICAgICBwZWVrX3dvcmQ7CisgICAgICAgIGNoYXIqICAgICAgICAgICBzdGFydDsKKyAgICAgICAgY2hhciogICAgICAgICAgIGVuZDsKKyAgICAgICAgY2hhciogICAgICAgICAgIHNpemU7CisgICAgICAgIGNvbnN0IGNoYXIqICAgICBuYW1lOworICAgICAgICBjaGFyKiAgICAgICAgICAgdG1wOworICAgICAgICB3Y2hhcl90KiAgICAgICAgdGFibGVfcmVuZGVyZWQ7CisKKyAgICAgICAgZGlzayA9IHBlZF9kaXNrX25ldyAoKmRldik7CisgICAgICAgIGlmICghZGlzaykKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgIHBlZWtfd29yZCA9IGNvbW1hbmRfbGluZV9wZWVrX3dvcmQgKCk7CisgICAgICAgIGlmIChwZWVrX3dvcmQpIHsKKyAgICAgICAgICAgICAgICBpZiAoc3RybmNtcCAocGVla193b3JkLCAiZGV2aWNlcyIsIDcpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRfbGluZV9wb3Bfd29yZCgpOworICAgICAgICAgICAgICAgICAgICAgICAgaGFzX2RldmljZXNfYXJnID0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3RybmNtcCAocGVla193b3JkLCAiZnJlZSIsIDQpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRfbGluZV9wb3Bfd29yZCAoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhc19mcmVlX2FyZyA9IDE7CisgICAgICAgICAgICAgICAgfSAKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChzdHJuY21wIChwZWVrX3dvcmQsICJsaXN0IiwgNCkgPT0gMCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm5jbXAgKHBlZWtfd29yZCwgImFsbCIsIDMpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRfbGluZV9wb3Bfd29yZCgpOworICAgICAgICAgICAgICAgICAgICAgICAgaGFzX2xpc3RfYXJnID0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgaGFzX251bV9hcmcgPSBpc2RpZ2l0KHBlZWtfd29yZFswXSk7CisKKyAgICAgICAgICAgICAgICBwZWRfZnJlZSAocGVla193b3JkKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChoYXNfZGV2aWNlc19hcmcpIHsKKyAgICAgICAgICAgICAgICBjaGFyKiAgICAgICAgICAgZGV2X25hbWU7CisgICAgICAgICAgICAgICAgUGVkRGV2aWNlKiAgICAgIGN1cnJlbnRfZGV2ID0gTlVMTDsKKworICAgICAgICAgICAgICAgIHBlZF9kZXZpY2VfcHJvYmVfYWxsKCk7CisKKyAgICAgICAgICAgICAgICB3aGlsZSAoKGN1cnJlbnRfZGV2ID0gcGVkX2RldmljZV9nZXRfbmV4dChjdXJyZW50X2RldikpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQgPSBwZWRfdW5pdF9mb3JtYXRfYnl0ZSAoY3VycmVudF9kZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X2Rldi0+bGVuZ3RoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGN1cnJlbnRfZGV2LT5zZWN0b3Jfc2l6ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYgKCIlcyAoJXMpXG4iLCBjdXJyZW50X2Rldi0+cGF0aCwgZW5kKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBlZF9mcmVlIChlbmQpOworICAgICAgICAgICAgICAgIH0gICAgCisKKyAgICAgICAgICAgICAgICBkZXZfbmFtZSA9IHN0cmR1cCAoKCpkZXYpLT5wYXRoKTsKKyAgICAgICAgICAgICAgICBwZWRfZGV2aWNlX2ZyZWVfYWxsICgpOworCisgICAgICAgICAgICAgICAgKmRldiA9IHBlZF9kZXZpY2VfZ2V0IChkZXZfbmFtZSk7CisgICAgICAgICAgICAgICAgaWYgKCEqZGV2KQorCQkgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIGlmICghcGVkX2RldmljZV9vcGVuICgqZGV2KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgICAgICAgICAgcGVkX2ZyZWUgKGRldl9uYW1lKTsKKworICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisKKyAgICAgICAgZWxzZSBpZiAoaGFzX2xpc3RfYXJnKSAKKyAgICAgICAgICAgICAgICByZXR1cm4gX3ByaW50X2xpc3QgKCk7CisKKyAgICAgICAgZWxzZSBpZiAoaGFzX251bV9hcmcpIHsKKyAgICAgICAgICAgICAgICBQZWRQYXJ0aXRpb24qICAgcGFydCA9IE5VTEw7CisgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgIHN0YXR1cyA9IDA7CisgICAgICAgICAgICAgICAgaWYgKGNvbW1hbmRfbGluZV9nZXRfcGFydGl0aW9uICgiIiwgZGlzaywgJnBhcnQpKQorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gcGFydGl0aW9uX3ByaW50IChwYXJ0KTsKKyAgICAgICAgICAgICAgICBwZWRfZGlza19kZXN0cm95IChkaXNrKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICB9CisKKyAgICAgICAgc3RhcnQgPSBwZWRfdW5pdF9mb3JtYXQgKCpkZXYsIDApOworICAgICAgICBkZWZhdWx0X3VuaXQgPSBwZWRfdW5pdF9nZXRfZGVmYXVsdCAoKTsKKyAgICAgICAgZW5kID0gcGVkX3VuaXRfZm9ybWF0X2J5dGUgKCpkZXYsICgqZGV2KS0+bGVuZ3RoICogKCpkZXYpLT5zZWN0b3Jfc2l6ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAoZGVmYXVsdF91bml0ID09IFBFRF9VTklUX0NIUyB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF91bml0ID09IFBFRF9VTklUX0NZTElOREVSKSk7CisKKyAgICAgICAgaWYgKG9wdF9tYWNoaW5lX21vZGUpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoZGVmYXVsdF91bml0KSB7CisgICAgICAgICAgICAgICAgY2FzZSBQRURfVU5JVF9DSFM6ICAgICAgcHV0cyAoIkNIUzsiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFBFRF9VTklUX0NZTElOREVSOiBwdXRzICgiQ1lMOyIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgIHB1dHMgKCJCWVQ7Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHByaW50ZiAoIiVzOiVzOiVzOiVsbGQ6JWxsZDolczolcztcbiIsCisgICAgICAgICAgICAgICAgICAgICgqZGV2KS0+cGF0aCwgZW5kLCB0cmFuc3BvcnRbKCpkZXYpLT50eXBlXSwKKyAgICAgICAgICAgICAgICAgICAgKCpkZXYpLT5zZWN0b3Jfc2l6ZSwgKCpkZXYpLT5waHlzX3NlY3Rvcl9zaXplLAorICAgICAgICAgICAgICAgICAgICBkaXNrLT50eXBlLT5uYW1lLCAoKmRldiktPm1vZGVsKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHByaW50ZiAoXygiTW9kZWw6ICVzICglcylcbiIpLCAKKyAgICAgICAgICAgICAgICAgICAgKCpkZXYpLT5tb2RlbCwgdHJhbnNwb3J0WygqZGV2KS0+dHlwZV0pOworICAgICAgICAgICAgcHJpbnRmIChfKCJEaXNrICVzOiAlc1xuIiksICgqZGV2KS0+cGF0aCwgZW5kKTsKKyAgICAgICAgICAgIHByaW50ZiAoXygiU2VjdG9yIHNpemUgKGxvZ2ljYWwvcGh5c2ljYWwpOiAlbGxkQi8lbGxkQlxuIiksCisgICAgICAgICAgICAgICAgICAgICgqZGV2KS0+c2VjdG9yX3NpemUsICgqZGV2KS0+cGh5c19zZWN0b3Jfc2l6ZSk7CisgICAgICAgIH0KKworICAgICAgICBwZWRfZnJlZSAoc3RhcnQpOworICAgICAgICBwZWRfZnJlZSAoZW5kKTsKKworICAgICAgICBpZiAocGVkX3VuaXRfZ2V0X2RlZmF1bHQgKCkgPT0gUEVEX1VOSVRfQ0hTCisgICAgICAgICAgICB8fCBwZWRfdW5pdF9nZXRfZGVmYXVsdCAoKSA9PSBQRURfVU5JVF9DWUxJTkRFUikgeworICAgICAgICAgICAgICAgIFBlZENIU0dlb21ldHJ5KiBjaHMgPSAmKCpkZXYpLT5iaW9zX2dlb207CisgICAgICAgICAgICAgICAgY2hhciogY3lsX3NpemUgPSBwZWRfdW5pdF9mb3JtYXRfY3VzdG9tICgqZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNocy0+aGVhZHMgKiBjaHMtPnNlY3RvcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEVEX1VOSVRfS0lMT0JZVEUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChvcHRfbWFjaGluZV9tb2RlKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZiAoIiVkOiVkOiVkOiVzO1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHMtPmN5bGluZGVycywgY2hzLT5oZWFkcywgY2hzLT5zZWN0b3JzLCBjeWxfc2l6ZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmIChfKCJCSU9TIGN5bGluZGVyLGhlYWQsc2VjdG9yIGdlb21ldHJ5OiAlZCwlZCwlZC4gICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFYWNoIGN5bGluZGVyIGlzICVzLlxuIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hzLT5jeWxpbmRlcnMsIGNocy0+aGVhZHMsIGNocy0+c2VjdG9ycywgY3lsX3NpemUpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHBlZF9mcmVlIChjeWxfc2l6ZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW9wdF9tYWNoaW5lX21vZGUpIHsKKyAgICAgICAgICAgIHByaW50ZiAoXygiUGFydGl0aW9uIFRhYmxlOiAlc1xuIiksIGRpc2stPnR5cGUtPm5hbWUpOworICAgICAgICAgICAgcHV0Y2hhciAoJ1xuJyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGhhc19leHRlbmRlZCA9IHBlZF9kaXNrX3R5cGVfY2hlY2tfZmVhdHVyZSAoZGlzay0+dHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEVEX0RJU0tfVFlQRV9FWFRFTkRFRCk7CisgICAgICAgIGhhc19uYW1lID0gcGVkX2Rpc2tfdHlwZV9jaGVja19mZWF0dXJlIChkaXNrLT50eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQRURfRElTS19UWVBFX1BBUlRJVElPTl9OQU1FKTsKKworICAgICAgICAKKyAgICAgICAgUGVkUGFydGl0aW9uKiBwYXJ0OworICAgICAgICBpZiAoIW9wdF9tYWNoaW5lX21vZGUpIHsKKworICAgICAgICAgICAgaWYgKHBlZF91bml0X2dldF9kZWZhdWx0KCkgPT0gUEVEX1VOSVRfQ0hTKSB7CisgICAgICAgICAgICAgICAgICAgIHJvdyA9IHN0cl9saXN0X2NyZWF0ZSAoXygiTnVtYmVyIiksIF8oIlN0YXJ0IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIkVuZCIpLCBOVUxMKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJvdyA9IHN0cl9saXN0X2NyZWF0ZSAoXygiTnVtYmVyIiksIF8oIlN0YXJ0IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIkVuZCIpLCBfKCJTaXplIiksIE5VTEwpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaGFzX2V4dGVuZGVkKQorICAgICAgICAgICAgICAgICAgICBzdHJfbGlzdF9hcHBlbmQgKHJvdywgXygiVHlwZSIpKTsKKworICAgICAgICAgICAgc3RyX2xpc3RfYXBwZW5kIChyb3csIF8oIkZpbGUgc3lzdGVtIikpOworCisgICAgICAgICAgICBpZiAoaGFzX25hbWUpCisgICAgICAgICAgICAgICAgICAgIHN0cl9saXN0X2FwcGVuZCAocm93LCBfKCJOYW1lIikpOworCisgICAgICAgICAgICBzdHJfbGlzdF9hcHBlbmQgKHJvdywgXygiRmxhZ3MiKSk7CisKKworICAgICAgICAgICAgdGFibGUgPSB0YWJsZV9uZXcgKHN0cl9saXN0X2xlbmd0aChyb3cpKTsKKworICAgICAgICAgICAgdGFibGVfYWRkX3Jvd19mcm9tX3N0cmxpc3QgKHRhYmxlLCByb3cpOworCisKKyAgICAgICAgICAgIGZvciAocGFydCA9IHBlZF9kaXNrX25leHRfcGFydGl0aW9uIChkaXNrLCBOVUxMKTsgcGFydDsKKyAgICAgICAgICAgICAgICAgcGFydCA9IHBlZF9kaXNrX25leHRfcGFydGl0aW9uIChkaXNrLCBwYXJ0KSkgeworCisgICAgICAgICAgICAgICAgICAgIGlmICgoIWhhc19mcmVlX2FyZyAmJiAhcGVkX3BhcnRpdGlvbl9pc19hY3RpdmUocGFydCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0LT50eXBlICYgUEVEX1BBUlRJVElPTl9NRVRBREFUQSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgICAgICB0bXAgPSBwZWRfbWFsbG9jICg0KTsKKworICAgICAgICAgICAgICAgICAgICBpZiAocGFydC0+bnVtID49IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ByaW50ZiAodG1wLCAiJTJkICIsIHBhcnQtPm51bSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmICh0bXAsICIlMnMgIiwgIiIpOworCisgICAgICAgICAgICAgICAgICAgIHJvdyA9IHN0cl9saXN0X2NyZWF0ZSAodG1wLCBOVUxMKTsKKworICAgICAgICAgICAgICAgICAgICBzdGFydCA9IHBlZF91bml0X2Zvcm1hdCAoKmRldiwgcGFydC0+Z2VvbS5zdGFydCk7CisgICAgICAgICAgICAgICAgICAgIGVuZCA9IHBlZF91bml0X2Zvcm1hdF9ieXRlICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXJ0LT5nZW9tLmVuZCArIDEpICogKCpkZXYpLT5zZWN0b3Jfc2l6ZSAtIDEpOworICAgICAgICAgICAgICAgICAgICBzaXplID0gcGVkX3VuaXRfZm9ybWF0ICgqZGV2LCBwYXJ0LT5nZW9tLmxlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwZWRfdW5pdF9nZXRfZGVmYXVsdCgpID09IFBFRF9VTklUX0NIUykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cl9saXN0X2FwcGVuZCAocm93LCBzdGFydCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyX2xpc3RfYXBwZW5kIChyb3csIGVuZCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyX2xpc3RfYXBwZW5kIChyb3csIHN0YXJ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJfbGlzdF9hcHBlbmQgKHJvdywgZW5kKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJfbGlzdF9hcHBlbmQgKHJvdywgc2l6ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoIShwYXJ0LT50eXBlICYgUEVEX1BBUlRJVElPTl9GUkVFU1BBQ0UpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc19leHRlbmRlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gcGVkX3BhcnRpdGlvbl90eXBlX2dldF9uYW1lIChwYXJ0LT50eXBlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyX2xpc3RfYXBwZW5kIChyb3csIG5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cl9saXN0X2FwcGVuZCAocm93LCBwYXJ0LT5mc190eXBlID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnQtPmZzX3R5cGUtPm5hbWUgOiAiIik7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzX25hbWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBwZWRfcGFydGl0aW9uX2dldF9uYW1lIChwYXJ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cl9saXN0X2FwcGVuZCAocm93LCBuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJfbGlzdF9hcHBlbmQgKHJvdywgcGFydGl0aW9uX3ByaW50X2ZsYWdzIChwYXJ0KSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc19leHRlbmRlZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cl9saXN0X2FwcGVuZCAocm93LCAiIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyX2xpc3RfYXBwZW5kIChyb3csIF8oIkZyZWUgU3BhY2UiKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc19uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyX2xpc3RfYXBwZW5kIChyb3csICIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJfbGlzdF9hcHBlbmQgKHJvdywgIiIpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy9QRURfQVNTRVJUIChyb3cuY29scyA9PSBjYXB0aW9uLmNvbHMpCisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2FkZF9yb3dfZnJvbV9zdHJsaXN0ICh0YWJsZSwgcm93KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdGFibGVfcmVuZGVyZWQgPSB0YWJsZV9yZW5kZXIgKHRhYmxlKTsgCisjaWZkZWYgRU5BQkxFX05MUworICAgICAgICAgICAgcHJpbnRmKCIlbHNcbiIsIHRhYmxlX3JlbmRlcmVkKTsKKyNlbHNlCisgICAgICAgICAgICBwcmludGYoIiVzXG4iLCB0YWJsZV9yZW5kZXJlZCk7CisjZW5kaWYKKyAgICAgICAgICAgIHBlZF9mcmVlICh0YWJsZV9yZW5kZXJlZCk7CisgICAgICAgICAgICB0YWJsZV9kZXN0cm95ICh0YWJsZSk7CisKKyAgICAgICAgfSBlbHNlIHsKKyAgICAKKyAgICAgICAgICAgIGZvciAocGFydCA9IHBlZF9kaXNrX25leHRfcGFydGl0aW9uIChkaXNrLCBOVUxMKTsgcGFydDsKKyAgICAgICAgICAgICAgICAgcGFydCA9IHBlZF9kaXNrX25leHRfcGFydGl0aW9uIChkaXNrLCBwYXJ0KSkgeworCisgICAgICAgICAgICAgICAgaWYgKCghaGFzX2ZyZWVfYXJnICYmICFwZWRfcGFydGl0aW9uX2lzX2FjdGl2ZShwYXJ0KSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnQtPnR5cGUgJiBQRURfUEFSVElUSU9OX01FVEFEQVRBKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAocGFydC0+bnVtID49IDApCisgICAgICAgICAgICAgICAgICAgIHByaW50ZiAoIiVkOiIsIHBhcnQtPm51bSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBmcHV0cyAoIjE6Iiwgc3Rkb3V0KTsKKworICAgICAgICAgICAgICAgIHByaW50ZiAoIiVzOiIsIHBlZF91bml0X2Zvcm1hdCAoKmRldiwgcGFydC0+Z2VvbS5zdGFydCkpOworICAgICAgICAgICAgICAgIHByaW50ZiAoIiVzOiIsIHBlZF91bml0X2Zvcm1hdF9ieXRlICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhcnQtPmdlb20uZW5kICsgMSkgKiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCpkZXYpLT5zZWN0b3Jfc2l6ZSAtIDEpKTsKKworICAgICAgICAgICAgICAgIGlmIChwZWRfdW5pdF9nZXRfZGVmYXVsdCgpICE9IFBFRF9VTklUX0NIUykKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmICgiJXM6IiwgcGVkX3VuaXRfZm9ybWF0ICgqZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnQtPmdlb20ubGVuZ3RoKSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICghKHBhcnQtPnR5cGUgJiBQRURfUEFSVElUSU9OX0ZSRUVTUEFDRSkpIHsKKworICAgICAgICAgICAgICAgICAgICBpZiAocGFydC0+ZnNfdHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZiAoIiVzOiIsIHBhcnQtPmZzX3R5cGUtPm5hbWUpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBwdXRjaGFyICgnOicpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChoYXNfbmFtZSkgCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYgKCIlczoiLCBfKHBlZF9wYXJ0aXRpb25fZ2V0X25hbWUgKHBhcnQpKSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1dGNoYXIgKCc6Jyk7CisKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmICgiJXM7XG4iLCBwYXJ0aXRpb25fcHJpbnRfZmxhZ3MgKHBhcnQpKTsKKworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHB1dHMgKCJmcmVlOyIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHBlZF9kaXNrX2Rlc3Ryb3kgKGRpc2spOworCisgICAgICAgIHJldHVybiAxOworCisgICAgICAgIHBlZF9kaXNrX2Rlc3Ryb3kgKGRpc2spOworZXJyb3I6CisgICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitfcHJpbnRfbGlzdCAoKQoreworICAgICAgICBQZWREZXZpY2UgKmN1cnJlbnRfZGV2ID0gTlVMTDsKKworICAgICAgICBwZWRfZGV2aWNlX3Byb2JlX2FsbCgpOworCisgICAgICAgIHdoaWxlICgoY3VycmVudF9kZXYgPSBwZWRfZGV2aWNlX2dldF9uZXh0KGN1cnJlbnRfZGV2KSkpIHsKKyAgICAgICAgICAgICAgICBkb19wcmludCAoJmN1cnJlbnRfZGV2KTsKKyAgICAgICAgICAgICAgICBwdXRjaGFyICgnXG4nKTsKKyAgICAgICAgfSAgICAKKworICAgICAgICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorZG9fcXVpdCAoUGVkRGV2aWNlKiogZGV2KQoreworICAgICAgICBfZG9uZSAoKmRldik7CisgICAgICAgIGV4aXQgKDApOworfQorCitzdGF0aWMgUGVkUGFydGl0aW9uVHlwZQorX2Rpc2tfZ2V0X3BhcnRfdHlwZV9mb3Jfc2VjdG9yIChQZWREaXNrKiBkaXNrLCBQZWRTZWN0b3Igc2VjdG9yKQoreworICAgICAgICBQZWRQYXJ0aXRpb24qICAgZXh0ZW5kZWQ7CisKKyAgICAgICAgZXh0ZW5kZWQgPSBwZWRfZGlza19leHRlbmRlZF9wYXJ0aXRpb24gKGRpc2spOworICAgICAgICBpZiAoIWV4dGVuZGVkCisgICAgICAgICAgICB8fCAhcGVkX2dlb21ldHJ5X3Rlc3Rfc2VjdG9yX2luc2lkZSAoJmV4dGVuZGVkLT5nZW9tLCBzZWN0b3IpKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIHJldHVybiBQRURfUEFSVElUSU9OX0xPR0lDQUw7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmICJwYXJ0IiBjb250YWlucyBhIGZpbGUgc3lzdGVtLCBhbmQgcmV0dXJzCisgKiAgICAgIDAgaWYgZWl0aGVyIG5vIGZpbGUgc3lzdGVtIHdhcyBmb3VuZCwgb3IgdGhlIHVzZXIgZGVjbGluZWQgdG8gYWRkIGl0LgorICogICAgICAxIGlmIGEgZmlsZSBzeXN0ZW0gd2FzIGZvdW5kLCBhbmQgdGhlIHVzZXIgY2hvc2UgdG8gYWRkIGl0LgorICogICAgICAtMSBpZiB0aGUgdXNlciBjaG9zZSB0byBjYW5jZWwgdGhlIGVudGlyZSBzZWFyY2guCisgKi8KK3N0YXRpYyBpbnQKK19yZXNjdWVfYWRkX3BhcnRpdGlvbiAoUGVkUGFydGl0aW9uKiBwYXJ0KQoreworICAgICAgICBjb25zdCBQZWRGaWxlU3lzdGVtVHlwZSogICAgICAgIGZzX3R5cGU7CisgICAgICAgIFBlZEdlb21ldHJ5KiAgICAgICAgICAgICAgICAgICAgcHJvYmVkOworICAgICAgICBQZWRFeGNlcHRpb25PcHRpb24gICAgICAgICAgICAgIGV4X29wdDsKKyAgICAgICAgUGVkQ29uc3RyYWludCogICAgICAgICAgICAgICAgICBjb25zdHJhaW50OworICAgICAgICBjaGFyKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX3N0YXJ0OworICAgICAgICBjaGFyKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2VuZDsKKworICAgICAgICBmc190eXBlID0gcGVkX2ZpbGVfc3lzdGVtX3Byb2JlICgmcGFydC0+Z2VvbSk7CisgICAgICAgIGlmICghZnNfdHlwZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcHJvYmVkID0gcGVkX2ZpbGVfc3lzdGVtX3Byb2JlX3NwZWNpZmljIChmc190eXBlLCAmcGFydC0+Z2VvbSk7CisgICAgICAgIGlmICghcHJvYmVkKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIGlmICghcGVkX2dlb21ldHJ5X3Rlc3RfaW5zaWRlICgmcGFydC0+Z2VvbSwgcHJvYmVkKSkgeworICAgICAgICAgICAgICAgIHBlZF9nZW9tZXRyeV9kZXN0cm95IChwcm9iZWQpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgY29uc3RyYWludCA9IHBlZF9jb25zdHJhaW50X2V4YWN0IChwcm9iZWQpOworICAgICAgICBpZiAoIXBlZF9kaXNrX3NldF9wYXJ0aXRpb25fZ2VvbSAocGFydC0+ZGlzaywgcGFydCwgY29uc3RyYWludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2JlZC0+c3RhcnQsIHByb2JlZC0+ZW5kKSkgeworICAgICAgICAgICAgICAgIHBlZF9jb25zdHJhaW50X2Rlc3Ryb3kgKGNvbnN0cmFpbnQpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHBlZF9jb25zdHJhaW50X2Rlc3Ryb3kgKGNvbnN0cmFpbnQpOworCisgICAgICAgIGZvdW5kX3N0YXJ0ID0gcGVkX3VuaXRfZm9ybWF0IChwcm9iZWQtPmRldiwgcHJvYmVkLT5zdGFydCk7CisgICAgICAgIGZvdW5kX2VuZCA9IHBlZF91bml0X2Zvcm1hdCAocHJvYmVkLT5kZXYsIHByb2JlZC0+ZW5kKTsKKyAgICAgICAgZXhfb3B0ID0gcGVkX2V4Y2VwdGlvbl90aHJvdyAoCisgICAgICAgICAgICAgICAgUEVEX0VYQ0VQVElPTl9JTkZPUk1BVElPTiwKKyAgICAgICAgICAgICAgICBQRURfRVhDRVBUSU9OX1lFU19OT19DQU5DRUwsCisgICAgICAgICAgICAgICAgXygiQSAlcyAlcyBwYXJ0aXRpb24gd2FzIGZvdW5kIGF0ICVzIC0+ICVzLiAgIgorICAgICAgICAgICAgICAgICAgIkRvIHlvdSB3YW50IHRvIGFkZCBpdCB0byB0aGUgcGFydGl0aW9uIHRhYmxlPyIpLAorICAgICAgICAgICAgICAgIGZzX3R5cGUtPm5hbWUsIHBlZF9wYXJ0aXRpb25fdHlwZV9nZXRfbmFtZSAocGFydC0+dHlwZSksCisgICAgICAgICAgICAgICAgZm91bmRfc3RhcnQsIGZvdW5kX2VuZCk7CisgICAgICAgIHBlZF9nZW9tZXRyeV9kZXN0cm95IChwcm9iZWQpOworICAgICAgICBwZWRfZnJlZSAoZm91bmRfc3RhcnQpOworICAgICAgICBwZWRfZnJlZSAoZm91bmRfZW5kKTsKKworICAgICAgICBzd2l0Y2ggKGV4X29wdCkgeworICAgICAgICAgICAgICAgIGNhc2UgUEVEX0VYQ0VQVElPTl9DQU5DRUw6IHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICBjYXNlIFBFRF9FWENFUFRJT05fTk86IHJldHVybiAwOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgcGVkX3BhcnRpdGlvbl9zZXRfc3lzdGVtIChwYXJ0LCBmc190eXBlKTsKKyAgICAgICAgcGVkX2Rpc2tfY29tbWl0IChwYXJ0LT5kaXNrKTsKKyAgICAgICAgcmV0dXJuIDE7Cit9CisKKy8qIGhhY2s6IHdlIG9ubHkgaXRlcmF0ZSB0aHJvdWdoIHRoZSBzdGFydCwgc2luY2UgbW9zdCAoYWxsKSBmcydzIGhhdmUgdGhlaXIKKyAqIHN1cGVyYmxvY2tzIGF0IHRoZSBzdGFydC4gIFdlJ2xsIG5lZWQgdG8gY2hhbmdlIHRoaXMgaWYgd2UgZ2VuZXJhbGl6ZQorICogZm9yIFJBSUQsIG9yIHNvbWV0aGluZy4uLgorICovCitzdGF0aWMgaW50CitfcmVzY3VlX3Bhc3MgKFBlZERpc2sqIGRpc2ssIFBlZEdlb21ldHJ5KiBzdGFydF9yYW5nZSwgUGVkR2VvbWV0cnkqIGVuZF9yYW5nZSkKK3sKKyAgICAgICAgUGVkU2VjdG9yICAgICAgICAgICAgICAgc3RhcnQ7CisgICAgICAgIFBlZEdlb21ldHJ5ICAgICAgICAgICAgIHN0YXJ0X2dlb21fZXhhY3Q7CisgICAgICAgIFBlZEdlb21ldHJ5ICAgICAgICAgICAgIGVudGlyZV9kZXY7CisgICAgICAgIFBlZENvbnN0cmFpbnQgICAgICAgICAgIGNvbnN0cmFpbnQ7CisgICAgICAgIFBlZFBhcnRpdGlvbiogICAgICAgICAgIHBhcnQ7CisgICAgICAgIFBlZFBhcnRpdGlvblR5cGUgICAgICAgIHBhcnRfdHlwZTsKKworICAgICAgICBwYXJ0X3R5cGUgPSBfZGlza19nZXRfcGFydF90eXBlX2Zvcl9zZWN0b3IgKAorICAgICAgICAgICAgICAgICAgICAgICAgZGlzaywgKHN0YXJ0X3JhbmdlLT5zdGFydCArIGVuZF9yYW5nZS0+ZW5kKSAvIDIpOworCisgICAgICAgIHBlZF9nZW9tZXRyeV9pbml0ICgmZW50aXJlX2RldiwgZGlzay0+ZGV2LCAwLCBkaXNrLT5kZXYtPmxlbmd0aCk7CisKKyAgICAgICAgcGVkX3RpbWVyX3Jlc2V0IChnX3RpbWVyKTsKKyAgICAgICAgcGVkX3RpbWVyX3NldF9zdGF0ZV9uYW1lIChnX3RpbWVyLCBfKCJzZWFyY2hpbmcgZm9yIGZpbGUgc3lzdGVtcyIpKTsKKyAgICAgICAgZm9yIChzdGFydCA9IHN0YXJ0X3JhbmdlLT5zdGFydDsgc3RhcnQgPD0gc3RhcnRfcmFuZ2UtPmVuZDsgc3RhcnQrKykgeworICAgICAgICAgICAgICAgIHBlZF90aW1lcl91cGRhdGUgKGdfdGltZXIsIDEuMCAqIChzdGFydCAtIHN0YXJ0X3JhbmdlLT5zdGFydCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBzdGFydF9yYW5nZS0+bGVuZ3RoKTsKKworICAgICAgICAgICAgICAgIHBlZF9nZW9tZXRyeV9pbml0ICgmc3RhcnRfZ2VvbV9leGFjdCwgZGlzay0+ZGV2LCBzdGFydCwgMSk7CisgICAgICAgICAgICAgICAgcGVkX2NvbnN0cmFpbnRfaW5pdCAoCisgICAgICAgICAgICAgICAgICAgICAgICAmY29uc3RyYWludCwgcGVkX2FsaWdubWVudF9hbnksIHBlZF9hbGlnbm1lbnRfYW55LAorICAgICAgICAgICAgICAgICAgICAgICAgJnN0YXJ0X2dlb21fZXhhY3QsICZlbnRpcmVfZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgMSwgZGlzay0+ZGV2LT5sZW5ndGgpOworICAgICAgICAgICAgICAgIHBhcnQgPSBwZWRfcGFydGl0aW9uX25ldyAoZGlzaywgcGFydF90eXBlLCBOVUxMLCBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kX3JhbmdlLT5lbmQpOworICAgICAgICAgICAgICAgIGlmICghcGFydCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcGVkX2NvbnN0cmFpbnRfZG9uZSAoJmNvbnN0cmFpbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcGVkX2V4Y2VwdGlvbl9mZXRjaF9hbGwgKCk7CisgICAgICAgICAgICAgICAgaWYgKHBlZF9kaXNrX2FkZF9wYXJ0aXRpb24gKGRpc2ssIHBhcnQsICZjb25zdHJhaW50KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcGVkX2V4Y2VwdGlvbl9sZWF2ZV9hbGwgKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9yZXNjdWVfYWRkX3BhcnRpdGlvbiAocGFydCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVkX2NvbnN0cmFpbnRfZG9uZSAoJmNvbnN0cmFpbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWRfZGlza19yZW1vdmVfcGFydGl0aW9uIChkaXNrLCBwYXJ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgLTE6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JfcmVtb3ZlX3BhcnRpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgcGVkX2V4Y2VwdGlvbl9sZWF2ZV9hbGwgKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHBlZF9wYXJ0aXRpb25fZGVzdHJveSAocGFydCk7CisgICAgICAgICAgICAgICAgcGVkX2NvbnN0cmFpbnRfZG9uZSAoJmNvbnN0cmFpbnQpOworICAgICAgICB9CisgICAgICAgIHBlZF90aW1lcl91cGRhdGUgKGdfdGltZXIsIDEuMCk7CisKKyAgICAgICAgcmV0dXJuIDE7CisKK2Vycm9yX3JlbW92ZV9wYXJ0aXRpb246CisgICAgICAgIHBlZF9kaXNrX3JlbW92ZV9wYXJ0aXRpb24gKGRpc2ssIHBhcnQpOworICAgICAgICBwZWRfcGFydGl0aW9uX2Rlc3Ryb3kgKHBhcnQpOworICAgICAgICBwZWRfY29uc3RyYWludF9kb25lICgmY29uc3RyYWludCk7CisgICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Citkb19yZXNjdWUgKFBlZERldmljZSoqIGRldikKK3sKKyAgICAgICAgUGVkRGlzayogICAgICAgICAgICAgICAgZGlzazsKKyAgICAgICAgUGVkU2VjdG9yICAgICAgICAgICAgICAgc3RhcnQgPSAwLCBlbmQgPSAwOworICAgICAgICBQZWRTZWN0b3IgICAgICAgICAgICAgICBmdXp6OworICAgICAgICBQZWRHZW9tZXRyeSAgICAgICAgICAgICBwcm9iZV9zdGFydF9yZWdpb247CisgICAgICAgIFBlZEdlb21ldHJ5ICAgICAgICAgICAgIHByb2JlX2VuZF9yZWdpb247CisKKyAgICAgICAgZGlzayA9IHBlZF9kaXNrX25ldyAoKmRldik7CisgICAgICAgIGlmICghZGlzaykKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgIGlmICghY29tbWFuZF9saW5lX2dldF9zZWN0b3IgKF8oIlN0YXJ0PyIpLCAqZGV2LCAmc3RhcnQsIE5VTEwpKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JfZGVzdHJveV9kaXNrOworICAgICAgICBpZiAoIWNvbW1hbmRfbGluZV9nZXRfc2VjdG9yIChfKCJFbmQ/IiksICpkZXYsICZlbmQsIE5VTEwpKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JfZGVzdHJveV9kaXNrOworCisgICAgICAgIGZ1enogPSBQRURfTUFYIChQRURfTUlOICgoZW5kIC0gc3RhcnQpIC8gMTAsIE1FR0FCWVRFX1NFQ1RPUlMoKmRldikpLAorICAgICAgICAgICAgICAgICAgICAgICAgTUVHQUJZVEVfU0VDVE9SUygqZGV2KSAqIDE2KTsKKworICAgICAgICBwZWRfZ2VvbWV0cnlfaW5pdCAoJnByb2JlX3N0YXJ0X3JlZ2lvbiwgKmRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFBFRF9NQVgoc3RhcnQgLSBmdXp6LCAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFBFRF9NSU4oMiAqIGZ1enosICgqZGV2KS0+bGVuZ3RoIC0gKHN0YXJ0IC0gZnV6eikpKTsKKyAgICAgICAgcGVkX2dlb21ldHJ5X2luaXQgKCZwcm9iZV9lbmRfcmVnaW9uLCAqZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgUEVEX01BWChlbmQgLSBmdXp6LCAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFBFRF9NSU4oMiAqIGZ1enosICgqZGV2KS0+bGVuZ3RoIC0gKGVuZCAtIGZ1enopKSk7CisKKyAgICAgICAgaWYgKCFfcmVzY3VlX3Bhc3MgKGRpc2ssICZwcm9iZV9zdGFydF9yZWdpb24sICZwcm9iZV9lbmRfcmVnaW9uKSkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yX2Rlc3Ryb3lfZGlzazsKKworICAgICAgICBwZWRfZGlza19kZXN0cm95IChkaXNrKTsKKworICAgICAgICBpZiAoKCpkZXYpLT50eXBlICE9IFBFRF9ERVZJQ0VfRklMRSkKKyAgICAgICAgICAgICAgICBkaXNrX2lzX21vZGlmaWVkID0gMTsKKworICAgICAgICByZXR1cm4gMTsKKworZXJyb3JfZGVzdHJveV9kaXNrOgorICAgICAgICBwZWRfZGlza19kZXN0cm95IChkaXNrKTsKK2Vycm9yOgorICAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorZG9fcmVzaXplIChQZWREZXZpY2UqKiBkZXYpCit7CisgICAgICAgIFBlZERpc2sgICAgICAgICAgICAgICAgICpkaXNrOworICAgICAgICBQZWRQYXJ0aXRpb24gICAgICAgICAgICAqcGFydCA9IE5VTEw7CisgICAgICAgIFBlZEZpbGVTeXN0ZW0gICAgICAgICAgICpmczsKKyAgICAgICAgUGVkQ29uc3RyYWludCAgICAgICAgICAgKmNvbnN0cmFpbnQ7CisgICAgICAgIFBlZFNlY3RvciAgICAgICAgICAgICAgIHN0YXJ0LCBlbmQ7CisgICAgICAgIFBlZEdlb21ldHJ5ICAgICAgICAgICAgICpyYW5nZV9zdGFydCA9IE5VTEwsICpyYW5nZV9lbmQgPSBOVUxMOworICAgICAgICBQZWRHZW9tZXRyeSAgICAgICAgICAgICBuZXdfZ2VvbTsKKworICAgICAgICBkaXNrID0gcGVkX2Rpc2tfbmV3ICgqZGV2KTsKKyAgICAgICAgaWYgKCFkaXNrKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAgaWYgKCFjb21tYW5kX2xpbmVfZ2V0X3BhcnRpdGlvbiAoXygiUGFydGl0aW9uIG51bWJlcj8iKSwgZGlzaywgJnBhcnQpKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JfZGVzdHJveV9kaXNrOworICAgICAgICBpZiAocGFydC0+dHlwZSAhPSBQRURfUEFSVElUSU9OX0VYVEVOREVEKSB7CisgICAgICAgICAgICAgICAgaWYgKCFfcGFydGl0aW9uX3dhcm5fYnVzeSAocGFydCkpCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yX2Rlc3Ryb3lfZGlzazsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXJ0ID0gcGFydC0+Z2VvbS5zdGFydDsKKyAgICAgICAgZW5kID0gcGFydC0+Z2VvbS5lbmQ7CisgICAgICAgIGlmICghY29tbWFuZF9saW5lX2dldF9zZWN0b3IgKF8oIlN0YXJ0PyIpLCAqZGV2LCAmc3RhcnQsICZyYW5nZV9zdGFydCkpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcl9kZXN0cm95X2Rpc2s7CisgICAgICAgIGlmICghY29tbWFuZF9saW5lX2dldF9zZWN0b3IgKF8oIkVuZD8iKSwgKmRldiwgJmVuZCwgJnJhbmdlX2VuZCkpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcl9kZXN0cm95X2Rpc2s7CisKKyAgICAgICAgaWYgKCFwZWRfZ2VvbWV0cnlfaW5pdCAoJm5ld19nZW9tLCAqZGV2LCBzdGFydCwgZW5kIC0gc3RhcnQgKyAxKSkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yX2Rlc3Ryb3lfZGlzazsKKyAgICAgICAgc25hcF90b19ib3VuZGFyaWVzICgmbmV3X2dlb20sICZwYXJ0LT5nZW9tLCBkaXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlX3N0YXJ0LCByYW5nZV9lbmQpOworCisgICAgICAgIGlmIChwYXJ0LT50eXBlID09IFBFRF9QQVJUSVRJT05fRVhURU5ERUQpIHsKKyAgICAgICAgICAgICAgICBjb25zdHJhaW50ID0gY29uc3RyYWludF9mcm9tX3N0YXJ0X2VuZCAoKmRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2Vfc3RhcnQsIHJhbmdlX2VuZCk7CisgICAgICAgICAgICAgICAgaWYgKCFwZWRfZGlza19zZXRfcGFydGl0aW9uX2dlb20gKGRpc2ssIHBhcnQsIGNvbnN0cmFpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19nZW9tLnN0YXJ0LCBuZXdfZ2VvbS5lbmQpKQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcl9kZXN0cm95X2NvbnN0cmFpbnQ7CisgICAgICAgICAgICAgICAgcGVkX3BhcnRpdGlvbl9zZXRfc3lzdGVtIChwYXJ0LCBOVUxMKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmcyA9IHBlZF9maWxlX3N5c3RlbV9vcGVuICgmcGFydC0+Z2VvbSk7CisgICAgICAgICAgICAgICAgaWYgKCFmcykKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JfZGVzdHJveV9kaXNrOworICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQgPSBjb25zdHJhaW50X2ludGVyc2VjdF9hbmRfZGVzdHJveSAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZF9maWxlX3N5c3RlbV9nZXRfcmVzaXplX2NvbnN0cmFpbnQgKGZzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RyYWludF9mcm9tX3N0YXJ0X2VuZCAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRldiwgcmFuZ2Vfc3RhcnQsIHJhbmdlX2VuZCkpOworICAgICAgICAgICAgICAgIGlmICghcGVkX2Rpc2tfc2V0X3BhcnRpdGlvbl9nZW9tIChkaXNrLCBwYXJ0LCBjb25zdHJhaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfZ2VvbS5zdGFydCwgbmV3X2dlb20uZW5kKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JfY2xvc2VfZnM7CisgICAgICAgICAgICAgICAgaWYgKCFwZWRfZmlsZV9zeXN0ZW1fcmVzaXplIChmcywgJnBhcnQtPmdlb20sIGdfdGltZXIpKQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcl9jbG9zZV9mczsKKyAgICAgICAgICAgICAgICAvKiBtYXkgaGF2ZSBjaGFuZ2VkLi4uIGVnIGZhdDE2IC0+IGZhdDMyICovCisgICAgICAgICAgICAgICAgcGVkX3BhcnRpdGlvbl9zZXRfc3lzdGVtIChwYXJ0LCBmcy0+dHlwZSk7CisgICAgICAgICAgICAgICAgcGVkX2ZpbGVfc3lzdGVtX2Nsb3NlIChmcyk7CisgICAgICAgIH0KKworICAgICAgICBwZWRfZGlza19jb21taXQgKGRpc2spOworICAgICAgICBwZWRfY29uc3RyYWludF9kZXN0cm95IChjb25zdHJhaW50KTsKKyAgICAgICAgcGVkX2Rpc2tfZGVzdHJveSAoZGlzayk7CisgICAgICAgIGlmIChyYW5nZV9zdGFydCAhPSBOVUxMKQorICAgICAgICAgICAgICAgIHBlZF9nZW9tZXRyeV9kZXN0cm95IChyYW5nZV9zdGFydCk7CisgICAgICAgIGlmIChyYW5nZV9lbmQgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICBwZWRfZ2VvbWV0cnlfZGVzdHJveSAocmFuZ2VfZW5kKTsKKworICAgICAgICBpZiAoKCpkZXYpLT50eXBlICE9IFBFRF9ERVZJQ0VfRklMRSkKKyAgICAgICAgICAgICAgICBkaXNrX2lzX21vZGlmaWVkID0gMTsKKworICAgICAgICByZXR1cm4gMTsKKworZXJyb3JfY2xvc2VfZnM6CisgICAgICAgIHBlZF9maWxlX3N5c3RlbV9jbG9zZSAoZnMpOworZXJyb3JfZGVzdHJveV9jb25zdHJhaW50OgorICAgICAgICBwZWRfY29uc3RyYWludF9kZXN0cm95IChjb25zdHJhaW50KTsKK2Vycm9yX2Rlc3Ryb3lfZGlzazoKKyAgICAgICAgcGVkX2Rpc2tfZGVzdHJveSAoZGlzayk7CitlcnJvcjoKKyAgICAgICAgaWYgKHJhbmdlX3N0YXJ0ICE9IE5VTEwpCisgICAgICAgICAgICAgICAgcGVkX2dlb21ldHJ5X2Rlc3Ryb3kgKHJhbmdlX3N0YXJ0KTsKKyAgICAgICAgaWYgKHJhbmdlX2VuZCAhPSBOVUxMKQorICAgICAgICAgICAgICAgIHBlZF9nZW9tZXRyeV9kZXN0cm95IChyYW5nZV9lbmQpOworICAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorZG9fcm0gKFBlZERldmljZSoqIGRldikKK3sKKyAgICAgICAgUGVkRGlzayogICAgICAgICAgICAgICAgZGlzazsKKyAgICAgICAgUGVkUGFydGl0aW9uKiAgICAgICAgICAgcGFydCA9IE5VTEw7CisKKyAgICAgICAgZGlzayA9IHBlZF9kaXNrX25ldyAoKmRldik7CisgICAgICAgIGlmICghZGlzaykKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgIGlmICghY29tbWFuZF9saW5lX2dldF9wYXJ0aXRpb24gKF8oIlBhcnRpdGlvbiBudW1iZXI/IiksIGRpc2ssICZwYXJ0KSkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yX2Rlc3Ryb3lfZGlzazsKKyAgICAgICAgaWYgKCFfcGFydGl0aW9uX3dhcm5fYnVzeSAocGFydCkpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcl9kZXN0cm95X2Rpc2s7CisKKyAgICAgICAgcGVkX2Rpc2tfZGVsZXRlX3BhcnRpdGlvbiAoZGlzaywgcGFydCk7CisgICAgICAgIHBlZF9kaXNrX2NvbW1pdCAoZGlzayk7CisgICAgICAgIHBlZF9kaXNrX2Rlc3Ryb3kgKGRpc2spOworCisgICAgICAgIGlmICgoKmRldiktPnR5cGUgIT0gUEVEX0RFVklDRV9GSUxFKQorICAgICAgICAgICAgICAgIGRpc2tfaXNfbW9kaWZpZWQgPSAxOworCisgICAgICAgIHJldHVybiAxOworCitlcnJvcl9kZXN0cm95X2Rpc2s6CisgICAgICAgIHBlZF9kaXNrX2Rlc3Ryb3kgKGRpc2spOworZXJyb3I6CisgICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Citkb19zZWxlY3QgKFBlZERldmljZSoqIGRldikKK3sKKyAgICAgICAgUGVkRGV2aWNlKiAgICAgIG5ld19kZXYgPSAqZGV2OworCisgICAgICAgIGlmICghY29tbWFuZF9saW5lX2dldF9kZXZpY2UgKF8oIk5ldyBkZXZpY2U/IiksICZuZXdfZGV2KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKCFwZWRfZGV2aWNlX29wZW4gKG5ld19kZXYpKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIHBlZF9kZXZpY2VfY2xvc2UgKCpkZXYpOworICAgICAgICAqZGV2ID0gbmV3X2RldjsKKyAgICAgICAgcHJpbnRfdXNpbmdfZGV2ICgqZGV2KTsKKyAgICAgICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2RvX3NldCAoUGVkRGV2aWNlKiogZGV2KQoreworICAgICAgICBQZWREaXNrKiAgICAgICAgICAgICAgICBkaXNrOworICAgICAgICBQZWRQYXJ0aXRpb24qICAgICAgICAgICBwYXJ0ID0gTlVMTDsKKyAgICAgICAgUGVkUGFydGl0aW9uRmxhZyAgICAgICAgZmxhZzsKKyAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgc3RhdGU7CisgICAgICAgIAorICAgICAgICBkaXNrID0gcGVkX2Rpc2tfbmV3ICgqZGV2KTsKKyAgICAgICAgaWYgKCFkaXNrKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIAorICAgICAgICBpZiAoIWNvbW1hbmRfbGluZV9nZXRfcGFydGl0aW9uIChfKCJQYXJ0aXRpb24gbnVtYmVyPyIpLCBkaXNrLCAmcGFydCkpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcl9kZXN0cm95X2Rpc2s7CisgICAgICAgIGlmICghY29tbWFuZF9saW5lX2dldF9wYXJ0X2ZsYWcgKF8oIkZsYWcgdG8gSW52ZXJ0PyIpLCBwYXJ0LCAmZmxhZykpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcl9kZXN0cm95X2Rpc2s7CisgICAgICAgIHN0YXRlID0gKHBlZF9wYXJ0aXRpb25fZ2V0X2ZsYWcgKHBhcnQsIGZsYWcpID09IDAgPyAxIDogMCk7ICAgICAgCisgICAgICAgIAorICAgICAgICBpZiAoIWlzX3RvZ2dsZV9tb2RlKSB7CisgICAgICAgICAgICAgICAgaWYgKCFjb21tYW5kX2xpbmVfZ2V0X3N0YXRlIChfKCJOZXcgc3RhdGU/IiksICZzdGF0ZSkpCisJCSAgICAgICAgICAgIGdvdG8gZXJyb3JfZGVzdHJveV9kaXNrOworICAgICAgICB9CisgICAgCisgICAgICAgIGlmICghcGVkX3BhcnRpdGlvbl9zZXRfZmxhZyAocGFydCwgZmxhZywgc3RhdGUpKQorCSAgICAgICAgCWdvdG8gZXJyb3JfZGVzdHJveV9kaXNrOworICAgIAlpZiAoIXBlZF9kaXNrX2NvbW1pdCAoZGlzaykpCisJICAgICAgICAJZ290byBlcnJvcl9kZXN0cm95X2Rpc2s7CisgICAgCXBlZF9kaXNrX2Rlc3Ryb3kgKGRpc2spOworCisgICAgICAgIGlmICgoKmRldiktPnR5cGUgIT0gUEVEX0RFVklDRV9GSUxFKQorICAgICAgICAgICAgICAgIGRpc2tfaXNfbW9kaWZpZWQgPSAxOworCisJICAgIHJldHVybiAxOworCitlcnJvcl9kZXN0cm95X2Rpc2s6CisgICAgICAgIHBlZF9kaXNrX2Rlc3Ryb3kgKGRpc2spOworZXJyb3I6CisgICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Citkb190b2dnbGUgKFBlZERldmljZSAqKmRldikKK3sKKyAgICAgICAgaW50IHJlc3VsdDsKKyAgICAgICAgCisgICAgICAgIGlzX3RvZ2dsZV9tb2RlID0gMTsKKyAgICAgICAgcmVzdWx0ID0gZG9fc2V0IChkZXYpOworICAgICAgICBpc190b2dnbGVfbW9kZSA9IDA7CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludAorZG9fdW5pdCAoUGVkRGV2aWNlKiogZGV2KQoreworICAgICAgICBQZWRVbml0IHVuaXQgPSBwZWRfdW5pdF9nZXRfZGVmYXVsdCAoKTsKKyAgICAgICAgaWYgKCFjb21tYW5kX2xpbmVfZ2V0X3VuaXQgKF8oIlVuaXQ/IiksICZ1bml0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcGVkX3VuaXRfc2V0X2RlZmF1bHQgKHVuaXQpOworICAgICAgICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorZG9fdmVyc2lvbiAoKQoreworICAgIHByaW50ZiAoIlxuJXNcbiVzIiwKKyAgICAgICAgICAgIHByb2dfbmFtZSwKKyAgICAgICAgICAgIF8oY29weXJpZ2h0X21zZykpOworICAgIHJldHVybiAxOworfQorCitzdGF0aWMgdm9pZAorX2luaXRfbWVzc2FnZXMgKCkKK3sKKyAgICAgICAgU3RyTGlzdCogICAgICAgICAgICAgICAgbGlzdDsKKyAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgZmlyc3Q7CisgICAgICAgIFBlZEZpbGVTeXN0ZW1UeXBlKiAgICAgIGZzX3R5cGU7CisgICAgICAgIFBlZERpc2tUeXBlKiAgICAgICAgICAgIGRpc2tfdHlwZTsKKyAgICAgICAgUGVkUGFydGl0aW9uRmxhZyAgICAgICAgcGFydF9mbGFnOworICAgICAgICBQZWRVbml0ICAgICAgICAgICAgICAgICB1bml0OworCisvKiBmbGFncyAqLworICAgICAgICBmaXJzdCA9IDE7CisgICAgICAgIGxpc3QgPSBzdHJfbGlzdF9jcmVhdGUgKF8oZmxhZ19tc2dfc3RhcnQpLCBOVUxMKTsKKyAgICAgICAgZm9yIChwYXJ0X2ZsYWcgPSBwZWRfcGFydGl0aW9uX2ZsYWdfbmV4dCAoMCk7IHBhcnRfZmxhZzsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRfZmxhZyA9IHBlZF9wYXJ0aXRpb25fZmxhZ19uZXh0IChwYXJ0X2ZsYWcpKSB7CisgICAgICAgICAgICAgICAgaWYgKGZpcnN0KQorICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSAwOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cl9saXN0X2FwcGVuZCAobGlzdCwgIiwgIik7CisgICAgICAgICAgICAgICAgc3RyX2xpc3RfYXBwZW5kIChsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyhwZWRfcGFydGl0aW9uX2ZsYWdfZ2V0X25hbWUgKHBhcnRfZmxhZykpKTsKKyAgICAgICAgfQorICAgICAgICBzdHJfbGlzdF9hcHBlbmQgKGxpc3QsICJcbiIpOworCisgICAgICAgIGZsYWdfbXNnID0gc3RyX2xpc3RfY29udmVydCAobGlzdCk7CisgICAgICAgIHN0cl9saXN0X2Rlc3Ryb3kgKGxpc3QpOworCisvKiB1bml0cyAqLworICAgICAgICBmaXJzdCA9IDE7CisgICAgICAgIGxpc3QgPSBzdHJfbGlzdF9jcmVhdGUgKF8odW5pdF9tc2dfc3RhcnQpLCBOVUxMKTsKKyAgICAgICAgZm9yICh1bml0ID0gUEVEX1VOSVRfRklSU1Q7IHVuaXQgPD0gUEVEX1VOSVRfTEFTVDsgdW5pdCsrKSB7CisgICAgICAgICAgICAgICAgaWYgKGZpcnN0KQorICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSAwOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cl9saXN0X2FwcGVuZCAobGlzdCwgIiwgIik7CisgICAgICAgICAgICAgICAgc3RyX2xpc3RfYXBwZW5kIChsaXN0LCBwZWRfdW5pdF9nZXRfbmFtZSAodW5pdCkpOworICAgICAgICB9CisgICAgICAgIHN0cl9saXN0X2FwcGVuZCAobGlzdCwgIlxuIik7CisKKyAgICAgICAgdW5pdF9tc2cgPSBzdHJfbGlzdF9jb252ZXJ0IChsaXN0KTsKKyAgICAgICAgc3RyX2xpc3RfZGVzdHJveSAobGlzdCk7CisKKy8qIGRpc2sgdHlwZSAqLworICAgICAgICBsaXN0ID0gc3RyX2xpc3RfY3JlYXRlIChfKGxhYmVsX3R5cGVfbXNnX3N0YXJ0KSwgTlVMTCk7CisKKyAgICAgICAgZmlyc3QgPSAxOworICAgICAgICBmb3IgKGRpc2tfdHlwZSA9IHBlZF9kaXNrX3R5cGVfZ2V0X25leHQgKE5VTEwpOworICAgICAgICAgICAgIGRpc2tfdHlwZTsgZGlza190eXBlID0gcGVkX2Rpc2tfdHlwZV9nZXRfbmV4dCAoZGlza190eXBlKSkgeworICAgICAgICAgICAgICAgIGlmIChkaXNrX3R5cGUtPm9wcy0+d3JpdGUgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgaWYgKGZpcnN0KQorICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSAwOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cl9saXN0X2FwcGVuZCAobGlzdCwgIiwgIik7CisgICAgICAgICAgICAgICAgc3RyX2xpc3RfYXBwZW5kIChsaXN0LCBkaXNrX3R5cGUtPm5hbWUpOworICAgICAgICB9CisgICAgICAgIHN0cl9saXN0X2FwcGVuZCAobGlzdCwgIlxuIik7CisKKyAgICAgICAgbGFiZWxfdHlwZV9tc2cgPSBzdHJfbGlzdF9jb252ZXJ0IChsaXN0KTsKKyAgICAgICAgc3RyX2xpc3RfZGVzdHJveSAobGlzdCk7CisKKy8qIG1rZnMgLSBmaWxlIHN5c3RlbSB0eXBlcyAqLworICAgICAgICBsaXN0ID0gc3RyX2xpc3RfY3JlYXRlIChfKGZzX3R5cGVfbXNnX3N0YXJ0KSwgTlVMTCk7CisKKyAgICAgICAgZmlyc3QgPSAxOworICAgICAgICBmb3IgKGZzX3R5cGUgPSBwZWRfZmlsZV9zeXN0ZW1fdHlwZV9nZXRfbmV4dCAoTlVMTCk7CisgICAgICAgICAgICAgZnNfdHlwZTsgZnNfdHlwZSA9IHBlZF9maWxlX3N5c3RlbV90eXBlX2dldF9uZXh0IChmc190eXBlKSkgeworICAgICAgICAgICAgICAgIGlmIChmc190eXBlLT5vcHMtPmNyZWF0ZSA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBpZiAoZmlyc3QpCisgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IDA7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgc3RyX2xpc3RfYXBwZW5kIChsaXN0LCAiLCAiKTsKKyAgICAgICAgICAgICAgICBzdHJfbGlzdF9hcHBlbmQgKGxpc3QsIGZzX3R5cGUtPm5hbWUpOworICAgICAgICB9CisgICAgICAgIHN0cl9saXN0X2FwcGVuZCAobGlzdCwgIlxuIik7CisKKyAgICAgICAgbWtmc19mc190eXBlX21zZyA9IHN0cl9saXN0X2NvbnZlcnQgKGxpc3QpOworICAgICAgICBzdHJfbGlzdF9kZXN0cm95IChsaXN0KTsKKworLyogbWtwYXJ0IC0gZmlsZSBzeXN0ZW0gdHlwZXMgKi8KKyAgICAgICAgbGlzdCA9IHN0cl9saXN0X2NyZWF0ZSAoXyhmc190eXBlX21zZ19zdGFydCksIE5VTEwpOworCisgICAgICAgIGZpcnN0ID0gMTsKKyAgICAgICAgZm9yIChmc190eXBlID0gcGVkX2ZpbGVfc3lzdGVtX3R5cGVfZ2V0X25leHQgKE5VTEwpOworICAgICAgICAgICAgIGZzX3R5cGU7IGZzX3R5cGUgPSBwZWRfZmlsZV9zeXN0ZW1fdHlwZV9nZXRfbmV4dCAoZnNfdHlwZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoZmlyc3QpCisgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IDA7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgc3RyX2xpc3RfYXBwZW5kIChsaXN0LCAiLCAiKTsKKyAgICAgICAgICAgICAgICBzdHJfbGlzdF9hcHBlbmQgKGxpc3QsIGZzX3R5cGUtPm5hbWUpOworICAgICAgICB9CisgICAgICAgIHN0cl9saXN0X2FwcGVuZCAobGlzdCwgIlxuIik7CisKKyAgICAgICAgbWtwYXJ0X2ZzX3R5cGVfbXNnID0gc3RyX2xpc3RfY29udmVydCAobGlzdCk7CisgICAgICAgIHN0cl9saXN0X2Rlc3Ryb3kgKGxpc3QpOworCisvKiByZXNpemUgLSBmaWxlIHN5c3RlbSB0eXBlcyAqLworICAgICAgICBsaXN0ID0gc3RyX2xpc3RfY3JlYXRlIChfKHJlc2l6ZV9tc2dfc3RhcnQpLCBOVUxMKTsKKworICAgICAgICBmaXJzdCA9IDE7CisgICAgICAgIGZvciAoZnNfdHlwZSA9IHBlZF9maWxlX3N5c3RlbV90eXBlX2dldF9uZXh0IChOVUxMKTsKKyAgICAgICAgICAgICBmc190eXBlOyBmc190eXBlID0gcGVkX2ZpbGVfc3lzdGVtX3R5cGVfZ2V0X25leHQgKGZzX3R5cGUpKSB7CisgICAgICAgICAgICAgICAgaWYgKGZzX3R5cGUtPm9wcy0+cmVzaXplID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIGlmIChmaXJzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0ID0gMDsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJfbGlzdF9hcHBlbmQgKGxpc3QsICIsICIpOworICAgICAgICAgICAgICAgIHN0cl9saXN0X2FwcGVuZCAobGlzdCwgZnNfdHlwZS0+bmFtZSk7CisgICAgICAgIH0KKyAgICAgICAgc3RyX2xpc3RfYXBwZW5kIChsaXN0LCAiXG4iKTsKKworICAgICAgICByZXNpemVfZnNfdHlwZV9tc2cgPSBzdHJfbGlzdF9jb252ZXJ0IChsaXN0KTsKKyAgICAgICAgc3RyX2xpc3RfZGVzdHJveSAobGlzdCk7Cit9CisKK3N0YXRpYyB2b2lkCitfZG9uZV9tZXNzYWdlcyAoKQoreworICAgICAgICBmcmVlIChmbGFnX21zZyk7CisgICAgICAgIGZyZWUgKG1rZnNfZnNfdHlwZV9tc2cpOworICAgICAgICBmcmVlIChta3BhcnRfZnNfdHlwZV9tc2cpOworICAgICAgICBmcmVlIChyZXNpemVfZnNfdHlwZV9tc2cpOworICAgICAgICBmcmVlIChsYWJlbF90eXBlX21zZyk7Cit9CisKK3N0YXRpYyB2b2lkCitfaW5pdF9jb21tYW5kcyAoKQoreworICAgICAgICBjb21tYW5kX3JlZ2lzdGVyIChjb21tYW5kcywgY29tbWFuZF9jcmVhdGUgKAorICAgICAgICAgICAgICAgIHN0cl9saXN0X2NyZWF0ZV91bmlxdWUgKCJjaGVjayIsIF8oImNoZWNrIiksIE5VTEwpLAorICAgICAgICAgICAgICAgIGRvX2NoZWNrLAorICAgICAgICAgICAgICAgIHN0cl9saXN0X2NyZWF0ZSAoCitfKCJjaGVjayBOVU1CRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIGEgc2ltcGxlIGNoZWNrIG9uIHRoZSBmaWxlICIKKyAgInN5c3RlbSIpLAorTlVMTCksCisgICAgICAgICAgICAgICAgc3RyX2xpc3RfY3JlYXRlIChfKG51bWJlcl9tc2cpLCBOVUxMKSwgMSkpOworCisgICAgICAgIGNvbW1hbmRfcmVnaXN0ZXIgKGNvbW1hbmRzLCBjb21tYW5kX2NyZWF0ZSAoCisgICAgICAgICAgICAgICAgc3RyX2xpc3RfY3JlYXRlX3VuaXF1ZSAoImNwIiwgXygiY3AiKSwgTlVMTCksCisgICAgICAgICAgICAgICAgZG9fY3AsCisgICAgICAgICAgICAgICAgc3RyX2xpc3RfY3JlYXRlICgKK18oImNwIFtGUk9NLURFVklDRV0gRlJPTS1OVU1CRVIgVE8tTlVNQkVSICAgY29weSBmaWxlIHN5c3RlbSB0byBhbm90aGVyICIKKyAgInBhcnRpdGlvbiIpLAorTlVMTCksCisgICAgICAgICAgICAgICAgc3RyX2xpc3RfY3JlYXRlIChfKG51bWJlcl9tc2cpLCBfKGRldmljZV9tc2cpLCBOVUxMKSwgMSkpOworCisgICAgICAgIGNvbW1hbmRfcmVnaXN0ZXIgKGNvbW1hbmRzLCBjb21tYW5kX2NyZWF0ZSAoCisgICAgICAgICAgICAgICAgc3RyX2xpc3RfY3JlYXRlX3VuaXF1ZSAoImhlbHAiLCBfKCJoZWxwIiksIE5VTEwpLAorICAgICAgICAgICAgICAgIGRvX2hlbHAsCisgICAgICAgICAgICAgICAgc3RyX2xpc3RfY3JlYXRlICgKK18oImhlbHAgW0NPTU1BTkRdICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgZ2VuZXJhbCBoZWxwLCBvciBoZWxwICIKKyAgIm9uIENPTU1BTkQiKSwKK05VTEwpLAorICAgICAgICAgICAgICAgIE5VTEwsIDEpKTsKKworICAgICAgICBjb21tYW5kX3JlZ2lzdGVyIChjb21tYW5kcywgY29tbWFuZF9jcmVhdGUgKAorICAgICAgICAgICAgICAgIHN0cl9saXN0X2NyZWF0ZV91bmlxdWUgKCJta2xhYmVsIiwgXygibWtsYWJlbCIpLCAibWt0YWJsZSIsIF8oIm1rdGFibGUiKSwgTlVMTCksCisgICAgICAgICAgICAgICAgZG9fbWtsYWJlbCwKKyAgICAgICAgICAgICAgICBzdHJfbGlzdF9jcmVhdGUgKAorXygibWtsYWJlbCxta3RhYmxlIExBQkVMLVRZUEUgICAgICAgICAgICAgICBjcmVhdGUgYSBuZXcgZGlza2xhYmVsICIKKyAgIihwYXJ0aXRpb24gdGFibGUpIiksCitOVUxMKSwKKyAgICAgICAgICAgICAgICBzdHJfbGlzdF9jcmVhdGUgKGxhYmVsX3R5cGVfbXNnLCBOVUxMKSwgMSkpOworCisgICAgICAgIGNvbW1hbmRfcmVnaXN0ZXIgKGNvbW1hbmRzLCBjb21tYW5kX2NyZWF0ZSAoCisgICAgICAgICAgICAgICAgc3RyX2xpc3RfY3JlYXRlX3VuaXF1ZSAoIm1rZnMiLCBfKCJta2ZzIiksIE5VTEwpLAorICAgICAgICAgICAgICAgIGRvX21rZnMsCisgICAgICAgICAgICAgICAgc3RyX2xpc3RfY3JlYXRlICgKK18oIm1rZnMgTlVNQkVSIEZTLVRZUEUgICAgICAgICAgICAgICAgICAgICAgbWFrZSBhIEZTLVRZUEUgZmlsZSAiCisgICJzeXN0ZW0gb24gcGFydGl0aXRvbiBOVU1CRVIiKSwKK05VTEwpLAorICAgICAgICAgICAgICAgIHN0cl9saXN0X2NyZWF0ZSAoXyhudW1iZXJfbXNnKSwgXyhta2ZzX2ZzX3R5cGVfbXNnKSwgTlVMTCksIDEpKTsKKworICAgICAgICBjb21tYW5kX3JlZ2lzdGVyIChjb21tYW5kcywgY29tbWFuZF9jcmVhdGUgKAorICAgICAgICAgICAgICAgIHN0cl9saXN0X2NyZWF0ZV91bmlxdWUgKCJta3BhcnQiLCBfKCJta3BhcnQiKSwgTlVMTCksCisgICAgICAgICAgICAgICAgZG9fbWtwYXJ0LAorICAgICAgICAgICAgICAgIHN0cl9saXN0X2NyZWF0ZSAoCitfKCJta3BhcnQgUEFSVC1UWVBFIFtGUy1UWVBFXSBTVEFSVCBFTkQgICAgIG1ha2UgYSBwYXJ0aXRpb24iKSwKK05VTEwpLAorICAgICAgICAgICAgICAgIHN0cl9saXN0X2NyZWF0ZSAoXyhwYXJ0X3R5cGVfbXNnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8obWtwYXJ0X2ZzX3R5cGVfbXNnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oc3RhcnRfZW5kX21zZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG4iLAorXygiJ21rcGFydCcgbWFrZXMgYSBwYXJ0aXRpb24gd2l0aG91dCBjcmVhdGluZyBhIG5ldyBmaWxlIHN5c3RlbSBvbiB0aGUgIgorICAicGFydGl0aW9uLiAgRlMtVFlQRSBtYXkgYmUgc3BlY2lmaWVkIHRvIHNldCBhbiBhcHByb3ByaWF0ZSBwYXJ0aXRpb24gSUQuXG4iKSwKK05VTEwpLCAxKSk7CisKKyAgICAgICAgY29tbWFuZF9yZWdpc3RlciAoY29tbWFuZHMsIGNvbW1hbmRfY3JlYXRlICgKKyAgICAgICAgICAgICAgICBzdHJfbGlzdF9jcmVhdGVfdW5pcXVlICgibWtwYXJ0ZnMiLCBfKCJta3BhcnRmcyIpLCBOVUxMKSwKKyAgICAgICAgICAgICAgICBkb19ta3BhcnRmcywKKyAgICAgICAgICAgICAgICBzdHJfbGlzdF9jcmVhdGUgKAorXygibWtwYXJ0ZnMgUEFSVC1UWVBFIEZTLVRZUEUgU1RBUlQgRU5EICAgICBtYWtlIGEgcGFydGl0aW9uIHdpdGggYSAiCisgICJmaWxlIHN5c3RlbSIpLAorTlVMTCksCisgICAgICAgIHN0cl9saXN0X2NyZWF0ZSAoXyhwYXJ0X3R5cGVfbXNnKSwgXyhzdGFydF9lbmRfbXNnKSwgTlVMTCksIDEpKTsKKworY29tbWFuZF9yZWdpc3RlciAoY29tbWFuZHMsIGNvbW1hbmRfY3JlYXRlICgKKyAgICAgICAgc3RyX2xpc3RfY3JlYXRlX3VuaXF1ZSAoIm1vdmUiLCBfKCJtb3ZlIiksIE5VTEwpLAorICAgICAgICBkb19tb3ZlLAorICAgICAgICBzdHJfbGlzdF9jcmVhdGUgKAorXygibW92ZSBOVU1CRVIgU1RBUlQgRU5EICAgICAgICAgICAgICAgICAgICBtb3ZlIHBhcnRpdGlvbiBOVU1CRVIiKSwKK05VTEwpLAorICAgICAgICBzdHJfbGlzdF9jcmVhdGUgKF8obnVtYmVyX21zZyksIF8oc3RhcnRfZW5kX21zZyksIE5VTEwpLCAxKSk7CisKK2NvbW1hbmRfcmVnaXN0ZXIgKGNvbW1hbmRzLCBjb21tYW5kX2NyZWF0ZSAoCisgICAgICAgIHN0cl9saXN0X2NyZWF0ZV91bmlxdWUgKCJuYW1lIiwgXygibmFtZSIpLCBOVUxMKSwKKyAgICAgICAgZG9fbmFtZSwKKyAgICAgICAgc3RyX2xpc3RfY3JlYXRlICgKK18oIm5hbWUgTlVNQkVSIE5BTUUgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSBwYXJ0aXRpb24gTlVNQkVSIGFzIE5BTUUiKSwKK05VTEwpLAorICAgICAgICBzdHJfbGlzdF9jcmVhdGUgKF8obnVtYmVyX21zZyksIF8obmFtZV9tc2cpLCBOVUxMKSwgMSkpOworCitjb21tYW5kX3JlZ2lzdGVyIChjb21tYW5kcywgY29tbWFuZF9jcmVhdGUgKAorICAgICAgICBzdHJfbGlzdF9jcmVhdGVfdW5pcXVlICgicHJpbnQiLCBfKCJwcmludCIpLCBOVUxMKSwKKyAgICAgICAgZG9fcHJpbnQsCisgICAgICAgIHN0cl9saXN0X2NyZWF0ZSAoCitfKCJwcmludCBbZGV2aWNlc3xmcmVlfGxpc3QsYWxsfE5VTUJFUl0gICAgIGRpc3BsYXkgdGhlIHBhcnRpdGlvbiB0YWJsZSwgIgorICAiYXZhaWxhYmxlIGRldmljZXMsIGZyZWUgc3BhY2UsIGFsbCBmb3VuZCBwYXJ0aXRpb25zLCBvciBhIHBhcnRpY3VsYXIgIgorICAicGFydGl0aW9uIiksCitOVUxMKSwKKyAgICAgICAgc3RyX2xpc3RfY3JlYXRlICgKK18oIldpdGhvdXQgYXJndW1lbnRzLCAncHJpbnQnIGRpc3BsYXlzIHRoZSBlbnRpcmUgcGFydGl0aW9uIHRhYmxlLiBIb3dldmVyICIKKyAgIndpdGggdGhlIGZvbGxvd2luZyBhcmd1bWVudHMgaXQgcGVyZm9ybXMgdmFyaW91cyBvdGhlciBhY3Rpb25zLlxuIiksCitfKCIgIGRldmljZXMgICA6IGRpc3BsYXkgYWxsIGFjdGl2ZSBibG9jayBkZXZpY2VzXG4iKSwKK18oIiAgZnJlZSAgICAgIDogZGlzcGxheSBpbmZvcm1hdGlvbiBhYm91dCBmcmVlIHVucGFydGl0aW9uZWQgc3BhY2Ugb24gdGhlICIKKyAgImN1cnJlbnQgYmxvY2sgZGV2aWNlXG4iKSwKK18oIiAgbGlzdCwgYWxsIDogZGlzcGxheSB0aGUgcGFydGl0aW9uIHRhYmxlcyBvZiBhbGwgYWN0aXZlIGJsb2NrIGRldmljZXNcbiIpLAorXygiICBOVU1CRVIgICAgOiBkaXNwbGF5IG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBwYXJ0aWN1bGFyICIKKyAgInBhcnRpdGlvblxuIiksCitOVUxMKSwgMSkpOworCitjb21tYW5kX3JlZ2lzdGVyIChjb21tYW5kcywgY29tbWFuZF9jcmVhdGUgKAorICAgICAgICBzdHJfbGlzdF9jcmVhdGVfdW5pcXVlICgicXVpdCIsIF8oInF1aXQiKSwgTlVMTCksCisgICAgICAgIGRvX3F1aXQsCisgICAgICAgIHN0cl9saXN0X2NyZWF0ZSAoCitfKCJxdWl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQgcHJvZ3JhbSIpLAorTlVMTCksCisgICAgICAgIE5VTEwsIDEpKTsKKworY29tbWFuZF9yZWdpc3RlciAoY29tbWFuZHMsIGNvbW1hbmRfY3JlYXRlICgKKyAgICAgICAgc3RyX2xpc3RfY3JlYXRlX3VuaXF1ZSAoInJlc2N1ZSIsIF8oInJlc2N1ZSIpLCBOVUxMKSwKKyAgICAgICAgZG9fcmVzY3VlLAorICAgICAgICBzdHJfbGlzdF9jcmVhdGUgKAorXygicmVzY3VlIFNUQVJUIEVORCAgICAgICAgICAgICAgICAgICAgICAgICByZXNjdWUgYSBsb3N0IHBhcnRpdGlvbiBuZWFyICIKKyJTVEFSVCBhbmQgRU5EIiksCitOVUxMKSwKKyAgICAgICAgc3RyX2xpc3RfY3JlYXRlIChfKHN0YXJ0X2VuZF9tc2cpLCBOVUxMKSwgMSkpOworCitjb21tYW5kX3JlZ2lzdGVyIChjb21tYW5kcywgY29tbWFuZF9jcmVhdGUgKAorICAgICAgICBzdHJfbGlzdF9jcmVhdGVfdW5pcXVlICgicmVzaXplIiwgXygicmVzaXplIiksIE5VTEwpLAorICAgICAgICBkb19yZXNpemUsCisgICAgICAgIHN0cl9saXN0X2NyZWF0ZSAoCitfKCJyZXNpemUgTlVNQkVSIFNUQVJUIEVORCAgICAgICAgICAgICAgICAgIHJlc2l6ZSBwYXJ0aXRpb24gTlVNQkVSIGFuZCAiCisiaXRzIGZpbGUgc3lzdGVtIiksCitOVUxMKSwKKyAgICAgICAgc3RyX2xpc3RfY3JlYXRlIChfKG51bWJlcl9tc2cpLAorICAgICAgICAgICAgICAgICAgICAgICAgIF8oc3RhcnRfZW5kX21zZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgXyhyZXNpemVfZnNfdHlwZV9tc2cpLCBOVUxMKSwgMSkpOworCitjb21tYW5kX3JlZ2lzdGVyIChjb21tYW5kcywgY29tbWFuZF9jcmVhdGUgKAorICAgICAgICBzdHJfbGlzdF9jcmVhdGVfdW5pcXVlICgicm0iLCBfKCJybSIpLCBOVUxMKSwKKyAgICAgICAgZG9fcm0sCisgICAgICAgIHN0cl9saXN0X2NyZWF0ZSAoCitfKCJybSBOVU1CRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwYXJ0aXRpb24gTlVNQkVSIiksCitOVUxMKSwKKyAgICAgICAgc3RyX2xpc3RfY3JlYXRlIChfKG51bWJlcl9tc2cpLCBOVUxMKSwgMSkpOworCitjb21tYW5kX3JlZ2lzdGVyIChjb21tYW5kcywgY29tbWFuZF9jcmVhdGUgKAorICAgICAgICBzdHJfbGlzdF9jcmVhdGVfdW5pcXVlICgic2VsZWN0IiwgXygic2VsZWN0IiksIE5VTEwpLAorICAgICAgICBkb19zZWxlY3QsCisgICAgICAgIHN0cl9saXN0X2NyZWF0ZSAoCitfKCJzZWxlY3QgREVWSUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNob29zZSB0aGUgZGV2aWNlIHRvIGVkaXQiKSwKK05VTEwpLAorICAgICAgICBzdHJfbGlzdF9jcmVhdGUgKF8oZGV2aWNlX21zZyksIE5VTEwpLCAxKSk7CisKK2NvbW1hbmRfcmVnaXN0ZXIgKGNvbW1hbmRzLCBjb21tYW5kX2NyZWF0ZSAoCisJCXN0cl9saXN0X2NyZWF0ZV91bmlxdWUgKCJzZXQiLCBfKCJzZXQiKSwgTlVMTCksCisJCWRvX3NldCwKKwkJc3RyX2xpc3RfY3JlYXRlICgKK18oInNldCBOVU1CRVIgRkxBRyBTVEFURSAgICAgICAgICAgICAgICAgICAgY2hhbmdlIHRoZSBGTEFHIG9uIHBhcnRpdGlvbiAiCisgICJOVU1CRVIiKSwKK05VTEwpLAorICAgICAgICBzdHJfbGlzdF9jcmVhdGUgKF8obnVtYmVyX21zZyksIGZsYWdfbXNnLCBfKHN0YXRlX21zZyksIE5VTEwpLCAxKSk7CisKK2NvbW1hbmRfcmVnaXN0ZXIgKGNvbW1hbmRzLCBjb21tYW5kX2NyZWF0ZSAoCisgICAgICAgIHN0cl9saXN0X2NyZWF0ZV91bmlxdWUgKCJ0b2dnbGUiLCBfKCJ0b2dnbGUiKSwgTlVMTCksCisgICAgICAgIGRvX3RvZ2dsZSwKKyAgICAgICAgc3RyX2xpc3RfY3JlYXRlICgKK18oInRvZ2dsZSBbTlVNQkVSIFtGTEFHXV0gICAgICAgICAgICAgICAgICAgdG9nZ2xlIHRoZSBzdGF0ZSBvZiBGTEFHIG9uICIKKyAgInBhcnRpdGlvbiBOVU1CRVIiKSwKK05VTEwpLAorICAgICAgICBzdHJfbGlzdF9jcmVhdGUgKF8obnVtYmVyX21zZyksIGZsYWdfbXNnLCBOVUxMKSwgMSkpOworCitjb21tYW5kX3JlZ2lzdGVyIChjb21tYW5kcywgY29tbWFuZF9jcmVhdGUgKAorICAgICAgICBzdHJfbGlzdF9jcmVhdGVfdW5pcXVlICgidW5pdCIsIF8oInVuaXQiKSwgTlVMTCksCisgICAgICAgIGRvX3VuaXQsCisgICAgICAgIHN0cl9saXN0X2NyZWF0ZSAoCitfKCJ1bml0IFVOSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCB0aGUgZGVmYXVsdCB1bml0IHRvIFVOSVQiKSwKK05VTEwpLAorICAgICAgICBzdHJfbGlzdF9jcmVhdGUgKHVuaXRfbXNnLCBOVUxMKSwgMSkpOworCitjb21tYW5kX3JlZ2lzdGVyIChjb21tYW5kcywgY29tbWFuZF9jcmVhdGUgKAorICAgICAgICBzdHJfbGlzdF9jcmVhdGVfdW5pcXVlICgidmVyc2lvbiIsIF8oInZlcnNpb24iKSwgTlVMTCksCisgICAgICAgIGRvX3ZlcnNpb24sCisgICAgICAgIHN0cl9saXN0X2NyZWF0ZSAoCitfKCJ2ZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXkgdGhlIHZlcnNpb24gbnVtYmVyICIKKyJhbmQgY29weXJpZ2h0IGluZm9ybWF0aW9uIG9mIEdOVSBQYXJ0ZWQiKSwKK05VTEwpLAorICAgICAgICBzdHJfbGlzdF9jcmVhdGUgKAorXygiJ3ZlcnNpb24nIGRpc3BsYXlzIGNvcHlyaWdodCBhbmQgdmVyc2lvbiBpbmZvcm1hdGlvbiBjb3JyZXNwb25kaW5nIHRvIHRoaXMgIgorImNvcHkgb2YgR05VIFBhcnRlZFxuIiksCitOVUxMKSwgMSkpOworCit9CisKK3N0YXRpYyB2b2lkCitfZG9uZV9jb21tYW5kcyAoKQoreworQ29tbWFuZCoqICAgICAgIHdhbGs7CisKK2ZvciAod2FsayA9IGNvbW1hbmRzOyAqd2Fsazsgd2FsaysrKSB7CisgICAgICAgIGNvbW1hbmRfZGVzdHJveSAoKndhbGspOworICAgICAgICAqd2FsayA9IE5VTEw7Cit9Cit9CisKK3N0YXRpYyB2b2lkCitfaW5pdF9pMThuICgpCit7CisvKiBpbnRpYWxpemUgaTE4biAqLworI2lmZGVmIEVOQUJMRV9OTFMKK3NldGxvY2FsZShMQ19BTEwsICIiKTsKK2JpbmR0ZXh0ZG9tYWluKFBBQ0tBR0UsIExPQ0FMRURJUik7Cit0ZXh0ZG9tYWluKFBBQ0tBR0UpOworI2VuZGlmIC8qIEVOQUJMRV9OTFMgKi8KK30KKwordm9pZAorX3ZlcnNpb24gKCkKK3sKKyAgdmVyc2lvbl9ldGMgKHN0ZG91dCwgUFJPR1JBTV9OQU1FLCBQQUNLQUdFX05BTUUsIFZFUlNJT04sIEFVVEhPUlMsCisgICAgICAgICAgICAgICAoY2hhciAqKSBOVUxMKTsKK30KKworc3RhdGljIGludAorX3BhcnNlX29wdGlvbnMgKGludCogYXJnY19wdHIsIGNoYXIqKiogYXJndl9wdHIpCit7CitpbnQgICAgIG9wdCwgaGVscCA9IDAsIGxpc3QgPSAwLCB2ZXJzaW9uID0gMCwgd3JvbmcgPSAwOworCit3aGlsZSAoMSkKK3sKKyAgICAgICAgb3B0ID0gZ2V0b3B0X2xvbmcgKCphcmdjX3B0ciwgKmFyZ3ZfcHRyLCAiaGlsbXN2IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMsIE5VTEwpOworICAgICAgICBpZiAob3B0ID09IC0xKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIHN3aXRjaCAob3B0KSB7CisgICAgICAgICAgICAgICAgY2FzZSAnaCc6IGhlbHAgPSAxOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlICdsJzogbGlzdCA9IDE7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgJ20nOiBvcHRfbWFjaGluZV9tb2RlID0gMTsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAncyc6IG9wdF9zY3JpcHRfbW9kZSA9IDE7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgJ3YnOiB2ZXJzaW9uID0gMTsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBQUkVURU5EX0lOUFVUX1RUWToKKyAgICAgICAgICAgICAgICAgIHByZXRlbmRfaW5wdXRfdHR5ID0gMTsKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICB3cm9uZyA9IDE7IGJyZWFrOworICAgICAgICB9Cit9CisKK2lmICh3cm9uZyA9PSAxKSB7CisgICAgICAgIGZwcmludGYgKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgXygiVXNhZ2U6ICVzIFstaGxtc3ZdIFtERVZJQ0UgW0NPTU1BTkQgW1BBUkFNRVRFUlNdXS4uLl1cbiIpLAorICAgICAgICAgICAgICAgICBwcm9ncmFtX25hbWUpOworICAgICAgICByZXR1cm4gMDsKK30KKworaWYgKHZlcnNpb24gPT0gMSkgeworICAgICAgICBfdmVyc2lvbiAoKTsKKyAgICAgICAgZXhpdCAoRVhJVF9TVUNDRVNTKTsKK30KKworaWYgKGhlbHAgPT0gMSkgeworICAgICAgICBoZWxwX21zZyAoKTsKKyAgICAgICAgZXhpdCAoRVhJVF9TVUNDRVNTKTsKK30KKworaWYgKGxpc3QgPT0gMSkgeworICAgICAgICBfcHJpbnRfbGlzdCAoKTsKKyAgICAgICAgZXhpdCAoRVhJVF9TVUNDRVNTKTsKK30KKworKmFyZ2NfcHRyIC09IG9wdGluZDsKKyphcmd2X3B0ciArPSBvcHRpbmQ7CityZXR1cm4gMTsKK30KKworc3RhdGljIFBlZERldmljZSoKK19jaG9vc2VfZGV2aWNlIChpbnQqIGFyZ2NfcHRyLCBjaGFyKioqIGFyZ3ZfcHRyKQoreworUGVkRGV2aWNlKiAgICAgIGRldjsKKworLyogc3BlY2lmaWVkIG9uIGNvbWFuZCBsaW5lPyAqLworaWYgKCphcmdjX3B0cikgeworICAgICAgICBkZXYgPSBwZWRfZGV2aWNlX2dldCAoKCphcmd2X3B0cikgWzBdKTsKKyAgICAgICAgaWYgKCFkZXYpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICgqYXJnY19wdHIpLS07CisgICAgICAgICgqYXJndl9wdHIpKys7Cit9IGVsc2UgeworcmV0cnk6CisgICAgICAgIHBlZF9kZXZpY2VfcHJvYmVfYWxsICgpOworICAgICAgICBkZXYgPSBwZWRfZGV2aWNlX2dldF9uZXh0IChOVUxMKTsKKyAgICAgICAgaWYgKCFkZXYpIHsKKyAgICAgICAgICAgICAgICBpZiAocGVkX2V4Y2VwdGlvbl90aHJvdyAoUEVEX0VYQ0VQVElPTl9FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFBFRF9FWENFUFRJT05fUkVUUllfQ0FOQ0VMLAorICAgICAgICAgICAgICAgICAgICAgICAgXygiTm8gZGV2aWNlIGZvdW5kIikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09IFBFRF9FWENFUFRJT05fUkVUUlkpCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHJldHJ5OworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9Cit9CisKK2lmICghcGVkX2RldmljZV9vcGVuIChkZXYpKQorICAgICAgICByZXR1cm4gTlVMTDsKK3JldHVybiBkZXY7ICAgICAKK30KKworc3RhdGljIFBlZERldmljZSoKK19pbml0IChpbnQqIGFyZ2NfcHRyLCBjaGFyKioqIGFyZ3ZfcHRyKQoreworUGVkRGV2aWNlKiAgICAgIGRldjsKKworI2lmZGVmIEVOQUJMRV9NVFJBQ0UKK210cmFjZSgpOworI2VuZGlmCisKK19pbml0X2kxOG4gKCk7CitpZiAoIWluaXRfdWkgKCkpCisgICAgICAgIGdvdG8gZXJyb3I7CitfaW5pdF9tZXNzYWdlcyAoKTsKK19pbml0X2NvbW1hbmRzICgpOworCitpZiAoIV9wYXJzZV9vcHRpb25zIChhcmdjX3B0ciwgYXJndl9wdHIpKQorICAgICAgICBnb3RvIGVycm9yX2RvbmVfY29tbWFuZHM7CisKKyNpZmRlZiBIQVZFX0dFVFVJRAorICAgICAgICBpZiAoZ2V0dWlkKCkgIT0gMCAmJiAhb3B0X3NjcmlwdF9tb2RlKSB7CisgICAgICAgICAgICBwdXRzIChfKCJXQVJOSU5HOiBZb3UgYXJlIG5vdCBzdXBlcnVzZXIuICBXYXRjaCBvdXQgZm9yICIKKyAgICAgICAgICAgICAgICAgICAgInBlcm1pc3Npb25zLiIpKTsKKyAgICAgICAgfQorI2VuZGlmCisKK2RldiA9IF9jaG9vc2VfZGV2aWNlIChhcmdjX3B0ciwgYXJndl9wdHIpOworaWYgKCFkZXYpCisgICAgICAgIGdvdG8gZXJyb3JfZG9uZV9jb21tYW5kczsKKworZ190aW1lciA9IHBlZF90aW1lcl9uZXcgKF90aW1lcl9oYW5kbGVyLCAmdGltZXJfY29udGV4dCk7CitpZiAoIWdfdGltZXIpCisgICAgICAgIGdvdG8gZXJyb3JfZG9uZV9jb21tYW5kczsKK3RpbWVyX2NvbnRleHQubGFzdF91cGRhdGUgPSAwOworCityZXR1cm4gZGV2OworCitlcnJvcl9kb25lX2NvbW1hbmRzOgorX2RvbmVfY29tbWFuZHMgKCk7CitfZG9uZV9tZXNzYWdlcyAoKTsKK2RvbmVfdWkgKCk7CitlcnJvcjoKK3JldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZAorX2RvbmUgKFBlZERldmljZSogZGV2KQoreworaWYgKGRldi0+Ym9vdF9kaXJ0eSAmJiBkZXYtPnR5cGUgIT0gUEVEX0RFVklDRV9GSUxFKSB7CisgICAgICAgIHBlZF9leGNlcHRpb25fdGhyb3cgKAorICAgICAgICAgICAgICAgIFBFRF9FWENFUFRJT05fV0FSTklORywKKyAgICAgICAgICAgICAgICBQRURfRVhDRVBUSU9OX09LLAorICAgICAgICBfKCJZb3Ugc2hvdWxkIHJlaW5zdGFsbCB5b3VyIGJvb3QgbG9hZGVyIGJlZm9yZSAiCisgICAgICAgICAgInJlYm9vdGluZy4gIFJlYWQgc2VjdGlvbiA0IG9mIHRoZSBQYXJ0ZWQgVXNlciAiCisgICAgICAgICAgImRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uIikpOworfQoraWYgKCFvcHRfc2NyaXB0X21vZGUgJiYgIW9wdF9tYWNoaW5lX21vZGUgJiYgZGlza19pc19tb2RpZmllZCkgeworICAgICAgICBwZWRfZXhjZXB0aW9uX3Rocm93ICgKKyAgICAgICAgICAgICAgICBQRURfRVhDRVBUSU9OX0lORk9STUFUSU9OLCBQRURfRVhDRVBUSU9OX09LLAorICAgICAgICAgICAgICAgIF8oIllvdSBtYXkgbmVlZCB0byB1cGRhdGUgL2V0Yy9mc3RhYi5cbiIpKTsKK30KKworcGVkX2RldmljZV9jbG9zZSAoZGV2KTsKKworcGVkX3RpbWVyX2Rlc3Ryb3kgKGdfdGltZXIpOworX2RvbmVfY29tbWFuZHMgKCk7CitfZG9uZV9tZXNzYWdlcyAoKTsKK2RvbmVfdWkoKTsKK30KKworaW50CittYWluIChpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgICAgIFBlZERldmljZSogICAgICBkZXY7CisgICAgICAgIGludCAgICAgICAgICAgICBzdGF0dXM7CisKKyAgICAgICAgcHJvZ3JhbV9uYW1lID0gYXJndlswXTsKKyAgICAgICAgYXRleGl0IChjbG9zZV9zdGRvdXQpOworCisgICAgICAgIGRldiA9IF9pbml0ICgmYXJnYywgJmFyZ3YpOworICAgICAgICBpZiAoIWRldikKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKworICAgICAgICBpZiAoYXJnYyB8fCBvcHRfc2NyaXB0X21vZGUpCisgICAgICAgICAgICAgICAgc3RhdHVzID0gbm9uX2ludGVyYWN0aXZlX21vZGUgKCZkZXYsIGNvbW1hbmRzLCBhcmdjLCBhcmd2KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHN0YXR1cyA9IGludGVyYWN0aXZlX21vZGUgKCZkZXYsIGNvbW1hbmRzKTsKKworICAgICAgICBfZG9uZSAoZGV2KTsKKworICAgICAgICByZXR1cm4gIXN0YXR1czsKK30KZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9wYXJ0ZWQvc3RybGlzdC5jIGIvcGFydGVkLTEuOC43L3BhcnRlZC9zdHJsaXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGExYjA5ZgotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9wYXJ0ZWQvc3RybGlzdC5jCkBAIC0wLDAgKzEsNjA1IEBACisvKgorICAgIHBhcnRlZCAtIGEgZnJvbnRlbmQgdG8gbGlicGFydGVkCisgICAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQorKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaW5jbHVkZSA8cGFydGVkL2RlYnVnLmg+CisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworI2lmZGVmIEVOQUJMRV9OTFMKKworI3VuZGVmIF9fVVNFX0dOVQorI2RlZmluZSBfX1VTRV9HTlUKKworI2luY2x1ZGUgPHdjaGFyLmg+CisjaW5jbHVkZSA8d2N0eXBlLmg+CisKKyNlbHNlIC8qIEVOQUJMRV9OTFMgKi8KKworI2lmZGVmIHdjaGFyX3QKKyN1bmRlZiB3Y2hhcl90CisjZW5kaWYKKworI2RlZmluZSB3Y2hhcl90IGNoYXIKKworI2VuZGlmIC8qICFFTkFCTEVfTkxTICovCisKKyNpbmNsdWRlICJzdHJsaXN0LmgiCisKKyNkZWZpbmUgTUlOKGEsYikJKCAoYTxiKT8gIGEgOiBiICkKKworaW50Cit3Y2hhcl9zdHJsZW4gKGNvbnN0IHdjaGFyX3QqIHN0cikKK3sKKyNpZmRlZiBFTkFCTEVfTkxTCisJcmV0dXJuIHdjc2xlbiAoc3RyKTsKKyNlbHNlCisJcmV0dXJuIHN0cmxlbiAoc3RyKTsKKyNlbmRpZgorfQorCit3Y2hhcl90Kgord2NoYXJfc3RyY2hyIChjb25zdCB3Y2hhcl90KiBzdHIsIGNoYXIgY2gpCit7CisjaWZkZWYgRU5BQkxFX05MUworCXJldHVybiB3Y3NjaHIgKHN0ciwgY2gpOworI2Vsc2UKKwlyZXR1cm4gc3RyY2hyIChzdHIsIGNoKTsKKyNlbmRpZgorfQorCitpbnQKK3djaGFyX3N0cmNhc2VjbXAgKGNvbnN0IHdjaGFyX3QqIGEsIGNvbnN0IHdjaGFyX3QqIGIpCit7CisjaWZkZWYgRU5BQkxFX05MUworCXJldHVybiB3Y3NjYXNlY21wIChhLCBiKTsKKyNlbHNlCisJcmV0dXJuIHN0cmNhc2VjbXAgKGEsIGIpOworI2VuZGlmCit9CisKK2ludAord2NoYXJfc3RybmNhc2VjbXAgKGNvbnN0IHdjaGFyX3QqIGEsIGNvbnN0IHdjaGFyX3QqIGIsIHNpemVfdCBuKQoreworI2lmZGVmIEVOQUJMRV9OTFMKKwlyZXR1cm4gd2NzbmNhc2VjbXAgKGEsIGIsIG4pOworI2Vsc2UKKwlyZXR1cm4gc3RybmNhc2VjbXAgKGEsIGIsIG4pOworI2VuZGlmCit9CisKK3djaGFyX3QqCit3Y2hhcl9zdHJkdXAgKGNvbnN0IHdjaGFyX3QqIHN0cikKK3sKKyNpZmRlZiBFTkFCTEVfTkxTCisJcmV0dXJuIHdjc2R1cCAoc3RyKTsKKyNlbHNlCisJcmV0dXJuIHN0cmR1cCAoc3RyKTsKKyNlbmRpZgorfQorCisvKiBjb252ZXJ0cyBhIHN0cmluZyBmcm9tIHRoZSBlbmNvZGluZyBpbiB0aGUgZ2V0dGV4dCBjYXRhbG9ndWVzIHRvIHdpZGUKKyAqIGNoYXJhY3RlciBzdHJpbmdzIChvZiB0eXBlIHdjaGFyX3QqKS4KKyAqLworI2lmZGVmIEVOQUJMRV9OTFMKK3N0YXRpYyB3Y2hhcl90KgorZ2V0dGV4dF90b193Y2hhciAoY29uc3QgY2hhciogc3RyKQoreworCWludAkJY291bnQ7CisJd2NoYXJfdCoJcmVzdWx0OworCXNpemVfdAkJc3RhdHVzOworCW1ic3RhdGVfdAlwczsKKworCWNvdW50ID0gc3RybGVuIChzdHIpICsgMTsKKwlyZXN1bHQgPSBtYWxsb2MgKGNvdW50ICogc2l6ZW9mICh3Y2hhcl90KSk7CisJaWYgKCFyZXN1bHQpCisJCWdvdG8gZXJyb3I7CisKKwltZW1zZXQoJnBzLCAwLCBzaXplb2YgKHBzKSk7CisJc3RhdHVzID0gbWJzcnRvd2NzKHJlc3VsdCwgJnN0ciwgY291bnQsICZwcyk7CisJaWYgKHN0YXR1cyA9PSAoc2l6ZV90KSAtMSkKKwkJZ290byBlcnJvcjsKKworCXJlc3VsdCA9IHJlYWxsb2MgKHJlc3VsdCwgKHdjc2xlbiAocmVzdWx0KSArIDEpICogc2l6ZW9mICh3Y2hhcl90KSk7CisJcmV0dXJuIHJlc3VsdDsKKworZXJyb3I6CisJcHJpbnRmICgiRXJyb3IgZHVyaW5nIHRyYW5zbGF0aW9uOiAlc1xuIiwgc3RyZXJyb3IgKGVycm5vKSk7CisJZXhpdCAoMSk7Cit9CisKKyNlbHNlIC8qIEVOQUJMRV9OTFMgKi8KKworc3RhdGljIHdjaGFyX3QqCitnZXR0ZXh0X3RvX3djaGFyIChjb25zdCBjaGFyKiBzdHIpCit7CisJcmV0dXJuIHN0cmR1cCAoc3RyKTsKK30KKworI2VuZGlmIC8qICFFTkFCTEVfTkxTICovCisKKworI2lmZGVmIEVOQUJMRV9OTFMKK3N0YXRpYyBjaGFyKgord2NoYXJfdG9fc3RyIChjb25zdCB3Y2hhcl90KiBzdHIsIHNpemVfdCBjb3VudCkKK3sKKwljaGFyKgkJcmVzdWx0OworCWNoYXIqCQlvdXRfYnVmOworCXNpemVfdAkJc3RhdHVzOworCW1ic3RhdGVfdAlwczsKKwlzaXplX3QJCWk7CisKKwlpZiAoY291bnQgPT0gMCB8fCB3Y3NsZW4oc3RyKSA8IGNvdW50KQorCQljb3VudCA9IHdjc2xlbiAoc3RyKTsKKworCW91dF9idWYgPSByZXN1bHQgPSBtYWxsb2MgKChjb3VudCArIDEpICogIE1CX0xFTl9NQVgpOworCWlmICghcmVzdWx0KQorCQlnb3RvIGVycm9yOworCisJbWVtc2V0KCZwcywgMCwgc2l6ZW9mKHBzKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlzdGF0dXMgPSB3Y3J0b21iIChvdXRfYnVmLCBzdHJbaV0sICZwcyk7CisJCWlmIChzdGF0dXMgPT0gKHNpemVfdCkgLTEpCisJCQlnb3RvIGVycm9yOworCQlvdXRfYnVmICs9IHN0YXR1czsKKwl9CisKKwlzdGF0dXMgPSB3Y3J0b21iIChvdXRfYnVmLCAwLCAmcHMpOworCWlmIChzdGF0dXMgPT0gKHNpemVfdCkgLTEpCisJCWdvdG8gZXJyb3I7CisKKwlyZXN1bHQgPSByZWFsbG9jIChyZXN1bHQsIHN0cmxlbiAocmVzdWx0KSArIDEpOworCXJldHVybiByZXN1bHQ7CisKK2Vycm9yOgorCXByaW50ZiAoIkVycm9yIGR1cmluZyB0cmFuc2xhdGlvbjogJXNcbiIsIHN0cmVycm9yIChlcnJubykpOworCWV4aXQgKDEpOworfQorCisjZWxzZSAvKiBFTkFCTEVfTkxTICovCisKK3N0YXRpYyBjaGFyKgord2NoYXJfdG9fc3RyIChjb25zdCB3Y2hhcl90KiBzdHIsIHNpemVfdCBjb3VudCkKK3sKKwljaGFyKgkJcmVzdWx0OworCisJcmVzdWx0ID0gc3RyZHVwIChzdHIpOworCWlmIChjb3VudCAmJiBjb3VudCA8IHN0cmxlbiAocmVzdWx0KSkKKwkJcmVzdWx0IFtjb3VudF0gPSAwOworCXJldHVybiByZXN1bHQ7Cit9CisKKyNlbmRpZiAvKiAhRU5BQkxFX05MUyAqLworCitzdGF0aWMgdm9pZAorcHJpbnRfd2NoYXIgKGNvbnN0IHdjaGFyX3QqIHN0ciwgc2l6ZV90IGNvdW50KQoreworCWNoYXIqCXRtcCA9IHdjaGFyX3RvX3N0ciAoc3RyLCBjb3VudCk7CisJcHJpbnRmICgiJXMiLCB0bXApOworCWZyZWUgKHRtcCk7Cit9CisKK3N0YXRpYyBTdHJMaXN0KiAKK3N0cl9saXN0X2FsbG9jICgpCit7CisJU3RyTGlzdCoJbGlzdDsKKworCWxpc3QgPSAoU3RyTGlzdCopIG1hbGxvYyAoc2l6ZW9mIChTdHJMaXN0KSk7CisJbGlzdC0+bmV4dCA9IE5VTEw7CisKKwlyZXR1cm4gbGlzdDsKK30KKwordm9pZAorc3RyX2xpc3RfZGVzdHJveSAoU3RyTGlzdCogbGlzdCkKK3sKKwlpZiAobGlzdCkgeworCQlzdHJfbGlzdF9kZXN0cm95IChsaXN0LT5uZXh0KTsKKwkJc3RyX2xpc3RfZGVzdHJveV9ub2RlIChsaXN0KTsKKwl9Cit9CisKK3ZvaWQKK3N0cl9saXN0X2Rlc3Ryb3lfbm9kZSAoU3RyTGlzdCogbGlzdCkKK3sKKwlmcmVlICgod2NoYXJfdCopIGxpc3QtPnN0cik7CisJZnJlZSAobGlzdCk7Cit9CisKK1N0ckxpc3QqCitzdHJfbGlzdF9kdXBsaWNhdGVfbm9kZSAoY29uc3QgU3RyTGlzdCogbm9kZSkKK3sKKwlTdHJMaXN0KglyZXN1bHQgPSBzdHJfbGlzdF9hbGxvYyAoKTsKKwlyZXN1bHQtPnN0ciA9IHdjaGFyX3N0cmR1cCAobm9kZS0+c3RyKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitTdHJMaXN0Kgorc3RyX2xpc3RfZHVwbGljYXRlIChjb25zdCBTdHJMaXN0KiBsaXN0KQoreworCWlmIChsaXN0KQorCQlyZXR1cm4gc3RyX2xpc3Rfam9pbiAoc3RyX2xpc3RfZHVwbGljYXRlX25vZGUgKGxpc3QpLAorCQkJCSAgICAgIHN0cl9saXN0X2R1cGxpY2F0ZSAobGlzdC0+bmV4dCkpOworCWVsc2UKKwkJcmV0dXJuIE5VTEw7Cit9CisKK1N0ckxpc3QqCitzdHJfbGlzdF9qb2luIChTdHJMaXN0KiBhLCBTdHJMaXN0KiBiKQoreworCVN0ckxpc3QqCXdhbGs7CisKKwlmb3IgKHdhbGsgPSBhOyB3YWxrICYmIHdhbGstPm5leHQ7IHdhbGsgPSB3YWxrLT5uZXh0KTsKKworCWlmICh3YWxrKSB7CisJCXdhbGstPm5leHQgPSBiOworCQlyZXR1cm4gYTsKKwl9IGVsc2UgeworCQlyZXR1cm4gYjsKKwl9Cit9CisKK3N0YXRpYyBTdHJMaXN0KgorX3N0cl9saXN0X2FwcGVuZCAoU3RyTGlzdCogbGlzdCwgY29uc3Qgd2NoYXJfdCogc3RyKQoreworCVN0ckxpc3QqCXdhbGs7CisKKwlpZiAobGlzdCkgeworCQlmb3IgKHdhbGsgPSBsaXN0OyB3YWxrLT5uZXh0OyB3YWxrID0gd2Fsay0+bmV4dCk7CisJCXdhbGstPm5leHQgPSBzdHJfbGlzdF9hbGxvYyAoKTsKKwkJd2FsayA9IHdhbGstPm5leHQ7CisJfSBlbHNlIHsKKwkJd2FsayA9IGxpc3QgPSBzdHJfbGlzdF9hbGxvYyAoKTsKKwl9CisJd2Fsay0+c3RyID0gc3RyOworCisJcmV0dXJuIGxpc3Q7Cit9CisKK1N0ckxpc3QqCitzdHJfbGlzdF9hcHBlbmQgKFN0ckxpc3QqIGxpc3QsIGNvbnN0IGNoYXIqIHN0cikKK3sKKwlyZXR1cm4gX3N0cl9saXN0X2FwcGVuZCAobGlzdCwgZ2V0dGV4dF90b193Y2hhciAoc3RyKSk7Cit9CisKK1N0ckxpc3QqCitzdHJfbGlzdF9hcHBlbmRfdW5pcXVlIChTdHJMaXN0KiBsaXN0LCBjb25zdCBjaGFyKiBzdHIpCit7CisJU3RyTGlzdCoJd2FsazsKKwl3Y2hhcl90KgluZXdfc3RyID0gZ2V0dGV4dF90b193Y2hhciAoc3RyKTsKKworCWZvciAod2Fsaz1saXN0OyB3YWxrOyB3YWxrPXdhbGstPm5leHQpIHsKKwkJaWYgKHdhbGstPnN0cikgeworCQkJaWYgKHdjaGFyX3N0cmNhc2VjbXAgKG5ld19zdHIsIHdhbGstPnN0cikgPT0gMCkgeworCQkJCWZyZWUgKG5ld19zdHIpOworCQkJCXJldHVybiBsaXN0OworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIF9zdHJfbGlzdF9hcHBlbmQgKGxpc3QsIG5ld19zdHIpOworfQorCitTdHJMaXN0Kgorc3RyX2xpc3RfaW5zZXJ0IChTdHJMaXN0KiBsaXN0LCBjb25zdCBjaGFyKiBzdHIpCit7CisJcmV0dXJuIHN0cl9saXN0X2pvaW4gKHN0cl9saXN0X2NyZWF0ZSAoc3RyLCBOVUxMKSwgbGlzdCk7Cit9CisKK1N0ckxpc3QqCitzdHJfbGlzdF9jcmVhdGUgKGNvbnN0IGNoYXIqIGZpcnN0LCAuLi4pCit7CisJdmFfbGlzdAkJYXJnczsKKwljaGFyKgkJc3RyOworCVN0ckxpc3QqCWxpc3Q7CisKKwlsaXN0ID0gc3RyX2xpc3RfYXBwZW5kIChOVUxMLCBmaXJzdCk7CisKKwlpZiAoZmlyc3QpIHsKKwkJdmFfc3RhcnQgKGFyZ3MsIGZpcnN0KTsKKwkJd2hpbGUgKCAoc3RyID0gdmFfYXJnIChhcmdzLCBjaGFyKikpICkKKwkJCXN0cl9saXN0X2FwcGVuZCAobGlzdCwgc3RyKTsKKwkJdmFfZW5kIChhcmdzKTsKKwl9CisKKwlyZXR1cm4gbGlzdDsKK30KKworU3RyTGlzdCoKK3N0cl9saXN0X2NyZWF0ZV91bmlxdWUgKGNvbnN0IGNoYXIqIGZpcnN0LCAuLi4pCit7CisJdmFfbGlzdAkJYXJnczsKKwljaGFyKgkJc3RyOworCVN0ckxpc3QqCWxpc3Q7CisKKwlsaXN0ID0gc3RyX2xpc3RfYXBwZW5kIChOVUxMLCBmaXJzdCk7CisKKwlpZiAoZmlyc3QpIHsKKwkJdmFfc3RhcnQgKGFyZ3MsIGZpcnN0KTsKKwkJd2hpbGUgKCAoc3RyID0gdmFfYXJnIChhcmdzLCBjaGFyKikpICkKKwkJCXN0cl9saXN0X2FwcGVuZF91bmlxdWUgKGxpc3QsIHN0cik7CisJCXZhX2VuZCAoYXJncyk7CisJfQorCisJcmV0dXJuIGxpc3Q7Cit9CisKK2NoYXIqCitzdHJfbGlzdF9jb252ZXJ0X25vZGUgKGNvbnN0IFN0ckxpc3QqIGxpc3QpCit7CisJcmV0dXJuIHdjaGFyX3RvX3N0ciAobGlzdC0+c3RyLCAwKTsKK30KKworY2hhcioKK3N0cl9saXN0X2NvbnZlcnQgKGNvbnN0IFN0ckxpc3QqIGxpc3QpCit7CisJY29uc3QgU3RyTGlzdCoJd2FsazsKKwlpbnQJCXBvcyA9IDA7CisJaW50CQlsZW5ndGggPSAxOworCWNoYXIqCQlzdHIgPSBzdHJkdXAgKCIiKTsKKworCWZvciAod2FsayA9IGxpc3Q7IHdhbGs7IHdhbGsgPSB3YWxrLT5uZXh0KSB7CisJCWlmICh3YWxrLT5zdHIpIHsKKwkJCWNoYXIqCXRtcCA9IHdjaGFyX3RvX3N0ciAod2Fsay0+c3RyLCAwKTsKKworCQkJbGVuZ3RoICs9IHN0cmxlbiAodG1wKTsKKworCQkJc3RyID0gcmVhbGxvYyAoc3RyLCBsZW5ndGgpOworCQkJc3RyY3B5IChzdHIgKyBwb3MsIHRtcCk7CisKKwkJCXBvcyA9IGxlbmd0aCAtIDE7CisJCQlmcmVlICh0bXApOworCQl9CisJfQorCisJcmV0dXJuIHN0cjsKK30KKwordm9pZAorc3RyX2xpc3RfcHJpbnQgKGNvbnN0IFN0ckxpc3QqIGxpc3QpCit7CisJY29uc3QgU3RyTGlzdCoJd2FsazsKKworCWZvciAod2Fsaz1saXN0OyB3YWxrOyB3YWxrPXdhbGstPm5leHQpIHsKKwkJaWYgKHdhbGstPnN0cikKKwkJCXByaW50X3djaGFyICh3YWxrLT5zdHIsIDApOworCX0KK30KKworc3RhdGljIGNoYXIqCitnZXRfc3BhY2VzIChpbnQgc3BhY2VfY291bnQpCit7CisJY2hhcioJc3RyOworCWludAlpOworCisJc3RyID0gbWFsbG9jIChzcGFjZV9jb3VudCArIDEpOworCWZvciAoaSA9IDA7IGkgPCBzcGFjZV9jb3VudDsgaSsrKQorCQlzdHIgW2ldID0gJyAnOworCXN0ciBbaV0gPSAwOworCisJcmV0dXJuIHN0cjsKK30KKworc3RhdGljIGludAorc3RyX3NlYXJjaCAoY29uc3Qgd2NoYXJfdCogc3RyLCBpbnQgbiwgd2NoYXJfdCBjKQoreworCWludAlpOworCisJZm9yIChpPTA7IGk8bjsgaSsrKQorCQlpZiAoc3RyIFtpXSA9PSBjKQorCQkJcmV0dXJuIGk7CisJcmV0dXJuIC0xOworfQorCisKKy8qIEphcGFuZXNlIGRvbid0IGxlYXZlIHNwYWNlcyBiZXR3ZWVuIHdvcmRzLCBzbyBBTEwgSmFwYW5lc2UgY2hhcmFjdGVycworICogYXJlIHRyZWF0ZWQgYXMgZGVsaW1pdGVycy4gIE5vdGU6IHNpbmNlIHRoZSB0cmFuc2xhdGlvbnMgc2hvdWxkIGFscmVhZHkKKyAqIGJlIHByb3Blcmx5IGZvcm1hdHRlZCAoZWc6IHNwYWNlcyBhZnRlciBjb21tYXMpLCB0aGVyZSBzaG91bGQgYmUgbm8KKyAqIG5lZWQgdG8gaW5jbHVkZSB0aGVtLiAgQmVzdCBub3QgdG8gYXZvaWQgc2lkZSBlZmZlY3RzLCBsaWtlIDMuCisxNDE1OSA6LSkKKyAqIEZJWE1FOiBob3cgZG8gd2UgZXhjbHVkZSAiLiIgYW5kICIoIiA/CisgKiBGSVhNRTogZ2xpYmMgZG9lc24ndCBsaWtlIHVtbGF1dGUuICBpLmUuIFwibyAoVGVYIG5vdGF0aW9uKSwgd2hpY2ggc2hvdWxkCisgKiBsb29rIGxpa2U6IPYKKyAqLworCitzdGF0aWMgaW50Citpc19icmVha19wb2ludCAod2NoYXJfdCBjKQoreworI2lmZGVmIEVOQUJMRV9OTFMKKwlyZXR1cm4gIWlzd2FsbnVtIChjKSAmJiAhaXN3cHVuY3QgKGMpOworI2Vsc2UKKwlyZXR1cm4gIWlzYWxudW0gKGMpICYmICFpc3B1bmN0IChjKTsKKyNlbmRpZgorfQorCisvKiBOT1RFOiB0aGlzIHNob3VsZCBub3QgcmV0dXJuICdcbicgYXMgYSBzcGFjZSwgYmVjYXVzZSBleHBsaWNpdCAnXG4nIG1heQorICogYmUgcGxhY2VkIGluc2lkZSBzdHJpbmdzLgorICovCitzdGF0aWMgaW50Citpc19zcGFjZSAod2NoYXJfdCBjKQoreworI2lmZGVmIEVOQUJMRV9OTFMKKwlyZXR1cm4gYyA9PSAod2NoYXJfdCkgYnRvd2MoJyAnKTsKKyNlbHNlCisJcmV0dXJuIGMgPT0gJyAnOworI2VuZGlmCit9CisKK3ZvaWQKK3N0cl9saXN0X3ByaW50X3dyYXAgKGNvbnN0IFN0ckxpc3QqIGxpc3QsIGludCBsaW5lX2xlbmd0aCwgaW50IG9mZnNldCwKKwkJICAgICBpbnQgaW5kZW50KQoreworCWNvbnN0IFN0ckxpc3QqCXdhbGs7CisJY29uc3Qgd2NoYXJfdCoJc3RyOworCWludAkJc3RyX2xlbjsKKwlpbnQJCWN1dF9yaWdodDsKKwlpbnQJCWN1dF9sZWZ0OworCWludAkJbGluZV9sZWZ0OworCWNoYXIqCQlzcGFjZXM7CisJaW50CQlzZWFyY2hfcmVzdWx0OworCWludAkJbGluZV9icmVhazsKKworCVBFRF9BU1NFUlQgKGxpbmVfbGVuZ3RoIC0gaW5kZW50ID4gMTAsIHJldHVybik7CisKKwlzcGFjZXMgPSBnZXRfc3BhY2VzIChpbmRlbnQpOworCWxpbmVfbGVmdCA9IGxpbmVfbGVuZ3RoIC0gb2Zmc2V0OworCisJZm9yICh3YWxrPWxpc3Q7IHdhbGs7IHdhbGs9d2Fsay0+bmV4dCkgeworCQlpZiAoIXdhbGstPnN0cikKKwkJCWNvbnRpbnVlOworCQlzdHIgPSB3YWxrLT5zdHI7CisJCXN0cl9sZW4gPSB3Y2hhcl9zdHJsZW4gKHN0cik7CisKKwkJd2hpbGUgKGxpbmVfbGVmdCA8IHN0cl9sZW4gfHwgd2NoYXJfc3RyY2hyIChzdHIsICdcbicpKSB7CisJCQlsaW5lX2JyZWFrID0gMDsKKworCQkJY3V0X2xlZnQgPSBNSU4gKGxpbmVfbGVmdCAtIDEsIHN0cl9sZW4gLSAxKTsKKworCQkJLyogd2UgY2FuIGhhdmUgYSBzcGFjZSAib3ZlciIsIGJ1dCBub3QgYSBjb21tYSAqLworCQkJaWYgKGN1dF9sZWZ0IDwgc3RyX2xlbgorCQkJCQkmJiBpc19zcGFjZSAoc3RyIFtjdXRfbGVmdCArIDFdKSkKKwkJCQljdXRfbGVmdCsrOworCisJCQl3aGlsZSAoY3V0X2xlZnQgJiYgIWlzX2JyZWFrX3BvaW50IChzdHIgW2N1dF9sZWZ0XSkpCisJCQkJY3V0X2xlZnQtLTsKKwkJCXdoaWxlIChjdXRfbGVmdCAmJiBpc19zcGFjZSAoc3RyIFtjdXRfbGVmdF0pKQorCQkJCWN1dF9sZWZ0LS07CisKKwkJLyogc3RyIFtjdXRfbGVmdF0gaXMgZWl0aGVyIHRoZSBlbmQgb2YgYSB3b3JkLCBvciBhCisJCSAqIEphcGFuZXNlIGNoYXJhY3Rlciwgb3IgdGhlIHN0YXJ0IG9mIGEgYmxhbmsgbGluZS4KKwkJICovCisKKwkJCXNlYXJjaF9yZXN1bHQgPSBzdHJfc2VhcmNoIChzdHIsIGN1dF9sZWZ0ICsgMSwgJ1xuJyk7CisJCQlpZiAoc2VhcmNoX3Jlc3VsdCAhPSAtMSkgeworCQkJCWN1dF9sZWZ0ID0gc2VhcmNoX3Jlc3VsdCAtIDE7CisJCQkJbGluZV9icmVhayA9IDE7CisJCQl9CisKKwkJCWZvciAoY3V0X3JpZ2h0ID0gY3V0X2xlZnQgKyAobGluZV9icmVhayA/IDIgOiAxKTsKKwkJCSAgICAgY3V0X3JpZ2h0IDwgc3RyX2xlbiAmJiBpc19zcGFjZSAoc3RyIFtjdXRfcmlnaHRdKTsKKwkJCSAgICAgY3V0X3JpZ2h0KyspOworCisJCQlpZiAoY3V0X2xlZnQgPiAwKQorCQkJCXByaW50X3djaGFyIChzdHIsIGN1dF9sZWZ0ICsgMSk7CisKKwkJCXN0ciArPSBjdXRfcmlnaHQ7CisJCQlzdHJfbGVuIC09IGN1dF9yaWdodDsKKwkJCWxpbmVfbGVmdCA9IGxpbmVfbGVuZ3RoIC0gaW5kZW50OworCisJCQlpZiAod2Fsay0+bmV4dCB8fCAqc3RyKQorCQkJCXByaW50ZiAoIlxuJXMiLCBzcGFjZXMpOworCQkJZWxzZSBpZiAobGluZV9icmVhaykKKwkJCQlwdXRjaGFyICgnXG4nKTsKKwkJfQorCisJCXByaW50X3djaGFyIChzdHIsIDApOworCQlsaW5lX2xlZnQgLT0gd2NoYXJfc3RybGVuIChzdHIpOworCX0KKworCWZyZWUgKHNwYWNlcyk7Cit9CisKK3N0YXRpYyBpbnQKK19zdHJfbGlzdF9tYXRjaF9ub2RlIChjb25zdCBTdHJMaXN0KiBsaXN0LCBjb25zdCB3Y2hhcl90KiBzdHIpCit7CisJaWYgKHdjaGFyX3N0cmNhc2VjbXAgKGxpc3QtPnN0ciwgc3RyKSA9PSAwKQorCQlyZXR1cm4gMjsKKwlpZiAod2NoYXJfc3RybmNhc2VjbXAgKGxpc3QtPnN0ciwgc3RyLCB3Y2hhcl9zdHJsZW4gKHN0cikpID09IDApCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCitpbnQKK3N0cl9saXN0X21hdGNoX25vZGUgKGNvbnN0IFN0ckxpc3QqIGxpc3QsIGNvbnN0IGNoYXIqIHN0cikKK3sKKwl3Y2hhcl90Kgl3Y19zdHIgPSBnZXR0ZXh0X3RvX3djaGFyIChzdHIpOwkvKiBGSVhNRSAqLworCWludAkJc3RhdHVzOworCisJc3RhdHVzID0gX3N0cl9saXN0X21hdGNoX25vZGUgKGxpc3QsIHdjX3N0cik7CisJZnJlZSAod2Nfc3RyKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIHJldHVybnM6ICAyIGZvciBmdWxsIG1hdGNoCisJICAgICAxIGZvciBwYXJ0aWFsIG1hdGNoCisJICAgICAwIGZvciBubyBtYXRjaAorICovCitpbnQKK3N0cl9saXN0X21hdGNoX2FueSAoY29uc3QgU3RyTGlzdCogbGlzdCwgY29uc3QgY2hhciogc3RyKQoreworCWNvbnN0IFN0ckxpc3QqCXdhbGs7CisJaW50CQliZXN0X3N0YXR1cyA9IDA7CisJd2NoYXJfdCoJd2Nfc3RyID0gZ2V0dGV4dF90b193Y2hhciAoc3RyKTsKKworCWZvciAod2FsayA9IGxpc3Q7IHdhbGs7IHdhbGsgPSB3YWxrLT5uZXh0KSB7CisJCWludAl0aGlzX3N0YXR1cyA9IF9zdHJfbGlzdF9tYXRjaF9ub2RlICh3YWxrLCB3Y19zdHIpOworCQlpZiAodGhpc19zdGF0dXMgPiBiZXN0X3N0YXR1cykKKwkgICAgICAgCQliZXN0X3N0YXR1cyA9IHRoaXNfc3RhdHVzOworCX0KKworCWZyZWUgKHdjX3N0cik7CisJcmV0dXJuIGJlc3Rfc3RhdHVzOworfQorCitTdHJMaXN0Kgorc3RyX2xpc3RfbWF0Y2ggKGNvbnN0IFN0ckxpc3QqIGxpc3QsIGNvbnN0IGNoYXIqIHN0cikKK3sKKwljb25zdCBTdHJMaXN0Kgl3YWxrOworCWNvbnN0IFN0ckxpc3QqCXBhcnRpYWxfbWF0Y2ggPSBOVUxMOworCWludAkJYW1iaWd1b3VzID0gMDsKKwl3Y2hhcl90Kgl3Y19zdHIgPSBnZXR0ZXh0X3RvX3djaGFyIChzdHIpOworCisJZm9yICh3YWxrID0gbGlzdDsgd2Fsazsgd2FsayA9IHdhbGstPm5leHQpIHsKKwkJc3dpdGNoIChfc3RyX2xpc3RfbWF0Y2hfbm9kZSAod2Fsaywgd2Nfc3RyKSkgeworCQkJY2FzZSAyOgorCQkJCWZyZWUgKHdjX3N0cik7CisJCQkJcmV0dXJuIChTdHJMaXN0Kikgd2FsazsKKworCQkJY2FzZSAxOgorCQkJCWlmIChwYXJ0aWFsX21hdGNoKQorCQkJCQlhbWJpZ3VvdXMgPSAxOworCQkJCXBhcnRpYWxfbWF0Y2ggPSB3YWxrOworCQl9CisJfQorCisJZnJlZSAod2Nfc3RyKTsKKwlyZXR1cm4gYW1iaWd1b3VzID8gTlVMTCA6IChTdHJMaXN0KikgcGFydGlhbF9tYXRjaDsKK30KKworaW50CitzdHJfbGlzdF9sZW5ndGggKGNvbnN0IFN0ckxpc3QqIGxpc3QpCit7CisJaW50CQlsZW5ndGggPSAwOworCWNvbnN0IFN0ckxpc3QqCXdhbGs7CisKKwlmb3IgKHdhbGsgPSBsaXN0OyB3YWxrOyB3YWxrID0gd2Fsay0+bmV4dCkKKwkJbGVuZ3RoKys7CisKKwlyZXR1cm4gbGVuZ3RoOworfQorCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvcGFydGVkL3N0cmxpc3QuaCBiL3BhcnRlZC0xLjguNy9wYXJ0ZWQvc3RybGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NThiYTEKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvcGFydGVkL3N0cmxpc3QuaApAQCAtMCwwICsxLDU5IEBACisvKgorICAgIHBhcnRlZCAtIGEgZnJvbnRlbmQgdG8gbGlicGFydGVkCisgICAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQorKi8KKworI2lmbmRlZiBTVFJMSVNUX0hfSU5DTFVERUQKKyNkZWZpbmUgU1RSTElTVF9IX0lOQ0xVREVECisKKyNpbmNsdWRlIDx3Y2hhci5oPgorCit0eXBlZGVmIHN0cnVjdCBfU3RyTGlzdCBTdHJMaXN0Oworc3RydWN0IF9TdHJMaXN0IHsKKwlTdHJMaXN0KgluZXh0OworCWNvbnN0IHdjaGFyX3QqCXN0cjsKK307CisKK2V4dGVybiBjaGFyKiBsYW5ndWFnZTsKK2V4dGVybiBjaGFyKiBnZXR0ZXh0X2NoYXJzZXQ7CitleHRlcm4gY2hhciogdGVybV9jaGFyc2V0OworCitleHRlcm4gU3RyTGlzdCogc3RyX2xpc3RfY3JlYXRlIChjb25zdCBjaGFyKiBmaXJzdCwgLi4uKTsKK2V4dGVybiBTdHJMaXN0KiBzdHJfbGlzdF9jcmVhdGVfdW5pcXVlIChjb25zdCBjaGFyKiBmaXJzdCwgLi4uKTsKK2V4dGVybiB2b2lkIHN0cl9saXN0X2Rlc3Ryb3kgKFN0ckxpc3QqIGxpc3QpOworZXh0ZXJuIHZvaWQgc3RyX2xpc3RfZGVzdHJveV9ub2RlIChTdHJMaXN0KiBsaXN0KTsKKworZXh0ZXJuIFN0ckxpc3QqIHN0cl9saXN0X2R1cGxpY2F0ZSAoY29uc3QgU3RyTGlzdCogbGlzdCk7CitleHRlcm4gU3RyTGlzdCogc3RyX2xpc3RfZHVwbGljYXRlX25vZGUgKGNvbnN0IFN0ckxpc3QqIGxpc3QpOworZXh0ZXJuIFN0ckxpc3QqIHN0cl9saXN0X2luc2VydCAoU3RyTGlzdCogbGlzdCwgY29uc3QgY2hhciogc3RyKTsKK2V4dGVybiBTdHJMaXN0KiBzdHJfbGlzdF9hcHBlbmQgKFN0ckxpc3QqIGxpc3QsIGNvbnN0IGNoYXIqIHN0cik7CitleHRlcm4gU3RyTGlzdCogc3RyX2xpc3RfYXBwZW5kX3VuaXF1ZSAoU3RyTGlzdCogbGlzdCwgY29uc3QgY2hhciogc3RyKTsKK2V4dGVybiBTdHJMaXN0KiBzdHJfbGlzdF9qb2luIChTdHJMaXN0KiBhLCBTdHJMaXN0KiBiKTsKK2V4dGVybiBjaGFyKiBzdHJfbGlzdF9jb252ZXJ0IChjb25zdCBTdHJMaXN0KiBsaXN0KTsKK2V4dGVybiBjaGFyKiBzdHJfbGlzdF9jb252ZXJ0X25vZGUgKGNvbnN0IFN0ckxpc3QqIGxpc3QpOworCitleHRlcm4gdm9pZCBzdHJfbGlzdF9wcmludCAoY29uc3QgU3RyTGlzdCogbGlzdCk7CitleHRlcm4gdm9pZCBzdHJfbGlzdF9wcmludF93cmFwIChjb25zdCBTdHJMaXN0KiBsaXN0LCBpbnQgbGluZV9sZW5ndGgsCisJCQkJIGludCBvZmZzZXQsIGludCBpbmRlbnQpOworZXh0ZXJuIGludCBzdHJfbGlzdF9tYXRjaF9hbnkgKGNvbnN0IFN0ckxpc3QqIGxpc3QsIGNvbnN0IGNoYXIqIHN0cik7CitleHRlcm4gaW50IHN0cl9saXN0X21hdGNoX25vZGUgKGNvbnN0IFN0ckxpc3QqIGxpc3QsIGNvbnN0IGNoYXIqIHN0cik7CitleHRlcm4gU3RyTGlzdCogc3RyX2xpc3RfbWF0Y2ggKGNvbnN0IFN0ckxpc3QqIGxpc3QsIGNvbnN0IGNoYXIqIHN0cik7CisKK2V4dGVybiBpbnQgc3RyX2xpc3RfbGVuZ3RoIChjb25zdCBTdHJMaXN0KiBsaXN0KTsKKworI2VuZGlmIC8qIFNUUkxJU1RfSF9JTkNMVURFRCAqLworCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvcGFydGVkL3RhYmxlLmMgYi9wYXJ0ZWQtMS44LjcvcGFydGVkL3RhYmxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc2OGE5MgotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9wYXJ0ZWQvdGFibGUuYwpAQCAtMCwwICsxLDI0NiBAQAorLyoKKyAqIFRPRE86IC0gbWFrZSByaWdodCBhbmQgY2VudGVyZWQgYWxpZ25tZW50IHBvc3NpYmxlCisgKi8KKy8qCisgICAgcGFydGVkIC0gYSBmcm9udGVuZCB0byBsaWJwYXJ0ZWQKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCisqLworCisKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaWZkZWYgRU5BQkxFX05MUworIyAgICAgICBpbmNsdWRlIDx3Y2hhci5oPgorICAgICAgICBpbnQgd2Nzd2lkdGggKGNvbnN0IHdjaGFyX3QgKnMsIHNpemVfdCBuKTsKKyMJZGVmaW5lIExfKHN0cikgTCMjc3RyCisjZWxzZQorIwlkZWZpbmUgTF8oc3RyKSBzdHIKKyMgICAgICAgaWZkZWYgd2NoYXJfdAorIyAgICAgICAgICAgICAgIHVuZGVmIHdjaGFyX3QKKyMgICAgICAgZW5kaWYKKyMgICAgICAgaW5jbHVkZSA8c3RyaW5nLmg+CisjICAgICAgIGRlZmluZSB3Y2hhcl90IGNoYXIKKyMgICAgICAgZGVmaW5lIHdjc2xlbiBzdHJsZW4KKyMgICAgICAgZGVmaW5lIHdjc3dpZHRoIHN0cm5sZW4KKyMgICAgICAgZGVmaW5lIHdjc2NhdCBzdHJjYXQKKyMgICAgICAgZGVmaW5lIHdjc2R1cCBzdHJkdXAKKyAgICAgICAgc2l6ZV90IHN0cm5sZW4gKGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKKyNlbmRpZgorCisjaW5jbHVkZSAieGFsbG9jLmgiCisjaW5jbHVkZSAic3RybGlzdC5oIgorCisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgICAgICAgTUFYX1dJRFRIID0gNTEyOworc3RhdGljIGNvbnN0IHdjaGFyX3QqICAgICAgICAgICBERUxJTUlURVIgPSBMXygiICAiKTsKK3N0YXRpYyBjb25zdCB3Y2hhcl90KiAgICAgICAgICAgQ09MU1VGRklYID0gTF8oIlxuIik7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgICAgIHVuc2lnbmVkIGludCAgICBuY29sczsKKyAgICAgICAgdW5zaWduZWQgaW50ICAgIG5yb3dzOworICAgICAgICB3Y2hhcl90KioqICAgICAgcm93czsKKyAgICAgICAgaW50KiAgICAgICAgICAgIHdpZHRoczsKK30gVGFibGU7CisKKworVGFibGUqIHRhYmxlX25ldyhpbnQgbmNvbHMpCit7CisgICAgICAgIGFzc2VydCAoIG5jb2xzID49IDAgKTsKKyAgICAgICAgCisgICAgICAgIFRhYmxlICp0ID0gbWFsbG9jKHNpemVvZihUYWJsZSkpOworCisgICAgICAgIHQtPm5jb2xzID0gbmNvbHM7CisgICAgICAgIHQtPm5yb3dzID0gMDsKKyAgICAgICAgdC0+cm93cyA9ICh3Y2hhcl90KioqKU5VTEw7CisgICAgICAgIHQtPndpZHRocyA9IE5VTEw7CisgICAgICAgIAorICAgICAgICByZXR1cm4gdDsKK30KKworCit2b2lkIHRhYmxlX2Rlc3Ryb3kgKFRhYmxlKiB0KQoreworICAgICAgICB1bnNpZ25lZCBpbnQgciwgYzsKKyAgICAgICAgCisgICAgICAgIGFzc2VydCAodCk7CisgICAgICAgIGFzc2VydCAodC0+bmNvbHMgPiAwKTsKKyAgICAgICAgCisgICAgICAgIGZvciAociA9IDA7IHIgPCB0LT5ucm93czsgKytyKQorICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChjID0gMDsgYyA8IHQtPm5jb2xzOyArK2MpCisgICAgICAgICAgICAgICAgICAgICAgICBmcmVlICh0LT5yb3dzW3JdW2NdKTsKKyAgICAgICAgICAgICAgICBmcmVlICh0LT5yb3dzW3JdKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0LT5yb3dzKQorICAgICAgICAgICAgICAgIGZyZWUgKHQtPnJvd3MpOworCisgICAgICAgIGlmICh0LT53aWR0aHMpCisgICAgICAgICAgICAgICAgZnJlZSAodC0+d2lkdGhzKTsKKworICAgICAgICBmcmVlICh0KTsKK30KKworCitzdGF0aWMgaW50IG1heCAoaW50IHgsIGludCB5KQoreworICAgICAgICByZXR1cm4geCA+IHkgPyB4IDogeTsKK30KKworCitzdGF0aWMgdm9pZCB0YWJsZV9jYWxjX2NvbHVtbl93aWR0aHMgKFRhYmxlKiB0KQoreworICAgICAgICB1bnNpZ25lZCBpbnQgciwgYzsKKyAgICAgICAgCisgICAgICAgIGFzc2VydCh0KTsKKyAgICAgICAgYXNzZXJ0KHQtPm5jb2xzID4gMCk7CisgICAgICAgIAorICAgICAgICBpZiAoIXQtPndpZHRocykKKyAgICAgICAgICAgICAgICB0LT53aWR0aHMgPSAoaW50KiltYWxsb2ModC0+bmNvbHMgKiBzaXplb2YoaW50KSk7CisKKyAgICAgICAgZm9yIChjID0gMDsgYyA8IHQtPm5jb2xzOyArK2MpCisgICAgICAgICAgICAgICAgdC0+d2lkdGhzW2NdID0gMDsKKyAgICAgICAgCisgICAgICAgIGZvciAociA9IDA7IHIgPCB0LT5ucm93czsgKytyKQorICAgICAgICAgICAgICAgIGZvciAoYyA9IDA7IGMgPCB0LT5uY29sczsgKytjKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHQtPndpZHRoc1tjXSA9IG1heCAoIHQtPndpZHRoc1tjXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjc3dpZHRoKHQtPnJvd3Nbcl1bY10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQVhfV0lEVEgpICk7CisgICAgICAgICAgICAgICAgfQorfQorCisKKy8qIAorICogYWRkIGEgcm93IHdoaWNoIGlzIGEgc3RyaW5nIGFycmF5IG9mIG5jb2xzIGVsZW1lbnRzLgorICogJ3Jvdycgd2lsbCBnZXQgZnJlZWQgYnkgdGFibGVfZGVzdHJveTsgIHlvdSBtdXN0IG5vdCBmcmVlIGl0CisgKiB5b3Vyc2VsZi4KKyAqLwordm9pZCB0YWJsZV9hZGRfcm93IChUYWJsZSogdCwgd2NoYXJfdCoqIHJvdykKK3sKKyAgICAgICAgYXNzZXJ0KHQpOworCisgICAgICAgIC8qdW5zaWduZWQgaW50IGk7CisgICAgICAgIGZwdXRzICgiYWRkaW5nIHJvdzogIiwgc3Rkb3V0KTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHQtPm5jb2xzOyArK2kpCisgICAgICAgICAgICAgICAgcHJpbnRmKCJbJXNdIiwgcm93W2ldKTsKKyAgICAgICAgcHV0Y2hhciAoJ1xuJyk7Ki8KKworICAgICAgICB0LT5yb3dzID0gKHdjaGFyX3QqKiopcmVhbGxvYyAodC0+cm93cywgKHQtPm5yb3dzICsgMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogc2l6ZW9mKHdjaGFyX3QqKiopKTsKKyAgICAgICAgIAorICAgICAgICB0LT5yb3dzW3QtPm5yb3dzXSA9IHJvdzsKKworICAgICAgICArK3QtPm5yb3dzOworCisgICAgICAgIHRhYmxlX2NhbGNfY29sdW1uX3dpZHRocyAodCk7Cit9CisKKwordm9pZCB0YWJsZV9hZGRfcm93X2Zyb21fc3RybGlzdCAoVGFibGUqIHQsIFN0ckxpc3QqIGxpc3QpCit7CisgICAgICAgIHdjaGFyX3QqKiByb3cgPSAod2NoYXJfdCoqKW1hbGxvYyhzdHJfbGlzdF9sZW5ndGgobGlzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogc2l6ZW9mKHdjaGFyX3QqKikpOworICAgICAgICBpbnQgaSA9IDA7CisKKyAgICAgICAgd2hpbGUgKGxpc3QpCisgICAgICAgIHsKKyAgICAgICAgICAgICAgICByb3dbaV0gPSAod2NoYXJfdCopbGlzdC0+c3RyOworCisgICAgICAgICAgICAgICAgbGlzdCA9IGxpc3QtPm5leHQ7CisgICAgICAgICAgICAgICAgKytpOworICAgICAgICB9CisKKyAgICAgICAgdGFibGVfYWRkX3JvdyAodCwgcm93KTsKK30KKworCisvKiByZW5kZXIgYSByb3cgKi8KK3N0YXRpYyB2b2lkIHRhYmxlX3JlbmRlcl9yb3cgKFRhYmxlKiB0LCBpbnQgcm93bnVtLCBpbnQgbmNvbHMsIHdjaGFyX3QqKiBzKQoreworICAgICAgICB3Y2hhcl90Kiogcm93ID0gdC0+cm93c1tyb3dudW1dOworICAgICAgICBpbnQgbGVuID0gMSwgaTsKKyAgICAgICAgc2l6ZV90IG5ld3NpemU7CisKKyAgICAgICAgYXNzZXJ0KHQpOworICAgICAgICBhc3NlcnQocyAhPSBOVUxMKTsKKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbmNvbHM7ICsraSkKKyAgICAgICAgICAgICAgICBsZW4gKz0gdC0+d2lkdGhzW2ldICsgd2NzbGVuKERFTElNSVRFUik7CisKKyAgICAgICAgbGVuICs9IHdjc2xlbihDT0xTVUZGSVgpOworCisgICAgICAgIG5ld3NpemUgPSAod2NzbGVuKCpzKSArIGxlbiArIDEpICogc2l6ZW9mKHdjaGFyX3QpOworICAgICAgICAqcyA9IHhyZWFsbG9jICgqcywgbmV3c2l6ZSk7CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG5jb2xzOyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnQgajsKKyAgICAgICAgICAgICAgICBpbnQgbnNwYWNlcyA9IG1heCh0LT53aWR0aHNbaV0gLSB3Y3N3aWR0aChyb3dbaV0sIE1BWF9XSURUSCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7CisgICAgICAgICAgICAgICAgd2NoYXJfdCogcGFkID0geG1hbGxvYyAoKG5zcGFjZXMgKyAxKSAqIHNpemVvZih3Y2hhcl90KSk7CisKKyAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbnNwYWNlczsgKytqKQorICAgICAgICAgICAgICAgICAgICAgICBwYWRbal0gPSBMJyAnOyAKKworICAgICAgICAgICAgICAgIHBhZFtuc3BhY2VzXSA9IExfKCdcMCcpOworCisgICAgICAgICAgICAgICAgd2NzY2F0ICgqcywgcm93W2ldKTsKKyAgICAgICAgICAgICAgICB3Y3NjYXQgKCpzLCBwYWQpOworICAgICAgICAgICAgICAgIGlmIChpICsgMSA8IG5jb2xzKSAKKyAgICAgICAgICAgICAgICAgICAgICAgIHdjc2NhdCAoKnMsIERFTElNSVRFUik7CisKKyAgICAgICAgICAgICAgICBmcmVlIChwYWQpOworICAgICAgICAgICAgICAgIHBhZCA9IE5VTEw7CisgICAgICAgIH0KKworICAgICAgICB3Y3NjYXQgKCpzLCBDT0xTVUZGSVgpOworfQorCisKKy8qIAorICogUmVuZGVyIHRoZSByb3dzLgorICogXHAgcyBtdXN0IGJlIGEgbnVsbC10ZXJtaW5hdGVkIHN0cmluZy4KKyAqLworc3RhdGljIHZvaWQgdGFibGVfcmVuZGVyX3Jvd3MgKFRhYmxlKiB0LCB3Y2hhcl90KiogcykKK3sKKyAgICAgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICAgICAgYXNzZXJ0ICgqKnMgPT0gTF8oJ1wwJykpOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdC0+bnJvd3M7ICsraSkKKyAgICAgICAgICAgICAgICB0YWJsZV9yZW5kZXJfcm93ICh0LCBpLCB0LT5uY29scywgcyk7Cit9CisKKy8qIAorICogUmVuZGVyIHRoZSB0YWJsZSB0byBhIHN0cmluZy4KKyAqIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgdGhlIHJldHVybmVkIHN0cmluZy4KKyAqLword2NoYXJfdCogdGFibGVfcmVuZGVyKFRhYmxlKiB0KQoreworICAgICAgICB3Y2hhcl90KiBzID0gbWFsbG9jKHNpemVvZih3Y2hhcl90KSk7CisKKyAgICAgICAgKnMgPSBMXygnXDAnKTsKKyAgICAgICAgdGFibGVfcmVuZGVyX3Jvd3MgKHQsICZzKTsKKyAgICAgICAgcmV0dXJuIHM7Cit9CmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvcGFydGVkL3RhYmxlLmggYi9wYXJ0ZWQtMS44LjcvcGFydGVkL3RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQyM2E5ZQotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9wYXJ0ZWQvdGFibGUuaApAQCAtMCwwICsxLDU1IEBACisvKgorICAgIHBhcnRlZCAtIGEgZnJvbnRlbmQgdG8gbGlicGFydGVkCisgICAgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQorKi8KKworI2luY2x1ZGUgPHdjaGFyLmg+CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKyNpbmNsdWRlICJzdHJsaXN0LmgiCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworI2lmZGVmIEVOQUJMRV9OTFMKKyMgICAgICAgaW5jbHVkZSA8d2NoYXIuaD4KKyNlbHNlCisjICAgICAgIGlmZGVmIHdjaGFyX3QKKyMgICAgICAgICAgICAgICB1bmRlZiB3Y2hhcl90CisjICAgICAgIGVuZGlmCisjICAgICAgIGRlZmluZSB3Y2hhcl90IGNoYXIKKyNlbmRpZgorCisKKy8qIG9wYXF1ZSBkYXRhIHR5cGUgKi8KK3R5cGVkZWYgdm9pZCBUYWJsZTsKKworVGFibGUqIHRhYmxlX25ldyhpbnQgbmNvbHMpOwordm9pZCB0YWJsZV9kZXN0cm95IChUYWJsZSogdCk7CisKKy8qIAorICogeW91IG11c3Qgbm90IGZyZWUgbmVpdGhlciAncm93JyBub3IgJ2xpc3QnCisgKiAgICAgIC0tIHRoaXMgd2lsbCBiZSBkb25lIGJ5IHRhYmxlX2Rlc3Ryb3koKQorICovCit2b2lkIHRhYmxlX2FkZF9yb3cgKFRhYmxlKiB0LCB3Y2hhcl90Kiogcm93KTsKK3ZvaWQgdGFibGVfYWRkX3Jvd19mcm9tX3N0cmxpc3QgKFRhYmxlKiB0LCBTdHJMaXN0KiBsaXN0KTsKKyAgICAgICAgCit3Y2hhcl90KiB0YWJsZV9yZW5kZXIoVGFibGUqIHQpOworCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvcGFydGVkL3VpLmMgYi9wYXJ0ZWQtMS44LjcvcGFydGVkL3VpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmIzMTFlMgotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9wYXJ0ZWQvdWkuYwpAQCAtMCwwICsxLDE1MzIgQEAKKy8qCisgICAgcGFydGVkIC0gYSBmcm9udGVuZCB0byBsaWJwYXJ0ZWQKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcKKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKKyovCisKKyNpbmNsdWRlIDxwYXJ0ZWQvcGFydGVkLmg+CisjaW5jbHVkZSA8cGFydGVkL2RlYnVnLmg+CisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHNldGptcC5oPgorCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSAiY29tbWFuZC5oIgorI2luY2x1ZGUgInN0cmxpc3QuaCIKKyNpbmNsdWRlICJ1aS5oIgorCisjZGVmaW5lIE5fKFN0cmluZykgU3RyaW5nCisjaWYgRU5BQkxFX05MUworIyAgaW5jbHVkZSA8bGliaW50bC5oPgorIyAgaW5jbHVkZSA8bG9jYWxlLmg+CisjICBkZWZpbmUgXyhTdHJpbmcpIGRnZXR0ZXh0IChQQUNLQUdFLCBTdHJpbmcpCisjZWxzZQorIyAgZGVmaW5lIF8oU3RyaW5nKSAoU3RyaW5nKQorI2VuZGlmIC8qIEVOQUJMRV9OTFMgKi8KKworI2lmZGVmIEhBVkVfTElCUkVBRExJTkUKKworI2lmZGVmIEhBVkVfVEVSTUNBUF9ICisjaW5jbHVkZSA8dGVybWNhcC5oPgorI2Vsc2UKK2V4dGVybiBpbnQgdGdldG51bSAoY2hhcioga2V5KTsKKyNlbmRpZgorCisjaW5jbHVkZSA8cmVhZGxpbmUvcmVhZGxpbmUuaD4KKyNpbmNsdWRlIDxyZWFkbGluZS9oaXN0b3J5Lmg+CisKKyNpZm5kZWYgSEFWRV9STF9DT01QTEVUSU9OX01BVENIRVMKKyNkZWZpbmUgcmxfY29tcGxldGlvbl9tYXRjaGVzIGNvbXBsZXRpb25fbWF0Y2hlcworI2VuZGlmCisKKyNpZm5kZWYgcmxfY29tcGVudHJ5X2Z1bmNfdAorI2RlZmluZSBybF9jb21wZW50cnlfZnVuY190IHZvaWQKKyNlbmRpZgorCisjZW5kaWYgLyogSEFWRV9MSUJSRUFETElORSAqLworCisjaWZuZGVmIFNBX1NJR0lORk8KKyMgIGlmbmRlZiBIQVZFX1NJR0FDVElPTgorCitzdHJ1Y3Qgc2lnYWN0aW9uIHsKK307CisKK3N0YXRpYyBpbmxpbmUgaW50CitzaWdhY3Rpb24gKGludCBzaWdudW0sIGNvbnN0IHN0cnVjdCogc2lnYWN0aW9uLCBzdHJ1Y3QqIHNpZ2FjdGlvbikKK3sKK30KKworIyAgZW5kaWYgLyogSEFWRV9TSUdBQ1RPTiAqLworCitzdHJ1Y3Qgc2lnaW5mb190IHsKKyAgICAgICAgaW50IHNpX2NvZGU7Cit9OworCisjZW5kaWYgLyogU0FfU0lHSU5GTyAqLworCisjaWZuZGVmIFNFR1ZfTUFQRVJSCisjICBkZWZpbmUgU0VHVl9NQVBFUlIgKElOVE1BWCAtIDEpCisjZW5kaWYKKworI2lmbmRlZiBTRUdWX0FDQ0VSUgorIyAgZGVmaW5lIFNFR1ZfQUNDRVJSIChJTlRNQVggLSAyKQorI2VuZGlmCisKKyNpZm5kZWYgRlBFX0lOVERJVgorIyAgZGVmaW5lIEZQRV9JTlRESVYgKElOVE1BWCAtIDEpCisjZW5kaWYKKworI2lmbmRlZiBGUEVfSU5UT1ZGCisjICBkZWZpbmUgRlBFX0lOVE9WRiAoSU5UTUFYIC0gMikKKyNlbmRpZgorCisjaWZuZGVmIEZQRV9GTFRESVYKKyMgIGRlZmluZSBGUEVfRkxURElWIChJTlRNQVggLSAzKQorI2VuZGlmCisKKyNpZm5kZWYgRlBFX0ZMVE9WRgorIyAgZGVmaW5lIEZQRV9GTFRPVkYgKElOVE1BWCAtIDQpCisjZW5kaWYKKworI2lmbmRlZiBGUEVfRkxUVU5ECisjICBkZWZpbmUgRlBFX0ZMVFVORCAoSU5UTUFYIC0gNSkKKyNlbmRpZgorCisjaWZuZGVmIEZQRV9GTFRSRVMKKyMgIGRlZmluZSBGUEVfRkxUUkVTIChJTlRNQVggLSA2KQorI2VuZGlmCisKKyNpZm5kZWYgRlBFX0ZMVElOVgorIyAgZGVmaW5lIEZQRV9GTFRJTlYgKElOVE1BWCAtIDcpCisjZW5kaWYKKworI2lmbmRlZiBGUEVfRkxUU1VCCisjICBkZWZpbmUgRlBFX0ZMVFNVQiAoSU5UTUFYIC0gOCkKKyNlbmRpZgorCisjaWZuZGVmIElMTF9JTExPUEMKKyMgIGRlZmluZSBJTExfSUxMT1BDIChJTlRNQVggLSAxKQorI2VuZGlmCisKKyNpZm5kZWYgSUxMX0lMTE9QTgorIyAgZGVmaW5lIElMTF9JTExPUE4gKElOVE1BWCAtIDIpCisjZW5kaWYKKworI2lmbmRlZiBJTExfSUxMQURSCisjICBkZWZpbmUgSUxMX0lMTEFEUiAoSU5UTUFYIC0gMykKKyNlbmRpZgorCisjaWZuZGVmIElMTF9JTExUUlAKKyMgIGRlZmluZSBJTExfSUxMVFJQIChJTlRNQVggLSA0KQorI2VuZGlmCisKKyNpZm5kZWYgSUxMX1BSVk9QQworIyAgZGVmaW5lIElMTF9QUlZPUEMgKElOVE1BWCAtIDUpCisjZW5kaWYKKworI2lmbmRlZiBJTExfUFJWUkVHCisjICBkZWZpbmUgSUxMX1BSVlJFRyAoSU5UTUFYIC0gNikKKyNlbmRpZgorCisjaWZuZGVmIElMTF9DT1BST0MKKyMgIGRlZmluZSBJTExfQ09QUk9DIChJTlRNQVggLSA3KQorI2VuZGlmCisKKyNpZm5kZWYgSUxMX0JBRFNUSworIyAgZGVmaW5lIElMTF9CQURTVEsgKElOVE1BWCAtIDgpCisjZW5kaWYKKworY2hhciogcHJvZ19uYW1lID0gIkdOVSBQYXJ0ZWQgIiBWRVJTSU9OICJcbiI7CisKK3N0YXRpYyBjaGFyKiBiYW5uZXJfbXNnID0gTl8oCisiV2VsY29tZSB0byBHTlUgUGFydGVkISBUeXBlICdoZWxwJyB0byB2aWV3IGEgbGlzdCBvZiBjb21tYW5kcy5cbiIpOworCitzdGF0aWMgY2hhciogdXNhZ2VfbXNnID0gTl8oCisiVXNhZ2U6IHBhcnRlZCBbT1BUSU9OXS4uLiBbREVWSUNFIFtDT01NQU5EIFtQQVJBTUVURVJTXS4uLl0uLi5dXG4iCisiQXBwbHkgQ09NTUFORHMgd2l0aCBQQVJBTUVURVJTIHRvIERFVklDRS4gIElmIG5vIENPTU1BTkQocykgYXJlIGdpdmVuLCAiCisicnVuIGluXG5pbnRlcmFjdGl2ZSBtb2RlLlxuIik7CisKK3N0YXRpYyBjaGFyKiBidWdfbXNnID0gTl8oCisiXG5cbllvdSBmb3VuZCBhIGJ1ZyBpbiBHTlUgUGFydGVkISBIZXJlJ3Mgd2hhdCB5b3UgaGF2ZSB0byBkbzpcblxuIgorIkRvbid0IHBhbmljISBUaGUgYnVnIGhhcyBtb3N0IGxpa2VseSBub3QgYWZmZWN0ZWQgYW55IG9mIHlvdXIgZGF0YS5cbiIKKyJIZWxwIHVzIHRvIGZpeCB0aGlzIGJ1ZyBieSBkb2luZyB0aGUgZm9sbG93aW5nOlxuXG4iCisiQ2hlY2sgd2hldGhlciB0aGUgYnVnIGhhcyBhbHJlYWR5IGJlZW4gZml4ZWQgYnkgY2hlY2tpbmdcbiIKKyJ0aGUgbGFzdCB2ZXJzaW9uIG9mIEdOVSBQYXJ0ZWQgdGhhdCB5b3UgY2FuIGZpbmQgYXQ6XG5cbiIKKyJcdGh0dHA6Ly9mdHAuZ251Lm9yZy9nbnUvcGFydGVkL1xuXG4iCisiUGxlYXNlIGNoZWNrIHRoaXMgdmVyc2lvbiBwcmlvciB0byBidWcgcmVwb3J0aW5nLlxuXG4iCisiSWYgdGhpcyBoYXMgbm90IGJlZW4gZml4ZWQgeWV0IG9yIGlmIHlvdSBkb24ndCBrbm93IGhvdyB0byBjaGVjayxcbiIKKyJwbGVhc2UgdmlzaXQgdGhlIEdOVSBQYXJ0ZWQgd2Vic2l0ZTpcblxuIgorIlx0aHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3BhcnRlZFxuXG4iCisiZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uXG5cbiIKKyJZb3VyIHJlcG9ydCBzaG91bGQgY29udGFpbiB0aGUgdmVyc2lvbiBvZiB0aGlzIHJlbGVhc2UgKCVzKVxuIgorImFsb25nIHdpdGggdGhlIGVycm9yIG1lc3NhZ2UgYmVsb3csIHRoZSBvdXRwdXQgb2ZcblxuIgorIlx0cGFydGVkIERFVklDRSB1bml0IGNvIHByaW50IHVuaXQgcyBwcmludFxuXG4iCisiYW5kIHRoZSBmb2xsb3dpbmcgaGlzdG9yeSBvZiBjb21tYW5kcyB5b3UgZW50ZXJlZC5cbiIKKyJBbHNvIGluY2x1ZGUgYW55IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgeW91ciBzZXR1cCB5b3VcbiIKKyJjb25zaWRlciBpbXBvcnRhbnQuXG4iKTsKKworI2RlZmluZSBNQVhfV09SRFMgICAgMTAyNAorCitzdGF0aWMgU3RyTGlzdCogICAgIGNvbW1hbmRfbGluZTsKK3N0YXRpYyBDb21tYW5kKiogICAgY29tbWFuZHM7CitzdGF0aWMgU3RyTGlzdCogICAgIGV4X29wdF9zdHIgWzY0XTsKK3N0YXRpYyBTdHJMaXN0KiAgICAgb25fbGlzdDsKK3N0YXRpYyBTdHJMaXN0KiAgICAgb2ZmX2xpc3Q7CitzdGF0aWMgU3RyTGlzdCogICAgIG9uX29mZl9saXN0Oworc3RhdGljIFN0ckxpc3QqICAgICBmc190eXBlX2xpc3Q7CitzdGF0aWMgU3RyTGlzdCogICAgIGRpc2tfdHlwZV9saXN0OworCitzdGF0aWMgc3RydWN0IHsKKyAgICAgICAgY29uc3QgU3RyTGlzdCogICAgcG9zc2liaWxpdGllczsKKyAgICAgICAgY29uc3QgU3RyTGlzdCogICAgY3VyX3BvczsKKyAgICAgICAgaW50ICAgICAgICAgICAgICAgaW5fcmVhZGxpbmU7CisgICAgICAgIHNpZ2ptcF9idWYgICAgICAgIGptcF9zdGF0ZTsKK30gcmVhZGxpbmVfc3RhdGU7CisKK3N0YXRpYyBzdHJ1Y3Qgc2lnYWN0aW9uICAgIHNpZ19zZWd2Oworc3RhdGljIHN0cnVjdCBzaWdhY3Rpb24gICAgc2lnX2ludDsKK3N0YXRpYyBzdHJ1Y3Qgc2lnYWN0aW9uICAgIHNpZ19mcGU7CitzdGF0aWMgc3RydWN0IHNpZ2FjdGlvbiAgICBzaWdfaWxsOworCit2b2xhdGlsZSBpbnQgZ290X2N0cmxfYyA9IDA7ICAgIC8qIHVzZWQgaW4gZXhjZXB0aW9uX2hhbmRsZXIgKi8KKworaW50CitzY3JlZW5fd2lkdGggKCkKK3sKKyAgICAgICAgaW50ICAgIHdpZHRoID0gMDsKKworICAgICAgICBpZiAob3B0X3NjcmlwdF9tb2RlIHx8IHByZXRlbmRfaW5wdXRfdHR5KQorICAgICAgICAgICAgICAgIHJldHVybiAzMjc2ODsgICAgLyogbm8gd3JhcHBpbmcgOykgKi8KKworLyogSEFDSzogZG9uJ3Qgc3BlY2lmeSB0ZXJtY2FwIHNlcGFyYXRlbHkgLSBpdCdsbCBhbm5veSB0aGUgdXNlcnMuICovCisjaWZkZWYgSEFWRV9MSUJSRUFETElORQorICAgICAgICB3aWR0aCA9IHRnZXRudW0gKCJjbyIpOworI2VuZGlmCisKKyAgICAgICAgaWYgKHdpZHRoIDw9IDApCisgICAgICAgICAgICAgICAgd2lkdGggPSA4MDsKKworICAgICAgICByZXR1cm4gd2lkdGg7Cit9CisKK3ZvaWQKK3dpcGVfbGluZSAoKQoreworICAgICAgICBpZiAob3B0X3NjcmlwdF9tb2RlKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvKiB5dWNrICovCisgICAgICAgIGZwdXRzICgiXHIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIgorICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcciIsIHN0ZG91dCk7Cit9CisKKyNpZmRlZiBIQVZFX0xJQlJFQURMSU5FCisvKiByZXR1cm5zIG1hdGNoaW5nIGNvbW1hbmRzIGZvciB0ZXh0ICovCitzdGF0aWMgY2hhcioKK2NvbW1hbmRfZ2VuZXJhdG9yIChjaGFyKiB0ZXh0LCBpbnQgc3RhdGUpCit7CisgICAgICAgIGlmICghc3RhdGUpCisgICAgICAgICAgICAgICAgcmVhZGxpbmVfc3RhdGUuY3VyX3BvcyA9IHJlYWRsaW5lX3N0YXRlLnBvc3NpYmlsaXRpZXM7CisKKyAgICAgICAgd2hpbGUgKHJlYWRsaW5lX3N0YXRlLmN1cl9wb3MpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBTdHJMaXN0KiAgICBjdXIgPSByZWFkbGluZV9zdGF0ZS5jdXJfcG9zOworICAgICAgICAgICAgICAgIHJlYWRsaW5lX3N0YXRlLmN1cl9wb3MgPSBjdXItPm5leHQ7CisgICAgICAgICAgICAgICAgaWYgKHN0cl9saXN0X21hdGNoX25vZGUgKGN1ciwgdGV4dCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyX2xpc3RfY29udmVydF9ub2RlIChjdXIpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIGNvbXBsZXRpb24gZnVuY3Rpb24gZm9yIHJlYWRsaW5lKCkgKi8KK2NoYXIqKgorY29tcGxldGVfZnVuY3Rpb24gKGNoYXIqIHRleHQsIGludCBzdGFydCwgaW50IGVuZCkKK3sKKyAgICAgICAgcmV0dXJuIHJsX2NvbXBsZXRpb25fbWF0Y2hlcyAodGV4dCwKKyAgICAgICAgICAgICAgICAocmxfY29tcGVudHJ5X2Z1bmNfdCopIGNvbW1hbmRfZ2VuZXJhdG9yKTsKK30KKworc3RhdGljIHZvaWQKK19hZGRfaGlzdG9yeV91bmlxdWUgKGNvbnN0IGNoYXIqIGxpbmUpCit7CisgICAgICAgIEhJU1RfRU5UUlkqICAgIGxhc3RfZW50cnkgPSBjdXJyZW50X2hpc3RvcnkgKCk7CisgICAgICAgIGlmICghc3RybGVuIChsaW5lKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICghbGFzdF9lbnRyeSB8fCBzdHJjbXAgKGxhc3RfZW50cnktPmxpbmUsIGxpbmUpKQorICAgICAgICAgICAgICAgIGFkZF9oaXN0b3J5ICgoY2hhciopIGxpbmUpOworfQorCisvKiBQcmludHMgY29tbWFuZCBoaXN0b3J5LCB0byBiZSB1c2VkIGJlZm9yZSBhYm9ydGluZyAqLworc3RhdGljIHZvaWQKK19kdW1wX2hpc3RvcnkgKCkKK3sKKyAgICAgICAgaW50ICAgICAgICAgICAgIGkgPSAwOworICAgICAgICBISVNUX0VOVFJZKiogICAgYWxsX2VudHJpZXMgPSBoaXN0b3J5X2xpc3QgKCk7CisKKyAgICAgICAgZnB1dHMgKF8oIlxuQ29tbWFuZCBIaXN0b3J5OlxuIiksIHN0ZG91dCk7CisgICAgICAgIHdoaWxlIChhbGxfZW50cmllc1tpXSkgeworICAgICAgICAgICAgICAgIHB1dHMoYWxsX2VudHJpZXNbaSsrXS0+bGluZSk7CisgICAgICAgIH0KK30KKworI2Vsc2UKKworLyogUHJpbnQgbm90aGluZyBiZWNhdXNlIFJlYWRsaW5lIGlzIGFic2VudC4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorX2R1bXBfaGlzdG9yeSAodm9pZCkKK3sKK30KKworI2VuZGlmIC8qIEhBVkVfTElCUkVBRExJTkUgKi8KKworc3RhdGljIHZvaWQKK21hc2tfc2lnbmFsKCkKK3sKKyAgICAgICAgc2lnc2V0X3QgICAgY3VycjsKKyAgICAgICAgc2lnc2V0X3QgICAgcHJldjsKKyAgCisgICAgICAgIHNpZ2ZpbGxzZXQoJmN1cnIpOworICAgICAgICBzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJmN1cnIsICZwcmV2KTsKK30KKworLyogUmVzZXRzIHRoZSBlbnZpcm9ubWVudCBieSBqdW1waW5nIHRvIHRoZSBpbml0aWFsIHN0YXRlCisgKiBzYXZlZCBkdXJpbmcgdWkgaW50aXRpYWxpc2F0aW9uLgorICogUGFzcyAxIGFzIHRoZSBwYXJhbWV0ZXIgaWYgeW91IHdhbnQgdG8gcXVpdCBwYXJ0ZWQsIAorICogMCBpZiB5b3UganVzdCB3YW50IHRvIHJlc2V0IHRvIHRoZSBjb21tYW5kIHByb21wdC4KKyAqLworc3RhdGljIHZvaWQKK3Jlc2V0X2VudiAoaW50IHF1aXQpCit7CisgICAgICAgIGludCAgICBpbl9yZWFkbGluZSA9IHJlYWRsaW5lX3N0YXRlLmluX3JlYWRsaW5lOworCisgICAgICAgIHJlYWRsaW5lX3N0YXRlLmluX3JlYWRsaW5lID0gMDsKKyAgICAgICAgCisgICAgICAgIGlmIChpbl9yZWFkbGluZSkgeworICAgICAgICAgICAgICAgIHB1dGNoYXIgKCdcbicpOworICAgICAgICAgICAgICAgIGlmIChxdWl0KSAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQgKDApOworCisgICAgICAgICAgICAgICAgc2lnbG9uZ2ptcCAocmVhZGxpbmVfc3RhdGUuam1wX3N0YXRlLCAxKTsKKyAgICAgICAgfQorfQorCisvKiBTaWduYWwgaGFuZGxlciBmb3IgU0lHSU5UIHVzaW5nICdzaWdhY3Rpb24nLiAqLworc3RhdGljIHZvaWQKK3NhX3NpZ2ludF9oYW5kbGVyIChpbnQgc2lnbnVtLCBzaWdpbmZvX3QqIGluZm8sIHZvaWQgKnVjb250ZXh0KQoreworICAgICAgICBpZiAoaW5mbykKKyAgICAgICAgICAgICAgICBzaWdhY3Rpb24gKFNJR0lOVCwgJnNpZ19pbnQsIE5VTEwpOworCisgICAgICAgIGdvdF9jdHJsX2MgPSAxOworICAgICAgICByZXNldF9lbnYgKDApOworfQorCisvKiBTaWduYWwgaGFuZGxlciBmb3IgU0lHSU5UIHVzaW5nICdzaWduYWwnLiAqLworc3RhdGljIHZvaWQKK3Nfc2lnaW50X2hhbmRsZXIgKGludCBzaWdudW0pCit7CisgICAgICAgIHNpZ25hbCAoU0lHSU5ULCAmc19zaWdpbnRfaGFuZGxlcik7CisgICAgICAgIG1hc2tfc2lnbmFsICgpOworICAgICAgICBzYV9zaWdpbnRfaGFuZGxlciAoc2lnbnVtLCBOVUxMLCBOVUxMKTsKK30KKworLyogU2lnbmFsIGhhbmRsZXIgZm9yIFNJR1NFR1YgdXNpbmcgJ3NpZ2FjdGlvbicuICovCitzdGF0aWMgdm9pZAorc2Ffc2lnc2Vndl9oYW5kbGVyIChpbnQgc2lnbnVtLCBzaWdpbmZvX3QqIGluZm8sIHZvaWQqIHVjb250ZXh0KQoreworICAgICAgICBwcmludGYgKGJ1Z19tc2csIFZFUlNJT04pOworICAgICAgICBfZHVtcF9oaXN0b3J5ICgpOworCisgICAgICAgIGlmICghaW5mbykKKyAgICAgICAgICAgICAgICBhYm9ydCAoKTsKKworICAgICAgICBzaWdhY3Rpb24gKFNJR1NFR1YsICZzaWdfc2VndiwgTlVMTCk7CisKKyAgICAgICAgc3dpdGNoIChpbmZvLT5zaV9jb2RlKSB7CisKKyAgICAgICAgICAgICAgICBjYXNlIFNFR1ZfTUFQRVJSOgorICAgICAgICAgICAgICAgICAgICAgICAgZnB1dHMoXygiXG5FcnJvcjogU0VHVl9NQVBFUlIgKEFkZHJlc3Mgbm90IG1hcHBlZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0byBvYmplY3QpXG4iKSwgc3Rkb3V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFBFRF9BU1NFUlQoMCwgYnJlYWspOyAvKiBGb3JjZSBhIGJhY2t0cmFjZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFNFR1ZfQUNDRVJSOgorICAgICAgICAgICAgICAgICAgICAgICAgZnB1dHMoXygiXG5FcnJvcjogU0VHVl9BQ0NFUlIgKEludmFsaWQgcGVybWlzc2lvbnMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9yIG1hcHBlZCBvYmplY3QpXG4iKSwgc3Rkb3V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZwdXRzKF8oIlxuRXJyb3I6IEEgZ2VuZXJhbCBTSUdTRUdWIHNpZ25hbCB3YXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZW5jb3VudGVyZWQuXG4iKSwgc3Rkb3V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFBFRF9BU1NFUlQoMCwgYnJlYWspOyAvKiBGb3JjZSBhIGJhY2t0cmFjZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBhYm9ydCAoKTsKK30KKworLyogU2lnbmFsIGhhbmRsZXIgZm9yIFNJR1NFR1YgdXNpbmcgJ3NpZ25hbCcuICovCitzdGF0aWMgdm9pZAorc19zaWdzZWd2X2hhbmRsZXIgKGludCBzaWdudW0pCit7CisgICAgICAgIHNpZ25hbCAoU0lHU0VHViwgJnNfc2lnc2Vndl9oYW5kbGVyKTsKKyAgICAgICAgbWFza19zaWduYWwgKCk7CisgICAgICAgIHNhX3NpZ3NlZ3ZfaGFuZGxlciAoc2lnbnVtLCBOVUxMLCBOVUxMKTsKK30KKworLyogU2lnbmFsIGhhbmRsZXIgZm9yIFNJR0ZQRSB1c2luZyAnc2lnYWN0aW9uJy4gKi8KK3N0YXRpYyB2b2lkCitzYV9zaWdmcGVfaGFuZGxlciAoaW50IHNpZ251bSwgc2lnaW5mb190KiBpbmZvLCB2b2lkKiB1Y29udGV4dCkKK3sKKyAgICAgICAgcHJpbnRmIChidWdfbXNnLCBWRVJTSU9OKTsKKyAgICAgICAgX2R1bXBfaGlzdG9yeSAoKTsKKworICAgICAgICBpZiAoIWluZm8pCisgICAgICAgICAgICAgICAgYWJvcnQgKCk7CisKKyAgICAgICAgc2lnYWN0aW9uIChTSUdGUEUsICZzaWdfZnBlLCBOVUxMKTsKKworICAgICAgICBzd2l0Y2ggKGluZm8tPnNpX2NvZGUpIHsKKworICAgICAgICAgICAgICAgIGNhc2UgRlBFX0lOVERJVjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZwdXRzKF8oIlxuRXJyb3I6IEZQRV9JTlRESVYgKEludGVnZXI6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRpdmlkZSBieSB6ZXJvKSIpLCBzdGRvdXQpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgRlBFX0lOVE9WRjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZwdXRzKF8oIlxuRXJyb3I6IEZQRV9JTlRPVkYgKEludGVnZXI6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm92ZXJmbG93KSIpLCBzdGRvdXQpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgRlBFX0ZMVERJVjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZwdXRzKF8oIlxuRXJyb3I6IEZQRV9GTFRESVYgKEZsb2F0OiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaXZpZGUgYnkgemVybykiKSwgc3Rkb3V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBGUEVfRkxUT1ZGOgorICAgICAgICAgICAgICAgICAgICAgICAgZnB1dHMoXygiXG5FcnJvcjogRlBFX0ZMVE9WRiAoRmxvYXQ6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm92ZXJmbG93KSIpLCBzdGRvdXQpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIEZQRV9GTFRVTkQ6CisgICAgICAgICAgICAgICAgICAgICAgICBmcHV0cyhfKCJcbkVycm9yOiBGUEVfRkxUVU5EIChGbG9hdDogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5kZXJmbG93KSIpLCBzdGRvdXQpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIEZQRV9GTFRSRVM6CisgICAgICAgICAgICAgICAgICAgICAgICBmcHV0cyhfKCJcbkVycm9yOiBGUEVfRkxUUkVTIChGbG9hdDogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5leGFjdCByZXN1bHQpIiksIHN0ZG91dCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgRlBFX0ZMVElOVjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZwdXRzKF8oIlxuRXJyb3I6IEZQRV9GTFRJTlYgKEZsb2F0OiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIG9wZXJhdGlvbikiKSwgc3Rkb3V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBGUEVfRkxUU1VCOgorICAgICAgICAgICAgICAgICAgICAgICAgZnB1dHMoXygiXG5FcnJvcjogRlBFX0ZMVFNVQiAoRmxvYXQ6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YnNjcmlwdCBvdXQgb2YgcmFuZ2UpIiksIHN0ZG91dCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBmcHV0cyhfKCJcbkVycm9yOiBBIGdlbmVyYWwgU0lHRlBFIHNpZ25hbCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3YXMgZW5jb3VudGVyZWQuIiksIHN0ZG91dCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICB9CisKKyAgICAgICAgYWJvcnQgKCk7Cit9CisKKy8qIFNpZ25hbCBoYW5kbGVyIGZvciBTSUdGUEUgdXNpbmcgJ3NpZ25hbCcuICovCitzdGF0aWMgdm9pZAorc19zaWdmcGVfaGFuZGxlciAoaW50IHNpZ251bSkKK3sKKyAgICAgICAgc2lnbmFsIChTSUdGUEUsICZzX3NpZ2ZwZV9oYW5kbGVyKTsKKyAgICAgICAgbWFza19zaWduYWwgKCk7CisgICAgICAgIHNhX3NpZ2ZwZV9oYW5kbGVyIChzaWdudW0sIE5VTEwsIE5VTEwpOworfQorCisvKiBTaWduYWwgaGFuZGxlciBmb3IgU0lHSUxMIHVzaW5nICdzaWdhY3Rpb24nLiAqLworc3RhdGljIHZvaWQKK3NhX3NpZ2lsbF9oYW5kbGVyIChpbnQgc2lnbnVtLCBzaWdpbmZvX3QqIGluZm8sIHZvaWQqIHVjb250ZXh0KQoreworICAgICAgICBwcmludGYgKGJ1Z19tc2csIFZFUlNJT04pOworICAgICAgICBfZHVtcF9oaXN0b3J5ICgpOworCisgICAgICAgIGlmICghaW5mbykKKyAgICAgICAgICAgICAgICBhYm9ydCgpOworCisgICAgICAgIHNpZ2FjdGlvbiAoU0lHSUxMLCAmc2lnX2lsbCwgTlVMTCk7CisKKyAgICAgICAgc3dpdGNoIChpbmZvLT5zaV9jb2RlKSB7CisKKyAgICAgICAgICAgICAgICBjYXNlIElMTF9JTExPUEM6CisgICAgICAgICAgICAgICAgICAgICAgICBmcHV0cyhfKCJcbkVycm9yOiBJTExfSUxMT1BDICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihJbGxlZ2FsIE9wY29kZSkiKSwgc3Rkb3V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBJTExfSUxMT1BOOgorICAgICAgICAgICAgICAgICAgICAgICAgZnB1dHMoXygiXG5FcnJvcjogSUxMX0lMTE9QTiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoSWxsZWdhbCBPcGVyYW5kKSIpLCBzdGRvdXQpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIElMTF9JTExBRFI6CisgICAgICAgICAgICAgICAgICAgICAgICBmcHV0cyhfKCJcbkVycm9yOiBJTExfSUxMQURSICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihJbGxlZ2FsIGFkZHJlc3NpbmcgbW9kZSkiKSwgc3Rkb3V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBJTExfSUxMVFJQOgorICAgICAgICAgICAgICAgICAgICAgICAgZnB1dHMoXygiXG5FcnJvcjogSUxMX0lMTFRSUCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoSWxsZWdhbCBUcmFwKSIpLCBzdGRvdXQpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIElMTF9QUlZPUEM6CisgICAgICAgICAgICAgICAgICAgICAgICBmcHV0cyhfKCJcbkVycm9yOiBJTExfUFJWT1BDICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihQcml2aWxlZ2VkIE9wY29kZSkiKSwgc3Rkb3V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBJTExfUFJWUkVHOgorICAgICAgICAgICAgICAgICAgICAgICAgZnB1dHMoXygiXG5FcnJvcjogSUxMX1BSVlJFRyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoUHJpdmlsZWdlZCBSZWdpc3RlcikiKSwgc3Rkb3V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBJTExfQ09QUk9DOgorICAgICAgICAgICAgICAgICAgICAgICAgZnB1dHMoXygiXG5FcnJvcjogSUxMX0NPUFJPQyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoQ29wcm9jZXNzb3IgRXJyb3IpIiksIHN0ZG91dCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgSUxMX0JBRFNUSzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZwdXRzKF8oIlxuRXJyb3I6IElMTF9CQURTVEsgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKEludGVybmFsIFN0YWNrIEVycm9yKSIpLCBzdGRvdXQpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgZnB1dHMoXygiXG5FcnJvcjogQSBnZW5lcmFsIFNJR0lMTCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzaWduYWwgd2FzIGVuY291bnRlcmVkLiIpLCBzdGRvdXQpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgIAorICAgICAgICBhYm9ydCAoKTsKK30KKworLyogU2lnbmFsIGhhbmRsZXIgZm9yIFNJR0lMTCB1c2luZyAnc2lnbmFsJy4gKi8KK3N0YXRpYyB2b2lkCitzX3NpZ2lsbF9oYW5kbGVyIChpbnQgc2lnbnVtKQoreworICAgICAgICBzaWduYWwgKFNJR0lMTCwgJnNfc2lnaWxsX2hhbmRsZXIpOworICAgICAgICBtYXNrX3NpZ25hbCAoKTsKKyAgICAgICAgc2Ffc2lnaWxsX2hhbmRsZXIgKHNpZ251bSwgTlVMTCwgTlVMTCk7Cit9CisKK3N0YXRpYyBjaGFyKgorX3JlYWRsaW5lIChjb25zdCBjaGFyKiBwcm9tcHQsIGNvbnN0IFN0ckxpc3QqIHBvc3NpYmlsaXRpZXMpCit7CisgICAgICAgIGNoYXIqICAgIGxpbmU7CisKKyAgICAgICAgcmVhZGxpbmVfc3RhdGUucG9zc2liaWxpdGllcyA9IHBvc3NpYmlsaXRpZXM7CisgICAgICAgIHJlYWRsaW5lX3N0YXRlLmN1cl9wb3MgPSBOVUxMOworICAgICAgICByZWFkbGluZV9zdGF0ZS5pbl9yZWFkbGluZSA9IDE7CisKKyAgICAgICAgaWYgKHNpZ3NldGptcCAocmVhZGxpbmVfc3RhdGUuam1wX3N0YXRlLDEpKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworCisgICAgICAgIHdpcGVfbGluZSAoKTsKKyNpZmRlZiBIQVZFX0xJQlJFQURMSU5FCisgICAgICAgIGlmICghb3B0X3NjcmlwdF9tb2RlKSB7CisgICAgICAgICAgICAgICAgLyogWFhYOiB3aHkgaXNuJ3QgcHJvbXB0IGNvbnN0PyAqLworICAgICAgICAgICAgICAgIGxpbmUgPSByZWFkbGluZSAoKGNoYXIqKSBwcm9tcHQpOworICAgICAgICAgICAgICAgIGlmIChsaW5lKQorICAgICAgICAgICAgICAgICAgICAgICAgX2FkZF9oaXN0b3J5X3VuaXF1ZSAobGluZSk7CisgICAgICAgIH0gZWxzZQorI2VuZGlmCisgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmcHV0cyAocHJvbXB0LCBzdGRvdXQpOworICAgICAgICAgICAgICAgIGZmbHVzaCAoc3Rkb3V0KTsKKyAgICAgICAgICAgICAgICBsaW5lID0gKGNoYXIqKSBtYWxsb2MgKDI1Nik7CisgICAgICAgICAgICAgICAgaWYgKGZnZXRzIChsaW5lLCAyNTYsIHN0ZGluKSAmJiBzdHJjbXAgKGxpbmUsICIiKSAhPSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgbGluZSBbc3RybGVuIChsaW5lKSAtIDFdID0gMDsgICAgLyoga2lsbCB0cmFpbGluZyBDUiAqLworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSAobGluZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gTlVMTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZWFkbGluZV9zdGF0ZS5pbl9yZWFkbGluZSA9IDA7CisgICAgICAgIHJldHVybiBsaW5lOworfQorCitzdGF0aWMgUGVkRXhjZXB0aW9uT3B0aW9uCitvcHRpb25fZ2V0X25leHQgKFBlZEV4Y2VwdGlvbk9wdGlvbiBvcHRpb25zLCBQZWRFeGNlcHRpb25PcHRpb24gY3VycmVudCkKK3sKKyAgICAgICAgUGVkRXhjZXB0aW9uT3B0aW9uICAgIGk7CisKKyAgICAgICAgaWYgKGN1cnJlbnQgPT0gMCkKKyAgICAgICAgICAgICAgICBpID0gUEVEX0VYQ0VQVElPTl9PUFRJT05fRklSU1Q7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBpID0gY3VycmVudCAqIDI7CisKKyAgICAgICAgZm9yICg7IGkgPD0gb3B0aW9uczsgaSAqPSAyKSB7CisgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMgJiBpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitfcHJpbnRfZXhjZXB0aW9uX3RleHQgKFBlZEV4Y2VwdGlvbiogZXgpCit7CisgICAgICAgIFN0ckxpc3QqICAgIHRleHQ7CisKKyAgICAgICAgd2lwZV9saW5lICgpOworCisgICAgICAgIGlmIChleC0+dHlwZSA9PSBQRURfRVhDRVBUSU9OX0JVRykgeworICAgICAgICAgICAgICAgIHByaW50ZiAoYnVnX21zZywgVkVSU0lPTik7CisgICAgICAgICAgICAgICAgdGV4dCA9IHN0cl9saXN0X2NyZWF0ZSAoIlxuIiwgZXgtPm1lc3NhZ2UsICJcblxuIiwgTlVMTCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdGV4dCA9IHN0cl9saXN0X2NyZWF0ZSAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBfKHBlZF9leGNlcHRpb25fZ2V0X3R5cGVfc3RyaW5nIChleC0+dHlwZSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIjogIiwgZXgtPm1lc3NhZ2UsICJcbiIsIE5VTEwpOworICAgICAgICB9CisKKyAgICAgICAgc3RyX2xpc3RfcHJpbnRfd3JhcCAodGV4dCwgc2NyZWVuX3dpZHRoICgpLCAwLCAwKTsKKyAgICAgICAgc3RyX2xpc3RfZGVzdHJveSAodGV4dCk7Cit9CisKK3N0YXRpYyBQZWRFeGNlcHRpb25PcHRpb24KK2V4Y2VwdGlvbl9oYW5kbGVyIChQZWRFeGNlcHRpb24qIGV4KQoreworICAgICAgICBQZWRFeGNlcHRpb25PcHRpb24gICAgb3B0OworCisgICAgICAgIF9wcmludF9leGNlcHRpb25fdGV4dCAoZXgpOworCisgICAgICAgIC8qIG9ubHkgb25lIGNob2ljZT8gIFRha2UgaXQgOy0pICovCisgICAgICAgIG9wdCA9IG9wdGlvbl9nZXRfbmV4dCAoZXgtPm9wdGlvbnMsIDApOworICAgICAgICBpZiAoIW9wdGlvbl9nZXRfbmV4dCAoZXgtPm9wdGlvbnMsIG9wdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG9wdDsKKworICAgICAgICAvKiBzY3JpcHQtbW9kZTogZG9uJ3QgaGFuZGxlIHRoZSBleGNlcHRpb24gKi8KKyAgICAgICAgaWYgKG9wdF9zY3JpcHRfbW9kZSB8fCAoIWlzYXR0eSAoMCkgJiYgIXByZXRlbmRfaW5wdXRfdHR5KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUEVEX0VYQ0VQVElPTl9VTkhBTkRMRUQ7CisKKyAgICAgICAgZ290X2N0cmxfYyA9IDA7CisKKyAgICAgICAgZG8geworICAgICAgICAgICAgICAgIG9wdCA9IGNvbW1hbmRfbGluZV9nZXRfZXhfb3B0ICgiIiwgZXgtPm9wdGlvbnMpOworICAgICAgICB9IHdoaWxlIChvcHQgPT0gUEVEX0VYQ0VQVElPTl9VTkhBTkRMRUQKKyAgICAgICAgICAgICAgICAgJiYgKGlzYXR0eSAoMCkgfHwgcHJldGVuZF9pbnB1dF90dHkpICYmICFnb3RfY3RybF9jKTsKKworICAgICAgICBpZiAoZ290X2N0cmxfYykgeworICAgICAgICAgICAgICAgIGdvdF9jdHJsX2MgPSAwOworICAgICAgICAgICAgICAgIG9wdCA9IFBFRF9FWENFUFRJT05fVU5IQU5ETEVEOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG9wdDsKK30KKwordm9pZAorY29tbWFuZF9saW5lX3B1c2hfd29yZCAoY29uc3QgY2hhciogd29yZCkKK3sKKyAgICAgICAgY29tbWFuZF9saW5lID0gc3RyX2xpc3RfYXBwZW5kIChjb21tYW5kX2xpbmUsIHdvcmQpOworfQorCitjaGFyKgorY29tbWFuZF9saW5lX3BvcF93b3JkICgpCit7CisgICAgICAgIGNoYXIqICAgICAgIHJlc3VsdDsKKyAgICAgICAgU3RyTGlzdCogICAgbmV4dDsKKworICAgICAgICBQRURfQVNTRVJUIChjb21tYW5kX2xpbmUgIT0gTlVMTCwgcmV0dXJuIE5VTEwpOworCisgICAgICAgIHJlc3VsdCA9IHN0cl9saXN0X2NvbnZlcnRfbm9kZSAoY29tbWFuZF9saW5lKTsKKyAgICAgICAgbmV4dCA9IGNvbW1hbmRfbGluZS0+bmV4dDsKKworICAgICAgICBzdHJfbGlzdF9kZXN0cm95X25vZGUgKGNvbW1hbmRfbGluZSk7CisgICAgICAgIGNvbW1hbmRfbGluZSA9IG5leHQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQKK2NvbW1hbmRfbGluZV9mbHVzaCAoKQoreworICAgICAgICBzdHJfbGlzdF9kZXN0cm95IChjb21tYW5kX2xpbmUpOworICAgICAgICBjb21tYW5kX2xpbmUgPSBOVUxMOworfQorCitjaGFyKgorY29tbWFuZF9saW5lX3BlZWtfd29yZCAoKQoreworICAgICAgICBpZiAoY29tbWFuZF9saW5lKQorICAgICAgICAgICAgICAgIHJldHVybiBzdHJfbGlzdF9jb252ZXJ0X25vZGUgKGNvbW1hbmRfbGluZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKK30KKworaW50Citjb21tYW5kX2xpbmVfZ2V0X3dvcmRfY291bnQgKCkKK3sKKyAgICAgICAgcmV0dXJuIHN0cl9saXN0X2xlbmd0aCAoY29tbWFuZF9saW5lKTsKK30KKworc3RhdGljIGludAorX3N0cl9pc19zcGFjZXMgKGNvbnN0IGNoYXIqIHN0cikKK3sKKyAgICAgICAgd2hpbGUgKGlzc3BhY2UgKCpzdHIpKQorICAgICAgICAgICAgICAgIHN0cisrOworCisgICAgICAgIHJldHVybiAqc3RyID09IDA7Cit9CisKKy8qICJtdWx0aV93b3JkIG1vZGUiIGlzIHRoZSAibm9ybWFsIiBtb2RlLi4uIG1hbnkgd29yZHMgY2FuIGJlIHR5cGVkLAorICogZGVsaW1pdGVkIGJ5IHNwYWNlcywgZXRjLgorICogICAgICAgICBJbiBzaW5nbGUtd29yZCBtb2RlLCBvbmx5IG9uZSB3b3JkIGlzIHBhcnNlZCBwZXIgbGluZS4KKyAqIExlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlcyBhcmUgcmVtb3ZlZC4gIEZvciBleGFtcGxlOiAiIGEgYiBjICIKKyAqIGlzIGEgc2luZ2xlIHdvcmQgImEgYiBjIi4gIFRoZSBtb3RpdmF0aW9uIGZvciB0aGlzIG1vZGUgaXMgcGFydGl0aW9uCisgKiBuYW1lcywgZXRjLiAgSW4gc2luZ2xlLXdvcmQgbW9kZSwgdGhlIGVtcHR5IHN0cmluZyBpcyBhIHdvcmQuCisgKiAoYnV0IG5vdCBpbiBtdWx0aS13b3JkIG1vZGUpLgorICovCit2b2lkCitjb21tYW5kX2xpbmVfcHVzaF9saW5lIChjb25zdCBjaGFyKiBsaW5lLCBpbnQgbXVsdGlfd29yZCkKK3sKKyAgICAgICAgaW50ICAgICBxdW90ZWQgPSAwOworICAgICAgICBjaGFyICAgIHF1b3RlX2NoYXIgPSAwOworICAgICAgICBjaGFyICAgIHRoaXNfd29yZCBbMjU2XTsKKyAgICAgICAgaW50ICAgICBpOworCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICB3aGlsZSAoKmxpbmUgPT0gJyAnKQorICAgICAgICAgICAgICAgICAgICAgICAgbGluZSsrOworCisgICAgICAgICAgICAgICAgaSA9IDA7CisgICAgICAgICAgICAgICAgZm9yICg7ICpsaW5lOyBsaW5lKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgqbGluZSA9PSAnICcgJiYgIXF1b3RlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobXVsdGlfd29yZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICAgICAgLyogc2luZ2xlIHdvcmQ6IGNoZWNrIGZvciB0cmFpbGluZyBzcGFjZXMgKyBlb2wgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9zdHJfaXNfc3BhY2VzIChsaW5lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFxdW90ZWQgJiYgc3RyY2hyICgiJ1wiIiwgKmxpbmUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1b3RlZCA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1b3RlX2NoYXIgPSAqbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxdW90ZWQgJiYgKmxpbmUgPT0gcXVvdGVfY2hhcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdW90ZWQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgLyogaGFjazogZXNjYXBlIGNoYXJhY3RlcnMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxdW90ZWQgJiYgbGluZVswXSA9PSAnXFwnICYmIGxpbmVbMV0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUrKzsKKworICAgICAgICAgICAgICAgICAgICAgICAgdGhpc193b3JkIFtpKytdID0gKmxpbmU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChpIHx8ICFtdWx0aV93b3JkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzX3dvcmQgW2ldID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRfbGluZV9wdXNoX3dvcmQgKHRoaXNfd29yZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9IHdoaWxlICgqbGluZSAmJiBtdWx0aV93b3JkKTsKK30KKworc3RhdGljIGNoYXIqCityZWFsbG9jX2FuZF9jYXQgKGNoYXIqIHN0ciwgY29uc3QgY2hhciogYXBwZW5kKQoreworICAgICAgICBpbnQgICAgICBsZW5ndGggPSBzdHJsZW4gKHN0cikgKyBzdHJsZW4gKGFwcGVuZCkgKyAxOworICAgICAgICBjaGFyKiAgICBuZXdfc3RyID0gcmVhbGxvYyAoc3RyLCBsZW5ndGgpOworCisgICAgICAgIHN0cmNhdCAobmV3X3N0ciwgYXBwZW5kKTsKKyAgICAgICAgcmV0dXJuIG5ld19zdHI7Cit9CisKK3N0YXRpYyBjaGFyKgorX2NvbnN0cnVjdF9wcm9tcHQgKGNvbnN0IGNoYXIqIGhlYWQsIGNvbnN0IGNoYXIqIGRlZiwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJMaXN0KiBwb3NzaWJpbGl0aWVzKQoreworICAgICAgICBjaGFyKiAgICBwcm9tcHQgPSBzdHJkdXAgKGhlYWQpOworCisgICAgICAgIGlmIChkZWYgJiYgcG9zc2liaWxpdGllcykKKyAgICAgICAgICAgICAgICBQRURfQVNTRVJUIChzdHJfbGlzdF9tYXRjaF9hbnkgKHBvc3NpYmlsaXRpZXMsIGRlZiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEwpOworCisgICAgICAgIGlmIChwb3NzaWJpbGl0aWVzICYmIHN0cl9saXN0X2xlbmd0aCAocG9zc2liaWxpdGllcykgPCA4KSB7CisgICAgICAgICAgICAgICAgY29uc3QgU3RyTGlzdCogICAgd2FsazsKKworICAgICAgICAgICAgICAgIGlmIChzdHJsZW4gKHByb21wdCkpCisgICAgICAgICAgICAgICAgICAgICAgICBwcm9tcHQgPSByZWFsbG9jX2FuZF9jYXQgKHByb21wdCwgIiAgIik7CisKKyAgICAgICAgICAgICAgICBmb3IgKHdhbGsgPSBwb3NzaWJpbGl0aWVzOyB3YWxrOyB3YWxrID0gd2Fsay0+bmV4dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdhbGsgIT0gcG9zc2liaWxpdGllcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbXB0ID0gcmVhbGxvY19hbmRfY2F0IChwcm9tcHQsICIvIik7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWYgJiYgc3RyX2xpc3RfbWF0Y2hfbm9kZSAod2FsaywgZGVmKSA9PSAyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21wdCA9IHJlYWxsb2NfYW5kX2NhdCAocHJvbXB0LCAiWyIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9tcHQgPSByZWFsbG9jX2FuZF9jYXQgKHByb21wdCwgZGVmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbXB0ID0gcmVhbGxvY19hbmRfY2F0IChwcm9tcHQsICJdIik7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyKiAgICB0ZXh0ID0gc3RyX2xpc3RfY29udmVydF9ub2RlICh3YWxrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbXB0ID0gcmVhbGxvY19hbmRfY2F0IChwcm9tcHQsIHRleHQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlICh0ZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcHJvbXB0ID0gcmVhbGxvY19hbmRfY2F0IChwcm9tcHQsICI/ICIpOworICAgICAgICB9IGVsc2UgaWYgKGRlZikgeworICAgICAgICAgICAgICAgIGlmIChzdHJsZW4gKHByb21wdCkpCisgICAgICAgICAgICAgICAgICAgICAgICBwcm9tcHQgPSByZWFsbG9jX2FuZF9jYXQgKHByb21wdCwgIiAgIik7CisgICAgICAgICAgICAgICAgcHJvbXB0ID0gcmVhbGxvY19hbmRfY2F0IChwcm9tcHQsICJbIik7CisgICAgICAgICAgICAgICAgcHJvbXB0ID0gcmVhbGxvY19hbmRfY2F0IChwcm9tcHQsIGRlZik7CisgICAgICAgICAgICAgICAgcHJvbXB0ID0gcmVhbGxvY19hbmRfY2F0IChwcm9tcHQsICJdPyAiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoc3RybGVuIChwcm9tcHQpKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJvbXB0ID0gcmVhbGxvY19hbmRfY2F0IChwcm9tcHQsICIgIik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcHJvbXB0OworfQorCit2b2lkCitjb21tYW5kX2xpbmVfcHJvbXB0X3dvcmRzIChjb25zdCBjaGFyKiBwcm9tcHQsIGNvbnN0IGNoYXIqIGRlZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0ckxpc3QqIHBvc3NpYmlsaXRpZXMsIGludCBtdWx0aV93b3JkKQoreworICAgICAgICBjaGFyKiAgICBsaW5lOworICAgICAgICBjaGFyKiAgICByZWFsX3Byb21wdDsKKyAgICAgICAgY2hhciogICAgX2RlZiA9IChjaGFyKikgZGVmOworICAgICAgICBpbnQgICAgICBfZGVmX25lZWRzX2ZyZWUgPSAwOworCisgICAgICAgIGlmICghZGVmICYmIHN0cl9saXN0X2xlbmd0aCAocG9zc2liaWxpdGllcykgPT0gMSkgeworICAgICAgICAgICAgICAgIF9kZWYgPSBzdHJfbGlzdF9jb252ZXJ0X25vZGUgKHBvc3NpYmlsaXRpZXMpOworICAgICAgICAgICAgICAgIF9kZWZfbmVlZHNfZnJlZSA9IDE7CisgICAgICAgIH0KKworICAgICAgICBpZiAob3B0X3NjcmlwdF9tb2RlKSB7CisgICAgICAgICAgICAgICAgaWYgKF9kZWYpCisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kX2xpbmVfcHVzaF9saW5lIChfZGVmLCAwKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgcmVhbF9wcm9tcHQgPSBfY29uc3RydWN0X3Byb21wdCAocHJvbXB0LCBfZGVmLCBwb3NzaWJpbGl0aWVzKTsKKyAgICAgICAgICAgICAgICBsaW5lID0gX3JlYWRsaW5lIChyZWFsX3Byb21wdCwgcG9zc2liaWxpdGllcyk7CisgICAgICAgICAgICAgICAgZnJlZSAocmVhbF9wcm9tcHQpOworICAgICAgICAgICAgICAgIGlmICghbGluZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgaWYgKCFzdHJsZW4gKGxpbmUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2RlZikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZF9saW5lX3B1c2hfbGluZSAoX2RlZiwgMCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRfbGluZV9wdXNoX2xpbmUgKGxpbmUsIG11bHRpX3dvcmQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmcmVlIChsaW5lKTsKKyAgICAgICAgfSB3aGlsZSAoIWNvbW1hbmRfbGluZV9nZXRfd29yZF9jb3VudCAoKSAmJiAhX2RlZik7CisKKyAgICAgICAgaWYgKF9kZWZfbmVlZHNfZnJlZSkKKyAgICAgICAgICAgICAgICBmcmVlIChfZGVmKTsKK30KKworLyoqCisgKiBHZXQgYSB3b3JkIGZyb20gY29tbWFuZCBsaW5lLgorICoKKyAqIFxwYXJhbSBwb3NzaWJpbGl0aWVzIGEgU3RyTGlzdCBvZiB2YWxpZCBzdHJpbmdzLCBOVUxMIGlmIGFsbCBhcmUgdmFsaWQuCisgKiBccGFyYW0gbXVsdGlfd29yZCB3aGV0aGVyIG11bHRpcGxlIHdvcmRzIGFyZSBhbGxvd2VkLgorICoKKyAqIFxyZXR1cm4gVGhlIHdvcmQocyksIG9yIE5VTEwgaWYgZW1wdHkuCisgKi8KK2NoYXIqCitjb21tYW5kX2xpbmVfZ2V0X3dvcmQgKGNvbnN0IGNoYXIqIHByb21wdCwgY29uc3QgY2hhciogZGVmLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJMaXN0KiBwb3NzaWJpbGl0aWVzLCBpbnQgbXVsdGlfd29yZCkKK3sKKyAgICAgICAgZG8geworICAgICAgICAgICAgICAgIGlmIChjb21tYW5kX2xpbmVfZ2V0X3dvcmRfY291bnQgKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqICAgICAgIHJlc3VsdCA9IGNvbW1hbmRfbGluZV9wb3Bfd29yZCAoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0ckxpc3QqICAgIHJlc3VsdF9ub2RlOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBvc3NpYmlsaXRpZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9ub2RlID0gc3RyX2xpc3RfbWF0Y2ggKHBvc3NpYmlsaXRpZXMsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmcmVlIChyZXN1bHQpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdF9ub2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyX2xpc3RfY29udmVydF9ub2RlIChyZXN1bHRfbm9kZSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRfbGluZV9mbHVzaCAoKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBjb21tYW5kX2xpbmVfcHJvbXB0X3dvcmRzIChwcm9tcHQsIGRlZiwgcG9zc2liaWxpdGllcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aV93b3JkKTsKKyAgICAgICAgfSB3aGlsZSAoY29tbWFuZF9saW5lX2dldF93b3JkX2NvdW50ICgpKTsKKworICAgICAgICByZXR1cm4gTlVMTDsKK30KKworaW50Citjb21tYW5kX2xpbmVfZ2V0X2ludGVnZXIgKGNvbnN0IGNoYXIqIHByb21wdCwgaW50KiB2YWx1ZSkKK3sKKyAgICAgICAgY2hhciAgICAgZGVmX3N0ciBbMTBdOworICAgICAgICBjaGFyKiAgICBpbnB1dDsKKyAgICAgICAgaW50ICAgICAgdmFsaWQ7CisKKyAgICAgICAgc25wcmludGYgKGRlZl9zdHIsIDEwLCAiJWQiLCAqdmFsdWUpOworICAgICAgICBpbnB1dCA9IGNvbW1hbmRfbGluZV9nZXRfd29yZCAocHJvbXB0LCAqdmFsdWUgPyBkZWZfc3RyIDogTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDEpOworICAgICAgICBpZiAoIWlucHV0KQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB2YWxpZCA9IHNzY2FuZiAoaW5wdXQsICIlZCIsIHZhbHVlKTsKKyAgICAgICAgZnJlZSAoaW5wdXQpOworICAgICAgICByZXR1cm4gdmFsaWQ7Cit9CisKK2ludAorY29tbWFuZF9saW5lX2dldF9zZWN0b3IgKGNvbnN0IGNoYXIqIHByb21wdCwgUGVkRGV2aWNlKiBkZXYsIFBlZFNlY3RvciogdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgUGVkR2VvbWV0cnkqKiByYW5nZSkKK3sKKyAgICAgICAgY2hhciogICAgZGVmX3N0cjsKKyAgICAgICAgY2hhciogICAgaW5wdXQ7CisgICAgICAgIGludCAgICAgIHZhbGlkOworCisgICAgICAgIGRlZl9zdHIgPSBwZWRfdW5pdF9mb3JtYXQgKGRldiwgKnZhbHVlKTsKKyAgICAgICAgaW5wdXQgPSBjb21tYW5kX2xpbmVfZ2V0X3dvcmQgKHByb21wdCwgKnZhbHVlID8gZGVmX3N0ciA6IE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAxKTsKKworICAgICAgICAvKiBkZWZfc3RyIG1pZ2h0IGhhdmUgcm91bmRlZCAqdmFsdWUgYSBsaXR0bGUgYml0LiAgSWYgdGhlIHVzZXIgcGlja2VkCisgICAgICAgICAqIHRoZSBkZWZhdWx0LCBtYWtlIHN1cmUgdGhlIHNlbGVjdGVkIHNlY3RvciBpcyBpZGVudGljYWwgdG8gdGhlCisgICAgICAgICAqIGRlZmF1bHQuCisgICAgICAgICAqLworICAgICAgICBpZiAoaW5wdXQgJiYgKnZhbHVlICYmICFzdHJjbXAgKGlucHV0LCBkZWZfc3RyKSkgeworICAgICAgICAgICAgICAgIGlmIChyYW5nZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgKnJhbmdlID0gcGVkX2dlb21ldHJ5X25ldyAoZGV2LCAqdmFsdWUsIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgcGVkX2ZyZWUgKGRlZl9zdHIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICpyYW5nZSAhPSBOVUxMOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHBlZF9mcmVlIChkZWZfc3RyKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorCisgICAgICAgIHBlZF9mcmVlIChkZWZfc3RyKTsKKyAgICAgICAgaWYgKCFpbnB1dCkgeworICAgICAgICAgICAgICAgICp2YWx1ZSA9IDA7CisgICAgICAgICAgICAgICAgaWYgKHJhbmdlKQorICAgICAgICAgICAgICAgICAgICAgICAgKnJhbmdlID0gTlVMTDsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIHZhbGlkID0gcGVkX3VuaXRfcGFyc2UgKGlucHV0LCBkZXYsIHZhbHVlLCByYW5nZSk7CisKKyAgICAgICAgZnJlZSAoaW5wdXQpOworICAgICAgICByZXR1cm4gdmFsaWQ7Cit9CisKK2ludAorY29tbWFuZF9saW5lX2dldF9zdGF0ZSAoY29uc3QgY2hhciogcHJvbXB0LCBpbnQqIHZhbHVlKQoreworICAgICAgICBjaGFyKiAgICBkZWZfd29yZDsKKyAgICAgICAgY2hhciogICAgaW5wdXQ7CisKKyAgICAgICAgaWYgKCp2YWx1ZSkKKyAgICAgICAgICAgICAgICBkZWZfd29yZCA9IHN0cl9saXN0X2NvbnZlcnRfbm9kZSAob25fbGlzdCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBkZWZfd29yZCA9IHN0cl9saXN0X2NvbnZlcnRfbm9kZSAob2ZmX2xpc3QpOworICAgICAgICBpbnB1dCA9IGNvbW1hbmRfbGluZV9nZXRfd29yZCAocHJvbXB0LCBkZWZfd29yZCwgb25fb2ZmX2xpc3QsIDEpOworICAgICAgICBmcmVlIChkZWZfd29yZCk7CisgICAgICAgIGlmICghaW5wdXQpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmIChzdHJfbGlzdF9tYXRjaF9hbnkgKG9uX2xpc3QsIGlucHV0KSkKKyAgICAgICAgICAgICAgICAqdmFsdWUgPSAxOworICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgKnZhbHVlID0gMDsKKyAgICAgICAgZnJlZSAoaW5wdXQpOworICAgICAgICByZXR1cm4gMTsKK30KKworaW50Citjb21tYW5kX2xpbmVfZ2V0X2RldmljZSAoY29uc3QgY2hhciogcHJvbXB0LCBQZWREZXZpY2UqKiB2YWx1ZSkKK3sKKyAgICAgICAgY2hhciogICAgICAgICBkZWZfZGV2X25hbWUgPSAqdmFsdWUgPyAoKnZhbHVlKS0+cGF0aCA6IE5VTEw7CisgICAgICAgIGNoYXIqICAgICAgICAgZGV2X25hbWU7CisgICAgICAgIFBlZERldmljZSogICAgZGV2OworCisgICAgICAgIGRldl9uYW1lID0gY29tbWFuZF9saW5lX2dldF93b3JkIChwcm9tcHQsIGRlZl9kZXZfbmFtZSwgTlVMTCwgMSk7CisgICAgICAgIGlmICghZGV2X25hbWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgZGV2ID0gcGVkX2RldmljZV9nZXQgKGRldl9uYW1lKTsKKyAgICAgICAgZnJlZSAoZGV2X25hbWUpOworICAgICAgICBpZiAoIWRldikKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICAqdmFsdWUgPSBkZXY7CisgICAgICAgIHJldHVybiAxOworfQorCitpbnQKK2NvbW1hbmRfbGluZV9nZXRfZGlzayAoY29uc3QgY2hhciogcHJvbXB0LCBQZWREaXNrKiogdmFsdWUpCit7CisgICAgICAgIFBlZERldmljZSogICAgZGV2ID0gKnZhbHVlID8gKCp2YWx1ZSktPmRldiA6IE5VTEw7CisKKyAgICAgICAgaWYgKCFjb21tYW5kX2xpbmVfZ2V0X2RldmljZSAocHJvbXB0LCAmZGV2KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBpZiAoZGV2ICE9ICgqdmFsdWUpLT5kZXYpIHsKKyAgICAgICAgICAgICAgICBQZWREaXNrKiAgICBuZXdfZGlzayA9IHBlZF9kaXNrX25ldyAoZGV2KTsKKyAgICAgICAgICAgICAgICBpZiAoIW5ld19kaXNrKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgKnZhbHVlID0gbmV3X2Rpc2s7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDE7Cit9CisKK2ludAorY29tbWFuZF9saW5lX2dldF9wYXJ0aXRpb24gKGNvbnN0IGNoYXIqIHByb21wdCwgUGVkRGlzayogZGlzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQZWRQYXJ0aXRpb24qKiB2YWx1ZSkKK3sKKyAgICAgICAgUGVkUGFydGl0aW9uKiAgICBwYXJ0OworCisgICAgICAgIC8qIEZsYXdlZCBsb2dpYywgZG9lc24ndCBzZWVtIHRvIHdvcms/ISAKKyAgICAgICAgY2hlY2sgPSBwZWRfZGlza19uZXh0X3BhcnRpdGlvbiAoZGlzaywgcGFydCk7CisgICAgICAgIHBhcnQgID0gcGVkX2Rpc2tfbmV4dF9wYXJ0aXRpb24gKGRpc2ssIGNoZWNrKTsKKworICAgICAgICBpZiAocGFydCA9PSBOVUxMKSB7CisKKyAgICAgICAgKnZhbHVlID0gY2hlY2s7ICAgICAgICAgIAorICAgICAgICBwcmludGYgKF8oIlRoZSAob25seSkgcHJpbWFyeSBwYXJ0aXRpb24gaGFzICIKKyAgICAgICAgICAgICAgICAgICJiZWVuIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWRcbiIpKTsKKyAgICAgICAgcmV0dXJuIDE7ICAgICAgICAgIAorCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICovCisgICAgICAgIGludCBudW0gPSAoKnZhbHVlKSA/ICgqdmFsdWUpLT5udW0gOiAwOworCisgICAgICAgIGlmICghY29tbWFuZF9saW5lX2dldF9pbnRlZ2VyIChwcm9tcHQsICZudW0pKSB7CisgICAgICAgICAgICAgICAgcGVkX2V4Y2VwdGlvbl90aHJvdyAoUEVEX0VYQ0VQVElPTl9FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQRURfRVhDRVBUSU9OX0NBTkNFTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJFeHBlY3RpbmcgYSBwYXJ0aXRpb24gbnVtYmVyLiIpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIHBhcnQgPSBwZWRfZGlza19nZXRfcGFydGl0aW9uIChkaXNrLCBudW0pOworCisgICAgICAgIGlmICghcGFydCkgeworICAgICAgICAgICAgICAgIHBlZF9leGNlcHRpb25fdGhyb3cgKFBFRF9FWENFUFRJT05fRVJST1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiUGFydGl0aW9uIGRvZXNuJ3QgZXhpc3QuIikpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICAqdmFsdWUgPSBwYXJ0OworICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgLy99Cit9CisKK2ludAorY29tbWFuZF9saW5lX2dldF9mc190eXBlIChjb25zdCBjaGFyKiBwcm9tcHQsIGNvbnN0IFBlZEZpbGVTeXN0ZW1UeXBlKigqIHZhbHVlKSkKK3sKKyAgICAgICAgY2hhciogICAgICAgICAgICAgICAgIGZzX3R5cGVfbmFtZTsKKyAgICAgICAgUGVkRmlsZVN5c3RlbVR5cGUqICAgIGZzX3R5cGU7CisKKyAgICAgICAgZnNfdHlwZV9uYW1lID0gY29tbWFuZF9saW5lX2dldF93b3JkIChwcm9tcHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnZhbHVlID8gKCp2YWx1ZSktPm5hbWUgOiBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmc190eXBlX2xpc3QsIDEpOworICAgICAgICBpZiAoIWZzX3R5cGVfbmFtZSkgeworICAgICAgICAgICAgICAgIHBlZF9leGNlcHRpb25fdGhyb3cgKFBFRF9FWENFUFRJT05fRVJST1IsIFBFRF9FWENFUFRJT05fQ0FOQ0VMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIkV4cGVjdGluZyBhIGZpbGUgc3lzdGVtIHR5cGUuIikpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgZnNfdHlwZSA9IHBlZF9maWxlX3N5c3RlbV90eXBlX2dldCAoZnNfdHlwZV9uYW1lKTsKKyAgICAgICAgaWYgKCFmc190eXBlKSB7CisgICAgICAgICAgICAgICAgcGVkX2V4Y2VwdGlvbl90aHJvdyAoUEVEX0VYQ0VQVElPTl9FUlJPUiwgUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVW5rbm93biBmaWxlIHN5c3RlbSB0eXBlIFwiJXNcIi4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmc190eXBlX25hbWUpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgZnJlZSAoZnNfdHlwZV9uYW1lKTsKKyAgICAgICAgKnZhbHVlID0gZnNfdHlwZTsKKyAgICAgICAgcmV0dXJuIDE7Cit9CisKK2ludAorY29tbWFuZF9saW5lX2dldF9kaXNrX3R5cGUgKGNvbnN0IGNoYXIqIHByb21wdCwgY29uc3QgUGVkRGlza1R5cGUqKCogdmFsdWUpKQoreworICAgICAgICBjaGFyKiAgICBkaXNrX3R5cGVfbmFtZTsKKworICAgICAgICBkaXNrX3R5cGVfbmFtZSA9IGNvbW1hbmRfbGluZV9nZXRfd29yZCAocHJvbXB0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnZhbHVlID8gKCp2YWx1ZSktPm5hbWUgOiBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlza190eXBlX2xpc3QsIDEpOworICAgICAgICBpZiAoIWRpc2tfdHlwZV9uYW1lKSB7CisgICAgICAgICAgICAgICAgcGVkX2V4Y2VwdGlvbl90aHJvdyAoUEVEX0VYQ0VQVElPTl9FUlJPUiwgUEVEX0VYQ0VQVElPTl9DQU5DRUwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiRXhwZWN0aW5nIGEgZGlzayBsYWJlbCB0eXBlLiIpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgICp2YWx1ZSA9IHBlZF9kaXNrX3R5cGVfZ2V0IChkaXNrX3R5cGVfbmFtZSk7CisgICAgICAgIGZyZWUgKGRpc2tfdHlwZV9uYW1lKTsKKyAgICAgICAgUEVEX0FTU0VSVCAoKnZhbHVlICE9IE5VTEwsIHJldHVybiAwKTsKKyAgICAgICAgcmV0dXJuIDE7Cit9CisKK2ludAorY29tbWFuZF9saW5lX2dldF9wYXJ0X2ZsYWcgKGNvbnN0IGNoYXIqIHByb21wdCwgY29uc3QgUGVkUGFydGl0aW9uKiBwYXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBlZFBhcnRpdGlvbkZsYWcqIGZsYWcpCit7CisgICAgICAgIFN0ckxpc3QqICAgICAgICAgICAgb3B0cyA9IE5VTEw7CisgICAgICAgIFBlZFBhcnRpdGlvbkZsYWcgICAgd2FsayA9IDA7CisgICAgICAgIGNoYXIqICAgICAgICAgICAgICAgZmxhZ19uYW1lOworCisgICAgICAgIHdoaWxlICggKHdhbGsgPSBwZWRfcGFydGl0aW9uX2ZsYWdfbmV4dCAod2FsaykpICkgeworICAgICAgICAgICAgICAgIGlmIChwZWRfcGFydGl0aW9uX2lzX2ZsYWdfYXZhaWxhYmxlIChwYXJ0LCB3YWxrKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogICAgICAgIHdhbGtfbmFtZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgd2Fsa19uYW1lID0gcGVkX3BhcnRpdGlvbl9mbGFnX2dldF9uYW1lICh3YWxrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdHMgPSBzdHJfbGlzdF9hcHBlbmQgKG9wdHMsIHdhbGtfbmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBvcHRzID0gc3RyX2xpc3RfYXBwZW5kX3VuaXF1ZSAob3B0cywgXyh3YWxrX25hbWUpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmbGFnX25hbWUgPSBjb21tYW5kX2xpbmVfZ2V0X3dvcmQgKHByb21wdCwgTlVMTCwgb3B0cywgMSk7CisgICAgICAgIHN0cl9saXN0X2Rlc3Ryb3kgKG9wdHMpOworCisgICAgICAgIGlmIChmbGFnX25hbWUpIHsKKyAgICAgICAgICAgICAgICAqZmxhZyA9IHBlZF9wYXJ0aXRpb25fZmxhZ19nZXRfYnlfbmFtZSAoZmxhZ19uYW1lKTsKKyAgICAgICAgICAgICAgICBwZWRfZnJlZSAoZmxhZ19uYW1lKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK19jYW5fY3JlYXRlX3ByaW1hcnkgKGNvbnN0IFBlZERpc2sqIGRpc2spCit7CisgICAgICAgIGludCAgICBpOworCisgICAgICAgIGZvciAoaSA9IDE7IGkgPD0gcGVkX2Rpc2tfZ2V0X21heF9wcmltYXJ5X3BhcnRpdGlvbl9jb3VudCAoZGlzayk7IGkrKykgeworICAgICAgICAgICAgICAgIGlmICghcGVkX2Rpc2tfZ2V0X3BhcnRpdGlvbiAoZGlzaywgaSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitfY2FuX2NyZWF0ZV9leHRlbmRlZCAoY29uc3QgUGVkRGlzayogZGlzaykKK3sKKyAgICAgICAgaWYgKCFfY2FuX2NyZWF0ZV9wcmltYXJ5IChkaXNrKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBpZiAoIXBlZF9kaXNrX3R5cGVfY2hlY2tfZmVhdHVyZSAoZGlzay0+dHlwZSwgUEVEX0RJU0tfVFlQRV9FWFRFTkRFRCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgaWYgKHBlZF9kaXNrX2V4dGVuZGVkX3BhcnRpdGlvbiAoZGlzaykpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK19jYW5fY3JlYXRlX2xvZ2ljYWwgKGNvbnN0IFBlZERpc2sqIGRpc2spCit7CisgICAgICAgIGlmICghcGVkX2Rpc2tfdHlwZV9jaGVja19mZWF0dXJlIChkaXNrLT50eXBlLCBQRURfRElTS19UWVBFX0VYVEVOREVEKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICByZXR1cm4gcGVkX2Rpc2tfZXh0ZW5kZWRfcGFydGl0aW9uIChkaXNrKSAhPSAwOworfQorCitpbnQKK2NvbW1hbmRfbGluZV9nZXRfcGFydF90eXBlIChjb25zdCBjaGFyKiBwcm9tcHQsIGNvbnN0IFBlZERpc2sqIGRpc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBlZFBhcnRpdGlvblR5cGUqIHR5cGUpCit7CisgICAgICAgIFN0ckxpc3QqICAgIG9wdHMgPSBOVUxMOworICAgICAgICBjaGFyKiAgICAgICB0eXBlX25hbWU7CisKKyAgICAgICAgaWYgKF9jYW5fY3JlYXRlX3ByaW1hcnkgKGRpc2spKSB7CisgICAgICAgICAgICAgICAgb3B0cyA9IHN0cl9saXN0X2FwcGVuZF91bmlxdWUgKG9wdHMsICJwcmltYXJ5Iik7CisgICAgICAgICAgICAgICAgb3B0cyA9IHN0cl9saXN0X2FwcGVuZF91bmlxdWUgKG9wdHMsIF8oInByaW1hcnkiKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKF9jYW5fY3JlYXRlX2V4dGVuZGVkIChkaXNrKSkgeworICAgICAgICAgICAgICAgIG9wdHMgPSBzdHJfbGlzdF9hcHBlbmRfdW5pcXVlIChvcHRzLCAiZXh0ZW5kZWQiKTsKKyAgICAgICAgICAgICAgICBvcHRzID0gc3RyX2xpc3RfYXBwZW5kX3VuaXF1ZSAob3B0cywgXygiZXh0ZW5kZWQiKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKF9jYW5fY3JlYXRlX2xvZ2ljYWwgKGRpc2spKSB7CisgICAgICAgICAgICAgICAgb3B0cyA9IHN0cl9saXN0X2FwcGVuZF91bmlxdWUgKG9wdHMsICJsb2dpY2FsIik7CisgICAgICAgICAgICAgICAgb3B0cyA9IHN0cl9saXN0X2FwcGVuZF91bmlxdWUgKG9wdHMsIF8oImxvZ2ljYWwiKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFvcHRzKSB7CisgICAgICAgICAgICAgICAgcGVkX2V4Y2VwdGlvbl90aHJvdyAoCisgICAgICAgICAgICAgICAgICAgICAgICBQRURfRVhDRVBUSU9OX0VSUk9SLCBQRURfRVhDRVBUSU9OX0NBTkNFTCwKKyAgICAgICAgICAgICAgICAgICAgICAgIF8oIkNhbid0IGNyZWF0ZSBhbnkgbW9yZSBwYXJ0aXRpb25zLiIpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIHR5cGVfbmFtZSA9IGNvbW1hbmRfbGluZV9nZXRfd29yZCAocHJvbXB0LCBOVUxMLCBvcHRzLCAxKTsKKyAgICAgICAgc3RyX2xpc3RfZGVzdHJveSAob3B0cyk7CisKKyAgICAgICAgaWYgKCF0eXBlX25hbWUpIHsKKyAgICAgICAgICAgICAgICBwZWRfZXhjZXB0aW9uX3Rocm93ICgKKyAgICAgICAgICAgICAgICAgICAgICAgIFBFRF9FWENFUFRJT05fRVJST1IsIFBFRF9FWENFUFRJT05fQ0FOQ0VMLAorICAgICAgICAgICAgICAgICAgICAgICAgXygiRXhwZWN0aW5nIGEgcGFydGl0aW9uIHR5cGUuIikpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFzdHJjbXAgKHR5cGVfbmFtZSwgInByaW1hcnkiKQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgIXN0cmNtcCAodHlwZV9uYW1lLCBfKCJwcmltYXJ5IikpKSB7CisgICAgICAgICAgICAgICAgKnR5cGUgPSAwOworICAgICAgICB9CisgICAgICAgIGlmICghc3RyY21wICh0eXBlX25hbWUsICJleHRlbmRlZCIpCisgICAgICAgICAgICAgICAgICAgICAgICB8fCAhc3RyY21wICh0eXBlX25hbWUsIF8oImV4dGVuZGVkIikpKSB7CisgICAgICAgICAgICAgICAgKnR5cGUgPSBQRURfUEFSVElUSU9OX0VYVEVOREVEOworICAgICAgICB9CisgICAgICAgIGlmICghc3RyY21wICh0eXBlX25hbWUsICJsb2dpY2FsIikKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8ICFzdHJjbXAgKHR5cGVfbmFtZSwgXygibG9naWNhbCIpKSkgeworICAgICAgICAgICAgICAgICp0eXBlID0gUEVEX1BBUlRJVElPTl9MT0dJQ0FMOworICAgICAgICB9CisKKyAgICAgICAgZnJlZSAodHlwZV9uYW1lKTsKKyAgICAgICAgcmV0dXJuIDE7Cit9CisKK1BlZEV4Y2VwdGlvbk9wdGlvbgorY29tbWFuZF9saW5lX2dldF9leF9vcHQgKGNvbnN0IGNoYXIqIHByb21wdCwgUGVkRXhjZXB0aW9uT3B0aW9uIG9wdGlvbnMpCit7CisgICAgICAgIFN0ckxpc3QqICAgICAgICAgICAgICBvcHRpb25zX3N0cmxpc3QgPSBOVUxMOworICAgICAgICBQZWRFeGNlcHRpb25PcHRpb24gICAgb3B0OworICAgICAgICBjaGFyKiAgICAgICAgICAgICAgICAgb3B0X25hbWU7CisKKyAgICAgICAgZm9yIChvcHQgPSBvcHRpb25fZ2V0X25leHQgKG9wdGlvbnMsIDApOyBvcHQ7IAorICAgICAgICAgICAgIG9wdCA9IG9wdGlvbl9nZXRfbmV4dCAob3B0aW9ucywgb3B0KSkgeworICAgICAgICAgICAgICAgIG9wdGlvbnNfc3RybGlzdCA9IHN0cl9saXN0X2FwcGVuZF91bmlxdWUgKG9wdGlvbnNfc3RybGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKHBlZF9leGNlcHRpb25fZ2V0X29wdGlvbl9zdHJpbmcgKG9wdCkpKTsKKyAgICAgICAgICAgICAgICBvcHRpb25zX3N0cmxpc3QgPSBzdHJfbGlzdF9hcHBlbmRfdW5pcXVlIChvcHRpb25zX3N0cmxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVkX2V4Y2VwdGlvbl9nZXRfb3B0aW9uX3N0cmluZyAob3B0KSk7CisgICAgICAgIH0KKworICAgICAgICBvcHRfbmFtZSA9IGNvbW1hbmRfbGluZV9nZXRfd29yZCAocHJvbXB0LCBOVUxMLCBvcHRpb25zX3N0cmxpc3QsIDEpOworICAgICAgICBpZiAoIW9wdF9uYW1lKQorICAgICAgICAgICAgICAgIHJldHVybiBQRURfRVhDRVBUSU9OX1VOSEFORExFRDsKKyAgICAgICAgc3RyX2xpc3RfZGVzdHJveSAob3B0aW9uc19zdHJsaXN0KTsKKworICAgICAgICBvcHQgPSBQRURfRVhDRVBUSU9OX09QVElPTl9GSVJTVDsKKyAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICBpZiAoc3RyY21wIChvcHRfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWRfZXhjZXB0aW9uX2dldF9vcHRpb25fc3RyaW5nIChvcHQpKSA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgaWYgKHN0cmNtcCAob3B0X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyhwZWRfZXhjZXB0aW9uX2dldF9vcHRpb25fc3RyaW5nIChvcHQpKSkgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIG9wdCA9IG9wdGlvbl9nZXRfbmV4dCAob3B0aW9ucywgb3B0KTsKKyAgICAgICAgfQorICAgICAgICBmcmVlIChvcHRfbmFtZSk7CisgICAgICAgIHJldHVybiBvcHQ7Cit9CisKK2ludAorY29tbWFuZF9saW5lX2dldF91bml0IChjb25zdCBjaGFyKiBwcm9tcHQsIFBlZFVuaXQqIHVuaXQpCit7CisgICAgICAgIFN0ckxpc3QqICAgICAgIG9wdHMgPSBOVUxMOworICAgICAgICBQZWRVbml0ICAgICAgICB3YWxrOworICAgICAgICBjaGFyKiAgICAgICAgICB1bml0X25hbWU7CisgICAgICAgIGNvbnN0IGNoYXIqICAgIGRlZmF1bHRfdW5pdF9uYW1lOworCisgICAgICAgIGZvciAod2FsayA9IFBFRF9VTklUX0ZJUlNUOyB3YWxrIDw9IFBFRF9VTklUX0xBU1Q7IHdhbGsrKykKKyAgICAgICAgICAgICAgICBvcHRzID0gc3RyX2xpc3RfYXBwZW5kIChvcHRzLCBwZWRfdW5pdF9nZXRfbmFtZSAod2FsaykpOworCisgICAgICAgIGRlZmF1bHRfdW5pdF9uYW1lID0gcGVkX3VuaXRfZ2V0X25hbWUgKHBlZF91bml0X2dldF9kZWZhdWx0ICgpKTsKKyAgICAgICAgdW5pdF9uYW1lID0gY29tbWFuZF9saW5lX2dldF93b3JkIChwcm9tcHQsIGRlZmF1bHRfdW5pdF9uYW1lLCBvcHRzLCAxKTsKKyAgICAgICAgc3RyX2xpc3RfZGVzdHJveSAob3B0cyk7CisKKyAgICAgICAgaWYgKHVuaXRfbmFtZSkgeworICAgICAgICAgICAgICAgICp1bml0ID0gcGVkX3VuaXRfZ2V0X2J5X25hbWUgKHVuaXRfbmFtZSk7CisgICAgICAgICAgICAgICAgZnJlZSAodW5pdF9uYW1lKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7Cit9CisKK2ludAorY29tbWFuZF9saW5lX2lzX2ludGVnZXIgKCkKK3sKKyAgICAgICAgY2hhciogICAgd29yZDsKKyAgICAgICAgaW50ICAgICAgaXNfaW50ZWdlcjsKKyAgICAgICAgaW50ICAgICAgc2NyYXRjaDsKKworICAgICAgICB3b3JkID0gY29tbWFuZF9saW5lX3BlZWtfd29yZCAoKTsKKyAgICAgICAgaWYgKCF3b3JkKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIGlzX2ludGVnZXIgPSBzc2NhbmYgKHdvcmQsICIlZCIsICZzY3JhdGNoKTsKKyAgICAgICAgZnJlZSAod29yZCk7CisgICAgICAgIHJldHVybiBpc19pbnRlZ2VyOworfQorCitzdGF0aWMgaW50Citpbml0X2V4X29wdF9zdHIgKCkKK3sKKyAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgIGk7CisgICAgICAgIFBlZEV4Y2VwdGlvbk9wdGlvbiAgICBvcHQ7CisKKyAgICAgICAgZm9yIChpID0gMDsgKDEgPDwgaSkgPD0gUEVEX0VYQ0VQVElPTl9PUFRJT05fTEFTVDsgaSsrKSB7CisgICAgICAgICAgICAgICAgb3B0ID0gKDEgPDwgaSk7CisgICAgICAgICAgICAgICAgZXhfb3B0X3N0ciBbaV0KKyAgICAgICAgICAgICAgICAgICAgICAgID0gc3RyX2xpc3RfY3JlYXRlICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVkX2V4Y2VwdGlvbl9nZXRfb3B0aW9uX3N0cmluZyAob3B0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyhwZWRfZXhjZXB0aW9uX2dldF9vcHRpb25fc3RyaW5nIChvcHQpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgICAgICAgICAgICAgaWYgKCFleF9vcHRfc3RyIFtpXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgZXhfb3B0X3N0ciBbaV0gPSBOVUxMOworICAgICAgICByZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQKK2RvbmVfZXhfb3B0X3N0ciAoKQoreworICAgICAgICBpbnQgICAgaTsKKworICAgICAgICBmb3IgKGk9MDsgZXhfb3B0X3N0ciBbaV07IGkrKykKKyAgICAgICAgICAgICAgICBzdHJfbGlzdF9kZXN0cm95IChleF9vcHRfc3RyIFtpXSk7Cit9CisKK3N0YXRpYyBpbnQKK2luaXRfc3RhdGVfc3RyICgpCit7CisgICAgICAgIG9uX2xpc3QgPSBzdHJfbGlzdF9jcmVhdGVfdW5pcXVlIChfKCJvbiIpLCAib24iLCBOVUxMKTsKKyAgICAgICAgb2ZmX2xpc3QgPSBzdHJfbGlzdF9jcmVhdGVfdW5pcXVlIChfKCJvZmYiKSwgIm9mZiIsIE5VTEwpOworICAgICAgICBvbl9vZmZfbGlzdCA9IHN0cl9saXN0X2pvaW4gKHN0cl9saXN0X2R1cGxpY2F0ZSAob25fbGlzdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyX2xpc3RfZHVwbGljYXRlIChvZmZfbGlzdCkpOworICAgICAgICByZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQKK2RvbmVfc3RhdGVfc3RyICgpCit7CisgICAgICAgIHN0cl9saXN0X2Rlc3Ryb3kgKG9uX2xpc3QpOworICAgICAgICBzdHJfbGlzdF9kZXN0cm95IChvZmZfbGlzdCk7CisgICAgICAgIHN0cl9saXN0X2Rlc3Ryb3kgKG9uX29mZl9saXN0KTsKK30KKworc3RhdGljIGludAoraW5pdF9mc190eXBlX3N0ciAoKQoreworICAgICAgICBQZWRGaWxlU3lzdGVtVHlwZSogICAgd2FsazsKKworICAgICAgICBmc190eXBlX2xpc3QgPSBOVUxMOworCisgICAgICAgIGZvciAod2FsayA9IHBlZF9maWxlX3N5c3RlbV90eXBlX2dldF9uZXh0IChOVUxMKTsgd2FsazsKKyAgICAgICAgICAgICB3YWxrID0gcGVkX2ZpbGVfc3lzdGVtX3R5cGVfZ2V0X25leHQgKHdhbGspKQorICAgICAgICB7CisgICAgICAgICAgICAgICAgZnNfdHlwZV9saXN0ID0gc3RyX2xpc3RfaW5zZXJ0IChmc190eXBlX2xpc3QsIHdhbGstPm5hbWUpOworICAgICAgICAgICAgICAgIGlmICghZnNfdHlwZV9saXN0KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAoraW5pdF9kaXNrX3R5cGVfc3RyICgpCit7CisgICAgICAgIFBlZERpc2tUeXBlKiAgICB3YWxrOworCisgICAgICAgIGRpc2tfdHlwZV9saXN0ID0gTlVMTDsKKworICAgICAgICBmb3IgKHdhbGsgPSBwZWRfZGlza190eXBlX2dldF9uZXh0IChOVUxMKTsgd2FsazsKKyAgICAgICAgICAgICB3YWxrID0gcGVkX2Rpc2tfdHlwZV9nZXRfbmV4dCAod2FsaykpCisgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkaXNrX3R5cGVfbGlzdCA9IHN0cl9saXN0X2luc2VydCAoZGlza190eXBlX2xpc3QsIHdhbGstPm5hbWUpOworICAgICAgICAgICAgICAgIGlmICghZGlza190eXBlX2xpc3QpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAxOworfQorCitpbnQKK2luaXRfdWkgKCkKK3sKKyAgICAgICAgaWYgKCFpbml0X2V4X29wdF9zdHIgKCkKKyAgICAgICAgICAgIHx8ICFpbml0X3N0YXRlX3N0ciAoKQorICAgICAgICAgICAgfHwgIWluaXRfZnNfdHlwZV9zdHIgKCkKKyAgICAgICAgICAgIHx8ICFpbml0X2Rpc2tfdHlwZV9zdHIgKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHBlZF9leGNlcHRpb25fc2V0X2hhbmRsZXIgKGV4Y2VwdGlvbl9oYW5kbGVyKTsKKworI2lmZGVmIEhBVkVfTElCUkVBRExJTkUKKyAgICAgICAgcmxfaW5pdGlhbGl6ZSAoKTsKKyAgICAgICAgcmxfYXR0ZW1wdGVkX2NvbXBsZXRpb25fZnVuY3Rpb24gPSAoQ1BQRnVuY3Rpb24qKSBjb21wbGV0ZV9mdW5jdGlvbjsKKyAgICAgICAgcmVhZGxpbmVfc3RhdGUuaW5fcmVhZGxpbmUgPSAwOworI2VuZGlmCisKKyNpZmRlZiBTQV9TSUdJTkZPCisgICAgICAgIHNpZ3NldF90IGN1cnI7CisgICAgICAgIHNpZ2ZpbGxzZXQgKCZjdXJyKTsKKworICAgICAgICBzaWdfc2Vndi5zYV9zaWdhY3Rpb24gPSAmc2Ffc2lnc2Vndl9oYW5kbGVyOworICAgICAgICBzaWdfaW50LnNhX3NpZ2FjdGlvbiA9ICZzYV9zaWdpbnRfaGFuZGxlcjsKKyAgICAgICAgc2lnX2ZwZS5zYV9zaWdhY3Rpb24gPSAmc2Ffc2lnZnBlX2hhbmRsZXI7CisgICAgICAgIHNpZ19pbGwuc2Ffc2lnYWN0aW9uID0gJnNhX3NpZ2lsbF9oYW5kbGVyOworCisgICAgICAgIHNpZ19zZWd2LnNhX21hc2sgPSAKKyAgICAgICAgICAgICAgICBzaWdfaW50LnNhX21hc2sgPSAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpZ19mcGUuc2FfbWFzayA9IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWdfaWxsLnNhX21hc2sgPSBjdXJyOworICAgIAorICAgICAgICBzaWdfc2Vndi5zYV9mbGFncyA9IAorICAgICAgICAgICAgICAgIHNpZ19pbnQuc2FfZmxhZ3MgPSAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpZ19mcGUuc2FfZmxhZ3MgPSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnX2lsbC5zYV9mbGFncyA9IFNBX1NJR0lORk87CisKKyAgICAgICAgc2lnYWN0aW9uIChTSUdTRUdWLCAmc2lnX3NlZ3YsIE5VTEwpOworICAgICAgICBzaWdhY3Rpb24gKFNJR0lOVCwgJnNpZ19pbnQsIE5VTEwpOworICAgICAgICBzaWdhY3Rpb24gKFNJR0ZQRSwgJnNpZ19mcGUsIE5VTEwpOworICAgICAgICBzaWdhY3Rpb24gKFNJR0lMTCwgJnNpZ19pbGwsIE5VTEwpOworI2Vsc2UKKyAgICAgICAgc2lnbmFsIChTSUdTRUdWLCBzX3NpZ3NlZ3ZfaGFuZGxlcik7CisgICAgICAgIHNpZ25hbCAoU0lHSU5ULCBzX3NpZ2ludF9oYW5kbGVyKTsKKyAgICAgICAgc2lnbmFsIChTSUdGUEUsIHNfc2lnZnBlX2hhbmRsZXIpOworICAgICAgICBzaWduYWwgKFNJR0lMTCwgc19zaWdpbGxfaGFuZGxlcik7CisjZW5kaWYgLyogU0FfU0lHSU5GTyAqLworCisgICAgICAgIHJldHVybiAxOworfQorCit2b2lkCitkb25lX3VpICgpCit7CisgICAgICAgIHBlZF9leGNlcHRpb25fc2V0X2hhbmRsZXIgKE5VTEwpOworICAgICAgICBkb25lX2V4X29wdF9zdHIgKCk7CisgICAgICAgIGRvbmVfc3RhdGVfc3RyICgpOworICAgICAgICBzdHJfbGlzdF9kZXN0cm95IChmc190eXBlX2xpc3QpOworICAgICAgICBzdHJfbGlzdF9kZXN0cm95IChkaXNrX3R5cGVfbGlzdCk7Cit9CisKK3ZvaWQKK2hlbHBfbXNnICgpCit7CisgICAgICAgIGZwdXRzIChfKHVzYWdlX21zZyksIHN0ZG91dCk7CisKKyAgICAgICAgcHV0Y2hhciAoJ1xuJyk7CisgICAgICAgIGZwdXRzIChfKCJPUFRJT05zOiIpLCBzdGRvdXQpOworICAgICAgICBwdXRjaGFyICgnXG4nKTsKKyAgICAgICAgcHJpbnRfb3B0aW9uc19oZWxwICgpOworCisgICAgICAgIHB1dGNoYXIgKCdcbicpOworICAgICAgICBmcHV0cyAoXygiQ09NTUFORHM6IiksIHN0ZG91dCk7CisgICAgICAgIHB1dGNoYXIgKCdcbicpOworICAgICAgICBwcmludF9jb21tYW5kc19oZWxwICgpOworICAgICAgICBleGl0ICgwKTsKK30KKwordm9pZAorcHJpbnRfdXNpbmdfZGV2IChQZWREZXZpY2UqIGRldikKK3sKKyAgICAgICAgcHJpbnRmIChfKCJVc2luZyAlc1xuIiksIGRldi0+cGF0aCk7Cit9CisKK2ludAoraW50ZXJhY3RpdmVfbW9kZSAoUGVkRGV2aWNlKiogZGV2LCBDb21tYW5kKiBjbWRfbGlzdFtdKQoreworICAgICAgICBTdHJMaXN0KiAgICBsaXN0OworICAgICAgICBTdHJMaXN0KiAgICBjb21tYW5kX25hbWVzID0gY29tbWFuZF9nZXRfbmFtZXMgKGNtZF9saXN0KTsKKworICAgICAgICBjb21tYW5kcyA9IGNtZF9saXN0OyAgICAvKiBGSVhNRSB5dWNreSwgbmFzdHksIGV2aWwgaGFjayAqLworCisgICAgICAgIGZwdXRzIChwcm9nX25hbWUsIHN0ZG91dCk7CisKKyAgICAgICAgcHJpbnRfdXNpbmdfZGV2ICgqZGV2KTsKKworICAgICAgICBsaXN0ID0gc3RyX2xpc3RfY3JlYXRlIChfKGJhbm5lcl9tc2cpLCBOVUxMKTsKKyAgICAgICAgc3RyX2xpc3RfcHJpbnRfd3JhcCAobGlzdCwgc2NyZWVuX3dpZHRoICgpLCAwLCAwKTsKKyAgICAgICAgc3RyX2xpc3RfZGVzdHJveSAobGlzdCk7CisKKyAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICBjaGFyKiAgICAgICB3b3JkOworICAgICAgICAgICAgICAgIENvbW1hbmQqICAgIGNtZDsKKworICAgICAgICAgICAgICAgIHdoaWxlICghY29tbWFuZF9saW5lX2dldF93b3JkX2NvdW50ICgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmVvZiAoc3RkaW4pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dGNoYXIgKCdcbicpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRfbGluZV9wcm9tcHRfd29yZHMgKCIocGFydGVkKSIsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kX25hbWVzLCAxKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB3b3JkID0gY29tbWFuZF9saW5lX3BvcF93b3JkICgpOworICAgICAgICAgICAgICAgIGlmICh3b3JkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjbWQgPSBjb21tYW5kX2dldCAoY29tbWFuZHMsIHdvcmQpOworICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSAod29yZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY21kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29tbWFuZF9ydW4gKGNtZCwgZGV2KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kX2xpbmVfZmx1c2ggKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRfY29tbWFuZHNfaGVscCAoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gMTsKK30KKworCitpbnQKK25vbl9pbnRlcmFjdGl2ZV9tb2RlIChQZWREZXZpY2UqKiBkZXYsIENvbW1hbmQqIGNtZF9saXN0W10sCisgICAgICAgICAgICAgICAgICAgICAgaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKK3sKKyAgICAgICAgaW50ICAgICAgICAgaTsKKyAgICAgICAgQ29tbWFuZCogICAgY21kOworCisgICAgICAgIGNvbW1hbmRzID0gY21kX2xpc3Q7ICAgIC8qIEZJWE1FIHl1Y2t5LCBuYXN0eSwgZXZpbCBoYWNrICovCisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykKKyAgICAgICAgICAgICAgICBjb21tYW5kX2xpbmVfcHVzaF9saW5lIChhcmd2IFtpXSwgMSk7CisKKyAgICAgICAgd2hpbGUgKGNvbW1hbmRfbGluZV9nZXRfd29yZF9jb3VudCAoKSkgeworICAgICAgICAgICAgICAgIGNoYXIqICAgIHdvcmQ7CisKKyAgICAgICAgICAgICAgICB3b3JkID0gY29tbWFuZF9saW5lX3BvcF93b3JkICgpOworICAgICAgICAgICAgICAgIGlmICghd29yZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY21kID0gY29tbWFuZF9nZXQgKGNvbW1hbmRzLCB3b3JkKTsKKyAgICAgICAgICAgICAgICBmcmVlICh3b3JkKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNtZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaGVscF9tc2cgKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIShjbWQtPm5vbl9pbnRlcmFjdGl2ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZwdXRzKF8oIlRoaXMgY29tbWFuZCBkb2VzIG5vdCBtYWtlIHNlbnNlIGluICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vbi1pbnRlcmFjdGl2ZSBtb2RlLlxuIiksIHN0ZG91dCk7CisgICAgICAgICAgICAgICAgICAgICAgICBleGl0KDEpOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCFjb21tYW5kX3J1biAoY21kLCBkZXYpKQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMTsKKworZXJyb3I6CisgICAgICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L3BhcnRlZC91aS5oIGIvcGFydGVkLTEuOC43L3BhcnRlZC91aS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0N2IxNzAKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvcGFydGVkL3VpLmgKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAgICBwYXJ0ZWQgLSBhIGZyb250ZW5kIHRvIGxpYnBhcnRlZAorICAgIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMSwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKKyovCisKKyNpZm5kZWYgVUlfSF9JTkNMVURFRAorI2RlZmluZSBVSV9IX0lOQ0xVREVECisKKyNpbmNsdWRlICJzdHJsaXN0LmgiCisKK2V4dGVybiBjaGFyKglwcm9nX25hbWU7CisKK2V4dGVybiBpbnQgaW5pdF91aSAoKTsKK2V4dGVybiBpbnQgbm9uX2ludGVyYWN0aXZlX21vZGUgKFBlZERldmljZSoqIGRldiwgQ29tbWFuZCogY21kX2xpc3RbXSwKKwkJCQkgaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSk7CitleHRlcm4gaW50IGludGVyYWN0aXZlX21vZGUgKFBlZERldmljZSoqIGRldiwgQ29tbWFuZCogY21kX2xpc3RbXSk7CitleHRlcm4gdm9pZCBkb25lX3VpICgpOworCitleHRlcm4gaW50IHNjcmVlbl93aWR0aCAoKTsKK2V4dGVybiB2b2lkIHdpcGVfbGluZSAoKTsKKworZXh0ZXJuIHZvaWQgY29tbWFuZF9saW5lX3B1c2hfd29yZCAoY29uc3QgY2hhciogd29yZCk7CitleHRlcm4gY2hhciogY29tbWFuZF9saW5lX3BvcF93b3JkICgpOworZXh0ZXJuIGNoYXIqIGNvbW1hbmRfbGluZV9wZWVrX3dvcmQgKCk7CitleHRlcm4gdm9pZCBjb21tYW5kX2xpbmVfZmx1c2ggKCk7CitleHRlcm4gaW50IGNvbW1hbmRfbGluZV9nZXRfd29yZF9jb3VudCAoKTsKK2V4dGVybiB2b2lkIGNvbW1hbmRfbGluZV9wcm9tcHRfd29yZHMgKGNvbnN0IGNoYXIqIHByb21wdCwgY29uc3QgY2hhciogZGVmLAorCQkJCSAgICAgICBjb25zdCBTdHJMaXN0KiBwb3NzaWJpbGl0aWVzLAorCQkJCSAgICAgICBpbnQgbXVsdGlfd29yZCk7CitleHRlcm4gY2hhciogY29tbWFuZF9saW5lX2dldF93b3JkIChjb25zdCBjaGFyKiBwcm9tcHQsIGNvbnN0IGNoYXIqIGRlZiwKKwkJCQkgICAgY29uc3QgU3RyTGlzdCogcG9zc2liaWxpdGllcywKKwkJCQkgICAgaW50IG11bHRpX3dvcmQpOworZXh0ZXJuIGludCBjb21tYW5kX2xpbmVfZ2V0X2ludGVnZXIgKGNvbnN0IGNoYXIqIHByb21wdCwgaW50KiB2YWx1ZSk7CitleHRlcm4gaW50IGNvbW1hbmRfbGluZV9nZXRfc2VjdG9yIChjb25zdCBjaGFyKiBwcm9tcHQsIFBlZERldmljZSogZGV2LAorCQkJCSAgICBQZWRTZWN0b3IqIHZhbHVlLCBQZWRHZW9tZXRyeSoqIHJhbmdlKTsKK2V4dGVybiBpbnQgY29tbWFuZF9saW5lX2dldF9zdGF0ZSAoY29uc3QgY2hhciogcHJvbXB0LCBpbnQqIHZhbHVlKTsKK2V4dGVybiBpbnQgY29tbWFuZF9saW5lX2dldF9kZXZpY2UgKGNvbnN0IGNoYXIqIHByb21wdCwgUGVkRGV2aWNlKiogdmFsdWUpOworZXh0ZXJuIGludCBjb21tYW5kX2xpbmVfZ2V0X2Rpc2sgKGNvbnN0IGNoYXIqIHByb21wdCwgUGVkRGlzayoqIHZhbHVlKTsKK2V4dGVybiBpbnQgY29tbWFuZF9saW5lX2dldF9wYXJ0aXRpb24gKGNvbnN0IGNoYXIqIHByb21wdCwgUGVkRGlzayogZGlzaywKKwkJCQkgICAgICAgUGVkUGFydGl0aW9uKiogdmFsdWUpOworZXh0ZXJuIGludCBjb21tYW5kX2xpbmVfZ2V0X2ZzX3R5cGUgKGNvbnN0IGNoYXIqIHByb21wdCwKKwkJCQkgICAgIGNvbnN0IFBlZEZpbGVTeXN0ZW1UeXBlKigqIHZhbHVlKSk7CitleHRlcm4gaW50IGNvbW1hbmRfbGluZV9nZXRfZGlza190eXBlIChjb25zdCBjaGFyKiBwcm9tcHQsCisJCQkJICAgICAgIGNvbnN0IFBlZERpc2tUeXBlKigqIHZhbHVlKSk7CitleHRlcm4gaW50IGNvbW1hbmRfbGluZV9nZXRfcGFydF9mbGFnIChjb25zdCBjaGFyKiBwcm9tcHQsCisJCQkJICAgICAgIGNvbnN0IFBlZFBhcnRpdGlvbiogcGFydCwKKwkJCQkgICAgICAgUGVkUGFydGl0aW9uRmxhZyogZmxhZyk7CitleHRlcm4gaW50IGNvbW1hbmRfbGluZV9nZXRfcGFydF90eXBlIChjb25zdCBjaGFyKiBwcm9tcHQsIGNvbnN0IFBlZERpc2sqIGRpc2ssCisJCQkJICAgICAgIFBlZFBhcnRpdGlvblR5cGUqIHR5cGUpOworZXh0ZXJuIFBlZEV4Y2VwdGlvbk9wdGlvbiBjb21tYW5kX2xpbmVfZ2V0X2V4X29wdCAoY29uc3QgY2hhciogcHJvbXB0LAorCQkJCQkJICAgUGVkRXhjZXB0aW9uT3B0aW9uIG9wdGlvbnMpOworZXh0ZXJuIGludCBjb21tYW5kX2xpbmVfZ2V0X3VuaXQgKGNvbnN0IGNoYXIqIHByb21wdCwgUGVkVW5pdCogdW5pdCk7CisKK2V4dGVybiBpbnQgY29tbWFuZF9saW5lX2lzX2ludGVnZXIgKCk7CitleHRlcm4gaW50IGNvbW1hbmRfbGluZV9pc19zZWN0b3IgKCk7CisKK2V4dGVybiB2b2lkIGhlbHBfbXNnICgpOworCitleHRlcm4gdm9pZCBwcmludF91c2luZ19kZXYgKFBlZERldmljZSogZGV2KTsKKworLyogaW4gcGFydGVkLmMgKi8KK2V4dGVybiBpbnQJb3B0X3NjcmlwdF9tb2RlOworZXh0ZXJuIGludAlwcmV0ZW5kX2lucHV0X3R0eTsKKworZXh0ZXJuIHZvaWQgcHJpbnRfb3B0aW9uc19oZWxwICgpOworZXh0ZXJuIHZvaWQgcHJpbnRfY29tbWFuZHNfaGVscCAoKTsKKworCisjZW5kaWYgLyogVUlfSF9JTkNMVURFRCAqLwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L3BhcnRwcm9iZS9NYWtlZmlsZS5hbSBiL3BhcnRlZC0xLjguNy9wYXJ0cHJvYmUvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JiOTU1ZgotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9wYXJ0cHJvYmUvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSwxNyBAQAorcGFydGVkaW5jbHVkZWRpciAgICAgID0gLUkkKHRvcF9zcmNkaXIpL2xpYiAtSSQodG9wX3NyY2RpcikvaW5jbHVkZQorCitzYmluX1BST0dSQU1TID0gcGFydHByb2JlCisKK3BhcnRwcm9iZV9TT1VSQ0VTID0gcGFydHByb2JlLmMKKworcGFydHByb2JlX0xEQUREID0gXAorICAkKHRvcF9idWlsZGRpcikvbGliL2xpYnBhcnRlZC5sYSBcCisgICQodG9wX2J1aWxkZGlyKS9saWJwYXJ0ZWQvbGlicGFydGVkLmxhIFwKKyAgJChJTlRMTElCUykgJChMSUJTKSBcCisgICQoUEFSVEVEX0xJQlMpCisKK3BhcnRwcm9iZV9MREZMQUdTID0gJChQQVJURURMREZMQUdTKQorCitJTkNMVURFUwk9ICQocGFydGVkaW5jbHVkZWRpcikgJChJTlRMSU5DUykKKworTUFJTlRBSU5FUkNMRUFORklMRVMgPSBNYWtlZmlsZS5pbgpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L3BhcnRwcm9iZS9NYWtlZmlsZS5pbiBiL3BhcnRlZC0xLjguNy9wYXJ0cHJvYmUvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc1ZmMwMwotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9wYXJ0cHJvYmUvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw2NjMgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTAgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorCitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorc2Jpbl9QUk9HUkFNUyA9IHBhcnRwcm9iZSQoRVhFRVhUKQorc3ViZGlyID0gcGFydHByb2JlCitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200L2Fic29sdXRlLWhlYWRlci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9hbGxvY2EubTQgJCh0b3Bfc3JjZGlyKS9tNC9hc3NlcnQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvYXRleGl0Lm00ICQodG9wX3NyY2RpcikvbTQvY2FsbG9jLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2Nsb3NlLXN0cmVhbS5tNCAkKHRvcF9zcmNkaXIpL200L2Nsb3Nlb3V0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NvZGVzZXQubTQgJCh0b3Bfc3JjZGlyKS9tNC9jb25maWctaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9kaXJuYW1lLm00ICQodG9wX3NyY2RpcikvbTQvZG9zLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2RvdWJsZS1zbGFzaC1yb290Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2Vycm9yLm00ICQodG9wX3NyY2RpcikvbTQvZXhpdGZhaWwubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZXh0ZW5zaW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2ZwZW5kaW5nLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ZyZWUubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXRvcHQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCAkKHRvcF9zcmNkaXIpL200L2dsaWJjMjEubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZ251bGliLWNvbW1vbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9nbnVsaWItY29tcC5tNCAkKHRvcF9zcmNkaXIpL200L2ljb252Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2lubGluZS5tNCAkKHRvcF9zcmNkaXIpL200L2ludHR5cGVzLXByaS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pbnR0eXBlcy5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1pZ25vcmUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sb2NhbGNoYXJzZXQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbG9uZy1vcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbG9uZ2xvbmcubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWJydG93Yy5tNCAkKHRvcF9zcmNkaXIpL200L21ic3RhdGVfdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tZW1jaHIubTQgJCh0b3Bfc3JjZGlyKS9tNC9tZW1jbXAubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWVtY3B5Lm00ICQodG9wX3NyY2RpcikvbTQvbWVtbW92ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tZW1zZXQubTQgJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcG8ubTQgJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9xdW90ZWFyZy5tNCAkKHRvcF9zcmNkaXIpL200L3JlZ2V4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3JlbmFtZS5tNCAkKHRvcF9zcmNkaXIpL200L3JwbWF0Y2gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc2FmZS1yZWFkLm00ICQodG9wX3NyY2RpcikvbTQvc2FmZS13cml0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zc2l6ZV90Lm00ICQodG9wX3NyY2RpcikvbTQvc3RkYXJnLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0ZGJvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGRpbnQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3RkbGliX2gubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdHJjc3BuLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0cmluZ19oLm00ICQodG9wX3NyY2RpcikvbTQvc3RybmR1cC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdHJubGVuLm00ICQodG9wX3NyY2RpcikvbTQvc3RydG9kLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0cnRvbC5tNCAkKHRvcF9zcmNkaXIpL200L3VuaXN0ZF9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3V0aW1idWYubTQgJCh0b3Bfc3JjZGlyKS9tNC91dGltZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC91dGltZXMtbnVsbC5tNCAkKHRvcF9zcmNkaXIpL200L3djaGFyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3djdHlwZS5tNCAkKHRvcF9zcmNkaXIpL200L3dpbnRfdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC94YWxsb2MubTQgJCh0b3Bfc3JjZGlyKS9tNC94c3RybmR1cC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oCitDT05GSUdfQ0xFQU5fRklMRVMgPQorYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKHNiaW5kaXIpIgorc2JpblBST0dSQU1TX0lOU1RBTEwgPSAkKElOU1RBTExfUFJPR1JBTSkKK1BST0dSQU1TID0gJChzYmluX1BST0dSQU1TKQorYW1fcGFydHByb2JlX09CSkVDVFMgPSBwYXJ0cHJvYmUuJChPQkpFWFQpCitwYXJ0cHJvYmVfT0JKRUNUUyA9ICQoYW1fcGFydHByb2JlX09CSkVDVFMpCithbV9fREVQRU5ERU5DSUVTXzEgPQorcGFydHByb2JlX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWIvbGlicGFydGVkLmxhIFwKKwkkKHRvcF9idWlsZGRpcikvbGlicGFydGVkL2xpYnBhcnRlZC5sYSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAorCSQoYW1fX0RFUEVOREVOQ0lFU18xKSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKK3BhcnRwcm9iZV9MSU5LID0gJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAorCSQocGFydHByb2JlX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKK0RFRkFVTFRfSU5DTFVERVMgPSAtSS4gLUkkKHRvcF9idWlsZGRpcikvbGliQGFtX19pc3JjQAorZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L2RlcGNvbXAKK2FtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCitDT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKKwkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitMVENPTVBJTEUgPSAkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorCS0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSBcCisJJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorQ0NMRCA9ICQoQ0MpCitMSU5LID0gJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIFwKKwktLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSBcCisJJChMREZMQUdTKSAtbyAkQAorU09VUkNFUyA9ICQocGFydHByb2JlX1NPVVJDRVMpCitESVNUX1NPVVJDRVMgPSAkKHBhcnRwcm9iZV9TT1VSQ0VTKQorRVRBR1MgPSBldGFncworQ1RBR1MgPSBjdGFncworRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FCU09MVVRFX0lOVFRZUEVTX0ggPSBAQUJTT0xVVEVfSU5UVFlQRVNfSEAKK0FCU09MVVRFX1NURElOVF9IID0gQEFCU09MVVRFX1NURElOVF9IQAorQUJTT0xVVEVfU1RETElCX0ggPSBAQUJTT0xVVEVfU1RETElCX0hACitBQlNPTFVURV9TVFJJTkdfSCA9IEBBQlNPTFVURV9TVFJJTkdfSEAKK0FCU09MVVRFX1VOSVNURF9IID0gQEFCU09MVVRFX1VOSVNURF9IQAorQUJTT0xVVEVfV0NIQVJfSCA9IEBBQlNPTFVURV9XQ0hBUl9IQAorQUJTT0xVVEVfV0NUWVBFX0ggPSBAQUJTT0xVVEVfV0NUWVBFX0hACitBQ0xPQ0FMID0gQEFDTE9DQUxACitBTExPQ0EgPSBAQUxMT0NBQAorQUxMT0NBX0ggPSBAQUxMT0NBX0hACitBTVRBUiA9IEBBTVRBUkAKK0FSID0gQEFSQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitCSVRTSVpFT0ZfUFRSRElGRl9UID0gQEJJVFNJWkVPRl9QVFJESUZGX1RACitCSVRTSVpFT0ZfU0lHX0FUT01JQ19UID0gQEJJVFNJWkVPRl9TSUdfQVRPTUlDX1RACitCSVRTSVpFT0ZfU0laRV9UID0gQEJJVFNJWkVPRl9TSVpFX1RACitCSVRTSVpFT0ZfV0NIQVJfVCA9IEBCSVRTSVpFT0ZfV0NIQVJfVEAKK0JJVFNJWkVPRl9XSU5UX1QgPSBAQklUU0laRU9GX1dJTlRfVEAKK0JVSUxESU5GTyA9IEBCVUlMRElORk9ACitDQyA9IEBDQ0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ0hFQ0tfQ0ZMQUdTID0gQENIRUNLX0NGTEFHU0AKK0NIRUNLX0xJQlMgPSBAQ0hFQ0tfTElCU0AKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RMX0xJQlMgPSBARExfTElCU0AKK0RNX0xJQlMgPSBARE1fTElCU0AKK0VDSE8gPSBARUNIT0AKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRVhFRVhUID0gQEVYRUVYVEAKK0Y3NyA9IEBGNzdACitGRkxBR1MgPSBARkZMQUdTQAorR0VUT1BUX0ggPSBAR0VUT1BUX0hACitHTElCQzIxID0gQEdMSUJDMjFACitHTVNHRk1UID0gQEdNU0dGTVRACitHTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKK0dOVUxJQl9DSE9XTiA9IEBHTlVMSUJfQ0hPV05ACitHTlVMSUJfRFVQMiA9IEBHTlVMSUJfRFVQMkAKK0dOVUxJQl9GQ0hESVIgPSBAR05VTElCX0ZDSERJUkAKK0dOVUxJQl9GVFJVTkNBVEUgPSBAR05VTElCX0ZUUlVOQ0FURUAKK0dOVUxJQl9HRVRDV0QgPSBAR05VTElCX0dFVENXREAKK0dOVUxJQl9HRVRMT0dJTl9SID0gQEdOVUxJQl9HRVRMT0dJTl9SQAorR05VTElCX0dFVFNVQk9QVCA9IEBHTlVMSUJfR0VUU1VCT1BUQAorR05VTElCX0lNQVhBQlMgPSBAR05VTElCX0lNQVhBQlNACitHTlVMSUJfSU1BWERJViA9IEBHTlVMSUJfSU1BWERJVkAKK0dOVUxJQl9NQlNDQVNFQ01QID0gQEdOVUxJQl9NQlNDQVNFQ01QQAorR05VTElCX01CU0NBU0VTVFIgPSBAR05VTElCX01CU0NBU0VTVFJACitHTlVMSUJfTUJTQ0hSID0gQEdOVUxJQl9NQlNDSFJACitHTlVMSUJfTUJTQ1NQTiA9IEBHTlVMSUJfTUJTQ1NQTkAKK0dOVUxJQl9NQlNMRU4gPSBAR05VTElCX01CU0xFTkAKK0dOVUxJQl9NQlNOQ0FTRUNNUCA9IEBHTlVMSUJfTUJTTkNBU0VDTVBACitHTlVMSUJfTUJTUEJSSyA9IEBHTlVMSUJfTUJTUEJSS0AKK0dOVUxJQl9NQlNQQ0FTRUNNUCA9IEBHTlVMSUJfTUJTUENBU0VDTVBACitHTlVMSUJfTUJTUkNIUiA9IEBHTlVMSUJfTUJTUkNIUkAKK0dOVUxJQl9NQlNTRVAgPSBAR05VTElCX01CU1NFUEAKK0dOVUxJQl9NQlNTUE4gPSBAR05VTElCX01CU1NQTkAKK0dOVUxJQl9NQlNTVFIgPSBAR05VTElCX01CU1NUUkAKK0dOVUxJQl9NQlNUT0tfUiA9IEBHTlVMSUJfTUJTVE9LX1JACitHTlVMSUJfTUVNTUVNID0gQEdOVUxJQl9NRU1NRU1ACitHTlVMSUJfTUVNUENQWSA9IEBHTlVMSUJfTUVNUENQWUAKK0dOVUxJQl9NRU1SQ0hSID0gQEdOVUxJQl9NRU1SQ0hSQAorR05VTElCX01LRFRFTVAgPSBAR05VTElCX01LRFRFTVBACitHTlVMSUJfTUtTVEVNUCA9IEBHTlVMSUJfTUtTVEVNUEAKK0dOVUxJQl9SRUFETElOSyA9IEBHTlVMSUJfUkVBRExJTktACitHTlVMSUJfU0xFRVAgPSBAR05VTElCX1NMRUVQQAorR05VTElCX1NUUENQWSA9IEBHTlVMSUJfU1RQQ1BZQAorR05VTElCX1NUUE5DUFkgPSBAR05VTElCX1NUUE5DUFlACitHTlVMSUJfU1RSQ0FTRVNUUiA9IEBHTlVMSUJfU1RSQ0FTRVNUUkAKK0dOVUxJQl9TVFJDSFJOVUwgPSBAR05VTElCX1NUUkNIUk5VTEAKK0dOVUxJQl9TVFJEVVAgPSBAR05VTElCX1NUUkRVUEAKK0dOVUxJQl9TVFJORFVQID0gQEdOVUxJQl9TVFJORFVQQAorR05VTElCX1NUUk5MRU4gPSBAR05VTElCX1NUUk5MRU5ACitHTlVMSUJfU1RSUEJSSyA9IEBHTlVMSUJfU1RSUEJSS0AKK0dOVUxJQl9TVFJTRVAgPSBAR05VTElCX1NUUlNFUEAKK0dOVUxJQl9TVFJUT0lNQVggPSBAR05VTElCX1NUUlRPSU1BWEAKK0dOVUxJQl9TVFJUT0tfUiA9IEBHTlVMSUJfU1RSVE9LX1JACitHTlVMSUJfU1RSVE9VTUFYID0gQEdOVUxJQl9TVFJUT1VNQVhACitHUkVQID0gQEdSRVBACitIQVZFX0RFQ0xfR0VUTE9HSU5fUiA9IEBIQVZFX0RFQ0xfR0VUTE9HSU5fUkAKK0hBVkVfREVDTF9JTUFYQUJTID0gQEhBVkVfREVDTF9JTUFYQUJTQAorSEFWRV9ERUNMX0lNQVhESVYgPSBASEFWRV9ERUNMX0lNQVhESVZACitIQVZFX0RFQ0xfTUVNTUVNID0gQEhBVkVfREVDTF9NRU1NRU1ACitIQVZFX0RFQ0xfTUVNUkNIUiA9IEBIQVZFX0RFQ0xfTUVNUkNIUkAKK0hBVkVfREVDTF9TVFJEVVAgPSBASEFWRV9ERUNMX1NUUkRVUEAKK0hBVkVfREVDTF9TVFJOQ0FTRUNNUCA9IEBIQVZFX0RFQ0xfU1RSTkNBU0VDTVBACitIQVZFX0RFQ0xfU1RSTkRVUCA9IEBIQVZFX0RFQ0xfU1RSTkRVUEAKK0hBVkVfREVDTF9TVFJOTEVOID0gQEhBVkVfREVDTF9TVFJOTEVOQAorSEFWRV9ERUNMX1NUUlRPSU1BWCA9IEBIQVZFX0RFQ0xfU1RSVE9JTUFYQAorSEFWRV9ERUNMX1NUUlRPS19SID0gQEhBVkVfREVDTF9TVFJUT0tfUkAKK0hBVkVfREVDTF9TVFJUT1VNQVggPSBASEFWRV9ERUNMX1NUUlRPVU1BWEAKK0hBVkVfRFVQMiA9IEBIQVZFX0RVUDJACitIQVZFX0ZUUlVOQ0FURSA9IEBIQVZFX0ZUUlVOQ0FURUAKK0hBVkVfR0VUU1VCT1BUID0gQEhBVkVfR0VUU1VCT1BUQAorSEFWRV9JTlRUWVBFU19IID0gQEhBVkVfSU5UVFlQRVNfSEAKK0hBVkVfSVNXQ05UUkwgPSBASEFWRV9JU1dDTlRSTEAKK0hBVkVfTE9OR19MT05HX0lOVCA9IEBIQVZFX0xPTkdfTE9OR19JTlRACitIQVZFX01FTVBDUFkgPSBASEFWRV9NRU1QQ1BZQAorSEFWRV9NS0RURU1QID0gQEhBVkVfTUtEVEVNUEAKK0hBVkVfUkVBRExJTksgPSBASEFWRV9SRUFETElOS0AKK0hBVkVfU0lHTkVEX1NJR19BVE9NSUNfVCA9IEBIQVZFX1NJR05FRF9TSUdfQVRPTUlDX1RACitIQVZFX1NJR05FRF9XQ0hBUl9UID0gQEhBVkVfU0lHTkVEX1dDSEFSX1RACitIQVZFX1NJR05FRF9XSU5UX1QgPSBASEFWRV9TSUdORURfV0lOVF9UQAorSEFWRV9TTEVFUCA9IEBIQVZFX1NMRUVQQAorSEFWRV9TVERJTlRfSCA9IEBIQVZFX1NURElOVF9IQAorSEFWRV9TVFBDUFkgPSBASEFWRV9TVFBDUFlACitIQVZFX1NUUE5DUFkgPSBASEFWRV9TVFBOQ1BZQAorSEFWRV9TVFJDQVNFQ01QID0gQEhBVkVfU1RSQ0FTRUNNUEAKK0hBVkVfU1RSQ0FTRVNUUiA9IEBIQVZFX1NUUkNBU0VTVFJACitIQVZFX1NUUkNIUk5VTCA9IEBIQVZFX1NUUkNIUk5VTEAKK0hBVkVfU1RSTkRVUCA9IEBIQVZFX1NUUk5EVVBACitIQVZFX1NUUlBCUksgPSBASEFWRV9TVFJQQlJLQAorSEFWRV9TVFJTRVAgPSBASEFWRV9TVFJTRVBACitIQVZFX1NZU19CSVRZUEVTX0ggPSBASEFWRV9TWVNfQklUWVBFU19IQAorSEFWRV9TWVNfSU5UVFlQRVNfSCA9IEBIQVZFX1NZU19JTlRUWVBFU19IQAorSEFWRV9TWVNfVFlQRVNfSCA9IEBIQVZFX1NZU19UWVBFU19IQAorSEFWRV9VTklTVERfSCA9IEBIQVZFX1VOSVNURF9IQAorSEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UID0gQEhBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVEAKK0hBVkVfV0NUWVBFX0ggPSBASEFWRV9XQ1RZUEVfSEAKK0hBVkVfV0lOVF9UID0gQEhBVkVfV0lOVF9UQAorSEFWRV9fQk9PTCA9IEBIQVZFX19CT09MQAorSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitJTlRMSU5DUyA9IEBJTlRMSU5DU0AKK0lOVExMSUJTID0gQElOVExMSUJTQAorSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAorSU5UVFlQRVNfSCA9IEBJTlRUWVBFU19IQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCSUNPTlYgPSBATElCSUNPTlZACitMSUJJTlRMID0gQExJQklOVExACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQExJQlNACitMSUJUT09MID0gQExJQlRPT0xACitMTl9TID0gQExOX1NACitMVEFMTE9DQSA9IEBMVEFMTE9DQUAKK0xUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKK0xUTElCSU5UTCA9IEBMVExJQklOVExACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTFRfQUdFID0gQExUX0FHRUAKK0xUX0NVUlJFTlQgPSBATFRfQ1VSUkVOVEAKK0xUX1JFTEVBU0UgPSBATFRfUkVMRUFTRUAKK0xUX1JFVklTSU9OID0gQExUX1JFVklTSU9OQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitNS0RJUl9QID0gQE1LRElSX1BACitNU0dGTVQgPSBATVNHRk1UQAorTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAorTVNHTUVSR0UgPSBATVNHTUVSR0VACitPQkpFWFQgPSBAT0JKRVhUQAorT1MgPSBAT1NACitPU19MSUJTID0gQE9TX0xJQlNACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFSVEVETERGTEFHUyA9IEBQQVJURURMREZMQUdTQAorUEFSVEVEX0xJQlMgPSBAUEFSVEVEX0xJQlNACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKK1BPU1VCID0gQFBPU1VCQAorUE9XX0xJQiA9IEBQT1dfTElCQAorUFJJUFRSX1BSRUZJWCA9IEBQUklQVFJfUFJFRklYQAorUFJJX01BQ1JPU19CUk9LRU4gPSBAUFJJX01BQ1JPU19CUk9LRU5ACitQVFJESUZGX1RfU1VGRklYID0gQFBUUkRJRkZfVF9TVUZGSVhACitSQU5MSUIgPSBAUkFOTElCQAorUkVJU0VSX0xJQlMgPSBAUkVJU0VSX0xJQlNACitSRVBMQUNFX0NIT1dOID0gQFJFUExBQ0VfQ0hPV05ACitSRVBMQUNFX0ZDSERJUiA9IEBSRVBMQUNFX0ZDSERJUkAKK1JFUExBQ0VfR0VUQ1dEID0gQFJFUExBQ0VfR0VUQ1dEQAorUkVQTEFDRV9NS1NURU1QID0gQFJFUExBQ0VfTUtTVEVNUEAKK1NFRCA9IEBTRURACitTRUxJTlVYX0xJQlMgPSBAU0VMSU5VWF9MSUJTQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NJR19BVE9NSUNfVF9TVUZGSVggPSBAU0lHX0FUT01JQ19UX1NVRkZJWEAKK1NJWkVfVF9TVUZGSVggPSBAU0laRV9UX1NVRkZJWEAKK1NUREJPT0xfSCA9IEBTVERCT09MX0hACitTVERJTlRfSCA9IEBTVERJTlRfSEAKK1NUUklQID0gQFNUUklQQAorVVNFX05MUyA9IEBVU0VfTkxTQAorVVVJRF9MSUJTID0gQFVVSURfTElCU0AKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1dDSEFSX0ggPSBAV0NIQVJfSEAKK1dDSEFSX1RfU1VGRklYID0gQFdDSEFSX1RfU1VGRklYQAorV0NUWVBFX0ggPSBAV0NUWVBFX0hACitXSU5UX1RfU1VGRklYID0gQFdJTlRfVF9TVUZGSVhACitYR0VUVEVYVCA9IEBYR0VUVEVYVEAKK1hHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9GNzcgPSBAYWNfY3RfRjc3QAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitidWlsZGRpciA9IEBidWlsZGRpckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZG9jZGlyID0gQGRvY2RpckAKK2R2aWRpciA9IEBkdmlkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2dsX0xJQk9CSlMgPSBAZ2xfTElCT0JKU0AKK2dsX0xUTElCT0JKUyA9IEBnbF9MVExJQk9CSlNACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorcGFydGVkaW5jbHVkZWRpciA9IC1JJCh0b3Bfc3JjZGlyKS9saWIgLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUKK3BhcnRwcm9iZV9TT1VSQ0VTID0gcGFydHByb2JlLmMKK3BhcnRwcm9iZV9MREFERCA9IFwKKyAgJCh0b3BfYnVpbGRkaXIpL2xpYi9saWJwYXJ0ZWQubGEgXAorICAkKHRvcF9idWlsZGRpcikvbGlicGFydGVkL2xpYnBhcnRlZC5sYSBcCisgICQoSU5UTExJQlMpICQoTElCUykgXAorICAkKFBBUlRFRF9MSUJTKQorCitwYXJ0cHJvYmVfTERGTEFHUyA9ICQoUEFSVEVETERGTEFHUykKK0lOQ0xVREVTID0gJChwYXJ0ZWRpbmNsdWRlZGlyKSAkKElOVExJTkNTKQorTUFJTlRBSU5FUkNMRUFORklMRVMgPSBNYWtlZmlsZS5pbgorYWxsOiBhbGwtYW0KKworLlNVRkZJWEVTOgorLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagorJChzcmNkaXIpL01ha2VmaWxlLmluOiAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggXAorCQkmJiBleGl0IDA7IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251ICBwYXJ0cHJvYmUvTWFrZWZpbGUnOyBcCisJY2QgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWdudSAgcGFydHByb2JlL01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAoraW5zdGFsbC1zYmluUFJPR1JBTVM6ICQoc2Jpbl9QUk9HUkFNUykKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwl0ZXN0IC16ICIkKHNiaW5kaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJChzYmluZGlyKSIKKwlAbGlzdD0nJChzYmluX1BST0dSQU1TKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgcDE9YGVjaG8gJCRwfHNlZCAncy8kKEVYRUVYVCkkJC8vJ2A7IFwKKwkgIGlmIHRlc3QgLWYgJCRwIFwKKwkgICAgIHx8IHRlc3QgLWYgJCRwMSBcCisJICA7IHRoZW4gXAorCSAgICBmPWBlY2hvICIkJHAxIiB8IHNlZCAncyxeLiovLCw7JCh0cmFuc2Zvcm0pO3MvJCQvJChFWEVFWFQpLydgOyBcCisJICAgZWNobyAiICQoSU5TVEFMTF9QUk9HUkFNX0VOVikgJChMSUJUT09MKSAtLW1vZGU9aW5zdGFsbCAkKHNiaW5QUk9HUkFNU19JTlNUQUxMKSAnJCRwJyAnJChERVNURElSKSQoc2JpbmRpcikvJCRmJyI7IFwKKwkgICAkKElOU1RBTExfUFJPR1JBTV9FTlYpICQoTElCVE9PTCkgLS1tb2RlPWluc3RhbGwgJChzYmluUFJPR1JBTVNfSU5TVEFMTCkgIiQkcCIgIiQoREVTVERJUikkKHNiaW5kaXIpLyQkZiIgfHwgZXhpdCAxOyBcCisJICBlbHNlIDo7IGZpOyBcCisJZG9uZQorCit1bmluc3RhbGwtc2JpblBST0dSQU1TOgorCUAkKE5PUk1BTF9VTklOU1RBTEwpCisJQGxpc3Q9JyQoc2Jpbl9QUk9HUkFNUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGY9YGVjaG8gIiQkcCIgfCBzZWQgJ3MsXi4qLywsO3MvJChFWEVFWFQpJCQvLzskKHRyYW5zZm9ybSk7cy8kJC8kKEVYRUVYVCkvJ2A7IFwKKwkgIGVjaG8gIiBybSAtZiAnJChERVNURElSKSQoc2JpbmRpcikvJCRmJyI7IFwKKwkgIHJtIC1mICIkKERFU1RESVIpJChzYmluZGlyKS8kJGYiOyBcCisJZG9uZQorCitjbGVhbi1zYmluUFJPR1JBTVM6CisJQGxpc3Q9JyQoc2Jpbl9QUk9HUkFNUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGY9YGVjaG8gJCRwfHNlZCAncy8kKEVYRUVYVCkkJC8vJ2A7IFwKKwkgIGVjaG8gIiBybSAtZiAkJHAgJCRmIjsgXAorCSAgcm0gLWYgJCRwICQkZiA7IFwKKwlkb25lCitwYXJ0cHJvYmUkKEVYRUVYVCk6ICQocGFydHByb2JlX09CSkVDVFMpICQocGFydHByb2JlX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIHBhcnRwcm9iZSQoRVhFRVhUKQorCSQocGFydHByb2JlX0xJTkspICQocGFydHByb2JlX09CSkVDVFMpICQocGFydHByb2JlX0xEQUREKSAkKExJQlMpCisKK21vc3RseWNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICouJChPQkpFWFQpCisKK2Rpc3RjbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLnRhYi5jCisKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9wYXJ0cHJvYmUuUG9AYW1fX3F1b3RlQAorCisuYy5vOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jICQ8CisKKy5jLm9iajoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jIGAkKENZR1BBVEhfVykgJyQ8J2AKKworLmMubG86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKKworSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAorCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAorCW1raWQgLWZJRCAkJHVuaXF1ZQordGFnczogVEFHUworCitUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXRhZ3M9OyBcCisJaGVyZT1gcHdkYDsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAorCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAorCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisJICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCisJICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICQkdGFncyAkJHVuaXF1ZTsgXAorCWZpCitjdGFnczogQ1RBR1MKK0NUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXRhZ3M9OyBcCisJaGVyZT1gcHdkYDsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAorCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAorCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSIgXAorCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorCSAgICAgJCR0YWdzICQkdW5pcXVlCisKK0dUQUdTOgorCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCisJICAmJiBjZCAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgJCRoZXJlCisKK2Rpc3RjbGVhbi10YWdzOgorCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgXAorCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKKwkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCisJICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAorCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKKwkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKKwkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKKwkJCSAgIHNvcnQgLXVgIDs7IFwKKwllc2FjOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtcFIgJChzcmNkaXIpLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1wUiAkJGQvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICQoZGlzdGRpcikvJCRmaWxlIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAkKGRpc3RkaXIpLyQkZmlsZSBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUgJChQUk9HUkFNUykKK2luc3RhbGxkaXJzOgorCWZvciBkaXIgaW4gIiQoREVTVERJUikkKHNiaW5kaXIpIjsgZG8gXAorCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAorCWRvbmUKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCisJICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCisJLXRlc3QgLXogIiQoTUFJTlRBSU5FUkNMRUFORklMRVMpIiB8fCBybSAtZiAkKE1BSU5UQUlORVJDTEVBTkZJTEVTKQorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tc2JpblBST0dSQU1TIFwKKwltb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi10YWdzCisKK2R2aTogZHZpLWFtCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1hbQorCitpbmZvOiBpbmZvLWFtCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbToKKworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCisKK2luc3RhbGwtZXhlYy1hbTogaW5zdGFsbC1zYmluUFJPR1JBTVMKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1tYW46CisKK2luc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQorCitpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtYW0KKworcGRmLWFtOgorCitwczogcHMtYW0KKworcHMtYW06CisKK3VuaW5zdGFsbC1hbTogdW5pbnN0YWxsLXNiaW5QUk9HUkFNUworCisuTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisKKy5QSE9OWTogQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKKwljbGVhbi1saWJ0b29sIGNsZWFuLXNiaW5QUk9HUkFNUyBjdGFncyBkaXN0Y2xlYW4gXAorCWRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIFwKKwlkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBcCisJaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgXAorCWluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIFwKKwlpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBcCisJaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKKwlpbnN0YWxsLXNiaW5QUk9HUkFNUyBpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBcCisJaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gXAorCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1jb21waWxlIFwKKwltb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCisJdGFncyB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1zYmluUFJPR1JBTVMKKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L3BhcnRwcm9iZS9wYXJ0cHJvYmUuYyBiL3BhcnRlZC0xLjguNy9wYXJ0cHJvYmUvcGFydHByb2JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY1OTEwMAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9wYXJ0cHJvYmUvcGFydHByb2JlLmMKQEAgLTAsMCArMSwyMTAgQEAKKy8qCisgICAgcGFydHByb2JlIC0gaW5mb3JtcyB0aGUgT1Mga2VybmVsIG9mIHBhcnRpdGlvbiBsYXlvdXQKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCisqLworCisvKiBpdCdzIGJlc3QgdG8gY29tcGlsZSB0aGlzIHdpdGg6CisgKgorICogCSBDRkxBR1M9LU9zIC4vY29uZmlndXJlIC0tZGlzYWJsZS1ubHMgLS1kaXNhYmxlLXNoYXJlZCAtLWRpc2FibGUtZGVidWcKKyAqIAkgCSAgICAtLWVuYWJsZS1kaXNjb3Zlci1vbmx5CisgKgorICogQW5kIHN0cmlwKDEpIGFmdGVyd2FyZHMhCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaW5jbHVkZSA8cGFydGVkL3BhcnRlZC5oPgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxnZXRvcHQuaD4KKworI2luY2x1ZGUgImNsb3Nlb3V0LmgiCisjaW5jbHVkZSAiY29uZmlnbWFrZS5oIgorI2luY2x1ZGUgInZlcnNpb24tZXRjLmgiCisKKyNpbmNsdWRlIDxsb2NhbGUuaD4KKyNpbmNsdWRlICJnZXR0ZXh0LmgiCisjaWYgISBFTkFCTEVfTkxTCisjIHVuZGVmIHRleHRkb21haW4KKyMgZGVmaW5lIHRleHRkb21haW4oRG9tYWlubmFtZSkgLyogZW1wdHkgKi8KKyMgdW5kZWYgYmluZHRleHRkb21haW4KKyMgZGVmaW5lIGJpbmR0ZXh0ZG9tYWluKERvbWFpbm5hbWUsIERpcm5hbWUpIC8qIGVtcHR5ICovCisjZW5kaWYKKworI3VuZGVmIF8KKyNkZWZpbmUgXyhtc2dpZCkgZ2V0dGV4dCAobXNnaWQpCisKKyNkZWZpbmUgQVVUSE9SUyBcCisgICI8aHR0cDovL3BhcnRlZC5hbGlvdGguZGViaWFuLm9yZy9jZ2ktYmluL3RyYWMuY2dpL2Jyb3dzZXIvQVVUSE9SUz4iCisKKy8qIFRoZSBvZmZpY2lhbCBuYW1lIG9mIHRoaXMgcHJvZ3JhbSAoZS5nLiwgbm8gYGcnIHByZWZpeCkuICAqLworI2RlZmluZSBQUk9HUkFNX05BTUUgInBhcnRwcm9iZSIKKworc3RhdGljIHN0cnVjdCBvcHRpb24gY29uc3QgbG9uZ19vcHRpb25zW10gPQorICB7CisgICAgeyJuby11cGRhdGUiLCBub19hcmd1bWVudCwgTlVMTCwgJ2QnfSwKKyAgICB7InN1bW1hcnkiLCBub19hcmd1bWVudCwgTlVMTCwgJ3MnfSwKKyAgICB7ImhlbHAiLCBub19hcmd1bWVudCwgTlVMTCwgJ2gnfSwKKyAgICB7InZlcnNpb24iLCBub19hcmd1bWVudCwgTlVMTCwgJ3YnfSwKKyAgICB7TlVMTCwgMCwgTlVMTCwgMH0KKyAgfTsKKworCitjaGFyICpwcm9ncmFtX25hbWU7CisKKy8qIGluaXRpYWxpemVkIHRvIDAgYWNjb3JkaW5nIHRvIHRoZSBsYW5ndWFnZSBsYXd5ZXJzICovCitzdGF0aWMgaW50CW9wdF9ub19wcm9iZTsKK3N0YXRpYyBpbnQJb3B0X3N1bW1hcnk7CisKK3N0YXRpYyB2b2lkCitzdW1tYXJ5IChQZWREaXNrKiBkaXNrKQoreworCVBlZFBhcnRpdGlvbioJd2FsazsKKworCXByaW50ZiAoIiVzOiAlcyBwYXJ0aXRpb25zIiwgZGlzay0+ZGV2LT5wYXRoLCBkaXNrLT50eXBlLT5uYW1lKTsKKwlmb3IgKHdhbGsgPSBkaXNrLT5wYXJ0X2xpc3Q7IHdhbGs7IHdhbGsgPSB3YWxrLT5uZXh0KSB7CisJCWlmICghcGVkX3BhcnRpdGlvbl9pc19hY3RpdmUgKHdhbGspKQorCQkJY29udGludWU7CisKKwkJcHJpbnRmICgiICVkIiwgd2Fsay0+bnVtKTsKKwkJaWYgKHdhbGstPnR5cGUgJiBQRURfUEFSVElUSU9OX0VYVEVOREVEKSB7CisJCQlQZWRQYXJ0aXRpb24qCWxvZ193YWxrOworCQkJaW50CQlpc19maXJzdCA9IDE7CisKKwkJCXByaW50ZiAoIiA8Iik7CisJCQlmb3IgKGxvZ193YWxrID0gd2Fsay0+cGFydF9saXN0OyBsb2dfd2FsazsKKwkJCSAgICAgbG9nX3dhbGsgPSBsb2dfd2Fsay0+bmV4dCkgeworCQkJCWlmICghcGVkX3BhcnRpdGlvbl9pc19hY3RpdmUgKGxvZ193YWxrKSkKKwkJCQkJY29udGludWU7CisJCQkJaWYgKCFpc19maXJzdCkKKwkJCQkJcHJpbnRmICgiICIpOworCQkJCXByaW50ZiAoIiVkIiwgbG9nX3dhbGstPm51bSk7CisJCQkJaXNfZmlyc3QgPSAwOworCQkJfQorCQkJcHJpbnRmICgiPiIpOworCQl9CisJfQorCXByaW50ZiAoIlxuIik7Cit9CisKK3N0YXRpYyBpbnQKK3Byb2Nlc3NfZGV2IChQZWREZXZpY2UqIGRldikKK3sKKwlQZWREaXNrVHlwZSoJZGlza190eXBlOworCVBlZERpc2sqCWRpc2s7CisKKwlkaXNrX3R5cGUgPSBwZWRfZGlza19wcm9iZSAoZGV2KTsKKwlpZiAoIWRpc2tfdHlwZSB8fCAhc3RyY21wIChkaXNrX3R5cGUtPm5hbWUsICJsb29wIikpCisJCXJldHVybiAxOworCisJZGlzayA9IHBlZF9kaXNrX25ldyAoZGV2KTsKKwlpZiAoIWRpc2spCisJCWdvdG8gZXJyb3I7CisJaWYgKCFvcHRfbm9fcHJvYmUpIHsKKwkJaWYgKCFwZWRfZGlza19jb21taXRfdG9fb3MgKGRpc2spKQorCQkJZ290byBlcnJvcl9kZXN0cm95X2Rpc2s7CisJfQorCWlmIChvcHRfc3VtbWFyeSkKKwkJc3VtbWFyeSAoZGlzayk7CisJcGVkX2Rpc2tfZGVzdHJveSAoZGlzayk7CisJcmV0dXJuIDE7CisKK2Vycm9yX2Rlc3Ryb3lfZGlzazoKKwlwZWRfZGlza19kZXN0cm95IChkaXNrKTsKK2Vycm9yOgorCXJldHVybiAwOworfQorCit2b2lkCit1c2FnZSAoaW50IHN0YXR1cykKK3sKKyAgaWYgKHN0YXR1cyAhPSBFWElUX1NVQ0NFU1MpCisgICAgZnByaW50ZiAoc3RkZXJyLCBfKCJUcnkgYCVzIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4iKSwKKwkgICAgIHByb2dyYW1fbmFtZSk7CisgIGVsc2UKKyAgICB7CisgICAgICBwcmludGYgKF8oIlVzYWdlOiAlcyBbT1BUSU9OXSBbREVWSUNFXS4uLlxuIiksIFBST0dSQU1fTkFNRSk7CisgICAgICBmcHV0cyAoXygiXAorSW5mb3JtIHRoZSBPUyBvZiBwYXJ0aXRpb24gdGFibGUgY2hhbmdlcy5cblwKK1xuXAorICAtZCwgLS1uby11cGRhdGUgIGRvbid0IHVwZGF0ZSB0aGUga2VybmVsXG5cCisgIC1zLCAtLXN1bW1hcnkgICAgcHJpbnQgYSBzdW1tYXJ5IG9mIGNvbnRlbnRzXG5cCisgIC1oLCAtLWhlbHAgICAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXRcblwKKyAgLXYsIC0tdmVyc2lvbiAgICBvdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdFxuXAorIiksIHN0ZG91dCk7CisgICAgICBmcHV0cyAoXygiXAorXG5cCitXaXRoIG5vIERFVklDRSwgcHJvYmUgYWxsIHBhcnRpdGlvbnMuXG5cCisiKSwgc3Rkb3V0KTsKKyAgICAgIHByaW50ZiAoXygiXG5SZXBvcnQgYnVncyB0byA8JXM+LlxuIiksIFBBQ0tBR0VfQlVHUkVQT1JUKTsKKyAgICB9CisgIGV4aXQgKHN0YXR1cyk7Cit9CisKK2ludAorbWFpbiAoaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKK3sKKwlpbnQJCXN0YXR1cyA9IDA7CisKKwlwcm9ncmFtX25hbWUgPSBhcmd2WzBdOworCWF0ZXhpdCAoY2xvc2Vfc3Rkb3V0KTsKKworCWludCBjOworCXdoaWxlICgoYyA9IGdldG9wdF9sb25nIChhcmdjLCBhcmd2LCAiZGhzdiIsIGxvbmdfb3B0aW9ucywgTlVMTCkpICE9IC0xKQorCQlzd2l0Y2ggKGMpIHsKKwkJCWNhc2UgJ2QnOgorCQkJCW9wdF9ub19wcm9iZSA9IDE7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgJ3MnOgorCQkJCW9wdF9zdW1tYXJ5ID0gMTsKKwkJCQlicmVhazsKKworCQkJY2FzZSAnaCc6CisJCQkJdXNhZ2UgKEVYSVRfU1VDQ0VTUyk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgJ3YnOgorCQkJCXZlcnNpb25fZXRjIChzdGRvdXQsIFBST0dSQU1fTkFNRSwgUEFDS0FHRV9OQU1FLAorCQkJCSAgICAgICAgICAgICBWRVJTSU9OLCBBVVRIT1JTLCAoY2hhciAqKSBOVUxMKTsKKwkJCQlleGl0IChFWElUX1NVQ0NFU1MpOworCQkJCWJyZWFrOworCisJCQlkZWZhdWx0OgorCQkJCXVzYWdlIChFWElUX0ZBSUxVUkUpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICBpbnQgbl9kZXYgPSBhcmdjIC0gb3B0aW5kOworCWlmIChuX2RldiAhPSAwKSB7CisJCWludCBpOworCQlmb3IgKGkgPSBvcHRpbmQ7IGkgPCBhcmdjOyBpKyspIHsKKwkJCVBlZERldmljZSAqZGV2ID0gcGVkX2RldmljZV9nZXQgKGFyZ3ZbaV0pOworCQkJaWYgKGRldiA9PSBOVUxMIHx8IHByb2Nlc3NfZGV2IChkZXYpID09IDApCisJCQkJc3RhdHVzID0gMTsKKwkJfQorCX0gZWxzZSB7CisJCXBlZF9kZXZpY2VfcHJvYmVfYWxsICgpOworCQlQZWREZXZpY2UgKmRldjsKKwkJZm9yIChkZXYgPSBwZWRfZGV2aWNlX2dldF9uZXh0IChOVUxMKTsgZGV2OworCQkgICAgIGRldiA9IHBlZF9kZXZpY2VfZ2V0X25leHQgKGRldikpCisJCQlpZiAocHJvY2Vzc19kZXYgKGRldikgPT0gMCkKKwkJCQlzdGF0dXMgPSAxOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvcG8vQ2hhbmdlTG9nLjAgYi9wYXJ0ZWQtMS44LjcvcG8vQ2hhbmdlTG9nLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYxOWM5ZgotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9wby9DaGFuZ2VMb2cuMApAQCAtMCwwICsxLDUyIEBACisyMDA0LTAzLTExICBnZXR0ZXh0aXplICA8YnVnLWdudS1nZXR0ZXh0QGdudS5vcmc+CisKKwkqIE1ha2VmaWxlLmluLmluOiBVcGdyYWRlIHRvIGdldHRleHQtMC4xNC4xLgorCSogYm9sZHF1b3Quc2VkOiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKwkqIGVuQGJvbGRxdW90LmhlYWRlcjogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisJKiBlbkBxdW90LmhlYWRlcjogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisJKiBpbnNlcnQtaGVhZGVyLnNpbjogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisJKiBxdW90LnNlZDogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisJKiByZW1vdmUtcG90Y2RhdGUuc2luOiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKwkqIFJ1bGVzLXF1b3Q6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorCisyMDAzLTA2LTEzICBnZXR0ZXh0aXplICA8YnVnLWdudS11dGlsc0BnbnUub3JnPgorCisJKiBNYWtlZmlsZS5pbi5pbjogVXBncmFkZSB0byBnZXR0ZXh0LTAuMTAuNDAuCisKKzIwMDItMTEtMTUgIGdldHRleHRpemUgIDxidWctZ251LXV0aWxzQGdudS5vcmc+CisKKwkqIE1ha2VmaWxlLmluLmluOiBVcGdyYWRlIHRvIGdldHRleHQtMC4xMC40MC4KKworMjAwMS0xMi0zMSAgZ2V0dGV4dGl6ZSAgPGJ1Zy1nbnUtdXRpbHNAZ251Lm9yZz4KKworCSogTWFrZWZpbGUuaW4uaW46IFVwZ3JhZGUgdG8gZ2V0dGV4dC0wLjEwLjQwLgorCisyMDAxLTEyLTI3ICBnZXR0ZXh0aXplICA8YnVnLWdudS11dGlsc0BnbnUub3JnPgorCisJKiBNYWtlZmlsZS5pbi5pbjogVXBncmFkZSB0byBnZXR0ZXh0LTAuMTAuNDAuCisKKzIwMDEtMTItMTYgIGdldHRleHRpemUgIDxidWctZ251LXV0aWxzQGdudS5vcmc+CisKKwkqIE1ha2VmaWxlLmluLmluOiBVcGdyYWRlIHRvIGdldHRleHQtMC4xMC40MC4KKworMjAwMS0xMi0xMiAgZ2V0dGV4dGl6ZSAgPGJ1Zy1nbnUtdXRpbHNAZ251Lm9yZz4KKworCSogTWFrZWZpbGUuaW4uaW46IFVwZ3JhZGUgdG8gZ2V0dGV4dC0wLjEwLjQwLgorCisyMDAxLTExLTA5ICBnZXR0ZXh0aXplICA8YnVnLWdudS11dGlsc0BnbnUub3JnPgorCisJKiBNYWtlZmlsZS5pbi5pbjogVXBncmFkZSB0byBnZXR0ZXh0LTAuMTAuNDAuCisKKzIwMDEtMDctMTQgIGdldHRleHRpemUgIDxidWctZ251LXV0aWxzQGdudS5vcmc+CisKKwkqIE1ha2VmaWxlLmluLmluOiBVcGdyYWRlIHRvIGdldHRleHQtMC4xMC4zOC4KKwkqIGNhdC1pZC10YmwuYzogUmVtb3ZlIGZpbGUuCisJKiBzdGFtcC1jYXQtaWQ6IFJlbW92ZSBmaWxlLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgUGFydGVkCitDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEluYy4KKworVGhpcyBmaWxlIG1heSBiZSBtb2RpZmllZCBhbmQvb3IgZGlzdHJpYnV0ZWQgd2l0aG91dCByZXN0cmljdGlvbi4gIFRoaXMgaXMKK25vdCBhbiBpbnZpdGF0aW9uIHRvIG1pc3JlcHJlc2VudCB0aGUgaGlzdG9yeSBvZiBHTlUgUGFydGVkLgpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L3BvL0xJTkdVQVMgYi9wYXJ0ZWQtMS44LjcvcG8vTElOR1VBUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjQ2NzY1Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L3BvL0xJTkdVQVMKQEAgLTAsMCArMSwyNCBAQAorY2EKK2NzCitkYQorZGUKK2VzCitmcgorZ2wKK2lkCitpdAoramEKK25sCitubgorcGwKK3B0CitwdF9CUgorcm8KK3J1Citydworc3YKK3RyCit1awordmkKK3poX0NOCit6aF9UVwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L3BvL01ha2VmaWxlLmluLmluIGIvcGFydGVkLTEuOC43L3BvL01ha2VmaWxlLmluLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3ZDFhYjIKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvcG8vTWFrZWZpbGUuaW4uaW4KQEAgLTAsMCArMSwzOTUgQEAKKyMgLSotIGJ1ZmZlci1yZWFkLW9ubHk6IHQgLSotIHZpOiBzZXQgcm86CisjIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEKKyMgTWFrZWZpbGUgZm9yIFBPIGRpcmVjdG9yeSBpbiBhbnkgcGFja2FnZSB1c2luZyBHTlUgZ2V0dGV4dC4KKyMgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTcsIDIwMDAtMjAwNiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBnbnUuYWkubWl0LmVkdT4KKyMKKyMgVGhpcyBmaWxlIGNhbiBiZSBjb3BpZWQgYW5kIHVzZWQgZnJlZWx5IHdpdGhvdXQgcmVzdHJpY3Rpb25zLiAgSXQgY2FuCisjIGJlIHVzZWQgaW4gcHJvamVjdHMgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGJ1dCB3aGljaCBzdGlsbCB3YW50IHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdOVSBnZXR0ZXh0CisjIGZ1bmN0aW9uYWxpdHkuCisjIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCBjb2RlIG9mIEdOVSBnZXR0ZXh0IGlzIGNvdmVyZWQgYnkgdGhlIEdOVQorIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCBpcyAqbm90KiBpbiB0aGUgcHVibGljIGRvbWFpbi4KKyMKKyMgT3JpZ2luOiBnZXR0ZXh0LTAuMTUKKworUEFDS0FHRSA9IEBQQUNLQUdFQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACisKK1NIRUxMID0gL2Jpbi9zaAorQFNFVF9NQUtFQAorCitzcmNkaXIgPSBAc3JjZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorVlBBVEggPSBAc3JjZGlyQAorCitwcmVmaXggPSBAcHJlZml4QAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitnZXR0ZXh0c3JjZGlyID0gJChkYXRhZGlyKS9nZXR0ZXh0L3BvCisKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitta2luc3RhbGxkaXJzID0gJChTSEVMTCkgQGluc3RhbGxfc2hAIC1kCitta2Rpcl9wID0gQG1rZGlyX3BACisKK0dNU0dGTVRfID0gQEdNU0dGTVRACitHTVNHRk1UX25vID0gQEdNU0dGTVRACitHTVNHRk1UX3llcyA9IEBHTVNHRk1UXzAxNUAKK0dNU0dGTVQgPSAkKEdNU0dGTVRfJChVU0VfTVNHQ1RYVCkpCitNU0dGTVRfID0gQE1TR0ZNVEAKK01TR0ZNVF9ubyA9IEBNU0dGTVRACitNU0dGTVRfeWVzID0gQE1TR0ZNVF8wMTVACitNU0dGTVQgPSAkKE1TR0ZNVF8kKFVTRV9NU0dDVFhUKSkKK1hHRVRURVhUXyA9IEBYR0VUVEVYVEAKK1hHRVRURVhUX25vID0gQFhHRVRURVhUQAorWEdFVFRFWFRfeWVzID0gQFhHRVRURVhUXzAxNUAKK1hHRVRURVhUID0gJChYR0VUVEVYVF8kKFVTRV9NU0dDVFhUKSkKK01TR01FUkdFID0gbXNnbWVyZ2UKK01TR01FUkdFX1VQREFURSA9IEBNU0dNRVJHRUAgLS11cGRhdGUKK01TR0lOSVQgPSBtc2dpbml0CitNU0dDT05WID0gbXNnY29udgorTVNHRklMVEVSID0gbXNnZmlsdGVyCisKK1BPRklMRVMgPSBAUE9GSUxFU0AKK0dNT0ZJTEVTID0gQEdNT0ZJTEVTQAorVVBEQVRFUE9GSUxFUyA9IEBVUERBVEVQT0ZJTEVTQAorRFVNTVlQT0ZJTEVTID0gQERVTU1ZUE9GSUxFU0AKK0RJU1RGSUxFUy5jb21tb24gPSBNYWtlZmlsZS5pbi5pbiByZW1vdmUtcG90Y2RhdGUuc2luIFwKKyQoRElTVEZJTEVTLmNvbW1vbi5leHRyYTEpICQoRElTVEZJTEVTLmNvbW1vbi5leHRyYTIpICQoRElTVEZJTEVTLmNvbW1vbi5leHRyYTMpCitESVNURklMRVMgPSAkKERJU1RGSUxFUy5jb21tb24pIE1ha2V2YXJzIFBPVEZJTEVTLmluIFwKKyQoUE9GSUxFUykgJChHTU9GSUxFUykgXAorJChESVNURklMRVMuZXh0cmExKSAkKERJU1RGSUxFUy5leHRyYTIpICQoRElTVEZJTEVTLmV4dHJhMykKKworUE9URklMRVMgPSBcCisKK0NBVEFMT0dTID0gQENBVEFMT0dTQAorCisjIE1ha2V2YXJzIGdldHMgaW5zZXJ0ZWQgaGVyZS4gKERvbid0IHJlbW92ZSB0aGlzIGxpbmUhKQorCisuU1VGRklYRVM6CisuU1VGRklYRVM6IC5wbyAuZ21vIC5tbyAuc2VkIC5zaW4gLm5vcCAucG8tY3JlYXRlIC5wby11cGRhdGUKKworLnBvLm1vOgorCUBlY2hvICIkKE1TR0ZNVCkgLWMgLW8gJEAgJDwiOyBcCisJJChNU0dGTVQpIC1jIC1vIHQtJEAgJDwgJiYgbXYgdC0kQCAkQAorCisucG8uZ21vOgorCUBsYW5nPWBlY2hvICQqIHwgc2VkIC1lICdzLC4qLywsJ2A7IFwKKwl0ZXN0ICIkKHNyY2RpcikiID0gLiAmJiBjZGNtZD0iIiB8fCBjZGNtZD0iY2QgJChzcmNkaXIpICYmICI7IFwKKwllY2hvICIkJHtjZGNtZH1ybSAtZiAkJHtsYW5nfS5nbW8gJiYgJChHTVNHRk1UKSAtYyAtLXN0YXRpc3RpY3MgLW8gJCR7bGFuZ30uZ21vICQke2xhbmd9LnBvIjsgXAorCWNkICQoc3JjZGlyKSAmJiBybSAtZiAkJHtsYW5nfS5nbW8gJiYgJChHTVNHRk1UKSAtYyAtLXN0YXRpc3RpY3MgLW8gdC0kJHtsYW5nfS5nbW8gJCR7bGFuZ30ucG8gJiYgbXYgdC0kJHtsYW5nfS5nbW8gJCR7bGFuZ30uZ21vCisKKy5zaW4uc2VkOgorCXNlZCAtZSAnL14jL2QnICQ8ID4gdC0kQAorCW12IHQtJEAgJEAKKworCithbGw6IGFsbC1AVVNFX05MU0AKKworYWxsLXllczogc3RhbXAtcG8KK2FsbC1ubzoKKworIyAkKHNyY2RpcikvJChET01BSU4pLnBvdCBpcyBvbmx5IGNyZWF0ZWQgd2hlbiBuZWVkZWQuIFdoZW4geGdldHRleHQgZmluZHMgbm8KKyMgaW50ZXJuYXRpb25hbGl6ZWQgbWVzc2FnZXMsIG5vICQoc3JjZGlyKS8kKERPTUFJTikucG90IGlzIGNyZWF0ZWQgKGJlY2F1c2UKKyMgd2UgZG9uJ3Qgd2FudCB0byBib3RoZXIgdHJhbnNsYXRvcnMgd2l0aCBlbXB0eSBQT1QgZmlsZXMpLiBXZSBhc3N1bWUgdGhhdAorIyBMSU5HVUFTIGlzIGVtcHR5IGluIHRoaXMgY2FzZSwgaS5lLiAkKFBPRklMRVMpIGFuZCAkKEdNT0ZJTEVTKSBhcmUgZW1wdHkuCisjIEluIHRoaXMgY2FzZSwgc3RhbXAtcG8gaXMgYSBub3AgKGkuZS4gYSBwaG9ueSB0YXJnZXQpLgorCisjIHN0YW1wLXBvIGlzIGEgdGltZXN0YW1wIGRlbm90aW5nIHRoZSBsYXN0IHRpbWUgYXQgd2hpY2ggdGhlIENBVEFMT0dTIGhhdmUKKyMgYmVlbiBsb29zZWx5IHVwZGF0ZWQuIEl0cyBwdXJwb3NlIGlzIHRoYXQgd2hlbiBhIGRldmVsb3BlciBvciB0cmFuc2xhdG9yCisjIGNoZWNrcyBvdXQgdGhlIHBhY2thZ2UgdmlhIENWUywgYW5kIHRoZSAkKERPTUFJTikucG90IGZpbGUgaXMgbm90IGluIENWUywKKyMgIm1ha2UiIHdpbGwgdXBkYXRlIHRoZSAkKERPTUFJTikucG90IGFuZCB0aGUgJChDQVRBTE9HUyksIGJ1dCBzdWJzZXF1ZW50CisjIGludm9jYXRpb25zIG9mICJtYWtlIiB3aWxsIGRvIG5vdGhpbmcuIFRoaXMgdGltZXN0YW1wIHdvdWxkIG5vdCBiZSBuZWNlc3NhcnkKKyMgaWYgdXBkYXRpbmcgdGhlICQoQ0FUQUxPR1MpIHdvdWxkIGFsd2F5cyB0b3VjaCB0aGVtOyBob3dldmVyLCB0aGUgcnVsZSBmb3IKKyMgJChQT0ZJTEVTKSBoYXMgYmVlbiBkZXNpZ25lZCB0byBub3QgdG91Y2ggZmlsZXMgdGhhdCBkb24ndCBuZWVkIHRvIGJlCisjIGNoYW5nZWQuCitzdGFtcC1wbzogJChzcmNkaXIpLyQoRE9NQUlOKS5wb3QKKwl0ZXN0ICEgLWYgJChzcmNkaXIpLyQoRE9NQUlOKS5wb3QgfHwgXAorCSAgdGVzdCAteiAiJChHTU9GSUxFUykiIHx8ICQoTUFLRSkgJChHTU9GSUxFUykKKwlAdGVzdCAhIC1mICQoc3JjZGlyKS8kKERPTUFJTikucG90IHx8IHsgXAorCSAgZWNobyAidG91Y2ggc3RhbXAtcG8iICYmIFwKKwkgIGVjaG8gdGltZXN0YW1wID4gc3RhbXAtcG9UICYmIFwKKwkgIG12IHN0YW1wLXBvVCBzdGFtcC1wbzsgXAorCX0KKworIyBOb3RlOiBUYXJnZXQgJ2FsbCcgbXVzdCBub3QgZGVwZW5kIG9uIHRhcmdldCAnJChET01BSU4pLnBvdC11cGRhdGUnLAorIyBvdGhlcndpc2UgcGFja2FnZXMgbGlrZSBHQ0MgY2FuIG5vdCBiZSBidWlsdCBpZiBvbmx5IHBhcnRzIG9mIHRoZSBzb3VyY2UKKyMgaGF2ZSBiZWVuIGRvd25sb2FkZWQuCisKKyMgVGhpcyB0YXJnZXQgcmVidWlsZHMgJChET01BSU4pLnBvdDsgaXQgaXMgYW4gZXhwZW5zaXZlIG9wZXJhdGlvbi4KKyMgTm90ZSB0aGF0ICQoRE9NQUlOKS5wb3QgaXMgbm90IHRvdWNoZWQgaWYgaXQgZG9lc24ndCBuZWVkIHRvIGJlIGNoYW5nZWQuCiskKERPTUFJTikucG90LXVwZGF0ZTogJChQT1RGSUxFUykgJChzcmNkaXIpL1BPVEZJTEVTLmluIHJlbW92ZS1wb3RjZGF0ZS5zZWQKKwlpZiB0ZXN0IC1uICckKE1TR0lEX0JVR1NfQUREUkVTUyknIHx8IHRlc3QgJyQoUEFDS0FHRV9CVUdSRVBPUlQpJyA9ICdAJ1BBQ0tBR0VfQlVHUkVQT1JUJ0AnOyB0aGVuIFwKKwkgIG1zZ2lkX2J1Z3NfYWRkcmVzcz0nJChNU0dJRF9CVUdTX0FERFJFU1MpJzsgXAorCWVsc2UgXAorCSAgbXNnaWRfYnVnc19hZGRyZXNzPSckKFBBQ0tBR0VfQlVHUkVQT1JUKSc7IFwKKwlmaTsgXAorCSQoWEdFVFRFWFQpIC0tZGVmYXVsdC1kb21haW49JChET01BSU4pIC0tZGlyZWN0b3J5PSQodG9wX3NyY2RpcikgXAorCSAgLS1hZGQtY29tbWVudHM9VFJBTlNMQVRPUlM6ICQoWEdFVFRFWFRfT1BUSU9OUykgXAorCSAgLS1maWxlcy1mcm9tPSQoc3JjZGlyKS9QT1RGSUxFUy5pbiBcCisJICAtLWNvcHlyaWdodC1ob2xkZXI9JyQoQ09QWVJJR0hUX0hPTERFUiknIFwKKwkgIC0tbXNnaWQtYnVncy1hZGRyZXNzPSIkJG1zZ2lkX2J1Z3NfYWRkcmVzcyIKKwl0ZXN0ICEgLWYgJChET01BSU4pLnBvIHx8IHsgXAorCSAgaWYgdGVzdCAtZiAkKHNyY2RpcikvJChET01BSU4pLnBvdDsgdGhlbiBcCisJICAgIHNlZCAtZiByZW1vdmUtcG90Y2RhdGUuc2VkIDwgJChzcmNkaXIpLyQoRE9NQUlOKS5wb3QgPiAkKERPTUFJTikuMXBvICYmIFwKKwkgICAgc2VkIC1mIHJlbW92ZS1wb3RjZGF0ZS5zZWQgPCAkKERPTUFJTikucG8gPiAkKERPTUFJTikuMnBvICYmIFwKKwkgICAgaWYgY21wICQoRE9NQUlOKS4xcG8gJChET01BSU4pLjJwbyA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXAorCSAgICAgIHJtIC1mICQoRE9NQUlOKS4xcG8gJChET01BSU4pLjJwbyAkKERPTUFJTikucG87IFwKKwkgICAgZWxzZSBcCisJICAgICAgcm0gLWYgJChET01BSU4pLjFwbyAkKERPTUFJTikuMnBvICQoc3JjZGlyKS8kKERPTUFJTikucG90ICYmIFwKKwkgICAgICBtdiAkKERPTUFJTikucG8gJChzcmNkaXIpLyQoRE9NQUlOKS5wb3Q7IFwKKwkgICAgZmk7IFwKKwkgIGVsc2UgXAorCSAgICBtdiAkKERPTUFJTikucG8gJChzcmNkaXIpLyQoRE9NQUlOKS5wb3Q7IFwKKwkgIGZpOyBcCisJfQorCisjIFRoaXMgcnVsZSBoYXMgbm8gZGVwZW5kZW5jaWVzOiB3ZSBkb24ndCBuZWVkIHRvIHVwZGF0ZSAkKERPTUFJTikucG90IGF0CisjIGV2ZXJ5ICJtYWtlIiBpbnZvY2F0aW9uLCBvbmx5IGNyZWF0ZSBpdCB3aGVuIGl0IGlzIG1pc3NpbmcuCisjIE9ubHkgIm1ha2UgJChET01BSU4pLnBvdC11cGRhdGUiIG9yICJtYWtlIGRpc3QiIHdpbGwgZm9yY2UgYW4gdXBkYXRlLgorJChzcmNkaXIpLyQoRE9NQUlOKS5wb3Q6CisJJChNQUtFKSAkKERPTUFJTikucG90LXVwZGF0ZQorCisjIFRoaXMgdGFyZ2V0IHJlYnVpbGRzIGEgUE8gZmlsZSBpZiAkKERPTUFJTikucG90IGhhcyBjaGFuZ2VkLgorIyBOb3RlIHRoYXQgYSBQTyBmaWxlIGlzIG5vdCB0b3VjaGVkIGlmIGl0IGRvZXNuJ3QgbmVlZCB0byBiZSBjaGFuZ2VkLgorJChQT0ZJTEVTKTogJChzcmNkaXIpLyQoRE9NQUlOKS5wb3QKKwlAbGFuZz1gZWNobyAkQCB8IHNlZCAtZSAncywuKi8sLCcgLWUgJ3MvXC5wbyQkLy8nYDsgXAorCWlmIHRlc3QgLWYgIiQoc3JjZGlyKS8kJHtsYW5nfS5wbyI7IHRoZW4gXAorCSAgdGVzdCAiJChzcmNkaXIpIiA9IC4gJiYgY2RjbWQ9IiIgfHwgY2RjbWQ9ImNkICQoc3JjZGlyKSAmJiAiOyBcCisJICBlY2hvICIkJHtjZGNtZH0kKE1TR01FUkdFX1VQREFURSkgJCR7bGFuZ30ucG8gJChET01BSU4pLnBvdCI7IFwKKwkgIGNkICQoc3JjZGlyKSAmJiAkKE1TR01FUkdFX1VQREFURSkgJCR7bGFuZ30ucG8gJChET01BSU4pLnBvdDsgXAorCWVsc2UgXAorCSAgJChNQUtFKSAkJHtsYW5nfS5wby1jcmVhdGU7IFwKKwlmaQorCisKK2luc3RhbGw6IGluc3RhbGwtZXhlYyBpbnN0YWxsLWRhdGEKK2luc3RhbGwtZXhlYzoKK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLUBVU0VfTkxTQAorCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB0aGVuIFwKKwkgICQobWtkaXJfcCkgJChERVNURElSKSQoZ2V0dGV4dHNyY2Rpcik7IFwKKwkgIGZvciBmaWxlIGluICQoRElTVEZJTEVTLmNvbW1vbikgTWFrZXZhcnMudGVtcGxhdGU7IGRvIFwKKwkgICAgJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS8kJGZpbGUgXAorCQkJICAgICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpLyQkZmlsZTsgXAorCSAgZG9uZTsgXAorCSAgZm9yIGZpbGUgaW4gTWFrZXZhcnM7IGRvIFwKKwkgICAgcm0gLWYgJChERVNURElSKSQoZ2V0dGV4dHNyY2RpcikvJCRmaWxlOyBcCisJICBkb25lOyBcCisJZWxzZSBcCisJICA6IDsgXAorCWZpCitpbnN0YWxsLWRhdGEtbm86IGFsbAoraW5zdGFsbC1kYXRhLXllczogYWxsCisJJChta2Rpcl9wKSAkKERFU1RESVIpJChkYXRhZGlyKQorCUBjYXRhbG9ncz0nJChDQVRBTE9HUyknOyBcCisJZm9yIGNhdCBpbiAkJGNhdGFsb2dzOyBkbyBcCisJICBjYXQ9YGJhc2VuYW1lICQkY2F0YDsgXAorCSAgbGFuZz1gZWNobyAkJGNhdCB8IHNlZCAtZSAncy9cLmdtbyQkLy8nYDsgXAorCSAgZGlyPSQobG9jYWxlZGlyKS8kJGxhbmcvTENfTUVTU0FHRVM7IFwKKwkgICQobWtkaXJfcCkgJChERVNURElSKSQkZGlyOyBcCisJICBpZiB0ZXN0IC1yICQkY2F0OyB0aGVuIHJlYWxjYXQ9JCRjYXQ7IGVsc2UgcmVhbGNhdD0kKHNyY2RpcikvJCRjYXQ7IGZpOyBcCisJICAkKElOU1RBTExfREFUQSkgJCRyZWFsY2F0ICQoREVTVERJUikkJGRpci8kKERPTUFJTikubW87IFwKKwkgIGVjaG8gImluc3RhbGxpbmcgJCRyZWFsY2F0IGFzICQoREVTVERJUikkJGRpci8kKERPTUFJTikubW8iOyBcCisJICBmb3IgbGMgaW4gJycgJChFWFRSQV9MT0NBTEVfQ0FURUdPUklFUyk7IGRvIFwKKwkgICAgaWYgdGVzdCAtbiAiJCRsYyI7IHRoZW4gXAorCSAgICAgIGlmIChjZCAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZyAmJiBMQ19BTEw9QyBscyAtbCAtZCAkJGxjIDI+L2Rldi9udWxsKSB8IGdyZXAgJyAtPiAnID4vZGV2L251bGw7IHRoZW4gXAorCSAgICAgICAgbGluaz1gY2QgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcgJiYgTENfQUxMPUMgbHMgLWwgLWQgJCRsYyB8IHNlZCAtZSAncy9eLiogLT4gLy8nYDsgXAorCSAgICAgICAgbXYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYyAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLm9sZDsgXAorCSAgICAgICAgbWtkaXIgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYzsgXAorCSAgICAgICAgKGNkICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMub2xkICYmIFwKKwkgICAgICAgICBmb3IgZmlsZSBpbiAqOyBkbyBcCisJICAgICAgICAgICBpZiB0ZXN0IC1mICQkZmlsZTsgdGhlbiBcCisJICAgICAgICAgICAgIGxuIC1zIC4uLyQkbGluay8kJGZpbGUgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy8kJGZpbGU7IFwKKwkgICAgICAgICAgIGZpOyBcCisJICAgICAgICAgZG9uZSk7IFwKKwkgICAgICAgIHJtIC1mICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMub2xkOyBcCisJICAgICAgZWxzZSBcCisJICAgICAgICBpZiB0ZXN0IC1kICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGM7IHRoZW4gXAorCSAgICAgICAgICA6OyBcCisJICAgICAgICBlbHNlIFwKKwkgICAgICAgICAgcm0gLWYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYzsgXAorCSAgICAgICAgICBta2RpciAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjOyBcCisJICAgICAgICBmaTsgXAorCSAgICAgIGZpOyBcCisJICAgICAgcm0gLWYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy8kKERPTUFJTikubW87IFwKKwkgICAgICBsbiAtcyAuLi9MQ19NRVNTQUdFUy8kKERPTUFJTikubW8gJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy8kKERPTUFJTikubW8gMj4vZGV2L251bGwgfHwgXAorCSAgICAgIGxuICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nL0xDX01FU1NBR0VTLyQoRE9NQUlOKS5tbyAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLyQoRE9NQUlOKS5tbyAyPi9kZXYvbnVsbCB8fCBcCisJICAgICAgY3AgLXAgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvTENfTUVTU0FHRVMvJChET01BSU4pLm1vICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMvJChET01BSU4pLm1vOyBcCisJICAgICAgZWNobyAiaW5zdGFsbGluZyAkJHJlYWxjYXQgbGluayBhcyAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLyQoRE9NQUlOKS5tbyI7IFwKKwkgICAgZmk7IFwKKwkgIGRvbmU7IFwKKwlkb25lCisKK2luc3RhbGwtc3RyaXA6IGluc3RhbGwKKworaW5zdGFsbGRpcnM6IGluc3RhbGxkaXJzLWV4ZWMgaW5zdGFsbGRpcnMtZGF0YQoraW5zdGFsbGRpcnMtZXhlYzoKK2luc3RhbGxkaXJzLWRhdGE6IGluc3RhbGxkaXJzLWRhdGEtQFVTRV9OTFNACisJaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyI7IHRoZW4gXAorCSAgJChta2Rpcl9wKSAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKTsgXAorCWVsc2UgXAorCSAgOiA7IFwKKwlmaQoraW5zdGFsbGRpcnMtZGF0YS1ubzoKK2luc3RhbGxkaXJzLWRhdGEteWVzOgorCSQobWtkaXJfcCkgJChERVNURElSKSQoZGF0YWRpcikKKwlAY2F0YWxvZ3M9JyQoQ0FUQUxPR1MpJzsgXAorCWZvciBjYXQgaW4gJCRjYXRhbG9nczsgZG8gXAorCSAgY2F0PWBiYXNlbmFtZSAkJGNhdGA7IFwKKwkgIGxhbmc9YGVjaG8gJCRjYXQgfCBzZWQgLWUgJ3MvXC5nbW8kJC8vJ2A7IFwKKwkgIGRpcj0kKGxvY2FsZWRpcikvJCRsYW5nL0xDX01FU1NBR0VTOyBcCisJICAkKG1rZGlyX3ApICQoREVTVERJUikkJGRpcjsgXAorCSAgZm9yIGxjIGluICcnICQoRVhUUkFfTE9DQUxFX0NBVEVHT1JJRVMpOyBkbyBcCisJICAgIGlmIHRlc3QgLW4gIiQkbGMiOyB0aGVuIFwKKwkgICAgICBpZiAoY2QgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcgJiYgTENfQUxMPUMgbHMgLWwgLWQgJCRsYyAyPi9kZXYvbnVsbCkgfCBncmVwICcgLT4gJyA+L2Rldi9udWxsOyB0aGVuIFwKKwkgICAgICAgIGxpbms9YGNkICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nICYmIExDX0FMTD1DIGxzIC1sIC1kICQkbGMgfCBzZWQgLWUgJ3MvXi4qIC0+IC8vJ2A7IFwKKwkgICAgICAgIG12ICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy5vbGQ7IFwKKwkgICAgICAgIG1rZGlyICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGM7IFwKKwkgICAgICAgIChjZCAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLm9sZCAmJiBcCisJICAgICAgICAgZm9yIGZpbGUgaW4gKjsgZG8gXAorCSAgICAgICAgICAgaWYgdGVzdCAtZiAkJGZpbGU7IHRoZW4gXAorCSAgICAgICAgICAgICBsbiAtcyAuLi8kJGxpbmsvJCRmaWxlICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMvJCRmaWxlOyBcCisJICAgICAgICAgICBmaTsgXAorCSAgICAgICAgIGRvbmUpOyBcCisJICAgICAgICBybSAtZiAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLm9sZDsgXAorCSAgICAgIGVsc2UgXAorCSAgICAgICAgaWYgdGVzdCAtZCAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjOyB0aGVuIFwKKwkgICAgICAgICAgOjsgXAorCSAgICAgICAgZWxzZSBcCisJICAgICAgICAgIHJtIC1mICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGM7IFwKKwkgICAgICAgICAgbWtkaXIgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYzsgXAorCSAgICAgICAgZmk7IFwKKwkgICAgICBmaTsgXAorCSAgICBmaTsgXAorCSAgZG9uZTsgXAorCWRvbmUKKworIyBEZWZpbmUgdGhpcyBhcyBlbXB0eSB1bnRpbCBJIGZvdW5kIGEgdXNlZnVsIGFwcGxpY2F0aW9uLgoraW5zdGFsbGNoZWNrOgorCit1bmluc3RhbGw6IHVuaW5zdGFsbC1leGVjIHVuaW5zdGFsbC1kYXRhCit1bmluc3RhbGwtZXhlYzoKK3VuaW5zdGFsbC1kYXRhOiB1bmluc3RhbGwtZGF0YS1AVVNFX05MU0AKKwlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIjsgdGhlbiBcCisJICBmb3IgZmlsZSBpbiAkKERJU1RGSUxFUy5jb21tb24pIE1ha2V2YXJzLnRlbXBsYXRlOyBkbyBcCisJICAgIHJtIC1mICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpLyQkZmlsZTsgXAorCSAgZG9uZTsgXAorCWVsc2UgXAorCSAgOiA7IFwKKwlmaQordW5pbnN0YWxsLWRhdGEtbm86Cit1bmluc3RhbGwtZGF0YS15ZXM6CisJY2F0YWxvZ3M9JyQoQ0FUQUxPR1MpJzsgXAorCWZvciBjYXQgaW4gJCRjYXRhbG9nczsgZG8gXAorCSAgY2F0PWBiYXNlbmFtZSAkJGNhdGA7IFwKKwkgIGxhbmc9YGVjaG8gJCRjYXQgfCBzZWQgLWUgJ3MvXC5nbW8kJC8vJ2A7IFwKKwkgIGZvciBsYyBpbiBMQ19NRVNTQUdFUyAkKEVYVFJBX0xPQ0FMRV9DQVRFR09SSUVTKTsgZG8gXAorCSAgICBybSAtZiAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLyQoRE9NQUlOKS5tbzsgXAorCSAgZG9uZTsgXAorCWRvbmUKKworY2hlY2s6IGFsbAorCitpbmZvIGR2aSBwcyBwZGYgaHRtbCB0YWdzIFRBR1MgY3RhZ3MgQ1RBR1MgSUQ6CisKK21vc3RseWNsZWFuOgorCXJtIC1mIHJlbW92ZS1wb3RjZGF0ZS5zZWQKKwlybSAtZiBzdGFtcC1wb1QKKwlybSAtZiBjb3JlIGNvcmUuKiAkKERPTUFJTikucG8gJChET01BSU4pLjFwbyAkKERPTUFJTikuMnBvICoubmV3LnBvCisJcm0gLWZyICoubworCitjbGVhbjogbW9zdGx5Y2xlYW4KKworZGlzdGNsZWFuOiBjbGVhbgorCXJtIC1mIE1ha2VmaWxlIE1ha2VmaWxlLmluIFBPVEZJTEVTICoubW8KKworbWFpbnRhaW5lci1jbGVhbjogZGlzdGNsZWFuCisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlOyIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCisJcm0gLWYgc3RhbXAtcG8gJChHTU9GSUxFUykKKworZGlzdGRpciA9ICQodG9wX2J1aWxkZGlyKS8kKFBBQ0tBR0UpLSQoVkVSU0lPTikvJChzdWJkaXIpCitkaXN0IGRpc3RkaXI6CisJJChNQUtFKSB1cGRhdGUtcG8KKwlAJChNQUtFKSBkaXN0MgorIyBUaGlzIGlzIGEgc2VwYXJhdGUgdGFyZ2V0IGJlY2F1c2UgJ3VwZGF0ZS1wbycgbXVzdCBiZSBleGVjdXRlZCBiZWZvcmUuCitkaXN0Mjogc3RhbXAtcG8gJChESVNURklMRVMpCisJZGlzdHM9IiQoRElTVEZJTEVTKSI7IFwKKwlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIjsgdGhlbiBcCisJICBkaXN0cz0iJCRkaXN0cyBNYWtldmFycy50ZW1wbGF0ZSI7IFwKKwlmaTsgXAorCWlmIHRlc3QgLWYgJChzcmNkaXIpLyQoRE9NQUlOKS5wb3Q7IHRoZW4gXAorCSAgZGlzdHM9IiQkZGlzdHMgJChET01BSU4pLnBvdCBzdGFtcC1wbyI7IFwKKwlmaTsgXAorCWlmIHRlc3QgLWYgJChzcmNkaXIpL0NoYW5nZUxvZzsgdGhlbiBcCisJICBkaXN0cz0iJCRkaXN0cyBDaGFuZ2VMb2ciOyBcCisJZmk7IFwKKwlmb3IgaSBpbiAwIDEgMiAzIDQgNSA2IDcgOCA5OyBkbyBcCisJICBpZiB0ZXN0IC1mICQoc3JjZGlyKS9DaGFuZ2VMb2cuJCRpOyB0aGVuIFwKKwkgICAgZGlzdHM9IiQkZGlzdHMgQ2hhbmdlTG9nLiQkaSI7IFwKKwkgIGZpOyBcCisJZG9uZTsgXAorCWlmIHRlc3QgLWYgJChzcmNkaXIpL0xJTkdVQVM7IHRoZW4gZGlzdHM9IiQkZGlzdHMgTElOR1VBUyI7IGZpOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0czsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGU7IHRoZW4gXAorCSAgICBjcCAtcCAkJGZpbGUgJChkaXN0ZGlyKSB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICBjcCAtcCAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKKwordXBkYXRlLXBvOiBNYWtlZmlsZQorCSQoTUFLRSkgJChET01BSU4pLnBvdC11cGRhdGUKKwl0ZXN0IC16ICIkKFVQREFURVBPRklMRVMpIiB8fCAkKE1BS0UpICQoVVBEQVRFUE9GSUxFUykKKwkkKE1BS0UpIHVwZGF0ZS1nbW8KKworIyBHZW5lcmFsIHJ1bGUgZm9yIGNyZWF0aW5nIFBPIGZpbGVzLgorCisubm9wLnBvLWNyZWF0ZToKKwlAbGFuZz1gZWNobyAkQCB8IHNlZCAtZSAncy9cLnBvLWNyZWF0ZSQkLy8nYDsgXAorCWVjaG8gIkZpbGUgJCRsYW5nLnBvIGRvZXMgbm90IGV4aXN0LiBJZiB5b3UgYXJlIGEgdHJhbnNsYXRvciwgeW91IGNhbiBjcmVhdGUgaXQgdGhyb3VnaCAnbXNnaW5pdCcuIiAxPiYyOyBcCisJZXhpdCAxCisKKyMgR2VuZXJhbCBydWxlIGZvciB1cGRhdGluZyBQTyBmaWxlcy4KKworLm5vcC5wby11cGRhdGU6CisJQGxhbmc9YGVjaG8gJEAgfCBzZWQgLWUgJ3MvXC5wby11cGRhdGUkJC8vJ2A7IFwKKwlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIjsgdGhlbiBQQVRIPWBwd2RgLy4uL3NyYzokJFBBVEg7IGZpOyBcCisJdG1wZGlyPWBwd2RgOyBcCisJZWNobyAiJCRsYW5nOiI7IFwKKwl0ZXN0ICIkKHNyY2RpcikiID0gLiAmJiBjZGNtZD0iIiB8fCBjZGNtZD0iY2QgJChzcmNkaXIpICYmICI7IFwKKwllY2hvICIkJHtjZGNtZH0kKE1TR01FUkdFKSAkJGxhbmcucG8gJChET01BSU4pLnBvdCAtbyAkJGxhbmcubmV3LnBvIjsgXAorCWNkICQoc3JjZGlyKTsgXAorCWlmICQoTVNHTUVSR0UpICQkbGFuZy5wbyAkKERPTUFJTikucG90IC1vICQkdG1wZGlyLyQkbGFuZy5uZXcucG87IHRoZW4gXAorCSAgaWYgY21wICQkbGFuZy5wbyAkJHRtcGRpci8kJGxhbmcubmV3LnBvID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCisJICAgIHJtIC1mICQkdG1wZGlyLyQkbGFuZy5uZXcucG87IFwKKwkgIGVsc2UgXAorCSAgICBpZiBtdiAtZiAkJHRtcGRpci8kJGxhbmcubmV3LnBvICQkbGFuZy5wbzsgdGhlbiBcCisJICAgICAgOjsgXAorCSAgICBlbHNlIFwKKwkgICAgICBlY2hvICJtc2dtZXJnZSBmb3IgJCRsYW5nLnBvIGZhaWxlZDogY2Fubm90IG1vdmUgJCR0bXBkaXIvJCRsYW5nLm5ldy5wbyB0byAkJGxhbmcucG8iIDE+JjI7IFwKKwkgICAgICBleGl0IDE7IFwKKwkgICAgZmk7IFwKKwkgIGZpOyBcCisJZWxzZSBcCisJICBlY2hvICJtc2dtZXJnZSBmb3IgJCRsYW5nLnBvIGZhaWxlZCEiIDE+JjI7IFwKKwkgIHJtIC1mICQkdG1wZGlyLyQkbGFuZy5uZXcucG87IFwKKwlmaQorCiskKERVTU1ZUE9GSUxFUyk6CisKK3VwZGF0ZS1nbW86IE1ha2VmaWxlICQoR01PRklMRVMpCisJQDoKKworTWFrZWZpbGU6IE1ha2VmaWxlLmluLmluIE1ha2V2YXJzICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzIEBQT01BS0VGSUxFREVQU0AKKwljZCAkKHRvcF9idWlsZGRpcikgXAorCSAgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQC5pbiBwby1kaXJlY3RvcmllcworCitmb3JjZToKKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIG5vdCB0byBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L3BvL01ha2V2YXJzIGIvcGFydGVkLTEuOC43L3BvL01ha2V2YXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNTE3MTYKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvcG8vTWFrZXZhcnMKQEAgLTAsMCArMSw1MyBAQAorIyAtKi0gYnVmZmVyLXJlYWQtb25seTogdCAtKi0gdmk6IHNldCBybzoKKyMgRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZIQorIyBNYWtlZmlsZSB2YXJpYWJsZXMgZm9yIFBPIGRpcmVjdG9yeSBpbiBhbnkgcGFja2FnZSB1c2luZyBHTlUgZ2V0dGV4dC4KKworIyBVc3VhbGx5IHRoZSBtZXNzYWdlIGRvbWFpbiBpcyB0aGUgc2FtZSBhcyB0aGUgcGFja2FnZSBuYW1lLgorRE9NQUlOID0gJChQQUNLQUdFKQorCisjIFRoZXNlIHR3byB2YXJpYWJsZXMgZGVwZW5kIG9uIHRoZSBsb2NhdGlvbiBvZiB0aGlzIGRpcmVjdG9yeS4KK3N1YmRpciA9IHBvCit0b3BfYnVpbGRkaXIgPSAuLgorCisjIFRoZXNlIG9wdGlvbnMgZ2V0IHBhc3NlZCB0byB4Z2V0dGV4dC4KK1hHRVRURVhUX09QVElPTlMgPSAtLWtleXdvcmQ9XyAtLWtleXdvcmQ9Tl8gXAorCVwKKyAtLWZsYWc9XzoxOnBhc3MtYy1mb3JtYXRcCisgLS1mbGFnPU5fOjE6cGFzcy1jLWZvcm1hdFwKKyAtLWZsYWc9ZXJyb3I6MzpjLWZvcm1hdCAtLWZsYWc9ZXJyb3JfYXRfbGluZTo1OmMtZm9ybWF0XAorXAorIC0tZnJvbS1jb2RlPVVURi04XAorIC0tZmxhZz1hc3ByaW50ZjoyOmMtZm9ybWF0IC0tZmxhZz12YXNwcmludGY6MjpjLWZvcm1hdFwKKyAtLWZsYWc9YXNucHJpbnRmOjM6Yy1mb3JtYXQgLS1mbGFnPXZhc25wcmludGY6MzpjLWZvcm1hdFwKKyAtLWZsYWc9d3JhcGY6MTpjLWZvcm1hdFwKKyAkJHtlbmRfb2ZfeGdldHRleHRfb3B0aW9ucyt9CisKKyMgVGhpcyBpcyB0aGUgY29weXJpZ2h0IGhvbGRlciB0aGF0IGdldHMgaW5zZXJ0ZWQgaW50byB0aGUgaGVhZGVyIG9mIHRoZQorIyAkKERPTUFJTikucG90IGZpbGUuICBTZXQgdGhpcyB0byB0aGUgY29weXJpZ2h0IGhvbGRlciBvZiB0aGUgc3Vycm91bmRpbmcKKyMgcGFja2FnZS4gIChOb3RlIHRoYXQgdGhlIG1zZ3N0ciBzdHJpbmdzLCBleHRyYWN0ZWQgZnJvbSB0aGUgcGFja2FnZSdzCisjIHNvdXJjZXMsIGJlbG9uZyB0byB0aGUgY29weXJpZ2h0IGhvbGRlciBvZiB0aGUgcGFja2FnZS4pICBUcmFuc2xhdG9ycyBhcmUKKyMgZXhwZWN0ZWQgdG8gdHJhbnNmZXIgdGhlIGNvcHlyaWdodCBmb3IgdGhlaXIgdHJhbnNsYXRpb25zIHRvIHRoaXMgcGVyc29uCisjIG9yIGVudGl0eSwgb3IgdG8gZGlzY2xhaW0gdGhlaXIgY29weXJpZ2h0LiAgVGhlIGVtcHR5IHN0cmluZyBzdGFuZHMgZm9yCisjIHRoZSBwdWJsaWMgZG9tYWluOyBpbiB0aGlzIGNhc2UgdGhlIHRyYW5zbGF0b3JzIGFyZSBleHBlY3RlZCB0byBkaXNjbGFpbQorIyB0aGVpciBjb3B5cmlnaHQuCitDT1BZUklHSFRfSE9MREVSID0gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBpcyB0aGUgZW1haWwgYWRkcmVzcyBvciBVUkwgdG8gd2hpY2ggdGhlIHRyYW5zbGF0b3JzIHNoYWxsIHJlcG9ydAorIyBidWdzIGluIHRoZSB1bnRyYW5zbGF0ZWQgc3RyaW5nczoKKyMgLSBTdHJpbmdzIHdoaWNoIGFyZSBub3QgZW50aXJlIHNlbnRlbmNlcywgc2VlIHRoZSBtYWludGFpbmVyIGd1aWRlbGluZXMKKyMgICBpbiB0aGUgR05VIGdldHRleHQgZG9jdW1lbnRhdGlvbiwgc2VjdGlvbiAnUHJlcGFyaW5nIFN0cmluZ3MnLgorIyAtIFN0cmluZ3Mgd2hpY2ggdXNlIHVuY2xlYXIgdGVybXMgb3IgcmVxdWlyZSBhZGRpdGlvbmFsIGNvbnRleHQgdG8gYmUKKyMgICB1bmRlcnN0b29kLgorIyAtIFN0cmluZ3Mgd2hpY2ggbWFrZSBpbnZhbGlkIGFzc3VtcHRpb25zIGFib3V0IG5vdGF0aW9uIG9mIGRhdGUsIHRpbWUgb3IKKyMgICBtb25leS4KKyMgLSBQbHVyYWxpc2F0aW9uIHByb2JsZW1zLgorIyAtIEluY29ycmVjdCBFbmdsaXNoIHNwZWxsaW5nLgorIyAtIEluY29ycmVjdCBmb3JtYXR0aW5nLgorIyBJdCBjYW4gYmUgeW91ciBlbWFpbCBhZGRyZXNzLCBvciBhIG1haWxpbmcgbGlzdCBhZGRyZXNzIHdoZXJlIHRyYW5zbGF0b3JzCisjIGNhbiB3cml0ZSB0byB3aXRob3V0IGJlaW5nIHN1YnNjcmliZWQsIG9yIHRoZSBVUkwgb2YgYSB3ZWIgcGFnZSB0aHJvdWdoCisjIHdoaWNoIHRoZSB0cmFuc2xhdG9ycyBjYW4gY29udGFjdCB5b3UuCitNU0dJRF9CVUdTX0FERFJFU1MgPSBidWctcGFydGVkQGdudS5vcmcKKworIyBUaGlzIGlzIHRoZSBsaXN0IG9mIGxvY2FsZSBjYXRlZ29yaWVzLCBiZXlvbmQgTENfTUVTU0FHRVMsIGZvciB3aGljaCB0aGUKKyMgbWVzc2FnZSBjYXRhbG9ncyBzaGFsbCBiZSB1c2VkLiAgSXQgaXMgdXN1YWxseSBlbXB0eS4KK0VYVFJBX0xPQ0FMRV9DQVRFR09SSUVTID0gCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvcG8vUE9URklMRVMuaW4gYi9wYXJ0ZWQtMS44LjcvcG8vUE9URklMRVMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzViMzY3NwotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9wby9QT1RGSUxFUy5pbgpAQCAtMCwwICsxLDkyIEBACisjIGxpYnBhcnRlZAorIyBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDEsIDIwMDYsIDIwMDcgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIGZpbGUgbWF5IGJlIG1vZGlmaWVkIGFuZC9vciBjb3BpZWQgd2l0aG91dCByZXN0cmljdGlvbi4KKworIyBsaXN0IG9mIGZpbGVzIGNvbnRhaW5pbmcgdHJhbnNsYXRhYmxlIHN0cmluZ3MKKworIyBsaWIKK2xpYi9jbG9zZW91dC5jCitsaWIvZXJyb3IuYworbGliL2dldG9wdC5jCitsaWIvcXVvdGVhcmcuYworbGliL3JlZ2NvbXAuYworbGliL3JwbWF0Y2guYworbGliL3ZlcnNpb24tZXRjLmMKK2xpYi94YWxsb2MtZGllLmMKK2xpYnBhcnRlZC9hcmNoL2Jlb3MuYworCitkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jCitwYXJ0cHJvYmUvcGFydHByb2JlLmMKKworIyBsaWJwYXJ0ZWQKK2xpYnBhcnRlZC9hcmNoL2dudS5jCitsaWJwYXJ0ZWQvYXJjaC9saW51eC5jCitsaWJwYXJ0ZWQvY3MvZ2VvbS5jCitsaWJwYXJ0ZWQvZGVidWcuYworbGlicGFydGVkL2Rpc2suYworbGlicGFydGVkL2V4Y2VwdGlvbi5jCitsaWJwYXJ0ZWQvZmlsZXN5cy5jCitsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYworbGlicGFydGVkL2xhYmVscy9haXguYworbGlicGFydGVkL2xhYmVscy9ic2QuYworbGlicGFydGVkL2xhYmVscy9kYXNkLmMKK2xpYnBhcnRlZC9sYWJlbHMvZG9zLmMKK2xpYnBhcnRlZC9sYWJlbHMvZHZoLmMKK2xpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYworbGlicGFydGVkL2xhYmVscy9ncHQuYworbGlicGFydGVkL2xhYmVscy9sb29wLmMKK2xpYnBhcnRlZC9sYWJlbHMvbWFjLmMKK2xpYnBhcnRlZC9sYWJlbHMvcGM5OC5jCitsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jCitsaWJwYXJ0ZWQvbGFiZWxzL3N1bi5jCitsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYworbGlicGFydGVkL2xpYnBhcnRlZC5jCitsaWJwYXJ0ZWQvdW5pdC5jCisKK2xpYnBhcnRlZC9mcy9hbWlnYS9hZmZzLmMKK2xpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jCitsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXBmcy5jCitsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXNmcy5jCisKKyMgbGlicGFydGVkL2ZzX2V4dDIKK2xpYnBhcnRlZC9mcy9leHQyL2V4dDIuYworbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9pbm9kZV9yZWxvY2F0b3IuYworbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYworbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9ibG9ja19yZWxvY2F0b3IuYworbGlicGFydGVkL2ZzL2V4dDIvaW50ZXJmYWNlLmMKK2xpYnBhcnRlZC9mcy9leHQyL2V4dDJfYnVmZmVyLmMKK2xpYnBhcnRlZC9mcy9leHQyL2V4dDJfbWtmcy5jCisKKyMgbGlicGFydGVkL2ZzL2ZhdAorbGlicGFydGVkL2ZzL2ZhdC9jYWxjLmMKK2xpYnBhcnRlZC9mcy9mYXQvY29udGV4dC5jCitsaWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jCitsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jCitsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYworbGlicGFydGVkL2ZzL2ZhdC9jb3VudC5jCitsaWJwYXJ0ZWQvZnMvZmF0L3RhYmxlLmMKKworIyBsaWJwYXJ0ZWQvZnMvbGludXhfc3dhcAorbGlicGFydGVkL2ZzL2xpbnV4X3N3YXAvbGludXhfc3dhcC5jCisKKyMgbGlicGFydGVkL2ZzL2hmcworbGlicGFydGVkL2ZzL2hmcy9hZHZmcy5jCitsaWJwYXJ0ZWQvZnMvaGZzL2FkdmZzX3BsdXMuYworbGlicGFydGVkL2ZzL2hmcy9jYWNoZS5jCitsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGUuYworbGlicGFydGVkL2ZzL2hmcy9maWxlX3BsdXMuYworbGlicGFydGVkL2ZzL2hmcy9oZnMuYworbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmMKK2xpYnBhcnRlZC9mcy9oZnMvcHJvYmUuYworbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jCitsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYworCisjIGxpYnBhcnRlZC9mcy9qZnMKKworIyBsaWJwYXJ0ZWQvZnMvdWZzCisKKyMgbGlicGFydGVkL2ZzL3hmcworCisjIHBhcnRlZAorcGFydGVkL3BhcnRlZC5jCitwYXJ0ZWQvdWkuYwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L3BvL1J1bGVzLXF1b3QgYi9wYXJ0ZWQtMS44LjcvcG8vUnVsZXMtcXVvdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzJhOTk1Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L3BvL1J1bGVzLXF1b3QKQEAgLTAsMCArMSw0NyBAQAorIyBTcGVjaWFsIE1ha2VmaWxlIHJ1bGVzIGZvciBFbmdsaXNoIG1lc3NhZ2UgY2F0YWxvZ3Mgd2l0aCBxdW90YXRpb24gbWFya3MuCisKK0RJU1RGSUxFUy5jb21tb24uZXh0cmExID0gcXVvdC5zZWQgYm9sZHF1b3Quc2VkIGVuQHF1b3QuaGVhZGVyIGVuQGJvbGRxdW90LmhlYWRlciBpbnNlcnQtaGVhZGVyLnNpbiBSdWxlcy1xdW90CisKKy5TVUZGSVhFUzogLmluc2VydC1oZWFkZXIgLnBvLXVwZGF0ZS1lbgorCitlbkBxdW90LnBvLWNyZWF0ZToKKwkkKE1BS0UpIGVuQHF1b3QucG8tdXBkYXRlCitlbkBib2xkcXVvdC5wby1jcmVhdGU6CisJJChNQUtFKSBlbkBib2xkcXVvdC5wby11cGRhdGUKKworZW5AcXVvdC5wby11cGRhdGU6IGVuQHF1b3QucG8tdXBkYXRlLWVuCitlbkBib2xkcXVvdC5wby11cGRhdGU6IGVuQGJvbGRxdW90LnBvLXVwZGF0ZS1lbgorCisuaW5zZXJ0LWhlYWRlci5wby11cGRhdGUtZW46CisJQGxhbmc9YGVjaG8gJEAgfCBzZWQgLWUgJ3MvXC5wby11cGRhdGUtZW4kJC8vJ2A7IFwKKwlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0IjsgdGhlbiBQQVRIPWBwd2RgLy4uL3NyYzokJFBBVEg7IEdFVFRFWFRMSUJESVI9YGNkICQodG9wX3NyY2Rpcikvc3JjICYmIHB3ZGA7IGV4cG9ydCBHRVRURVhUTElCRElSOyBmaTsgXAorCXRtcGRpcj1gcHdkYDsgXAorCWVjaG8gIiQkbGFuZzoiOyBcCisJbGw9YGVjaG8gJCRsYW5nIHwgc2VkIC1lICdzL0AuKi8vJ2A7IFwKKwlMQ19BTEw9QzsgZXhwb3J0IExDX0FMTDsgXAorCWNkICQoc3JjZGlyKTsgXAorCWlmICQoTVNHSU5JVCkgLWkgJChET01BSU4pLnBvdCAtLW5vLXRyYW5zbGF0b3IgLWwgJCRsbCAtbyAtIDI+L2Rldi9udWxsIHwgc2VkIC1mICQkdG1wZGlyLyQkbGFuZy5pbnNlcnQtaGVhZGVyIHwgJChNU0dDT05WKSAtdCBVVEYtOCB8ICQoTVNHRklMVEVSKSBzZWQgLWYgYGVjaG8gJCRsYW5nIHwgc2VkIC1lICdzLy4qQC8vJ2Auc2VkIDI+L2Rldi9udWxsID4gJCR0bXBkaXIvJCRsYW5nLm5ldy5wbzsgdGhlbiBcCisJICBpZiBjbXAgJCRsYW5nLnBvICQkdG1wZGlyLyQkbGFuZy5uZXcucG8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKKwkgICAgcm0gLWYgJCR0bXBkaXIvJCRsYW5nLm5ldy5wbzsgXAorCSAgZWxzZSBcCisJICAgIGlmIG12IC1mICQkdG1wZGlyLyQkbGFuZy5uZXcucG8gJCRsYW5nLnBvOyB0aGVuIFwKKwkgICAgICA6OyBcCisJICAgIGVsc2UgXAorCSAgICAgIGVjaG8gImNyZWF0aW9uIG9mICQkbGFuZy5wbyBmYWlsZWQ6IGNhbm5vdCBtb3ZlICQkdG1wZGlyLyQkbGFuZy5uZXcucG8gdG8gJCRsYW5nLnBvIiAxPiYyOyBcCisJICAgICAgZXhpdCAxOyBcCisJICAgIGZpOyBcCisJICBmaTsgXAorCWVsc2UgXAorCSAgZWNobyAiY3JlYXRpb24gb2YgJCRsYW5nLnBvIGZhaWxlZCEiIDE+JjI7IFwKKwkgIHJtIC1mICQkdG1wZGlyLyQkbGFuZy5uZXcucG87IFwKKwlmaQorCitlbkBxdW90Lmluc2VydC1oZWFkZXI6IGluc2VydC1oZWFkZXIuc2luCisJc2VkIC1lICcvXiMvZCcgLWUgJ3MvSEVBREVSL2VuQHF1b3QuaGVhZGVyL2cnICQoc3JjZGlyKS9pbnNlcnQtaGVhZGVyLnNpbiA+IGVuQHF1b3QuaW5zZXJ0LWhlYWRlcgorCitlbkBib2xkcXVvdC5pbnNlcnQtaGVhZGVyOiBpbnNlcnQtaGVhZGVyLnNpbgorCXNlZCAtZSAnL14jL2QnIC1lICdzL0hFQURFUi9lbkBib2xkcXVvdC5oZWFkZXIvZycgJChzcmNkaXIpL2luc2VydC1oZWFkZXIuc2luID4gZW5AYm9sZHF1b3QuaW5zZXJ0LWhlYWRlcgorCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tcXVvdAorbW9zdGx5Y2xlYW4tcXVvdDoKKwlybSAtZiAqLmluc2VydC1oZWFkZXIKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9wby9ib2xkcXVvdC5zZWQgYi9wYXJ0ZWQtMS44LjcvcG8vYm9sZHF1b3Quc2VkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiOTM3YWEKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvcG8vYm9sZHF1b3Quc2VkCkBAIC0wLDAgKzEsMTAgQEAKK3MvIlwoW14iXSpcKSIv4oCcXDHigJ0vZworcy9gXChbXmAnXSpcKScv4oCYXDHigJkvZworcy8gJ1woW15gJ10qXCknIC8g4oCYXDHigJkgL2cKK3MvICdcKFteYCddKlwpJyQvIOKAmFwx4oCZL2cKK3MvXidcKFteYCddKlwpJyAv4oCYXDHigJkgL2cKK3Mv4oCc4oCdLyIiL2cKK3Mv4oCcL+KAnBtbMW0vZworcy/igJ0vG1swbeKAnS9nCitzL+KAmC/igJgbWzFtL2cKK3Mv4oCZLxtbMG3igJkvZwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L3BvL2NhLmdtbyBiL3BhcnRlZC0xLjguNy9wby9jYS5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjgyM2U5YgotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9wby9jYS5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L3BvL2NhLnBvIGIvcGFydGVkLTEuOC43L3BvL2NhLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwYTg4NmMKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvcG8vY2EucG8KQEAgLTAsMCArMSwzMzU5IEBACisjIEdOVSBQYXJ0ZWQgZW4gY2F0YWzgCisjIENvcHlyaWdodCAoQykgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgTWlxdWVsIE1hdGFzIDxtaXF1ZWxtYXRhc0B3YW5hZG9vLmVzPiwgMjAwMi4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IHBhcnRlZCAxLjYuMFxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBidWctcGFydGVkQGdudS5vcmdcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAwNy0wNS0wOSAxNzowMi0wNDAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwMi0wNS0wNSAxNDo0NyswMTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBNaXF1ZWwgTWF0YXMgPG1pcXVlbG1hdGFzQHdhbmFkb28uZXM+XG4iCisiTGFuZ3VhZ2UtVGVhbTogQ2F0YWxhbiA8Y2FAZG9kZHMubmV0PlxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PWlzby04ODU5LTFcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiWC1HZW5lcmF0b3I6IEtCYWJlbCAwLjdcbiIKKworIzogbGliL2Nsb3Nlb3V0LmM6NzQKK21zZ2lkICJ3cml0ZSBlcnJvciIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXJyb3IuYzoxMjUKKyMsIGZ1enp5Cittc2dpZCAiVW5rbm93biBzeXN0ZW0gZXJyb3IiCittc2dzdHIgIlRpcHVzIGRlIHNpc3RlbWEgZGUgZml0eGVycyBkZXNjb25lZ3V0IFwiJXNcIi4iCisKKyM6IGxpYi9nZXRvcHQuYzo1MzEgbGliL2dldG9wdC5jOjU0NworIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIGAlcycgaXMgYW1iaWd1b3VzXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjU4MCBsaWIvZ2V0b3B0LmM6NTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYC0tJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6NTkzIGxpYi9nZXRvcHQuYzo1OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiBgJWMlcycgZG9lc24ndCBhbGxvdyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo2NDEgbGliL2dldG9wdC5jOjY2MCBsaWIvZ2V0b3B0LmM6OTc2IGxpYi9nZXRvcHQuYzo5OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiBgJXMnIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjY5OCBsaWIvZ2V0b3B0LmM6NzAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bnJlY29nbml6ZWQgb3B0aW9uIGAtLSVzJ1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo3MDkgbGliL2dldG9wdC5jOjcxMgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5yZWNvZ25pemVkIG9wdGlvbiBgJWMlcydcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6NzY0IGxpYi9nZXRvcHQuYzo3NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGlsbGVnYWwgb3B0aW9uIC0tICVjXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjc3MyBsaWIvZ2V0b3B0LmM6Nzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbnZhbGlkIG9wdGlvbiAtLSAlY1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo4MjggbGliL2dldG9wdC5jOjg0NCBsaWIvZ2V0b3B0LmM6MTA0OCBsaWIvZ2V0b3B0LmM6MTA2NgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IC0tICVjXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjg5NyBsaWIvZ2V0b3B0LmM6OTEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYC1XICVzJyBpcyBhbWJpZ3VvdXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6OTM3IGxpYi9nZXRvcHQuYzo5NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiBgLVcgJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzoKKyMuIEdldCB0cmFuc2xhdGlvbnMgZm9yIG9wZW4gYW5kIGNsb3NpbmcgcXVvdGF0aW9uIG1hcmtzLgorIy4KKyMuIFRoZSBtZXNzYWdlIGNhdGFsb2cgc2hvdWxkIHRyYW5zbGF0ZSAiYCIgdG8gYSBsZWZ0CisjLiBxdW90YXRpb24gbWFyayBzdWl0YWJsZSBmb3IgdGhlIGxvY2FsZSwgYW5kIHNpbWlsYXJseSBmb3IKKyMuICInIi4gIElmIHRoZSBjYXRhbG9nIGhhcyBubyB0cmFuc2xhdGlvbiwKKyMuIGxvY2FsZV9xdW90aW5nX3N0eWxlIHF1b3RlcyBgbGlrZSB0aGlzJywgYW5kCisjLiBjbG9jYWxlX3F1b3Rpbmdfc3R5bGUgcXVvdGVzICJsaWtlIHRoaXMiLgorIy4KKyMuIEZvciBleGFtcGxlLCBhbiBBbWVyaWNhbiBFbmdsaXNoIFVuaWNvZGUgbG9jYWxlIHNob3VsZAorIy4gdHJhbnNsYXRlICJgIiB0byBVKzIwMUMgKExFRlQgRE9VQkxFIFFVT1RBVElPTiBNQVJLKSwgYW5kCisjLiBzaG91bGQgdHJhbnNsYXRlICInIiB0byBVKzIwMUQgKFJJR0hUIERPVUJMRSBRVU9UQVRJT04KKyMuIE1BUkspLiAgQSBCcml0aXNoIEVuZ2xpc2ggVW5pY29kZSBsb2NhbGUgc2hvdWxkIGluc3RlYWQKKyMuIHRyYW5zbGF0ZSB0aGVzZSB0byBVKzIwMTggKExFRlQgU0lOR0xFIFFVT1RBVElPTiBNQVJLKSBhbmQKKyMuIFUrMjAxOSAoUklHSFQgU0lOR0xFIFFVT1RBVElPTiBNQVJLKSwgcmVzcGVjdGl2ZWx5LgorIy4KKyMuIElmIHlvdSBkb24ndCBrbm93IHdoYXQgdG8gcHV0IGhlcmUsIHBsZWFzZSBzZWUKKyMuIDxodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1F1b3RhdGlvbl9tYXJrI0dseXBocz4KKyMuIGFuZCB1c2UgZ2x5cGhzIHN1aXRhYmxlIGZvciB5b3VyIGxhbmd1YWdlLgorIzogbGliL3F1b3RlYXJnLmM6MjI5Cittc2dpZCAiYCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcXVvdGVhcmcuYzoyMzAKK21zZ2lkICInIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTMxCittc2dpZCAiU3VjY2VzcyIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjEzNAorbXNnaWQgIk5vIG1hdGNoIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTM3Cittc2dpZCAiSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNDAKK21zZ2lkICJJbnZhbGlkIGNvbGxhdGlvbiBjaGFyYWN0ZXIiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNDMKK21zZ2lkICJJbnZhbGlkIGNoYXJhY3RlciBjbGFzcyBuYW1lIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTQ2Cittc2dpZCAiVHJhaWxpbmcgYmFja3NsYXNoIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTQ5Cittc2dpZCAiSW52YWxpZCBiYWNrIHJlZmVyZW5jZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE1MgorbXNnaWQgIlVubWF0Y2hlZCBbIG9yIFteIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTU1Cittc2dpZCAiVW5tYXRjaGVkICggb3IgXFwoIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTU4Cittc2dpZCAiVW5tYXRjaGVkIFxceyIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE2MQorbXNnaWQgIkludmFsaWQgY29udGVudCBvZiBcXHtcXH0iCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNjQKK21zZ2lkICJJbnZhbGlkIHJhbmdlIGVuZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE2NworbXNnaWQgIk1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNzAKK21zZ2lkICJJbnZhbGlkIHByZWNlZGluZyByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNzMKK21zZ2lkICJQcmVtYXR1cmUgZW5kIG9mIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE3NgorbXNnaWQgIlJlZ3VsYXIgZXhwcmVzc2lvbiB0b28gYmlnIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTc5Cittc2dpZCAiVW5tYXRjaGVkICkgb3IgXFwpIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6NjgwCittc2dpZCAiTm8gcHJldmlvdXMgcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9ycG1hdGNoLmM6NzAKK21zZ2lkICJeW3lZXSIKK21zZ3N0ciAiIgorCisjOiBsaWIvcnBtYXRjaC5jOjczCittc2dpZCAiXltuTl0iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IFRyYW5zbGF0ZSAiKEMpIiB0byB0aGUgY29weXJpZ2h0IHN5bWJvbAorIy4gKEMtaW4tYS1jaXJjbGUpLCBpZiB0aGlzIHN5bWJvbCBpcyBhdmFpbGFibGUgaW4gdGhlIHVzZXIncworIy4gbG9jYWxlLiAgT3RoZXJ3aXNlLCBkbyBub3QgdHJhbnNsYXRlICIoQykiOyBsZWF2ZSBpdCBhcy1pcy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjY2Cittc2dpZCAiKEMpIgorbXNnc3RyICIiCisKKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjY4Cittc2dpZCAiIgorIlxuIgorIkxpY2Vuc2UgR1BMdjIrOiBHTlUgR1BMIHZlcnNpb24gMiBvciBsYXRlciA8aHR0cDovL2dudS5vcmcvbGljZW5zZXMvZ3BsLiIKKyJodG1sPlxuIgorIlRoaXMgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGFyZSBmcmVlIHRvIGNoYW5nZSBhbmQgcmVkaXN0cmlidXRlIGl0LlxuIgorIlRoZXJlIGlzIE5PIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXcuXG4iCisiXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6ICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJXcml0dGVuIGJ5ICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzo4OAorIywgYy1mb3JtYXQKK21zZ2lkICJXcml0dGVuIGJ5ICVzIGFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIzogbGliL3ZlcnNpb24tZXRjLmM6OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiV3JpdHRlbiBieSAlcywgJXMsIGFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorImFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzoxMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyIlcywgYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjLiBZb3UgY2FuIHVzZSBsaW5lIGJyZWFrcywgZXN0aW1hdGluZyB0aGF0IGVhY2ggYXV0aG9yIG5hbWUgb2NjdXBpZXMKKyMuIGNhLiAxNiBzY3JlZW4gY29sdW1ucyBhbmQgdGhhdCBhIHNjcmVlbiBsaW5lIGhhcyBjYS4gODAgY29sdW1ucy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorIiVzLCAlcywgYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjLiBZb3UgY2FuIHVzZSBsaW5lIGJyZWFrcywgZXN0aW1hdGluZyB0aGF0IGVhY2ggYXV0aG9yIG5hbWUgb2NjdXBpZXMKKyMuIGNhLiAxNiBzY3JlZW4gY29sdW1ucyBhbmQgdGhhdCBhIHNjcmVlbiBsaW5lIGhhcyBjYS4gODAgY29sdW1ucy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjExNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorIiVzLCAlcywgJXMsIGFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzoxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyIlcywgJXMsICVzLCAlcyxcbiIKKyJhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6MTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiJXMsICVzLCAlcywgJXMsXG4iCisiJXMsIGFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzoxNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyIlcywgJXMsICVzLCAlcyxcbiIKKyIlcywgJXMsIGFuZCBvdGhlcnMuXG4iCittc2dzdHIgIiIKKworIzogbGliL3hhbGxvYy1kaWUuYzozNQorbXNnaWQgIm1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjIzNworbXNnaWQgIkRpc2sgSW1hZ2UiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjMzOCBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzoyNjEKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTI3MgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBvcGVuaW5nICVzOiAlcyIKK21zZ3N0ciAiRXJyb3Igb2JyaW50ICVzOiAlcyIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjM0OSBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzoyNzEKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTI4MworIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gb3BlbiAlcyByZWFkLXdyaXRlICglcykuICAlcyBoYXMgYmVlbiBvcGVuZWQgcmVhZC1vbmx5LiIKK21zZ3N0ciAiIgorIk5vIHMnaGEgcG9ndXQgb2JyaXIgJXMgbGVjdHVyYS9lc2NyaXR1cmEgKCVzKS4gJXMgcydoYSBvYmVydCBub23pcyBsZWN0dXJhLiAiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzo0MTEgbGlicGFydGVkL2FyY2gvbGludXguYzoxNDMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGR1cmluZyBzZWVrIGZvciByZWFkIG9uICVzIgorbXNnc3RyICIlcyBtZW50cmUgZXMgcHJlcGFyYXZhIHBlciBsbGVnaXIgYSAlcyIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjQ0NCBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo0NDkgbGlicGFydGVkL2FyY2gvZ251LmM6NTQ4CisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo2NzYgbGlicGFydGVkL2FyY2gvbGludXguYzoxMzkxCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjE0NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZHVyaW5nIHJlYWQgb24gJXMiCittc2dzdHIgIiVzIG1lbnRyZSBzJ2VzdGF2YSBsbGVnaW50IGEgJXMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzo0ODAgbGlicGFydGVkL2FyY2gvZ251LmM6NTA5CisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjE1NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2FuJ3Qgd3JpdGUgdG8gJXMsIGJlY2F1c2UgaXQgaXMgb3BlbmVkIHJlYWQtb25seS4iCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgZXNjcml1cmUgYSAlcywgamEgcXVlIGVyYSBvYmVydCBwZXIgbm9t6XMgbGVjdHVyYSIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjQ5NiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjE1NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZHVyaW5nIHNlZWsgZm9yIHdyaXRlIG9uICVzIgorbXNnc3RyICIlcyBtZW50cmUgZXMgcHJlcGFyYXZhIHBlciBlc2NydWlyZSBhICVzIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6NTMzIGxpYnBhcnRlZC9hcmNoL2dudS5jOjU4NSBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo2MzAKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjcwNyBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjE1MTcKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTYxMiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjE2ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZHVyaW5nIHdyaXRlIG9uICVzIgorbXNnc3RyICIlcyBtZW50cmUgcydlc3RhdmEgZXNjcml2aW50IGEgJXMiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6NjMgcGFydHByb2JlL3BhcnRwcm9iZS5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICJUcnkgYCVzIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4iCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICVzIFtPUFRJT05dXG4iCisiICBvcjogICVzIERFVklDRSBNSU5PUlxuIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6NzAKK21zZ2lkICIiCisiQ2xlYXIgdW51c2VkIHNwYWNlIG9uIGEgRkFUIHBhcnRpdGlvbiAoYSBHTlUgUGFydGVkIHRlc3RpbmcgdG9vbCkuXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo3NAorbXNnaWQgIiAgICAgIC0taGVscCAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXRcbiIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjc1Cittc2dpZCAiICAgICAgLS12ZXJzaW9uICBvdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdFxuIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6NzcgcGFydHByb2JlL3BhcnRwcm9iZS5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiUmVwb3J0IGJ1Z3MgdG8gPCVzPi5cbiIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjI4NQorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gZmV3IGFyZ3VtZW50cyIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjI5MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIgorbXNnc3RyICJNYXNzYSBw4GdpbmVzIGluY29ycmVjdGVzLiIKKworIzogcGFydHByb2JlL3BhcnRwcm9iZS5jOjE0MQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgW09QVElPTl0gW0RFVklDRV0uLi5cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0cHJvYmUvcGFydHByb2JlLmM6MTQyCittc2dpZCAiIgorIkluZm9ybSB0aGUgT1Mgb2YgcGFydGl0aW9uIHRhYmxlIGNoYW5nZXMuXG4iCisiXG4iCisiICAtZCwgLS1uby11cGRhdGUgIGRvbid0IHVwZGF0ZSB0aGUga2VybmVsXG4iCisiICAtcywgLS1zdW1tYXJ5ICAgIHByaW50IGEgc3VtbWFyeSBvZiBjb250ZW50c1xuIgorIiAgLWgsIC0taGVscCAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdFxuIgorIiAgLXYsIC0tdmVyc2lvbiAgICBvdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdFxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRwcm9iZS9wYXJ0cHJvYmUuYzoxNTAKK21zZ2lkICIiCisiXG4iCisiV2l0aCBubyBERVZJQ0UsIHByb2JlIGFsbCBwYXJ0aXRpb25zLlxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBvcGVuICVzLiIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBvYnJpciAlcyIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6MTE0Cittc2dpZCAiVW5hYmxlIHRvIHByb2JlIHN0b3JlLiIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBwcm92YXIgZCdlbW1hZ2F0emVtYXIuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzozNTIKKyMsIGZ1enp5Cittc2dpZCAiIgorIlRoZSBwYXJ0aXRpb24gdGFibGUgY2Fubm90IGJlIHJlLXJlYWQuICBUaGlzIG1lYW5zIHlvdSBuZWVkIHRvIHJlYm9vdCBiZWZvcmUgIgorIm1vdW50aW5nIGFueSBtb2RpZmllZCBwYXJ0aXRpb25zLiAgWW91IGFsc28gbmVlZCB0byByZWluc3RhbGwgeW91ciBib290ICIKKyJsb2FkZXIgYmVmb3JlIHlvdSByZWJvb3QgKHdoaWNoIG1heSByZXF1aXJlIG1vdW50aW5nIG1vZGlmaWVkIHBhcnRpdGlvbnMpLiAgIgorIkl0IGlzIGltcG9zc2libGUgZG8gYm90aCB0aGluZ3MhICBTbyB5b3UnbGwgbmVlZCB0byBib290IG9mZiBhIHJlc2N1ZSBkaXNrLCAiCisiYW5kIHJlaW5zdGFsbCB5b3VyIGJvb3QgbG9hZGVyIGZyb20gdGhlIHJlc2N1ZSBkaXNrLiAgUmVhZCBzZWN0aW9uIDQgb2YgdGhlICIKKyJQYXJ0ZWQgVXNlciBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiIgorIkxhIHRhdWxhIGRlIHBhcnRpY2lvbnMgbm8gcydoYSBwb2d1dCByZWxsZWdpciwgcGVyIHRhbnQgZXMgbmVjZXNzaXRhIGZlciAiCisicmVib290IGFiYW5zIGRlIG11bnRhciB1bmEgcGFydGljafMgbW9kaWZpY2FkYS4gVGFtYukgZXMgbmVjZXNzaXRhICIKKyJyZWluc3RhbLdsYXIgZWwgY2FycmVnYWRvciBkJ2FycmVuY2FkYSBhYmFucyBkZSByZWluaWNpYWxpdHphciAoIHF1ZSBwb3QgIgorIm5lY2Vzc2l0YXIgZWwgbXVudGF0Z2UgZGUgbGVzIHBhcnRpY2lvbnMgbW9kaWZpY2FkZXMgKS4gTm8g6XMgcG9zc2libGUgZmVyICIKKyJsZXMgZHVlcyBjb3NlcyEgUGVyIHRhbnQsIG5lY2Vzc2l0ZXMgYXJyZW5jYXIgYW1iIHVuIGRpc3F1ZXQgZGUgcmVzY2F0IGkgIgorInJlaW5zdGFst2xhciBlbCBjYXJyZWdhZG9yIGQnYXJyZW5jYWRhIGRlcyBkZWwgZGlzYyBkZSByZXNjYXQuIExsZWdlaXggbGEgIgorInNlY2Np8yA0IGRlIGxhIGRvY3VtZW50YWNp8yBkZSBsJ1VzdWFyaSBkZSBQYXJ0ZWQgcGVyIG3pcyBpbmZvcm1hY2nzLiAiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjM2OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBwYXJ0aXRpb24gdGFibGUgb24gJXMgY2Fubm90IGJlIHJlLXJlYWQgKCVzKS4gIFRoaXMgbWVhbnMgdGhlIEh1cmQga25vd3MgIgorIm5vdGhpbmcgYWJvdXQgYW55IG1vZGlmaWNhdGlvbnMgeW91IG1hZGUuICBZb3Ugc2hvdWxkIHJlYm9vdCB5b3VyIGNvbXB1dGVyICIKKyJiZWZvcmUgZG9pbmcgYW55dGhpbmcgd2l0aCAlcy4iCittc2dzdHIgIiIKKyJMYSB0YXVsYSBkZSBwYXJ0aWNpb25zIGEgJXMgKCVzKS5BaXjzIHZvbCBkaXIgcXVlIExpbnV4IG5vIHJlY29uZWl4ZXLgIGNhcCAiCisiZGUgbGVzIG1vZGlmaWNhY2lvbnMgZmV0ZXMuIFMnaGEgZGUgcmUtYXJyZW5jYXIgbGEgbeBxdWluYSBhYmFucyBkZSBmZXIgcmVzICIKKyJhbWIgJXMuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzozODAgcGFydGVkL3BhcnRlZC5jOjI0NDMKK21zZ2lkICIiCisiWW91IHNob3VsZCByZWluc3RhbGwgeW91ciBib290IGxvYWRlciBiZWZvcmUgcmVib290aW5nLiAgUmVhZCBzZWN0aW9uIDQgb2YgIgorInRoZSBQYXJ0ZWQgVXNlciBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiIgorIlMnaGEgZGUgcmVpbnN0YWy3bGFyIGVsIGNhcnJlZ2Fkb3IgZCdhcnJlbmNhZGEgYWJhbnMgZGUgcmVhcnJlbmNhciBsbGVnaXIgbGEgIgorInNlY2Np8yA0IGRlIGxhIGRvY3VtZW50YWNp8yBkZSBsJ1VzdWFyaSBkZSBQYXJ0ZWQgcGVyIG3pcyBpbmZvcm1hY2nzLiIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6NzcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHRyeWluZyB0byBzeW5jICVzIHRvIGRpc2siCittc2dzdHIgIiVzIGludGVudGFudCBkZSBzaW5jcm9uaXR6YXIgJXMgYWwgZGljcyIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo0MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHN0YXQgZGV2aWNlICVzIC0gJXMuIgorbXNnc3RyICJJbXBvc3NpYmxlIGQnaW5pY2lhbGl0emFyIGVsIGRpc3Bvc2l0aXUgJXMgLSAlcy4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6NTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgZGV0ZXJtaW5lIHNlY3RvciBzaXplIGZvciAlczogJXMuXG4iCisiVXNpbmcgdGhlIGRlZmF1bHQgc2VjdG9yIHNpemUgKCVsbGQpLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjUzOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRGV2aWNlICVzIGhhcyBhIGxvZ2ljYWwgc2VjdG9yIHNpemUgb2YgJWxsZC4gIE5vdCBhbGwgcGFydHMgb2YgR05VIFBhcnRlZCAiCisic3VwcG9ydCB0aGlzIGF0IHRoZSBtb21lbnQsIGFuZCB0aGUgd29ya2luZyBjb2RlIGlzIEhJR0hMWSBFWFBFUklNRU5UQUwuXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo1NzkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBkZXRlcm1pbmUgdGhlIHNpemUgb2YgJXMgKCVzKS4iCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgZGV0ZXJtaW5hciBsYSBtaWRhIGRlICVzICglcykiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6NjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBnZXQgaWRlbnRpdHkgb2YgZGV2aWNlICVzIC0gJXMiCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgb2J0ZW5pciBsYSBpZGVudGl0YXQgZGVsIGRpc3Bvc2l0aXUgJXMgLSAlcyIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo2NzcKK21zZ2lkICJHZW5lcmljIElERSIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRGV2aWNlICVzIGhhcyBtdWx0aXBsZSAoJWQpIGxvZ2ljYWwgc2VjdG9ycyBwZXIgcGh5c2ljYWwgc2VjdG9yLlxuIgorIkdOVSBQYXJ0ZWQgc3VwcG9ydHMgdGhpcyBFWFBFUklNRU5UQUxMWSBmb3Igc29tZSBzcGVjaWFsIGRpc2sgbGFiZWwvZmlsZSAiCisic3lzdGVtIGNvbWJpbmF0aW9ucywgZS5nLiBHUFQgYW5kIGV4dDIvMy5cbiIKKyJQbGVhc2UgY29uc3VsdCB0aGUgd2ViIHNpdGUgZm9yIHVwLXRvLWRhdGUgaW5mb3JtYXRpb24uIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6ODczCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGluaXRpYWxpc2luZyBTQ1NJIGRldmljZSAlcyAtICVzIgorbXNnc3RyICJFcnJvciBpbmljaWFsaXR6YW50IGVsIGRpc3Bvc2l0aXUgU0NTSSAlcyAtICVzIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjkyOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGRldmljZSAlcyBoYXMgemVybyBsZW5ndGgsIGFuZCBjYW4ndCBwb3NzaWJseSBzdG9yZSBhIGZpbGUgc3lzdGVtIG9yICIKKyJwYXJ0aXRpb24gdGFibGUuICBQZXJoYXBzIHlvdSBzZWxlY3RlZCB0aGUgd3JvbmcgZGV2aWNlPyIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjEwMzIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVbmFibGUgdG8gZGV0ZXJtaW5lIGdlb21ldHJ5IG9mIGZpbGUvZGV2aWNlICVzLiAgWW91IHNob3VsZCBub3QgdXNlIFBhcnRlZCAiCisidW5sZXNzIHlvdSBSRUFMTFkga25vdyB3aGF0IHlvdSdyZSBkb2luZyEiCittc2dzdHIgIiIKKyJObyBzJ2hhIHBvZ3V0IGRldGVybWluYXIgbGEgZ2VvbWV0cmlhIGRlbCBmaXR4ZXIvZGlzcG9zaXRpdS4gTm8gcydoYXVyaWEgZGUgIgorImZlciBzZXJ2aXIgUGFydGVkIEVYQ0VQVEUgcXVlIHNlIHPgcGlnYSBlbCBxdWUgcydlc3TgIGZlbnQhIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExMTAKK21zZ2lkICJEQUM5NjAgUkFJRCBjb250cm9sbGVyIgorbXNnc3RyICJDb250cm9sYWRvciBSQUlEIERBQzk2MCIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTE1Cittc2dpZCAiUHJvbWlzZSBTWDggU0FUQSBEZXZpY2UiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTIwCittc2dpZCAiSUJNIFMzOTAgREFTRCBkcml2ZSIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExMjUKK21zZ2lkICJJQk0gaVNlcmllcyBWaXJ0dWFsIERBU0QiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTMwCittc2dpZCAiQ29tcGFxIFNtYXJ0IEFycmF5IgorbXNnc3RyICJDb21wYXEgU21hcnQgQXJyYXkiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTEzNQorbXNnaWQgIkFUQVJBSUQgQ29udHJvbGxlciIKK21zZ3N0ciAiQ29udHJvbGFkb3IgQVRBUkFJRCIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTQwCittc2dpZCAiSTJPIENvbnRyb2xsZXIiCittc2dzdHIgIkNvbnRyb2xhZG9yIEkyMCIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTQ1Cittc2dpZCAiVXNlci1Nb2RlIExpbnV4IFVCRCIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExNTYKK21zZ2lkICJMaW51eCBkZXZpY2UtbWFwcGVyIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTE2MgorbXNnaWQgIlVua25vd24iCittc2dzdHIgIkRlc2NvbmVndXQiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTE2OQorbXNnaWQgInBlZF9kZXZpY2VfbmV3KCkgIFVuc3VwcG9ydGVkIGRldmljZSB0eXBlIgorbXNnc3RyICJwZWRfZGV2aWNlX25ldygpICBEaXNwb3NpdGl1IG5vIHN1cG9ydGF0IgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjIwODMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFcnJvciBpbmZvcm1pbmcgdGhlIGtlcm5lbCBhYm91dCBtb2RpZmljYXRpb25zIHRvIHBhcnRpdGlvbiAlcyAtLSAlcy4gIFRoaXMgIgorIm1lYW5zIExpbnV4IHdvbid0IGtub3cgYWJvdXQgYW55IGNoYW5nZXMgeW91IG1hZGUgdG8gJXMgdW50aWwgeW91IHJlYm9vdCAtLSAiCisic28geW91IHNob3VsZG4ndCBtb3VudCBpdCBvciB1c2UgaXQgaW4gYW55IHdheSBiZWZvcmUgcmVib290aW5nLiIKK21zZ3N0ciAiIgorIkVycm9yIGluZm9ybWFudCBlbCBrZXJuZWwgc29icmUgbW9kaWZpY2FjaW9ucyBhIGxhIHBhcnRpY2nzICVzIC0gJXMuIEFpePIgIgorInZvbCBkaXIgcXVlIExpbnV4IG5vIHJlY29uZWl4ZXLgIGNhcCBjYW52aSBxdWUgaGF2ZXUgZmV0IGEgJXMgZmlucyBxdWUgbm8gIgorInJlaW5pY2lldSAtIHBlciB0YW50IG5vIHBvZGV1IG11bnRhci1sYSBvIHV0aWxpdHphci1sYSBlbiBjYXAgc2VudGl0IGFiYW5zICIKKyJkJ2luaWNpYWxpdHphciBsYSBt4HF1aW5hLiAiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MjI2MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorInBhcnRlZCB3YXMgdW5hYmxlIHRvIHJlLXJlYWQgdGhlIHBhcnRpdGlvbiB0YWJsZSBvbiAlcyAoJXMpLiAgVGhpcyBtZWFucyAiCisiTGludXggd29uJ3Qga25vdyBhbnl0aGluZyBhYm91dCB0aGUgbW9kaWZpY2F0aW9ucyB5b3UgbWFkZS4gIgorbXNnc3RyICIiCisiRWwga2VybmVsIG5vIGhhIHBvZ3V0IHJlbGxlZ2lyIGxhIHRhdWxhIGRlIHBhcnRpY2lvbnMgYSAlcyAoJXMpLkFpePMgdm9sIGRpciAiCisicXVlIExpbnV4IG5vIHJlY29uZWl4ZXLgIGNhcCBkZSBsZXMgbW9kaWZpY2FjaW9ucyBmZXRlcy4gSGV1IGQnYXJyZW5jYXIgbGEgIgorIm3gcXVpbmEgYWJhbnMgZGUgZmVyIHJlcyBhbWIgJXMuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjIzNjgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUga2VybmVsIHdhcyB1bmFibGUgdG8gcmUtcmVhZCB0aGUgcGFydGl0aW9uIHRhYmxlIG9uICVzICglcykuICBUaGlzIG1lYW5zICIKKyJMaW51eCB3b24ndCBrbm93IGFueXRoaW5nIGFib3V0IHRoZSBtb2RpZmljYXRpb25zIHlvdSBtYWRlIHVudGlsIHlvdSAiCisicmVib290LiAgWW91IHNob3VsZCByZWJvb3QgeW91ciBjb21wdXRlciBiZWZvcmUgZG9pbmcgYW55dGhpbmcgd2l0aCAlcy4iCittc2dzdHIgIiIKKyJFbCBrZXJuZWwgbm8gaGEgcG9ndXQgcmVsbGVnaXIgbGEgdGF1bGEgZGUgcGFydGljaW9ucyBhICVzICglcykuQWl48yB2b2wgZGlyICIKKyJxdWUgTGludXggbm8gcmVjb25laXhlcuAgY2FwIGRlIGxlcyBtb2RpZmljYWNpb25zIGZldGVzLiBIZXUgZCdhcnJlbmNhciBsYSAiCisibeBxdWluYSBhYmFucyBkZSBmZXIgcmVzIGFtYiAlcy4iCisKKyM6IGxpYnBhcnRlZC9jcy9nZW9tLmM6MTYyCittc2dpZCAiQ2FuJ3QgaGF2ZSB0aGUgZW5kIGJlZm9yZSB0aGUgc3RhcnQhIgorbXNnc3RyICJObyBlcyBwb3QgYWNhYmFyIGFiYW5zIGRlIGNvbWVu52FyISIKKworIzogbGlicGFydGVkL2NzL2dlb20uYzoxNjkKK21zZ2lkICJDYW4ndCBoYXZlIGEgcGFydGl0aW9uIG91dHNpZGUgdGhlIGRpc2shIgorbXNnc3RyICJObyBlcyBwb3QgZmVyIHVuYSBwYXJ0aWNp8yBmb3JhIGRlbCBkaXNjISIKKworIzogbGlicGFydGVkL2NzL2dlb20uYzozNjYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkF0dGVtcHQgdG8gd3JpdGUgc2VjdG9ycyAlbGQtJWxkIG91dHNpZGUgb2YgcGFydGl0aW9uIG9uICVzLiIKK21zZ3N0ciAiUydoYSBpbnRlbnRhdCBlc2NyaXVyZSBzZWN0b3JzICVsZC0lbGQgZm9yYSBkZSBsYSBwYXJ0aWNp8yBhICVzIgorCisjOiBsaWJwYXJ0ZWQvY3MvZ2VvbS5jOjQwNiBsaWJwYXJ0ZWQvZnMvbGludXhfc3dhcC9saW51eF9zd2FwLmM6NDc1Cittc2dpZCAiY2hlY2tpbmcgZm9yIGJhZCBibG9ja3MiCittc2dzdHIgImNvbXByb3ZhbnQgYmxvY3MgZXJy8m5pcyIKKworIzogbGlicGFydGVkL2RlYnVnLmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkJhY2t0cmFjZSBoYXMgJWQgY2FsbHMgb24gc3RhY2s6XG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2RlYnVnLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkFzc2VydGlvbiAoJXMpIGF0ICVzOiVkIGluIGZ1bmN0aW9uICVzKCkgZmFpbGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIwMworIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gb3BlbiAlcyAtIHVucmVjb2duaXNlZCBkaXNrIGxhYmVsLiIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBvYnJpciAlcyAtIGV0aXF1ZXRhIGRlIGRpc2MgZGVzY29uZWd1ZGEuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjQ3MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhpcyBsaWJwYXJ0ZWQgZG9lc24ndCBoYXZlIHdyaXRlIHN1cHBvcnQgZm9yICVzLiAgUGVyaGFwcyBpdCB3YXMgY29tcGlsZWQgIgorInJlYWQtb25seS4iCittc2dzdHIgIiIKKyJBcXVlc3RhIGxpYnBhcnRlZCBubyB06SBzdXBvcnQgcGVyIGVzY3JpdXJlIGEgJXMuIFBvdHNlciB2YSBzZXIgY29tcGlsYWRhICIKKyJwZXIgbm9t6XMgbGVjdHVyYS4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6NTk4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJQYXJ0aXRpb24gJWQgaXMgJXMsIGJ1dCB0aGUgZmlsZSBzeXN0ZW0gaXMgJXMuIgorbXNnc3RyICJMYSBwYXJ0aWNp8yAlZCDpcyBkZSAlLjNmTWIsIHBlcvIgZWwgc2lzdGVtYSBkZSBmaXR4ZXJzIOlzIGRlICUuM2ZNYi4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTA3NQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkaXNrIGxhYmVscyBkbyBub3Qgc3VwcG9ydCBleHRlbmRlZCBwYXJ0aXRpb25zLiIKK21zZ3N0ciAiTGVzIGV0aXF1ZXRlcyBkZSBkaXNjIGRlICVzIG5vIHN1cG9ydGVuIHBhcnRpY2lvbnMgZXh0ZXNlcy4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTYzNAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkaXNrIGxhYmVscyBkb24ndCBzdXBwb3J0IGxvZ2ljYWwgb3IgZXh0ZW5kZWQgcGFydGl0aW9ucy4iCittc2dzdHIgIkxlcyBldGlxdWV0ZXMgZGUgZGlzYyBkZSAlcyBubyBzdXBvcnRlbiBwYXJ0aWNpb25zIGzyZ2lxdWVzIG8gZXh0ZXNlcy4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTY0NworIywgZnV6enkKK21zZ2lkICJUb28gbWFueSBwcmltYXJ5IHBhcnRpdGlvbnMuIgorbXNnc3RyICJNYXNzYSBwYXJ0aWNpb25zIHByaW3gcmllcy4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTY1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2FuJ3QgYWRkIGEgbG9naWNhbCBwYXJ0aXRpb24gdG8gJXMsIGJlY2F1c2UgdGhlcmUgaXMgbm8gZXh0ZW5kZWQgcGFydGl0aW9uLiIKK21zZ3N0ciAiIgorIk5vIGVzIHBvdCBhZmVnaXIgdW5hIHBhcnRpY2nzIGzyZ2ljYSBhICVzLCBqYSBxdWUgbm8gaGkgaGEgdW5hIHBhcnRpY2nzICIKKyJleHRlc2EiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTY4MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ2FuJ3QgaGF2ZSBtb3JlIHRoYW4gb25lIGV4dGVuZGVkIHBhcnRpdGlvbiBvbiAlcy4iCittc2dzdHIgIk5vIHBvdCBoYXZlciBt6XMgZCd1bmEgcGFydGljafMgZXh0ZXNhIGEgJXMiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTY5MAorbXNnaWQgIkNhbid0IGhhdmUgbG9naWNhbCBwYXJ0aXRpb25zIG91dHNpZGUgb2YgdGhlIGV4dGVuZGVkIHBhcnRpdGlvbi4iCittc2dzdHIgIk5vIHBvZGVuIGhhdmVyIHBhcnRpY2lvbnMgbPJnaXF1ZXMgZm9yYSBkZSBsYSBwYXJ0aWNp8yBleHRlc2EuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE3MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2FuJ3QgaGF2ZSBhIGxvZ2ljYWwgcGFydGl0aW9uIG91dHNpZGUgb2YgdGhlIGV4dGVuZGVkIHBhcnRpdGlvbiBvbiAlcy4iCittc2dzdHIgIk5vIHBvdCBoYXZlciB1bmEgcGFydGljafMgbPJnaWNhIGZvcmEgZGUgbGEgcGFydGljafMgZXh0ZXNhIGEgJXMuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE3MjUgbGlicGFydGVkL2Rpc2suYzoxNzc5IGxpYnBhcnRlZC9kaXNrLmM6MTk0NQorIywgZnV6enkKK21zZ2lkICJDYW4ndCBoYXZlIG92ZXJsYXBwaW5nIHBhcnRpdGlvbnMuIgorbXNnc3RyICJObyBwb2RlbiBoYXZlciBwYXJ0aWNpb25zIHNvbGFwYWRlcy4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTczMworbXNnaWQgIkNhbid0IGhhdmUgYSBwcmltYXJ5IHBhcnRpdGlvbiBpbnNpZGUgYW4gZXh0ZW5kZWQgcGFydGl0aW9uLiIKK21zZ3N0ciAiTm8gcG90IGhhdmVyIHVuYSBwYXJ0aWNp8yBwcmltYXJpYSBkaW5zIGQndW5hIHBhcnRpY2nzIGV4dGVzYS4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE0MAorbXNnaWQgIm1ldGFkYXRhIgorbXNnc3RyICJtZXRhZGF0YSIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTQyCittc2dpZCAiZnJlZSIKK21zZ3N0ciAibGxpdXJlIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNDQgcGFydGVkL3VpLmM6MTE2OSBwYXJ0ZWQvdWkuYzoxMTk3Cittc2dpZCAiZXh0ZW5kZWQiCittc2dzdHIgImV4dGVzYSIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTQ2IHBhcnRlZC91aS5jOjExNzMgcGFydGVkL3VpLmM6MTIwMQorbXNnaWQgImxvZ2ljYWwiCittc2dzdHIgImzyZ2ljYSIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTQ4IHBhcnRlZC91aS5jOjExNjUgcGFydGVkL3VpLmM6MTE5MworbXNnaWQgInByaW1hcnkiCittc2dzdHIgInByaW3gcmlhIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNjQKK21zZ2lkICJib290IgorbXNnc3RyICJib290IgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNjYKK21zZ2lkICJyb290IgorbXNnc3RyICJyb290IgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNjgKK21zZ2lkICJzd2FwIgorbXNnc3RyICJzd2FwIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNzAKK21zZ2lkICJoaWRkZW4iCittc2dzdHIgIm9jdWx0YSIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTcyCittc2dpZCAicmFpZCIKK21zZ3N0ciAicmFpZCIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTc0Cittc2dpZCAibHZtIgorbXNnc3RyICJsdm0iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE3NgorbXNnaWQgImxiYSIKK21zZ3N0ciAibGJhIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNzgKK21zZ2lkICJocC1zZXJ2aWNlIgorbXNnc3RyICJzZXJ2ZWktaHAiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE4MAorbXNnaWQgInBhbG8iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTgyCittc2dpZCAicHJlcCIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxODQKK21zZ2lkICJtc2Z0cmVzIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE5MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBwYXJ0aXRpb24gZmxhZywgJWQuIgorbXNnc3RyICJGbGFnIGRlc2NvbmVndXQgYSAlZC4iCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo3OAorbXNnaWQgIkluZm9ybWF0aW9uIgorbXNnc3RyICJJbmZvcm1hY2nzIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6NzkKK21zZ2lkICJXYXJuaW5nIgorbXNnc3RyICJQZXJpbGwiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4MAorbXNnaWQgIkVycm9yIgorbXNnc3RyICJFcnJvciIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjgxCittc2dpZCAiRmF0YWwiCittc2dzdHIgIkZhdGFsIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODIKK21zZ2lkICJCdWciCittc2dzdHIgIkJ1ZyIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjgzCittc2dpZCAiTm8gSW1wbGVtZW50YXRpb24iCittc2dzdHIgIk5vIEltcGxlbWVudGF0IgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODcKK21zZ2lkICJGaXgiCittc2dzdHIgIkZpeCIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjg4Cittc2dpZCAiWWVzIgorbXNnc3RyICJT7SIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjg5Cittc2dpZCAiTm8iCittc2dzdHIgIk5vIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6OTAKK21zZ2lkICJPSyIKK21zZ3N0ciAiRCdhY2NvcmQiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo5MQorbXNnaWQgIlJldHJ5IgorbXNnc3RyICJSZWludGVudGFyIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6OTIKK21zZ2lkICJJZ25vcmUiCittc2dzdHIgIklnbm9yYXIiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo5MworbXNnaWQgIkNhbmNlbCIKK21zZ3N0ciAiQ2FuY2Vst2xhciIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjEzMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIkEgYnVnIGhhcyBiZWVuIGRldGVjdGVkIGluIEdOVSBQYXJ0ZWQuICBSZWZlciB0byB0aGUgd2ViIHNpdGUgb2YgcGFydGVkICIKKyJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvcGFydGVkL3BhcnRlZC5odG1sIGZvciBtb3JlIGluZm9ybWF0aW9ucyBvZiB3aGF0ICIKKyJjb3VsZCBiZSB1c2VmdWwgZm9yIGJ1ZyBzdWJtaXR0aW5nISAgUGxlYXNlIGVtYWlsIGEgYnVnIHJlcG9ydCB0byBidWctIgorInBhcnRlZEBnbnUub3JnIGNvbnRhaW5pbmcgYXQgbGVhc3QgdGhlIHZlcnNpb24gKCVzKSBhbmQgdGhlIGZvbGxvd2luZyAiCisibWVzc2FnZTogICIKK21zZ3N0ciAiIgorIlMnaGEgZGV0ZWN0YXQgdW4gYnVnIGEgR05VIFBhcnRlZC4gU2ktdXMtcGxhdSwgZW52aWV1IHVuIGUtbWFpbCBhIGJ1Zy0iCisicGFydGVkQGdudS5vcmcgcXVlIGNvbnRpbmd1aSBsYSB2ZXJzafMgKCVzKSBpIGVsIHNlZ/xlbnQgbWlzc2F0Z2U6IgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjM4NAorbXNnaWQgIkNvdWxkIG5vdCBkZXRlY3QgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGRldGVjdGFyIGVsIHNpc3RlbWEgZGUgZml0eGVycy4iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6Mzk1CisjLCBmdXp6eQorbXNnaWQgIlRoZSBmaWxlIHN5c3RlbSBpcyBiaWdnZXIgdGhhbiBpdHMgdm9sdW1lISIKK21zZ3N0ciAiRWwgc2lzdGVtYSBkZSBmaXR4ZXJzIOlzIG3pcyBncmFuIHF1ZSBobyDpcyBlbCB2b2x1bSEiCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NDAzCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnQgZm9yIG9wZW5pbmcgJXMgZmlsZSBzeXN0ZW1zIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICIiCisiRWwgc3Vwb3J0IHBlciBvYnJpciBzaXN0ZW1lcyBkZSBmaXR4ZXJzIGRlICVzIGVuY2FyYSBubyBlc3TgIGltcGxlbWVudGF0LiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo0NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VwcG9ydCBmb3IgY3JlYXRpbmcgJXMgZmlsZSBzeXN0ZW1zIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICIiCisiRWwgc3Vwb3J0IHBlciBjcmVhciBzaXN0ZW1lcyBkZSBmaXR4ZXJzIGRlICVzIGVuY2FyYSBubyBlc3TgIGltcGxlbWVudGF0LiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo1MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VwcG9ydCBmb3IgY2hlY2tpbmcgJXMgZmlsZSBzeXN0ZW1zIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICIiCisiRWwgc3Vwb3J0IHBlciBjb21wcm92YXIgc2lzdGVtZXMgZGUgZml0eGVycyBkZSAlcyBlbmNhcmEgbm8gZXN04CBpbXBsZW1lbnRhdC4iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NTcxCittc2dpZCAicmF3IGJsb2NrIGNvcHlpbmciCittc2dzdHIgImNvcGlhbnQgYmxvYyByYXciCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NTgyCittc2dpZCAiZ3Jvd2luZyBmaWxlIHN5c3RlbSIKK21zZ3N0ciAic2lzdGVtYSBkZSBmaXR4ZXJzIGNyZWl4ZW50IgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjYyMgorbXNnaWQgIkNhbid0IGNvcHkgb250byBhbiBvdmVybGFwcGluZyBwYXJ0aXRpb24uIgorbXNnc3RyICJObyBlcyBwb3QgY29waWFyIGEgdW5hIHBhcnRpY2nzIHNvbGFwYWRhLiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo2NDQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJEaXJlY3Qgc3VwcG9ydCBmb3IgY29weWluZyBmaWxlIHN5c3RlbXMgaXMgbm90IHlldCBpbXBsZW1lbnRlZCBmb3IgJXMuICAiCisiSG93ZXZlciwgc3VwcG9ydCBmb3IgcmVzaXppbmcgaXMgaW1wbGVtZW50ZWQuICBUaGVyZWZvcmUsIHRoZSBmaWxlIHN5c3RlbSAiCisiY2FuIGJlIGNvcGllZCBpZiB0aGUgbmV3IHBhcnRpdGlvbiBpcyBhdCBsZWFzdCBhcyBiaWcgYXMgdGhlIG9sZCBvbmUuICBTbywgIgorImVpdGhlciBzaHJpbmsgdGhlIHBhcnRpdGlvbiB5b3UgYXJlIHRyeWluZyB0byBjb3B5LCBvciBjb3B5IHRvIGEgYmlnZ2VyICIKKyJwYXJ0aXRpb24uIgorbXNnc3RyICIiCisiU3VwcG9ydCBkaXJlY3RlIHBlciBjb3BpYXIgc2lzdGVtZXMgZGUgZml0eGVycyBlbmNhcmEgbm8gaGEgZXN0YXQgIgorImltcGxlbWVudGFkYSBwZXIgJXMuIE5vIG9ic3RhbnQsIHNpIHF1ZSBlc3TgIGltcGxlbWVudGF0IGVsIHN1cG9ydCBwZXIgZWwgIgorInJlZGltZW5zaW9uYW1lbnQuIFBlciB0YW50LCBlbCBzaXN0ZW1hIGRlIGZpdHhlcnMgcG90IHNlciBjb3BpYXQgc2kgbGEgbm92YSAiCisicGFydGljafMg6XMsIGNvbSBhIG3tbmltLCB0YW50IGdyYW4gY29tIGxhIGFudGlnYS4gUGVyIHRhbnQsIG8gZXMgY29udHJhdSBsYSAiCisicGFydGljafMgcXVlIGVzIHZvbCBjb3BpYXIgbyBlcyBjb3BpYSBhIHVuYSBwYXJ0aWNp8yBt6XMgZ3Jhbi4iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnQgZm9yIGNvcHlpbmcgJXMgZmlsZSBzeXN0ZW1zIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICJTdXBvcnQgcGVyIGNvcGlhciBzaXN0ZW1lcyBkZSBmaXR4ZXJzICVzIGVuY2FyYSBubyBlc3TgIGltcGxlbWVudGF0LiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo2OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VwcG9ydCBmb3IgcmVzaXppbmcgJXMgZmlsZSBzeXN0ZW1zIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICIiCisiRWwgc3Vwb3J0IHBlciByZWRpbWVuc2lvbmFyIHNpc3RlbWVzIGRlIGZpdHhlcnMgZGUgJXMgZW5jYXJhIG5vIGVzdOAgIgorImltcGxlbWVudGF0LiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6MzE1Cittc2dpZCAiY3JlYXRpbmciCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDAyCisjLCBmdXp6eQorbXNnaWQgIlRoZSBmaWxlIHN5c3RlbSBpcyBpbiBhbiBpbnZhbGlkIHN0YXRlLiAgUGVyaGFwcyBpdCBpcyBtb3VudGVkPyIKK21zZ3N0ciAiRWwgc2lzdGVtYSBkZSBmaXR4ZXJzIOlzIG3pcyBncmFuIHF1ZSBobyDpcyBlbCB2b2x1bSEiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQxMAorbXNnaWQgIlRoZSBmaWxlIHN5c3RlbSBpcyBpbiBvbGQgKHVucmVzaXplYWJsZSkgZm9ybWF0LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0MTYKK21zZ2lkICJJbnZhbGlkIGZyZWUgYmxvY2tzIGNvdW50LiAgUnVuIHJlaXNlcmZzY2sgLS1jaGVjayBmaXJzdC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDMxCisjLCBmdXp6eQorbXNnaWQgImNoZWNraW5nIgorbXNnc3RyICJjb21wcm92YSIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDM3Cittc2dpZCAiUmVpc2VyZnMgdHJlZSBzZWVtcyB0byBiZSBjb3JydXB0ZWQuICBSdW4gcmVpc2VyZnNjayAtLWNoZWNrIGZpcnN0LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0NDkKKyMsIGZ1enp5Cittc2dpZCAiIgorIlRoZSByZWlzZXJmcyBmaWxlIHN5c3RlbSBwYXNzZWQgYSBiYXNpYyBjaGVjay4gIEZvciBhIG1vcmUgY29tcHJlaGVuc2l2ZSAiCisiY2hlY2ssIHJ1biByZWlzZXJmc2NrIC0tY2hlY2suIgorbXNnc3RyICIiCisiRWwgc2lzdGVtYSBkZSBmaXR4ZXJzIGV4dDIgaGEgcGFzc2F0IHVuYSBjb21wcm92YWNp8yBi4HNpY2EuIFBlciB1bmEgIgorImNvbXByb3ZhY2nzIG3pcyBjb21wbGV0YSB1dGlsaXR6YXIgZWwgcHJvZ3JhbWEgZTJmc2NrLiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDc0CisjLCBmdXp6eQorbXNnaWQgIlNvcnJ5LCBjYW4ndCBtb3ZlIHRoZSBzdGFydCBvZiByZWlzZXJmcyBwYXJ0aXRpb25zIHlldC4iCittc2dzdHIgIkhvIHNlbnRvLCBubyBlcyBwb3QgbW91cmUgZW5jYXJhIGVsIGNvbWVu52FtZW50IGRlIGxlcyBwYXJ0aWNpb25zIGV4dDIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQ5MAorbXNnaWQgIkNvdWxkbid0IHJlb3BlbiBkZXZpY2UgYWJzdHJhY3Rpb24gbGF5ZXIgZm9yIHJlYWQvd3JpdGUuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjUwOCBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjU1MgorIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzoyNTAgbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo2MjkKK21zZ2lkICJzaHJpbmtpbmciCittc2dzdHIgImVuY29uZ2ludCIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NTIwCisjLCBmdXp6eQorbXNnaWQgImV4cGFuZGluZyIKK21zZ3N0ciAiUGVyaWxsIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo1OTIKK21zZ2lkICJDb3VsZG4ndCBjcmVhdGUgcmVpc2VyZnMgZGV2aWNlIGFic3RyYWN0aW9uIGhhbmRsZXIuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjYwNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRGV2aWNlIGlzIHRvbyBzbWFsbCBmb3IgJWx1IGJsb2Nrcy4iCittc2dzdHIgIlNpc3RlbWEgZGUgZml0eGVycyBtYXNzYSBwZXRpdCBwZXIgZXh0Mi4iCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjYxNQorbXNnaWQgImNvcHlpbmciCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IHJlc29sdmUgc3ltYm9sICVzLiAgRXJyb3I6ICVzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo3MDQKK21zZ2lkICJHTlUgUGFydGVkIGZvdW5kIGFuIGludmFsaWQgbGlicmVpc2VyZnMgbGlicmFyeS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJHTlUgUGFydGVkIGhhcyBkZXRlY3RlZCBsaWJyZWlzZXJmcyBpbnRlcmZhY2UgdmVyc2lvbiBtaXNtYXRjaC4gIEZvdW5kICVkLSUiCisiZCwgcmVxdWlyZWQgJWQuIFJlaXNlckZTIHN1cHBvcnQgd2lsbCBiZSBkaXNhYmxlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9haXguYzoxMzcKKyMsIGZ1enp5Cittc2dpZCAiU3VwcG9ydCBmb3IgcmVhZGluZyBBSVggZGlzayBsYWJlbHMgaXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiIKKyJFbCBzdXBvcnQgcGVyIGNyZWFyIHNpc3RlbWVzIGRlIGZpdHhlcnMgZGUgJXMgZW5jYXJhIG5vIGVzdOAgaW1wbGVtZW50YXQuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2FpeC5jOjE0OAorIywgZnV6enkKK21zZ2lkICJTdXBwb3J0IGZvciB3cml0aW5nIEFJWCBkaXNrIGxhYmVscyBpcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiIgorIkVsIHN1cG9ydCBwZXIgY3JlYXIgc2lzdGVtZXMgZGUgZml0eGVycyBkZSAlcyBlbmNhcmEgbm8gZXN04CBpbXBsZW1lbnRhdC4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYWl4LmM6MTYxCisjLCBmdXp6eQorbXNnaWQgIiIKKyJTdXBwb3J0IGZvciBhZGRpbmcgcGFydGl0aW9ucyB0byBBSVggZGlzayBsYWJlbHMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiIKKyJFbCBzdXBvcnQgcGVyIGNyZWFyIHNpc3RlbWVzIGRlIGZpdHhlcnMgZGUgJXMgZW5jYXJhIG5vIGVzdOAgaW1wbGVtZW50YXQuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2FpeC5jOjE3MQorIywgZnV6enkKK21zZ2lkICIiCisiU3VwcG9ydCBmb3IgZHVwbGljYXRpbmcgcGFydGl0aW9ucyBpbiBBSVggZGlzayBsYWJlbHMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiIKKyJFbCBzdXBvcnQgcGVyIGNyZWFyIHNpc3RlbWVzIGRlIGZpdHhlcnMgZGUgJXMgZW5jYXJhIG5vIGVzdOAgaW1wbGVtZW50YXQuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2FpeC5jOjE4OQorIywgZnV6enkKK21zZ2lkICIiCisiU3VwcG9ydCBmb3Igc2V0dGluZyBzeXN0ZW0gdHlwZSBvZiBwYXJ0aXRpb25zIGluIEFJWCBkaXNrIGxhYmVscyBpcyBub3QgIgorImltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiIKKyJFbCBzdXBvcnQgcGVyIGNyZWFyIHNpc3RlbWVzIGRlIGZpdHhlcnMgZGUgJXMgZW5jYXJhIG5vIGVzdOAgaW1wbGVtZW50YXQuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2FpeC5jOjE5OQorIywgZnV6enkKK21zZ2lkICJTdXBwb3J0IGZvciBzZXR0aW5nIGZsYWdzIGluIEFJWCBkaXNrIGxhYmVscyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiIgorIkVsIHN1cG9ydCBwZXIgY3JlYXIgc2lzdGVtZXMgZGUgZml0eGVycyBkZSAlcyBlbmNhcmEgbm8gZXN04CBpbXBsZW1lbnRhdC4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYnNkLmM6NTAxIGxpYnBhcnRlZC9sYWJlbHMvZGFzZC5jOjc1NQorIzogbGlicGFydGVkL2xhYmVscy9kb3MuYzoxOTc0IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6NzcwCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjE0NDggbGlicGFydGVkL2xhYmVscy9sb29wLmM6MjQ4CisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjE0MDggbGlicGFydGVkL2xhYmVscy9wYzk4LmM6NzU5CisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjEwNDEgbGlicGFydGVkL2xhYmVscy9zdW4uYzo3MDUKK21zZ2lkICJVbmFibGUgdG8gc2F0aXNmeSBhbGwgY29uc3RyYWludHMgb24gdGhlIHBhcnRpdGlvbi4iCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgc2F0aXNmZXIgbGVzIGxpbWl0YWNpb25zIGEgbGEgcGFydGljafMiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYnNkLmM6NTI2CisjLCBmdXp6eQorbXNnaWQgIlVuYWJsZSB0byBhbGxvY2F0ZSBhIGJzZCBkaXNrbGFiZWwgc2xvdC4iCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgcmVzZXJ2YXIgdW5hIGV0aXF1ZXRhIGJzZCIKKworIzogbGlicGFydGVkL2xhYmVscy9kYXNkLmM6MTY2CisjLCBmdXp6eQorbXNnaWQgIlVuYWJsZSB0byBkZXRlcm1pbmUgdGhlIGJsb2NrIHNpemUgb2YgdGhpcyBkYXNkIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGRldGVybWluYXIgbGEgbWlkYSBkZSAlcyAoJXMpIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rhc2QuYzo3ODEKKyMsIGZ1enp5Cittc2dpZCAiVW5hYmxlIHRvIGFsbG9jYXRlIGEgZGFzZCBkaXNrbGFiZWwgc2xvdCIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCByZXNlcnZhciB1bmEgZXRpcXVldGEgYnNkIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rvcy5jOjgyNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBwYXJ0aXRpb24gdGFibGUgb24gJXMgLS0gd3Jvbmcgc2lnbmF0dXJlICV4LiIKK21zZ3N0ciAiVGF1bGEgZGUgcGFydGljaW9ucyBpbnbgbGlkYSBhICVzIC0gc2lnbmF0dXJhIGRvbGVudGEgJXguIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rvcy5jOjg1NQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHBhcnRpdGlvbiB0YWJsZSAtIHJlY3Vyc2l2ZSBwYXJ0aXRpb24gb24gJXMuIgorbXNnc3RyICJUYXVsYSBkZSBwYXJ0aWNpb25zIGluduBsaWRhIC0gcGFydGljafMgcmVjdXJzaXZhIGEgJXMuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rvcy5jOjEzMTgKK21zZ2lkICJFeHRlbmRlZCBwYXJ0aXRpb25zIGNhbm5vdCBiZSBoaWRkZW4gb24gbXNkb3MgZGlzayBsYWJlbHMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZG9zLmM6MTk1OAorbXNnaWQgIlBhcnRlZCBjYW4ndCByZXNpemUgcGFydGl0aW9ucyBtYW5hZ2VkIGJ5IFdpbmRvd3MgRHluYW1pYyBEaXNrLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjE5MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIG5vIGV4dGVuZGVkIHBhcnRpdGlvbiAodm9sdW1lIGhlYWRlciBwYXJ0aXRpb24pLiIKK21zZ3N0ciAiIgorIiVzIG5vIHTpIHBhcnRpY2nzIGV4dGVzYSAocGFydGljafMgZGUgY2Fw52FsZXJhIGRlIHZvbHVtKS4gIFNpIGlnbm9yZXUsIHRvdHMgIgorImVscyB2b2x1bXMgZCdhcnJlbmNhZGEgc2Vy4G4gZXNib3JyYXRzLiAiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6MzEzCittc2dpZCAiQ2hlY2tzdW0gaXMgd3JvbmcsIGluZGljYXRpbmcgdGhlIHBhcnRpdGlvbiB0YWJsZSBpcyBjb3JydXB0LiIKK21zZ3N0ciAiIgorIkNoZWNrc3VtIGluY29ycmVjdGUsIGxhIHF1YWwgY29zYSBpbmRpY2EgcXVlIGxhIHRhdWxhIGRlIHBhcnRpY2lvbnMg6XMgIgorImNvcnJ1cHRlLiIKKworIzogbGlicGFydGVkL2xhYmVscy9kdmguYzo2MTYKK21zZ2lkICJPbmx5IHByaW1hcnkgcGFydGl0aW9ucyBjYW4gYmUgcm9vdCBwYXJ0aXRpb25zLiIKK21zZ3N0ciAiTm9t6XMgbGVzIHBhcnRpY2lvbnMgcHJpbeByaWVzIHBvZGVuIHNlciBwYXJ0aWNpb25zIHJvb3QuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjYzMAorbXNnaWQgIk9ubHkgcHJpbWFyeSBwYXJ0aXRpb25zIGNhbiBiZSBzd2FwIHBhcnRpdGlvbnMuIgorbXNnc3RyICJOb23pcyBsZXMgcGFydGljaW9ucyBwcmlt4HJpZXMgcG9kZW4gc2VyIHBhcnRpY2lvbnMgc3dhcC4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6NjQ0Cittc2dpZCAiT25seSBsb2dpY2FsIHBhcnRpdGlvbnMgY2FuIGJlIGEgYm9vdCBmaWxlLiIKK21zZ3N0ciAiTm9t6XMgbGVzIHBhcnRpY2lvbnMgbPJnaXF1ZXMgcG9kZW4gc2VyIHVuIGZpdHhlciBkJ2FycmVuY2FkYS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6NzIxCittc2dpZCAiT25seSBsb2dpY2FsIHBhcnRpdGlvbnMgKGJvb3QgZmlsZXMpIGhhdmUgYSBuYW1lLiIKK21zZ3N0ciAiTm9t6XMgbGVzIHBhcnRpY2lvbnMgbPJnaXF1ZXMgKGZpdHhlcnMgZCdhcnJlbmNhZGEpIHRlbmVuIG5vbS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6ODEyCittc2dpZCAiVG9vIG1hbnkgcHJpbWFyeSBwYXJ0aXRpb25zIgorbXNnc3RyICJNYXNzYSBwYXJ0aWNpb25zIHByaW3gcmllcy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIG9wZW4gZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHNlZWsgZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHJlYWQgZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMTMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyB3cml0ZSBlcnJvclxuIgorIiVzXG4iCittc2dzdHIgIiVzIG1lbnRyZSBzJ2VzdGF2YSBlc2NyaXZpbnQgYSAlcyIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjExNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgSU9DVEwgZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIEFQSSB2ZXJzaW9uIG1pc21hdGNoXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBVbnN1cHBvcnRlZCBkaXNrIHR5cGVcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFVuc3VwcG9ydGVkIGRpc2sgZm9ybWF0XG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTMwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgRGlzayBpbiB1c2VcbiIKKyIlc1xuIgorbXNnc3RyICIlcyAgJXMgICVzIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBDb25maWcgZmlsZSBzeW50YXggZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFZvbHVtZSBsYWJlbCBpcyBjb3JydXB0ZWQuXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBhIGRhdGEgc2V0IG5hbWUgaXMgY29ycnVwdGVkLlxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjE0NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgc3BhY2UgYWxsb2NhdGlvblxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgZGV2aWNlIHZlcmlmaWNhdGlvbiBmYWlsZWRcbiIKKyJUaGUgc3BlY2lmaWVkIGRldmljZSBpcyBub3QgYSB2YWxpZCBEQVNEIGRldmljZVxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIEZhdGFsIGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjQ1NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIGNvbnRhaW5zIEdQVCBzaWduYXR1cmVzLCBpbmRpY2F0aW5nIHRoYXQgaXQgaGFzIGEgR1BUIHRhYmxlLiAgSG93ZXZlciwgaXQgIgorImRvZXMgbm90IGhhdmUgYSB2YWxpZCBmYWtlIG1zZG9zIHBhcnRpdGlvbiB0YWJsZSwgYXMgaXQgc2hvdWxkLiAgUGVyaGFwcyBpdCAiCisid2FzIGNvcnJ1cHRlZCAtLSBwb3NzaWJseSBieSBhIHByb2dyYW0gdGhhdCBkb2Vzbid0IHVuZGVyc3RhbmQgR1BUIHBhcnRpdGlvbiAiCisidGFibGVzLiAgT3IgcGVyaGFwcyB5b3UgZGVsZXRlZCB0aGUgR1BUIHRhYmxlLCBhbmQgYXJlIG5vdyB1c2luZyBhbiBtc2RvcyAiCisicGFydGl0aW9uIHRhYmxlLiAgSXMgdGhpcyBhIEdQVCBwYXJ0aXRpb24gdGFibGU/IgorbXNnc3RyICIiCisiJXMgY29udOkgc2lnbmF0dXJlcyBHUFQsIGxhIHF1YWwgY29zYSBpbmRpY2EgcXVlIHTpIHVuYSB0YXVsYSBHUFQuIE5vICIKKyJvYnN0YW50LCBubyB06SB1bmEgdGF1bGEgZGUgcGFydGljaW9ucyBtc2RvcyBpbWl0YWRhLCBjb20gaGF1cmlhIGRlIHNlci4gICIKKyJQb3RzZXIg6XMgY29ycnVwdGUgLSBwb3NzaWJsZW1lbnQgcGVyIHVuIHByb2dyYW1hIHF1ZSBubyDpcyBjYXBh5yBkJ2VudGVuZHJlICIKKyJsZXMgdGF1bGVzIGRlIHBhcnRpY2nzIEdQVC4gTyBwb3RzZXIsIHRhbWLpLCBoZXUgZXNib3JyYXQgbGEgdGF1bGEgR1BUIGkgYXJhICIKKyJmZXUgc2VydmlyIHVuYSB0YXVsYSBkZSBwYXJ0aWNpb25zIG1zZG9zLiDJcyBhcXVlc3RhIHVuYSBwYXJ0aWNp8yBHUFQ/ICIKKworIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzo2NDgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9ybWF0IG9mIHRoZSBHUFQgcGFydGl0aW9uIHRhYmxlIGlzIHZlcnNpb24gJXgsIHdoaWNoIGlzIG5ld2VyIHRoYW4gIgorIndoYXQgUGFydGVkIGNhbiByZWNvZ25pc2UuICBQbGVhc2UgdGVsbCB1cyEgIGJ1Zy1wYXJ0ZWRAZ251Lm9yZyIKK21zZ3N0ciAiIgorIkVsIGZvcm1hdCBkZSBsYSB0YXVsYSBkZSBwYXJ0aWNpb25zIEdQVCDpcyBt6XMgbm91IHF1ZSBlbCBxdWUgUGFydGVkIHBvdCAiCisicmVjb25laXhlci4gU2ktdXMtcGxhdSwgZGlnYSducy1obyBhICBidWctcGFydGVkQGdudS5vcmciCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6Njk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3QgYWxsIG9mIHRoZSBzcGFjZSBhdmFpbGFibGUgdG8gJXMgYXBwZWFycyB0byBiZSB1c2VkLCB5b3UgY2FuIGZpeCB0aGUgR1BUICIKKyJ0byB1c2UgYWxsIG9mIHRoZSBzcGFjZSAoYW4gZXh0cmEgJWxsdSBibG9ja3MpIG9yIGNvbnRpbnVlIHdpdGggdGhlIGN1cnJlbnQgIgorInNldHRpbmc/ICIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjgyNworbXNnaWQgIiIKKyJUaGUgYmFja3VwIEdQVCB0YWJsZSBpcyBub3QgYXQgdGhlIGVuZCBvZiB0aGUgZGlzaywgYXMgaXQgc2hvdWxkIGJlLiAgVGhpcyAiCisibWlnaHQgbWVhbiB0aGF0IGFub3RoZXIgb3BlcmF0aW5nIHN5c3RlbSBiZWxpZXZlcyB0aGUgZGlzayBpcyBzbWFsbGVyLiAgRml4LCAiCisiYnkgbW92aW5nIHRoZSBiYWNrdXAgdG8gdGhlIGVuZCAoYW5kIHJlbW92aW5nIHRoZSBvbGQgYmFja3VwKT8iCittc2dzdHIgIiIKKyJMYSBj8nBpYSBkZSBsYSB0YXVsYSBHUFQgbm8g6XMgYWwgZmluYWwgZGVsIGRpc2MgY29tIGhhdXJpZWEgZCdzZXIuIEFpePIgcG90ICIKKyJ2b2xlciBkaXIgcXVlIHVuIGFsdHJlIHNpc3RlbWEgb3BlcmF0aXUgY3JldSBxdWUgZWwgZGlzYyDpcyBt6XMgcGV0aXQuIEhvICIKKyJ2b2xldSBhcnJlZ2xhciBub3ZlbnQgbGEgY/JwaWEgYWwgZmluYWwgKCBpIGVzYm9ycmFudCBsYSBj8nBpYSBhbnRpZ2EpPyIKKworIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzo4NjIKKyMsIGZ1enp5Cittc2dpZCAiIgorIlRoZSBwcmltYXJ5IEdQVCB0YWJsZSBpcyBjb3JydXB0LCBidXQgdGhlIGJhY2t1cCBhcHBlYXJzIE9LLCBzbyB0aGF0IHdpbGwgYmUgIgorInVzZWQuIgorbXNnc3RyICIiCisiTGEgdGF1bGEgcHJpbeByaWEgR1BUIOlzIGNvcnJ1cHRlLCBwZXLyIGxhIGPycGlhIHNlbWJsYSBjb3JyZWN0YSwgcGVyIHRhbnQgIgorImVzIGZhcuAgc2VydmlyIGFxdWVzdGEuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjg3MAorIywgZnV6enkKK21zZ2lkICIiCisiQm90aCB0aGUgcHJpbWFyeSBhbmQgYmFja3VwIEdQVCB0YWJsZXMgYXJlIGNvcnJ1cHQuICBUcnkgbWFraW5nIGEgZnJlc2ggIgorInRhYmxlLCBhbmQgdXNpbmcgUGFydGVkJ3MgcmVzY3VlIGZlYXR1cmUgdG8gcmVjb3ZlciBwYXJ0aXRpb25zLiIKK21zZ3N0ciAiIgorIlRhbnQgbGEgdGF1bGEgcHJpbeByaWEgR1BUIGNvbSBsYSBj8nBpYSBz824gY29ycnVwdGVzLiAgSW50ZW50ZXUgY3JlYXIgdW5hICIKKyJ0YXVsYSBhY3R1YWxpdHphZGEsIGkgZmVudCBzZXJ2aXIgbGEgb3BjafMgZGUgcmVzY2F0IGRlIFBhcnRlZCBwZXIgIgorInJlY29uc3Ryde9yIGxlcyBwYXJ0aWNpb25zLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoxODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBzaWduYXR1cmUgJXggZm9yIE1hYyBkaXNrIGxhYmVscy4iCittc2dzdHIgIlNpZ25hdHVyYSBpbnbgbGlkYSAleCBwZXIgZXRpcXVldGVzIGRlIGRpc2NzIE1hYy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6MjI2Cittc2dpZCAiUGFydGl0aW9uIG1hcCBoYXMgbm8gcGFydGl0aW9uIG1hcCBlbnRyeSEiCittc2dzdHIgIkVsIE1hcGEgZGUgcGFydGljaW9ucyBubyB06SBlbnRyYWRhIGRlIG1hcGEgZGUgcGFydGljaW9ucyEiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIHRvbyBzbWFsbCBmb3IgYSBNYWMgZGlzayBsYWJlbCEiCittc2dzdHIgIiVzIG1hc3NhIHBldGl0YSBwZXIgdW5hIGV0aXF1ZXRhIGQndW4gZGlzYyBNYWMuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjUzMgorIywgYy1mb3JtYXQKK21zZ2lkICJQYXJ0aXRpb24gJWQgaGFzIGFuIGludmFsaWQgc2lnbmF0dXJlICV4LiIKK21zZ3N0ciAiTGEgcGFydGljafMgJWQgdOkgdW5hIHNpZ25hdHVyYSBpbnbgbGlkYSAleC4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIlBhcnRpdGlvbiAlZCBoYXMgYW4gaW52YWxpZCBsZW5ndGggb2YgMCBieXRlcyEiCittc2dzdHIgIkxhIHBhcnRpY2nzICVkIHTpIHVuYSBsb2dpdHVkIGluduBsaWRhIGRlIDAgYnl0ZXMhIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjU4MAorIywgZnV6enkKK21zZ2lkICJUaGUgZGF0YSByZWdpb24gZG9lc24ndCBzdGFydCBhdCB0aGUgc3RhcnQgb2YgdGhlIHBhcnRpdGlvbi4iCittc2dzdHIgIkxhIHJlZ2nzIGRlIGRhZGVzIG5vIGNvbWVu52EgYWwgcHJpbmNpcGkgZGUgbGEgcGFydGljafMiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NTk3CisjLCBmdXp6eQorbXNnaWQgIlRoZSBib290IHJlZ2lvbiBkb2Vzbid0IHN0YXJ0IGF0IHRoZSBzdGFydCBvZiB0aGUgcGFydGl0aW9uLiIKK21zZ3N0ciAiTGEgcmVnafMgZCdhcnJlbmNhZGEgbm8gY29tZW3nYSBhbCBwcmluY2lwaSBkZSBsYSBwYXJ0aWNp8yIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo2MTEKK21zZ2lkICJUaGUgcGFydGl0aW9uJ3MgYm9vdCByZWdpb24gZG9lc24ndCBvY2N1cHkgdGhlIGVudGlyZSBwYXJ0aXRpb24uIgorbXNnc3RyICJMYSByZWdp8yBkJ2FycmVuY2FkYSBkZSBsYSBwYXJ0aWNp8yBubyBvY3VwYSBsYSBwYXJ0aWNp8yBzZW5jZXJhLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo2MjIKK21zZ2lkICJUaGUgcGFydGl0aW9uJ3MgZGF0YSByZWdpb24gZG9lc24ndCBvY2N1cHkgdGhlIGVudGlyZSBwYXJ0aXRpb24uIgorbXNnc3RyICJMYSByZWdp8yBkZSBkYWRlcyBkZSBsYSBwYXJ0aWNp8yBubyBvY3VwYSBsYSBwYXJ0aWNp8yBzZW5jZXJhLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo2NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldlaXJkIGJsb2NrIHNpemUgb24gZGV2aWNlIGRlc2NyaXB0b3I6ICVkIGJ5dGVzIGlzIG5vdCBkaXZpc2libGUgYnkgNTEyLiIKK21zZ3N0ciAiIgorIkxhIG1pZGEgZGUgYmxvYyBleHRyYW55IGFsIGRpc3Bvc2l0aXU6ICVkIGJ5dGVzIG5vIOlzIGRpdmlzaWJsZSBwZXIgNTEyLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo2ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBkcml2ZXIgZGVzY3JpcHRvciBzYXlzIHRoZSBwaHlzaWNhbCBibG9jayBzaXplIGlzICVkIGJ5dGVzLCBidXQgTGludXggIgorInNheXMgaXQgaXMgJWQgYnl0ZXMuIgorbXNnc3RyICIiCisiRWwgY29udHJvbGFkb3IgZGl1IHF1ZSBlbCB0YW1hbnkgZGUgYmxvYyBm7XNpYyDpcyBkZSAlZCBieXRlcywgcGVy8iBMaW51eCAiCisidHJvYmEgcXVlIOlzIGRlICVkIGJ5dGVzLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo3MzYKK21zZ2lkICJObyB2YWxpZCBwYXJ0aXRpb24gbWFwIGZvdW5kLiIKK21zZ3N0ciAiTm8gcydoYSB0cm9iYXQgdW4gbWFwYSBkZSBwYXJ0aWNpb25zIHbgbGlkLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo3OTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb25mbGljdGluZyBwYXJ0aXRpb24gbWFwIGVudHJ5IHNpemVzISAgRW50cnkgMSBzYXlzIGl0IGlzICVkLCBidXQgZW50cnkgJWQgIgorInNheXMgaXQgaXMgJWQhIgorbXNnc3RyICIiCisiQ29uZmxpY3RlIGRlIG1pZGEgZGUgZW50cmFkYSBkZWwgbWFwYSBkZSBwYXJ0aWNpb25zISBMYSBlbnRyYWRhIDEgZGl1IHF1ZSDpcyAiCisiJWQsIHBlcvIgbGEgZW50cmFkYSAlZCBkaXUgcXVlIOlzICVkISIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo4MjIKKyMsIGZ1enp5Cittc2dpZCAiV2VpcmQhICBUaGVyZSBhcmUgMiBwYXJ0aXRpb25zIG1hcCBlbnRyaWVzISIKK21zZ3N0ciAiRXN0cmFueSAtIDIgZW50cmFkZXMgZGUgbWFwZXMgZGUgcGFydGljaW9ucyEiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6MTM0NworbXNnaWQgIiIKKyJDaGFuZ2luZyB0aGUgbmFtZSBvZiBhIHJvb3Qgb3Igc3dhcCBwYXJ0aXRpb24gd2lsbCBwcmV2ZW50IExpbnV4IGZyb20gIgorInJlY29nbmlzaW5nIGl0IGFzIHN1Y2guIgorbXNnc3RyICIiCisiQ2FudmlhciBlbCBub20gZCd1bmEgcGFydGljafMgcm9vdCBvIHN3YXAgaW1wZWRpcuAgcXVlIExpbnV4IGxlcyByZWNvbmVpeGkgIgorImNvbSBhIHRhbHMuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjE0NDMKKyMsIGZ1enp5Cittc2dpZCAiQ2FuJ3QgYWRkIGFub3RoZXIgcGFydGl0aW9uIC0tIHRoZSBwYXJ0aXRpb24gbWFwIGlzIHRvbyBzbWFsbCEiCittc2dzdHIgIiIKKyJObyBlcyBwb3QgYWZlZ2lyIHVuYSBhbHRyYSBwYXJ0aWNp8yAtIGVsIG1hcGEgZGUgcGFydGljaW9ucyDpcyBtYXNzYSBwZXRpdCEiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcGM5OC5jOjM1NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBwYXJ0aXRpb24gdGFibGUgb24gJXMuIgorbXNnc3RyICJUYXVsYSBkZSBwYXJ0aWNpb25zIGluduBsaWRhIGEgJXMiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcGM5OC5jOjQwNiBsaWJwYXJ0ZWQvbGFiZWxzL3BjOTguYzo0ODQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQYXJ0aXRpb24gJWQgaXNuJ3QgYWxpZ25lZCB0byBjeWxpbmRlciBib3VuZGFyaWVzLiAgVGhpcyBpcyBzdGlsbCAiCisidW5zdXBwb3J0ZWQuIgorbXNnc3RyICIiCisiTGEgcGFydGljafMgJWQgbm8gZXN04CBhbGluaWFkYSBhbHMgbO1taXRzIGRlbHMgY2lsaW5kcmVzLiBDYWwgYWZlZ2lyIHN1cG9ydCAiCisicGVyIGFxdWVzdGEgY2FyYWN0ZXLtc3RpY2EuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3BjOTguYzo3OTEKK21zZ2lkICJDYW4ndCBhZGQgYW5vdGhlciBwYXJ0aXRpb24uIgorbXNnc3RyICJObyBlcyBwb3QgYWZlZ2lyIHVuIGFsdHJhIHBhcnRpY2nzLiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzoxNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBCYWQgY2hlY2tzdW0gb24gYmxvY2sgJWxsdSBvZiB0eXBlICVzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjQ5NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IERpZG4ndCBmaW5kIHJkYiBibG9jaywgc2hvdWxkIG5ldmVyIGhhcHBlbi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo1ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBMb29wIGRldGVjdGVkIGF0IGJsb2NrICVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjYwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IFRoZSAlcyBsaXN0IHNlZW1zIGJhZCBhdCBibG9jayAlcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo2ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gbGlzdCBiYWQgYmxvY2tzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjY5NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBsaXN0IHBhcnRpdGlvbiBibG9ja3MuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6NzA1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGxpc3QgZmlsZSBzeXN0ZW0gYmxvY2tzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjcxMworIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBsaXN0IGJvb3QgYmxvY2tzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjc0MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHdyaXRlIHBhcnRpdGlvbiBibG9jayBhdCAlZC4iCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgZGV0ZXJtaW5hciBzaSBsYSBwYXJ0aWNp8yBlc3TgIG11bnRhZGEuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjEwNjkKKyMsIGZ1enp5Cittc2dpZCAiVW5hYmxlIHRvIGFsbG9jYXRlIGEgcGFydGl0aW9uIG51bWJlci4iCittc2dzdHIgIlMnZXNwZXJhdmEgdW4gbfptZXJvIGRlIHBhcnRpY2nzLiIKKworIzogbGlicGFydGVkL2xhYmVscy9zdW4uYzoxNDUKK21zZ2lkICJDb3JydXB0ZWQgU3VuIGRpc2sgbGFiZWwgZGV0ZWN0ZWQuIgorbXNnc3RyICJTJ2hhIGRldGVjdGF0IHVuYSBldGlxdWV0YSBTdW4gY29ycnVwdGUuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3N1bi5jOjI2NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBkaXNrIENIUyBnZW9tZXRyeSAoJWQsJWQsJWQpIHJlcG9ydGVkIGJ5IHRoZSBvcGVyYXRpbmcgc3lzdGVtIGRvZXMgbm90ICIKKyJtYXRjaCB0aGUgZ2VvbWV0cnkgc3RvcmVkIG9uIHRoZSBkaXNrIGxhYmVsICglZCwlZCwlZCkuIgorbXNnc3RyICIiCisiTGEgZ2VvbWV0cmlhIGRlbCBkaXNjIENIUyAoJWQsJWQsJWQpIG5vIGNvaW5jaWRlaXggYW1iIGxhIGdlb21ldHJpYSAiCisiZW1tYWdhdHplbWFkYSBhIGxhIGV0aXF1ZXRhIGRlbCBkaXNjICglZCwlZCwlZCkuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3N1bi5jOjI4OAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgZGlzayBsYWJlbCBkZXNjcmliZXMgYSBkaXNrIGJpZ2dlciB0aGFuICVzLiIKK21zZ3N0ciAiTGEgZXRpcXVldGEgZGVsIGRpc2MgZGVzY3JpdSB1biBkaXNjIG3pcyBncmFuIGRlICVzLiIKKworIzogbGlicGFydGVkL2xhYmVscy9zdW4uYzo0NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGRpc2sgaGFzICVkIGN5bGluZGVycywgd2hpY2ggaXMgZ3JlYXRlciB0aGFuIHRoZSBtYXhpbXVtIG9mIDY1NTM2LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3N1bi5jOjczNworbXNnaWQgIiIKKyJUaGUgV2hvbGUgRGlzayBwYXJ0aXRpb24gaXMgdGhlIG9ubHkgYXZhaWxhYmxlIG9uZSBsZWZ0LiAgR2VuZXJhbGx5LCBpdCBpcyAiCisibm90IGEgZ29vZCBpZGVhIHRvIG92ZXJ3cml0ZSB0aGlzIHBhcnRpdGlvbiB3aXRoIGEgcmVhbCBvbmUuICBTb2xhcmlzIG1heSAiCisibm90IGJlIGFibGUgdG8gYm9vdCB3aXRob3V0IGl0LCBhbmQgU0lMTyAodGhlIHNwYXJjIGJvb3QgbG9hZGVyKSBhcHByZWNpYXRlcyAiCisiaXQgYXMgd2VsbC4iCittc2dzdHIgIiIKKyJMYSBwYXJ0aWNp8yBzZW5jZXJhIGRlIGRpc2sg6XMgbGEg+m5pY2EgZGlzcG9uaWJsZSBxdWUgcXVlZGEuIEdlbmVyYWxtZW50LCAiCisibm8g6XMgdW5hIGJvbmEgaWRlYSBzb2JyZWVzY3JpdXJlIGFxdWVzdGEgcGFydGljafMgYW1iIHVuYSBkJ2F1dOhudGljYS4gIgorIlNvbGFyaXMgcG90IG5vIHNlciBjYXBh5yBkJ2FycmVuY2FyIHNlbnNlIGVsbGEgaSBTSUxPICggZWwgZ2VzdG9yICIKKyJkJ2FycmVuY2FkYSBkJ3NwYXJjKSB0YW1i6SBsYSB06SBlbiBjb21wdGUuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3N1bi5jOjc1MgorbXNnaWQgIlN1biBkaXNrIGxhYmVsIGlzIGZ1bGwuIgorbXNnc3RyICJMYSBldGlxdWV0YSBkZWwgZGlzYyBkZSBTdW4gZXN04CBwbGVuYS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjE2MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgb3BlbmluZyBkZXZpY2UgJyVzJyBmYWlsZWQuXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzoxNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHNlZWtpbmcgZGV2aWNlICclcycgZmFpbGVkLlxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6MTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyB3cml0aW5nIHRvIGRldmljZSAnJXMnIGZhaWxlZCxcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjE3NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgcmVhZGluZyBmcm9tIGRldmljZSAnJXMnIGZhaWxlZC5cbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjE3OQorIywgYy1mb3JtYXQKK21zZ2lkICJGYXRhbCBlcnJvclxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQxOAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIFZUT0MgbGFiZWxzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0MjQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBWVE9DIEZNVDEgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDMxCittc2dpZCAiQ291bGQgbm90IHJlYWQgVlRPQyBGTVQ0IERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQzOAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIFZUT0MgRk1UNSBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0NDUKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBWVE9DIEZNVDcgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDYyCittc2dpZCAiQ291bGQgbm90IHdyaXRlIFZUT0MgbGFiZWxzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0NjgKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgVlRPQyBGTVQxIERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQ3NQorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBWVE9DIEZNVDQgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDgyCittc2dpZCAiQ291bGQgbm90IHdyaXRlIFZUT0MgRk1UNSBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0ODkKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgVlRPQyBGTVQ3IERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9saWJwYXJ0ZWQuYzoyOTYgbGlicGFydGVkL2xpYnBhcnRlZC5jOjMxNgorbXNnaWQgIk91dCBvZiBtZW1vcnkuIgorbXNnc3RyICJTZW5zZSBtZW3ycmlhLiIKKworIzogbGlicGFydGVkL3VuaXQuYzoxMzkKK21zZ2lkICJDYW5ub3QgZ2V0IHVuaXQgc2l6ZSBmb3Igc3BlY2lhbCB1bml0ICdDT01QQUNUJy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL3VuaXQuYzozODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiXCIlc1wiIGhhcyBpbnZhbGlkIHN5bnRheCBmb3IgbG9jYXRpb25zLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvdW5pdC5jOjM5NAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgbWF4aW11bSBoZWFkIHZhbHVlIGlzICVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvdW5pdC5jOjQwMQorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgbWF4aW11bSBzZWN0b3IgdmFsdWUgaXMgJWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC91bml0LmM6NDEzIGxpYnBhcnRlZC91bml0LmM6NTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBsb2NhdGlvbiAlcyBpcyBvdXRzaWRlIG9mIHRoZSBkZXZpY2UgJXMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC91bml0LmM6NTI3Cittc2dpZCAiSW52YWxpZCBudW1iZXIuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hZmZzLmM6NjMgbGlicGFydGVkL2ZzL2FtaWdhL2FwZnMuYzo1NgorIzogbGlicGFydGVkL2ZzL2FtaWdhL2FzZnMuYzo3MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gYWxsb2NhdGUgcGFydGl0aW9uIGJsb2NrXG4iCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgZGV0ZXJtaW5hciBzaSBsYSBwYXJ0aWNp8yBlc3TgIG11bnRhZGEuIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYWZmcy5jOjc4IGxpYnBhcnRlZC9mcy9hbWlnYS9hcGZzLmM6NzAKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hc2ZzLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gYWxsb2NhdGUgYmxvY2tcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYWZmcy5jOjgzIGxpYnBhcnRlZC9mcy9hbWlnYS9hcGZzLmM6NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBDb3VsZG4ndCByZWFkIGJvb3QgYmxvY2sgJWxsdVxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hZmZzLmM6OTkgbGlicGFydGVkL2ZzL2FtaWdhL2FwZnMuYzo4NgorIzogbGlicGFydGVkL2ZzL2FtaWdhL2FzZnMuYzo5MiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXNmcy5jOjEwNgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IENvdWxkbid0IHJlYWQgcm9vdCBibG9jayAlbGx1XG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gYWxsb2NhdGUgaWQgbGlzdCBlbGVtZW50XG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogQ291bGRuJ3QgcmVhZCBibG9jayAlbGx1XG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6MjAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogQmFkIGNoZWNrc3VtIG9uIGJsb2NrICVsbHUgb2YgdHlwZSAlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jOjIxMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBDb3VsZG4ndCB3cml0ZSBibG9jayAlZFxuIgorbXNnc3RyICIlcyBtZW50cmUgcydlc3RhdmEgZXNjcml2aW50IGEgJXMiCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jOjI3OAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBhbGxvY2F0ZSBkaXNrX3NwZWNpZmljIHJkYiBibG9ja1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jOjI4OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IERpZG4ndCBmaW5kIHJkYiBibG9jaywgc2hvdWxkIG5ldmVyIGhhcHBlblxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jOjMxOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gcmVhZCBwYXJ0aXRpb24gYmxvY2sgJWxsdVxuIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGRldGVybWluYXIgc2kgbGEgcGFydGljafMgZXN04CBtdW50YWRhLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjg3IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzoxMTIKK21zZ2lkICJJbmNvbnNpc3RlbnQgZ3JvdXAgZGVzY3JpcHRvcnMhIgorbXNnc3RyICJHcnVwIGRlIGRlc2NyaXB0b3JzIGluY29uc2lzdGVudCEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo5MSBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6MTE2CisjLCBmdXp6eQorbXNnaWQgIkZpbGUgc3lzdGVtIGZ1bGwhIgorbXNnc3RyICJTaXN0ZW1hIGRlIGZpdHhlcnMgcGxlISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjY4NgorIywgZnV6enkKK21zZ2lkICJJbnZhbGlkIHN1cGVyYmxvY2suICBBcmUgeW91IHN1cmUgdGhpcyBpcyBhbiBleHQyIGZpbGUgc3lzdGVtPyIKK21zZ3N0ciAiU3VwZXJibG9jayBpbnbgbGlkLiBTZWd1ciBxdWUg6XMgdW4gc2lzdGVtYSBkZSBmaXR4ZXJzIGV4dDI/IgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6NzAwIGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NjU4CisjLCBmdXp6eQorbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyBlcnJvcnMhICBZb3Ugc2hvdWxkIHJ1biBlMmZzY2suIgorbXNnc3RyICJFbCBzaXN0ZW1hIGRlIGZpdHhlcnMgdOkgZXJyb3JzISBIYXMgZCdleGVjdXRhciBlMmZzY2suIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6NzExCisjLCBmdXp6eQorbXNnaWQgIiIKKyJGaWxlIHN5c3RlbSB3YXMgbm90IGNsZWFubHkgdW5tb3VudGVkISAgWW91IHNob3VsZCBydW4gZTJmc2NrLiAgTW9kaWZ5aW5nIGFuICIKKyJ1bmNsZWFuIGZpbGUgc3lzdGVtIGNvdWxkIGNhdXNlIHNldmVyZSBjb3JydXB0aW9uLiIKK21zZ3N0ciAiIgorIkVsIHNpc3RlbWEgZGUgZml0eGVycyBubyBoYSBlc3RhdCBkZXNtdW50YXQgY29ycmVjdGFtZW50ISBTJ2hhIGQnZXhlY3V0YXIgIgorImUyZnNjay4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo3MzEKKyMsIGZ1enp5Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGluY29tcGF0aWJsZSBmZWF0dXJlIGVuYWJsZWQuIgorbXNnc3RyICJFbCBzaXN0ZW1hIGRlIGZpdHhlcnMgdOkgdW5hIGNhcmFjdGVy7XN0aWNhIGluY29tcGF0aWJsZSBhY3RpdmFkYSIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjc0MgorbXNnaWQgIkVycm9yIGFsbG9jYXRpbmcgYnVmZmVyIGNhY2hlLiIKK21zZ3N0ciAiRXJyb3IgZW4gbGEgcmVzZXJ2YSBkZSBsYSBtZW3ycmlhIGNhdSBkZSBsYSBtZW3ycmlhIGludGVybehkaWEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfaW5vZGVfcmVsb2NhdG9yLmM6MTE0CisjLCBmdXp6eQorbXNnaWQgIiIKKyJGb3VuZCBhbiBpbm9kZSB3aXRoIGEgaW5jb3JyZWN0IGxpbmsgY291bnQuICBCZXR0ZXIgZ28gcnVuIGUyZnNjayBmaXJzdCEiCittc2dzdHIgIiIKKyJTJ2hhIHRyb2JhdCB1biBpbm9kZSBhbWIgdW4gbvptZXJvIGQnZW5sbGHnb3MgaW5jb3JyZWN0ZS4gTWlsbG9yIHF1ZSBwcmltZXIgIgorInMnZXhlY3V0aSBlMmZzY2suIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2lub2RlX3JlbG9jYXRvci5jOjQ4NworbXNnaWQgIk5vdCBlbm91Z2ggZnJlZSBpbm9kZXMhIgorbXNnc3RyICJObyBoaSBoYSBzdWZpY2llbnRzIGlub2RlcyBsbGl1cmVzISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzoyMjMKKyMsIGZ1enp5Cittc2dpZCAiRmlsZSBzeXN0ZW0gaXMgdG9vIGZ1bGwgdG8gcmVtb3ZlIGEgZ3JvdXAhIgorbXNnc3RyICJFbCBzaXN0ZW1hIGRlIGZpdHhlcnMgZXN04CBtYXNzYSBvY3VwYXQgYSBzdXByaW1pciB1biBncnVwISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzoyMzIKKyMsIGZ1enp5Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIHRvbyBtYW55IGFsbG9jYXRlZCBpbm9kZXMgdG8gcmVtb3ZlIGEgZ3JvdXAhIgorbXNnc3RyICJFbCBzaXN0ZW1hIGRlIGZpdHhlcnMgdOkgbWFzc2EgaW5vZGVzIHJlc2VydmF0cyBwZXIgc3VwcmltaXIgdW4gZ3J1cCEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NDkxCittc2dpZCAiYWRkaW5nIGdyb3VwcyIKK21zZ3N0ciAiYWZlZ2ludCBncnVwcyIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo1MjgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIllvdXIgZmlsZSBzeXN0ZW0gaXMgdG9vIGZ1bGwgdG8gcmVzaXplIGl0IHRvICVpIGJsb2Nrcy4gIFNvcnJ5LiIKK21zZ3N0ciAiIgorIkVsIHNpc3RlbWEgZGUgZml0eGVycyBlc3TgIG1hc3NhIG9jdXBhdCBlbiByZWRpbWVuc2lvbmFyLXNlIGEgJWkgYmxvY3MuSG8gIgorInNlbnRvLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo1MzgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGZpbGUgc3lzdGVtIGhhcyB0b28gbWFueSBvY2N1cGllZCBpbm9kZXMgdG8gcmVzaXplIGl0IHRvICVpIGJsb2Nrcy4gICIKKyJTb3JyeS4iCittc2dzdHIgIiIKKyJFbCBzaXN0ZW1hIGRlIGZpdHhlcnMgdOkgbWFzc2EgaW5vZGVzIG9jdXBhdHMgcGVyIHJlZGltZW5zaW9uYXItc2UgYSAlaSAiCisiYmxvY3MuSG8gc2VudG8uIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjY2NgorIywgZnV6enkKK21zZ2lkICJGaWxlIHN5c3RlbSB3YXMgbm90IGNsZWFubHkgdW5tb3VudGVkISAgWW91IHNob3VsZCBydW4gZTJmc2NrLiIKK21zZ3N0ciAiIgorIkVsIHNpc3RlbWEgZGUgZml0eGVycyBubyBoYSBlc3RhdCBkZXNtdW50YXQgY29ycmVjdGFtZW50ISBTJ2hhIGQnZXhlY3V0YXIgIgorImUyZnNjay4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6Njc1Cittc2dpZCAiIgorIlRoZSBmaWxlIHN5c3RlbSBoYXMgdGhlICdkaXJfaW5kZXgnIGZlYXR1cmUgZW5hYmxlZC4gIFBhcnRlZCBjYW4gb25seSByZXNpemUgIgorInRoZSBmaWxlIHN5c3RlbSBpZiBpdCBkaXNhYmxlcyB0aGlzIGZlYXR1cmUuICBZb3UgY2FuIGVuYWJsZSBpdCBsYXRlciBieSAiCisicnVubmluZyAndHVuZTJmcyAtTyBkaXJfaW5kZXggREVWSUNFJyBhbmQgdGhlbiAnZTJmc2NrIC1mRCBERVZJQ0UnLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjY5MQorbXNnaWQgIiIKKyJBIHJlc2l6ZSBvcGVyYXRpb24gb24gdGhpcyBmaWxlIHN5c3RlbSB3aWxsIHVzZSBFWFBFUklNRU5UQUwgY29kZVxuIgorInRoYXQgTUFZIENPUlJVUFQgaXQgKGFsdGhvdWdoIG5vIG9uZSBoYXMgcmVwb3J0ZWQgYW55IHN1Y2ggZGFtYWdlIHlldCkuXG4iCisiWW91IHNob3VsZCBhdCBsZWFzdCBiYWNrdXAgeW91ciBkYXRhIGZpcnN0LCBhbmQgcnVuICdlMmZzY2sgLWYnIGFmdGVyd2FyZHMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfYmxvY2tfcmVsb2NhdG9yLmM6MTk4CisjLCBmdXp6eQorbXNnaWQgIkNyb3NzLWxpbmtlZCBibG9ja3MgZm91bmQhICBCZXR0ZXIgZ28gcnVuIGUyZnNjayBmaXJzdCEiCittc2dzdHIgIiIKKyJTJ2hhIHRyb2JhdCBibG9jcyBhbWIgZW5sbGHnb3MgY3JldWF0cyEgTWlsbG9yIHF1ZSBwcmltZXIgcydleGVjdXRpIGUyZnNjayEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfYmxvY2tfcmVsb2NhdG9yLmM6NTM3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJCbG9jayAlaSBoYXMgbm8gcmVmZXJlbmNlPyAgV2VpcmQuIgorbXNnc3RyICJFbCBibG9jICVpIG5vIHTpIHJlZmVy6G5jaWE/IEV4dHJhbnkiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfYmxvY2tfcmVsb2NhdG9yLmM6NzM3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJCbG9jayAlaSBzaG91bGRuJ3QgaGF2ZSBiZWVuIG1hcmtlZCAoJWQsICVkKSEiCittc2dzdHIgIkVsIGJsb2MgJWkgbm8gaGF1cmlhIGQnZXN0YXIgbWFyY2F0ISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvaW50ZXJmYWNlLmM6MTg2CisjLCBmdXp6eQorbXNnaWQgIiIKKyJUaGUgZXh0MiBmaWxlIHN5c3RlbSBwYXNzZWQgYSBiYXNpYyBjaGVjay4gIEZvciBhIG1vcmUgY29tcHJlaGVuc2l2ZSBjaGVjaywgIgorInVzZSB0aGUgZTJmc2NrIHByb2dyYW0uIgorbXNnc3RyICIiCisiRWwgc2lzdGVtYSBkZSBmaXR4ZXJzIGV4dDIgaGEgcGFzc2F0IHVuYSBjb21wcm92YWNp8yBi4HNpY2EuIFBlciB1bmEgIgorImNvbXByb3ZhY2nzIG3pcyBjb21wbGV0YSB1dGlsaXR6YXIgZWwgcHJvZ3JhbWEgZTJmc2NrLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvaW50ZXJmYWNlLmM6MjAzCittc2dpZCAiU29ycnksIGNhbid0IG1vdmUgdGhlIHN0YXJ0IG9mIGV4dDIgcGFydGl0aW9ucyB5ZXQhIgorbXNnc3RyICJIbyBzZW50bywgbm8gZXMgcG90IG1vdXJlIGVuY2FyYSBlbCBjb21lbudhbWVudCBkZSBsZXMgcGFydGljaW9ucyBleHQyIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2J1ZmZlci5jOjgyCittc2dpZCAiQ291bGRuJ3QgZmx1c2ggYnVmZmVyIGNhY2hlISIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBidWlkYXIgbGEgbWVt8nJpYSBjYXUgZGUgbGEgbWVt8nJpYSBpbnRlcm3oZGlhISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9ta2ZzLmM6MTYyCittc2dpZCAid3JpdGluZyBwZXItZ3JvdXAgbWV0YWRhdGEiCittc2dzdHIgImVzY3JpYmludCBtZXRhZGF0YSBwZXItZ3J1cCIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9ta2ZzLmM6NTY0Cittc2dpZCAiRmlsZSBzeXN0ZW0gdG9vIHNtYWxsIGZvciBleHQyLiIKK21zZ3N0ciAiU2lzdGVtYSBkZSBmaXR4ZXJzIG1hc3NhIHBldGl0IHBlciBleHQyLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jYWxjLmM6MTM1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IG5lZWQgJXMgb2YgZnJlZSBkaXNrIHNwYWNlIHRvIHNocmluayB0aGlzIHBhcnRpdGlvbiB0byB0aGlzIHNpemUuICAiCisiQ3VycmVudGx5LCBvbmx5ICVzIGlzIGZyZWUuIgorbXNnc3RyICIiCisiRXMgbmVjZXNzaXRlbiAlZE0gZCdlc3BhaSBsbGl1cmUgcGVyIGNvbnRyYXVyZSBhcXVlc3RhIHBhcnRpY2nzIGEgYXF1ZXN0YSAiCisibWlkYSAoYWN0dWFsbWVudCBub23pcyBoaSBoYSAlZE0gbGxpdXJlcykiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY29udGV4dC5jOjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDbHVzdGVyIHN0YXJ0IGRlbHRhID0gJWQsIHdoaWNoIGlzIG5vdCBhIG11bHRpcGxlIG9mIHRoZSBjbHVzdGVyIHNpemUgJWQuIgorbXNnc3RyICIiCisiRWwgY29tZW7nYW1lbnQgZGVsdGEgZGUgY2x1c3RlciA9ICVkLCBxdWUgbm8g6XMgbXVsdGlwbGUgZGUgbGEgbWlkYSBkZSAiCisiY2x1c3RlciAlZC4gIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jOjMwOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiUGFydGl0aW9uIHRvbyBiaWcvc21hbGwgZm9yIGEgJXMgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICJQYXJ0aWNp8yBtYXNzYSBncmFuL3BldGl0YSBwZXIgdW4gc2lzdGVtYSBkZSBmaXR4ZXJzICVzIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jOjQ3NAorbXNnaWQgIiIKKyJUaGUgRkFUcyBkb24ndCBtYXRjaC4gIElmIHlvdSBkb24ndCBrbm93IHdoYXQgdGhpcyBtZWFucywgdGhlbiBzZWxlY3QgIgorImNhbmNlbCwgcnVuIHNjYW5kaXNrIG9uIHRoZSBmaWxlIHN5c3RlbSwgYW5kIHRoZW4gY29tZSBiYWNrLiIKK21zZ3N0ciAiIgorIkxlcyBGQVRzIG5vIGNvaW5jaWRlaXhlbi4gU2kgbm8gc2FwcyBxdeggdm9scyBkaXIgYWl48ywgbGxhdm9ycyBzZWxlY2Npb25hICIKKyJjYW5jZWxhciwgZXhlY3V0YSBzY2FuZGlzayBhbCBzaXN0ZW1hIGRlIGZpdHhlcnMsIGkgZGVzcHLpcyB0b3JuYS4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvZmF0LmM6NTE0Cittc2dpZCAiVGhlcmUgYXJlIG5vIHBvc3NpYmxlIGNvbmZpZ3VyYXRpb25zIGZvciB0aGlzIEZBVCB0eXBlLiIKK21zZ3N0ciAiTm8gaGkgaGEgY29uZmlndXJhY2lvbnMgcG9zc2libGVzIHBlciBhcXVlc3QgdGlwdXMgZGUgRkFULiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9mYXQuYzo1MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZpbGUgc3lzdGVtIGRvZXNuJ3QgaGF2ZSBleHBlY3RlZCBzaXplcyBmb3IgV2luZG93cyB0byBsaWtlIGl0LiAgQ2x1c3RlciAiCisic2l6ZSBpcyAlZGsgKCVkayBleHBlY3RlZCk7IG51bWJlciBvZiBjbHVzdGVycyBpcyAlZCAoJWQgZXhwZWN0ZWQpOyBzaXplIG9mICIKKyJGQVRzIGlzICVkIHNlY3RvcnMgKCVkIGV4cGVjdGVkKS4iCittc2dzdHIgIiIKKyJFbCBzaXN0ZW1hIGRlIGZpdHhlcnMgbm8gdOkgdW5lcyBtaWRlcyBxdWUgYWdyYWRpbiBhIFdpbmRvd3MuIExhIG1pZGEgZGUgIgorImNs+nN0ZXIgZXMgJWRrIChoYXVyaWEgZGUgc2VyIGRlICVkayk7IGVsIG76bWVybyBkZSBjbPpzdGVycyDpcyBkZSAlZCAiCisiKGhhdXJpYSBkZSBzZXIgZGUgJWQpOyBsYSBtaWRhIGRlIEZBVCDpcyBkZSAlZCBzZWN0b3JzICggaGF1cmlhIGRlIHNlciBkZSAlZCAiCisic2VjdG9ycykuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jOjU0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRmlsZSBzeXN0ZW0gaXMgcmVwb3J0aW5nIHRoZSBmcmVlIHNwYWNlIGFzICVkIGNsdXN0ZXJzLCBub3QgJWQgY2x1c3RlcnMuIgorbXNnc3RyICIiCisiRWwgc2lzdGVtYSBkZSBmaXR4ZXJzIGRpdSBxdWUgbGEgbWlkYSBkZSBsJ2VzcGFpIGxsaXVyZSBlbiBjbPpzdGVycyDpcyBkZSAlIgorImQsIG5vIGRlICVkIGNs+nN0ZXJzLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9mYXQuYzo4NzQKKyMsIGZ1enp5Cittc2dpZCAiIgorIkdOVSBQYXJ0ZWQgd2FzIG1pc2NvbXBpbGVkOiB0aGUgRkFUIGJvb3Qgc2VjdG9yIHNob3VsZCBiZSA1MTIgYnl0ZXMuICBGQVQgIgorInN1cHBvcnQgd2lsbCBiZSBkaXNhYmxlZC4iCittc2dzdHIgIiIKKyJHTlUgUGFydGVkIHZhIHNlciBtYWwgY29tcGlsYXQ6IGVsIHNlY3RvciBib290IGRlIEZBVCBoYSBkZSBzZXIgZGUgNTEyICIKKyJieXRlcy4gRWwgc3Vwb3J0IHBlciBGQVQgc2Vy4CBkZXNhY3RpdmF0LiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzoxNTkKKyMsIGZ1enp5Cittc2dpZCAiIgorIlRoZXJlJ3Mgbm90IGVub3VnaCByb29tIGluIHRoZSByb290IGRpcmVjdG9yeSBmb3IgYWxsIG9mIHRoZSBmaWxlcy4gIEVpdGhlciAiCisiY2FuY2VsLCBvciBpZ25vcmUgdG8gbG9zZSB0aGUgZmlsZXMuIgorbXNnc3RyICIiCisiTm8gaGkgaGEgZXNwYWkgc3VmaWNpZW50IGFsIGRpcmVjdG9yaSByb290LCBwZXIgYSB0b3RzIGVscyBmaXR4ZXJzLiBPIGLpLCAiCisiY2FuY2Vst2xhciwgbyBi6SwgSWdub3JhciBwZXJkZW50IGVscyBmaXR4ZXJzLiAiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6MzAwCittc2dpZCAiRXJyb3Igd3JpdGluZyB0byB0aGUgcm9vdCBkaXJlY3RvcnkuIgorbXNnc3RyICJFcnJvciBlc2NyaWJpbnQgYWwgZGlyZWN0b3JpIHJvb3QuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjQ4OQorIywgZnV6enkKK21zZ2lkICJJZiB5b3UgbGVhdmUgeW91ciBmaWxlIHN5c3RlbSBhcyBGQVQxNiwgdGhlbiB5b3Ugd2lsbCBoYXZlIG5vIHByb2JsZW1zLiIKK21zZ3N0ciAiIgorIlNpIGRlaXhlcyBlbCBzaXN0ZW1hIGRlIGZpdHhlcnMgY29tIEZBVDE2LCBsbGF2b3JzIG5vIHRpbmRy4HMgcHJvYmxlbWVzIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjQ5MgorbXNnaWQgIiIKKyJJZiB5b3UgY29udmVydCB0byBGQVQxNiwgYW5kIE1TIFdpbmRvd3MgaXMgaW5zdGFsbGVkIG9uIHRoaXMgcGFydGl0aW9uLCB0aGVuICIKKyJ5b3UgbXVzdCByZS1pbnN0YWxsIHRoZSBNUyBXaW5kb3dzIGJvb3QgbG9hZGVyLiAgSWYgeW91IHdhbnQgdG8gZG8gdGhpcywgeW91ICIKKyJzaG91bGQgY29uc3VsdCB0aGUgUGFydGVkIG1hbnVhbCAob3IgeW91ciBkaXN0cmlidXRpb24ncyBtYW51YWwpLiIKK21zZ3N0ciAiIgorIlNpIGNvbnZlcnRlaXhlcyBhIEZBVDE2LCBpIE1TIFdpbmRvd3MgZXN04CBpbnN0YWy3bGF0IGEgYXF1ZXN0YSBwYXJ0aWNp8ywgIgorImxsYXZvcnMgaGF1cuBzIGRlIHJlaW5zdGFst2xhciBlbCBjYXJyZWdhZG9yIGQnYXJyZW5jYWRhIGRlIE1TIFdpbmRvd3MuIFNpICIKKyJ2b2xzIGZlciBhaXjzLCBoYXVyaWVzIGRlIGNvbnN1bHRhciBlbCBtYW51YWwgZGUgUGFydGVkICggbyBlbCBtYW51YWwgZGUgbGEgIgorInRldmEgZGlzdHJpYnVjafMpLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1MDAKK21zZ2lkICIiCisiSWYgeW91IGxlYXZlIHlvdXIgZmlsZSBzeXN0ZW0gYXMgRkFUMzIsIHRoZW4geW91IHdpbGwgbm90IGludHJvZHVjZSBhbnkgbmV3ICIKKyJwcm9ibGVtcy4iCittc2dzdHIgIiIKKyJTaSBkZWl4ZXMgZWwgdGV1IHNpc3RlbWEgZGUgZml0eGVycyBjb20gYSBGQVQzMiwgbGxhdm9ycyBubyB0aW5kcuBzIG3pcyAiCisicHJvYmxlbWVzLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1MDQKK21zZ2lkICIiCisiSWYgeW91IGNvbnZlcnQgdG8gRkFUMzIsIGFuZCBNUyBXaW5kb3dzIGlzIGluc3RhbGxlZCBvbiB0aGlzIHBhcnRpdGlvbiwgdGhlbiAiCisieW91IG11c3QgcmUtaW5zdGFsbCB0aGUgTVMgV2luZG93cyBib290IGxvYWRlci4gIElmIHlvdSB3YW50IHRvIGRvIHRoaXMsIHlvdSAiCisic2hvdWxkIGNvbnN1bHQgdGhlIFBhcnRlZCBtYW51YWwgKG9yIHlvdXIgZGlzdHJpYnV0aW9uJ3MgbWFudWFsKS4gIEFsc28sICIKKyJjb252ZXJ0aW5nIHRvIEZBVDMyIHdpbGwgbWFrZSB0aGUgZmlsZSBzeXN0ZW0gdW5yZWFkYWJsZSBieSBNUyBET1MsIE1TICIKKyJXaW5kb3dzIDk1YSwgYW5kIE1TIFdpbmRvd3MgTlQuIgorbXNnc3RyICIiCisiU2kgY29udmVydGVpeGVzIGEgRkFUMzIsIGkgTVMgV2luZG93cyBlc3TgIGluc3RhbLdsYXQgYSBhcXVlc3RhIHBhcnRpY2nzLCAiCisibGxhdm9ycyBoYXVy4HMgZGUgcmVpbnN0YWy3bGFyIGVsIGNhcnJlZ2Fkb3IgZCdhcnJlbmNhZGEgZGUgTVMgV2luZG93cy4gU2kgIgorInZvbHMgZmVyIGFpePMsIGhhdXJpZXMgZGUgY29uc3VsdGFyIGVsIG1hbnVhbCBkZSBQYXJ0ZWQgKCBvIGVsIG1hbnVhbCBkZSBsYSAiCisidGV2YSBkaXN0cmlidWNp8ykuIFRhbWLpLCBjb252ZXJ0aW50IGEgRkFUMzIgZmFy4HMgcXVlIE1TIERPUywgTVMgV2luZG93cyAiCisiOTVhIGkgV2luZG93cyBOVCBubyBwdWd1aW4gbGxlZ2lyIGVsIHNpc3RlbWEgZGUgZml0eGVycyAiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzICAlcyAgJXMiCittc2dzdHIgIiVzICAlcyAgJXMiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTE5Cittc2dpZCAiV291bGQgeW91IGxpa2UgdG8gdXNlIEZBVDMyPyIKK21zZ3N0ciAiVm9sIGZlciBzZXJ2aXIgRkFUMzI/IgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjU1MCBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjU2NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyAgJXMiCittc2dzdHIgIiVzICAlcyIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1NTEKK21zZ2lkICIiCisiVGhlIGZpbGUgc3lzdGVtIGNhbiBvbmx5IGJlIHJlc2l6ZWQgdG8gdGhpcyBzaXplIGJ5IGNvbnZlcnRpbmcgdG8gRkFUMTYuIgorbXNnc3RyICIiCisiRWwgc2lzdGVtYSBkZSBmaXR4ZXJzIG5vbelzIHBvdCBzZXIgcmVkaW1lbnNpb25hZGEgYSBhcXVlc3RhIG1pZGEgY292ZXJ0aW50LSIKKyJsYSBhIEZBVDE2LiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1NjcKK21zZ2lkICIiCisiVGhlIGZpbGUgc3lzdGVtIGNhbiBvbmx5IGJlIHJlc2l6ZWQgdG8gdGhpcyBzaXplIGJ5IGNvbnZlcnRpbmcgdG8gRkFUMzIuIgorbXNnc3RyICIiCisiRWwgc2lzdGVtYSBkZSBmaXR4ZXJzIG5vbelzIHBvdCBzZXIgcmVkaW1lbnNpb25hZGEgYSBhcXVlc3RhIG1pZGEgY292ZXJ0aW50LSIKKyJsYSBhIEZBVDMyLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1ODAKKyMsIGZ1enp5Cittc2dpZCAiIgorIkdOVSBQYXJ0ZWQgY2Fubm90IHJlc2l6ZSB0aGlzIHBhcnRpdGlvbiB0byB0aGlzIHNpemUuICBXZSdyZSB3b3JraW5nIG9uIGl0ISIKK21zZ3N0ciAiIgorIkdOVSBQYXJ0ZWQgbm8gcG9yIHJlZGltZW5zaW9uYXIgYXF1ZXN0YSBwYXJ0aWNp8yBhIGFxdWVzdGEgbWlkYS4gRXN0ZW0gIgorInRyZWJhbGxhbnQgZW4gYWl48yEiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjQ5IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjU2Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGludmFsaWQgc2lnbmF0dXJlIGZvciBhIEZBVCBmaWxlIHN5c3RlbS4iCittc2dzdHIgIiIKKyJFbCBzaXN0ZW1hIGRlIGZpdHhlcnMgdOkgdW5hIHNpZ25hdHVyYSBpbnbgbGlkYSBwZXIgYSB1biBzaXN0ZW1hIGRlIGZpdHhlcnMgIgorIkZBVC4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjY0Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGludmFsaWQgc2VjdG9yIHNpemUgZm9yIGEgRkFUIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiIgorIkVsIHNpc3RlbWEgZGUgZml0eGVycyB06SB1bmEgbWlkYSBkZSBzZWN0b3IgaW524GxpZGEgcGVyIGEgdW4gc2lzdGVtYSBkZSAiCisiZml0eGVycyBGQVQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo3MQorIywgZnV6enkKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgYW4gaW52YWxpZCBjbHVzdGVyIHNpemUgZm9yIGEgRkFUIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiIgorIkVsIHNpc3RlbWEgZGUgZml0eGVycyB06SB1bmEgbWlkYSBkZSBzZWN0b3IgaW524GxpZGEgcGVyIGEgdW4gc2lzdGVtYSBkZSAiCisiZml0eGVycyBGQVQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo3OAorIywgZnV6enkKK21zZ2lkICIiCisiRmlsZSBzeXN0ZW0gaGFzIGFuIGludmFsaWQgbnVtYmVyIG9mIHJlc2VydmVkIHNlY3RvcnMgZm9yIGEgRkFUIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiIgorIkVsIHNpc3RlbWEgZGUgZml0eGVycyB06SB1biBu+m1lcm8gZGUgc2VjdG9ycyByZXNlcnZhdHMgcGVyIGEgdW4gc2lzdGVtYSBkZSAiCisiZml0eGVycyBGQVQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo4NQorIywgZnV6enkKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgYW4gaW52YWxpZCBudW1iZXIgb2YgRkFUcy4iCittc2dzdHIgIkVsIHNpc3RlbWEgZGUgZml0eGVycyB06SB1biBu+m1lcm8gZGUgRkFUUyBpbnbgbGlkLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6MTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGlzIGZpbGUgc3lzdGVtIGhhcyBhIGxvZ2ljYWwgc2VjdG9yIHNpemUgb2YgJWQuICBHTlUgUGFydGVkIGlzIGtub3duIG5vdCAiCisidG8gd29yayBwcm9wZXJseSB3aXRoIHNlY3RvciBzaXplcyBvdGhlciB0aGFuIDUxMiBieXRlcy4iCittc2dzdHIgIiIKKyJBcXVlc3Qgc2lzdGVtYSBkZSBmaXR4ZXJzIHTpIHVuYSBtaWRhIGRlIHNlY3RvciBs8mdpYyBkZSAlZC4gR05VIFBhcnRlZCBubyAiCisidHJlYmFsbGFy4CBjb3JyZWN0YW1lbnQgYW1iIG1pZGVzIGRlIHNlY3RvcnMgZGlmZXJlbnRzIGRlIDUxMiBieXRlcy4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjE2NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGUgc3lzdGVtJ3MgQ0hTIGdlb21ldHJ5IGlzICglZCwgJWQsICVkKSwgd2hpY2ggaXMgaW52YWxpZC4gIFRoZSAiCisicGFydGl0aW9uIHRhYmxlJ3MgQ0hTIGdlb21ldHJ5IGlzICglZCwgJWQsICVkKS4gIElmIHlvdSBzZWxlY3QgSWdub3JlLCB0aGUgIgorImZpbGUgc3lzdGVtJ3MgQ0hTIGdlb21ldHJ5IHdpbGwgYmUgbGVmdCB1bmNoYW5nZWQuICBJZiB5b3Ugc2VsZWN0IEZpeCwgdGhlICIKKyJmaWxlIHN5c3RlbSdzIENIUyBnZW9tZXRyeSB3aWxsIGJlIHNldCB0byBtYXRjaCB0aGUgcGFydGl0aW9uIHRhYmxlJ3MgQ0hTICIKKyJnZW9tZXRyeS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6MjEzCittc2dpZCAiRkFUIGJvb3Qgc2VjdG9yIHNheXMgbG9naWNhbCBzZWN0b3Igc2l6ZSBpcyAwLiAgVGhpcyBpcyB3ZWlyZC4gIgorbXNnc3RyICIiCisiRWwgc2VjdG9yIGJvb3QgZGUgbGEgRkFUIGRpdSBxdWUgbGEgbWlkYSBkZWwgc2VjdG9yIGzyZ2ljIOlzIDAuIEFpePIg6XMgIgorImV4dHJhbnkuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzoyMTkKK21zZ2lkICJGQVQgYm9vdCBzZWN0b3Igc2F5cyB0aGVyZSBhcmUgbm8gRkFUIHRhYmxlcy4gIFRoaXMgaXMgd2VpcmQuICIKK21zZ3N0ciAiIgorIkVsIHNlY3RvciBib290IGRlIGxhIEZBVCBkaXUgcXVlIG5vIGhpIGhhIHRhdWxlcyBGQVQuICBBaXjyIOlzIGV4dHJhbnkuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzoyMjUKK21zZ2lkICJGQVQgYm9vdCBzZWN0b3Igc2F5cyBjbHVzdGVycyBhcmUgMCBzZWN0b3JzLiAgVGhpcyBpcyB3ZWlyZC4gIgorbXNnc3RyICIiCisiRWwgc2VjdG9yIGJvb3QgZGUgbGEgRkFUIGRpdSBxdWUgZWxzIGNs+nN0ZXJzIHRlbmVuIDAgc2VjdG9ycy4gQWl48iDpcyAiCisiZXh0cmFueS4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjIzNQorIywgZnV6enkKK21zZ2lkICJGaWxlIHN5c3RlbSBpcyBGQVQxMiwgd2hpY2ggaXMgdW5zdXBwb3J0ZWQuIgorbXNnc3RyICJFbCBzaXN0ZW1hIGRlIGZpdHhlcnMg6XMgRkFUMTIsIHF1ZSBubyBlc3TgIHN1cG9ydGF0LiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6NDExCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgaW5mb3JtYXRpb24gc2VjdG9yIGhhcyB0aGUgd3Jvbmcgc2lnbmF0dXJlICgleCkuICBTZWxlY3QgY2FuY2VsIGZvciBub3csICIKKyJhbmQgc2VuZCBpbiBhIGJ1ZyByZXBvcnQuICBJZiB5b3UncmUgZGVzcGVyYXRlLCBpdCdzIHByb2JhYmx5IHNhZmUgdG8gaWdub3JlLiIKK21zZ3N0ciAiIgorIkVsIHNlY3RvciBkJ2luZm9ybWFjafMgdOkgdW5hIHNpZ25hdHVyYSBpbmNvcnJlY3RhICgleCkuICBTZWxlY2Npb25hICIKKyJjYW5jZWy3bGEgYXJhIG1hdGVpeCwgaSBlbnZpYS1ucyB1biBpbmZvcm1lLiAgU2kgZXN0YXMgZGVzZXNwZXJhdCwgZWwgbelzICIKKyJzZWd1ciDpcyBJZ25vcmFyLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb3VudC5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgZGlyZWN0b3J5IGVudHJ5IGZvciAlczogZmlyc3QgY2x1c3RlciBpcyB0aGUgZW5kIG9mIGZpbGUgbWFya2VyLiIKK21zZ3N0ciAiIgorIkVudHJhZGEgZGUgZGlyZWN0b3JpIGluY29ycmVjdGEgcGVyICVzOiBlbCBwcmltZXIgY2z6c3RlciDpcyBlbCBmaW5hbCBkZSBsYSAiCisibWFyY2EgZGUgZml0eGVyLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb3VudC5jOjE2NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQmFkIEZBVDogdW50ZXJtaW5hdGVkIGNoYWluIGZvciAlcy4gIFlvdSBzaG91bGQgcnVuIGRvc2ZzY2sgb3Igc2NhbmRpc2suIgorbXNnc3RyICIiCisiRkFUIGluY29ycmVjdGE6IGNhZGVuYSBzZW5zZSBhY2FiYXIgcGVyICVzLiBIYXMgZGUgZXhlY3V0YXIgZG9zZnNjayBvICIKKyJzY2FuZGlzay4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY291bnQuYzoxNzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJCYWQgRkFUOiBjbHVzdGVyICVkIG91dHNpZGUgZmlsZSBzeXN0ZW0gaW4gY2hhaW4gZm9yICVzLiAgWW91IHNob3VsZCBydW4gIgorImRvc2ZzY2sgb3Igc2NhbmRpc2suIgorbXNnc3RyICIiCisiRkFUIGluY29ycmVjdGE6IGNs+nN0ZXIgJWQgZm9yYSBkZWwgc2lzdGVtYSBkZSBmaXR4ZXJzIGEgbGEgY2FkZW5hIHBlciAlcy4gIgorIkhhcyBkZSBleGVjdXRhciBkb3Nmc2NrIG8gc2NhbmRpc2suIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvdW50LmM6MTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJCYWQgRkFUOiBjbHVzdGVyICVkIGlzIGNyb3NzLWxpbmtlZCBmb3IgJXMuICBZb3Ugc2hvdWxkIHJ1biBkb3Nmc2NrIG9yICIKKyJzY2FuZGlzay4iCittc2dzdHIgIiIKKyJGQVQgaW5jb3JyZWN0YTogY2z6c3RlciAlZCB06SB1biBlbmxsYecgY3JldWF0IHBlciAlcy4gSGFzIGQnZXhlY3V0YXIgIgorImRvc2ZzY2sgbyBzY2FuZGlzay4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY291bnQuYzoyMDMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzICVkaywgYnV0IGl0IGhhcyAlZCBjbHVzdGVycyAoJWRrKS4iCittc2dzdHIgIiVzIOlzICVkaywgcGVy8iB06SAlZCBjbPpzdGVycyAoJWRrKS4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY291bnQuYzoyNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmaWxlICVzIGlzIG1hcmtlZCBhcyBhIHN5c3RlbSBmaWxlLiAgVGhpcyBtZWFucyBtb3ZpbmcgaXQgY291bGQgY2F1c2UgIgorInNvbWUgcHJvZ3JhbXMgdG8gc3RvcCB3b3JraW5nLiIKK21zZ3N0ciAiIgorIkVsIGZpdHhlciAlcyBlc3TgIG1hcmNhdCBjb20gdW4gc2lzdGVtYSBkZSBmaXR4ZXJzLiAgQWl48iB2b2wgZGlyIHF1ZSBzaSBlbCAiCisibW92ZXUgcG9yIG9jYXNpb25hciBxdWUgYWxndW5zIHByb2dyYW1lcyBubyBmdW5jaW9uaW4uIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3RhYmxlLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGQVQgJWQgbWVkaWEgJXggZG9lc24ndCBtYXRjaCB0aGUgYm9vdCBzZWN0b3IncyBtZWRpYSAleC4gIFlvdSBzaG91bGQgIgorInByb2JhYmx5IHJ1biBzY2FuZGlzay4iCittc2dzdHIgIiIKKyJMYSBGQVQgJWQgZGVsIG1lZGkgJXggbm8gY29pbmNpZGVpeCBhbWIgc2VjdG9yIGJvb3QgZGVsIG1lZGkgJXguICBIYXVyaWVzICIKKyJkJ2V4ZWN1dGFyIHNjYW5kaXNrLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC90YWJsZS5jOjI2OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmF0X3RhYmxlX3NldDogY2x1c3RlciAlbGQgb3V0c2lkZSBmaWxlIHN5c3RlbSIKK21zZ3N0ciAiZmF0X3RhYmxlX3NldDogY2z6c3RlciAlbGQgZm9yYSBkZWwgc2lzdGVtYSBkZSBmaXR4ZXJzIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3RhYmxlLmM6MzAxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYXRfdGFibGVfZ2V0OiBjbHVzdGVyICVsZCBvdXRzaWRlIGZpbGUgc3lzdGVtIgorbXNnc3RyICJmYXRfdGFibGVfZ2V0OiBjbPpzdGVyICVsZCBmb3JhIGRlbCBzaXN0ZW1hIGRlIGZpdHhlcnMiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvdGFibGUuYzozNDMKK21zZ2lkICJmYXRfdGFibGVfYWxsb2NfY2x1c3Rlcjogbm8gZnJlZSBjbHVzdGVycyIKK21zZ3N0ciAiZmF0X3RhYmxlX2FsbG9jX2NsdXN0ZXI6IG5vIGhpIGhhIGNs+nN0ZXJzIGxsaXVyZXMiCisKKyM6IGxpYnBhcnRlZC9mcy9saW51eF9zd2FwL2xpbnV4X3N3YXAuYzoyNzUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVucmVjb2duaXNlZCBvbGQgc3R5bGUgbGludXggc3dhcCBzaWduYXR1cmUgJyUxMHMnLiIKK21zZ3N0ciAiU2lnbmF0dXJhIGRlIGxpbnV4IHN3YXAgJyUxMHMnIG5vIHJlY29uZWd1ZGEuIgorCisjOiBsaWJwYXJ0ZWQvZnMvbGludXhfc3dhcC9saW51eF9zd2FwLmM6MzE4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVbnJlY29nbmlzZWQgbmV3IHN0eWxlIGxpbnV4IHN3YXAgc2lnbmF0dXJlICclMTBzJy4iCittc2dzdHIgIlNpZ25hdHVyYSBkZSBsaW51eCBzd2FwICclMTBzJyBubyByZWNvbmVndWRhLiIKKworIzogbGlicGFydGVkL2ZzL2xpbnV4X3N3YXAvbGludXhfc3dhcC5jOjM1OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVW5yZWNvZ25pc2VkIHN3c3VzcCBsaW51eCBzd2FwIHNpZ25hdHVyZSAnJTlzJy4iCittc2dzdHIgIlNpZ25hdHVyYSBkZSBsaW51eCBzd2FwICclMTBzJyBubyByZWNvbmVndWRhLiIKKworIzogbGlicGFydGVkL2ZzL2xpbnV4X3N3YXAvbGludXhfc3dhcC5jOjQzNAorbXNnaWQgIlRvbyBtYW55IGJhZCBwYWdlcy4iCittc2dzdHIgIk1hc3NhIHDgZ2luZXMgaW5jb3JyZWN0ZXMuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2FkdmZzLmM6MTIxIGxpYnBhcnRlZC9mcy9oZnMvYWR2ZnNfcGx1cy5jOjEyMgorIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjQxNCBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NTA4CisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo1MzkgbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NjU4CisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo3NzIKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gY29udGFpbnMgZXJyb3JzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2FkdmZzX3BsdXMuYzoyODcKK21zZ2lkICJCYWQgYmxvY2tzIGNvdWxkIG5vdCBiZSByZWFkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2NhY2hlLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUcnlpbmcgdG8gcmVnaXN0ZXIgYW4gZXh0ZW50IHN0YXJ0aW5nIGF0IGJsb2NrIDB4JVgsIGJ1dCBhbm90aGVyIG9uZSBhbHJlYWR5ICIKKyJleGlzdHMgYXQgdGhpcyBwb3NpdGlvbi4gIFlvdSBzaG91bGQgY2hlY2sgdGhlIGZpbGUgc3lzdGVtISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2NhY2hlLmM6MjE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUcnlpbmcgdG8gbW92ZSBhbiBleHRlbnQgZnJvbSBibG9jayBPeCVYIHRvIGJsb2NrIE94JVgsIGJ1dCBhbm90aGVyIG9uZSAiCisiYWxyZWFkeSBleGlzdHMgYXQgdGhpcyBwb3NpdGlvbi4gIFRoaXMgc2hvdWxkIG5vdCBoYXBwZW4hIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZS5jOjE0MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgdXBkYXRlIHRoZSBleHRlbnQgY2FjaGUgZm9yIEhGUyBmaWxlIHdpdGggQ05JRCAlWC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlLmM6MTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyB0byByZWFkIEhGUyBmaWxlIHdpdGggQ05JRCAlWCBiZWhpbmQgRU9GLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGUuYzoxOTAgbGlicGFydGVkL2ZzL2hmcy9maWxlLmM6MjIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIHNlY3RvciAlbGxpIG9mIEhGUyBmaWxlIHdpdGggQ05JRCAlWC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlLmM6MjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyB0byB3cml0ZSBIRlMgZmlsZSB3aXRoIENOSUQgJVggYmVoaW5kIEVPRi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlX3BsdXMuYzoxNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHVwZGF0ZSB0aGUgZXh0ZW50IGNhY2hlIGZvciBIRlMrIGZpbGUgd2l0aCBDTklEICVYLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGVfcGx1cy5jOjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgdG8gcmVhZCBIRlMrIGZpbGUgd2l0aCBDTklEICVYIGJlaGluZCBFT0YuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZV9wbHVzLmM6MjEzIGxpYnBhcnRlZC9mcy9oZnMvZmlsZV9wbHVzLmM6MjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIHNlY3RvciAlbGxpIG9mIEhGUysgZmlsZSB3aXRoIENOSUQgJVguIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZV9wbHVzLmM6MjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyB0byB3cml0ZSBIRlMrIGZpbGUgd2l0aCBDTklEICVYIGJlaGluZCBFT0YuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MjMyCittc2dpZCAiU29ycnksIEhGUyBjYW5ub3QgYmUgcmVzaXplZCB0aGF0IHdheSB5ZXQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MjYyIGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NjQxCittc2dpZCAiRGF0YSByZWxvY2F0aW9uIGhhcyBmYWlsZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MjgxCittc2dpZCAiRGF0YSByZWxvY2F0aW9uIGxlZnQgc29tZSBkYXRhIGluIHRoZSBlbmQgb2YgdGhlIHZvbHVtZS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzozMjAKKyMsIGZ1enp5Cittc2dpZCAid3JpdGluZyBIRlMgTWFzdGVyIERpcmVjdG9yeSBCbG9jayIKK21zZ3N0ciAiRXJyb3IgZXNjcmliaW50IGFsIGRpcmVjdG9yaSByb290LiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo0NjgKK21zZ2lkICJObyB2YWxpZCBIRlNbK1hdIHNpZ25hdHVyZSBoYXMgYmVlbiBmb3VuZCB3aGlsZSBvcGVuaW5nLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjQ3OAorIywgYy1mb3JtYXQKK21zZ2lkICJWZXJzaW9uICVkIG9mIEhGUysgaXNuJ3Qgc3VwcG9ydGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICJWZXJzaW9uICVkIG9mIEhGU1ggaXNuJ3Qgc3VwcG9ydGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjY3MgorbXNnaWQgIkRhdGEgcmVsb2NhdGlvbiBsZWZ0IHNvbWUgZGF0YSBhdCB0aGUgZW5kIG9mIHRoZSB2b2x1bWUuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NzIwCisjLCBmdXp6eQorbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdGhlIGFsbG9jYXRpb24gZmlsZS4iCittc2dzdHIgIkVycm9yIGVzY3JpYmludCBhbCBkaXJlY3Rvcmkgcm9vdC4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NzM1Cittc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0aGUgY29tcGF0aWJpbGl0eSBwYXJ0IG9mIHRoZSBhbGxvY2F0aW9uIGZpbGUuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NzUwCittc2dpZCAid3JpdGluZyBIRlMrIFZvbHVtZSBIZWFkZXIiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo4NTAKK21zZ2lkICJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBsb29raW5nIGZvciB0aGUgbWFuZGF0b3J5IGJhZCBibG9ja3MgZmlsZS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo5MDQKK21zZ2lkICIiCisiSXQgc2VlbXMgdGhlcmUgaXMgYW4gZXJyb3IgaW4gdGhlIEhGUyB3cmFwcGVyOiB0aGUgYmFkIGJsb2NrcyBmaWxlIGRvZXNuJ3QgIgorImNvbnRhaW4gdGhlIGVtYmVkZGVkIEhGUysgdm9sdW1lLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjk0MAorbXNnaWQgIlNvcnJ5LCBIRlMrIGNhbm5vdCBiZSByZXNpemVkIHRoYXQgd2F5IHlldC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo5NzUKK21zZ2lkICJzaHJpbmtpbmcgZW1iZWRkZWQgSEZTKyB2b2x1bWUiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo5OTEKK21zZ2lkICJSZXNpemluZyB0aGUgSEZTKyB2b2x1bWUgaGFzIGZhaWxlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo5OTgKKyMsIGZ1enp5Cittc2dpZCAic2hyaW5raW5nIEhGUyB3cmFwcGVyIgorbXNnc3RyICJlbmNvbmdpbnQiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MTAwNworbXNnaWQgIlVwZGF0aW5nIHRoZSBIRlMgd3JhcHBlciBoYXMgZmFpbGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjExMDkgbGlicGFydGVkL2ZzL2hmcy9oZnMuYzoxMTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGlzIGlzIG5vdCBhIHJlYWwgJXMgY2hlY2suICBUaGlzIGlzIGdvaW5nIHRvIGV4dHJhY3Qgc3BlY2lhbCBsb3cgbGV2ZWwgIgorImZpbGVzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjE1NQorbXNnaWQgIkJhZCBibG9jayBsaXN0IGhlYWRlciBjaGVja3N1bS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJbnZhbGlkIHNpemUgb2YgYSB0cmFuc2FjdGlvbiBibG9jayB3aGlsZSByZXBsYXlpbmcgdGhlIGpvdXJuYWwgKCVpIGJ5dGVzKS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MjYwCittc2dpZCAiIgorIkpvdXJuYWwgc3RvcmVkIG91dHNpZGUgb2YgdGhlIHZvbHVtZSBhcmUgbm90IHN1cHBvcnRlZC4gIFRyeSB0byBkZXNhY3RpdmF0ZSAiCisidGhlIGpvdXJuYWwgYW5kIHJ1biBQYXJ0ZWQgYWdhaW4uIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjI3MQorIywgZnV6enkKK21zZ2lkICJKb3VybmFsIG9mZnNldCBvciBzaXplIGlzIG5vdCBtdWx0aXBsZSBvZiB0aGUgc2VjdG9yIHNpemUuIgorbXNnc3RyICIiCisiRWwgY29tZW7nYW1lbnQgZGVsdGEgZGUgY2x1c3RlciA9ICVkLCBxdWUgbm8g6XMgbXVsdGlwbGUgZGUgbGEgbWlkYSBkZSAiCisiY2x1c3RlciAlZC4gIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzoyOTIKK21zZ2lkICJJbmNvcnJlY3QgbWFnaWMgdmFsdWVzIGluIHRoZSBqb3VybmFsIGhlYWRlci4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MzAyCittc2dpZCAiSm91cm5hbCBzaXplIG1pc21hdGNoIGJldHdlZW4gam91cm5hbCBpbmZvIGJsb2NrIGFuZCBqb3VybmFsIGhlYWRlci4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MzE0CisjLCBmdXp6eQorbXNnaWQgIlNvbWUgaGVhZGVyIGZpZWxkcyBhcmUgbm90IG11bHRpcGxlIG9mIHRoZSBzZWN0b3Igc2l6ZS4iCittc2dzdHIgIiIKKyJFbCBjb21lbudhbWVudCBkZWx0YSBkZSBjbHVzdGVyID0gJWQsIHF1ZSBubyDpcyBtdWx0aXBsZSBkZSBsYSBtaWRhIGRlICIKKyJjbHVzdGVyICVkLiAiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjMyMworbXNnaWQgIiIKKyJUaGUgc2VjdG9yIHNpemUgc3RvcmVkIGluIHRoZSBqb3VybmFsIGlzIG5vdCA1MTIgYnl0ZXMuICBQYXJ0ZWQgb25seSAiCisic3VwcG9ydHMgNTEyIGJ5dGVzIGxlbmd0aCBzZWN0b3JzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozMzUKK21zZ2lkICJCYWQgam91cm5hbCBjaGVja3N1bS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MzUzCittc2dpZCAiIgorIlRoZSBqb3VybmFsIGlzIG5vdCBlbXB0eS4gIFBhcnRlZCBtdXN0IHJlcGxheSB0aGUgdHJhbnNhY3Rpb25zIGJlZm9yZSAiCisib3BlbmluZyB0aGUgZmlsZSBzeXN0ZW0uICBUaGlzIHdpbGwgbW9kaWZ5IHRoZSBmaWxlIHN5c3RlbS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MzgxCittc2dpZCAiIgorIlRoZSB2b2x1bWUgaGVhZGVyIG9yIHRoZSBtYXN0ZXIgZGlyZWN0b3J5IGJsb2NrIGhhcyBjaGFuZ2VkIHdoaWxlIHJlcGxheWluZyAiCisidGhlIGpvdXJuYWwuICBZb3Ugc2hvdWxkIHJlc3RhcnQgUGFydGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3Byb2JlLmM6NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBhcnRlZCBjYW4ndCB1c2UgSEZTIGZpbGUgc3lzdGVtcyBvbiBkaXNrcyB3aXRoIGEgc2VjdG9yIHNpemUgbm90IGVxdWFsIHRvICUiCisiZCBieXRlcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjE1MSBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzoxNTUKK21zZ2lkICJBbiBleHRlbnQgaGFzIG5vdCBiZWVuIHJlbG9jYXRlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjI1MSBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzozMDcKK21zZ2lkICIiCisiQSByZWZlcmVuY2UgdG8gYW4gZXh0ZW50IGNvbWVzIGZyb20gYSBwbGFjZSBpdCBzaG91bGQgbm90LiAgWW91IHNob3VsZCBjaGVjayAiCisidGhlIGZpbGUgc3lzdGVtISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6MzgxCittc2dpZCAiVGhpcyBIRlMgdm9sdW1lIGhhcyBubyBjYXRhbG9nIGZpbGUuICBUaGlzIGlzIHZlcnkgdW51c3VhbCEiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjQ3NQorbXNnaWQgIlRoaXMgSEZTIHZvbHVtZSBoYXMgbm8gZXh0ZW50cyBvdmVyZmxvdyBmaWxlLiAgVGhpcyBpcyBxdWl0ZSB1bnVzdWFsISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NTE3IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjY2OAorbXNnaWQgIiIKKyJUaGUgZXh0ZW50cyBvdmVyZmxvdyBmaWxlIHNob3VsZCBub3QgY29udGFpbiBpdHMgb3duIGV4dGVudHMhICBZb3Ugc2hvdWxkICIKKyJjaGVjayB0aGUgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzo1NzQgbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6ODQ3CisjLCBmdXp6eQorbXNnaWQgIkNvdWxkIG5vdCBjYWNoZSB0aGUgZmlsZSBzeXN0ZW0gaW4gbWVtb3J5LiIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBkZXRlY3RhciBlbCBzaXN0ZW1hIGRlIGZpdHhlcnMuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NjM1IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjkwOAorbXNnaWQgIkJhZCBibG9ja3MgbGlzdCBjb3VsZCBub3QgYmUgbG9hZGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NjQ5IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjkyNAorbXNnaWQgIkFuIGVycm9yIG9jY3VycmVkIGR1cmluZyBleHRlbnQgcmVsb2NhdGlvbi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NDk1Cittc2dpZCAiVGhpcyBIRlMrIHZvbHVtZSBoYXMgbm8gY2F0YWxvZyBmaWxlLiAgVGhpcyBpcyB2ZXJ5IHVudXN1YWwhIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjYxOQorbXNnaWQgIlRoaXMgSEZTKyB2b2x1bWUgaGFzIG5vIGV4dGVudHMgb3ZlcmZsb3cgZmlsZS4gIFRoaXMgaXMgcXVpdGUgdW51c3VhbCEiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjk0Cittc2dpZCAiZGlzcGxheXMgdGhpcyBoZWxwIG1lc3NhZ2UiCittc2dzdHIgIm1vc3RyYSBhcXVlc3QgbWlzc2F0Z2UgZCdhanVkYSIKKworIzogcGFydGVkL3BhcnRlZC5jOjk1Cittc2dpZCAibGlzdHMgcGFydGl0aW9uIGxheW91dCBvbiBhbGwgYmxvY2sgZGV2aWNlcyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6OTYKK21zZ2lkICJkaXNwbGF5cyBtYWNoaW5lIHBhcnNlYWJsZSBvdXRwdXQiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjk3Cittc2dpZCAibmV2ZXIgcHJvbXB0cyBmb3IgdXNlciBpbnRlcnZlbnRpb24iCittc2dzdHIgIm1haSBwcmVndW50YSBhIGwndXN1YXJpIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6OTgKK21zZ2lkICJkaXNwbGF5cyB0aGUgdmVyc2lvbiIKK21zZ3N0ciAibW9zdHJhIGxhIHZlcnNp8yIKKworIzogcGFydGVkL3BhcnRlZC5jOjExMQorIywgZnV6enkKK21zZ2lkICIiCisiTlVNQkVSIGlzIHRoZSBwYXJ0aXRpb24gbnVtYmVyIHVzZWQgYnkgTGludXguICBPbiBNUy1ET1MgZGlzayBsYWJlbHMsIHRoZSAiCisicHJpbWFyeSBwYXJ0aXRpb25zIG51bWJlciBmcm9tIDEgdG8gNCwgbG9naWNhbCBwYXJ0aXRpb25zIGZyb20gNSBvbndhcmRzLlxuIgorbXNnc3RyICIiCisiTUlOT1Ig6XMgZWwgbvptZXJvIGRlIHBhcnRpY2nzIHV0aWxpdHphZGEgcGVyIExpbnV4LiBBIGV0aXF1ZXRlcyBkZSBkaXNrICIKKyJtc2RvcywgbGVzIHBhcnRpY2lvbnMgcHJpbeByaWVzIHPzbiBudW1lcmFkYXMgZGUgMSBhIDQsIGkgbGVzIHBhcnRpY2lvbnMgIgorImzyZ2lxdWVzIGRlIGxhIDUgZW4gZGF2YW50LlxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTE0Cittc2dpZCAiTEFCRUwtVFlQRSBpcyBvbmUgb2Y6ICIKK21zZ3N0ciAiVElQVVMtRVRJIOlzIHVuYSBkJ2FxdWVzdGVzOiAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMTUKK21zZ2lkICJGTEFHIGlzIG9uZSBvZjogIgorbXNnc3RyICJGTEFHIOlzIHVuYSBkJ2FxdWVzdHM6IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTE2CisjLCBmdXp6eQorbXNnaWQgIlVOSVQgaXMgb25lIG9mOiAiCittc2dzdHIgIkZMQUcg6XMgdW5hIGQnYXF1ZXN0czoiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMTcKK21zZ2lkICJQQVJULVRZUEUgaXMgb25lIG9mOiBwcmltYXJ5LCBsb2dpY2FsLCBleHRlbmRlZFxuIgorbXNnc3RyICJUSVBVUy1QQVJUIOlzIHVuYSBkJ2FxdWVzdGVzOiBwcmlt4HJpYSwgbPJnaWNhLCBleHRlc2FcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjExOQorbXNnaWQgIkZTLVRZUEUgaXMgb25lIG9mOiAiCittc2dzdHIgIlRJUFVTLVNGIOlzIHVuIGQnYXF1ZXN0czogIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIwCittc2dpZCAiIgorIlNUQVJUIGFuZCBFTkQgYXJlIGRpc2sgbG9jYXRpb25zLCBzdWNoIGFzIDRHQiBvciAxMCUuICBOZWdhdGl2ZSB2YWx1ZXMgY291bnQgIgorImZyb20gdGhlIGVuZCBvZiB0aGUgZGlzay4gIEZvciBleGFtcGxlLCAtMXMgc3BlY2lmaWVzIGV4YWN0bHkgdGhlIGxhc3QgIgorInNlY3Rvci5cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIzCittc2dpZCAiU1RBVEUgaXMgb25lIG9mOiBvbiwgb2ZmXG4iCittc2dzdHIgIkVTVEFUIOlzIHVuIGQnYXF1ZXN0czogb24sIG9mZlxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTI0Cittc2dpZCAiREVWSUNFIGlzIHVzdWFsbHkgL2Rldi9oZGEgb3IgL2Rldi9zZGFcbiIKK21zZ3N0ciAiRElTUE9TIOlzLCBub3JtYWxtZW50LCAvZGV2L2hkYSBvIC9kZXYvc2RhXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjUKK21zZ2lkICJOQU1FIGlzIGFueSB3b3JkIHlvdSB3YW50XG4iCittc2dzdHIgIk5PTSDpcyBxdWFsc2V2b2wgcGFyYXVsYSBxdWUgdnVsZ3Vpc1xuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTI2Cittc2dpZCAiVGhlIHBhcnRpdGlvbiBtdXN0IGhhdmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgRlMtVFlQRXM6ICIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTMwCisjLCBmdXp6eQorbXNnaWQgIiIKKyJDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLlxuIgorIlRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlLCBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS5cbiIKKyJcbiIKKyJUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiIKKyJidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuIgorIk1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbiIKKyJHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuIgorIlxuIgorbXNnc3RyICIiCisiQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLlxuIgorIkFxdWVzdCBwcm9ncmFtYSDpcyBwcm9ncmFtYXJpIG9iZXJ0IHNvdGEgTGxpY+huY2lhIFD6YmxpY2EgR2VuZXJhbCBHTlUuXG4iCisiXG4iCisiQXF1ZXN0IHByb2dyYW1hIGVzIGRpc3RyaWJ1ZWl4IGVuIGxhIGVzcGVyYW7nYSBxdWUgc2lndWkg+nRpbCwgcGVy8iBTRU5TRSAiCisiQ0FQIEdBUkFOVElBOyBzZW5zZSBsYSBnYXJhbnRpYSBpbXBs7WNpdGEgZGUgQ09NRVJDSUFMSVRaQUNJTyBuaSBxdWUgIgorIkNVTVBMRUlYSSBDQVAgUFJPUE9TSVQgUEFSVElDVUxBUi4gIFBlciBt6XMgZGV0YWxscywgdmVnZXUgbGEgTGxpY+huY2lhICIKKyJHZW5lcmFsIFD6YmxpY2EgR05VLlxuIgorIlxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiUwLmYlJVx0KHRpbWUgbGVmdCAlLjJkOiUuMmQpIgorbXNnc3RyICIlMC5mJSVcdCh0ZW1wcyBxdWUgcXVlZGEgJS4yZDolLjJkKSIKKworIzogcGFydGVkL3BhcnRlZC5jOjE5NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGFydGl0aW9uICVzIGlzIGJlaW5nIHVzZWQuIFlvdSBtdXN0IHVubW91bnQgaXQgYmVmb3JlIHlvdSBtb2RpZnkgaXQgd2l0aCAiCisiUGFydGVkLiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjExCisjLCBjLWZvcm1hdAorbXNnaWQgIlBhcnRpdGlvbihzKSBvbiAlcyBhcmUgYmVpbmcgdXNlZC4iCittc2dzdHIgIkxhKHMpIHBhcnRpY2nzKG5zKSBhICVzIHMnZXN04CB1dGlsaXR6YW50LiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMworbXNnaWQgIiIKKyJUaGUgZXhpc3RpbmcgZmlsZSBzeXN0ZW0gd2lsbCBiZSBkZXN0cm95ZWQgYW5kIGFsbCBkYXRhIG9uIHRoZSBwYXJ0aXRpb24gIgorIndpbGwgYmUgbG9zdC4gRG8geW91IHdhbnQgdG8gY29udGludWU/IgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBleGlzdGluZyBkaXNrIGxhYmVsIG9uICVzIHdpbGwgYmUgZGVzdHJveWVkIGFuZCBhbGwgZGF0YSBvbiB0aGlzIGRpc2sgIgorIndpbGwgYmUgbG9zdC4gRG8geW91IHdhbnQgdG8gY29udGludWU/IgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo0NTggcGFydGVkL3BhcnRlZC5jOjY1MiBwYXJ0ZWQvcGFydGVkLmM6MTA0NAorIzogcGFydGVkL3BhcnRlZC5jOjExMjggcGFydGVkL3BhcnRlZC5jOjE3NzEgcGFydGVkL3BhcnRlZC5jOjE4NTIKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxOTAwCittc2dpZCAiUGFydGl0aW9uIG51bWJlcj8iCittc2dzdHIgIk76bWVybyBkZSBwYXJ0aWNp8z8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo1MDAKK21zZ2lkICJTb3VyY2UgZGV2aWNlPyIKK21zZ3N0ciAiRGlzcG9zaXRpdSBkJ29yaWdlbj8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo1MDQKK21zZ2lkICJTb3VyY2UgcGFydGl0aW9uIG51bWJlcj8iCittc2dzdHIgIk76bWVybyBkZSBwYXJ0aWNp8yBkJ29yaWdlbj8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo1MDkKKyMsIGZ1enp5Cittc2dpZCAiQ2FuJ3QgY29weSBhbiBleHRlbmRlZCBwYXJ0aXRpb24uIgorbXNnc3RyICJObyBlcyBwb2RlbiBjb3BpYXIgcGFydGljaW9ucyBleHRlc2VzLiIKKworIzogcGFydGVkL3BhcnRlZC5jOjUxNQorbXNnaWQgIkRlc3RpbmF0aW9uIHBhcnRpdGlvbiBudW1iZXI/IgorbXNnc3RyICJO+m1lcm8gZGUgcGFydGljafMgZGVzdO0/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NjE1Cittc2dpZCAiTmV3IGRpc2sgbGFiZWwgdHlwZT8iCittc2dzdHIgIk5vdSB0aXB1cyBkJ2V0aXF1ZXRhPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjY1NgorbXNnaWQgIkZpbGUgc3lzdGVtPyIKK21zZ3N0ciAiU2lzdGVtYSBkZSBmaXR4ZXJzPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjcwNyBwYXJ0ZWQvcGFydGVkLmM6ODc4Cittc2dpZCAiUGFydGl0aW9uIHR5cGU/IgorbXNnc3RyICJUaXB1cyBkZSBwYXJ0aWNp8z8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo3MTQgcGFydGVkL3BhcnRlZC5jOjg4NSBwYXJ0ZWQvcGFydGVkLmM6MTEzMQorbXNnaWQgIlBhcnRpdGlvbiBuYW1lPyIKK21zZ3N0ciAiTm9tIGRlIGxhIHBhcnRpY2nzPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjcyMiBwYXJ0ZWQvcGFydGVkLmM6ODk1Cittc2dpZCAiRmlsZSBzeXN0ZW0gdHlwZT8iCittc2dzdHIgIlNpc3RlbWEgZGUgZml0eGVycz8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo3MjkgcGFydGVkL3BhcnRlZC5jOjg5NyBwYXJ0ZWQvcGFydGVkLmM6MTA1OQorIzogcGFydGVkL3BhcnRlZC5jOjE3MjUgcGFydGVkL3BhcnRlZC5jOjE3ODAKK21zZ2lkICJTdGFydD8iCittc2dzdHIgIkluaWNpPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjczMSBwYXJ0ZWQvcGFydGVkLmM6OTAwIHBhcnRlZC9wYXJ0ZWQuYzoxMDYyCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTcyNyBwYXJ0ZWQvcGFydGVkLmM6MTc4MgorbXNnaWQgIkVuZD8iCittc2dzdHIgIkZpPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjc2OSBwYXJ0ZWQvcGFydGVkLmM6OTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgcmVxdWVzdGVkIGEgcGFydGl0aW9uIGZyb20gJXMgdG8gJXMuXG4iCisiVGhlIGNsb3Nlc3QgbG9jYXRpb24gd2UgY2FuIG1hbmFnZSBpcyAlcyB0byAlcy4gIElzIHRoaXMgc3RpbGwgYWNjZXB0YWJsZSB0byAiCisieW91PyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6ODkwCisjLCBmdXp6eQorbXNnaWQgIkFuIGV4dGVuZGVkIHBhcnRpdGlvbiBjYW5ub3QgaG9sZCBhIGZpbGUgc3lzdGVtLiAgRGlkIHlvdSB3YW50IG1rcGFydD8iCittc2dzdHIgIiIKKyJMZXMgcGFydGljaW9ucyBleHRlc2VzIG5vIHBvZGVuIHRlbmlyIHNpc3RlbWVzIGRlIGZpdHhlcnMuICBWb2xldSBleGVjdXRhciAiCisibWtwYXJ0PyIKKworIzogcGFydGVkL3BhcnRlZC5jOjEwNTAKKyMsIGZ1enp5Cittc2dpZCAiQ2FuJ3QgbW92ZSBhbiBleHRlbmRlZCBwYXJ0aXRpb24uIgorbXNnc3RyICJObyBlcyBwb2RlbiBtb3VyZSBwYXJ0aWNpb25zIGV4dGVzZXMiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMDc5Cittc2dpZCAiQ2FuJ3QgbW92ZSBhIHBhcnRpdGlvbiBvbnRvIGl0c2VsZi4gIFRyeSB1c2luZyByZXNpemUsIHBlcmhhcHM/IgorbXNnc3RyICIiCisiTm8gZXMgcG9yIG1vdXJlIHVuYSBwYXJ0aWNp8yBhIGVsbGEgbWF0ZWl4YS4gIFZvbHMgcmVkaW1lbnNpb25hci1sYSwgcG90c2VyPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlub3I6ICVkXG4iCittc2dzdHIgIk1pbm9yOiAlZFxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIyOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRmxhZ3M6ICVzXG4iCittc2dzdHIgIkZsYWdzOiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlsZSBTeXN0ZW06ICVzXG4iCittc2dzdHIgIlNpc3RlbWEgZGUgZml0eGVyczolc1xuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIzMAorIywgZnV6enkKK21zZ2lkICJTaXplOiAgICAgICAgICIKK21zZ3N0ciAiTWlkYTogICAgICAgICAlMTAuM2ZNYiAoJWQlJSlcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMzUKKyMsIGZ1enp5Cittc2dpZCAiTWluaW11bSBzaXplOiAiCittc2dzdHIgIk1pZGEgbe1uaW1hOiAlMTAuM2ZNYiAoJWQlJSlcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMzgKKyMsIGZ1enp5Cittc2dpZCAiTWF4aW11bSBzaXplOiAiCittc2dzdHIgIk1pZGEgbeB4aW1hOiAlMTAuM2ZNYiAoJWQlJSlcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEzNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTW9kZWw6ICVzICglcylcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTM2NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRGlzayAlczogJXNcbiIKK21zZ3N0ciAiJXMgICVzICAlcyIKKworIzogcGFydGVkL3BhcnRlZC5jOjEzNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VjdG9yIHNpemUgKGxvZ2ljYWwvcGh5c2ljYWwpOiAlbGxkQi8lbGxkQlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMzgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkJJT1MgY3lsaW5kZXIsaGVhZCxzZWN0b3IgZ2VvbWV0cnk6ICVkLCVkLCVkLiAgRWFjaCBjeWxpbmRlciBpcyAlcy5cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTM5MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiUGFydGl0aW9uIFRhYmxlOiAlc1xuIgorbXNnc3RyICJOb20gZGUgbGEgcGFydGljafM/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQwNiBwYXJ0ZWQvcGFydGVkLmM6MTQwOQorbXNnaWQgIk51bWJlciIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQwNiBwYXJ0ZWQvcGFydGVkLmM6MTQwOQorIywgZnV6enkKK21zZ2lkICJTdGFydCIKK21zZ3N0ciAiSW5pY2k/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQwNyBwYXJ0ZWQvcGFydGVkLmM6MTQxMAorIywgZnV6enkKK21zZ2lkICJFbmQiCittc2dzdHIgIkZpPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MTAKKyMsIGZ1enp5Cittc2dpZCAiU2l6ZSIKK21zZ3N0ciAicmVzaXplIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQxNAorbXNnaWQgIlR5cGUiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MTYKKyMsIGZ1enp5Cittc2dpZCAiRmlsZSBzeXN0ZW0iCittc2dzdHIgIlNpc3RlbWEgZGUgZml0eGVycz8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDE5CisjLCBmdXp6eQorbXNnaWQgIk5hbWUiCittc2dzdHIgIm5hbWUiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDIxCittc2dpZCAiRmxhZ3MiCittc2dzdHIgIkZsYWdzIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQ3NworbXNnaWQgIkZyZWUgU3BhY2UiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjE2MjQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBICVzICVzIHBhcnRpdGlvbiB3YXMgZm91bmQgYXQgJXMgLT4gJXMuICBEbyB5b3Ugd2FudCB0byBhZGQgaXQgdG8gdGhlICIKKyJwYXJ0aXRpb24gdGFibGU/IgorbXNnc3RyICIiCisiVW5hIHBhcnRpY2nzICVzICVzIGhhIGVzdGF0IHRyb2JhZGEgYSAlLjNmTWIgLT4gJS4zZk1iLiAgVm9scyBhZmVnaXItbGEgYSBsYSAiCisidGF1bGEgZGUgcGFydGljaW9ucz8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNjYzCisjLCBmdXp6eQorbXNnaWQgInNlYXJjaGluZyBmb3IgZmlsZSBzeXN0ZW1zIgorbXNnc3RyICJzaXN0ZW1hIGRlIGZpdHhlcnMgY3JlaXhlbnQiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxODc3Cittc2dpZCAiTmV3IGRldmljZT8iCittc2dzdHIgIk5vdSBkaXNwb3NpdGl1PyIKKworIzogcGFydGVkL3BhcnRlZC5jOjE5MDIKKyMsIGZ1enp5Cittc2dpZCAiRmxhZyB0byBJbnZlcnQ/IgorbXNnc3RyICJGbGFnIGEgY2Fudmlhcj8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxOTA3Cittc2dpZCAiTmV3IHN0YXRlPyIKK21zZ3N0ciAiTm91IGVzdGF0PyIKKworIzogcGFydGVkL3BhcnRlZC5jOjE5NDQKK21zZ2lkICJVbml0PyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjA5MworbXNnaWQgImNoZWNrIgorbXNnc3RyICJjb21wcm92YSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIwOTYKKyMsIGZ1enp5Cittc2dpZCAiIgorImNoZWNrIE5VTUJFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8gYSBzaW1wbGUgY2hlY2sgb24gdGhlIGZpbGUgc3lzdGVtIgorbXNnc3RyICIiCisiY29tcHJvdmEgTUlOT1IgICAgICAgICAgICAgICAgIGZhIHVuYSBzaW1wbGUgY29tcHJvdmFjafMgYWwgc2lzdGVtYSBkZSAiCisiZml0eGVycyIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMDIKK21zZ2lkICJjcCIKK21zZ3N0ciAiY3AiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTA1CisjLCBmdXp6eQorbXNnaWQgIiIKKyJjcCBbRlJPTS1ERVZJQ0VdIEZST00tTlVNQkVSIFRPLU5VTUJFUiAgIGNvcHkgZmlsZSBzeXN0ZW0gdG8gYW5vdGhlciAiCisicGFydGl0aW9uIgorbXNnc3RyICIiCisiY3AgW0RFU0RFLURJU1BPU10gREUtTUlOT1IgQS1NSU5PUiAgICAgIGNvcGlhIHVuIHNpc3RlbWEgZGUgZml0eGVycyBhIHVuYSAiCisiYWx0cmEgcGFydGljafMiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTExCittc2dpZCAiaGVscCIKK21zZ3N0ciAiYWp1ZGEiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTE0CisjLCBmdXp6eQorbXNnaWQgIiIKKyJoZWxwIFtDT01NQU5EXSAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50IGdlbmVyYWwgaGVscCwgb3IgaGVscCBvbiAiCisiQ09NTUFORCIKK21zZ3N0ciAiQWp1ZGEgW09SRFJFXSAgICAgICAgICAgICAgICAgaW1wcmltZWl4IGFqdWRhIGdlbmVyYWwsIG8gYWp1ZGEgZCdPUkRSRSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMjAKK21zZ2lkICJta2xhYmVsIgorbXNnc3RyICJta2xhYmVsIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEyMAorIywgZnV6enkKK21zZ2lkICJta3RhYmxlIgorbXNnc3RyICJta2xhYmVsIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEyMworIywgZnV6enkKK21zZ2lkICIiCisibWtsYWJlbCxta3RhYmxlIExBQkVMLVRZUEUgICAgICAgICAgICAgICBjcmVhdGUgYSBuZXcgZGlza2xhYmVsIChwYXJ0aXRpb24gIgorInRhYmxlKSIKK21zZ3N0ciAiIgorIm1rbGFiZWwgVElQVVMtRVRJICAgICAgICBjcmVhIHVuYSBub3ZhIGV0aXF1ZXRhIGRlIGRpc2MgKHRhdWxhIGRlIHBhcnRpY2nzKSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMjkKK21zZ2lkICJta2ZzIgorbXNnc3RyICJta2ZzIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEzMgorIywgZnV6enkKK21zZ2lkICIiCisibWtmcyBOVU1CRVIgRlMtVFlQRSAgICAgICAgICAgICAgICAgICAgICBtYWtlIGEgRlMtVFlQRSBmaWxlIHN5c3RlbSBvbiAiCisicGFydGl0aXRvbiBOVU1CRVIiCittc2dzdHIgIiIKKyJta2ZzIE1JTk9SIFRJUFVTLVNGICAgICAgY3JlYSB1biBzaXN0ZW1hIGRlIGZpdHhlcnMgVElQVVMtU0YgYSBsYSBwYXJ0aWNp8yAiCisiTUlOT1IiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTM4Cittc2dpZCAibWtwYXJ0IgorbXNnc3RyICJta3BhcnQiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTQxCisjLCBmdXp6eQorbXNnaWQgIm1rcGFydCBQQVJULVRZUEUgW0ZTLVRZUEVdIFNUQVJUIEVORCAgICAgbWFrZSBhIHBhcnRpdGlvbiIKK21zZ3N0ciAibWtwYXJ0IFRJUFVTLVBBUlQgW1RJUFVTLVNGXSBJTklDSSBGSSAgICAgIGNyZWEgdW5hIHBhcnRpY2nzIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE0NworIywgZnV6enkKK21zZ2lkICIiCisiJ21rcGFydCcgbWFrZXMgYSBwYXJ0aXRpb24gd2l0aG91dCBjcmVhdGluZyBhIG5ldyBmaWxlIHN5c3RlbSBvbiB0aGUgIgorInBhcnRpdGlvbi4gIEZTLVRZUEUgbWF5IGJlIHNwZWNpZmllZCB0byBzZXQgYW4gYXBwcm9wcmlhdGUgcGFydGl0aW9uIElELlxuIgorbXNnc3RyICIiCisibWtwYXJ0IGNyZWEgdW5hIHBhcnRpY2nzIHNlbnNlIGNyZWFyIGNhcCBzaXN0ZW1hIGRlIGZpdHhlcnMgYSBsYSBwYXJ0aWNp8y4gIgorIlRJUFVTLVNGIGhhIGRlIHNlciBlc3BlY2lmaWNhdCBwZXIgYXNzaWduYXIgdW5hIElEIGRlIHBhcnRpY2nzLlxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE1MgorbXNnaWQgIm1rcGFydGZzIgorbXNnc3RyICJta3BhcnRmcyIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNTUKKyMsIGZ1enp5Cittc2dpZCAiIgorIm1rcGFydGZzIFBBUlQtVFlQRSBGUy1UWVBFIFNUQVJUIEVORCAgICAgbWFrZSBhIHBhcnRpdGlvbiB3aXRoIGEgZmlsZSBzeXN0ZW0iCittc2dzdHIgIiIKKyJta3BhcnRmcyBUSVBVUy1QQVJUIFRJUFVTLVNGIElOSUNJIEZJICAgICAgY3JlYSB1bmEgcGFydGljafMgYW1iIHVuIHNpc3RlbWEgIgorImRlIGZpdHhlcnMiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTYxCittc2dpZCAibW92ZSIKK21zZ3N0ciAibW92ZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNjQKKyMsIGZ1enp5Cittc2dpZCAibW92ZSBOVU1CRVIgU1RBUlQgRU5EICAgICAgICAgICAgICAgICAgICBtb3ZlIHBhcnRpdGlvbiBOVU1CRVIiCittc2dzdHIgIm1vdmUgTUlOT1IgSU5JQ0kgRkkgICAgICAgICAgbW91IGxhIHBhcnRpY2nzIE1JTk9SIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE2OQorbXNnaWQgIm5hbWUiCittc2dzdHIgIm5hbWUiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTcyCisjLCBmdXp6eQorbXNnaWQgIm5hbWUgTlVNQkVSIE5BTUUgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSBwYXJ0aXRpb24gTlVNQkVSIGFzIE5BTUUiCittc2dzdHIgIm5hbWUgTUlOT1IgTk9NICAgICAgICAgICAgICAgYW5vbWVuYSBsYSBwYXJ0aWNp8yBNSU5PUiBOT00iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTc3Cittc2dpZCAicHJpbnQiCittc2dzdHIgInByaW50IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE4MAorbXNnaWQgIiIKKyJwcmludCBbZGV2aWNlc3xmcmVlfGxpc3QsYWxsfE5VTUJFUl0gICAgIGRpc3BsYXkgdGhlIHBhcnRpdGlvbiB0YWJsZSwgIgorImF2YWlsYWJsZSBkZXZpY2VzLCBmcmVlIHNwYWNlLCBhbGwgZm91bmQgcGFydGl0aW9ucywgb3IgYSBwYXJ0aWN1bGFyICIKKyJwYXJ0aXRpb24iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxODUKK21zZ2lkICIiCisiV2l0aG91dCBhcmd1bWVudHMsICdwcmludCcgZGlzcGxheXMgdGhlIGVudGlyZSBwYXJ0aXRpb24gdGFibGUuIEhvd2V2ZXIgd2l0aCAiCisidGhlIGZvbGxvd2luZyBhcmd1bWVudHMgaXQgcGVyZm9ybXMgdmFyaW91cyBvdGhlciBhY3Rpb25zLlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTg3Cittc2dpZCAiICBkZXZpY2VzICAgOiBkaXNwbGF5IGFsbCBhY3RpdmUgYmxvY2sgZGV2aWNlc1xuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTg4Cittc2dpZCAiIgorIiAgZnJlZSAgICAgIDogZGlzcGxheSBpbmZvcm1hdGlvbiBhYm91dCBmcmVlIHVucGFydGl0aW9uZWQgc3BhY2Ugb24gdGhlICIKKyJjdXJyZW50IGJsb2NrIGRldmljZVxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTkwCisjLCBmdXp6eQorbXNnaWQgIiIKKyIgIGxpc3QsIGFsbCA6IGRpc3BsYXkgdGhlIHBhcnRpdGlvbiB0YWJsZXMgb2YgYWxsIGFjdGl2ZSBibG9jayBkZXZpY2VzXG4iCittc2dzdHIgIiIKKyJwcmludFtNSU5PUl0gICAgICAgICAgICAgICAgICBtb3N0cmEgbGEgdGF1bGEgZGUgcGFydGljaW9uczsgbyB1bmEgcGFydGljafMiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTkxCittc2dpZCAiIgorIiAgTlVNQkVSICAgIDogZGlzcGxheSBtb3JlIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgcGFydGljdWxhciAiCisicGFydGl0aW9uXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxOTYKK21zZ2lkICJxdWl0IgorbXNnc3RyICJxdWl0IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE5OQorIywgZnV6enkKK21zZ2lkICJxdWl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQgcHJvZ3JhbSIKK21zZ3N0ciAicXVpdCAgICAgICAgICAgICAgICAgICAgICAgICAgc3VydCBkZWwgcHJvZ3JhbWEiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjA0Cittc2dpZCAicmVzY3VlIgorbXNnc3RyICJyZXNjYXRhciIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMDcKKyMsIGZ1enp5Cittc2dpZCAiIgorInJlc2N1ZSBTVEFSVCBFTkQgICAgICAgICAgICAgICAgICAgICAgICAgcmVzY3VlIGEgbG9zdCBwYXJ0aXRpb24gbmVhciBTVEFSVCAiCisiYW5kIEVORCIKK21zZ3N0ciAicmVzY2F0YXIgSU5JQ0kgRkkgICAgICAgIHJlc2NhdGEgcGFydGljaW9ucyBwZXJkdWRlcyBlbnRyZSBJTklDSSBpIEZJIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIxMworbXNnaWQgInJlc2l6ZSIKK21zZ3N0ciAicmVzaXplIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIxNgorIywgZnV6enkKK21zZ2lkICIiCisicmVzaXplIE5VTUJFUiBTVEFSVCBFTkQgICAgICAgICAgICAgICAgICByZXNpemUgcGFydGl0aW9uIE5VTUJFUiBhbmQgaXRzICIKKyJmaWxlIHN5c3RlbSIKK21zZ3N0ciAicmVzY2F0YXIgSU5JQ0kgRkkgICAgICAgIHJlc2NhdGEgcGFydGljaW9ucyBwZXJkdWRlcyBlbnRyZSBJTklDSSBpIEZJIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIyNAorbXNnaWQgInJtIgorbXNnc3RyICJybSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMjcKKyMsIGZ1enp5Cittc2dpZCAicm0gTlVNQkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcGFydGl0aW9uIE5VTUJFUiIKK21zZ3N0ciAicm0gTUlOT1IgICAgICAgICAgICAgICAgICAgICAgc3VwcmltZWl4IGxhIHBhcnRpY2nzIE1JTk9SIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIzMgorbXNnaWQgInNlbGVjdCIKK21zZ3N0ciAic2VsZWN0IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIzNQorIywgZnV6enkKK21zZ2lkICJzZWxlY3QgREVWSUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNob29zZSB0aGUgZGV2aWNlIHRvIGVkaXQiCittc2dzdHIgInNlbGVjdCBESVNQT1NJVElVICAgICAgICAgICAgICAgICBlc2NvbGxpciBlbCBkaXNwb3NpdGl1IGEgZWRpdGFyIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI0MAorbXNnaWQgInNldCIKK21zZ3N0ciAic2V0IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI0MworIywgZnV6enkKK21zZ2lkICIiCisic2V0IE5VTUJFUiBGTEFHIFNUQVRFICAgICAgICAgICAgICAgICAgICBjaGFuZ2UgdGhlIEZMQUcgb24gcGFydGl0aW9uIE5VTUJFUiIKK21zZ3N0ciAic2V0IE1JTk9SIEZMQUcgRVNUQVQgICAgICAgICAgY2FudmlhIHVuIGZsYWcgYSBsYSBwYXJ0aWNp8yBNSU5PUiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNDkKK21zZ2lkICJ0b2dnbGUiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNTIKK21zZ2lkICIiCisidG9nZ2xlIFtOVU1CRVIgW0ZMQUddXSAgICAgICAgICAgICAgICAgICB0b2dnbGUgdGhlIHN0YXRlIG9mIEZMQUcgb24gIgorInBhcnRpdGlvbiBOVU1CRVIiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNTgKKyMsIGZ1enp5Cittc2dpZCAidW5pdCIKK21zZ3N0ciAicXVpdCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNjEKKyMsIGZ1enp5Cittc2dpZCAidW5pdCBVTklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgdGhlIGRlZmF1bHQgdW5pdCB0byBVTklUIgorbXNnc3RyICJxdWl0ICAgICAgICAgICAgICAgICAgICAgICAgICBzdXJ0IGRlbCBwcm9ncmFtYSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNjYKK21zZ2lkICJ2ZXJzaW9uIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjY5Cittc2dpZCAiIgorInZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheSB0aGUgdmVyc2lvbiBudW1iZXIgYW5kICIKKyJjb3B5cmlnaHQgaW5mb3JtYXRpb24gb2YgR05VIFBhcnRlZCIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI3MworbXNnaWQgIiIKKyIndmVyc2lvbicgZGlzcGxheXMgY29weXJpZ2h0IGFuZCB2ZXJzaW9uIGluZm9ybWF0aW9uIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyAiCisiY29weSBvZiBHTlUgUGFydGVkXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIzMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstaGxtc3ZdIFtERVZJQ0UgW0NPTU1BTkQgW1BBUkFNRVRFUlNdXS4uLl1cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjM3OQorbXNnaWQgIk5vIGRldmljZSBmb3VuZCIKK21zZ3N0ciAiTm8gcydoYSB0cm9iYXQgZWwgZGlzcG9zaXRpdSIKKworIzogcGFydGVkL3BhcnRlZC5jOjI0MTIKK21zZ2lkICJXQVJOSU5HOiBZb3UgYXJlIG5vdCBzdXBlcnVzZXIuICBXYXRjaCBvdXQgZm9yIHBlcm1pc3Npb25zLiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjQ1MAorIywgZnV6enkKK21zZ2lkICJZb3UgbWF5IG5lZWQgdG8gdXBkYXRlIC9ldGMvZnN0YWIuXG4iCittc2dzdHIgIk5vIHVzIG9ibGlkZXUgZCdhY3R1YWxpdHphciAvZXRjL2ZzdGFiIHNpIGNhbC5cbiIKKworIzogcGFydGVkL3VpLmM6MTYwCittc2dpZCAiV2VsY29tZSB0byBHTlUgUGFydGVkISBUeXBlICdoZWxwJyB0byB2aWV3IGEgbGlzdCBvZiBjb21tYW5kcy5cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzoxNjMKKyMsIGZ1enp5Cittc2dpZCAiIgorIlVzYWdlOiBwYXJ0ZWQgW09QVElPTl0uLi4gW0RFVklDRSBbQ09NTUFORCBbUEFSQU1FVEVSU10uLi5dLi4uXVxuIgorIkFwcGx5IENPTU1BTkRzIHdpdGggUEFSQU1FVEVSUyB0byBERVZJQ0UuICBJZiBubyBDT01NQU5EKHMpIGFyZSBnaXZlbiwgcnVuICIKKyJpblxuIgorImludGVyYWN0aXZlIG1vZGUuXG4iCittc2dzdHIgIiIKKyLaczogcGFydGVkIFtPUENJ010uLi4gW0RJU1BPU0lUSVUgW09SRFJFIFtQQVJBTUVUUkVTXS4uLl0uLi5dXG4iCisiQXBsaWNhIGxlcyBPUkRSRVMgYW1iIFBBUkFNRVRSRVMgYWwgRElTUE9TSVRJVS4gIFNpIG5vIHMnZXNwZWNpZmlxdWVuICIKKyJPUkRSRVMsIHMnZXhlY3V0YSBlblxuIgorIm1vZGUgaW50ZXJhY3RpdS5cbiIKKworIzogcGFydGVkL3VpLmM6MTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJcbiIKKyJZb3UgZm91bmQgYSBidWcgaW4gR05VIFBhcnRlZCEgSGVyZSdzIHdoYXQgeW91IGhhdmUgdG8gZG86XG4iCisiXG4iCisiRG9uJ3QgcGFuaWMhIFRoZSBidWcgaGFzIG1vc3QgbGlrZWx5IG5vdCBhZmZlY3RlZCBhbnkgb2YgeW91ciBkYXRhLlxuIgorIkhlbHAgdXMgdG8gZml4IHRoaXMgYnVnIGJ5IGRvaW5nIHRoZSBmb2xsb3dpbmc6XG4iCisiXG4iCisiQ2hlY2sgd2hldGhlciB0aGUgYnVnIGhhcyBhbHJlYWR5IGJlZW4gZml4ZWQgYnkgY2hlY2tpbmdcbiIKKyJ0aGUgbGFzdCB2ZXJzaW9uIG9mIEdOVSBQYXJ0ZWQgdGhhdCB5b3UgY2FuIGZpbmQgYXQ6XG4iCisiXG4iCisiXHRodHRwOi8vZnRwLmdudS5vcmcvZ251L3BhcnRlZC9cbiIKKyJcbiIKKyJQbGVhc2UgY2hlY2sgdGhpcyB2ZXJzaW9uIHByaW9yIHRvIGJ1ZyByZXBvcnRpbmcuXG4iCisiXG4iCisiSWYgdGhpcyBoYXMgbm90IGJlZW4gZml4ZWQgeWV0IG9yIGlmIHlvdSBkb24ndCBrbm93IGhvdyB0byBjaGVjayxcbiIKKyJwbGVhc2UgdmlzaXQgdGhlIEdOVSBQYXJ0ZWQgd2Vic2l0ZTpcbiIKKyJcbiIKKyJcdGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9wYXJ0ZWRcbiIKKyJcbiIKKyJmb3IgZnVydGhlciBpbmZvcm1hdGlvbi5cbiIKKyJcbiIKKyJZb3VyIHJlcG9ydCBzaG91bGQgY29udGFpbiB0aGUgdmVyc2lvbiBvZiB0aGlzIHJlbGVhc2UgKCVzKVxuIgorImFsb25nIHdpdGggdGhlIGVycm9yIG1lc3NhZ2UgYmVsb3csIHRoZSBvdXRwdXQgb2ZcbiIKKyJcbiIKKyJcdHBhcnRlZCBERVZJQ0UgdW5pdCBjbyBwcmludCB1bml0IHMgcHJpbnRcbiIKKyJcbiIKKyJhbmQgdGhlIGZvbGxvd2luZyBoaXN0b3J5IG9mIGNvbW1hbmRzIHlvdSBlbnRlcmVkLlxuIgorIkFsc28gaW5jbHVkZSBhbnkgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB5b3VyIHNldHVwIHlvdVxuIgorImNvbnNpZGVyIGltcG9ydGFudC5cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzoyODQKK21zZ2lkICIiCisiXG4iCisiQ29tbWFuZCBIaXN0b3J5OlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjM2NgorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogU0VHVl9NQVBFUlIgKEFkZHJlc3Mgbm90IG1hcHBlZCB0byBvYmplY3QpXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6MzcyCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBTRUdWX0FDQ0VSUiAoSW52YWxpZCBwZXJtaXNzaW9ucyBmb3IgbWFwcGVkIG9iamVjdClcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzozNzcKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEEgZ2VuZXJhbCBTSUdTRUdWIHNpZ25hbCB3YXMgZW5jb3VudGVyZWQuXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDEwCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfSU5URElWIChJbnRlZ2VyOiBkaXZpZGUgYnkgemVybykiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDE1Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfSU5UT1ZGIChJbnRlZ2VyOiBvdmVyZmxvdykiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDIwCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxURElWIChGbG9hdDogZGl2aWRlIGJ5IHplcm8pIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQyNQorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0ZMVE9WRiAoRmxvYXQ6IG92ZXJmbG93KSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0MzAKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRVTkQgKEZsb2F0OiB1bmRlcmZsb3cpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQzNQorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0ZMVFJFUyAoRmxvYXQ6IGluZXhhY3QgcmVzdWx0KSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0NDAKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRJTlYgKEZsb2F0OiBpbnZhbGlkIG9wZXJhdGlvbikiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDQ1Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxUU1VCIChGbG9hdDogc3Vic2NyaXB0IG91dCBvZiByYW5nZSkiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDUwCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBBIGdlbmVyYWwgU0lHRlBFIHNpZ25hbCB3YXMgZW5jb3VudGVyZWQuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQ4MworbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX0lMTE9QQyAoSWxsZWdhbCBPcGNvZGUpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQ4OAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX0lMTE9QTiAoSWxsZWdhbCBPcGVyYW5kKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0OTMKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9JTExBRFIgKElsbGVnYWwgYWRkcmVzc2luZyBtb2RlKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0OTgKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9JTExUUlAgKElsbGVnYWwgVHJhcCkiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NTAzCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfUFJWT1BDIChQcml2aWxlZ2VkIE9wY29kZSkiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NTA4Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfUFJWUkVHIChQcml2aWxlZ2VkIFJlZ2lzdGVyKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo1MTMKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9DT1BST0MgKENvcHJvY2Vzc29yIEVycm9yKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo1MTgKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9CQURTVEsgKEludGVybmFsIFN0YWNrIEVycm9yKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo1MjMKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEEgZ2VuZXJhbCBTSUdJTEwgc2lnbmFsIHdhcyBlbmNvdW50ZXJlZC4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6MTAyNAorbXNnaWQgIkV4cGVjdGluZyBhIHBhcnRpdGlvbiBudW1iZXIuIgorbXNnc3RyICJTJ2VzcGVyYXZhIHVuIG36bWVybyBkZSBwYXJ0aWNp8y4iCisKKyM6IHBhcnRlZC91aS5jOjEwMzMKK21zZ2lkICJQYXJ0aXRpb24gZG9lc24ndCBleGlzdC4iCittc2dzdHIgIkxhIHBhcnRpY2nzIG5vIGV4aXN0ZWl4LiIKKworIzogcGFydGVkL3VpLmM6MTA1MworbXNnaWQgIkV4cGVjdGluZyBhIGZpbGUgc3lzdGVtIHR5cGUuIgorbXNnc3RyICJTJ2VzcGVyYXZhIHVuIHRpcHVzIGRlIHNpc3RlbWEgZGUgZml0eGVycy4iCisKKyM6IHBhcnRlZC91aS5jOjEwNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBmaWxlIHN5c3RlbSB0eXBlIFwiJXNcIi4iCittc2dzdHIgIlRpcHVzIGRlIHNpc3RlbWEgZGUgZml0eGVycyBkZXNjb25lZ3V0IFwiJXNcIi4iCisKKyM6IHBhcnRlZC91aS5jOjEwODAKK21zZ2lkICJFeHBlY3RpbmcgYSBkaXNrIGxhYmVsIHR5cGUuIgorbXNnc3RyICJTJ2VzcGVyYXZhIHVuIHRpcHVzIGRlIGV0aXF1ZXRhIGRlIGRpY3MuIgorCisjOiBwYXJ0ZWQvdWkuYzoxMTc4Cittc2dpZCAiQ2FuJ3QgY3JlYXRlIGFueSBtb3JlIHBhcnRpdGlvbnMuIgorbXNnc3RyICJObyBlcyBwb3QgY3JlYXIgY2FwIG3pcyBwYXJ0aWNp8y4iCisKKyM6IHBhcnRlZC91aS5jOjExODgKK21zZ2lkICJFeHBlY3RpbmcgYSBwYXJ0aXRpb24gdHlwZS4iCittc2dzdHIgIlMnZXNwZXJhdmEgdW4gdGlwdXMgZGUgcGFydGljafMuIgorCisjOiBwYXJ0ZWQvdWkuYzoxMzE1Cittc2dpZCAib24iCittc2dzdHIgIm9uIgorCisjOiBwYXJ0ZWQvdWkuYzoxMzE2Cittc2dpZCAib2ZmIgorbXNnc3RyICJvZmYiCisKKyM6IHBhcnRlZC91aS5jOjE0MzEKK21zZ2lkICJPUFRJT05zOiIKK21zZ3N0ciAiT1BDSU9OUzoiCisKKyM6IHBhcnRlZC91aS5jOjE0MzYKK21zZ2lkICJDT01NQU5EczoiCittc2dzdHIgIk9SRFJFUzoiCisKKyM6IHBhcnRlZC91aS5jOjE0NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNpbmcgJXNcbiIKK21zZ3N0ciAiVXRpbGl0emFudCAlc1xuIgorCisjOiBwYXJ0ZWQvdWkuYzoxNTE5Cittc2dpZCAiVGhpcyBjb21tYW5kIGRvZXMgbm90IG1ha2Ugc2Vuc2UgaW4gbm9uLWludGVyYWN0aXZlIG1vZGUuXG4iCittc2dzdHIgIiIKKworI34gbXNnaWQgIndoZXJlIG5lY2Vzc2FyeSwgcHJvbXB0cyBmb3IgdXNlciBpbnRlcnZlbnRpb24iCisjfiBtc2dzdHIgInF1YW4g6XMgbmVjZXNzYXJpLCBwcmVndW50YSBhIGwndXN1YXJpIgorCisjfiBtc2dpZCAiIgorI34gIlRoZSBzZWN0b3Igc2l6ZSBvbiAlcyBpcyAlZCBieXRlcy4gIFBhcnRlZCBpcyBrbm93biBub3QgdG8gd29yayBwcm9wZXJseSAiCisjfiAid2l0aCBkcml2ZXMgd2l0aCBzZWN0b3Igc2l6ZXMgb3RoZXIgdGhhbiAlZCBieXRlcyIKKyN+IG1zZ3N0ciAiIgorI34gIkxhIG1pZGEgZGVsIHNlY3RvciBhICVzIOlzIGRlICVkIGJ5dGVzLiBQYXJ0ZWQgbm8gZnVuY2lvbmFy4CBjb3JyZWN0YW1lbnQgIgorI34gImFtYiBkaXNjcyBkJ3VuYSBtaWRhIGRlIHNlY3RvciBkaWZlcmVudCBkZSAlZCBieXRlcyIKKworI34gbXNnaWQgIkNvdWxkIG5vdCByZWFkIGdlb21ldHJ5IG9mICVzIC0gJXMuIgorI34gbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGxsZWdpciBsYSBnZW9tZXRyaWEgZGUgJXMgLSAlcyIKKworI34gbXNnaWQgIkRldmljZSAlcyBoYXMgZG9kZ2V5IGdlb21ldHJ5LiIKKyN+IG1zZ3N0ciAiRWwgZGlzcG9zaXRpdSAlcyB06SB1bmEgZ2VvbWV0cmlhIGluY29ycmVjdGUuIgorCisjfiBtc2dpZCAiSURFIgorI34gbXNnc3RyICJJREUiCisKKyN+IG1zZ2lkICJTQ1NJIgorI34gbXNnc3RyICJTQ1NJIgorCisjfiBtc2dpZCAiRGV2aWNlICVzIGlzIG5laXRoZXIgYSBTQ1NJIG5vciBJREUgZHJpdmUuIgorI34gbXNnc3RyICJFbCBkaXNwb3NpdGl1ICVzIG5vIOlzIG5pIFNDU0kgbmkgSURFIgorCisjfiBtc2dpZCAiRXJyb3IgcmVhZGluZyAlcyAoJXMpIHRvIGRldGVybWluZSBpZiBwYXJ0aXRpb24gaXMgbW91bnRlZC4iCisjfiBtc2dzdHIgIkVycm9yIGFsIGxsZWdpciAlcyAoJXMpIHBlciBkZXRlcm1pbmFyIHNpIGxhIHBhcnRpY2nzIGVzdOAgbXVudGFkYS4iCisKKyN+IG1zZ2lkICIiCisjfiAiVGhlIHBhcnRpdGlvbiB0YWJsZSBvbiAlcyBpcyBpbmNvbnNpc3RlbnQuICBUaGVyZSBhcmUgbWFueSByZWFzb25zIHdoeSAiCisjfiAidGhpcyBtaWdodCBiZSB0aGUgY2FzZS4gIEhvd2V2ZXIsIHRoZSBtb3N0IGxpa2VseSByZWFzb24gaXMgdGhhdCBMaW51eCAiCisjfiAiZGV0ZWN0ZWQgdGhlIEJJT1MgZ2VvbWV0cnkgZm9yICVzIGluY29ycmVjdGx5LiAgR05VIFBhcnRlZCBzdXNwZWN0cyB0aGUgIgorI34gInJlYWwgZ2VvbWV0cnkgc2hvdWxkIGJlICVkLyVkLyVkIChub3QgJWQvJWQvJWQpLiAgWW91IHNob3VsZCBjaGVjayB3aXRoICIKKyN+ICJ5b3VyIEJJT1MgZmlyc3QsIGFzIHRoaXMgbWF5IG5vdCBiZSBjb3JyZWN0LiAgWW91IGNhbiBpbmZvcm0gTGludXggYnkgIgorI34gImFkZGluZyB0aGUgcGFyYW1ldGVyICVzPSVkLCVkLCVkIHRvIHRoZSBjb21tYW5kIGxpbmUuICBTZWUgdGhlIExJTE8gb3IgIgorI34gIkdSVUIgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gIElmIHlvdSB0aGluayBQYXJ0ZWQncyBzdWdnZXN0ZWQgIgorI34gImdlb21ldHJ5IGlzIGNvcnJlY3QsIHlvdSBtYXkgc2VsZWN0IElnbm9yZSB0byBjb250aW51ZSAoYW5kIGZpeCBMaW51eCAiCisjfiAibGF0ZXIpLiAgT3RoZXJ3aXNlLCBzZWxlY3QgQ2FuY2VsIChhbmQgZml4IExpbnV4IGFuZC9vciB0aGUgQklPUyBub3cpLiIKKyN+IG1zZ3N0ciAiIgorI34gIkxhIHRhdWxhIGRlIHBhcnRpY2lvbnMgYSAlcyDpcyBpbmNvbnNpc3RlbnQuICBIaSBoYSBkaXZlcnNlcyByYW9ucyBwZXIgIgorI34gImxlcyBxdWFscyBlcyBwb3QgZG9uYXIgYXF1ZXN0IGVycm9yLiAgUGVy8iBsYSBt6XMgY29t+iBzb2wgc2VyIHF1ZSBMaW51eCAiCisjfiAiaGEgZGV0ZWN0YXQgbGEgZ2VvbWV0cmlhIGRlIGxhIEJJT1MgZGUgJXMgaW5jb3JyZWN0YW1lbnQuIEdOVSBQYXJ0ZWQgY3JldSAiCisjfiAicXVlIGxhIGF1dOhudGljYSBnZW9tZXRyaWEgaGEgZGUgc2VyICVkLyVkLyVkICggaSBubyAlZC8lZC8lZCkuIFByaW1lciAiCisjfiAicydoYSBkZSBjb21wcm92YXIgbGEgQklPUyBxdWUgc2lndWkgY29ycmVjdGEuIEVzIHBvdCBlc3BlY2lmaWNhciBhIExpbnV4ICIKKyN+ICJhZmVnaW50IGVsIHBhcuBtZXRyZSAlcz0lZCwlZCwlZCBhIGxhIGztbmlhIGRlIGNvbWFuZGVzLiBWZWlldSBsYSAiCisjfiAiZG9jdW1lbnRhY2nzIGRlIExJTE8gbyBHUlVCIHBlciBt6XMgaW5mb3JtYWNp8y4gU2kgZXMgY3JldSBxdWUgbGEgIgorI34gImdlb21ldHJpYSBxdWUgc3VnZ2VyZWl4IFBhcnRlZCDpcyBjb3JyZWN0YSwgc2VsZWNjaW9uZXUgSWdub3JhciBwZXIgIgorI34gImNvbnRpbnVhciAoIGkgYXJyZWdsZXUgTGludXggZGVzcHLpcykuIFNpIG5vLCBzZWxlY2Npb25ldSBDYW5jZWy3bGFyICggaSAiCisjfiAiYXJyZWdsZXUgTGludXggaS9vIGxhIEJJT1MgYXJhIG1hdGVpeCkuIgorCisjfiBtc2dpZCAiIgorI34gIlRoZSBwYXJ0aXRpb24gdGFibGUgb24gJXMgaXMgaW5jb25zaXN0ZW50LiAgVGhlcmUgYXJlIG1hbnkgcmVhc29ucyB3aHkgIgorI34gInRoaXMgbWlnaHQgYmUgdGhlIGNhc2UuICBPZnRlbiwgdGhlIHJlYXNvbiBpcyB0aGF0IExpbnV4IGRldGVjdGVkIHRoZSAiCisjfiAiQklPUyBnZW9tZXRyeSBpbmNvcnJlY3RseS4gIEhvd2V2ZXIsIHRoaXMgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHRoZSBjYXNlICIKKyN+ICJoZXJlLiAgSXQgaXMgc2FmZSB0byBpZ25vcmUsYnV0IGlnbm9yaW5nIG1heSBjYXVzZSAoZml4YWJsZSkgcHJvYmxlbXMgIgorI34gIndpdGggc29tZSBib290IGxvYWRlcnMsIGFuZCBtYXkgY2F1c2UgcHJvYmxlbXMgd2l0aCBGQVQgZmlsZSBzeXN0ZW1zLiAgIgorI34gIlVzaW5nIExCQSBpcyByZWNvbW1lbmRlZC4iCisjfiBtc2dzdHIgIiIKKyN+ICJMYSB0YXVsYSBkZSBwYXJ0aWNpb25zIGEgJXMg6XMgaW5jb25zaXN0ZW50LiBIaSBoYSBkaXZlcnNlcyByYW9ucyBwZXIgbGVzICIKKyN+ICJxdWFscyBlcyBwb3QgZG9uYXIgYXF1ZXN0IGVycm9yLiBQZXLyIGxhIG3pcyBjb236IHNvbCBzZXIgcXVlIExpbnV4IGhhICIKKyN+ICJkZXRlY3RhdCBsYSBnZW9tZXRyaWEgZGUgbGEgQklPUyBpbmNvcnJlY3RhbWVudC4gTm8gb2JzdGFudCwgbm8gc2VtYmxhICIKKyN+ICJzZXIgZWwgY2FzIGFxdWkuIEVsIG3pcyBzZWd1ciDpcyBJZ25vcmFyLCBwZXLyIGlnbm9yYW50IHBvdCBjYXVzYXIgIgorI34gInByb2JsZW1lcyAocXVlIGVzIHBvZHJlbiBhcnJlZ2xhcikgZW4gYWxndW5zIGNhcnJlZ2Fkb3JzIGQnYXJyZW5jYWRhIGkgIgorI34gInRhbWLpIHBvdCBkb25hciBwcm9ibGVtZXMgYW1iIHNpc3RlbWVzIGRlIGZpdHhlcnMgRkFULiBFcyByZWNvbWFuYSAiCisjfiAidXRpbGl0emFyIExCQS4iCisKKyN+IG1zZ2lkICIiCisjfiAiVW5hYmxlIHRvIGFsaWduIHBhcnRpdGlvbiBwcm9wZXJseS4gIFRoaXMgcHJvYmFibHkgbWVhbnMgdGhhdCBhbm90aGVyICIKKyN+ICJwYXJ0aXRpb25pbmcgdG9vbCBnZW5lcmF0ZWQgYW4gaW5jb3JyZWN0IHBhcnRpdGlvbiB0YWJsZSwgYmVjYXVzZSBpdCAiCisjfiAiZGlkbid0IGhhdmUgdGhlIGNvcnJlY3QgQklPUyBnZW9tZXRyeS4gIEl0IGlzIHNhZmUgdG8gaWdub3JlLGJ1dCBpZ25vcmluZyAiCisjfiAibWF5IGNhdXNlIChmaXhhYmxlKSBwcm9ibGVtcyB3aXRoIHNvbWUgYm9vdCBsb2FkZXJzLiIKKyN+IG1zZ3N0ciAiIgorI34gIk5vIHMnaGEgcG9ndXQgYWxpbmlhciBsYSBwYXJ0aWNp8yBjb3JyZWN0YW1lbnQuIEFpePMgdm9sIGRpciBxdWUsICIKKyN+ICJwcm9iYWJsZW1lbnQsIHF1ZSB1biBhbHRyZSBnZXN0b3IgZGUgcGFydGljaW9ucyBoYSBnZW5lcmF0IHVuYSB0YXVsYSBkZSAiCisjfiAicGFydGljaW9ucyBpbmNvcnJlY3RhIGphIHF1ZSBubyB06SB1bmEgY29ycmVjdGEgZ2VvbWV0cmlhIGEgbGEgQklPUy4gRWwgIgorI34gIm3pcyBzZWd1ciDpcyBJZ25vcmFyLCBwZXLyIHNpIHMnaWdub3JhIHBvdCBjYXVzYXIgcHJvYmxlbWVzIChxdWUgZXMgIgorI34gInBvZHJlbiBhcnJlZ2xhcilhbWIgYWxndW5zIGNhcnJlZ2Fkb3JzIGQnYXJyZW5jYWRhLiIKKworI34gbXNnaWQgIkF0dGVtcHQgdG8gcmVhZCBzZWN0b3JzICVsZC0lbGQgb3V0c2lkZSBvZiBwYXJ0aXRpb24gb24gJXMiCisjfiBtc2dzdHIgIlMnaGEgaW50ZW50YXQgbGxlZ2lyIHNlY3RvcnMgJWxkLSVsZCBmb3JhIGRlIGxhIHBhcnRpY2nzIGEgJXMiCisKKyN+IG1zZ2lkICIiCisjfiAiVGhpcyBleHQyIGZpbGVzeXN0ZW0gaGFzIGEgcmF0aGVyIHN0cmFuZ2UgbGF5b3V0ISAgUGFydGVkIGNhbid0IHJlc2l6ZSAiCisjfiAidGhpcyAoeWV0KS4iCisjfiBtc2dzdHIgIiIKKyN+ICJBcXVlc3Qgc2lzdGVtYSBkZSBmaXR4ZXJzIGV4dDIgdOkgdW4gZGlzc2VueSBiYXN0YW50IGV4dHJhbnkhIFBhcnRlZCAiCisjfiAiKGVuY2FyYSkgbm8gZWwgcG90IHJlZGltZW5zaW9uYXIuIgorCisjfiBtc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGludmFsaWQgc2lnbmF0dXJlIGZvciBhIEZBVCBmaWxlIHN5c3RlbXMuIgorI34gbXNnc3RyICIiCisjfiAiRWwgc2lzdGVtYSBkZSBmaXR4ZXJzIHTpIHVuYSBzaWduYXR1cmEgaW524GxpZGEgcGVyIGEgdW4gc2lzdGVtYSBkZSAiCisjfiAiZml0eGVycyBGQVQuIgorCisjfiBtc2dpZCAiIgorI34gIlRoZSBGQVRzIGFyZW4ndCBiaWcgZW5vdWdoIHRvIGRlc2NyaWJlIGFsbCBjbHVzdGVycyEgIEVhY2ggRkFUIGlzICVkICIKKyN+ICJzZWN0b3JzLiAgVGhlcmUgYXJlICVkIGNsdXN0ZXJzLCB3aGljaCB3b3VsZCByZXF1aXJlIGVhY2ggRkFUIHRvIGJlICVkICIKKyN+ICJzZWN0b3JzLiAgVGhpcyBpcyBSRUFMTFkgd2VpcmQuICBZb3UgbWlnaHQgd2FudCB0byB3cml0ZSB1cyBhbiBlbWFpbDogYnVnLSIKKyN+ICJwYXJ0ZWRAZ251Lm9yZyIKKyN+IG1zZ3N0ciAiIgorI34gIkxlcyBGQVRzIG5vIHPzbiBlbCBzdWZpY2llbnRtZW50IGdyYW5zIHBlciBkZXNjcml1cmUgdG90cyBlbHMgY2z6c3RlcnMhICAiCisjfiAiQ2FkYSBGQVQg6XMgZGUgJWQgc2VjdG9ycy4gIEhpIGhhICVkIGNs+nN0ZXJzLCBxdWUgdm9sIGRpciBxdWUgY2FkYSBGQVQgIgorI34gInRpbmd1aSAlZCBzZWN0b3JzLiAgQWl48iDpcyBtb2x0IGV4dHJhbnkuIEVucyBwb2RyaWVzIGVzY3JpdXJlIHVuIGUtbWFpbCAiCisjfiAiYTogYnVnLXBhcnRlZEBnbnUub3JnIgorCisjfiBtc2dpZCAiU1RBUlQgYW5kIEVORCBhcmUgaW4gbWVnYWJ5dGVzXG4iCisjfiBtc2dzdHIgIklOSUNJIGkgRkkgc/NuIGVuIG1lZ2FieXRlc1xuIgorCisjfiBtc2dpZCAiUGFydGl0aW9uIGlzIGJlaW5nIHVzZWQuIgorI34gbXNnc3RyICJMYSBwYXJ0aWNp8yBzJ2VzdOAgdXRpbGl0emFudC4iCisKKyN+IG1zZ2lkICIiCisjfiAiWW91IHJlcXVlc3RlZCB0byBjcmVhdGUgYSBwYXJ0aXRpb24gYXQgJS4zZi0lLjNmTWIuIFRoZSBjbG9zZXN0IFBhcnRlZCAiCisjfiAiY2FuIG1hbmFnZSBpcyAlLjNmLSUuM2ZNYi4iCisjfiBtc2dzdHIgIiIKKyN+ICJIYXMgZGVtYW5hdCBkZSBjcmVhciB1bmEgcGFydGljafMgYSAlLjNmLSUuM2ZNYi4gRWwgbelzIHByb3BlciBxdWUgUGFydGVkICIKKyN+ICJwb3QgbWFuZWdhciDpcyAlLjNmLSUuM2ZNYi4iCisKKyN+IG1zZ2lkICIiCisjfiAiWW91IHJlcXVlc3RlZCB0byBtb3ZlIHRoZSBwYXJ0aXRpb24gdG8gJS4zZi0lLjNmTWIuIFRoZSBjbG9zZXN0IFBhcnRlZCAiCisjfiAiY2FuIG1hbmFnZSBpcyAlLjNmLSUuM2ZNYi4iCisjfiBtc2dzdHIgIiIKKyN+ICJIYXMgZGVtYW5hdCBkZSBtb3VyZSB1bmEgcGFydGljafMgYSAlLjNmLSUuM2ZNYi4gRWwgbelzIHByb3BlciBxdWUgUGFydGVkICIKKyN+ICJwb3QgbWFuZWdhciDpcyAlLjNmLSUuM2ZNYi4iCisKKyN+IG1zZ2lkICJEaXNrIGdlb21ldHJ5IGZvciAlczogMC4wMDAtJS4zZiBtZWdhYnl0ZXNcbiIKKyN+IG1zZ3N0ciAiTGEgZ2VvbWV0cmlhIGRlbCBkaXNjIHBlciAlczogMC4wMDAtJS4zZiBtZWdhYnl0ZXNcbiIKKworI34gbXNnaWQgIkRpc2sgbGFiZWwgdHlwZTogJXNcbiIKKyN+IG1zZ3N0ciAiVGlwdXMgZCdldGlxdWV0YTogJXNcbiIKKworI34gbXNnaWQgIk1pbm9yICAgIFN0YXJ0ICAgICAgIEVuZCAgICAgIgorI34gbXNnc3RyICJNaW5vciAgICBJbmljaSAgICAgICBGaSAgICAgIgorCisjfiBtc2dpZCAiVHlwZSAgICAgICIKKyN+IG1zZ3N0ciAiVGlwdXMgICAgICAiCisKKyN+IG1zZ2lkICJGaWxlc3lzdGVtICAiCisjfiBtc2dzdHIgIlNpc3RlbWEgZGUgZml0eGVycyAgIgorCisjfiBtc2dpZCAiTmFtZSAgICAgICAgICAgICAgICAgICIKKyN+IG1zZ3N0ciAiTm9tICAgICAgICAgICAgICAgICAgICIKKworI34gbXNnaWQgIiIKKyN+ICJZb3UgcmVxdWVzdGVkIHRvIHJlc2l6ZSB0aGUgcGFydGl0aW9uIHRvICUuM2YtJS4zZk1iLiBUaGUgY2xvc2VzdCBQYXJ0ZWQgIgorI34gImNhbiBtYW5hZ2UgaXMgJS4zZi0lLjNmTWIuIgorI34gbXNnc3RyICIiCisjfiAiSGFzIGRlbWFuYXQgcmVkaW1lbnNpb25hciB1bmEgcGFydGljafMgYSAlLjNmLSUuM2ZNYi4gRWwgbelzIHByb3BlciBxdWUgIgorI34gIlBhcnRlZCBwb3QgbWFuZWdhciDpcyAlLjNmLSUuM2ZNYi4iCisKKyN+IG1zZ2lkICJyZXNpemUgTUlOT1IgU1RBUlQgRU5EICAgICAgICByZXNpemUgZmlsZXN5c3RlbSBvbiBwYXJ0aXRpb24gTUlOT1IiCisjfiBtc2dzdHIgIiIKKyN+ICJyZXNpemUgTUlOT1IgSU5JQ0kgRkkgICAgICAgIHJlZGltZW5zaW9uYSBlbCBzaXN0ZW1hIGRlIGZpdHhlcnMgYSBsYSAiCisjfiAicGFydGljafMgTUlOT1IiCisKKyN+IG1zZ2lkICIiCisjfiAiWW91IGZvdW5kIGEgYnVnIGluIEdOVSBQYXJ0ZWQuICBQbGVhc2UgZW1haWwgYSBidWcgcmVwb3J0IHRvIGJ1Zy0iCisjfiAicGFydGVkQGdudS5vcmcgY29udGFpbmluZyB0aGUgdmVyc2lvbiAoJXMpLCBhbmQgdGhlIGZvbGxvd2luZyBtZXNzYWdlOlxuIgorI34gbXNnc3RyICIiCisjfiAiSGFzIHRyb2JhdCB1biBidWcgYSBHTlUgUGFydGVkLiBTaS11cy1wbGF1LCBlbnZpYS1ucyB1biBlLW1haWwgYW1iIHVuICIKKyN+ICJpbmZvcm1lIGEgYnVnLXBhcnRlZEBnbnUub3JnIHF1ZSBpbmNsb2d1aSBsYSB2ZXJzafMgKCVzKSwgaSBlbCBzZWf8ZW50ICIKKyN+ICJtaXNzYXRnZTpcbiIKKworI34gbXNnaWQgIiIKKyN+ICIgIFlvdSBoYXZlIFdpbmRvd3MgRkFUIHBhcnRpdGlvbihzKSB0aGF0IGFyZSBub3QgdXNpbmcgTEJBLiAgSWYgeW91ciBCSU9TICIKKyN+ICJzdXBwb3J0cyBMQkEsIHRoZW4geW91IHNob3VsZCBzd2l0Y2ggdG8gTEJBIGJ5IHNldHRpbmcgdGhlIExCQSBmbGFnIG9uICIKKyN+ICJhbGwgRkFUIHBhcnRpdGlvbnMuICBPdGhlcndpc2UsIG1ha2Ugc3VyZSB0aGUgb3BlcmF0aW5nIHN5c3RlbSBhbmQgdGhlICIKKyN+ICJCSU9TIGhhdmUgdGhlIHNhbWUgZ2VvbWV0cnkgYmVmb3JlIHJlc2l6aW5nIGFueSBGQVQgcGFydGl0aW9ucy4iCisjfiBtc2dzdHIgIiIKKyN+ICIgIFRlbnMgcGFydGljaW9uKHMpIFdpbmRvd3MgRkFUIHF1ZSBubyBmYW4gc2VydmlyIExCQS4gU2kgbGEgdGV2YSBCSU9TICIKKyN+ICJzdXBvcnRhIExCQSwgbGxhdm9ycyBoYXVyaWVzIGQnYWN0aXZhciBlbCBmbGFnIExCQSBhIHRvdGVzIGxlcyBwYXJ0aWNpb25zICIKKyN+ICJGQVQuIEQnYWx0cmEgbWFuZXJhLCBhc3NlZ3VyYSd0IHF1ZSBlbCBzaXN0ZW1hIG9wZXJhdGl1IGkgbGEgQklPUyB0ZW5lbiAiCisjfiAibGEgbWF0ZWl4YSBnZW9tZXRyaWEgYWJhbnMgZGUgY2FudmlhciBkZSBtaWRhIHF1YWxzZXJ2b2wgcGFydGljafMgRkFULiIKKworI34gbXNnaWQgIiIKKyN+ICJUaGUgb3BlcmF0aW5nIHN5c3RlbSB0aGlua3MgdGhlIGdlb21ldHJ5IG9uICVzIGlzICVkLyVkLyVkLiAgVGhlcmVmb3JlLCAiCisjfiAiY3lsaW5kZXIgMTAyNCBlbmRzIGF0ICUuM2ZNLiVzIgorI34gbXNnc3RyICIiCisjfiAiRWwgc2lzdGVtYSBvcGVyYXRpdSBjcmV1IHF1ZSBsYSBnZW9tZXRyaWEgYSAlcyDpcyAlZC8lZC8lZC4gIEVsIGNpbGluZHJlICIKKyN+ICIxMDI0IGFjYWJhIGEgJS4zZk0uJXMiCisKKyN+IG1zZ2lkICJUaGUgb3BlcmF0aW5nIHN5c3RlbSB0aGlua3MgdGhlIGdlb21ldHJ5IG9uICVzIGlzICVkLyVkLyVkLiVzIgorI34gbXNnc3RyICJFbCBzaXN0ZW1hIG9wZXJhdGl1IGNyZXUgcXVlIGxhIGdlb21ldHJpYSBhICVzIOlzICVkLyVkLyVkLiVzIgpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L3BvL2NzLmdtbyBiL3BhcnRlZC0xLjguNy9wby9jcy5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA0MWY3NAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9wby9jcy5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L3BvL2NzLnBvIGIvcGFydGVkLTEuOC43L3BvL2NzLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNWYxZjMKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvcG8vY3MucG8KQEAgLTAsMCArMSwzMzMxIEBACisjIEN6ZWNoIHRyYW5zbGF0aW9uIG9mIHBhcnRlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDAzIE1pbG9zbGF2IFRybWFjIDxtaXRyQHZvbG55LmN6PgorIyBNaWxvc2xhdiBUcm1hYyA8bWl0ckB2b2xueS5jej4sIDIwMDMuCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBwYXJ0ZWQgMS42LjZcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogYnVnLXBhcnRlZEBnbnUub3JnXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMDctMDUtMDkgMTc6MDItMDQwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDMtMDgtMDEgMDM6MDMrMDIwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogTWlsb3NsYXYgVHJtYWMgPG1pdHJAdm9sbnkuY3o+XG4iCisiTGFuZ3VhZ2UtVGVhbTogQ3plY2ggPHRyYW5zbGF0aW9uLXRlYW0tY3NAbGlzdHMuc291cmNlZm9yZ2UubmV0PlxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorCisjOiBsaWIvY2xvc2VvdXQuYzo3NAorbXNnaWQgIndyaXRlIGVycm9yIgorbXNnc3RyICIiCisKKyM6IGxpYi9lcnJvci5jOjEyNQorIywgZnV6enkKK21zZ2lkICJVbmtub3duIHN5c3RlbSBlcnJvciIKK21zZ3N0ciAiTmV6bsOhbcO9IHR5cCBzeXN0w6ltdSBzb3Vib3LFryBcIiVzXCIuIgorCisjOiBsaWIvZ2V0b3B0LmM6NTMxIGxpYi9nZXRvcHQuYzo1NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiBgJXMnIGlzIGFtYmlndW91c1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo1ODAgbGliL2dldG9wdC5jOjU4NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIGAtLSVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjU5MyBsaWIvZ2V0b3B0LmM6NTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYCVjJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6NjQxIGxpYi9nZXRvcHQuYzo2NjAgbGliL2dldG9wdC5jOjk3NiBsaWIvZ2V0b3B0LmM6OTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYCVzJyByZXF1aXJlcyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo2OTggbGliL2dldG9wdC5jOjcwMQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5yZWNvZ25pemVkIG9wdGlvbiBgLS0lcydcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6NzA5IGxpYi9nZXRvcHQuYzo3MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVucmVjb2duaXplZCBvcHRpb24gYCVjJXMnXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjc2NCBsaWIvZ2V0b3B0LmM6NzY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbGxlZ2FsIG9wdGlvbiAtLSAlY1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo3NzMgbGliL2dldG9wdC5jOjc3NgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBvcHRpb24gLS0gJWNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6ODI4IGxpYi9nZXRvcHQuYzo4NDQgbGliL2dldG9wdC5jOjEwNDggbGliL2dldG9wdC5jOjEwNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCAtLSAlY1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo4OTcgbGliL2dldG9wdC5jOjkxMworIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIGAtVyAlcycgaXMgYW1iaWd1b3VzXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjkzNyBsaWIvZ2V0b3B0LmM6OTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYC1XICVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6CisjLiBHZXQgdHJhbnNsYXRpb25zIGZvciBvcGVuIGFuZCBjbG9zaW5nIHF1b3RhdGlvbiBtYXJrcy4KKyMuCisjLiBUaGUgbWVzc2FnZSBjYXRhbG9nIHNob3VsZCB0cmFuc2xhdGUgImAiIHRvIGEgbGVmdAorIy4gcXVvdGF0aW9uIG1hcmsgc3VpdGFibGUgZm9yIHRoZSBsb2NhbGUsIGFuZCBzaW1pbGFybHkgZm9yCisjLiAiJyIuICBJZiB0aGUgY2F0YWxvZyBoYXMgbm8gdHJhbnNsYXRpb24sCisjLiBsb2NhbGVfcXVvdGluZ19zdHlsZSBxdW90ZXMgYGxpa2UgdGhpcycsIGFuZAorIy4gY2xvY2FsZV9xdW90aW5nX3N0eWxlIHF1b3RlcyAibGlrZSB0aGlzIi4KKyMuCisjLiBGb3IgZXhhbXBsZSwgYW4gQW1lcmljYW4gRW5nbGlzaCBVbmljb2RlIGxvY2FsZSBzaG91bGQKKyMuIHRyYW5zbGF0ZSAiYCIgdG8gVSsyMDFDIChMRUZUIERPVUJMRSBRVU9UQVRJT04gTUFSSyksIGFuZAorIy4gc2hvdWxkIHRyYW5zbGF0ZSAiJyIgdG8gVSsyMDFEIChSSUdIVCBET1VCTEUgUVVPVEFUSU9OCisjLiBNQVJLKS4gIEEgQnJpdGlzaCBFbmdsaXNoIFVuaWNvZGUgbG9jYWxlIHNob3VsZCBpbnN0ZWFkCisjLiB0cmFuc2xhdGUgdGhlc2UgdG8gVSsyMDE4IChMRUZUIFNJTkdMRSBRVU9UQVRJT04gTUFSSykgYW5kCisjLiBVKzIwMTkgKFJJR0hUIFNJTkdMRSBRVU9UQVRJT04gTUFSSyksIHJlc3BlY3RpdmVseS4KKyMuCisjLiBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIHB1dCBoZXJlLCBwbGVhc2Ugc2VlCisjLiA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9RdW90YXRpb25fbWFyayNHbHlwaHM+CisjLiBhbmQgdXNlIGdseXBocyBzdWl0YWJsZSBmb3IgeW91ciBsYW5ndWFnZS4KKyM6IGxpYi9xdW90ZWFyZy5jOjIyOQorbXNnaWQgImAiCittc2dzdHIgIiIKKworIzogbGliL3F1b3RlYXJnLmM6MjMwCittc2dpZCAiJyIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjEzMQorbXNnaWQgIlN1Y2Nlc3MiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxMzQKK21zZ2lkICJObyBtYXRjaCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjEzNworbXNnaWQgIkludmFsaWQgcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTQwCittc2dpZCAiSW52YWxpZCBjb2xsYXRpb24gY2hhcmFjdGVyIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTQzCittc2dpZCAiSW52YWxpZCBjaGFyYWN0ZXIgY2xhc3MgbmFtZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE0NgorbXNnaWQgIlRyYWlsaW5nIGJhY2tzbGFzaCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE0OQorbXNnaWQgIkludmFsaWQgYmFjayByZWZlcmVuY2UiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNTIKK21zZ2lkICJVbm1hdGNoZWQgWyBvciBbXiIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE1NQorbXNnaWQgIlVubWF0Y2hlZCAoIG9yIFxcKCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE1OAorbXNnaWQgIlVubWF0Y2hlZCBcXHsiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNjEKK21zZ2lkICJJbnZhbGlkIGNvbnRlbnQgb2YgXFx7XFx9IgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTY0Cittc2dpZCAiSW52YWxpZCByYW5nZSBlbmQiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNjcKK21zZ2lkICJNZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTcwCittc2dpZCAiSW52YWxpZCBwcmVjZWRpbmcgcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTczCittc2dpZCAiUHJlbWF0dXJlIGVuZCBvZiByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNzYKK21zZ2lkICJSZWd1bGFyIGV4cHJlc3Npb24gdG9vIGJpZyIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE3OQorbXNnaWQgIlVubWF0Y2hlZCApIG9yIFxcKSIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjY4MAorbXNnaWQgIk5vIHByZXZpb3VzIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvcnBtYXRjaC5jOjcwCittc2dpZCAiXlt5WV0iCittc2dzdHIgIiIKKworIzogbGliL3JwbWF0Y2guYzo3MworbXNnaWQgIl5bbk5dIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBUcmFuc2xhdGUgIihDKSIgdG8gdGhlIGNvcHlyaWdodCBzeW1ib2wKKyMuIChDLWluLWEtY2lyY2xlKSwgaWYgdGhpcyBzeW1ib2wgaXMgYXZhaWxhYmxlIGluIHRoZSB1c2VyJ3MKKyMuIGxvY2FsZS4gIE90aGVyd2lzZSwgZG8gbm90IHRyYW5zbGF0ZSAiKEMpIjsgbGVhdmUgaXQgYXMtaXMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzo2NgorbXNnaWQgIihDKSIKK21zZ3N0ciAiIgorCisjOiBsaWIvdmVyc2lvbi1ldGMuYzo2OAorbXNnaWQgIiIKKyJcbiIKKyJMaWNlbnNlIEdQTHYyKzogR05VIEdQTCB2ZXJzaW9uIDIgb3IgbGF0ZXIgPGh0dHA6Ly9nbnUub3JnL2xpY2Vuc2VzL2dwbC4iCisiaHRtbD5cbiIKKyJUaGlzIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBhcmUgZnJlZSB0byBjaGFuZ2UgYW5kIHJlZGlzdHJpYnV0ZSBpdC5cbiIKKyJUaGVyZSBpcyBOTyBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3LlxuIgorIlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIzogbGliL3ZlcnNpb24tZXRjLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiV3JpdHRlbiBieSAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIzogbGliL3ZlcnNpb24tZXRjLmM6ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiV3JpdHRlbiBieSAlcyBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIldyaXR0ZW4gYnkgJXMsICVzLCBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyJhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6MTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiJXMsIGFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyIlcywgJXMsIGFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzoxMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyIlcywgJXMsICVzLCBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6MTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiJXMsICVzLCAlcywgJXMsXG4iCisiYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjLiBZb3UgY2FuIHVzZSBsaW5lIGJyZWFrcywgZXN0aW1hdGluZyB0aGF0IGVhY2ggYXV0aG9yIG5hbWUgb2NjdXBpZXMKKyMuIGNhLiAxNiBzY3JlZW4gY29sdW1ucyBhbmQgdGhhdCBhIHNjcmVlbiBsaW5lIGhhcyBjYS4gODAgY29sdW1ucy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjEzMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorIiVzLCAlcywgJXMsICVzLFxuIgorIiVzLCBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6MTQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiJXMsICVzLCAlcywgJXMsXG4iCisiJXMsICVzLCBhbmQgb3RoZXJzLlxuIgorbXNnc3RyICIiCisKKyM6IGxpYi94YWxsb2MtZGllLmM6MzUKK21zZ2lkICJtZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzoyMzcKK21zZ2lkICJEaXNrIEltYWdlIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzozMzggbGlicGFydGVkL2FyY2gvZ251LmM6MjYxCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjEyNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igb3BlbmluZyAlczogJXMiCittc2dzdHIgIkNoeWJhIHDFmWkgb3RldsOtcsOhbsOtICVzOiAlcyIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjM0OSBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzoyNzEKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTI4MworIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gb3BlbiAlcyByZWFkLXdyaXRlICglcykuICAlcyBoYXMgYmVlbiBvcGVuZWQgcmVhZC1vbmx5LiIKK21zZ3N0ciAiIgorIk5lbW9odSBvdGV2xZnDrXQgJXMgcHJvIMSNdGVuw60vesOhcGlzICglcykuICVzIGJ5bG8gb3RldsWZZW5vIGplbiBwcm8gxI10ZW7DrS4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzo0MTEgbGlicGFydGVkL2FyY2gvbGludXguYzoxNDMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGR1cmluZyBzZWVrIGZvciByZWFkIG9uICVzIgorbXNnc3RyICIlcyBwxZlpIHNlZWsgcHJvIMSNdGVuw60gJXMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzo0NDQgbGlicGFydGVkL2FyY2gvZ251LmM6NDQ5IGxpYnBhcnRlZC9hcmNoL2dudS5jOjU0OAorIzogbGlicGFydGVkL2FyY2gvZ251LmM6Njc2IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTM5MQorIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxNDY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGR1cmluZyByZWFkIG9uICVzIgorbXNnc3RyICIlcyBwxZlpIMSNdGVuw60gJXMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzo0ODAgbGlicGFydGVkL2FyY2gvZ251LmM6NTA5CisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjE1NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2FuJ3Qgd3JpdGUgdG8gJXMsIGJlY2F1c2UgaXQgaXMgb3BlbmVkIHJlYWQtb25seS4iCittc2dzdHIgIk5lbW9odSB6YXBpc292YXQgbmEgJXMsIHByb3Rvxb5lIGplIG90ZXbFmWVuIGplbiBwcm8gxI10ZW7DrS4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzo0OTYgbGlicGFydGVkL2FyY2gvbGludXguYzoxNTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGR1cmluZyBzZWVrIGZvciB3cml0ZSBvbiAlcyIKK21zZ3N0ciAiJXMgcMWZaSBzZWVrIHBybyB6w6FwaXMgbmEgJXMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzo1MzMgbGlicGFydGVkL2FyY2gvZ251LmM6NTg1IGxpYnBhcnRlZC9hcmNoL2dudS5jOjYzMAorIzogbGlicGFydGVkL2FyY2gvZ251LmM6NzA3IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTUxNworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxNjEyIGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTY4NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkdXJpbmcgd3JpdGUgb24gJXMiCittc2dzdHIgIiVzIHDFmWkgesOhcGlzdSBuYSAlcyIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo2MyBwYXJ0cHJvYmUvcGFydHByb2JlLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeSBgJXMgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogJXMgW09QVElPTl1cbiIKKyIgIG9yOiAgJXMgREVWSUNFIE1JTk9SXG4iCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo3MAorbXNnaWQgIiIKKyJDbGVhciB1bnVzZWQgc3BhY2Ugb24gYSBGQVQgcGFydGl0aW9uIChhIEdOVSBQYXJ0ZWQgdGVzdGluZyB0b29sKS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjc0Cittc2dpZCAiICAgICAgLS1oZWxwICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdFxuIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6NzUKK21zZ2lkICIgICAgICAtLXZlcnNpb24gIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0XG4iCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo3NyBwYXJ0cHJvYmUvcGFydHByb2JlLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJSZXBvcnQgYnVncyB0byA8JXM+LlxuIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6Mjg1CisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBmZXcgYXJndW1lbnRzIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6MjkwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMiCittc2dzdHIgIlDFmcOtbGnFoSBtbm9obyDFoXBhdG7DvWNoIHN0csOhbmVrLiIKKworIzogcGFydHByb2JlL3BhcnRwcm9iZS5jOjE0MQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgW09QVElPTl0gW0RFVklDRV0uLi5cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0cHJvYmUvcGFydHByb2JlLmM6MTQyCittc2dpZCAiIgorIkluZm9ybSB0aGUgT1Mgb2YgcGFydGl0aW9uIHRhYmxlIGNoYW5nZXMuXG4iCisiXG4iCisiICAtZCwgLS1uby11cGRhdGUgIGRvbid0IHVwZGF0ZSB0aGUga2VybmVsXG4iCisiICAtcywgLS1zdW1tYXJ5ICAgIHByaW50IGEgc3VtbWFyeSBvZiBjb250ZW50c1xuIgorIiAgLWgsIC0taGVscCAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdFxuIgorIiAgLXYsIC0tdmVyc2lvbiAgICBvdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdFxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRwcm9iZS9wYXJ0cHJvYmUuYzoxNTAKK21zZ2lkICIiCisiXG4iCisiV2l0aCBubyBERVZJQ0UsIHByb2JlIGFsbCBwYXJ0aXRpb25zLlxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBvcGVuICVzLiIKK21zZ3N0ciAiTmVtb2h1IG90ZXbFmcOtdCAlcy4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjExNAorbXNnaWQgIlVuYWJsZSB0byBwcm9iZSBzdG9yZS4iCittc2dzdHIgIk5lbW9odSBwcm96a291bWF0IMO6bG/Fvm7DvSBwcm9zdG9yLiIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6MzUyCisjLCBmdXp6eQorbXNnaWQgIiIKKyJUaGUgcGFydGl0aW9uIHRhYmxlIGNhbm5vdCBiZSByZS1yZWFkLiAgVGhpcyBtZWFucyB5b3UgbmVlZCB0byByZWJvb3QgYmVmb3JlICIKKyJtb3VudGluZyBhbnkgbW9kaWZpZWQgcGFydGl0aW9ucy4gIFlvdSBhbHNvIG5lZWQgdG8gcmVpbnN0YWxsIHlvdXIgYm9vdCAiCisibG9hZGVyIGJlZm9yZSB5b3UgcmVib290ICh3aGljaCBtYXkgcmVxdWlyZSBtb3VudGluZyBtb2RpZmllZCBwYXJ0aXRpb25zKS4gICIKKyJJdCBpcyBpbXBvc3NpYmxlIGRvIGJvdGggdGhpbmdzISAgU28geW91J2xsIG5lZWQgdG8gYm9vdCBvZmYgYSByZXNjdWUgZGlzaywgIgorImFuZCByZWluc3RhbGwgeW91ciBib290IGxvYWRlciBmcm9tIHRoZSByZXNjdWUgZGlzay4gIFJlYWQgc2VjdGlvbiA0IG9mIHRoZSAiCisiUGFydGVkIFVzZXIgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCittc2dzdHIgIiIKKyJOZWJ5bG8gbW/Fvm7DqSB6bm92dSBuYcSNw61zdCB0YWJ1bGt1IG9kZMOtbMWvLCB0YWvFvmUgYnVkZXRlIG11c2V0IHDFmWVkIHDFmWlwb2plbsOtbSAiCisiem3Em27Em27DvWNoIG9kZMOtbMWvIHJlc3RhcnRvdmF0IHBvxI3DrXRhxI0uIFRha8OpIG11c8OtdGUgcMWZZWQgcmVzdGFydGVtICIKKyJyZWluc3RhbG92YXQgc3bFr2ogemF2ZMSbxI0gc3lzdMOpbXUgKGNvxb4gbcWvxb5lIHZ5xb5hZG92YXQgcMWZaXBvamVuw60gem3Em27Em27DvWNoICIKKyJvZGTDrWzFrykuIE5lbHplIHByb3bDqXN0IG9ib2rDrSEgVGFrxb5lIGJ1ZGV0ZSBtdXNldCB6YXbDqXN0IHN5c3TDqW0gemUgIgorInrDoWNocmFubsOpaG8gZGlza3UgYSByZWluc3RhbG92YXQgc3bFr2ogemF2YWTEm8SNIHN5c3TDqW11IG9kdHVkLiBQcm8gdsOtY2UgIgorImluZm9ybWFjw60gc2kgcMWZZcSNdMSbdGUgb2Rkw61sIDQgVcW+aXZhdGVsc2vDqSBkb2t1bWVudGFjZSBQYXJ0ZWQuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzozNjkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgcGFydGl0aW9uIHRhYmxlIG9uICVzIGNhbm5vdCBiZSByZS1yZWFkICglcykuICBUaGlzIG1lYW5zIHRoZSBIdXJkIGtub3dzICIKKyJub3RoaW5nIGFib3V0IGFueSBtb2RpZmljYXRpb25zIHlvdSBtYWRlLiAgWW91IHNob3VsZCByZWJvb3QgeW91ciBjb21wdXRlciAiCisiYmVmb3JlIGRvaW5nIGFueXRoaW5nIHdpdGggJXMuIgorbXNnc3RyICIiCisiVGFidWxrYSBvZGTDrWzFryBuYSAlcyAoJXMpLiBUbyB6bmFtZW7DoSwgxb5lIEh1cmQgbmV2w60gbmljIG8gem3Em27DoWNoLCBrdGVyw6kgIgorImpzdGUgcHJvdmVkbGkuIE5lxb4gYnVkZXRlIGNva29saSBkxJtsYXQgcyAlcywgbcSbbGkgYnlzdGUgcmVzdGFydG92YXQgc3bFr2ogIgorInBvxI3DrXRhxI0uIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzozODAgcGFydGVkL3BhcnRlZC5jOjI0NDMKK21zZ2lkICIiCisiWW91IHNob3VsZCByZWluc3RhbGwgeW91ciBib290IGxvYWRlciBiZWZvcmUgcmVib290aW5nLiAgUmVhZCBzZWN0aW9uIDQgb2YgIgorInRoZSBQYXJ0ZWQgVXNlciBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiIgorIlDFmWVkIHJlc3RhcnRlbSBieXN0ZSBtxJtsaSByZWluc3RhbG92YXQgc3bFr2ogemF2YWTEm8SNIHN5c3TDqW11LiBQcm8gdsOtY2UgIgorImluZm9ybWFjw60gc2kgcMWZZcSNdMSbdGUgb2Rkw61sIDQgVcW+aXZhdGVsc2vDqSBkb2t1bWVudGFjZSBQYXJ0ZWQuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo3NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdHJ5aW5nIHRvIHN5bmMgJXMgdG8gZGlzayIKK21zZ3N0ciAiJXMgcMWZaSBwb2t1c3Ugc3luYyAlcyBuYSBkaXNrIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjQwOAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc3RhdCBkZXZpY2UgJXMgLSAlcy4iCittc2dzdHIgIk5lbW9odSBzdGF0IHphxZnDrXplbsOtICVzIC0gJXMuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjUyMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGRldGVybWluZSBzZWN0b3Igc2l6ZSBmb3IgJXM6ICVzLlxuIgorIlVzaW5nIHRoZSBkZWZhdWx0IHNlY3RvciBzaXplICglbGxkKS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo1MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkRldmljZSAlcyBoYXMgYSBsb2dpY2FsIHNlY3RvciBzaXplIG9mICVsbGQuICBOb3QgYWxsIHBhcnRzIG9mIEdOVSBQYXJ0ZWQgIgorInN1cHBvcnQgdGhpcyBhdCB0aGUgbW9tZW50LCBhbmQgdGhlIHdvcmtpbmcgY29kZSBpcyBISUdITFkgRVhQRVJJTUVOVEFMLlxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6NTc5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZGV0ZXJtaW5lIHRoZSBzaXplIG9mICVzICglcykuIgorbXNnc3RyICJOZW1vaHUgdXLEjWl0IHZlbGlrb3N0ICVzICglcykiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6NjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBnZXQgaWRlbnRpdHkgb2YgZGV2aWNlICVzIC0gJXMiCittc2dzdHIgIk5lbW9odSB6w61za2F0IGlkZW50aXR1IHphxZnDrXplbsOtICVzIC0gJXMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6Njc3Cittc2dpZCAiR2VuZXJpYyBJREUiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkRldmljZSAlcyBoYXMgbXVsdGlwbGUgKCVkKSBsb2dpY2FsIHNlY3RvcnMgcGVyIHBoeXNpY2FsIHNlY3Rvci5cbiIKKyJHTlUgUGFydGVkIHN1cHBvcnRzIHRoaXMgRVhQRVJJTUVOVEFMTFkgZm9yIHNvbWUgc3BlY2lhbCBkaXNrIGxhYmVsL2ZpbGUgIgorInN5c3RlbSBjb21iaW5hdGlvbnMsIGUuZy4gR1BUIGFuZCBleHQyLzMuXG4iCisiUGxlYXNlIGNvbnN1bHQgdGhlIHdlYiBzaXRlIGZvciB1cC10by1kYXRlIGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjg3MworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBpbml0aWFsaXNpbmcgU0NTSSBkZXZpY2UgJXMgLSAlcyIKK21zZ3N0ciAiQ2h5YmEgcMWZaSBpbmljaWFsaXphY2kgemHFmcOtemVuw60gU0NTSSAlcyAtICVzIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjkyOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBkZXZpY2UgJXMgaGFzIHplcm8gbGVuZ3RoLCBhbmQgY2FuJ3QgcG9zc2libHkgc3RvcmUgYSBmaWxlIHN5c3RlbSBvciAiCisicGFydGl0aW9uIHRhYmxlLiAgUGVyaGFwcyB5b3Ugc2VsZWN0ZWQgdGhlIHdyb25nIGRldmljZT8iCittc2dzdHIgIiIKKyJaYcWZw616ZW7DrSAlcyBtw6EgbnVsb3ZvdSBkw6lsa3UgYSBuZW3Fr8W+ZSBvYnNhaG92YXQgc3lzdMOpbSBzb3Vib3LFryBuZWJvIHRhYnVsa3UgIgorIm9kZMOtbMWvLiBNb8W+bsOhIGpzdGUgdnlicmFsaSDFoXBhdG7DqSB6YcWZw616ZW7DrT8iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTAzMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlVuYWJsZSB0byBkZXRlcm1pbmUgZ2VvbWV0cnkgb2YgZmlsZS9kZXZpY2UgJXMuICBZb3Ugc2hvdWxkIG5vdCB1c2UgUGFydGVkICIKKyJ1bmxlc3MgeW91IFJFQUxMWSBrbm93IHdoYXQgeW91J3JlIGRvaW5nISIKK21zZ3N0ciAiIgorIk5lbW9odSB1csSNaXQgZ2VvbWV0cmlpIHNvdWJvcnUvemHFmcOtemVuw60uIE5lbcSbbGkgYnlzdGUgcG91xb7DrXZhdCBQYXJ0ZWQsIHBva3VkICIKKyJPUFJBVkRVIG5ldsOtdGUsIGNvIGTEm2zDoXRlISIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTEwCittc2dpZCAiREFDOTYwIFJBSUQgY29udHJvbGxlciIKK21zZ3N0ciAixZhhZGnEjSBSQUlEIERBQzk2MCIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTE1Cittc2dpZCAiUHJvbWlzZSBTWDggU0FUQSBEZXZpY2UiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTIwCittc2dpZCAiSUJNIFMzOTAgREFTRCBkcml2ZSIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExMjUKK21zZ2lkICJJQk0gaVNlcmllcyBWaXJ0dWFsIERBU0QiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTMwCittc2dpZCAiQ29tcGFxIFNtYXJ0IEFycmF5IgorbXNnc3RyICJDb21wYXEgU21hcnQgQXJyYXkiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTEzNQorbXNnaWQgIkFUQVJBSUQgQ29udHJvbGxlciIKK21zZ3N0ciAixZhhZGnEjSBBVEFSQUlEIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExNDAKK21zZ2lkICJJMk8gQ29udHJvbGxlciIKK21zZ3N0ciAixZhhZGnEjSBJMk8iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTE0NQorbXNnaWQgIlVzZXItTW9kZSBMaW51eCBVQkQiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTU2Cittc2dpZCAiTGludXggZGV2aWNlLW1hcHBlciIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExNjIKK21zZ2lkICJVbmtub3duIgorbXNnc3RyICJOZXpuw6Ftw70iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTE2OQorbXNnaWQgInBlZF9kZXZpY2VfbmV3KCkgIFVuc3VwcG9ydGVkIGRldmljZSB0eXBlIgorbXNnc3RyICJwZWRfZGV2aWNlX25ldygpICBOZXBvZHBvcm92YW7DvSB0eXAgemHFmcOtemVuw60iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MjA4MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIkVycm9yIGluZm9ybWluZyB0aGUga2VybmVsIGFib3V0IG1vZGlmaWNhdGlvbnMgdG8gcGFydGl0aW9uICVzIC0tICVzLiAgVGhpcyAiCisibWVhbnMgTGludXggd29uJ3Qga25vdyBhYm91dCBhbnkgY2hhbmdlcyB5b3UgbWFkZSB0byAlcyB1bnRpbCB5b3UgcmVib290IC0tICIKKyJzbyB5b3Ugc2hvdWxkbid0IG1vdW50IGl0IG9yIHVzZSBpdCBpbiBhbnkgd2F5IGJlZm9yZSByZWJvb3RpbmcuIgorbXNnc3RyICIiCisiQ2h5YmEgcMWZaSBpbmZvcm1vdsOhbsOtIGrDoWRyYSBvIHptxJtuw6FjaCBvZGTDrWx1ICVzIC0gJXMuIFRvIHpuYW1lbsOhLCDFvmUgTGludXggIgorIm5lYnVkZSB2xJtkxJt0IG8gem3Em27DoWNoLCBrdGVyw6kgcyAlcyBwcm92ZWRldGUsIGRva3VkIG5lcmVzdGFydHVqZXRlIHN5c3TDqW0gLSAiCisidGFrxb5lIGJ5c3RlIGplaiBuZW3Em2xpIHDFmWlwb2pvdmF0IG5lYm8gamVqIHDFmWVkIHJlc3RhcnRlbSBqYWtrb2xpIHBvdcW+w612YXQuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjIyNjIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJwYXJ0ZWQgd2FzIHVuYWJsZSB0byByZS1yZWFkIHRoZSBwYXJ0aXRpb24gdGFibGUgb24gJXMgKCVzKS4gIFRoaXMgbWVhbnMgIgorIkxpbnV4IHdvbid0IGtub3cgYW55dGhpbmcgYWJvdXQgdGhlIG1vZGlmaWNhdGlvbnMgeW91IG1hZGUuICIKK21zZ3N0ciAiIgorIkrDoWRybyBuZW1vaGxvIHpub3Z1IG5hxI3DrXN0IHRhYnVsa3Ugb2Rkw61sxa8gbmEgJXMgKCVzKS4gVG8gem5hbWVuw6EsIMW+ZSBMaW51eCAiCisibmVidWRlIHbEm2TEm3QgbmljIG8gem3Em27DoWNoLCBrdGVyw6kganN0ZSBwcm92ZWRsaSwgZG9rdWQgbmVyZXN0YXJ0dWpldGUgIgorInN5c3TDqW0uIE3Em2xpIGJ5c3RlIHN2xa9qIHBvxI3DrXRhxI0gcmVzdGFydG92YXQsIG5lxb4gYnVkZXRlIHMgJXMgbsSbY28gZMSbbGF0LiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoyMzY4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGtlcm5lbCB3YXMgdW5hYmxlIHRvIHJlLXJlYWQgdGhlIHBhcnRpdGlvbiB0YWJsZSBvbiAlcyAoJXMpLiAgVGhpcyBtZWFucyAiCisiTGludXggd29uJ3Qga25vdyBhbnl0aGluZyBhYm91dCB0aGUgbW9kaWZpY2F0aW9ucyB5b3UgbWFkZSB1bnRpbCB5b3UgIgorInJlYm9vdC4gIFlvdSBzaG91bGQgcmVib290IHlvdXIgY29tcHV0ZXIgYmVmb3JlIGRvaW5nIGFueXRoaW5nIHdpdGggJXMuIgorbXNnc3RyICIiCisiSsOhZHJvIG5lbW9obG8gem5vdnUgbmHEjcOtc3QgdGFidWxrdSBvZGTDrWzFryBuYSAlcyAoJXMpLiBUbyB6bmFtZW7DoSwgxb5lIExpbnV4ICIKKyJuZWJ1ZGUgdsSbZMSbdCBuaWMgbyB6bcSbbsOhY2gsIGt0ZXLDqSBqc3RlIHByb3ZlZGxpLCBkb2t1ZCBuZXJlc3RhcnR1amV0ZSAiCisic3lzdMOpbS4gTcSbbGkgYnlzdGUgc3bFr2ogcG/EjcOtdGHEjSByZXN0YXJ0b3ZhdCwgbmXFviBidWRldGUgcyAlcyBuxJtjbyBkxJtsYXQuIgorCisjOiBsaWJwYXJ0ZWQvY3MvZ2VvbS5jOjE2MgorbXNnaWQgIkNhbid0IGhhdmUgdGhlIGVuZCBiZWZvcmUgdGhlIHN0YXJ0ISIKK21zZ3N0ciAiTmVtb2h1IG3DrXQga29uZWMgcMWZZWQgemHEjcOhdGtlbSEiCisKKyM6IGxpYnBhcnRlZC9jcy9nZW9tLmM6MTY5Cittc2dpZCAiQ2FuJ3QgaGF2ZSBhIHBhcnRpdGlvbiBvdXRzaWRlIHRoZSBkaXNrISIKK21zZ3N0ciAiTmVtb2h1IG3DrXQgb2Rkw61sIG1pbW8gZGlzayEiCisKKyM6IGxpYnBhcnRlZC9jcy9nZW9tLmM6MzY2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJBdHRlbXB0IHRvIHdyaXRlIHNlY3RvcnMgJWxkLSVsZCBvdXRzaWRlIG9mIHBhcnRpdGlvbiBvbiAlcy4iCittc2dzdHIgIlBva3VzIHphcGlzb3ZhdCBzZWt0b3J5ICVsZC0lbGQgbWltbyBvZGTDrWwgbmEgJXMiCisKKyM6IGxpYnBhcnRlZC9jcy9nZW9tLmM6NDA2IGxpYnBhcnRlZC9mcy9saW51eF9zd2FwL2xpbnV4X3N3YXAuYzo0NzUKK21zZ2lkICJjaGVja2luZyBmb3IgYmFkIGJsb2NrcyIKK21zZ3N0ciAiaGxlZMOhbSDFoXBhdG7DqSBibG9reSIKKworIzogbGlicGFydGVkL2RlYnVnLmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkJhY2t0cmFjZSBoYXMgJWQgY2FsbHMgb24gc3RhY2s6XG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2RlYnVnLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkFzc2VydGlvbiAoJXMpIGF0ICVzOiVkIGluIGZ1bmN0aW9uICVzKCkgZmFpbGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIwMworIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gb3BlbiAlcyAtIHVucmVjb2duaXNlZCBkaXNrIGxhYmVsLiIKK21zZ3N0ciAiTmVtb2h1IG90ZXbFmcOtdCAlcyAtIG5lem7DoW3DoSBqbWVub3ZrYSBkaXNrdS4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6NDcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGlzIGxpYnBhcnRlZCBkb2Vzbid0IGhhdmUgd3JpdGUgc3VwcG9ydCBmb3IgJXMuICBQZXJoYXBzIGl0IHdhcyBjb21waWxlZCAiCisicmVhZC1vbmx5LiIKK21zZ3N0ciAiIgorIlRhdG8gbGlicGFydGVkIG5lbcOhIHBvZHBvcnUgcHJvIHrDoXBpcyBwcm8gJXMuIE1vxb5uw6EgYnlsYSBwxZllbG/FvmVuYSBqZW4gcHJvICIKKyLEjXRlbsOtLiIKKworIzogbGlicGFydGVkL2Rpc2suYzo1OTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlBhcnRpdGlvbiAlZCBpcyAlcywgYnV0IHRoZSBmaWxlIHN5c3RlbSBpcyAlcy4iCittc2dzdHIgIk9kZMOtbCAlZCBqZSAlLjNmTWIsIGFsZSBzeXN0w6ltIHNvdWJvcsWvIGplICUuM2ZNYi4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTA3NQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkaXNrIGxhYmVscyBkbyBub3Qgc3VwcG9ydCBleHRlbmRlZCBwYXJ0aXRpb25zLiIKK21zZ3N0ciAiSm1lbm92a3kgZGlza3UgJXMgbmVwb2Rwb3J1asOtIHJvesWhw63FmWVuw6kgb2Rkw61seS4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTYzNAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkaXNrIGxhYmVscyBkb24ndCBzdXBwb3J0IGxvZ2ljYWwgb3IgZXh0ZW5kZWQgcGFydGl0aW9ucy4iCittc2dzdHIgIkptZW5vdmt5IGRpc2t1ICVzIG5lcG9kcG9ydWrDrSBsb2dpY2vDqSBuZWJvIHJvesWhw63FmWVuw6kgb2Rkw61seS4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTY0NworIywgZnV6enkKK21zZ2lkICJUb28gbWFueSBwcmltYXJ5IHBhcnRpdGlvbnMuIgorbXNnc3RyICJQxZnDrWxpxaEgbW5vaG8gcHJpbcOhcm7DrWNoIG9kZMOtbMWvIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE2NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbid0IGFkZCBhIGxvZ2ljYWwgcGFydGl0aW9uIHRvICVzLCBiZWNhdXNlIHRoZXJlIGlzIG5vIGV4dGVuZGVkIHBhcnRpdGlvbi4iCittc2dzdHIgIk5lbW9odSBwxZlpZGF0IGxvZ2lja8O9IG9kZMOtbCBkbyAlcywgcHJvdG/FvmUgbmVleGlzdHVqZSByb3rFocOtxZllbsO9IG9kZMOtbC4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTY4MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ2FuJ3QgaGF2ZSBtb3JlIHRoYW4gb25lIGV4dGVuZGVkIHBhcnRpdGlvbiBvbiAlcy4iCittc2dzdHIgIk5lbW9odSBtw610IHbDrWNlIG5lxb4gamVkZW4gcm96xaHDrcWZZW7DvSBvZGTDrWwgbmEgJXMiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTY5MAorbXNnaWQgIkNhbid0IGhhdmUgbG9naWNhbCBwYXJ0aXRpb25zIG91dHNpZGUgb2YgdGhlIGV4dGVuZGVkIHBhcnRpdGlvbi4iCittc2dzdHIgIk5lbW9odSBtw610IGxvZ2lja8OpIG9kZMOtbHkgbWltbyByb3rFocOtxZllbsO9IG9kZMOtbC4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTcxNQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW4ndCBoYXZlIGEgbG9naWNhbCBwYXJ0aXRpb24gb3V0c2lkZSBvZiB0aGUgZXh0ZW5kZWQgcGFydGl0aW9uIG9uICVzLiIKK21zZ3N0ciAiTmVtb2h1IG3DrXQgbG9naWNrw70gb2Rkw61sIG1pbW8gcm96xaHDrcWZZW7DvSBvZGTDrWwgbmEgJXMuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE3MjUgbGlicGFydGVkL2Rpc2suYzoxNzc5IGxpYnBhcnRlZC9kaXNrLmM6MTk0NQorIywgZnV6enkKK21zZ2lkICJDYW4ndCBoYXZlIG92ZXJsYXBwaW5nIHBhcnRpdGlvbnMuIgorbXNnc3RyICJOZW1vaHUgbcOtdCBwxZlla3LDvXZhasOtY8OtIHNlIG9kZMOtbHkiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTczMworbXNnaWQgIkNhbid0IGhhdmUgYSBwcmltYXJ5IHBhcnRpdGlvbiBpbnNpZGUgYW4gZXh0ZW5kZWQgcGFydGl0aW9uLiIKK21zZ3N0ciAiTmVtb2h1IG3DrXQgcHJpbcOhcm7DrSBvZGTDrWwgdXZuaXTFmSByb3rFocOtxZllbsOpaG8gb2Rkw61sdS4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE0MAorbXNnaWQgIm1ldGFkYXRhIgorbXNnc3RyICJtZXRhZGF0YSIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTQyCittc2dpZCAiZnJlZSIKK21zZ3N0ciAidm9sbsOpIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNDQgcGFydGVkL3VpLmM6MTE2OSBwYXJ0ZWQvdWkuYzoxMTk3Cittc2dpZCAiZXh0ZW5kZWQiCittc2dzdHIgInJvesWhw63FmWVuw70iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE0NiBwYXJ0ZWQvdWkuYzoxMTczIHBhcnRlZC91aS5jOjEyMDEKK21zZ2lkICJsb2dpY2FsIgorbXNnc3RyICJsb2dpY2vDvSIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTQ4IHBhcnRlZC91aS5jOjExNjUgcGFydGVkL3VpLmM6MTE5MworbXNnaWQgInByaW1hcnkiCittc2dzdHIgInByaW3DoXJuw60iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE2NAorbXNnaWQgImJvb3QiCittc2dzdHIgImJvb3QiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE2NgorbXNnaWQgInJvb3QiCittc2dzdHIgInJvb3QiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE2OAorbXNnaWQgInN3YXAiCittc2dzdHIgInN3YXAiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE3MAorbXNnaWQgImhpZGRlbiIKK21zZ3N0ciAic2tyeXTDvSIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTcyCittc2dpZCAicmFpZCIKK21zZ3N0ciAicmFpZCIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTc0Cittc2dpZCAibHZtIgorbXNnc3RyICJsdm0iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE3NgorbXNnaWQgImxiYSIKK21zZ3N0ciAibGJhIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNzgKK21zZ2lkICJocC1zZXJ2aWNlIgorbXNnc3RyICJocC1zZXJ2aWNlIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxODAKK21zZ2lkICJwYWxvIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE4MgorbXNnaWQgInByZXAiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTg0Cittc2dpZCAibXNmdHJlcyIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxOTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gcGFydGl0aW9uIGZsYWcsICVkLiIKK21zZ3N0ciAiTmV6bsOhbcO9IHDFmcOtem5hayBvZGTDrWx1LCAlZC4iCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo3OAorbXNnaWQgIkluZm9ybWF0aW9uIgorbXNnc3RyICJJbmZvcm1hY2UiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo3OQorbXNnaWQgIldhcm5pbmciCittc2dzdHIgIlZhcm92w6Fuw60iCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4MAorbXNnaWQgIkVycm9yIgorbXNnc3RyICJDaHliYSIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjgxCittc2dpZCAiRmF0YWwiCittc2dzdHIgIkZhdMOhbG7DrSIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjgyCittc2dpZCAiQnVnIgorbXNnc3RyICJDaHliYSIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjgzCittc2dpZCAiTm8gSW1wbGVtZW50YXRpb24iCittc2dzdHIgIk5laW1wbGVtZW50b3bDoW5vIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODcKK21zZ2lkICJGaXgiCittc2dzdHIgIk9wcmF2aXQiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4OAorbXNnaWQgIlllcyIKK21zZ3N0ciAiQW5vIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODkKK21zZ2lkICJObyIKK21zZ3N0ciAiTmUiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo5MAorbXNnaWQgIk9LIgorbXNnc3RyICJPSyIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjkxCittc2dpZCAiUmV0cnkiCittc2dzdHIgIlpub3Z1IgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6OTIKK21zZ2lkICJJZ25vcmUiCittc2dzdHIgIklnbm9yb3ZhdCIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjkzCittc2dpZCAiQ2FuY2VsIgorbXNnc3RyICJacnXFoWl0IgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6MTMzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiQSBidWcgaGFzIGJlZW4gZGV0ZWN0ZWQgaW4gR05VIFBhcnRlZC4gIFJlZmVyIHRvIHRoZSB3ZWIgc2l0ZSBvZiBwYXJ0ZWQgIgorImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9wYXJ0ZWQvcGFydGVkLmh0bWwgZm9yIG1vcmUgaW5mb3JtYXRpb25zIG9mIHdoYXQgIgorImNvdWxkIGJlIHVzZWZ1bCBmb3IgYnVnIHN1Ym1pdHRpbmchICBQbGVhc2UgZW1haWwgYSBidWcgcmVwb3J0IHRvIGJ1Zy0iCisicGFydGVkQGdudS5vcmcgY29udGFpbmluZyBhdCBsZWFzdCB0aGUgdmVyc2lvbiAoJXMpIGFuZCB0aGUgZm9sbG93aW5nICIKKyJtZXNzYWdlOiAgIgorbXNnc3RyICIiCisiQnlsYSBkZXRla292w6FuYSBjaHliYSB2IEdOVSBwYXJ0ZWQuIFBvxaFsZXRlIHByb3PDrW0gZS1tYWlsZW0gaGzDocWhZW7DrSBvIGNoeWLEmyAiCisibmEgYnVnLXBhcnRlZEBnbnUub3JnIG9ic2FodWrDrWPDrSB2ZXJ6aSAoJXMpIGEgbsOhc2xlZHVqw61jw60genByw6F2dToiCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6Mzg0Cittc2dpZCAiQ291bGQgbm90IGRldGVjdCBmaWxlIHN5c3RlbS4iCittc2dzdHIgIk5lbW9odSBkZXRla292YXQgc3lzdMOpbSBzb3Vib3LFry4iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6Mzk1CisjLCBmdXp6eQorbXNnaWQgIlRoZSBmaWxlIHN5c3RlbSBpcyBiaWdnZXIgdGhhbiBpdHMgdm9sdW1lISIKK21zZ3N0ciAiU3lzdMOpbSBzb3Vib3LFryBqZSB2xJt0xaHDrSBuZcW+IGplaG8gb2JzYWghIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjQwMworIywgYy1mb3JtYXQKK21zZ2lkICJTdXBwb3J0IGZvciBvcGVuaW5nICVzIGZpbGUgc3lzdGVtcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiIgorIlBvZHBvcmEgcHJvIG90ZXbDrXLDoW7DrSBzb3Vib3JvdsO9Y2ggc3lzdMOpbcWvICVzIGplxaF0xJsgbmVuw60gaW1wbGVtZW50b3bDoW5hLiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo0NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VwcG9ydCBmb3IgY3JlYXRpbmcgJXMgZmlsZSBzeXN0ZW1zIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICIiCisiUG9kcG9yYSBwcm8gdnl0dsOhxZllbsOtIHNvdWJvcm92w71jaCBzeXN0w6ltxa8gJXMgamXFoXTEmyBuZW7DrSBpbXBsZW1lbnRvdsOhbmEuIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjUwNQorIywgYy1mb3JtYXQKK21zZ2lkICJTdXBwb3J0IGZvciBjaGVja2luZyAlcyBmaWxlIHN5c3RlbXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIlBvZHBvcmEgcHJvIGtvbnRyb2x1IHNvdWJvcm92w71jaCBzeXN0w6ltxa8gJXMgamXFoXTEmyBuZW7DrSBpbXBsZW1lbnRvdsOhbmEuIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjU3MQorbXNnaWQgInJhdyBibG9jayBjb3B5aW5nIgorbXNnc3RyICJwxZnDrW3DqSBrb3DDrXJvdsOhbsOtIGJsb2vFryIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo1ODIKK21zZ2lkICJncm93aW5nIGZpbGUgc3lzdGVtIgorbXNnc3RyICJ6dsSbdMWhb3bDoW7DrSBzeXN0w6ltdSBzb3Vib3LFryIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo2MjIKK21zZ2lkICJDYW4ndCBjb3B5IG9udG8gYW4gb3ZlcmxhcHBpbmcgcGFydGl0aW9uLiIKK21zZ3N0ciAiTmVtb2h1IGtvcMOtcm92YXQgZG8gcMWZZWtyw712YWrDrWPDrWhvIHNlIG9kZMOtbHUuIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjY0NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIkRpcmVjdCBzdXBwb3J0IGZvciBjb3B5aW5nIGZpbGUgc3lzdGVtcyBpcyBub3QgeWV0IGltcGxlbWVudGVkIGZvciAlcy4gICIKKyJIb3dldmVyLCBzdXBwb3J0IGZvciByZXNpemluZyBpcyBpbXBsZW1lbnRlZC4gIFRoZXJlZm9yZSwgdGhlIGZpbGUgc3lzdGVtICIKKyJjYW4gYmUgY29waWVkIGlmIHRoZSBuZXcgcGFydGl0aW9uIGlzIGF0IGxlYXN0IGFzIGJpZyBhcyB0aGUgb2xkIG9uZS4gIFNvLCAiCisiZWl0aGVyIHNocmluayB0aGUgcGFydGl0aW9uIHlvdSBhcmUgdHJ5aW5nIHRvIGNvcHksIG9yIGNvcHkgdG8gYSBiaWdnZXIgIgorInBhcnRpdGlvbi4iCittc2dzdHIgIiIKKyJQcm8gJXMgbmVuw60gamXFoXTEmyBpbXBsZW1lbnRvdsOhbmEgcMWZw61tw6EgcG9kcG9yYSBwcm8ga29ww61yb3bDoW7DrSBzeXN0w6ltxa8gIgorInNvdWJvcsWvLiBKZSBhbGUgaW1wbGVtZW50b3bDoW5hIHBvZHBvcmEgcHJvIHptxJtudSB2ZWxpa29zdGkuIFN5c3TDqW0gc291Ym9yxa8gIgorInRlZHkgbcWvxb5lIGLDvXQgemtvcMOtcm92w6FuLCBqZS1saSBub3bDvSBvZGTDrWwgYWxlc3BvxYggdGFrIHZlbGvDvSBqYWtvIHN0YXLDvS4gIgorIlRha8W+ZSBidcSPIHptZW7FoWV0ZSBvZGTDrWwsIGt0ZXLDvSBzZSBwb2tvdcWhw610ZSB6a29ww61yb3ZhdCwgbmVibyBrb3DDrXJ1anRlIGRvICIKKyJ2xJt0xaHDrWhvIG9kZMOtbHUuIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjY1OAorIywgYy1mb3JtYXQKK21zZ2lkICJTdXBwb3J0IGZvciBjb3B5aW5nICVzIGZpbGUgc3lzdGVtcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiIgorIlBvZHBvcmEgcHJvIGtvcMOtcm92w6Fuw60gc291Ym9yb3bDvWNoIHN5c3TDqW3FryAlcyBqZcWhdMSbIG5lbsOtIGltcGxlbWVudG92w6FuYS4iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6Njk2CisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnQgZm9yIHJlc2l6aW5nICVzIGZpbGUgc3lzdGVtcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiIgorIlBvZHBvcmEgcHJvIHptxJtudSB2ZWxpa29zdGkgc291Ym9yb3bDvWNoIHN5c3TDqW3FryAlcyBqZcWhdMSbIG5lbsOtIGltcGxlbWVudG92w6FuYS4iCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjMxNQorbXNnaWQgImNyZWF0aW5nIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQwMgorIywgZnV6enkKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gaXMgaW4gYW4gaW52YWxpZCBzdGF0ZS4gIFBlcmhhcHMgaXQgaXMgbW91bnRlZD8iCittc2dzdHIgIlN5c3TDqW0gc291Ym9yxa8gamUgdsSbdMWhw60gbmXFviBqZWhvIG9ic2FoISIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDEwCittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIGlzIGluIG9sZCAodW5yZXNpemVhYmxlKSBmb3JtYXQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQxNgorbXNnaWQgIkludmFsaWQgZnJlZSBibG9ja3MgY291bnQuICBSdW4gcmVpc2VyZnNjayAtLWNoZWNrIGZpcnN0LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0MzEKKyMsIGZ1enp5Cittc2dpZCAiY2hlY2tpbmciCittc2dzdHIgImNoZWNrIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0MzcKK21zZ2lkICJSZWlzZXJmcyB0cmVlIHNlZW1zIHRvIGJlIGNvcnJ1cHRlZC4gIFJ1biByZWlzZXJmc2NrIC0tY2hlY2sgZmlyc3QuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQ0OQorIywgZnV6enkKK21zZ2lkICIiCisiVGhlIHJlaXNlcmZzIGZpbGUgc3lzdGVtIHBhc3NlZCBhIGJhc2ljIGNoZWNrLiAgRm9yIGEgbW9yZSBjb21wcmVoZW5zaXZlICIKKyJjaGVjaywgcnVuIHJlaXNlcmZzY2sgLS1jaGVjay4iCittc2dzdHIgIiIKKyJTeXN0w6ltIHNvdWJvcsWvIGV4dDIgcHJvxaFlbCB6w6FrbGFkbsOtIGtvbnRyb2xvdS4gUHJvIHBvZHJvYm7Em2rFocOtIGtvbnRyb2x1ICIKKyJwb3XFvmlqdGUgcHJvZ3JhbSBlMmZzY2suIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0NzQKKyMsIGZ1enp5Cittc2dpZCAiU29ycnksIGNhbid0IG1vdmUgdGhlIHN0YXJ0IG9mIHJlaXNlcmZzIHBhcnRpdGlvbnMgeWV0LiIKK21zZ3N0ciAiTGl0dWppLCBqZcWhdMSbIG5ldW3DrW0gcMWZZXN1bm91dCB6YcSNw6F0ZWsgb2Rkw61sxa8gZXh0MiEiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQ5MAorbXNnaWQgIkNvdWxkbid0IHJlb3BlbiBkZXZpY2UgYWJzdHJhY3Rpb24gbGF5ZXIgZm9yIHJlYWQvd3JpdGUuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjUwOCBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjU1MgorIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzoyNTAgbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo2MjkKK21zZ2lkICJzaHJpbmtpbmciCittc2dzdHIgInptZW7FoXVqaSIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NTIwCisjLCBmdXp6eQorbXNnaWQgImV4cGFuZGluZyIKK21zZ3N0ciAiVmFyb3bDoW7DrSIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NTkyCittc2dpZCAiQ291bGRuJ3QgY3JlYXRlIHJlaXNlcmZzIGRldmljZSBhYnN0cmFjdGlvbiBoYW5kbGVyLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo2MDYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkRldmljZSBpcyB0b28gc21hbGwgZm9yICVsdSBibG9ja3MuIgorbXNnc3RyICJTeXN0w6ltIHNvdWJvcsWvIHDFmcOtbGnFoSBtYWzDvSBwcm8gZXh0Mi4iCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjYxNQorbXNnaWQgImNvcHlpbmciCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IHJlc29sdmUgc3ltYm9sICVzLiAgRXJyb3I6ICVzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo3MDQKK21zZ2lkICJHTlUgUGFydGVkIGZvdW5kIGFuIGludmFsaWQgbGlicmVpc2VyZnMgbGlicmFyeS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJHTlUgUGFydGVkIGhhcyBkZXRlY3RlZCBsaWJyZWlzZXJmcyBpbnRlcmZhY2UgdmVyc2lvbiBtaXNtYXRjaC4gIEZvdW5kICVkLSUiCisiZCwgcmVxdWlyZWQgJWQuIFJlaXNlckZTIHN1cHBvcnQgd2lsbCBiZSBkaXNhYmxlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9haXguYzoxMzcKKyMsIGZ1enp5Cittc2dpZCAiU3VwcG9ydCBmb3IgcmVhZGluZyBBSVggZGlzayBsYWJlbHMgaXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiIKKyJQb2Rwb3JhIHBybyB2eXR2w6HFmWVuw60gc291Ym9yb3bDvWNoIHN5c3TDqW3FryAlcyBqZcWhdMSbIG5lbsOtIGltcGxlbWVudG92w6FuYS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYWl4LmM6MTQ4CisjLCBmdXp6eQorbXNnaWQgIlN1cHBvcnQgZm9yIHdyaXRpbmcgQUlYIGRpc2sgbGFiZWxzIGlzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICIiCisiUG9kcG9yYSBwcm8gdnl0dsOhxZllbsOtIHNvdWJvcm92w71jaCBzeXN0w6ltxa8gJXMgamXFoXTEmyBuZW7DrSBpbXBsZW1lbnRvdsOhbmEuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2FpeC5jOjE2MQorIywgZnV6enkKK21zZ2lkICIiCisiU3VwcG9ydCBmb3IgYWRkaW5nIHBhcnRpdGlvbnMgdG8gQUlYIGRpc2sgbGFiZWxzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICIiCisiUG9kcG9yYSBwcm8gdnl0dsOhxZllbsOtIHNvdWJvcm92w71jaCBzeXN0w6ltxa8gJXMgamXFoXTEmyBuZW7DrSBpbXBsZW1lbnRvdsOhbmEuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2FpeC5jOjE3MQorIywgZnV6enkKK21zZ2lkICIiCisiU3VwcG9ydCBmb3IgZHVwbGljYXRpbmcgcGFydGl0aW9ucyBpbiBBSVggZGlzayBsYWJlbHMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiIKKyJQb2Rwb3JhIHBybyB2eXR2w6HFmWVuw60gc291Ym9yb3bDvWNoIHN5c3TDqW3FryAlcyBqZcWhdMSbIG5lbsOtIGltcGxlbWVudG92w6FuYS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYWl4LmM6MTg5CisjLCBmdXp6eQorbXNnaWQgIiIKKyJTdXBwb3J0IGZvciBzZXR0aW5nIHN5c3RlbSB0eXBlIG9mIHBhcnRpdGlvbnMgaW4gQUlYIGRpc2sgbGFiZWxzIGlzIG5vdCAiCisiaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiIgorIlBvZHBvcmEgcHJvIHZ5dHbDocWZZW7DrSBzb3Vib3JvdsO9Y2ggc3lzdMOpbcWvICVzIGplxaF0xJsgbmVuw60gaW1wbGVtZW50b3bDoW5hLiIKKworIzogbGlicGFydGVkL2xhYmVscy9haXguYzoxOTkKKyMsIGZ1enp5Cittc2dpZCAiU3VwcG9ydCBmb3Igc2V0dGluZyBmbGFncyBpbiBBSVggZGlzayBsYWJlbHMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiIKKyJQb2Rwb3JhIHBybyB2eXR2w6HFmWVuw60gc291Ym9yb3bDvWNoIHN5c3TDqW3FryAlcyBqZcWhdMSbIG5lbsOtIGltcGxlbWVudG92w6FuYS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYnNkLmM6NTAxIGxpYnBhcnRlZC9sYWJlbHMvZGFzZC5jOjc1NQorIzogbGlicGFydGVkL2xhYmVscy9kb3MuYzoxOTc0IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6NzcwCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjE0NDggbGlicGFydGVkL2xhYmVscy9sb29wLmM6MjQ4CisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjE0MDggbGlicGFydGVkL2xhYmVscy9wYzk4LmM6NzU5CisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjEwNDEgbGlicGFydGVkL2xhYmVscy9zdW4uYzo3MDUKK21zZ2lkICJVbmFibGUgdG8gc2F0aXNmeSBhbGwgY29uc3RyYWludHMgb24gdGhlIHBhcnRpdGlvbi4iCittc2dzdHIgIk5lbW9odSBzcGxuaXQgdsWhZWNobmEgb21lemVuw60gbmEgb2Rkw61sLiIKKworIzogbGlicGFydGVkL2xhYmVscy9ic2QuYzo1MjYKKyMsIGZ1enp5Cittc2dpZCAiVW5hYmxlIHRvIGFsbG9jYXRlIGEgYnNkIGRpc2tsYWJlbCBzbG90LiIKK21zZ3N0ciAiTmVtb2h1IGFsb2tvdmF0IHBvbG/Fvmt1IGptZW5vdmt5IGRpc2t1IGJzZCIKKworIzogbGlicGFydGVkL2xhYmVscy9kYXNkLmM6MTY2CisjLCBmdXp6eQorbXNnaWQgIlVuYWJsZSB0byBkZXRlcm1pbmUgdGhlIGJsb2NrIHNpemUgb2YgdGhpcyBkYXNkIgorbXNnc3RyICJOZW1vaHUgdXLEjWl0IHZlbGlrb3N0ICVzICglcykiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZGFzZC5jOjc4MQorIywgZnV6enkKK21zZ2lkICJVbmFibGUgdG8gYWxsb2NhdGUgYSBkYXNkIGRpc2tsYWJlbCBzbG90IgorbXNnc3RyICJOZW1vaHUgYWxva292YXQgcG9sb8W+a3Ugam1lbm92a3kgZGlza3UgYnNkIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rvcy5jOjgyNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBwYXJ0aXRpb24gdGFibGUgb24gJXMgLS0gd3Jvbmcgc2lnbmF0dXJlICV4LiIKK21zZ3N0ciAiTmVwbGF0bsOhIHRhYnVsa2Egb2Rkw61sxa8gbmEgJXMgLSBuZXNwcsOhdm7DvSBwb2RwaXMgJXgiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZG9zLmM6ODU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcGFydGl0aW9uIHRhYmxlIC0gcmVjdXJzaXZlIHBhcnRpdGlvbiBvbiAlcy4iCittc2dzdHIgIk5lcGxhdG7DoSB0YWJ1bGthIG9kZMOtbMWvIC0gcmVrdXJ6aXZuw60gb2Rkw61sIG5hICVzLiIKKworIzogbGlicGFydGVkL2xhYmVscy9kb3MuYzoxMzE4Cittc2dpZCAiRXh0ZW5kZWQgcGFydGl0aW9ucyBjYW5ub3QgYmUgaGlkZGVuIG9uIG1zZG9zIGRpc2sgbGFiZWxzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rvcy5jOjE5NTgKK21zZ2lkICJQYXJ0ZWQgY2FuJ3QgcmVzaXplIHBhcnRpdGlvbnMgbWFuYWdlZCBieSBXaW5kb3dzIER5bmFtaWMgRGlzay4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9kdmguYzoxOTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyBubyBleHRlbmRlZCBwYXJ0aXRpb24gKHZvbHVtZSBoZWFkZXIgcGFydGl0aW9uKS4iCittc2dzdHIgIiIKKyIlcyBuZW3DoSByb3rFocOtxZllbsO9IG9kZMOtbCAob2Rkw61sIGhsYXZpxI1reSBzdmF6a3UpLiBQb2t1ZCB0byBidWRldGUgaWdub3JvdmF0LCAiCisiYnVkb3Ugb2RzdHJhbsSbbnkgdsWhZWNobnkgemF2w6FkxJtjw60gc3Zhemt5LiIKKworIzogbGlicGFydGVkL2xhYmVscy9kdmguYzozMTMKK21zZ2lkICJDaGVja3N1bSBpcyB3cm9uZywgaW5kaWNhdGluZyB0aGUgcGFydGl0aW9uIHRhYmxlIGlzIGNvcnJ1cHQuIgorbXNnc3RyICIiCisiS29udHJvbG7DrSBzb3XEjWV0IGplIMWhcGF0bsSbLCBjb8W+IGluZGlrdWplLCDFvmUgdGFidWxrYSBvZGTDrWzFryBqZSBwb8Wha296ZW7DoS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6NjE2Cittc2dpZCAiT25seSBwcmltYXJ5IHBhcnRpdGlvbnMgY2FuIGJlIHJvb3QgcGFydGl0aW9ucy4iCittc2dzdHIgIkplbiBwcmltw6FybsOtIG9kZMOtbHkgbW9ob3UgYsO9dCBrb8WZZW5vdsOpIG9kZMOtbHkuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjYzMAorbXNnaWQgIk9ubHkgcHJpbWFyeSBwYXJ0aXRpb25zIGNhbiBiZSBzd2FwIHBhcnRpdGlvbnMuIgorbXNnc3RyICJKZW4gcHJpbcOhcm7DrSBvZGTDrWx5IG1vaG91IGLDvXQgb2RrbMOhZGFjw60gb2Rkw61seS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6NjQ0Cittc2dpZCAiT25seSBsb2dpY2FsIHBhcnRpdGlvbnMgY2FuIGJlIGEgYm9vdCBmaWxlLiIKK21zZ3N0ciAiSmVuIGxvZ2lja8OpIG9kZMOtbHkgbW9ob3UgYsO9dCB6YXbDoWTEm2PDrSBzb3Vib3IuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjcyMQorbXNnaWQgIk9ubHkgbG9naWNhbCBwYXJ0aXRpb25zIChib290IGZpbGVzKSBoYXZlIGEgbmFtZS4iCittc2dzdHIgIkplbiBsb2dpY2vDqSBvZGTDrWx5ICh6YXbDoWTEm2PDrSBzb3Vib3J5KSBtYWrDrSBuw6F6ZXYuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjgxMgorbXNnaWQgIlRvbyBtYW55IHByaW1hcnkgcGFydGl0aW9ucyIKK21zZ3N0ciAiUMWZw61sacWhIG1ub2hvIHByaW3DoXJuw61jaCBvZGTDrWzFryIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEwMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgb3BlbiBlcnJvclxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEwNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgc2VlayBlcnJvclxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgcmVhZCBlcnJvclxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjExMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHdyaXRlIGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiJXMgcMWZaSB6w6FwaXN1IG5hICVzIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBJT0NUTCBlcnJvclxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjExOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgQVBJIHZlcnNpb24gbWlzbWF0Y2hcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFVuc3VwcG9ydGVkIGRpc2sgdHlwZVxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgVW5zdXBwb3J0ZWQgZGlzayBmb3JtYXRcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMzAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBEaXNrIGluIHVzZVxuIgorIiVzXG4iCittc2dzdHIgIiVzICAlcyAgJXMiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIENvbmZpZyBmaWxlIHN5bnRheCBlcnJvclxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgVm9sdW1lIGxhYmVsIGlzIGNvcnJ1cHRlZC5cbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIGEgZGF0YSBzZXQgbmFtZSBpcyBjb3JydXB0ZWQuXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBzcGFjZSBhbGxvY2F0aW9uXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBkZXZpY2UgdmVyaWZpY2F0aW9uIGZhaWxlZFxuIgorIlRoZSBzcGVjaWZpZWQgZGV2aWNlIGlzIG5vdCBhIHZhbGlkIERBU0QgZGV2aWNlXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgRmF0YWwgZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6NDU0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgY29udGFpbnMgR1BUIHNpZ25hdHVyZXMsIGluZGljYXRpbmcgdGhhdCBpdCBoYXMgYSBHUFQgdGFibGUuICBIb3dldmVyLCBpdCAiCisiZG9lcyBub3QgaGF2ZSBhIHZhbGlkIGZha2UgbXNkb3MgcGFydGl0aW9uIHRhYmxlLCBhcyBpdCBzaG91bGQuICBQZXJoYXBzIGl0ICIKKyJ3YXMgY29ycnVwdGVkIC0tIHBvc3NpYmx5IGJ5IGEgcHJvZ3JhbSB0aGF0IGRvZXNuJ3QgdW5kZXJzdGFuZCBHUFQgcGFydGl0aW9uICIKKyJ0YWJsZXMuICBPciBwZXJoYXBzIHlvdSBkZWxldGVkIHRoZSBHUFQgdGFibGUsIGFuZCBhcmUgbm93IHVzaW5nIGFuIG1zZG9zICIKKyJwYXJ0aXRpb24gdGFibGUuICBJcyB0aGlzIGEgR1BUIHBhcnRpdGlvbiB0YWJsZT8iCittc2dzdHIgIiIKKyIlcyBvYnNhaHVqZSBwb2RwaXN5IEdQVCwgY2/FviB6bmFtZW7DoSwgxb5lIG3DoSB0YWJ1bGt1IEdQVC4gTmVtw6EgYWxlIHBsYXRub3UgIgorImZhbGXFoW5vdSB0YWJ1bGt1IG9kZMOtbMWvIG1zZG9zLCBrdGVyb3UgYnkgbcSbbCBtw610LiBNb8W+bsOhIGJ5bGEgcG/FoWtvemVuYSAtICIKKyJuYXDFmS4gcHJvZ3JhbWVtLCBrdGVyw70gbmVyb3p1bcOtIHRhYnVsa8OhbSBvZGTDrWzFryBHUFQuIE5lYm8ganN0ZSBtb8W+bsOhICIKKyJvZHN0cmFuaWxpIHRhYnVsa3Ugb2Rkw61sxa8gR1BUIGEgbnluw60gcG91xb7DrXbDoXRlIHRhYnVsa3Ugb2Rkw61sxa8gbXNkb3MuIEplIHRvdG8gIgorInRhYnVsa2Egb2Rkw61sxa8gR1BUPyIKKworIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzo2NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb3JtYXQgb2YgdGhlIEdQVCBwYXJ0aXRpb24gdGFibGUgaXMgdmVyc2lvbiAleCwgd2hpY2ggaXMgbmV3ZXIgdGhhbiAiCisid2hhdCBQYXJ0ZWQgY2FuIHJlY29nbmlzZS4gIFBsZWFzZSB0ZWxsIHVzISAgYnVnLXBhcnRlZEBnbnUub3JnIgorbXNnc3RyICIiCisiRm9ybcOhdCB0YWJ1bGt5IG9kZMOtbMWvIEdQVCBqZSB2ZXJ6ZSAleCwgY2/FviBqZSBub3bEm2rFocOtLCBuZcW+IGt0ZXJvdSB1bcOtICIKKyJyb3pwb3puYXQgUGFydGVkLiBPem5hbXRlIG7DoW0gdG8gcHJvc8OtbSEgYnVnLXBhcnRlZEBnbnUub3JnIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm90IGFsbCBvZiB0aGUgc3BhY2UgYXZhaWxhYmxlIHRvICVzIGFwcGVhcnMgdG8gYmUgdXNlZCwgeW91IGNhbiBmaXggdGhlIEdQVCAiCisidG8gdXNlIGFsbCBvZiB0aGUgc3BhY2UgKGFuIGV4dHJhICVsbHUgYmxvY2tzKSBvciBjb250aW51ZSB3aXRoIHRoZSBjdXJyZW50ICIKKyJzZXR0aW5nPyAiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzo4MjcKK21zZ2lkICIiCisiVGhlIGJhY2t1cCBHUFQgdGFibGUgaXMgbm90IGF0IHRoZSBlbmQgb2YgdGhlIGRpc2ssIGFzIGl0IHNob3VsZCBiZS4gIFRoaXMgIgorIm1pZ2h0IG1lYW4gdGhhdCBhbm90aGVyIG9wZXJhdGluZyBzeXN0ZW0gYmVsaWV2ZXMgdGhlIGRpc2sgaXMgc21hbGxlci4gIEZpeCwgIgorImJ5IG1vdmluZyB0aGUgYmFja3VwIHRvIHRoZSBlbmQgKGFuZCByZW1vdmluZyB0aGUgb2xkIGJhY2t1cCk/IgorbXNnc3RyICIiCisiWsOhbG/Fvm7DrSB0YWJ1bGthIEdQVCBuZW7DrSBuYSBrb25jaSBkaXNrdSwgamFrIGJ5IG3Em2xhIGLDvXQuIFRvIG1vxb5uw6Egem5hbWVuw6EsICIKKyLFvmUgamluw70gb3BlcmHEjW7DrSBzeXN0w6ltIHNpIG15c2zDrSwgxb5lIGRpc2sgamUgbWVuxaHDrS4gTcOhbSB0byBvcHJhdml0ICIKKyJwxZllc3VudXTDrW0gesOhbG9oeSBuYSBrb25lYyAoYSBvZHN0cmFuxJtuw61tIHN0YXLDqSB6w6Fsb2h5KT8iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6ODYyCisjLCBmdXp6eQorbXNnaWQgIiIKKyJUaGUgcHJpbWFyeSBHUFQgdGFibGUgaXMgY29ycnVwdCwgYnV0IHRoZSBiYWNrdXAgYXBwZWFycyBPSywgc28gdGhhdCB3aWxsIGJlICIKKyJ1c2VkLiIKK21zZ3N0ciAiIgorIlByaW3DoXJuw60gdGFidWxrYSBHUFQgamUgcG/FoWtvemVuw6EsIGFsZSB6w6Fsb2hhIHNlIHpkw6EgYsO9dCB2IHBvxZnDoWRrdSwgdGFrxb5lICIKKyJidWRlIHBvdcW+aXRhIHrDoWxvaGEuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjg3MAorIywgZnV6enkKK21zZ2lkICIiCisiQm90aCB0aGUgcHJpbWFyeSBhbmQgYmFja3VwIEdQVCB0YWJsZXMgYXJlIGNvcnJ1cHQuICBUcnkgbWFraW5nIGEgZnJlc2ggIgorInRhYmxlLCBhbmQgdXNpbmcgUGFydGVkJ3MgcmVzY3VlIGZlYXR1cmUgdG8gcmVjb3ZlciBwYXJ0aXRpb25zLiIKK21zZ3N0ciAiIgorIlByaW3DoXJuw60gaSB6w6Fsb8W+bsOtIHRhYnVsa2EgR1BUIGplIHBvxaFrb3plbmEuIFprdXN0ZSB2eXR2b8WZaXQgbm92b3UgdGFidWxrdSBhICIKKyJvYm5vdml0IG9kZMOtbHkgcG9tb2PDrSBzY2hvcG5vc3RpIFBhcnRlZHUgcmVzY3VlLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoxODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBzaWduYXR1cmUgJXggZm9yIE1hYyBkaXNrIGxhYmVscy4iCittc2dzdHIgIk5lcGxhdG7DvSBwb2RwaXMgJXggcHJvIGptZW5vdmt5IGRpc2t1IE1hYy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6MjI2Cittc2dpZCAiUGFydGl0aW9uIG1hcCBoYXMgbm8gcGFydGl0aW9uIG1hcCBlbnRyeSEiCittc2dzdHIgIk1hcGEgb2Rkw61sxa8gbmVtw6Egxb7DoWRub3UgcG9sb8W+a3UgbWFweSBvZGTDrWzFryEiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIHRvbyBzbWFsbCBmb3IgYSBNYWMgZGlzayBsYWJlbCEiCittc2dzdHIgIiVzIGplIHDFmcOtbGnFoSBtYWzDvSBwcm8gam1lbm92a3UgZGlza3UgTWFjISIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo1MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGFydGl0aW9uICVkIGhhcyBhbiBpbnZhbGlkIHNpZ25hdHVyZSAleC4iCittc2dzdHIgIk9kZMOtbCAlZCBtw6EgbmVwbGF0bsO9IHBvZHBpcyAleC4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIlBhcnRpdGlvbiAlZCBoYXMgYW4gaW52YWxpZCBsZW5ndGggb2YgMCBieXRlcyEiCittc2dzdHIgIk9kZMOtbCAlZCBtw6EgbmVwbGF0bm91IGTDqWxrdSAwIGJhanTFry4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NTgwCisjLCBmdXp6eQorbXNnaWQgIlRoZSBkYXRhIHJlZ2lvbiBkb2Vzbid0IHN0YXJ0IGF0IHRoZSBzdGFydCBvZiB0aGUgcGFydGl0aW9uLiIKK21zZ3N0ciAiRGF0b3bDvSByZWdpb24gbmV6YcSNw61uw6EgbmEgemHEjcOhdGt1IG9kZMOtbHUiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NTk3CisjLCBmdXp6eQorbXNnaWQgIlRoZSBib290IHJlZ2lvbiBkb2Vzbid0IHN0YXJ0IGF0IHRoZSBzdGFydCBvZiB0aGUgcGFydGl0aW9uLiIKK21zZ3N0ciAiWmF2w6FkxJtjw60gcmVnaW9uIG5lemHEjcOtbsOhIG5hIHphxI3DoXRrdSBvZGTDrWx1IgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjYxMQorbXNnaWQgIlRoZSBwYXJ0aXRpb24ncyBib290IHJlZ2lvbiBkb2Vzbid0IG9jY3VweSB0aGUgZW50aXJlIHBhcnRpdGlvbi4iCittc2dzdHIgIlphdsOhZMSbY8OtIHJlZ2lvbiBvZGTDrWx1IG5lemFiw61yw6EgY2Vsw70gb2Rkw61sLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo2MjIKK21zZ2lkICJUaGUgcGFydGl0aW9uJ3MgZGF0YSByZWdpb24gZG9lc24ndCBvY2N1cHkgdGhlIGVudGlyZSBwYXJ0aXRpb24uIgorbXNnc3RyICJEYXRvdsO9IHJlZ2lvbiBvZGTDrWx1IG5lemFiw61yw6EgY2Vsw70gb2Rkw61sLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo2NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldlaXJkIGJsb2NrIHNpemUgb24gZGV2aWNlIGRlc2NyaXB0b3I6ICVkIGJ5dGVzIGlzIG5vdCBkaXZpc2libGUgYnkgNTEyLiIKK21zZ3N0ciAiIgorIlBvZGl2bsOhIHZlbGlrb3N0IGJsb2t1IHYgZGVza3JpcHRvcnUgemHFmcOtemVuw606ICVkIGJhanTFryBuZW7DrSBkxJtsaXRlbG7DqSA1MTIuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjY4OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGRyaXZlciBkZXNjcmlwdG9yIHNheXMgdGhlIHBoeXNpY2FsIGJsb2NrIHNpemUgaXMgJWQgYnl0ZXMsIGJ1dCBMaW51eCAiCisic2F5cyBpdCBpcyAlZCBieXRlcy4iCittc2dzdHIgIiIKKyJEZXNrcmlwdG9yIG92bGFkYcSNZSDFmcOta8OhLCDFvmUgZnl6aWNrw6EgdmVsaWtvc3QgYmxva3UgamUgJWQgYmFqdMWvIGFsZSBMaW51eCAiCisixZnDrWvDoSwgxb5lIGplIHRvICVkIGJhanTFry4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NzM2Cittc2dpZCAiTm8gdmFsaWQgcGFydGl0aW9uIG1hcCBmb3VuZC4iCittc2dzdHIgIk5lbmFsZXplbmEgcGxhdG7DoSBtYXBhIG9kZMOtbMWvLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo3OTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb25mbGljdGluZyBwYXJ0aXRpb24gbWFwIGVudHJ5IHNpemVzISAgRW50cnkgMSBzYXlzIGl0IGlzICVkLCBidXQgZW50cnkgJWQgIgorInNheXMgaXQgaXMgJWQhIgorbXNnc3RyICIiCisiS29saWR1asOtY8OtIHZlbGlrb3N0aSBwb2xvxb5layBtYXB5IG9kZMOtbMWvISBQb2xvxb5rYSAxIMWZw61rw6EsIMW+ZSBqZSB0byAlZCwgYWxlICIKKyJwb2xvxb5rYSAlZCDFmcOta8OhLCDFvmUgamUgdG8gJWQhIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjgyMgorIywgZnV6enkKK21zZ2lkICJXZWlyZCEgIFRoZXJlIGFyZSAyIHBhcnRpdGlvbnMgbWFwIGVudHJpZXMhIgorbXNnc3RyICJQb2Rpdm7DqSAtIDIgcG9sb8W+a3kgbWFweSBvZGTDrWx1ISIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoxMzQ3Cittc2dpZCAiIgorIkNoYW5naW5nIHRoZSBuYW1lIG9mIGEgcm9vdCBvciBzd2FwIHBhcnRpdGlvbiB3aWxsIHByZXZlbnQgTGludXggZnJvbSAiCisicmVjb2duaXNpbmcgaXQgYXMgc3VjaC4iCittc2dzdHIgIiIKKyJabcSbbmEgbsOhenZ1IGtvxZllbm92w6lobyBuZWJvIG9ka2zDoWRhY8OtaG8gb2Rkw61sdSB6YWJyw6Fuw60gTGludXh1IHYgamVobyAiCisicm96cG96bsOhbsOtLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoxNDQzCisjLCBmdXp6eQorbXNnaWQgIkNhbid0IGFkZCBhbm90aGVyIHBhcnRpdGlvbiAtLSB0aGUgcGFydGl0aW9uIG1hcCBpcyB0b28gc21hbGwhIgorbXNnc3RyICJOZW1vaHUgcMWZaWRhdCBkYWzFocOtIG9kZMOtbCAtIG1hcGEgb2Rkw61sxa8gamUgcMWZw61sacWhIG1hbMOhISIKKworIzogbGlicGFydGVkL2xhYmVscy9wYzk4LmM6MzU0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHBhcnRpdGlvbiB0YWJsZSBvbiAlcy4iCittc2dzdHIgIk5lcGxhdG7DoSB0YWJ1bGthIG9kZMOtbMWvIG5hICVzIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3BjOTguYzo0MDYgbGlicGFydGVkL2xhYmVscy9wYzk4LmM6NDg0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiUGFydGl0aW9uICVkIGlzbid0IGFsaWduZWQgdG8gY3lsaW5kZXIgYm91bmRhcmllcy4gIFRoaXMgaXMgc3RpbGwgIgorInVuc3VwcG9ydGVkLiIKK21zZ3N0ciAiIgorIk9kZMOtbCAlZCBuZW7DrSB6YXJvdm7DoW4gbmEgaHJhbmljZSBjeWxpbmRydS4gSmUgcG90xZllYmEgcMWZaWRhdCBwcm8gdG8gcG9kcG9ydS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcGM5OC5jOjc5MQorbXNnaWQgIkNhbid0IGFkZCBhbm90aGVyIHBhcnRpdGlvbi4iCittc2dzdHIgIk5lbW9odSBwxZlpZGF0IGRhbMWhw60gb2Rkw61sLiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzoxNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBCYWQgY2hlY2tzdW0gb24gYmxvY2sgJWxsdSBvZiB0eXBlICVzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjQ5NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IERpZG4ndCBmaW5kIHJkYiBibG9jaywgc2hvdWxkIG5ldmVyIGhhcHBlbi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo1ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBMb29wIGRldGVjdGVkIGF0IGJsb2NrICVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjYwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IFRoZSAlcyBsaXN0IHNlZW1zIGJhZCBhdCBibG9jayAlcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo2ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gbGlzdCBiYWQgYmxvY2tzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjY5NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBsaXN0IHBhcnRpdGlvbiBibG9ja3MuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6NzA1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGxpc3QgZmlsZSBzeXN0ZW0gYmxvY2tzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjcxMworIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBsaXN0IGJvb3QgYmxvY2tzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjc0MAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gd3JpdGUgcGFydGl0aW9uIGJsb2NrIGF0ICVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjEwNjkKKyMsIGZ1enp5Cittc2dpZCAiVW5hYmxlIHRvIGFsbG9jYXRlIGEgcGFydGl0aW9uIG51bWJlci4iCittc2dzdHIgIk/EjWVrw6F2w6FtIMSNw61zbG8gb2Rkw61sdS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6MTQ1Cittc2dpZCAiQ29ycnVwdGVkIFN1biBkaXNrIGxhYmVsIGRldGVjdGVkLiIKK21zZ3N0ciAiRGV0ZWtvdsOhbmEgcG/FoWtvemVuw6Egam1lbm92a2EgZGlza3UgU3VuLiIKKworIzogbGlicGFydGVkL2xhYmVscy9zdW4uYzoyNjYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZGlzayBDSFMgZ2VvbWV0cnkgKCVkLCVkLCVkKSByZXBvcnRlZCBieSB0aGUgb3BlcmF0aW5nIHN5c3RlbSBkb2VzIG5vdCAiCisibWF0Y2ggdGhlIGdlb21ldHJ5IHN0b3JlZCBvbiB0aGUgZGlzayBsYWJlbCAoJWQsJWQsJWQpLiIKK21zZ3N0ciAiIgorIkdlb21ldHJpZSBkaXNrdSBDSFMgKCVkLCVkLCVkKSBuZW9kcG92w61kw6EgZ2VvbWV0cmlpIHVsb8W+ZW7DqSB2IGptZW5vdmNlIGRpc2t1ICIKKyIoJWQsJWQsJWQpLiIKKworIzogbGlicGFydGVkL2xhYmVscy9zdW4uYzoyODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGRpc2sgbGFiZWwgZGVzY3JpYmVzIGEgZGlzayBiaWdnZXIgdGhhbiAlcy4iCittc2dzdHIgIkptZW5vdmthIGRpc2t1IHBvcGlzdWplIGRpc2sgdsSbdMWhw60gbmXFviAlcy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6NDQyCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBkaXNrIGhhcyAlZCBjeWxpbmRlcnMsIHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbWF4aW11bSBvZiA2NTUzNi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9zdW4uYzo3MzcKK21zZ2lkICIiCisiVGhlIFdob2xlIERpc2sgcGFydGl0aW9uIGlzIHRoZSBvbmx5IGF2YWlsYWJsZSBvbmUgbGVmdC4gIEdlbmVyYWxseSwgaXQgaXMgIgorIm5vdCBhIGdvb2QgaWRlYSB0byBvdmVyd3JpdGUgdGhpcyBwYXJ0aXRpb24gd2l0aCBhIHJlYWwgb25lLiAgU29sYXJpcyBtYXkgIgorIm5vdCBiZSBhYmxlIHRvIGJvb3Qgd2l0aG91dCBpdCwgYW5kIFNJTE8gKHRoZSBzcGFyYyBib290IGxvYWRlcikgYXBwcmVjaWF0ZXMgIgorIml0IGFzIHdlbGwuIgorbXNnc3RyICIiCisiSmVkaW7DvSB6YsO9dmFqw61jw60gb2Rkw61sIGplIG9kZMOtbCBDZWzDvSBkaXNrLiBPYmVjbsSbIG5lbsOtIGRvYnLDvSBuw6FwYWQgdGVudG8gIgorIm9kZMOtbCBwxZllcHNhdCBza3V0ZcSNbsO9bSBvZGTDrWxlbS4gQmV6IG7Em2ogbW/Fvm7DoSBuZWJ1ZGUgbW/Fvm7DqSB6YXbDqXN0IFNvbGFyaXMgYSAiCisiU0lMTyAoemF2YWTEm8SNIHN5c3TDqW11IHBybyBzcGFyYykgamVqIHRha8OpIG9jZW7DrS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6NzUyCittc2dpZCAiU3VuIGRpc2sgbGFiZWwgaXMgZnVsbC4iCittc2dzdHIgIkptZW5vdmthIGRpc2t1IFN1biBqZSBwbG7DoS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjE2MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgb3BlbmluZyBkZXZpY2UgJyVzJyBmYWlsZWQuXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzoxNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHNlZWtpbmcgZGV2aWNlICclcycgZmFpbGVkLlxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6MTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyB3cml0aW5nIHRvIGRldmljZSAnJXMnIGZhaWxlZCxcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjE3NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgcmVhZGluZyBmcm9tIGRldmljZSAnJXMnIGZhaWxlZC5cbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjE3OQorIywgYy1mb3JtYXQKK21zZ2lkICJGYXRhbCBlcnJvclxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQxOAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIFZUT0MgbGFiZWxzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0MjQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBWVE9DIEZNVDEgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDMxCittc2dpZCAiQ291bGQgbm90IHJlYWQgVlRPQyBGTVQ0IERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQzOAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIFZUT0MgRk1UNSBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0NDUKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBWVE9DIEZNVDcgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDYyCittc2dpZCAiQ291bGQgbm90IHdyaXRlIFZUT0MgbGFiZWxzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0NjgKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgVlRPQyBGTVQxIERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQ3NQorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBWVE9DIEZNVDQgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDgyCittc2dpZCAiQ291bGQgbm90IHdyaXRlIFZUT0MgRk1UNSBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0ODkKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgVlRPQyBGTVQ3IERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9saWJwYXJ0ZWQuYzoyOTYgbGlicGFydGVkL2xpYnBhcnRlZC5jOjMxNgorbXNnaWQgIk91dCBvZiBtZW1vcnkuIgorbXNnc3RyICJOZWRvc3RhdGVrIHBhbcSbdGkuIgorCisjOiBsaWJwYXJ0ZWQvdW5pdC5jOjEzOQorbXNnaWQgIkNhbm5vdCBnZXQgdW5pdCBzaXplIGZvciBzcGVjaWFsIHVuaXQgJ0NPTVBBQ1QnLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvdW5pdC5jOjM4NgorIywgYy1mb3JtYXQKK21zZ2lkICJcIiVzXCIgaGFzIGludmFsaWQgc3ludGF4IGZvciBsb2NhdGlvbnMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC91bml0LmM6Mzk0CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBtYXhpbXVtIGhlYWQgdmFsdWUgaXMgJWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC91bml0LmM6NDAxCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBtYXhpbXVtIHNlY3RvciB2YWx1ZSBpcyAlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL3VuaXQuYzo0MTMgbGlicGFydGVkL3VuaXQuYzo1NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGxvY2F0aW9uICVzIGlzIG91dHNpZGUgb2YgdGhlIGRldmljZSAlcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL3VuaXQuYzo1MjcKK21zZ2lkICJJbnZhbGlkIG51bWJlci4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FmZnMuYzo2MyBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXBmcy5jOjU2CisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXNmcy5jOjcwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBhbGxvY2F0ZSBwYXJ0aXRpb24gYmxvY2tcbiIKK21zZ3N0ciAiT8SNZWvDoXbDoW0gxI3DrXNsbyBvZGTDrWx1LiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FmZnMuYzo3OCBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXBmcy5jOjcwCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXNmcy5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGFsbG9jYXRlIGJsb2NrXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FmZnMuYzo4MyBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXBmcy5jOjc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogQ291bGRuJ3QgcmVhZCBib290IGJsb2NrICVsbHVcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYWZmcy5jOjk5IGxpYnBhcnRlZC9mcy9hbWlnYS9hcGZzLmM6ODYKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hc2ZzLmM6OTIgbGlicGFydGVkL2ZzL2FtaWdhL2FzZnMuYzoxMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBDb3VsZG4ndCByZWFkIHJvb3QgYmxvY2sgJWxsdVxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jOjcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGFsbG9jYXRlIGlkIGxpc3QgZWxlbWVudFxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IENvdWxkbid0IHJlYWQgYmxvY2sgJWxsdVxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jOjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEJhZCBjaGVja3N1bSBvbiBibG9jayAlbGx1IG9mIHR5cGUgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzoyMTIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogQ291bGRuJ3Qgd3JpdGUgYmxvY2sgJWRcbiIKK21zZ3N0ciAiJXMgcMWZaSB6w6FwaXN1IG5hICVzIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzoyNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gYWxsb2NhdGUgZGlza19zcGVjaWZpYyByZGIgYmxvY2tcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzoyODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBEaWRuJ3QgZmluZCByZGIgYmxvY2ssIHNob3VsZCBuZXZlciBoYXBwZW5cbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzozMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gcmVhZCBwYXJ0aXRpb24gYmxvY2sgJWxsdVxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo4NyBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6MTEyCittc2dpZCAiSW5jb25zaXN0ZW50IGdyb3VwIGRlc2NyaXB0b3JzISIKK21zZ3N0ciAiTmVrb256aXN0ZW50bsOtIGRlc2tyaXB0b3J5IHNrdXBpbiEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo5MSBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6MTE2CisjLCBmdXp6eQorbXNnaWQgIkZpbGUgc3lzdGVtIGZ1bGwhIgorbXNnc3RyICJTeXN0w6ltIHNvdWJvcsWvIHBsbsO9ISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjY4NgorIywgZnV6enkKK21zZ2lkICJJbnZhbGlkIHN1cGVyYmxvY2suICBBcmUgeW91IHN1cmUgdGhpcyBpcyBhbiBleHQyIGZpbGUgc3lzdGVtPyIKK21zZ3N0ciAiTmVwbGF0bsO9IHN1cGVyYmxvay4gSnN0ZSBzaSBqaXN0aSwgxb5lIHRvdG8gamUgc3lzdMOpbSBzb3Vib3LFryBleHQyPyIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjcwMCBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjY1OAorIywgZnV6enkKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgZXJyb3JzISAgWW91IHNob3VsZCBydW4gZTJmc2NrLiIKK21zZ3N0ciAiU3lzdMOpbSBzb3Vib3LFryBtw6EgY2h5YnkhIE3Em2xpIGJ5c3RlIHNwdXN0aXQgZTJmc2NrLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjcxMQorIywgZnV6enkKK21zZ2lkICIiCisiRmlsZSBzeXN0ZW0gd2FzIG5vdCBjbGVhbmx5IHVubW91bnRlZCEgIFlvdSBzaG91bGQgcnVuIGUyZnNjay4gIE1vZGlmeWluZyBhbiAiCisidW5jbGVhbiBmaWxlIHN5c3RlbSBjb3VsZCBjYXVzZSBzZXZlcmUgY29ycnVwdGlvbi4iCittc2dzdHIgIiIKKyJTeXN0w6ltIHNvdWJvcsWvIG5lYnlsIMSNaXN0xJsgb2Rwb2plbiEgTcSbbGkgYnlzdGUgZTJmc2NrLiDDmnByYXZ5IG5lxI1pc3TDqWhvICIKKyJzeXN0w6ltdSBzb3Vib3LFryBtb2hvdSB6cMWvc29iaXQgdsOhxb5uw6kgcG/FoWtvemVuw60gZGF0LiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjczMQorIywgZnV6enkKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgYW4gaW5jb21wYXRpYmxlIGZlYXR1cmUgZW5hYmxlZC4iCittc2dzdHIgIlN5c3TDqW0gc291Ym9yxa8gbcOhIHBvdm9sZW5vdSBuZWtvbXBhdGliaWxuw60gdmxhc3Rub3N0IgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6NzQyCittc2dpZCAiRXJyb3IgYWxsb2NhdGluZyBidWZmZXIgY2FjaGUuIgorbXNnc3RyICJDaHliYSBwxZlpIGFsb2thY2kgYnVmZmVyIGNhY2hlLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9pbm9kZV9yZWxvY2F0b3IuYzoxMTQKKyMsIGZ1enp5Cittc2dpZCAiIgorIkZvdW5kIGFuIGlub2RlIHdpdGggYSBpbmNvcnJlY3QgbGluayBjb3VudC4gIEJldHRlciBnbyBydW4gZTJmc2NrIGZpcnN0ISIKK21zZ3N0ciAiIgorIk5hxaFlbCBqc2VtIGlub2RlIHMgbmVzcHLDoXZuw71tIHBvxI10ZW0gb2RrYXrFry4gUmFkxaFpIG5lamTFmcOtdiBzcHVzxaV0ZSBlMmZzY2suIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2lub2RlX3JlbG9jYXRvci5jOjQ4NworbXNnaWQgIk5vdCBlbm91Z2ggZnJlZSBpbm9kZXMhIgorbXNnc3RyICJOZWRvc3RhdGVrIHZvbG7DvWNoIGlub2TFryEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6MjIzCisjLCBmdXp6eQorbXNnaWQgIkZpbGUgc3lzdGVtIGlzIHRvbyBmdWxsIHRvIHJlbW92ZSBhIGdyb3VwISIKK21zZ3N0ciAiU3lzdMOpbSBzb3Vib3LFryBqZSBwxZnDrWxpxaEgcGxuw70gbmEgdG8sIGFieWNoIG1vaGwgb2RzdHJhbml0IHNrdXBpbnUhIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjIzMgorIywgZnV6enkKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgdG9vIG1hbnkgYWxsb2NhdGVkIGlub2RlcyB0byByZW1vdmUgYSBncm91cCEiCittc2dzdHIgIiIKKyJTeXN0w6ltIHNvdWJvcsWvIG3DoSBwxZnDrWxpxaEgbW5vaG8gYWxva292YW7DvWNoIGlub2TFryBuYSB0bywgYWJ5Y2ggbW9obCBvZHN0cmFuaXQgIgorInNrdXBpbnUhIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjQ5MQorbXNnaWQgImFkZGluZyBncm91cHMiCittc2dzdHIgInDFmWlkw6F2w6FtIHNrdXBpbnkiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NTI4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGZpbGUgc3lzdGVtIGlzIHRvbyBmdWxsIHRvIHJlc2l6ZSBpdCB0byAlaSBibG9ja3MuICBTb3JyeS4iCittc2dzdHIgIiIKKyJWw6HFoSBzeXN0w6ltIHNvdWJvcsWvIGplIHDFmcOtbGnFoSBwbG7DvSBuYSB0bywgYWJ5Y2ggbW9obCB6bcSbbml0IGplaG8gdmVsaWtvc3QgbmEgJSIKKyJkIGJsb2vFry4gTGl0dWppLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo1MzgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGZpbGUgc3lzdGVtIGhhcyB0b28gbWFueSBvY2N1cGllZCBpbm9kZXMgdG8gcmVzaXplIGl0IHRvICVpIGJsb2Nrcy4gICIKKyJTb3JyeS4iCittc2dzdHIgIiIKKyJWw6HFoSBzeXN0w6ltIHNvdWJvcsWvIG3DoSBwxZnDrWxpxaEgbW5vaG8gcG91xb5pdMO9Y2ggaW5vZMWvIG5hIHRvLCBhYnljaCBtb2hsIHptxJtuaXQgIgorImplaG8gdmVsaWtvc3QgbmEgJWkgYmxva8WvLiBMaXR1amkuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjY2NgorIywgZnV6enkKK21zZ2lkICJGaWxlIHN5c3RlbSB3YXMgbm90IGNsZWFubHkgdW5tb3VudGVkISAgWW91IHNob3VsZCBydW4gZTJmc2NrLiIKK21zZ3N0ciAiU3lzdMOpbSBzb3Vib3LFryBuZWJ5bCBzcHLDoXZuxJsgb2Rwb2plbiEgTcSbbGkgYnlzdGUgZTJmc2NrLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo2NzUKK21zZ2lkICIiCisiVGhlIGZpbGUgc3lzdGVtIGhhcyB0aGUgJ2Rpcl9pbmRleCcgZmVhdHVyZSBlbmFibGVkLiAgUGFydGVkIGNhbiBvbmx5IHJlc2l6ZSAiCisidGhlIGZpbGUgc3lzdGVtIGlmIGl0IGRpc2FibGVzIHRoaXMgZmVhdHVyZS4gIFlvdSBjYW4gZW5hYmxlIGl0IGxhdGVyIGJ5ICIKKyJydW5uaW5nICd0dW5lMmZzIC1PIGRpcl9pbmRleCBERVZJQ0UnIGFuZCB0aGVuICdlMmZzY2sgLWZEIERFVklDRScuIgorbXNnc3RyICIiCisiU3lzdMOpbSBzb3Vib3LFryBtw6EgcG92b2xlbnUgdmxhc3Rub3N0ICdkaXJfaW5kZXgnLiBQYXJ0ZWQgbcWvxb5lIHptxJtuaXQgIgorInZlbGlrb3N0IHN5c3TDqW11IHNvdWJvcsWvLCBqZW4gcG9rdWQgdHV0byB2bGFzdG5vc3QgemFrw6HFvmUuIE3Fr8W+ZXRlIGppIHBvemTEm2ppICIKKyJwb3ZvbGl0IHNwdcWhdMSbbsOtbSAndHVuZTJmcyAtTyBkaXJfaW5kZXggWkHFmMONWkVOw40nIGEgcGFrICdlMmZzY2sgLWZEICIKKyJaQcWYw41aRU7DjScuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjY5MQorbXNnaWQgIiIKKyJBIHJlc2l6ZSBvcGVyYXRpb24gb24gdGhpcyBmaWxlIHN5c3RlbSB3aWxsIHVzZSBFWFBFUklNRU5UQUwgY29kZVxuIgorInRoYXQgTUFZIENPUlJVUFQgaXQgKGFsdGhvdWdoIG5vIG9uZSBoYXMgcmVwb3J0ZWQgYW55IHN1Y2ggZGFtYWdlIHlldCkuXG4iCisiWW91IHNob3VsZCBhdCBsZWFzdCBiYWNrdXAgeW91ciBkYXRhIGZpcnN0LCBhbmQgcnVuICdlMmZzY2sgLWYnIGFmdGVyd2FyZHMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfYmxvY2tfcmVsb2NhdG9yLmM6MTk4CisjLCBmdXp6eQorbXNnaWQgIkNyb3NzLWxpbmtlZCBibG9ja3MgZm91bmQhICBCZXR0ZXIgZ28gcnVuIGUyZnNjayBmaXJzdCEiCittc2dzdHIgIk5hbGV6ZW55IGJsb2t5IHMga8WZw63Fvm92w71taSBvZGthenkhIFJhZMWhaSBuZWpkxZnDrXYgc3B1c8WldGUgZTJmc2NrISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9ibG9ja19yZWxvY2F0b3IuYzo1MzcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrICVpIGhhcyBubyByZWZlcmVuY2U/ICBXZWlyZC4iCittc2dzdHIgIkJsb2sgJWkgbmVtw6Egb2RrYXo/IERpdm7DqSIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9ibG9ja19yZWxvY2F0b3IuYzo3MzcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrICVpIHNob3VsZG4ndCBoYXZlIGJlZW4gbWFya2VkICglZCwgJWQpISIKK21zZ3N0ciAiQmxvayAlaSBieSBuZW3Em2wgYsO9dCBvem5hxI1lbiEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2ludGVyZmFjZS5jOjE4NgorIywgZnV6enkKK21zZ2lkICIiCisiVGhlIGV4dDIgZmlsZSBzeXN0ZW0gcGFzc2VkIGEgYmFzaWMgY2hlY2suICBGb3IgYSBtb3JlIGNvbXByZWhlbnNpdmUgY2hlY2ssICIKKyJ1c2UgdGhlIGUyZnNjayBwcm9ncmFtLiIKK21zZ3N0ciAiIgorIlN5c3TDqW0gc291Ym9yxa8gZXh0MiBwcm/FoWVsIHrDoWtsYWRuw60ga29udHJvbG91LiBQcm8gcG9kcm9ibsSbasWhw60ga29udHJvbHUgIgorInBvdcW+aWp0ZSBwcm9ncmFtIGUyZnNjay4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2ludGVyZmFjZS5jOjIwMworbXNnaWQgIlNvcnJ5LCBjYW4ndCBtb3ZlIHRoZSBzdGFydCBvZiBleHQyIHBhcnRpdGlvbnMgeWV0ISIKK21zZ3N0ciAiTGl0dWppLCBqZcWhdMSbIG5ldW3DrW0gcMWZZXN1bm91dCB6YcSNw6F0ZWsgb2Rkw61sxa8gZXh0MiEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfYnVmZmVyLmM6ODIKK21zZ2lkICJDb3VsZG4ndCBmbHVzaCBidWZmZXIgY2FjaGUhIgorbXNnc3RyICJOZW1vaHUgdnlwcsOhemRuaXQgYnVmZmVyIGNhY2hlISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9ta2ZzLmM6MTYyCittc2dpZCAid3JpdGluZyBwZXItZ3JvdXAgbWV0YWRhdGEiCittc2dzdHIgInphcGlzdWppIG1ldGFkYXRhIHNrdXBpbiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9ta2ZzLmM6NTY0Cittc2dpZCAiRmlsZSBzeXN0ZW0gdG9vIHNtYWxsIGZvciBleHQyLiIKK21zZ3N0ciAiU3lzdMOpbSBzb3Vib3LFryBwxZnDrWxpxaEgbWFsw70gcHJvIGV4dDIuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NhbGMuYzoxMzUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgbmVlZCAlcyBvZiBmcmVlIGRpc2sgc3BhY2UgdG8gc2hyaW5rIHRoaXMgcGFydGl0aW9uIHRvIHRoaXMgc2l6ZS4gICIKKyJDdXJyZW50bHksIG9ubHkgJXMgaXMgZnJlZS4iCittc2dzdHIgIiIKKyJQcm8gem1lbsWhZW7DrSB0b2hvdG8gb2Rkw61sdSBuYSB0dXRvIHZlbGlrb3N0IHBvdMWZZWJ1amV0ZSAlZE0gdm9sbsOpaG8gbcOtc3RhICIKKyIobW9tZW50w6FsbsSbIG3DoXRlIHZvbG7DvWNoIGplbiAlZE0pIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvbnRleHQuYzo1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2x1c3RlciBzdGFydCBkZWx0YSA9ICVkLCB3aGljaCBpcyBub3QgYSBtdWx0aXBsZSBvZiB0aGUgY2x1c3RlciBzaXplICVkLiIKK21zZ3N0ciAiWm3Em25hIHphxI3DoXRrdSBjbHVzdGVydSA9ICVkLCBjb8W+IG5lbsOtIG7DoXNvYmVrIHZlbGlrb3N0aSBjbHVzdGVydSAlZC4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvZmF0LmM6MzA4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJQYXJ0aXRpb24gdG9vIGJpZy9zbWFsbCBmb3IgYSAlcyBmaWxlIHN5c3RlbS4iCittc2dzdHIgIk9kZMOtbCBqZSBwxZnDrWxpxaEgdmVsa8O9L21hbMO9IHBybyBzeXN0w6ltIHNvdWJvcsWvICVzIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jOjQ3NAorbXNnaWQgIiIKKyJUaGUgRkFUcyBkb24ndCBtYXRjaC4gIElmIHlvdSBkb24ndCBrbm93IHdoYXQgdGhpcyBtZWFucywgdGhlbiBzZWxlY3QgIgorImNhbmNlbCwgcnVuIHNjYW5kaXNrIG9uIHRoZSBmaWxlIHN5c3RlbSwgYW5kIHRoZW4gY29tZSBiYWNrLiIKK21zZ3N0ciAiIgorIlRhYnVsa3kgRkFUIHNpIG5lb2Rwb3bDrWRhasOtLiBQb2t1ZCBuZXbDrXRlLCBjbyB0byB6bmFtZW7DoSwgenZvbHRlIFpydcWhaXQsICIKKyJzcHVzxaV0ZSBuYSBzeXN0w6ltdSBzb3Vib3LFryBzY2FuZGlzayBhIHBhayBzZSB2cmHFpXRlLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9mYXQuYzo1MTQKK21zZ2lkICJUaGVyZSBhcmUgbm8gcG9zc2libGUgY29uZmlndXJhdGlvbnMgZm9yIHRoaXMgRkFUIHR5cGUuIgorbXNnc3RyICJQcm8gdGVudG8gdHlwIEZBVCBuZWV4aXN0dWplIG1vxb5uw6Ega29uZmlndXJhY2UuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jOjUyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRmlsZSBzeXN0ZW0gZG9lc24ndCBoYXZlIGV4cGVjdGVkIHNpemVzIGZvciBXaW5kb3dzIHRvIGxpa2UgaXQuICBDbHVzdGVyICIKKyJzaXplIGlzICVkayAoJWRrIGV4cGVjdGVkKTsgbnVtYmVyIG9mIGNsdXN0ZXJzIGlzICVkICglZCBleHBlY3RlZCk7IHNpemUgb2YgIgorIkZBVHMgaXMgJWQgc2VjdG9ycyAoJWQgZXhwZWN0ZWQpLiIKK21zZ3N0ciAiIgorIlN5c3TDqW0gc291Ym9yxa8gbmVtw6Egb8SNZWvDoXZhbsOpIHZlbGlrb3N0aSwgYWJ5IGplaiBXaW5kb3dzIG3Em2x5IHLDoWR5LiBWZWxpa29zdCAiCisiY2x1c3RlcnUgamUgJWRrIChvxI1la8OhdsOhbm8gJWRrKTsgcG/EjWV0IGNsdXN0ZXLFryBqZSAlZCAob8SNZWvDoXbDoW5vICVkKTsgIgorInZlbGlrb3N0IEZBVCBqZSAlZCBzZWt0b3LFryAob8SNZWvDoXbDoW5vICVkKS4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvZmF0LmM6NTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGaWxlIHN5c3RlbSBpcyByZXBvcnRpbmcgdGhlIGZyZWUgc3BhY2UgYXMgJWQgY2x1c3RlcnMsIG5vdCAlZCBjbHVzdGVycy4iCittc2dzdHIgIlN5c3TDqW0gc291Ym9yxa8gb3puYW11amUgdm9sbsOpIG3DrXN0byBqYWtvICVkIGNsdXN0ZXLFrywgbmUgJWQgY2x1c3RlcsWvLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9mYXQuYzo4NzQKKyMsIGZ1enp5Cittc2dpZCAiIgorIkdOVSBQYXJ0ZWQgd2FzIG1pc2NvbXBpbGVkOiB0aGUgRkFUIGJvb3Qgc2VjdG9yIHNob3VsZCBiZSA1MTIgYnl0ZXMuICBGQVQgIgorInN1cHBvcnQgd2lsbCBiZSBkaXNhYmxlZC4iCittc2dzdHIgIiIKKyJHTlUgcGFydGVkIGJ5bCBuZXNwcsOhdm7EmyBwxZllbG/FvmVuOyB6YXbDoWTEm2PDrSBzZWt0b3IgRkFUIGJ5IG3Em2wgYsO9dCA1MTIgYmFqdMWvLiAiCisiUG9kcG9yYSBGQVQgYnVkZSB6YWvDoXrDoW5hLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzoxNTkKKyMsIGZ1enp5Cittc2dpZCAiIgorIlRoZXJlJ3Mgbm90IGVub3VnaCByb29tIGluIHRoZSByb290IGRpcmVjdG9yeSBmb3IgYWxsIG9mIHRoZSBmaWxlcy4gIEVpdGhlciAiCisiY2FuY2VsLCBvciBpZ25vcmUgdG8gbG9zZSB0aGUgZmlsZXMuIgorbXNnc3RyICIiCisiViBrb8WZZW5vdsOpbSBhZHJlc8OhxZlpIG5lbsOtIGRvc3RhdGVrIG3DrXN0YSBwcm8gdsWhZWNobnkgc291Ym9yxa8uIFp2b2x0ZSBidcSPICIKKyJacnXFoWl0LCBuZWJvIElnbm9yb3ZhdCBwcm8genRyw6F0dSB0xJtjaHRvIHNvdWJvcsWvLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzozMDAKK21zZ2lkICJFcnJvciB3cml0aW5nIHRvIHRoZSByb290IGRpcmVjdG9yeS4iCittc2dzdHIgIkNoeWJhIHDFmWkgemFwaXNvdsOhbsOtIGRvIGtvxZllbm92w6lobyBhZHJlc8OhxZllLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo0ODkKKyMsIGZ1enp5Cittc2dpZCAiSWYgeW91IGxlYXZlIHlvdXIgZmlsZSBzeXN0ZW0gYXMgRkFUMTYsIHRoZW4geW91IHdpbGwgaGF2ZSBubyBwcm9ibGVtcy4iCittc2dzdHIgIiIKKyJQb2t1ZCBzdsWvaiBzeXN0w6ltIHNvdWJvcsWvIHBvbmVjaMOhdGUgamFrbyBGQVQxNiwgbmVidWRldGUgbcOtdCDFvsOhZG7DqSBwcm9ibMOpbXkuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjQ5MgorbXNnaWQgIiIKKyJJZiB5b3UgY29udmVydCB0byBGQVQxNiwgYW5kIE1TIFdpbmRvd3MgaXMgaW5zdGFsbGVkIG9uIHRoaXMgcGFydGl0aW9uLCB0aGVuICIKKyJ5b3UgbXVzdCByZS1pbnN0YWxsIHRoZSBNUyBXaW5kb3dzIGJvb3QgbG9hZGVyLiAgSWYgeW91IHdhbnQgdG8gZG8gdGhpcywgeW91ICIKKyJzaG91bGQgY29uc3VsdCB0aGUgUGFydGVkIG1hbnVhbCAob3IgeW91ciBkaXN0cmlidXRpb24ncyBtYW51YWwpLiIKK21zZ3N0ciAiIgorIlBva3VkIHDFmWV2ZWRldGUgbmEgRkFUMTYgYSBuYSB0b210byBvZGTDrWx1IGpzb3UgbmFpbnN0YWxvdsOhbnkgTVMgV2luZG93cywgIgorIm11c8OtdGUgcmVpbnN0YWxvdmF0IHphdmFkxJvEjSBzeXN0w6ltdSBNUyBXaW5kb3dzLiBQb2t1ZCB0byBjaGNldGUgdWTEm2xhdCwgbcSbbGkgIgorImJ5c3RlIHNpIHDFmWXEjcOtc3QgbWFudcOhbCBQYXJ0ZWR1IChuZWJvIG1hbnXDoWwgc3bDqSBkaXN0cmlidWNlKS4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTAwCittc2dpZCAiIgorIklmIHlvdSBsZWF2ZSB5b3VyIGZpbGUgc3lzdGVtIGFzIEZBVDMyLCB0aGVuIHlvdSB3aWxsIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyAiCisicHJvYmxlbXMuIgorbXNnc3RyICIiCisiUG9rdWQgc3bFr2ogc3lzdMOpbSBzb3Vib3LFryBwb25lY2jDoXRlIGpha28gRkFUMTYsIG5lenDFr3NvYsOtdGUgxb7DoWRuw6kgbm92w6kgIgorInByb2Jsw6lteS4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTA0Cittc2dpZCAiIgorIklmIHlvdSBjb252ZXJ0IHRvIEZBVDMyLCBhbmQgTVMgV2luZG93cyBpcyBpbnN0YWxsZWQgb24gdGhpcyBwYXJ0aXRpb24sIHRoZW4gIgorInlvdSBtdXN0IHJlLWluc3RhbGwgdGhlIE1TIFdpbmRvd3MgYm9vdCBsb2FkZXIuICBJZiB5b3Ugd2FudCB0byBkbyB0aGlzLCB5b3UgIgorInNob3VsZCBjb25zdWx0IHRoZSBQYXJ0ZWQgbWFudWFsIChvciB5b3VyIGRpc3RyaWJ1dGlvbidzIG1hbnVhbCkuICBBbHNvLCAiCisiY29udmVydGluZyB0byBGQVQzMiB3aWxsIG1ha2UgdGhlIGZpbGUgc3lzdGVtIHVucmVhZGFibGUgYnkgTVMgRE9TLCBNUyAiCisiV2luZG93cyA5NWEsIGFuZCBNUyBXaW5kb3dzIE5ULiIKK21zZ3N0ciAiIgorIlBva3VkIHDFmWV2ZWRldGUgbmEgRkFUMzIgYSBuYSB0b210byBvZGTDrWx1IGpzb3UgbmFpbnN0YWxvdsOhbnkgTVMgV2luZG93cywgIgorIm11c8OtdGUgcmVpbnN0YWxvdmF0IHphdmFkxJvEjSBzeXN0w6ltdSBNUyBXaW5kb3dzLiBQb2t1ZCB0byBjaGNldGUgdWTEm2xhdCwgbcSbbGkgIgorImJ5c3RlIHNpIHDFmWXEjcOtc3QgbWFudcOhbCBQYXJ0ZWR1IChuZWJvIG1hbnXDoWwgc3bDqSBkaXN0cmlidWNlKS4gUMWZZXZlZGVuw60gbmEgIgorIkZBVDMyIHRha8OpIHXEjWluw60gc3lzdMOpbSBzb3Vib3LFryBuZcSNaXRlbG7DvW0gcHJvIE1TIERPUywgTVMgV2luZG93cyA5NWEgYSBNUyAiCisiV2luZG93cyBOVC4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzICAlcyAgJXMiCittc2dzdHIgIiVzICAlcyAgJXMiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTE5Cittc2dpZCAiV291bGQgeW91IGxpa2UgdG8gdXNlIEZBVDMyPyIKK21zZ3N0ciAiQ2hjZXRlIHBvdcW+w610IEZBVDMyPyIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1NTAgbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgICVzIgorbXNnc3RyICIlcyAgJXMiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTUxCittc2dpZCAiIgorIlRoZSBmaWxlIHN5c3RlbSBjYW4gb25seSBiZSByZXNpemVkIHRvIHRoaXMgc2l6ZSBieSBjb252ZXJ0aW5nIHRvIEZBVDE2LiIKK21zZ3N0ciAiIgorIlZlbGlrb3N0IHN5c3TDqW11IHNvdWJvcsWvIG3Fr8W+ZSBiw710IG5hIHR1dG8gaG9kbm90dSB6bcSbbsSbbmEgamVuIHDFmWV2b2RlbSBuYSAiCisiRkFUMTYuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjU2NworbXNnaWQgIiIKKyJUaGUgZmlsZSBzeXN0ZW0gY2FuIG9ubHkgYmUgcmVzaXplZCB0byB0aGlzIHNpemUgYnkgY29udmVydGluZyB0byBGQVQzMi4iCittc2dzdHIgIiIKKyJWZWxpa29zdCBzeXN0w6ltdSBzb3Vib3LFryBtxa/FvmUgYsO9dCBuYSB0dXRvIGhvZG5vdHUgem3Em27Em25hIGplbiBwxZlldm9kZW0gbmEgIgorIkZBVDMyLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1ODAKKyMsIGZ1enp5Cittc2dpZCAiIgorIkdOVSBQYXJ0ZWQgY2Fubm90IHJlc2l6ZSB0aGlzIHBhcnRpdGlvbiB0byB0aGlzIHNpemUuICBXZSdyZSB3b3JraW5nIG9uIGl0ISIKK21zZ3N0ciAiIgorIkdOVSBQYXJ0ZWQgbmV1bcOtIHptxJtuaXQgdmVsaWtvc3QgdG9ob3RvIG9kZMOtbHUgbmEgdHV0byBob2Rub3R1LiBQcmFjdWplbWUgbmEgIgorInRvbSEiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjQ5IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjU2Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGludmFsaWQgc2lnbmF0dXJlIGZvciBhIEZBVCBmaWxlIHN5c3RlbS4iCittc2dzdHIgIlN5c3TDqW0gc291Ym9yxa8gbcOhIG5lcGxhdG7DvSBwb2RwaXMgcHJvIHN5c3TDqW0gc291Ym9yxa8gRkFULiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6NjQKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgYW4gaW52YWxpZCBzZWN0b3Igc2l6ZSBmb3IgYSBGQVQgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICJTeXN0w6ltIHNvdWJvcsWvIG3DoSBuZXBsYXRub3UgdmVsaWtvc3Qgc2VrdG9ydSBwcm8gc3lzdMOpbSBzb3Vib3LFryBGQVQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo3MQorbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyBhbiBpbnZhbGlkIGNsdXN0ZXIgc2l6ZSBmb3IgYSBGQVQgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICJTeXN0w6ltIHNvdWJvcsWvIG3DoSBuZXBsYXRub3UgdmVsaWtvc3QgY2x1c3RlcnUgcHJvIHN5c3TDqW0gc291Ym9yxa8gRkFULiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6NzgKKyMsIGZ1enp5Cittc2dpZCAiIgorIkZpbGUgc3lzdGVtIGhhcyBhbiBpbnZhbGlkIG51bWJlciBvZiByZXNlcnZlZCBzZWN0b3JzIGZvciBhIEZBVCBmaWxlIHN5c3RlbS4iCittc2dzdHIgIiIKKyJTeXN0w6ltIHNvdWJvcsWvIG3DoSBuZXBsYXRuw70gcG/EjWV0IHJlemVydm92YW7DvWNoIHNla3RvcsWvIHBybyBzeXN0w6ltIHNvdWJvcsWvICIKKyJGQVQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo4NQorIywgZnV6enkKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgYW4gaW52YWxpZCBudW1iZXIgb2YgRkFUcy4iCittc2dzdHIgIlN5c3TDqW0gc291Ym9yxa8gbcOhIG5lcGxhdG7DvSBwb8SNZXQgRkFULiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6MTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGlzIGZpbGUgc3lzdGVtIGhhcyBhIGxvZ2ljYWwgc2VjdG9yIHNpemUgb2YgJWQuICBHTlUgUGFydGVkIGlzIGtub3duIG5vdCAiCisidG8gd29yayBwcm9wZXJseSB3aXRoIHNlY3RvciBzaXplcyBvdGhlciB0aGFuIDUxMiBieXRlcy4iCittc2dzdHIgIiIKKyJTeXN0w6ltIHNvdWJvcsWvIG3DoSBsb2dpY2tvdSB2ZWxpa29zdCBzZWt0b3J1ICVkLiBWw60gc2UsIMW+ZSBHTlUgUGFydGVkICIKKyJuZXByYWN1amUgc3Byw6F2bsSbIHMgdmVsaWtvc3TDrSBzZWt0b3J1IGppbm91IG5lxb4gNTEyIGJhanTFry4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjE2NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGUgc3lzdGVtJ3MgQ0hTIGdlb21ldHJ5IGlzICglZCwgJWQsICVkKSwgd2hpY2ggaXMgaW52YWxpZC4gIFRoZSAiCisicGFydGl0aW9uIHRhYmxlJ3MgQ0hTIGdlb21ldHJ5IGlzICglZCwgJWQsICVkKS4gIElmIHlvdSBzZWxlY3QgSWdub3JlLCB0aGUgIgorImZpbGUgc3lzdGVtJ3MgQ0hTIGdlb21ldHJ5IHdpbGwgYmUgbGVmdCB1bmNoYW5nZWQuICBJZiB5b3Ugc2VsZWN0IEZpeCwgdGhlICIKKyJmaWxlIHN5c3RlbSdzIENIUyBnZW9tZXRyeSB3aWxsIGJlIHNldCB0byBtYXRjaCB0aGUgcGFydGl0aW9uIHRhYmxlJ3MgQ0hTICIKKyJnZW9tZXRyeS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6MjEzCittc2dpZCAiRkFUIGJvb3Qgc2VjdG9yIHNheXMgbG9naWNhbCBzZWN0b3Igc2l6ZSBpcyAwLiAgVGhpcyBpcyB3ZWlyZC4gIgorbXNnc3RyICIiCisiWmF2w6FkxJtjw60gc2VrdG9yIEZBVCDFmcOta8OhLCDFvmUgbG9naWNrw6EgdmVsaWtvc3Qgc2VrdG9ydSBqZSAwLiBUbyBqZSBkaXZuw6kuICIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6MjE5Cittc2dpZCAiRkFUIGJvb3Qgc2VjdG9yIHNheXMgdGhlcmUgYXJlIG5vIEZBVCB0YWJsZXMuICBUaGlzIGlzIHdlaXJkLiAiCittc2dzdHIgIiIKKyJaYXbDoWTEm2PDrSBzZWt0b3IgRkFUIMWZw61rw6EsIMW+ZSBuZWV4aXN0dWplIMW+w6FkbsOhIHRhYnVsa2EgRkFULiBUbyBqZSBkaXZuw6kuICIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6MjI1Cittc2dpZCAiRkFUIGJvb3Qgc2VjdG9yIHNheXMgY2x1c3RlcnMgYXJlIDAgc2VjdG9ycy4gIFRoaXMgaXMgd2VpcmQuICIKK21zZ3N0ciAiWmF2w6FkxJtjw60gc2VrdG9yIEZBVCDFmcOta8OhLCDFvmUgY2x1c3RlciBqZSAwIHNla3RvcsWvLiBUbyBqZSBkaXZuw6kuICIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6MjM1CisjLCBmdXp6eQorbXNnaWQgIkZpbGUgc3lzdGVtIGlzIEZBVDEyLCB3aGljaCBpcyB1bnN1cHBvcnRlZC4iCittc2dzdHIgIlNvdWJvcm92w70gc3lzdMOpbSBqZSBGQVQxMiwgY2/FviBuZW7DrSBwb2Rwb3JvdsOhbm8uIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo0MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBpbmZvcm1hdGlvbiBzZWN0b3IgaGFzIHRoZSB3cm9uZyBzaWduYXR1cmUgKCV4KS4gIFNlbGVjdCBjYW5jZWwgZm9yIG5vdywgIgorImFuZCBzZW5kIGluIGEgYnVnIHJlcG9ydC4gIElmIHlvdSdyZSBkZXNwZXJhdGUsIGl0J3MgcHJvYmFibHkgc2FmZSB0byBpZ25vcmUuIgorbXNnc3RyICIiCisiU2VrdG9yIGluZm9ybWFjw60gbcOhIG5lc3Byw6F2bsO9IHBvZHBpcyAoJXgpLiBaYXTDrW0genZvbHRlIFpydcWhaXQgYSBwb8WhbGV0ZSAiCisiaGzDocWhZW7DrSBvIGNoeWLEmy4gUG9rdWQganN0ZSB2IMO6emvDvWNoLCBtxa/FvmV0ZSB0byBwcmF2ZMSbcG9kb2JuxJsgYmV6IG9iYXYgIgorImlnbm9yb3ZhdC4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY291bnQuYzoxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIGRpcmVjdG9yeSBlbnRyeSBmb3IgJXM6IGZpcnN0IGNsdXN0ZXIgaXMgdGhlIGVuZCBvZiBmaWxlIG1hcmtlci4iCittc2dzdHIgIsWgcGF0bsOhIHBvbG/FvmthIGFkcmVzw6HFmWUgcHJvICVzOiBwcnZuw60gY2x1c3RlciBqZSB6bmHEjWthIGtvbmNlIHNvdWJvcnUuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvdW50LmM6MTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJCYWQgRkFUOiB1bnRlcm1pbmF0ZWQgY2hhaW4gZm9yICVzLiAgWW91IHNob3VsZCBydW4gZG9zZnNjayBvciBzY2FuZGlzay4iCittc2dzdHIgIiIKKyLFoHBhdG7DoSBGQVQ6IG5ldWtvbsSNZW7DvSDFmWV0xJt6ZWMgcHJvICVzLiBNxJtsaSBieXN0ZSBzcHVzdGl0IGRvc2ZzY2sgbmVibyAiCisic2NhbmRpc2suIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvdW50LmM6MTc0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiQmFkIEZBVDogY2x1c3RlciAlZCBvdXRzaWRlIGZpbGUgc3lzdGVtIGluIGNoYWluIGZvciAlcy4gIFlvdSBzaG91bGQgcnVuICIKKyJkb3Nmc2NrIG9yIHNjYW5kaXNrLiIKK21zZ3N0ciAiIgorIsWgcGF0bsOhIEZBVDogY2x1c3RlciAlZCBqZSBtaW1vIHN5c3TDqW0gc291Ym9yxa8gdiDFmWV0xJt6Y2kgcHJvICVzLiBNxJtsaSBieXN0ZSAiCisic3B1c3RpdCBkb3Nmc2NrIG5lYm8gc2NhbmRpc2suIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvdW50LmM6MTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJCYWQgRkFUOiBjbHVzdGVyICVkIGlzIGNyb3NzLWxpbmtlZCBmb3IgJXMuICBZb3Ugc2hvdWxkIHJ1biBkb3Nmc2NrIG9yICIKKyJzY2FuZGlzay4iCittc2dzdHIgIiIKKyLFoHBhdG7DoSBGQVQ6IGNsdXN0ZXIgJWQgcHJvICVzIG3DoSBrxZnDrcW+b3bDqSBvZGthenkuIE3Em2xpIGJ5c3RlIHNwdXN0aXQgZG9zZnNjayAiCisibmVibyBzY2FuZGlzay4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY291bnQuYzoyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgJWRrLCBidXQgaXQgaGFzICVkIGNsdXN0ZXJzICglZGspLiIKK21zZ3N0ciAiJXMgamUgJWRrLCBhbGUgbcOhICVkIGNsdXN0ZXLFryAoJWRrKS4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY291bnQuYzoyNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmaWxlICVzIGlzIG1hcmtlZCBhcyBhIHN5c3RlbSBmaWxlLiAgVGhpcyBtZWFucyBtb3ZpbmcgaXQgY291bGQgY2F1c2UgIgorInNvbWUgcHJvZ3JhbXMgdG8gc3RvcCB3b3JraW5nLiIKK21zZ3N0ciAiIgorIlNvdWJvciAlcyBqZSBvem5hxI1lbiBqYWtvIHN5c3TDqW1vdsO9IHNvdWJvci4gVG8gem5hbWVuw6EsIMW+ZSBqZWhvIHDFmWVzdW4gbcWvxb5lICIKKyJ6cMWvc29iaXQsIMW+ZSBuxJtrdGVyw6kgcHJvZ3JhbXkgcMWZZXN0YW5vdSBmdW5nb3ZhdC4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvdGFibGUuYzoxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZBVCAlZCBtZWRpYSAleCBkb2Vzbid0IG1hdGNoIHRoZSBib290IHNlY3RvcidzIG1lZGlhICV4LiAgWW91IHNob3VsZCAiCisicHJvYmFibHkgcnVuIHNjYW5kaXNrLiIKK21zZ3N0ciAiIgorIkZBVCAlZCBtZWRpYSAleCBuZW9kcG92w61kw6EgbWVkaWEgJXggemF2w6FkxJtjw61obyBzZWt0b3J1LiBQcmF2ZMSbcG9kb2JuxJsgYnlzdGUgIgorIm3Em2xpIHNwdXN0aXQgc2NhbmRpc2suIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3RhYmxlLmM6MjY5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYXRfdGFibGVfc2V0OiBjbHVzdGVyICVsZCBvdXRzaWRlIGZpbGUgc3lzdGVtIgorbXNnc3RyICJmYXRfdGFibGVfc2V0OiBjbHVzdGVyICVsZCBtaW1vIHN5c3TDqW0gc291Ym9yxa8iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvdGFibGUuYzozMDEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhdF90YWJsZV9nZXQ6IGNsdXN0ZXIgJWxkIG91dHNpZGUgZmlsZSBzeXN0ZW0iCittc2dzdHIgImZhdF90YWJsZV9nZXQ6IGNsdXN0ZXIgJWxkIG1pbW8gc3lzdMOpbSBzb3Vib3LFryIKKworIzogbGlicGFydGVkL2ZzL2ZhdC90YWJsZS5jOjM0MworbXNnaWQgImZhdF90YWJsZV9hbGxvY19jbHVzdGVyOiBubyBmcmVlIGNsdXN0ZXJzIgorbXNnc3RyICJmYXRfdGFibGVfYWxsb2NfY2x1c3RlcjogbmVqc291IHZvbG7DqSBjbHVzdGVyeSIKKworIzogbGlicGFydGVkL2ZzL2xpbnV4X3N3YXAvbGludXhfc3dhcC5jOjI3NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVW5yZWNvZ25pc2VkIG9sZCBzdHlsZSBsaW51eCBzd2FwIHNpZ25hdHVyZSAnJTEwcycuIgorbXNnc3RyICJOZXJvenBvem5hbsO9IHBvZHBpcyBvZGtsw6FkYWPDrWhvIG9kZMOtbHUgbGludXh1ICclMTBzJy4iCisKKyM6IGxpYnBhcnRlZC9mcy9saW51eF9zd2FwL2xpbnV4X3N3YXAuYzozMTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVucmVjb2duaXNlZCBuZXcgc3R5bGUgbGludXggc3dhcCBzaWduYXR1cmUgJyUxMHMnLiIKK21zZ3N0ciAiTmVyb3pwb3puYW7DvSBwb2RwaXMgb2RrbMOhZGFjw61obyBvZGTDrWx1IGxpbnV4dSAnJTEwcycuIgorCisjOiBsaWJwYXJ0ZWQvZnMvbGludXhfc3dhcC9saW51eF9zd2FwLmM6MzU4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVbnJlY29nbmlzZWQgc3dzdXNwIGxpbnV4IHN3YXAgc2lnbmF0dXJlICclOXMnLiIKK21zZ3N0ciAiTmVyb3pwb3puYW7DvSBwb2RwaXMgb2RrbMOhZGFjw61obyBvZGTDrWx1IGxpbnV4dSAnJTEwcycuIgorCisjOiBsaWJwYXJ0ZWQvZnMvbGludXhfc3dhcC9saW51eF9zd2FwLmM6NDM0Cittc2dpZCAiVG9vIG1hbnkgYmFkIHBhZ2VzLiIKK21zZ3N0ciAiUMWZw61sacWhIG1ub2hvIMWhcGF0bsO9Y2ggc3Ryw6FuZWsuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2FkdmZzLmM6MTIxIGxpYnBhcnRlZC9mcy9oZnMvYWR2ZnNfcGx1cy5jOjEyMgorIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjQxNCBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NTA4CisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo1MzkgbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NjU4CisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo3NzIKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gY29udGFpbnMgZXJyb3JzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2FkdmZzX3BsdXMuYzoyODcKK21zZ2lkICJCYWQgYmxvY2tzIGNvdWxkIG5vdCBiZSByZWFkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2NhY2hlLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUcnlpbmcgdG8gcmVnaXN0ZXIgYW4gZXh0ZW50IHN0YXJ0aW5nIGF0IGJsb2NrIDB4JVgsIGJ1dCBhbm90aGVyIG9uZSBhbHJlYWR5ICIKKyJleGlzdHMgYXQgdGhpcyBwb3NpdGlvbi4gIFlvdSBzaG91bGQgY2hlY2sgdGhlIGZpbGUgc3lzdGVtISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2NhY2hlLmM6MjE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUcnlpbmcgdG8gbW92ZSBhbiBleHRlbnQgZnJvbSBibG9jayBPeCVYIHRvIGJsb2NrIE94JVgsIGJ1dCBhbm90aGVyIG9uZSAiCisiYWxyZWFkeSBleGlzdHMgYXQgdGhpcyBwb3NpdGlvbi4gIFRoaXMgc2hvdWxkIG5vdCBoYXBwZW4hIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZS5jOjE0MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgdXBkYXRlIHRoZSBleHRlbnQgY2FjaGUgZm9yIEhGUyBmaWxlIHdpdGggQ05JRCAlWC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlLmM6MTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyB0byByZWFkIEhGUyBmaWxlIHdpdGggQ05JRCAlWCBiZWhpbmQgRU9GLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGUuYzoxOTAgbGlicGFydGVkL2ZzL2hmcy9maWxlLmM6MjIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIHNlY3RvciAlbGxpIG9mIEhGUyBmaWxlIHdpdGggQ05JRCAlWC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlLmM6MjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyB0byB3cml0ZSBIRlMgZmlsZSB3aXRoIENOSUQgJVggYmVoaW5kIEVPRi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlX3BsdXMuYzoxNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHVwZGF0ZSB0aGUgZXh0ZW50IGNhY2hlIGZvciBIRlMrIGZpbGUgd2l0aCBDTklEICVYLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGVfcGx1cy5jOjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgdG8gcmVhZCBIRlMrIGZpbGUgd2l0aCBDTklEICVYIGJlaGluZCBFT0YuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZV9wbHVzLmM6MjEzIGxpYnBhcnRlZC9mcy9oZnMvZmlsZV9wbHVzLmM6MjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIHNlY3RvciAlbGxpIG9mIEhGUysgZmlsZSB3aXRoIENOSUQgJVguIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZV9wbHVzLmM6MjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyB0byB3cml0ZSBIRlMrIGZpbGUgd2l0aCBDTklEICVYIGJlaGluZCBFT0YuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MjMyCittc2dpZCAiU29ycnksIEhGUyBjYW5ub3QgYmUgcmVzaXplZCB0aGF0IHdheSB5ZXQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MjYyIGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NjQxCittc2dpZCAiRGF0YSByZWxvY2F0aW9uIGhhcyBmYWlsZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MjgxCittc2dpZCAiRGF0YSByZWxvY2F0aW9uIGxlZnQgc29tZSBkYXRhIGluIHRoZSBlbmQgb2YgdGhlIHZvbHVtZS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzozMjAKKyMsIGZ1enp5Cittc2dpZCAid3JpdGluZyBIRlMgTWFzdGVyIERpcmVjdG9yeSBCbG9jayIKK21zZ3N0ciAiQ2h5YmEgcMWZaSB6YXBpc292w6Fuw60gZG8ga2/FmWVub3bDqWhvIGFkcmVzw6HFmWUuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjQ2OAorbXNnaWQgIk5vIHZhbGlkIEhGU1srWF0gc2lnbmF0dXJlIGhhcyBiZWVuIGZvdW5kIHdoaWxlIG9wZW5pbmcuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NDc4CisjLCBjLWZvcm1hdAorbXNnaWQgIlZlcnNpb24gJWQgb2YgSEZTKyBpc24ndCBzdXBwb3J0ZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NDg5CisjLCBjLWZvcm1hdAorbXNnaWQgIlZlcnNpb24gJWQgb2YgSEZTWCBpc24ndCBzdXBwb3J0ZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NjcyCittc2dpZCAiRGF0YSByZWxvY2F0aW9uIGxlZnQgc29tZSBkYXRhIGF0IHRoZSBlbmQgb2YgdGhlIHZvbHVtZS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo3MjAKKyMsIGZ1enp5Cittc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0aGUgYWxsb2NhdGlvbiBmaWxlLiIKK21zZ3N0ciAiQ2h5YmEgcMWZaSB6YXBpc292w6Fuw60gZG8ga2/FmWVub3bDqWhvIGFkcmVzw6HFmWUuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjczNQorbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdGhlIGNvbXBhdGliaWxpdHkgcGFydCBvZiB0aGUgYWxsb2NhdGlvbiBmaWxlLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjc1MAorbXNnaWQgIndyaXRpbmcgSEZTKyBWb2x1bWUgSGVhZGVyIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6ODUwCittc2dpZCAiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgbG9va2luZyBmb3IgdGhlIG1hbmRhdG9yeSBiYWQgYmxvY2tzIGZpbGUuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6OTA0Cittc2dpZCAiIgorIkl0IHNlZW1zIHRoZXJlIGlzIGFuIGVycm9yIGluIHRoZSBIRlMgd3JhcHBlcjogdGhlIGJhZCBibG9ja3MgZmlsZSBkb2Vzbid0ICIKKyJjb250YWluIHRoZSBlbWJlZGRlZCBIRlMrIHZvbHVtZS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo5NDAKK21zZ2lkICJTb3JyeSwgSEZTKyBjYW5ub3QgYmUgcmVzaXplZCB0aGF0IHdheSB5ZXQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6OTc1Cittc2dpZCAic2hyaW5raW5nIGVtYmVkZGVkIEhGUysgdm9sdW1lIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6OTkxCittc2dpZCAiUmVzaXppbmcgdGhlIEhGUysgdm9sdW1lIGhhcyBmYWlsZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6OTk4CisjLCBmdXp6eQorbXNnaWQgInNocmlua2luZyBIRlMgd3JhcHBlciIKK21zZ3N0ciAiem1lbsWhdWppIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjEwMDcKK21zZ2lkICJVcGRhdGluZyB0aGUgSEZTIHdyYXBwZXIgaGFzIGZhaWxlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzoxMTA5IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MTE5NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhpcyBpcyBub3QgYSByZWFsICVzIGNoZWNrLiAgVGhpcyBpcyBnb2luZyB0byBleHRyYWN0IHNwZWNpYWwgbG93IGxldmVsICIKKyJmaWxlcyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzoxNTUKK21zZ2lkICJCYWQgYmxvY2sgbGlzdCBoZWFkZXIgY2hlY2tzdW0uIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjE2OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSW52YWxpZCBzaXplIG9mIGEgdHJhbnNhY3Rpb24gYmxvY2sgd2hpbGUgcmVwbGF5aW5nIHRoZSBqb3VybmFsICglaSBieXRlcykuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjI2MAorbXNnaWQgIiIKKyJKb3VybmFsIHN0b3JlZCBvdXRzaWRlIG9mIHRoZSB2b2x1bWUgYXJlIG5vdCBzdXBwb3J0ZWQuICBUcnkgdG8gZGVzYWN0aXZhdGUgIgorInRoZSBqb3VybmFsIGFuZCBydW4gUGFydGVkIGFnYWluLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzoyNzEKKyMsIGZ1enp5Cittc2dpZCAiSm91cm5hbCBvZmZzZXQgb3Igc2l6ZSBpcyBub3QgbXVsdGlwbGUgb2YgdGhlIHNlY3RvciBzaXplLiIKK21zZ3N0ciAiWm3Em25hIHphxI3DoXRrdSBjbHVzdGVydSA9ICVkLCBjb8W+IG5lbsOtIG7DoXNvYmVrIHZlbGlrb3N0aSBjbHVzdGVydSAlZC4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjI5MgorbXNnaWQgIkluY29ycmVjdCBtYWdpYyB2YWx1ZXMgaW4gdGhlIGpvdXJuYWwgaGVhZGVyLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozMDIKK21zZ2lkICJKb3VybmFsIHNpemUgbWlzbWF0Y2ggYmV0d2VlbiBqb3VybmFsIGluZm8gYmxvY2sgYW5kIGpvdXJuYWwgaGVhZGVyLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozMTQKKyMsIGZ1enp5Cittc2dpZCAiU29tZSBoZWFkZXIgZmllbGRzIGFyZSBub3QgbXVsdGlwbGUgb2YgdGhlIHNlY3RvciBzaXplLiIKK21zZ3N0ciAiWm3Em25hIHphxI3DoXRrdSBjbHVzdGVydSA9ICVkLCBjb8W+IG5lbsOtIG7DoXNvYmVrIHZlbGlrb3N0aSBjbHVzdGVydSAlZC4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjMyMworbXNnaWQgIiIKKyJUaGUgc2VjdG9yIHNpemUgc3RvcmVkIGluIHRoZSBqb3VybmFsIGlzIG5vdCA1MTIgYnl0ZXMuICBQYXJ0ZWQgb25seSAiCisic3VwcG9ydHMgNTEyIGJ5dGVzIGxlbmd0aCBzZWN0b3JzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozMzUKK21zZ2lkICJCYWQgam91cm5hbCBjaGVja3N1bS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MzUzCittc2dpZCAiIgorIlRoZSBqb3VybmFsIGlzIG5vdCBlbXB0eS4gIFBhcnRlZCBtdXN0IHJlcGxheSB0aGUgdHJhbnNhY3Rpb25zIGJlZm9yZSAiCisib3BlbmluZyB0aGUgZmlsZSBzeXN0ZW0uICBUaGlzIHdpbGwgbW9kaWZ5IHRoZSBmaWxlIHN5c3RlbS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MzgxCittc2dpZCAiIgorIlRoZSB2b2x1bWUgaGVhZGVyIG9yIHRoZSBtYXN0ZXIgZGlyZWN0b3J5IGJsb2NrIGhhcyBjaGFuZ2VkIHdoaWxlIHJlcGxheWluZyAiCisidGhlIGpvdXJuYWwuICBZb3Ugc2hvdWxkIHJlc3RhcnQgUGFydGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3Byb2JlLmM6NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBhcnRlZCBjYW4ndCB1c2UgSEZTIGZpbGUgc3lzdGVtcyBvbiBkaXNrcyB3aXRoIGEgc2VjdG9yIHNpemUgbm90IGVxdWFsIHRvICUiCisiZCBieXRlcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjE1MSBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzoxNTUKK21zZ2lkICJBbiBleHRlbnQgaGFzIG5vdCBiZWVuIHJlbG9jYXRlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjI1MSBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzozMDcKK21zZ2lkICIiCisiQSByZWZlcmVuY2UgdG8gYW4gZXh0ZW50IGNvbWVzIGZyb20gYSBwbGFjZSBpdCBzaG91bGQgbm90LiAgWW91IHNob3VsZCBjaGVjayAiCisidGhlIGZpbGUgc3lzdGVtISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6MzgxCittc2dpZCAiVGhpcyBIRlMgdm9sdW1lIGhhcyBubyBjYXRhbG9nIGZpbGUuICBUaGlzIGlzIHZlcnkgdW51c3VhbCEiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjQ3NQorbXNnaWQgIlRoaXMgSEZTIHZvbHVtZSBoYXMgbm8gZXh0ZW50cyBvdmVyZmxvdyBmaWxlLiAgVGhpcyBpcyBxdWl0ZSB1bnVzdWFsISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NTE3IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjY2OAorbXNnaWQgIiIKKyJUaGUgZXh0ZW50cyBvdmVyZmxvdyBmaWxlIHNob3VsZCBub3QgY29udGFpbiBpdHMgb3duIGV4dGVudHMhICBZb3Ugc2hvdWxkICIKKyJjaGVjayB0aGUgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzo1NzQgbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6ODQ3CisjLCBmdXp6eQorbXNnaWQgIkNvdWxkIG5vdCBjYWNoZSB0aGUgZmlsZSBzeXN0ZW0gaW4gbWVtb3J5LiIKK21zZ3N0ciAiTmVtb2h1IGRldGVrb3ZhdCBzeXN0w6ltIHNvdWJvcsWvLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjYzNSBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo5MDgKK21zZ2lkICJCYWQgYmxvY2tzIGxpc3QgY291bGQgbm90IGJlIGxvYWRlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjY0OSBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo5MjQKK21zZ2lkICJBbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgZXh0ZW50IHJlbG9jYXRpb24uIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjQ5NQorbXNnaWQgIlRoaXMgSEZTKyB2b2x1bWUgaGFzIG5vIGNhdGFsb2cgZmlsZS4gIFRoaXMgaXMgdmVyeSB1bnVzdWFsISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo2MTkKK21zZ2lkICJUaGlzIEhGUysgdm9sdW1lIGhhcyBubyBleHRlbnRzIG92ZXJmbG93IGZpbGUuICBUaGlzIGlzIHF1aXRlIHVudXN1YWwhIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo5NAorbXNnaWQgImRpc3BsYXlzIHRoaXMgaGVscCBtZXNzYWdlIgorbXNnc3RyICJ6b2JyYXrDrSB0dXRvIHpwcsOhdnUgbsOhcG92xJtkeSIKKworIzogcGFydGVkL3BhcnRlZC5jOjk1Cittc2dpZCAibGlzdHMgcGFydGl0aW9uIGxheW91dCBvbiBhbGwgYmxvY2sgZGV2aWNlcyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6OTYKK21zZ2lkICJkaXNwbGF5cyBtYWNoaW5lIHBhcnNlYWJsZSBvdXRwdXQiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjk3Cittc2dpZCAibmV2ZXIgcHJvbXB0cyBmb3IgdXNlciBpbnRlcnZlbnRpb24iCittc2dzdHIgIm5pa2R5IG5lxb7DoWTDoSBvIGludGVydmVuY2kgdcW+aXZhdGVsZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjk4Cittc2dpZCAiZGlzcGxheXMgdGhlIHZlcnNpb24iCittc2dzdHIgInpvYnJhesOtIHZlcnppIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTExCisjLCBmdXp6eQorbXNnaWQgIiIKKyJOVU1CRVIgaXMgdGhlIHBhcnRpdGlvbiBudW1iZXIgdXNlZCBieSBMaW51eC4gIE9uIE1TLURPUyBkaXNrIGxhYmVscywgdGhlICIKKyJwcmltYXJ5IHBhcnRpdGlvbnMgbnVtYmVyIGZyb20gMSB0byA0LCBsb2dpY2FsIHBhcnRpdGlvbnMgZnJvbSA1IG9ud2FyZHMuXG4iCittc2dzdHIgIiIKKyJNSU5PUiBqZSDEjcOtc2xvIG9kZMOtbHUgcG91xb7DrXZhbsOpIExpbnV4ZW0uIE5hIGptZW5vdmvDoWNoIGRpc2t1IG1zZG9zIG1hasOtICIKKyJwcmltw6FybsOtIG9kZMOtbHkgxI3DrXNsYSAxLTQgYSBsb2dpY2vDqSBvZGTDrWx5IGpzb3Ugb2QgNSBkw6FsLlxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTE0Cittc2dpZCAiTEFCRUwtVFlQRSBpcyBvbmUgb2Y6ICIKK21zZ3N0ciAiVFlQLUpNRU5PVktZIGplIGplZGVuIHo6ICIKKworIzogcGFydGVkL3BhcnRlZC5jOjExNQorbXNnaWQgIkZMQUcgaXMgb25lIG9mOiAiCittc2dzdHIgIlDFmEVQw41OQcSMIGplIGplZGVuIHo6ICIKKworIzogcGFydGVkL3BhcnRlZC5jOjExNgorIywgZnV6enkKK21zZ2lkICJVTklUIGlzIG9uZSBvZjogIgorbXNnc3RyICJQxZhFUMONTkHEjCBqZSBqZWRlbiB6OiAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMTcKK21zZ2lkICJQQVJULVRZUEUgaXMgb25lIG9mOiBwcmltYXJ5LCBsb2dpY2FsLCBleHRlbmRlZFxuIgorbXNnc3RyICJUWVAtT0REw41MVSBqZSBqZWRlbiB6OiBwcmltYXJ5LCBsb2dpY2FsLCBleHRlbmRlZFxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTE5Cittc2dpZCAiRlMtVFlQRSBpcyBvbmUgb2Y6ICIKK21zZ3N0ciAiVFlQLUZTIGplIGplZGVuIHo6ICIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMAorIywgZnV6enkKK21zZ2lkICIiCisiU1RBUlQgYW5kIEVORCBhcmUgZGlzayBsb2NhdGlvbnMsIHN1Y2ggYXMgNEdCIG9yIDEwJS4gIE5lZ2F0aXZlIHZhbHVlcyBjb3VudCAiCisiZnJvbSB0aGUgZW5kIG9mIHRoZSBkaXNrLiAgRm9yIGV4YW1wbGUsIC0xcyBzcGVjaWZpZXMgZXhhY3RseSB0aGUgbGFzdCAiCisic2VjdG9yLlxuIgorbXNnc3RyICIiCisiWkHEjMOBVEVLIGEgS09ORUMganNvdSB2IG1lZ2FiYWp0ZWNoLiBaw6Fwb3Juw6kgaG9kbm90eSBzZSBvZMSNw610YWrDrSBvZCBrb25jZSAiCisiZGlza3UuXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjMKK21zZ2lkICJTVEFURSBpcyBvbmUgb2Y6IG9uLCBvZmZcbiIKK21zZ3N0ciAiU1RBViBqZSBqZWRlbiB6OiBvbiwgb2ZmXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjQKK21zZ2lkICJERVZJQ0UgaXMgdXN1YWxseSAvZGV2L2hkYSBvciAvZGV2L3NkYVxuIgorbXNnc3RyICJaQcWYw41aRU7DjSBqZSBvYnZ5a2xlIC9kZXYvaGRhIG5lYm8gL2Rldi9zZGFcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyNQorbXNnaWQgIk5BTUUgaXMgYW55IHdvcmQgeW91IHdhbnRcbiIKK21zZ3N0ciAiTsOBWkVWIGplIGxpYm92b2xuw6kgc2xvdm9cbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyNgorbXNnaWQgIlRoZSBwYXJ0aXRpb24gbXVzdCBoYXZlIG9uZSBvZiB0aGUgZm9sbG93aW5nIEZTLVRZUEVzOiAiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEzMAorIywgZnV6enkKK21zZ2lkICIiCisiQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy5cbiIKKyJUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZSwgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuXG4iCisiXG4iCisiVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4iCisiYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiIKKyJNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4iCisiR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkNvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sICIKKyJJbmMuXG4iCisiVG90byBqZSB2b2xuw6kgcHJvZ3JhbW92w6kgdnliYXZlbsOtIHBvZGxlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLlxuIgorIlxuIgorIlRlbnRvIHByb2dyYW0gamUgcm96xaFpxZlvdsOhbiB2IG5hZMSbamksIMW+ZSBidWRlIHXFvml0ZcSNbsO9LCBhbGUgQkVaIEpBS8OJS09MSSAiCisiWsOBUlVLWTsgYmV6IGkgcMWZZWRwb2tsw6FkYW7DqSB6w6FydWt5IFBST0RFSk5PU1RJIG5lYm8gVkhPRE5PU1RJIFBSTyBLT05LUsOJVE7DjSAiCisiw5rEjEVMLiBEYWzFocOtIHBvZHJvYm5vc3RpIG5hamRldGUgdiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS5cbiIKKyJcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjE3NgorIywgYy1mb3JtYXQKK21zZ2lkICIlMC5mJSVcdCh0aW1lIGxlZnQgJS4yZDolLjJkKSIKK21zZ3N0ciAiJTAuZiUlXHQoemJ5bMO9IMSNYXMgJS4yZDolLjJkKSIKKworIzogcGFydGVkL3BhcnRlZC5jOjE5NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGFydGl0aW9uICVzIGlzIGJlaW5nIHVzZWQuIFlvdSBtdXN0IHVubW91bnQgaXQgYmVmb3JlIHlvdSBtb2RpZnkgaXQgd2l0aCAiCisiUGFydGVkLiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjExCisjLCBjLWZvcm1hdAorbXNnaWQgIlBhcnRpdGlvbihzKSBvbiAlcyBhcmUgYmVpbmcgdXNlZC4iCittc2dzdHIgIk9kZMOtbChhKSBuYSAlcyBqc291IHBvdcW+w612w6FueS4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjMKK21zZ2lkICIiCisiVGhlIGV4aXN0aW5nIGZpbGUgc3lzdGVtIHdpbGwgYmUgZGVzdHJveWVkIGFuZCBhbGwgZGF0YSBvbiB0aGUgcGFydGl0aW9uICIKKyJ3aWxsIGJlIGxvc3QuIERvIHlvdSB3YW50IHRvIGNvbnRpbnVlPyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZXhpc3RpbmcgZGlzayBsYWJlbCBvbiAlcyB3aWxsIGJlIGRlc3Ryb3llZCBhbmQgYWxsIGRhdGEgb24gdGhpcyBkaXNrICIKKyJ3aWxsIGJlIGxvc3QuIERvIHlvdSB3YW50IHRvIGNvbnRpbnVlPyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NDU4IHBhcnRlZC9wYXJ0ZWQuYzo2NTIgcGFydGVkL3BhcnRlZC5jOjEwNDQKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMTI4IHBhcnRlZC9wYXJ0ZWQuYzoxNzcxIHBhcnRlZC9wYXJ0ZWQuYzoxODUyCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTkwMAorbXNnaWQgIlBhcnRpdGlvbiBudW1iZXI/IgorbXNnc3RyICLEjMOtc2xvIG9kZMOtbHU/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NTAwCittc2dpZCAiU291cmNlIGRldmljZT8iCittc2dzdHIgIlpkcm9qb3bDqSB6YcWZw616ZW7DrT8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo1MDQKK21zZ2lkICJTb3VyY2UgcGFydGl0aW9uIG51bWJlcj8iCittc2dzdHIgIsSMw61zbG8gemRyb2pvdsOpaG8gb2Rkw61sdT8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo1MDkKKyMsIGZ1enp5Cittc2dpZCAiQ2FuJ3QgY29weSBhbiBleHRlbmRlZCBwYXJ0aXRpb24uIgorbXNnc3RyICJOZW1vaHUga29ww61yb3ZhdCByb3rFocOtxZllbsOpIG9kZMOtbHkuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NTE1Cittc2dpZCAiRGVzdGluYXRpb24gcGFydGl0aW9uIG51bWJlcj8iCittc2dzdHIgIsSMw61zbG8gY8OtbG92w6lobyBvZGTDrWx1PyIKKworIzogcGFydGVkL3BhcnRlZC5jOjYxNQorbXNnaWQgIk5ldyBkaXNrIGxhYmVsIHR5cGU/IgorbXNnc3RyICJUeXAgbm92w6kgam1lbm92a3kgZGlza3U/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NjU2Cittc2dpZCAiRmlsZSBzeXN0ZW0/IgorbXNnc3RyICJTeXN0w6ltIHNvdWJvcsWvPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjcwNyBwYXJ0ZWQvcGFydGVkLmM6ODc4Cittc2dpZCAiUGFydGl0aW9uIHR5cGU/IgorbXNnc3RyICJUeXAgb2Rkw61sdT8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo3MTQgcGFydGVkL3BhcnRlZC5jOjg4NSBwYXJ0ZWQvcGFydGVkLmM6MTEzMQorbXNnaWQgIlBhcnRpdGlvbiBuYW1lPyIKK21zZ3N0ciAiTsOhemV2IG9kZMOtbHU/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NzIyIHBhcnRlZC9wYXJ0ZWQuYzo4OTUKK21zZ2lkICJGaWxlIHN5c3RlbSB0eXBlPyIKK21zZ3N0ciAiVHlwIHNvdWJvcm92w6lobyBzeXN0w6ltdT8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo3MjkgcGFydGVkL3BhcnRlZC5jOjg5NyBwYXJ0ZWQvcGFydGVkLmM6MTA1OQorIzogcGFydGVkL3BhcnRlZC5jOjE3MjUgcGFydGVkL3BhcnRlZC5jOjE3ODAKK21zZ2lkICJTdGFydD8iCittc2dzdHIgIlphxI3DoXRlaz8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo3MzEgcGFydGVkL3BhcnRlZC5jOjkwMCBwYXJ0ZWQvcGFydGVkLmM6MTA2MgorIzogcGFydGVkL3BhcnRlZC5jOjE3MjcgcGFydGVkL3BhcnRlZC5jOjE3ODIKK21zZ2lkICJFbmQ/IgorbXNnc3RyICJLb25lYz8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo3NjkgcGFydGVkL3BhcnRlZC5jOjkzOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IHJlcXVlc3RlZCBhIHBhcnRpdGlvbiBmcm9tICVzIHRvICVzLlxuIgorIlRoZSBjbG9zZXN0IGxvY2F0aW9uIHdlIGNhbiBtYW5hZ2UgaXMgJXMgdG8gJXMuICBJcyB0aGlzIHN0aWxsIGFjY2VwdGFibGUgdG8gIgorInlvdT8iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjg5MAorIywgZnV6enkKK21zZ2lkICJBbiBleHRlbmRlZCBwYXJ0aXRpb24gY2Fubm90IGhvbGQgYSBmaWxlIHN5c3RlbS4gIERpZCB5b3Ugd2FudCBta3BhcnQ/IgorbXNnc3RyICJSb3rFocOtxZllbsOpIG9kZMOtbHkgbmVtb2hvdSBtw610IHN5c3TDqW0gc291Ym9yxa8uIENodMSbbGkganN0ZSBta3BhcnQ/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTA1MAorIywgZnV6enkKK21zZ2lkICJDYW4ndCBtb3ZlIGFuIGV4dGVuZGVkIHBhcnRpdGlvbi4iCittc2dzdHIgIk5lbW9odSBwxZllc291dmF0IHJvesWhw63FmWVuw6kgb2Rkw61seS4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMDc5Cittc2dpZCAiQ2FuJ3QgbW92ZSBhIHBhcnRpdGlvbiBvbnRvIGl0c2VsZi4gIFRyeSB1c2luZyByZXNpemUsIHBlcmhhcHM/IgorbXNnc3RyICJOZW1vaHUgcMWZZXN1bm91dCBvZGTDrWwgbmEgc2ViZS4gTW/Fvm7DoSB6a3VzdGUgcG91xb7DrXQgcmVzaXplPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlub3I6ICVkXG4iCittc2dzdHIgIk1pbm9yOiAlZFxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIyOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRmxhZ3M6ICVzXG4iCittc2dzdHIgIlDFmWVww61uYcSNZTogIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIyOQorIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlIFN5c3RlbTogJXNcbiIKK21zZ3N0ciAiU3lzdMOpbSBzb3Vib3LFrzogJXNcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMzAKKyMsIGZ1enp5Cittc2dpZCAiU2l6ZTogICAgICAgICAiCittc2dzdHIgIlZlbGlrb3N0OiAgICAgICAgICAgJTEwLjNmTWIgKCVkJSUpXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjM1CisjLCBmdXp6eQorbXNnaWQgIk1pbmltdW0gc2l6ZTogIgorbXNnc3RyICJNaW5pbcOhbG7DrSB2ZWxpa29zdDogJTEwLjNmTWIgKCVkJSUpXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjM4CisjLCBmdXp6eQorbXNnaWQgIk1heGltdW0gc2l6ZTogIgorbXNnc3RyICJNYXhpbcOhbG7DrSB2ZWxpa29zdDogJTEwLjNmTWIgKCVkJSUpXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMzYyCisjLCBjLWZvcm1hdAorbXNnaWQgIk1vZGVsOiAlcyAoJXMpXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEzNjQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkRpc2sgJXM6ICVzXG4iCittc2dzdHIgIiVzICAlcyAgJXMiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlY3RvciBzaXplIChsb2dpY2FsL3BoeXNpY2FsKTogJWxsZEIvJWxsZEJcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTM4MworIywgYy1mb3JtYXQKK21zZ2lkICJCSU9TIGN5bGluZGVyLGhlYWQsc2VjdG9yIGdlb21ldHJ5OiAlZCwlZCwlZC4gIEVhY2ggY3lsaW5kZXIgaXMgJXMuXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEzOTIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlBhcnRpdGlvbiBUYWJsZTogJXNcbiIKK21zZ3N0ciAiTsOhemV2IG9kZMOtbHU/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQwNiBwYXJ0ZWQvcGFydGVkLmM6MTQwOQorbXNnaWQgIk51bWJlciIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQwNiBwYXJ0ZWQvcGFydGVkLmM6MTQwOQorIywgZnV6enkKK21zZ2lkICJTdGFydCIKK21zZ3N0ciAiWmHEjcOhdGVrPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MDcgcGFydGVkL3BhcnRlZC5jOjE0MTAKKyMsIGZ1enp5Cittc2dpZCAiRW5kIgorbXNnc3RyICJLb25lYz8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDEwCisjLCBmdXp6eQorbXNnaWQgIlNpemUiCittc2dzdHIgInJlc2l6ZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MTQKK21zZ2lkICJUeXBlIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDE2CisjLCBmdXp6eQorbXNnaWQgIkZpbGUgc3lzdGVtIgorbXNnc3RyICJTeXN0w6ltIHNvdWJvcsWvPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MTkKKyMsIGZ1enp5Cittc2dpZCAiTmFtZSIKK21zZ3N0ciAibmFtZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MjEKK21zZ2lkICJGbGFncyIKK21zZ3N0ciAiUMWZZXDDrW5hxI1lIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQ3NworbXNnaWQgIkZyZWUgU3BhY2UiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjE2MjQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBICVzICVzIHBhcnRpdGlvbiB3YXMgZm91bmQgYXQgJXMgLT4gJXMuICBEbyB5b3Ugd2FudCB0byBhZGQgaXQgdG8gdGhlICIKKyJwYXJ0aXRpb24gdGFibGU/IgorbXNnc3RyICIiCisiQnlsIG5hbGV6ZW4gb2Rkw61sICVzICVzIG5hICUuM2ZNYiAtPiAlLjNmTWIuIENoY2V0ZSBqZWogcMWZaWRhdCBkbyB0YWJ1bGt5ICIKKyJvZGTDrWzFrz8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNjYzCittc2dpZCAic2VhcmNoaW5nIGZvciBmaWxlIHN5c3RlbXMiCittc2dzdHIgImhsZWTDoW0gc3lzdMOpbXkgc291Ym9yxa8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxODc3Cittc2dpZCAiTmV3IGRldmljZT8iCittc2dzdHIgIk5vdsOpIHphxZnDrXplbsOtPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjE5MDIKKyMsIGZ1enp5Cittc2dpZCAiRmxhZyB0byBJbnZlcnQ/IgorbXNnc3RyICJQxZllcMOtbmHEjSwga3RlcsO9IHptxJtuaXQ/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTkwNworbXNnaWQgIk5ldyBzdGF0ZT8iCittc2dzdHIgIk5vdsO9IHN0YXY/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTk0NAorbXNnaWQgIlVuaXQ/IgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMDkzCittc2dpZCAiY2hlY2siCittc2dzdHIgImNoZWNrIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjA5NgorIywgZnV6enkKK21zZ2lkICIiCisiY2hlY2sgTlVNQkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyBhIHNpbXBsZSBjaGVjayBvbiB0aGUgZmlsZSBzeXN0ZW0iCittc2dzdHIgIiIKKyJjaGVjayBNSU5PUiAgICAgICAgICAgICAgICAgICBwcm92w6lzdCBqZWRub2R1Y2hvdSBrb250cm9sdSBzeXN0w6ltdSBzb3Vib3LFryIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMDIKK21zZ2lkICJjcCIKK21zZ3N0ciAiY3AiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTA1CisjLCBmdXp6eQorbXNnaWQgIiIKKyJjcCBbRlJPTS1ERVZJQ0VdIEZST00tTlVNQkVSIFRPLU5VTUJFUiAgIGNvcHkgZmlsZSBzeXN0ZW0gdG8gYW5vdGhlciAiCisicGFydGl0aW9uIgorbXNnc3RyICIiCisiY3AgW09ELVpBxZjDjVpFTsONXSBPRC1NSU5PUiBETy1NSU5PUiAgICAgICAgemtvcMOtcm92YXQgc3lzdMOpbSBzb3Vib3LFryBuYSBqaW7DvSAiCisib2Rkw61sIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjExMQorbXNnaWQgImhlbHAiCittc2dzdHIgImhlbHAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTE0CisjLCBmdXp6eQorbXNnaWQgIiIKKyJoZWxwIFtDT01NQU5EXSAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50IGdlbmVyYWwgaGVscCwgb3IgaGVscCBvbiAiCisiQ09NTUFORCIKK21zZ3N0ciAiIgorImhlbHAgW1DFmMONS0FaXSAgICAgICAgICAgICAgICAgdnlww63FoWUgb2JlY25vdSBuw6Fwb3bEm2R1IG5lYm8gbsOhcG92xJtkdSBvIFDFmMONS0FadSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMjAKK21zZ2lkICJta2xhYmVsIgorbXNnc3RyICJta2xhYmVsIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEyMAorIywgZnV6enkKK21zZ2lkICJta3RhYmxlIgorbXNnc3RyICJta2xhYmVsIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEyMworIywgZnV6enkKK21zZ2lkICIiCisibWtsYWJlbCxta3RhYmxlIExBQkVMLVRZUEUgICAgICAgICAgICAgICBjcmVhdGUgYSBuZXcgZGlza2xhYmVsIChwYXJ0aXRpb24gIgorInRhYmxlKSIKK21zZ3N0ciAiIgorIm1rbGFiZWwgVFlQLUpNRU5PVktZICAgICAgICAgIHZ5dHZvxZlpdCBub3ZvdSBqbWVub3ZrdSBkaXNrdSAodGFidWxrdSBvZGTDrWzFrykiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTI5Cittc2dpZCAibWtmcyIKK21zZ3N0ciAibWtmcyIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMzIKKyMsIGZ1enp5Cittc2dpZCAiIgorIm1rZnMgTlVNQkVSIEZTLVRZUEUgICAgICAgICAgICAgICAgICAgICAgbWFrZSBhIEZTLVRZUEUgZmlsZSBzeXN0ZW0gb24gIgorInBhcnRpdGl0b24gTlVNQkVSIgorbXNnc3RyICIiCisibWtmcyBNSU5PUiBUWVAtRlMgICAgICAgICAgICAgdnl0dm/FmWl0IHN5c3TDqW0gc291Ym9yxa8gRlMtVFlQRSBuYSBvZGTDrWx1IE1JTk9SIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEzOAorbXNnaWQgIm1rcGFydCIKK21zZ3N0ciAibWtwYXJ0IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE0MQorIywgZnV6enkKK21zZ2lkICJta3BhcnQgUEFSVC1UWVBFIFtGUy1UWVBFXSBTVEFSVCBFTkQgICAgIG1ha2UgYSBwYXJ0aXRpb24iCittc2dzdHIgIm1rcGFydCBUWVAtT0REw41MVSBbVFlQLUZTXSBaQcSMw4FURUsgS09ORUMgIHZ5dHZvxZlpdCBvZGTDrWwiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTQ3CisjLCBmdXp6eQorbXNnaWQgIiIKKyInbWtwYXJ0JyBtYWtlcyBhIHBhcnRpdGlvbiB3aXRob3V0IGNyZWF0aW5nIGEgbmV3IGZpbGUgc3lzdGVtIG9uIHRoZSAiCisicGFydGl0aW9uLiAgRlMtVFlQRSBtYXkgYmUgc3BlY2lmaWVkIHRvIHNldCBhbiBhcHByb3ByaWF0ZSBwYXJ0aXRpb24gSUQuXG4iCittc2dzdHIgIiIKKyJta3BhcnQgdnl0dm/FmcOtIG9kZMOtbCBiZXogdnl0dm/FmWVuw60gbm92w6lobyBzeXN0w6ltdSBzb3Vib3LFryBuYSBuxJttLiBUWVAtRlMgIgorIm3Fr8W+ZSBiw710IHVyxI1lbiBwcm8gbmFzdGF2ZW7DrSBvZHBvdsOtZGFqw61jw61obyBJRCBvZGTDrWx1LlxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE1MgorbXNnaWQgIm1rcGFydGZzIgorbXNnc3RyICJta3BhcnRmcyIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNTUKKyMsIGZ1enp5Cittc2dpZCAiIgorIm1rcGFydGZzIFBBUlQtVFlQRSBGUy1UWVBFIFNUQVJUIEVORCAgICAgbWFrZSBhIHBhcnRpdGlvbiB3aXRoIGEgZmlsZSBzeXN0ZW0iCittc2dzdHIgIiIKKyJta3BhcnRmcyBUWVAtT0REw41MVSBUWVAtRlMgWkHEjMOBVEVLIEtPTkVDICB2eXR2b8WZaXQgb2Rkw61sIHNlIHN5c3TDqW1lbSBzb3Vib3LFryIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNjEKK21zZ2lkICJtb3ZlIgorbXNnc3RyICJtb3ZlIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE2NAorIywgZnV6enkKK21zZ2lkICJtb3ZlIE5VTUJFUiBTVEFSVCBFTkQgICAgICAgICAgICAgICAgICAgIG1vdmUgcGFydGl0aW9uIE5VTUJFUiIKK21zZ3N0ciAibW92ZSBNSU5PUiBaQcSMw4FURUsgS09ORUMgICAgICBwxZllc3Vub3V0IG9kZMOtbCBNSU5PUiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNjkKK21zZ2lkICJuYW1lIgorbXNnc3RyICJuYW1lIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE3MgorIywgZnV6enkKK21zZ2lkICJuYW1lIE5VTUJFUiBOQU1FICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgcGFydGl0aW9uIE5VTUJFUiBhcyBOQU1FIgorbXNnc3RyICJuYW1lIE1JTk9SIE7DgVpFViAgICAgICAgICAgICAgcG9qbWVub3ZhdCBvZGTDrWwgTUlOT1IgTsOBWkVWIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE3NworbXNnaWQgInByaW50IgorbXNnc3RyICJwcmludCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxODAKK21zZ2lkICIiCisicHJpbnQgW2RldmljZXN8ZnJlZXxsaXN0LGFsbHxOVU1CRVJdICAgICBkaXNwbGF5IHRoZSBwYXJ0aXRpb24gdGFibGUsICIKKyJhdmFpbGFibGUgZGV2aWNlcywgZnJlZSBzcGFjZSwgYWxsIGZvdW5kIHBhcnRpdGlvbnMsIG9yIGEgcGFydGljdWxhciAiCisicGFydGl0aW9uIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTg1Cittc2dpZCAiIgorIldpdGhvdXQgYXJndW1lbnRzLCAncHJpbnQnIGRpc3BsYXlzIHRoZSBlbnRpcmUgcGFydGl0aW9uIHRhYmxlLiBIb3dldmVyIHdpdGggIgorInRoZSBmb2xsb3dpbmcgYXJndW1lbnRzIGl0IHBlcmZvcm1zIHZhcmlvdXMgb3RoZXIgYWN0aW9ucy5cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE4NworbXNnaWQgIiAgZGV2aWNlcyAgIDogZGlzcGxheSBhbGwgYWN0aXZlIGJsb2NrIGRldmljZXNcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE4OAorbXNnaWQgIiIKKyIgIGZyZWUgICAgICA6IGRpc3BsYXkgaW5mb3JtYXRpb24gYWJvdXQgZnJlZSB1bnBhcnRpdGlvbmVkIHNwYWNlIG9uIHRoZSAiCisiY3VycmVudCBibG9jayBkZXZpY2VcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE5MAorIywgZnV6enkKK21zZ2lkICIiCisiICBsaXN0LCBhbGwgOiBkaXNwbGF5IHRoZSBwYXJ0aXRpb24gdGFibGVzIG9mIGFsbCBhY3RpdmUgYmxvY2sgZGV2aWNlc1xuIgorbXNnc3RyICJwcmludCBbTUlOT1JdICAgICAgICAgICAgICAgICB6b2JyYXppdCB0YWJ1bGt1IG9kZMOtbMWvIG5lYm8gb2Rkw61sIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE5MQorbXNnaWQgIiIKKyIgIE5VTUJFUiAgICA6IGRpc3BsYXkgbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIHBhcnRpY3VsYXIgIgorInBhcnRpdGlvblxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTk2Cittc2dpZCAicXVpdCIKK21zZ3N0ciAicXVpdCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxOTkKKyMsIGZ1enp5Cittc2dpZCAicXVpdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGl0IHByb2dyYW0iCittc2dzdHIgInF1aXQgICAgICAgICAgICAgICAgICAgICAgICAgIHVrb27EjWl0IHByb2dyYW0iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjA0Cittc2dpZCAicmVzY3VlIgorbXNnc3RyICJyZXNjdWUiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjA3CisjLCBmdXp6eQorbXNnaWQgIiIKKyJyZXNjdWUgU1RBUlQgRU5EICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2N1ZSBhIGxvc3QgcGFydGl0aW9uIG5lYXIgU1RBUlQgIgorImFuZCBFTkQiCittc2dzdHIgIiIKKyJyZXNjdWUgWkHEjMOBVEVLIEtPTkVDICAgICAgICAgIHphY2hyw6FuaXQgenRyYWNlbsO9IG9kZMOtbCBwb2Jsw63FviBaQcSMw4FUS1UgYSBLT05DRSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMTMKK21zZ2lkICJyZXNpemUiCittc2dzdHIgInJlc2l6ZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMTYKKyMsIGZ1enp5Cittc2dpZCAiIgorInJlc2l6ZSBOVU1CRVIgU1RBUlQgRU5EICAgICAgICAgICAgICAgICAgcmVzaXplIHBhcnRpdGlvbiBOVU1CRVIgYW5kIGl0cyAiCisiZmlsZSBzeXN0ZW0iCittc2dzdHIgIiIKKyJyZXNjdWUgWkHEjMOBVEVLIEtPTkVDICAgICAgICAgIHphY2hyw6FuaXQgenRyYWNlbsO9IG9kZMOtbCBwb2Jsw63FviBaQcSMw4FUS1UgYSBLT05DRSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMjQKK21zZ2lkICJybSIKK21zZ3N0ciAicm0iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjI3CisjLCBmdXp6eQorbXNnaWQgInJtIE5VTUJFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHBhcnRpdGlvbiBOVU1CRVIiCittc2dzdHIgInJtIE1JTk9SICAgICAgICAgICAgICAgICAgICAgIG9kc3RyYW5pdCBvZGTDrWwgTUlOT1IiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjMyCittc2dpZCAic2VsZWN0IgorbXNnc3RyICJzZWxlY3QiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjM1CisjLCBmdXp6eQorbXNnaWQgInNlbGVjdCBERVZJQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvb3NlIHRoZSBkZXZpY2UgdG8gZWRpdCIKK21zZ3N0ciAic2VsZWN0IFpBxZjDjVpFTsONICAgICAgICAgICAgICAgenZvbGl0IHVwcmF2b3ZhbsOpIHphxZnDrXplbsOtIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI0MAorbXNnaWQgInNldCIKK21zZ3N0ciAic2V0IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI0MworIywgZnV6enkKK21zZ2lkICIiCisic2V0IE5VTUJFUiBGTEFHIFNUQVRFICAgICAgICAgICAgICAgICAgICBjaGFuZ2UgdGhlIEZMQUcgb24gcGFydGl0aW9uIE5VTUJFUiIKK21zZ3N0ciAic2V0IE1JTk9SIFDFmEVQw41OQcSMIFNUQVYgICAgICAgem3Em25pdCBwxZllcMOtbmHEjSBuYSBvZGTDrWx1IE1JTk9SIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI0OQorbXNnaWQgInRvZ2dsZSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI1MgorbXNnaWQgIiIKKyJ0b2dnbGUgW05VTUJFUiBbRkxBR11dICAgICAgICAgICAgICAgICAgIHRvZ2dsZSB0aGUgc3RhdGUgb2YgRkxBRyBvbiAiCisicGFydGl0aW9uIE5VTUJFUiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI1OAorIywgZnV6enkKK21zZ2lkICJ1bml0IgorbXNnc3RyICJxdWl0IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI2MQorIywgZnV6enkKK21zZ2lkICJ1bml0IFVOSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCB0aGUgZGVmYXVsdCB1bml0IHRvIFVOSVQiCittc2dzdHIgInF1aXQgICAgICAgICAgICAgICAgICAgICAgICAgIHVrb27EjWl0IHByb2dyYW0iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjY2Cittc2dpZCAidmVyc2lvbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI2OQorbXNnaWQgIiIKKyJ2ZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXkgdGhlIHZlcnNpb24gbnVtYmVyIGFuZCAiCisiY29weXJpZ2h0IGluZm9ybWF0aW9uIG9mIEdOVSBQYXJ0ZWQiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNzMKK21zZ2lkICIiCisiJ3ZlcnNpb24nIGRpc3BsYXlzIGNvcHlyaWdodCBhbmQgdmVyc2lvbiBpbmZvcm1hdGlvbiBjb3JyZXNwb25kaW5nIHRvIHRoaXMgIgorImNvcHkgb2YgR05VIFBhcnRlZFxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMzM1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLWhsbXN2XSBbREVWSUNFIFtDT01NQU5EIFtQQVJBTUVURVJTXV0uLi5dXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIzNzkKK21zZ2lkICJObyBkZXZpY2UgZm91bmQiCittc2dzdHIgIk5lbmFsZXplbm8gxb7DoWRuw6kgemHFmcOtemVuw60iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyNDEyCittc2dpZCAiV0FSTklORzogWW91IGFyZSBub3Qgc3VwZXJ1c2VyLiAgV2F0Y2ggb3V0IGZvciBwZXJtaXNzaW9ucy4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjI0NTAKKyMsIGZ1enp5Cittc2dpZCAiWW91IG1heSBuZWVkIHRvIHVwZGF0ZSAvZXRjL2ZzdGFiLlxuIgorbXNnc3RyICJOZXphcG9tZcWIdGUgYWt0dWFsaXpvdmF0IC9ldGMvZnN0YWIsIGplLWxpIHRvIHBvdMWZZWJhLlxuIgorCisjOiBwYXJ0ZWQvdWkuYzoxNjAKK21zZ2lkICJXZWxjb21lIHRvIEdOVSBQYXJ0ZWQhIFR5cGUgJ2hlbHAnIHRvIHZpZXcgYSBsaXN0IG9mIGNvbW1hbmRzLlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjE2MworIywgZnV6enkKK21zZ2lkICIiCisiVXNhZ2U6IHBhcnRlZCBbT1BUSU9OXS4uLiBbREVWSUNFIFtDT01NQU5EIFtQQVJBTUVURVJTXS4uLl0uLi5dXG4iCisiQXBwbHkgQ09NTUFORHMgd2l0aCBQQVJBTUVURVJTIHRvIERFVklDRS4gIElmIG5vIENPTU1BTkQocykgYXJlIGdpdmVuLCBydW4gIgorImluXG4iCisiaW50ZXJhY3RpdmUgbW9kZS5cbiIKK21zZ3N0ciAiIgorIlBvdcW+aXTDrTogcGFydGVkIFtQxZhFUMONTkHEjF0uLi4gW1pBxZjDjVpFTsONIFtQxZjDjUtBWiBbUEFSQU1FVFJZXS4uLl0uLi5dXG4iCisiUHJvdsOpc3QgUMWYw41LQVp5IHMgUEFSQU1FVFJZIG5hIFpBxZjDjVpFTsONLiBOZW7DrS1saSB6YWTDoW4gUMWYw41LQVosIGLEm8W+w60gdiAiCisiaW50ZXJha3Rpdm7DrW0gcmXFvmltdS5cbiIKKworIzogcGFydGVkL3VpLmM6MTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJcbiIKKyJZb3UgZm91bmQgYSBidWcgaW4gR05VIFBhcnRlZCEgSGVyZSdzIHdoYXQgeW91IGhhdmUgdG8gZG86XG4iCisiXG4iCisiRG9uJ3QgcGFuaWMhIFRoZSBidWcgaGFzIG1vc3QgbGlrZWx5IG5vdCBhZmZlY3RlZCBhbnkgb2YgeW91ciBkYXRhLlxuIgorIkhlbHAgdXMgdG8gZml4IHRoaXMgYnVnIGJ5IGRvaW5nIHRoZSBmb2xsb3dpbmc6XG4iCisiXG4iCisiQ2hlY2sgd2hldGhlciB0aGUgYnVnIGhhcyBhbHJlYWR5IGJlZW4gZml4ZWQgYnkgY2hlY2tpbmdcbiIKKyJ0aGUgbGFzdCB2ZXJzaW9uIG9mIEdOVSBQYXJ0ZWQgdGhhdCB5b3UgY2FuIGZpbmQgYXQ6XG4iCisiXG4iCisiXHRodHRwOi8vZnRwLmdudS5vcmcvZ251L3BhcnRlZC9cbiIKKyJcbiIKKyJQbGVhc2UgY2hlY2sgdGhpcyB2ZXJzaW9uIHByaW9yIHRvIGJ1ZyByZXBvcnRpbmcuXG4iCisiXG4iCisiSWYgdGhpcyBoYXMgbm90IGJlZW4gZml4ZWQgeWV0IG9yIGlmIHlvdSBkb24ndCBrbm93IGhvdyB0byBjaGVjayxcbiIKKyJwbGVhc2UgdmlzaXQgdGhlIEdOVSBQYXJ0ZWQgd2Vic2l0ZTpcbiIKKyJcbiIKKyJcdGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9wYXJ0ZWRcbiIKKyJcbiIKKyJmb3IgZnVydGhlciBpbmZvcm1hdGlvbi5cbiIKKyJcbiIKKyJZb3VyIHJlcG9ydCBzaG91bGQgY29udGFpbiB0aGUgdmVyc2lvbiBvZiB0aGlzIHJlbGVhc2UgKCVzKVxuIgorImFsb25nIHdpdGggdGhlIGVycm9yIG1lc3NhZ2UgYmVsb3csIHRoZSBvdXRwdXQgb2ZcbiIKKyJcbiIKKyJcdHBhcnRlZCBERVZJQ0UgdW5pdCBjbyBwcmludCB1bml0IHMgcHJpbnRcbiIKKyJcbiIKKyJhbmQgdGhlIGZvbGxvd2luZyBoaXN0b3J5IG9mIGNvbW1hbmRzIHlvdSBlbnRlcmVkLlxuIgorIkFsc28gaW5jbHVkZSBhbnkgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB5b3VyIHNldHVwIHlvdVxuIgorImNvbnNpZGVyIGltcG9ydGFudC5cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzoyODQKK21zZ2lkICIiCisiXG4iCisiQ29tbWFuZCBIaXN0b3J5OlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjM2NgorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogU0VHVl9NQVBFUlIgKEFkZHJlc3Mgbm90IG1hcHBlZCB0byBvYmplY3QpXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6MzcyCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBTRUdWX0FDQ0VSUiAoSW52YWxpZCBwZXJtaXNzaW9ucyBmb3IgbWFwcGVkIG9iamVjdClcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzozNzcKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEEgZ2VuZXJhbCBTSUdTRUdWIHNpZ25hbCB3YXMgZW5jb3VudGVyZWQuXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDEwCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfSU5URElWIChJbnRlZ2VyOiBkaXZpZGUgYnkgemVybykiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDE1Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfSU5UT1ZGIChJbnRlZ2VyOiBvdmVyZmxvdykiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDIwCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxURElWIChGbG9hdDogZGl2aWRlIGJ5IHplcm8pIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQyNQorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0ZMVE9WRiAoRmxvYXQ6IG92ZXJmbG93KSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0MzAKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRVTkQgKEZsb2F0OiB1bmRlcmZsb3cpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQzNQorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0ZMVFJFUyAoRmxvYXQ6IGluZXhhY3QgcmVzdWx0KSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0NDAKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRJTlYgKEZsb2F0OiBpbnZhbGlkIG9wZXJhdGlvbikiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDQ1Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxUU1VCIChGbG9hdDogc3Vic2NyaXB0IG91dCBvZiByYW5nZSkiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDUwCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBBIGdlbmVyYWwgU0lHRlBFIHNpZ25hbCB3YXMgZW5jb3VudGVyZWQuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQ4MworbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX0lMTE9QQyAoSWxsZWdhbCBPcGNvZGUpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQ4OAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX0lMTE9QTiAoSWxsZWdhbCBPcGVyYW5kKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0OTMKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9JTExBRFIgKElsbGVnYWwgYWRkcmVzc2luZyBtb2RlKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0OTgKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9JTExUUlAgKElsbGVnYWwgVHJhcCkiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NTAzCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfUFJWT1BDIChQcml2aWxlZ2VkIE9wY29kZSkiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NTA4Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfUFJWUkVHIChQcml2aWxlZ2VkIFJlZ2lzdGVyKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo1MTMKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9DT1BST0MgKENvcHJvY2Vzc29yIEVycm9yKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo1MTgKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9CQURTVEsgKEludGVybmFsIFN0YWNrIEVycm9yKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo1MjMKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEEgZ2VuZXJhbCBTSUdJTEwgc2lnbmFsIHdhcyBlbmNvdW50ZXJlZC4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6MTAyNAorbXNnaWQgIkV4cGVjdGluZyBhIHBhcnRpdGlvbiBudW1iZXIuIgorbXNnc3RyICJPxI1la8OhdsOhbSDEjcOtc2xvIG9kZMOtbHUuIgorCisjOiBwYXJ0ZWQvdWkuYzoxMDMzCittc2dpZCAiUGFydGl0aW9uIGRvZXNuJ3QgZXhpc3QuIgorbXNnc3RyICJPZGTDrWwgbmVleGlzdHVqZS4iCisKKyM6IHBhcnRlZC91aS5jOjEwNTMKK21zZ2lkICJFeHBlY3RpbmcgYSBmaWxlIHN5c3RlbSB0eXBlLiIKK21zZ3N0ciAiT8SNZWvDoXbDoW0gdHlwIHN5c3TDqW11IHNvdWJvcsWvLiIKKworIzogcGFydGVkL3VpLmM6MTA2MAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIGZpbGUgc3lzdGVtIHR5cGUgXCIlc1wiLiIKK21zZ3N0ciAiTmV6bsOhbcO9IHR5cCBzeXN0w6ltdSBzb3Vib3LFryBcIiVzXCIuIgorCisjOiBwYXJ0ZWQvdWkuYzoxMDgwCittc2dpZCAiRXhwZWN0aW5nIGEgZGlzayBsYWJlbCB0eXBlLiIKK21zZ3N0ciAiT8SNZWvDoXbDoW0gdHlwIGptZW5vdmt5IGRpc2t1LiIKKworIzogcGFydGVkL3VpLmM6MTE3OAorbXNnaWQgIkNhbid0IGNyZWF0ZSBhbnkgbW9yZSBwYXJ0aXRpb25zLiIKK21zZ3N0ciAiTmVtb2h1IHZ5dHbDocWZZXQgZGFsxaHDrSBvZGTDrWx5LiIKKworIzogcGFydGVkL3VpLmM6MTE4OAorbXNnaWQgIkV4cGVjdGluZyBhIHBhcnRpdGlvbiB0eXBlLiIKK21zZ3N0ciAiT8SNZWvDoXbDoW0gdHlwIG9kZMOtbHUuIgorCisjOiBwYXJ0ZWQvdWkuYzoxMzE1Cittc2dpZCAib24iCittc2dzdHIgIm9uIgorCisjOiBwYXJ0ZWQvdWkuYzoxMzE2Cittc2dpZCAib2ZmIgorbXNnc3RyICJvZmYiCisKKyM6IHBhcnRlZC91aS5jOjE0MzEKK21zZ2lkICJPUFRJT05zOiIKK21zZ3N0ciAiUMWYRVDDjU5BxIxlOiIKKworIzogcGFydGVkL3VpLmM6MTQzNgorbXNnaWQgIkNPTU1BTkRzOiIKK21zZ3N0ciAiUMWYw41LQVp5OiIKKworIzogcGFydGVkL3VpLmM6MTQ0NQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2luZyAlc1xuIgorbXNnc3RyICJQb3XFvsOtdsOhbSAlc1xuIgorCisjOiBwYXJ0ZWQvdWkuYzoxNTE5Cittc2dpZCAiVGhpcyBjb21tYW5kIGRvZXMgbm90IG1ha2Ugc2Vuc2UgaW4gbm9uLWludGVyYWN0aXZlIG1vZGUuXG4iCittc2dzdHIgIiIKKworI34gbXNnaWQgIndoZXJlIG5lY2Vzc2FyeSwgcHJvbXB0cyBmb3IgdXNlciBpbnRlcnZlbnRpb24iCisjfiBtc2dzdHIgImplLWxpIHBvdMWZZWJhLCBwb8W+w6Fkw6EgbyBpbnRlcnZlbmNpIHXFvml2YXRlbGUiCisKKyMsIGZ1enp5CisjfiBtc2dpZCAiIgorI34gIldpdGhvdXQgYXJndW1lbnRzLCBwcmludCBkaXNwbGF5cyB0aGUgZW50aXJlIHBhcnRpdGlvbiB0YWJsZS4gV2l0aCAiCisjfiAiJ2ZyZWUnXG4iCisjfiAiYXJndW1lbnQsIGluZm9ybWF0aW9uIGFib3V0IGZyZWUgc3BhY2Ugd2lsbCBiZSBkaXNwbGF5ZWQgb3RoZXJ3aXNlIGlmIGFcbiIKKyN+ICJwYXJ0aXRpb24gbnVtYmVyIGlzIGdpdmVuLCB0aGVuIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gaXMgZGlzcGxheWVkXG4iCisjfiAiYWJvdXQgdGhhdCBwYXJ0aXRpb24uIElmIHRoZSAnYWxsJyBhcmd1bWVudCBpcyBwYXNzZWQgaW5zdGVhZCwgcGFydGl0aW9uXG4iCisjfiAiaW5mb3JtYXRpb24gZm9yIGFsbCBkZXZpY2VzIHdpbGwgYmUgZGlzcGxheWVkLlxuIgorI34gbXNnc3RyICIiCisjfiAicHJpbnQgYmV6IGFyZ3VtZW50xa8gem9icmF6w60gY2Vsb3UgdGFidWxrdSBvZGTDrWzFry4gSmUtbGkgemFkw6FubyDEjcOtc2xvICIKKyN+ICJvZGTDrWx1LCB6b2JyYXrDrSBzZSBvIHRvbXRvIG9kZMOtbHUgcG9kcm9ibsSbasWhw60gaW5mb3JtYWNlLlxuIgorCisjfiBtc2dpZCAiIgorI34gIlRoZSBzZWN0b3Igc2l6ZSBvbiAlcyBpcyAlZCBieXRlcy4gIFBhcnRlZCBpcyBrbm93biBub3QgdG8gd29yayBwcm9wZXJseSAiCisjfiAid2l0aCBkcml2ZXMgd2l0aCBzZWN0b3Igc2l6ZXMgb3RoZXIgdGhhbiAlZCBieXRlcyIKKyN+IG1zZ3N0ciAiIgorI34gIlZlbGlrb3N0IHNla3RvcnUgbmEgJXMgamUgJWQgYmFqdMWvLiBWw60gc2UsIMW+ZSBwYXJ0ZWQgbmVwcmFjdWplIHNwcsOhdm7EmyBzICIKKyN+ICJkaXNreSBzIHZlbGlrb3N0w60gc2VrdG9ydSBqaW5vdSBuZcW+ICVkIGJhanTFryIKKworI34gbXNnaWQgIkNvdWxkIG5vdCByZWFkIGdlb21ldHJ5IG9mICVzIC0gJXMuIgorI34gbXNnc3RyICJOZW1vaHUgcMWZZcSNw61zdCBnZW9tZXRyaWkgJXMgLSAlcy4iCisKKyN+IG1zZ2lkICJEZXZpY2UgJXMgaGFzIGRvZGdleSBnZW9tZXRyeS4iCisjfiBtc2dzdHIgIlphxZnDrXplbsOtICVzIG3DoSByaXNrYW50bsOtIGdlb21ldHJpaS4iCisKKyN+IG1zZ2lkICJJREUiCisjfiBtc2dzdHIgIklERSIKKworI34gbXNnaWQgIlNDU0kiCisjfiBtc2dzdHIgIlNDU0kiCisKKyN+IG1zZ2lkICJEZXZpY2UgJXMgaXMgbmVpdGhlciBhIFNDU0kgbm9yIElERSBkcml2ZS4iCisjfiBtc2dzdHIgIlphxZnDrXplbsOtICVzIG5lbsOtIGRpc2sgU0NTSSBhbmkgSURFLiIKKworI34gbXNnaWQgIkVycm9yIHJlYWRpbmcgJXMgKCVzKSB0byBkZXRlcm1pbmUgaWYgcGFydGl0aW9uIGlzIG1vdW50ZWQuIgorI34gbXNnc3RyICJDaHliYSBwxZlpIMSNdGVuw60gJXMgKCVzKSBwcm8gdXLEjWVuw60sIGplc3RsaSBqZSBvZGTDrWwgcMWZaXBvamVuLiIKKworI34gbXNnaWQgIiIKKyN+ICJVbmFibGUgdG8gZGV0ZXJtaW5lIGlmIHBhcnRpdGlvbnMgYXJlIG1vdW50ZWQgdmlhIC9wcm9jL21vdW50cyBvciAvZXRjLyIKKyN+ICJtdGFiLiAgTWFrZSBzdXJlIHlvdSBkb24ndCBhdHRlbXB0IHRvIHJlc2l6ZSBvciBtb2RpZnkgbW91bnRlZCBmaWxlICIKKyN+ICJzeXN0ZW1zLiAgKEV2ZW4gcmVhZC1vbmx5IG1vdW50ZWQpIgorI34gbXNnc3RyICIiCisjfiAiTmVtb2h1IHVyxI1pdCBwb21vY8OtIC9wcm9jL21vdW50cyBuZWJvIC9ldGMvbXRhYiwgamVzdGxpIGpzb3Ugb2Rkw61seSAiCisjfiAicMWZaXBvamVueS4gUMWZZXN2xJtkxI10ZSBzZSwgxb5lIHNlIG5lcG9rb3XFocOtdGUgem3Em25pdCB2ZWxpa29zdCBuZWJvIG3Em25pdCAiCisjfiAicMWZaXBvamVuw6kgc291Ym9yeSBzb3Vib3LFry4gKEkgcMWZaXBvamVuw6kgamVuIHBybyDEjXRlbsOtKSIKKworI34gbXNnaWQgIiIKKyN+ICJUaGUgcGFydGl0aW9uIHRhYmxlIG9uICVzIGlzIGluY29uc2lzdGVudC4gIFRoZXJlIGFyZSBtYW55IHJlYXNvbnMgd2h5ICIKKyN+ICJ0aGlzIG1pZ2h0IGJlIHRoZSBjYXNlLiAgSG93ZXZlciwgdGhlIG1vc3QgbGlrZWx5IHJlYXNvbiBpcyB0aGF0IExpbnV4ICIKKyN+ICJkZXRlY3RlZCB0aGUgQklPUyBnZW9tZXRyeSBmb3IgJXMgaW5jb3JyZWN0bHkuICBHTlUgUGFydGVkIHN1c3BlY3RzIHRoZSAiCisjfiAicmVhbCBnZW9tZXRyeSBzaG91bGQgYmUgJWQvJWQvJWQgKG5vdCAlZC8lZC8lZCkuICBZb3Ugc2hvdWxkIGNoZWNrIHdpdGggIgorI34gInlvdXIgQklPUyBmaXJzdCwgYXMgdGhpcyBtYXkgbm90IGJlIGNvcnJlY3QuICBZb3UgY2FuIGluZm9ybSBMaW51eCBieSAiCisjfiAiYWRkaW5nIHRoZSBwYXJhbWV0ZXIgJXM9JWQsJWQsJWQgdG8gdGhlIGNvbW1hbmQgbGluZS4gIFNlZSB0aGUgTElMTyBvciAiCisjfiAiR1JVQiBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLiAgSWYgeW91IHRoaW5rIFBhcnRlZCdzIHN1Z2dlc3RlZCAiCisjfiAiZ2VvbWV0cnkgaXMgY29ycmVjdCwgeW91IG1heSBzZWxlY3QgSWdub3JlIHRvIGNvbnRpbnVlIChhbmQgZml4IExpbnV4ICIKKyN+ICJsYXRlcikuICBPdGhlcndpc2UsIHNlbGVjdCBDYW5jZWwgKGFuZCBmaXggTGludXggYW5kL29yIHRoZSBCSU9TIG5vdykuIgorI34gbXNnc3RyICIiCisjfiAiVGFidWxrYSBvZGTDrWzFryBuYSAlcyBuZW7DrSBrb256aXN0ZW50bsOtLiBUbyBzZSBtxa/FvmUgc3TDoXQgeiBtbm9oYSBkxa92b2TFry4gIgorI34gIk5lanByYXZkxJtwb2RvYm7Em2rFocOtIGTFr3ZvZCBqZSwgxb5lIExpbnV4IG5lc3Byw6F2bsSbIGRldGVrb3ZhbCBnZW9tZXRyaWkgIgorI34gIkJJT1N1IHBybyAlcy4gR05VIFBhcnRlZCBtw6EgcG9kZXrFmWVuw60sIMW+ZSBza3V0ZcSNbsOhIGdlb21ldHJpZSBieSBtxJtsYSBiw710ICUiCisjfiAiZC8lZC8lZCAobmUgJWQvJWQvJWQpLiBNxJtsaSBieXN0ZSB0byBuZWpkxZnDrXYgemtvbnRyb2xvdmF0IHZlIHN2w6ltIEJJT1N1LCAiCisjfiAicHJvdG/FvmUgdG8gbW/Fvm7DoSBuZW7DrSBzcHLDoXZuxJsuIExpbnV4IG3Fr8W+ZXRlIGluZm9ybW92YXQgcMWZaWTDoW7DrW0gcGFyYW1ldHJ1ICIKKyN+ICIlcz0lZCwlZCVkIG5hIHDFmcOta2F6b3bDqW0gxZnDoWRrdS4gUHJvIHbDrWNlIGluZm9ybWFjw60gdml6IGRva3VtZW50YWNpIG8gTElMTyAiCisjfiAibmVibyBHUlVCLiBKZXN0bGnFvmUgc2kgbXlzbMOtdGUsIMW+ZSBnZW9tZXRyaWUgUGFydGVkdSBqZSBzcHLDoXZuw6EsIG3Fr8W+ZXRlICIKKyN+ICJwb2tyYcSNb3ZhdCB6dm9sZW7DrW0gSWdub3JvdmF0IChhIG9wcmF2aXQgTGludXggcG96ZMSbamkpLiBWIG9wYcSNbsOpbSAiCisjfiAicMWZw61wYWTEmyB6dm9sdGUgWnJ1xaFpdCAoYSBvcHJhdnRlIExpbnV4IGEvbmVibyBCSU9TIGhuZWQpLiIKKworI34gbXNnaWQgIiIKKyN+ICJUaGUgcGFydGl0aW9uIHRhYmxlIG9uICVzIGlzIGluY29uc2lzdGVudC4gIFRoZXJlIGFyZSBtYW55IHJlYXNvbnMgd2h5ICIKKyN+ICJ0aGlzIG1pZ2h0IGJlIHRoZSBjYXNlLiAgT2Z0ZW4sIHRoZSByZWFzb24gaXMgdGhhdCBMaW51eCBkZXRlY3RlZCB0aGUgIgorI34gIkJJT1MgZ2VvbWV0cnkgaW5jb3JyZWN0bHkuICBIb3dldmVyLCB0aGlzIGRvZXMgbm90IGFwcGVhciB0byBiZSB0aGUgY2FzZSAiCisjfiAiaGVyZS4gIEl0IGlzIHNhZmUgdG8gaWdub3JlLGJ1dCBpZ25vcmluZyBtYXkgY2F1c2UgKGZpeGFibGUpIHByb2JsZW1zICIKKyN+ICJ3aXRoIHNvbWUgYm9vdCBsb2FkZXJzLCBhbmQgbWF5IGNhdXNlIHByb2JsZW1zIHdpdGggRkFUIGZpbGUgc3lzdGVtcy4gICIKKyN+ICJVc2luZyBMQkEgaXMgcmVjb21tZW5kZWQuIgorI34gbXNnc3RyICIiCisjfiAiVGFidWxrYSBvZGTDrWzFryBuYSAlcyBuZW7DrSBrb256aXN0ZW50bsOtLiBUbyBzZSBtxa/FvmUgc3TDoXQgeiBtbm9oYSBkxa92b2TFry4gIgorI34gIsSMYXN0byBzZSBzdMOhdsOhLCDFvmUgTGludXggbmVzcHLDoXZuxJsgZGV0ZWt1amUgZ2VvbWV0cmlpIEJJT1N1LiBUbyBhbGUgbmVuw60gIgorI34gInRlbnRvIHDFmcOtcGFkLiBNxa/FvmV0ZSBwcm9ibMOpbSBiZXogb2JhdiBpZ25vcm92YXQsIGFsZSBqZWhvIGlnbm9yb3bDoW7DrSBtxa/FvmUgIgorI34gInpwxa9zb2JpdCAob3ByYXZpdGVsbsOpKSBwcm9ibMOpbXkgcyBuxJtrdGVyw71taSB6YXZhZMSbxI1pIHN5c3TDqW11IGEgbcWvxb5lICIKKyN+ICJ6cMWvc29iaXQgcHJvYmzDqW15IHNlIHN5c3TDqW15IHNvdWJvcsWvIEZBVC4gRG9wb3J1xI11amUgc2UgcG91xb7DrXZhdCBMQkEuIgorCisjfiBtc2dpZCAiIgorI34gIlVuYWJsZSB0byBhbGlnbiBwYXJ0aXRpb24gcHJvcGVybHkuICBUaGlzIHByb2JhYmx5IG1lYW5zIHRoYXQgYW5vdGhlciAiCisjfiAicGFydGl0aW9uaW5nIHRvb2wgZ2VuZXJhdGVkIGFuIGluY29ycmVjdCBwYXJ0aXRpb24gdGFibGUsIGJlY2F1c2UgaXQgIgorI34gImRpZG4ndCBoYXZlIHRoZSBjb3JyZWN0IEJJT1MgZ2VvbWV0cnkuICBJdCBpcyBzYWZlIHRvIGlnbm9yZSxidXQgaWdub3JpbmcgIgorI34gIm1heSBjYXVzZSAoZml4YWJsZSkgcHJvYmxlbXMgd2l0aCBzb21lIGJvb3QgbG9hZGVycy4iCisjfiBtc2dzdHIgIiIKKyN+ICJOZW1vaHUgc3Byw6F2bsSbIHphcm92bmF0IG9kZMOtbC4gVG8gcHJhdmTEm3BvZG9ibsSbIHpuYW1lbsOhLCDFvmUgamluw70gbsOhc3Ryb2ogIgorI34gIm5hIHR2b3JidSBvZGTDrWzFryB2eWdlbmVyb3ZhbCBuZXNwcsOhdm5vdSB0YWJ1bGt1IG9kZMOtbMWvLCBwcm90b8W+ZSBuZW3Em2wgIgorI34gInNwcsOhdm5vdSBnZW9tZXRyaWkgQklPU3UuIFRlbnRvIHByb2Jsw6ltIG3Fr8W+ZXRlIGJleiBvYmF2IGlnbm9yb3ZhdCwgYWxlICIKKyN+ICJqZWhvIGlnbm9yb3bDoW7DrSBtxa/FvmUgenDFr3NvYml0IChvcHJhdml0ZWxuw6kpIHByb2Jsw6lteSBzIG7Em2t0ZXLDvW1pIHphdmFkxJvEjWkgIgorI34gInN5c3TDqW11LiIKKworI34gbXNnaWQgIkF0dGVtcHQgdG8gcmVhZCBzZWN0b3JzICVsZC0lbGQgb3V0c2lkZSBvZiBwYXJ0aXRpb24gb24gJXMiCisjfiBtc2dzdHIgIlBva3VzIMSNw61zdCBzZWt0b3J5ICVsZC0lbGQgbWltbyBvZGTDrWwgbmEgJXMiCisKKyN+IG1zZ2lkICIiCisjfiAiVGhpcyBleHQyIGZpbGVzeXN0ZW0gaGFzIGEgcmF0aGVyIHN0cmFuZ2UgbGF5b3V0ISAgUGFydGVkIGNhbid0IHJlc2l6ZSAiCisjfiAidGhpcyAoeWV0KS4iCisjfiBtc2dzdHIgIiIKKyN+ICJUZW50byBzeXN0w6ltIHNvdWJvcsWvIGV4dDIgbcOhIHBvbsSba3VkIHp2bMOhxaF0bsOtIHJvemxvxb5lbsOtISBQYXJ0ZWQgKGplxaF0xJspICIKKyN+ICJuZXVtw60gem3Em25pdCBqZWhvIHZlbGlrb3N0LiIKKworI34gbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyBhbiBpbnZhbGlkIHNpZ25hdHVyZSBmb3IgYSBGQVQgZmlsZSBzeXN0ZW1zLiIKKyN+IG1zZ3N0ciAiU3lzdMOpbSBzb3Vib3LFryBtw6EgbmVwbGF0bsO9IHBvZHBpcyBwcm8gc3lzdMOpbXkgc291Ym9yxa8gRkFULiIKKworI34gbXNnaWQgIiIKKyN+ICJQYXJ0aXRpb24gJXMgaXMgYmVpbmcgdXNlZC4gIE1vZGlmeWluZyBpdCB3aGlsZSBpdCBpcyBpbiB1c2UgY291bGQgY2F1c2UgIgorI34gInNldmVyZSBjb3JydXB0aW9uLiIKKyN+IG1zZ3N0ciAiIgorI34gIk9kZMOtbCAlcyBqZSBwb3XFvsOtdsOhbi4gw5pwcmF2eSBvZGTDrWx1LCBrdGVyw70gamUgcG91xb7DrXbDoW4sIG1vaG91IHbDqXN0IGsgIgorI34gInbDocW+bsOpbXUgcG/FoWtvemVuw60gZGF0LiIKKworI34gbXNnaWQgIiIKKyN+ICJZb3UgcmVxdWVzdGVkIHRvIGNyZWF0ZSBhIHBhcnRpdGlvbiBhdCAlLjNmLSUuM2ZNYi4gVGhlIGNsb3Nlc3QgUGFydGVkICIKKyN+ICJjYW4gbWFuYWdlIGlzICUuM2YtJS4zZk1iLiIKKyN+IG1zZ3N0ciAiIgorI34gIlBvxb5hZG92YWxpIGpzdGUgdnl0dm/FmWVuw60gb2Rkw61sdSBuYSAlLjNmLSUuM2ZNYi4gTmVqYmxpxb7FocOtLCBjbyBQYXJ0ZWQgIgorI34gIm3Fr8W+ZSB6dmzDoWRub3V0LCBqZSAlLjNmLSUuM2ZNYi4iCisKKyN+IG1zZ2lkICIiCisjfiAiWW91IHJlcXVlc3RlZCB0byBtb3ZlIHRoZSBwYXJ0aXRpb24gdG8gJS4zZi0lLjNmTWIuIFRoZSBjbG9zZXN0IFBhcnRlZCAiCisjfiAiY2FuIG1hbmFnZSBpcyAlLjNmLSUuM2ZNYi4iCisjfiBtc2dzdHIgIiIKKyN+ICJQb8W+YWRvdmFsaSBqc3RlIHDFmWVzdW4gb2Rkw61sdSBuYSAlLjNmLSUuM2ZNYi4gTmVqYmxpxb7FocOtLCBjbyBQYXJ0ZWQgbcWvxb5lICIKKyN+ICJ6dmzDoWRub3V0LCBqZSAlLjNmLSUuM2ZNYi4iCisKKyN+IG1zZ2lkICJEaXNrIGdlb21ldHJ5IGZvciAlczogMC4wMDAtJS4zZiBtZWdhYnl0ZXNcbiIKKyN+IG1zZ3N0ciAiR2VvbWV0cmllIGRpc2t1IHBybyAlczogMC4wMDAtJS4zZiBtZWdhYmFqdMWvXG4iCisKKyN+IG1zZ2lkICJEaXNrIGxhYmVsIHR5cGU6ICVzXG4iCisjfiBtc2dzdHIgIlR5cCBqbWVub3ZreSBkaXNrdTogJXNcbiIKKworI34gbXNnaWQgIk1pbm9yICAgIFN0YXJ0ICAgICAgIEVuZCAgICAgIgorI34gbXNnc3RyICJNaW5vciAgICBaYcSNw6F0ZWsgICAgIEtvbmVjICAgIgorCisjfiBtc2dpZCAiVHlwZSAgICAgICIKKyN+IG1zZ3N0ciAiVHlwICAgICAgICIKKworI34gbXNnaWQgIkZpbGVzeXN0ZW0gICIKKyN+IG1zZ3N0ciAiU3lzIHNvdWJvcsWvICIKKworI34gbXNnaWQgIk5hbWUgICAgICAgICAgICAgICAgICAiCisjfiBtc2dzdHIgIk7DoXpldiAgICAgICAgICAgICAgICAgIgorCisjfiBtc2dpZCAiIgorI34gIllvdSByZXF1ZXN0ZWQgdG8gcmVzaXplIHRoZSBwYXJ0aXRpb24gdG8gJS4zZi0lLjNmTWIuIFRoZSBjbG9zZXN0IFBhcnRlZCAiCisjfiAiY2FuIG1hbmFnZSBpcyAlLjNmLSUuM2ZNYi4iCisjfiBtc2dzdHIgIiIKKyN+ICJQb8W+YWRvdmFsaSBqc3RlIHptxJtudSB2ZWxpa29zdGkgb2Rkw61sdSBuYSAlLjNmLSUuM2ZNYi4gTmVqYmxpxb7FocOtLCBjbyAiCisjfiAiUGFydGVkIG3Fr8W+ZSB6dmzDoWRub3V0LCBqZSAlLjNmLSUuM2ZNYi4iCisKKyN+IG1zZ2lkICJyZXNpemUgTUlOT1IgU1RBUlQgRU5EICAgICAgICByZXNpemUgZmlsZXN5c3RlbSBvbiBwYXJ0aXRpb24gTUlOT1IiCisjfiBtc2dzdHIgIiIKKyN+ICJyZXNpemUgTUlOT1IgWkHEjMOBVEVLIEtPTkVDICAgIHptxJtuaXQgdmVsaWtvc3Qgc3lzdMOpbXUgc291Ym9yxa8gbmEgb2Rkw61sdSAiCisjfiAiTUlOT1IiCisKKyN+IG1zZ2lkICIiCisjfiAiWW91IGZvdW5kIGEgYnVnIGluIEdOVSBQYXJ0ZWQuICBQbGVhc2UgZW1haWwgYSBidWcgcmVwb3J0IHRvIGJ1Zy0iCisjfiAicGFydGVkQGdudS5vcmcgY29udGFpbmluZyB0aGUgdmVyc2lvbiAoJXMpLCBhbmQgdGhlIGZvbGxvd2luZyBtZXNzYWdlOlxuIgorI34gbXNnc3RyICIiCisjfiAiTmHFoWxpIGpzdGUgY2h5YnUgdiBHTlUgcGFydGVkLiBQb8WhbGV0ZSBwcm9zw61tIGUtbWFpbGVtIGhsw6HFoWVuw60gbyBjaHlixJsgbmEgIgorI34gImJ1Zy1wYXJ0ZWRAZ251Lm9yZyBvYnNhaHVqw61jw60gdmVyemkgKCVzKSBhIG7DoXNsZWR1asOtY8OtIHpwcsOhdnU6XG4iCisKKyN+IG1zZ2lkICIiCisjfiAiICBZb3UgaGF2ZSBXaW5kb3dzIEZBVCBwYXJ0aXRpb24ocykgdGhhdCBhcmUgbm90IHVzaW5nIExCQS4gIElmIHlvdXIgQklPUyAiCisjfiAic3VwcG9ydHMgTEJBLCB0aGVuIHlvdSBzaG91bGQgc3dpdGNoIHRvIExCQSBieSBzZXR0aW5nIHRoZSBMQkEgZmxhZyBvbiAiCisjfiAiYWxsIEZBVCBwYXJ0aXRpb25zLiAgT3RoZXJ3aXNlLCBtYWtlIHN1cmUgdGhlIG9wZXJhdGluZyBzeXN0ZW0gYW5kIHRoZSAiCisjfiAiQklPUyBoYXZlIHRoZSBzYW1lIGdlb21ldHJ5IGJlZm9yZSByZXNpemluZyBhbnkgRkFUIHBhcnRpdGlvbnMuIgorI34gbXNnc3RyICIiCisjfiAiTcOhdGUgb2Rkw61sKHkpIFdpbmRvd3MgRkFULCBrdGVyw6kgbmVwb3XFvsOtdmFqw60gTEJBLiBQb2t1ZCB2w6HFoSBCSU9TICIKKyN+ICJwb2Rwb3J1amUgTEJBLCBtxJtsaSBieXN0ZSBwxZllasOtdCBuYSBMQkEgbmFzdGF2ZW7DrW0gcMWZZXDDrW5hxI1lIExCQSBuYSB2xaFlY2ggIgorI34gIm9kZMOtbGVjaCBGQVQuIFYgb3BhxI1uw6ltIHDFmcOtcGFkxJsgc2UgcMWZZWQgem3Em25vdSB2ZWxpa29zdGkgb2Rkw61sxa8gRkFUICIKKyN+ICJwxZllc3bEm2TEjWV0ZSwgxb5lIG9wZXJhxI1uw60gc3lzdMOpbSBhIEJJT1MgbWFqw60gc3Rlam5vdSBnZW9tZXRyaWkuIgorCisjfiBtc2dpZCAiIgorI34gIlRoZSBvcGVyYXRpbmcgc3lzdGVtIHRoaW5rcyB0aGUgZ2VvbWV0cnkgb24gJXMgaXMgJWQvJWQvJWQuICBUaGVyZWZvcmUsICIKKyN+ICJjeWxpbmRlciAxMDI0IGVuZHMgYXQgJS4zZk0uJXMiCisjfiBtc2dzdHIgIiIKKyN+ICJPcGVyYcSNbsOtIHN5c3TDqW0gc2kgbXlzbMOtLCDFvmUgZ2VvbWV0cmllIG5hICVzIGplICVkLyVkLyVkLiBDeWxpbmRyIDEwMjQgIgorI34gInRlZHkga29uxI3DrSBuYSAlLjNmTS4lcyIKKworI34gbXNnaWQgIlRoZSBvcGVyYXRpbmcgc3lzdGVtIHRoaW5rcyB0aGUgZ2VvbWV0cnkgb24gJXMgaXMgJWQvJWQvJWQuJXMiCisjfiBtc2dzdHIgIk9wZXJhxI1uw60gc3lzdMOpbSBzaSBteXNsw60sIMW+ZSBnZW9tZXRyaWUgbmEgJXMgamUgJWQvJWQvJWQuJXMiCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvcG8vZGEuZ21vIGIvcGFydGVkLTEuOC43L3BvL2RhLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDM3MDM1Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L3BvL2RhLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvcG8vZGEucG8gYi9wYXJ0ZWQtMS44LjcvcG8vZGEucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ3ZjBlNQotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9wby9kYS5wbwpAQCAtMCwwICsxLDM1NjkgQEAKKyMgRGFuaXNoIG1lc3NhZ2VzIGZvciBwYXJ0ZWQKKyMgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBLZWxkIFNpbW9uc2VuIDxrZWxkQGRrdXVnLmRrPiwgMjAwMS0yMDAyLgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogcGFydGVkIDEuNi41LXByZTFcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogYnVnLXBhcnRlZEBnbnUub3JnXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMDctMDUtMDkgMTc6MDItMDQwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDMtMDEtMTcgMTc6MDkrMDIwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogS2VsZCBTaW1vbnNlbiA8a2VsZEBka3V1Zy5kaz5cbiIKKyJMYW5ndWFnZS1UZWFtOiBEYW5pc2ggPGRhbnNrQGtsaWQuZGs+XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9aXNvLTg4NTktMVxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKworIzogbGliL2Nsb3Nlb3V0LmM6NzQKK21zZ2lkICJ3cml0ZSBlcnJvciIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXJyb3IuYzoxMjUKKyMsIGZ1enp5Cittc2dpZCAiVW5rbm93biBzeXN0ZW0gZXJyb3IiCittc2dzdHIgIlVrZW5kdCBmaWxzeXN0ZW1zdHlwZSAnJXMnLiIKKworIzogbGliL2dldG9wdC5jOjUzMSBsaWIvZ2V0b3B0LmM6NTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYCVzJyBpcyBhbWJpZ3VvdXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6NTgwIGxpYi9nZXRvcHQuYzo1ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiBgLS0lcycgZG9lc24ndCBhbGxvdyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo1OTMgbGliL2dldG9wdC5jOjU5OAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIGAlYyVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjY0MSBsaWIvZ2V0b3B0LmM6NjYwIGxpYi9nZXRvcHQuYzo5NzYgbGliL2dldG9wdC5jOjk5NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIGAlcycgcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6Njk4IGxpYi9nZXRvcHQuYzo3MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVucmVjb2duaXplZCBvcHRpb24gYC0tJXMnXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjcwOSBsaWIvZ2V0b3B0LmM6NzEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bnJlY29nbml6ZWQgb3B0aW9uIGAlYyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo3NjQgbGliL2dldG9wdC5jOjc2NworIywgYy1mb3JtYXQKK21zZ2lkICIlczogaWxsZWdhbCBvcHRpb24gLS0gJWNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6NzczIGxpYi9nZXRvcHQuYzo3NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgb3B0aW9uIC0tICVjXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjgyOCBsaWIvZ2V0b3B0LmM6ODQ0IGxpYi9nZXRvcHQuYzoxMDQ4IGxpYi9nZXRvcHQuYzoxMDY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQgLS0gJWNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6ODk3IGxpYi9nZXRvcHQuYzo5MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiBgLVcgJXMnIGlzIGFtYmlndW91c1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo5MzcgbGliL2dldG9wdC5jOjk1NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIGAtVyAlcycgZG9lc24ndCBhbGxvdyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOgorIy4gR2V0IHRyYW5zbGF0aW9ucyBmb3Igb3BlbiBhbmQgY2xvc2luZyBxdW90YXRpb24gbWFya3MuCisjLgorIy4gVGhlIG1lc3NhZ2UgY2F0YWxvZyBzaG91bGQgdHJhbnNsYXRlICJgIiB0byBhIGxlZnQKKyMuIHF1b3RhdGlvbiBtYXJrIHN1aXRhYmxlIGZvciB0aGUgbG9jYWxlLCBhbmQgc2ltaWxhcmx5IGZvcgorIy4gIiciLiAgSWYgdGhlIGNhdGFsb2cgaGFzIG5vIHRyYW5zbGF0aW9uLAorIy4gbG9jYWxlX3F1b3Rpbmdfc3R5bGUgcXVvdGVzIGBsaWtlIHRoaXMnLCBhbmQKKyMuIGNsb2NhbGVfcXVvdGluZ19zdHlsZSBxdW90ZXMgImxpa2UgdGhpcyIuCisjLgorIy4gRm9yIGV4YW1wbGUsIGFuIEFtZXJpY2FuIEVuZ2xpc2ggVW5pY29kZSBsb2NhbGUgc2hvdWxkCisjLiB0cmFuc2xhdGUgImAiIHRvIFUrMjAxQyAoTEVGVCBET1VCTEUgUVVPVEFUSU9OIE1BUkspLCBhbmQKKyMuIHNob3VsZCB0cmFuc2xhdGUgIiciIHRvIFUrMjAxRCAoUklHSFQgRE9VQkxFIFFVT1RBVElPTgorIy4gTUFSSykuICBBIEJyaXRpc2ggRW5nbGlzaCBVbmljb2RlIGxvY2FsZSBzaG91bGQgaW5zdGVhZAorIy4gdHJhbnNsYXRlIHRoZXNlIHRvIFUrMjAxOCAoTEVGVCBTSU5HTEUgUVVPVEFUSU9OIE1BUkspIGFuZAorIy4gVSsyMDE5IChSSUdIVCBTSU5HTEUgUVVPVEFUSU9OIE1BUkspLCByZXNwZWN0aXZlbHkuCisjLgorIy4gSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBwdXQgaGVyZSwgcGxlYXNlIHNlZQorIy4gPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUXVvdGF0aW9uX21hcmsjR2x5cGhzPgorIy4gYW5kIHVzZSBnbHlwaHMgc3VpdGFibGUgZm9yIHlvdXIgbGFuZ3VhZ2UuCisjOiBsaWIvcXVvdGVhcmcuYzoyMjkKK21zZ2lkICJgIgorbXNnc3RyICIiCisKKyM6IGxpYi9xdW90ZWFyZy5jOjIzMAorbXNnaWQgIiciCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxMzEKK21zZ2lkICJTdWNjZXNzIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTM0Cittc2dpZCAiTm8gbWF0Y2giCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxMzcKK21zZ2lkICJJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE0MAorbXNnaWQgIkludmFsaWQgY29sbGF0aW9uIGNoYXJhY3RlciIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE0MworbXNnaWQgIkludmFsaWQgY2hhcmFjdGVyIGNsYXNzIG5hbWUiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNDYKK21zZ2lkICJUcmFpbGluZyBiYWNrc2xhc2giCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNDkKK21zZ2lkICJJbnZhbGlkIGJhY2sgcmVmZXJlbmNlIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTUyCittc2dpZCAiVW5tYXRjaGVkIFsgb3IgW14iCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNTUKK21zZ2lkICJVbm1hdGNoZWQgKCBvciBcXCgiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNTgKK21zZ2lkICJVbm1hdGNoZWQgXFx7IgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTYxCittc2dpZCAiSW52YWxpZCBjb250ZW50IG9mIFxce1xcfSIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE2NAorbXNnaWQgIkludmFsaWQgcmFuZ2UgZW5kIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTY3Cittc2dpZCAiTWVtb3J5IGV4aGF1c3RlZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE3MAorbXNnaWQgIkludmFsaWQgcHJlY2VkaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE3MworbXNnaWQgIlByZW1hdHVyZSBlbmQgb2YgcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTc2Cittc2dpZCAiUmVndWxhciBleHByZXNzaW9uIHRvbyBiaWciCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNzkKK21zZ2lkICJVbm1hdGNoZWQgKSBvciBcXCkiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzo2ODAKK21zZ2lkICJObyBwcmV2aW91cyByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgIiIKKworIzogbGliL3JwbWF0Y2guYzo3MAorbXNnaWQgIl5beVldIgorbXNnc3RyICIiCisKKyM6IGxpYi9ycG1hdGNoLmM6NzMKK21zZ2lkICJeW25OXSIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogVHJhbnNsYXRlICIoQykiIHRvIHRoZSBjb3B5cmlnaHQgc3ltYm9sCisjLiAoQy1pbi1hLWNpcmNsZSksIGlmIHRoaXMgc3ltYm9sIGlzIGF2YWlsYWJsZSBpbiB0aGUgdXNlcidzCisjLiBsb2NhbGUuICBPdGhlcndpc2UsIGRvIG5vdCB0cmFuc2xhdGUgIihDKSI7IGxlYXZlIGl0IGFzLWlzLgorIzogbGliL3ZlcnNpb24tZXRjLmM6NjYKK21zZ2lkICIoQykiCittc2dzdHIgIiIKKworIzogbGliL3ZlcnNpb24tZXRjLmM6NjgKK21zZ2lkICIiCisiXG4iCisiTGljZW5zZSBHUEx2Mis6IEdOVSBHUEwgdmVyc2lvbiAyIG9yIGxhdGVyIDxodHRwOi8vZ251Lm9yZy9saWNlbnNlcy9ncGwuIgorImh0bWw+XG4iCisiVGhpcyBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgYXJlIGZyZWUgdG8gY2hhbmdlIGFuZCByZWRpc3RyaWJ1dGUgaXQuXG4iCisiVGhlcmUgaXMgTk8gV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIldyaXR0ZW4gYnkgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjg4CisjLCBjLWZvcm1hdAorbXNnaWQgIldyaXR0ZW4gYnkgJXMgYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzo5MgorIywgYy1mb3JtYXQKK21zZ2lkICJXcml0dGVuIGJ5ICVzLCAlcywgYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjLiBZb3UgY2FuIHVzZSBsaW5lIGJyZWFrcywgZXN0aW1hdGluZyB0aGF0IGVhY2ggYXV0aG9yIG5hbWUgb2NjdXBpZXMKKyMuIGNhLiAxNiBzY3JlZW4gY29sdW1ucyBhbmQgdGhhdCBhIHNjcmVlbiBsaW5lIGhhcyBjYS4gODAgY29sdW1ucy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjLiBZb3UgY2FuIHVzZSBsaW5lIGJyZWFrcywgZXN0aW1hdGluZyB0aGF0IGVhY2ggYXV0aG9yIG5hbWUgb2NjdXBpZXMKKyMuIGNhLiAxNiBzY3JlZW4gY29sdW1ucyBhbmQgdGhhdCBhIHNjcmVlbiBsaW5lIGhhcyBjYS4gODAgY29sdW1ucy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjEwNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorIiVzLCBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiJXMsICVzLCBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6MTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiJXMsICVzLCAlcywgYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjLiBZb3UgY2FuIHVzZSBsaW5lIGJyZWFrcywgZXN0aW1hdGluZyB0aGF0IGVhY2ggYXV0aG9yIG5hbWUgb2NjdXBpZXMKKyMuIGNhLiAxNiBzY3JlZW4gY29sdW1ucyBhbmQgdGhhdCBhIHNjcmVlbiBsaW5lIGhhcyBjYS4gODAgY29sdW1ucy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjEyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorIiVzLCAlcywgJXMsICVzLFxuIgorImFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzoxMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyIlcywgJXMsICVzLCAlcyxcbiIKKyIlcywgYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjLiBZb3UgY2FuIHVzZSBsaW5lIGJyZWFrcywgZXN0aW1hdGluZyB0aGF0IGVhY2ggYXV0aG9yIG5hbWUgb2NjdXBpZXMKKyMuIGNhLiAxNiBzY3JlZW4gY29sdW1ucyBhbmQgdGhhdCBhIHNjcmVlbiBsaW5lIGhhcyBjYS4gODAgY29sdW1ucy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjE0MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorIiVzLCAlcywgJXMsICVzLFxuIgorIiVzLCAlcywgYW5kIG90aGVycy5cbiIKK21zZ3N0ciAiIgorCisjOiBsaWIveGFsbG9jLWRpZS5jOjM1Cittc2dpZCAibWVtb3J5IGV4aGF1c3RlZCIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6MjM3Cittc2dpZCAiRGlzayBJbWFnZSIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6MzM4IGxpYnBhcnRlZC9hcmNoL2dudS5jOjI2MQorIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMjcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIG9wZW5pbmcgJXM6ICVzIgorbXNnc3RyICJFbiBmZWpsIG9wc3RvZCBkYSAlcyDlYm5lZGVzOiAlcyIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjM0OSBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzoyNzEKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTI4MworIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gb3BlbiAlcyByZWFkLXdyaXRlICglcykuICAlcyBoYXMgYmVlbiBvcGVuZWQgcmVhZC1vbmx5LiIKK21zZ3N0ciAiIgorIkt1bm5lIGlra2Ug5WJuZSAlcyBmb3IgYuVkZSBs5nNuaW5nIG9nIHNrcml2bmluZyAoJXMpLiAlcyDlYm5lZGVzIGkgIgorImzmc2V0aWxzdGFuZC4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzo0MTEgbGlicGFydGVkL2FyY2gvbGludXguYzoxNDMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGR1cmluZyBzZWVrIGZvciByZWFkIG9uICVzIgorbXNnc3RyICIlcyB1bmRlciBwb3NpdGlvbmVyaW5nIGZvciBhdCBs5nNlIHDlICVzIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6NDQ0IGxpYnBhcnRlZC9hcmNoL2dudS5jOjQ0OSBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo1NDgKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjY3NiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjEzOTEKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkdXJpbmcgcmVhZCBvbiAlcyIKK21zZ3N0ciAiJXMgdW5kZXIgbOZzbmluZyBw5SAlcyIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjQ4MCBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo1MDkKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTU0NgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW4ndCB3cml0ZSB0byAlcywgYmVjYXVzZSBpdCBpcyBvcGVuZWQgcmVhZC1vbmx5LiIKK21zZ3N0ciAiS2FuIGlra2Ugc2tyaXZlIHRpbCAlcyBlZnRlcnNvbSBkZW4ga3VuIGVyIOVibmV0IGkgbOZzZXRpbHN0YW5kLiIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjQ5NiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjE1NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZHVyaW5nIHNlZWsgZm9yIHdyaXRlIG9uICVzIgorbXNnc3RyICIlcyB1bmRlciBwb3NpdGlvbmVyaW5nIGZvciBhdCBza3JpdmUgcOUgJXMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzo1MzMgbGlicGFydGVkL2FyY2gvZ251LmM6NTg1IGxpYnBhcnRlZC9hcmNoL2dudS5jOjYzMAorIzogbGlicGFydGVkL2FyY2gvZ251LmM6NzA3IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTUxNworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxNjEyIGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTY4NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkdXJpbmcgd3JpdGUgb24gJXMiCittc2dzdHIgIiVzIHVuZGVyIHNrcml2bmluZyBw5SAlcyIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo2MyBwYXJ0cHJvYmUvcGFydHByb2JlLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeSBgJXMgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogJXMgW09QVElPTl1cbiIKKyIgIG9yOiAgJXMgREVWSUNFIE1JTk9SXG4iCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo3MAorbXNnaWQgIiIKKyJDbGVhciB1bnVzZWQgc3BhY2Ugb24gYSBGQVQgcGFydGl0aW9uIChhIEdOVSBQYXJ0ZWQgdGVzdGluZyB0b29sKS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjc0Cittc2dpZCAiICAgICAgLS1oZWxwICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdFxuIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6NzUKK21zZ2lkICIgICAgICAtLXZlcnNpb24gIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0XG4iCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo3NyBwYXJ0cHJvYmUvcGFydHByb2JlLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJSZXBvcnQgYnVncyB0byA8JXM+LlxuIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6Mjg1CisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBmZXcgYXJndW1lbnRzIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6MjkwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMiCittc2dzdHIgIkZvciBtYW5nZSBk5XJsaWdlIHNpZGVyLiIKKworIzogcGFydHByb2JlL3BhcnRwcm9iZS5jOjE0MQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgW09QVElPTl0gW0RFVklDRV0uLi5cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0cHJvYmUvcGFydHByb2JlLmM6MTQyCittc2dpZCAiIgorIkluZm9ybSB0aGUgT1Mgb2YgcGFydGl0aW9uIHRhYmxlIGNoYW5nZXMuXG4iCisiXG4iCisiICAtZCwgLS1uby11cGRhdGUgIGRvbid0IHVwZGF0ZSB0aGUga2VybmVsXG4iCisiICAtcywgLS1zdW1tYXJ5ICAgIHByaW50IGEgc3VtbWFyeSBvZiBjb250ZW50c1xuIgorIiAgLWgsIC0taGVscCAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdFxuIgorIiAgLXYsIC0tdmVyc2lvbiAgICBvdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdFxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRwcm9iZS9wYXJ0cHJvYmUuYzoxNTAKK21zZ2lkICIiCisiXG4iCisiV2l0aCBubyBERVZJQ0UsIHByb2JlIGFsbCBwYXJ0aXRpb25zLlxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBvcGVuICVzLiIKK21zZ3N0ciAiS3VubmUgaWtrZSDlYm5lICVzLiIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6MTE0Cittc2dpZCAiVW5hYmxlIHRvIHByb2JlIHN0b3JlLiIKK21zZ3N0ciAiS3VubmUgaWtrZSB1bmRlcnP4Z2UgbGFnZXJldC4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjM1MgorIywgZnV6enkKK21zZ2lkICIiCisiVGhlIHBhcnRpdGlvbiB0YWJsZSBjYW5ub3QgYmUgcmUtcmVhZC4gIFRoaXMgbWVhbnMgeW91IG5lZWQgdG8gcmVib290IGJlZm9yZSAiCisibW91bnRpbmcgYW55IG1vZGlmaWVkIHBhcnRpdGlvbnMuICBZb3UgYWxzbyBuZWVkIHRvIHJlaW5zdGFsbCB5b3VyIGJvb3QgIgorImxvYWRlciBiZWZvcmUgeW91IHJlYm9vdCAod2hpY2ggbWF5IHJlcXVpcmUgbW91bnRpbmcgbW9kaWZpZWQgcGFydGl0aW9ucykuICAiCisiSXQgaXMgaW1wb3NzaWJsZSBkbyBib3RoIHRoaW5ncyEgIFNvIHlvdSdsbCBuZWVkIHRvIGJvb3Qgb2ZmIGEgcmVzY3VlIGRpc2ssICIKKyJhbmQgcmVpbnN0YWxsIHlvdXIgYm9vdCBsb2FkZXIgZnJvbSB0aGUgcmVzY3VlIGRpc2suICBSZWFkIHNlY3Rpb24gNCBvZiB0aGUgIgorIlBhcnRlZCBVc2VyIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorbXNnc3RyICIiCisiUGFydGl0aW9uc3RhYmVsbGVuIGt1bm5lIGlra2UgZ2VuaW5kbOZzZXMsIHPlIGRlcmZvciBza2FsIGR1IHN0YXJ0ZSBtYXNraW5lICIKKyJvcCBpZ2VuIGluZGVuIGR1IGthbiBtb250ZXJlIG5vZ2VuIOZuZHJlZGUgcGFydGl0aW9uZXIuIER1IHNrYWwgb2dz5SAiCisiZ2VuaW5zdGFsbGVyZSBvcHN0YXJ0c3Byb2dyYW1tZXQgaW5kZW4gZHUgZ2Vuc3RhcnRlciAoaHZpbGtldCBrYW4gaW5kZWLmcmUgIgorIm1vbnRlcmluZyBhZiDmbmRyZWRlIHBhcnRpdGlvbmVyKS4gRGV0IGVyIHVtdWxpZ3QgYXQgZ/hyZSBiZWdnZSBkZWxlISBT5SBkdSAiCisic2thbCBzdGFydGUgZnJhIGVuIHJlZG5pbmdzZGlza2V0dGUgb2cgZ2VuaW5zdGFsbGVyZSBvcHN0YXJ0c3Byb2dyYW1tZXQgZnJhICIKKyJyZWRuaW5nc2Rpc2tldHRlbi4gTOZzIGthcGl0ZWwgNCBpIFBhcnRlZHMgYnJ1Z2VybWFudWFsIGZvciBtZXJlIGluZm9ybWF0aW9uLiIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6MzY5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIHBhcnRpdGlvbiB0YWJsZSBvbiAlcyBjYW5ub3QgYmUgcmUtcmVhZCAoJXMpLiAgVGhpcyBtZWFucyB0aGUgSHVyZCBrbm93cyAiCisibm90aGluZyBhYm91dCBhbnkgbW9kaWZpY2F0aW9ucyB5b3UgbWFkZS4gIFlvdSBzaG91bGQgcmVib290IHlvdXIgY29tcHV0ZXIgIgorImJlZm9yZSBkb2luZyBhbnl0aGluZyB3aXRoICVzLiIKK21zZ3N0ciAiIgorInBhcnRpdGlvbnN0YWJlbGxlbiBw5SAlcyAoJXMpLiBEZXQgYmV0eWRlciBhdCBMaW51eCBpa2tlIHbpZCBub2dldCBzb20gaGVsc3QgIgorIm9tIGRlIOZuZHJpbmdlciBkdSBsYXZlZGUuIER1IGL4ciBnZW5zdGFydGUgbWFza2luZW4gaW5kZW4gZHUgZ/hyIG5vZ2V0IHNvbSAiCisiaGVsc3QgbWVkICVzLiIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6MzgwIHBhcnRlZC9wYXJ0ZWQuYzoyNDQzCittc2dpZCAiIgorIllvdSBzaG91bGQgcmVpbnN0YWxsIHlvdXIgYm9vdCBsb2FkZXIgYmVmb3JlIHJlYm9vdGluZy4gIFJlYWQgc2VjdGlvbiA0IG9mICIKKyJ0aGUgUGFydGVkIFVzZXIgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCittc2dzdHIgIiIKKyJEdSBi+HIgZ2VuaW5zdGFsbGVyZSBvcHN0YXJ0c3Byb2dyYW1tZXQgaW5kZW4gZHUgZ2Vub3BzdGFydGVyLiBM5nMgc2VrdGlvbiA0ICIKKyJpIFBhcnRlZHMgYnJ1Z2VybWFudWFsIGZvciBtZXJlIGluZm9ybWF0aW9uLiIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6NzcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHRyeWluZyB0byBzeW5jICVzIHRvIGRpc2siCittc2dzdHIgIiVzIHBy+HZlciBhdCBzeW5rcm9uaXNlcmUgJXMgbWVkIGRpc2siCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6NDA4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzdGF0IGRldmljZSAlcyAtICVzLiIKK21zZ3N0ciAiS3VubmUgaWtrZSB0YWdlIHN0YXR1cyBw5SBlbmhlZGVuICVzIC0gJXMuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjUyMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGRldGVybWluZSBzZWN0b3Igc2l6ZSBmb3IgJXM6ICVzLlxuIgorIlVzaW5nIHRoZSBkZWZhdWx0IHNlY3RvciBzaXplICglbGxkKS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo1MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkRldmljZSAlcyBoYXMgYSBsb2dpY2FsIHNlY3RvciBzaXplIG9mICVsbGQuICBOb3QgYWxsIHBhcnRzIG9mIEdOVSBQYXJ0ZWQgIgorInN1cHBvcnQgdGhpcyBhdCB0aGUgbW9tZW50LCBhbmQgdGhlIHdvcmtpbmcgY29kZSBpcyBISUdITFkgRVhQRVJJTUVOVEFMLlxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6NTc5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZGV0ZXJtaW5lIHRoZSBzaXplIG9mICVzICglcykuIgorbXNnc3RyICJLdW5uZSBpa2tlIGJlc3RlbW1lIHN0+HJyZWxzZW4gcOUgJXMgKCVzKSIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo2NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGdldCBpZGVudGl0eSBvZiBkZXZpY2UgJXMgLSAlcyIKK21zZ3N0ciAiS3VubmUgaWtrZSBmaW5kZSBpZGVudGl0ZXQgZm9yIGVuaGVkICVzIC0gJXMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6Njc3Cittc2dpZCAiR2VuZXJpYyBJREUiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkRldmljZSAlcyBoYXMgbXVsdGlwbGUgKCVkKSBsb2dpY2FsIHNlY3RvcnMgcGVyIHBoeXNpY2FsIHNlY3Rvci5cbiIKKyJHTlUgUGFydGVkIHN1cHBvcnRzIHRoaXMgRVhQRVJJTUVOVEFMTFkgZm9yIHNvbWUgc3BlY2lhbCBkaXNrIGxhYmVsL2ZpbGUgIgorInN5c3RlbSBjb21iaW5hdGlvbnMsIGUuZy4gR1BUIGFuZCBleHQyLzMuXG4iCisiUGxlYXNlIGNvbnN1bHQgdGhlIHdlYiBzaXRlIGZvciB1cC10by1kYXRlIGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjg3MworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBpbml0aWFsaXNpbmcgU0NTSSBkZXZpY2UgJXMgLSAlcyIKK21zZ3N0ciAiRW4gZmVqbCBvcHN0b2QgdmVkIGluaXRpZXJpbmcgYWYgU0NTSS1lbmhlZGVuICVzIC0gJXMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6OTI4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGRldmljZSAlcyBoYXMgemVybyBsZW5ndGgsIGFuZCBjYW4ndCBwb3NzaWJseSBzdG9yZSBhIGZpbGUgc3lzdGVtIG9yICIKKyJwYXJ0aXRpb24gdGFibGUuICBQZXJoYXBzIHlvdSBzZWxlY3RlZCB0aGUgd3JvbmcgZGV2aWNlPyIKK21zZ3N0ciAiIgorIkVuaGVkZW4gJXMgaGFyIGzmbmdkZW4gbnVsLCBvZyBrYW4gc2xldCBpa2tlIGluZGVob2xkZSBldCBmaWxzeXN0ZW0gZWxsZXIgZW4gIgorInBhcnRpdGlvbnN0YWJlbC4gTeVza2UgaGFyIGR1IHZhbGd0IGRlbiBmb3JrZXJ0ZSBlbmhlZD8iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTAzMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlVuYWJsZSB0byBkZXRlcm1pbmUgZ2VvbWV0cnkgb2YgZmlsZS9kZXZpY2UgJXMuICBZb3Ugc2hvdWxkIG5vdCB1c2UgUGFydGVkICIKKyJ1bmxlc3MgeW91IFJFQUxMWSBrbm93IHdoYXQgeW91J3JlIGRvaW5nISIKK21zZ3N0ciAiIgorIkt1bm5lIGlra2UgYmVzdGVtbWUgZ2VvbWV0cmllbiBw5SBmaWxlbi9lbmhlZGVuLiBEdSBi+HIgaWtrZSBicnVnZSBQYXJ0ZWQgIgorImh2aXMgZHUgaWtrZSBlciBSSUdUSUdUIHNpa2tlciBw5SBodmFkIGR1IGf4ciEiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTExMAorbXNnaWQgIkRBQzk2MCBSQUlEIGNvbnRyb2xsZXIiCittc2dzdHIgIlN0eXJla29ydCBmb3IgREFDOTYwIFJBSUQiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTExNQorbXNnaWQgIlByb21pc2UgU1g4IFNBVEEgRGV2aWNlIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTEyMAorbXNnaWQgIklCTSBTMzkwIERBU0QgZHJpdmUiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTI1Cittc2dpZCAiSUJNIGlTZXJpZXMgVmlydHVhbCBEQVNEIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTEzMAorbXNnaWQgIkNvbXBhcSBTbWFydCBBcnJheSIKK21zZ3N0ciAiQ29tcGFxIFNtYXJ0IEFycmF5IgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExMzUKK21zZ2lkICJBVEFSQUlEIENvbnRyb2xsZXIiCittc2dzdHIgIlN0eXJla29ydCBmb3IgQVRBUkFJRCIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTQwCittc2dpZCAiSTJPIENvbnRyb2xsZXIiCittc2dzdHIgIkkyTy1zdHlyZWtvcnQiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTE0NQorbXNnaWQgIlVzZXItTW9kZSBMaW51eCBVQkQiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTU2Cittc2dpZCAiTGludXggZGV2aWNlLW1hcHBlciIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExNjIKK21zZ2lkICJVbmtub3duIgorbXNnc3RyICJVa2VuZHQiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTE2OQorbXNnaWQgInBlZF9kZXZpY2VfbmV3KCkgIFVuc3VwcG9ydGVkIGRldmljZSB0eXBlIgorbXNnc3RyICJwZWRfZGV2aWNlX25ldygpIFVuZGVyc3T4dHRlbHNlIG1hbmdsZXIgZm9yIGRlbm5lIGVuaGVkc3R5cGUiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MjA4MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIkVycm9yIGluZm9ybWluZyB0aGUga2VybmVsIGFib3V0IG1vZGlmaWNhdGlvbnMgdG8gcGFydGl0aW9uICVzIC0tICVzLiAgVGhpcyAiCisibWVhbnMgTGludXggd29uJ3Qga25vdyBhYm91dCBhbnkgY2hhbmdlcyB5b3UgbWFkZSB0byAlcyB1bnRpbCB5b3UgcmVib290IC0tICIKKyJzbyB5b3Ugc2hvdWxkbid0IG1vdW50IGl0IG9yIHVzZSBpdCBpbiBhbnkgd2F5IGJlZm9yZSByZWJvb3RpbmcuIgorbXNnc3RyICIiCisiRmVqbCB2ZWwgdW5kZXJyZXRuaW5nIGFmIGtlcm5lbiBvbSDmbmRyaW5nZXIgcOUgcGFydGl0aW9uICVzIC0gJXMuIERldHRlICIKKyJiZXR5ZGVyIGF0IExpbnV4IGlra2UgdulkIG5vZ2V0IHNvbSBoZWxzdCBvbSBkZSDmbmRyaW5nZXIgZHUgbGF2ZWRlIHDlICVzICIKKyJm+HIgZHUgZ2Vub3BzdGFydGVyIC0gc+UgZHUgYvhyIGlra2UgbW9udGVyZSBkZW4gZWxsZXIgYnJ1Z2UgZGVuIHDlIG5vZ2VuICIKKyJt5WRlIGb4ciBkdSBoYXIgZ2Vuc3RhcnRldC4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MjI2MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorInBhcnRlZCB3YXMgdW5hYmxlIHRvIHJlLXJlYWQgdGhlIHBhcnRpdGlvbiB0YWJsZSBvbiAlcyAoJXMpLiAgVGhpcyBtZWFucyAiCisiTGludXggd29uJ3Qga25vdyBhbnl0aGluZyBhYm91dCB0aGUgbW9kaWZpY2F0aW9ucyB5b3UgbWFkZS4gIgorbXNnc3RyICIiCisiS2VybmVuIGt1bm5lIGlra2UgZ2VuaW5kbOZzZSBwYXJ0aXRpb25zdGFiZWxsZW4gcOUgJXMgKCVzKS4gRGV0IGJldHlkZXIgYXQgIgorIkxpbnV4IGlra2UgdulkIG5vZ2V0IHNvbSBoZWxzdCBvbSBkZSDmbmRyaW5nZXIgZHUgbGF2ZWRlIGb4ciBkdSAiCisiZ2Vub3BzdGFydGVyLiBEdSBi+HIgZ2Vuc3RhcnRlIG1hc2tpbmVuIGluZGVuIGR1IGf4ciBub2dldCBzb20gaGVsc3QgbWVkICVzLiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoyMzY4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGtlcm5lbCB3YXMgdW5hYmxlIHRvIHJlLXJlYWQgdGhlIHBhcnRpdGlvbiB0YWJsZSBvbiAlcyAoJXMpLiAgVGhpcyBtZWFucyAiCisiTGludXggd29uJ3Qga25vdyBhbnl0aGluZyBhYm91dCB0aGUgbW9kaWZpY2F0aW9ucyB5b3UgbWFkZSB1bnRpbCB5b3UgIgorInJlYm9vdC4gIFlvdSBzaG91bGQgcmVib290IHlvdXIgY29tcHV0ZXIgYmVmb3JlIGRvaW5nIGFueXRoaW5nIHdpdGggJXMuIgorbXNnc3RyICIiCisiS2VybmVuIGt1bm5lIGlra2UgZ2VuaW5kbOZzZSBwYXJ0aXRpb25zdGFiZWxsZW4gcOUgJXMgKCVzKS4gRGV0IGJldHlkZXIgYXQgIgorIkxpbnV4IGlra2UgdulkIG5vZ2V0IHNvbSBoZWxzdCBvbSBkZSDmbmRyaW5nZXIgZHUgbGF2ZWRlIGb4ciBkdSAiCisiZ2Vub3BzdGFydGVyLiBEdSBi+HIgZ2Vuc3RhcnRlIG1hc2tpbmVuIGluZGVuIGR1IGf4ciBub2dldCBzb20gaGVsc3QgbWVkICVzLiIKKworIzogbGlicGFydGVkL2NzL2dlb20uYzoxNjIKK21zZ2lkICJDYW4ndCBoYXZlIHRoZSBlbmQgYmVmb3JlIHRoZSBzdGFydCEiCittc2dzdHIgIkthbiBpa2tlIGhhdmUgc2x1dG5pbmdlbiBm+HIgYmVneW5kZWxzZW4hIgorCisjOiBsaWJwYXJ0ZWQvY3MvZ2VvbS5jOjE2OQorbXNnaWQgIkNhbid0IGhhdmUgYSBwYXJ0aXRpb24gb3V0c2lkZSB0aGUgZGlzayEiCittc2dzdHIgIkthbiBpa2tlIGhhdmUgZW4gcGFydGl0aW9uIHVkZW5mb3IgZGlza2VuISIKKworIzogbGlicGFydGVkL2NzL2dlb20uYzozNjYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkF0dGVtcHQgdG8gd3JpdGUgc2VjdG9ycyAlbGQtJWxkIG91dHNpZGUgb2YgcGFydGl0aW9uIG9uICVzLiIKK21zZ3N0ciAiRm9yc/hndGUgc2tyaXZlIHNla3RvcmVybmUgJWxkLSVsZCB1ZGVuZm9yIHBhcnRpdGlvbmVuIHDlICVzIgorCisjOiBsaWJwYXJ0ZWQvY3MvZ2VvbS5jOjQwNiBsaWJwYXJ0ZWQvZnMvbGludXhfc3dhcC9saW51eF9zd2FwLmM6NDc1Cittc2dpZCAiY2hlY2tpbmcgZm9yIGJhZCBibG9ja3MiCittc2dzdHIgImtvbnRyb2xsZXIgZm9yIGTlcmxpZ2UgYmxva2tlIgorCisjOiBsaWJwYXJ0ZWQvZGVidWcuYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFja3RyYWNlIGhhcyAlZCBjYWxscyBvbiBzdGFjazpcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZGVidWcuYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXNzZXJ0aW9uICglcykgYXQgJXM6JWQgaW4gZnVuY3Rpb24gJXMoKSBmYWlsZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBvcGVuICVzIC0gdW5yZWNvZ25pc2VkIGRpc2sgbGFiZWwuIgorbXNnc3RyICJLYW4gaWtrZSDlYm5lICVzIC0gdWtlbmR0IGZpbGFsbG9rZXJpbmdzdGFiZWwuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjQ3MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhpcyBsaWJwYXJ0ZWQgZG9lc24ndCBoYXZlIHdyaXRlIHN1cHBvcnQgZm9yICVzLiAgUGVyaGFwcyBpdCB3YXMgY29tcGlsZWQgIgorInJlYWQtb25seS4iCittc2dzdHIgIiIKKyJEZW5uZSBsaWJwYXJ0ZWQgaGFyIGlra2Ugc2tyaXZldW5kZXJzdPh0dGVsc2UgZm9yICVzLiBN5XNrZSB2YXIgZGVuIG92ZXJzYXQgIgorInNrcml2ZWJlc2t5dHRldC4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6NTk4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJQYXJ0aXRpb24gJWQgaXMgJXMsIGJ1dCB0aGUgZmlsZSBzeXN0ZW0gaXMgJXMuIgorbXNnc3RyICJQYXJ0aXRpb24gJWQgZXIgJS4zZk1iLCBtZW4gZmlsc3lzdGVtZXQgZXIgJS4zZk1iLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxMDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGRpc2sgbGFiZWxzIGRvIG5vdCBzdXBwb3J0IGV4dGVuZGVkIHBhcnRpdGlvbnMuIgorbXNnc3RyICJGaWxhbGxva2VyaW5nc3RhYmVsbGVyIGZvciAlcyB1bmRlcnN0+HR0ZXIgaWtrZSB1ZHZpZGVkZSBwYXJ0aXRpb25lci4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTYzNAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkaXNrIGxhYmVscyBkb24ndCBzdXBwb3J0IGxvZ2ljYWwgb3IgZXh0ZW5kZWQgcGFydGl0aW9ucy4iCittc2dzdHIgIiIKKyJGaWxhbGxva2VyaW5nc3RhYmVsbGVyIGZvciAlcyB1bmRlcnN0+HR0ZXIgaWtrZSBsb2dpc2tlIGVsbGVyIHVkdmlkZWRlICIKKyJwYXJ0aXRpb25lci4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTY0NworIywgZnV6enkKK21zZ2lkICJUb28gbWFueSBwcmltYXJ5IHBhcnRpdGlvbnMuIgorbXNnc3RyICJGb3IgbWFuZ2UgcHJpbeZyZSBwYXJ0aXRpb25lciIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW4ndCBhZGQgYSBsb2dpY2FsIHBhcnRpdGlvbiB0byAlcywgYmVjYXVzZSB0aGVyZSBpcyBubyBleHRlbmRlZCBwYXJ0aXRpb24uIgorbXNnc3RyICIiCisiS2FuIGlra2UgdGlsZvhqZSBlbiBsb2dpc2sgcGFydGl0aW9uIHRpbCAlcywgZGEgZGVyIG1hbmdsZXIgZW4gdWR2aWRldCAiCisicGFydGl0aW9uLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNjgwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJDYW4ndCBoYXZlIG1vcmUgdGhhbiBvbmUgZXh0ZW5kZWQgcGFydGl0aW9uIG9uICVzLiIKK21zZ3N0ciAiS2FuIGlra2UgaGF2ZSBtZXJlIGVuZCDpbiB1ZHZpZGV0IHBhcnRpdGlvbiBw5SAlcyIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNjkwCittc2dpZCAiQ2FuJ3QgaGF2ZSBsb2dpY2FsIHBhcnRpdGlvbnMgb3V0c2lkZSBvZiB0aGUgZXh0ZW5kZWQgcGFydGl0aW9uLiIKK21zZ3N0ciAiS2FuIGlra2UgaGF2ZSBsb2dpc2tlIHBhcnRpdGlvbmVyIHVkZW5mb3IgZGVuIHVkdmlkZWRlIHBhcnRpdGlvbi4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTcxNQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW4ndCBoYXZlIGEgbG9naWNhbCBwYXJ0aXRpb24gb3V0c2lkZSBvZiB0aGUgZXh0ZW5kZWQgcGFydGl0aW9uIG9uICVzLiIKK21zZ3N0ciAiIgorIkthbiBpa2tlIGhhdmUgZW4gbG9naXNrIHBhcnRpdGlvbiB1ZGVuZm9yIGRlbiB1ZHZpZGVkZSBwYXJ0aXRpb24gcOUgJXMuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE3MjUgbGlicGFydGVkL2Rpc2suYzoxNzc5IGxpYnBhcnRlZC9kaXNrLmM6MTk0NQorIywgZnV6enkKK21zZ2lkICJDYW4ndCBoYXZlIG92ZXJsYXBwaW5nIHBhcnRpdGlvbnMuIgorbXNnc3RyICJLYW4gaWtrZSBoYXZlIG92ZXJsYXBwZW5kZSBwYXJ0aXRpb25lci4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTczMworbXNnaWQgIkNhbid0IGhhdmUgYSBwcmltYXJ5IHBhcnRpdGlvbiBpbnNpZGUgYW4gZXh0ZW5kZWQgcGFydGl0aW9uLiIKK21zZ3N0ciAiS2FuIGlra2UgaGF2ZSBlbiBwcmlt5nIgcGFydGl0aW9uIGluZGVuIGkgZW4gdWR2aWRldCBwYXJ0aXRpb24uIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNDAKK21zZ2lkICJtZXRhZGF0YSIKK21zZ3N0ciAibWV0YWRhdGEiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE0MgorbXNnaWQgImZyZWUiCittc2dzdHIgImxlZGlndCIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTQ0IHBhcnRlZC91aS5jOjExNjkgcGFydGVkL3VpLmM6MTE5NworbXNnaWQgImV4dGVuZGVkIgorbXNnc3RyICJ1ZHZpZGV0IgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNDYgcGFydGVkL3VpLmM6MTE3MyBwYXJ0ZWQvdWkuYzoxMjAxCittc2dpZCAibG9naWNhbCIKK21zZ3N0ciAibG9naXNrIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNDggcGFydGVkL3VpLmM6MTE2NSBwYXJ0ZWQvdWkuYzoxMTkzCittc2dpZCAicHJpbWFyeSIKK21zZ3N0ciAicHJpbeZyIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNjQKK21zZ2lkICJib290IgorbXNnc3RyICJzdGFydCIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTY2Cittc2dpZCAicm9vdCIKK21zZ3N0ciAicm9kIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNjgKK21zZ2lkICJzd2FwIgorbXNnc3RyICJzd2FwcGxhZHMiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE3MAorbXNnaWQgImhpZGRlbiIKK21zZ3N0ciAic2tqdWx0IgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNzIKK21zZ2lkICJyYWlkIgorbXNnc3RyICJyYWlkIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNzQKK21zZ2lkICJsdm0iCittc2dzdHIgImx2bSIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTc2Cittc2dpZCAibGJhIgorbXNnc3RyICJsYmEiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE3OAorbXNnaWQgImhwLXNlcnZpY2UiCittc2dzdHIgImhwLXNlcnZpY2UiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE4MAorbXNnaWQgInBhbG8iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTgyCittc2dpZCAicHJlcCIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxODQKK21zZ2lkICJtc2Z0cmVzIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE5MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBwYXJ0aXRpb24gZmxhZywgJWQuIgorbXNnc3RyICJVa2VuZHQgcGFydGl0aW9uc2ZsYWcsICVkLiIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjc4Cittc2dpZCAiSW5mb3JtYXRpb24iCittc2dzdHIgIkluZm9ybWF0aW9uIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6NzkKK21zZ2lkICJXYXJuaW5nIgorbXNnc3RyICJBZHZhcnNlbCIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjgwCittc2dpZCAiRXJyb3IiCittc2dzdHIgIkZlamwiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4MQorbXNnaWQgIkZhdGFsIgorbXNnc3RyICJGYXRhbCIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjgyCittc2dpZCAiQnVnIgorbXNnc3RyICJQcm9ncmFtZmVqbCIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjgzCittc2dpZCAiTm8gSW1wbGVtZW50YXRpb24iCittc2dzdHIgIklra2UgaW1wbGVtZW50ZXJldCIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjg3Cittc2dpZCAiRml4IgorbXNnc3RyICJSZXBhculyIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODgKK21zZ2lkICJZZXMiCittc2dzdHIgIkphIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODkKK21zZ2lkICJObyIKK21zZ3N0ciAiTmVqIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6OTAKK21zZ2lkICJPSyIKK21zZ3N0ciAiT0siCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo5MQorbXNnaWQgIlJldHJ5IgorbXNnc3RyICJGb3Jz+GcgaWdlbiIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjkyCittc2dpZCAiSWdub3JlIgorbXNnc3RyICJJZ25vculyIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6OTMKK21zZ2lkICJDYW5jZWwiCittc2dzdHIgIkFubnVsbOlyIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6MTMzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiQSBidWcgaGFzIGJlZW4gZGV0ZWN0ZWQgaW4gR05VIFBhcnRlZC4gIFJlZmVyIHRvIHRoZSB3ZWIgc2l0ZSBvZiBwYXJ0ZWQgIgorImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9wYXJ0ZWQvcGFydGVkLmh0bWwgZm9yIG1vcmUgaW5mb3JtYXRpb25zIG9mIHdoYXQgIgorImNvdWxkIGJlIHVzZWZ1bCBmb3IgYnVnIHN1Ym1pdHRpbmchICBQbGVhc2UgZW1haWwgYSBidWcgcmVwb3J0IHRvIGJ1Zy0iCisicGFydGVkQGdudS5vcmcgY29udGFpbmluZyBhdCBsZWFzdCB0aGUgdmVyc2lvbiAoJXMpIGFuZCB0aGUgZm9sbG93aW5nICIKKyJtZXNzYWdlOiAgIgorbXNnc3RyICIiCisiU2VuZCBlbiBmZWpscmFwcG9ydCBtZWQgZS1wb3N0IHRpbCBidWctcGFydGVkQGdudS5vcmcsIGh2b3IgZHUgYW5naXZlciAiCisidmVyc2lvbnNudW1yZXQgKCVzKSBvZyBm+GxnZW5kZSBtZWRkZWxlbHNlOiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzozODQKK21zZ2lkICJDb3VsZCBub3QgZGV0ZWN0IGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiS3VubmUgaWtrZSBmaW5kZSBub2dldCBmaWxzeXN0ZW0uIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjM5NQorIywgZnV6enkKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gaXMgYmlnZ2VyIHRoYW4gaXRzIHZvbHVtZSEiCittc2dzdHIgIkZpbHN5c3RlbWV0IGVyIHN0+HJyZSBlbmQgZGV0cyBwbGFkcyBw5SBkaXNrZHJldmV0ISIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo0MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VwcG9ydCBmb3Igb3BlbmluZyAlcyBmaWxlIHN5c3RlbXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiIKKyJVbmRlcnN0+HR0ZWxzZSBmb3IgYXQg5WJuZSBmaWxzeXN0ZW1lciBhZiB0eXBlICVzIGVyIGlra2UgaW1wbGVtZW50ZXJldCAiCisiZW5kbnUuIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjQ0NQorIywgYy1mb3JtYXQKK21zZ2lkICJTdXBwb3J0IGZvciBjcmVhdGluZyAlcyBmaWxlIHN5c3RlbXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiIKKyJVbmRlcnN0+HR0ZWxzZSBmb3IgYXQgb3ByZXR0ZSBmaWxzeXN0ZW1lciBhZiB0eXBlICVzIGVyIGlra2UgaW1wbGVtZW50ZXJldCAiCisiZW5kbnUuIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjUwNQorIywgYy1mb3JtYXQKK21zZ2lkICJTdXBwb3J0IGZvciBjaGVja2luZyAlcyBmaWxlIHN5c3RlbXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiIKKyJVbmRlcnN0+HR0ZWxzZSBmb3IgYXQga29udHJvbGxlcmUgZmlsc3lzdGVtZXIgYWYgdHlwZSAlcyBlciBpa2tlICIKKyJpbXBsZW1lbnRlcmV0IGVuZG51LiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo1NzEKK21zZ2lkICJyYXcgYmxvY2sgY29weWluZyIKK21zZ3N0ciAia29waWVyaW5nIGFmIHLlIGJsb2trZSIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo1ODIKK21zZ2lkICJncm93aW5nIGZpbGUgc3lzdGVtIgorbXNnc3RyICJ1ZHZpZGVyIGZpbHN5c3RlbSIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo2MjIKK21zZ2lkICJDYW4ndCBjb3B5IG9udG8gYW4gb3ZlcmxhcHBpbmcgcGFydGl0aW9uLiIKK21zZ3N0ciAiS2FuIGlra2Uga29waWVyZSB0aWwgZW4gb3ZlcmxhcHBlbmRlIHBhcnRpdGlvbi4iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NjQ0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiRGlyZWN0IHN1cHBvcnQgZm9yIGNvcHlpbmcgZmlsZSBzeXN0ZW1zIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQgZm9yICVzLiAgIgorIkhvd2V2ZXIsIHN1cHBvcnQgZm9yIHJlc2l6aW5nIGlzIGltcGxlbWVudGVkLiAgVGhlcmVmb3JlLCB0aGUgZmlsZSBzeXN0ZW0gIgorImNhbiBiZSBjb3BpZWQgaWYgdGhlIG5ldyBwYXJ0aXRpb24gaXMgYXQgbGVhc3QgYXMgYmlnIGFzIHRoZSBvbGQgb25lLiAgU28sICIKKyJlaXRoZXIgc2hyaW5rIHRoZSBwYXJ0aXRpb24geW91IGFyZSB0cnlpbmcgdG8gY29weSwgb3IgY29weSB0byBhIGJpZ2dlciAiCisicGFydGl0aW9uLiIKK21zZ3N0ciAiIgorIkRpcmVrdGUgdW5kZXJzdPh0dGVsc2UgZm9yIGF0IGtvcGllcmUgZmlsc3lzdGVtZXIgYWYgdHlwZW4gJXMgZXIgaWtrZSAiCisiaW1wbGVtZW50ZXJldCBlbmRudS4gVW5kZXJzdPh0dGVsc2UgZm9yIGF0IOZuZHJlIHN0+HJyZWxzZSBmaW5kZXMgZG9nLiAiCisiRGVyZm9yIGthbiBmaWxzeXN0ZW1ldCBrb3BpZXJlcyBodmlzIGRlbiBueWUgcGFydGl0aW9uIGVyIG1pbmRzdCBsaWdlIHPlICIKKyJzdG9yIHNvbSBkZW4gZ2FtbGUuIFPlIGVudGVuIHNrYWwgZHUgZm9ybWluZHNrZSBwYXJ0aXRpb25lbiBzb20gZHUgZm9yc/hnZXIgIgorImtvcGllcmUsIGVsbGVyIG9nc+Uga29waWVyZXIgZHUgdGlsIGVuIHN0+HJyZSBwYXJ0aXRpb24uIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjY1OAorIywgYy1mb3JtYXQKK21zZ2lkICJTdXBwb3J0IGZvciBjb3B5aW5nICVzIGZpbGUgc3lzdGVtcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiIgorIlVuZGVyc3T4dHRlbHNlIGZvciBhdCBrb3BpZXJlIGZpbHN5c3RlbWVyIGFmIHR5cGUgJXMgZXIgaWtrZSBpbXBsZW1lbnRlcmV0ICIKKyJlbmRudS4iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6Njk2CisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnQgZm9yIHJlc2l6aW5nICVzIGZpbGUgc3lzdGVtcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiIgorIlVuZGVyc3T4dHRlbHNlIGZvciBhdCDmbmRyZSBzdPhycmVsc2UgcOUgZmlsc3lzdGVtIGFmIHR5cGUgJXMgZXIgaWtrZSAiCisiaW1wbGVtZW50ZXJldCBlbmRudS4iCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjMxNQorbXNnaWQgImNyZWF0aW5nIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQwMgorIywgZnV6enkKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gaXMgaW4gYW4gaW52YWxpZCBzdGF0ZS4gIFBlcmhhcHMgaXQgaXMgbW91bnRlZD8iCittc2dzdHIgIkZpbHN5c3RlbWV0IGVyIHN0+HJyZSBlbmQgZGV0cyBwbGFkcyBw5SBkaXNrZHJldmV0ISIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDEwCittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIGlzIGluIG9sZCAodW5yZXNpemVhYmxlKSBmb3JtYXQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQxNgorbXNnaWQgIkludmFsaWQgZnJlZSBibG9ja3MgY291bnQuICBSdW4gcmVpc2VyZnNjayAtLWNoZWNrIGZpcnN0LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0MzEKKyMsIGZ1enp5Cittc2dpZCAiY2hlY2tpbmciCittc2dzdHIgInRqZWsiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQzNworbXNnaWQgIlJlaXNlcmZzIHRyZWUgc2VlbXMgdG8gYmUgY29ycnVwdGVkLiAgUnVuIHJlaXNlcmZzY2sgLS1jaGVjayBmaXJzdC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDQ5CisjLCBmdXp6eQorbXNnaWQgIiIKKyJUaGUgcmVpc2VyZnMgZmlsZSBzeXN0ZW0gcGFzc2VkIGEgYmFzaWMgY2hlY2suICBGb3IgYSBtb3JlIGNvbXByZWhlbnNpdmUgIgorImNoZWNrLCBydW4gcmVpc2VyZnNjayAtLWNoZWNrLiIKK21zZ3N0ciAiIgorIkZpbHN5c3RlbWV0IChlMmZzKSBrbGFyZWRlIGV0IGdydW5kbOZnZ2VuZGUgdGVzdC4gRm9yIGV0IG1lcmUgZ2VubmVtZ+VlbmRlICIKKyJ0ZXN0LCBicnVnIHByb2dyYW1tZXQgZTJmc2NrLiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDc0CisjLCBmdXp6eQorbXNnaWQgIlNvcnJ5LCBjYW4ndCBtb3ZlIHRoZSBzdGFydCBvZiByZWlzZXJmcyBwYXJ0aXRpb25zIHlldC4iCittc2dzdHIgIkthbiBpa2tlIGZseXR0ZSBlbiBleHQyLXBhcnRpdGlvbnMgYmVneW5kZWxzZSBlbmRudSEiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQ5MAorbXNnaWQgIkNvdWxkbid0IHJlb3BlbiBkZXZpY2UgYWJzdHJhY3Rpb24gbGF5ZXIgZm9yIHJlYWQvd3JpdGUuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjUwOCBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjU1MgorIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzoyNTAgbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo2MjkKK21zZ2lkICJzaHJpbmtpbmciCittc2dzdHIgImtyeW1wZXIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjUyMAorIywgZnV6enkKK21zZ2lkICJleHBhbmRpbmciCittc2dzdHIgIkFkdmFyc2VsIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo1OTIKK21zZ2lkICJDb3VsZG4ndCBjcmVhdGUgcmVpc2VyZnMgZGV2aWNlIGFic3RyYWN0aW9uIGhhbmRsZXIuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjYwNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRGV2aWNlIGlzIHRvbyBzbWFsbCBmb3IgJWx1IGJsb2Nrcy4iCittc2dzdHIgIkZpbHN5c3RlbSBmb3IgbGlsbGUgdGlsIGV4dDIuIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo2MTUKK21zZ2lkICJjb3B5aW5nIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjY4MgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCByZXNvbHZlIHN5bWJvbCAlcy4gIEVycm9yOiAlcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NzA0Cittc2dpZCAiR05VIFBhcnRlZCBmb3VuZCBhbiBpbnZhbGlkIGxpYnJlaXNlcmZzIGxpYnJhcnkuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjcxNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiR05VIFBhcnRlZCBoYXMgZGV0ZWN0ZWQgbGlicmVpc2VyZnMgaW50ZXJmYWNlIHZlcnNpb24gbWlzbWF0Y2guICBGb3VuZCAlZC0lIgorImQsIHJlcXVpcmVkICVkLiBSZWlzZXJGUyBzdXBwb3J0IHdpbGwgYmUgZGlzYWJsZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYWl4LmM6MTM3CisjLCBmdXp6eQorbXNnaWQgIlN1cHBvcnQgZm9yIHJlYWRpbmcgQUlYIGRpc2sgbGFiZWxzIGlzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICIiCisiVW5kZXJzdPh0dGVsc2UgZm9yIGF0IG9wcmV0dGUgZmlsc3lzdGVtZXIgYWYgdHlwZSAlcyBlciBpa2tlIGltcGxlbWVudGVyZXQgIgorImVuZG51LiIKKworIzogbGlicGFydGVkL2xhYmVscy9haXguYzoxNDgKKyMsIGZ1enp5Cittc2dpZCAiU3VwcG9ydCBmb3Igd3JpdGluZyBBSVggZGlzayBsYWJlbHMgaXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiIKKyJVbmRlcnN0+HR0ZWxzZSBmb3IgYXQgb3ByZXR0ZSBmaWxzeXN0ZW1lciBhZiB0eXBlICVzIGVyIGlra2UgaW1wbGVtZW50ZXJldCAiCisiZW5kbnUuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2FpeC5jOjE2MQorIywgZnV6enkKK21zZ2lkICIiCisiU3VwcG9ydCBmb3IgYWRkaW5nIHBhcnRpdGlvbnMgdG8gQUlYIGRpc2sgbGFiZWxzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICIiCisiVW5kZXJzdPh0dGVsc2UgZm9yIGF0IG9wcmV0dGUgZmlsc3lzdGVtZXIgYWYgdHlwZSAlcyBlciBpa2tlIGltcGxlbWVudGVyZXQgIgorImVuZG51LiIKKworIzogbGlicGFydGVkL2xhYmVscy9haXguYzoxNzEKKyMsIGZ1enp5Cittc2dpZCAiIgorIlN1cHBvcnQgZm9yIGR1cGxpY2F0aW5nIHBhcnRpdGlvbnMgaW4gQUlYIGRpc2sgbGFiZWxzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICIiCisiVW5kZXJzdPh0dGVsc2UgZm9yIGF0IG9wcmV0dGUgZmlsc3lzdGVtZXIgYWYgdHlwZSAlcyBlciBpa2tlIGltcGxlbWVudGVyZXQgIgorImVuZG51LiIKKworIzogbGlicGFydGVkL2xhYmVscy9haXguYzoxODkKKyMsIGZ1enp5Cittc2dpZCAiIgorIlN1cHBvcnQgZm9yIHNldHRpbmcgc3lzdGVtIHR5cGUgb2YgcGFydGl0aW9ucyBpbiBBSVggZGlzayBsYWJlbHMgaXMgbm90ICIKKyJpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICIiCisiVW5kZXJzdPh0dGVsc2UgZm9yIGF0IG9wcmV0dGUgZmlsc3lzdGVtZXIgYWYgdHlwZSAlcyBlciBpa2tlIGltcGxlbWVudGVyZXQgIgorImVuZG51LiIKKworIzogbGlicGFydGVkL2xhYmVscy9haXguYzoxOTkKKyMsIGZ1enp5Cittc2dpZCAiU3VwcG9ydCBmb3Igc2V0dGluZyBmbGFncyBpbiBBSVggZGlzayBsYWJlbHMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiIKKyJVbmRlcnN0+HR0ZWxzZSBmb3IgYXQgb3ByZXR0ZSBmaWxzeXN0ZW1lciBhZiB0eXBlICVzIGVyIGlra2UgaW1wbGVtZW50ZXJldCAiCisiZW5kbnUuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2JzZC5jOjUwMSBsaWJwYXJ0ZWQvbGFiZWxzL2Rhc2QuYzo3NTUKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZG9zLmM6MTk3NCBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjc3MAorIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzoxNDQ4IGxpYnBhcnRlZC9sYWJlbHMvbG9vcC5jOjI0OAorIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoxNDA4IGxpYnBhcnRlZC9sYWJlbHMvcGM5OC5jOjc1OQorIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzoxMDQxIGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6NzA1Cittc2dpZCAiVW5hYmxlIHRvIHNhdGlzZnkgYWxsIGNvbnN0cmFpbnRzIG9uIHRoZSBwYXJ0aXRpb24uIgorbXNnc3RyICJLdW5uZSBpa2tlIG9wZnlsZGUgYWxsZSBiZWdy5m5zbmluZ2VyIHDlIHBhcnRpdGlvbmVuLiIKKworIzogbGlicGFydGVkL2xhYmVscy9ic2QuYzo1MjYKKyMsIGZ1enp5Cittc2dpZCAiVW5hYmxlIHRvIGFsbG9jYXRlIGEgYnNkIGRpc2tsYWJlbCBzbG90LiIKK21zZ3N0ciAiS2FuIGlra2UgdGlsZGVsZSBlbiBwbGFkcyB0aWwgYnNkLWRpc2tldGlrZXR0ZSIKKworIzogbGlicGFydGVkL2xhYmVscy9kYXNkLmM6MTY2CisjLCBmdXp6eQorbXNnaWQgIlVuYWJsZSB0byBkZXRlcm1pbmUgdGhlIGJsb2NrIHNpemUgb2YgdGhpcyBkYXNkIgorbXNnc3RyICJLdW5uZSBpa2tlIGJlc3RlbW1lIHN0+HJyZWxzZW4gcOUgJXMgKCVzKSIKKworIzogbGlicGFydGVkL2xhYmVscy9kYXNkLmM6NzgxCisjLCBmdXp6eQorbXNnaWQgIlVuYWJsZSB0byBhbGxvY2F0ZSBhIGRhc2QgZGlza2xhYmVsIHNsb3QiCittc2dzdHIgIkthbiBpa2tlIHRpbGRlbGUgZW4gcGxhZHMgdGlsIGJzZC1kaXNrZXRpa2V0dGUiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZG9zLmM6ODI3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHBhcnRpdGlvbiB0YWJsZSBvbiAlcyAtLSB3cm9uZyBzaWduYXR1cmUgJXguIgorbXNnc3RyICJVZ3lsZGlnIHBhcnRpdGlvbnN0YWJlbCBw5SAlcyAtIGZlamxhZ3RpZyBzaWduYXR1ciAleCIKKworIzogbGlicGFydGVkL2xhYmVscy9kb3MuYzo4NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBwYXJ0aXRpb24gdGFibGUgLSByZWN1cnNpdmUgcGFydGl0aW9uIG9uICVzLiIKK21zZ3N0ciAiVWd5bGRpZyBwYXJ0aXRpb25zdGFiZWwgLSByZWt1cnNpdiBwYXJ0aXRpb24gcOUgJXMuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rvcy5jOjEzMTgKKyMsIGZ1enp5Cittc2dpZCAiRXh0ZW5kZWQgcGFydGl0aW9ucyBjYW5ub3QgYmUgaGlkZGVuIG9uIG1zZG9zIGRpc2sgbGFiZWxzLiIKK21zZ3N0ciAiRXh0Mi1wYXJ0aXRpb25lciBrYW4gaWtrZSBnZW1tZXMgaSBmaWxzeXN0ZW1lciBhZiB0eXBlbiBtc2Rvcy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZG9zLmM6MTk1OAorbXNnaWQgIlBhcnRlZCBjYW4ndCByZXNpemUgcGFydGl0aW9ucyBtYW5hZ2VkIGJ5IFdpbmRvd3MgRHluYW1pYyBEaXNrLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjE5MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIG5vIGV4dGVuZGVkIHBhcnRpdGlvbiAodm9sdW1lIGhlYWRlciBwYXJ0aXRpb24pLiIKK21zZ3N0ciAiIgorIiVzIGhhciBpbmdlbiB1ZHZpZGV0IHBhcnRpdGlvbiAoYmluZGhvdmVkLXBhcnRpdGlvbikuIEh2aXMgZHUgaWdub3JlcmVyICIKKyJkZXR0ZSB2aWwgYWxsZSBvcHN0YXJ0cy1iaW5kIGJsaXZlIHNsZXR0ZXQuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjMxMworbXNnaWQgIkNoZWNrc3VtIGlzIHdyb25nLCBpbmRpY2F0aW5nIHRoZSBwYXJ0aXRpb24gdGFibGUgaXMgY29ycnVwdC4iCittc2dzdHIgIiIKKyJUamVrc3VtbWVuIGVyIGZvcmtlcnQsIG9nIGRldCB0eWRlciBw5SBhdCBwYXJ0aXRpb25zdGFiZWxsZW4gZXIg+GRlbGFndC4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6NjE2Cittc2dpZCAiT25seSBwcmltYXJ5IHBhcnRpdGlvbnMgY2FuIGJlIHJvb3QgcGFydGl0aW9ucy4iCittc2dzdHIgIkt1biBwcmlt5nJlIHBhcnRpdGlvbmVyIGthbiB25nJlIHJvZC1wYXJ0aXRpb25lci4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6NjMwCittc2dpZCAiT25seSBwcmltYXJ5IHBhcnRpdGlvbnMgY2FuIGJlIHN3YXAgcGFydGl0aW9ucy4iCittc2dzdHIgIkt1biBwcmlt5nJlIHBhcnRpdGlvbmVyIGthbiB25nJlIHN3YXAtcGFydGl0aW9uZXIuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjY0NAorbXNnaWQgIk9ubHkgbG9naWNhbCBwYXJ0aXRpb25zIGNhbiBiZSBhIGJvb3QgZmlsZS4iCittc2dzdHIgIkt1biBsb2dpc2tlIHBhcnRpdGlvbmVyIGthbiB25nJlIGVuIG9wc3RhdHNmaWwuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjcyMQorbXNnaWQgIk9ubHkgbG9naWNhbCBwYXJ0aXRpb25zIChib290IGZpbGVzKSBoYXZlIGEgbmFtZS4iCittc2dzdHIgIkt1biBsb2dpc2tlIHBhcnRpdGlvbmVyIChvcHN0YXJ0c2ZpbGVyKSBoYXIgZXQgbmF2bi4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6ODEyCittc2dpZCAiVG9vIG1hbnkgcHJpbWFyeSBwYXJ0aXRpb25zIgorbXNnc3RyICJGb3IgbWFuZ2UgcHJpbeZyZSBwYXJ0aXRpb25lciIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEwMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgb3BlbiBlcnJvclxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEwNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgc2VlayBlcnJvclxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgcmVhZCBlcnJvclxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjExMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHdyaXRlIGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiJXMgdW5kZXIgc2tyaXZuaW5nIHDlICVzIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBJT0NUTCBlcnJvclxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjExOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgQVBJIHZlcnNpb24gbWlzbWF0Y2hcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFVuc3VwcG9ydGVkIGRpc2sgdHlwZVxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgVW5zdXBwb3J0ZWQgZGlzayBmb3JtYXRcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMzAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBEaXNrIGluIHVzZVxuIgorIiVzXG4iCittc2dzdHIgIiVzICAlcyAgJXMiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIENvbmZpZyBmaWxlIHN5bnRheCBlcnJvclxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgVm9sdW1lIGxhYmVsIGlzIGNvcnJ1cHRlZC5cbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIGEgZGF0YSBzZXQgbmFtZSBpcyBjb3JydXB0ZWQuXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBzcGFjZSBhbGxvY2F0aW9uXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBkZXZpY2UgdmVyaWZpY2F0aW9uIGZhaWxlZFxuIgorIlRoZSBzcGVjaWZpZWQgZGV2aWNlIGlzIG5vdCBhIHZhbGlkIERBU0QgZGV2aWNlXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgRmF0YWwgZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6NDU0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgY29udGFpbnMgR1BUIHNpZ25hdHVyZXMsIGluZGljYXRpbmcgdGhhdCBpdCBoYXMgYSBHUFQgdGFibGUuICBIb3dldmVyLCBpdCAiCisiZG9lcyBub3QgaGF2ZSBhIHZhbGlkIGZha2UgbXNkb3MgcGFydGl0aW9uIHRhYmxlLCBhcyBpdCBzaG91bGQuICBQZXJoYXBzIGl0ICIKKyJ3YXMgY29ycnVwdGVkIC0tIHBvc3NpYmx5IGJ5IGEgcHJvZ3JhbSB0aGF0IGRvZXNuJ3QgdW5kZXJzdGFuZCBHUFQgcGFydGl0aW9uICIKKyJ0YWJsZXMuICBPciBwZXJoYXBzIHlvdSBkZWxldGVkIHRoZSBHUFQgdGFibGUsIGFuZCBhcmUgbm93IHVzaW5nIGFuIG1zZG9zICIKKyJwYXJ0aXRpb24gdGFibGUuICBJcyB0aGlzIGEgR1BUIHBhcnRpdGlvbiB0YWJsZT8iCittc2dzdHIgIiIKKyIlcyBpbmRlaG9sZGVyIEdQVC1zaWduYXR1cmVyLCBkZXIgdHlkZXIgcOUgYXQgZGVuIGhhciBlbiBHUFQtdGFiZWwuICIKKyJJbWlkbGVydGlkIGhhciBkZW4gaWtrZSBlbiBneWxkaWcgZmFsc2sgbXNkb3MtcGFydGl0aW9uc3RhYmVsIHNvbSBkZW4gYnVyZGUuICIKKyJN5XNrZSBlciBkZW4g+GRlbGFndCAtIG11bGlndmlzIGFmIGV0IHByb2dyYW0gZGVyIGlra2UgZm9yc3TlciBHUFQtIgorInBhcnRpdGlvbnN0YWJlbGxlci4gRWxsZXIgbeVza2Ugc2xldHRlZGUgZHUgR1BULXRhYmVsbGVuLCBvZyBicnVnZXIgbnUgZW4gIgorIm1zZG9zLXBhcnRpdGlvbnN0YWJlbC4gRXIgZGV0dGUgZW4gR1BULXRhYmVsPyIKKworIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzo2NDgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9ybWF0IG9mIHRoZSBHUFQgcGFydGl0aW9uIHRhYmxlIGlzIHZlcnNpb24gJXgsIHdoaWNoIGlzIG5ld2VyIHRoYW4gIgorIndoYXQgUGFydGVkIGNhbiByZWNvZ25pc2UuICBQbGVhc2UgdGVsbCB1cyEgIGJ1Zy1wYXJ0ZWRAZ251Lm9yZyIKK21zZ3N0ciAiIgorIkZvcm1hdGV0IHDlIEdQVC1wYXJ0aXRpb25zdGFiZWxsZW4gZXIgbnllcmUgZW5kIGh2YWQgUGFydGVkIGthbiBnZW5rZW5kZS4gIgorIkZvcnTmbCBvcyBvbSBkZXQhIGJ1Zy1wYXJ0ZWRAZ251Lm9yZyIKKworIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzo2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vdCBhbGwgb2YgdGhlIHNwYWNlIGF2YWlsYWJsZSB0byAlcyBhcHBlYXJzIHRvIGJlIHVzZWQsIHlvdSBjYW4gZml4IHRoZSBHUFQgIgorInRvIHVzZSBhbGwgb2YgdGhlIHNwYWNlIChhbiBleHRyYSAlbGx1IGJsb2Nrcykgb3IgY29udGludWUgd2l0aCB0aGUgY3VycmVudCAiCisic2V0dGluZz8gIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6ODI3Cittc2dpZCAiIgorIlRoZSBiYWNrdXAgR1BUIHRhYmxlIGlzIG5vdCBhdCB0aGUgZW5kIG9mIHRoZSBkaXNrLCBhcyBpdCBzaG91bGQgYmUuICBUaGlzICIKKyJtaWdodCBtZWFuIHRoYXQgYW5vdGhlciBvcGVyYXRpbmcgc3lzdGVtIGJlbGlldmVzIHRoZSBkaXNrIGlzIHNtYWxsZXIuICBGaXgsICIKKyJieSBtb3ZpbmcgdGhlIGJhY2t1cCB0byB0aGUgZW5kIChhbmQgcmVtb3ZpbmcgdGhlIG9sZCBiYWNrdXApPyIKK21zZ3N0ciAiIgorIlNpa2tlcmhlZHNrb3BpZW4gYWYgR1BULXRhYmVsbGVuIGVyIGlra2UgaSBzbHV0bmluZ2VuIGFmIGRpc2tlbiwgc29tIGRlbiAiCisiYnVyZGUgduZyZS4gRGV0dGUga2FuIGJldHlkZSBhdCBldCBhbmRldCBzdHlyZXN5c3RlbSB0cm9yIGRpc2tlbiBlciBtaW5kcmUuICIKKyJTa2FsIGRldCByZXR0ZXMgdmVkIGF0IGZseXR0ZSBzaWtrZXJoZWRza29waWVuIHRpbCBzbHV0bmluZ2VuIChvZyBmamVybmUgZGVuICIKKyJnYW1sZSBzaWtrZXJoZWRza29waSk/IgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjg2MgorIywgZnV6enkKK21zZ2lkICIiCisiVGhlIHByaW1hcnkgR1BUIHRhYmxlIGlzIGNvcnJ1cHQsIGJ1dCB0aGUgYmFja3VwIGFwcGVhcnMgT0ssIHNvIHRoYXQgd2lsbCBiZSAiCisidXNlZC4iCittc2dzdHIgIiIKKyJEZW4gcHJpbeZyZSBHUFQtdGFiZWwgZXIg+GRlbGFndCwgbWVuIHNpa2tlcmhlZHNrb3BpZW4gc2VyIHVkIHRpbCBhdCB25nJlIGkgIgorIm9yZGVuLCBz5SBkZW4gdmlsIGJsaXZlIGJydWd0LiIKKworIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzo4NzAKKyMsIGZ1enp5Cittc2dpZCAiIgorIkJvdGggdGhlIHByaW1hcnkgYW5kIGJhY2t1cCBHUFQgdGFibGVzIGFyZSBjb3JydXB0LiAgVHJ5IG1ha2luZyBhIGZyZXNoICIKKyJ0YWJsZSwgYW5kIHVzaW5nIFBhcnRlZCdzIHJlc2N1ZSBmZWF0dXJlIHRvIHJlY292ZXIgcGFydGl0aW9ucy4iCittc2dzdHIgIiIKKyJC5WRlIGRlbiBwcmlt5nJlIEdQVC10YWJlbCBvZyBzaWtrZXJoZWRza29waWVuIGVyIPhkZWxhZ3QuIFBy+HYgYXQgbGF2ZSBlbiAiCisiZnJpc2sgdGFiZWwsIG9nIGF0IGdlbnNrYWJlIHBhcnRpdGlvbmVyIG1lZCBQYXJ0ZWRzIHJlZG5pbmdzZmFjaWxpdGV0LiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoxODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBzaWduYXR1cmUgJXggZm9yIE1hYyBkaXNrIGxhYmVscy4iCittc2dzdHIgIlVneWxkaWcgc2lnbmF0dXIgJXggZm9yIGVuIGZpbGFsbG9rZXJpbmdzdGFiZWwgZm9yIE1hYy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6MjI2Cittc2dpZCAiUGFydGl0aW9uIG1hcCBoYXMgbm8gcGFydGl0aW9uIG1hcCBlbnRyeSEiCittc2dzdHIgIlBhcnRpdGlvbnN0YWJlbGxlbiBtYW5nbGVyIG9wbHlzbmluZ2VyIG9tIHNpZyBzZWx2ISIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgdG9vIHNtYWxsIGZvciBhIE1hYyBkaXNrIGxhYmVsISIKK21zZ3N0ciAiJXMgZXIgZm9yIGxpbGxlIGZvciBlbiBmaWxhbGxva2VyaW5nc3RhYmVsIGZvciBNYWMhIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjUzMgorIywgYy1mb3JtYXQKK21zZ2lkICJQYXJ0aXRpb24gJWQgaGFzIGFuIGludmFsaWQgc2lnbmF0dXJlICV4LiIKK21zZ3N0ciAiUGFydGl0aW9uICVkIGhhciBlbiB1Z3lsZGlnIHNpZ25hdHVyICV4LiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGFydGl0aW9uICVkIGhhcyBhbiBpbnZhbGlkIGxlbmd0aCBvZiAwIGJ5dGVzISIKK21zZ3N0ciAiUGFydGl0aW9uICVkIGhhciBlbiB1Z3lsZGlnIGzmbmdkZSwgMCBieXRlISIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo1ODAKKyMsIGZ1enp5Cittc2dpZCAiVGhlIGRhdGEgcmVnaW9uIGRvZXNuJ3Qgc3RhcnQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBwYXJ0aXRpb24uIgorbXNnc3RyICJEYXRhb21y5WRldCBiZWd5bmRlciBpa2tlIHZlZCBwYXJ0aXRpb25lbnMgYmVneW5kZWxzZSIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo1OTcKKyMsIGZ1enp5Cittc2dpZCAiVGhlIGJvb3QgcmVnaW9uIGRvZXNuJ3Qgc3RhcnQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBwYXJ0aXRpb24uIgorbXNnc3RyICJTdGFydG9tcuVkZXQgYmVneW5kZXIgaWtrZSB2ZWQgcGFydGl0aW9uZW5zIGJlZ3luZGVsc2UiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NjExCittc2dpZCAiVGhlIHBhcnRpdGlvbidzIGJvb3QgcmVnaW9uIGRvZXNuJ3Qgb2NjdXB5IHRoZSBlbnRpcmUgcGFydGl0aW9uLiIKK21zZ3N0ciAiUGFydGl0aW9uZW5zIHN0YXJ0b21y5WRlIG9wdGFnZXIgaWtrZSBoZWxlIHBhcnRpdGlvbmVucyBwbGFkcy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NjIyCittc2dpZCAiVGhlIHBhcnRpdGlvbidzIGRhdGEgcmVnaW9uIGRvZXNuJ3Qgb2NjdXB5IHRoZSBlbnRpcmUgcGFydGl0aW9uLiIKK21zZ3N0ciAiUGFydGl0aW9uZW5zIGRhdGFvbXLlZGUgb3B0YWdlciBpa2tlIGhlbGUgcGFydGl0aW9uZW5zIHBsYWRzLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo2NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldlaXJkIGJsb2NrIHNpemUgb24gZGV2aWNlIGRlc2NyaXB0b3I6ICVkIGJ5dGVzIGlzIG5vdCBkaXZpc2libGUgYnkgNTEyLiIKK21zZ3N0ciAiIgorIk3mcmtlbGlnIGJsb2tzdPhycmVsc2UgcOUgZW5oZWRlbnMgYmVza3JpdmVyOiAlZCBieXRlIGVyIGlra2UgaGVsdCBkZWxiYXJ0ICIKKyJtZWQgNTEyLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo2ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBkcml2ZXIgZGVzY3JpcHRvciBzYXlzIHRoZSBwaHlzaWNhbCBibG9jayBzaXplIGlzICVkIGJ5dGVzLCBidXQgTGludXggIgorInNheXMgaXQgaXMgJWQgYnl0ZXMuIgorbXNnc3RyICIiCisiRW5oZWRlbnMgYmVza3JpdmVyIHDlc3TlciBhdCBkZW4gZnlzaXNrZSBibG9rc3T4cnJlbHNlIGVyICVkIGJ5dGUsIG1lbiBMaW51eCAiCisicOVzdOVyIGF0IGRlbiBlciAlZCBieXRlLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo3MzYKK21zZ2lkICJObyB2YWxpZCBwYXJ0aXRpb24gbWFwIGZvdW5kLiIKK21zZ3N0ciAiSW5nZW4gZ3lsZGlnIHBhcnRpdGlvbnN0YWJlbCBrdW5uZSBmaW5kZXMuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjc5NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvbmZsaWN0aW5nIHBhcnRpdGlvbiBtYXAgZW50cnkgc2l6ZXMhICBFbnRyeSAxIHNheXMgaXQgaXMgJWQsIGJ1dCBlbnRyeSAlZCAiCisic2F5cyBpdCBpcyAlZCEiCittc2dzdHIgIiIKKyJLb25mbGlrdGVuZGUgc3T4cnJlbHNlc2RhdGEgaSBwYXJ0aXRpb25zdGFiZWxsZW4hIFBvc3QgMSBw5XN05XIgZGVuIGVyICVkLCAiCisibWVucyBwb3N0ICVkIHDlc3TlciBkZW4gZXIgJWQhIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjgyMgorIywgZnV6enkKK21zZ2lkICJXZWlyZCEgIFRoZXJlIGFyZSAyIHBhcnRpdGlvbnMgbWFwIGVudHJpZXMhIgorbXNnc3RyICJN5nJrZWxpZ3QgLSAyIHBvc3RlciBpIHBhcnRpdGlvbnN0YWJlbGxlbiEiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6MTM0NworbXNnaWQgIiIKKyJDaGFuZ2luZyB0aGUgbmFtZSBvZiBhIHJvb3Qgb3Igc3dhcCBwYXJ0aXRpb24gd2lsbCBwcmV2ZW50IExpbnV4IGZyb20gIgorInJlY29nbmlzaW5nIGl0IGFzIHN1Y2guIgorbXNnc3RyICIiCisiQXQg5m5kcmUgbmF2bmV0IHDlIGVuIHJvZC0gZWxsZXIgc3dhcHBhcnRpdGlvbiBn+HIgYXQgTGludXggaWtrZSBrYW4gIgorImdlbmtlbmRlIGRlbS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6MTQ0MworIywgZnV6enkKK21zZ2lkICJDYW4ndCBhZGQgYW5vdGhlciBwYXJ0aXRpb24gLS0gdGhlIHBhcnRpdGlvbiBtYXAgaXMgdG9vIHNtYWxsISIKK21zZ3N0ciAiIgorIkthbiBpa2tlIHRpbGb4amUgZW5kbnUgZW4gcHJpbeZyIHBhcnRpdGlvbiAtIHBhcnRpdGlvbnN0YWJlbGxlbiBlciBmb3IgbGlsbGUuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3BjOTguYzozNTQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcGFydGl0aW9uIHRhYmxlIG9uICVzLiIKK21zZ3N0ciAiVWd5bGRpZyBwYXJ0aXRpb25zdGFiZWwgcOUgJXMiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcGM5OC5jOjQwNiBsaWJwYXJ0ZWQvbGFiZWxzL3BjOTguYzo0ODQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQYXJ0aXRpb24gJWQgaXNuJ3QgYWxpZ25lZCB0byBjeWxpbmRlciBib3VuZGFyaWVzLiAgVGhpcyBpcyBzdGlsbCAiCisidW5zdXBwb3J0ZWQuIgorbXNnc3RyICIiCisiUGFydGl0aW9uZW4gJWQgbGlnZ2VyIGlra2UgcOUgaGVsIGN5bGluZGVyZ3LmbnNlLiBTa2FsIHRpbGb4amUgIgorInVuZGVyc3T4dHRlbHNlIGZvciBkZXR0ZS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcGM5OC5jOjc5MQorbXNnaWQgIkNhbid0IGFkZCBhbm90aGVyIHBhcnRpdGlvbi4iCittc2dzdHIgIkthbiBpa2tlIHRpbGb4amUgZW5kbnUgZW4gcGFydGl0aW9uLiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzoxNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBCYWQgY2hlY2tzdW0gb24gYmxvY2sgJWxsdSBvZiB0eXBlICVzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjQ5NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IERpZG4ndCBmaW5kIHJkYiBibG9jaywgc2hvdWxkIG5ldmVyIGhhcHBlbi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo1ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBMb29wIGRldGVjdGVkIGF0IGJsb2NrICVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjYwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IFRoZSAlcyBsaXN0IHNlZW1zIGJhZCBhdCBibG9jayAlcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo2ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gbGlzdCBiYWQgYmxvY2tzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjY5NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBsaXN0IHBhcnRpdGlvbiBibG9ja3MuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6NzA1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGxpc3QgZmlsZSBzeXN0ZW0gYmxvY2tzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjcxMworIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBsaXN0IGJvb3QgYmxvY2tzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjc0MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHdyaXRlIHBhcnRpdGlvbiBibG9jayBhdCAlZC4iCittc2dzdHIgIkthbiBpa2tlIGJlc3RlbW1lIG9tIHBhcnRpdGlvbmVuIGVyIG1vbnRlcmV0LiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzoxMDY5CisjLCBmdXp6eQorbXNnaWQgIlVuYWJsZSB0byBhbGxvY2F0ZSBhIHBhcnRpdGlvbiBudW1iZXIuIgorbXNnc3RyICJGb3J2ZW50ZXIgZXQgcGFydGl0aW9uc251bW1lci4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6MTQ1Cittc2dpZCAiQ29ycnVwdGVkIFN1biBkaXNrIGxhYmVsIGRldGVjdGVkLiIKK21zZ3N0ciAiRW4gYmVza2FkaWdldCBTdW4gZGlzay1ldGlrZXR0ZSBibGV2IGZ1bmRldC4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6MjY2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGRpc2sgQ0hTIGdlb21ldHJ5ICglZCwlZCwlZCkgcmVwb3J0ZWQgYnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0gZG9lcyBub3QgIgorIm1hdGNoIHRoZSBnZW9tZXRyeSBzdG9yZWQgb24gdGhlIGRpc2sgbGFiZWwgKCVkLCVkLCVkKS4iCittc2dzdHIgIiIKKyJEaXNrIENIUy1nZW9tZXRyaWVuICglZCwlZCwlZCkgcGFzc2VyIGlra2UgbWVkIGdlb21ldHJpZW4gZ2VtdCBw5SBkaXNrLSIKKyJldGlrZXR0ZW4gKCVkLCVkLCVkKS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6Mjg4CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBkaXNrIGxhYmVsIGRlc2NyaWJlcyBhIGRpc2sgYmlnZ2VyIHRoYW4gJXMuIgorbXNnc3RyICJEaXNrLWV0aWtldHRlbiBiZXNrcml2ZXIgZW4gZGlzayBzdPhycmUgZW5kICVzLiIKKworIzogbGlicGFydGVkL2xhYmVscy9zdW4uYzo0NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGRpc2sgaGFzICVkIGN5bGluZGVycywgd2hpY2ggaXMgZ3JlYXRlciB0aGFuIHRoZSBtYXhpbXVtIG9mIDY1NTM2LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3N1bi5jOjczNworbXNnaWQgIiIKKyJUaGUgV2hvbGUgRGlzayBwYXJ0aXRpb24gaXMgdGhlIG9ubHkgYXZhaWxhYmxlIG9uZSBsZWZ0LiAgR2VuZXJhbGx5LCBpdCBpcyAiCisibm90IGEgZ29vZCBpZGVhIHRvIG92ZXJ3cml0ZSB0aGlzIHBhcnRpdGlvbiB3aXRoIGEgcmVhbCBvbmUuICBTb2xhcmlzIG1heSAiCisibm90IGJlIGFibGUgdG8gYm9vdCB3aXRob3V0IGl0LCBhbmQgU0lMTyAodGhlIHNwYXJjIGJvb3QgbG9hZGVyKSBhcHByZWNpYXRlcyAiCisiaXQgYXMgd2VsbC4iCittc2dzdHIgIiIKKyJIZWxlIGRpc2stcGFydGl0aW9uZW4gZXIgZGVuIGVuZXN0ZSB0aWxiYWdlduZyZW5kZSwgZGVyIGVyIHRpbGfmbmdlbGlnLiAiCisiR2VuZXJlbHQgZXIgZGV0IGlra2UgZW4gZ29kIGlk6SBhdCBvdmVyc2tyaXZlIGRlbm5lIHBhcnRpdGlvbiBtZWQgZW4gcmlndGlnICIKKyLpbi4gU29sYXJpcyB2aWwgbXVsaWd2aXMgaWtrZSBrdW5uZSBzdGFydGUgb3AgdWRlbiBkZW4sIG9nIFNJTE8gIgorIihvcHN0YXJ0c3Byb2dyYW1tZXQgZm9yIFNwYXJjKSBz5nR0ZXIgb2dz5SBwcmlzIHDlIGRlbi4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6NzUyCittc2dpZCAiU3VuIGRpc2sgbGFiZWwgaXMgZnVsbC4iCittc2dzdHIgIlN1biBkaXNrLWV0aWtldHRlIGVyIGZ1bGQuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIG9wZW5pbmcgZGV2aWNlICclcycgZmFpbGVkLlxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6MTY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBzZWVraW5nIGRldmljZSAnJXMnIGZhaWxlZC5cbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjE3MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgd3JpdGluZyB0byBkZXZpY2UgJyVzJyBmYWlsZWQsXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzoxNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHJlYWRpbmcgZnJvbSBkZXZpY2UgJyVzJyBmYWlsZWQuXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzoxNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmF0YWwgZXJyb3JcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0MTgKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBWVE9DIGxhYmVscy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDI0Cittc2dpZCAiQ291bGQgbm90IHJlYWQgVlRPQyBGTVQxIERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQzMQorbXNnaWQgIkNvdWxkIG5vdCByZWFkIFZUT0MgRk1UNCBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0MzgKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBWVE9DIEZNVDUgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDQ1Cittc2dpZCAiQ291bGQgbm90IHJlYWQgVlRPQyBGTVQ3IERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQ2MgorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBWVE9DIGxhYmVscy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDY4Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIFZUT0MgRk1UMSBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0NzUKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgVlRPQyBGTVQ0IERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQ4MgorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBWVE9DIEZNVDUgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDg5Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIFZUT0MgRk1UNyBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGlicGFydGVkLmM6Mjk2IGxpYnBhcnRlZC9saWJwYXJ0ZWQuYzozMTYKK21zZ2lkICJPdXQgb2YgbWVtb3J5LiIKK21zZ3N0ciAiSWtrZSBtZXJlIGh1a29tbWVsc2UuIgorCisjOiBsaWJwYXJ0ZWQvdW5pdC5jOjEzOQorbXNnaWQgIkNhbm5vdCBnZXQgdW5pdCBzaXplIGZvciBzcGVjaWFsIHVuaXQgJ0NPTVBBQ1QnLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvdW5pdC5jOjM4NgorIywgYy1mb3JtYXQKK21zZ2lkICJcIiVzXCIgaGFzIGludmFsaWQgc3ludGF4IGZvciBsb2NhdGlvbnMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC91bml0LmM6Mzk0CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBtYXhpbXVtIGhlYWQgdmFsdWUgaXMgJWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC91bml0LmM6NDAxCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBtYXhpbXVtIHNlY3RvciB2YWx1ZSBpcyAlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL3VuaXQuYzo0MTMgbGlicGFydGVkL3VuaXQuYzo1NDUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlRoZSBsb2NhdGlvbiAlcyBpcyBvdXRzaWRlIG9mIHRoZSBkZXZpY2UgJXMuIgorbXNnc3RyICJLYW4gaWtrZSBvcHJldHRlIGVuIHBhcnRpdGlvbiB1ZGVuZm9yIGVuaGVkZW4uIgorCisjOiBsaWJwYXJ0ZWQvdW5pdC5jOjUyNworbXNnaWQgIkludmFsaWQgbnVtYmVyLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYWZmcy5jOjYzIGxpYnBhcnRlZC9mcy9hbWlnYS9hcGZzLmM6NTYKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hc2ZzLmM6NzAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGFsbG9jYXRlIHBhcnRpdGlvbiBibG9ja1xuIgorbXNnc3RyICJLYW4gaWtrZSBiZXN0ZW1tZSBvbSBwYXJ0aXRpb25lbiBlciBtb250ZXJldC4iCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hZmZzLmM6NzggbGlicGFydGVkL2ZzL2FtaWdhL2FwZnMuYzo3MAorIzogbGlicGFydGVkL2ZzL2FtaWdhL2FzZnMuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBhbGxvY2F0ZSBibG9ja1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hZmZzLmM6ODMgbGlicGFydGVkL2ZzL2FtaWdhL2FwZnMuYzo3NQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IENvdWxkbid0IHJlYWQgYm9vdCBibG9jayAlbGx1XG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FmZnMuYzo5OSBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXBmcy5jOjg2CisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXNmcy5jOjkyIGxpYnBhcnRlZC9mcy9hbWlnYS9hc2ZzLmM6MTA2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogQ291bGRuJ3QgcmVhZCByb290IGJsb2NrICVsbHVcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzo3MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBhbGxvY2F0ZSBpZCBsaXN0IGVsZW1lbnRcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBDb3VsZG4ndCByZWFkIGJsb2NrICVsbHVcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzoyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBCYWQgY2hlY2tzdW0gb24gYmxvY2sgJWxsdSBvZiB0eXBlICVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6MjEyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyA6IENvdWxkbid0IHdyaXRlIGJsb2NrICVkXG4iCittc2dzdHIgIiVzIHVuZGVyIHNrcml2bmluZyBw5SAlcyIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6Mjc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGFsbG9jYXRlIGRpc2tfc3BlY2lmaWMgcmRiIGJsb2NrXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6Mjg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRGlkbid0IGZpbmQgcmRiIGJsb2NrLCBzaG91bGQgbmV2ZXIgaGFwcGVuXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6MzE4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byByZWFkIHBhcnRpdGlvbiBibG9jayAlbGx1XG4iCittc2dzdHIgIkthbiBpa2tlIGJlc3RlbW1lIG9tIHBhcnRpdGlvbmVuIGVyIG1vbnRlcmV0LiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjg3IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzoxMTIKK21zZ2lkICJJbmNvbnNpc3RlbnQgZ3JvdXAgZGVzY3JpcHRvcnMhIgorbXNnc3RyICJJbmtvbnNpc3RlbnRlIGdydXBwZWJlc2tyaXZlcmUhIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6OTEgbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjExNgorIywgZnV6enkKK21zZ2lkICJGaWxlIHN5c3RlbSBmdWxsISIKK21zZ3N0ciAiRmlsc3lzdGVtZXQgZXIgZnVsZHQhIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6Njg2CisjLCBmdXp6eQorbXNnaWQgIkludmFsaWQgc3VwZXJibG9jay4gIEFyZSB5b3Ugc3VyZSB0aGlzIGlzIGFuIGV4dDIgZmlsZSBzeXN0ZW0/IgorbXNnc3RyICJVZ3lsZGlnIHN1cGVyYmxvay4gRXIgZHUgc2lra2VyIHDlIGF0IGRldHRlIGVyIGV0IGV4dDItZmlsc3lzdGVtPyIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjcwMCBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjY1OAorIywgZnV6enkKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgZXJyb3JzISAgWW91IHNob3VsZCBydW4gZTJmc2NrLiIKK21zZ3N0ciAiRmlsc3lzdGVtZXQgaW5kaG9sZGVyIGZlamwhIEv4ciBlMmZzY2sgZvhyc3QuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6NzExCisjLCBmdXp6eQorbXNnaWQgIiIKKyJGaWxlIHN5c3RlbSB3YXMgbm90IGNsZWFubHkgdW5tb3VudGVkISAgWW91IHNob3VsZCBydW4gZTJmc2NrLiAgTW9kaWZ5aW5nIGFuICIKKyJ1bmNsZWFuIGZpbGUgc3lzdGVtIGNvdWxkIGNhdXNlIHNldmVyZSBjb3JydXB0aW9uLiIKK21zZ3N0ciAiRmlsc3lzdGVtZXQgZXIgaWtrZSBhZm1vbnRlcmV0IHDlIHJldHRlIG3lZGUhIEJydWcgZTJmc2NrLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjczMQorIywgZnV6enkKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgYW4gaW5jb21wYXRpYmxlIGZlYXR1cmUgZW5hYmxlZC4iCittc2dzdHIgIkZpbHN5c3RlbWV0IGhhciBlbiBpbmtvbXBhdGliZWwgZmluZXNzZSBha3RpdmVyZXQiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo3NDIKK21zZ2lkICJFcnJvciBhbGxvY2F0aW5nIGJ1ZmZlciBjYWNoZS4iCittc2dzdHIgIkt1bm5lIGlra2UgcmVzZXJ2ZXJlIGJ1ZmZlcmNhY2hlIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2lub2RlX3JlbG9jYXRvci5jOjExNAorIywgZnV6enkKK21zZ2lkICIiCisiRm91bmQgYW4gaW5vZGUgd2l0aCBhIGluY29ycmVjdCBsaW5rIGNvdW50LiAgQmV0dGVyIGdvIHJ1biBlMmZzY2sgZmlyc3QhIgorbXNnc3RyICJGYW5kdCBlbiBpbm9kZSBtZWQgZmVqbGFndGlndCBhbnRhbCBs5m5rZXIuIEv4ciBlMmZzY2sgZvhyc3QuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2lub2RlX3JlbG9jYXRvci5jOjQ4NworbXNnaWQgIk5vdCBlbm91Z2ggZnJlZSBpbm9kZXMhIgorbXNnc3RyICJEZXIgZmluZGVzIGlra2UgdGlsc3Ry5mtrZWxpZ3QgbWFuZ2UgZnJpZSBpbm9kZXIhIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjIyMworIywgZnV6enkKK21zZ2lkICJGaWxlIHN5c3RlbSBpcyB0b28gZnVsbCB0byByZW1vdmUgYSBncm91cCEiCittc2dzdHIgIkZpbHN5c3RlbWV0IGVyIGZvciBvcHRhZ2V0IHRpbCBhdCBmamVybmUgZW4gZ3J1cHBlISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzoyMzIKKyMsIGZ1enp5Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIHRvbyBtYW55IGFsbG9jYXRlZCBpbm9kZXMgdG8gcmVtb3ZlIGEgZ3JvdXAhIgorbXNnc3RyICJGaWxzeXN0ZW1ldCBoYXIgZm9yIG1hbmdlIHJlc2VydmVyZWRlIGlub2RlciBmb3IgYXQgZmplcm5lIGVuIGdydXBwZSEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NDkxCittc2dpZCAiYWRkaW5nIGdyb3VwcyIKK21zZ3N0ciAidGlsZvhqZXIgZ3J1cHBlciIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo1MjgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIllvdXIgZmlsZSBzeXN0ZW0gaXMgdG9vIGZ1bGwgdG8gcmVzaXplIGl0IHRvICVpIGJsb2Nrcy4gIFNvcnJ5LiIKK21zZ3N0ciAiRmlsc3lzdGVtZXQgZXIgZm9yIG9wdGFnZXQgdGlsIGF0IOZuZHJlIGRldHMgc3T4cnJlbHNlIHRpbCAlaSBibG9ra2UuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjUzOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgZmlsZSBzeXN0ZW0gaGFzIHRvbyBtYW55IG9jY3VwaWVkIGlub2RlcyB0byByZXNpemUgaXQgdG8gJWkgYmxvY2tzLiAgIgorIlNvcnJ5LiIKK21zZ3N0ciAiIgorIkZpbHN5c3RlbWV0IGhhciBmb3IgbWFuZ2Ugb3B0YWdlZGUgaW5vZGVyIHRpbCBhdCDmbmRyZSBkZXRzIHN0+HJyZWxzZSB0aWwgJWkgIgorImJsb2trZS4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NjY2CisjLCBmdXp6eQorbXNnaWQgIkZpbGUgc3lzdGVtIHdhcyBub3QgY2xlYW5seSB1bm1vdW50ZWQhICBZb3Ugc2hvdWxkIHJ1biBlMmZzY2suIgorbXNnc3RyICJGaWxzeXN0ZW1ldCBlciBpa2tlIGFmbW9udGVyZXQgcOUgcmV0dGUgbeVkZSEgQnJ1ZyBlMmZzY2suIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjY3NQorbXNnaWQgIiIKKyJUaGUgZmlsZSBzeXN0ZW0gaGFzIHRoZSAnZGlyX2luZGV4JyBmZWF0dXJlIGVuYWJsZWQuICBQYXJ0ZWQgY2FuIG9ubHkgcmVzaXplICIKKyJ0aGUgZmlsZSBzeXN0ZW0gaWYgaXQgZGlzYWJsZXMgdGhpcyBmZWF0dXJlLiAgWW91IGNhbiBlbmFibGUgaXQgbGF0ZXIgYnkgIgorInJ1bm5pbmcgJ3R1bmUyZnMgLU8gZGlyX2luZGV4IERFVklDRScgYW5kIHRoZW4gJ2UyZnNjayAtZkQgREVWSUNFJy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo2OTEKK21zZ2lkICIiCisiQSByZXNpemUgb3BlcmF0aW9uIG9uIHRoaXMgZmlsZSBzeXN0ZW0gd2lsbCB1c2UgRVhQRVJJTUVOVEFMIGNvZGVcbiIKKyJ0aGF0IE1BWSBDT1JSVVBUIGl0IChhbHRob3VnaCBubyBvbmUgaGFzIHJlcG9ydGVkIGFueSBzdWNoIGRhbWFnZSB5ZXQpLlxuIgorIllvdSBzaG91bGQgYXQgbGVhc3QgYmFja3VwIHlvdXIgZGF0YSBmaXJzdCwgYW5kIHJ1biAnZTJmc2NrIC1mJyBhZnRlcndhcmRzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2Jsb2NrX3JlbG9jYXRvci5jOjE5OAorIywgZnV6enkKK21zZ2lkICJDcm9zcy1saW5rZWQgYmxvY2tzIGZvdW5kISAgQmV0dGVyIGdvIHJ1biBlMmZzY2sgZmlyc3QhIgorbXNnc3RyICJLcnlkc2zmbmtlZGUgYmxva2tlIGZ1bmRldCEgS/hyIGUyZnNjayBm+HJzdCEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfYmxvY2tfcmVsb2NhdG9yLmM6NTM3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJCbG9jayAlaSBoYXMgbm8gcmVmZXJlbmNlPyAgV2VpcmQuIgorbXNnc3RyICJCbG9rICVpIGhhciBpbmdlbiByZWZlcmVuY2U/IE3mcmtlbGlndCIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9ibG9ja19yZWxvY2F0b3IuYzo3MzcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrICVpIHNob3VsZG4ndCBoYXZlIGJlZW4gbWFya2VkICglZCwgJWQpISIKK21zZ3N0ciAiQmxvayAlaSBidXJkZSBpa2tlIHbmcmUgbeZya2V0ISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvaW50ZXJmYWNlLmM6MTg2CisjLCBmdXp6eQorbXNnaWQgIiIKKyJUaGUgZXh0MiBmaWxlIHN5c3RlbSBwYXNzZWQgYSBiYXNpYyBjaGVjay4gIEZvciBhIG1vcmUgY29tcHJlaGVuc2l2ZSBjaGVjaywgIgorInVzZSB0aGUgZTJmc2NrIHByb2dyYW0uIgorbXNnc3RyICIiCisiRmlsc3lzdGVtZXQgKGUyZnMpIGtsYXJlZGUgZXQgZ3J1bmRs5mdnZW5kZSB0ZXN0LiBGb3IgZXQgbWVyZSBnZW5uZW1n5WVuZGUgIgorInRlc3QsIGJydWcgcHJvZ3JhbW1ldCBlMmZzY2suIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9pbnRlcmZhY2UuYzoyMDMKK21zZ2lkICJTb3JyeSwgY2FuJ3QgbW92ZSB0aGUgc3RhcnQgb2YgZXh0MiBwYXJ0aXRpb25zIHlldCEiCittc2dzdHIgIkthbiBpa2tlIGZseXR0ZSBlbiBleHQyLXBhcnRpdGlvbnMgYmVneW5kZWxzZSBlbmRudSEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfYnVmZmVyLmM6ODIKK21zZ2lkICJDb3VsZG4ndCBmbHVzaCBidWZmZXIgY2FjaGUhIgorbXNnc3RyICJLdW5uZSBpa2tlIHJlbnNlIGJ1ZmZlcmNhY2hlbiEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfbWtmcy5jOjE2MgorbXNnaWQgIndyaXRpbmcgcGVyLWdyb3VwIG1ldGFkYXRhIgorbXNnc3RyICJza3JpdmVyIG1ldGFkYXRhIGZvciBodmVyIGdydXBwZSIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9ta2ZzLmM6NTY0Cittc2dpZCAiRmlsZSBzeXN0ZW0gdG9vIHNtYWxsIGZvciBleHQyLiIKK21zZ3N0ciAiRmlsc3lzdGVtIGZvciBsaWxsZSB0aWwgZXh0Mi4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY2FsYy5jOjEzNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBuZWVkICVzIG9mIGZyZWUgZGlzayBzcGFjZSB0byBzaHJpbmsgdGhpcyBwYXJ0aXRpb24gdG8gdGhpcyBzaXplLiAgIgorIkN1cnJlbnRseSwgb25seSAlcyBpcyBmcmVlLiIKK21zZ3N0ciAiIgorIkR1IGJlaPh2ZXIgJWRNIGxlZGlnIHBsYWRzIGZvciBhdCBmb3JtaW5kc2tlIHN0+HJyZWxzZW4gcOUgZGVubmUgcGFydGl0aW9uICIKKyJ0aWwgYW5naXZlbiBzdPhycmVsc2UuIChkZXIgZXIga3VuICVkTSBsZWRpZ3QpIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvbnRleHQuYzo1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2x1c3RlciBzdGFydCBkZWx0YSA9ICVkLCB3aGljaCBpcyBub3QgYSBtdWx0aXBsZSBvZiB0aGUgY2x1c3RlciBzaXplICVkLiIKK21zZ3N0ciAiIgorIktseW5nZS1zdGFydGZvcnNrZWwgZXIgJWQsIGh2aWxrZXQgaWtrZSBlciBlbiBtdWx0aXBlbCBhZiBrbHluZ2VzdPhycmVsc2VuICVkIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jOjMwOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiUGFydGl0aW9uIHRvbyBiaWcvc21hbGwgZm9yIGEgJXMgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICJQYXJ0aXRpb25lbiBmb3Igc3RvciBlbGxlciBsaWxsZSB0aWwgYXQgaW5kZWhvbGRlIGV0ICVzLWZpbHN5c3RlbSIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9mYXQuYzo0NzQKK21zZ2lkICIiCisiVGhlIEZBVHMgZG9uJ3QgbWF0Y2guICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRoaXMgbWVhbnMsIHRoZW4gc2VsZWN0ICIKKyJjYW5jZWwsIHJ1biBzY2FuZGlzayBvbiB0aGUgZmlsZSBzeXN0ZW0sIGFuZCB0aGVuIGNvbWUgYmFjay4iCittc2dzdHIgIiIKKyJGaWxhbGxva2VyaW5nc3RhYmVsbGVybmUgc3RlbW1lciBpa2tlIG92ZXJlbnMuIEh2aXMgZHUgaWtrZSB26WQgaHZhZCBkZXR0ZSAiCisiYmV0eWRlciwgduZsZyBhbm51bGzpciwga/hyIHNjYW5kaXNrIHDlIGZpbHN5c3RlbWV0IG9nIGZvcnP4ZyBpZ2VuLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9mYXQuYzo1MTQKK21zZ2lkICJUaGVyZSBhcmUgbm8gcG9zc2libGUgY29uZmlndXJhdGlvbnMgZm9yIHRoaXMgRkFUIHR5cGUuIgorbXNnc3RyICJEZXQgZmluZGVzIGluZ2VuIG11bGlnZSBrb21iaW5hdGlvbmVyIGZvciBkZW5uZSBGQVQtdHlwZS4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvZmF0LmM6NTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGaWxlIHN5c3RlbSBkb2Vzbid0IGhhdmUgZXhwZWN0ZWQgc2l6ZXMgZm9yIFdpbmRvd3MgdG8gbGlrZSBpdC4gIENsdXN0ZXIgIgorInNpemUgaXMgJWRrICglZGsgZXhwZWN0ZWQpOyBudW1iZXIgb2YgY2x1c3RlcnMgaXMgJWQgKCVkIGV4cGVjdGVkKTsgc2l6ZSBvZiAiCisiRkFUcyBpcyAlZCBzZWN0b3JzICglZCBleHBlY3RlZCkuIgorbXNnc3RyICIiCisiRmlsc3lzdGVtZXQgaGFyIGlra2UgZW4gc3T4cnJlbHNlIHNvbSBXaW5kb3dzIGthbiBsaWRlLiBLbHluZ2VzdPhycmVsc2VuIGVyICUiCisiZGsgKCVkayBmb3J2ZW50ZXQpOyBhbnRhbCBrbHluZ2VyIGVyICVkICglZCBmb3J2ZW50ZXQpOyBzdPhycmVsc2VuIHDlIEZBVC0iCisiZXJuZSBlciAlZCBzZWt0b3JlciAoJWQgZm9ydmVudGV0KS4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvZmF0LmM6NTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGaWxlIHN5c3RlbSBpcyByZXBvcnRpbmcgdGhlIGZyZWUgc3BhY2UgYXMgJWQgY2x1c3RlcnMsIG5vdCAlZCBjbHVzdGVycy4iCittc2dzdHIgIkZpbHN5c3RlbWV0IG1lbmVyIGF0IGRlbiBmcmllIHBsYWRzIGVyICVkIGtseW5nZXIsIGlra2UgJWQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jOjg3NAorIywgZnV6enkKK21zZ2lkICIiCisiR05VIFBhcnRlZCB3YXMgbWlzY29tcGlsZWQ6IHRoZSBGQVQgYm9vdCBzZWN0b3Igc2hvdWxkIGJlIDUxMiBieXRlcy4gIEZBVCAiCisic3VwcG9ydCB3aWxsIGJlIGRpc2FibGVkLiIKK21zZ3N0ciAiIgorIkdOVSBQYXJ0ZWQga29tcGlsZXJlZGVzIGZlamxhZ3RpZ3Q6IEZBVCdzIHN0YXJ0c2VrdG9yIHNrYWwgduZyZSA1MTIgYnl0ZS4gIgorIlVuZGVyc3T4dHRlbHNlbiBmb3IgRkFUIHZpbCBibGl2ZSBibG9rZXJldC4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6MTU5CisjLCBmdXp6eQorbXNnaWQgIiIKKyJUaGVyZSdzIG5vdCBlbm91Z2ggcm9vbSBpbiB0aGUgcm9vdCBkaXJlY3RvcnkgZm9yIGFsbCBvZiB0aGUgZmlsZXMuICBFaXRoZXIgIgorImNhbmNlbCwgb3IgaWdub3JlIHRvIGxvc2UgdGhlIGZpbGVzLiIKK21zZ3N0ciAiIgorIkRlciBlciBpa2tlIHRpbHN0cuZra2VsaWd0IG1lZCBwbGFkcyBmb3IgYWxsZSBmaWxlciBpIHJvZGthdGFsb2dldC4gVuZsZyAiCisiZW50ZW4gYXQgYW5udWxsZXJlLCBlbGxlciBpZ25vcmVyZSBvZyB0YWJlIGZpbGVybmUuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjMwMAorbXNnaWQgIkVycm9yIHdyaXRpbmcgdG8gdGhlIHJvb3QgZGlyZWN0b3J5LiIKK21zZ3N0ciAiRW4gZmVqbCBvcHN0b2QgdmVkIHNrcml2bmluZyB0aWwgcm9ka2F0YWxvZ2V0LiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo0ODkKKyMsIGZ1enp5Cittc2dpZCAiSWYgeW91IGxlYXZlIHlvdXIgZmlsZSBzeXN0ZW0gYXMgRkFUMTYsIHRoZW4geW91IHdpbGwgaGF2ZSBubyBwcm9ibGVtcy4iCittc2dzdHIgIiIKKyJIdmlzIGR1IGxhZGVyIGZpbHN5c3RlbWV0IGZvcnRz5nR0ZSBtZWQgYXQgduZyZSBGQVQxNiB2aWwgZHUgaWtrZSBm5SBub2dlbiAiCisicHJvYmxlbWVyLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo0OTIKK21zZ2lkICIiCisiSWYgeW91IGNvbnZlcnQgdG8gRkFUMTYsIGFuZCBNUyBXaW5kb3dzIGlzIGluc3RhbGxlZCBvbiB0aGlzIHBhcnRpdGlvbiwgdGhlbiAiCisieW91IG11c3QgcmUtaW5zdGFsbCB0aGUgTVMgV2luZG93cyBib290IGxvYWRlci4gIElmIHlvdSB3YW50IHRvIGRvIHRoaXMsIHlvdSAiCisic2hvdWxkIGNvbnN1bHQgdGhlIFBhcnRlZCBtYW51YWwgKG9yIHlvdXIgZGlzdHJpYnV0aW9uJ3MgbWFudWFsKS4iCittc2dzdHIgIiIKKyJIdmlzIGR1IGtvbnZlcnRlcmVyIHRpbCBGQVQxNiBvZyBNUyBXaW5kb3dzIGVyIGluc3RhbGxlcmV0IHDlIGRlbm5lICIKKyJwYXJ0aXRpb24gc+Ugc2thbCBkdSBnZW5pbnN0YWxsZXJlIE1TIFdpbmRvd3Mgb3BzdGFydHNwcm9ncmFtLiBIdmlzIGR1IGf4ciAiCisiZGV0IGL4ciBkdSBzdHVkZXJlIFBhcnRlZHMgbWFudWFsIChlbGxlciBkaW4gZGlzdHJpYnV0aW9ucyBtYW51YWwpLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1MDAKK21zZ2lkICIiCisiSWYgeW91IGxlYXZlIHlvdXIgZmlsZSBzeXN0ZW0gYXMgRkFUMzIsIHRoZW4geW91IHdpbGwgbm90IGludHJvZHVjZSBhbnkgbmV3ICIKKyJwcm9ibGVtcy4iCittc2dzdHIgIiIKKyJIdmlzIGR1IGxhZGVyIGZpbHN5c3RlbWV0IGZvcnRz5nR0ZSBtZWQgYXQgduZyZSBGQVQzMiB2aWwgZHUgaWtrZSAiCisiaW50cm9kdWNlcmUgbm9nZW4gbnllIHByb2JsZW1lci4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTA0Cittc2dpZCAiIgorIklmIHlvdSBjb252ZXJ0IHRvIEZBVDMyLCBhbmQgTVMgV2luZG93cyBpcyBpbnN0YWxsZWQgb24gdGhpcyBwYXJ0aXRpb24sIHRoZW4gIgorInlvdSBtdXN0IHJlLWluc3RhbGwgdGhlIE1TIFdpbmRvd3MgYm9vdCBsb2FkZXIuICBJZiB5b3Ugd2FudCB0byBkbyB0aGlzLCB5b3UgIgorInNob3VsZCBjb25zdWx0IHRoZSBQYXJ0ZWQgbWFudWFsIChvciB5b3VyIGRpc3RyaWJ1dGlvbidzIG1hbnVhbCkuICBBbHNvLCAiCisiY29udmVydGluZyB0byBGQVQzMiB3aWxsIG1ha2UgdGhlIGZpbGUgc3lzdGVtIHVucmVhZGFibGUgYnkgTVMgRE9TLCBNUyAiCisiV2luZG93cyA5NWEsIGFuZCBNUyBXaW5kb3dzIE5ULiIKK21zZ3N0ciAiIgorIkh2aXMgZHUga29udmVydGVyZXIgdGlsIEZBVDMyLCBvZyBNUyBXaW5kb3dzIGVyIGluc3RhbGxlcmV0IHDlIGRlbm5lICIKKyJwYXJ0aXRpb24sIHNrYWwgZHUgZ2VuaW5zdGFsbGVyZSBNUyBXaW5kb3dzIG9wc3RhcnRzcHJvZ3JhbS4gSHZpcyBkdSBn+HIgZGV0ICIKKyJi+HIgZHUgc3R1ZGVyZSBQYXJ0ZWRzIG1hbnVhbCAoZWxsZXIgZGluIGRpc3RyaWJ1dGlvbnMgbWFudWFsKS4gQmVt5nJrIGF0ICIKKyJ2ZWQgYXQga29udmVydGVyZSBmaWxzeXN0ZW1ldCB0aWwgRkFUMzIgdmlsIGRldCBpa2tlIGt1bm5lIGzmc2VzIGFmIE1TIERPUywgIgorIk1TIFdpbmRvd3MgOTVhIG9nIE1TIFdpbmRvd3MgTlQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjUxOAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyAgJXMgICVzIgorbXNnc3RyICIlcyAgJXMgICVzIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjUxOQorbXNnaWQgIldvdWxkIHlvdSBsaWtlIHRvIHVzZSBGQVQzMj8iCittc2dzdHIgIthuc2tlciBkdSBhdCBicnVnZSBGQVQzMj8iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTUwIGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzICAlcyIKK21zZ3N0ciAiJXMgICVzIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjU1MQorbXNnaWQgIiIKKyJUaGUgZmlsZSBzeXN0ZW0gY2FuIG9ubHkgYmUgcmVzaXplZCB0byB0aGlzIHNpemUgYnkgY29udmVydGluZyB0byBGQVQxNi4iCittc2dzdHIgIiIKKyJGaWxzeXN0ZW1ldCBrYW4ga3VuIOZuZHJlcyB0aWwgZGVubmUgc3T4cnJlbHNlIHZlZCBhdCBrb252ZXJ0ZXJlIHRpbCBGQVQxNi4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTY3Cittc2dpZCAiIgorIlRoZSBmaWxlIHN5c3RlbSBjYW4gb25seSBiZSByZXNpemVkIHRvIHRoaXMgc2l6ZSBieSBjb252ZXJ0aW5nIHRvIEZBVDMyLiIKK21zZ3N0ciAiIgorIkZpbHN5c3RlbWV0IGthbiBrdW4g5m5kcmVzIHRpbCBkZW5uZSBzdPhycmVsc2UgdmVkIGF0IGtvbnZlcnRlcmUgdGlsIEZBVDMyLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1ODAKKyMsIGZ1enp5Cittc2dpZCAiIgorIkdOVSBQYXJ0ZWQgY2Fubm90IHJlc2l6ZSB0aGlzIHBhcnRpdGlvbiB0byB0aGlzIHNpemUuICBXZSdyZSB3b3JraW5nIG9uIGl0ISIKK21zZ3N0ciAiIgorIkdOVSBQYXJ0ZWQga2FuIGlra2Ug5m5kcmUgcGFydGl0aW9uZW4gdGlsIGRlbm5lIHN0+HJyZWxzZS4gVmkgYXJiZWpkZXIgcOUgZW4gIgorImz4c25pbmchIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo0OSBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo1NgorbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyBhbiBpbnZhbGlkIHNpZ25hdHVyZSBmb3IgYSBGQVQgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICJGaWxzeXN0ZW1ldCBoYXIgZW4gdWd5bGRpZyBzaWduYXR1ciBmb3IgZmlsc3lzdGVtZXIgYWYgdHlwZW4gRkFULiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6NjQKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgYW4gaW52YWxpZCBzZWN0b3Igc2l6ZSBmb3IgYSBGQVQgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICIiCisiRmlsc3lzdGVtZXQgaGFyIGVuIHVneWxkaWcgc2VrdG9yc3T4cnJlbHNlIGZvciBldCBmaWxzeXN0ZW0gYWYgdHlwZW4gRkFULiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6NzEKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgYW4gaW52YWxpZCBjbHVzdGVyIHNpemUgZm9yIGEgRkFUIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiIgorIkZpbHN5c3RlbWV0IGhhciBlbiB1Z3lsZGlnIGtseW5nZXN0+HJyZWxzZSBmb3IgZXQgZmlsc3lzdGVtIGFmIHR5cGVuIEZBVC4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjc4CisjLCBmdXp6eQorbXNnaWQgIiIKKyJGaWxlIHN5c3RlbSBoYXMgYW4gaW52YWxpZCBudW1iZXIgb2YgcmVzZXJ2ZWQgc2VjdG9ycyBmb3IgYSBGQVQgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICIiCisiRmlsc3lzdGVtZXQgaGFyIGV0IHVneWxkaWd0IGFudGFsIHJlc2VydmVyZWRlIHNla3RvcmVyIGZvciBldCBmaWxzeXN0ZW0gYWYgIgorInR5cGVuIEZBVC4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjg1CisjLCBmdXp6eQorbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyBhbiBpbnZhbGlkIG51bWJlciBvZiBGQVRzLiIKK21zZ3N0ciAiRmlsc3lzdGVtZXQgaGFyIGV0IGZlamxhZ3RpZ3QgYW50YWwgZmlsYWxsb2tlcmluZ3N0YWJlbGxlci4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjEzOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhpcyBmaWxlIHN5c3RlbSBoYXMgYSBsb2dpY2FsIHNlY3RvciBzaXplIG9mICVkLiAgR05VIFBhcnRlZCBpcyBrbm93biBub3QgIgorInRvIHdvcmsgcHJvcGVybHkgd2l0aCBzZWN0b3Igc2l6ZXMgb3RoZXIgdGhhbiA1MTIgYnl0ZXMuIgorbXNnc3RyICIiCisiRmlsc3lzdGVtZXQgaGFyIGVuIGxvZ2lzayBzZWt0b3JzdPhycmVsc2UgcOUgJWQuIERldCBlciBrZW5kdCBhdCBHTlUgUGFydGVkICIKKyJpa2tlIGZ1bmdlcmVyIGdvZHQgbWVkIGFuZHJlIHNla3RvcnN0+HJyZWxzZXIgZW5kIDUxMiBieXRlLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6MTY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZmlsZSBzeXN0ZW0ncyBDSFMgZ2VvbWV0cnkgaXMgKCVkLCAlZCwgJWQpLCB3aGljaCBpcyBpbnZhbGlkLiAgVGhlICIKKyJwYXJ0aXRpb24gdGFibGUncyBDSFMgZ2VvbWV0cnkgaXMgKCVkLCAlZCwgJWQpLiAgSWYgeW91IHNlbGVjdCBJZ25vcmUsIHRoZSAiCisiZmlsZSBzeXN0ZW0ncyBDSFMgZ2VvbWV0cnkgd2lsbCBiZSBsZWZ0IHVuY2hhbmdlZC4gIElmIHlvdSBzZWxlY3QgRml4LCB0aGUgIgorImZpbGUgc3lzdGVtJ3MgQ0hTIGdlb21ldHJ5IHdpbGwgYmUgc2V0IHRvIG1hdGNoIHRoZSBwYXJ0aXRpb24gdGFibGUncyBDSFMgIgorImdlb21ldHJ5LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzoyMTMKK21zZ2lkICJGQVQgYm9vdCBzZWN0b3Igc2F5cyBsb2dpY2FsIHNlY3RvciBzaXplIGlzIDAuICBUaGlzIGlzIHdlaXJkLiAiCittc2dzdHIgIiIKKyJGQVQ6cyBzdGFydHNla3RvciBtZW5lciBhdCBkZW4gbG9naXNrZSBzZWt0b3JzdPhycmVsc2UgZXIgMC4gTeZya2VsaWd0LiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6MjE5Cittc2dpZCAiRkFUIGJvb3Qgc2VjdG9yIHNheXMgdGhlcmUgYXJlIG5vIEZBVCB0YWJsZXMuICBUaGlzIGlzIHdlaXJkLiAiCittc2dzdHIgIkZBVDpzIHN0YXJ0c2VrdG9yIG1lbmVyIGF0IGRlciBtYW5nbGVyIEZBVC10YWJlbGxlci4gTeZya2VsaWd0LiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6MjI1Cittc2dpZCAiRkFUIGJvb3Qgc2VjdG9yIHNheXMgY2x1c3RlcnMgYXJlIDAgc2VjdG9ycy4gIFRoaXMgaXMgd2VpcmQuICIKK21zZ3N0ciAiRkFUOnMgc3RhcnRzZWt0b3IgbWVuZXIgYXQgZW4ga2x5bmdlIGJlc3TlciBhZiAwIHNla3RvcmVyLiBN5nJrZWxpZ3QuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzoyMzUKKyMsIGZ1enp5Cittc2dpZCAiRmlsZSBzeXN0ZW0gaXMgRkFUMTIsIHdoaWNoIGlzIHVuc3VwcG9ydGVkLiIKK21zZ3N0ciAiRmlsc3lzdGVtZXQgZXIgRkFUMTIsIHNvbSBpa2tlIHVuZGVyc3T4dHRlcy4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjQxMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGluZm9ybWF0aW9uIHNlY3RvciBoYXMgdGhlIHdyb25nIHNpZ25hdHVyZSAoJXgpLiAgU2VsZWN0IGNhbmNlbCBmb3Igbm93LCAiCisiYW5kIHNlbmQgaW4gYSBidWcgcmVwb3J0LiAgSWYgeW91J3JlIGRlc3BlcmF0ZSwgaXQncyBwcm9iYWJseSBzYWZlIHRvIGlnbm9yZS4iCittc2dzdHIgIiIKKyJJbmZvcm1hdGlvbnNzZWt0b3JlbiBoYXIgZm9ya2VydCBzaWduYXR1ciAoJXgpLiBW5mxnIGFubnVsbOlyIG9nIGluZHNlbmQgZW4gIgorImZlamxyYXBwb3J0LiBIdmlzIGR1IGVyIGRlc3BlcmF0IHPlIGVyIGRldCBmb3Jtb2RlbnRsaWcgc2lra2VydCBhdCBpZ25vcmVyZSAiCisiZmVqbGVuLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb3VudC5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgZGlyZWN0b3J5IGVudHJ5IGZvciAlczogZmlyc3QgY2x1c3RlciBpcyB0aGUgZW5kIG9mIGZpbGUgbWFya2VyLiIKK21zZ3N0ciAiIgorIkZlamxhZ3RpZyBrYXRhbG9naW5kZ2FuZyBmb3IgJXM6IGb4cnN0ZSBrbHluZ2UgZXIgZW4gZmlsc2x1dHNtYXJrZXJpbmcuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvdW50LmM6MTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJCYWQgRkFUOiB1bnRlcm1pbmF0ZWQgY2hhaW4gZm9yICVzLiAgWW91IHNob3VsZCBydW4gZG9zZnNjayBvciBzY2FuZGlzay4iCittc2dzdHIgIiIKKyJE5XJsaWcgZmlsYWxsb2tlcmluZ3N0YWJlbDogZWogYWZzbHV0dGV0IGvmZGUgZm9yICVzLiBEdSBi+HIga/hyZSBkb3Nmc2NrICIKKyJlbGxlciBzY2FuZGlzay4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY291bnQuYzoxNzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJCYWQgRkFUOiBjbHVzdGVyICVkIG91dHNpZGUgZmlsZSBzeXN0ZW0gaW4gY2hhaW4gZm9yICVzLiAgWW91IHNob3VsZCBydW4gIgorImRvc2ZzY2sgb3Igc2NhbmRpc2suIgorbXNnc3RyICIiCisiROVybGlnIGZpbGFsbG9rZXJpbmdzdGFiZWw6IGtseW5nZSAlZCBsaWdnZXIgdWRlbmZvciBmaWxzeXN0ZW1ldCBmb3IgJXMuIER1ICIKKyJi+HIga/hyZSBkb3Nmc2NrIGVsbGVyIHNjYW5kaXNrLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb3VudC5jOjE4NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQmFkIEZBVDogY2x1c3RlciAlZCBpcyBjcm9zcy1saW5rZWQgZm9yICVzLiAgWW91IHNob3VsZCBydW4gZG9zZnNjayBvciAiCisic2NhbmRpc2suIgorbXNnc3RyICIiCisiROVybGlnIGZpbGFsbG9rZXJpbmdzdGFiZWw6IGtseW5nZSAlZCBlciBrcnlkc2zmbmtldCBmb3IgJXMuIER1IGL4ciBr+HJlICIKKyJkb3Nmc2NrIGVsbGVyIHNjYW5kaXNrLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb3VudC5jOjIwMworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyAlZGssIGJ1dCBpdCBoYXMgJWQgY2x1c3RlcnMgKCVkaykuIgorbXNnc3RyICIlcyBlciAlZGssIG1lbiBkZW4gaGFyICVkIGtseW5nZXIgKCVkaykuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvdW50LmM6MjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZmlsZSAlcyBpcyBtYXJrZWQgYXMgYSBzeXN0ZW0gZmlsZS4gIFRoaXMgbWVhbnMgbW92aW5nIGl0IGNvdWxkIGNhdXNlICIKKyJzb21lIHByb2dyYW1zIHRvIHN0b3Agd29ya2luZy4iCittc2dzdHIgIiIKKyJGaWxlbiAlcyBlciBtYXJrZXJldCBzb20gZW4gc3lzdGVtZmlsLiBEZXR0ZSBiZXR5ZGVyIGF0IGZseXRuaW5nIGFmIGRlbiBrYW4gIgorImJldmlya2UgYXQgbm9nZW4gcHJvZ3JhbW1lciBpa2tlIGzmbmdlcmUgdmlsIHZpcmtlLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC90YWJsZS5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRkFUICVkIG1lZGlhICV4IGRvZXNuJ3QgbWF0Y2ggdGhlIGJvb3Qgc2VjdG9yJ3MgbWVkaWEgJXguICBZb3Ugc2hvdWxkICIKKyJwcm9iYWJseSBydW4gc2NhbmRpc2suIgorbXNnc3RyICIiCisiRkFUICVkIG1lZGllICV4IHBhc3NlciBpa2tlIG1lZCBzdGFydHNla3Rvcm5zIG1lZGllICV4LiBEdSBi+HIgbm9rIGv4cmUgIgorInNjYW5kaXNrLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC90YWJsZS5jOjI2OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmF0X3RhYmxlX3NldDogY2x1c3RlciAlbGQgb3V0c2lkZSBmaWxlIHN5c3RlbSIKK21zZ3N0ciAiZmF0X3RhYmxlX3NldDoga2x5bmdlICVsZCBsaWdnZXIgdWRlbmZvciBmaWxzeXN0ZW1ldCIKKworIzogbGlicGFydGVkL2ZzL2ZhdC90YWJsZS5jOjMwMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmF0X3RhYmxlX2dldDogY2x1c3RlciAlbGQgb3V0c2lkZSBmaWxlIHN5c3RlbSIKK21zZ3N0ciAiZmF0X3RhYmxlX2dldDoga2x5bmdlICVsZCBsaWdnZXIgdWRlbmZvciBmaWxzeXN0ZW1ldCIKKworIzogbGlicGFydGVkL2ZzL2ZhdC90YWJsZS5jOjM0MworbXNnaWQgImZhdF90YWJsZV9hbGxvY19jbHVzdGVyOiBubyBmcmVlIGNsdXN0ZXJzIgorbXNnc3RyICJmYXRfdGFibGVfYWxsb2NfY2x1c3RlcjogaW5nZW4gbGVkaWdlIGtseW5nZXIiCisKKyM6IGxpYnBhcnRlZC9mcy9saW51eF9zd2FwL2xpbnV4X3N3YXAuYzoyNzUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVucmVjb2duaXNlZCBvbGQgc3R5bGUgbGludXggc3dhcCBzaWduYXR1cmUgJyUxMHMnLiIKK21zZ3N0ciAiVWtlbmR0IHNpZ25hdHVyIGZvciBMaW51eCBzd2FwcGxhZHMgXFxcIiUxMHNcXFwiLiIKKworIzogbGlicGFydGVkL2ZzL2xpbnV4X3N3YXAvbGludXhfc3dhcC5jOjMxOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVW5yZWNvZ25pc2VkIG5ldyBzdHlsZSBsaW51eCBzd2FwIHNpZ25hdHVyZSAnJTEwcycuIgorbXNnc3RyICJVa2VuZHQgc2lnbmF0dXIgZm9yIExpbnV4IHN3YXBwbGFkcyBcXFwiJTEwc1xcXCIuIgorCisjOiBsaWJwYXJ0ZWQvZnMvbGludXhfc3dhcC9saW51eF9zd2FwLmM6MzU4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVbnJlY29nbmlzZWQgc3dzdXNwIGxpbnV4IHN3YXAgc2lnbmF0dXJlICclOXMnLiIKK21zZ3N0ciAiVWtlbmR0IHNpZ25hdHVyIGZvciBMaW51eCBzd2FwcGxhZHMgXFxcIiUxMHNcXFwiLiIKKworIzogbGlicGFydGVkL2ZzL2xpbnV4X3N3YXAvbGludXhfc3dhcC5jOjQzNAorbXNnaWQgIlRvbyBtYW55IGJhZCBwYWdlcy4iCittc2dzdHIgIkZvciBtYW5nZSBk5XJsaWdlIHNpZGVyLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9hZHZmcy5jOjEyMSBsaWJwYXJ0ZWQvZnMvaGZzL2FkdmZzX3BsdXMuYzoxMjIKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzo0MTQgbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjUwOAorIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NTM5IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjY1OAorIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NzcyCittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIGNvbnRhaW5zIGVycm9ycy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9hZHZmc19wbHVzLmM6Mjg3Cittc2dpZCAiQmFkIGJsb2NrcyBjb3VsZCBub3QgYmUgcmVhZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9jYWNoZS5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVHJ5aW5nIHRvIHJlZ2lzdGVyIGFuIGV4dGVudCBzdGFydGluZyBhdCBibG9jayAweCVYLCBidXQgYW5vdGhlciBvbmUgYWxyZWFkeSAiCisiZXhpc3RzIGF0IHRoaXMgcG9zaXRpb24uICBZb3Ugc2hvdWxkIGNoZWNrIHRoZSBmaWxlIHN5c3RlbSEiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9jYWNoZS5jOjIxNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVHJ5aW5nIHRvIG1vdmUgYW4gZXh0ZW50IGZyb20gYmxvY2sgT3glWCB0byBibG9jayBPeCVYLCBidXQgYW5vdGhlciBvbmUgIgorImFscmVhZHkgZXhpc3RzIGF0IHRoaXMgcG9zaXRpb24uICBUaGlzIHNob3VsZCBub3QgaGFwcGVuISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGUuYzoxNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHVwZGF0ZSB0aGUgZXh0ZW50IGNhY2hlIGZvciBIRlMgZmlsZSB3aXRoIENOSUQgJVguIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZS5jOjE4MAorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgdG8gcmVhZCBIRlMgZmlsZSB3aXRoIENOSUQgJVggYmVoaW5kIEVPRi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlLmM6MTkwIGxpYnBhcnRlZC9mcy9oZnMvZmlsZS5jOjIyMAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCBzZWN0b3IgJWxsaSBvZiBIRlMgZmlsZSB3aXRoIENOSUQgJVguIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZS5jOjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgdG8gd3JpdGUgSEZTIGZpbGUgd2l0aCBDTklEICVYIGJlaGluZCBFT0YuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZV9wbHVzLmM6MTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB1cGRhdGUgdGhlIGV4dGVudCBjYWNoZSBmb3IgSEZTKyBmaWxlIHdpdGggQ05JRCAlWC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlX3BsdXMuYzoyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIHRvIHJlYWQgSEZTKyBmaWxlIHdpdGggQ05JRCAlWCBiZWhpbmQgRU9GLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGVfcGx1cy5jOjIxMyBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGVfcGx1cy5jOjI1NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCBzZWN0b3IgJWxsaSBvZiBIRlMrIGZpbGUgd2l0aCBDTklEICVYLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGVfcGx1cy5jOjI0NQorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgdG8gd3JpdGUgSEZTKyBmaWxlIHdpdGggQ05JRCAlWCBiZWhpbmQgRU9GLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjIzMgorbXNnaWQgIlNvcnJ5LCBIRlMgY2Fubm90IGJlIHJlc2l6ZWQgdGhhdCB3YXkgeWV0LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjI2MiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjY0MQorbXNnaWQgIkRhdGEgcmVsb2NhdGlvbiBoYXMgZmFpbGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjI4MQorbXNnaWQgIkRhdGEgcmVsb2NhdGlvbiBsZWZ0IHNvbWUgZGF0YSBpbiB0aGUgZW5kIG9mIHRoZSB2b2x1bWUuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MzIwCisjLCBmdXp6eQorbXNnaWQgIndyaXRpbmcgSEZTIE1hc3RlciBEaXJlY3RvcnkgQmxvY2siCittc2dzdHIgIkVuIGZlamwgb3BzdG9kIHZlZCBza3Jpdm5pbmcgdGlsIHJvZGthdGFsb2dldC4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NDY4Cittc2dpZCAiTm8gdmFsaWQgSEZTWytYXSBzaWduYXR1cmUgaGFzIGJlZW4gZm91bmQgd2hpbGUgb3BlbmluZy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo0NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmVyc2lvbiAlZCBvZiBIRlMrIGlzbid0IHN1cHBvcnRlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo0ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmVyc2lvbiAlZCBvZiBIRlNYIGlzbid0IHN1cHBvcnRlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo2NzIKK21zZ2lkICJEYXRhIHJlbG9jYXRpb24gbGVmdCBzb21lIGRhdGEgYXQgdGhlIGVuZCBvZiB0aGUgdm9sdW1lLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjcyMAorIywgZnV6enkKK21zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRoZSBhbGxvY2F0aW9uIGZpbGUuIgorbXNnc3RyICJFbiBmZWpsIG9wc3RvZCB2ZWQgc2tyaXZuaW5nIHRpbCByb2RrYXRhbG9nZXQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjczNQorbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdGhlIGNvbXBhdGliaWxpdHkgcGFydCBvZiB0aGUgYWxsb2NhdGlvbiBmaWxlLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjc1MAorbXNnaWQgIndyaXRpbmcgSEZTKyBWb2x1bWUgSGVhZGVyIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6ODUwCittc2dpZCAiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgbG9va2luZyBmb3IgdGhlIG1hbmRhdG9yeSBiYWQgYmxvY2tzIGZpbGUuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6OTA0Cittc2dpZCAiIgorIkl0IHNlZW1zIHRoZXJlIGlzIGFuIGVycm9yIGluIHRoZSBIRlMgd3JhcHBlcjogdGhlIGJhZCBibG9ja3MgZmlsZSBkb2Vzbid0ICIKKyJjb250YWluIHRoZSBlbWJlZGRlZCBIRlMrIHZvbHVtZS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo5NDAKK21zZ2lkICJTb3JyeSwgSEZTKyBjYW5ub3QgYmUgcmVzaXplZCB0aGF0IHdheSB5ZXQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6OTc1Cittc2dpZCAic2hyaW5raW5nIGVtYmVkZGVkIEhGUysgdm9sdW1lIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6OTkxCittc2dpZCAiUmVzaXppbmcgdGhlIEhGUysgdm9sdW1lIGhhcyBmYWlsZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6OTk4CisjLCBmdXp6eQorbXNnaWQgInNocmlua2luZyBIRlMgd3JhcHBlciIKK21zZ3N0ciAia3J5bXBlciIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzoxMDA3Cittc2dpZCAiVXBkYXRpbmcgdGhlIEhGUyB3cmFwcGVyIGhhcyBmYWlsZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MTEwOSBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjExOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgaXMgbm90IGEgcmVhbCAlcyBjaGVjay4gIFRoaXMgaXMgZ29pbmcgdG8gZXh0cmFjdCBzcGVjaWFsIGxvdyBsZXZlbCAiCisiZmlsZXMgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MTU1Cittc2dpZCAiQmFkIGJsb2NrIGxpc3QgaGVhZGVyIGNoZWNrc3VtLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzoxNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkludmFsaWQgc2l6ZSBvZiBhIHRyYW5zYWN0aW9uIGJsb2NrIHdoaWxlIHJlcGxheWluZyB0aGUgam91cm5hbCAoJWkgYnl0ZXMpLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzoyNjAKK21zZ2lkICIiCisiSm91cm5hbCBzdG9yZWQgb3V0c2lkZSBvZiB0aGUgdm9sdW1lIGFyZSBub3Qgc3VwcG9ydGVkLiAgVHJ5IHRvIGRlc2FjdGl2YXRlICIKKyJ0aGUgam91cm5hbCBhbmQgcnVuIFBhcnRlZCBhZ2Fpbi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MjcxCisjLCBmdXp6eQorbXNnaWQgIkpvdXJuYWwgb2Zmc2V0IG9yIHNpemUgaXMgbm90IG11bHRpcGxlIG9mIHRoZSBzZWN0b3Igc2l6ZS4iCittc2dzdHIgIiIKKyJLbHluZ2Utc3RhcnRmb3Jza2VsIGVyICVkLCBodmlsa2V0IGlra2UgZXIgZW4gbXVsdGlwZWwgYWYga2x5bmdlc3T4cnJlbHNlbiAlZCIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MjkyCittc2dpZCAiSW5jb3JyZWN0IG1hZ2ljIHZhbHVlcyBpbiB0aGUgam91cm5hbCBoZWFkZXIuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjMwMgorbXNnaWQgIkpvdXJuYWwgc2l6ZSBtaXNtYXRjaCBiZXR3ZWVuIGpvdXJuYWwgaW5mbyBibG9jayBhbmQgam91cm5hbCBoZWFkZXIuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjMxNAorIywgZnV6enkKK21zZ2lkICJTb21lIGhlYWRlciBmaWVsZHMgYXJlIG5vdCBtdWx0aXBsZSBvZiB0aGUgc2VjdG9yIHNpemUuIgorbXNnc3RyICIiCisiS2x5bmdlLXN0YXJ0Zm9yc2tlbCBlciAlZCwgaHZpbGtldCBpa2tlIGVyIGVuIG11bHRpcGVsIGFmIGtseW5nZXN0+HJyZWxzZW4gJWQiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjMyMworbXNnaWQgIiIKKyJUaGUgc2VjdG9yIHNpemUgc3RvcmVkIGluIHRoZSBqb3VybmFsIGlzIG5vdCA1MTIgYnl0ZXMuICBQYXJ0ZWQgb25seSAiCisic3VwcG9ydHMgNTEyIGJ5dGVzIGxlbmd0aCBzZWN0b3JzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozMzUKK21zZ2lkICJCYWQgam91cm5hbCBjaGVja3N1bS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MzUzCittc2dpZCAiIgorIlRoZSBqb3VybmFsIGlzIG5vdCBlbXB0eS4gIFBhcnRlZCBtdXN0IHJlcGxheSB0aGUgdHJhbnNhY3Rpb25zIGJlZm9yZSAiCisib3BlbmluZyB0aGUgZmlsZSBzeXN0ZW0uICBUaGlzIHdpbGwgbW9kaWZ5IHRoZSBmaWxlIHN5c3RlbS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MzgxCittc2dpZCAiIgorIlRoZSB2b2x1bWUgaGVhZGVyIG9yIHRoZSBtYXN0ZXIgZGlyZWN0b3J5IGJsb2NrIGhhcyBjaGFuZ2VkIHdoaWxlIHJlcGxheWluZyAiCisidGhlIGpvdXJuYWwuICBZb3Ugc2hvdWxkIHJlc3RhcnQgUGFydGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3Byb2JlLmM6NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBhcnRlZCBjYW4ndCB1c2UgSEZTIGZpbGUgc3lzdGVtcyBvbiBkaXNrcyB3aXRoIGEgc2VjdG9yIHNpemUgbm90IGVxdWFsIHRvICUiCisiZCBieXRlcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjE1MSBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzoxNTUKK21zZ2lkICJBbiBleHRlbnQgaGFzIG5vdCBiZWVuIHJlbG9jYXRlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjI1MSBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzozMDcKK21zZ2lkICIiCisiQSByZWZlcmVuY2UgdG8gYW4gZXh0ZW50IGNvbWVzIGZyb20gYSBwbGFjZSBpdCBzaG91bGQgbm90LiAgWW91IHNob3VsZCBjaGVjayAiCisidGhlIGZpbGUgc3lzdGVtISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6MzgxCittc2dpZCAiVGhpcyBIRlMgdm9sdW1lIGhhcyBubyBjYXRhbG9nIGZpbGUuICBUaGlzIGlzIHZlcnkgdW51c3VhbCEiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjQ3NQorbXNnaWQgIlRoaXMgSEZTIHZvbHVtZSBoYXMgbm8gZXh0ZW50cyBvdmVyZmxvdyBmaWxlLiAgVGhpcyBpcyBxdWl0ZSB1bnVzdWFsISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NTE3IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjY2OAorbXNnaWQgIiIKKyJUaGUgZXh0ZW50cyBvdmVyZmxvdyBmaWxlIHNob3VsZCBub3QgY29udGFpbiBpdHMgb3duIGV4dGVudHMhICBZb3Ugc2hvdWxkICIKKyJjaGVjayB0aGUgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzo1NzQgbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6ODQ3CisjLCBmdXp6eQorbXNnaWQgIkNvdWxkIG5vdCBjYWNoZSB0aGUgZmlsZSBzeXN0ZW0gaW4gbWVtb3J5LiIKK21zZ3N0ciAiS3VubmUgaWtrZSBmaW5kZSBub2dldCBmaWxzeXN0ZW0uIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NjM1IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjkwOAorbXNnaWQgIkJhZCBibG9ja3MgbGlzdCBjb3VsZCBub3QgYmUgbG9hZGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NjQ5IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjkyNAorbXNnaWQgIkFuIGVycm9yIG9jY3VycmVkIGR1cmluZyBleHRlbnQgcmVsb2NhdGlvbi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NDk1Cittc2dpZCAiVGhpcyBIRlMrIHZvbHVtZSBoYXMgbm8gY2F0YWxvZyBmaWxlLiAgVGhpcyBpcyB2ZXJ5IHVudXN1YWwhIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjYxOQorbXNnaWQgIlRoaXMgSEZTKyB2b2x1bWUgaGFzIG5vIGV4dGVudHMgb3ZlcmZsb3cgZmlsZS4gIFRoaXMgaXMgcXVpdGUgdW51c3VhbCEiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjk0Cittc2dpZCAiZGlzcGxheXMgdGhpcyBoZWxwIG1lc3NhZ2UiCittc2dzdHIgInZpc2VyIGRlbm5lIGhq5mxwZXRla3N0IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6OTUKK21zZ2lkICJsaXN0cyBwYXJ0aXRpb24gbGF5b3V0IG9uIGFsbCBibG9jayBkZXZpY2VzIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo5NgorbXNnaWQgImRpc3BsYXlzIG1hY2hpbmUgcGFyc2VhYmxlIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6OTcKK21zZ2lkICJuZXZlciBwcm9tcHRzIGZvciB1c2VyIGludGVydmVudGlvbiIKK21zZ3N0ciAic3D4cmdlciBhbGRyaWcgYnJ1Z2VyZW4gb20gYWx0ZXJuYXRpdmVyIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6OTgKK21zZ2lkICJkaXNwbGF5cyB0aGUgdmVyc2lvbiIKK21zZ3N0ciAidmlzZXIgdmVyc2lvbmVuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTExCisjLCBmdXp6eQorbXNnaWQgIiIKKyJOVU1CRVIgaXMgdGhlIHBhcnRpdGlvbiBudW1iZXIgdXNlZCBieSBMaW51eC4gIE9uIE1TLURPUyBkaXNrIGxhYmVscywgdGhlICIKKyJwcmltYXJ5IHBhcnRpdGlvbnMgbnVtYmVyIGZyb20gMSB0byA0LCBsb2dpY2FsIHBhcnRpdGlvbnMgZnJvbSA1IG9ud2FyZHMuXG4iCittc2dzdHIgIiIKKyJMSUxMRSBlciBwYXJ0aXRpb25zbnVtcmV0IHNvbSBMaW51eCBicnVnZXIuIFDlIGZpbHN5c3RlbWVyIGFmIHR5cGUgTVNET1MgZXIgIgorImRlIHByaW3mcmUgcGFydGl0aW9uZXIgbnVtcmVyZWRlIGZyYSAxIHRpbCA0LCBvZyBkZSBsb2dpc2tlIHBhcnRpdGlvbmVyIGZyYSAiCisiNSBvZyBvcGFkLlxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTE0Cittc2dpZCAiTEFCRUwtVFlQRSBpcyBvbmUgb2Y6ICIKK21zZ3N0ciAiTEFCRUwtVFlQRSBlciBlbiBhZjoiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMTUKK21zZ2lkICJGTEFHIGlzIG9uZSBvZjogIgorbXNnc3RyICJGTEFHIGVyIGV0IGFmOiAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMTYKKyMsIGZ1enp5Cittc2dpZCAiVU5JVCBpcyBvbmUgb2Y6ICIKK21zZ3N0ciAiRkxBRyBlciBldCBhZjogIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTE3Cittc2dpZCAiUEFSVC1UWVBFIGlzIG9uZSBvZjogcHJpbWFyeSwgbG9naWNhbCwgZXh0ZW5kZWRcbiIKK21zZ3N0ciAiUEFSVC1UWVBFIGVyIGVuIGFmOiBwcmlt5nIsIGxvZ2lzaywgdWR2aWRldFxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTE5Cittc2dpZCAiRlMtVFlQRSBpcyBvbmUgb2Y6ICIKK21zZ3N0ciAiRlMtVFlQRSBlciBlbiBhZjogIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIwCittc2dpZCAiIgorIlNUQVJUIGFuZCBFTkQgYXJlIGRpc2sgbG9jYXRpb25zLCBzdWNoIGFzIDRHQiBvciAxMCUuICBOZWdhdGl2ZSB2YWx1ZXMgY291bnQgIgorImZyb20gdGhlIGVuZCBvZiB0aGUgZGlzay4gIEZvciBleGFtcGxlLCAtMXMgc3BlY2lmaWVzIGV4YWN0bHkgdGhlIGxhc3QgIgorInNlY3Rvci5cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIzCittc2dpZCAiU1RBVEUgaXMgb25lIG9mOiBvbiwgb2ZmXG4iCittc2dzdHIgIlRJTFNUQU5EIGVyIGVuIGFmOiBw5SwgYWZcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyNAorbXNnaWQgIkRFVklDRSBpcyB1c3VhbGx5IC9kZXYvaGRhIG9yIC9kZXYvc2RhXG4iCittc2dzdHIgIkVOSEVEIGVyIG5vcm1hbHQgL2Rldi9oZGEgZWxsZXIgL2Rldi9zZGFcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyNQorbXNnaWQgIk5BTUUgaXMgYW55IHdvcmQgeW91IHdhbnRcbiIKK21zZ3N0ciAiTkFWTiBlciBldCB2aWxr5XJsaWd0IG9yZFxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTI2Cittc2dpZCAiVGhlIHBhcnRpdGlvbiBtdXN0IGhhdmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgRlMtVFlQRXM6ICIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTMwCisjLCBmdXp6eQorbXNnaWQgIiIKKyJDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLlxuIgorIlRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlLCBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS5cbiIKKyJcbiIKKyJUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiIKKyJidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuIgorIk1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbiIKKyJHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuIgorIlxuIgorbXNnc3RyICIiCisiT3BoYXZzcmV0IKkgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy5cbiIKKyJEZXR0ZSBwcm9ncmFtIGVyIGZyaXQgcHJvZ3JhbW1lbCwgZOZra2V0IGFmIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLlxuIgorIlxuIgorIkRldHRlIHByb2dyYW0gZGlzdHJpYnVlcmVzIGkgaOViIG9tIGF0IGRldCB2aWwgduZyZSBueXR0aWd0LCBtZW5cbiIKKyJVREVOIE5PR0VOIFNPTSBIRUxTVCBHQVJBTlRJLCBlbmRvZyB1ZGVuIHVuZGVyZm9yc3TlZXQgZ2FyYW50aSBvbVxuIgorIlNBTEdCQVJIRUQgZWxsZXIgRUdORVRIRUQgRk9SIE5PR0VUIFNQRUNJRUxUIEZPUk3FTC4gU2UgR05VIEdlbmVyYWxcbiIKKyJQdWJsaWMgTGljZW5zZSBmb3IgeWRlcmxpZ2VyZSBpbmZvcm1hdGlvbi5cbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjE3NgorIywgYy1mb3JtYXQKK21zZ2lkICIlMC5mJSVcdCh0aW1lIGxlZnQgJS4yZDolLjJkKSIKK21zZ3N0ciAiJTAuZiUlXHQodGlkIHRpbGJhZ2UgJS4yZDolLjJkKSIKKworIzogcGFydGVkL3BhcnRlZC5jOjE5NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGFydGl0aW9uICVzIGlzIGJlaW5nIHVzZWQuIFlvdSBtdXN0IHVubW91bnQgaXQgYmVmb3JlIHlvdSBtb2RpZnkgaXQgd2l0aCAiCisiUGFydGVkLiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjExCisjLCBjLWZvcm1hdAorbXNnaWQgIlBhcnRpdGlvbihzKSBvbiAlcyBhcmUgYmVpbmcgdXNlZC4iCittc2dzdHIgIlBhcnRpdGlvbmVuIHDlICVzIGVyIGkgYnJ1Zy4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjMKK21zZ2lkICIiCisiVGhlIGV4aXN0aW5nIGZpbGUgc3lzdGVtIHdpbGwgYmUgZGVzdHJveWVkIGFuZCBhbGwgZGF0YSBvbiB0aGUgcGFydGl0aW9uICIKKyJ3aWxsIGJlIGxvc3QuIERvIHlvdSB3YW50IHRvIGNvbnRpbnVlPyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZXhpc3RpbmcgZGlzayBsYWJlbCBvbiAlcyB3aWxsIGJlIGRlc3Ryb3llZCBhbmQgYWxsIGRhdGEgb24gdGhpcyBkaXNrICIKKyJ3aWxsIGJlIGxvc3QuIERvIHlvdSB3YW50IHRvIGNvbnRpbnVlPyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NDU4IHBhcnRlZC9wYXJ0ZWQuYzo2NTIgcGFydGVkL3BhcnRlZC5jOjEwNDQKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMTI4IHBhcnRlZC9wYXJ0ZWQuYzoxNzcxIHBhcnRlZC9wYXJ0ZWQuYzoxODUyCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTkwMAorbXNnaWQgIlBhcnRpdGlvbiBudW1iZXI/IgorbXNnc3RyICJOdW1tZXIgcOUgcGFydGl0aW9uZW4/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NTAwCittc2dpZCAiU291cmNlIGRldmljZT8iCittc2dzdHIgIktpbGRlZW5oZWQ/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NTA0Cittc2dpZCAiU291cmNlIHBhcnRpdGlvbiBudW1iZXI/IgorbXNnc3RyICJOdW1tZXIgcOUga2lsZGVwYXJ0aXRpb25lbj8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo1MDkKKyMsIGZ1enp5Cittc2dpZCAiQ2FuJ3QgY29weSBhbiBleHRlbmRlZCBwYXJ0aXRpb24uIgorbXNnc3RyICJLYW4gaWtrZSBrb3BpZXJlIHVkdmlkZWRlIHBhcnRpdGlvbmVyLiIKKworIzogcGFydGVkL3BhcnRlZC5jOjUxNQorbXNnaWQgIkRlc3RpbmF0aW9uIHBhcnRpdGlvbiBudW1iZXI/IgorbXNnc3RyICJOdW1tZXIgcOUgbeVscGFydGl0aW9uZW4/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NjE1Cittc2dpZCAiTmV3IGRpc2sgbGFiZWwgdHlwZT8iCittc2dzdHIgIlR5cGUgcOUgbnkgZGlza2V0aWtldHRlPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjY1NgorbXNnaWQgIkZpbGUgc3lzdGVtPyIKK21zZ3N0ciAiRmlsc3lzdGVtPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjcwNyBwYXJ0ZWQvcGFydGVkLmM6ODc4Cittc2dpZCAiUGFydGl0aW9uIHR5cGU/IgorbXNnc3RyICJUeXBlIHDlIHBhcnRpdGlvbmVuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NzE0IHBhcnRlZC9wYXJ0ZWQuYzo4ODUgcGFydGVkL3BhcnRlZC5jOjExMzEKK21zZ2lkICJQYXJ0aXRpb24gbmFtZT8iCittc2dzdHIgIk5hdm4gcOUgcGFydGl0aW9uZW4/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NzIyIHBhcnRlZC9wYXJ0ZWQuYzo4OTUKK21zZ2lkICJGaWxlIHN5c3RlbSB0eXBlPyIKK21zZ3N0ciAiVHlwZSBw5SBmaWxzeXN0ZW1ldD8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo3MjkgcGFydGVkL3BhcnRlZC5jOjg5NyBwYXJ0ZWQvcGFydGVkLmM6MTA1OQorIzogcGFydGVkL3BhcnRlZC5jOjE3MjUgcGFydGVkL3BhcnRlZC5jOjE3ODAKK21zZ2lkICJTdGFydD8iCittc2dzdHIgIlN0YXJ0PyIKKworIzogcGFydGVkL3BhcnRlZC5jOjczMSBwYXJ0ZWQvcGFydGVkLmM6OTAwIHBhcnRlZC9wYXJ0ZWQuYzoxMDYyCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTcyNyBwYXJ0ZWQvcGFydGVkLmM6MTc4MgorbXNnaWQgIkVuZD8iCittc2dzdHIgIlNsdXQ/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NzY5IHBhcnRlZC9wYXJ0ZWQuYzo5MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSByZXF1ZXN0ZWQgYSBwYXJ0aXRpb24gZnJvbSAlcyB0byAlcy5cbiIKKyJUaGUgY2xvc2VzdCBsb2NhdGlvbiB3ZSBjYW4gbWFuYWdlIGlzICVzIHRvICVzLiAgSXMgdGhpcyBzdGlsbCBhY2NlcHRhYmxlIHRvICIKKyJ5b3U/IgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo4OTAKKyMsIGZ1enp5Cittc2dpZCAiQW4gZXh0ZW5kZWQgcGFydGl0aW9uIGNhbm5vdCBob2xkIGEgZmlsZSBzeXN0ZW0uICBEaWQgeW91IHdhbnQgbWtwYXJ0PyIKK21zZ3N0ciAiVWR2aWRlZGUgcGFydGl0aW9uZXIga2FuIGlra2UgaGF2ZSBmaWxzeXN0ZW1lci4g2G5za2VkZSBkdSBta3BhcnQ/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTA1MAorIywgZnV6enkKK21zZ2lkICJDYW4ndCBtb3ZlIGFuIGV4dGVuZGVkIHBhcnRpdGlvbi4iCittc2dzdHIgIkthbiBpa2tlIGZseXR0ZSB1ZHZpZGVkZSBwYXJ0aXRpb25lci4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMDc5Cittc2dpZCAiQ2FuJ3QgbW92ZSBhIHBhcnRpdGlvbiBvbnRvIGl0c2VsZi4gIFRyeSB1c2luZyByZXNpemUsIHBlcmhhcHM/IgorbXNnc3RyICIiCisiS2FuIGlra2UgZmx5dHRlIGVuIHBhcnRpdGlvbiB0aWwgc2lnIHNlbHYuIFBy+HYgYXQg5m5kcmUgc3T4cnJlbHNlbiBpIHN0ZWRldCIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlub3I6ICVkXG4iCittc2dzdHIgIkxpbGxlOiAlZFxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIyOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRmxhZ3M6ICVzXG4iCittc2dzdHIgIkZsYWc6ICIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlsZSBTeXN0ZW06ICVzXG4iCittc2dzdHIgIkZpbHN5c3RlbTogJXNcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMzAKKyMsIGZ1enp5Cittc2dpZCAiU2l6ZTogICAgICAgICAiCittc2dzdHIgIlN0+HJyZWxzZTogICAgICAgICAlMTAuM2ZNYiAoJWQlJSlcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMzUKKyMsIGZ1enp5Cittc2dpZCAiTWluaW11bSBzaXplOiAiCittc2dzdHIgIk1pbmRzdGUgc3T4cnJlbHNlOiAlMTAuM2ZNYiAoJWQlJSlcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMzgKKyMsIGZ1enp5Cittc2dpZCAiTWF4aW11bSBzaXplOiAiCittc2dzdHIgIlN0+HJzdGUgc3T4cnJlbHNlOiAlMTAuM2ZNYiAoJWQlJSlcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEzNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTW9kZWw6ICVzICglcylcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTM2NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRGlzayAlczogJXNcbiIKK21zZ3N0ciAiJXMgICVzICAlcyIKKworIzogcGFydGVkL3BhcnRlZC5jOjEzNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VjdG9yIHNpemUgKGxvZ2ljYWwvcGh5c2ljYWwpOiAlbGxkQi8lbGxkQlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMzgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkJJT1MgY3lsaW5kZXIsaGVhZCxzZWN0b3IgZ2VvbWV0cnk6ICVkLCVkLCVkLiAgRWFjaCBjeWxpbmRlciBpcyAlcy5cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTM5MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiUGFydGl0aW9uIFRhYmxlOiAlc1xuIgorbXNnc3RyICJOYXZuIHDlIHBhcnRpdGlvbmVuPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MDYgcGFydGVkL3BhcnRlZC5jOjE0MDkKK21zZ2lkICJOdW1iZXIiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MDYgcGFydGVkL3BhcnRlZC5jOjE0MDkKKyMsIGZ1enp5Cittc2dpZCAiU3RhcnQiCittc2dzdHIgIlN0YXJ0PyIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MDcgcGFydGVkL3BhcnRlZC5jOjE0MTAKKyMsIGZ1enp5Cittc2dpZCAiRW5kIgorbXNnc3RyICJTbHV0PyIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MTAKKyMsIGZ1enp5Cittc2dpZCAiU2l6ZSIKK21zZ3N0ciAi5m5kcl9zdPhycmVsc2UiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDE0Cittc2dpZCAiVHlwZSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQxNgorIywgZnV6enkKK21zZ2lkICJGaWxlIHN5c3RlbSIKK21zZ3N0ciAiRmlsc3lzdGVtPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MTkKKyMsIGZ1enp5Cittc2dpZCAiTmFtZSIKK21zZ3N0ciAibmFtZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MjEKK21zZ2lkICJGbGFncyIKK21zZ3N0ciAiRmxhZyIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0NzcKK21zZ2lkICJGcmVlIFNwYWNlIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNjI0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiQSAlcyAlcyBwYXJ0aXRpb24gd2FzIGZvdW5kIGF0ICVzIC0+ICVzLiAgRG8geW91IHdhbnQgdG8gYWRkIGl0IHRvIHRoZSAiCisicGFydGl0aW9uIHRhYmxlPyIKK21zZ3N0ciAiIgorIkVuICVzICVzIHBhcnRpdGlvbiBibGV2IGZ1bmRldCBw5SAlLjNmTWIgLT4gJS4zZk1iLiAg2G5za2VyIGR1IGF0IHRpbGb4amUgIgorImRlbiB0aWwgcGFydGl0aW9uc3RhYmVsbGVuPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjE2NjMKK21zZ2lkICJzZWFyY2hpbmcgZm9yIGZpbGUgc3lzdGVtcyIKK21zZ3N0ciAibGVkZXIgZWZ0ZXIgZmlsc3lzdGVtZXIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxODc3Cittc2dpZCAiTmV3IGRldmljZT8iCittc2dzdHIgIk55IGVuaGVkPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjE5MDIKKyMsIGZ1enp5Cittc2dpZCAiRmxhZyB0byBJbnZlcnQ/IgorbXNnc3RyICJGbGFnIGRlciBza2FsIOZuZHJlcz8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxOTA3Cittc2dpZCAiTmV3IHN0YXRlPyIKK21zZ3N0ciAiTnkgdGlsc3RhbmQ/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTk0NAorbXNnaWQgIlVuaXQ/IgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMDkzCittc2dpZCAiY2hlY2siCittc2dzdHIgInRqZWsiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMDk2CisjLCBmdXp6eQorbXNnaWQgIiIKKyJjaGVjayBOVU1CRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIGEgc2ltcGxlIGNoZWNrIG9uIHRoZSBmaWxlIHN5c3RlbSIKK21zZ3N0ciAidGplayBMSUxMRSAgICAgICAgICAgICAgICAgICAgbGF2IGVuIHNpbXBlbCB0ZXN0IGFmIGZpbHN5c3RlbWV0IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEwMgorbXNnaWQgImNwIgorbXNnc3RyICJjcCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMDUKKyMsIGZ1enp5Cittc2dpZCAiIgorImNwIFtGUk9NLURFVklDRV0gRlJPTS1OVU1CRVIgVE8tTlVNQkVSICAgY29weSBmaWxlIHN5c3RlbSB0byBhbm90aGVyICIKKyJwYXJ0aXRpb24iCittc2dzdHIgIiIKKyJjcCBbRlJBIEVOSEVEXSBGUkEtTElMTEUgVElMLUxJTExFICAgICBrb3Bp6XIgZXQgZmlsc3lzdGVtIHRpbCBldCBhbmRldCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMTEKK21zZ2lkICJoZWxwIgorbXNnc3RyICJoauZscCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMTQKKyMsIGZ1enp5Cittc2dpZCAiIgorImhlbHAgW0NPTU1BTkRdICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgZ2VuZXJhbCBoZWxwLCBvciBoZWxwIG9uICIKKyJDT01NQU5EIgorbXNnc3RyICIiCisiaGrmbHAgW0tPTU1BTkRPXSAgICAgICAgICAgICB1ZHNrcml2ZXIgZ2VuZXJlbCBoauZscCwgZWxsZXIgc3BlY2llbCBoauZscCAiCisiZm9yIEtPTU1BTkRPIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEyMAorbXNnaWQgIm1rbGFiZWwiCittc2dzdHIgIm1rbGFiZWwiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTIwCisjLCBmdXp6eQorbXNnaWQgIm1rdGFibGUiCittc2dzdHIgIm1rbGFiZWwiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTIzCisjLCBmdXp6eQorbXNnaWQgIiIKKyJta2xhYmVsLG1rdGFibGUgTEFCRUwtVFlQRSAgICAgICAgICAgICAgIGNyZWF0ZSBhIG5ldyBkaXNrbGFiZWwgKHBhcnRpdGlvbiAiCisidGFibGUpIgorbXNnc3RyICJta2xhYmVsIFBBUlQtVFlQRSAgbGF2IGVuIG55IHBhcnRpdGlvbnN0YWJlbCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMjkKK21zZ2lkICJta2ZzIgorbXNnc3RyICJta2ZzIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEzMgorIywgZnV6enkKK21zZ2lkICIiCisibWtmcyBOVU1CRVIgRlMtVFlQRSAgICAgICAgICAgICAgICAgICAgICBtYWtlIGEgRlMtVFlQRSBmaWxlIHN5c3RlbSBvbiAiCisicGFydGl0aXRvbiBOVU1CRVIiCittc2dzdHIgIiIKKyJta2ZzIExJTExFIEZTLVRZUEUgICAgICAgbGF2IGV0IGZpbHN5c3RlbSBhZiB0eXBlbiBUWVBFIHDlIHBhcnRpdGlvbiBMSUxMRSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMzgKK21zZ2lkICJta3BhcnQiCittc2dzdHIgIm1rcGFydCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNDEKKyMsIGZ1enp5Cittc2dpZCAibWtwYXJ0IFBBUlQtVFlQRSBbRlMtVFlQRV0gU1RBUlQgRU5EICAgICBtYWtlIGEgcGFydGl0aW9uIgorbXNnc3RyICJta3BhcnQgUEFSVElUSU9OU1RZUEUgW0ZTLVRZUEVdIFNUQVJUIFNMVVQgICAgbGF2IGVuIHBhcnRpdGlvbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNDcKKyMsIGZ1enp5Cittc2dpZCAiIgorIidta3BhcnQnIG1ha2VzIGEgcGFydGl0aW9uIHdpdGhvdXQgY3JlYXRpbmcgYSBuZXcgZmlsZSBzeXN0ZW0gb24gdGhlICIKKyJwYXJ0aXRpb24uICBGUy1UWVBFIG1heSBiZSBzcGVjaWZpZWQgdG8gc2V0IGFuIGFwcHJvcHJpYXRlIHBhcnRpdGlvbiBJRC5cbiIKK21zZ3N0ciAiIgorIm1rcGFydCBsYXZlciBlbiBwYXJ0aXRpb24gdWRlbiBhdCBvcHJldHRlIGV0IG55dCBmaWxzeXN0ZW0gcOUgcGFydGl0aW9uZW4uICIKKyJGUy1UWVBFIGthbiBhbmdpdmVzIGZvciBhdCBz5nR0ZSBlbiBwYXNzZW5kZSBpZGVudGl0ZXQgcOUgcGFydGl0aW9uZW4uXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTUyCittc2dpZCAibWtwYXJ0ZnMiCittc2dzdHIgIm1rcGFydGZzIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE1NQorIywgZnV6enkKK21zZ2lkICIiCisibWtwYXJ0ZnMgUEFSVC1UWVBFIEZTLVRZUEUgU1RBUlQgRU5EICAgICBtYWtlIGEgcGFydGl0aW9uIHdpdGggYSBmaWxlIHN5c3RlbSIKK21zZ3N0ciAiIgorIm1rcGFydGZzIFBBUlRJVElPTlNUWVBFIEZJTFNZU1RFTVNUWVBFIFNUQVJUIFNMVVQgICBsYXYgZW4gcGFydGl0aW9uIG1lZCBldCAiCisiZmlsc3lzdGVtIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE2MQorbXNnaWQgIm1vdmUiCittc2dzdHIgIm1vdmUiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTY0CisjLCBmdXp6eQorbXNnaWQgIm1vdmUgTlVNQkVSIFNUQVJUIEVORCAgICAgICAgICAgICAgICAgICAgbW92ZSBwYXJ0aXRpb24gTlVNQkVSIgorbXNnc3RyICJtb3ZlIExJTExFIFNUQVJUIFNMVVQgICAgICAgICBmbHl0IHBhcnRpdGlvbiBMSUxMRSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNjkKK21zZ2lkICJuYW1lIgorbXNnc3RyICJuYW1lIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE3MgorIywgZnV6enkKK21zZ2lkICJuYW1lIE5VTUJFUiBOQU1FICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgcGFydGl0aW9uIE5VTUJFUiBhcyBOQU1FIgorbXNnc3RyICJuYW1lIExJTExFIE5BVk4gICAgICAgICAgICAgICAgbmF2bmdpdiBwYXJ0aXRpb24gTElMTEUgTkFWTiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNzcKK21zZ2lkICJwcmludCIKK21zZ3N0ciAic2tyaXYiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTgwCittc2dpZCAiIgorInByaW50IFtkZXZpY2VzfGZyZWV8bGlzdCxhbGx8TlVNQkVSXSAgICAgZGlzcGxheSB0aGUgcGFydGl0aW9uIHRhYmxlLCAiCisiYXZhaWxhYmxlIGRldmljZXMsIGZyZWUgc3BhY2UsIGFsbCBmb3VuZCBwYXJ0aXRpb25zLCBvciBhIHBhcnRpY3VsYXIgIgorInBhcnRpdGlvbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE4NQorbXNnaWQgIiIKKyJXaXRob3V0IGFyZ3VtZW50cywgJ3ByaW50JyBkaXNwbGF5cyB0aGUgZW50aXJlIHBhcnRpdGlvbiB0YWJsZS4gSG93ZXZlciB3aXRoICIKKyJ0aGUgZm9sbG93aW5nIGFyZ3VtZW50cyBpdCBwZXJmb3JtcyB2YXJpb3VzIG90aGVyIGFjdGlvbnMuXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxODcKK21zZ2lkICIgIGRldmljZXMgICA6IGRpc3BsYXkgYWxsIGFjdGl2ZSBibG9jayBkZXZpY2VzXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxODgKK21zZ2lkICIiCisiICBmcmVlICAgICAgOiBkaXNwbGF5IGluZm9ybWF0aW9uIGFib3V0IGZyZWUgdW5wYXJ0aXRpb25lZCBzcGFjZSBvbiB0aGUgIgorImN1cnJlbnQgYmxvY2sgZGV2aWNlXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxOTAKKyMsIGZ1enp5Cittc2dpZCAiIgorIiAgbGlzdCwgYWxsIDogZGlzcGxheSB0aGUgcGFydGl0aW9uIHRhYmxlcyBvZiBhbGwgYWN0aXZlIGJsb2NrIGRldmljZXNcbiIKK21zZ3N0ciAiIgorInNrcml2IFtMSUxMRV0gICAgICAgICAgICAgICAgICAgdmlzIHBhcnRpdGlvbnN0YWJlbGxlbiwgZWxsZXIgZW4gcGFydGl0aW9uIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE5MQorbXNnaWQgIiIKKyIgIE5VTUJFUiAgICA6IGRpc3BsYXkgbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIHBhcnRpY3VsYXIgIgorInBhcnRpdGlvblxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTk2Cittc2dpZCAicXVpdCIKK21zZ3N0ciAiYWZzbHV0IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE5OQorIywgZnV6enkKK21zZ2lkICJxdWl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQgcHJvZ3JhbSIKK21zZ3N0ciAiYWZzbHV0ICAgICAgICAgICAgICAgICAgICAgICAgYWZzbHV0IHByb2dyYW1tZXQiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjA0Cittc2dpZCAicmVzY3VlIgorbXNnc3RyICJyZWQiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjA3CisjLCBmdXp6eQorbXNnaWQgIiIKKyJyZXNjdWUgU1RBUlQgRU5EICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2N1ZSBhIGxvc3QgcGFydGl0aW9uIG5lYXIgU1RBUlQgIgorImFuZCBFTkQiCittc2dzdHIgIiIKKyJyZWQgU1RBUlQgU0xVVCAgICAgICAgICAgICAgICByZWQgdGFidGUgcGFydGl0aW9uZXIgbuZyIHZlZCBTVEFSVCBvZyBTTFVUIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIxMworbXNnaWQgInJlc2l6ZSIKK21zZ3N0ciAi5m5kcl9zdPhycmVsc2UiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjE2CisjLCBmdXp6eQorbXNnaWQgIiIKKyJyZXNpemUgTlVNQkVSIFNUQVJUIEVORCAgICAgICAgICAgICAgICAgIHJlc2l6ZSBwYXJ0aXRpb24gTlVNQkVSIGFuZCBpdHMgIgorImZpbGUgc3lzdGVtIgorbXNnc3RyICIiCisicmVkIFNUQVJUIFNMVVQgICAgICAgICAgICAgICAgcmVkIHRhYnRlIHBhcnRpdGlvbmVyIG7mciB2ZWQgU1RBUlQgb2cgU0xVVCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMjQKK21zZ2lkICJybSIKK21zZ3N0ciAicm0iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjI3CisjLCBmdXp6eQorbXNnaWQgInJtIE5VTUJFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHBhcnRpdGlvbiBOVU1CRVIiCittc2dzdHIgInJtIExJTExFICAgICAgICAgICAgICAgICAgICAgIHNsZXQgcGFydGl0aW9uIExJTExFIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIzMgorbXNnaWQgInNlbGVjdCIKK21zZ3N0ciAiduZsZyIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMzUKKyMsIGZ1enp5Cittc2dpZCAic2VsZWN0IERFVklDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9vc2UgdGhlIGRldmljZSB0byBlZGl0IgorbXNnc3RyICJ25mxnIEVOSEVEICAgICAgICAgICAgICAgICAgICB25mxnIGVuaGVkIGF0IHJlZGlnZXJlIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI0MAorbXNnaWQgInNldCIKK21zZ3N0ciAic+Z0IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI0MworIywgZnV6enkKK21zZ2lkICIiCisic2V0IE5VTUJFUiBGTEFHIFNUQVRFICAgICAgICAgICAgICAgICAgICBjaGFuZ2UgdGhlIEZMQUcgb24gcGFydGl0aW9uIE5VTUJFUiIKK21zZ3N0ciAic+Z0IExJTExFIEZMQUcgVElMU1RBTkQgICAgICAgIOZuZHIgZXQgZmxhZyBw5SBwYXJ0aXRpb24gTElMTEUiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjQ5Cittc2dpZCAidG9nZ2xlIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjUyCittc2dpZCAiIgorInRvZ2dsZSBbTlVNQkVSIFtGTEFHXV0gICAgICAgICAgICAgICAgICAgdG9nZ2xlIHRoZSBzdGF0ZSBvZiBGTEFHIG9uICIKKyJwYXJ0aXRpb24gTlVNQkVSIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjU4CisjLCBmdXp6eQorbXNnaWQgInVuaXQiCittc2dzdHIgImFmc2x1dCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNjEKKyMsIGZ1enp5Cittc2dpZCAidW5pdCBVTklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgdGhlIGRlZmF1bHQgdW5pdCB0byBVTklUIgorbXNnc3RyICJhZnNsdXQgICAgICAgICAgICAgICAgICAgICAgICBhZnNsdXQgcHJvZ3JhbW1ldCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNjYKK21zZ2lkICJ2ZXJzaW9uIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjY5Cittc2dpZCAiIgorInZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheSB0aGUgdmVyc2lvbiBudW1iZXIgYW5kICIKKyJjb3B5cmlnaHQgaW5mb3JtYXRpb24gb2YgR05VIFBhcnRlZCIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI3MworbXNnaWQgIiIKKyIndmVyc2lvbicgZGlzcGxheXMgY29weXJpZ2h0IGFuZCB2ZXJzaW9uIGluZm9ybWF0aW9uIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyAiCisiY29weSBvZiBHTlUgUGFydGVkXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIzMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstaGxtc3ZdIFtERVZJQ0UgW0NPTU1BTkQgW1BBUkFNRVRFUlNdXS4uLl1cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjM3OQorbXNnaWQgIk5vIGRldmljZSBmb3VuZCIKK21zZ3N0ciAiSW5nZW4gZW5oZWQgZnVuZGV0IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjQxMgorbXNnaWQgIldBUk5JTkc6IFlvdSBhcmUgbm90IHN1cGVydXNlci4gIFdhdGNoIG91dCBmb3IgcGVybWlzc2lvbnMuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyNDUwCisjLCBmdXp6eQorbXNnaWQgIllvdSBtYXkgbmVlZCB0byB1cGRhdGUgL2V0Yy9mc3RhYi5cbiIKK21zZ3N0ciAiR2xlbSBpa2tlIGF0IG9wZGF0ZXJlIC9ldGMvZnN0YWIsIG9tIG74ZHZlbmRpZ3QuXG4iCisKKyM6IHBhcnRlZC91aS5jOjE2MAorbXNnaWQgIldlbGNvbWUgdG8gR05VIFBhcnRlZCEgVHlwZSAnaGVscCcgdG8gdmlldyBhIGxpc3Qgb2YgY29tbWFuZHMuXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6MTYzCisjLCBmdXp6eQorbXNnaWQgIiIKKyJVc2FnZTogcGFydGVkIFtPUFRJT05dLi4uIFtERVZJQ0UgW0NPTU1BTkQgW1BBUkFNRVRFUlNdLi4uXS4uLl1cbiIKKyJBcHBseSBDT01NQU5EcyB3aXRoIFBBUkFNRVRFUlMgdG8gREVWSUNFLiAgSWYgbm8gQ09NTUFORChzKSBhcmUgZ2l2ZW4sIHJ1biAiCisiaW5cbiIKKyJpbnRlcmFjdGl2ZSBtb2RlLlxuIgorbXNnc3RyICIiCisiQnJ1ZzogcGFydGVkIFtGTEFHXS4uLiBbRU5IRUQgW0tPTU1BTkRPIFtQQVJBTUVUUkVdLi4uXS4uLl1cbiIKKyJL+HIgS09NTUFORE8gbWVkIFBBUkFNRVRSRSBw5SBFTkhFRC4gSHZpcyBpbmdlbiBLT01NQU5ET0VSIGFuZ2l2ZXMga/hyZXNcbiIKKyJwcm9ncmFtbWV0IGkgaW50ZXJha3RpdiB0aWxzdGFuZC5cbiIKKworIzogcGFydGVkL3VpLmM6MTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJcbiIKKyJZb3UgZm91bmQgYSBidWcgaW4gR05VIFBhcnRlZCEgSGVyZSdzIHdoYXQgeW91IGhhdmUgdG8gZG86XG4iCisiXG4iCisiRG9uJ3QgcGFuaWMhIFRoZSBidWcgaGFzIG1vc3QgbGlrZWx5IG5vdCBhZmZlY3RlZCBhbnkgb2YgeW91ciBkYXRhLlxuIgorIkhlbHAgdXMgdG8gZml4IHRoaXMgYnVnIGJ5IGRvaW5nIHRoZSBmb2xsb3dpbmc6XG4iCisiXG4iCisiQ2hlY2sgd2hldGhlciB0aGUgYnVnIGhhcyBhbHJlYWR5IGJlZW4gZml4ZWQgYnkgY2hlY2tpbmdcbiIKKyJ0aGUgbGFzdCB2ZXJzaW9uIG9mIEdOVSBQYXJ0ZWQgdGhhdCB5b3UgY2FuIGZpbmQgYXQ6XG4iCisiXG4iCisiXHRodHRwOi8vZnRwLmdudS5vcmcvZ251L3BhcnRlZC9cbiIKKyJcbiIKKyJQbGVhc2UgY2hlY2sgdGhpcyB2ZXJzaW9uIHByaW9yIHRvIGJ1ZyByZXBvcnRpbmcuXG4iCisiXG4iCisiSWYgdGhpcyBoYXMgbm90IGJlZW4gZml4ZWQgeWV0IG9yIGlmIHlvdSBkb24ndCBrbm93IGhvdyB0byBjaGVjayxcbiIKKyJwbGVhc2UgdmlzaXQgdGhlIEdOVSBQYXJ0ZWQgd2Vic2l0ZTpcbiIKKyJcbiIKKyJcdGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9wYXJ0ZWRcbiIKKyJcbiIKKyJmb3IgZnVydGhlciBpbmZvcm1hdGlvbi5cbiIKKyJcbiIKKyJZb3VyIHJlcG9ydCBzaG91bGQgY29udGFpbiB0aGUgdmVyc2lvbiBvZiB0aGlzIHJlbGVhc2UgKCVzKVxuIgorImFsb25nIHdpdGggdGhlIGVycm9yIG1lc3NhZ2UgYmVsb3csIHRoZSBvdXRwdXQgb2ZcbiIKKyJcbiIKKyJcdHBhcnRlZCBERVZJQ0UgdW5pdCBjbyBwcmludCB1bml0IHMgcHJpbnRcbiIKKyJcbiIKKyJhbmQgdGhlIGZvbGxvd2luZyBoaXN0b3J5IG9mIGNvbW1hbmRzIHlvdSBlbnRlcmVkLlxuIgorIkFsc28gaW5jbHVkZSBhbnkgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB5b3VyIHNldHVwIHlvdVxuIgorImNvbnNpZGVyIGltcG9ydGFudC5cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzoyODQKK21zZ2lkICIiCisiXG4iCisiQ29tbWFuZCBIaXN0b3J5OlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjM2NgorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogU0VHVl9NQVBFUlIgKEFkZHJlc3Mgbm90IG1hcHBlZCB0byBvYmplY3QpXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6MzcyCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBTRUdWX0FDQ0VSUiAoSW52YWxpZCBwZXJtaXNzaW9ucyBmb3IgbWFwcGVkIG9iamVjdClcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzozNzcKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEEgZ2VuZXJhbCBTSUdTRUdWIHNpZ25hbCB3YXMgZW5jb3VudGVyZWQuXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDEwCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfSU5URElWIChJbnRlZ2VyOiBkaXZpZGUgYnkgemVybykiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDE1Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfSU5UT1ZGIChJbnRlZ2VyOiBvdmVyZmxvdykiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDIwCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxURElWIChGbG9hdDogZGl2aWRlIGJ5IHplcm8pIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQyNQorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0ZMVE9WRiAoRmxvYXQ6IG92ZXJmbG93KSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0MzAKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRVTkQgKEZsb2F0OiB1bmRlcmZsb3cpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQzNQorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0ZMVFJFUyAoRmxvYXQ6IGluZXhhY3QgcmVzdWx0KSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0NDAKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRJTlYgKEZsb2F0OiBpbnZhbGlkIG9wZXJhdGlvbikiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDQ1Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxUU1VCIChGbG9hdDogc3Vic2NyaXB0IG91dCBvZiByYW5nZSkiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDUwCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBBIGdlbmVyYWwgU0lHRlBFIHNpZ25hbCB3YXMgZW5jb3VudGVyZWQuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQ4MworbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX0lMTE9QQyAoSWxsZWdhbCBPcGNvZGUpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQ4OAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX0lMTE9QTiAoSWxsZWdhbCBPcGVyYW5kKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0OTMKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9JTExBRFIgKElsbGVnYWwgYWRkcmVzc2luZyBtb2RlKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0OTgKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9JTExUUlAgKElsbGVnYWwgVHJhcCkiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NTAzCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfUFJWT1BDIChQcml2aWxlZ2VkIE9wY29kZSkiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NTA4Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfUFJWUkVHIChQcml2aWxlZ2VkIFJlZ2lzdGVyKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo1MTMKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9DT1BST0MgKENvcHJvY2Vzc29yIEVycm9yKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo1MTgKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9CQURTVEsgKEludGVybmFsIFN0YWNrIEVycm9yKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo1MjMKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEEgZ2VuZXJhbCBTSUdJTEwgc2lnbmFsIHdhcyBlbmNvdW50ZXJlZC4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6MTAyNAorbXNnaWQgIkV4cGVjdGluZyBhIHBhcnRpdGlvbiBudW1iZXIuIgorbXNnc3RyICJGb3J2ZW50ZXIgZXQgcGFydGl0aW9uc251bW1lci4iCisKKyM6IHBhcnRlZC91aS5jOjEwMzMKK21zZ2lkICJQYXJ0aXRpb24gZG9lc24ndCBleGlzdC4iCittc2dzdHIgIlBhcnRpdGlvbmVuIGZpbmRlcyBpa2tlLiIKKworIzogcGFydGVkL3VpLmM6MTA1MworbXNnaWQgIkV4cGVjdGluZyBhIGZpbGUgc3lzdGVtIHR5cGUuIgorbXNnc3RyICJGb3J2ZW50ZXIgZW4gZmlsc3lzdGVtc3R5cGUuIgorCisjOiBwYXJ0ZWQvdWkuYzoxMDYwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gZmlsZSBzeXN0ZW0gdHlwZSBcIiVzXCIuIgorbXNnc3RyICJVa2VuZHQgZmlsc3lzdGVtc3R5cGUgJyVzJy4iCisKKyM6IHBhcnRlZC91aS5jOjEwODAKK21zZ2lkICJFeHBlY3RpbmcgYSBkaXNrIGxhYmVsIHR5cGUuIgorbXNnc3RyICJGb3J2ZW50ZXIgZW4gZGlza2V0aWtldHRldHlwZS4iCisKKyM6IHBhcnRlZC91aS5jOjExNzgKK21zZ2lkICJDYW4ndCBjcmVhdGUgYW55IG1vcmUgcGFydGl0aW9ucy4iCittc2dzdHIgIkthbiBpa2tlIHRpbGb4amUgZmxlcmUgcGFydGl0aW9uZXIuIgorCisjOiBwYXJ0ZWQvdWkuYzoxMTg4Cittc2dpZCAiRXhwZWN0aW5nIGEgcGFydGl0aW9uIHR5cGUuIgorbXNnc3RyICJGb3J2ZW50ZXIgZXQgcGFydGl0aW9uc3R5cGUuIgorCisjOiBwYXJ0ZWQvdWkuYzoxMzE1Cittc2dpZCAib24iCittc2dzdHIgInDlIgorCisjOiBwYXJ0ZWQvdWkuYzoxMzE2Cittc2dpZCAib2ZmIgorbXNnc3RyICJmcmEiCisKKyM6IHBhcnRlZC91aS5jOjE0MzEKK21zZ2lkICJPUFRJT05zOiIKK21zZ3N0ciAiRkxBRzoiCisKKyM6IHBhcnRlZC91aS5jOjE0MzYKK21zZ2lkICJDT01NQU5EczoiCittc2dzdHIgIktPTU1BTkRPZXI6IgorCisjOiBwYXJ0ZWQvdWkuYzoxNDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzaW5nICVzXG4iCittc2dzdHIgIkJydWdlciAlc1xuIgorCisjOiBwYXJ0ZWQvdWkuYzoxNTE5Cittc2dpZCAiVGhpcyBjb21tYW5kIGRvZXMgbm90IG1ha2Ugc2Vuc2UgaW4gbm9uLWludGVyYWN0aXZlIG1vZGUuXG4iCittc2dzdHIgIiIKKworI34gbXNnaWQgIndoZXJlIG5lY2Vzc2FyeSwgcHJvbXB0cyBmb3IgdXNlciBpbnRlcnZlbnRpb24iCisjfiBtc2dzdHIgImh2b3IgZGV0IGVyIG74ZHZlbmRpZ3Qgc3D4cmdlcyBicnVnZXJlbiBvbSBhbHRlcm5hdGl2ZXIiCisKKyMsIGZ1enp5CisjfiBtc2dpZCAiIgorI34gIldpdGhvdXQgYXJndW1lbnRzLCBwcmludCBkaXNwbGF5cyB0aGUgZW50aXJlIHBhcnRpdGlvbiB0YWJsZS4gV2l0aCAiCisjfiAiJ2ZyZWUnXG4iCisjfiAiYXJndW1lbnQsIGluZm9ybWF0aW9uIGFib3V0IGZyZWUgc3BhY2Ugd2lsbCBiZSBkaXNwbGF5ZWQgb3RoZXJ3aXNlIGlmIGFcbiIKKyN+ICJwYXJ0aXRpb24gbnVtYmVyIGlzIGdpdmVuLCB0aGVuIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gaXMgZGlzcGxheWVkXG4iCisjfiAiYWJvdXQgdGhhdCBwYXJ0aXRpb24uIElmIHRoZSAnYWxsJyBhcmd1bWVudCBpcyBwYXNzZWQgaW5zdGVhZCwgcGFydGl0aW9uXG4iCisjfiAiaW5mb3JtYXRpb24gZm9yIGFsbCBkZXZpY2VzIHdpbGwgYmUgZGlzcGxheWVkLlxuIgorI34gbXNnc3RyICIiCisjfiAiVWRlbiBhcmd1bWVudGVyIHVkc2tyaXZlciAnc2tyaXYnIGhlbGUgcGFydGl0aW9uc3RhYmVsbGVuLiBIdmlzIGV0IG51bW1lciAiCisjfiAicOUgZW4gcGFydGl0aW9uIGVyIGFuZ2l2ZXQgdmlsIG1lcmUgZGV0YWxqZXJldCBpbmZvcm1hdGlvbiBvbSBkZW5uZSAiCisjfiAicGFydGl0aW9uIGJsaXZlIHZpc3QuXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiVGhlIHNlY3RvciBzaXplIG9uICVzIGlzICVkIGJ5dGVzLiAgUGFydGVkIGlzIGtub3duIG5vdCB0byB3b3JrIHByb3Blcmx5ICIKKyN+ICJ3aXRoIGRyaXZlcyB3aXRoIHNlY3RvciBzaXplcyBvdGhlciB0aGFuICVkIGJ5dGVzIgorI34gbXNnc3RyICIiCisjfiAiU2VrdG9yc3T4cnJlbHNlbiBw5SAlcyBlciAlZCBieXRlLiBEZXQgZXIga2VuZHQgYXQgUGFydGVkIGlra2Ugdmlya2VyICIKKyN+ICJvcmRlbnRsaWd0IHDlIGRyZXYgbWVkIGFuZGVuIHNla3RvcnN0+HJyZWxzZSBlbmQgJWQgYnl0ZSIKKworI34gbXNnaWQgIkNvdWxkIG5vdCByZWFkIGdlb21ldHJ5IG9mICVzIC0gJXMuIgorI34gbXNnc3RyICJLdW5uZSBpa2tlIGzmc2UgZ2VvbWV0cmllbiBw5SAlcyAtICVzLiIKKworI34gbXNnaWQgIkRldmljZSAlcyBoYXMgZG9kZ2V5IGdlb21ldHJ5LiIKKyN+IG1zZ3N0ciAiRW5oZWRlbiAlcyBoYXIgbeZya2VsaWcgZ2VvbWV0cmkuIgorCisjfiBtc2dpZCAiSURFIgorI34gbXNnc3RyICJJREUiCisKKyN+IG1zZ2lkICJTQ1NJIgorI34gbXNnc3RyICJTQ1NJIgorCisjfiBtc2dpZCAiRGV2aWNlICVzIGlzIG5laXRoZXIgYSBTQ1NJIG5vciBJREUgZHJpdmUuIgorI34gbXNnc3RyICJFbmhlZGVuICVzIGVyIGh2ZXJrZW4gZW4gU0NTSS0gZWxsZXIgSURFLWVuaGVkLiIKKworI34gbXNnaWQgIkVycm9yIHJlYWRpbmcgJXMgKCVzKSB0byBkZXRlcm1pbmUgaWYgcGFydGl0aW9uIGlzIG1vdW50ZWQuIgorI34gbXNnc3RyICIiCisjfiAiRW4gZmVqbCBvcHN0b2QgZGEgJXMgKCVzKSBza3VsbGUgbOZzZXMgZm9yIGF0IGJlc3RlbW1lIG9tIHBhcnRpdGlvbmVuIGVyICIKKyN+ICJtb250ZXJldC4iCisKKyN+IG1zZ2lkICIiCisjfiAiVW5hYmxlIHRvIGRldGVybWluZSBpZiBwYXJ0aXRpb25zIGFyZSBtb3VudGVkIHZpYSAvcHJvYy9tb3VudHMgb3IgL2V0Yy8iCisjfiAibXRhYi4gIE1ha2Ugc3VyZSB5b3UgZG9uJ3QgYXR0ZW1wdCB0byByZXNpemUgb3IgbW9kaWZ5IG1vdW50ZWQgZmlsZSAiCisjfiAic3lzdGVtcy4gIChFdmVuIHJlYWQtb25seSBtb3VudGVkKSIKKyN+IG1zZ3N0ciAiIgorI34gIkthbiBpa2tlIGFmZ/hyZSBvbSBwYXJ0aXRpb25lciBlciBtb250ZXJlZGUgdmlhIC9wcm9jL21vdW50cyBlbGxlciAvZXRjLyIKKyN+ICJtdGFiLiBUamVrIGF0IGR1IGlra2UgZm9yc/hnZXIgYXQg5m5kcmUgc3T4cnJlbHNlIGVsbGVyIGFuZHJlIG1vbnRlcmVkZSAiCisjfiAiZmlsc3lzdGVtZXIgKG9nc+UgbW9udGVyZXQgc2tyaXZlYmVza3l0dGV0KS4iCisKKyN+IG1zZ2lkICIiCisjfiAiVGhlIHBhcnRpdGlvbiB0YWJsZSBvbiAlcyBpcyBpbmNvbnNpc3RlbnQuICBUaGVyZSBhcmUgbWFueSByZWFzb25zIHdoeSAiCisjfiAidGhpcyBtaWdodCBiZSB0aGUgY2FzZS4gIEhvd2V2ZXIsIHRoZSBtb3N0IGxpa2VseSByZWFzb24gaXMgdGhhdCBMaW51eCAiCisjfiAiZGV0ZWN0ZWQgdGhlIEJJT1MgZ2VvbWV0cnkgZm9yICVzIGluY29ycmVjdGx5LiAgR05VIFBhcnRlZCBzdXNwZWN0cyB0aGUgIgorI34gInJlYWwgZ2VvbWV0cnkgc2hvdWxkIGJlICVkLyVkLyVkIChub3QgJWQvJWQvJWQpLiAgWW91IHNob3VsZCBjaGVjayB3aXRoICIKKyN+ICJ5b3VyIEJJT1MgZmlyc3QsIGFzIHRoaXMgbWF5IG5vdCBiZSBjb3JyZWN0LiAgWW91IGNhbiBpbmZvcm0gTGludXggYnkgIgorI34gImFkZGluZyB0aGUgcGFyYW1ldGVyICVzPSVkLCVkLCVkIHRvIHRoZSBjb21tYW5kIGxpbmUuICBTZWUgdGhlIExJTE8gb3IgIgorI34gIkdSVUIgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gIElmIHlvdSB0aGluayBQYXJ0ZWQncyBzdWdnZXN0ZWQgIgorI34gImdlb21ldHJ5IGlzIGNvcnJlY3QsIHlvdSBtYXkgc2VsZWN0IElnbm9yZSB0byBjb250aW51ZSAoYW5kIGZpeCBMaW51eCAiCisjfiAibGF0ZXIpLiAgT3RoZXJ3aXNlLCBzZWxlY3QgQ2FuY2VsIChhbmQgZml4IExpbnV4IGFuZC9vciB0aGUgQklPUyBub3cpLiIKKyN+IG1zZ3N0ciAiIgorI34gIlBhcnRpdGlvbnN0YWJlbGxlbiBw5SAlcyBlciBpa2tlIGtvbnNpc3RlbnQuIERlciBrYW4gduZyZSBtYW5nZSDlcnNhZ2VyICIKKyN+ICJ0aWwgZGV0dGUuIERlbiBtZXN0IHNhbmRzeW5saWdlIOVyc2FnIGVyIGF0IExpbnV4IGzmc3RlIGZvcmtlcnQgIgorI34gImdlb21ldHJpaW5mb3JtYXRpb24gZm9yICVzIGkgQklPUy4gR05VIFBhcnRlZCBtaXN05m5rZXIgZGVuIHJpZ3RpZ2UgIgorI34gImdlb21ldHJpIGZvciBhdCB25nJlICVkLyVkLyVkIChpa2tlICVkLyVkLyVkKS4gRHUgYvhyIGb4cnN0IGtvbnRyb2xsZXJlICIKKyN+ICJkaW4gQklPUyBlZnRlcnNvbSBkZXQga2FuIHbmcmUgZm9ya2VydC4gRHUga2FuIGluZm9ybWVyZSBMaW51eCBnZW5uZW0gYXQgIgorI34gInRpbGb4amUgcGFyYW1ldGVyZW4gJXM9JWQsJWQsJWQgcOUga29tbWFuZG9saW5qZW4uIE1lcmUgaW5mb3JtYXRpb24gIgorI34gImZpbmRlcyBpIG1hbnVhbGVybmUgZm9yIExJTE8gZWxsZXIgR1JVQi4gSHZpcyBkdSB0cm9yIGF0IFBhcnRlZHMgIgorI34gImZvcmVzbOVlZGUgZ2VvbWV0cmkgZXIgcmlndGlnIGthbiBkdSB25mxnZSBJZ25vculyIGZvciBhdCBmb3J0c+Z0dGUgKG9nICIKKyN+ICJyZXR0ZSBMaW51eCBzZW5lcmUpLiBFbGxlcnMsIHbmbGcgQWZicnlkIChvZyByZXQgTGludXggb2cvZWxsZXIgQklPUyBudSkuIgorCisjfiBtc2dpZCAiIgorI34gIlRoZSBwYXJ0aXRpb24gdGFibGUgb24gJXMgaXMgaW5jb25zaXN0ZW50LiAgVGhlcmUgYXJlIG1hbnkgcmVhc29ucyB3aHkgIgorI34gInRoaXMgbWlnaHQgYmUgdGhlIGNhc2UuICBPZnRlbiwgdGhlIHJlYXNvbiBpcyB0aGF0IExpbnV4IGRldGVjdGVkIHRoZSAiCisjfiAiQklPUyBnZW9tZXRyeSBpbmNvcnJlY3RseS4gIEhvd2V2ZXIsIHRoaXMgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHRoZSBjYXNlICIKKyN+ICJoZXJlLiAgSXQgaXMgc2FmZSB0byBpZ25vcmUsYnV0IGlnbm9yaW5nIG1heSBjYXVzZSAoZml4YWJsZSkgcHJvYmxlbXMgIgorI34gIndpdGggc29tZSBib290IGxvYWRlcnMsIGFuZCBtYXkgY2F1c2UgcHJvYmxlbXMgd2l0aCBGQVQgZmlsZSBzeXN0ZW1zLiAgIgorI34gIlVzaW5nIExCQSBpcyByZWNvbW1lbmRlZC4iCisjfiBtc2dzdHIgIiIKKyN+ICJQYXJ0aXRpb25zdGFiZWxsZW4gcOUgJXMgZXIgaWtrZSBrb25zaXN0ZW50LiBEZXQga2FuIHbmcmUgbWFuZ2Ug5XJzYWdlciAiCisjfiAidGlsIGRldHRlLiBPZnRlIGVyIOVyc2FnZW4gYXQgTGludXggaGFyIGzmc3QgZ2VvbWV0cmlpbmZvcm1hdGlvbmVuIGkgQklPUyAiCisjfiAiZmVqbGFndGlndC4gRGV0IHN5bmVzIGRvZyBpa2tlIHbmcmUgcHJvYmxlbWV0IGhlci4gRHUga2FuIGlnbm9yZXJlICIKKyN+ICJmZWpsZW4sIG1lbiBkZXIga2FuIG9wc3TlIHByb2JsZW1lciAoc29tIGthbiByZXR0ZXMpIG1lZCB2aXNzZSAiCisjfiAib3BzdGFydHNwcm9ncmFtbWVyLCBvZyBwcm9ibGVtZXIgbWVkIEZBVC1maWxzeXN0ZW1lci4gQnJ1ZyBhZiBMQkEgIgorI34gImFuYmVmYWxlcy4iCisKKyN+IG1zZ2lkICIiCisjfiAiVW5hYmxlIHRvIGFsaWduIHBhcnRpdGlvbiBwcm9wZXJseS4gIFRoaXMgcHJvYmFibHkgbWVhbnMgdGhhdCBhbm90aGVyICIKKyN+ICJwYXJ0aXRpb25pbmcgdG9vbCBnZW5lcmF0ZWQgYW4gaW5jb3JyZWN0IHBhcnRpdGlvbiB0YWJsZSwgYmVjYXVzZSBpdCAiCisjfiAiZGlkbid0IGhhdmUgdGhlIGNvcnJlY3QgQklPUyBnZW9tZXRyeS4gIEl0IGlzIHNhZmUgdG8gaWdub3JlLGJ1dCBpZ25vcmluZyAiCisjfiAibWF5IGNhdXNlIChmaXhhYmxlKSBwcm9ibGVtcyB3aXRoIHNvbWUgYm9vdCBsb2FkZXJzLiIKKyN+IG1zZ3N0ciAiIgorI34gIkt1bm5lIGlra2UgbOZnZ2UgcGFydGl0aW9uZW4gcOUgaGVsIGN5bGluZGVyZ3LmbnNlLiBEZXQgYmV0eWRlciBvZnRlIGF0ICIKKyN+ICJldCBhbmRldCBwYXJ0aXRpb25zduZya3T4aiBza3JldiBlbiB1Z3lsZGlnIHBhcnRpdGlvbnN0YWJlbCwgYmFzZXJldCBw5SAiCisjfiAiZmVqbGFndGlnIGdlb21ldHJpaW5mb3JtYXRpb24gZnJhIGRpbiBCSU9TLiBEdSBrYW4gaWdub3JlcmUgZmVqbGVuLCBtZW4gIgorI34gImRlciBrYW4gb3BzdOUgcHJvYmxlbWVyIChzb20ga2FuIHJldHRlcykgbWVkIHZpc3NlIG9wc3RhcnRzcHJvZ3JhbW1lci4iCisKKyN+IG1zZ2lkICJBdHRlbXB0IHRvIHJlYWQgc2VjdG9ycyAlbGQtJWxkIG91dHNpZGUgb2YgcGFydGl0aW9uIG9uICVzIgorI34gbXNnc3RyICJGb3Jz+Gd0ZSBs5nNlIHNla3RvcmVybmUgJWxkLSVsZCB1ZGVuZm9yIHBhcnRpdGlvbmVuIHDlICVzIgorCisjfiBtc2dpZCAiIgorI34gIlRoaXMgZXh0MiBmaWxlc3lzdGVtIGhhcyBhIHJhdGhlciBzdHJhbmdlIGxheW91dCEgIFBhcnRlZCBjYW4ndCByZXNpemUgIgorI34gInRoaXMgKHlldCkuIgorI34gbXNnc3RyICIiCisjfiAiRGV0dGUgZXh0Mi1maWxzeXN0ZW0gaGFyIGVuIGdhbnNrZSBt5nJrZWxpZyB1ZGzmZ25pbmchIFBhcnRlZCBrYW4gaWtrZSAiCisjfiAi5m5kcmUgc3T4cnJlbHNlIHDlIGRldHRlIChlbmRudSkuIgorCisjfiBtc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGludmFsaWQgc2lnbmF0dXJlIGZvciBhIEZBVCBmaWxlIHN5c3RlbXMuIgorI34gbXNnc3RyICJGaWxzeXN0ZW1ldCBoYXIgZW4gdWd5bGRpZyBzaWduYXR1ciBmb3IgZmlsc3lzdGVtZXIgYWYgdHlwZW4gRkFULiIKKworI34gbXNnaWQgIlNUQVJUIGFuZCBFTkQgYXJlIGluIG1lZ2FieXRlc1xuIgorI34gbXNnc3RyICJTVEFSVCBvZyBTTFVUIGFuZ2l2ZXMgaSBtZWdhYnl0ZVxuIgorCisjfiBtc2dpZCAiUGFydGl0aW9uICVzIGlzIGJlaW5nIHVzZWQuIgorI34gbXNnc3RyICJQYXJ0aXRpb24gJXMgZXIgaSBicnVnLiIKKworI34gbXNnaWQgIiIKKyN+ICJZb3UgcmVxdWVzdGVkIHRvIGNyZWF0ZSBhIHBhcnRpdGlvbiBhdCAlLjNmLSUuM2ZNYi4gVGhlIGNsb3Nlc3QgUGFydGVkICIKKyN+ICJjYW4gbWFuYWdlIGlzICUuM2YtJS4zZk1iLiIKKyN+IG1zZ3N0ciAiIgorI34gIkR1IGJhZCBvbSBhdCBvcHJldHRlIGVuIHBhcnRpdGlvbiBw5SAlLjNmLSUuM2ZNYi4gRGV0IG7mcm1lc3RlIFBhcnRlZCBrYW4gIgorI34gImtsYXJlIGVyICUuM2YtJS4zZk1iLiIKKworI34gbXNnaWQgIiIKKyN+ICJZb3UgcmVxdWVzdGVkIHRvIG1vdmUgdGhlIHBhcnRpdGlvbiB0byAlLjNmLSUuM2ZNYi4gVGhlIGNsb3Nlc3QgUGFydGVkICIKKyN+ICJjYW4gbWFuYWdlIGlzICUuM2YtJS4zZk1iLiIKKyN+IG1zZ3N0ciAiIgorI34gIkR1IGJhZCBvbSBhdCBmbHl0dGUgcGFydGl0aW9uZW4gdGlsICUuM2YtJS4zZk1iLiBEZXQgbuZybWVzdGUgUGFydGVkIGthbiAiCisjfiAia2xhcmUgZXIgJS4zZi0lLjNmTWIuIgorCisjfiBtc2dpZCAiRGlzayBnZW9tZXRyeSBmb3IgJXM6IDAuMDAwLSUuM2YgbWVnYWJ5dGVzXG4iCisjfiBtc2dzdHIgIkRpc2tnZW9tZXRyaSBw5SAlczogMC4wMDAtJS4zZiBtZWdhYnl0ZVxuIgorCisjfiBtc2dpZCAiRGlzayBsYWJlbCB0eXBlOiAlc1xuIgorI34gbXNnc3RyICJUeXBlIGFmIGZpbHN5c3RlbTogJXNcbiIKKworI34gbXNnaWQgIk1pbm9yICAgIFN0YXJ0ICAgICAgIEVuZCAgICAgIgorI34gbXNnc3RyICJMaWxsZSAgICAgU3RhcnQgICAgICAgU2x1dCAgICIKKworI34gbXNnaWQgIlR5cGUgICAgICAiCisjfiBtc2dzdHIgIlR5cGUgICAgICAiCisKKyN+IG1zZ2lkICJGaWxlc3lzdGVtICAiCisjfiBtc2dzdHIgIkZpbHN5c3RlbSAgICIKKworI34gbXNnaWQgIk5hbWUgICAgICAgICAgICAgICAgICAiCisjfiBtc2dzdHIgIk5hdm4gICAgICAgICAgICAgICAgICAiCisKKyN+IG1zZ2lkICIiCisjfiAiWW91IHJlcXVlc3RlZCB0byByZXNpemUgdGhlIHBhcnRpdGlvbiB0byAlLjNmLSUuM2ZNYi4gVGhlIGNsb3Nlc3QgUGFydGVkICIKKyN+ICJjYW4gbWFuYWdlIGlzICUuM2YtJS4zZk1iLiIKKyN+IG1zZ3N0ciAiIgorI34gIkR1IGJhZCBvbSBhdCDmbmRyZSBzdPhycmVsc2UgcOUgcGFydGl0aW9uZW4gdGlsICUuM2YtJS4zZk1iLiBEZXQgbuZybWVzdGUgIgorI34gIlBhcnRlZCBrYW4ga2xhcmUgZXIgJS4zZi0lLjNmTWIuIgorCisjfiBtc2dpZCAicmVzaXplIE1JTk9SIFNUQVJUIEVORCAgICAgICAgcmVzaXplIGZpbGVzeXN0ZW0gb24gcGFydGl0aW9uIE1JTk9SIgorI34gbXNnc3RyICIiCisjfiAi5m5kcl9zdPhycmVsc2UgTElMTEUgU1RBUlQgU0xVVCAg5m5kciBzdPhycmVsc2UgcOUgZmlsc3lzdGVtZXQgcOUgIgorI34gInBhcnRpdGlvbiBMSUxMRSIKKworI34gbXNnaWQgIiIKKyN+ICJZb3UgZm91bmQgYSBidWcgaW4gR05VIFBhcnRlZC4gIFBsZWFzZSBlbWFpbCBhIGJ1ZyByZXBvcnQgdG8gYnVnLSIKKyN+ICJwYXJ0ZWRAZ251Lm9yZyBjb250YWluaW5nIHRoZSB2ZXJzaW9uICglcyksIGFuZCB0aGUgZm9sbG93aW5nIG1lc3NhZ2U6XG4iCisjfiBtc2dzdHIgIiIKKyN+ICJEdSBoYXIgZnVuZGV0IGVuIGZlamwgaSBHTlUgUGFydGVkLiBTZW5kIGVuIGZlamxyYXBwb3J0IHRpbCBidWctIgorI34gInBhcnRlZEBnbnUub3JnIGluZGhvbGRlbmRlIHZlcnNpb25zbnVtbWVyICglcykgb2cgZvhsZ2VuZGUgbWVkZGVsZWxzZTpcbiIKKworI34gbXNnaWQgIiIKKyN+ICIgIFlvdSBoYXZlIFdpbmRvd3MgRkFUIHBhcnRpdGlvbihzKSB0aGF0IGFyZSBub3QgdXNpbmcgTEJBLiAgSWYgeW91ciBCSU9TICIKKyN+ICJzdXBwb3J0cyBMQkEsIHRoZW4geW91IHNob3VsZCBzd2l0Y2ggdG8gTEJBIGJ5IHNldHRpbmcgdGhlIExCQSBmbGFnIG9uICIKKyN+ICJhbGwgRkFUIHBhcnRpdGlvbnMuICBPdGhlcndpc2UsIG1ha2Ugc3VyZSB0aGUgb3BlcmF0aW5nIHN5c3RlbSBhbmQgdGhlICIKKyN+ICJCSU9TIGhhdmUgdGhlIHNhbWUgZ2VvbWV0cnkgYmVmb3JlIHJlc2l6aW5nIGFueSBGQVQgcGFydGl0aW9ucy4iCisjfiBtc2dzdHIgIiIKKyN+ICIgRHUgaGFyIFdpbmRvd3MgRkFULXBhcnRpdGlvbmVyLCBzb20gaWtrZSBicnVnZXIgTEJBLiBIdmlzIGRpbiBCSU9TICIKKyN+ICJ1bmRlcnN0+HR0ZXIgTEJBLCBz5SBi+HIgZHUgc2tpZnRlIHRpbCBMQkEgdmVkIGF0IHPmdHRlIExCQS1mbGFnZXQgcOUgIgorI34gImFsbGUgRkFULXBhcnRpdGlvbmVyLiBFbGxlcnMgZm9yc2lrciBkaWcgYXQgc3R5cmVzeXN0ZW1ldCBvZyBCSU9TLWVuIGhhciAiCisjfiAiZGVuIHNhbW1lIGdlb21ldHJpIGb4ciBkdSBsYXZlciBvbSBw5SBzdPhycmVsc2VuIGFmIG5vZ2VuIEZBVC1wYXJ0aXRpb25lci4iCisKKyN+IG1zZ2lkICIiCisjfiAiVGhlIG9wZXJhdGluZyBzeXN0ZW0gdGhpbmtzIHRoZSBnZW9tZXRyeSBvbiAlcyBpcyAlZC8lZC8lZC4gIFRoZXJlZm9yZSwgIgorI34gImN5bGluZGVyIDEwMjQgZW5kcyBhdCAlLjNmTS4lcyIKKyN+IG1zZ3N0ciAiIgorI34gIk9wZXJhdGl2c3lzdGVtZXQgdHJvciBhdCBnZW9tZXRyaWVuIHDlICVzIGVyICVkLyVkLyVkLiBEZXJmb3Igc2x1dHRlciAiCisjfiAiY3lsaW5kZXIgMTAyNCBw5SAlLjNmTS4lcyIKKworI34gbXNnaWQgIlRoZSBvcGVyYXRpbmcgc3lzdGVtIHRoaW5rcyB0aGUgZ2VvbWV0cnkgb24gJXMgaXMgJWQvJWQvJWQuJXMiCisjfiBtc2dzdHIgIk9wZXJhdGl2c3lzdGVtZXQgdHJvciBhdCBnZW9tZXRyaWVuIHDlICVzIGVyICVkLyVkLyVkLiVzIgorCisjfiBtc2dpZCAiIgorI34gIlRoZSBGQVRzIGFyZW4ndCBiaWcgZW5vdWdoIHRvIGRlc2NyaWJlIGFsbCBjbHVzdGVycyEgIEVhY2ggRkFUIGlzICVkICIKKyN+ICJzZWN0b3JzLiAgVGhlcmUgYXJlICVkIGNsdXN0ZXJzLCB3aGljaCB3b3VsZCByZXF1aXJlIGVhY2ggRkFUIHRvIGJlICVkICIKKyN+ICJzZWN0b3JzLiAgVGhpcyBpcyBSRUFMTFkgd2VpcmQuICBZb3UgbWlnaHQgd2FudCB0byB3cml0ZSB1cyBhbiBlbWFpbDogYnVnLSIKKyN+ICJwYXJ0ZWRAZ251Lm9yZyIKKyN+IG1zZ3N0ciAiIgorI34gIkZpbGFsbG9rZXJpbmdzdGFiZWxsZXJuZSBlciBpa2tlIHN0b3JlIG5vayBmb3IgYXQgYmVza3JpdmUgYWxsZSBrbHluZ2VyISAiCisjfiAiSHZlciB0YWJlbCBlciAlZCBzZWt0b3Jlci4gRGVyIGZpbmRlcyAlZCBrbHluZ2VyLCBodmlsa2V0IGluZGVi5nJlciBhdCAiCisjfiAiaHZlciB0YWJlbCBidXJkZSB25nJlICVkIHNla3RvcmVyLiBEZXR0ZSBlciBSSUdUSUdUIG3mcmtlbGlndC4gU2tyaXYgZXQgIgorI34gImJyZXYgdGlsIG9zOiBidWctcGFydGVkQGdudS5vcmciCisKKyN+IG1zZ2lkICIiCisjfiAiVGhpcyBzd2FwIHBhcnRpdGlvbiBpcyBub3QgY29tcGF0aWJsZSB3aXRoIExpbnV4IHZlcnNpb24gMi4xLjExNyBvciAiCisjfiAiZWFybGllci4gIFVzZSBhIHNtYWxsZXIgcGFydGl0aW9uIChtYXhpbXVtIHNpemUgMTI4bWIpIGlmIHlvdSB3YW50IHRvIHVzZSAiCisjfiAib2xkIHZlcnNpb25zIG9mIExpbnV4LiIKKyN+IG1zZ3N0ciAiIgorI34gIkRlbm5lIHN3YXBwYXJ0aXRpb24gZXIgaWtrZSBrb21wYXRpYmVsIG1lZCBMaW51eCB2ZXJzaW9uIDIuMS4xMTcgb2cgIgorI34gInRpZGxpZ2VyZS4gQnJ1ZyBlbiBtaW5kcmUgcGFydGl0aW9uIChtYWtzaW1hbCBzdPhycmVsc2UgMTI4IE1CKSBodmlzIGR1ICIKKyN+ICJicnVnZXIg5mxkcmUgdmVyc2lvbmVyIGFmIExpbnV4LiIKKworI34gbXNnaWQgIlRoZSBuZXcgcGFydGl0aW9uIG92ZXJsYXBzIHdpdGggYW5vdGhlciBwYXJ0aXRpb24uIgorI34gbXNnc3RyICJEZW4gbnllIHBhcnRpdGlvbiBvdmVybGFwcGVyIG1lZCBlbiBhbmRlbi4iCisKKyN+IG1zZ2lkICIiCisjfiAiQ2FuJ3QgcmVzaXplIGFuIGV4dGVuZGVkIHBhcnRpdGlvbiBzbyBhcyB0byBleGNsdWRlIGEgbG9naWNhbCBwYXJ0aXRpb24uIgorI34gbXNnc3RyICIiCisjfiAiS2FuIGlra2Ug5m5kcmUgc3T4cnJlbHNlIHDlIGVuIHVkdmlkZXQgcGFydGl0aW9uIGZvciBhdCBla3NrbHVkZXJlIGVuICIKKyN+ICJsb2dpc2sgcGFydGl0aW9uLiIKKworI34gbXNnaWQgIkNhbid0IGdyb3cgYSBwYXJ0aXRpb24gb250byB1c2VkIHNwYWNlLiIKKyN+IG1zZ3N0ciAiS2FuIGlra2UgbGFkZSBlbiBwYXJ0aXRpb24gdm9rc2UgaW5kIGkgYnJ1Z3QgcGxhZHMuIgorCisjfiBtc2dpZCAidW5rbm93biIKKyN+IG1zZ3N0ciAidWtlbmR0IgorCisjID8/CisjfiBtc2dpZCAiVW5rbm93biBTQ1NJIgorI34gbXNnc3RyICJVa2VuZHQgU0NTSSIKKworI34gbXNnaWQgIkdVSUQgUGFydGl0aW9uIFRhYmxlIEhlYWRlciBTaWduYXR1cmUgaXMgd3Jvbmc6ICIKKyN+IG1zZ3N0ciAiU2lnbmF0dXIgZm9yIEdVSUQgcGFydGl0aW9uc3RhYmVsaG92ZWRlIGVyIGZvcmtlcnQ6ICIKKworI34gbXNnaWQgIiBzaG91bGQgYmUgIgorI34gbXNnc3RyICIgc2t1bGxlIHbmcmUgIgorCisjfiBtc2dpZCAiR1BUIEhlYWRlciBDUkMgY2hlY2sgZmFpbGVkLCAleCBzaG91bGQgYmUgJXguIgorI34gbXNnc3RyICJLb250cm9sIGFmIEdQVC1ob3ZlZCBtaXNseWtrZWRlcywgJXggc2t1bGxlIHbmcmUgJXguIgorCisjfiBtc2dpZCAiR1BUIFBhcnRpdGlvbiBFbnRyeSBBcnJheSBDUkMgY2hlY2sgZmFpbGVkLCAleCBzaG91bGQgYmUgJXguIgorI34gbXNnc3RyICIiCisjfiAiQ1JDLWtvbnRyb2wgYWYgR1BULXBhcnRpdGlvbnNpbmRnYW5nc3RhYmVsIG1pc2x5a2tlZGVzLCAleCBza3VsbGUgduZyZSAleC4iCisKKyN+IG1zZ2lkICIiCisjfiAiVGhpcyBkaXNrIGNvbnRhaW5zIGEgdmFsaWQgUHJpbWFyeSBhbmQgQWx0ZXJuYXRlIEdVSUQgUGFydGl0aW9uIFRhYmxlIGJ1dCAiCisjfiAidGhlIFByb3RlY3RpdmUgTUJSIGlzIGludmFsaWQuICBUaGlzIGdlbmVyYWxseSBtZWFucyB0aGF0IHRoZSBkaXNrIGhhZCAiCisjfiAiR1BUIHBhcnRpdGlvbnMgb24gaXQsIGJ1dCB0aGVuIGEgbGVnYWN5IHBhcnRpdGlvbiBlZGl0aW5nIHRvb2wgd2FzIHVzZWQgIgorI34gInRvIGNoYW5nZSB0aGUgcGFydGl0aW9uIHRhYmxlIHN0b3JlZCBpbiB0aGUgTUJSLlxuIgorI34gIldoaWNoIGRhdGEgaXMgdmFsaWQsICBHUFQgb3IgTUJSP1xuIgorI34gIlllcyB3aWxsIGFzc3VtZSB0aGF0IHRoZSBHUFQgaW5mb3JtYXRpb24gaXMgY29ycmVjdCwgYW5kIHJld3JpdGUgdGhlICIKKyN+ICJQTUJSLlxuIgorI34gIk5vIHdpbGwgYXNzdW1lIHRoYXQgdGhlIE1CUiBpcyBjb3JyZWN0LCBhbmQgZXJhc2UgdGhlIEdQVCBpbmZvcm1hdGlvbi5cbiIKKyN+ICJJZ25vcmUgd2lsbCBhc3N1bWUgdGhhdCB0aGUgTUJSIGlzIGNvcnJlY3QsIGJ1dCBub3QgY2hhbmdlIHRoZSBkaXNrLiIKKyN+IG1zZ3N0ciAiIgorI34gIkRlbm5lIGRpc2sgaW5kZWhvbGRlciBlbiBneWxkaWcgcHJpbeZyIG9nIGFsdGVybmF0aXYgR1VJRC0iCisjfiAiUGFydGl0aW9uc1RhYmVsLCBtZW4gZGVuIGJlc2t5dHRlbmRlIE1CUiBlciB1Z3lsZGlnLiBEZXR0ZSBiZXR5ZGVyICIKKyN+ICJub3JtYWx0IGF0IGRpc2tlbiBoYXIgR1BULXBhcnRpdGlvbmVyIHDlIGRlbiwgbWVuIHPlIGVyIGV0IGdhbW1lbGRhZ3MgIgorI34gInBhcnRpdGlvbnNyZWRpZ2VyaW5nc3bmcmt0+GogYmxldmV0IGJydWd0IHRpbCBhdCDmbmRyZSBwYXJ0aXRpb25zdGFiZWxsZW4gIgorI34gImdlbXQgaSBNQlIuXG4iCisjfiAiSHZpbGtlIGRhdGEgZXIgZ3lsZGlnZSwgR1BUIGVsbGVyIE1CUj9cbiIKKyN+ICJKYSB2aWwgZm9ybW9kZSBhdCBHUFQtaW5mb3JtYXRpb25lbiBlciBrb3JyZWt0LCBvZyB2aWwgZ2Vuc2tyaXZlIGRlbiAiCisjfiAiYmVza3l0dGVuZGUgTUJSLlxuIgorI34gIk5laiB2aWwgZm9ybW9kZSBhdCBNQlIgZXIga29ycmVrdCwgb2cgc2xldHRlIEdQVC1pbmZvcm1hdGlvbmVuLlxuIgorI34gIklnbm9y6XIgdmlsIGZvcm1vZGUgYXQgTUJSIGVyIGtvcnJla3QsIG1lbiBpa2tlIOZuZHJlIGRpc2tlbi4iCisKKyN+IG1zZ2lkICIiCisjfiAiVGhpcyBkaXNrIGNvbnRhaW5zIGEgdmFsaWQgQWx0ZXJuYXRlIEdVSUQgUGFydGl0aW9uIFRhYmxlIGJ1dCB0aGUgUHJpbWFyeSAiCisjfiAiR1BUIGFuZCBQcm90ZWN0aXZlIE1CUiBhcmUgaW52YWxpZC4gIFRoaXMgZ2VuZXJhbGx5IG1lYW5zIHRoYXQgdGhlIGRpc2sgIgorI34gImhhZCBHUFQgcGFydGl0aW9ucyBvbiBpdCwgYnV0IHRoZW4gYSBsZWdhY3kgcGFydGl0aW9uIGVkaXRpbmcgdG9vbCB3YXMgIgorI34gInVzZWQgdG8gY2hhbmdlIHRoZSBwYXJ0aXRpb24gdGFibGUgc3RvcmVkIGluIHRoZSBNQlIuXG4iCisjfiAiV2hpY2ggZGF0YSBpcyB2YWxpZCwgIEdQVCBvciBNQlI/XG4iCisjfiAiWWVzIHdpbGwgYXNzdW1lIHRoYXQgdGhlIEdQVCBpbmZvcm1hdGlvbiBpcyBjb3JyZWN0LCBhbmQgd2lsbCByZXdyaXRlIHRoZSAiCisjfiAiUE1CUiBhbmQgUHJpbWFyeSBHUFQuXG4iCisjfiAiTm8gd2lsbCBhc3N1bWUgdGhhdCB0aGUgTUJSIGlzIGNvcnJlY3QsIGFuZCBlcmFzZSB0aGUgR1BUIGluZm9ybWF0aW9uLlxuIgorI34gIklnbm9yZSB3aWxsIGFzc3VtZSB0aGF0IHRoZSBNQlIgaXMgY29ycmVjdCwgYnV0IG5vdCBjaGFuZ2UgdGhlIGRpc2suIgorI34gbXNnc3RyICIiCisjfiAiRGVubmUgZGlzayBpbmRlaG9sZGVyIGVuIGd5bGRpZyBhbHRlcm5hdGl2IEdVSUQtUGFydGl0aW9uc1RhYmVsLCBtZW4gZGVuICIKKyN+ICJwcmlt5nJlIEdQVCBvZyBiZXNreXR0ZW5kZSBNQlIgZXIgdWd5bGRpZ2UuIERldHRlIGJldHlkZXIgbm9ybWFsdCBhdCAiCisjfiAiZGlza2VuIGhhciBHUFQtcGFydGl0aW9uZXIgcOUgZGVuLCBtZW4gc+UgZXIgZXQgZ2FtbWVsZGFncyAiCisjfiAicGFydGl0aW9uc3JlZGlnZXJpbmdzduZya3T4aiBibGV2ZXQgYnJ1Z3QgdGlsIGF0IOZuZHJlIHBhcnRpdGlvbnN0YWJlbGxlbiAiCisjfiAiZ2VtdCBpIE1CUi5cbiIKKyN+ICJIdmlsa2UgZGF0YSBlciBneWxkaWdlLCBHUFQgZWxsZXIgTUJSP1xuIgorI34gIkphIHZpbCBmb3Jtb2RlIGF0IEdQVC1pbmZvcm1hdGlvbmVuIGVyIGtvcnJla3QsIG9nIHZpbCBnZW5za3JpdmUgZGVuICIKKyN+ICJiZXNreXR0ZW5kZSBNQlIgb2cgZGVuIHByaW3mcmUgR1BULlxuIgorI34gIk5laiB2aWwgZm9ybW9kZSBhdCBNQlIgZXIga29ycmVrdCwgb2cgc2xldHRlIEdQVC1pbmZvcm1hdGlvbmVuLlxuIgorI34gIklnbm9y6XIgdmlsIGZvcm1vZGUgYXQgTUJSIGVyIGtvcnJla3QsIG1lbiBpa2tlIOZuZHJlIGRpc2tlbi4iCisKKyN+IG1zZ2lkICIiCisjfiAiVGhpcyBkaXNrIGNvbnRhaW5zIGEgdmFsaWQgUHJpbWFyeSBHVUlEIFBhcnRpdGlvbiBUYWJsZSBidXQgdGhlIEFsdGVybmF0ZSAiCisjfiAiR1BUIGFuZCBQcm90ZWN0aXZlIE1CUiBhcmUgaW52YWxpZC4gIFRoaXMgZ2VuZXJhbGx5IG1lYW5zIHRoYXQgdGhlIGRpc2sgIgorI34gImhhZCBHUFQgcGFydGl0aW9ucyBvbiBpdCwgYnV0IHRoZW4gYSBsZWdhY3kgcGFydGl0aW9uIGVkaXRpbmcgdG9vbCB3YXMgIgorI34gInVzZWQgdG8gY2hhbmdlIHRoZSBwYXJ0aXRpb24gdGFibGUgc3RvcmVkIGluIHRoZSBNQlIuXG4iCisjfiAiV2hpY2ggZGF0YSBpcyB2YWxpZCwgIEdQVCBvciBNQlI/XG4iCisjfiAiWWVzIHdpbGwgYXNzdW1lIHRoYXQgdGhlIEdQVCBpbmZvcm1hdGlvbiBpcyBjb3JyZWN0LCBhbmQgd2lsbCByZXdyaXRlIHRoZSAiCisjfiAiUE1CUiBhbmQgQWx0ZXJuYXRlIEdQVC5cbiIKKyN+ICJObyB3aWxsIGFzc3VtZSB0aGF0IHRoZSBNQlIgaXMgY29ycmVjdCwgYW5kIGVyYXNlIHRoZSBHUFQgaW5mb3JtYXRpb24uXG4iCisjfiAiSWdub3JlIHdpbGwgYXNzdW1lIHRoYXQgdGhlIE1CUiBpcyBjb3JyZWN0LCBidXQgbm90IGNoYW5nZSB0aGUgZGlzay5cbiIKKyN+IG1zZ3N0ciAiIgorI34gIkRlbm5lIGRpc2sgaW5kZWhvbGRlciBlbiBneWxkaWcgcHJpbeZyIEdVSUQtUGFydGl0aW9uc1RhYmVsLCBtZW4gZGVuICIKKyN+ICJhbHRlcm5hdGl2ZSBHUFQgb2cgYmVza3l0dGVuZGUgTUJSIGVyIHVneWxkaWdlLiBEZXR0ZSBiZXR5ZGVyIG5vcm1hbHQgYXQgIgorI34gImRpc2tlbiBoYXIgR1BULXBhcnRpdGlvbmVyIHDlIGRlbiwgbWVuIHPlIGVyIGV0IGdhbW1lbGRhZ3MgIgorI34gInBhcnRpdGlvbnNyZWRpZ2VyaW5nc3bmcmt0+GogYmxldmV0IGJydWd0IHRpbCBhdCDmbmRyZSBwYXJ0aXRpb25zdGFiZWxsZW4gIgorI34gImdlbXQgaSBNQlIuXG4iCisjfiAiSHZpbGtlIGRhdGEgZXIgZ3lsZGlnZSwgR1BUIGVsbGVyIE1CUj9cbiIKKyN+ICJKYSB2aWwgZm9ybW9kZSBhdCBHUFQtaW5mb3JtYXRpb25lbiBlciBrb3JyZWt0LCBvZyB2aWwgZ2Vuc2tyaXZlIGRlbiAiCisjfiAiYmVza3l0dGVuZGUgTUJSIG9nIGRlbiBhbHRlcm5hdGl2ZSBHUFQuXG4iCisjfiAiTmVqIHZpbCBmb3Jtb2RlIGF0IE1CUiBlciBrb3JyZWt0LCBvZyBzbGV0dGUgR1BULWluZm9ybWF0aW9uZW4uXG4iCisjfiAiSWdub3LpciB2aWwgZm9ybW9kZSBhdCBNQlIgZXIga29ycmVrdCwgbWVuIGlra2Ug5m5kcmUgZGlza2VuLlxuIgorCisjfiBtc2dpZCAiQ2FuJ3Qgc2V0IG5vbi1MaW51eCBwYXJ0aXRpb25zIGFzIGEgcm9vdCBkZXZpY2UuIgorI34gbXNnc3RyICJLYW4gaWtrZSBz5nR0ZSBhbmRyZSBwYXJ0aXRpb25lciBlbmQgTGludXgnIGVnbmUgc29tIHJvZGVuaGVkLiIKKworI34gbXNnaWQgIkNhbid0IHNldCBub24tTGludXggcGFydGl0aW9ucyBhcyBhIHN3YXAgZGV2aWNlLiIKKyN+IG1zZ3N0ciAiS2FuIGlra2Ugc+Z0dGUgZW4gaWtrZS1MaW51eCBwYXJ0aXRpb24gc29tIHN3YXBlbmhlZC4iCisKKyN+IG1zZ2lkICJObyBnZXRfcmVzaXplX2NvbnN0cmFpbnQgZm9yICVzISIKKyN+IG1zZ3N0ciAiZ2V0X3Jlc2l6ZV9jb25zdHJhaW50IG1hbmdsZXIgZm9yICVzISIKKworI34gbXNnaWQgIlRoZSAlcyBmaWxlIHN5c3RlbSBjb2RlIGRvZXNuJ3Qgc3VwcG9ydCAlcyBkaXNrIGxhYmVscy4iCisjfiBtc2dzdHIgIiIKKyN+ICJLb2RlbiBmb3IgZmlsc3lzdGVtZXQgJXMgdW5kZXJzdPh0dGVyIGlra2UgZmlsYWxsb2tlcmluZ3N0YWJlbGxlciBmb3IgJXMuIgorCisjfiBtc2dpZCAiQ3JlYXRpbmcgbmV3ICVzIGRpc2tsYWJlbHMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCisjfiBtc2dzdHIgIiIKKyN+ICJVbmRlcnN0+HR0ZWxzZSBmb3IgYXQgb3ByZXR0ZSBueWUgcGFydGl0aW9uc3RhYmVsbGVyIGFmIHR5cGVuICVzIGVyIGlra2UgIgorI34gImltcGxlbWVudGVyZXQgZW5kbnUuIgorCisjfiBtc2dpZCAiVGhlIGNvZGUgdG8gd3JpdGUgdGhlIHBhcnRpdGlvbiB0YWJsZSBoYXNuJ3QgYmVlbiB3cml0dGVuIGZvciAlcyB5ZXQiCisjfiBtc2dzdHIgIiIKKyN+ICJVbmRlcnN0+HR0ZWxzZSBmb3IgYXQgc2tyaXZlIHBhcnRpdGlvbnN0YWJlbCBmb3IgJXMgZXIgaWtrZSBpbXBsZW1lbnRlcmV0ICIKKyN+ICJlbmRudS4iCisKKyN+IG1zZ2lkICJJbnNhbmUhICAlZCBjbHVzdGVycyEiCisjfiBtc2dzdHIgIk3mcmtlbGlndCEgJWQga2x5bmdlciEiCisKKyN+IG1zZ2lkICIiCisjfiAiVGhlIGZpbGVzeXN0ZW0gaXMgZ29pbmcgdG8gYmUgdG9vIGJpZyBmb3IgRkFUMTYsIHNvIEZBVDMyIHdpbGwgYmUgdXNlZC4gICIKKyN+ICJUaGlzIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggTVMtRE9TLCBlYXJseSB2ZXJzaW9ucyBvZiBNUy1XaW5kb3dzIDk1IGFuZCAiCisjfiAiV2luZG93cyBOVC4gIElmIHlvdSB1c2UgdGhlc2Ugb3BlcmF0aW5nIHN5c3RlbXMsIHRoZW4gc2VsZWN0IGNhbmNlbCwgYW5kICIKKyN+ICJjcmVhdGUgYSBzbWFsbGVyIHBhcnRpdGlvbi4gIElmIHlvdSBvbmx5IHVzZSBMaW51eCwgQlNELCBNUyBXaW5kb3dzIDk4ICIKKyN+ICJhbmQvb3IgTVMgV2luZG93cyA5NSBCLCB0aGVuIHNlbGVjdCBPSy4iCisjfiBtc2dzdHIgIiIKKyN+ICJGaWxzeXN0ZW0gYmxpdmVyIGZvciBzdG9ydCBmb3IgRkFUMTYsIHPlIEZBVDMyIHZpbCBibGl2ZSBicnVndC4gRGV0IGVyICIKKyN+ICJpa2tlIGtvbXBhdGliZWx0IG1lZCBNUy1ET1MsIHRpZGxpZ2UgdmVyc2lvbmVyIGFmIE1TLVdpbmRvd3MgOTUgZWxsZXIgIgorI34gIldpbmRvd3MgTlQuIEh2aXMgZHUgYnJ1Z2VyIGRpc3NlIG9wZXJhdGl2c3lzdGVtZXIsIHbmbGcgYW5udWxs6XIgb2cgb3ByZXQgIgorI34gImVuIG1pbmRyZSBwYXJ0aXRpb24uIEh2aXMgZHUga3VuIGFudmVuZGVyIExpbnV4LCBCU0QsIE1TIFdpbmRvd3MgOTggb2cvIgorI34gImVsbGVyIE1TIFdpbmRvd3MgOTUgQiwgduZsZyBPSy4iCisKKyN+IG1zZ2lkICJXZWlyZDogZmF0X2NhbGNfc2l6ZXMoKSBmYWlsZWQgZm9yIEZBVDMyISIKKyN+IG1zZ3N0ciAiTeZya2VsaWd0OiBmYXRfY2FsY19zaXplcygpIG1pc2x5a2tlZGVzIGZvciBGQVQzMiEiCisKKyN+IG1zZ2lkICIiCisjfiAiV291bGQgeW91IGxpa2UgdG8gdXNlIEZBVDMyIGZvciB0aGlzIGZpbGVzeXN0ZW0/ICBJdCBpcyBtdWNoIG1vcmUgIgorI34gImVmZmljaWVudCB3aXRoIHlvdXIgZGlzayBzcGFjZSwgYnV0IGlzIG5vdCBjb21wYXRpYmxlIHdpdGggZWFybHkgdmVyc2lvbnMgIgorI34gIm9mIFdpbmRvd3MgOTUgYW5kIFdpbmRvd3MgTlQuICBPbmx5IHNlbGVjdCB5ZXMgaWYgeW91IG9ubHkgdXNlIExpbnV4LCAiCisjfiAiQlNELCBNUyBXaW5kb3dzIDk4IGFuZC9vciBNUyBXaW5kb3dzIDk1IEIuIgorI34gbXNnc3RyICIiCisjfiAiVmlsIGR1IGJydWdlIEZBVDMyIHNvbSBmaWxzeXN0ZW0/IERldCBlciBtZWdldCBtZXJlIGVmZmVrdGl2dCBtZWQgIgorI34gImRpc2twbGFkc2VuLCBtZW4gZGV0IGVyIGlra2Uga29tcGF0aWJlbHQgbWVkIHRpZGxpZ2UgdmVyc2lvbmVyIGFmIFdpbmRvd3MgIgorI34gIjk1IGVsbGVyIFdpbmRvd3MgTlQuIFbmbGcga3VuIEpBIGh2aXMgZHUga3VuIGFudmVuZGVyIExpbnV4LCBCU0QsIE1TICIKKyN+ICJXaW5kb3dzIDk4IG9nL2VsbGVyIE1TIFdpbmRvd3MgOTUgQi4iCisKKyN+IG1zZ2lkICIiCisjfiAiRmlsZSBzeXN0ZW0gZG9lc24ndCBoYXZlIGV4cGVjdGVkIHNpemVzIGZvciBXaW5kb3dzIHRvIGxpa2UgaXQuICBOdW1iZXIgIgorI34gIm9mIGNsdXN0ZXJzIGlzICVkICglZCBleHBlY3RlZCk7IHNpemUgb2YgRkFUcyBpcyAlZCBzZWN0b3JzICglZCBleHBlY3RlZCkuIgorI34gbXNnc3RyICIiCisjfiAiRmlsc3lzdGVtZXQgaGFyIGlra2UgZW4gc3T4cnJlbHNlIHNvbSBXaW5kb3dzIGthbiBsaWRlLiBBbnRhbCBrbHluZ2VyIGVyICUiCisjfiAiZCAoJWQgZm9ydmVudGV0KTsgc3T4cnJlbHNlbiBw5SBGQVQtZXJuZSBlciAlZCBzZWt0b3JlciAoJWQgZm9ydmVudGV0KS4iCisKKyN+IG1zZ2lkICIiCisjfiAiUGFydGl0aW9uIHNpemUgKCVsZCBzZWN0b3JzKSBhbmQgZmlsZXN5c3RlbSBzaXplICglbGQgc2VjdG9ycykgZG8gbm90ICIKKyN+ICJtYXRjaC4iCisjfiBtc2dzdHIgIiIKKyN+ICJQYXJ0aXRpb25lbnMgc3T4cnJlbHNlICglbGQgc2VrdG9yZXIpIG9nIGZpbHN5c3RlbWV0cyBzdPhycmVsc2UgKCVsZCAiCisjfiAic2VrdG9yZXIpIHN0ZW1tZXIgaWtrZSBvdmVyZW5zLiIKKworI34gbXNnaWQgIkxpbnV4LXN3YXAgcGFydGl0aW9ucyBjYW4gbm90IGJlIGhpZGRlbiBvbiBtc2RvcyBkaXNrIGxhYmVscy4iCisjfiBtc2dzdHIgIiIKKyN+ICJMaW51eCBzd2FwcGFydGl0aW9uZXIga2FuIGlra2Ugc2tqdWxlcyBw5SBldCBmaWxzeXN0ZW0gYWYgdHlwZW4gbXNkb3MuIgorCisjfiBtc2dpZCAiTGludXgtc3dhcCBwYXJ0aXRpb25zIGNhbiBub3QgYmUgYm9vdGFibGUgb24gcGM5OCBkaXNrIGxhYmVscy4iCisjfiBtc2dzdHIgIkxpbnV4IHN3YXBwYXJ0aXRpb25lciBlciBpa2tlIG9wc3RhcnRlbGlnZSBw5SBwYzk4LiIKKworI34gbXNnaWQgIkhGUyBwYXJ0aXRpb25zIGNhbid0IGJlIGhpZGRlbiBvbiBtc2RvcyBkaXNrIGxhYmVscy4iCisjfiBtc2dzdHIgIiIKKyN+ICJQYXJ0aXRpb25lciBhZiB0eXBlIEhGUyBrYW4gaWtrZSBza2p1bGVzIHDlIGZpbHN5c3RlbWVyIGFmIHR5cGVuIG1zZG9zLiIKKworI34gbXNnaWQgIkpGUyBwYXJ0aXRpb25zIGNhbid0IGJlIGhpZGRlbiBvbiBtc2RvcyBkaXNrIGxhYmVscy4iCisjfiBtc2dzdHIgIiIKKyN+ICJQYXJ0aXRpb25lciBhZiB0eXBlIEpGUyBrYW4gaWtrZSBza2p1bGVzIHDlIGZpbHN5c3RlbWVyIGFmIHR5cGVuIG1zZG9zLiIKKworI34gbXNnaWQgIlJlaXNlcmZzIHBhcnRpdGlvbnMgY2FuJ3QgYmUgaGlkZGVuIG9uIG1zZG9zIGRpc2sgbGFiZWxzLiIKKyN+IG1zZ3N0ciAiIgorI34gIlBhcnRpdGlvbmVyIGFmIHR5cGUgUmVpc2VyZnMga2FuIGlra2Ugc2tqdWxlcyBw5SBmaWxzeXN0ZW1lciBhZiB0eXBlbiAiCisjfiAibXNkb3MuIgorCisjfiBtc2dpZCAiUmVpc2VyZnMgcGFydGl0aW9ucyBtdXN0IGJlIGJvb3RhYmxlIG9uIHBjOTggZGlzayBsYWJlbHMuIgorI34gbXNnc3RyICJSZWlzZXJmcy1wYXJ0aXRpb25lciBza2FsIHbmcmUgb3BzdGFydGVsaWdlIHDlIHBjOTguIgorCisjfiBtc2dpZCAiWEZTIHBhcnRpdGlvbnMgY2FuJ3QgYmUgaGlkZGVuIG9uIG1zZG9zIGRpc2sgbGFiZWxzLiIKKyN+IG1zZ3N0ciAiIgorI34gIlBhcnRpdGlvbmVyIGFmIHR5cGUgWEZTIGthbiBpa2tlIHNranVsZXMgcOUgZmlsc3lzdGVtZXIgYWYgdHlwZW4gbXNkb3MuIgorCisjfiBtc2dpZCAiIgorI34gIlRoZSBvcGVyYXRpbmcgc3lzdGVtIHRoaW5rcyB0aGUgZ2VvbWV0cnkgb24gJXMgaXMgJWQvJWQvJWQuICBZb3Ugc2hvdWxkICIKKyN+ICJjaGVjayB0aGF0IHRoaXMgbWF0Y2hlcyB0aGUgQklPUyBnZW9tZXRyeSBiZWZvcmUgdXNpbmcgdGhpcyBwcm9ncmFtLiIKKyN+IG1zZ3N0ciAiIgorI34gIk9wZXJhdGl2c3lzdGVtZXQgdHJvciBhdCAlcyBnZW9tZXRyaSBlciAlZC8lZC8lZC4gRHUgYvhyIGtvbnRyb2xsZXJlIGF0ICIKKyN+ICJkZXR0ZSBzdGVtbWVyIG92ZXJlbnMgbWVkIGluZm9ybWF0aW9uZW4gaSBCSU9TIGluZGVuIGR1IGFudmVuZGVyICIKKyN+ICJwcm9ncmFtbWV0LiIKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9wby9kZS5nbW8gYi9wYXJ0ZWQtMS44LjcvcG8vZGUuZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzZDY5NjMKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvcG8vZGUuZ21vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9wby9kZS5wbyBiL3BhcnRlZC0xLjguNy9wby9kZS5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2ZlNTQxCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L3BvL2RlLnBvCkBAIC0wLDAgKzEsMzM3MSBAQAorIyBHZXJtYW4gbWVzc2FnZSBmb3IgR05VIHBhcnRlZC4KKyMgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBNYXJ0aW4gdm9uIEz2d2lzIDxtYXJ0aW5Adi5sb2V3aXMuZGU+LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogR05VIHBhcnRlZCAxLjYuNC1wcmUyXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGJ1Zy1wYXJ0ZWRAZ251Lm9yZ1xuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDA3LTA1LTA5IDE3OjAyLTA0MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDAyLTEyLTA2IDA4OjU1KzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IE1hcnRpbiB2b24gTPZ3aXMgPG1hcnRpbkB2LmxvZXdpcy5kZT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBHZXJtYW4gPGRlQGxpLm9yZz5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1JU08tODg1OS0xXG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOC1iaXRcbiIKKworIzogbGliL2Nsb3Nlb3V0LmM6NzQKK21zZ2lkICJ3cml0ZSBlcnJvciIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXJyb3IuYzoxMjUKKyMsIGZ1enp5Cittc2dpZCAiVW5rbm93biBzeXN0ZW0gZXJyb3IiCittc2dzdHIgIlVuYmVrYW5udGVyIERhdGVpc3lzdGVtdHlwILslc6suIgorCisjOiBsaWIvZ2V0b3B0LmM6NTMxIGxpYi9nZXRvcHQuYzo1NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiBgJXMnIGlzIGFtYmlndW91c1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo1ODAgbGliL2dldG9wdC5jOjU4NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIGAtLSVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjU5MyBsaWIvZ2V0b3B0LmM6NTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYCVjJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6NjQxIGxpYi9nZXRvcHQuYzo2NjAgbGliL2dldG9wdC5jOjk3NiBsaWIvZ2V0b3B0LmM6OTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYCVzJyByZXF1aXJlcyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo2OTggbGliL2dldG9wdC5jOjcwMQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5yZWNvZ25pemVkIG9wdGlvbiBgLS0lcydcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6NzA5IGxpYi9nZXRvcHQuYzo3MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVucmVjb2duaXplZCBvcHRpb24gYCVjJXMnXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjc2NCBsaWIvZ2V0b3B0LmM6NzY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbGxlZ2FsIG9wdGlvbiAtLSAlY1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo3NzMgbGliL2dldG9wdC5jOjc3NgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBvcHRpb24gLS0gJWNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6ODI4IGxpYi9nZXRvcHQuYzo4NDQgbGliL2dldG9wdC5jOjEwNDggbGliL2dldG9wdC5jOjEwNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCAtLSAlY1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo4OTcgbGliL2dldG9wdC5jOjkxMworIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIGAtVyAlcycgaXMgYW1iaWd1b3VzXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjkzNyBsaWIvZ2V0b3B0LmM6OTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYC1XICVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6CisjLiBHZXQgdHJhbnNsYXRpb25zIGZvciBvcGVuIGFuZCBjbG9zaW5nIHF1b3RhdGlvbiBtYXJrcy4KKyMuCisjLiBUaGUgbWVzc2FnZSBjYXRhbG9nIHNob3VsZCB0cmFuc2xhdGUgImAiIHRvIGEgbGVmdAorIy4gcXVvdGF0aW9uIG1hcmsgc3VpdGFibGUgZm9yIHRoZSBsb2NhbGUsIGFuZCBzaW1pbGFybHkgZm9yCisjLiAiJyIuICBJZiB0aGUgY2F0YWxvZyBoYXMgbm8gdHJhbnNsYXRpb24sCisjLiBsb2NhbGVfcXVvdGluZ19zdHlsZSBxdW90ZXMgYGxpa2UgdGhpcycsIGFuZAorIy4gY2xvY2FsZV9xdW90aW5nX3N0eWxlIHF1b3RlcyAibGlrZSB0aGlzIi4KKyMuCisjLiBGb3IgZXhhbXBsZSwgYW4gQW1lcmljYW4gRW5nbGlzaCBVbmljb2RlIGxvY2FsZSBzaG91bGQKKyMuIHRyYW5zbGF0ZSAiYCIgdG8gVSsyMDFDIChMRUZUIERPVUJMRSBRVU9UQVRJT04gTUFSSyksIGFuZAorIy4gc2hvdWxkIHRyYW5zbGF0ZSAiJyIgdG8gVSsyMDFEIChSSUdIVCBET1VCTEUgUVVPVEFUSU9OCisjLiBNQVJLKS4gIEEgQnJpdGlzaCBFbmdsaXNoIFVuaWNvZGUgbG9jYWxlIHNob3VsZCBpbnN0ZWFkCisjLiB0cmFuc2xhdGUgdGhlc2UgdG8gVSsyMDE4IChMRUZUIFNJTkdMRSBRVU9UQVRJT04gTUFSSykgYW5kCisjLiBVKzIwMTkgKFJJR0hUIFNJTkdMRSBRVU9UQVRJT04gTUFSSyksIHJlc3BlY3RpdmVseS4KKyMuCisjLiBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIHB1dCBoZXJlLCBwbGVhc2Ugc2VlCisjLiA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9RdW90YXRpb25fbWFyayNHbHlwaHM+CisjLiBhbmQgdXNlIGdseXBocyBzdWl0YWJsZSBmb3IgeW91ciBsYW5ndWFnZS4KKyM6IGxpYi9xdW90ZWFyZy5jOjIyOQorbXNnaWQgImAiCittc2dzdHIgIiIKKworIzogbGliL3F1b3RlYXJnLmM6MjMwCittc2dpZCAiJyIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjEzMQorbXNnaWQgIlN1Y2Nlc3MiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxMzQKK21zZ2lkICJObyBtYXRjaCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjEzNworbXNnaWQgIkludmFsaWQgcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTQwCittc2dpZCAiSW52YWxpZCBjb2xsYXRpb24gY2hhcmFjdGVyIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTQzCittc2dpZCAiSW52YWxpZCBjaGFyYWN0ZXIgY2xhc3MgbmFtZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE0NgorbXNnaWQgIlRyYWlsaW5nIGJhY2tzbGFzaCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE0OQorbXNnaWQgIkludmFsaWQgYmFjayByZWZlcmVuY2UiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNTIKK21zZ2lkICJVbm1hdGNoZWQgWyBvciBbXiIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE1NQorbXNnaWQgIlVubWF0Y2hlZCAoIG9yIFxcKCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE1OAorbXNnaWQgIlVubWF0Y2hlZCBcXHsiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNjEKK21zZ2lkICJJbnZhbGlkIGNvbnRlbnQgb2YgXFx7XFx9IgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTY0Cittc2dpZCAiSW52YWxpZCByYW5nZSBlbmQiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNjcKK21zZ2lkICJNZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTcwCittc2dpZCAiSW52YWxpZCBwcmVjZWRpbmcgcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTczCittc2dpZCAiUHJlbWF0dXJlIGVuZCBvZiByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNzYKK21zZ2lkICJSZWd1bGFyIGV4cHJlc3Npb24gdG9vIGJpZyIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE3OQorbXNnaWQgIlVubWF0Y2hlZCApIG9yIFxcKSIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjY4MAorbXNnaWQgIk5vIHByZXZpb3VzIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvcnBtYXRjaC5jOjcwCittc2dpZCAiXlt5WV0iCittc2dzdHIgIiIKKworIzogbGliL3JwbWF0Y2guYzo3MworbXNnaWQgIl5bbk5dIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBUcmFuc2xhdGUgIihDKSIgdG8gdGhlIGNvcHlyaWdodCBzeW1ib2wKKyMuIChDLWluLWEtY2lyY2xlKSwgaWYgdGhpcyBzeW1ib2wgaXMgYXZhaWxhYmxlIGluIHRoZSB1c2VyJ3MKKyMuIGxvY2FsZS4gIE90aGVyd2lzZSwgZG8gbm90IHRyYW5zbGF0ZSAiKEMpIjsgbGVhdmUgaXQgYXMtaXMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzo2NgorbXNnaWQgIihDKSIKK21zZ3N0ciAiIgorCisjOiBsaWIvdmVyc2lvbi1ldGMuYzo2OAorbXNnaWQgIiIKKyJcbiIKKyJMaWNlbnNlIEdQTHYyKzogR05VIEdQTCB2ZXJzaW9uIDIgb3IgbGF0ZXIgPGh0dHA6Ly9nbnUub3JnL2xpY2Vuc2VzL2dwbC4iCisiaHRtbD5cbiIKKyJUaGlzIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBhcmUgZnJlZSB0byBjaGFuZ2UgYW5kIHJlZGlzdHJpYnV0ZSBpdC5cbiIKKyJUaGVyZSBpcyBOTyBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3LlxuIgorIlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIzogbGliL3ZlcnNpb24tZXRjLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiV3JpdHRlbiBieSAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIzogbGliL3ZlcnNpb24tZXRjLmM6ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiV3JpdHRlbiBieSAlcyBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIldyaXR0ZW4gYnkgJXMsICVzLCBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyJhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6MTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiJXMsIGFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyIlcywgJXMsIGFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzoxMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyIlcywgJXMsICVzLCBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6MTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiJXMsICVzLCAlcywgJXMsXG4iCisiYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjLiBZb3UgY2FuIHVzZSBsaW5lIGJyZWFrcywgZXN0aW1hdGluZyB0aGF0IGVhY2ggYXV0aG9yIG5hbWUgb2NjdXBpZXMKKyMuIGNhLiAxNiBzY3JlZW4gY29sdW1ucyBhbmQgdGhhdCBhIHNjcmVlbiBsaW5lIGhhcyBjYS4gODAgY29sdW1ucy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjEzMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorIiVzLCAlcywgJXMsICVzLFxuIgorIiVzLCBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6MTQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiJXMsICVzLCAlcywgJXMsXG4iCisiJXMsICVzLCBhbmQgb3RoZXJzLlxuIgorbXNnc3RyICIiCisKKyM6IGxpYi94YWxsb2MtZGllLmM6MzUKK21zZ2lkICJtZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzoyMzcKK21zZ2lkICJEaXNrIEltYWdlIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzozMzggbGlicGFydGVkL2FyY2gvZ251LmM6MjYxCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjEyNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igb3BlbmluZyAlczogJXMiCittc2dzdHIgIkZlaGxlciBiZWltINZmZm5lbiB2b24gJXM6ICVzLiIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjM0OSBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzoyNzEKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTI4MworIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gb3BlbiAlcyByZWFkLXdyaXRlICglcykuICAlcyBoYXMgYmVlbiBvcGVuZWQgcmVhZC1vbmx5LiIKK21zZ3N0ciAiIgorIkthbm4gJXMgbmljaHQgenVtIFNjaHJlaWJlbiD2ZmZuZW4gKCVzKS4gJXMgd3VyZGUgbnVyIHp1bSBMZXNlbiBnZfZmZm5ldC4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzo0MTEgbGlicGFydGVkL2FyY2gvbGludXguYzoxNDMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGR1cmluZyBzZWVrIGZvciByZWFkIG9uICVzIgorbXNnc3RyICIlcywgd+RocmVuZCAlcyB6dW0gTGVzZW4gcG9zaXRpb25pZXJ0IHd1cmRlLiIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjQ0NCBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo0NDkgbGlicGFydGVkL2FyY2gvZ251LmM6NTQ4CisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo2NzYgbGlicGFydGVkL2FyY2gvbGludXguYzoxMzkxCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjE0NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZHVyaW5nIHJlYWQgb24gJXMiCittc2dzdHIgIiVzLCB35GhyZW5kIHZvbiAlcyBnZWxlc2VuIHd1cmRlLiIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjQ4MCBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo1MDkKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTU0NgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW4ndCB3cml0ZSB0byAlcywgYmVjYXVzZSBpdCBpcyBvcGVuZWQgcmVhZC1vbmx5LiIKK21zZ3N0ciAiIgorIkF1ZiAlcyBrYW5uIG5pY2h0IGdlc2NocmllYmVuIHdlcmRlbiwgd2VpbCBlcyBudXItbGVzZW5kIGdl9mZmbmV0IHd1cmRlLiIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjQ5NiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjE1NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZHVyaW5nIHNlZWsgZm9yIHdyaXRlIG9uICVzIgorbXNnc3RyICIlcywgd+RocmVuZCAlcyB6dW0gU2NocmVpYmVuIHBvc2l0aW9uaWVydCB3dXJkZS4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzo1MzMgbGlicGFydGVkL2FyY2gvZ251LmM6NTg1IGxpYnBhcnRlZC9hcmNoL2dudS5jOjYzMAorIzogbGlicGFydGVkL2FyY2gvZ251LmM6NzA3IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTUxNworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxNjEyIGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTY4NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkdXJpbmcgd3JpdGUgb24gJXMiCittc2dzdHIgIiVzLCB35GhyZW5kIGF1ZiAlcyBnZXNjaHJpZWJlbiB3dXJkZS4iCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6NjMgcGFydHByb2JlL3BhcnRwcm9iZS5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICJUcnkgYCVzIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4iCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICVzIFtPUFRJT05dXG4iCisiICBvcjogICVzIERFVklDRSBNSU5PUlxuIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6NzAKK21zZ2lkICIiCisiQ2xlYXIgdW51c2VkIHNwYWNlIG9uIGEgRkFUIHBhcnRpdGlvbiAoYSBHTlUgUGFydGVkIHRlc3RpbmcgdG9vbCkuXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo3NAorbXNnaWQgIiAgICAgIC0taGVscCAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXRcbiIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjc1Cittc2dpZCAiICAgICAgLS12ZXJzaW9uICBvdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdFxuIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6NzcgcGFydHByb2JlL3BhcnRwcm9iZS5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiUmVwb3J0IGJ1Z3MgdG8gPCVzPi5cbiIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjI4NQorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gZmV3IGFyZ3VtZW50cyIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjI5MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIgorbXNnc3RyICJadSB2aWVsZSBmYWxzY2hlIFNlaXRlbi4iCisKKyM6IHBhcnRwcm9iZS9wYXJ0cHJvYmUuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFtPUFRJT05dIFtERVZJQ0VdLi4uXG4iCittc2dzdHIgIiIKKworIzogcGFydHByb2JlL3BhcnRwcm9iZS5jOjE0MgorbXNnaWQgIiIKKyJJbmZvcm0gdGhlIE9TIG9mIHBhcnRpdGlvbiB0YWJsZSBjaGFuZ2VzLlxuIgorIlxuIgorIiAgLWQsIC0tbm8tdXBkYXRlICBkb24ndCB1cGRhdGUgdGhlIGtlcm5lbFxuIgorIiAgLXMsIC0tc3VtbWFyeSAgICBwcmludCBhIHN1bW1hcnkgb2YgY29udGVudHNcbiIKKyIgIC1oLCAtLWhlbHAgICAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXRcbiIKKyIgIC12LCAtLXZlcnNpb24gICAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXRcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0cHJvYmUvcGFydHByb2JlLmM6MTUwCittc2dpZCAiIgorIlxuIgorIldpdGggbm8gREVWSUNFLCBwcm9iZSBhbGwgcGFydGl0aW9ucy5cbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gb3BlbiAlcy4iCittc2dzdHIgIiVzIGthbm4gbmljaHQgZ2X2ZmZuZXQgd2VyZGVuLiIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6MTE0Cittc2dpZCAiVW5hYmxlIHRvIHByb2JlIHN0b3JlLiIKK21zZ3N0ciAiRGVyIFNwZWljaGVyIGtvbm50ZSBuaWNodCB1bnRlcnN1Y2h0IHdlcmRlbi4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjM1MgorIywgZnV6enkKK21zZ2lkICIiCisiVGhlIHBhcnRpdGlvbiB0YWJsZSBjYW5ub3QgYmUgcmUtcmVhZC4gIFRoaXMgbWVhbnMgeW91IG5lZWQgdG8gcmVib290IGJlZm9yZSAiCisibW91bnRpbmcgYW55IG1vZGlmaWVkIHBhcnRpdGlvbnMuICBZb3UgYWxzbyBuZWVkIHRvIHJlaW5zdGFsbCB5b3VyIGJvb3QgIgorImxvYWRlciBiZWZvcmUgeW91IHJlYm9vdCAod2hpY2ggbWF5IHJlcXVpcmUgbW91bnRpbmcgbW9kaWZpZWQgcGFydGl0aW9ucykuICAiCisiSXQgaXMgaW1wb3NzaWJsZSBkbyBib3RoIHRoaW5ncyEgIFNvIHlvdSdsbCBuZWVkIHRvIGJvb3Qgb2ZmIGEgcmVzY3VlIGRpc2ssICIKKyJhbmQgcmVpbnN0YWxsIHlvdXIgYm9vdCBsb2FkZXIgZnJvbSB0aGUgcmVzY3VlIGRpc2suICBSZWFkIHNlY3Rpb24gNCBvZiB0aGUgIgorIlBhcnRlZCBVc2VyIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorbXNnc3RyICIiCisiSWhyZSBQYXJ0aXRpb25zdGFiZWxsZSBrb25udGUgbmljaHQgbmV1IGdlbGVzZW4gd2VyZGVuOyBTaWUgbfxzc2VuIGFsc28gbmV1ICIKKyJib290ZW4sIGJldm9yIFNpZSBnZeRuZGVydGUgUGFydGl0aW9uZW4gZWluaORuZ2VuLiBTaWUgbfxzc2VuIGF1Y2ggSWhyZW4gIgorIkJvb3RsYWRlciB2b3IgZGVtIEJvb3RlbiByZWluc3RhbGxpZXJlbiAod2FzIHUuVS4gZGFzIEVpbmjkbmdlbiBnZeRuZGVydGVyICIKKyJQYXJ0aXRpb25lbiBlcmZvcmRlcnQpLiBNYW4ga2FubiBuaWNodCBiZWlkZXMgdHVuISBBbHNvIG38c3NlbiBTaWUgdm9uIGVpbmVyICIKKyJSZXR0dW5nc2Rpc2tldHRlIGJvb3RlbiB1bmQgaWhyZW4gQm9vdGxhZGVyIHZvbiBkb3J0IHJlaW5zdGFsbGllcmVuLiBMZXNlbiAiCisiU2llIEFic2Nobml0dCA0IGRlciBQYXJ0ZWQtTnV0emVyZG9rdW1lbnRhdGlvbiBm/HIgRGV0YWlscy4iCisKKyMgWFhYIEVuZ2xpc2NoZXIgVGV4dCBpc3QgVW5zaW5uLgorIzogbGlicGFydGVkL2FyY2gvZ251LmM6MzY5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIHBhcnRpdGlvbiB0YWJsZSBvbiAlcyBjYW5ub3QgYmUgcmUtcmVhZCAoJXMpLiAgVGhpcyBtZWFucyB0aGUgSHVyZCBrbm93cyAiCisibm90aGluZyBhYm91dCBhbnkgbW9kaWZpY2F0aW9ucyB5b3UgbWFkZS4gIFlvdSBzaG91bGQgcmVib290IHlvdXIgY29tcHV0ZXIgIgorImJlZm9yZSBkb2luZyBhbnl0aGluZyB3aXRoICVzLiIKK21zZ3N0ciAiIgorIkRpZSBQYXJ0aXRpb25zdGFiZWxsZSBhdWYgJXMgKCVzKS4gRGFzIGJlZGV1dGV0LCBkYXNzIGRhcyBIdXJkIG5pY2h0cyD8YmVyICIKKyJJaHJlIMRuZGVydW5nZW4gd2Vpc3MuIFNpZSBzb2xsdGVuIGRlbiBDb21wdXRlciBuZXUgc3RhcnRlbiwgYmV2b3IgU2llICIKKyJpcmdlbmR3YXMgbWl0ICVzIG1hY2hlbi4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjM4MCBwYXJ0ZWQvcGFydGVkLmM6MjQ0MworbXNnaWQgIiIKKyJZb3Ugc2hvdWxkIHJlaW5zdGFsbCB5b3VyIGJvb3QgbG9hZGVyIGJlZm9yZSByZWJvb3RpbmcuICBSZWFkIHNlY3Rpb24gNCBvZiAiCisidGhlIFBhcnRlZCBVc2VyIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorbXNnc3RyICIiCisiU2llIHNvbGx0ZW4gSWhyZW4gQm9vdGxhZGVyIG5ldSBpbnN0YWxsaWVyZW4gdm9yIGRlbSBOZXVib290ZW4uICBMZXNlbiBTaWUgIgorIkFic2Nobml0dCA0IGRlciBQYXJ0ZWQtTnV0emVyZG9rdW1lbnRhdGlvbiBm/HIgbWVociBJbmZvcm1hdGlvbi4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjc3MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB0cnlpbmcgdG8gc3luYyAlcyB0byBkaXNrIgorbXNnc3RyICIlcyBiZWltIFZlcnN1Y2gsICVzIGF1ZiBkaWUgUGxhdHRlIHp1IHNwZWljaGVybiAoc3luYykuIgorCisjIGNmb3JtYXQgcmVtb3ZlZCBmb3IgdGVzdGluZworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo0MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHN0YXQgZGV2aWNlICVzIC0gJXMuIgorbXNnc3RyICJSdWYgdm9uIHN0YXQgZvxyIEdlcuR0ICVzIHNjaGx1ZyBmZWhsIC0gJXMuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjUyMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGRldGVybWluZSBzZWN0b3Igc2l6ZSBmb3IgJXM6ICVzLlxuIgorIlVzaW5nIHRoZSBkZWZhdWx0IHNlY3RvciBzaXplICglbGxkKS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo1MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkRldmljZSAlcyBoYXMgYSBsb2dpY2FsIHNlY3RvciBzaXplIG9mICVsbGQuICBOb3QgYWxsIHBhcnRzIG9mIEdOVSBQYXJ0ZWQgIgorInN1cHBvcnQgdGhpcyBhdCB0aGUgbW9tZW50LCBhbmQgdGhlIHdvcmtpbmcgY29kZSBpcyBISUdITFkgRVhQRVJJTUVOVEFMLlxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6NTc5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZGV0ZXJtaW5lIHRoZSBzaXplIG9mICVzICglcykuIgorbXNnc3RyICJEaWUgR3L232Ugdm9uICVzIGthbm4gbmljaHQgZmVzdGdlc3RlbGx0IHdlcmRlbiAoJXMpLiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo2NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGdldCBpZGVudGl0eSBvZiBkZXZpY2UgJXMgLSAlcyIKK21zZ3N0ciAiRGllIElkZW50aXTkdCB2b24gR2Vy5HQgJXMga29ubnRlIG5pY2h0IGVybWl0dGVsdCB3ZXJkZW4gLSAlcy4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6Njc3Cittc2dpZCAiR2VuZXJpYyBJREUiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkRldmljZSAlcyBoYXMgbXVsdGlwbGUgKCVkKSBsb2dpY2FsIHNlY3RvcnMgcGVyIHBoeXNpY2FsIHNlY3Rvci5cbiIKKyJHTlUgUGFydGVkIHN1cHBvcnRzIHRoaXMgRVhQRVJJTUVOVEFMTFkgZm9yIHNvbWUgc3BlY2lhbCBkaXNrIGxhYmVsL2ZpbGUgIgorInN5c3RlbSBjb21iaW5hdGlvbnMsIGUuZy4gR1BUIGFuZCBleHQyLzMuXG4iCisiUGxlYXNlIGNvbnN1bHQgdGhlIHdlYiBzaXRlIGZvciB1cC10by1kYXRlIGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjg3MworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBpbml0aWFsaXNpbmcgU0NTSSBkZXZpY2UgJXMgLSAlcyIKK21zZ3N0ciAiRmVobGVyIGluIGRlciBJbml0aWFsaXNpZXJ1bmcgdm9uIFNDU0ktR2Vy5HQgJXMgLSAlcy4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6OTI4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGRldmljZSAlcyBoYXMgemVybyBsZW5ndGgsIGFuZCBjYW4ndCBwb3NzaWJseSBzdG9yZSBhIGZpbGUgc3lzdGVtIG9yICIKKyJwYXJ0aXRpb24gdGFibGUuICBQZXJoYXBzIHlvdSBzZWxlY3RlZCB0aGUgd3JvbmcgZGV2aWNlPyIKK21zZ3N0ciAiIgorIkRhcyBHZXLkdCAlcyBoYXQgZGllIEzkbmdlIDAsIHVuZCBrYW5uIHVubfZnbGljaCBlaW4gRGF0ZWlzeXN0ZW0gb2RlciBlaW5lICIKKyJQYXJ0aXRpb25zdGFiZWxsZSBzcGVpY2hlcm4uIFZpZWxsZWljaHQgaGFiZW4gU2llIGRhcyBmYWxzY2hlIEdlcuR0ICIKKyJhdXNnZXfkaGx0PyIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMDMyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiVW5hYmxlIHRvIGRldGVybWluZSBnZW9tZXRyeSBvZiBmaWxlL2RldmljZSAlcy4gIFlvdSBzaG91bGQgbm90IHVzZSBQYXJ0ZWQgIgorInVubGVzcyB5b3UgUkVBTExZIGtub3cgd2hhdCB5b3UncmUgZG9pbmchIgorbXNnc3RyICIiCisiR2VvbWV0cmllIHZvbiBEYXRlaS9HZXLkdCBrb25udGUgbmljaHQgZXJtaXR0ZWx0IHdlcmRlbi4gU2llIHNvbGx0ZW4gUGFydGVkICIKKyJuaWNodCB2ZXJ3ZW5kZW4sIHdlbm4gc2llIG5pY2h0IFdJUktMSUNIIHdpc3NlbiB3YXMgU2llIHR1biEiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTExMAorbXNnaWQgIkRBQzk2MCBSQUlEIGNvbnRyb2xsZXIiCittc2dzdHIgIkRBQzk2MCBSQUlEIGNvbnRyb2xsZXIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTExNQorbXNnaWQgIlByb21pc2UgU1g4IFNBVEEgRGV2aWNlIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTEyMAorbXNnaWQgIklCTSBTMzkwIERBU0QgZHJpdmUiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTI1Cittc2dpZCAiSUJNIGlTZXJpZXMgVmlydHVhbCBEQVNEIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTEzMAorbXNnaWQgIkNvbXBhcSBTbWFydCBBcnJheSIKK21zZ3N0ciAiQ29tcGFxIFNtYXJ0IEFycmF5IgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExMzUKK21zZ2lkICJBVEFSQUlEIENvbnRyb2xsZXIiCittc2dzdHIgIkFUQVJBSUQgQ29udHJvbGxlciIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTQwCittc2dpZCAiSTJPIENvbnRyb2xsZXIiCittc2dzdHIgIkkyMCBjb250cm9sbGVyIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExNDUKK21zZ2lkICJVc2VyLU1vZGUgTGludXggVUJEIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTE1NgorbXNnaWQgIkxpbnV4IGRldmljZS1tYXBwZXIiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTYyCittc2dpZCAiVW5rbm93biIKK21zZ3N0ciAiVW5iZWthbm50IgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExNjkKK21zZ2lkICJwZWRfZGV2aWNlX25ldygpICBVbnN1cHBvcnRlZCBkZXZpY2UgdHlwZSIKK21zZ3N0ciAicGVkX2RldmljZV9uZXcoKSAgTmljaHR1bnRlcnN0/HR6dGVyIEdlcuR0ZXR5cC4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MjA4MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIkVycm9yIGluZm9ybWluZyB0aGUga2VybmVsIGFib3V0IG1vZGlmaWNhdGlvbnMgdG8gcGFydGl0aW9uICVzIC0tICVzLiAgVGhpcyAiCisibWVhbnMgTGludXggd29uJ3Qga25vdyBhYm91dCBhbnkgY2hhbmdlcyB5b3UgbWFkZSB0byAlcyB1bnRpbCB5b3UgcmVib290IC0tICIKKyJzbyB5b3Ugc2hvdWxkbid0IG1vdW50IGl0IG9yIHVzZSBpdCBpbiBhbnkgd2F5IGJlZm9yZSByZWJvb3RpbmcuIgorbXNnc3RyICIiCisiRmVobGVyIGJlaW0gSW5mb3JtaWVyZW4gZGVzIEtlcm5lbHMg/GJlciDEbmRlcnVuZ2VuIGRlciBQYXJ0aXRpb24gJXMgLSAlcy4gIgorIkRhcyBiZWRldXRldCwgZGFzcyBMaW51eCBJaHJlIMRuZGVydW5nZW4gYW4gJXMgbmljaHQgYmlzIHp1bSBOZXVzdGFydCBzZWhlbiAiCisid2lyZCAtIFNpZSBzb2xsdGVuIGRpZSBQYXJ0aXRpb24gbmljaHQgZWluaORuZ2VuIG9kZXIgaXJnZW5kIHNvbnN0IGJlbnV0emVuLCAiCisiYmlzIFNpZSBkZW4gUmVjaG5lciBuZXUgZ2VzdGFydGV0IGhhYmVuLiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoyMjYyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisicGFydGVkIHdhcyB1bmFibGUgdG8gcmUtcmVhZCB0aGUgcGFydGl0aW9uIHRhYmxlIG9uICVzICglcykuICBUaGlzIG1lYW5zICIKKyJMaW51eCB3b24ndCBrbm93IGFueXRoaW5nIGFib3V0IHRoZSBtb2RpZmljYXRpb25zIHlvdSBtYWRlLiAiCittc2dzdHIgIiIKKyJEZXIgS2VybmVsIGtvbm50ZSBkaWUgUGFydGl0aW9uc3RhYmVsbGUgdm9uICVzIG5pY2h0IG5ldSBlaW5sZXNlbiAoJXMpLiBEYXMgIgorImJlZGV1dGV0LCBkYd8gTGludXggYmlzIHp1bSBOZXVzdGFydCBuaWNodHMg/GJlciBJaHJlciBNb2RpZmlrYXRpb25lbiB3ZWnfLiAiCisiU2llIHNvbGx0ZW4gZGVuIFJlY2huZXIgbmV1IHN0YXJ0ZW4sIGJldm9yIFNpZSAlcyBpbiBpcmdlbmQgZWluZXIgQXJ0ICIKKyJ2ZXJ3ZW5kZW4uIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjIzNjgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUga2VybmVsIHdhcyB1bmFibGUgdG8gcmUtcmVhZCB0aGUgcGFydGl0aW9uIHRhYmxlIG9uICVzICglcykuICBUaGlzIG1lYW5zICIKKyJMaW51eCB3b24ndCBrbm93IGFueXRoaW5nIGFib3V0IHRoZSBtb2RpZmljYXRpb25zIHlvdSBtYWRlIHVudGlsIHlvdSAiCisicmVib290LiAgWW91IHNob3VsZCByZWJvb3QgeW91ciBjb21wdXRlciBiZWZvcmUgZG9pbmcgYW55dGhpbmcgd2l0aCAlcy4iCittc2dzdHIgIiIKKyJEZXIgS2VybmVsIGtvbm50ZSBkaWUgUGFydGl0aW9uc3RhYmVsbGUgdm9uICVzIG5pY2h0IG5ldSBlaW5sZXNlbiAoJXMpLiBEYXMgIgorImJlZGV1dGV0LCBkYd8gTGludXggYmlzIHp1bSBOZXVzdGFydCBuaWNodHMg/GJlciBJaHJlciBNb2RpZmlrYXRpb25lbiB3ZWnfLiAiCisiU2llIHNvbGx0ZW4gZGVuIFJlY2huZXIgbmV1IHN0YXJ0ZW4sIGJldm9yIFNpZSAlcyBpbiBpcmdlbmQgZWluZXIgQXJ0ICIKKyJ2ZXJ3ZW5kZW4uIgorCisjOiBsaWJwYXJ0ZWQvY3MvZ2VvbS5jOjE2MgorbXNnaWQgIkNhbid0IGhhdmUgdGhlIGVuZCBiZWZvcmUgdGhlIHN0YXJ0ISIKK21zZ3N0ciAiRGFzIEVuZGUga29tbXQgbmljaHQgdm9yIGRlbSBTdGFydCEiCisKKyM6IGxpYnBhcnRlZC9jcy9nZW9tLmM6MTY5Cittc2dpZCAiQ2FuJ3QgaGF2ZSBhIHBhcnRpdGlvbiBvdXRzaWRlIHRoZSBkaXNrISIKK21zZ3N0ciAiUGFydGl0aW9uZW4gYXVzc2VyaGFsYiBkZXIgUGxhdHRlIHNpbmQgbmljaHQgbfZnbGljaCEiCisKKyM6IGxpYnBhcnRlZC9jcy9nZW9tLmM6MzY2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJBdHRlbXB0IHRvIHdyaXRlIHNlY3RvcnMgJWxkLSVsZCBvdXRzaWRlIG9mIHBhcnRpdGlvbiBvbiAlcy4iCittc2dzdHIgIiIKKyJWZXJzdWNoLCBkaWUgU2VrdG9yZW4gJWxkLSVsZCBhdd9lcmhhbGIgZGVyIFBhcnRpdGlvbiBhdWYgJXMgenUgc2NocmVpYmVuLiIKKworIzogbGlicGFydGVkL2NzL2dlb20uYzo0MDYgbGlicGFydGVkL2ZzL2xpbnV4X3N3YXAvbGludXhfc3dhcC5jOjQ3NQorbXNnaWQgImNoZWNraW5nIGZvciBiYWQgYmxvY2tzIgorbXNnc3RyICJUZXN0IGF1ZiBzY2hsZWN0ZSBCbPZja2UiCisKKyM6IGxpYnBhcnRlZC9kZWJ1Zy5jOjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWNrdHJhY2UgaGFzICVkIGNhbGxzIG9uIHN0YWNrOlxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9kZWJ1Zy5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJBc3NlcnRpb24gKCVzKSBhdCAlczolZCBpbiBmdW5jdGlvbiAlcygpIGZhaWxlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIG9wZW4gJXMgLSB1bnJlY29nbmlzZWQgZGlzayBsYWJlbC4iCittc2dzdHIgIiVzIGthbm4gbmljaHQgZ2X2ZmZuZXQgd2VyZGVuIC0gdW5lcmthbm50ZXMgRGlza2xhYmVsLiIKKworIzogbGlicGFydGVkL2Rpc2suYzo0NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgbGlicGFydGVkIGRvZXNuJ3QgaGF2ZSB3cml0ZSBzdXBwb3J0IGZvciAlcy4gIFBlcmhhcHMgaXQgd2FzIGNvbXBpbGVkICIKKyJyZWFkLW9ubHkuIgorbXNnc3RyICIiCisiRGllc2VyIGxpYnBhcnRlZCBmZWhsdCBkaWUgU2NocmVpYnVudGVydPx0enVuZyBm/HIgJXMuIFZpZWxsZWljaHQgd3VyZGUgc2llICIKKyJudXIgenVtIExlc2VuIPxiZXJzZXR6dC4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6NTk4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJQYXJ0aXRpb24gJWQgaXMgJXMsIGJ1dCB0aGUgZmlsZSBzeXN0ZW0gaXMgJXMuIgorbXNnc3RyICJEaWUgUGFydGl0aW9uICVkIGhhdCAlLjNmTWIsIGFiZXIgZGFzIERhdGVpc3lzdGVtIGhhdCAlLjNmTWIuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjEwNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZGlzayBsYWJlbHMgZG8gbm90IHN1cHBvcnQgZXh0ZW5kZWQgcGFydGl0aW9ucy4iCittc2dzdHIgIiVzLURpc2stTGFiZWxzIHVudGVyc3T8dHplbiBrZWluZSBlcndlaXRlcnRlbiBQYXJ0aXRpb25lbi4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTYzNAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkaXNrIGxhYmVscyBkb24ndCBzdXBwb3J0IGxvZ2ljYWwgb3IgZXh0ZW5kZWQgcGFydGl0aW9ucy4iCittc2dzdHIgIiIKKyIlcy1EaXNrLUxhYmVscyB1bnRlcnN0/HR6ZW4ga2VpbmUgbG9naXNjaGVuIG9kZXIgZXJ3ZWl0ZXJ0ZW4gUGFydGl0aW9uZW4uIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE2NDcKKyMsIGZ1enp5Cittc2dpZCAiVG9vIG1hbnkgcHJpbWFyeSBwYXJ0aXRpb25zLiIKK21zZ3N0ciAiWnUgdmllbGUgcHJpbeRyZSBQYXJ0aXRpb25lbi4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTY1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2FuJ3QgYWRkIGEgbG9naWNhbCBwYXJ0aXRpb24gdG8gJXMsIGJlY2F1c2UgdGhlcmUgaXMgbm8gZXh0ZW5kZWQgcGFydGl0aW9uLiIKK21zZ3N0ciAiIgorIlp1ICVzIGthbm4ga2VpbmUgbG9naXNjaGUgUGFydGl0aW9uIGhpbnp1Z2Vm/Gd0IHdlcmRlbiwgZGEgZXMga2VpbmUgIgorImVyd2VpdGVydGUgUGFydGl0aW9uIGdpYnQuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE2ODAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkNhbid0IGhhdmUgbW9yZSB0aGFuIG9uZSBleHRlbmRlZCBwYXJ0aXRpb24gb24gJXMuIgorbXNnc3RyICJBdWYgJXMga2FubiBlcyBo9mNoc3RlbnMgZWluZSBlcndlaXRlcnRlIFBhcnRpdGlvbiBnZWJlbi4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTY5MAorbXNnaWQgIkNhbid0IGhhdmUgbG9naWNhbCBwYXJ0aXRpb25zIG91dHNpZGUgb2YgdGhlIGV4dGVuZGVkIHBhcnRpdGlvbi4iCittc2dzdHIgIiIKKyJFaW5lIGxvZ2lzY2hlIFBhcnRpdGlvbiBrYW5uIG5pY2h0IGF132VyaGFsYiBkZXIgZXJ3ZWl0ZXJ0ZW4gUGFydGl0aW9uICIKKyJleGlzdGllcmVuLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbid0IGhhdmUgYSBsb2dpY2FsIHBhcnRpdGlvbiBvdXRzaWRlIG9mIHRoZSBleHRlbmRlZCBwYXJ0aXRpb24gb24gJXMuIgorbXNnc3RyICIiCisiQXXfZXJoYWxiIGRlciBlcndlaXRlcnRlbiBQYXJ0aXRpb24gYXVmICVzIGv2bm5lbiBrZWluZSBsb2dpc2NoZW5cbiIKKyJQYXJ0aXRpb24gZXhpc3RpZXJlbi4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTcyNSBsaWJwYXJ0ZWQvZGlzay5jOjE3NzkgbGlicGFydGVkL2Rpc2suYzoxOTQ1CisjLCBmdXp6eQorbXNnaWQgIkNhbid0IGhhdmUgb3ZlcmxhcHBpbmcgcGFydGl0aW9ucy4iCittc2dzdHIgItxiZXJsYXBwZW5kZSBQYXJ0aXRpb25lbiBr9m5uZW4gbmljaHQgZXhpc3RpZXJlbi4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTczMworbXNnaWQgIkNhbid0IGhhdmUgYSBwcmltYXJ5IHBhcnRpdGlvbiBpbnNpZGUgYW4gZXh0ZW5kZWQgcGFydGl0aW9uLiIKK21zZ3N0ciAiUHJpbeRyZSBQYXJ0aXRpb24ga/ZubmVuIG5pY2h0IGluIGVyd2VpdGVydGVuIFBhcnRpdGlvbiBleGlzdGllcmVuLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTQwCittc2dpZCAibWV0YWRhdGEiCittc2dzdHIgIk1ldGFkYXRlbiIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTQyCittc2dpZCAiZnJlZSIKK21zZ3N0ciAiZnJlaSIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTQ0IHBhcnRlZC91aS5jOjExNjkgcGFydGVkL3VpLmM6MTE5NworbXNnaWQgImV4dGVuZGVkIgorbXNnc3RyICJlcndlaXRlcnQiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE0NiBwYXJ0ZWQvdWkuYzoxMTczIHBhcnRlZC91aS5jOjEyMDEKK21zZ2lkICJsb2dpY2FsIgorbXNnc3RyICJsb2dpc2NoIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNDggcGFydGVkL3VpLmM6MTE2NSBwYXJ0ZWQvdWkuYzoxMTkzCittc2dpZCAicHJpbWFyeSIKK21zZ3N0ciAicHJpbeRyIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNjQKK21zZ2lkICJib290IgorbXNnc3RyICJib290IgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNjYKK21zZ2lkICJyb290IgorbXNnc3RyICJyb290IgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNjgKK21zZ2lkICJzd2FwIgorbXNnc3RyICJzd2FwIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNzAKK21zZ2lkICJoaWRkZW4iCittc2dzdHIgInZlcnN0ZWNrdCIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTcyCittc2dpZCAicmFpZCIKK21zZ3N0ciAicmFpZCIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTc0Cittc2dpZCAibHZtIgorbXNnc3RyICJsdm0iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE3NgorbXNnaWQgImxiYSIKK21zZ3N0ciAibGJhIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNzgKK21zZ2lkICJocC1zZXJ2aWNlIgorbXNnc3RyICJocC1zZXJ2aWNlIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxODAKK21zZ2lkICJwYWxvIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE4MgorbXNnaWQgInByZXAiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTg0Cittc2dpZCAibXNmdHJlcyIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxOTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gcGFydGl0aW9uIGZsYWcsICVkLiIKK21zZ3N0ciAiVW5iZWthbm50ZXMgUGFydGl0aW9uc2ZsYWcgJWQuIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6NzgKK21zZ2lkICJJbmZvcm1hdGlvbiIKK21zZ3N0ciAiSW5mb3JtYXRpb24iCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo3OQorbXNnaWQgIldhcm5pbmciCittc2dzdHIgIldhcm51bmciCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4MAorbXNnaWQgIkVycm9yIgorbXNnc3RyICJGZWhsZXIiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4MQorbXNnaWQgIkZhdGFsIgorbXNnc3RyICJGYXRhbGVyIEZlaGxlciIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjgyCittc2dpZCAiQnVnIgorbXNnc3RyICJCdWciCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4MworbXNnaWQgIk5vIEltcGxlbWVudGF0aW9uIgorbXNnc3RyICJLZWluZSBJbXBsZW1lbnRpZXJ1bmciCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4NworbXNnaWQgIkZpeCIKK21zZ3N0ciAiRml4IgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODgKK21zZ2lkICJZZXMiCittc2dzdHIgIkphIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODkKK21zZ2lkICJObyIKK21zZ3N0ciAiTmVpbiIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjkwCittc2dpZCAiT0siCittc2dzdHIgIk9LIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6OTEKK21zZ2lkICJSZXRyeSIKK21zZ3N0ciAiV2llZGVyaG9sZW4iCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo5MgorbXNnaWQgIklnbm9yZSIKK21zZ3N0ciAiSWdub3JpZXJlbiIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjkzCittc2dpZCAiQ2FuY2VsIgorbXNnc3RyICJBYmJyZWNoZW4iCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzoxMzMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBIGJ1ZyBoYXMgYmVlbiBkZXRlY3RlZCBpbiBHTlUgUGFydGVkLiAgUmVmZXIgdG8gdGhlIHdlYiBzaXRlIG9mIHBhcnRlZCAiCisiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3BhcnRlZC9wYXJ0ZWQuaHRtbCBmb3IgbW9yZSBpbmZvcm1hdGlvbnMgb2Ygd2hhdCAiCisiY291bGQgYmUgdXNlZnVsIGZvciBidWcgc3VibWl0dGluZyEgIFBsZWFzZSBlbWFpbCBhIGJ1ZyByZXBvcnQgdG8gYnVnLSIKKyJwYXJ0ZWRAZ251Lm9yZyBjb250YWluaW5nIGF0IGxlYXN0IHRoZSB2ZXJzaW9uICglcykgYW5kIHRoZSBmb2xsb3dpbmcgIgorIm1lc3NhZ2U6ICAiCittc2dzdHIgIiIKKyJFaW4gQnVnIGluIEdOVSBwYXJ0ZWQgd3VyZGUgZW50ZGVja3QuIEJpdHRlIHNlbmRlbiBTaWUgZWluZW4gQnVncmVwb3J0IGFuICIKKyJidWctcGFydGVkQGdudS5vcmcgdW50ZXIgQW5nYWJlIGRlciBWZXJzaW9uICglcykgdW5kIGRlciBmb2xnZW5kZW4gTWVsZHVuZzoiCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6Mzg0Cittc2dpZCAiQ291bGQgbm90IGRldGVjdCBmaWxlIHN5c3RlbS4iCittc2dzdHIgIkRhdGVpc3lzdGVtIHd1cmRlIG5pY2h0IGVya2FubnQuIgorCisjIFhYWDogdm9sdW1lPworIzogbGlicGFydGVkL2ZpbGVzeXMuYzozOTUKKyMsIGZ1enp5Cittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIGlzIGJpZ2dlciB0aGFuIGl0cyB2b2x1bWUhIgorbXNnc3RyICJEYXMgRGF0ZWlzeXN0ZW0gaXN0IGdy9t9lciBhbHMgc2VpbmUgUGFydGl0aW9uISIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo0MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VwcG9ydCBmb3Igb3BlbmluZyAlcyBmaWxlIHN5c3RlbXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiIKKyJVbnRlcnN0/HR6dW5nIGb8ciBkYXMg1mZmbmVuIHZvbiBEYXRlaXN5c3RlbWVuIGlzdCBm/HIgJXMgbm9jaCBuaWNodCAiCisiaW1wbGVtZW50aWVydC4iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnQgZm9yIGNyZWF0aW5nICVzIGZpbGUgc3lzdGVtcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiRXJ6ZXVndW5nIHZvbiBEYXRlaXN5c3RlbWVuIGlzdCBm/HIgJXMgbm9jaCBuaWNodCBpbXBsZW1lbnRpZXJ0LiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo1MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VwcG9ydCBmb3IgY2hlY2tpbmcgJXMgZmlsZSBzeXN0ZW1zIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICLcYmVycHL8ZnVuZyB2b24gRGF0ZWlzeXN0ZW1lbiBpc3QgZvxyICVzIG5vY2ggbmljaHQgaW1wbGVtZW50aWVydC4iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NTcxCittc2dpZCAicmF3IGJsb2NrIGNvcHlpbmciCittc2dzdHIgIktvcGllcmVuIFwicm9oZXJcIiBCbPZja2UiCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NTgyCittc2dpZCAiZ3Jvd2luZyBmaWxlIHN5c3RlbSIKK21zZ3N0ciAiRGF0ZWlzeXN0ZW0gd2lyZCB2ZXJncvbfZXJ0LiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo2MjIKK21zZ2lkICJDYW4ndCBjb3B5IG9udG8gYW4gb3ZlcmxhcHBpbmcgcGFydGl0aW9uLiIKK21zZ3N0ciAi3GJlcmxhcHBlbmRlIFBhcnRpdGlvbmVuIGv2bm5lbiBuaWNodCBrb3BpZXJ0IHdlcmRlbi4iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NjQ0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiRGlyZWN0IHN1cHBvcnQgZm9yIGNvcHlpbmcgZmlsZSBzeXN0ZW1zIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQgZm9yICVzLiAgIgorIkhvd2V2ZXIsIHN1cHBvcnQgZm9yIHJlc2l6aW5nIGlzIGltcGxlbWVudGVkLiAgVGhlcmVmb3JlLCB0aGUgZmlsZSBzeXN0ZW0gIgorImNhbiBiZSBjb3BpZWQgaWYgdGhlIG5ldyBwYXJ0aXRpb24gaXMgYXQgbGVhc3QgYXMgYmlnIGFzIHRoZSBvbGQgb25lLiAgU28sICIKKyJlaXRoZXIgc2hyaW5rIHRoZSBwYXJ0aXRpb24geW91IGFyZSB0cnlpbmcgdG8gY29weSwgb3IgY29weSB0byBhIGJpZ2dlciAiCisicGFydGl0aW9uLiIKK21zZ3N0ciAiIgorIkRpcmVrdGUgVW50ZXJzdPx0enVuZyBm/HIgZGFzIEtvcGllcmVuIHZvbiBEYXRlaXN5c3RlbWVuIGlzdCBub2NoIG5pY2h0IGb8ciAlIgorInMgaW1wbGVtZW50aWVydDsgR3L232Vu5G5kZXJ1bmdlbiBzaW5kIHVudGVyc3T8dHp0LiBEZXNoYWxiIGthbm4gZGFzICIKKyJEYXRlaXN5c3RlbSBrb3BpZXJ0IHdlcmRlbiwgd2VubiBkaWUgbmV1ZSBQYXJ0aXRpb24gbWluZGVzdGVucyBzbyBncm9zcyBpc3QgIgorIndlIGRpZSBhbHRlLiBBbHNvIHNvbGx0ZW4gU2llIGVudHdlZGVyIGRpZSBQYXJ0aXRpb24sIGRpZSBTaWUga29waWVyZW4gIgorIndvbGxlbiwgdmVya2xlaW5lcm4sIG9kZXIgYXVmIGVpbmUgZ3L232VyZSBQYXJ0aXRpb24ga29waWVyZW4uIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjY1OAorIywgYy1mb3JtYXQKK21zZ2lkICJTdXBwb3J0IGZvciBjb3B5aW5nICVzIGZpbGUgc3lzdGVtcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiS29waWVyZW4gdm9uIERhdGVpc3lzdGVtZW4gaXN0IGb8ciAlcyBub2NoIG5pY2h0IGltcGxlbWVudGllcnQuIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjY5NgorIywgYy1mb3JtYXQKK21zZ2lkICJTdXBwb3J0IGZvciByZXNpemluZyAlcyBmaWxlIHN5c3RlbXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIkdy9t9lbuRuZGVydW5nIHZvbiBEYXRlaXN5c3RlbWVuIGlzdCBm/HIgJXMgbm9jaCBuaWNodCBpbXBsZW1lbnRpZXJ0LiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6MzE1Cittc2dpZCAiY3JlYXRpbmciCittc2dzdHIgIiIKKworIyBYWFg6IHZvbHVtZT8KKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQwMgorIywgZnV6enkKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gaXMgaW4gYW4gaW52YWxpZCBzdGF0ZS4gIFBlcmhhcHMgaXQgaXMgbW91bnRlZD8iCittc2dzdHIgIkRhcyBEYXRlaXN5c3RlbSBpc3QgZ3L232VyIGFscyBzZWluZSBQYXJ0aXRpb24hIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0MTAKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gaXMgaW4gb2xkICh1bnJlc2l6ZWFibGUpIGZvcm1hdC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDE2Cittc2dpZCAiSW52YWxpZCBmcmVlIGJsb2NrcyBjb3VudC4gIFJ1biByZWlzZXJmc2NrIC0tY2hlY2sgZmlyc3QuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQzMQorIywgZnV6enkKK21zZ2lkICJjaGVja2luZyIKK21zZ3N0ciAiY2hlY2siCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQzNworbXNnaWQgIlJlaXNlcmZzIHRyZWUgc2VlbXMgdG8gYmUgY29ycnVwdGVkLiAgUnVuIHJlaXNlcmZzY2sgLS1jaGVjayBmaXJzdC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDQ5CisjLCBmdXp6eQorbXNnaWQgIiIKKyJUaGUgcmVpc2VyZnMgZmlsZSBzeXN0ZW0gcGFzc2VkIGEgYmFzaWMgY2hlY2suICBGb3IgYSBtb3JlIGNvbXByZWhlbnNpdmUgIgorImNoZWNrLCBydW4gcmVpc2VyZnNjayAtLWNoZWNrLiIKK21zZ3N0ciAiIgorIkRhcyBleHQyLURhdGVpc3lzdGVtIGhhdCBkZW4gQmFzaXNjaGVjayBiZXN0YW5kZW4uIFVtIGVpbmVuIGtvbXBsZXR0ZXJlbiAiCisiVGVzdCBhdXN6dWb8aHJlbiwgYmVudXR6ZW4gU2llIGJpdHRlIGUyZnNjay4iCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQ3NAorIywgZnV6enkKK21zZ2lkICJTb3JyeSwgY2FuJ3QgbW92ZSB0aGUgc3RhcnQgb2YgcmVpc2VyZnMgcGFydGl0aW9ucyB5ZXQuIgorbXNnc3RyICIiCisiTGVpZGVyIGthbm4gZGVyIEFuZmFuZyB2b24gZXh0Mi1QYXJ0aXRpb25lbiBub2NoIG5pY2h0IHZlcnNjaG9iZW4gd2VyZGVuLiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDkwCittc2dpZCAiQ291bGRuJ3QgcmVvcGVuIGRldmljZSBhYnN0cmFjdGlvbiBsYXllciBmb3IgcmVhZC93cml0ZS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NTA4IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NTUyCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjI1MCBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjYyOQorbXNnaWQgInNocmlua2luZyIKK21zZ3N0ciAidmVya2xlaW5lcm5kIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo1MjAKKyMsIGZ1enp5Cittc2dpZCAiZXhwYW5kaW5nIgorbXNnc3RyICJXYXJudW5nIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo1OTIKK21zZ2lkICJDb3VsZG4ndCBjcmVhdGUgcmVpc2VyZnMgZGV2aWNlIGFic3RyYWN0aW9uIGhhbmRsZXIuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjYwNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRGV2aWNlIGlzIHRvbyBzbWFsbCBmb3IgJWx1IGJsb2Nrcy4iCittc2dzdHIgIkRhdGVpc3lzdGVtIHp1IGtsZWluIGb8ciBleHQyLiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NjE1Cittc2dpZCAiY29weWluZyIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo2ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgcmVzb2x2ZSBzeW1ib2wgJXMuICBFcnJvcjogJXMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjcwNAorbXNnaWQgIkdOVSBQYXJ0ZWQgZm91bmQgYW4gaW52YWxpZCBsaWJyZWlzZXJmcyBsaWJyYXJ5LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo3MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkdOVSBQYXJ0ZWQgaGFzIGRldGVjdGVkIGxpYnJlaXNlcmZzIGludGVyZmFjZSB2ZXJzaW9uIG1pc21hdGNoLiAgRm91bmQgJWQtJSIKKyJkLCByZXF1aXJlZCAlZC4gUmVpc2VyRlMgc3VwcG9ydCB3aWxsIGJlIGRpc2FibGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2FpeC5jOjEzNworIywgZnV6enkKK21zZ2lkICJTdXBwb3J0IGZvciByZWFkaW5nIEFJWCBkaXNrIGxhYmVscyBpcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiRXJ6ZXVndW5nIHZvbiBEYXRlaXN5c3RlbWVuIGlzdCBm/HIgJXMgbm9jaCBuaWNodCBpbXBsZW1lbnRpZXJ0LiIKKworIzogbGlicGFydGVkL2xhYmVscy9haXguYzoxNDgKKyMsIGZ1enp5Cittc2dpZCAiU3VwcG9ydCBmb3Igd3JpdGluZyBBSVggZGlzayBsYWJlbHMgaXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIkVyemV1Z3VuZyB2b24gRGF0ZWlzeXN0ZW1lbiBpc3QgZvxyICVzIG5vY2ggbmljaHQgaW1wbGVtZW50aWVydC4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYWl4LmM6MTYxCisjLCBmdXp6eQorbXNnaWQgIiIKKyJTdXBwb3J0IGZvciBhZGRpbmcgcGFydGl0aW9ucyB0byBBSVggZGlzayBsYWJlbHMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIkVyemV1Z3VuZyB2b24gRGF0ZWlzeXN0ZW1lbiBpc3QgZvxyICVzIG5vY2ggbmljaHQgaW1wbGVtZW50aWVydC4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYWl4LmM6MTcxCisjLCBmdXp6eQorbXNnaWQgIiIKKyJTdXBwb3J0IGZvciBkdXBsaWNhdGluZyBwYXJ0aXRpb25zIGluIEFJWCBkaXNrIGxhYmVscyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiRXJ6ZXVndW5nIHZvbiBEYXRlaXN5c3RlbWVuIGlzdCBm/HIgJXMgbm9jaCBuaWNodCBpbXBsZW1lbnRpZXJ0LiIKKworIzogbGlicGFydGVkL2xhYmVscy9haXguYzoxODkKKyMsIGZ1enp5Cittc2dpZCAiIgorIlN1cHBvcnQgZm9yIHNldHRpbmcgc3lzdGVtIHR5cGUgb2YgcGFydGl0aW9ucyBpbiBBSVggZGlzayBsYWJlbHMgaXMgbm90ICIKKyJpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICJFcnpldWd1bmcgdm9uIERhdGVpc3lzdGVtZW4gaXN0IGb8ciAlcyBub2NoIG5pY2h0IGltcGxlbWVudGllcnQuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2FpeC5jOjE5OQorIywgZnV6enkKK21zZ2lkICJTdXBwb3J0IGZvciBzZXR0aW5nIGZsYWdzIGluIEFJWCBkaXNrIGxhYmVscyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiRXJ6ZXVndW5nIHZvbiBEYXRlaXN5c3RlbWVuIGlzdCBm/HIgJXMgbm9jaCBuaWNodCBpbXBsZW1lbnRpZXJ0LiIKKworIzogbGlicGFydGVkL2xhYmVscy9ic2QuYzo1MDEgbGlicGFydGVkL2xhYmVscy9kYXNkLmM6NzU1CisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rvcy5jOjE5NzQgbGlicGFydGVkL2xhYmVscy9kdmguYzo3NzAKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6MTQ0OCBsaWJwYXJ0ZWQvbGFiZWxzL2xvb3AuYzoyNDgKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6MTQwOCBsaWJwYXJ0ZWQvbGFiZWxzL3BjOTguYzo3NTkKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6MTA0MSBsaWJwYXJ0ZWQvbGFiZWxzL3N1bi5jOjcwNQorbXNnaWQgIlVuYWJsZSB0byBzYXRpc2Z5IGFsbCBjb25zdHJhaW50cyBvbiB0aGUgcGFydGl0aW9uLiIKK21zZ3N0ciAiRXMga/ZubmVuIG5pY2h0IGFsbGUgQW5mb3JkZXJ1bmdlbiBhbiBkaWUgUGFydGl0aW9uIGVyZvxsbHQgd2VyZGVuLiIKKworIzogbGlicGFydGVkL2xhYmVscy9ic2QuYzo1MjYKKyMsIGZ1enp5Cittc2dpZCAiVW5hYmxlIHRvIGFsbG9jYXRlIGEgYnNkIGRpc2tsYWJlbCBzbG90LiIKK21zZ3N0ciAiS2FubiBrZWluZSBCU0QtRGlza2xhYmVsLVplaWxlIGFsbG96aWVyZW4uIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rhc2QuYzoxNjYKKyMsIGZ1enp5Cittc2dpZCAiVW5hYmxlIHRvIGRldGVybWluZSB0aGUgYmxvY2sgc2l6ZSBvZiB0aGlzIGRhc2QiCittc2dzdHIgIkRpZSBHcvbfZSB2b24gJXMga2FubiBuaWNodCBmZXN0Z2VzdGVsbHQgd2VyZGVuICglcykuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rhc2QuYzo3ODEKKyMsIGZ1enp5Cittc2dpZCAiVW5hYmxlIHRvIGFsbG9jYXRlIGEgZGFzZCBkaXNrbGFiZWwgc2xvdCIKK21zZ3N0ciAiS2FubiBrZWluZSBCU0QtRGlza2xhYmVsLVplaWxlIGFsbG96aWVyZW4uIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rvcy5jOjgyNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBwYXJ0aXRpb24gdGFibGUgb24gJXMgLS0gd3Jvbmcgc2lnbmF0dXJlICV4LiIKK21zZ3N0ciAiVW5n/Gx0aWdlIFBhcnRpdGlvbnN0YWJlbGxlIGF1ZiAlcyAtIGZhbHNjaGUgU2lnbmF0dXJlICV4LiIKKworIzogbGlicGFydGVkL2xhYmVscy9kb3MuYzo4NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBwYXJ0aXRpb24gdGFibGUgLSByZWN1cnNpdmUgcGFydGl0aW9uIG9uICVzLiIKK21zZ3N0ciAiVW5n/Gx0aWdlIFBhcnRpdGlvbnN0YWJlbGxlIC0gUmVrdXJzaXZlIFBhcnRpdGlvbiBhdWYgJXMuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rvcy5jOjEzMTgKK21zZ2lkICJFeHRlbmRlZCBwYXJ0aXRpb25zIGNhbm5vdCBiZSBoaWRkZW4gb24gbXNkb3MgZGlzayBsYWJlbHMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZG9zLmM6MTk1OAorbXNnaWQgIlBhcnRlZCBjYW4ndCByZXNpemUgcGFydGl0aW9ucyBtYW5hZ2VkIGJ5IFdpbmRvd3MgRHluYW1pYyBEaXNrLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjE5MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIG5vIGV4dGVuZGVkIHBhcnRpdGlvbiAodm9sdW1lIGhlYWRlciBwYXJ0aXRpb24pLiIKK21zZ3N0ciAiIgorIiVzIGhhdCBrZWluZSBlcndlaXRlcnRlIFBhcnRpdGlvbiAodm9sdW1lIGhlYWRlciBwYXJ0aXRpb24pLiBXZW5uIFNpZSAiCisiSWdub3JpZXJlbiB35GhsZW4sIHdlcmRlbiBhbGxlIEJvb3QtVm9sdW1lbiBnZWz2c2NodC4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6MzEzCittc2dpZCAiQ2hlY2tzdW0gaXMgd3JvbmcsIGluZGljYXRpbmcgdGhlIHBhcnRpdGlvbiB0YWJsZSBpcyBjb3JydXB0LiIKK21zZ3N0ciAiIgorIkRpZSBQcvxmc3VtbWUgaXN0IGZhbHNjaCwgd2FzIGF1ZiBlaW5lIEtvcnJ1cHRpb24gZGVyIFBhcnRpdGlvbnN0YWJlbGxlICIKKyJoaW53ZWlzdC4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6NjE2Cittc2dpZCAiT25seSBwcmltYXJ5IHBhcnRpdGlvbnMgY2FuIGJlIHJvb3QgcGFydGl0aW9ucy4iCittc2dzdHIgIk51ciBwcmlt5HJlIFBhcnRpdGlvbmVuIGv2bm5lbiBXdXJ6ZWxwYXJ0aXRpb25lbiB3ZXJkZW4uIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjYzMAorbXNnaWQgIk9ubHkgcHJpbWFyeSBwYXJ0aXRpb25zIGNhbiBiZSBzd2FwIHBhcnRpdGlvbnMuIgorbXNnc3RyICJOdXIgcHJpbeRyZSBQYXJ0aXRpb25lbiBr9m5uZW4gU3dhcC1QYXJ0aXRpb25lbiB3ZXJkZW4uIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjY0NAorbXNnaWQgIk9ubHkgbG9naWNhbCBwYXJ0aXRpb25zIGNhbiBiZSBhIGJvb3QgZmlsZS4iCittc2dzdHIgIk51ciBsb2dpc2NoZSBQYXJ0aXRpb25lbiBr9m5uZW4gQm9vdC1EYXRlaWVuIHNlaW4uIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjcyMQorbXNnaWQgIk9ubHkgbG9naWNhbCBwYXJ0aXRpb25zIChib290IGZpbGVzKSBoYXZlIGEgbmFtZS4iCittc2dzdHIgIk51ciBsb2dpY2hlIFBhcnRpdGlvbmVuIChCb290LURhdGVpZW4pIGhhYmVuIGVpbmVuIE5hbWVuLiIKKworIzogbGlicGFydGVkL2xhYmVscy9kdmguYzo4MTIKK21zZ2lkICJUb28gbWFueSBwcmltYXJ5IHBhcnRpdGlvbnMiCittc2dzdHIgIlp1IHZpZWxlIHByaW3kcmUgUGFydGl0aW9uZW4uIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBvcGVuIGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBzZWVrIGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyByZWFkIGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTEzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgd3JpdGUgZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIlcywgd+RocmVuZCBhdWYgJXMgZ2VzY2hyaWViZW4gd3VyZGUuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBJT0NUTCBlcnJvclxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjExOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgQVBJIHZlcnNpb24gbWlzbWF0Y2hcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFVuc3VwcG9ydGVkIGRpc2sgdHlwZVxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgVW5zdXBwb3J0ZWQgZGlzayBmb3JtYXRcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMzAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBEaXNrIGluIHVzZVxuIgorIiVzXG4iCittc2dzdHIgIiVzICAlcyAgJXMiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIENvbmZpZyBmaWxlIHN5bnRheCBlcnJvclxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgVm9sdW1lIGxhYmVsIGlzIGNvcnJ1cHRlZC5cbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIGEgZGF0YSBzZXQgbmFtZSBpcyBjb3JydXB0ZWQuXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBzcGFjZSBhbGxvY2F0aW9uXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBkZXZpY2UgdmVyaWZpY2F0aW9uIGZhaWxlZFxuIgorIlRoZSBzcGVjaWZpZWQgZGV2aWNlIGlzIG5vdCBhIHZhbGlkIERBU0QgZGV2aWNlXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgRmF0YWwgZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6NDU0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgY29udGFpbnMgR1BUIHNpZ25hdHVyZXMsIGluZGljYXRpbmcgdGhhdCBpdCBoYXMgYSBHUFQgdGFibGUuICBIb3dldmVyLCBpdCAiCisiZG9lcyBub3QgaGF2ZSBhIHZhbGlkIGZha2UgbXNkb3MgcGFydGl0aW9uIHRhYmxlLCBhcyBpdCBzaG91bGQuICBQZXJoYXBzIGl0ICIKKyJ3YXMgY29ycnVwdGVkIC0tIHBvc3NpYmx5IGJ5IGEgcHJvZ3JhbSB0aGF0IGRvZXNuJ3QgdW5kZXJzdGFuZCBHUFQgcGFydGl0aW9uICIKKyJ0YWJsZXMuICBPciBwZXJoYXBzIHlvdSBkZWxldGVkIHRoZSBHUFQgdGFibGUsIGFuZCBhcmUgbm93IHVzaW5nIGFuIG1zZG9zICIKKyJwYXJ0aXRpb24gdGFibGUuICBJcyB0aGlzIGEgR1BUIHBhcnRpdGlvbiB0YWJsZT8iCittc2dzdHIgIiIKKyIlcyBlbnRo5Gx0IEdQVC1TaWduYXR1cmVuLCBkaWUgYW56ZWlnZW4sIGRhc3MgZXMgZWluZSBHUFQtVGFiZWxsZSBoYXQuIEVzICIKKyJpc3QgamVkb2NoIGtlaW5lIGf8bHRpZ2Ugdm9yZ2V05HVzY2h0ZSBNU0RPUy1QYXJ0aXRpb25zdGFiZWxsZSB2b3JoYW5kZW4sICIKKyJkaWUgZWlnZW50bGljaCBlcmZvcmRlcmxpY2ggaXN0LiBWaWVsbGVpY2h0IHd1cmRlIGRpZXNlIHplcnN09nJ0IC0gZXZlbnR1ZWxsICIKKyJkdXJjaCBlaW4gUHJvZ3JhbW0sIGRhcyBHUFQtUGFydGl0aW9uc3RhYmVsbGVuIG5pY2h0IHZlcnN0ZWh0LiBPZGVyICIKKyJ2aWVsbGVpY2h0IGhhYmVuIFNpZSBkaWUgR1BULVRhYmVsbGUgZ2Vs9nNjaHQsIHVuZCB2ZXJ3ZW5kZW4gamV0enQgZGllIE1TRE9TLSIKKyJQYXJ0aXRpdG9uc3RhYmVsbGUuIElzdCBkaWVzZXMgZWluZSBHUFQtUGFydGl0aW9uc3RhYmVsbGU/IgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjY0OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb3JtYXQgb2YgdGhlIEdQVCBwYXJ0aXRpb24gdGFibGUgaXMgdmVyc2lvbiAleCwgd2hpY2ggaXMgbmV3ZXIgdGhhbiAiCisid2hhdCBQYXJ0ZWQgY2FuIHJlY29nbmlzZS4gIFBsZWFzZSB0ZWxsIHVzISAgYnVnLXBhcnRlZEBnbnUub3JnIgorbXNnc3RyICIiCisiRGFzIEZvcm1hdCBkZXIgR1BULVBhcnRpdGlvbnN0YWJlbGxlIGlzdCBuZXVlciBhbHMgZGFzIHZvbiBQYXJ0ZWQgIgorInZlcnN0YW5kZW5lLiBCaXR0ZSBtZWxkZW4gU2llIGRhcyBhbiBidWctcGFydGVkQGdudS5vcmchIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm90IGFsbCBvZiB0aGUgc3BhY2UgYXZhaWxhYmxlIHRvICVzIGFwcGVhcnMgdG8gYmUgdXNlZCwgeW91IGNhbiBmaXggdGhlIEdQVCAiCisidG8gdXNlIGFsbCBvZiB0aGUgc3BhY2UgKGFuIGV4dHJhICVsbHUgYmxvY2tzKSBvciBjb250aW51ZSB3aXRoIHRoZSBjdXJyZW50ICIKKyJzZXR0aW5nPyAiCittc2dzdHIgIiIKKworIyBYWFg6IEJhY2t1cD8KKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6ODI3Cittc2dpZCAiIgorIlRoZSBiYWNrdXAgR1BUIHRhYmxlIGlzIG5vdCBhdCB0aGUgZW5kIG9mIHRoZSBkaXNrLCBhcyBpdCBzaG91bGQgYmUuICBUaGlzICIKKyJtaWdodCBtZWFuIHRoYXQgYW5vdGhlciBvcGVyYXRpbmcgc3lzdGVtIGJlbGlldmVzIHRoZSBkaXNrIGlzIHNtYWxsZXIuICBGaXgsICIKKyJieSBtb3ZpbmcgdGhlIGJhY2t1cCB0byB0aGUgZW5kIChhbmQgcmVtb3ZpbmcgdGhlIG9sZCBiYWNrdXApPyIKK21zZ3N0ciAiIgorIkRpZSBCYWNrdXAtR1BULVRhYmVsbGUgaXN0IG5pY2h0IGFtIEVuZGUgZGVyIFBsYXR0ZSwgd2llIHNpZSBlaWdlbnRsaWNoIHNlaW4gIgorInNvbGx0ZS4gRGFzIGthbm4gYmVkZXV0ZW4sIGRhc3MgZWluIGFuZGVyZXMgQmV0cmllYnNzeXN0ZW0gZ2xhdWJ0LCBkaWUgIgorIlBsYXR0ZSBzZWkga2xlaW5lci4gU29sbCBkYXMga29ycmlnaWVydCB3ZXJkZW4sIGR1cmNoIFZlcnNjaGllYmVuIGRlcyAiCisiQmFja3VwcyB6dW0gRW5kZSAodW5kIGz2c2NoZW4gZGVzIGFsdGVuIEJhY2t1cHMpPyIKKworIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzo4NjIKKyMsIGZ1enp5Cittc2dpZCAiIgorIlRoZSBwcmltYXJ5IEdQVCB0YWJsZSBpcyBjb3JydXB0LCBidXQgdGhlIGJhY2t1cCBhcHBlYXJzIE9LLCBzbyB0aGF0IHdpbGwgYmUgIgorInVzZWQuIgorbXNnc3RyICIiCisiRGllIHByaW3kcmUgR1BULVRhYmVsbGUgaXN0IGtvcnJ1cHQsIGFiZXIgZGFzIEJhY2t1cCBzY2hlaW50IGluIE9yZG51bmcgenUgIgorInNlaW4sIGFsc28gd2lyZCBkaWVzZXMgdmVyd2VuZGV0LiIKKworIyBWZXJzdWNodCBwYXJ0ZWQgZGFzIHNlbGJzdCwgb2RlciBpc3QgZGFzIGVpbmUgQXVmZm9yZGVydW5nPworIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzo4NzAKKyMsIGZ1enp5Cittc2dpZCAiIgorIkJvdGggdGhlIHByaW1hcnkgYW5kIGJhY2t1cCBHUFQgdGFibGVzIGFyZSBjb3JydXB0LiAgVHJ5IG1ha2luZyBhIGZyZXNoICIKKyJ0YWJsZSwgYW5kIHVzaW5nIFBhcnRlZCdzIHJlc2N1ZSBmZWF0dXJlIHRvIHJlY292ZXIgcGFydGl0aW9ucy4iCittc2dzdHIgIiIKKyJTb3dvaGwgZGllIHByaW3kcmUgYWxzIGF1Y2ggZGllIEJhY2t1cC1HUFQtVGFiZWxsZSBzaW5kIGtvcnJ1cHQuIFZlcnN1Y2hlbiAiCisiU2llLCBlaW5lIG5ldWUgVGFiZWxsZSB6dSBlcnpldWdlbiwgdW5kIGRpZSBQYXJ0aXRpdGlvbmVuIG1pdCBIaWxmZSB2b24gIgorIlBhcnRlZCdzIFJldHR1bmdzbfZnbGljaGtlaXRlbiB6dSByZXN0YXVyaWVyZW4uIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjE4MQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHNpZ25hdHVyZSAleCBmb3IgTWFjIGRpc2sgbGFiZWxzLiIKK21zZ3N0ciAiVW5n/Gx0aWdlIFNpZ25hdHVyZSAleCBm/HIgTWFjLURpc2tsYWJlbC4iCisKKyMgWFhYOiBXaWUgbmVubnQgQXBwbGUgbWFwcz8KKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6MjI2Cittc2dpZCAiUGFydGl0aW9uIG1hcCBoYXMgbm8gcGFydGl0aW9uIG1hcCBlbnRyeSEiCittc2dzdHIgIlBhcnRpdGlvbnNrYXJ0ZSAoLW1hcCkgaGF0IGtlaW5lbiBQYXJ0aXRpb25za2FydGVuZWludHJhZyEiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIHRvbyBzbWFsbCBmb3IgYSBNYWMgZGlzayBsYWJlbCEiCittc2dzdHIgIiVzIGlzdCB6dSBrbGVpbiBm/HIgZWluIE1hYy1EaXNrbGFiZWwhIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjUzMgorIywgYy1mb3JtYXQKK21zZ2lkICJQYXJ0aXRpb24gJWQgaGFzIGFuIGludmFsaWQgc2lnbmF0dXJlICV4LiIKK21zZ3N0ciAiUGFydGl0aW9uICVkIGhhdCBlaW5lIHVuZ/xsdGlnZSBTaWduYXR1ciAleC4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIlBhcnRpdGlvbiAlZCBoYXMgYW4gaW52YWxpZCBsZW5ndGggb2YgMCBieXRlcyEiCittc2dzdHIgIlBhcnRpdGlvbiAlZCBoYXQgZWluZSB1bmf8bHRpZ2UgTORuZ2Ugdm9uIDAgQnl0ZXMhIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjU4MAorIywgZnV6enkKK21zZ2lkICJUaGUgZGF0YSByZWdpb24gZG9lc24ndCBzdGFydCBhdCB0aGUgc3RhcnQgb2YgdGhlIHBhcnRpdGlvbi4iCittc2dzdHIgIkRpZSBEYXRlbnJlZ2lvbiBiZWdpbm50IG5pY2h0IG1pdCBkZW0gU3RhcnQgZWluZXIgUGFydGl0aW9uLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo1OTcKKyMsIGZ1enp5Cittc2dpZCAiVGhlIGJvb3QgcmVnaW9uIGRvZXNuJ3Qgc3RhcnQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBwYXJ0aXRpb24uIgorbXNnc3RyICJEaWUgQm9vdHJlZ2lvbiBiZWdpbm50IG5pY2h0IG1pdCBkZW0gU3RhcnQgZWluZXIgUGFydGl0aW9uLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo2MTEKK21zZ2lkICJUaGUgcGFydGl0aW9uJ3MgYm9vdCByZWdpb24gZG9lc24ndCBvY2N1cHkgdGhlIGVudGlyZSBwYXJ0aXRpb24uIgorbXNnc3RyICJEaWUgQm9vdHJlZ2lvbiBkZXIgUGFydGl0aW9uIGJlbGVndCBuaWNodCBkaWUgZ2FuemUgUGFydGl0aW9uLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo2MjIKK21zZ2lkICJUaGUgcGFydGl0aW9uJ3MgZGF0YSByZWdpb24gZG9lc24ndCBvY2N1cHkgdGhlIGVudGlyZSBwYXJ0aXRpb24uIgorbXNnc3RyICJEaWUgRGF0ZW5yZWdpb24gZGVyIFBhcnRpdGlvbiBiZWxlZ3QgbmljaHQgZGllIGdhbnplIFBhcnRpdGlvbi4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6Njc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXZWlyZCBibG9jayBzaXplIG9uIGRldmljZSBkZXNjcmlwdG9yOiAlZCBieXRlcyBpcyBub3QgZGl2aXNpYmxlIGJ5IDUxMi4iCittc2dzdHIgIiIKKyJTZWx0c2FtZSBCbG9ja2dy9t9lIGF1ZiBkZW0gR2Vy5HRlZGVza3JpcHRvcjogJWQgQnl0ZXMgaXN0IG5pY2h0IGR1cmNoIDUxMiAiCisidGVpbGJhci4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6Njg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZHJpdmVyIGRlc2NyaXB0b3Igc2F5cyB0aGUgcGh5c2ljYWwgYmxvY2sgc2l6ZSBpcyAlZCBieXRlcywgYnV0IExpbnV4ICIKKyJzYXlzIGl0IGlzICVkIGJ5dGVzLiIKK21zZ3N0ciAiIgorIkRpZSBUcmVpYmVyYmVzY2hyZWlidW5nIHNhZ3QsIGRhc3MgZGllIHBoeXNpc2NoZSBCbG9ja2dy9t9lICVkIEJ5dGVzIGlzdDsgIgorIkxpbnV4IHNhZ3QgYWJlciBlcyBzaW5kICVkIEJ5dGVzLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo3MzYKK21zZ2lkICJObyB2YWxpZCBwYXJ0aXRpb24gbWFwIGZvdW5kLiIKK21zZ3N0ciAiS2VpbmUgZ/xsdGlnZSBQYXJ0aXRpb25za2FydGUgZ2VmdW5kZW4uIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjc5NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvbmZsaWN0aW5nIHBhcnRpdGlvbiBtYXAgZW50cnkgc2l6ZXMhICBFbnRyeSAxIHNheXMgaXQgaXMgJWQsIGJ1dCBlbnRyeSAlZCAiCisic2F5cyBpdCBpcyAlZCEiCittc2dzdHIgIiIKKyJXaWRlcnNwcvxjaGxpY2hlIEdy9t9lbiBpbiBkZW4gUGFydGl0aW9uc2thcnRlbmVpbnRy5GdlbiEgRWludHJhZyAxIHNhZ3QgZXMgIgorInNpbmQgJWQgQnl0ZXMsIEVpbnRyYWcgJWQgc2FndCBhYmVyIGVzIHNpbmQgJWQhIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjgyMgorIywgZnV6enkKK21zZ2lkICJXZWlyZCEgIFRoZXJlIGFyZSAyIHBhcnRpdGlvbnMgbWFwIGVudHJpZXMhIgorbXNnc3RyICJTZWx0c2FtIC0gMiBQYXJ0aXRpb25za2FydGVuZWludHLkZ2UhIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjEzNDcKK21zZ2lkICIiCisiQ2hhbmdpbmcgdGhlIG5hbWUgb2YgYSByb290IG9yIHN3YXAgcGFydGl0aW9uIHdpbGwgcHJldmVudCBMaW51eCBmcm9tICIKKyJyZWNvZ25pc2luZyBpdCBhcyBzdWNoLiIKK21zZ3N0ciAiIgorIkVpbmUgxG5kZXJ1bmcgZGVzIE5hbWVucyBkZXIgUm9vdC0gb2RlciBTd2FwLVBhcnRpdGlvbiB2ZXJoaW5kZXJ0LCBkYXNzICIKKyJMaW51eCBzaWUgYWxzIHNvbGNoZSBlcmtlbm50LiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoxNDQzCisjLCBmdXp6eQorbXNnaWQgIkNhbid0IGFkZCBhbm90aGVyIHBhcnRpdGlvbiAtLSB0aGUgcGFydGl0aW9uIG1hcCBpcyB0b28gc21hbGwhIgorbXNnc3RyICIiCisiRWluZSB3ZWl0ZXJlIFBhcnRpdGlvbiBrYW5uIG5pY2h0IGhpbnp1Z2Vm/Gd0IHdlcmRlbiAtIGRpZSBQYXJ0aXRpb25za2FydGUgIgorImlzdCB6dSBrbGVpbiEiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcGM5OC5jOjM1NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBwYXJ0aXRpb24gdGFibGUgb24gJXMuIgorbXNnc3RyICJVbmf8bHRpZ2UgUGFydGl0aW9uc3RhYmVsbGUgYXVmICVzLiIKKworIzogbGlicGFydGVkL2xhYmVscy9wYzk4LmM6NDA2IGxpYnBhcnRlZC9sYWJlbHMvcGM5OC5jOjQ4NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlBhcnRpdGlvbiAlZCBpc24ndCBhbGlnbmVkIHRvIGN5bGluZGVyIGJvdW5kYXJpZXMuICBUaGlzIGlzIHN0aWxsICIKKyJ1bnN1cHBvcnRlZC4iCittc2dzdHIgIiIKKyJQYXJ0aXRpb24gJWQgaXN0IG5pY2h0IGF1ZiBaeWxpbmRlcmdyZW56ZW4gYXVzZ2VyaWNodGV0LiBEYXMgbXVzcyBub2NoICIKKyJ1bnRlcnN0/HR6dCB3ZXJkZW4uIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3BjOTguYzo3OTEKK21zZ2lkICJDYW4ndCBhZGQgYW5vdGhlciBwYXJ0aXRpb24uIgorbXNnc3RyICJLYW5uIGtlaW5lIHdlaXRlcmUgUGFydGl0aW9uIGhpbnp1ZvxnZW4uIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjE2MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEJhZCBjaGVja3N1bSBvbiBibG9jayAlbGx1IG9mIHR5cGUgJXMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6NDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRGlkbid0IGZpbmQgcmRiIGJsb2NrLCBzaG91bGQgbmV2ZXIgaGFwcGVuLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjU4MQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IExvb3AgZGV0ZWN0ZWQgYXQgYmxvY2sgJWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6NjAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogVGhlICVzIGxpc3Qgc2VlbXMgYmFkIGF0IGJsb2NrICVzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjY4OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBsaXN0IGJhZCBibG9ja3MuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6Njk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGxpc3QgcGFydGl0aW9uIGJsb2Nrcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo3MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gbGlzdCBmaWxlIHN5c3RlbSBibG9ja3MuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6NzEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGxpc3QgYm9vdCBibG9ja3MuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6NzQwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gd3JpdGUgcGFydGl0aW9uIGJsb2NrIGF0ICVkLiIKK21zZ3N0ciAiRXMgaXN0IG5pY2h0IGZlc3RzdGVsbGJhciwgb2IgZGllIFBhcnRpdGlvbiBlaW5nZWhhbmdlbiAobW91bnRlZCkgaXN0LiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzoxMDY5CisjLCBmdXp6eQorbXNnaWQgIlVuYWJsZSB0byBhbGxvY2F0ZSBhIHBhcnRpdGlvbiBudW1iZXIuIgorbXNnc3RyICJQYXJ0aXRpb25zbnVtbWVyIGVyd2FydGV0LiIKKworIzogbGlicGFydGVkL2xhYmVscy9zdW4uYzoxNDUKK21zZ2lkICJDb3JydXB0ZWQgU3VuIGRpc2sgbGFiZWwgZGV0ZWN0ZWQuIgorbXNnc3RyICJaZXJzdPZydGVzIFN1bi1EaXNrbGFiZWwgZW50ZGVja3QuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3N1bi5jOjI2NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBkaXNrIENIUyBnZW9tZXRyeSAoJWQsJWQsJWQpIHJlcG9ydGVkIGJ5IHRoZSBvcGVyYXRpbmcgc3lzdGVtIGRvZXMgbm90ICIKKyJtYXRjaCB0aGUgZ2VvbWV0cnkgc3RvcmVkIG9uIHRoZSBkaXNrIGxhYmVsICglZCwlZCwlZCkuIgorbXNnc3RyICIiCisiRGllIENIUy1HZW9tZXRyaWUgZGVyIFBsYXR0ZSAoJWQsJWQsJWQpIHN0aW1tdCBuaWNodCBtaXQgZGVyIEdlb21ldHJpZSBkZXMgIgorIkRpc2tsYWJlbHMgKCVkLCVkLCVkKSD8YmVyZWluLiIKKworIzogbGlicGFydGVkL2xhYmVscy9zdW4uYzoyODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGRpc2sgbGFiZWwgZGVzY3JpYmVzIGEgZGlzayBiaWdnZXIgdGhhbiAlcy4iCittc2dzdHIgIkRhcyBEaXNrbGFiZWwgYmVzY2hyZWlidCBlaW5lIFBsYXR0ZSBncvbfZXIgYWxzICVzLiIKKworIzogbGlicGFydGVkL2xhYmVscy9zdW4uYzo0NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGRpc2sgaGFzICVkIGN5bGluZGVycywgd2hpY2ggaXMgZ3JlYXRlciB0aGFuIHRoZSBtYXhpbXVtIG9mIDY1NTM2LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3N1bi5jOjczNworbXNnaWQgIiIKKyJUaGUgV2hvbGUgRGlzayBwYXJ0aXRpb24gaXMgdGhlIG9ubHkgYXZhaWxhYmxlIG9uZSBsZWZ0LiAgR2VuZXJhbGx5LCBpdCBpcyAiCisibm90IGEgZ29vZCBpZGVhIHRvIG92ZXJ3cml0ZSB0aGlzIHBhcnRpdGlvbiB3aXRoIGEgcmVhbCBvbmUuICBTb2xhcmlzIG1heSAiCisibm90IGJlIGFibGUgdG8gYm9vdCB3aXRob3V0IGl0LCBhbmQgU0lMTyAodGhlIHNwYXJjIGJvb3QgbG9hZGVyKSBhcHByZWNpYXRlcyAiCisiaXQgYXMgd2VsbC4iCittc2dzdHIgIiIKKyJEaWUgV2hvbGUtRGlzay1QYXJ0aXRpb24gaXN0IGRpZSBlaW56aWcgdmVyYmxlaWJlbmRlLiBFcyBpc3Qgbm9ybWFsZXJ3ZWlzZSAiCisia2VpbmUgZ3V0ZSBJZGVlLCBkaWVzZSBQYXJ0aXRpb24gbWl0IGVpbmVyIGVjaHRlbiB6dSD8YmVyc2NocmVpYmVuLiBTb2xhcmlzICIKKyJib290ZXQgb2huZSB2aWVsbGVpY2h0IG5pY2h0IG1laHIsIHVuZCBTSUxPIChkZXIgU3BhcmMtQm9vdGxhZGVyKSBtYWcgc2llICIKKyJhdWNoLiIKKworIzogbGlicGFydGVkL2xhYmVscy9zdW4uYzo3NTIKK21zZ2lkICJTdW4gZGlzayBsYWJlbCBpcyBmdWxsLiIKK21zZ3N0ciAiRGFzIFN1bi1EaXNrbGFiZWwgaXN0IHZvbGwuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIG9wZW5pbmcgZGV2aWNlICclcycgZmFpbGVkLlxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6MTY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBzZWVraW5nIGRldmljZSAnJXMnIGZhaWxlZC5cbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjE3MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgd3JpdGluZyB0byBkZXZpY2UgJyVzJyBmYWlsZWQsXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzoxNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHJlYWRpbmcgZnJvbSBkZXZpY2UgJyVzJyBmYWlsZWQuXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzoxNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmF0YWwgZXJyb3JcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0MTgKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBWVE9DIGxhYmVscy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDI0Cittc2dpZCAiQ291bGQgbm90IHJlYWQgVlRPQyBGTVQxIERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQzMQorbXNnaWQgIkNvdWxkIG5vdCByZWFkIFZUT0MgRk1UNCBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0MzgKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBWVE9DIEZNVDUgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDQ1Cittc2dpZCAiQ291bGQgbm90IHJlYWQgVlRPQyBGTVQ3IERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQ2MgorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBWVE9DIGxhYmVscy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDY4Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIFZUT0MgRk1UMSBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0NzUKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgVlRPQyBGTVQ0IERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQ4MgorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBWVE9DIEZNVDUgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDg5Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIFZUT0MgRk1UNyBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGlicGFydGVkLmM6Mjk2IGxpYnBhcnRlZC9saWJwYXJ0ZWQuYzozMTYKK21zZ2lkICJPdXQgb2YgbWVtb3J5LiIKK21zZ3N0ciAiSGF1cHRzcGVpY2hlciBlcnNjaPZwZnQuIgorCisjOiBsaWJwYXJ0ZWQvdW5pdC5jOjEzOQorbXNnaWQgIkNhbm5vdCBnZXQgdW5pdCBzaXplIGZvciBzcGVjaWFsIHVuaXQgJ0NPTVBBQ1QnLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvdW5pdC5jOjM4NgorIywgYy1mb3JtYXQKK21zZ2lkICJcIiVzXCIgaGFzIGludmFsaWQgc3ludGF4IGZvciBsb2NhdGlvbnMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC91bml0LmM6Mzk0CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBtYXhpbXVtIGhlYWQgdmFsdWUgaXMgJWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC91bml0LmM6NDAxCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBtYXhpbXVtIHNlY3RvciB2YWx1ZSBpcyAlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL3VuaXQuYzo0MTMgbGlicGFydGVkL3VuaXQuYzo1NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGxvY2F0aW9uICVzIGlzIG91dHNpZGUgb2YgdGhlIGRldmljZSAlcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL3VuaXQuYzo1MjcKK21zZ2lkICJJbnZhbGlkIG51bWJlci4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FmZnMuYzo2MyBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXBmcy5jOjU2CisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXNmcy5jOjcwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBhbGxvY2F0ZSBwYXJ0aXRpb24gYmxvY2tcbiIKK21zZ3N0ciAiRXMgaXN0IG5pY2h0IGZlc3RzdGVsbGJhciwgb2IgZGllIFBhcnRpdGlvbiBlaW5nZWhhbmdlbiAobW91bnRlZCkgaXN0LiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FmZnMuYzo3OCBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXBmcy5jOjcwCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXNmcy5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGFsbG9jYXRlIGJsb2NrXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FmZnMuYzo4MyBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXBmcy5jOjc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogQ291bGRuJ3QgcmVhZCBib290IGJsb2NrICVsbHVcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYWZmcy5jOjk5IGxpYnBhcnRlZC9mcy9hbWlnYS9hcGZzLmM6ODYKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hc2ZzLmM6OTIgbGlicGFydGVkL2ZzL2FtaWdhL2FzZnMuYzoxMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBDb3VsZG4ndCByZWFkIHJvb3QgYmxvY2sgJWxsdVxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jOjcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGFsbG9jYXRlIGlkIGxpc3QgZWxlbWVudFxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IENvdWxkbid0IHJlYWQgYmxvY2sgJWxsdVxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jOjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEJhZCBjaGVja3N1bSBvbiBibG9jayAlbGx1IG9mIHR5cGUgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzoyMTIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogQ291bGRuJ3Qgd3JpdGUgYmxvY2sgJWRcbiIKK21zZ3N0ciAiJXMsIHfkaHJlbmQgYXVmICVzIGdlc2NocmllYmVuIHd1cmRlLiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6Mjc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGFsbG9jYXRlIGRpc2tfc3BlY2lmaWMgcmRiIGJsb2NrXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6Mjg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRGlkbid0IGZpbmQgcmRiIGJsb2NrLCBzaG91bGQgbmV2ZXIgaGFwcGVuXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6MzE4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byByZWFkIHBhcnRpdGlvbiBibG9jayAlbGx1XG4iCittc2dzdHIgIkVzIGlzdCBuaWNodCBmZXN0c3RlbGxiYXIsIG9iIGRpZSBQYXJ0aXRpb24gZWluZ2VoYW5nZW4gKG1vdW50ZWQpIGlzdC4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo4NyBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6MTEyCittc2dpZCAiSW5jb25zaXN0ZW50IGdyb3VwIGRlc2NyaXB0b3JzISIKK21zZ3N0ciAiSW5rb25zaXN0ZW50ZSBHcnVwcGVuZGVza3JpcHRvcmVuISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjkxIGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzoxMTYKKyMsIGZ1enp5Cittc2dpZCAiRmlsZSBzeXN0ZW0gZnVsbCEiCittc2dzdHIgIkRhdGVpc3lzdGVtIHZvbGwhIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6Njg2CisjLCBmdXp6eQorbXNnaWQgIkludmFsaWQgc3VwZXJibG9jay4gIEFyZSB5b3Ugc3VyZSB0aGlzIGlzIGFuIGV4dDIgZmlsZSBzeXN0ZW0/IgorbXNnc3RyICIiCisiVW5n/Gx0aWdlciBTdXBlcmJsb2NrLiBTaW5kIFNpZSBzaWNoZXIsIGRh3yBkYXMgZWluIGV4dDItRGF0ZWlzeXN0ZW0gaXN0PyIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjcwMCBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjY1OAorIywgZnV6enkKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgZXJyb3JzISAgWW91IHNob3VsZCBydW4gZTJmc2NrLiIKK21zZ3N0ciAiRGFzIERhdGVpc3lzdGVtIGhhdCBGZWhsZXIhIFNpZSBzb2xsdGVuIGUyZnNjayBhdWZydWZlbi4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo3MTEKKyMsIGZ1enp5Cittc2dpZCAiIgorIkZpbGUgc3lzdGVtIHdhcyBub3QgY2xlYW5seSB1bm1vdW50ZWQhICBZb3Ugc2hvdWxkIHJ1biBlMmZzY2suICBNb2RpZnlpbmcgYW4gIgorInVuY2xlYW4gZmlsZSBzeXN0ZW0gY291bGQgY2F1c2Ugc2V2ZXJlIGNvcnJ1cHRpb24uIgorbXNnc3RyICIiCisiRGF0ZWlzeXN0ZW0gd3VyZGUgbmljaHQgc2F1YmVyIGF1c2dlaGFuZ2VuICh1bm1vdW50ZWQpISBTaWUgc29sbHRlbiBlMmZzY2sgIgorImF1c2b8aHJlbi4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo3MzEKKyMsIGZ1enp5Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGluY29tcGF0aWJsZSBmZWF0dXJlIGVuYWJsZWQuIgorbXNnc3RyICJEYXMgRGF0ZWlzeXN0ZW0gaGF0IGVpbmUgaW5rb21wYXRpYmxlcyBGdW5rdGlvbiBha3RpdmllcnQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6NzQyCittc2dpZCAiRXJyb3IgYWxsb2NhdGluZyBidWZmZXIgY2FjaGUuIgorbXNnc3RyICJGZWhsZXIgYmVpbSBBbGxvemllcmVuIGRlcyBQdWZmZXJjYWNoZXMuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2lub2RlX3JlbG9jYXRvci5jOjExNAorIywgZnV6enkKK21zZ2lkICIiCisiRm91bmQgYW4gaW5vZGUgd2l0aCBhIGluY29ycmVjdCBsaW5rIGNvdW50LiAgQmV0dGVyIGdvIHJ1biBlMmZzY2sgZmlyc3QhIgorbXNnc3RyICIiCisiSS1Ob2RlIG1pdCB1bmf8bHRpZ2VtIExpbmt65GhsZXIgZ2VmdW5kZW4uIEb8aHJlbiBTaWUgYmVzc2VyIGVyc3QgZTJmc2NrIGF1cyEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfaW5vZGVfcmVsb2NhdG9yLmM6NDg3Cittc2dpZCAiTm90IGVub3VnaCBmcmVlIGlub2RlcyEiCittc2dzdHIgIk5pY2h0IGdlbvxnZW5kIGZyZWllIEktTm9kZXMhIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjIyMworIywgZnV6enkKK21zZ2lkICJGaWxlIHN5c3RlbSBpcyB0b28gZnVsbCB0byByZW1vdmUgYSBncm91cCEiCittc2dzdHIgIkRhdGVpc3lzdGVtIGlzdCB6dSBiZWxlZ3QsIHVtIGVpbmUgR3J1cHBlIHp1IGz2c2NoZW4hIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjIzMgorIywgZnV6enkKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgdG9vIG1hbnkgYWxsb2NhdGVkIGlub2RlcyB0byByZW1vdmUgYSBncm91cCEiCittc2dzdHIgIiIKKyJEYXRlaXN5c3RlbSBoYXQgenUgdmllbGUgYWxsb3ppZXJ0ZSBJLU5vZGVzLCB1bSBlaW5lIEdydXBwZSB6dSBs9nNjaGVuISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo0OTEKK21zZ2lkICJhZGRpbmcgZ3JvdXBzIgorbXNnc3RyICJIaW56dWb8Z2VuIHZvbiBHcnVwcGVuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjUyOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiWW91ciBmaWxlIHN5c3RlbSBpcyB0b28gZnVsbCB0byByZXNpemUgaXQgdG8gJWkgYmxvY2tzLiAgU29ycnkuIgorbXNnc3RyICIiCisiSWhyIERhdGVpc3lzdGVtIGlzdCB6dSBiZWxlZ3QsIHVtIGVzIGF1ZiAlaSBCbPZja2UgenUgcmVkdXppZXJlbi4gU2NoYWRlLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo1MzgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGZpbGUgc3lzdGVtIGhhcyB0b28gbWFueSBvY2N1cGllZCBpbm9kZXMgdG8gcmVzaXplIGl0IHRvICVpIGJsb2Nrcy4gICIKKyJTb3JyeS4iCittc2dzdHIgIiIKKyJJaHIgRGF0ZWlzeXN0ZW0gaGF0IHp1IHZpZWxlIGJlbGVndCBJLU5vZGVzLCB1bSBlcyBhdWYgJWkgQmz2Y2tlIHp1ICIKKyJyZWR1emllcmVuLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo2NjYKKyMsIGZ1enp5Cittc2dpZCAiRmlsZSBzeXN0ZW0gd2FzIG5vdCBjbGVhbmx5IHVubW91bnRlZCEgIFlvdSBzaG91bGQgcnVuIGUyZnNjay4iCittc2dzdHIgIiIKKyJEYXRlaXN5c3RlbSB3dXJkZSBuaWNodCBzYXViZXIgYXVzZ2VoYW5nZW4gKHVubW91bnRlZCkhIFNpZSBzb2xsdGVuIGUyZnNjayAiCisiYXVzZvxocmVuLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo2NzUKK21zZ2lkICIiCisiVGhlIGZpbGUgc3lzdGVtIGhhcyB0aGUgJ2Rpcl9pbmRleCcgZmVhdHVyZSBlbmFibGVkLiAgUGFydGVkIGNhbiBvbmx5IHJlc2l6ZSAiCisidGhlIGZpbGUgc3lzdGVtIGlmIGl0IGRpc2FibGVzIHRoaXMgZmVhdHVyZS4gIFlvdSBjYW4gZW5hYmxlIGl0IGxhdGVyIGJ5ICIKKyJydW5uaW5nICd0dW5lMmZzIC1PIGRpcl9pbmRleCBERVZJQ0UnIGFuZCB0aGVuICdlMmZzY2sgLWZEIERFVklDRScuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NjkxCittc2dpZCAiIgorIkEgcmVzaXplIG9wZXJhdGlvbiBvbiB0aGlzIGZpbGUgc3lzdGVtIHdpbGwgdXNlIEVYUEVSSU1FTlRBTCBjb2RlXG4iCisidGhhdCBNQVkgQ09SUlVQVCBpdCAoYWx0aG91Z2ggbm8gb25lIGhhcyByZXBvcnRlZCBhbnkgc3VjaCBkYW1hZ2UgeWV0KS5cbiIKKyJZb3Ugc2hvdWxkIGF0IGxlYXN0IGJhY2t1cCB5b3VyIGRhdGEgZmlyc3QsIGFuZCBydW4gJ2UyZnNjayAtZicgYWZ0ZXJ3YXJkcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9ibG9ja19yZWxvY2F0b3IuYzoxOTgKKyMsIGZ1enp5Cittc2dpZCAiQ3Jvc3MtbGlua2VkIGJsb2NrcyBmb3VuZCEgIEJldHRlciBnbyBydW4gZTJmc2NrIGZpcnN0ISIKK21zZ3N0ciAiIgorItxiZXJrcmV1ei12ZXJidW5kZW5lIEktTm9kZXMgZ2VmdW5kZW4hIEb8aHJlbiBTaWUgbGllYmVyIGVyc3QgZTJmc2NrIGF1cyEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfYmxvY2tfcmVsb2NhdG9yLmM6NTM3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJCbG9jayAlaSBoYXMgbm8gcmVmZXJlbmNlPyAgV2VpcmQuIgorbXNnc3RyICJCbG9jayAlaSBoYXQga2VpbmUgUmVmZXJlbno/IEtvbWlzY2guIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2Jsb2NrX3JlbG9jYXRvci5jOjczNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQmxvY2sgJWkgc2hvdWxkbid0IGhhdmUgYmVlbiBtYXJrZWQgKCVkLCAlZCkhIgorbXNnc3RyICJCbG9jayAlaSBk/HJmdGUgbmljaHQgbWFya2llcnQgc2VpbiEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2ludGVyZmFjZS5jOjE4NgorIywgZnV6enkKK21zZ2lkICIiCisiVGhlIGV4dDIgZmlsZSBzeXN0ZW0gcGFzc2VkIGEgYmFzaWMgY2hlY2suICBGb3IgYSBtb3JlIGNvbXByZWhlbnNpdmUgY2hlY2ssICIKKyJ1c2UgdGhlIGUyZnNjayBwcm9ncmFtLiIKK21zZ3N0ciAiIgorIkRhcyBleHQyLURhdGVpc3lzdGVtIGhhdCBkZW4gQmFzaXNjaGVjayBiZXN0YW5kZW4uIFVtIGVpbmVuIGtvbXBsZXR0ZXJlbiAiCisiVGVzdCBhdXN6dWb8aHJlbiwgYmVudXR6ZW4gU2llIGJpdHRlIGUyZnNjay4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2ludGVyZmFjZS5jOjIwMworbXNnaWQgIlNvcnJ5LCBjYW4ndCBtb3ZlIHRoZSBzdGFydCBvZiBleHQyIHBhcnRpdGlvbnMgeWV0ISIKK21zZ3N0ciAiIgorIkxlaWRlciBrYW5uIGRlciBBbmZhbmcgdm9uIGV4dDItUGFydGl0aW9uZW4gbm9jaCBuaWNodCB2ZXJzY2hvYmVuIHdlcmRlbi4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfYnVmZmVyLmM6ODIKK21zZ2lkICJDb3VsZG4ndCBmbHVzaCBidWZmZXIgY2FjaGUhIgorbXNnc3RyICJEZXIgUHVmZmVyY2FjaGUga29ubnRlIG5pY2h0IGdlbGVlcnQgd2VyZGVuLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9ta2ZzLmM6MTYyCittc2dpZCAid3JpdGluZyBwZXItZ3JvdXAgbWV0YWRhdGEiCittc2dzdHIgIlNjaHJlaWJlbiBkZXIgTWV0YS1EYXRlbiBwcm8gR3J1cHBlIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX21rZnMuYzo1NjQKK21zZ2lkICJGaWxlIHN5c3RlbSB0b28gc21hbGwgZm9yIGV4dDIuIgorbXNnc3RyICJEYXRlaXN5c3RlbSB6dSBrbGVpbiBm/HIgZXh0Mi4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY2FsYy5jOjEzNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBuZWVkICVzIG9mIGZyZWUgZGlzayBzcGFjZSB0byBzaHJpbmsgdGhpcyBwYXJ0aXRpb24gdG8gdGhpcyBzaXplLiAgIgorIkN1cnJlbnRseSwgb25seSAlcyBpcyBmcmVlLiIKK21zZ3N0ciAiIgorIlNpZSBiZW72dGlnZW4gJWRNIGZyZWllbiBQbGF0dGVucGxhdHosIHVtIGRpZXNlIFBhcnRpdGlvbiBhdWYgZGllc2UgR3L232UgenUgIgorInZlcmtsZWluZXJuIChTaWUgaGFiZW4gZ2VnZW535HJ0aWcgbnVyICVkTSBmcmVpKS4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY29udGV4dC5jOjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDbHVzdGVyIHN0YXJ0IGRlbHRhID0gJWQsIHdoaWNoIGlzIG5vdCBhIG11bHRpcGxlIG9mIHRoZSBjbHVzdGVyIHNpemUgJWQuIgorbXNnc3RyICJDbHVzdGVyc3RhcnQgZGVsdGEgPSAlZCwgd2FzIGtlaW4gVmllbGZhY2hlcyBkZXIgQ2x1c3Rlcmdy9t9lICVkIGlzdC4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvZmF0LmM6MzA4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJQYXJ0aXRpb24gdG9vIGJpZy9zbWFsbCBmb3IgYSAlcyBmaWxlIHN5c3RlbS4iCittc2dzdHIgIlBhcnRpdGlvbiBpc3QgenUgZ3Jv3y9rbGVpbiBm/HIgZWluICVzLURhdGVpc3lzdGVtLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9mYXQuYzo0NzQKK21zZ2lkICIiCisiVGhlIEZBVHMgZG9uJ3QgbWF0Y2guICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRoaXMgbWVhbnMsIHRoZW4gc2VsZWN0ICIKKyJjYW5jZWwsIHJ1biBzY2FuZGlzayBvbiB0aGUgZmlsZSBzeXN0ZW0sIGFuZCB0aGVuIGNvbWUgYmFjay4iCittc2dzdHIgIiIKKyJEaWUgRkFUcyBzdGltbWVuIG5pY2h0IPxiZXJlaW4uIFdlbm4gU2llIG5pY2h0IHdpc3Nlbiwgd2FzIGRhcyBiZWRldXRldCwgIgorInfkaGxlbiBTaWUgQWJicnVjaCwgcnVmZW4gc2NhbmRpc2sgYXVmIGRlbSBEYXRlaXN5c3RlbSBhdWYsIHVuZCB2ZXJzdWNoZW4gZXMgIgorIm5vY2htYWwuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jOjUxNAorbXNnaWQgIlRoZXJlIGFyZSBubyBwb3NzaWJsZSBjb25maWd1cmF0aW9ucyBmb3IgdGhpcyBGQVQgdHlwZS4iCittc2dzdHIgIkVzIGdpYnQga2VpbmUgbfZnbGljaGUgS29uZmlndXJhdGlvbiBm/HIgZGllc2VuIEZBVC1UeXAuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jOjUyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRmlsZSBzeXN0ZW0gZG9lc24ndCBoYXZlIGV4cGVjdGVkIHNpemVzIGZvciBXaW5kb3dzIHRvIGxpa2UgaXQuICBDbHVzdGVyICIKKyJzaXplIGlzICVkayAoJWRrIGV4cGVjdGVkKTsgbnVtYmVyIG9mIGNsdXN0ZXJzIGlzICVkICglZCBleHBlY3RlZCk7IHNpemUgb2YgIgorIkZBVHMgaXMgJWQgc2VjdG9ycyAoJWQgZXhwZWN0ZWQpLiIKK21zZ3N0ciAiIgorIkRhcyBEYXRlaXN5c3RlbSBoYXQgbmljaHQgZGllIEdy9t9lLCBkaWUgV2luZG93cyBtYWcuIERpZSBDbHVzdGVyZ3L232UgaXN0ICUiCisiZGsgKCVkayBlcndhcnRldCk7IGRpZSBDbHVzdGVyemFobCBpc3QgJWQgKCVkIGVyd2FydGV0KTsgZGllIEZBVC1HcvbfZSBpc3QgJSIKKyJkIFNla3RvcmVuICglZCBlcndhcnRldCkuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jOjU0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRmlsZSBzeXN0ZW0gaXMgcmVwb3J0aW5nIHRoZSBmcmVlIHNwYWNlIGFzICVkIGNsdXN0ZXJzLCBub3QgJWQgY2x1c3RlcnMuIgorbXNnc3RyICJEYXRlaXN5c3RlbSBtZWxkZXQgZnJlaWVuIFBsYXR6IGFscyAlZCBDbHVzdGVyLCBuaWNodCAlZCBDbHVzdGVyLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9mYXQuYzo4NzQKKyMsIGZ1enp5Cittc2dpZCAiIgorIkdOVSBQYXJ0ZWQgd2FzIG1pc2NvbXBpbGVkOiB0aGUgRkFUIGJvb3Qgc2VjdG9yIHNob3VsZCBiZSA1MTIgYnl0ZXMuICBGQVQgIgorInN1cHBvcnQgd2lsbCBiZSBkaXNhYmxlZC4iCittc2dzdHIgIiIKKyJHTlUgcGFydGVkIGlzdCBmZWhs/GJlcnNldHp0OiBEZXIgRkFULUJvb3RzZWt0b3Igc29sbHRlIDUxMiBCeXRlcyBzZWluLiBGQVQtIgorIlVudGVyc3T8dHp1bmcgd2lyZCBkZWFrdGl2aWVydC4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6MTU5CisjLCBmdXp6eQorbXNnaWQgIiIKKyJUaGVyZSdzIG5vdCBlbm91Z2ggcm9vbSBpbiB0aGUgcm9vdCBkaXJlY3RvcnkgZm9yIGFsbCBvZiB0aGUgZmlsZXMuICBFaXRoZXIgIgorImNhbmNlbCwgb3IgaWdub3JlIHRvIGxvc2UgdGhlIGZpbGVzLiIKK21zZ3N0ciAiIgorIkVzIGdpYnQgbmljaHQgZ2VudWcgUGxhdHogZvxyIGRhcyBXdXJ6ZWx2ZXJ6ZWljaG5pcywgZvxyIGFsbCBkaWUgRGF0ZWllbi4gIgorIkVudHdlZGVyIGFiYnJlY2hlbiwgb2RlciBpZ25vcmllcmVuLCB1bmQgRGF0ZWllbiB2ZXJsaWVyZW4uIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjMwMAorbXNnaWQgIkVycm9yIHdyaXRpbmcgdG8gdGhlIHJvb3QgZGlyZWN0b3J5LiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gU2NocmVpYmVuIGRlcyBXdXJ6ZWx2ZXJ6ZWljaG5pc3Nlcy4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NDg5CisjLCBmdXp6eQorbXNnaWQgIklmIHlvdSBsZWF2ZSB5b3VyIGZpbGUgc3lzdGVtIGFzIEZBVDE2LCB0aGVuIHlvdSB3aWxsIGhhdmUgbm8gcHJvYmxlbXMuIgorbXNnc3RyICIiCisiV2VubiBTaWUgSWhyIERhdGVpc3lzdGVtIGFscyBGQVQxNiBsYXNzZW4sIHdlcmRlbiBTaWUga2VpbmUgUHJvYmxlbWUgaGFiZW4uIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjQ5MgorbXNnaWQgIiIKKyJJZiB5b3UgY29udmVydCB0byBGQVQxNiwgYW5kIE1TIFdpbmRvd3MgaXMgaW5zdGFsbGVkIG9uIHRoaXMgcGFydGl0aW9uLCB0aGVuICIKKyJ5b3UgbXVzdCByZS1pbnN0YWxsIHRoZSBNUyBXaW5kb3dzIGJvb3QgbG9hZGVyLiAgSWYgeW91IHdhbnQgdG8gZG8gdGhpcywgeW91ICIKKyJzaG91bGQgY29uc3VsdCB0aGUgUGFydGVkIG1hbnVhbCAob3IgeW91ciBkaXN0cmlidXRpb24ncyBtYW51YWwpLiIKK21zZ3N0ciAiIgorIldlbm4gU2llIGluIEZBVDE2IGtvbnZlcnRpZXJlbiB1bmQgTVMtV2luZG93cyBhdWYgZGllc2VyIFBhcnRpdGlvbiAiCisiaW5zdGFsbGllcnQgaXN0LCBt/HNzZW4gU2llIGRlbiBNUy1XaW5kb3dzLUJvb3RsYWRlciByZWluc3RhbGxpZXJlbi4gV2VubiAiCisiU2llIGRhcyB0dW4gd29sbGVuLCBzb2xsdGVuIFNpZSBkYXMgUGFydGVkLUhhbmRidWNoIHN0dWRpZXJlbiAob2RlciBkYXMgIgorIklocmVyIERpc3RyaWJ1dGlvbikuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjUwMAorbXNnaWQgIiIKKyJJZiB5b3UgbGVhdmUgeW91ciBmaWxlIHN5c3RlbSBhcyBGQVQzMiwgdGhlbiB5b3Ugd2lsbCBub3QgaW50cm9kdWNlIGFueSBuZXcgIgorInByb2JsZW1zLiIKK21zZ3N0ciAiIgorIldlbm4gU2llIElociBEYXRlaXN5c3RlbSBhbHMgRkFUMzIgbGFzc2VuLCB3ZXJkZW4gU2llIGtlaW5lIG5ldWVuIFByb2JsZW1lICIKKyJhdXNs9nNlbi4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTA0Cittc2dpZCAiIgorIklmIHlvdSBjb252ZXJ0IHRvIEZBVDMyLCBhbmQgTVMgV2luZG93cyBpcyBpbnN0YWxsZWQgb24gdGhpcyBwYXJ0aXRpb24sIHRoZW4gIgorInlvdSBtdXN0IHJlLWluc3RhbGwgdGhlIE1TIFdpbmRvd3MgYm9vdCBsb2FkZXIuICBJZiB5b3Ugd2FudCB0byBkbyB0aGlzLCB5b3UgIgorInNob3VsZCBjb25zdWx0IHRoZSBQYXJ0ZWQgbWFudWFsIChvciB5b3VyIGRpc3RyaWJ1dGlvbidzIG1hbnVhbCkuICBBbHNvLCAiCisiY29udmVydGluZyB0byBGQVQzMiB3aWxsIG1ha2UgdGhlIGZpbGUgc3lzdGVtIHVucmVhZGFibGUgYnkgTVMgRE9TLCBNUyAiCisiV2luZG93cyA5NWEsIGFuZCBNUyBXaW5kb3dzIE5ULiIKK21zZ3N0ciAiIgorIldlbm4gU2llIHp1IEZBVDMyIGtvbnZlcnRpZXJlbiB1bmQgTVMtV2luZG93cyBhdWYgZGllc2VyIFBhcnRpdGlvbiAiCisiaW5zdGFsbGllcnQgaXN0LCBt/HNzZW4gU2llIGRlbiBNUy1XaW5kb3dzLUJvb3RsYWRlciBuZXUgaW5zdGFsbGllcmVuLiBXZW5uICIKKyJTaWUgZGFzIHR1biB3b2xsZW4sIHNvbGx0ZW4gU2llIGRhcyBQYXJ0ZWQtSGFuZGJ1Y2ggbGVzZW4gKG9kZXIgZGFzIElocmVyICIKKyJEaXN0cmlidXRpb24pLiBBdd9lcmRlbSBrYW5uIG5hY2ggZWluZXIgS29udmVydGllcnVuZyB6dSBGQVQzMiBkYXMgIgorIkRhdGVpc3lzdGVtIG5pY2h0IG1laHIgdm9uIE1TLURPUywgTVMtV2luZG93cyA5NWEgdW5kIE1TLVdpbmRvd3MgTlQgZ2VsZXNlbiAiCisid2VyZGVuLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgICVzICAlcyIKK21zZ3N0ciAiJXMgICVzICAlcyIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1MTkKK21zZ2lkICJXb3VsZCB5b3UgbGlrZSB0byB1c2UgRkFUMzI/IgorbXNnc3RyICJXb2xsZW4gU2llIEZBVDMyIHZlcndlbmRlbj8iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTUwIGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzICAlcyIKK21zZ3N0ciAiJXMgICVzIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjU1MQorbXNnaWQgIiIKKyJUaGUgZmlsZSBzeXN0ZW0gY2FuIG9ubHkgYmUgcmVzaXplZCB0byB0aGlzIHNpemUgYnkgY29udmVydGluZyB0byBGQVQxNi4iCittc2dzdHIgIiIKKyJEYXMgRGF0ZWlzeXN0ZW0ga2FubiBudXIgZ3L232VudmVy5G5kZXJ0IHdlcmRlbiBkdXJjaCBLb252ZXJ0aWVydW5nIHp1IEZBVDE2LiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1NjcKK21zZ2lkICIiCisiVGhlIGZpbGUgc3lzdGVtIGNhbiBvbmx5IGJlIHJlc2l6ZWQgdG8gdGhpcyBzaXplIGJ5IGNvbnZlcnRpbmcgdG8gRkFUMzIuIgorbXNnc3RyICIiCisiRGFzIERhdGVpc3lzdGVtIGthbm4gbnVyIGdy9t9lbnZlcuRuZGVydCB3ZXJkZW4gZHVyY2ggS29udmVydGllcnVuZyB6dSBGQVQzMi4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTgwCisjLCBmdXp6eQorbXNnaWQgIiIKKyJHTlUgUGFydGVkIGNhbm5vdCByZXNpemUgdGhpcyBwYXJ0aXRpb24gdG8gdGhpcyBzaXplLiAgV2UncmUgd29ya2luZyBvbiBpdCEiCittc2dzdHIgIiIKKyJHTlUgUGFydGVkIGthbm4gZGllc2UgUGFydGl0aW9uIG5pY2h0IGF1ZiBkaWVzZSBHcvbfZSB2ZXJrbGVpbmVybi4gV2lyICIKKyJhcmJlaXRlbiBkcmFuISIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6NDkgbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6NTYKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgYW4gaW52YWxpZCBzaWduYXR1cmUgZm9yIGEgRkFUIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiRGF0ZWlzeXN0ZW0gaGF0IGVpbmUgdW5n/Gx0aWdlIFNpZ25hdHVyZSBm/HIgZWluIEZBVC1EYXRlaXN5c3RlbS4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjY0Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGludmFsaWQgc2VjdG9yIHNpemUgZm9yIGEgRkFUIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiRGF0ZWlzeXN0ZW0gaGF0IGVpbmUgdW5n/Gx0aWdlIFNla3Rvcmdy9t9lIGb8ciBlaW4gRkFULURhdGVpc3lzdGVtLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6NzEKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgYW4gaW52YWxpZCBjbHVzdGVyIHNpemUgZm9yIGEgRkFUIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiRGF0ZWlzeXN0ZW0gaGF0IGVpbmUgdW5n/Gx0aWdlIENsdXN0ZXJncvbfZSBm/HIgZWluIEZBVC1EYXRlaXN5c3RlbS4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjc4CisjLCBmdXp6eQorbXNnaWQgIiIKKyJGaWxlIHN5c3RlbSBoYXMgYW4gaW52YWxpZCBudW1iZXIgb2YgcmVzZXJ2ZWQgc2VjdG9ycyBmb3IgYSBGQVQgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICIiCisiRGF0ZWlzeXN0ZW0gaGF0IGVpbmUgdW5n/Gx0aWdlIFphaGwgdm9uIHJlc2VydmllcnRlbiBTZWt0b3JlbiBm/HIgZWluIEZBVC0iCisiRGF0ZWlzeXN0ZW0uIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo4NQorIywgZnV6enkKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgYW4gaW52YWxpZCBudW1iZXIgb2YgRkFUcy4iCittc2dzdHIgIkRhdGVpc3lzdGVtIGhhdCBlaW5lIHVuZ/xsdGlnZSBaYWhsIHZvbiBGQVRzLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6MTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGlzIGZpbGUgc3lzdGVtIGhhcyBhIGxvZ2ljYWwgc2VjdG9yIHNpemUgb2YgJWQuICBHTlUgUGFydGVkIGlzIGtub3duIG5vdCAiCisidG8gd29yayBwcm9wZXJseSB3aXRoIHNlY3RvciBzaXplcyBvdGhlciB0aGFuIDUxMiBieXRlcy4iCittc2dzdHIgIiIKKyJEaWVzZXMgRGF0ZWlzeXN0ZW0gaGF0IGVpbmUgbG9naXNjaGUgU2VrdG9yZ3L232Ugdm9uICVkLiBHTlUgUGFydGVkICIKKyJmdW5rdGlvbmllcnQgZvxyIFNla3Rvcmdy9t9lbiB2ZXJzY2hpZWRlbiB2b24gNTEyIEJ5dGVzIG5pY2h0IHJpY2h0aWcuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzoxNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmaWxlIHN5c3RlbSdzIENIUyBnZW9tZXRyeSBpcyAoJWQsICVkLCAlZCksIHdoaWNoIGlzIGludmFsaWQuICBUaGUgIgorInBhcnRpdGlvbiB0YWJsZSdzIENIUyBnZW9tZXRyeSBpcyAoJWQsICVkLCAlZCkuICBJZiB5b3Ugc2VsZWN0IElnbm9yZSwgdGhlICIKKyJmaWxlIHN5c3RlbSdzIENIUyBnZW9tZXRyeSB3aWxsIGJlIGxlZnQgdW5jaGFuZ2VkLiAgSWYgeW91IHNlbGVjdCBGaXgsIHRoZSAiCisiZmlsZSBzeXN0ZW0ncyBDSFMgZ2VvbWV0cnkgd2lsbCBiZSBzZXQgdG8gbWF0Y2ggdGhlIHBhcnRpdGlvbiB0YWJsZSdzIENIUyAiCisiZ2VvbWV0cnkuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjIxMworbXNnaWQgIkZBVCBib290IHNlY3RvciBzYXlzIGxvZ2ljYWwgc2VjdG9yIHNpemUgaXMgMC4gIFRoaXMgaXMgd2VpcmQuICIKK21zZ3N0ciAiIgorIkRlciBGQVQtQm9vdHNla3RvciBzYWd0LCBkaWUgbG9naXNjaGUgU2VrdG9yZ3L232Ugc2VpIDAuIERhcyBpc3Qga29taXNjaC4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjIxOQorbXNnaWQgIkZBVCBib290IHNlY3RvciBzYXlzIHRoZXJlIGFyZSBubyBGQVQgdGFibGVzLiAgVGhpcyBpcyB3ZWlyZC4gIgorbXNnc3RyICJEZXIgRkFULUJvb3RzZWt0b3Igc2FndCBlcyBnaWJ0IGtlaW5lIEZBVC1UYWJlbGxlbi4gRGFzIGlzdCBrb21pc2NoLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6MjI1Cittc2dpZCAiRkFUIGJvb3Qgc2VjdG9yIHNheXMgY2x1c3RlcnMgYXJlIDAgc2VjdG9ycy4gIFRoaXMgaXMgd2VpcmQuICIKK21zZ3N0ciAiIgorIkRlciBGQVQtQm9vdHNla3RvciBzYWd0IENsdXN0ZXIgc2VpZW4gMCBTZWt0b3JlbiBncm/fLiBEYXMgaXN0IGtvbWlzY2guIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzoyMzUKKyMsIGZ1enp5Cittc2dpZCAiRmlsZSBzeXN0ZW0gaXMgRkFUMTIsIHdoaWNoIGlzIHVuc3VwcG9ydGVkLiIKK21zZ3N0ciAiRGF0ZWlzeXN0ZW0gaXN0IEZBVDEyLCB3YXMgZ2VnZW535HJ0aWcgbmljaHQgdW50ZXJzdPx0enQgd2lyZC4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjQxMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGluZm9ybWF0aW9uIHNlY3RvciBoYXMgdGhlIHdyb25nIHNpZ25hdHVyZSAoJXgpLiAgU2VsZWN0IGNhbmNlbCBmb3Igbm93LCAiCisiYW5kIHNlbmQgaW4gYSBidWcgcmVwb3J0LiAgSWYgeW91J3JlIGRlc3BlcmF0ZSwgaXQncyBwcm9iYWJseSBzYWZlIHRvIGlnbm9yZS4iCittc2dzdHIgIiIKKyJEZXIgSW5mb3JtYXRpb25zc2VrdG9yIGhhdCBkaWUgZmFsc2NoZSBTaWduYXR1ciAoJXgpLiBX5GhsZW4gU2llIGpldHp0ICIKKyJBYmJyZWNoZW4sIHVuZCBzZW5kZW4gU2llIGVpbmVuIEJ1Z3JlcG9ydC4gV2VubiBlcyBzZWluIG113ywga/ZubmVuIFNpZSBkYXMgIgorImF1Y2ggaWdub3JpZXJlbi4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY291bnQuYzoxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIGRpcmVjdG9yeSBlbnRyeSBmb3IgJXM6IGZpcnN0IGNsdXN0ZXIgaXMgdGhlIGVuZCBvZiBmaWxlIG1hcmtlci4iCittc2dzdHIgIiIKKyJGYWxzY2hlciBWZXJ6ZWljaG5pc2VpbnRyYWcgZvxyICVzOiBFcnN0ZXIgQ2x1c3RlciBpc3QgYW0gRW5kZSBkZXMgIgorIkRhdGVpbWFya2Vycy4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY291bnQuYzoxNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkJhZCBGQVQ6IHVudGVybWluYXRlZCBjaGFpbiBmb3IgJXMuICBZb3Ugc2hvdWxkIHJ1biBkb3Nmc2NrIG9yIHNjYW5kaXNrLiIKK21zZ3N0ciAiIgorIkZhbHNjaGUgRkFUOiB1bmJlZW5kZXRlIEtldHRlIGb8ciAlcy4gU2llIHNvbGx0ZW4gZG9zZnNjayBvZGVyIHNjYW5kaXNrICIKKyJhdXNm/GhyZW4uIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvdW50LmM6MTc0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiQmFkIEZBVDogY2x1c3RlciAlZCBvdXRzaWRlIGZpbGUgc3lzdGVtIGluIGNoYWluIGZvciAlcy4gIFlvdSBzaG91bGQgcnVuICIKKyJkb3Nmc2NrIG9yIHNjYW5kaXNrLiIKK21zZ3N0ciAiIgorIkZBVC1GZWhsZXI6IENsdXN0ZXIgJWQgaXN0IGF132VyaGFsYiBkZXMgRGF0ZWlzeXN0ZW1zIGluIEtldHRlIGb8ciAlcy4gU2llICIKKyJzb2xsdGVuIGRvc2ZzY2sgb2RlciBzY2FuZGlzayBhdXNm/GhyZW4uIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvdW50LmM6MTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJCYWQgRkFUOiBjbHVzdGVyICVkIGlzIGNyb3NzLWxpbmtlZCBmb3IgJXMuICBZb3Ugc2hvdWxkIHJ1biBkb3Nmc2NrIG9yICIKKyJzY2FuZGlzay4iCittc2dzdHIgIiIKKyJGQVQtRmVobGVyOiBDbHVzdGVyICVkIGlzdCD8YmVya3JldXogdmVyYnVuZGVuIGb8ciAlcy4gU2llIHNvbGx0ZW4gZG9zZnNjayAiCisib2RlciBzY2FuZGlzayBhdXNm/GhyZW4uIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvdW50LmM6MjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzICVkaywgYnV0IGl0IGhhcyAlZCBjbHVzdGVycyAoJWRrKS4iCittc2dzdHIgIiVzIGlzdCAlZGssIGhhdCBhYmVyICVkIENsdXN0ZXIgKCVkaykuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvdW50LmM6MjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZmlsZSAlcyBpcyBtYXJrZWQgYXMgYSBzeXN0ZW0gZmlsZS4gIFRoaXMgbWVhbnMgbW92aW5nIGl0IGNvdWxkIGNhdXNlICIKKyJzb21lIHByb2dyYW1zIHRvIHN0b3Agd29ya2luZy4iCittc2dzdHIgIiIKKyJEaWUgRGF0ZWkgJXMgaXN0IGFscyBTeXN0ZW1kYXRlaSBtYXJraWVydC4gRGFzIGJlZGV1dGV0LCBkYXNzIG5hY2ggZGVtICIKKyJWZXJzY2hpZWJlbiBlaW5pZ2UgUHJvZ3JhbW1lIG5pY2h0IG1laHIgZnVua3Rpb25pZXJlbi4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvdGFibGUuYzoxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZBVCAlZCBtZWRpYSAleCBkb2Vzbid0IG1hdGNoIHRoZSBib290IHNlY3RvcidzIG1lZGlhICV4LiAgWW91IHNob3VsZCAiCisicHJvYmFibHkgcnVuIHNjYW5kaXNrLiIKK21zZ3N0ciAiIgorIkZBVCAlZCBNZWRpdW0gJXggc3RpbW10IG5pY2h0IG1pdCBkZW0gQm9vdHNla3RvciB2b24gTWVkaXVtICV4/GJlcmVpbi4gU2llICIKKyJzb2xsdGVuIHdvaGwgc2NhbmRpc2sgYXVmcnVmZW4uIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3RhYmxlLmM6MjY5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYXRfdGFibGVfc2V0OiBjbHVzdGVyICVsZCBvdXRzaWRlIGZpbGUgc3lzdGVtIgorbXNnc3RyICJmYXRfdGFibGVfc2V0OiBDbHVzdGVyICVsZCBpc3QgYXXfZXJoYWxiIGRlcyBEYXRlaXN5c3RlbXMuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3RhYmxlLmM6MzAxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYXRfdGFibGVfZ2V0OiBjbHVzdGVyICVsZCBvdXRzaWRlIGZpbGUgc3lzdGVtIgorbXNnc3RyICJmYXRfdGFibGVfZ2V0OiBDbHVzdGVyICVsZCBpc3QgYXXfZXJoYWxiIGRlcyBEYXRlaXN5c3RlbXMuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3RhYmxlLmM6MzQzCittc2dpZCAiZmF0X3RhYmxlX2FsbG9jX2NsdXN0ZXI6IG5vIGZyZWUgY2x1c3RlcnMiCittc2dzdHIgImZhdF90YWJsZV9hbGxvY19jbHVzdGVyOiBLZWluZSBmcmVpZW4gQ2x1c3Rlci4iCisKKyM6IGxpYnBhcnRlZC9mcy9saW51eF9zd2FwL2xpbnV4X3N3YXAuYzoyNzUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVucmVjb2duaXNlZCBvbGQgc3R5bGUgbGludXggc3dhcCBzaWduYXR1cmUgJyUxMHMnLiIKK21zZ3N0ciAiVW5iZWthbm50ZSBMaW51eC1Td2FwLVNpZ25hdHVyICclMTBzJy4iCisKKyM6IGxpYnBhcnRlZC9mcy9saW51eF9zd2FwL2xpbnV4X3N3YXAuYzozMTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVucmVjb2duaXNlZCBuZXcgc3R5bGUgbGludXggc3dhcCBzaWduYXR1cmUgJyUxMHMnLiIKK21zZ3N0ciAiVW5iZWthbm50ZSBMaW51eC1Td2FwLVNpZ25hdHVyICclMTBzJy4iCisKKyM6IGxpYnBhcnRlZC9mcy9saW51eF9zd2FwL2xpbnV4X3N3YXAuYzozNTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVucmVjb2duaXNlZCBzd3N1c3AgbGludXggc3dhcCBzaWduYXR1cmUgJyU5cycuIgorbXNnc3RyICJVbmJla2FubnRlIExpbnV4LVN3YXAtU2lnbmF0dXIgJyUxMHMnLiIKKworIzogbGlicGFydGVkL2ZzL2xpbnV4X3N3YXAvbGludXhfc3dhcC5jOjQzNAorbXNnaWQgIlRvbyBtYW55IGJhZCBwYWdlcy4iCittc2dzdHIgIlp1IHZpZWxlIGZhbHNjaGUgU2VpdGVuLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9hZHZmcy5jOjEyMSBsaWJwYXJ0ZWQvZnMvaGZzL2FkdmZzX3BsdXMuYzoxMjIKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzo0MTQgbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjUwOAorIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NTM5IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjY1OAorIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NzcyCittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIGNvbnRhaW5zIGVycm9ycy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9hZHZmc19wbHVzLmM6Mjg3Cittc2dpZCAiQmFkIGJsb2NrcyBjb3VsZCBub3QgYmUgcmVhZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9jYWNoZS5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVHJ5aW5nIHRvIHJlZ2lzdGVyIGFuIGV4dGVudCBzdGFydGluZyBhdCBibG9jayAweCVYLCBidXQgYW5vdGhlciBvbmUgYWxyZWFkeSAiCisiZXhpc3RzIGF0IHRoaXMgcG9zaXRpb24uICBZb3Ugc2hvdWxkIGNoZWNrIHRoZSBmaWxlIHN5c3RlbSEiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9jYWNoZS5jOjIxNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVHJ5aW5nIHRvIG1vdmUgYW4gZXh0ZW50IGZyb20gYmxvY2sgT3glWCB0byBibG9jayBPeCVYLCBidXQgYW5vdGhlciBvbmUgIgorImFscmVhZHkgZXhpc3RzIGF0IHRoaXMgcG9zaXRpb24uICBUaGlzIHNob3VsZCBub3QgaGFwcGVuISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGUuYzoxNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHVwZGF0ZSB0aGUgZXh0ZW50IGNhY2hlIGZvciBIRlMgZmlsZSB3aXRoIENOSUQgJVguIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZS5jOjE4MAorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgdG8gcmVhZCBIRlMgZmlsZSB3aXRoIENOSUQgJVggYmVoaW5kIEVPRi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlLmM6MTkwIGxpYnBhcnRlZC9mcy9oZnMvZmlsZS5jOjIyMAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCBzZWN0b3IgJWxsaSBvZiBIRlMgZmlsZSB3aXRoIENOSUQgJVguIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZS5jOjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgdG8gd3JpdGUgSEZTIGZpbGUgd2l0aCBDTklEICVYIGJlaGluZCBFT0YuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZV9wbHVzLmM6MTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB1cGRhdGUgdGhlIGV4dGVudCBjYWNoZSBmb3IgSEZTKyBmaWxlIHdpdGggQ05JRCAlWC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlX3BsdXMuYzoyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIHRvIHJlYWQgSEZTKyBmaWxlIHdpdGggQ05JRCAlWCBiZWhpbmQgRU9GLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGVfcGx1cy5jOjIxMyBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGVfcGx1cy5jOjI1NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCBzZWN0b3IgJWxsaSBvZiBIRlMrIGZpbGUgd2l0aCBDTklEICVYLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGVfcGx1cy5jOjI0NQorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgdG8gd3JpdGUgSEZTKyBmaWxlIHdpdGggQ05JRCAlWCBiZWhpbmQgRU9GLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjIzMgorbXNnaWQgIlNvcnJ5LCBIRlMgY2Fubm90IGJlIHJlc2l6ZWQgdGhhdCB3YXkgeWV0LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjI2MiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjY0MQorbXNnaWQgIkRhdGEgcmVsb2NhdGlvbiBoYXMgZmFpbGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjI4MQorbXNnaWQgIkRhdGEgcmVsb2NhdGlvbiBsZWZ0IHNvbWUgZGF0YSBpbiB0aGUgZW5kIG9mIHRoZSB2b2x1bWUuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MzIwCisjLCBmdXp6eQorbXNnaWQgIndyaXRpbmcgSEZTIE1hc3RlciBEaXJlY3RvcnkgQmxvY2siCittc2dzdHIgIkZlaGxlciBiZWltIFNjaHJlaWJlbiBkZXMgV3VyemVsdmVyemVpY2huaXNzZXMuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjQ2OAorbXNnaWQgIk5vIHZhbGlkIEhGU1srWF0gc2lnbmF0dXJlIGhhcyBiZWVuIGZvdW5kIHdoaWxlIG9wZW5pbmcuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NDc4CisjLCBjLWZvcm1hdAorbXNnaWQgIlZlcnNpb24gJWQgb2YgSEZTKyBpc24ndCBzdXBwb3J0ZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NDg5CisjLCBjLWZvcm1hdAorbXNnaWQgIlZlcnNpb24gJWQgb2YgSEZTWCBpc24ndCBzdXBwb3J0ZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NjcyCittc2dpZCAiRGF0YSByZWxvY2F0aW9uIGxlZnQgc29tZSBkYXRhIGF0IHRoZSBlbmQgb2YgdGhlIHZvbHVtZS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo3MjAKKyMsIGZ1enp5Cittc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0aGUgYWxsb2NhdGlvbiBmaWxlLiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gU2NocmVpYmVuIGRlcyBXdXJ6ZWx2ZXJ6ZWljaG5pc3Nlcy4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NzM1Cittc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0aGUgY29tcGF0aWJpbGl0eSBwYXJ0IG9mIHRoZSBhbGxvY2F0aW9uIGZpbGUuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NzUwCittc2dpZCAid3JpdGluZyBIRlMrIFZvbHVtZSBIZWFkZXIiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo4NTAKK21zZ2lkICJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBsb29raW5nIGZvciB0aGUgbWFuZGF0b3J5IGJhZCBibG9ja3MgZmlsZS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo5MDQKK21zZ2lkICIiCisiSXQgc2VlbXMgdGhlcmUgaXMgYW4gZXJyb3IgaW4gdGhlIEhGUyB3cmFwcGVyOiB0aGUgYmFkIGJsb2NrcyBmaWxlIGRvZXNuJ3QgIgorImNvbnRhaW4gdGhlIGVtYmVkZGVkIEhGUysgdm9sdW1lLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjk0MAorbXNnaWQgIlNvcnJ5LCBIRlMrIGNhbm5vdCBiZSByZXNpemVkIHRoYXQgd2F5IHlldC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo5NzUKK21zZ2lkICJzaHJpbmtpbmcgZW1iZWRkZWQgSEZTKyB2b2x1bWUiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo5OTEKK21zZ2lkICJSZXNpemluZyB0aGUgSEZTKyB2b2x1bWUgaGFzIGZhaWxlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo5OTgKKyMsIGZ1enp5Cittc2dpZCAic2hyaW5raW5nIEhGUyB3cmFwcGVyIgorbXNnc3RyICJ2ZXJrbGVpbmVybmQiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MTAwNworbXNnaWQgIlVwZGF0aW5nIHRoZSBIRlMgd3JhcHBlciBoYXMgZmFpbGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjExMDkgbGlicGFydGVkL2ZzL2hmcy9oZnMuYzoxMTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGlzIGlzIG5vdCBhIHJlYWwgJXMgY2hlY2suICBUaGlzIGlzIGdvaW5nIHRvIGV4dHJhY3Qgc3BlY2lhbCBsb3cgbGV2ZWwgIgorImZpbGVzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjE1NQorbXNnaWQgIkJhZCBibG9jayBsaXN0IGhlYWRlciBjaGVja3N1bS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJbnZhbGlkIHNpemUgb2YgYSB0cmFuc2FjdGlvbiBibG9jayB3aGlsZSByZXBsYXlpbmcgdGhlIGpvdXJuYWwgKCVpIGJ5dGVzKS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MjYwCittc2dpZCAiIgorIkpvdXJuYWwgc3RvcmVkIG91dHNpZGUgb2YgdGhlIHZvbHVtZSBhcmUgbm90IHN1cHBvcnRlZC4gIFRyeSB0byBkZXNhY3RpdmF0ZSAiCisidGhlIGpvdXJuYWwgYW5kIHJ1biBQYXJ0ZWQgYWdhaW4uIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjI3MQorIywgZnV6enkKK21zZ2lkICJKb3VybmFsIG9mZnNldCBvciBzaXplIGlzIG5vdCBtdWx0aXBsZSBvZiB0aGUgc2VjdG9yIHNpemUuIgorbXNnc3RyICJDbHVzdGVyc3RhcnQgZGVsdGEgPSAlZCwgd2FzIGtlaW4gVmllbGZhY2hlcyBkZXIgQ2x1c3Rlcmdy9t9lICVkIGlzdC4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjI5MgorbXNnaWQgIkluY29ycmVjdCBtYWdpYyB2YWx1ZXMgaW4gdGhlIGpvdXJuYWwgaGVhZGVyLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozMDIKK21zZ2lkICJKb3VybmFsIHNpemUgbWlzbWF0Y2ggYmV0d2VlbiBqb3VybmFsIGluZm8gYmxvY2sgYW5kIGpvdXJuYWwgaGVhZGVyLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozMTQKKyMsIGZ1enp5Cittc2dpZCAiU29tZSBoZWFkZXIgZmllbGRzIGFyZSBub3QgbXVsdGlwbGUgb2YgdGhlIHNlY3RvciBzaXplLiIKK21zZ3N0ciAiQ2x1c3RlcnN0YXJ0IGRlbHRhID0gJWQsIHdhcyBrZWluIFZpZWxmYWNoZXMgZGVyIENsdXN0ZXJncvbfZSAlZCBpc3QuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozMjMKK21zZ2lkICIiCisiVGhlIHNlY3RvciBzaXplIHN0b3JlZCBpbiB0aGUgam91cm5hbCBpcyBub3QgNTEyIGJ5dGVzLiAgUGFydGVkIG9ubHkgIgorInN1cHBvcnRzIDUxMiBieXRlcyBsZW5ndGggc2VjdG9ycy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MzM1Cittc2dpZCAiQmFkIGpvdXJuYWwgY2hlY2tzdW0uIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjM1MworbXNnaWQgIiIKKyJUaGUgam91cm5hbCBpcyBub3QgZW1wdHkuICBQYXJ0ZWQgbXVzdCByZXBsYXkgdGhlIHRyYW5zYWN0aW9ucyBiZWZvcmUgIgorIm9wZW5pbmcgdGhlIGZpbGUgc3lzdGVtLiAgVGhpcyB3aWxsIG1vZGlmeSB0aGUgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjM4MQorbXNnaWQgIiIKKyJUaGUgdm9sdW1lIGhlYWRlciBvciB0aGUgbWFzdGVyIGRpcmVjdG9yeSBibG9jayBoYXMgY2hhbmdlZCB3aGlsZSByZXBsYXlpbmcgIgorInRoZSBqb3VybmFsLiAgWW91IHNob3VsZCByZXN0YXJ0IFBhcnRlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9wcm9iZS5jOjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQYXJ0ZWQgY2FuJ3QgdXNlIEhGUyBmaWxlIHN5c3RlbXMgb24gZGlza3Mgd2l0aCBhIHNlY3RvciBzaXplIG5vdCBlcXVhbCB0byAlIgorImQgYnl0ZXMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzoxNTEgbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6MTU1Cittc2dpZCAiQW4gZXh0ZW50IGhhcyBub3QgYmVlbiByZWxvY2F0ZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzoyNTEgbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6MzA3Cittc2dpZCAiIgorIkEgcmVmZXJlbmNlIHRvIGFuIGV4dGVudCBjb21lcyBmcm9tIGEgcGxhY2UgaXQgc2hvdWxkIG5vdC4gIFlvdSBzaG91bGQgY2hlY2sgIgorInRoZSBmaWxlIHN5c3RlbSEiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjM4MQorbXNnaWQgIlRoaXMgSEZTIHZvbHVtZSBoYXMgbm8gY2F0YWxvZyBmaWxlLiAgVGhpcyBpcyB2ZXJ5IHVudXN1YWwhIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzo0NzUKK21zZ2lkICJUaGlzIEhGUyB2b2x1bWUgaGFzIG5vIGV4dGVudHMgb3ZlcmZsb3cgZmlsZS4gIFRoaXMgaXMgcXVpdGUgdW51c3VhbCEiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjUxNyBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo2NjgKK21zZ2lkICIiCisiVGhlIGV4dGVudHMgb3ZlcmZsb3cgZmlsZSBzaG91bGQgbm90IGNvbnRhaW4gaXRzIG93biBleHRlbnRzISAgWW91IHNob3VsZCAiCisiY2hlY2sgdGhlIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NTc0IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjg0NworIywgZnV6enkKK21zZ2lkICJDb3VsZCBub3QgY2FjaGUgdGhlIGZpbGUgc3lzdGVtIGluIG1lbW9yeS4iCittc2dzdHIgIkRhdGVpc3lzdGVtIHd1cmRlIG5pY2h0IGVya2FubnQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NjM1IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjkwOAorbXNnaWQgIkJhZCBibG9ja3MgbGlzdCBjb3VsZCBub3QgYmUgbG9hZGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NjQ5IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjkyNAorbXNnaWQgIkFuIGVycm9yIG9jY3VycmVkIGR1cmluZyBleHRlbnQgcmVsb2NhdGlvbi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NDk1Cittc2dpZCAiVGhpcyBIRlMrIHZvbHVtZSBoYXMgbm8gY2F0YWxvZyBmaWxlLiAgVGhpcyBpcyB2ZXJ5IHVudXN1YWwhIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjYxOQorbXNnaWQgIlRoaXMgSEZTKyB2b2x1bWUgaGFzIG5vIGV4dGVudHMgb3ZlcmZsb3cgZmlsZS4gIFRoaXMgaXMgcXVpdGUgdW51c3VhbCEiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjk0Cittc2dpZCAiZGlzcGxheXMgdGhpcyBoZWxwIG1lc3NhZ2UiCittc2dzdHIgInplaWd0IGRpZSBIaWxmZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjk1Cittc2dpZCAibGlzdHMgcGFydGl0aW9uIGxheW91dCBvbiBhbGwgYmxvY2sgZGV2aWNlcyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6OTYKK21zZ2lkICJkaXNwbGF5cyBtYWNoaW5lIHBhcnNlYWJsZSBvdXRwdXQiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjk3Cittc2dpZCAibmV2ZXIgcHJvbXB0cyBmb3IgdXNlciBpbnRlcnZlbnRpb24iCittc2dzdHIgImJpdHRldCBuaWUgdW0gTnV0emVyaW50ZXJ2ZW50aW9uIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6OTgKK21zZ2lkICJkaXNwbGF5cyB0aGUgdmVyc2lvbiIKK21zZ3N0ciAiemVpZ3QgZGllIFZlcnNpb24iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMTEKKyMsIGZ1enp5Cittc2dpZCAiIgorIk5VTUJFUiBpcyB0aGUgcGFydGl0aW9uIG51bWJlciB1c2VkIGJ5IExpbnV4LiAgT24gTVMtRE9TIGRpc2sgbGFiZWxzLCB0aGUgIgorInByaW1hcnkgcGFydGl0aW9ucyBudW1iZXIgZnJvbSAxIHRvIDQsIGxvZ2ljYWwgcGFydGl0aW9ucyBmcm9tIDUgb253YXJkcy5cbiIKK21zZ3N0ciAiIgorIk1JTk9SIGlzdCBkaWUgdm9uIExpbnV4IHZlcndlbmRldGUgUGFydGl0aW9uc251bW1lci4gQXVmIE1TLURPUy1EaXNrbGFiZWwgIgorImhhYmVuIGRpZSBwcmlt5HJlbiBQYXJ0aXRpb25lbiBkaWUgTnVtbWVybiAxLTQsIGRpZSBsb2dpc2NoZW4gTGF1ZndlcmtlICIKKyJiZWdpbm5lbiBiZWkgNS5cbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjExNAorbXNnaWQgIkxBQkVMLVRZUEUgaXMgb25lIG9mOiAiCittc2dzdHIgIkxBQkVMLVRZUCBpc3QgZWluZXMgYXVzOiAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMTUKK21zZ2lkICJGTEFHIGlzIG9uZSBvZjogIgorbXNnc3RyICJGTEFHIGlzdCBlaW5lcyBhdXM6ICIKKworIzogcGFydGVkL3BhcnRlZC5jOjExNgorIywgZnV6enkKK21zZ2lkICJVTklUIGlzIG9uZSBvZjogIgorbXNnc3RyICJGTEFHIGlzdCBlaW5lcyBhdXM6ICIKKworIzogcGFydGVkL3BhcnRlZC5jOjExNworbXNnaWQgIlBBUlQtVFlQRSBpcyBvbmUgb2Y6IHByaW1hcnksIGxvZ2ljYWwsIGV4dGVuZGVkXG4iCittc2dzdHIgIlBBUlQtVFlQIGlzdCBlaW5lcyBhdXM6IHByaW1hcnksIGxvZ2ljYWwsIGV4dGVuZGVkXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMTkKK21zZ2lkICJGUy1UWVBFIGlzIG9uZSBvZjogIgorbXNnc3RyICJGUy1UWVAgaXN0IGVpbmVzIGF1czogIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIwCittc2dpZCAiIgorIlNUQVJUIGFuZCBFTkQgYXJlIGRpc2sgbG9jYXRpb25zLCBzdWNoIGFzIDRHQiBvciAxMCUuICBOZWdhdGl2ZSB2YWx1ZXMgY291bnQgIgorImZyb20gdGhlIGVuZCBvZiB0aGUgZGlzay4gIEZvciBleGFtcGxlLCAtMXMgc3BlY2lmaWVzIGV4YWN0bHkgdGhlIGxhc3QgIgorInNlY3Rvci5cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIzCittc2dpZCAiU1RBVEUgaXMgb25lIG9mOiBvbiwgb2ZmXG4iCittc2dzdHIgIlNUQVRFIGlzdCBlaW5lcyBhdXM6IG9uLCBvZmZcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyNAorbXNnaWQgIkRFVklDRSBpcyB1c3VhbGx5IC9kZXYvaGRhIG9yIC9kZXYvc2RhXG4iCittc2dzdHIgIkdFUsRUIGlzdCBub3JtYWxlcndlaXNlIC9kZXYvaGRhIG9kZXIgL2Rldi9zZGFcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyNQorbXNnaWQgIk5BTUUgaXMgYW55IHdvcmQgeW91IHdhbnRcbiIKK21zZ3N0ciAiTkFNRSBpc3QgZWluIGJlbGllYmlnZXMgV29ydCBJaHJlciBXYWhsLlxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTI2Cittc2dpZCAiVGhlIHBhcnRpdGlvbiBtdXN0IGhhdmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgRlMtVFlQRXM6ICIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTMwCisjLCBmdXp6eQorbXNnaWQgIiIKKyJDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLlxuIgorIlRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlLCBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS5cbiIKKyJcbiIKKyJUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiIKKyJidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuIgorIk1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbiIKKyJHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuIgorIlxuIgorbXNnc3RyICIiCisiQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLlxuIgorItxiZXJzZXR6dW5nZW4gc2luZCBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy5cbiIKKyJEaWVzZXMgUHJvZ3JhbW0gaXN0IGZyZWllIFNvZnR3YXJlIHVudGVyIGRlbiBSZWdlbG4gZGVyIEdOVSBHZW5lcmFsXG4iCisiUHVibGljIExpY2Vuc2UuXG4iCisiXG4iCisiRGllc2VzIFByb2dyYW1tIHdpcmQgaW4gZGVyIEhvZmZudW5nIHZlcnRlaWx0LCBkYd8gZXMgbvx0emxpY2ggaXN0LFxuIgorImplZG9jaCBPSE5FIEpFR0xJQ0hFIEdBUkFOVElFOyBzb2dhciBvaG5lIGRpZSBpbXBsaXppdGUgR2FyYW50aWUgZGVyXG4iCisiTUFSS1RGxEhJR0tFSVQgb2RlciBkZXIgRVJG3ExMVU5HIEVJTkVTIEJFU1RJTU1URU4gWldFQ0tFUy4gIEluIGRlclxuIgorIlwiR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcIiBr9m5uZW4gd2VpdGVyZSBFaW56ZWxoZWl0ZW4gbmFjaGdlbGVzZW5cbiIKKyJ3ZXJkZW4uXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTAuZiUlXHQodGltZSBsZWZ0ICUuMmQ6JS4yZCkiCittc2dzdHIgIiUwLmYlJVx0KFJlc3R6ZWl0ICUuMmQ6JS4yZCkiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBhcnRpdGlvbiAlcyBpcyBiZWluZyB1c2VkLiBZb3UgbXVzdCB1bm1vdW50IGl0IGJlZm9yZSB5b3UgbW9kaWZ5IGl0IHdpdGggIgorIlBhcnRlZC4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICJQYXJ0aXRpb24ocykgb24gJXMgYXJlIGJlaW5nIHVzZWQuIgorbXNnc3RyICJQYXJ0aXRpb24oZW4pIGF1ZiAlcyBzaW5kIGJlbnV0enQuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIzCittc2dpZCAiIgorIlRoZSBleGlzdGluZyBmaWxlIHN5c3RlbSB3aWxsIGJlIGRlc3Ryb3llZCBhbmQgYWxsIGRhdGEgb24gdGhlIHBhcnRpdGlvbiAiCisid2lsbCBiZSBsb3N0LiBEbyB5b3Ugd2FudCB0byBjb250aW51ZT8iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIzNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGV4aXN0aW5nIGRpc2sgbGFiZWwgb24gJXMgd2lsbCBiZSBkZXN0cm95ZWQgYW5kIGFsbCBkYXRhIG9uIHRoaXMgZGlzayAiCisid2lsbCBiZSBsb3N0LiBEbyB5b3Ugd2FudCB0byBjb250aW51ZT8iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjQ1OCBwYXJ0ZWQvcGFydGVkLmM6NjUyIHBhcnRlZC9wYXJ0ZWQuYzoxMDQ0CisjOiBwYXJ0ZWQvcGFydGVkLmM6MTEyOCBwYXJ0ZWQvcGFydGVkLmM6MTc3MSBwYXJ0ZWQvcGFydGVkLmM6MTg1MgorIzogcGFydGVkL3BhcnRlZC5jOjE5MDAKK21zZ2lkICJQYXJ0aXRpb24gbnVtYmVyPyIKK21zZ3N0ciAiUGFydGl0aW9uc251bW1lcj8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo1MDAKK21zZ2lkICJTb3VyY2UgZGV2aWNlPyIKK21zZ3N0ciAiUXVlbGxnZXLkdD8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo1MDQKK21zZ2lkICJTb3VyY2UgcGFydGl0aW9uIG51bWJlcj8iCittc2dzdHIgIlF1ZWxscGFydGl0aW9uc251bW1lcj8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo1MDkKKyMsIGZ1enp5Cittc2dpZCAiQ2FuJ3QgY29weSBhbiBleHRlbmRlZCBwYXJ0aXRpb24uIgorbXNnc3RyICJFcndlaXRlcnRlIFBhcnRpdGlvbmVuIGv2bm5lbiBuaWNodCBrb3BpZXJ0IHdlcmRlbi4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo1MTUKK21zZ2lkICJEZXN0aW5hdGlvbiBwYXJ0aXRpb24gbnVtYmVyPyIKK21zZ3N0ciAiWmllbHBhcnRpdGlvbnNudW1tZXI/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NjE1Cittc2dpZCAiTmV3IGRpc2sgbGFiZWwgdHlwZT8iCittc2dzdHIgIk5ldWVyIERpc2stTGFiZWwtVHlwPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjY1NgorbXNnaWQgIkZpbGUgc3lzdGVtPyIKK21zZ3N0ciAiRGF0ZWlzeXN0ZW0/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NzA3IHBhcnRlZC9wYXJ0ZWQuYzo4NzgKK21zZ2lkICJQYXJ0aXRpb24gdHlwZT8iCittc2dzdHIgIlBhcnRpdGlvbnN0eXA/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NzE0IHBhcnRlZC9wYXJ0ZWQuYzo4ODUgcGFydGVkL3BhcnRlZC5jOjExMzEKK21zZ2lkICJQYXJ0aXRpb24gbmFtZT8iCittc2dzdHIgIlBhcnRpdGlvbnNuYW1lPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjcyMiBwYXJ0ZWQvcGFydGVkLmM6ODk1Cittc2dpZCAiRmlsZSBzeXN0ZW0gdHlwZT8iCittc2dzdHIgIkRhdGVpc3lzdGVtdHlwPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjcyOSBwYXJ0ZWQvcGFydGVkLmM6ODk3IHBhcnRlZC9wYXJ0ZWQuYzoxMDU5CisjOiBwYXJ0ZWQvcGFydGVkLmM6MTcyNSBwYXJ0ZWQvcGFydGVkLmM6MTc4MAorbXNnaWQgIlN0YXJ0PyIKK21zZ3N0ciAiU3RhcnQ/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NzMxIHBhcnRlZC9wYXJ0ZWQuYzo5MDAgcGFydGVkL3BhcnRlZC5jOjEwNjIKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNzI3IHBhcnRlZC9wYXJ0ZWQuYzoxNzgyCittc2dpZCAiRW5kPyIKK21zZ3N0ciAiRW5kZT8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo3NjkgcGFydGVkL3BhcnRlZC5jOjkzOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IHJlcXVlc3RlZCBhIHBhcnRpdGlvbiBmcm9tICVzIHRvICVzLlxuIgorIlRoZSBjbG9zZXN0IGxvY2F0aW9uIHdlIGNhbiBtYW5hZ2UgaXMgJXMgdG8gJXMuICBJcyB0aGlzIHN0aWxsIGFjY2VwdGFibGUgdG8gIgorInlvdT8iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjg5MAorIywgZnV6enkKK21zZ2lkICJBbiBleHRlbmRlZCBwYXJ0aXRpb24gY2Fubm90IGhvbGQgYSBmaWxlIHN5c3RlbS4gIERpZCB5b3Ugd2FudCBta3BhcnQ/IgorbXNnc3RyICIiCisiRXJ3ZWl0ZXJ0ZSBQYXJ0aXRpb25lbiBr9m5uZW4ga2VpbiBEYXRlaXN5c3RlbSBoYWJlbi4gV29sbHRlbiBTaWUgbWtwYXJ0PyIKKworIzogcGFydGVkL3BhcnRlZC5jOjEwNTAKKyMsIGZ1enp5Cittc2dpZCAiQ2FuJ3QgbW92ZSBhbiBleHRlbmRlZCBwYXJ0aXRpb24uIgorbXNnc3RyICJFcndlaXRlcnRlIFBhcnRpdGlvbiBr9m5uZW4gbmljaHQgdmVyc2Nob2JlbiB3ZXJkZW4uIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTA3OQorbXNnaWQgIkNhbid0IG1vdmUgYSBwYXJ0aXRpb24gb250byBpdHNlbGYuICBUcnkgdXNpbmcgcmVzaXplLCBwZXJoYXBzPyIKK21zZ3N0ciAiIgorIkRpZSBQYXJ0aXRpb24ga2FubiBuaWNodCBhdWYgc2ljaCBzZWxic3QgdmVyc2Nob2JlbiB3ZXJkZW4uIFZpZWxsZWljaHQgIgorIndvbGxlbiBTaWUgR3L232Vu5G5kZXJ1bmcgKHJlc2l6ZSkgdmVyc3VjaGVuPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlub3I6ICVkXG4iCittc2dzdHIgIk1pbm9yOiAlZFxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIyOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRmxhZ3M6ICVzXG4iCittc2dzdHIgIkZsYWdzOiAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGUgU3lzdGVtOiAlc1xuIgorbXNnc3RyICJEYXRlaXN5c3RlbTogJXNcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMzAKKyMsIGZ1enp5Cittc2dpZCAiU2l6ZTogICAgICAgICAiCittc2dzdHIgIkdy9t9lOiAgICAgICAgICAlMTAuM2ZNYiAoJWQlJSlcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMzUKKyMsIGZ1enp5Cittc2dpZCAiTWluaW11bSBzaXplOiAiCittc2dzdHIgIk1pbmltYWxlIEdy9t9lOiAlMTAuM2ZNYiAoJWQlJSlcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMzgKKyMsIGZ1enp5Cittc2dpZCAiTWF4aW11bSBzaXplOiAiCittc2dzdHIgIk1heGltYWxlIEdy9t9lOiAlMTAuM2ZNYiAoJWQlJSlcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEzNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTW9kZWw6ICVzICglcylcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTM2NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRGlzayAlczogJXNcbiIKK21zZ3N0ciAiJXMgICVzICAlcyIKKworIzogcGFydGVkL3BhcnRlZC5jOjEzNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VjdG9yIHNpemUgKGxvZ2ljYWwvcGh5c2ljYWwpOiAlbGxkQi8lbGxkQlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMzgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkJJT1MgY3lsaW5kZXIsaGVhZCxzZWN0b3IgZ2VvbWV0cnk6ICVkLCVkLCVkLiAgRWFjaCBjeWxpbmRlciBpcyAlcy5cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTM5MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiUGFydGl0aW9uIFRhYmxlOiAlc1xuIgorbXNnc3RyICJQYXJ0aXRpb25zbmFtZT8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDA2IHBhcnRlZC9wYXJ0ZWQuYzoxNDA5Cittc2dpZCAiTnVtYmVyIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDA2IHBhcnRlZC9wYXJ0ZWQuYzoxNDA5CisjLCBmdXp6eQorbXNnaWQgIlN0YXJ0IgorbXNnc3RyICJTdGFydD8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDA3IHBhcnRlZC9wYXJ0ZWQuYzoxNDEwCisjLCBmdXp6eQorbXNnaWQgIkVuZCIKK21zZ3N0ciAiRW5kZT8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDEwCisjLCBmdXp6eQorbXNnaWQgIlNpemUiCittc2dzdHIgInJlc2l6ZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MTQKK21zZ2lkICJUeXBlIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDE2CisjLCBmdXp6eQorbXNnaWQgIkZpbGUgc3lzdGVtIgorbXNnc3RyICJEYXRlaXN5c3RlbT8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDE5CisjLCBmdXp6eQorbXNnaWQgIk5hbWUiCittc2dzdHIgIm5hbWUiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDIxCittc2dpZCAiRmxhZ3MiCittc2dzdHIgIkZsYWdzIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQ3NworbXNnaWQgIkZyZWUgU3BhY2UiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjE2MjQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBICVzICVzIHBhcnRpdGlvbiB3YXMgZm91bmQgYXQgJXMgLT4gJXMuICBEbyB5b3Ugd2FudCB0byBhZGQgaXQgdG8gdGhlICIKKyJwYXJ0aXRpb24gdGFibGU/IgorbXNnc3RyICIiCisiRWluZSAlcy0lcy1QYXJ0aXRpb24gd3VyZGUgYmVpICUuM2ZNYiAtPiAlLjNmTWIgZ2VmdW5kZW4uIFdvbGxlbiBTaWUgZGllIHp1ciAiCisiUGFydGl0aW9uc3RhYmVsbGUgaGluenVm/Gdlbj8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNjYzCittc2dpZCAic2VhcmNoaW5nIGZvciBmaWxlIHN5c3RlbXMiCittc2dzdHIgImVzIHdpcmQgbmFjaCBEYXRlaXN5c3RlbWVuIGdlc3VjaHQiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxODc3Cittc2dpZCAiTmV3IGRldmljZT8iCittc2dzdHIgIk5ldWVzIEdlcuR0PyIKKworIzogcGFydGVkL3BhcnRlZC5jOjE5MDIKKyMsIGZ1enp5Cittc2dpZCAiRmxhZyB0byBJbnZlcnQ/IgorbXNnc3RyICJadSDkbmRlcm5kZXMgRmxhZz8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxOTA3Cittc2dpZCAiTmV3IHN0YXRlPyIKK21zZ3N0ciAiTmV1ZXIgWnVzdGFuZD8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxOTQ0Cittc2dpZCAiVW5pdD8iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIwOTMKK21zZ2lkICJjaGVjayIKK21zZ3N0ciAiY2hlY2siCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMDk2CisjLCBmdXp6eQorbXNnaWQgIiIKKyJjaGVjayBOVU1CRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIGEgc2ltcGxlIGNoZWNrIG9uIHRoZSBmaWxlIHN5c3RlbSIKK21zZ3N0ciAiIgorImNoZWNrIE1JTk9SICAgICAgICAgICAgICAgIEVpbmVuIGVpbmZhY2hlbiBUZXN0IGF1ZiBkZW4gRGF0ZWlzeXN0ZW1lbiAiCisiYXVzZvxocmVuLiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMDIKK21zZ2lkICJjcCIKK21zZ3N0ciAiY3AiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTA1CisjLCBmdXp6eQorbXNnaWQgIiIKKyJjcCBbRlJPTS1ERVZJQ0VdIEZST00tTlVNQkVSIFRPLU5VTUJFUiAgIGNvcHkgZmlsZSBzeXN0ZW0gdG8gYW5vdGhlciAiCisicGFydGl0aW9uIgorbXNnc3RyICIiCisiY3AgW1ZPTi1HRVLEVF0gVk9OLU1JTk9SIEFVRi1NSU5PUiAgIERhdGVpc3lzdGVtIGF1ZiBhbmRlcmUgUGFydGl0aW9uICIKKyJrb3BpZXJlbi4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTExCittc2dpZCAiaGVscCIKK21zZ3N0ciAiaGVscCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMTQKKyMsIGZ1enp5Cittc2dpZCAiIgorImhlbHAgW0NPTU1BTkRdICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgZ2VuZXJhbCBoZWxwLCBvciBoZWxwIG9uICIKKyJDT01NQU5EIgorbXNnc3RyICIiCisiaGVscCBbS09NTUFORE9dICAgICAgICAgICAgR2VuZXJlbGxlIEhpbGZlLCBvZGVyIEhpbGZlIGb8ciBLT01NQU5ETyBhdXNnZWJlbi4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTIwCittc2dpZCAibWtsYWJlbCIKK21zZ3N0ciAibWtsYWJlbCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMjAKKyMsIGZ1enp5Cittc2dpZCAibWt0YWJsZSIKK21zZ3N0ciAibWtsYWJlbCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMjMKKyMsIGZ1enp5Cittc2dpZCAiIgorIm1rbGFiZWwsbWt0YWJsZSBMQUJFTC1UWVBFICAgICAgICAgICAgICAgY3JlYXRlIGEgbmV3IGRpc2tsYWJlbCAocGFydGl0aW9uICIKKyJ0YWJsZSkiCittc2dzdHIgIiIKKyJta2xhYmVsIExBQkVMLVRZUCAgICAgICAgICBOZXVlcyBEaXNrbGFiZWwgKFBhcnRpdGlvbnN0YWJlbGxlKSBlcnpldWdlbi4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTI5Cittc2dpZCAibWtmcyIKK21zZ3N0ciAibWtmcyIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMzIKKyMsIGZ1enp5Cittc2dpZCAiIgorIm1rZnMgTlVNQkVSIEZTLVRZUEUgICAgICAgICAgICAgICAgICAgICAgbWFrZSBhIEZTLVRZUEUgZmlsZSBzeXN0ZW0gb24gIgorInBhcnRpdGl0b24gTlVNQkVSIgorbXNnc3RyICIiCisibWtmcyBNSU5PUiBGUy1UWVAgICAgICAgICAgRGF0ZWlzeXN0ZW0gRlMtVFlQIGF1ZiBQYXJ0aXRpb24gTUlOT1IgZXJ6ZXVnZW4uIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEzOAorbXNnaWQgIm1rcGFydCIKK21zZ3N0ciAibWtwYXJ0IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE0MQorIywgZnV6enkKK21zZ2lkICJta3BhcnQgUEFSVC1UWVBFIFtGUy1UWVBFXSBTVEFSVCBFTkQgICAgIG1ha2UgYSBwYXJ0aXRpb24iCittc2dzdHIgIm1rcGFydCBQQVJULVRZUCBbRlMtVFlQXSBTVEFSVCBFTkQgICAgUGFydGl0aW9uIGVyemV1Z2VuLiIKKworIyBYWFggdG8gc2V0IGEgcGFydGl0aW9uIElEPz8/CisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE0NworIywgZnV6enkKK21zZ2lkICIiCisiJ21rcGFydCcgbWFrZXMgYSBwYXJ0aXRpb24gd2l0aG91dCBjcmVhdGluZyBhIG5ldyBmaWxlIHN5c3RlbSBvbiB0aGUgIgorInBhcnRpdGlvbi4gIEZTLVRZUEUgbWF5IGJlIHNwZWNpZmllZCB0byBzZXQgYW4gYXBwcm9wcmlhdGUgcGFydGl0aW9uIElELlxuIgorbXNnc3RyICIiCisibWtwYXJ0IGVyemV1Z3QgZWluZSBQYXJ0aXRpb24gb2huZSBlaW4gbmV1ZXMgRGF0ZWlzeXN0ZW0gYXVmIGRlciBQYXJ0aXRpb25cbiIKKyJ6dSBlcnpldWdlbi4gRlMtVFlQIGthbm4gYW5nZWdlYmVuIHdlcmRlbiwgdW0gZWluZSBnZWVpZ25ldGUgUGFydGl0aW9ucy1JRCAiCisienUgc2V0emVuLlxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE1MgorbXNnaWQgIm1rcGFydGZzIgorbXNnc3RyICJta3BhcnRmcyIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNTUKKyMsIGZ1enp5Cittc2dpZCAiIgorIm1rcGFydGZzIFBBUlQtVFlQRSBGUy1UWVBFIFNUQVJUIEVORCAgICAgbWFrZSBhIHBhcnRpdGlvbiB3aXRoIGEgZmlsZSBzeXN0ZW0iCittc2dzdHIgIiIKKyJta3BhcnRmcyBQQVJULVRZUCBGUy1UWVAgU1RBUlQgRU5EICAgIFBhcnRpdGlvbiBtaXQgRGF0ZWlzeXN0ZW0gZXJ6ZXVnZW4uIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE2MQorbXNnaWQgIm1vdmUiCittc2dzdHIgIm1vdmUiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTY0CisjLCBmdXp6eQorbXNnaWQgIm1vdmUgTlVNQkVSIFNUQVJUIEVORCAgICAgICAgICAgICAgICAgICAgbW92ZSBwYXJ0aXRpb24gTlVNQkVSIgorbXNnc3RyICJtb3ZlIE1JTk9SIFNUQVJUIEVOREUgICAgICBQYXJ0aXRpb24gTUlOT1IgdmVyc2NoaWViZW4uIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE2OQorbXNnaWQgIm5hbWUiCittc2dzdHIgIm5hbWUiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTcyCisjLCBmdXp6eQorbXNnaWQgIm5hbWUgTlVNQkVSIE5BTUUgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSBwYXJ0aXRpb24gTlVNQkVSIGFzIE5BTUUiCittc2dzdHIgIm5hbWUgTUlOT1IgTkFNRSAgICAgICAgICAgIFBhcnRpdGlvbiBNSU5PUiBtaXQgTkFNRSBiZW5lbm5lbi4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTc3Cittc2dpZCAicHJpbnQiCittc2dzdHIgInByaW50IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE4MAorbXNnaWQgIiIKKyJwcmludCBbZGV2aWNlc3xmcmVlfGxpc3QsYWxsfE5VTUJFUl0gICAgIGRpc3BsYXkgdGhlIHBhcnRpdGlvbiB0YWJsZSwgIgorImF2YWlsYWJsZSBkZXZpY2VzLCBmcmVlIHNwYWNlLCBhbGwgZm91bmQgcGFydGl0aW9ucywgb3IgYSBwYXJ0aWN1bGFyICIKKyJwYXJ0aXRpb24iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxODUKK21zZ2lkICIiCisiV2l0aG91dCBhcmd1bWVudHMsICdwcmludCcgZGlzcGxheXMgdGhlIGVudGlyZSBwYXJ0aXRpb24gdGFibGUuIEhvd2V2ZXIgd2l0aCAiCisidGhlIGZvbGxvd2luZyBhcmd1bWVudHMgaXQgcGVyZm9ybXMgdmFyaW91cyBvdGhlciBhY3Rpb25zLlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTg3Cittc2dpZCAiICBkZXZpY2VzICAgOiBkaXNwbGF5IGFsbCBhY3RpdmUgYmxvY2sgZGV2aWNlc1xuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTg4Cittc2dpZCAiIgorIiAgZnJlZSAgICAgIDogZGlzcGxheSBpbmZvcm1hdGlvbiBhYm91dCBmcmVlIHVucGFydGl0aW9uZWQgc3BhY2Ugb24gdGhlICIKKyJjdXJyZW50IGJsb2NrIGRldmljZVxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTkwCisjLCBmdXp6eQorbXNnaWQgIiIKKyIgIGxpc3QsIGFsbCA6IGRpc3BsYXkgdGhlIHBhcnRpdGlvbiB0YWJsZXMgb2YgYWxsIGFjdGl2ZSBibG9jayBkZXZpY2VzXG4iCittc2dzdHIgInByaW50IFtNSU5PUl0gICAgICAgICAgICAgIFBhcnRpdGlvbnN0YWJlbGxlIG9kZXIgUGFydGl0aW9uIGFuemVpZ2VuLiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxOTEKK21zZ2lkICIiCisiICBOVU1CRVIgICAgOiBkaXNwbGF5IG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBwYXJ0aWN1bGFyICIKKyJwYXJ0aXRpb25cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE5NgorbXNnaWQgInF1aXQiCittc2dzdHIgInF1aXQiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTk5CisjLCBmdXp6eQorbXNnaWQgInF1aXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCBwcm9ncmFtIgorbXNnc3RyICJxdWl0ICAgICAgICAgICAgICAgICAgICAgICBQcm9ncmFtbSBiZWVuZGVuLiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMDQKK21zZ2lkICJyZXNjdWUiCittc2dzdHIgInJlc2N1ZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMDcKKyMsIGZ1enp5Cittc2dpZCAiIgorInJlc2N1ZSBTVEFSVCBFTkQgICAgICAgICAgICAgICAgICAgICAgICAgcmVzY3VlIGEgbG9zdCBwYXJ0aXRpb24gbmVhciBTVEFSVCAiCisiYW5kIEVORCIKK21zZ3N0ciAiIgorInJlc2N1ZSBTVEFSVCBFTkRFICAgICBFaW5lIHZlcmxvcmVuZSBQYXJ0aXRpb25lbiB6d2lzY2hlbiBTVEFSVCB1bmQgRU5ERSAiCisicmV0dGVuLiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMTMKK21zZ2lkICJyZXNpemUiCittc2dzdHIgInJlc2l6ZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMTYKKyMsIGZ1enp5Cittc2dpZCAiIgorInJlc2l6ZSBOVU1CRVIgU1RBUlQgRU5EICAgICAgICAgICAgICAgICAgcmVzaXplIHBhcnRpdGlvbiBOVU1CRVIgYW5kIGl0cyAiCisiZmlsZSBzeXN0ZW0iCittc2dzdHIgIiIKKyJyZXNjdWUgU1RBUlQgRU5ERSAgICAgRWluZSB2ZXJsb3JlbmUgUGFydGl0aW9uZW4gendpc2NoZW4gU1RBUlQgdW5kIEVOREUgIgorInJldHRlbi4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjI0Cittc2dpZCAicm0iCittc2dzdHIgInJtIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIyNworIywgZnV6enkKK21zZ2lkICJybSBOVU1CRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwYXJ0aXRpb24gTlVNQkVSIgorbXNnc3RyICJybSBNSU5PUiAgICAgICAgICAgICAgICAgICBQYXJ0aW9uIE1JTk9SIGz2c2NoZW4uIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIzMgorbXNnaWQgInNlbGVjdCIKK21zZ3N0ciAic2VsZWN0IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIzNQorIywgZnV6enkKK21zZ2lkICJzZWxlY3QgREVWSUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNob29zZSB0aGUgZGV2aWNlIHRvIGVkaXQiCittc2dzdHIgInNlbGVjdCBHRVLEVCAgICAgICAgICAgICAgIFfkaGxlbiBTaWUgZWluIEdlcuR0IHp1ciBCZWFyYmVpdHVuZy4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjQwCittc2dpZCAic2V0IgorbXNnc3RyICJzZXQiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjQzCisjLCBmdXp6eQorbXNnaWQgIiIKKyJzZXQgTlVNQkVSIEZMQUcgU1RBVEUgICAgICAgICAgICAgICAgICAgIGNoYW5nZSB0aGUgRkxBRyBvbiBwYXJ0aXRpb24gTlVNQkVSIgorbXNnc3RyICJzZXQgTUlOT1IgRkxBRyBTVEFURSAgICAgICBGTEFHIGF1ZiBQYXJ0aXRpb24gTUlOT1Ig5G5kZXJuLiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNDkKK21zZ2lkICJ0b2dnbGUiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNTIKK21zZ2lkICIiCisidG9nZ2xlIFtOVU1CRVIgW0ZMQUddXSAgICAgICAgICAgICAgICAgICB0b2dnbGUgdGhlIHN0YXRlIG9mIEZMQUcgb24gIgorInBhcnRpdGlvbiBOVU1CRVIiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNTgKKyMsIGZ1enp5Cittc2dpZCAidW5pdCIKK21zZ3N0ciAicXVpdCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNjEKKyMsIGZ1enp5Cittc2dpZCAidW5pdCBVTklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgdGhlIGRlZmF1bHQgdW5pdCB0byBVTklUIgorbXNnc3RyICJxdWl0ICAgICAgICAgICAgICAgICAgICAgICBQcm9ncmFtbSBiZWVuZGVuLiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNjYKK21zZ2lkICJ2ZXJzaW9uIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjY5Cittc2dpZCAiIgorInZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheSB0aGUgdmVyc2lvbiBudW1iZXIgYW5kICIKKyJjb3B5cmlnaHQgaW5mb3JtYXRpb24gb2YgR05VIFBhcnRlZCIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI3MworbXNnaWQgIiIKKyIndmVyc2lvbicgZGlzcGxheXMgY29weXJpZ2h0IGFuZCB2ZXJzaW9uIGluZm9ybWF0aW9uIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyAiCisiY29weSBvZiBHTlUgUGFydGVkXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIzMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstaGxtc3ZdIFtERVZJQ0UgW0NPTU1BTkQgW1BBUkFNRVRFUlNdXS4uLl1cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjM3OQorbXNnaWQgIk5vIGRldmljZSBmb3VuZCIKK21zZ3N0ciAiS2VpbiBHZXLkdCBnZWZ1bmRlbi4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyNDEyCittc2dpZCAiV0FSTklORzogWW91IGFyZSBub3Qgc3VwZXJ1c2VyLiAgV2F0Y2ggb3V0IGZvciBwZXJtaXNzaW9ucy4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjI0NTAKKyMsIGZ1enp5Cittc2dpZCAiWW91IG1heSBuZWVkIHRvIHVwZGF0ZSAvZXRjL2ZzdGFiLlxuIgorbXNnc3RyICJWZXJnZXNzZW4gU2llIG5pY2h0LCBnZWdlYmVuZW5mYWxscyAvZXRjL2ZzdGFiIHp1IORuZGVybi5cbiIKKworIzogcGFydGVkL3VpLmM6MTYwCittc2dpZCAiV2VsY29tZSB0byBHTlUgUGFydGVkISBUeXBlICdoZWxwJyB0byB2aWV3IGEgbGlzdCBvZiBjb21tYW5kcy5cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzoxNjMKKyMsIGZ1enp5Cittc2dpZCAiIgorIlVzYWdlOiBwYXJ0ZWQgW09QVElPTl0uLi4gW0RFVklDRSBbQ09NTUFORCBbUEFSQU1FVEVSU10uLi5dLi4uXVxuIgorIkFwcGx5IENPTU1BTkRzIHdpdGggUEFSQU1FVEVSUyB0byBERVZJQ0UuICBJZiBubyBDT01NQU5EKHMpIGFyZSBnaXZlbiwgcnVuICIKKyJpblxuIgorImludGVyYWN0aXZlIG1vZGUuXG4iCittc2dzdHIgIiIKKyJBdWZydWY6IHBhcnRlZCBbT1BUSU9OZW5dIFtHRVLEVCBbS09NTUFORE8gW1BBUkFNRVRFUi4uLl0uLi5dXG4iCisiS09NTUFORE9zIG1pdCBQQVJBTUVURVJuIGb8ciBHRVLEVCBhdXNm/GhyZW4uIFdlbm4ga2VpbmUgS09NTUFORE9zICIKKyJhbmdlZ2ViZW4gXG4iCisic2luZCwgaW50ZXJha3RpdiBhcmJlaXRlbi5cbiIKKworIzogcGFydGVkL3VpLmM6MTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJcbiIKKyJZb3UgZm91bmQgYSBidWcgaW4gR05VIFBhcnRlZCEgSGVyZSdzIHdoYXQgeW91IGhhdmUgdG8gZG86XG4iCisiXG4iCisiRG9uJ3QgcGFuaWMhIFRoZSBidWcgaGFzIG1vc3QgbGlrZWx5IG5vdCBhZmZlY3RlZCBhbnkgb2YgeW91ciBkYXRhLlxuIgorIkhlbHAgdXMgdG8gZml4IHRoaXMgYnVnIGJ5IGRvaW5nIHRoZSBmb2xsb3dpbmc6XG4iCisiXG4iCisiQ2hlY2sgd2hldGhlciB0aGUgYnVnIGhhcyBhbHJlYWR5IGJlZW4gZml4ZWQgYnkgY2hlY2tpbmdcbiIKKyJ0aGUgbGFzdCB2ZXJzaW9uIG9mIEdOVSBQYXJ0ZWQgdGhhdCB5b3UgY2FuIGZpbmQgYXQ6XG4iCisiXG4iCisiXHRodHRwOi8vZnRwLmdudS5vcmcvZ251L3BhcnRlZC9cbiIKKyJcbiIKKyJQbGVhc2UgY2hlY2sgdGhpcyB2ZXJzaW9uIHByaW9yIHRvIGJ1ZyByZXBvcnRpbmcuXG4iCisiXG4iCisiSWYgdGhpcyBoYXMgbm90IGJlZW4gZml4ZWQgeWV0IG9yIGlmIHlvdSBkb24ndCBrbm93IGhvdyB0byBjaGVjayxcbiIKKyJwbGVhc2UgdmlzaXQgdGhlIEdOVSBQYXJ0ZWQgd2Vic2l0ZTpcbiIKKyJcbiIKKyJcdGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9wYXJ0ZWRcbiIKKyJcbiIKKyJmb3IgZnVydGhlciBpbmZvcm1hdGlvbi5cbiIKKyJcbiIKKyJZb3VyIHJlcG9ydCBzaG91bGQgY29udGFpbiB0aGUgdmVyc2lvbiBvZiB0aGlzIHJlbGVhc2UgKCVzKVxuIgorImFsb25nIHdpdGggdGhlIGVycm9yIG1lc3NhZ2UgYmVsb3csIHRoZSBvdXRwdXQgb2ZcbiIKKyJcbiIKKyJcdHBhcnRlZCBERVZJQ0UgdW5pdCBjbyBwcmludCB1bml0IHMgcHJpbnRcbiIKKyJcbiIKKyJhbmQgdGhlIGZvbGxvd2luZyBoaXN0b3J5IG9mIGNvbW1hbmRzIHlvdSBlbnRlcmVkLlxuIgorIkFsc28gaW5jbHVkZSBhbnkgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB5b3VyIHNldHVwIHlvdVxuIgorImNvbnNpZGVyIGltcG9ydGFudC5cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzoyODQKK21zZ2lkICIiCisiXG4iCisiQ29tbWFuZCBIaXN0b3J5OlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjM2NgorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogU0VHVl9NQVBFUlIgKEFkZHJlc3Mgbm90IG1hcHBlZCB0byBvYmplY3QpXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6MzcyCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBTRUdWX0FDQ0VSUiAoSW52YWxpZCBwZXJtaXNzaW9ucyBmb3IgbWFwcGVkIG9iamVjdClcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzozNzcKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEEgZ2VuZXJhbCBTSUdTRUdWIHNpZ25hbCB3YXMgZW5jb3VudGVyZWQuXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDEwCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfSU5URElWIChJbnRlZ2VyOiBkaXZpZGUgYnkgemVybykiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDE1Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfSU5UT1ZGIChJbnRlZ2VyOiBvdmVyZmxvdykiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDIwCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxURElWIChGbG9hdDogZGl2aWRlIGJ5IHplcm8pIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQyNQorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0ZMVE9WRiAoRmxvYXQ6IG92ZXJmbG93KSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0MzAKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRVTkQgKEZsb2F0OiB1bmRlcmZsb3cpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQzNQorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0ZMVFJFUyAoRmxvYXQ6IGluZXhhY3QgcmVzdWx0KSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0NDAKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRJTlYgKEZsb2F0OiBpbnZhbGlkIG9wZXJhdGlvbikiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDQ1Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxUU1VCIChGbG9hdDogc3Vic2NyaXB0IG91dCBvZiByYW5nZSkiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDUwCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBBIGdlbmVyYWwgU0lHRlBFIHNpZ25hbCB3YXMgZW5jb3VudGVyZWQuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQ4MworbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX0lMTE9QQyAoSWxsZWdhbCBPcGNvZGUpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQ4OAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX0lMTE9QTiAoSWxsZWdhbCBPcGVyYW5kKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0OTMKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9JTExBRFIgKElsbGVnYWwgYWRkcmVzc2luZyBtb2RlKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0OTgKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9JTExUUlAgKElsbGVnYWwgVHJhcCkiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NTAzCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfUFJWT1BDIChQcml2aWxlZ2VkIE9wY29kZSkiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NTA4Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfUFJWUkVHIChQcml2aWxlZ2VkIFJlZ2lzdGVyKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo1MTMKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9DT1BST0MgKENvcHJvY2Vzc29yIEVycm9yKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo1MTgKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9CQURTVEsgKEludGVybmFsIFN0YWNrIEVycm9yKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo1MjMKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEEgZ2VuZXJhbCBTSUdJTEwgc2lnbmFsIHdhcyBlbmNvdW50ZXJlZC4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6MTAyNAorbXNnaWQgIkV4cGVjdGluZyBhIHBhcnRpdGlvbiBudW1iZXIuIgorbXNnc3RyICJQYXJ0aXRpb25zbnVtbWVyIGVyd2FydGV0LiIKKworIzogcGFydGVkL3VpLmM6MTAzMworbXNnaWQgIlBhcnRpdGlvbiBkb2Vzbid0IGV4aXN0LiIKK21zZ3N0ciAiUGFydGl0aW9uIGV4aXN0aWVydCBuaWNodC4iCisKKyM6IHBhcnRlZC91aS5jOjEwNTMKK21zZ2lkICJFeHBlY3RpbmcgYSBmaWxlIHN5c3RlbSB0eXBlLiIKK21zZ3N0ciAiRGF0ZWlzeXN0ZW10eXAgZXJ3YXJ0ZXQuIgorCisjOiBwYXJ0ZWQvdWkuYzoxMDYwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gZmlsZSBzeXN0ZW0gdHlwZSBcIiVzXCIuIgorbXNnc3RyICJVbmJla2FubnRlciBEYXRlaXN5c3RlbXR5cCC7JXOrLiIKKworIzogcGFydGVkL3VpLmM6MTA4MAorbXNnaWQgIkV4cGVjdGluZyBhIGRpc2sgbGFiZWwgdHlwZS4iCittc2dzdHIgIkVpbiBEaXNrbGFiZWx0eXAgd2lyZCBlcndhcnRldC4iCisKKyM6IHBhcnRlZC91aS5jOjExNzgKK21zZ2lkICJDYW4ndCBjcmVhdGUgYW55IG1vcmUgcGFydGl0aW9ucy4iCittc2dzdHIgIkthbm4ga2VpbmUgd2VpdGVyZSBQYXJ0aXRpb24gZXJ6ZXVnZW4uIgorCisjOiBwYXJ0ZWQvdWkuYzoxMTg4Cittc2dpZCAiRXhwZWN0aW5nIGEgcGFydGl0aW9uIHR5cGUuIgorbXNnc3RyICJQYXJ0aXRpb25zdHlwIGVyd2FydGV0LiIKKworIzogcGFydGVkL3VpLmM6MTMxNQorbXNnaWQgIm9uIgorbXNnc3RyICJvbiIKKworIzogcGFydGVkL3VpLmM6MTMxNgorbXNnaWQgIm9mZiIKK21zZ3N0ciAib2ZmIgorCisjOiBwYXJ0ZWQvdWkuYzoxNDMxCittc2dpZCAiT1BUSU9OczoiCittc2dzdHIgIk9QVElPTmVuOiIKKworIzogcGFydGVkL3VpLmM6MTQzNgorbXNnaWQgIkNPTU1BTkRzOiIKK21zZ3N0ciAiS09NTUFORE9zOiIKKworIzogcGFydGVkL3VpLmM6MTQ0NQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2luZyAlc1xuIgorbXNnc3RyICJWZXJ3ZW5kZSAlc1xuIgorCisjOiBwYXJ0ZWQvdWkuYzoxNTE5Cittc2dpZCAiVGhpcyBjb21tYW5kIGRvZXMgbm90IG1ha2Ugc2Vuc2UgaW4gbm9uLWludGVyYWN0aXZlIG1vZGUuXG4iCittc2dzdHIgIiIKKworI34gbXNnaWQgIndoZXJlIG5lY2Vzc2FyeSwgcHJvbXB0cyBmb3IgdXNlciBpbnRlcnZlbnRpb24iCisjfiBtc2dzdHIgIndlbm4gbvZ0aWcsIGJpdHRldCB1bSBOdXR6ZXJpbnRlcnZlbnRpb24iCisKKyMsIGZ1enp5CisjfiBtc2dpZCAiIgorI34gIldpdGhvdXQgYXJndW1lbnRzLCBwcmludCBkaXNwbGF5cyB0aGUgZW50aXJlIHBhcnRpdGlvbiB0YWJsZS4gV2l0aCAiCisjfiAiJ2ZyZWUnXG4iCisjfiAiYXJndW1lbnQsIGluZm9ybWF0aW9uIGFib3V0IGZyZWUgc3BhY2Ugd2lsbCBiZSBkaXNwbGF5ZWQgb3RoZXJ3aXNlIGlmIGFcbiIKKyN+ICJwYXJ0aXRpb24gbnVtYmVyIGlzIGdpdmVuLCB0aGVuIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gaXMgZGlzcGxheWVkXG4iCisjfiAiYWJvdXQgdGhhdCBwYXJ0aXRpb24uIElmIHRoZSAnYWxsJyBhcmd1bWVudCBpcyBwYXNzZWQgaW5zdGVhZCwgcGFydGl0aW9uXG4iCisjfiAiaW5mb3JtYXRpb24gZm9yIGFsbCBkZXZpY2VzIHdpbGwgYmUgZGlzcGxheWVkLlxuIgorI34gbXNnc3RyICIiCisjfiAiT2huZSBBcmd1bWVudGUgemVpZ3QgcHJpbnQgZGllIGdlc2FtdGUgUGFydGl0aW9uc3RhYmVsbGUgYW4uIFdlbm4gZWluZVxuIgorI34gIlBhcnRpdGlvbnNudW1tZXIgYW5nZWdlYmVuIHd1cmRlLCB3ZXJkZW4gd2VpdGVyZSBEZXRhaWxzIPxiZXIgZGllc2VcbiIKKyN+ICJQYXJ0aXRpb24gYW5nZXplaWd0LlxuIgorCisjfiBtc2dpZCAiIgorI34gIlRoZSBzZWN0b3Igc2l6ZSBvbiAlcyBpcyAlZCBieXRlcy4gIFBhcnRlZCBpcyBrbm93biBub3QgdG8gd29yayBwcm9wZXJseSAiCisjfiAid2l0aCBkcml2ZXMgd2l0aCBzZWN0b3Igc2l6ZXMgb3RoZXIgdGhhbiAlZCBieXRlcyIKKyN+IG1zZ3N0ciAiIgorI34gIkRpZSBTZWt0b3JncvbfZSB2b24gJXMgaXN0ICVkIEJ5dGVzLiBQYXJ0ZWQga2FubiBhdWYgTGF1ZndlcmtlbiBtaXQgIgorI34gIlNla3Rvcmdy9t9lbiB2ZXJzY2hpZWRlbiB2b24gJWQgQnl0ZXMgbmljaHQgYXJiZWl0ZW4uIgorCisjfiBtc2dpZCAiQ291bGQgbm90IHJlYWQgZ2VvbWV0cnkgb2YgJXMgLSAlcy4iCisjfiBtc2dzdHIgIkRpZSBHZW9tZXRyaWUgdm9uICVzIGtvbm50ZSBuaWNodCBnZWxlc2VuIHdlcmRlbiAtICVzLiIKKworI34gbXNnaWQgIkRldmljZSAlcyBoYXMgZG9kZ2V5IGdlb21ldHJ5LiIKKyN+IG1zZ3N0ciAiR2Vy5HQgJXMgaGF0IGVpbmUgdW5nbGF1Ynf8cmRpZ2UgR2VvbWV0cmllLiIKKworI34gbXNnaWQgIklERSIKKyN+IG1zZ3N0ciAiSURFIgorCisjfiBtc2dpZCAiU0NTSSIKKyN+IG1zZ3N0ciAiU0NTSSIKKworI34gbXNnaWQgIkRldmljZSAlcyBpcyBuZWl0aGVyIGEgU0NTSSBub3IgSURFIGRyaXZlLiIKKyN+IG1zZ3N0ciAiRGFzIEdlcuR0ICVzIGlzdCB3ZWRlciBlaW4gU0NTSS0gbm9jaCBlaW4gSURFLUxhdWZ3ZXJrLiIKKworI34gbXNnaWQgIkVycm9yIHJlYWRpbmcgJXMgKCVzKSB0byBkZXRlcm1pbmUgaWYgcGFydGl0aW9uIGlzIG1vdW50ZWQuIgorI34gbXNnc3RyICIiCisjfiAiRmVobGVyIGJlaW0gTGVzZW4gdm9uICVzICglcykgdW0gZmVzdHp1c3RlbGxlbiBvYiBkaWUgUGFydGl0aW9uICIKKyN+ICJlaW5nZWhhbmdlbiAobW91bnRlZCkgaXN0LiIKKworI34gbXNnaWQgIiIKKyN+ICJVbmFibGUgdG8gZGV0ZXJtaW5lIGlmIHBhcnRpdGlvbnMgYXJlIG1vdW50ZWQgdmlhIC9wcm9jL21vdW50cyBvciAvZXRjLyIKKyN+ICJtdGFiLiAgTWFrZSBzdXJlIHlvdSBkb24ndCBhdHRlbXB0IHRvIHJlc2l6ZSBvciBtb2RpZnkgbW91bnRlZCBmaWxlICIKKyN+ICJzeXN0ZW1zLiAgKEV2ZW4gcmVhZC1vbmx5IG1vdW50ZWQpIgorI34gbXNnc3RyICIiCisjfiAiRXMga29ubnRlIG5pY2h0IGJlc3RpbW10IHdlcmRlbiwgb2IgUGFydGl0aW9uIPxiZXIgL3Byb2MvbW91bnRzIG9kZXIgL2V0Yy8iCisjfiAibXRhYiBlaW5nZWhhbmdlbiAobW91bnRlZCkgd2VyZGVuLiDcYmVycHL8ZmVuIFNpZSwgZGFzcyBTaWUgbmljaHQgIgorI34gInZlcnN1Y2hlbiwgZWluIGVpbmdlaGFuZ2VuZXMgRGF0ZWlzeXN0ZW0genUgdmVyZ3L232VybiBvZGVyIHp1IHZlcuRuZGVybiAiCisjfiAiKHNlbGJzdCB3ZW5uIGVzIG51ciB6dW0gTGVzZW4gZWluZ2VoYW5nZW4gd3VyZGUpLiIKKworI34gbXNnaWQgIiIKKyN+ICJUaGUgcGFydGl0aW9uIHRhYmxlIG9uICVzIGlzIGluY29uc2lzdGVudC4gIFRoZXJlIGFyZSBtYW55IHJlYXNvbnMgd2h5ICIKKyN+ICJ0aGlzIG1pZ2h0IGJlIHRoZSBjYXNlLiAgSG93ZXZlciwgdGhlIG1vc3QgbGlrZWx5IHJlYXNvbiBpcyB0aGF0IExpbnV4ICIKKyN+ICJkZXRlY3RlZCB0aGUgQklPUyBnZW9tZXRyeSBmb3IgJXMgaW5jb3JyZWN0bHkuICBHTlUgUGFydGVkIHN1c3BlY3RzIHRoZSAiCisjfiAicmVhbCBnZW9tZXRyeSBzaG91bGQgYmUgJWQvJWQvJWQgKG5vdCAlZC8lZC8lZCkuICBZb3Ugc2hvdWxkIGNoZWNrIHdpdGggIgorI34gInlvdXIgQklPUyBmaXJzdCwgYXMgdGhpcyBtYXkgbm90IGJlIGNvcnJlY3QuICBZb3UgY2FuIGluZm9ybSBMaW51eCBieSAiCisjfiAiYWRkaW5nIHRoZSBwYXJhbWV0ZXIgJXM9JWQsJWQsJWQgdG8gdGhlIGNvbW1hbmQgbGluZS4gIFNlZSB0aGUgTElMTyBvciAiCisjfiAiR1JVQiBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLiAgSWYgeW91IHRoaW5rIFBhcnRlZCdzIHN1Z2dlc3RlZCAiCisjfiAiZ2VvbWV0cnkgaXMgY29ycmVjdCwgeW91IG1heSBzZWxlY3QgSWdub3JlIHRvIGNvbnRpbnVlIChhbmQgZml4IExpbnV4ICIKKyN+ICJsYXRlcikuICBPdGhlcndpc2UsIHNlbGVjdCBDYW5jZWwgKGFuZCBmaXggTGludXggYW5kL29yIHRoZSBCSU9TIG5vdykuIgorI34gbXNnc3RyICIiCisjfiAiRGllIFBhcnRpdGlvbnN0YWJlbGxlIGF1ZiAlcyBpc3QgaW5rb25zaXN0ZW50LiBFcyBnaWJ0IHZpZWxlIG32Z2xpY2hlICIKKyN+ICJHcvxuZGUgZGFm/HIuIERlciB3YWhyc2NoZWlubGljaHN0ZSBHcnVuZCBpc3QsIGRhc3MgTGludXggZGllIEJJT1MtIgorI34gIkdlb21ldHJpZSBm/HIgJXMgZmFsc2NoIGVya2FubnQgaGF0LiBHTlUgUGFydGVkIHZlcm11dGV0LCBkYXNzIGRpZSB3YWhyZSAiCisjfiAiR2VvbWV0cmllICVkLyVkLyVkIGlzdCAobmljaHQgJWQvJWQvJWQpLiBTaWUgc29sbHRlbiB6dW7kY2hzdCBJaHIgQklPUyAiCisjfiAi/GJlcnBy/GZlbiwgZGEgZGFzIGZhbHNjaCBzZWluIGv2bm50ZS4gU2llIGv2bm5lbiBMaW51eCBkdXJjaCBBbmdhYmUgZGVzICIKKyN+ICJQYXJhbWV0ZXJzICVzPSVkLCVkLCVkIGluZm9ybWllcmVuLiBMZXNlbiBTaWUgTElMTy0gb2RlciBHUlVCLSIKKyN+ICJEb2t1bWVudGF0aW9uIGb8ciB3ZWl0ZXJlIEluZm9ybWF0aW9uZW4uIFdlbm4gU2llIGdsYXViZW4sIFBhcnRlZHMgIgorI34gInZvcmdlc2NobGFnZW5lIEdlb21ldHJpZSBpc3QgcmljaHRpZywgd+RobGVuIFNpZSBJZ25vcmUgdW0gZm9ydHp1c2V0emVuICIKKyN+ICIodW5kIExpbnV4IHNw5HRlciB6dSBrb3JyaWdpZXJlbikuIEFuc29uc3RlbiB35GhsZW4gU2llIENhbmNlbCAodW5kICIKKyN+ICJrb3JyaWdpZXJlbiBMaW51eCB1bmQvb2RlciBkYXMgQklPUyBqZXR6dCkuIgorCisjfiBtc2dpZCAiIgorI34gIlRoZSBwYXJ0aXRpb24gdGFibGUgb24gJXMgaXMgaW5jb25zaXN0ZW50LiAgVGhlcmUgYXJlIG1hbnkgcmVhc29ucyB3aHkgIgorI34gInRoaXMgbWlnaHQgYmUgdGhlIGNhc2UuICBPZnRlbiwgdGhlIHJlYXNvbiBpcyB0aGF0IExpbnV4IGRldGVjdGVkIHRoZSAiCisjfiAiQklPUyBnZW9tZXRyeSBpbmNvcnJlY3RseS4gIEhvd2V2ZXIsIHRoaXMgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHRoZSBjYXNlICIKKyN+ICJoZXJlLiAgSXQgaXMgc2FmZSB0byBpZ25vcmUsYnV0IGlnbm9yaW5nIG1heSBjYXVzZSAoZml4YWJsZSkgcHJvYmxlbXMgIgorI34gIndpdGggc29tZSBib290IGxvYWRlcnMsIGFuZCBtYXkgY2F1c2UgcHJvYmxlbXMgd2l0aCBGQVQgZmlsZSBzeXN0ZW1zLiAgIgorI34gIlVzaW5nIExCQSBpcyByZWNvbW1lbmRlZC4iCisjfiBtc2dzdHIgIiIKKyN+ICJEaWUgUGFydGl0aW9uc3RhYmVsbGUgYXVmICVzIGlzdCBpbmtvbnNpc3RlbnQuIEVzIGdpYnQgdmllbGUgR3L8bmRlLCAiCisjfiAid2FydW0gZGFzIGRlciBGYWxsIHNlaW4ga/ZubnRlLiBI5HVmaWcgaXN0IGRlciBHcnVuZCwgZGFzcyBMaW51eCBkaWUgQklPUy0iCisjfiAiR2VvbWV0cnkgZmFsc2NoIGVya2FubnQgaGF0LiBEYXMgc2NoZWludCBqZWRvY2ggaGllciBuaWNodCBkZXIgRmFsbCB6dSAiCisjfiAic2Vpbi4gTWFuIGthbm4gZGFzIGdldHJvc3QgaWdub3JpZXJlbjsgZGFzIGthbm4gYWJlciAobPZzYmFyZSkgUHJvYmxlbWUgIgorI34gIm1pdCBlaW5pZ2VuIEJvb3RsYWRlcm4gYmV3aXJrZW4sIHVuZCBrYW5uIGF1ZiBGQVQtRGF0ZWlzeXN0ZW1wcm9ibGVtIHp1ICIKKyN+ICJQcm9ibGVtZW4gZvxocmVuLiBEaWUgVmVyd2VuZHVuZyB2b24gTEJBIHdpcmQgZW1wZm9obGVuLiIKKworI34gbXNnaWQgIiIKKyN+ICJVbmFibGUgdG8gYWxpZ24gcGFydGl0aW9uIHByb3Blcmx5LiAgVGhpcyBwcm9iYWJseSBtZWFucyB0aGF0IGFub3RoZXIgIgorI34gInBhcnRpdGlvbmluZyB0b29sIGdlbmVyYXRlZCBhbiBpbmNvcnJlY3QgcGFydGl0aW9uIHRhYmxlLCBiZWNhdXNlIGl0ICIKKyN+ICJkaWRuJ3QgaGF2ZSB0aGUgY29ycmVjdCBCSU9TIGdlb21ldHJ5LiAgSXQgaXMgc2FmZSB0byBpZ25vcmUsYnV0IGlnbm9yaW5nICIKKyN+ICJtYXkgY2F1c2UgKGZpeGFibGUpIHByb2JsZW1zIHdpdGggc29tZSBib290IGxvYWRlcnMuIgorI34gbXNnc3RyICIiCisjfiAiRGllIFBhcnRpdGlvbnN0YWJlbGxlIGthbm4gbmljaHQga29ycmVrdCBhdXNnZXJpY2h0ZXQgKGFsaWduZWQpIHdlcmRlbi4gIgorI34gIkRhcyBiZWRldXRldCB2ZXJtdXRsaWNoLCBkYXNzIGVpbiBhbmRlcmVzIFBhcnRpdGlvbnN3ZXJremV1ZyBlaW5lICIKKyN+ICJpbmtvcnJla3RlIFBhcnRpdGlvbnN0YWJlbGxlIGVyemV1Z3QgaGF0LCB3ZWlsIGVzIG5pY2h0IGRpZSByaWNodGlnZSBCSU9TLSIKKyN+ICJHZW9tZXRyaWUga2FubnRlLiBEYXMga2FubiBtYW4gZ2V0cm9zdCBpZ25vcmllcmVuLCBJZ25vcmllcmVuIGthbm4gYWJlciAiCisjfiAiKGz2c2JhcmUpIFByb2JsZW1lIG1pdCBhbmRlcmVuIEJvb3RsYWRlcm4gaGVydm9ycnVmZW4uIgorCisjfiBtc2dpZCAiQXR0ZW1wdCB0byByZWFkIHNlY3RvcnMgJWxkLSVsZCBvdXRzaWRlIG9mIHBhcnRpdGlvbiBvbiAlcyIKKyN+IG1zZ3N0ciAiIgorI34gIlZlcnN1Y2gsIGRpZSBTZWt0b3JlbiAlbGQtJWxkIGF132VyaGFsYiBkZXIgUGFydGl0aW9uIGF1ZiAlcyB6dSBsZXNlbi4iCisKKyN+IG1zZ2lkICIiCisjfiAiVGhpcyBleHQyIGZpbGVzeXN0ZW0gaGFzIGEgcmF0aGVyIHN0cmFuZ2UgbGF5b3V0ISAgUGFydGVkIGNhbid0IHJlc2l6ZSAiCisjfiAidGhpcyAoeWV0KS4iCisjfiBtc2dzdHIgIiIKKyN+ICJEaWVzZXMgZXh0Mi1EYXRlaXN5c3RlbSBoYXQgZWluIGVoZXIgc2VsdHNhbWVzIExheW91dCEgUGFydGVkIGthbm4gaGllciAiCisjfiAiKG5vY2gpIG5pY2h0cyB0dW4uIgorCisjfiBtc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGludmFsaWQgc2lnbmF0dXJlIGZvciBhIEZBVCBmaWxlIHN5c3RlbXMuIgorI34gbXNnc3RyICJEYXRlaXN5c3RlbSBoYXQgZWluZSB1bmf8bHRpZ2UgU2lnbmF0dXJlIGb8ciBlaW4gRkFULURhdGVpc3lzdGVtLiIKKworI34gbXNnaWQgIlNUQVJUIGFuZCBFTkQgYXJlIGluIG1lZ2FieXRlc1xuIgorI34gbXNnc3RyICJTVEFSVCB1bmQgRU5ERSBzaW5kIGluIE1lZ2FieXRlcy5cbiIKKworI34gbXNnaWQgIlBhcnRpdGlvbiAlcyBpcyBiZWluZyB1c2VkLiIKKyN+IG1zZ3N0ciAiUGFydGl0aW9uICVzIGlzdCBpbiBWZXJ3ZW5kdW5nLiIKKworI34gbXNnaWQgIiIKKyN+ICJZb3UgcmVxdWVzdGVkIHRvIGNyZWF0ZSBhIHBhcnRpdGlvbiBhdCAlLjNmLSUuM2ZNYi4gVGhlIGNsb3Nlc3QgUGFydGVkICIKKyN+ICJjYW4gbWFuYWdlIGlzICUuM2YtJS4zZk1iLiIKKyN+IG1zZ3N0ciAiIgorI34gIlNpZSBoYWJlbiBkaWUgRXJ6ZXVndW5nIGVpbmVyIFBhcnRpdGlvbiBiZWkgJS4zZi0lLjNmTWIgdmVybGFuZ3QuIERhcyAiCisjfiAiQmVzdGUsIHdhcyBQYXJ0ZWQgYmlldGVuIGthbm4sIGlzdCAlLjNmLSUuM2ZNYi4iCisKKyN+IG1zZ2lkICIiCisjfiAiWW91IHJlcXVlc3RlZCB0byBtb3ZlIHRoZSBwYXJ0aXRpb24gdG8gJS4zZi0lLjNmTWIuIFRoZSBjbG9zZXN0IFBhcnRlZCAiCisjfiAiY2FuIG1hbmFnZSBpcyAlLjNmLSUuM2ZNYi4iCisjfiBtc2dzdHIgIiIKKyN+ICJTaWUgaGFiZW4gZGFzIFZlcnNjaGllYmVuIGRlciBQYXJ0aXRpb24genUgJS4zZi0lLjNmTWIgdmVybGFuZ3QuIERhcyAiCisjfiAiQmVzdGUsIHdhcyBQYXJ0ZWQgYmlldGVuIGthbm4sIGlzdCAlLjNmLSUuM2ZNYi4iCisKKyN+IG1zZ2lkICJEaXNrIGdlb21ldHJ5IGZvciAlczogMC4wMDAtJS4zZiBtZWdhYnl0ZXNcbiIKKyN+IG1zZ3N0ciAiUGxhdHRlbmdlb21ldHJpZSBm/HIgJXM6IDAuMDAwLSUuM2YgTWVnYWJ5dGVzXG4iCisKKyN+IG1zZ2lkICJEaXNrIGxhYmVsIHR5cGU6ICVzXG4iCisjfiBtc2dzdHIgIkRpc2stTGFiZWwtVHlwOiAlc1xuIgorCisjfiBtc2dpZCAiTWlub3IgICAgU3RhcnQgICAgICAgRW5kICAgICAiCisjfiBtc2dzdHIgIk1pbm9yICAgIFN0YXJ0ICAgICAgIEVuZCAgICAgIgorCisjfiBtc2dpZCAiVHlwZSAgICAgICIKKyN+IG1zZ3N0ciAiVHlwZSAgICAgICIKKworI34gbXNnaWQgIkZpbGVzeXN0ZW0gICIKKyN+IG1zZ3N0ciAiRGF0ZWlzeXN0ZW0gIgorCisjfiBtc2dpZCAiTmFtZSAgICAgICAgICAgICAgICAgICIKKyN+IG1zZ3N0ciAiTmFtZSAgICAgICAgICAgICAgICAgICIKKworI34gbXNnaWQgIiIKKyN+ICJZb3UgcmVxdWVzdGVkIHRvIHJlc2l6ZSB0aGUgcGFydGl0aW9uIHRvICUuM2YtJS4zZk1iLiBUaGUgY2xvc2VzdCBQYXJ0ZWQgIgorI34gImNhbiBtYW5hZ2UgaXMgJS4zZi0lLjNmTWIuIgorI34gbXNnc3RyICIiCisjfiAiU2llIGhhYmVuIGRhcyBWZXLkbmRlcm4gZGVyIFBhcnRpdGlvbiBhdWYgJS4zZi0lLjNmTWIgdmVybGFuZ3QuIERhcyAiCisjfiAiQmVzdGUsIHdhcyBQYXJ0ZWQgYmlldGVuIGthbm4sIGlzdCAlLjNmLSUuM2ZNYi4iCisKKyN+IG1zZ2lkICJyZXNpemUgTUlOT1IgU1RBUlQgRU5EICAgICAgICByZXNpemUgZmlsZXN5c3RlbSBvbiBwYXJ0aXRpb24gTUlOT1IiCisjfiBtc2dzdHIgIiIKKyN+ICJyZXNpemUgTUlOT1IgU1RBUlQgRU5ERSAgICBEYXRlaXN5c3RlbWdy9t9lIGF1ZiBQYXJ0aXRpb24gTUlOT1Ig5G5kZXJuLiIKKworI34gbXNnaWQgIiIKKyN+ICJZb3UgZm91bmQgYSBidWcgaW4gR05VIFBhcnRlZC4gIFBsZWFzZSBlbWFpbCBhIGJ1ZyByZXBvcnQgdG8gYnVnLSIKKyN+ICJwYXJ0ZWRAZ251Lm9yZyBjb250YWluaW5nIHRoZSB2ZXJzaW9uICglcyksIGFuZCB0aGUgZm9sbG93aW5nIG1lc3NhZ2U6XG4iCisjfiBtc2dzdHIgIiIKKyN+ICJTaWUgaGFiZW4gZWluIEJ1ZyBpbiBHTlUgUGFydGVkIGdlZnVuZGVuLiBCaXR0ZSBzZW5kZW4gU2llIGVpbmVuICIKKyN+ICJCdWdyZXBvcnQgYW4gYnVnLXBhcnRlZEBnbnUub3JnIHVudGVyIEFuZ2FiZSBkZXIgVmVyc2lvbiAoJXMpIHVuZCBkZXIgIgorI34gImZvbGdlbmRlbiBNZWxkdW5nOlxuIgorCisjfiBtc2dpZCAiIgorI34gIiAgWW91IGhhdmUgV2luZG93cyBGQVQgcGFydGl0aW9uKHMpIHRoYXQgYXJlIG5vdCB1c2luZyBMQkEuICBJZiB5b3VyIEJJT1MgIgorI34gInN1cHBvcnRzIExCQSwgdGhlbiB5b3Ugc2hvdWxkIHN3aXRjaCB0byBMQkEgYnkgc2V0dGluZyB0aGUgTEJBIGZsYWcgb24gIgorI34gImFsbCBGQVQgcGFydGl0aW9ucy4gIE90aGVyd2lzZSwgbWFrZSBzdXJlIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGFuZCB0aGUgIgorI34gIkJJT1MgaGF2ZSB0aGUgc2FtZSBnZW9tZXRyeSBiZWZvcmUgcmVzaXppbmcgYW55IEZBVCBwYXJ0aXRpb25zLiIKKyN+IG1zZ3N0ciAiIgorI34gIiAgU2llIGhhYmVuIFdpbmRvd3MgRkFULVBhcnRpdGlvbihlbiksIGRpZSBrZWluIExCQSB2ZXJ3ZW5kZW4uIFdlbm4gSWhyICIKKyN+ICJCSU9TIExCQSB1bnRlcnN0/HR6dCwgc29sbHRlbiBTaWUgYXVmIExCQSB1bXNjaGFsdGVuLCBpbmRlbSBTaWUgZGFzIExCQS0iCisjfiAiRmxhZyBiZWkgYWxsZW4gUGFydGl0aW9uZW4gc2V0emVuLiBBbmRlcmVuZmFsbHMgc3RlbGxlbiBTaWUgc2ljaGVyLCBkYXNzICIKKyN+ICJkYXMgQmV0cmllYnNzeXN0ZW0gdW5kIGRhcyBCSU9TIGRpZSBnbGVpY2hlIEdlb21ldHJpZSB2ZXJ3ZW5kZW4sIGJldm9yICIKKyN+ICJTaWUgZGllIEZBVC1QYXJ0aXRpb25lbiB2ZXLkbmRlcm4uIgorCisjfiBtc2dpZCAiIgorI34gIlRoZSBvcGVyYXRpbmcgc3lzdGVtIHRoaW5rcyB0aGUgZ2VvbWV0cnkgb24gJXMgaXMgJWQvJWQvJWQuICBUaGVyZWZvcmUsICIKKyN+ICJjeWxpbmRlciAxMDI0IGVuZHMgYXQgJS4zZk0uJXMiCisjfiBtc2dzdHIgIiIKKyN+ICJEYXMgQmV0cmllYnNzeXN0ZW0gZ2xhdWJ0LCBkYXNzIGRpZSBHZW9tZXRyaWUgYXVmICVzICVkLyVkLyVkIGlzdC4gIgorI34gIkRlc2hhbGIgZW5kZXQgWnlsaW5kZXIgMTAyNCBiZWkgJS4zZk0uJXMiCisKKyN+IG1zZ2lkICJUaGUgb3BlcmF0aW5nIHN5c3RlbSB0aGlua3MgdGhlIGdlb21ldHJ5IG9uICVzIGlzICVkLyVkLyVkLiVzIgorI34gbXNnc3RyICJEYXMgQmV0cmllYnNzeXN0ZW0gZ2xhdWJ0LCBkaWUgR2VvbWV0cmllIGF1ZiAlcyBzZWkgJWQvJWQvJWQuJXMiCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvcG8vZW5AYm9sZHF1b3QuaGVhZGVyIGIvcGFydGVkLTEuOC43L3BvL2VuQGJvbGRxdW90LmhlYWRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWRiNmEwCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L3BvL2VuQGJvbGRxdW90LmhlYWRlcgpAQCAtMCwwICsxLDI1IEBACisjIEFsbCB0aGlzIGNhdGFsb2cgInRyYW5zbGF0ZXMiIGFyZSBxdW90YXRpb24gY2hhcmFjdGVycy4KKyMgVGhlIG1zZ2lkcyBtdXN0IGJlIEFTQ0lJIGFuZCB0aGVyZWZvcmUgY2Fubm90IGNvbnRhaW4gcmVhbCBxdW90YXRpb24KKyMgY2hhcmFjdGVycywgb25seSBzdWJzdGl0dXRlcyBsaWtlIGdyYXZlIGFjY2VudCAoMHg2MCksIGFwb3N0cm9waGUgKDB4MjcpCisjIGFuZCBkb3VibGUgcXVvdGUgKDB4MjIpLiBUaGVzZSBzdWJzdGl0dXRlcyBsb29rIHN0cmFuZ2U7IHNlZQorIyBodHRwOi8vd3d3LmNsLmNhbS5hYy51ay9+bWdrMjUvdWNzL3F1b3Rlcy5odG1sCisjCisjIFRoaXMgY2F0YWxvZyB0cmFuc2xhdGVzIGdyYXZlIGFjY2VudCAoMHg2MCkgYW5kIGFwb3N0cm9waGUgKDB4MjcpIHRvCisjIGxlZnQgc2luZ2xlIHF1b3RhdGlvbiBtYXJrIChVKzIwMTgpIGFuZCByaWdodCBzaW5nbGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxOSkuCisjIEl0IGFsc28gdHJhbnNsYXRlcyBwYWlycyBvZiBhcG9zdHJvcGhlICgweDI3KSB0bworIyBsZWZ0IHNpbmdsZSBxdW90YXRpb24gbWFyayAoVSsyMDE4KSBhbmQgcmlnaHQgc2luZ2xlIHF1b3RhdGlvbiBtYXJrIChVKzIwMTkpCisjIGFuZCBwYWlycyBvZiBxdW90YXRpb24gbWFyayAoMHgyMikgdG8KKyMgbGVmdCBkb3VibGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxQykgYW5kIHJpZ2h0IGRvdWJsZSBxdW90YXRpb24gbWFyayAoVSsyMDFEKS4KKyMKKyMgV2hlbiBvdXRwdXQgdG8gYW4gVVRGLTggdGVybWluYWwsIHRoZSBxdW90YXRpb24gY2hhcmFjdGVycyBhcHBlYXIgcGVyZmVjdGx5LgorIyBXaGVuIG91dHB1dCB0byBhbiBJU08tODg1OS0xIHRlcm1pbmFsLCB0aGUgc2luZ2xlIHF1b3RhdGlvbiBtYXJrcyBhcmUKKyMgdHJhbnNsaXRlcmF0ZWQgdG8gYXBvc3Ryb3BoZXMgKGJ5IGljb252IGluIGdsaWJjIDIuMiBvciBuZXdlcikgb3IgdG8KKyMgZ3JhdmUvYWN1dGUgYWNjZW50IChieSBsaWJpY29udiksIGFuZCB0aGUgZG91YmxlIHF1b3RhdGlvbiBtYXJrcyBhcmUKKyMgdHJhbnNsaXRlcmF0ZWQgdG8gMHgyMi4KKyMgV2hlbiBvdXRwdXQgdG8gYW4gQVNDSUkgdGVybWluYWwsIHRoZSBzaW5nbGUgcXVvdGF0aW9uIG1hcmtzIGFyZQorIyB0cmFuc2xpdGVyYXRlZCB0byBhcG9zdHJvcGhlcywgYW5kIHRoZSBkb3VibGUgcXVvdGF0aW9uIG1hcmtzIGFyZQorIyB0cmFuc2xpdGVyYXRlZCB0byAweDIyLgorIworIyBUaGlzIGNhdGFsb2cgZnVydGhlcm1vcmUgZGlzcGxheXMgdGhlIHRleHQgYmV0d2VlbiB0aGUgcXVvdGF0aW9uIG1hcmtzIGluCisjIGJvbGQgZmFjZSwgYXNzdW1pbmcgdGhlIFZUMTAwL1hUZXJtIGVzY2FwZSBzZXF1ZW5jZXMuCisjCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvcG8vZW5AcXVvdC5oZWFkZXIgYi9wYXJ0ZWQtMS44LjcvcG8vZW5AcXVvdC5oZWFkZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk2NDdmYwotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9wby9lbkBxdW90LmhlYWRlcgpAQCAtMCwwICsxLDIyIEBACisjIEFsbCB0aGlzIGNhdGFsb2cgInRyYW5zbGF0ZXMiIGFyZSBxdW90YXRpb24gY2hhcmFjdGVycy4KKyMgVGhlIG1zZ2lkcyBtdXN0IGJlIEFTQ0lJIGFuZCB0aGVyZWZvcmUgY2Fubm90IGNvbnRhaW4gcmVhbCBxdW90YXRpb24KKyMgY2hhcmFjdGVycywgb25seSBzdWJzdGl0dXRlcyBsaWtlIGdyYXZlIGFjY2VudCAoMHg2MCksIGFwb3N0cm9waGUgKDB4MjcpCisjIGFuZCBkb3VibGUgcXVvdGUgKDB4MjIpLiBUaGVzZSBzdWJzdGl0dXRlcyBsb29rIHN0cmFuZ2U7IHNlZQorIyBodHRwOi8vd3d3LmNsLmNhbS5hYy51ay9+bWdrMjUvdWNzL3F1b3Rlcy5odG1sCisjCisjIFRoaXMgY2F0YWxvZyB0cmFuc2xhdGVzIGdyYXZlIGFjY2VudCAoMHg2MCkgYW5kIGFwb3N0cm9waGUgKDB4MjcpIHRvCisjIGxlZnQgc2luZ2xlIHF1b3RhdGlvbiBtYXJrIChVKzIwMTgpIGFuZCByaWdodCBzaW5nbGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxOSkuCisjIEl0IGFsc28gdHJhbnNsYXRlcyBwYWlycyBvZiBhcG9zdHJvcGhlICgweDI3KSB0bworIyBsZWZ0IHNpbmdsZSBxdW90YXRpb24gbWFyayAoVSsyMDE4KSBhbmQgcmlnaHQgc2luZ2xlIHF1b3RhdGlvbiBtYXJrIChVKzIwMTkpCisjIGFuZCBwYWlycyBvZiBxdW90YXRpb24gbWFyayAoMHgyMikgdG8KKyMgbGVmdCBkb3VibGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxQykgYW5kIHJpZ2h0IGRvdWJsZSBxdW90YXRpb24gbWFyayAoVSsyMDFEKS4KKyMKKyMgV2hlbiBvdXRwdXQgdG8gYW4gVVRGLTggdGVybWluYWwsIHRoZSBxdW90YXRpb24gY2hhcmFjdGVycyBhcHBlYXIgcGVyZmVjdGx5LgorIyBXaGVuIG91dHB1dCB0byBhbiBJU08tODg1OS0xIHRlcm1pbmFsLCB0aGUgc2luZ2xlIHF1b3RhdGlvbiBtYXJrcyBhcmUKKyMgdHJhbnNsaXRlcmF0ZWQgdG8gYXBvc3Ryb3BoZXMgKGJ5IGljb252IGluIGdsaWJjIDIuMiBvciBuZXdlcikgb3IgdG8KKyMgZ3JhdmUvYWN1dGUgYWNjZW50IChieSBsaWJpY29udiksIGFuZCB0aGUgZG91YmxlIHF1b3RhdGlvbiBtYXJrcyBhcmUKKyMgdHJhbnNsaXRlcmF0ZWQgdG8gMHgyMi4KKyMgV2hlbiBvdXRwdXQgdG8gYW4gQVNDSUkgdGVybWluYWwsIHRoZSBzaW5nbGUgcXVvdGF0aW9uIG1hcmtzIGFyZQorIyB0cmFuc2xpdGVyYXRlZCB0byBhcG9zdHJvcGhlcywgYW5kIHRoZSBkb3VibGUgcXVvdGF0aW9uIG1hcmtzIGFyZQorIyB0cmFuc2xpdGVyYXRlZCB0byAweDIyLgorIwpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L3BvL2VzLmdtbyBiL3BhcnRlZC0xLjguNy9wby9lcy5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUzODEwMgotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9wby9lcy5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L3BvL2VzLnBvIGIvcGFydGVkLTEuOC43L3BvL2VzLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkZGVkYjkKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvcG8vZXMucG8KQEAgLTAsMCArMSwzMzk2IEBACisjIE1lbnNhamVzIGVuIGVzcGHxb2wgcGFyYSBHTlUgcGFydGVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFZpY2VudGUgRS4gTGxvcmVucyA8dmxsb3JlbnNAbXVuZG9mcmVlLmNvbT4sIDIwMDIuCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBHTlUgcGFydGVkIDEuNi4yM1xuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBidWctcGFydGVkQGdudS5vcmdcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAwNy0wNS0wOSAxNzowMi0wNDAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwNS0wOS0xOCAyMDowNSswMTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBWaWNlbnRlIEUuIExsb3JlbnMgPHZsbG9yZW5zQG11bmRvZnJlZS5jb20+XG4iCisiTGFuZ3VhZ2UtVGVhbTogU3BhbmlzaCA8ZXNAbGkub3JnPlxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTy04ODU5LTFcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4LWJpdFxuIgorCisjOiBsaWIvY2xvc2VvdXQuYzo3NAorbXNnaWQgIndyaXRlIGVycm9yIgorbXNnc3RyICIiCisKKyM6IGxpYi9lcnJvci5jOjEyNQorIywgZnV6enkKK21zZ2lkICJVbmtub3duIHN5c3RlbSBlcnJvciIKK21zZ3N0ciAiVGlwbyBkZSBzaXN0ZW1hIGRlIGZpY2hlcm9zIFwiJXNcIiBkZXNjb25vY2lkby4iCisKKyM6IGxpYi9nZXRvcHQuYzo1MzEgbGliL2dldG9wdC5jOjU0NworIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIGAlcycgaXMgYW1iaWd1b3VzXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjU4MCBsaWIvZ2V0b3B0LmM6NTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYC0tJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6NTkzIGxpYi9nZXRvcHQuYzo1OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiBgJWMlcycgZG9lc24ndCBhbGxvdyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo2NDEgbGliL2dldG9wdC5jOjY2MCBsaWIvZ2V0b3B0LmM6OTc2IGxpYi9nZXRvcHQuYzo5OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiBgJXMnIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjY5OCBsaWIvZ2V0b3B0LmM6NzAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bnJlY29nbml6ZWQgb3B0aW9uIGAtLSVzJ1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo3MDkgbGliL2dldG9wdC5jOjcxMgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5yZWNvZ25pemVkIG9wdGlvbiBgJWMlcydcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6NzY0IGxpYi9nZXRvcHQuYzo3NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGlsbGVnYWwgb3B0aW9uIC0tICVjXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjc3MyBsaWIvZ2V0b3B0LmM6Nzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbnZhbGlkIG9wdGlvbiAtLSAlY1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo4MjggbGliL2dldG9wdC5jOjg0NCBsaWIvZ2V0b3B0LmM6MTA0OCBsaWIvZ2V0b3B0LmM6MTA2NgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IC0tICVjXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjg5NyBsaWIvZ2V0b3B0LmM6OTEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYC1XICVzJyBpcyBhbWJpZ3VvdXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6OTM3IGxpYi9nZXRvcHQuYzo5NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiBgLVcgJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzoKKyMuIEdldCB0cmFuc2xhdGlvbnMgZm9yIG9wZW4gYW5kIGNsb3NpbmcgcXVvdGF0aW9uIG1hcmtzLgorIy4KKyMuIFRoZSBtZXNzYWdlIGNhdGFsb2cgc2hvdWxkIHRyYW5zbGF0ZSAiYCIgdG8gYSBsZWZ0CisjLiBxdW90YXRpb24gbWFyayBzdWl0YWJsZSBmb3IgdGhlIGxvY2FsZSwgYW5kIHNpbWlsYXJseSBmb3IKKyMuICInIi4gIElmIHRoZSBjYXRhbG9nIGhhcyBubyB0cmFuc2xhdGlvbiwKKyMuIGxvY2FsZV9xdW90aW5nX3N0eWxlIHF1b3RlcyBgbGlrZSB0aGlzJywgYW5kCisjLiBjbG9jYWxlX3F1b3Rpbmdfc3R5bGUgcXVvdGVzICJsaWtlIHRoaXMiLgorIy4KKyMuIEZvciBleGFtcGxlLCBhbiBBbWVyaWNhbiBFbmdsaXNoIFVuaWNvZGUgbG9jYWxlIHNob3VsZAorIy4gdHJhbnNsYXRlICJgIiB0byBVKzIwMUMgKExFRlQgRE9VQkxFIFFVT1RBVElPTiBNQVJLKSwgYW5kCisjLiBzaG91bGQgdHJhbnNsYXRlICInIiB0byBVKzIwMUQgKFJJR0hUIERPVUJMRSBRVU9UQVRJT04KKyMuIE1BUkspLiAgQSBCcml0aXNoIEVuZ2xpc2ggVW5pY29kZSBsb2NhbGUgc2hvdWxkIGluc3RlYWQKKyMuIHRyYW5zbGF0ZSB0aGVzZSB0byBVKzIwMTggKExFRlQgU0lOR0xFIFFVT1RBVElPTiBNQVJLKSBhbmQKKyMuIFUrMjAxOSAoUklHSFQgU0lOR0xFIFFVT1RBVElPTiBNQVJLKSwgcmVzcGVjdGl2ZWx5LgorIy4KKyMuIElmIHlvdSBkb24ndCBrbm93IHdoYXQgdG8gcHV0IGhlcmUsIHBsZWFzZSBzZWUKKyMuIDxodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1F1b3RhdGlvbl9tYXJrI0dseXBocz4KKyMuIGFuZCB1c2UgZ2x5cGhzIHN1aXRhYmxlIGZvciB5b3VyIGxhbmd1YWdlLgorIzogbGliL3F1b3RlYXJnLmM6MjI5Cittc2dpZCAiYCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcXVvdGVhcmcuYzoyMzAKK21zZ2lkICInIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTMxCittc2dpZCAiU3VjY2VzcyIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjEzNAorbXNnaWQgIk5vIG1hdGNoIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTM3Cittc2dpZCAiSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNDAKK21zZ2lkICJJbnZhbGlkIGNvbGxhdGlvbiBjaGFyYWN0ZXIiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNDMKK21zZ2lkICJJbnZhbGlkIGNoYXJhY3RlciBjbGFzcyBuYW1lIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTQ2Cittc2dpZCAiVHJhaWxpbmcgYmFja3NsYXNoIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTQ5Cittc2dpZCAiSW52YWxpZCBiYWNrIHJlZmVyZW5jZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE1MgorbXNnaWQgIlVubWF0Y2hlZCBbIG9yIFteIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTU1Cittc2dpZCAiVW5tYXRjaGVkICggb3IgXFwoIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTU4Cittc2dpZCAiVW5tYXRjaGVkIFxceyIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE2MQorbXNnaWQgIkludmFsaWQgY29udGVudCBvZiBcXHtcXH0iCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNjQKK21zZ2lkICJJbnZhbGlkIHJhbmdlIGVuZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE2NworbXNnaWQgIk1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNzAKK21zZ2lkICJJbnZhbGlkIHByZWNlZGluZyByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNzMKK21zZ2lkICJQcmVtYXR1cmUgZW5kIG9mIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE3NgorbXNnaWQgIlJlZ3VsYXIgZXhwcmVzc2lvbiB0b28gYmlnIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTc5Cittc2dpZCAiVW5tYXRjaGVkICkgb3IgXFwpIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6NjgwCittc2dpZCAiTm8gcHJldmlvdXMgcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9ycG1hdGNoLmM6NzAKK21zZ2lkICJeW3lZXSIKK21zZ3N0ciAiIgorCisjOiBsaWIvcnBtYXRjaC5jOjczCittc2dpZCAiXltuTl0iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IFRyYW5zbGF0ZSAiKEMpIiB0byB0aGUgY29weXJpZ2h0IHN5bWJvbAorIy4gKEMtaW4tYS1jaXJjbGUpLCBpZiB0aGlzIHN5bWJvbCBpcyBhdmFpbGFibGUgaW4gdGhlIHVzZXIncworIy4gbG9jYWxlLiAgT3RoZXJ3aXNlLCBkbyBub3QgdHJhbnNsYXRlICIoQykiOyBsZWF2ZSBpdCBhcy1pcy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjY2Cittc2dpZCAiKEMpIgorbXNnc3RyICIiCisKKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjY4Cittc2dpZCAiIgorIlxuIgorIkxpY2Vuc2UgR1BMdjIrOiBHTlUgR1BMIHZlcnNpb24gMiBvciBsYXRlciA8aHR0cDovL2dudS5vcmcvbGljZW5zZXMvZ3BsLiIKKyJodG1sPlxuIgorIlRoaXMgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGFyZSBmcmVlIHRvIGNoYW5nZSBhbmQgcmVkaXN0cmlidXRlIGl0LlxuIgorIlRoZXJlIGlzIE5PIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXcuXG4iCisiXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6ICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJXcml0dGVuIGJ5ICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzo4OAorIywgYy1mb3JtYXQKK21zZ2lkICJXcml0dGVuIGJ5ICVzIGFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIzogbGliL3ZlcnNpb24tZXRjLmM6OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiV3JpdHRlbiBieSAlcywgJXMsIGFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorImFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzoxMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyIlcywgYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjLiBZb3UgY2FuIHVzZSBsaW5lIGJyZWFrcywgZXN0aW1hdGluZyB0aGF0IGVhY2ggYXV0aG9yIG5hbWUgb2NjdXBpZXMKKyMuIGNhLiAxNiBzY3JlZW4gY29sdW1ucyBhbmQgdGhhdCBhIHNjcmVlbiBsaW5lIGhhcyBjYS4gODAgY29sdW1ucy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorIiVzLCAlcywgYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjLiBZb3UgY2FuIHVzZSBsaW5lIGJyZWFrcywgZXN0aW1hdGluZyB0aGF0IGVhY2ggYXV0aG9yIG5hbWUgb2NjdXBpZXMKKyMuIGNhLiAxNiBzY3JlZW4gY29sdW1ucyBhbmQgdGhhdCBhIHNjcmVlbiBsaW5lIGhhcyBjYS4gODAgY29sdW1ucy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjExNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorIiVzLCAlcywgJXMsIGFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzoxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyIlcywgJXMsICVzLCAlcyxcbiIKKyJhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6MTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiJXMsICVzLCAlcywgJXMsXG4iCisiJXMsIGFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzoxNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyIlcywgJXMsICVzLCAlcyxcbiIKKyIlcywgJXMsIGFuZCBvdGhlcnMuXG4iCittc2dzdHIgIiIKKworIzogbGliL3hhbGxvYy1kaWUuYzozNQorbXNnaWQgIm1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjIzNworbXNnaWQgIkRpc2sgSW1hZ2UiCittc2dzdHIgIiIKKworIyBvIHRhbWJp6W4gImFsIGFicmlyIgorIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjMzOCBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzoyNjEKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTI3MgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBvcGVuaW5nICVzOiAlcyIKK21zZ3N0ciAiRXJyb3IgYWwgYWJyaXIgJXM6ICVzIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6MzQ5IGxpYnBhcnRlZC9hcmNoL2dudS5jOjI3MQorIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBvcGVuICVzIHJlYWQtd3JpdGUgKCVzKS4gICVzIGhhcyBiZWVuIG9wZW5lZCByZWFkLW9ubHkuIgorbXNnc3RyICIiCisiTm8gc2UgcHVlZGUgYWJyaXIgJXMgZW4gbW9kbyBsZWN0dXJhLWVzY3JpdHVyYSAoJXMpLiAlcyBoYSBzaWRvIGFiaWVydG8gZW4gIgorIm1vZG8gZGUgc/NsbyBsZWN0dXJhLiIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjQxMSBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjE0MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZHVyaW5nIHNlZWsgZm9yIHJlYWQgb24gJXMiCittc2dzdHIgIiVzIGR1cmFudGUgbGEgcHJlcGFyYWNp824gcGFyYSBsZWN0dXJhIGVuICVzIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6NDQ0IGxpYnBhcnRlZC9hcmNoL2dudS5jOjQ0OSBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo1NDgKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjY3NiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjEzOTEKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkdXJpbmcgcmVhZCBvbiAlcyIKK21zZ3N0ciAiJXMgZHVyYW50ZSBsYSBsZWN0dXJhIGVuICVzIgorCisjIHBhcmEgc/NsbyBsZWN0dXJhLgorIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjQ4MCBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo1MDkKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTU0NgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW4ndCB3cml0ZSB0byAlcywgYmVjYXVzZSBpdCBpcyBvcGVuZWQgcmVhZC1vbmx5LiIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgZXNjcmliaXIgZW4gJXMsIHBvcnF1ZSBlc3ThIGFiaWVydG8gcGFyYSBz82xvIGxlY3R1cmEuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6NDk2IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTU3MAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkdXJpbmcgc2VlayBmb3Igd3JpdGUgb24gJXMiCittc2dzdHIgIiVzIGR1cmFudGUgbGEgcHJlcGFyYWNp824gcGFyYSBlc2NyaWJpciBlbiAlcyIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjUzMyBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo1ODUgbGlicGFydGVkL2FyY2gvZ251LmM6NjMwCisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo3MDcgbGlicGFydGVkL2FyY2gvbGludXguYzoxNTE3CisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjE2MTIgbGlicGFydGVkL2FyY2gvbGludXguYzoxNjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGR1cmluZyB3cml0ZSBvbiAlcyIKK21zZ3N0ciAiJXMgZHVyYW50ZSBsYSBlc2NyaXR1cmEgZW4gJXMiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6NjMgcGFydHByb2JlL3BhcnRwcm9iZS5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICJUcnkgYCVzIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4iCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICVzIFtPUFRJT05dXG4iCisiICBvcjogICVzIERFVklDRSBNSU5PUlxuIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6NzAKK21zZ2lkICIiCisiQ2xlYXIgdW51c2VkIHNwYWNlIG9uIGEgRkFUIHBhcnRpdGlvbiAoYSBHTlUgUGFydGVkIHRlc3RpbmcgdG9vbCkuXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo3NAorbXNnaWQgIiAgICAgIC0taGVscCAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXRcbiIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjc1Cittc2dpZCAiICAgICAgLS12ZXJzaW9uICBvdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdFxuIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6NzcgcGFydHByb2JlL3BhcnRwcm9iZS5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiUmVwb3J0IGJ1Z3MgdG8gPCVzPi5cbiIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjI4NQorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gZmV3IGFyZ3VtZW50cyIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjI5MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIgorbXNnc3RyICJEZW1hc2lhZGFzIHDhZ2luYXMgaW5jb3JyZWN0YXMuIgorCisjOiBwYXJ0cHJvYmUvcGFydHByb2JlLmM6MTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbT1BUSU9OXSBbREVWSUNFXS4uLlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRwcm9iZS9wYXJ0cHJvYmUuYzoxNDIKK21zZ2lkICIiCisiSW5mb3JtIHRoZSBPUyBvZiBwYXJ0aXRpb24gdGFibGUgY2hhbmdlcy5cbiIKKyJcbiIKKyIgIC1kLCAtLW5vLXVwZGF0ZSAgZG9uJ3QgdXBkYXRlIHRoZSBrZXJuZWxcbiIKKyIgIC1zLCAtLXN1bW1hcnkgICAgcHJpbnQgYSBzdW1tYXJ5IG9mIGNvbnRlbnRzXG4iCisiICAtaCwgLS1oZWxwICAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0XG4iCisiICAtdiwgLS12ZXJzaW9uICAgIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0XG4iCittc2dzdHIgIiIKKworIzogcGFydHByb2JlL3BhcnRwcm9iZS5jOjE1MAorbXNnaWQgIiIKKyJcbiIKKyJXaXRoIG5vIERFVklDRSwgcHJvYmUgYWxsIHBhcnRpdGlvbnMuXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIG9wZW4gJXMuIgorbXNnc3RyICJObyBzZSBwdWVkZSBhYnJpciAlcy4iCisKKyMgVW5hYmxlIHRvIC0+IE5vIHNlIHB1ZWRlLgorIzogbGlicGFydGVkL2FyY2gvZ251LmM6MTE0Cittc2dpZCAiVW5hYmxlIHRvIHByb2JlIHN0b3JlLiIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgcHJvYmFyIGVsIGd1YXJkYXIuIgorCisjIGNhcmdhZG9yICJkZSIgYXJhbnF1ZSAobm8gZGVsKQorIzogbGlicGFydGVkL2FyY2gvZ251LmM6MzUyCittc2dpZCAiIgorIlRoZSBwYXJ0aXRpb24gdGFibGUgY2Fubm90IGJlIHJlLXJlYWQuICBUaGlzIG1lYW5zIHlvdSBuZWVkIHRvIHJlYm9vdCBiZWZvcmUgIgorIm1vdW50aW5nIGFueSBtb2RpZmllZCBwYXJ0aXRpb25zLiAgWW91IGFsc28gbmVlZCB0byByZWluc3RhbGwgeW91ciBib290ICIKKyJsb2FkZXIgYmVmb3JlIHlvdSByZWJvb3QgKHdoaWNoIG1heSByZXF1aXJlIG1vdW50aW5nIG1vZGlmaWVkIHBhcnRpdGlvbnMpLiAgIgorIkl0IGlzIGltcG9zc2libGUgZG8gYm90aCB0aGluZ3MhICBTbyB5b3UnbGwgbmVlZCB0byBib290IG9mZiBhIHJlc2N1ZSBkaXNrLCAiCisiYW5kIHJlaW5zdGFsbCB5b3VyIGJvb3QgbG9hZGVyIGZyb20gdGhlIHJlc2N1ZSBkaXNrLiAgUmVhZCBzZWN0aW9uIDQgb2YgdGhlICIKKyJQYXJ0ZWQgVXNlciBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiIgorIk5vIHNlIHB1ZG8gcmVsZWVyIGxhIHRhYmxhIGRlIHBhcnRpY2lvbmVzLCBwb3IgbG8gdGFudG8gZXMgbmVjZXNhcmlvICIKKyJyZWluaWNpYXIgYW50ZXMgZGUgbW9udGFyIGFsZ3VuYSBwYXJ0aWNp824gbW9kaWZpY2FkYS4gIKFUYW1iaeluIG5lY2VzaXRhICIKKyJyZWluc3RhbGFyIHN1IGNhcmdhZG9yIGRlIGFycmFucXVlIGFudGVzIGRlIHJlaW5pY2lhciAocXVlIHB1ZWRlIHJlcXVlcmlyICIKKyJtb250YXIgbGFzIHBhcnRpY2lvbmVzIG1vZGlmaWNhZGFzKS4gIKFFcyBpbXBvc2libGUgaGFjZXIgYW1iYXMgY29zYXMhICBBc+0gIgorInF1ZSBuZWNlc2l0YXLhIGFycmFuY2FyIGNvbiB1biBkaXNjbyBkZSByZXNjYXRlIHkgcmVpbnN0YWxhciBzdSBjYXJnYWRvciBkZSAiCisiYXJyYW5xdWUgZGVzZGUgZWwgZGlzY28gZGUgcmVzY2F0ZS4gIExlYSBsYSBzZWNjafNuIDQgZGUgbGEgZG9jdW1lbnRhY2nzbiAiCisiZGVsIFVzdWFyaW8gZGUgUGFydGVkIHBhcmEgb2J0ZW5lciBt4XMgaW5mb3JtYWNp824uIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzozNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBwYXJ0aXRpb24gdGFibGUgb24gJXMgY2Fubm90IGJlIHJlLXJlYWQgKCVzKS4gIFRoaXMgbWVhbnMgdGhlIEh1cmQga25vd3MgIgorIm5vdGhpbmcgYWJvdXQgYW55IG1vZGlmaWNhdGlvbnMgeW91IG1hZGUuICBZb3Ugc2hvdWxkIHJlYm9vdCB5b3VyIGNvbXB1dGVyICIKKyJiZWZvcmUgZG9pbmcgYW55dGhpbmcgd2l0aCAlcy4iCittc2dzdHIgIiIKKyJMYSB0YWJsYSBkZSBwYXJ0aWNpb25lcyBlbiAlcyBubyBwdWVkZSBzZXIgcmVsZWlkYSglcykuICBFc3RvIHNpZ25pZmljYSBxdWUgIgorIkh1cmQgKG8gTGludXgpIG5vIHJlY29ub2NlcuEgbGFzIG1vZGlmaWNhY2lvbmVzIHF1ZSBoaXpvLiAgRGViZSByZWluaWNpYXIgc3UgIgorImNvbXB1dGFkb3JhIGFudGVzIGRlIGhhY2VyIG5hZGEgY29uICVzLiIKKworIyBib290IGxvYWRlciAtPiBjYXJnYWRvciBkZSBhcnJhbnF1ZS4KKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjM4MCBwYXJ0ZWQvcGFydGVkLmM6MjQ0MworbXNnaWQgIiIKKyJZb3Ugc2hvdWxkIHJlaW5zdGFsbCB5b3VyIGJvb3QgbG9hZGVyIGJlZm9yZSByZWJvb3RpbmcuICBSZWFkIHNlY3Rpb24gNCBvZiAiCisidGhlIFBhcnRlZCBVc2VyIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorbXNnc3RyICIiCisiRGViZSByZWluc3RhbGFyIHN1IGNhcmdhZG9yIGRlIGFycmFucXVlIGFudGVzIGRlIHJlaW5pY2lhci4gIExlYSBsYSBzZWNjafNuICIKKyI0IGRlIGxhIGRvY3VtZW50YWNp824gZGVsIFVzdWFyaW8gZGUgUGFydGVkIHBhcmEgb2J0ZW5lciBt4XMgaW5mb3JtYWNp824uIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo3NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdHJ5aW5nIHRvIHN5bmMgJXMgdG8gZGlzayIKK21zZ3N0ciAiJXMgaW50ZW50YW5kbyBzaW5jcm9uaXphciAlcyBhbCBkaXNjbyIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo0MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHN0YXQgZGV2aWNlICVzIC0gJXMuIgorbXNnc3RyICJObyBzZSBwdWVkZSBoYWNlciBgc3RhdCcgc29icmUgZWwgZGlzcG9zaXRpdm8gJXMgLSAlcy4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6NTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgZGV0ZXJtaW5lIHNlY3RvciBzaXplIGZvciAlczogJXMuXG4iCisiVXNpbmcgdGhlIGRlZmF1bHQgc2VjdG9yIHNpemUgKCVsbGQpLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjUzOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRGV2aWNlICVzIGhhcyBhIGxvZ2ljYWwgc2VjdG9yIHNpemUgb2YgJWxsZC4gIE5vdCBhbGwgcGFydHMgb2YgR05VIFBhcnRlZCAiCisic3VwcG9ydCB0aGlzIGF0IHRoZSBtb21lbnQsIGFuZCB0aGUgd29ya2luZyBjb2RlIGlzIEhJR0hMWSBFWFBFUklNRU5UQUwuXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo1NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGRldGVybWluZSB0aGUgc2l6ZSBvZiAlcyAoJXMpLiIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgZGV0ZXJtaW5hciBlbCB0YW1h8W8gZGUgJXMgKCVzKS4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6NjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBnZXQgaWRlbnRpdHkgb2YgZGV2aWNlICVzIC0gJXMiCittc2dzdHIgIk5vIHNlIHB1ZWRlIG9idGVuZXIgbGEgaWRlbnRpZGFkIGRlbCBkaXNwb3NpdGl2byAlcyAtICVzIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjY3NworbXNnaWQgIkdlbmVyaWMgSURFIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6Njk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJEZXZpY2UgJXMgaGFzIG11bHRpcGxlICglZCkgbG9naWNhbCBzZWN0b3JzIHBlciBwaHlzaWNhbCBzZWN0b3IuXG4iCisiR05VIFBhcnRlZCBzdXBwb3J0cyB0aGlzIEVYUEVSSU1FTlRBTExZIGZvciBzb21lIHNwZWNpYWwgZGlzayBsYWJlbC9maWxlICIKKyJzeXN0ZW0gY29tYmluYXRpb25zLCBlLmcuIEdQVCBhbmQgZXh0Mi8zLlxuIgorIlBsZWFzZSBjb25zdWx0IHRoZSB3ZWIgc2l0ZSBmb3IgdXAtdG8tZGF0ZSBpbmZvcm1hdGlvbi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo4NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgaW5pdGlhbGlzaW5nIFNDU0kgZGV2aWNlICVzIC0gJXMiCittc2dzdHIgIkVycm9yIGluaWNpYW5kbyBlbCBkaXNwb3NpdGl2byBTQ1NJICVzIC0gJXMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6OTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZGV2aWNlICVzIGhhcyB6ZXJvIGxlbmd0aCwgYW5kIGNhbid0IHBvc3NpYmx5IHN0b3JlIGEgZmlsZSBzeXN0ZW0gb3IgIgorInBhcnRpdGlvbiB0YWJsZS4gIFBlcmhhcHMgeW91IHNlbGVjdGVkIHRoZSB3cm9uZyBkZXZpY2U/IgorbXNnc3RyICIiCisKKyMgZWwgUGFydGVkIC0+IFBhcnRlZC4gTm8gc2Ugc3VlbGVuIHBvbmVyIGFydO1jdWxvcyBhIGxvcyBub21icmVzIGRlCisjIGxvcyBwcm9ncmFtYXMuIHF1ZWRhIHVuIHBvY28gZGVzcGVjdGl2bworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMDMyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiVW5hYmxlIHRvIGRldGVybWluZSBnZW9tZXRyeSBvZiBmaWxlL2RldmljZSAlcy4gIFlvdSBzaG91bGQgbm90IHVzZSBQYXJ0ZWQgIgorInVubGVzcyB5b3UgUkVBTExZIGtub3cgd2hhdCB5b3UncmUgZG9pbmchIgorbXNnc3RyICIiCisiTm8gc2UgcHVlZGUgZGV0ZXJtaW5hciBsYSBnZW9tZXRy7WEgZGVsIGZpY2hlcm8vZGlzcG9zaXRpdm8uICChTm8gZGViZXLtYSAiCisidXRpbGl6YXIgUGFydGVkIGEgbm8gc2VyIHF1ZSBSRUFMTUVOVEUgc2VwYSBsbyBxdWUgZXN04SBoYWNpZW5kbyEiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTExMAorbXNnaWQgIkRBQzk2MCBSQUlEIGNvbnRyb2xsZXIiCittc2dzdHIgIkNvbnRyb2xhZG9yYSBSQUlEIERBQzk2MCIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTE1Cittc2dpZCAiUHJvbWlzZSBTWDggU0FUQSBEZXZpY2UiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTIwCittc2dpZCAiSUJNIFMzOTAgREFTRCBkcml2ZSIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExMjUKK21zZ2lkICJJQk0gaVNlcmllcyBWaXJ0dWFsIERBU0QiCittc2dzdHIgIiIKKworIyBkZSBDb21wYXEKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTEzMAorbXNnaWQgIkNvbXBhcSBTbWFydCBBcnJheSIKK21zZ3N0ciAiRXN0cnVjdHVyYSBTbWFydCBkZSBDb21wYXEiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTEzNQorbXNnaWQgIkFUQVJBSUQgQ29udHJvbGxlciIKK21zZ3N0ciAiQ29udHJvbGFkb3JhIEFUQVJBSUQiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTE0MAorbXNnaWQgIkkyTyBDb250cm9sbGVyIgorbXNnc3RyICJDb250cm9sYWRvcmEgSTIwIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExNDUKK21zZ2lkICJVc2VyLU1vZGUgTGludXggVUJEIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTE1NgorbXNnaWQgIkxpbnV4IGRldmljZS1tYXBwZXIiCittc2dzdHIgIiIKKworIyC/UXXpLCBleGFjdGFtZW50ZSwgZXMgZGVzY29ub2NpZG8/IL9ObyBzZXLhIGRlc2Nvbm9jaWRhPworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTYyCittc2dpZCAiVW5rbm93biIKK21zZ3N0ciAiRGVzY29ub2NpZGEiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTE2OQorbXNnaWQgInBlZF9kZXZpY2VfbmV3KCkgIFVuc3VwcG9ydGVkIGRldmljZSB0eXBlIgorbXNnc3RyICJwZWRfZGV2aWNlX25ldygpICBUaXBvIGRlIGRpc3Bvc2l0aXZvIG5vIHNvcG9ydGFkbyIKKworIyBpbmZvcm1pbmcgdGhlIGtlcm5lbCAtPiBhbCBpbmZvcm1hciBhbCBu+mNsZW8KKyMgaW4gYW55IHdheSAtPiBkZSBuaW5ndW5hIGZvcm1hCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjIwODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkVycm9yIGluZm9ybWluZyB0aGUga2VybmVsIGFib3V0IG1vZGlmaWNhdGlvbnMgdG8gcGFydGl0aW9uICVzIC0tICVzLiAgVGhpcyAiCisibWVhbnMgTGludXggd29uJ3Qga25vdyBhYm91dCBhbnkgY2hhbmdlcyB5b3UgbWFkZSB0byAlcyB1bnRpbCB5b3UgcmVib290IC0tICIKKyJzbyB5b3Ugc2hvdWxkbid0IG1vdW50IGl0IG9yIHVzZSBpdCBpbiBhbnkgd2F5IGJlZm9yZSByZWJvb3RpbmcuIgorbXNnc3RyICIiCisiRXJyb3IgYWwgaW5mb3JtYXIgZWwgbvpjbGVvIHNvYnJlIGxhcyBtb2RpZmljYWNpb25lcyBlbiBsYSBwYXJ0aWNp824gJXMgLS0gJSIKKyJzLiAgRXN0byBzaWduaWZpY2EgcXVlIExpbnV4IG5vIHJlY29ub2NlcuEgbmluZ/puIGNhbWJpbyBxdWUgaGF5YSBoZWNobyBlbiAlIgorInMgaGFzdGEgcXVlIGxvIHJlaW5pY2llIC0tIHBvciBsbyB0YW50byBubyBwdWVkZSBtb250YXJsYSBvIHV0aWxpemFybGEgYW50ZXMgIgorImRlIHJlaW5pY2lhcmxhLiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoyMjYyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisicGFydGVkIHdhcyB1bmFibGUgdG8gcmUtcmVhZCB0aGUgcGFydGl0aW9uIHRhYmxlIG9uICVzICglcykuICBUaGlzIG1lYW5zICIKKyJMaW51eCB3b24ndCBrbm93IGFueXRoaW5nIGFib3V0IHRoZSBtb2RpZmljYXRpb25zIHlvdSBtYWRlLiAiCittc2dzdHIgIiIKKyJFbCBu+mNsZW8gbm8gcHVkbyByZWxlZXIgbGEgdGFibGEgZGUgcGFydGljaW9uZXMgZW4gJXMgKCVzKS4gIEVzdG8gc2lnbmlmaWNhICIKKyJxdWUgTGludXggbm8gcmVjb25vY2Vy4SBsYXMgbW9kaWZpY2FjaW9uZXMgcXVlIGhpem8uICBEZWJlIHJlaW5pY2lhcmxvIGFudGVzICIKKyJkZSBoYWNlciBjdWFscXVpZXIgdXNvIGNvbiAlcy4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MjM2OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGtlcm5lbCB3YXMgdW5hYmxlIHRvIHJlLXJlYWQgdGhlIHBhcnRpdGlvbiB0YWJsZSBvbiAlcyAoJXMpLiAgVGhpcyBtZWFucyAiCisiTGludXggd29uJ3Qga25vdyBhbnl0aGluZyBhYm91dCB0aGUgbW9kaWZpY2F0aW9ucyB5b3UgbWFkZSB1bnRpbCB5b3UgIgorInJlYm9vdC4gIFlvdSBzaG91bGQgcmVib290IHlvdXIgY29tcHV0ZXIgYmVmb3JlIGRvaW5nIGFueXRoaW5nIHdpdGggJXMuIgorbXNnc3RyICIiCisiRWwgbvpjbGVvIG5vIHB1ZG8gcmVsZWVyIGxhIHRhYmxhIGRlIHBhcnRpY2lvbmVzIGVuICVzICglcykuICBFc3RvIHNpZ25pZmljYSAiCisicXVlIExpbnV4IG5vIHJlY29ub2NlcuEgbGFzIG1vZGlmaWNhY2lvbmVzIHF1ZSBoaXpvLiAgRGViZSByZWluaWNpYXJsbyBhbnRlcyAiCisiZGUgaGFjZXIgY3VhbHF1aWVyIHVzbyBjb24gJXMuIgorCisjOiBsaWJwYXJ0ZWQvY3MvZ2VvbS5jOjE2MgorbXNnaWQgIkNhbid0IGhhdmUgdGhlIGVuZCBiZWZvcmUgdGhlIHN0YXJ0ISIKK21zZ3N0ciAioU5vIHNlIHB1ZWRlIHRlbmVyIGVsIGZpbmFsIGRlIGxhIHBhcnRpY2nzbiBhbnRlcyBkZWwgaW5pY2lvISIKKworIzogbGlicGFydGVkL2NzL2dlb20uYzoxNjkKK21zZ2lkICJDYW4ndCBoYXZlIGEgcGFydGl0aW9uIG91dHNpZGUgdGhlIGRpc2shIgorbXNnc3RyICKhTm8gc2UgcHVlZGUgaGFjZXIgdW5hIHBhcnRpY2nzbiBmdWVyYSBkZWwgZGlzY28hIgorCisjOiBsaWJwYXJ0ZWQvY3MvZ2VvbS5jOjM2NgorIywgYy1mb3JtYXQKK21zZ2lkICJBdHRlbXB0IHRvIHdyaXRlIHNlY3RvcnMgJWxkLSVsZCBvdXRzaWRlIG9mIHBhcnRpdGlvbiBvbiAlcy4iCittc2dzdHIgIiIKKyJTZSBpbnRlbnRhcm9uIGVzY3JpYmlyIGxvcyBzZWN0b3JlcyAlbGQtJWxkIGZ1ZXJhIGRlIGxhIHBhcnRpY2nzbiBlbiAlcy4iCisKKyM6IGxpYnBhcnRlZC9jcy9nZW9tLmM6NDA2IGxpYnBhcnRlZC9mcy9saW51eF9zd2FwL2xpbnV4X3N3YXAuYzo0NzUKK21zZ2lkICJjaGVja2luZyBmb3IgYmFkIGJsb2NrcyIKK21zZ3N0ciAiY29tcHJvYmFuZG8gYmxvcXVlcyBlcnJvbmVvcyIKKworIzogbGlicGFydGVkL2RlYnVnLmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkJhY2t0cmFjZSBoYXMgJWQgY2FsbHMgb24gc3RhY2s6XG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2RlYnVnLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkFzc2VydGlvbiAoJXMpIGF0ICVzOiVkIGluIGZ1bmN0aW9uICVzKCkgZmFpbGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIwMworIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gb3BlbiAlcyAtIHVucmVjb2duaXNlZCBkaXNrIGxhYmVsLiIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgYWJyaXIgJXMgLSBldGlxdWV0YSBkZSBkaXNjbyBkZXNjb25vY2lkYS4iCisKKyMgcGFyYSBz82xvIGxlY3R1cmEuCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjQ3MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhpcyBsaWJwYXJ0ZWQgZG9lc24ndCBoYXZlIHdyaXRlIHN1cHBvcnQgZm9yICVzLiAgUGVyaGFwcyBpdCB3YXMgY29tcGlsZWQgIgorInJlYWQtb25seS4iCittc2dzdHIgIiIKKyJFc3RhIGxpYnBhcnRlZCBubyB0aWVuZSBzb3BvcnRlIHBhcmEgZXNjcml0dXJhIGVuICVzLiAgUXVpeuFzIGZ1ZSBjb21waWxhZGEgIgorInBhcmEgc/NsbyBsZWN0dXJhLiIKKworIzogbGlicGFydGVkL2Rpc2suYzo1OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGFydGl0aW9uICVkIGlzICVzLCBidXQgdGhlIGZpbGUgc3lzdGVtIGlzICVzLiIKK21zZ3N0ciAiTGEgcGFydGljafNuICVkIGVzICVzLCBwZXJvIGVsIHNpc3RlbWEgZGUgZmljaGVyb3MgZXMgZGUgJXMuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjEwNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZGlzayBsYWJlbHMgZG8gbm90IHN1cHBvcnQgZXh0ZW5kZWQgcGFydGl0aW9ucy4iCittc2dzdHIgIkxhcyBldGlxdWV0YXMgZGUgZGlzY28gZGUgJXMgbm8gc29wb3J0YW4gcGFydGljaW9uZXMgZXh0ZW5kaWRhcy4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTYzNAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkaXNrIGxhYmVscyBkb24ndCBzdXBwb3J0IGxvZ2ljYWwgb3IgZXh0ZW5kZWQgcGFydGl0aW9ucy4iCittc2dzdHIgIiIKKyJMYXMgZXRpcXVldGFzIGRlIGRpc2NvICVzIG5vIHNvcG9ydGFuIHBhcnRpY2lvbmVzIGV4dGVuZGlkYXMgbyBs82dpY2FzLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNjQ3Cittc2dpZCAiVG9vIG1hbnkgcHJpbWFyeSBwYXJ0aXRpb25zLiIKK21zZ3N0ciAiRGVtYXNpYWRhcyBwYXJ0aWNpb25lcyBwcmltYXJpYXMuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE2NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbid0IGFkZCBhIGxvZ2ljYWwgcGFydGl0aW9uIHRvICVzLCBiZWNhdXNlIHRoZXJlIGlzIG5vIGV4dGVuZGVkIHBhcnRpdGlvbi4iCittc2dzdHIgIiIKKyJObyBzZSBwdWVkZSBh8WFkaXIgdW5hIHBhcnRpY2nzbiBs82dpY2EgZW4gJXMsIHBvcnF1ZSBubyBoYXkgdW5hIHBhcnRpY2nzbiAiCisiZXh0ZW5kaWRhLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbid0IGhhdmUgbW9yZSB0aGFuIG9uZSBleHRlbmRlZCBwYXJ0aXRpb24gb24gJXMuIgorbXNnc3RyICJObyBzZSBwdWVkZSB0ZW5lciBt4XMgZGUgdW5hIHBhcnRpY2nzbiBleHRlbmRpZGEgZW4gJXMuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE2OTAKK21zZ2lkICJDYW4ndCBoYXZlIGxvZ2ljYWwgcGFydGl0aW9ucyBvdXRzaWRlIG9mIHRoZSBleHRlbmRlZCBwYXJ0aXRpb24uIgorbXNnc3RyICIiCisiTm8gc2UgcHVlZGUgdGVuZXIgdW5hIHBhcnRpY2nzbiBs82dpY2EgZnVlcmEgZGUgbGEgcGFydGljafNuIGV4dGVuZGlkYS4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTcxNQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW4ndCBoYXZlIGEgbG9naWNhbCBwYXJ0aXRpb24gb3V0c2lkZSBvZiB0aGUgZXh0ZW5kZWQgcGFydGl0aW9uIG9uICVzLiIKK21zZ3N0ciAiIgorIk5vIHNlIHB1ZWRlIHRlbmVyIHVuYSBwYXJ0aWNp824gbPNnaWNhIGZ1ZXJhIGRlIGxhIHBhcnRpY2nzbiBleHRlbmRpZGEgZW4gJXMuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE3MjUgbGlicGFydGVkL2Rpc2suYzoxNzc5IGxpYnBhcnRlZC9kaXNrLmM6MTk0NQorbXNnaWQgIkNhbid0IGhhdmUgb3ZlcmxhcHBpbmcgcGFydGl0aW9ucy4iCittc2dzdHIgIk5vIHNlIHB1ZWRlIHRlbmVyIHBhcnRpY2lvbmVzIHN1cGVycHVlc3Rhcy4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTczMworbXNnaWQgIkNhbid0IGhhdmUgYSBwcmltYXJ5IHBhcnRpdGlvbiBpbnNpZGUgYW4gZXh0ZW5kZWQgcGFydGl0aW9uLiIKK21zZ3N0ciAiIgorIk5vIHNlIHB1ZWRlIHRlbmVyIHVuYSBwYXJ0aWNp824gcHJpbWFyaWEgZGVudHJvIGRlIHVuYSBwYXJ0aWNp824gZXh0ZW5kaWRhLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTQwCittc2dpZCAibWV0YWRhdGEiCittc2dzdHIgIm1ldGFkYXRhIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNDIKK21zZ2lkICJmcmVlIgorbXNnc3RyICJsaWJyZSIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTQ0IHBhcnRlZC91aS5jOjExNjkgcGFydGVkL3VpLmM6MTE5NworbXNnaWQgImV4dGVuZGVkIgorbXNnc3RyICJleHRlbmRpZGEiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE0NiBwYXJ0ZWQvdWkuYzoxMTczIHBhcnRlZC91aS5jOjEyMDEKK21zZ2lkICJsb2dpY2FsIgorbXNnc3RyICJs82dpY2EiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE0OCBwYXJ0ZWQvdWkuYzoxMTY1IHBhcnRlZC91aS5jOjExOTMKK21zZ2lkICJwcmltYXJ5IgorbXNnc3RyICJwcmltYXJpYSIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTY0Cittc2dpZCAiYm9vdCIKK21zZ3N0ciAiYXJyYW5xdWUiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE2NgorbXNnaWQgInJvb3QiCittc2dzdHIgInJh7XoiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE2OAorbXNnaWQgInN3YXAiCittc2dzdHIgInN3YXAiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE3MAorbXNnaWQgImhpZGRlbiIKK21zZ3N0ciAib2N1bHRhIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNzIKK21zZ2lkICJyYWlkIgorbXNnc3RyICJyYWlkIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNzQKK21zZ2lkICJsdm0iCittc2dzdHIgImx2bSIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTc2Cittc2dpZCAibGJhIgorbXNnc3RyICJsYmEiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE3OAorbXNnaWQgImhwLXNlcnZpY2UiCittc2dzdHIgInV0aWxpZGFkLWhwIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxODAKK21zZ2lkICJwYWxvIgorbXNnc3RyICJwYWxvIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxODIKK21zZ2lkICJwcmVwIgorbXNnc3RyICJwcmVwIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxODQKK21zZ2lkICJtc2Z0cmVzIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE5MAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIHBhcnRpdGlvbiBmbGFnLCAlZC4iCittc2dzdHIgIk1vZGlmaWNhZG9yIGRlIHBhcnRpY2lvbmVzIGRlc2Nvbm9jaWRvLCAlZC4iCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo3OAorbXNnaWQgIkluZm9ybWF0aW9uIgorbXNnc3RyICJJbmZvcm1hY2nzbiIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjc5Cittc2dpZCAiV2FybmluZyIKK21zZ3N0ciAiQXZpc28iCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4MAorbXNnaWQgIkVycm9yIgorbXNnc3RyICJFcnJvciIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjgxCittc2dpZCAiRmF0YWwiCittc2dzdHIgIkZhdGFsIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODIKK21zZ2lkICJCdWciCittc2dzdHIgIkJpY2hvIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODMKK21zZ2lkICJObyBJbXBsZW1lbnRhdGlvbiIKK21zZ3N0ciAiU2luIEltcGxlbWVudGFjafNuIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODcKK21zZ2lkICJGaXgiCittc2dzdHIgIkFycmVnbGFyIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODgKK21zZ2lkICJZZXMiCittc2dzdHIgIlPtIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODkKK21zZ2lkICJObyIKK21zZ3N0ciAiTm8iCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo5MAorbXNnaWQgIk9LIgorbXNnc3RyICJEZSBhY3VlcmRvIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6OTEKK21zZ2lkICJSZXRyeSIKK21zZ3N0ciAiUmVpbnRlbnRhciIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjkyCittc2dpZCAiSWdub3JlIgorbXNnc3RyICJEZXNjYXJ0YXIiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo5MworbXNnaWQgIkNhbmNlbCIKK21zZ3N0ciAiQ2FuY2VsYXIiCisKKyMgYmljaG8gOi0pCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6MTMzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiQSBidWcgaGFzIGJlZW4gZGV0ZWN0ZWQgaW4gR05VIFBhcnRlZC4gIFJlZmVyIHRvIHRoZSB3ZWIgc2l0ZSBvZiBwYXJ0ZWQgIgorImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9wYXJ0ZWQvcGFydGVkLmh0bWwgZm9yIG1vcmUgaW5mb3JtYXRpb25zIG9mIHdoYXQgIgorImNvdWxkIGJlIHVzZWZ1bCBmb3IgYnVnIHN1Ym1pdHRpbmchICBQbGVhc2UgZW1haWwgYSBidWcgcmVwb3J0IHRvIGJ1Zy0iCisicGFydGVkQGdudS5vcmcgY29udGFpbmluZyBhdCBsZWFzdCB0aGUgdmVyc2lvbiAoJXMpIGFuZCB0aGUgZm9sbG93aW5nICIKKyJtZXNzYWdlOiAgIgorbXNnc3RyICIiCisiU2kgZGV0ZWN08yB1biBiaWNobyBlbiBHTlUgcGFydGVkLiBQb3IgZmF2b3IsIGVudu1lIHVuIGluZm9ybWUgZGVsIGJpY2hvIGEgIgorImJ1Zy1wYXJ0ZWRAZ251Lm9yZyBjb250ZW5pZW5kbyBsYSB2ZXJzafNuICglcykgeSBlbCBtZW5zYWplIHNpZ3VpZW50ZToiCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6Mzg0Cittc2dpZCAiQ291bGQgbm90IGRldGVjdCBmaWxlIHN5c3RlbS4iCittc2dzdHIgIk5vIHNlIHB1ZWRlIGRldGVjdGFyIGVsIHNpc3RlbWEgZGUgZmljaGVyb3MuIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjM5NQorbXNnaWQgIlRoZSBmaWxlIHN5c3RlbSBpcyBiaWdnZXIgdGhhbiBpdHMgdm9sdW1lISIKK21zZ3N0ciAioUVsIHNpc3RlbWEgZGUgZmljaGVyb3MgZXMgbeFzIGdyYW5kZSBxdWUgc3Ugdm9sdW1lbiEiCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NDAzCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnQgZm9yIG9wZW5pbmcgJXMgZmlsZSBzeXN0ZW1zIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICIiCisiRWwgc29wb3J0ZSBwYXJhIGFicmlyIGVsIHNpc3RlbWEgZGUgZmljaGVyb3MgJXMgYfpuIG5vIGVzdOEgaW1wbGVtZW50YWRvLiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo0NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VwcG9ydCBmb3IgY3JlYXRpbmcgJXMgZmlsZSBzeXN0ZW1zIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICIiCisiRWwgc29wb3J0ZSBwYXJhIGNyZWFyIGVsIHNpc3RlbWEgZGUgZmljaGVyb3MgJXMgYfpuIG5vIGVzdOEgaW1wbGVtZW50YWRvLiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo1MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VwcG9ydCBmb3IgY2hlY2tpbmcgJXMgZmlsZSBzeXN0ZW1zIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICIiCisiRWwgc29wb3J0ZSBwYXJhIGNvbXByb2JhciBlbCBzaXN0ZW1hIGRlIGZpY2hlcm9zICVzIGH6biBubyBlc3ThIGltcGxlbWVudGFkby4iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NTcxCittc2dpZCAicmF3IGJsb2NrIGNvcHlpbmciCittc2dzdHIgImNvcGlhbmRvIGxvcyBibG9xdWUgZW4gYnJ1dG8iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NTgyCittc2dpZCAiZ3Jvd2luZyBmaWxlIHN5c3RlbSIKK21zZ3N0ciAic2lzdGVtYSBkZSBmaWNoZXJvcyBjcmVjaWVuZG8iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NjIyCittc2dpZCAiQ2FuJ3QgY29weSBvbnRvIGFuIG92ZXJsYXBwaW5nIHBhcnRpdGlvbi4iCittc2dzdHIgIk5vIHNlIHB1ZWRlIGNvcGlhciBzb2JyZSB1bmEgcGFydGljafNuIHN1cGVycHVlc3RhLiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo2NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkRpcmVjdCBzdXBwb3J0IGZvciBjb3B5aW5nIGZpbGUgc3lzdGVtcyBpcyBub3QgeWV0IGltcGxlbWVudGVkIGZvciAlcy4gICIKKyJIb3dldmVyLCBzdXBwb3J0IGZvciByZXNpemluZyBpcyBpbXBsZW1lbnRlZC4gIFRoZXJlZm9yZSwgdGhlIGZpbGUgc3lzdGVtICIKKyJjYW4gYmUgY29waWVkIGlmIHRoZSBuZXcgcGFydGl0aW9uIGlzIGF0IGxlYXN0IGFzIGJpZyBhcyB0aGUgb2xkIG9uZS4gIFNvLCAiCisiZWl0aGVyIHNocmluayB0aGUgcGFydGl0aW9uIHlvdSBhcmUgdHJ5aW5nIHRvIGNvcHksIG9yIGNvcHkgdG8gYSBiaWdnZXIgIgorInBhcnRpdGlvbi4iCittc2dzdHIgIiIKKyJFbCBzb3BvcnRlIGRpcmVjdG8gcGFyYSBjb3BpYXIgc2lzdGVtYXMgZGUgZmljaGVyb3MgYfpuIG5vIGVzdOEgaW1wbGVtZW50YWRvICIKKyJwYXJhICVzLiAgU2luIGVtYmFyZ28sIGVsIHNvcG9ydGUgcGFyYSByZWRpbWVuc2lvbmFyIGVzdOEgaW1wbGVtZW50YWRvLiAgUG9yICIKKyJsbyB0YW50bywgZWwgc2lzdGVtYSBkZSBmaWNoZXJvcyBzZSBwdWVkZSBjb3BpYXIgc2kgbGEgbnVldmEgcGFydGljafNuIGVzICIKKyJwb3IgbG8gbWVub3MgdGFuIGdyYW5kZSBjb21vIGxhIHZpZWphLiBBc+0sIG8gcmVkdWNlIGxhIHBhcnRpY2nzbiBxdWUgZXN04SAiCisiaW50ZW50YW5kbyBjb3BpYXIgbyBjb3BpZSBlbiB1bmEgcGFydGljafNuIG3hcyBncmFuZGUuIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjY1OAorIywgYy1mb3JtYXQKK21zZ2lkICJTdXBwb3J0IGZvciBjb3B5aW5nICVzIGZpbGUgc3lzdGVtcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiIgorIkVsIHNvcG9ydGUgcGFyYSBjb3BpYXIgZWwgc2lzdGVtYSBkZSBmaWNoZXJvcyAlcyBh+m4gbm8gZXN04SBpbXBsZW1lbnRhZG8uIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjY5NgorIywgYy1mb3JtYXQKK21zZ2lkICJTdXBwb3J0IGZvciByZXNpemluZyAlcyBmaWxlIHN5c3RlbXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiIKKyJFbCBzb3BvcnRlIHBhcmEgcmVkaW1lbnNpb25hciBlbCBzaXN0ZW1hIGRlIGZpY2hlcm9zICVzIGH6biBubyBlc3ThICIKKyJpbXBsZW1lbnRhZG8uIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzozMTUKK21zZ2lkICJjcmVhdGluZyIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0MDIKKyMsIGZ1enp5Cittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIGlzIGluIGFuIGludmFsaWQgc3RhdGUuICBQZXJoYXBzIGl0IGlzIG1vdW50ZWQ/IgorbXNnc3RyICKhRWwgc2lzdGVtYSBkZSBmaWNoZXJvcyBlcyBt4XMgZ3JhbmRlIHF1ZSBzdSB2b2x1bWVuISIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDEwCittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIGlzIGluIG9sZCAodW5yZXNpemVhYmxlKSBmb3JtYXQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQxNgorbXNnaWQgIkludmFsaWQgZnJlZSBibG9ja3MgY291bnQuICBSdW4gcmVpc2VyZnNjayAtLWNoZWNrIGZpcnN0LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0MzEKKyMsIGZ1enp5Cittc2dpZCAiY2hlY2tpbmciCittc2dzdHIgImNvbXByb2JhciIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDM3Cittc2dpZCAiUmVpc2VyZnMgdHJlZSBzZWVtcyB0byBiZSBjb3JydXB0ZWQuICBSdW4gcmVpc2VyZnNjayAtLWNoZWNrIGZpcnN0LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0NDkKKyMsIGZ1enp5Cittc2dpZCAiIgorIlRoZSByZWlzZXJmcyBmaWxlIHN5c3RlbSBwYXNzZWQgYSBiYXNpYyBjaGVjay4gIEZvciBhIG1vcmUgY29tcHJlaGVuc2l2ZSAiCisiY2hlY2ssIHJ1biByZWlzZXJmc2NrIC0tY2hlY2suIgorbXNnc3RyICIiCisiRWwgc2lzdGVtYSBkZSBmaWNoZXJvcyBleHQyIHBhc/MgdW5hIGNvbXByb2JhY2nzbiBi4XNpY2EuIFBhcmEgdW5hICIKKyJjb21wcm9iYWNp824gbeFzIGEgZm9uZG8sIHV0aWxpemUgZWwgcHJvZ3JhbWEgZTJmc2NrLiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDc0CisjLCBmdXp6eQorbXNnaWQgIlNvcnJ5LCBjYW4ndCBtb3ZlIHRoZSBzdGFydCBvZiByZWlzZXJmcyBwYXJ0aXRpb25zIHlldC4iCittc2dzdHIgIqFEaXNjdWxwZSwgYfpuIG5vIHNlIHB1ZWRlIG1vdmVyIGVsIHByaW5jaXBpbyBkZSBsYXMgcGFydGljaW9uZXMgZXh0MiEiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQ5MAorbXNnaWQgIkNvdWxkbid0IHJlb3BlbiBkZXZpY2UgYWJzdHJhY3Rpb24gbGF5ZXIgZm9yIHJlYWQvd3JpdGUuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjUwOCBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjU1MgorIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzoyNTAgbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo2MjkKK21zZ2lkICJzaHJpbmtpbmciCittc2dzdHIgImNvbnRyYXllbmRvIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo1MjAKKyMsIGZ1enp5Cittc2dpZCAiZXhwYW5kaW5nIgorbXNnc3RyICJBdmlzbyIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NTkyCittc2dpZCAiQ291bGRuJ3QgY3JlYXRlIHJlaXNlcmZzIGRldmljZSBhYnN0cmFjdGlvbiBoYW5kbGVyLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo2MDYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkRldmljZSBpcyB0b28gc21hbGwgZm9yICVsdSBibG9ja3MuIgorbXNnc3RyICJTaXN0ZW1hIGRlIGZpY2hlcm9zIGRlbWFzaWFkbyBwZXF1ZfFvIHBhcmEgZXh0Mi4iCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjYxNQorbXNnaWQgImNvcHlpbmciCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IHJlc29sdmUgc3ltYm9sICVzLiAgRXJyb3I6ICVzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo3MDQKK21zZ2lkICJHTlUgUGFydGVkIGZvdW5kIGFuIGludmFsaWQgbGlicmVpc2VyZnMgbGlicmFyeS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJHTlUgUGFydGVkIGhhcyBkZXRlY3RlZCBsaWJyZWlzZXJmcyBpbnRlcmZhY2UgdmVyc2lvbiBtaXNtYXRjaC4gIEZvdW5kICVkLSUiCisiZCwgcmVxdWlyZWQgJWQuIFJlaXNlckZTIHN1cHBvcnQgd2lsbCBiZSBkaXNhYmxlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9haXguYzoxMzcKKyMsIGZ1enp5Cittc2dpZCAiU3VwcG9ydCBmb3IgcmVhZGluZyBBSVggZGlzayBsYWJlbHMgaXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiIKKyJFbCBzb3BvcnRlIHBhcmEgY3JlYXIgZWwgc2lzdGVtYSBkZSBmaWNoZXJvcyAlcyBh+m4gbm8gZXN04SBpbXBsZW1lbnRhZG8uIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2FpeC5jOjE0OAorIywgZnV6enkKK21zZ2lkICJTdXBwb3J0IGZvciB3cml0aW5nIEFJWCBkaXNrIGxhYmVscyBpcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiIgorIkVsIHNvcG9ydGUgcGFyYSBjcmVhciBlbCBzaXN0ZW1hIGRlIGZpY2hlcm9zICVzIGH6biBubyBlc3ThIGltcGxlbWVudGFkby4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYWl4LmM6MTYxCisjLCBmdXp6eQorbXNnaWQgIiIKKyJTdXBwb3J0IGZvciBhZGRpbmcgcGFydGl0aW9ucyB0byBBSVggZGlzayBsYWJlbHMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiIKKyJFbCBzb3BvcnRlIHBhcmEgY3JlYXIgZWwgc2lzdGVtYSBkZSBmaWNoZXJvcyAlcyBh+m4gbm8gZXN04SBpbXBsZW1lbnRhZG8uIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2FpeC5jOjE3MQorIywgZnV6enkKK21zZ2lkICIiCisiU3VwcG9ydCBmb3IgZHVwbGljYXRpbmcgcGFydGl0aW9ucyBpbiBBSVggZGlzayBsYWJlbHMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiIKKyJFbCBzb3BvcnRlIHBhcmEgY3JlYXIgZWwgc2lzdGVtYSBkZSBmaWNoZXJvcyAlcyBh+m4gbm8gZXN04SBpbXBsZW1lbnRhZG8uIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2FpeC5jOjE4OQorIywgZnV6enkKK21zZ2lkICIiCisiU3VwcG9ydCBmb3Igc2V0dGluZyBzeXN0ZW0gdHlwZSBvZiBwYXJ0aXRpb25zIGluIEFJWCBkaXNrIGxhYmVscyBpcyBub3QgIgorImltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiIKKyJFbCBzb3BvcnRlIHBhcmEgY3JlYXIgZWwgc2lzdGVtYSBkZSBmaWNoZXJvcyAlcyBh+m4gbm8gZXN04SBpbXBsZW1lbnRhZG8uIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2FpeC5jOjE5OQorIywgZnV6enkKK21zZ2lkICJTdXBwb3J0IGZvciBzZXR0aW5nIGZsYWdzIGluIEFJWCBkaXNrIGxhYmVscyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiIgorIkVsIHNvcG9ydGUgcGFyYSBjcmVhciBlbCBzaXN0ZW1hIGRlIGZpY2hlcm9zICVzIGH6biBubyBlc3ThIGltcGxlbWVudGFkby4iCisKKyMgTm8gc2UgcHVlZGVuLCBjb24gTi4KKyMgbm8gcG9uZ2FzIGRvcyBlc3BhY2lvcyBzZWd1aWRvcworIzogbGlicGFydGVkL2xhYmVscy9ic2QuYzo1MDEgbGlicGFydGVkL2xhYmVscy9kYXNkLmM6NzU1CisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rvcy5jOjE5NzQgbGlicGFydGVkL2xhYmVscy9kdmguYzo3NzAKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6MTQ0OCBsaWJwYXJ0ZWQvbGFiZWxzL2xvb3AuYzoyNDgKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6MTQwOCBsaWJwYXJ0ZWQvbGFiZWxzL3BjOTguYzo3NTkKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6MTA0MSBsaWJwYXJ0ZWQvbGFiZWxzL3N1bi5jOjcwNQorbXNnaWQgIlVuYWJsZSB0byBzYXRpc2Z5IGFsbCBjb25zdHJhaW50cyBvbiB0aGUgcGFydGl0aW9uLiIKK21zZ3N0ciAiTm8gc2UgcHVlZGVuIHNhdGlzZmFjZXIgdG9kYXMgbGFzIHJlc3RyaWNjaW9uZXMgZW4gbGEgcGFydGljafNuLiIKKworIzogbGlicGFydGVkL2xhYmVscy9ic2QuYzo1MjYKK21zZ2lkICJVbmFibGUgdG8gYWxsb2NhdGUgYSBic2QgZGlza2xhYmVsIHNsb3QuIgorbXNnc3RyICJObyBzZSBwdWVkZSBhc2lnbmFyIHVuYSByYW51cmEgZGUgbGEgZXRpcXVldGEgZGUgZGlzY28gYnNkIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rhc2QuYzoxNjYKKyMsIGZ1enp5Cittc2dpZCAiVW5hYmxlIHRvIGRldGVybWluZSB0aGUgYmxvY2sgc2l6ZSBvZiB0aGlzIGRhc2QiCittc2dzdHIgIk5vIHNlIHB1ZWRlIGRldGVybWluYXIgZWwgdGFtYfFvIGRlICVzICglcykuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rhc2QuYzo3ODEKKyMsIGZ1enp5Cittc2dpZCAiVW5hYmxlIHRvIGFsbG9jYXRlIGEgZGFzZCBkaXNrbGFiZWwgc2xvdCIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgYXNpZ25hciB1bmEgcmFudXJhIGRlIGxhIGV0aXF1ZXRhIGRlIGRpc2NvIGJzZCIKKworIyB0ZSBkb3kgcGVybWlzbyBwYXJhIHBvbmVyIGluduFsaWRhCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rvcy5jOjgyNworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHBhcnRpdGlvbiB0YWJsZSBvbiAlcyAtLSB3cm9uZyBzaWduYXR1cmUgJXguIgorbXNnc3RyICJUYWJsYSBkZSBwYXJ0aWNpb25lcyBpbnbhbGlkYSBlbiAlcyAtLSBmaXJtYSBlcnLzbmVhICV4LiIKKworIzogbGlicGFydGVkL2xhYmVscy9kb3MuYzo4NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBwYXJ0aXRpb24gdGFibGUgLSByZWN1cnNpdmUgcGFydGl0aW9uIG9uICVzLiIKK21zZ3N0ciAiVGFibGEgZGUgcGFydGljaW9uZXMgaW524WxpZGEgLSBwYXJ0aWNp824gcmVjdXJzaXZhIGVuICVzLiIKKworIzogbGlicGFydGVkL2xhYmVscy9kb3MuYzoxMzE4Cittc2dpZCAiRXh0ZW5kZWQgcGFydGl0aW9ucyBjYW5ub3QgYmUgaGlkZGVuIG9uIG1zZG9zIGRpc2sgbGFiZWxzLiIKK21zZ3N0ciAiIgorIk5vIHB1ZWRlbiBlc2NvbmRlcnNlIHBhcnRpY2lvbmVzIGV4dGVuZGlkYXMgZW4gZXRpcXVldGFzIGRlIGRpc2NvIG1zZG9zLiIKKworIzogbGlicGFydGVkL2xhYmVscy9kb3MuYzoxOTU4Cittc2dpZCAiUGFydGVkIGNhbid0IHJlc2l6ZSBwYXJ0aXRpb25zIG1hbmFnZWQgYnkgV2luZG93cyBEeW5hbWljIERpc2suIgorbXNnc3RyICIiCisiUGFydGVkIG5vIHB1ZWRlIHJlZGltZW5zaW9uYXIgcGFydGljaW9uZXMgbWFuZWphZGFzIHBvciBXaW5kb3dzIER5bmFtaWMgRGlzay4iCisKKyMgdG8gaWdub3JlIG5vIGVzIGlnbm9yYXIsIGVzIGRlc2NhcnRhciwgcGFzYXIgcG9yIGFsdG8sIGhhY2VyIGxhIHZpc3RhCisjIGdvcmRhLCBldGMuICBpbmdvcmFyIGVzIG5vIHNhYmVyLCB5IGVzbyBzZSBkaWNlICJub3QgdG8ga25vdyIuCisjIExhIHNlZ3VuZGEgYWNlcGNp824gZGUgaWdub3JhciAoc2Vn+m4gZWwgZGljY2lvbmFyaW8pIHRhbWJp6W4gZXMgcGFzYXIKKyMgcG9yIGFsdG8uIHZsbAorIyB2b2x1bWVuZXMgLT4gdm9s+m1lbmVzCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjE5MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIG5vIGV4dGVuZGVkIHBhcnRpdGlvbiAodm9sdW1lIGhlYWRlciBwYXJ0aXRpb24pLiIKK21zZ3N0ciAiIgorIiVzIG5vIHRpZW5lIHBhcnRpY2nzbiBleHRlbmRpZGEgKHBhcnRpY2nzbiBkZSBjYWJlY2VyYSBkZSB2b2x1bWVuKS4gIFNpIGxvICIKKyJkZXNjYXJ0YSwgdG9kb3Mgdm9s+m1lbmVzIGRlIGFycmFucXVlIHNlcuFuIGJvcnJhZG9zLiIKKworIyBzdW1hIGRlIGNvbXByb2JhY2nzbgorIzogbGlicGFydGVkL2xhYmVscy9kdmguYzozMTMKK21zZ2lkICJDaGVja3N1bSBpcyB3cm9uZywgaW5kaWNhdGluZyB0aGUgcGFydGl0aW9uIHRhYmxlIGlzIGNvcnJ1cHQuIgorbXNnc3RyICIiCisiTGEgc3VtYSBkZSBjb21wcm9iYWNp824gZXMgaW5jb3JyZWN0YSwgbG8gY3VhbCBpbmRpY2EgcXVlIGxhIHRhYmxhIGRlICIKKyJwYXJ0aWNpb25lcyBlc3ThIGNvcnJ1cHRhLiIKKworIzogbGlicGFydGVkL2xhYmVscy9kdmguYzo2MTYKK21zZ2lkICJPbmx5IHByaW1hcnkgcGFydGl0aW9ucyBjYW4gYmUgcm9vdCBwYXJ0aXRpb25zLiIKK21zZ3N0ciAiU/NsbyBsYXMgcGFydGljaW9uZXMgcHJpbWFyaWFzIHB1ZWRlbiBzZXIgcGFydGljaW9uZXMgcmHtei4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6NjMwCittc2dpZCAiT25seSBwcmltYXJ5IHBhcnRpdGlvbnMgY2FuIGJlIHN3YXAgcGFydGl0aW9ucy4iCittc2dzdHIgIlPzbG8gbGFzIHBhcnRpY2lvbmVzIHByaW1hcmlhcyBwdWVkZW4gc2VyIHBhcnRpY2lvbmVzIGRlIGludGVyY2FtYmlvLiIKKworIzogbGlicGFydGVkL2xhYmVscy9kdmguYzo2NDQKK21zZ2lkICJPbmx5IGxvZ2ljYWwgcGFydGl0aW9ucyBjYW4gYmUgYSBib290IGZpbGUuIgorbXNnc3RyICJT82xvIGxhcyBwYXJ0aWNpb25lcyBs82dpY2FzIHB1ZWRlbiBzZXIgdW4gZmljaGVybyBkZSBhcnJhbnF1ZS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6NzIxCittc2dpZCAiT25seSBsb2dpY2FsIHBhcnRpdGlvbnMgKGJvb3QgZmlsZXMpIGhhdmUgYSBuYW1lLiIKK21zZ3N0ciAiU/NsbyBsYXMgcGFydGljaW9uZXMgbPNnaWNhcyAoZmljaGVyb3MgZGUgYXJyYW5xdWUpIHRpZW5lbiB1biBub21icmUuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjgxMgorbXNnaWQgIlRvbyBtYW55IHByaW1hcnkgcGFydGl0aW9ucyIKK21zZ3N0ciAiRGVtYXNpYWRhcyBwYXJ0aWNpb25lcyBwcmltYXJpYXMiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIG9wZW4gZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHNlZWsgZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHJlYWQgZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMTMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyB3cml0ZSBlcnJvclxuIgorIiVzXG4iCittc2dzdHIgIiVzIGR1cmFudGUgbGEgZXNjcml0dXJhIGVuICVzIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBJT0NUTCBlcnJvclxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjExOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgQVBJIHZlcnNpb24gbWlzbWF0Y2hcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFVuc3VwcG9ydGVkIGRpc2sgdHlwZVxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgVW5zdXBwb3J0ZWQgZGlzayBmb3JtYXRcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMzAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBEaXNrIGluIHVzZVxuIgorIiVzXG4iCittc2dzdHIgIiVzICAlcyAgJXMiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIENvbmZpZyBmaWxlIHN5bnRheCBlcnJvclxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgVm9sdW1lIGxhYmVsIGlzIGNvcnJ1cHRlZC5cbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIGEgZGF0YSBzZXQgbmFtZSBpcyBjb3JydXB0ZWQuXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBzcGFjZSBhbGxvY2F0aW9uXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBkZXZpY2UgdmVyaWZpY2F0aW9uIGZhaWxlZFxuIgorIlRoZSBzcGVjaWZpZWQgZGV2aWNlIGlzIG5vdCBhIHZhbGlkIERBU0QgZGV2aWNlXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgRmF0YWwgZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6NDU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBjb250YWlucyBHUFQgc2lnbmF0dXJlcywgaW5kaWNhdGluZyB0aGF0IGl0IGhhcyBhIEdQVCB0YWJsZS4gIEhvd2V2ZXIsIGl0ICIKKyJkb2VzIG5vdCBoYXZlIGEgdmFsaWQgZmFrZSBtc2RvcyBwYXJ0aXRpb24gdGFibGUsIGFzIGl0IHNob3VsZC4gIFBlcmhhcHMgaXQgIgorIndhcyBjb3JydXB0ZWQgLS0gcG9zc2libHkgYnkgYSBwcm9ncmFtIHRoYXQgZG9lc24ndCB1bmRlcnN0YW5kIEdQVCBwYXJ0aXRpb24gIgorInRhYmxlcy4gIE9yIHBlcmhhcHMgeW91IGRlbGV0ZWQgdGhlIEdQVCB0YWJsZSwgYW5kIGFyZSBub3cgdXNpbmcgYW4gbXNkb3MgIgorInBhcnRpdGlvbiB0YWJsZS4gIElzIHRoaXMgYSBHUFQgcGFydGl0aW9uIHRhYmxlPyIKK21zZ3N0ciAiIgorIiVzIGNvbnRpZW5lIGZpcm1hcyBHUFQsIGxvIGN1YWwgaW5kaWNhIHF1ZSB0aWVuZSB1bmEgdGFibGEgR1BULiAgTm8gIgorIm9ic3RhbnRlLCBubyB0aWVuZSB1bmEgdGFibGEgZGUgcGFydGljaW9uZXMgbXNkb3MgZGUgaW1pdGFjafNuIHbhbGlkYSwgY29tbyAiCisiaGFicu1hIGRlIHNlci4gIFF1aXrhcyBlc3RhIGNvcnJ1cHRhIC0tIHBvc2libGVtZW50ZSBwb3IgdW4gcHJvZ3JhbWEgcXVlIG5vICIKKyJlcyBjYXBheiBkZSBlbnRlcmRlciBsYXMgdGFibGFzIGRlIHBhcnRpY2nzbiBHUFQuICBPIHF1aXrhcyBib3Jy8yBsYSB0YWJsYSAiCisiR1BUIHkgYWhvcmEgZXN04SB1c2FuZG8gdW5hIHRhYmxhIGRlIHBhcnRpY2lvbmVzIG1zZG9zLiAgv0VzIGVzdGEgdW5hIHRhYmxhICIKKyJkZSBwYXJ0aWNp824gR1BUPyIKKworIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzo2NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb3JtYXQgb2YgdGhlIEdQVCBwYXJ0aXRpb24gdGFibGUgaXMgdmVyc2lvbiAleCwgd2hpY2ggaXMgbmV3ZXIgdGhhbiAiCisid2hhdCBQYXJ0ZWQgY2FuIHJlY29nbmlzZS4gIFBsZWFzZSB0ZWxsIHVzISAgYnVnLXBhcnRlZEBnbnUub3JnIgorbXNnc3RyICIiCisiRWwgZm9ybWF0byBkZSBsYSB0YWJsYSBkZSBwYXJ0aWNpb25lcyBHUFQgZXMgbGEgdmVyc2nzbiAleCwgZWwgY3VhbCBlcyBt4XMgIgorIm51ZXZvIHF1ZSBsbyBxdWUgUGFydGVkIHB1ZWRlIHJlY29ub2Nlci4gIFBvciBmYXZvciwgZO1nYW5vc2xvIGEgYnVnLSIKKyJwYXJ0ZWRAZ251Lm9yZyIKKworIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzo2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vdCBhbGwgb2YgdGhlIHNwYWNlIGF2YWlsYWJsZSB0byAlcyBhcHBlYXJzIHRvIGJlIHVzZWQsIHlvdSBjYW4gZml4IHRoZSBHUFQgIgorInRvIHVzZSBhbGwgb2YgdGhlIHNwYWNlIChhbiBleHRyYSAlbGx1IGJsb2Nrcykgb3IgY29udGludWUgd2l0aCB0aGUgY3VycmVudCAiCisic2V0dGluZz8gIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6ODI3Cittc2dpZCAiIgorIlRoZSBiYWNrdXAgR1BUIHRhYmxlIGlzIG5vdCBhdCB0aGUgZW5kIG9mIHRoZSBkaXNrLCBhcyBpdCBzaG91bGQgYmUuICBUaGlzICIKKyJtaWdodCBtZWFuIHRoYXQgYW5vdGhlciBvcGVyYXRpbmcgc3lzdGVtIGJlbGlldmVzIHRoZSBkaXNrIGlzIHNtYWxsZXIuICBGaXgsICIKKyJieSBtb3ZpbmcgdGhlIGJhY2t1cCB0byB0aGUgZW5kIChhbmQgcmVtb3ZpbmcgdGhlIG9sZCBiYWNrdXApPyIKK21zZ3N0ciAiIgorIkxhIGNvcGlhIGRlIGxhIHRhYmxhIEdQVCBubyBlc3ThIGFsIGZpbmFsIGRpc2NvLCBjb21vIGRlYmVy7WEgc2VyLiAgRXN0byAiCisicXVpZXJlIGRlY2lyIHF1ZSBvdHJvIHNpc3RlbWEgb3BlcmF0aXZvIGNyZWUgcXVlIGVsIGRpc2NvIGVzIG3hcyBwZXF1ZfFvLiAgIgorIr9MbyBxdWllcmUgYXJyZWdsYXIgbW92aWVuZG8gbGEgY29waWEgYWwgZmluYWwgKHkgYm9ycmFuZG8gbGEgY29waWEgdmllamEpPyIKKworIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzo4NjIKK21zZ2lkICIiCisiVGhlIHByaW1hcnkgR1BUIHRhYmxlIGlzIGNvcnJ1cHQsIGJ1dCB0aGUgYmFja3VwIGFwcGVhcnMgT0ssIHNvIHRoYXQgd2lsbCBiZSAiCisidXNlZC4iCittc2dzdHIgIiIKKyJMYSB0YWJsYSBwcmltYXJpYSBHUFQgZXN04SBjb3JydXB0YSwgcGVybyBsYSBjb3BpYSBkZSByZXNwYWxkbyBwYXJlY2UgIgorImNvcnJlY3RhLCBwb3IgbG8gdGFudG8gc2UgdXNhcuEgZXN0YS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6ODcwCittc2dpZCAiIgorIkJvdGggdGhlIHByaW1hcnkgYW5kIGJhY2t1cCBHUFQgdGFibGVzIGFyZSBjb3JydXB0LiAgVHJ5IG1ha2luZyBhIGZyZXNoICIKKyJ0YWJsZSwgYW5kIHVzaW5nIFBhcnRlZCdzIHJlc2N1ZSBmZWF0dXJlIHRvIHJlY292ZXIgcGFydGl0aW9ucy4iCittc2dzdHIgIiIKKyJMYSB0YWJsYSBwcmltYXJpYSB5IGxhIGNvcGlhIGRlIHJlc3BhbGRvIEdQVCBlc3ThbiBjb3JydXB0YXMuICBJbnRlbnRlIGNyZWFyICIKKyJ1bmEgdGFibGEgYWN0dWFsaXphZGEsIHkgdXRpbGljZSBsYSBvcGNp824gZGUgcmVzY2F0ZSBkZSBQYXJ0ZWQgcGFyYSAiCisicmVjb25zdHJ1aXIgbGFzIHBhcnRpY2lvbmVzLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoxODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBzaWduYXR1cmUgJXggZm9yIE1hYyBkaXNrIGxhYmVscy4iCittc2dzdHIgIkZpcm1hIGluduFsaWRhICV4IHBhcmEgZXRpcXVldGFzIGRlIGRpc2NvcyBNYWMuIgorCisjIE1hcCBlcyBhc2lnbmFjafNuIG8gdGFibGEuIE1hcGEgZXMgdW4gYmFyYmFyaXNtby4KKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6MjI2Cittc2dpZCAiUGFydGl0aW9uIG1hcCBoYXMgbm8gcGFydGl0aW9uIG1hcCBlbnRyeSEiCittc2dzdHIgIiIKKyKhTGEgdGFibGEgZGUgcGFydGljaW9uZXMgbm8gdGllbmUgdW5hIGVudHJhZGEgZGUgbGEgdGFibGEgZGUgcGFydGljaW9uZXMhIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyB0b28gc21hbGwgZm9yIGEgTWFjIGRpc2sgbGFiZWwhIgorbXNnc3RyICKhJXMgZXMgZGVtYXNpYWRvIHBlcXVl8W8gcGFyYSB1bmEgZXRpcXVldGEgZGUgZGlzY28gTWFjISIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo1MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGFydGl0aW9uICVkIGhhcyBhbiBpbnZhbGlkIHNpZ25hdHVyZSAleC4iCittc2dzdHIgIkxhIHBhcnRpY2nzbiAlZCB0aWVuZSB1bmEgZmlybWEgaW524WxpZGEgJXguIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjU1MAorIywgYy1mb3JtYXQKK21zZ2lkICJQYXJ0aXRpb24gJWQgaGFzIGFuIGludmFsaWQgbGVuZ3RoIG9mIDAgYnl0ZXMhIgorbXNnc3RyICKhTGEgcGFydGljafNuICVkIHRpZW5lIHVuYSBsb25naXR1ZCBpbnbhbGlkYSBkZSAwIGJ5dGVzISIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo1ODAKK21zZ2lkICJUaGUgZGF0YSByZWdpb24gZG9lc24ndCBzdGFydCBhdCB0aGUgc3RhcnQgb2YgdGhlIHBhcnRpdGlvbi4iCittc2dzdHIgIkxhIHJlZ2nzbiBkZSBkYXRvcyBubyBlbXBpZXphIGFsIHByaW5jaXBpbyBkZSBsYSBwYXJ0aWNp824uIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjU5NworbXNnaWQgIlRoZSBib290IHJlZ2lvbiBkb2Vzbid0IHN0YXJ0IGF0IHRoZSBzdGFydCBvZiB0aGUgcGFydGl0aW9uLiIKK21zZ3N0ciAiTGEgcmVnafNuIGRlIGFycmFucXVlIG5vIGVtcGllemEgYWwgcHJpbmNpcGlvIGRlIGxhIHBhcnRpY2nzbi4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NjExCittc2dpZCAiVGhlIHBhcnRpdGlvbidzIGJvb3QgcmVnaW9uIGRvZXNuJ3Qgb2NjdXB5IHRoZSBlbnRpcmUgcGFydGl0aW9uLiIKK21zZ3N0ciAiTGEgcmVnafNuIGRlIGFycmFucXVlIGRlIGxhIHBhcnRpY2nzbiBubyBvY3VwYSB0b2RhIGxhIHBhcnRpY2nzbi4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NjIyCittc2dpZCAiVGhlIHBhcnRpdGlvbidzIGRhdGEgcmVnaW9uIGRvZXNuJ3Qgb2NjdXB5IHRoZSBlbnRpcmUgcGFydGl0aW9uLiIKK21zZ3N0ciAiTGEgcmVnafNuIGRlIGRhdG9zIGRlIGxhIHBhcnRpY2nzbiBubyBvY3VwYSB0b2RhIGxhIHBhcnRpY2nzbi4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6Njc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXZWlyZCBibG9jayBzaXplIG9uIGRldmljZSBkZXNjcmlwdG9yOiAlZCBieXRlcyBpcyBub3QgZGl2aXNpYmxlIGJ5IDUxMi4iCittc2dzdHIgIiIKKyJUYW1h8W8gZGUgYmxvcXVlIGV4dHJh8W8gZW4gZWwgZGVzY3JpcHRvciBkZWwgZGlzcG9zaXRpdm86ICVkIGJ5dGVzIG5vIGVzICIKKyJkaXZpc2libGUgcG9yIDUxMi4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6Njg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZHJpdmVyIGRlc2NyaXB0b3Igc2F5cyB0aGUgcGh5c2ljYWwgYmxvY2sgc2l6ZSBpcyAlZCBieXRlcywgYnV0IExpbnV4ICIKKyJzYXlzIGl0IGlzICVkIGJ5dGVzLiIKK21zZ3N0ciAiIgorIkVsIGRlc2NyaXB0b3IgZGVsIGNvbnRyb2xhZG9yIGRpY2UgcXVlIGVsIHRhbWHxbyBkZWwgYmxvcXVlIGbtc2ljbyBlcyBkZSAlZCAiCisiYnl0ZXMsIHBlcm8gTGludXggZGljZSBxdWUgZXMgZGUgJWQgYnl0ZXMuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjczNgorbXNnaWQgIk5vIHZhbGlkIHBhcnRpdGlvbiBtYXAgZm91bmQuIgorbXNnc3RyICJTZSBlbmNvbnRy8yB1bmEgdGFibGEgZGUgcGFydGljaW9uZXMgaW524WxpZGEuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjc5NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ29uZmxpY3RpbmcgcGFydGl0aW9uIG1hcCBlbnRyeSBzaXplcyEgIEVudHJ5IDEgc2F5cyBpdCBpcyAlZCwgYnV0IGVudHJ5ICVkICIKKyJzYXlzIGl0IGlzICVkISIKK21zZ3N0ciAiIgorIqFDb25mbGljdG8gZW4gZWwgdGFtYfFvIGRlIGxhIGVudHJhZGEgZGUgbGEgdGFibGEgZGUgcGFydGljaW9uZXMhIKFMYSAiCisiZW50cmFkYSAxIGRpY2UgcXVlIGVzICVkLCBwZXJvIGxhIGVudHJhZGEgJWQgZGljZSBxdWUgZXMgJWQhIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjgyMgorbXNnaWQgIldlaXJkISAgVGhlcmUgYXJlIDIgcGFydGl0aW9ucyBtYXAgZW50cmllcyEiCittc2dzdHIgIqFFeHRyYfFvISAgoUhheSAyIGVudHJhZGFzIGRlIHRhYmxhIGRlIHBhcnRpY2lvbmVzISIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoxMzQ3Cittc2dpZCAiIgorIkNoYW5naW5nIHRoZSBuYW1lIG9mIGEgcm9vdCBvciBzd2FwIHBhcnRpdGlvbiB3aWxsIHByZXZlbnQgTGludXggZnJvbSAiCisicmVjb2duaXNpbmcgaXQgYXMgc3VjaC4iCittc2dzdHIgIiIKKyJDYW1iaWFuZG8gZWwgbm9tYnJlIGRlIHVuYSBwYXJ0aWNp824gcmHteiBvIGRlIGludGVyY2FtYmlvIGltcGVkaXLhbiBhIExpbnV4ICIKKyJkZSByZWNvbm9jZWxhIGNvbW8gdGFsLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoxNDQzCittc2dpZCAiQ2FuJ3QgYWRkIGFub3RoZXIgcGFydGl0aW9uIC0tIHRoZSBwYXJ0aXRpb24gbWFwIGlzIHRvbyBzbWFsbCEiCittc2dzdHIgIiIKKyKhTm8gc2UgcHVlZGUgYfFhZGlyIG90cmEgcGFydGljafNuIC0tIGxhIHRhYmxhIGRlIGxhcyBwYXJ0aWNpb25lcyBlcyAiCisiZGVtYXNpYWRvIHBlcXVl8WEhIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3BjOTguYzozNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBwYXJ0aXRpb24gdGFibGUgb24gJXMuIgorbXNnc3RyICJUYWJsYSBkZSBwYXJ0aWNp824gaW524WxpZGEgZW4gJXMuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3BjOTguYzo0MDYgbGlicGFydGVkL2xhYmVscy9wYzk4LmM6NDg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQYXJ0aXRpb24gJWQgaXNuJ3QgYWxpZ25lZCB0byBjeWxpbmRlciBib3VuZGFyaWVzLiAgVGhpcyBpcyBzdGlsbCAiCisidW5zdXBwb3J0ZWQuIgorbXNnc3RyICIiCisiTGEgcGFydGljafNuICVkIG5vIGVzdOEgYWxpbmVhZGEgYSBsb3MgbO1taXRlcyBkZWwgY2lsaW5kcm8uICBOZWNlc2l0YSAiCisiYfFhZGlybGUgc29wb3J0ZS4iCisKKyMgTm8gc2UgcHVlZGUuCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3BjOTguYzo3OTEKK21zZ2lkICJDYW4ndCBhZGQgYW5vdGhlciBwYXJ0aXRpb24uIgorbXNnc3RyICJObyBzZSBwdWVkZSBh8WFkaXIgb3RyYSBwYXJ0aWNp824uIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjE2MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEJhZCBjaGVja3N1bSBvbiBibG9jayAlbGx1IG9mIHR5cGUgJXMuIgorbXNnc3RyICIlcyA6IFN1bWEgZGUgY29tcHJvYmFjafNuIG1hbGEgZW4gZWwgYmxvcXVlICVsbHUgZGUgdGlwbyAlcy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6NDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRGlkbid0IGZpbmQgcmRiIGJsb2NrLCBzaG91bGQgbmV2ZXIgaGFwcGVuLiIKK21zZ3N0ciAiJXMgOiBObyBzZSBlbmN1ZW50cmEgZWwgYmxvcXVlIHJkYiwgbnVuY2EgZGViZXLtYSBvY3VycmlyLiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo1ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBMb29wIGRldGVjdGVkIGF0IGJsb2NrICVkLiIKK21zZ3N0ciAiJXMgOiBCdWNsZSBkZXRlY3RhZG8gZW4gZWwgYmxvcXVlICVkLiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo2MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBUaGUgJXMgbGlzdCBzZWVtcyBiYWQgYXQgYmxvY2sgJXMuIgorbXNnc3RyICIlcyA6IExhIGxpc3RhICVzIHBhcmVjZSBtYWxhIGVuIGVsIGJsb3F1ZSAlcy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6Njg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGxpc3QgYmFkIGJsb2Nrcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo2OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gbGlzdCBwYXJ0aXRpb24gYmxvY2tzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjcwNQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBsaXN0IGZpbGUgc3lzdGVtIGJsb2Nrcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo3MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gbGlzdCBib290IGJsb2Nrcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo3NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHdyaXRlIHBhcnRpdGlvbiBibG9jayBhdCAlZC4iCittc2dzdHIgIkZhbGxvIGFsIGVzY3JpYmlyIGVsIGJsb3F1ZSBkZSBsYSBwYXJ0aWNp824gZW4gJWQuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjEwNjkKK21zZ2lkICJVbmFibGUgdG8gYWxsb2NhdGUgYSBwYXJ0aXRpb24gbnVtYmVyLiIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgYXNpZ25hciB1biBu+m1lcm8gZGUgcGFydGljafNuLiIKKworIzogbGlicGFydGVkL2xhYmVscy9zdW4uYzoxNDUKK21zZ2lkICJDb3JydXB0ZWQgU3VuIGRpc2sgbGFiZWwgZGV0ZWN0ZWQuIgorbXNnc3RyICJTZSBoYSBkZXRlY3RhZG8gdW5hIGV0aXF1ZXRhIGRlIGRpc2NvIFN1biBjb3JydXB0YS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6MjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZGlzayBDSFMgZ2VvbWV0cnkgKCVkLCVkLCVkKSByZXBvcnRlZCBieSB0aGUgb3BlcmF0aW5nIHN5c3RlbSBkb2VzIG5vdCAiCisibWF0Y2ggdGhlIGdlb21ldHJ5IHN0b3JlZCBvbiB0aGUgZGlzayBsYWJlbCAoJWQsJWQsJWQpLiIKK21zZ3N0ciAiIgorIkxhIGdlb21ldHLtYSBkZSBkaXNjbyBDSFMgKCVkLCVkLCVkKSBpbmZvcm1hZG8gcG9yIGVsIHNpc3RlbWEgb3BlcmF0aXZvIG5vICIKKyJwYXJlY2UgY29pbmNpZGlyIGNvbiBsYSBnZW9tZXRy7WEgZ3VhcmRhZGEgZW4gbGEgZXRpcXVldGEgZGUgZGlzY28gKCVkLCVkLCUiCisiZCkuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3N1bi5jOjI4OAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgZGlzayBsYWJlbCBkZXNjcmliZXMgYSBkaXNrIGJpZ2dlciB0aGFuICVzLiIKK21zZ3N0ciAiTGEgZXRpcXVldGEgZGUgZGlzY28gZGVzY3JpYmUgdW4gZGlzY28gbWF5b3IgcXVlICVzLiIKKworIzogbGlicGFydGVkL2xhYmVscy9zdW4uYzo0NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGRpc2sgaGFzICVkIGN5bGluZGVycywgd2hpY2ggaXMgZ3JlYXRlciB0aGFuIHRoZSBtYXhpbXVtIG9mIDY1NTM2LiIKK21zZ3N0ciAiRWwgZGlzY28gdGllbmUgJWQgY2lsaW5kcm9zIHF1ZSBzb24gbWF5b3JlcyBxdWUgZWwgbeF4aW1vIGRlIDY1NTM2LiIKKworIzogbGlicGFydGVkL2xhYmVscy9zdW4uYzo3MzcKK21zZ2lkICIiCisiVGhlIFdob2xlIERpc2sgcGFydGl0aW9uIGlzIHRoZSBvbmx5IGF2YWlsYWJsZSBvbmUgbGVmdC4gIEdlbmVyYWxseSwgaXQgaXMgIgorIm5vdCBhIGdvb2QgaWRlYSB0byBvdmVyd3JpdGUgdGhpcyBwYXJ0aXRpb24gd2l0aCBhIHJlYWwgb25lLiAgU29sYXJpcyBtYXkgIgorIm5vdCBiZSBhYmxlIHRvIGJvb3Qgd2l0aG91dCBpdCwgYW5kIFNJTE8gKHRoZSBzcGFyYyBib290IGxvYWRlcikgYXBwcmVjaWF0ZXMgIgorIml0IGFzIHdlbGwuIgorbXNnc3RyICIiCisiTGEgcGFydGljafNuIEVudGVyYSBkZWwgRGlzY28gZXMgbGEg+m5pY2EgcXVlIHF1ZWRhIGRpc3BvbmlibGUuICAiCisiR2VuZXJhbG1lbnRlLCBubyBlcyB1bmEgYnVlbmEgaWRlYSBzb2JyZXNjcmliaXIgZXN0YSBwYXJ0aWNp824gY29uIHVuYSAiCisidmVyZGFkZXJhLiBTb2xhcmlzIG5vIHNlIHB1ZWRlIGFycmFuY2FyIHNpbiBlbGxhLCB5IFNJTE8gKGVsIGNhcmdhZG9yIGRlICIKKyJhcnJhbnF1ZSBkZSBzcGFyYykgdGFtYmnpbiBsYSBhZ3JhZGVjZS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6NzUyCittc2dpZCAiU3VuIGRpc2sgbGFiZWwgaXMgZnVsbC4iCittc2dzdHIgIkxhIGV0aXF1ZXRhIGRlIGRpc2NvIFN1biBlc3ThIGxsZW5hLiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6MTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBvcGVuaW5nIGRldmljZSAnJXMnIGZhaWxlZC5cbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjE2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgc2Vla2luZyBkZXZpY2UgJyVzJyBmYWlsZWQuXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzoxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHdyaXRpbmcgdG8gZGV2aWNlICclcycgZmFpbGVkLFxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6MTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyByZWFkaW5nIGZyb20gZGV2aWNlICclcycgZmFpbGVkLlxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6MTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhdGFsIGVycm9yXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDE4Cittc2dpZCAiQ291bGQgbm90IHJlYWQgVlRPQyBsYWJlbHMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQyNAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIFZUT0MgRk1UMSBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0MzEKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBWVE9DIEZNVDQgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDM4Cittc2dpZCAiQ291bGQgbm90IHJlYWQgVlRPQyBGTVQ1IERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQ0NQorbXNnaWQgIkNvdWxkIG5vdCByZWFkIFZUT0MgRk1UNyBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0NjIKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgVlRPQyBsYWJlbHMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQ2OAorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBWVE9DIEZNVDEgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDc1Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIFZUT0MgRk1UNCBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0ODIKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgVlRPQyBGTVQ1IERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQ4OQorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBWVE9DIEZNVDcgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xpYnBhcnRlZC5jOjI5NiBsaWJwYXJ0ZWQvbGlicGFydGVkLmM6MzE2Cittc2dpZCAiT3V0IG9mIG1lbW9yeS4iCittc2dzdHIgIk5vIGhheSBtZW1vcmlhLiIKKworIzogbGlicGFydGVkL3VuaXQuYzoxMzkKK21zZ2lkICJDYW5ub3QgZ2V0IHVuaXQgc2l6ZSBmb3Igc3BlY2lhbCB1bml0ICdDT01QQUNUJy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL3VuaXQuYzozODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiXCIlc1wiIGhhcyBpbnZhbGlkIHN5bnRheCBmb3IgbG9jYXRpb25zLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvdW5pdC5jOjM5NAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgbWF4aW11bSBoZWFkIHZhbHVlIGlzICVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvdW5pdC5jOjQwMQorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgbWF4aW11bSBzZWN0b3IgdmFsdWUgaXMgJWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC91bml0LmM6NDEzIGxpYnBhcnRlZC91bml0LmM6NTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBsb2NhdGlvbiAlcyBpcyBvdXRzaWRlIG9mIHRoZSBkZXZpY2UgJXMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC91bml0LmM6NTI3Cittc2dpZCAiSW52YWxpZCBudW1iZXIuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hZmZzLmM6NjMgbGlicGFydGVkL2ZzL2FtaWdhL2FwZnMuYzo1NgorIzogbGlicGFydGVkL2ZzL2FtaWdhL2FzZnMuYzo3MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gYWxsb2NhdGUgcGFydGl0aW9uIGJsb2NrXG4iCittc2dzdHIgIkZhbGxvIGFsIGVzY3JpYmlyIGVsIGJsb3F1ZSBkZSBsYSBwYXJ0aWNp824gZW4gJWQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYWZmcy5jOjc4IGxpYnBhcnRlZC9mcy9hbWlnYS9hcGZzLmM6NzAKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hc2ZzLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gYWxsb2NhdGUgYmxvY2tcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYWZmcy5jOjgzIGxpYnBhcnRlZC9mcy9hbWlnYS9hcGZzLmM6NzUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogQ291bGRuJ3QgcmVhZCBib290IGJsb2NrICVsbHVcbiIKK21zZ3N0ciAiJXMgOiBCdWNsZSBkZXRlY3RhZG8gZW4gZWwgYmxvcXVlICVkLiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FmZnMuYzo5OSBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXBmcy5jOjg2CisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXNmcy5jOjkyIGxpYnBhcnRlZC9mcy9hbWlnYS9hc2ZzLmM6MTA2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyA6IENvdWxkbid0IHJlYWQgcm9vdCBibG9jayAlbGx1XG4iCittc2dzdHIgIiVzIDogQnVjbGUgZGV0ZWN0YWRvIGVuIGVsIGJsb3F1ZSAlZC4iCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jOjcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGFsbG9jYXRlIGlkIGxpc3QgZWxlbWVudFxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IENvdWxkbid0IHJlYWQgYmxvY2sgJWxsdVxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jOjIwMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBCYWQgY2hlY2tzdW0gb24gYmxvY2sgJWxsdSBvZiB0eXBlICVzXG4iCittc2dzdHIgIiVzIDogU3VtYSBkZSBjb21wcm9iYWNp824gbWFsYSBlbiBlbCBibG9xdWUgJWxsdSBkZSB0aXBvICVzLiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6MjEyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyA6IENvdWxkbid0IHdyaXRlIGJsb2NrICVkXG4iCittc2dzdHIgIiVzIDogQnVjbGUgZGV0ZWN0YWRvIGVuIGVsIGJsb3F1ZSAlZC4iCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jOjI3OAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBhbGxvY2F0ZSBkaXNrX3NwZWNpZmljIHJkYiBibG9ja1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jOjI4OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBEaWRuJ3QgZmluZCByZGIgYmxvY2ssIHNob3VsZCBuZXZlciBoYXBwZW5cbiIKK21zZ3N0ciAiJXMgOiBObyBzZSBlbmN1ZW50cmEgZWwgYmxvcXVlIHJkYiwgbnVuY2EgZGViZXLtYSBvY3VycmlyLiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6MzE4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byByZWFkIHBhcnRpdGlvbiBibG9jayAlbGx1XG4iCittc2dzdHIgIkZhbGxvIGFsIGVzY3JpYmlyIGVsIGJsb3F1ZSBkZSBsYSBwYXJ0aWNp824gZW4gJWQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6ODcgbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjExMgorbXNnaWQgIkluY29uc2lzdGVudCBncm91cCBkZXNjcmlwdG9ycyEiCittc2dzdHIgIqFEZXNjcmlwdG9yZXMgZGUgZ3J1cG8gaW5jb25zaXN0ZW50ZXMhIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6OTEgbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjExNgorbXNnaWQgIkZpbGUgc3lzdGVtIGZ1bGwhIgorbXNnc3RyICKhU2lzdGVtYSBkZSBmaWNoZXJvcyBsbGVubyEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo2ODYKK21zZ2lkICJJbnZhbGlkIHN1cGVyYmxvY2suICBBcmUgeW91IHN1cmUgdGhpcyBpcyBhbiBleHQyIGZpbGUgc3lzdGVtPyIKK21zZ3N0ciAiIgorIlN1cGVyYmxvcXVlIGluduFsaWRvLiAgv0VzdOEgc2VndXJvIGRlIHF1ZSBlc3RlIGVzIHVuIHNpc3RlbWEgZGUgZmljaGVyb3MgIgorImV4dDI/IgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6NzAwIGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NjU4Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGVycm9ycyEgIFlvdSBzaG91bGQgcnVuIGUyZnNjay4iCittc2dzdHIgIqFFbCBzaXN0ZW1hIGRlIGZpY2hlcm9zIHRpZW5lIGVycm9yZXMhICBEZWJlcu1hIGVqZWN1dGFyIGUyZnNjay4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo3MTEKK21zZ2lkICIiCisiRmlsZSBzeXN0ZW0gd2FzIG5vdCBjbGVhbmx5IHVubW91bnRlZCEgIFlvdSBzaG91bGQgcnVuIGUyZnNjay4gIE1vZGlmeWluZyBhbiAiCisidW5jbGVhbiBmaWxlIHN5c3RlbSBjb3VsZCBjYXVzZSBzZXZlcmUgY29ycnVwdGlvbi4iCittc2dzdHIgIiIKKyKhRWwgc2lzdGVtYSBkZSBmaWNoZXJvcyBubyBmdWUgZGVzbW9udGFkbyBsaW1waWFtZW50ZSEgIERlYmVy7WEgZWplY3V0YXIgIgorImUyZnNjay4gIE1vZGlmaWNhciB1biBzaXN0ZW1hIGRlIGZpY2hlcm9zIHN1Y2lvIHBvZHLtYSBjYXVzYXIgdW5hIGNvcnJ1cGNp824gIgorImdyYXZlLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjczMQorbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyBhbiBpbmNvbXBhdGlibGUgZmVhdHVyZSBlbmFibGVkLiIKK21zZ3N0ciAiRWwgc2lzdGVtYSBkZSBmaWNoZXJvcyB0aWVuZSBhY3RpdmFkYSB1bmEgY2FyYWN0ZXLtc3RpY2EgaW5jb21wYXRpYmxlLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjc0MgorbXNnaWQgIkVycm9yIGFsbG9jYXRpbmcgYnVmZmVyIGNhY2hlLiIKK21zZ3N0ciAiRXJyb3IgYXNpZ25hbmRvIGVzcGFjaW8gZW4gbGEgY2FjaOkgZGVsIGL6ZmVyLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9pbm9kZV9yZWxvY2F0b3IuYzoxMTQKK21zZ2lkICIiCisiRm91bmQgYW4gaW5vZGUgd2l0aCBhIGluY29ycmVjdCBsaW5rIGNvdW50LiAgQmV0dGVyIGdvIHJ1biBlMmZzY2sgZmlyc3QhIgorbXNnc3RyICIiCisiRW5jb250cmFkbyB1biBub2RvLWkgY29uIHVuYSBjdWVudGEgZGUgZW5sYWNlIGluY29ycmVjdGEuICChTWVqb3IgZWplY3V0YXIgIgorInByaW1lcm8gZTJmc2NrISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9pbm9kZV9yZWxvY2F0b3IuYzo0ODcKK21zZ2lkICJOb3QgZW5vdWdoIGZyZWUgaW5vZGVzISIKK21zZ3N0ciAioU5vIGhheSBzdWZpY2llbnRlcyBub2Rvcy1pIGxpYnJlcyEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6MjIzCittc2dpZCAiRmlsZSBzeXN0ZW0gaXMgdG9vIGZ1bGwgdG8gcmVtb3ZlIGEgZ3JvdXAhIgorbXNnc3RyICKhRWwgc2lzdGVtYSBkZSBmaWNoZXJvcyBlc3ThIGRlbWFzaWFkbyBvY3VwYWRvIHBhcmEgYm9ycmFyIHVuIGdydXBvISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzoyMzIKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgdG9vIG1hbnkgYWxsb2NhdGVkIGlub2RlcyB0byByZW1vdmUgYSBncm91cCEiCittc2dzdHIgIiIKKyKhRWwgc2lzdGVtYSBkZSBmaWNoZXJvcyB0aWVuZSBkZW1hc2lhZG9zIG5vZG9zLWkgYXNpZ25hZG9zIHBhcmEgYm9ycmFyIHVuICIKKyJncnVwbyEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NDkxCittc2dpZCAiYWRkaW5nIGdyb3VwcyIKK21zZ3N0ciAiYfFhZGllbmRvIGdydXBvcyIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo1MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBmaWxlIHN5c3RlbSBpcyB0b28gZnVsbCB0byByZXNpemUgaXQgdG8gJWkgYmxvY2tzLiAgU29ycnkuIgorbXNnc3RyICIiCisiU3Ugc2lzdGVtYSBkZSBmaWNoZXJvcyBlc3ThIGRlbWFzaWFkbyBsbGVubyBwYXJhIHJlZGltZW5zaW9uYXJsbyBhICVpICIKKyJibG9xdWVzLiAgRGlzY3VscGUuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjUzOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBmaWxlIHN5c3RlbSBoYXMgdG9vIG1hbnkgb2NjdXBpZWQgaW5vZGVzIHRvIHJlc2l6ZSBpdCB0byAlaSBibG9ja3MuICAiCisiU29ycnkuIgorbXNnc3RyICIiCisiU3Ugc2lzdGVtYSBkZSBmaWNoZXJvcyB0aWVuZSBkZW1hc2lhZG9zIG5vZG9zLWkgb2N1cGFkb3MgcGFyYSAiCisicmVkaW1lbnNpb25hcmxvIGEgJWkgYmxvcXVlcy4gIERpc2N1bHBlLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo2NjYKK21zZ2lkICJGaWxlIHN5c3RlbSB3YXMgbm90IGNsZWFubHkgdW5tb3VudGVkISAgWW91IHNob3VsZCBydW4gZTJmc2NrLiIKK21zZ3N0ciAiIgorIqFFbCBzaXN0ZW1hIGRlIGZpY2hlcm9zIG5vIGZ1ZSBkZXNtb250YWRvIGxpbXBpYW1lbnRlISAgRGViZXLtYSBlamVjdXRhciAiCisiZTJmc2NrLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo2NzUKK21zZ2lkICIiCisiVGhlIGZpbGUgc3lzdGVtIGhhcyB0aGUgJ2Rpcl9pbmRleCcgZmVhdHVyZSBlbmFibGVkLiAgUGFydGVkIGNhbiBvbmx5IHJlc2l6ZSAiCisidGhlIGZpbGUgc3lzdGVtIGlmIGl0IGRpc2FibGVzIHRoaXMgZmVhdHVyZS4gIFlvdSBjYW4gZW5hYmxlIGl0IGxhdGVyIGJ5ICIKKyJydW5uaW5nICd0dW5lMmZzIC1PIGRpcl9pbmRleCBERVZJQ0UnIGFuZCB0aGVuICdlMmZzY2sgLWZEIERFVklDRScuIgorbXNnc3RyICIiCisiRWwgc2lzdGVtYSBkZSBmaWNoZXJvcyB0aWVuZSBsYSBvcGNp824gJ2Rpcl9pbmRleCcgaGFiaWxpdGFkYS4gIFBhcnRlZCBz82xvICIKKyJwdWRlIHJlZGltZW5zaW9uYXIgZWwgc2lzdGVtYSBkZSBmaWNoZXJvcyBzaSBkZXNhY3RpdmEgZXN0YSBvcGNp824uICBQdWVkZSAiCisiaGFiaWxpdGFybGEgZGVzcHXpcyBlamVjdXRhbmRvICd0dW5lMmZzIC1PIGRpcl9pbmRleCBVTklEQUQnIHkgbHVlZ28gJ2UyZnNjayAiCisiLWZEIFVOSURBRCcuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjY5MQorbXNnaWQgIiIKKyJBIHJlc2l6ZSBvcGVyYXRpb24gb24gdGhpcyBmaWxlIHN5c3RlbSB3aWxsIHVzZSBFWFBFUklNRU5UQUwgY29kZVxuIgorInRoYXQgTUFZIENPUlJVUFQgaXQgKGFsdGhvdWdoIG5vIG9uZSBoYXMgcmVwb3J0ZWQgYW55IHN1Y2ggZGFtYWdlIHlldCkuXG4iCisiWW91IHNob3VsZCBhdCBsZWFzdCBiYWNrdXAgeW91ciBkYXRhIGZpcnN0LCBhbmQgcnVuICdlMmZzY2sgLWYnIGFmdGVyd2FyZHMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfYmxvY2tfcmVsb2NhdG9yLmM6MTk4Cittc2dpZCAiQ3Jvc3MtbGlua2VkIGJsb2NrcyBmb3VuZCEgIEJldHRlciBnbyBydW4gZTJmc2NrIGZpcnN0ISIKK21zZ3N0ciAiIgorIqFTZSBlbmNvbnRyYXJvbiBibG9xdWVzIGNvbiByZWZlcmVuY2lhIGNydXphZGEhICChTWVqb3IgZWplY3V0YXIgcHJpbWVybyAiCisiZTJmc2NrISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9ibG9ja19yZWxvY2F0b3IuYzo1MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmxvY2sgJWkgaGFzIG5vIHJlZmVyZW5jZT8gIFdlaXJkLiIKK21zZ3N0ciAiv0VsIGJsb3F1ZSAlaSBubyB0aWVuZSB1bmEgcmVmZXJlbmNpYT8gIEVzdHJh8W8uIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2Jsb2NrX3JlbG9jYXRvci5jOjczNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQmxvY2sgJWkgc2hvdWxkbid0IGhhdmUgYmVlbiBtYXJrZWQgKCVkLCAlZCkhIgorbXNnc3RyICKhRWwgYmxvcXVlICVpIG5vIGRlYmVy7WEgaGFiZXIgc2lkbyBtYXJjYWRvISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvaW50ZXJmYWNlLmM6MTg2Cittc2dpZCAiIgorIlRoZSBleHQyIGZpbGUgc3lzdGVtIHBhc3NlZCBhIGJhc2ljIGNoZWNrLiAgRm9yIGEgbW9yZSBjb21wcmVoZW5zaXZlIGNoZWNrLCAiCisidXNlIHRoZSBlMmZzY2sgcHJvZ3JhbS4iCittc2dzdHIgIiIKKyJFbCBzaXN0ZW1hIGRlIGZpY2hlcm9zIGV4dDIgcGFz8yB1bmEgY29tcHJvYmFjafNuIGLhc2ljYS4gUGFyYSB1bmEgIgorImNvbXByb2JhY2nzbiBt4XMgYSBmb25kbywgdXRpbGl6ZSBlbCBwcm9ncmFtYSBlMmZzY2suIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9pbnRlcmZhY2UuYzoyMDMKK21zZ2lkICJTb3JyeSwgY2FuJ3QgbW92ZSB0aGUgc3RhcnQgb2YgZXh0MiBwYXJ0aXRpb25zIHlldCEiCittc2dzdHIgIqFEaXNjdWxwZSwgYfpuIG5vIHNlIHB1ZWRlIG1vdmVyIGVsIHByaW5jaXBpbyBkZSBsYXMgcGFydGljaW9uZXMgZXh0MiEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfYnVmZmVyLmM6ODIKK21zZ2lkICJDb3VsZG4ndCBmbHVzaCBidWZmZXIgY2FjaGUhIgorbXNnc3RyICKhTm8gc2UgcHVkbyB2YWNpYXIgbGEgY2FjaOkgZGVsIGL6ZmVyISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9ta2ZzLmM6MTYyCittc2dpZCAid3JpdGluZyBwZXItZ3JvdXAgbWV0YWRhdGEiCittc2dzdHIgImVzY3JpYmllbmRvIG1ldGFkYXRvcyBwb3ItZ3J1cG8iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfbWtmcy5jOjU2NAorbXNnaWQgIkZpbGUgc3lzdGVtIHRvbyBzbWFsbCBmb3IgZXh0Mi4iCittc2dzdHIgIlNpc3RlbWEgZGUgZmljaGVyb3MgZGVtYXNpYWRvIHBlcXVl8W8gcGFyYSBleHQyLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jYWxjLmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgbmVlZCAlcyBvZiBmcmVlIGRpc2sgc3BhY2UgdG8gc2hyaW5rIHRoaXMgcGFydGl0aW9uIHRvIHRoaXMgc2l6ZS4gICIKKyJDdXJyZW50bHksIG9ubHkgJXMgaXMgZnJlZS4iCittc2dzdHIgIiIKKyJOZWNlc2l0YSAlcyBkZSBlc3BhY2lvIGRpc2NvIGxpYnJlIHBhcmEgcmVkdWNpciBlc3RhIHBhcnRpY2nzbiBhIGVzdGUgIgorInRhbWHxby4gQWN0dWFsbWVudGUsIHPzbG8gJXMgZXN04SBsaWJyZS4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY29udGV4dC5jOjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDbHVzdGVyIHN0YXJ0IGRlbHRhID0gJWQsIHdoaWNoIGlzIG5vdCBhIG11bHRpcGxlIG9mIHRoZSBjbHVzdGVyIHNpemUgJWQuIgorbXNnc3RyICIiCisiRWwgaW5pY2lvIGRlbHRhIGRlbCBjbHVzdGVyID0gJWQsIHF1ZSBubyBlcyB1biBt+mx0aXBsbyBkZWwgdGFtYfFvIGRlICIKKyJjbHVzdGVyICVkLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9mYXQuYzozMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGFydGl0aW9uIHRvbyBiaWcvc21hbGwgZm9yIGEgJXMgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICJQYXJ0aWNp824gZGVtYXNpYWRvIGdyYW5kZS9wZXF1ZfFhIHBhcmEgdW4gc2lzdGVtYSBkZSBmaWNoZXJvcyAlcy4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvZmF0LmM6NDc0Cittc2dpZCAiIgorIlRoZSBGQVRzIGRvbid0IG1hdGNoLiAgSWYgeW91IGRvbid0IGtub3cgd2hhdCB0aGlzIG1lYW5zLCB0aGVuIHNlbGVjdCAiCisiY2FuY2VsLCBydW4gc2NhbmRpc2sgb24gdGhlIGZpbGUgc3lzdGVtLCBhbmQgdGhlbiBjb21lIGJhY2suIgorbXNnc3RyICIiCisiTGFzIEZBVHMgbm8gc29uIGlndWFsZXMuICBTaSBubyBzYWJlIHF1ZSBzaWduaWZpY2EgZXN0bywgc2VsZWNjaW9uZSAiCisiY2FuY2VsYXIsIGVqZWN1dGUgc2NhbmRpc2sgZW4gZWwgc2lzdGVtYSBkZSBmaWNoZXJvcywgeSBkZXNwdelzIHZ1ZWx2YS4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvZmF0LmM6NTE0Cittc2dpZCAiVGhlcmUgYXJlIG5vIHBvc3NpYmxlIGNvbmZpZ3VyYXRpb25zIGZvciB0aGlzIEZBVCB0eXBlLiIKK21zZ3N0ciAiTm8gaGF5IGNvbmZpZ3VyYWNpb25lcyBwb3NpYmxlcyBwYXJhIGVzdGUgdGlwbyBkZSBGQVQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jOjUyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRmlsZSBzeXN0ZW0gZG9lc24ndCBoYXZlIGV4cGVjdGVkIHNpemVzIGZvciBXaW5kb3dzIHRvIGxpa2UgaXQuICBDbHVzdGVyICIKKyJzaXplIGlzICVkayAoJWRrIGV4cGVjdGVkKTsgbnVtYmVyIG9mIGNsdXN0ZXJzIGlzICVkICglZCBleHBlY3RlZCk7IHNpemUgb2YgIgorIkZBVHMgaXMgJWQgc2VjdG9ycyAoJWQgZXhwZWN0ZWQpLiIKK21zZ3N0ciAiIgorIkVsIHNpc3RlbWEgZGUgZmljaGVyb3Mgbm8gdGllbmUgbG9zIHRhbWHxb3MgZXNwZXJhZG9zIHBhcmEgcXVlIGxvcyB1dGlsaXplICIKKyJXaW5kb3dzLiAgRWwgdGFtYfFvIGRlbCBjbHVzdGVyIGVzICVkayAoc2UgZXNwZXJhYmEgJWRrKTsgZWwgbvptZXJvIGRlICIKKyJjbHVzdGVycyBlcyBkZSAlZCAoc2UgZXNwZXJhYmEgJWQpOyBlbCB0YW1h8W8gZGUgbGEgRkFUIGVzIGRlICVkIHNlY3RvcmVzICIKKyIoc2UgZXNwZXJhYmEgJWQpLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9mYXQuYzo1NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZpbGUgc3lzdGVtIGlzIHJlcG9ydGluZyB0aGUgZnJlZSBzcGFjZSBhcyAlZCBjbHVzdGVycywgbm90ICVkIGNsdXN0ZXJzLiIKK21zZ3N0ciAiIgorIkVsIHNpc3RlbWEgZGUgZmljaGVyb3MgZXN04SBpbmZvcm1hbmRvIHF1ZSBlbCBlc3BhY2lvIGxpYnJlIGRlIGNsdXN0ZXJzIGVzICIKKyJkZSAlZCwgbm8gZGUgJWQgY2x1c3RlcnMuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jOjg3NAorbXNnaWQgIiIKKyJHTlUgUGFydGVkIHdhcyBtaXNjb21waWxlZDogdGhlIEZBVCBib290IHNlY3RvciBzaG91bGQgYmUgNTEyIGJ5dGVzLiAgRkFUICIKKyJzdXBwb3J0IHdpbGwgYmUgZGlzYWJsZWQuIgorbXNnc3RyICIiCisiR05VIHBhcnRlZCBmdWUgbWFsIGNvbXBpbGFkbzogZWwgc2VjdG9yIGRlIGFycmFucXVlIEZBVCBkZWJlcu1hIHNlciBkZSA1MTIgIgorImJ5dGVzLiBFbCBzb3BvcnRlIGEgRkFUIHNlcuEgZGVzYWJpbGl0YWRvLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzoxNTkKK21zZ2lkICIiCisiVGhlcmUncyBub3QgZW5vdWdoIHJvb20gaW4gdGhlIHJvb3QgZGlyZWN0b3J5IGZvciBhbGwgb2YgdGhlIGZpbGVzLiAgRWl0aGVyICIKKyJjYW5jZWwsIG9yIGlnbm9yZSB0byBsb3NlIHRoZSBmaWxlcy4iCittc2dzdHIgIiIKKyJObyBoYXkgZXNwYWNpbyBzdWZpY2llbnRlIGVuIGVsIGRpcmVjdG9yaW8gcm9vdCBwYXJhIHRvZG9zIGxvcyBmaWNoZXJvcy4gICIKKyJQdWVkZSBjYW5jZWxhciBvIGRlc2NhcnRhciBwZXJkaWVuZG8gbG9zIGZpY2hlcm9zLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzozMDAKK21zZ2lkICJFcnJvciB3cml0aW5nIHRvIHRoZSByb290IGRpcmVjdG9yeS4iCittc2dzdHIgIkVycm9yIGFsIGVzY3JpYmlyIGVuIGVsIGRpcmVjdG9yaW8gcm9vdC4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NDg5Cittc2dpZCAiSWYgeW91IGxlYXZlIHlvdXIgZmlsZSBzeXN0ZW0gYXMgRkFUMTYsIHRoZW4geW91IHdpbGwgaGF2ZSBubyBwcm9ibGVtcy4iCittc2dzdHIgIiIKKyJTaSBkZWphIHN1IHNpc3RlbWEgZGUgZmljaGVyb3MgY29tbyBGQVQxNiwgZW50b25jZXMgbm8gdGVuZHLhIHByb2JsZW1hcy4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NDkyCittc2dpZCAiIgorIklmIHlvdSBjb252ZXJ0IHRvIEZBVDE2LCBhbmQgTVMgV2luZG93cyBpcyBpbnN0YWxsZWQgb24gdGhpcyBwYXJ0aXRpb24sIHRoZW4gIgorInlvdSBtdXN0IHJlLWluc3RhbGwgdGhlIE1TIFdpbmRvd3MgYm9vdCBsb2FkZXIuICBJZiB5b3Ugd2FudCB0byBkbyB0aGlzLCB5b3UgIgorInNob3VsZCBjb25zdWx0IHRoZSBQYXJ0ZWQgbWFudWFsIChvciB5b3VyIGRpc3RyaWJ1dGlvbidzIG1hbnVhbCkuIgorbXNnc3RyICIiCisiU2kgY29udmllcnRlIGEgRkFUMTYsIHkgTVMgV2luZG93cyBlc3ThIGluc3RhbGFkbyBlbiBlc2EgcGFydGljafNuLCBlbnRvbmNlcyAiCisiZGViZXLtYSByZS1pbnN0YWxhciBlbCBjYXJnYWRvciBkZSBhcnJhbnF1ZSBkZSBNUyBXaW5kb3dzLiAgU2kgcXVpZXJlIGhhY2VyICIKKyJlc3RvLCBkZWJlcu1hIGNvbnN1bHRhciBlbCBtYW51YWwgZGUgUGFydGVkIChvIGVsIG1hbnVhbCBkZSBzdSBkaXN0cmlidWNp824pLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1MDAKK21zZ2lkICIiCisiSWYgeW91IGxlYXZlIHlvdXIgZmlsZSBzeXN0ZW0gYXMgRkFUMzIsIHRoZW4geW91IHdpbGwgbm90IGludHJvZHVjZSBhbnkgbmV3ICIKKyJwcm9ibGVtcy4iCittc2dzdHIgIiIKKyJTaSBkZWphIHN1IHNpc3RlbWEgZGUgZmljaGVyb3MgY29tbyBGQVQzMiwgZW50b25jZXMgbm8gdGVuZHLhIG51ZXZvcyAiCisicHJvYmxlbWFzLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1MDQKK21zZ2lkICIiCisiSWYgeW91IGNvbnZlcnQgdG8gRkFUMzIsIGFuZCBNUyBXaW5kb3dzIGlzIGluc3RhbGxlZCBvbiB0aGlzIHBhcnRpdGlvbiwgdGhlbiAiCisieW91IG11c3QgcmUtaW5zdGFsbCB0aGUgTVMgV2luZG93cyBib290IGxvYWRlci4gIElmIHlvdSB3YW50IHRvIGRvIHRoaXMsIHlvdSAiCisic2hvdWxkIGNvbnN1bHQgdGhlIFBhcnRlZCBtYW51YWwgKG9yIHlvdXIgZGlzdHJpYnV0aW9uJ3MgbWFudWFsKS4gIEFsc28sICIKKyJjb252ZXJ0aW5nIHRvIEZBVDMyIHdpbGwgbWFrZSB0aGUgZmlsZSBzeXN0ZW0gdW5yZWFkYWJsZSBieSBNUyBET1MsIE1TICIKKyJXaW5kb3dzIDk1YSwgYW5kIE1TIFdpbmRvd3MgTlQuIgorbXNnc3RyICIiCisiU2kgY29udmllcnRlIGEgRkFUMzIsIHkgTVMgV2luZG93cyBlc3ThIGluc3RhbGFkbyBlbiBsYSBwYXJ0aWNp824sIHRpZW5lIHF1ZSAiCisicmUtaW5zdGFsYXIgZWwgY2FyZ2Fkb3IgZGUgYXJyYW5xdWUgZGUgTVMgV2luZG93cy4gU2kgcXVpZXJlIGhhY2VybG8sICIKKyJkZWJlcu1hIGNvbnN1bHRhciBlbCBtYW51YWwgZGUgUGFydGVkIChvIGVsIG1hbnVhbCBkZSBzdSBkaXN0cmlidWNp824pLiAiCisiVGFtYmnpbiwgbGEgY29udmVyc2nzbiBhIEZBVDMyIGhhcuEgaWxlZ2libGUgZWwgc2lzdGVtYSBkZSBmaWNoZXJvcyBwYXJhIE1TICIKKyJET1MsIE1TIFdpbmRvd3MgOTVhIHkgTVMgV2luZG93cyBOVC4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzICAlcyAgJXMiCittc2dzdHIgIiVzICAlcyAgJXMiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTE5Cittc2dpZCAiV291bGQgeW91IGxpa2UgdG8gdXNlIEZBVDMyPyIKK21zZ3N0ciAiv0xlIGd1c3Rhcu1hIHVzYXIgRkFUMzI/IgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjU1MCBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjU2NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyAgJXMiCittc2dzdHIgIiVzICAlcyIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1NTEKK21zZ2lkICIiCisiVGhlIGZpbGUgc3lzdGVtIGNhbiBvbmx5IGJlIHJlc2l6ZWQgdG8gdGhpcyBzaXplIGJ5IGNvbnZlcnRpbmcgdG8gRkFUMTYuIgorbXNnc3RyICIiCisiRWwgc2lzdGVtYSBkZSBmaWNoZXJvcyBz82xvIHB1ZWRlIHNlciByZWRpbWVuc2lvbmFkbyBhIGVzdGUgdGFtYfFvIHBhcmEgIgorImNvbnZlcnRpcmxvIGEgRkFUMTYuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjU2NworbXNnaWQgIiIKKyJUaGUgZmlsZSBzeXN0ZW0gY2FuIG9ubHkgYmUgcmVzaXplZCB0byB0aGlzIHNpemUgYnkgY29udmVydGluZyB0byBGQVQzMi4iCittc2dzdHIgIiIKKyJFbCBzaXN0ZW1hIGRlIGZpY2hlcm9zIHPzbG8gcHVlZGUgc2VyIHJlZGltZW5zaW9uYWRvIGEgZXN0ZSB0YW1h8W8gcGFyYSAiCisiY29udmVydGlybG8gYSBGQVQzMi4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTgwCittc2dpZCAiIgorIkdOVSBQYXJ0ZWQgY2Fubm90IHJlc2l6ZSB0aGlzIHBhcnRpdGlvbiB0byB0aGlzIHNpemUuICBXZSdyZSB3b3JraW5nIG9uIGl0ISIKK21zZ3N0ciAiIgorIkdOVSBQYXJ0ZWQgbm8gcHVlZGUgcmVkaW1lbnNpb25hciBlc3RhIHBhcnRpY2nzbiBhIGVzZSB0YW1h8W8uIKFFc3RhbW9zICIKKyJ0cmFiYWphbmRvIGVuIGVsbG8hIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo0OSBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo1NgorbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyBhbiBpbnZhbGlkIHNpZ25hdHVyZSBmb3IgYSBGQVQgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICIiCisiRWwgc2lzdGVtYSBkZSBmaWNoZXJvcyB0aWVuZSB1bmEgZmlybWEgaW524WxpZGEgcGFyYSB1biBzaXN0ZW1hIGRlIGZpY2hlcm9zICIKKyJGQVQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo2NAorbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyBhbiBpbnZhbGlkIHNlY3RvciBzaXplIGZvciBhIEZBVCBmaWxlIHN5c3RlbS4iCittc2dzdHIgIiIKKyJFbCBzaXN0ZW1hIGRlIGZpY2hlcm9zIHRpZW5lIHVuIHRhbWHxbyBkZSBzZWN0b3IgaW524WxpZG8gcGFyYSB1biBzaXN0ZW1hIGRlICIKKyJmaWNoZXJvcyBGQVQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo3MQorbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyBhbiBpbnZhbGlkIGNsdXN0ZXIgc2l6ZSBmb3IgYSBGQVQgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICIiCisiRWwgc2lzdGVtYSBkZSBmaWNoZXJvcyB0aWVuZSB1biB0YW1h8W8gZGUgY2x1c3RlciBpbnbhbGlkbyBwYXJhIHVuIHNpc3RlbWEgIgorImRlIGZpY2hlcm9zIEZBVC4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjc4Cittc2dpZCAiIgorIkZpbGUgc3lzdGVtIGhhcyBhbiBpbnZhbGlkIG51bWJlciBvZiByZXNlcnZlZCBzZWN0b3JzIGZvciBhIEZBVCBmaWxlIHN5c3RlbS4iCittc2dzdHIgIiIKKyJFbCBzaXN0ZW1hIGRlIGZpY2hlcm9zIHRpZW5lIHVuIG76bWVybyBpbnbhbGlkbyBkZSBzZWN0b3JlcyByZXNlcnZhZG9zIHBhcmEgIgorInVuIHNpc3RlbWEgZGUgZmljaGVyb3MgRkFULiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6ODUKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgYW4gaW52YWxpZCBudW1iZXIgb2YgRkFUcy4iCittc2dzdHIgIkVsIHNpc3RlbWEgZGUgZmljaGVyb3MgdGllbmUgdW4gbvptZXJvIGRlIEZBVFMgaW524WxpZG8uIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzoxMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgZmlsZSBzeXN0ZW0gaGFzIGEgbG9naWNhbCBzZWN0b3Igc2l6ZSBvZiAlZC4gIEdOVSBQYXJ0ZWQgaXMga25vd24gbm90ICIKKyJ0byB3b3JrIHByb3Blcmx5IHdpdGggc2VjdG9yIHNpemVzIG90aGVyIHRoYW4gNTEyIGJ5dGVzLiIKK21zZ3N0ciAiIgorIkVsIHNpc3RlbWEgZGUgZmljaGVyb3MgdGllbmUgZWwgdGFtYfFvIGRlbCBzZWN0b3IgbPNnaWNvIGRlICVkLiAgR05VIFBhcnRlZCAiCisiZXMgY29ub2NpZG8gcG9yIG5vIGZ1bmNpb25hciBhZGVjdWFkYW1lbnRlIGNvbiB0YW1h8W9zIGRlIHNlY3RvciBkaXN0aW50b3MgIgorImRlIDUxMiBieXRlcy4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjE2NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGUgc3lzdGVtJ3MgQ0hTIGdlb21ldHJ5IGlzICglZCwgJWQsICVkKSwgd2hpY2ggaXMgaW52YWxpZC4gIFRoZSAiCisicGFydGl0aW9uIHRhYmxlJ3MgQ0hTIGdlb21ldHJ5IGlzICglZCwgJWQsICVkKS4gIElmIHlvdSBzZWxlY3QgSWdub3JlLCB0aGUgIgorImZpbGUgc3lzdGVtJ3MgQ0hTIGdlb21ldHJ5IHdpbGwgYmUgbGVmdCB1bmNoYW5nZWQuICBJZiB5b3Ugc2VsZWN0IEZpeCwgdGhlICIKKyJmaWxlIHN5c3RlbSdzIENIUyBnZW9tZXRyeSB3aWxsIGJlIHNldCB0byBtYXRjaCB0aGUgcGFydGl0aW9uIHRhYmxlJ3MgQ0hTICIKKyJnZW9tZXRyeS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6MjEzCittc2dpZCAiRkFUIGJvb3Qgc2VjdG9yIHNheXMgbG9naWNhbCBzZWN0b3Igc2l6ZSBpcyAwLiAgVGhpcyBpcyB3ZWlyZC4gIgorbXNnc3RyICIiCisiRWwgc2VjdG9yIGRlIGFycmFucXVlIGRlIGxhIEZBVCBkaWNlIHF1ZSBlbCB0YW1h8W8gbPNnaWNvIGRlbCBzZWN0b3IgZXMgMC4gICIKKyJFc3RvIGVzIGV4dHJh8W8uICIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6MjE5Cittc2dpZCAiRkFUIGJvb3Qgc2VjdG9yIHNheXMgdGhlcmUgYXJlIG5vIEZBVCB0YWJsZXMuICBUaGlzIGlzIHdlaXJkLiAiCittc2dzdHIgIiIKKyJFbCBzZWN0b3IgZGUgYXJyYW5xdWUgZGUgbGEgRkFUIGRpY2UgcXVlIG5vIGhheSB0YWJsYXMgRkFULiAgRXN0byBlcyAiCisiZXh0cmHxby4gIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzoyMjUKK21zZ2lkICJGQVQgYm9vdCBzZWN0b3Igc2F5cyBjbHVzdGVycyBhcmUgMCBzZWN0b3JzLiAgVGhpcyBpcyB3ZWlyZC4gIgorbXNnc3RyICIiCisiRWwgc2VjdG9yIGRlIGFycmFucXVlIGRlIGxhIEZBVCBkaWNlIHF1ZSBsb3MgY2x1c3RlcnMgdGllbmVuIDAgc2VjdG9yZXMuICAiCisiRXN0byBlcyBleHRyYfFvLiAiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjIzNQorbXNnaWQgIkZpbGUgc3lzdGVtIGlzIEZBVDEyLCB3aGljaCBpcyB1bnN1cHBvcnRlZC4iCittc2dzdHIgIkVsIHNpc3RlbWEgZGUgZmljaGVyb3MgZXMgRkFUMTIsIGVsIGN14Wwgbm8gZXN04SBzb3BvcnRhZG8uIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo0MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBpbmZvcm1hdGlvbiBzZWN0b3IgaGFzIHRoZSB3cm9uZyBzaWduYXR1cmUgKCV4KS4gIFNlbGVjdCBjYW5jZWwgZm9yIG5vdywgIgorImFuZCBzZW5kIGluIGEgYnVnIHJlcG9ydC4gIElmIHlvdSdyZSBkZXNwZXJhdGUsIGl0J3MgcHJvYmFibHkgc2FmZSB0byBpZ25vcmUuIgorbXNnc3RyICIiCisiRWwgc2VjdG9yIGRlIGluZm9ybWFjafNuIHRpZW5lIHVuYSBmaXJtYSBlcnLzbmVhICgleCkuICBTZWxlY2Npb25lIGNhbmNlbGFyICIKKyJwb3IgYWhvcmEsIHkgbWFuZGUgdW4gaW5mb3JtZSBkZWwgZmFsbG8uIFNpIGVzdOEgZGVzZXNwZXJhZG8sIGVzIG3hcyBzZWd1cm8gIgorImRlc2NhcnRhci4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY291bnQuYzoxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIGRpcmVjdG9yeSBlbnRyeSBmb3IgJXM6IGZpcnN0IGNsdXN0ZXIgaXMgdGhlIGVuZCBvZiBmaWxlIG1hcmtlci4iCittc2dzdHIgIiIKKyJFbnRyYWRhIGRlIGRpcmVjdG9yaW8gaW5jb3JyZWN0YSBwYXJhICVzOiBlbCBwcmltZXIgY2x1c3RlciBlcyBlbCBmaW5hbCBkZSAiCisibGEgbWFyY2EgZGVsIGZpY2hlcm8uIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvdW50LmM6MTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJCYWQgRkFUOiB1bnRlcm1pbmF0ZWQgY2hhaW4gZm9yICVzLiAgWW91IHNob3VsZCBydW4gZG9zZnNjayBvciBzY2FuZGlzay4iCittc2dzdHIgIiIKKyJGQVQgaW5jb3JyZWN0YTogY2FkZW5hIG5vIHRlcm1pbmFkYSBwYXJhICVzLiAgRGViZXLtYSBlamVjdXRhciBkb3Nmc2NrIG8gIgorInNjYW5kaXNjay4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY291bnQuYzoxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkJhZCBGQVQ6IGNsdXN0ZXIgJWQgb3V0c2lkZSBmaWxlIHN5c3RlbSBpbiBjaGFpbiBmb3IgJXMuICBZb3Ugc2hvdWxkIHJ1biAiCisiZG9zZnNjayBvciBzY2FuZGlzay4iCittc2dzdHIgIiIKKyJGQVQgaW5jb3JyZWN0YTogZWwgY2x1c3RlciAlZCBlc3ThIGZ1ZXJhIGRlbCBzaXN0ZW1hIGRlIGZpY2hlcm9zIGVuIGxhICIKKyJjYWRlbmEgcGFyYSAlcy4gIERlYmVy7WEgZWplY3V0YXIgZG9zZnNjayBvIHNjYW5kaXNrLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb3VudC5jOjE4NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQmFkIEZBVDogY2x1c3RlciAlZCBpcyBjcm9zcy1saW5rZWQgZm9yICVzLiAgWW91IHNob3VsZCBydW4gZG9zZnNjayBvciAiCisic2NhbmRpc2suIgorbXNnc3RyICIiCisiRkFUIGluY29ycmVjdGE6IGVsIGNsdXN0ZXIgJWQgdGllbmUgZW5sYWNlcyBjcnV6YWRvcyBwYXJhICVzLiAgRGViZXLtYSAiCisiZWplY3V0YXIgZG9zZnNjayBvIHNjYW5kaXNjay4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY291bnQuYzoyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgJWRrLCBidXQgaXQgaGFzICVkIGNsdXN0ZXJzICglZGspLiIKK21zZ3N0ciAiJXMgZXMgJWRrLCBwZXJvIHRpZW5lICVkIGNsdXN0ZXJzICglZGspLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb3VudC5jOjI2NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGUgJXMgaXMgbWFya2VkIGFzIGEgc3lzdGVtIGZpbGUuICBUaGlzIG1lYW5zIG1vdmluZyBpdCBjb3VsZCBjYXVzZSAiCisic29tZSBwcm9ncmFtcyB0byBzdG9wIHdvcmtpbmcuIgorbXNnc3RyICIiCisiRWwgZmljaGVybyAlcyBlc3ThIG1hcmNhZG8gY29tbyB1biBmaWNoZXJvIGRlbCBzaXN0ZW1hLiAgRXN0byBxdWllcmUgZGVjaXIgIgorInF1ZSBzaSBsbyBtdWV2ZSBwdWVkZSBvY3VycmlyIHF1ZSBhbGd1bm9zIHByb2dyYW1hcyBubyBmdW5jaW9uZW4uIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3RhYmxlLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGQVQgJWQgbWVkaWEgJXggZG9lc24ndCBtYXRjaCB0aGUgYm9vdCBzZWN0b3IncyBtZWRpYSAleC4gIFlvdSBzaG91bGQgIgorInByb2JhYmx5IHJ1biBzY2FuZGlzay4iCittc2dzdHIgIiIKKyJMYSBGQVQgJWQgZGVsIG1lZGlvICV4IG5vIGNvaW5jaWRlIGNvbiBsb3Mgc2VjdG9yZXMgZGUgYXJyYW5xdWUgZGVsIG1lZGlvICUiCisieC4gIERlYmVy7WEsIHByb2JhYmxlbWVudGUsIGVqZWN1dGFyIHNjYW5kaXNrLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC90YWJsZS5jOjI2OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmF0X3RhYmxlX3NldDogY2x1c3RlciAlbGQgb3V0c2lkZSBmaWxlIHN5c3RlbSIKK21zZ3N0ciAiZmF0X3RhYmxlX3NldDogZWwgY2x1c3RlciAlbGQgZXN04SBmdWVyYSBkZWwgc2lzdGVtYSBkZSBmaWNoZXJvcyIKKworIzogbGlicGFydGVkL2ZzL2ZhdC90YWJsZS5jOjMwMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmF0X3RhYmxlX2dldDogY2x1c3RlciAlbGQgb3V0c2lkZSBmaWxlIHN5c3RlbSIKK21zZ3N0ciAiZmF0X3RhYmxlX2dldDogZWwgY2x1c3RlciAlbGQgZXN04SBmdWVyYSBkZWwgc2lzdGVtYSBkZSBmaWNoZXJvcyIKKworIzogbGlicGFydGVkL2ZzL2ZhdC90YWJsZS5jOjM0MworbXNnaWQgImZhdF90YWJsZV9hbGxvY19jbHVzdGVyOiBubyBmcmVlIGNsdXN0ZXJzIgorbXNnc3RyICJmYXRfdGFibGVfYWxsb2NfY2x1c3Rlcjogbm8gcXVlZGFuIGNsdXN0ZXJzIGxpYnJlcyIKKworIzogbGlicGFydGVkL2ZzL2xpbnV4X3N3YXAvbGludXhfc3dhcC5jOjI3NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVW5yZWNvZ25pc2VkIG9sZCBzdHlsZSBsaW51eCBzd2FwIHNpZ25hdHVyZSAnJTEwcycuIgorbXNnc3RyICJGaXJtYSBkZSBsYSBwYXJ0aWNp824gZGUgaW50ZXJjYW1iaW8gZGUgbGludXggJyUxMHMnIG5vIHJlY29ub2NpZGEuIgorCisjOiBsaWJwYXJ0ZWQvZnMvbGludXhfc3dhcC9saW51eF9zd2FwLmM6MzE4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVbnJlY29nbmlzZWQgbmV3IHN0eWxlIGxpbnV4IHN3YXAgc2lnbmF0dXJlICclMTBzJy4iCittc2dzdHIgIkZpcm1hIGRlIGxhIHBhcnRpY2nzbiBkZSBpbnRlcmNhbWJpbyBkZSBsaW51eCAnJTEwcycgbm8gcmVjb25vY2lkYS4iCisKKyM6IGxpYnBhcnRlZC9mcy9saW51eF9zd2FwL2xpbnV4X3N3YXAuYzozNTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVucmVjb2duaXNlZCBzd3N1c3AgbGludXggc3dhcCBzaWduYXR1cmUgJyU5cycuIgorbXNnc3RyICJGaXJtYSBkZSBsYSBwYXJ0aWNp824gZGUgaW50ZXJjYW1iaW8gZGUgbGludXggJyUxMHMnIG5vIHJlY29ub2NpZGEuIgorCisjOiBsaWJwYXJ0ZWQvZnMvbGludXhfc3dhcC9saW51eF9zd2FwLmM6NDM0Cittc2dpZCAiVG9vIG1hbnkgYmFkIHBhZ2VzLiIKK21zZ3N0ciAiRGVtYXNpYWRhcyBw4WdpbmFzIGluY29ycmVjdGFzLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9hZHZmcy5jOjEyMSBsaWJwYXJ0ZWQvZnMvaGZzL2FkdmZzX3BsdXMuYzoxMjIKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzo0MTQgbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjUwOAorIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NTM5IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjY1OAorIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NzcyCittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIGNvbnRhaW5zIGVycm9ycy4iCittc2dzdHIgIkVsIHNpc3RlbWEgZGUgZmljaGVyb3MgY29udGllbmUgZXJyb3Jlcy4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvYWR2ZnNfcGx1cy5jOjI4NworbXNnaWQgIkJhZCBibG9ja3MgY291bGQgbm90IGJlIHJlYWQuIgorbXNnc3RyICJObyBwdWVkZW4gbGVlcnNlIGxvcyBibG9xdWVzIGluY29ycmVjdG9zLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9jYWNoZS5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVHJ5aW5nIHRvIHJlZ2lzdGVyIGFuIGV4dGVudCBzdGFydGluZyBhdCBibG9jayAweCVYLCBidXQgYW5vdGhlciBvbmUgYWxyZWFkeSAiCisiZXhpc3RzIGF0IHRoaXMgcG9zaXRpb24uICBZb3Ugc2hvdWxkIGNoZWNrIHRoZSBmaWxlIHN5c3RlbSEiCittc2dzdHIgIiIKKyJJbnRlbnRhbmRvIHJlZ2lzdHJhciB1bmEgZXh0ZW5zafNuIHF1ZSBlbXBpZXphIGVuIGVsIGJsb3F1ZSAweCVYLCBwZXJvIHlhICIKKyJleGlzdGUgb3RyYSBlbiBlc3RhIHBvc2ljafNuLiAgoURlYmVy7WEgdmVyaWZpY2FyIGVsIHNpc3RlbWEgZGUgZmljaGVyb3MhIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2NhY2hlLmM6MjE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUcnlpbmcgdG8gbW92ZSBhbiBleHRlbnQgZnJvbSBibG9jayBPeCVYIHRvIGJsb2NrIE94JVgsIGJ1dCBhbm90aGVyIG9uZSAiCisiYWxyZWFkeSBleGlzdHMgYXQgdGhpcyBwb3NpdGlvbi4gIFRoaXMgc2hvdWxkIG5vdCBoYXBwZW4hIgorbXNnc3RyICIiCisiSW50ZW50YW5kbyBtb3ZlciB1bmEgZXh0ZW5zafNuIGRlc2RlIGVsIGJsb3F1ZSBPeCVYIHBhcmEgYmxvcXVlYXIgT3glWCwgcGVybyAiCisieWEgZXhpc3RlIG90cmEgZW4gZXN0YSBwb3NpY2nzbi4gIKFFc3RvIG5vIGRlYmVy7WEgcGFzYXIhIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGUuYzoxNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHVwZGF0ZSB0aGUgZXh0ZW50IGNhY2hlIGZvciBIRlMgZmlsZSB3aXRoIENOSUQgJVguIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZS5jOjE4MAorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgdG8gcmVhZCBIRlMgZmlsZSB3aXRoIENOSUQgJVggYmVoaW5kIEVPRi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlLmM6MTkwIGxpYnBhcnRlZC9mcy9oZnMvZmlsZS5jOjIyMAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCBzZWN0b3IgJWxsaSBvZiBIRlMgZmlsZSB3aXRoIENOSUQgJVguIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZS5jOjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgdG8gd3JpdGUgSEZTIGZpbGUgd2l0aCBDTklEICVYIGJlaGluZCBFT0YuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZV9wbHVzLmM6MTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB1cGRhdGUgdGhlIGV4dGVudCBjYWNoZSBmb3IgSEZTKyBmaWxlIHdpdGggQ05JRCAlWC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlX3BsdXMuYzoyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIHRvIHJlYWQgSEZTKyBmaWxlIHdpdGggQ05JRCAlWCBiZWhpbmQgRU9GLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGVfcGx1cy5jOjIxMyBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGVfcGx1cy5jOjI1NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCBzZWN0b3IgJWxsaSBvZiBIRlMrIGZpbGUgd2l0aCBDTklEICVYLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGVfcGx1cy5jOjI0NQorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgdG8gd3JpdGUgSEZTKyBmaWxlIHdpdGggQ05JRCAlWCBiZWhpbmQgRU9GLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjIzMgorbXNnaWQgIlNvcnJ5LCBIRlMgY2Fubm90IGJlIHJlc2l6ZWQgdGhhdCB3YXkgeWV0LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjI2MiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjY0MQorbXNnaWQgIkRhdGEgcmVsb2NhdGlvbiBoYXMgZmFpbGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjI4MQorbXNnaWQgIkRhdGEgcmVsb2NhdGlvbiBsZWZ0IHNvbWUgZGF0YSBpbiB0aGUgZW5kIG9mIHRoZSB2b2x1bWUuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MzIwCisjLCBmdXp6eQorbXNnaWQgIndyaXRpbmcgSEZTIE1hc3RlciBEaXJlY3RvcnkgQmxvY2siCittc2dzdHIgIkVycm9yIGFsIGVzY3JpYmlyIGVuIGVsIGRpcmVjdG9yaW8gcmHtei4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NDY4Cittc2dpZCAiTm8gdmFsaWQgSEZTWytYXSBzaWduYXR1cmUgaGFzIGJlZW4gZm91bmQgd2hpbGUgb3BlbmluZy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo0NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmVyc2lvbiAlZCBvZiBIRlMrIGlzbid0IHN1cHBvcnRlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo0ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmVyc2lvbiAlZCBvZiBIRlNYIGlzbid0IHN1cHBvcnRlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo2NzIKK21zZ2lkICJEYXRhIHJlbG9jYXRpb24gbGVmdCBzb21lIGRhdGEgYXQgdGhlIGVuZCBvZiB0aGUgdm9sdW1lLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjcyMAorIywgZnV6enkKK21zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRoZSBhbGxvY2F0aW9uIGZpbGUuIgorbXNnc3RyICJFcnJvciBhbCBlc2NyaWJpciBlbiBlbCBkaXJlY3RvcmlvIHJh7XouIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjczNQorbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdGhlIGNvbXBhdGliaWxpdHkgcGFydCBvZiB0aGUgYWxsb2NhdGlvbiBmaWxlLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjc1MAorbXNnaWQgIndyaXRpbmcgSEZTKyBWb2x1bWUgSGVhZGVyIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6ODUwCittc2dpZCAiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgbG9va2luZyBmb3IgdGhlIG1hbmRhdG9yeSBiYWQgYmxvY2tzIGZpbGUuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6OTA0Cittc2dpZCAiIgorIkl0IHNlZW1zIHRoZXJlIGlzIGFuIGVycm9yIGluIHRoZSBIRlMgd3JhcHBlcjogdGhlIGJhZCBibG9ja3MgZmlsZSBkb2Vzbid0ICIKKyJjb250YWluIHRoZSBlbWJlZGRlZCBIRlMrIHZvbHVtZS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo5NDAKK21zZ2lkICJTb3JyeSwgSEZTKyBjYW5ub3QgYmUgcmVzaXplZCB0aGF0IHdheSB5ZXQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6OTc1Cittc2dpZCAic2hyaW5raW5nIGVtYmVkZGVkIEhGUysgdm9sdW1lIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6OTkxCittc2dpZCAiUmVzaXppbmcgdGhlIEhGUysgdm9sdW1lIGhhcyBmYWlsZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6OTk4CisjLCBmdXp6eQorbXNnaWQgInNocmlua2luZyBIRlMgd3JhcHBlciIKK21zZ3N0ciAiY29udHJheWVuZG8iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MTAwNworbXNnaWQgIlVwZGF0aW5nIHRoZSBIRlMgd3JhcHBlciBoYXMgZmFpbGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjExMDkgbGlicGFydGVkL2ZzL2hmcy9oZnMuYzoxMTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGlzIGlzIG5vdCBhIHJlYWwgJXMgY2hlY2suICBUaGlzIGlzIGdvaW5nIHRvIGV4dHJhY3Qgc3BlY2lhbCBsb3cgbGV2ZWwgIgorImZpbGVzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjE1NQorbXNnaWQgIkJhZCBibG9jayBsaXN0IGhlYWRlciBjaGVja3N1bS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJbnZhbGlkIHNpemUgb2YgYSB0cmFuc2FjdGlvbiBibG9jayB3aGlsZSByZXBsYXlpbmcgdGhlIGpvdXJuYWwgKCVpIGJ5dGVzKS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MjYwCittc2dpZCAiIgorIkpvdXJuYWwgc3RvcmVkIG91dHNpZGUgb2YgdGhlIHZvbHVtZSBhcmUgbm90IHN1cHBvcnRlZC4gIFRyeSB0byBkZXNhY3RpdmF0ZSAiCisidGhlIGpvdXJuYWwgYW5kIHJ1biBQYXJ0ZWQgYWdhaW4uIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjI3MQorIywgZnV6enkKK21zZ2lkICJKb3VybmFsIG9mZnNldCBvciBzaXplIGlzIG5vdCBtdWx0aXBsZSBvZiB0aGUgc2VjdG9yIHNpemUuIgorbXNnc3RyICIiCisiRWwgaW5pY2lvIGRlbHRhIGRlbCBjbHVzdGVyID0gJWQsIHF1ZSBubyBlcyB1biBt+mx0aXBsbyBkZWwgdGFtYfFvIGRlICIKKyJjbHVzdGVyICVkLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MjkyCittc2dpZCAiSW5jb3JyZWN0IG1hZ2ljIHZhbHVlcyBpbiB0aGUgam91cm5hbCBoZWFkZXIuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjMwMgorbXNnaWQgIkpvdXJuYWwgc2l6ZSBtaXNtYXRjaCBiZXR3ZWVuIGpvdXJuYWwgaW5mbyBibG9jayBhbmQgam91cm5hbCBoZWFkZXIuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjMxNAorIywgZnV6enkKK21zZ2lkICJTb21lIGhlYWRlciBmaWVsZHMgYXJlIG5vdCBtdWx0aXBsZSBvZiB0aGUgc2VjdG9yIHNpemUuIgorbXNnc3RyICIiCisiRWwgaW5pY2lvIGRlbHRhIGRlbCBjbHVzdGVyID0gJWQsIHF1ZSBubyBlcyB1biBt+mx0aXBsbyBkZWwgdGFtYfFvIGRlICIKKyJjbHVzdGVyICVkLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MzIzCittc2dpZCAiIgorIlRoZSBzZWN0b3Igc2l6ZSBzdG9yZWQgaW4gdGhlIGpvdXJuYWwgaXMgbm90IDUxMiBieXRlcy4gIFBhcnRlZCBvbmx5ICIKKyJzdXBwb3J0cyA1MTIgYnl0ZXMgbGVuZ3RoIHNlY3RvcnMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjMzNQorbXNnaWQgIkJhZCBqb3VybmFsIGNoZWNrc3VtLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozNTMKK21zZ2lkICIiCisiVGhlIGpvdXJuYWwgaXMgbm90IGVtcHR5LiAgUGFydGVkIG11c3QgcmVwbGF5IHRoZSB0cmFuc2FjdGlvbnMgYmVmb3JlICIKKyJvcGVuaW5nIHRoZSBmaWxlIHN5c3RlbS4gIFRoaXMgd2lsbCBtb2RpZnkgdGhlIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozODEKK21zZ2lkICIiCisiVGhlIHZvbHVtZSBoZWFkZXIgb3IgdGhlIG1hc3RlciBkaXJlY3RvcnkgYmxvY2sgaGFzIGNoYW5nZWQgd2hpbGUgcmVwbGF5aW5nICIKKyJ0aGUgam91cm5hbC4gIFlvdSBzaG91bGQgcmVzdGFydCBQYXJ0ZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcHJvYmUuYzo1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGFydGVkIGNhbid0IHVzZSBIRlMgZmlsZSBzeXN0ZW1zIG9uIGRpc2tzIHdpdGggYSBzZWN0b3Igc2l6ZSBub3QgZXF1YWwgdG8gJSIKKyJkIGJ5dGVzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6MTUxIGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjE1NQorbXNnaWQgIkFuIGV4dGVudCBoYXMgbm90IGJlZW4gcmVsb2NhdGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6MjUxIGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjMwNworbXNnaWQgIiIKKyJBIHJlZmVyZW5jZSB0byBhbiBleHRlbnQgY29tZXMgZnJvbSBhIHBsYWNlIGl0IHNob3VsZCBub3QuICBZb3Ugc2hvdWxkIGNoZWNrICIKKyJ0aGUgZmlsZSBzeXN0ZW0hIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzozODEKK21zZ2lkICJUaGlzIEhGUyB2b2x1bWUgaGFzIG5vIGNhdGFsb2cgZmlsZS4gIFRoaXMgaXMgdmVyeSB1bnVzdWFsISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NDc1Cittc2dpZCAiVGhpcyBIRlMgdm9sdW1lIGhhcyBubyBleHRlbnRzIG92ZXJmbG93IGZpbGUuICBUaGlzIGlzIHF1aXRlIHVudXN1YWwhIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzo1MTcgbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NjY4Cittc2dpZCAiIgorIlRoZSBleHRlbnRzIG92ZXJmbG93IGZpbGUgc2hvdWxkIG5vdCBjb250YWluIGl0cyBvd24gZXh0ZW50cyEgIFlvdSBzaG91bGQgIgorImNoZWNrIHRoZSBmaWxlIHN5c3RlbS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjU3NCBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo4NDcKKyMsIGZ1enp5Cittc2dpZCAiQ291bGQgbm90IGNhY2hlIHRoZSBmaWxlIHN5c3RlbSBpbiBtZW1vcnkuIgorbXNnc3RyICJObyBzZSBwdWVkZSBkZXRlY3RhciBlbCBzaXN0ZW1hIGRlIGZpY2hlcm9zLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjYzNSBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo5MDgKK21zZ2lkICJCYWQgYmxvY2tzIGxpc3QgY291bGQgbm90IGJlIGxvYWRlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjY0OSBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo5MjQKK21zZ2lkICJBbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgZXh0ZW50IHJlbG9jYXRpb24uIgorbXNnc3RyICJPY3VycmnzIHVuIGVycm9yIGR1cmFudGUgbGEgcmVsb2NhbGl6YWNp824gZGUgbGEgZXh0ZW5zafNuLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NDk1Cittc2dpZCAiVGhpcyBIRlMrIHZvbHVtZSBoYXMgbm8gY2F0YWxvZyBmaWxlLiAgVGhpcyBpcyB2ZXJ5IHVudXN1YWwhIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjYxOQorbXNnaWQgIlRoaXMgSEZTKyB2b2x1bWUgaGFzIG5vIGV4dGVudHMgb3ZlcmZsb3cgZmlsZS4gIFRoaXMgaXMgcXVpdGUgdW51c3VhbCEiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjk0Cittc2dpZCAiZGlzcGxheXMgdGhpcyBoZWxwIG1lc3NhZ2UiCittc2dzdHIgIm1vc3RyYXIgZXN0ZSBtZW5zYWplIGRlIGF5dWRhIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6OTUKK21zZ2lkICJsaXN0cyBwYXJ0aXRpb24gbGF5b3V0IG9uIGFsbCBibG9jayBkZXZpY2VzIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo5NgorbXNnaWQgImRpc3BsYXlzIG1hY2hpbmUgcGFyc2VhYmxlIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6OTcKK21zZ2lkICJuZXZlciBwcm9tcHRzIGZvciB1c2VyIGludGVydmVudGlvbiIKK21zZ3N0ciAibm8gcGVkaXIgbnVuY2EgbGEgaW50ZXJ2ZW5jafNuIGRlbCB1c3VhcmlvIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6OTgKK21zZ2lkICJkaXNwbGF5cyB0aGUgdmVyc2lvbiIKK21zZ3N0ciAibW9zdHJhciBsYSB2ZXJzafNuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTExCisjLCBmdXp6eQorbXNnaWQgIiIKKyJOVU1CRVIgaXMgdGhlIHBhcnRpdGlvbiBudW1iZXIgdXNlZCBieSBMaW51eC4gIE9uIE1TLURPUyBkaXNrIGxhYmVscywgdGhlICIKKyJwcmltYXJ5IHBhcnRpdGlvbnMgbnVtYmVyIGZyb20gMSB0byA0LCBsb2dpY2FsIHBhcnRpdGlvbnMgZnJvbSA1IG9ud2FyZHMuXG4iCittc2dzdHIgIiIKKyJOVU1FUk8gZXMgZWwgbvptZXJvIGRlIGxhIHBhcnRpY2nzbiB1c2FkYSBwb3IgTGludXguIEVuIGxhcyBldGlxdWV0YXMgZGUgIgorImRpc2NvIG1zZG9zLCBsYXMgcGFydGljaW9uZXMgcHJpbWFyaWFzIHZhbiBkZWwgMSBhbCA0LCB5IGxhcyBwYXJ0aWNpb25lcyAiCisibPNnaWNhcyBkZSA1IGVuIGFkZWxhbnRlLlxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTE0Cittc2dpZCAiTEFCRUwtVFlQRSBpcyBvbmUgb2Y6ICIKK21zZ3N0ciAiVElQT19FVElRVUVUQSBlcyB1bm8gZGU6ICIKKworIzogcGFydGVkL3BhcnRlZC5jOjExNQorbXNnaWQgIkZMQUcgaXMgb25lIG9mOiAiCittc2dzdHIgIkZMQUcgZXMgdW5vIGRlOiAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMTYKKyMsIGZ1enp5Cittc2dpZCAiVU5JVCBpcyBvbmUgb2Y6ICIKK21zZ3N0ciAiRkxBRyBlcyB1bm8gZGU6ICIKKworIzogcGFydGVkL3BhcnRlZC5jOjExNworbXNnaWQgIlBBUlQtVFlQRSBpcyBvbmUgb2Y6IHByaW1hcnksIGxvZ2ljYWwsIGV4dGVuZGVkXG4iCittc2dzdHIgIlRJUE8tUEFSVCBlcyB1bm8gZGU6IHByaW3hcmlvLCBs82dpY28sIGV4dGVuZGlkb1xuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTE5Cittc2dpZCAiRlMtVFlQRSBpcyBvbmUgb2Y6ICIKK21zZ3N0ciAiVElQTy1TRiBlcyB1bm8gZGU6ICIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMAorbXNnaWQgIiIKKyJTVEFSVCBhbmQgRU5EIGFyZSBkaXNrIGxvY2F0aW9ucywgc3VjaCBhcyA0R0Igb3IgMTAlLiAgTmVnYXRpdmUgdmFsdWVzIGNvdW50ICIKKyJmcm9tIHRoZSBlbmQgb2YgdGhlIGRpc2suICBGb3IgZXhhbXBsZSwgLTFzIHNwZWNpZmllcyBleGFjdGx5IHRoZSBsYXN0ICIKKyJzZWN0b3IuXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMworbXNnaWQgIlNUQVRFIGlzIG9uZSBvZjogb24sIG9mZlxuIgorbXNnc3RyICJFU1RBRE8gZXMgdW5vIGRlOiBvbiwgb2ZmXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjQKK21zZ2lkICJERVZJQ0UgaXMgdXN1YWxseSAvZGV2L2hkYSBvciAvZGV2L3NkYVxuIgorbXNnc3RyICJESVNQT1NJVElWTyBlcyBub3JtYWxtZW50ZSAvZGV2L2hkYSBvIC9kZXYvc2RhXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjUKK21zZ2lkICJOQU1FIGlzIGFueSB3b3JkIHlvdSB3YW50XG4iCittc2dzdHIgIk5PTUJSRSBlcyBjdWFscXVpZXIgcGFsYWJyYSBxdWUgcXVpZXJhXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjYKK21zZ2lkICJUaGUgcGFydGl0aW9uIG11c3QgaGF2ZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBGUy1UWVBFczogIgorbXNnc3RyICJMYSBwYXJ0aWNp824gZGViZSB0ZW5lciB1bm8gZGUgbG9zIHNpZ3VpZW50ZXMgVElQT1MgZGUgU0Y6ICIKKworIyBQbGVhc2UsIGJ1c2NhIGVzdGUgbWlzbW8gdGV4dG8gZW4gZWwgLnBvIGRlIGZpbGV1dGlscyBvIHRleHR1dGlscyBlIGludGVudGEKKyMgcXVlIHNlIHBhcmV6Y2EgZW4gbGEgdGVybWlub2xvZ+1hLAorIyBwb3IgZWplbXBsbzogaXMgZGlzdHJpYnV0ZWQgLT4gc2UgZGlzdHJpYnV5ZQorIzogcGFydGVkL3BhcnRlZC5jOjEzMAorIywgZnV6enkKK21zZ2lkICIiCisiQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy5cbiIKKyJUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZSwgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuXG4iCisiXG4iCisiVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4iCisiYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiIKKyJNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4iCisiR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkNvcHlyaWdodCAoQykgMTk5OCAtMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy5cbiIKKyJFc3RlIHByb2dyYW1hIGVzIHNvZnR3YXJlIGxpYnJlLCBjdWJpZXJ0byBwb3IgbGEgTGljZW5jaWEgUPpibGljYSBHZW5lcmFsIGRlICIKKyJHTlUuXG4iCisiXG4iCisiRXN0ZSBwcm9ncmFtYSBzZSBkaXN0cmlidXllIGNvbiBsYSBlc3BlcmFuemEgZGUgcXVlIHNlYSD6dGlsLCBwZXJvIFNJTiAiCisiTklOR1VOQSBHQVJBTlTNQTsgbmkgc2lxdWllcmEgbGEgZ2FyYW507WEgaW1wbO1jaXRhIGRlIENPTUVSQ0lBQklMSURBRCBvICIKKyJJRE9ORUlEQUQgUEFSQSBVTiBGSU4gREVURVJNSU5BRE8uICBWZWEgbGEgTGljZW5jaWEgUPpibGljYSBHZW5lcmFsIGRlIEdOVSAiCisicGFyYSBvYnRlbmVyIG3hcyBkZXRhbGxlcy5cbiIKKyJcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjE3NgorIywgYy1mb3JtYXQKK21zZ2lkICIlMC5mJSVcdCh0aW1lIGxlZnQgJS4yZDolLjJkKSIKK21zZ3N0ciAiJTAuZiUlXHQodGllbXBvIHF1ZSBxdWVkYSAlLjJkOiUuMmQpIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTk1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiUGFydGl0aW9uICVzIGlzIGJlaW5nIHVzZWQuIFlvdSBtdXN0IHVubW91bnQgaXQgYmVmb3JlIHlvdSBtb2RpZnkgaXQgd2l0aCAiCisiUGFydGVkLiIKK21zZ3N0ciAiIgorIkxhIHBhcnRpY2nzbiAlcyBlc3ThIHVzYW5kb3NlLiAgRGViZSBkZXNtb250YXJsYSBhbnRlcyBkZSBtb2RpZmljYXJsYSBjb24gIgorIlBhcnRlZC4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGFydGl0aW9uKHMpIG9uICVzIGFyZSBiZWluZyB1c2VkLiIKK21zZ3N0ciAiTGEocykgcGFydGljafNuKGVzKSBlbiAlcyBlc3ThKG4pIHNpZW5kbyB1c2FkYShzKS4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjMKK21zZ2lkICIiCisiVGhlIGV4aXN0aW5nIGZpbGUgc3lzdGVtIHdpbGwgYmUgZGVzdHJveWVkIGFuZCBhbGwgZGF0YSBvbiB0aGUgcGFydGl0aW9uICIKKyJ3aWxsIGJlIGxvc3QuIERvIHlvdSB3YW50IHRvIGNvbnRpbnVlPyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZXhpc3RpbmcgZGlzayBsYWJlbCBvbiAlcyB3aWxsIGJlIGRlc3Ryb3llZCBhbmQgYWxsIGRhdGEgb24gdGhpcyBkaXNrICIKKyJ3aWxsIGJlIGxvc3QuIERvIHlvdSB3YW50IHRvIGNvbnRpbnVlPyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NDU4IHBhcnRlZC9wYXJ0ZWQuYzo2NTIgcGFydGVkL3BhcnRlZC5jOjEwNDQKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMTI4IHBhcnRlZC9wYXJ0ZWQuYzoxNzcxIHBhcnRlZC9wYXJ0ZWQuYzoxODUyCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTkwMAorbXNnaWQgIlBhcnRpdGlvbiBudW1iZXI/IgorbXNnc3RyICK/TvptZXJvIGRlIGxhIHBhcnRpY2nzbj8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo1MDAKK21zZ2lkICJTb3VyY2UgZGV2aWNlPyIKK21zZ3N0ciAiv0Rpc3Bvc2l0aXZvIGRlIG9yaWdlbj8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo1MDQKK21zZ2lkICJTb3VyY2UgcGFydGl0aW9uIG51bWJlcj8iCittc2dzdHIgIr9O+m1lcm8gZGUgbGEgcGFydGljafNuIGRlIG9yaWdlbj8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo1MDkKKyMsIGZ1enp5Cittc2dpZCAiQ2FuJ3QgY29weSBhbiBleHRlbmRlZCBwYXJ0aXRpb24uIgorbXNnc3RyICJObyBlcyBwdWVkZW4gY29waWFyIGxhcyBwYXJ0aWNpb25lcyBleHRlbmRpZGFzLiIKKworIzogcGFydGVkL3BhcnRlZC5jOjUxNQorbXNnaWQgIkRlc3RpbmF0aW9uIHBhcnRpdGlvbiBudW1iZXI/IgorbXNnc3RyICK/TvptZXJvIGRlIGxhIHBhcnRpY2nzbiBkZSBkZXN0aW5vPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjYxNQorbXNnaWQgIk5ldyBkaXNrIGxhYmVsIHR5cGU/IgorbXNnc3RyICK/TnVldm8gdGlwbyBkZSBldGlxdWV0YSBkZSBkaXNjbz8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo2NTYKK21zZ2lkICJGaWxlIHN5c3RlbT8iCittc2dzdHIgIr9TaXN0ZW1hIGRlIGZpY2hlcm9zPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjcwNyBwYXJ0ZWQvcGFydGVkLmM6ODc4Cittc2dpZCAiUGFydGl0aW9uIHR5cGU/IgorbXNnc3RyICK/VGlwbyBkZSBwYXJ0aWNp824/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NzE0IHBhcnRlZC9wYXJ0ZWQuYzo4ODUgcGFydGVkL3BhcnRlZC5jOjExMzEKK21zZ2lkICJQYXJ0aXRpb24gbmFtZT8iCittc2dzdHIgIr9Ob21icmUgZGUgbGEgcGFydGljafNuPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjcyMiBwYXJ0ZWQvcGFydGVkLmM6ODk1Cittc2dpZCAiRmlsZSBzeXN0ZW0gdHlwZT8iCittc2dzdHIgIr9UaXBvIGRlIHNpc3RlbWEgZGUgZmljaGVyb3M/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NzI5IHBhcnRlZC9wYXJ0ZWQuYzo4OTcgcGFydGVkL3BhcnRlZC5jOjEwNTkKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNzI1IHBhcnRlZC9wYXJ0ZWQuYzoxNzgwCittc2dpZCAiU3RhcnQ/IgorbXNnc3RyICK/SW5pY2lvPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjczMSBwYXJ0ZWQvcGFydGVkLmM6OTAwIHBhcnRlZC9wYXJ0ZWQuYzoxMDYyCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTcyNyBwYXJ0ZWQvcGFydGVkLmM6MTc4MgorbXNnaWQgIkVuZD8iCittc2dzdHIgIr9GaW4/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NzY5IHBhcnRlZC9wYXJ0ZWQuYzo5MzgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgcmVxdWVzdGVkIGEgcGFydGl0aW9uIGZyb20gJXMgdG8gJXMuXG4iCisiVGhlIGNsb3Nlc3QgbG9jYXRpb24gd2UgY2FuIG1hbmFnZSBpcyAlcyB0byAlcy4gIElzIHRoaXMgc3RpbGwgYWNjZXB0YWJsZSB0byAiCisieW91PyIKK21zZ3N0ciAiIgorIlBpZGnzIG1vdmVyIGxhIHBhcnRpY2nzbiBhICVzIC0gJXMuIExvIG3hcyBjZXJjYSBxdWUgUGFydGVkIHB1ZWRlIG1hbmVqYXIgZXMgIgorIiVzIC0gJXMuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6ODkwCisjLCBmdXp6eQorbXNnaWQgIkFuIGV4dGVuZGVkIHBhcnRpdGlvbiBjYW5ub3QgaG9sZCBhIGZpbGUgc3lzdGVtLiAgRGlkIHlvdSB3YW50IG1rcGFydD8iCittc2dzdHIgIiIKKyJMYSBwYXJ0aWNpb25lcyBleHRlbmRpZGFzIG5vIHB1ZWRlIHNvc3RlbmVyIHVuIHNpc3RlbWEgZGUgZmljaGVyb3MuICC/UXVpZXJlICIKKyJta3BhcnQ/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTA1MAorbXNnaWQgIkNhbid0IG1vdmUgYW4gZXh0ZW5kZWQgcGFydGl0aW9uLiIKK21zZ3N0ciAiTm8gc2UgcHVlZGVuIG1vdmVyIHVuYSBwYXJ0aWNp824gZXh0ZW5kaWRhLiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEwNzkKK21zZ2lkICJDYW4ndCBtb3ZlIGEgcGFydGl0aW9uIG9udG8gaXRzZWxmLiAgVHJ5IHVzaW5nIHJlc2l6ZSwgcGVyaGFwcz8iCittc2dzdHIgIiIKKyJObyBzZSBwdWVkZSBtb3ZlciB1bmEgcGFydGljafNuIHNvYnJlIHPtIG1pc21hLiAgv1BydWViZSBhIHVzYXIgIgorInJlZGltZW5zaW9uYXIsIHF1aXrhcz8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIk1pbm9yOiAlZFxuIgorbXNnc3RyICJNaW5vcjogJWRcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMjgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkZsYWdzOiAlc1xuIgorbXNnc3RyICJCYW5kZXJhczogIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIyOQorIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlIFN5c3RlbTogJXNcbiIKK21zZ3N0ciAiU2lzdGVtYSBkZSBmaWNoZXJvczogJXNcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMzAKKyMsIGZ1enp5Cittc2dpZCAiU2l6ZTogICAgICAgICAiCittc2dzdHIgIlRhbWHxbzogICAgICAgICAlMTAuM2ZNYiAoJWQlJSlcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMzUKK21zZ2lkICJNaW5pbXVtIHNpemU6ICIKK21zZ3N0ciAiVGFtYfFvIG3tbmltbzogIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIzOAorbXNnaWQgIk1heGltdW0gc2l6ZTogIgorbXNnc3RyICJUYW1h8W8gbeF4aW1vOiAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMzYyCisjLCBjLWZvcm1hdAorbXNnaWQgIk1vZGVsOiAlcyAoJXMpXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEzNjQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkRpc2sgJXM6ICVzXG4iCittc2dzdHIgIiVzICAlcyAgJXMiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlY3RvciBzaXplIChsb2dpY2FsL3BoeXNpY2FsKTogJWxsZEIvJWxsZEJcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTM4MworIywgYy1mb3JtYXQKK21zZ2lkICJCSU9TIGN5bGluZGVyLGhlYWQsc2VjdG9yIGdlb21ldHJ5OiAlZCwlZCwlZC4gIEVhY2ggY3lsaW5kZXIgaXMgJXMuXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEzOTIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlBhcnRpdGlvbiBUYWJsZTogJXNcbiIKK21zZ3N0ciAiv05vbWJyZSBkZSBsYSBwYXJ0aWNp824/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQwNiBwYXJ0ZWQvcGFydGVkLmM6MTQwOQorbXNnaWQgIk51bWJlciIKK21zZ3N0ciAiTnVtZXJvIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQwNiBwYXJ0ZWQvcGFydGVkLmM6MTQwOQorbXNnaWQgIlN0YXJ0IgorbXNnc3RyICJJbmljaW8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDA3IHBhcnRlZC9wYXJ0ZWQuYzoxNDEwCittc2dpZCAiRW5kIgorbXNnc3RyICJGaW4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDEwCittc2dpZCAiU2l6ZSIKK21zZ3N0ciAiVGFtYfFvIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQxNAorbXNnaWQgIlR5cGUiCittc2dzdHIgIlR5cG8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDE2Cittc2dpZCAiRmlsZSBzeXN0ZW0iCittc2dzdHIgIlNpc3RlbWEgZGUgZmljaGVyb3MiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDE5Cittc2dpZCAiTmFtZSIKK21zZ3N0ciAiTm9tYnJlIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQyMQorbXNnaWQgIkZsYWdzIgorbXNnc3RyICJCYW5kZXJhcyIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0NzcKK21zZ2lkICJGcmVlIFNwYWNlIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBICVzICVzIHBhcnRpdGlvbiB3YXMgZm91bmQgYXQgJXMgLT4gJXMuICBEbyB5b3Ugd2FudCB0byBhZGQgaXQgdG8gdGhlICIKKyJwYXJ0aXRpb24gdGFibGU/IgorbXNnc3RyICIiCisiSGEgc2lkbyBlbmNvbnRyYWRhIHVuYSBwYXJ0aWNp824gJXMgJXMgZW4gJXMgLT4gJXMuICC/UXVpZXJlIGHxYWRpcmxhIGEgbGEgIgorInRhYmxhIGRlIHBhcnRpY2lvbmVzPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjE2NjMKK21zZ2lkICJzZWFyY2hpbmcgZm9yIGZpbGUgc3lzdGVtcyIKK21zZ3N0ciAiYnVzY2FuZG8gbG9zIHNpc3RlbWFzIGRlIGZpY2hlcm9zIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTg3NworbXNnaWQgIk5ldyBkZXZpY2U/IgorbXNnc3RyICK/TnVldm8gZGlzcG9zaXRpdm8/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTkwMgorIywgZnV6enkKK21zZ2lkICJGbGFnIHRvIEludmVydD8iCittc2dzdHIgIr9CYW5kZXJhIGEgY2FtYmlhcj8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxOTA3Cittc2dpZCAiTmV3IHN0YXRlPyIKK21zZ3N0ciAiv051ZXZvIGVzdGFkbz8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxOTQ0Cittc2dpZCAiVW5pdD8iCittc2dzdHIgIr9VbmlkYWQ/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjA5MworbXNnaWQgImNoZWNrIgorbXNnc3RyICJjb21wcm9iYXIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMDk2CisjLCBmdXp6eQorbXNnaWQgIiIKKyJjaGVjayBOVU1CRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIGEgc2ltcGxlIGNoZWNrIG9uIHRoZSBmaWxlIHN5c3RlbSIKK21zZ3N0ciAiIgorImNvbXBydWViYSBOVU1FUk8gICAgICAgICAgICAgICAgICAgaGFjZSB1bmEgY29tcHJvYmFjafNuIHNpbXBsZSBkZWwgc2lzdGVtYSAiCisiZGUgZmljaGVyb3MiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTAyCittc2dpZCAiY3AiCittc2dzdHIgImNwIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEwNQorbXNnaWQgIiIKKyJjcCBbRlJPTS1ERVZJQ0VdIEZST00tTlVNQkVSIFRPLU5VTUJFUiAgIGNvcHkgZmlsZSBzeXN0ZW0gdG8gYW5vdGhlciAiCisicGFydGl0aW9uIgorbXNnc3RyICIiCisiY3AgW0RFU0RFLURJU1BPU0lUSVZPXSBERS1OVU1FUk8gQS1OVU1FUk8gICBjb3BpYSBlbCBzaXN0ZW1hIGRlIGZpY2hlcm9zIGEgIgorIm90cmEgcGFydGljafNuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjExMQorbXNnaWQgImhlbHAiCittc2dzdHIgImhlbHAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTE0CisjLCBmdXp6eQorbXNnaWQgIiIKKyJoZWxwIFtDT01NQU5EXSAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50IGdlbmVyYWwgaGVscCwgb3IgaGVscCBvbiAiCisiQ09NTUFORCIKK21zZ3N0ciAiIgorImhlbHAgW09SREVOXSAgICAgICAgICAgICAgICAgbXVlc3RyYSBsYSBheXVkYSBnZW5lcmFsLCBvIGxhIGF5dWRhIHNvYnJlIGxhICIKKyJPUkRFTiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMjAKK21zZ2lkICJta2xhYmVsIgorbXNnc3RyICJta2xhYmVsIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEyMAorIywgZnV6enkKK21zZ2lkICJta3RhYmxlIgorbXNnc3RyICJta2xhYmVsIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEyMworIywgZnV6enkKK21zZ2lkICIiCisibWtsYWJlbCxta3RhYmxlIExBQkVMLVRZUEUgICAgICAgICAgICAgICBjcmVhdGUgYSBuZXcgZGlza2xhYmVsIChwYXJ0aXRpb24gIgorInRhYmxlKSIKK21zZ3N0ciAiIgorIm1rbGFiZWwgVElQTy1FVElRVUVUQSAgICAgICAgY3JlYSB1bmEgbnVldmEgZXRpcXVldGEgZGUgZGlzY28gKGVuIGxhIHRhYmxhICIKKyJkZSBwYXJ0aWNp824pIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEyOQorbXNnaWQgIm1rZnMiCittc2dzdHIgIm1rZnMiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTMyCisjLCBmdXp6eQorbXNnaWQgIiIKKyJta2ZzIE5VTUJFUiBGUy1UWVBFICAgICAgICAgICAgICAgICAgICAgIG1ha2UgYSBGUy1UWVBFIGZpbGUgc3lzdGVtIG9uICIKKyJwYXJ0aXRpdG9uIE5VTUJFUiIKK21zZ3N0ciAiIgorIm1rZnMgTlVNRVJPIFRJUE8tU0YgICAgICAgICAgIGNyZWEgdW4gc2lzdGVtYSBkZSBmaWNoZXJvcyBUSVBPLVNGIGVuIGxhICIKKyJwYXJ0aWNp824gTlVNRVJPIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEzOAorbXNnaWQgIm1rcGFydCIKK21zZ3N0ciAibWtwYXJ0IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE0MQorbXNnaWQgIm1rcGFydCBQQVJULVRZUEUgW0ZTLVRZUEVdIFNUQVJUIEVORCAgICAgbWFrZSBhIHBhcnRpdGlvbiIKK21zZ3N0ciAibWtwYXJ0IFRJUE8tUEFSVCBbVElQTy1TRl0gSU5JQ0lPIEZJTiAgICAgY3JlYSB1bmEgcGFydGljafNuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE0NworIywgZnV6enkKK21zZ2lkICIiCisiJ21rcGFydCcgbWFrZXMgYSBwYXJ0aXRpb24gd2l0aG91dCBjcmVhdGluZyBhIG5ldyBmaWxlIHN5c3RlbSBvbiB0aGUgIgorInBhcnRpdGlvbi4gIEZTLVRZUEUgbWF5IGJlIHNwZWNpZmllZCB0byBzZXQgYW4gYXBwcm9wcmlhdGUgcGFydGl0aW9uIElELlxuIgorbXNnc3RyICIiCisibWtwYXJ0IGNyZWEgdW5hIHBhcnRpY2nzbiBzaW4gY3JlYXIgdW4gbnVldm8gc2lzdGVtYSBkZSBmaWNoZXJvcyBlbiBsYSAiCisicGFydGljafNuLiBEZWJlIHNlciBlc3BlY2lmaWNhZG8gZWwgVElQTy1TRiBwYXJhIGFzaWduYXIgdW5hIElEIGRlICIKKyJwYXJ0aWNp824uXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTUyCittc2dpZCAibWtwYXJ0ZnMiCittc2dzdHIgIm1rcGFydGZzIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE1NQorbXNnaWQgIiIKKyJta3BhcnRmcyBQQVJULVRZUEUgRlMtVFlQRSBTVEFSVCBFTkQgICAgIG1ha2UgYSBwYXJ0aXRpb24gd2l0aCBhIGZpbGUgc3lzdGVtIgorbXNnc3RyICIiCisibWtwYXJ0ZnMgVElQTy1QQVJUIFRJUE8tU0YgSU5JQ0lPIEZJTiAgICAgY3JlYXIgdW5hIHBhcnRpY2nzbiBjb24gdW4gc2lzdGVtYSAiCisiZGUgZmljaGVyb3MiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTYxCittc2dpZCAibW92ZSIKK21zZ3N0ciAibW92ZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNjQKKyMsIGZ1enp5Cittc2dpZCAibW92ZSBOVU1CRVIgU1RBUlQgRU5EICAgICAgICAgICAgICAgICAgICBtb3ZlIHBhcnRpdGlvbiBOVU1CRVIiCittc2dzdHIgIm1vdmUgTlVNRVJPIElOSUNJTyBGSU4gICAgICAgIG11ZXZlIGxhIHBhcnRpY2nzbiBOVU1FUk8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTY5Cittc2dpZCAibmFtZSIKK21zZ3N0ciAibmFtZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNzIKKyMsIGZ1enp5Cittc2dpZCAibmFtZSBOVU1CRVIgTkFNRSAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lIHBhcnRpdGlvbiBOVU1CRVIgYXMgTkFNRSIKK21zZ3N0ciAibmFtZSBOVU1FUk8gTk9NQlJFICAgICAgICAgICAgbm9tYnJhIGxhIHBhcnRpY2nzbiBOVU1FUk8gY29tbyBOT01CUkUiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTc3Cittc2dpZCAicHJpbnQiCittc2dzdHIgInByaW50IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE4MAorbXNnaWQgIiIKKyJwcmludCBbZGV2aWNlc3xmcmVlfGxpc3QsYWxsfE5VTUJFUl0gICAgIGRpc3BsYXkgdGhlIHBhcnRpdGlvbiB0YWJsZSwgIgorImF2YWlsYWJsZSBkZXZpY2VzLCBmcmVlIHNwYWNlLCBhbGwgZm91bmQgcGFydGl0aW9ucywgb3IgYSBwYXJ0aWN1bGFyICIKKyJwYXJ0aXRpb24iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxODUKK21zZ2lkICIiCisiV2l0aG91dCBhcmd1bWVudHMsICdwcmludCcgZGlzcGxheXMgdGhlIGVudGlyZSBwYXJ0aXRpb24gdGFibGUuIEhvd2V2ZXIgd2l0aCAiCisidGhlIGZvbGxvd2luZyBhcmd1bWVudHMgaXQgcGVyZm9ybXMgdmFyaW91cyBvdGhlciBhY3Rpb25zLlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTg3Cittc2dpZCAiICBkZXZpY2VzICAgOiBkaXNwbGF5IGFsbCBhY3RpdmUgYmxvY2sgZGV2aWNlc1xuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTg4Cittc2dpZCAiIgorIiAgZnJlZSAgICAgIDogZGlzcGxheSBpbmZvcm1hdGlvbiBhYm91dCBmcmVlIHVucGFydGl0aW9uZWQgc3BhY2Ugb24gdGhlICIKKyJjdXJyZW50IGJsb2NrIGRldmljZVxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTkwCisjLCBmdXp6eQorbXNnaWQgIiIKKyIgIGxpc3QsIGFsbCA6IGRpc3BsYXkgdGhlIHBhcnRpdGlvbiB0YWJsZXMgb2YgYWxsIGFjdGl2ZSBibG9jayBkZXZpY2VzXG4iCittc2dzdHIgIiIKKyJwcmludCBbTlVNRVJPXSAgICAgICAgICAgICAgIG11ZXN0cmEgbGEgdGFibGEgZGUgbGFzIHBhcnRpY2lvbmVzLCBvIHVuYSAiCisicGFydGljafNuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE5MQorbXNnaWQgIiIKKyIgIE5VTUJFUiAgICA6IGRpc3BsYXkgbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIHBhcnRpY3VsYXIgIgorInBhcnRpdGlvblxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTk2Cittc2dpZCAicXVpdCIKK21zZ3N0ciAicXVpdCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxOTkKKyMsIGZ1enp5Cittc2dpZCAicXVpdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGl0IHByb2dyYW0iCittc2dzdHIgInF1aXQgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbGUgZGVsIHByb2dyYW1hIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIwNAorbXNnaWQgInJlc2N1ZSIKK21zZ3N0ciAicmVzY3VlIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIwNworIywgZnV6enkKK21zZ2lkICIiCisicmVzY3VlIFNUQVJUIEVORCAgICAgICAgICAgICAgICAgICAgICAgICByZXNjdWUgYSBsb3N0IHBhcnRpdGlvbiBuZWFyIFNUQVJUICIKKyJhbmQgRU5EIgorbXNnc3RyICIiCisicmVzY3VlIElOSUNJTyBGSU4gICAgICAgcmVjdXBlcmEgbGFzIHBhcnRpY2lvbmVzIHBlcmRpZGFzIGVudHJlIElOSUNJTyB5IEZJTiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMTMKK21zZ2lkICJyZXNpemUiCittc2dzdHIgInJlc2l6ZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMTYKKyMsIGZ1enp5Cittc2dpZCAiIgorInJlc2l6ZSBOVU1CRVIgU1RBUlQgRU5EICAgICAgICAgICAgICAgICAgcmVzaXplIHBhcnRpdGlvbiBOVU1CRVIgYW5kIGl0cyAiCisiZmlsZSBzeXN0ZW0iCittc2dzdHIgIiIKKyJyZXNpemUgTlVNRVJPIElOSUNJTyBGSU4gICAgICAgcmVkaW1lbnNpb25hIGVsIHNpc3RlbWEgZGUgZmljaGVyb3MgeSBsYSAiCisicGFydGljafNuIE5VTUVSTyIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMjQKK21zZ2lkICJybSIKK21zZ3N0ciAicm0iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjI3CisjLCBmdXp6eQorbXNnaWQgInJtIE5VTUJFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHBhcnRpdGlvbiBOVU1CRVIiCittc2dzdHIgInJtIE5VTUVSTyAgICAgICAgICAgICAgICAgICAgICBib3JyYSBsYSBwYXJ0aWNp824gTlVNRVJPIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIzMgorbXNnaWQgInNlbGVjdCIKK21zZ3N0ciAic2VsZWN0IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIzNQorIywgZnV6enkKK21zZ2lkICJzZWxlY3QgREVWSUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNob29zZSB0aGUgZGV2aWNlIHRvIGVkaXQiCittc2dzdHIgInNlbGVjdCBESVNQT1NJVElWTyAgICAgICAgICAgZWxlZ2lyIGVsIGRpc3Bvc2l0aXZvIGEgZWRpdGFyIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI0MAorbXNnaWQgInNldCIKK21zZ3N0ciAic2V0IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI0MworIywgZnV6enkKK21zZ2lkICIiCisic2V0IE5VTUJFUiBGTEFHIFNUQVRFICAgICAgICAgICAgICAgICAgICBjaGFuZ2UgdGhlIEZMQUcgb24gcGFydGl0aW9uIE5VTUJFUiIKK21zZ3N0ciAiIgorInNldCBOVU1FUk8gTU9ESUYgRVNUQURPICAgICAgICBjYW1iaWEgdW4gbW9kaWZpY2Fkb3IgZGUgbGEgcGFydGljafNuIE5VTUVSTyIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNDkKK21zZ2lkICJ0b2dnbGUiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNTIKKyMsIGZ1enp5Cittc2dpZCAiIgorInRvZ2dsZSBbTlVNQkVSIFtGTEFHXV0gICAgICAgICAgICAgICAgICAgdG9nZ2xlIHRoZSBzdGF0ZSBvZiBGTEFHIG9uICIKKyJwYXJ0aXRpb24gTlVNQkVSIgorbXNnc3RyICJybSBOVU1FUk8gICAgICAgICAgICAgICAgICAgICAgYm9ycmEgbGEgcGFydGljafNuIE5VTUVSTyIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNTgKK21zZ2lkICJ1bml0IgorbXNnc3RyICJ1bml0IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI2MQorIywgZnV6enkKK21zZ2lkICJ1bml0IFVOSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCB0aGUgZGVmYXVsdCB1bml0IHRvIFVOSVQiCittc2dzdHIgIiIKKyJ1bml0IFVOSURBRCAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYSBsYSB1bmlkYWQgcG9yIGRlZmVjdG8gcGFyYSBVTklEQUQiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjY2Cittc2dpZCAidmVyc2lvbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI2OQorbXNnaWQgIiIKKyJ2ZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXkgdGhlIHZlcnNpb24gbnVtYmVyIGFuZCAiCisiY29weXJpZ2h0IGluZm9ybWF0aW9uIG9mIEdOVSBQYXJ0ZWQiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNzMKK21zZ2lkICIiCisiJ3ZlcnNpb24nIGRpc3BsYXlzIGNvcHlyaWdodCBhbmQgdmVyc2lvbiBpbmZvcm1hdGlvbiBjb3JyZXNwb25kaW5nIHRvIHRoaXMgIgorImNvcHkgb2YgR05VIFBhcnRlZFxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMzM1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLWhsbXN2XSBbREVWSUNFIFtDT01NQU5EIFtQQVJBTUVURVJTXV0uLi5dXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIzNzkKK21zZ2lkICJObyBkZXZpY2UgZm91bmQiCittc2dzdHIgIk5vIHNlIGVuY29udHLzIGVsIGRpc3Bvc2l0aXZvIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjQxMgorbXNnaWQgIldBUk5JTkc6IFlvdSBhcmUgbm90IHN1cGVydXNlci4gIFdhdGNoIG91dCBmb3IgcGVybWlzc2lvbnMuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyNDUwCisjLCBmdXp6eQorbXNnaWQgIllvdSBtYXkgbmVlZCB0byB1cGRhdGUgL2V0Yy9mc3RhYi5cbiIKK21zZ3N0ciAiTm8gc2Ugb2x2aWRlIGRlIGFjdHVhbGl6YXIgL2V0Yy9mc3RhYiwgc2kgZXMgbmVjZXNhcmlvLlxuIgorCisjOiBwYXJ0ZWQvdWkuYzoxNjAKK21zZ2lkICJXZWxjb21lIHRvIEdOVSBQYXJ0ZWQhIFR5cGUgJ2hlbHAnIHRvIHZpZXcgYSBsaXN0IG9mIGNvbW1hbmRzLlxuIgorbXNnc3RyICIiCisKKyMgVXNvOiBvIE1vZG8gZGUgZW1wbGVvOgorIzogcGFydGVkL3VpLmM6MTYzCisjLCBmdXp6eQorbXNnaWQgIiIKKyJVc2FnZTogcGFydGVkIFtPUFRJT05dLi4uIFtERVZJQ0UgW0NPTU1BTkQgW1BBUkFNRVRFUlNdLi4uXS4uLl1cbiIKKyJBcHBseSBDT01NQU5EcyB3aXRoIFBBUkFNRVRFUlMgdG8gREVWSUNFLiAgSWYgbm8gQ09NTUFORChzKSBhcmUgZ2l2ZW4sIHJ1biAiCisiaW5cbiIKKyJpbnRlcmFjdGl2ZSBtb2RlLlxuIgorbXNnc3RyICIiCisiTW9kbyBkZSBFbXBsZW86IHBhcnRlZCBbT1BDSdNOXS4uLiBbRElTUE9TSVRJVk8gW09SREVOIFtQQVLBTUVUUk9TXS4uLl0uLi5dXG4iCisiQXBsaWNhIGxhKHMpIE9SREVOZXMgY29uIFBBUsFNRVRST1MgYWwgRElTUE9TSVRJVk8uICBTaSBubyBzZSBkYSBuaW5ndW5hKHMpICIKKyJPUkRFTihlcyksIHNlIGVqZWN1dGEgZW5cbiIKKyJtb2RvIGludGVyYWN0aXZvLlxuIgorCisjOiBwYXJ0ZWQvdWkuYzoxNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlxuIgorIllvdSBmb3VuZCBhIGJ1ZyBpbiBHTlUgUGFydGVkISBIZXJlJ3Mgd2hhdCB5b3UgaGF2ZSB0byBkbzpcbiIKKyJcbiIKKyJEb24ndCBwYW5pYyEgVGhlIGJ1ZyBoYXMgbW9zdCBsaWtlbHkgbm90IGFmZmVjdGVkIGFueSBvZiB5b3VyIGRhdGEuXG4iCisiSGVscCB1cyB0byBmaXggdGhpcyBidWcgYnkgZG9pbmcgdGhlIGZvbGxvd2luZzpcbiIKKyJcbiIKKyJDaGVjayB3aGV0aGVyIHRoZSBidWcgaGFzIGFscmVhZHkgYmVlbiBmaXhlZCBieSBjaGVja2luZ1xuIgorInRoZSBsYXN0IHZlcnNpb24gb2YgR05VIFBhcnRlZCB0aGF0IHlvdSBjYW4gZmluZCBhdDpcbiIKKyJcbiIKKyJcdGh0dHA6Ly9mdHAuZ251Lm9yZy9nbnUvcGFydGVkL1xuIgorIlxuIgorIlBsZWFzZSBjaGVjayB0aGlzIHZlcnNpb24gcHJpb3IgdG8gYnVnIHJlcG9ydGluZy5cbiIKKyJcbiIKKyJJZiB0aGlzIGhhcyBub3QgYmVlbiBmaXhlZCB5ZXQgb3IgaWYgeW91IGRvbid0IGtub3cgaG93IHRvIGNoZWNrLFxuIgorInBsZWFzZSB2aXNpdCB0aGUgR05VIFBhcnRlZCB3ZWJzaXRlOlxuIgorIlxuIgorIlx0aHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3BhcnRlZFxuIgorIlxuIgorImZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLlxuIgorIlxuIgorIllvdXIgcmVwb3J0IHNob3VsZCBjb250YWluIHRoZSB2ZXJzaW9uIG9mIHRoaXMgcmVsZWFzZSAoJXMpXG4iCisiYWxvbmcgd2l0aCB0aGUgZXJyb3IgbWVzc2FnZSBiZWxvdywgdGhlIG91dHB1dCBvZlxuIgorIlxuIgorIlx0cGFydGVkIERFVklDRSB1bml0IGNvIHByaW50IHVuaXQgcyBwcmludFxuIgorIlxuIgorImFuZCB0aGUgZm9sbG93aW5nIGhpc3Rvcnkgb2YgY29tbWFuZHMgeW91IGVudGVyZWQuXG4iCisiQWxzbyBpbmNsdWRlIGFueSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHlvdXIgc2V0dXAgeW91XG4iCisiY29uc2lkZXIgaW1wb3J0YW50LlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjI4NAorbXNnaWQgIiIKKyJcbiIKKyJDb21tYW5kIEhpc3Rvcnk6XG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6MzY2Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBTRUdWX01BUEVSUiAoQWRkcmVzcyBub3QgbWFwcGVkIHRvIG9iamVjdClcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzozNzIKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IFNFR1ZfQUNDRVJSIChJbnZhbGlkIHBlcm1pc3Npb25zIGZvciBtYXBwZWQgb2JqZWN0KVxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjM3NworbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogQSBnZW5lcmFsIFNJR1NFR1Ygc2lnbmFsIHdhcyBlbmNvdW50ZXJlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0MTAKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9JTlRESVYgKEludGVnZXI6IGRpdmlkZSBieSB6ZXJvKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0MTUKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9JTlRPVkYgKEludGVnZXI6IG92ZXJmbG93KSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0MjAKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRESVYgKEZsb2F0OiBkaXZpZGUgYnkgemVybykiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDI1Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxUT1ZGIChGbG9hdDogb3ZlcmZsb3cpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQzMAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0ZMVFVORCAoRmxvYXQ6IHVuZGVyZmxvdykiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDM1Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxUUkVTIChGbG9hdDogaW5leGFjdCByZXN1bHQpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQ0MAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0ZMVElOViAoRmxvYXQ6IGludmFsaWQgb3BlcmF0aW9uKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0NDUKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRTVUIgKEZsb2F0OiBzdWJzY3JpcHQgb3V0IG9mIHJhbmdlKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0NTAKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEEgZ2VuZXJhbCBTSUdGUEUgc2lnbmFsIHdhcyBlbmNvdW50ZXJlZC4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDgzCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfSUxMT1BDIChJbGxlZ2FsIE9wY29kZSkiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDg4Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfSUxMT1BOIChJbGxlZ2FsIE9wZXJhbmQpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQ5MworbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX0lMTEFEUiAoSWxsZWdhbCBhZGRyZXNzaW5nIG1vZGUpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQ5OAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX0lMTFRSUCAoSWxsZWdhbCBUcmFwKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo1MDMKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9QUlZPUEMgKFByaXZpbGVnZWQgT3Bjb2RlKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo1MDgKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9QUlZSRUcgKFByaXZpbGVnZWQgUmVnaXN0ZXIpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjUxMworbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX0NPUFJPQyAoQ29wcm9jZXNzb3IgRXJyb3IpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjUxOAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX0JBRFNUSyAoSW50ZXJuYWwgU3RhY2sgRXJyb3IpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjUyMworbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogQSBnZW5lcmFsIFNJR0lMTCBzaWduYWwgd2FzIGVuY291bnRlcmVkLiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzoxMDI0Cittc2dpZCAiRXhwZWN0aW5nIGEgcGFydGl0aW9uIG51bWJlci4iCittc2dzdHIgIlNlIGVzcGVyYWJhIHVuIG76bWVybyBkZSBwYXJ0aWNp824uIgorCisjOiBwYXJ0ZWQvdWkuYzoxMDMzCittc2dpZCAiUGFydGl0aW9uIGRvZXNuJ3QgZXhpc3QuIgorbXNnc3RyICJMYSBwYXJ0aWNp824gbm8gZXhpc3RlLiIKKworIzogcGFydGVkL3VpLmM6MTA1MworbXNnaWQgIkV4cGVjdGluZyBhIGZpbGUgc3lzdGVtIHR5cGUuIgorbXNnc3RyICJTZSBlc3BlcmFiYSB1biB0aXBvIGRlIHNpc3RlbWEgZGUgZmljaGVyb3MuIgorCisjOiBwYXJ0ZWQvdWkuYzoxMDYwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gZmlsZSBzeXN0ZW0gdHlwZSBcIiVzXCIuIgorbXNnc3RyICJUaXBvIGRlIHNpc3RlbWEgZGUgZmljaGVyb3MgXCIlc1wiIGRlc2Nvbm9jaWRvLiIKKworIzogcGFydGVkL3VpLmM6MTA4MAorbXNnaWQgIkV4cGVjdGluZyBhIGRpc2sgbGFiZWwgdHlwZS4iCittc2dzdHIgIlNlIGVzcGVyYWJhIHVuIHRpcG8gZGUgZXRpcXVldGEgZGUgZGlzY28uIgorCisjIE5vIHNlIHB1ZWRlLgorIzogcGFydGVkL3VpLmM6MTE3OAorbXNnaWQgIkNhbid0IGNyZWF0ZSBhbnkgbW9yZSBwYXJ0aXRpb25zLiIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgY3JlYXIgbeFzIHBhcnRpY2lvbmVzLiIKKworIzogcGFydGVkL3VpLmM6MTE4OAorbXNnaWQgIkV4cGVjdGluZyBhIHBhcnRpdGlvbiB0eXBlLiIKK21zZ3N0ciAiU2UgZXNwZXJhYmEgdW4gdGlwbyBkZSBwYXJ0aWNp824uIgorCisjOiBwYXJ0ZWQvdWkuYzoxMzE1Cittc2dpZCAib24iCittc2dzdHIgIm9uIgorCisjOiBwYXJ0ZWQvdWkuYzoxMzE2Cittc2dpZCAib2ZmIgorbXNnc3RyICJvZmYiCisKKyM6IHBhcnRlZC91aS5jOjE0MzEKK21zZ2lkICJPUFRJT05zOiIKK21zZ3N0ciAiT1BDSdNOZXM6IgorCisjIENvbWFuZG8gZXMgdW5hIGJhcmJhcmlkYWQuIEVuIGVzQGxpLm9yZyB1c2Ftb3MgIm9yZGVuIi4KKyM6IHBhcnRlZC91aS5jOjE0MzYKK21zZ2lkICJDT01NQU5EczoiCittc2dzdHIgIk9SREVOZXM6IgorCisjOiBwYXJ0ZWQvdWkuYzoxNDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzaW5nICVzXG4iCittc2dzdHIgIlVzYW5kbyAlc1xuIgorCisjOiBwYXJ0ZWQvdWkuYzoxNTE5Cittc2dpZCAiVGhpcyBjb21tYW5kIGRvZXMgbm90IG1ha2Ugc2Vuc2UgaW4gbm9uLWludGVyYWN0aXZlIG1vZGUuXG4iCittc2dzdHIgIiIKKworI34gbXNnaWQgIndoZXJlIG5lY2Vzc2FyeSwgcHJvbXB0cyBmb3IgdXNlciBpbnRlcnZlbnRpb24iCisjfiBtc2dzdHIgImRvbmRlIHNlYSBuZWNlc2FyaW8sIHBlZGlyIGxhIGludGVydmVuY2nzbiBkZWwgdXN1YXJpbyIKKworIywgZnV6enkKKyN+IG1zZ2lkICIiCisjfiAiV2l0aG91dCBhcmd1bWVudHMsIHByaW50IGRpc3BsYXlzIHRoZSBlbnRpcmUgcGFydGl0aW9uIHRhYmxlLiBXaXRoICIKKyN+ICInZnJlZSdcbiIKKyN+ICJhcmd1bWVudCwgaW5mb3JtYXRpb24gYWJvdXQgZnJlZSBzcGFjZSB3aWxsIGJlIGRpc3BsYXllZCBvdGhlcndpc2UgaWYgYVxuIgorI34gInBhcnRpdGlvbiBudW1iZXIgaXMgZ2l2ZW4sIHRoZW4gbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBpcyBkaXNwbGF5ZWRcbiIKKyN+ICJhYm91dCB0aGF0IHBhcnRpdGlvbi4gSWYgdGhlICdhbGwnIGFyZ3VtZW50IGlzIHBhc3NlZCBpbnN0ZWFkLCBwYXJ0aXRpb25cbiIKKyN+ICJpbmZvcm1hdGlvbiBmb3IgYWxsIGRldmljZXMgd2lsbCBiZSBkaXNwbGF5ZWQuXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJTaW4gYXJndW1lbnRvcywgcHJpbnQgbXVlc3RyYSBsYSB0YWJsYSBkZSBwYXJ0aWNpb25lcyBlbnRlcmEuICBTaSBzZVxuIgorI34gImRhIHVuIG76bWVybyBkZSBwYXJ0aWNp824sIHNlIG11ZXN0cmEgbGEgaW5mb3JtYWNp824gbeFzIGRldGFsbGFkYVxuIgorI34gInNvYnJlIGVzYSBwYXJ0aWNpb24uXG4iCisKKyMgZHJpdmVzIC0+IHVuaWRhZGVzCisjfiBtc2dpZCAiIgorI34gIlRoZSBzZWN0b3Igc2l6ZSBvbiAlcyBpcyAlZCBieXRlcy4gIFBhcnRlZCBpcyBrbm93biBub3QgdG8gd29yayBwcm9wZXJseSAiCisjfiAid2l0aCBkcml2ZXMgd2l0aCBzZWN0b3Igc2l6ZXMgb3RoZXIgdGhhbiAlZCBieXRlcy4iCisjfiBtc2dzdHIgIiIKKyN+ICJFbCB0YW1h8W8gZGVsIHNlY3RvciBlbiAlcyBlcyBkZSAlZCBieXRlcy4gIFBhcnRlZCBubyBmdW5jaW9uYSAiCisjfiAiY29ycmVjdGFtZW50ZSBjb24gdW5pZGFkZXMgcXVlIHRlbmdhbiB1biB0YW1h8W8gZGUgc2VjdG9yIGRpc3RpbnRvIGRlICVkICIKKyN+ICJieXRlcyIKKworI34gbXNnaWQgIklERSIKKyN+IG1zZ3N0ciAiSURFIgorCisjfiBtc2dpZCAiQXR0ZW1wdCB0byByZWFkIHNlY3RvcnMgJWxkLSVsZCBvdXRzaWRlIG9mIHBhcnRpdGlvbiBvbiAlcy4iCisjfiBtc2dzdHIgIiIKKyN+ICJTZSBpbnRlbnRhcm9uIGxlZXIgbG9zIHNlY3RvcmVzICVsZC0lbGQgZnVlcmEgZGUgbGEgcGFydGljafNuIGVuICVzLiIKKworI34gbXNnaWQgIiIKKyN+ICJUaGlzIGV4dDIgZmlsZSBzeXN0ZW0gaGFzIGEgcmF0aGVyIHN0cmFuZ2UgbGF5b3V0ISAgUGFydGVkIGNhbid0IHJlc2l6ZSAiCisjfiAidGhpcyAoeWV0KS4iCisjfiBtc2dzdHIgIiIKKyN+ICKhRXN0ZSBzaXN0ZW1hIGRlIGZpY2hlcm9zIGV4dDIgdGllbmUgdW4gZGlzZfFvIG11eSBlc3RyYfFvISAgUGFydGVkIChh+m4pICIKKyN+ICJubyBwdWVkZSByZWRpbWVuc2lvbmFybG8uIgorCisjfiBtc2dpZCAiIgorI34gIllvdSByZXF1ZXN0ZWQgdG8gY3JlYXRlIGEgcGFydGl0aW9uIGF0ICVzIC0gJXMuIFRoZSBjbG9zZXN0IFBhcnRlZCBjYW4gIgorI34gIm1hbmFnZSBpcyAlcyAtICVzLiIKKyN+IG1zZ3N0ciAiIgorI34gIlBpZGnzIGNyZWFyIHVuYSBwYXJ0aWNp824gZW4gJXMgLSAlcy4gTG8gbeFzIGNlcmNhIHF1ZSBQYXJ0ZWQgcHVlZGUgIgorI34gIm1hbmVqYXIgZXMgJXMgLSAlcy4iCisKKyN+IG1zZ2lkICJEaXNrIGdlb21ldHJ5IGZvciAlczogJXMgLSAlc1xuIgorI34gbXNnc3RyICJHZW9tZXRy7WEgZGUgZGlzY28gcGFyYSAlczogJXMgLSAlc1xuIgorCisjfiBtc2dpZCAiRGlzayBsYWJlbCB0eXBlOiAlc1xuIgorI34gbXNnc3RyICJUaXBvIGRlIGV0aXF1ZXRhIGRlIGRpc2NvOiAlc1xuIgorCisjfiBtc2dpZCAiIgorI34gIllvdSByZXF1ZXN0ZWQgdG8gcmVzaXplIHRoZSBwYXJ0aXRpb24gdG8gJXMgLSAlcy4gIFRoZSBjbG9zZXN0IFBhcnRlZCBjYW4gIgorI34gIm1hbmFnZSBpcyAlcyAtICVzLiIKKyN+IG1zZ3N0ciAiIgorI34gIlBpZGnzIHJlZGltZW5zaW9uYXIgbGEgcGFydGljafNuIHBhcmEgJXMgLSAlcy4gTG8gbeFzIGNlcmNhIHF1ZSBQYXJ0ZWQgIgorI34gInB1ZWRlIG1hbmVqYXIgZXMgJXMgLSAlcy4iCisKKyN+IG1zZ2lkICIiCisjfiAiWW91IGZvdW5kIGEgYnVnIGluIEdOVSBQYXJ0ZWQuICBQbGVhc2UgZW1haWwgYSBidWcgcmVwb3J0IHRvIGJ1Zy0iCisjfiAicGFydGVkQGdudS5vcmcgY29udGFpbmluZyB0aGUgdmVyc2lvbiAoJXMpLCBhbmQgdGhlIGZvbGxvd2luZyBtZXNzYWdlOlxuIgorI34gbXNnc3RyICIiCisjfiAiRW5jb250cvMgdW4gYmljaG8gZW4gR05VIHBhcnRlZC4gIFBvciBmYXZvciwgZW527WUgdW4gaW5mb3JtZSBkZWwgYmljaG8gYSAiCisjfiAiYnVnLXBhcnRlZEBnbnUub3JnIGNvbnRlbmllZG8gbGEgdmVyc2nzbiAoJXMpLCB5IGVsIHNpZ3VpZW50ZSBtZW5zYWplOlxuIgorCisjIE5vIHNlIHB1ZWRlLgorI34gbXNnaWQgIkNvdWxkIG5vdCByZWFkIGdlb21ldHJ5IG9mICVzIC0gJXMuIgorI34gbXNnc3RyICJObyBzZSBwdWVkZSBsZWVyIGxhIGdlb21ldHLtYSBkZSAlcyAtICVzLiIKKworIyBQb24gYGRvZGdleScgZW50cmUgY29taXRhcywgcG9yIGxvIG1lbm9zIG1pZW50cmFzIG5vIHNlIGVuY3VlbnRyZSB1bmEKKyMgdHJhZHVjY2nzbi4KKyMgRW4gb3RyYXMgdHJhZHVjY2lvbmVzIGRlZmluZW4gZG9kZ2V5IGNvbW8gaW5hZG1pc2libGUgbyBleHRyYfFhLiB2bGwKKyN+IG1zZ2lkICJEZXZpY2UgJXMgaGFzIGRvZGdleSBnZW9tZXRyeS4iCisjfiBtc2dzdHIgIkVsIGRpc3Bvc2l0aXZvICVzIHRpZW5lIHVuYSBnZW9tZXRy7WEgaW5jb3JyZWN0YS4iCisKKyN+IG1zZ2lkICJTQ1NJIgorI34gbXNnc3RyICJTQ1NJIgorCisjIG5pbmd1bmEgKyBuaSBkb2JsZSBuZWdhY2nzbgorIyBZbyBsbyBkZWphcu1hIGVuICJubyBlcyB1bmEgdW5pZGFkIFNDU0kgbmkgSURFIgorI34gbXNnaWQgIkRldmljZSAlcyBpcyBuZWl0aGVyIGEgU0NTSSBub3IgSURFIGRyaXZlLiIKKyN+IG1zZ3N0ciAiRWwgZGlzcG9zaXRpdm8gJXMgbm8gZXMgdW5hIHVuaWRhZCBTQ1NJIG5pIElERS4iCisKKyN+IG1zZ2lkICJFcnJvciByZWFkaW5nICVzICglcykgdG8gZGV0ZXJtaW5lIGlmIHBhcnRpdGlvbiBpcyBtb3VudGVkLiIKKyN+IG1zZ3N0ciAiRXJyb3IgbGV5ZW5kbyAlcyAoJXMpIHBhcmEgZGV0ZXJtaW5hciBzaSBsYSBwYXJ0aWNp824gZXN04SBtb250YWRhLiIKKworIyBkZXRlY3RhcmEgLT4gZGV0ZWN08yAoc2UgZW50aWVuZGUgbWVqb3IpCisjIEJJT1MgZXMgbWFzY3VsaW5vIHB1ZXMgc2UgdHJhdGEgZGVsIFNpc3RlbWEgQuFzaWNvIGRlIEVudHJhZGEvU2FsaWRhCisjfiBtc2dpZCAiIgorI34gIlRoZSBwYXJ0aXRpb24gdGFibGUgb24gJXMgaXMgaW5jb25zaXN0ZW50LiAgVGhlcmUgYXJlIG1hbnkgcmVhc29ucyB3aHkgIgorI34gInRoaXMgbWlnaHQgYmUgdGhlIGNhc2UuICBIb3dldmVyLCB0aGUgbW9zdCBsaWtlbHkgcmVhc29uIGlzIHRoYXQgTGludXggIgorI34gImRldGVjdGVkIHRoZSBCSU9TIGdlb21ldHJ5IGZvciAlcyBpbmNvcnJlY3RseS4gIEdOVSBQYXJ0ZWQgc3VzcGVjdHMgdGhlICIKKyN+ICJyZWFsIGdlb21ldHJ5IHNob3VsZCBiZSAlZC8lZC8lZCAobm90ICVkLyVkLyVkKS4gIFlvdSBzaG91bGQgY2hlY2sgd2l0aCAiCisjfiAieW91ciBCSU9TIGZpcnN0LCBhcyB0aGlzIG1heSBub3QgYmUgY29ycmVjdC4gIFlvdSBjYW4gaW5mb3JtIExpbnV4IGJ5ICIKKyN+ICJhZGRpbmcgdGhlIHBhcmFtZXRlciAlcz0lZCwlZCwlZCB0byB0aGUgY29tbWFuZCBsaW5lLiAgU2VlIHRoZSBMSUxPIG9yICIKKyN+ICJHUlVCIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uICBJZiB5b3UgdGhpbmsgUGFydGVkJ3Mgc3VnZ2VzdGVkICIKKyN+ICJnZW9tZXRyeSBpcyBjb3JyZWN0LCB5b3UgbWF5IHNlbGVjdCBJZ25vcmUgdG8gY29udGludWUgKGFuZCBmaXggTGludXggIgorI34gImxhdGVyKS4gIE90aGVyd2lzZSwgc2VsZWN0IENhbmNlbCAoYW5kIGZpeCBMaW51eCBhbmQvb3IgdGhlIEJJT1Mgbm93KS4iCisjfiBtc2dzdHIgIiIKKyN+ICJMYSB0YWJsYSBkZSBwYXJ0aWNpb25lcyBlbiAlcyBlcyBpbmNvbnNpc3RlbnRlLiAgSGF5IHZhcmlhcyByYXpvbmVzIHBhcmEgIgorI34gInF1ZSBvY3VycmEgZXN0by4gU2luIGVtYmFyZ28sIGxhIHJhevNuIG3hcyBwcm9iYWJsZSBlcyBxdWUgTGludXggZGV0ZWN08yAiCisjfiAibGEgZ2VvbWV0cu1hIGRlIGxhIEJJT1MgcGFyYSAlcyBpbmNvcnJlY3RhbWVudGUuICBHTlUgUGFydGVkIHNvc3BlY2hhIHF1ZSAiCisjfiAibGEgZ2VvbWV0cu1hIHJlYWwgZGViZXLtYSBzZXIgJWQvJWQvJWQgKHkgbm8gJWQvJWQvJWQpLiAgRGViZXLtYSAiCisjfiAiY29tcHJvYmFyIHN1IEJJT1MgcHJpbWVybywgcHVlcyBlc3RhIHB1ZWRlIG5vIHNlciBjb3JyZWN0YS4gUHVlZGUgIgorI34gImluZm9ybWFyIGEgTGludXggYfFhZGllbmRvIGVsIHBhcuFtZXRybyAlcz0lZCwlZCwlZCBlbiBsYSBs7W5lYSBkZSAiCisjfiAi83JkZW5lcy4gIFZlYSBsYSBkb2N1bWVudGFjafNuIGRlIExJTE8gbyBHUlVCIHBhcmEgb2J0ZW5lciBt4XMgIgorI34gImluZm9ybWFjafNuLiAgU2kgY3JlZSBxdWUgbGEgZ2VvbWV0cu1hIHN1Z2VyaWRhIHBvciBQYXJ0ZWQgZXMgY29ycmVjdGEsICIKKyN+ICJwdWVkZSBzZWxlY2Npb25hciBJZ25vcmFyIHBhcmEgY29udGludWFyICh5IGFycmVnbGFyIExpbnV4IGRlc3B16XMpLiAgRGUgIgorI34gImxvIGNvbnRyYXJpbywgc2VsZWNjaW9uZSBDYW5jZWxhciAoeSByZXBhcmUgTGludXggeS9vIGxhIEJJT1MgYWhvcmEpLiIKKworIyB0YWJsYSBkZSBwYXJ0aWNpb25lcworI34gbXNnaWQgIiIKKyN+ICJUaGUgcGFydGl0aW9uIHRhYmxlIG9uICVzIGlzIGluY29uc2lzdGVudC4gIFRoZXJlIGFyZSBtYW55IHJlYXNvbnMgd2h5ICIKKyN+ICJ0aGlzIG1pZ2h0IGJlIHRoZSBjYXNlLiAgT2Z0ZW4sIHRoZSByZWFzb24gaXMgdGhhdCBMaW51eCBkZXRlY3RlZCB0aGUgIgorI34gIkJJT1MgZ2VvbWV0cnkgaW5jb3JyZWN0bHkuICBIb3dldmVyLCB0aGlzIGRvZXMgbm90IGFwcGVhciB0byBiZSB0aGUgY2FzZSAiCisjfiAiaGVyZS4gIEl0IGlzIHNhZmUgdG8gaWdub3JlLGJ1dCBpZ25vcmluZyBtYXkgY2F1c2UgKGZpeGFibGUpIHByb2JsZW1zICIKKyN+ICJ3aXRoIHNvbWUgYm9vdCBsb2FkZXJzLCBhbmQgbWF5IGNhdXNlIHByb2JsZW1zIHdpdGggRkFUIGZpbGUgc3lzdGVtcy4gICIKKyN+ICJVc2luZyBMQkEgaXMgcmVjb21tZW5kZWQuIgorI34gbXNnc3RyICIiCisjfiAiTGEgdGFibGEgZGUgcGFydGljaW9uZXMgZW4gJXMgZXMgaW5jb25zaXN0ZW50ZS4gIEhheSB2YXJpYXMgcmF6b25lcyBwYXJhICIKKyN+ICJxdWUgZXN0byBvY3VycmEuIE11Y2hhcyB2ZWNlcywgbGEgcmF6824gZXMgcXVlIExpbnV4IGRldGVjdGEgbGEgZ2VvbWV0cu1hICIKKyN+ICJkZSBsYSBCSU9TIGluY29ycmVjdGFtZW50ZS4gU2luIGVtYmFyZ28sIGVzdGUgbm8gcGFyZWNlIHNlciBlbCBjYXNvIGFxde0uICIKKyN+ICJQdWVkZSBlc3RhciBzZWd1cm8gaWdub3LhbmRvbG8sIHBlcm8gZWwgaWdub3JhcmxvIHB1ZWRlIGNhdXNhciBwcm9ibGVtYXMgIgorI34gIihyZXBhcmFibGVzKSBjb24gYWxndW5vcyBjYXJnYWRvcmVzIGRlIGFycmFucXVlLCB5IHB1ZWRlIGNhdXNhciBwcm9ibGVtYXMgIgorI34gImNvbiBzaXN0ZW1hcyBkZSBmaWNoZXJvcyBGQVQuIEVzIHJlY29tZW5kYWJsZSB1c2FyIExCQS4iCisKKyMgcGFydGl0aW9uaW5nIHRvb2wgLT4gaGVycmFtaWVudGEgZGUgcGFydGljaW9uYWRvLgorI34gbXNnaWQgIiIKKyN+ICJVbmFibGUgdG8gYWxpZ24gcGFydGl0aW9uIHByb3Blcmx5LiAgVGhpcyBwcm9iYWJseSBtZWFucyB0aGF0IGFub3RoZXIgIgorI34gInBhcnRpdGlvbmluZyB0b29sIGdlbmVyYXRlZCBhbiBpbmNvcnJlY3QgcGFydGl0aW9uIHRhYmxlLCBiZWNhdXNlIGl0ICIKKyN+ICJkaWRuJ3QgaGF2ZSB0aGUgY29ycmVjdCBCSU9TIGdlb21ldHJ5LiAgSXQgaXMgc2FmZSB0byBpZ25vcmUsYnV0IGlnbm9yaW5nICIKKyN+ICJtYXkgY2F1c2UgKGZpeGFibGUpIHByb2JsZW1zIHdpdGggc29tZSBib290IGxvYWRlcnMuIgorI34gbXNnc3RyICIiCisjfiAiTm8gc2UgcHVlZGUgYWxpbmVhciBjb3JyZWN0YW1lbnRlIGxhIHBhcnRpY2nzbi4gRXN0byBwcm9iYWJsZW1lbnRlICIKKyN+ICJzaWduaWZpY2EgcXVlIG90cmEgaGVycmFtaWVudGEgZGUgcGFydGljaW9uYWRvIGhhIGdlbmVyYWRvIHVuYSB0YWJsYSBkZSAiCisjfiAibGEgcGFydGljafNuIGluY29ycmVjdGEsIHBvcnF1ZSBubyB0aWVuZSBjb3JyZWN0YSBsYSBnZW9tZXRy7WEgZGUgbGEgIgorI34gIkJJT1MuIFB1ZWRlIGVzdGFyIHNlZ3VybyBpZ25vcuFuZG9sbywgcGVybyBlbCBpZ25vcmFybG8gcHVlZGUgY2F1c2FyICIKKyN+ICJwcm9ibGVtYXMgKHJlcGFyYWJsZXMpIGNvbiBhbGd1bm9zIGNhcmdhZG9yZXMgZGUgYXJyYW5xdWUuIgorCisjfiBtc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGludmFsaWQgc2lnbmF0dXJlIGZvciBhIEZBVCBmaWxlIHN5c3RlbXMuIgorI34gbXNnc3RyICIiCisjfiAiRWwgc2lzdGVtYSBkZSBmaWNoZXJvcyB0aWVuZSB1bmEgZmlybWEgaW524WxpZGEgcGFyYSB1biBzaXN0ZW1hIGRlICIKKyN+ICJmaWNoZXJvcyBGQVQuIgorCisjfiBtc2dpZCAiU1RBUlQgYW5kIEVORCBhcmUgaW4gbWVnYWJ5dGVzXG4iCisjfiBtc2dzdHIgIklOSUNJTyB5IEZJTiBzb24gZW4gbWVnYWJ5dGVzXG4iCisKKyN+IG1zZ2lkICJQYXJ0aXRpb24gaXMgYmVpbmcgdXNlZC4iCisjfiBtc2dzdHIgIkxhIHBhcnRpY2nzbiBlc3ThIHNpZW5kbyB1c2FkYS4iCisKKyN+IG1zZ2lkICJNaW5vciAgICBTdGFydCAgICAgICBFbmQgICAgICIKKyN+IG1zZ3N0ciAiTWlub3IgICBJbmljaW8gICAgICBGaW4gICAgICIKKworI34gbXNnaWQgIlR5cGUgICAgICAiCisjfiBtc2dzdHIgIlRpcG8gICAgICAiCisKKyN+IG1zZ2lkICJGaWxlc3lzdGVtICAiCisjfiBtc2dzdHIgIlNpc3RlbWEgZGUgZmljaGVyb3MgICIKKworI34gbXNnaWQgIk5hbWUgICAgICAgICAgICAgICAgICAiCisjfiBtc2dzdHIgIk5vbWJyZSAgICAgICAgICAgICAgICIKKworI34gbXNnaWQgIiIKKyN+ICIgIFlvdSBoYXZlIFdpbmRvd3MgRkFUIHBhcnRpdGlvbihzKSB0aGF0IGFyZSBub3QgdXNpbmcgTEJBLiAgSWYgeW91ciBCSU9TICIKKyN+ICJzdXBwb3J0cyBMQkEsIHRoZW4geW91IHNob3VsZCBzd2l0Y2ggdG8gTEJBIGJ5IHNldHRpbmcgdGhlIExCQSBmbGFnIG9uICIKKyN+ICJhbGwgRkFUIHBhcnRpdGlvbnMuICBPdGhlcndpc2UsIG1ha2Ugc3VyZSB0aGUgb3BlcmF0aW5nIHN5c3RlbSBhbmQgdGhlICIKKyN+ICJCSU9TIGhhdmUgdGhlIHNhbWUgZ2VvbWV0cnkgYmVmb3JlIHJlc2l6aW5nIGFueSBGQVQgcGFydGl0aW9ucy4iCisjfiBtc2dzdHIgIiIKKyN+ICIgIFRpZW5lIHBhcnRpY2lvbmVzIEZBVCBXaW5kb3dzIHF1ZSBubyBlc3ThbiB1c2FuZG8gTEJBLiAgU2kgc3UgQklPUyAiCisjfiAic29wb3J0YSBMQkEsIGRlYmVy7WEgY2FtYmlhcnNlIGEgTEJBIHBvbmllbmRvIGVsIG1vZGlmaWNhZG9yIExCQSBlbiB0b2RhcyAiCisjfiAibGFzIHBhcnRpY2lvbmVzIEZBVC4gRGUgb3RybyBtb2RvLCBhc2Vn+nJlc2UgZGUgcXVlIGVsIHNpc3RlbWEgb3BlcmF0aXZvICIKKyN+ICJ5IGxhIEJJT1MgdGllbmVuIGxhIG1pc21hIGdlb21ldHLtYSBhbnRlcyBkZSByZWRpbWVuc2lvbmFyIGN1YWxxdWllcmEgZGUgIgorI34gImxhcyBwYXJ0aWNpb25lcyBGQVQuIgorCisjfiBtc2dpZCAiIgorI34gIlRoZSBvcGVyYXRpbmcgc3lzdGVtIHRoaW5rcyB0aGUgZ2VvbWV0cnkgb24gJXMgaXMgJWQvJWQvJWQuICBUaGVyZWZvcmUsICIKKyN+ICJjeWxpbmRlciAxMDI0IGVuZHMgYXQgJS4zZk0uJXMiCisjfiBtc2dzdHIgIiIKKyN+ICJFbCBzaXN0ZW1hIG9wZXJhdGl2byBvcGluYSBxdWUgbGEgZ2VvbWV0cu1hIGVuICVzIGVzICVkLyVkLyVkLiAgUG9yICIKKyN+ICJjb25zaWd1aWVudGUsIGVsIGNpbGluZHJvIDEwMjQgdGVybWluYSBlbiAlLjNmTS4lcyIKKworIyBjcmVlLCBwaWVuc2EgKG5vIHPpLCBlc28gZGUgIm9waW5hIiBubyBtZSBwZWdhLCB5YSBz6SBxdWUgbG9zIG9yZGVuYWRvcmVzCisjIG5vIHBpZW5zYW4gbmkgdGllbmVuIGNyZWVuY2lhcywgcGVybyBtZSBwZWdhIG1lbm9zIHRvZGF27WEgcXVlIHRlbmdhbgorIyBvcGluaW9uZXMpLgorI34gbXNnaWQgIlRoZSBvcGVyYXRpbmcgc3lzdGVtIHRoaW5rcyB0aGUgZ2VvbWV0cnkgb24gJXMgaXMgJWQvJWQvJWQuJXMiCisjfiBtc2dzdHIgIkVsIHNpc3RlbWEgb3BlcmF0aXZvIGNyZWUgcXVlIGxhIGdlb21ldHLtYSBlbiAlcyBlcyAlZC8lZC8lZC4lcyIKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9wby9mci5nbW8gYi9wYXJ0ZWQtMS44LjcvcG8vZnIuZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNWFhNmYKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvcG8vZnIuZ21vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9wby9mci5wbyBiL3BhcnRlZC0xLjguNy9wby9mci5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmQxOTBiCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L3BvL2ZyLnBvCkBAIC0wLDAgKzEsMzg0MiBAQAorIyBNZXNzYWdlcyBmcmFu52FpcyBwb3VyIEdOVSBQYXJ0ZWQuCisjIENvcHlyaWdodCCpIDIwMDEsIDIwMDQsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIE1pY2hlbCBSb2JpdGFpbGxlIDxyb2JpdGFpbEBJUk8uVU1vbnRyZWFsLkNBPiwgdHJhZHVjdGV1ciBzaW5jZS9kZXB1aXMgMTk5Ni4KKyMgTGF1cmVudCBNYXJzYWMgPGxhdXJlbnQgRE9UIG1hcnNhYyBBVCBsYXBvc3RlIERPVCBuZXQ+IDIwMDYKKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IHBhcnRlZCAxLjcuMHJjMVxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBidWctcGFydGVkQGdudS5vcmdcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAwNy0wNS0wOSAxNzowMi0wNDAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwNi0wNy0xNSAxMDo1Mi0wNTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBNaWNoZWwgUm9iaXRhaWxsZSA8cm9iaXRhaWxASVJPLlVNb250cmVhbC5DQT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBGcmVuY2ggPHRyYWR1Y0B0cmFkdWMub3JnPlxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTy04ODU5LTFcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4LWJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuID4gMSk7XG4iCisKKyM6IGxpYi9jbG9zZW91dC5jOjc0Cittc2dpZCAid3JpdGUgZXJyb3IiCittc2dzdHIgIiIKKworIzogbGliL2Vycm9yLmM6MTI1CisjLCBmdXp6eQorbXNnaWQgIlVua25vd24gc3lzdGVtIGVycm9yIgorbXNnc3RyICJUeXBlIGRlIHN5c3TobWUgZGUgZmljaGllcnMgaW5jb25udSBcIiVzXCIuIgorCisjOiBsaWIvZ2V0b3B0LmM6NTMxIGxpYi9nZXRvcHQuYzo1NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiBgJXMnIGlzIGFtYmlndW91c1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo1ODAgbGliL2dldG9wdC5jOjU4NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIGAtLSVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjU5MyBsaWIvZ2V0b3B0LmM6NTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYCVjJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6NjQxIGxpYi9nZXRvcHQuYzo2NjAgbGliL2dldG9wdC5jOjk3NiBsaWIvZ2V0b3B0LmM6OTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYCVzJyByZXF1aXJlcyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo2OTggbGliL2dldG9wdC5jOjcwMQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5yZWNvZ25pemVkIG9wdGlvbiBgLS0lcydcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6NzA5IGxpYi9nZXRvcHQuYzo3MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVucmVjb2duaXplZCBvcHRpb24gYCVjJXMnXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjc2NCBsaWIvZ2V0b3B0LmM6NzY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbGxlZ2FsIG9wdGlvbiAtLSAlY1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo3NzMgbGliL2dldG9wdC5jOjc3NgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBvcHRpb24gLS0gJWNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6ODI4IGxpYi9nZXRvcHQuYzo4NDQgbGliL2dldG9wdC5jOjEwNDggbGliL2dldG9wdC5jOjEwNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCAtLSAlY1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo4OTcgbGliL2dldG9wdC5jOjkxMworIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIGAtVyAlcycgaXMgYW1iaWd1b3VzXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjkzNyBsaWIvZ2V0b3B0LmM6OTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYC1XICVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6CisjLiBHZXQgdHJhbnNsYXRpb25zIGZvciBvcGVuIGFuZCBjbG9zaW5nIHF1b3RhdGlvbiBtYXJrcy4KKyMuCisjLiBUaGUgbWVzc2FnZSBjYXRhbG9nIHNob3VsZCB0cmFuc2xhdGUgImAiIHRvIGEgbGVmdAorIy4gcXVvdGF0aW9uIG1hcmsgc3VpdGFibGUgZm9yIHRoZSBsb2NhbGUsIGFuZCBzaW1pbGFybHkgZm9yCisjLiAiJyIuICBJZiB0aGUgY2F0YWxvZyBoYXMgbm8gdHJhbnNsYXRpb24sCisjLiBsb2NhbGVfcXVvdGluZ19zdHlsZSBxdW90ZXMgYGxpa2UgdGhpcycsIGFuZAorIy4gY2xvY2FsZV9xdW90aW5nX3N0eWxlIHF1b3RlcyAibGlrZSB0aGlzIi4KKyMuCisjLiBGb3IgZXhhbXBsZSwgYW4gQW1lcmljYW4gRW5nbGlzaCBVbmljb2RlIGxvY2FsZSBzaG91bGQKKyMuIHRyYW5zbGF0ZSAiYCIgdG8gVSsyMDFDIChMRUZUIERPVUJMRSBRVU9UQVRJT04gTUFSSyksIGFuZAorIy4gc2hvdWxkIHRyYW5zbGF0ZSAiJyIgdG8gVSsyMDFEIChSSUdIVCBET1VCTEUgUVVPVEFUSU9OCisjLiBNQVJLKS4gIEEgQnJpdGlzaCBFbmdsaXNoIFVuaWNvZGUgbG9jYWxlIHNob3VsZCBpbnN0ZWFkCisjLiB0cmFuc2xhdGUgdGhlc2UgdG8gVSsyMDE4IChMRUZUIFNJTkdMRSBRVU9UQVRJT04gTUFSSykgYW5kCisjLiBVKzIwMTkgKFJJR0hUIFNJTkdMRSBRVU9UQVRJT04gTUFSSyksIHJlc3BlY3RpdmVseS4KKyMuCisjLiBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIHB1dCBoZXJlLCBwbGVhc2Ugc2VlCisjLiA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9RdW90YXRpb25fbWFyayNHbHlwaHM+CisjLiBhbmQgdXNlIGdseXBocyBzdWl0YWJsZSBmb3IgeW91ciBsYW5ndWFnZS4KKyM6IGxpYi9xdW90ZWFyZy5jOjIyOQorbXNnaWQgImAiCittc2dzdHIgIiIKKworIzogbGliL3F1b3RlYXJnLmM6MjMwCittc2dpZCAiJyIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjEzMQorbXNnaWQgIlN1Y2Nlc3MiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxMzQKK21zZ2lkICJObyBtYXRjaCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjEzNworbXNnaWQgIkludmFsaWQgcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTQwCittc2dpZCAiSW52YWxpZCBjb2xsYXRpb24gY2hhcmFjdGVyIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTQzCittc2dpZCAiSW52YWxpZCBjaGFyYWN0ZXIgY2xhc3MgbmFtZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE0NgorbXNnaWQgIlRyYWlsaW5nIGJhY2tzbGFzaCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE0OQorbXNnaWQgIkludmFsaWQgYmFjayByZWZlcmVuY2UiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNTIKK21zZ2lkICJVbm1hdGNoZWQgWyBvciBbXiIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE1NQorbXNnaWQgIlVubWF0Y2hlZCAoIG9yIFxcKCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE1OAorbXNnaWQgIlVubWF0Y2hlZCBcXHsiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNjEKK21zZ2lkICJJbnZhbGlkIGNvbnRlbnQgb2YgXFx7XFx9IgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTY0CisjLCBmdXp6eQorbXNnaWQgIkludmFsaWQgcmFuZ2UgZW5kIgorbXNnc3RyICJOb21icmUgaW52YWxpZGUuIgorCisjOiBsaWIvcmVnY29tcC5jOjE2NworbXNnaWQgIk1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNzAKK21zZ2lkICJJbnZhbGlkIHByZWNlZGluZyByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNzMKK21zZ2lkICJQcmVtYXR1cmUgZW5kIG9mIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE3NgorbXNnaWQgIlJlZ3VsYXIgZXhwcmVzc2lvbiB0b28gYmlnIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTc5Cittc2dpZCAiVW5tYXRjaGVkICkgb3IgXFwpIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6NjgwCittc2dpZCAiTm8gcHJldmlvdXMgcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9ycG1hdGNoLmM6NzAKK21zZ2lkICJeW3lZXSIKK21zZ3N0ciAiIgorCisjOiBsaWIvcnBtYXRjaC5jOjczCittc2dpZCAiXltuTl0iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IFRyYW5zbGF0ZSAiKEMpIiB0byB0aGUgY29weXJpZ2h0IHN5bWJvbAorIy4gKEMtaW4tYS1jaXJjbGUpLCBpZiB0aGlzIHN5bWJvbCBpcyBhdmFpbGFibGUgaW4gdGhlIHVzZXIncworIy4gbG9jYWxlLiAgT3RoZXJ3aXNlLCBkbyBub3QgdHJhbnNsYXRlICIoQykiOyBsZWF2ZSBpdCBhcy1pcy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjY2Cittc2dpZCAiKEMpIgorbXNnc3RyICIiCisKKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjY4Cittc2dpZCAiIgorIlxuIgorIkxpY2Vuc2UgR1BMdjIrOiBHTlUgR1BMIHZlcnNpb24gMiBvciBsYXRlciA8aHR0cDovL2dudS5vcmcvbGljZW5zZXMvZ3BsLiIKKyJodG1sPlxuIgorIlRoaXMgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGFyZSBmcmVlIHRvIGNoYW5nZSBhbmQgcmVkaXN0cmlidXRlIGl0LlxuIgorIlRoZXJlIGlzIE5PIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXcuXG4iCisiXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6ICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJXcml0dGVuIGJ5ICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzo4OAorIywgYy1mb3JtYXQKK21zZ2lkICJXcml0dGVuIGJ5ICVzIGFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIzogbGliL3ZlcnNpb24tZXRjLmM6OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiV3JpdHRlbiBieSAlcywgJXMsIGFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorImFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzoxMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyIlcywgYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjLiBZb3UgY2FuIHVzZSBsaW5lIGJyZWFrcywgZXN0aW1hdGluZyB0aGF0IGVhY2ggYXV0aG9yIG5hbWUgb2NjdXBpZXMKKyMuIGNhLiAxNiBzY3JlZW4gY29sdW1ucyBhbmQgdGhhdCBhIHNjcmVlbiBsaW5lIGhhcyBjYS4gODAgY29sdW1ucy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorIiVzLCAlcywgYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjLiBZb3UgY2FuIHVzZSBsaW5lIGJyZWFrcywgZXN0aW1hdGluZyB0aGF0IGVhY2ggYXV0aG9yIG5hbWUgb2NjdXBpZXMKKyMuIGNhLiAxNiBzY3JlZW4gY29sdW1ucyBhbmQgdGhhdCBhIHNjcmVlbiBsaW5lIGhhcyBjYS4gODAgY29sdW1ucy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjExNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorIiVzLCAlcywgJXMsIGFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzoxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyIlcywgJXMsICVzLCAlcyxcbiIKKyJhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6MTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiJXMsICVzLCAlcywgJXMsXG4iCisiJXMsIGFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzoxNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyIlcywgJXMsICVzLCAlcyxcbiIKKyIlcywgJXMsIGFuZCBvdGhlcnMuXG4iCittc2dzdHIgIiIKKworIzogbGliL3hhbGxvYy1kaWUuYzozNQorbXNnaWQgIm1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjIzNworbXNnaWQgIkRpc2sgSW1hZ2UiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjMzOCBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzoyNjEKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTI3MgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBvcGVuaW5nICVzOiAlcyIKK21zZ3N0ciAiRXJyZXVyIHBlbmRhbnQgbCdvdXZlcnR1cmUgZGUgJXM6ICVzIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6MzQ5IGxpYnBhcnRlZC9hcmNoL2dudS5jOjI3MQorIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBvcGVuICVzIHJlYWQtd3JpdGUgKCVzKS4gICVzIGhhcyBiZWVuIG9wZW5lZCByZWFkLW9ubHkuIgorbXNnc3RyICIiCisiSW1wb3NzaWJsZSBkJ291dnJpciAlcyBlbiBsZWN0dXJlLeljcml0dXJlICglcykuICVzIGEg6XTpIG91dmVydCBlbiBsZWN0dXJlICIKKyJzZXVsZS4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzo0MTEgbGlicGFydGVkL2FyY2gvbGludXguYzoxNDMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGR1cmluZyBzZWVrIGZvciByZWFkIG9uICVzIgorbXNnc3RyICIlcyBsb3JzIGQndW4gcG9zaXRpb25uZW1lbnQgcG91ciBsZWN0dXJlIHN1ciAlcyIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjQ0NCBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo0NDkgbGlicGFydGVkL2FyY2gvZ251LmM6NTQ4CisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo2NzYgbGlicGFydGVkL2FyY2gvbGludXguYzoxMzkxCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjE0NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZHVyaW5nIHJlYWQgb24gJXMiCittc2dzdHIgIiVzIGxvcnMgZGUgbGEgbGVjdHVyZSBzdXIgJXMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzo0ODAgbGlicGFydGVkL2FyY2gvZ251LmM6NTA5CisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjE1NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2FuJ3Qgd3JpdGUgdG8gJXMsIGJlY2F1c2UgaXQgaXMgb3BlbmVkIHJlYWQtb25seS4iCittc2dzdHIgIk5lIHBldXQg6WNyaXJlIHN1ciAlcyBjYXIgaWwgZXN0IG91dmVydCBlbiBsZWN0dXJlIHNldWxlLiIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjQ5NiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjE1NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZHVyaW5nIHNlZWsgZm9yIHdyaXRlIG9uICVzIgorbXNnc3RyICIlcyBsb3JzIGQndW4gcG9zaXRpb25uZW1lbnQgcG91ciDpY3JpdHVyZSBzdXIgJXMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzo1MzMgbGlicGFydGVkL2FyY2gvZ251LmM6NTg1IGxpYnBhcnRlZC9hcmNoL2dudS5jOjYzMAorIzogbGlicGFydGVkL2FyY2gvZ251LmM6NzA3IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTUxNworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxNjEyIGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTY4NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkdXJpbmcgd3JpdGUgb24gJXMiCittc2dzdHIgIiVzIGxvcnMgZGUgbCfpY3JpdHVyZSBzdXIgJXMiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6NjMgcGFydHByb2JlL3BhcnRwcm9iZS5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICJUcnkgYCVzIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4iCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICVzIFtPUFRJT05dXG4iCisiICBvcjogICVzIERFVklDRSBNSU5PUlxuIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6NzAKK21zZ2lkICIiCisiQ2xlYXIgdW51c2VkIHNwYWNlIG9uIGEgRkFUIHBhcnRpdGlvbiAoYSBHTlUgUGFydGVkIHRlc3RpbmcgdG9vbCkuXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo3NAorbXNnaWQgIiAgICAgIC0taGVscCAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXRcbiIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjc1Cittc2dpZCAiICAgICAgLS12ZXJzaW9uICBvdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdFxuIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6NzcgcGFydHByb2JlL3BhcnRwcm9iZS5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiUmVwb3J0IGJ1Z3MgdG8gPCVzPi5cbiIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjI4NQorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gZmV3IGFyZ3VtZW50cyIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjI5MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIgorbXNnc3RyICJUcm9wIGRlIHBhZ2VzIGVycm9u6WVzLiIKKworIzogcGFydHByb2JlL3BhcnRwcm9iZS5jOjE0MQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgW09QVElPTl0gW0RFVklDRV0uLi5cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0cHJvYmUvcGFydHByb2JlLmM6MTQyCittc2dpZCAiIgorIkluZm9ybSB0aGUgT1Mgb2YgcGFydGl0aW9uIHRhYmxlIGNoYW5nZXMuXG4iCisiXG4iCisiICAtZCwgLS1uby11cGRhdGUgIGRvbid0IHVwZGF0ZSB0aGUga2VybmVsXG4iCisiICAtcywgLS1zdW1tYXJ5ICAgIHByaW50IGEgc3VtbWFyeSBvZiBjb250ZW50c1xuIgorIiAgLWgsIC0taGVscCAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdFxuIgorIiAgLXYsIC0tdmVyc2lvbiAgICBvdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdFxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRwcm9iZS9wYXJ0cHJvYmUuYzoxNTAKK21zZ2lkICIiCisiXG4iCisiV2l0aCBubyBERVZJQ0UsIHByb2JlIGFsbCBwYXJ0aXRpb25zLlxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBvcGVuICVzLiIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkJ291dnJpciAlcy4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjExNAorbXNnaWQgIlVuYWJsZSB0byBwcm9iZSBzdG9yZS4iCittc2dzdHIgIkltcG9zc2libGUgZGUgc29uZGVyIGxlIHN0b2NrYWdlLiIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6MzUyCittc2dpZCAiIgorIlRoZSBwYXJ0aXRpb24gdGFibGUgY2Fubm90IGJlIHJlLXJlYWQuICBUaGlzIG1lYW5zIHlvdSBuZWVkIHRvIHJlYm9vdCBiZWZvcmUgIgorIm1vdW50aW5nIGFueSBtb2RpZmllZCBwYXJ0aXRpb25zLiAgWW91IGFsc28gbmVlZCB0byByZWluc3RhbGwgeW91ciBib290ICIKKyJsb2FkZXIgYmVmb3JlIHlvdSByZWJvb3QgKHdoaWNoIG1heSByZXF1aXJlIG1vdW50aW5nIG1vZGlmaWVkIHBhcnRpdGlvbnMpLiAgIgorIkl0IGlzIGltcG9zc2libGUgZG8gYm90aCB0aGluZ3MhICBTbyB5b3UnbGwgbmVlZCB0byBib290IG9mZiBhIHJlc2N1ZSBkaXNrLCAiCisiYW5kIHJlaW5zdGFsbCB5b3VyIGJvb3QgbG9hZGVyIGZyb20gdGhlIHJlc2N1ZSBkaXNrLiAgUmVhZCBzZWN0aW9uIDQgb2YgdGhlICIKKyJQYXJ0ZWQgVXNlciBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiIgorIkxhIHRhYmxlIGRlIHBhcnRpdGlvbiBuZSBwZXV0IOp0cmUgcmVsdWUsIHZvdXMgYXZleiBkb25jIGJlc29pbiBkZSAiCisicmVk6W1hcnJlciBhdmFudCBkZSBtb250ZXIgdG91dGUgcGFydGl0aW9uIG1vZGlmaellLiBWb3VzIGRldmV6IGF1c3NpICIKKyJy6Wluc3RhbGxlciBsZSBnZXN0aW9ubmFpcmUgZGUgZOltYXJyYWdlIGF2YW50IGRlIHJlZOltYXJyZXIgKGNlIHF1aSBwZXV0ICIKKyJu6WNlc3NpdGVyIGRlIG1vbnRlciBsZXMgcGFydGl0aW9ucyBtb2RpZmnpZXMpLiBJbCBlc3QgaW1wb3NzaWJsZSBkZSBmYWlyZSAiCisiY2VzIGNob3NlcyBlbnNlbWJsZSAhIEMnZXN0IHBvdXJxdW9pIHZvdXMgYXVyZXogYmVzb2luIGRlIGTpbWFycmVyIOAgcGFydGlyICIKKyJkJ3VuIGRpc3F1ZSBkZSBzZWNvdXJzIGV0IGRlIHLpLWluc3RhbGxlciBsZSBnZXN0aW9ubmFpcmUgZGUgZOltYXJyYWdlIOAgIgorInBhcnRpciBkZSBjZSBkaXNxdWUuIENvbnN1bHRleiBsYSBzZWN0aW9uIDQgZGUgbGEgZG9jdW1lbnRhdGlvbiB1dGlsaXNhdGV1ciAiCisiZGUgUGFydGVkIHBvdXIgcGx1cyBkZSBk6XRhaWxzLiIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6MzY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgcGFydGl0aW9uIHRhYmxlIG9uICVzIGNhbm5vdCBiZSByZS1yZWFkICglcykuICBUaGlzIG1lYW5zIHRoZSBIdXJkIGtub3dzICIKKyJub3RoaW5nIGFib3V0IGFueSBtb2RpZmljYXRpb25zIHlvdSBtYWRlLiAgWW91IHNob3VsZCByZWJvb3QgeW91ciBjb21wdXRlciAiCisiYmVmb3JlIGRvaW5nIGFueXRoaW5nIHdpdGggJXMuIgorbXNnc3RyICIiCisiTGEgdGFibGUgZGUgcGFydGl0aW9uIHN1ciAlcyBuZSBwZXV0IOp0cmUgcmVsdWUgKCVzKS4gQ2VsYSBzaWduaWZpZSBxdWUgSHVyZCAiCisibmUgY29ubmHudCByaWVuIGRlcyBtb2RpZmljYXRpb25zIGVmZmVjdHXpZXMuIFZvdXMgZGV2cmlleiByZWTpbWFycmVyICIKKyJsJ29yZGluYXRldXIgYXZhbnQgZGUgZmFpcmUgcXVvaXF1ZSBjZSBzb2l0IGF2ZWMgJXMuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzozODAgcGFydGVkL3BhcnRlZC5jOjI0NDMKK21zZ2lkICIiCisiWW91IHNob3VsZCByZWluc3RhbGwgeW91ciBib290IGxvYWRlciBiZWZvcmUgcmVib290aW5nLiAgUmVhZCBzZWN0aW9uIDQgb2YgIgorInRoZSBQYXJ0ZWQgVXNlciBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiIgorIlZvdXMgZGV2cmlleiBy6Wluc3RhbGxlciBsZSBnZXN0aW9ubmFpcmUgZGUgZOltYXJyYWdlIGF2YW50IGRlIHJlZOltYXJyZXIuICIKKyJDb25zdWx0ZXogbGEgc2VjdGlvbiA0IGRlIGxhIGRvY3VtZW50YXRpb24gdXRpbGlzYXRldXIgZGUgUGFydGVkIHBvdXIgcGx1cyAiCisiZCdpbmZvcm1hdGlvbnMuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo3NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdHJ5aW5nIHRvIHN5bmMgJXMgdG8gZGlzayIKK21zZ3N0ciAiJXMgZXNzYWllIGRlIHN5bmNocm9uaXNlciAlcyBzdXIgbGUgZGlzcXVlIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjQwOAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc3RhdCBkZXZpY2UgJXMgLSAlcy4iCittc2dzdHIgIk5lIHBldXQg6XZhbHVlciBsZSBzdGF0dXQgZHUgcOlyaXBo6XJpcXVlICVzIC0gJXMuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjUyMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBkZXRlcm1pbmUgc2VjdG9yIHNpemUgZm9yICVzOiAlcy5cbiIKKyJVc2luZyB0aGUgZGVmYXVsdCBzZWN0b3Igc2l6ZSAoJWxsZCkuIgorbXNnc3RyICIiCisiSW1wb3NzaWJsZSBkZSB06WRlcm1pbmVyIGxhIHRhaWxsZSBkZXMgc2VjdGV1cnMgZGUgJXMgOiAlcy5cbiIKKyJPbiB1dGlsaXNlIGxhIHRhaWxsZSBkZXMgc2VjdGV1cnMgcGFyIGRlZmF1dCAoJWQpLiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo1MzkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJEZXZpY2UgJXMgaGFzIGEgbG9naWNhbCBzZWN0b3Igc2l6ZSBvZiAlbGxkLiAgTm90IGFsbCBwYXJ0cyBvZiBHTlUgUGFydGVkICIKKyJzdXBwb3J0IHRoaXMgYXQgdGhlIG1vbWVudCwgYW5kIHRoZSB3b3JraW5nIGNvZGUgaXMgSElHSExZIEVYUEVSSU1FTlRBTC5cbiIKK21zZ3N0ciAiIgorIkxhIHRhaWxsZSBkZXMgc2VjdGV1cnMgbG9naXF1ZXMgcG91ciAlcyBlc3QgJWQuIFRvdXMgbGVzIGNvbXBvc2FudHMgZGUgR05VICIKKyJQYXJ0ZWQgbmUgc3VwcG9ydGVudCBwYXMgY2VsYSBwb3VyIGwnaW5zdGFudC5cbiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo1NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGRldGVybWluZSB0aGUgc2l6ZSBvZiAlcyAoJXMpLiIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBk6XRlcm1pbmVyIGxhIHRhaWxsZSBkZSAlcyAoJXMpLiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo2NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGdldCBpZGVudGl0eSBvZiBkZXZpY2UgJXMgLSAlcyIKK21zZ3N0ciAiTmUgcGV1dCBvYnRlbmlyIGwnaWRlbnRpdOkgZHUgcOlyaXBo6XJpcXVlICVzIC0gJXMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6Njc3Cittc2dpZCAiR2VuZXJpYyBJREUiCittc2dzdHIgIklERSBn6W7pcmlxdWUiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6Njk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJEZXZpY2UgJXMgaGFzIG11bHRpcGxlICglZCkgbG9naWNhbCBzZWN0b3JzIHBlciBwaHlzaWNhbCBzZWN0b3IuXG4iCisiR05VIFBhcnRlZCBzdXBwb3J0cyB0aGlzIEVYUEVSSU1FTlRBTExZIGZvciBzb21lIHNwZWNpYWwgZGlzayBsYWJlbC9maWxlICIKKyJzeXN0ZW0gY29tYmluYXRpb25zLCBlLmcuIEdQVCBhbmQgZXh0Mi8zLlxuIgorIlBsZWFzZSBjb25zdWx0IHRoZSB3ZWIgc2l0ZSBmb3IgdXAtdG8tZGF0ZSBpbmZvcm1hdGlvbi4iCittc2dzdHIgIiIKKyJMZSBw6XJpcGjpcmlxdWUgJXMgYSBkZSBtdWx0aXBsZXMgKCVkKSBzZWN0ZXVycyBsb2dpcXVlcyBwYXIgc2VjdGV1ciAiCisicGh5c2lxdWUuXG4iCisiR05VIFBhcnRlZCBzdXBwb3J0ZSBjZWxhIGRlIG1hbmnocmUgRVhQRVJJTUVOVEFMRSBwb3VyIGNlcnRhaW5lcyDpdGlxdWV0dGVzICIKKyJkZSBkaXNxdWUgLyBjb21iaW5haXNvbnMgZGUgc3lzdOhtZXMgZGUgZmljaGllcnMgc3DpY2lhbGVzLCBpLmUuIEdQVCBldCAiCisiZXh0Mi8zLlxuIgorIk1lcmNpIGRlIGNvbnN1bHRlciBsZSBzaXRlIHdlYiBwb3VyIGRlcyBpbmZvcm1hdGlvbnMg4CBqb3VyLiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo4NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgaW5pdGlhbGlzaW5nIFNDU0kgZGV2aWNlICVzIC0gJXMiCittc2dzdHIgIkVycmV1ciBkJ2luaXRpYWxpc2F0aW9uIGR1IHDpcmlwaOlyaXF1ZSBTQ1NJICVzIC0gJXMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6OTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZGV2aWNlICVzIGhhcyB6ZXJvIGxlbmd0aCwgYW5kIGNhbid0IHBvc3NpYmx5IHN0b3JlIGEgZmlsZSBzeXN0ZW0gb3IgIgorInBhcnRpdGlvbiB0YWJsZS4gIFBlcmhhcHMgeW91IHNlbGVjdGVkIHRoZSB3cm9uZyBkZXZpY2U/IgorbXNnc3RyICIiCisiTGUgcOlyaXBo6XJpcXVlICVzIGEgdW5lIHRhaWxsZSBudWxsZSBldCBuZSBwZXV0IGRvbmMgcGFzIHN0b2NrZXIgdW4gc3lzdOhtZSAiCisiZGUgZmljaGllcnMgb3UgdW5lIHRhYmxlIGRlIHBhcnRpdGlvbi4gUGV1dC3qdHJlIGF2ZXotdm91cyBz6WxlY3Rpb25u6SBsZSAiCisibWF1dmFpcyBw6XJpcGjpcmlxdWUgPyIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMDMyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiVW5hYmxlIHRvIGRldGVybWluZSBnZW9tZXRyeSBvZiBmaWxlL2RldmljZSAlcy4gIFlvdSBzaG91bGQgbm90IHVzZSBQYXJ0ZWQgIgorInVubGVzcyB5b3UgUkVBTExZIGtub3cgd2hhdCB5b3UncmUgZG9pbmchIgorbXNnc3RyICIiCisiSW1wb3NzaWJsZSBkZSBk6XRlcm1pbmVyIGxhIGfpb23pdHJpZSBkdSBmaWNoaWVyL3DpcmlwaOlyaXF1ZS4gVm91cyBuZSAiCisiZGV2cmlleiBwYXMgdXRpbGlzZXIgUGFydGVkIHNhbnMgVlJBSU1FTlQgc2F2b2lyIGNlIHF1ZSB2b3VzIGZhaXRlcyAhIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExMTAKK21zZ2lkICJEQUM5NjAgUkFJRCBjb250cm9sbGVyIgorbXNnc3RyICJDb250cvRsZXVyIFJBSUQgREFDOTYwIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExMTUKK21zZ2lkICJQcm9taXNlIFNYOCBTQVRBIERldmljZSIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExMjAKK21zZ2lkICJJQk0gUzM5MCBEQVNEIGRyaXZlIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTEyNQorbXNnaWQgIklCTSBpU2VyaWVzIFZpcnR1YWwgREFTRCIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExMzAKK21zZ2lkICJDb21wYXEgU21hcnQgQXJyYXkiCittc2dzdHIgIkNvbXBhcSBTbWFydCBBcnJheSIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTM1Cittc2dpZCAiQVRBUkFJRCBDb250cm9sbGVyIgorbXNnc3RyICJDb250cvRsZXVyIEFUQVJBSUQiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTE0MAorbXNnaWQgIkkyTyBDb250cm9sbGVyIgorbXNnc3RyICJDb250cvRsZXVyIEkyTyIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTQ1Cittc2dpZCAiVXNlci1Nb2RlIExpbnV4IFVCRCIKK21zZ3N0ciAiVXNlci1Nb2RlIExpbnV4IFVCRCIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTU2Cittc2dpZCAiTGludXggZGV2aWNlLW1hcHBlciIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExNjIKK21zZ2lkICJVbmtub3duIgorbXNnc3RyICJJbmNvbm51IgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExNjkKK21zZ2lkICJwZWRfZGV2aWNlX25ldygpICBVbnN1cHBvcnRlZCBkZXZpY2UgdHlwZSIKK21zZ3N0ciAicGVkX2RldmljZV9uZXcoKSAgVHlwZSBkZSBw6XJpcGjpcmlxdWUgbm9uIHN1cHBvcnTpIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjIwODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkVycm9yIGluZm9ybWluZyB0aGUga2VybmVsIGFib3V0IG1vZGlmaWNhdGlvbnMgdG8gcGFydGl0aW9uICVzIC0tICVzLiAgVGhpcyAiCisibWVhbnMgTGludXggd29uJ3Qga25vdyBhYm91dCBhbnkgY2hhbmdlcyB5b3UgbWFkZSB0byAlcyB1bnRpbCB5b3UgcmVib290IC0tICIKKyJzbyB5b3Ugc2hvdWxkbid0IG1vdW50IGl0IG9yIHVzZSBpdCBpbiBhbnkgd2F5IGJlZm9yZSByZWJvb3RpbmcuIgorbXNnc3RyICIiCisiRXJyZXVyIGxvcnMgZGUgbCdpbmZvcm1hdGlvbiBhdSBrZXJuZWwgZGVzIG1vZGlmaWNhdGlvbnMgZGUgbGEgcGFydGl0aW9uICVzICIKKyItICVzLiBDZWxhIHNpZ25pZmllIHF1ZSBMaW51eCBuZSByZWNvbm5h7nRyYSBhdWN1biBkZXMgY2hhbmdlbWVudHMgZmFpdHMgc3VyICIKKyIlcyBhdmFudCBkZSByZWTpbWFycmVyIC0gdm91cyBuZSBkZXZyaWV6IGRvbmMgcGFzIGxlIG1vbnRlciBvdSBsJ3V0aWxpc2VyICIKKyJhdmFudCBkZSByZWTpbWFycmVyLiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoyMjYyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisicGFydGVkIHdhcyB1bmFibGUgdG8gcmUtcmVhZCB0aGUgcGFydGl0aW9uIHRhYmxlIG9uICVzICglcykuICBUaGlzIG1lYW5zICIKKyJMaW51eCB3b24ndCBrbm93IGFueXRoaW5nIGFib3V0IHRoZSBtb2RpZmljYXRpb25zIHlvdSBtYWRlLiAiCittc2dzdHIgIiIKKyJMZSBrZXJuZWwgYSDpdOkgaW5jYXBhYmxlIGRlIHJlbGlyZSBsYSB0YWJsZSBkZSBwYXJ0aXRpb24gc3VyICVzICglcykuIENlbGEgIgorInNpZ25pZmllIHF1ZSBMaW51eCBuZSByZWNvbm5h7nRyYSBhdWN1bmUgZGVzIG1vZGlmaWNhdGlvbnMgZWZmZWN0dellcyBhdmFudCAiCisiZGUgcmVk6W1hcnJlci4gVm91cyBkZXZyaWV6IHJlZOltYXJyZXIgdm90cmUgb3JkaW5hdGV1ciBhdmFudCBkZSBmYWlyZSAiCisicXVvaXF1ZSBjZSBzb2l0IGF2ZWMgJXMuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjIzNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBrZXJuZWwgd2FzIHVuYWJsZSB0byByZS1yZWFkIHRoZSBwYXJ0aXRpb24gdGFibGUgb24gJXMgKCVzKS4gIFRoaXMgbWVhbnMgIgorIkxpbnV4IHdvbid0IGtub3cgYW55dGhpbmcgYWJvdXQgdGhlIG1vZGlmaWNhdGlvbnMgeW91IG1hZGUgdW50aWwgeW91ICIKKyJyZWJvb3QuICBZb3Ugc2hvdWxkIHJlYm9vdCB5b3VyIGNvbXB1dGVyIGJlZm9yZSBkb2luZyBhbnl0aGluZyB3aXRoICVzLiIKK21zZ3N0ciAiIgorIkxlIGtlcm5lbCBhIOl06SBpbmNhcGFibGUgZGUgcmVsaXJlIGxhIHRhYmxlIGRlIHBhcnRpdGlvbiBzdXIgJXMgKCVzKS4gQ2VsYSAiCisic2lnbmlmaWUgcXVlIExpbnV4IG5lIHJlY29ubmHudHJhIGF1Y3VuZSBkZXMgbW9kaWZpY2F0aW9ucyBlZmZlY3R16WVzIGF2YW50ICIKKyJkZSByZWTpbWFycmVyLiBWb3VzIGRldnJpZXogcmVk6W1hcnJlciB2b3RyZSBvcmRpbmF0ZXVyIGF2YW50IGRlIGZhaXJlICIKKyJxdW9pcXVlIGNlIHNvaXQgYXZlYyAlcy4iCisKKyM6IGxpYnBhcnRlZC9jcy9nZW9tLmM6MTYyCittc2dpZCAiQ2FuJ3QgaGF2ZSB0aGUgZW5kIGJlZm9yZSB0aGUgc3RhcnQhIgorbXNnc3RyICJMYSBmaW4gbmUgcGV1dCBwYXMg6nRyZSBhdmFudCBsZSBk6WJ1dCAhIgorCisjOiBsaWJwYXJ0ZWQvY3MvZ2VvbS5jOjE2OQorbXNnaWQgIkNhbid0IGhhdmUgYSBwYXJ0aXRpb24gb3V0c2lkZSB0aGUgZGlzayEiCittc2dzdHIgIkxhIHBhcnRpdGlvbiBuZSBwZXV0IHBhcyDqdHJlIGVuIGRlaG9ycyBkdSBkaXNxdWUgISIKKworIzogbGlicGFydGVkL2NzL2dlb20uYzozNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXR0ZW1wdCB0byB3cml0ZSBzZWN0b3JzICVsZC0lbGQgb3V0c2lkZSBvZiBwYXJ0aXRpb24gb24gJXMuIgorbXNnc3RyICIiCisiVGVudGF0aXZlIGQn6WNyaXR1cmUgZGVzIHNlY3RldXJzICVsZC0lbGQgZW4gZGVob3JzIGRlIGxhIHBhcnRpdGlvbiBzdXIgJXMuIgorCisjOiBsaWJwYXJ0ZWQvY3MvZ2VvbS5jOjQwNiBsaWJwYXJ0ZWQvZnMvbGludXhfc3dhcC9saW51eF9zd2FwLmM6NDc1Cittc2dpZCAiY2hlY2tpbmcgZm9yIGJhZCBibG9ja3MiCittc2dzdHIgInJlY2hlcmNoZSBkZSBibG9jcyBk6WZlY3R1ZXV4IgorCisjOiBsaWJwYXJ0ZWQvZGVidWcuYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFja3RyYWNlIGhhcyAlZCBjYWxscyBvbiBzdGFjazpcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZGVidWcuYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXNzZXJ0aW9uICglcykgYXQgJXM6JWQgaW4gZnVuY3Rpb24gJXMoKSBmYWlsZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBvcGVuICVzIC0gdW5yZWNvZ25pc2VkIGRpc2sgbGFiZWwuIgorbXNnc3RyICJJbXBvc3NpYmxlIGQnb3V2cmlyICVzIC0g6XRpcXVldHRlIGRlIGRpc3F1ZSBub24gcmVjb25udWUuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjQ3MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhpcyBsaWJwYXJ0ZWQgZG9lc24ndCBoYXZlIHdyaXRlIHN1cHBvcnQgZm9yICVzLiAgUGVyaGFwcyBpdCB3YXMgY29tcGlsZWQgIgorInJlYWQtb25seS4iCittc2dzdHIgIiIKKyJDZXR0ZSBsaWJwYXJ0ZWQgbidhIHBhcyBkZSBzdXBwb3J0IHBvdXIgbCfpY3JpdHVyZSBwb3VyICVzLiBQZXV0Lep0cmUgYS10LWlsICIKKyLpdOkgY29tcGls6SBlbiBsZWN0dXJlIHNldWxlLiIKKworIzogbGlicGFydGVkL2Rpc2suYzo1OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGFydGl0aW9uICVkIGlzICVzLCBidXQgdGhlIGZpbGUgc3lzdGVtIGlzICVzLiIKK21zZ3N0ciAiTGEgcGFydGl0aW9uICVkIGVzdCAlcyBtYWlzIGxlIHN5c3TobWUgZGUgZmljaGllcnMgZXN0ICVzLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxMDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGRpc2sgbGFiZWxzIGRvIG5vdCBzdXBwb3J0IGV4dGVuZGVkIHBhcnRpdGlvbnMuIgorbXNnc3RyICJMZXMg6XRpcXVldHRlcyBkdSBkaXNxdWUgJXMgbmUgc3VwcG9ydGVudCBwYXMgbGVzIHBhcnRpdGlvbnMg6XRlbmR1ZXMuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE2MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZGlzayBsYWJlbHMgZG9uJ3Qgc3VwcG9ydCBsb2dpY2FsIG9yIGV4dGVuZGVkIHBhcnRpdGlvbnMuIgorbXNnc3RyICIiCisiTGVzIOl0aXF1ZXR0ZXMgZHUgZGlzcXVlICVzIG5lIHN1cHBvcnRlbnQgcGFzIGxlcyBwYXJ0aXRpb25zIGxvZ2lxdWVzIG91ICIKKyLpdGVuZHVlcy4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTY0NworbXNnaWQgIlRvbyBtYW55IHByaW1hcnkgcGFydGl0aW9ucy4iCittc2dzdHIgIlRyb3AgZGUgcGFydGl0aW9ucyBwcmltYWlyZXMuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE2NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbid0IGFkZCBhIGxvZ2ljYWwgcGFydGl0aW9uIHRvICVzLCBiZWNhdXNlIHRoZXJlIGlzIG5vIGV4dGVuZGVkIHBhcnRpdGlvbi4iCittc2dzdHIgIiIKKyJOZSBwZXV0IGFqb3V0ZXIgdW5lIHBhcnRpdGlvbiBsb2dpcXVlIHN1ciAlcyBwYXJjZSBxdSdpbCBuJ3kgYSBwYXMgZGUgIgorInBhcnRpdGlvbiDpdGVuZHVlLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbid0IGhhdmUgbW9yZSB0aGFuIG9uZSBleHRlbmRlZCBwYXJ0aXRpb24gb24gJXMuIgorbXNnc3RyICJPbiBuZSBwZXV0IGF2b2lyIHBsdXMgZCd1bmUgcGFydGl0aW9uIOl0ZW5kdWUgc3VyICVzIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE2OTAKK21zZ2lkICJDYW4ndCBoYXZlIGxvZ2ljYWwgcGFydGl0aW9ucyBvdXRzaWRlIG9mIHRoZSBleHRlbmRlZCBwYXJ0aXRpb24uIgorbXNnc3RyICJOZSBwZXV0IGF2b2lyIGRlIHBhcnRpdGlvbiBsb2dpcXVlIGVuIGRlaG9ycyBkZSBsYSBwYXJ0aXRpb24g6XRlbmR1ZS4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTcxNQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW4ndCBoYXZlIGEgbG9naWNhbCBwYXJ0aXRpb24gb3V0c2lkZSBvZiB0aGUgZXh0ZW5kZWQgcGFydGl0aW9uIG9uICVzLiIKK21zZ3N0ciAiIgorIk5lIHBldXQgYXZvaXIgdW5lIHBhcnRpdGlvbiBsb2dpcXVlIGVuIGRlaG9ycyBkZSBsYSBwYXJ0aXRpb24g6XRlbmR1ZSBzdXIgJXMuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE3MjUgbGlicGFydGVkL2Rpc2suYzoxNzc5IGxpYnBhcnRlZC9kaXNrLmM6MTk0NQorbXNnaWQgIkNhbid0IGhhdmUgb3ZlcmxhcHBpbmcgcGFydGl0aW9ucy4iCittc2dzdHIgIk5lIHBldXQgYXZvaXIgZGVzIHBhcnRpdGlvbnMgcXVpIHNlIGNoZXZhdWNoZW50LiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNzMzCittc2dpZCAiQ2FuJ3QgaGF2ZSBhIHByaW1hcnkgcGFydGl0aW9uIGluc2lkZSBhbiBleHRlbmRlZCBwYXJ0aXRpb24uIgorbXNnc3RyICIiCisiTmUgcGV1dCBhdm9pciB1bmUgcGFydGl0aW9uIHByaW1haXJlIOAgbCdpbnTpcmlldXIgZCd1bmUgcGFydGl0aW9uIOl0ZW5kdWUuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNDAKK21zZ2lkICJtZXRhZGF0YSIKK21zZ3N0ciAibel0YS1kb25u6WVzIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNDIKK21zZ2lkICJmcmVlIgorbXNnc3RyICJsaWJyZSIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTQ0IHBhcnRlZC91aS5jOjExNjkgcGFydGVkL3VpLmM6MTE5NworbXNnaWQgImV4dGVuZGVkIgorbXNnc3RyICLpdGVuZHVlIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNDYgcGFydGVkL3VpLmM6MTE3MyBwYXJ0ZWQvdWkuYzoxMjAxCittc2dpZCAibG9naWNhbCIKK21zZ3N0ciAibG9naXF1ZSIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTQ4IHBhcnRlZC91aS5jOjExNjUgcGFydGVkL3VpLmM6MTE5MworbXNnaWQgInByaW1hcnkiCittc2dzdHIgInByaW1haXJlIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNjQKK21zZ2lkICJib290IgorbXNnc3RyICJk6W1hcnJhZ2UiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE2NgorbXNnaWQgInJvb3QiCittc2dzdHIgInJhY2luZSIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTY4Cittc2dpZCAic3dhcCIKK21zZ3N0ciAic3dhcCIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTcwCittc2dpZCAiaGlkZGVuIgorbXNnc3RyICJjYWNo6SIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTcyCittc2dpZCAicmFpZCIKK21zZ3N0ciAicmFpZCIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTc0Cittc2dpZCAibHZtIgorbXNnc3RyICJsdm0iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE3NgorbXNnaWQgImxiYSIKK21zZ3N0ciAibGJhIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNzgKK21zZ2lkICJocC1zZXJ2aWNlIgorbXNnc3RyICJocC1zZXJ2aWNlIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxODAKK21zZ2lkICJwYWxvIgorbXNnc3RyICJwYWxvIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxODIKK21zZ2lkICJwcmVwIgorbXNnc3RyICJwcmVwIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxODQKK21zZ2lkICJtc2Z0cmVzIgorbXNnc3RyICJtc2Z0cmVzIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBwYXJ0aXRpb24gZmxhZywgJWQuIgorbXNnc3RyICJGYW5pb24gZGUgcGFydGl0aW9uIGluY29ubnUgJWQuIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6NzgKK21zZ2lkICJJbmZvcm1hdGlvbiIKK21zZ3N0ciAiSW5mb3JtYXRpb24iCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo3OQorbXNnaWQgIldhcm5pbmciCittc2dzdHIgIkF2ZXJ0aXNzZW1lbnQiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4MAorbXNnaWQgIkVycm9yIgorbXNnc3RyICJFcnJldXIiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4MQorbXNnaWQgIkZhdGFsIgorbXNnc3RyICJGYXRhbCIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjgyCittc2dpZCAiQnVnIgorbXNnc3RyICJCdWciCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4MworbXNnaWQgIk5vIEltcGxlbWVudGF0aW9uIgorbXNnc3RyICJQYXMgZCdpbXBsYW50YXRpb24iCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4NworbXNnaWQgIkZpeCIKK21zZ3N0ciAiRml4IgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODgKK21zZ2lkICJZZXMiCittc2dzdHIgIlllcyIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjg5Cittc2dpZCAiTm8iCittc2dzdHIgIk5vIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6OTAKK21zZ2lkICJPSyIKK21zZ3N0ciAiT0siCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo5MQorbXNnaWQgIlJldHJ5IgorbXNnc3RyICJOb3V2ZWwgZXNzYWkiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo5MgorbXNnaWQgIklnbm9yZSIKK21zZ3N0ciAiSWdub3JlciIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjkzCittc2dpZCAiQ2FuY2VsIgorbXNnc3RyICJBbm51bGVyIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBIGJ1ZyBoYXMgYmVlbiBkZXRlY3RlZCBpbiBHTlUgUGFydGVkLiAgUmVmZXIgdG8gdGhlIHdlYiBzaXRlIG9mIHBhcnRlZCAiCisiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3BhcnRlZC9wYXJ0ZWQuaHRtbCBmb3IgbW9yZSBpbmZvcm1hdGlvbnMgb2Ygd2hhdCAiCisiY291bGQgYmUgdXNlZnVsIGZvciBidWcgc3VibWl0dGluZyEgIFBsZWFzZSBlbWFpbCBhIGJ1ZyByZXBvcnQgdG8gYnVnLSIKKyJwYXJ0ZWRAZ251Lm9yZyBjb250YWluaW5nIGF0IGxlYXN0IHRoZSB2ZXJzaW9uICglcykgYW5kIHRoZSBmb2xsb3dpbmcgIgorIm1lc3NhZ2U6ICAiCittc2dzdHIgIiIKKyJVbmUgYW5vbWFsaWUgYSDpdOkgZOl0ZWN06WUgZGFucyBHTlUgUGFydGVkLiBSZXBvcnRlei12b3VzIGF1IHNpdGUgZGUgUGFydGVkICIKKyJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvcGFydGVkL3BhcnRlZC5odG1sIHBvdXIgcGx1cyBkJ2luZm9ybWF0aW9ucyBzdXIgIgorImNlIHF1aSBwb3VycmFpdCDqdHJlIHV0aWxlIHBvdXIgbGUgc2lnbmFsZW1lbnQgZGUgbCdhbm9tYWxpZSAhIFNWUCByYXBwb3J0ZXogIgorImNlbGxlLWNpIOAgYnVnLXBhcnRlZEBnbnUub3JnIGVuIHBy6WNpc2FudCBsYSB2ZXJzaW9uICglcykgZXQgbGUgbWVzc2FnZSAiCisic3VpdmFudDoiCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6Mzg0Cittc2dpZCAiQ291bGQgbm90IGRldGVjdCBmaWxlIHN5c3RlbS4iCittc2dzdHIgIk5lIHBldXQgZOl0ZWN0ZXIgbGUgc3lzdOhtZSBkZSBmaWNoaWVycy4iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6Mzk1Cittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIGlzIGJpZ2dlciB0aGFuIGl0cyB2b2x1bWUhIgorbXNnc3RyICJMZSBzeXN06G1lIGRlIGZpY2hpZXJzIGVzdCBwbHVzIGdyb3MgcXVlIHNvbiB2b2x1bWUgISIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo0MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VwcG9ydCBmb3Igb3BlbmluZyAlcyBmaWxlIHN5c3RlbXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIkwnb3V2ZXJ0dXJlIGR1IHN5c3TobWUgZGUgZmljaGllcnMgJXMgbidlc3QgcGFzIGVuY29yZSBzdXBwb3J06WUuIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjQ0NQorIywgYy1mb3JtYXQKK21zZ2lkICJTdXBwb3J0IGZvciBjcmVhdGluZyAlcyBmaWxlIHN5c3RlbXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiIKKyJMZSBzdXBwb3J0IHBvdXIgbGEgY3LpYXRpb24gZHUgc3lzdOhtZSBkZSBmaWNoaWVycyAlcyBuJ2VzdCBwYXMgZW5jb3JlICIKKyJpbXBsYW506S4iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnQgZm9yIGNoZWNraW5nICVzIGZpbGUgc3lzdGVtcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiIgorIkxlIHN1cHBvcnQgcG91ciBsYSB26XJpZmljYXRpb24gZHUgc3lzdOhtZSBkZSBmaWNoaWVycyAlcyBuJ2VzdCBwYXMgZW5jb3JlICIKKyJpbXBsYW506S4iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NTcxCittc2dpZCAicmF3IGJsb2NrIGNvcHlpbmciCittc2dzdHIgImNvcGllIGJydXRlIGRlIGJsb2NzIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjU4MgorbXNnaWQgImdyb3dpbmcgZmlsZSBzeXN0ZW0iCittc2dzdHIgImxlIHN5c3TobWUgZGUgZmljaGllcnMgZ3Jvc3NpdCIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo2MjIKK21zZ2lkICJDYW4ndCBjb3B5IG9udG8gYW4gb3ZlcmxhcHBpbmcgcGFydGl0aW9uLiIKK21zZ3N0ciAiTmUgcGV1dCBjb3BpZXIgc3VyIHVuZSBwYXJ0aXRpb24gcXVpIGVuIGNoZXZhdWNoZSB1bmUgYXV0cmUuIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjY0NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRGlyZWN0IHN1cHBvcnQgZm9yIGNvcHlpbmcgZmlsZSBzeXN0ZW1zIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQgZm9yICVzLiAgIgorIkhvd2V2ZXIsIHN1cHBvcnQgZm9yIHJlc2l6aW5nIGlzIGltcGxlbWVudGVkLiAgVGhlcmVmb3JlLCB0aGUgZmlsZSBzeXN0ZW0gIgorImNhbiBiZSBjb3BpZWQgaWYgdGhlIG5ldyBwYXJ0aXRpb24gaXMgYXQgbGVhc3QgYXMgYmlnIGFzIHRoZSBvbGQgb25lLiAgU28sICIKKyJlaXRoZXIgc2hyaW5rIHRoZSBwYXJ0aXRpb24geW91IGFyZSB0cnlpbmcgdG8gY29weSwgb3IgY29weSB0byBhIGJpZ2dlciAiCisicGFydGl0aW9uLiIKK21zZ3N0ciAiIgorIkxlIHN1cHBvcnQgZGlyZWN0IHBvdXIgbGEgY29waWUgZGUgc3lzdOhtZSBkZSBmaWNoaWVycyBuJ2VzdCBwYXMgZW5jb3JlICIKKyJpbXBsYW506SBwb3VyICVzLiBDZXBlbmRhbnQgbGUgc3VwcG9ydCBwb3VyIGxlIHJlZGltZW5zaW9ubmVtZW50IGwnZXN0LiBQYXIgIgorImNvbnPpcXVlbnQsIGxlIHN5c3TobWUgZGUgZmljaGllcnMgcGV1dCDqdHJlIGNvcGnpIHNpIGxhIG5vdXZlbGxlIHBhcnRpdGlvbiAiCisiZXN0IGF1IG1vaW5zIGF1c3NpIGdyYW5kZSBxdWUgbCdhbmNpZW5uZS4gRG9uYywgdm91cyBwb3V2ZXogc29pdCBy6WR1aXJlIGxhICIKKyJwYXJ0aXRpb24gcXVlIHZvdXMgdGVudGVyIGRlIGNvcGllciwgc29pdCBsYSBjb3BpZXIgdmVycyB1bmUgcGFydGl0aW9uIHBsdXMgIgorImdyYW5kZS4iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnQgZm9yIGNvcHlpbmcgJXMgZmlsZSBzeXN0ZW1zIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICIiCisiTGUgc3VwcG9ydCBwb3VyIGxhIGNvcGllIGR1IHN5c3TobWUgZGUgZmljaGllcnMgJXMgbidlc3QgcGFzIGVuY29yZSBpbXBsYW506S4iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6Njk2CisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnQgZm9yIHJlc2l6aW5nICVzIGZpbGUgc3lzdGVtcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiIgorIkxlIHN1cHBvcnQgcG91ciBsYSBtb2RpZmljYXRpb24gZGUgbGEgdGFpbGxlIGR1IHN5c3TobWUgZGUgZmljaGllcnMgJXMgbidlc3QgIgorInBhcyBlbmNvcmUgaW1wbGFudOkuIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzozMTUKK21zZ2lkICJjcmVhdGluZyIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0MDIKKyMsIGZ1enp5Cittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIGlzIGluIGFuIGludmFsaWQgc3RhdGUuICBQZXJoYXBzIGl0IGlzIG1vdW50ZWQ/IgorbXNnc3RyICJMZSBzeXN06G1lIGRlIGZpY2hpZXJzIGVzdCBwbHVzIGdyb3MgcXVlIHNvbiB2b2x1bWUgISIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDEwCittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIGlzIGluIG9sZCAodW5yZXNpemVhYmxlKSBmb3JtYXQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQxNgorbXNnaWQgIkludmFsaWQgZnJlZSBibG9ja3MgY291bnQuICBSdW4gcmVpc2VyZnNjayAtLWNoZWNrIGZpcnN0LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0MzEKKyMsIGZ1enp5Cittc2dpZCAiY2hlY2tpbmciCittc2dzdHIgImNoZWNrIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0MzcKK21zZ2lkICJSZWlzZXJmcyB0cmVlIHNlZW1zIHRvIGJlIGNvcnJ1cHRlZC4gIFJ1biByZWlzZXJmc2NrIC0tY2hlY2sgZmlyc3QuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQ0OQorIywgZnV6enkKK21zZ2lkICIiCisiVGhlIHJlaXNlcmZzIGZpbGUgc3lzdGVtIHBhc3NlZCBhIGJhc2ljIGNoZWNrLiAgRm9yIGEgbW9yZSBjb21wcmVoZW5zaXZlICIKKyJjaGVjaywgcnVuIHJlaXNlcmZzY2sgLS1jaGVjay4iCittc2dzdHIgIiIKKyJMZSBzeXN06G1lIGRlIGZpY2hpZXJzIGV4dDIgYSBwYXNz6SBsYSB26XJpZmljYXRpb24gZGUgYmFzZS4gUG91ciB1bmUgIgorInbpcmlmaWNhdGlvbiBwbHVzIGFwcHJvZm9uZGllLCB1dGlsaXNleiBlMmZzY2suIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0NzQKKyMsIGZ1enp5Cittc2dpZCAiU29ycnksIGNhbid0IG1vdmUgdGhlIHN0YXJ0IG9mIHJlaXNlcmZzIHBhcnRpdGlvbnMgeWV0LiIKK21zZ3N0ciAiROlzb2zpLCBvbiBuZSBwZXV0IHBhcyBlbmNvcmUgZOlwbGFjZXIgbGUgZOlidXQgZCd1bmUgcGFydGl0aW9uIGV4dDIgISIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDkwCittc2dpZCAiQ291bGRuJ3QgcmVvcGVuIGRldmljZSBhYnN0cmFjdGlvbiBsYXllciBmb3IgcmVhZC93cml0ZS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NTA4IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NTUyCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjI1MCBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjYyOQorbXNnaWQgInNocmlua2luZyIKK21zZ3N0ciAiculkdWN0aW9uIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo1MjAKKyMsIGZ1enp5Cittc2dpZCAiZXhwYW5kaW5nIgorbXNnc3RyICJBdmVydGlzc2VtZW50IgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo1OTIKK21zZ2lkICJDb3VsZG4ndCBjcmVhdGUgcmVpc2VyZnMgZGV2aWNlIGFic3RyYWN0aW9uIGhhbmRsZXIuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjYwNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRGV2aWNlIGlzIHRvbyBzbWFsbCBmb3IgJWx1IGJsb2Nrcy4iCittc2dzdHIgIlN5c3TobWUgZGUgZmljaGllcnMgdHJvcCBwZXRpdCBwb3VyIGV4dDIuIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo2MTUKK21zZ2lkICJjb3B5aW5nIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjY4MgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCByZXNvbHZlIHN5bWJvbCAlcy4gIEVycm9yOiAlcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NzA0Cittc2dpZCAiR05VIFBhcnRlZCBmb3VuZCBhbiBpbnZhbGlkIGxpYnJlaXNlcmZzIGxpYnJhcnkuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjcxNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiR05VIFBhcnRlZCBoYXMgZGV0ZWN0ZWQgbGlicmVpc2VyZnMgaW50ZXJmYWNlIHZlcnNpb24gbWlzbWF0Y2guICBGb3VuZCAlZC0lIgorImQsIHJlcXVpcmVkICVkLiBSZWlzZXJGUyBzdXBwb3J0IHdpbGwgYmUgZGlzYWJsZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYWl4LmM6MTM3CisjLCBmdXp6eQorbXNnaWQgIlN1cHBvcnQgZm9yIHJlYWRpbmcgQUlYIGRpc2sgbGFiZWxzIGlzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICIiCisiTGUgc3VwcG9ydCBwb3VyIGxhIGNy6WF0aW9uIGR1IHN5c3TobWUgZGUgZmljaGllcnMgJXMgbidlc3QgcGFzIGVuY29yZSAiCisiaW1wbGFudOkuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2FpeC5jOjE0OAorIywgZnV6enkKK21zZ2lkICJTdXBwb3J0IGZvciB3cml0aW5nIEFJWCBkaXNrIGxhYmVscyBpcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiIgorIkxlIHN1cHBvcnQgcG91ciBsYSBjculhdGlvbiBkdSBzeXN06G1lIGRlIGZpY2hpZXJzICVzIG4nZXN0IHBhcyBlbmNvcmUgIgorImltcGxhbnTpLiIKKworIzogbGlicGFydGVkL2xhYmVscy9haXguYzoxNjEKKyMsIGZ1enp5Cittc2dpZCAiIgorIlN1cHBvcnQgZm9yIGFkZGluZyBwYXJ0aXRpb25zIHRvIEFJWCBkaXNrIGxhYmVscyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiIgorIkxlIHN1cHBvcnQgcG91ciBsYSBjculhdGlvbiBkdSBzeXN06G1lIGRlIGZpY2hpZXJzICVzIG4nZXN0IHBhcyBlbmNvcmUgIgorImltcGxhbnTpLiIKKworIzogbGlicGFydGVkL2xhYmVscy9haXguYzoxNzEKKyMsIGZ1enp5Cittc2dpZCAiIgorIlN1cHBvcnQgZm9yIGR1cGxpY2F0aW5nIHBhcnRpdGlvbnMgaW4gQUlYIGRpc2sgbGFiZWxzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICIiCisiTGUgc3VwcG9ydCBwb3VyIGxhIGNy6WF0aW9uIGR1IHN5c3TobWUgZGUgZmljaGllcnMgJXMgbidlc3QgcGFzIGVuY29yZSAiCisiaW1wbGFudOkuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2FpeC5jOjE4OQorIywgZnV6enkKK21zZ2lkICIiCisiU3VwcG9ydCBmb3Igc2V0dGluZyBzeXN0ZW0gdHlwZSBvZiBwYXJ0aXRpb25zIGluIEFJWCBkaXNrIGxhYmVscyBpcyBub3QgIgorImltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiIKKyJMZSBzdXBwb3J0IHBvdXIgbGEgY3LpYXRpb24gZHUgc3lzdOhtZSBkZSBmaWNoaWVycyAlcyBuJ2VzdCBwYXMgZW5jb3JlICIKKyJpbXBsYW506S4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYWl4LmM6MTk5CisjLCBmdXp6eQorbXNnaWQgIlN1cHBvcnQgZm9yIHNldHRpbmcgZmxhZ3MgaW4gQUlYIGRpc2sgbGFiZWxzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICIiCisiTGUgc3VwcG9ydCBwb3VyIGxhIGNy6WF0aW9uIGR1IHN5c3TobWUgZGUgZmljaGllcnMgJXMgbidlc3QgcGFzIGVuY29yZSAiCisiaW1wbGFudOkuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2JzZC5jOjUwMSBsaWJwYXJ0ZWQvbGFiZWxzL2Rhc2QuYzo3NTUKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZG9zLmM6MTk3NCBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjc3MAorIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzoxNDQ4IGxpYnBhcnRlZC9sYWJlbHMvbG9vcC5jOjI0OAorIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoxNDA4IGxpYnBhcnRlZC9sYWJlbHMvcGM5OC5jOjc1OQorIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzoxMDQxIGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6NzA1Cittc2dpZCAiVW5hYmxlIHRvIHNhdGlzZnkgYWxsIGNvbnN0cmFpbnRzIG9uIHRoZSBwYXJ0aXRpb24uIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHNhdGlzZmFpcmUgdG91dGVzIGxlcyBjb250cmFpbnRlcyBzdXIgbGEgcGFydGl0aW9uLiIKKworIzogbGlicGFydGVkL2xhYmVscy9ic2QuYzo1MjYKK21zZ2lkICJVbmFibGUgdG8gYWxsb2NhdGUgYSBic2QgZGlza2xhYmVsIHNsb3QuIgorbXNnc3RyICJJbXBvc3NpYmxlIGQnYWxsb3VlciBsJ2VudHLpZSBkJ3VuZSDpdGlxdWV0dGUgZGUgZGlzcXVlIEJTRC4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZGFzZC5jOjE2NgorIywgZnV6enkKK21zZ2lkICJVbmFibGUgdG8gZGV0ZXJtaW5lIHRoZSBibG9jayBzaXplIG9mIHRoaXMgZGFzZCIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBk6XRlcm1pbmVyIGxhIHRhaWxsZSBkZSAlcyAoJXMpLiIKKworIzogbGlicGFydGVkL2xhYmVscy9kYXNkLmM6NzgxCisjLCBmdXp6eQorbXNnaWQgIlVuYWJsZSB0byBhbGxvY2F0ZSBhIGRhc2QgZGlza2xhYmVsIHNsb3QiCittc2dzdHIgIkltcG9zc2libGUgZCdhbGxvdWVyIGwnZW50cullIGQndW5lIOl0aXF1ZXR0ZSBkZSBkaXNxdWUgQlNELiIKKworIzogbGlicGFydGVkL2xhYmVscy9kb3MuYzo4MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBwYXJ0aXRpb24gdGFibGUgb24gJXMgLS0gd3Jvbmcgc2lnbmF0dXJlICV4LiIKK21zZ3N0ciAiVGFibGUgZGUgcGFydGl0aW9uIGludmFsaWRlIHN1ciAlcyAtIHNpZ25hdHVyZSBlcnJvbullICV4LiIKKworIzogbGlicGFydGVkL2xhYmVscy9kb3MuYzo4NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBwYXJ0aXRpb24gdGFibGUgLSByZWN1cnNpdmUgcGFydGl0aW9uIG9uICVzLiIKK21zZ3N0ciAiVGFibGUgZGUgcGFydGl0aW9uIGludmFsaWRlIC0gcGFydGl0aW9uIHLpY3Vyc2l2ZSBzdXIgJXMuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rvcy5jOjEzMTgKK21zZ2lkICJFeHRlbmRlZCBwYXJ0aXRpb25zIGNhbm5vdCBiZSBoaWRkZW4gb24gbXNkb3MgZGlzayBsYWJlbHMuIgorbXNnc3RyICIiCisiTGVzIHBhcnRpdGlvbnMg6XRlbmR1ZXMgbmUgcGV1dmVudCDqdHJlIGNhY2jpZXMgcG91ciBsZXMg6XRpcXVldHRlcyBkZSAiCisiZGlzcXVlIE1TLURPUy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZG9zLmM6MTk1OAorbXNnaWQgIlBhcnRlZCBjYW4ndCByZXNpemUgcGFydGl0aW9ucyBtYW5hZ2VkIGJ5IFdpbmRvd3MgRHluYW1pYyBEaXNrLiIKK21zZ3N0ciAiIgorIlBhcnRlZCBuZSBwZXV0IHJlZGltZW5zaW9ubmVyIGxlcyBwYXJ0aXRpb25zIGfpcullcyBwYXIgV2luZG93cyBEeW5hbWljIERpc2suIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjE5MAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBoYXMgbm8gZXh0ZW5kZWQgcGFydGl0aW9uICh2b2x1bWUgaGVhZGVyIHBhcnRpdGlvbikuIgorbXNnc3RyICIlcyBuJ2EgcGFzIGRlIHBhcnRpdGlvbiDpdGVuZHVlIChwYXJ0aXRpb24gZCdlbi106nRlIGRlIHZvbHVtZSkuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjMxMworbXNnaWQgIkNoZWNrc3VtIGlzIHdyb25nLCBpbmRpY2F0aW5nIHRoZSBwYXJ0aXRpb24gdGFibGUgaXMgY29ycnVwdC4iCittc2dzdHIgIiIKKyJMYSBzb21tZSBkZSBjb250cvRsZSBlc3QgZXJyb27pZSwgY2VsYSBpbmRpcXVlIHF1ZSBsYSB0YWJsZSBkZSBwYXJ0aXRpb24gZXN0ICIKKyJjb3Jyb21wdWUuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjYxNgorbXNnaWQgIk9ubHkgcHJpbWFyeSBwYXJ0aXRpb25zIGNhbiBiZSByb290IHBhcnRpdGlvbnMuIgorbXNnc3RyICJTZXVsZXMgbGVzIHBhcnRpdGlvbnMgcHJpbWFpcmVzIHBldXZlbnQg6nRyZSBkZXMgcGFydGl0aW9ucyByb290LiIKKworIzogbGlicGFydGVkL2xhYmVscy9kdmguYzo2MzAKK21zZ2lkICJPbmx5IHByaW1hcnkgcGFydGl0aW9ucyBjYW4gYmUgc3dhcCBwYXJ0aXRpb25zLiIKK21zZ3N0ciAiU2V1bGVzIGxlcyBwYXJ0aXRpb25zIHByaW1haXJlcyBwZXV2ZW50IOp0cmUgZGVzIHBhcnRpdGlvbnMgZCfpY2hhbmdlLiIKKworIzogbGlicGFydGVkL2xhYmVscy9kdmguYzo2NDQKK21zZ2lkICJPbmx5IGxvZ2ljYWwgcGFydGl0aW9ucyBjYW4gYmUgYSBib290IGZpbGUuIgorbXNnc3RyICJTZXVsZXMgbGVzIHBhcnRpdGlvbnMgbG9naXF1ZXMgcGV1dmVudCDqdHJlIHVuIGZpY2hpZXIgZCdhbW9y52FnZS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6NzIxCittc2dpZCAiT25seSBsb2dpY2FsIHBhcnRpdGlvbnMgKGJvb3QgZmlsZXMpIGhhdmUgYSBuYW1lLiIKK21zZ3N0ciAiU2V1bGVzIGxlcyBwYXJ0aXRpb25zIGxvZ2lxdWVzIChmaWNoaWVycyBkJ2Ftb3LnYWdlKSBvbnQgdW4gbm9tLiIKKworIzogbGlicGFydGVkL2xhYmVscy9kdmguYzo4MTIKK21zZ2lkICJUb28gbWFueSBwcmltYXJ5IHBhcnRpdGlvbnMiCittc2dzdHIgIlRyb3AgZGUgcGFydGl0aW9ucyBwcmltYWlyZXMiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIG9wZW4gZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHNlZWsgZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHJlYWQgZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMTMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyB3cml0ZSBlcnJvclxuIgorIiVzXG4iCittc2dzdHIgIiVzIGxvcnMgZGUgbCfpY3JpdHVyZSBzdXIgJXMiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIElPQ1RMIGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBBUEkgdmVyc2lvbiBtaXNtYXRjaFxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgVW5zdXBwb3J0ZWQgZGlzayB0eXBlXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBVbnN1cHBvcnRlZCBkaXNrIGZvcm1hdFxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEzMAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIERpc2sgaW4gdXNlXG4iCisiJXNcbiIKK21zZ3N0ciAiRGlzcXVlICVzIDogJXNcbiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgQ29uZmlnIGZpbGUgc3ludGF4IGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBWb2x1bWUgbGFiZWwgaXMgY29ycnVwdGVkLlxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjE0MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgYSBkYXRhIHNldCBuYW1lIGlzIGNvcnJ1cHRlZC5cbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHNwYWNlIGFsbG9jYXRpb25cbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIGRldmljZSB2ZXJpZmljYXRpb24gZmFpbGVkXG4iCisiVGhlIHNwZWNpZmllZCBkZXZpY2UgaXMgbm90IGEgdmFsaWQgREFTRCBkZXZpY2VcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBGYXRhbCBlcnJvclxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzo0NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIGNvbnRhaW5zIEdQVCBzaWduYXR1cmVzLCBpbmRpY2F0aW5nIHRoYXQgaXQgaGFzIGEgR1BUIHRhYmxlLiAgSG93ZXZlciwgaXQgIgorImRvZXMgbm90IGhhdmUgYSB2YWxpZCBmYWtlIG1zZG9zIHBhcnRpdGlvbiB0YWJsZSwgYXMgaXQgc2hvdWxkLiAgUGVyaGFwcyBpdCAiCisid2FzIGNvcnJ1cHRlZCAtLSBwb3NzaWJseSBieSBhIHByb2dyYW0gdGhhdCBkb2Vzbid0IHVuZGVyc3RhbmQgR1BUIHBhcnRpdGlvbiAiCisidGFibGVzLiAgT3IgcGVyaGFwcyB5b3UgZGVsZXRlZCB0aGUgR1BUIHRhYmxlLCBhbmQgYXJlIG5vdyB1c2luZyBhbiBtc2RvcyAiCisicGFydGl0aW9uIHRhYmxlLiAgSXMgdGhpcyBhIEdQVCBwYXJ0aXRpb24gdGFibGU/IgorbXNnc3RyICIiCisiJXMgY29udGllbnQgZGVzIHNpZ25hdHVyZXMgR1BULCBpbmRpcXVhbnQgcXUnaWwgYSB1bmUgdGFibGUgR1BULiBDZXBlbmRhbnQsICIKKyJpbCBuJ2EgcGFzIHVuZSB0YWJsZSBkZSBwYXJ0aXRpb24gZmljdGl2ZSBNU0RPUyB2YWxpZGUgdGVsIHF1J2lsIGxlIGRldnJhaXQuICIKKyJQZXV0Lep0cmUgYS10LWVsbGUg6XTpIGNvcnJvbXB1ZSAtIHBldXQt6nRyZSBwYXIgdW4gcHJvZ3JhbW1lIHF1aSBuZSAiCisiY29tcHJlbmQgcGFzIGxlcyB0YWJsZXMgZGUgcGFydGl0aW9uIEdQVC4gT3UgcGV1dC3qdHJlIGF2ZXotdm91cyBzdXBwcmlt6SBsYSAiCisidGFibGUgR1BUIGV0IHV0aWxpc2V6LXZvdXMgdW5lIHRhYmxlIGRlIHBhcnRpdGlvbiBNUy1ET1MuIENlY2kgZXN0LWlsIHVuZSAiCisidGFibGUgZGUgcGFydGl0aW9uIEdQVCA/IgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjY0OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvcm1hdCBvZiB0aGUgR1BUIHBhcnRpdGlvbiB0YWJsZSBpcyB2ZXJzaW9uICV4LCB3aGljaCBpcyBuZXdlciB0aGFuICIKKyJ3aGF0IFBhcnRlZCBjYW4gcmVjb2duaXNlLiAgUGxlYXNlIHRlbGwgdXMhICBidWctcGFydGVkQGdudS5vcmciCittc2dzdHIgIiIKKyJMZSBmb3JtYXQgZGUgbGEgdGFibGUgZGUgcGFydGl0aW9ucyBHUFQgYSBsYSB2ZXJzaW9uICV4LCBjZSBxdWkgZXN0IHBsdXMgIgorInLpY2VudCBxdWUgY2UgcXVlIFBhcnRlZCBwZXV0IHJlY29ubmHudHJlLiBTVlAgbm91cyBhdmlzZXIgISBidWctcGFydGVkQGdudS4iCisib3JnIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm90IGFsbCBvZiB0aGUgc3BhY2UgYXZhaWxhYmxlIHRvICVzIGFwcGVhcnMgdG8gYmUgdXNlZCwgeW91IGNhbiBmaXggdGhlIEdQVCAiCisidG8gdXNlIGFsbCBvZiB0aGUgc3BhY2UgKGFuIGV4dHJhICVsbHUgYmxvY2tzKSBvciBjb250aW51ZSB3aXRoIHRoZSBjdXJyZW50ICIKKyJzZXR0aW5nPyAiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzo4MjcKK21zZ2lkICIiCisiVGhlIGJhY2t1cCBHUFQgdGFibGUgaXMgbm90IGF0IHRoZSBlbmQgb2YgdGhlIGRpc2ssIGFzIGl0IHNob3VsZCBiZS4gIFRoaXMgIgorIm1pZ2h0IG1lYW4gdGhhdCBhbm90aGVyIG9wZXJhdGluZyBzeXN0ZW0gYmVsaWV2ZXMgdGhlIGRpc2sgaXMgc21hbGxlci4gIEZpeCwgIgorImJ5IG1vdmluZyB0aGUgYmFja3VwIHRvIHRoZSBlbmQgKGFuZCByZW1vdmluZyB0aGUgb2xkIGJhY2t1cCk/IgorbXNnc3RyICIiCisiTGEgdGFibGUgZCdhcmNoaXZlIEdQVCBuJ2VzdCBwYXMg4CBsYSBmaW4gZHUgZGlzcXVlIGFpbnNpIHF1J2VsbGUgbGUgIgorImRldnJhaXQuIENlbGEgcGV1dCB2b3Vsb2lyIGRpcmUgcXUndW4gYXV0cmUgc3l06G1lIGQnZXhwbG9pdGF0aW9uIGNyb2l0IHF1ZSAiCisibGUgZGlzcXVlIGVzdCBwbHVzIHBldGl0LiBDb3JyaWdlciBlbiBk6XBsYedhbnQgbCdhcmNoaXZlIOAgbGEgZmluIChldCAiCisiZW5sZXZlciBsYSB2aWVpbGxlIHNhdXZlZ2FyZGUpID8iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6ODYyCittc2dpZCAiIgorIlRoZSBwcmltYXJ5IEdQVCB0YWJsZSBpcyBjb3JydXB0LCBidXQgdGhlIGJhY2t1cCBhcHBlYXJzIE9LLCBzbyB0aGF0IHdpbGwgYmUgIgorInVzZWQuIgorbXNnc3RyICIiCisiTGEgdGFibGUgcHJpbWFpcmUgR1BUIGVzdCBjb3Jyb21wdWUgbWFpcyBsJ2FyY2hpdmUgc2VtYmxlIG9rLCBlbGxlIHNlcmEgZG9uYyAiCisidXRpbGlz6WUuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjg3MAorbXNnaWQgIiIKKyJCb3RoIHRoZSBwcmltYXJ5IGFuZCBiYWNrdXAgR1BUIHRhYmxlcyBhcmUgY29ycnVwdC4gIFRyeSBtYWtpbmcgYSBmcmVzaCAiCisidGFibGUsIGFuZCB1c2luZyBQYXJ0ZWQncyByZXNjdWUgZmVhdHVyZSB0byByZWNvdmVyIHBhcnRpdGlvbnMuIgorbXNnc3RyICIiCisiTGVzIHRhYmxlcyBHUFQgcHJpbWFpcmUgZXQgbCdhcmNoaXZlIHNvbnQgY29ycm9tcHVlcy4gRXNzYXllciBkZSBmYWlyZSB1bmUgIgorIm5vdXZlbGxlIHRhYmxlIGV0IGQndXRpbGlzZXIgbGUgbW9kZSBkZSBzZWNvdXJzIGRlIFBhcnRlZCBwb3VyIHJlY3Vw6XJlciBsZXMgIgorInBhcnRpdGlvbnMuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjE4MQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHNpZ25hdHVyZSAleCBmb3IgTWFjIGRpc2sgbGFiZWxzLiIKK21zZ3N0ciAiU2lnbmF0dXJlIGludmFsaWRlICV4IHBvdXIgdW5lIOl0aXF1ZXR0ZSBkZSBkaXNxdWUgTWFjLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoyMjYKK21zZ2lkICJQYXJ0aXRpb24gbWFwIGhhcyBubyBwYXJ0aXRpb24gbWFwIGVudHJ5ISIKK21zZ3N0ciAiTGEgdGFibGUgZGUgcGFydGl0aW9uIG4nYSBwYXMgZCdlbnRy6WUgZGUgdGFibGUgZGUgcGFydGl0aW9uICEiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIHRvbyBzbWFsbCBmb3IgYSBNYWMgZGlzayBsYWJlbCEiCittc2dzdHIgIiVzIGVzdCB0cm9wIHBldGl0IHBvdXIgdW5lIOl0aXF1ZXR0ZSBkZSBkaXNxdWUgTWFjICEiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIlBhcnRpdGlvbiAlZCBoYXMgYW4gaW52YWxpZCBzaWduYXR1cmUgJXguIgorbXNnc3RyICJMYSBwYXJ0aXRpb24gJWQgYSB1bmUgc2lnbmF0dXJlIGludmFsaWRlICV4LiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGFydGl0aW9uICVkIGhhcyBhbiBpbnZhbGlkIGxlbmd0aCBvZiAwIGJ5dGVzISIKK21zZ3N0ciAiTGEgcGFydGl0aW9uICVkIGEgdW5lIGxvbmd1ZXVyIGludmFsaWRlIGRlIDAgb2N0ZXQgISIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo1ODAKK21zZ2lkICJUaGUgZGF0YSByZWdpb24gZG9lc24ndCBzdGFydCBhdCB0aGUgc3RhcnQgb2YgdGhlIHBhcnRpdGlvbi4iCittc2dzdHIgIkxhIHpvbmUgZGUgZG9ubullcyBuJ2VzdCBwYXMgYXUgZOlidXQgZGUgbGEgcGFydGl0aW9uLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo1OTcKK21zZ2lkICJUaGUgYm9vdCByZWdpb24gZG9lc24ndCBzdGFydCBhdCB0aGUgc3RhcnQgb2YgdGhlIHBhcnRpdGlvbi4iCittc2dzdHIgIkxhIHpvbmUgZCdhbW9yY2Ugbidlc3QgcGFzIGF1IGTpYnV0IGRlIGxhIHBhcnRpdGlvbi4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NjExCittc2dpZCAiVGhlIHBhcnRpdGlvbidzIGJvb3QgcmVnaW9uIGRvZXNuJ3Qgb2NjdXB5IHRoZSBlbnRpcmUgcGFydGl0aW9uLiIKK21zZ3N0ciAiIgorIkxhIHpvbmUgZCdhbW9yY2UgZGUgbGEgcGFydGl0aW9uIG4nb2NjdXBlIHBhcyBlbnRp6HJlbWVudCBsYSBwYXJ0aXRpb24uIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjYyMgorbXNnaWQgIlRoZSBwYXJ0aXRpb24ncyBkYXRhIHJlZ2lvbiBkb2Vzbid0IG9jY3VweSB0aGUgZW50aXJlIHBhcnRpdGlvbi4iCittc2dzdHIgIiIKKyJMYSB6b25lIGRlIGRvbm7pZXMgZGUgbGEgcGFydGl0aW9uIG4nb2NjdXBlIHBhcyBlbnRp6HJlbWVudCBsYSBwYXJ0aXRpb24uIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjY3NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV2VpcmQgYmxvY2sgc2l6ZSBvbiBkZXZpY2UgZGVzY3JpcHRvcjogJWQgYnl0ZXMgaXMgbm90IGRpdmlzaWJsZSBieSA1MTIuIgorbXNnc3RyICIiCisiVGFpbGxlIGJpemFycmUgZGUgYmxvYyBzdXIgbGUgZGVzY3JpcHRldXIgZGUgcOlyaXBo6XJpcXVlOiAlZCBvY3RldHMgbidlc3QgIgorInBhcyBkaXZpc2libGUgcGFyIDUxMi4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6Njg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZHJpdmVyIGRlc2NyaXB0b3Igc2F5cyB0aGUgcGh5c2ljYWwgYmxvY2sgc2l6ZSBpcyAlZCBieXRlcywgYnV0IExpbnV4ICIKKyJzYXlzIGl0IGlzICVkIGJ5dGVzLiIKK21zZ3N0ciAiIgorIkxlIGRlc2NyaXB0ZXVyIGRlIHBpbG90ZSBpbmRpcXVlIHVuZSB0YWlsbGUgcGh5c2lxdWUgZGUgYmxvYyBkZSAlZCBvY3RldHMsICIKKyJtYWlzIExpbnV4IGx1aSBpbmRpcXVlICVkIG9jdGV0cy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NzM2Cittc2dpZCAiTm8gdmFsaWQgcGFydGl0aW9uIG1hcCBmb3VuZC4iCittc2dzdHIgIkF1Y3VuZSB0YWJsZSBkZSBwYXJ0aXRpb24gdmFsaWRlIG4nYSDpdOkgdHJvdXbpZS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6Nzk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb25mbGljdGluZyBwYXJ0aXRpb24gbWFwIGVudHJ5IHNpemVzISAgRW50cnkgMSBzYXlzIGl0IGlzICVkLCBidXQgZW50cnkgJWQgIgorInNheXMgaXQgaXMgJWQhIgorbXNnc3RyICIiCisiVGFpbGxlcyBjb25mbGljdHVlbGxlcyBkZXMgZW50cullcyBkZSBsYSB0YWJsZSBkZSBwYXJ0aXRpb24gISBMJ2VudHLpZSAxICIKKyJpbmRpcXVlICVkIGFsb3JzIHF1ZSBsJ2VudHLpZSAlZCBpbmRpcXVlICVkICEiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6ODIyCittc2dpZCAiV2VpcmQhICBUaGVyZSBhcmUgMiBwYXJ0aXRpb25zIG1hcCBlbnRyaWVzISIKK21zZ3N0ciAiQml6YXJyZSAtIElsIHkgYSAyIGVudHLpZXMgZGUgdGFibGUgZGUgcGFydGl0aW9ucyAhIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjEzNDcKK21zZ2lkICIiCisiQ2hhbmdpbmcgdGhlIG5hbWUgb2YgYSByb290IG9yIHN3YXAgcGFydGl0aW9uIHdpbGwgcHJldmVudCBMaW51eCBmcm9tICIKKyJyZWNvZ25pc2luZyBpdCBhcyBzdWNoLiIKK21zZ3N0ciAiIgorIkNoYW5nZXIgbGUgbm9tIGQndW5lIHBhcnRpdGlvbiByb290IG91IHN3YXAgZW1w6mNoZXJhIExpbnV4IGRlIGxlcyAiCisicmVjb25uYe50cmUgZW4gdGFudCBxdWUgdGVsbGVzLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoxNDQzCittc2dpZCAiQ2FuJ3QgYWRkIGFub3RoZXIgcGFydGl0aW9uIC0tIHRoZSBwYXJ0aXRpb24gbWFwIGlzIHRvbyBzbWFsbCEiCittc2dzdHIgIiIKKyJOZSBwZXV0IGFqb3V0ZXIgdW5lIGF1dHJlIHBhcnRpdGlvbiAtIGxhIHRhYmxlIGRlIHBhcnRpdGlvbiBlc3QgdHJvcCBwZXRpdGUgISIKKworIzogbGlicGFydGVkL2xhYmVscy9wYzk4LmM6MzU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcGFydGl0aW9uIHRhYmxlIG9uICVzLiIKK21zZ3N0ciAiVGFibGUgZGUgcGFydGl0aW9uIGludmFsaWRlIHN1ciAlcy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcGM5OC5jOjQwNiBsaWJwYXJ0ZWQvbGFiZWxzL3BjOTguYzo0ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBhcnRpdGlvbiAlZCBpc24ndCBhbGlnbmVkIHRvIGN5bGluZGVyIGJvdW5kYXJpZXMuICBUaGlzIGlzIHN0aWxsICIKKyJ1bnN1cHBvcnRlZC4iCittc2dzdHIgIiIKKyJMYSBwYXJ0aXRpb24gJWQgbidlc3QgcGFzIGFsaWdu6WUgc3VyIHVuZSBmcm9udGnocmUgZGUgY3lsaW5kcmUuIEJlc29pbiAiCisiZCdham91dCBkZSBjZXR0ZSBmb25jdGlvbm5hbGl06S4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcGM5OC5jOjc5MQorbXNnaWQgIkNhbid0IGFkZCBhbm90aGVyIHBhcnRpdGlvbi4iCittc2dzdHIgIk5lIHBldXQgYWpvdXRlciB1bmUgYXV0cmUgcGFydGl0aW9uLiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzoxNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBCYWQgY2hlY2tzdW0gb24gYmxvY2sgJWxsdSBvZiB0eXBlICVzLiIKK21zZ3N0ciAiJXMgOiBNYXV2YWlzZSBzb21tZSBkZSBjb250cvRsZSBzdXIgbGUgYmxvYyAlbGx1IGRlIHR5cGUgJXMuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjQ5NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IERpZG4ndCBmaW5kIHJkYiBibG9jaywgc2hvdWxkIG5ldmVyIGhhcHBlbi4iCittc2dzdHIgIiVzIDogTidhIHBhcyB0cm91dukgbGUgYmxvYyBSREIsIGNlbGEgbmUgZGV2cmFpdCBqYW1haXMgYXJyaXZlci4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6NTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogTG9vcCBkZXRlY3RlZCBhdCBibG9jayAlZC4iCittc2dzdHIgIiVzIDogQm91Y2xlIGRldGVjdOllIHN1ciBsZSBibG9jICVkLiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo2MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBUaGUgJXMgbGlzdCBzZWVtcyBiYWQgYXQgYmxvY2sgJXMuIgorbXNnc3RyICIlcyA6IExhIGxpc3RlICVzIHNlbWJsZSDqdHJlIGVycm9u6WUgc3VyIGxlIGJsb2MgJXMuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjY4OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBsaXN0IGJhZCBibG9ja3MuIgorbXNnc3RyICIlcyA6IE4nYSBwYXMgcHUgZOl0ZWN0ZXIgbGVzIGJsb2NzIGTpZmVjdHVldXgiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6Njk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGxpc3QgcGFydGl0aW9uIGJsb2Nrcy4iCittc2dzdHIgIiVzIDogTidhIHBhcyBwdSBsaXN0ZXIgbGVzIGJsb2NzIGRlIGxhIHBhcnRpdGlvbi4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6NzA1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGxpc3QgZmlsZSBzeXN0ZW0gYmxvY2tzLiIKK21zZ3N0ciAiJXMgOiBOJ2EgcGFzIHB1IGxpc3RlciBsZXMgYmxvY3MgZHUgc3lzdOhtZSBkZSBmaWNoaWVycy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6NzEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGxpc3QgYm9vdCBibG9ja3MuIgorbXNnc3RyICIlcyA6IE4nYSBwYXMgcHUgbGlzdGVyIGxlcyBibG9jcyBkZSBk6W1hcnJhZ2UuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjc0MAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gd3JpdGUgcGFydGl0aW9uIGJsb2NrIGF0ICVkLiIKK21zZ3N0ciAiTidhIHBhcyBwdSDpY3JpcmUgbGUgYmxvYyBkZXNjcmlwdGV1ciBkZSBwYXJ0aXRpb24g4CAlZC4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6MTA2OQorbXNnaWQgIlVuYWJsZSB0byBhbGxvY2F0ZSBhIHBhcnRpdGlvbiBudW1iZXIuIgorbXNnc3RyICJJbXBvc3NpYmxlIGQnYWxsb3VlciB1biBudW3pcm8gZGUgcGFydGl0aW9uLiIKKworIzogbGlicGFydGVkL2xhYmVscy9zdW4uYzoxNDUKK21zZ2lkICJDb3JydXB0ZWQgU3VuIGRpc2sgbGFiZWwgZGV0ZWN0ZWQuIgorbXNnc3RyICLJdGlxdWV0dGUgZGUgZGlzcXVlIFN1biBjb3Jyb21wdWUuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3N1bi5jOjI2NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGRpc2sgQ0hTIGdlb21ldHJ5ICglZCwlZCwlZCkgcmVwb3J0ZWQgYnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0gZG9lcyBub3QgIgorIm1hdGNoIHRoZSBnZW9tZXRyeSBzdG9yZWQgb24gdGhlIGRpc2sgbGFiZWwgKCVkLCVkLCVkKS4iCittc2dzdHIgIiIKKyJMYSBn6W9t6XRyaWUgQ0hTIGR1IGRpc3F1ZSAoJWQsJWQsJWQpIHJhcHBvcnTpZSBwYXIgbGUgc3lzdOhtZSAiCisiZCdleHBsb2l0YXRpb24gbmUgY29uY29yZGUgcGFzIGF2ZWMgbGEgZ+lvbel0cmllIHN0b2Nr6WUgc3VyIGwn6XRpcXVldHRlIGRlICIKKyJkaXNxdWUgKCVkLCVkLCVkKS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6Mjg4CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBkaXNrIGxhYmVsIGRlc2NyaWJlcyBhIGRpc2sgYmlnZ2VyIHRoYW4gJXMuIgorbXNnc3RyICJMJ+l0aXF1ZXR0ZSBkZSBkaXNxdWUgZOljcml0IHVuIGRpc3F1ZSBwbHVzIGdyb3MgcXVlICVzLiIKKworIzogbGlicGFydGVkL2xhYmVscy9zdW4uYzo0NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGRpc2sgaGFzICVkIGN5bGluZGVycywgd2hpY2ggaXMgZ3JlYXRlciB0aGFuIHRoZSBtYXhpbXVtIG9mIDY1NTM2LiIKK21zZ3N0ciAiIgorIkxlIGRpc3F1ZSBhICVkIGN5bGluZHJlcywgY2UgcXVpIGVzdCBwbHVzIGdyYW5kIHF1ZSBsZSBtYXhpbXVtIDogNjU1MzYuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3N1bi5jOjczNworbXNnaWQgIiIKKyJUaGUgV2hvbGUgRGlzayBwYXJ0aXRpb24gaXMgdGhlIG9ubHkgYXZhaWxhYmxlIG9uZSBsZWZ0LiAgR2VuZXJhbGx5LCBpdCBpcyAiCisibm90IGEgZ29vZCBpZGVhIHRvIG92ZXJ3cml0ZSB0aGlzIHBhcnRpdGlvbiB3aXRoIGEgcmVhbCBvbmUuICBTb2xhcmlzIG1heSAiCisibm90IGJlIGFibGUgdG8gYm9vdCB3aXRob3V0IGl0LCBhbmQgU0lMTyAodGhlIHNwYXJjIGJvb3QgbG9hZGVyKSBhcHByZWNpYXRlcyAiCisiaXQgYXMgd2VsbC4iCittc2dzdHIgIiIKKyJMYSBwYXJ0aXRpb24gcmVwculzZW50YW50IGxlIGRpc3F1ZSBlbnRpZXIgZXN0IGxhIHNldWxlIGRpc3BvbmlibGUgcmVzdGFudGUuICIKKyJH6W7pcmFsZW1lbnQsIGNlIG4nZXN0IHBhcyB1bmUgYm9ubmUgaWTpZSBkJ+ljcmFzZXIgY2V0dGUgcGFydGl0aW9uIGF2ZWMgdW5lICIKKyJ2cmFpZS4gU29sYXJpcyBuZSBwb3VycmEgcGFzIGTpbWFycmVyIHNhbnMgZWxsZSBldCBTSUxPIChsZSBnZXN0aW9ubmFpcmUgZGUgIgorImTpbWFycmFnZXN1ciBTcGFyYykgZW4gYSBiZXNvaW4uIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3N1bi5jOjc1MgorbXNnaWQgIlN1biBkaXNrIGxhYmVsIGlzIGZ1bGwuIgorbXNnc3RyICJMJ+l0aXF1ZXR0ZSBkZSBkaXNxdWUgU1VOIGVzdCByZW1wbGllLiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6MTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBvcGVuaW5nIGRldmljZSAnJXMnIGZhaWxlZC5cbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjE2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgc2Vla2luZyBkZXZpY2UgJyVzJyBmYWlsZWQuXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzoxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHdyaXRpbmcgdG8gZGV2aWNlICclcycgZmFpbGVkLFxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6MTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyByZWFkaW5nIGZyb20gZGV2aWNlICclcycgZmFpbGVkLlxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6MTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhdGFsIGVycm9yXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDE4Cittc2dpZCAiQ291bGQgbm90IHJlYWQgVlRPQyBsYWJlbHMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQyNAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIFZUT0MgRk1UMSBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0MzEKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBWVE9DIEZNVDQgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDM4Cittc2dpZCAiQ291bGQgbm90IHJlYWQgVlRPQyBGTVQ1IERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQ0NQorbXNnaWQgIkNvdWxkIG5vdCByZWFkIFZUT0MgRk1UNyBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0NjIKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgVlRPQyBsYWJlbHMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQ2OAorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBWVE9DIEZNVDEgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDc1Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIFZUT0MgRk1UNCBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0ODIKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgVlRPQyBGTVQ1IERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQ4OQorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBWVE9DIEZNVDcgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xpYnBhcnRlZC5jOjI5NiBsaWJwYXJ0ZWQvbGlicGFydGVkLmM6MzE2Cittc2dpZCAiT3V0IG9mIG1lbW9yeS4iCittc2dzdHIgIk3pbW9pcmUgaW5zdWZmaXNhbnRlLiIKKworIzogbGlicGFydGVkL3VuaXQuYzoxMzkKK21zZ2lkICJDYW5ub3QgZ2V0IHVuaXQgc2l6ZSBmb3Igc3BlY2lhbCB1bml0ICdDT01QQUNUJy4iCittc2dzdHIgIklsIG4neSBhIHBhcyBkZSB0YWlsbGUgdW5pdGFpcmUgcG91ciBsJ3VuaXTpIHNw6WNpYWxlICdDT01QQUNUJy4iCisKKyM6IGxpYnBhcnRlZC91bml0LmM6Mzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIlwiJXNcIiBoYXMgaW52YWxpZCBzeW50YXggZm9yIGxvY2F0aW9ucy4iCittc2dzdHIgIlwiJXNcIiBhIHVuZSBzeW50YXhlIGNocyBpbnZhbGlkZS4iCisKKyM6IGxpYnBhcnRlZC91bml0LmM6Mzk0CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBtYXhpbXVtIGhlYWQgdmFsdWUgaXMgJWQuIgorbXNnc3RyICJMZSBub21icmUgbWF4aW11bSBkZSB06nRlcyBlc3QgJWQuIgorCisjOiBsaWJwYXJ0ZWQvdW5pdC5jOjQwMQorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgbWF4aW11bSBzZWN0b3IgdmFsdWUgaXMgJWQuIgorbXNnc3RyICJMZSBub21icmUgbWF4aW11bSBkZSBzZWN0ZXVycyBlc3QgJWQuIgorCisjOiBsaWJwYXJ0ZWQvdW5pdC5jOjQxMyBsaWJwYXJ0ZWQvdW5pdC5jOjU0NQorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgbG9jYXRpb24gJXMgaXMgb3V0c2lkZSBvZiB0aGUgZGV2aWNlICVzLiIKK21zZ3N0ciAiTGUgbGlldSAlcyBlc3QgZW4gZGVob3JzIGR1IHDpcmlwaOlyaXF1ZSAlcy4iCisKKyM6IGxpYnBhcnRlZC91bml0LmM6NTI3Cittc2dpZCAiSW52YWxpZCBudW1iZXIuIgorbXNnc3RyICJOb21icmUgaW52YWxpZGUuIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYWZmcy5jOjYzIGxpYnBhcnRlZC9mcy9hbWlnYS9hcGZzLmM6NTYKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hc2ZzLmM6NzAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGFsbG9jYXRlIHBhcnRpdGlvbiBibG9ja1xuIgorbXNnc3RyICIlcyA6IE4nYSBwYXMgcHUgbGlzdGVyIGxlcyBibG9jcyBkZSBsYSBwYXJ0aXRpb24uIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYWZmcy5jOjc4IGxpYnBhcnRlZC9mcy9hbWlnYS9hcGZzLmM6NzAKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hc2ZzLmM6ODYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGFsbG9jYXRlIGJsb2NrXG4iCittc2dzdHIgIiVzIDogTidhIHBhcyBwdSBsaXN0ZXIgbGVzIGJsb2NzIGRlIGTpbWFycmFnZS4iCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hZmZzLmM6ODMgbGlicGFydGVkL2ZzL2FtaWdhL2FwZnMuYzo3NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBDb3VsZG4ndCByZWFkIGJvb3QgYmxvY2sgJWxsdVxuIgorbXNnc3RyICIlcyA6IEJvdWNsZSBkZXRlY3TpZSBzdXIgbGUgYmxvYyAlZC4iCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hZmZzLmM6OTkgbGlicGFydGVkL2ZzL2FtaWdhL2FwZnMuYzo4NgorIzogbGlicGFydGVkL2ZzL2FtaWdhL2FzZnMuYzo5MiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXNmcy5jOjEwNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBDb3VsZG4ndCByZWFkIHJvb3QgYmxvY2sgJWxsdVxuIgorbXNnc3RyICIlcyA6IEJvdWNsZSBkZXRlY3TpZSBzdXIgbGUgYmxvYyAlZC4iCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jOjcyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBhbGxvY2F0ZSBpZCBsaXN0IGVsZW1lbnRcbiIKK21zZ3N0ciAiJXMgOiBOJ2EgcGFzIHB1IGTpdGVjdGVyIGxlcyBibG9jcyBk6WZlY3R1ZXV4IgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBDb3VsZG4ndCByZWFkIGJsb2NrICVsbHVcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzoyMDIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogQmFkIGNoZWNrc3VtIG9uIGJsb2NrICVsbHUgb2YgdHlwZSAlc1xuIgorbXNnc3RyICIlcyA6IE1hdXZhaXNlIHNvbW1lIGRlIGNvbnRy9GxlIHN1ciBsZSBibG9jICVsbHUgZGUgdHlwZSAlcy4iCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jOjIxMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBDb3VsZG4ndCB3cml0ZSBibG9jayAlZFxuIgorbXNnc3RyICIlcyA6IEJvdWNsZSBkZXRlY3TpZSBzdXIgbGUgYmxvYyAlZC4iCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jOjI3OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gYWxsb2NhdGUgZGlza19zcGVjaWZpYyByZGIgYmxvY2tcbiIKK21zZ3N0ciAiJXMgOiBOJ2EgcGFzIHB1IGTpdGVjdGVyIGxlcyBibG9jcyBk6WZlY3R1ZXV4IgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzoyODkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRGlkbid0IGZpbmQgcmRiIGJsb2NrLCBzaG91bGQgbmV2ZXIgaGFwcGVuXG4iCittc2dzdHIgIiVzIDogTidhIHBhcyB0cm91dukgbGUgYmxvYyBSREIsIGNlbGEgbmUgZGV2cmFpdCBqYW1haXMgYXJyaXZlci4iCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jOjMxOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gcmVhZCBwYXJ0aXRpb24gYmxvY2sgJWxsdVxuIgorbXNnc3RyICIlcyA6IE4nYSBwYXMgcHUgbGlzdGVyIGxlcyBibG9jcyBkZSBsYSBwYXJ0aXRpb24uIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6ODcgbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjExMgorbXNnaWQgIkluY29uc2lzdGVudCBncm91cCBkZXNjcmlwdG9ycyEiCittc2dzdHIgIkRlc2NyaXB0ZXVycyBkZSBncm91cGUgaW5jb25zaXN0YW50ICEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo5MSBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6MTE2Cittc2dpZCAiRmlsZSBzeXN0ZW0gZnVsbCEiCittc2dzdHIgIkxlIHN5c3TobWUgZGUgZmljaGllcnMgZXN0IHBsZWluICEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo2ODYKK21zZ2lkICJJbnZhbGlkIHN1cGVyYmxvY2suICBBcmUgeW91IHN1cmUgdGhpcyBpcyBhbiBleHQyIGZpbGUgc3lzdGVtPyIKK21zZ3N0ciAiIgorIlN1cGVyIGJsb2MgaW52YWxpZGUuIMp0ZXMtdm91cyBjZXJ0YWluIHF1J2lsIHMnYWdpc3NlIGQndW4gc3lzdOhtZSBkZSAiCisiZmljaGllcnMgZXh0MiA/IgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6NzAwIGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NjU4Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGVycm9ycyEgIFlvdSBzaG91bGQgcnVuIGUyZnNjay4iCittc2dzdHIgIkxlIHN5c3TobWUgZGUgZmljaGllcnMgYSBkZXMgZXJyZXVycyAhIFZvdXMgZGV2cmlleiBleOljdXRlciBlMmZzY2suIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6NzExCittc2dpZCAiIgorIkZpbGUgc3lzdGVtIHdhcyBub3QgY2xlYW5seSB1bm1vdW50ZWQhICBZb3Ugc2hvdWxkIHJ1biBlMmZzY2suICBNb2RpZnlpbmcgYW4gIgorInVuY2xlYW4gZmlsZSBzeXN0ZW0gY291bGQgY2F1c2Ugc2V2ZXJlIGNvcnJ1cHRpb24uIgorbXNnc3RyICIiCisiTGUgc3lzdOhtZSBkZSBmaWNoaWVycyBuJ2EgcGFzIOl06SBk6W1vbnTpIHByb3ByZW1lbnQhIFZvdXMgZGV2cmlleiBleOljdXRlciAiCisiZTJmc2NrLiBNb2RpZmllciB1biBzeXN06G1lIGRlIGZpY2hpZXJzIGluY29ycmVjdCBwb3VycmFpdCBwcm92b3F1ZXIgZGUgIgorInPpcmlldXggcHJvYmzobWVzIGRlIGNvcnJ1cHRpb24uIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6NzMxCittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGluY29tcGF0aWJsZSBmZWF0dXJlIGVuYWJsZWQuIgorbXNnc3RyICJMZSBzeXN06G1lIGRlIGZpY2hpZXJzIGEgdW5lIG9wdGlvbiBpbmNvbXBhdGlibGUgYWN0aXbpZS4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo3NDIKK21zZ2lkICJFcnJvciBhbGxvY2F0aW5nIGJ1ZmZlciBjYWNoZS4iCittc2dzdHIgIkVycmV1ciBsb3JzIGRlIGwnYWxsb2NhdGlvbiBkJ3VuIHRhbXBvbiBkZSBjYWNoZS4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfaW5vZGVfcmVsb2NhdG9yLmM6MTE0Cittc2dpZCAiIgorIkZvdW5kIGFuIGlub2RlIHdpdGggYSBpbmNvcnJlY3QgbGluayBjb3VudC4gIEJldHRlciBnbyBydW4gZTJmc2NrIGZpcnN0ISIKK21zZ3N0ciAiIgorIklub2RlIHJlcOly6SBhdmVjIHVuIG5vbWJyZSBpbmNvcnJlY3QgZGUgbGllbnMuIElsIHNlcmFpdCBwculm6XJhYmxlICIKKyJkJ2V46WN1dGVyIGUyZnNjayBkJ2Fib3JkICEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfaW5vZGVfcmVsb2NhdG9yLmM6NDg3Cittc2dpZCAiTm90IGVub3VnaCBmcmVlIGlub2RlcyEiCittc2dzdHIgIlBhcyBhc3NzZXogZCdpbm9kZXMgbGlicmVzISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzoyMjMKK21zZ2lkICJGaWxlIHN5c3RlbSBpcyB0b28gZnVsbCB0byByZW1vdmUgYSBncm91cCEiCittc2dzdHIgIkxlIHN5c3TobWUgZGUgZmljaGllcnMgZXN0IHRyb3AgcGxlaW4gcG91ciBlbmxldmVyIHVuIGdyb3VwZSEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6MjMyCittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIHRvbyBtYW55IGFsbG9jYXRlZCBpbm9kZXMgdG8gcmVtb3ZlIGEgZ3JvdXAhIgorbXNnc3RyICJMZSBzeXN06G1lIGRlIGZpY2hpZXJzIGEgdHJvcCBkJ2lub2RlcyBhbGxvdelzIHBvdXIgZW5sZXZlciB1biBncm91cGUhIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjQ5MQorbXNnaWQgImFkZGluZyBncm91cHMiCittc2dzdHIgImFqb3V0IGRlIGdyb3VwZXMiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgZmlsZSBzeXN0ZW0gaXMgdG9vIGZ1bGwgdG8gcmVzaXplIGl0IHRvICVpIGJsb2Nrcy4gIFNvcnJ5LiIKK21zZ3N0ciAiIgorIlZvdHJlIHN5c3TobWUgZGUgZmljaGllcnMgZXN0IHRyb3AgcGxlaW4gcG91ciBsZSByZWRpbWVuc2lvbm5lciBlbiAlaSBibG9jcy4gIgorIkTpc29s6S4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGZpbGUgc3lzdGVtIGhhcyB0b28gbWFueSBvY2N1cGllZCBpbm9kZXMgdG8gcmVzaXplIGl0IHRvICVpIGJsb2Nrcy4gICIKKyJTb3JyeS4iCittc2dzdHIgIiIKKyJMZSBzeXN06G1lIGRlIGZpY2hpZXJzIG9jY3VwZSB0cm9wIGQnaW5vZGVzIHBvdXIgbGUgcmVkaW1lbnNpb25uZXIgZW4gJWkgIgorImJsb2NzLiBE6XNvbOkuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjY2NgorbXNnaWQgIkZpbGUgc3lzdGVtIHdhcyBub3QgY2xlYW5seSB1bm1vdW50ZWQhICBZb3Ugc2hvdWxkIHJ1biBlMmZzY2suIgorbXNnc3RyICIiCisiTGUgc3lzdOhtZSBkZSBmaWNoaWVycyBuJ2EgcGFzIOl06SBk6W1vbnTpIHByb3ByZW1lbnQgISBWb3VzIGRldnJpZXogIgorImV46WN1dGVyIGUyZnNjay4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6Njc1Cittc2dpZCAiIgorIlRoZSBmaWxlIHN5c3RlbSBoYXMgdGhlICdkaXJfaW5kZXgnIGZlYXR1cmUgZW5hYmxlZC4gIFBhcnRlZCBjYW4gb25seSByZXNpemUgIgorInRoZSBmaWxlIHN5c3RlbSBpZiBpdCBkaXNhYmxlcyB0aGlzIGZlYXR1cmUuICBZb3UgY2FuIGVuYWJsZSBpdCBsYXRlciBieSAiCisicnVubmluZyAndHVuZTJmcyAtTyBkaXJfaW5kZXggREVWSUNFJyBhbmQgdGhlbiAnZTJmc2NrIC1mRCBERVZJQ0UnLiIKK21zZ3N0ciAiIgorIkxlIHN5c3TobWUgZGUgZmljaGllcnMgYSBsJ29wdGlvbiAnZGlyX2luZGV4JyBhY3RpdullLiBQYXJ0ZWQgbmUgcGV1dCAiCisicmVkaW1lbnNpb25uZXIgY2Ugc3lzdOhtZSBkZSBmaWNoaWVycyBxdWUgcydpbCBk6XNhY3RpdmUgY2V0dGUgb3B0aW9uLiBWb3VzICIKKyJwb3VycmV6IGwnYWN0aXZlciBlbnN1aXRlIGF2ZWMgbGEgY29tbWFuZGUgJ3R1bmUyZnMgLU8gZGlyX2luZGV4ICIKKyJQRVJJUEhFUklRVUUnIHB1aXMgJ2UyZnNjayAtZkQgUEVSSVBIRVJJUVVFJy4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NjkxCisjLCBmdXp6eQorbXNnaWQgIiIKKyJBIHJlc2l6ZSBvcGVyYXRpb24gb24gdGhpcyBmaWxlIHN5c3RlbSB3aWxsIHVzZSBFWFBFUklNRU5UQUwgY29kZVxuIgorInRoYXQgTUFZIENPUlJVUFQgaXQgKGFsdGhvdWdoIG5vIG9uZSBoYXMgcmVwb3J0ZWQgYW55IHN1Y2ggZGFtYWdlIHlldCkuXG4iCisiWW91IHNob3VsZCBhdCBsZWFzdCBiYWNrdXAgeW91ciBkYXRhIGZpcnN0LCBhbmQgcnVuICdlMmZzY2sgLWYnIGFmdGVyd2FyZHMuIgorbXNnc3RyICIiCisiVW5lIG9w6XJhdGlvbiBkZSByZWRpbW1lbnRpb25uZW1lbnQgc3VyIGNlIHN5c3TobWUgZGUgZmljaGllciB1dGlsaXNlcmEgdW4gIgorImNvZGUgRVhQRVJJTUVOVEFMIHF1aSBQT1VSUkFJVCBsZSBDT1JST01QUkUgKHMnaWwgbmUgbCdhIHBhcyBk6WrgIOl06SkuIFZvdXMgIgorImRldnJpZXogYXUgbW9pbnMgc2F1dmVnYXJkZXIgdm9zIGRvbm7pZXMgZXQgZW5zdWl0ZSBsYW5jZXIgJ2UyZnNjayAtZicuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2Jsb2NrX3JlbG9jYXRvci5jOjE5OAorbXNnaWQgIkNyb3NzLWxpbmtlZCBibG9ja3MgZm91bmQhICBCZXR0ZXIgZ28gcnVuIGUyZnNjayBmaXJzdCEiCittc2dzdHIgIiIKKyJCbG9jcyBsaelzIGRlIGZh529uIGNyb2lz6WUgcmVw6XLpcyAhIElsIHNlcmFpdCBwculm6XJhYmxlIGQnZXjpY3V0ZXIgZTJmc2NrICIKKyJkJ2Fib3JkICEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfYmxvY2tfcmVsb2NhdG9yLmM6NTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrICVpIGhhcyBubyByZWZlcmVuY2U/ICBXZWlyZC4iCittc2dzdHIgIkxlIGJsb2MgJWkgbidhIHBhcyBkZSBy6WbpcmVuY2UgPyBCaXphcnJlLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9ibG9ja19yZWxvY2F0b3IuYzo3MzcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrICVpIHNob3VsZG4ndCBoYXZlIGJlZW4gbWFya2VkICglZCwgJWQpISIKK21zZ3N0ciAiTGUgYmxvYyAlaSBuZSBkZXZyYWl0IHBhcyBhdm9pciDpdOkgbWFycXXpICEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2ludGVyZmFjZS5jOjE4NgorbXNnaWQgIiIKKyJUaGUgZXh0MiBmaWxlIHN5c3RlbSBwYXNzZWQgYSBiYXNpYyBjaGVjay4gIEZvciBhIG1vcmUgY29tcHJlaGVuc2l2ZSBjaGVjaywgIgorInVzZSB0aGUgZTJmc2NrIHByb2dyYW0uIgorbXNnc3RyICIiCisiTGUgc3lzdOhtZSBkZSBmaWNoaWVycyBleHQyIGEgcGFzc+kgbGEgdulyaWZpY2F0aW9uIGRlIGJhc2UuIFBvdXIgdW5lICIKKyJ26XJpZmljYXRpb24gcGx1cyBhcHByb2ZvbmRpZSwgdXRpbGlzZXogZTJmc2NrLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvaW50ZXJmYWNlLmM6MjAzCittc2dpZCAiU29ycnksIGNhbid0IG1vdmUgdGhlIHN0YXJ0IG9mIGV4dDIgcGFydGl0aW9ucyB5ZXQhIgorbXNnc3RyICJE6XNvbOksIG9uIG5lIHBldXQgcGFzIGVuY29yZSBk6XBsYWNlciBsZSBk6WJ1dCBkJ3VuZSBwYXJ0aXRpb24gZXh0MiAhIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2J1ZmZlci5jOjgyCittc2dpZCAiQ291bGRuJ3QgZmx1c2ggYnVmZmVyIGNhY2hlISIKK21zZ3N0ciAiTmUgcGV1dCB2aWRlciBsZSBjYWNoZSEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfbWtmcy5jOjE2MgorbXNnaWQgIndyaXRpbmcgcGVyLWdyb3VwIG1ldGFkYXRhIgorbXNnc3RyICLpY3JpdHVyZSBkZXMgbel0YWRvbm7pZXMgcGVyLWdyb3VwIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX21rZnMuYzo1NjQKK21zZ2lkICJGaWxlIHN5c3RlbSB0b28gc21hbGwgZm9yIGV4dDIuIgorbXNnc3RyICJTeXN06G1lIGRlIGZpY2hpZXJzIHRyb3AgcGV0aXQgcG91ciBleHQyLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jYWxjLmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgbmVlZCAlcyBvZiBmcmVlIGRpc2sgc3BhY2UgdG8gc2hyaW5rIHRoaXMgcGFydGl0aW9uIHRvIHRoaXMgc2l6ZS4gICIKKyJDdXJyZW50bHksIG9ubHkgJXMgaXMgZnJlZS4iCittc2dzdHIgIiIKKyJWb3VzIGF2ZXogYmVzb2luIGRlICVzIGQnZXNwYWNlIGxpYnJlIHBvdXIgculkdWlyZSBjZXR0ZSBwYXJ0aXRpb24g4CBjZXR0ZSAiCisidGFpbGxlLiBQb3VyIGwnaW5zdGFudCBpbCBuJ3kgYSBxdWUgZGUgJXMgZGUgbGlicmUuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvbnRleHQuYzo1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2x1c3RlciBzdGFydCBkZWx0YSA9ICVkLCB3aGljaCBpcyBub3QgYSBtdWx0aXBsZSBvZiB0aGUgY2x1c3RlciBzaXplICVkLiIKK21zZ3N0ciAiIgorIkRlbHRhIGRlIGTpcGFydCBkdSBjbHVzdGVyID0gJWQgLCBsZXF1ZWwgbidlc3QgcGFzIHVuIG11bHRpcGxlIGRlIGxhIHRhaWxsZSAiCisiZCd1biBjbHVzdGVyICVkLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9mYXQuYzozMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGFydGl0aW9uIHRvbyBiaWcvc21hbGwgZm9yIGEgJXMgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICJMYSBwYXJ0aXRpb24gZXN0IHRyb3AgZ3JhbmRlL3BldGl0ZSBwb3VyIHVuIHN5c3TobWUgZGUgZmljaGllcnMgJXMuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jOjQ3NAorbXNnaWQgIiIKKyJUaGUgRkFUcyBkb24ndCBtYXRjaC4gIElmIHlvdSBkb24ndCBrbm93IHdoYXQgdGhpcyBtZWFucywgdGhlbiBzZWxlY3QgIgorImNhbmNlbCwgcnVuIHNjYW5kaXNrIG9uIHRoZSBmaWxlIHN5c3RlbSwgYW5kIHRoZW4gY29tZSBiYWNrLiIKK21zZ3N0ciAiIgorIkxlcyBGQVQgbmUgY29uY29yZGVudCBwYXMuIFNpIHZvdXMgbmUgc2F2ZXogcGFzIGNlIHF1ZSBjZWxhIHNpZ25pZmllIGFsb3JzICIKKyJz6WxlY3Rpb25uZXogqyBjYW5jZWwguyBldCBleOljdXRleiBzY2FuZGlzayBzdXIgbGUgc3lzdOhtZSBkZSBmaWNoaWVycywgIgorInB1aXMgcmVjb21tZW5jZXouIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jOjUxNAorbXNnaWQgIlRoZXJlIGFyZSBubyBwb3NzaWJsZSBjb25maWd1cmF0aW9ucyBmb3IgdGhpcyBGQVQgdHlwZS4iCittc2dzdHIgIklsIG4neSBhIHBhcyBkZSBjb25maWd1cmF0aW9uIHBvc3NpYmxlIHBvdXIgY2UgdHlwZSBGQVQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jOjUyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRmlsZSBzeXN0ZW0gZG9lc24ndCBoYXZlIGV4cGVjdGVkIHNpemVzIGZvciBXaW5kb3dzIHRvIGxpa2UgaXQuICBDbHVzdGVyICIKKyJzaXplIGlzICVkayAoJWRrIGV4cGVjdGVkKTsgbnVtYmVyIG9mIGNsdXN0ZXJzIGlzICVkICglZCBleHBlY3RlZCk7IHNpemUgb2YgIgorIkZBVHMgaXMgJWQgc2VjdG9ycyAoJWQgZXhwZWN0ZWQpLiIKK21zZ3N0ciAiIgorIkxlIHN5c3TobWUgZGUgZmljaGllcnMgbmUgY29ycmVzcG9uZCBwYXMg4CBkZXMgdGFpbGxlcyBjb21wYXRpYmxlcyBwb3VyICIKKyJXaW5kb3dzLiBMYSB0YWlsbGUgZHUgY2x1c3RlciBlc3QgJWRrICglZGsgYXR0ZW5kdSkuIExlIG5vbWJyZSBkZSBjbHVzdGVycyAiCisiZXN0ICVkICglZCBhdHRlbmR1KS4gTGEgdGFpbGxlIGRlcyBGQVQgZXN0IGRlICVkIHNlY3RldXJzICglZCBhdHRlbmR1KSIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9mYXQuYzo1NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZpbGUgc3lzdGVtIGlzIHJlcG9ydGluZyB0aGUgZnJlZSBzcGFjZSBhcyAlZCBjbHVzdGVycywgbm90ICVkIGNsdXN0ZXJzLiIKK21zZ3N0ciAiIgorIkxlIHN5c3TobWUgZGUgZmljaGllcnMgcmFwcG9ydGUgdW4gZXNwYWNlIGxpYnJlIGRlICVkIGNsdXN0ZXJzIGV0IG5vbiBwYXMgJWQgIgorImNsdXN0ZXJzLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9mYXQuYzo4NzQKK21zZ2lkICIiCisiR05VIFBhcnRlZCB3YXMgbWlzY29tcGlsZWQ6IHRoZSBGQVQgYm9vdCBzZWN0b3Igc2hvdWxkIGJlIDUxMiBieXRlcy4gIEZBVCAiCisic3VwcG9ydCB3aWxsIGJlIGRpc2FibGVkLiIKK21zZ3N0ciAiIgorIkdOVSBQYXJ0ZWQgYSDpdOkgbWFsIGNvbXBpbOkgOiBsZSBzZWN0ZXVyIGQnYW1vcmNlIEZBVCBkZXZyYWl0IOp0cmUgZGUgNTEyICIKKyJvY3RldHMuIExlIHN1cHBvcnQgcG91ciBGQVQgc2VyYSBk6XNhY3RpdukuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjE1OQorbXNnaWQgIiIKKyJUaGVyZSdzIG5vdCBlbm91Z2ggcm9vbSBpbiB0aGUgcm9vdCBkaXJlY3RvcnkgZm9yIGFsbCBvZiB0aGUgZmlsZXMuICBFaXRoZXIgIgorImNhbmNlbCwgb3IgaWdub3JlIHRvIGxvc2UgdGhlIGZpbGVzLiIKK21zZ3N0ciAiIgorIklsIG4neSBhIHBhcyBhc3NleiBkJ2VzcGFjZSBkYW5zIGxlIHLpcGVydG9pcmUgcm9vdCBwb3VyIHRvdXMgbGVzIGZpY2hpZXJzLiAiCisiU29pdCBhbm51bGVyIChjYW5jZWwpLCBzb2l0IGlnbm9yZXIgKGlnbm9yZSkgYXZlYyBwZXJ0ZSBkZSBmaWNoaWVycy4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6MzAwCittc2dpZCAiRXJyb3Igd3JpdGluZyB0byB0aGUgcm9vdCBkaXJlY3RvcnkuIgorbXNnc3RyICJFcnJldXIgZCfpY3JpdHVyZSBkdSBy6XBlcnRvaXJlIHJvb3QuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjQ4OQorbXNnaWQgIklmIHlvdSBsZWF2ZSB5b3VyIGZpbGUgc3lzdGVtIGFzIEZBVDE2LCB0aGVuIHlvdSB3aWxsIGhhdmUgbm8gcHJvYmxlbXMuIgorbXNnc3RyICIiCisiU2kgdm91cyBjb25zZXJ2ZXogdm90cmUgc3lzdOhtZSBkZSBmaWNoaWVycyBlbiBGQVQxNiwgdm91cyBuJ2F1cmV6IHBhcyBkZSAiCisicHJvYmzobWUuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjQ5MgorbXNnaWQgIiIKKyJJZiB5b3UgY29udmVydCB0byBGQVQxNiwgYW5kIE1TIFdpbmRvd3MgaXMgaW5zdGFsbGVkIG9uIHRoaXMgcGFydGl0aW9uLCB0aGVuICIKKyJ5b3UgbXVzdCByZS1pbnN0YWxsIHRoZSBNUyBXaW5kb3dzIGJvb3QgbG9hZGVyLiAgSWYgeW91IHdhbnQgdG8gZG8gdGhpcywgeW91ICIKKyJzaG91bGQgY29uc3VsdCB0aGUgUGFydGVkIG1hbnVhbCAob3IgeW91ciBkaXN0cmlidXRpb24ncyBtYW51YWwpLiIKK21zZ3N0ciAiIgorIlNpIHZvdXMgY29udmVydGlzc2V6IGVuIEZBVDE2IGV0IHF1ZSBNUyBXSW5kb3dzIGVzdCBpbnN0YWxs6SBzdXIgY2V0dGUgIgorInBhcnRpdGlvbiBhbG9ycyB2b3VzIGRldnJleiBy6S1pbnN0YWxsZXIgbGUgZ2VzdGlvbm5haXJlIGRlIGTpbWFycmFnZSBkZSBNUyAiCisiV2luZG93cy4gU2kgdm91cyBk6XNpcmV6IGZhaXJlIGNlbGEsIHZvdXMgZGV2cmlleiBjb25zdWx0ZXIgbGUgbWFudWVsIGRlICIKKyJQYXJ0ZWQgKG91IGxlIG1hbnVlbCBkZSB2b3RyZSBkaXN0cmlidXRpb24pLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1MDAKK21zZ2lkICIiCisiSWYgeW91IGxlYXZlIHlvdXIgZmlsZSBzeXN0ZW0gYXMgRkFUMzIsIHRoZW4geW91IHdpbGwgbm90IGludHJvZHVjZSBhbnkgbmV3ICIKKyJwcm9ibGVtcy4iCittc2dzdHIgIiIKKyJTaSB2b3VzIGNvbnNlcnZleiB2b3RyZSBzeXN06G1lIGRlIGZpY2hpZXJzIGVuIEZBVDMyIGFsb3JzIHZvdXMgIgorIm4naW50cm9kdWlyZXogcGFzIGRlIG5vdXZlYXV4IHByb2Js6G1lcy4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTA0Cittc2dpZCAiIgorIklmIHlvdSBjb252ZXJ0IHRvIEZBVDMyLCBhbmQgTVMgV2luZG93cyBpcyBpbnN0YWxsZWQgb24gdGhpcyBwYXJ0aXRpb24sIHRoZW4gIgorInlvdSBtdXN0IHJlLWluc3RhbGwgdGhlIE1TIFdpbmRvd3MgYm9vdCBsb2FkZXIuICBJZiB5b3Ugd2FudCB0byBkbyB0aGlzLCB5b3UgIgorInNob3VsZCBjb25zdWx0IHRoZSBQYXJ0ZWQgbWFudWFsIChvciB5b3VyIGRpc3RyaWJ1dGlvbidzIG1hbnVhbCkuICBBbHNvLCAiCisiY29udmVydGluZyB0byBGQVQzMiB3aWxsIG1ha2UgdGhlIGZpbGUgc3lzdGVtIHVucmVhZGFibGUgYnkgTVMgRE9TLCBNUyAiCisiV2luZG93cyA5NWEsIGFuZCBNUyBXaW5kb3dzIE5ULiIKK21zZ3N0ciAiIgorIlNpIHZvdXMgY29udmVydGlzc2V6IGVuIEZBVDMyIGV0IHF1ZSBNUyBXaW5kb3dzIGVzdCBpbnN0YWxs6SBzdXIgY2V0dGUgIgorInBhcnRpdGlvbiwgYWxvcnMgdm91cyBkZXZyZXogculpbnN0YWxsZXIgbGUgZ2VzdGlvbm5haXJlIGRlIGTpbWFycmFnZSBkZSBNUyAiCisiV2luZG93cy4gU2kgdm91cyBk6XNpcmV6IGZhaXJlIGNlbGEsIHZvdXMgZGV2cmlleiBjb25zdWx0ZXIgbGUgbWFudWVsIGRlICIKKyJQYXJ0ZWQgKG91IGxlIG1hbnVlbCBkZSB2b3RyZSBkaXN0cmlidXRpb24pLiBOb3RleiBxdWUgbGEgY29udmVyc2lvbiBlbiAiCisiRkFUMzIgcmVuZHJhIGxlIHN5c3TobWUgZGUgZmljaGllcnMgaWxsaXNpYmxlIHBhciBNUyBET1MsIE1TIFdpbmRvd3MgOTVhIGV0ICIKKyJNUyBXaW5kb3dzIE5ULiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgICVzICAlcyIKK21zZ3N0ciAiJXMgICVzICAlcyIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1MTkKK21zZ2lkICJXb3VsZCB5b3UgbGlrZSB0byB1c2UgRkFUMzI/IgorbXNnc3RyICJWb3VsZXotdm91cyB1dGlsaXNlciBGQVQzMiA/IgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjU1MCBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjU2NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyAgJXMiCittc2dzdHIgIiVzICAlcyIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1NTEKK21zZ2lkICIiCisiVGhlIGZpbGUgc3lzdGVtIGNhbiBvbmx5IGJlIHJlc2l6ZWQgdG8gdGhpcyBzaXplIGJ5IGNvbnZlcnRpbmcgdG8gRkFUMTYuIgorbXNnc3RyICIiCisiTGUgc3lzdOhtZSBkZSBmaWNoaWVycyBwZXV0IHNldWxlbWVudCDqdHJlIHJlZGltZW5zaW9ubukg4CBjZXR0ZSB0YWlsbGUgZW4gIgorImxlIGNvbnZlcnRpc3NhbnQgZW4gRkFUMTYuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjU2NworbXNnaWQgIiIKKyJUaGUgZmlsZSBzeXN0ZW0gY2FuIG9ubHkgYmUgcmVzaXplZCB0byB0aGlzIHNpemUgYnkgY29udmVydGluZyB0byBGQVQzMi4iCittc2dzdHIgIiIKKyJMZSBzeXN06G1lIGRlIGZpY2hpZXJzIHBldXQgc2V1bGVtZW50IOp0cmUgcmVkaW1lbnNpb25u6SDgIGNldHRlIHRhaWxsZSBlbiAiCisibGUgY29udmVydGlzc2FudCBlbiBGQVQzMi4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTgwCittc2dpZCAiIgorIkdOVSBQYXJ0ZWQgY2Fubm90IHJlc2l6ZSB0aGlzIHBhcnRpdGlvbiB0byB0aGlzIHNpemUuICBXZSdyZSB3b3JraW5nIG9uIGl0ISIKK21zZ3N0ciAiIgorIkdOVSBQYXJ0ZWQgbmUgcGV1dCByZWRpbWVuc2lvbm5yIGNldHRlIHBhcnRpdGlvbiDgIGNldHRlIHRhaWxsZS4gTm91cyB5ICIKKyJ0cmF2YWlsbG9ucyAhIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo0OSBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo1NgorbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyBhbiBpbnZhbGlkIHNpZ25hdHVyZSBmb3IgYSBGQVQgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICIiCisiTGUgc3lzdOhtZSBkZSBmaWNoaWVycyBhIHVuZSBzaWduYXR1cmUgaW52YWxpZGUgcG91ciB1biBzeXN06G1lIGRlIGZpY2hpZXJzICIKKyJGQVQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo2NAorbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyBhbiBpbnZhbGlkIHNlY3RvciBzaXplIGZvciBhIEZBVCBmaWxlIHN5c3RlbS4iCittc2dzdHIgIiIKKyJMZSBzeXN06G1lIGRlIGZpY2hpZXJzIGEgdW5lIHRhaWxsZSBkZSBzZWN0ZXVyIGludmFsaWRlIHBvdXIgdW4gc3lzdOhtZSBkZSAiCisiZmljaGllcnMgRkFULiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6NzEKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgYW4gaW52YWxpZCBjbHVzdGVyIHNpemUgZm9yIGEgRkFUIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiIgorIkxlIHN5c3TobWUgZGUgZmljaGllcnMgYSB1bmUgdGFpbGxlIGRlIGNsdXN0ZXIgaW52YWxpZGUgcG91ciB1biBzeXN06G1lIGRlICIKKyJmaWNoaWVycyBGQVQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo3OAorbXNnaWQgIiIKKyJGaWxlIHN5c3RlbSBoYXMgYW4gaW52YWxpZCBudW1iZXIgb2YgcmVzZXJ2ZWQgc2VjdG9ycyBmb3IgYSBGQVQgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICIiCisiTGUgc3lzdOhtZSBkZSBmaWNoaWVycyBhIHVuIG5vbWJyZSBpbnZhbGlkZSBkZSBzZWN0ZXVycyBy6XNlcnbpcyBwb3VyIHVuICIKKyJzeXN06G1lIGRlIGZpY2hpZXJzIEZBVC4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjg1Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGludmFsaWQgbnVtYmVyIG9mIEZBVHMuIgorbXNnc3RyICJMZSBzeXN06G1lIGRlIGZpY2hpZXJzIGEgdW4gbm9tYnJlIGludmFsaWRlIGRlIEZBVHMuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzoxMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgZmlsZSBzeXN0ZW0gaGFzIGEgbG9naWNhbCBzZWN0b3Igc2l6ZSBvZiAlZC4gIEdOVSBQYXJ0ZWQgaXMga25vd24gbm90ICIKKyJ0byB3b3JrIHByb3Blcmx5IHdpdGggc2VjdG9yIHNpemVzIG90aGVyIHRoYW4gNTEyIGJ5dGVzLiIKK21zZ3N0ciAiIgorIkNlIHN5c3TobWUgZGUgZmljaGllciBhIHVuZSB0YWlsbGUgZGUgc2VjdGV1ciBsb2dpcXVlIGRlICVkLiBHTlUgUGFydGVkIG5lICIKKyJ0cmFpdGUgcGFzIGNvcnJlY3RlbWVudCBsZXMgdGFpbGxlcyBkZSBzZWN0ZXVycyBkaWZm6XJlbnRlcyBkZSA1MTIgb2N0ZXRzLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6MTY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZmlsZSBzeXN0ZW0ncyBDSFMgZ2VvbWV0cnkgaXMgKCVkLCAlZCwgJWQpLCB3aGljaCBpcyBpbnZhbGlkLiAgVGhlICIKKyJwYXJ0aXRpb24gdGFibGUncyBDSFMgZ2VvbWV0cnkgaXMgKCVkLCAlZCwgJWQpLiAgSWYgeW91IHNlbGVjdCBJZ25vcmUsIHRoZSAiCisiZmlsZSBzeXN0ZW0ncyBDSFMgZ2VvbWV0cnkgd2lsbCBiZSBsZWZ0IHVuY2hhbmdlZC4gIElmIHlvdSBzZWxlY3QgRml4LCB0aGUgIgorImZpbGUgc3lzdGVtJ3MgQ0hTIGdlb21ldHJ5IHdpbGwgYmUgc2V0IHRvIG1hdGNoIHRoZSBwYXJ0aXRpb24gdGFibGUncyBDSFMgIgorImdlb21ldHJ5LiIKK21zZ3N0ciAiIgorIkxhIGfpb23pdHJpZSBDSFMgZHUgc3lzdOhtZSBkZSBmaWNoaWVycyBlc3QgKCVkLCAlZCwgJWQpLCBjZSBxdWkgZXN0ICIKKyJpbnZhbGlkZS4gTGEgZ+lvbel0cmllIENIUyBkZSBsYSB0YWJsZSBkZXMgcGFydGl0aW9ucyBlc3QgKCVkLCAlZCwgJWQpLiBTaSAiCisidm91cyBjaG9pc2lzc2V6IGQnaWdub3JlciAoSWdub3JlKSwgbGEgZ+lvbel0cmllIENIUyBkdSBzeXN06G1lIGRlIGZpY2hpZXJzICIKKyJzZXJhIGluY2hhbmfpZS4gU2kgdm91cyBjaG9pc2lzc2V6IGRlIHLpcGFyZXIgKEZpeCksIGxhIGfpb23pdHJpZSBDSFMgZHUgIgorInN5c3TobWUgZGUgZmljaGllcnMgc2VyYSBtb2RpZmnpZSBkZSBtYW5p6HJlIOAgY29uY29yZGVyIGF2ZWMgbGEgZ+lvbel0cmllICIKKyJDSFMgZGUgbGEgdGFibGUgZGVzIHBhcnRpdGlvbnMuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzoyMTMKK21zZ2lkICJGQVQgYm9vdCBzZWN0b3Igc2F5cyBsb2dpY2FsIHNlY3RvciBzaXplIGlzIDAuICBUaGlzIGlzIHdlaXJkLiAiCittc2dzdHIgIiIKKyJMZSBzZWN0ZXVyIGQnYW1vcmNlIEZBVCBpbmRpcXVlIHVuZSB0YWlsbGUgZGUgc2VjdGV1ciBsb2dpcXVlIGRlIDAuIENlY2kgZXN0ICIKKyJiaXphcnJlLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6MjE5Cittc2dpZCAiRkFUIGJvb3Qgc2VjdG9yIHNheXMgdGhlcmUgYXJlIG5vIEZBVCB0YWJsZXMuICBUaGlzIGlzIHdlaXJkLiAiCittc2dzdHIgIiIKKyJMZSBzZWN0ZXVyIGQnYW1vcmNlIEZBVCBpbmRpcXVlIHF1J2lsIG4neSBhIHBhcyBkZSB0YWJsZXMgRkFULiBDZWNpIGVzdCAiCisiYml6YXJyZS4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjIyNQorbXNnaWQgIkZBVCBib290IHNlY3RvciBzYXlzIGNsdXN0ZXJzIGFyZSAwIHNlY3RvcnMuICBUaGlzIGlzIHdlaXJkLiAiCittc2dzdHIgIiIKKyJMZSBzZWN0ZXVyIGQnYW1vcmNlIEZBVCBpbmRpcXVlIGRlcyBjbHVzdGVycyBheWFudCAwIHNlY3RldXJzLiBDZWNpIGVzdCAiCisiYml6YXJyZS4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjIzNQorbXNnaWQgIkZpbGUgc3lzdGVtIGlzIEZBVDEyLCB3aGljaCBpcyB1bnN1cHBvcnRlZC4iCittc2dzdHIgIkxlIHN5c3TobWUgZGUgZmljaGllcnMgZXN0IEZBVDEyLCBsZXF1ZWwgbidlc3QgcGFzIHN1cHBvcnTpLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6NDExCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgaW5mb3JtYXRpb24gc2VjdG9yIGhhcyB0aGUgd3Jvbmcgc2lnbmF0dXJlICgleCkuICBTZWxlY3QgY2FuY2VsIGZvciBub3csICIKKyJhbmQgc2VuZCBpbiBhIGJ1ZyByZXBvcnQuICBJZiB5b3UncmUgZGVzcGVyYXRlLCBpdCdzIHByb2JhYmx5IHNhZmUgdG8gaWdub3JlLiIKK21zZ3N0ciAiIgorIkwnaW5mb3JtYXRpb24gZGUgc2VjdGV1ciBjb250aWVudCB1bmUgc2lnbmF0dXJlIGVycm9u6WUgKCV4KS4gU+lsZWN0aW9ubmVyIKsgIgorImNhbmNlbCC7IHBvdXIgbGUgbW9tZW50IGV0IHRyYW5zbWV0dHJlIHVuIHJhcHBvcnQgZCdhbm9tYWxpZS4gU2kgdm91cyDqdGVzICIKKyJk6XNlc3DpcuksIGlsIGVzdCBwcm9iYWJsZW1lbnQgcHJ1ZGVudCBkZSBz6WxlY3Rpb25uZXIgqyBpZ25vcmUguy4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY291bnQuYzoxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIGRpcmVjdG9yeSBlbnRyeSBmb3IgJXM6IGZpcnN0IGNsdXN0ZXIgaXMgdGhlIGVuZCBvZiBmaWxlIG1hcmtlci4iCittc2dzdHIgIiIKKyJFbnRy6WUgZGUgculwZXJ0b2lyZSBlcnJvbullIHBvdXIgJXM6IGxlIHByZW1pZXIgY2x1c3RlciBlc3Qg4CBsYSBmaW4gZHUgIgorIm1hcnF1ZXVyIGRlIGZpY2hpZXJzLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb3VudC5jOjE2NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQmFkIEZBVDogdW50ZXJtaW5hdGVkIGNoYWluIGZvciAlcy4gIFlvdSBzaG91bGQgcnVuIGRvc2ZzY2sgb3Igc2NhbmRpc2suIgorbXNnc3RyICIiCisiRkFUIGVycm9u6TogY2hh7m5lIG5vbiB0ZXJtaW7pZSBwb3VyICVzLiBWb3VzIGRldnJpZXogZXjpY3V0ZXIgZG9zZnNjayBvdSAiCisic2NhbmRpc2suIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvdW50LmM6MTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJCYWQgRkFUOiBjbHVzdGVyICVkIG91dHNpZGUgZmlsZSBzeXN0ZW0gaW4gY2hhaW4gZm9yICVzLiAgWW91IHNob3VsZCBydW4gIgorImRvc2ZzY2sgb3Igc2NhbmRpc2suIgorbXNnc3RyICIiCisiRkFUIGVycm9u6TogbGUgY2x1c3RlciAlZCBlc3QgZW4gZGVob3JzIGR1IHN5c3TobWUgZGUgZmljaGllcnMgZGFucyBsYSAiCisiY2hh7m5lIHBvdXIgJXMuIFZvdXMgZGV2cmlleiBleOljdXRlciBkb3Nmc2NrIG91IHNjYW5kaXNrLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb3VudC5jOjE4NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQmFkIEZBVDogY2x1c3RlciAlZCBpcyBjcm9zcy1saW5rZWQgZm9yICVzLiAgWW91IHNob3VsZCBydW4gZG9zZnNjayBvciAiCisic2NhbmRpc2suIgorbXNnc3RyICIiCisiRkFUIGVycm9u6TogbGUgY2x1c3RlciAlZCBhIGRlcyBsaWVucyBjcm9pc+lzIHBvdXIgJXMuIFZvdXMgZGV2cmlleiBleOljdXRlciAiCisiZG9zZnNjayBvdSBzY2FuZGlzay4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY291bnQuYzoyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgJWRrLCBidXQgaXQgaGFzICVkIGNsdXN0ZXJzICglZGspLiIKK21zZ3N0ciAiJXMgZXN0ICVkaywgbWFpcyBpbCBhICVkIGNsdXN0ZXJzICglZGspLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb3VudC5jOjI2NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGUgJXMgaXMgbWFya2VkIGFzIGEgc3lzdGVtIGZpbGUuICBUaGlzIG1lYW5zIG1vdmluZyBpdCBjb3VsZCBjYXVzZSAiCisic29tZSBwcm9ncmFtcyB0byBzdG9wIHdvcmtpbmcuIgorbXNnc3RyICIiCisiTGUgZmljaGllciAlcyBlc3QgbWFycXXpIGNvbW1lIHN5c3TobWUgZGUgZmljaGllcnMuIENlbGEgc2lnbmlmaWUgcXVlIHNvbiAiCisiZOlwbGFjZW1lbnQgcG91cnJhaXQgYW1lbmVyIGNlcnRhaW5zIHByb2dyYW1tZXMg4CBjZXNzZXIgZGUgZm9uY3Rpb25uZXIuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3RhYmxlLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGQVQgJWQgbWVkaWEgJXggZG9lc24ndCBtYXRjaCB0aGUgYm9vdCBzZWN0b3IncyBtZWRpYSAleC4gIFlvdSBzaG91bGQgIgorInByb2JhYmx5IHJ1biBzY2FuZGlzay4iCittc2dzdHIgIiIKKyJMYSBGQVQgJWQgZHUgbelkaWEgJXggbmUgY29uY29yZGUgcGFzIGF2ZWMgbGUgc2VjdGV1ciBkJ2Ftb3JjZSBkdSBt6WRpYSAleC4gIgorIlZvdXMgZGV2cmlleiBwcm9iYWJsZW1lbnQgZXjpY3V0ZXIgc2NhbmRpc2suIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3RhYmxlLmM6MjY5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhdF90YWJsZV9zZXQ6IGNsdXN0ZXIgJWxkIG91dHNpZGUgZmlsZSBzeXN0ZW0iCittc2dzdHIgImZhdF90YWJsZV9zZXQ6IGNsdXN0ZXIgJWxkIGVuIGRlaG9ycyBkdSBzeXN06G1lIGRlIGZpY2hpZXJzIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3RhYmxlLmM6MzAxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhdF90YWJsZV9nZXQ6IGNsdXN0ZXIgJWxkIG91dHNpZGUgZmlsZSBzeXN0ZW0iCittc2dzdHIgImZhdF90YWJsZV9zZXQ6IGNsdXN0ZXIgJWxkIGVuIGRlaG9ycyBkdSBzeXN06G1lIGRlIGZpY2hpZXJzIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3RhYmxlLmM6MzQzCittc2dpZCAiZmF0X3RhYmxlX2FsbG9jX2NsdXN0ZXI6IG5vIGZyZWUgY2x1c3RlcnMiCittc2dzdHIgImZhdF90YWJsZV9hbGxvY19jbHVzdGVyOiBwYXMgZGUgY2x1c3RlciBkaXNwb25pYmxlIgorCisjOiBsaWJwYXJ0ZWQvZnMvbGludXhfc3dhcC9saW51eF9zd2FwLmM6Mjc1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVbnJlY29nbmlzZWQgb2xkIHN0eWxlIGxpbnV4IHN3YXAgc2lnbmF0dXJlICclMTBzJy4iCittc2dzdHIgIlNpZ25hdHVyZSBzd2FwIGRlIExpbnV4IG5vbiByZWNvbm51ZSCrICUxMHMguy4iCisKKyM6IGxpYnBhcnRlZC9mcy9saW51eF9zd2FwL2xpbnV4X3N3YXAuYzozMTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVucmVjb2duaXNlZCBuZXcgc3R5bGUgbGludXggc3dhcCBzaWduYXR1cmUgJyUxMHMnLiIKK21zZ3N0ciAiU2lnbmF0dXJlIHN3YXAgZGUgTGludXggbm9uIHJlY29ubnVlIKsgJTEwcyC7LiIKKworIzogbGlicGFydGVkL2ZzL2xpbnV4X3N3YXAvbGludXhfc3dhcC5jOjM1OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVW5yZWNvZ25pc2VkIHN3c3VzcCBsaW51eCBzd2FwIHNpZ25hdHVyZSAnJTlzJy4iCittc2dzdHIgIlNpZ25hdHVyZSBzd2FwIGRlIExpbnV4IG5vbiByZWNvbm51ZSCrICUxMHMguy4iCisKKyM6IGxpYnBhcnRlZC9mcy9saW51eF9zd2FwL2xpbnV4X3N3YXAuYzo0MzQKK21zZ2lkICJUb28gbWFueSBiYWQgcGFnZXMuIgorbXNnc3RyICJUcm9wIGRlIHBhZ2VzIGVycm9u6WVzLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9hZHZmcy5jOjEyMSBsaWJwYXJ0ZWQvZnMvaGZzL2FkdmZzX3BsdXMuYzoxMjIKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzo0MTQgbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjUwOAorIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NTM5IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjY1OAorIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NzcyCittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIGNvbnRhaW5zIGVycm9ycy4iCittc2dzdHIgIkxlIHN5c3TobWUgZGUgZmljaGllcnMgY29udGllbnQgZGVzIGVycmV1cnMuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2FkdmZzX3BsdXMuYzoyODcKK21zZ2lkICJCYWQgYmxvY2tzIGNvdWxkIG5vdCBiZSByZWFkLiIKK21zZ3N0ciAiTGVzIGJsb2NzIGTpZmVjdHVldXggbmUgcGV1dmVudCBwYXMg6nRyZSBsdXMuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2NhY2hlLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUcnlpbmcgdG8gcmVnaXN0ZXIgYW4gZXh0ZW50IHN0YXJ0aW5nIGF0IGJsb2NrIDB4JVgsIGJ1dCBhbm90aGVyIG9uZSBhbHJlYWR5ICIKKyJleGlzdHMgYXQgdGhpcyBwb3NpdGlvbi4gIFlvdSBzaG91bGQgY2hlY2sgdGhlIGZpbGUgc3lzdGVtISIKK21zZ3N0ciAiIgorIlRlbnRhdGl2ZSBkJ2VucmVnaXN0cmVtZW50IGQndW5lIHpvbmUgZOlidXRhbnQgYXUgYmxvYyAweCVYLCBtYWlzIHVuIGF1dHJlICIKKyJleGlzdGUgZOlq4CDgIGNldHRlIHBvc2l0aW9uLiBWb3VzIGRldnJpZXogdulyaWZpZXIgbGUgc3lzdOhtZSBkZSBmaWNoaWVycyAhIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2NhY2hlLmM6MjE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUcnlpbmcgdG8gbW92ZSBhbiBleHRlbnQgZnJvbSBibG9jayBPeCVYIHRvIGJsb2NrIE94JVgsIGJ1dCBhbm90aGVyIG9uZSAiCisiYWxyZWFkeSBleGlzdHMgYXQgdGhpcyBwb3NpdGlvbi4gIFRoaXMgc2hvdWxkIG5vdCBoYXBwZW4hIgorbXNnc3RyICIiCisiVGVudGF0aXZlIGRlIGTpcGxhY2VtZW50IGQndW5lIHpvbmUgZHUgYmxvYyAweCVYIGF1IGJsb2MgMHglWCwgbWFpcyB1biBhdXRyZSAiCisiZXhpc3RlIGTpauAg4CBjZXR0ZSBwb3NpdGlvbi4gQ2VsYSBuZSBkZXZyYWl0IHBhcyBhcnJpdmVyICEiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZS5jOjE0MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgdXBkYXRlIHRoZSBleHRlbnQgY2FjaGUgZm9yIEhGUyBmaWxlIHdpdGggQ05JRCAlWC4iCittc2dzdHIgIiIKKyJOZSBwZXV0IG1ldHRyZSDgIGpvdXIgbGUgY2FjaGUgZGVzIGZyYWdtZW50cyBkdSBmaWNoaWVyIEhGUyBheWFudCBsZSBDTklEICVYLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlLmM6MTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyB0byByZWFkIEhGUyBmaWxlIHdpdGggQ05JRCAlWCBiZWhpbmQgRU9GLiIKK21zZ3N0ciAiIgorIlRlbnRhdGl2ZSBkZSBsZWN0dXJlIGQndW4gZmljaGllciBIRlMgYXlhbnQgdW4gQ05JRCAlWCBhcHLocyBsYSBmaW4gZHUgIgorImZpY2hpZXIuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGUuYzoxOTAgbGlicGFydGVkL2ZzL2hmcy9maWxlLmM6MjIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIHNlY3RvciAlbGxpIG9mIEhGUyBmaWxlIHdpdGggQ05JRCAlWC4iCittc2dzdHIgIkltcG9zc2libGUgZGUgdHJvdXZlciBsZSBzZWN0ZXVyICVsbGkgZHUgZmljaGllciBIRlMgYXlhbnQgbGUgQ05JRCAlWC4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZS5jOjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgdG8gd3JpdGUgSEZTIGZpbGUgd2l0aCBDTklEICVYIGJlaGluZCBFT0YuIgorbXNnc3RyICIiCisiVGVudGF0aXZlIGQn6WNyaXR1cmUgZCd1biBmaWNoaWVyIEhGUyBheWFudCB1biBDTklEICVYIGFwcuhzIGxhIGZpbiBkdSAiCisiZmljaGllci4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZV9wbHVzLmM6MTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB1cGRhdGUgdGhlIGV4dGVudCBjYWNoZSBmb3IgSEZTKyBmaWxlIHdpdGggQ05JRCAlWC4iCittc2dzdHIgIiIKKyJOZSBwZXV0IG1ldHRyZSDgIGpvdXIgbGUgY2FjaGUgZGVzIGZyYWdtZW50cyBkdSBmaWNoaWVyIEhGUysgYXlhbnQgbGUgQ05JRCAlIgorIlguIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGVfcGx1cy5jOjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgdG8gcmVhZCBIRlMrIGZpbGUgd2l0aCBDTklEICVYIGJlaGluZCBFT0YuIgorbXNnc3RyICIiCisiVGVudGF0aXZlIGRlIGxlY3R1cmUgZCd1biBmaWNoaWVyIEhGUysgYXlhbnQgdW4gQ05JRCAlWCBhcHLocyBsYSBmaW4gZHUgIgorImZpY2hpZXIuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGVfcGx1cy5jOjIxMyBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGVfcGx1cy5jOjI1NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCBzZWN0b3IgJWxsaSBvZiBIRlMrIGZpbGUgd2l0aCBDTklEICVYLiIKK21zZ3N0ciAiIgorIkltcG9zc2libGUgZGUgdHJvdXZlciBsZSBzZWN0ZXVyICVsbGkgZHUgZmljaGllciBIRlMrIGF5YW50IGxlIENOSUQgJVguIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGVfcGx1cy5jOjI0NQorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgdG8gd3JpdGUgSEZTKyBmaWxlIHdpdGggQ05JRCAlWCBiZWhpbmQgRU9GLiIKK21zZ3N0ciAiIgorIlRlbnRhdGl2ZSBkJ+ljcml0dXJlIGQndW4gZmljaGllciBIRlMrIGF5YW50IHVuIENOSUQgJVggYXBy6HMgbGEgZmluIGR1ICIKKyJmaWNoaWVyLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzoyMzIKK21zZ2lkICJTb3JyeSwgSEZTIGNhbm5vdCBiZSByZXNpemVkIHRoYXQgd2F5IHlldC4iCittc2dzdHIgIiIKKyJE6XNvbOksIGwnSEZTIG5lIHBldXQg6nRyZSByZWRpbWVuc2lvbm7pIGRlIGNldHRlIG1hbmnocmUgcG91ciBsZSBtb21lbnQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjI2MiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjY0MQorbXNnaWQgIkRhdGEgcmVsb2NhdGlvbiBoYXMgZmFpbGVkLiIKK21zZ3N0ciAiTGUgZOlwbGFjZW1lbnQgZGVzIGRvbm7pZXMgYSDpY2hvdekuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjI4MQorbXNnaWQgIkRhdGEgcmVsb2NhdGlvbiBsZWZ0IHNvbWUgZGF0YSBpbiB0aGUgZW5kIG9mIHRoZSB2b2x1bWUuIgorbXNnc3RyICIiCisiTGUgZOlwbGFjZW1lbnQgZGVzIGRvbm7pZXMgYSBsYWlzc+kgY2VydGFpbmVzIGRvbm7pZXMg4CBsYSBmaW4gZHUgdm9sdW1lLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzozMjAKK21zZ2lkICJ3cml0aW5nIEhGUyBNYXN0ZXIgRGlyZWN0b3J5IEJsb2NrIgorbXNnc3RyICLpY3JpdHVyZSBkdSBNYXN0ZXIgRGlyZWN0b3J5IEJsb2NrIEhGUyIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo0NjgKK21zZ2lkICJObyB2YWxpZCBIRlNbK1hdIHNpZ25hdHVyZSBoYXMgYmVlbiBmb3VuZCB3aGlsZSBvcGVuaW5nLiIKK21zZ3N0ciAiQXVjdW5lIHNpZ25hdHVyZSBIRlNbK1hdIHZhbGlkZSB0cm91dullIGxvcnMgZGUgbCdvdXZlcnR1cmUuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjQ3OAorIywgYy1mb3JtYXQKK21zZ2lkICJWZXJzaW9uICVkIG9mIEhGUysgaXNuJ3Qgc3VwcG9ydGVkLiIKK21zZ3N0ciAiTGEgdmVyc2lvbiAlZCBkdSBIRlMrIG4nZXN0IHBhcyBzdXBwb3J06WUuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICJWZXJzaW9uICVkIG9mIEhGU1ggaXNuJ3Qgc3VwcG9ydGVkLiIKK21zZ3N0ciAiTGEgdmVyc2lvbiAlZCBkdSBIRlNYIG4nZXN0IHBhcyBzdXBwb3J06WUuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjY3MgorbXNnaWQgIkRhdGEgcmVsb2NhdGlvbiBsZWZ0IHNvbWUgZGF0YSBhdCB0aGUgZW5kIG9mIHRoZSB2b2x1bWUuIgorbXNnc3RyICIiCisiTGUgZOlwbGFjZW1lbnQgZGVzIGRvbm7pZXMgYSBsYWlzc+kgY2VydGFpbmVzIGRvbm7pZXMg4CBsYSBmaW4gZHUgdm9sdW1lLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo3MjAKK21zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRoZSBhbGxvY2F0aW9uIGZpbGUuIgorbXNnc3RyICJFcnJldXIgZCfpY3JpdHVyZSBkdSBmaWNoaWVyIGQnYWxsb2NhdGlvbi4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NzM1Cittc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0aGUgY29tcGF0aWJpbGl0eSBwYXJ0IG9mIHRoZSBhbGxvY2F0aW9uIGZpbGUuIgorbXNnc3RyICJFcnJldXIgZCfpY3JpdHVyZSBkZSBsYSB6b25lIGRlIGNvbXBhdGliaWxpdOkgZHUgZmljaGllciBkJ2FsbG9jYXRpb24uIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjc1MAorbXNnaWQgIndyaXRpbmcgSEZTKyBWb2x1bWUgSGVhZGVyIgorbXNnc3RyICLpY3JpdHVyZSBkdSBWb2x1bWUgSGVhZGVyIGR1IEhGUysiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6ODUwCittc2dpZCAiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgbG9va2luZyBmb3IgdGhlIG1hbmRhdG9yeSBiYWQgYmxvY2tzIGZpbGUuIgorbXNnc3RyICIiCisiVW5lIGVycmV1ciBlc3Qgc3VydmVudWUgbG9ycyBkZSBsYSByZWNoZXJjaGUgZHUgZmljaGllciBub24tb3B0aW9ubmVsIGRlcyAiCisiYmxvY3MgZOlmZWN0dWV1eC4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6OTA0Cittc2dpZCAiIgorIkl0IHNlZW1zIHRoZXJlIGlzIGFuIGVycm9yIGluIHRoZSBIRlMgd3JhcHBlcjogdGhlIGJhZCBibG9ja3MgZmlsZSBkb2Vzbid0ICIKKyJjb250YWluIHRoZSBlbWJlZGRlZCBIRlMrIHZvbHVtZS4iCittc2dzdHIgIiIKKyJJbCBzZW1ibGUgcXUnaWwgeSBhaXQgdW5lIGVycmV1ciBkYW5zIGwnZW5jYXBzdWxhdGV1ciBIRlMgOiBsZSBmaWNoaWVyIGRlcyAiCisiYmxvY3MgZOlmZWN0dWV1eCBjb250aWVudCBsZSB2b2x1bWUgSEZTKyAuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjk0MAorbXNnaWQgIlNvcnJ5LCBIRlMrIGNhbm5vdCBiZSByZXNpemVkIHRoYXQgd2F5IHlldC4iCittc2dzdHIgIiIKKyJE6XNvbOksIGwnSEZTKyBuZSBwZXV0IOp0cmUgcmVkaW1lbnNpb25u6SBkZSBjZXR0ZSBtYW5p6HJlIHBvdXIgbGUgbW9tZW50LiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo5NzUKK21zZ2lkICJzaHJpbmtpbmcgZW1iZWRkZWQgSEZTKyB2b2x1bWUiCittc2dzdHIgInLpZHVjdGlvbiBkdSB2b2x1bWUgSEZTKyIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo5OTEKK21zZ2lkICJSZXNpemluZyB0aGUgSEZTKyB2b2x1bWUgaGFzIGZhaWxlZC4iCittc2dzdHIgIkxlIHJlZGltZW5zaW9ubmVtZW50IGR1IHZvbHVtZSBIRlMrIGEg6WNob3XpLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo5OTgKK21zZ2lkICJzaHJpbmtpbmcgSEZTIHdyYXBwZXIiCittc2dzdHIgInLpZHVjdGlvbiBkZSBsJ2VuY2Fwc3VsYXRldXIgSEZTIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjEwMDcKK21zZ2lkICJVcGRhdGluZyB0aGUgSEZTIHdyYXBwZXIgaGFzIGZhaWxlZC4iCittc2dzdHIgIkxhIG1pc2Ug4CBqb3VyIGRlIGwnZW5jYXBzdWxhdGV1ciBIRlMgYSDpY2hvdekuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjExMDkgbGlicGFydGVkL2ZzL2hmcy9oZnMuYzoxMTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGlzIGlzIG5vdCBhIHJlYWwgJXMgY2hlY2suICBUaGlzIGlzIGdvaW5nIHRvIGV4dHJhY3Qgc3BlY2lhbCBsb3cgbGV2ZWwgIgorImZpbGVzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuIgorbXNnc3RyICIiCisiQ2VjaSBuJ2VzdCBwYXMgdW4gdGVzdCBy6WVsIGRlICVzIC4gSWwgcydhZ2l0IGQnZXh0cmFpcmUgZGVzIGZpY2hpZXJzICIKKyJzcOljaWF1eCBkZSBiYXMgbml2ZWF1IHBvdXIgZOlib2d1YWdlLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MTU1Cittc2dpZCAiQmFkIGJsb2NrIGxpc3QgaGVhZGVyIGNoZWNrc3VtLiIKK21zZ3N0ciAiTWF1dmFpc2Ugc29tbWUgZGUgY29udHL0bGUgZGUgbCdlbnTqdGUgZGUgbGEgbGlzdGUgZGVzIGJsb2NzLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJbnZhbGlkIHNpemUgb2YgYSB0cmFuc2FjdGlvbiBibG9jayB3aGlsZSByZXBsYXlpbmcgdGhlIGpvdXJuYWwgKCVpIGJ5dGVzKS4iCittc2dzdHIgIiIKKyJUYWlsbGUgZGUgYmxvYyBkZSB0cmFuc2FjdGlvbiBpbnZhbGlkZSBwZW5kYW50IGxlIHJlcGxheSBkdSBqb3VybmFsICglaSAiCisib2N0ZXRzKS4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjI2MAorbXNnaWQgIiIKKyJKb3VybmFsIHN0b3JlZCBvdXRzaWRlIG9mIHRoZSB2b2x1bWUgYXJlIG5vdCBzdXBwb3J0ZWQuICBUcnkgdG8gZGVzYWN0aXZhdGUgIgorInRoZSBqb3VybmFsIGFuZCBydW4gUGFydGVkIGFnYWluLiIKK21zZ3N0ciAiIgorIkxlIHBsYWNlbWVudCBkdSBqb3VybmFsIOAgbCdleHTpcmlldXIgZHUgdm9sdW1lIG4nZXN0IHBhcyBzdXBwb3J06S4gRXNzYXlleiAiCisiZGUgZOlzYWN0aXZlciBsZSBqb3VybmFsIGV0IGRlIHJlbGFuY2VyIFBhcnRlZC4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjI3MQorbXNnaWQgIkpvdXJuYWwgb2Zmc2V0IG9yIHNpemUgaXMgbm90IG11bHRpcGxlIG9mIHRoZSBzZWN0b3Igc2l6ZS4iCittc2dzdHIgIkxlIGRlbHRhIG91IGxhIHRhaWxsZSBuJ2VzdCBwYXMgdW4gbXVsdGlwbGUgZGUgbGEgdGFpbGxlIGQndW4gc2VjdGV1ci4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjI5MgorbXNnaWQgIkluY29ycmVjdCBtYWdpYyB2YWx1ZXMgaW4gdGhlIGpvdXJuYWwgaGVhZGVyLiIKK21zZ3N0ciAiVmFsZXVycyBtYWdpcXVlcyBpbmNvcnJlY3RlcyBkYW5zIGwnZW506nRlIGR1IGpvdXJuYWwuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozMDIKK21zZ2lkICJKb3VybmFsIHNpemUgbWlzbWF0Y2ggYmV0d2VlbiBqb3VybmFsIGluZm8gYmxvY2sgYW5kIGpvdXJuYWwgaGVhZGVyLiIKK21zZ3N0ciAiIgorIkVycmV1ciBkZSBjb3JyZXNwb25kYW5jZSBkZSBsYSB0YWlsbGUgZHUgam91cm5hbCBlbnRyZSBsZSBibG9jIGQnaW5mb3JtYXRpb24gIgorImR1IGpvdXJuYWwgZXQgbCdlbnTqdGUgZHUgam91cm5hbC4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjMxNAorbXNnaWQgIlNvbWUgaGVhZGVyIGZpZWxkcyBhcmUgbm90IG11bHRpcGxlIG9mIHRoZSBzZWN0b3Igc2l6ZS4iCittc2dzdHIgIiIKKyJDZXJ0YWlucyBjaGFtcHMgZGUgbCdlbnTqdGUgbmUgc29udCBwYXMgZGVzIG11bHRpcGxlcyBkZSBsYSB0YWlsbGUgZHUgIgorInNlY3RldXIuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozMjMKK21zZ2lkICIiCisiVGhlIHNlY3RvciBzaXplIHN0b3JlZCBpbiB0aGUgam91cm5hbCBpcyBub3QgNTEyIGJ5dGVzLiAgUGFydGVkIG9ubHkgIgorInN1cHBvcnRzIDUxMiBieXRlcyBsZW5ndGggc2VjdG9ycy4iCittc2dzdHIgIiIKKyJMYSB0YWlsbGUgZGUgc2VjdGV1ciBzdG9ja+llIGRhbnMgbGUgam91cm5hbCBuJ2VzdCBwYXMgNTEyIG9jdGV0cy4gUGFydGVkIG5lICIKKyJzdXBwb3J0ZSBxdWUgbGVzIHNlY3RldXJzIGRvbnQgbGEgdGFpbGxlIGVzdCA1MTIgb2N0ZXRzLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MzM1Cittc2dpZCAiQmFkIGpvdXJuYWwgY2hlY2tzdW0uIgorbXNnc3RyICJNYXV2YWlzZSBzb21tZSBkZSBjb250cvRsZSBkdSBqb3VybmFsLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MzUzCittc2dpZCAiIgorIlRoZSBqb3VybmFsIGlzIG5vdCBlbXB0eS4gIFBhcnRlZCBtdXN0IHJlcGxheSB0aGUgdHJhbnNhY3Rpb25zIGJlZm9yZSAiCisib3BlbmluZyB0aGUgZmlsZSBzeXN0ZW0uICBUaGlzIHdpbGwgbW9kaWZ5IHRoZSBmaWxlIHN5c3RlbS4iCittc2dzdHIgIiIKKyJMZSBqb3VybmFsIG4nZXN0IHBhcyB2aWRlLiBQYXJ0ZWQgZG9pdCByZWpvdWVyIGxlcyB0cmFuc2FjdGlvbnMgYXZhbnQgIgorImQnb3V2cmlyIGxlIHN5c3TobWUgZGUgZmljaGllcnMuIENlbGEgbW9kaWZpZXJhIGxlIHN5c3TobWUgZGUgZmljaGllcnMuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozODEKK21zZ2lkICIiCisiVGhlIHZvbHVtZSBoZWFkZXIgb3IgdGhlIG1hc3RlciBkaXJlY3RvcnkgYmxvY2sgaGFzIGNoYW5nZWQgd2hpbGUgcmVwbGF5aW5nICIKKyJ0aGUgam91cm5hbC4gIFlvdSBzaG91bGQgcmVzdGFydCBQYXJ0ZWQuIgorbXNnc3RyICIiCisiTCdlbnTqdGUgZHUgdm9sdW1lIG91IGxlIG1hc3RlciBkaXJlY3RvcnkgYmxvY2sgYSBjaGFuZ+kgcGVuZGFudCBsZSByZXBsYXkgIgorImR1IGpvdXJuYWwuIFZvdXMgZGV2cmlleiByZWxhbmNlciBQYXJ0ZWQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3Byb2JlLmM6NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBhcnRlZCBjYW4ndCB1c2UgSEZTIGZpbGUgc3lzdGVtcyBvbiBkaXNrcyB3aXRoIGEgc2VjdG9yIHNpemUgbm90IGVxdWFsIHRvICUiCisiZCBieXRlcy4iCittc2dzdHIgIiIKKyJQYXJ0ZWQgbmUgcGV1dCB1dGlsaXNlciBkZXMgc3lzdOhtZXMgZGUgZmljaGllcnMgSEZTIHN1ciBsZXMgZGlzcXVlcyBkb250IGxhICIKKyJ0YWlsbGUgZGVzIHNlY3RldXJzIG4nZXN0IHBhcyDpZ2FsZSDgICVkIG9jdGV0cy4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzoxNTEgbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6MTU1Cittc2dpZCAiQW4gZXh0ZW50IGhhcyBub3QgYmVlbiByZWxvY2F0ZWQuIgorbXNnc3RyICJVbmUgem9uZSBuJ2EgcGFzIOl06SBy6WFsbG916WUuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6MjUxIGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjMwNworbXNnaWQgIiIKKyJBIHJlZmVyZW5jZSB0byBhbiBleHRlbnQgY29tZXMgZnJvbSBhIHBsYWNlIGl0IHNob3VsZCBub3QuICBZb3Ugc2hvdWxkIGNoZWNrICIKKyJ0aGUgZmlsZSBzeXN0ZW0hIgorbXNnc3RyICIiCisiVW5lIHLpZulyZW5jZSB2ZXJzIHVuZSB6b25lIHByb3ZpZW50IGQndW4gZW5kcm9pdCBkb250IGlsIG5lIGRldnJhaXQgcGFzLiAiCisiVm91cyBkZXZyaWV6IHbpcmlmaWVyIGxlIHN5c3TobWUgZGUgZmljaGllcnMuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6MzgxCittc2dpZCAiVGhpcyBIRlMgdm9sdW1lIGhhcyBubyBjYXRhbG9nIGZpbGUuICBUaGlzIGlzIHZlcnkgdW51c3VhbCEiCittc2dzdHIgIiIKKyJDZSB2b2x1bWUgSEZTIG4nYSBwYXMgZGUgZmljaGllciBjYXRhbG9ndWUuIEMnZXN0IHZyYWltZW50IGluaGFiaXR1ZWwgISIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjQ3NQorbXNnaWQgIlRoaXMgSEZTIHZvbHVtZSBoYXMgbm8gZXh0ZW50cyBvdmVyZmxvdyBmaWxlLiAgVGhpcyBpcyBxdWl0ZSB1bnVzdWFsISIKK21zZ3N0ciAiIgorIkNlIHZvbHVtZSBIRlMgbidhIHBhcyBkZSBmaWNoaWVyIGRlcyB6b25lcyBhZGRpdGlvbmVsbGVzLiBDJ2VzdCBwbHV09HQgIgorImluaGFiaXR1ZWwgISIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjUxNyBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo2NjgKK21zZ2lkICIiCisiVGhlIGV4dGVudHMgb3ZlcmZsb3cgZmlsZSBzaG91bGQgbm90IGNvbnRhaW4gaXRzIG93biBleHRlbnRzISAgWW91IHNob3VsZCAiCisiY2hlY2sgdGhlIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiIgorIkxlIGZpY2hpZXIgZGVzIHpvbmVzIGFkZGl0aW9ubmVsbGVzIG5lIGRldnJhaXQgcGFzIGNvbnRlbmlyIHNhIHByb3ByZSB6b25lICEgIgorIlZvdXMgZGV2cmlleiB26XJpZmllciBsZSBzeXN06G1lIGRlIGZpY2hpZXJzLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjU3NCBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo4NDcKK21zZ2lkICJDb3VsZCBub3QgY2FjaGUgdGhlIGZpbGUgc3lzdGVtIGluIG1lbW9yeS4iCittc2dzdHIgIkltcG9zc2libGUgZCdpbmRleGVyIGxlIHN5c3TobWUgZGUgZmljaGllcnMgZW4gbeltb2lyZS4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzo2MzUgbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6OTA4Cittc2dpZCAiQmFkIGJsb2NrcyBsaXN0IGNvdWxkIG5vdCBiZSBsb2FkZWQuIgorbXNnc3RyICJMYSBsaXN0ZSBkZXMgYmxvY3MgZOlmZWN0dWV1eCBuZSBwZXV0IOp0cmUgY2hhcmfpZS4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzo2NDkgbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6OTI0Cittc2dpZCAiQW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIGV4dGVudCByZWxvY2F0aW9uLiIKK21zZ3N0ciAiVW5lIGVycmV1ciBlc3Qgc3VydmVudWUgcGVuZGFudCBsZSBk6XBsYWNlbWVudCBkZSBsYSB6b25lLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NDk1Cittc2dpZCAiVGhpcyBIRlMrIHZvbHVtZSBoYXMgbm8gY2F0YWxvZyBmaWxlLiAgVGhpcyBpcyB2ZXJ5IHVudXN1YWwhIgorbXNnc3RyICIiCisiQ2Ugdm9sdW1lIEhGUysgbidhIHBhcyBkZSBmaWNoaWVyIGNhdGFsb2d1ZS4gQydlc3QgdnJhaW1lbnQgaW5oYWJpdHVlbCAhIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo2MTkKK21zZ2lkICJUaGlzIEhGUysgdm9sdW1lIGhhcyBubyBleHRlbnRzIG92ZXJmbG93IGZpbGUuICBUaGlzIGlzIHF1aXRlIHVudXN1YWwhIgorbXNnc3RyICIiCisiQ2Ugdm9sdW1lIEhGUysgbidhIHBhcyBkZSBmaWNoaWVyIGRlcyB6b25lcyBhZGRpdGlvbm5lbGxlcy4gQydlc3QgcGx1dPR0ICIKKyJpbmhhYml0dWVsICEiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo5NAorbXNnaWQgImRpc3BsYXlzIHRoaXMgaGVscCBtZXNzYWdlIgorbXNnc3RyICJhZmZpY2hlciBsJ2FpZGUtbeltb2lyZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjk1Cittc2dpZCAibGlzdHMgcGFydGl0aW9uIGxheW91dCBvbiBhbGwgYmxvY2sgZGV2aWNlcyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6OTYKK21zZ2lkICJkaXNwbGF5cyBtYWNoaW5lIHBhcnNlYWJsZSBvdXRwdXQiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjk3Cittc2dpZCAibmV2ZXIgcHJvbXB0cyBmb3IgdXNlciBpbnRlcnZlbnRpb24iCittc2dzdHIgIm5lIGRlbWFuZGUgamFtYWlzIGwnaW50ZXJ2ZW50aW9uIGRlIGwndXRpbGlzYXRldXIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo5OAorbXNnaWQgImRpc3BsYXlzIHRoZSB2ZXJzaW9uIgorbXNnc3RyICJhZmZpY2hlIGxhIHZlcnNpb24iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMTEKK21zZ2lkICIiCisiTlVNQkVSIGlzIHRoZSBwYXJ0aXRpb24gbnVtYmVyIHVzZWQgYnkgTGludXguICBPbiBNUy1ET1MgZGlzayBsYWJlbHMsIHRoZSAiCisicHJpbWFyeSBwYXJ0aXRpb25zIG51bWJlciBmcm9tIDEgdG8gNCwgbG9naWNhbCBwYXJ0aXRpb25zIGZyb20gNSBvbndhcmRzLlxuIgorbXNnc3RyICIiCisiTUlORVVSRSBlc3QgbGUgbnVt6XJvIGRlIHBhcnRpdGlvbiB1dGlsaXPpIHBhciBMaW51eC4gQXZlYyB1bmUg6XRpcXVldHRlIGRlICIKKyJkaXNxdWUgTVMtRE9TLCBsZXMgcGFydGl0aW9ucyBwcmltYWlyZXMgc29udCBudW3pcm906WVzIGRlIDEg4CA0IGV0IGxlcyAiCisicGFydGl0aW9ucyBsb2dpcXVlcyBkZSA1IOAgcGx1cy5cbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjExNAorbXNnaWQgIkxBQkVMLVRZUEUgaXMgb25lIG9mOiAiCittc2dzdHIgIlRZUEUtRC3JVElRVUVUVEUgZXN0IHBhcm1pIDogIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTE1Cittc2dpZCAiRkxBRyBpcyBvbmUgb2Y6ICIKK21zZ3N0ciAiRkFOSU9OIGVzdCBwYXJtaSA6ICIKKworIzogcGFydGVkL3BhcnRlZC5jOjExNgorbXNnaWQgIlVOSVQgaXMgb25lIG9mOiAiCittc2dzdHIgIlVOSVQgZXN0IHBhcm1pIDogIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTE3Cittc2dpZCAiUEFSVC1UWVBFIGlzIG9uZSBvZjogcHJpbWFyeSwgbG9naWNhbCwgZXh0ZW5kZWRcbiIKK21zZ3N0ciAiUEFSVC1UWVBFIGVzdCBwYXJtaSA6IHByaW1hcnksIGxvZ2ljYWwsIGV4dGVuZGVkXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMTkKK21zZ2lkICJGUy1UWVBFIGlzIG9uZSBvZjogIgorbXNnc3RyICJGUy1UWVBFIGVzdCBwYXJtaSA6ICIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMAorbXNnaWQgIiIKKyJTVEFSVCBhbmQgRU5EIGFyZSBkaXNrIGxvY2F0aW9ucywgc3VjaCBhcyA0R0Igb3IgMTAlLiAgTmVnYXRpdmUgdmFsdWVzIGNvdW50ICIKKyJmcm9tIHRoZSBlbmQgb2YgdGhlIGRpc2suICBGb3IgZXhhbXBsZSwgLTFzIHNwZWNpZmllcyBleGFjdGx5IHRoZSBsYXN0ICIKKyJzZWN0b3IuXG4iCittc2dzdHIgIiIKKyJTVEFSVCBldCBFTkQgc29udCBkZXMgZW1wbGFjZW1lbnRzLCBjb21tZSA0R0Igb3UgMTAlLiBMZXMgdmFsZXVycyBu6WdhdGl2ZXMgIgorImNvbXB0ZW50IOAgcGFydGlyIGRlIGxhIGZpbiBkdSBkaXNxdWUuIFBhciBleGVtcGxlLCA9LTFzIHNw6WNpZmllICIKKyJwculjaXPpbWVudCBsZSBkZXJuaWVyIHNlY3RldXIuXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjMKK21zZ2lkICJTVEFURSBpcyBvbmUgb2Y6IG9uLCBvZmZcbiIKK21zZ3N0ciAiyVRBVCBlc3QgdW4gcGFybWkgOiBvbiwgb2ZmXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjQKK21zZ2lkICJERVZJQ0UgaXMgdXN1YWxseSAvZGV2L2hkYSBvciAvZGV2L3NkYVxuIgorbXNnc3RyICJQyVJJUEjJUklRVUUgZXN0IGhhYml0dWVsbGVtZW50IGR1IGdlbnJlIC9kZXYvaGRhIG91IC9kZXYvc2RhXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjUKK21zZ2lkICJOQU1FIGlzIGFueSB3b3JkIHlvdSB3YW50XG4iCittc2dzdHIgIk5PTSBlc3QgdW4gbW90IGRlIHZvdHJlIGNob2l4XG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjYKK21zZ2lkICJUaGUgcGFydGl0aW9uIG11c3QgaGF2ZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBGUy1UWVBFczogIgorbXNnc3RyICJMYSBwYXJ0aXRpb24gZG9pdCBhdm9pciB1biBkZXMgRlMtVFlQRVMgc3VpdmFudHMgOiAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMzAKKyMsIGZ1enp5Cittc2dpZCAiIgorIkNvcHlyaWdodCAoQykgMTk5OCAtIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuXG4iCisiVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmUsIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLlxuIgorIlxuIgorIlRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuIgorImJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4iCisiTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuIgorIkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4iCisiXG4iCittc2dzdHIgIiIKKyJDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLlxuIgorIkNlIHByb2dyYW1tZSBlc3QgdW4gbG9naWNpZWwgbGlicmUsIHNvdXMgbGEgTGljZW5jZSBQdWJsaXF1ZSBH6W7pcmFsZSBHTlUgIgorIihHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSkuXG4iCisiQ2UgcHJvZ3JhbW1lIGVzdCBkaXN0cmlidekgZGFucyBsJ2VzcG9pciBxdSdpbCBzZXJhIHV0aWxlLCBtYWlzIFNBTlMgQVVDVU5FICIKKyJHQVJBTlRJRSA7IHNhbnMgbeptZSB1bmUgZ2FyYW50aWUgaW1wbGljaXRlIGRlIENPTU1FUkNJQUJJTElUySBvdSBERSAiCisiQ09ORk9STUlUySDAIFVORSBVVElMSVNBVElPTiBQQVJUSUNVTEnIUkUuIFZvaXIgbGEgTGljZW5jZSBQdWJsaXF1ZSBH6W7pcmFsZSAiCisiR05VIHBvdXIgcGx1cyBkZSBk6XRhaWxzLlxuIgorIlxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiUwLmYlJVx0KHRpbWUgbGVmdCAlLjJkOiUuMmQpIgorbXNnc3RyICIlMC5mJSVcdCh0ZW1wcyByZXN0YW50ICUuMmQ6JS4yZCkiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxOTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQYXJ0aXRpb24gJXMgaXMgYmVpbmcgdXNlZC4gWW91IG11c3QgdW5tb3VudCBpdCBiZWZvcmUgeW91IG1vZGlmeSBpdCB3aXRoICIKKyJQYXJ0ZWQuIgorbXNnc3RyICIiCisiTGEgcGFydGl0aW9uICVzIGVzdCBlbiBjb3VycyBkJ3V0aWxpc2F0aW9uLiBWb3VzIGRldmV6IGxhIGTpbW9udGVyIGF2YW50IGRlICIKKyJsYSBtb2RpZmllciBhdmVjIFBhcnRlZC4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGFydGl0aW9uKHMpIG9uICVzIGFyZSBiZWluZyB1c2VkLiIKK21zZ3N0ciAiQXUgbW9pbnMgdW5lIHBhcnRpdGlvbiBkZSAlcyBlc3QgZW4gY291cnMgZCd1dGlsaXNhdGlvbi4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjMKK21zZ2lkICIiCisiVGhlIGV4aXN0aW5nIGZpbGUgc3lzdGVtIHdpbGwgYmUgZGVzdHJveWVkIGFuZCBhbGwgZGF0YSBvbiB0aGUgcGFydGl0aW9uICIKKyJ3aWxsIGJlIGxvc3QuIERvIHlvdSB3YW50IHRvIGNvbnRpbnVlPyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZXhpc3RpbmcgZGlzayBsYWJlbCBvbiAlcyB3aWxsIGJlIGRlc3Ryb3llZCBhbmQgYWxsIGRhdGEgb24gdGhpcyBkaXNrICIKKyJ3aWxsIGJlIGxvc3QuIERvIHlvdSB3YW50IHRvIGNvbnRpbnVlPyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NDU4IHBhcnRlZC9wYXJ0ZWQuYzo2NTIgcGFydGVkL3BhcnRlZC5jOjEwNDQKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMTI4IHBhcnRlZC9wYXJ0ZWQuYzoxNzcxIHBhcnRlZC9wYXJ0ZWQuYzoxODUyCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTkwMAorbXNnaWQgIlBhcnRpdGlvbiBudW1iZXI/IgorbXNnc3RyICJOdW3pcm8gZGUgcGFydGl0aW9uID8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo1MDAKK21zZ2lkICJTb3VyY2UgZGV2aWNlPyIKK21zZ3N0ciAiUOlyaXBo6XJpcXVlIHNvdXJjZSA/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NTA0Cittc2dpZCAiU291cmNlIHBhcnRpdGlvbiBudW1iZXI/IgorbXNnc3RyICJOdW3pcm8gZGUgbGEgcGFydGl0aW9uIHNvdXJjZSA/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NTA5Cittc2dpZCAiQ2FuJ3QgY29weSBhbiBleHRlbmRlZCBwYXJ0aXRpb24uIgorbXNnc3RyICJOZSBwZXV0IGNvcGllciB1bmUgcGFydGl0aW9uIOl0ZW5kdWUuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NTE1Cittc2dpZCAiRGVzdGluYXRpb24gcGFydGl0aW9uIG51bWJlcj8iCittc2dzdHIgIk51belybyBkZSBsYSBwYXJ0aXRpb24gZGUgZGVzdGluYXRpb24gPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjYxNQorbXNnaWQgIk5ldyBkaXNrIGxhYmVsIHR5cGU/IgorbXNnc3RyICJOb3V2ZWF1IHR5cGUgZCfpdGlxdWV0dGUgZGUgZGlzcXVlID8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo2NTYKK21zZ2lkICJGaWxlIHN5c3RlbT8iCittc2dzdHIgIlN5c3TobWUgZGUgZmljaGllcnMgPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjcwNyBwYXJ0ZWQvcGFydGVkLmM6ODc4Cittc2dpZCAiUGFydGl0aW9uIHR5cGU/IgorbXNnc3RyICJUeXBlIGRlIHBhcnRpdGlvbiA/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NzE0IHBhcnRlZC9wYXJ0ZWQuYzo4ODUgcGFydGVkL3BhcnRlZC5jOjExMzEKK21zZ2lkICJQYXJ0aXRpb24gbmFtZT8iCittc2dzdHIgIk5vbSBkZSBsYSBwYXJ0aXRpb24gPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjcyMiBwYXJ0ZWQvcGFydGVkLmM6ODk1Cittc2dpZCAiRmlsZSBzeXN0ZW0gdHlwZT8iCittc2dzdHIgIlR5cGUgZGUgc3lzdOhtZSBkZSBmaWNoaWVycyA/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NzI5IHBhcnRlZC9wYXJ0ZWQuYzo4OTcgcGFydGVkL3BhcnRlZC5jOjEwNTkKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNzI1IHBhcnRlZC9wYXJ0ZWQuYzoxNzgwCittc2dpZCAiU3RhcnQ/IgorbXNnc3RyICJE6WJ1dCA/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NzMxIHBhcnRlZC9wYXJ0ZWQuYzo5MDAgcGFydGVkL3BhcnRlZC5jOjEwNjIKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNzI3IHBhcnRlZC9wYXJ0ZWQuYzoxNzgyCittc2dpZCAiRW5kPyIKK21zZ3N0ciAiRmluID8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo3NjkgcGFydGVkL3BhcnRlZC5jOjkzOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IHJlcXVlc3RlZCBhIHBhcnRpdGlvbiBmcm9tICVzIHRvICVzLlxuIgorIlRoZSBjbG9zZXN0IGxvY2F0aW9uIHdlIGNhbiBtYW5hZ2UgaXMgJXMgdG8gJXMuICBJcyB0aGlzIHN0aWxsIGFjY2VwdGFibGUgdG8gIgorInlvdT8iCittc2dzdHIgIiIKKyJWb3VzIGF2ZXogZGVtYW5k6SB1bmUgcGFydGl0aW9uIGRlICVzIOAgJXMuXG4iCisiTGEgcG9zaXRpb24gbGEgcGx1cyBwcm9jaGUgcXVlIG5vdXMgcG91dm9ucyBn6XJlciBlc3QgJXMg4CAlcy4gRXN0LWNlICIKKyJ0b3Vqb3VycyBhY2NlcHRhYmxlIHBvdXIgdm91cyA/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6ODkwCittc2dpZCAiQW4gZXh0ZW5kZWQgcGFydGl0aW9uIGNhbm5vdCBob2xkIGEgZmlsZSBzeXN0ZW0uICBEaWQgeW91IHdhbnQgbWtwYXJ0PyIKK21zZ3N0ciAiIgorIlVuZSBwYXJ0aXRpb24g6XRlbmR1ZSBuZSBwZXV0IGF2b2lyIGRlIHN5c3TobWUgZGUgZmljaGllcnMuIFZvdWxpZXotdm91cyAiCisidXRpbGlzZXIgbWtwYXJ0ID8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMDUwCittc2dpZCAiQ2FuJ3QgbW92ZSBhbiBleHRlbmRlZCBwYXJ0aXRpb24uIgorbXNnc3RyICJOZSBwZXV0IGTpcGxhY2VyIHVuZSBwYXJ0aXRpb24g6XRlbmR1ZS4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMDc5Cittc2dpZCAiQ2FuJ3QgbW92ZSBhIHBhcnRpdGlvbiBvbnRvIGl0c2VsZi4gIFRyeSB1c2luZyByZXNpemUsIHBlcmhhcHM/IgorbXNnc3RyICIiCisiTmUgcGV1dCBk6XBsYWNlciB1bmUgcGFydGl0aW9uIHN1ciBlbGxlLW3qbWUuIEVzc2F5ZXogcGV1dC3qdHJlIHVuICIKKyJyZWRpbWVuc2lvbm5lbWVudCA/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIyNworIywgYy1mb3JtYXQKK21zZ2lkICJNaW5vcjogJWRcbiIKK21zZ3N0ciAiTWluZXVyZSA6ICVkXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZsYWdzOiAlc1xuIgorbXNnc3RyICJGYW5pb25zIDogJXNcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlsZSBTeXN0ZW06ICVzXG4iCittc2dzdHIgIlN5c3TobWUgZGUgZmljaGllcnMgOiAlc1xuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIzMAorbXNnaWQgIlNpemU6ICAgICAgICAgIgorbXNnc3RyICJUYWlsbGU6ICAgICAgICAgIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIzNQorbXNnaWQgIk1pbmltdW0gc2l6ZTogIgorbXNnc3RyICJUYWlsbGUgbWluaW11bSA6ICIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMzgKK21zZ2lkICJNYXhpbXVtIHNpemU6ICIKK21zZ3N0ciAiVGFpbGxlIG1heGltdW0gOiAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMzYyCisjLCBjLWZvcm1hdAorbXNnaWQgIk1vZGVsOiAlcyAoJXMpXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEzNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGlzayAlczogJXNcbiIKK21zZ3N0ciAiRGlzcXVlICVzIDogJXNcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEzNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VjdG9yIHNpemUgKGxvZ2ljYWwvcGh5c2ljYWwpOiAlbGxkQi8lbGxkQlxuIgorbXNnc3RyICJUYWlsbGUgZGVzIHNlY3RldXJzIChsb2dpcXVlcy9waHlzaXF1ZXMpOiAlbGxkQi8lbGxkQlxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTM4MworIywgYy1mb3JtYXQKK21zZ2lkICJCSU9TIGN5bGluZGVyLGhlYWQsc2VjdG9yIGdlb21ldHJ5OiAlZCwlZCwlZC4gIEVhY2ggY3lsaW5kZXIgaXMgJXMuXG4iCittc2dzdHIgIiIKKyJCSU9TIGN5bGluZHJlLHTqdGUsc2VjdGV1ciBn6W9t6XRyaWUgOiAlZCwlZCwlZC4gQ2hhcXVlIGN5bGluZHJlIGVzdCAlcy5cbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEzOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGFydGl0aW9uIFRhYmxlOiAlc1xuIgorbXNnc3RyICJUYWJsZSBkZSBwYXJ0aXRpb24gOiAlc1xuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQwNiBwYXJ0ZWQvcGFydGVkLmM6MTQwOQorbXNnaWQgIk51bWJlciIKK21zZ3N0ciAiTnVt6XJvIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQwNiBwYXJ0ZWQvcGFydGVkLmM6MTQwOQorbXNnaWQgIlN0YXJ0IgorbXNnc3RyICJE6WJ1dCIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MDcgcGFydGVkL3BhcnRlZC5jOjE0MTAKK21zZ2lkICJFbmQiCittc2dzdHIgIkZpbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MTAKK21zZ2lkICJTaXplIgorbXNnc3RyICJUYWlsbGUiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDE0Cittc2dpZCAiVHlwZSIKK21zZ3N0ciAiVHlwZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MTYKK21zZ2lkICJGaWxlIHN5c3RlbSIKK21zZ3N0ciAiU3lzdOhtZSBkZSBmaWNoaWVycyIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MTkKK21zZ2lkICJOYW1lIgorbXNnc3RyICJOb20iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDIxCittc2dpZCAiRmxhZ3MiCittc2dzdHIgIkZhbmlvbnMiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDc3Cittc2dpZCAiRnJlZSBTcGFjZSIKK21zZ3N0ciAiRXNwYWNlIGxpYnJlIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTYyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQSAlcyAlcyBwYXJ0aXRpb24gd2FzIGZvdW5kIGF0ICVzIC0+ICVzLiAgRG8geW91IHdhbnQgdG8gYWRkIGl0IHRvIHRoZSAiCisicGFydGl0aW9uIHRhYmxlPyIKK21zZ3N0ciAiIgorIlVuZSBwYXJ0aXRpb24gJXMgJXMgYSDpdOkgdHJvdXbpZSDgICVzIC0+ICVzLiBWb3VsZXotdm91cyBsJ2Fqb3V0ZXIg4CBsYSAiCisidGFibGUgZGUgcGFydGl0aW9uID8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNjYzCittc2dpZCAic2VhcmNoaW5nIGZvciBmaWxlIHN5c3RlbXMiCittc2dzdHIgInJlY2hlcmNoZSBkZXMgc3lzdOhtZXMgZGUgZmljaGllcnMiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxODc3Cittc2dpZCAiTmV3IGRldmljZT8iCittc2dzdHIgIk5vdXZlYXUgcOlyaXBo6XJpcXVlID8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxOTAyCittc2dpZCAiRmxhZyB0byBJbnZlcnQ/IgorbXNnc3RyICJGYW5pb24g4CBpbnZlcnNlciA/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTkwNworbXNnaWQgIk5ldyBzdGF0ZT8iCittc2dzdHIgIk5vdXZlbCDpdGF0ID8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxOTQ0Cittc2dpZCAiVW5pdD8iCittc2dzdHIgIlVuaXTpID8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMDkzCittc2dpZCAiY2hlY2siCittc2dzdHIgImNoZWNrIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjA5NgorbXNnaWQgIiIKKyJjaGVjayBOVU1CRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIGEgc2ltcGxlIGNoZWNrIG9uIHRoZSBmaWxlIHN5c3RlbSIKK21zZ3N0ciAiIgorImNoZWNrIE1JTkVVUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFpcmUgdW5lIHbpcmlmaWNhdGlvbiBzaW1wbGUgZHUgIgorInN5c3TobWUgZGUgZmljaGllcnMiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTAyCittc2dpZCAiY3AiCittc2dzdHIgImNwIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEwNQorbXNnaWQgIiIKKyJjcCBbRlJPTS1ERVZJQ0VdIEZST00tTlVNQkVSIFRPLU5VTUJFUiAgIGNvcHkgZmlsZSBzeXN0ZW0gdG8gYW5vdGhlciAiCisicGFydGl0aW9uIgorbXNnc3RyICIiCisiY3AgW1DJUklQSMlSSVFVRS1TT1VSQ0VdIE1JTkVVUkUtU09VUkNFIE1JTkVVUkUtREVTVFxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3BpZXIgbGUgc3lzdOhtZSBkZSBmaWNoaWVycyB2ZXJzIHVuZSAiCisiYXV0cmUgcGFydGl0aW9uIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjExMQorbXNnaWQgImhlbHAiCittc2dzdHIgImhlbHAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTE0CisjLCBmdXp6eQorbXNnaWQgIiIKKyJoZWxwIFtDT01NQU5EXSAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50IGdlbmVyYWwgaGVscCwgb3IgaGVscCBvbiAiCisiQ09NTUFORCIKK21zZ3N0ciAiIgorImhlbHAgW0NPTU1BTkRFXSAgICAgICAgICAgICAgICAgICAgICAgICAgYWZmaWNoZSBsJ2FpZGUgZ+lu6XJhbGUgb3UgbCdhaWRlICIKKyJkZSBsYSBDT01NQU5ERSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMjAKK21zZ2lkICJta2xhYmVsIgorbXNnc3RyICJta2xhYmVsIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEyMAorIywgZnV6enkKK21zZ2lkICJta3RhYmxlIgorbXNnc3RyICJta2xhYmVsIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEyMworIywgZnV6enkKK21zZ2lkICIiCisibWtsYWJlbCxta3RhYmxlIExBQkVMLVRZUEUgICAgICAgICAgICAgICBjcmVhdGUgYSBuZXcgZGlza2xhYmVsIChwYXJ0aXRpb24gIgorInRhYmxlKSIKK21zZ3N0ciAiIgorIm1rbGFiZWwgTEFCRUwtVFlQRSAgICAgICAgICAgICAgICAgICAgICAgY3LpZXIgdW5lIG5vdXZlbGxlIOl0aXF1ZXR0ZSBkZSAiCisiZGlzcXVlICh0YWJsZSBkZSBwYXJ0aXRpb24pIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEyOQorbXNnaWQgIm1rZnMiCittc2dzdHIgIm1rZnMiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTMyCittc2dpZCAiIgorIm1rZnMgTlVNQkVSIEZTLVRZUEUgICAgICAgICAgICAgICAgICAgICAgbWFrZSBhIEZTLVRZUEUgZmlsZSBzeXN0ZW0gb24gIgorInBhcnRpdGl0b24gTlVNQkVSIgorbXNnc3RyICIiCisibWtmcyBNSU5FVVJFIFRZUEUtU0YgICAgICAgICAgICAgICAgICAgICBjcullciB1biBzeXN06G1lIGRlIGZpY2hpZXJzIFRZUEUtIgorIlNGIHN1ciBsYSBwYXJ0aXRpdG9uIE1JTkVVUkUiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTM4Cittc2dpZCAibWtwYXJ0IgorbXNnc3RyICJta3BhcnQiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTQxCittc2dpZCAibWtwYXJ0IFBBUlQtVFlQRSBbRlMtVFlQRV0gU1RBUlQgRU5EICAgICBtYWtlIGEgcGFydGl0aW9uIgorbXNnc3RyICJta3BhcnQgVFlQRS1QQVIgW1RZUEUtU0ZdIETJUEFSVCBGSU4gICAgICBjcullciB1bmUgcGFydGl0aW9uIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE0NworIywgZnV6enkKK21zZ2lkICIiCisiJ21rcGFydCcgbWFrZXMgYSBwYXJ0aXRpb24gd2l0aG91dCBjcmVhdGluZyBhIG5ldyBmaWxlIHN5c3RlbSBvbiB0aGUgIgorInBhcnRpdGlvbi4gIEZTLVRZUEUgbWF5IGJlIHNwZWNpZmllZCB0byBzZXQgYW4gYXBwcm9wcmlhdGUgcGFydGl0aW9uIElELlxuIgorbXNnc3RyICIiCisibWtwYXJ0IGNy6WUgdW5lIHBhcnRpdGlvbiBzYW5zIGNy6WVyIHVuIG5vdXZlYXUgc3lzdOhtZSBkZSBmaWNoaWVycyBzdXIgbGEgIgorInBhcnRpdGlvbi4gTGUgVFlQRS1TRiBkb2l0IOp0cmUgc3DpY2lmaekgcG91ciBpbml0aWFsaXNlciBsZSB0eXBlIGRlICIKKyJwYXJ0aXRpb24gYXBwcm9wcmnpLlxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE1MgorbXNnaWQgIm1rcGFydGZzIgorbXNnc3RyICJta3BhcnRmcyIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNTUKK21zZ2lkICIiCisibWtwYXJ0ZnMgUEFSVC1UWVBFIEZTLVRZUEUgU1RBUlQgRU5EICAgICBtYWtlIGEgcGFydGl0aW9uIHdpdGggYSBmaWxlIHN5c3RlbSIKK21zZ3N0ciAiIgorIm1rcGFydGZzIFRZUEUtUEFSIFRZUEUtU0YgRMlQQVJUIEZJTiAgICAgIGNy6WVyIHVuZSBwYXJ0aXRpb24gYXZlYyB1biAiCisic3lzdOhtZSBkZSBmaWNoaWVycyIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNjEKK21zZ2lkICJtb3ZlIgorbXNnc3RyICJtb3ZlIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE2NAorbXNnaWQgIm1vdmUgTlVNQkVSIFNUQVJUIEVORCAgICAgICAgICAgICAgICAgICAgbW92ZSBwYXJ0aXRpb24gTlVNQkVSIgorbXNnc3RyICJtb3ZlIE1JTkVVUkUgRMlQQVJUIEZJTiAgICAgICAgICAgICAgICAgZOlwbGFjZXIgbGEgcGFydGl0aW9uIE1JTkVVUkUiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTY5Cittc2dpZCAibmFtZSIKK21zZ3N0ciAibm9tIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE3MgorbXNnaWQgIm5hbWUgTlVNQkVSIE5BTUUgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSBwYXJ0aXRpb24gTlVNQkVSIGFzIE5BTUUiCittc2dzdHIgIiIKKyJuYW1lIE1JTkVVUkUgTk9NICAgICAgICAgICAgICAgICAgICAgICBub21tZXIgdW5lIHBhcnRpdGlvbiBNSU5FVVJFIE5PTSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNzcKK21zZ2lkICJwcmludCIKK21zZ3N0ciAicHJpbnQiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTgwCittc2dpZCAiIgorInByaW50IFtkZXZpY2VzfGZyZWV8bGlzdCxhbGx8TlVNQkVSXSAgICAgZGlzcGxheSB0aGUgcGFydGl0aW9uIHRhYmxlLCAiCisiYXZhaWxhYmxlIGRldmljZXMsIGZyZWUgc3BhY2UsIGFsbCBmb3VuZCBwYXJ0aXRpb25zLCBvciBhIHBhcnRpY3VsYXIgIgorInBhcnRpdGlvbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE4NQorbXNnaWQgIiIKKyJXaXRob3V0IGFyZ3VtZW50cywgJ3ByaW50JyBkaXNwbGF5cyB0aGUgZW50aXJlIHBhcnRpdGlvbiB0YWJsZS4gSG93ZXZlciB3aXRoICIKKyJ0aGUgZm9sbG93aW5nIGFyZ3VtZW50cyBpdCBwZXJmb3JtcyB2YXJpb3VzIG90aGVyIGFjdGlvbnMuXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxODcKK21zZ2lkICIgIGRldmljZXMgICA6IGRpc3BsYXkgYWxsIGFjdGl2ZSBibG9jayBkZXZpY2VzXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxODgKK21zZ2lkICIiCisiICBmcmVlICAgICAgOiBkaXNwbGF5IGluZm9ybWF0aW9uIGFib3V0IGZyZWUgdW5wYXJ0aXRpb25lZCBzcGFjZSBvbiB0aGUgIgorImN1cnJlbnQgYmxvY2sgZGV2aWNlXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxOTAKKyMsIGZ1enp5Cittc2dpZCAiIgorIiAgbGlzdCwgYWxsIDogZGlzcGxheSB0aGUgcGFydGl0aW9uIHRhYmxlcyBvZiBhbGwgYWN0aXZlIGJsb2NrIGRldmljZXNcbiIKK21zZ3N0ciAiIgorInByaW50IFtmcmVlfE1JTkVVUkV8YWxsXSAgICAgICAgICAgICAgICAgYWZmaWNoZXIgbGEgdGFibGUgZGUgcGFydGl0aW9ucyBvdSAiCisidW5lIHBhcnRpdGlvbiwgb3UgdG91cyBsZXMgcOlyaXBo6XJpcXVlcyIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxOTEKK21zZ2lkICIiCisiICBOVU1CRVIgICAgOiBkaXNwbGF5IG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBwYXJ0aWN1bGFyICIKKyJwYXJ0aXRpb25cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE5NgorbXNnaWQgInF1aXQiCittc2dzdHIgInF1aXQiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTk5Cittc2dpZCAicXVpdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGl0IHByb2dyYW0iCittc2dzdHIgInF1aXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWl0dGVyIGxlIHByb2dyYW1tZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMDQKK21zZ2lkICJyZXNjdWUiCittc2dzdHIgInJlc2N1ZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMDcKK21zZ2lkICIiCisicmVzY3VlIFNUQVJUIEVORCAgICAgICAgICAgICAgICAgICAgICAgICByZXNjdWUgYSBsb3N0IHBhcnRpdGlvbiBuZWFyIFNUQVJUICIKKyJhbmQgRU5EIgorbXNnc3RyICIiCisicmVzY3VlIETJUEFSVCBGSU4gICAgICAgICAgICAgICAgICAgICAgICByZXN0YXVyZXIgdW5lIHBhcnRpdGlvbiBwZXJkdWUgIgorImVudHJlIETJUEFSVCBldCBGSU4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjEzCittc2dpZCAicmVzaXplIgorbXNnc3RyICJyZXNpemUiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjE2Cittc2dpZCAiIgorInJlc2l6ZSBOVU1CRVIgU1RBUlQgRU5EICAgICAgICAgICAgICAgICAgcmVzaXplIHBhcnRpdGlvbiBOVU1CRVIgYW5kIGl0cyAiCisiZmlsZSBzeXN0ZW0iCittc2dzdHIgIiIKKyJyZXNpemUgTUlORVVSRSBEyVBBUlQgRklOICAgICAgICAgICAgICAgIG1vZGlmaWVyIGxhIHRhaWxsZSBkdSBzeXN06G1lIGRlICIKKyJmaWNoaWVycyBNSU5FVVJFIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIyNAorbXNnaWQgInJtIgorbXNnc3RyICJybSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMjcKK21zZ2lkICJybSBOVU1CRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwYXJ0aXRpb24gTlVNQkVSIgorbXNnc3RyICJybSBNSU5FVVJFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZOl0cnVpcmUgbGEgcGFydGl0aW9uIE1JTkVVUkUiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjMyCittc2dpZCAic2VsZWN0IgorbXNnc3RyICJzZWxlY3QiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjM1Cittc2dpZCAic2VsZWN0IERFVklDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9vc2UgdGhlIGRldmljZSB0byBlZGl0IgorbXNnc3RyICIiCisic2VsZWN0IFDJUklQSMlSSVFVRSAgICAgICAgICAgICAgICAgICAgIHPpbGVjdGlvbm5lciBsZSBw6XJpcGjpcmlxdWUg4CDpZGl0ZXIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjQwCittc2dpZCAic2V0IgorbXNnc3RyICJzZXQiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjQzCittc2dpZCAiIgorInNldCBOVU1CRVIgRkxBRyBTVEFURSAgICAgICAgICAgICAgICAgICAgY2hhbmdlIHRoZSBGTEFHIG9uIHBhcnRpdGlvbiBOVU1CRVIiCittc2dzdHIgIiIKKyJzZXQgTUlORVVSRSBGQU5JT04gyVRBVCAgICAgICAgICAgICAgICAgIG1vZGlmaWVyIGxlIEZBTklPTiBzdXIgbGEgcGFydGl0aW9uICIKKyJNSU5FVVJFIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI0OQorbXNnaWQgInRvZ2dsZSIKK21zZ3N0ciAiaW52ZXJzZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNTIKK21zZ2lkICIiCisidG9nZ2xlIFtOVU1CRVIgW0ZMQUddXSAgICAgICAgICAgICAgICAgICB0b2dnbGUgdGhlIHN0YXRlIG9mIEZMQUcgb24gIgorInBhcnRpdGlvbiBOVU1CRVIiCittc2dzdHIgIiIKKyJ0b2dnbGUgW01JTkVVUiBbRkFOSU9OXV0gICAgICAgICAgICAgICAgIGludmVyc2VyIGwn6XRhdCBkdSBmYW5pb24gc3VyIGxhICIKKyJwYXJ0aXRpb24gTUlORVVSIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI1OAorbXNnaWQgInVuaXQiCittc2dzdHIgInVuaXQiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjYxCittc2dpZCAidW5pdCBVTklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgdGhlIGRlZmF1bHQgdW5pdCB0byBVTklUIgorbXNnc3RyICIiCisidW5pdCBVTklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZmZlY3RlIGwndW5pdOkgcGFyIGRlZmF1dCDgIFVOSVQiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjY2CisjLCBmdXp6eQorbXNnaWQgInZlcnNpb24iCittc2dzdHIgInZlcnNpb24iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjY5CisjLCBmdXp6eQorbXNnaWQgIiIKKyJ2ZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXkgdGhlIHZlcnNpb24gbnVtYmVyIGFuZCAiCisiY29weXJpZ2h0IGluZm9ybWF0aW9uIG9mIEdOVSBQYXJ0ZWQiCittc2dzdHIgIiIKKyJ2ZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmZmljaGUgbGEgdmVyc2lvbiBjb3VycmFudGUgZGUgR05VICIKKyJQYXJ0ZWQgYWluc2kgcXVlIGwnaW5mb3JtYXRpb24gc3VyIGxlIGNvcHlyaWdodCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNzMKKyMsIGZ1enp5Cittc2dpZCAiIgorIid2ZXJzaW9uJyBkaXNwbGF5cyBjb3B5cmlnaHQgYW5kIHZlcnNpb24gaW5mb3JtYXRpb24gY29ycmVzcG9uZGluZyB0byB0aGlzICIKKyJjb3B5IG9mIEdOVSBQYXJ0ZWRcbiIKK21zZ3N0ciAiIgorInZlcnNpb24gYWZmaWNoZSBsZSBjb3B5cmlnaHQgZXQgbGEgdmVyc2lvbiBkZSBjZXR0ZSBjb3BpZSBkZSBHTlUgUGFydGVkXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMzM1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLWhsbXN2XSBbREVWSUNFIFtDT01NQU5EIFtQQVJBTUVURVJTXV0uLi5dXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIzNzkKK21zZ2lkICJObyBkZXZpY2UgZm91bmQiCittc2dzdHIgIkF1Y3VuIHDpcmlwaOlyaXF1ZSB0cm91dukiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyNDEyCittc2dpZCAiV0FSTklORzogWW91IGFyZSBub3Qgc3VwZXJ1c2VyLiAgV2F0Y2ggb3V0IGZvciBwZXJtaXNzaW9ucy4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjI0NTAKKyMsIGZ1enp5Cittc2dpZCAiWW91IG1heSBuZWVkIHRvIHVwZGF0ZSAvZXRjL2ZzdGFiLlxuIgorbXNnc3RyICJOZSBwYXMgb3VibGllciBkZSBtZXR0cmUg4CBqb3VyIC9ldGMvZnN0YWIgc2kgbuljZXNzYWlyZS5cbiIKKworIzogcGFydGVkL3VpLmM6MTYwCittc2dpZCAiV2VsY29tZSB0byBHTlUgUGFydGVkISBUeXBlICdoZWxwJyB0byB2aWV3IGEgbGlzdCBvZiBjb21tYW5kcy5cbiIKK21zZ3N0ciAiIgorIkJpZXZlbnVlIHN1ciBHTlUgUGFydGVkICEgVGFwcGV6ICdoZWxwJyBwb3VyIHZvaXIgbGEgbGlzdGUgZGVzIGNvbW1hbmRlcy5cbiIKKworIzogcGFydGVkL3VpLmM6MTYzCittc2dpZCAiIgorIlVzYWdlOiBwYXJ0ZWQgW09QVElPTl0uLi4gW0RFVklDRSBbQ09NTUFORCBbUEFSQU1FVEVSU10uLi5dLi4uXVxuIgorIkFwcGx5IENPTU1BTkRzIHdpdGggUEFSQU1FVEVSUyB0byBERVZJQ0UuICBJZiBubyBDT01NQU5EKHMpIGFyZSBnaXZlbiwgcnVuICIKKyJpblxuIgorImludGVyYWN0aXZlIG1vZGUuXG4iCittc2dzdHIgIiIKKyJVc2FnZSA6IHBhcnRlZCBbT1BUSU9OXS4uLiBbUMlSSVBIyVJJUVVFIFtDT01NQU5ERSBbUEFSQU3IVFJFU10uLi5dLi4uXVxuIgorIkFwcGxpcXVlciBsZXMgQ09NTUFOREVTIGF2ZWMgbGVzIFBBUkFNyFRSRVMgYXUgUMlSSVBIyVJJUVVFLiBTaSBhdWN1bmUgIgorIkNPTU1BTkRFIG4nZXN0IGZvdXJuaWVcbiIKKyJsJ2V46WN1dGlvbiBzZSBmYWl0IGVuIG1vZGUgaW506XJhY3RpZi5cbiIKKworIzogcGFydGVkL3VpLmM6MTY4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiXG4iCisiWW91IGZvdW5kIGEgYnVnIGluIEdOVSBQYXJ0ZWQhIEhlcmUncyB3aGF0IHlvdSBoYXZlIHRvIGRvOlxuIgorIlxuIgorIkRvbid0IHBhbmljISBUaGUgYnVnIGhhcyBtb3N0IGxpa2VseSBub3QgYWZmZWN0ZWQgYW55IG9mIHlvdXIgZGF0YS5cbiIKKyJIZWxwIHVzIHRvIGZpeCB0aGlzIGJ1ZyBieSBkb2luZyB0aGUgZm9sbG93aW5nOlxuIgorIlxuIgorIkNoZWNrIHdoZXRoZXIgdGhlIGJ1ZyBoYXMgYWxyZWFkeSBiZWVuIGZpeGVkIGJ5IGNoZWNraW5nXG4iCisidGhlIGxhc3QgdmVyc2lvbiBvZiBHTlUgUGFydGVkIHRoYXQgeW91IGNhbiBmaW5kIGF0OlxuIgorIlxuIgorIlx0aHR0cDovL2Z0cC5nbnUub3JnL2dudS9wYXJ0ZWQvXG4iCisiXG4iCisiUGxlYXNlIGNoZWNrIHRoaXMgdmVyc2lvbiBwcmlvciB0byBidWcgcmVwb3J0aW5nLlxuIgorIlxuIgorIklmIHRoaXMgaGFzIG5vdCBiZWVuIGZpeGVkIHlldCBvciBpZiB5b3UgZG9uJ3Qga25vdyBob3cgdG8gY2hlY2ssXG4iCisicGxlYXNlIHZpc2l0IHRoZSBHTlUgUGFydGVkIHdlYnNpdGU6XG4iCisiXG4iCisiXHRodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvcGFydGVkXG4iCisiXG4iCisiZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uXG4iCisiXG4iCisiWW91ciByZXBvcnQgc2hvdWxkIGNvbnRhaW4gdGhlIHZlcnNpb24gb2YgdGhpcyByZWxlYXNlICglcylcbiIKKyJhbG9uZyB3aXRoIHRoZSBlcnJvciBtZXNzYWdlIGJlbG93LCB0aGUgb3V0cHV0IG9mXG4iCisiXG4iCisiXHRwYXJ0ZWQgREVWSUNFIHVuaXQgY28gcHJpbnQgdW5pdCBzIHByaW50XG4iCisiXG4iCisiYW5kIHRoZSBmb2xsb3dpbmcgaGlzdG9yeSBvZiBjb21tYW5kcyB5b3UgZW50ZXJlZC5cbiIKKyJBbHNvIGluY2x1ZGUgYW55IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgeW91ciBzZXR1cCB5b3VcbiIKKyJjb25zaWRlciBpbXBvcnRhbnQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJcbiIKKyJWb3VzIGF2ZXogdHJvdXbpIHVuIGJ1ZyBkYW5zIEdOVSBQYXJ0ZWQgISBWb2ljaSBjZSBxdWUgdm91cyBkZXZleiBmYWlyZSA6XG4iCisiXG4iCisiTmUgcGFuaXF1ZXogcGFzICEgTGUgYnVnIG4nYSBwcm9iYWJsZW1lbnQgcGFzIGFmZmVjdOkgdm9zIGRvbm7pZXMuXG4iCisiQWlkZXogbm91cyDgIHLpc291ZHJlIGNlIGJ1ZyBlbiBmYWlzYW50IGNlIHF1aSBzdWl0OlxuIgorIlxuIgorIlbpcmlmaWV6IHNpIGxlIGJ1ZyBuJ2EgcGFzIGTpauAg6XTpIHLpc29sdSBkYW5zIGxhIGRlcm5p6HJlIHZlcnNpb24gZGUgR05VXG4iCisiUGFydGVkIHF1ZSB2b3VzIHBvdXZleiB0cm91dmVyIOAgOlxuIgorIlxuIgorIlx0aHR0cDovL2Z0cC5nbnUub3JnL2dudS9wYXJ0ZWQvXG4iCisiXG4iCisiU1ZQIHbpcmlmaWV6IGNldHRlIHZlcnNpb24gYXZhbnQgZGUgcmFwcG9ydGVyIHRvdXQgYnVnLlxuIgorIlxuIgorIlMnaWwgbidhIHBhcyBlbmNvcmUg6XTpIHLpc29sdSBvdSBzaSB2b3VzIG5lIHNhdmV6IHBhcyBjb21tZW50IHbpcmlmaWVyLFxuIgorIlNWUCB2aXNpdGV6IGxlIHNpemUgd2ViIGRlIEdOVSBQYXJ0ZWQgOlxuIgorIlxuIgorIlx0aHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3BhcnRlZFxuIgorIlxuIgorInBvdXIgcGx1cyBkJ2luZm9ybWF0aW9ucy5cbiIKKyJcbiIKKyJWb3RyZSByYXBwb3J0IGRvaXMgY29udGVuaXIgbGEgdmVyc2lvbiBkZSBjZXR0ZSByZWxlYXNlICglcylcbiIKKyJhY2NvbXBhZ27pIGR1IG1lc3NhZ2UgZCdlcnJldXIgZGVzc291cywgbGUgcmVzdWx0YXQgZGVcbiIKKyJcbiIKKyJcdHBhcnRlZCBQyVJJUEjJUklRVUUgdW5pdCBjbyBwcmludCB1bml0IHMgcHJpbnRcbiIKKyJcbiIKKyJldCBkZXMgaW5mb3JtYXRpb25zIHN1cHBs6W1lbnRhaXJlcyBxdWUgdm91cyB0cm91dmV6IGltcG9ydGFudGVzIOAgcHJvcG9zIGRlICIKKyJ2b3RyZSBjb25maWdyYXRpb24uXG4iCisKKyM6IHBhcnRlZC91aS5jOjI4NAorbXNnaWQgIiIKKyJcbiIKKyJDb21tYW5kIEhpc3Rvcnk6XG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6MzY2CisjLCBmdXp6eQorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogU0VHVl9NQVBFUlIgKEFkZHJlc3Mgbm90IG1hcHBlZCB0byBvYmplY3QpXG4iCittc2dzdHIgIiIKKyJcbiIKKyJFcnJldXIgOiBTRUdWX01BUEVSUiAoTCdhZHJlc3NlIG4nZXN0IHBhcyBhc3NvY2npZSDgIHVuIG9iamV0KSIKKworIzogcGFydGVkL3VpLmM6MzcyCisjLCBmdXp6eQorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogU0VHVl9BQ0NFUlIgKEludmFsaWQgcGVybWlzc2lvbnMgZm9yIG1hcHBlZCBvYmplY3QpXG4iCittc2dzdHIgIiIKKyJcbiIKKyJFcnJldXIgOiBTRUdWX0FDQ0VSUiAoUGVybWlzc2lvbnMgaW52YWxpZGVzIHBvdXIgbCdvYmpldCBhc3NvY2npKSIKKworIzogcGFydGVkL3VpLmM6Mzc3CisjLCBmdXp6eQorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogQSBnZW5lcmFsIFNJR1NFR1Ygc2lnbmFsIHdhcyBlbmNvdW50ZXJlZC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkVycmV1ciA6IFVuIHNpZ25hbCBTSUdTRUdWIGfpbulyYWwgZXN0IHN1cnZlbnUuIgorCisjOiBwYXJ0ZWQvdWkuYzo0MTAKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9JTlRESVYgKEludGVnZXI6IGRpdmlkZSBieSB6ZXJvKSIKK21zZ3N0ciAiIgorIlxuIgorIkVycmV1ciA6IEZQRV9JTlRESVYgKEVudGllcjogZGl2aXNpb24gcGFyIHrpcm8pIgorCisjOiBwYXJ0ZWQvdWkuYzo0MTUKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9JTlRPVkYgKEludGVnZXI6IG92ZXJmbG93KSIKK21zZ3N0ciAiIgorIlxuIgorIkVycmV1ciA6IEZQRV9JTlRPVkYgKEVudGllcjogZOlwYXNzZW1lbnQpIgorCisjOiBwYXJ0ZWQvdWkuYzo0MjAKKyMsIGZ1enp5Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxURElWIChGbG9hdDogZGl2aWRlIGJ5IHplcm8pIgorbXNnc3RyICIiCisiXG4iCisiRXJyZXVyIDogRlBFX0lOVERJViAoRmxvdHRhbnQ6IGRpdmlzaW9uIHBhciB66XJvKSIKKworIzogcGFydGVkL3VpLmM6NDI1Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxUT1ZGIChGbG9hdDogb3ZlcmZsb3cpIgorbXNnc3RyICIiCisiXG4iCisiRXJyZXVyIDogRlBFX0ZMVE9WRiAoRmxvdHRhbnQ6IGTpcGFzc2VtZW50KSIKKworIzogcGFydGVkL3VpLmM6NDMwCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxUVU5EIChGbG9hdDogdW5kZXJmbG93KSIKK21zZ3N0ciAiIgorIlxuIgorIkVycmV1ciA6IEZQRV9GTFRVTkQgKEZsb3R0YW50OiBzb3VwYXNzZW1lbnQpIgorCisjOiBwYXJ0ZWQvdWkuYzo0MzUKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRSRVMgKEZsb2F0OiBpbmV4YWN0IHJlc3VsdCkiCittc2dzdHIgIiIKKyJcbiIKKyJFcnJldXIgOiBQRV9GTFRSRVMgKEZsb3R0YW50OiBy6XN1bHRhdCBpbmV4YWN0KSIKKworIzogcGFydGVkL3VpLmM6NDQwCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxUSU5WIChGbG9hdDogaW52YWxpZCBvcGVyYXRpb24pIgorbXNnc3RyICIiCisiXG4iCisiRXJyZXVyIDogKEZsb3R0YW50OiBvcOlyYXRpb24gaW52YWxpZGUpIgorCisjOiBwYXJ0ZWQvdWkuYzo0NDUKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRTVUIgKEZsb2F0OiBzdWJzY3JpcHQgb3V0IG9mIHJhbmdlKSIKK21zZ3N0ciAiIgorIlxuIgorIkVycmV1ciA6IEZQRV9GTFRTVUIgKEZsb3R0YW50OiBpbmRpY2FnZSBob3JzIGRlIGxhIHBsYWdlKSIKKworIzogcGFydGVkL3VpLmM6NDUwCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBBIGdlbmVyYWwgU0lHRlBFIHNpZ25hbCB3YXMgZW5jb3VudGVyZWQuIgorbXNnc3RyICIiCisiXG4iCisiRXJyZXVyIDogVW4gc2lnbmFsIFNJR0ZQRSBn6W7pcmFsIGVzdCBzdXJ2ZW51LiIKKworIzogcGFydGVkL3VpLmM6NDgzCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfSUxMT1BDIChJbGxlZ2FsIE9wY29kZSkiCittc2dzdHIgIiIKKyJcbiIKKyJFcnJldXIgOiBJTExfSUxMT1BDIChPcGNvZGUgaWxs6WdhbCkiCisKKyM6IHBhcnRlZC91aS5jOjQ4OAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX0lMTE9QTiAoSWxsZWdhbCBPcGVyYW5kKSIKK21zZ3N0ciAiIgorIlxuIgorIkVycmV1ciA6IElMTF9JTExPUE4gKE9w6XJhbmRlIGlsbOlnYWwpIgorCisjOiBwYXJ0ZWQvdWkuYzo0OTMKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9JTExBRFIgKElsbGVnYWwgYWRkcmVzc2luZyBtb2RlKSIKK21zZ3N0ciAiIgorIlxuIgorIkVycmV1ciA6IElMTF9JTExBRFIgKE1vZGUgZCdhZHJlc3NhZ2UgaWxs6WdhbCkiCisKKyM6IHBhcnRlZC91aS5jOjQ5OAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX0lMTFRSUCAoSWxsZWdhbCBUcmFwKSIKK21zZ3N0ciAiIgorIlxuIgorIkVycmV1ciA6IElMTF9JTExUUlAgKETpcm91dGVtZW50IGlsbOlnYWwpIgorCisjOiBwYXJ0ZWQvdWkuYzo1MDMKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9QUlZPUEMgKFByaXZpbGVnZWQgT3Bjb2RlKSIKK21zZ3N0ciAiIgorIlxuIgorIkVycmV1ciA6IElMTF9QUlZPUEMgKE9wY29kZSBwcml2aWzpZ2npKSIKKworIzogcGFydGVkL3VpLmM6NTA4Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfUFJWUkVHIChQcml2aWxlZ2VkIFJlZ2lzdGVyKSIKK21zZ3N0ciAiIgorIlxuIgorIkVycmV1ciA6IElMTF9QUlZSRUcgKFJlZ2lzdHJlIHByaXZpbOlnaekpIgorCisjOiBwYXJ0ZWQvdWkuYzo1MTMKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9DT1BST0MgKENvcHJvY2Vzc29yIEVycm9yKSIKK21zZ3N0ciAiIgorIlxuIgorIkVycmV1ciA6IElMTF9DT1BST0MgKEVycmV1ciBkdSBjb3Byb2Nlc3NldXIpIgorCisjOiBwYXJ0ZWQvdWkuYzo1MTgKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9CQURTVEsgKEludGVybmFsIFN0YWNrIEVycm9yKSIKK21zZ3N0ciAiIgorIlxuIgorIkVycmV1ciA6IElMTF9CQURTVEsgKEVycmV1ciBkZSBwaWxlIGludGVybmUpIgorCisjOiBwYXJ0ZWQvdWkuYzo1MjMKKyMsIGZ1enp5Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBBIGdlbmVyYWwgU0lHSUxMIHNpZ25hbCB3YXMgZW5jb3VudGVyZWQuIgorbXNnc3RyICIiCisiXG4iCisiRXJyZXVyIDogVW4gc2lnbmFsIFNJR0lMTCBn6W7pcmFsIGVzdCBzdXJ2ZW51LiIKKworIzogcGFydGVkL3VpLmM6MTAyNAorbXNnaWQgIkV4cGVjdGluZyBhIHBhcnRpdGlvbiBudW1iZXIuIgorbXNnc3RyICJBdHRlbnRlIGQndW4gbnVt6XJvIGRlIHBhcnRpdGlvbi4iCisKKyM6IHBhcnRlZC91aS5jOjEwMzMKK21zZ2lkICJQYXJ0aXRpb24gZG9lc24ndCBleGlzdC4iCittc2dzdHIgIkxhIHBhcnRpdGlvbiBuJ2V4aXN0ZSBwYXMuIgorCisjOiBwYXJ0ZWQvdWkuYzoxMDUzCittc2dpZCAiRXhwZWN0aW5nIGEgZmlsZSBzeXN0ZW0gdHlwZS4iCittc2dzdHIgIkF0dGVudGUgZCd1biB0eXBlIGRlIHN5c3TobWUgZGUgZmljaGllcnMuIgorCisjOiBwYXJ0ZWQvdWkuYzoxMDYwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gZmlsZSBzeXN0ZW0gdHlwZSBcIiVzXCIuIgorbXNnc3RyICJUeXBlIGRlIHN5c3TobWUgZGUgZmljaGllcnMgaW5jb25udSBcIiVzXCIuIgorCisjOiBwYXJ0ZWQvdWkuYzoxMDgwCittc2dpZCAiRXhwZWN0aW5nIGEgZGlzayBsYWJlbCB0eXBlLiIKK21zZ3N0ciAiQXR0ZW50ZSBkJ3VuIHR5cGUgZCfpdGlxdWV0dGUgZGUgZGlzcXVlLiIKKworIzogcGFydGVkL3VpLmM6MTE3OAorbXNnaWQgIkNhbid0IGNyZWF0ZSBhbnkgbW9yZSBwYXJ0aXRpb25zLiIKK21zZ3N0ciAiTmUgcGV1dCBham91dGVyIGRlIG5vdXZlbGxlIHBhcnRpdGlvbi4iCisKKyM6IHBhcnRlZC91aS5jOjExODgKK21zZ2lkICJFeHBlY3RpbmcgYSBwYXJ0aXRpb24gdHlwZS4iCittc2dzdHIgIkF0dGVudGUgZCd1biB0eXBlIGRlIHBhcnRpdGlvbi4iCisKKyM6IHBhcnRlZC91aS5jOjEzMTUKK21zZ2lkICJvbiIKK21zZ3N0ciAib24iCisKKyM6IHBhcnRlZC91aS5jOjEzMTYKK21zZ2lkICJvZmYiCittc2dzdHIgIm9mZiIKKworIzogcGFydGVkL3VpLmM6MTQzMQorbXNnaWQgIk9QVElPTnM6IgorbXNnc3RyICJPUFRJT05TIDoiCisKKyM6IHBhcnRlZC91aS5jOjE0MzYKK21zZ2lkICJDT01NQU5EczoiCittc2dzdHIgIkNPTU1BTkRFUyA6IgorCisjOiBwYXJ0ZWQvdWkuYzoxNDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzaW5nICVzXG4iCittc2dzdHIgIk9uIHV0aWxpc2UgJXNcbiIKKworIzogcGFydGVkL3VpLmM6MTUxOQorbXNnaWQgIlRoaXMgY29tbWFuZCBkb2VzIG5vdCBtYWtlIHNlbnNlIGluIG5vbi1pbnRlcmFjdGl2ZSBtb2RlLlxuIgorbXNnc3RyICIiCisKKyN+IG1zZ2lkICJ3aGVyZSBuZWNlc3NhcnksIHByb21wdHMgZm9yIHVzZXIgaW50ZXJ2ZW50aW9uIgorI34gbXNnc3RyICJsb3JzcXVlIG7pY2Vzc2FpcmUsIGRlbWFuZGUgbCdpbnRlcnZlbnRpb24gZGUgbCd1dGlsaXNhdGV1ciIKKworI34gbXNnaWQgIkdOVSBQYXJ0ZWQgVmVyc2lvbiBpbmZvcm1hdGlvbjpcbiIKKyN+IG1zZ3N0ciAiSW5mb3JtYXRpb24gc3VyIGxhIHZlcnNpb24gZGUgR05VIFBhcnRlZDpcbiIKKworIywgZnV6enkKKyN+IG1zZ2lkICIiCisjfiAiV2l0aG91dCBhcmd1bWVudHMsIHByaW50IGRpc3BsYXlzIHRoZSBlbnRpcmUgcGFydGl0aW9uIHRhYmxlLiBXaXRoICIKKyN+ICInZnJlZSdcbiIKKyN+ICJhcmd1bWVudCwgaW5mb3JtYXRpb24gYWJvdXQgZnJlZSBzcGFjZSB3aWxsIGJlIGRpc3BsYXllZCBvdGhlcndpc2UgaWYgYVxuIgorI34gInBhcnRpdGlvbiBudW1iZXIgaXMgZ2l2ZW4sIHRoZW4gbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBpcyBkaXNwbGF5ZWRcbiIKKyN+ICJhYm91dCB0aGF0IHBhcnRpdGlvbi4gSWYgdGhlICdhbGwnIGFyZ3VtZW50IGlzIHBhc3NlZCBpbnN0ZWFkLCBwYXJ0aXRpb25cbiIKKyN+ICJpbmZvcm1hdGlvbiBmb3IgYWxsIGRldmljZXMgd2lsbCBiZSBkaXNwbGF5ZWQuXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJTYW5zIGFyZ3VtZW50LCBwcmludCBhZmZpY2hlIGxhIHRhYmxlIGNvbXBs6HRlIGRlIHBhcnRpdGlvbnMuIEF2ZWMgIgorI34gIidmcmVlJ1xuIgorI34gImNvbW1lIGFyZ3VtZW50LCBsJ2luZm9tYXRpb24gc3VyIGwnZXNwYWNlIGxpYnJlIHNlcmEgYWZmaWNo6WUsIHNpbm9uLCBzaSAiCisjfiAidW5cbiIKKyN+ICIgbnVt6XJvIGRlIHBhcnRpdGlvbiBlc3QgZm91cm5pIGFsb3JzIGRlcyBpbmZvcm1hdGlvbnMgc3VwcGzpbWVudGFpcmVzXG4iCisjfiAiZOl0YWlsbOllcyBzb250IGFmZmljaOllcyDgIHByb3BvcyBkZSBjZXR0ZSBwYXJ0aXRpb24uIFNpIGwnYXJndW1lbnQgIgorI34gIidhbGwnXG4iCisjfiAiZXN0IGZvdXJuaXQsIGwnaW5mb3JtYXRpb24gc3VyIHRvdXMgbGVzIHDpcmlwaOlyaXF1ZXMgc2VyYSBhZmZpY2jpZS4iCisKKyN+IG1zZ2lkICJBdHRlbXB0IHRvIHJlYWQgc2VjdG9ycyAlbGQtJWxkIG91dHNpZGUgb2YgcGFydGl0aW9uIG9uICVzLiIKKyN+IG1zZ3N0ciAiIgorI34gIlRlbnRhdGl2ZSBkZSBsZWN0dXJlIGRlcyBzZWN0ZXVycyAlbGQtJWxkIGVuIGRlaG9ycyBkZSBsYSBwYXJ0aXRpb24gc3VyICUiCisjfiAicy4iCisKKyMsIGZ1enp5CisjfiBtc2dpZCAiIgorI34gIlRoZSBzZWN0b3Igc2l6ZSBvbiAlcyBpcyAlZCBieXRlcy4gIFBhcnRlZCBpcyBrbm93biBub3QgdG8gd29yayBwcm9wZXJseSAiCisjfiAid2l0aCBkcml2ZXMgd2l0aCBzZWN0b3Igc2l6ZXMgb3RoZXIgdGhhbiAlZCBieXRlcy4iCisjfiBtc2dzdHIgIiIKKyN+ICJMYSB0YWlsbGUgZGUgc2VjdGV1cnMgc3VyICVzIGVzdCBkZSAlZCBvY3RldHMuIFBhcnRlZCBlc3QgcmVjb25udSBwb3VyIG5lICIKKyN+ICJwYXMgZm9uY3Rpb25uZXIgY29ycmVjdGVtZW50IGF2ZWMgZGVzIHDpcmlwaOlyaXF1ZXMgZG9udCBsYSB0YWlsbGUgZGVzICIKKyN+ICJzZWN0ZXVycyBlc3QgZGlmZulyZW50ZSBkZSAlZCBvY3RldHMuIgorCisjfiBtc2dpZCAiSURFIgorI34gbXNnc3RyICJJREUiCisKKyMsIGZ1enp5CisjfiBtc2dpZCAiIgorI34gIlRoaXMgZXh0MiBmaWxlIHN5c3RlbSBoYXMgYSByYXRoZXIgc3RyYW5nZSBsYXlvdXQhICBQYXJ0ZWQgY2FuJ3QgcmVzaXplICIKKyN+ICJ0aGlzICh5ZXQpLiIKKyN+IG1zZ3N0ciAiIgorI34gIkNlIHN5c3TobWUgZGUgZmljaGllcnMgZXh0MiBhIHVuZSBzdHJ1Y3R1cmUg6XRyYW5nZSAhIFBhcnRlZCBuZSBwZXV0IChwYXMgIgorI34gImVuY29yZSlsZSByZWRpbWVuc2lvbm5lci4iCisKKyN+IG1zZ2lkICIiCisjfiAiWW91IGhhdmUgYW4gSEZTKyBmaWxlIHN5c3RlbSB0aGF0IGhhcyBhIGZlYXR1cmUgdGhhdCBJIGhhdmVuJ3Qgc2VlbiB1c2VkICIKKyN+ICJhbnl3aGVyZS4gIFBhcnRlZCBjYW4gdGhlb3JldGljYWxseSBoYW5kbGUgaXQsIGJ1dCB0aGUgY29ycmVzcG9uZGluZyBjb2RlICIKKyN+ICJoYXMgbmV2ZXIgYmVlbiB0ZXN0ZWQsIHNvIHRoaXMgbWlnaHQgYmUgcmlza3kuICBQbGVhc2UgZW1haWwgbWUgc28gSSBjYW4gIgorI34gInNlZSBob3cgaXQgd29ya3MhICA8eHh4QHl5eS56ej4iCisjfiBtc2dzdHIgIiIKKyN+ICJWb3VzIGF2ZXogdW4gc3lzdOhtZSBkZSBmaWNoaWVycyBIRlMrIHF1aSBhIHVuZSBvcHRpb24gcXVlIGplIG4nYWkgamFtYWlzICIKKyN+ICJ2dWUgYWlsbGV1cnMuIFBhcnRlZCBwZXV0IHRo6W9yaXF1ZW1lbnQgZ+lyZXIgY2VsYSwgbWFpcyBsZSBjb2RlICIKKyN+ICJjb3JyZXNwb25kYW50IG4nYSBqYW1haXMg6XTpIHRlc3TpLCBkb25jIGNlbGEgcGV1dCDqdHJlIHJpc3F16S4gTWVyY2kgZGUgIgorI34gIm1lIG1haWxlciBwb3VyIHF1ZSBqZSBwdWlzc2Ugdm9pciBjb21tZW50IGNlbGEgZm9uY3Rpb25uZSAhIDx4eHhAeXl5Lnp6PiIKKworI34gbXNnaWQgIiIKKyN+ICJUaGUgZXh0ZW50cyBvdmVyZmxvdyBmaWxlIHNob3VsZCBub3QgY29udGFpbiBpdHMgb3duIGV4dGVudHMuICBZb3Ugc2hvdWxkICIKKyN+ICJjaGVjayB0aGUgZmlsZSBzeXN0ZW0uIgorI34gbXNnc3RyICIiCisjfiAiTGUgZmljaGllciBkZXMgem9uZXMgYWRkaXRpb25uZWxsZXMgbmUgZGV2cmFpdCBwYXMgY29udGVuaXIgc2EgcHJvcHJlICIKKyN+ICJ6b25lLiBWb3VzIGRldnJpZXogdulyaWZpZXIgbGUgc3lzdOhtZSBkZSBmaWNoaWVycy4iCisKKyMsIGZ1enp5CisjfiBtc2dpZCAiRGlzayBnZW9tZXRyeSBmb3IgJXM6ICVzIC0gJXNcbiIKKyN+IG1zZ3N0ciAiR+lvbel0cmllIGR1IGRpc3F1ZSBwb3VyICVzIDogJXMgLSAlc1xuIgorCisjfiBtc2dpZCAiRGlzayBsYWJlbCB0eXBlOiAlc1xuIgorI34gbXNnc3RyICJUeXBlIGQn6XRpcXVldHRlIGRlIGRpc3F1ZSA6ICVzXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiXG4iCisjfiAiXG4iCisjfiAiWW91IGZvdW5kIGEgYnVnIGluIEdOVSBQYXJ0ZWQuXG4iCisjfiAiVGhpcyBtYXkgaGF2ZSBiZWVuIGZpeGVkIGluIHRoZSBsYXN0IHZlcnNpb24gb2YgR05VIFBhcnRlZCB0aGF0IHlvdSBjYW4gIgorI34gImZpbmQgYXQ6XG4iCisjfiAiXHRodHRwOi8vZnRwLmdudS5vcmcvZ251L3BhcnRlZC9cbiIKKyN+ICJJZiB0aGlzIGhhcyBub3QgYmVlbiBmaXhlZCBvciBpZiB5b3UgZG9uJ3Qga25vdyBob3cgdG8gY2hlY2ssIHBsZWFzZSAiCisjfiAiZW1haWw6XG4iCisjfiAiXHRidWctcGFydGVkQGdudS5vcmdcbiIKKyN+ICJvciAocHJlZmVyYWJseSkgZmlsZSBhIGJ1ZyByZXBvcnQgYXQ6XG4iCisjfiAiXHRodHRwOi8vcGFydGVkLmFsaW90aC5kZWJpYW4ub3JnL2J1Z3MvXG4iCisjfiAiWW91ciByZXBvcnQgc2hvdWxkIGNvbnRhaW4gdGhlIHZlcnNpb24gb2YgdGhpcyByZWxlYXNlICglcykgYWxvbmcgd2l0aCAiCisjfiAidGhlXG4iCisjfiAiZm9sbG93aW5nIG1lc3NhZ2UgYW5kIHByZWZlcmFibHkgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB5b3VyICIKKyN+ICJzZXR1cC5cbiIKKyN+ICJSZWZlciB0byB0aGUgd2ViIHNpdGUgb2YgcGFydGVkXG4iCisjfiAiXHRodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvcGFydGVkL3BhcnRlZC5odG1sXG4iCisjfiAiZm9yIG1vcmUgaW5mb3JtYXRpb25zIG9mIHdoYXQgY291bGQgYmUgdXNlZnVsIGZvciBidWcgc3VibWl0dGluZyFcbiIKKyN+IG1zZ3N0ciAiIgorI34gIlxuIgorI34gIlxuIgorI34gIlZvdXMgYXZleiB0cm91dukgdW4gYnVnIGRhbnMgR05VIFBhcnRlZC5cbiIKKyN+ICJJbCBlc3QgcG9zc2libGUgcXUnaWwgYWl0IOl06SBjb3JyaWfpIGRhbnMgbGEgZGVybmnocmUgdmVyc2lvbiBkZSBHTlUgIgorI34gIlBhcnRlZCBxdWUgdm91cyBwb3V2ZXogdHJvdXZlciBzdXIgOlxuIgorI34gIlx0aHR0cDovL2Z0cC5nbnUub3JnL2dudS9wYXJ0ZWQvXG4iCisjfiAiUydpbCBuJ2EgcGFzIOl06SBjb3JyaWfpIG91IHNpIHZvdXMgbmUgc2F2ZXogcGFzIGNvbW1lbnQgdulyaWZpZXIsICIKKyN+ICJlbnZveWV6IHVuIGVtYWlsIDpcbiIKKyN+ICJcdGJ1Zy1wYXJ0ZWRAZ251Lm9yZ1xuIgorI34gIm91IChkZSBwculm6XJlbmNlKSByZW1wbGlzc2V6IHVuIHJhcHBvcnQgZGUgYnVnIOAgOlxuIgorI34gIlx0aHR0cDovL3BhcnRlZC5hbGlvdGguZGViaWFuLm9yZy9idWdzL1xuIgorI34gIlZvdHJlIHJhcHBvcnQgZGUgYnVnIGRvaXQgY29udGVuaXIgbGEgdmVyc2lvbiBkZSBjZSBwcm9ncmFtbWUgKCVzKSAiCisjfiAiYWNjb21wYWdu6SBkdSBtZXNzYWdlIHN1aXZhbnQgZXQgZGUgcHLpZulyZW5jZSBkJ2luZm9ybWF0aW9ucyAiCisjfiAic3VwcGzpbWVudGFpcmVzIHN1ciB2b3RyZSBjb25maWd1cmF0aW9uLlxuIgorI34gIlJlcG9ydGV6IHZvdXMgYXUgc2l0ZSB3ZWIgZGUgUGFydGVkXG4iCisjfiAiXHRodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvcGFydGVkL3BhcnRlZC5odG1sXG4iCisjfiAicG91ciBkJ2F1dHJlcyBpbmZvcm1hdGlvbnMgcXVpIHBvdXJyYWllbnQg6nRyZSB1dGlsZXMgcG91ciBsZSByYXBwb3J0IGRlICIKKyN+ICJidWcgISIKKworI34gbXNnaWQgIlNDU0kiCisjfiBtc2dzdHIgIlNDU0kiCisKKyN+IG1zZ2lkICJEZXZpY2UgJXMgaXMgbmVpdGhlciBhIFNDU0kgbm9yIElERSBkcml2ZS4iCisjfiBtc2dzdHIgIkxlIHDpcmlwaOlyaXF1ZSAlcyBuJ2VzdCBuaSB1biBkaXNxdWUgU0NTSSBuaSB1biBkaXNxdWUgSURFLiIKKworI34gbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyBhbiBpbnZhbGlkIHNpZ25hdHVyZSBmb3IgYSBGQVQgZmlsZSBzeXN0ZW1zLiIKKyN+IG1zZ3N0ciAiIgorI34gIkxlIHN5c3TobWUgZGUgZmljaGllcnMgYSB1bmUgc2lnbmF0dXJlIGludmFsaWRlIHBvdXIgZGVzIHN5c3TobWVzIGRlICIKKyN+ICJmaWNoaWVycyBGQVQuIgorCisjfiBtc2dpZCAiIgorI34gIlNUQVJUIGFuZCBFTkQgYXJlIGluIG1lZ2FieXRlcy4gIE5lZ2F0aXZlIHZhbHVlcyBjb3VudCBmcm9tIHRoZSBlbmQgb2YgIgorI34gInRoZSBkaXNrLlxuIgorI34gbXNnc3RyICIiCisjfiAiRMlCVVQgZXQgRklOIHNvbnQgZW4gbelnYW9jdGV0cy4gTGVzIHZhbGV1cnMgbulnYXRpdmVzIHNlIGTpY29tcHRlbnQgIgorI34gImRlcHVpcyBsYSBmaW4gZHUgZGlzcXVlLlxuIgorCisjfiBtc2dpZCAiIgorI34gIllvdSByZXF1ZXN0ZWQgdG8gY3JlYXRlIGEgcGFydGl0aW9uIGF0ICUuM2YtJS4zZk1iLiBUaGUgY2xvc2VzdCBQYXJ0ZWQgIgorI34gImNhbiBtYW5hZ2UgaXMgJS4zZi0lLjNmTWIuIgorI34gbXNnc3RyICIiCisjfiAiVm91cyBhdmV6IGRlbWFuZOkgZGUgY3LpZXIgdW5lIHBhcnRpdGlvbiDgICUuM2YtJS4zZk1vLiBMZSBwbHVzIHBy6HMgcXVlICIKKyN+ICJQYXJ0ZWQgcGV1dCB0cmFpdGVyIGVzdCAlLjNmLSUuM2ZNby4iCisKKyN+IG1zZ2lkICIiCisjfiAiWW91IHJlcXVlc3RlZCB0byBtb3ZlIHRoZSBwYXJ0aXRpb24gdG8gJS4zZi0lLjNmTWIuIFRoZSBjbG9zZXN0IFBhcnRlZCAiCisjfiAiY2FuIG1hbmFnZSBpcyAlLjNmLSUuM2ZNYi4iCisjfiBtc2dzdHIgIiIKKyN+ICJWb3VzIGF2ZXogZGVtYW5k6SBkZSBk6XBsYWNlciB1bmUgcGFydGl0aW9uIOAgJS4zZi0lLjNmTW8uIExlIHBsdXMgcHLocyAiCisjfiAicXVlIFBhcnRlZCBwZXV0IHRyYWl0ZXIgZXN0ICUuM2YtJS4zZk1vLiIKKworI34gbXNnaWQgIk1pbm9yICAgIFN0YXJ0ICAgICAgIEVuZCAgICAgIgorI34gbXNnc3RyICJNaW5ldXJlICAgROlwYXJ0ICAgICAgRmluICAgICAiCisKKyN+IG1zZ2lkICJUeXBlICAgICAgIgorI34gbXNnc3RyICJUeXBlICAgICAgIgorCisjfiBtc2dpZCAiRmlsZXN5c3RlbSAgIgorI34gbXNnc3RyICJTeXMuZmljaGllcnMiCisKKyN+IG1zZ2lkICJOYW1lICAgICAgICAgICAgICAgICAgIgorI34gbXNnc3RyICJOb20gICAgICAgICAgICAgICAgICAgIgorCisjfiBtc2dpZCAiIgorI34gIllvdSByZXF1ZXN0ZWQgdG8gcmVzaXplIHRoZSBwYXJ0aXRpb24gdG8gJS4zZi0lLjNmTWIuIFRoZSBjbG9zZXN0IFBhcnRlZCAiCisjfiAiY2FuIG1hbmFnZSBpcyAlLjNmLSUuM2ZNYi4iCisjfiBtc2dzdHIgIiIKKyN+ICJWb3VzIGF2ZXogZGVtYW5k6SBkZSBtb2RpZmllciBsYSB0YWlsbGUgZGUgbGEgcGFydGl0aW9uIOAgJS4zZi0lLjNmTW8uIExlICIKKyN+ICJwbHVzIHBy6HMgcXVlIFBhcnRlZCBwZXV0IHRyYWl0ZXIgZXN0ICUuM2YtJS4zZk1vLiIKKworI34gbXNnaWQgIiIKKyN+ICJZb3UgZm91bmQgYSBidWcgaW4gR05VIFBhcnRlZC4gIFBsZWFzZSBlbWFpbCBhIGJ1ZyByZXBvcnQgdG8gYnVnLSIKKyN+ICJwYXJ0ZWRAZ251Lm9yZyBjb250YWluaW5nIHRoZSB2ZXJzaW9uICglcyksIGFuZCB0aGUgZm9sbG93aW5nIG1lc3NhZ2U6XG4iCisjfiBtc2dzdHIgIiIKKyN+ICJWb3VzIGF2ZXogdHJvdXbpIHVuZSBhbm9tYWxpZSBkYW5zIEdOVSBQYXJ0ZWQuIFNWUCByYXBwb3J0ZXogY2VsbGUtY2kg4CAiCisjfiAiYnVnLXBhcnRlZEBnbnUub3JnIGVuIGRvbm5hbnQgbGEgdmVyc2lvbiAoJXMpIGV0IGxlIG1lc3NhZ2UgcXVpIHN1aXQ6XG4iCisKKyN+IG1zZ2lkICJFcnJvciByZWFkaW5nICVzICglcykgdG8gZGV0ZXJtaW5lIGlmIHBhcnRpdGlvbiBpcyBtb3VudGVkLiIKKyN+IG1zZ3N0ciAiIgorI34gIkVycmV1ciBkZSBsZWN0dXJlICVzICglcykgYWZpbiBkZSBk6XRlcm1pbmVyIHNpIGxhIHBhcnRpdGlvbiBlc3QgbW9udOllLiIKKworI34gbXNnaWQgIiIKKyN+ICJVbmFibGUgdG8gZGV0ZXJtaW5lIGlmIHBhcnRpdGlvbnMgYXJlIG1vdW50ZWQgdmlhIC9wcm9jL21vdW50cyBvciAvZXRjLyIKKyN+ICJtdGFiLiAgTWFrZSBzdXJlIHlvdSBkb24ndCBhdHRlbXB0IHRvIHJlc2l6ZSBvciBtb2RpZnkgbW91bnRlZCBmaWxlICIKKyN+ICJzeXN0ZW1zLiAgKEV2ZW4gcmVhZC1vbmx5IG1vdW50ZWQpIgorI34gbXNnc3RyICIiCisjfiAiSW5jYXBhYmxlIGRlIGTpdGVybWluZXIgc2kgZGVzIHBhcnRpdGlvbnMgc29udCBtb2506WVzIHZpYSAvcHJvYy9tb3VudHMgIgorI34gIm91IC9ldGMvbXRhYi4gIEFzc3VyZXotdm91cyBkZSBuZSBwYXMgdGVudGVyIGRlIG1vZGlmaWVyIGxhIHRhaWxsZSBvdSBkZSAiCisjfiAibW9kaWZpZXIgbGUgc3lzdOhtZSBkZSBmaWNoaWVycyAobeptZSBtb2506XMgZW4gbGVjdHVyZSBzZXVsZW1lbnQpIgorCisjfiBtc2dpZCAiIgorI34gIlBhcnRpdGlvbiAlcyBpcyBiZWluZyB1c2VkLiAgTW9kaWZ5aW5nIGl0IHdoaWxlIGl0IGlzIGluIHVzZSBjb3VsZCBjYXVzZSAiCisjfiAic2V2ZXJlIGNvcnJ1cHRpb24uIgorI34gbXNnc3RyICIiCisjfiAiTGEgcGFydGl0aW9uICVzIGVzdCB1dGlsaXPpZS4gTGEgbW9kaWZpZXIgYWxvcnMgcXUnZWxsZSBlc3QgZW4gdXNhZ2UgcGV1dCAiCisjfiAicHJvdm9xdWVyIHVuIHByb2Js6G1lIHPpduhyZSBkZSBjb3JydXB0aW9uLiIKKworI34gbXNnaWQgIkNvdWxkIG5vdCByZWFkIGdlb21ldHJ5IG9mICVzIC0gJXMuIgorI34gbXNnc3RyICJOZSBwZXV0IGxpcmUgbGEgZ+lvbel0cmllIGRlICVzIC0gJXMuIgorCisjfiBtc2dpZCAiRGV2aWNlICVzIGhhcyBkb2RnZXkgZ2VvbWV0cnkuIgorI34gbXNnc3RyICJMZSBw6XJpcGjpcmlxdWUgJXMg4CB1bmUgZ+lvbel0cmllIGRvdXRldXNlLiIKKworI34gbXNnaWQgIiIKKyN+ICJUaGUgcGFydGl0aW9uIHRhYmxlIG9uICVzIGlzIGluY29uc2lzdGVudC4gIFRoZXJlIGFyZSBtYW55IHJlYXNvbnMgd2h5ICIKKyN+ICJ0aGlzIG1pZ2h0IGJlIHRoZSBjYXNlLiAgSG93ZXZlciwgdGhlIG1vc3QgbGlrZWx5IHJlYXNvbiBpcyB0aGF0IExpbnV4ICIKKyN+ICJkZXRlY3RlZCB0aGUgQklPUyBnZW9tZXRyeSBmb3IgJXMgaW5jb3JyZWN0bHkuICBHTlUgUGFydGVkIHN1c3BlY3RzIHRoZSAiCisjfiAicmVhbCBnZW9tZXRyeSBzaG91bGQgYmUgJWQvJWQvJWQgKG5vdCAlZC8lZC8lZCkuICBZb3Ugc2hvdWxkIGNoZWNrIHdpdGggIgorI34gInlvdXIgQklPUyBmaXJzdCwgYXMgdGhpcyBtYXkgbm90IGJlIGNvcnJlY3QuICBZb3UgY2FuIGluZm9ybSBMaW51eCBieSAiCisjfiAiYWRkaW5nIHRoZSBwYXJhbWV0ZXIgJXM9JWQsJWQsJWQgdG8gdGhlIGNvbW1hbmQgbGluZS4gIFNlZSB0aGUgTElMTyBvciAiCisjfiAiR1JVQiBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLiAgSWYgeW91IHRoaW5rIFBhcnRlZCdzIHN1Z2dlc3RlZCAiCisjfiAiZ2VvbWV0cnkgaXMgY29ycmVjdCwgeW91IG1heSBzZWxlY3QgSWdub3JlIHRvIGNvbnRpbnVlIChhbmQgZml4IExpbnV4ICIKKyN+ICJsYXRlcikuICBPdGhlcndpc2UsIHNlbGVjdCBDYW5jZWwgKGFuZCBmaXggTGludXggYW5kL29yIHRoZSBCSU9TIG5vdykuIgorI34gbXNnc3RyICIiCisjfiAiTGEgdGFibGUgZGUgcGFydGl0aW9uIHN1ciAlcyBlc3QgaW5jb25zaXN0YW50ZS4gSWwgeSBhIHBsdXNpZXVycyByYWlzb25zICIKKyN+ICJwb3V2YW50IGV4cGxpcXVlciBjZSBjYXMuIENlcGVuZGFudCwgbGEgcmFpc29uIGxhIHBsdXMgcHJvYmFibGUgZXN0IHF1ZSAiCisjfiAiTGludXggYSBk6XRlY3TpIGluY29ycmVjdGVtZW50IGxhIGfpb23pdHJpZSBkdSBCSU9TIHBvdXIgJXMuIEdOVSBwYXJ0ZWQgIgorI34gInN1c3BlY3RlIHF1ZSBsYSB2cmFpZSBn6W9t6XRyaWUgZGV2cmFpdCDqdHJlICVkLyVkLyVkIChub3QgJWQvJWQvJWQpLiAiCisjfiAiVm91cyBkZXZyaWV6IHbpcmlmaWVyIGNlbGxlIGR1IEJJT1MgZCdhYm9yZCBwdWlzcXVlIGNlbGxlLWNpIHBldXQgbmUgcGFzICIKKyN+ICLqdHJlIGNvcnJlY3RlLiBWb3VzIHBvdXZleiBpbmZvcm1lciBMaW51eCBlbiBmb3Vybmlzc2FudCBsZSBwYXJhbeh0cmUgJXM9JSIKKyN+ICJkLCVkLCVkIHN1ciBsYSBsaWduZSBkZSBjb21tYW5kZS4gQ29uc3VsdGV6IGxhIGRvY3VtZW50YXRpb24gZGUgTElMTyBvdSAiCisjfiAiZGUgR1JVQiBwb3VyIHBsdXMgZGUgZOl0YWlscy4gU2kgdm91cyBwZW5zZXogcXVlIGxhIGfpb23pdHJpZSBzdWdn6XLpZSAiCisjfiAicGFyIFBhcnRlZCBlc3QgY29ycmVjdGUsIHZvdXMgcG91dmV6IHPpbGVjdGlvbm5lciCrIGlnbm9yZSC7IHBvdXIgIgorI34gInBvdXJzdWl2cmUgKGV0IGNvcnJpZ2VyIHBsdXMgdGFyZCBhdmVjIExpbnV4KS4gQXV0cmVtZW50LCBz6WxlY3Rpb25uZXIgqyAiCisjfiAiQ2FuY2VsILsgKGV0IGNvcnJpZ2VyIExpbnV4IGV0L291IGxlIEJJT1MgbWFpbnRlbmFudCkuIgorCisjfiBtc2dpZCAiIgorI34gIlRoZSBwYXJ0aXRpb24gdGFibGUgb24gJXMgaXMgaW5jb25zaXN0ZW50LiAgVGhlcmUgYXJlIG1hbnkgcmVhc29ucyB3aHkgIgorI34gInRoaXMgbWlnaHQgYmUgdGhlIGNhc2UuICBPZnRlbiwgdGhlIHJlYXNvbiBpcyB0aGF0IExpbnV4IGRldGVjdGVkIHRoZSAiCisjfiAiQklPUyBnZW9tZXRyeSBpbmNvcnJlY3RseS4gIEhvd2V2ZXIsIHRoaXMgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHRoZSBjYXNlICIKKyN+ICJoZXJlLiAgSXQgaXMgc2FmZSB0byBpZ25vcmUsYnV0IGlnbm9yaW5nIG1heSBjYXVzZSAoZml4YWJsZSkgcHJvYmxlbXMgIgorI34gIndpdGggc29tZSBib290IGxvYWRlcnMsIGFuZCBtYXkgY2F1c2UgcHJvYmxlbXMgd2l0aCBGQVQgZmlsZSBzeXN0ZW1zLiAgIgorI34gIlVzaW5nIExCQSBpcyByZWNvbW1lbmRlZC4iCisjfiBtc2dzdHIgIiIKKyN+ICJMYSB0YWJsZSBkZSBwYXJ0aXRpb24gc3VyICVzIGVzdCBpbmNvbnNpc3RhbnRlLiAgSWwgZXhpc3RlIHBsdXNpZXVycyAiCisjfiAicmFpc29ucyBleHBsaXF1YW50IGNlIGNhcy4gIFNvdXZlbnQgbGEgcmFpc29uIGVzdCBxdWUgTGludXggYSBk6XRlY3TpIHVuZSAiCisjfiAiZ+lvbel0cmllIGR1IEJJT1MgaW5jb3JyZWN0ZS4gQ2VwZW5kYW50IGNlbGEgbmUgc2VtYmxlIHBhcyDqdHJlIGxlIGNhcyAiCisjfiAiaWNpLiAgSWwgZXN0IHBydWRlbnQgZGUgbCdpZ25vcmVyIG1haXMgbCdpZ25vcmVyIHBvdXJyYWl0IGNhdXNlciBjZXJ0YWlucyAiCisjfiAicHJvYmzobWVzIChjb3JyaWdlYWJsZXMpIGF2ZWMgY2VydGFpbnMgY2hhcmdldXJzIGQnYW1vcmNlIGV0IGxlcyBzeXN06G1lcyAiCisjfiAiZGUgZmljaGllcnMgRkFULiBMJ3V0aWxpc2F0aW9uIGRlIExCQSBlc3QgcmVjb21tYW5k6WUuIgorCisjfiBtc2dpZCAiIgorI34gIlVuYWJsZSB0byBhbGlnbiBwYXJ0aXRpb24gcHJvcGVybHkuICBUaGlzIHByb2JhYmx5IG1lYW5zIHRoYXQgYW5vdGhlciAiCisjfiAicGFydGl0aW9uaW5nIHRvb2wgZ2VuZXJhdGVkIGFuIGluY29ycmVjdCBwYXJ0aXRpb24gdGFibGUsIGJlY2F1c2UgaXQgIgorI34gImRpZG4ndCBoYXZlIHRoZSBjb3JyZWN0IEJJT1MgZ2VvbWV0cnkuICBJdCBpcyBzYWZlIHRvIGlnbm9yZSxidXQgaWdub3JpbmcgIgorI34gIm1heSBjYXVzZSAoZml4YWJsZSkgcHJvYmxlbXMgd2l0aCBzb21lIGJvb3QgbG9hZGVycy4iCisjfiBtc2dzdHIgIiIKKyN+ICJJbmNhcGFibGUgZCdhbGlnbmVyIGxhIHBhcnRpdGlvbiBjb3JyZWN0ZW1lbnQuIENlY2kgaW5kaXF1ZSBwcm9iYWJsZW1lbnQgIgorI34gInF1J3VuIGF1dHJlIG91dGlsIGRlIHBhcnRpb25uYWdlIGEgZmFicmlxdekgdW5lIHRhYmxlIGRlIHBhcnRpdGlvbiAiCisjfiAiaW5jb3JyZWN0ZSwgcGFyY2UgcXUnaWwgbid1dGlsaXNhaXQgcGFzIGxhIGJvbm5lIGfpb23pdHJpZSBkdSBCSU9TLiBJbCAiCisjfiAiZXN0IHBydWRlbnQgZGUgbCdpZ25vcmVyIG1haXMgbCdpZ25vcmVyIHBldXQgY2F1c2VyIGRlcyBwcm9ibOhtZXMgIgorI34gIihjb3JyaWdlYWJsZXMpIGF2ZWMgY2VydGFpbnMgY2hhcmdldXJzIGQnYW1vcmNlLiIKKworI34gbXNnaWQgIiIKKyN+ICIgIFlvdSBoYXZlIFdpbmRvd3MgRkFUIHBhcnRpdGlvbihzKSB0aGF0IGFyZSBub3QgdXNpbmcgTEJBLiAgSWYgeW91ciBCSU9TICIKKyN+ICJzdXBwb3J0cyBMQkEsIHRoZW4geW91IHNob3VsZCBzd2l0Y2ggdG8gTEJBIGJ5IHNldHRpbmcgdGhlIExCQSBmbGFnIG9uICIKKyN+ICJhbGwgRkFUIHBhcnRpdGlvbnMuICBPdGhlcndpc2UsIG1ha2Ugc3VyZSB0aGUgb3BlcmF0aW5nIHN5c3RlbSBhbmQgdGhlICIKKyN+ICJCSU9TIGhhdmUgdGhlIHNhbWUgZ2VvbWV0cnkgYmVmb3JlIHJlc2l6aW5nIGFueSBGQVQgcGFydGl0aW9ucy4iCisjfiBtc2dzdHIgIiIKKyN+ICIgIFZvdXMgYXZleiBkZXMgcGFydGl0aW9ucyBGQVQgV2luZG93cyBxdWkgbid1dGlsaXNlbnQgcGFzIExCQS4gIFNpIGxlICIKKyN+ICJCSU9TIHN1cHBvcnRlIExCQSBhbG9ycyB2b3VzIGRldnJpZXogc+lsZWN0aW9ubmVyIExCQSBlbiBsJ2FjdGl2YW50IHBvdXIgIgorI34gInRvdXRlcyBsZXMgcGFydGl0aW9ucyBGQVQuICBBdXRyZW1lbnQsIGFzc3VyZXotdm91cyBxdWUgbGUgc3lzdOhtZSAiCisjfiAiZCdleHBsb2l0YXRpb24gZXQgbGUgQklPUyBvbnQgbGEgbeptZSBn6W9t6XRyaWUgYXZhbnQgZGUgbW9kaWZpZXIgbGEgIgorI34gInRhaWxsZSBkZSBuJ2ltcG9ydGUgcXVlbGxlIHBhcnRpdGlvbiBGQVQuIgorCisjfiBtc2dpZCAiIgorI34gIlRoZSBvcGVyYXRpbmcgc3lzdGVtIHRoaW5rcyB0aGUgZ2VvbWV0cnkgb24gJXMgaXMgJWQvJWQvJWQuICBUaGVyZWZvcmUsICIKKyN+ICJjeWxpbmRlciAxMDI0IGVuZHMgYXQgJS4zZk0uJXMiCisjfiBtc2dzdHIgIiIKKyN+ICJMZSBzeXN06G1lIGQnZXhwbG9pdGF0aW9uIGNyb2l0IHF1ZSBsZSBn6W9t6XRyaWUgc3VyICVzIGVzdCAlZC8lZC8lZC4gICIKKyN+ICJQYXIgY29uc+lxdWVudCBsZSBjeWxpbmRyZSAxMDI0IHNlIHRlcm1pbmUg4CAlLjNmTS4lcyIKKworI34gbXNnaWQgIlRoZSBvcGVyYXRpbmcgc3lzdGVtIHRoaW5rcyB0aGUgZ2VvbWV0cnkgb24gJXMgaXMgJWQvJWQvJWQuJXMiCisjfiBtc2dzdHIgIiIKKyN+ICJMZSBzeXN06G1lIGQnZXhwbG9pdGF0aW9uIGNyb2l0IHF1ZSBsZSBn6W9t6XRyaWUgc3VyICVzIGVzdCAlZC8lZC8lZC4lcyIKKworI34gbXNnaWQgIlNUQVJUIGFuZCBFTkQgYXJlIGluIG1lZ2FieXRlc1xuIgorI34gbXNnc3RyICJEyUJVVCBldCBGSU4gc29udCBlbiBt6Wdhb2N0ZXRzXG4iCisKKyN+IG1zZ2lkICJQYXJ0aXRpb24gJXMgaXMgYmVpbmcgdXNlZC4iCisjfiBtc2dzdHIgIkxhIHBhcnRpdGlvbiAlcyBlc3QgZOlq4CB1dGlsaXPpZS4iCisKKyN+IG1zZ2lkICIiCisjfiAiVGhlIEZBVHMgYXJlbid0IGJpZyBlbm91Z2ggdG8gZGVzY3JpYmUgYWxsIGNsdXN0ZXJzISAgRWFjaCBGQVQgaXMgJWQgIgorI34gInNlY3RvcnMuICBUaGVyZSBhcmUgJWQgY2x1c3RlcnMsIHdoaWNoIHdvdWxkIHJlcXVpcmUgZWFjaCBGQVQgdG8gYmUgJWQgIgorI34gInNlY3RvcnMuICBUaGlzIGlzIFJFQUxMWSB3ZWlyZC4gIFlvdSBtaWdodCB3YW50IHRvIHdyaXRlIHVzIGFuIGVtYWlsOiBidWctIgorI34gInBhcnRlZEBnbnUub3JnIgorI34gbXNnc3RyICIiCisjfiAiTGVzIEZBVCBuZSBzb250IHBhcyBhc3NleiBncmFuZGVzIHBvdXIgZOljcmlyZSB0b3VzIGxlcyBjbHVzdGVycyEgQ2hhcXVlICIKKyN+ICJGQVQgYSAlZCBzZWN0ZXVycy4gSWwgeSBhICVkIGNsdXN0ZXJzIGxlc3F1ZWxzIG7pY2Vzc2l0ZXJvbnQgcXVlIGNoYXF1ZSAiCisjfiAiRkFUIGFpdCAlZCBzZWN0ZXVycy4gQ2VsYSBlc3QgdnJhaW1lbnQgYml6YXJyZS4gVm91cyBwb3V2ZXogbm91cyDpY3JpcmU6ICIKKyN+ICJidWctcGFydGVkQGdudS5vcmciCisKKyN+IG1zZ2lkICIiCisjfiAiVGhpcyBzd2FwIHBhcnRpdGlvbiBpcyBub3QgY29tcGF0aWJsZSB3aXRoIExpbnV4IHZlcnNpb24gMi4xLjExNyBvciAiCisjfiAiZWFybGllci4gIFVzZSBhIHNtYWxsZXIgcGFydGl0aW9uIChtYXhpbXVtIHNpemUgMTI4bWIpIGlmIHlvdSB3YW50IHRvIHVzZSAiCisjfiAib2xkIHZlcnNpb25zIG9mIExpbnV4LiIKKyN+IG1zZ3N0ciAiIgorI34gIkNldHRlIHBhcnRpdGlvbiBzd2FwIG4nZXN0IHBhcyBjb21wYXRpYmxlIGF2ZWMgbGEgdmVyc2lvbiAyLjEuMTE3IGRlICIKKyN+ICJMaW51eCAob3UgcHLpY+lkZW50ZSkuIFV0aWxpc2V6IHVuZSBwYXJ0aXRpb24gZGUgcGx1cyBwZXRpdGUgdGFpbGxlICIKKyN+ICIodGFpbGxlIG1heGltdW0gMTI4TW8pIHNpIHZvdXMgZOlzaXJleiB1dGlsaXNlciB1bmUgdmVyc2lvbiBwbHVzIGFuY2llbm5lICIKKyN+ICJkZSBMaW51eCIKKworI34gbXNnaWQgIiIKKyN+ICJUaGUgbmV3IHBhcnRpdGlvbiBvdmVybGFwcyB3aXRoIGFub3RoZXIgcGFydGl0aW9uIHNvIGJhZGx5IHRoYXQgaXQgaXNuJ3QgIgorI34gIm9idmlvdXMgd2FudCB5b3Ugd2FudCEiCisjfiBtc2dzdHIgIiIKKyN+ICJMYSBub3V2ZWxsZSBwYXJ0aXRpb24gZW4gY2hldmF1Y2hlIHVuZSBhdXRyZSBkZSBmYedvbiB0ZWxsZSBxdSdpbCBlc3QgIgorI34gImRpZmZpY2lsZSBkZSBzYXZvaXIgY2UgcXVlIHZvdXMgZOlzaXJleiEuIgorCisjfiBtc2dpZCAiIgorI34gIkNhbid0IHJlc2l6ZSBhbiBleHRlbmRlZCBwYXJ0aXRpb24gc28gYXMgdG8gZXhjbHVkZSBhIGxvZ2ljYWwgcGFydGl0aW9uLiIKKyN+IG1zZ3N0ciAiIgorI34gIk5lIHBldXQgbW9kaWZpZXIgbGEgdGFpbGxlIGQndW5lIHBhcnRpdGlvbiDpdGVuZHVlIGVuIGV4Y2x1YW50IHVuZSAiCisjfiAicGFydGl0aW9uIGxvZ2lxdWUuIgorCisjfiBtc2dpZCAiQ2FuJ3QgZ3JvdyBhIHBhcnRpdGlvbiBvbnRvIHVzZWQgc3BhY2UuIgorI34gbXNnc3RyICJOZSBwZXV0IGFjY3Jv7nRyZSB1bmUgcGFydGl0aW9uIHN1ciBkZSBsJ2VzcGFjZSB1dGlsaXPpLiIKKworI34gbXNnaWQgInVua25vd24iCisjfiBtc2dzdHIgImluY29ubnUiCisKKyN+IG1zZ2lkICJVbmtub3duIFNDU0kiCisjfiBtc2dzdHIgIlNDU0kgaW5jb25udSIKKworI34gbXNnaWQgIkdVSUQgUGFydGl0aW9uIFRhYmxlIEhlYWRlciBTaWduYXR1cmUgaXMgd3Jvbmc6ICIKKyN+IG1zZ3N0ciAiU2lnbmF0dXJlIGVycm9u6WUgZGUgbCdlbnTqdGUgZGUgbGEgdGFibGUgZGUgcGFydGl0aW9uIEdVSUQ6ICIKKworI34gbXNnaWQgIiBzaG91bGQgYmUgIgorI34gbXNnc3RyICIgZGV2cmFpdCDqdHJlICIKKworI34gbXNnaWQgIkdQVCBIZWFkZXIgQ1JDIGNoZWNrIGZhaWxlZCwgJXggc2hvdWxkIGJlICV4LiIKKyN+IG1zZ3N0ciAiRXJyZXVyIGRlIHbpcmlmaWNhdGlvbiBkdSBDUkMgZGUgbCdlbnTqdGUgR1BULCAleCBkZXZyYWl0IOp0cmUgJXguIgorCisjfiBtc2dpZCAiR1BUIFBhcnRpdGlvbiBFbnRyeSBBcnJheSBDUkMgY2hlY2sgZmFpbGVkLCAleCBzaG91bGQgYmUgJXguIgorI34gbXNnc3RyICIiCisjfiAiRXJyZXVyIGRlIHbpcmlmaWNhdGlvbiBkdSBDUkMgZGUgbCdlbnRy6WUgZGUgbGEgcGFydGl0aW9uIEdQVCwgJXggZGV2cmFpdCAiCisjfiAi6nRyZSAleC4iCisKKyN+IG1zZ2lkICIiCisjfiAiVGhpcyBkaXNrIGNvbnRhaW5zIGEgdmFsaWQgUHJpbWFyeSBhbmQgQWx0ZXJuYXRlIEdVSUQgUGFydGl0aW9uIFRhYmxlIGJ1dCAiCisjfiAidGhlIFByb3RlY3RpdmUgTUJSIGlzIGludmFsaWQuICBUaGlzIGdlbmVyYWxseSBtZWFucyB0aGF0IHRoZSBkaXNrIGhhZCAiCisjfiAiR1BUIHBhcnRpdGlvbnMgb24gaXQsIGJ1dCB0aGVuIGEgbGVnYWN5IHBhcnRpdGlvbiBlZGl0aW5nIHRvb2wgd2FzIHVzZWQgIgorI34gInRvIGNoYW5nZSB0aGUgcGFydGl0aW9uIHRhYmxlIHN0b3JlZCBpbiB0aGUgTUJSLlxuIgorI34gIldoaWNoIGRhdGEgaXMgdmFsaWQsICBHUFQgb3IgTUJSP1xuIgorI34gIlllcyB3aWxsIGFzc3VtZSB0aGF0IHRoZSBHUFQgaW5mb3JtYXRpb24gaXMgY29ycmVjdCwgYW5kIHJld3JpdGUgdGhlICIKKyN+ICJQTUJSLlxuIgorI34gIk5vIHdpbGwgYXNzdW1lIHRoYXQgdGhlIE1CUiBpcyBjb3JyZWN0LCBhbmQgZXJhc2UgdGhlIEdQVCBpbmZvcm1hdGlvbi5cbiIKKyN+ICJJZ25vcmUgd2lsbCBhc3N1bWUgdGhhdCB0aGUgTUJSIGlzIGNvcnJlY3QsIGJ1dCBub3QgY2hhbmdlIHRoZSBkaXNrLiIKKyN+IG1zZ3N0ciAiIgorI34gIkNlIGRpc3F1ZSBjb250aWVudCB1bmUgdGFibGUgZGUgcGFydGl0aW9ucyBQcmltYWlyZSBldCBBbHRlcm5hdGl2ZSBHVUlEICIKKyN+ICJ2YWxpZGVzIG1haXMgbGUgTUJSIFByb3RlY3RpZiBlc3QgaW52YWxpZGUuIENlbGEgc2lnbmlmaWUgZ+lu6XJhbGVtZW50ICIKKyN+ICJxdWUgbGUgZGlzcXVlIGNvbnRpZW50IGRlcyBwYXJ0aXRpb25zIEdQVCBtYWlzIHF1J3VuIGFuY2llbiBsb2dpY2llbCAiCisjfiAiZCfpZGl0aW9uIGRlIHBhcnRpdGlvbnMgYSDpdOkgdXRpbGlz6SBwb3VyIG1vZGlmaWVyIGxhIHRhYmxlIGRlICIKKyN+ICJwYXJ0aXRpb25zIHN0b2Nr6WUgZGFucyBsZSBNQlIuXG4iCisjfiAiTGVxdWVsIGVzdCB2YWxpZGUgR1BUIG91IE1CUj9cbiIKKyN+ICJMYSBy6XBvbnNlIFllcyAob3VpKSBpbmRpcXVlIHF1ZSBsJ29uIHN1cHBvc2UgcXVlIGwnaW5mb3JtYXRpb24gZGUgdHlwZSAiCisjfiAiR1BUIGVzdCBjb3JyZWN0ZSBldCBy6eljcmlyYSBsZSBQTUJSLlxuIgorI34gIkxhIHLpcG9uc2UgTm8gKG5vbikgaW5kaXF1ZSBxdWUgbCdvbiBhc3N1bWUgcXVlIGwnaW5mb3JtYXRpb24gZGUgdHlwZSBNQlIgIgorI34gImVzdCBjb3JyZWN0ZSBldCBlZmZhY2VyYSBsJ2luZm9ybWF0aW9uIEdQVFxuIgorI34gIkxhIHLpcG9uc2UgSWdub3JlIChpZ25vcmV6KSBpbmRpcXVlIHF1ZSBsJ29uIHN1cHBvc2UgcXVlIGwnaW5mb3JtYXRpb24gZGUgIgorI34gInR5cGUgTUJSIGVzdCBjb3JyZWN0ZSBtYWlzIGF1Y3VuIGNoYW5nZW1lbnQgbmUgc2VyYSBhcHBvcnTpIGF1IGRpc3F1ZS4iCisKKyN+IG1zZ2lkICIiCisjfiAiVGhpcyBkaXNrIGNvbnRhaW5zIGEgdmFsaWQgQWx0ZXJuYXRlIEdVSUQgUGFydGl0aW9uIFRhYmxlIGJ1dCB0aGUgUHJpbWFyeSAiCisjfiAiR1BUIGFuZCBQcm90ZWN0aXZlIE1CUiBhcmUgaW52YWxpZC4gIFRoaXMgZ2VuZXJhbGx5IG1lYW5zIHRoYXQgdGhlIGRpc2sgIgorI34gImhhZCBHUFQgcGFydGl0aW9ucyBvbiBpdCwgYnV0IHRoZW4gYSBsZWdhY3kgcGFydGl0aW9uIGVkaXRpbmcgdG9vbCB3YXMgIgorI34gInVzZWQgdG8gY2hhbmdlIHRoZSBwYXJ0aXRpb24gdGFibGUgc3RvcmVkIGluIHRoZSBNQlIuXG4iCisjfiAiV2hpY2ggZGF0YSBpcyB2YWxpZCwgIEdQVCBvciBNQlI/XG4iCisjfiAiWWVzIHdpbGwgYXNzdW1lIHRoYXQgdGhlIEdQVCBpbmZvcm1hdGlvbiBpcyBjb3JyZWN0LCBhbmQgd2lsbCByZXdyaXRlIHRoZSAiCisjfiAiUE1CUiBhbmQgUHJpbWFyeSBHUFQuXG4iCisjfiAiTm8gd2lsbCBhc3N1bWUgdGhhdCB0aGUgTUJSIGlzIGNvcnJlY3QsIGFuZCBlcmFzZSB0aGUgR1BUIGluZm9ybWF0aW9uLlxuIgorI34gIklnbm9yZSB3aWxsIGFzc3VtZSB0aGF0IHRoZSBNQlIgaXMgY29ycmVjdCwgYnV0IG5vdCBjaGFuZ2UgdGhlIGRpc2suIgorI34gbXNnc3RyICIiCisjfiAiQ2UgZGlzcXVlIGNvbnRpZW50IHVuZSB0YWJsZSBkZSBwYXJ0aXRpb24gQWx0ZXJuYXRlIEdVSUQgdmFsaWRlIG1haXMgbGEgIgorI34gInBhcnRpdGlvbiBwcmltYWlyZSBHUFQgZXQgbGUgTUJSIFByb3RlY3RpZiBzb250IGludmFsaWRlcy4gQ2VsYSBzaWduaWZpZSAiCisjfiAiZ+lu6XJhbGVtZW50IHF1ZSBsZSBkaXNxdWUgY29udGllbnQgZGVzIHBhcnRpdGlvbnMgR1BUIG1haXMgcXUndW4gYW5jaWVuICIKKyN+ICJsb2dpY2llbCBkJ+lkaXRpb24gZGUgcGFydGl0aW9ucyBhIOl06SB1dGlsaXPpIHBvdXIgbW9kaWZpZXIgbGEgdGFibGUgZGUgIgorI34gInBhcnRpdGlvbnMgc3RvY2vpZSBkYW5zIGxlIE1CUi5cbiIKKyN+ICJMZXF1ZWwgZXN0IHZhbGlkZSBHUFQgb3UgTUJSP1xuIgorI34gIkxhIHLpcG9uc2UgWWVzIChvdWkpIGluZGlxdWUgcXVlIGwnb24gc3VwcG9zZSBxdWUgbCdpbmZvcm1hdGlvbiBkZSB0eXBlICIKKyN+ICJHUFQgZXN0IGNvcnJlY3RlIGV0IHLp6WNyaXJhIGxlIFBNQlIgZXQgbGEgcGFydGl0aW9uIHByaW1haXJlIEdQVC5cbiIKKyN+ICJMYSBy6XBvbnNlIE5vIChub24pIGluZGlxdWUgcXVlIGwnb24gc3VwcG9zZSBxdWUgbCdpbmZvcm1hdGlvbiBkZSB0eXBlICIKKyN+ICJNQlIgZXN0IGNvcnJlY3RlIGV0IGVmZmFjZXJhIGwnaW5mb3JtYXRpb24gR1BUXG4iCisjfiAiTGEgculwb25zZSBJZ25vcmUgKGlnbm9yZXopIGluZGlxdWUgcXVlIGwnb24gc3VwcG9zZSBxdWUgbCdpbmZvcm1hdGlvbiBkZSAiCisjfiAidHlwZSBNQlIgZXN0IGNvcnJlY3RlIG1haXMgYXVjdW4gY2hhbmdlbWVudCBuZSBzZXJhIGFwcG9ydOkgYXUgZGlzcXVlLiIKKworI34gbXNnaWQgIiIKKyN+ICJUaGlzIGRpc2sgY29udGFpbnMgYSB2YWxpZCBQcmltYXJ5IEdVSUQgUGFydGl0aW9uIFRhYmxlIGJ1dCB0aGUgQWx0ZXJuYXRlICIKKyN+ICJHUFQgYW5kIFByb3RlY3RpdmUgTUJSIGFyZSBpbnZhbGlkLiAgVGhpcyBnZW5lcmFsbHkgbWVhbnMgdGhhdCB0aGUgZGlzayAiCisjfiAiaGFkIEdQVCBwYXJ0aXRpb25zIG9uIGl0LCBidXQgdGhlbiBhIGxlZ2FjeSBwYXJ0aXRpb24gZWRpdGluZyB0b29sIHdhcyAiCisjfiAidXNlZCB0byBjaGFuZ2UgdGhlIHBhcnRpdGlvbiB0YWJsZSBzdG9yZWQgaW4gdGhlIE1CUi5cbiIKKyN+ICJXaGljaCBkYXRhIGlzIHZhbGlkLCAgR1BUIG9yIE1CUj9cbiIKKyN+ICJZZXMgd2lsbCBhc3N1bWUgdGhhdCB0aGUgR1BUIGluZm9ybWF0aW9uIGlzIGNvcnJlY3QsIGFuZCB3aWxsIHJld3JpdGUgdGhlICIKKyN+ICJQTUJSIGFuZCBBbHRlcm5hdGUgR1BULlxuIgorI34gIk5vIHdpbGwgYXNzdW1lIHRoYXQgdGhlIE1CUiBpcyBjb3JyZWN0LCBhbmQgZXJhc2UgdGhlIEdQVCBpbmZvcm1hdGlvbi5cbiIKKyN+ICJJZ25vcmUgd2lsbCBhc3N1bWUgdGhhdCB0aGUgTUJSIGlzIGNvcnJlY3QsIGJ1dCBub3QgY2hhbmdlIHRoZSBkaXNrLlxuIgorI34gbXNnc3RyICIiCisjfiAiQ2UgZGlzcXVlIGNvbnRpZW50IHVuZSB0YWJsZSBkZSBwYXJ0aXRpb24gcHJpbWFpcmUgR1VJRCB2YWxpZGUgbWFpcyBsYSAiCisjfiAicGFydGl0aW9uIGFsdGVybmF0aXZlIEdQVCBldCBsZSBNQlIgUHJvdGVjdGlmIHNvbnQgaW52YWxpZGVzLiBDZWxhICIKKyN+ICJzaWduaWZpZSBn6W7pcmFsZW1lbnQgcXVlIGxlIGRpc3F1ZSBjb250aWVudCBkZXMgcGFydGl0aW9ucyBHUFQgbWFpcyAiCisjfiAicXUndW4gYW5jaWVuIGxvZ2ljaWVsIGQn6WRpdGlvbiBkZSBwYXJ0aXRpb25zIGEg6XTpIHV0aWxpc+kgcG91ciBtb2RpZmllciAiCisjfiAibGEgdGFibGUgZGUgcGFydGl0aW9ucyBzdG9ja+llIGRhbnMgbGUgTUJSLlxuIgorI34gIkxlcXVlbCBlc3QgdmFsaWRlIEdQVCBvdSBNQlI/XG4iCisjfiAiTGEgculwb25zZSBZZXMgKG91aSkgaW5kaXF1ZSBxdWUgbCdvbiBzdXBwb3NlIHF1ZSBsJ2luZm9ybWF0aW9uIGRlIHR5cGUgIgorI34gIkdQVCBlc3QgY29ycmVjdGUgZXQgcunpY3JpcmEgbGUgUE1CUiBldCBsYSBwYXJ0aXRpb24gYWx0ZXJuYXRpdmUgR1BULlxuIgorI34gIkxhIHLpcG9uc2UgTm8gKG5vbikgaW5kaXF1ZSBxdWUgbCdvbiBzdXBwb3NlIHF1ZSBsJ2luZm9ybWF0aW9uIGRlIHR5cGUgIgorI34gIk1CUiBlc3QgY29ycmVjdGUgZXQgZWZmYWNlcmEgbCdpbmZvcm1hdGlvbiBHUFRcbiIKKyN+ICJMYSBy6XBvbnNlIElnbm9yZSAoaWdub3JleikgaW5kaXF1ZSBxdWUgbCdvbiBzdXBwb3NlIHF1ZSBsJ2luZm9ybWF0aW9uIGRlICIKKyN+ICJ0eXBlIE1CUiBlc3QgY29ycmVjdGUgbWFpcyBhdWN1biBjaGFuZ2VtZW50IG5lIHNlcmEgYXBwb3J06SBhdSBkaXNxdWUuXG4iCisKKyN+IG1zZ2lkICJDYW4ndCBzZXQgbm9uLUxpbnV4IHBhcnRpdGlvbnMgYXMgYSByb290IGRldmljZS4iCisjfiBtc2dzdHIgIk5lIHBldXQgZOlmaW5pciBkZXMgcGFydGl0aW9ucyBub24tTGludXggcG91ciB1biBw6XJpcGjpcmlxdWUgcm9vdCIKKworI34gbXNnaWQgIkNhbid0IHNldCBub24tTGludXggcGFydGl0aW9ucyBhcyBhIHN3YXAgZGV2aWNlLiIKKyN+IG1zZ3N0ciAiIgorI34gIk5lIHBldXQgZOlmaW5pciBkZXMgcGFydGl0aW9ucyBub24tTGludXggcG91ciB1biBw6XJpcGjpcmlxdWUgcG91ciBsZSBzd2FwIgorCisjfiBtc2dpZCAiTm8gZ2V0X3Jlc2l6ZV9jb25zdHJhaW50IGZvciAlcyEiCisjfiBtc2dzdHIgIkF1Y3VuIGdldF9yZXNpemVfY29uc3RyYWludCBwb3VyICVzISIKKworI34gbXNnaWQgIlRoZSAlcyBmaWxlIHN5c3RlbSBjb2RlIGRvZXNuJ3Qgc3VwcG9ydCAlcyBkaXNrIGxhYmVscy4iCisjfiBtc2dzdHIgIiIKKyN+ICJMZSBjb2RlIGR1IHN5c3TobWUgZGUgZmljaGllcnMgJXMgbmUgc3VwcG9ydGUgcGFzIGxlcyDpdGlxdWV0dGVzIGRlICIKKyN+ICJkaXNxdWUgJXMiCisKKyN+IG1zZ2lkICJDcmVhdGluZyBuZXcgJXMgZGlza2xhYmVscyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKKyN+IG1zZ3N0ciAiIgorI34gIkxhIGNy6WF0aW9uIGQndW5lIG5vdXZlbGxlIOl0aXF1ZXR0ZSBwb3VyIGxlIHN5c3TobWUgZGUgZmljaGllcnMgJXMgbidlc3QgIgorI34gInBhcyBlbmNvcmUgaW1wbGFudOllLiIKKworI34gbXNnaWQgIlRoZSBjb2RlIHRvIHdyaXRlIHRoZSBwYXJ0aXRpb24gdGFibGUgaGFzbid0IGJlZW4gd3JpdHRlbiBmb3IgJXMgeWV0IgorI34gbXNnc3RyICIiCisjfiAiTGUgY29kZSBwb3VyIOljcmlyZSBsYSB0YWJsZSBkZSBwYXJ0aXRpb24gbidhIHBhcyBlbmNvcmUg6XTpIOljcml0IHBvdXIgJXMiCisKKyN+IG1zZ2lkICJJbnNhbmUhICAlZCBjbHVzdGVycyEiCisjfiBtc2dzdHIgIkluc2Vuc+khICAlZCBjbHVzdGVycyEiCisKKyN+IG1zZ2lkICIiCisjfiAiVGhlIGZpbGVzeXN0ZW0gaXMgZ29pbmcgdG8gYmUgdG9vIGJpZyBmb3IgRkFUMTYsIHNvIEZBVDMyIHdpbGwgYmUgdXNlZC4gICIKKyN+ICJUaGlzIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggTVMtRE9TLCBlYXJseSB2ZXJzaW9ucyBvZiBNUy1XaW5kb3dzIDk1IGFuZCAiCisjfiAiV2luZG93cyBOVC4gIElmIHlvdSB1c2UgdGhlc2Ugb3BlcmF0aW5nIHN5c3RlbXMsIHRoZW4gc2VsZWN0IGNhbmNlbCwgYW5kICIKKyN+ICJjcmVhdGUgYSBzbWFsbGVyIHBhcnRpdGlvbi4gIElmIHlvdSBvbmx5IHVzZSBMaW51eCwgQlNELCBNUyBXaW5kb3dzIDk4ICIKKyN+ICJhbmQvb3IgTVMgV2luZG93cyA5NSBCLCB0aGVuIHNlbGVjdCBPSy4iCisjfiBtc2dzdHIgIiIKKyN+ICJMZSBzeXN06G1lIGRlIGZpY2hpZXJzIHNlcmEgdHJvcCBncm9zIHBvdXIgRkFUMTYsIGF1c3NpIEZBVDMyIHNlcmEgIgorI34gInV0aWxpc+kuIElsIG4nZXN0IHBhcyBjb21wYXRpYmxlIGF2ZWMgTVMtRE9TIGV0IGxlcyBwcmVtaehyZXMgdmVyc2lvbnMgZGUgIgorI34gIk1TLVdpbmRvd3MgOTUgZXQgV2luZG93cyBOVC4gU2kgdm91cyB1dGlsaXNleiBjZXMgc3lzdOhtZXMgZCdleHBsb2l0YXRpb24gIgorI34gImFsb3JzIHPpbGVjdGlvbm5lICdhbm51bGVyJyAoY2FuY2VsKSBldCBjculleiB1bmUgcGFydGl0aW9uIHBsdXMgcGV0aXRlLiAiCisjfiAiU2kgdm91cyB1dGlsaXNleiBzZXVsZW1lbnQgTGludXgsIEJTRCwgTVMgV2luZG93cyA5OCBldC9vdSBNUyBXaW5kb3dzIDk1ICIKKyN+ICJCIGFsb3JzIHPpbGVjdGlvbm5lciAnT0snLiIKKworI34gbXNnaWQgIldlaXJkOiBmYXRfY2FsY19zaXplcygpIGZhaWxlZCBmb3IgRkFUMzIhIgorI34gbXNnc3RyICJCaXphcnJlOiBmYXRfY2FsY19zaXplcygpIGEg6WNob3XpIHBvdXIgdW4gRkFUMzIhIgorCisjfiBtc2dpZCAiIgorI34gIldvdWxkIHlvdSBsaWtlIHRvIHVzZSBGQVQzMiBmb3IgdGhpcyBmaWxlc3lzdGVtPyAgSXQgaXMgbXVjaCBtb3JlICIKKyN+ICJlZmZpY2llbnQgd2l0aCB5b3VyIGRpc2sgc3BhY2UsIGJ1dCBpcyBub3QgY29tcGF0aWJsZSB3aXRoIGVhcmx5IHZlcnNpb25zICIKKyN+ICJvZiBXaW5kb3dzIDk1IGFuZCBXaW5kb3dzIE5ULiAgT25seSBzZWxlY3QgeWVzIGlmIHlvdSBvbmx5IHVzZSBMaW51eCwgIgorI34gIkJTRCwgTVMgV2luZG93cyA5OCBhbmQvb3IgTVMgV2luZG93cyA5NSBCLiIKKyN+IG1zZ3N0ciAiIgorI34gIlBy6WbpcmV6LXZvdXMgdXRpbGlzZXIgRkFUMzIgcG91ciBjZSBzeXN06G1lIGRlIGZpY2hpZXJzPyBDJ2VzdCBwbHVzICIKKyN+ICJlZmZpY2FjZSBhdmVjIHZvdHJlIGVzcGFjZSBkaXNxdWUgbWFpcyBub24gY29tcGF0aWJsZSBhdmVjIGxlcyBwcmVtaehyZXMgIgorI34gInZlcnNpb24gZGUgV2luZG93cyA5NSBldCBXaW5kb3dzIE5ULiBT6WxlY3Rpb25uZXIgc2V1bGVtZW50IHNpIHZvdXMgIgorI34gInV0aWxpc2V6IExpbnV4LCBCU0QsIE1TIFdpbmRvd3MgOTggZXQvb3UgTVMgV2luZG93cyA5NSBCLiIKKworI34gbXNnaWQgIiIKKyN+ICJGaWxlIHN5c3RlbSBkb2Vzbid0IGhhdmUgZXhwZWN0ZWQgc2l6ZXMgZm9yIFdpbmRvd3MgdG8gbGlrZSBpdC4gIE51bWJlciAiCisjfiAib2YgY2x1c3RlcnMgaXMgJWQgKCVkIGV4cGVjdGVkKTsgc2l6ZSBvZiBGQVRzIGlzICVkIHNlY3RvcnMgKCVkIGV4cGVjdGVkKS4iCisjfiBtc2dzdHIgIiIKKyN+ICJMZSBzeXN06G1lIGRlIGZpY2hpZXJzIG4n6XRhaXQgcGFzIHBy6XZ1IHBvdXIgZGVzIHRhaWxsZXMgY29tcGF0aWJsZXMgIgorI34gImF2ZWMgV2luZG93cy4gIExlIG5vbWJyZSBkZSBjbHVzdGVycyBlc3QgJWQgKCVkIGF0dGVuZHUpLiBMYSB0YWlsbGUgZGVzICIKKyN+ICJGQVQgZXN0IGRlICVkIHNlY3RldXJzICglZCBhdHRlbmR1KSIKKworI34gbXNnaWQgIiIKKyN+ICJQYXJ0aXRpb24gc2l6ZSAoJWxkIHNlY3RvcnMpIGFuZCBmaWxlc3lzdGVtIHNpemUgKCVsZCBzZWN0b3JzKSBkbyBub3QgIgorI34gIm1hdGNoLiIKKyN+IG1zZ3N0ciAiIgorI34gIkxhIHRhaWxsZSBkZSBwYXJ0aXRpb24gKCVsZCBzZWN0ZXVycykgZXQgbGEgdGFpbGxlIGR1IHN5c3TobWUgZGUgZmljaGllcnMgIgorI34gIiglbGQgc2VjdGV1cnMpIG5lIGNvbmNvcmRlbnQgcGFzLiIKKworI34gbXNnaWQgIkxpbnV4LXN3YXAgcGFydGl0aW9ucyBjYW4gbm90IGJlIGhpZGRlbiBvbiBtc2RvcyBkaXNrIGxhYmVscy4iCisjfiBtc2dzdHIgIiIKKyN+ICJMZXMgcGFydGl0aW9ucyBMaW51eC1zd2FwIG5lIHBldXZlbnQg6nRyZSBjYWNo6WVzIHBvdXIgdW5lIOl0aXF1ZXR0ZSBkZSAiCisjfiAiZGlzcXVlIE1TLURPUyIKKworI34gbXNnaWQgIkxpbnV4LXN3YXAgcGFydGl0aW9ucyBjYW4gbm90IGJlIGJvb3RhYmxlIG9uIHBjOTggZGlzayBsYWJlbHMuIgorI34gbXNnc3RyICIiCisjfiAiTGVzIHBhcnRpdGlvbnMgTGludXgtc3dhcCBuZSBwZXV2ZW50IOp0cmUgYW1vcudhYmxlcyBwb3VyIHVuZSDpdGlxdWV0dGUgIgorI34gImRlIGRpc3F1ZSBwYzk4LiIKKworI34gbXNnaWQgIkhGUyBwYXJ0aXRpb25zIGNhbid0IGJlIGhpZGRlbiBvbiBtc2RvcyBkaXNrIGxhYmVscy4iCisjfiBtc2dzdHIgIiIKKyN+ICJMZXMgcGFydGl0aW9ucyBIRlMgbmUgcGV1dmVudCDqdHJlIGNhY2jpZXMgcG91ciB1bmUg6XRpcXVldHRlIGRlIGRpc3F1ZSAiCisjfiAiTVMtRE9TLiIKKworI34gbXNnaWQgIkpGUyBwYXJ0aXRpb25zIGNhbid0IGJlIGhpZGRlbiBvbiBtc2RvcyBkaXNrIGxhYmVscy4iCisjfiBtc2dzdHIgIiIKKyN+ICJMZXMgcGFydGl0aW9ucyBKRlMgbmUgcGV1dmVudCDqdHJlIGNhY2jpZXMgcG91ciB1bmUg6XRpcXVldHRlIGRlIGRpc3F1ZSAiCisjfiAiTVMtRE9TLiIKKworI34gbXNnaWQgIlJlaXNlcmZzIHBhcnRpdGlvbnMgY2FuJ3QgYmUgaGlkZGVuIG9uIG1zZG9zIGRpc2sgbGFiZWxzLiIKKyN+IG1zZ3N0ciAiIgorI34gIkxlcyBwYXJ0aXRpb25zIFJlaXNlcmZzIG5lIHBldXZlbnQg6nRyZSBjYWNo6WVzIHBvdXIgdW5lIOl0aXF1ZXR0ZSBkZSAiCisjfiAiZGlzcXVlIE1TLURPUy4iCisKKyN+IG1zZ2lkICJSZWlzZXJmcyBwYXJ0aXRpb25zIG11c3QgYmUgYm9vdGFibGUgb24gcGM5OCBkaXNrIGxhYmVscy4iCisjfiBtc2dzdHIgIiIKKyN+ICJMZXMgcGFydGl0aW9ucyBSZWlzZXJmcyBkb2l2ZW50IOp0cmUgYW1vcudhYmxlcyBwb3VyIHVuZSDpdGlxdWV0dGUgZGUgIgorI34gImRpc3F1ZSBwYzk4LiIKKworI34gbXNnaWQgIlhGUyBwYXJ0aXRpb25zIGNhbid0IGJlIGhpZGRlbiBvbiBtc2RvcyBkaXNrIGxhYmVscy4iCisjfiBtc2dzdHIgIiIKKyN+ICJMZXMgcGFydGl0aW9ucyBYRlMgbmUgcGV1dmVudCDqdHJlIGNhY2jpZXMgcG91ciB1bmUg6XRpcXVldHRlIGRlIGRpc3F1ZSAiCisjfiAiTVMtRE9TLiIKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9wby9nbC5nbW8gYi9wYXJ0ZWQtMS44LjcvcG8vZ2wuZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkMjk4ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvcG8vZ2wuZ21vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9wby9nbC5wbyBiL3BhcnRlZC0xLjguNy9wby9nbC5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGM4NTY4Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L3BvL2dsLnBvCkBAIC0wLDAgKzEsMzczMSBAQAorIyBHYWxpY2lhbiB0cmFuc2xhdGlvbiBvZiBHTlUgcGFydGVkCisjIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgSmFjb2JvIFRhcnLtbyBCYXJyZWlybyA8anRhcnJpb0B0cmFzbm8ubmV0PiwgMjAwMCwgMjAwMSwgMjAwMi4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IHBhcnRlZCAxLjYuNC1wcmUyXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGJ1Zy1wYXJ0ZWRAZ251Lm9yZ1xuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDA3LTA1LTA5IDE3OjAyLTA0MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDAyLTEyLTA3IDAxOjMwKzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEphY29ibyBUYXJy7W8gQmFycmVpcm8gPGp0YXJyaW9AdHJhc25vLm5ldD5cbiIKKyJMYW5ndWFnZS1UZWFtOiBHYWxpY2lhbiA8Z3B1bC10cmFkdWNjaW9uQGNldS5maS51ZGMuZXM+XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9aXNvLTg4NTktMVxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKworIzogbGliL2Nsb3Nlb3V0LmM6NzQKK21zZ2lkICJ3cml0ZSBlcnJvciIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXJyb3IuYzoxMjUKKyMsIGZ1enp5Cittc2dpZCAiVW5rbm93biBzeXN0ZW0gZXJyb3IiCittc2dzdHIgIlRpcG8gZGUgc2lzdGVtYSBkZSBmaWNoZWlyb3MgZGVzY2/xZWNpZG8uIgorCisjOiBsaWIvZ2V0b3B0LmM6NTMxIGxpYi9nZXRvcHQuYzo1NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiBgJXMnIGlzIGFtYmlndW91c1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo1ODAgbGliL2dldG9wdC5jOjU4NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIGAtLSVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjU5MyBsaWIvZ2V0b3B0LmM6NTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYCVjJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6NjQxIGxpYi9nZXRvcHQuYzo2NjAgbGliL2dldG9wdC5jOjk3NiBsaWIvZ2V0b3B0LmM6OTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYCVzJyByZXF1aXJlcyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo2OTggbGliL2dldG9wdC5jOjcwMQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5yZWNvZ25pemVkIG9wdGlvbiBgLS0lcydcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6NzA5IGxpYi9nZXRvcHQuYzo3MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVucmVjb2duaXplZCBvcHRpb24gYCVjJXMnXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjc2NCBsaWIvZ2V0b3B0LmM6NzY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbGxlZ2FsIG9wdGlvbiAtLSAlY1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo3NzMgbGliL2dldG9wdC5jOjc3NgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBvcHRpb24gLS0gJWNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6ODI4IGxpYi9nZXRvcHQuYzo4NDQgbGliL2dldG9wdC5jOjEwNDggbGliL2dldG9wdC5jOjEwNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCAtLSAlY1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo4OTcgbGliL2dldG9wdC5jOjkxMworIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIGAtVyAlcycgaXMgYW1iaWd1b3VzXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjkzNyBsaWIvZ2V0b3B0LmM6OTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYC1XICVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6CisjLiBHZXQgdHJhbnNsYXRpb25zIGZvciBvcGVuIGFuZCBjbG9zaW5nIHF1b3RhdGlvbiBtYXJrcy4KKyMuCisjLiBUaGUgbWVzc2FnZSBjYXRhbG9nIHNob3VsZCB0cmFuc2xhdGUgImAiIHRvIGEgbGVmdAorIy4gcXVvdGF0aW9uIG1hcmsgc3VpdGFibGUgZm9yIHRoZSBsb2NhbGUsIGFuZCBzaW1pbGFybHkgZm9yCisjLiAiJyIuICBJZiB0aGUgY2F0YWxvZyBoYXMgbm8gdHJhbnNsYXRpb24sCisjLiBsb2NhbGVfcXVvdGluZ19zdHlsZSBxdW90ZXMgYGxpa2UgdGhpcycsIGFuZAorIy4gY2xvY2FsZV9xdW90aW5nX3N0eWxlIHF1b3RlcyAibGlrZSB0aGlzIi4KKyMuCisjLiBGb3IgZXhhbXBsZSwgYW4gQW1lcmljYW4gRW5nbGlzaCBVbmljb2RlIGxvY2FsZSBzaG91bGQKKyMuIHRyYW5zbGF0ZSAiYCIgdG8gVSsyMDFDIChMRUZUIERPVUJMRSBRVU9UQVRJT04gTUFSSyksIGFuZAorIy4gc2hvdWxkIHRyYW5zbGF0ZSAiJyIgdG8gVSsyMDFEIChSSUdIVCBET1VCTEUgUVVPVEFUSU9OCisjLiBNQVJLKS4gIEEgQnJpdGlzaCBFbmdsaXNoIFVuaWNvZGUgbG9jYWxlIHNob3VsZCBpbnN0ZWFkCisjLiB0cmFuc2xhdGUgdGhlc2UgdG8gVSsyMDE4IChMRUZUIFNJTkdMRSBRVU9UQVRJT04gTUFSSykgYW5kCisjLiBVKzIwMTkgKFJJR0hUIFNJTkdMRSBRVU9UQVRJT04gTUFSSyksIHJlc3BlY3RpdmVseS4KKyMuCisjLiBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIHB1dCBoZXJlLCBwbGVhc2Ugc2VlCisjLiA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9RdW90YXRpb25fbWFyayNHbHlwaHM+CisjLiBhbmQgdXNlIGdseXBocyBzdWl0YWJsZSBmb3IgeW91ciBsYW5ndWFnZS4KKyM6IGxpYi9xdW90ZWFyZy5jOjIyOQorbXNnaWQgImAiCittc2dzdHIgIiIKKworIzogbGliL3F1b3RlYXJnLmM6MjMwCittc2dpZCAiJyIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjEzMQorbXNnaWQgIlN1Y2Nlc3MiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxMzQKK21zZ2lkICJObyBtYXRjaCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjEzNworbXNnaWQgIkludmFsaWQgcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTQwCittc2dpZCAiSW52YWxpZCBjb2xsYXRpb24gY2hhcmFjdGVyIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTQzCittc2dpZCAiSW52YWxpZCBjaGFyYWN0ZXIgY2xhc3MgbmFtZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE0NgorbXNnaWQgIlRyYWlsaW5nIGJhY2tzbGFzaCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE0OQorbXNnaWQgIkludmFsaWQgYmFjayByZWZlcmVuY2UiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNTIKK21zZ2lkICJVbm1hdGNoZWQgWyBvciBbXiIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE1NQorbXNnaWQgIlVubWF0Y2hlZCAoIG9yIFxcKCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE1OAorbXNnaWQgIlVubWF0Y2hlZCBcXHsiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNjEKK21zZ2lkICJJbnZhbGlkIGNvbnRlbnQgb2YgXFx7XFx9IgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTY0Cittc2dpZCAiSW52YWxpZCByYW5nZSBlbmQiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNjcKK21zZ2lkICJNZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTcwCittc2dpZCAiSW52YWxpZCBwcmVjZWRpbmcgcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTczCittc2dpZCAiUHJlbWF0dXJlIGVuZCBvZiByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNzYKK21zZ2lkICJSZWd1bGFyIGV4cHJlc3Npb24gdG9vIGJpZyIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE3OQorbXNnaWQgIlVubWF0Y2hlZCApIG9yIFxcKSIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjY4MAorbXNnaWQgIk5vIHByZXZpb3VzIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvcnBtYXRjaC5jOjcwCittc2dpZCAiXlt5WV0iCittc2dzdHIgIiIKKworIzogbGliL3JwbWF0Y2guYzo3MworbXNnaWQgIl5bbk5dIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBUcmFuc2xhdGUgIihDKSIgdG8gdGhlIGNvcHlyaWdodCBzeW1ib2wKKyMuIChDLWluLWEtY2lyY2xlKSwgaWYgdGhpcyBzeW1ib2wgaXMgYXZhaWxhYmxlIGluIHRoZSB1c2VyJ3MKKyMuIGxvY2FsZS4gIE90aGVyd2lzZSwgZG8gbm90IHRyYW5zbGF0ZSAiKEMpIjsgbGVhdmUgaXQgYXMtaXMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzo2NgorbXNnaWQgIihDKSIKK21zZ3N0ciAiIgorCisjOiBsaWIvdmVyc2lvbi1ldGMuYzo2OAorbXNnaWQgIiIKKyJcbiIKKyJMaWNlbnNlIEdQTHYyKzogR05VIEdQTCB2ZXJzaW9uIDIgb3IgbGF0ZXIgPGh0dHA6Ly9nbnUub3JnL2xpY2Vuc2VzL2dwbC4iCisiaHRtbD5cbiIKKyJUaGlzIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBhcmUgZnJlZSB0byBjaGFuZ2UgYW5kIHJlZGlzdHJpYnV0ZSBpdC5cbiIKKyJUaGVyZSBpcyBOTyBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3LlxuIgorIlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIzogbGliL3ZlcnNpb24tZXRjLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiV3JpdHRlbiBieSAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIzogbGliL3ZlcnNpb24tZXRjLmM6ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiV3JpdHRlbiBieSAlcyBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIldyaXR0ZW4gYnkgJXMsICVzLCBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyJhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6MTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiJXMsIGFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyIlcywgJXMsIGFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzoxMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyIlcywgJXMsICVzLCBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6MTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiJXMsICVzLCAlcywgJXMsXG4iCisiYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjLiBZb3UgY2FuIHVzZSBsaW5lIGJyZWFrcywgZXN0aW1hdGluZyB0aGF0IGVhY2ggYXV0aG9yIG5hbWUgb2NjdXBpZXMKKyMuIGNhLiAxNiBzY3JlZW4gY29sdW1ucyBhbmQgdGhhdCBhIHNjcmVlbiBsaW5lIGhhcyBjYS4gODAgY29sdW1ucy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjEzMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorIiVzLCAlcywgJXMsICVzLFxuIgorIiVzLCBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6MTQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiJXMsICVzLCAlcywgJXMsXG4iCisiJXMsICVzLCBhbmQgb3RoZXJzLlxuIgorbXNnc3RyICIiCisKKyM6IGxpYi94YWxsb2MtZGllLmM6MzUKK21zZ2lkICJtZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzoyMzcKK21zZ2lkICJEaXNrIEltYWdlIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzozMzggbGlicGFydGVkL2FyY2gvZ251LmM6MjYxCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjEyNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igb3BlbmluZyAlczogJXMiCittc2dzdHIgIkVycm8gYW8gYWJyaXIgJXM6ICVzIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6MzQ5IGxpYnBhcnRlZC9hcmNoL2dudS5jOjI3MQorIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBvcGVuICVzIHJlYWQtd3JpdGUgKCVzKS4gICVzIGhhcyBiZWVuIG9wZW5lZCByZWFkLW9ubHkuIgorbXNnc3RyICIiCisiTm9uIHNlIHB1aWRvIGFicmlyICVzIHBhcmEgbGVjdHVyYS1lc2NyaXR1cmEgKCVzKS4gQWJyaXVzZSAlcyBwYXJhIHPzICIKKyJsZWN0dXJhLiIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjQxMSBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjE0MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZHVyaW5nIHNlZWsgZm9yIHJlYWQgb24gJXMiCittc2dzdHIgIiVzIG1lbnRyZXMgc2Ug7WEg4SBwb3NpY2nzbiBkYSBxdWUgbGVyIGVuICVzIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6NDQ0IGxpYnBhcnRlZC9hcmNoL2dudS5jOjQ0OSBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo1NDgKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjY3NiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjEzOTEKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkdXJpbmcgcmVhZCBvbiAlcyIKK21zZ3N0ciAiJXMgZHVyYW50ZSBhIGxlY3R1cmEgZW4gJXMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzo0ODAgbGlicGFydGVkL2FyY2gvZ251LmM6NTA5CisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjE1NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2FuJ3Qgd3JpdGUgdG8gJXMsIGJlY2F1c2UgaXQgaXMgb3BlbmVkIHJlYWQtb25seS4iCittc2dzdHIgIk5vbiBzZSBwdWlkbyBlc2NyaWJpciBlbiAlcywgcG9ycXVlIGVzdOEgYWJlcnRvIHBhcmEgc/MgbGVjdHVyYS4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzo0OTYgbGlicGFydGVkL2FyY2gvbGludXguYzoxNTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGR1cmluZyBzZWVrIGZvciB3cml0ZSBvbiAlcyIKK21zZ3N0ciAiJXMgbWVudHJlcyBzZSDtYSDhIHBvc2ljafNuIG5hIHF1ZSBlc2NyaWJpciBlbiAlcyIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjUzMyBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo1ODUgbGlicGFydGVkL2FyY2gvZ251LmM6NjMwCisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo3MDcgbGlicGFydGVkL2FyY2gvbGludXguYzoxNTE3CisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjE2MTIgbGlicGFydGVkL2FyY2gvbGludXguYzoxNjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGR1cmluZyB3cml0ZSBvbiAlcyIKK21zZ3N0ciAiJXMgZHVyYW50ZSBhIGVzY3JpdHVyYSBlbiAlcyIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo2MyBwYXJ0cHJvYmUvcGFydHByb2JlLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeSBgJXMgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogJXMgW09QVElPTl1cbiIKKyIgIG9yOiAgJXMgREVWSUNFIE1JTk9SXG4iCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo3MAorbXNnaWQgIiIKKyJDbGVhciB1bnVzZWQgc3BhY2Ugb24gYSBGQVQgcGFydGl0aW9uIChhIEdOVSBQYXJ0ZWQgdGVzdGluZyB0b29sKS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjc0Cittc2dpZCAiICAgICAgLS1oZWxwICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdFxuIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6NzUKK21zZ2lkICIgICAgICAtLXZlcnNpb24gIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0XG4iCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo3NyBwYXJ0cHJvYmUvcGFydHByb2JlLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJSZXBvcnQgYnVncyB0byA8JXM+LlxuIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6Mjg1CisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBmZXcgYXJndW1lbnRzIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6MjkwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMiCittc2dzdHIgIkRlbWFzaWFkYXMgcOF4aW5hcyBpbmNvcnJlY3Rhcy4iCisKKyM6IHBhcnRwcm9iZS9wYXJ0cHJvYmUuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFtPUFRJT05dIFtERVZJQ0VdLi4uXG4iCittc2dzdHIgIiIKKworIzogcGFydHByb2JlL3BhcnRwcm9iZS5jOjE0MgorbXNnaWQgIiIKKyJJbmZvcm0gdGhlIE9TIG9mIHBhcnRpdGlvbiB0YWJsZSBjaGFuZ2VzLlxuIgorIlxuIgorIiAgLWQsIC0tbm8tdXBkYXRlICBkb24ndCB1cGRhdGUgdGhlIGtlcm5lbFxuIgorIiAgLXMsIC0tc3VtbWFyeSAgICBwcmludCBhIHN1bW1hcnkgb2YgY29udGVudHNcbiIKKyIgIC1oLCAtLWhlbHAgICAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXRcbiIKKyIgIC12LCAtLXZlcnNpb24gICAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXRcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0cHJvYmUvcGFydHByb2JlLmM6MTUwCittc2dpZCAiIgorIlxuIgorIldpdGggbm8gREVWSUNFLCBwcm9iZSBhbGwgcGFydGl0aW9ucy5cbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gb3BlbiAlcy4iCittc2dzdHIgIk5vbiBzZSBwdWlkbyBhYnJpciAlcy4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjExNAorbXNnaWQgIlVuYWJsZSB0byBwcm9iZSBzdG9yZS4iCittc2dzdHIgIk5vbiBzZSBwdWlkbyBzb25kZWEtbG8gYXJtYWPpbi4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjM1MgorIywgZnV6enkKK21zZ2lkICIiCisiVGhlIHBhcnRpdGlvbiB0YWJsZSBjYW5ub3QgYmUgcmUtcmVhZC4gIFRoaXMgbWVhbnMgeW91IG5lZWQgdG8gcmVib290IGJlZm9yZSAiCisibW91bnRpbmcgYW55IG1vZGlmaWVkIHBhcnRpdGlvbnMuICBZb3UgYWxzbyBuZWVkIHRvIHJlaW5zdGFsbCB5b3VyIGJvb3QgIgorImxvYWRlciBiZWZvcmUgeW91IHJlYm9vdCAod2hpY2ggbWF5IHJlcXVpcmUgbW91bnRpbmcgbW9kaWZpZWQgcGFydGl0aW9ucykuICAiCisiSXQgaXMgaW1wb3NzaWJsZSBkbyBib3RoIHRoaW5ncyEgIFNvIHlvdSdsbCBuZWVkIHRvIGJvb3Qgb2ZmIGEgcmVzY3VlIGRpc2ssICIKKyJhbmQgcmVpbnN0YWxsIHlvdXIgYm9vdCBsb2FkZXIgZnJvbSB0aGUgcmVzY3VlIGRpc2suICBSZWFkIHNlY3Rpb24gNCBvZiB0aGUgIgorIlBhcnRlZCBVc2VyIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorbXNnc3RyICIiCisiTm9uIHNlIHB1aWRvIHZvbHZlciBsZS1sYSB04WJvYSBkZSBwYXJ0aWNp825zLCBhc+0gcXVlIHRlbiBxdWUgcmVpbmljaWFyICIKKyJhbnRlcyBkZSBtb250YXIgY2FscXVlcmEgcGFydGljafNuIG1vZGlmaWNhZGEuIFRhbeluIHByZWNpc2EgcmVpbnN0YWxhLWxvICIKKyJjYXJnYWRvciBkZSBpbmljaW8gYW50ZXMgZGUgcmVpbmljaWFyIChvIHF1ZSBwb2RlIHByZWNpc2EtbGEgbW9udGF4ZSBkZSAiCisicGFydGljafNucyBtb2RpZmljYWRhcykuIMkgaW1wb3NpYmxlIGZhY2VyIOFtYmFsYXMgZPphcyBjb3VzYXMsIGFz7SBxdWUgaGEgIgorInRlciBxdWUgYXJyaW5jYXIgY3VuIGRpc2NvIGRlIHJlc2NhdGUsIGUgcmVpbnN0YWxhLWxvIGNhcmdhZG9yIGRlIGluaWNpbyAiCisiZGVuZGUgbyBkaXNjbyBkZSByZXNjYXRlLiBMZWEgYSBzZWNjafNuIDQgZGEgZG9jdW1lbnRhY2nzbiBkbyBVc3VhcmlvIGRlICIKKyJQYXJ0ZWQgcGFyYSBvYnRlciBt4WlzIGluZm9ybWFjafNuLiIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6MzY5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIHBhcnRpdGlvbiB0YWJsZSBvbiAlcyBjYW5ub3QgYmUgcmUtcmVhZCAoJXMpLiAgVGhpcyBtZWFucyB0aGUgSHVyZCBrbm93cyAiCisibm90aGluZyBhYm91dCBhbnkgbW9kaWZpY2F0aW9ucyB5b3UgbWFkZS4gIFlvdSBzaG91bGQgcmVib290IHlvdXIgY29tcHV0ZXIgIgorImJlZm9yZSBkb2luZyBhbnl0aGluZyB3aXRoICVzLiIKK21zZ3N0ciAiIgorIkEgdOFib2EgZGUgcGFydGljafNucyBkZSAlcyAoJXMpLiBJc3RvIHF1ZXJlIGRpY2lyIHF1ZSBIdXJkIG5vbiBzYWJlIG5hZGEgIgorImRhcyBtb2RpZmljYWNp825zIHF1ZSBWZC4gZml4by4gRGViZXLtYSByZWluaWNpYS1sbyBzZXUgb3JkZW5hZG9yIGFudGVzIGRlICIKKyJmYWNlciBuYWRhIGNvbiAlcy4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjM4MCBwYXJ0ZWQvcGFydGVkLmM6MjQ0MworbXNnaWQgIiIKKyJZb3Ugc2hvdWxkIHJlaW5zdGFsbCB5b3VyIGJvb3QgbG9hZGVyIGJlZm9yZSByZWJvb3RpbmcuICBSZWFkIHNlY3Rpb24gNCBvZiAiCisidGhlIFBhcnRlZCBVc2VyIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorbXNnc3RyICIiCisiRGViZXLtYSByZWluc3RhbGEtbG8gY2FyZ2Fkb3IgZGUgaW5pY2lvIGFudGVzIGRlIHJlaW5pY2lhci4gTGVhIGEgc2VjY2nzbiA0ICIKKyJkYSBkb2N1bWVudGFjafNuIGRvIFVzdWFyaW8gZGUgUGFydGVkIHBhcmEgb2J0ZXIgbeFpcyBpbmZvcm1hY2nzbi4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjc3MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB0cnlpbmcgdG8gc3luYyAlcyB0byBkaXNrIgorbXNnc3RyICIlcyB0ZW50YW5kbyBzaW5jcm9uaXphciAlcyBubyBkaXNjbyIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo0MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHN0YXQgZGV2aWNlICVzIC0gJXMuIgorbXNnc3RyICJOb24gc2UgcHVpZG8gZmFjZXIgXCJzdGF0XCIgc29icmUgbyBkaXNwb3NpdGl2byAlcyAtICVzLiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo1MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBkZXRlcm1pbmUgc2VjdG9yIHNpemUgZm9yICVzOiAlcy5cbiIKKyJVc2luZyB0aGUgZGVmYXVsdCBzZWN0b3Igc2l6ZSAoJWxsZCkuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6NTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJEZXZpY2UgJXMgaGFzIGEgbG9naWNhbCBzZWN0b3Igc2l6ZSBvZiAlbGxkLiAgTm90IGFsbCBwYXJ0cyBvZiBHTlUgUGFydGVkICIKKyJzdXBwb3J0IHRoaXMgYXQgdGhlIG1vbWVudCwgYW5kIHRoZSB3b3JraW5nIGNvZGUgaXMgSElHSExZIEVYUEVSSU1FTlRBTC5cbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjU3OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGRldGVybWluZSB0aGUgc2l6ZSBvZiAlcyAoJXMpLiIKK21zZ3N0ciAiTm9uIHNlIHB1aWRvIGRldGVybWluYS1sbyB0YW1h8W8gZGUgJXMgKCVzKSIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo2NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGdldCBpZGVudGl0eSBvZiBkZXZpY2UgJXMgLSAlcyIKK21zZ3N0ciAiTm9uIHNlIHB1aWRvIG9idGUtbGEgaWRlbnRpZGFkZSBkbyBkaXNwb3NpdGl2byAlcyAtICVzIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjY3NworbXNnaWQgIkdlbmVyaWMgSURFIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6Njk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJEZXZpY2UgJXMgaGFzIG11bHRpcGxlICglZCkgbG9naWNhbCBzZWN0b3JzIHBlciBwaHlzaWNhbCBzZWN0b3IuXG4iCisiR05VIFBhcnRlZCBzdXBwb3J0cyB0aGlzIEVYUEVSSU1FTlRBTExZIGZvciBzb21lIHNwZWNpYWwgZGlzayBsYWJlbC9maWxlICIKKyJzeXN0ZW0gY29tYmluYXRpb25zLCBlLmcuIEdQVCBhbmQgZXh0Mi8zLlxuIgorIlBsZWFzZSBjb25zdWx0IHRoZSB3ZWIgc2l0ZSBmb3IgdXAtdG8tZGF0ZSBpbmZvcm1hdGlvbi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo4NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgaW5pdGlhbGlzaW5nIFNDU0kgZGV2aWNlICVzIC0gJXMiCittc2dzdHIgIkVycm8gYW8gaW5pY2lhbGl6YS1sbyBkaXNwb3NpdGl2byBTQ1NJICVzIC0gJXMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6OTI4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGRldmljZSAlcyBoYXMgemVybyBsZW5ndGgsIGFuZCBjYW4ndCBwb3NzaWJseSBzdG9yZSBhIGZpbGUgc3lzdGVtIG9yICIKKyJwYXJ0aXRpb24gdGFibGUuICBQZXJoYXBzIHlvdSBzZWxlY3RlZCB0aGUgd3JvbmcgZGV2aWNlPyIKK21zZ3N0ciAiIgorIk8gZGlzcG9zaXRpdm8gJXMgdGVuIGxvbnhpdHVkZSBjZXJvLCBlIG5vbiBwb2RlIGFybWFjZW5hciB1biBzaXN0ZW1hIGRlICIKKyJmaWNoZWlyb3Mgb3UgdOFib2EgZGUgcGFydGljafNucy4gv05vbiBzZWxlY2Npb25hcu1hIHVuIGRpc3Bvc2l0aXZvICIKKyJlcXVpdm9jYWRvPyIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMDMyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiVW5hYmxlIHRvIGRldGVybWluZSBnZW9tZXRyeSBvZiBmaWxlL2RldmljZSAlcy4gIFlvdSBzaG91bGQgbm90IHVzZSBQYXJ0ZWQgIgorInVubGVzcyB5b3UgUkVBTExZIGtub3cgd2hhdCB5b3UncmUgZG9pbmchIgorbXNnc3RyICIiCisiTm9uIHNlIHB1aWRvIGRldGVybWluYS1sYSB4ZW9tZXRy7WEgZG8gZmljaGVpcm8vZGlzcG9zaXRpdm8uIKFOb24gZGViZXLtYSAiCisidXNhciBQYXJ0ZWQgc2Ugbm9uIHNhYmUgREUgVkVSREFERSBvIHF1ZSBlc3ThIGEgZmFjZXIhIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExMTAKK21zZ2lkICJEQUM5NjAgUkFJRCBjb250cm9sbGVyIgorbXNnc3RyICJDb250cm9sYWRvcmEgUkFJRCBEQUM5NjAiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTExNQorbXNnaWQgIlByb21pc2UgU1g4IFNBVEEgRGV2aWNlIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTEyMAorbXNnaWQgIklCTSBTMzkwIERBU0QgZHJpdmUiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTI1Cittc2dpZCAiSUJNIGlTZXJpZXMgVmlydHVhbCBEQVNEIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTEzMAorbXNnaWQgIkNvbXBhcSBTbWFydCBBcnJheSIKK21zZ3N0ciAiQ29tcGFxIFNtYXJ0IEFycmF5IgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExMzUKK21zZ2lkICJBVEFSQUlEIENvbnRyb2xsZXIiCittc2dzdHIgIkNvbnRyb2xhZG9yYSBBVEFSQUlEIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExNDAKK21zZ2lkICJJMk8gQ29udHJvbGxlciIKK21zZ3N0ciAiQ29udHJvbGFkb3JhIEkyTyIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTQ1Cittc2dpZCAiVXNlci1Nb2RlIExpbnV4IFVCRCIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExNTYKK21zZ2lkICJMaW51eCBkZXZpY2UtbWFwcGVyIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTE2MgorbXNnaWQgIlVua25vd24iCittc2dzdHIgIkRlc2Nv8WVjaWRvIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExNjkKK21zZ2lkICJwZWRfZGV2aWNlX25ldygpICBVbnN1cHBvcnRlZCBkZXZpY2UgdHlwZSIKK21zZ3N0ciAicGVkX2RldmljZV9uZXcoKSAgVGlwbyBkZSBkaXNwb3NpdGl2byBub24gc29wb3J0YWRvIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjIwODMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFcnJvciBpbmZvcm1pbmcgdGhlIGtlcm5lbCBhYm91dCBtb2RpZmljYXRpb25zIHRvIHBhcnRpdGlvbiAlcyAtLSAlcy4gIFRoaXMgIgorIm1lYW5zIExpbnV4IHdvbid0IGtub3cgYWJvdXQgYW55IGNoYW5nZXMgeW91IG1hZGUgdG8gJXMgdW50aWwgeW91IHJlYm9vdCAtLSAiCisic28geW91IHNob3VsZG4ndCBtb3VudCBpdCBvciB1c2UgaXQgaW4gYW55IHdheSBiZWZvcmUgcmVib290aW5nLiIKK21zZ3N0ciAiIgorIkVycm8gYW8gaW5mb3JtYXIgYW8gbvpjbGVvIHNvYnJlIGFzIG1vZGlmaWNhY2nzbnMgZmVpdGFzIG5hIHBhcnRpY2nzbiAlcyAtICUiCisicy4gSXN0byBxdWVyZSBkaWNpciBxdWUgTGludXggbm9uIGhhIHNhYmVyIG5hZGEgZG9zIGNhbWJpb3MgcXVlIGxsZSBmaXhvIGEgJSIKKyJzIGF0YSBxdWUgcmVpbmljaWUgLSBhc+0gcXVlIG5vbiBkZWJlcu1hIG1vbnRhbG8gb3UgZW1wcmVnYWxvIGRlIG5pbmf6biAiCisieGVpdG8gYW50ZXMgZGUgcmVpbmljaWFyLiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoyMjYyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisicGFydGVkIHdhcyB1bmFibGUgdG8gcmUtcmVhZCB0aGUgcGFydGl0aW9uIHRhYmxlIG9uICVzICglcykuICBUaGlzIG1lYW5zICIKKyJMaW51eCB3b24ndCBrbm93IGFueXRoaW5nIGFib3V0IHRoZSBtb2RpZmljYXRpb25zIHlvdSBtYWRlLiAiCittc2dzdHIgIiIKKyJPIGtlcm5lbCBub24gcHVpZG8gdm9sdmVyIGxlLWxhIHThYm9hIGRlIHBhcnRpY2nzbnMgZGUgJXMgKCVzKS4gSXN0byBxdWVyZSAiCisiZGljaXIgcXVlIExpbnV4IG5vbiBzYWJlIG5hZGEgZGFzIG1vZGlmaWNhY2nzbnMgcXVlIFZkLiBmaXhvLCBhdGEgcXVlICIKKyJyZWluaWNpZS4gRGViZXLtYSByZWluaWNpYS1sbyBzZXUgb3JkZW5hZG9yIGFudGVzIGRlIGZhY2VyIG5hZGEgY29uICVzLiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoyMzY4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGtlcm5lbCB3YXMgdW5hYmxlIHRvIHJlLXJlYWQgdGhlIHBhcnRpdGlvbiB0YWJsZSBvbiAlcyAoJXMpLiAgVGhpcyBtZWFucyAiCisiTGludXggd29uJ3Qga25vdyBhbnl0aGluZyBhYm91dCB0aGUgbW9kaWZpY2F0aW9ucyB5b3UgbWFkZSB1bnRpbCB5b3UgIgorInJlYm9vdC4gIFlvdSBzaG91bGQgcmVib290IHlvdXIgY29tcHV0ZXIgYmVmb3JlIGRvaW5nIGFueXRoaW5nIHdpdGggJXMuIgorbXNnc3RyICIiCisiTyBrZXJuZWwgbm9uIHB1aWRvIHZvbHZlciBsZS1sYSB04WJvYSBkZSBwYXJ0aWNp825zIGRlICVzICglcykuIElzdG8gcXVlcmUgIgorImRpY2lyIHF1ZSBMaW51eCBub24gc2FiZSBuYWRhIGRhcyBtb2RpZmljYWNp825zIHF1ZSBWZC4gZml4bywgYXRhIHF1ZSAiCisicmVpbmljaWUuIERlYmVy7WEgcmVpbmljaWEtbG8gc2V1IG9yZGVuYWRvciBhbnRlcyBkZSBmYWNlciBuYWRhIGNvbiAlcy4iCisKKyM6IGxpYnBhcnRlZC9jcy9nZW9tLmM6MTYyCittc2dpZCAiQ2FuJ3QgaGF2ZSB0aGUgZW5kIGJlZm9yZSB0aGUgc3RhcnQhIgorbXNnc3RyICKhQSBmaW4gZGEgcGFydGljafNuIG5vbiBwb2RlIGVzdGFyIGRldHLhcyBkbyBjb21lem8hIgorCisjOiBsaWJwYXJ0ZWQvY3MvZ2VvbS5jOjE2OQorbXNnaWQgIkNhbid0IGhhdmUgYSBwYXJ0aXRpb24gb3V0c2lkZSB0aGUgZGlzayEiCittc2dzdHIgIqFOb24gc2UgcG9kZSB0ZXIgdW5oYSBwYXJ0aWNp824gZvNyYSBkbyBkaXNjbyEiCisKKyM6IGxpYnBhcnRlZC9jcy9nZW9tLmM6MzY2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJBdHRlbXB0IHRvIHdyaXRlIHNlY3RvcnMgJWxkLSVsZCBvdXRzaWRlIG9mIHBhcnRpdGlvbiBvbiAlcy4iCittc2dzdHIgIlRlbnThcm9uc2UgZXNjcmliaS1sb3Mgc2VjdG9yZXMgJWxkLSVsZCBm83JhIGRhIHBhcnRpY2nzbiBlbiAlcyIKKworIzogbGlicGFydGVkL2NzL2dlb20uYzo0MDYgbGlicGFydGVkL2ZzL2xpbnV4X3N3YXAvbGludXhfc3dhcC5jOjQ3NQorbXNnaWQgImNoZWNraW5nIGZvciBiYWQgYmxvY2tzIgorbXNnc3RyICJidXNjYW5kbyBvcyBibG9xdWVzIGVycvNuZW9zIgorCisjOiBsaWJwYXJ0ZWQvZGVidWcuYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFja3RyYWNlIGhhcyAlZCBjYWxscyBvbiBzdGFjazpcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZGVidWcuYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXNzZXJ0aW9uICglcykgYXQgJXM6JWQgaW4gZnVuY3Rpb24gJXMoKSBmYWlsZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBvcGVuICVzIC0gdW5yZWNvZ25pc2VkIGRpc2sgbGFiZWwuIgorbXNnc3RyICJOb24gc2UgcHVpZG8gYWJyaXIgJXMgLSBldGlxdWV0YSBkZSBkaXNjbyBub24gcmVjb/FlY2lkYS4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6NDcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGlzIGxpYnBhcnRlZCBkb2Vzbid0IGhhdmUgd3JpdGUgc3VwcG9ydCBmb3IgJXMuICBQZXJoYXBzIGl0IHdhcyBjb21waWxlZCAiCisicmVhZC1vbmx5LiIKK21zZ3N0ciAiIgorIkVzdGEgdmVyc2nzbiBkZSBsaWJwYXJ0ZWQgbm9uIHTpbiBzb3BvcnRlIGRlIGVzY3JpdHVyYSBwYXJhICVzLiBTZSBjYWRyYSAiCisiZXN04SBjb21waWxhZG8gcGFyYSBz8yBsZWN0dXJhLiIKKworIzogbGlicGFydGVkL2Rpc2suYzo1OTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlBhcnRpdGlvbiAlZCBpcyAlcywgYnV0IHRoZSBmaWxlIHN5c3RlbSBpcyAlcy4iCittc2dzdHIgIkEgcGFydGljafNuICVkIHRlbiAlLjNmTWIsIHBlcm8gbyBzaXN0ZW1hIGRlIGZpY2hlaXJvcyB0ZW4gJS4zZk1iLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxMDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGRpc2sgbGFiZWxzIGRvIG5vdCBzdXBwb3J0IGV4dGVuZGVkIHBhcnRpdGlvbnMuIgorbXNnc3RyICJBcyBldGlxdWV0YXMgZGUgZGlzY28gJXMgbm9uIHNvcG9ydGFuIHBhcnRpY2nzbnMgZXh0ZW5kaWRhcy4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTYzNAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkaXNrIGxhYmVscyBkb24ndCBzdXBwb3J0IGxvZ2ljYWwgb3IgZXh0ZW5kZWQgcGFydGl0aW9ucy4iCittc2dzdHIgIiIKKyJBcyBldGlxdWV0YXMgZGUgZGlzY28gJXMgbm9uIHNvcG9ydGFuIHBhcnRpY2nzbnMgbPN4aWNhcyBvdSBleHRlbmRpZGFzLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNjQ3CisjLCBmdXp6eQorbXNnaWQgIlRvbyBtYW55IHByaW1hcnkgcGFydGl0aW9ucy4iCittc2dzdHIgIkRlbWFzaWFkYXMgcGFydGljafNucyBwcmltYXJpYXMuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE2NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbid0IGFkZCBhIGxvZ2ljYWwgcGFydGl0aW9uIHRvICVzLCBiZWNhdXNlIHRoZXJlIGlzIG5vIGV4dGVuZGVkIHBhcnRpdGlvbi4iCittc2dzdHIgIiIKKyJOb24gc2UgcG9kZSBlbmdhZGlyIHVuaGEgcGFydGljafNuIGzzeGljYSBhICVzLCBwb3JxdWUgbm9uIGhhaSB1bmhhICIKKyJwYXJ0aWNp824gZXN0ZW5kaWRhLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNjgwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJDYW4ndCBoYXZlIG1vcmUgdGhhbiBvbmUgZXh0ZW5kZWQgcGFydGl0aW9uIG9uICVzLiIKK21zZ3N0ciAiTm9uIHNlIHBvZGUgdGVyIG3haXMgZGUgdW5oYSBwYXJ0aWNp824gZXN0ZW5kaWRhIGVuICVzIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE2OTAKK21zZ2lkICJDYW4ndCBoYXZlIGxvZ2ljYWwgcGFydGl0aW9ucyBvdXRzaWRlIG9mIHRoZSBleHRlbmRlZCBwYXJ0aXRpb24uIgorbXNnc3RyICJOb24gc2UgcG9kZW4gdGVyIHBhcnRpY2nzbnMgbPN4aWNhcyBm83JhIGRhIHBhcnRpY2nzbiBlc3RlbmRpZGEuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE3MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2FuJ3QgaGF2ZSBhIGxvZ2ljYWwgcGFydGl0aW9uIG91dHNpZGUgb2YgdGhlIGV4dGVuZGVkIHBhcnRpdGlvbiBvbiAlcy4iCittc2dzdHIgIiIKKyJOb24gc2UgcG9kZSB0ZXIgdW5oYSBwYXJ0aWNp824gbPN4aWNhIGbzcmEgZGEgcGFydGljafNuIGVzdGVuZGlkYSBlbiAlcy4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTcyNSBsaWJwYXJ0ZWQvZGlzay5jOjE3NzkgbGlicGFydGVkL2Rpc2suYzoxOTQ1CisjLCBmdXp6eQorbXNnaWQgIkNhbid0IGhhdmUgb3ZlcmxhcHBpbmcgcGFydGl0aW9ucy4iCittc2dzdHIgIk5vbiBzZSBwb2RlbiB0ZXIgcGFydGljafNucyBzb2xhcOFuZG9zZS4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTczMworbXNnaWQgIkNhbid0IGhhdmUgYSBwcmltYXJ5IHBhcnRpdGlvbiBpbnNpZGUgYW4gZXh0ZW5kZWQgcGFydGl0aW9uLiIKK21zZ3N0ciAiIgorIk5vbiBzZSBwb2RlIHRlciB1bmhhIHBhcnRpY2nzbiBwcmltYXJpYSBkZW50cm8gZHVuaGEgcGFydGljafNuIGVzdGVuZGlkYS4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE0MAorbXNnaWQgIm1ldGFkYXRhIgorbXNnc3RyICJtZXRhZGF0b3MiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE0MgorbXNnaWQgImZyZWUiCittc2dzdHIgImxpYnJlIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNDQgcGFydGVkL3VpLmM6MTE2OSBwYXJ0ZWQvdWkuYzoxMTk3Cittc2dpZCAiZXh0ZW5kZWQiCittc2dzdHIgImVzdGVuZGlkYSIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTQ2IHBhcnRlZC91aS5jOjExNzMgcGFydGVkL3VpLmM6MTIwMQorbXNnaWQgImxvZ2ljYWwiCittc2dzdHIgImzzeGljYSIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTQ4IHBhcnRlZC91aS5jOjExNjUgcGFydGVkL3VpLmM6MTE5MworbXNnaWQgInByaW1hcnkiCittc2dzdHIgInByaW1hcmlhIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNjQKK21zZ2lkICJib290IgorbXNnc3RyICJpbmljaW8iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE2NgorbXNnaWQgInJvb3QiCittc2dzdHIgInJhaXoiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE2OAorbXNnaWQgInN3YXAiCittc2dzdHIgImludGVyY2FtYmlvIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNzAKK21zZ2lkICJoaWRkZW4iCittc2dzdHIgIm9jdWx0YSIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTcyCittc2dpZCAicmFpZCIKK21zZ3N0ciAicmFpZCIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTc0Cittc2dpZCAibHZtIgorbXNnc3RyICJsdm0iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE3NgorbXNnaWQgImxiYSIKK21zZ3N0ciAibGJhIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNzgKK21zZ2lkICJocC1zZXJ2aWNlIgorbXNnc3RyICJocC1zZXJ2aWNlIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxODAKK21zZ2lkICJwYWxvIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE4MgorbXNnaWQgInByZXAiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTg0Cittc2dpZCAibXNmdHJlcyIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxOTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gcGFydGl0aW9uIGZsYWcsICVkLiIKK21zZ3N0ciAiTW9kaWZpY2Fkb3IgZGUgcGFydGljafNucyBkZXNjb/FlY2lkbywgJWQuIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6NzgKK21zZ2lkICJJbmZvcm1hdGlvbiIKK21zZ3N0ciAiSW5mb3JtYWNp824iCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo3OQorbXNnaWQgIldhcm5pbmciCittc2dzdHIgIkF2aXNvIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODAKK21zZ2lkICJFcnJvciIKK21zZ3N0ciAiRXJybyIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjgxCittc2dpZCAiRmF0YWwiCittc2dzdHIgIk1vaSBncmF2ZSIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjgyCittc2dpZCAiQnVnIgorbXNnc3RyICJFcnJvIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODMKK21zZ2lkICJObyBJbXBsZW1lbnRhdGlvbiIKK21zZ3N0ciAiU2VuIEltcGxlbWVudGFjafNuIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODcKK21zZ2lkICJGaXgiCittc2dzdHIgIkFycmFueGFyIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODgKK21zZ2lkICJZZXMiCittc2dzdHIgIlNpIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODkKK21zZ2lkICJObyIKK21zZ3N0ciAiTm9uIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6OTAKK21zZ2lkICJPSyIKK21zZ3N0ciAiQWNlcHRhciIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjkxCittc2dpZCAiUmV0cnkiCittc2dzdHIgIlJlaW50ZW50YXIiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo5MgorbXNnaWQgIklnbm9yZSIKK21zZ3N0ciAiSWdub3JhciIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjkzCittc2dpZCAiQ2FuY2VsIgorbXNnc3RyICJDYW5jZWxhciIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjEzMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIkEgYnVnIGhhcyBiZWVuIGRldGVjdGVkIGluIEdOVSBQYXJ0ZWQuICBSZWZlciB0byB0aGUgd2ViIHNpdGUgb2YgcGFydGVkICIKKyJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvcGFydGVkL3BhcnRlZC5odG1sIGZvciBtb3JlIGluZm9ybWF0aW9ucyBvZiB3aGF0ICIKKyJjb3VsZCBiZSB1c2VmdWwgZm9yIGJ1ZyBzdWJtaXR0aW5nISAgUGxlYXNlIGVtYWlsIGEgYnVnIHJlcG9ydCB0byBidWctIgorInBhcnRlZEBnbnUub3JnIGNvbnRhaW5pbmcgYXQgbGVhc3QgdGhlIHZlcnNpb24gKCVzKSBhbmQgdGhlIGZvbGxvd2luZyAiCisibWVzc2FnZTogICIKK21zZ3N0ciAiIgorIkRldGVjdG91c2UgdW4gZXJybyBlbiBHTlUgcGFydGVkLiBQb3IgZmF2b3IsIGVudu1lIHVuIGluZm9ybWUgZGUgZXJybyBhIGJ1Zy0iCisicGFydGVkQGdudS5vcmcgcXVlIGNvbnRl8WEgYSB2ZXJzafNuICglcykgZSBhIHNlZ3VpbnRlIG1lbnNheGU6IgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjM4NAorbXNnaWQgIkNvdWxkIG5vdCBkZXRlY3QgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICJOb24gc2UgcG9kZSBkZXRlY3RhciB1biBzaXN0ZW1hIGRlIGZpY2hlaXJvcy4iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6Mzk1CisjLCBmdXp6eQorbXNnaWQgIlRoZSBmaWxlIHN5c3RlbSBpcyBiaWdnZXIgdGhhbiBpdHMgdm9sdW1lISIKK21zZ3N0ciAiTyBzaXN0ZW1hIGRlIGZpY2hlaXJvcyDpIG1haW9yIGPzIHNldSB2b2x1bWUuIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjQwMworIywgYy1mb3JtYXQKK21zZ2lkICJTdXBwb3J0IGZvciBvcGVuaW5nICVzIGZpbGUgc3lzdGVtcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiIgorIk8gc29wb3J0ZSBkZSBhcGVydHVyYSBkZSBzaXN0ZW1hcyBkZSBmaWNoZWlyb3MgJXMgbm9uIGVzdOEgaW1wbGVtZW50YWRvICIKKyJh7W5kYS4iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnQgZm9yIGNyZWF0aW5nICVzIGZpbGUgc3lzdGVtcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiIgorIk8gc29wb3J0ZSBkZSBjcmVhY2nzbiBkZSBzaXN0ZW1hcyBkZSBmaWNoZWlyb3MgJXMgbm9uIGVzdOEgaW1wbGVtZW50YWRvICIKKyJh7W5kYS4iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnQgZm9yIGNoZWNraW5nICVzIGZpbGUgc3lzdGVtcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiIgorIk8gc29wb3J0ZSBkZSBjb21wcm9iYWNp824gZGUgc2lzdGVtYXMgZGUgZmljaGVpcm9zICVzIG5vbiBlc3ThIGltcGxlbWVudGFkbyAiCisiYe1uZGEuIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjU3MQorbXNnaWQgInJhdyBibG9jayBjb3B5aW5nIgorbXNnc3RyICJjb3BpYW5kbyBibG9xdWUgYSBibG9xdWUiCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NTgyCittc2dpZCAiZ3Jvd2luZyBmaWxlIHN5c3RlbSIKK21zZ3N0ciAiYXVtZW50YW5kbyBvIHNpc3RlbWEgZGUgZmljaGVpcm9zIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjYyMgorbXNnaWQgIkNhbid0IGNvcHkgb250byBhbiBvdmVybGFwcGluZyBwYXJ0aXRpb24uIgorbXNnc3RyICJOb24gc2UgcG9kZSBjb3BpYXIgbnVuaGEgcGFydGljafNuIHF1ZSBzZSBzb2xhcGEuIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjY0NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIkRpcmVjdCBzdXBwb3J0IGZvciBjb3B5aW5nIGZpbGUgc3lzdGVtcyBpcyBub3QgeWV0IGltcGxlbWVudGVkIGZvciAlcy4gICIKKyJIb3dldmVyLCBzdXBwb3J0IGZvciByZXNpemluZyBpcyBpbXBsZW1lbnRlZC4gIFRoZXJlZm9yZSwgdGhlIGZpbGUgc3lzdGVtICIKKyJjYW4gYmUgY29waWVkIGlmIHRoZSBuZXcgcGFydGl0aW9uIGlzIGF0IGxlYXN0IGFzIGJpZyBhcyB0aGUgb2xkIG9uZS4gIFNvLCAiCisiZWl0aGVyIHNocmluayB0aGUgcGFydGl0aW9uIHlvdSBhcmUgdHJ5aW5nIHRvIGNvcHksIG9yIGNvcHkgdG8gYSBiaWdnZXIgIgorInBhcnRpdGlvbi4iCittc2dzdHIgIiIKKyJPIHNvcG9ydGUgZGlyZWN0byBkZSBjb3BpYSBkZSBzaXN0ZW1hcyBkZSBmaWNoZWlyb3Mgbm9uIGVzdOEgaW1wbGVtZW50YWRvICIKKyJh7W5kYSBwYXJhICVzLiBOZW1iYXJnYW50ZXMsIG8gc29wb3J0ZSBwYXJhIG8gY2FtYmlvIGRlIHRhbWHxbyBz7SBlc3ThLiBQb2xvICIKKyJ0YW50bywgcPNkZXNlIGNvcGlhLWxvIHNpc3RlbWEgZGUgZmljaGVpcm9zIHNlIGEgcGFydGljafNuIG5vdmEg6SBhbG9tZW5vcyAiCisidGFuIGdyYW5kZSBjb21hIGEgdmVsbGEuIEFz7SBxdWUsIG91IGJlbiByZWR1emEgYSBwYXJ0aWNp824gcXVlIHF1ZXJlICIKKyJjb3BpYXIsIG91IGNvcGllIG51bmhhIHBhcnRpY2nzbiBt4WlzIGdyYW5kZS4iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnQgZm9yIGNvcHlpbmcgJXMgZmlsZSBzeXN0ZW1zIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICIiCisiTyBzb3BvcnRlIGRlIGNvcGlhIGRlIHNpc3RlbWFzIGRlIGZpY2hlaXJvcyAlcyBub24gZXN04SBpbXBsZW1lbnRhZG8gYe1uZGEuIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjY5NgorIywgYy1mb3JtYXQKK21zZ2lkICJTdXBwb3J0IGZvciByZXNpemluZyAlcyBmaWxlIHN5c3RlbXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiIKKyJPIHNvcG9ydGUgZGUgbW9kaWZpY2FjafNuIGRvIHRhbWHxbyBkZSBzaXN0ZW1hcyBkZSBmaWNoZWlyb3MgJXMgbm9uIGVzdOEgIgorImltcGxlbWVudGFkbyBh7W5kYS4iCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjMxNQorbXNnaWQgImNyZWF0aW5nIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQwMgorIywgZnV6enkKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gaXMgaW4gYW4gaW52YWxpZCBzdGF0ZS4gIFBlcmhhcHMgaXQgaXMgbW91bnRlZD8iCittc2dzdHIgIk8gc2lzdGVtYSBkZSBmaWNoZWlyb3Mg6SBtYWlvciBj8yBzZXUgdm9sdW1lLiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDEwCittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIGlzIGluIG9sZCAodW5yZXNpemVhYmxlKSBmb3JtYXQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQxNgorbXNnaWQgIkludmFsaWQgZnJlZSBibG9ja3MgY291bnQuICBSdW4gcmVpc2VyZnNjayAtLWNoZWNrIGZpcnN0LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0MzEKKyMsIGZ1enp5Cittc2dpZCAiY2hlY2tpbmciCittc2dzdHIgImNoZWNrIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0MzcKK21zZ2lkICJSZWlzZXJmcyB0cmVlIHNlZW1zIHRvIGJlIGNvcnJ1cHRlZC4gIFJ1biByZWlzZXJmc2NrIC0tY2hlY2sgZmlyc3QuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQ0OQorIywgZnV6enkKK21zZ2lkICIiCisiVGhlIHJlaXNlcmZzIGZpbGUgc3lzdGVtIHBhc3NlZCBhIGJhc2ljIGNoZWNrLiAgRm9yIGEgbW9yZSBjb21wcmVoZW5zaXZlICIKKyJjaGVjaywgcnVuIHJlaXNlcmZzY2sgLS1jaGVjay4iCittc2dzdHIgIiIKKyJPIHNpc3RlbWEgZGUgZmljaGVpcm9zIGV4dDIgcGFzb3UgdW5oYSBjb21wcm9iYWNp824gYuFzaWNhLiBQYXJhIHVuaGEgIgorImNvbXByb2JhY2nzbiBt4WlzIGEgZm9uZG8sIGVtcHJlZ3VlIG8gcHJvZ3JhbWEgZTJmc2NrLiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDc0CisjLCBmdXp6eQorbXNnaWQgIlNvcnJ5LCBjYW4ndCBtb3ZlIHRoZSBzdGFydCBvZiByZWlzZXJmcyBwYXJ0aXRpb25zIHlldC4iCittc2dzdHIgIqFT7W50b28sIGFpbmRhIG5vbiBwb2RvIG1vdmUtbG8gcHJpbmNpcGlvIGRhcyBwYXJ0aWNp825zIGV4dDIhIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0OTAKK21zZ2lkICJDb3VsZG4ndCByZW9wZW4gZGV2aWNlIGFic3RyYWN0aW9uIGxheWVyIGZvciByZWFkL3dyaXRlLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo1MDggbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo1NTIKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MjUwIGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NjI5Cittc2dpZCAic2hyaW5raW5nIgorbXNnc3RyICJlbmNvbGxlbmRvIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo1MjAKKyMsIGZ1enp5Cittc2dpZCAiZXhwYW5kaW5nIgorbXNnc3RyICJBdmlzbyIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NTkyCittc2dpZCAiQ291bGRuJ3QgY3JlYXRlIHJlaXNlcmZzIGRldmljZSBhYnN0cmFjdGlvbiBoYW5kbGVyLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo2MDYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkRldmljZSBpcyB0b28gc21hbGwgZm9yICVsdSBibG9ja3MuIgorbXNnc3RyICJPIHNpc3RlbWEgZGUgZmljaGVpcm9zIOkgcGVxdWVubyBkZSBt4WlzIHBhcmEgZXh0Mi4iCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjYxNQorbXNnaWQgImNvcHlpbmciCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IHJlc29sdmUgc3ltYm9sICVzLiAgRXJyb3I6ICVzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo3MDQKK21zZ2lkICJHTlUgUGFydGVkIGZvdW5kIGFuIGludmFsaWQgbGlicmVpc2VyZnMgbGlicmFyeS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJHTlUgUGFydGVkIGhhcyBkZXRlY3RlZCBsaWJyZWlzZXJmcyBpbnRlcmZhY2UgdmVyc2lvbiBtaXNtYXRjaC4gIEZvdW5kICVkLSUiCisiZCwgcmVxdWlyZWQgJWQuIFJlaXNlckZTIHN1cHBvcnQgd2lsbCBiZSBkaXNhYmxlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9haXguYzoxMzcKKyMsIGZ1enp5Cittc2dpZCAiU3VwcG9ydCBmb3IgcmVhZGluZyBBSVggZGlzayBsYWJlbHMgaXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiIKKyJPIHNvcG9ydGUgZGUgY3JlYWNp824gZGUgc2lzdGVtYXMgZGUgZmljaGVpcm9zICVzIG5vbiBlc3ThIGltcGxlbWVudGFkbyAiCisiYe1uZGEuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2FpeC5jOjE0OAorIywgZnV6enkKK21zZ2lkICJTdXBwb3J0IGZvciB3cml0aW5nIEFJWCBkaXNrIGxhYmVscyBpcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiIgorIk8gc29wb3J0ZSBkZSBjcmVhY2nzbiBkZSBzaXN0ZW1hcyBkZSBmaWNoZWlyb3MgJXMgbm9uIGVzdOEgaW1wbGVtZW50YWRvICIKKyJh7W5kYS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYWl4LmM6MTYxCisjLCBmdXp6eQorbXNnaWQgIiIKKyJTdXBwb3J0IGZvciBhZGRpbmcgcGFydGl0aW9ucyB0byBBSVggZGlzayBsYWJlbHMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiIKKyJPIHNvcG9ydGUgZGUgY3JlYWNp824gZGUgc2lzdGVtYXMgZGUgZmljaGVpcm9zICVzIG5vbiBlc3ThIGltcGxlbWVudGFkbyAiCisiYe1uZGEuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2FpeC5jOjE3MQorIywgZnV6enkKK21zZ2lkICIiCisiU3VwcG9ydCBmb3IgZHVwbGljYXRpbmcgcGFydGl0aW9ucyBpbiBBSVggZGlzayBsYWJlbHMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiIKKyJPIHNvcG9ydGUgZGUgY3JlYWNp824gZGUgc2lzdGVtYXMgZGUgZmljaGVpcm9zICVzIG5vbiBlc3ThIGltcGxlbWVudGFkbyAiCisiYe1uZGEuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2FpeC5jOjE4OQorIywgZnV6enkKK21zZ2lkICIiCisiU3VwcG9ydCBmb3Igc2V0dGluZyBzeXN0ZW0gdHlwZSBvZiBwYXJ0aXRpb25zIGluIEFJWCBkaXNrIGxhYmVscyBpcyBub3QgIgorImltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiIKKyJPIHNvcG9ydGUgZGUgY3JlYWNp824gZGUgc2lzdGVtYXMgZGUgZmljaGVpcm9zICVzIG5vbiBlc3ThIGltcGxlbWVudGFkbyAiCisiYe1uZGEuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2FpeC5jOjE5OQorIywgZnV6enkKK21zZ2lkICJTdXBwb3J0IGZvciBzZXR0aW5nIGZsYWdzIGluIEFJWCBkaXNrIGxhYmVscyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiIgorIk8gc29wb3J0ZSBkZSBjcmVhY2nzbiBkZSBzaXN0ZW1hcyBkZSBmaWNoZWlyb3MgJXMgbm9uIGVzdOEgaW1wbGVtZW50YWRvICIKKyJh7W5kYS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYnNkLmM6NTAxIGxpYnBhcnRlZC9sYWJlbHMvZGFzZC5jOjc1NQorIzogbGlicGFydGVkL2xhYmVscy9kb3MuYzoxOTc0IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6NzcwCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjE0NDggbGlicGFydGVkL2xhYmVscy9sb29wLmM6MjQ4CisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjE0MDggbGlicGFydGVkL2xhYmVscy9wYzk4LmM6NzU5CisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjEwNDEgbGlicGFydGVkL2xhYmVscy9zdW4uYzo3MDUKK21zZ2lkICJVbmFibGUgdG8gc2F0aXNmeSBhbGwgY29uc3RyYWludHMgb24gdGhlIHBhcnRpdGlvbi4iCittc2dzdHIgIk5vbiBzZSBwdWlkZXJvbiBzYXRpc2ZhY2VyIHTzZGFsYXMgcmVzdHJpY2Np825zIGRhIHBhcnRpY2nzbi4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYnNkLmM6NTI2CisjLCBmdXp6eQorbXNnaWQgIlVuYWJsZSB0byBhbGxvY2F0ZSBhIGJzZCBkaXNrbGFiZWwgc2xvdC4iCittc2dzdHIgIk5vbiBzZSBwdWlkbyByZXNlcnZhciB1bmhhIHJh8XVyYSBkZSBldGlxdWV0YSBkZSBkaXNjbyBCU0QiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZGFzZC5jOjE2NgorIywgZnV6enkKK21zZ2lkICJVbmFibGUgdG8gZGV0ZXJtaW5lIHRoZSBibG9jayBzaXplIG9mIHRoaXMgZGFzZCIKK21zZ3N0ciAiTm9uIHNlIHB1aWRvIGRldGVybWluYS1sbyB0YW1h8W8gZGUgJXMgKCVzKSIKKworIzogbGlicGFydGVkL2xhYmVscy9kYXNkLmM6NzgxCisjLCBmdXp6eQorbXNnaWQgIlVuYWJsZSB0byBhbGxvY2F0ZSBhIGRhc2QgZGlza2xhYmVsIHNsb3QiCittc2dzdHIgIk5vbiBzZSBwdWlkbyByZXNlcnZhciB1bmhhIHJh8XVyYSBkZSBldGlxdWV0YSBkZSBkaXNjbyBCU0QiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZG9zLmM6ODI3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHBhcnRpdGlvbiB0YWJsZSBvbiAlcyAtLSB3cm9uZyBzaWduYXR1cmUgJXguIgorbXNnc3RyICJU4WJvYSBkZSBwYXJ0aWNp825zIGluY29ycmVjdGEgZW4gJXMgLSBzaW5hdHVyYSAleCBpbmNvcnJlY3RhIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rvcy5jOjg1NQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHBhcnRpdGlvbiB0YWJsZSAtIHJlY3Vyc2l2ZSBwYXJ0aXRpb24gb24gJXMuIgorbXNnc3RyICJU4WJvYSBkZSBwYXJ0aWNp825zIGluY29ycmVjdGEgLSBwYXJ0aWNp824gcmVjdXJzaXZhIGVuICVzLiIKKworIzogbGlicGFydGVkL2xhYmVscy9kb3MuYzoxMzE4CisjLCBmdXp6eQorbXNnaWQgIkV4dGVuZGVkIHBhcnRpdGlvbnMgY2Fubm90IGJlIGhpZGRlbiBvbiBtc2RvcyBkaXNrIGxhYmVscy4iCittc2dzdHIgIiIKKyJBcyBwYXJ0aWNp825zIGV4dDIgbm9uIHBvZGVuIGVzdGFyIG9jdWx0YXMgZW4gZXRpcXVldGFzIGRlIGRpc2NvIG1zZG9zLiIKKworIzogbGlicGFydGVkL2xhYmVscy9kb3MuYzoxOTU4Cittc2dpZCAiUGFydGVkIGNhbid0IHJlc2l6ZSBwYXJ0aXRpb25zIG1hbmFnZWQgYnkgV2luZG93cyBEeW5hbWljIERpc2suIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6MTkwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyBoYXMgbm8gZXh0ZW5kZWQgcGFydGl0aW9uICh2b2x1bWUgaGVhZGVyIHBhcnRpdGlvbikuIgorbXNnc3RyICIiCisiJXMgbm9uIHRlbiB1bmhhIHBhcnRpY2nzbiBlc3RlbmRpZGEgKHBhcnRpY2nzbiBkZSBjYWJlY2VpcmEgZGUgdm9sdW1lKS4gU2UgIgorImlnbm9yYSwgaGFuc2UgYm9ycmFyIG9zIHZvbHVtZXMgZGUgaW5pY2lvLiIKKworIzogbGlicGFydGVkL2xhYmVscy9kdmguYzozMTMKK21zZ2lkICJDaGVja3N1bSBpcyB3cm9uZywgaW5kaWNhdGluZyB0aGUgcGFydGl0aW9uIHRhYmxlIGlzIGNvcnJ1cHQuIgorbXNnc3RyICIiCisiQSBzdW1hIGRlIGNvbXByb2JhY2nzbiDpIGluY29ycmVjdGEsIG8gcXVlIGluZGljYSBxdWUgYSB04WJvYSBkZSBwYXJ0aWNp824gIgorImVzdOEgY29ycm9tcGlkYS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6NjE2Cittc2dpZCAiT25seSBwcmltYXJ5IHBhcnRpdGlvbnMgY2FuIGJlIHJvb3QgcGFydGl0aW9ucy4iCittc2dzdHIgIlPzIGFzIHBhcnRpY2nzbnMgcHJpbWFyaWFzIHBvZGVuIHNlciBwYXJ0aWNp825zIHJhaXouIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjYzMAorbXNnaWQgIk9ubHkgcHJpbWFyeSBwYXJ0aXRpb25zIGNhbiBiZSBzd2FwIHBhcnRpdGlvbnMuIgorbXNnc3RyICJT8yBhcyBwYXJ0aWNp825zIHByaW1hcmlhcyBwb2RlbiBzZXIgcGFydGljafNucyBkZSBpbnRlcmNhbWJpby4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6NjQ0Cittc2dpZCAiT25seSBsb2dpY2FsIHBhcnRpdGlvbnMgY2FuIGJlIGEgYm9vdCBmaWxlLiIKK21zZ3N0ciAiU/MgYXMgcGFydGljafNucyBs83hpY2FzIHBvZGVuIHNlciB1biBmaWNoZWlybyBkZSBpbmljaW8uIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjcyMQorbXNnaWQgIk9ubHkgbG9naWNhbCBwYXJ0aXRpb25zIChib290IGZpbGVzKSBoYXZlIGEgbmFtZS4iCittc2dzdHIgIlPzIGFzIHBhcnRpY2nzbnMgbPN4aWNhcyAoZmljaGVpcm9zIGRlIGluaWNpbykgcG9kZW4gdGVyIHVuIG5vbWUuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjgxMgorbXNnaWQgIlRvbyBtYW55IHByaW1hcnkgcGFydGl0aW9ucyIKK21zZ3N0ciAiRGVtYXNpYWRhcyBwYXJ0aWNp825zIHByaW1hcmlhcy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIG9wZW4gZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHNlZWsgZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHJlYWQgZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMTMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyB3cml0ZSBlcnJvclxuIgorIiVzXG4iCittc2dzdHIgIiVzIGR1cmFudGUgYSBlc2NyaXR1cmEgZW4gJXMiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIElPQ1RMIGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBBUEkgdmVyc2lvbiBtaXNtYXRjaFxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgVW5zdXBwb3J0ZWQgZGlzayB0eXBlXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBVbnN1cHBvcnRlZCBkaXNrIGZvcm1hdFxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEzMAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIERpc2sgaW4gdXNlXG4iCisiJXNcbiIKK21zZ3N0ciAiJXMgICVzICAlcyIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgQ29uZmlnIGZpbGUgc3ludGF4IGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBWb2x1bWUgbGFiZWwgaXMgY29ycnVwdGVkLlxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjE0MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgYSBkYXRhIHNldCBuYW1lIGlzIGNvcnJ1cHRlZC5cbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHNwYWNlIGFsbG9jYXRpb25cbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIGRldmljZSB2ZXJpZmljYXRpb24gZmFpbGVkXG4iCisiVGhlIHNwZWNpZmllZCBkZXZpY2UgaXMgbm90IGEgdmFsaWQgREFTRCBkZXZpY2VcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBGYXRhbCBlcnJvclxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzo0NTQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBjb250YWlucyBHUFQgc2lnbmF0dXJlcywgaW5kaWNhdGluZyB0aGF0IGl0IGhhcyBhIEdQVCB0YWJsZS4gIEhvd2V2ZXIsIGl0ICIKKyJkb2VzIG5vdCBoYXZlIGEgdmFsaWQgZmFrZSBtc2RvcyBwYXJ0aXRpb24gdGFibGUsIGFzIGl0IHNob3VsZC4gIFBlcmhhcHMgaXQgIgorIndhcyBjb3JydXB0ZWQgLS0gcG9zc2libHkgYnkgYSBwcm9ncmFtIHRoYXQgZG9lc24ndCB1bmRlcnN0YW5kIEdQVCBwYXJ0aXRpb24gIgorInRhYmxlcy4gIE9yIHBlcmhhcHMgeW91IGRlbGV0ZWQgdGhlIEdQVCB0YWJsZSwgYW5kIGFyZSBub3cgdXNpbmcgYW4gbXNkb3MgIgorInBhcnRpdGlvbiB0YWJsZS4gIElzIHRoaXMgYSBHUFQgcGFydGl0aW9uIHRhYmxlPyIKK21zZ3N0ciAiIgorIiVzIGNvbnTpbiBzaW5hdHVyYXMgR1BULCBvIHF1ZSBpbmRpY2EgcXVlIHRlbiB1bmhhIHThYm9hIEdQVC4gTmVtYmFyZ2FudGVzLCAiCisibm9uIHRlbiB1bmhhIHThYm9hIGRlIHBhcnRpY2nzbiBtc2RvcyBmYWxzYSB24WxpZGEsIHRhbCBjb21vIGRlYmVy7WEuIFNlICIKKyJjYWRyYSBlc3ThIGNvcnJvbXBpZGEgLSBwb3NpYmxlbWVudGUgcG9yIHVuIHByb2dyYW1hIHF1ZSBub24gZW50ZW5kZSBhcyAiCisidOFib2FzIGRlIHBhcnRpY2nzbiBHUFQuIE91IHNlIGNhZHJhIGJvcnJvdSBhIHThYm9hIEdQVCBlIGFnb3JhIGVtcHJlZ2EgdW5oYSAiCisidOFib2EgZGUgcGFydGljafNuIG1zZG9zLiC/ySBlc3RhIHVuaGEgdOFib2EgZGUgcGFydGljafNuIEdQVD8iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6NjQ4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvcm1hdCBvZiB0aGUgR1BUIHBhcnRpdGlvbiB0YWJsZSBpcyB2ZXJzaW9uICV4LCB3aGljaCBpcyBuZXdlciB0aGFuICIKKyJ3aGF0IFBhcnRlZCBjYW4gcmVjb2duaXNlLiAgUGxlYXNlIHRlbGwgdXMhICBidWctcGFydGVkQGdudS5vcmciCittc2dzdHIgIiIKKyJPIGZvcm1hdG8gZGEgdOFib2EgZGUgcGFydGljafNuIEdQVCDpIG3haXMgcmVjZW50ZSBkbyBxdWUgUGFydGVkIHBvZGUgIgorInJlY2/xZWNlci4gUG9yIGZhdm9yLCBpbmTtcXVlbm9sbzogYnVnLXBhcnRlZEBnbnUub3JnIChlbiBpbmds6XMpIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm90IGFsbCBvZiB0aGUgc3BhY2UgYXZhaWxhYmxlIHRvICVzIGFwcGVhcnMgdG8gYmUgdXNlZCwgeW91IGNhbiBmaXggdGhlIEdQVCAiCisidG8gdXNlIGFsbCBvZiB0aGUgc3BhY2UgKGFuIGV4dHJhICVsbHUgYmxvY2tzKSBvciBjb250aW51ZSB3aXRoIHRoZSBjdXJyZW50ICIKKyJzZXR0aW5nPyAiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzo4MjcKK21zZ2lkICIiCisiVGhlIGJhY2t1cCBHUFQgdGFibGUgaXMgbm90IGF0IHRoZSBlbmQgb2YgdGhlIGRpc2ssIGFzIGl0IHNob3VsZCBiZS4gIFRoaXMgIgorIm1pZ2h0IG1lYW4gdGhhdCBhbm90aGVyIG9wZXJhdGluZyBzeXN0ZW0gYmVsaWV2ZXMgdGhlIGRpc2sgaXMgc21hbGxlci4gIEZpeCwgIgorImJ5IG1vdmluZyB0aGUgYmFja3VwIHRvIHRoZSBlbmQgKGFuZCByZW1vdmluZyB0aGUgb2xkIGJhY2t1cCk/IgorbXNnc3RyICIiCisiQSBjb3BpYSBkZSBzZWd1cmlkYWRlIGRhIHThYm9hIEdQVCBub24gZXN04SBuYSBmaW4gZG8gZGlzY28sIHRhbCBjb21vICIKKyJkZWJlcu1hLiBJc3RvIHBvZGUgc2lnbmlmaWNhciBxdWUgb3V0cm8gc2lzdGVtYSBvcGVyYXRpdm8gY3JlIHF1ZSBvIGRpc2NvIOkgIgorIm3haXMgcGVxdWVuby4gv1F1ZXJlIGFycmFueGFsbywgbW92ZW5kbyBhIGNvcGlhIGRlIHNlZ3VyaWRhZGUg4SBmaW5hbCAoZSAiCisiZWxpbWluYW5kbyBhIGNvcGlhIHZlbGxhKT8iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6ODYyCisjLCBmdXp6eQorbXNnaWQgIiIKKyJUaGUgcHJpbWFyeSBHUFQgdGFibGUgaXMgY29ycnVwdCwgYnV0IHRoZSBiYWNrdXAgYXBwZWFycyBPSywgc28gdGhhdCB3aWxsIGJlICIKKyJ1c2VkLiIKK21zZ3N0ciAiIgorIkEgdOFib2EgR1BUIHByaW1hcmlhIGVzdOEgY29ycm9tcGlkYSwgcGVybyBhIGNvcGlhIGRlIHNlZ3VyaWRhZGUgc2VtZWxsYSAiCisiZXN0YXIgYmVuLCBhc+0gcXVlIOkgYSBxdWUgc2UgaGEgZW1wcmVnYXIuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjg3MAorIywgZnV6enkKK21zZ2lkICIiCisiQm90aCB0aGUgcHJpbWFyeSBhbmQgYmFja3VwIEdQVCB0YWJsZXMgYXJlIGNvcnJ1cHQuICBUcnkgbWFraW5nIGEgZnJlc2ggIgorInRhYmxlLCBhbmQgdXNpbmcgUGFydGVkJ3MgcmVzY3VlIGZlYXR1cmUgdG8gcmVjb3ZlciBwYXJ0aXRpb25zLiIKK21zZ3N0ciAiIgorIkFtYmFsYXMgZPphcyB04WJvYXMgR1BULCBwcmltYXJpYSBlIGNvcGlhLCBlc3ThbiBjb3Jyb21waWRhcy4gUHJvYmUgYSBjcmVhciAiCisidW5oYSB04WJvYSBub3ZhIGUgYSBlbXByZWdhLWxhIGNhcmFjdGVy7XN0aWNhIGRlIHJlc2NhdGUgKHJlc2N1ZSkgZGUgUGFydGVkICIKKyJwYXJhIHJlY3VwZXJhLWxhcyBwYXJ0aWNp825zLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoxODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBzaWduYXR1cmUgJXggZm9yIE1hYyBkaXNrIGxhYmVscy4iCittc2dzdHIgIlNpbmF0dXJhICV4IG5vbiB24WxpZGEgcGFyYSBldGlxdWV0YXMgZGUgZGlzY28gTWFjLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoyMjYKK21zZ2lkICJQYXJ0aXRpb24gbWFwIGhhcyBubyBwYXJ0aXRpb24gbWFwIGVudHJ5ISIKK21zZ3N0ciAioU8gbWFwYSBkZSBwYXJ0aWNp825zIG5vbiB0ZW4gdW5oYSBlbnRyYWRhIGRvIG1hcGEgZGUgcGFydGljafNucyEiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIHRvbyBzbWFsbCBmb3IgYSBNYWMgZGlzayBsYWJlbCEiCittc2dzdHIgIqElcyDpIHBlcXVlbm8gZGUgbeFpcyBwYXJhIHVuaGEgZXRpcXVldGEgZGUgZGlzY28gTWFjISIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo1MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGFydGl0aW9uICVkIGhhcyBhbiBpbnZhbGlkIHNpZ25hdHVyZSAleC4iCittc2dzdHIgIkEgcGFydGljafNuICVkIHRlbiB1bmhhIHNpbmF0dXJhICV4IG5vbiB24WxpZGEuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjU1MAorIywgYy1mb3JtYXQKK21zZ2lkICJQYXJ0aXRpb24gJWQgaGFzIGFuIGludmFsaWQgbGVuZ3RoIG9mIDAgYnl0ZXMhIgorbXNnc3RyICKhQSBwYXJ0aWNp824gJWQgdGVuIHVuaGEgbG9ueGl0dWRlIG5vbiB24WxpZGEgZGUgMCBieXRlcyEiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NTgwCisjLCBmdXp6eQorbXNnaWQgIlRoZSBkYXRhIHJlZ2lvbiBkb2Vzbid0IHN0YXJ0IGF0IHRoZSBzdGFydCBvZiB0aGUgcGFydGl0aW9uLiIKK21zZ3N0ciAiQSByZXhp824gZGUgZGF0b3Mgbm9uIGNvbWV6YSBubyBwcmluY2lwaW8gZGEgcGFydGljafNuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjU5NworIywgZnV6enkKK21zZ2lkICJUaGUgYm9vdCByZWdpb24gZG9lc24ndCBzdGFydCBhdCB0aGUgc3RhcnQgb2YgdGhlIHBhcnRpdGlvbi4iCittc2dzdHIgIkEgcmV4afNuIGRlIGluaWNpbyBub24gY29tZXphIG5vIHByaW5jaXBpbyBkYSBwYXJ0aWNp824iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NjExCittc2dpZCAiVGhlIHBhcnRpdGlvbidzIGJvb3QgcmVnaW9uIGRvZXNuJ3Qgb2NjdXB5IHRoZSBlbnRpcmUgcGFydGl0aW9uLiIKK21zZ3N0ciAiQSByZXhp824gZGUgaW5pY2lvIGRhIHBhcnRpY2nzbiBub24gb2N1cGEgdG9kYSBhIHBhcnRpY2nzbi4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NjIyCittc2dpZCAiVGhlIHBhcnRpdGlvbidzIGRhdGEgcmVnaW9uIGRvZXNuJ3Qgb2NjdXB5IHRoZSBlbnRpcmUgcGFydGl0aW9uLiIKK21zZ3N0ciAiQSByZXhp824gZGUgZGF0b3MgZGEgcGFydGljafNuIG5vbiBvY3VwYSB0b2RhIGEgcGFydGljafNuLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo2NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldlaXJkIGJsb2NrIHNpemUgb24gZGV2aWNlIGRlc2NyaXB0b3I6ICVkIGJ5dGVzIGlzIG5vdCBkaXZpc2libGUgYnkgNTEyLiIKK21zZ3N0ciAiIgorIlRhbWHxbyBkZSBibG9xdWUgZXN0cmHxbyBubyBkZXNjcmlwdG9yIGRvIGRpc3Bvc2l0aXZvOiAlZCBieXRlcyBub24g6SAiCisiZGl2aXNpYmxlIHBvciA1MTIuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjY4OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGRyaXZlciBkZXNjcmlwdG9yIHNheXMgdGhlIHBoeXNpY2FsIGJsb2NrIHNpemUgaXMgJWQgYnl0ZXMsIGJ1dCBMaW51eCAiCisic2F5cyBpdCBpcyAlZCBieXRlcy4iCittc2dzdHIgIiIKKyJPIGRlc2NyaXB0b3IgZG8gY29udHJvbGFkb3IgZGkgcXVlIG8gdGFtYfFvIGRvIGJsb3F1ZSBm7XNpY28g6SAlZCBieXRlcywgIgorInBlcm8gTGludXggZGkgcXVlIOkgZGUgJWQgYnl0ZXMuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjczNgorbXNnaWQgIk5vIHZhbGlkIHBhcnRpdGlvbiBtYXAgZm91bmQuIgorbXNnc3RyICJOb24gc2UgYXRvcG91IHVuIG1hcGEgZGUgcGFydGljafNucyB24WxpZG8uIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjc5NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvbmZsaWN0aW5nIHBhcnRpdGlvbiBtYXAgZW50cnkgc2l6ZXMhICBFbnRyeSAxIHNheXMgaXQgaXMgJWQsIGJ1dCBlbnRyeSAlZCAiCisic2F5cyBpdCBpcyAlZCEiCittc2dzdHIgIiIKKyKhVGFtYfFvcyBkYXMgZW50cmFkYXMgZG8gbWFwYSBkZSBwYXJ0aWNp825zIGNvbmZsaWN0aXZvcyEgoUEgZW50cmFkYSAxIGRpICIKKyJxdWUg6SBkZSAlZCwgcGVybyBhIGVudHJhZGEgJWQgZGkgcXVlIOkgJWQhIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjgyMgorIywgZnV6enkKK21zZ2lkICJXZWlyZCEgIFRoZXJlIGFyZSAyIHBhcnRpdGlvbnMgbWFwIGVudHJpZXMhIgorbXNnc3RyICJFc3RyYfFvIC0goWhhaSBk+mFzIGVudHJhZGFzIGRlIG1hcGEgZGUgcGFydGljafNucyEiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6MTM0NworbXNnaWQgIiIKKyJDaGFuZ2luZyB0aGUgbmFtZSBvZiBhIHJvb3Qgb3Igc3dhcCBwYXJ0aXRpb24gd2lsbCBwcmV2ZW50IExpbnV4IGZyb20gIgorInJlY29nbmlzaW5nIGl0IGFzIHN1Y2guIgorbXNnc3RyICIiCisiQ2FtYmlhLWxvIG5vbWUgZHVuaGEgcGFydGljafNuIHJhaXogb3UgZGUgaW50ZXJjYW1iaW8gaGEgaW1wZWRpciBxdWUgTGludXggYSAiCisicmVjb/FlemEgY29tYSB0YWwuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjE0NDMKKyMsIGZ1enp5Cittc2dpZCAiQ2FuJ3QgYWRkIGFub3RoZXIgcGFydGl0aW9uIC0tIHRoZSBwYXJ0aXRpb24gbWFwIGlzIHRvbyBzbWFsbCEiCittc2dzdHIgIiIKKyJOb24gc2UgcG9kZSBlbmdhZGlyIG91dHJhIHBhcnRpY2nzbiAtIG8gbWFwYSBkZSBwYXJ0aWNp825zIOkgcGVxdWVubyBkZSBt4WlzLiIKKworIzogbGlicGFydGVkL2xhYmVscy9wYzk4LmM6MzU0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHBhcnRpdGlvbiB0YWJsZSBvbiAlcy4iCittc2dzdHIgIlThYm9hIGRlIHBhcnRpY2nzbnMgaW5jb3JyZWN0YSBlbiAlcyIKKworIzogbGlicGFydGVkL2xhYmVscy9wYzk4LmM6NDA2IGxpYnBhcnRlZC9sYWJlbHMvcGM5OC5jOjQ4NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlBhcnRpdGlvbiAlZCBpc24ndCBhbGlnbmVkIHRvIGN5bGluZGVyIGJvdW5kYXJpZXMuICBUaGlzIGlzIHN0aWxsICIKKyJ1bnN1cHBvcnRlZC4iCittc2dzdHIgIiIKKyJBIHBhcnRpY2nzbiAlZCBub24gZXN04SBhbGnxYWRhIG5vcyBs7W1pdGVzIGRvcyBjaWxpbmRyb3MuIEhhaSBxdWUgZW5nYWRpciAiCisic29wb3J0ZSBwYXJhIGlzdG8uIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3BjOTguYzo3OTEKK21zZ2lkICJDYW4ndCBhZGQgYW5vdGhlciBwYXJ0aXRpb24uIgorbXNnc3RyICJOb24gc2UgcG9kZSBlbmdhZGlyIG3haXMgcGFydGljafNucy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6MTYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogQmFkIGNoZWNrc3VtIG9uIGJsb2NrICVsbHUgb2YgdHlwZSAlcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo0OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBEaWRuJ3QgZmluZCByZGIgYmxvY2ssIHNob3VsZCBuZXZlciBoYXBwZW4uIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6NTgxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyA6IExvb3AgZGV0ZWN0ZWQgYXQgYmxvY2sgJWQuIgorbXNnc3RyICIlcyBub24g6SB1biBkaXNwb3NpdGl2byBkZSBibG9xdWVzLiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo2MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBUaGUgJXMgbGlzdCBzZWVtcyBiYWQgYXQgYmxvY2sgJXMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6Njg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGxpc3QgYmFkIGJsb2Nrcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo2OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gbGlzdCBwYXJ0aXRpb24gYmxvY2tzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjcwNQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBsaXN0IGZpbGUgc3lzdGVtIGJsb2Nrcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo3MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gbGlzdCBib290IGJsb2Nrcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo3NDAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byB3cml0ZSBwYXJ0aXRpb24gYmxvY2sgYXQgJWQuIgorbXNnc3RyICJOb24gc2UgcHVpZG8gZGV0ZXJtaW5hciBzZSBhIHBhcnRpY2nzbiBlc3ThIG1vbnRhZGEuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjEwNjkKKyMsIGZ1enp5Cittc2dpZCAiVW5hYmxlIHRvIGFsbG9jYXRlIGEgcGFydGl0aW9uIG51bWJlci4iCittc2dzdHIgIkVzcOlyYXNlIHVuIG76bWVybyBkZSBwYXJ0aWNp824uIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3N1bi5jOjE0NQorbXNnaWQgIkNvcnJ1cHRlZCBTdW4gZGlzayBsYWJlbCBkZXRlY3RlZC4iCittc2dzdHIgIkRldGVjdG91c2UgdW5oYSBldGlxdWV0YSBkZSBkaXNjbyBTdW4gY29ycm9tcGlkYS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6MjY2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGRpc2sgQ0hTIGdlb21ldHJ5ICglZCwlZCwlZCkgcmVwb3J0ZWQgYnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0gZG9lcyBub3QgIgorIm1hdGNoIHRoZSBnZW9tZXRyeSBzdG9yZWQgb24gdGhlIGRpc2sgbGFiZWwgKCVkLCVkLCVkKS4iCittc2dzdHIgIiIKKyJBIHhlb21ldHLtYSBDSFMgZG8gZGlzY28gKCVkLCVkLCVkKSBub24gZW5jYWl4YSBjb2EgeGVvbWV0cu1hIGFybWFjZW5hZGEgbmEgIgorImV0aXF1ZXRhIGRlIGRpc2NvICglZCwlZCwlZCkuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3N1bi5jOjI4OAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgZGlzayBsYWJlbCBkZXNjcmliZXMgYSBkaXNrIGJpZ2dlciB0aGFuICVzLiIKK21zZ3N0ciAiQSBldGlxdWV0YSBkZSBkaXNjbyBkZXNjcmliZSB1biBkaXNjbyBtYWlvciBkZSAlcy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6NDQyCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBkaXNrIGhhcyAlZCBjeWxpbmRlcnMsIHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbWF4aW11bSBvZiA2NTUzNi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9zdW4uYzo3MzcKK21zZ2lkICIiCisiVGhlIFdob2xlIERpc2sgcGFydGl0aW9uIGlzIHRoZSBvbmx5IGF2YWlsYWJsZSBvbmUgbGVmdC4gIEdlbmVyYWxseSwgaXQgaXMgIgorIm5vdCBhIGdvb2QgaWRlYSB0byBvdmVyd3JpdGUgdGhpcyBwYXJ0aXRpb24gd2l0aCBhIHJlYWwgb25lLiAgU29sYXJpcyBtYXkgIgorIm5vdCBiZSBhYmxlIHRvIGJvb3Qgd2l0aG91dCBpdCwgYW5kIFNJTE8gKHRoZSBzcGFyYyBib290IGxvYWRlcikgYXBwcmVjaWF0ZXMgIgorIml0IGFzIHdlbGwuIgorbXNnc3RyICIiCisiQSBwYXJ0aWNp824gZGUgRGlzY28gQ29tcGxldG8g6SBhIPpuaWNhIHF1ZSBxdWVkYSBkaXNwb/FpYmxlLiBOb3JtYWxtZW50ZSAiCisibm9uIOkgdW5oYSBib2EgaWRlYSBzb2JyZXNjcmliaXIgZXN0YSBwYXJ0aWNp824gY3VuaGEgZGUgdmVyZGFkZS4gU29sYXJpcyAiCisicG9kZSBub24gYXJyaW5jYXIgc2VuIGVsYSwgZSBTSUxPIChvIGNhcmdhZG9yIGRlIHNwYXJjKSB0YW3pbiBhIGFwcmVjaWEuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3N1bi5jOjc1MgorbXNnaWQgIlN1biBkaXNrIGxhYmVsIGlzIGZ1bGwuIgorbXNnc3RyICJBIGV0aXF1ZXRhIGRlIGRpc2NvIFN1biBlc3ThIGNoZWEuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIG9wZW5pbmcgZGV2aWNlICclcycgZmFpbGVkLlxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6MTY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBzZWVraW5nIGRldmljZSAnJXMnIGZhaWxlZC5cbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjE3MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgd3JpdGluZyB0byBkZXZpY2UgJyVzJyBmYWlsZWQsXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzoxNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHJlYWRpbmcgZnJvbSBkZXZpY2UgJyVzJyBmYWlsZWQuXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzoxNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmF0YWwgZXJyb3JcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0MTgKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBWVE9DIGxhYmVscy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDI0Cittc2dpZCAiQ291bGQgbm90IHJlYWQgVlRPQyBGTVQxIERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQzMQorbXNnaWQgIkNvdWxkIG5vdCByZWFkIFZUT0MgRk1UNCBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0MzgKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBWVE9DIEZNVDUgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDQ1Cittc2dpZCAiQ291bGQgbm90IHJlYWQgVlRPQyBGTVQ3IERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQ2MgorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBWVE9DIGxhYmVscy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDY4Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIFZUT0MgRk1UMSBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0NzUKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgVlRPQyBGTVQ0IERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQ4MgorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBWVE9DIEZNVDUgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDg5Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIFZUT0MgRk1UNyBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGlicGFydGVkLmM6Mjk2IGxpYnBhcnRlZC9saWJwYXJ0ZWQuYzozMTYKK21zZ2lkICJPdXQgb2YgbWVtb3J5LiIKK21zZ3N0ciAiTWVtb3JpYSBlc2dvdGFkYS4iCisKKyM6IGxpYnBhcnRlZC91bml0LmM6MTM5Cittc2dpZCAiQ2Fubm90IGdldCB1bml0IHNpemUgZm9yIHNwZWNpYWwgdW5pdCAnQ09NUEFDVCcuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC91bml0LmM6Mzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIlwiJXNcIiBoYXMgaW52YWxpZCBzeW50YXggZm9yIGxvY2F0aW9ucy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL3VuaXQuYzozOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIG1heGltdW0gaGVhZCB2YWx1ZSBpcyAlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL3VuaXQuYzo0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIG1heGltdW0gc2VjdG9yIHZhbHVlIGlzICVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvdW5pdC5jOjQxMyBsaWJwYXJ0ZWQvdW5pdC5jOjU0NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVGhlIGxvY2F0aW9uICVzIGlzIG91dHNpZGUgb2YgdGhlIGRldmljZSAlcy4iCittc2dzdHIgIk5vbiBzZSBwb2RlIGNyZWFyIHVuaGEgcGFydGljafNuIGbzcmEgZG8gZGlzcG9zaXRpdm8uIgorCisjOiBsaWJwYXJ0ZWQvdW5pdC5jOjUyNworbXNnaWQgIkludmFsaWQgbnVtYmVyLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYWZmcy5jOjYzIGxpYnBhcnRlZC9mcy9hbWlnYS9hcGZzLmM6NTYKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hc2ZzLmM6NzAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGFsbG9jYXRlIHBhcnRpdGlvbiBibG9ja1xuIgorbXNnc3RyICJOb24gc2UgcHVpZG8gZGV0ZXJtaW5hciBzZSBhIHBhcnRpY2nzbiBlc3ThIG1vbnRhZGEuIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYWZmcy5jOjc4IGxpYnBhcnRlZC9mcy9hbWlnYS9hcGZzLmM6NzAKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hc2ZzLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gYWxsb2NhdGUgYmxvY2tcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYWZmcy5jOjgzIGxpYnBhcnRlZC9mcy9hbWlnYS9hcGZzLmM6NzUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogQ291bGRuJ3QgcmVhZCBib290IGJsb2NrICVsbHVcbiIKK21zZ3N0ciAiJXMgbm9uIOkgdW4gZGlzcG9zaXRpdm8gZGUgYmxvcXVlcy4iCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hZmZzLmM6OTkgbGlicGFydGVkL2ZzL2FtaWdhL2FwZnMuYzo4NgorIzogbGlicGFydGVkL2ZzL2FtaWdhL2FzZnMuYzo5MiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXNmcy5jOjEwNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBDb3VsZG4ndCByZWFkIHJvb3QgYmxvY2sgJWxsdVxuIgorbXNnc3RyICIlcyBub24g6SB1biBkaXNwb3NpdGl2byBkZSBibG9xdWVzLiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gYWxsb2NhdGUgaWQgbGlzdCBlbGVtZW50XG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogQ291bGRuJ3QgcmVhZCBibG9jayAlbGx1XG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6MjAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogQmFkIGNoZWNrc3VtIG9uIGJsb2NrICVsbHUgb2YgdHlwZSAlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jOjIxMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBDb3VsZG4ndCB3cml0ZSBibG9jayAlZFxuIgorbXNnc3RyICIlcyBub24g6SB1biBkaXNwb3NpdGl2byBkZSBibG9xdWVzLiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6Mjc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGFsbG9jYXRlIGRpc2tfc3BlY2lmaWMgcmRiIGJsb2NrXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6Mjg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRGlkbid0IGZpbmQgcmRiIGJsb2NrLCBzaG91bGQgbmV2ZXIgaGFwcGVuXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6MzE4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byByZWFkIHBhcnRpdGlvbiBibG9jayAlbGx1XG4iCittc2dzdHIgIk5vbiBzZSBwdWlkbyBkZXRlcm1pbmFyIHNlIGEgcGFydGljafNuIGVzdOEgbW9udGFkYS4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo4NyBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6MTEyCittc2dpZCAiSW5jb25zaXN0ZW50IGdyb3VwIGRlc2NyaXB0b3JzISIKK21zZ3N0ciAioURlc2NyaXB0b3JlcyBkZSBncnVwbyBub24gY29uc2lzdGVudGVzISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjkxIGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzoxMTYKKyMsIGZ1enp5Cittc2dpZCAiRmlsZSBzeXN0ZW0gZnVsbCEiCittc2dzdHIgIqFTaXN0ZW1hIGRlIGZpY2hlaXJvcyBjaGVvISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjY4NgorIywgZnV6enkKK21zZ2lkICJJbnZhbGlkIHN1cGVyYmxvY2suICBBcmUgeW91IHN1cmUgdGhpcyBpcyBhbiBleHQyIGZpbGUgc3lzdGVtPyIKK21zZ3N0ciAiIgorIlN1cGVyYmxvcXVlIGluY29ycmVjdG8uIL9Fc3ThIHNlZ3VybyBkZSBxdWUgZXN0ZSDpIHVuIHNpc3RlbWEgZGUgZmljaGVpcm9zICIKKyJleHQyPyIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjcwMCBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjY1OAorIywgZnV6enkKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgZXJyb3JzISAgWW91IHNob3VsZCBydW4gZTJmc2NrLiIKK21zZ3N0ciAioU8gc2lzdGVtYSBkZSBmaWNoZWlyb3MgdGVuIGVycm9zISBEZWJlcu1hIGV4ZWN1dGFyIGUyZnNjay4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo3MTEKKyMsIGZ1enp5Cittc2dpZCAiIgorIkZpbGUgc3lzdGVtIHdhcyBub3QgY2xlYW5seSB1bm1vdW50ZWQhICBZb3Ugc2hvdWxkIHJ1biBlMmZzY2suICBNb2RpZnlpbmcgYW4gIgorInVuY2xlYW4gZmlsZSBzeXN0ZW0gY291bGQgY2F1c2Ugc2V2ZXJlIGNvcnJ1cHRpb24uIgorbXNnc3RyICIiCisioU8gc2lzdGVtYSBkZSBmaWNoZWlyb3Mgbm9uIGZvaSBkZXNtb250YWRvIGxpbXBhbWVudGUhIERlYmVy7WEgZXhlY3V0YXIgIgorImUyZnNjay4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo3MzEKKyMsIGZ1enp5Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGluY29tcGF0aWJsZSBmZWF0dXJlIGVuYWJsZWQuIgorbXNnc3RyICJPIHNpc3RlbWEgZGUgZmljaGVpcm9zIHRlbiB1bmhhIGNhcmFjdGVy7XN0aWNhIGluY29tcGF0aWJsZSBhY3RpdmFkYS4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo3NDIKK21zZ2lkICJFcnJvciBhbGxvY2F0aW5nIGJ1ZmZlciBjYWNoZS4iCittc2dzdHIgIkVycm8gYW8gYnVzY2FyIGVzcGFjaW8gcGFyYSBvIGJ1ZmZlciBjYWNoZS4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfaW5vZGVfcmVsb2NhdG9yLmM6MTE0CisjLCBmdXp6eQorbXNnaWQgIiIKKyJGb3VuZCBhbiBpbm9kZSB3aXRoIGEgaW5jb3JyZWN0IGxpbmsgY291bnQuICBCZXR0ZXIgZ28gcnVuIGUyZnNjayBmaXJzdCEiCittc2dzdHIgIiIKKyJBdG9wZWkgdW4gaW5vZGUgY3VuaGEgY29udGEgZGUgbGlnYXrzbnMgaW5jb3JyZWN0YS4gTWVsbG9yIHNlcuEgcXVlIGVtcHJlZ3VlICIKKyJlMmZzY2sgYW50ZXMuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2lub2RlX3JlbG9jYXRvci5jOjQ4NworbXNnaWQgIk5vdCBlbm91Z2ggZnJlZSBpbm9kZXMhIgorbXNnc3RyICKhTm9uIGhhaSBpbm9kZXMgbGlicmVzIGRhYm9uZG8hIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjIyMworIywgZnV6enkKK21zZ2lkICJGaWxlIHN5c3RlbSBpcyB0b28gZnVsbCB0byByZW1vdmUgYSBncm91cCEiCittc2dzdHIgIqFPIHNpc3RlbWEgZGUgZmljaGVpcm9zIGVzdOEgZGVtYXNpYWRvIG9jdXBhZG8gcGFyYSBlbGltaW5hciB1biBncnVwbyEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6MjMyCisjLCBmdXp6eQorbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyB0b28gbWFueSBhbGxvY2F0ZWQgaW5vZGVzIHRvIHJlbW92ZSBhIGdyb3VwISIKK21zZ3N0ciAiIgorIqFPIHNpc3RlbWEgZGUgZmljaGVpcm9zIHRlbiBkZW1hc2lhZG9zIGlub2RlcyBvY3VwYWRvcyBwYXJhIGVsaW1pbmFyIHVuICIKKyJncnVwbyEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NDkxCittc2dpZCAiYWRkaW5nIGdyb3VwcyIKK21zZ3N0ciAiZW5nYWRpbmRvIGdydXBvcyIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo1MjgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIllvdXIgZmlsZSBzeXN0ZW0gaXMgdG9vIGZ1bGwgdG8gcmVzaXplIGl0IHRvICVpIGJsb2Nrcy4gIFNvcnJ5LiIKK21zZ3N0ciAiIgorIk8gc2V1IHNpc3RlbWEgZGUgZmljaGVpcm9zIGVzdOEgZGVtYXNpYWRvIG9jdXBhZG8gcGFyYSBjYW1iaWFybGxlIG8gdGFtYfFvIGEgIgorIiVpIGJsb3F1ZXMuIFPtbnRvby4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NTM4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBmaWxlIHN5c3RlbSBoYXMgdG9vIG1hbnkgb2NjdXBpZWQgaW5vZGVzIHRvIHJlc2l6ZSBpdCB0byAlaSBibG9ja3MuICAiCisiU29ycnkuIgorbXNnc3RyICIiCisiTyBzZXUgc2lzdGVtYSBkZSBmaWNoZWlyb3MgdGVuIGRlbWFzaWFkb3MgaW5vZGVzIG9jdXBhZG9zIHBhcmEgY2FtYmlhcmxsZSBvICIKKyJ0YW1h8W8gYSAlaSBibG9xdWVzLiBT7W50b28uIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjY2NgorIywgZnV6enkKK21zZ2lkICJGaWxlIHN5c3RlbSB3YXMgbm90IGNsZWFubHkgdW5tb3VudGVkISAgWW91IHNob3VsZCBydW4gZTJmc2NrLiIKK21zZ3N0ciAiIgorIqFPIHNpc3RlbWEgZGUgZmljaGVpcm9zIG5vbiBmb2kgZGVzbW9udGFkbyBsaW1wYW1lbnRlISBEZWJlcu1hIGV4ZWN1dGFyICIKKyJlMmZzY2suIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjY3NQorbXNnaWQgIiIKKyJUaGUgZmlsZSBzeXN0ZW0gaGFzIHRoZSAnZGlyX2luZGV4JyBmZWF0dXJlIGVuYWJsZWQuICBQYXJ0ZWQgY2FuIG9ubHkgcmVzaXplICIKKyJ0aGUgZmlsZSBzeXN0ZW0gaWYgaXQgZGlzYWJsZXMgdGhpcyBmZWF0dXJlLiAgWW91IGNhbiBlbmFibGUgaXQgbGF0ZXIgYnkgIgorInJ1bm5pbmcgJ3R1bmUyZnMgLU8gZGlyX2luZGV4IERFVklDRScgYW5kIHRoZW4gJ2UyZnNjayAtZkQgREVWSUNFJy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo2OTEKK21zZ2lkICIiCisiQSByZXNpemUgb3BlcmF0aW9uIG9uIHRoaXMgZmlsZSBzeXN0ZW0gd2lsbCB1c2UgRVhQRVJJTUVOVEFMIGNvZGVcbiIKKyJ0aGF0IE1BWSBDT1JSVVBUIGl0IChhbHRob3VnaCBubyBvbmUgaGFzIHJlcG9ydGVkIGFueSBzdWNoIGRhbWFnZSB5ZXQpLlxuIgorIllvdSBzaG91bGQgYXQgbGVhc3QgYmFja3VwIHlvdXIgZGF0YSBmaXJzdCwgYW5kIHJ1biAnZTJmc2NrIC1mJyBhZnRlcndhcmRzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2Jsb2NrX3JlbG9jYXRvci5jOjE5OAorIywgZnV6enkKK21zZ2lkICJDcm9zcy1saW5rZWQgYmxvY2tzIGZvdW5kISAgQmV0dGVyIGdvIHJ1biBlMmZzY2sgZmlyc3QhIgorbXNnc3RyICIiCisioUF0b3Dhcm9uc2UgYmxvcXVlcyBsaWdhZG9zIGVudHJlIHNpISChTWVsbG9yIHNlcuEgcXVlIGVtcHJlZ3VlIGUyZnNjayBhbnRlcyEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfYmxvY2tfcmVsb2NhdG9yLmM6NTM3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJCbG9jayAlaSBoYXMgbm8gcmVmZXJlbmNlPyAgV2VpcmQuIgorbXNnc3RyICK/TyBibG9xdWUgJWkgbm9uIHRlbiB1bmhhIHJlZmVyZW5jaWE/IE1vaSByYXJvLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9ibG9ja19yZWxvY2F0b3IuYzo3MzcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrICVpIHNob3VsZG4ndCBoYXZlIGJlZW4gbWFya2VkICglZCwgJWQpISIKK21zZ3N0ciAioU8gYmxvcXVlICVpIG5vbiBkZWJlcu1hIGVzdGFyIG1hcmNhZG8hIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9pbnRlcmZhY2UuYzoxODYKKyMsIGZ1enp5Cittc2dpZCAiIgorIlRoZSBleHQyIGZpbGUgc3lzdGVtIHBhc3NlZCBhIGJhc2ljIGNoZWNrLiAgRm9yIGEgbW9yZSBjb21wcmVoZW5zaXZlIGNoZWNrLCAiCisidXNlIHRoZSBlMmZzY2sgcHJvZ3JhbS4iCittc2dzdHIgIiIKKyJPIHNpc3RlbWEgZGUgZmljaGVpcm9zIGV4dDIgcGFzb3UgdW5oYSBjb21wcm9iYWNp824gYuFzaWNhLiBQYXJhIHVuaGEgIgorImNvbXByb2JhY2nzbiBt4WlzIGEgZm9uZG8sIGVtcHJlZ3VlIG8gcHJvZ3JhbWEgZTJmc2NrLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvaW50ZXJmYWNlLmM6MjAzCittc2dpZCAiU29ycnksIGNhbid0IG1vdmUgdGhlIHN0YXJ0IG9mIGV4dDIgcGFydGl0aW9ucyB5ZXQhIgorbXNnc3RyICKhU+1udG9vLCBhaW5kYSBub24gcG9kbyBtb3ZlLWxvIHByaW5jaXBpbyBkYXMgcGFydGljafNucyBleHQyISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9idWZmZXIuYzo4MgorbXNnaWQgIkNvdWxkbid0IGZsdXNoIGJ1ZmZlciBjYWNoZSEiCittc2dzdHIgIqFOb24gc2UgcHVpZG8gYmFsZWlyYS1sbyBidWZmZXIgY2FjaGUhIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX21rZnMuYzoxNjIKK21zZ2lkICJ3cml0aW5nIHBlci1ncm91cCBtZXRhZGF0YSIKK21zZ3N0ciAiZ3JhdmFuZG8gb3MgbWV0YWRhdG9zIHBvciBncnVwb3MiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfbWtmcy5jOjU2NAorbXNnaWQgIkZpbGUgc3lzdGVtIHRvbyBzbWFsbCBmb3IgZXh0Mi4iCittc2dzdHIgIk8gc2lzdGVtYSBkZSBmaWNoZWlyb3Mg6SBwZXF1ZW5vIGRlIG3haXMgcGFyYSBleHQyLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jYWxjLmM6MTM1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IG5lZWQgJXMgb2YgZnJlZSBkaXNrIHNwYWNlIHRvIHNocmluayB0aGlzIHBhcnRpdGlvbiB0byB0aGlzIHNpemUuICAiCisiQ3VycmVudGx5LCBvbmx5ICVzIGlzIGZyZWUuIgorbXNnc3RyICIiCisiUHJlY2lzYSAlZE0gZGUgZXNwYWNpbyBsaWJyZSBwYXJhIHJlZHVjaXIgZXN0YSBwYXJ0aWNp824gYSBlc3RlIHRhbWHxbyAiCisiKGFjdHVhbG1lbnRlIHRlbiBz8yAlZE0gbGlicmVzKSIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb250ZXh0LmM6NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNsdXN0ZXIgc3RhcnQgZGVsdGEgPSAlZCwgd2hpY2ggaXMgbm90IGEgbXVsdGlwbGUgb2YgdGhlIGNsdXN0ZXIgc2l6ZSAlZC4iCittc2dzdHIgIiIKKyJEZWx0YSBkbyBjb21lem8gZG8gY2x1c3RlciA9ICVkLCBxdWUgbm9uIOkgdW4gbfpsdGlwbG8gZG8gdGFtYfFvIGRvIGNsdXN0ZXIgJSIKKyJkLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9mYXQuYzozMDgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlBhcnRpdGlvbiB0b28gYmlnL3NtYWxsIGZvciBhICVzIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiQSBwYXJ0aWNp824g6SBncmFuZGUvcGVxdWVuYSBkZSBt4WlzIHBhcmEgdW4gc2lzdGVtYSBkZSBmaWNoZWlyb3MgJXMiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvZmF0LmM6NDc0Cittc2dpZCAiIgorIlRoZSBGQVRzIGRvbid0IG1hdGNoLiAgSWYgeW91IGRvbid0IGtub3cgd2hhdCB0aGlzIG1lYW5zLCB0aGVuIHNlbGVjdCAiCisiY2FuY2VsLCBydW4gc2NhbmRpc2sgb24gdGhlIGZpbGUgc3lzdGVtLCBhbmQgdGhlbiBjb21lIGJhY2suIgorbXNnc3RyICIiCisiQXMgRkFUcyBub24gY29pbmNpZGVuLiBTZSBub24gc2FiZSBvIHF1ZSBpc3RvIHNpZ25pZmljYSwgZXNjb2xsYSBcIkNhbmNlbGFyIgorIlwiLCBlbXByZWd1ZSBcInNjYW5kaXNrXCIgbm8gc2lzdGVtYSBkZSBmaWNoZWlyb3MsIGUgbG9nbyB2b2x0ZS4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvZmF0LmM6NTE0Cittc2dpZCAiVGhlcmUgYXJlIG5vIHBvc3NpYmxlIGNvbmZpZ3VyYXRpb25zIGZvciB0aGlzIEZBVCB0eXBlLiIKK21zZ3N0ciAiTm9uIGhhaSBjb25maWd1cmFjafNucyBwb3NpYmxlcyBwYXJhIGVzdGUgdGlwbyBkZSBGQVQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jOjUyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRmlsZSBzeXN0ZW0gZG9lc24ndCBoYXZlIGV4cGVjdGVkIHNpemVzIGZvciBXaW5kb3dzIHRvIGxpa2UgaXQuICBDbHVzdGVyICIKKyJzaXplIGlzICVkayAoJWRrIGV4cGVjdGVkKTsgbnVtYmVyIG9mIGNsdXN0ZXJzIGlzICVkICglZCBleHBlY3RlZCk7IHNpemUgb2YgIgorIkZBVHMgaXMgJWQgc2VjdG9ycyAoJWQgZXhwZWN0ZWQpLiIKK21zZ3N0ciAiIgorIk8gc2lzdGVtYSBkZSBmaWNoZWlyb3Mgbm9uIHRlbiBvcyB0YW1h8W9zIGVzcGVyYWRvcyBwYXJhIHF1ZSBhIFdpbmRvd3MgbGxlICIKKyJnb3N0ZS4gTyB0YW1h8W8gZG8gY2x1c3RlciDpICVkayAoZXNwZXLhYmFzZSAlZGspOyBvIG76bWVybyBkZSBjbHVzdGVycyDpICVkICIKKyIoZXNwZXLhYmFuc2UgJWQpOyBvIHRhbWHxbyBkYXMgRkFUcyDpIGRlICVkIHNlY3RvcmVzIChlc3BlcuFiYW5zZSAlZCkuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jOjU0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRmlsZSBzeXN0ZW0gaXMgcmVwb3J0aW5nIHRoZSBmcmVlIHNwYWNlIGFzICVkIGNsdXN0ZXJzLCBub3QgJWQgY2x1c3RlcnMuIgorbXNnc3RyICIiCisiTyBzaXN0ZW1hIGRlIGZpY2hlaXJvcyBkaSBxdWUgbyBlc3BhY2lvIGxpYnJlIOkgZGUgJWQgY2x1c3RlcnMsIG5vbiAlZCAiCisiY2x1c3RlcnMuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jOjg3NAorIywgZnV6enkKK21zZ2lkICIiCisiR05VIFBhcnRlZCB3YXMgbWlzY29tcGlsZWQ6IHRoZSBGQVQgYm9vdCBzZWN0b3Igc2hvdWxkIGJlIDUxMiBieXRlcy4gIEZBVCAiCisic3VwcG9ydCB3aWxsIGJlIGRpc2FibGVkLiIKK21zZ3N0ciAiIgorIkdOVSBwYXJ0ZWQgZm9pIGNvbXBpbGFkbyBpbmNvcnJlY3RhbWVudGU6IG8gc2VjdG9yIGRlIGluaWNpbyBGQVQgZGViZXLtYSB0ZXIgIgorIjUxMiBieXRlcy4gTyBzb3BvcnRlIEZBVCBzZXLhIGRlc2FjdGl2YWRvLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzoxNTkKKyMsIGZ1enp5Cittc2dpZCAiIgorIlRoZXJlJ3Mgbm90IGVub3VnaCByb29tIGluIHRoZSByb290IGRpcmVjdG9yeSBmb3IgYWxsIG9mIHRoZSBmaWxlcy4gIEVpdGhlciAiCisiY2FuY2VsLCBvciBpZ25vcmUgdG8gbG9zZSB0aGUgZmlsZXMuIgorbXNnc3RyICIiCisiTm9uIGhhaSBlc3BhY2lvIGRhYm9uZG8gbm8gZGlyZWN0b3JpbyByYWl6IHBhcmEgdPNkb2xvcyBmaWNoZWlyb3MuIFBvZGUgb3UgIgorImJlbiBjYW5jZWxhciwgb3UgYmVuIGlnbm9yYXIgZSBwZXJkZS1sb3MgZmljaGVpcm9zLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzozMDAKK21zZ2lkICJFcnJvciB3cml0aW5nIHRvIHRoZSByb290IGRpcmVjdG9yeS4iCittc2dzdHIgIkVycm8gYW8gZXNjcmliaXIgbm8gZGlyZWN0b3JpbyByYWl6LiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo0ODkKKyMsIGZ1enp5Cittc2dpZCAiSWYgeW91IGxlYXZlIHlvdXIgZmlsZSBzeXN0ZW0gYXMgRkFUMTYsIHRoZW4geW91IHdpbGwgaGF2ZSBubyBwcm9ibGVtcy4iCittc2dzdHIgIlNlIGRlaXhhIG8gc2lzdGVtYSBkZSBmaWNoZWlyb3MgY29tYSBGQVQxNiwgbm9uIGhhIHRlciBwcm9ibGVtYXMuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjQ5MgorbXNnaWQgIiIKKyJJZiB5b3UgY29udmVydCB0byBGQVQxNiwgYW5kIE1TIFdpbmRvd3MgaXMgaW5zdGFsbGVkIG9uIHRoaXMgcGFydGl0aW9uLCB0aGVuICIKKyJ5b3UgbXVzdCByZS1pbnN0YWxsIHRoZSBNUyBXaW5kb3dzIGJvb3QgbG9hZGVyLiAgSWYgeW91IHdhbnQgdG8gZG8gdGhpcywgeW91ICIKKyJzaG91bGQgY29uc3VsdCB0aGUgUGFydGVkIG1hbnVhbCAob3IgeW91ciBkaXN0cmlidXRpb24ncyBtYW51YWwpLiIKK21zZ3N0ciAiIgorIlNlIGNvbnZpcnRlIGEgRkFUMTYsIGUgTVMgV2luZG93cyBlc3ThIGluc3RhbGFkbyBuYSBwYXJ0aWNp824sIGhhIHRlciBxdWUgIgorInJlaW5zdGFsYS1sbyBjYXJnYWRvciBkZSBpbmljaW8gZGUgTVMgV2luZG93cy4gU2UgcXVlcmUgZmFjZWxvLCBkZWJlcu1hICIKKyJjb25zdWx0YS1sbyBtYW51YWwgZGUgUGFydGVkIChvdSBvIG1hbnVhbCBkYSBz+mEgZGlzdHJpYnVjafNuKS4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTAwCittc2dpZCAiIgorIklmIHlvdSBsZWF2ZSB5b3VyIGZpbGUgc3lzdGVtIGFzIEZBVDMyLCB0aGVuIHlvdSB3aWxsIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyAiCisicHJvYmxlbXMuIgorbXNnc3RyICIiCisiU2UgZGVpeGEgbyBzaXN0ZW1hIGRlIGZpY2hlaXJvcyBjb21hIEZBVDMyLCBub24gaGEgaW50cm9kdWNpciBub3ZvcyAiCisicHJvYmxlbWFzLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1MDQKK21zZ2lkICIiCisiSWYgeW91IGNvbnZlcnQgdG8gRkFUMzIsIGFuZCBNUyBXaW5kb3dzIGlzIGluc3RhbGxlZCBvbiB0aGlzIHBhcnRpdGlvbiwgdGhlbiAiCisieW91IG11c3QgcmUtaW5zdGFsbCB0aGUgTVMgV2luZG93cyBib290IGxvYWRlci4gIElmIHlvdSB3YW50IHRvIGRvIHRoaXMsIHlvdSAiCisic2hvdWxkIGNvbnN1bHQgdGhlIFBhcnRlZCBtYW51YWwgKG9yIHlvdXIgZGlzdHJpYnV0aW9uJ3MgbWFudWFsKS4gIEFsc28sICIKKyJjb252ZXJ0aW5nIHRvIEZBVDMyIHdpbGwgbWFrZSB0aGUgZmlsZSBzeXN0ZW0gdW5yZWFkYWJsZSBieSBNUyBET1MsIE1TICIKKyJXaW5kb3dzIDk1YSwgYW5kIE1TIFdpbmRvd3MgTlQuIgorbXNnc3RyICIiCisiU2UgY29udmlydGUgYSBGQVQzMiwgZSBNUyBXaW5kb3dzIGVzdOEgaW5zdGFsYWRvIG5hIHBhcnRpY2nzbiwgaGEgdGVyIHF1ZSAiCisicmVpbnN0YWxhLWxvIGNhcmdhZG9yIGRlIGluaWNpbyBkZSBNUyBXaW5kb3dzLiBTZSBxdWVyZSBmYWNlbG8sIGRlYmVy7WEgIgorImNvbnN1bHRhLWxvIG1hbnVhbCBkZSBQYXJ0ZWQgKG91IG8gbWFudWFsIGRhIHP6YSBkaXN0cmlidWNp824pLiBUYW3pbiwgYSAiCisiY29udmVyc2nzbiBhIEZBVDMyIGZhcuEgbyBzaXN0ZW1hIGRlIGZpY2hlaXJvcyBpbGV4aWJsZSBwYXJhIE1TIERPUywgTVMgIgorIldpbmRvd3MgOTVhIGUgTVMgV2luZG93cyBOVC4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzICAlcyAgJXMiCittc2dzdHIgIiVzICAlcyAgJXMiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTE5Cittc2dpZCAiV291bGQgeW91IGxpa2UgdG8gdXNlIEZBVDMyPyIKK21zZ3N0ciAiv1F1ZXJlIHVzYXIgRkFUMzI/IgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjU1MCBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjU2NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyAgJXMiCittc2dzdHIgIiVzICAlcyIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1NTEKK21zZ2lkICIiCisiVGhlIGZpbGUgc3lzdGVtIGNhbiBvbmx5IGJlIHJlc2l6ZWQgdG8gdGhpcyBzaXplIGJ5IGNvbnZlcnRpbmcgdG8gRkFUMTYuIgorbXNnc3RyICIiCisiTyBzaXN0ZW1hIGRlIGZpY2hlaXJvcyBz8yBwb2RlIGFsY2FuemFyIGVzdGUgdGFtYfFvIGNvbnZlcnRpbmRvIGEgRkFUMTYuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjU2NworbXNnaWQgIiIKKyJUaGUgZmlsZSBzeXN0ZW0gY2FuIG9ubHkgYmUgcmVzaXplZCB0byB0aGlzIHNpemUgYnkgY29udmVydGluZyB0byBGQVQzMi4iCittc2dzdHIgIiIKKyJPIHNpc3RlbWEgZGUgZmljaGVpcm9zIHPzIHBvZGUgYWxjYW56YXIgZXN0ZSB0YW1h8W8gY29udmVydGluZG8gYSBGQVQzMi4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTgwCisjLCBmdXp6eQorbXNnaWQgIiIKKyJHTlUgUGFydGVkIGNhbm5vdCByZXNpemUgdGhpcyBwYXJ0aXRpb24gdG8gdGhpcyBzaXplLiAgV2UncmUgd29ya2luZyBvbiBpdCEiCittc2dzdHIgIiIKKyJHTlUgUGFydGVkIG5vbiBwb2RlIGNhbWJpYXIgZXN0YSBwYXJ0aWNp824gYSBlc3RlIHRhbWHxby4goUVzdGFtb3MgIgorInRyYWJhbGxhbmRvIG5pc28hIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo0OSBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo1NgorbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyBhbiBpbnZhbGlkIHNpZ25hdHVyZSBmb3IgYSBGQVQgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICIiCisiTyBzaXN0ZW1hIGRlIGZpY2hlaXJvcyB0ZW4gdW5oYSBzaW5hdHVyYSBpbmNvcnJlY3RhIHBhcmEgdW4gc2lzdGVtYSBkZSAiCisiZmljaGVpcm9zIEZBVC4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjY0Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGludmFsaWQgc2VjdG9yIHNpemUgZm9yIGEgRkFUIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiIgorIk8gc2lzdGVtYSBkZSBmaWNoZWlyb3MgdGVuIHVuIHRhbWHxbyBkZSBzZWN0b3IgaW5jb3JyZWN0byBwYXJhIHVuIHNpc3RlbWEgZGUgIgorImZpY2hlaXJvcyBGQVQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo3MQorbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyBhbiBpbnZhbGlkIGNsdXN0ZXIgc2l6ZSBmb3IgYSBGQVQgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICIiCisiTyBzaXN0ZW1hIGRlIGZpY2hlaXJvcyB0ZW4gdW4gdGFtYfFvIGRlIGJsb3F1ZSBub24gduFsaWRvIHBhcmEgdW4gc2lzdGVtYSBkZSAiCisiZmljaGVpcm9zIEZBVC4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjc4CisjLCBmdXp6eQorbXNnaWQgIiIKKyJGaWxlIHN5c3RlbSBoYXMgYW4gaW52YWxpZCBudW1iZXIgb2YgcmVzZXJ2ZWQgc2VjdG9ycyBmb3IgYSBGQVQgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICIiCisiTyBzaXN0ZW1hIGRlIGZpY2hlaXJvcyB0ZW4gdW4gbvptZXJvIGRlIHNlY3RvcmVzIHJlc2VydmFkb3MgaW5jb3JyZWN0byBwYXJhICIKKyJ1biBzaXN0ZW1hIGRlIGZpY2hlaXJvcyBGQVQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo4NQorIywgZnV6enkKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgYW4gaW52YWxpZCBudW1iZXIgb2YgRkFUcy4iCittc2dzdHIgIk8gc2lzdGVtYSBkZSBmaWNoZWlyb3MgdGVuIHVuIG76bWVybyBkZSBGQVRzIGluY29ycmVjdG8uIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzoxMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgZmlsZSBzeXN0ZW0gaGFzIGEgbG9naWNhbCBzZWN0b3Igc2l6ZSBvZiAlZC4gIEdOVSBQYXJ0ZWQgaXMga25vd24gbm90ICIKKyJ0byB3b3JrIHByb3Blcmx5IHdpdGggc2VjdG9yIHNpemVzIG90aGVyIHRoYW4gNTEyIGJ5dGVzLiIKK21zZ3N0ciAiIgorIkVzdGUgc2lzdGVtYSBkZSBmaWNoZWlyb3MgdGVuIHVuIHRhbWHxbyBkZSBzZWN0b3IgbPN4aWNvIGRlICVkLiBT4WJlc2UgcXVlICIKKyJHTlUgUGFydGVkIG5vbiB0cmFiYWxsYSBjb3JyZWN0YW1lbnRlIGNvbiB0YW1h8W9zIGRlIHNlY3RvciBkaXN0aW50b3MgZGUgNTEyICIKKyJieXRlcy4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjE2NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGUgc3lzdGVtJ3MgQ0hTIGdlb21ldHJ5IGlzICglZCwgJWQsICVkKSwgd2hpY2ggaXMgaW52YWxpZC4gIFRoZSAiCisicGFydGl0aW9uIHRhYmxlJ3MgQ0hTIGdlb21ldHJ5IGlzICglZCwgJWQsICVkKS4gIElmIHlvdSBzZWxlY3QgSWdub3JlLCB0aGUgIgorImZpbGUgc3lzdGVtJ3MgQ0hTIGdlb21ldHJ5IHdpbGwgYmUgbGVmdCB1bmNoYW5nZWQuICBJZiB5b3Ugc2VsZWN0IEZpeCwgdGhlICIKKyJmaWxlIHN5c3RlbSdzIENIUyBnZW9tZXRyeSB3aWxsIGJlIHNldCB0byBtYXRjaCB0aGUgcGFydGl0aW9uIHRhYmxlJ3MgQ0hTICIKKyJnZW9tZXRyeS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6MjEzCittc2dpZCAiRkFUIGJvb3Qgc2VjdG9yIHNheXMgbG9naWNhbCBzZWN0b3Igc2l6ZSBpcyAwLiAgVGhpcyBpcyB3ZWlyZC4gIgorbXNnc3RyICIiCisiTyBzZWN0b3IgZGUgaW5pY2lvIEZBVCBkaSBxdWUgbyB0YW1h8W8gbPN4aWNvIGRlIHNlY3RvciDpIDAuIElzdG8g6SBtb2kgIgorImVzdHJh8W8uICIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6MjE5Cittc2dpZCAiRkFUIGJvb3Qgc2VjdG9yIHNheXMgdGhlcmUgYXJlIG5vIEZBVCB0YWJsZXMuICBUaGlzIGlzIHdlaXJkLiAiCittc2dzdHIgIk8gc2VjdG9yIGRlIGluaWNpbyBGQVQgZGkgcXVlIG5vbiBoYWkgdOFib2FzIEZBVC4gSXN0byDpIG1vaSBlc3RyYfFvLiAiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjIyNQorbXNnaWQgIkZBVCBib290IHNlY3RvciBzYXlzIGNsdXN0ZXJzIGFyZSAwIHNlY3RvcnMuICBUaGlzIGlzIHdlaXJkLiAiCittc2dzdHIgIiIKKyJPIHNlY3RvciBkZSBpbmljaW8gRkFUIGRpIHF1ZSBvcyBjbHVzdGVycyB0ZfFlbiAwIHNlY3RvcmVzLiBJc3RvIOkgbW9pICIKKyJlc3RyYfFvLiAiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjIzNQorIywgZnV6enkKK21zZ2lkICJGaWxlIHN5c3RlbSBpcyBGQVQxMiwgd2hpY2ggaXMgdW5zdXBwb3J0ZWQuIgorbXNnc3RyICJPIHNpc3RlbWEgZGUgZmljaGVpcm9zIOkgRkFUMTIsIHF1ZSBub24gZXN04SBzb3BvcnRhZG8uIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo0MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBpbmZvcm1hdGlvbiBzZWN0b3IgaGFzIHRoZSB3cm9uZyBzaWduYXR1cmUgKCV4KS4gIFNlbGVjdCBjYW5jZWwgZm9yIG5vdywgIgorImFuZCBzZW5kIGluIGEgYnVnIHJlcG9ydC4gIElmIHlvdSdyZSBkZXNwZXJhdGUsIGl0J3MgcHJvYmFibHkgc2FmZSB0byBpZ25vcmUuIgorbXNnc3RyICIiCisiTyBzZWN0b3IgZGUgaW5mb3JtYWNp824gdGVuIHVuaGEgc2luYXR1cmEgaW5jb3JyZWN0YSAoJXgpLiBFc2NvbGxhIFwiQ2FuY2VsYXIiCisiXCIgcG9sbyBkZSBhZ29yYSwgZSBlbnbtZSB1biBpbmZvcm1lIGRlIGVycm8uIFNlIGVzdOEgZGVzZXNwZXJhZG8sIHBvZGUgcXVlICIKKyJzZXhhIHNlZ3VybyBpZ25vcmFyLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb3VudC5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgZGlyZWN0b3J5IGVudHJ5IGZvciAlczogZmlyc3QgY2x1c3RlciBpcyB0aGUgZW5kIG9mIGZpbGUgbWFya2VyLiIKK21zZ3N0ciAiIgorIkVudHJhZGEgZGUgZGlyZWN0b3JpbyBpbmNvcnJlY3RhIHBhcmEgJXM6IG8gcHJpbWVpcm8gY2x1c3RlciDpIG8gbWFyY2Fkb3IgZGUgIgorImZpbiBkZSBmaWNoZWlyby4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY291bnQuYzoxNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkJhZCBGQVQ6IHVudGVybWluYXRlZCBjaGFpbiBmb3IgJXMuICBZb3Ugc2hvdWxkIHJ1biBkb3Nmc2NrIG9yIHNjYW5kaXNrLiIKK21zZ3N0ciAiIgorIkZBVCBpbmNvcnJlY3RhOiBjYWRlYSBub24gcmVtYXRhZGEgcGFyYSAlcy4gRGViZXLtYSBleGVjdXRhciBkb3Nmc2NrIG91ICIKKyJzY2FuZGlzay4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY291bnQuYzoxNzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJCYWQgRkFUOiBjbHVzdGVyICVkIG91dHNpZGUgZmlsZSBzeXN0ZW0gaW4gY2hhaW4gZm9yICVzLiAgWW91IHNob3VsZCBydW4gIgorImRvc2ZzY2sgb3Igc2NhbmRpc2suIgorbXNnc3RyICIiCisiRkFUIGluY29ycmVjdGE6IG8gY2x1c3RlciAlZCBlc3ThIGbzcmEgZG8gc2lzdGVtYSBkZSBmaWNoZWlyb3MgbmEgY2FkZWEgcGFyYSAiCisiJXMuIERlYmVy7WEgZXhlY3V0YXIgZG9zZnNjayBvdSBzY2FuZGlzay4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY291bnQuYzoxODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkJhZCBGQVQ6IGNsdXN0ZXIgJWQgaXMgY3Jvc3MtbGlua2VkIGZvciAlcy4gIFlvdSBzaG91bGQgcnVuIGRvc2ZzY2sgb3IgIgorInNjYW5kaXNrLiIKK21zZ3N0ciAiIgorIkZBVCBpbmNvcnJlY3RhOiBvIGNsdXN0ZXIgJWQgdGVuIGxpZ2F6825zIGNydXphZGFzIHBhcmEgJXMuIERlYmVy7WEgZXhlY3V0YXIgIgorImRvc2ZzY2sgb3Ugc2NhbmRpc2suIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvdW50LmM6MjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzICVkaywgYnV0IGl0IGhhcyAlZCBjbHVzdGVycyAoJWRrKS4iCittc2dzdHIgIiVzIOkgZGUgJWRrLCBwZXJvIHRlbiAlZCBjbHVzdGVycyAoJWRrKS4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY291bnQuYzoyNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmaWxlICVzIGlzIG1hcmtlZCBhcyBhIHN5c3RlbSBmaWxlLiAgVGhpcyBtZWFucyBtb3ZpbmcgaXQgY291bGQgY2F1c2UgIgorInNvbWUgcHJvZ3JhbXMgdG8gc3RvcCB3b3JraW5nLiIKK21zZ3N0ciAiIgorIk8gZmljaGVpcm8gJXMgZXN04SBtYXJjYWRvIGNvbWEgZmljaGVpcm8gZGUgc2lzdGVtYS4gSXN0byBzaWduaWZpY2EgcXVlICIKKyJtb3ZlbG8gcG9kZXLtYSBmYWNlciBxdWUgb3V0cm9zIHByb2dyYW1hcyBkZWl4YXJhbiBkZSB0cmFiYWxsYXIuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3RhYmxlLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGQVQgJWQgbWVkaWEgJXggZG9lc24ndCBtYXRjaCB0aGUgYm9vdCBzZWN0b3IncyBtZWRpYSAleC4gIFlvdSBzaG91bGQgIgorInByb2JhYmx5IHJ1biBzY2FuZGlzay4iCittc2dzdHIgIiIKKyJOYSBGQVQgJWQsIG8gc29wb3J0ZSAleCBub24gY29pbmNpZGUgY28gc29wb3J0ZSBkbyBzZWN0b3IgZGUgaW5pY2lvLCAleC4gIgorIlNlZ3VyYW1lbnRlIGRlYmVy7WEgZXhlY3V0YXIgc2NhbmRpc2suIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3RhYmxlLmM6MjY5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYXRfdGFibGVfc2V0OiBjbHVzdGVyICVsZCBvdXRzaWRlIGZpbGUgc3lzdGVtIgorbXNnc3RyICJmYXRfdGFibGVfc2V0OiBvIGNsdXN0ZXIgJWxkIGVzdOEgZvNyYSBkbyBzaXN0ZW1hIGRlIGZpY2hlaXJvcyIKKworIzogbGlicGFydGVkL2ZzL2ZhdC90YWJsZS5jOjMwMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmF0X3RhYmxlX2dldDogY2x1c3RlciAlbGQgb3V0c2lkZSBmaWxlIHN5c3RlbSIKK21zZ3N0ciAiZmF0X3RhYmxlX2dldDogbyBjbHVzdGVyICVsZCBlc3ThIGbzcmEgZG8gc2lzdGVtYSBkZSBmaWNoZWlyb3MiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvdGFibGUuYzozNDMKK21zZ2lkICJmYXRfdGFibGVfYWxsb2NfY2x1c3Rlcjogbm8gZnJlZSBjbHVzdGVycyIKK21zZ3N0ciAiZmF0X3RhYmxlX2FsbG9jX2NsdXN0ZXI6IG5vbiBoYWkgY2x1c3RlcnMgbGlicmVzIgorCisjOiBsaWJwYXJ0ZWQvZnMvbGludXhfc3dhcC9saW51eF9zd2FwLmM6Mjc1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVbnJlY29nbmlzZWQgb2xkIHN0eWxlIGxpbnV4IHN3YXAgc2lnbmF0dXJlICclMTBzJy4iCittc2dzdHIgIlNpbmF0dXJhIFwiJTEwc1wiIGRhIHBhcnRpY2nzbiBkZSBpbnRlcmNhbWJpbyBkZSBsaW51eCBub24gcmVjb/FlY2lkYS4iCisKKyM6IGxpYnBhcnRlZC9mcy9saW51eF9zd2FwL2xpbnV4X3N3YXAuYzozMTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVucmVjb2duaXNlZCBuZXcgc3R5bGUgbGludXggc3dhcCBzaWduYXR1cmUgJyUxMHMnLiIKK21zZ3N0ciAiU2luYXR1cmEgXCIlMTBzXCIgZGEgcGFydGljafNuIGRlIGludGVyY2FtYmlvIGRlIGxpbnV4IG5vbiByZWNv8WVjaWRhLiIKKworIzogbGlicGFydGVkL2ZzL2xpbnV4X3N3YXAvbGludXhfc3dhcC5jOjM1OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVW5yZWNvZ25pc2VkIHN3c3VzcCBsaW51eCBzd2FwIHNpZ25hdHVyZSAnJTlzJy4iCittc2dzdHIgIlNpbmF0dXJhIFwiJTEwc1wiIGRhIHBhcnRpY2nzbiBkZSBpbnRlcmNhbWJpbyBkZSBsaW51eCBub24gcmVjb/FlY2lkYS4iCisKKyM6IGxpYnBhcnRlZC9mcy9saW51eF9zd2FwL2xpbnV4X3N3YXAuYzo0MzQKK21zZ2lkICJUb28gbWFueSBiYWQgcGFnZXMuIgorbXNnc3RyICJEZW1hc2lhZGFzIHDheGluYXMgaW5jb3JyZWN0YXMuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2FkdmZzLmM6MTIxIGxpYnBhcnRlZC9mcy9oZnMvYWR2ZnNfcGx1cy5jOjEyMgorIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjQxNCBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NTA4CisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo1MzkgbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NjU4CisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo3NzIKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gY29udGFpbnMgZXJyb3JzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2FkdmZzX3BsdXMuYzoyODcKK21zZ2lkICJCYWQgYmxvY2tzIGNvdWxkIG5vdCBiZSByZWFkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2NhY2hlLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUcnlpbmcgdG8gcmVnaXN0ZXIgYW4gZXh0ZW50IHN0YXJ0aW5nIGF0IGJsb2NrIDB4JVgsIGJ1dCBhbm90aGVyIG9uZSBhbHJlYWR5ICIKKyJleGlzdHMgYXQgdGhpcyBwb3NpdGlvbi4gIFlvdSBzaG91bGQgY2hlY2sgdGhlIGZpbGUgc3lzdGVtISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2NhY2hlLmM6MjE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUcnlpbmcgdG8gbW92ZSBhbiBleHRlbnQgZnJvbSBibG9jayBPeCVYIHRvIGJsb2NrIE94JVgsIGJ1dCBhbm90aGVyIG9uZSAiCisiYWxyZWFkeSBleGlzdHMgYXQgdGhpcyBwb3NpdGlvbi4gIFRoaXMgc2hvdWxkIG5vdCBoYXBwZW4hIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZS5jOjE0MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgdXBkYXRlIHRoZSBleHRlbnQgY2FjaGUgZm9yIEhGUyBmaWxlIHdpdGggQ05JRCAlWC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlLmM6MTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyB0byByZWFkIEhGUyBmaWxlIHdpdGggQ05JRCAlWCBiZWhpbmQgRU9GLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGUuYzoxOTAgbGlicGFydGVkL2ZzL2hmcy9maWxlLmM6MjIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIHNlY3RvciAlbGxpIG9mIEhGUyBmaWxlIHdpdGggQ05JRCAlWC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlLmM6MjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyB0byB3cml0ZSBIRlMgZmlsZSB3aXRoIENOSUQgJVggYmVoaW5kIEVPRi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlX3BsdXMuYzoxNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHVwZGF0ZSB0aGUgZXh0ZW50IGNhY2hlIGZvciBIRlMrIGZpbGUgd2l0aCBDTklEICVYLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGVfcGx1cy5jOjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgdG8gcmVhZCBIRlMrIGZpbGUgd2l0aCBDTklEICVYIGJlaGluZCBFT0YuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZV9wbHVzLmM6MjEzIGxpYnBhcnRlZC9mcy9oZnMvZmlsZV9wbHVzLmM6MjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIHNlY3RvciAlbGxpIG9mIEhGUysgZmlsZSB3aXRoIENOSUQgJVguIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZV9wbHVzLmM6MjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyB0byB3cml0ZSBIRlMrIGZpbGUgd2l0aCBDTklEICVYIGJlaGluZCBFT0YuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MjMyCittc2dpZCAiU29ycnksIEhGUyBjYW5ub3QgYmUgcmVzaXplZCB0aGF0IHdheSB5ZXQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MjYyIGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NjQxCittc2dpZCAiRGF0YSByZWxvY2F0aW9uIGhhcyBmYWlsZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MjgxCittc2dpZCAiRGF0YSByZWxvY2F0aW9uIGxlZnQgc29tZSBkYXRhIGluIHRoZSBlbmQgb2YgdGhlIHZvbHVtZS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzozMjAKKyMsIGZ1enp5Cittc2dpZCAid3JpdGluZyBIRlMgTWFzdGVyIERpcmVjdG9yeSBCbG9jayIKK21zZ3N0ciAiRXJybyBhbyBlc2NyaWJpciBubyBkaXJlY3RvcmlvIHJhaXouIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjQ2OAorbXNnaWQgIk5vIHZhbGlkIEhGU1srWF0gc2lnbmF0dXJlIGhhcyBiZWVuIGZvdW5kIHdoaWxlIG9wZW5pbmcuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NDc4CisjLCBjLWZvcm1hdAorbXNnaWQgIlZlcnNpb24gJWQgb2YgSEZTKyBpc24ndCBzdXBwb3J0ZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NDg5CisjLCBjLWZvcm1hdAorbXNnaWQgIlZlcnNpb24gJWQgb2YgSEZTWCBpc24ndCBzdXBwb3J0ZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NjcyCittc2dpZCAiRGF0YSByZWxvY2F0aW9uIGxlZnQgc29tZSBkYXRhIGF0IHRoZSBlbmQgb2YgdGhlIHZvbHVtZS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo3MjAKKyMsIGZ1enp5Cittc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0aGUgYWxsb2NhdGlvbiBmaWxlLiIKK21zZ3N0ciAiRXJybyBhbyBlc2NyaWJpciBubyBkaXJlY3RvcmlvIHJhaXouIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjczNQorbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdGhlIGNvbXBhdGliaWxpdHkgcGFydCBvZiB0aGUgYWxsb2NhdGlvbiBmaWxlLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjc1MAorbXNnaWQgIndyaXRpbmcgSEZTKyBWb2x1bWUgSGVhZGVyIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6ODUwCittc2dpZCAiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgbG9va2luZyBmb3IgdGhlIG1hbmRhdG9yeSBiYWQgYmxvY2tzIGZpbGUuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6OTA0Cittc2dpZCAiIgorIkl0IHNlZW1zIHRoZXJlIGlzIGFuIGVycm9yIGluIHRoZSBIRlMgd3JhcHBlcjogdGhlIGJhZCBibG9ja3MgZmlsZSBkb2Vzbid0ICIKKyJjb250YWluIHRoZSBlbWJlZGRlZCBIRlMrIHZvbHVtZS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo5NDAKK21zZ2lkICJTb3JyeSwgSEZTKyBjYW5ub3QgYmUgcmVzaXplZCB0aGF0IHdheSB5ZXQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6OTc1Cittc2dpZCAic2hyaW5raW5nIGVtYmVkZGVkIEhGUysgdm9sdW1lIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6OTkxCittc2dpZCAiUmVzaXppbmcgdGhlIEhGUysgdm9sdW1lIGhhcyBmYWlsZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6OTk4CisjLCBmdXp6eQorbXNnaWQgInNocmlua2luZyBIRlMgd3JhcHBlciIKK21zZ3N0ciAiZW5jb2xsZW5kbyIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzoxMDA3Cittc2dpZCAiVXBkYXRpbmcgdGhlIEhGUyB3cmFwcGVyIGhhcyBmYWlsZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MTEwOSBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjExOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgaXMgbm90IGEgcmVhbCAlcyBjaGVjay4gIFRoaXMgaXMgZ29pbmcgdG8gZXh0cmFjdCBzcGVjaWFsIGxvdyBsZXZlbCAiCisiZmlsZXMgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MTU1Cittc2dpZCAiQmFkIGJsb2NrIGxpc3QgaGVhZGVyIGNoZWNrc3VtLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzoxNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkludmFsaWQgc2l6ZSBvZiBhIHRyYW5zYWN0aW9uIGJsb2NrIHdoaWxlIHJlcGxheWluZyB0aGUgam91cm5hbCAoJWkgYnl0ZXMpLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzoyNjAKK21zZ2lkICIiCisiSm91cm5hbCBzdG9yZWQgb3V0c2lkZSBvZiB0aGUgdm9sdW1lIGFyZSBub3Qgc3VwcG9ydGVkLiAgVHJ5IHRvIGRlc2FjdGl2YXRlICIKKyJ0aGUgam91cm5hbCBhbmQgcnVuIFBhcnRlZCBhZ2Fpbi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MjcxCisjLCBmdXp6eQorbXNnaWQgIkpvdXJuYWwgb2Zmc2V0IG9yIHNpemUgaXMgbm90IG11bHRpcGxlIG9mIHRoZSBzZWN0b3Igc2l6ZS4iCittc2dzdHIgIiIKKyJEZWx0YSBkbyBjb21lem8gZG8gY2x1c3RlciA9ICVkLCBxdWUgbm9uIOkgdW4gbfpsdGlwbG8gZG8gdGFtYfFvIGRvIGNsdXN0ZXIgJSIKKyJkLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MjkyCittc2dpZCAiSW5jb3JyZWN0IG1hZ2ljIHZhbHVlcyBpbiB0aGUgam91cm5hbCBoZWFkZXIuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjMwMgorbXNnaWQgIkpvdXJuYWwgc2l6ZSBtaXNtYXRjaCBiZXR3ZWVuIGpvdXJuYWwgaW5mbyBibG9jayBhbmQgam91cm5hbCBoZWFkZXIuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjMxNAorIywgZnV6enkKK21zZ2lkICJTb21lIGhlYWRlciBmaWVsZHMgYXJlIG5vdCBtdWx0aXBsZSBvZiB0aGUgc2VjdG9yIHNpemUuIgorbXNnc3RyICIiCisiRGVsdGEgZG8gY29tZXpvIGRvIGNsdXN0ZXIgPSAlZCwgcXVlIG5vbiDpIHVuIG36bHRpcGxvIGRvIHRhbWHxbyBkbyBjbHVzdGVyICUiCisiZC4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjMyMworbXNnaWQgIiIKKyJUaGUgc2VjdG9yIHNpemUgc3RvcmVkIGluIHRoZSBqb3VybmFsIGlzIG5vdCA1MTIgYnl0ZXMuICBQYXJ0ZWQgb25seSAiCisic3VwcG9ydHMgNTEyIGJ5dGVzIGxlbmd0aCBzZWN0b3JzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozMzUKK21zZ2lkICJCYWQgam91cm5hbCBjaGVja3N1bS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MzUzCittc2dpZCAiIgorIlRoZSBqb3VybmFsIGlzIG5vdCBlbXB0eS4gIFBhcnRlZCBtdXN0IHJlcGxheSB0aGUgdHJhbnNhY3Rpb25zIGJlZm9yZSAiCisib3BlbmluZyB0aGUgZmlsZSBzeXN0ZW0uICBUaGlzIHdpbGwgbW9kaWZ5IHRoZSBmaWxlIHN5c3RlbS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MzgxCittc2dpZCAiIgorIlRoZSB2b2x1bWUgaGVhZGVyIG9yIHRoZSBtYXN0ZXIgZGlyZWN0b3J5IGJsb2NrIGhhcyBjaGFuZ2VkIHdoaWxlIHJlcGxheWluZyAiCisidGhlIGpvdXJuYWwuICBZb3Ugc2hvdWxkIHJlc3RhcnQgUGFydGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3Byb2JlLmM6NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBhcnRlZCBjYW4ndCB1c2UgSEZTIGZpbGUgc3lzdGVtcyBvbiBkaXNrcyB3aXRoIGEgc2VjdG9yIHNpemUgbm90IGVxdWFsIHRvICUiCisiZCBieXRlcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjE1MSBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzoxNTUKK21zZ2lkICJBbiBleHRlbnQgaGFzIG5vdCBiZWVuIHJlbG9jYXRlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjI1MSBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzozMDcKK21zZ2lkICIiCisiQSByZWZlcmVuY2UgdG8gYW4gZXh0ZW50IGNvbWVzIGZyb20gYSBwbGFjZSBpdCBzaG91bGQgbm90LiAgWW91IHNob3VsZCBjaGVjayAiCisidGhlIGZpbGUgc3lzdGVtISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6MzgxCittc2dpZCAiVGhpcyBIRlMgdm9sdW1lIGhhcyBubyBjYXRhbG9nIGZpbGUuICBUaGlzIGlzIHZlcnkgdW51c3VhbCEiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjQ3NQorbXNnaWQgIlRoaXMgSEZTIHZvbHVtZSBoYXMgbm8gZXh0ZW50cyBvdmVyZmxvdyBmaWxlLiAgVGhpcyBpcyBxdWl0ZSB1bnVzdWFsISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NTE3IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjY2OAorbXNnaWQgIiIKKyJUaGUgZXh0ZW50cyBvdmVyZmxvdyBmaWxlIHNob3VsZCBub3QgY29udGFpbiBpdHMgb3duIGV4dGVudHMhICBZb3Ugc2hvdWxkICIKKyJjaGVjayB0aGUgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzo1NzQgbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6ODQ3CisjLCBmdXp6eQorbXNnaWQgIkNvdWxkIG5vdCBjYWNoZSB0aGUgZmlsZSBzeXN0ZW0gaW4gbWVtb3J5LiIKK21zZ3N0ciAiTm9uIHNlIHBvZGUgZGV0ZWN0YXIgdW4gc2lzdGVtYSBkZSBmaWNoZWlyb3MuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NjM1IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjkwOAorbXNnaWQgIkJhZCBibG9ja3MgbGlzdCBjb3VsZCBub3QgYmUgbG9hZGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NjQ5IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjkyNAorbXNnaWQgIkFuIGVycm9yIG9jY3VycmVkIGR1cmluZyBleHRlbnQgcmVsb2NhdGlvbi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NDk1Cittc2dpZCAiVGhpcyBIRlMrIHZvbHVtZSBoYXMgbm8gY2F0YWxvZyBmaWxlLiAgVGhpcyBpcyB2ZXJ5IHVudXN1YWwhIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjYxOQorbXNnaWQgIlRoaXMgSEZTKyB2b2x1bWUgaGFzIG5vIGV4dGVudHMgb3ZlcmZsb3cgZmlsZS4gIFRoaXMgaXMgcXVpdGUgdW51c3VhbCEiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjk0Cittc2dpZCAiZGlzcGxheXMgdGhpcyBoZWxwIG1lc3NhZ2UiCittc2dzdHIgImFtb3NhciBlc3RhIG1lbnNheGUgZGUgYXh1ZGEiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo5NQorbXNnaWQgImxpc3RzIHBhcnRpdGlvbiBsYXlvdXQgb24gYWxsIGJsb2NrIGRldmljZXMiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjk2Cittc2dpZCAiZGlzcGxheXMgbWFjaGluZSBwYXJzZWFibGUgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo5NworbXNnaWQgIm5ldmVyIHByb21wdHMgZm9yIHVzZXIgaW50ZXJ2ZW50aW9uIgorbXNnc3RyICJub24gcGVkaXIgbnVuY2EgYSBpbnRlcnZlbmNp824gZG8gdXN1YXJpbyIKKworIzogcGFydGVkL3BhcnRlZC5jOjk4Cittc2dpZCAiZGlzcGxheXMgdGhlIHZlcnNpb24iCittc2dzdHIgImFtb3NhLWxhIHZlcnNp824iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMTEKKyMsIGZ1enp5Cittc2dpZCAiIgorIk5VTUJFUiBpcyB0aGUgcGFydGl0aW9uIG51bWJlciB1c2VkIGJ5IExpbnV4LiAgT24gTVMtRE9TIGRpc2sgbGFiZWxzLCB0aGUgIgorInByaW1hcnkgcGFydGl0aW9ucyBudW1iZXIgZnJvbSAxIHRvIDQsIGxvZ2ljYWwgcGFydGl0aW9ucyBmcm9tIDUgb253YXJkcy5cbiIKK21zZ3N0ciAiIgorIk1FTk9SIOkgbyBu+m1lcm8gZGUgcGFydGljafNuIHF1ZSB1c2EgTGludXguIE5hcyBldGlxdWV0YXMgZGUgZGlzY28gbXNkb3MsICIKKyJhcyBwYXJ0aWNp825zIHByaW1hcmlhcyB0ZfFlbiBu+m1lcm9zIGRlIDEgYSA0LCBlIGFzIGzzeGljYXMgdOnxZW5vcyBkbyA1IGVuICIKKyJkaWFudGUuXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMTQKK21zZ2lkICJMQUJFTC1UWVBFIGlzIG9uZSBvZjogIgorbXNnc3RyICJUSVBPLUVUSVFVRVRBIOkgdW4gZGVzdGVzOiAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMTUKK21zZ2lkICJGTEFHIGlzIG9uZSBvZjogIgorbXNnc3RyICJNT0RJRiDpIHVuIGRlc3RlczogIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTE2CisjLCBmdXp6eQorbXNnaWQgIlVOSVQgaXMgb25lIG9mOiAiCittc2dzdHIgIk1PRElGIOkgdW4gZGVzdGVzOiAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMTcKK21zZ2lkICJQQVJULVRZUEUgaXMgb25lIG9mOiBwcmltYXJ5LCBsb2dpY2FsLCBleHRlbmRlZFxuIgorbXNnc3RyICIiCisiVElQTy1QQVJUSUNJT04g6TogcHJpbWFyeSAocHJpbWFyaWEpLCBsb2dpY2FsIChs83hpY2EpLCBleHRlbmRlZCAiCisiKGVzdGVuZGlkYSlcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjExOQorbXNnaWQgIkZTLVRZUEUgaXMgb25lIG9mOiAiCittc2dzdHIgIlRJUE8tU0Yg6SB1biBkZXN0ZXM6ICIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMAorbXNnaWQgIiIKKyJTVEFSVCBhbmQgRU5EIGFyZSBkaXNrIGxvY2F0aW9ucywgc3VjaCBhcyA0R0Igb3IgMTAlLiAgTmVnYXRpdmUgdmFsdWVzIGNvdW50ICIKKyJmcm9tIHRoZSBlbmQgb2YgdGhlIGRpc2suICBGb3IgZXhhbXBsZSwgLTFzIHNwZWNpZmllcyBleGFjdGx5IHRoZSBsYXN0ICIKKyJzZWN0b3IuXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMworbXNnaWQgIlNUQVRFIGlzIG9uZSBvZjogb24sIG9mZlxuIgorbXNnc3RyICJFU1RBRE8g6SB1biBkZXN0ZXM6IG9uLCBvZmZcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyNAorbXNnaWQgIkRFVklDRSBpcyB1c3VhbGx5IC9kZXYvaGRhIG9yIC9kZXYvc2RhXG4iCittc2dzdHIgIkRJU1BPU0lUSVZPIGFkb2l0YSBzZXIgL2Rldi9oZGEgb3UgL2Rldi9zZGFcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyNQorbXNnaWQgIk5BTUUgaXMgYW55IHdvcmQgeW91IHdhbnRcbiIKK21zZ3N0ciAiTk9NRSDpIGNhbHF1ZXJhIHBhbGFicmEgcXVlIHF1ZWlyYVxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTI2Cittc2dpZCAiVGhlIHBhcnRpdGlvbiBtdXN0IGhhdmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgRlMtVFlQRXM6ICIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTMwCisjLCBmdXp6eQorbXNnaWQgIiIKKyJDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLlxuIgorIlRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlLCBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS5cbiIKKyJcbiIKKyJUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiIKKyJidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuIgorIk1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbiIKKyJHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuIgorIlxuIgorbXNnc3RyICIiCisiQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLlxuIgorIkVzdGUgcHJvZ3JhbWEg6SBzb2Z0d2FyZSBsaWJyZSwgY29iZXJ0byBwb2xhIExpY2VuY2lhIFD6YmxpY2EgWGVyYWwgZGUgR05VLlxuIgorIlxuIgorIkVzdGUgcHJvZ3JhbWEg6SBkaXN0cmlide1kbyBjb2EgZXNwZXJhbnphIGRlIHF1ZSBzZXhhIPp0aWwsIHBlcm8gU0VOICIKKyJOSU5HVU5IQSBHQVJBTlTNQTsgbmluIHNlcXVlcmEgYSBnYXJhbnTtYSBpbXBs7WNpdGEgZGUgQ09NRVJDSUFCSUxJREFERSBvdSAiCisiQVBUSVRVREUgUEFSQSBVTiBGSU4gRU4gUEFSVElDVUxBUi4gVmV4YSBhIExpY2VuY2lhIFD6YmxpY2EgWGVyYWwgZGUgR05VICIKKyJwYXJhIHRlciBt4WlzIGRldGFsbGVzLlxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiUwLmYlJVx0KHRpbWUgbGVmdCAlLjJkOiUuMmQpIgorbXNnc3RyICIlMC5mJSVcdCh0ZW1wbyByZXN0YW50ZSAlLjJkOiUuMmQpIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQYXJ0aXRpb24gJXMgaXMgYmVpbmcgdXNlZC4gWW91IG11c3QgdW5tb3VudCBpdCBiZWZvcmUgeW91IG1vZGlmeSBpdCB3aXRoICIKKyJQYXJ0ZWQuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGFydGl0aW9uKHMpIG9uICVzIGFyZSBiZWluZyB1c2VkLiIKK21zZ3N0ciAiRXN0YShuKXNlIGEgdXNhLWxhKHMpIHBhcnRpY2nzbihzKSBkZSAlcy4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjMKK21zZ2lkICIiCisiVGhlIGV4aXN0aW5nIGZpbGUgc3lzdGVtIHdpbGwgYmUgZGVzdHJveWVkIGFuZCBhbGwgZGF0YSBvbiB0aGUgcGFydGl0aW9uICIKKyJ3aWxsIGJlIGxvc3QuIERvIHlvdSB3YW50IHRvIGNvbnRpbnVlPyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZXhpc3RpbmcgZGlzayBsYWJlbCBvbiAlcyB3aWxsIGJlIGRlc3Ryb3llZCBhbmQgYWxsIGRhdGEgb24gdGhpcyBkaXNrICIKKyJ3aWxsIGJlIGxvc3QuIERvIHlvdSB3YW50IHRvIGNvbnRpbnVlPyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NDU4IHBhcnRlZC9wYXJ0ZWQuYzo2NTIgcGFydGVkL3BhcnRlZC5jOjEwNDQKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMTI4IHBhcnRlZC9wYXJ0ZWQuYzoxNzcxIHBhcnRlZC9wYXJ0ZWQuYzoxODUyCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTkwMAorbXNnaWQgIlBhcnRpdGlvbiBudW1iZXI/IgorbXNnc3RyICK/TvptZXJvIGRlIHBhcnRpY2nzbj8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo1MDAKK21zZ2lkICJTb3VyY2UgZGV2aWNlPyIKK21zZ3N0ciAiv0Rpc3Bvc2l0aXZvIG9yaXhlPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjUwNAorbXNnaWQgIlNvdXJjZSBwYXJ0aXRpb24gbnVtYmVyPyIKK21zZ3N0ciAiv076bWVybyBkYSBwYXJ0aWNp824gb3JpeGU/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NTA5CisjLCBmdXp6eQorbXNnaWQgIkNhbid0IGNvcHkgYW4gZXh0ZW5kZWQgcGFydGl0aW9uLiIKK21zZ3N0ciAiTm9uIHNlIHBvZGVuIGNvcGlhciBwYXJ0aWNp825zIGVzdGVuZGlkYXMuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NTE1Cittc2dpZCAiRGVzdGluYXRpb24gcGFydGl0aW9uIG51bWJlcj8iCittc2dzdHIgIr9O+m1lcm8gZGEgcGFydGljafNuIGRlIGRlc3Rpbm8/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NjE1Cittc2dpZCAiTmV3IGRpc2sgbGFiZWwgdHlwZT8iCittc2dzdHIgIr9Ob3ZvIHRpcG8gZGUgZXRpcXVldGEgZGUgZGlzY28/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NjU2Cittc2dpZCAiRmlsZSBzeXN0ZW0/IgorbXNnc3RyICK/U2lzdGVtYSBkZSBmaWNoZWlyb3M/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NzA3IHBhcnRlZC9wYXJ0ZWQuYzo4NzgKK21zZ2lkICJQYXJ0aXRpb24gdHlwZT8iCittc2dzdHIgIr9UaXBvIGRlIHBhcnRpY2nzbj8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo3MTQgcGFydGVkL3BhcnRlZC5jOjg4NSBwYXJ0ZWQvcGFydGVkLmM6MTEzMQorbXNnaWQgIlBhcnRpdGlvbiBuYW1lPyIKK21zZ3N0ciAiv05vbWUgZGEgcGFydGljafNuPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjcyMiBwYXJ0ZWQvcGFydGVkLmM6ODk1Cittc2dpZCAiRmlsZSBzeXN0ZW0gdHlwZT8iCittc2dzdHIgIr9UaXBvIGRlIHNpc3RlbWEgZGUgZmljaGVpcm9zPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjcyOSBwYXJ0ZWQvcGFydGVkLmM6ODk3IHBhcnRlZC9wYXJ0ZWQuYzoxMDU5CisjOiBwYXJ0ZWQvcGFydGVkLmM6MTcyNSBwYXJ0ZWQvcGFydGVkLmM6MTc4MAorbXNnaWQgIlN0YXJ0PyIKK21zZ3N0ciAiv0luaWNpbz8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo3MzEgcGFydGVkL3BhcnRlZC5jOjkwMCBwYXJ0ZWQvcGFydGVkLmM6MTA2MgorIzogcGFydGVkL3BhcnRlZC5jOjE3MjcgcGFydGVkL3BhcnRlZC5jOjE3ODIKK21zZ2lkICJFbmQ/IgorbXNnc3RyICK/RmluPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjc2OSBwYXJ0ZWQvcGFydGVkLmM6OTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgcmVxdWVzdGVkIGEgcGFydGl0aW9uIGZyb20gJXMgdG8gJXMuXG4iCisiVGhlIGNsb3Nlc3QgbG9jYXRpb24gd2UgY2FuIG1hbmFnZSBpcyAlcyB0byAlcy4gIElzIHRoaXMgc3RpbGwgYWNjZXB0YWJsZSB0byAiCisieW91PyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6ODkwCisjLCBmdXp6eQorbXNnaWQgIkFuIGV4dGVuZGVkIHBhcnRpdGlvbiBjYW5ub3QgaG9sZCBhIGZpbGUgc3lzdGVtLiAgRGlkIHlvdSB3YW50IG1rcGFydD8iCittc2dzdHIgIiIKKyJBcyBwYXJ0aWNp825zIGVzdGVuZGlkYXNzIG5vbiBwb2RlbiB0ZXIgc2lzdGVtYXMgZGUgZmljaGVpcm9zLiC/UXVlcu1hICIKKyJleGVjdXRhciBta3BhcnQ/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTA1MAorIywgZnV6enkKK21zZ2lkICJDYW4ndCBtb3ZlIGFuIGV4dGVuZGVkIHBhcnRpdGlvbi4iCittc2dzdHIgIk5vbiBzZSBwb2RlbiBtb3ZlLWxhcyBwYXJ0aWNp825zIGV4dGVuZGlkYXMuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTA3OQorbXNnaWQgIkNhbid0IG1vdmUgYSBwYXJ0aXRpb24gb250byBpdHNlbGYuICBUcnkgdXNpbmcgcmVzaXplLCBwZXJoYXBzPyIKK21zZ3N0ciAiTm9uIHNlIHBvZGUgbW92ZXIgdW5oYSBwYXJ0aWNp824gYSBzaSBtZXNtYS4gv05vbiBxdWVyZXLhIHVzYXIgcmVzaXplPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlub3I6ICVkXG4iCittc2dzdHIgIk1lbm9yOiAlZFxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIyOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRmxhZ3M6ICVzXG4iCittc2dzdHIgIk1vZGlmaWNhZG9yZXM6ICIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlsZSBTeXN0ZW06ICVzXG4iCittc2dzdHIgIlNpc3RlbWEgZGUgRmljaGVpcm9zOiAlc1xuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIzMAorIywgZnV6enkKK21zZ2lkICJTaXplOiAgICAgICAgICIKK21zZ3N0ciAiVGFtYfFvOiAgICAgICAlMTAuM2ZNYiAoJWQlJSlcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMzUKKyMsIGZ1enp5Cittc2dpZCAiTWluaW11bSBzaXplOiAiCittc2dzdHIgIlRhbS4gbe1uaW1vOiAgJTEwLjNmTWIgKCVkJSUpXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjM4CisjLCBmdXp6eQorbXNnaWQgIk1heGltdW0gc2l6ZTogIgorbXNnc3RyICJUYW0uIE3heGltbzogICUxMC4zZk1iICglZCUlKVxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJNb2RlbDogJXMgKCVzKVxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMzY0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJEaXNrICVzOiAlc1xuIgorbXNnc3RyICIlcyAgJXMgICVzIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTM2NQorIywgYy1mb3JtYXQKK21zZ2lkICJTZWN0b3Igc2l6ZSAobG9naWNhbC9waHlzaWNhbCk6ICVsbGRCLyVsbGRCXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEzODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQklPUyBjeWxpbmRlcixoZWFkLHNlY3RvciBnZW9tZXRyeTogJWQsJWQsJWQuICBFYWNoIGN5bGluZGVyIGlzICVzLlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMzkyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJQYXJ0aXRpb24gVGFibGU6ICVzXG4iCittc2dzdHIgIr9Ob21lIGRhIHBhcnRpY2nzbj8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDA2IHBhcnRlZC9wYXJ0ZWQuYzoxNDA5Cittc2dpZCAiTnVtYmVyIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDA2IHBhcnRlZC9wYXJ0ZWQuYzoxNDA5CisjLCBmdXp6eQorbXNnaWQgIlN0YXJ0IgorbXNnc3RyICK/SW5pY2lvPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MDcgcGFydGVkL3BhcnRlZC5jOjE0MTAKKyMsIGZ1enp5Cittc2dpZCAiRW5kIgorbXNnc3RyICK/RmluPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MTAKKyMsIGZ1enp5Cittc2dpZCAiU2l6ZSIKK21zZ3N0ciAicmVzaXplIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQxNAorbXNnaWQgIlR5cGUiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MTYKKyMsIGZ1enp5Cittc2dpZCAiRmlsZSBzeXN0ZW0iCittc2dzdHIgIr9TaXN0ZW1hIGRlIGZpY2hlaXJvcz8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDE5CisjLCBmdXp6eQorbXNnaWQgIk5hbWUiCittc2dzdHIgIm5hbWUiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDIxCittc2dpZCAiRmxhZ3MiCittc2dzdHIgIk1vZGlmaWNhZG9yZXMiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDc3Cittc2dpZCAiRnJlZSBTcGFjZSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTYyNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIkEgJXMgJXMgcGFydGl0aW9uIHdhcyBmb3VuZCBhdCAlcyAtPiAlcy4gIERvIHlvdSB3YW50IHRvIGFkZCBpdCB0byB0aGUgIgorInBhcnRpdGlvbiB0YWJsZT8iCittc2dzdHIgIiIKKyJBdG9wb3VzZSB1bmhhIHBhcnRpY2nzbiAlcyAlcyBlbiAlLjNmTWIgLT4gJS4zZk1iLiC/UXVlcmUgZW5nYWRpbGEg4SB04WJvYSAiCisiZGUgcGFydGljafNucz8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNjYzCittc2dpZCAic2VhcmNoaW5nIGZvciBmaWxlIHN5c3RlbXMiCittc2dzdHIgImJ1c2NhbmRvIHNpc3RlbWFzIGRlIGZpY2hlaXJvcyIKKworIzogcGFydGVkL3BhcnRlZC5jOjE4NzcKK21zZ2lkICJOZXcgZGV2aWNlPyIKK21zZ3N0ciAiv05vdm8gZGlzcG9zaXRpdm8/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTkwMgorIywgZnV6enkKK21zZ2lkICJGbGFnIHRvIEludmVydD8iCittc2dzdHIgIr9Nb2RpZmljYWRvciBhIGNhbWJpYXI/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTkwNworbXNnaWQgIk5ldyBzdGF0ZT8iCittc2dzdHIgIr9Ob3ZvIGVzdGFkbz8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxOTQ0Cittc2dpZCAiVW5pdD8iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIwOTMKK21zZ2lkICJjaGVjayIKK21zZ3N0ciAiY2hlY2siCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMDk2CisjLCBmdXp6eQorbXNnaWQgIiIKKyJjaGVjayBOVU1CRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIGEgc2ltcGxlIGNoZWNrIG9uIHRoZSBmaWxlIHN5c3RlbSIKK21zZ3N0ciAiIgorImNoZWNrIE1FTk9SICAgICAgICAgICAgICBmYWNlciB1bmhhIGNvbXByb2JhY2nzbiBzaW1wbGUgbm8gc2lzdGVtYSBkZSAiCisiZmljaGVpcm9zIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEwMgorbXNnaWQgImNwIgorbXNnc3RyICJjcCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMDUKKyMsIGZ1enp5Cittc2dpZCAiIgorImNwIFtGUk9NLURFVklDRV0gRlJPTS1OVU1CRVIgVE8tTlVNQkVSICAgY29weSBmaWxlIHN5c3RlbSB0byBhbm90aGVyICIKKyJwYXJ0aXRpb24iCittc2dzdHIgIiIKKyJjcCBbREUtRElTUE9TSVRJVk9dIERFLU1FTk9SIEEtTUVOT1IgIGNvcGlhciBzaXN0ZW1hIGRlIGZpY2guIG5vdXRyYSAiCisicGFydGljafNuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjExMQorbXNnaWQgImhlbHAiCittc2dzdHIgImhlbHAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTE0CisjLCBmdXp6eQorbXNnaWQgIiIKKyJoZWxwIFtDT01NQU5EXSAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50IGdlbmVyYWwgaGVscCwgb3IgaGVscCBvbiAiCisiQ09NTUFORCIKK21zZ3N0ciAiaGVscCBbQ09NQU5ET10gICAgICAgICAgIGFtb3NhciBheHVkYSB4ZXJhbCwgb3UgYXh1ZGEgc29icmUgbyBDT01BTkRPIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEyMAorbXNnaWQgIm1rbGFiZWwiCittc2dzdHIgIm1rbGFiZWwiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTIwCisjLCBmdXp6eQorbXNnaWQgIm1rdGFibGUiCittc2dzdHIgIm1rbGFiZWwiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTIzCisjLCBmdXp6eQorbXNnaWQgIiIKKyJta2xhYmVsLG1rdGFibGUgTEFCRUwtVFlQRSAgICAgICAgICAgICAgIGNyZWF0ZSBhIG5ldyBkaXNrbGFiZWwgKHBhcnRpdGlvbiAiCisidGFibGUpIgorbXNnc3RyICIiCisibWtsYWJlbCBUSVBPLUVUSVFVRVRBICAgIGNyZWFyIHVuaGEgbm92YSBldGlxdWV0YSBkZSBkaXNjby904WJvYSBkZSBwYXJ0aWNp824iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTI5Cittc2dpZCAibWtmcyIKK21zZ3N0ciAibWtmcyIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMzIKKyMsIGZ1enp5Cittc2dpZCAiIgorIm1rZnMgTlVNQkVSIEZTLVRZUEUgICAgICAgICAgICAgICAgICAgICAgbWFrZSBhIEZTLVRZUEUgZmlsZSBzeXN0ZW0gb24gIgorInBhcnRpdGl0b24gTlVNQkVSIgorbXNnc3RyICIiCisibWtmcyBNRU5PUiBUSVBPLVNGICAgICBjcmVhciB1biBzaXN0ZW1hIGRlIGZpY2hlaXJvcyBUSVBPLVNGIG5hIHBhcnRpY2nzbiAiCisiTUVOT1IiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTM4Cittc2dpZCAibWtwYXJ0IgorbXNnc3RyICJta3BhcnQiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTQxCisjLCBmdXp6eQorbXNnaWQgIm1rcGFydCBQQVJULVRZUEUgW0ZTLVRZUEVdIFNUQVJUIEVORCAgICAgbWFrZSBhIHBhcnRpdGlvbiIKK21zZ3N0ciAibWtwYXJ0IFRJUE8tUEFSVElDSU9OIFtUSVBPLUZTXSBJTklDSU8gRklOICAgICAgICBjcmVhciB1bmhhIHBhcnRpY2nzbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNDcKKyMsIGZ1enp5Cittc2dpZCAiIgorIidta3BhcnQnIG1ha2VzIGEgcGFydGl0aW9uIHdpdGhvdXQgY3JlYXRpbmcgYSBuZXcgZmlsZSBzeXN0ZW0gb24gdGhlICIKKyJwYXJ0aXRpb24uICBGUy1UWVBFIG1heSBiZSBzcGVjaWZpZWQgdG8gc2V0IGFuIGFwcHJvcHJpYXRlIHBhcnRpdGlvbiBJRC5cbiIKK21zZ3N0ciAiIgorIm1rcGFydCBjcmVhIHVuaGEgcGFydGljafNuIHNlbiBjcmVhciB1biBub3ZvIHNpc3RlbWEgZGUgZmljaGVpcm9zIG5hICIKKyJwYXJ0aWNp824uIERlYmUgZXNwZWNpZmljYXJzZSBUSVBPLVNGIHBhcmEgZXN0YWJyZWNlciB1biBJRCBkZSBwYXJ0aWNp824gIgorImF4ZWl0YWRvLlxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE1MgorbXNnaWQgIm1rcGFydGZzIgorbXNnc3RyICJta3BhcnRmcyIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNTUKKyMsIGZ1enp5Cittc2dpZCAiIgorIm1rcGFydGZzIFBBUlQtVFlQRSBGUy1UWVBFIFNUQVJUIEVORCAgICAgbWFrZSBhIHBhcnRpdGlvbiB3aXRoIGEgZmlsZSBzeXN0ZW0iCittc2dzdHIgIiIKKyJta3BhcnRmcyBUSVBPLVBBUlRJQ0lPTiBUSVBPLVNGIElOSUNJTyBGSU5cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXIgdW5oYSBwYXJ0aWNp824gY3VuIHNpc3RlbWEgZGUgIgorImZpY2hlaXJvcyIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNjEKK21zZ2lkICJtb3ZlIgorbXNnc3RyICJtb3ZlIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE2NAorIywgZnV6enkKK21zZ2lkICJtb3ZlIE5VTUJFUiBTVEFSVCBFTkQgICAgICAgICAgICAgICAgICAgIG1vdmUgcGFydGl0aW9uIE5VTUJFUiIKK21zZ3N0ciAibW92ZSBNRU5PUiBJTklDSU8gRklOICAgICAgICAgbW92ZS1sYSBwYXJ0aWNp824gTUVOT1IiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTY5Cittc2dpZCAibmFtZSIKK21zZ3N0ciAibmFtZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNzIKKyMsIGZ1enp5Cittc2dpZCAibmFtZSBOVU1CRVIgTkFNRSAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lIHBhcnRpdGlvbiBOVU1CRVIgYXMgTkFNRSIKK21zZ3N0ciAibmFtZSBNRU5PUiBOT01FICAgICAgICAgICAgICAgcG/xZS1sbyBOT01FIOEgcGFydGljafNuIE1FTk9SIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE3NworbXNnaWQgInByaW50IgorbXNnc3RyICJwcmludCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxODAKK21zZ2lkICIiCisicHJpbnQgW2RldmljZXN8ZnJlZXxsaXN0LGFsbHxOVU1CRVJdICAgICBkaXNwbGF5IHRoZSBwYXJ0aXRpb24gdGFibGUsICIKKyJhdmFpbGFibGUgZGV2aWNlcywgZnJlZSBzcGFjZSwgYWxsIGZvdW5kIHBhcnRpdGlvbnMsIG9yIGEgcGFydGljdWxhciAiCisicGFydGl0aW9uIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTg1Cittc2dpZCAiIgorIldpdGhvdXQgYXJndW1lbnRzLCAncHJpbnQnIGRpc3BsYXlzIHRoZSBlbnRpcmUgcGFydGl0aW9uIHRhYmxlLiBIb3dldmVyIHdpdGggIgorInRoZSBmb2xsb3dpbmcgYXJndW1lbnRzIGl0IHBlcmZvcm1zIHZhcmlvdXMgb3RoZXIgYWN0aW9ucy5cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE4NworbXNnaWQgIiAgZGV2aWNlcyAgIDogZGlzcGxheSBhbGwgYWN0aXZlIGJsb2NrIGRldmljZXNcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE4OAorbXNnaWQgIiIKKyIgIGZyZWUgICAgICA6IGRpc3BsYXkgaW5mb3JtYXRpb24gYWJvdXQgZnJlZSB1bnBhcnRpdGlvbmVkIHNwYWNlIG9uIHRoZSAiCisiY3VycmVudCBibG9jayBkZXZpY2VcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE5MAorIywgZnV6enkKK21zZ2lkICIiCisiICBsaXN0LCBhbGwgOiBkaXNwbGF5IHRoZSBwYXJ0aXRpb24gdGFibGVzIG9mIGFsbCBhY3RpdmUgYmxvY2sgZGV2aWNlc1xuIgorbXNnc3RyICIiCisicHJpbnQgW01FTk9SXSAgICAgICAgICAgICAgICAgYW1vc2EtbGEgdOFib2EgZGUgcGFydGljafNucyBvdSB1bmhhIHBhcnRpY2nzbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxOTEKK21zZ2lkICIiCisiICBOVU1CRVIgICAgOiBkaXNwbGF5IG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBwYXJ0aWN1bGFyICIKKyJwYXJ0aXRpb25cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE5NgorbXNnaWQgInF1aXQiCittc2dzdHIgInF1aXQiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTk5CisjLCBmdXp6eQorbXNnaWQgInF1aXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCBwcm9ncmFtIgorbXNnc3RyICJxdWl0ICAgICAgICAgICAgICAgICAgICAgICAgICBzYe1yIGRvIHByb2dyYW1hIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIwNAorbXNnaWQgInJlc2N1ZSIKK21zZ3N0ciAicmVzY3VlIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIwNworIywgZnV6enkKK21zZ2lkICIiCisicmVzY3VlIFNUQVJUIEVORCAgICAgICAgICAgICAgICAgICAgICAgICByZXNjdWUgYSBsb3N0IHBhcnRpdGlvbiBuZWFyIFNUQVJUICIKKyJhbmQgRU5EIgorbXNnc3RyICIiCisicmVzY3VlIElOSUNJTyBGSU4gICAgICAgICAgIHJlY3VwZXJhIHVuaGEgcGFydGljafNuIHBlcmRpZGEgZW50cmUgSU5JQ0lPIGUgIgorIkZJTiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMTMKK21zZ2lkICJyZXNpemUiCittc2dzdHIgInJlc2l6ZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMTYKKyMsIGZ1enp5Cittc2dpZCAiIgorInJlc2l6ZSBOVU1CRVIgU1RBUlQgRU5EICAgICAgICAgICAgICAgICAgcmVzaXplIHBhcnRpdGlvbiBOVU1CRVIgYW5kIGl0cyAiCisiZmlsZSBzeXN0ZW0iCittc2dzdHIgIiIKKyJyZXNjdWUgSU5JQ0lPIEZJTiAgICAgICAgICAgcmVjdXBlcmEgdW5oYSBwYXJ0aWNp824gcGVyZGlkYSBlbnRyZSBJTklDSU8gZSAiCisiRklOIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIyNAorbXNnaWQgInJtIgorbXNnc3RyICJybSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMjcKKyMsIGZ1enp5Cittc2dpZCAicm0gTlVNQkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcGFydGl0aW9uIE5VTUJFUiIKK21zZ3N0ciAicm0gTUVOT1IgICAgICAgICAgICAgICAgIGJvcnJhLWxhIHBhcnRpY2nzbiBNRU5PUiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMzIKK21zZ2lkICJzZWxlY3QiCittc2dzdHIgInNlbGVjdCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMzUKKyMsIGZ1enp5Cittc2dpZCAic2VsZWN0IERFVklDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9vc2UgdGhlIGRldmljZSB0byBlZGl0IgorbXNnc3RyICJzZWxlY3QgRElTUE9TSVRJVk8gICAgICAgICAgICBlc2NvbGxlLWxvIGRpc3Bvc2l0aXZvIGEgZWRpdGFyIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI0MAorbXNnaWQgInNldCIKK21zZ3N0ciAic2V0IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI0MworIywgZnV6enkKK21zZ2lkICIiCisic2V0IE5VTUJFUiBGTEFHIFNUQVRFICAgICAgICAgICAgICAgICAgICBjaGFuZ2UgdGhlIEZMQUcgb24gcGFydGl0aW9uIE5VTUJFUiIKK21zZ3N0ciAic2V0IE1FTk9SIE1PRElGIEVTVEFETyAgICAgICBjYW1iaWFyIHVuIE1PRElGaWNhZG9yIG5hIHBhcnRpY2nzbiBNRU5PUiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNDkKK21zZ2lkICJ0b2dnbGUiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNTIKKyMsIGZ1enp5Cittc2dpZCAiIgorInRvZ2dsZSBbTlVNQkVSIFtGTEFHXV0gICAgICAgICAgICAgICAgICAgdG9nZ2xlIHRoZSBzdGF0ZSBvZiBGTEFHIG9uICIKKyJwYXJ0aXRpb24gTlVNQkVSIgorbXNnc3RyICJib290IE1FTk9SICAgICAgICAgICAgICAgZXN0YWJsZWNlLWxhIHBhcnRpY2nzbiBkZSBhcnJpbnF1ZSBhIE1FTk9SIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI1OAorIywgZnV6enkKK21zZ2lkICJ1bml0IgorbXNnc3RyICJxdWl0IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI2MQorIywgZnV6enkKK21zZ2lkICJ1bml0IFVOSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCB0aGUgZGVmYXVsdCB1bml0IHRvIFVOSVQiCittc2dzdHIgInF1aXQgICAgICAgICAgICAgICAgICAgICAgICAgIHNh7XIgZG8gcHJvZ3JhbWEiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjY2Cittc2dpZCAidmVyc2lvbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI2OQorbXNnaWQgIiIKKyJ2ZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXkgdGhlIHZlcnNpb24gbnVtYmVyIGFuZCAiCisiY29weXJpZ2h0IGluZm9ybWF0aW9uIG9mIEdOVSBQYXJ0ZWQiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNzMKK21zZ2lkICIiCisiJ3ZlcnNpb24nIGRpc3BsYXlzIGNvcHlyaWdodCBhbmQgdmVyc2lvbiBpbmZvcm1hdGlvbiBjb3JyZXNwb25kaW5nIHRvIHRoaXMgIgorImNvcHkgb2YgR05VIFBhcnRlZFxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMzM1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLWhsbXN2XSBbREVWSUNFIFtDT01NQU5EIFtQQVJBTUVURVJTXV0uLi5dXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIzNzkKK21zZ2lkICJObyBkZXZpY2UgZm91bmQiCittc2dzdHIgIk5vbiBzZSBhdG9wb3UgbyBkaXNwb3NpdGl2by4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyNDEyCittc2dpZCAiV0FSTklORzogWW91IGFyZSBub3Qgc3VwZXJ1c2VyLiAgV2F0Y2ggb3V0IGZvciBwZXJtaXNzaW9ucy4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjI0NTAKKyMsIGZ1enp5Cittc2dpZCAiWW91IG1heSBuZWVkIHRvIHVwZGF0ZSAvZXRjL2ZzdGFiLlxuIgorbXNnc3RyICJOb24gZXNxdWV6YSBhY3R1YWxpemFyIC9ldGMvZnN0YWIsIHNlIOkgbmVjZXNhcmlvLlxuIgorCisjOiBwYXJ0ZWQvdWkuYzoxNjAKK21zZ2lkICJXZWxjb21lIHRvIEdOVSBQYXJ0ZWQhIFR5cGUgJ2hlbHAnIHRvIHZpZXcgYSBsaXN0IG9mIGNvbW1hbmRzLlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjE2MworIywgZnV6enkKK21zZ2lkICIiCisiVXNhZ2U6IHBhcnRlZCBbT1BUSU9OXS4uLiBbREVWSUNFIFtDT01NQU5EIFtQQVJBTUVURVJTXS4uLl0uLi5dXG4iCisiQXBwbHkgQ09NTUFORHMgd2l0aCBQQVJBTUVURVJTIHRvIERFVklDRS4gIElmIG5vIENPTU1BTkQocykgYXJlIGdpdmVuLCBydW4gIgorImluXG4iCisiaW50ZXJhY3RpdmUgbW9kZS5cbiIKK21zZ3N0ciAiIgorIlVzbzogcGFydGVkIFtPUENJ005dLi4uIFtESVNQT1NJVElWTyBbQ09NQU5ETyBbUEFSwU1FVFJPU10uLi5dLi4uXVxuIgorIkFwbGljYS1sbyBDT01BTkRPIGNvcyBQQVLBTUVUUk9TIGFvIERJU1BPU0lUSVZPLiBTZSBub24gc2UgaW5kaWNhIG5pbmf6blxuIgorIkNPTUFORE8sIGZ1bmNpb25hIGVuIG1vZG8gaW50ZXJhY3Rpdm8uXG4iCisKKyM6IHBhcnRlZC91aS5jOjE2OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiXG4iCisiWW91IGZvdW5kIGEgYnVnIGluIEdOVSBQYXJ0ZWQhIEhlcmUncyB3aGF0IHlvdSBoYXZlIHRvIGRvOlxuIgorIlxuIgorIkRvbid0IHBhbmljISBUaGUgYnVnIGhhcyBtb3N0IGxpa2VseSBub3QgYWZmZWN0ZWQgYW55IG9mIHlvdXIgZGF0YS5cbiIKKyJIZWxwIHVzIHRvIGZpeCB0aGlzIGJ1ZyBieSBkb2luZyB0aGUgZm9sbG93aW5nOlxuIgorIlxuIgorIkNoZWNrIHdoZXRoZXIgdGhlIGJ1ZyBoYXMgYWxyZWFkeSBiZWVuIGZpeGVkIGJ5IGNoZWNraW5nXG4iCisidGhlIGxhc3QgdmVyc2lvbiBvZiBHTlUgUGFydGVkIHRoYXQgeW91IGNhbiBmaW5kIGF0OlxuIgorIlxuIgorIlx0aHR0cDovL2Z0cC5nbnUub3JnL2dudS9wYXJ0ZWQvXG4iCisiXG4iCisiUGxlYXNlIGNoZWNrIHRoaXMgdmVyc2lvbiBwcmlvciB0byBidWcgcmVwb3J0aW5nLlxuIgorIlxuIgorIklmIHRoaXMgaGFzIG5vdCBiZWVuIGZpeGVkIHlldCBvciBpZiB5b3UgZG9uJ3Qga25vdyBob3cgdG8gY2hlY2ssXG4iCisicGxlYXNlIHZpc2l0IHRoZSBHTlUgUGFydGVkIHdlYnNpdGU6XG4iCisiXG4iCisiXHRodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvcGFydGVkXG4iCisiXG4iCisiZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uXG4iCisiXG4iCisiWW91ciByZXBvcnQgc2hvdWxkIGNvbnRhaW4gdGhlIHZlcnNpb24gb2YgdGhpcyByZWxlYXNlICglcylcbiIKKyJhbG9uZyB3aXRoIHRoZSBlcnJvciBtZXNzYWdlIGJlbG93LCB0aGUgb3V0cHV0IG9mXG4iCisiXG4iCisiXHRwYXJ0ZWQgREVWSUNFIHVuaXQgY28gcHJpbnQgdW5pdCBzIHByaW50XG4iCisiXG4iCisiYW5kIHRoZSBmb2xsb3dpbmcgaGlzdG9yeSBvZiBjb21tYW5kcyB5b3UgZW50ZXJlZC5cbiIKKyJBbHNvIGluY2x1ZGUgYW55IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgeW91ciBzZXR1cCB5b3VcbiIKKyJjb25zaWRlciBpbXBvcnRhbnQuXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6Mjg0Cittc2dpZCAiIgorIlxuIgorIkNvbW1hbmQgSGlzdG9yeTpcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzozNjYKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IFNFR1ZfTUFQRVJSIChBZGRyZXNzIG5vdCBtYXBwZWQgdG8gb2JqZWN0KVxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjM3MgorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogU0VHVl9BQ0NFUlIgKEludmFsaWQgcGVybWlzc2lvbnMgZm9yIG1hcHBlZCBvYmplY3QpXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6Mzc3Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBBIGdlbmVyYWwgU0lHU0VHViBzaWduYWwgd2FzIGVuY291bnRlcmVkLlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQxMAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0lOVERJViAoSW50ZWdlcjogZGl2aWRlIGJ5IHplcm8pIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQxNQorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0lOVE9WRiAoSW50ZWdlcjogb3ZlcmZsb3cpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQyMAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0ZMVERJViAoRmxvYXQ6IGRpdmlkZSBieSB6ZXJvKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0MjUKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRPVkYgKEZsb2F0OiBvdmVyZmxvdykiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDMwCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxUVU5EIChGbG9hdDogdW5kZXJmbG93KSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0MzUKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRSRVMgKEZsb2F0OiBpbmV4YWN0IHJlc3VsdCkiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDQwCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxUSU5WIChGbG9hdDogaW52YWxpZCBvcGVyYXRpb24pIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQ0NQorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0ZMVFNVQiAoRmxvYXQ6IHN1YnNjcmlwdCBvdXQgb2YgcmFuZ2UpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQ1MAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogQSBnZW5lcmFsIFNJR0ZQRSBzaWduYWwgd2FzIGVuY291bnRlcmVkLiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0ODMKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9JTExPUEMgKElsbGVnYWwgT3Bjb2RlKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0ODgKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9JTExPUE4gKElsbGVnYWwgT3BlcmFuZCkiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDkzCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfSUxMQURSIChJbGxlZ2FsIGFkZHJlc3NpbmcgbW9kZSkiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDk4Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfSUxMVFJQIChJbGxlZ2FsIFRyYXApIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjUwMworbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX1BSVk9QQyAoUHJpdmlsZWdlZCBPcGNvZGUpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjUwOAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX1BSVlJFRyAoUHJpdmlsZWdlZCBSZWdpc3RlcikiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NTEzCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfQ09QUk9DIChDb3Byb2Nlc3NvciBFcnJvcikiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NTE4Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfQkFEU1RLIChJbnRlcm5hbCBTdGFjayBFcnJvcikiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NTIzCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBBIGdlbmVyYWwgU0lHSUxMIHNpZ25hbCB3YXMgZW5jb3VudGVyZWQuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjEwMjQKK21zZ2lkICJFeHBlY3RpbmcgYSBwYXJ0aXRpb24gbnVtYmVyLiIKK21zZ3N0ciAiRXNw6XJhc2UgdW4gbvptZXJvIGRlIHBhcnRpY2nzbi4iCisKKyM6IHBhcnRlZC91aS5jOjEwMzMKK21zZ2lkICJQYXJ0aXRpb24gZG9lc24ndCBleGlzdC4iCittc2dzdHIgIkEgcGFydGljafNuIG5vbiBleGlzdGUuIgorCisjOiBwYXJ0ZWQvdWkuYzoxMDUzCittc2dpZCAiRXhwZWN0aW5nIGEgZmlsZSBzeXN0ZW0gdHlwZS4iCittc2dzdHIgIkVzcOlyYXNlIHVuIHRpcG8gZGUgc2lzdGVtYSBkZSBmaWNoZWlyb3MuIgorCisjOiBwYXJ0ZWQvdWkuYzoxMDYwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gZmlsZSBzeXN0ZW0gdHlwZSBcIiVzXCIuIgorbXNnc3RyICJUaXBvIGRlIHNpc3RlbWEgZGUgZmljaGVpcm9zIFwiJXNcIiBkZXNjb/FlY2lkby4iCisKKyM6IHBhcnRlZC91aS5jOjEwODAKK21zZ2lkICJFeHBlY3RpbmcgYSBkaXNrIGxhYmVsIHR5cGUuIgorbXNnc3RyICJFc3DpcmFzZSB1biB0aXBvIGRlIGV0aXF1ZXRhIGRlIGRpc2NvLiIKKworIzogcGFydGVkL3VpLmM6MTE3OAorbXNnaWQgIkNhbid0IGNyZWF0ZSBhbnkgbW9yZSBwYXJ0aXRpb25zLiIKK21zZ3N0ciAiTm9uIHNlIHBvZGVuIGNyZWFyIG3haXMgcGFydGljafNucy4iCisKKyM6IHBhcnRlZC91aS5jOjExODgKK21zZ2lkICJFeHBlY3RpbmcgYSBwYXJ0aXRpb24gdHlwZS4iCittc2dzdHIgIkVzcOlyYXNlIHVuIHRpcG8gZGUgcGFydGljafNuLiIKKworIzogcGFydGVkL3VpLmM6MTMxNQorbXNnaWQgIm9uIgorbXNnc3RyICJvbiIKKworIzogcGFydGVkL3VpLmM6MTMxNgorbXNnaWQgIm9mZiIKK21zZ3N0ciAib2ZmIgorCisjOiBwYXJ0ZWQvdWkuYzoxNDMxCittc2dpZCAiT1BUSU9OczoiCittc2dzdHIgIk9QQ0nTTnM6IgorCisjOiBwYXJ0ZWQvdWkuYzoxNDM2Cittc2dpZCAiQ09NTUFORHM6IgorbXNnc3RyICJDT01BTkRPczoiCisKKyM6IHBhcnRlZC91aS5jOjE0NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNpbmcgJXNcbiIKK21zZ3N0ciAiVXNhbmRvICVzXG4iCisKKyM6IHBhcnRlZC91aS5jOjE1MTkKK21zZ2lkICJUaGlzIGNvbW1hbmQgZG9lcyBub3QgbWFrZSBzZW5zZSBpbiBub24taW50ZXJhY3RpdmUgbW9kZS5cbiIKK21zZ3N0ciAiIgorCisjfiBtc2dpZCAid2hlcmUgbmVjZXNzYXJ5LCBwcm9tcHRzIGZvciB1c2VyIGludGVydmVudGlvbiIKKyN+IG1zZ3N0ciAib25kZSBzZXhhIG5lY2VzYXJpbywgcGVkaS1sYSBpbnRlcnZlbmNp824gZG8gdXN1YXJpbyIKKworIywgZnV6enkKKyN+IG1zZ2lkICIiCisjfiAiV2l0aG91dCBhcmd1bWVudHMsIHByaW50IGRpc3BsYXlzIHRoZSBlbnRpcmUgcGFydGl0aW9uIHRhYmxlLiBXaXRoICIKKyN+ICInZnJlZSdcbiIKKyN+ICJhcmd1bWVudCwgaW5mb3JtYXRpb24gYWJvdXQgZnJlZSBzcGFjZSB3aWxsIGJlIGRpc3BsYXllZCBvdGhlcndpc2UgaWYgYVxuIgorI34gInBhcnRpdGlvbiBudW1iZXIgaXMgZ2l2ZW4sIHRoZW4gbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBpcyBkaXNwbGF5ZWRcbiIKKyN+ICJhYm91dCB0aGF0IHBhcnRpdGlvbi4gSWYgdGhlICdhbGwnIGFyZ3VtZW50IGlzIHBhc3NlZCBpbnN0ZWFkLCBwYXJ0aXRpb25cbiIKKyN+ICJpbmZvcm1hdGlvbiBmb3IgYWxsIGRldmljZXMgd2lsbCBiZSBkaXNwbGF5ZWQuXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJTZW4gYXJndW1lbnRvcywgcHJpbnQgYW1vc2EgdG9kYSBhIHThYm9hIGRlIHBhcnRpY2nzbnMuIFNlIHNlIGThXG4iCisjfiAidW4gbvptZXJvIGRlIHBhcnRpY2nzbiwgaGFzZSBhbW9zYXIgaW5mb3JtYWNp824gbeFpcyBkZXRhbGxhZGEgc29icmVcbiIKKyN+ICJlc2EgcGFydGljafNuLlxuIgorCisjfiBtc2dpZCAiIgorI34gIlRoZSBzZWN0b3Igc2l6ZSBvbiAlcyBpcyAlZCBieXRlcy4gIFBhcnRlZCBpcyBrbm93biBub3QgdG8gd29yayBwcm9wZXJseSAiCisjfiAid2l0aCBkcml2ZXMgd2l0aCBzZWN0b3Igc2l6ZXMgb3RoZXIgdGhhbiAlZCBieXRlcyIKKyN+IG1zZ3N0ciAiIgorI34gIk8gdGFtYfFvIGRvcyBzZWN0b3JlcyBkZSAlcyDpIGRlICVkIGJ5dGVzLiBT4WJlc2UgcXVlIHBhcnRlZCBub24gdHJhYmFsbGEgIgorI34gImNvcnJlY3RhbWVudGUgY29uIHVuaWRhZGVzIHF1ZSB0ZfFhbiB1biB0YW1h8W8gZGUgc2VjdG9yIGRpc3RpbnRvIGRlICVkICIKKyN+ICJieXRlcyIKKworI34gbXNnaWQgIkNvdWxkIG5vdCByZWFkIGdlb21ldHJ5IG9mICVzIC0gJXMuIgorI34gbXNnc3RyICJOb24gc2UgcHVpZG8gbGUtbGEgeGVvbWV0cu1hIGRlICVzIC0gJXMuIgorCisjfiBtc2dpZCAiRGV2aWNlICVzIGhhcyBkb2RnZXkgZ2VvbWV0cnkuIgorI34gbXNnc3RyICJPIGRpc3Bvc2l0aXZvICVzIHRlbiB1bmhhIHhlb21ldHLtYSBtb2kgZXN0cmHxYS4iCisKKyN+IG1zZ2lkICJJREUiCisjfiBtc2dzdHIgIklERSIKKworI34gbXNnaWQgIlNDU0kiCisjfiBtc2dzdHIgIlNDU0kiCisKKyN+IG1zZ2lkICJEZXZpY2UgJXMgaXMgbmVpdGhlciBhIFNDU0kgbm9yIElERSBkcml2ZS4iCisjfiBtc2dzdHIgIk8gZGlzcG9zaXRpdm8gJXMgbm9uIOkgdW5oYSB1bmlkYWRlIFNDU0kgbmluIElERS4iCisKKyN+IG1zZ2lkICJFcnJvciByZWFkaW5nICVzICglcykgdG8gZGV0ZXJtaW5lIGlmIHBhcnRpdGlvbiBpcyBtb3VudGVkLiIKKyN+IG1zZ3N0ciAiRXJybyBhbyBsZXIgJXMgKCVzKSBwYXJhIGRldGVybWluYXIgc2UgYSBwYXJ0aWNp824gZXN04SBtb250YWRhLiIKKworI34gbXNnaWQgIiIKKyN+ICJVbmFibGUgdG8gZGV0ZXJtaW5lIGlmIHBhcnRpdGlvbnMgYXJlIG1vdW50ZWQgdmlhIC9wcm9jL21vdW50cyBvciAvZXRjLyIKKyN+ICJtdGFiLiAgTWFrZSBzdXJlIHlvdSBkb24ndCBhdHRlbXB0IHRvIHJlc2l6ZSBvciBtb2RpZnkgbW91bnRlZCBmaWxlICIKKyN+ICJzeXN0ZW1zLiAgKEV2ZW4gcmVhZC1vbmx5IG1vdW50ZWQpIgorI34gbXNnc3RyICIiCisjfiAiTm9uIHNlIHB1aWRvIGRldGVybWluYXIgc2UgYXMgcGFydGljafNucyBlc3ThbiBtb250YWRhcyBtZWRpYW50ZSAvcHJvYy8iCisjfiAibW91bnRzIG91IC9ldGMvbXRhYi4gQXNlZ/pyZXNlIGRlIHF1ZSBub24gdGVudGEgY2FtYmlhLWxvIHRhbWHxbyBvdSAiCisjfiAibW9kaWZpY2FyIHNpc3RlbWFzIGRlIGZpY2hlaXJvcyBtb250YWRvcyAoaW5jbHVzbyBzZSBlc3ThbiBtb250YWRvcyBlbiBz8y0iCisjfiAibGVjdHVyYSkuIgorCisjfiBtc2dpZCAiIgorI34gIlRoZSBwYXJ0aXRpb24gdGFibGUgb24gJXMgaXMgaW5jb25zaXN0ZW50LiAgVGhlcmUgYXJlIG1hbnkgcmVhc29ucyB3aHkgIgorI34gInRoaXMgbWlnaHQgYmUgdGhlIGNhc2UuICBIb3dldmVyLCB0aGUgbW9zdCBsaWtlbHkgcmVhc29uIGlzIHRoYXQgTGludXggIgorI34gImRldGVjdGVkIHRoZSBCSU9TIGdlb21ldHJ5IGZvciAlcyBpbmNvcnJlY3RseS4gIEdOVSBQYXJ0ZWQgc3VzcGVjdHMgdGhlICIKKyN+ICJyZWFsIGdlb21ldHJ5IHNob3VsZCBiZSAlZC8lZC8lZCAobm90ICVkLyVkLyVkKS4gIFlvdSBzaG91bGQgY2hlY2sgd2l0aCAiCisjfiAieW91ciBCSU9TIGZpcnN0LCBhcyB0aGlzIG1heSBub3QgYmUgY29ycmVjdC4gIFlvdSBjYW4gaW5mb3JtIExpbnV4IGJ5ICIKKyN+ICJhZGRpbmcgdGhlIHBhcmFtZXRlciAlcz0lZCwlZCwlZCB0byB0aGUgY29tbWFuZCBsaW5lLiAgU2VlIHRoZSBMSUxPIG9yICIKKyN+ICJHUlVCIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uICBJZiB5b3UgdGhpbmsgUGFydGVkJ3Mgc3VnZ2VzdGVkICIKKyN+ICJnZW9tZXRyeSBpcyBjb3JyZWN0LCB5b3UgbWF5IHNlbGVjdCBJZ25vcmUgdG8gY29udGludWUgKGFuZCBmaXggTGludXggIgorI34gImxhdGVyKS4gIE90aGVyd2lzZSwgc2VsZWN0IENhbmNlbCAoYW5kIGZpeCBMaW51eCBhbmQvb3IgdGhlIEJJT1Mgbm93KS4iCisjfiBtc2dzdHIgIiIKKyN+ICJBIHThYm9hIGRlIHBhcnRpY2nzbnMgZGUgJXMgbm9uIOkgY29uc2lzdGVudGUuIEhhaSBtb2l0b3MgbW90aXZvcyBwb2xvcyAiCisjfiAicXVlIGlzdG8gcHVpZG8gcGFzYXIuIE5lbWJhcmdhbnRlcywgbyBtb3Rpdm8gbeFpcyBwcm9iYWJsZSDpIHF1ZSBMaW51eCAiCisjfiAiZGV0ZWN0YXJhIGEgeGVvbWV0cu1hIGRhIEJJT1MgZGUgJXMgaW5jb3JyZWN0YW1lbnRlLiBHTlUgUGFydGVkIHNvc3BlaXRhICIKKyN+ICJxdWUgYSB2ZXJkYWRlaXJhIHhlb21ldHLtYSBkZWJlcu1hIHNlciAlZC8lZC8lZCAoZSBub24gJWQvJWQvJWQpLiBEZWJlcu1hICIKKyN+ICJjb21wcm9iYXIgaXN0byBjb2EgQklPUyBwcmltZWlybywgcG9ycXVlIHRvZG8gaXN0byBwb2Rlcu1hIG5vbiBzZXIgIgorI34gImNvcnJlY3RvLiBQb2RlIGluZm9ybWFyIGEgTGludXggZW5nYWRpbmRvIG8gcGFy4W1ldHJvICVzPSVkLCVkLCVkIG5hIGxp8WEgIgorI34gImRlIGNvbWFuZG8uIFZleGEgYSBkb2N1bWVudGFjafNuIGRlIExJTE8gb3UgR1JVQiBwYXJhIG9idGVyIG3haXMgIgorI34gImluZm9ybWFjafNuLiBTZSBjcmUgcXVlIGEgeGVvbWV0cu1hIHN1eGVyaWRhIHBvciBQYXJ0ZWQg6SBjb3JyZWN0YSwgcG9kZSAiCisjfiAiZXNjb2xsZXIgXCJJZ25vcmFyXCIgcGFyYSBjb250aW51YXIgKGUgYXJyYW54YXIgTGludXggZGVzcG9pcykuIE5vdXRybyAiCisjfiAiY2FzbywgZXNjb2xsYSBcIkNhbmNlbGFyXCIgKGUgYXJyYW54ZSBMaW51eCBlL291IGEgQklPUyBhZ29yYSkuIgorCisjfiBtc2dpZCAiIgorI34gIlRoZSBwYXJ0aXRpb24gdGFibGUgb24gJXMgaXMgaW5jb25zaXN0ZW50LiAgVGhlcmUgYXJlIG1hbnkgcmVhc29ucyB3aHkgIgorI34gInRoaXMgbWlnaHQgYmUgdGhlIGNhc2UuICBPZnRlbiwgdGhlIHJlYXNvbiBpcyB0aGF0IExpbnV4IGRldGVjdGVkIHRoZSAiCisjfiAiQklPUyBnZW9tZXRyeSBpbmNvcnJlY3RseS4gIEhvd2V2ZXIsIHRoaXMgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHRoZSBjYXNlICIKKyN+ICJoZXJlLiAgSXQgaXMgc2FmZSB0byBpZ25vcmUsYnV0IGlnbm9yaW5nIG1heSBjYXVzZSAoZml4YWJsZSkgcHJvYmxlbXMgIgorI34gIndpdGggc29tZSBib290IGxvYWRlcnMsIGFuZCBtYXkgY2F1c2UgcHJvYmxlbXMgd2l0aCBGQVQgZmlsZSBzeXN0ZW1zLiAgIgorI34gIlVzaW5nIExCQSBpcyByZWNvbW1lbmRlZC4iCisjfiBtc2dzdHIgIiIKKyN+ICJBIHThYm9hIGRlIHBhcnRpY2nzbnMgZGUgJXMgbm9uIOkgY29uc2lzdGVudGUuIEhhaSBtb2l0b3MgbW90aXZvcyBwb2xvcyAiCisjfiAicXVlIGlzdG8gcHVpZG8gcGFzYXIuIE1vaXRhcyB2ZWNlcywgbyBtb3Rpdm8g6SBxdWUgTGludXggZGV0ZWN0b3UgYSAiCisjfiAieGVvbWV0cu1hIGRhIEJJT1MgaW5jb3JyZWN0YW1lbnRlLiBOZW1iYXJnYW50ZXMsIGVzdGUgbm9uIHBhcmVjZSBzZS1sbyAiCisjfiAiY2FzbyBhZ29yYS4gUPNkZXNlIGlnbm9yYXIgaXN0byBkZSB4ZWl0byBzZWd1cm8gcGVybyBmYWNlbG8gcG9kZSBjYXVzYXIgIgorI34gInByb2JsZW1hcyAocXVlIHNlIHBvZGVuIGFycmFueGFyKSBjb24gYWxn+m5zIGNhcmdhZG9yZXMgZGUgaW5pY2lvLCBlICIKKyN+ICJ0YW3pbiBwb2RlIGNhdXNhciBwcm9ibGVtYXMgY29uIHNpc3RlbWFzIGRlIGZpY2hlaXJvcyBGQVQuIFJlY29t6W5kYXNlIG8gIgorI34gImVtcHJlZ28gZGUgTEJBLiIKKworI34gbXNnaWQgIiIKKyN+ICJVbmFibGUgdG8gYWxpZ24gcGFydGl0aW9uIHByb3Blcmx5LiAgVGhpcyBwcm9iYWJseSBtZWFucyB0aGF0IGFub3RoZXIgIgorI34gInBhcnRpdGlvbmluZyB0b29sIGdlbmVyYXRlZCBhbiBpbmNvcnJlY3QgcGFydGl0aW9uIHRhYmxlLCBiZWNhdXNlIGl0ICIKKyN+ICJkaWRuJ3QgaGF2ZSB0aGUgY29ycmVjdCBCSU9TIGdlb21ldHJ5LiAgSXQgaXMgc2FmZSB0byBpZ25vcmUsYnV0IGlnbm9yaW5nICIKKyN+ICJtYXkgY2F1c2UgKGZpeGFibGUpIHByb2JsZW1zIHdpdGggc29tZSBib290IGxvYWRlcnMuIgorI34gbXNnc3RyICIiCisjfiAiTm9uIHNlIHB1aWRvIGFsafFhLWxhIHBhcnRpY2nzbiBjb3JyZWN0YW1lbnRlLiBJc3RvLCBzZWd1cmFtZW50ZSwgIgorI34gInNpZ25pZmlxdWUgcXVlIG91dHJhIGZlcnJhbWVudGEgZGUgcGFydGljaW9uYW1lbnRvIHhlcm91IHVuaGEgdOFib2EgZGUgIgorI34gInBhcnRpY2nzbnMgaW5jb3JyZWN0YSwgcG9ycXVlIG5vbiB0afFhIGEgeGVvbWV0cu1hIGRhIEJJT1MgY29ycmVjdGEuICIKKyN+ICJQ82Rlc2UgaWdub3JhciBkZSB4ZWl0byBzZWd1cm8sIHBlcm8gZmFjZWxvIHBvZGUgcHJvdm9jYXIgcHJvYmxlbWFzIChxdWUgIgorI34gInNlIHBvZGVuIGFycmFueGFyKSBjb24gYWxn+m5zIGNhcmdhZG9yZXMgZGUgaW5pY2lvLiIKKworI34gbXNnaWQgIkF0dGVtcHQgdG8gcmVhZCBzZWN0b3JzICVsZC0lbGQgb3V0c2lkZSBvZiBwYXJ0aXRpb24gb24gJXMiCisjfiBtc2dzdHIgIlRlbnThcm9uc2UgbGUtbG9zIHNlY3RvcmVzICVsZC0lbGQgZvNyYSBkYSBwYXJ0aWNp824gZW4gJXMiCisKKyN+IG1zZ2lkICIiCisjfiAiVGhpcyBleHQyIGZpbGVzeXN0ZW0gaGFzIGEgcmF0aGVyIHN0cmFuZ2UgbGF5b3V0ISAgUGFydGVkIGNhbid0IHJlc2l6ZSAiCisjfiAidGhpcyAoeWV0KS4iCisjfiBtc2dzdHIgIiIKKyN+ICKhRXN0ZSBzaXN0ZW1hIGRlIGZpY2hlaXJvcyB0ZW4gdW5oYSBvcmdhbml6YWNp824gbW9pIGVzdHJh8WEhIFBhcnRlZCBub24gIgorI34gImxsZSBwb2RlIGNhbWJpYS1sbyB0YW1h8W8gYSBpc3RvIChh7W5kYSkuIgorCisjfiBtc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGludmFsaWQgc2lnbmF0dXJlIGZvciBhIEZBVCBmaWxlIHN5c3RlbXMuIgorI34gbXNnc3RyICIiCisjfiAiTyBzaXN0ZW1hIGRlIGZpY2hlaXJvcyB0ZW4gdW5oYSBzaW5hdHVyYSBpbmNvcnJlY3RhIHBhcmEgdW4gc2lzdGVtYSBkZSAiCisjfiAiZmljaGVpcm9zIEZBVC4iCisKKyN+IG1zZ2lkICJTVEFSVCBhbmQgRU5EIGFyZSBpbiBtZWdhYnl0ZXNcbiIKKyN+IG1zZ3N0ciAiSU5JQ0lPIGUgRklOIGluZO1jYW5zZSBlbiBtZWdhYnl0ZXNcbiIKKworI34gbXNnaWQgIlBhcnRpdGlvbiAlcyBpcyBiZWluZyB1c2VkLiIKKyN+IG1zZ3N0ciAiRXN0YXNlIGEgdXNhLWxhIHBhcnRpY2nzbiAlcy4iCisKKyN+IG1zZ2lkICIiCisjfiAiWW91IHJlcXVlc3RlZCB0byBjcmVhdGUgYSBwYXJ0aXRpb24gYXQgJS4zZi0lLjNmTWIuIFRoZSBjbG9zZXN0IFBhcnRlZCAiCisjfiAiY2FuIG1hbmFnZSBpcyAlLjNmLSUuM2ZNYi4iCisjfiBtc2dzdHIgIiIKKyN+ICJTb2xpY2l0b3UgY3JlYXIgdW5oYSBwYXJ0aWNp824gZW4gJS4zZi0lLjNmTWIuIE8gbeFpcyBzZW1lbGxhbnRlIHF1ZSBwb2RlICIKKyN+ICJtYW5leGFyIFBhcnRlZCDpICUuM2YtJS4zZk1iLiIKKworI34gbXNnaWQgIiIKKyN+ICJZb3UgcmVxdWVzdGVkIHRvIG1vdmUgdGhlIHBhcnRpdGlvbiB0byAlLjNmLSUuM2ZNYi4gVGhlIGNsb3Nlc3QgUGFydGVkICIKKyN+ICJjYW4gbWFuYWdlIGlzICUuM2YtJS4zZk1iLiIKKyN+IG1zZ3N0ciAiIgorI34gIlNvbGljaXRvdSBtb3ZlLWxhIHBhcnRpY2nzbiBhICUuM2YtJS4zZk1iLiBPIG3haXMgc2VtZWxsYW50ZSBxdWUgcG9kZSAiCisjfiAibWFuZXhhciBQYXJ0ZWQg6SAlLjNmLSUuM2ZNYi4iCisKKyN+IG1zZ2lkICJEaXNrIGdlb21ldHJ5IGZvciAlczogMC4wMDAtJS4zZiBtZWdhYnl0ZXNcbiIKKyN+IG1zZ3N0ciAiWGVvbWV0cu1hIGRlIGRpc2NvIGRlICVzOiAwLjAwMC0lLjNmIG1lZ2FieXRlc1xuIgorCisjfiBtc2dpZCAiRGlzayBsYWJlbCB0eXBlOiAlc1xuIgorI34gbXNnc3RyICJUaXBvIGRlIGV0aXF1ZXRhIGRlIGRpc2NvOiAlc1xuIgorCisjfiBtc2dpZCAiTWlub3IgICAgU3RhcnQgICAgICAgRW5kICAgICAiCisjfiBtc2dzdHIgIk1lbm9yICAgIEluaWNpbyAgICAgRmluICAgICAiCisKKyN+IG1zZ2lkICJUeXBlICAgICAgIgorI34gbXNnc3RyICJUaXBvICAgICAgIgorCisjfiBtc2dpZCAiRmlsZXN5c3RlbSAgIgorI34gbXNnc3RyICJTaXN0ZW1hIGRlIGZpY2hlaXJvcyAgIgorCisjfiBtc2dpZCAiTmFtZSAgICAgICAgICAgICAgICAgICIKKyN+IG1zZ3N0ciAiTm9tZSAgICAgICAgICAgICAgICAgICIKKworI34gbXNnaWQgIiIKKyN+ICJZb3UgcmVxdWVzdGVkIHRvIHJlc2l6ZSB0aGUgcGFydGl0aW9uIHRvICUuM2YtJS4zZk1iLiBUaGUgY2xvc2VzdCBQYXJ0ZWQgIgorI34gImNhbiBtYW5hZ2UgaXMgJS4zZi0lLjNmTWIuIgorI34gbXNnc3RyICIiCisjfiAiU29saWNpdG91IGNhbWJpYS1sbyB0YW1h8W8gZGEgcGFydGljafNuIGEgJS4zZi0lLjNmTWIuIE8gbeFpcyBzZW1lbGxhbnRlICIKKyN+ICJxdWUgcG9kZSBtYW5leGFyIFBhcnRlZCDpICUuM2YtJS4zZk1iLiIKKworI34gbXNnaWQgInJlc2l6ZSBNSU5PUiBTVEFSVCBFTkQgICAgICAgIHJlc2l6ZSBmaWxlc3lzdGVtIG9uIHBhcnRpdGlvbiBNSU5PUiIKKyN+IG1zZ3N0ciAiIgorI34gInJlc2l6ZSBNRU5PUiBJTklDSU8gRklOICBjYW1iaWEgbyB0YW1h8W8gZG8gc2lzdGVtYSBkZSBmaWNoZWlyb3MgZGEgcGFydC4gIgorI34gIk1FTk9SIgorCisjfiBtc2dpZCAiIgorI34gIllvdSBmb3VuZCBhIGJ1ZyBpbiBHTlUgUGFydGVkLiAgUGxlYXNlIGVtYWlsIGEgYnVnIHJlcG9ydCB0byBidWctIgorI34gInBhcnRlZEBnbnUub3JnIGNvbnRhaW5pbmcgdGhlIHZlcnNpb24gKCVzKSwgYW5kIHRoZSBmb2xsb3dpbmcgbWVzc2FnZTpcbiIKKyN+IG1zZ3N0ciAiIgorI34gIkF0b3BvdSB1biBlcnJvIGVuIEdOVSBwYXJ0ZWQuIFBvciBmYXZvciwgZW527WUgdW4gaW5mb3JtZSBkZSBlcnJvIGEgYnVnLSIKKyN+ICJwYXJ0ZWRAZ251Lm9yZyBxdWUgY29udGXxYSBhIHZlcnNp824gKCVzKSBlIGEgc2VndWludGUgbWVuc2F4ZTpcbiIKKworI34gbXNnaWQgIiIKKyN+ICIgIFlvdSBoYXZlIFdpbmRvd3MgRkFUIHBhcnRpdGlvbihzKSB0aGF0IGFyZSBub3QgdXNpbmcgTEJBLiAgSWYgeW91ciBCSU9TICIKKyN+ICJzdXBwb3J0cyBMQkEsIHRoZW4geW91IHNob3VsZCBzd2l0Y2ggdG8gTEJBIGJ5IHNldHRpbmcgdGhlIExCQSBmbGFnIG9uICIKKyN+ICJhbGwgRkFUIHBhcnRpdGlvbnMuICBPdGhlcndpc2UsIG1ha2Ugc3VyZSB0aGUgb3BlcmF0aW5nIHN5c3RlbSBhbmQgdGhlICIKKyN+ICJCSU9TIGhhdmUgdGhlIHNhbWUgZ2VvbWV0cnkgYmVmb3JlIHJlc2l6aW5nIGFueSBGQVQgcGFydGl0aW9ucy4iCisjfiBtc2dzdHIgIiIKKyN+ICIgVGVuIHBhcnRpY2nzbnMgRkFUIGRlIFdpbmRvd3MgcXVlIG5vbiBlbXByZWdhbiBMQkEuIFNlIGEgQklPUyBzb3BvcnRhICIKKyN+ICJMQkEgZGViZXLtYSBjYW1iaWFyIGEgTEJBIGVzdGFicmVjZW5kbyBvIG1vZGlmaWNhZG9yIExCQSBlbiB082RhbGFzICIKKyN+ICJwYXJ0aWNp825zIEZBVC4gTm91dHJvIGNhc28sIGFzZWf6cmVzZSBkZSBxdWUgbyBzaXN0ZW1hIG9wZXJhdGl2byBlIGEgIgorI34gIkJJT1MgdGXxZW4gYSBtZXNtYSB4ZW9tZXRy7WEgYW50ZXMgZGUgY2FtYmlhLWxvIHRhbWHxbyBkZSBuaW5ndW5oYSAiCisjfiAicGFydGljafNuIEZBVC4iCisKKyN+IG1zZ2lkICIiCisjfiAiVGhlIG9wZXJhdGluZyBzeXN0ZW0gdGhpbmtzIHRoZSBnZW9tZXRyeSBvbiAlcyBpcyAlZC8lZC8lZC4gIFRoZXJlZm9yZSwgIgorI34gImN5bGluZGVyIDEwMjQgZW5kcyBhdCAlLjNmTS4lcyIKKyN+IG1zZ3N0ciAiIgorI34gIk8gc2lzdGVtYSBvcGVyYXRpdm8gY3JlIHF1ZSBhIHhlb21ldHLtYSBkZSAlcyDpICVkLyVkLyVkLiBQb2xvIHRhbnRvLCBvICIKKyN+ICJjaWxpbmRybyAxMDI0IHJlbWF0YSBlbiAlLjNmTS4lcyIKKworI34gbXNnaWQgIlRoZSBvcGVyYXRpbmcgc3lzdGVtIHRoaW5rcyB0aGUgZ2VvbWV0cnkgb24gJXMgaXMgJWQvJWQvJWQuJXMiCisjfiBtc2dzdHIgIk8gc2lzdGVtYSBvcGVyYXRpdm8gY3JlIHF1ZSBhIHhlb21ldHLtYSBkZSAlcyDpICVkLyVkLyVkLiVzIgorCisjfiBtc2dpZCAiIgorI34gIlRoZSBGQVRzIGFyZW4ndCBiaWcgZW5vdWdoIHRvIGRlc2NyaWJlIGFsbCBjbHVzdGVycyEgIEVhY2ggRkFUIGlzICVkICIKKyN+ICJzZWN0b3JzLiAgVGhlcmUgYXJlICVkIGNsdXN0ZXJzLCB3aGljaCB3b3VsZCByZXF1aXJlIGVhY2ggRkFUIHRvIGJlICVkICIKKyN+ICJzZWN0b3JzLiAgVGhpcyBpcyBSRUFMTFkgd2VpcmQuICBZb3UgbWlnaHQgd2FudCB0byB3cml0ZSB1cyBhbiBlbWFpbDogYnVnLSIKKyN+ICJwYXJ0ZWRAZ251Lm9yZyIKKyN+IG1zZ3N0ciAiIgorI34gIqFBcyBGQVRzIG5vbiBzb24gZ3JhbmRlcyBkYWJvbmRvIHBhcmEgZGVzY3JpYmlyIHTzZG9sb3MgY2x1c3RlcnMhIENhZGEgIgorI34gIkZBVCB0ZW4gJWQgc2VjdG9yZXMuIEhhaSAlZCBjbHVzdGVycywgcXVlIHByZWNpc2FuIHF1ZSBjYWRhIEZBVCB0ZfFhICVkICIKKyN+ICJzZWN0b3Jlcy4gSXN0byBTSSBxdWUg6SBlc3RyYfFvLiBTZSBjYWRyYSBkZWJlcu1hIG1hbmRhcm5vcyB1bmhhIG1lbnNheGUgIgorI34gImVsZWN0cvNuaWNhOiBidWctcGFydGVkQGdudS5vcmciCisKKyMgv1BhcmEgcXVlIGNhcmFsbG8gcG9uIGVzdGUgYSBhYnJldmlhdHVyYSBNQiBlbiBtaW76c2N1bGFzLAorIyBjYW5kbyB0b2RvIG8gbXVuZG8gc2FiZSBxdWUg6SBlbiBtYWn6c2N1bGFzPyAtIGp0CisjfiBtc2dpZCAiIgorI34gIlRoaXMgc3dhcCBwYXJ0aXRpb24gaXMgbm90IGNvbXBhdGlibGUgd2l0aCBMaW51eCB2ZXJzaW9uIDIuMS4xMTcgb3IgIgorI34gImVhcmxpZXIuICBVc2UgYSBzbWFsbGVyIHBhcnRpdGlvbiAobWF4aW11bSBzaXplIDEyOG1iKSBpZiB5b3Ugd2FudCB0byB1c2UgIgorI34gIm9sZCB2ZXJzaW9ucyBvZiBMaW51eC4iCisjfiBtc2dzdHIgIiIKKyN+ICJFc3RhIHBhcnRpY2nzbiBkZSBpbnRlcmNhbWJpbyBub24g6SBjb21wYXRpYmxlIGNvbiBMaW51eCB2ZXJzafNuIDIuMS4xMTcgIgorI34gIm91IGFudGVyaW9yLiBFbXByZWd1ZSB1bmhhIHBhcnRpY2nzbiBt4WlzIHBlcXVlbmEgKHRhbWHxbyBt4XhpbW8gMTI4TUIpICIKKyN+ICJzZSBxdWVyZSB1c2FyIHZlcnNp825zIGFudGlnYXMgZGUgTGludXguIgorCisjfiBtc2dpZCAidW5rbm93biIKKyN+IG1zZ3N0ciAiZGVzY2/xZWNpZG8iCisKKyN+IG1zZ2lkICJVbmtub3duIFNDU0kiCisjfiBtc2dzdHIgIlNDU0kgZGVzY2/xZWNpZG8iCisKKyN+IG1zZ2lkICJHVUlEIFBhcnRpdGlvbiBUYWJsZSBIZWFkZXIgU2lnbmF0dXJlIGlzIHdyb25nOiAiCisjfiBtc2dzdHIgIkEgU2luYXR1cmEgQ2FiZWNlaXJhIGRhIFThYm9hIGRlIFBhcnRpY2nzbnMgR1VJRCDpIGluY29ycmVjdGE6ICIKKworI34gbXNnaWQgIiBzaG91bGQgYmUgIgorI34gbXNnc3RyICIgZGVi7WEgc2VyICIKKworI34gbXNnaWQgIkdQVCBIZWFkZXIgQ1JDIGNoZWNrIGZhaWxlZCwgJXggc2hvdWxkIGJlICV4LiIKKyN+IG1zZ3N0ciAiQSBjb21wcm9iYWNp824gQ1JDIGRhIENhYmVjZWlyYSBHUFQsICV4IGRlYu1hIHNlciAleC4iCisKKyN+IG1zZ2lkICJHUFQgUGFydGl0aW9uIEVudHJ5IEFycmF5IENSQyBjaGVjayBmYWlsZWQsICV4IHNob3VsZCBiZSAleC4iCisjfiBtc2dzdHIgIiIKKyN+ICJBIGNvbXByb2JhY2nzbiBDUkMgZG8gQXJyYXkgZGUgRW50cmFkYXMgZGEgUGFydGljafNuIEdQVCBmYWxsb3UsICV4IGRlYu1hICIKKyN+ICJzZXIgJXguIgorCisjfiBtc2dpZCAiIgorI34gIlRoaXMgZGlzayBjb250YWlucyBhIHZhbGlkIFByaW1hcnkgYW5kIEFsdGVybmF0ZSBHVUlEIFBhcnRpdGlvbiBUYWJsZSBidXQgIgorI34gInRoZSBQcm90ZWN0aXZlIE1CUiBpcyBpbnZhbGlkLiAgVGhpcyBnZW5lcmFsbHkgbWVhbnMgdGhhdCB0aGUgZGlzayBoYWQgIgorI34gIkdQVCBwYXJ0aXRpb25zIG9uIGl0LCBidXQgdGhlbiBhIGxlZ2FjeSBwYXJ0aXRpb24gZWRpdGluZyB0b29sIHdhcyB1c2VkICIKKyN+ICJ0byBjaGFuZ2UgdGhlIHBhcnRpdGlvbiB0YWJsZSBzdG9yZWQgaW4gdGhlIE1CUi5cbiIKKyN+ICJXaGljaCBkYXRhIGlzIHZhbGlkLCAgR1BUIG9yIE1CUj9cbiIKKyN+ICJZZXMgd2lsbCBhc3N1bWUgdGhhdCB0aGUgR1BUIGluZm9ybWF0aW9uIGlzIGNvcnJlY3QsIGFuZCByZXdyaXRlIHRoZSAiCisjfiAiUE1CUi5cbiIKKyN+ICJObyB3aWxsIGFzc3VtZSB0aGF0IHRoZSBNQlIgaXMgY29ycmVjdCwgYW5kIGVyYXNlIHRoZSBHUFQgaW5mb3JtYXRpb24uXG4iCisjfiAiSWdub3JlIHdpbGwgYXNzdW1lIHRoYXQgdGhlIE1CUiBpcyBjb3JyZWN0LCBidXQgbm90IGNoYW5nZSB0aGUgZGlzay4iCisjfiBtc2dzdHIgIiIKKyN+ICJFc3RlIGRpc2NvIGNvbnTpbiB1bmhhIFThYm9hIGRlIFBhcnRpY2nzbiBHVUlEIFByaW1hcmlhIGUgQWx0ZXJuYXRpdmEsICIKKyN+ICJwZXJvIG8gTUJSIFByb3RlY3RvciBub24g6SB24WxpZG8uIElzdG8gYWRvaXRhIHNpZ25pZmljYXIgcXVlIG8gZGlzY28gIgorI34gInRp8WEgcGFydGljafNucyBHUFQsIHBlcm8gZGVzcG9pcyBlbXByZWdvdXNlIHVuaGEgZmVycmFtZW50YSBkZSAiCisjfiAicGFydGljaW9uYW1lbnRvIGFudGlnYSBwYXJhIGNhbWJpYS1sYSB04WJvYSBkZSBwYXJ0aWNp825zIGFybWFjZW5hZGEgbm8gIgorI34gIk1CUi5cbiIKKyN+ICK/UXVlIGRhdG9zIHNvbiB24WxpZG9zLCBHUFQgb3UgTUJSP1xuIgorI34gIlNpIGhhIHN1cG9yIHF1ZSBhIGluZm9ybWFjafNuIEdQVCDpIGNvcnJlY3RhLCBlIGhhIHJlZ3JhdmEtbG8gUE1CUi5cbiIKKyN+ICJOb24gaGEgc3Vwb3IgcXVlIG8gTUJSIOkgY29ycmVjdG8sIGUgaGEgYm9ycmEtbGEgaW5mb3JtYWNp824gR1BULlxuIgorI34gIklnbm9yYXIgaGEgc3Vwb3IgcXVlIG8gTUJSIOkgY29ycmVjdG8sIHBlcm8gbm9uIGhhIGNhbWJpYS1sbyBkaXNjby4iCisKKyN+IG1zZ2lkICIiCisjfiAiVGhpcyBkaXNrIGNvbnRhaW5zIGEgdmFsaWQgQWx0ZXJuYXRlIEdVSUQgUGFydGl0aW9uIFRhYmxlIGJ1dCB0aGUgUHJpbWFyeSAiCisjfiAiR1BUIGFuZCBQcm90ZWN0aXZlIE1CUiBhcmUgaW52YWxpZC4gIFRoaXMgZ2VuZXJhbGx5IG1lYW5zIHRoYXQgdGhlIGRpc2sgIgorI34gImhhZCBHUFQgcGFydGl0aW9ucyBvbiBpdCwgYnV0IHRoZW4gYSBsZWdhY3kgcGFydGl0aW9uIGVkaXRpbmcgdG9vbCB3YXMgIgorI34gInVzZWQgdG8gY2hhbmdlIHRoZSBwYXJ0aXRpb24gdGFibGUgc3RvcmVkIGluIHRoZSBNQlIuXG4iCisjfiAiV2hpY2ggZGF0YSBpcyB2YWxpZCwgIEdQVCBvciBNQlI/XG4iCisjfiAiWWVzIHdpbGwgYXNzdW1lIHRoYXQgdGhlIEdQVCBpbmZvcm1hdGlvbiBpcyBjb3JyZWN0LCBhbmQgd2lsbCByZXdyaXRlIHRoZSAiCisjfiAiUE1CUiBhbmQgUHJpbWFyeSBHUFQuXG4iCisjfiAiTm8gd2lsbCBhc3N1bWUgdGhhdCB0aGUgTUJSIGlzIGNvcnJlY3QsIGFuZCBlcmFzZSB0aGUgR1BUIGluZm9ybWF0aW9uLlxuIgorI34gIklnbm9yZSB3aWxsIGFzc3VtZSB0aGF0IHRoZSBNQlIgaXMgY29ycmVjdCwgYnV0IG5vdCBjaGFuZ2UgdGhlIGRpc2suIgorI34gbXNnc3RyICIiCisjfiAiRXN0ZSBkaXNjbyBjb2506W4gdW5oYSBUYWJvYSBkZSBQYXJ0aWNp825zIEdVSUQgQWx0ZXJuYXRpdmEgduFsaWRhLCBwZXJvICIKKyN+ICJhIEdQVCBQcmltYXJpYSBlIG8gTUJSIFByb3RlY3RvciBub24gc29uIHbhbGlkb3MuIElzdG8gYWRvaXRhIHNpZ25pZmljYXIgIgorI34gInF1ZSBvIGRpc2NvIHRpdm8gcGFydGljafNucyBHUFQgcGVybyBkZXNwb2lzIGVtcHJlZ291c2UgdW5oYSBmZXJyYW1lbnRhICIKKyN+ICJkZSBwYXJ0aWNpb25hbWVudG8gYW50aWdhIHBhcmEgY2FtYmlhLWxhIHThYm9hIGRlIHBhcnRpY2nzbnMgYXJtYWNlbmFkYSAiCisjfiAibm8gTUJSLlxuIgorI34gIr9RdWUgZGF0b3Mgc29uIHbhbGlkb3MsIEdQVCBvdSBNQlI/XG4iCisjfiAiU2kgaGEgc3Vwb3IgcXVlIGEgaW5mb3JtYWNp824gR1BUIOkgY29ycmVjdGEsIGUgaGEgcmVncmF2YS1sbyBQTUJSIGUgYSAiCisjfiAiR1BUIFByaW1hcmlhLlxuIgorI34gIk5vbiBoYSBzdXBvciBxdWUgbyBNQlIg6SBjb3JyZWN0bywgZSBoYSBib3JyYS1sYSBpbmZvcm1hY2nzbiBHUFQuXG4iCisjfiAiSWdub3JhciBoYSBzdXBvciBxdWUgbyBNQlIg6SBjb3JyZWN0bywgcGVybyBub24gaGEgY2FtYmlhLWxvIGRpc2NvLiIKKworI34gbXNnaWQgIiIKKyN+ICJUaGlzIGRpc2sgY29udGFpbnMgYSB2YWxpZCBQcmltYXJ5IEdVSUQgUGFydGl0aW9uIFRhYmxlIGJ1dCB0aGUgQWx0ZXJuYXRlICIKKyN+ICJHUFQgYW5kIFByb3RlY3RpdmUgTUJSIGFyZSBpbnZhbGlkLiAgVGhpcyBnZW5lcmFsbHkgbWVhbnMgdGhhdCB0aGUgZGlzayAiCisjfiAiaGFkIEdQVCBwYXJ0aXRpb25zIG9uIGl0LCBidXQgdGhlbiBhIGxlZ2FjeSBwYXJ0aXRpb24gZWRpdGluZyB0b29sIHdhcyAiCisjfiAidXNlZCB0byBjaGFuZ2UgdGhlIHBhcnRpdGlvbiB0YWJsZSBzdG9yZWQgaW4gdGhlIE1CUi5cbiIKKyN+ICJXaGljaCBkYXRhIGlzIHZhbGlkLCAgR1BUIG9yIE1CUj9cbiIKKyN+ICJZZXMgd2lsbCBhc3N1bWUgdGhhdCB0aGUgR1BUIGluZm9ybWF0aW9uIGlzIGNvcnJlY3QsIGFuZCB3aWxsIHJld3JpdGUgdGhlICIKKyN+ICJQTUJSIGFuZCBBbHRlcm5hdGUgR1BULlxuIgorI34gIk5vIHdpbGwgYXNzdW1lIHRoYXQgdGhlIE1CUiBpcyBjb3JyZWN0LCBhbmQgZXJhc2UgdGhlIEdQVCBpbmZvcm1hdGlvbi5cbiIKKyN+ICJJZ25vcmUgd2lsbCBhc3N1bWUgdGhhdCB0aGUgTUJSIGlzIGNvcnJlY3QsIGJ1dCBub3QgY2hhbmdlIHRoZSBkaXNrLlxuIgorI34gbXNnc3RyICIiCisjfiAiRXN0ZSBkaXNjbyBjb2506W4gdW5oYSBUYWJvYSBkZSBQYXJ0aWNp825zIEdVSUQgUHJpbWFyaWEgduFsaWRhLCBwZXJvIGEgIgorI34gIkdQVCBBbHRlcm5hdGl2YSBlIG8gTUJSIFByb3RlY3RvciBub24gc29uIHbhbGlkb3MuIElzdG8gYWRvaXRhIHNpZ25pZmljYXIgIgorI34gInF1ZSBvIGRpc2NvIHRpdm8gcGFydGljafNucyBHUFQgcGVybyBkZXNwb2lzIGVtcHJlZ291c2UgdW5oYSBmZXJyYW1lbnRhICIKKyN+ICJkZSBwYXJ0aWNpb25hbWVudG8gYW50aWdhIHBhcmEgY2FtYmlhLWxhIHThYm9hIGRlIHBhcnRpY2nzbnMgYXJtYWNlbmFkYSAiCisjfiAibm8gTUJSLlxuIgorI34gIr9RdWUgZGF0b3Mgc29uIHbhbGlkb3MsIEdQVCBvdSBNQlI/XG4iCisjfiAiU2kgaGEgc3Vwb3IgcXVlIGEgaW5mb3JtYWNp824gR1BUIOkgY29ycmVjdGEsIGUgaGEgcmVncmF2YS1sbyBQTUJSIGUgYSAiCisjfiAiR1BUIEFsdGVybmF0aXZhLlxuIgorI34gIk5vbiBoYSBzdXBvciBxdWUgbyBNQlIg6SBjb3JyZWN0bywgZSBoYSBib3JyYS1sYSBpbmZvcm1hY2nzbiBHUFQuXG4iCisjfiAiSWdub3JhciBoYSBzdXBvciBxdWUgbyBNQlIg6SBjb3JyZWN0bywgcGVybyBub24gaGEgY2FtYmlhLWxvIGRpc2NvLlxuIgorCisjfiBtc2dpZCAiVGhlIG5ldyBwYXJ0aXRpb24gb3ZlcmxhcHMgd2l0aCBhbm90aGVyIHBhcnRpdGlvbi4iCisjfiBtc2dzdHIgIkEgbm92YSBwYXJ0aWNp824gc3VwZXJwb25zZSBjb24gb3V0cmEgcGFydGljafNuLiIKKworI34gbXNnaWQgIkNhbid0IHNldCBub24tTGludXggcGFydGl0aW9ucyBhcyBhIHJvb3QgZGV2aWNlLiIKKyN+IG1zZ3N0ciAiTm9uIHNlIHBvZGVuIGVzdGFicmVjZXIgcGFydGljafNucyBub24gTGludXggY29tYSBkaXNwb3NpdGl2byByYWl6LiIKKworI34gbXNnaWQgIkNhbid0IHNldCBub24tTGludXggcGFydGl0aW9ucyBhcyBhIHN3YXAgZGV2aWNlLiIKKyN+IG1zZ3N0ciAiIgorI34gIk5vbiBzZSBwb2RlbiBlc3RhYnJlY2VyIHBhcnRpY2nzbnMgbm9uIExpbnV4IGNvbWEgZGlzcG9zaXRpdm8gZGUgIgorI34gImludGVyY2FtYmlvLiIKKworI34gbXNnaWQgIk5vIGdldF9yZXNpemVfY29uc3RyYWludCBmb3IgJXMhIgorI34gbXNnc3RyICKhJXMgbm9uIHRlbiBnZXRfcmVzaXplX2NvbnN0cmFpbnQhIgorCisjfiBtc2dpZCAiVGhlICVzIGZpbGUgc3lzdGVtIGNvZGUgZG9lc24ndCBzdXBwb3J0ICVzIGRpc2sgbGFiZWxzLiIKKyN+IG1zZ3N0ciAiIgorI34gIk8gY/NkaWdvIGRvIHNpc3RlbWEgZGUgZmljaGVpcm9zICVzIG5vbiBzb3BvcnRhIGV0aXF1ZXRhcyBkZSBkaXNjbyAlcy4iCisKKyN+IG1zZ2lkICJDcmVhdGluZyBuZXcgJXMgZGlza2xhYmVscyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKKyN+IG1zZ3N0ciAiIgorI34gIkEgY3JlYWNp824gZGUgbm92YXMgZXRpcXVldGFzIGRlIGRpc2NvICVzIG5vbiBlc3ThIGltcGxlbWVudGFkbyBhaW5kYS4iCisKKyN+IG1zZ2lkICJUaGUgY29kZSB0byB3cml0ZSB0aGUgcGFydGl0aW9uIHRhYmxlIGhhc24ndCBiZWVuIHdyaXR0ZW4gZm9yICVzIHlldCIKKyN+IG1zZ3N0ciAiIgorI34gIkFpbmRhIG5vbiBzZSBlc2NyaWLtdSBvIGPzZGlnbyBkZSBlc2NyaXR1cmEgZGUgdOFib2FzIGRlIHBhcnRpY2nzbnMgcGFyYSAlIgorI34gInMiCisKKyN+IG1zZ2lkICIiCisjfiAiQ2FuJ3QgcmVzaXplIGFuIGV4dGVuZGVkIHBhcnRpdGlvbiBzbyBhcyB0byBleGNsdWRlIGEgbG9naWNhbCBwYXJ0aXRpb24uIgorI34gbXNnc3RyICIiCisjfiAiTm9uIHNlIHBvZGUgY2FtYmlhLWxvIHRhbWHxbyBkdW5oYSBwYXJ0aWNp824gZXN0ZW5kaWRhIGVzY2x1aW5kbyB1bmhhICIKKyN+ICJwYXJ0aWNp824gbPN4aWNhLiIKKworI34gbXNnaWQgIkNhbid0IGdyb3cgYSBwYXJ0aXRpb24gb250byB1c2VkIHNwYWNlLiIKKyN+IG1zZ3N0ciAiTm9uIHNlIHBvZGUgZmFjZXIgbWVkcmEtbGEgcGFydGljafNuIHNvYnJlIGVzcGFjaW8gdXNhZG8uIgorCisjfiBtc2dpZCAiSW5zYW5lISAgJWQgY2x1c3RlcnMhIgorI34gbXNnc3RyICKhSXN0byDpIHVuaGEgdG9sZWFkYSEgoSVkIGNsdXN0ZXJzISIKKworI34gbXNnaWQgIiIKKyN+ICJUaGUgZmlsZXN5c3RlbSBpcyBnb2luZyB0byBiZSB0b28gYmlnIGZvciBGQVQxNiwgc28gRkFUMzIgd2lsbCBiZSB1c2VkLiAgIgorI34gIlRoaXMgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBNUy1ET1MsIGVhcmx5IHZlcnNpb25zIG9mIE1TLVdpbmRvd3MgOTUgYW5kICIKKyN+ICJXaW5kb3dzIE5ULiAgSWYgeW91IHVzZSB0aGVzZSBvcGVyYXRpbmcgc3lzdGVtcywgdGhlbiBzZWxlY3QgY2FuY2VsLCBhbmQgIgorI34gImNyZWF0ZSBhIHNtYWxsZXIgcGFydGl0aW9uLiAgSWYgeW91IG9ubHkgdXNlIExpbnV4LCBCU0QsIE1TIFdpbmRvd3MgOTggIgorI34gImFuZC9vciBNUyBXaW5kb3dzIDk1IEIsIHRoZW4gc2VsZWN0IE9LLiIKKyN+IG1zZ3N0ciAiIgorI34gIk8gc2lzdGVtYSBkZSBmaWNoZWlyb3MgdmFpIHNlciBncmFuZGUgZGUgbeFpcyBwYXJhIEZBVDE2LCBhc+0gcXVlIHVzYXJhc2UgIgorI34gIkZBVDMyLiBJc3RvIG5vbiDpIGNvbXBhdGlibGUgY29uIE1TLURPUywgdmVyc2nzbnMgYW50aWdhcyBkZSBNUy1XaW5kb3dzICIKKyN+ICI5NSBlIFdpbmRvd3MgTlQuIFNlIHVzYSBlc2VzIHNpc3RlbWFzIG9wZXJhdGl2b3MsIGVzY29sbGEgYENhbmNlbGFyJywgZSAiCisjfiAiY3JlZSB1bmhhIHBhcnRpY2nzbiBt4WlzIHBlcXVlbmEuIFNlIHPzIHVzYSBMaW51eCwgQlNELCBNUyBXaW5kb3dzIDk4IGUvIgorI34gIm91IE1TIFdpbmRvd3MgOTUgQiwgZW50824gZXNjb2xsYSBgQWNlcHRhcicuIgorCisjfiBtc2dpZCAiV2VpcmQ6IGZhdF9jYWxjX3NpemVzKCkgZmFpbGVkIGZvciBGQVQzMiEiCisjfiBtc2dzdHIgIkVzdHJh8W86IKFmYWxsb3UgYSBjaGFtYWRhIGEgZmF0X2NhbGNfc2l6ZXMoKSBwYXJhIEZBVDMyISIKKworI34gbXNnaWQgIiIKKyN+ICJXb3VsZCB5b3UgbGlrZSB0byB1c2UgRkFUMzIgZm9yIHRoaXMgZmlsZXN5c3RlbT8gIEl0IGlzIG11Y2ggbW9yZSAiCisjfiAiZWZmaWNpZW50IHdpdGggeW91ciBkaXNrIHNwYWNlLCBidXQgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBlYXJseSB2ZXJzaW9ucyAiCisjfiAib2YgV2luZG93cyA5NSBhbmQgV2luZG93cyBOVC4gIE9ubHkgc2VsZWN0IHllcyBpZiB5b3Ugb25seSB1c2UgTGludXgsICIKKyN+ICJCU0QsIE1TIFdpbmRvd3MgOTggYW5kL29yIE1TIFdpbmRvd3MgOTUgQi4iCisjfiBtc2dzdHIgIiIKKyN+ICK/UXVlcmUgdXNhciBGQVQzMiBuZXN0ZSBzaXN0ZW1hIGRlIGZpY2hlaXJvcz8gySBtb2l0byBt4WlzIGVmaWNpZW50ZSBjbyAiCisjfiAic2V1IGVzcGFjaW8gZW4gZGlzY28sIHBlcm8gbm9uIOkgY29tcGF0aWJsZSBjb24gdmVyc2nzbnMgYW50aWdhcyBkZSAiCisjfiAiV2luZG93cyA5NSBlIFdpbmRvd3MgTlQuIEVzY29sbGEgYFNpJyBz8yBzZSBz8yB1c2EgTGludXgsIEJTRCwgTVMgV2luZG93cyAiCisjfiAiOTggZS9vdSBNUyBXaW5kb3dzIDk1IEIuIgorCisjfiBtc2dpZCAiIgorI34gIkZpbGUgc3lzdGVtIGRvZXNuJ3QgaGF2ZSBleHBlY3RlZCBzaXplcyBmb3IgV2luZG93cyB0byBsaWtlIGl0LiAgTnVtYmVyICIKKyN+ICJvZiBjbHVzdGVycyBpcyAlZCAoJWQgZXhwZWN0ZWQpOyBzaXplIG9mIEZBVHMgaXMgJWQgc2VjdG9ycyAoJWQgZXhwZWN0ZWQpLiIKKyN+IG1zZ3N0ciAiIgorI34gIk8gc2lzdGVtYSBkZSBmaWNoZWlyb3Mgbm9uIHRlbiBvcyB0YW1h8W9zIGVzcGVyYWRvcyBwYXJhIHF1ZSBhIFdpbmRvd3MgIgorI34gImxsZSBnb3N0ZS4gTyBu+m1lcm8gZGUgY2x1c3RlcnMg6SAlZCAoZXNwZXLhYmFuc2UgJWQpOyBvIHRhbWHxbyBkYXMgRkFUcyAiCisjfiAi6SBkZSAlZCBzZWN0b3JlcyAoZXNwZXLhYmFuc2UgJWQpLiIKKworI34gbXNnaWQgIiIKKyN+ICJQYXJ0aXRpb24gc2l6ZSAoJWxkIHNlY3RvcnMpIGFuZCBmaWxlc3lzdGVtIHNpemUgKCVsZCBzZWN0b3JzKSBkbyBub3QgIgorI34gIm1hdGNoLiIKKyN+IG1zZ3N0ciAiIgorI34gIk8gdGFtYfFvIGRhIHBhcnRpY2nzbiAoJWxkIHNlY3RvcmVzKSBlIG8gZG8gc2lzdGVtYSBkZSBmaWNoZWlyb3MgKCVsZCAiCisjfiAic2VjdG9yZXMpIG5vbiBjb2luY2lkZW4uIgorCisjfiBtc2dpZCAiTGludXgtc3dhcCBwYXJ0aXRpb25zIGNhbiBub3QgYmUgaGlkZGVuIG9uIG1zZG9zIGRpc2sgbGFiZWxzLiIKKyN+IG1zZ3N0ciAiIgorI34gIkFzIHBhcnRpY2nzbnMgZGUgaW50ZXJjYW1iaW8gZGUgTGludXggbm9uIHBvZGVuIGVzdGFyIG9jdWx0YXMgbmFzICIKKyN+ICJldGlxdWV0YXMgZGUgZGlzY28gbXNkb3MuIgorCisjfiBtc2dpZCAiTGludXgtc3dhcCBwYXJ0aXRpb25zIGNhbiBub3QgYmUgYm9vdGFibGUgb24gcGM5OCBkaXNrIGxhYmVscy4iCisjfiBtc2dzdHIgIiIKKyN+ICJBcyBwYXJ0aWNp825zIGRlIGludGVyY2FtYmlvIGRlIExpbnV4IG5vbiBwb2RlbiBzZXIgZGUgaW5pY2lvIG5hcyAiCisjfiAiZXRpcXVldGFzIGRlIGRpc2NvIG1zZG9zLiIKKworI34gbXNnaWQgIkhGUyBwYXJ0aXRpb25zIGNhbid0IGJlIGhpZGRlbiBvbiBtc2RvcyBkaXNrIGxhYmVscy4iCisjfiBtc2dzdHIgIiIKKyN+ICJBcyBwYXJ0aWNp825zIEhGUyBub24gcG9kZW4gZXN0YXIgb2N1bHRhcyBuYXMgZXRpcXVldGFzIGRlIGRpc2NvIG1zZG9zLiIKKworI34gbXNnaWQgIkpGUyBwYXJ0aXRpb25zIGNhbid0IGJlIGhpZGRlbiBvbiBtc2RvcyBkaXNrIGxhYmVscy4iCisjfiBtc2dzdHIgIiIKKyN+ICJBcyBwYXJ0aWNp825zIEpGUyBub24gcG9kZW4gZXN0YXIgb2N1bHRhcyBuYXMgZXRpcXVldGFzIGRlIGRpc2NvIG1zZG9zLiIKKworI34gbXNnaWQgIlJlaXNlcmZzIHBhcnRpdGlvbnMgY2FuJ3QgYmUgaGlkZGVuIG9uIG1zZG9zIGRpc2sgbGFiZWxzLiIKKyN+IG1zZ3N0ciAiIgorI34gIkFzIHBhcnRpY2nzbnMgUmVpc2VyZnMgbm9uIHBvZGVuIGVzdGFyIG9jdWx0YXMgbmFzIGV0aXF1ZXRhcyBkZSBkaXNjbyAiCisjfiAibXNkb3MuIgorCisjfiBtc2dpZCAiUmVpc2VyZnMgcGFydGl0aW9ucyBtdXN0IGJlIGJvb3RhYmxlIG9uIHBjOTggZGlzayBsYWJlbHMuIgorI34gbXNnc3RyICIiCisjfiAiQXMgcGFydGljafNucyBSZWlzZXJmcyBkZWJlbiBzZXIgZGUgaW5pY2lvIG5hcyBldGlxdWV0YXMgZGUgZGlzY28gcGM5OC4iCisKKyN+IG1zZ2lkICJYRlMgcGFydGl0aW9ucyBjYW4ndCBiZSBoaWRkZW4gb24gbXNkb3MgZGlzayBsYWJlbHMuIgorI34gbXNnc3RyICIiCisjfiAiQXMgcGFydGljafNucyBYRlMgbm9uIHBvZGVuIGVzdGFyIG9jdWx0YXMgbmFzIGV0aXF1ZXRhcyBkZSBkaXNjbyBtc2Rvcy4iCisKKyN+IG1zZ2lkICIiCisjfiAiVGhlIG9wZXJhdGluZyBzeXN0ZW0gdGhpbmtzIHRoZSBnZW9tZXRyeSBvbiAlcyBpcyAlZC8lZC8lZC4gIFlvdSBzaG91bGQgIgorI34gImNoZWNrIHRoYXQgdGhpcyBtYXRjaGVzIHRoZSBCSU9TIGdlb21ldHJ5IGJlZm9yZSB1c2luZyB0aGlzIHByb2dyYW0uIgorI34gbXNnc3RyICIiCisjfiAiTyBzaXN0ZW1hIG9wZXJhdGl2byBjcmUgcXVlIGEgeGVvbWV0cu1hIGRlICVzIOkgJWQvJWQvJWQuIERlYmVy7WEgIgorI34gImNvbXByb2JhciBxdWUgaXN0byBjb2luY2lkZSBjb2EgeGVvbWV0cu1hIGRhIEJJT1MgYW50ZXMgZGUgdXNhciBlc3RlICIKKyN+ICJwcm9ncmFtYS4iCisKKyN+IG1zZ2lkICIiCisjfiAiVGhlcmUgaXMgbm8gYm9vdCBjb2RlIG9uIHRoaXMgZGlzay4gIFdvdWxkIHlvdSBsaWtlIHRvIHVzZSBHTlUgcGFydGVkJ3MgIgorI34gImJvb3QgbG9hZGVyPyIKKyN+IG1zZ3N0ciAiIgorI34gIk5vbiBoYWkgdW4gcHJvZ3JhbWEgZGUgYXJyaW5xdWUgbmVzdGUgZGlzY28uIL9RdWVyZSB1c2EtbG8gY2FyZ2Fkb3IgZGUgIgorI34gIkdOVSBwYXJ0ZWQ/IgorCisjfiBtc2dpZCAiTm8gZ2V0X3N5c3RlbSgpIGZvciAlcyEiCisjfiBtc2dzdHIgIqFOb24gaGFpIHVuaGEgY2hhbWFkYSBnZXRfc3lzdGVtKCkgcGFyYSAlcyEiCisKKyN+IG1zZ2lkICJDYW4ndCBjcmVhdGUgYSBwYXJ0aXRpb24gd2l0aCB0aGUgc3RhcnQgYWZ0ZXIgdGhlIGVuZC4iCisjfiBtc2dzdHIgIk5vbiBzZSBwb2RlIGNyZWFyIHVuaGEgcGFydGljafNuIGNvIGNvbWV6byBkZXNwb2lzIGRhIGZpbi4iCisKKyN+IG1zZ2lkICIiCisjfiAiTm8gZmlsZXN5c3RlbSBmb3VuZCBvbiBwYXJ0aXRpb24uICBDYW4ndCBkZXRlcm1pbmUgd2hhdCBwYXJ0aXRpb24gc3lzdGVtICIKKyN+ICJ0byB1c2UuIgorI34gbXNnc3RyICIiCisjfiAiTm9uIHNlIGF0b3BvdSB1biBzaXN0ZW1hIGRlIGZpY2hlaXJvcyBuYSBwYXJ0aWNp824uIE5vbiBzZSBwdWlkbyAiCisjfiAiZGV0ZXJtaW5hLWxvIHNpc3RlbWEgZGUgcGFydGljafNucyBhIHVzYXIuIgorCisjfiBtc2dpZCAiRkFUIGZpbGVzeXN0ZW1zIGRvbid0IGhhdmUgYW4gaWQgZm9yIG5vbi1tc2RvcyBwYXJ0aXRpb24gdGFibGVzIgorI34gbXNnc3RyICIiCisjfiAiT3Mgc2lzdGVtYXMgZGUgZmljaGVpcm9zIEZBVCBub24gdGXxZW4gdW4gaWRlbnRpZmljYWRvciBwYXJhIHThYm9hcyBkZSAiCisjfiAicGFydGljafNucyBxdWUgbm9uIHNvbiBkZSBtc2Rvcy4iCisKKyN+IG1zZ2lkICIiCisjfiAiV291bGQgeW91IGxpa2UgdG8gdXNlIEZBVDMyPyAgSXQgaXMgbW9yZSBlZmZpY2llbnQsIGJ1dCBpdCBpcyBub3QgIgorI34gImNvbXBhdGlibGUgd2l0aCBNUy1ET1MsIGVhcmx5IHZlcnNpb25zIG9mIE1TLVdpbmRvd3MgOTUgYW5kIFdpbmRvd3MgTlQuICAiCisjfiAiSWYgeW91IHVzZSB0aGVzZSBvcGVyYXRpbmcgc3lzdGVtcywgdGhlbiBzZWxlY3QgTm8uICBJZiB5b3Ugb25seSB1c2UgIgorI34gIkxpbnV4LCBCU0QsIE1TIFdpbmRvd3MgOTggYW5kL29yIE1TIFdpbmRvd3MgOTUgQiwgdGhlbiB5b3UgbWF5IHNlbGVjdCBZZXMuIgorI34gbXNnc3RyICIiCisjfiAiv1F1ZXJlIHVzYXIgRkFUMzI/IMkgTW9pIGVmaWNpZW50ZSwgcGVybyBub24g6SBjb21wYXRpYmxlIGNvbiBNUy1ET1MsICIKKyN+ICJ2ZXJzafNucyBhbnRpZ2FzIGRlIE1TLVdpbmRvd3MgOTUgZSBXaW5kb3dzIE5ULiBTZSB1c2EgZXNlcyBzaXN0ZW1hcyAiCisjfiAib3BlcmF0aXZvcywgZXNjb2xsYSBgTm9uJy4gU2Ugc/MgdXNhIExpbnV4LCBCU0QsIE1TIFdpbmRvd3MgOTggZS9vdSBNUyAiCisjfiAiV2luZG93cyA5NSBCLCBlbnTzbiBwb2RlIGVzY29sbGVyIGBTaScuIgorCisjfiBtc2dpZCAiIgorI34gIlRoZSBmaWxlc3lzdGVtIGlzIGdvaW5nIHRvIGJlIHRvbyBiaWcgZm9yIEZBVDE2LCBzbyBGQVQzMiBtdXN0IGJlIHVzZWQuICAiCisjfiAiVGhpcyBpcyBub3QgY29tcGF0aWJsZSB3aXRoIE1TLURPUywgZWFybHkgdmVyc2lvbnMgb2YgTVMtV2luZG93cyA5NSBhbmQgIgorI34gIldpbmRvd3MgTlQuICBJZiB5b3UgdXNlIHRoZXNlIG9wZXJhdGluZyBzeXN0ZW1zLCB0aGVuIHNlbGVjdCBDYW5jZWwsIGFuZCAiCisjfiAiY3JlYXRlIGEgc21hbGxlciBwYXJ0aXRpb24uICBJZiB5b3Ugb25seSB1c2UgTGludXgsIEJTRCwgTVMgV2luZG93cyA5OCAiCisjfiAiYW5kL29yIE1TIFdpbmRvd3MgOTUgQiwgdGhlbiBzZWxlY3QgT0suIgorI34gbXNnc3RyICIiCisjfiAiTyBzaXN0ZW1hIGRlIGZpY2hlaXJvcyB2YWkgc2VyIGdyYW5kZSBkZSBt4WlzIHBhcmEgRkFUMTYsIGFz7SBxdWUgc2UgaGEgIgorI34gInVzYXIgRkFUMzIuIElzdG8gbm9uIOkgY29tcGF0aWJsZSBjb24gTVMtRE9TLCB2ZXJzafNucyBhbnRpZ2FzIGRlIE1TLSIKKyN+ICJXaW5kb3dzIDk1IGUgV2luZG93cyBOVC4gU2UgdXNhIGVzZXMgc2lzdGVtYXMgb3BlcmF0aXZvcywgZXNjb2xsYSAiCisjfiAiYENhbmNlbGFyJywgZSBjcmVlIHVuaGEgcGFydGljafNuIG3haXMgcGVxdWVuYS4gU2Ugc/MgdXNhIExpbnV4LCBCU0QsIE1TICIKKyN+ICJXaW5kb3dzIDk4IGUvb3UgTVMgV2luZG93cyA5NSBCLCBlbnTzbiBlc2NvbGxhIGBBY2VwdGFyJy4iCisKKyN+IG1zZ2lkICJoaWRlIgorI34gbXNnc3RyICJoaWRlIgorCisjfiBtc2dpZCAiRGlzayBnZW9tZXRyeTogMS0lZCwgJWRrIGN5bGluZGVyc1xuIgorI34gbXNnc3RyICJYZW9tZXRy7WEgZGUgZGlzY286IDEtJWQsICVkayBjaWxpbmRyb3NcbiIKKworI34gbXNnaWQgIk1pbm9yICAgIFN0YXJ0ICAgIEVuZCAgICAgIFR5cGUgICAgICAgICAgICBGaWxlc3lzdGVtICAgICBGbGFnc1xuIgorI34gbXNnc3RyICIiCisjfiAiTWVub3IgICAgSW5pY2lvICAgRmluICAgICAgVGlwbyAgICAgICAgICAgIFNpc3QuRmljaGVpcm9zIE1vZGlmaWNhZG9yZXNcbiIKKworI34gbXNnaWQgInVuaGlkZSIKKyN+IG1zZ3N0ciAidW5oaWRlIgorCisjfiBtc2dpZCAiaGlkZSBNSU5PUiAgICAgICAgICAgICAgICAgICAgaGlkZXMgcGFydGl0aW9uIE1JTk9SIgorI34gbXNnc3RyICJoaWRlIE1FTk9SICAgICAgICAgICAgICAgYWdvY2hhLWxhIHBhcnRpY2nzbiBNRU5PUiIKKworI34gbXNnaWQgIlBhcnRpdGlvbiBsZW5ndGggb2YgJWRrIGlzIHRvbyBzbWFsbC4iCisjfiBtc2dzdHIgIkEgbG9ueGl0dWRlIGRhIHBhcnRpY2nzbiBkZSAlZGsg6SBtb2kgcGVxdWVuYS4iCisKKyN+IG1zZ2lkICJUaGVyZSBhcmUgbm8gcG9zc2libGUgY29uZmlndXJhdGlvbnMgZm9yIHRoaXMgY2x1c3RlciBzaXplLiIKKyN+IG1zZ3N0ciAiTm9uIGhhaSBjb25maWd1cmFjafNucyBwb3NpYmxlcyBwYXJhIGVzdGUgdGFtYfFvIGRlIGNsdXN0ZXIuIgorCisjfiBtc2dpZCAiIgorI34gIlRvIHJlc2l6ZSB0aGlzIGZpbGVzeXN0ZW0gdG8gdGhpcyBzaXplLCB0aGUgY2x1c3RlciBzaXplIG11c3QgYmUgY2hhbmdlZCAiCisjfiAiZnJvbSAlZCBieXRlcyB0byAlZCBieXRlcy4gIFRoaXMgZnVuY3Rpb25hbGl0eSBpcyBub3QgeWV0IGltcGxlbWVudGVkLiAgIgorI34gIk5vdGUgdGhhdCB0aGVyZSBhcmUgbWFueSB3ZWlyZCBkaWZmZXJlbnQgc2l6ZXMgdGhhdCBjYW4gYmUgYWNoaWV2ZWQgd2l0aCAiCisjfiAidGhlIHNhbWUgY2x1c3RlciBzaXplIC0gaWYgeW91IGtlZXAgZXhwZXJpbWVudGluZyB3aXRoIGRpZmZlcmVudCAiCisjfiAicGFydGl0aW9uIHNpemVzLCB5b3UgbWlnaHQgYmUgbHVja3khISEiCisjfiBtc2dzdHIgIiIKKyN+ICJQYXJhIGNhbWJpYXIgZXN0ZSBzaXN0ZW1hIGRlIGZpY2hlaXJvcyBhIGVzdGUgdGFtYfFvLCBvIHRhbWHxbyBkbyBjbHVzdGVyICIKKyN+ICJkZWJlIHNlciBjYW1iaWFkbyBkZSAlZCBieXRlcyBhICVkIGJ5dGVzLiBFc3RhIGZ1bmNpb25hbGlkYWRlIG5vbiBlc3ThICIKKyN+ICJpbXBsZW1lbnRhZGEgYWluZGEuIFRl8WEgZW4gY29udGEgcXVlIGhhaSBtb2l0b3MgdGFtYfFvcyBkaWZlcmVudGVzIHF1ZSAiCisjfiAic2UgcG9kZW4gY29uc2VndWlyIGNvIG1lc21vIHRhbWHxbyBkZSBjbHVzdGVyIC0goXNlIHNlZ3VlIGEgZXhwZXJpbWVudGFyICIKKyN+ICJjb24gZGlmZXJlbnRlcyB0YW1h8W9zIGRlIHBhcnRpY2nzbiwgcG9kZXLtYSB0ZXIgc29ydGUhIgorCisjfiBtc2dpZCAiIgorI34gIlRoZSBmaWxlc3lzdGVtIGlzIGdvaW5nIHRvIGJlIHRvbyBiaWcgZm9yIEZBVDE2LCAod2l0aCBhIGNsdXN0ZXIgc2l6ZSBvZiAlIgorI34gImRrLCBhbnl3YXkpIHNvIEZBVDMyIHdpbGwgYmUgdXNlZC4gIFRoaXMgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBNUy1ET1MsICIKKyN+ICJlYXJseSB2ZXJzaW9ucyBvZiBNUy1XaW5kb3dzIDk1IGFuZCBXaW5kb3dzIE5ULiAgSWYgeW91IHVzZSB0aGVzZSAiCisjfiAib3BlcmF0aW5nIHN5c3RlbXMsIHRoZW4gc2VsZWN0IGNhbmNlbCwgYW5kIGNyZWF0ZSBhIHNtYWxsZXIgcGFydGl0aW9uLiAgIgorI34gIklmIHlvdSBvbmx5IHVzZSBMaW51eCwgQlNELCBNUyBXaW5kb3dzIDk4IGFuZC9vciBNUyBXaW5kb3dzIDk1IEIsIHRoZW4gIgorI34gInNlbGVjdCBPSy4iCisjfiBtc2dzdHIgIiIKKyN+ICJPIHNpc3RlbWEgZGUgZmljaGVpcm9zIGhhIHNlciBncmFuZGUgZGUgbeFpcyBwYXJhIEZBVDE2IChjdW4gdGFtYfFvIGRlICIKKyN+ICJjbHVzdGVyIGRlICVkLCBkZSB082RvbG9zIHhlaXRvcyksIGFz7SBxdWUgc2UgaGEgdXNhciBGQVQzMi4gSXN0byBub24g6SAiCisjfiAiY29tcGF0aWJsZSBjb24gTVMtRE9TLCB2ZXJzafNucyBhbnRpZ2FzIGRlIE1TLVdpbmRvd3MgOTUgZSBXaW5kb3dzIE5ULiBTZSAiCisjfiAidXNhIGVzdGVzIHNpc3RlbWFzIG9wZXJhdGl2b3MsIGVzY29sbGEgYENhbmNlbGFyJyBlIGNyZWUgdW5oYSBwYXJ0aWNp824gIgorI34gIm3haXMgcGVxdWVuYS4gU2Ugc/MgdXNhIExpbnV4LCBCU0QsIE1TIFdpbmRvd3MgOTggZS9vdSBNUyBXaW5kb3dzIDk1IEIsICIKKyN+ICJlc2NvbGxhIGBBY2VwdGFyJy4iCisKKyN+IG1zZ2lkICJ0aGUgcm9vdCBkaXJlY3RvcnkiCisjfiBtc2dzdHIgIm8gZGlyZWN0b3JpbyByYWl6IgorCisjfiBtc2dpZCAiZmF0X3JlYWRfY2x1c3RlcnM6IGNsdXN0ZXJzICVsZC0lbGQgb3V0c2lkZSBmaWxlc3lzdGVtIgorI34gbXNnc3RyICIiCisjfiAiZmF0X3JlYWRfY2x1c3RlcnM6IG9zIGNsdXN0ZXJzICVsZC0lbGQgZXN04W4gZvNyYSBkbyBzaXN0ZW1hIGRlIGZpY2hlaXJvcyIKKworI34gbXNnaWQgImZhdF93cml0ZV9jbHVzdGVyczogY2x1c3RlcnMgJWxkLSVsZCBvdXRzaWRlIGZpbGVzeXN0ZW0iCisjfiBtc2dzdHIgIiIKKyN+ICJmYXRfd3JpdGVfY2x1c3RlcnM6IG9zIGNsdXN0ZXJzICVsZC0lbGQgZXN04W4gZvNyYSBkbyBzaXN0ZW1hIGRlIGZpY2hlaXJvcyIKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9wby9pZC5nbW8gYi9wYXJ0ZWQtMS44LjcvcG8vaWQuZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2OTQ0N2MKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvcG8vaWQuZ21vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9wby9pZC5wbyBiL3BhcnRlZC0xLjguNy9wby9pZC5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzAxZGE1Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L3BvL2lkLnBvCkBAIC0wLDAgKzEsMzQwNSBAQAorIyBQZXNhbiBCYWhhc2EgSW5kb25lc2lhIHVudHVrIEdOVSBwYXJ0ZWQKKyMgQ29weXJpZ2h0IChDKSAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgR05VIHBhcnRlZCBwYWNrYWdlLgorIyBBcmlmIEUuIE51Z3JvaG8gPGFyaWZfZW5kcm9AeWFob28uY29tPiwgMjAwNi4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IEdOVSBwYXJ0ZWQgMS44LjFcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogYnVnLXBhcnRlZEBnbnUub3JnXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMDctMDUtMDkgMTc6MDItMDQwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDYtMTItMjQgMjI6MDArMDcwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogQXJpZiBFLiBOdWdyb2hvIDxhcmlmX2VuZHJvQHlhaG9vLmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBJbmRvbmVzaWFuIDx0cmFuc2xhdGlvbi10ZWFtLWlkQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1JU08tODg1OS0xXG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorCisjOiBsaWIvY2xvc2VvdXQuYzo3NAorbXNnaWQgIndyaXRlIGVycm9yIgorbXNnc3RyICIiCisKKyM6IGxpYi9lcnJvci5jOjEyNQorIywgZnV6enkKK21zZ2lkICJVbmtub3duIHN5c3RlbSBlcnJvciIKK21zZ3N0ciAiVGlwZSBmaWxlc3lzdGVtIHRpZGFrIGRpa2V0YWh1aSBcIiVzXCIuIgorCisjOiBsaWIvZ2V0b3B0LmM6NTMxIGxpYi9nZXRvcHQuYzo1NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiBgJXMnIGlzIGFtYmlndW91c1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo1ODAgbGliL2dldG9wdC5jOjU4NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIGAtLSVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjU5MyBsaWIvZ2V0b3B0LmM6NTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYCVjJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6NjQxIGxpYi9nZXRvcHQuYzo2NjAgbGliL2dldG9wdC5jOjk3NiBsaWIvZ2V0b3B0LmM6OTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYCVzJyByZXF1aXJlcyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo2OTggbGliL2dldG9wdC5jOjcwMQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5yZWNvZ25pemVkIG9wdGlvbiBgLS0lcydcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6NzA5IGxpYi9nZXRvcHQuYzo3MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVucmVjb2duaXplZCBvcHRpb24gYCVjJXMnXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjc2NCBsaWIvZ2V0b3B0LmM6NzY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbGxlZ2FsIG9wdGlvbiAtLSAlY1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo3NzMgbGliL2dldG9wdC5jOjc3NgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBvcHRpb24gLS0gJWNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6ODI4IGxpYi9nZXRvcHQuYzo4NDQgbGliL2dldG9wdC5jOjEwNDggbGliL2dldG9wdC5jOjEwNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCAtLSAlY1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo4OTcgbGliL2dldG9wdC5jOjkxMworIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIGAtVyAlcycgaXMgYW1iaWd1b3VzXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjkzNyBsaWIvZ2V0b3B0LmM6OTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYC1XICVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6CisjLiBHZXQgdHJhbnNsYXRpb25zIGZvciBvcGVuIGFuZCBjbG9zaW5nIHF1b3RhdGlvbiBtYXJrcy4KKyMuCisjLiBUaGUgbWVzc2FnZSBjYXRhbG9nIHNob3VsZCB0cmFuc2xhdGUgImAiIHRvIGEgbGVmdAorIy4gcXVvdGF0aW9uIG1hcmsgc3VpdGFibGUgZm9yIHRoZSBsb2NhbGUsIGFuZCBzaW1pbGFybHkgZm9yCisjLiAiJyIuICBJZiB0aGUgY2F0YWxvZyBoYXMgbm8gdHJhbnNsYXRpb24sCisjLiBsb2NhbGVfcXVvdGluZ19zdHlsZSBxdW90ZXMgYGxpa2UgdGhpcycsIGFuZAorIy4gY2xvY2FsZV9xdW90aW5nX3N0eWxlIHF1b3RlcyAibGlrZSB0aGlzIi4KKyMuCisjLiBGb3IgZXhhbXBsZSwgYW4gQW1lcmljYW4gRW5nbGlzaCBVbmljb2RlIGxvY2FsZSBzaG91bGQKKyMuIHRyYW5zbGF0ZSAiYCIgdG8gVSsyMDFDIChMRUZUIERPVUJMRSBRVU9UQVRJT04gTUFSSyksIGFuZAorIy4gc2hvdWxkIHRyYW5zbGF0ZSAiJyIgdG8gVSsyMDFEIChSSUdIVCBET1VCTEUgUVVPVEFUSU9OCisjLiBNQVJLKS4gIEEgQnJpdGlzaCBFbmdsaXNoIFVuaWNvZGUgbG9jYWxlIHNob3VsZCBpbnN0ZWFkCisjLiB0cmFuc2xhdGUgdGhlc2UgdG8gVSsyMDE4IChMRUZUIFNJTkdMRSBRVU9UQVRJT04gTUFSSykgYW5kCisjLiBVKzIwMTkgKFJJR0hUIFNJTkdMRSBRVU9UQVRJT04gTUFSSyksIHJlc3BlY3RpdmVseS4KKyMuCisjLiBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIHB1dCBoZXJlLCBwbGVhc2Ugc2VlCisjLiA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9RdW90YXRpb25fbWFyayNHbHlwaHM+CisjLiBhbmQgdXNlIGdseXBocyBzdWl0YWJsZSBmb3IgeW91ciBsYW5ndWFnZS4KKyM6IGxpYi9xdW90ZWFyZy5jOjIyOQorbXNnaWQgImAiCittc2dzdHIgIiIKKworIzogbGliL3F1b3RlYXJnLmM6MjMwCittc2dpZCAiJyIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjEzMQorbXNnaWQgIlN1Y2Nlc3MiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxMzQKK21zZ2lkICJObyBtYXRjaCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjEzNworbXNnaWQgIkludmFsaWQgcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTQwCittc2dpZCAiSW52YWxpZCBjb2xsYXRpb24gY2hhcmFjdGVyIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTQzCittc2dpZCAiSW52YWxpZCBjaGFyYWN0ZXIgY2xhc3MgbmFtZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE0NgorbXNnaWQgIlRyYWlsaW5nIGJhY2tzbGFzaCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE0OQorbXNnaWQgIkludmFsaWQgYmFjayByZWZlcmVuY2UiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNTIKK21zZ2lkICJVbm1hdGNoZWQgWyBvciBbXiIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE1NQorbXNnaWQgIlVubWF0Y2hlZCAoIG9yIFxcKCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE1OAorbXNnaWQgIlVubWF0Y2hlZCBcXHsiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNjEKK21zZ2lkICJJbnZhbGlkIGNvbnRlbnQgb2YgXFx7XFx9IgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTY0CisjLCBmdXp6eQorbXNnaWQgIkludmFsaWQgcmFuZ2UgZW5kIgorbXNnc3RyICJub21vciB0aWRhayB2YWxpZC4iCisKKyM6IGxpYi9yZWdjb21wLmM6MTY3Cittc2dpZCAiTWVtb3J5IGV4aGF1c3RlZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE3MAorbXNnaWQgIkludmFsaWQgcHJlY2VkaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE3MworbXNnaWQgIlByZW1hdHVyZSBlbmQgb2YgcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTc2Cittc2dpZCAiUmVndWxhciBleHByZXNzaW9uIHRvbyBiaWciCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNzkKK21zZ2lkICJVbm1hdGNoZWQgKSBvciBcXCkiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzo2ODAKK21zZ2lkICJObyBwcmV2aW91cyByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgIiIKKworIzogbGliL3JwbWF0Y2guYzo3MAorbXNnaWQgIl5beVldIgorbXNnc3RyICIiCisKKyM6IGxpYi9ycG1hdGNoLmM6NzMKK21zZ2lkICJeW25OXSIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogVHJhbnNsYXRlICIoQykiIHRvIHRoZSBjb3B5cmlnaHQgc3ltYm9sCisjLiAoQy1pbi1hLWNpcmNsZSksIGlmIHRoaXMgc3ltYm9sIGlzIGF2YWlsYWJsZSBpbiB0aGUgdXNlcidzCisjLiBsb2NhbGUuICBPdGhlcndpc2UsIGRvIG5vdCB0cmFuc2xhdGUgIihDKSI7IGxlYXZlIGl0IGFzLWlzLgorIzogbGliL3ZlcnNpb24tZXRjLmM6NjYKK21zZ2lkICIoQykiCittc2dzdHIgIiIKKworIzogbGliL3ZlcnNpb24tZXRjLmM6NjgKK21zZ2lkICIiCisiXG4iCisiTGljZW5zZSBHUEx2Mis6IEdOVSBHUEwgdmVyc2lvbiAyIG9yIGxhdGVyIDxodHRwOi8vZ251Lm9yZy9saWNlbnNlcy9ncGwuIgorImh0bWw+XG4iCisiVGhpcyBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgYXJlIGZyZWUgdG8gY2hhbmdlIGFuZCByZWRpc3RyaWJ1dGUgaXQuXG4iCisiVGhlcmUgaXMgTk8gV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIldyaXR0ZW4gYnkgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjg4CisjLCBjLWZvcm1hdAorbXNnaWQgIldyaXR0ZW4gYnkgJXMgYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzo5MgorIywgYy1mb3JtYXQKK21zZ2lkICJXcml0dGVuIGJ5ICVzLCAlcywgYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjLiBZb3UgY2FuIHVzZSBsaW5lIGJyZWFrcywgZXN0aW1hdGluZyB0aGF0IGVhY2ggYXV0aG9yIG5hbWUgb2NjdXBpZXMKKyMuIGNhLiAxNiBzY3JlZW4gY29sdW1ucyBhbmQgdGhhdCBhIHNjcmVlbiBsaW5lIGhhcyBjYS4gODAgY29sdW1ucy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjLiBZb3UgY2FuIHVzZSBsaW5lIGJyZWFrcywgZXN0aW1hdGluZyB0aGF0IGVhY2ggYXV0aG9yIG5hbWUgb2NjdXBpZXMKKyMuIGNhLiAxNiBzY3JlZW4gY29sdW1ucyBhbmQgdGhhdCBhIHNjcmVlbiBsaW5lIGhhcyBjYS4gODAgY29sdW1ucy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjEwNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorIiVzLCBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiJXMsICVzLCBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6MTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiJXMsICVzLCAlcywgYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjLiBZb3UgY2FuIHVzZSBsaW5lIGJyZWFrcywgZXN0aW1hdGluZyB0aGF0IGVhY2ggYXV0aG9yIG5hbWUgb2NjdXBpZXMKKyMuIGNhLiAxNiBzY3JlZW4gY29sdW1ucyBhbmQgdGhhdCBhIHNjcmVlbiBsaW5lIGhhcyBjYS4gODAgY29sdW1ucy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjEyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorIiVzLCAlcywgJXMsICVzLFxuIgorImFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzoxMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyIlcywgJXMsICVzLCAlcyxcbiIKKyIlcywgYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjLiBZb3UgY2FuIHVzZSBsaW5lIGJyZWFrcywgZXN0aW1hdGluZyB0aGF0IGVhY2ggYXV0aG9yIG5hbWUgb2NjdXBpZXMKKyMuIGNhLiAxNiBzY3JlZW4gY29sdW1ucyBhbmQgdGhhdCBhIHNjcmVlbiBsaW5lIGhhcyBjYS4gODAgY29sdW1ucy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjE0MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorIiVzLCAlcywgJXMsICVzLFxuIgorIiVzLCAlcywgYW5kIG90aGVycy5cbiIKK21zZ3N0ciAiIgorCisjOiBsaWIveGFsbG9jLWRpZS5jOjM1Cittc2dpZCAibWVtb3J5IGV4aGF1c3RlZCIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6MjM3Cittc2dpZCAiRGlzayBJbWFnZSIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6MzM4IGxpYnBhcnRlZC9hcmNoL2dudS5jOjI2MQorIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMjcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIG9wZW5pbmcgJXM6ICVzIgorbXNnc3RyICJFcnJvciBtZW1idWthICVzOiAlcyIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjM0OSBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzoyNzEKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTI4MworIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gb3BlbiAlcyByZWFkLXdyaXRlICglcykuICAlcyBoYXMgYmVlbiBvcGVuZWQgcmVhZC1vbmx5LiIKK21zZ3N0ciAiIgorIlRpZGFrIGRhcGF0IG1lbWJ1a2EgJXMgZGVuZ2FuIG1vZGUgcmVhZC13cml0ZSAoJXMpLiAlcyB0ZWxhaCBkaWJ1a2EgcmVhZC0iCisib25seS4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzo0MTEgbGlicGFydGVkL2FyY2gvbGludXguYzoxNDMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGR1cmluZyBzZWVrIGZvciByZWFkIG9uICVzIgorbXNnc3RyICIlcyBzZWxhbWEgcGVuY2FyaWFuIHVudHVrIGRpYmFjYSBwYWRhICVzIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6NDQ0IGxpYnBhcnRlZC9hcmNoL2dudS5jOjQ0OSBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo1NDgKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjY3NiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjEzOTEKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkdXJpbmcgcmVhZCBvbiAlcyIKK21zZ3N0ciAiJXMgc2VsYW1hIHBlbWJhY2FhbiBwYWRhICVzIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6NDgwIGxpYnBhcnRlZC9hcmNoL2dudS5jOjUwOQorIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxNTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbid0IHdyaXRlIHRvICVzLCBiZWNhdXNlIGl0IGlzIG9wZW5lZCByZWFkLW9ubHkuIgorbXNnc3RyICJUaWRhayBkYXBhdCBtZW51bGlzIHBhZGEgJXMsIGthcmVuYSBpbmkgZGlidWthIHNlY2FyYSByZWFkLW9ubHkuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6NDk2IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTU3MAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkdXJpbmcgc2VlayBmb3Igd3JpdGUgb24gJXMiCittc2dzdHIgIiVzIHNlbGFtYSBwZW5jYXJpYW4gdW50dWsgbWVudWxpcyBwYWRhICVzIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6NTMzIGxpYnBhcnRlZC9hcmNoL2dudS5jOjU4NSBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo2MzAKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjcwNyBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjE1MTcKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTYxMiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjE2ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZHVyaW5nIHdyaXRlIG9uICVzIgorbXNnc3RyICIlcyBzZWxhbWEgcGVudWxpc2FuIHBhZGEgJXMiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6NjMgcGFydHByb2JlL3BhcnRwcm9iZS5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICJUcnkgYCVzIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4iCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICVzIFtPUFRJT05dXG4iCisiICBvcjogICVzIERFVklDRSBNSU5PUlxuIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6NzAKK21zZ2lkICIiCisiQ2xlYXIgdW51c2VkIHNwYWNlIG9uIGEgRkFUIHBhcnRpdGlvbiAoYSBHTlUgUGFydGVkIHRlc3RpbmcgdG9vbCkuXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo3NAorbXNnaWQgIiAgICAgIC0taGVscCAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXRcbiIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjc1Cittc2dpZCAiICAgICAgLS12ZXJzaW9uICBvdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdFxuIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6NzcgcGFydHByb2JlL3BhcnRwcm9iZS5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiUmVwb3J0IGJ1Z3MgdG8gPCVzPi5cbiIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjI4NQorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gZmV3IGFyZ3VtZW50cyIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjI5MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIgorbXNnc3RyICJUZXJsYWx1IGJhbnlhayBiYWQgcGFnZXMuIgorCisjOiBwYXJ0cHJvYmUvcGFydHByb2JlLmM6MTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbT1BUSU9OXSBbREVWSUNFXS4uLlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRwcm9iZS9wYXJ0cHJvYmUuYzoxNDIKK21zZ2lkICIiCisiSW5mb3JtIHRoZSBPUyBvZiBwYXJ0aXRpb24gdGFibGUgY2hhbmdlcy5cbiIKKyJcbiIKKyIgIC1kLCAtLW5vLXVwZGF0ZSAgZG9uJ3QgdXBkYXRlIHRoZSBrZXJuZWxcbiIKKyIgIC1zLCAtLXN1bW1hcnkgICAgcHJpbnQgYSBzdW1tYXJ5IG9mIGNvbnRlbnRzXG4iCisiICAtaCwgLS1oZWxwICAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0XG4iCisiICAtdiwgLS12ZXJzaW9uICAgIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0XG4iCittc2dzdHIgIiIKKworIzogcGFydHByb2JlL3BhcnRwcm9iZS5jOjE1MAorbXNnaWQgIiIKKyJcbiIKKyJXaXRoIG5vIERFVklDRSwgcHJvYmUgYWxsIHBhcnRpdGlvbnMuXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIG9wZW4gJXMuIgorbXNnc3RyICJUaWRhayBkYXBhdCBtZW1idWthICVzLiIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6MTE0Cittc2dpZCAiVW5hYmxlIHRvIHByb2JlIHN0b3JlLiIKK21zZ3N0ciAiVGlkYWsgZGFwYXQgbWVtcHJvYmUgc3RvcmUuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzozNTIKK21zZ2lkICIiCisiVGhlIHBhcnRpdGlvbiB0YWJsZSBjYW5ub3QgYmUgcmUtcmVhZC4gIFRoaXMgbWVhbnMgeW91IG5lZWQgdG8gcmVib290IGJlZm9yZSAiCisibW91bnRpbmcgYW55IG1vZGlmaWVkIHBhcnRpdGlvbnMuICBZb3UgYWxzbyBuZWVkIHRvIHJlaW5zdGFsbCB5b3VyIGJvb3QgIgorImxvYWRlciBiZWZvcmUgeW91IHJlYm9vdCAod2hpY2ggbWF5IHJlcXVpcmUgbW91bnRpbmcgbW9kaWZpZWQgcGFydGl0aW9ucykuICAiCisiSXQgaXMgaW1wb3NzaWJsZSBkbyBib3RoIHRoaW5ncyEgIFNvIHlvdSdsbCBuZWVkIHRvIGJvb3Qgb2ZmIGEgcmVzY3VlIGRpc2ssICIKKyJhbmQgcmVpbnN0YWxsIHlvdXIgYm9vdCBsb2FkZXIgZnJvbSB0aGUgcmVzY3VlIGRpc2suICBSZWFkIHNlY3Rpb24gNCBvZiB0aGUgIgorIlBhcnRlZCBVc2VyIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorbXNnc3RyICIiCisiVGFiZWwgcGFydGlzaSB0aWRhayBkYXBhdCBkaWJhY2EgdWxhbmcuIEluaSBiZXJhcnRpIGFuZGEgcGVybHUgdW50dWsgbWUtIgorInJlYm9vdCB0ZXJsZWJpaCBkYWh1bHUgc2ViZWx1bSBtZS1tb3VudCBzZW11YSBwYXJ0aXNpIHlhbmcgZGltb2RpZmlrYXNpLiAiCisiQW5kYSBqdWdhIHBlcmx1IG1lbmdpbnN0YWxsIGtlbWJhbGkgYm9vdGxvYWRlciBhbmRhIHNlYmVsdW0gbWUtcmVib290ICIKKyJrb21wdXRlciBhbmRhICh5YW5nIG1lbWVybHVrYW4gdW50dWsgbWUtbW91bnQgcGFydGlzaSB5YW5nIGRpbW9kaWZpa2FzaSkuICIKKyJJbmkgdGlkYWsgbXVuZ2tpbiB1bnR1ayBtZWxha3VrYW4ga2VkdWFueWEgc2VjYXJhIHNla2FsaWd1cyEgSmFkaSBhbmRhIHBlcmx1ICIKKyJtZW1idWF0IHNlYnVhaCBkaXNrZXQgcGVub2xvbmcgKHJlc2N1ZSksIGRhbiBtZW5naW5zdGFsbCBib290bG9hZGVyIGFuZGEgIgorImRhcmkgZGlza2V0IHBlbm9sb25nIHRlcnNlYnV0LiBCYWNhIGJhZ2lhbiA0IGRhcmkgZG9rdW1lbnRhc2kgcGVuZ2d1bmEgIgorIlBhcnRlZCB1bnR1ayBpbmZvcm1hc2kgbGViaWggbGFuanV0LiIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6MzY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgcGFydGl0aW9uIHRhYmxlIG9uICVzIGNhbm5vdCBiZSByZS1yZWFkICglcykuICBUaGlzIG1lYW5zIHRoZSBIdXJkIGtub3dzICIKKyJub3RoaW5nIGFib3V0IGFueSBtb2RpZmljYXRpb25zIHlvdSBtYWRlLiAgWW91IHNob3VsZCByZWJvb3QgeW91ciBjb21wdXRlciAiCisiYmVmb3JlIGRvaW5nIGFueXRoaW5nIHdpdGggJXMuIgorbXNnc3RyICIiCisiVGFiZWwgcGFydGlzaSBwYWRhICVzIHRpZGFrIGRhcGF0IGRpYmFjYSBrZW1iYWxpICglcykuIEluaSBiZXJhcnRpIGh1cmQgIgorInRpZGFrIHRhaHUgYXBhLWFwYSB0ZW50YW5nIG1vZGlmaWthc2kgeWFuZyBhbmRhIGJ1YXQuIEFuZGEgc2VoYXJ1c255YSAiCisibWVyZWJvb3Qga29tcHV0ZXIgYW5kYSBzZWJlbHVtIG1lbGFrdWthbiBhcGFwdW4gZGVuZ2FuICVzLiIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6MzgwIHBhcnRlZC9wYXJ0ZWQuYzoyNDQzCittc2dpZCAiIgorIllvdSBzaG91bGQgcmVpbnN0YWxsIHlvdXIgYm9vdCBsb2FkZXIgYmVmb3JlIHJlYm9vdGluZy4gIFJlYWQgc2VjdGlvbiA0IG9mICIKKyJ0aGUgUGFydGVkIFVzZXIgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCittc2dzdHIgIiIKKyJBbmRhIHNlaGFydXNueWEgbWVuZ2luc3RhbGwgdWxhbmcgYm9vdCBsb2FkZXIgYW5kYSBzZWJlbHVtIG1lcmVib290bnlhLiBCYWNhICIKKyJiYWdpYW4gNCBkYXJpIFBhcnRlZCBkb2t1bWVudGFzaSBwZW5nZ3VuYSB1bnR1ayBpbmZvcm1hc2kgbGViaWggbGFuanV0LiIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6NzcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHRyeWluZyB0byBzeW5jICVzIHRvIGRpc2siCittc2dzdHIgIiVzIG1lbmNvYmEgdW50dWsgbWVuc2lua3JvbmlzYXNpICVzIHBhZGEgZGlzayIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo0MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHN0YXQgZGV2aWNlICVzIC0gJXMuIgorbXNnc3RyICJUaWRhayBkYXBhdCBtZW1wZXJvbGVoIHN0YXRpc3RpayBwZXJhbmdrYXQgJXMgLSAlcy4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6NTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgZGV0ZXJtaW5lIHNlY3RvciBzaXplIGZvciAlczogJXMuXG4iCisiVXNpbmcgdGhlIGRlZmF1bHQgc2VjdG9yIHNpemUgKCVsbGQpLiIKK21zZ3N0ciAiIgorIlRpZGFrIGRhcGF0IG1lbmVudHVrYW4gdWt1cmFuIHNla3RvciB1bnR1ayAlczogJXMuXG4iCisiTWVuZ2d1bmFrYW4gZGVmYXVsdCB1a3VyYW4gc2VrdG9yICglbGxkKS4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6NTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJEZXZpY2UgJXMgaGFzIGEgbG9naWNhbCBzZWN0b3Igc2l6ZSBvZiAlbGxkLiAgTm90IGFsbCBwYXJ0cyBvZiBHTlUgUGFydGVkICIKKyJzdXBwb3J0IHRoaXMgYXQgdGhlIG1vbWVudCwgYW5kIHRoZSB3b3JraW5nIGNvZGUgaXMgSElHSExZIEVYUEVSSU1FTlRBTC5cbiIKK21zZ3N0ciAiIgorIlBlcmFuZ2thdCAlcyBtZW1pbGlraSB1a3VyYW4gbG9naWNhbCBzZWt0b3IgJWxsZC4gVGlkYWsgc2VtdWEgYmFnaWFuIGRhcmkgIgorIkdOVSBQYXJ0ZWQgc3VwcG9ydCBha2FuIGhhbCBpbmkgcGFkYSBzYWF0IGluaSwgZGFuIGtvZGUgcHJvZ3JhbSB5YW5nICIKKyJkaWd1bmFrYW4gc2FhdCBpbmkgbWFzaWggVEFIQVAgUEVSQ09CQUFOLlxuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjU3OQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZGV0ZXJtaW5lIHRoZSBzaXplIG9mICVzICglcykuIgorbXNnc3RyICJUaWRhayBkYXBhdCBtZW5lbnR1a2FuIHVrdXJhbiBkYXJpICVzICglcykuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjY2OAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZ2V0IGlkZW50aXR5IG9mIGRldmljZSAlcyAtICVzIgorbXNnc3RyICJUaWRhayBkYXBhdCBtZW1wZXJvbGVoIGlkZW50aXRhcyBkYXJpIHBlcmFuZ2thdCAlcyAtICVzIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjY3NworbXNnaWQgIkdlbmVyaWMgSURFIgorbXNnc3RyICJJREUgdW11bSIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkRldmljZSAlcyBoYXMgbXVsdGlwbGUgKCVkKSBsb2dpY2FsIHNlY3RvcnMgcGVyIHBoeXNpY2FsIHNlY3Rvci5cbiIKKyJHTlUgUGFydGVkIHN1cHBvcnRzIHRoaXMgRVhQRVJJTUVOVEFMTFkgZm9yIHNvbWUgc3BlY2lhbCBkaXNrIGxhYmVsL2ZpbGUgIgorInN5c3RlbSBjb21iaW5hdGlvbnMsIGUuZy4gR1BUIGFuZCBleHQyLzMuXG4iCisiUGxlYXNlIGNvbnN1bHQgdGhlIHdlYiBzaXRlIGZvciB1cC10by1kYXRlIGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiIgorIlBlcmFuZ2thdCAlcyBtZW1pbGlraSBiZWJlcmFwYSAoJWQpIGxvZ2ljYWwgc2VrdG9yIGRhbGFtIHNldGlhcCBwaHlzaWNhbCAiCisic2VrdG9yLlxuIgorIkdOVSBQYXJ0ZWQgc3VwcG9ydCB1bnR1ayBoYWwgaW5pIGRhbGFtIHRhaGFwIFBFUkNPQkFBTiB1bnR1ayBiZWJlcmFwYSBkaXNrICIKKyJsYWJlbCBzcGVzaWFsIC8ga29tYmluYXNpIGZpbGUgc3lzdGVtLCBjb250b2ggR1BUIGRhbiBleHQyLzMuXG4iCisiVG9sb25nIGxpaGF0IHdlYiBzaXRlIHVudHVrIGluZm9ybWFzaSB0ZXJiYXJ1LiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo4NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgaW5pdGlhbGlzaW5nIFNDU0kgZGV2aWNlICVzIC0gJXMiCittc2dzdHIgIkVycm9yIG1lbmdpbmlzaWFsaXNhc2kgcGVyYW5na2F0IFNDU0kgJXMgLSAlcyIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo5MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBkZXZpY2UgJXMgaGFzIHplcm8gbGVuZ3RoLCBhbmQgY2FuJ3QgcG9zc2libHkgc3RvcmUgYSBmaWxlIHN5c3RlbSBvciAiCisicGFydGl0aW9uIHRhYmxlLiAgUGVyaGFwcyB5b3Ugc2VsZWN0ZWQgdGhlIHdyb25nIGRldmljZT8iCittc2dzdHIgIiIKKyJQZXJhbmdrYXQgJXMgbWVtaWxpa2kgcGFuamFuZyBrb3NvbmcsIGRhbiB0aWRhayBtdW5na2luIG1lbnlpbXBhbiBmaWxlICIKKyJzeXN0ZW0gZGFuIHRhYmVsIHBhcnRpc2kgZGlkYWxhbW55YS4gTXVuZ2tpbiBhbmRhIHRlbGFoIG1lbWlsaWggcGVyYW5na2F0ICIKKyJ5YW5nIHNhbGFoPyIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMDMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVbmFibGUgdG8gZGV0ZXJtaW5lIGdlb21ldHJ5IG9mIGZpbGUvZGV2aWNlICVzLiAgWW91IHNob3VsZCBub3QgdXNlIFBhcnRlZCAiCisidW5sZXNzIHlvdSBSRUFMTFkga25vdyB3aGF0IHlvdSdyZSBkb2luZyEiCittc2dzdHIgIiIKKyJUaWRhayBkYXBhdCBtZW5lbnR1a2FuIGdlb21ldHJpIGRhcmkgZmlsZS9wZXJhbmdrYXQgJXMuIEFuZGEgc2VoYXJ1c255YSAiCisidGlkYWsgIG1lbmdndW5ha2FuIFBhcnRlZCBrZWN1YWxpIGFuZGEgQkVOQVIgLSBCRU5BUiB0YWh1IGFwYSB5YW5nIGFuZGEgIgorImxha3VrYW4hIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExMTAKK21zZ2lkICJEQUM5NjAgUkFJRCBjb250cm9sbGVyIgorbXNnc3RyICJEQUM5NjAgUkFJRCBjb250cm9sbGVyIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExMTUKK21zZ2lkICJQcm9taXNlIFNYOCBTQVRBIERldmljZSIKK21zZ3N0ciAiUGVyYW5na2F0IFByb21pc2UgU1g4IFNBVEEiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTEyMAorbXNnaWQgIklCTSBTMzkwIERBU0QgZHJpdmUiCittc2dzdHIgIklCTSBTMzkwIERBU0QgZHJpdmUiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTEyNQorbXNnaWQgIklCTSBpU2VyaWVzIFZpcnR1YWwgREFTRCIKK21zZ3N0ciAiSUJNIGlTZXJpZXMgVmlydHVhbCBEQVNEIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExMzAKK21zZ2lkICJDb21wYXEgU21hcnQgQXJyYXkiCittc2dzdHIgIkNvbXBhcSBTbWFydCBBcnJheSIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTM1Cittc2dpZCAiQVRBUkFJRCBDb250cm9sbGVyIgorbXNnc3RyICJBVEFSQUlEIENvbnRyb2xsZXIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTE0MAorbXNnaWQgIkkyTyBDb250cm9sbGVyIgorbXNnc3RyICJJMk8gQ29udHJvbGxlciIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTQ1Cittc2dpZCAiVXNlci1Nb2RlIExpbnV4IFVCRCIKK21zZ3N0ciAiTW9kZS1QZW5nZ3VuYSBMaW51eCBVQkQiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTE1NgorbXNnaWQgIkxpbnV4IGRldmljZS1tYXBwZXIiCittc2dzdHIgIkxpbnV4IGRldmljZS1tYXBwZXIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTE2MgorbXNnaWQgIlVua25vd24iCittc2dzdHIgIlRpZGFrIGRpa2V0YWh1aSIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTY5Cittc2dpZCAicGVkX2RldmljZV9uZXcoKSAgVW5zdXBwb3J0ZWQgZGV2aWNlIHR5cGUiCittc2dzdHIgInBlZF9kZXZpY2VfbmV3KCkgVGlwZSBwZXJhbmdrYXQgdGlkYWsgZGlzdXBwb3J0IgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjIwODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkVycm9yIGluZm9ybWluZyB0aGUga2VybmVsIGFib3V0IG1vZGlmaWNhdGlvbnMgdG8gcGFydGl0aW9uICVzIC0tICVzLiAgVGhpcyAiCisibWVhbnMgTGludXggd29uJ3Qga25vdyBhYm91dCBhbnkgY2hhbmdlcyB5b3UgbWFkZSB0byAlcyB1bnRpbCB5b3UgcmVib290IC0tICIKKyJzbyB5b3Ugc2hvdWxkbid0IG1vdW50IGl0IG9yIHVzZSBpdCBpbiBhbnkgd2F5IGJlZm9yZSByZWJvb3RpbmcuIgorbXNnc3RyICIiCisiR2FnYWwgbWVtYmVyaXRhaHVrYW4ga2VybmVsIG1lbmdlbmFpIG1vZGlmaWthc2kgeWFuZyB0ZWxhaCBkaWxha3VrYW4gcGFkYSAiCisicGFydGlzaSAlcyAtLSAlcy4gSW5pIGJlcmFydGkgTGludXggdGlkYWsgdGFodSB0ZW50YW5nIHNlZ2FsYSBwZXJ1YmFoYW4geWFuZyAiCisiYW5kYSBidWF0IHBhZGEgJXMgc2FtcGFpIGFuZGEgbWVyZWJvb3Qga29tcHV0ZXIgYW5kYSAtLSBqYWRpIGFuZGEgc2VoYXJ1c255YSAiCisidGlkYWsgbWUtbW91bnQtbnlhIGF0YXUgbWVuZ2d1bmFrYW5ueWEgZGFsYW0gc2VnYWxhIGNhcmEgc2ViZWx1bSBtZXJlYm9vdCAiCisia29tcHV0ZXIgYW5kYS4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MjI2MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisicGFydGVkIHdhcyB1bmFibGUgdG8gcmUtcmVhZCB0aGUgcGFydGl0aW9uIHRhYmxlIG9uICVzICglcykuICBUaGlzIG1lYW5zICIKKyJMaW51eCB3b24ndCBrbm93IGFueXRoaW5nIGFib3V0IHRoZSBtb2RpZmljYXRpb25zIHlvdSBtYWRlLiAiCittc2dzdHIgIiIKKyJwYXJ0ZWQgdGlkYWsgZGFwYXQgbWVtYmFjYSBrZW1iYWxpIHRhYmVsIHBhcnRpc2kgcGFkYSAlcyAoJXMpLiBJbmkgYmVyYXJ0aSAiCisiTGludXggdGlkYWsgYWthbiB0YWh1IGFwYXB1biB0ZW50YW5nIG1vZGlmaWthc2kgeWFuZyB0ZWxhaCBhbmRhIGJ1YXQuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjIzNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBrZXJuZWwgd2FzIHVuYWJsZSB0byByZS1yZWFkIHRoZSBwYXJ0aXRpb24gdGFibGUgb24gJXMgKCVzKS4gIFRoaXMgbWVhbnMgIgorIkxpbnV4IHdvbid0IGtub3cgYW55dGhpbmcgYWJvdXQgdGhlIG1vZGlmaWNhdGlvbnMgeW91IG1hZGUgdW50aWwgeW91ICIKKyJyZWJvb3QuICBZb3Ugc2hvdWxkIHJlYm9vdCB5b3VyIGNvbXB1dGVyIGJlZm9yZSBkb2luZyBhbnl0aGluZyB3aXRoICVzLiIKK21zZ3N0ciAiIgorIktlcm5lbCB0aWRhayBkYXBhdCBtZW1iYWNhIGtlbWJhbGkgdGFiZWwgcGFydGlzaSBwYWRhICVzICglcykuIEluaSBiZXJhcnRpICIKKyJMaW51eCB0aWRhayBha2FuIHRhaHUgYXBhcHVuIHRlbnRhbmcgbW9kaWZpa2FzaSB5YW5nIGFuZGEgYnVhdCBzYW1wYWkgYW5kYSAiCisicmVib290LiBBbmRhIHNlaGFydXNueWEgbWVyZWJvb3Qga29tcHV0ZXIgYW5kYSBzZWJlbHVtIG1lbGFrdWthbiBhcGFwdW4gIgorImRlbmdhbiAlcy4iCisKKyM6IGxpYnBhcnRlZC9jcy9nZW9tLmM6MTYyCittc2dpZCAiQ2FuJ3QgaGF2ZSB0aGUgZW5kIGJlZm9yZSB0aGUgc3RhcnQhIgorbXNnc3RyICJUaWRhayBkYXBhdCBtZW1pbGlraSBha2hpciBzZWJlbHVtIHN0YXJ0ISIKKworIzogbGlicGFydGVkL2NzL2dlb20uYzoxNjkKK21zZ2lkICJDYW4ndCBoYXZlIGEgcGFydGl0aW9uIG91dHNpZGUgdGhlIGRpc2shIgorbXNnc3RyICJUaWRhayBkYXBhdCBtZW1pbGlraSBwYXJ0aXNpIGRpbHVhciBkYXJpIGRpc2shIgorCisjOiBsaWJwYXJ0ZWQvY3MvZ2VvbS5jOjM2NgorIywgYy1mb3JtYXQKK21zZ2lkICJBdHRlbXB0IHRvIHdyaXRlIHNlY3RvcnMgJWxkLSVsZCBvdXRzaWRlIG9mIHBhcnRpdGlvbiBvbiAlcy4iCittc2dzdHIgIk1lbmNvYmEgdW50dWsgbWVudWxpcyBzZWt0b3IgJWxkLSVsZCBkaWx1YXIgZGFyaSBwYXJ0aXNpIHBhZGEgJXMuIgorCisjOiBsaWJwYXJ0ZWQvY3MvZ2VvbS5jOjQwNiBsaWJwYXJ0ZWQvZnMvbGludXhfc3dhcC9saW51eF9zd2FwLmM6NDc1Cittc2dpZCAiY2hlY2tpbmcgZm9yIGJhZCBibG9ja3MiCittc2dzdHIgIk1lbmdlY2hlY2sgYmFkIGJsb2NrcyIKKworIzogbGlicGFydGVkL2RlYnVnLmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkJhY2t0cmFjZSBoYXMgJWQgY2FsbHMgb24gc3RhY2s6XG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2RlYnVnLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkFzc2VydGlvbiAoJXMpIGF0ICVzOiVkIGluIGZ1bmN0aW9uICVzKCkgZmFpbGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIwMworIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gb3BlbiAlcyAtIHVucmVjb2duaXNlZCBkaXNrIGxhYmVsLiIKK21zZ3N0ciAiVGlkYWsgZGFwYXQgbWVtYnVrYSAlcyAtIGRpc2sgbGFiZWwgdGlkYWsgZGlrZXRhaHVpIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjQ3MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhpcyBsaWJwYXJ0ZWQgZG9lc24ndCBoYXZlIHdyaXRlIHN1cHBvcnQgZm9yICVzLiAgUGVyaGFwcyBpdCB3YXMgY29tcGlsZWQgIgorInJlYWQtb25seS4iCittc2dzdHIgIiIKKyJsaWJwYXJ0ZWQgaW5pIHRpZGFrIG1lbWlsaWtpIHdyaXRlIHN1cHBvcnQgdW50dWsgJXMuIE11bmdraW4gaW5pIGRpa29tcGlsYXNpICIKKyJ1bnR1ayBtb2RlIHJlYWQtb25seS4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6NTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhcnRpdGlvbiAlZCBpcyAlcywgYnV0IHRoZSBmaWxlIHN5c3RlbSBpcyAlcy4iCittc2dzdHIgIlBhcnRpc2kgJWQgYWRhbGFoICVzLCB0ZXRhcGkgZmlsZSBzeXN0ZW0tbnlhIGFkYWxhaCAlcy4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTA3NQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkaXNrIGxhYmVscyBkbyBub3Qgc3VwcG9ydCBleHRlbmRlZCBwYXJ0aXRpb25zLiIKK21zZ3N0ciAiJXMgZGlzayBsYWJlbCB0aWRhayBtZW5zdXBwb3J0IHBhcnRpc2kgZXh0ZW5kZWQuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE2MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZGlzayBsYWJlbHMgZG9uJ3Qgc3VwcG9ydCBsb2dpY2FsIG9yIGV4dGVuZGVkIHBhcnRpdGlvbnMuIgorbXNnc3RyICIlcyBkaXNrIGxhYmVscyB0aWRhayBtZW5zdXBwb3J0IHBhcnRpc2kgbG9naWNhbCBhdGF1IGV4dGVuZGVkLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNjQ3Cittc2dpZCAiVG9vIG1hbnkgcHJpbWFyeSBwYXJ0aXRpb25zLiIKK21zZ3N0ciAiVGVybGFsdSBiYW55YWsgcHJpbWFyeSBwYXJ0aXNpLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW4ndCBhZGQgYSBsb2dpY2FsIHBhcnRpdGlvbiB0byAlcywgYmVjYXVzZSB0aGVyZSBpcyBubyBleHRlbmRlZCBwYXJ0aXRpb24uIgorbXNnc3RyICIiCisiVGlkYWsgZGFwYXQgbWVuYW1iYWhrYW4gc2VidWFoIHBhcnRpc2kgbG9naWNhbCBwYWRhICVzLCBrYXJlbmEgZGlzYW5hIHRpZGFrICIKKyJhZGEgcGFydGlzaSBleHRlbmRlZC4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTY4MAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW4ndCBoYXZlIG1vcmUgdGhhbiBvbmUgZXh0ZW5kZWQgcGFydGl0aW9uIG9uICVzLiIKK21zZ3N0ciAiVGlkYWsgZGFwYXQgbWVtaWxpa2kgbGViaWggZGFyaSBzYXR1IHBhcnRpc2kgZXh0ZW5kZWQgcGFkYSAlcy4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTY5MAorbXNnaWQgIkNhbid0IGhhdmUgbG9naWNhbCBwYXJ0aXRpb25zIG91dHNpZGUgb2YgdGhlIGV4dGVuZGVkIHBhcnRpdGlvbi4iCittc2dzdHIgIlRpZGFrIGRhcGF0IG1lbWlsaWtpIHBhcnRpc2kgbG9naWNhbCBkaWx1YXIgZGFyaSBwYXJ0aXNpIGV4dGVuZGVkLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbid0IGhhdmUgYSBsb2dpY2FsIHBhcnRpdGlvbiBvdXRzaWRlIG9mIHRoZSBleHRlbmRlZCBwYXJ0aXRpb24gb24gJXMuIgorbXNnc3RyICJUaWRhayBkYXBhdCBtZW1pbGlraSBwYXJ0aXNpIGxvZ2ljYWwgZGlsdWFyIHBhcnRpc2kgZXh0ZW5kZWQgcGFkYSAlcy4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTcyNSBsaWJwYXJ0ZWQvZGlzay5jOjE3NzkgbGlicGFydGVkL2Rpc2suYzoxOTQ1Cittc2dpZCAiQ2FuJ3QgaGF2ZSBvdmVybGFwcGluZyBwYXJ0aXRpb25zLiIKK21zZ3N0ciAiVGlkYWsgZGFwYXQgbWVtaWxpa2kgcGFydGlzaSB5YW5nIGJlcm92ZXJsYXAuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE3MzMKK21zZ2lkICJDYW4ndCBoYXZlIGEgcHJpbWFyeSBwYXJ0aXRpb24gaW5zaWRlIGFuIGV4dGVuZGVkIHBhcnRpdGlvbi4iCittc2dzdHIgIlRpZGFrIGRhcGF0IG1lbWlsaWtpIHByaW1hcnkgcGFydGlzaSBkaWRhbGFtIHNlYnVhaCBwYXJ0aXNpIGV4dGVuZGVkLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTQwCittc2dpZCAibWV0YWRhdGEiCittc2dzdHIgIm1ldGFkYXRhIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNDIKK21zZ2lkICJmcmVlIgorbXNnc3RyICJmcmVlIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNDQgcGFydGVkL3VpLmM6MTE2OSBwYXJ0ZWQvdWkuYzoxMTk3Cittc2dpZCAiZXh0ZW5kZWQiCittc2dzdHIgImV4dGVuZGVkIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNDYgcGFydGVkL3VpLmM6MTE3MyBwYXJ0ZWQvdWkuYzoxMjAxCittc2dpZCAibG9naWNhbCIKK21zZ3N0ciAibG9naWNhbCIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTQ4IHBhcnRlZC91aS5jOjExNjUgcGFydGVkL3VpLmM6MTE5MworbXNnaWQgInByaW1hcnkiCittc2dzdHIgInByaW1hcnkiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE2NAorbXNnaWQgImJvb3QiCittc2dzdHIgImJvb3QiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE2NgorbXNnaWQgInJvb3QiCittc2dzdHIgInJvb3QiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE2OAorbXNnaWQgInN3YXAiCittc2dzdHIgInN3YXAiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE3MAorbXNnaWQgImhpZGRlbiIKK21zZ3N0ciAidGVyc2VtYnVueWkiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE3MgorbXNnaWQgInJhaWQiCittc2dzdHIgInJhaWQiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE3NAorbXNnaWQgImx2bSIKK21zZ3N0ciAibHZtIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNzYKK21zZ2lkICJsYmEiCittc2dzdHIgImxiYSIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTc4Cittc2dpZCAiaHAtc2VydmljZSIKK21zZ3N0ciAiaHAtc2VydmljZSIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTgwCittc2dpZCAicGFsbyIKK21zZ3N0ciAicGFsbyIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTgyCittc2dpZCAicHJlcCIKK21zZ3N0ciAicHJlcCIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTg0Cittc2dpZCAibXNmdHJlcyIKK21zZ3N0ciAibXNmdHJlcyIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gcGFydGl0aW9uIGZsYWcsICVkLiIKK21zZ3N0ciAiZmxhZyBwYXJ0aXNpIHRpZGFrIGRpa2V0YWh1aSwgJWQuIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6NzgKK21zZ2lkICJJbmZvcm1hdGlvbiIKK21zZ3N0ciAiSW5mb3JtYXNpIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6NzkKK21zZ2lkICJXYXJuaW5nIgorbXNnc3RyICJQZXJpbmdhdGFuIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODAKK21zZ2lkICJFcnJvciIKK21zZ3N0ciAiRXJyb3IiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4MQorbXNnaWQgIkZhdGFsIgorbXNnc3RyICJGYXRhbCIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjgyCittc2dpZCAiQnVnIgorbXNnc3RyICJCdWciCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4MworbXNnaWQgIk5vIEltcGxlbWVudGF0aW9uIgorbXNnc3RyICJUaWRhayBhZGEgSW1wbGVtZW50YXNpIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODcKK21zZ2lkICJGaXgiCittc2dzdHIgIkJldHVsa2FuIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODgKK21zZ2lkICJZZXMiCittc2dzdHIgIllhIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODkKK21zZ2lkICJObyIKK21zZ3N0ciAiVGlkYWsiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo5MAorbXNnaWQgIk9LIgorbXNnc3RyICJPSyIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjkxCittc2dpZCAiUmV0cnkiCittc2dzdHIgIkNvYmEiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo5MgorbXNnaWQgIklnbm9yZSIKK21zZ3N0ciAiSGlyYXVrYW4iCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo5MworbXNnaWQgIkNhbmNlbCIKK21zZ3N0ciAiQmF0YWwiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkEgYnVnIGhhcyBiZWVuIGRldGVjdGVkIGluIEdOVSBQYXJ0ZWQuICBSZWZlciB0byB0aGUgd2ViIHNpdGUgb2YgcGFydGVkICIKKyJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvcGFydGVkL3BhcnRlZC5odG1sIGZvciBtb3JlIGluZm9ybWF0aW9ucyBvZiB3aGF0ICIKKyJjb3VsZCBiZSB1c2VmdWwgZm9yIGJ1ZyBzdWJtaXR0aW5nISAgUGxlYXNlIGVtYWlsIGEgYnVnIHJlcG9ydCB0byBidWctIgorInBhcnRlZEBnbnUub3JnIGNvbnRhaW5pbmcgYXQgbGVhc3QgdGhlIHZlcnNpb24gKCVzKSBhbmQgdGhlIGZvbGxvd2luZyAiCisibWVzc2FnZTogICIKK21zZ3N0ciAiIgorIlNlYnVhaCBidWcgdGVsYWggdGVyZGV0ZWtzaSBkYWxhbSBHTlUgcGFydGVkLiBMaWhhdCBrZSB3ZWIgc2l0ZSBkYXJpIHBhcnRlZCAiCisiZGkgaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3BhcnRlZC9wYXJ0ZWQuaHRtbCB1bnR1ayBpbmZvcm1hc2kgbGViaWggIgorImxhbmp1dCB0ZW50YW5nIGFwYSB5YW5nIGJlcmd1bmEgZGFsYW0gbWVuZ2lyaW1rYW4gbGFwb3JhbiBidWchIFRvbG9uZyBlbWFpbCAiCisibGFwb3JhbiBidWcga2UgYnVnLXBhcnRlZEBnbnUub3JnIGJlcmlzaSBzZXRpZGFrbnlhIHZlcnNpICglcykgZGFuIHBlc2FuICIKKyJiZXJpa3V0IGluaToiCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6Mzg0Cittc2dpZCAiQ291bGQgbm90IGRldGVjdCBmaWxlIHN5c3RlbS4iCittc2dzdHIgIlRpZGFrIGRhcGF0IG1lbmRldGVrc2kgZmlsZXN5c3RlbS4iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6Mzk1Cittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIGlzIGJpZ2dlciB0aGFuIGl0cyB2b2x1bWUhIgorbXNnc3RyICJGaWxlIHN5c3RlbSBsZWJpaCBiZXNhciBkYXJpIHZvbHVtZW55YSEiCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NDAzCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnQgZm9yIG9wZW5pbmcgJXMgZmlsZSBzeXN0ZW1zIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICJTdXBwb3J0IHVudHVrIG1lbWJ1a2EgZmlsZSBzeXN0ZW1zICVzIGJlbHVtIGRpaW1wbGVtZW50YXNpa2FuLiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo0NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VwcG9ydCBmb3IgY3JlYXRpbmcgJXMgZmlsZSBzeXN0ZW1zIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICJTdXBwb3J0IHVudHVrIG1lbWJ1YXQgZmlsZSBzeXN0ZW1zICVzIGJlbHVtIGRpaW1wbGVtZW50YXNpa2FuLiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo1MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VwcG9ydCBmb3IgY2hlY2tpbmcgJXMgZmlsZSBzeXN0ZW1zIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICJTdXBwb3J0IHVudHVrIG1lbmdlY2hlY2sgZmlsZSBzeXN0ZW1zICVzIGJlbHVtIGRpaW1wbGVtZW50YXNpa2FuLiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo1NzEKK21zZ2lkICJyYXcgYmxvY2sgY29weWluZyIKK21zZ3N0ciAicmF3IGJsb2NrIGNvcHlpbmciCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NTgyCittc2dpZCAiZ3Jvd2luZyBmaWxlIHN5c3RlbSIKK21zZ3N0ciAibWVtcGVyYmVzYXIgZmlsZSBzeXN0ZW0iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NjIyCittc2dpZCAiQ2FuJ3QgY29weSBvbnRvIGFuIG92ZXJsYXBwaW5nIHBhcnRpdGlvbi4iCittc2dzdHIgIlRpZGFrIGRhcGF0IG1lbnlhbGluIGtlZGFsYW0gcGFydGlzaSB5YW5nIG92ZXJsYXAuIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjY0NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRGlyZWN0IHN1cHBvcnQgZm9yIGNvcHlpbmcgZmlsZSBzeXN0ZW1zIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQgZm9yICVzLiAgIgorIkhvd2V2ZXIsIHN1cHBvcnQgZm9yIHJlc2l6aW5nIGlzIGltcGxlbWVudGVkLiAgVGhlcmVmb3JlLCB0aGUgZmlsZSBzeXN0ZW0gIgorImNhbiBiZSBjb3BpZWQgaWYgdGhlIG5ldyBwYXJ0aXRpb24gaXMgYXQgbGVhc3QgYXMgYmlnIGFzIHRoZSBvbGQgb25lLiAgU28sICIKKyJlaXRoZXIgc2hyaW5rIHRoZSBwYXJ0aXRpb24geW91IGFyZSB0cnlpbmcgdG8gY29weSwgb3IgY29weSB0byBhIGJpZ2dlciAiCisicGFydGl0aW9uLiIKK21zZ3N0ciAiIgorIkxheWFuYW4gbGFuZ3N1bmcgdW50dWsgbWVueWFsaW4gZmlsZSBzeXN0ZW0gYmVsdW0gZGlpbXBsZW1lbnRhc2lrYW4gdW50dWsgJSIKKyJzLiBBa2FuIHRldGFwaSwgbGF5YW5hbiB1bnR1ayBtZS1yZXNpemUtbnlhIHN1ZGFoIGRpaW1wbGVtZW50YXNpa2FuLiBPbGVoICIKKyJrYXJlbmEgaXR1LCBmaWxlIHN5c3RlbSBkYXBhdCBkaXNhbGluIGppa2EgcGFydGlzaSBiYXJ1IGJlcnVrdXJhbiBzYW1hIGJlc2FyICIKKyJkZW5nYW4gcGFydGlzaSBsYW1hLiBKYWRpLCBiaXNhIGRpbGFrdWthbiBkZW5nYW4gbWVuZ2VjaWxrYW4gcGFydGlzaSB5YW5nICIKKyJha2FuIGRpc2FsaW4sIGF0YXUgbWVueWFsaW4ga2UgcGFydGlzaSB5YW5nIGxlYmloIGJlc2FyLiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo2NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VwcG9ydCBmb3IgY29weWluZyAlcyBmaWxlIHN5c3RlbXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIlN1cHBvcnQgdW50dWsgbWVueWFsaW4gZmlsZXN5c3RlbSAlcyBiZWx1bSBkaWltcGxlbWVudGFzaWthbi4iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6Njk2CisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnQgZm9yIHJlc2l6aW5nICVzIGZpbGUgc3lzdGVtcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiU3VwcG9ydCB1bnR1ayBtZW4tcmVzaXplIGZpbGVzeXN0ZW0gJXMgYmVsdW0gZGlpbXBsZW1lbnRhc2lrYW4uIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzozMTUKK21zZ2lkICJjcmVhdGluZyIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0MDIKKyMsIGZ1enp5Cittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIGlzIGluIGFuIGludmFsaWQgc3RhdGUuICBQZXJoYXBzIGl0IGlzIG1vdW50ZWQ/IgorbXNnc3RyICJGaWxlIHN5c3RlbSBsZWJpaCBiZXNhciBkYXJpIHZvbHVtZW55YSEiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQxMAorbXNnaWQgIlRoZSBmaWxlIHN5c3RlbSBpcyBpbiBvbGQgKHVucmVzaXplYWJsZSkgZm9ybWF0LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0MTYKK21zZ2lkICJJbnZhbGlkIGZyZWUgYmxvY2tzIGNvdW50LiAgUnVuIHJlaXNlcmZzY2sgLS1jaGVjayBmaXJzdC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDMxCisjLCBmdXp6eQorbXNnaWQgImNoZWNraW5nIgorbXNnc3RyICJjaGVjayIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDM3Cittc2dpZCAiUmVpc2VyZnMgdHJlZSBzZWVtcyB0byBiZSBjb3JydXB0ZWQuICBSdW4gcmVpc2VyZnNjayAtLWNoZWNrIGZpcnN0LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0NDkKKyMsIGZ1enp5Cittc2dpZCAiIgorIlRoZSByZWlzZXJmcyBmaWxlIHN5c3RlbSBwYXNzZWQgYSBiYXNpYyBjaGVjay4gIEZvciBhIG1vcmUgY29tcHJlaGVuc2l2ZSAiCisiY2hlY2ssIHJ1biByZWlzZXJmc2NrIC0tY2hlY2suIgorbXNnc3RyICIiCisiRmlsZSBzeXN0ZW0gZXh0MiBsb2xvcyBkYXJpIHBlbmdlY2hlY2thbiBkYXNhci4gVW50dWsgbGViaWgga29tcHJlaGVuc2lmICIKKyJjaGVjaywgZ3VuYWthbiBhcGxpa2FzaSBlMmZzY2suIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0NzQKKyMsIGZ1enp5Cittc2dpZCAiU29ycnksIGNhbid0IG1vdmUgdGhlIHN0YXJ0IG9mIHJlaXNlcmZzIHBhcnRpdGlvbnMgeWV0LiIKK21zZ3N0ciAiTWFhZiwgdGlkYWsgZGFwYXQgbWVtaW5kYWhrYW4gYXdhbCBkYXJpIHBhcnRpc2kgZXh0MiEiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQ5MAorbXNnaWQgIkNvdWxkbid0IHJlb3BlbiBkZXZpY2UgYWJzdHJhY3Rpb24gbGF5ZXIgZm9yIHJlYWQvd3JpdGUuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjUwOCBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjU1MgorIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzoyNTAgbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo2MjkKK21zZ2lkICJzaHJpbmtpbmciCittc2dzdHIgIm1lbmdlY2lsa2FuIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo1MjAKKyMsIGZ1enp5Cittc2dpZCAiZXhwYW5kaW5nIgorbXNnc3RyICJQZXJpbmdhdGFuIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo1OTIKK21zZ2lkICJDb3VsZG4ndCBjcmVhdGUgcmVpc2VyZnMgZGV2aWNlIGFic3RyYWN0aW9uIGhhbmRsZXIuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjYwNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRGV2aWNlIGlzIHRvbyBzbWFsbCBmb3IgJWx1IGJsb2Nrcy4iCittc2dzdHIgIkZpbGUgc3lzdGVtIHRlcmxhbHUga2VjaWwgdW50dWsgZXh0Mi4iCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjYxNQorbXNnaWQgImNvcHlpbmciCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IHJlc29sdmUgc3ltYm9sICVzLiAgRXJyb3I6ICVzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo3MDQKK21zZ2lkICJHTlUgUGFydGVkIGZvdW5kIGFuIGludmFsaWQgbGlicmVpc2VyZnMgbGlicmFyeS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJHTlUgUGFydGVkIGhhcyBkZXRlY3RlZCBsaWJyZWlzZXJmcyBpbnRlcmZhY2UgdmVyc2lvbiBtaXNtYXRjaC4gIEZvdW5kICVkLSUiCisiZCwgcmVxdWlyZWQgJWQuIFJlaXNlckZTIHN1cHBvcnQgd2lsbCBiZSBkaXNhYmxlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9haXguYzoxMzcKKyMsIGZ1enp5Cittc2dpZCAiU3VwcG9ydCBmb3IgcmVhZGluZyBBSVggZGlzayBsYWJlbHMgaXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIlN1cHBvcnQgdW50dWsgbWVtYnVhdCBmaWxlIHN5c3RlbXMgJXMgYmVsdW0gZGlpbXBsZW1lbnRhc2lrYW4uIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2FpeC5jOjE0OAorIywgZnV6enkKK21zZ2lkICJTdXBwb3J0IGZvciB3cml0aW5nIEFJWCBkaXNrIGxhYmVscyBpcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiU3VwcG9ydCB1bnR1ayBtZW1idWF0IGZpbGUgc3lzdGVtcyAlcyBiZWx1bSBkaWltcGxlbWVudGFzaWthbi4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYWl4LmM6MTYxCisjLCBmdXp6eQorbXNnaWQgIiIKKyJTdXBwb3J0IGZvciBhZGRpbmcgcGFydGl0aW9ucyB0byBBSVggZGlzayBsYWJlbHMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIlN1cHBvcnQgdW50dWsgbWVtYnVhdCBmaWxlIHN5c3RlbXMgJXMgYmVsdW0gZGlpbXBsZW1lbnRhc2lrYW4uIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2FpeC5jOjE3MQorIywgZnV6enkKK21zZ2lkICIiCisiU3VwcG9ydCBmb3IgZHVwbGljYXRpbmcgcGFydGl0aW9ucyBpbiBBSVggZGlzayBsYWJlbHMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIlN1cHBvcnQgdW50dWsgbWVtYnVhdCBmaWxlIHN5c3RlbXMgJXMgYmVsdW0gZGlpbXBsZW1lbnRhc2lrYW4uIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2FpeC5jOjE4OQorIywgZnV6enkKK21zZ2lkICIiCisiU3VwcG9ydCBmb3Igc2V0dGluZyBzeXN0ZW0gdHlwZSBvZiBwYXJ0aXRpb25zIGluIEFJWCBkaXNrIGxhYmVscyBpcyBub3QgIgorImltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIlN1cHBvcnQgdW50dWsgbWVtYnVhdCBmaWxlIHN5c3RlbXMgJXMgYmVsdW0gZGlpbXBsZW1lbnRhc2lrYW4uIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2FpeC5jOjE5OQorIywgZnV6enkKK21zZ2lkICJTdXBwb3J0IGZvciBzZXR0aW5nIGZsYWdzIGluIEFJWCBkaXNrIGxhYmVscyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiU3VwcG9ydCB1bnR1ayBtZW1idWF0IGZpbGUgc3lzdGVtcyAlcyBiZWx1bSBkaWltcGxlbWVudGFzaWthbi4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYnNkLmM6NTAxIGxpYnBhcnRlZC9sYWJlbHMvZGFzZC5jOjc1NQorIzogbGlicGFydGVkL2xhYmVscy9kb3MuYzoxOTc0IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6NzcwCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjE0NDggbGlicGFydGVkL2xhYmVscy9sb29wLmM6MjQ4CisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjE0MDggbGlicGFydGVkL2xhYmVscy9wYzk4LmM6NzU5CisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjEwNDEgbGlicGFydGVkL2xhYmVscy9zdW4uYzo3MDUKK21zZ2lkICJVbmFibGUgdG8gc2F0aXNmeSBhbGwgY29uc3RyYWludHMgb24gdGhlIHBhcnRpdGlvbi4iCittc2dzdHIgIlRpZGFrIGRhcGF0IG1lbWVudWhpIHNlbXVhIGNvbnN0cmFpbnRzIHBhZGEgcGFydGlzaS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYnNkLmM6NTI2Cittc2dpZCAiVW5hYmxlIHRvIGFsbG9jYXRlIGEgYnNkIGRpc2tsYWJlbCBzbG90LiIKK21zZ3N0ciAiVGlkYWsgZGFwYXQgbWVuZ2Fsb2thc2lrYW4gc2VidWFoIHNsb3QgdW50dWsgYnNkIGRpc2tsYWJlbC4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZGFzZC5jOjE2NgorIywgZnV6enkKK21zZ2lkICJVbmFibGUgdG8gZGV0ZXJtaW5lIHRoZSBibG9jayBzaXplIG9mIHRoaXMgZGFzZCIKK21zZ3N0ciAiVGlkYWsgZGFwYXQgbWVuZW50dWthbiB1a3VyYW4gZGFyaSAlcyAoJXMpLiIKKworIzogbGlicGFydGVkL2xhYmVscy9kYXNkLmM6NzgxCisjLCBmdXp6eQorbXNnaWQgIlVuYWJsZSB0byBhbGxvY2F0ZSBhIGRhc2QgZGlza2xhYmVsIHNsb3QiCittc2dzdHIgIlRpZGFrIGRhcGF0IG1lbmdhbG9rYXNpa2FuIHNlYnVhaCBzbG90IHVudHVrIGJzZCBkaXNrbGFiZWwuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rvcy5jOjgyNworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHBhcnRpdGlvbiB0YWJsZSBvbiAlcyAtLSB3cm9uZyBzaWduYXR1cmUgJXguIgorbXNnc3RyICJUYWJsZSBwYXJ0aXNpIHRpZGFrIHZhbGlkIHBhZGEgJXMgLS0gc2lnbmF0dXJlIHNhbGFoICV4LiIKKworIzogbGlicGFydGVkL2xhYmVscy9kb3MuYzo4NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBwYXJ0aXRpb24gdGFibGUgLSByZWN1cnNpdmUgcGFydGl0aW9uIG9uICVzLiIKK21zZ3N0ciAiVGFibGUgcGFydGlzaSB0aWRhayB2YWxpZCAtIHJla3Vyc2lmIHBhcnRpc2kgcGFkYSAlcy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZG9zLmM6MTMxOAorbXNnaWQgIkV4dGVuZGVkIHBhcnRpdGlvbnMgY2Fubm90IGJlIGhpZGRlbiBvbiBtc2RvcyBkaXNrIGxhYmVscy4iCittc2dzdHIgIlBhcnRpc2kgZXh0ZW5kZWQgdGlkYWsgZGFwYXQgZGlzZW1idW55aWthbiBwYWRhIG1zZG9zIGRpc2sgbGFiZWxzLiIKKworIzogbGlicGFydGVkL2xhYmVscy9kb3MuYzoxOTU4Cittc2dpZCAiUGFydGVkIGNhbid0IHJlc2l6ZSBwYXJ0aXRpb25zIG1hbmFnZWQgYnkgV2luZG93cyBEeW5hbWljIERpc2suIgorbXNnc3RyICIiCisiUGFydGVkIHRpZGFrIGRhcGF0IG1lbi1yZXNpemUgcGFydGlzaSB5YW5nIGRpYXR1ciBvbGVoIFdpbmRvd3MgRHluYW1pYyBEaXNrLiIKKworIzogbGlicGFydGVkL2xhYmVscy9kdmguYzoxOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIG5vIGV4dGVuZGVkIHBhcnRpdGlvbiAodm9sdW1lIGhlYWRlciBwYXJ0aXRpb24pLiIKK21zZ3N0ciAiJXMgdGlkYWsgbWVtaWxpa2kgcGFydGlzaSBleHRlbmRlZCAodm9sdW1lIGhlYWRlciBwYXJ0aXNpKS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6MzEzCittc2dpZCAiQ2hlY2tzdW0gaXMgd3JvbmcsIGluZGljYXRpbmcgdGhlIHBhcnRpdGlvbiB0YWJsZSBpcyBjb3JydXB0LiIKK21zZ3N0ciAiQ2hlY2tzdW0gc2FsYWgsIG1lbmdpbmRpa2FzaWthbiBiYWh3YSB0YWJlbCBwYXJ0aXNpIGNvcnJ1cHQuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjYxNgorbXNnaWQgIk9ubHkgcHJpbWFyeSBwYXJ0aXRpb25zIGNhbiBiZSByb290IHBhcnRpdGlvbnMuIgorbXNnc3RyICJIYW55YSBwcmltYXJ5IHBhcnRpc2kgeWFuZyBkYXBhdCBtZW5qYWRpIHBhcnRpc2kgcm9vdC4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6NjMwCittc2dpZCAiT25seSBwcmltYXJ5IHBhcnRpdGlvbnMgY2FuIGJlIHN3YXAgcGFydGl0aW9ucy4iCittc2dzdHIgIkhhbnlhIHByaW1hcnkgcGFydGlzaSB5YW5nIGRhcGF0IG1lbmphZGkgcGFydGlzaSBzd2FwLiIKKworIzogbGlicGFydGVkL2xhYmVscy9kdmguYzo2NDQKK21zZ2lkICJPbmx5IGxvZ2ljYWwgcGFydGl0aW9ucyBjYW4gYmUgYSBib290IGZpbGUuIgorbXNnc3RyICJIYW55YSBsb2dpY2FsIHBhcnRpc2kgeWFuZyBkYXBhdCBtZW5qYWRpIGJvb3QgZmlsZS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6NzIxCittc2dpZCAiT25seSBsb2dpY2FsIHBhcnRpdGlvbnMgKGJvb3QgZmlsZXMpIGhhdmUgYSBuYW1lLiIKK21zZ3N0ciAiSGFueWEgbG9naWNhbCBwYXJ0aXNpIChib290IGZpbGVzKSB5YW5nIG1lbWlsaWtpIG5hbWEuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjgxMgorbXNnaWQgIlRvbyBtYW55IHByaW1hcnkgcGFydGl0aW9ucyIKK21zZ3N0ciAiVGVybGFsdSBiYW55YWsgcHJpbWFyeSBwYXJ0aXNpIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBvcGVuIGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBzZWVrIGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyByZWFkIGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTEzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgd3JpdGUgZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIlcyBzZWxhbWEgcGVudWxpc2FuIHBhZGEgJXMiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIElPQ1RMIGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBBUEkgdmVyc2lvbiBtaXNtYXRjaFxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgVW5zdXBwb3J0ZWQgZGlzayB0eXBlXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBVbnN1cHBvcnRlZCBkaXNrIGZvcm1hdFxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEzMAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIERpc2sgaW4gdXNlXG4iCisiJXNcbiIKK21zZ3N0ciAiRGlzayAlczogJXNcbiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgQ29uZmlnIGZpbGUgc3ludGF4IGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBWb2x1bWUgbGFiZWwgaXMgY29ycnVwdGVkLlxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjE0MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgYSBkYXRhIHNldCBuYW1lIGlzIGNvcnJ1cHRlZC5cbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHNwYWNlIGFsbG9jYXRpb25cbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIGRldmljZSB2ZXJpZmljYXRpb24gZmFpbGVkXG4iCisiVGhlIHNwZWNpZmllZCBkZXZpY2UgaXMgbm90IGEgdmFsaWQgREFTRCBkZXZpY2VcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBGYXRhbCBlcnJvclxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzo0NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIGNvbnRhaW5zIEdQVCBzaWduYXR1cmVzLCBpbmRpY2F0aW5nIHRoYXQgaXQgaGFzIGEgR1BUIHRhYmxlLiAgSG93ZXZlciwgaXQgIgorImRvZXMgbm90IGhhdmUgYSB2YWxpZCBmYWtlIG1zZG9zIHBhcnRpdGlvbiB0YWJsZSwgYXMgaXQgc2hvdWxkLiAgUGVyaGFwcyBpdCAiCisid2FzIGNvcnJ1cHRlZCAtLSBwb3NzaWJseSBieSBhIHByb2dyYW0gdGhhdCBkb2Vzbid0IHVuZGVyc3RhbmQgR1BUIHBhcnRpdGlvbiAiCisidGFibGVzLiAgT3IgcGVyaGFwcyB5b3UgZGVsZXRlZCB0aGUgR1BUIHRhYmxlLCBhbmQgYXJlIG5vdyB1c2luZyBhbiBtc2RvcyAiCisicGFydGl0aW9uIHRhYmxlLiAgSXMgdGhpcyBhIEdQVCBwYXJ0aXRpb24gdGFibGU/IgorbXNnc3RyICIiCisiJXMgYmVyaXNpIEdQVCBzaWduYXR1cmVzLCBtZW51bmp1a2thbiBiYWh3YSBpbmkgYWRhbGFoIHRhYmVsIEdQVC4gQWthbiAiCisidGV0YXBpLCBpbmkgdGlkYWsgbWVtaWxpa2kgdmFsaWQgZmFrZSBtc2RvcyB0YWJlbCBwYXJ0aXNpLCBzZXBlcnRpICIKKyJzZWhhcnVzbnlhLiBNdW5na2luIGluaSBzdWRhaCB0ZXJrb3J1cHNpIC0tIG11bmdraW4gb2xlaCBwcm9ncmFtIHlhbmcgdGlkYWsgIgorIm1lbmdlcnRpIHRhYmVsIHBhcnRpc2kgR1BULiBBdGF1IG11bmdraW4gYW5kYSBtZW5naGFwdXMgdGFiZWwgR1BULCBkYW4gIgorInNla2FyYW5nIG1lbmdndW5ha2FuIHNlYnVhaCB0YWJlbCBwYXJ0aXNpIG1zZG9zLiBBcGFrYWggaW5pIHNlYnVhaCB0YWJlbCAiCisicGFydGlzaSBHUFQ/IgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjY0OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvcm1hdCBvZiB0aGUgR1BUIHBhcnRpdGlvbiB0YWJsZSBpcyB2ZXJzaW9uICV4LCB3aGljaCBpcyBuZXdlciB0aGFuICIKKyJ3aGF0IFBhcnRlZCBjYW4gcmVjb2duaXNlLiAgUGxlYXNlIHRlbGwgdXMhICBidWctcGFydGVkQGdudS5vcmciCittc2dzdHIgIiIKKyJGb3JtYXQgZGFyaSB0YWJlbCBwYXJ0aXNpIEdQVCBhZGFsYWggZGFyaSB2ZXJzaSAleCwgZGltYW5hIGluaSBsZWJpaCBiYXJ1ICIKKyJkYXJpIGZvcm1hdCB5YW5nIFBhcnRlZCBkYXBhdCBtZW5nZW5hbG55YS4gVG9sb25nIGJlcml0YWh1IGthbWkhIGJ1Zy0iCisicGFydGVkQGdudS5vcmciCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6Njk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3QgYWxsIG9mIHRoZSBzcGFjZSBhdmFpbGFibGUgdG8gJXMgYXBwZWFycyB0byBiZSB1c2VkLCB5b3UgY2FuIGZpeCB0aGUgR1BUICIKKyJ0byB1c2UgYWxsIG9mIHRoZSBzcGFjZSAoYW4gZXh0cmEgJWxsdSBibG9ja3MpIG9yIGNvbnRpbnVlIHdpdGggdGhlIGN1cnJlbnQgIgorInNldHRpbmc/ICIKK21zZ3N0ciAiIgorIlRpZGFrIHNlbXVhIGRhcmkgcnVhbmcga29zb25nIHlhbmcgdGVyc2VkaWEgZGkgJXMgZGFwYXQgZGlndW5ha2FuLCBhbmRhICIKKyJkYXBhdCBtZW1iZXR1bGthbiBHUFQgdW50dWsgbWVuZ2d1bmFrYW4gc2VtdWFyIHJ1YW5nIGtvc29uZyB5YW5nIHRlcnNlZGlhICIKKyIoa29zb25nICVsbHUgYmxvY2tzKSBhdGF1IG1lbGFuanV0a2FuIGRlbmdhbiBrb25maWd1cmFzaSBzYWF0IGluaT8iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6ODI3Cittc2dpZCAiIgorIlRoZSBiYWNrdXAgR1BUIHRhYmxlIGlzIG5vdCBhdCB0aGUgZW5kIG9mIHRoZSBkaXNrLCBhcyBpdCBzaG91bGQgYmUuICBUaGlzICIKKyJtaWdodCBtZWFuIHRoYXQgYW5vdGhlciBvcGVyYXRpbmcgc3lzdGVtIGJlbGlldmVzIHRoZSBkaXNrIGlzIHNtYWxsZXIuICBGaXgsICIKKyJieSBtb3ZpbmcgdGhlIGJhY2t1cCB0byB0aGUgZW5kIChhbmQgcmVtb3ZpbmcgdGhlIG9sZCBiYWNrdXApPyIKK21zZ3N0ciAiIgorIlRhYmVsIEdQVCBiYWNrdXAgdGlkYWsgYWRhIHBhZGEgYWtoaXIgZGFyaSBkaXNrLCBzZXBlcnRpIHNlaGFydXNueWEgYWRhICIKKyJkaXNhbmEuIEluaSBtdW5na2luIGJlcmFydGkgc2lzdGVtIG9wZXJhc2kgbGFpbiBwZXJjYXlhIGJhaHdhIHVrdXJhbiBkaXNrICIKKyJsZWJpaCBrZWNpbC4gQmV0dWxrYW4sIGRlbmdhbiBtZW1pbmRhaGthbiB0YWJlbCBiYWNrdXAga2UgYWtoaXIgZGFyaSBkaXNrICIKKyIoZGFuIG1lbmdoYXB1cyBiYWNrdXAgeWFuZyBsYW1hKT8iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6ODYyCittc2dpZCAiIgorIlRoZSBwcmltYXJ5IEdQVCB0YWJsZSBpcyBjb3JydXB0LCBidXQgdGhlIGJhY2t1cCBhcHBlYXJzIE9LLCBzbyB0aGF0IHdpbGwgYmUgIgorInVzZWQuIgorbXNnc3RyICIiCisiVGFiZWwgR1BUIHByaW1lciB0ZWxhaCB0ZXJrb3J1cHNpLCB0ZXRhcGkgYmFja3VwLW55YSBrZWxpaGF0YW4gQkFJSywgamFkaSAiCisiYmFja3VwIHRlcnNlYnV0IHlhbmcgYWthbiBkaWd1bmFrYW4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6ODcwCittc2dpZCAiIgorIkJvdGggdGhlIHByaW1hcnkgYW5kIGJhY2t1cCBHUFQgdGFibGVzIGFyZSBjb3JydXB0LiAgVHJ5IG1ha2luZyBhIGZyZXNoICIKKyJ0YWJsZSwgYW5kIHVzaW5nIFBhcnRlZCdzIHJlc2N1ZSBmZWF0dXJlIHRvIHJlY292ZXIgcGFydGl0aW9ucy4iCittc2dzdHIgIiIKKyJLZWR1YSB0YWJlbCBHUFQgcHJpbWVyIGRhbiBiYWNrdXAgc3VkYWggdGVya29ydXBzaS4gQ29iYSB1bnR1ayBtZW1idWF0ICIKKyJzZWJ1YWggdGFiZWwgeWFuZyBiYXJ1LCBkYW4gZ3VuYWthbiBQYXJ0ZWQncyByZXNjdWUgZmVhdHVyZSB1bnR1ayBtZXJlY292ZXIgIgorInBhcnRpc2kuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjE4MQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHNpZ25hdHVyZSAleCBmb3IgTWFjIGRpc2sgbGFiZWxzLiIKK21zZ3N0ciAiU2lnbmF0dXJlIHRpZGFrIHZhbGlkICV4IHVudHVrIGRpc2tsYWJlbHMgTWFjLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoyMjYKK21zZ2lkICJQYXJ0aXRpb24gbWFwIGhhcyBubyBwYXJ0aXRpb24gbWFwIGVudHJ5ISIKK21zZ3N0ciAiTWFwIHBhcnRpc2kgdGlkYWsgbWVtaWxpa2kgbWFzdWthbiB1bnR1ayBtYXAgcGFydGlzaSEiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIHRvbyBzbWFsbCBmb3IgYSBNYWMgZGlzayBsYWJlbCEiCittc2dzdHIgIiVzIHRlcmxhbHUga2VjaWwgdW50dWsgc2VidWFoIGRpc2tsYWJlbCBNYWMhIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjUzMgorIywgYy1mb3JtYXQKK21zZ2lkICJQYXJ0aXRpb24gJWQgaGFzIGFuIGludmFsaWQgc2lnbmF0dXJlICV4LiIKK21zZ3N0ciAiUGFydGlzaSAlZCBtZW1pbGlraSBzaWduYXR1cmUgeWFuZyB0aWRhayB2YWxpZCAleC4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIlBhcnRpdGlvbiAlZCBoYXMgYW4gaW52YWxpZCBsZW5ndGggb2YgMCBieXRlcyEiCittc2dzdHIgIlBhcnRpc2kgJWQgbWVtaWxpa2kgcGFuamFuZyAwIGJ5dGVzIHlhbmcgdGlkYWsgdmFsaWQhIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjU4MAorbXNnaWQgIlRoZSBkYXRhIHJlZ2lvbiBkb2Vzbid0IHN0YXJ0IGF0IHRoZSBzdGFydCBvZiB0aGUgcGFydGl0aW9uLiIKK21zZ3N0ciAiRGFlcmFoIGRhdGEgdGlkYWsgZGltdWxhaSBwYWRhIGF3YWwgZGFyaSBwYXJ0aXNpLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo1OTcKK21zZ2lkICJUaGUgYm9vdCByZWdpb24gZG9lc24ndCBzdGFydCBhdCB0aGUgc3RhcnQgb2YgdGhlIHBhcnRpdGlvbi4iCittc2dzdHIgIkRhZXJhaCBib290IHRpZGFrIGRpbXVsYWkgcGFkYSBhd2FsIGRhcmkgcGFydGlzaS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NjExCittc2dpZCAiVGhlIHBhcnRpdGlvbidzIGJvb3QgcmVnaW9uIGRvZXNuJ3Qgb2NjdXB5IHRoZSBlbnRpcmUgcGFydGl0aW9uLiIKK21zZ3N0ciAiRGFlcmFoIGJvb3QgcGFydGlzaSB0aWRhayBtZW5nZ3VuYWthbiBzZWx1cnVoIHBhcnRpc2kuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjYyMgorbXNnaWQgIlRoZSBwYXJ0aXRpb24ncyBkYXRhIHJlZ2lvbiBkb2Vzbid0IG9jY3VweSB0aGUgZW50aXJlIHBhcnRpdGlvbi4iCittc2dzdHIgIkRhZXJhaCBkYXRhIHBhcnRpc2kgdGlkYWsgbWVuZ2d1bmFrYW4gc2VsdXJ1aCBwYXJ0aXNpLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo2NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldlaXJkIGJsb2NrIHNpemUgb24gZGV2aWNlIGRlc2NyaXB0b3I6ICVkIGJ5dGVzIGlzIG5vdCBkaXZpc2libGUgYnkgNTEyLiIKK21zZ3N0ciAiIgorIlVrdXJhbiBibG9jayBhbmVoIHBhZGEgZGVza3JpcHNpIHBlcmFuZ2thdDogJWQgYnl0ZXMgdGlkYWsgdGVyYmFnaSBvbGVoIDUxMi4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6Njg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZHJpdmVyIGRlc2NyaXB0b3Igc2F5cyB0aGUgcGh5c2ljYWwgYmxvY2sgc2l6ZSBpcyAlZCBieXRlcywgYnV0IExpbnV4ICIKKyJzYXlzIGl0IGlzICVkIGJ5dGVzLiIKK21zZ3N0ciAiIgorImRyaXZlciBkZXNjcmlwdG9yIG1lbmdhdGFrYW4gYmFod2EgdWt1cmFuIHBoeXNpY2FsIGJsb2NrIGFkYWxhaCAlZCBieXRlcywgIgorInRldGFwaSBMaW51eCBtZW5nYXRha2FuIHVrdXJhbm55YSAlZCBieXRlcy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NzM2Cittc2dpZCAiTm8gdmFsaWQgcGFydGl0aW9uIG1hcCBmb3VuZC4iCittc2dzdHIgIlRpZGFrIGRpdGVtdWthbiBtYXAgcGFydGlzaSB5YW5nIHZhbGlkLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo3OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvbmZsaWN0aW5nIHBhcnRpdGlvbiBtYXAgZW50cnkgc2l6ZXMhICBFbnRyeSAxIHNheXMgaXQgaXMgJWQsIGJ1dCBlbnRyeSAlZCAiCisic2F5cyBpdCBpcyAlZCEiCittc2dzdHIgIiIKKyJLb25mbGlrIG1hc3VrYW4gdWt1cmFuIHBldGEgcGFydGlzaSEgTWFzdWthbiAxIG1lbmdhdGFrYW4gJWQsIHRldGFwaSAiCisibWFzdWthbiAgJWQgbWVuZ2F0YWthbiAlZCEiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6ODIyCittc2dpZCAiV2VpcmQhICBUaGVyZSBhcmUgMiBwYXJ0aXRpb25zIG1hcCBlbnRyaWVzISIKK21zZ3N0ciAiQW5laCEgIEFkYSAyIG1hc3VrYW4gbWFwIHBhcnRpc2khIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjEzNDcKK21zZ2lkICIiCisiQ2hhbmdpbmcgdGhlIG5hbWUgb2YgYSByb290IG9yIHN3YXAgcGFydGl0aW9uIHdpbGwgcHJldmVudCBMaW51eCBmcm9tICIKKyJyZWNvZ25pc2luZyBpdCBhcyBzdWNoLiIKK21zZ3N0ciAiIgorIk1lbmd1YmFoIG5hbWEgZGFyaSByb290IGF0YXUgcGFydGlzaSBzd2FwIGFrYW4gbWVtYnVhdCBMaW51eCB0aWRhayBkYXBhdCAiCisibWVuZ2VuYWxpbnlhLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoxNDQzCittc2dpZCAiQ2FuJ3QgYWRkIGFub3RoZXIgcGFydGl0aW9uIC0tIHRoZSBwYXJ0aXRpb24gbWFwIGlzIHRvbyBzbWFsbCEiCittc2dzdHIgIlRpZGFrIGRhcGF0IGxhZ2kgbWVuYW1iYWggcGFydGlzaSAtLSBwZXRhIHBhcnRpc2kgdGVybGFsdSBrZWNpbCEiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcGM5OC5jOjM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHBhcnRpdGlvbiB0YWJsZSBvbiAlcy4iCittc2dzdHIgIlRhYmVsIHBhcnRpc2kgdGlkYWsgdmFsaWQgcGFkYSAlcy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcGM5OC5jOjQwNiBsaWJwYXJ0ZWQvbGFiZWxzL3BjOTguYzo0ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBhcnRpdGlvbiAlZCBpc24ndCBhbGlnbmVkIHRvIGN5bGluZGVyIGJvdW5kYXJpZXMuICBUaGlzIGlzIHN0aWxsICIKKyJ1bnN1cHBvcnRlZC4iCittc2dzdHIgIiIKKyJQYXJ0aXNpICVkIHRpZGFrIGRpIGFsaWduIGtlIGN5bGluZGVyIGJvdW5kYXJpZXMuIEluaSB0ZXRhcCB0aWRhayBkaXN1cHBvcnQiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcGM5OC5jOjc5MQorbXNnaWQgIkNhbid0IGFkZCBhbm90aGVyIHBhcnRpdGlvbi4iCittc2dzdHIgIlRpZGFrIGRhcGF0IG1lbmFtYmFoIHBhcnRpc2kgeWFuZyBsYWluLiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzoxNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBCYWQgY2hlY2tzdW0gb24gYmxvY2sgJWxsdSBvZiB0eXBlICVzLiIKK21zZ3N0ciAiJXMgOiBDaGVja3N1bSBwYWRhIGJsb2NrICVsbHUgZGVuZ2FuIHRpcGUgJXMgdGlkYWsgYmFpay4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6NDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRGlkbid0IGZpbmQgcmRiIGJsb2NrLCBzaG91bGQgbmV2ZXIgaGFwcGVuLiIKK21zZ3N0ciAiJXMgOiBUaWRhayBtZW5lbXVrYW4gcmRiIGJsb2NrLCBzZWhhcnVzbnlhIHRpZGFrIHBlcm5haCB0ZXJqYWRpLiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo1ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBMb29wIGRldGVjdGVkIGF0IGJsb2NrICVkLiIKK21zZ3N0ciAiJXMgOiBMb29wIHRlcmRldGVrc2kgcGFkYSBibG9jayAlZC4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6NjAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogVGhlICVzIGxpc3Qgc2VlbXMgYmFkIGF0IGJsb2NrICVzLiIKK21zZ3N0ciAiJXMgOiBMaXN0ICVzIGtlbGloYXRhbm55YSB0aWRhayBiYWlrIHBhZGEgYmxvY2sgJXMuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjY4OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBsaXN0IGJhZCBibG9ja3MuIgorbXNnc3RyICIlcyA6IEdhZ2FsIHVudHVrIG1lbi1saXN0IGJhZCBibG9ja3MuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjY5NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBsaXN0IHBhcnRpdGlvbiBibG9ja3MuIgorbXNnc3RyICIlcyA6IEdhZ2FsIHVudHVrIG1lbi1saXN0IGJsb2NrIHBhcnRpc2kuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjcwNQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBsaXN0IGZpbGUgc3lzdGVtIGJsb2Nrcy4iCittc2dzdHIgIiVzIDogR2FnYWwgdW50dWsgbWVuLWxpc3QgZmlsZSBzeXN0ZW0gYmxvY2tzLiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo3MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gbGlzdCBib290IGJsb2Nrcy4iCittc2dzdHIgIiVzIDogR2FnYWwgdW50dWsgbWVuLWxpc3QgYm9vdCBibG9ja3MuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjc0MAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gd3JpdGUgcGFydGl0aW9uIGJsb2NrIGF0ICVkLiIKK21zZ3N0ciAiR2FnYWwgdW50dWsgbWVudWxpcyBibG9jayBwYXJ0aXNpIHBhZGEgJWQuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjEwNjkKK21zZ2lkICJVbmFibGUgdG8gYWxsb2NhdGUgYSBwYXJ0aXRpb24gbnVtYmVyLiIKK21zZ3N0ciAiVGlkYWsgZGFwYXQgbWVuZ2Fsb2thc2lrYW4gc2VidWFoIG5vbW9yIHBhcnRpc2kuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3N1bi5jOjE0NQorbXNnaWQgIkNvcnJ1cHRlZCBTdW4gZGlzayBsYWJlbCBkZXRlY3RlZC4iCittc2dzdHIgIlN1biBkaXNrIGxhYmVsIHRlcmRldGVrc2kgdGVya29ydXBzaS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6MjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZGlzayBDSFMgZ2VvbWV0cnkgKCVkLCVkLCVkKSByZXBvcnRlZCBieSB0aGUgb3BlcmF0aW5nIHN5c3RlbSBkb2VzIG5vdCAiCisibWF0Y2ggdGhlIGdlb21ldHJ5IHN0b3JlZCBvbiB0aGUgZGlzayBsYWJlbCAoJWQsJWQsJWQpLiIKK21zZ3N0ciAiIgorIkdlb21ldHJpIENIUyBkYXJpIGRpc2sgKCVkLCVkLCVkKSBkaWxhcG9ya2FuIG9sZWggc2lzdGVtIG9wZXJhc2kgdGlkYWsgY29jb2sgIgorImRlbmdhbiBnZW9tZXRyaSB5YW5nIGRpc2ltcGFuIHBhZGEgZGlzayBsYWJlbCAoJWQsJWQsJWQpLiIKKworIzogbGlicGFydGVkL2xhYmVscy9zdW4uYzoyODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGRpc2sgbGFiZWwgZGVzY3JpYmVzIGEgZGlzayBiaWdnZXIgdGhhbiAlcy4iCittc2dzdHIgIkRpc2sgbGFiZWwgbWVuZGVza3JpcHNpa2FuIGRpc2sgbGViaWggYmVzYXIgZGFyaSAlcy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6NDQyCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBkaXNrIGhhcyAlZCBjeWxpbmRlcnMsIHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbWF4aW11bSBvZiA2NTUzNi4iCittc2dzdHIgIiIKKyJEaXNrIG1lbWlsaWtpICVkIGN5bGluZGVycywgZGltYW5hIGluaSBsZWJpaCBiZXNhciBkYXJpIG1ha3NpbXVtIDY1NTM2LiIKKworIzogbGlicGFydGVkL2xhYmVscy9zdW4uYzo3MzcKK21zZ2lkICIiCisiVGhlIFdob2xlIERpc2sgcGFydGl0aW9uIGlzIHRoZSBvbmx5IGF2YWlsYWJsZSBvbmUgbGVmdC4gIEdlbmVyYWxseSwgaXQgaXMgIgorIm5vdCBhIGdvb2QgaWRlYSB0byBvdmVyd3JpdGUgdGhpcyBwYXJ0aXRpb24gd2l0aCBhIHJlYWwgb25lLiAgU29sYXJpcyBtYXkgIgorIm5vdCBiZSBhYmxlIHRvIGJvb3Qgd2l0aG91dCBpdCwgYW5kIFNJTE8gKHRoZSBzcGFyYyBib290IGxvYWRlcikgYXBwcmVjaWF0ZXMgIgorIml0IGFzIHdlbGwuIgorbXNnc3RyICIiCisiWWFuZyB0ZXJzaXNhIGhhbnlhIHNlbHVydWggcGFydGlzaSBEaXNrLiBVbXVtbnlhLCBpbmkgYnVrYW4gaWRlIHlhbmcgYmFpayAiCisidW50dWsgbWVudWxpcyBrZW1iYWxpIHBhcnRpc2kgaW5pIGRlbmdhbiB5YW5nIG55YXRhLiBTb2xhcmlzIG11bmdraW4gdGlkYWsgIgorImRhcGF0IGRpLWJvb3QgdGFucGFueWEsIGRhbiBTSUxPIChib290IGxvYWRlciB1bnR1ayBTUEFSQykgbWVuZ2hhcmdhaW55YSAiCisiZGVuZ2FuIGJhaWsuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3N1bi5jOjc1MgorbXNnaWQgIlN1biBkaXNrIGxhYmVsIGlzIGZ1bGwuIgorbXNnc3RyICJTdW4gZGlzayBsYWJlbCBzdWRhaCBwZW51aCIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6MTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBvcGVuaW5nIGRldmljZSAnJXMnIGZhaWxlZC5cbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjE2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgc2Vla2luZyBkZXZpY2UgJyVzJyBmYWlsZWQuXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzoxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHdyaXRpbmcgdG8gZGV2aWNlICclcycgZmFpbGVkLFxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6MTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyByZWFkaW5nIGZyb20gZGV2aWNlICclcycgZmFpbGVkLlxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6MTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhdGFsIGVycm9yXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDE4Cittc2dpZCAiQ291bGQgbm90IHJlYWQgVlRPQyBsYWJlbHMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQyNAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIFZUT0MgRk1UMSBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0MzEKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBWVE9DIEZNVDQgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDM4Cittc2dpZCAiQ291bGQgbm90IHJlYWQgVlRPQyBGTVQ1IERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQ0NQorbXNnaWQgIkNvdWxkIG5vdCByZWFkIFZUT0MgRk1UNyBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0NjIKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgVlRPQyBsYWJlbHMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQ2OAorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBWVE9DIEZNVDEgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDc1Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIFZUT0MgRk1UNCBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0ODIKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgVlRPQyBGTVQ1IERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQ4OQorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBWVE9DIEZNVDcgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xpYnBhcnRlZC5jOjI5NiBsaWJwYXJ0ZWQvbGlicGFydGVkLmM6MzE2Cittc2dpZCAiT3V0IG9mIG1lbW9yeS4iCittc2dzdHIgIktlaGFiaXNhbiBtZW1vcmkiCisKKyM6IGxpYnBhcnRlZC91bml0LmM6MTM5Cittc2dpZCAiQ2Fubm90IGdldCB1bml0IHNpemUgZm9yIHNwZWNpYWwgdW5pdCAnQ09NUEFDVCcuIgorbXNnc3RyICJUaWRhayBkYXBhdCBtZW5kYXBhdGthbiB1a3VyYW4gdW5pdCB1bnR1ayBzcGVzaWFsIHVuaXQgJ0NPTVBBVCcuIgorCisjOiBsaWJwYXJ0ZWQvdW5pdC5jOjM4NgorIywgYy1mb3JtYXQKK21zZ2lkICJcIiVzXCIgaGFzIGludmFsaWQgc3ludGF4IGZvciBsb2NhdGlvbnMuIgorbXNnc3RyICJcIiVzXCIgbWVtaWxpa2kgc3ludGF4IHlhbmcgdGlkYWsgdmFsaWQgdW50dWsgbG9rYXNpLiIKKworIzogbGlicGFydGVkL3VuaXQuYzozOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIG1heGltdW0gaGVhZCB2YWx1ZSBpcyAlZC4iCittc2dzdHIgIk5pbGFpIGhlYWQgbWFrc2ltdW0gYWRhbGFoICVkLiIKKworIzogbGlicGFydGVkL3VuaXQuYzo0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIG1heGltdW0gc2VjdG9yIHZhbHVlIGlzICVkLiIKK21zZ3N0ciAiTmlsYWkgbWFrc2ltdW0gZGFyaSBzZWt0b3IgYWRhbGFoICVkLiIKKworIzogbGlicGFydGVkL3VuaXQuYzo0MTMgbGlicGFydGVkL3VuaXQuYzo1NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGxvY2F0aW9uICVzIGlzIG91dHNpZGUgb2YgdGhlIGRldmljZSAlcy4iCittc2dzdHIgIkxva2FzaSAlcyB0ZXJsZXRhayBkaWx1YXIgZGFyaSBwZXJhbmdrYXQgJXMuIgorCisjOiBsaWJwYXJ0ZWQvdW5pdC5jOjUyNworbXNnaWQgIkludmFsaWQgbnVtYmVyLiIKK21zZ3N0ciAibm9tb3IgdGlkYWsgdmFsaWQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYWZmcy5jOjYzIGxpYnBhcnRlZC9mcy9hbWlnYS9hcGZzLmM6NTYKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hc2ZzLmM6NzAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGFsbG9jYXRlIHBhcnRpdGlvbiBibG9ja1xuIgorbXNnc3RyICIlcyA6IEdhZ2FsIHVudHVrIG1lbi1saXN0IGJsb2NrIHBhcnRpc2kuIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYWZmcy5jOjc4IGxpYnBhcnRlZC9mcy9hbWlnYS9hcGZzLmM6NzAKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hc2ZzLmM6ODYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGFsbG9jYXRlIGJsb2NrXG4iCittc2dzdHIgIiVzIDogR2FnYWwgdW50dWsgbWVuLWxpc3QgYm9vdCBibG9ja3MuIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYWZmcy5jOjgzIGxpYnBhcnRlZC9mcy9hbWlnYS9hcGZzLmM6NzUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogQ291bGRuJ3QgcmVhZCBib290IGJsb2NrICVsbHVcbiIKK21zZ3N0ciAiJXMgOiBMb29wIHRlcmRldGVrc2kgcGFkYSBibG9jayAlZC4iCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hZmZzLmM6OTkgbGlicGFydGVkL2ZzL2FtaWdhL2FwZnMuYzo4NgorIzogbGlicGFydGVkL2ZzL2FtaWdhL2FzZnMuYzo5MiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXNmcy5jOjEwNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBDb3VsZG4ndCByZWFkIHJvb3QgYmxvY2sgJWxsdVxuIgorbXNnc3RyICIlcyA6IExvb3AgdGVyZGV0ZWtzaSBwYWRhIGJsb2NrICVkLiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6NzIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGFsbG9jYXRlIGlkIGxpc3QgZWxlbWVudFxuIgorbXNnc3RyICIlcyA6IEdhZ2FsIHVudHVrIG1lbi1saXN0IGJhZCBibG9ja3MuIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBDb3VsZG4ndCByZWFkIGJsb2NrICVsbHVcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzoyMDIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogQmFkIGNoZWNrc3VtIG9uIGJsb2NrICVsbHUgb2YgdHlwZSAlc1xuIgorbXNnc3RyICIlcyA6IENoZWNrc3VtIHBhZGEgYmxvY2sgJWxsdSBkZW5nYW4gdGlwZSAlcyB0aWRhayBiYWlrLiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6MjEyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyA6IENvdWxkbid0IHdyaXRlIGJsb2NrICVkXG4iCittc2dzdHIgIiVzIDogTG9vcCB0ZXJkZXRla3NpIHBhZGEgYmxvY2sgJWQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzoyNzgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGFsbG9jYXRlIGRpc2tfc3BlY2lmaWMgcmRiIGJsb2NrXG4iCittc2dzdHIgIiVzIDogR2FnYWwgdW50dWsgbWVuLWxpc3QgYmFkIGJsb2Nrcy4iCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jOjI4OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBEaWRuJ3QgZmluZCByZGIgYmxvY2ssIHNob3VsZCBuZXZlciBoYXBwZW5cbiIKK21zZ3N0ciAiJXMgOiBUaWRhayBtZW5lbXVrYW4gcmRiIGJsb2NrLCBzZWhhcnVzbnlhIHRpZGFrIHBlcm5haCB0ZXJqYWRpLiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6MzE4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byByZWFkIHBhcnRpdGlvbiBibG9jayAlbGx1XG4iCittc2dzdHIgIiVzIDogR2FnYWwgdW50dWsgbWVuLWxpc3QgYmxvY2sgcGFydGlzaS4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo4NyBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6MTEyCittc2dpZCAiSW5jb25zaXN0ZW50IGdyb3VwIGRlc2NyaXB0b3JzISIKK21zZ3N0ciAiZ3JvdXAgZGVzY3JpcHRvcnMgdGlkYWsga29uc2lzdGVudCEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo5MSBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6MTE2Cittc2dpZCAiRmlsZSBzeXN0ZW0gZnVsbCEiCittc2dzdHIgIkZpbGUgc3lzdGVtIGZ1bGwhIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6Njg2Cittc2dpZCAiSW52YWxpZCBzdXBlcmJsb2NrLiAgQXJlIHlvdSBzdXJlIHRoaXMgaXMgYW4gZXh0MiBmaWxlIHN5c3RlbT8iCittc2dzdHIgIiIKKyJTdXBlcmJsb2NrIHRpZGFrIHZhbGlkLiBBcGFrYWggYW5kYSB5YWtpbiBpbmkgbWVydXBha2FuIHNlYnVhaCBleHQyIGZpbGUgIgorInN5c3RlbT8iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo3MDAgbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo2NTgKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgZXJyb3JzISAgWW91IHNob3VsZCBydW4gZTJmc2NrLiIKK21zZ3N0ciAiRmlsZSBzeXN0ZW0gbWVtaWxpa2kgZXJyb3JzISBBbmRhIHNlaGFydXNueWEgbWVuamFsYW5rYW4gZTJmc2NrLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjcxMQorbXNnaWQgIiIKKyJGaWxlIHN5c3RlbSB3YXMgbm90IGNsZWFubHkgdW5tb3VudGVkISAgWW91IHNob3VsZCBydW4gZTJmc2NrLiAgTW9kaWZ5aW5nIGFuICIKKyJ1bmNsZWFuIGZpbGUgc3lzdGVtIGNvdWxkIGNhdXNlIHNldmVyZSBjb3JydXB0aW9uLiIKK21zZ3N0ciAiIgorIkZpbGUgc3lzdGVtIHRpZGFrIGRpLXVubW91bnQgc2VjYXJhIGJlcnNpaCEgQW5kYSBzZWhhcnVzbnlhIG1lbmphbGFua2FuICIKKyJlMmZzY2suIE1lbW9kaWZpa2FzaSBzZWJ1YWggZmlsZSBzeXN0ZW0geWFuZyB0aWRhayBiZXJzaWggZGFwYXQgbWVueWViYWJrYW4gIgorImZpbGUgc3lzdGVtIHRlcnNlYnV0IHRlcmtvcnVwc2kuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6NzMxCittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGluY29tcGF0aWJsZSBmZWF0dXJlIGVuYWJsZWQuIgorbXNnc3RyICJGaWxlIHN5c3RlbSBtZW1pbGlraSBzZWJ1YWggZmVhdHVyZSBha3RpZiB5YW5nIHRpZGFrIGtvbXBhdGliZWwuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6NzQyCittc2dpZCAiRXJyb3IgYWxsb2NhdGluZyBidWZmZXIgY2FjaGUuIgorbXNnc3RyICJFcnJvciBtZW5nYWxva2FzaWthbiBidWZmZXIgY2FjaGUuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2lub2RlX3JlbG9jYXRvci5jOjExNAorbXNnaWQgIiIKKyJGb3VuZCBhbiBpbm9kZSB3aXRoIGEgaW5jb3JyZWN0IGxpbmsgY291bnQuICBCZXR0ZXIgZ28gcnVuIGUyZnNjayBmaXJzdCEiCittc2dzdHIgIiIKKyJEaXRlbXVrYW4gc2VidWFoIGlub2RlIGRlbmdhbiBsaW5rIGNvdW50IHlhbmcgdGlkYWsgYmVuYXIuIExlYmloIGJhaWsgIgorIm1lbmphbGFua2FuIGUyZnNjayB0ZXJsZWJpaCBkYWh1bHUhIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2lub2RlX3JlbG9jYXRvci5jOjQ4NworbXNnaWQgIk5vdCBlbm91Z2ggZnJlZSBpbm9kZXMhIgorbXNnc3RyICJUaWRhayBjdWt1cCBmcmVlIGlub2RlcyEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6MjIzCittc2dpZCAiRmlsZSBzeXN0ZW0gaXMgdG9vIGZ1bGwgdG8gcmVtb3ZlIGEgZ3JvdXAhIgorbXNnc3RyICJGaWxlIHN5c3RlbSB0ZXJsYWx1IHBlbnVoIHVudHVrIG1lbmdoYXB1cyBzZWJ1YWggZ3JvdXAhIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjIzMgorbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyB0b28gbWFueSBhbGxvY2F0ZWQgaW5vZGVzIHRvIHJlbW92ZSBhIGdyb3VwISIKK21zZ3N0ciAiIgorIkZpbGUgc3lzdGVtIG1lbWlsaWtpIHRlcmxhbHUgYmFueWFrIGlub2RlIHlhbmcgc3VkYWggZGlhbG9rYXNpa2FuIHVudHVrICIKKyJtZW5naGFwdXMgc2VidWFoIGdyb3VwISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo0OTEKK21zZ2lkICJhZGRpbmcgZ3JvdXBzIgorbXNnc3RyICJtZW5hbWJhaGthbiBncm91cHMiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgZmlsZSBzeXN0ZW0gaXMgdG9vIGZ1bGwgdG8gcmVzaXplIGl0IHRvICVpIGJsb2Nrcy4gIFNvcnJ5LiIKK21zZ3N0ciAiIgorIkZpbGUgc3lzdGVtIGFuZGEgdGVybGFsdSBwZW51aCB1bnR1ayBtZW4tcmVzaXplLW55YSBtZW5qYWRpICVpIGJsb2Nrcy4gTWFhZi4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGZpbGUgc3lzdGVtIGhhcyB0b28gbWFueSBvY2N1cGllZCBpbm9kZXMgdG8gcmVzaXplIGl0IHRvICVpIGJsb2Nrcy4gICIKKyJTb3JyeS4iCittc2dzdHIgIiIKKyJGaWxlIHN5c3RlbSBhbmRhIG1lbWlsaWtpIHRlcmxhbHUgYmFueWFrIGlub2RlIHlhbmcgdGVyaXNpIHVudHVrIGRpcmVzaXplICIKKyJtZW5qYWRpICVpIGJsb2NrLiBNYWFmIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjY2NgorbXNnaWQgIkZpbGUgc3lzdGVtIHdhcyBub3QgY2xlYW5seSB1bm1vdW50ZWQhICBZb3Ugc2hvdWxkIHJ1biBlMmZzY2suIgorbXNnc3RyICIiCisiRmlsZSBzeXN0ZW0gdGlkYWsgZGktdW5tb3VudCBzZWNhcmEgYmVyc2loISBBbmRhIHNlaGFydXNueWEgbWVuamFsYW5rYW4gIgorImUyZnNjay4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6Njc1Cittc2dpZCAiIgorIlRoZSBmaWxlIHN5c3RlbSBoYXMgdGhlICdkaXJfaW5kZXgnIGZlYXR1cmUgZW5hYmxlZC4gIFBhcnRlZCBjYW4gb25seSByZXNpemUgIgorInRoZSBmaWxlIHN5c3RlbSBpZiBpdCBkaXNhYmxlcyB0aGlzIGZlYXR1cmUuICBZb3UgY2FuIGVuYWJsZSBpdCBsYXRlciBieSAiCisicnVubmluZyAndHVuZTJmcyAtTyBkaXJfaW5kZXggREVWSUNFJyBhbmQgdGhlbiAnZTJmc2NrIC1mRCBERVZJQ0UnLiIKK21zZ3N0ciAiIgorIkZpbGUgc3lzdGVtIG1lbWlsaWtpICdkaXJfaW5kZXgnIGZlYXR1ciBlbmFibGVkLiBQYXJ0ZWQgaGFueWEgYmlzYSBtZS1yZXNpemUgIgorImZpbGUgc3lzdGVtIGppa2EgaW5pIGZlYXR1cmUgaW5pIGRpbWF0aWthbi4gQW5kYSBkYXBhdCBtZW5naGlkdXBrYW5ueWEgIgorImtlbWJhbGkgbmFudGkgZGVuZ2FuIG1lbmphbGFua2FuICd0dW5lMmZzIC1PIGRpcl9pbmRleCBQRVJBTkdLQVQnIGRhbiAiCisia2VtdWRpYW4gJ2UyZnNjayAtZkQgUEVSQU5HS0FUJy4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NjkxCisjLCBmdXp6eQorbXNnaWQgIiIKKyJBIHJlc2l6ZSBvcGVyYXRpb24gb24gdGhpcyBmaWxlIHN5c3RlbSB3aWxsIHVzZSBFWFBFUklNRU5UQUwgY29kZVxuIgorInRoYXQgTUFZIENPUlJVUFQgaXQgKGFsdGhvdWdoIG5vIG9uZSBoYXMgcmVwb3J0ZWQgYW55IHN1Y2ggZGFtYWdlIHlldCkuXG4iCisiWW91IHNob3VsZCBhdCBsZWFzdCBiYWNrdXAgeW91ciBkYXRhIGZpcnN0LCBhbmQgcnVuICdlMmZzY2sgLWYnIGFmdGVyd2FyZHMuIgorbXNnc3RyICIiCisiU2VidWFoIG9wZXJhc2kgcGVydWJhaGFuIHVrdXJhbiBkaSBmaWxlIHN5c3RlbSBpbmkgYWthbiBtZW5nZ3VuYWthbiBrb2RlICIKKyJQRVJDT0JBQU5cbiIKKyJ5YW5nIG11bmdraW4gYWthbiBtZW5na29ydXBzaSBmaWxlIHN5c3RlbSBpbmkgKHdhbGF1cHVuIGhhbCBpbmkgYmVsdW0gcGVybmFoICIKKyJ0ZXJqYWRpXG4iCisic2ViZWx1bW55YSkuXG4iCisiQW5kYSBzZWhhcnVzbnlhIG1lbGFrdWthbiBiYWNrdXAgdGVybGViaWggZGFodWx1IHRlcmhhZGFwIGRhdGEgYW5kYSBkYW4gIgorIm1lbmphbGFua2FuICdlMmZzY2sgLWYnIHNlc3VkYWhueWEuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2Jsb2NrX3JlbG9jYXRvci5jOjE5OAorbXNnaWQgIkNyb3NzLWxpbmtlZCBibG9ja3MgZm91bmQhICBCZXR0ZXIgZ28gcnVuIGUyZnNjayBmaXJzdCEiCittc2dzdHIgIiIKKyJDcm9zcy1saW5rZWQgYmxvY2tzIGRpdGVtdWthbiEgTGViaWggYmFpayBtZW5qYWxhbmthbiBlMmZzY2sgdGVybGViaWggZGF1bHUhIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2Jsb2NrX3JlbG9jYXRvci5jOjUzNworIywgYy1mb3JtYXQKK21zZ2lkICJCbG9jayAlaSBoYXMgbm8gcmVmZXJlbmNlPyAgV2VpcmQuIgorbXNnc3RyICJCbG9jayAlaSB0aWRhayBtZW1pbGlraSByZWZlcmVuY2U/IEFuZWguIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2Jsb2NrX3JlbG9jYXRvci5jOjczNworIywgYy1mb3JtYXQKK21zZ2lkICJCbG9jayAlaSBzaG91bGRuJ3QgaGF2ZSBiZWVuIG1hcmtlZCAoJWQsICVkKSEiCittc2dzdHIgIkJsb2NrICVpIHNlaGFydXNueWEgdGlkYWsgbWVtaWxpa2kgdGFuZGEgKCVkLCAlZCkhIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9pbnRlcmZhY2UuYzoxODYKK21zZ2lkICIiCisiVGhlIGV4dDIgZmlsZSBzeXN0ZW0gcGFzc2VkIGEgYmFzaWMgY2hlY2suICBGb3IgYSBtb3JlIGNvbXByZWhlbnNpdmUgY2hlY2ssICIKKyJ1c2UgdGhlIGUyZnNjayBwcm9ncmFtLiIKK21zZ3N0ciAiIgorIkZpbGUgc3lzdGVtIGV4dDIgbG9sb3MgZGFyaSBwZW5nZWNoZWNrYW4gZGFzYXIuIFVudHVrIGxlYmloIGtvbXByZWhlbnNpZiAiCisiY2hlY2ssIGd1bmFrYW4gYXBsaWthc2kgZTJmc2NrLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvaW50ZXJmYWNlLmM6MjAzCittc2dpZCAiU29ycnksIGNhbid0IG1vdmUgdGhlIHN0YXJ0IG9mIGV4dDIgcGFydGl0aW9ucyB5ZXQhIgorbXNnc3RyICJNYWFmLCB0aWRhayBkYXBhdCBtZW1pbmRhaGthbiBhd2FsIGRhcmkgcGFydGlzaSBleHQyISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9idWZmZXIuYzo4MgorbXNnaWQgIkNvdWxkbid0IGZsdXNoIGJ1ZmZlciBjYWNoZSEiCittc2dzdHIgIlRpZGFrIGRhcGF0IG1lbmZsdXNoIGJ1ZmZlciBjYWNoZSEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfbWtmcy5jOjE2MgorbXNnaWQgIndyaXRpbmcgcGVyLWdyb3VwIG1ldGFkYXRhIgorbXNnc3RyICJtZW51bGlzIHBlci1ncm91cCBtZXRhZGF0YSIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9ta2ZzLmM6NTY0Cittc2dpZCAiRmlsZSBzeXN0ZW0gdG9vIHNtYWxsIGZvciBleHQyLiIKK21zZ3N0ciAiRmlsZSBzeXN0ZW0gdGVybGFsdSBrZWNpbCB1bnR1ayBleHQyLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jYWxjLmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgbmVlZCAlcyBvZiBmcmVlIGRpc2sgc3BhY2UgdG8gc2hyaW5rIHRoaXMgcGFydGl0aW9uIHRvIHRoaXMgc2l6ZS4gICIKKyJDdXJyZW50bHksIG9ubHkgJXMgaXMgZnJlZS4iCittc2dzdHIgIiIKKyJBbmRhIGJ1dHVoICVzIHJ1YW5nIGtvc29uZyBkYXJpIGRpc2sgdW50dWsgbWVuZ2VjaWxrYW4gcGFydGlzaSBpbmkuIFNhYXQgaW5pICIKKyJoYW55YSAlcyB5YW5nIGtvc29uZy4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY29udGV4dC5jOjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDbHVzdGVyIHN0YXJ0IGRlbHRhID0gJWQsIHdoaWNoIGlzIG5vdCBhIG11bHRpcGxlIG9mIHRoZSBjbHVzdGVyIHNpemUgJWQuIgorbXNnc3RyICIiCisiQ2x1c3RlciBhd2FsIGRlbHRhID0gJWQsIGRpbWFuYSBidWthbiBrZWxpcGF0YW4gZGFyaSB1a3VyYW4gY2x1c3RlciAlZC4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvZmF0LmM6MzA4CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhcnRpdGlvbiB0b28gYmlnL3NtYWxsIGZvciBhICVzIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiUGFydGlzaSB0ZXJsYWx1IGJlc2FyL2tlY2lsIHVudHVrIHNlYnVhaCBmaWxlIHN5c3RlbSAlcy4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvZmF0LmM6NDc0Cittc2dpZCAiIgorIlRoZSBGQVRzIGRvbid0IG1hdGNoLiAgSWYgeW91IGRvbid0IGtub3cgd2hhdCB0aGlzIG1lYW5zLCB0aGVuIHNlbGVjdCAiCisiY2FuY2VsLCBydW4gc2NhbmRpc2sgb24gdGhlIGZpbGUgc3lzdGVtLCBhbmQgdGhlbiBjb21lIGJhY2suIgorbXNnc3RyICIiCisiRkFUIHRpZGFrIGNvY29rLiBKaWthIGFuZGEgdGlkYWsgdGFodSBhcGEgYXJ0aW55YSBpbmksIG1ha2EgcGlsaWggY2FuY2VsLCAiCisiamFsYW5rYW4gc2NhbmRpc2sgcGFkYSBmaWxlIHN5c3RlbSwgZGFuIGNvYmEgbGFnaS4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvZmF0LmM6NTE0Cittc2dpZCAiVGhlcmUgYXJlIG5vIHBvc3NpYmxlIGNvbmZpZ3VyYXRpb25zIGZvciB0aGlzIEZBVCB0eXBlLiIKK21zZ3N0ciAiVGlkYWsgYWRhIGtvbmZpZ3VyYXNpIHlhbmcgbXVuZ2tpbiB1bnR1ayB0aXBlIEZBVCBpbmkuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jOjUyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRmlsZSBzeXN0ZW0gZG9lc24ndCBoYXZlIGV4cGVjdGVkIHNpemVzIGZvciBXaW5kb3dzIHRvIGxpa2UgaXQuICBDbHVzdGVyICIKKyJzaXplIGlzICVkayAoJWRrIGV4cGVjdGVkKTsgbnVtYmVyIG9mIGNsdXN0ZXJzIGlzICVkICglZCBleHBlY3RlZCk7IHNpemUgb2YgIgorIkZBVHMgaXMgJWQgc2VjdG9ycyAoJWQgZXhwZWN0ZWQpLiIKK21zZ3N0ciAiIgorIlVrdXJhbiBmaWxlIHN5c3RlbSB0aWRhayBiZXJ1a3VyYW4gc2VwZXJ0aSB5YW5nIGRpcGVya2lyYWthbiBvbGVoIFdpbmRvd3MuICIKKyJVa3VyYW4gY2x1c3RlciBhZGFsYWggJWRrICglZGsgZGlwZXJraXJha2FuKTsganVtbGFoIGRhcmkgY2x1c3RlciBhZGFsYWggJWQgIgorIiglZCBkaXBlcmtpcmFrYW4pOyB1a3VyYW4gZGFyaSBGQVRzIGFkYWxhaCAlZCBzZWt0b3IgKCVkIGRpcGVya2lyYWthbikuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jOjU0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRmlsZSBzeXN0ZW0gaXMgcmVwb3J0aW5nIHRoZSBmcmVlIHNwYWNlIGFzICVkIGNsdXN0ZXJzLCBub3QgJWQgY2x1c3RlcnMuIgorbXNnc3RyICIiCisiRmlsZSBzeXN0ZW0gbWVsYXBvcmthbiBydWFuZyBrb3Nvbmcgc2ViYWdhaSAlZCBjbHVzdGVycywgYnVrYW4gJWQgY2x1c3RlcnMuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jOjg3NAorbXNnaWQgIiIKKyJHTlUgUGFydGVkIHdhcyBtaXNjb21waWxlZDogdGhlIEZBVCBib290IHNlY3RvciBzaG91bGQgYmUgNTEyIGJ5dGVzLiAgRkFUICIKKyJzdXBwb3J0IHdpbGwgYmUgZGlzYWJsZWQuIgorbXNnc3RyICIiCisiR05VIFBhcnRlZCB0ZWxhaCBzYWxhaCBkaWtvbXBpbGU6IEZBVCBib290IHNla3RvciBzZWhhcnVzbnlhIDUxMiBieXRlcy4gRkFUICIKKyJzdXBwb3J0IGFrYW4gZGkgbm9uYWt0aWZrYW4uIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjE1OQorbXNnaWQgIiIKKyJUaGVyZSdzIG5vdCBlbm91Z2ggcm9vbSBpbiB0aGUgcm9vdCBkaXJlY3RvcnkgZm9yIGFsbCBvZiB0aGUgZmlsZXMuICBFaXRoZXIgIgorImNhbmNlbCwgb3IgaWdub3JlIHRvIGxvc2UgdGhlIGZpbGVzLiIKK21zZ3N0ciAiIgorIlRpZGFrIHRlcmRhcGF0IHJ1YW5nYW4geWFuZyBjdWt1cCB1bnR1ayBkaXJla3Rvcmkgcm9vdCB1bnR1ayBzZW11YSBmaWxlLiAiCisiUGlsaWggY2FuY2VsLCBhdGF1IGlnbm9yZSB1bnR1ayBtZW5nZ2FnYWxrYW4gZmlsZXMuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjMwMAorbXNnaWQgIkVycm9yIHdyaXRpbmcgdG8gdGhlIHJvb3QgZGlyZWN0b3J5LiIKK21zZ3N0ciAiRXJyb3IgbWVudWxpcyBwYWRhIGRpcmVrdG9yaSByb290LiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo0ODkKK21zZ2lkICJJZiB5b3UgbGVhdmUgeW91ciBmaWxlIHN5c3RlbSBhcyBGQVQxNiwgdGhlbiB5b3Ugd2lsbCBoYXZlIG5vIHByb2JsZW1zLiIKK21zZ3N0ciAiIgorIkppa2EgYW5kYSBtZW5pbmdnYWxrYW4gZmlsZSBzeXN0ZW0gYW5kYSBzZWJhZ2FpIEZBVDE2LCBtYWthIGFuZGEgbXVuZ2tpbiAiCisidGlkYWsgYWthbiBtZW5lbXVpIG1hc2FsYWgiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NDkyCittc2dpZCAiIgorIklmIHlvdSBjb252ZXJ0IHRvIEZBVDE2LCBhbmQgTVMgV2luZG93cyBpcyBpbnN0YWxsZWQgb24gdGhpcyBwYXJ0aXRpb24sIHRoZW4gIgorInlvdSBtdXN0IHJlLWluc3RhbGwgdGhlIE1TIFdpbmRvd3MgYm9vdCBsb2FkZXIuICBJZiB5b3Ugd2FudCB0byBkbyB0aGlzLCB5b3UgIgorInNob3VsZCBjb25zdWx0IHRoZSBQYXJ0ZWQgbWFudWFsIChvciB5b3VyIGRpc3RyaWJ1dGlvbidzIG1hbnVhbCkuIgorbXNnc3RyICIiCisiSmlrYSBhbmRhIG1lbmd1YmFoIGtlIEZBVDE2LCBkYW4gTVMgV2luZG93cyB0ZXJpbnN0YWxsIHBhZGEgcGFydGlzaSAiCisidGVyc2VidXQsIG1ha2EgYW5kYSBoYXJ1cyBtZW5pbnN0YWxsIGtlbWJhbGkgTVMgV2luZG93cyBib290IGxvYWRlci4gSmlrYSAiCisiYW5kYSBpbmdpbiBtZWxha3VrYW4gaW5pLCBhbmRhIHNlaGFydXNueWEgYmVya29uc3VsdGFzaSB0ZXJsZWJpaCBkYWh1bHUgcGFkYSAiCisibWFudWFsIGRhcmkgUGFydGVkIChhdGF1IG1hbnVhbCBkYXJpIGRpc3RyaWJ1c2kgYW5kYSkuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjUwMAorbXNnaWQgIiIKKyJJZiB5b3UgbGVhdmUgeW91ciBmaWxlIHN5c3RlbSBhcyBGQVQzMiwgdGhlbiB5b3Ugd2lsbCBub3QgaW50cm9kdWNlIGFueSBuZXcgIgorInByb2JsZW1zLiIKK21zZ3N0ciAiIgorIkppa2EgYW5kYSBtZW5pbmdnYWxrYW4gZmlsZSBzeXN0ZW0gc2ViYWdhaSBGQVQzMiwgbXVuZ2tpbiBhbmRhIHRpZGFrIG1lbmVtdWkgIgorIm1hc2FsYWggYmFydS4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTA0Cittc2dpZCAiIgorIklmIHlvdSBjb252ZXJ0IHRvIEZBVDMyLCBhbmQgTVMgV2luZG93cyBpcyBpbnN0YWxsZWQgb24gdGhpcyBwYXJ0aXRpb24sIHRoZW4gIgorInlvdSBtdXN0IHJlLWluc3RhbGwgdGhlIE1TIFdpbmRvd3MgYm9vdCBsb2FkZXIuICBJZiB5b3Ugd2FudCB0byBkbyB0aGlzLCB5b3UgIgorInNob3VsZCBjb25zdWx0IHRoZSBQYXJ0ZWQgbWFudWFsIChvciB5b3VyIGRpc3RyaWJ1dGlvbidzIG1hbnVhbCkuICBBbHNvLCAiCisiY29udmVydGluZyB0byBGQVQzMiB3aWxsIG1ha2UgdGhlIGZpbGUgc3lzdGVtIHVucmVhZGFibGUgYnkgTVMgRE9TLCBNUyAiCisiV2luZG93cyA5NWEsIGFuZCBNUyBXaW5kb3dzIE5ULiIKK21zZ3N0ciAiIgorIkppa2EgYW5kYSBtZW5ndWJhaCBrZSBGQVQzMiwgZGFuIE1TIFdpbmRvd3MgdGVyaW5zdGFsbCBwYWRhIHBhcnRpc2kgIgorInRlcnNlYnV0LCBtYWthIGFuZGEgaGFydXMgbWVuaW5zdGFsbCBrZW1iYWxpIE1TIFdpbmRvd3MgYm9vdCBsb2FkZXIuIEppa2EgIgorImFuZGEgaW5naW4gaW5naW4gbWVsYWt1a2FuIGluaSwgYW5kYSBoYXJ1cyBiZXJrb25zdWx0YXNpIHRlcmxlYmloIGRhaHVsdSAiCisiZGVuZ2FuIG1hbnVhbCBkYXJpIFBhcnRlZCAoYXRhdSBtYW51YWwgZGFyaSBkaXN0cmlidXNpIGFuZGEpLiBKdWdhLCBtZW5ndWJhaCAiCisia2UgRkFUMzIgYWthbiBtZW1idWF0IGZpbGUgc3lzdGVtIHRpZGFrIGRhcGF0IGRpYmFjYSBvbGVoIE1TIERPUywgTVMgV2luZG93cyAiCisiOTVhLCBkYW4gTVMgV2luZG93cyBOVC4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzICAlcyAgJXMiCittc2dzdHIgIiVzICAlcyAgJXMiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTE5Cittc2dpZCAiV291bGQgeW91IGxpa2UgdG8gdXNlIEZBVDMyPyIKK21zZ3N0ciAiTWF1a2FoIGFuZGEgbWVuZ2d1bmFrYW4gRkFUMzI/IgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjU1MCBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjU2NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyAgJXMiCittc2dzdHIgIiVzICAlcyIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1NTEKK21zZ2lkICIiCisiVGhlIGZpbGUgc3lzdGVtIGNhbiBvbmx5IGJlIHJlc2l6ZWQgdG8gdGhpcyBzaXplIGJ5IGNvbnZlcnRpbmcgdG8gRkFUMTYuIgorbXNnc3RyICIiCisiRmlsZSBzeXN0ZW0gaGFueWEgZGFwYXQgZGlyZXNpemUga2UgdWt1cmFuIGluaSBkZW5nYW4gbWVuZ3ViYWhueWEga2UgRkFUMTYuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjU2NworbXNnaWQgIiIKKyJUaGUgZmlsZSBzeXN0ZW0gY2FuIG9ubHkgYmUgcmVzaXplZCB0byB0aGlzIHNpemUgYnkgY29udmVydGluZyB0byBGQVQzMi4iCittc2dzdHIgIiIKKyJUaGUgZmlsZSBzeXN0ZW0gaGFueWEgZGFwYXQgZGktcmVzaXplIHVudHVrIHVrdXJhbiBpbmkgaGFueWEgZGVuZ2FuICIKKyJtZW5ndWJhaG55YSBtZW5qYWRpIEZBVDMyLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1ODAKK21zZ2lkICIiCisiR05VIFBhcnRlZCBjYW5ub3QgcmVzaXplIHRoaXMgcGFydGl0aW9uIHRvIHRoaXMgc2l6ZS4gIFdlJ3JlIHdvcmtpbmcgb24gaXQhIgorbXNnc3RyICIiCisiR05VIFBhcnRlZCB0aWRhayBkYXBhdCBtZW4tcmVzaXplIHBhcnRpc2kgaW5pIHVudHVrIHVrdXJhbiBpbmkuIEtpdGEgc2VkYW5nICIKKyJtZW5ndXNhaGthbm55YSB1bnR1ayBiaXNhISIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6NDkgbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6NTYKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgYW4gaW52YWxpZCBzaWduYXR1cmUgZm9yIGEgRkFUIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiIgorIkZpbGUgc3lzdGVtIG1lbWlsaWtpIHNlYnVhaCBzaWduYXR1cmUgeWFuZyB0aWRhayB2YWxpZCB1bnR1ayBzZWJ1YWggRkFUIGZpbGUgIgorInN5c3RlbS4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjY0Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGludmFsaWQgc2VjdG9yIHNpemUgZm9yIGEgRkFUIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiIgorIkZpbGUgc3lzdGVtIG1lbWlsaWtpIHVrdXJhbiBzZWt0b3IgeWFuZyB0aWRhayB2YWxpZCB1bnR1ayBzZWJ1YWggRkFUIGZpbGUgIgorInN5c3RlbS4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjcxCittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGludmFsaWQgY2x1c3RlciBzaXplIGZvciBhIEZBVCBmaWxlIHN5c3RlbS4iCittc2dzdHIgIiIKKyJGaWxlIHN5c3RlbSBtZW1pbGlraSB1a3VyYW4gY2x1c3RlciB5YW5nIHRpZGFrIHZhbGlkIHVudHVrIGZpbGUgc3lzdGVtIEZBVC4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjc4Cittc2dpZCAiIgorIkZpbGUgc3lzdGVtIGhhcyBhbiBpbnZhbGlkIG51bWJlciBvZiByZXNlcnZlZCBzZWN0b3JzIGZvciBhIEZBVCBmaWxlIHN5c3RlbS4iCittc2dzdHIgIiIKKyJGaWxlIHN5c3RlbSBtZW1pbGlraSBub21vciB5YW5nIHRpZGFrIHZhbGlkIHVudHVrIHJlc2VydmVyZCBzZWN0b3IgZGFyaSAiCisic2VidWFoIEZBVCBmaWxlIHN5c3RlbS4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjg1Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGludmFsaWQgbnVtYmVyIG9mIEZBVHMuIgorbXNnc3RyICJGaWxlIHN5c3RlbSBtZW1pbGlraSBub21vciB5YW5nIHRpZGFrIHZhbGlkIHVudHVrIEZBVHMuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzoxMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgZmlsZSBzeXN0ZW0gaGFzIGEgbG9naWNhbCBzZWN0b3Igc2l6ZSBvZiAlZC4gIEdOVSBQYXJ0ZWQgaXMga25vd24gbm90ICIKKyJ0byB3b3JrIHByb3Blcmx5IHdpdGggc2VjdG9yIHNpemVzIG90aGVyIHRoYW4gNTEyIGJ5dGVzLiIKK21zZ3N0ciAiIgorIkZpbGUgc3lzdGVtIGluaSBtZW1pbGlraSBzZWt0b3IgbG9naWNhbCB5YW5nIGJlcnVrdXJhbiAlZC4gR05VIFBhcnRlZCB0aWRhayAiCisiYmVrZXJqYSBkZW5nYW4gYmFpayBkZW5nYW4gdWt1cmFuIHNla3RvciBzZWxhaW4gNTEyIGJ5dGVzLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6MTY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZmlsZSBzeXN0ZW0ncyBDSFMgZ2VvbWV0cnkgaXMgKCVkLCAlZCwgJWQpLCB3aGljaCBpcyBpbnZhbGlkLiAgVGhlICIKKyJwYXJ0aXRpb24gdGFibGUncyBDSFMgZ2VvbWV0cnkgaXMgKCVkLCAlZCwgJWQpLiAgSWYgeW91IHNlbGVjdCBJZ25vcmUsIHRoZSAiCisiZmlsZSBzeXN0ZW0ncyBDSFMgZ2VvbWV0cnkgd2lsbCBiZSBsZWZ0IHVuY2hhbmdlZC4gIElmIHlvdSBzZWxlY3QgRml4LCB0aGUgIgorImZpbGUgc3lzdGVtJ3MgQ0hTIGdlb21ldHJ5IHdpbGwgYmUgc2V0IHRvIG1hdGNoIHRoZSBwYXJ0aXRpb24gdGFibGUncyBDSFMgIgorImdlb21ldHJ5LiIKK21zZ3N0ciAiIgorIkZpbGUgc3lzdGVtJ3MgQ0hTIGdlb21ldHJ5IGFkYWxhaCAoJWQsICVkLCAlZCksIGluaSB0aWRhayB2YWxpZC4gVGFiZWwgIgorInBhcnRpc2kgZGFyaSBDSFMgZ2VvbWV0cnkgYWRhbGFoICglZCwgJWQsICVkKS4gSmlrYSBhbmRhIG1lbWlsaWggSWdub3JlLCAiCisiZmlsZSBzeXN0ZW0ncyBDSFMgZ2VvbWV0cnkgYWthbiBkaXRpbmdnYWxrYW4gdGFucGEgZGl1YmFoLiBKaWthIGFuZGEgbWVtaWxpaCAiCisiQmV0dWxrYW4sIGZpbGUgc3lzdGVtIENIUyBnZW9tdHJ5IGFrYW4gZGlzZXQgc2VoaW5nZ2EgY29jb2sgZGVuZ2FuIHRhYmVsICIKKyJwYXJ0aXNpIGRhcmkgQ0hTIGdlb21ldHJ5LiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6MjEzCittc2dpZCAiRkFUIGJvb3Qgc2VjdG9yIHNheXMgbG9naWNhbCBzZWN0b3Igc2l6ZSBpcyAwLiAgVGhpcyBpcyB3ZWlyZC4gIgorbXNnc3RyICJGQVQgYm9vdCBzZWN0b3IgbWVuZ2F0YWthbiB1a3VyYW4gc2VrdG9yIGxvZ2ljYWwgYWRhbGFoIDAuIEluaSBhbmVoIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzoyMTkKK21zZ2lkICJGQVQgYm9vdCBzZWN0b3Igc2F5cyB0aGVyZSBhcmUgbm8gRkFUIHRhYmxlcy4gIFRoaXMgaXMgd2VpcmQuICIKK21zZ3N0ciAiRkFUIGJvb3Qgc2VjdG9yIG1lbmdhdGFrYW4gZGlzYW5hIHRpZGFrIGFkYSB0YWJlbCBGQVQuIEluaSBhbmVoLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6MjI1Cittc2dpZCAiRkFUIGJvb3Qgc2VjdG9yIHNheXMgY2x1c3RlcnMgYXJlIDAgc2VjdG9ycy4gIFRoaXMgaXMgd2VpcmQuICIKK21zZ3N0ciAiRkFUIGJvb3Qgc2VjdG9yIG1lbmdhdGFrYW4gY2x1c3RlcnMgYWRhbGFoIDAgc2VjdG9ycy4gSW5pIGFuZWguIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzoyMzUKK21zZ2lkICJGaWxlIHN5c3RlbSBpcyBGQVQxMiwgd2hpY2ggaXMgdW5zdXBwb3J0ZWQuIgorbXNnc3RyICJGaWxlIHN5c3RlbSBhZGFsYWggRkFUMTIsIGRpbWFuYSBmaWxlIHN5c3RlbSBpbmkgdGlkYWsgZGlzdXBwb3J0LiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6NDExCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgaW5mb3JtYXRpb24gc2VjdG9yIGhhcyB0aGUgd3Jvbmcgc2lnbmF0dXJlICgleCkuICBTZWxlY3QgY2FuY2VsIGZvciBub3csICIKKyJhbmQgc2VuZCBpbiBhIGJ1ZyByZXBvcnQuICBJZiB5b3UncmUgZGVzcGVyYXRlLCBpdCdzIHByb2JhYmx5IHNhZmUgdG8gaWdub3JlLiIKK21zZ3N0ciAiIgorIkluZm9ybWFzaSBzZWt0b3IgbWVtaWxpa2kgc2lnbmF0dXJlICgleCkgeWFuZyBzYWxhaC4gUGlsaWggY2FuY2VsIHNla2FyYW5nLCAiCisiZGFuIGtpcmltIGRhbGFtIGxhcG9yYW4gYnVnLiBKaWthIGFuZGEgcHV0dXMgYXNhLCBtdW5na2luIGxlYmloIGFtYW4gdW50dWsgIgorIm1lbmdoaXJhdWthbm55YS4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY291bnQuYzoxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIGRpcmVjdG9yeSBlbnRyeSBmb3IgJXM6IGZpcnN0IGNsdXN0ZXIgaXMgdGhlIGVuZCBvZiBmaWxlIG1hcmtlci4iCittc2dzdHIgIiIKKyJCYWQgZGlyZWN0b3J5IGVudHJ5IHVudHVrICVzOiBjbHVzdGVyIHBlcnRhbWEgbWVydXBha2FuIGFraGlyIGRhcmkgZmlsZSAiCisibWFya2VyIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvdW50LmM6MTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJCYWQgRkFUOiB1bnRlcm1pbmF0ZWQgY2hhaW4gZm9yICVzLiAgWW91IHNob3VsZCBydW4gZG9zZnNjayBvciBzY2FuZGlzay4iCittc2dzdHIgIiIKKyJCYWQgRkFUOiB1bnRlcm1pbmF0ZWQgY2hhaW4gdW50dWsgJXMuIEFuZGEgc2VoYXJ1c255YSBtZW5qYWxhbmthbiBkb3Nmc2NrICIKKyJhdGF1IHNjYW5kaXNrLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb3VudC5jOjE3NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQmFkIEZBVDogY2x1c3RlciAlZCBvdXRzaWRlIGZpbGUgc3lzdGVtIGluIGNoYWluIGZvciAlcy4gIFlvdSBzaG91bGQgcnVuICIKKyJkb3Nmc2NrIG9yIHNjYW5kaXNrLiIKK21zZ3N0ciAiIgorIkJhZCBGQVQ6IGNsdXN0ZXIgJWQgZGlsdWFyIGRhcmkgZmlsZSBzeXN0ZW0gZGFsYW0gcmFudGFpIHVudHVrICVzLiBBbmRhICIKKyJzZWhhcnVzbnlhIG1lbmphbGFua2FuIGRvc2ZzY2sgYXRhdSBzY2FuZGlzay4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY291bnQuYzoxODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkJhZCBGQVQ6IGNsdXN0ZXIgJWQgaXMgY3Jvc3MtbGlua2VkIGZvciAlcy4gIFlvdSBzaG91bGQgcnVuIGRvc2ZzY2sgb3IgIgorInNjYW5kaXNrLiIKK21zZ3N0ciAiIgorIkJhZCBGQVQ6IGNsdXN0ZXIgJWQgYWRhbGFoIGNyb3NzLWxpbmtlZCB1bnR1ayAlcy4gQW5kYSBzZWhhcnVzbnlhICIKKyJtZW5qYWxhbmthbiBkb3Nmc2NrIGF0YW4gc2NhbmRpc2suIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvdW50LmM6MjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzICVkaywgYnV0IGl0IGhhcyAlZCBjbHVzdGVycyAoJWRrKS4iCittc2dzdHIgIiVzIGFkYWxhaCAlZGssIHRldGFwaSBpbmkgbWVtaWxpa2kgJWQgY2x1c3RlcnMgKCVkaykuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvdW50LmM6MjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZmlsZSAlcyBpcyBtYXJrZWQgYXMgYSBzeXN0ZW0gZmlsZS4gIFRoaXMgbWVhbnMgbW92aW5nIGl0IGNvdWxkIGNhdXNlICIKKyJzb21lIHByb2dyYW1zIHRvIHN0b3Agd29ya2luZy4iCittc2dzdHIgIiIKKyJGaWxlICVzIGRpdGFuZGFpIHNlYmFnYWkgc2lzdGVtIGZpbGUuIEluaSBiZXJhcnRpIG1lbWluZGFoa2FubnlhIGRhcGF0ICIKKyJtZW55ZWJhYmthbiBiZWJlcmFwYSBhcGxpa2FzaSB1bnR1ayB0aWRhayBkYXBhdCBiZWtlcmphLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC90YWJsZS5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRkFUICVkIG1lZGlhICV4IGRvZXNuJ3QgbWF0Y2ggdGhlIGJvb3Qgc2VjdG9yJ3MgbWVkaWEgJXguICBZb3Ugc2hvdWxkICIKKyJwcm9iYWJseSBydW4gc2NhbmRpc2suIgorbXNnc3RyICIiCisiRkFUICVkIG1lZGlhICV4IHRpZGFrIGNvY29rIGRlbmdhbiBib290IHNlY3RvcidzIG1lZGlhICV4LiBBbmRhIHNlaGFydXNueWEgIgorIm1lbmphbGFua2FuIHNjYW5kaXNrLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC90YWJsZS5jOjI2OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYXRfdGFibGVfc2V0OiBjbHVzdGVyICVsZCBvdXRzaWRlIGZpbGUgc3lzdGVtIgorbXNnc3RyICJmYXRfdGFibGVfc2V0OiBjbHVzdGVyICVsZCBkaWx1YXIgZmlsZSBzeXN0ZW0iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvdGFibGUuYzozMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmF0X3RhYmxlX2dldDogY2x1c3RlciAlbGQgb3V0c2lkZSBmaWxlIHN5c3RlbSIKK21zZ3N0ciAiZmF0X3RhYmxlX2dldDogY2x1c3RlciAlbGQgZGlsdWFyIGZpbGUgc3lzdGVtIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3RhYmxlLmM6MzQzCittc2dpZCAiZmF0X3RhYmxlX2FsbG9jX2NsdXN0ZXI6IG5vIGZyZWUgY2x1c3RlcnMiCittc2dzdHIgImZhdF90YWJsZV9hbGxvY19jbHVzdGVyOiB0aWRhayBhZGEgY2x1c3RlciB5YW5nIGtvc29uZyIKKworIzogbGlicGFydGVkL2ZzL2xpbnV4X3N3YXAvbGludXhfc3dhcC5jOjI3NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVW5yZWNvZ25pc2VkIG9sZCBzdHlsZSBsaW51eCBzd2FwIHNpZ25hdHVyZSAnJTEwcycuIgorbXNnc3RyICJMaW51eCBzd2FwIHNpZ25hdHVyZSB0aWRhayBkaWtldGFodWkgJyUxMHMnLiIKKworIzogbGlicGFydGVkL2ZzL2xpbnV4X3N3YXAvbGludXhfc3dhcC5jOjMxOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVW5yZWNvZ25pc2VkIG5ldyBzdHlsZSBsaW51eCBzd2FwIHNpZ25hdHVyZSAnJTEwcycuIgorbXNnc3RyICJMaW51eCBzd2FwIHNpZ25hdHVyZSB0aWRhayBkaWtldGFodWkgJyUxMHMnLiIKKworIzogbGlicGFydGVkL2ZzL2xpbnV4X3N3YXAvbGludXhfc3dhcC5jOjM1OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVW5yZWNvZ25pc2VkIHN3c3VzcCBsaW51eCBzd2FwIHNpZ25hdHVyZSAnJTlzJy4iCittc2dzdHIgIkxpbnV4IHN3YXAgc2lnbmF0dXJlIHRpZGFrIGRpa2V0YWh1aSAnJTEwcycuIgorCisjOiBsaWJwYXJ0ZWQvZnMvbGludXhfc3dhcC9saW51eF9zd2FwLmM6NDM0Cittc2dpZCAiVG9vIG1hbnkgYmFkIHBhZ2VzLiIKK21zZ3N0ciAiVGVybGFsdSBiYW55YWsgYmFkIHBhZ2VzLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9hZHZmcy5jOjEyMSBsaWJwYXJ0ZWQvZnMvaGZzL2FkdmZzX3BsdXMuYzoxMjIKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzo0MTQgbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjUwOAorIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NTM5IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjY1OAorIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NzcyCittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIGNvbnRhaW5zIGVycm9ycy4iCittc2dzdHIgIkZpbGUgc3lzdGVtIG1lbWlsaWtpIGtlcnVzYWthbi4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvYWR2ZnNfcGx1cy5jOjI4NworbXNnaWQgIkJhZCBibG9ja3MgY291bGQgbm90IGJlIHJlYWQuIgorbXNnc3RyICJCYWQgYmxvY2tzIHRpZGFrIGRhcGF0IGRpYmFjYS4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvY2FjaGUuYzoxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRyeWluZyB0byByZWdpc3RlciBhbiBleHRlbnQgc3RhcnRpbmcgYXQgYmxvY2sgMHglWCwgYnV0IGFub3RoZXIgb25lIGFscmVhZHkgIgorImV4aXN0cyBhdCB0aGlzIHBvc2l0aW9uLiAgWW91IHNob3VsZCBjaGVjayB0aGUgZmlsZSBzeXN0ZW0hIgorbXNnc3RyICIiCisiTWVuY29iYSB1bnR1ayBtZW5yZWdpc3RlciBzZWJ1YWggZXh0ZW50IGRpbXVsYWkgZGFyaSBibG9jayAweCVYLCB0ZXRhcGkgeWFuZyAiCisibGFpbiBzdWRhaCBhZGEgZGkgcGFydGlzaSBpbmkuIEFuZGEgc2VoYXJ1c255YSBtZW5nZWNoZWNrIGZpbGUgc3lzdGVtICEiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvY2FjaGUuYzoyMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRyeWluZyB0byBtb3ZlIGFuIGV4dGVudCBmcm9tIGJsb2NrIE94JVggdG8gYmxvY2sgT3glWCwgYnV0IGFub3RoZXIgb25lICIKKyJhbHJlYWR5IGV4aXN0cyBhdCB0aGlzIHBvc2l0aW9uLiAgVGhpcyBzaG91bGQgbm90IGhhcHBlbiEiCittc2dzdHIgIiIKKyJNZW5jb2JhIHVudHVrIG1lbWluZGFoa2FuIHNlYnVhaCBleHRlbnQgZGFyaSBibG9jayAweCVYIGtlIGJsb2NrIDB4JVgsICIKKyJ0ZXRhcGkgeWFuZyBsYWluIHN1ZGFoIGFkYSBkaSBwYXJ0aXNpIGluaS4gSW5pIHNlaGFydXNueWEgdGlkYWsgdGVyamFkaSEiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZS5jOjE0MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgdXBkYXRlIHRoZSBleHRlbnQgY2FjaGUgZm9yIEhGUyBmaWxlIHdpdGggQ05JRCAlWC4iCittc2dzdHIgIlRpZGFrIGRhcGF0IG1lbmctdXBkYXRlIGV4dGVudCBjYWNoZSB1bnR1ayBmaWxlIEhGUyBkZW5nYW4gQ05JRCAlWC4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZS5jOjE4MAorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgdG8gcmVhZCBIRlMgZmlsZSB3aXRoIENOSUQgJVggYmVoaW5kIEVPRi4iCittc2dzdHIgIk1lbmNvYmEgdW50dWsgbWVtYmFjYSBmaWxlIEhGUyBkZW5nYW4gQ05JRCAlWCBkaWJlbGFrYW5nIEVPRi4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZS5jOjE5MCBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGUuYzoyMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgc2VjdG9yICVsbGkgb2YgSEZTIGZpbGUgd2l0aCBDTklEICVYLiIKK21zZ3N0ciAiVGlkYWsgZGFwYXQgbWVuZW11a2FuIHNla3RvICVsbGkgZGFyaSBmaWxlIEhGUyBkZW5nYW4gQ05JRCAlWC4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZS5jOjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgdG8gd3JpdGUgSEZTIGZpbGUgd2l0aCBDTklEICVYIGJlaGluZCBFT0YuIgorbXNnc3RyICJNZW5jb2JhIHVudHVrIG1lbnVsaXMgZmlsZSBIRlMgZGVuZ2FuIENOSUQgJVggZGliZWxha2FuZyBFT0YuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGVfcGx1cy5jOjE1NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgdXBkYXRlIHRoZSBleHRlbnQgY2FjaGUgZm9yIEhGUysgZmlsZSB3aXRoIENOSUQgJVguIgorbXNnc3RyICJUaWRhayBkYXBhdCBtZW5nLXVwZGF0ZSBleHRlbnQgY2FjaGUgdW50dWsgZmlsZSBIRlMrIGRlbmdhbiBDTklEICVYLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlX3BsdXMuYzoyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIHRvIHJlYWQgSEZTKyBmaWxlIHdpdGggQ05JRCAlWCBiZWhpbmQgRU9GLiIKK21zZ3N0ciAiTWVuY29iYSB1bnR1ayBtZW1iYWNhIGZpbGUgSEZTKyBkZW5nYW4gQ05JRCAlWCBkaWJlbGFrYW5nIEVPRi4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZV9wbHVzLmM6MjEzIGxpYnBhcnRlZC9mcy9oZnMvZmlsZV9wbHVzLmM6MjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIHNlY3RvciAlbGxpIG9mIEhGUysgZmlsZSB3aXRoIENOSUQgJVguIgorbXNnc3RyICJUaWRhayBkYXBhdCBtZW5lbXVrYW4gc2VrdG8gJWxsaSBkYXJpIGZpbGUgSEZTKyBkZW5nYW4gQ05JRCAlWC4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZV9wbHVzLmM6MjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyB0byB3cml0ZSBIRlMrIGZpbGUgd2l0aCBDTklEICVYIGJlaGluZCBFT0YuIgorbXNnc3RyICJNZW5jb2JhIHVudHVrIG1lbnVsaXMgZmlsZSBIRlMrIGRlbmdhbiBDTklEICVYIGRpYmVsYWthbmcgRU9GLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzoyMzIKK21zZ2lkICJTb3JyeSwgSEZTIGNhbm5vdCBiZSByZXNpemVkIHRoYXQgd2F5IHlldC4iCittc2dzdHIgIk1hYWYsIEhGUyB0aWRhayBkYXBhdCBkaS1yZXNpemUuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjI2MiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjY0MQorbXNnaWQgIkRhdGEgcmVsb2NhdGlvbiBoYXMgZmFpbGVkLiIKK21zZ3N0ciAiRGF0YSByZWxvY2F0aW9uIHRlbGFoIGdhZ2FsLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzoyODEKK21zZ2lkICJEYXRhIHJlbG9jYXRpb24gbGVmdCBzb21lIGRhdGEgaW4gdGhlIGVuZCBvZiB0aGUgdm9sdW1lLiIKK21zZ3N0ciAiRGF0YSByZWxvY2F0aW9uIG1lbmluZ2dhbGthbiBiZWJlcmFwYSBkYXRhIHBhZGEgYWtoaXIgZGFyaSB2b2x1bWUuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjMyMAorbXNnaWQgIndyaXRpbmcgSEZTIE1hc3RlciBEaXJlY3RvcnkgQmxvY2siCittc2dzdHIgIm1lbnVsaXMgSEZTIE1hc3RlciBEaXJlY3RvcnkgQmxvY2siCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NDY4Cittc2dpZCAiTm8gdmFsaWQgSEZTWytYXSBzaWduYXR1cmUgaGFzIGJlZW4gZm91bmQgd2hpbGUgb3BlbmluZy4iCittc2dzdHIgIlRhbmRhIHRhbmdhbiBIRlNbK1hdIHRpZGFrIHZhbGlkIHRlbGFoIGRpdGVtdWthbiBrZXRpa2EgbWVtYnVrYS4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NDc4CisjLCBjLWZvcm1hdAorbXNnaWQgIlZlcnNpb24gJWQgb2YgSEZTKyBpc24ndCBzdXBwb3J0ZWQuIgorbXNnc3RyICJIRlMrIHZlcnNpICVkIHRpZGFrIGRpc3VwcG9ydC4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NDg5CisjLCBjLWZvcm1hdAorbXNnaWQgIlZlcnNpb24gJWQgb2YgSEZTWCBpc24ndCBzdXBwb3J0ZWQuIgorbXNnc3RyICJIRlMrIHZlcnNpICVkIHRpZGFrIGRpc3VwcG9ydC4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NjcyCittc2dpZCAiRGF0YSByZWxvY2F0aW9uIGxlZnQgc29tZSBkYXRhIGF0IHRoZSBlbmQgb2YgdGhlIHZvbHVtZS4iCittc2dzdHIgIkRhdGEgcmVsb2NhdGlvbiBtZW5pbmdnYWxrYW4gYmViZXJhcGEgZGF0YSBwYWRhIGFraGlyIGRhcmkgdm9sdW1lLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo3MjAKK21zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRoZSBhbGxvY2F0aW9uIGZpbGUuIgorbXNnc3RyICJFcnJvciBrZXRpa2EgbWVudWxpcyBhbG9rYXNpIGZpbGUuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjczNQorbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdGhlIGNvbXBhdGliaWxpdHkgcGFydCBvZiB0aGUgYWxsb2NhdGlvbiBmaWxlLiIKK21zZ3N0ciAiRXJyb3Iga2V0aWthIG1lbnVsaXMgYmFnaWFuIGtvbXBhdGliaWxpdGFzIGRhcmkgYWxva2FzaSBmaWxlLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo3NTAKK21zZ2lkICJ3cml0aW5nIEhGUysgVm9sdW1lIEhlYWRlciIKK21zZ3N0ciAibWVudWxpcyBIRlMrIFZvbHVtZSBIZWFkZXIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6ODUwCittc2dpZCAiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgbG9va2luZyBmb3IgdGhlIG1hbmRhdG9yeSBiYWQgYmxvY2tzIGZpbGUuIgorbXNnc3RyICJTZWJ1YWggZXJyb3IgdGVyamFkaSBrZXRpa2EgbWVuY2FyaSBtYW5kYXRvcnkgYmFkIGJsb2NrcyBmaWxlLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo5MDQKK21zZ2lkICIiCisiSXQgc2VlbXMgdGhlcmUgaXMgYW4gZXJyb3IgaW4gdGhlIEhGUyB3cmFwcGVyOiB0aGUgYmFkIGJsb2NrcyBmaWxlIGRvZXNuJ3QgIgorImNvbnRhaW4gdGhlIGVtYmVkZGVkIEhGUysgdm9sdW1lLiIKK21zZ3N0ciAiIgorIktlbGloYXRhbm55YSB0ZXJqYWRpIGtlc2FsYWhhbiBkYWxhbSBIRlMgd3JhcHBlcjogZmlsZSBiYWQgYmxvY2tzIHRpZGFrICIKKyJiZXJpc2kgZW1iZWRkZWQgSEZTKyB2b2x1bWUuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjk0MAorbXNnaWQgIlNvcnJ5LCBIRlMrIGNhbm5vdCBiZSByZXNpemVkIHRoYXQgd2F5IHlldC4iCittc2dzdHIgIk1hYWYsIEhGUysgdGlkYWsgZGFwYXQgZGktcmVzaXplIGRlbmdhbiBjYXJhIGl0dSBzYWF0IGluaS4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6OTc1Cittc2dpZCAic2hyaW5raW5nIGVtYmVkZGVkIEhGUysgdm9sdW1lIgorbXNnc3RyICJtZW5nZWNpbGthbiBlbWJlZGRlZCBIRlMrIHZvbHVtZSIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo5OTEKK21zZ2lkICJSZXNpemluZyB0aGUgSEZTKyB2b2x1bWUgaGFzIGZhaWxlZC4iCittc2dzdHIgIlJlc2l6aW5nIGRhcmkgSEZTKyB2b2x1bWUgdGVsYWggZ2FnYWwuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjk5OAorbXNnaWQgInNocmlua2luZyBIRlMgd3JhcHBlciIKK21zZ3N0ciAibWVuZ2VjaWxrYW4gSEZTIHdyYXBwZXIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MTAwNworbXNnaWQgIlVwZGF0aW5nIHRoZSBIRlMgd3JhcHBlciBoYXMgZmFpbGVkLiIKK21zZ3N0ciAiVXBkYXRlIGRhcmkgSEZTIHdyYXBwZXIgdGVsYWggZ2FnYWwuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjExMDkgbGlicGFydGVkL2ZzL2hmcy9oZnMuYzoxMTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGlzIGlzIG5vdCBhIHJlYWwgJXMgY2hlY2suICBUaGlzIGlzIGdvaW5nIHRvIGV4dHJhY3Qgc3BlY2lhbCBsb3cgbGV2ZWwgIgorImZpbGVzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuIgorbXNnc3RyICIiCisiSW5pIGJ1a2FuIHNlYnVhaCBwZW5nZWNoZWNrYW4gJXMgbnlhdGEuIEluaSBha2FuIG1lbmdla3N0cmFrIGZpbGVzIHNwZXNpYWwgIgorImxldmVsIGJhd2FoIHVudHVrIHR1anVhbiBkZWJ1Z2dpbmcuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzoxNTUKK21zZ2lkICJCYWQgYmxvY2sgbGlzdCBoZWFkZXIgY2hlY2tzdW0uIgorbXNnc3RyICJEYWZ0YXIgYmFkIGJsb2NrIGhlYWRlciBjaGVja3N1bS4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjE2OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSW52YWxpZCBzaXplIG9mIGEgdHJhbnNhY3Rpb24gYmxvY2sgd2hpbGUgcmVwbGF5aW5nIHRoZSBqb3VybmFsICglaSBieXRlcykuIgorbXNnc3RyICIiCisiVWt1cmFuIHRpZGFrIHNhaCBkYWxhbSB0cmFuc2Frc2kgYmxvayBrZXRpa2EgbWVtYmFsYXMgdHJhbnNha3NpIGpvdXJuYWwgKCVpICIKKyJieXRlcykuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzoyNjAKK21zZ2lkICIiCisiSm91cm5hbCBzdG9yZWQgb3V0c2lkZSBvZiB0aGUgdm9sdW1lIGFyZSBub3Qgc3VwcG9ydGVkLiAgVHJ5IHRvIGRlc2FjdGl2YXRlICIKKyJ0aGUgam91cm5hbCBhbmQgcnVuIFBhcnRlZCBhZ2Fpbi4iCittc2dzdHIgIiIKKyJKb3VybmFsIGRpc2ltcGFuIGRpbHVhciBkYXJpIHZvbHVtZSB0aWRhayBkaXN1cHBvcnQuIENvYmEgdW50dWsgIgorIm1lbm9uYWt0aWZrYW4gam91cm5hbCBkYW4gamFsYW5rYW4gUGFydGVkIGxhZ2kgc2VzdWRhaCBpdHUuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzoyNzEKK21zZ2lkICJKb3VybmFsIG9mZnNldCBvciBzaXplIGlzIG5vdCBtdWx0aXBsZSBvZiB0aGUgc2VjdG9yIHNpemUuIgorbXNnc3RyICJVa3VyYW4gYXRhdSBvZmZzZXQgZGFyaSBqb3VybmFsIGJ1a2FuIGtlbGlwYXRhbiBkYXJpIHVrdXJhbiBzZWt0b3IiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjI5MgorbXNnaWQgIkluY29ycmVjdCBtYWdpYyB2YWx1ZXMgaW4gdGhlIGpvdXJuYWwgaGVhZGVyLiIKK21zZ3N0ciAiTmlsYWkgbWFnaWMgdGlkYWsgYmVuYXIgZGFsYW0gaGVhZGVyIGpvdXJuYWwuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozMDIKK21zZ2lkICJKb3VybmFsIHNpemUgbWlzbWF0Y2ggYmV0d2VlbiBqb3VybmFsIGluZm8gYmxvY2sgYW5kIGpvdXJuYWwgaGVhZGVyLiIKK21zZ3N0ciAiIgorIlVrdXJhbiBqb3VybmFsIHRpZGFrIGNvY29rIGRpYW50YXJhIGpvdXJuYWwgaW5mbyBibG9jayBkYW4gam91cm5hbCBoZWFkZXIuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozMTQKK21zZ2lkICJTb21lIGhlYWRlciBmaWVsZHMgYXJlIG5vdCBtdWx0aXBsZSBvZiB0aGUgc2VjdG9yIHNpemUuIgorbXNnc3RyICJCZWJlcmFwYSBmaWVsZHMgaGVhZGVyIGJ1a2FuIGtlbGlwYXRhbiBkYXJpIHVrdXJhbiBzZWt0b3IuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozMjMKK21zZ2lkICIiCisiVGhlIHNlY3RvciBzaXplIHN0b3JlZCBpbiB0aGUgam91cm5hbCBpcyBub3QgNTEyIGJ5dGVzLiAgUGFydGVkIG9ubHkgIgorInN1cHBvcnRzIDUxMiBieXRlcyBsZW5ndGggc2VjdG9ycy4iCittc2dzdHIgIiIKKyJVa3VyYW4gc2VrdG9yIHlhbmcgZGlzaW1wYW4gZGFsYW0gam91cm5hbCB0aWRhayBzZWJlc2FyIDUxMiBieXRlcy4gUGFydGVkICIKKyJoYW55YSBtZW5kdWt1bmcgdWt1cmFuIHNla3RvciA1MTIgYnl0ZXMuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozMzUKK21zZ2lkICJCYWQgam91cm5hbCBjaGVja3N1bS4iCittc2dzdHIgIkpvdXJuYWwgY2hlY2tzdW0gamVsZWsuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozNTMKK21zZ2lkICIiCisiVGhlIGpvdXJuYWwgaXMgbm90IGVtcHR5LiAgUGFydGVkIG11c3QgcmVwbGF5IHRoZSB0cmFuc2FjdGlvbnMgYmVmb3JlICIKKyJvcGVuaW5nIHRoZSBmaWxlIHN5c3RlbS4gIFRoaXMgd2lsbCBtb2RpZnkgdGhlIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiIgorIkpvdXJuYWwgdGlkYWsga29zb25nLiBQYXJ0ZWQgaGFydXMgbWVtYmFsYXMgdHJhbnNha3NpIHNlYmVsdW0gbWVtYnVrYSBmaWxlICIKKyJzeXN0ZW0uIEluaSBha2FuIG1lbW9kaWZpa2FzaSBmaWxlIHN5c3RlbS4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjM4MQorbXNnaWQgIiIKKyJUaGUgdm9sdW1lIGhlYWRlciBvciB0aGUgbWFzdGVyIGRpcmVjdG9yeSBibG9jayBoYXMgY2hhbmdlZCB3aGlsZSByZXBsYXlpbmcgIgorInRoZSBqb3VybmFsLiAgWW91IHNob3VsZCByZXN0YXJ0IFBhcnRlZC4iCittc2dzdHIgIiIKKyJWb2x1bWUgaGVhZGVyIGF0YXUgZGlyZWt0b3JpIG1hc3RlciBibG9jayB0ZWxhaCBiZXJ1YmFoIGtldGlrYSBtZW1iYWxhcyAiCisidHJhbnNha3NpIGpvdXJuYWwuIEFuZGEgc2VoYXJ1c255YSBtZXJlc3RhcnQgUGFydGVkLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9wcm9iZS5jOjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQYXJ0ZWQgY2FuJ3QgdXNlIEhGUyBmaWxlIHN5c3RlbXMgb24gZGlza3Mgd2l0aCBhIHNlY3RvciBzaXplIG5vdCBlcXVhbCB0byAlIgorImQgYnl0ZXMuIgorbXNnc3RyICIiCisiUGFydGVkIHRpZGFrIGRhcGF0IG1lbmdndW5ha2FuIGZpbGUgc3lzdGVtcyB0aXBlIEhGUyBkaSBkaXN0IGRlbmdhbiB1a3VyYW4gIgorInNla3RvciB0aWRhayBzYW1hIGRlbmdhbiAlZCBieXRlcy4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzoxNTEgbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6MTU1Cittc2dpZCAiQW4gZXh0ZW50IGhhcyBub3QgYmVlbiByZWxvY2F0ZWQuIgorbXNnc3RyICJTZWJ1YWggZXh0ZW50IHRpZGFrIGRhcGF0IGRpcmVsb2thc2lrYW4uIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6MjUxIGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjMwNworbXNnaWQgIiIKKyJBIHJlZmVyZW5jZSB0byBhbiBleHRlbnQgY29tZXMgZnJvbSBhIHBsYWNlIGl0IHNob3VsZCBub3QuICBZb3Ugc2hvdWxkIGNoZWNrICIKKyJ0aGUgZmlsZSBzeXN0ZW0hIgorbXNnc3RyICIiCisiU2VidWFoIHJlZmVyZW5zaSB1bnR1ayBzZWJ1YWggZXh0ZW50IGRhdGFuZyBkYXJpIHRlbXBhdCB5YW5nIHRpZGFrICIKKyJzZWhhcnVzbnlhLiBBbmRhIGhhcnVzIG1lbmdlY2hlY2sgZmlsZXN5c3RlbSEiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzozODEKK21zZ2lkICJUaGlzIEhGUyB2b2x1bWUgaGFzIG5vIGNhdGFsb2cgZmlsZS4gIFRoaXMgaXMgdmVyeSB1bnVzdWFsISIKK21zZ3N0ciAiSEZTIHZvbHVtZSB0aWRhayBtZW1pbGlraSBjYXRhbG9nIGZpbGUuIEluaSBzYW5nYXQgdGlkYWsgYmlhc2EhIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NDc1Cittc2dpZCAiVGhpcyBIRlMgdm9sdW1lIGhhcyBubyBleHRlbnRzIG92ZXJmbG93IGZpbGUuICBUaGlzIGlzIHF1aXRlIHVudXN1YWwhIgorbXNnc3RyICJIRlMrIHZvbHVtZSBpbmkgdGlkYWsgbWVtaWxpa2kgZXh0ZW50IG92ZXJmbG93IGZpbGUuIEluaSB0aWRhayBiaWFzYSEiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzo1MTcgbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NjY4Cittc2dpZCAiIgorIlRoZSBleHRlbnRzIG92ZXJmbG93IGZpbGUgc2hvdWxkIG5vdCBjb250YWluIGl0cyBvd24gZXh0ZW50cyEgIFlvdSBzaG91bGQgIgorImNoZWNrIHRoZSBmaWxlIHN5c3RlbS4iCittc2dzdHIgIiIKKyJFeHRlbnQgb3ZlcmZsb3cgZmlsZSBzZWhhcnVzbnlhIHRpZGFrIGJlcmlzaSBleHRlbnRueWEgc2VuZGlyaSEgQW5kYSAiCisic2VoYXJ1c255YSBtZW5nZWNoZWNrIGZpbGVzeXN0ZW0uIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NTc0IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjg0NworbXNnaWQgIkNvdWxkIG5vdCBjYWNoZSB0aGUgZmlsZSBzeXN0ZW0gaW4gbWVtb3J5LiIKK21zZ3N0ciAiVGlkYWsgZGFwYXQgbWVuLWNhY2hlIGZpbGVzeXN0ZW0gZGFsYW0gbWVtb3JpLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjYzNSBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo5MDgKK21zZ2lkICJCYWQgYmxvY2tzIGxpc3QgY291bGQgbm90IGJlIGxvYWRlZC4iCittc2dzdHIgIkRhZnRhciBiYWQgYmxvY2tzIHRpZGFrIGRhcGF0IGRpbG9hZC4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzo2NDkgbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6OTI0Cittc2dpZCAiQW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIGV4dGVudCByZWxvY2F0aW9uLiIKK21zZ3N0ciAiVGVyamFkaSBlcnJvciBrZXRpa2EgZXh0ZW50IHJlbG9jYXRpb24uIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo0OTUKK21zZ2lkICJUaGlzIEhGUysgdm9sdW1lIGhhcyBubyBjYXRhbG9nIGZpbGUuICBUaGlzIGlzIHZlcnkgdW51c3VhbCEiCittc2dzdHIgIkhGUysgdm9sdW1lIHRpZGFrIG1lbWlsaWtpIGNhdGFsb2cgZmlsZS4gSW5pIHNhbmdhdCB0aWRhayBiaWFzYSEiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjYxOQorbXNnaWQgIlRoaXMgSEZTKyB2b2x1bWUgaGFzIG5vIGV4dGVudHMgb3ZlcmZsb3cgZmlsZS4gIFRoaXMgaXMgcXVpdGUgdW51c3VhbCEiCittc2dzdHIgIkhGUysgdm9sdW1lIHRpZGFrIG1lbWlsaWtpIGV4dGVudCBvdmVyZmxvdyBmaWxlLiBJbmkgdGlkYWsgYmlhc2EhIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6OTQKK21zZ2lkICJkaXNwbGF5cyB0aGlzIGhlbHAgbWVzc2FnZSIKK21zZ3N0ciAidGFtcGlsa2FuIHBlc2FuIGJhbnR1YW4gaW5pIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6OTUKKyMsIGZ1enp5Cittc2dpZCAibGlzdHMgcGFydGl0aW9uIGxheW91dCBvbiBhbGwgYmxvY2sgZGV2aWNlcyIKK21zZ3N0ciAiZGFmdGFyIHRhYmVsIHBhcnRpc2kgZGFyaSBzZWx1cnVoIHBlcmFuZ2thdCB5YW5nIHRlcmRldGVrc2kiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo5NgorbXNnaWQgImRpc3BsYXlzIG1hY2hpbmUgcGFyc2VhYmxlIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6OTcKK21zZ2lkICJuZXZlciBwcm9tcHRzIGZvciB1c2VyIGludGVydmVudGlvbiIKK21zZ3N0ciAiamFuZ2FuIG1lbmFueWFrYW4gaW50ZXJ2ZW5zaSBwZW5nZ3VuYSIKKworIzogcGFydGVkL3BhcnRlZC5jOjk4Cittc2dpZCAiZGlzcGxheXMgdGhlIHZlcnNpb24iCittc2dzdHIgInRhbXBpbGthbiB2ZXJzaSBkYXJpIHByb2dyYW0gaW5pIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTExCittc2dpZCAiIgorIk5VTUJFUiBpcyB0aGUgcGFydGl0aW9uIG51bWJlciB1c2VkIGJ5IExpbnV4LiAgT24gTVMtRE9TIGRpc2sgbGFiZWxzLCB0aGUgIgorInByaW1hcnkgcGFydGl0aW9ucyBudW1iZXIgZnJvbSAxIHRvIDQsIGxvZ2ljYWwgcGFydGl0aW9ucyBmcm9tIDUgb253YXJkcy5cbiIKK21zZ3N0ciAiIgorIk5PTU9SIGFkYWxhaCBub21vciBwYXJ0aXNpIHlhbmcgYmlhc2EgZGlndW5ha2FuIG9sZWggTGludXguIFBhZGEgTVMtRE9TIGRpc2sgIgorImxhYmVsLCBwZW5vbW9yYW4gcGFydGlzaSB1dGFtYSAocHJpbWFyeSkgZGFyaSAxIHNhbXBhaSA0LCBwYXJ0aXNpIGxvZ2ljYWwgIgorImRhcmkgNSBrZWF0YXMuXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMTQKK21zZ2lkICJMQUJFTC1UWVBFIGlzIG9uZSBvZjogIgorbXNnc3RyICJUSVBFLUxBQkVMIGFkYWxhaCBzYWxhaCBzYXR1IGRhcmk6ICIKKworIzogcGFydGVkL3BhcnRlZC5jOjExNQorbXNnaWQgIkZMQUcgaXMgb25lIG9mOiAiCittc2dzdHIgIlRBTkRBIGFkYWxhaCBzYWxhaCBzYXR1IGRhcmk6ICIKKworIzogcGFydGVkL3BhcnRlZC5jOjExNgorbXNnaWQgIlVOSVQgaXMgb25lIG9mOiAiCittc2dzdHIgIlNBVFVBTiBhZGFsYWggc2FsYWggc2F0dSBkYXJpOiAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMTcKK21zZ2lkICJQQVJULVRZUEUgaXMgb25lIG9mOiBwcmltYXJ5LCBsb2dpY2FsLCBleHRlbmRlZFxuIgorbXNnc3RyICJUSVBFLVBBUlQgYWRhbGFoIHNhbGFoIHNhdHUgZGFyaTogcHJpbWFyeSwgbG9naWNhbCwgZXh0ZW5kZWRcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjExOQorbXNnaWQgIkZTLVRZUEUgaXMgb25lIG9mOiAiCittc2dzdHIgIlRJUEUtRlMgYWRhbGFoIHNhbGFoIHNhdHUgZGFyaTogIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIwCittc2dpZCAiIgorIlNUQVJUIGFuZCBFTkQgYXJlIGRpc2sgbG9jYXRpb25zLCBzdWNoIGFzIDRHQiBvciAxMCUuICBOZWdhdGl2ZSB2YWx1ZXMgY291bnQgIgorImZyb20gdGhlIGVuZCBvZiB0aGUgZGlzay4gIEZvciBleGFtcGxlLCAtMXMgc3BlY2lmaWVzIGV4YWN0bHkgdGhlIGxhc3QgIgorInNlY3Rvci5cbiIKK21zZ3N0ciAiIgorIkFXQUwgZGFuIEFLSElSIGFkYWxhaCBsb2thc2kgZGFyaSBkaXNrLCBzZXBlcnRpIDRHQiBhdGF1IDEwJS4gTmlsYWkgbmVnYXRpZiAiCisiZGloaXR1bmcgZGFyaSBha2hpciBhbGFtYXQgZGlzay4gc2ViYWdhaSBjb250b2gsID0tMXMgbWVueWF0YWthbiBsb2thc2kgIgorInNla3RvciB0ZXJha2hpci5cbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMworbXNnaWQgIlNUQVRFIGlzIG9uZSBvZjogb24sIG9mZlxuIgorbXNnc3RyICJTVEFUVVMgYWRhbGFoIHNhbGFoIHNhdHUgZGFyaTogb24sIG9mZlxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTI0Cittc2dpZCAiREVWSUNFIGlzIHVzdWFsbHkgL2Rldi9oZGEgb3IgL2Rldi9zZGFcbiIKK21zZ3N0ciAiUEVSQU5HS0FUIGJpYXNhbnlhIG1lbmdndW5ha2FuIG5hbWEgL2Rldi9oZGEgYXRhdSAvZGV2L3NkYVxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTI1Cittc2dpZCAiTkFNRSBpcyBhbnkgd29yZCB5b3Ugd2FudFxuIgorbXNnc3RyICJOQU1BIGFkYWxhaCBrYXRhIGFwYXB1biB5YW5nIGFuZGEgaW5naW5rYW5cbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyNgorbXNnaWQgIlRoZSBwYXJ0aXRpb24gbXVzdCBoYXZlIG9uZSBvZiB0aGUgZm9sbG93aW5nIEZTLVRZUEVzOiAiCittc2dzdHIgIlBhcnRpc2kgaGFydXMgbWVtaWxpa2kgc2FsYWggc2F0dSBkYXJpIFRJUEUtRlMgYmVyaWt1dCBpbmk6ICIKKworIzogcGFydGVkL3BhcnRlZC5jOjEzMAorIywgZnV6enkKK21zZ2lkICIiCisiQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy5cbiIKKyJUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZSwgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuXG4iCisiXG4iCisiVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4iCisiYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiIKKyJNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4iCisiR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkhhayBDaXB0YSAoQykgMTk5OCAtIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuXG4iCisiQXBsaWthc2kgaW5pIGFkYWxhaCBmcmVlIHNvZnR3YXJlLCBkaWxpbmR1bmdpIG9sZWggR05VIEdlbmVyYWwgUHVibGljICIKKyJMaWNlbmNlLlxuIgorIlxuIgorIkFwbGlrYXNpIGluaSBkaWRpc3RyaWJ1c2lrYW4gZGVuZ2FuIGhhcmFwYW4gYWthbiBiZXJndW5hLCB0ZXRhcGkgVEFOUEEgIgorIkFEQU5ZQSBHQVJBTlNJOyBiYWhrYW4gdW50dWsgUEVOSlVBTEFOIGF0YXUgS0VTRVNVQUlBTiBVTlRVSyBUVUpVQU4gIgorIlRFUlRFTlRVLiBMaWhhdCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB1bnR1ayBpbmZvcm1hc2kgeWFuZyBsZWJpaCAiCisiZGV0YWlsLlxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiUwLmYlJVx0KHRpbWUgbGVmdCAlLjJkOiUuMmQpIgorbXNnc3RyICIlMC5mJSVcdCh3YWt0dSB0ZXJzaXNhICUuMmQ6JS4yZCkiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBhcnRpdGlvbiAlcyBpcyBiZWluZyB1c2VkLiBZb3UgbXVzdCB1bm1vdW50IGl0IGJlZm9yZSB5b3UgbW9kaWZ5IGl0IHdpdGggIgorIlBhcnRlZC4iCittc2dzdHIgIiIKKyJQYXJ0aXNpICVzIHNlZGFuZyBkaWd1bmFrYW4uIEFuZGEgaGFydXMgbWVuZy11bW91bnQgdGVybGViaWggZGFodWx1IHNlYmVsdW0gIgorIm1lbW9kaWZpa2FzaW55YSBkZW5nYW4gbWVuZ2d1bmFrYW4gUGFydGVkLiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICJQYXJ0aXRpb24ocykgb24gJXMgYXJlIGJlaW5nIHVzZWQuIgorbXNnc3RyICJQYXJ0aXNpIHBhZGEgJXMgc2VkYW5nIGRpZ3VuYWthbi4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjMKK21zZ2lkICIiCisiVGhlIGV4aXN0aW5nIGZpbGUgc3lzdGVtIHdpbGwgYmUgZGVzdHJveWVkIGFuZCBhbGwgZGF0YSBvbiB0aGUgcGFydGl0aW9uICIKKyJ3aWxsIGJlIGxvc3QuIERvIHlvdSB3YW50IHRvIGNvbnRpbnVlPyIKK21zZ3N0ciAiIgorIkZpbGVzeXN0ZW0geWFuZyBhZGEgYWthbiBkaWhhcHVzIGRhbiBzZWx1cnVoIGRhdGEgeWFuZyBhZGEgZGkgcGFydGlzaSAiCisidGVyc2VidXQgYWthbiBoaWxhbmcuIEFwYWthaCBhbmRhIGluZ2luIG1lbGFuanV0a2FuPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjIzNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGV4aXN0aW5nIGRpc2sgbGFiZWwgb24gJXMgd2lsbCBiZSBkZXN0cm95ZWQgYW5kIGFsbCBkYXRhIG9uIHRoaXMgZGlzayAiCisid2lsbCBiZSBsb3N0LiBEbyB5b3Ugd2FudCB0byBjb250aW51ZT8iCittc2dzdHIgIiIKKyJEaXNrIGxhYmVsIHlhbmcgYWRhIGRpICVzIGFrYW4gZGloYXB1cyBkYW4gc2VsdXJ1aCBkYXRhIGRpIGRpc2sgaW5pIGFrYW4gIgorImhpbGFuZy4gQXBha2FoIGFuZGEgaW5naW4gbWVsYW5qdXRrYW4/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NDU4IHBhcnRlZC9wYXJ0ZWQuYzo2NTIgcGFydGVkL3BhcnRlZC5jOjEwNDQKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMTI4IHBhcnRlZC9wYXJ0ZWQuYzoxNzcxIHBhcnRlZC9wYXJ0ZWQuYzoxODUyCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTkwMAorbXNnaWQgIlBhcnRpdGlvbiBudW1iZXI/IgorbXNnc3RyICJOb21vciBwYXJ0aXNpPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjUwMAorbXNnaWQgIlNvdXJjZSBkZXZpY2U/IgorbXNnc3RyICJQZXJhbmdrYXQgYXNhbD8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo1MDQKK21zZ2lkICJTb3VyY2UgcGFydGl0aW9uIG51bWJlcj8iCittc2dzdHIgIk5vbW9yIHBhcnRpc2kgYXNhbD8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo1MDkKK21zZ2lkICJDYW4ndCBjb3B5IGFuIGV4dGVuZGVkIHBhcnRpdGlvbi4iCittc2dzdHIgIlRpZGFrIGRhcGF0IG1lbmdrb3BpIHNlYnVhaCBwYXJ0aXNpIGV4dGVuZGVkLiIKKworIzogcGFydGVkL3BhcnRlZC5jOjUxNQorbXNnaWQgIkRlc3RpbmF0aW9uIHBhcnRpdGlvbiBudW1iZXI/IgorbXNnc3RyICJOb21vciBwYXJ0aXNpIHR1anVhbj8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo2MTUKK21zZ2lkICJOZXcgZGlzayBsYWJlbCB0eXBlPyIKK21zZ3N0ciAiVGlwZSBkaXNrIGxhYmVsIGJhcnU/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NjU2Cittc2dpZCAiRmlsZSBzeXN0ZW0/IgorbXNnc3RyICJGaWxlIHN5c3RlbT8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo3MDcgcGFydGVkL3BhcnRlZC5jOjg3OAorbXNnaWQgIlBhcnRpdGlvbiB0eXBlPyIKK21zZ3N0ciAiVGlwZSBwYXJ0aXNpPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjcxNCBwYXJ0ZWQvcGFydGVkLmM6ODg1IHBhcnRlZC9wYXJ0ZWQuYzoxMTMxCittc2dpZCAiUGFydGl0aW9uIG5hbWU/IgorbXNnc3RyICJOYW1hIHBhcnRpc2k/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NzIyIHBhcnRlZC9wYXJ0ZWQuYzo4OTUKK21zZ2lkICJGaWxlIHN5c3RlbSB0eXBlPyIKK21zZ3N0ciAiVGlwZSBmaWxlIHN5c3RlbT8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo3MjkgcGFydGVkL3BhcnRlZC5jOjg5NyBwYXJ0ZWQvcGFydGVkLmM6MTA1OQorIzogcGFydGVkL3BhcnRlZC5jOjE3MjUgcGFydGVkL3BhcnRlZC5jOjE3ODAKK21zZ2lkICJTdGFydD8iCittc2dzdHIgIkF3YWw/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NzMxIHBhcnRlZC9wYXJ0ZWQuYzo5MDAgcGFydGVkL3BhcnRlZC5jOjEwNjIKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNzI3IHBhcnRlZC9wYXJ0ZWQuYzoxNzgyCittc2dpZCAiRW5kPyIKK21zZ3N0ciAiQWtoaXI/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NzY5IHBhcnRlZC9wYXJ0ZWQuYzo5MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSByZXF1ZXN0ZWQgYSBwYXJ0aXRpb24gZnJvbSAlcyB0byAlcy5cbiIKKyJUaGUgY2xvc2VzdCBsb2NhdGlvbiB3ZSBjYW4gbWFuYWdlIGlzICVzIHRvICVzLiAgSXMgdGhpcyBzdGlsbCBhY2NlcHRhYmxlIHRvICIKKyJ5b3U/IgorbXNnc3RyICIiCisiQW5kYSBtZW1pbnRhIHNlYnVhaCBwYXJ0aXNpIGRhcmkgJXMgc2FtcGFpICVzLlxuIgorIlBlbmRla2F0YW4gUGFydGVkIHlhbmcgcGFsaW5nIGRla2F0IGFkYWxhaCAlcyAtICVzLiBBcGFrYWggaW5pIGRhcGF0ICIKKyJkaXRlcmltYSBvbGVoIGFuZGE/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6ODkwCittc2dpZCAiQW4gZXh0ZW5kZWQgcGFydGl0aW9uIGNhbm5vdCBob2xkIGEgZmlsZSBzeXN0ZW0uICBEaWQgeW91IHdhbnQgbWtwYXJ0PyIKK21zZ3N0ciAiIgorIlNlYnVhaCBwYXJ0aXNpIGV4dGVuZGVkIHRpZGFrIGRhcGF0IGJlcmlzaSBzZWJ1YWggZmlsZSBzeXN0ZW0uIEFuZGEgaW5naW4gIgorIm1lbGFrdWthbiBta3BhcnQ/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTA1MAorbXNnaWQgIkNhbid0IG1vdmUgYW4gZXh0ZW5kZWQgcGFydGl0aW9uLiIKK21zZ3N0ciAiVGlkYWsgZGFwYXQgbWVtaW5kYWhrYW4gc2VidWFoIHBhcnRpc2kgZXh0ZW5kZWQuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTA3OQorbXNnaWQgIkNhbid0IG1vdmUgYSBwYXJ0aXRpb24gb250byBpdHNlbGYuICBUcnkgdXNpbmcgcmVzaXplLCBwZXJoYXBzPyIKK21zZ3N0ciAiIgorIlRpZGFrIGRhcGF0IG1lbWluZGFoa2FuIHBhcnRpc2kga2UgcGFydGlzaSBpdHUgc2VuZGlyaS4gQ29iYSBtZW5nZ3VuYWthbiAiCisicmVzaXplLCBtdW5na2luPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlub3I6ICVkXG4iCittc2dzdHIgIk1pbm9yOiAlZFxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIyOAorIywgYy1mb3JtYXQKK21zZ2lkICJGbGFnczogJXNcbiIKK21zZ3N0ciAiVGFuZGE6ICVzXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGUgU3lzdGVtOiAlc1xuIgorbXNnc3RyICJGaWxlIFN5c3RlbTogJXNcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMzAKK21zZ2lkICJTaXplOiAgICAgICAgICIKK21zZ3N0ciAiVWt1cmFuOiAgICAgICAgIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIzNQorbXNnaWQgIk1pbmltdW0gc2l6ZTogIgorbXNnc3RyICJVa3VyYW4gbWluaW1hbDogIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIzOAorbXNnaWQgIk1heGltdW0gc2l6ZTogIgorbXNnc3RyICJVa3VyYW4gbWFrc2ltYWw6ICIKKworIzogcGFydGVkL3BhcnRlZC5jOjEzNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTW9kZWw6ICVzICglcylcbiIKK21zZ3N0ciAiTW9kZWw6ICVzICglcylcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEzNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGlzayAlczogJXNcbiIKK21zZ3N0ciAiRGlzayAlczogJXNcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEzNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VjdG9yIHNpemUgKGxvZ2ljYWwvcGh5c2ljYWwpOiAlbGxkQi8lbGxkQlxuIgorbXNnc3RyICJVa3VyYW4gc2VrdG9yIChsb2dpY2FsL3BoeXNpY2FsKTogJWxsZEIvJWxsZEJcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEzODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQklPUyBjeWxpbmRlcixoZWFkLHNlY3RvciBnZW9tZXRyeTogJWQsJWQsJWQuICBFYWNoIGN5bGluZGVyIGlzICVzLlxuIgorbXNnc3RyICIiCisiQklPUyBjeWxpbmRlcixoZWFkLHNlY3RvciBnZW9tZXRyeTogJWQsJWQsJWQuIFNldGlhcCBjeWxpbmRlciBhZGFsYWggJXMuXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMzkyCisjLCBjLWZvcm1hdAorbXNnaWQgIlBhcnRpdGlvbiBUYWJsZTogJXNcbiIKK21zZ3N0ciAiVGFiZWwgUGFydGlzaTogJXNcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MDYgcGFydGVkL3BhcnRlZC5jOjE0MDkKK21zZ2lkICJOdW1iZXIiCittc2dzdHIgIk5vbW9yIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQwNiBwYXJ0ZWQvcGFydGVkLmM6MTQwOQorbXNnaWQgIlN0YXJ0IgorbXNnc3RyICJBd2FsIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQwNyBwYXJ0ZWQvcGFydGVkLmM6MTQxMAorbXNnaWQgIkVuZCIKK21zZ3N0ciAiQWtoaXIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDEwCittc2dpZCAiU2l6ZSIKK21zZ3N0ciAiVWt1cmFuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQxNAorbXNnaWQgIlR5cGUiCittc2dzdHIgIlRpcGUiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDE2Cittc2dpZCAiRmlsZSBzeXN0ZW0iCittc2dzdHIgIkZpbGUgc3lzdGVtIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQxOQorbXNnaWQgIk5hbWUiCittc2dzdHIgIk5hbWEiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDIxCittc2dpZCAiRmxhZ3MiCittc2dzdHIgIlRhbmRhIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQ3NworbXNnaWQgIkZyZWUgU3BhY2UiCittc2dzdHIgIlJ1YW5nIEtvc29uZyIKKworIzogcGFydGVkL3BhcnRlZC5jOjE2MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkEgJXMgJXMgcGFydGl0aW9uIHdhcyBmb3VuZCBhdCAlcyAtPiAlcy4gIERvIHlvdSB3YW50IHRvIGFkZCBpdCB0byB0aGUgIgorInBhcnRpdGlvbiB0YWJsZT8iCittc2dzdHIgIiIKKyJTZWJ1YWggJXMgJXMgcGFydGlzaSBkaXRlbXVrYW4gcGFkYSAlcyAtPiAlcy4gQW5kYSBpbmdpbiBtZW5hbWJhaGthbiBpbmkgIgorInBhZGEgdGFiZWwgcGFydGlzaT8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNjYzCittc2dpZCAic2VhcmNoaW5nIGZvciBmaWxlIHN5c3RlbXMiCittc2dzdHIgIm1lbmNhcmkgdW50dWsgZmlsZSBzeXN0ZW1zIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTg3NworbXNnaWQgIk5ldyBkZXZpY2U/IgorbXNnc3RyICJQZXJhbmdrYXQgYmFydT8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxOTAyCittc2dpZCAiRmxhZyB0byBJbnZlcnQ/IgorbXNnc3RyICJUYW5kYSB5YW5nIGFrYW4gZGlydWJhaD8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxOTA3Cittc2dpZCAiTmV3IHN0YXRlPyIKK21zZ3N0ciAiU3RhdHVzIGJhcnU/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTk0NAorbXNnaWQgIlVuaXQ/IgorbXNnc3RyICJTYXR1YW4/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjA5MworbXNnaWQgImNoZWNrIgorbXNnc3RyICJjaGVjayIKKworIzogcGFydGVkL3BhcnRlZC5jOjIwOTYKK21zZ2lkICIiCisiY2hlY2sgTlVNQkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyBhIHNpbXBsZSBjaGVjayBvbiB0aGUgZmlsZSBzeXN0ZW0iCittc2dzdHIgIiIKKyJjaGVjayBOT01PUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbGFrdWthbiBwZW5nZS1jaGVjay1hbiBzZWRlcmhhbmEgIgorInBhZGEgZmlsZSBzeXN0ZW0iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTAyCittc2dpZCAiY3AiCittc2dzdHIgInNhbGluIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEwNQorbXNnaWQgIiIKKyJjcCBbRlJPTS1ERVZJQ0VdIEZST00tTlVNQkVSIFRPLU5VTUJFUiAgIGNvcHkgZmlsZSBzeXN0ZW0gdG8gYW5vdGhlciAiCisicGFydGl0aW9uIgorbXNnc3RyICIiCisic2FsaW4gW0FTQUwtUEVSQU5HS0FUXSBBU0FMLU5PTU9SIEtFLU5PTU9SICBtZW55YWxpbiBmaWxlIHN5c3RlbSBrZSBwYXJ0aXNpICIKKyJ5YW5nIGxhaW4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTExCittc2dpZCAiaGVscCIKK21zZ3N0ciAiYmFudHVhbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMTQKKyMsIGZ1enp5Cittc2dpZCAiIgorImhlbHAgW0NPTU1BTkRdICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgZ2VuZXJhbCBoZWxwLCBvciBoZWxwIG9uICIKKyJDT01NQU5EIgorbXNnc3RyICIiCisiYmFudHVhbiBbUEVSSU5UQUhdICAgICAgICAgICAgICAgICAgICAgICBtZW5hbXBpbGthbiBiYW50dWFuIHVtdW0sIGF0YXUgIgorImJhbnR1YW4gcGFkYSBQRVJJTlRBSCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMjAKK21zZ2lkICJta2xhYmVsIgorbXNnc3RyICJta2xhYmVsIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEyMAorbXNnaWQgIm1rdGFibGUiCittc2dzdHIgIm1rdGFibGUiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTIzCittc2dpZCAiIgorIm1rbGFiZWwsbWt0YWJsZSBMQUJFTC1UWVBFICAgICAgICAgICAgICAgY3JlYXRlIGEgbmV3IGRpc2tsYWJlbCAocGFydGl0aW9uICIKKyJ0YWJsZSkiCittc2dzdHIgIiIKKyJta2xhYmVsLG1rdGFibGUgVElQRS1MQUJFTCAgICAgICAgICAgICAgIG1lbWJ1YXQgc2VidWFoIGRpc2tsYWJlbCBiYXJ1ICIKKyIodGFiZWwgcGFydGlzaSkiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTI5Cittc2dpZCAibWtmcyIKK21zZ3N0ciAibWtmcyIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMzIKK21zZ2lkICIiCisibWtmcyBOVU1CRVIgRlMtVFlQRSAgICAgICAgICAgICAgICAgICAgICBtYWtlIGEgRlMtVFlQRSBmaWxlIHN5c3RlbSBvbiAiCisicGFydGl0aXRvbiBOVU1CRVIiCittc2dzdHIgIiIKKyJta2ZzIE5PTU9SIFRJUEUtRlMgICAgICAgICAgICAgICAgICAgICAgIG1lbWJ1YXQgVElQRS1GUyBmaWxlc3lzdGVtIHBhZGEgIgorInBhcnRpc2kgTk9NT1IiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTM4Cittc2dpZCAibWtwYXJ0IgorbXNnc3RyICJta3BhcnQiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTQxCittc2dpZCAibWtwYXJ0IFBBUlQtVFlQRSBbRlMtVFlQRV0gU1RBUlQgRU5EICAgICBtYWtlIGEgcGFydGl0aW9uIgorbXNnc3RyICJta3BhcnQgVElQRS1QQVJUIFtUSVBFLUZTXSBBV0FMIEFLSElSICAgIG1lbWJ1YXQgc2VidWFoIHBhcnRpc2kiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTQ3CisjLCBmdXp6eQorbXNnaWQgIiIKKyInbWtwYXJ0JyBtYWtlcyBhIHBhcnRpdGlvbiB3aXRob3V0IGNyZWF0aW5nIGEgbmV3IGZpbGUgc3lzdGVtIG9uIHRoZSAiCisicGFydGl0aW9uLiAgRlMtVFlQRSBtYXkgYmUgc3BlY2lmaWVkIHRvIHNldCBhbiBhcHByb3ByaWF0ZSBwYXJ0aXRpb24gSUQuXG4iCittc2dzdHIgIiIKKyJta3BhcnQgbWVtYnVhdCBzZWJ1YWggcGFydGlzaSB0YW5wYSBtZW1idWF0IHNlYnVhaCBmaWxlIHN5c3RlbSBiYXJ1IHBhZGEgIgorInBhcnRpc2kuIFRJUEUtRlMgbXVuZ2tpbiBkaXNwZXNpZmlrYXNpa2FuIHVudHVrIG1lbmdlc2V0IElEIHBhcnRpc2kuXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTUyCittc2dpZCAibWtwYXJ0ZnMiCittc2dzdHIgIm1rcGFydGZzIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE1NQorbXNnaWQgIiIKKyJta3BhcnRmcyBQQVJULVRZUEUgRlMtVFlQRSBTVEFSVCBFTkQgICAgIG1ha2UgYSBwYXJ0aXRpb24gd2l0aCBhIGZpbGUgc3lzdGVtIgorbXNnc3RyICIiCisibWtwYXJ0ZnMgVElQRS1QQVJUIFRJUEUtRlMgQVdBTCBBS0hJUiAgICBtZW1idWF0IHNlYnVhaCBwYXJ0aXNpIGRlbmdhbiAiCisiZmlsZXN5c3RlbSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNjEKK21zZ2lkICJtb3ZlIgorbXNnc3RyICJwaW5kYWgiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTY0Cittc2dpZCAibW92ZSBOVU1CRVIgU1RBUlQgRU5EICAgICAgICAgICAgICAgICAgICBtb3ZlIHBhcnRpdGlvbiBOVU1CRVIiCittc2dzdHIgInBpbmRhaCBOT01PUiBBV0FMIEFLSElSICAgICAgICAgICAgICAgICAgbWVtaW5kYWhrYW4gcGFydGlzaSBOT01PUiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNjkKK21zZ2lkICJuYW1lIgorbXNnc3RyICJuYW1hIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE3MgorbXNnaWQgIm5hbWUgTlVNQkVSIE5BTUUgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSBwYXJ0aXRpb24gTlVNQkVSIGFzIE5BTUUiCittc2dzdHIgIiIKKyJuYW1hIE5PTU9SIE5BTUEgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbWJlcmkgbmFtYSBwYXJ0aXNpIE5PTU9SIGRlbmdhbiAiCisiTkFNQSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNzcKK21zZ2lkICJwcmludCIKK21zZ3N0ciAiY2V0YWsiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTgwCittc2dpZCAiIgorInByaW50IFtkZXZpY2VzfGZyZWV8bGlzdCxhbGx8TlVNQkVSXSAgICAgZGlzcGxheSB0aGUgcGFydGl0aW9uIHRhYmxlLCAiCisiYXZhaWxhYmxlIGRldmljZXMsIGZyZWUgc3BhY2UsIGFsbCBmb3VuZCBwYXJ0aXRpb25zLCBvciBhIHBhcnRpY3VsYXIgIgorInBhcnRpdGlvbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE4NQorbXNnaWQgIiIKKyJXaXRob3V0IGFyZ3VtZW50cywgJ3ByaW50JyBkaXNwbGF5cyB0aGUgZW50aXJlIHBhcnRpdGlvbiB0YWJsZS4gSG93ZXZlciB3aXRoICIKKyJ0aGUgZm9sbG93aW5nIGFyZ3VtZW50cyBpdCBwZXJmb3JtcyB2YXJpb3VzIG90aGVyIGFjdGlvbnMuXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxODcKK21zZ2lkICIgIGRldmljZXMgICA6IGRpc3BsYXkgYWxsIGFjdGl2ZSBibG9jayBkZXZpY2VzXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxODgKK21zZ2lkICIiCisiICBmcmVlICAgICAgOiBkaXNwbGF5IGluZm9ybWF0aW9uIGFib3V0IGZyZWUgdW5wYXJ0aXRpb25lZCBzcGFjZSBvbiB0aGUgIgorImN1cnJlbnQgYmxvY2sgZGV2aWNlXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxOTAKKyMsIGZ1enp5Cittc2dpZCAiIgorIiAgbGlzdCwgYWxsIDogZGlzcGxheSB0aGUgcGFydGl0aW9uIHRhYmxlcyBvZiBhbGwgYWN0aXZlIGJsb2NrIGRldmljZXNcbiIKK21zZ3N0ciAiZGFmdGFyIHRhYmVsIHBhcnRpc2kgZGFyaSBzZWx1cnVoIHBlcmFuZ2thdCB5YW5nIHRlcmRldGVrc2kiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTkxCittc2dpZCAiIgorIiAgTlVNQkVSICAgIDogZGlzcGxheSBtb3JlIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgcGFydGljdWxhciAiCisicGFydGl0aW9uXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxOTYKK21zZ2lkICJxdWl0IgorbXNnc3RyICJiZXJoZW50aSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxOTkKK21zZ2lkICJxdWl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQgcHJvZ3JhbSIKK21zZ3N0ciAiYmVyaGVudGkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZWx1YXIgZGFyaSBwcm9ncmFtIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIwNAorbXNnaWQgInJlc2N1ZSIKK21zZ3N0ciAic2VsYW1hdGthbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMDcKK21zZ2lkICIiCisicmVzY3VlIFNUQVJUIEVORCAgICAgICAgICAgICAgICAgICAgICAgICByZXNjdWUgYSBsb3N0IHBhcnRpdGlvbiBuZWFyIFNUQVJUICIKKyJhbmQgRU5EIgorbXNnc3RyICIiCisic2VsYW1hdGthbiBBV0FMIEFLSElSICAgICAgICAgICAgICAgICAgICBtZW55ZWxhbWF0a2FuIHBhcnRpc2kgeWFuZyBoaWxhbmcgIgorImRpZGVrYXQgYWxhbWF0IEFXQUwgZGFuIEFLSElSIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIxMworbXNnaWQgInJlc2l6ZSIKK21zZ3N0ciAicmVzaXplIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIxNgorbXNnaWQgIiIKKyJyZXNpemUgTlVNQkVSIFNUQVJUIEVORCAgICAgICAgICAgICAgICAgIHJlc2l6ZSBwYXJ0aXRpb24gTlVNQkVSIGFuZCBpdHMgIgorImZpbGUgc3lzdGVtIgorbXNnc3RyICIiCisicmVzaXplIE5PTU9SIEFXQUwgQUtISVIgICAgICAgICAgICAgICAgICBtZXJ1YmFoIHVrdXJhbiBwYXJ0aXNpIE5PTU9SIGRhbiAiCisiaXNpIGZpbGVzeXN0ZW1ueWEiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjI0Cittc2dpZCAicm0iCittc2dzdHIgImhhcHVzIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIyNworbXNnaWQgInJtIE5VTUJFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHBhcnRpdGlvbiBOVU1CRVIiCittc2dzdHIgImhhcHVzIE5PTU9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFwdXMgcGFydGlzaSBOT01PUiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMzIKK21zZ2lkICJzZWxlY3QiCittc2dzdHIgInBpbGloIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIzNQorbXNnaWQgInNlbGVjdCBERVZJQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvb3NlIHRoZSBkZXZpY2UgdG8gZWRpdCIKK21zZ3N0ciAiIgorInBpbGloIFBFUkFOR0tBVCAgICAgICAgICAgICAgICAgICAgICAgICAgcGlsaWggcGVyYW5na2F0IHlhbmcgYWthbiBkaSBlZGl0IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI0MAorbXNnaWQgInNldCIKK21zZ3N0ciAic2V0IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI0MworbXNnaWQgIiIKKyJzZXQgTlVNQkVSIEZMQUcgU1RBVEUgICAgICAgICAgICAgICAgICAgIGNoYW5nZSB0aGUgRkxBRyBvbiBwYXJ0aXRpb24gTlVNQkVSIgorbXNnc3RyICIiCisic2V0IE5PTU9SIEZMQUcgU1RBVFVTICAgICAgICAgICAgICAgICAgICBtZXJ1YmFoIHRhbmRhIHBhZGEgcGFydGlzaSBOT01PUiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNDkKK21zZ2lkICJ0b2dnbGUiCittc2dzdHIgInViYWgiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjUyCittc2dpZCAiIgorInRvZ2dsZSBbTlVNQkVSIFtGTEFHXV0gICAgICAgICAgICAgICAgICAgdG9nZ2xlIHRoZSBzdGF0ZSBvZiBGTEFHIG9uICIKKyJwYXJ0aXRpb24gTlVNQkVSIgorbXNnc3RyICIiCisidWJhaCBbTk9NT1IgW1RBTkRBXV0gICAgICAgICAgICAgICAgICAgICB1YmFoIGtlYWRhYW4gZGFyaSBUQU5EQSBkaSBwYXJ0aXNpICIKKyJOT01PUiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNTgKK21zZ2lkICJ1bml0IgorbXNnc3RyICJzYXR1YW4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjYxCittc2dpZCAidW5pdCBVTklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgdGhlIGRlZmF1bHQgdW5pdCB0byBVTklUIgorbXNnc3RyICIiCisic2F0dWFuIFNBVFVBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW5nZXNldCBzYXR1YW4gZGVmYXVsdCBwYWRhIFNBVFVBTiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNjYKK21zZ2lkICJ2ZXJzaW9uIgorbXNnc3RyICJ2ZXJzaSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNjkKKyMsIGZ1enp5Cittc2dpZCAiIgorInZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheSB0aGUgdmVyc2lvbiBudW1iZXIgYW5kICIKKyJjb3B5cmlnaHQgaW5mb3JtYXRpb24gb2YgR05VIFBhcnRlZCIKK21zZ3N0ciAiIgorInZlcnNpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVuYW1waWxrYW4gdmVyc2kgZGFyaSBHTlUgUGFydGVkICIKKyJkYW4gaW5mb3JtYXNpIGhhayBjaXB0YSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNzMKKyMsIGZ1enp5Cittc2dpZCAiIgorIid2ZXJzaW9uJyBkaXNwbGF5cyBjb3B5cmlnaHQgYW5kIHZlcnNpb24gaW5mb3JtYXRpb24gY29ycmVzcG9uZGluZyB0byB0aGlzICIKKyJjb3B5IG9mIEdOVSBQYXJ0ZWRcbiIKK21zZ3N0ciAiIgorInZlcnNpIG1lbmFtcGlsa2FuIGhhayBjaXB0YSBkYW4gaW5mb3JtYXNpIHZlcnNpIHNlc3VhaSBkZW5nYW4ga29waSBkYXJpIEdOVSAiCisiUGFydGVkIGluaVxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjMzNQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1obG1zdl0gW0RFVklDRSBbQ09NTUFORCBbUEFSQU1FVEVSU11dLi4uXVxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMzc5Cittc2dpZCAiTm8gZGV2aWNlIGZvdW5kIgorbXNnc3RyICJUaWRhayBkaXRlbXVrYW4gcGVyYW5na2F0IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjQxMgorIywgZnV6enkKK21zZ2lkICJXQVJOSU5HOiBZb3UgYXJlIG5vdCBzdXBlcnVzZXIuICBXYXRjaCBvdXQgZm9yIHBlcm1pc3Npb25zLiIKK21zZ3N0ciAiUEVSSU5HQVRBTjogQW5kYSBidWthbiBzdXBlcnVzZXIuIFBlcmhhdGlrYW4gcGVybWlzaSBhbmRhLlxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjQ1MAorIywgZnV6enkKK21zZ2lkICJZb3UgbWF5IG5lZWQgdG8gdXBkYXRlIC9ldGMvZnN0YWIuXG4iCittc2dzdHIgIkphbmdhbiBsdXBhIHVudHVrIG1lbmctdXBkYXRlIC9ldGMvZnN0YWIsIGppa2EgZGlwZXJsdWthbi5cbiIKKworIzogcGFydGVkL3VpLmM6MTYwCittc2dpZCAiV2VsY29tZSB0byBHTlUgUGFydGVkISBUeXBlICdoZWxwJyB0byB2aWV3IGEgbGlzdCBvZiBjb21tYW5kcy5cbiIKK21zZ3N0ciAiIgorIlNlbGFtYXQgZGF0YW5nIGRpIEdOVSBQYXJ0ZWR8IEtldGlrICdiYW50dWFuJyB1bnR1ayBtZWxpaGF0IGRhZnRhciBkYXJpICIKKyJwZXJpbnRhaCB5YW5nIHRlcnNlZGlhLlxuIgorCisjOiBwYXJ0ZWQvdWkuYzoxNjMKK21zZ2lkICIiCisiVXNhZ2U6IHBhcnRlZCBbT1BUSU9OXS4uLiBbREVWSUNFIFtDT01NQU5EIFtQQVJBTUVURVJTXS4uLl0uLi5dXG4iCisiQXBwbHkgQ09NTUFORHMgd2l0aCBQQVJBTUVURVJTIHRvIERFVklDRS4gIElmIG5vIENPTU1BTkQocykgYXJlIGdpdmVuLCBydW4gIgorImluXG4iCisiaW50ZXJhY3RpdmUgbW9kZS5cbiIKK21zZ3N0ciAiIgorIlBlbmdndW5hYW46IHBhcnRlZCBbT1BTSV0uLi4gW1BFUkFOR0tBVCBbUEVSSU5UQUggW1BBUkFNRVRFUlNdLi4uXS4uLl1cbiIKKyJCZXJpa2FuIFBFUklOVEFIIGRlbmdhbiBQQVJBTUVURVIga2UgUEVSQU5HS0FULiBKaWthIHRpZGFrIGFkYSBQRVJJTlRBSCB5YW5nICIKKyJkaWJlcmlrYW4sXG4iCisibWFrYSBwYXJ0ZWQgYWthbiBiZXJqYWxhbiBkZW5nYW4gbWVuZ2d1bmFrYW4gbW9kZSBpbnRlcmFrdGlmLlxuIgorCisjOiBwYXJ0ZWQvdWkuYzoxNjgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJcbiIKKyJZb3UgZm91bmQgYSBidWcgaW4gR05VIFBhcnRlZCEgSGVyZSdzIHdoYXQgeW91IGhhdmUgdG8gZG86XG4iCisiXG4iCisiRG9uJ3QgcGFuaWMhIFRoZSBidWcgaGFzIG1vc3QgbGlrZWx5IG5vdCBhZmZlY3RlZCBhbnkgb2YgeW91ciBkYXRhLlxuIgorIkhlbHAgdXMgdG8gZml4IHRoaXMgYnVnIGJ5IGRvaW5nIHRoZSBmb2xsb3dpbmc6XG4iCisiXG4iCisiQ2hlY2sgd2hldGhlciB0aGUgYnVnIGhhcyBhbHJlYWR5IGJlZW4gZml4ZWQgYnkgY2hlY2tpbmdcbiIKKyJ0aGUgbGFzdCB2ZXJzaW9uIG9mIEdOVSBQYXJ0ZWQgdGhhdCB5b3UgY2FuIGZpbmQgYXQ6XG4iCisiXG4iCisiXHRodHRwOi8vZnRwLmdudS5vcmcvZ251L3BhcnRlZC9cbiIKKyJcbiIKKyJQbGVhc2UgY2hlY2sgdGhpcyB2ZXJzaW9uIHByaW9yIHRvIGJ1ZyByZXBvcnRpbmcuXG4iCisiXG4iCisiSWYgdGhpcyBoYXMgbm90IGJlZW4gZml4ZWQgeWV0IG9yIGlmIHlvdSBkb24ndCBrbm93IGhvdyB0byBjaGVjayxcbiIKKyJwbGVhc2UgdmlzaXQgdGhlIEdOVSBQYXJ0ZWQgd2Vic2l0ZTpcbiIKKyJcbiIKKyJcdGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9wYXJ0ZWRcbiIKKyJcbiIKKyJmb3IgZnVydGhlciBpbmZvcm1hdGlvbi5cbiIKKyJcbiIKKyJZb3VyIHJlcG9ydCBzaG91bGQgY29udGFpbiB0aGUgdmVyc2lvbiBvZiB0aGlzIHJlbGVhc2UgKCVzKVxuIgorImFsb25nIHdpdGggdGhlIGVycm9yIG1lc3NhZ2UgYmVsb3csIHRoZSBvdXRwdXQgb2ZcbiIKKyJcbiIKKyJcdHBhcnRlZCBERVZJQ0UgdW5pdCBjbyBwcmludCB1bml0IHMgcHJpbnRcbiIKKyJcbiIKKyJhbmQgdGhlIGZvbGxvd2luZyBoaXN0b3J5IG9mIGNvbW1hbmRzIHlvdSBlbnRlcmVkLlxuIgorIkFsc28gaW5jbHVkZSBhbnkgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB5b3VyIHNldHVwIHlvdVxuIgorImNvbnNpZGVyIGltcG9ydGFudC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIlxuIgorIkFuZGEgbWVuZW11a2FuIHNlYnVhaCBidWcgZGFsYW0gR05VIFBhcnRlZCEgSW5pIHlhbmcgaGFydXMgYW5kYSBsYWt1a2FuOlxuIgorIlxuIgorIkphbmdhbiBwYW5pYyEgQnVnIHlhbmcgYWRhIGJpYXNhbnlhIHRpZGFrIG1lbXBlbmdhcnVoaSBkYXRhIGFuZGEuXG4iCisiQmFudHUga2FtaSB1bnR1ayBtZW1iZXR1bGthbiBidWcgaW5pIGRlbmdhbiBtZWxha3VrYW4gaGFsIGJlcmlrdXQ6XG4iCisiXG4iCisiQ2hlY2sgYXBha2FoIGJ1ZyB0ZWxhaCBkaWJldHVsa2FuIGRlbmdhbiBtZW5nZWNoZWNrXG4iCisidmVyc2kgdGVyYmFydSBkYXJpIEdOVSBQYXJ0ZWQgeWFuZyBkYXBhdCBhbmRhIHRlbXVrYW4gZGk6XG4iCisiXG4iCisiXHRodHRwOi8vZnRwLmdudS5vcmcvZ251L3BhcnRlZC9cbiIKKyJcbiIKKyJKaWthIGJ1ZyBpbmkgYmVsdW0gZGliZXR1bGthbiBhdGF1IGppa2EgYW5kYSB0aWRhayB0YWh1IGJhZ2FpbWFuYSBjYXJhICIKKyJtZW5nZWNoZWNrbnlhLFxuIgorImt1bmp1bmdpIEdOVSBQYXJ0ZWQgd2Vic2l0ZTpcbiIKKyJcbiIKKyJcdGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9wYXJ0ZWRcbiIKKyJcbiIKKyJ1bnR1ayBpbmZvcm1hc2kgbGViaWggbGFuanV0LlxuIgorIlxuIgorIkxhcG9yYW4gYW5kYSBzZWhhcnVzbnlhIGJlcmlzaSB2ZXJzaSBkYXJpIHJlbGVhc2UgaW5pICglcylcbiIKKyJkZW5nYW4gcGVzYW4gZXJyb3IgZGliYXdhaCBpbmksIGRhbiBvdXRwdXQgZGFyaSBwZXJpbnRhaCBiZXJpa3V0IGluaVxuIgorIlxuIgorIlx0cGFydGVkIERFVklDRSB1bml0IGNvIHByaW50IHVuaXQgcyBwcmludFxuIgorIlxuIgorImRhbiBiZWJlcmFwYSBpbmZvcm1hc2kgdGFtYmFoYW4gbWVuZ2VuYWkgc2V0dGluZyB5YW5nIHRlbGFoIGFuZGEgbGFrdWthbiAiCisieWFuZyBtZW51cnV0IGFuZGEgcGVudGluZy5cbiIKKworIzogcGFydGVkL3VpLmM6Mjg0Cittc2dpZCAiIgorIlxuIgorIkNvbW1hbmQgSGlzdG9yeTpcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzozNjYKKyMsIGZ1enp5Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBTRUdWX01BUEVSUiAoQWRkcmVzcyBub3QgbWFwcGVkIHRvIG9iamVjdClcbiIKK21zZ3N0ciAiIgorIlxuIgorIkVycm9yOiBTRUdWX01BUFBFUiAoQWxhbWF0IHRpZGFrIGRpIG1hcCBrZSBvYmplaykiCisKKyM6IHBhcnRlZC91aS5jOjM3MgorIywgZnV6enkKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IFNFR1ZfQUNDRVJSIChJbnZhbGlkIHBlcm1pc3Npb25zIGZvciBtYXBwZWQgb2JqZWN0KVxuIgorbXNnc3RyICIiCisiXG4iCisiRXJyb3I6IFNFR1ZfQUNDRVIgKFBlcm1pc2kgdGlkYWsgc2FoIHVudHVrIG9iamVrIHlhbmcgZGltYXApIgorCisjOiBwYXJ0ZWQvdWkuYzozNzcKKyMsIGZ1enp5Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBBIGdlbmVyYWwgU0lHU0VHViBzaWduYWwgd2FzIGVuY291bnRlcmVkLlxuIgorbXNnc3RyICIiCisiXG4iCisiRXJyb3I6IFNlYnVhaCBzaW55YWwgU0lHU0VHViB1bXVtIHRlbGFoIGRpdGVtdWkuIgorCisjOiBwYXJ0ZWQvdWkuYzo0MTAKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9JTlRESVYgKEludGVnZXI6IGRpdmlkZSBieSB6ZXJvKSIKK21zZ3N0ciAiIgorIlxuIgorIkVycm9yOiBGUEVfSU5URElWIChJbnRlZ2VyOiBkaWJhZ2kgZGVuZ2FuIG5vbCkiCisKKyM6IHBhcnRlZC91aS5jOjQxNQorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0lOVE9WRiAoSW50ZWdlcjogb3ZlcmZsb3cpIgorbXNnc3RyICIiCisiXG4iCisiRXJyb3I6IEZQRV9JTlRPVkYgKEludGVnZXI6IG92ZXJmbG93KSIKKworIzogcGFydGVkL3VpLmM6NDIwCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxURElWIChGbG9hdDogZGl2aWRlIGJ5IHplcm8pIgorbXNnc3RyICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRESVYgKEZsb2F0OiBkaWJhZ2kgZGVuZ2FuIG5vbCkiCisKKyM6IHBhcnRlZC91aS5jOjQyNQorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0ZMVE9WRiAoRmxvYXQ6IG92ZXJmbG93KSIKK21zZ3N0ciAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxUT1ZGIChGbG9hdDogb3ZlcmZsb3cpIgorCisjOiBwYXJ0ZWQvdWkuYzo0MzAKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRVTkQgKEZsb2F0OiB1bmRlcmZsb3cpIgorbXNnc3RyICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRVTkQgKEZsb2F0OiB1bmRlcmZsb3cpIgorCisjOiBwYXJ0ZWQvdWkuYzo0MzUKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRSRVMgKEZsb2F0OiBpbmV4YWN0IHJlc3VsdCkiCittc2dzdHIgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0ZMVFJFUyAoRmxvYXQ6IGhhc2lsIHRpZGFrIGVrc2FrKSIKKworIzogcGFydGVkL3VpLmM6NDQwCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxUSU5WIChGbG9hdDogaW52YWxpZCBvcGVyYXRpb24pIgorbXNnc3RyICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRJTlYgKEZsb2F0OiBvcGVyYXNpIHRpZGFrIHZhbGlkKSIKKworIzogcGFydGVkL3VpLmM6NDQ1Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxUU1VCIChGbG9hdDogc3Vic2NyaXB0IG91dCBvZiByYW5nZSkiCittc2dzdHIgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0ZMVFNVQiAoRmxvYXQ6IHN1YnNjcmlwdCBkaWx1YXIgZGFyaSBqYW5na2F1YW4pIgorCisjOiBwYXJ0ZWQvdWkuYzo0NTAKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEEgZ2VuZXJhbCBTSUdGUEUgc2lnbmFsIHdhcyBlbmNvdW50ZXJlZC4iCittc2dzdHIgIiIKKyJcbiIKKyJFcnJvcjogU2VidWFoIHNpbnlhbCBTSUdGUEUgdW11bSB0ZWxhaCBkaXRlbXVrYW4uIgorCisjOiBwYXJ0ZWQvdWkuYzo0ODMKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9JTExPUEMgKElsbGVnYWwgT3Bjb2RlKSIKK21zZ3N0ciAiIgorIlxuIgorIkVycm9yOiBJTExfSUxMT1BDIChJbGxlZ2FsIE9wY29kZSkiCisKKyM6IHBhcnRlZC91aS5jOjQ4OAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX0lMTE9QTiAoSWxsZWdhbCBPcGVyYW5kKSIKK21zZ3N0ciAiIgorIlxuIgorIkVycm9yOiBJTExfSUxMT1BOIChJbGxlZ2FsIE9wZXJhbmQpIgorCisjOiBwYXJ0ZWQvdWkuYzo0OTMKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9JTExBRFIgKElsbGVnYWwgYWRkcmVzc2luZyBtb2RlKSIKK21zZ3N0ciAiIgorIlxuIgorIkVycm9yOiBJTExfSUxMQUREUiAoSWxsZWdhbCBtb2RlIHBlbmdhbGFtYXRhbikiCisKKyM6IHBhcnRlZC91aS5jOjQ5OAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX0lMTFRSUCAoSWxsZWdhbCBUcmFwKSIKK21zZ3N0ciAiIgorIlxuIgorIkVycm9yOiBJTExfSUxMVFJQIChJbGxlZ2FsIFRyYXApIgorCisjOiBwYXJ0ZWQvdWkuYzo1MDMKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9QUlZPUEMgKFByaXZpbGVnZWQgT3Bjb2RlKSIKK21zZ3N0ciAiIgorIlxuIgorIkVycm9yOiBJTExfUFJWT1BDIChQcml2aWxlZ2VkIE9wY29kZSkiCisKKyM6IHBhcnRlZC91aS5jOjUwOAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX1BSVlJFRyAoUHJpdmlsZWdlZCBSZWdpc3RlcikiCittc2dzdHIgIiIKKyJcbiIKKyJFcnJvcjogSUxMX1BSVlJFRyAoUHJpdmlsZWdlZCBSZWdpc3RlcikiCisKKyM6IHBhcnRlZC91aS5jOjUxMworbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX0NPUFJPQyAoQ29wcm9jZXNzb3IgRXJyb3IpIgorbXNnc3RyICIiCisiXG4iCisiRXJyb3I6IElMTF9DT1BST0MgKENvcHJvY2Vzc29yIEVycm9yKSIKKworIzogcGFydGVkL3VpLmM6NTE4Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfQkFEU1RLIChJbnRlcm5hbCBTdGFjayBFcnJvcikiCittc2dzdHIgIiIKKyJcbiIKKyJFcnJvcjogSUxMX0JBRFNUSyAoSW50ZXJuYWwgU3RhY2sgRXJyb3IpIgorCisjOiBwYXJ0ZWQvdWkuYzo1MjMKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEEgZ2VuZXJhbCBTSUdJTEwgc2lnbmFsIHdhcyBlbmNvdW50ZXJlZC4iCittc2dzdHIgIiIKKyJcbiIKKyJFcnJvcjogU2VidWFoIHNpbnlhbCBTSUdJTEwgdW11bSB0ZWxhaCBkaXRlbXVrYW4uIgorCisjOiBwYXJ0ZWQvdWkuYzoxMDI0Cittc2dpZCAiRXhwZWN0aW5nIGEgcGFydGl0aW9uIG51bWJlci4iCittc2dzdHIgIk1lbXBlcmtpcmFrYW4gc2VidWFoIG5vbW9yIHBhcnRpc2kuIgorCisjOiBwYXJ0ZWQvdWkuYzoxMDMzCittc2dpZCAiUGFydGl0aW9uIGRvZXNuJ3QgZXhpc3QuIgorbXNnc3RyICJQYXJ0aXNpIHRpZGFrIGFkYS4iCisKKyM6IHBhcnRlZC91aS5jOjEwNTMKK21zZ2lkICJFeHBlY3RpbmcgYSBmaWxlIHN5c3RlbSB0eXBlLiIKK21zZ3N0ciAiTWVtcGVya2lyYWthbiBzZWJ1YWggdGlwZSBmaWxlc3lzdGVtLiIKKworIzogcGFydGVkL3VpLmM6MTA2MAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIGZpbGUgc3lzdGVtIHR5cGUgXCIlc1wiLiIKK21zZ3N0ciAiVGlwZSBmaWxlc3lzdGVtIHRpZGFrIGRpa2V0YWh1aSBcIiVzXCIuIgorCisjOiBwYXJ0ZWQvdWkuYzoxMDgwCittc2dpZCAiRXhwZWN0aW5nIGEgZGlzayBsYWJlbCB0eXBlLiIKK21zZ3N0ciAiTWVtcGVya2lyYWthbiBzZWJ1YWggdGlwZSBkaXNrIGxhYmVsLiIKKworIzogcGFydGVkL3VpLmM6MTE3OAorbXNnaWQgIkNhbid0IGNyZWF0ZSBhbnkgbW9yZSBwYXJ0aXRpb25zLiIKK21zZ3N0ciAiVGlkYWsgZGFwYXQgbWVtYnVhdCBwYXJ0aXNpIGxhZ2kuIgorCisjOiBwYXJ0ZWQvdWkuYzoxMTg4Cittc2dpZCAiRXhwZWN0aW5nIGEgcGFydGl0aW9uIHR5cGUuIgorbXNnc3RyICJNZW1wZXJraXJha2FuIHNlYnVhaCB0aXBlIHBhcnRpc2kuIgorCisjOiBwYXJ0ZWQvdWkuYzoxMzE1Cittc2dpZCAib24iCittc2dzdHIgIm55YWxhIgorCisjOiBwYXJ0ZWQvdWkuYzoxMzE2Cittc2dpZCAib2ZmIgorbXNnc3RyICJtYXRpIgorCisjOiBwYXJ0ZWQvdWkuYzoxNDMxCittc2dpZCAiT1BUSU9OczoiCittc2dzdHIgIk9QU0k6IgorCisjOiBwYXJ0ZWQvdWkuYzoxNDM2Cittc2dpZCAiQ09NTUFORHM6IgorbXNnc3RyICJQRVJJTlRBSDoiCisKKyM6IHBhcnRlZC91aS5jOjE0NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNpbmcgJXNcbiIKK21zZ3N0ciAiTWVuZ2d1bmFrYW4gcGVyYW5na2F0ICVzXG4iCisKKyM6IHBhcnRlZC91aS5jOjE1MTkKK21zZ2lkICJUaGlzIGNvbW1hbmQgZG9lcyBub3QgbWFrZSBzZW5zZSBpbiBub24taW50ZXJhY3RpdmUgbW9kZS5cbiIKK21zZ3N0ciAiIgorCisjfiBtc2dpZCAiR05VIFBhcnRlZCBjYW5ub3QgcmVzaXplIHRoaXMgZmlsZSBzeXN0ZW0sIHBsZWFzZSB1c2VyZXNpemUyZnMuIgorI34gbXNnc3RyICIiCisjfiAiR05VIFBhcnRlZCB0aWRhayBkYXBhdCBtZW5ndWJhaCB1a3VyYW4gZGFyaSBmaWxlc3lzdGVtIGluaSwgdG9sb25nICIKKyN+ICJndW5ha2FuIHVzZXJlc2l6ZTJmcy4iCisKKyN+IG1zZ2lkICJ3aGVyZSBuZWNlc3NhcnksIHByb21wdHMgZm9yIHVzZXIgaW50ZXJ2ZW50aW9uIgorI34gbXNnc3RyICJqaWthIGRpcGVybHVrYW4sIHRhbnlha2FuIGludGVydmVuc2kgcGVuZ2d1bmEiCisKKyN+IG1zZ2lkICJHTlUgUGFydGVkIFZlcnNpb24gaW5mb3JtYXRpb246XG4iCisjfiBtc2dzdHIgIkluZm9ybWFzaSB2ZXJzaSBkYXJpIEdOVSBQYXJ0ZWQ6XG4iCisKKyN+IG1zZ2lkICIiCisjfiAicHJpbnQgW2ZyZWV8TlVNQkVSfGFsbF0gICAgICAgICAgICAgICAgICBkaXNwbGF5IHRoZSBwYXJ0aXRpb24gdGFibGUsIGEgIgorI34gInBhcnRpdGlvbiwgb3IgYWxsIGRldmljZXMiCisjfiBtc2dzdHIgIiIKKyN+ICJjZXRhayBbTk9NT1JdICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbmFtcGlsa2FuIHRhYmVsIHBhcnRpc2ksIGF0YXUgIgorI34gInNlYnVhaCBwYXJ0aXNpIgorCisjfiBtc2dpZCAiIgorI34gIldpdGhvdXQgYXJndW1lbnRzLCBwcmludCBkaXNwbGF5cyB0aGUgZW50aXJlIHBhcnRpdGlvbiB0YWJsZS4gV2l0aCAiCisjfiAiJ2ZyZWUnXG4iCisjfiAiYXJndW1lbnQsIGluZm9ybWF0aW9uIGFib3V0IGZyZWUgc3BhY2Ugd2lsbCBiZSBkaXNwbGF5ZWQgb3RoZXJ3aXNlIGlmIGFcbiIKKyN+ICJwYXJ0aXRpb24gbnVtYmVyIGlzIGdpdmVuLCB0aGVuIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gaXMgZGlzcGxheWVkXG4iCisjfiAiYWJvdXQgdGhhdCBwYXJ0aXRpb24uIElmIHRoZSAnYWxsJyBhcmd1bWVudCBpcyBwYXNzZWQgaW5zdGVhZCwgcGFydGl0aW9uXG4iCisjfiAiaW5mb3JtYXRpb24gZm9yIGFsbCBkZXZpY2VzIHdpbGwgYmUgZGlzcGxheWVkLlxuIgorI34gbXNnc3RyICIiCisjfiAiVGFucGEgYXJndW1lbiwgbWVuYW1waWxrYW4gc2VsdXJ1aCB0YWJlbCBwYXJ0aXNpLiBEZW5nYW4gJ2ZyZWUnICIKKyN+ICJhcmd1bWVuLCBcbiIKKyN+ICJtYWthIGluZm9ybWFzaSBtZW5nZW5haSBmcmVlIHNwYWNlIGFrYW4gZGl0YW1waWxrYW4gc2ViYWxpa255YSBqaWthICIKKyN+ICJzZWJ1YWggXG4iCisjfiAibm9tb3IgcGFydGlzaSBkaWJlcmlrYW4sIG1ha2EgaW5mb3JtYXNpIGxlYmloIGRldGFpbCBtZW5nZW5haSBwYXJ0aXNpICIKKyN+ICJ0ZXJzZWJ1dFxuIgorI34gImRpdGFtcGlsa2FuLiBKaWthICdhbGwnIGFyZ3VtZW4gZGkgYmVyaWthbiwgbWFrYSBpbmZvcm1hc2kgc2VsdXJ1aCAiCisjfiAicGFydGlzaSBwYWRhXG4iCisjfiAicGVyYW5na2F0IGFrYW4gZGl0YW1waWxrYW4uXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiVGhlIHNlY3RvciBzaXplIG9uICVzIGlzICVkIGJ5dGVzLiAgUGFydGVkIGlzIGtub3duIG5vdCB0byB3b3JrIHByb3Blcmx5ICIKKyN+ICJ3aXRoIGRyaXZlcyB3aXRoIHNlY3RvciBzaXplcyBvdGhlciB0aGFuICVkIGJ5dGVzLiIKKyN+IG1zZ3N0ciAiIgorI34gIlVrdXJhbiBzZWt0b3IgcGFkYSAlcyBhZGFsYWggJWQgYnl0ZXMuIFBhcnRlZCB0aWRhayBkYXBhdCBiZWtlcmphIHNlY2FyYSAiCisjfiAibm9ybWFsIGRlbmdhbiBkcml2ZXMgZGVuZ2FuIHVrdXJhbiBzZWt0b3Igc2VsYWluIGRhcmkgJWQgYnl0ZXMuIgorCisjfiBtc2dpZCAiSURFIgorI34gbXNnc3RyICJJREUiCisKKyN+IG1zZ2lkICJBdHRlbXB0IHRvIHJlYWQgc2VjdG9ycyAlbGQtJWxkIG91dHNpZGUgb2YgcGFydGl0aW9uIG9uICVzLiIKKyN+IG1zZ3N0ciAiTWVuY29iYSB1bnR1ayBtZW1iYWNhIHNla3RvciAlbGQtJWxkIGRpbHVhciBkYXJpIHBhcnRpc2kgcGFkYSAlcy4iCisKKyN+IG1zZ2lkICIiCisjfiAiVGhpcyBleHQyIGZpbGUgc3lzdGVtIGhhcyBhIHJhdGhlciBzdHJhbmdlIGxheW91dCEgIFBhcnRlZCBjYW4ndCByZXNpemUgIgorI34gInRoaXMgKHlldCkuIgorI34gbXNnc3RyICIiCisjfiAiRmlsZSBzeXN0ZW0gZXh0MiBpbmkgbWVtaWxpa2kgc2VidWFoIGxheW91dCB5YW5nIGFuZWghIFBhcnRlZCB0aWRhayBkYXBhdCAiCisjfiAibWVucmVzaXplIGluaSIKKworI34gbXNnaWQgIiIKKyN+ICJZb3UgaGF2ZSBhbiBIRlMrIGZpbGUgc3lzdGVtIHRoYXQgaGFzIGEgZmVhdHVyZSB0aGF0IEkgaGF2ZW4ndCBzZWVuIHVzZWQgIgorI34gImFueXdoZXJlLiAgUGFydGVkIGNhbiB0aGVvcmV0aWNhbGx5IGhhbmRsZSBpdCwgYnV0IHRoZSBjb3JyZXNwb25kaW5nIGNvZGUgIgorI34gImhhcyBuZXZlciBiZWVuIHRlc3RlZCwgc28gdGhpcyBtaWdodCBiZSByaXNreS4gIFBsZWFzZSBlbWFpbCBtZSBzbyBJIGNhbiAiCisjfiAic2VlIGhvdyBpdCB3b3JrcyEgIDx4eHhAeXl5Lnp6PiIKKyN+IG1zZ3N0ciAiIgorI34gIkFuZGEgbWVtaWxpa2kgc2VidWFoIEhGUysgZmlsZSBzeXN0ZW0geWFuZyBtZW1pbGlraSBmZWF0dXJlIHlhbmcgc2F5YSAiCisjfiAiYmVsdW0gcGVybmFoIGxpaGF0IHNlYmVsdW1ueWEgZGltYW5hcHVuLiBQYXJ0ZWQgc2VjYXJhIHRlb3JpIGRhcGF0ICIKKyN+ICJtZW5hbmdhbmlueWEsIHRldGFwaSBrb2RlIHlhbmcgYmVyaHVidW5nYW4gZGVuZ2FuIGl0dSBiZWx1bSBkaXRlc3QsIGphZGkgIgorI34gImluaSBtdW5na2luIGJlcmVzaWtvLiBUb2xvbmcgZW1haWwgc2F5YSBzZWhpbmdnYSBzYXlhIGJpc2EgdGFodSBqaWthIGluaSAiCisjfiAiYmVrZXJqYSEgPHh4eEB5eXkueno+IgorCisjfiBtc2dpZCAiIgorI34gIlRoZSBleHRlbnRzIG92ZXJmbG93IGZpbGUgc2hvdWxkIG5vdCBjb250YWluIGl0cyBvd24gZXh0ZW50cy4gIFlvdSBzaG91bGQgIgorI34gImNoZWNrIHRoZSBmaWxlIHN5c3RlbS4iCisjfiBtc2dzdHIgIiIKKyN+ICJFeHRlbnQgb3ZlcmZsb3cgZmlsZSBzZWhhcnVzbnlhIHRpZGFrIGJlcmlzaSBpdHMgb3duIGV4dGVudHMuIEFuZGEgIgorI34gInNlYmFpa255YSBtZW5nZWNoZWNrIGZpbGUgc3lzdGVtLiIKKworI34gbXNnaWQgIkRpc2sgZ2VvbWV0cnkgZm9yICVzOiAlcyAtICVzXG4iCisjfiBtc2dzdHIgIkdlb21ldHJpIHVudHVrIGRpc2sgJXM6ICVzIC0gJXNcbiIKKworI34gbXNnaWQgIkRpc2sgbGFiZWwgdHlwZTogJXNcbiIKKyN+IG1zZ3N0ciAiVGlwZSBkaXNrIGxhYmVsOiAlc1xuIgorCisjfiBtc2dpZCAiIgorI34gIlxuIgorI34gIlxuIgorI34gIllvdSBmb3VuZCBhIGJ1ZyBpbiBHTlUgUGFydGVkLlxuIgorI34gIlRoaXMgbWF5IGhhdmUgYmVlbiBmaXhlZCBpbiB0aGUgbGFzdCB2ZXJzaW9uIG9mIEdOVSBQYXJ0ZWQgdGhhdCB5b3UgY2FuICIKKyN+ICJmaW5kIGF0OlxuIgorI34gIlx0aHR0cDovL2Z0cC5nbnUub3JnL2dudS9wYXJ0ZWQvXG4iCisjfiAiSWYgdGhpcyBoYXMgbm90IGJlZW4gZml4ZWQgb3IgaWYgeW91IGRvbid0IGtub3cgaG93IHRvIGNoZWNrLCBwbGVhc2UgIgorI34gImVtYWlsOlxuIgorI34gIlx0YnVnLXBhcnRlZEBnbnUub3JnXG4iCisjfiAib3IgKHByZWZlcmFibHkpIGZpbGUgYSBidWcgcmVwb3J0IGF0OlxuIgorI34gIlx0aHR0cDovL3BhcnRlZC5hbGlvdGguZGViaWFuLm9yZy9idWdzL1xuIgorI34gIllvdXIgcmVwb3J0IHNob3VsZCBjb250YWluIHRoZSB2ZXJzaW9uIG9mIHRoaXMgcmVsZWFzZSAoJXMpIGFsb25nIHdpdGggIgorI34gInRoZVxuIgorI34gImZvbGxvd2luZyBtZXNzYWdlIGFuZCBwcmVmZXJhYmx5IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgeW91ciAiCisjfiAic2V0dXAuXG4iCisjfiAiUmVmZXIgdG8gdGhlIHdlYiBzaXRlIG9mIHBhcnRlZFxuIgorI34gIlx0aHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3BhcnRlZC9wYXJ0ZWQuaHRtbFxuIgorI34gImZvciBtb3JlIGluZm9ybWF0aW9ucyBvZiB3aGF0IGNvdWxkIGJlIHVzZWZ1bCBmb3IgYnVnIHN1Ym1pdHRpbmchXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJcbiIKKyN+ICJcbiIKKyN+ICJBbmRhIG1lbmVtdWthbiBzZWJ1YWggYnVnIChrdXR1KSBkYWxhbSBHTlUgUGFydGVkLlxuIgorI34gIkluaSBtdW5na2luIHN1ZGFoIGRpYmV0dWxrYW4gZGFsYW0gdmVyc2kgdGVyYWtoaXIgZGFyaSBHTlUgUGFydGVkIHlhbmcgIgorI34gImFrYW4gYW5kYSB0ZW11a2FuIGRpOlxuIgorI34gIlx0aHR0cDovL2Z0cC5nbnUub3JnL2dudS9wYXJ0ZWQvXG4iCisjfiAiSmlrYSBpbmkgYmVsdW0gZGliZXR1bGthbiBhdGF1IGFuZGEgdGlkYWsgdGFodSBiYWdhaW1hbmEgdW50dWsgIgorI34gIm1lbmdlY2hlY2ssIG1vaG9uIGVtYWlsOlxuIgorI34gIlx0YnVnLXBhcnRlZEBnbnUub3JnXG4iCisjfiAiYXRhdSAoYW5kYSBsZWJpaCBzdWthKSB1bnR1ayBtZW5naXJpbSBsYXBvcmFuIGJ1ZyBwYWRhOlxuIgorI34gIlx0aHR0cDovL3BhcnRlZC5hbGlvdGguZGViaWFuLm9yZy9idWdzL1xuIgorI34gIkxhcG9yYW4gYW5kYSBzZWhhcnVzbnlhIGJlcmlzaSB2ZXJzaSBkYXJpIHJlbGVhc2UgaW5pICglcykgZGVuZ2FuIHBlc2FuXG4iCisjfiAiYmVyaWt1dCBpbmkgZGFuIGxlYmloIGRpc3VrYWkgZGVuZ2FuIGluZm9ybWFzaSB0YW1iYWhhbiBtZW5nZW5haSBzZXR1cCAiCisjfiAiYW5kYS5cbiIKKyN+ICJMaWhhdCBrZSBhbGFtYXQgd2ViIHNpdGUgZGFyaSBwYXJ0ZWQgdW50dWsgaW5mb3JtYXNpIGxlYmloIGxhbmp1dFxuIgorI34gIlx0aHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3BhcnRlZC9wYXJ0ZWQuaHRtbFxuIgorI34gIlVudHVrIGluZm9ybWFzaSB5YW5nIGxlYmloIGJlcmd1bmEgZGFsYW0gbWVuZ2lyaW1rYW4gbGFwb3JhbiBidWcgKGt1dHUpIVxuIgorCisjfiBtc2dpZCAiIgorI34gIlRoaXMgSEZTIHZvbHVtZSBoYXMgbm8gZXh0ZW50cyBvdmVyZmxvdyBmaWxlLiBUaGlzIGlzIHF1aXRlIHVudXN1YWwgISIKKyN+IG1zZ3N0ciAiSEZTIHZvbHVtZSB0aWRhayBtZW1pbGlraSBleHRlbnRzIG92ZXJmbG93IGZpbGUuIEluaSB0aWRhayBiaWFzYSAhIgorCisjfiBtc2dpZCAiIgorI34gIllvdSByZXF1ZXN0ZWQgdG8gY3JlYXRlIGEgcGFydGl0aW9uIGF0ICVzIC0gJXMuIFRoZSBjbG9zZXN0IFBhcnRlZCBjYW4gIgorI34gIm1hbmFnZSBpcyAlcyAtICVzLiIKKyN+IG1zZ3N0ciAiIgorI34gIkFuZGEgbWVtaW50YSB1bnR1ayBtZW1idWF0IHNlYnVhaCBwYXJ0aXNpIHBhZGEgJXMgLSAlcy4gUGVuZGVrYXRhbiBQYXJ0ZWQgIgorI34gInlhbmcgcGFsaW5nIGRla2F0IGFkYWxhaCAlcyAtICVzLiIKKworI34gbXNnaWQgIiIKKyN+ICJZb3UgcmVxdWVzdGVkIHRvIHJlc2l6ZSB0aGUgcGFydGl0aW9uIHRvICVzIC0gJXMuICBUaGUgY2xvc2VzdCBQYXJ0ZWQgY2FuICIKKyN+ICJtYW5hZ2UgaXMgJXMgLSAlcy4iCisjfiBtc2dzdHIgIiIKKyN+ICJBbmRhIG1lbWludGEgdW50dWsgbWVyZXNpemUgcGFydGlzaSBtZW5qYWRpICVzIC0gJXMuIFBhcnRlZCBoYW55YSBkYXBhdCAiCisjfiAibWVuZ2F0YXNpIG1lbmphZGkgeWFuZyB0ZXJkZWthdCBhZGFsYWggJXMgLSAlcy4iCisKKyN+IG1zZ2lkICIiCisjfiAiWW91IGZvdW5kIGEgYnVnIGluIEdOVSBQYXJ0ZWQuICBQbGVhc2UgZW1haWwgYSBidWcgcmVwb3J0IHRvIGJ1Zy0iCisjfiAicGFydGVkQGdudS5vcmcgY29udGFpbmluZyB0aGUgdmVyc2lvbiAoJXMpLCBhbmQgdGhlIGZvbGxvd2luZyBtZXNzYWdlOlxuIgorI34gbXNnc3RyICIiCisjfiAiQW5kYSBtZW5lbXVrYW4gc2VidWFoIGJ1ZyBkYWxhbSBHTlUgUGFydGVkLiBUb2xvbmcgZW1haWwgbGFwb3JhbiBidWcga2UgICIKKyN+ICJidWctcGFydGVkQGdudS5vcmcgeWFuZyBiZXJpc2kgdmVyc2kgKCVzKSwgZGFuIHBlc2FuIGJlcmlrdXQgaW5pOlxuIgpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L3BvL2luc2VydC1oZWFkZXIuc2luIGIvcGFydGVkLTEuOC43L3BvL2luc2VydC1oZWFkZXIuc2luCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyNmRlMDEKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvcG8vaW5zZXJ0LWhlYWRlci5zaW4KQEAgLTAsMCArMSwyMyBAQAorIyBTZWQgc2NyaXB0IHRoYXQgaW5zZXJ0cyB0aGUgZmlsZSBjYWxsZWQgSEVBREVSIGJlZm9yZSB0aGUgaGVhZGVyIGVudHJ5LgorIworIyBBdCBlYWNoIG9jY3VycmVuY2Ugb2YgYSBsaW5lIHN0YXJ0aW5nIHdpdGggIm1zZ2lkICIsIHdlIGV4ZWN1dGUgdGhlIGZvbGxvd2luZworIyBjb21tYW5kcy4gQXQgdGhlIGZpcnN0IG9jY3VycmVuY2UsIGluc2VydCB0aGUgZmlsZS4gQXQgdGhlIGZvbGxvd2luZworIyBvY2N1cnJlbmNlcywgZG8gbm90aGluZy4gVGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gdGhlIGZpcnN0IGFuZCB0aGUgZm9sbG93aW5nCisjIG9jY3VycmVuY2VzIGlzIGFjaGlldmVkIGJ5IGxvb2tpbmcgYXQgdGhlIGhvbGQgc3BhY2UuCisvXm1zZ2lkIC97Cit4CisjIFRlc3QgaWYgdGhlIGhvbGQgc3BhY2UgaXMgZW1wdHkuCitzL20vbS8KK3RhCisjIFllcyBpdCB3YXMgZW1wdHkuIEZpcnN0IG9jY3VycmVuY2UuIFJlYWQgdGhlIGZpbGUuCityIEhFQURFUgorIyBPdXRwdXQgdGhlIGZpbGUncyBjb250ZW50cyBieSByZWFkaW5nIHRoZSBuZXh0IGxpbmUuIEJ1dCBkb24ndCBsb3NlIHRoZQorIyBjdXJyZW50IGxpbmUgd2hpbGUgZG9pbmcgdGhpcy4KK2cKK04KK2JiCis6YQorIyBUaGUgaG9sZCBzcGFjZSB3YXMgbm9uZW1wdHkuIEZvbGxvd2luZyBvY2N1cnJlbmNlcy4gRG8gbm90aGluZy4KK3gKKzpiCit9CmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvcG8vaXQuZ21vIGIvcGFydGVkLTEuOC43L3BvL2l0LmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDMxY2NjCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L3BvL2l0LmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvcG8vaXQucG8gYi9wYXJ0ZWQtMS44LjcvcG8vaXQucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY0ODY2NQotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9wby9pdC5wbwpAQCAtMCwwICsxLDMzMDcgQEAKKyMgSXRhbGlhbiB0cmFuc2xhdGlvbiBmb3IgdGhlIHBhcnRlZCBwYWNrYWdlCisjIENvcHlyaWdodCAoQykgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgR2l1c2VwcGUgU2FjY28gPGVwcGVzdWlnQGRlYmlhbi5vcmc+LCAyMDA0LTIwMDYuCisjCisjIFRoYW5rcyB0byBEYW5pbG8gUGlhenphbHVuZ2EgYW5kIENsYXVkaW8gR2lsYXJkb25pCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBwYXJ0ZWQgMS43LjByYzFcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogYnVnLXBhcnRlZEBnbnUub3JnXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMDctMDUtMDkgMTc6MDItMDQwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDYtMDQtMTEgMjE6MTgrMDIwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogR2l1c2VwcGUgU2FjY28gPGVwcGVzdWlnQGRlYmlhbi5vcmc+XG4iCisiTGFuZ3VhZ2UtVGVhbTogSXRhbGlhbiA8dHBAbGlzdHMubGludXguaXQ+XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisKKyM6IGxpYi9jbG9zZW91dC5jOjc0Cittc2dpZCAid3JpdGUgZXJyb3IiCittc2dzdHIgIiIKKworIzogbGliL2Vycm9yLmM6MTI1CisjLCBmdXp6eQorbXNnaWQgIlVua25vd24gc3lzdGVtIGVycm9yIgorbXNnc3RyICJUaXBvIFwiJXNcIiBkaSBmaWxlIHN5c3RlbSBzY29ub3NjaXV0by4iCisKKyM6IGxpYi9nZXRvcHQuYzo1MzEgbGliL2dldG9wdC5jOjU0NworIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIGAlcycgaXMgYW1iaWd1b3VzXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjU4MCBsaWIvZ2V0b3B0LmM6NTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYC0tJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6NTkzIGxpYi9nZXRvcHQuYzo1OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiBgJWMlcycgZG9lc24ndCBhbGxvdyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo2NDEgbGliL2dldG9wdC5jOjY2MCBsaWIvZ2V0b3B0LmM6OTc2IGxpYi9nZXRvcHQuYzo5OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiBgJXMnIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjY5OCBsaWIvZ2V0b3B0LmM6NzAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bnJlY29nbml6ZWQgb3B0aW9uIGAtLSVzJ1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo3MDkgbGliL2dldG9wdC5jOjcxMgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5yZWNvZ25pemVkIG9wdGlvbiBgJWMlcydcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6NzY0IGxpYi9nZXRvcHQuYzo3NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGlsbGVnYWwgb3B0aW9uIC0tICVjXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjc3MyBsaWIvZ2V0b3B0LmM6Nzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbnZhbGlkIG9wdGlvbiAtLSAlY1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo4MjggbGliL2dldG9wdC5jOjg0NCBsaWIvZ2V0b3B0LmM6MTA0OCBsaWIvZ2V0b3B0LmM6MTA2NgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IC0tICVjXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjg5NyBsaWIvZ2V0b3B0LmM6OTEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYC1XICVzJyBpcyBhbWJpZ3VvdXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6OTM3IGxpYi9nZXRvcHQuYzo5NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiBgLVcgJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzoKKyMuIEdldCB0cmFuc2xhdGlvbnMgZm9yIG9wZW4gYW5kIGNsb3NpbmcgcXVvdGF0aW9uIG1hcmtzLgorIy4KKyMuIFRoZSBtZXNzYWdlIGNhdGFsb2cgc2hvdWxkIHRyYW5zbGF0ZSAiYCIgdG8gYSBsZWZ0CisjLiBxdW90YXRpb24gbWFyayBzdWl0YWJsZSBmb3IgdGhlIGxvY2FsZSwgYW5kIHNpbWlsYXJseSBmb3IKKyMuICInIi4gIElmIHRoZSBjYXRhbG9nIGhhcyBubyB0cmFuc2xhdGlvbiwKKyMuIGxvY2FsZV9xdW90aW5nX3N0eWxlIHF1b3RlcyBgbGlrZSB0aGlzJywgYW5kCisjLiBjbG9jYWxlX3F1b3Rpbmdfc3R5bGUgcXVvdGVzICJsaWtlIHRoaXMiLgorIy4KKyMuIEZvciBleGFtcGxlLCBhbiBBbWVyaWNhbiBFbmdsaXNoIFVuaWNvZGUgbG9jYWxlIHNob3VsZAorIy4gdHJhbnNsYXRlICJgIiB0byBVKzIwMUMgKExFRlQgRE9VQkxFIFFVT1RBVElPTiBNQVJLKSwgYW5kCisjLiBzaG91bGQgdHJhbnNsYXRlICInIiB0byBVKzIwMUQgKFJJR0hUIERPVUJMRSBRVU9UQVRJT04KKyMuIE1BUkspLiAgQSBCcml0aXNoIEVuZ2xpc2ggVW5pY29kZSBsb2NhbGUgc2hvdWxkIGluc3RlYWQKKyMuIHRyYW5zbGF0ZSB0aGVzZSB0byBVKzIwMTggKExFRlQgU0lOR0xFIFFVT1RBVElPTiBNQVJLKSBhbmQKKyMuIFUrMjAxOSAoUklHSFQgU0lOR0xFIFFVT1RBVElPTiBNQVJLKSwgcmVzcGVjdGl2ZWx5LgorIy4KKyMuIElmIHlvdSBkb24ndCBrbm93IHdoYXQgdG8gcHV0IGhlcmUsIHBsZWFzZSBzZWUKKyMuIDxodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1F1b3RhdGlvbl9tYXJrI0dseXBocz4KKyMuIGFuZCB1c2UgZ2x5cGhzIHN1aXRhYmxlIGZvciB5b3VyIGxhbmd1YWdlLgorIzogbGliL3F1b3RlYXJnLmM6MjI5Cittc2dpZCAiYCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcXVvdGVhcmcuYzoyMzAKK21zZ2lkICInIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTMxCittc2dpZCAiU3VjY2VzcyIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjEzNAorbXNnaWQgIk5vIG1hdGNoIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTM3Cittc2dpZCAiSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNDAKK21zZ2lkICJJbnZhbGlkIGNvbGxhdGlvbiBjaGFyYWN0ZXIiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNDMKK21zZ2lkICJJbnZhbGlkIGNoYXJhY3RlciBjbGFzcyBuYW1lIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTQ2Cittc2dpZCAiVHJhaWxpbmcgYmFja3NsYXNoIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTQ5Cittc2dpZCAiSW52YWxpZCBiYWNrIHJlZmVyZW5jZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE1MgorbXNnaWQgIlVubWF0Y2hlZCBbIG9yIFteIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTU1Cittc2dpZCAiVW5tYXRjaGVkICggb3IgXFwoIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTU4Cittc2dpZCAiVW5tYXRjaGVkIFxceyIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE2MQorbXNnaWQgIkludmFsaWQgY29udGVudCBvZiBcXHtcXH0iCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNjQKKyMsIGZ1enp5Cittc2dpZCAiSW52YWxpZCByYW5nZSBlbmQiCittc2dzdHIgIk51bWVybyBub24gdmFsaWRvLiIKKworIzogbGliL3JlZ2NvbXAuYzoxNjcKK21zZ2lkICJNZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTcwCittc2dpZCAiSW52YWxpZCBwcmVjZWRpbmcgcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTczCittc2dpZCAiUHJlbWF0dXJlIGVuZCBvZiByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNzYKK21zZ2lkICJSZWd1bGFyIGV4cHJlc3Npb24gdG9vIGJpZyIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE3OQorbXNnaWQgIlVubWF0Y2hlZCApIG9yIFxcKSIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjY4MAorbXNnaWQgIk5vIHByZXZpb3VzIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvcnBtYXRjaC5jOjcwCittc2dpZCAiXlt5WV0iCittc2dzdHIgIiIKKworIzogbGliL3JwbWF0Y2guYzo3MworbXNnaWQgIl5bbk5dIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBUcmFuc2xhdGUgIihDKSIgdG8gdGhlIGNvcHlyaWdodCBzeW1ib2wKKyMuIChDLWluLWEtY2lyY2xlKSwgaWYgdGhpcyBzeW1ib2wgaXMgYXZhaWxhYmxlIGluIHRoZSB1c2VyJ3MKKyMuIGxvY2FsZS4gIE90aGVyd2lzZSwgZG8gbm90IHRyYW5zbGF0ZSAiKEMpIjsgbGVhdmUgaXQgYXMtaXMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzo2NgorbXNnaWQgIihDKSIKK21zZ3N0ciAiIgorCisjOiBsaWIvdmVyc2lvbi1ldGMuYzo2OAorbXNnaWQgIiIKKyJcbiIKKyJMaWNlbnNlIEdQTHYyKzogR05VIEdQTCB2ZXJzaW9uIDIgb3IgbGF0ZXIgPGh0dHA6Ly9nbnUub3JnL2xpY2Vuc2VzL2dwbC4iCisiaHRtbD5cbiIKKyJUaGlzIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBhcmUgZnJlZSB0byBjaGFuZ2UgYW5kIHJlZGlzdHJpYnV0ZSBpdC5cbiIKKyJUaGVyZSBpcyBOTyBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3LlxuIgorIlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIzogbGliL3ZlcnNpb24tZXRjLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiV3JpdHRlbiBieSAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIzogbGliL3ZlcnNpb24tZXRjLmM6ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiV3JpdHRlbiBieSAlcyBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIldyaXR0ZW4gYnkgJXMsICVzLCBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyJhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6MTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiJXMsIGFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyIlcywgJXMsIGFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzoxMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyIlcywgJXMsICVzLCBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6MTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiJXMsICVzLCAlcywgJXMsXG4iCisiYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjLiBZb3UgY2FuIHVzZSBsaW5lIGJyZWFrcywgZXN0aW1hdGluZyB0aGF0IGVhY2ggYXV0aG9yIG5hbWUgb2NjdXBpZXMKKyMuIGNhLiAxNiBzY3JlZW4gY29sdW1ucyBhbmQgdGhhdCBhIHNjcmVlbiBsaW5lIGhhcyBjYS4gODAgY29sdW1ucy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjEzMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorIiVzLCAlcywgJXMsICVzLFxuIgorIiVzLCBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6MTQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiJXMsICVzLCAlcywgJXMsXG4iCisiJXMsICVzLCBhbmQgb3RoZXJzLlxuIgorbXNnc3RyICIiCisKKyM6IGxpYi94YWxsb2MtZGllLmM6MzUKK21zZ2lkICJtZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzoyMzcKK21zZ2lkICJEaXNrIEltYWdlIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzozMzggbGlicGFydGVkL2FyY2gvZ251LmM6MjYxCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjEyNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igb3BlbmluZyAlczogJXMiCittc2dzdHIgIkVycm9yZSBuZWxsJ2FwZXJ0dXJhIGRpICVzOiAlcyIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjM0OSBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzoyNzEKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTI4MworIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gb3BlbiAlcyByZWFkLXdyaXRlICglcykuICAlcyBoYXMgYmVlbiBvcGVuZWQgcmVhZC1vbmx5LiIKK21zZ3N0ciAiIgorIk5vbiBwb3NzbyBhcHJpcmUgJXMgaW4gbGV0dHVyYS9zY3JpdHR1cmEgKCVzKS4gJXMgw6ggc3RhdG8gYXBlcnRvIGluIHNvbGEgIgorImxldHR1cmEuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6NDExIGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTQzMQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkdXJpbmcgc2VlayBmb3IgcmVhZCBvbiAlcyIKK21zZ3N0ciAiJXMgZHVyYW50ZSBpbCBwb3NpemlvbmFtZW50byBwZXIgbGEgbGV0dHVyYSBzdSAlcyIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjQ0NCBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo0NDkgbGlicGFydGVkL2FyY2gvZ251LmM6NTQ4CisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo2NzYgbGlicGFydGVkL2FyY2gvbGludXguYzoxMzkxCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjE0NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZHVyaW5nIHJlYWQgb24gJXMiCittc2dzdHIgIiVzIGR1cmFudGUgbGEgbGV0dHVyYSBzdSAlcyIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjQ4MCBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo1MDkKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTU0NgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW4ndCB3cml0ZSB0byAlcywgYmVjYXVzZSBpdCBpcyBvcGVuZWQgcmVhZC1vbmx5LiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgc2NyaXZlcmUgc3UgJXMgcG9pY2jDqSDDqCBzdGF0byBhcGVydG8gaW4gc29sYSBsZXR0dXJhLiIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjQ5NiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjE1NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZHVyaW5nIHNlZWsgZm9yIHdyaXRlIG9uICVzIgorbXNnc3RyICIlcyBkdXJhbnRlIGlsIHBvc2l6aW9uYW1lbnRvIHBlciBsYSBzY3JpdHR1cmEgc3UgJXMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzo1MzMgbGlicGFydGVkL2FyY2gvZ251LmM6NTg1IGxpYnBhcnRlZC9hcmNoL2dudS5jOjYzMAorIzogbGlicGFydGVkL2FyY2gvZ251LmM6NzA3IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTUxNworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxNjEyIGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTY4NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkdXJpbmcgd3JpdGUgb24gJXMiCittc2dzdHIgIiVzIGR1cmFudGUgbGEgc2NyaXR0dXJhIHN1ICVzIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjYzIHBhcnRwcm9iZS9wYXJ0cHJvYmUuYzoxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5IGAlcyAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbT1BUSU9OXVxuIgorIiAgb3I6ICAlcyBERVZJQ0UgTUlOT1JcbiIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjcwCittc2dpZCAiIgorIkNsZWFyIHVudXNlZCBzcGFjZSBvbiBhIEZBVCBwYXJ0aXRpb24gKGEgR05VIFBhcnRlZCB0ZXN0aW5nIHRvb2wpLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6NzQKK21zZ2lkICIgICAgICAtLWhlbHAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0XG4iCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo3NQorbXNnaWQgIiAgICAgIC0tdmVyc2lvbiAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXRcbiIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjc3IHBhcnRwcm9iZS9wYXJ0cHJvYmUuYzoxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlJlcG9ydCBidWdzIHRvIDwlcz4uXG4iCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzoyODUKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIGZldyBhcmd1bWVudHMiCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzoyOTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyIKK21zZ3N0ciAiVHJvcHBlIHBhZ2luZSBpbnV0aWxpenphYmlsaS4iCisKKyM6IHBhcnRwcm9iZS9wYXJ0cHJvYmUuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFtPUFRJT05dIFtERVZJQ0VdLi4uXG4iCittc2dzdHIgIiIKKworIzogcGFydHByb2JlL3BhcnRwcm9iZS5jOjE0MgorbXNnaWQgIiIKKyJJbmZvcm0gdGhlIE9TIG9mIHBhcnRpdGlvbiB0YWJsZSBjaGFuZ2VzLlxuIgorIlxuIgorIiAgLWQsIC0tbm8tdXBkYXRlICBkb24ndCB1cGRhdGUgdGhlIGtlcm5lbFxuIgorIiAgLXMsIC0tc3VtbWFyeSAgICBwcmludCBhIHN1bW1hcnkgb2YgY29udGVudHNcbiIKKyIgIC1oLCAtLWhlbHAgICAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXRcbiIKKyIgIC12LCAtLXZlcnNpb24gICAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXRcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0cHJvYmUvcGFydHByb2JlLmM6MTUwCittc2dpZCAiIgorIlxuIgorIldpdGggbm8gREVWSUNFLCBwcm9iZSBhbGwgcGFydGl0aW9ucy5cbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gb3BlbiAlcy4iCittc2dzdHIgIkltcG9zc2liaWxlIGFwcmlyZSAlcy4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjExNAorbXNnaWQgIlVuYWJsZSB0byBwcm9iZSBzdG9yZS4iCittc2dzdHIgIkltcG9zc2liaWxlIHJpbGV2YXJlIGlsIGRpc3Bvc2l0aXZvIGRpIMKrc3RvcmFnZcK7LiIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6MzUyCittc2dpZCAiIgorIlRoZSBwYXJ0aXRpb24gdGFibGUgY2Fubm90IGJlIHJlLXJlYWQuICBUaGlzIG1lYW5zIHlvdSBuZWVkIHRvIHJlYm9vdCBiZWZvcmUgIgorIm1vdW50aW5nIGFueSBtb2RpZmllZCBwYXJ0aXRpb25zLiAgWW91IGFsc28gbmVlZCB0byByZWluc3RhbGwgeW91ciBib290ICIKKyJsb2FkZXIgYmVmb3JlIHlvdSByZWJvb3QgKHdoaWNoIG1heSByZXF1aXJlIG1vdW50aW5nIG1vZGlmaWVkIHBhcnRpdGlvbnMpLiAgIgorIkl0IGlzIGltcG9zc2libGUgZG8gYm90aCB0aGluZ3MhICBTbyB5b3UnbGwgbmVlZCB0byBib290IG9mZiBhIHJlc2N1ZSBkaXNrLCAiCisiYW5kIHJlaW5zdGFsbCB5b3VyIGJvb3QgbG9hZGVyIGZyb20gdGhlIHJlc2N1ZSBkaXNrLiAgUmVhZCBzZWN0aW9uIDQgb2YgdGhlICIKKyJQYXJ0ZWQgVXNlciBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiIgorIk5vbiDDqCBzdGF0byBwb3NzaWJpbGUgcmlsZWdnZXJlIGxhIHRhYmVsbGEgZGVsbGUgcGFydGl6aW9uaSwgcXVpbmRpIHNpIGRldmUgIgorInJpYXZ2aWFyZSBpbCBjb21wdXRlciBwcmltYSBkaSBtb250YXJlIGxlIHBhcnRpemlvbmkgbW9kaWZpY2F0ZS4gw4ggYW5jaGUgIgorIm5lY2Vzc2FyaW8gaW5zdGFsbGFyZSBudW92YW1lbnRlIGlsIMKrYm9vdCBsb2FkZXLCuyBwcmltYSBkZWwgcmlhdnZpbyAoaWwgY2hlICIKKyJwdcOyIHJpY2hpZWRlcmUgZGkgbW9udGFyZSBsZSBwYXJ0aXppb25pIG1vZGlmaWNhdGUuKSBOb24gw6ggcG9zc2liaWxlIGZhcmUgIgorImVudHJhbWJlISBRdWluZGkgc2kgYXZ2aWkgbGEgbWFjY2hpbmEgZGEgdW4gZGlzY28gZGkgcmlwcmlzdGlubyBlIHNpICIKKyJyZWluc3RhbGxpIGlsIMKrYm9vdCBsb2FkZXLCuyBkYSBxdWVsIGRpc2NvLiBMZWdnZXJlIGxhIHNlemlvbmUgNCBkZWxsYSAiCisiZG9jdW1lbnRhemlvbmUgdXRlbnRlIGRpIFBhcnRlZCBwZXIgdWx0ZXJpb3JpIGluZm9ybWF6aW9uaS4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjM2OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIHBhcnRpdGlvbiB0YWJsZSBvbiAlcyBjYW5ub3QgYmUgcmUtcmVhZCAoJXMpLiAgVGhpcyBtZWFucyB0aGUgSHVyZCBrbm93cyAiCisibm90aGluZyBhYm91dCBhbnkgbW9kaWZpY2F0aW9ucyB5b3UgbWFkZS4gIFlvdSBzaG91bGQgcmVib290IHlvdXIgY29tcHV0ZXIgIgorImJlZm9yZSBkb2luZyBhbnl0aGluZyB3aXRoICVzLiIKK21zZ3N0ciAiIgorIkxhIHRhYmVsbGEgZGVsbGUgcGFydGl6aW9uaSBzdSAlcyAoJXMpIG5vbiBwdcOyIGVzc2VyZSByaWxldHRhLiBRdWVzdG8gdnVvbCAiCisiZGlyZSBjaGUgSHVyZCBub24gc2EgYXNzb2x1dGFtZW50ZSBudWxsYSBkZWxsZSBtb2RpZmljaGUgZmF0dGUuIFJpYXZ2aWFyZSBpbCAiCisiY29tcHV0ZXIgcHJpbWEgZGkgZmFyZSBxdWFsc2lhc2kgY29zYSBjb24gJXMuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzozODAgcGFydGVkL3BhcnRlZC5jOjI0NDMKK21zZ2lkICIiCisiWW91IHNob3VsZCByZWluc3RhbGwgeW91ciBib290IGxvYWRlciBiZWZvcmUgcmVib290aW5nLiAgUmVhZCBzZWN0aW9uIDQgb2YgIgorInRoZSBQYXJ0ZWQgVXNlciBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiIgorIlNpIGRvdnJlYmJlIGluc3RhbGxhcmUgbnVvdmFtZW50ZSBpbCDCq2Jvb3QgbG9hZGVywrsgcHJpbWEgZGkgcmlhdnZpYXJlLiAiCisiTGVnZ2VyZSBsYSBzZXppb25lIDQgZGVsbGEgZG9jdW1lbnRhemlvbmUgdXRlbnRlIGRpIFBhcnRlZCBwZXIgdWx0ZXJpb3JpICIKKyJpbmZvcm1hemlvbmkuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo3NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdHJ5aW5nIHRvIHN5bmMgJXMgdG8gZGlzayIKK21zZ3N0ciAiJXMgdGVudGFudG8gZGkgZmFyZSBpbCDCq3N5bmPCuyBkaSAlcyBzdWwgZGlzY28iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6NDA4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzdGF0IGRldmljZSAlcyAtICVzLiIKK21zZ3N0ciAiTm9uIHBvc3NvIGZhcmUgbG8gwqtzdGF0wrsgZGVsIGRldmljZSAlcyAtICVzLiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo1MjMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgZGV0ZXJtaW5lIHNlY3RvciBzaXplIGZvciAlczogJXMuXG4iCisiVXNpbmcgdGhlIGRlZmF1bHQgc2VjdG9yIHNpemUgKCVsbGQpLiIKK21zZ3N0ciAiIgorIk5vbiDDqCBzdGF0byBwb3NzaWJpbGUgZGV0ZXJtaW5hcmUgbGEgZGltZW5zaW9uZSBkZWwgc2V0dG9yZSBwZXIgJXM6ICVzLlxuIgorIlZlcnLDoCB1dGlsaXp6YXRhIGxhIGRpbWVuc2lvbmUgcHJlZGVmaW5pdGHCtyglbGxkKS4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6NTM5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiRGV2aWNlICVzIGhhcyBhIGxvZ2ljYWwgc2VjdG9yIHNpemUgb2YgJWxsZC4gIE5vdCBhbGwgcGFydHMgb2YgR05VIFBhcnRlZCAiCisic3VwcG9ydCB0aGlzIGF0IHRoZSBtb21lbnQsIGFuZCB0aGUgd29ya2luZyBjb2RlIGlzIEhJR0hMWSBFWFBFUklNRU5UQUwuXG4iCittc2dzdHIgIiIKKyJMYSBkaW1lbnNpb25lIGRlbCBzZXR0b3JlIGxvZ2ljbyBwZXIgJXMgw6ggJWxsZC4gSW4gcXVlc3RvIG1vbWVudG8sIG5vbiB0dXR0ZSAiCisibGUgcGFydGkgZGkgR05VIFBhcnRlZCBsYSBzdXBwb3J0YW5vIGUgaWwgcmVsYXRpdm8gY29kaWNlIMOoIEFMVEFNRU5URSAiCisiU1BFUklNRU5UQUxFLlxuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjU3OQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZGV0ZXJtaW5lIHRoZSBzaXplIG9mICVzICglcykuIgorbXNnc3RyICJJbXBvc3NpYmlsZSBkZXRlcm1pbmFyZSBsYSBkaW1lbnNpb25lIGRpICVzICglcykuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjY2OAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZ2V0IGlkZW50aXR5IG9mIGRldmljZSAlcyAtICVzIgorbXNnc3RyICJOb24gcG9zc28gaWRlbnRpZmljYXJlIGlsIGRldmljZSAlcyAtJXMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6Njc3Cittc2dpZCAiR2VuZXJpYyBJREUiCittc2dzdHIgIklERSBnZW5lcmljbyIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkRldmljZSAlcyBoYXMgbXVsdGlwbGUgKCVkKSBsb2dpY2FsIHNlY3RvcnMgcGVyIHBoeXNpY2FsIHNlY3Rvci5cbiIKKyJHTlUgUGFydGVkIHN1cHBvcnRzIHRoaXMgRVhQRVJJTUVOVEFMTFkgZm9yIHNvbWUgc3BlY2lhbCBkaXNrIGxhYmVsL2ZpbGUgIgorInN5c3RlbSBjb21iaW5hdGlvbnMsIGUuZy4gR1BUIGFuZCBleHQyLzMuXG4iCisiUGxlYXNlIGNvbnN1bHQgdGhlIHdlYiBzaXRlIGZvciB1cC10by1kYXRlIGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiIgorIklsIGRldmljZSAlcyBoYSBtdWx0aXBsaSAoJWQpIHNldHRvcmkgbG9naWNpIHBlciBvZ25pIHNldHRvcmUgZmlzaWNvLlxuIgorIkdOVSBQYXJ0ZWQgc3VwcG9ydGEgcXVlc3RhIGNvbmZpZ3VyYXppb25lIGluIG1hbmllcmEgU1BFUklNRU5UQUxFIHBlciBhbGN1bmUgIgorImNvbWJpbmF6aW9uaSBkaSB0aXBpIGRpIGV0aWNoZXR0YS9maWxlIHN5c3RlbSwgY29tZSBHUFQgZSBleHQyLzMuXG4iCisiQ29uc3VsdGFyZSBpbCBzaXRvIHdlYiBwZXIgdW5hIGRvY3VtZW50YXppb25lIGFnZ2lvcm5hdGEuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjg3MworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBpbml0aWFsaXNpbmcgU0NTSSBkZXZpY2UgJXMgLSAlcyIKK21zZ3N0ciAiRXJyb3JlIG5lbGwnaW5pemlhbGl6emF6aW9uZSBkZWwgZGV2aWNlIFNDU0kgJXMgLSAlcyIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo5MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBkZXZpY2UgJXMgaGFzIHplcm8gbGVuZ3RoLCBhbmQgY2FuJ3QgcG9zc2libHkgc3RvcmUgYSBmaWxlIHN5c3RlbSBvciAiCisicGFydGl0aW9uIHRhYmxlLiAgUGVyaGFwcyB5b3Ugc2VsZWN0ZWQgdGhlIHdyb25nIGRldmljZT8iCittc2dzdHIgIiIKKyJJbCBkZXZpY2UgJXMgaGEgZGltZW5zaW9uZSB6ZXJvIGUgcHJvYmFiaWxtZW50ZSBub24gcHXDsiBjb250ZW5lcmUgdW4gZmlsZSAiCisic3lzdGVtIG8gdW5hIHRhYmVsbGEgZGVsbGUgcGFydGl6aW9uaS4gw4ggc3RhdG8gc2VsZXppb25hdG8gaWwgZGV2aWNlIGVycmF0bz8iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTAzMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlVuYWJsZSB0byBkZXRlcm1pbmUgZ2VvbWV0cnkgb2YgZmlsZS9kZXZpY2UgJXMuICBZb3Ugc2hvdWxkIG5vdCB1c2UgUGFydGVkICIKKyJ1bmxlc3MgeW91IFJFQUxMWSBrbm93IHdoYXQgeW91J3JlIGRvaW5nISIKK21zZ3N0ciAiIgorIk5vbiDDqCBwb3NzaWJpbGUgZGV0ZXJtaW5hcmUgbGEgZ2VvbWV0cmlhIGRlbCBmaWxlL2RldmljZS4gTm9uIHNpIGRvdnJlYmJlICIKKyJ1dGlsaXp6YXJlIHBhcnRlZCBhIG1lbm8gY2hlIG5vbiBzaSBzYXBwaWEgVkVSQU1FTlRFIGNvc2Egc2kgc3RhIGZhY2VuZG8hIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExMTAKK21zZ2lkICJEQUM5NjAgUkFJRCBjb250cm9sbGVyIgorbXNnc3RyICJDb250cm9sbGVyIFJBSUQgREFDOTYwIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExMTUKK21zZ2lkICJQcm9taXNlIFNYOCBTQVRBIERldmljZSIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExMjAKK21zZ2lkICJJQk0gUzM5MCBEQVNEIGRyaXZlIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTEyNQorbXNnaWQgIklCTSBpU2VyaWVzIFZpcnR1YWwgREFTRCIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExMzAKK21zZ2lkICJDb21wYXEgU21hcnQgQXJyYXkiCittc2dzdHIgIkNvbXBhcSBTbWFydCBBcnJheSIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTM1Cittc2dpZCAiQVRBUkFJRCBDb250cm9sbGVyIgorbXNnc3RyICJDb250cm9sbGVyIEFUQVJBSUQiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTE0MAorbXNnaWQgIkkyTyBDb250cm9sbGVyIgorbXNnc3RyICJDb250cm9sbGVyIEkyTyIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTQ1Cittc2dpZCAiVXNlci1Nb2RlIExpbnV4IFVCRCIKK21zZ3N0ciAiVXNlci1Nb2RlIExpbml4IFVCRCIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTU2Cittc2dpZCAiTGludXggZGV2aWNlLW1hcHBlciIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExNjIKK21zZ2lkICJVbmtub3duIgorbXNnc3RyICJTY29ub3NjaXV0byIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTY5Cittc2dpZCAicGVkX2RldmljZV9uZXcoKSAgVW5zdXBwb3J0ZWQgZGV2aWNlIHR5cGUiCittc2dzdHIgInBlZF9kZXZpY2VfbmV3KCkgVGlwbyBkaSBkZXZpY2Ugbm9uIHN1cHBvcnRhdG8iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MjA4MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRXJyb3IgaW5mb3JtaW5nIHRoZSBrZXJuZWwgYWJvdXQgbW9kaWZpY2F0aW9ucyB0byBwYXJ0aXRpb24gJXMgLS0gJXMuICBUaGlzICIKKyJtZWFucyBMaW51eCB3b24ndCBrbm93IGFib3V0IGFueSBjaGFuZ2VzIHlvdSBtYWRlIHRvICVzIHVudGlsIHlvdSByZWJvb3QgLS0gIgorInNvIHlvdSBzaG91bGRuJ3QgbW91bnQgaXQgb3IgdXNlIGl0IGluIGFueSB3YXkgYmVmb3JlIHJlYm9vdGluZy4iCittc2dzdHIgIiIKKyJDJ8OoIHN0YXRvIHVuIGVycm9yZSBuZWxsJ2luZm9ybWFyZSBpbCBrZXJuZWwgZGVsbGUgbW9kaWZpY2hlIGFsbGEgcGFydGl6aW9uZSAiCisiJXMgLS0gJXMuIFF1ZXN0byB2dW9sIGRpcmUgY2hlIExpbnV4IG5vbiBzYXLDoCBhbCBjb3JyZW50ZSBkZWkgY2FtYmlhbWVudGkgIgorImZhdHRpIGEgJXMgZmlubyBhbCBwcm9zc2ltbyByaWF2dmlvIC0tIHF1aW5kaSBub24gbW9udGFyZSBvIHVzYXJlIGluIGFsY3VuICIKKyJtb2RvIGxhIHBhcnRpemlvbmUgZmlubyBhZCBhbGxvcmEuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjIyNjIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJwYXJ0ZWQgd2FzIHVuYWJsZSB0byByZS1yZWFkIHRoZSBwYXJ0aXRpb24gdGFibGUgb24gJXMgKCVzKS4gIFRoaXMgbWVhbnMgIgorIkxpbnV4IHdvbid0IGtub3cgYW55dGhpbmcgYWJvdXQgdGhlIG1vZGlmaWNhdGlvbnMgeW91IG1hZGUuICIKK21zZ3N0ciAiIgorIklsIGtlcm5lbCBub24gw6ggc3RhdG8gY2FwYWNlIGRpIHJpbGVnZ2VyZSBsYSB0YWJlbGxhIGRlbGxlIHBhcnRpemlvbmkgc3UgJXMgIgorIiglcykuIFF1ZXN0byB2dW9sIGRpcmUgY2hlIExpbnV4IG5vbiBzYXLDoCBhbCBjb3JyZW50ZSBkZWkgY2FtYmlhbWVudGkgZmF0dGkgIgorImZpbm8gYWwgcmlhdnZpby4gU2kgZG92cmViYmUgcmlhdnZpYXJlIGlsIGNvbXB1dGVyIHByaW1hIGRpIGZhcmUgcXVhbHNpYXNpICIKKyJjb3NhIGNvbiAlcy4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MjM2OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGtlcm5lbCB3YXMgdW5hYmxlIHRvIHJlLXJlYWQgdGhlIHBhcnRpdGlvbiB0YWJsZSBvbiAlcyAoJXMpLiAgVGhpcyBtZWFucyAiCisiTGludXggd29uJ3Qga25vdyBhbnl0aGluZyBhYm91dCB0aGUgbW9kaWZpY2F0aW9ucyB5b3UgbWFkZSB1bnRpbCB5b3UgIgorInJlYm9vdC4gIFlvdSBzaG91bGQgcmVib290IHlvdXIgY29tcHV0ZXIgYmVmb3JlIGRvaW5nIGFueXRoaW5nIHdpdGggJXMuIgorbXNnc3RyICIiCisiSWwga2VybmVsIG5vbiDDqCBzdGF0byBjYXBhY2UgZGkgcmlsZWdnZXJlIGxhIHRhYmVsbGEgZGVsbGUgcGFydGl6aW9uaSBzdSAlcyAiCisiKCVzKS4gUXVlc3RvIHZ1b2wgZGlyZSBjaGUgTGludXggbm9uIHNhcsOgIGFsIGNvcnJlbnRlIGRlaSBjYW1iaWFtZW50aSBmYXR0aSAiCisiZmlubyBhbCByaWF2dmlvLiBTaSBkb3ZyZWJiZSByaWF2dmlhcmUgaWwgY29tcHV0ZXIgcHJpbWEgZGkgZmFyZSBxdWFsc2lhc2kgIgorImNvc2EgY29uICVzLiIKKworIzogbGlicGFydGVkL2NzL2dlb20uYzoxNjIKK21zZ2lkICJDYW4ndCBoYXZlIHRoZSBlbmQgYmVmb3JlIHRoZSBzdGFydCEiCittc2dzdHIgIk5vbiBzaSBwdcOoIGF2ZXJlIGxhIGZpbmUgcHJpbWEgZGVsbCdpbml6aW8hIgorCisjOiBsaWJwYXJ0ZWQvY3MvZ2VvbS5jOjE2OQorbXNnaWQgIkNhbid0IGhhdmUgYSBwYXJ0aXRpb24gb3V0c2lkZSB0aGUgZGlzayEiCittc2dzdHIgIk5vbiBzaSBwdcOyIGF2ZXJlIHVuYSBwYXJ0aXppb25lIGFsIGRpIGZ1b3JpIGRlbCBkaXNjbyEiCisKKyM6IGxpYnBhcnRlZC9jcy9nZW9tLmM6MzY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkF0dGVtcHQgdG8gd3JpdGUgc2VjdG9ycyAlbGQtJWxkIG91dHNpZGUgb2YgcGFydGl0aW9uIG9uICVzLiIKK21zZ3N0ciAiIgorIlRlbnRhdGl2byBkaSBzY3JpdmVyZSBpIHNldHRvcmkgJWxkLSVsZCBhbCBkaSBmdW9yaSBkZWxsYSBwYXJ0aXppb25lICVzLiIKKworIzogbGlicGFydGVkL2NzL2dlb20uYzo0MDYgbGlicGFydGVkL2ZzL2xpbnV4X3N3YXAvbGludXhfc3dhcC5jOjQ3NQorbXNnaWQgImNoZWNraW5nIGZvciBiYWQgYmxvY2tzIgorbXNnc3RyICJjb250cm9sbG8gZGVpIGJsb2NjaGkgZGlmZXR0b3NpIgorCisjOiBsaWJwYXJ0ZWQvZGVidWcuYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFja3RyYWNlIGhhcyAlZCBjYWxscyBvbiBzdGFjazpcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZGVidWcuYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXNzZXJ0aW9uICglcykgYXQgJXM6JWQgaW4gZnVuY3Rpb24gJXMoKSBmYWlsZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBvcGVuICVzIC0gdW5yZWNvZ25pc2VkIGRpc2sgbGFiZWwuIgorbXNnc3RyICJJbXBvc3NpYmlsZSBhcHJpcmUgJXMgLSBldGljaGV0dGEgZGVsIGRpc2NvIHNjb25vc2NpdXRhLiIKKworIzogbGlicGFydGVkL2Rpc2suYzo0NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgbGlicGFydGVkIGRvZXNuJ3QgaGF2ZSB3cml0ZSBzdXBwb3J0IGZvciAlcy4gIFBlcmhhcHMgaXQgd2FzIGNvbXBpbGVkICIKKyJyZWFkLW9ubHkuIgorbXNnc3RyICIiCisiUXVlc3RvIGxpYnBhcnRlZCBub24gc3VwcG9ydGEgbGEgc2NyaXR0dXJhIHBlciAlcy4gRm9yc2Ugw6ggc3RhdG8gY29tcGlsYXRvICIKKyJwZXIgbGEgc29sYSBsZXR0dXJhLiIKKworIzogbGlicGFydGVkL2Rpc2suYzo1OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGFydGl0aW9uICVkIGlzICVzLCBidXQgdGhlIGZpbGUgc3lzdGVtIGlzICVzLiIKK21zZ3N0ciAiTGEgcGFydGl6aW9uZSAlZCDDqCAlcywgbWEgaWwgZmlsZSBzeXN0ZW0gw6ggJXMuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjEwNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZGlzayBsYWJlbHMgZG8gbm90IHN1cHBvcnQgZXh0ZW5kZWQgcGFydGl0aW9ucy4iCittc2dzdHIgIkxlIGV0aWNoZXR0ZSBkZWkgZGlzY2hpICVzIG5vbiBzdXBwb3J0YW5vIGxlIHBhcnRpemlvbmkgZXN0ZXNlLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGRpc2sgbGFiZWxzIGRvbid0IHN1cHBvcnQgbG9naWNhbCBvciBleHRlbmRlZCBwYXJ0aXRpb25zLiIKK21zZ3N0ciAiIgorImxlIGV0aWNoZXR0ZSBkZWkgZGlzY2hpICVzIG5vbiBzdXBwb3J0YW5vIGxlIHBhcnRpemlvbmkgZXN0ZXNlIG8gbG9naWNoZS4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTY0NworbXNnaWQgIlRvbyBtYW55IHByaW1hcnkgcGFydGl0aW9ucy4iCittc2dzdHIgIlRyb3BwZSBwYXJ0aXppb25pIHByaW1hcmllLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW4ndCBhZGQgYSBsb2dpY2FsIHBhcnRpdGlvbiB0byAlcywgYmVjYXVzZSB0aGVyZSBpcyBubyBleHRlbmRlZCBwYXJ0aXRpb24uIgorbXNnc3RyICIiCisiTm9uIMOoIHBvc3NpYmlsZSBhZ2dpdW5nZXJlIHVuYSBwYXJ0aXppb25lIGxvZ2ljYSBhICVzIHBlcmNow6kgbm9uIGNpIHNvbm8gIgorInBhcnRpemlvbmkgZXN0ZXNlLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbid0IGhhdmUgbW9yZSB0aGFuIG9uZSBleHRlbmRlZCBwYXJ0aXRpb24gb24gJXMuIgorbXNnc3RyICJOb24gw6ggcG9zc2liaWxlIGF2ZXJlIHBpw7kgZGkgdW5hIHBhcnRpemlvbmUgZXN0ZXNhIHN1ICVzLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNjkwCittc2dpZCAiQ2FuJ3QgaGF2ZSBsb2dpY2FsIHBhcnRpdGlvbnMgb3V0c2lkZSBvZiB0aGUgZXh0ZW5kZWQgcGFydGl0aW9uLiIKK21zZ3N0ciAiIgorIk5vbiDDqCBwb3NzaWJpbGUgYXZlcmUgcGFydGl6aW9uaSBsb2dpY2hlIGFsIGRpIGZ1b3JpIGRlbGxhIHBhcnRpemlvbmUgZXN0ZXNhLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbid0IGhhdmUgYSBsb2dpY2FsIHBhcnRpdGlvbiBvdXRzaWRlIG9mIHRoZSBleHRlbmRlZCBwYXJ0aXRpb24gb24gJXMuIgorbXNnc3RyICIiCisiTm9uIMOoIHBvc3NpYmlsZSBhdmVyZSB1bmEgcGFydGl6aW9uZSBsb2dpY2EgZXN0ZXJuYSBhbGxhIHBhcnRpemlvbmUgZXN0ZXNhICIKKyJzdSAlcy4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTcyNSBsaWJwYXJ0ZWQvZGlzay5jOjE3NzkgbGlicGFydGVkL2Rpc2suYzoxOTQ1Cittc2dpZCAiQ2FuJ3QgaGF2ZSBvdmVybGFwcGluZyBwYXJ0aXRpb25zLiIKK21zZ3N0ciAiTm9uIMOoIHBvc3NpYmlsZSBhdmVyZSBwYXJ0aXppb25pIGNoZSBzaSBzb3ZyYXBwb25nb25vLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNzMzCittc2dpZCAiQ2FuJ3QgaGF2ZSBhIHByaW1hcnkgcGFydGl0aW9uIGluc2lkZSBhbiBleHRlbmRlZCBwYXJ0aXRpb24uIgorbXNnc3RyICIiCisiTm9uIMOoIHBvc3NpYmlsZSBhdmVyZSB1bmEgcGFydGl6aW9uZSBwcmltYXJpYSBhbGwnaW50ZXJubyBkaSB1bmEgZXN0ZXNhLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTQwCittc2dpZCAibWV0YWRhdGEiCittc2dzdHIgIm1ldGFkYXRpIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNDIKK21zZ2lkICJmcmVlIgorbXNnc3RyICJsaWJlcm8iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE0NCBwYXJ0ZWQvdWkuYzoxMTY5IHBhcnRlZC91aS5jOjExOTcKK21zZ2lkICJleHRlbmRlZCIKK21zZ3N0ciAiZXN0ZXNhIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNDYgcGFydGVkL3VpLmM6MTE3MyBwYXJ0ZWQvdWkuYzoxMjAxCittc2dpZCAibG9naWNhbCIKK21zZ3N0ciAibG9naWNhIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNDggcGFydGVkL3VpLmM6MTE2NSBwYXJ0ZWQvdWkuYzoxMTkzCittc2dpZCAicHJpbWFyeSIKK21zZ3N0ciAicHJpbWFyaWEiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE2NAorbXNnaWQgImJvb3QiCittc2dzdHIgImF2dmlvIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNjYKK21zZ2lkICJyb290IgorbXNnc3RyICJyb290IgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNjgKK21zZ2lkICJzd2FwIgorbXNnc3RyICJzd2FwIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNzAKK21zZ2lkICJoaWRkZW4iCittc2dzdHIgIm5hc2Nvc3RhIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNzIKK21zZ2lkICJyYWlkIgorbXNnc3RyICJyYWlkIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNzQKK21zZ2lkICJsdm0iCittc2dzdHIgImx2bSIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTc2Cittc2dpZCAibGJhIgorbXNnc3RyICJsYmEiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE3OAorbXNnaWQgImhwLXNlcnZpY2UiCittc2dzdHIgImhwLXNlcnZpY2UiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE4MAorbXNnaWQgInBhbG8iCittc2dzdHIgInBhbG8iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE4MgorbXNnaWQgInByZXAiCittc2dzdHIgInByZXAiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE4NAorbXNnaWQgIm1zZnRyZXMiCittc2dzdHIgIm1zZnRyZXMiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE5MAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIHBhcnRpdGlvbiBmbGFnLCAlZC4iCittc2dzdHIgIkZsYWcgZGkgcGFydGl6aW9uZSAlZCBzY29ub3NjaXV0by4iCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo3OAorbXNnaWQgIkluZm9ybWF0aW9uIgorbXNnc3RyICJJbmZvcm1hemlvbmUiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo3OQorbXNnaWQgIldhcm5pbmciCittc2dzdHIgIkF2dmlzbyIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjgwCittc2dpZCAiRXJyb3IiCittc2dzdHIgIkVycm9yZSIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjgxCittc2dpZCAiRmF0YWwiCittc2dzdHIgIklycmltZWRpYWJpbGUiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4MgorbXNnaWQgIkJ1ZyIKK21zZ3N0ciAiQnVnIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODMKK21zZ2lkICJObyBJbXBsZW1lbnRhdGlvbiIKK21zZ3N0ciAiTm9uIGltcGxlbWVudGF0byIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjg3Cittc2dpZCAiRml4IgorbXNnc3RyICJGaXgiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4OAorbXNnaWQgIlllcyIKK21zZ3N0ciAiU8OsIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODkKK21zZ2lkICJObyIKK21zZ3N0ciAiTm8iCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo5MAorbXNnaWQgIk9LIgorbXNnc3RyICJPSyIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjkxCittc2dpZCAiUmV0cnkiCittc2dzdHIgIlJpcHJvdmEiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo5MgorbXNnaWQgIklnbm9yZSIKK21zZ3N0ciAiSWdub3JhIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6OTMKK21zZ2lkICJDYW5jZWwiCittc2dzdHIgIkFubnVsbGEiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkEgYnVnIGhhcyBiZWVuIGRldGVjdGVkIGluIEdOVSBQYXJ0ZWQuICBSZWZlciB0byB0aGUgd2ViIHNpdGUgb2YgcGFydGVkICIKKyJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvcGFydGVkL3BhcnRlZC5odG1sIGZvciBtb3JlIGluZm9ybWF0aW9ucyBvZiB3aGF0ICIKKyJjb3VsZCBiZSB1c2VmdWwgZm9yIGJ1ZyBzdWJtaXR0aW5nISAgUGxlYXNlIGVtYWlsIGEgYnVnIHJlcG9ydCB0byBidWctIgorInBhcnRlZEBnbnUub3JnIGNvbnRhaW5pbmcgYXQgbGVhc3QgdGhlIHZlcnNpb24gKCVzKSBhbmQgdGhlIGZvbGxvd2luZyAiCisibWVzc2FnZTogICIKK21zZ3N0ciAiIgorIsOIIHN0YXRvIHRyb3ZhdG8gdW4gYnVnIGRpIEdOVSBwYXJ0ZWQuIENvbnRyb2xsYXJlIGlsIHNpdG8gd2ViIGRpIHBhcnRlZCAiCisiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3BhcnRlZC9wYXJ0ZWQuaHRtbCBwZXIgbWFnZ2lvcmkgaW5mb3JtYXppb25pIHN1ICIKKyJjb3NhIMOoIHV0aWxlIGNvbXVuaWNhcmUgbmVsbGUgc2VnbmFsYXppb25pLiBTaSBzZWduYWxpIHVuIGJ1ZyBhIGJ1Zy0iCisicGFydGVkQGdudS5vcmcgc3BlY2lmaWNhbmRvIGxhIHZlcnNpb25lICglcykgZSBpbCBzZWd1ZW50ZSBtZXNzYWdnaW86ICIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzozODQKK21zZ2lkICJDb3VsZCBub3QgZGV0ZWN0IGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiTm9uIMOoIHN0YXRvIHBvc3NpYmlsZSByaWxldmFyZSBpbCBmaWxlIHN5c3RlbS4iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6Mzk1Cittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIGlzIGJpZ2dlciB0aGFuIGl0cyB2b2x1bWUhIgorbXNnc3RyICJJbCBmaWxlIHN5c3RlbSDDqCBwacO5IGFtcGlvIGRlbCBwcm9wcmlvIHZvbHVtZSEiCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NDAzCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnQgZm9yIG9wZW5pbmcgJXMgZmlsZSBzeXN0ZW1zIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICIiCisiSWwgc3VwcG9ydG8gcGVyIGFwcmlyZSB1biBmaWxlIHN5c3RlbSAlcyBub24gw6ggYW5jb3JhIHN0YXRvIGltcGxlbWVudGF0by4iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnQgZm9yIGNyZWF0aW5nICVzIGZpbGUgc3lzdGVtcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiIgorIklsIHN1cHBvcnRvIHBlciBjcmVhcmUgaWwgZmlsZSBzeXN0ZW0gJXMgbm9uIMOoIGFuY29yYSBzdGF0byBpbXBsZW1lbnRhdG8uIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjUwNQorIywgYy1mb3JtYXQKK21zZ2lkICJTdXBwb3J0IGZvciBjaGVja2luZyAlcyBmaWxlIHN5c3RlbXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiIKKyJJbCBzdXBwb3J0byBwZXIgY29udHJvbGxhcmUgaWwgZmlsZSBzeXN0ZW0gJXMgbm9uIMOoIGFuY29yYSBzdGF0byAiCisiaW1wbGVtZW50YXRvLiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo1NzEKK21zZ2lkICJyYXcgYmxvY2sgY29weWluZyIKK21zZ3N0ciAiY29waWEgZGVpIGJsb2NjaGkiCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NTgyCittc2dpZCAiZ3Jvd2luZyBmaWxlIHN5c3RlbSIKK21zZ3N0ciAiYXVtZW50byBkZWwgZmlsZSBzeXN0ZW0iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NjIyCittc2dpZCAiQ2FuJ3QgY29weSBvbnRvIGFuIG92ZXJsYXBwaW5nIHBhcnRpdGlvbi4iCittc2dzdHIgIk5vbiDDqCBwb3NzaWJpbGUgY29waWFyZSBzdSB1bmEgcGFydGl6aW9uZSBzb3ZyYXBwb3N0YS4iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJEaXJlY3Qgc3VwcG9ydCBmb3IgY29weWluZyBmaWxlIHN5c3RlbXMgaXMgbm90IHlldCBpbXBsZW1lbnRlZCBmb3IgJXMuICAiCisiSG93ZXZlciwgc3VwcG9ydCBmb3IgcmVzaXppbmcgaXMgaW1wbGVtZW50ZWQuICBUaGVyZWZvcmUsIHRoZSBmaWxlIHN5c3RlbSAiCisiY2FuIGJlIGNvcGllZCBpZiB0aGUgbmV3IHBhcnRpdGlvbiBpcyBhdCBsZWFzdCBhcyBiaWcgYXMgdGhlIG9sZCBvbmUuICBTbywgIgorImVpdGhlciBzaHJpbmsgdGhlIHBhcnRpdGlvbiB5b3UgYXJlIHRyeWluZyB0byBjb3B5LCBvciBjb3B5IHRvIGEgYmlnZ2VyICIKKyJwYXJ0aXRpb24uIgorbXNnc3RyICIiCisiSWwgc3VwcG9ydG8gcGVyIGNvcGlhcmUgZmlsZSBzeXN0ZW0gJXMgbm9uIMOoIGFuY29yYSBpbXBsZW1lbnRhdG8sIG1hIMOoICIKKyJwcmVzZW50ZSBxdWVsbG8gcGVyIHJpZGltZW5zaW9uYXJsby4gUXVpbmRpIGlsIGZpbGUgc3lzdGVtIMOoIGNvcGlhYmlsZSBzZSBsYSAiCisicGFydGl6aW9uZSBkaSBkZXN0aW5hemlvbmUgw6ggZ3JhbmRlIGFsbWVubyBxdWFudG8gcXVlbGxhIGRpIG9yaWdpbmUuIFF1aW5kaSAiCisic2kgcHXDsiByaW1waWNjaW9saXJlIGxhIHBhcnRpemlvbmUgZGkgcGFydGVuemEgb3BwdXJlIGNvcGlhcmUgaW4gdW5hIHBpw7kgIgorImdyYW5kZS4iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnQgZm9yIGNvcHlpbmcgJXMgZmlsZSBzeXN0ZW1zIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICIiCisiSWwgc3VwcG9ydG8gcGVyIGNvcGlhcmUgZmlsZSBzeXN0ZW0gJXMgbm9uIMOoIGFuY29yYSBzdGF0byBpbXBsZW1lbnRhdG8uIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjY5NgorIywgYy1mb3JtYXQKK21zZ2lkICJTdXBwb3J0IGZvciByZXNpemluZyAlcyBmaWxlIHN5c3RlbXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiIKKyJJbCBzdXBwb3J0byBwZXIgcmlkaW1lbnNpb25hcmUgaWwgZmlsZSBzeXN0ZW0gJXMgbm9uIMOoIHN0YXRvIGFuY29yYSAiCisiaW1wbGVtZW50YXRvLiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6MzE1Cittc2dpZCAiY3JlYXRpbmciCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDAyCisjLCBmdXp6eQorbXNnaWQgIlRoZSBmaWxlIHN5c3RlbSBpcyBpbiBhbiBpbnZhbGlkIHN0YXRlLiAgUGVyaGFwcyBpdCBpcyBtb3VudGVkPyIKK21zZ3N0ciAiSWwgZmlsZSBzeXN0ZW0gw6ggcGnDuSBhbXBpbyBkZWwgcHJvcHJpbyB2b2x1bWUhIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0MTAKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gaXMgaW4gb2xkICh1bnJlc2l6ZWFibGUpIGZvcm1hdC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDE2Cittc2dpZCAiSW52YWxpZCBmcmVlIGJsb2NrcyBjb3VudC4gIFJ1biByZWlzZXJmc2NrIC0tY2hlY2sgZmlyc3QuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQzMQorIywgZnV6enkKK21zZ2lkICJjaGVja2luZyIKK21zZ3N0ciAiY29udHJvbGxvIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0MzcKK21zZ2lkICJSZWlzZXJmcyB0cmVlIHNlZW1zIHRvIGJlIGNvcnJ1cHRlZC4gIFJ1biByZWlzZXJmc2NrIC0tY2hlY2sgZmlyc3QuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQ0OQorIywgZnV6enkKK21zZ2lkICIiCisiVGhlIHJlaXNlcmZzIGZpbGUgc3lzdGVtIHBhc3NlZCBhIGJhc2ljIGNoZWNrLiAgRm9yIGEgbW9yZSBjb21wcmVoZW5zaXZlICIKKyJjaGVjaywgcnVuIHJlaXNlcmZzY2sgLS1jaGVjay4iCittc2dzdHIgIiIKKyJJbCBmaWxlIHN5c3RlbSBleHQyIGhhIHBhc3NhdG8gaSBjb250cm9sbGkgZGkgYmFzZS4gUGVyIHVuIGNvbnRyb2xsbyBwacO5ICIKKyJhcHByb2ZvbmRpdG8gdXRpbGl6emFyZSBpbCBwcm9ncmFtbWEgZTJmc2NrLiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDc0CisjLCBmdXp6eQorbXNnaWQgIlNvcnJ5LCBjYW4ndCBtb3ZlIHRoZSBzdGFydCBvZiByZWlzZXJmcyBwYXJ0aXRpb25zIHlldC4iCittc2dzdHIgIiIKKyJTcGlhY2VudGUsIG1hIG5vbiDDqCBhbmNvcmEgcG9zc2liaWxlIHNwb3N0YXJlIGwnaW5pemlvIGRpIHVuYSBwYXJ0aXppb25lICIKKyJleHQyISIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDkwCittc2dpZCAiQ291bGRuJ3QgcmVvcGVuIGRldmljZSBhYnN0cmFjdGlvbiBsYXllciBmb3IgcmVhZC93cml0ZS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NTA4IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NTUyCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjI1MCBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjYyOQorbXNnaWQgInNocmlua2luZyIKK21zZ3N0ciAicmlkdXppb25lIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo1MjAKKyMsIGZ1enp5Cittc2dpZCAiZXhwYW5kaW5nIgorbXNnc3RyICJBdnZpc28iCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjU5MgorbXNnaWQgIkNvdWxkbid0IGNyZWF0ZSByZWlzZXJmcyBkZXZpY2UgYWJzdHJhY3Rpb24gaGFuZGxlci4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NjA2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJEZXZpY2UgaXMgdG9vIHNtYWxsIGZvciAlbHUgYmxvY2tzLiIKK21zZ3N0ciAiRmlsZSBzeXN0ZW0gdHJvcHBvIHBpY29sbyBwZXIgZXh0Mi4iCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjYxNQorbXNnaWQgImNvcHlpbmciCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IHJlc29sdmUgc3ltYm9sICVzLiAgRXJyb3I6ICVzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo3MDQKK21zZ2lkICJHTlUgUGFydGVkIGZvdW5kIGFuIGludmFsaWQgbGlicmVpc2VyZnMgbGlicmFyeS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJHTlUgUGFydGVkIGhhcyBkZXRlY3RlZCBsaWJyZWlzZXJmcyBpbnRlcmZhY2UgdmVyc2lvbiBtaXNtYXRjaC4gIEZvdW5kICVkLSUiCisiZCwgcmVxdWlyZWQgJWQuIFJlaXNlckZTIHN1cHBvcnQgd2lsbCBiZSBkaXNhYmxlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9haXguYzoxMzcKKyMsIGZ1enp5Cittc2dpZCAiU3VwcG9ydCBmb3IgcmVhZGluZyBBSVggZGlzayBsYWJlbHMgaXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiIKKyJJbCBzdXBwb3J0byBwZXIgY3JlYXJlIGlsIGZpbGUgc3lzdGVtICVzIG5vbiDDqCBhbmNvcmEgc3RhdG8gaW1wbGVtZW50YXRvLiIKKworIzogbGlicGFydGVkL2xhYmVscy9haXguYzoxNDgKKyMsIGZ1enp5Cittc2dpZCAiU3VwcG9ydCBmb3Igd3JpdGluZyBBSVggZGlzayBsYWJlbHMgaXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiIKKyJJbCBzdXBwb3J0byBwZXIgY3JlYXJlIGlsIGZpbGUgc3lzdGVtICVzIG5vbiDDqCBhbmNvcmEgc3RhdG8gaW1wbGVtZW50YXRvLiIKKworIzogbGlicGFydGVkL2xhYmVscy9haXguYzoxNjEKKyMsIGZ1enp5Cittc2dpZCAiIgorIlN1cHBvcnQgZm9yIGFkZGluZyBwYXJ0aXRpb25zIHRvIEFJWCBkaXNrIGxhYmVscyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiIgorIklsIHN1cHBvcnRvIHBlciBjcmVhcmUgaWwgZmlsZSBzeXN0ZW0gJXMgbm9uIMOoIGFuY29yYSBzdGF0byBpbXBsZW1lbnRhdG8uIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2FpeC5jOjE3MQorIywgZnV6enkKK21zZ2lkICIiCisiU3VwcG9ydCBmb3IgZHVwbGljYXRpbmcgcGFydGl0aW9ucyBpbiBBSVggZGlzayBsYWJlbHMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiIKKyJJbCBzdXBwb3J0byBwZXIgY3JlYXJlIGlsIGZpbGUgc3lzdGVtICVzIG5vbiDDqCBhbmNvcmEgc3RhdG8gaW1wbGVtZW50YXRvLiIKKworIzogbGlicGFydGVkL2xhYmVscy9haXguYzoxODkKKyMsIGZ1enp5Cittc2dpZCAiIgorIlN1cHBvcnQgZm9yIHNldHRpbmcgc3lzdGVtIHR5cGUgb2YgcGFydGl0aW9ucyBpbiBBSVggZGlzayBsYWJlbHMgaXMgbm90ICIKKyJpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICIiCisiSWwgc3VwcG9ydG8gcGVyIGNyZWFyZSBpbCBmaWxlIHN5c3RlbSAlcyBub24gw6ggYW5jb3JhIHN0YXRvIGltcGxlbWVudGF0by4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYWl4LmM6MTk5CisjLCBmdXp6eQorbXNnaWQgIlN1cHBvcnQgZm9yIHNldHRpbmcgZmxhZ3MgaW4gQUlYIGRpc2sgbGFiZWxzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICIiCisiSWwgc3VwcG9ydG8gcGVyIGNyZWFyZSBpbCBmaWxlIHN5c3RlbSAlcyBub24gw6ggYW5jb3JhIHN0YXRvIGltcGxlbWVudGF0by4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYnNkLmM6NTAxIGxpYnBhcnRlZC9sYWJlbHMvZGFzZC5jOjc1NQorIzogbGlicGFydGVkL2xhYmVscy9kb3MuYzoxOTc0IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6NzcwCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjE0NDggbGlicGFydGVkL2xhYmVscy9sb29wLmM6MjQ4CisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjE0MDggbGlicGFydGVkL2xhYmVscy9wYzk4LmM6NzU5CisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjEwNDEgbGlicGFydGVkL2xhYmVscy9zdW4uYzo3MDUKK21zZ2lkICJVbmFibGUgdG8gc2F0aXNmeSBhbGwgY29uc3RyYWludHMgb24gdGhlIHBhcnRpdGlvbi4iCittc2dzdHIgIkltcG9zc2liaWxlIHNvZGRpc2ZhcmUgdHV0dGkgaSB2aW5jb2xpIHN1bGxhIHBhcnRpemlvbmUuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2JzZC5jOjUyNgorbXNnaWQgIlVuYWJsZSB0byBhbGxvY2F0ZSBhIGJzZCBkaXNrbGFiZWwgc2xvdC4iCittc2dzdHIgIkltcG9zc2liaWxlIGFsbG9jYXJlIHVubyBzcGF6aW8gZGVsbCdldGljaGV0dGEgYnNkLiIKKworIzogbGlicGFydGVkL2xhYmVscy9kYXNkLmM6MTY2CisjLCBmdXp6eQorbXNnaWQgIlVuYWJsZSB0byBkZXRlcm1pbmUgdGhlIGJsb2NrIHNpemUgb2YgdGhpcyBkYXNkIgorbXNnc3RyICJJbXBvc3NpYmlsZSBkZXRlcm1pbmFyZSBsYSBkaW1lbnNpb25lIGRpICVzICglcykuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rhc2QuYzo3ODEKKyMsIGZ1enp5Cittc2dpZCAiVW5hYmxlIHRvIGFsbG9jYXRlIGEgZGFzZCBkaXNrbGFiZWwgc2xvdCIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgYWxsb2NhcmUgdW5vIHNwYXppbyBkZWxsJ2V0aWNoZXR0YSBic2QuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rvcy5jOjgyNworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHBhcnRpdGlvbiB0YWJsZSBvbiAlcyAtLSB3cm9uZyBzaWduYXR1cmUgJXguIgorbXNnc3RyICJUYWJlbGxhIGRlbGxlIHBhcnRpemlvbmkgbm9uIHZhbGlkYSBzdSAlcyAtLSBmaXJtYSAleCBlcnJhdGEuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rvcy5jOjg1NQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHBhcnRpdGlvbiB0YWJsZSAtIHJlY3Vyc2l2ZSBwYXJ0aXRpb24gb24gJXMuIgorbXNnc3RyICJUYWJlbGxhIGRlbGxhIHBhcnRpemlvbmkgbm9uIHZhbGlkYSAtIHBhcnRpemlvbmUgcmljb3JzaXZhIHN1ICVzLiIKKworIzogbGlicGFydGVkL2xhYmVscy9kb3MuYzoxMzE4Cittc2dpZCAiRXh0ZW5kZWQgcGFydGl0aW9ucyBjYW5ub3QgYmUgaGlkZGVuIG9uIG1zZG9zIGRpc2sgbGFiZWxzLiIKK21zZ3N0ciAiTGUgcGFydGl6aW9uaSBlc3Rlc2Ugbm9uIHBvc3Nvbm8gZXNzZXJlIG5hc2Nvc3RlIHN1IGV0aWNoZXR0ZSBtc2Rvcy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZG9zLmM6MTk1OAorbXNnaWQgIlBhcnRlZCBjYW4ndCByZXNpemUgcGFydGl0aW9ucyBtYW5hZ2VkIGJ5IFdpbmRvd3MgRHluYW1pYyBEaXNrLiIKK21zZ3N0ciAiIgorIlBhcnRlZCBub24gcHXDsiByaWRpbWVuc2lvbmFyZSBwYXJ0aXppb25pIGdlc3RpdGUgZGEgV2luZG93cyBEeW5hbWljIERpc2suIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjE5MAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBoYXMgbm8gZXh0ZW5kZWQgcGFydGl0aW9uICh2b2x1bWUgaGVhZGVyIHBhcnRpdGlvbikuIgorbXNnc3RyICIlcyBub24gaGEgcGFydGl6aW9uaSBlc3Rlc2UgKHZvbHVtZSBoZWFkZXIgcGFydGl0aW9uKS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6MzEzCittc2dpZCAiQ2hlY2tzdW0gaXMgd3JvbmcsIGluZGljYXRpbmcgdGhlIHBhcnRpdGlvbiB0YWJsZSBpcyBjb3JydXB0LiIKK21zZ3N0ciAiIgorIkxhIHNvbW1hIGRpIGNvbnRyb2xsbyDDqCBzYmFnbGlhdGE7IHZhbGUgYSBkaXJlIGNoZSBsYSB0YWJlbGxhIGRlbGxlICIKKyJwYXJ0aXppb25pIMOoIGNvcnJvdHRhLiIKKworIzogbGlicGFydGVkL2xhYmVscy9kdmguYzo2MTYKK21zZ2lkICJPbmx5IHByaW1hcnkgcGFydGl0aW9ucyBjYW4gYmUgcm9vdCBwYXJ0aXRpb25zLiIKK21zZ3N0ciAiU29sbyBsZSBwYXJ0aXppb25pIHByaW1hcmllIHBvc3Nvbm8gZXNzZXJlIHBhcnRpemlvbmkgZGkgcm9vdC4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6NjMwCittc2dpZCAiT25seSBwcmltYXJ5IHBhcnRpdGlvbnMgY2FuIGJlIHN3YXAgcGFydGl0aW9ucy4iCittc2dzdHIgIlNvbG8gbGUgcGFydGl6aW9uaSBwcmltYXJpZSBwb3Nzb25vIGVzc2VyZSBkaSBzd2FwLiIKKworIzogbGlicGFydGVkL2xhYmVscy9kdmguYzo2NDQKK21zZ2lkICJPbmx5IGxvZ2ljYWwgcGFydGl0aW9ucyBjYW4gYmUgYSBib290IGZpbGUuIgorbXNnc3RyICJTb2xvIGxlIHBhcnRpemlvbmkgbG9naWNoZSBwb3Nzb25vIGVzc2VyZSBmaWxlIGRpIGF2dmlvLiIKKworIzogbGlicGFydGVkL2xhYmVscy9kdmguYzo3MjEKK21zZ2lkICJPbmx5IGxvZ2ljYWwgcGFydGl0aW9ucyAoYm9vdCBmaWxlcykgaGF2ZSBhIG5hbWUuIgorbXNnc3RyICJTb2xvIGxlIHBhcnRpemlvbmkgbG9naWNoZSAoZmlsZSBkaSBhdnZpbykgaGFubm8gdW4gbm9tZS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6ODEyCittc2dpZCAiVG9vIG1hbnkgcHJpbWFyeSBwYXJ0aXRpb25zIgorbXNnc3RyICJUcm9wcGUgcGFydGl6aW9uaSBwcmltYXJpZSIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEwMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgb3BlbiBlcnJvclxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEwNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgc2VlayBlcnJvclxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgcmVhZCBlcnJvclxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjExMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHdyaXRlIGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiJXMgZHVyYW50ZSBsYSBzY3JpdHR1cmEgc3UgJXMiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIElPQ1RMIGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBBUEkgdmVyc2lvbiBtaXNtYXRjaFxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgVW5zdXBwb3J0ZWQgZGlzayB0eXBlXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBVbnN1cHBvcnRlZCBkaXNrIGZvcm1hdFxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEzMAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIERpc2sgaW4gdXNlXG4iCisiJXNcbiIKK21zZ3N0ciAiRGlzY28gJXM6ICVzXG4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIENvbmZpZyBmaWxlIHN5bnRheCBlcnJvclxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgVm9sdW1lIGxhYmVsIGlzIGNvcnJ1cHRlZC5cbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIGEgZGF0YSBzZXQgbmFtZSBpcyBjb3JydXB0ZWQuXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBzcGFjZSBhbGxvY2F0aW9uXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBkZXZpY2UgdmVyaWZpY2F0aW9uIGZhaWxlZFxuIgorIlRoZSBzcGVjaWZpZWQgZGV2aWNlIGlzIG5vdCBhIHZhbGlkIERBU0QgZGV2aWNlXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgRmF0YWwgZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6NDU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBjb250YWlucyBHUFQgc2lnbmF0dXJlcywgaW5kaWNhdGluZyB0aGF0IGl0IGhhcyBhIEdQVCB0YWJsZS4gIEhvd2V2ZXIsIGl0ICIKKyJkb2VzIG5vdCBoYXZlIGEgdmFsaWQgZmFrZSBtc2RvcyBwYXJ0aXRpb24gdGFibGUsIGFzIGl0IHNob3VsZC4gIFBlcmhhcHMgaXQgIgorIndhcyBjb3JydXB0ZWQgLS0gcG9zc2libHkgYnkgYSBwcm9ncmFtIHRoYXQgZG9lc24ndCB1bmRlcnN0YW5kIEdQVCBwYXJ0aXRpb24gIgorInRhYmxlcy4gIE9yIHBlcmhhcHMgeW91IGRlbGV0ZWQgdGhlIEdQVCB0YWJsZSwgYW5kIGFyZSBub3cgdXNpbmcgYW4gbXNkb3MgIgorInBhcnRpdGlvbiB0YWJsZS4gIElzIHRoaXMgYSBHUFQgcGFydGl0aW9uIHRhYmxlPyIKK21zZ3N0ciAiIgorIiVzIGNvbnRpZW5lIGRlbGxlIGZpcm1lIEdQVCwgaW5kaWNhbmRvIGNoZSDDqCB1bmEgdGFiZWxsYSBHUFQuIENpb25vbm9zdGFudGUgIgorIm5vbiBoYSB1bmEgZmludGEgdGFiZWxsYSBkZWxsZSBwYXJ0aXppb25pIHZhbGlkYSBwZXIgbXNkb3MsIGNvbWUgZG92cmViYmUuICIKKyJGb3JzZSDDqCBzdGF0YSBjb3Jyb3R0YSwgbWFnYXJpIGRhIHVuIHByb2dyYW1tYSBjaGUgbm9uIGNvbXByZW5kZSBsZSB0YWJlbGxlICIKKyJkZWxsZSBwYXJ0aXppb25pIEdQVCwgb3BwdXJlIMOoIHN0YXRhIGNhbmNlbGxhdGEgbGEgdGFiZWxsYSBHUFQgZSBvcmEgc2kgc3RhICIKKyJ1c2FuZG8gcXVlbGxhIG1zZG9zLiBRdWVzdGEgw6ggdW5hIHRhYmVsbGEgZGkgcGFydGl6aW9uaSBHUFQ/IgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjY0OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvcm1hdCBvZiB0aGUgR1BUIHBhcnRpdGlvbiB0YWJsZSBpcyB2ZXJzaW9uICV4LCB3aGljaCBpcyBuZXdlciB0aGFuICIKKyJ3aGF0IFBhcnRlZCBjYW4gcmVjb2duaXNlLiAgUGxlYXNlIHRlbGwgdXMhICBidWctcGFydGVkQGdudS5vcmciCittc2dzdHIgIiIKKyJJbCBmb3JtYXRvIGRlbGxhIHRhYmVsbGEgZGkgcGFydGl6aW9uaSBHUFQgaGEgdmVyc2lvbmUgJXgsIGNoZSDDqCBzdWNjZXNzaXZhICIKKyJhIHF1ZWxsZSBjb25vc2NpdXRlIGRhIHBhcnRlZC4gUGVyIGZhdm9yZSBhdnZpc2F0ZWNpISBidWctcGFydGVkQGdudS5vcmciCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6Njk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3QgYWxsIG9mIHRoZSBzcGFjZSBhdmFpbGFibGUgdG8gJXMgYXBwZWFycyB0byBiZSB1c2VkLCB5b3UgY2FuIGZpeCB0aGUgR1BUICIKKyJ0byB1c2UgYWxsIG9mIHRoZSBzcGFjZSAoYW4gZXh0cmEgJWxsdSBibG9ja3MpIG9yIGNvbnRpbnVlIHdpdGggdGhlIGN1cnJlbnQgIgorInNldHRpbmc/ICIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjgyNworbXNnaWQgIiIKKyJUaGUgYmFja3VwIEdQVCB0YWJsZSBpcyBub3QgYXQgdGhlIGVuZCBvZiB0aGUgZGlzaywgYXMgaXQgc2hvdWxkIGJlLiAgVGhpcyAiCisibWlnaHQgbWVhbiB0aGF0IGFub3RoZXIgb3BlcmF0aW5nIHN5c3RlbSBiZWxpZXZlcyB0aGUgZGlzayBpcyBzbWFsbGVyLiAgRml4LCAiCisiYnkgbW92aW5nIHRoZSBiYWNrdXAgdG8gdGhlIGVuZCAoYW5kIHJlbW92aW5nIHRoZSBvbGQgYmFja3VwKT8iCittc2dzdHIgIiIKKyJMYSBjb3BpYSBkaSBzY29ydGEgZGVsbGEgdGFiZWxsYSBHUFQgbm9uIMOoIHByZXNlbnRlLCBjb21lIGRvdnJlYmJlLCBhbGxhICIKKyJmaW5lIGRlbCBkaXNjby4gUXVlc3RvIHBvdHJlYmJlIHZvbGVyIGRpcmUgY2hlIHVuIGFsdHJvIHNpc3RlbWEgb3BlcmF0aXZvICIKKyJwZW5zYSBjaGUgaWwgZGlzY28gc2lhIHBpw7kgcGljY29sby4gQ29ycmVnZ2VyZSBpbCBwcm9ibGVtYSBzcG9zdGFuZG8gbGEgIgorImNvcGlhIGFsbGEgZmluZSAoZSByaW11b3ZlbmRvIGxhIHZlY2NoaWEgY29waWEpPyIKKworIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzo4NjIKK21zZ2lkICIiCisiVGhlIHByaW1hcnkgR1BUIHRhYmxlIGlzIGNvcnJ1cHQsIGJ1dCB0aGUgYmFja3VwIGFwcGVhcnMgT0ssIHNvIHRoYXQgd2lsbCBiZSAiCisidXNlZC4iCittc2dzdHIgIiIKKyJMYSB0YWJlbGxhIEdQVCBwcmluY2lwYWxlIMOoIGNvcnJvdHRhLCBtYSBsYSBjb3BpYSBkaSBiYWNrdXAgc2VtYnJhIGEgcG9zdG8sICIKKyJxdWluZGkgbGEgc2Vjb25kYSB2ZXJyw6AgdXRpbGl6emF0YS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6ODcwCittc2dpZCAiIgorIkJvdGggdGhlIHByaW1hcnkgYW5kIGJhY2t1cCBHUFQgdGFibGVzIGFyZSBjb3JydXB0LiAgVHJ5IG1ha2luZyBhIGZyZXNoICIKKyJ0YWJsZSwgYW5kIHVzaW5nIFBhcnRlZCdzIHJlc2N1ZSBmZWF0dXJlIHRvIHJlY292ZXIgcGFydGl0aW9ucy4iCittc2dzdHIgIiIKKyJTaWEgbGEgdGFiZWxsYSBHUFQgcHJpbmNpcGFsZSBjaGUgbGEgY29waWEgc29ubyBjb3Jyb3R0ZS4gUHJvdmFyZSBhIGNyZWFybmUgIgorInVuYSBudW92YSBlLCB0cmFtaXRlIGxlIHBvdGVuemlhbGl0w6AgZGkgcmVjdXBlcm8gZGkgcGFydGVkLCByZWN1cGVyYXJlIGxlICIKKyJwYXJ0aXppb25pLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoxODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBzaWduYXR1cmUgJXggZm9yIE1hYyBkaXNrIGxhYmVscy4iCittc2dzdHIgIkZpcm1hICV4IG5vbiB2YWxpZGEgcGVyIGxlIGV0aWNoZXR0ZSBkZWkgZGlzY2hpIE1hYy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6MjI2Cittc2dpZCAiUGFydGl0aW9uIG1hcCBoYXMgbm8gcGFydGl0aW9uIG1hcCBlbnRyeSEiCittc2dzdHIgIkxhIG1hcHBhIGRlbGxlIHBhcnRpemlvbmkgbm9uIGhhIGVsZW1lbnRpLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgdG9vIHNtYWxsIGZvciBhIE1hYyBkaXNrIGxhYmVsISIKK21zZ3N0ciAiJXMgw6ggdHJvcHBvIHBpY2NvbG8gcGVyIHVuYSBldGljaGV0dGEgZGkgZGlzY28gTWFjISIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo1MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGFydGl0aW9uICVkIGhhcyBhbiBpbnZhbGlkIHNpZ25hdHVyZSAleC4iCittc2dzdHIgIkxhIHBhcnRpemlvbmUgJWQgaGEgdW5hIGZpcm1hIG5vbiB2YWxpZGEgJXguIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjU1MAorIywgYy1mb3JtYXQKK21zZ2lkICJQYXJ0aXRpb24gJWQgaGFzIGFuIGludmFsaWQgbGVuZ3RoIG9mIDAgYnl0ZXMhIgorbXNnc3RyICJMYSBwYXJ0aXppb25lICVkIGhhIHVuYSBsdW5naGV6emEgbm9uIHZhbGlkYSBkaSAwIGJ5dGUhIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjU4MAorbXNnaWQgIlRoZSBkYXRhIHJlZ2lvbiBkb2Vzbid0IHN0YXJ0IGF0IHRoZSBzdGFydCBvZiB0aGUgcGFydGl0aW9uLiIKK21zZ3N0ciAiTGEgcmVnaW9uZSBkZWkgZGF0aSBub24gY29taW5jaWEgYWxsJ2luaXppbyBkZWxsYSBwYXJ0aXppb25lLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo1OTcKK21zZ2lkICJUaGUgYm9vdCByZWdpb24gZG9lc24ndCBzdGFydCBhdCB0aGUgc3RhcnQgb2YgdGhlIHBhcnRpdGlvbi4iCittc2dzdHIgIkxhIHJlZ2lvbmUgZGkgYXZ2aW8gbm9uIGNvbWluY2lhIGFsbCdpbml6aW8gZGVsbGEgcGFydGl6aW9uZS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NjExCittc2dpZCAiVGhlIHBhcnRpdGlvbidzIGJvb3QgcmVnaW9uIGRvZXNuJ3Qgb2NjdXB5IHRoZSBlbnRpcmUgcGFydGl0aW9uLiIKK21zZ3N0ciAiTGEgcmVnaW9uZSBkaSBhdnZpbyBkZWxsYSBwYXJ0aXppb25lIG5vbiBvY2N1cGEgbCdpbnRlcmEgcGFydGl6aW9uZS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NjIyCittc2dpZCAiVGhlIHBhcnRpdGlvbidzIGRhdGEgcmVnaW9uIGRvZXNuJ3Qgb2NjdXB5IHRoZSBlbnRpcmUgcGFydGl0aW9uLiIKK21zZ3N0ciAiTGEgcmVnaW9uZSBkYXRpIGRlbGxhIHBhcnRpemlvbmUgbm9uIG9jY3VwYSBsJ2ludGVyYSBwYXJ0aXppb25lLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo2NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldlaXJkIGJsb2NrIHNpemUgb24gZGV2aWNlIGRlc2NyaXB0b3I6ICVkIGJ5dGVzIGlzIG5vdCBkaXZpc2libGUgYnkgNTEyLiIKK21zZ3N0ciAiIgorIkRpbWVuc2lvbmUgc29zcGV0dGEgZGVsIGJsb2NjbyBuZWwgZGVzY3JpdHRvcmUgZGVsIGRldmljZTogJWQgYnl0ZSBub24gw6ggIgorImRpdmlzaWJpbGUgcGVyIDUxMi4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6Njg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZHJpdmVyIGRlc2NyaXB0b3Igc2F5cyB0aGUgcGh5c2ljYWwgYmxvY2sgc2l6ZSBpcyAlZCBieXRlcywgYnV0IExpbnV4ICIKKyJzYXlzIGl0IGlzICVkIGJ5dGVzLiIKK21zZ3N0ciAiIgorIklsIGRlc2NyaXR0b3JlIGRlbCBkcml2ZXIgaW5kaWNhIGNoZSBsYSBkaW1lbnNpb25lIGRlbCBibG9jY28gZmlzaWNvIMOoIGRpICVkICIKKyJieXRlLCBtYSBMaW51eCBsbyBpbmRpY2EgZGkgJWQgYnl0ZS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NzM2Cittc2dpZCAiTm8gdmFsaWQgcGFydGl0aW9uIG1hcCBmb3VuZC4iCittc2dzdHIgIk5vbiDDqCBzdGF0YSB0cm92YXRhIGFsY3VuYSBtYXBwYSBkZWxsZSBwYXJ0aXppb25pIHZhbGlkYS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6Nzk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb25mbGljdGluZyBwYXJ0aXRpb24gbWFwIGVudHJ5IHNpemVzISAgRW50cnkgMSBzYXlzIGl0IGlzICVkLCBidXQgZW50cnkgJWQgIgorInNheXMgaXQgaXMgJWQhIgorbXNnc3RyICIiCisiRHVlIGVsZW1lbnRpIGRlbGxhIG1hcHBhIGRlbGxlIHBhcnRpemlvbmkgaGFubm8gZGltZW5zaW9uZSBkaXZlcnNhISAiCisiTCdlbGVtZW50byAxIGRpY2UgJWQsIG1lbnRyZSBsJ2VsZW1lbnRvICVkIGRpY2UgJWQhIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjgyMgorbXNnaWQgIldlaXJkISAgVGhlcmUgYXJlIDIgcGFydGl0aW9ucyBtYXAgZW50cmllcyEiCittc2dzdHIgIlN0cmFubywgY2kgc29ubyAyIG1hcHBhIGRlbGxlIHBhcnRpemlvbmkuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjEzNDcKK21zZ2lkICIiCisiQ2hhbmdpbmcgdGhlIG5hbWUgb2YgYSByb290IG9yIHN3YXAgcGFydGl0aW9uIHdpbGwgcHJldmVudCBMaW51eCBmcm9tICIKKyJyZWNvZ25pc2luZyBpdCBhcyBzdWNoLiIKK21zZ3N0ciAiIgorIkNhbWJpYXJlIGlsIG5vbWUgZGkgdW5hIHBhcnRpemlvbmUgZGkgcm9vdCBvIHN3YXAgbm9uIHBlcm1ldHRlcsOgIGEgTGludXggZGkgIgorInJpY29ub3NjZXJsZSBjb21lIHRhbGkuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjE0NDMKK21zZ2lkICJDYW4ndCBhZGQgYW5vdGhlciBwYXJ0aXRpb24gLS0gdGhlIHBhcnRpdGlvbiBtYXAgaXMgdG9vIHNtYWxsISIKK21zZ3N0ciAiIgorIk5vbiDDqCBwb3NzaWJpbGUgYWdnaXVuZ2VyZSB1bidhbHRyYSBwYXJ0aXppb25lOiBsYSBtYXBwYSBkZWxsZSBwYXJ0aXppb25pIMOoICIKKyJ0cm9wcG8gcGljY29sYSEiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcGM5OC5jOjM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHBhcnRpdGlvbiB0YWJsZSBvbiAlcy4iCittc2dzdHIgIlRhYmVsbGEgZGVsbGUgcGFydGl6aW9uaSBub24gdmFsaWRhIHN1ICVzLiIKKworIzogbGlicGFydGVkL2xhYmVscy9wYzk4LmM6NDA2IGxpYnBhcnRlZC9sYWJlbHMvcGM5OC5jOjQ4NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGFydGl0aW9uICVkIGlzbid0IGFsaWduZWQgdG8gY3lsaW5kZXIgYm91bmRhcmllcy4gIFRoaXMgaXMgc3RpbGwgIgorInVuc3VwcG9ydGVkLiIKK21zZ3N0ciAiIgorIkxhIHBhcnRpemlvbmUgJWQgbm9uIMOoIGFsbGluZWF0YSBjb24gbCdpbml6aW8gZGkgdW4gY2lsaW5kcm8uIElsIHN1cHBvcnRvICIKKyJwZXIgcXVlc3RhIGNhc2lzdGljYSBub24gw6ggYW5jb3JhIHByZXNlbnRlLiIKKworIzogbGlicGFydGVkL2xhYmVscy9wYzk4LmM6NzkxCittc2dpZCAiQ2FuJ3QgYWRkIGFub3RoZXIgcGFydGl0aW9uLiIKK21zZ3N0ciAiTm9uIMOoIHBvc3NpYmlsZSBhZ2dpdW5nZXJlIHVuJ2FsdHJhIHBhcnRpemlvbmUuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjE2MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEJhZCBjaGVja3N1bSBvbiBibG9jayAlbGx1IG9mIHR5cGUgJXMuIgorbXNnc3RyICIlczogU29tbWEgZGkgY29udHJvbGxvIGVycmF0YSBzdWwgYmxvY2NvICVsbHUgZGkgdGlwbyAlcy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6NDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRGlkbid0IGZpbmQgcmRiIGJsb2NrLCBzaG91bGQgbmV2ZXIgaGFwcGVuLiIKK21zZ3N0ciAiJXM6IE5vbiDDqCBzdGF0byB0cm92YXRvIGlsIGJsb2NjbyDCq3JkYsK7LCBub24gZGV2ZSBtYWkgc3VjY2VkZXJlLiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo1ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBMb29wIGRldGVjdGVkIGF0IGJsb2NrICVkLiIKK21zZ3N0ciAiJXM6IFJpbGV2YXRhIGl0ZXJhemlvbmUgYWwgYmxvY2NvICVkLiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo2MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBUaGUgJXMgbGlzdCBzZWVtcyBiYWQgYXQgYmxvY2sgJXMuIgorbXNnc3RyICIlczogTGEgbGlzdGEgJXMgc2VtYnJhIGNvcnJvdHRhIGFsIGJsb2NjbyAlcy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6Njg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGxpc3QgYmFkIGJsb2Nrcy4iCittc2dzdHIgIiVzOiBFcnJvcmUgbmVsbCdlbGVuY2FyZSBpIGJsb2NjaGkgY29ycm90dGkuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjY5NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBsaXN0IHBhcnRpdGlvbiBibG9ja3MuIgorbXNnc3RyICIlczogRXJyb3JlIG5lbGwnZWxlbmNhcmUgaSBibG9jY2hpIGRlbGxhIHBhcnRpemlvbmUuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjcwNQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBsaXN0IGZpbGUgc3lzdGVtIGJsb2Nrcy4iCittc2dzdHIgIiVzOiBFcnJvcmUgbmVsbCdlbGVuY2FyZSBpIGJsb2NjaGkgZGVsIGZpbGUgc3lzdGVtLiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo3MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gbGlzdCBib290IGJsb2Nrcy4iCittc2dzdHIgIiVzOiBFcnJvcmUgbmVsbCdlbGVuY2FyZSBpIGJsb2NjaGkgZGkgYXZ2aW8gKGRpIGJvb3QpLiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo3NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHdyaXRlIHBhcnRpdGlvbiBibG9jayBhdCAlZC4iCittc2dzdHIgIkVycm9yZSBuZWxsYSBzY3JpdHR1cmEgZGVpIGJsb2NjaGkgZGkgcGFydGl6aW9uZSBuZWxsYSBwb3NpemlvbmUgJWQuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjEwNjkKK21zZ2lkICJVbmFibGUgdG8gYWxsb2NhdGUgYSBwYXJ0aXRpb24gbnVtYmVyLiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgYWxsb2NhcmUgdW4gbnVtZXJvIGRpIHBhcnRpemlvbmUuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3N1bi5jOjE0NQorbXNnaWQgIkNvcnJ1cHRlZCBTdW4gZGlzayBsYWJlbCBkZXRlY3RlZC4iCittc2dzdHIgIsOIIHN0YXRhIHRyb3ZhdGEgbCdldGljaGV0dGEgU3VuIGNvcnJvdHRhLiIKKworIzogbGlicGFydGVkL2xhYmVscy9zdW4uYzoyNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBkaXNrIENIUyBnZW9tZXRyeSAoJWQsJWQsJWQpIHJlcG9ydGVkIGJ5IHRoZSBvcGVyYXRpbmcgc3lzdGVtIGRvZXMgbm90ICIKKyJtYXRjaCB0aGUgZ2VvbWV0cnkgc3RvcmVkIG9uIHRoZSBkaXNrIGxhYmVsICglZCwlZCwlZCkuIgorbXNnc3RyICIiCisiTGEgZ2VvbWV0cmlhIENIUyAoJWQsJWQsJWQpIGRlbCBkaXNjbyBub24gY29ycmlzcG9uZGUgYSBxdWVsbGEgcmlwb3J0YXRhICIKKyJuZWxsJ2V0aWNoZXR0YSAoJWQsJWQsJWQpLiIKKworIzogbGlicGFydGVkL2xhYmVscy9zdW4uYzoyODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGRpc2sgbGFiZWwgZGVzY3JpYmVzIGEgZGlzayBiaWdnZXIgdGhhbiAlcy4iCittc2dzdHIgIkwnZXRpY2hldHRhIGRlbCBkaXNjbyBkZXNjcml2ZSB1biBkaXNjbyBwacO5IGdyYW5kZSBkaSAlcy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6NDQyCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBkaXNrIGhhcyAlZCBjeWxpbmRlcnMsIHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbWF4aW11bSBvZiA2NTUzNi4iCittc2dzdHIgIklsIGRpc2NvIGhhICVkIGNpbGluZHJpLCBtYWdnaW9yaSBkZWwgbWFzc2ltbyBjb25zZW50aXRvIGNoZSDDqCA2NTUzNi4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6NzM3Cittc2dpZCAiIgorIlRoZSBXaG9sZSBEaXNrIHBhcnRpdGlvbiBpcyB0aGUgb25seSBhdmFpbGFibGUgb25lIGxlZnQuICBHZW5lcmFsbHksIGl0IGlzICIKKyJub3QgYSBnb29kIGlkZWEgdG8gb3ZlcndyaXRlIHRoaXMgcGFydGl0aW9uIHdpdGggYSByZWFsIG9uZS4gIFNvbGFyaXMgbWF5ICIKKyJub3QgYmUgYWJsZSB0byBib290IHdpdGhvdXQgaXQsIGFuZCBTSUxPICh0aGUgc3BhcmMgYm9vdCBsb2FkZXIpIGFwcHJlY2lhdGVzICIKKyJpdCBhcyB3ZWxsLiIKK21zZ3N0ciAiIgorIkxhIHBhcnRpemlvbmUgXCJUdXR0byBpbCBkaXNjb1wiIMOoIGwndW5pY2EgcmltYXN0YSBkaXNwb25pYmlsZS4gTm9ybWFsbWVudGUgIgorIm5vbiDDqCB1bmEgYnVvbmEgaWRlYSBzb3ZyYXNjcml2ZXJsYSBjb24gdW5hIHBhcnRpemlvbmUgcmVhbGUuIFNvbGFyaXMgIgorInBvdHJlYmJlIG5vbiBlc3NlcmUgaW4gZ3JhZG8gZGkgYXZ2aWFyc2k7IGlub2x0cmUgYW5jaGUgU0lMTyAoaWwgwqtib290ICIKKyJsb2FkZXLCuyBwZXIgc3BhcmMpIG5lIGZhIHVzby4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6NzUyCittc2dpZCAiU3VuIGRpc2sgbGFiZWwgaXMgZnVsbC4iCittc2dzdHIgIkwnZXRpY2hldHRhIFN1biDDqCBjb21wbGV0YS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjE2MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgb3BlbmluZyBkZXZpY2UgJyVzJyBmYWlsZWQuXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzoxNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHNlZWtpbmcgZGV2aWNlICclcycgZmFpbGVkLlxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6MTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyB3cml0aW5nIHRvIGRldmljZSAnJXMnIGZhaWxlZCxcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjE3NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgcmVhZGluZyBmcm9tIGRldmljZSAnJXMnIGZhaWxlZC5cbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjE3OQorIywgYy1mb3JtYXQKK21zZ2lkICJGYXRhbCBlcnJvclxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQxOAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIFZUT0MgbGFiZWxzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0MjQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBWVE9DIEZNVDEgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDMxCittc2dpZCAiQ291bGQgbm90IHJlYWQgVlRPQyBGTVQ0IERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQzOAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIFZUT0MgRk1UNSBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0NDUKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBWVE9DIEZNVDcgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDYyCittc2dpZCAiQ291bGQgbm90IHdyaXRlIFZUT0MgbGFiZWxzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0NjgKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgVlRPQyBGTVQxIERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQ3NQorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBWVE9DIEZNVDQgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDgyCittc2dpZCAiQ291bGQgbm90IHdyaXRlIFZUT0MgRk1UNSBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0ODkKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgVlRPQyBGTVQ3IERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9saWJwYXJ0ZWQuYzoyOTYgbGlicGFydGVkL2xpYnBhcnRlZC5jOjMxNgorbXNnaWQgIk91dCBvZiBtZW1vcnkuIgorbXNnc3RyICJNZW1vcmlhIG5vbiBzdWZmaWNpZW50ZS4iCisKKyM6IGxpYnBhcnRlZC91bml0LmM6MTM5Cittc2dpZCAiQ2Fubm90IGdldCB1bml0IHNpemUgZm9yIHNwZWNpYWwgdW5pdCAnQ09NUEFDVCcuIgorbXNnc3RyICLDiCBpbXBvc3NpYmlsZSBjb25vc2NlcmUgbGEgZGltZW5zaW9uZSBkZWxsJ3VuaXTDoCBzcGVjaWFsZSAnQ09NUEFDVCciCisKKyM6IGxpYnBhcnRlZC91bml0LmM6Mzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIlwiJXNcIiBoYXMgaW52YWxpZCBzeW50YXggZm9yIGxvY2F0aW9ucy4iCittc2dzdHIgIlwiJXNcIiB1c2EgdW5hIHNpbnRhc3NpIGVycmF0YSBwZXIgbGEgbG9jYXppb25lLiIKKworIzogbGlicGFydGVkL3VuaXQuYzozOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIG1heGltdW0gaGVhZCB2YWx1ZSBpcyAlZC4iCittc2dzdHIgIklsIG1hc3NpbW8gdmFsb3JlIHBlciBsYSB0ZXN0aW5hIMOoICVkLiIKKworIzogbGlicGFydGVkL3VuaXQuYzo0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIG1heGltdW0gc2VjdG9yIHZhbHVlIGlzICVkLiIKK21zZ3N0ciAiSWwgbWFzc2ltbyB2YWxvcmUgZGVsIHNldHRvcmUgw6ggJWQuIgorCisjOiBsaWJwYXJ0ZWQvdW5pdC5jOjQxMyBsaWJwYXJ0ZWQvdW5pdC5jOjU0NQorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgbG9jYXRpb24gJXMgaXMgb3V0c2lkZSBvZiB0aGUgZGV2aWNlICVzLiIKK21zZ3N0ciAiTGEgbG9jYXppb25lICVzIMOoIGVzdGVybmEgYWwgZGV2aWNlICVzLiIKKworIzogbGlicGFydGVkL3VuaXQuYzo1MjcKK21zZ2lkICJJbnZhbGlkIG51bWJlci4iCittc2dzdHIgIk51bWVybyBub24gdmFsaWRvLiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FmZnMuYzo2MyBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXBmcy5jOjU2CisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXNmcy5jOjcwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBhbGxvY2F0ZSBwYXJ0aXRpb24gYmxvY2tcbiIKK21zZ3N0ciAiJXM6IEVycm9yZSBuZWxsJ2VsZW5jYXJlIGkgYmxvY2NoaSBkZWxsYSBwYXJ0aXppb25lLiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FmZnMuYzo3OCBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXBmcy5jOjcwCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXNmcy5jOjg2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBhbGxvY2F0ZSBibG9ja1xuIgorbXNnc3RyICIlczogRXJyb3JlIG5lbGwnZWxlbmNhcmUgaSBibG9jY2hpIGRpIGF2dmlvIChkaSBib290KS4iCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hZmZzLmM6ODMgbGlicGFydGVkL2ZzL2FtaWdhL2FwZnMuYzo3NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBDb3VsZG4ndCByZWFkIGJvb3QgYmxvY2sgJWxsdVxuIgorbXNnc3RyICIlczogUmlsZXZhdGEgaXRlcmF6aW9uZSBhbCBibG9jY28gJWQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYWZmcy5jOjk5IGxpYnBhcnRlZC9mcy9hbWlnYS9hcGZzLmM6ODYKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hc2ZzLmM6OTIgbGlicGFydGVkL2ZzL2FtaWdhL2FzZnMuYzoxMDYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogQ291bGRuJ3QgcmVhZCByb290IGJsb2NrICVsbHVcbiIKK21zZ3N0ciAiJXM6IFJpbGV2YXRhIGl0ZXJhemlvbmUgYWwgYmxvY2NvICVkLiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6NzIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGFsbG9jYXRlIGlkIGxpc3QgZWxlbWVudFxuIgorbXNnc3RyICIlczogRXJyb3JlIG5lbGwnZWxlbmNhcmUgaSBibG9jY2hpIGNvcnJvdHRpLiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogQ291bGRuJ3QgcmVhZCBibG9jayAlbGx1XG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6MjAyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEJhZCBjaGVja3N1bSBvbiBibG9jayAlbGx1IG9mIHR5cGUgJXNcbiIKK21zZ3N0ciAiJXM6IFNvbW1hIGRpIGNvbnRyb2xsbyBlcnJhdGEgc3VsIGJsb2NjbyAlbGx1IGRpIHRpcG8gJXMuIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzoyMTIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogQ291bGRuJ3Qgd3JpdGUgYmxvY2sgJWRcbiIKK21zZ3N0ciAiJXM6IFJpbGV2YXRhIGl0ZXJhemlvbmUgYWwgYmxvY2NvICVkLiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6Mjc4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBhbGxvY2F0ZSBkaXNrX3NwZWNpZmljIHJkYiBibG9ja1xuIgorbXNnc3RyICIlczogRXJyb3JlIG5lbGwnZWxlbmNhcmUgaSBibG9jY2hpIGNvcnJvdHRpLiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6Mjg5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyA6IERpZG4ndCBmaW5kIHJkYiBibG9jaywgc2hvdWxkIG5ldmVyIGhhcHBlblxuIgorbXNnc3RyICIlczogTm9uIMOoIHN0YXRvIHRyb3ZhdG8gaWwgYmxvY2NvIMKrcmRiwrssIG5vbiBkZXZlIG1haSBzdWNjZWRlcmUuIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzozMTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIHJlYWQgcGFydGl0aW9uIGJsb2NrICVsbHVcbiIKK21zZ3N0ciAiJXM6IEVycm9yZSBuZWxsJ2VsZW5jYXJlIGkgYmxvY2NoaSBkZWxsYSBwYXJ0aXppb25lLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjg3IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzoxMTIKK21zZ2lkICJJbmNvbnNpc3RlbnQgZ3JvdXAgZGVzY3JpcHRvcnMhIgorbXNnc3RyICJEZXNjcml0dG9yaSBkaSBncnVwcG8gaW5jb25zaXN0ZW50aSEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo5MSBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6MTE2Cittc2dpZCAiRmlsZSBzeXN0ZW0gZnVsbCEiCittc2dzdHIgIkZpbGUgc3lzdGVtIHBpZW5vISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjY4NgorbXNnaWQgIkludmFsaWQgc3VwZXJibG9jay4gIEFyZSB5b3Ugc3VyZSB0aGlzIGlzIGFuIGV4dDIgZmlsZSBzeXN0ZW0/IgorbXNnc3RyICJTdXBlcmJsb2NjbyBub24gdmFsaWRvLiBTaSDDqCBjZXJ0aSBjaGUgc2lhIHVuIGZpbGUgc3lzdGVtIGV4dDI/IgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6NzAwIGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NjU4Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGVycm9ycyEgIFlvdSBzaG91bGQgcnVuIGUyZnNjay4iCittc2dzdHIgIklsIGZpbGUgc3lzdGVtIGNvbnRpZW5lIGVycm9yaSEgRXNlZ3VpcmUgZTJmc2NrLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjcxMQorbXNnaWQgIiIKKyJGaWxlIHN5c3RlbSB3YXMgbm90IGNsZWFubHkgdW5tb3VudGVkISAgWW91IHNob3VsZCBydW4gZTJmc2NrLiAgTW9kaWZ5aW5nIGFuICIKKyJ1bmNsZWFuIGZpbGUgc3lzdGVtIGNvdWxkIGNhdXNlIHNldmVyZSBjb3JydXB0aW9uLiIKK21zZ3N0ciAiIgorIklsIGZpbGUgc3lzdGVtIG5vbiDDqCBzdGF0byBzbW9udGF0byBjb3JyZXR0YW1lbnRlISBFc2VndWlyZSBlMmZzY2suICIKKyJNb2RpZmljYXJlIHVuIGZpbGUgc3lzdGVtIG5vbiBjb25zaXN0ZW50ZSBwdcOyIGNhdXNhcmUgc2VyaSBwcm9ibGVtaS4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo3MzEKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgYW4gaW5jb21wYXRpYmxlIGZlYXR1cmUgZW5hYmxlZC4iCittc2dzdHIgIklsIGZpbGUgc3lzdGVtIGhhIGFiaWxpdGF0YSB1bmEgcHJvcHJpZXTDoCBpbmNvbXBhdGliaWxlLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjc0MgorbXNnaWQgIkVycm9yIGFsbG9jYXRpbmcgYnVmZmVyIGNhY2hlLiIKK21zZ3N0ciAiRXJyb3JlIGFsbG9jYW5kbyBsYSBjYWNoZSBkZWkgYnVmZmVyLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9pbm9kZV9yZWxvY2F0b3IuYzoxMTQKK21zZ2lkICIiCisiRm91bmQgYW4gaW5vZGUgd2l0aCBhIGluY29ycmVjdCBsaW5rIGNvdW50LiAgQmV0dGVyIGdvIHJ1biBlMmZzY2sgZmlyc3QhIgorbXNnc3RyICIiCisiVHJvdmF0byB1biBpbm9kZSBjb24gdW4gY29udGF0b3JlIGRpIGxpbmsgbm9uIGNvcnJldHRvLiDDiCBtZWdsaW8gZXNlZ3VpcmUgIgorImUyZnNjayBwcmltYSEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfaW5vZGVfcmVsb2NhdG9yLmM6NDg3Cittc2dpZCAiTm90IGVub3VnaCBmcmVlIGlub2RlcyEiCittc2dzdHIgIk5vbiBjaSBzb25vIGFiYmFzdGFuemEgaW5vZGUgbGliZXJpISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzoyMjMKK21zZ2lkICJGaWxlIHN5c3RlbSBpcyB0b28gZnVsbCB0byByZW1vdmUgYSBncm91cCEiCittc2dzdHIgIklsIGZpbGUgc3lzdGVtIMOoIHRyb3BwbyBwaWVubyBwZXIgcmltdW92ZXJlIHVuIGdydXBwbyEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6MjMyCittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIHRvbyBtYW55IGFsbG9jYXRlZCBpbm9kZXMgdG8gcmVtb3ZlIGEgZ3JvdXAhIgorbXNnc3RyICJJbCBmaWxlIHN5c3RlbSBoYSB0cm9wcGkgaW5vZGUgYWxsb2NhdGkgcGVyIHJpbXVvdmUgdW4gZ3J1cHBvISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo0OTEKK21zZ2lkICJhZGRpbmcgZ3JvdXBzIgorbXNnc3RyICJhZ2dpdW50YSBkaSBncnVwcGkiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgZmlsZSBzeXN0ZW0gaXMgdG9vIGZ1bGwgdG8gcmVzaXplIGl0IHRvICVpIGJsb2Nrcy4gIFNvcnJ5LiIKK21zZ3N0ciAiIgorIklsIGZpbGUgc3lzdGVtIGNvbnRpZW5lIHRyb3BwaSBkYXRpIHBlcmNow6kgc2lhIHJpZG90dG8gYSAlaSBibG9jY2hpLiAiCisiU3BpYWNlbnRlLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo1MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgZmlsZSBzeXN0ZW0gaGFzIHRvbyBtYW55IG9jY3VwaWVkIGlub2RlcyB0byByZXNpemUgaXQgdG8gJWkgYmxvY2tzLiAgIgorIlNvcnJ5LiIKK21zZ3N0ciAiIgorIklsIGZpbGUgc3lzdGVtIGhhIHRyb3BwaSBpbm9kZSBvY2N1cGF0aSBwZXJjaMOpIHNpYSByaWRvdHRvIGEgJWkgYmxvY2NoaS4gIgorIlNwaWFjZW50ZS4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NjY2Cittc2dpZCAiRmlsZSBzeXN0ZW0gd2FzIG5vdCBjbGVhbmx5IHVubW91bnRlZCEgIFlvdSBzaG91bGQgcnVuIGUyZnNjay4iCittc2dzdHIgIklsIGZpbGUgc3lzdGVtIG5vbiDDqCBzdGF0byBzbW9udGF0byBjb3JyZXR0YW1lbnRlLiBFc2VndWlyZSBlMmZzY2suIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjY3NQorbXNnaWQgIiIKKyJUaGUgZmlsZSBzeXN0ZW0gaGFzIHRoZSAnZGlyX2luZGV4JyBmZWF0dXJlIGVuYWJsZWQuICBQYXJ0ZWQgY2FuIG9ubHkgcmVzaXplICIKKyJ0aGUgZmlsZSBzeXN0ZW0gaWYgaXQgZGlzYWJsZXMgdGhpcyBmZWF0dXJlLiAgWW91IGNhbiBlbmFibGUgaXQgbGF0ZXIgYnkgIgorInJ1bm5pbmcgJ3R1bmUyZnMgLU8gZGlyX2luZGV4IERFVklDRScgYW5kIHRoZW4gJ2UyZnNjayAtZkQgREVWSUNFJy4iCittc2dzdHIgIiIKKyJJbCBmaWxlIHN5c3RlbSBoYSBsYSBcImZlYXR1cmVcIiDCq2Rpcl9pbmRleMK7IGF0dGl2YS4gUGFydGVkIHB1w7IgIgorInJpZGltZW5zaW9uYXJlIHNvbG8gZmlsZSBzeXN0ZW0gZGlzYXR0aXZhbmRvIHF1ZXN0YSBcImZlYXR1cmVcIi4gU2Fyw6AgIgorInBvc3NpYmlsZSByaWF0dGl2YXJsYSBzdWNjZXNzaXZhbWVudGUgZXNlZ3VlbmRvIMKrdHVuZTJmcyAtTyBkaXJfaW5kZXggIgorIkRFVklDRcK7IGUgcG9pIMKrZTJmc2NrIC1mRCBERVZJQ0XCuy4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NjkxCisjLCBmdXp6eQorbXNnaWQgIiIKKyJBIHJlc2l6ZSBvcGVyYXRpb24gb24gdGhpcyBmaWxlIHN5c3RlbSB3aWxsIHVzZSBFWFBFUklNRU5UQUwgY29kZVxuIgorInRoYXQgTUFZIENPUlJVUFQgaXQgKGFsdGhvdWdoIG5vIG9uZSBoYXMgcmVwb3J0ZWQgYW55IHN1Y2ggZGFtYWdlIHlldCkuXG4iCisiWW91IHNob3VsZCBhdCBsZWFzdCBiYWNrdXAgeW91ciBkYXRhIGZpcnN0LCBhbmQgcnVuICdlMmZzY2sgLWYnIGFmdGVyd2FyZHMuIgorbXNnc3RyICIiCisiVW4nb3BlcmF6aW9uZSBkaSByaWRpbWVuc2lvbmFtZW50byBkaSBxdWVzdG8gZmlsZSBzeXN0ZW0gdXRpbGl6emVyw6AgdW4gIgorImNvZGljZSBTUEVSSU1FTlRBTEUgcGVyIFBPVFJFQkJFIENPUlJPTVBFUkxPIChhbmNoZSBzZSBmaW5vcmEgbm9uIMOoIG1haSAiCisic3VjY2Vzc28uKSDDiCBxdWluZGkgY29uc2lnbGlhdG8gZGkgZmFyZSB1biBiYWNrdXAgZGVpIGRhdGkgZSBlc2VndWlyZSBzdWJpdG8gIgorImRvcG8gXCJlMmZzY2sgLWZcIi4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfYmxvY2tfcmVsb2NhdG9yLmM6MTk4Cittc2dpZCAiQ3Jvc3MtbGlua2VkIGJsb2NrcyBmb3VuZCEgIEJldHRlciBnbyBydW4gZTJmc2NrIGZpcnN0ISIKK21zZ3N0ciAiIgorIlNvbm8gc3RhdGkgdHJvdmF0aSBkZWkgYmxvY2NoaSBjb2xsZWdhdGkgaW4gbWFuaWVyYSBpbmNyb2NpYXRhISBNZWdsaW8gIgorImVzZWd1aXJlIGUyZnNjayEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfYmxvY2tfcmVsb2NhdG9yLmM6NTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrICVpIGhhcyBubyByZWZlcmVuY2U/ICBXZWlyZC4iCittc2dzdHIgIklsIGJsb2NjbyAlaSBub24gw6ggcmVmZXJlbnppYXRvPyBTdHJhbm8iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfYmxvY2tfcmVsb2NhdG9yLmM6NzM3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJCbG9jayAlaSBzaG91bGRuJ3QgaGF2ZSBiZWVuIG1hcmtlZCAoJWQsICVkKSEiCittc2dzdHIgIklsIGJsb2NjbyAlaSBub24gYXZyZWJiZSBkb3Z1dG8gZXNzZXJlIG1hcmNhdG8hIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9pbnRlcmZhY2UuYzoxODYKK21zZ2lkICIiCisiVGhlIGV4dDIgZmlsZSBzeXN0ZW0gcGFzc2VkIGEgYmFzaWMgY2hlY2suICBGb3IgYSBtb3JlIGNvbXByZWhlbnNpdmUgY2hlY2ssICIKKyJ1c2UgdGhlIGUyZnNjayBwcm9ncmFtLiIKK21zZ3N0ciAiIgorIklsIGZpbGUgc3lzdGVtIGV4dDIgaGEgcGFzc2F0byBpIGNvbnRyb2xsaSBkaSBiYXNlLiBQZXIgdW4gY29udHJvbGxvIHBpw7kgIgorImFwcHJvZm9uZGl0byB1dGlsaXp6YXJlIGlsIHByb2dyYW1tYSBlMmZzY2suIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9pbnRlcmZhY2UuYzoyMDMKK21zZ2lkICJTb3JyeSwgY2FuJ3QgbW92ZSB0aGUgc3RhcnQgb2YgZXh0MiBwYXJ0aXRpb25zIHlldCEiCittc2dzdHIgIiIKKyJTcGlhY2VudGUsIG1hIG5vbiDDqCBhbmNvcmEgcG9zc2liaWxlIHNwb3N0YXJlIGwnaW5pemlvIGRpIHVuYSBwYXJ0aXppb25lICIKKyJleHQyISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9idWZmZXIuYzo4MgorbXNnaWQgIkNvdWxkbid0IGZsdXNoIGJ1ZmZlciBjYWNoZSEiCittc2dzdHIgIk5vbiBwb3NzbyBzdnVvdGFyZSBsYSBjYWNoZSBkZWkgYnVmZmVyISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9ta2ZzLmM6MTYyCittc2dpZCAid3JpdGluZyBwZXItZ3JvdXAgbWV0YWRhdGEiCittc2dzdHIgInNjcml0dHVyYSBkZWkgbWV0YWRhdGkgcGVyIG9nbmkgZ3J1cHBvIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX21rZnMuYzo1NjQKK21zZ2lkICJGaWxlIHN5c3RlbSB0b28gc21hbGwgZm9yIGV4dDIuIgorbXNnc3RyICJGaWxlIHN5c3RlbSB0cm9wcG8gcGljb2xvIHBlciBleHQyLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jYWxjLmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgbmVlZCAlcyBvZiBmcmVlIGRpc2sgc3BhY2UgdG8gc2hyaW5rIHRoaXMgcGFydGl0aW9uIHRvIHRoaXMgc2l6ZS4gICIKKyJDdXJyZW50bHksIG9ubHkgJXMgaXMgZnJlZS4iCittc2dzdHIgIiIKKyJTZXJ2b25vICVzIGRpIHNwYXppbyBsaWJlcm8gcGVyIHJpZHVycmUgbGEgcGFydGl6aW9uZSBhIHF1ZXN0YSBkaW1lbnNpb25lLiAiCisiQXR0dWFsbWVudGUgc29sdGFudG8gJXMgw6ggbGliZXJvLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb250ZXh0LmM6NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNsdXN0ZXIgc3RhcnQgZGVsdGEgPSAlZCwgd2hpY2ggaXMgbm90IGEgbXVsdGlwbGUgb2YgdGhlIGNsdXN0ZXIgc2l6ZSAlZC4iCittc2dzdHIgIiIKKyJMbyBzcG9zdGFtZW50byBkZWwgcHJpbW8gYmxvY2NvIGRlbCBjbHVzdGVyIMOoICVkIGNoZSBub24gw6ggdW4gbXVsdGlwbG8gZGVsbGEgIgorImRpbWVuc2lvbmUgZGVsIGNsdXN0ZXIgJWQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jOjMwOAorIywgYy1mb3JtYXQKK21zZ2lkICJQYXJ0aXRpb24gdG9vIGJpZy9zbWFsbCBmb3IgYSAlcyBmaWxlIHN5c3RlbS4iCittc2dzdHIgIlBhcnRpemlvbmUgdHJvcHBvIGdyYW5kZS9waWNjb2xhIHBlciBpbCBmaWxlIHN5c3RlbSAlcy4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvZmF0LmM6NDc0Cittc2dpZCAiIgorIlRoZSBGQVRzIGRvbid0IG1hdGNoLiAgSWYgeW91IGRvbid0IGtub3cgd2hhdCB0aGlzIG1lYW5zLCB0aGVuIHNlbGVjdCAiCisiY2FuY2VsLCBydW4gc2NhbmRpc2sgb24gdGhlIGZpbGUgc3lzdGVtLCBhbmQgdGhlbiBjb21lIGJhY2suIgorbXNnc3RyICIiCisiTGUgRkFUIG5vbiBjb2luY2lkb25vLiBTZSBub24gc2kgc2EgY29zYSBxdWVzdG8gdm9nbGlhIGRpcmUgc2VsZXppb25hcmUgIgorIlwiYW5udWxsYVwiIGUgcG9pIGVzZWd1aXJlIMKrc2NhbmRpc2vCuyBzdWwgZmlsZSBzeXN0ZW07IGluZmluZSBzaSBwcm9jZWRhLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9mYXQuYzo1MTQKK21zZ2lkICJUaGVyZSBhcmUgbm8gcG9zc2libGUgY29uZmlndXJhdGlvbnMgZm9yIHRoaXMgRkFUIHR5cGUuIgorbXNnc3RyICJOb24gY2kgc29ubyBjb25maWd1cmF6aW9uaSBwb3NzaWJpbGkgcGVyIHF1ZXN0byB0aXBvIGRpIEZBVC4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvZmF0LmM6NTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGaWxlIHN5c3RlbSBkb2Vzbid0IGhhdmUgZXhwZWN0ZWQgc2l6ZXMgZm9yIFdpbmRvd3MgdG8gbGlrZSBpdC4gIENsdXN0ZXIgIgorInNpemUgaXMgJWRrICglZGsgZXhwZWN0ZWQpOyBudW1iZXIgb2YgY2x1c3RlcnMgaXMgJWQgKCVkIGV4cGVjdGVkKTsgc2l6ZSBvZiAiCisiRkFUcyBpcyAlZCBzZWN0b3JzICglZCBleHBlY3RlZCkuIgorbXNnc3RyICIiCisiSWwgZmlsZSBzeXN0ZW0gbm9uIGhhIHVuYSBzZXJpZSBkaSBkaW1lbnNpb25pIGF0dGVzZSBkYSBXaW5kb3dzLiBMYSAiCisiZGltZW5zaW9uZSBkZWwgY2x1c3RlciDDqCAlZGsgKCVkayBhdHRlc2EpOyBpbCBudW1lcm8gZGkgY2x1c3RlciDDqCAlZCAoJWQgIgorImF0dGVzbyk7IGxhIGRpbWVuc2lvbmUgZGVsbGUgRkFUIMOoICVkIHNldHRvcmkgKCVkIGF0dGVzaSkuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jOjU0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRmlsZSBzeXN0ZW0gaXMgcmVwb3J0aW5nIHRoZSBmcmVlIHNwYWNlIGFzICVkIGNsdXN0ZXJzLCBub3QgJWQgY2x1c3RlcnMuIgorbXNnc3RyICJJbCBmaWxlIHN5c3RlbSByaXBvcnRhIHVubyBzcGF6aW8gbGliZXJvIGRpICVkIGNsdXN0ZXIgYW56aWNow6kgJWQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jOjg3NAorbXNnaWQgIiIKKyJHTlUgUGFydGVkIHdhcyBtaXNjb21waWxlZDogdGhlIEZBVCBib290IHNlY3RvciBzaG91bGQgYmUgNTEyIGJ5dGVzLiAgRkFUICIKKyJzdXBwb3J0IHdpbGwgYmUgZGlzYWJsZWQuIgorbXNnc3RyICIiCisiR05VIHBhcnRlZCBub24gw6ggc3RhdG8gY29tcGlsYXRvIGNvcnJldHRhbWVudGU6IGlsIHNldHRvcmUgZGkgYXZ2aW8gZG92cmViYmUgIgorImVzc2VyZSBkaSA1MTIgYnl0ZS4gSWwgc3VwcG9ydG8gcGVyIEZBVCB2ZXJyw6AgZGlhYmlsaXRhdG8uIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjE1OQorbXNnaWQgIiIKKyJUaGVyZSdzIG5vdCBlbm91Z2ggcm9vbSBpbiB0aGUgcm9vdCBkaXJlY3RvcnkgZm9yIGFsbCBvZiB0aGUgZmlsZXMuICBFaXRoZXIgIgorImNhbmNlbCwgb3IgaWdub3JlIHRvIGxvc2UgdGhlIGZpbGVzLiIKK21zZ3N0ciAiIgorIk5vbiBjJ8OoIHN1ZmZpY2llbnRlIHNwYXppbyBuZWxsYSBkaXJlY3RvcnkgcHJpbmNpcGFsZSBwZXIgdHV0dGkgaSBmaWxlLiAiCisiU2NlZ2xpZXJlIEFubnVsbGEsIG8gSWdub3JhIHBlciBwZXJkZXJlIGkgZmlsZS4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6MzAwCittc2dpZCAiRXJyb3Igd3JpdGluZyB0byB0aGUgcm9vdCBkaXJlY3RvcnkuIgorbXNnc3RyICJFcnJvcmUgc2NyaXZlbmRvIG5lbGxhIGRpcmVjdG9yeSBwcmluY2lwYWxlLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo0ODkKK21zZ2lkICJJZiB5b3UgbGVhdmUgeW91ciBmaWxlIHN5c3RlbSBhcyBGQVQxNiwgdGhlbiB5b3Ugd2lsbCBoYXZlIG5vIHByb2JsZW1zLiIKK21zZ3N0ciAiTGFzY2lhcmUgaWwgZmlsZSBzeXN0ZW0gY29tZSBGQVQxNiBub24gY2F1c2Vyw6AgYWxjdW4gcHJvYmxlbWEuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjQ5MgorbXNnaWQgIiIKKyJJZiB5b3UgY29udmVydCB0byBGQVQxNiwgYW5kIE1TIFdpbmRvd3MgaXMgaW5zdGFsbGVkIG9uIHRoaXMgcGFydGl0aW9uLCB0aGVuICIKKyJ5b3UgbXVzdCByZS1pbnN0YWxsIHRoZSBNUyBXaW5kb3dzIGJvb3QgbG9hZGVyLiAgSWYgeW91IHdhbnQgdG8gZG8gdGhpcywgeW91ICIKKyJzaG91bGQgY29uc3VsdCB0aGUgUGFydGVkIG1hbnVhbCAob3IgeW91ciBkaXN0cmlidXRpb24ncyBtYW51YWwpLiIKK21zZ3N0ciAiIgorIkNvbnZlcnRpcmUgYSBGQVQxNiB1bmEgcGFydGl6aW9uZSBjaGUgY29udGllbmUgTVMgV2luZG93cywgcmljaGllZGUgY2hlIGlsICIKKyLCq2Jvb3QgbG9hZGVywrsgZGkgV2luZG93cyBzaWEgcmVpbnN0YWxsYXRvLiBTZSBsbyBzaSB2dW9sIGZhcmUsIGNvbnN1bHRhcmUgaWwgIgorIm1hbnVhbGUgZGkgUGFydGVkIChvIGRlbGxhIHByb3ByaWEgZGlzdHJpYnV6aW9uZS4pIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjUwMAorbXNnaWQgIiIKKyJJZiB5b3UgbGVhdmUgeW91ciBmaWxlIHN5c3RlbSBhcyBGQVQzMiwgdGhlbiB5b3Ugd2lsbCBub3QgaW50cm9kdWNlIGFueSBuZXcgIgorInByb2JsZW1zLiIKK21zZ3N0ciAiTGFzY2lhcmUgaWwgZmlsZSBzeXN0ZW0gY29tZSBGQVQzMiBub24gaW50cm9kdXJyw6AgYWxjdW4gcHJvYmxlbWEuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjUwNAorbXNnaWQgIiIKKyJJZiB5b3UgY29udmVydCB0byBGQVQzMiwgYW5kIE1TIFdpbmRvd3MgaXMgaW5zdGFsbGVkIG9uIHRoaXMgcGFydGl0aW9uLCB0aGVuICIKKyJ5b3UgbXVzdCByZS1pbnN0YWxsIHRoZSBNUyBXaW5kb3dzIGJvb3QgbG9hZGVyLiAgSWYgeW91IHdhbnQgdG8gZG8gdGhpcywgeW91ICIKKyJzaG91bGQgY29uc3VsdCB0aGUgUGFydGVkIG1hbnVhbCAob3IgeW91ciBkaXN0cmlidXRpb24ncyBtYW51YWwpLiAgQWxzbywgIgorImNvbnZlcnRpbmcgdG8gRkFUMzIgd2lsbCBtYWtlIHRoZSBmaWxlIHN5c3RlbSB1bnJlYWRhYmxlIGJ5IE1TIERPUywgTVMgIgorIldpbmRvd3MgOTVhLCBhbmQgTVMgV2luZG93cyBOVC4iCittc2dzdHIgIiIKKyJDb252ZXJ0aXJlIGEgRkFUMzIgdW5hIHBhcnRpemlvbmUgY2hlIGNvbnRpZW5lIE1TIFdpbmRvd3MsIHJpY2hpZWRlIGxhICIKKyJyZWluc3RhbGxhemlvbmUgZGVsIMKrYm9vdCBsb2FkZXLCuy4gU2UgbG8gc2kgdnVvbCBmYXJlIMOoIHBvc3NpYmlsZSBjb25zdWx0YXJlICIKKyJpbCBtYW51YWxlIFBhcnRlZCAobyBkZWxsYSBwcm9wcmlhIGRpc3RyaWJ1emlvbmUpLiBJbm9sdHJlLCBsYSBjb252ZXJzaW9uZSBhICIKKyJGQVQzMiwgcmVuZGVyw6AgaWwgZmlsZSBzeXN0ZW0gaWxsZWdpYmlsZSBhIE1TIERPUywgTVMgV2luZG93cyA5NWEgZSBNUyAiCisiV2luZG93cyBOVC4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzICAlcyAgJXMiCittc2dzdHIgIiVzICAlcyAgJXMiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTE5Cittc2dpZCAiV291bGQgeW91IGxpa2UgdG8gdXNlIEZBVDMyPyIKK21zZ3N0ciAiVXNhcmUgRkFUMzI/IgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjU1MCBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjU2NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyAgJXMiCittc2dzdHIgIiVzICAlcyIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1NTEKK21zZ2lkICIiCisiVGhlIGZpbGUgc3lzdGVtIGNhbiBvbmx5IGJlIHJlc2l6ZWQgdG8gdGhpcyBzaXplIGJ5IGNvbnZlcnRpbmcgdG8gRkFUMTYuIgorbXNnc3RyICIiCisiSWwgZmlsZSBzeXN0ZW0gcHXDsiBzb2xvIGVzc2VyZSBwb3J0YXRvIGEgcXVlc3RhIGRpbWVuc2lvbmUgZHVyYW50ZSBsYSAiCisiY29udmVyc2lvbmUgYSBGQVQxNi4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTY3Cittc2dpZCAiIgorIlRoZSBmaWxlIHN5c3RlbSBjYW4gb25seSBiZSByZXNpemVkIHRvIHRoaXMgc2l6ZSBieSBjb252ZXJ0aW5nIHRvIEZBVDMyLiIKK21zZ3N0ciAiIgorIklsIGZpbGUgc3lzdGVtIHB1w7Igc29sbyBlc3NlcmUgcG9ydGF0byBhIHF1ZXN0YSBkaW1lbnNpb25lIGR1cmFudGUgbGEgIgorImNvbnZlcnNpb25lIGEgRkFUMzIuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjU4MAorbXNnaWQgIiIKKyJHTlUgUGFydGVkIGNhbm5vdCByZXNpemUgdGhpcyBwYXJ0aXRpb24gdG8gdGhpcyBzaXplLiAgV2UncmUgd29ya2luZyBvbiBpdCEiCittc2dzdHIgIiIKKyJHTlUgUGFydGVkIG5vbiBwdcOyIHJpZGltZW5zaW9uYXJlIHF1ZXN0YSBwYXJ0aXppb25lIGEgcXVlc3RhIGRpbWVuc2lvbmUuIENpICIKKyJzdGlhbW8gbGF2b3JhbmRvISIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6NDkgbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6NTYKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgYW4gaW52YWxpZCBzaWduYXR1cmUgZm9yIGEgRkFUIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiSWwgZmlsZSBzeXN0ZW0gaGEgdW5hIGZpcm1hIG5vbiB2YWxpZGEgcGVyIHVuIGZpbGUgc3lzdGVtIEZBVC4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjY0Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGludmFsaWQgc2VjdG9yIHNpemUgZm9yIGEgRkFUIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiIgorIklsIGZpbGUgc3lzdGVtIGhhIHVuYSBkaW1lbnNpb25lIGRpIHNldHRvcmUgbm9uIHZhbGlkYSBwZXIgdW4gZmlsZSBzeXN0ZW0gIgorIkZBVC4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjcxCittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGludmFsaWQgY2x1c3RlciBzaXplIGZvciBhIEZBVCBmaWxlIHN5c3RlbS4iCittc2dzdHIgIiIKKyJJbCBmaWxlIHN5c3RlbSBoYSB1bmEgZGltZW5zaW9uZSBkaSBjbHVzdGVyIG5vbiB2YWxpZGEgcGVyIHVuIGZpbGUgc3lzdGVtICIKKyJGQVQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo3OAorbXNnaWQgIiIKKyJGaWxlIHN5c3RlbSBoYXMgYW4gaW52YWxpZCBudW1iZXIgb2YgcmVzZXJ2ZWQgc2VjdG9ycyBmb3IgYSBGQVQgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICIiCisiSWwgZmlsZSBzeXN0ZW0gaGEgdW4gbnVtZXJvIGRpIHNldHRvcmkgcmlzZXJ2YXRpIG5vbiB2YWxpZG8gcGVyIHVuIGZpbGUgIgorInN5c3RlbSBGQVQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo4NQorbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyBhbiBpbnZhbGlkIG51bWJlciBvZiBGQVRzLiIKK21zZ3N0ciAiSWwgZmlsZSBzeXN0ZW0gaGEgdW4gbnVtZXJvIG5vbiBjb3JyZXR0byBkaSBGQVQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzoxMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgZmlsZSBzeXN0ZW0gaGFzIGEgbG9naWNhbCBzZWN0b3Igc2l6ZSBvZiAlZC4gIEdOVSBQYXJ0ZWQgaXMga25vd24gbm90ICIKKyJ0byB3b3JrIHByb3Blcmx5IHdpdGggc2VjdG9yIHNpemVzIG90aGVyIHRoYW4gNTEyIGJ5dGVzLiIKK21zZ3N0ciAiIgorIklsIGZpbGUgc3lzdGVtIGhhIGRlaSBzZXR0b3JpIGxvZ2ljaSBjb24gZGltZW5zaW9uZSAlZC4gw4ggcmlzYXB1dG8gY2hlIEdOVSAiCisiUGFydGVkIG5vbiBmdW56aW9uYSBiZW5lIGNvbiBzZXR0b3JpIGRpIGRpbWVuc2lvbmUgZGl2ZXJzYSBkYSA1MTIgYnl0ZS4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjE2NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGUgc3lzdGVtJ3MgQ0hTIGdlb21ldHJ5IGlzICglZCwgJWQsICVkKSwgd2hpY2ggaXMgaW52YWxpZC4gIFRoZSAiCisicGFydGl0aW9uIHRhYmxlJ3MgQ0hTIGdlb21ldHJ5IGlzICglZCwgJWQsICVkKS4gIElmIHlvdSBzZWxlY3QgSWdub3JlLCB0aGUgIgorImZpbGUgc3lzdGVtJ3MgQ0hTIGdlb21ldHJ5IHdpbGwgYmUgbGVmdCB1bmNoYW5nZWQuICBJZiB5b3Ugc2VsZWN0IEZpeCwgdGhlICIKKyJmaWxlIHN5c3RlbSdzIENIUyBnZW9tZXRyeSB3aWxsIGJlIHNldCB0byBtYXRjaCB0aGUgcGFydGl0aW9uIHRhYmxlJ3MgQ0hTICIKKyJnZW9tZXRyeS4iCittc2dzdHIgIiIKKyJMYSBnZW9tZXRyaWEgQ0hTIGRlbCBmaWxlIHN5c3RlbSDDqCAoJWQsICVkLCAlZCkgY2hlIG5vbiDDqCB2YWxpZGEuIExhICIKKyJnZW9tZXRyaWEgQ0hTIGRlbGxhIHRhYmVsbGEgZGVsbGUgcGFydGl6aW9uaSDDqCAoJWQsICVkLCAlZCkuIFNlbGV6aW9uYW5kbyAiCisiSWdub3JhIGxhIGdlb21ldHJpYSBDSFMgZGVsIGZpbGUgc3lzdGVtIG5vbiBzYXLDoCBjYW1iaWF0YS4gU2VsZXppb25hbmRvIEZpeCAiCisibGEgZ2VvbWV0cmlhIENIUyBkZWwgZmlsZSBzeXN0ZW0gdmVycsOgIGZhdHRhIGNvcnJpc3BvbmRlcmUgYWxsYSBnZW9tZXRyaWEgIgorIkNIUyBkZWxsYSB0YWJlbGxhIGRlbGxlIHBhcnRpemlvbmkuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzoyMTMKK21zZ2lkICJGQVQgYm9vdCBzZWN0b3Igc2F5cyBsb2dpY2FsIHNlY3RvciBzaXplIGlzIDAuICBUaGlzIGlzIHdlaXJkLiAiCittc2dzdHIgIiIKKyJJbCBzZXR0b3JlIGRpIGF2dmlvIGRlbGxhIEZBVCBzb3N0aWVuZSBjaGUgbGEgZGltZW5zaW9uZSBkZWwgc2V0dG9yZSBsb2dpY28gIgorInNpYSAwLiBJbCBjaGUgw6ggc3RyYW5vLiAiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjIxOQorbXNnaWQgIkZBVCBib290IHNlY3RvciBzYXlzIHRoZXJlIGFyZSBubyBGQVQgdGFibGVzLiAgVGhpcyBpcyB3ZWlyZC4gIgorbXNnc3RyICIiCisiSWwgc2V0dG9yZSBkaSBhdnZpbyBkZWxsYSBGQVQgc29zdGllbmUgY2hlIG5vbiBjaSBzaWFubyB0YWJlbGxlIEZBVC4gSWwgY2hlICIKKyLDqCBzdHJhbm8uICIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6MjI1Cittc2dpZCAiRkFUIGJvb3Qgc2VjdG9yIHNheXMgY2x1c3RlcnMgYXJlIDAgc2VjdG9ycy4gIFRoaXMgaXMgd2VpcmQuICIKK21zZ3N0ciAiIgorIklsIHNldHRvcmUgZGkgYXZ2aW8gZGVsbGEgRkFUIHNvc3RpZW5lIGNoZSBpbCBjbHVzdGVyIHNpYSBjb21wb3N0byBkYSAwICIKKyJzZXR0b3JpLiBJbCBjaGUgw6ggc3RyYW5vLiAiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjIzNQorbXNnaWQgIkZpbGUgc3lzdGVtIGlzIEZBVDEyLCB3aGljaCBpcyB1bnN1cHBvcnRlZC4iCittc2dzdHIgIklsIGZpbGUgc3lzdGVtIMOoIEZBVDEyLCBjaGUgbm9uIMOoIHN1cHBvcnRhdG8uIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo0MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBpbmZvcm1hdGlvbiBzZWN0b3IgaGFzIHRoZSB3cm9uZyBzaWduYXR1cmUgKCV4KS4gIFNlbGVjdCBjYW5jZWwgZm9yIG5vdywgIgorImFuZCBzZW5kIGluIGEgYnVnIHJlcG9ydC4gIElmIHlvdSdyZSBkZXNwZXJhdGUsIGl0J3MgcHJvYmFibHkgc2FmZSB0byBpZ25vcmUuIgorbXNnc3RyICIiCisiSWwgc2V0dG9yZSBkaSBpbmZvcm1hemlvbmkgaGEgdW5hIGZpcm1hIGVycmF0YSAoJXgpLiBTZWxlemlvbmFyZSBBbm51bGxhIHBlciAiCisib3JhIGUgaW52aWFyZSB1biBzZWduYWxhemlvbmUgZGkgYnVnLiBJbiBzaXR1YXppb25pIGRpc3BlcmF0ZSDDqCBmb3JzZSAiCisicG9zc2liaWxlIGlnbm9yYXJlIGwnZXJyb3JlLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb3VudC5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgZGlyZWN0b3J5IGVudHJ5IGZvciAlczogZmlyc3QgY2x1c3RlciBpcyB0aGUgZW5kIG9mIGZpbGUgbWFya2VyLiIKK21zZ3N0ciAiIgorIkVsZW1lbnRvIGRpIGRpcmVjdG9yeSBlcnJhdG8gcGVyICVzOiBpbCBwcmltbyBjbHVzdGVyIMOoIGxhIGZpbmUgZGVsICIKKyJtYXJjYXRvcmUgZGkgZmlsZS4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY291bnQuYzoxNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkJhZCBGQVQ6IHVudGVybWluYXRlZCBjaGFpbiBmb3IgJXMuICBZb3Ugc2hvdWxkIHJ1biBkb3Nmc2NrIG9yIHNjYW5kaXNrLiIKK21zZ3N0ciAiIgorIkZBVCBlcnJhdGE6IGxhIGNhdGVuYSBwZXIgJXMgbm9uIMOoIHN0YXRhIHRlcm1pbmF0YS4gRXNlZ3VpcmUgwqtkb3Nmc2NrwrsgIgorIm9wcHVyZSDCq3NjYW5kaXNrwrsuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvdW50LmM6MTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJCYWQgRkFUOiBjbHVzdGVyICVkIG91dHNpZGUgZmlsZSBzeXN0ZW0gaW4gY2hhaW4gZm9yICVzLiAgWW91IHNob3VsZCBydW4gIgorImRvc2ZzY2sgb3Igc2NhbmRpc2suIgorbXNnc3RyICIiCisiRkFUIGVycmF0YTogaWwgY2x1c3RlciAlZCB1c2F0byBuZWxsYSBjYXRlbmEgJXMgw6ggZnVvcmkgZGFsIGZpbGUgc3lzdGVtLiAiCisiRXNlZ3VpcmUgwqtkb3Nmc2Nrwrsgb3BwdXJlIMKrc2NhbmRpc2vCuy4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY291bnQuYzoxODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkJhZCBGQVQ6IGNsdXN0ZXIgJWQgaXMgY3Jvc3MtbGlua2VkIGZvciAlcy4gIFlvdSBzaG91bGQgcnVuIGRvc2ZzY2sgb3IgIgorInNjYW5kaXNrLiIKK21zZ3N0ciAiIgorIkZBVCBlcnJhdGE6IGlsIGNsdXN0ZXIgJWQgaGEgZGVpIGNvbGxlZ2FtZW50aSBpbmNyb2NpYXRpIHBlciAlcy4gRXNlZ3VpcmUgIgorIsKrZG9zZnNja8K7IG9wcHVyZSDCq3NjYW5kaXNrwrsuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvdW50LmM6MjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzICVkaywgYnV0IGl0IGhhcyAlZCBjbHVzdGVycyAoJWRrKS4iCittc2dzdHIgIiVzIMOoICVkaywgbWEgY29udGllbmUgJWQgY2x1c3RlciAoJWRrKS4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY291bnQuYzoyNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmaWxlICVzIGlzIG1hcmtlZCBhcyBhIHN5c3RlbSBmaWxlLiAgVGhpcyBtZWFucyBtb3ZpbmcgaXQgY291bGQgY2F1c2UgIgorInNvbWUgcHJvZ3JhbXMgdG8gc3RvcCB3b3JraW5nLiIKK21zZ3N0ciAiIgorIklsIGZpbGUgJXMgw6ggbWFyY2F0byBjb21lIGZpbGUgZGkgc2lzdGVtYSwgdmFsZSBhIGRpcmUgY2hlIHNwb3N0YXJsbyAiCisicG90cmViYmUgY2F1c2FyZSBpbCBibG9jY28gZGkgYWxjdW5pIHByb2dyYW1taS4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvdGFibGUuYzoxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZBVCAlZCBtZWRpYSAleCBkb2Vzbid0IG1hdGNoIHRoZSBib290IHNlY3RvcidzIG1lZGlhICV4LiAgWW91IHNob3VsZCAiCisicHJvYmFibHkgcnVuIHNjYW5kaXNrLiIKK21zZ3N0ciAiIgorIkZBVCAlZCwgaWwgbWVkaWEgJXggbm9uIGNvaW5jaWRlIGNvbiBxdWVsbG8gc3BlY2lmaWNhdG8gbmVsIHNldHRvcmUgZGkgYXZ2aW8gIgorIiV4LiBTYXJlYmJlIG1lZ2xpbyBlc2VndWlyZSDCq3NjYW5kaXNrwrsuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3RhYmxlLmM6MjY5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhdF90YWJsZV9zZXQ6IGNsdXN0ZXIgJWxkIG91dHNpZGUgZmlsZSBzeXN0ZW0iCittc2dzdHIgImZhdF90YWJsZV9zZXQ6IGlsIGNsdXN0ZXIgJWxkIMOoIGFsIGRpIGZ1b3JpIGRlbCBmaWxlIHN5c3RlbSIKKworIzogbGlicGFydGVkL2ZzL2ZhdC90YWJsZS5jOjMwMQorIywgYy1mb3JtYXQKK21zZ2lkICJmYXRfdGFibGVfZ2V0OiBjbHVzdGVyICVsZCBvdXRzaWRlIGZpbGUgc3lzdGVtIgorbXNnc3RyICJmYXRfdGFibGVfZ2V0OiBpbCBjbHVzdGVyICVsZCDDqCBhbCBkaSBmdW9yaSBkZWwgZmlsZSBzeXN0ZW0iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvdGFibGUuYzozNDMKK21zZ2lkICJmYXRfdGFibGVfYWxsb2NfY2x1c3Rlcjogbm8gZnJlZSBjbHVzdGVycyIKK21zZ3N0ciAiZmF0X3RhYmxlX2FsbG9jX2NsdXN0ZXI6IGNsdXN0ZXIgZXNhdXJpdGkiCisKKyM6IGxpYnBhcnRlZC9mcy9saW51eF9zd2FwL2xpbnV4X3N3YXAuYzoyNzUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVucmVjb2duaXNlZCBvbGQgc3R5bGUgbGludXggc3dhcCBzaWduYXR1cmUgJyUxMHMnLiIKK21zZ3N0ciAiRmlybWEgbGludXggZGkgcGFydGl6aW9uZSBzd2FwIG5vbiBjb25vc2NpdXRhOiDCqyUxMHPCuy4iCisKKyM6IGxpYnBhcnRlZC9mcy9saW51eF9zd2FwL2xpbnV4X3N3YXAuYzozMTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVucmVjb2duaXNlZCBuZXcgc3R5bGUgbGludXggc3dhcCBzaWduYXR1cmUgJyUxMHMnLiIKK21zZ3N0ciAiRmlybWEgbGludXggZGkgcGFydGl6aW9uZSBzd2FwIG5vbiBjb25vc2NpdXRhOiDCqyUxMHPCuy4iCisKKyM6IGxpYnBhcnRlZC9mcy9saW51eF9zd2FwL2xpbnV4X3N3YXAuYzozNTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVucmVjb2duaXNlZCBzd3N1c3AgbGludXggc3dhcCBzaWduYXR1cmUgJyU5cycuIgorbXNnc3RyICJGaXJtYSBsaW51eCBkaSBwYXJ0aXppb25lIHN3YXAgbm9uIGNvbm9zY2l1dGE6IMKrJTEwc8K7LiIKKworIzogbGlicGFydGVkL2ZzL2xpbnV4X3N3YXAvbGludXhfc3dhcC5jOjQzNAorbXNnaWQgIlRvbyBtYW55IGJhZCBwYWdlcy4iCittc2dzdHIgIlRyb3BwZSBwYWdpbmUgaW51dGlsaXp6YWJpbGkuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2FkdmZzLmM6MTIxIGxpYnBhcnRlZC9mcy9oZnMvYWR2ZnNfcGx1cy5jOjEyMgorIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjQxNCBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NTA4CisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo1MzkgbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NjU4CisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo3NzIKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gY29udGFpbnMgZXJyb3JzLiIKK21zZ3N0ciAiSWwgZmlsZSBzeXN0ZW0gY29udGllbmUgZXJyb3JpLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9hZHZmc19wbHVzLmM6Mjg3Cittc2dpZCAiQmFkIGJsb2NrcyBjb3VsZCBub3QgYmUgcmVhZC4iCittc2dzdHIgIkkgYmxvY2NoaSBjb3Jyb3R0aSBub24gcG9zc29uZSBlc3NlcmUgbGV0dGkuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2NhY2hlLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUcnlpbmcgdG8gcmVnaXN0ZXIgYW4gZXh0ZW50IHN0YXJ0aW5nIGF0IGJsb2NrIDB4JVgsIGJ1dCBhbm90aGVyIG9uZSBhbHJlYWR5ICIKKyJleGlzdHMgYXQgdGhpcyBwb3NpdGlvbi4gIFlvdSBzaG91bGQgY2hlY2sgdGhlIGZpbGUgc3lzdGVtISIKK21zZ3N0ciAiIgorIlRlbnRhdGl2byBkaSByZWdpc3RyYXppb25lIGRpIHVuIMKrZXh0ZW50wrsgZGFsIGJvY2NvIDB4JVgsIG1hIHVuIGFsdHJvIGVzaXN0ZSAiCisiZ2nDoCBuZWxsYSBtZWRlc2ltYSBwb3NpemlvbmUuIEJpc29nbmEgY29udHJvbGxhcmUgaWwgZmlsZSBzeXN0ZW0hIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2NhY2hlLmM6MjE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUcnlpbmcgdG8gbW92ZSBhbiBleHRlbnQgZnJvbSBibG9jayBPeCVYIHRvIGJsb2NrIE94JVgsIGJ1dCBhbm90aGVyIG9uZSAiCisiYWxyZWFkeSBleGlzdHMgYXQgdGhpcyBwb3NpdGlvbi4gIFRoaXMgc2hvdWxkIG5vdCBoYXBwZW4hIgorbXNnc3RyICIiCisiVGVudGF0aXZvIGRpIHNwb3N0YW1lbnRvIGRpIHVuIMKrZXh0ZW50wrsgZGFsIGJsb2NjbyBPeCVYIGFsIGJsb2NjbyBPeCVYLCBtYSAiCisiYyfDqCBnacOgIHVuIGFsdHJvIMKrZXh0ZW50wrsgbmVsbGEgbWVkZXNpbWEgcG9zaXppb25lLiBRdWVzdG8gbm9uIGRldmUgIgorImF2dmVuaXJlISAiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZS5jOjE0MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgdXBkYXRlIHRoZSBleHRlbnQgY2FjaGUgZm9yIEhGUyBmaWxlIHdpdGggQ05JRCAlWC4iCittc2dzdHIgIiIKKyJJbXBvc3NpYmlsZSBhZ2dpb3JuYXJlIGxhIGNhY2hlIGRlZ2xpIMKrZXh0ZW50wrsgcGVyIHVuIGZpbGUgSEZTIGNvbiBDTklEICVYLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlLmM6MTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyB0byByZWFkIEhGUyBmaWxlIHdpdGggQ05JRCAlWCBiZWhpbmQgRU9GLiIKK21zZ3N0ciAiVGVudGF0aXZvIGRpIGxlZ2dlcmUgaWwgZmlsZSBIRlMgY29uIENOSUQgJVggb2x0cmUgRU9GLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlLmM6MTkwIGxpYnBhcnRlZC9mcy9oZnMvZmlsZS5jOjIyMAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCBzZWN0b3IgJWxsaSBvZiBIRlMgZmlsZSB3aXRoIENOSUQgJVguIgorbXNnc3RyICJJbXBvc3NpYmlsZSB0cm92YXJlIGlsIHNldHRvcmUgJWxsaSBkZWwgZmlsZSBIRlMgY29uIENOSUQgJVguIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGUuYzoyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIHRvIHdyaXRlIEhGUyBmaWxlIHdpdGggQ05JRCAlWCBiZWhpbmQgRU9GLiIKK21zZ3N0ciAiVGVudGF0aXZvIGRpIHNjcml2ZXJlIHVuIGZpbGUgSEZTIGNvbiBDTklEICVYIG9sdHJlIEVPRi4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZV9wbHVzLmM6MTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB1cGRhdGUgdGhlIGV4dGVudCBjYWNoZSBmb3IgSEZTKyBmaWxlIHdpdGggQ05JRCAlWC4iCittc2dzdHIgIiIKKyJJbXBvc3NpYmlsZSBhZ2dpb3JuYXJlIGxhIGNhY2hlIGRlZ2xpIMKrZXh0ZW50wrsgcGVyIGlsIGZpbGUgSEZTKyBjb24gQ05JRCAlWC4gIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGVfcGx1cy5jOjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgdG8gcmVhZCBIRlMrIGZpbGUgd2l0aCBDTklEICVYIGJlaGluZCBFT0YuIgorbXNnc3RyICJUZW50YXRpdm8gZGkgbGVnZ2VyZSB1biBmaWxlIEhGUysgY29uIENOSUQgJVggb2x0cmUgRU9GLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlX3BsdXMuYzoyMTMgbGlicGFydGVkL2ZzL2hmcy9maWxlX3BsdXMuYzoyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgc2VjdG9yICVsbGkgb2YgSEZTKyBmaWxlIHdpdGggQ05JRCAlWC4iCittc2dzdHIgIkltcG9zc2liaWxlIHRyb3ZhcmUgaWwgc2V0dG9yZSAlbGxpIGRlbCBmaWxlIEhGUysgY29uIENOSUQgJVguIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGVfcGx1cy5jOjI0NQorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgdG8gd3JpdGUgSEZTKyBmaWxlIHdpdGggQ05JRCAlWCBiZWhpbmQgRU9GLiIKK21zZ3N0ciAiVGVudGF0aXZvIGRpIHNjcml0dHVyYSBzdSBmaWxlIEhGUysgY29uIENOSUQgJVggb2x0cmUgRU9GLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzoyMzIKK21zZ2lkICJTb3JyeSwgSEZTIGNhbm5vdCBiZSByZXNpemVkIHRoYXQgd2F5IHlldC4iCittc2dzdHIgIlNwaWFjZW50ZSwgbWEgSEZTIG5vbiBwdcOyIGFuY29yYSBlc3NlcmUgcmlkaW1lbnNpb25hdG8gaW4gcXVlc3RvIG1vZG8uIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjI2MiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjY0MQorbXNnaWQgIkRhdGEgcmVsb2NhdGlvbiBoYXMgZmFpbGVkLiIKK21zZ3N0ciAiRmFsbGl0byBpbCByaXBvc2l6aW9uYW1lbnRvIGRlaSBkYXRpLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzoyODEKK21zZ2lkICJEYXRhIHJlbG9jYXRpb24gbGVmdCBzb21lIGRhdGEgaW4gdGhlIGVuZCBvZiB0aGUgdm9sdW1lLiIKK21zZ3N0ciAiIgorIklsIHJpcG9zaXppb25hbWVudG8gZGVpIGRhdGkgbmUgaGEgbGFzY2lhdG8gYWxjdW5pIGFsbGEgZmluZSBkZWwgdm9sdW1lLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzozMjAKK21zZ2lkICJ3cml0aW5nIEhGUyBNYXN0ZXIgRGlyZWN0b3J5IEJsb2NrIgorbXNnc3RyICJFcnJvcmUgc2NyaXZlbmRvIG5lbCBibG9jY28gSEZTIMKrTWFzdGVyIERpcmVjdG9yecK7LiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo0NjgKK21zZ2lkICJObyB2YWxpZCBIRlNbK1hdIHNpZ25hdHVyZSBoYXMgYmVlbiBmb3VuZCB3aGlsZSBvcGVuaW5nLiIKK21zZ3N0ciAiTm9uIMOoIHN0YXRhIHRyb3ZhdGEgYWxjdW5hIGZpcm1hIEhGU1srWF0gdmFsaWRhIGFsbCdhcGVydHVyYS4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NDc4CisjLCBjLWZvcm1hdAorbXNnaWQgIlZlcnNpb24gJWQgb2YgSEZTKyBpc24ndCBzdXBwb3J0ZWQuIgorbXNnc3RyICJMYSB2ZXJzaW9uZSAlZCBkZWwgZmlsZSBIRlMrIG5vbiDDqCBzdXBwb3J0YXRhLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo0ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmVyc2lvbiAlZCBvZiBIRlNYIGlzbid0IHN1cHBvcnRlZC4iCittc2dzdHIgIkxhIHZlcnNpb25lICVkIGRlbCBmaWxlIEhGU1ggbm9uIMOoIHN1cHBvcnRhdGEuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjY3MgorbXNnaWQgIkRhdGEgcmVsb2NhdGlvbiBsZWZ0IHNvbWUgZGF0YSBhdCB0aGUgZW5kIG9mIHRoZSB2b2x1bWUuIgorbXNnc3RyICIiCisiSWwgcmlwb3NpemlvbmFtZW50byBkZWkgZGF0aSBuZSBoYSBsYXNjaWF0byBhbGN1bmkgYWxsYSBmaW5lIGRlbCB2b2x1bWUuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjcyMAorbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdGhlIGFsbG9jYXRpb24gZmlsZS4iCittc2dzdHIgIkVycm9yZSBzY3JpdmVuZG8gaWwgZmlsZSBkaSBhbGxvY2F6aW9uZS4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NzM1Cittc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0aGUgY29tcGF0aWJpbGl0eSBwYXJ0IG9mIHRoZSBhbGxvY2F0aW9uIGZpbGUuIgorbXNnc3RyICIiCisiRXJyb3JlIG5lbGxhIHNjcml0dHVyYSBkZWxsYSBwYXJ0ZSBjb21wYXRpYmlsZSBkZGVsIGZpbGUgZGkgYWxsb2NhemlvbmUuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjc1MAorbXNnaWQgIndyaXRpbmcgSEZTKyBWb2x1bWUgSGVhZGVyIgorbXNnc3RyICJTY3JpdHR1cmEgZGVsIMKrVm9sdW1lIEhlYWRlcsK7IEhGUysuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjg1MAorbXNnaWQgIkFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGxvb2tpbmcgZm9yIHRoZSBtYW5kYXRvcnkgYmFkIGJsb2NrcyBmaWxlLiIKK21zZ3N0ciAiRXJyb3JlIG5lbGxhIHJpY2VyY2EgZGVsIGZpbGUgb2JibGlnYXRvcmlvIGRlaSBibG9jY2hpIGNvcnJvdHRpLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo5MDQKK21zZ2lkICIiCisiSXQgc2VlbXMgdGhlcmUgaXMgYW4gZXJyb3IgaW4gdGhlIEhGUyB3cmFwcGVyOiB0aGUgYmFkIGJsb2NrcyBmaWxlIGRvZXNuJ3QgIgorImNvbnRhaW4gdGhlIGVtYmVkZGVkIEhGUysgdm9sdW1lLiIKK21zZ3N0ciAiIgorIlNlbWJyYSBlc3NlcmNpIHVuIGVycm9yZSBuZWwgd3JhcHBlciBIRlM6IGlsIGZpbGUgZGVpIGJsb2NjaGkgaW51dGlsaXp6YWJpbGkgIgorIm5vbiBjb250aWVuZSBpbCB2b2x1bWUgSEZTKy4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6OTQwCittc2dpZCAiU29ycnksIEhGUysgY2Fubm90IGJlIHJlc2l6ZWQgdGhhdCB3YXkgeWV0LiIKK21zZ3N0ciAiU3BpYWNlbnRlLCBIRlMrIG5vbiBwdcOyIGVzc2VyZSBhbmNvcmEgcmlkaW1lbnNpb25hdG8gaW4gcXVlc3RvIG1vZG8uIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjk3NQorbXNnaWQgInNocmlua2luZyBlbWJlZGRlZCBIRlMrIHZvbHVtZSIKK21zZ3N0ciAicmlkdXppb25lIGRlbCB2b2x1bWUgSEZTKyIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo5OTEKK21zZ2lkICJSZXNpemluZyB0aGUgSEZTKyB2b2x1bWUgaGFzIGZhaWxlZC4iCittc2dzdHIgIklsIHJpZGltZW5zaW9uYW1lbnRvIGRlbCB2b2x1bWUgSEZTKyBub24gw6ggYW5kYXRvIGEgYnVvbiBmaW5lLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo5OTgKK21zZ2lkICJzaHJpbmtpbmcgSEZTIHdyYXBwZXIiCittc2dzdHIgInJpZHV6aW9uZSBkZWwgd3JhcHBlciBIRlMiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MTAwNworbXNnaWQgIlVwZGF0aW5nIHRoZSBIRlMgd3JhcHBlciBoYXMgZmFpbGVkLiIKK21zZ3N0ciAiTCdhZ2dpb3JuYW1lbnRvIGRlbCB3cmFwcGVyIEhGUyDDqCBmYWxsaXRhLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzoxMTA5IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MTE5NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhpcyBpcyBub3QgYSByZWFsICVzIGNoZWNrLiAgVGhpcyBpcyBnb2luZyB0byBleHRyYWN0IHNwZWNpYWwgbG93IGxldmVsICIKKyJmaWxlcyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLiIKK21zZ3N0ciAiIgorIk5vbiDDqCB1biBjb250cm9sbG8gJXMgcmVhbGUuIEF2dmlhbWVudG8gZGVsbGEgc3BlY2lhbGUgcHJvY2VkdXJhIGEgYmFzc28gIgorImxpdmVsbG8gZCdlc3RyYXppb25lIGRlaSBmaWxlIHBlciBpbCBkZWJ1Zy4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjE1NQorbXNnaWQgIkJhZCBibG9jayBsaXN0IGhlYWRlciBjaGVja3N1bS4iCittc2dzdHIgIlNvbW1hIGRpIGNvbnRyb2xsbyBkZWxsYSBsaXN0YSBkZWkgYmxvY2NoaSBpbnV0aWxpenphYmlsaS4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjE2OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSW52YWxpZCBzaXplIG9mIGEgdHJhbnNhY3Rpb24gYmxvY2sgd2hpbGUgcmVwbGF5aW5nIHRoZSBqb3VybmFsICglaSBieXRlcykuIgorbXNnc3RyICIiCisiRXJyYXRhIGRpbWVuc2lvbmUgZGkgdW4gYmxvY2NvIGRpIHRyYW5zYXppb25lIGR1cmFudGUgbGEgcmllc2VjdXppb25lIGRlbCAiCisicmVnaXN0cm8gKCVpIGJ5dGUpLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MjYwCittc2dpZCAiIgorIkpvdXJuYWwgc3RvcmVkIG91dHNpZGUgb2YgdGhlIHZvbHVtZSBhcmUgbm90IHN1cHBvcnRlZC4gIFRyeSB0byBkZXNhY3RpdmF0ZSAiCisidGhlIGpvdXJuYWwgYW5kIHJ1biBQYXJ0ZWQgYWdhaW4uIgorbXNnc3RyICIiCisiUmVnaXN0cmkgbWVtb3JpenphdGkgYWxsJ2VzdGVybm8gZGVsIHZvbHVtZSBub24gc29ubyBzdXBwb3J0YXRpLiBEaXNhdHRpdmFyZSAiCisiaWwgcmVnaXN0cm8gZXN0ZXJubyBlIHJpYXZ2aWFyZSBQYXJ0ZWQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzoyNzEKK21zZ2lkICJKb3VybmFsIG9mZnNldCBvciBzaXplIGlzIG5vdCBtdWx0aXBsZSBvZiB0aGUgc2VjdG9yIHNpemUuIgorbXNnc3RyICIiCisiTG8gc3Bvc3RhbWVudG8gbyBsYSBkaW1lbnNpb25lIGRlbCByZWdpc3RybyBub24gw6ggdW4gbXVsdGlwbG8gZGVsbGEgIgorImRpbWVuc2lvbmUgZGkgdW4gc2V0dG9yZS4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjI5MgorbXNnaWQgIkluY29ycmVjdCBtYWdpYyB2YWx1ZXMgaW4gdGhlIGpvdXJuYWwgaGVhZGVyLiIKK21zZ3N0ciAiVmFsb3JpIMKrbWFnaWPCuyBlcnJhdGkgbmVsbCdpbnRlc3RhemlvbmUgZGVsIHJlZ2lzdHJvLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MzAyCittc2dpZCAiSm91cm5hbCBzaXplIG1pc21hdGNoIGJldHdlZW4gam91cm5hbCBpbmZvIGJsb2NrIGFuZCBqb3VybmFsIGhlYWRlci4iCittc2dzdHIgIiIKKyJMYSBkaW1lbnNpb25lIGRlbCByZWdpc3RybyBub24gY29ycmlzcG9uZGUgY29uIHF1ZWxsZSBkZWxsJ2ludGVzdGF6aW9uZSBkZWwgIgorInJlZ2lzdHJvIG1lZGVzaW1vLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MzE0Cittc2dpZCAiU29tZSBoZWFkZXIgZmllbGRzIGFyZSBub3QgbXVsdGlwbGUgb2YgdGhlIHNlY3RvciBzaXplLiIKK21zZ3N0ciAiIgorIkFsY3VuaSBjYW1waSBkZWxsJ2ludGVzdGF6aW9uZSBub24gc29ubyBtdWx0aXBsaSBkZWxsYSBkaW1lbnNpb25lIGRpIHVuICIKKyJzZXR0b3JlLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MzIzCittc2dpZCAiIgorIlRoZSBzZWN0b3Igc2l6ZSBzdG9yZWQgaW4gdGhlIGpvdXJuYWwgaXMgbm90IDUxMiBieXRlcy4gIFBhcnRlZCBvbmx5ICIKKyJzdXBwb3J0cyA1MTIgYnl0ZXMgbGVuZ3RoIHNlY3RvcnMuIgorbXNnc3RyICIiCisiTGEgZGltZW5zaW9uZSBkZWwgc2V0dG9yZSByZWdpc3RyYXRhIG5lbCByZWdpc3RybyBub24gw6ggZGkgNTEyIGJ5dGUuIFBhcnRlZCAiCisic3VwcG9ydGEgc29sbyBzZXR0b3JpIGRpIGx1bmdoZXp6YSBwYXJpIGEgNTEyIGJ5dGUuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozMzUKK21zZ2lkICJCYWQgam91cm5hbCBjaGVja3N1bS4iCittc2dzdHIgIlNvbW1hIGRpIGNvbnRyb2xsbyBkZWwgcmVnaXN0cm8gaW5lc2F0dGEuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozNTMKK21zZ2lkICIiCisiVGhlIGpvdXJuYWwgaXMgbm90IGVtcHR5LiAgUGFydGVkIG11c3QgcmVwbGF5IHRoZSB0cmFuc2FjdGlvbnMgYmVmb3JlICIKKyJvcGVuaW5nIHRoZSBmaWxlIHN5c3RlbS4gIFRoaXMgd2lsbCBtb2RpZnkgdGhlIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiIgorIklsIHJlZ2lzdHJvIG5vbiDDqCB2dW90by4gUGFydGVkIGRldmUgcmlwZXRlcmUgbGUgdHJhbnNhemlvbmkgcHJpbWEgZGkgIgorInBhc3NhcmUgYWxsJ2FwZXJ0dXJhIGRlbCBmaWxlIHN5c3RlbS4gSWwgZmlsZSBzeXN0ZW0gdmVycsOgIG1vZGlmaWNhdG8uIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozODEKK21zZ2lkICIiCisiVGhlIHZvbHVtZSBoZWFkZXIgb3IgdGhlIG1hc3RlciBkaXJlY3RvcnkgYmxvY2sgaGFzIGNoYW5nZWQgd2hpbGUgcmVwbGF5aW5nICIKKyJ0aGUgam91cm5hbC4gIFlvdSBzaG91bGQgcmVzdGFydCBQYXJ0ZWQuIgorbXNnc3RyICIiCisiTCdpbnRlc3RhemlvbmUgZGVsIHZvbHVtZSBvIGlsIGJsb2NjbyBkZWxsYSBkaXJlY3RvcnkgbWFzdGVyIMOoIHN0YXRhICIKKyJtb2RpZmljYXRhIGR1cmFudGUgbGEgcmllc2VjdXppb25lIGRlbGxlIHRyYW5zYXppb25pLiBQYXJ0ZWQgZGV2ZSBlc3NlcmUgIgorInJpYXZ2aWF0by4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcHJvYmUuYzo1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGFydGVkIGNhbid0IHVzZSBIRlMgZmlsZSBzeXN0ZW1zIG9uIGRpc2tzIHdpdGggYSBzZWN0b3Igc2l6ZSBub3QgZXF1YWwgdG8gJSIKKyJkIGJ5dGVzLiIKK21zZ3N0ciAiIgorIlBhcnRlZCBub24gcHXDsiB1dGlsaXp6YXJlIGZpbGUgc3lzdGVtIEhGUyBzdSBkaXNjaGkgY29uIHNldHRvcmkgZGkgIgorImRpbWVuc2lvbmUgZGl2ZXJzYSBkYSAlZCBieXRlLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjE1MSBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzoxNTUKK21zZ2lkICJBbiBleHRlbnQgaGFzIG5vdCBiZWVuIHJlbG9jYXRlZC4iCittc2dzdHIgIlVuIMKrZXh0ZW50wrsgbm9uIMOoIHN0YXRvIHJpcG9zaXppb25hdG8uIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6MjUxIGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjMwNworbXNnaWQgIiIKKyJBIHJlZmVyZW5jZSB0byBhbiBleHRlbnQgY29tZXMgZnJvbSBhIHBsYWNlIGl0IHNob3VsZCBub3QuICBZb3Ugc2hvdWxkIGNoZWNrICIKKyJ0aGUgZmlsZSBzeXN0ZW0hIgorbXNnc3RyICIiCisiSWwgcmlmZXJpbWVudG8gYWQgdW4nZXN0ZW5zaW9uZSBwcm92aWVuZSBkYSB1bidpbnNvbGl0YSBwb3NpemlvbmUuIElsIGZpbGUgIgorInN5c3RlbSBkZXZlIGVzc2VyZSBjb250cm9sbGF0byEuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6MzgxCittc2dpZCAiVGhpcyBIRlMgdm9sdW1lIGhhcyBubyBjYXRhbG9nIGZpbGUuICBUaGlzIGlzIHZlcnkgdW51c3VhbCEiCittc2dzdHIgIlF1ZXN0byB2b2x1bWUgSEZTIG5vbiBwb3NzaWVkZSB1biBjYXRhbG9nby4gUXVlc3RvIMOoIGludXN1YWxlISIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjQ3NQorbXNnaWQgIlRoaXMgSEZTIHZvbHVtZSBoYXMgbm8gZXh0ZW50cyBvdmVyZmxvdyBmaWxlLiAgVGhpcyBpcyBxdWl0ZSB1bnVzdWFsISIKK21zZ3N0ciAiIgorIlF1ZXN0byB2b2x1bWUgSEZTIG5vbiBwcmVzZW50YSB1biBmaWxlIGRpIG92ZXJmbG93IGRlZ2xpIMKrZXh0ZW50wrsuIMOIIG1vbHRvICIKKyJzdHJhbm8hLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjUxNyBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo2NjgKK21zZ2lkICIiCisiVGhlIGV4dGVudHMgb3ZlcmZsb3cgZmlsZSBzaG91bGQgbm90IGNvbnRhaW4gaXRzIG93biBleHRlbnRzISAgWW91IHNob3VsZCAiCisiY2hlY2sgdGhlIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiIgorIklsIGZpbGUgZGkgb3ZlcmZsb3cgZGVnbGkgwqtleHRlbnTCuyBub24gZGV2ZSBjb250ZW5lcmUgaSBwcm9wcmkgwqtleHRlbnTCuy4gU2kgIgorImRvdnJlYmJlIHZlcmlmaWNhcmUgaWwgZmlsZSBzeXN0ZW0uIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NTc0IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjg0NworbXNnaWQgIkNvdWxkIG5vdCBjYWNoZSB0aGUgZmlsZSBzeXN0ZW0gaW4gbWVtb3J5LiIKK21zZ3N0ciAiTm9uIMOoIHN0YXRvIHBvc3NpYmlsZSBjYXJpY2FyZSBpbCBmaWxlIHN5c3RlbSBpbiBtZW1vcmlhLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjYzNSBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo5MDgKK21zZ2lkICJCYWQgYmxvY2tzIGxpc3QgY291bGQgbm90IGJlIGxvYWRlZC4iCittc2dzdHIgIk5vbiDDqCBzdGF0byBwb3NzaWJpbGUgY2FyaWNhcmUgbCdlbGVuY28gZGVpIGJsb2NjaGkgY29ycm90dGkuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NjQ5IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjkyNAorbXNnaWQgIkFuIGVycm9yIG9jY3VycmVkIGR1cmluZyBleHRlbnQgcmVsb2NhdGlvbi4iCittc2dzdHIgIlVuIGVycm9yZSDDqCBhdnZlbnV0byBkdXJhbnRlIGxhIHJpbG9jYXppb25lIGRlZ2xpIMKrZXh0ZW50wrsuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo0OTUKK21zZ2lkICJUaGlzIEhGUysgdm9sdW1lIGhhcyBubyBjYXRhbG9nIGZpbGUuICBUaGlzIGlzIHZlcnkgdW51c3VhbCEiCittc2dzdHIgIlF1ZXN0byB2b2x1bWUgSEZTIG5vbiBoYSB1biBmaWxlIHBlciBpbCBjYXRhbG9nby4gQ2nDsiDDqCBpbnVzdWFsZSEiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjYxOQorbXNnaWQgIlRoaXMgSEZTKyB2b2x1bWUgaGFzIG5vIGV4dGVudHMgb3ZlcmZsb3cgZmlsZS4gIFRoaXMgaXMgcXVpdGUgdW51c3VhbCEiCittc2dzdHIgIiIKKyJRdWVzdG8gdm9sdW1lIEhGUysgbm9uIGhhIHVuIGZpbGUgcGVyIGwnb3ZlcmZsb3cgZGVnbGkgwqtleHRlbnTCuy4gUXVlc3RvIMOoICIKKyJhYmJhc3RhbnphIGludXN1YWxlISIKKworIzogcGFydGVkL3BhcnRlZC5jOjk0Cittc2dpZCAiZGlzcGxheXMgdGhpcyBoZWxwIG1lc3NhZ2UiCittc2dzdHIgIm1vc3RyYSBxdWVzdG8gbWVzc2FnZ2lvIGRpIGFpdXRvIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6OTUKK21zZ2lkICJsaXN0cyBwYXJ0aXRpb24gbGF5b3V0IG9uIGFsbCBibG9jayBkZXZpY2VzIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo5NgorbXNnaWQgImRpc3BsYXlzIG1hY2hpbmUgcGFyc2VhYmxlIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6OTcKK21zZ2lkICJuZXZlciBwcm9tcHRzIGZvciB1c2VyIGludGVydmVudGlvbiIKK21zZ3N0ciAibm9uIGNoaWVkZSBtYWkgbCdpbnRlcnZlbnRvIGRlbGwndXRlbnRlIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6OTgKK21zZ2lkICJkaXNwbGF5cyB0aGUgdmVyc2lvbiIKK21zZ3N0ciAibW9zdHJhIGxhIHZlcnNpb25lIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTExCittc2dpZCAiIgorIk5VTUJFUiBpcyB0aGUgcGFydGl0aW9uIG51bWJlciB1c2VkIGJ5IExpbnV4LiAgT24gTVMtRE9TIGRpc2sgbGFiZWxzLCB0aGUgIgorInByaW1hcnkgcGFydGl0aW9ucyBudW1iZXIgZnJvbSAxIHRvIDQsIGxvZ2ljYWwgcGFydGl0aW9ucyBmcm9tIDUgb253YXJkcy5cbiIKK21zZ3N0ciAiIgorIk5VTUJFUiDDqCBpbCBudW1lcm8gZGkgcGFydGl6aW9uZSB1c2F0byBkYSBMaW51eC4gU3UgZXRpY2hldHRlIE1TLURPUyBsZSAiCisicGFydGl6aW9uaSBwcmltYXJpZSBoYW5ubyBudW1lcmkgZGEgMSBhIDQgZSBsZSBsb2dpY2hlIGRhIDUgaW4gcG9pLlxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTE0Cittc2dpZCAiTEFCRUwtVFlQRSBpcyBvbmUgb2Y6ICIKK21zZ3N0ciAiTEFCRUwtVFlQRSDDqCB1bmEgZGk6ICIKKworIzogcGFydGVkL3BhcnRlZC5jOjExNQorbXNnaWQgIkZMQUcgaXMgb25lIG9mOiAiCittc2dzdHIgIkZMQUcgw6ggdW5vIGRpOiAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMTYKK21zZ2lkICJVTklUIGlzIG9uZSBvZjogIgorbXNnc3RyICJVTklUIMOoIHVubyBkaTogIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTE3Cittc2dpZCAiUEFSVC1UWVBFIGlzIG9uZSBvZjogcHJpbWFyeSwgbG9naWNhbCwgZXh0ZW5kZWRcbiIKK21zZ3N0ciAiUEFSVC1UWVBFIMOoIHVubyBkaTogcHJpbWFyaWEsIGxvZ2ljYSwgZXN0ZXNhXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMTkKK21zZ2lkICJGUy1UWVBFIGlzIG9uZSBvZjogIgorbXNnc3RyICJGUy1UWVBFIMOoIHVubyBkaTogIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIwCittc2dpZCAiIgorIlNUQVJUIGFuZCBFTkQgYXJlIGRpc2sgbG9jYXRpb25zLCBzdWNoIGFzIDRHQiBvciAxMCUuICBOZWdhdGl2ZSB2YWx1ZXMgY291bnQgIgorImZyb20gdGhlIGVuZCBvZiB0aGUgZGlzay4gIEZvciBleGFtcGxlLCAtMXMgc3BlY2lmaWVzIGV4YWN0bHkgdGhlIGxhc3QgIgorInNlY3Rvci5cbiIKK21zZ3N0ciAiIgorIlNUQVJUIGUgRU5EIHNvbm8gbG9jYXppb25pIHN1bCBkaXNjbywgY29tZSA0R0IgbyAxMCUuIEkgbnVtZXJpIG5lZ2F0aXZpIHNvbm8gIgorInJlbGF0aXZpIGFsbGEgZmluZSBkZWwgZGlzY28uIFBlciBlc2VtcGlvLCAtMXMgaW5kaWNhIGVzYXR0YW1lbnRlIGwndWx0aW1vICIKKyJzZXR0b3JlLlxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIzCittc2dpZCAiU1RBVEUgaXMgb25lIG9mOiBvbiwgb2ZmXG4iCittc2dzdHIgIlNUQVRFIMOoIHVubyBkaTogb24sIG9mZlxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTI0Cittc2dpZCAiREVWSUNFIGlzIHVzdWFsbHkgL2Rldi9oZGEgb3IgL2Rldi9zZGFcbiIKK21zZ3N0ciAiREVWSUNFIMOoIG5vcm1hbG1lbnRlIC9kZXYvaGRhIG8gL2Rldi9zZGFcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyNQorbXNnaWQgIk5BTUUgaXMgYW55IHdvcmQgeW91IHdhbnRcbiIKK21zZ3N0ciAiTkFNRSDDqCBxdWFsc2lhc2kgcGFyb2xhIHNpIHZvZ2xpYVxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTI2Cittc2dpZCAiVGhlIHBhcnRpdGlvbiBtdXN0IGhhdmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgRlMtVFlQRXM6ICIKK21zZ3N0ciAiTGEgcGFydGl6aW9uZSBkZXZlIGF2ZXJlIHVubyBkZWkgc2VndWVudGkgRlNfVFlQRTogIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTMwCisjLCBmdXp6eQorbXNnaWQgIiIKKyJDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLlxuIgorIlRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlLCBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS5cbiIKKyJcbiIKKyJUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiIKKyJidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuIgorIk1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbiIKKyJHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuIgorIlxuIgorbXNnc3RyICIiCisiQ29weXJpZ2h0IChDKSAxOTk4LTIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuXG4iCisiUXVlc3RvIHByb2dyYW1tYSDDqCBzb2Z0d2FyZSBsaWJlcm8sIHByb3RldHRvIGRhbGxhIGxpY2VuemEgR05VIEdlbmVyYWwgIgorIlB1YmxpYyBMaWNlbnNlLlxuIgorIlxuIgorIlF1ZXN0byBwcm9ncmFtbWEgw6ggZGlzdHJpYnVpdG8gbmVsbGEgc3BlcmFuemEgY2hlIHNpYSB1dGlsZSwgbWEgU0VOWkEgQUxDVU5BICIKKyJHQVJBTlpJQTsgc2VuemEgbmVwcHVyZSBsZSBnYXJhbnppZSBkZXJpdmF0ZSBkYWxsYSBDT01NRVJDSUFCSUxJVMOAIG8gIgorImRhbGwnZXNzZXJlIEFEQVRUTyBBRCBVTiBQQVJUSUNPTEFSRSBTQ09QTy4gU2kgdmVkYSBsYSBHTlUgR2VuZXJhbCBQdWJsaWMgIgorIkxpY2Vuc2UgcGVyIG1hZ2dpb3JpIGRldHRhZ2xpLlxuIgorIlxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiUwLmYlJVx0KHRpbWUgbGVmdCAlLjJkOiUuMmQpIgorbXNnc3RyICIlMC5mJSVcdCh0ZW1wbyByaW1hc3RvICUuMmQ6JS4yZCkiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxOTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQYXJ0aXRpb24gJXMgaXMgYmVpbmcgdXNlZC4gWW91IG11c3QgdW5tb3VudCBpdCBiZWZvcmUgeW91IG1vZGlmeSBpdCB3aXRoICIKKyJQYXJ0ZWQuIgorbXNnc3RyICIiCisiTGEgcGFydGl6aW9uZSAlcyDDqCBpbiB1c28uIExhIHNpIGRldmUgc21vbnRhcmUgcHJpbWEgZGkgbW9kaWZpY2FybGEgY29uICIKKyJQYXJ0ZWQuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjExCisjLCBjLWZvcm1hdAorbXNnaWQgIlBhcnRpdGlvbihzKSBvbiAlcyBhcmUgYmVpbmcgdXNlZC4iCittc2dzdHIgIkxhL2UgcGFydGl6aW9uZS9pIGRpICVzIHNvbm8gaW4gdXNvLiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMworbXNnaWQgIiIKKyJUaGUgZXhpc3RpbmcgZmlsZSBzeXN0ZW0gd2lsbCBiZSBkZXN0cm95ZWQgYW5kIGFsbCBkYXRhIG9uIHRoZSBwYXJ0aXRpb24gIgorIndpbGwgYmUgbG9zdC4gRG8geW91IHdhbnQgdG8gY29udGludWU/IgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBleGlzdGluZyBkaXNrIGxhYmVsIG9uICVzIHdpbGwgYmUgZGVzdHJveWVkIGFuZCBhbGwgZGF0YSBvbiB0aGlzIGRpc2sgIgorIndpbGwgYmUgbG9zdC4gRG8geW91IHdhbnQgdG8gY29udGludWU/IgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo0NTggcGFydGVkL3BhcnRlZC5jOjY1MiBwYXJ0ZWQvcGFydGVkLmM6MTA0NAorIzogcGFydGVkL3BhcnRlZC5jOjExMjggcGFydGVkL3BhcnRlZC5jOjE3NzEgcGFydGVkL3BhcnRlZC5jOjE4NTIKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxOTAwCittc2dpZCAiUGFydGl0aW9uIG51bWJlcj8iCittc2dzdHIgIk51bWVybyBkaSBwYXJ0aXppb25lPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjUwMAorbXNnaWQgIlNvdXJjZSBkZXZpY2U/IgorbXNnc3RyICJEZXZpY2UgZGkgb3JpZ2luZT8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo1MDQKK21zZ2lkICJTb3VyY2UgcGFydGl0aW9uIG51bWJlcj8iCittc2dzdHIgIk51bWVybyBkaSBwYXJ0aXppb25lIGRpIG9yaWdpbmU/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NTA5Cittc2dpZCAiQ2FuJ3QgY29weSBhbiBleHRlbmRlZCBwYXJ0aXRpb24uIgorbXNnc3RyICJOb24gw6ggcG9zc2liaWxlIGNvcGlhcmUgdW5hIHBhcnRpemlvbmUgZXN0ZXNhLiIKKworIzogcGFydGVkL3BhcnRlZC5jOjUxNQorbXNnaWQgIkRlc3RpbmF0aW9uIHBhcnRpdGlvbiBudW1iZXI/IgorbXNnc3RyICJOdW1lcm8gZGVsbGEgcGFydGl6aW9uZSBkZXN0aW5hemlvbmU/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NjE1Cittc2dpZCAiTmV3IGRpc2sgbGFiZWwgdHlwZT8iCittc2dzdHIgIlRpcG8gZGVsbCdldGljaGV0dGEgZGVsIG51b3ZvIGRpc2NvPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjY1NgorbXNnaWQgIkZpbGUgc3lzdGVtPyIKK21zZ3N0ciAiRmlsZSBzeXN0ZW0/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NzA3IHBhcnRlZC9wYXJ0ZWQuYzo4NzgKK21zZ2lkICJQYXJ0aXRpb24gdHlwZT8iCittc2dzdHIgIlRpcG8gZGkgcGFydGl6aW9uZT8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo3MTQgcGFydGVkL3BhcnRlZC5jOjg4NSBwYXJ0ZWQvcGFydGVkLmM6MTEzMQorbXNnaWQgIlBhcnRpdGlvbiBuYW1lPyIKK21zZ3N0ciAiTm9tZSBkZWxsYSBwYXJ0aXppb25lPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjcyMiBwYXJ0ZWQvcGFydGVkLmM6ODk1Cittc2dpZCAiRmlsZSBzeXN0ZW0gdHlwZT8iCittc2dzdHIgIlRpcG8gZGkgZmlsZSBzeXN0ZW0/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NzI5IHBhcnRlZC9wYXJ0ZWQuYzo4OTcgcGFydGVkL3BhcnRlZC5jOjEwNTkKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNzI1IHBhcnRlZC9wYXJ0ZWQuYzoxNzgwCittc2dpZCAiU3RhcnQ/IgorbXNnc3RyICJJbml6aW8/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NzMxIHBhcnRlZC9wYXJ0ZWQuYzo5MDAgcGFydGVkL3BhcnRlZC5jOjEwNjIKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNzI3IHBhcnRlZC9wYXJ0ZWQuYzoxNzgyCittc2dpZCAiRW5kPyIKK21zZ3N0ciAiRmluZT8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo3NjkgcGFydGVkL3BhcnRlZC5jOjkzOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IHJlcXVlc3RlZCBhIHBhcnRpdGlvbiBmcm9tICVzIHRvICVzLlxuIgorIlRoZSBjbG9zZXN0IGxvY2F0aW9uIHdlIGNhbiBtYW5hZ2UgaXMgJXMgdG8gJXMuICBJcyB0aGlzIHN0aWxsIGFjY2VwdGFibGUgdG8gIgorInlvdT8iCittc2dzdHIgIiIKKyLDiCBzdGF0YSBjaGllc3RhIHVuYSBwYXJ0aXppb25lIGRhICVzIGEgJXMuXG4iCisiTGEgbG9jYXppb25lIHBpw7kgcHJvc3NpbWEgZGlzcG9uaWJpbGUgw6ggZGEgJXMgYSAlcy4gVmEgYmVuZSBsbyBzdGVzc28/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6ODkwCittc2dpZCAiQW4gZXh0ZW5kZWQgcGFydGl0aW9uIGNhbm5vdCBob2xkIGEgZmlsZSBzeXN0ZW0uICBEaWQgeW91IHdhbnQgbWtwYXJ0PyIKK21zZ3N0ciAiIgorIkxlIHBhcnRpemlvbmUgZXN0ZXNlIG5vbiBwb3Nzb25vIGNvbnRlbmVyZSB1biBmaWxlIHN5c3RlbS4gUHJvc2VndWlyZSBjb24gIgorIm1rcGFydD8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMDUwCittc2dpZCAiQ2FuJ3QgbW92ZSBhbiBleHRlbmRlZCBwYXJ0aXRpb24uIgorbXNnc3RyICJOb24gw6ggcG9zc2liaWxlIHNwb3N0YXJlIHVuYSBwYXJ0aXppb25lIGVzdGVzYS4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMDc5Cittc2dpZCAiQ2FuJ3QgbW92ZSBhIHBhcnRpdGlvbiBvbnRvIGl0c2VsZi4gIFRyeSB1c2luZyByZXNpemUsIHBlcmhhcHM/IgorbXNnc3RyICIiCisiTm9uIMOoIHBvc3NpYmlsZSBtdW92ZXJlIHVuYSBwYXJ0aXppb25lIGluIHNlIHN0ZXNzYS4gUHJvdmFyZSBjb24gaWwgY29tYW5kbyAiCisicmVzaXplPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlub3I6ICVkXG4iCittc2dzdHIgIk1pbm9yOiAlZFxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIyOAorIywgYy1mb3JtYXQKK21zZ2lkICJGbGFnczogJXNcbiIKK21zZ3N0ciAiRmxhZzogJXNcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlsZSBTeXN0ZW06ICVzXG4iCittc2dzdHIgIkZpbGUgc3lzdGVtOiAlc1xuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIzMAorbXNnaWQgIlNpemU6ICAgICAgICAgIgorbXNnc3RyICJEaW1lbnNpb25lOiAgICAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjM1Cittc2dpZCAiTWluaW11bSBzaXplOiAiCittc2dzdHIgIkRpbWVuc2lvbmUgbWluaW1hOiAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjM4Cittc2dpZCAiTWF4aW11bSBzaXplOiAiCittc2dzdHIgIkRpbWVuc2lvbmUgbWFzc2ltYTogIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJNb2RlbDogJXMgKCVzKVxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMzY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkRpc2sgJXM6ICVzXG4iCittc2dzdHIgIkRpc2NvICVzOiAlc1xuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTM2NQorIywgYy1mb3JtYXQKK21zZ2lkICJTZWN0b3Igc2l6ZSAobG9naWNhbC9waHlzaWNhbCk6ICVsbGRCLyVsbGRCXG4iCittc2dzdHIgIkRpbWVuc2lvbmUgZGVsIHNldHRvcmUgKGxvZ2ljYS9maXNpY2EpOiAlbGxkQi8lbGxkQlxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTM4MworIywgYy1mb3JtYXQKK21zZ2lkICJCSU9TIGN5bGluZGVyLGhlYWQsc2VjdG9yIGdlb21ldHJ5OiAlZCwlZCwlZC4gIEVhY2ggY3lsaW5kZXIgaXMgJXMuXG4iCittc2dzdHIgIiIKKyJHZW9tZXRyaWEgZGVsIEJJT1MgY2lsaW5kcmksIHRlc3RpbmUsIHNldHRvcmk6ICVkLCVkLCVkLiBPZ25pIGNpbGluZHJvIMOoICUiCisicy5cbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEzOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGFydGl0aW9uIFRhYmxlOiAlc1xuIgorbXNnc3RyICJUYWJlbGxhIGRlbGxlIHBhcnRpemlvbmk6ICVzXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDA2IHBhcnRlZC9wYXJ0ZWQuYzoxNDA5Cittc2dpZCAiTnVtYmVyIgorbXNnc3RyICJOdW1lcm8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDA2IHBhcnRlZC9wYXJ0ZWQuYzoxNDA5Cittc2dpZCAiU3RhcnQiCittc2dzdHIgIkluaXppbyIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MDcgcGFydGVkL3BhcnRlZC5jOjE0MTAKK21zZ2lkICJFbmQiCittc2dzdHIgIkZpbmUiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDEwCittc2dpZCAiU2l6ZSIKK21zZ3N0ciAiRGltZW5zaW9uZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MTQKK21zZ2lkICJUeXBlIgorbXNnc3RyICJUaXBvIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQxNgorbXNnaWQgIkZpbGUgc3lzdGVtIgorbXNnc3RyICJGaWxlIFN5c3RlbSIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MTkKK21zZ2lkICJOYW1lIgorbXNnc3RyICJOb21lIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQyMQorbXNnaWQgIkZsYWdzIgorbXNnc3RyICJGbGFnIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQ3NworbXNnaWQgIkZyZWUgU3BhY2UiCittc2dzdHIgIlNwYXppbyBsaWJlcm8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBICVzICVzIHBhcnRpdGlvbiB3YXMgZm91bmQgYXQgJXMgLT4gJXMuICBEbyB5b3Ugd2FudCB0byBhZGQgaXQgdG8gdGhlICIKKyJwYXJ0aXRpb24gdGFibGU/IgorbXNnc3RyICIiCisiVW5hIHBhcnRpemlvbmUgJXMgJXMgw6ggc3RhdGEgdHJvdmF0YSBhICVzIC0+ICVzLiBBZ2dpdW5nZXJsYSBhbGxhIHRhYmVsbGEgIgorImRlbGxlIHBhcnRpemlvbmk/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTY2MworbXNnaWQgInNlYXJjaGluZyBmb3IgZmlsZSBzeXN0ZW1zIgorbXNnc3RyICJyaWNlcmNhIGRpIGZpbGUgc3lzdGVtIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTg3NworbXNnaWQgIk5ldyBkZXZpY2U/IgorbXNnc3RyICJOdW92byBkZXZpY2U/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTkwMgorbXNnaWQgIkZsYWcgdG8gSW52ZXJ0PyIKK21zZ3N0ciAiRmxhZyBkYSBpbnZlcnRpcmU/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTkwNworbXNnaWQgIk5ldyBzdGF0ZT8iCittc2dzdHIgIk51b3ZvIHN0YXRvPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjE5NDQKK21zZ2lkICJVbml0PyIKK21zZ3N0ciAiVW5pdMOgPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjIwOTMKK21zZ2lkICJjaGVjayIKK21zZ3N0ciAiY29udHJvbGxvIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjA5NgorbXNnaWQgIiIKKyJjaGVjayBOVU1CRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIGEgc2ltcGxlIGNoZWNrIG9uIHRoZSBmaWxlIHN5c3RlbSIKK21zZ3N0ciAiIgorImNvbnRyb2xsbyBOVU1CRVIgICAgICAgICAgICAgZWZmZXR0dWEgdW4gc2VtcGxpY2UgY29udHJvbGxvIGRlbCBmaWxlIHN5c3RlbSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMDIKK21zZ2lkICJjcCIKK21zZ3N0ciAiY3AiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTA1Cittc2dpZCAiIgorImNwIFtGUk9NLURFVklDRV0gRlJPTS1OVU1CRVIgVE8tTlVNQkVSICAgY29weSBmaWxlIHN5c3RlbSB0byBhbm90aGVyICIKKyJwYXJ0aXRpb24iCittc2dzdHIgIiIKKyJjcCBbREVWSUNFLUlOSVpJQUxFXSBOVU1CRVItSU5JWklBTEUgTlVNQkVSLUZJTkFMRSBjb3BpYSB1biBmaWxlIHN5c3RlbSBpbiAiCisidW4nYWx0cmEgcGFydGl6aW9uZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMTEKK21zZ2lkICJoZWxwIgorbXNnc3RyICJoZWxwIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjExNAorIywgZnV6enkKK21zZ2lkICIiCisiaGVscCBbQ09NTUFORF0gICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCBnZW5lcmFsIGhlbHAsIG9yIGhlbHAgb24gIgorIkNPTU1BTkQiCittc2dzdHIgImhlbHAgW0NPTUFORE9dICAgICAgICAgICAgICAgIG1vc3RyYSBsJ2FpdXRvIGdlbmVyaWNvIG8gc3UgQ09NQU5ETyIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMjAKK21zZ2lkICJta2xhYmVsIgorbXNnc3RyICJta2xhYmVsIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEyMAorIywgZnV6enkKK21zZ2lkICJta3RhYmxlIgorbXNnc3RyICJta2xhYmVsIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEyMworIywgZnV6enkKK21zZ2lkICIiCisibWtsYWJlbCxta3RhYmxlIExBQkVMLVRZUEUgICAgICAgICAgICAgICBjcmVhdGUgYSBuZXcgZGlza2xhYmVsIChwYXJ0aXRpb24gIgorInRhYmxlKSIKK21zZ3N0ciAiIgorIm1rbGFiZWwgVElQTy1FVElDSEVUVEEgICAgICAgIGNyZWEgdW5hIG51b3ZhIGV0aWNoZXR0YSBkaXNjbyAodGFiZWxsYSBkZWxsZSAiCisicGFydGl6aW9uaSkiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTI5Cittc2dpZCAibWtmcyIKK21zZ3N0ciAibWtmcyIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMzIKK21zZ2lkICIiCisibWtmcyBOVU1CRVIgRlMtVFlQRSAgICAgICAgICAgICAgICAgICAgICBtYWtlIGEgRlMtVFlQRSBmaWxlIHN5c3RlbSBvbiAiCisicGFydGl0aXRvbiBOVU1CRVIiCittc2dzdHIgIiIKKyJta2ZzIE5VTUJFUiBUSVBPLUZTICAgICAgICAgICAgY3JlYSB1biBmaWxlIHN5c3RlbSBUSVBPLUZTIHN1bGxhIHBhcnRpemlvbmUgIgorIk5VTUJFUiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMzgKK21zZ2lkICJta3BhcnQiCittc2dzdHIgIm1rcGFydCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNDEKK21zZ2lkICJta3BhcnQgUEFSVC1UWVBFIFtGUy1UWVBFXSBTVEFSVCBFTkQgICAgIG1ha2UgYSBwYXJ0aXRpb24iCittc2dzdHIgIm1rcGFydCBUSVBPX1BBUlQgW1RJUE8tRlNdIElOSVpJTyBGSUxFICAgIGNyZWEgdW5hIHBhcnRpemlvbmUiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTQ3CisjLCBmdXp6eQorbXNnaWQgIiIKKyInbWtwYXJ0JyBtYWtlcyBhIHBhcnRpdGlvbiB3aXRob3V0IGNyZWF0aW5nIGEgbmV3IGZpbGUgc3lzdGVtIG9uIHRoZSAiCisicGFydGl0aW9uLiAgRlMtVFlQRSBtYXkgYmUgc3BlY2lmaWVkIHRvIHNldCBhbiBhcHByb3ByaWF0ZSBwYXJ0aXRpb24gSUQuXG4iCittc2dzdHIgIiIKKyJta3BhcnQgY3JlYSB1biBwYXJ0aXppb25lIHNlbnphIGNyZWFyY2kgdW4gZmlsZSBzeXN0ZW0uIElsIFRJUE8tRlMgcHXDsiAiCisiZXNzZXJlIHNwZWNpZmljYXRvIHBlciBjcmVhcmUgdW4gSUQgZGVsbGEgcGFydGl6aW9uZSBhcHByb3ByaWF0by5cbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNTIKK21zZ2lkICJta3BhcnRmcyIKK21zZ3N0ciAibWtwYXJ0ZnMiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTU1Cittc2dpZCAiIgorIm1rcGFydGZzIFBBUlQtVFlQRSBGUy1UWVBFIFNUQVJUIEVORCAgICAgbWFrZSBhIHBhcnRpdGlvbiB3aXRoIGEgZmlsZSBzeXN0ZW0iCittc2dzdHIgIiIKKyJta3BhcnRmcyBUSVBPX1BBUlQgVElQT19GUyBJTklaSU8gRklORSAgY3JlYSB1bmEgcGFydGl6aW9uZSBlIGlsIGZpbGUgc3lzdGVtIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE2MQorbXNnaWQgIm1vdmUiCittc2dzdHIgIm1vdmUiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTY0Cittc2dpZCAibW92ZSBOVU1CRVIgU1RBUlQgRU5EICAgICAgICAgICAgICAgICAgICBtb3ZlIHBhcnRpdGlvbiBOVU1CRVIiCittc2dzdHIgIm1vdmUgTlVNQkVSIFNUQVJUIEVORCAgICAgICAgICBzcG9zdGEgbGEgcGFydGl6aW9uZSBOVU1CRVIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTY5Cittc2dpZCAibmFtZSIKK21zZ3N0ciAibmFtZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNzIKK21zZ2lkICJuYW1lIE5VTUJFUiBOQU1FICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgcGFydGl0aW9uIE5VTUJFUiBhcyBOQU1FIgorbXNnc3RyICJuYW1lIE5VTUJFUiBOT01FICAgICAgICAgICAgICAgY2hpYW1hIGxhIHBhcnRpemlvbmUgTlVNQkVSIFwiTk9NRVwiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE3NworbXNnaWQgInByaW50IgorbXNnc3RyICJwcmludCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxODAKK21zZ2lkICIiCisicHJpbnQgW2RldmljZXN8ZnJlZXxsaXN0LGFsbHxOVU1CRVJdICAgICBkaXNwbGF5IHRoZSBwYXJ0aXRpb24gdGFibGUsICIKKyJhdmFpbGFibGUgZGV2aWNlcywgZnJlZSBzcGFjZSwgYWxsIGZvdW5kIHBhcnRpdGlvbnMsIG9yIGEgcGFydGljdWxhciAiCisicGFydGl0aW9uIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTg1Cittc2dpZCAiIgorIldpdGhvdXQgYXJndW1lbnRzLCAncHJpbnQnIGRpc3BsYXlzIHRoZSBlbnRpcmUgcGFydGl0aW9uIHRhYmxlLiBIb3dldmVyIHdpdGggIgorInRoZSBmb2xsb3dpbmcgYXJndW1lbnRzIGl0IHBlcmZvcm1zIHZhcmlvdXMgb3RoZXIgYWN0aW9ucy5cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE4NworbXNnaWQgIiAgZGV2aWNlcyAgIDogZGlzcGxheSBhbGwgYWN0aXZlIGJsb2NrIGRldmljZXNcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE4OAorbXNnaWQgIiIKKyIgIGZyZWUgICAgICA6IGRpc3BsYXkgaW5mb3JtYXRpb24gYWJvdXQgZnJlZSB1bnBhcnRpdGlvbmVkIHNwYWNlIG9uIHRoZSAiCisiY3VycmVudCBibG9jayBkZXZpY2VcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE5MAorIywgZnV6enkKK21zZ2lkICIiCisiICBsaXN0LCBhbGwgOiBkaXNwbGF5IHRoZSBwYXJ0aXRpb24gdGFibGVzIG9mIGFsbCBhY3RpdmUgYmxvY2sgZGV2aWNlc1xuIgorbXNnc3RyICIiCisicHJpbnQgW2ZyZWV8TlVNQkVSfGFsbF0gICAgICAgICAgICAgICAgIG1vc3RyYSBsYSB0YWJlbGxhIGRlbGxlIHBhcnRpemlvbmksICIKKyJ1bmEgcGFydGl6aW9uZSBvIHR1dHRpIGkgZGV2aWNlIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE5MQorbXNnaWQgIiIKKyIgIE5VTUJFUiAgICA6IGRpc3BsYXkgbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIHBhcnRpY3VsYXIgIgorInBhcnRpdGlvblxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTk2Cittc2dpZCAicXVpdCIKK21zZ3N0ciAicXVpdCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxOTkKK21zZ2lkICJxdWl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQgcHJvZ3JhbSIKK21zZ3N0ciAicXVpdCAgICAgICAgICAgICAgICAgICAgICAgICAgdGVybWluYSBpbCBwcm9ncmFtbWEiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjA0Cittc2dpZCAicmVzY3VlIgorbXNnc3RyICJyZXNjdWUiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjA3Cittc2dpZCAiIgorInJlc2N1ZSBTVEFSVCBFTkQgICAgICAgICAgICAgICAgICAgICAgICAgcmVzY3VlIGEgbG9zdCBwYXJ0aXRpb24gbmVhciBTVEFSVCAiCisiYW5kIEVORCIKK21zZ3N0ciAiIgorInJlc2N1ZSBJTklaSU8gRklORSAgICAgICAgICAgIHJpcHJpc3RpbmEgdW5hIHBhcnRpemlvbmUgcGVyc2EgdmljaW5vIGEgIgorIklOSVpJTyBlIEZJTkUiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjEzCittc2dpZCAicmVzaXplIgorbXNnc3RyICJyZXNpemUiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjE2Cittc2dpZCAiIgorInJlc2l6ZSBOVU1CRVIgU1RBUlQgRU5EICAgICAgICAgICAgICAgICAgcmVzaXplIHBhcnRpdGlvbiBOVU1CRVIgYW5kIGl0cyAiCisiZmlsZSBzeXN0ZW0iCittc2dzdHIgIiIKKyJyZXNpemUgTlVNQkVSIFNUQVJUIEVORCAgICAgICAgcmlkaW1lbnNpb25hIGxhIHBhcnRpemlvbmUgTlVNQkVSIGUgaWwgZmlsZSAiCisic3lzdGVtIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIyNAorbXNnaWQgInJtIgorbXNnc3RyICJybSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMjcKK21zZ2lkICJybSBOVU1CRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwYXJ0aXRpb24gTlVNQkVSIgorbXNnc3RyICJybSBOVU1CRVIgICAgICAgICAgICAgICAgICAgICBjYW5jZWxsYSBsYSBwYXJ0aXppb25lIE5VTUVSTyIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMzIKK21zZ2lkICJzZWxlY3QiCittc2dzdHIgInNlbGVjdCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMzUKK21zZ2lkICJzZWxlY3QgREVWSUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNob29zZSB0aGUgZGV2aWNlIHRvIGVkaXQiCittc2dzdHIgIiIKKyJzZWxlY3QgRElTUE9TSVRJVk8gICAgICAgICAgICAgICAgIHNjZWdsaWUgc3UgcXVhbGUgZGlzcG9zaXRpdm8gb3BlcmFyZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNDAKK21zZ2lkICJzZXQiCittc2dzdHIgInNldCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNDMKK21zZ2lkICIiCisic2V0IE5VTUJFUiBGTEFHIFNUQVRFICAgICAgICAgICAgICAgICAgICBjaGFuZ2UgdGhlIEZMQUcgb24gcGFydGl0aW9uIE5VTUJFUiIKK21zZ3N0ciAic2V0IE5VTUJFUiBGTEFHIFNUQVRPICAgICAgICAgIGNhbWJpYSB1biBmbGFnIG5lbGxhIHBhcnRpemlvbmUgTlVNQkVSIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI0OQorbXNnaWQgInRvZ2dsZSIKK21zZ3N0ciAidG9nZ2xlIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI1MgorbXNnaWQgIiIKKyJ0b2dnbGUgW05VTUJFUiBbRkxBR11dICAgICAgICAgICAgICAgICAgIHRvZ2dsZSB0aGUgc3RhdGUgb2YgRkxBRyBvbiAiCisicGFydGl0aW9uIE5VTUJFUiIKK21zZ3N0ciAiIgorInRvZ2dsZSBbTlVNQkVSIFtGTEFHXV0gICAgICAgICAgICAgICAgICAgaW52ZXJ0ZSBsbyBzdGF0byBkZWwgRkxBRyBzdWxsYSAiCisicGFydGl0aW9uZSBOVU1CRVIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjU4Cittc2dpZCAidW5pdCIKK21zZ3N0ciAidW5pdCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNjEKK21zZ2lkICJ1bml0IFVOSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCB0aGUgZGVmYXVsdCB1bml0IHRvIFVOSVQiCittc2dzdHIgInVuaXQgVU5JVCAgICAgICAgICAgICAgICAgICAgICAgIGltcG9zdGFyZSBsJ3VuaXTDoCBwcmVkZWZpbml0YSBhIFVOSVQiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjY2CisjLCBmdXp6eQorbXNnaWQgInZlcnNpb24iCittc2dzdHIgInZlcnNpb24iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjY5CisjLCBmdXp6eQorbXNnaWQgIiIKKyJ2ZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXkgdGhlIHZlcnNpb24gbnVtYmVyIGFuZCAiCisiY29weXJpZ2h0IGluZm9ybWF0aW9uIG9mIEdOVSBQYXJ0ZWQiCittc2dzdHIgIiIKKyJ2ZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9zdHJhIGlsIGNvcHlyaWdodCBlIGxlICIKKyJpbmZvcm1hemlvbmkgc3UgR05VIFBhcnRlZCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNzMKKyMsIGZ1enp5Cittc2dpZCAiIgorIid2ZXJzaW9uJyBkaXNwbGF5cyBjb3B5cmlnaHQgYW5kIHZlcnNpb24gaW5mb3JtYXRpb24gY29ycmVzcG9uZGluZyB0byB0aGlzICIKKyJjb3B5IG9mIEdOVSBQYXJ0ZWRcbiIKK21zZ3N0ciAiIgorInZlcnNpb27Ct21vc3RyYSBpbCBjb3B5cmlnaHQgZSBsZSBpbmZvcm1hemlvbmkgc3VsbGEgdmVyc2lvbmUgZGkgcXVlc3RhIGNvcGlhICIKKyJkaSBHTlXCt1BhcnRlZFxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjMzNQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1obG1zdl0gW0RFVklDRSBbQ09NTUFORCBbUEFSQU1FVEVSU11dLi4uXVxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMzc5Cittc2dpZCAiTm8gZGV2aWNlIGZvdW5kIgorbXNnc3RyICJOb24gw6ggc3RhdG8gdHJvdmF0byBhbGN1biBkaXNwb3NpdGl2byIKKworIzogcGFydGVkL3BhcnRlZC5jOjI0MTIKK21zZ2lkICJXQVJOSU5HOiBZb3UgYXJlIG5vdCBzdXBlcnVzZXIuICBXYXRjaCBvdXQgZm9yIHBlcm1pc3Npb25zLiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjQ1MAorIywgZnV6enkKK21zZ2lkICJZb3UgbWF5IG5lZWQgdG8gdXBkYXRlIC9ldGMvZnN0YWIuXG4iCittc2dzdHIgIk5vbiBkaW1lbnRpY2FyZSBkaSBhZ2dpb3JuYXJlIC9ldGMvZnN0YWIsIHNlIG5lY2Vzc2FyaW8uXG4iCisKKyM6IHBhcnRlZC91aS5jOjE2MAorbXNnaWQgIldlbGNvbWUgdG8gR05VIFBhcnRlZCEgVHlwZSAnaGVscCcgdG8gdmlldyBhIGxpc3Qgb2YgY29tbWFuZHMuXG4iCittc2dzdHIgIiIKKyJCZW52ZW51dG8gc3UgR05VIFBhcnRlZCEgRGlnaXRhcmUgXCJoZWxwXCIgcGVyIGF2ZXJlIGxhIGxpc3RhIGRlaSBjb21hbmRpLlxuIgorCisjOiBwYXJ0ZWQvdWkuYzoxNjMKK21zZ2lkICIiCisiVXNhZ2U6IHBhcnRlZCBbT1BUSU9OXS4uLiBbREVWSUNFIFtDT01NQU5EIFtQQVJBTUVURVJTXS4uLl0uLi5dXG4iCisiQXBwbHkgQ09NTUFORHMgd2l0aCBQQVJBTUVURVJTIHRvIERFVklDRS4gIElmIG5vIENPTU1BTkQocykgYXJlIGdpdmVuLCBydW4gIgorImluXG4iCisiaW50ZXJhY3RpdmUgbW9kZS5cbiIKK21zZ3N0ciAiIgorIlVzbzogcGFydGVkIFtPUFpJT05JXS4uLiBbREVWSUNFIFtDT01BTkRPIFtQQVJBTUVUUkldLi4uXS4uLl1cbiIKKyJFc2VndWUgQ09NQU5ETyBjb24gaSBQQVJBTUVUUkkgc3VsIERFVklDRS4gU2Ugbm9uIGMnw6ggYWxjdW4gQ09NQU5ET1xuIgorInBhcnRlIGluIG1vZGFsaXTDoCBpbnRlcmF0dGl2YS5cbiIKKworIzogcGFydGVkL3VpLmM6MTY4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiXG4iCisiWW91IGZvdW5kIGEgYnVnIGluIEdOVSBQYXJ0ZWQhIEhlcmUncyB3aGF0IHlvdSBoYXZlIHRvIGRvOlxuIgorIlxuIgorIkRvbid0IHBhbmljISBUaGUgYnVnIGhhcyBtb3N0IGxpa2VseSBub3QgYWZmZWN0ZWQgYW55IG9mIHlvdXIgZGF0YS5cbiIKKyJIZWxwIHVzIHRvIGZpeCB0aGlzIGJ1ZyBieSBkb2luZyB0aGUgZm9sbG93aW5nOlxuIgorIlxuIgorIkNoZWNrIHdoZXRoZXIgdGhlIGJ1ZyBoYXMgYWxyZWFkeSBiZWVuIGZpeGVkIGJ5IGNoZWNraW5nXG4iCisidGhlIGxhc3QgdmVyc2lvbiBvZiBHTlUgUGFydGVkIHRoYXQgeW91IGNhbiBmaW5kIGF0OlxuIgorIlxuIgorIlx0aHR0cDovL2Z0cC5nbnUub3JnL2dudS9wYXJ0ZWQvXG4iCisiXG4iCisiUGxlYXNlIGNoZWNrIHRoaXMgdmVyc2lvbiBwcmlvciB0byBidWcgcmVwb3J0aW5nLlxuIgorIlxuIgorIklmIHRoaXMgaGFzIG5vdCBiZWVuIGZpeGVkIHlldCBvciBpZiB5b3UgZG9uJ3Qga25vdyBob3cgdG8gY2hlY2ssXG4iCisicGxlYXNlIHZpc2l0IHRoZSBHTlUgUGFydGVkIHdlYnNpdGU6XG4iCisiXG4iCisiXHRodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvcGFydGVkXG4iCisiXG4iCisiZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uXG4iCisiXG4iCisiWW91ciByZXBvcnQgc2hvdWxkIGNvbnRhaW4gdGhlIHZlcnNpb24gb2YgdGhpcyByZWxlYXNlICglcylcbiIKKyJhbG9uZyB3aXRoIHRoZSBlcnJvciBtZXNzYWdlIGJlbG93LCB0aGUgb3V0cHV0IG9mXG4iCisiXG4iCisiXHRwYXJ0ZWQgREVWSUNFIHVuaXQgY28gcHJpbnQgdW5pdCBzIHByaW50XG4iCisiXG4iCisiYW5kIHRoZSBmb2xsb3dpbmcgaGlzdG9yeSBvZiBjb21tYW5kcyB5b3UgZW50ZXJlZC5cbiIKKyJBbHNvIGluY2x1ZGUgYW55IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgeW91ciBzZXR1cCB5b3VcbiIKKyJjb25zaWRlciBpbXBvcnRhbnQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJcbiIKKyJTaSDDqCB0cm92YXRvIHVuIGJ1ZyBpbiBHTlUgUGFydGVkISBFY2NvIGNvc2EgZmFyZTpcbiIKKyJcbiIKKyJOb24gaW5uZXJ2b3NpcnNpISBNb2x0byBwcm9iYWJpbG1lbnRlIGlsIGJ1ZyBub24gaGEgcm92aW5hdG8gaSBkYXRpLlxuIgorIklsIG1vZG8gcGVyIGFpdXRhcmNpIGEgY29ycmVnZ2VybG8gw6ggaWwgc2VndWVudGU6XG4iCisiXG4iCisiVmVyaWZpY2FyZSBjaGUgaWwgYnVnIG5vbiBzaWEgZ2nDoCBzdGF0byBjb3JyZXR0byB1dGlsaXp6YW5kb1xuIgorImxhIHZlcnNpb25lIHBpw7kgcmVjZW50ZSBkaSBHTlUgUGFydGVkIGNoZSBzaSB0cm92YSBhOlxuIgorIlxuIgorIlx0aHR0cDovL2Z0cC5nbnUub3JnL2dudS9wYXJ0ZWQvXG4iCisiXG4iCisiVXNhcmUgcXVlc3RhIHZlcnNpb25lIHByaW1hIGRpIHNlZ25hbHJlIGlsIGJ1Zy5cbiIKKyJcbiIKKyJTZSBpbCBwcm9ibGVtYSBub24gw6ggYW5jb3JhIHN0YXRvIHJpc29sdG8gbyBzZSBub24gc2kgc2EgY29tZSB2ZXJpZmljYXJsbyxcbiIKKyJ2aXNpdGFyZSBpbCBzaXRvIHdlYiBkaSBHTlUgUGFydGVkOlxuIgorIlxuIgorIlx0aHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3BhcnRlZFxuIgorIlxuIgorInBlciB1bHRlcmlvcmkgaW5mb3JtYXppb25pLlxuIgorIlxuIgorIkxhIHNlZ25hbGF6aW9uZSBkZXZlIGNvbnRlbmVyZSBsYSB2ZXJzaW9uZSBkaSBxdWVzdG8gcHJvZ3JhbW1hICglcylcbiIKKyJjb24gaWwgbWVzc2FnZ2lvIGQnZXJyb3JlIHJpcG9ydGF0byBzb3R0bywgbCdvdXRwdXQgZGlcbiIKKyJcbiIKKyJcdHBhcnRlZCBERVZJQ0UgdW5pdCBjbyBwcmludCB1bml0IHMgcHJpbnRcbiIKKyJcbiIKKyJlIG9nbmkgYWx0cmEgaW5mb3JtYXppb25lIHN1bGxhIHByb3ByaWEgY29uZmlndXJhemlvbmUgY2hlIHNpIGNvbnNpZGV0aSAiCisiaW1wb3J0YW50ZS5cbiIKKworIzogcGFydGVkL3VpLmM6Mjg0Cittc2dpZCAiIgorIlxuIgorIkNvbW1hbmQgSGlzdG9yeTpcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzozNjYKKyMsIGZ1enp5Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBTRUdWX01BUEVSUiAoQWRkcmVzcyBub3QgbWFwcGVkIHRvIG9iamVjdClcbiIKK21zZ3N0ciAiIgorIlxuIgorIkVycm9yZTogU0VHVl9NQVBFUlIgKEluZGlyaXp6byBub24gY29ycmlzcG9uZGVudGUgYWQgdW4gb2dnZXR0bykiCisKKyM6IHBhcnRlZC91aS5jOjM3MgorIywgZnV6enkKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IFNFR1ZfQUNDRVJSIChJbnZhbGlkIHBlcm1pc3Npb25zIGZvciBtYXBwZWQgb2JqZWN0KVxuIgorbXNnc3RyICIiCisiXG4iCisiRXJyb3JlOiBTRUdWX0FDQ0VSUiAoUGVybWVzc28gbm9uIHZhbGlkbyBwZXIgbCdvZ2dldHRvIG1hcHBhdG8pIgorCisjOiBwYXJ0ZWQvdWkuYzozNzcKKyMsIGZ1enp5Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBBIGdlbmVyYWwgU0lHU0VHViBzaWduYWwgd2FzIGVuY291bnRlcmVkLlxuIgorbXNnc3RyICIiCisiXG4iCisiRXJyb3JlOiBVbiBzZWduYWxlIFNJR1NFR1YgZ2VuZXJpY28uIgorCisjOiBwYXJ0ZWQvdWkuYzo0MTAKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9JTlRESVYgKEludGVnZXI6IGRpdmlkZSBieSB6ZXJvKSIKK21zZ3N0ciAiIgorIlxuIgorIkVycm9yZTogRlBFX0lOVERJViAoSW50ZXJvOiBkaXZpc2lvbmUgcGVyIHplcm8pIgorCisjOiBwYXJ0ZWQvdWkuYzo0MTUKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9JTlRPVkYgKEludGVnZXI6IG92ZXJmbG93KSIKK21zZ3N0ciAiIgorIlxuIgorIkVycm9yZTogRlBFX0lOVE9WRiAoSW50ZXJvOiBvdmVyZmxvdykiCisKKyM6IHBhcnRlZC91aS5jOjQyMAorIywgZnV6enkKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRESVYgKEZsb2F0OiBkaXZpZGUgYnkgemVybykiCittc2dzdHIgIiIKKyJcbiIKKyJFcnJvcmU6IEZQRV9GTFRESVYgKEZsb2F0OiBkaXZpc2lvbmUgcGVyIHplcm8pIgorCisjOiBwYXJ0ZWQvdWkuYzo0MjUKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRPVkYgKEZsb2F0OiBvdmVyZmxvdykiCittc2dzdHIgIiIKKyJcbiIKKyJFcnJvcmU6IEZQRV9GTFRPVkYgKEZsb2F0OiBvdmVyZmxvdykiCisKKyM6IHBhcnRlZC91aS5jOjQzMAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0ZMVFVORCAoRmxvYXQ6IHVuZGVyZmxvdykiCittc2dzdHIgIiIKKyJcbiIKKyJFcnJvcmU6IEZQRV9GTFRVTkQgKEZsb2F0OiB1bmRlcmZsb3cpIgorCisjOiBwYXJ0ZWQvdWkuYzo0MzUKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRSRVMgKEZsb2F0OiBpbmV4YWN0IHJlc3VsdCkiCittc2dzdHIgIiIKKyJcbiIKKyJFcnJvcmU6IEZQRV9GTFRSRVMgKEZsb2F0OiByaXN1bHRhdG8gaW5lc2F0dG8pIgorCisjOiBwYXJ0ZWQvdWkuYzo0NDAKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRJTlYgKEZsb2F0OiBpbnZhbGlkIG9wZXJhdGlvbikiCittc2dzdHIgIiIKKyJcbiIKKyJFcnJvcmU6IEZQRV9GTFRJTlYgKEZsb2F0OiBvcGVyYXppb25lIG5vbiB2YWxpZGEpIgorCisjOiBwYXJ0ZWQvdWkuYzo0NDUKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRTVUIgKEZsb2F0OiBzdWJzY3JpcHQgb3V0IG9mIHJhbmdlKSIKK21zZ3N0ciAiIgorIlxuIgorIkVycm9yZTogRlBFX0ZMVFNVQiAoRmxvYXQ6IHN1YnNjcmlwdCBvdXQgb2YgcmFuZ2UpIgorCisjOiBwYXJ0ZWQvdWkuYzo0NTAKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEEgZ2VuZXJhbCBTSUdGUEUgc2lnbmFsIHdhcyBlbmNvdW50ZXJlZC4iCittc2dzdHIgIiIKKyJcbiIKKyJFcnJvcmU6IFVuIGdlbmVyaWNvIHNlZ25hbGUgU0lHRlBFLiIKKworIzogcGFydGVkL3VpLmM6NDgzCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfSUxMT1BDIChJbGxlZ2FsIE9wY29kZSkiCittc2dzdHIgIiIKKyJcbiIKKyJFcnJvcmU6IElMTF9JTExPUEMgKE9wY29kZSBub24gbGVnYWxlKSIKKworIzogcGFydGVkL3VpLmM6NDg4Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfSUxMT1BOIChJbGxlZ2FsIE9wZXJhbmQpIgorbXNnc3RyICIiCisiXG4iCisiRXJyb3JlOiBJTExfSUxMT1BOIChPcGVyYW5kIG5vbiBsZWdhbGUpIgorCisjOiBwYXJ0ZWQvdWkuYzo0OTMKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9JTExBRFIgKElsbGVnYWwgYWRkcmVzc2luZyBtb2RlKSIKK21zZ3N0ciAiIgorIlxuIgorIkVycm9yZTogSUxMX0lMTEFEUiAoTW9kYWxpdMOgIGRpIGluZGlyaXp6YW1lbnRvIG5vbiBsZWdhbGUpIgorCisjOiBwYXJ0ZWQvdWkuYzo0OTgKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9JTExUUlAgKElsbGVnYWwgVHJhcCkiCittc2dzdHIgIiIKKyJcbiIKKyJFcnJvcmU6IElMTF9JTExUUlAgKFRyYXAgbm9uIGxlZ2FsZSkiCisKKyM6IHBhcnRlZC91aS5jOjUwMworbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX1BSVk9QQyAoUHJpdmlsZWdlZCBPcGNvZGUpIgorbXNnc3RyICIiCisiXG4iCisiRXJyb3JlOiBJTExfUFJWT1BDIChPcGNvZGUgcHJpdmlsZWdpYXRvKSIKKworIzogcGFydGVkL3VpLmM6NTA4Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfUFJWUkVHIChQcml2aWxlZ2VkIFJlZ2lzdGVyKSIKK21zZ3N0ciAiIgorIlxuIgorIkVycm9yZTogSUxMX1BSVlJFRyAoUmVnaXN0cm8gcHJpdmlsZWdpYXRvKSIKKworIzogcGFydGVkL3VpLmM6NTEzCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfQ09QUk9DIChDb3Byb2Nlc3NvciBFcnJvcikiCittc2dzdHIgIiIKKyJcbiIKKyJFcnJvcmU6IElMTF9DT1BST0MgKEVycm9yZSBkZWwgY29wcm9jZXNzb3JlKSIKKworIzogcGFydGVkL3VpLmM6NTE4Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfQkFEU1RLIChJbnRlcm5hbCBTdGFjayBFcnJvcikiCittc2dzdHIgIiIKKyJcbiIKKyJFcnJvcmU6IElMTF9CQURTVEsgKEVycm9yZSBkZWxsbyBzdGFjayBpbnRlcm5vKSIKKworIzogcGFydGVkL3VpLmM6NTIzCisjLCBmdXp6eQorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogQSBnZW5lcmFsIFNJR0lMTCBzaWduYWwgd2FzIGVuY291bnRlcmVkLiIKK21zZ3N0ciAiIgorIlxuIgorIkVycm9yZTogVW4gc2VnbmFsZSBTSUdJTEwgZ2VuZXJpY28uIgorCisjOiBwYXJ0ZWQvdWkuYzoxMDI0Cittc2dpZCAiRXhwZWN0aW5nIGEgcGFydGl0aW9uIG51bWJlci4iCittc2dzdHIgIkZvcm5pcmUgdW4gbnVtZXJvIGRpIHBhcnRpemlvbmUuIgorCisjOiBwYXJ0ZWQvdWkuYzoxMDMzCittc2dpZCAiUGFydGl0aW9uIGRvZXNuJ3QgZXhpc3QuIgorbXNnc3RyICJMYSBwYXJ0aXppb25lIG5vbiBlc2lzdGUuIgorCisjOiBwYXJ0ZWQvdWkuYzoxMDUzCittc2dpZCAiRXhwZWN0aW5nIGEgZmlsZSBzeXN0ZW0gdHlwZS4iCittc2dzdHIgIkZvcm5pcmUgdW4gdGlwbyBkaSBmaWxlIHN5c3RlbS4iCisKKyM6IHBhcnRlZC91aS5jOjEwNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBmaWxlIHN5c3RlbSB0eXBlIFwiJXNcIi4iCittc2dzdHIgIlRpcG8gXCIlc1wiIGRpIGZpbGUgc3lzdGVtIHNjb25vc2NpdXRvLiIKKworIzogcGFydGVkL3VpLmM6MTA4MAorbXNnaWQgIkV4cGVjdGluZyBhIGRpc2sgbGFiZWwgdHlwZS4iCittc2dzdHIgIkZvcm5pcmUgdW4gdGlwbyBkaSBldGljaGV0dGEgZGlzY28uIgorCisjOiBwYXJ0ZWQvdWkuYzoxMTc4Cittc2dpZCAiQ2FuJ3QgY3JlYXRlIGFueSBtb3JlIHBhcnRpdGlvbnMuIgorbXNnc3RyICJOb24gw6ggcG9zc2liaWxlIGNyZWFyZSBhbHRyZSBwYXJ0aXppb25pLiIKKworIzogcGFydGVkL3VpLmM6MTE4OAorbXNnaWQgIkV4cGVjdGluZyBhIHBhcnRpdGlvbiB0eXBlLiIKK21zZ3N0ciAiRm9ybmlyZSB1biB0aXBvIGRpIHBhcnRpemlvbmUuIgorCisjOiBwYXJ0ZWQvdWkuYzoxMzE1Cittc2dpZCAib24iCittc2dzdHIgIm9uIgorCisjOiBwYXJ0ZWQvdWkuYzoxMzE2Cittc2dpZCAib2ZmIgorbXNnc3RyICJvZmYiCisKKyM6IHBhcnRlZC91aS5jOjE0MzEKK21zZ2lkICJPUFRJT05zOiIKK21zZ3N0ciAiT1BaSU9OSToiCisKKyM6IHBhcnRlZC91aS5jOjE0MzYKK21zZ2lkICJDT01NQU5EczoiCittc2dzdHIgIkNPTUFOREk6IgorCisjOiBwYXJ0ZWQvdWkuYzoxNDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzaW5nICVzXG4iCittc2dzdHIgIlVzbyAlc1xuIgorCisjOiBwYXJ0ZWQvdWkuYzoxNTE5Cittc2dpZCAiVGhpcyBjb21tYW5kIGRvZXMgbm90IG1ha2Ugc2Vuc2UgaW4gbm9uLWludGVyYWN0aXZlIG1vZGUuXG4iCittc2dzdHIgIiIKKworI34gbXNnaWQgIndoZXJlIG5lY2Vzc2FyeSwgcHJvbXB0cyBmb3IgdXNlciBpbnRlcnZlbnRpb24iCisjfiBtc2dzdHIgImNoaWVkZSBsJ2ludGVydmVudG8gZGVsbCd1dGVudGUsIHF1YW5kbyBuZWNlc3NhcmlvIgorCisjfiBtc2dpZCAiR05VIFBhcnRlZCBWZXJzaW9uIGluZm9ybWF0aW9uOlxuIgorI34gbXNnc3RyICJJbmZvcm1hemlvbmkgc3VsbGEgdmVyc2lvbmUgZGkgR05VIFBhcnRlZDpcbiIKKworIywgZnV6enkKKyN+IG1zZ2lkICIiCisjfiAiV2l0aG91dCBhcmd1bWVudHMsIHByaW50IGRpc3BsYXlzIHRoZSBlbnRpcmUgcGFydGl0aW9uIHRhYmxlLiBXaXRoICIKKyN+ICInZnJlZSdcbiIKKyN+ICJhcmd1bWVudCwgaW5mb3JtYXRpb24gYWJvdXQgZnJlZSBzcGFjZSB3aWxsIGJlIGRpc3BsYXllZCBvdGhlcndpc2UgaWYgYVxuIgorI34gInBhcnRpdGlvbiBudW1iZXIgaXMgZ2l2ZW4sIHRoZW4gbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBpcyBkaXNwbGF5ZWRcbiIKKyN+ICJhYm91dCB0aGF0IHBhcnRpdGlvbi4gSWYgdGhlICdhbGwnIGFyZ3VtZW50IGlzIHBhc3NlZCBpbnN0ZWFkLCBwYXJ0aXRpb25cbiIKKyN+ICJpbmZvcm1hdGlvbiBmb3IgYWxsIGRldmljZXMgd2lsbCBiZSBkaXNwbGF5ZWQuXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJTZW56YSBhcmdvbWVudGkgwqtwcmludMK7IG1vc3RyYSB0dXR0YSBsYSB0YWJlbGxhIGRlbGxlIHBhcnRpemlvbmkuIENvblxuIgorI34gImwnYXJnb21lbnRvIMKrZnJlZcK7IG1vc3RyYSBsZSBpbmZvcm1hemlvbmkgc3VsbG8gc3BhemlvIGRpc3BvbmliaWxlLFxuIgorI34gImFsdHJpbWVudGkgc2UgdmllbmUgc3BlY2lmaWNhdG8gdW4gbnVtZXJvIGRpIHBhcnRpemlvbmUgYWxsb3JhIHNvbm9cbiIKKyN+ICJtb3N0cmF0ZSBpbmZvcm1hemlvbmkgZGV0dGFnbGlhdGUgc3VsbGEgcGFydGl6aW9uZS5TZSB2aWVuZSBwYXNzYXRvXG4iCisjfiAibCdhcmdvbWVudG8gwqthbGzCuyAgdmVuZ29ubyBtb3N0cmF0ZSBsZSBpbmZvcm1hemlvbmkgcGVyIHR1dHRpIGkgZGV2aWNlLiIKKworI34gbXNnaWQgIkF0dGVtcHQgdG8gcmVhZCBzZWN0b3JzICVsZC0lbGQgb3V0c2lkZSBvZiBwYXJ0aXRpb24gb24gJXMuIgorI34gbXNnc3RyICIiCisjfiAiVGVudGF0aXZvIGRpIGxlZ2dlcmUgaSBzZXR0b3JpICVsZC0lbGQgYWwgZGkgZnVvcmkgZGVsbGEgcGFydGl6aW9uZSAlcy4iCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvcG8vamEuZ21vIGIvcGFydGVkLTEuOC43L3BvL2phLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzU2YzgyCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L3BvL2phLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvcG8vamEucG8gYi9wYXJ0ZWQtMS44LjcvcG8vamEucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzEwNWEwZAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9wby9qYS5wbwpAQCAtMCwwICsxLDMyNjAgQEAKKyMgUGFydGVkpM6l4aXDpbuhvKW4pM7G/MvcuOzM9QorIyBDb3B5cmlnaHQgKEMpIDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIEhpcm9zaGkgVGFrZWthd2EgPHNpYW5AYmlnLm9yLmpwPiwgMTk5OS0yMDA2LgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogcGFydGVkIDEuOC4xXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGJ1Zy1wYXJ0ZWRAZ251Lm9yZ1xuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDA3LTA1LTA5IDE3OjAyLTA0MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDA2LTEyLTA4IDE5OjMxKzA5MDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEhpcm9zaGkgVGFrZWthd2EgPHNpYW5AYmlnLm9yLmpwPlxuIgorIkxhbmd1YWdlLVRlYW06IEphcGFuZXNlIDx0cmFuc2xhdGlvbi10ZWFtLWphQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1FVUMtSlBcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisKKyM6IGxpYi9jbG9zZW91dC5jOjc0Cittc2dpZCAid3JpdGUgZXJyb3IiCittc2dzdHIgIiIKKworIzogbGliL2Vycm9yLmM6MTI1CisjLCBmdXp6eQorbXNnaWQgIlVua25vd24gc3lzdGVtIGVycm9yIgorbXNnc3RyICKl1aWhpaSl66W3pbmlxqXgpM68787gIFwiJXNcIiCkz8nUzMCkx6S5oaMiCisKKyM6IGxpYi9nZXRvcHQuYzo1MzEgbGliL2dldG9wdC5jOjU0NworIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIGAlcycgaXMgYW1iaWd1b3VzXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjU4MCBsaWIvZ2V0b3B0LmM6NTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYC0tJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6NTkzIGxpYi9nZXRvcHQuYzo1OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiBgJWMlcycgZG9lc24ndCBhbGxvdyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo2NDEgbGliL2dldG9wdC5jOjY2MCBsaWIvZ2V0b3B0LmM6OTc2IGxpYi9nZXRvcHQuYzo5OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiBgJXMnIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjY5OCBsaWIvZ2V0b3B0LmM6NzAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bnJlY29nbml6ZWQgb3B0aW9uIGAtLSVzJ1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo3MDkgbGliL2dldG9wdC5jOjcxMgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5yZWNvZ25pemVkIG9wdGlvbiBgJWMlcydcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6NzY0IGxpYi9nZXRvcHQuYzo3NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGlsbGVnYWwgb3B0aW9uIC0tICVjXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjc3MyBsaWIvZ2V0b3B0LmM6Nzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbnZhbGlkIG9wdGlvbiAtLSAlY1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo4MjggbGliL2dldG9wdC5jOjg0NCBsaWIvZ2V0b3B0LmM6MTA0OCBsaWIvZ2V0b3B0LmM6MTA2NgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IC0tICVjXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjg5NyBsaWIvZ2V0b3B0LmM6OTEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYC1XICVzJyBpcyBhbWJpZ3VvdXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6OTM3IGxpYi9nZXRvcHQuYzo5NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiBgLVcgJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzoKKyMuIEdldCB0cmFuc2xhdGlvbnMgZm9yIG9wZW4gYW5kIGNsb3NpbmcgcXVvdGF0aW9uIG1hcmtzLgorIy4KKyMuIFRoZSBtZXNzYWdlIGNhdGFsb2cgc2hvdWxkIHRyYW5zbGF0ZSAiYCIgdG8gYSBsZWZ0CisjLiBxdW90YXRpb24gbWFyayBzdWl0YWJsZSBmb3IgdGhlIGxvY2FsZSwgYW5kIHNpbWlsYXJseSBmb3IKKyMuICInIi4gIElmIHRoZSBjYXRhbG9nIGhhcyBubyB0cmFuc2xhdGlvbiwKKyMuIGxvY2FsZV9xdW90aW5nX3N0eWxlIHF1b3RlcyBgbGlrZSB0aGlzJywgYW5kCisjLiBjbG9jYWxlX3F1b3Rpbmdfc3R5bGUgcXVvdGVzICJsaWtlIHRoaXMiLgorIy4KKyMuIEZvciBleGFtcGxlLCBhbiBBbWVyaWNhbiBFbmdsaXNoIFVuaWNvZGUgbG9jYWxlIHNob3VsZAorIy4gdHJhbnNsYXRlICJgIiB0byBVKzIwMUMgKExFRlQgRE9VQkxFIFFVT1RBVElPTiBNQVJLKSwgYW5kCisjLiBzaG91bGQgdHJhbnNsYXRlICInIiB0byBVKzIwMUQgKFJJR0hUIERPVUJMRSBRVU9UQVRJT04KKyMuIE1BUkspLiAgQSBCcml0aXNoIEVuZ2xpc2ggVW5pY29kZSBsb2NhbGUgc2hvdWxkIGluc3RlYWQKKyMuIHRyYW5zbGF0ZSB0aGVzZSB0byBVKzIwMTggKExFRlQgU0lOR0xFIFFVT1RBVElPTiBNQVJLKSBhbmQKKyMuIFUrMjAxOSAoUklHSFQgU0lOR0xFIFFVT1RBVElPTiBNQVJLKSwgcmVzcGVjdGl2ZWx5LgorIy4KKyMuIElmIHlvdSBkb24ndCBrbm93IHdoYXQgdG8gcHV0IGhlcmUsIHBsZWFzZSBzZWUKKyMuIDxodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1F1b3RhdGlvbl9tYXJrI0dseXBocz4KKyMuIGFuZCB1c2UgZ2x5cGhzIHN1aXRhYmxlIGZvciB5b3VyIGxhbmd1YWdlLgorIzogbGliL3F1b3RlYXJnLmM6MjI5Cittc2dpZCAiYCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcXVvdGVhcmcuYzoyMzAKK21zZ2lkICInIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTMxCittc2dpZCAiU3VjY2VzcyIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjEzNAorbXNnaWQgIk5vIG1hdGNoIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTM3Cittc2dpZCAiSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNDAKK21zZ2lkICJJbnZhbGlkIGNvbGxhdGlvbiBjaGFyYWN0ZXIiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNDMKK21zZ2lkICJJbnZhbGlkIGNoYXJhY3RlciBjbGFzcyBuYW1lIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTQ2Cittc2dpZCAiVHJhaWxpbmcgYmFja3NsYXNoIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTQ5Cittc2dpZCAiSW52YWxpZCBiYWNrIHJlZmVyZW5jZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE1MgorbXNnaWQgIlVubWF0Y2hlZCBbIG9yIFteIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTU1Cittc2dpZCAiVW5tYXRjaGVkICggb3IgXFwoIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTU4Cittc2dpZCAiVW5tYXRjaGVkIFxceyIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE2MQorbXNnaWQgIkludmFsaWQgY29udGVudCBvZiBcXHtcXH0iCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNjQKKyMsIGZ1enp5Cittc2dpZCAiSW52YWxpZCByYW5nZSBlbmQiCittc2dzdHIgIsnUwLWkysPNpMekuaGjIgorCisjOiBsaWIvcmVnY29tcC5jOjE2NworbXNnaWQgIk1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNzAKK21zZ2lkICJJbnZhbGlkIHByZWNlZGluZyByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNzMKK21zZ2lkICJQcmVtYXR1cmUgZW5kIG9mIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE3NgorbXNnaWQgIlJlZ3VsYXIgZXhwcmVzc2lvbiB0b28gYmlnIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTc5Cittc2dpZCAiVW5tYXRjaGVkICkgb3IgXFwpIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6NjgwCittc2dpZCAiTm8gcHJldmlvdXMgcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9ycG1hdGNoLmM6NzAKK21zZ2lkICJeW3lZXSIKK21zZ3N0ciAiIgorCisjOiBsaWIvcnBtYXRjaC5jOjczCittc2dpZCAiXltuTl0iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IFRyYW5zbGF0ZSAiKEMpIiB0byB0aGUgY29weXJpZ2h0IHN5bWJvbAorIy4gKEMtaW4tYS1jaXJjbGUpLCBpZiB0aGlzIHN5bWJvbCBpcyBhdmFpbGFibGUgaW4gdGhlIHVzZXIncworIy4gbG9jYWxlLiAgT3RoZXJ3aXNlLCBkbyBub3QgdHJhbnNsYXRlICIoQykiOyBsZWF2ZSBpdCBhcy1pcy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjY2Cittc2dpZCAiKEMpIgorbXNnc3RyICIiCisKKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjY4Cittc2dpZCAiIgorIlxuIgorIkxpY2Vuc2UgR1BMdjIrOiBHTlUgR1BMIHZlcnNpb24gMiBvciBsYXRlciA8aHR0cDovL2dudS5vcmcvbGljZW5zZXMvZ3BsLiIKKyJodG1sPlxuIgorIlRoaXMgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGFyZSBmcmVlIHRvIGNoYW5nZSBhbmQgcmVkaXN0cmlidXRlIGl0LlxuIgorIlRoZXJlIGlzIE5PIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXcuXG4iCisiXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6ICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJXcml0dGVuIGJ5ICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzo4OAorIywgYy1mb3JtYXQKK21zZ2lkICJXcml0dGVuIGJ5ICVzIGFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIzogbGliL3ZlcnNpb24tZXRjLmM6OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiV3JpdHRlbiBieSAlcywgJXMsIGFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorImFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzoxMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyIlcywgYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjLiBZb3UgY2FuIHVzZSBsaW5lIGJyZWFrcywgZXN0aW1hdGluZyB0aGF0IGVhY2ggYXV0aG9yIG5hbWUgb2NjdXBpZXMKKyMuIGNhLiAxNiBzY3JlZW4gY29sdW1ucyBhbmQgdGhhdCBhIHNjcmVlbiBsaW5lIGhhcyBjYS4gODAgY29sdW1ucy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorIiVzLCAlcywgYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjLiBZb3UgY2FuIHVzZSBsaW5lIGJyZWFrcywgZXN0aW1hdGluZyB0aGF0IGVhY2ggYXV0aG9yIG5hbWUgb2NjdXBpZXMKKyMuIGNhLiAxNiBzY3JlZW4gY29sdW1ucyBhbmQgdGhhdCBhIHNjcmVlbiBsaW5lIGhhcyBjYS4gODAgY29sdW1ucy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjExNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorIiVzLCAlcywgJXMsIGFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzoxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyIlcywgJXMsICVzLCAlcyxcbiIKKyJhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6MTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiJXMsICVzLCAlcywgJXMsXG4iCisiJXMsIGFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzoxNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyIlcywgJXMsICVzLCAlcyxcbiIKKyIlcywgJXMsIGFuZCBvdGhlcnMuXG4iCittc2dzdHIgIiIKKworIzogbGliL3hhbGxvYy1kaWUuYzozNQorbXNnaWQgIm1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjIzNworbXNnaWQgIkRpc2sgSW1hZ2UiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjMzOCBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzoyNjEKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTI3MgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBvcGVuaW5nICVzOiAlcyIKK21zZ3N0ciAiJXMgpPKlqqG8pdel88PmpMulqKXpobw6ICVzIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6MzQ5IGxpYnBhcnRlZC9hcmNoL2dudS5jOjI3MQorIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBvcGVuICVzIHJlYWQtd3JpdGUgKCVzKS4gICVzIGhhcyBiZWVuIG9wZW5lZCByZWFkLW9ubHkuIgorbXNnc3RyICIiCisiJXMgpPLGyaTfvfGkrbLEx72kyr71wtaky6Wqobyl16XzpMekraTepLuk8yglcymhoyVzIKTPxsmk37n+pN+kzqTfssTHvaTKvvXC1iIKKyKkx6Wqobyl16XzpLWk7KTepLekv6GjIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6NDExIGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTQzMQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkdXJpbmcgc2VlayBmb3IgcmVhZCBvbiAlcyIKK21zZ3N0ciAiJXM6ICVzIKSrpOnGyaTfuf6k38PmpM6lt6G8pa+kx6WopemhvKSsyK/AuKS3pN6kt6S/oaMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzo0NDQgbGlicGFydGVkL2FyY2gvZ251LmM6NDQ5IGxpYnBhcnRlZC9hcmNoL2dudS5jOjU0OAorIzogbGlicGFydGVkL2FyY2gvZ251LmM6Njc2IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTM5MQorIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxNDY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGR1cmluZyByZWFkIG9uICVzIgorbXNnc3RyICIlczogJXMgpKuk6cbJpN+5/qTfw+aky6WopemhvKSsyK/AuKS3pN6kt6S/oaMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzo0ODAgbGlicGFydGVkL2FyY2gvZ251LmM6NTA5CisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjE1NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2FuJ3Qgd3JpdGUgdG8gJXMsIGJlY2F1c2UgaXQgaXMgb3BlbmVkIHJlYWQtb25seS4iCittc2dzdHIgIsbJpN+5/qTfpM6k36SsssTHvaTKpOikpqTLpaqhvKXXpfOktaTspMakpKTrpM6kx6GiJXOky73xpK2ks6ThpN6ku6TzoaMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzo0OTYgbGlicGFydGVkL2FyY2gvbGludXguYzoxNTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGR1cmluZyBzZWVrIGZvciB3cml0ZSBvbiAlcyIKK21zZ3N0ciAiJXM6ICVzIKTLvfGkraSzpN/D5qTOpbehvKWvpMelqKXpobykrMivwLikt6TepLekv6GjIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6NTMzIGxpYnBhcnRlZC9hcmNoL2dudS5jOjU4NSBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo2MzAKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjcwNyBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjE1MTcKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTYxMiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjE2ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZHVyaW5nIHdyaXRlIG9uICVzIgorbXNnc3RyICIlczogJXMgpMu98aStpLOk38PmpMulqKXpobykrMivwLikt6TepLekv6GjIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjYzIHBhcnRwcm9iZS9wYXJ0cHJvYmUuYzoxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5IGAlcyAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbT1BUSU9OXVxuIgorIiAgb3I6ICAlcyBERVZJQ0UgTUlOT1JcbiIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjcwCittc2dpZCAiIgorIkNsZWFyIHVudXNlZCBzcGFjZSBvbiBhIEZBVCBwYXJ0aXRpb24gKGEgR05VIFBhcnRlZCB0ZXN0aW5nIHRvb2wpLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6NzQKK21zZ2lkICIgICAgICAtLWhlbHAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0XG4iCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo3NQorbXNnaWQgIiAgICAgIC0tdmVyc2lvbiAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXRcbiIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjc3IHBhcnRwcm9iZS9wYXJ0cHJvYmUuYzoxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlJlcG9ydCBidWdzIHRvIDwlcz4uXG4iCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzoyODUKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIGZldyBhcmd1bWVudHMiCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzoyOTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyIKK21zZ3N0ciAiydTOyaXaobyluKSswr+kuaSupN6kuaGjIgorCisjOiBwYXJ0cHJvYmUvcGFydHByb2JlLmM6MTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbT1BUSU9OXSBbREVWSUNFXS4uLlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRwcm9iZS9wYXJ0cHJvYmUuYzoxNDIKK21zZ2lkICIiCisiSW5mb3JtIHRoZSBPUyBvZiBwYXJ0aXRpb24gdGFibGUgY2hhbmdlcy5cbiIKKyJcbiIKKyIgIC1kLCAtLW5vLXVwZGF0ZSAgZG9uJ3QgdXBkYXRlIHRoZSBrZXJuZWxcbiIKKyIgIC1zLCAtLXN1bW1hcnkgICAgcHJpbnQgYSBzdW1tYXJ5IG9mIGNvbnRlbnRzXG4iCisiICAtaCwgLS1oZWxwICAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0XG4iCisiICAtdiwgLS12ZXJzaW9uICAgIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0XG4iCittc2dzdHIgIiIKKworIzogcGFydHByb2JlL3BhcnRwcm9iZS5jOjE1MAorbXNnaWQgIiIKKyJcbiIKKyJXaXRoIG5vIERFVklDRSwgcHJvYmUgYWxsIHBhcnRpdGlvbnMuXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIG9wZW4gJXMuIgorbXNnc3RyICIlcyCk8rOrpLGk3qS7pPOhoyIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6MTE0Cittc2dpZCAiVW5hYmxlIHRvIHByb2JlIHN0b3JlLiIKK21zZ3N0ciAipcel0KWkpbmkzqXXpe2hvKXWpMu8usfUpLek3qS3pL+hoyIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6MzUyCittc2dpZCAiIgorIlRoZSBwYXJ0aXRpb24gdGFibGUgY2Fubm90IGJlIHJlLXJlYWQuICBUaGlzIG1lYW5zIHlvdSBuZWVkIHRvIHJlYm9vdCBiZWZvcmUgIgorIm1vdW50aW5nIGFueSBtb2RpZmllZCBwYXJ0aXRpb25zLiAgWW91IGFsc28gbmVlZCB0byByZWluc3RhbGwgeW91ciBib290ICIKKyJsb2FkZXIgYmVmb3JlIHlvdSByZWJvb3QgKHdoaWNoIG1heSByZXF1aXJlIG1vdW50aW5nIG1vZGlmaWVkIHBhcnRpdGlvbnMpLiAgIgorIkl0IGlzIGltcG9zc2libGUgZG8gYm90aCB0aGluZ3MhICBTbyB5b3UnbGwgbmVlZCB0byBib290IG9mZiBhIHJlc2N1ZSBkaXNrLCAiCisiYW5kIHJlaW5zdGFsbCB5b3VyIGJvb3QgbG9hZGVyIGZyb20gdGhlIHJlc2N1ZSBkaXNrLiAgUmVhZCBzZWN0aW9uIDQgb2YgdGhlICIKKyJQYXJ0ZWQgVXNlciBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiIgorIqWrobylzaXrpM+l0aG8pcalo6W3peel86XGobyl1qXrpM66xsbJpN+5/qTfpKykx6StpN6ku6TzpMekt6S/pM6kx6GiytG5uaTyssMiCisipKikv6XRobylxqWjpbel56XzpPIgbW91bnQgpLmk68GwpMu6xrWvxrCkuaTryazN16SspKKk6qTepLmho6TepL+horrGta/GsKS5pOsiCisiwbCky6XWobylyKXtobylwKTyusalpKXzpbmlyKG8peukuaTryazN16SspKKk6qTepLkopLOkzqSzpMikz6GiytG5uaS3pL+l0aG8IgorIqXGpaOlt6XnpfOkziBtb3VudCCkrMmszdekyKTKpOukq6TipLek7KTepLuk8ymho6THpOKkvaTspOmk8s6+yv3Gsbv+pMukz6THpK0iCisipN6ku6TzISCl7KW5pa2l5aG8pcelo6W5pa+k8rvIpMOkxqXWobylyKS3pMahoqXWobylyKXtobylwKTypKSk7KTKpKqkt6TGpK+kwCIKKyKktaSkoaOk6KTqvtykt6SkpLOkyKTPIFBhcnRlZCCkzqXmobyltqXJpa2l5aXhpfOlyKTONL7PpPLGyaTzpMekr6TApLWkpKGjIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzozNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBwYXJ0aXRpb24gdGFibGUgb24gJXMgY2Fubm90IGJlIHJlLXJlYWQgKCVzKS4gIFRoaXMgbWVhbnMgdGhlIEh1cmQga25vd3MgIgorIm5vdGhpbmcgYWJvdXQgYW55IG1vZGlmaWNhdGlvbnMgeW91IG1hZGUuICBZb3Ugc2hvdWxkIHJlYm9vdCB5b3VyIGNvbXB1dGVyICIKKyJiZWZvcmUgZG9pbmcgYW55dGhpbmcgd2l0aCAlcy4iCittc2dzdHIgIiIKKyKlq6G8pc2l66TPICVzIKTOpdGhvKXGpaOlt6XnpfOlxqG8pdal66TOxuLNxqTyusbGyaTfuf6k36THpK2k3qS7pPMoJXMpoaOks6TsIgorIqTPIEh1cmQgpM+koqTKpL+krLnUpMOkv8rRubmk8rTYw86kt6TGpKSkyqSkpLOkyKTysNXMo6S3pMakpKTepLmhoyVzIKTLwtCkt6TGIgorIrK/pKvB4LrupPKkuaTrwbCky6WzpfOl1KXlobylv6Tyusa1r8awpLmk66TZpK2kx6S5oaMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjM4MCBwYXJ0ZWQvcGFydGVkLmM6MjQ0MworbXNnaWQgIiIKKyJZb3Ugc2hvdWxkIHJlaW5zdGFsbCB5b3VyIGJvb3QgbG9hZGVyIGJlZm9yZSByZWJvb3RpbmcuICBSZWFkIHNlY3Rpb24gNCBvZiAiCisidGhlIFBhcnRlZCBVc2VyIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorbXNnc3RyICIiCisiusa1r8awpLmk68GwpMul1qG8pcil7aG8pcCk8qSkpOykyqSqpLmk2aStpMekuaGjvty62aTPIFBhcnRlZCCl5qG8pbalyaWtpeWl4SIKKyKl86XIpM40vs+k8sbJpPOkx6SvpMCktaSkoaMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjc3MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB0cnlpbmcgdG8gc3luYyAlcyB0byBkaXNrIgorbXNnc3RyICIlczogJXMgpPLGsbT8w+aky6WopemhvKSsyK/AuKS3pN6kt6S/oaMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6NDA4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzdGF0IGRldmljZSAlcyAtICVzLiIKK21zZ3N0ciAipcel0KWkpbkgJXMgpPLEtKTZpOmk7KTepLuk8zogJXMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6NTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgZGV0ZXJtaW5lIHNlY3RvciBzaXplIGZvciAlczogJXMuXG4iCisiVXNpbmcgdGhlIGRlZmF1bHQgc2VjdG9yIHNpemUgKCVsbGQpLiIKK21zZ3N0ciAiIgorIiVzIKTOpbulr6W/pbWlpKW6pKy36MTqpMekraTepLuk8zogJXNcbiIKKyKlx6XVpaml66XIpM6lu6Wvpb+ltaWkpbogKCVsbGQpIKTyu8ikpKTepLmhoyIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo1MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkRldmljZSAlcyBoYXMgYSBsb2dpY2FsIHNlY3RvciBzaXplIG9mICVsbGQuICBOb3QgYWxsIHBhcnRzIG9mIEdOVSBQYXJ0ZWQgIgorInN1cHBvcnQgdGhpcyBhdCB0aGUgbW9tZW50LCBhbmQgdGhlIHdvcmtpbmcgY29kZSBpcyBISUdITFkgRVhQRVJJTUVOVEFMLlxuIgorbXNnc3RyICIiCisiJXMgpM4gz8DN/aW7pa+lv6W1paSluqSsICVsbGQgpMekuaGjpKSk3qTOpMiks6TtIEdOVSBQYXJ0ZWQgpM/BtKTGpM61oce9pMukqiIKKyKkpKTGoaKks6TOpbWlpKW6pPKltaXdobylyKS3pMakpKTrpO+ksaTHpM+kyqSvoaKw7LH+xrC67qS5pOu+7LnnpMek4qTepMik4qTLIgorIsawuu6kuaTrpMikz7jCpOqk3qS7pPOho1xuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjU3OQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZGV0ZXJtaW5lIHRoZSBzaXplIG9mICVzICglcykuIgorbXNnc3RyICIlcyCkzqW1paSluqTyt+jE6qTHpK2k3qS7pPMoJXMpIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjY2OAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZ2V0IGlkZW50aXR5IG9mIGRldmljZSAlcyAtICVzIgorbXNnc3RyICKlx6XQpaSluSAlcyCkziBpZGVudGl0eSCk8rzoxsCkx6StpN6ku6TzOiAlcyIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo2NzcKK21zZ2lkICJHZW5lcmljIElERSIKK21zZ3N0ciAisOzIzMWqpMogSURFIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRGV2aWNlICVzIGhhcyBtdWx0aXBsZSAoJWQpIGxvZ2ljYWwgc2VjdG9ycyBwZXIgcGh5c2ljYWwgc2VjdG9yLlxuIgorIkdOVSBQYXJ0ZWQgc3VwcG9ydHMgdGhpcyBFWFBFUklNRU5UQUxMWSBmb3Igc29tZSBzcGVjaWFsIGRpc2sgbGFiZWwvZmlsZSAiCisic3lzdGVtIGNvbWJpbmF0aW9ucywgZS5nLiBHUFQgYW5kIGV4dDIvMy5cbiIKKyJQbGVhc2UgY29uc3VsdCB0aGUgd2ViIHNpdGUgZm9yIHVwLXRvLWRhdGUgaW5mb3JtYXRpb24uIgorbXNnc3RyICIiCisipcel0KWkpbkgJXMgpMukz6GiyqrN/aW7pa+lv7DspMSky6TEpK3Ko7/0ICglZKW7pa+lvykgpM7PwM39pbulr6W/pKykoqTqpN4iCisipLmho1xuIgorIkdOVSBQYXJ0ZWQgpM+hoqSipOvGw8TqpM6lx6Wjpbmlr6Xppdml66TIpdWloaWkpeult6W5pcal4KTOwcik37nnpO+ku6TLpMSkpCIKKyKkxqGipLOkzqTopKakyr7sueek8qHWvMK4s8WqpMuh16W1pd2hvKXIpLekxqSkpN6kuaGjzuOkqKTQoaJHUFQgpMggZXh0Mi8zIKTIIgorIqSkpMOkv8HIpN+556TvpLukx6S5oaNcbiIKKyK6x7+3pM6+8MrzpM8gd2ViIKW1paSlyKTypLTN96SvpMCktaSkoaMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6ODczCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGluaXRpYWxpc2luZyBTQ1NJIGRldmljZSAlcyAtICVzIgorbXNnc3RyICJTQ1NJIKXHpdClpKW5ICVzIKTOvem0/LK9pMu8usfUpLek3qS3pL86ICVzIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjkyOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGRldmljZSAlcyBoYXMgemVybyBsZW5ndGgsIGFuZCBjYW4ndCBwb3NzaWJseSBzdG9yZSBhIGZpbGUgc3lzdGVtIG9yICIKKyJwYXJ0aXRpb24gdGFibGUuICBQZXJoYXBzIHlvdSBzZWxlY3RlZCB0aGUgd3JvbmcgZGV2aWNlPyIKK21zZ3N0ciAiIgorIqXHpdClpKW5ICVzIKTOxLmktaSsIDAgpMqkzqTHoaKl1aWhpaSl66W3pbmlxqXgpOSl0aG8pcalo6W3peel86XGobyl1qXrpPK1rc+/IgorIqTHpK2k3qS7pPOho6XHpdClpKW5pM7BqsLypPK01rDjpMOkxqSkpMqkpKSrs87Hp6S3pMakr6TApLWkpKGjIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjEwMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVuYWJsZSB0byBkZXRlcm1pbmUgZ2VvbWV0cnkgb2YgZmlsZS9kZXZpY2UgJXMuICBZb3Ugc2hvdWxkIG5vdCB1c2UgUGFydGVkICIKKyJ1bmxlc3MgeW91IFJFQUxMWSBrbm93IHdoYXQgeW91J3JlIGRvaW5nISIKK21zZ3N0ciAiIgorIqXVpaGlpKXrpN6kv6TPpcel0KWkpbkgJXMgpM4gZ2VvbWV0cnkgpPK36MTqpMekraTepLuk86GjvKvKrKTHsr+k8qS3pMakpKTrpKsiCisipOikr839svKkt6TGpKSkyqSxpOyk0CBQYXJ0ZWQgpPK7yKSmpNmkraTHpM+koqTqpN6ku6TzoaMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTExMAorbXNnaWQgIkRBQzk2MCBSQUlEIGNvbnRyb2xsZXIiCittc2dzdHIgIkRBQzk2MCBSQUlEIKWzpfOlyKXtobyl6SIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTE1Cittc2dpZCAiUHJvbWlzZSBTWDggU0FUQSBEZXZpY2UiCittc2dzdHIgIlByb21pc2UgU1g4IFNBVEEgpcel0KWkpbkiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTEyMAorbXNnaWQgIklCTSBTMzkwIERBU0QgZHJpdmUiCittc2dzdHIgIklCTSBTMzkwIERBU0Qgpcml6aWkpdYiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTEyNQorbXNnaWQgIklCTSBpU2VyaWVzIFZpcnR1YWwgREFTRCIKK21zZ3N0ciAiSUJNIGlTZXJpZXMgVmlydHVhbCBEQVNEIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExMzAKK21zZ2lkICJDb21wYXEgU21hcnQgQXJyYXkiCittc2dzdHIgIkNvbXBhcSBTbWFydCBBcnJheSIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTM1Cittc2dpZCAiQVRBUkFJRCBDb250cm9sbGVyIgorbXNnc3RyICJBVEEgUkFJRCCls6Xzpcil7aG8pekiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTE0MAorbXNnaWQgIkkyTyBDb250cm9sbGVyIgorbXNnc3RyICJJMk8gpbOl86XIpe2hvKXpIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExNDUKK21zZ2lkICJVc2VyLU1vZGUgTGludXggVUJEIgorbXNnc3RyICJVc2VyLU1vZGUgTGludXggVUJEIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExNTYKK21zZ2lkICJMaW51eCBkZXZpY2UtbWFwcGVyIgorbXNnc3RyICJMaW51eCBkZXZpY2UtbWFwcGVyIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExNjIKK21zZ2lkICJVbmtub3duIgorbXNnc3RyICLJ1MzAIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExNjkKK21zZ2lkICJwZWRfZGV2aWNlX25ldygpICBVbnN1cHBvcnRlZCBkZXZpY2UgdHlwZSIKK21zZ3N0ciAicGVkX2RldmljZV9uZXcoKSAgpbWl3aG8pciktaTspMakpKTKpKS8787gpM6lx6XQpaSluaTHpLmhoyIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoyMDgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFcnJvciBpbmZvcm1pbmcgdGhlIGtlcm5lbCBhYm91dCBtb2RpZmljYXRpb25zIHRvIHBhcnRpdGlvbiAlcyAtLSAlcy4gIFRoaXMgIgorIm1lYW5zIExpbnV4IHdvbid0IGtub3cgYWJvdXQgYW55IGNoYW5nZXMgeW91IG1hZGUgdG8gJXMgdW50aWwgeW91IHJlYm9vdCAtLSAiCisic28geW91IHNob3VsZG4ndCBtb3VudCBpdCBvciB1c2UgaXQgaW4gYW55IHdheSBiZWZvcmUgcmVib290aW5nLiIKK21zZ3N0ciAiIgorIqXRobylxqWjpbel56XzICVzIKTOytG5uaTypauhvKXNpeuky8XBpKik67rdpMulqKXpobykrMivwLikt6TepLekvyAtLSAlc6GjIgorIqWrobylzaXrpM8gJXMgpMvC0KS3pMakyqS1pOykv8rRubmk8rrGta/GsKS5pOuk3qTHtNjDzqS3pN6ku6TzpM6kx6GipLOkzqXRobwiCisipcalo6W3peel86TyIG1vdW50IKS3pOikpqTIpLekv6TqoaKkyqTzpOmkq6TOweC67qTypLmk2aStpMekz6SipOqk3qS7pPOhoyIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoyMjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJwYXJ0ZWQgd2FzIHVuYWJsZSB0byByZS1yZWFkIHRoZSBwYXJ0aXRpb24gdGFibGUgb24gJXMgKCVzKS4gIFRoaXMgbWVhbnMgIgorIkxpbnV4IHdvbid0IGtub3cgYW55dGhpbmcgYWJvdXQgdGhlIG1vZGlmaWNhdGlvbnMgeW91IG1hZGUuICIKK21zZ3N0ciAiIgorInBhcnRlZCCkzyAlcyCkzqXRobylxqWjpbel56XzpcahvKXWpeukzsbizcak8rrGxsmk37n+pN+kx6StpN6ku6TzKCVzKaGjpLOk7CIKKyKkzyBMaW51eCClq6G8pc2l66TPpKKkyqS/pKy51KTDpL/K0bm5pPK02MPOpLekxqSkpMqkpKSzpMik8rDVzKOkt6TGpKSk3qS5oaMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MjM2OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGtlcm5lbCB3YXMgdW5hYmxlIHRvIHJlLXJlYWQgdGhlIHBhcnRpdGlvbiB0YWJsZSBvbiAlcyAoJXMpLiAgVGhpcyBtZWFucyAiCisiTGludXggd29uJ3Qga25vdyBhbnl0aGluZyBhYm91dCB0aGUgbW9kaWZpY2F0aW9ucyB5b3UgbWFkZSB1bnRpbCB5b3UgIgorInJlYm9vdC4gIFlvdSBzaG91bGQgcmVib290IHlvdXIgY29tcHV0ZXIgYmVmb3JlIGRvaW5nIGFueXRoaW5nIHdpdGggJXMuIgorbXNnc3RyICIiCisipauhvKXNpeukzyAlcyCkzqXRobylxqWjpbel56XzpcahvKXWpeukzsbizcak8rrGxsmk37n+pN+kx6StpN6ku6TzKCVzKaGjpLOk7CIKKyKkz7rGta/GsKS5pOuk3qTHIExpbnV4IKWrobylzaXrpM+koqTKpL+krLnUpMOkv8rRubmk8rTYw86kt6TGpKSkyqSkpLOkyKTysNXMoyIKKyKkt6TGpKSk3qS5oaMlcyCky8LQpLekxrK/pKvB4LrupPKkuaTrwbCky6WzpfOl1KXlobylv6Tyusa1r8awpLmk66TZpK2kx6S5oaMiCisKKyM6IGxpYnBhcnRlZC9jcy9nZW9tLmM6MTYyCittc2dpZCAiQ2FuJ3QgaGF2ZSB0aGUgZW5kIGJlZm9yZSB0aGUgc3RhcnQhIgorbXNnc3RyICK9qs67sMzD1qTys6u7z7DMw9ak8rHbpKikxsawpKukuaSzpMikz6THpK2k3qS7pPOhoyIKKworIzogbGlicGFydGVkL2NzL2dlb20uYzoxNjkKK21zZ2lkICJDYW4ndCBoYXZlIGEgcGFydGl0aW9uIG91dHNpZGUgdGhlIGRpc2shIgorbXNnc3RyICKlx6Wjpbmlr6TOs7DCpqTLpdGhvKXGpaOlt6XnpfOkz7rupOyk3qS7pPOhoyIKKworIzogbGlicGFydGVkL2NzL2dlb20uYzozNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXR0ZW1wdCB0byB3cml0ZSBzZWN0b3JzICVsZC0lbGQgb3V0c2lkZSBvZiBwYXJ0aXRpb24gb24gJXMuIgorbXNnc3RyICIiCisivfGkrbn+pOKkpqTIpLekv6W7pa+lvyAoJWxkLSVsZCkgpM8gJXMgvuWkzqXRobylxqWjpbel56XzpM6zsKTLpKKk6qTepLmhoyIKKworIzogbGlicGFydGVkL2NzL2dlb20uYzo0MDYgbGlicGFydGVkL2ZzL2xpbnV4X3N3YXAvbGludXhfc3dhcC5jOjQ3NQorbXNnaWQgImNoZWNraW5nIGZvciBiYWQgYmxvY2tzIgorbXNnc3RyICLJ1M7Jpdal7aXDpa+k8qXBpaelw6Wvw+YiCisKKyM6IGxpYnBhcnRlZC9kZWJ1Zy5jOjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWNrdHJhY2UgaGFzICVkIGNhbGxzIG9uIHN0YWNrOlxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9kZWJ1Zy5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJBc3NlcnRpb24gKCVzKSBhdCAlczolZCBpbiBmdW5jdGlvbiAlcygpIGZhaWxlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIG9wZW4gJXMgLSB1bnJlY29nbmlzZWQgZGlzayBsYWJlbC4iCittc2dzdHIgIiVzIKTys6uksaTepLuk86Gjpcelo6W5pa+l6aXZpeukrMenvLGkx6StpN6ku6TzoaMiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6NDcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGlzIGxpYnBhcnRlZCBkb2Vzbid0IGhhdmUgd3JpdGUgc3VwcG9ydCBmb3IgJXMuICBQZXJoYXBzIGl0IHdhcyBjb21waWxlZCAiCisicmVhZC1vbmx5LiIKK21zZ3N0ciAiIgorIrvIzdGkt6TGpKSk6yBsaWJwYXJ0ZWQgpM8gJXMgpM698aStpLOk36TypbWl3aG8pcikt6TGpKSk3qS7pPOho8bJpN+5/qTfwOzN0aTHIgorIqWzpfOl0aWkpeuktaTspMakpKTrpMi716TvpOyk3qS5oaMiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6NTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhcnRpdGlvbiAlZCBpcyAlcywgYnV0IHRoZSBmaWxlIHN5c3RlbSBpcyAlcy4iCittc2dzdHIgIqXRobylxqWjpbel56XzICVkIKTPICVzIKTHpKKk66TOpMuhoqXVpaGlpKXrpbeluaXGpeCkzyAlcyCkx6S5oaMiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTA3NQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkaXNrIGxhYmVscyBkbyBub3Qgc3VwcG9ydCBleHRlbmRlZCBwYXJ0aXRpb25zLiIKK21zZ3N0ciAiJXMgpM6lx6Wjpbmlr6Xppdml66TPs8jEpaXRobylxqWjpbel56XzpPKltaXdobylyKS3pMakpKTepLuk86GjIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE2MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZGlzayBsYWJlbHMgZG9uJ3Qgc3VwcG9ydCBsb2dpY2FsIG9yIGV4dGVuZGVkIHBhcnRpdGlvbnMuIgorbXNnc3RyICIiCisiJXMgpM6lx6Wjpbmlr6Xppdml66TPz8DN/aXRobylxqWjpbel56XzpOSzyMSlpdGhvKXGpaOlt6XnpfOk8qW1pd2hvKXIpLekxqTepLsiCisipPMiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTY0NworbXNnaWQgIlRvbyBtYW55IHByaW1hcnkgcGFydGl0aW9ucy4iCittc2dzdHIgIqXXpemlpKXepeql0aG8pcalo6W3peel86Sswr+kuaSupN6kuaGjIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE2NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbid0IGFkZCBhIGxvZ2ljYWwgcGFydGl0aW9uIHRvICVzLCBiZWNhdXNlIHRoZXJlIGlzIG5vIGV4dGVuZGVkIHBhcnRpdGlvbi4iCittc2dzdHIgIrPIxKWl0aG8pcalo6W3peel86SspMqkpKTOpMehos/Azf2l0aG8pcalo6W3peel86TyICVzIKTLuu6k7KTepLuk86GjIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE2ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2FuJ3QgaGF2ZSBtb3JlIHRoYW4gb25lIGV4dGVuZGVkIHBhcnRpdGlvbiBvbiAlcy4iCittc2dzdHIgIiVzIKTLpM8gMSC4xKS3pKuzyMSlpdGhvKXGpaOlt6XnpfOk8rrupOyk3qS7pPOhoyIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNjkwCittc2dpZCAiQ2FuJ3QgaGF2ZSBsb2dpY2FsIHBhcnRpdGlvbnMgb3V0c2lkZSBvZiB0aGUgZXh0ZW5kZWQgcGFydGl0aW9uLiIKK21zZ3N0ciAiz8DN/aXRobylxqWjpbel56XzpPKzyMSlpdGhvKXGpaOlt6XnpfOkzrOwpMukz7v9pMak3qS7pPOhoyIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbid0IGhhdmUgYSBsb2dpY2FsIHBhcnRpdGlvbiBvdXRzaWRlIG9mIHRoZSBleHRlbmRlZCBwYXJ0aXRpb24gb24gJXMuIgorbXNnc3RyICIlcyCkzrPIxKWl0aG8pcalo6W3peel86TOs7Cky8/Azf2l0aG8pcalo6W3peel86TPuu6k7KTepLuk86GjIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE3MjUgbGlicGFydGVkL2Rpc2suYzoxNzc5IGxpYnBhcnRlZC9kaXNrLmM6MTk0NQorbXNnaWQgIkNhbid0IGhhdmUgb3ZlcmxhcHBpbmcgcGFydGl0aW9ucy4iCittc2dzdHIgIr3FpMqk6qTOpKKk66XRobylxqWjpbel56XzpM+7/aTGpN6ku6TzoaMiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTczMworbXNnaWQgIkNhbid0IGhhdmUgYSBwcmltYXJ5IHBhcnRpdGlvbiBpbnNpZGUgYW4gZXh0ZW5kZWQgcGFydGl0aW9uLiIKK21zZ3N0ciAis8jEpaXRobylxqWjpbel56XzxuKky6XXpemlpKXepeql0aG8pcalo6W3peel86TPuu6k7KTepLuk86GjIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNDAKK21zZ2lkICJtZXRhZGF0YSIKK21zZ3N0ciAipeGlv77wyvMiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE0MgorbXNnaWQgImZyZWUiCittc2dzdHIgIrb1pK0iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE0NCBwYXJ0ZWQvdWkuYzoxMTY5IHBhcnRlZC91aS5jOjExOTcKK21zZ2lkICJleHRlbmRlZCIKK21zZ3N0ciAis8jEpSIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTQ2IHBhcnRlZC91aS5jOjExNzMgcGFydGVkL3VpLmM6MTIwMQorbXNnaWQgImxvZ2ljYWwiCittc2dzdHIgIs/Azf0iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE0OCBwYXJ0ZWQvdWkuYzoxMTY1IHBhcnRlZC91aS5jOjExOTMKK21zZ2lkICJwcmltYXJ5IgorbXNnc3RyICKl16XppaSl3qXqIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNjQKK21zZ2lkICJib290IgorbXNnc3RyICJib290IgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNjYKK21zZ2lkICJyb290IgorbXNnc3RyICJyb290IgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNjgKK21zZ2lkICJzd2FwIgorbXNnc3RyICJzd2FwIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNzAKK21zZ2lkICJoaWRkZW4iCittc2dzdHIgImhpZGRlbiIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTcyCittc2dpZCAicmFpZCIKK21zZ3N0ciAicmFpZCIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTc0Cittc2dpZCAibHZtIgorbXNnc3RyICJsdm0iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE3NgorbXNnaWQgImxiYSIKK21zZ3N0ciAibGJhIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNzgKK21zZ2lkICJocC1zZXJ2aWNlIgorbXNnc3RyICJocC1zZXJ2aWNlIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxODAKK21zZ2lkICJwYWxvIgorbXNnc3RyICJwYWxvIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxODIKK21zZ2lkICJwcmVwIgorbXNnc3RyICJwcmVwIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxODQKK21zZ2lkICJtc2Z0cmVzIgorbXNnc3RyICJtc2Z0cmVzIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBwYXJ0aXRpb24gZmxhZywgJWQuIgorbXNnc3RyICIlZCCkz8nUzMCkyqXRobylxqWjpbel56XzpdWl6aWwpMekuaGjIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6NzgKK21zZ2lkICJJbmZvcm1hdGlvbiIKK21zZ3N0ciAixMzDziIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjc5Cittc2dpZCAiV2FybmluZyIKK21zZ3N0ciAit9m58CIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjgwCittc2dpZCAiRXJyb3IiCittc2dzdHIgIqWopemhvCIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjgxCittc2dpZCAiRmF0YWwiCittc2dzdHIgIsPXzL/FqqWopemhvCIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjgyCittc2dpZCAiQnVnIgorbXNnc3RyICKl0KWwIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODMKK21zZ2lkICJObyBJbXBsZW1lbnRhdGlvbiIKK21zZ3N0ciAizKS8wsH1IgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODcKK21zZ2lkICJGaXgiCittc2dzdHIgIr2kwLUiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4OAorbXNnaWQgIlllcyIKK21zZ3N0ciAipM+kpChZKSIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjg5Cittc2dpZCAiTm8iCittc2dzdHIgIqSkpKSkqChOKSIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjkwCittc2dpZCAiT0siCittc2dzdHIgIk9LIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6OTEKK21zZ2lkICJSZXRyeSIKK21zZ3N0ciAipOSk6qTKpKqktyhSKSIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjkyCittc2dpZCAiSWdub3JlIgorbXNnc3RyICLMtbvrKEkpIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6OTMKK21zZ2lkICJDYW5jZWwiCittc2dzdHIgIrzovsMoQykiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkEgYnVnIGhhcyBiZWVuIGRldGVjdGVkIGluIEdOVSBQYXJ0ZWQuICBSZWZlciB0byB0aGUgd2ViIHNpdGUgb2YgcGFydGVkICIKKyJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvcGFydGVkL3BhcnRlZC5odG1sIGZvciBtb3JlIGluZm9ybWF0aW9ucyBvZiB3aGF0ICIKKyJjb3VsZCBiZSB1c2VmdWwgZm9yIGJ1ZyBzdWJtaXR0aW5nISAgUGxlYXNlIGVtYWlsIGEgYnVnIHJlcG9ydCB0byBidWctIgorInBhcnRlZEBnbnUub3JnIGNvbnRhaW5pbmcgYXQgbGVhc3QgdGhlIHZlcnNpb24gKCVzKSBhbmQgdGhlIGZvbGxvd2luZyAiCisibWVzc2FnZTogICIKK21zZ3N0ciAiIgorIkdOVSBwYXJ0ZWQgpMul0KWwpKy4q6TEpKuk6qTepLekv6GjaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3BhcnRlZC9wYXJ0ZWQuIgorImh0bWwgpPK4q6TGoaKl0KWwpeyl3aG8pciky8mszdekyr7wyvOk8sbApMakr6TApLWkpKGjYnVnLXBhcnRlZEBnbnUub3JnIKTLICIKKyJ2ZXJzaW9uKCVzKSCkyLDKsrykzqXhpcOlu6G8pbik8rTepOGkxqXhobyl66THwfekw6TGpK+kwKS1pKQ6ICIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzozODQKK21zZ2lkICJDb3VsZCBub3QgZGV0ZWN0IGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAipdWloaWkpeult6W5pcal4KTyuKG90KTHpK2k3qS7pPOhoyIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzozOTUKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gaXMgYmlnZ2VyIHRoYW4gaXRzIHZvbHVtZSEiCittc2dzdHIgIqXVpaGlpKXrpbeluaXGpeCkrKXcpeql5aG8peCk6KTqpOLC56StpKSkx6S5ISIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo0MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VwcG9ydCBmb3Igb3BlbmluZyAlcyBmaWxlIHN5c3RlbXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIqXVpaGlpKXrpbeluaXGpeAoJXMppM6lqqG8pdel86TPzKS8wsH1pMekuaGjIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjQ0NQorIywgYy1mb3JtYXQKK21zZ2lkICJTdXBwb3J0IGZvciBjcmVhdGluZyAlcyBmaWxlIHN5c3RlbXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIqXVpaGlpKXrpbeluaXGpeAoJXMppM667sCupM/MpLzCwfWkx6S5oaMiCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnQgZm9yIGNoZWNraW5nICVzIGZpbGUgc3lzdGVtcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAipdWloaWkpeult6W5pcal4Cglcymky8LQpLmk66XBpaelw6WvpM/MpLzCwfWkx6S5oaMiCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NTcxCittc2dpZCAicmF3IGJsb2NrIGNvcHlpbmciCittc2dzdHIgIqXWpe2lw6WvpPKkvaTOpN6k3qWzpdShvMPmIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjU4MgorbXNnaWQgImdyb3dpbmcgZmlsZSBzeXN0ZW0iCittc2dzdHIgIqXVpaGlpKXrpbeluaXGpeCk8sLnpK2kr6S3pMakpKTepLkiCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NjIyCittc2dpZCAiQ2FuJ3QgY29weSBvbnRvIGFuIG92ZXJsYXBwaW5nIHBhcnRpdGlvbi4iCittc2dzdHIgIr3FpMqk6qTOpKKk66XRobylxqWjpbel56XzpMukz6WzpdShvKTHpK2k3qS7pPOhoyIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo2NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkRpcmVjdCBzdXBwb3J0IGZvciBjb3B5aW5nIGZpbGUgc3lzdGVtcyBpcyBub3QgeWV0IGltcGxlbWVudGVkIGZvciAlcy4gICIKKyJIb3dldmVyLCBzdXBwb3J0IGZvciByZXNpemluZyBpcyBpbXBsZW1lbnRlZC4gIFRoZXJlZm9yZSwgdGhlIGZpbGUgc3lzdGVtICIKKyJjYW4gYmUgY29waWVkIGlmIHRoZSBuZXcgcGFydGl0aW9uIGlzIGF0IGxlYXN0IGFzIGJpZyBhcyB0aGUgb2xkIG9uZS4gIFNvLCAiCisiZWl0aGVyIHNocmluayB0aGUgcGFydGl0aW9uIHlvdSBhcmUgdHJ5aW5nIHRvIGNvcHksIG9yIGNvcHkgdG8gYSBiaWdnZXIgIgorInBhcnRpdGlvbi4iCittc2dzdHIgIiIKKyIlcyCkzqXVpaGlpKXrpbeluaXGpeCkzqWzpdShvKTOxL7A3MWqpMq8wsH1pM+k3qTApLWk7KTGpKSk3qS7pPOho7+3pLekpKXRobwiCisipcalo6W3peel86SsuMWkpKTOpMi+r6TKpK+kyKTixrGkuKSvpOmkpKTOwuekraS1pMekoqTspNCls6XUobykx6StpN6kuaGjpeqltSIKKyKlpKW6pM+8wsH1pLWk7KTGpKSk3qS5pM6kx6GipdGhvKXGpaOlt6XnpfOk8r6upLWkr6S3pMakq6TppbOl1KG8pLekxqTfpOukq6GiIgorIqTipMOkyMLnpK2kpKXRobylxqWjpbel56XzpMuls6XUobykt6TGpK+kwKS1pKShoyIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo2NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VwcG9ydCBmb3IgY29weWluZyAlcyBmaWxlIHN5c3RlbXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIqXVpaGlpKXrpbeluaXGpeAoJXMppM6ls6XUobykz8ykvMLB9aTHpLmhoyIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo2OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VwcG9ydCBmb3IgcmVzaXppbmcgJXMgZmlsZSBzeXN0ZW1zIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICKl1aWhpaSl66W3pbmlxqXgKCVzKaTOpeqltaWkpbqkz8ykvMLB9aTHpLmhoyIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6MzE1Cittc2dpZCAiY3JlYXRpbmciCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDAyCisjLCBmdXp6eQorbXNnaWQgIlRoZSBmaWxlIHN5c3RlbSBpcyBpbiBhbiBpbnZhbGlkIHN0YXRlLiAgUGVyaGFwcyBpdCBpcyBtb3VudGVkPyIKK21zZ3N0ciAipdWloaWkpeult6W5pcal4KSspdyl6qXlobyl4KTopOqk4sLnpK2kpKTHpLkhIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0MTAKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gaXMgaW4gb2xkICh1bnJlc2l6ZWFibGUpIGZvcm1hdC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDE2Cittc2dpZCAiSW52YWxpZCBmcmVlIGJsb2NrcyBjb3VudC4gIFJ1biByZWlzZXJmc2NrIC0tY2hlY2sgZmlyc3QuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQzMQorIywgZnV6enkKK21zZ2lkICJjaGVja2luZyIKK21zZ3N0ciAiY2hlY2siCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQzNworbXNnaWQgIlJlaXNlcmZzIHRyZWUgc2VlbXMgdG8gYmUgY29ycnVwdGVkLiAgUnVuIHJlaXNlcmZzY2sgLS1jaGVjayBmaXJzdC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDQ5CisjLCBmdXp6eQorbXNnaWQgIiIKKyJUaGUgcmVpc2VyZnMgZmlsZSBzeXN0ZW0gcGFzc2VkIGEgYmFzaWMgY2hlY2suICBGb3IgYSBtb3JlIGNvbXByZWhlbnNpdmUgIgorImNoZWNrLCBydW4gcmVpc2VyZnNjayAtLWNoZWNrLiIKK21zZ3N0ciAiIgorIqSzpM4gZXh0MiCl1aWhpaSl66W3pbmlxqXgpM+0ysOxpMqlwaWnpcOlr6TypdGluaS3pN6kt6S/oaOktaTppMulwaWnpcOlr6S5pOsiCisipMukzyBlMmZzY2sgpPK7yKTDpMakr6TApLWkpKGjIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0NzQKKyMsIGZ1enp5Cittc2dpZCAiU29ycnksIGNhbid0IG1vdmUgdGhlIHN0YXJ0IG9mIHJlaXNlcmZzIHBhcnRpdGlvbnMgeWV0LiIKK21zZ3N0ciAiu8THsKTHpLmkrKGipN6kwCBleHQyIKXRobylxqWjpbel56XzpM6zq7vPsMzD1qTPsNzGsKTHpK2k3qS7pPOhoyIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDkwCittc2dpZCAiQ291bGRuJ3QgcmVvcGVuIGRldmljZSBhYnN0cmFjdGlvbiBsYXllciBmb3IgcmVhZC93cml0ZS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NTA4IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NTUyCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjI1MCBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjYyOQorbXNnaWQgInNocmlua2luZyIKK21zZ3N0ciAivcy+rsPmIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo1MjAKKyMsIGZ1enp5Cittc2dpZCAiZXhwYW5kaW5nIgorbXNnc3RyICK32bnwIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo1OTIKK21zZ2lkICJDb3VsZG4ndCBjcmVhdGUgcmVpc2VyZnMgZGV2aWNlIGFic3RyYWN0aW9uIGhhbmRsZXIuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjYwNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRGV2aWNlIGlzIHRvbyBzbWFsbCBmb3IgJWx1IGJsb2Nrcy4iCittc2dzdHIgImV4dDIgpMukuaTrpMukz6XVpaGlpKXrpbeluaXGpeCkrL6upLWkuaSupN6kuaGjIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo2MTUKK21zZ2lkICJjb3B5aW5nIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjY4MgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCByZXNvbHZlIHN5bWJvbCAlcy4gIEVycm9yOiAlcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NzA0Cittc2dpZCAiR05VIFBhcnRlZCBmb3VuZCBhbiBpbnZhbGlkIGxpYnJlaXNlcmZzIGxpYnJhcnkuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjcxNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiR05VIFBhcnRlZCBoYXMgZGV0ZWN0ZWQgbGlicmVpc2VyZnMgaW50ZXJmYWNlIHZlcnNpb24gbWlzbWF0Y2guICBGb3VuZCAlZC0lIgorImQsIHJlcXVpcmVkICVkLiBSZWlzZXJGUyBzdXBwb3J0IHdpbGwgYmUgZGlzYWJsZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYWl4LmM6MTM3CisjLCBmdXp6eQorbXNnaWQgIlN1cHBvcnQgZm9yIHJlYWRpbmcgQUlYIGRpc2sgbGFiZWxzIGlzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICKl1aWhpaSl66W3pbmlxqXgKCVzKaTOuu7ArqTPzKS8wsH1pMekuaGjIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2FpeC5jOjE0OAorIywgZnV6enkKK21zZ2lkICJTdXBwb3J0IGZvciB3cml0aW5nIEFJWCBkaXNrIGxhYmVscyBpcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAipdWloaWkpeult6W5pcal4CglcymkzrruwK6kz8ykvMLB9aTHpLmhoyIKKworIzogbGlicGFydGVkL2xhYmVscy9haXguYzoxNjEKKyMsIGZ1enp5Cittc2dpZCAiIgorIlN1cHBvcnQgZm9yIGFkZGluZyBwYXJ0aXRpb25zIHRvIEFJWCBkaXNrIGxhYmVscyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAipdWloaWkpeult6W5pcal4CglcymkzrruwK6kz8ykvMLB9aTHpLmhoyIKKworIzogbGlicGFydGVkL2xhYmVscy9haXguYzoxNzEKKyMsIGZ1enp5Cittc2dpZCAiIgorIlN1cHBvcnQgZm9yIGR1cGxpY2F0aW5nIHBhcnRpdGlvbnMgaW4gQUlYIGRpc2sgbGFiZWxzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICKl1aWhpaSl66W3pbmlxqXgKCVzKaTOuu7ArqTPzKS8wsH1pMekuaGjIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2FpeC5jOjE4OQorIywgZnV6enkKK21zZ2lkICIiCisiU3VwcG9ydCBmb3Igc2V0dGluZyBzeXN0ZW0gdHlwZSBvZiBwYXJ0aXRpb25zIGluIEFJWCBkaXNrIGxhYmVscyBpcyBub3QgIgorImltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIqXVpaGlpKXrpbeluaXGpeAoJXMppM667sCupM/MpLzCwfWkx6S5oaMiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYWl4LmM6MTk5CisjLCBmdXp6eQorbXNnaWQgIlN1cHBvcnQgZm9yIHNldHRpbmcgZmxhZ3MgaW4gQUlYIGRpc2sgbGFiZWxzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICKl1aWhpaSl66W3pbmlxqXgKCVzKaTOuu7ArqTPzKS8wsH1pMekuaGjIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2JzZC5jOjUwMSBsaWJwYXJ0ZWQvbGFiZWxzL2Rhc2QuYzo3NTUKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZG9zLmM6MTk3NCBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjc3MAorIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzoxNDQ4IGxpYnBhcnRlZC9sYWJlbHMvbG9vcC5jOjI0OAorIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoxNDA4IGxpYnBhcnRlZC9sYWJlbHMvcGM5OC5jOjc1OQorIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzoxMDQxIGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6NzA1Cittc2dpZCAiVW5hYmxlIHRvIHNhdGlzZnkgYWxsIGNvbnN0cmFpbnRzIG9uIHRoZSBwYXJ0aXRpb24uIgorbXNnc3RyICKks6TOpdGhvKXGpaOlt6XnpfOkx8G0pMakzsCpzPOk8sv+pL+ku6TepLuk86GjIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2JzZC5jOjUyNgorbXNnaWQgIlVuYWJsZSB0byBhbGxvY2F0ZSBhIGJzZCBkaXNrbGFiZWwgc2xvdC4iCittc2dzdHIgIkJTRKXHpaOluaWvpeml2aXrpM6luaXtpcOlyKTys87K3aTHpK2k3qS7pPOhoyIKKworIzogbGlicGFydGVkL2xhYmVscy9kYXNkLmM6MTY2CisjLCBmdXp6eQorbXNnaWQgIlVuYWJsZSB0byBkZXRlcm1pbmUgdGhlIGJsb2NrIHNpemUgb2YgdGhpcyBkYXNkIgorbXNnc3RyICIlcyCkzqW1paSluqTyt+jE6qTHpK2k3qS7pPMoJXMpIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rhc2QuYzo3ODEKKyMsIGZ1enp5Cittc2dpZCAiVW5hYmxlIHRvIGFsbG9jYXRlIGEgZGFzZCBkaXNrbGFiZWwgc2xvdCIKK21zZ3N0ciAiQlNEpcelo6W5pa+l6aXZpeukzqW5pe2lw6XIpPKzzsrdpMekraTepLuk86GjIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rvcy5jOjgyNworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHBhcnRpdGlvbiB0YWJsZSBvbiAlcyAtLSB3cm9uZyBzaWduYXR1cmUgJXguIgorbXNnc3RyICIiCisiJXMgpM6l0aG8pcalo6W3peel86XGobyl1qXrpKzJ1MC1pMekuaGjJXggpMikpKSmpbelsKXNpcGl46TPpKKk5KTepOqkx6S5oaMiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZG9zLmM6ODU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcGFydGl0aW9uIHRhYmxlIC0gcmVjdXJzaXZlIHBhcnRpdGlvbiBvbiAlcy4iCittc2dzdHIgIiIKKyKl0aG8pcalo6W3peel86XGobyl1qXrpKzJ1MC1pMekuaGjusa1osWqpMql0aG8pcalo6W3peel86SsICVzIKTLpKKk6qTepLmhoyIKKworIzogbGlicGFydGVkL2xhYmVscy9kb3MuYzoxMzE4Cittc2dpZCAiRXh0ZW5kZWQgcGFydGl0aW9ucyBjYW5ub3QgYmUgaGlkZGVuIG9uIG1zZG9zIGRpc2sgbGFiZWxzLiIKK21zZ3N0ciAiTVNET1Mgpcelo6W5pa+l6aXZpeukx7PIxKWl0aG8pcalo6W3peel86TPsaOku6TepLuk86GjIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rvcy5jOjE5NTgKK21zZ2lkICJQYXJ0ZWQgY2FuJ3QgcmVzaXplIHBhcnRpdGlvbnMgbWFuYWdlZCBieSBXaW5kb3dzIER5bmFtaWMgRGlzay4iCittc2dzdHIgIiIKKyKlwKWkpcql36XDpa+lx6Wjpbmlr6TLu8ik76TspMakpKTrpdGhvKXGpaOlt6XnpfOkzyBQYXJ0ZWQgpMekz6XqpbWlpKW6pMekraTeIgorIqS7pPOhoyIKKworIzogbGlicGFydGVkL2xhYmVscy9kdmguYzoxOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIG5vIGV4dGVuZGVkIHBhcnRpdGlvbiAodm9sdW1lIGhlYWRlciBwYXJ0aXRpb24pLiIKK21zZ3N0ciAiIgorIiVzIKTPsOykxKTis8jEpaXRobylxqWjpbel56Xzocql3KXqpeWhvKXgpdilw6XApdGhvKXGpaOlt6XnpfOhy6Tyu/2kw6TGpKSk3qS7IgorIqTzoaMiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6MzEzCittc2dpZCAiQ2hlY2tzdW0gaXMgd3JvbmcsIGluZGljYXRpbmcgdGhlIHBhcnRpdGlvbiB0YWJsZSBpcyBjb3JydXB0LiIKK21zZ3N0ciAipcGlp6XDpa+ltaXgpM7DzaSssOOkpKTepLmho6XRobylxqWjpbel56XzpcahvKXWpeukrLL1pOykxqSkpN6kuaGjIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjYxNgorbXNnaWQgIk9ubHkgcHJpbWFyeSBwYXJ0aXRpb25zIGNhbiBiZSByb290IHBhcnRpdGlvbnMuIgorbXNnc3RyICKl16XppaSl3qXqpdGhvKXGpaOlt6XnpfOkwKSxpKyl66G8pcil0aG8pcalo6W3peel86TLpMqk7KTepLmhoyIKKworIzogbGlicGFydGVkL2xhYmVscy9kdmguYzo2MzAKK21zZ2lkICJPbmx5IHByaW1hcnkgcGFydGl0aW9ucyBjYW4gYmUgc3dhcCBwYXJ0aXRpb25zLiIKK21zZ3N0ciAipdel6aWkpd6l6qXRobylxqWjpbel56XzpMCksaSspbml76XDpdel0aG8pcalo6W3peel86TLpMqk7KTepLmhoyIKKworIzogbGlicGFydGVkL2xhYmVscy9kdmguYzo2NDQKK21zZ2lkICJPbmx5IGxvZ2ljYWwgcGFydGl0aW9ucyBjYW4gYmUgYSBib290IGZpbGUuIgorbXNnc3RyICLPwM39pdGhvKXGpaOlt6XnpfOkwKSxpKyl1qG8pcil1aWhpaSl66TLpMqk7KTepLmhoyIKKworIzogbGlicGFydGVkL2xhYmVscy9kdmguYzo3MjEKK21zZ2lkICJPbmx5IGxvZ2ljYWwgcGFydGl0aW9ucyAoYm9vdCBmaWxlcykgaGF2ZSBhIG5hbWUuIgorbXNnc3RyICLG4qTLpdel6aWkpd6l6qXRobylxqWjpbel56XzpM+67qTspN6ku6TzoaM8IgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjgxMgorbXNnaWQgIlRvbyBtYW55IHByaW1hcnkgcGFydGl0aW9ucyIKK21zZ3N0ciAipdel6aWkpd6l6qXRobylxqWjpbel56XzpKzCv6S5pK6k3qS5oaMiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIG9wZW4gZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHNlZWsgZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHJlYWQgZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMTMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyB3cml0ZSBlcnJvclxuIgorIiVzXG4iCittc2dzdHIgIiVzOiAlcyCky73xpK2ks6Tfw+aky6WopemhvKSsyK/AuKS3pN6kt6S/oaMiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIElPQ1RMIGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBBUEkgdmVyc2lvbiBtaXNtYXRjaFxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgVW5zdXBwb3J0ZWQgZGlzayB0eXBlXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBVbnN1cHBvcnRlZCBkaXNrIGZvcm1hdFxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEzMAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIERpc2sgaW4gdXNlXG4iCisiJXNcbiIKK21zZ3N0ciAipcelo6W5pa8gJXM6ICVzXG4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIENvbmZpZyBmaWxlIHN5bnRheCBlcnJvclxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgVm9sdW1lIGxhYmVsIGlzIGNvcnJ1cHRlZC5cbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIGEgZGF0YSBzZXQgbmFtZSBpcyBjb3JydXB0ZWQuXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBzcGFjZSBhbGxvY2F0aW9uXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBkZXZpY2UgdmVyaWZpY2F0aW9uIGZhaWxlZFxuIgorIlRoZSBzcGVjaWZpZWQgZGV2aWNlIGlzIG5vdCBhIHZhbGlkIERBU0QgZGV2aWNlXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgRmF0YWwgZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6NDU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBjb250YWlucyBHUFQgc2lnbmF0dXJlcywgaW5kaWNhdGluZyB0aGF0IGl0IGhhcyBhIEdQVCB0YWJsZS4gIEhvd2V2ZXIsIGl0ICIKKyJkb2VzIG5vdCBoYXZlIGEgdmFsaWQgZmFrZSBtc2RvcyBwYXJ0aXRpb24gdGFibGUsIGFzIGl0IHNob3VsZC4gIFBlcmhhcHMgaXQgIgorIndhcyBjb3JydXB0ZWQgLS0gcG9zc2libHkgYnkgYSBwcm9ncmFtIHRoYXQgZG9lc24ndCB1bmRlcnN0YW5kIEdQVCBwYXJ0aXRpb24gIgorInRhYmxlcy4gIE9yIHBlcmhhcHMgeW91IGRlbGV0ZWQgdGhlIEdQVCB0YWJsZSwgYW5kIGFyZSBub3cgdXNpbmcgYW4gbXNkb3MgIgorInBhcnRpdGlvbiB0YWJsZS4gIElzIHRoaXMgYSBHUFQgcGFydGl0aW9uIHRhYmxlPyIKK21zZ3N0ciAiIgorIiVzIKTPIEdQVCClxqG8pdal66TOwri636TyvKikuSBHUFQgpM6lt6Wwpc2lwaXjpPK03qTzpMekpKTepLmkrKGiu/2kw6TGpKSk66TZIgorIqStuKuku6SrpLGkziBtc2RvcyCl0aG8pcalo6W3peel86XGobyl1qXrpPK7/aTDpMakpKTepLuk86GjpKqkvaTppK+y9aTspMakpKTrIgorIqTOpMekt6TnpKaho0dQVCCl0aG8pcalo6W3peel86XGobyl1qXrpPLN/bLypLekyqSkpdel7aWwpeml4KSssvWkt6TGpLek3qTDpL8iCisipM6kq6TipLek7KTepLuk86GjpKKk66SkpM+hokdQVCClxqG8pdal66TyvKuk6b7DpLekxqSkpMahom1zZG9zIKXRobylxqWjpbel5yIKKyKl86XGobyl1qXrpPK7yKTDpMakpKTrpM6kq6TipLek7KTepLuk86GjpLOkzqXGobyl1qXrpM8gR1BUIKXRobylxqWjpbel56XzpcahvCIKKyKl1qXrpMekuaSroakiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6NjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9ybWF0IG9mIHRoZSBHUFQgcGFydGl0aW9uIHRhYmxlIGlzIHZlcnNpb24gJXgsIHdoaWNoIGlzIG5ld2VyIHRoYW4gIgorIndoYXQgUGFydGVkIGNhbiByZWNvZ25pc2UuICBQbGVhc2UgdGVsbCB1cyEgIGJ1Zy1wYXJ0ZWRAZ251Lm9yZyIKK21zZ3N0ciAiIgorIkdQVCCl0aG8pcalo6W3peel86XGobyl1qXrpM6l1aWpobyl3qXDpcikzqXQobyluKXnpfOkrCAleCCkxyBwYXJ0ZWQgpM7N/bLypMciCisipK2k66TipM6k6KTqv7ekt6SkpMekuaGjIGJ1Zy1wYXJ0ZWRAZ251Lm9yZyCk3qTHyvO58KS3pMakr6TApLWkpKGjIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm90IGFsbCBvZiB0aGUgc3BhY2UgYXZhaWxhYmxlIHRvICVzIGFwcGVhcnMgdG8gYmUgdXNlZCwgeW91IGNhbiBmaXggdGhlIEdQVCAiCisidG8gdXNlIGFsbCBvZiB0aGUgc3BhY2UgKGFuIGV4dHJhICVsbHUgYmxvY2tzKSBvciBjb250aW51ZSB3aXRoIHRoZSBjdXJyZW50ICIKKyJzZXR0aW5nPyAiCittc2dzdHIgIiIKKyIlcyCkx834zdGyxMe9pMrOzrDopM6w7Mn0pKzN+M3RpLWk7KTGpKSk3qS7pPOho0dQVCCk8r2kwLWkt6TGwbSkxqTOzs6w6KTyzfjN0SIKKyKyxMe9pMukuaTrpKsoJWxsdSCl1qXtpcOlr8H9pKik3qS5KaGipLOkzqTepN6kx8KzudSkuaTrpLOkyKSspMekraTepLmkrKGipMmkpiIKKyKkt6TepLmkq6GpIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjgyNworbXNnaWQgIiIKKyJUaGUgYmFja3VwIEdQVCB0YWJsZSBpcyBub3QgYXQgdGhlIGVuZCBvZiB0aGUgZGlzaywgYXMgaXQgc2hvdWxkIGJlLiAgVGhpcyAiCisibWlnaHQgbWVhbiB0aGF0IGFub3RoZXIgb3BlcmF0aW5nIHN5c3RlbSBiZWxpZXZlcyB0aGUgZGlzayBpcyBzbWFsbGVyLiAgRml4LCAiCisiYnkgbW92aW5nIHRoZSBiYWNrdXAgdG8gdGhlIGVuZCAoYW5kIHJlbW92aW5nIHRoZSBvbGQgYmFja3VwKT8iCittc2dzdHIgIiIKKyKkoqTrpNmkrSBHUFQgpcahvKXWpeukzqXQpcOlr6WipcOl16Sspcelo6W5pa+kzrrHuOWky6SipOqk3qS7pPOho8K+pM4gT1MgpKwiCisipcelo6W5pa+kz6TipMOkyL6upLWkpKTipM6kwKTIu9ekw6TGpKSk66TOpKuk4qS3pOyk3qS7pPOho6XQpcOlr6WipcOl16Tyuse45SIKKyKky7v9pMOkxqStpMahyrjFpKSl0KXDpa+loqXDpdek8rrvvfykt6TGocu9pMn8pLek3qS5pKuhqSIKKworIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzo4NjIKK21zZ2lkICIiCisiVGhlIHByaW1hcnkgR1BUIHRhYmxlIGlzIGNvcnJ1cHQsIGJ1dCB0aGUgYmFja3VwIGFwcGVhcnMgT0ssIHNvIHRoYXQgd2lsbCBiZSAiCisidXNlZC4iCittc2dzdHIgIiIKKyKks6TOpdel6aWkpd6l6iBHUFQgpcahvKXWpeukz7L1pOykxqSkpN6kuaSsoaKl0KXDpa+loqXDpdekz8zkwuqkyqSkpOikpqTKpM4iCisipMehoqS9pMGk6aTyu8ikpKTepLmhoyIKKworIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzo4NzAKK21zZ2lkICIiCisiQm90aCB0aGUgcHJpbWFyeSBhbmQgYmFja3VwIEdQVCB0YWJsZXMgYXJlIGNvcnJ1cHQuICBUcnkgbWFraW5nIGEgZnJlc2ggIgorInRhYmxlLCBhbmQgdXNpbmcgUGFydGVkJ3MgcmVzY3VlIGZlYXR1cmUgdG8gcmVjb3ZlciBwYXJ0aXRpb25zLiIKK21zZ3N0ciAiIgorIqXXpemlpKXepeogR1BUIKXGobyl1qXrpMil0KXDpa+loqXDpdekzs6+yv2krLL1pOykxqSkpN6kuaGjv7ekv6TLpcahvKXWpeuk8rruIgorIqTqpMqkqqS3pMaholBhcnRlZCCkzr2kyfy1oce9pPLN0aSkpMal0aG8pcalo6W3peel86TOvaTJ/KTyu+6k36TepLmhoyIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoxODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBzaWduYXR1cmUgJXggZm9yIE1hYyBkaXNrIGxhYmVscy4iCittc2dzdHIgIk1hYyClx6Wjpbmlr6Xppdml66TOpbelsKXNpcGl4yAleCCkz8nUwLWkx6S5oaMiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6MjI2Cittc2dpZCAiUGFydGl0aW9uIG1hcCBoYXMgbm8gcGFydGl0aW9uIG1hcCBlbnRyeSEiCittc2dzdHIgIqXRobylxqWjpbel56Xzpd6lw6XXpMulqKXzpcil6qSspKKk6qTepLuk86GjIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyB0b28gc21hbGwgZm9yIGEgTWFjIGRpc2sgbGFiZWwhIgorbXNnc3RyICIlcyCkzyBNYWMgpcelo6W5pa+l6aXZpeuky6TPvq6ktaS5pK6k3qS5oaMiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIlBhcnRpdGlvbiAlZCBoYXMgYW4gaW52YWxpZCBzaWduYXR1cmUgJXguIgorbXNnc3RyICKl0aG8pcalo6W3peel8yAlZCCkzqW3pbClzaXBpeMgJXggpM/J1MC1pMekuaGjIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjU1MAorIywgYy1mb3JtYXQKK21zZ2lkICJQYXJ0aXRpb24gJWQgaGFzIGFuIGludmFsaWQgbGVuZ3RoIG9mIDAgYnl0ZXMhIgorbXNnc3RyICKl0aG8pcalo6W3peel8yAlZCCkzsS5pLWkrCAwIKTKpM6kz8nUwLWkx6S5oaMiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NTgwCittc2dpZCAiVGhlIGRhdGEgcmVnaW9uIGRvZXNuJ3Qgc3RhcnQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBwYXJ0aXRpb24uIgorbXNnc3RyICKlx6G8pb/OzrDopKyl0aG8pcalo6W3peel86TOs6u7z7DMw9akq6Tpu8+k3qTDpMak3qS7pPOhoyIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo1OTcKK21zZ2lkICJUaGUgYm9vdCByZWdpb24gZG9lc24ndCBzdGFydCBhdCB0aGUgc3RhcnQgb2YgdGhlIHBhcnRpdGlvbi4iCittc2dzdHIgIqXWobylyM7OsOikrKXRobylxqWjpbel56XzpM6zq7vPsMzD1qSrpOm7z6TepMOkxqTepLuk86GjIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjYxMQorbXNnaWQgIlRoZSBwYXJ0aXRpb24ncyBib290IHJlZ2lvbiBkb2Vzbid0IG9jY3VweSB0aGUgZW50aXJlIHBhcnRpdGlvbi4iCittc2dzdHIgIqXRobylxqWjpbel56XzpM6l1qG8pcjOzrDopKyhoqXRobylxqWjpbel56XzwbTCzqTywOrNraS3pMak3qS7pPOhoyIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo2MjIKK21zZ2lkICJUaGUgcGFydGl0aW9uJ3MgZGF0YSByZWdpb24gZG9lc24ndCBvY2N1cHkgdGhlIGVudGlyZSBwYXJ0aXRpb24uIgorbXNnc3RyICKl0aG8pcalo6W3peel86TOpcehvKW/zs6w6KSsoaKl0aG8pcalo6W3peel88G0ws6k8sDqza2kt6TGpN6ku6TzoaMiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6Njc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXZWlyZCBibG9jayBzaXplIG9uIGRldmljZSBkZXNjcmlwdG9yOiAlZCBieXRlcyBpcyBub3QgZGl2aXNpYmxlIGJ5IDUxMi4iCittc2dzdHIgIiIKKyKlx6XQpaSluaXHpaOluaWvpeql16W/pMu98aSkpMakoqTrpdal7aXDpa+ltaWkpbqkz6SqpKukt6SkpMekuaGjJWQgpdClpKXIpM8gIgorIjUxMiCkx7PkpOrA2qTspN6ku6TzoaMiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6Njg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZHJpdmVyIGRlc2NyaXB0b3Igc2F5cyB0aGUgcGh5c2ljYWwgYmxvY2sgc2l6ZSBpcyAlZCBieXRlcywgYnV0IExpbnV4ICIKKyJzYXlzIGl0IGlzICVkIGJ5dGVzLiIKK21zZ3N0ciAiIgorIqXJpemlpKXQpM/Kqs39pdal7aXDpa+ltaWkpbqkrCAlZCCl0KWkpcikx6SipOukyLjApMOkxqSkpN6kuaSsoaJMaW51eCCkzyAlZCAiCisipdClpKXIpMCkyLjApMOkxqSkpN6kuaGjIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjczNgorbXNnaWQgIk5vIHZhbGlkIHBhcnRpdGlvbiBtYXAgZm91bmQuIgorbXNnc3RyICLAtaS3pKSl0aG8pcalo6W3peel86XepcOl16SsuKukxKSrpOqk3qS7pPOhoyIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo3OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvbmZsaWN0aW5nIHBhcnRpdGlvbiBtYXAgZW50cnkgc2l6ZXMhICBFbnRyeSAxIHNheXMgaXQgaXMgJWQsIGJ1dCBlbnRyeSAlZCAiCisic2F5cyBpdCBpcyAlZCEiCittc2dzdHIgIiIKKyKl0aG8pcalo6W3peel86XepcOl16TOpail86XIpeqkzqW1paSluqSssOzD16S3pN6ku6TzoaOlqKXzpcil6iAxIKTLpOik7KTQICVkICIKKyKkx6S5pKyhoqWopfOlyKXqICVkIKTLpOik7KTQICVkIKTHpLmhoyIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo4MjIKK21zZ2lkICJXZWlyZCEgIFRoZXJlIGFyZSAyIHBhcnRpdGlvbnMgbWFwIGVudHJpZXMhIgorbXNnc3RyICKkqqSrpLekpKTHpLmho6XRobylxqWjpbel56Xzpd6lw6XXpail86XIpeqkrDKkxKSipOqk3qS5oaMiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6MTM0NworbXNnaWQgIiIKKyJDaGFuZ2luZyB0aGUgbmFtZSBvZiBhIHJvb3Qgb3Igc3dhcCBwYXJ0aXRpb24gd2lsbCBwcmV2ZW50IExpbnV4IGZyb20gIgorInJlY29nbmlzaW5nIGl0IGFzIHN1Y2guIgorbXNnc3RyICIiCisicm9vdCCky7vIpO+k7KTGpKSk66XRobylxqWjpbel56XzpOQgc3dhcCCl0aG8pcalo6W3peel86TOzL7BsKTyytG5uaS5pOukyCAiCisiTGludXggpKykvaTspOmk8qS9pKakyMenvLGkx6StpMqkr6TKpOqk3qS5oaMiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6MTQ0MworbXNnaWQgIkNhbid0IGFkZCBhbm90aGVyIHBhcnRpdGlvbiAtLSB0aGUgcGFydGl0aW9uIG1hcCBpcyB0b28gc21hbGwhIgorbXNnc3RyICKl0aG8pcalo6W3peel86TyxMmyw6THpK2k3qS7pPOho6XRobylxqWjpbel56Xzpd6lw6XXpKy+rqS1pLmkrqTepLmhoyIKKworIzogbGlicGFydGVkL2xhYmVscy9wYzk4LmM6MzU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcGFydGl0aW9uIHRhYmxlIG9uICVzLiIKK21zZ3N0ciAiJXMgpM6l0aG8pcalo6W3peel86XGobyl1qXrpKzJ1MC1pMekuaGjIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3BjOTguYzo0MDYgbGlicGFydGVkL2xhYmVscy9wYzk4LmM6NDg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQYXJ0aXRpb24gJWQgaXNuJ3QgYWxpZ25lZCB0byBjeWxpbmRlciBib3VuZGFyaWVzLiAgVGhpcyBpcyBzdGlsbCAiCisidW5zdXBwb3J0ZWQuIgorbXNnc3RyICIiCisipdGhvKXGpaOlt6XnpfMgJWQgpM+lt6XqpfOlwLats6a+5aTLpKKk6qTepLuk86GjpLOk7KTPpN6kwKW1pd2hvKXIpLWk7KTGpKSk3iIKKyKku6TzoaMiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcGM5OC5jOjc5MQorbXNnaWQgIkNhbid0IGFkZCBhbm90aGVyIHBhcnRpdGlvbi4iCittc2dzdHIgIqXRobylxqWjpbel56XzpPLEybLDpMekraTepLuk86GjIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjE2MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEJhZCBjaGVja3N1bSBvbiBibG9jayAlbGx1IG9mIHR5cGUgJXMuIgorbXNnc3RyICIlcyA6IKXWpe2lw6WvICVsbHUgKHR5cGUgJXMpIKTOpcGlp6XDpa+ltaXgpKzJ1MC1pMekuaGjIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjQ5NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IERpZG4ndCBmaW5kIHJkYiBibG9jaywgc2hvdWxkIG5ldmVyIGhhcHBlbi4iCittc2dzdHIgIiIKKyIlcyA6IHJkYiCl1qXtpcOlr6SsuKukxKSrpOqk3qS7pPOkx6S3pL+ho6SzpOykz6SipMOkxqTPpMqk6aTKpKSks6TIpMekuaGjIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjU4MQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IExvb3AgZGV0ZWN0ZWQgYXQgYmxvY2sgJWQuIgorbXNnc3RyICIlcyA6IKXWpe2lw6WvICVkIKTLpeuhvKXXpKzIr7irpLWk7KTepLekv6GjIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjYwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IFRoZSAlcyBsaXN0IHNlZW1zIGJhZCBhdCBibG9jayAlcy4iCittc2dzdHIgIiVzIDogJXMgpeqluaXIpKykqqSrpLekpKTopKakx6S5KKXWpe2lw6WvICVzKaGjIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjY4OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBsaXN0IGJhZCBibG9ja3MuIgorbXNnc3RyICIlcyA6IMnUwLWkyqXWpe2lw6WvpM6w7M33pPLGwKTppOyk3qS7pPOkx6S3pL+hoyIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo2OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gbGlzdCBwYXJ0aXRpb24gYmxvY2tzLiIKK21zZ3N0ciAiJXMgOiCl0aG8pcalo6W3peel86XWpe2lw6WvpM6w7M33pPLGwKTppOyk3qS7pPOkx6S3pL+hoyIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo3MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gbGlzdCBmaWxlIHN5c3RlbSBibG9ja3MuIgorbXNnc3RyICIlcyA6IKXVpaGlpKXrpbeluaXGpeCl1qXtpcOlr6TOsOzN96TyxsCk6aTspN6ku6TzpMekt6S/oaMiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6NzEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGxpc3QgYm9vdCBibG9ja3MuIgorbXNnc3RyICIlcyA6IKXWobylyKXWpe2lw6WvpM6w7M33pPLGwKTppOyk3qS7pPOkx6S3pL+hoyIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo3NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHdyaXRlIHBhcnRpdGlvbiBibG9jayBhdCAlZC4iCittc2dzdHIgIqXRobylxqWjpbel56Xzpdal7aXDpa8opdal7aXDpa8gJWQppM698aStpLOk36TLvLrH1KS3pN6kt6S/oaMiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6MTA2OQorbXNnaWQgIlVuYWJsZSB0byBhbGxvY2F0ZSBhIHBhcnRpdGlvbiBudW1iZXIuIgorbXNnc3RyICKl0aG8pcalo6W3peel88jWueak8rPkpOrF9qTGpOmk7KTepLuk86GjIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3N1bi5jOjE0NQorbXNnaWQgIkNvcnJ1cHRlZCBTdW4gZGlzayBsYWJlbCBkZXRlY3RlZC4iCittc2dzdHIgIlN1bqXHpaOluaWvpeml2aXrpM7Hy8K7pPK4ob3QpLek3qS3pL+hoyIKKworIzogbGlicGFydGVkL2xhYmVscy9zdW4uYzoyNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBkaXNrIENIUyBnZW9tZXRyeSAoJWQsJWQsJWQpIHJlcG9ydGVkIGJ5IHRoZSBvcGVyYXRpbmcgc3lzdGVtIGRvZXMgbm90ICIKKyJtYXRjaCB0aGUgZ2VvbWV0cnkgc3RvcmVkIG9uIHRoZSBkaXNrIGxhYmVsICglZCwlZCwlZCkuIgorbXNnc3RyICIiCisipcelo6W5pa+kziBnZW9tZXRyeShDSFMpICglZCwlZCwlZCkgpKyhoqXHpaOluaWvpeml2aXrpM6k4qTOICglZCwlZCwlZCkgpMiw7CIKKyLD16S3pN6ku6TzoaMiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6Mjg4CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBkaXNrIGxhYmVsIGRlc2NyaWJlcyBhIGRpc2sgYmlnZ2VyIHRoYW4gJXMuIgorbXNnc3RyICKlx6Wjpbmlr6Xspdml66TLpOik66TIoaKlx6Wjpbmlr6TPICVzIKTopOrC56StpKSks6TIpMukyqTDpMakpKTepLmhoyIKKworIzogbGlicGFydGVkL2xhYmVscy9zdW4uYzo0NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGRpc2sgaGFzICVkIGN5bGluZGVycywgd2hpY2ggaXMgZ3JlYXRlciB0aGFuIHRoZSBtYXhpbXVtIG9mIDY1NTM2LiIKK21zZ3N0ciAiIgorIqSzpM6lx6Wjpbmlr6TPICVkIKW3peql86XApKKk6qTepLmho6SzpOykz7rHwufDzaTOIDY1NTM2IKTysdukqKTGpKSk3qS5oaMiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6NzM3Cittc2dpZCAiIgorIlRoZSBXaG9sZSBEaXNrIHBhcnRpdGlvbiBpcyB0aGUgb25seSBhdmFpbGFibGUgb25lIGxlZnQuICBHZW5lcmFsbHksIGl0IGlzICIKKyJub3QgYSBnb29kIGlkZWEgdG8gb3ZlcndyaXRlIHRoaXMgcGFydGl0aW9uIHdpdGggYSByZWFsIG9uZS4gIFNvbGFyaXMgbWF5ICIKKyJub3QgYmUgYWJsZSB0byBib290IHdpdGhvdXQgaXQsIGFuZCBTSUxPICh0aGUgc3BhcmMgYm9vdCBsb2FkZXIpIGFwcHJlY2lhdGVzICIKKyJpdCBhcyB3ZWxsLiIKK21zZ3N0ciAiIgorIldob2xlIERpc2sgpdGhvKXGpaOlt6XnpfOkt6Sru8SktaTspMak3qS7pPOho6TApKSkv6SkpM6+7LnnpMukqqSkpMahoqSzpM6l0aG8IgorIqXGpaOlt6XnpfOk8r7lvfGkraS5pOukzqTPpOikr6SipOqk3qS7pPOho1NvbGFyaXMgpKy1r8awpLekyqSvpMqk66SrpOKkt6TspN4iCisipLuk86S3oaJTSUxPKHRoZSBzcGFyYyBib290IGxvYWRlcimky6TixdS556SspOikr6SipOqk3qS7pPOhoyIKKworIzogbGlicGFydGVkL2xhYmVscy9zdW4uYzo3NTIKK21zZ2lkICJTdW4gZGlzayBsYWJlbCBpcyBmdWxsLiIKK21zZ3N0ciAiU3Vupcelo6W5pa+l6aXZpeukrKSkpMOk0aSkpMekuaGjIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIG9wZW5pbmcgZGV2aWNlICclcycgZmFpbGVkLlxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6MTY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBzZWVraW5nIGRldmljZSAnJXMnIGZhaWxlZC5cbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjE3MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgd3JpdGluZyB0byBkZXZpY2UgJyVzJyBmYWlsZWQsXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzoxNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHJlYWRpbmcgZnJvbSBkZXZpY2UgJyVzJyBmYWlsZWQuXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzoxNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmF0YWwgZXJyb3JcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0MTgKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBWVE9DIGxhYmVscy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDI0Cittc2dpZCAiQ291bGQgbm90IHJlYWQgVlRPQyBGTVQxIERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQzMQorbXNnaWQgIkNvdWxkIG5vdCByZWFkIFZUT0MgRk1UNCBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0MzgKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBWVE9DIEZNVDUgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDQ1Cittc2dpZCAiQ291bGQgbm90IHJlYWQgVlRPQyBGTVQ3IERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQ2MgorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBWVE9DIGxhYmVscy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDY4Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIFZUT0MgRk1UMSBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0NzUKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgVlRPQyBGTVQ0IERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQ4MgorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBWVE9DIEZNVDUgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDg5Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIFZUT0MgRk1UNyBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGlicGFydGVkLmM6Mjk2IGxpYnBhcnRlZC9saWJwYXJ0ZWQuYzozMTYKK21zZ2lkICJPdXQgb2YgbWVtb3J5LiIKK21zZ3N0ciAipeGl4qXqydTCraTHpLmhoyIKKworIzogbGlicGFydGVkL3VuaXQuYzoxMzkKK21zZ2lkICJDYW5ub3QgZ2V0IHVuaXQgc2l6ZSBmb3Igc3BlY2lhbCB1bml0ICdDT01QQUNUJy4iCittc2dzdHIgIsbDysykysOxsMykx6SipOsgJ0NPTVBBQ1QnIKTOw7GwzKSipL+k6qTOpbWlpKW6pPLGwKTppOyk3qS7pPOhoyIKKworIzogbGlicGFydGVkL3VuaXQuYzozODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiXCIlc1wiIGhhcyBpbnZhbGlkIHN5bnRheCBmb3IgbG9jYXRpb25zLiIKK21zZ3N0ciAiXCIlc1wiIKTLpM+wzMPWpMukxKSkpMa47aTqpKykoqTqpN6kuaGjIgorCisjOiBsaWJwYXJ0ZWQvdW5pdC5jOjM5NAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgbWF4aW11bSBoZWFkIHZhbHVlIGlzICVkLiIKK21zZ3N0ciAiusfC56XYpcOlycPNpM8gJWQgpMekuaGjIgorCisjOiBsaWJwYXJ0ZWQvdW5pdC5jOjQwMQorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgbWF4aW11bSBzZWN0b3IgdmFsdWUgaXMgJWQuIgorbXNnc3RyICK6x8Lnpbulr6W/w82kzyAlZCCkx6S5oaMiCisKKyM6IGxpYnBhcnRlZC91bml0LmM6NDEzIGxpYnBhcnRlZC91bml0LmM6NTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBsb2NhdGlvbiAlcyBpcyBvdXRzaWRlIG9mIHRoZSBkZXZpY2UgJXMuIgorbXNnc3RyICIlcyCkz6Gipcel0KWkpbkgJXMgpM6zsKTHpLmhoyIKKworIzogbGlicGFydGVkL3VuaXQuYzo1MjcKK21zZ2lkICJJbnZhbGlkIG51bWJlci4iCittc2dzdHIgIsnUwLWkysPNpMekuaGjIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYWZmcy5jOjYzIGxpYnBhcnRlZC9mcy9hbWlnYS9hcGZzLmM6NTYKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hc2ZzLmM6NzAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGFsbG9jYXRlIHBhcnRpdGlvbiBibG9ja1xuIgorbXNnc3RyICIlcyA6IKXRobylxqWjpbel56Xzpdal7aXDpa+kzrDszfek8sbApOmk7KTepLuk86THpLekv6GjIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYWZmcy5jOjc4IGxpYnBhcnRlZC9mcy9hbWlnYS9hcGZzLmM6NzAKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hc2ZzLmM6ODYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGFsbG9jYXRlIGJsb2NrXG4iCittc2dzdHIgIiVzIDogpdahvKXIpdal7aXDpa+kzrDszfek8sbApOmk7KTepLuk86THpLekv6GjIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYWZmcy5jOjgzIGxpYnBhcnRlZC9mcy9hbWlnYS9hcGZzLmM6NzUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogQ291bGRuJ3QgcmVhZCBib290IGJsb2NrICVsbHVcbiIKK21zZ3N0ciAiJXMgOiCl1qXtpcOlryAlZCCky6Xrobyl16SsyK+4q6S1pOyk3qS3pL+hoyIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FmZnMuYzo5OSBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXBmcy5jOjg2CisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXNmcy5jOjkyIGxpYnBhcnRlZC9mcy9hbWlnYS9hc2ZzLmM6MTA2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyA6IENvdWxkbid0IHJlYWQgcm9vdCBibG9jayAlbGx1XG4iCittc2dzdHIgIiVzIDogpdal7aXDpa8gJWQgpMul66G8pdekrMivuKuktaTspN6kt6S/oaMiCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jOjcyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBhbGxvY2F0ZSBpZCBsaXN0IGVsZW1lbnRcbiIKK21zZ3N0ciAiJXMgOiDJ1MC1pMql1qXtpcOlr6TOsOzN96TyxsCk6aTspN6ku6TzpMekt6S/oaMiCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IENvdWxkbid0IHJlYWQgYmxvY2sgJWxsdVxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jOjIwMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBCYWQgY2hlY2tzdW0gb24gYmxvY2sgJWxsdSBvZiB0eXBlICVzXG4iCittc2dzdHIgIiVzIDogpdal7aXDpa8gJWxsdSAodHlwZSAlcykgpM6lwaWnpcOlr6W1peCkrMnUwLWkx6S5oaMiCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jOjIxMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBDb3VsZG4ndCB3cml0ZSBibG9jayAlZFxuIgorbXNnc3RyICIlcyA6IKXWpe2lw6WvICVkIKTLpeuhvKXXpKzIr7irpLWk7KTepLekv6GjIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzoyNzgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGFsbG9jYXRlIGRpc2tfc3BlY2lmaWMgcmRiIGJsb2NrXG4iCittc2dzdHIgIiVzIDogydTAtaTKpdal7aXDpa+kzrDszfek8sbApOmk7KTepLuk86THpLekv6GjIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzoyODkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRGlkbid0IGZpbmQgcmRiIGJsb2NrLCBzaG91bGQgbmV2ZXIgaGFwcGVuXG4iCittc2dzdHIgIiIKKyIlcyA6IHJkYiCl1qXtpcOlr6SsuKukxKSrpOqk3qS7pPOkx6S3pL+ho6SzpOykz6SipMOkxqTPpMqk6aTKpKSks6TIpMekuaGjIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzozMTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIHJlYWQgcGFydGl0aW9uIGJsb2NrICVsbHVcbiIKK21zZ3N0ciAiJXMgOiCl0aG8pcalo6W3peel86XWpe2lw6WvpM6w7M33pPLGwKTppOyk3qS7pPOkx6S3pL+hoyIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjg3IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzoxMTIKK21zZ2lkICJJbmNvbnNpc3RlbnQgZ3JvdXAgZGVzY3JpcHRvcnMhIgorbXNnc3RyICKlsKXrobyl17WtvdK70qTLzLe94qSspKKk6qTepLkhIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6OTEgbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjExNgorbXNnaWQgIkZpbGUgc3lzdGVtIGZ1bGwhIgorbXNnc3RyICKl1aWhpaSl66W3pbmlxqXgpKykpKTDpNGkpKTLpMqk6qTepLekvyEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo2ODYKK21zZ2lkICJJbnZhbGlkIHN1cGVyYmxvY2suICBBcmUgeW91IHN1cmUgdGhpcyBpcyBhbiBleHQyIGZpbGUgc3lzdGVtPyIKK21zZ3N0ciAipbmhvKXRobyl1qXtpcOlr6SsydTAtaTHpLmho6SzpM6l1aWhpaSl66W3pbmlxqXgpM/L3MX2pMsgZXh0MiCkx6S5pKuhqSIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjcwMCBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjY1OAorbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyBlcnJvcnMhICBZb3Ugc2hvdWxkIHJ1biBlMmZzY2suIgorbXNnc3RyICKl1aWhpaSl66W3pbmlxqXgpMulqKXpobykrKSipOqk3qS5oaPA6KTLIGUyZnNjayCk8rzCudSkt6TGpK+kwKS1pKShoyIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjcxMQorbXNnaWQgIiIKKyJGaWxlIHN5c3RlbSB3YXMgbm90IGNsZWFubHkgdW5tb3VudGVkISAgWW91IHNob3VsZCBydW4gZTJmc2NrLiAgTW9kaWZ5aW5nIGFuICIKKyJ1bmNsZWFuIGZpbGUgc3lzdGVtIGNvdWxkIGNhdXNlIHNldmVyZSBjb3JydXB0aW9uLiIKK21zZ3N0ciAiIgorIqWvpeqhvKXzpMsgdW5tb3VudCCktaTspMak3qS7pPOho2UyZnNjayCk8rzCudSkuaTZpK2kx6S5oaOlr6Xqobyl86TLpMqkw6TGpKQiCisipMqkpKXVpaGlpKXrpbeluaXGpeCk2KTOytG5uaTPwuekraTKwruzsqTLpMSkyqSspOqkq6TNpN6ku6TzoaMiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo3MzEKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgYW4gaW5jb21wYXRpYmxlIGZlYXR1cmUgZW5hYmxlZC4iCittc2dzdHIgIqXVpaGlpKXrpbeluaXGpeCkz7jftLnAraTOpMqkpLWhx72krM2tuPqky6TKpMOkxqSkpN6kuaGjIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6NzQyCittc2dpZCAiRXJyb3IgYWxsb2NhdGluZyBidWZmZXIgY2FjaGUuIgorbXNnc3RyICKl0KXDpdWloaWtpeOlw6W3peWk8rPOyt2kt6TGpOu6x8PmpMulqKXpobykrMivwLikt6TepLekv6GjIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2lub2RlX3JlbG9jYXRvci5jOjExNAorbXNnaWQgIiIKKyJGb3VuZCBhbiBpbm9kZSB3aXRoIGEgaW5jb3JyZWN0IGxpbmsgY291bnQuICBCZXR0ZXIgZ28gcnVuIGUyZnNjayBmaXJzdCEiCittc2dzdHIgIiIKKyKl6qXzpa+kzr/0pKzAtaS3pK+kyqSkaW5vZGWkrLirpMSkq6TqpN6kt6S/oaPA6KTLIGUyZnNjayCk8rzCudSkt6S/yv2krKSkpKSkxyIKKyKkt6TnpKahoyIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9pbm9kZV9yZWxvY2F0b3IuYzo0ODcKK21zZ2lkICJOb3QgZW5vdWdoIGZyZWUgaW5vZGVzISIKK21zZ3N0ciAizKS7yM3RpM4gaW5vZGUgpM6/9KSsydTCraS3pMakpKTepLmhoyIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzoyMjMKK21zZ2lkICJGaWxlIHN5c3RlbSBpcyB0b28gZnVsbCB0byByZW1vdmUgYSBncm91cCEiCittc2dzdHIgIqWwpeuhvKXXpPK67738pLmk66TLpM+29aStzs6w6KSswq2k6qTepLuk86GjIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjIzMgorbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyB0b28gbWFueSBhbGxvY2F0ZWQgaW5vZGVzIHRvIHJlbW92ZSBhIGdyb3VwISIKK21zZ3N0ciAipbCl66G8pdek8rrvvfykuaTrpMukz8yku8jN0aTOIGlub2RlIKSswq2k6qTepLuk86GjIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjQ5MQorbXNnaWQgImFkZGluZyBncm91cHMiCittc2dzdHIgIqWwpeuhvKXXpPLEybLDw+YiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgZmlsZSBzeXN0ZW0gaXMgdG9vIGZ1bGwgdG8gcmVzaXplIGl0IHRvICVpIGJsb2Nrcy4gIFNvcnJ5LiIKK21zZ3N0ciAiJWkgpdal7aXDpa+ky6XqpbWlpKW6pLmk66TLpM/OzrDopKzJ1MKtpLekxqSkpN6kuaGjIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjUzOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBmaWxlIHN5c3RlbSBoYXMgdG9vIG1hbnkgb2NjdXBpZWQgaW5vZGVzIHRvIHJlc2l6ZSBpdCB0byAlaSBibG9ja3MuICAiCisiU29ycnkuIgorbXNnc3RyICIlaSCl1qXtpcOlr6TLpeqltaWkpbqkuaTrpMukzyBpbm9kZSCkrMnUwq2kt6TGpKSk3qS5oaMiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NjY2Cittc2dpZCAiRmlsZSBzeXN0ZW0gd2FzIG5vdCBjbGVhbmx5IHVubW91bnRlZCEgIFlvdSBzaG91bGQgcnVuIGUyZnNjay4iCittc2dzdHIgIiIKKyKlr6Xqobyl86TLIHVubW91bnQgpLWk7KTGpN6ku6TzpMekt6S/oaOk3qS6oaJlMmZzY2sgpPK8wrnUpLekxqSvpMCktaSkoaMiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6Njc1Cittc2dpZCAiIgorIlRoZSBmaWxlIHN5c3RlbSBoYXMgdGhlICdkaXJfaW5kZXgnIGZlYXR1cmUgZW5hYmxlZC4gIFBhcnRlZCBjYW4gb25seSByZXNpemUgIgorInRoZSBmaWxlIHN5c3RlbSBpZiBpdCBkaXNhYmxlcyB0aGlzIGZlYXR1cmUuICBZb3UgY2FuIGVuYWJsZSBpdCBsYXRlciBieSAiCisicnVubmluZyAndHVuZTJmcyAtTyBkaXJfaW5kZXggREVWSUNFJyBhbmQgdGhlbiAnZTJmc2NrIC1mRCBERVZJQ0UnLiIKK21zZ3N0ciAiIgorIqSzpM6l1aWhpaSl66W3pbmlxqXgpM8gJ2Rpcl9pbmRleCcgpKzNrbj6pMukyqTDpMakpKTepLmho6SzpOyk8sy1uPqky6S3pMqkpCIKKyKkyCBQYXJ0ZWQgpMekz6XqpbWlpKW6pMekraTepLuk86GjsOzDtsy1uPqky6S3pMak4ryhpM6k6KSmpMukuaTrpLOkyKTHoaLNrbj6IgorIqTLpMekraTepLmhoyd0dW5lMmZzIC1PIGRpcl9pbmRleCBERVZJQ0UnICdlMmZzY2sgLWZEIERFVklDRSciCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NjkxCittc2dpZCAiIgorIkEgcmVzaXplIG9wZXJhdGlvbiBvbiB0aGlzIGZpbGUgc3lzdGVtIHdpbGwgdXNlIEVYUEVSSU1FTlRBTCBjb2RlXG4iCisidGhhdCBNQVkgQ09SUlVQVCBpdCAoYWx0aG91Z2ggbm8gb25lIGhhcyByZXBvcnRlZCBhbnkgc3VjaCBkYW1hZ2UgeWV0KS5cbiIKKyJZb3Ugc2hvdWxkIGF0IGxlYXN0IGJhY2t1cCB5b3VyIGRhdGEgZmlyc3QsIGFuZCBydW4gJ2UyZnNjayAtZicgYWZ0ZXJ3YXJkcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9ibG9ja19yZWxvY2F0b3IuYzoxOTgKK21zZ2lkICJDcm9zcy1saW5rZWQgYmxvY2tzIGZvdW5kISAgQmV0dGVyIGdvIHJ1biBlMmZzY2sgZmlyc3QhIgorbXNnc3RyICIiCisiQ3Jvc3MtbGluayCkt6TGpKSk66XWpe2lw6WvpKyk36TEpKuk6qTepLekv6GjwOikyyBlMmZzY2sgpPK8wrnUpLekv8r9pKykpKSkpMciCisipLek56SmoaMiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfYmxvY2tfcmVsb2NhdG9yLmM6NTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrICVpIGhhcyBubyByZWZlcmVuY2U/ICBXZWlyZC4iCittc2dzdHIgIqXWpe2lw6WvICVpIKTPsr+k4ruyvsikt6TGpKSk3qS7pPOho6SqpKukt6SkpMekuaGjIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2Jsb2NrX3JlbG9jYXRvci5jOjczNworIywgYy1mb3JtYXQKK21zZ2lkICJCbG9jayAlaSBzaG91bGRuJ3QgaGF2ZSBiZWVuIG1hcmtlZCAoJWQsICVkKSEiCittc2dzdHIgIqXWpe2lw6WvICVpIKTPpd6hvKWvpLWk7KTGpKSkyqSkpM+kuqTHpLkoJWQsICVkKaGjIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9pbnRlcmZhY2UuYzoxODYKK21zZ2lkICIiCisiVGhlIGV4dDIgZmlsZSBzeXN0ZW0gcGFzc2VkIGEgYmFzaWMgY2hlY2suICBGb3IgYSBtb3JlIGNvbXByZWhlbnNpdmUgY2hlY2ssICIKKyJ1c2UgdGhlIGUyZnNjayBwcm9ncmFtLiIKK21zZ3N0ciAiIgorIqSzpM4gZXh0MiCl1aWhpaSl66W3pbmlxqXgpM+0ysOxpMqlwaWnpcOlr6TypdGluaS3pN6kt6S/oaOktaTppMulwaWnpcOlr6S5pOsiCisipMukzyBlMmZzY2sgpPK7yKTDpMakr6TApLWkpKGjIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9pbnRlcmZhY2UuYzoyMDMKK21zZ2lkICJTb3JyeSwgY2FuJ3QgbW92ZSB0aGUgc3RhcnQgb2YgZXh0MiBwYXJ0aXRpb25zIHlldCEiCittc2dzdHIgIrvEx7Ckx6S5pKyhoqTepMAgZXh0MiCl0aG8pcalo6W3peel86TOs6u7z7DMw9akz7DcxrCkx6StpN6ku6TzoaMiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfYnVmZmVyLmM6ODIKK21zZ2lkICJDb3VsZG4ndCBmbHVzaCBidWZmZXIgY2FjaGUhIgorbXNnc3RyICKl0KXDpdWloaWtpeOlw6W3peWk8qXVpemlw6W3peWkx6StpN6ku6TzoaMiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfbWtmcy5jOjE2MgorbXNnaWQgIndyaXRpbmcgcGVyLWdyb3VwIG1ldGFkYXRhIgorbXNnc3RyICKlsKXrobyl18vopM6l4aW/vvDK86TyvfG5/sPmIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX21rZnMuYzo1NjQKK21zZ2lkICJGaWxlIHN5c3RlbSB0b28gc21hbGwgZm9yIGV4dDIuIgorbXNnc3RyICJleHQyIKTLpLmk66TLpM+l1aWhpaSl66W3pbmlxqXgpKy+rqS1pLmkrqTepLmhoyIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jYWxjLmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgbmVlZCAlcyBvZiBmcmVlIGRpc2sgc3BhY2UgdG8gc2hyaW5rIHRoaXMgcGFydGl0aW9uIHRvIHRoaXMgc2l6ZS4gICIKKyJDdXJyZW50bHksIG9ubHkgJXMgaXMgZnJlZS4iCittc2dzdHIgIiIKKyKks6TOpdGhvKXGpaOlt6XnpfOk8qSzpM6ltaWkpbqky76upLWkr6S5pOuky6TPICVzIKTOtvWkraSsyazN16THpLmhoyi4vbrfICVzICIKKyKkt6SrtvWkraSspKKk6qTepLuk86GjKSIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb250ZXh0LmM6NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNsdXN0ZXIgc3RhcnQgZGVsdGEgPSAlZCwgd2hpY2ggaXMgbm90IGEgbXVsdGlwbGUgb2YgdGhlIGNsdXN0ZXIgc2l6ZSAlZC4iCittc2dzdHIgIiIKKyJDbHVzdGVyIHN0YXJ0IGRlbHRhID0gJWQgpLOk7KTPpa+l6aW5pb+ltaWkpbogJWQgpM7H3L/0pMekz6SipOqk3qS7pPOhoyIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9mYXQuYzozMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGFydGl0aW9uIHRvbyBiaWcvc21hbGwgZm9yIGEgJXMgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICIiCisipdGhvKXGpaOlt6XnpfOkrCAlcyCl1aWhpaSl66W3pbmlxqXgpMukz76upLWkuaSuoaKkoqTrpKSkz8LnpK2kuaSupN6kuaGjIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jOjQ3NAorbXNnaWQgIiIKKyJUaGUgRkFUcyBkb24ndCBtYXRjaC4gIElmIHlvdSBkb24ndCBrbm93IHdoYXQgdGhpcyBtZWFucywgdGhlbiBzZWxlY3QgIgorImNhbmNlbCwgcnVuIHNjYW5kaXNrIG9uIHRoZSBmaWxlIHN5c3RlbSwgYW5kIHRoZW4gY29tZSBiYWNrLiIKK21zZ3N0ciAiIgorIkZBVCCkrLDsw9ekt6TepLuk86GjpLOk7KSssr+k8rDVzKOkuaTrpKuk76SrpOmkyqSkpMqk6aGivOi+wyhDKSCk8sGqpPOkx6GiIgorInNjYW5kaXNrIKTyvMK51KS3pMakq6TpoaKk3qS/pOSk6qTKpKqkt6TGpK+kwKS1pKShoyIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9mYXQuYzo1MTQKK21zZ2lkICJUaGVyZSBhcmUgbm8gcG9zc2libGUgY29uZmlndXJhdGlvbnMgZm9yIHRoaXMgRkFUIHR5cGUuIgorbXNnc3RyICKks6TOIEZBVCClv6Wkpdeky7nnpKYgY29uZmlndXJhdGlvbiCkrKSipOqk3qS7pPOhoyIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9mYXQuYzo1MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZpbGUgc3lzdGVtIGRvZXNuJ3QgaGF2ZSBleHBlY3RlZCBzaXplcyBmb3IgV2luZG93cyB0byBsaWtlIGl0LiAgQ2x1c3RlciAiCisic2l6ZSBpcyAlZGsgKCVkayBleHBlY3RlZCk7IG51bWJlciBvZiBjbHVzdGVycyBpcyAlZCAoJWQgZXhwZWN0ZWQpOyBzaXplIG9mICIKKyJGQVRzIGlzICVkIHNlY3RvcnMgKCVkIGV4cGVjdGVkKS4iCittc2dzdHIgIiIKKyKl1aWhpaSl66W3pbmlxqXgpM6ltaWkpbqkrCBXaW5kb3dzIKTOtPzC1KS3pL2kpqTKpbWlpKW6pMekz6SipOqk3qS7pPOho6WvpemluSIKKyKlv6W1paSluiAlZGsgKM29wdsgJWRrKTsgpa+l6aW5pb+kzr/0ICVkICjNvcHbICVkKTsgRkFUIKTOpbWlpKW6ICVkIKW7pa+lvyAiCisiKM29wdsgJWQpIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jOjU0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRmlsZSBzeXN0ZW0gaXMgcmVwb3J0aW5nIHRoZSBmcmVlIHNwYWNlIGFzICVkIGNsdXN0ZXJzLCBub3QgJWQgY2x1c3RlcnMuIgorbXNnc3RyICIiCisipdWloaWkpeult6W5pcal4KTOtvWkrc3GzsykzyAlZCClr6XppbmlvyCkx6GiJWQgpa+l6aW5pb+kx6TPpKKk6qTepLuk86GjIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jOjg3NAorbXNnaWQgIiIKKyJHTlUgUGFydGVkIHdhcyBtaXNjb21waWxlZDogdGhlIEZBVCBib290IHNlY3RvciBzaG91bGQgYmUgNTEyIGJ5dGVzLiAgRkFUICIKKyJzdXBwb3J0IHdpbGwgYmUgZGlzYWJsZWQuIgorbXNnc3RyICIiCisiR05VIHBhcnRlZCCkrKTBpOOk86TIpbOl86XRpaSl66S1pOykxqSkpN6ku6TzoaNGQVQgpM6l1qG8pcilu6Wvpb+kzyA1MTIgpdClpCIKKyKlyKTHpKKk66TZpK2kx6S5oaNGQVQgpbWl3aG8pcik8sy1uPqky6S3pN6kuaGjIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjE1OQorbXNnaWQgIiIKKyJUaGVyZSdzIG5vdCBlbm91Z2ggcm9vbSBpbiB0aGUgcm9vdCBkaXJlY3RvcnkgZm9yIGFsbCBvZiB0aGUgZmlsZXMuICBFaXRoZXIgIgorImNhbmNlbCwgb3IgaWdub3JlIHRvIGxvc2UgdGhlIGZpbGVzLiIKK21zZ3N0ciAiIgorIqXrobylyKXHpaOl7KWvpcil6qTLvb3KrKTKtvWkraSspKKk6qTepLuk86GjvOi+wyhDKSCkuaSroaKl1aWhpaSl66TyvLqkw6TGpOIiCisipOiksaTspNAgzLW76yhJKSCk8sGqpPOkx6SvpMCktaSkoaMiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6MzAwCittc2dpZCAiRXJyb3Igd3JpdGluZyB0byB0aGUgcm9vdCBkaXJlY3RvcnkuIgorbXNnc3RyICKl66G8pcilx6Wjpeylr6XIpeqky73xpK2ks6Tfw+aky6WopemhvKSsyK/AuKS3pN6kt6S/oaMiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NDg5Cittc2dpZCAiSWYgeW91IGxlYXZlIHlvdXIgZmlsZSBzeXN0ZW0gYXMgRkFUMTYsIHRoZW4geW91IHdpbGwgaGF2ZSBubyBwcm9ibGVtcy4iCittc2dzdHIgIkZBVDE2IKTOpN6k3qTLpLekxqSqpK+kyqTpoaKyv6TOzOTC6qTipKKk6qTepLuk86GjIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjQ5MgorbXNnaWQgIiIKKyJJZiB5b3UgY29udmVydCB0byBGQVQxNiwgYW5kIE1TIFdpbmRvd3MgaXMgaW5zdGFsbGVkIG9uIHRoaXMgcGFydGl0aW9uLCB0aGVuICIKKyJ5b3UgbXVzdCByZS1pbnN0YWxsIHRoZSBNUyBXaW5kb3dzIGJvb3QgbG9hZGVyLiAgSWYgeW91IHdhbnQgdG8gZG8gdGhpcywgeW91ICIKKyJzaG91bGQgY29uc3VsdCB0aGUgUGFydGVkIG1hbnVhbCAob3IgeW91ciBkaXN0cmlidXRpb24ncyBtYW51YWwpLiIKK21zZ3N0ciAiIgorIkZBVDE2IKTLytG0uaS3pOikpqTIpLekxqSkpMahoqS3pKuk4iBNUyBXaW5kb3dzIKSspLOkzqXRobylxqWjpbel56XzpMulpKXzpbkiCisipcihvKXrpLWk7KTGpKSk66TKpOmhok1TIFdpbmRvd3MgpM6l1qG8pcil7aG8pcCk8rrGpaSl86W5pcihvKXrpLekyqSxpOyk0KTKpOoiCisipN6ku6TzoaOk4qS3pL2kpqS3pL+kpKTOpMqk6aGiUGFydGVkKKSipOukpKTPIGRpc3RyaWJ1dGlvbikgpM6l3qXLpeWloqXrpPKk6CIKKyKkr8bJpPOkx6SvpMCktaSkoaMiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTAwCittc2dpZCAiIgorIklmIHlvdSBsZWF2ZSB5b3VyIGZpbGUgc3lzdGVtIGFzIEZBVDMyLCB0aGVuIHlvdSB3aWxsIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyAiCisicHJvYmxlbXMuIgorbXNnc3RyICJGQVQzMiCkzqTepN6ky6S3pMakqqSvpMqk6aGisr+kzszkwuqk4sC4pLik3qS7pPOhoyIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1MDQKK21zZ2lkICIiCisiSWYgeW91IGNvbnZlcnQgdG8gRkFUMzIsIGFuZCBNUyBXaW5kb3dzIGlzIGluc3RhbGxlZCBvbiB0aGlzIHBhcnRpdGlvbiwgdGhlbiAiCisieW91IG11c3QgcmUtaW5zdGFsbCB0aGUgTVMgV2luZG93cyBib290IGxvYWRlci4gIElmIHlvdSB3YW50IHRvIGRvIHRoaXMsIHlvdSAiCisic2hvdWxkIGNvbnN1bHQgdGhlIFBhcnRlZCBtYW51YWwgKG9yIHlvdXIgZGlzdHJpYnV0aW9uJ3MgbWFudWFsKS4gIEFsc28sICIKKyJjb252ZXJ0aW5nIHRvIEZBVDMyIHdpbGwgbWFrZSB0aGUgZmlsZSBzeXN0ZW0gdW5yZWFkYWJsZSBieSBNUyBET1MsIE1TICIKKyJXaW5kb3dzIDk1YSwgYW5kIE1TIFdpbmRvd3MgTlQuIgorbXNnc3RyICIiCisiRkFUMzIgpMvK0bS5pLek6KSmpMikt6TGpKSkxqGipLekq6TiIE1TIFdpbmRvd3MgpKyks6TOpdGhvKXGpaOlt6XnpfOky6WkpfOluSIKKyKlyKG8peuktaTspMakpKTrpMqk6aGiTVMgV2luZG93cyCkzqXWobylyKXtobylwKTyusalpKXzpbmlyKG8peukt6TKpLGk7KTQpMqk6iIKKyKk3qS7pPOho6TipLekvaSmpLekv6SkpM6kyqTpoaJQYXJ0ZWQopKKk66SkpM8gZGlzdHJpYnV0aW9uKSCkzqXepcul5aWipeuk8qToIgorIqSvxsmk86THpK+kwKS1pKSho0ZBVDMyIKTLytG0uaS5pOukyKGiTVMtRE9ToaJNUyBXaW5kb3dzIDk1YaGiTVMgV2luZG93cyBOVCAiCisipKuk6aTPxsmk4aTKpK+kyqTqpN6kuaGjIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjUxOAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyAgJXMgICVzIgorbXNnc3RyICIlcyAgJXMgICVzIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjUxOQorbXNnaWQgIldvdWxkIHlvdSBsaWtlIHRvIHVzZSBGQVQzMj8iCittc2dzdHIgIkZBVDMyIKTyu8ikpKS/pKSkx6S5pKuhqSIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1NTAgbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgICVzIgorbXNnc3RyICIlcyAgJXMiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTUxCittc2dpZCAiIgorIlRoZSBmaWxlIHN5c3RlbSBjYW4gb25seSBiZSByZXNpemVkIHRvIHRoaXMgc2l6ZSBieSBjb252ZXJ0aW5nIHRvIEZBVDE2LiIKK21zZ3N0ciAipLOkzqW1paSluqTLpeqltaWkpbqkuaTrpMukzyBGQVQxNiCky8rRtLmkt6TKpLGk7KTQpMqk6qTepLuk86GjIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjU2NworbXNnaWQgIiIKKyJUaGUgZmlsZSBzeXN0ZW0gY2FuIG9ubHkgYmUgcmVzaXplZCB0byB0aGlzIHNpemUgYnkgY29udmVydGluZyB0byBGQVQzMi4iCittc2dzdHIgIqSzpM6ltaWkpbqky6XqpbWlpKW6pLmk66TLpM8gRkFUMzIgpMvK0bS5pLekyqSxpOyk0KTKpOqk3qS7pPOhoyIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1ODAKK21zZ2lkICIiCisiR05VIFBhcnRlZCBjYW5ub3QgcmVzaXplIHRoaXMgcGFydGl0aW9uIHRvIHRoaXMgc2l6ZS4gIFdlJ3JlIHdvcmtpbmcgb24gaXQhIgorbXNnc3RyICIiCisiR05VIFBhcnRlZCCkz6SzpM6l0aG8pcalo6W3peel86TypLOkzqW1paSluqTLpeqltaWkpbqkuaTrpLOkyKTPpMekraTepLuk86GjpMciCisipK2k66TopKaky8XYzs+kt6TGpKSk3qS5oaMiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjQ5IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjU2Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGludmFsaWQgc2lnbmF0dXJlIGZvciBhIEZBVCBmaWxlIHN5c3RlbS4iCittc2dzdHIgIiIKKyKl1aWhpaSl66W3pbmlxqXgpM6lt6Wwpc2lwaXjpKwgRkFUIKXVpaGlpKXrpbeluaXGpeCkzqTipM6kx6TPpKKk6qTepLuk86GjIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo2NAorbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyBhbiBpbnZhbGlkIHNlY3RvciBzaXplIGZvciBhIEZBVCBmaWxlIHN5c3RlbS4iCittc2dzdHIgIiIKKyKl1aWhpaSl66W3pbmlxqXgpM6lu6Wvpb+ltaWkpbqkrCBGQVQgpdWloaWkpeult6W5pcal4KTOpOKkzqTHpM+koqTqpN6ku6TzoaMiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjcxCittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGludmFsaWQgY2x1c3RlciBzaXplIGZvciBhIEZBVCBmaWxlIHN5c3RlbS4iCittc2dzdHIgIiIKKyKl1aWhpaSl66W3pbmlxqXgpM6lr6Xppbmlv6W1paSluqSsIEZBVCCl1aWhpaSl66W3pbmlxqXgpM6k4qTOpMekz6SipOqk3qS7pPOhoyIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6NzgKK21zZ2lkICIiCisiRmlsZSBzeXN0ZW0gaGFzIGFuIGludmFsaWQgbnVtYmVyIG9mIHJlc2VydmVkIHNlY3RvcnMgZm9yIGEgRkFUIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiIgorIqXVpaGlpKXrpbeluaXGpeCkzs29zPOlu6Wvpb+kzr/0pKwgRkFUIKXVpaGlpKXrpbeluaXGpeCkyKS3pMakz8nUwLWkx6S5oaMiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjg1Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGludmFsaWQgbnVtYmVyIG9mIEZBVHMuIgorbXNnc3RyICKl1aWhpaSl66W3pbmlxqXgpM4gRkFUIKTOv/SkrMnUwLWkx6S5oaMiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjEzOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhpcyBmaWxlIHN5c3RlbSBoYXMgYSBsb2dpY2FsIHNlY3RvciBzaXplIG9mICVkLiAgR05VIFBhcnRlZCBpcyBrbm93biBub3QgIgorInRvIHdvcmsgcHJvcGVybHkgd2l0aCBzZWN0b3Igc2l6ZXMgb3RoZXIgdGhhbiA1MTIgYnl0ZXMuIgorbXNnc3RyICIiCisipLOkzqXVpaGlpKXrpbeluaXGpeCkzs/Azf2lu6Wvpb+ltaWkpbqkzyAlZCCkx6S5LiAgpbulr6W/pbWlpKW6pKwgNTEyIKXQpaSlyCIKKyKwyrOwpMekzyBHTlUgUGFydGVkIKTPpKak3qSvxrCkq6TKpKSks6TIpKzDzqTppOykxqSkpN6kuaGjIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzoxNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmaWxlIHN5c3RlbSdzIENIUyBnZW9tZXRyeSBpcyAoJWQsICVkLCAlZCksIHdoaWNoIGlzIGludmFsaWQuICBUaGUgIgorInBhcnRpdGlvbiB0YWJsZSdzIENIUyBnZW9tZXRyeSBpcyAoJWQsICVkLCAlZCkuICBJZiB5b3Ugc2VsZWN0IElnbm9yZSwgdGhlICIKKyJmaWxlIHN5c3RlbSdzIENIUyBnZW9tZXRyeSB3aWxsIGJlIGxlZnQgdW5jaGFuZ2VkLiAgSWYgeW91IHNlbGVjdCBGaXgsIHRoZSAiCisiZmlsZSBzeXN0ZW0ncyBDSFMgZ2VvbWV0cnkgd2lsbCBiZSBzZXQgdG8gbWF0Y2ggdGhlIHBhcnRpdGlvbiB0YWJsZSdzIENIUyAiCisiZ2VvbWV0cnkuIgorbXNnc3RyICIiCisipLOkzqXVpaGlpKXrpbeluaXGpeCkziBDSFMgZ2VvbWV0cnkgpM8gKCVkLCAlZCwgJWQpIKTHydTAtaTHpLmho6XRobylxqWjpbel5yIKKyKl86XGobyl1qXrpM4gQ0hTIGdlb21ldHJ5IKTPICglZCwgJWQsICVkKSCkx6S5oaPMtbvrKEkppPLBqqTZpNCl1aWhpaSl66W3pbmlxiIKKyKl4KTOIENIUyBnZW9tZXRyeSCkz6S9pM6k3qTepMukyqTqpN6kuaGjvaTAtShGKaTywaqk2aTQoaKl1aWhpaSl66W3pbmlxqXgpM4gIgorIkNIUyBnZW9tZXRyeSCkz6GipdGhvKXGpaOlt6XnpfOkziBDSFMgZ2VvbWV0cnkgpMi556SmpOikpr2kwLWktaTspN6kuaGjIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzoyMTMKK21zZ2lkICJGQVQgYm9vdCBzZWN0b3Igc2F5cyBsb2dpY2FsIHNlY3RvciBzaXplIGlzIDAuICBUaGlzIGlzIHdlaXJkLiAiCittc2dzdHIgIiIKKyJGQVQgpM6l1qG8pcilu6Wvpb+ky6TPz8DN/aW7pa+lv6W1paSluqSsIDAgpMi98aSrpOykxqSkpN6kuaGipLOk7KTPpKqkq6S3pKSkxyIKKyKkuaGjIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzoyMTkKK21zZ2lkICJGQVQgYm9vdCBzZWN0b3Igc2F5cyB0aGVyZSBhcmUgbm8gRkFUIHRhYmxlcy4gIFRoaXMgaXMgd2VpcmQuICIKK21zZ3N0ciAiRkFUIKTOpdahvKXIpbulr6W/pMsgRkFUIKXGobyl1qXrpKykoqTqpN6ku6TzoaOks6TspM+kqqSrpLekpKTHpLmhoyIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6MjI1Cittc2dpZCAiRkFUIGJvb3Qgc2VjdG9yIHNheXMgY2x1c3RlcnMgYXJlIDAgc2VjdG9ycy4gIFRoaXMgaXMgd2VpcmQuICIKK21zZ3N0ciAiIgorIkZBVCCkzqXWobylyKW7pa+lv6TLpa+l6aW5pb+kzyAwIKW7pa+lv6THpKKk66TIvfGkq6TspMakpKTepLmho6SzpOykz6SqpKukt6SkIgorIqTHpLmhoyIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6MjM1Cittc2dpZCAiRmlsZSBzeXN0ZW0gaXMgRkFUMTIsIHdoaWNoIGlzIHVuc3VwcG9ydGVkLiIKK21zZ3N0ciAiRkFUMTIgpM+ltaXdobylyKS3pMakpKTepLuk86GjIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo0MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBpbmZvcm1hdGlvbiBzZWN0b3IgaGFzIHRoZSB3cm9uZyBzaWduYXR1cmUgKCV4KS4gIFNlbGVjdCBjYW5jZWwgZm9yIG5vdywgIgorImFuZCBzZW5kIGluIGEgYnVnIHJlcG9ydC4gIElmIHlvdSdyZSBkZXNwZXJhdGUsIGl0J3MgcHJvYmFibHkgc2FmZSB0byBpZ25vcmUuIgorbXNnc3RyICIiCisiaW5mb3JtYXRpb24gpbulr6W/pM6lt6Wwpc2lwaXjKCV4KaTPpN6kwaSspMOkxqSkpN6kuaGjvOi+wyhDKSCkt6TGpdClsKXspd2hvCIKKyKlyKTywfekw6TGpK+kwKS1pKSho6TipLekyaSmpMqkw6TGpOKkpKSkpM6kx6SipOyk0CDMtbvrKEkpIKS3pMak4qSkpKSkx6S3pOciCisipKahoyIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb3VudC5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgZGlyZWN0b3J5IGVudHJ5IGZvciAlczogZmlyc3QgY2x1c3RlciBpcyB0aGUgZW5kIG9mIGZpbGUgbWFya2VyLiIKK21zZ3N0ciAiIgorIiVzIKTOpcelo6Xspa+lyKXqpail86XIpeqkrMnUzsmkx6S5OiC6x73ppM6lr6Xppbmlv6SspdWloaWkpeukzr2qzruk8sm9pO+kuSIKKyKl3qG8pa+ky6TKpMOkxqSkpN6kuaGjIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvdW50LmM6MTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJCYWQgRkFUOiB1bnRlcm1pbmF0ZWQgY2hhaW4gZm9yICVzLiAgWW91IHNob3VsZCBydW4gZG9zZnNjayBvciBzY2FuZGlzay4iCittc2dzdHIgIiIKKyJGQVQgpMukoqTkpN6k6qSspKKk6qTepLmhoyVzIKTOIGNoYWluIKSsvarOu6S3pN6ku6TzoaNkb3Nmc2NrIKTkIHNjYW5kaXNrIKTyIgorIrzCudSkuaTrpNmkraTHpLmhoyIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb3VudC5jOjE3NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQmFkIEZBVDogY2x1c3RlciAlZCBvdXRzaWRlIGZpbGUgc3lzdGVtIGluIGNoYWluIGZvciAlcy4gIFlvdSBzaG91bGQgcnVuICIKKyJkb3Nmc2NrIG9yIHNjYW5kaXNrLiIKK21zZ3N0ciAiIgorIkZBVCCky6SipOSk3qTqpKykoqTqpN6kuaGjpa+l6aW5pb8gJWQoJXMgpM4gY2hhaW4ppM+l1aWhpaSl66W3pbmlxqXgpM6zsKTLpKIiCisipOqk3qS5oaNkb3Nmc2NrIKTkIHNjYW5kaXNrIKTyvMK51KS5pOuk2aStpMekuaGjIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvdW50LmM6MTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJCYWQgRkFUOiBjbHVzdGVyICVkIGlzIGNyb3NzLWxpbmtlZCBmb3IgJXMuICBZb3Ugc2hvdWxkIHJ1biBkb3Nmc2NrIG9yICIKKyJzY2FuZGlzay4iCittc2dzdHIgIiIKKyJGQVSky6SipOSk3qTqpKykoqTqpN6kuaGjpa+l6aW5pb8gJWQoJXMgpM5jaGFpbimkrGNyb3NzLWxpbmukt6TGpKSk3qS5oaMiCisiZG9zZnNja6Tkc2NhbmRpc2uk8rzCudSkuaTrpNmkraTHpLmhoyIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb3VudC5jOjIwMworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyAlZGssIGJ1dCBpdCBoYXMgJWQgY2x1c3RlcnMgKCVkaykuIgorbXNnc3RyICIlcyCkzyAlZGsgpMekuaSsoaIlZCClr6XppbmlvyglZGsppKKk6qTepLmhoyIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb3VudC5jOjI2NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGUgJXMgaXMgbWFya2VkIGFzIGEgc3lzdGVtIGZpbGUuICBUaGlzIG1lYW5zIG1vdmluZyBpdCBjb3VsZCBjYXVzZSAiCisic29tZSBwcm9ncmFtcyB0byBzdG9wIHdvcmtpbmcuIgorbXNnc3RyICIiCisipdWloaWkpesgJXMgpM+lt6W5pcal4KXVpaGlpKXrpMekuaGjpLOkzqXVpaGlpKXrpPLGsKSrpLekxqS3pN6kpqTIxrCkq6TKpK+kyiIKKyKk66XXpe2lsKXppeCkrKSipOqk3qS5oaMiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvdGFibGUuYzoxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZBVCAlZCBtZWRpYSAleCBkb2Vzbid0IG1hdGNoIHRoZSBib290IHNlY3RvcidzIG1lZGlhICV4LiAgWW91IHNob3VsZCAiCisicHJvYmFibHkgcnVuIHNjYW5kaXNrLiIKK21zZ3N0ciAiIgorIkZBVCAlZCBtZWRpYSAleCCkz6XWobylyKW7pa+lv6TObWVkaWEgJXggpMiw7MPXpLek3qS7pPOho3NjYW5kaXNrIKTyvMK51KS3pL8iCisiyv2krKSkpKSkx6S3pOekpqGjIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3RhYmxlLmM6MjY5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhdF90YWJsZV9zZXQ6IGNsdXN0ZXIgJWxkIG91dHNpZGUgZmlsZSBzeXN0ZW0iCittc2dzdHIgImZhdF90YWJsZV9zZXQ6IKWvpemluaW/ICVsZCCkz6XVpaGlpKXrpbeluaXGpeCkzrOwpMukoqTqpN6kuaGjIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3RhYmxlLmM6MzAxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhdF90YWJsZV9nZXQ6IGNsdXN0ZXIgJWxkIG91dHNpZGUgZmlsZSBzeXN0ZW0iCittc2dzdHIgImZhdF90YWJsZV9nZXQ6IKWvpemluaW/ICVsZCCkz6XVpaGlpKXrpbeluaXGpeCkzrOwpMukoqTqpN6kuaGjIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3RhYmxlLmM6MzQzCittc2dpZCAiZmF0X3RhYmxlX2FsbG9jX2NsdXN0ZXI6IG5vIGZyZWUgY2x1c3RlcnMiCittc2dzdHIgImZhdF90YWJsZV9hbGxvY19jbHVzdGVyOiC29aStpa+l6aW5pb+krKSipOqk3qS7pPOhoyIKKworIzogbGlicGFydGVkL2ZzL2xpbnV4X3N3YXAvbGludXhfc3dhcC5jOjI3NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVW5yZWNvZ25pc2VkIG9sZCBzdHlsZSBsaW51eCBzd2FwIHNpZ25hdHVyZSAnJTEwcycuIgorbXNnc3RyICJMaW51eCCkziBzd2FwIHNpZ25hdHVyZSAnJTEwcycgpPLHp7yxpMekraTepLuk86GjIgorCisjOiBsaWJwYXJ0ZWQvZnMvbGludXhfc3dhcC9saW51eF9zd2FwLmM6MzE4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVbnJlY29nbmlzZWQgbmV3IHN0eWxlIGxpbnV4IHN3YXAgc2lnbmF0dXJlICclMTBzJy4iCittc2dzdHIgIkxpbnV4IKTOIHN3YXAgc2lnbmF0dXJlICclMTBzJyCk8senvLGkx6StpN6ku6TzoaMiCisKKyM6IGxpYnBhcnRlZC9mcy9saW51eF9zd2FwL2xpbnV4X3N3YXAuYzozNTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVucmVjb2duaXNlZCBzd3N1c3AgbGludXggc3dhcCBzaWduYXR1cmUgJyU5cycuIgorbXNnc3RyICJMaW51eCCkziBzd2FwIHNpZ25hdHVyZSAnJTEwcycgpPLHp7yxpMekraTepLuk86GjIgorCisjOiBsaWJwYXJ0ZWQvZnMvbGludXhfc3dhcC9saW51eF9zd2FwLmM6NDM0Cittc2dpZCAiVG9vIG1hbnkgYmFkIHBhZ2VzLiIKK21zZ3N0ciAiydTOyaXaobyluKSswr+kuaSupN6kuaGjIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2FkdmZzLmM6MTIxIGxpYnBhcnRlZC9mcy9oZnMvYWR2ZnNfcGx1cy5jOjEyMgorIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjQxNCBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NTA4CisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo1MzkgbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NjU4CisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo3NzIKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gY29udGFpbnMgZXJyb3JzLiIKK21zZ3N0ciAipdWloaWkpeult6W5pcal4KTLpail6aG8pKykoqTqpN6kuaGjIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2FkdmZzX3BsdXMuYzoyODcKK21zZ2lkICJCYWQgYmxvY2tzIGNvdWxkIG5vdCBiZSByZWFkLiIKK21zZ3N0ciAiydTAtaTKpdal7aXDpa+kz8bJpOGk3qS7pPOkx6S3pL+hoyIKKworIzogbGlicGFydGVkL2ZzL2hmcy9jYWNoZS5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVHJ5aW5nIHRvIHJlZ2lzdGVyIGFuIGV4dGVudCBzdGFydGluZyBhdCBibG9jayAweCVYLCBidXQgYW5vdGhlciBvbmUgYWxyZWFkeSAiCisiZXhpc3RzIGF0IHRoaXMgcG9zaXRpb24uICBZb3Ugc2hvdWxkIGNoZWNrIHRoZSBmaWxlIHN5c3RlbSEiCittc2dzdHIgIiIKKyKl1qXtpcOlryAweCVYIKSrpOm7z6TepOsgZXh0ZW50IKTyxdDPv6S3pOikpqTIpLek3qS3pL+krKGitPuky8K+pM6k4qTOpKyks6TOIgorIqXRobylxqWjpbel56XzpMvCuLrfpLek3qS5oaOks6TOpdWloaWkpeult6W5pcal4KTypcGlp6XDpa+kt6TGpK+kwKS1pKShoyIKKworIzogbGlicGFydGVkL2ZzL2hmcy9jYWNoZS5jOjIxNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVHJ5aW5nIHRvIG1vdmUgYW4gZXh0ZW50IGZyb20gYmxvY2sgT3glWCB0byBibG9jayBPeCVYLCBidXQgYW5vdGhlciBvbmUgIgorImFscmVhZHkgZXhpc3RzIGF0IHRoaXMgcG9zaXRpb24uICBUaGlzIHNob3VsZCBub3QgaGFwcGVuISIKK21zZ3N0ciAiIgorIqXWpe2lw6WvIDB4JVggpKuk6aXWpe2lw6WvIDB4JVikyyBleHRlbnQgpPKw3MawpLek6KSmpMikt6TepLekv6SsoaK0+6TLwr6kzqTiIgorIqTOpKyks6TOpdGhvKXGpaOlt6XnpfOky8K4ut+kt6TepLmho6SzpOykz6SipOqkqKTepLuk86GjIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGUuYzoxNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHVwZGF0ZSB0aGUgZXh0ZW50IGNhY2hlIGZvciBIRlMgZmlsZSB3aXRoIENOSUQgJVguIgorbXNnc3RyICJIRlMgpdWloaWkpesoQ05JRCAlWCmkziBleHRlbnQgY2FjaGUgpPK5ub+3pMekraTepLuk86THpLekv6GjIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGUuYzoxODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIHRvIHJlYWQgSEZTIGZpbGUgd2l0aCBDTklEICVYIGJlaGluZCBFT0YuIgorbXNnc3RyICJFT0YgpPKx26SopMYgSEZTIKXVpaGlpKXrKENOSUQgJVgppPLGyaTipKakyKS3pN6kt6S/oaMiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZS5jOjE5MCBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGUuYzoyMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgc2VjdG9yICVsbGkgb2YgSEZTIGZpbGUgd2l0aCBDTklEICVYLiIKK21zZ3N0ciAipbulr6W/ICVsbGkgKEhGUyCl1aWhpaSl6ywgQ05JRCAlWCmkrLirpMSkq6TqpN6ku6TzoaMiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZS5jOjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgdG8gd3JpdGUgSEZTIGZpbGUgd2l0aCBDTklEICVYIGJlaGluZCBFT0YuIgorbXNnc3RyICJFT0YgpPKx26SopMYgSEZTIKXVpaGlpKXrKENOSUQgJVgppMu98aStpLOk4qSmpMikt6TepLekv6GjIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGVfcGx1cy5jOjE1NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgdXBkYXRlIHRoZSBleHRlbnQgY2FjaGUgZm9yIEhGUysgZmlsZSB3aXRoIENOSUQgJVguIgorbXNnc3RyICJIRlMrIKXVpaGlpKXrKENOSUQgJVgppM4gZXh0ZW50IGNhY2hlIKTyubm/t6THpK2k3qS7pPOkx6S3pL+hoyIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlX3BsdXMuYzoyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIHRvIHJlYWQgSEZTKyBmaWxlIHdpdGggQ05JRCAlWCBiZWhpbmQgRU9GLiIKK21zZ3N0ciAiRU9GIKTysdukqKTGIEhGUysgpdWloaWkpesoQ05JRCAlWCmk8sbJpOKkpqTIpLek3qS3pL+hoyIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlX3BsdXMuYzoyMTMgbGlicGFydGVkL2ZzL2hmcy9maWxlX3BsdXMuYzoyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgc2VjdG9yICVsbGkgb2YgSEZTKyBmaWxlIHdpdGggQ05JRCAlWC4iCittc2dzdHIgIqW7pa+lvyAlbGxpIChIRlMrIKXVpaGlpKXrLCBDTklEICVYKaSsuKukxKSrpOqk3qS7pPOhoyIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlX3BsdXMuYzoyNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIHRvIHdyaXRlIEhGUysgZmlsZSB3aXRoIENOSUQgJVggYmVoaW5kIEVPRi4iCittc2dzdHIgIkVPRiCk8rHbpKikxiBIRlMrIKXVpaGlpKXrKENOSUQgJVgppMu98aStpLOk4qSmpMikt6TepLekv6GjIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjIzMgorbXNnaWQgIlNvcnJ5LCBIRlMgY2Fubm90IGJlIHJlc2l6ZWQgdGhhdCB3YXkgeWV0LiIKK21zZ3N0ciAiSEZTIKTPpN6kwKS9pM6k6KSmpMul6qW1paSluqTHpK2k3qS7pPOhoyIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzoyNjIgbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo2NDEKK21zZ2lkICJEYXRhIHJlbG9jYXRpb24gaGFzIGZhaWxlZC4iCittc2dzdHIgIqXHobylv6TOusbH28PWpMu8usfUpLek3qS3pL+hoyIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzoyODEKK21zZ2lkICJEYXRhIHJlbG9jYXRpb24gbGVmdCBzb21lIGRhdGEgaW4gdGhlIGVuZCBvZiB0aGUgdm9sdW1lLiIKK21zZ3N0ciAipcehvKW/pM66xsfbw9ak8qS3pN6kt6S/pKyhoqXcpeql5aG8peCkzrrHuOWky7vEpMOkv6XHobylv6SspKKk6qTepLmhoyIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzozMjAKK21zZ2lkICJ3cml0aW5nIEhGUyBNYXN0ZXIgRGlyZWN0b3J5IEJsb2NrIgorbXNnc3RyICJIRlMgpd6luaW/pcelo6Xspa+lyKXqpdal7aXDpa+k8r3xpK2ks6TzpMekpKTepLkiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NDY4Cittc2dpZCAiTm8gdmFsaWQgSEZTWytYXSBzaWduYXR1cmUgaGFzIGJlZW4gZm91bmQgd2hpbGUgb3BlbmluZy4iCittc2dzdHIgIs2tuPqkyiBIRlNbK1hdIKW3pbClzaXBpeOkrLirpMSkq6TqpN6ku6TzoaMiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NDc4CisjLCBjLWZvcm1hdAorbXNnaWQgIlZlcnNpb24gJWQgb2YgSEZTKyBpc24ndCBzdXBwb3J0ZWQuIgorbXNnc3RyICJIRlMrIKTOpdChvKW4peel8yAlZCCkz6W1pd2hvKXIpLekxqSkpN6ku6TzoaMiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NDg5CisjLCBjLWZvcm1hdAorbXNnaWQgIlZlcnNpb24gJWQgb2YgSEZTWCBpc24ndCBzdXBwb3J0ZWQuIgorbXNnc3RyICJIRlNYIKTOpdChvKW4peel8yAlZCCkz6W1pd2hvKXIpLekxqSkpN6ku6TzoaMiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NjcyCittc2dpZCAiRGF0YSByZWxvY2F0aW9uIGxlZnQgc29tZSBkYXRhIGF0IHRoZSBlbmQgb2YgdGhlIHZvbHVtZS4iCittc2dzdHIgIqXHobylv6TOusbH28PWpPKkt6TepLekv6SsoaKl3KXqpeWhvKXgpM66x7jlpMu7xKTDpL+lx6G8pb+krKSipOqk3qS5oaMiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NzIwCittc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0aGUgYWxsb2NhdGlvbiBmaWxlLiIKK21zZ3N0ciAiYWxsb2NhdGlvbiBmaWxlIKTyvfGkraSzpN/D5qTLpail6aG8pKzIr8C4pLek3qS3pL+hoyIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo3MzUKK21zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRoZSBjb21wYXRpYmlsaXR5IHBhcnQgb2YgdGhlIGFsbG9jYXRpb24gZmlsZS4iCittc2dzdHIgIiIKKyJhbGxvY2F0aW9uIGZpbGUgpM4gY29tcGF0aWJpbGl0eSBwYXJ0IKTyvfGkraSzpN/D5qTLpail6aG8pKzIr8C4pLek3qS3pL+hoyIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo3NTAKK21zZ2lkICJ3cml0aW5nIEhGUysgVm9sdW1lIEhlYWRlciIKK21zZ3N0ciAiSEZTKyCl3KXqpeWhvKXgpdilw6XApPK98aStpLOk38PmpMekuSIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo4NTAKK21zZ2lkICJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBsb29raW5nIGZvciB0aGUgbWFuZGF0b3J5IGJhZCBibG9ja3MgZmlsZS4iCittc2dzdHIgIsnUwLWl1qXtpcOlr7Dszfel1aWhpaSl66Tyw7Wkt6TGpKSk66TIpK2ky6WopemhvKSsyK/AuKS3pN6kt6S/oaMiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6OTA0Cittc2dpZCAiIgorIkl0IHNlZW1zIHRoZXJlIGlzIGFuIGVycm9yIGluIHRoZSBIRlMgd3JhcHBlcjogdGhlIGJhZCBibG9ja3MgZmlsZSBkb2Vzbid0ICIKKyJjb250YWluIHRoZSBlbWJlZGRlZCBIRlMrIHZvbHVtZS4iCittc2dzdHIgIiIKKyJIRlMgpemlw6XRobyky6WopemhvKSspKKk66TopKakx6S5oaPJ1MC1pdal7aXDpa+w7M33pdWloaWkpeukzsPmpMuhomVtYmVkZGVkICIKKyJIRlMrIKXcpeql5aG8peCkrKSipOqk3qS7pPOhoyIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo5NDAKK21zZ2lkICJTb3JyeSwgSEZTKyBjYW5ub3QgYmUgcmVzaXplZCB0aGF0IHdheSB5ZXQuIgorbXNnc3RyICJIRlMgpM+k3qTApL2kzqTopKaky6XqpbWlpKW6pMekraTepLuk86GjIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjk3NQorbXNnaWQgInNocmlua2luZyBlbWJlZGRlZCBIRlMrIHZvbHVtZSIKK21zZ3N0ciAiZW1iZWRkZWQgSEZTKyCl3KXqpeWhvKXgpPK9zL6upLekxqSkpN6kuSIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo5OTEKK21zZ2lkICJSZXNpemluZyB0aGUgSEZTKyB2b2x1bWUgaGFzIGZhaWxlZC4iCittc2dzdHIgIkhGUysgpdyl6qXlobyl4KTOpeqltaWkpbqky7y6x9Skt6TepLekv6GjIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjk5OAorbXNnaWQgInNocmlua2luZyBIRlMgd3JhcHBlciIKK21zZ3N0ciAiSEZTIKXppcOl0aG8pPK9zL6upLekxqSkpN6kuSIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzoxMDA3Cittc2dpZCAiVXBkYXRpbmcgdGhlIEhGUyB3cmFwcGVyIGhhcyBmYWlsZWQuIgorbXNnc3RyICJIRlMgpemlw6XRobykzrm5v7eky7y6x9Skt6TepLekv6GjIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjExMDkgbGlicGFydGVkL2ZzL2hmcy9oZnMuYzoxMTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGlzIGlzIG5vdCBhIHJlYWwgJXMgY2hlY2suICBUaGlzIGlzIGdvaW5nIHRvIGV4dHJhY3Qgc3BlY2lhbCBsb3cgbGV2ZWwgIgorImZpbGVzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuIgorbXNnc3RyICIiCisipLOk7KTPIHJlYWwgJXMgY2hlY2sgpMekz6SipOqk3qS7pPOho3NwZWNpYWwgbG93IGxldmVsIGZpbGUgpPKlx6XQpcOlsKTOpL+k4SIKKyKky7zopOq90KS3pN6kuaGjIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzoxNTUKK21zZ2lkICJCYWQgYmxvY2sgbGlzdCBoZWFkZXIgY2hlY2tzdW0uIgorbXNnc3RyICKl1qXtpcOlr6XqpbmlyKXYpcOlwKTOpcGlp6XDpa+ltaXgpKzJ1MC1pMekuaGjIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzoxNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkludmFsaWQgc2l6ZSBvZiBhIHRyYW5zYWN0aW9uIGJsb2NrIHdoaWxlIHJlcGxheWluZyB0aGUgam91cm5hbCAoJWkgYnl0ZXMpLiIKK21zZ3N0ciAiIgorIqW4peOhvKXKpeukzqXqpdel7KWkw+aky6XIpeml86W2pa+lt6XnpfOl1qXtpcOlr6TOpbWlpKW6ICglaSCl0KWkpcgpIKTOydTAtaSsIgorIqSipOqk3qS3pL+hoyIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MjYwCittc2dpZCAiIgorIkpvdXJuYWwgc3RvcmVkIG91dHNpZGUgb2YgdGhlIHZvbHVtZSBhcmUgbm90IHN1cHBvcnRlZC4gIFRyeSB0byBkZXNhY3RpdmF0ZSAiCisidGhlIGpvdXJuYWwgYW5kIHJ1biBQYXJ0ZWQgYWdhaW4uIgorbXNnc3RyICIiCisipbil46G8pcql66Ssysyl3KXqpeWhvKXgpMukoqTrIEhGUysgpM+ltaXdobylyKS3pMakpKTepLuk86Gjpbil46G8pcql66TyzLW4+iIKKyKky6S3pMakq6TpweC67qTyudSkw6TGpK+kwKS1pKShoyIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MjcxCittc2dpZCAiSm91cm5hbCBvZmZzZXQgb3Igc2l6ZSBpcyBub3QgbXVsdGlwbGUgb2YgdGhlIHNlY3RvciBzaXplLiIKK21zZ3N0ciAipbil46G8pcql66TOpaql1aW7pcOlyKSrpbWlpKW6pKylu6Wvpb+ltaWkpbqkzsfcv/Skx6TPpKKk6qTepLuk86GjIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzoyOTIKK21zZ2lkICJJbmNvcnJlY3QgbWFnaWMgdmFsdWVzIGluIHRoZSBqb3VybmFsIGhlYWRlci4iCittc2dzdHIgIqW4peOhvKXKpeul2KXDpcCkzqXepbilw6Wvpcql86XQobykrMnUwLWkx6S5oaMiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjMwMgorbXNnaWQgIkpvdXJuYWwgc2l6ZSBtaXNtYXRjaCBiZXR3ZWVuIGpvdXJuYWwgaW5mbyBibG9jayBhbmQgam91cm5hbCBoZWFkZXIuIgorbXNnc3RyICIiCisipbil46G8pcql66W1paSluqTLpMSkpKTGoaKluKXjobylyqXrpaSl86XVpaml1qXtpcOlr6TIpbil46G8pcql66XYpcOlwKTIpMfJ1CIKKyLAsLnnpKykoqTqpN6kuaGjIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozMTQKK21zZ2lkICJTb21lIGhlYWRlciBmaWVsZHMgYXJlIG5vdCBtdWx0aXBsZSBvZiB0aGUgc2VjdG9yIHNpemUuIgorbXNnc3RyICKl2KXDpcCl1aWjobyl66XJpM7D5qTLpbulr6W/pbWlpKW6pM7H3L/0pMukyqTDpMakyqSkpOKkzqSspKKk6qTepLmhoyIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MzIzCittc2dpZCAiIgorIlRoZSBzZWN0b3Igc2l6ZSBzdG9yZWQgaW4gdGhlIGpvdXJuYWwgaXMgbm90IDUxMiBieXRlcy4gIFBhcnRlZCBvbmx5ICIKKyJzdXBwb3J0cyA1MTIgYnl0ZXMgbGVuZ3RoIHNlY3RvcnMuIgorbXNnc3RyICIiCisipbil46G8pcql66Ssyt3CuKS1pOykxqSkpOulu6Wvpb+kzqW1paSluqSsIDUxMiCl0KWkpcikx6TPpKKk6qTepLuk86GjUGFydGVkICIKKyKkx6TPIDUxMiCl0KWkpcikzqW7pa+lv6S3pKultaXdobylyKS3pMakpKTepLuk86GjIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozMzUKK21zZ2lkICJCYWQgam91cm5hbCBjaGVja3N1bS4iCittc2dzdHIgIqW4peOhvKXKpeukzqXBpaelw6WvpbWl4KSsydTAtaTHpLmhoyIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MzUzCittc2dpZCAiIgorIlRoZSBqb3VybmFsIGlzIG5vdCBlbXB0eS4gIFBhcnRlZCBtdXN0IHJlcGxheSB0aGUgdHJhbnNhY3Rpb25zIGJlZm9yZSAiCisib3BlbmluZyB0aGUgZmlsZSBzeXN0ZW0uICBUaGlzIHdpbGwgbW9kaWZ5IHRoZSBmaWxlIHN5c3RlbS4iCittc2dzdHIgIiIKKyKluKXjobylyqXrpKy29aTHpM+koqTqpN6ku6TzoaNQYXJ0ZWQgpM+l1aWhpaSl66W3pbmlxqXgpPKlqqG8pdel86S5pOvBsKTLpcil6SIKKyKl86W2pa+lt6XnpfOkzqXqpdel7KWkpPKkt6TKpLGk7KTQpMqk6qTepLuk86Gjpeql16XspaSkuaTrpMil1aWhpaSl66W3pbmlxqXgIgorIqTPytG5uaS1pOyk3qS5oaMiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjM4MQorbXNnaWQgIiIKKyJUaGUgdm9sdW1lIGhlYWRlciBvciB0aGUgbWFzdGVyIGRpcmVjdG9yeSBibG9jayBoYXMgY2hhbmdlZCB3aGlsZSByZXBsYXlpbmcgIgorInRoZSBqb3VybmFsLiAgWW91IHNob3VsZCByZXN0YXJ0IFBhcnRlZC4iCittc2dzdHIgIiIKKyKl3KXqpeWhvKXgpdilw6XApKul3qW5pb+hvKXHpaOl7KWvpcil6qXWpe2lw6WvpKyluKXjobylyqXrpM6l6qXXpeylpMPmpMvK0bm5IgorIqS1pOyk3qS3pL+ho1BhcnRlZCCk8rrGta/GsKS3pMakr6TApLWkpKGjIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3Byb2JlLmM6NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBhcnRlZCBjYW4ndCB1c2UgSEZTIGZpbGUgc3lzdGVtcyBvbiBkaXNrcyB3aXRoIGEgc2VjdG9yIHNpemUgbm90IGVxdWFsIHRvICUiCisiZCBieXRlcy4iCittc2dzdHIgIiIKKyJQYXJ0ZWQgpM+hoqW7pa+lv6W1paSluqSsICVkIKXQpaSlyKTHpMqkpKXHpaOluaWvpMekzyBIRlMgpdWloaWkpeult6W5pcal4KTyIgorIrvIpKik3qS7pPOhoyIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjE1MSBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzoxNTUKK21zZ2lkICJBbiBleHRlbnQgaGFzIG5vdCBiZWVuIHJlbG9jYXRlZC4iCittc2dzdHIgImV4dGVudCCkz7rGx9vD1qS1pOyk3qS7pPOkx6S3pL+hoyIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjI1MSBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzozMDcKK21zZ2lkICIiCisiQSByZWZlcmVuY2UgdG8gYW4gZXh0ZW50IGNvbWVzIGZyb20gYSBwbGFjZSBpdCBzaG91bGQgbm90LiAgWW91IHNob3VsZCBjaGVjayAiCisidGhlIGZpbGUgc3lzdGVtISIKK21zZ3N0ciAiIgorImV4dGVudCCk2KTOu7K+yKTPpKKk6qSopMqkpKTIpLOk7aSrpOmkyqS1pOykxqSkpN6kuaGjpdWloaWkpeult6W5pcal4KTypcGlp6XDIgorIqWvpLekxqSvpMCktaSkoaMiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzozODEKK21zZ2lkICJUaGlzIEhGUyB2b2x1bWUgaGFzIG5vIGNhdGFsb2cgZmlsZS4gIFRoaXMgaXMgdmVyeSB1bnVzdWFsISIKK21zZ3N0ciAiIgorIqSzpM4gSEZTIKXcpeql5aG8peCky6TPIGNhdGFsb2cgZmlsZSCkrKSipOqk3qS7pPOho6SzpOykz6SipN6k6qSipOqkqKTKpKSks6TIIgorIqTHpLmhoyIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjQ3NQorbXNnaWQgIlRoaXMgSEZTIHZvbHVtZSBoYXMgbm8gZXh0ZW50cyBvdmVyZmxvdyBmaWxlLiAgVGhpcyBpcyBxdWl0ZSB1bnVzdWFsISIKK21zZ3N0ciAiIgorIqSzpM4gSEZTIKXcpeql5aG8peCky6TPIGV4dGVudHMgb3ZlcmZsb3cgZmlsZSCkrKSipOqk3qS7pPOho6SzpOykz6TbpMik86TJpKIiCisipOqkqKTKpKSks6TIpMekuaGjIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NTE3IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjY2OAorbXNnaWQgIiIKKyJUaGUgZXh0ZW50cyBvdmVyZmxvdyBmaWxlIHNob3VsZCBub3QgY29udGFpbiBpdHMgb3duIGV4dGVudHMhICBZb3Ugc2hvdWxkICIKKyJjaGVjayB0aGUgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICIiCisiZXh0ZW50cyBvdmVyZmxvdyBmaWxlIKTPvKvKrLyrv8ikziBleHRlbnQgpPK03qTzpMekz6SkpLGk3qS7pPOho6XVpaGlpKXrpbeluSIKKyKlxqXgpPKlwaWnpcOlr6S3pMakr6TApLWkpKGjIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NTc0IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjg0NworbXNnaWQgIkNvdWxkIG5vdCBjYWNoZSB0aGUgZmlsZSBzeXN0ZW0gaW4gbWVtb3J5LiIKK21zZ3N0ciAipdWloaWkpeult6W5pcal4KTypeGl4qXqpMulraXjpcOlt6XlpMekraTepLuk86GjIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NjM1IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjkwOAorbXNnaWQgIkJhZCBibG9ja3MgbGlzdCBjb3VsZCBub3QgYmUgbG9hZGVkLiIKK21zZ3N0ciAiydTAtaXWpe2lw6WvsOzN96XVpaGlpKXrpKzGyaTfpLOk4aTepLuk86THpLekv6GjIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NjQ5IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjkyNAorbXNnaWQgIkFuIGVycm9yIG9jY3VycmVkIGR1cmluZyBleHRlbnQgcmVsb2NhdGlvbi4iCittc2dzdHIgImV4dGVudCCkzrrGx9vD1sPmpMulqKXpobykz8ivwLikt6TepLekv6GjIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo0OTUKK21zZ2lkICJUaGlzIEhGUysgdm9sdW1lIGhhcyBubyBjYXRhbG9nIGZpbGUuICBUaGlzIGlzIHZlcnkgdW51c3VhbCEiCittc2dzdHIgIiIKKyKks6TOIEhGUysgpdyl6qXlobyl4KTLpM8gY2F0YWxvZyBmaWxlIKSspKKk6qTepLuk86GjpLOk7KTPpKKk3qTqpKKk6qSopMqkpKSzIgorIqTIpMekuaGjIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo2MTkKK21zZ2lkICJUaGlzIEhGUysgdm9sdW1lIGhhcyBubyBleHRlbnRzIG92ZXJmbG93IGZpbGUuICBUaGlzIGlzIHF1aXRlIHVudXN1YWwhIgorbXNnc3RyICIiCisipLOkziBIRlMrIKXcpeql5aG8peCky6TPIGV4dGVudHMgb3ZlcmZsb3cgZmlsZSCkrKSipOqk3qS7pPOho6SzpOykz6TbpMik86TJpKIiCisipOqkqKTKpKSks6TIpMekuaGjIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6OTQKK21zZ2lkICJkaXNwbGF5cyB0aGlzIGhlbHAgbWVzc2FnZSIKK21zZ3N0ciAipLOkzqXYpeul16Tyyb28qKS5pOsiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo5NQorIywgZnV6enkKK21zZ2lkICJsaXN0cyBwYXJ0aXRpb24gbGF5b3V0IG9uIGFsbCBibG9jayBkZXZpY2VzIgorbXNnc3RyICK4ob3QpLekv8G0pcel0KWkpbmkzqXRobylxqWjpbel56XzpcahvKXWpeuk8sm9vKgiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo5NgorbXNnaWQgImRpc3BsYXlzIG1hY2hpbmUgcGFyc2VhYmxlIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6OTcKK21zZ2lkICJuZXZlciBwcm9tcHRzIGZvciB1c2VyIGludGVydmVudGlvbiIKK21zZ3N0ciAipeahvKW2pMuy8Mb+pLWku6TKpKQiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo5OAorbXNnaWQgImRpc3BsYXlzIHRoZSB2ZXJzaW9uIgorbXNnc3RyICKl0KG8pbil56XzpPLJvbyopLmk6yIKKworIzogcGFydGVkL3BhcnRlZC5jOjExMQorbXNnaWQgIiIKKyJOVU1CRVIgaXMgdGhlIHBhcnRpdGlvbiBudW1iZXIgdXNlZCBieSBMaW51eC4gIE9uIE1TLURPUyBkaXNrIGxhYmVscywgdGhlICIKKyJwcmltYXJ5IHBhcnRpdGlvbnMgbnVtYmVyIGZyb20gMSB0byA0LCBsb2dpY2FsIHBhcnRpdGlvbnMgZnJvbSA1IG9ud2FyZHMuXG4iCittc2dzdHIgIiIKKyJOVU1CRVIgpM8gTGludXggpauhvKXNpeuky6TopMOkxqXRobylxqWjpbel56XzyNa55qTIpLekxrvIpO+k7KTepLmho01TLURPUyAiCisipcelo6W5pa+l6aXZpeukx6TPoaK08MvcpdGhvKXGpaOlt6XnpfPI1rnmpM8gMSCkq6TpIDQgpN6kx6THoaLPwM39pdGhvKXGpaMiCisipbel56XzpM8gNSCwyrnfpMikyqTqpN6kuaGjXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMTQKK21zZ2lkICJMQUJFTC1UWVBFIGlzIG9uZSBvZjogIgorbXNnc3RyICKl6aXZpeukzrzvzuCkz7yhpM6kpqTBpKuk6cGqpNOk3qS5OiAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMTUKK21zZ2lkICJGTEFHIGlzIG9uZSBvZjogIgorbXNnc3RyICKl1aXppbCkz7yhpM6kpqTBpKuk6cGqpNOk3qS5OiAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMTYKK21zZ2lkICJVTklUIGlzIG9uZSBvZjogIgorbXNnc3RyICJVTklUIKTPvKGkzqSmpMGkq6Tpwaqk06TepLk6ICIKKworIzogcGFydGVkL3BhcnRlZC5jOjExNworbXNnaWQgIlBBUlQtVFlQRSBpcyBvbmUgb2Y6IHByaW1hcnksIGxvZ2ljYWwsIGV4dGVuZGVkXG4iCittc2dzdHIgIiIKKyKl0aG8pcalo6W3peel86TOvO/O4KTPvKGkzqSmpMGkzqTJpOykq6TIpMqk6qTepLk6IKXXpemlpKXepeqhos/Azf2horPIxKVcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjExOQorbXNnaWQgIkZTLVRZUEUgaXMgb25lIG9mOiAiCittc2dzdHIgIqXVpaGlpKXrpbeluaXGpeCkzrzvzuCkz7yhpM6kpqTBpKuk6cGqpNOk3qS5OiAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjAKK21zZ2lkICIiCisiU1RBUlQgYW5kIEVORCBhcmUgZGlzayBsb2NhdGlvbnMsIHN1Y2ggYXMgNEdCIG9yIDEwJS4gIE5lZ2F0aXZlIHZhbHVlcyBjb3VudCAiCisiZnJvbSB0aGUgZW5kIG9mIHRoZSBkaXNrLiAgRm9yIGV4YW1wbGUsIC0xcyBzcGVjaWZpZXMgZXhhY3RseSB0aGUgbGFzdCAiCisic2VjdG9yLlxuIgorbXNnc3RyICIiCisiU1RBUlQgpMggRU5EIKTPoaKlx6Wjpbmlr77lpM6wzMPWpPIgNEcgpOQgMTAlIKTKpMmkx8m9pO+kt6TepLmho8nppM7DzaTPpceloyIKKyKluaWvpM69qqTvpOqkq6TppM7DzaTLpMqk6qTepLmho87jpKik0KGiLTFzIKTPoaK6x7jlpM6lu6Wvpb+k8rvYpLek3qS5oaNcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMworbXNnaWQgIlNUQVRFIGlzIG9uZSBvZjogb24sIG9mZlxuIgorbXNnc3RyICK+9cLWpM8gb24gpKsgb2ZmIKTOpMmkwaTppKtcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyNAorbXNnaWQgIkRFVklDRSBpcyB1c3VhbGx5IC9kZXYvaGRhIG9yIC9kZXYvc2RhXG4iCittc2dzdHIgIqXHpdClpKW5pM+kv6SkpMakpCAvZGV2L2hkYSCkqyAvZGV2L3NkYSCkx6S5oaNcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyNQorbXNnaWQgIk5BTUUgaXMgYW55IHdvcmQgeW91IHdhbnRcbiIKK21zZ3N0ciAizL7BsKTOyfTKrKTPx6Sw1aTOw7G47FxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTI2Cittc2dpZCAiVGhlIHBhcnRpdGlvbiBtdXN0IGhhdmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgRlMtVFlQRXM6ICIKK21zZ3N0ciAiIgorIqXRobylxqWjpbel56XzpM6l1aWhpaSl66W3pbmlxqXgpM+wyrK8pM6kpqTBpM6kpKS6pOykq6THpMqksaTspNCkyqTqpN6ku6TzOiAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMzAKKyMsIGZ1enp5Cittc2dpZCAiIgorIkNvcHlyaWdodCAoQykgMTk5OCAtIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuXG4iCisiVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmUsIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLlxuIgorIlxuIgorIlRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuIgorImJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4iCisiTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuIgorIkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4iCisiXG4iCittc2dzdHIgIiIKKyJDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLlxuIgorIqSzpM6l16XtpbCl6aXgpM8gR1BMIKTLtPCkxaSkpL+l1aXqobylvaXVpcilpqWnpaKkx6S5oaNcbiIKKyLG/MvcuOzM9aTLtNikt6TGpM8gSGlyb3NoaSBUYWtla2F3YSA8c2lhbkBiaWcub3IuanA+IKTepMekqqTNpKykpKS3pN6kuaGjXG4iCisiXG4iCisiy9yl16XtpbCl6aXgpM/Nrc3RpMikz7vXpKSk3qS5pKyhosjSyduky6SipL+kw6TGpM+horvUvuzArbXapNPGw8TqzNzFqsWsuefArSIKKyKky6TEpKSkxqTOsMXM26TOyt2+2qTytN6k4aTGoaKkpKSrpMqk68rdvtqk4rnUpMqkpKTepLuk86Gjvty62aTLpMSkpKTGpM9HTlUgIgorIrDsyMy4+M2tu8jN0bX2wvq98aTypKrGyaTfpK+kwKS1pKSho1xuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiUwLmYlJVx0KHRpbWUgbGVmdCAlLjJkOiUuMmQpIgorbXNnc3RyICIlMC5mJSVcdCi7xKTqu/601iAlLjJkOiUuMmQpIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQYXJ0aXRpb24gJXMgaXMgYmVpbmcgdXNlZC4gWW91IG11c3QgdW5tb3VudCBpdCBiZWZvcmUgeW91IG1vZGlmeSBpdCB3aXRoICIKKyJQYXJ0ZWQuIgorbXNnc3RyICIiCisipdGhvKXGpaOlt6XnpfMgJXMgpM+7yM3Rw+akx6S5oaNQYXJ0ZWQgpMfB4LrupLmk68GwpMsgdW5tb3VudCCkt6TGpK+kwKS1pKShoyIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICJQYXJ0aXRpb24ocykgb24gJXMgYXJlIGJlaW5nIHVzZWQuIgorbXNnc3RyICIlcyCkzqXRobylxqWjpbel56XzpKy7yM3Rw+akx6S5oaMiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjMKK21zZ2lkICIiCisiVGhlIGV4aXN0aW5nIGZpbGUgc3lzdGVtIHdpbGwgYmUgZGVzdHJveWVkIGFuZCBhbGwgZGF0YSBvbiB0aGUgcGFydGl0aW9uICIKKyJ3aWxsIGJlIGxvc3QuIERvIHlvdSB3YW50IHRvIGNvbnRpbnVlPyIKK21zZ3N0ciAiIgorIqSkpN7CuLrfpLekxqSkpOul1aWhpaSl66W3pbmlxqXgpM/Hy7L1pLWk7KGipLOkzqXRobylxqWjpbel56XzpM7BtKXHobylv6SsvLoiCisipO+k7KTepLmho8KzudSkt6TepLmkq6GpIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZXhpc3RpbmcgZGlzayBsYWJlbCBvbiAlcyB3aWxsIGJlIGRlc3Ryb3llZCBhbmQgYWxsIGRhdGEgb24gdGhpcyBkaXNrICIKKyJ3aWxsIGJlIGxvc3QuIERvIHlvdSB3YW50IHRvIGNvbnRpbnVlPyIKK21zZ3N0ciAiIgorIqSkpN7CuLrfpLekxqSkpOsgJXMgpM6lx6Wjpbmlr6Xppdml66TPx8uy9aS1pOyhoqSzpM6lx6Wjpbmlr6TOwbSlx6G8pb+krLy6pO8iCisipOyk3qS5oaPCs7nUpLek3qS5pKuhqSIKKworIzogcGFydGVkL3BhcnRlZC5jOjQ1OCBwYXJ0ZWQvcGFydGVkLmM6NjUyIHBhcnRlZC9wYXJ0ZWQuYzoxMDQ0CisjOiBwYXJ0ZWQvcGFydGVkLmM6MTEyOCBwYXJ0ZWQvcGFydGVkLmM6MTc3MSBwYXJ0ZWQvcGFydGVkLmM6MTg1MgorIzogcGFydGVkL3BhcnRlZC5jOjE5MDAKK21zZ2lkICJQYXJ0aXRpb24gbnVtYmVyPyIKK21zZ3N0ciAipdGhvKXGpaOlt6XnpfPI1rnmPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjUwMAorbXNnaWQgIlNvdXJjZSBkZXZpY2U/IgorbXNnc3RyICLFvsH3uLWkzqXHpdClpKW5PyIKKworIzogcGFydGVkL3BhcnRlZC5jOjUwNAorbXNnaWQgIlNvdXJjZSBwYXJ0aXRpb24gbnVtYmVyPyIKK21zZ3N0ciAixb7B97i1pM6l0aG8pcalo6W3peel88jWueY/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NTA5Cittc2dpZCAiQ2FuJ3QgY29weSBhbiBleHRlbmRlZCBwYXJ0aXRpb24uIgorbXNnc3RyICKzyMSlpdGhvKXGpaOlt6XnpfOkz6WzpdShvKTHpK2k3qS7pPOhoyIKKworIzogcGFydGVkL3BhcnRlZC5jOjUxNQorbXNnaWQgIkRlc3RpbmF0aW9uIHBhcnRpdGlvbiBudW1iZXI/IgorbXNnc3RyICLFvsH3wOikzqXRobylxqWjpbel56XzyNa55j8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo2MTUKK21zZ2lkICJOZXcgZGlzayBsYWJlbCB0eXBlPyIKK21zZ3N0ciAiv7ekt6Skpcelo6W5pa+l6aXZpes/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NjU2Cittc2dpZCAiRmlsZSBzeXN0ZW0/IgorbXNnc3RyICKl1aWhpaSl66W3pbmlxqXgPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjcwNyBwYXJ0ZWQvcGFydGVkLmM6ODc4Cittc2dpZCAiUGFydGl0aW9uIHR5cGU/IgorbXNnc3RyICKl0aG8pcalo6W3peel86TOvO/O4D8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo3MTQgcGFydGVkL3BhcnRlZC5jOjg4NSBwYXJ0ZWQvcGFydGVkLmM6MTEzMQorbXNnaWQgIlBhcnRpdGlvbiBuYW1lPyIKK21zZ3N0ciAipdGhvKXGpaOlt6XnpfOkzsy+wbA/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NzIyIHBhcnRlZC9wYXJ0ZWQuYzo4OTUKK21zZ2lkICJGaWxlIHN5c3RlbSB0eXBlPyIKK21zZ3N0ciAipdWloaWkpeult6W5pcal4KTOvO/O4D8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo3MjkgcGFydGVkL3BhcnRlZC5jOjg5NyBwYXJ0ZWQvcGFydGVkLmM6MTA1OQorIzogcGFydGVkL3BhcnRlZC5jOjE3MjUgcGFydGVkL3BhcnRlZC5jOjE3ODAKK21zZ2lkICJTdGFydD8iCittc2dzdHIgIrOru88/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NzMxIHBhcnRlZC9wYXJ0ZWQuYzo5MDAgcGFydGVkL3BhcnRlZC5jOjEwNjIKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNzI3IHBhcnRlZC9wYXJ0ZWQuYzoxNzgyCittc2dpZCAiRW5kPyIKK21zZ3N0ciAivarOuz8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo3NjkgcGFydGVkL3BhcnRlZC5jOjkzOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IHJlcXVlc3RlZCBhIHBhcnRpdGlvbiBmcm9tICVzIHRvICVzLlxuIgorIlRoZSBjbG9zZXN0IGxvY2F0aW9uIHdlIGNhbiBtYW5hZ2UgaXMgJXMgdG8gJXMuICBJcyB0aGlzIHN0aWxsIGFjY2VwdGFibGUgdG8gIgorInlvdT8iCittc2dzdHIgIiIKKyIlcyCkq6TpICVzIKTepMekzqXRobylxqWjpbel56XzpPK72MTqpLWk7KTepLekv6GjXG4iCisissTHvaTKw+akx7rHpOK24aSkpOKkzqTPICVzIKSrpOkgJXMgpN6kx6TOpdGhvKXGpaOlt6XnpfOky6TKpOqk3qS5oaOkvaTspMek4iIKKyKkq6TepKSk3qS7pPOkq6GpIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6ODkwCittc2dpZCAiQW4gZXh0ZW5kZWQgcGFydGl0aW9uIGNhbm5vdCBob2xkIGEgZmlsZSBzeXN0ZW0uICBEaWQgeW91IHdhbnQgbWtwYXJ0PyIKK21zZ3N0ciAiIgorIrPIxKWl0aG8pcalo6W3peel86TLpM+l1aWhpaSl66W3pbmlxqXgpM+67qTspN6ku6TzoaNta3BhcnQgpPKkt6S/pKSkzqTHpLmkq6GpIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTA1MAorbXNnaWQgIkNhbid0IG1vdmUgYW4gZXh0ZW5kZWQgcGFydGl0aW9uLiIKK21zZ3N0ciAis8jEpaXRobylxqWjpbel56XzpM+w3MawpMekraTepLuk86GjIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTA3OQorbXNnaWQgIkNhbid0IG1vdmUgYSBwYXJ0aXRpb24gb250byBpdHNlbGYuICBUcnkgdXNpbmcgcmVzaXplLCBwZXJoYXBzPyIKK21zZ3N0ciAivKvKrLyrv8ikzr7lpMukz7DcxrCkx6StpN6ku6TzoaOl6qW1paSluqS3pOikpqTIpLekxqTrpM6kx6S5pKuhqSIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlub3I6ICVkXG4iCittc2dzdHIgIqXepaSlyqG8OiAlZFxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIyOAorIywgYy1mb3JtYXQKK21zZ2lkICJGbGFnczogJXNcbiIKK21zZ3N0ciAipdWl6aWwOiAlc1xuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIyOQorIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlIFN5c3RlbTogJXNcbiIKK21zZ3N0ciAipdWloaWkpeult6W5pcal4DogJXNcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMzAKK21zZ2lkICJTaXplOiAgICAgICAgICIKK21zZ3N0ciAipbWlpKW6OiAgICAgICAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjM1Cittc2dpZCAiTWluaW11bSBzaXplOiAiCittc2dzdHIgIrrHvq6ltaWkpbo6ICAgIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIzOAorbXNnaWQgIk1heGltdW0gc2l6ZTogIgorbXNnc3RyICK6x8LnpbWlpKW6OiAgICIKKworIzogcGFydGVkL3BhcnRlZC5jOjEzNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTW9kZWw6ICVzICglcylcbiIKK21zZ3N0ciAipeKlx6XrOiAlcyAoJXMpXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMzY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkRpc2sgJXM6ICVzXG4iCittc2dzdHIgIqXHpaOluaWvICVzOiAlc1xuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTM2NQorIywgYy1mb3JtYXQKK21zZ2lkICJTZWN0b3Igc2l6ZSAobG9naWNhbC9waHlzaWNhbCk6ICVsbGRCLyVsbGRCXG4iCittc2dzdHIgIqW7pa+lv6W1paSluiAoz8DN/S/Kqs39KTogJWxsZEIvJWxsZEJcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEzODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQklPUyBjeWxpbmRlcixoZWFkLHNlY3RvciBnZW9tZXRyeTogJWQsJWQsJWQuICBFYWNoIGN5bGluZGVyIGlzICVzLlxuIgorbXNnc3RyICJCSU9TIKW3peql86XAoaKl2KXDpcmhoqW7pa+lvyBnZW9tZXRyeTogJWQsJWQsJWQuICAxpbel6qXzpcCkzyAlc6GjXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMzkyCisjLCBjLWZvcm1hdAorbXNnaWQgIlBhcnRpdGlvbiBUYWJsZTogJXNcbiIKK21zZ3N0ciAipdGhvKXGpaOlt6XnpfOlxqG8pdal6zogJXNcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MDYgcGFydGVkL3BhcnRlZC5jOjE0MDkKK21zZ2lkICJOdW1iZXIiCittc2dzdHIgIsjWueYiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDA2IHBhcnRlZC9wYXJ0ZWQuYzoxNDA5Cittc2dpZCAiU3RhcnQiCittc2dzdHIgIrOru88iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDA3IHBhcnRlZC9wYXJ0ZWQuYzoxNDEwCittc2dpZCAiRW5kIgorbXNnc3RyICK9qs67IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQxMAorbXNnaWQgIlNpemUiCittc2dzdHIgIqW1paSluiIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MTQKK21zZ2lkICJUeXBlIgorbXNnc3RyICKlv6WkpdciCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDE2Cittc2dpZCAiRmlsZSBzeXN0ZW0iCittc2dzdHIgIqXVpaGlpKXrpbeluaXGpeAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDE5Cittc2dpZCAiTmFtZSIKK21zZ3N0ciAizL7BsCIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MjEKK21zZ2lkICJGbGFncyIKK21zZ3N0ciAipdWl6aWwIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQ3NworbXNnaWQgIkZyZWUgU3BhY2UiCittc2dzdHIgIrb1pK3Nxs7MIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTYyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQSAlcyAlcyBwYXJ0aXRpb24gd2FzIGZvdW5kIGF0ICVzIC0+ICVzLiAgRG8geW91IHdhbnQgdG8gYWRkIGl0IHRvIHRoZSAiCisicGFydGl0aW9uIHRhYmxlPyIKK21zZ3N0ciAiIgorIiVzICVzIKXRobylxqWjpbel56XzpKwgJXMgoqogJXMgpM6+7L3qpMvIr7irpLWk7KTepLekv6GjpLOkzqXRobylxqWjpbel56XzpPIiCisipdGhvKXGpaOlt6XnpfOlxqG8pdal66TLxMmyw6S3pN6kuaSroakiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNjYzCittc2dpZCAic2VhcmNoaW5nIGZvciBmaWxlIHN5c3RlbXMiCittc2dzdHIgIqXVpaGlpKXrpbeluaXGpeCk8sO1pLekxqSkpN6kuSIKKworIzogcGFydGVkL3BhcnRlZC5jOjE4NzcKK21zZ2lkICJOZXcgZGV2aWNlPyIKK21zZ3N0ciAiv7ekt6Skpcel0KWkpbk/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTkwMgorbXNnaWQgIkZsYWcgdG8gSW52ZXJ0PyIKK21zZ3N0ciAiyL/FvqS5pOul1aXppbA/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTkwNworbXNnaWQgIk5ldyBzdGF0ZT8iCittc2dzdHIgIr+3pLekpL71wtY/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTk0NAorbXNnaWQgIlVuaXQ/IgorbXNnc3RyICLDsbDMpM8/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjA5MworbXNnaWQgImNoZWNrIgorbXNnc3RyICJjaGVjayIKKworIzogcGFydGVkL3BhcnRlZC5jOjIwOTYKK21zZ2lkICIiCisiY2hlY2sgTlVNQkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyBhIHNpbXBsZSBjaGVjayBvbiB0aGUgZmlsZSBzeXN0ZW0iCittc2dzdHIgImNoZWNrIE5VTUJFUiAgICAgICAgICAgICAgICAgIKXVpaGlpKXrpbeluaXGpeCkzrTKw7GkyqXBpaelw6WvpLmk6yIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMDIKK21zZ2lkICJjcCIKK21zZ3N0ciAiY3AiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTA1Cittc2dpZCAiIgorImNwIFtGUk9NLURFVklDRV0gRlJPTS1OVU1CRVIgVE8tTlVNQkVSICAgY29weSBmaWxlIHN5c3RlbSB0byBhbm90aGVyICIKKyJwYXJ0aXRpb24iCittc2dzdHIgIiIKKyJjcCBbxb7B97i1pcel0KWkpbldIMW+wfe4tU5VTUJFUiDFvsH3wOhOVU1CRVJcbiIKKyKhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGl1aWhpaSl66W3pbmlxqXgpPLCvqTOpdGhvKXGpaOlt6XnpfOky6WzpdShvKS5pOsiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTExCittc2dpZCAiaGVscCIKK21zZ3N0ciAiaGVscCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMTQKKyMsIGZ1enp5Cittc2dpZCAiIgorImhlbHAgW0NPTU1BTkRdICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgZ2VuZXJhbCBoZWxwLCBvciBoZWxwIG9uICIKKyJDT01NQU5EIgorbXNnc3RyICIiCisiaGVscCBbpbOl3qXzpcldICAgICAgICAgICAgICAgpdil66XXyb28qKGjpbOl3qXzpcm72MTqpMekvaTOpdil66XXpPLJvbyoIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEyMAorbXNnaWQgIm1rbGFiZWwiCittc2dzdHIgIm1rbGFiZWwiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTIwCittc2dpZCAibWt0YWJsZSIKK21zZ3N0ciAibWt0YWJsZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMjMKK21zZ2lkICIiCisibWtsYWJlbCxta3RhYmxlIExBQkVMLVRZUEUgICAgICAgICAgICAgICBjcmVhdGUgYSBuZXcgZGlza2xhYmVsIChwYXJ0aXRpb24gIgorInRhYmxlKSIKK21zZ3N0ciAiIgorIm1rbGFiZWwsbWt0YWJsZSCl6aXZpeukzrzvzuAgICAgICAgICAgv7ekt6Skpeml2aXrKKXRobylxqWjpbel56XzpcahvKXWpesppPIiCisiuu6k6yIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMjkKK21zZ2lkICJta2ZzIgorbXNnc3RyICJta2ZzIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEzMgorbXNnaWQgIiIKKyJta2ZzIE5VTUJFUiBGUy1UWVBFICAgICAgICAgICAgICAgICAgICAgIG1ha2UgYSBGUy1UWVBFIGZpbGUgc3lzdGVtIG9uICIKKyJwYXJ0aXRpdG9uIE5VTUJFUiIKK21zZ3N0ciAiIgorIm1rZnMgTlVNQkVSIKXVpaGlpKXrpbeluaXGpeCkzrzvzuBcbiIKKyKhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaG72MTqpLekv7zvzuCkzqXVpaGlpKXrpbeluaXGpeCk8rrupOsiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTM4Cittc2dpZCAibWtwYXJ0IgorbXNnc3RyICJta3BhcnQiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTQxCittc2dpZCAibWtwYXJ0IFBBUlQtVFlQRSBbRlMtVFlQRV0gU1RBUlQgRU5EICAgICBtYWtlIGEgcGFydGl0aW9uIgorbXNnc3RyICIiCisibWtwYXJ0IKXRobylxqWjpbel56XzpM68787gIFul1aWhpaSl66W3pbmlxqXgpM68787gXSCzq7vPIL2qzrtcbiIKKyKhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGl0aG8pcalo6W3peel86Tyuu6k6yIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNDcKKyMsIGZ1enp5Cittc2dpZCAiIgorIidta3BhcnQnIG1ha2VzIGEgcGFydGl0aW9uIHdpdGhvdXQgY3JlYXRpbmcgYSBuZXcgZmlsZSBzeXN0ZW0gb24gdGhlICIKKyJwYXJ0aXRpb24uICBGUy1UWVBFIG1heSBiZSBzcGVjaWZpZWQgdG8gc2V0IGFuIGFwcHJvcHJpYXRlIHBhcnRpdGlvbiBJRC5cbiIKK21zZ3N0ciAiIgorIm1rcGFydCCkz6XRobylxqWjpbel56XzpMCksbrupOqhor+3pLekpKXVpaGlpKXrpbeluaXGpeCkz7rupOqk3qS7pPOho6XVpaGlpKXrIgorIqW3pbmlxqXgpM68787gpPK72MTqpLmk66TIoaLAtaS3pKRJRKSswN/E6qS1pOyk3qS5oaNcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNTIKK21zZ2lkICJta3BhcnRmcyIKK21zZ3N0ciAibWtwYXJ0ZnMiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTU1Cittc2dpZCAiIgorIm1rcGFydGZzIFBBUlQtVFlQRSBGUy1UWVBFIFNUQVJUIEVORCAgICAgbWFrZSBhIHBhcnRpdGlvbiB3aXRoIGEgZmlsZSBzeXN0ZW0iCittc2dzdHIgIiIKKyJta3BhcnRmcyCl0aG8pcalo6W3peel86TOvO/O4CCl1aWhpaSl66W3pbmlxqXgpM68787gILOru88gvarOu1xuIgorIqGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaXRobylxqWjpbel56XzpMil1aWhpaSl66W3pbmlxqXgpPK67qTrIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE2MQorbXNnaWQgIm1vdmUiCittc2dzdHIgIm1vdmUiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTY0Cittc2dpZCAibW92ZSBOVU1CRVIgU1RBUlQgRU5EICAgICAgICAgICAgICAgICAgICBtb3ZlIHBhcnRpdGlvbiBOVU1CRVIiCittc2dzdHIgIm1vdmUgTlVNQkVSILOru88gvarOuyAgICAgICAgIKXRobylxqWjpbel56XzpPKw3MawpLmk6yIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNjkKK21zZ2lkICJuYW1lIgorbXNnc3RyICJuYW1lIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE3MgorbXNnaWQgIm5hbWUgTlVNQkVSIE5BTUUgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSBwYXJ0aXRpb24gTlVNQkVSIGFzIE5BTUUiCittc2dzdHIgIm5hbWUgTlVNQkVSIMy+wbAgICAgICAgICAgICAgIKXRobylxqWjpbel56XzpMvMvsGwpPKkxKSxpOsiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTc3Cittc2dpZCAicHJpbnQiCittc2dzdHIgInByaW50IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE4MAorbXNnaWQgIiIKKyJwcmludCBbZGV2aWNlc3xmcmVlfGxpc3QsYWxsfE5VTUJFUl0gICAgIGRpc3BsYXkgdGhlIHBhcnRpdGlvbiB0YWJsZSwgIgorImF2YWlsYWJsZSBkZXZpY2VzLCBmcmVlIHNwYWNlLCBhbGwgZm91bmQgcGFydGl0aW9ucywgb3IgYSBwYXJ0aWN1bGFyICIKKyJwYXJ0aXRpb24iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxODUKK21zZ2lkICIiCisiV2l0aG91dCBhcmd1bWVudHMsICdwcmludCcgZGlzcGxheXMgdGhlIGVudGlyZSBwYXJ0aXRpb24gdGFibGUuIEhvd2V2ZXIgd2l0aCAiCisidGhlIGZvbGxvd2luZyBhcmd1bWVudHMgaXQgcGVyZm9ybXMgdmFyaW91cyBvdGhlciBhY3Rpb25zLlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTg3Cittc2dpZCAiICBkZXZpY2VzICAgOiBkaXNwbGF5IGFsbCBhY3RpdmUgYmxvY2sgZGV2aWNlc1xuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTg4Cittc2dpZCAiIgorIiAgZnJlZSAgICAgIDogZGlzcGxheSBpbmZvcm1hdGlvbiBhYm91dCBmcmVlIHVucGFydGl0aW9uZWQgc3BhY2Ugb24gdGhlICIKKyJjdXJyZW50IGJsb2NrIGRldmljZVxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTkwCisjLCBmdXp6eQorbXNnaWQgIiIKKyIgIGxpc3QsIGFsbCA6IGRpc3BsYXkgdGhlIHBhcnRpdGlvbiB0YWJsZXMgb2YgYWxsIGFjdGl2ZSBibG9jayBkZXZpY2VzXG4iCittc2dzdHIgIrihvdCkt6S/wbSlx6XQpaSluaTOpdGhvKXGpaOlt6XnpfOlxqG8pdal66Tyyb28qCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxOTEKK21zZ2lkICIiCisiICBOVU1CRVIgICAgOiBkaXNwbGF5IG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBwYXJ0aWN1bGFyICIKKyJwYXJ0aXRpb25cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE5NgorbXNnaWQgInF1aXQiCittc2dzdHIgInF1aXQiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTk5Cittc2dpZCAicXVpdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGl0IHByb2dyYW0iCittc2dzdHIgInF1aXQgICAgICAgICAgICAgICAgICAgICAgICAgIKXXpe2lsKXppeCk8r2qzrukuaTrIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIwNAorbXNnaWQgInJlc2N1ZSIKK21zZ3N0ciAicmVzY3VlIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIwNworbXNnaWQgIiIKKyJyZXNjdWUgU1RBUlQgRU5EICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2N1ZSBhIGxvc3QgcGFydGl0aW9uIG5lYXIgU1RBUlQgIgorImFuZCBFTkQiCittc2dzdHIgIiIKKyJyZXNjdWUgs6u7zyC9qs67ICAgICAgICAgICAgICCzq7vPoaK9qs67pMe72MTqpLekv8jPsM/J1bbhpMukoqTrpdGhvKXGpaOlt6XnIgorIqXzpPLJ/LPopLWku6TrIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIxMworbXNnaWQgInJlc2l6ZSIKK21zZ3N0ciAicmVzaXplIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIxNgorbXNnaWQgIiIKKyJyZXNpemUgTlVNQkVSIFNUQVJUIEVORCAgICAgICAgICAgICAgICAgIHJlc2l6ZSBwYXJ0aXRpb24gTlVNQkVSIGFuZCBpdHMgIgorImZpbGUgc3lzdGVtIgorbXNnc3RyICIiCisicmVzaXplIE5VTUJFUiCzq7vPIL2qzrsgICAgICAgpdGhvKXGpaOlt6XnpfOkyKS9pM7D5qTOpdWloaWkpeult6W5pcal4KTypeqltSIKKyKlpKW6pLmk6yIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMjQKK21zZ2lkICJybSIKK21zZ3N0ciAicm0iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjI3Cittc2dpZCAicm0gTlVNQkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcGFydGl0aW9uIE5VTUJFUiIKK21zZ3N0ciAicm0gTlVNQkVSICAgICAgICAgICAgICAgICAgICAgpdGhvKXGpaOlt6XnpfOk8rrvvfykuaTrIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIzMgorbXNnaWQgInNlbGVjdCIKK21zZ3N0ciAic2VsZWN0IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIzNQorbXNnaWQgInNlbGVjdCBERVZJQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvb3NlIHRoZSBkZXZpY2UgdG8gZWRpdCIKK21zZ3N0ciAic2VsZWN0IKXHpdClpKW5ICAgICAgICAgICAgICAgweC67qS5pOulx6XQpaSluaTywarC8iIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNDAKK21zZ2lkICJzZXQiCittc2dzdHIgInNldCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNDMKK21zZ2lkICIiCisic2V0IE5VTUJFUiBGTEFHIFNUQVRFICAgICAgICAgICAgICAgICAgICBjaGFuZ2UgdGhlIEZMQUcgb24gcGFydGl0aW9uIE5VTUJFUiIKK21zZ3N0ciAic2V0IE5VTUJFUiCl1aXppbAgvvXC1iAgICAgICAgpdWloaWkpeult6W5pcal4KTOpdWl6aWwpMi+9cLWpPLA38TqpLmk6yIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNDkKK21zZ2lkICJ0b2dnbGUiCittc2dzdHIgInRvZ2dsZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNTIKK21zZ2lkICIiCisidG9nZ2xlIFtOVU1CRVIgW0ZMQUddXSAgICAgICAgICAgICAgICAgICB0b2dnbGUgdGhlIHN0YXRlIG9mIEZMQUcgb24gIgorInBhcnRpdGlvbiBOVU1CRVIiCittc2dzdHIgInRvZ2dsZSBbTlVNQkVSIFtGTEFHXV0gICAgICAgIKXRobylxqWjpbel56XzpM6l1aXppbCkzr71wtak8si/xb6kuaTrIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI1OAorbXNnaWQgInVuaXQiCittc2dzdHIgInVuaXQiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjYxCittc2dpZCAidW5pdCBVTklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgdGhlIGRlZmF1bHQgdW5pdCB0byBVTklUIgorbXNnc3RyICJ1bml0IFVOSVQgICAgICAgICAgICAgICAgICAgICClx6XVpaml66XIpM7DsbDMpPIgVU5JVCCky6S5pOsiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjY2Cittc2dpZCAidmVyc2lvbiIKK21zZ3N0ciAidmVyc2lvbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNjkKKyMsIGZ1enp5Cittc2dpZCAiIgorInZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheSB0aGUgdmVyc2lvbiBudW1iZXIgYW5kICIKKyJjb3B5cmlnaHQgaW5mb3JtYXRpb24gb2YgR05VIFBhcnRlZCIKK21zZ3N0ciAiIgorInZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgIEdOVSBQYXJ0ZWQgpM6l0KG8pbil56XzpMjD+LruuKK+8MrzpPLJvbyoIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI3MworIywgZnV6enkKK21zZ2lkICIiCisiJ3ZlcnNpb24nIGRpc3BsYXlzIGNvcHlyaWdodCBhbmQgdmVyc2lvbiBpbmZvcm1hdGlvbiBjb3JyZXNwb25kaW5nIHRvIHRoaXMgIgorImNvcHkgb2YgR05VIFBhcnRlZFxuIgorbXNnc3RyICIiCisidmVyc2lvbiCkz6GivMK51MPmpM4gR05VIFBhcnRlZCCkzqXQobyluKXnpfOkyMP4uu64or7wyvOk8sm9vKikt6TepLmho1xuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjMzNQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1obG1zdl0gW0RFVklDRSBbQ09NTUFORCBbUEFSQU1FVEVSU11dLi4uXVxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMzc5Cittc2dpZCAiTm8gZGV2aWNlIGZvdW5kIgorbXNnc3RyICKlx6XQpaSluaSspN+kxKSrpOqk3qS7pPOhoyIKKworIzogcGFydGVkL3BhcnRlZC5jOjI0MTIKKyMsIGZ1enp5Cittc2dpZCAiV0FSTklORzogWW91IGFyZSBub3Qgc3VwZXJ1c2VyLiAgV2F0Y2ggb3V0IGZvciBwZXJtaXNzaW9ucy4iCittc2dzdHIgIrfZufA6ILTJzf281LiiuMKkrKSipOqk3qS7pPOho6XRobyl36XDpbel56XzpMvD7bDVpLekxqSvpMCktaSkoaNcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjI0NTAKKyMsIGZ1enp5Cittc2dpZCAiWW91IG1heSBuZWVkIHRvIHVwZGF0ZSAvZXRjL2ZzdGFiLlxuIgorbXNnc3RyICLJrM3XpMekoqTspNAgL2V0Yy9mc3RhYiCk8rm5v7ekuaTrpM6k8su6pOykyqSkpOikpqTLpLekxqSvpMCktaSkoaNcbiIKKworIzogcGFydGVkL3VpLmM6MTYwCittc2dpZCAiV2VsY29tZSB0byBHTlUgUGFydGVkISBUeXBlICdoZWxwJyB0byB2aWV3IGEgbGlzdCBvZiBjb21tYW5kcy5cbiIKK21zZ3N0ciAiIgorIkdOVSBQYXJ0ZWQgpNik6KSmpLOkvaGqIKWzpd6l86XJsOzN96TyuKuk66TLpM8gJ2hlbHAnIKTIxv7Oz6S3pMakr6TApLWkpKGjXG4iCisKKyM6IHBhcnRlZC91aS5jOjE2MworbXNnaWQgIiIKKyJVc2FnZTogcGFydGVkIFtPUFRJT05dLi4uIFtERVZJQ0UgW0NPTU1BTkQgW1BBUkFNRVRFUlNdLi4uXS4uLl1cbiIKKyJBcHBseSBDT01NQU5EcyB3aXRoIFBBUkFNRVRFUlMgdG8gREVWSUNFLiAgSWYgbm8gQ09NTUFORChzKSBhcmUgZ2l2ZW4sIHJ1biAiCisiaW5cbiIKKyJpbnRlcmFjdGl2ZSBtb2RlLlxuIgorbXNnc3RyICIiCisiu8ikpMr9OiBwYXJ0ZWQgW6Wqpdelt6XnpfNdLi4uIFulx6XQpaSluSBbpbOl3qXzpckgW6XRpeml4aG8pb9dLi4uXS4uLl1cbiIKKyKlx6XQpaSluaTLwtCkt6TGpdGl6aXhobylv6TLvb6kw6TGpbOl3qXzpcmk8rzCudSkt6TepLmho6TipLels6XepfOlyaSsu9jE6qS1IgorIqTspMqksaTspNChosLQz8Ol4qG8pcmky8b+pOqk3qS5oaNcbiIKKworIzogcGFydGVkL3VpLmM6MTY4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiXG4iCisiWW91IGZvdW5kIGEgYnVnIGluIEdOVSBQYXJ0ZWQhIEhlcmUncyB3aGF0IHlvdSBoYXZlIHRvIGRvOlxuIgorIlxuIgorIkRvbid0IHBhbmljISBUaGUgYnVnIGhhcyBtb3N0IGxpa2VseSBub3QgYWZmZWN0ZWQgYW55IG9mIHlvdXIgZGF0YS5cbiIKKyJIZWxwIHVzIHRvIGZpeCB0aGlzIGJ1ZyBieSBkb2luZyB0aGUgZm9sbG93aW5nOlxuIgorIlxuIgorIkNoZWNrIHdoZXRoZXIgdGhlIGJ1ZyBoYXMgYWxyZWFkeSBiZWVuIGZpeGVkIGJ5IGNoZWNraW5nXG4iCisidGhlIGxhc3QgdmVyc2lvbiBvZiBHTlUgUGFydGVkIHRoYXQgeW91IGNhbiBmaW5kIGF0OlxuIgorIlxuIgorIlx0aHR0cDovL2Z0cC5nbnUub3JnL2dudS9wYXJ0ZWQvXG4iCisiXG4iCisiUGxlYXNlIGNoZWNrIHRoaXMgdmVyc2lvbiBwcmlvciB0byBidWcgcmVwb3J0aW5nLlxuIgorIlxuIgorIklmIHRoaXMgaGFzIG5vdCBiZWVuIGZpeGVkIHlldCBvciBpZiB5b3UgZG9uJ3Qga25vdyBob3cgdG8gY2hlY2ssXG4iCisicGxlYXNlIHZpc2l0IHRoZSBHTlUgUGFydGVkIHdlYnNpdGU6XG4iCisiXG4iCisiXHRodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvcGFydGVkXG4iCisiXG4iCisiZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uXG4iCisiXG4iCisiWW91ciByZXBvcnQgc2hvdWxkIGNvbnRhaW4gdGhlIHZlcnNpb24gb2YgdGhpcyByZWxlYXNlICglcylcbiIKKyJhbG9uZyB3aXRoIHRoZSBlcnJvciBtZXNzYWdlIGJlbG93LCB0aGUgb3V0cHV0IG9mXG4iCisiXG4iCisiXHRwYXJ0ZWQgREVWSUNFIHVuaXQgY28gcHJpbnQgdW5pdCBzIHByaW50XG4iCisiXG4iCisiYW5kIHRoZSBmb2xsb3dpbmcgaGlzdG9yeSBvZiBjb21tYW5kcyB5b3UgZW50ZXJlZC5cbiIKKyJBbHNvIGluY2x1ZGUgYW55IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgeW91ciBzZXR1cCB5b3VcbiIKKyJjb25zaWRlciBpbXBvcnRhbnQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJcbiIKKyJHTlUgUGFydGVkIKTOpdClsKTyyK+4q6S3pN6kt6S/oapcbiIKKyJcbiIKKyKl0aXLpcOlr6Tyta+ks6S1pMqkpKTHpK+kwKS1pKShqiCks6TOpdClsKTPpKqkvaTppK+lx6G8pb+ky6TPsca2waSipOqk3qS7IgorIqTzoaNcbiIKKyK8oaTOpLOkyKTypLekxqSzpM6l0KWwpM69pMC1pMuktLaozs+kr6TApLWkpKGjXG4iCisiXG4iCisivKGkzqW1paSlyKTLuse/t6XQobyluKXnpfOkrKSipOqk3qS5oaNcbiIKKyK0+6TLpLOkzqXQpbCkrL2kwLWktaTspMakpKTKpKSkq7POx6ekt6TGpK+kwKS1pKSho1xuIgorIlxuIgorIlx0aHR0cDovL2Z0cC5nbnUub3JnL2dudS9wYXJ0ZWQvXG4iCisiXG4iCisipdClsKXspd2hvKXIpPKkuaTrwbCky7rHv7el0KG8pbil56XzpMezzsenpLekxqSvpMCktaSkoaNcbiIKKyJcbiIKKyKk3qTApdClsKSsvaTAtaS1pOykxqSkpMqkpKSroaKzzsenpM67xcr9pKyk76SrpOmkyqSkvuy556GiXG4iCisiR05VIFBhcnRlZCCkziB3ZWIgpbWlpKXIXG4iCisiXG4iCisiXHRodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvcGFydGVkXG4iCisiXG4iCisipPKzq6SkpMahor7cpLekpL7wyvOk8sS0pNmkxqSvpMCktaSkoaNcbiIKKyJcbiIKKyKl7KXdobylyKTLpM+hoqSzpM4gUGFydGVkIKTOpdChvKW4peel877wyvMgKCVzKSCkyKGiXG4iCisisryky8m9vKiktaTspMakpKTrpail6aG8peGlw6W7obyluKGivKGkzqWzpd6l86XJXG4iCisiXG4iCisiXHRwYXJ0ZWQgREVWSUNFIHVuaXQgY28gcHJpbnQgdW5pdCBzIHByaW50XG4iCisiXG4iCisipM690M7PpMihoqS9pM7Cvr3FzdekyLvXpKa+8MrzpPK1rb3SpLekxqSvpMCktaSkoaNcbiIKKworIzogcGFydGVkL3VpLmM6Mjg0Cittc2dpZCAiIgorIlxuIgorIkNvbW1hbmQgSGlzdG9yeTpcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzozNjYKKyMsIGZ1enp5Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBTRUdWX01BUEVSUiAoQWRkcmVzcyBub3QgbWFwcGVkIHRvIG9iamVjdClcbiIKK21zZ3N0ciAiIgorIlxuIgorIqWopemhvDogU0VHVl9NQVBFUlIgKKWipcml7KW5pKylqqXWpbilp6Wvpciky8rRtLmktaTspN6ku6TzpMekt6S/KSIKKworIzogcGFydGVkL3VpLmM6MzcyCisjLCBmdXp6eQorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogU0VHVl9BQ0NFUlIgKEludmFsaWQgcGVybWlzc2lvbnMgZm9yIG1hcHBlZCBvYmplY3QpXG4iCittc2dzdHIgIiIKKyJcbiIKKyKlqKXpobw6IFNFR1ZfQUNDRVJSICil3qXDpdektaTspL+lqqXWpbilp6WvpcikzqXRobyl36XDpbel56XzpKzJ1MC1pMekuSkiCisKKyM6IHBhcnRlZC91aS5jOjM3NworIywgZnV6enkKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEEgZ2VuZXJhbCBTSUdTRUdWIHNpZ25hbCB3YXMgZW5jb3VudGVyZWQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyKlqKXpobw6IFNJR1NFR1YgpbelsKXKpeuk8rz1pLGkyKTqpN6kt6S/oaMiCisKKyM6IHBhcnRlZC91aS5jOjQxMAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0lOVERJViAoSW50ZWdlcjogZGl2aWRlIGJ5IHplcm8pIgorbXNnc3RyICIiCisiXG4iCisipail6aG8OiBGUEVfSU5URElWICjAsL/0OiAwpMuk6KTrvfy7uykiCisKKyM6IHBhcnRlZC91aS5jOjQxNQorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0lOVE9WRiAoSW50ZWdlcjogb3ZlcmZsb3cpIgorbXNnc3RyICIiCisiXG4iCisipail6aG8OiBGUEVfSU5UT1ZGICjAsL/0OiClqqG8pdChvKXVpe2hvCkiCisKKyM6IHBhcnRlZC91aS5jOjQyMAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0ZMVERJViAoRmxvYXQ6IGRpdmlkZSBieSB6ZXJvKSIKK21zZ3N0ciAiIgorIlxuIgorIqWopemhvDogRlBFX0ZMVERJViAoyeLGsL6uv/TFwDogMKTLpOik6738u7spIgorCisjOiBwYXJ0ZWQvdWkuYzo0MjUKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRPVkYgKEZsb2F0OiBvdmVyZmxvdykiCittc2dzdHIgIiIKKyJcbiIKKyKlqKXpobw6IEZQRV9GTFRPVkYgKMnixrC+rr/0xcA6IKWqobyl0KG8pdWl7aG8KSIKKworIzogcGFydGVkL3VpLmM6NDMwCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxUVU5EIChGbG9hdDogdW5kZXJmbG93KSIKK21zZ3N0ciAiIgorIlxuIgorIqWopemhvDogRlBFX0ZMVFVORCAoyeLGsL6uv/TFwDogpaKl86XAobyl1aXtobwpIgorCisjOiBwYXJ0ZWQvdWkuYzo0MzUKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRSRVMgKEZsb2F0OiBpbmV4YWN0IHJlc3VsdCkiCittc2dzdHIgIiIKKyJcbiIKKyKlqKXpobw6IEZQRV9GTFRSRVMgKMnixrC+rr/0xcA6IMC1pLekr6TKpKS367LMKSIKKworIzogcGFydGVkL3VpLmM6NDQwCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxUSU5WIChGbG9hdDogaW52YWxpZCBvcGVyYXRpb24pIgorbXNnc3RyICIiCisiXG4iCisiXG4iCisipail6aG8OiBGUEVfRkxUSU5WICjJ4sawvq6/9MXAOiDJ1MC1pMrB4LruKSIKKworIzogcGFydGVkL3VpLmM6NDQ1Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxUU1VCIChGbG9hdDogc3Vic2NyaXB0IG91dCBvZiByYW5nZSkiCittc2dzdHIgIiIKKyJcbiIKKyKlqKXpobw6IEZQRV9GTFRTVUIgKMnixrC+rr/0xcA6IMW6u/qkrMjPsM+k8rHbpKik3qS3pL8pIgorCisjOiBwYXJ0ZWQvdWkuYzo0NTAKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEEgZ2VuZXJhbCBTSUdGUEUgc2lnbmFsIHdhcyBlbmNvdW50ZXJlZC4iCittc2dzdHIgIiIKKyJcbiIKKyKlqKXpobw6IFNJR0ZQRSClt6Wwpcql66TyvPWksaTIpOqk3qS3pL+hoyIKKworIzogcGFydGVkL3VpLmM6NDgzCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfSUxMT1BDIChJbGxlZ2FsIE9wY29kZSkiCittc2dzdHIgIiIKKyJcbiIKKyKlqKXpobw6IElMTF9JTExPUEMgKMnUwLWkyqWqpdqls6G8pckpIgorCisjOiBwYXJ0ZWQvdWkuYzo0ODgKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9JTExPUE4gKElsbGVnYWwgT3BlcmFuZCkiCittc2dzdHIgIiIKKyJcbiIKKyKlqKXpobw6IElMTF9JTExPUE4gKMnUwLWkyqWqpdql6aXzpckpIgorCisjOiBwYXJ0ZWQvdWkuYzo0OTMKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9JTExBRFIgKElsbGVnYWwgYWRkcmVzc2luZyBtb2RlKSIKK21zZ3N0ciAiIgorIlxuIgorIqWopemhvDogSUxMX0lMTEFEUiAoydTAtaTKpaKlyaXspbml4qG8pckpIgorCisjOiBwYXJ0ZWQvdWkuYzo0OTgKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9JTExUUlAgKElsbGVnYWwgVHJhcCkiCittc2dzdHIgIiIKKyJcbiIKKyKlqKXpobw6IElMTF9JTExUUlAgKMnUwLWkyqXIpemlw6XXKSIKKworIzogcGFydGVkL3VpLmM6NTAzCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfUFJWT1BDIChQcml2aWxlZ2VkIE9wY29kZSkiCittc2dzdHIgIiIKKyJcbiIKKyKlqKXpobw6IElMTF9QUlZPUEMgKMbDuKKkrMmszdekyqWqpdqls6G8pckpIgorCisjOiBwYXJ0ZWQvdWkuYzo1MDgKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9QUlZSRUcgKFByaXZpbGVnZWQgUmVnaXN0ZXIpIgorbXNnc3RyICIiCisiXG4iCisipail6aG8OiBJTExfUFJWUkVHICjGw7iipKzJrM3XpMql7KW4pbmlvykiCisKKyM6IHBhcnRlZC91aS5jOjUxMworbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX0NPUFJPQyAoQ29wcm9jZXNzb3IgRXJyb3IpIgorbXNnc3RyICIiCisiXG4iCisipail6aG8OiBJTExfQ09QUk9DICils6XXpe2lu6XDpbWlqKXpobwpIgorCisjOiBwYXJ0ZWQvdWkuYzo1MTgKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9CQURTVEsgKEludGVybmFsIFN0YWNrIEVycm9yKSIKK21zZ3N0ciAiIgorIlxuIgorIqWopemhvDogSUxMX0JBRFNUSyAopaSl86W/obylyqXrpbmlv6XDpa+lqKXpobwpIgorCisjOiBwYXJ0ZWQvdWkuYzo1MjMKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEEgZ2VuZXJhbCBTSUdJTEwgc2lnbmFsIHdhcyBlbmNvdW50ZXJlZC4iCittc2dzdHIgIiIKKyJcbiIKKyKlqKXpobw6IFNJR0lMTCClt6Wwpcql66TyvPWksaTIpOqk3qS3pL+hoyIKKworIzogcGFydGVkL3VpLmM6MTAyNAorbXNnaWQgIkV4cGVjdGluZyBhIHBhcnRpdGlvbiBudW1iZXIuIgorbXNnc3RyICKl0aG8pcalo6W3peel88jWueak8sb+zs+kt6TGpK+kwKS1pKShoyIKKworIzogcGFydGVkL3VpLmM6MTAzMworbXNnaWQgIlBhcnRpdGlvbiBkb2Vzbid0IGV4aXN0LiIKK21zZ3N0ciAipdGhvKXGpaOlt6XnpfOkrKSipOqk3qS7pPOhoyIKKworIzogcGFydGVkL3VpLmM6MTA1MworbXNnaWQgIkV4cGVjdGluZyBhIGZpbGUgc3lzdGVtIHR5cGUuIgorbXNnc3RyICKl1aWhpaSl66W3pbmlxqXgpM68787gpPLG/s7PpLekxqSvpMCktaSkoaMiCisKKyM6IHBhcnRlZC91aS5jOjEwNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBmaWxlIHN5c3RlbSB0eXBlIFwiJXNcIi4iCittc2dzdHIgIqXVpaGlpKXrpbeluaXGpeCkzrzvzuAgXCIlc1wiIKTPydTMwKTHpLmhoyIKKworIzogcGFydGVkL3VpLmM6MTA4MAorbXNnaWQgIkV4cGVjdGluZyBhIGRpc2sgbGFiZWwgdHlwZS4iCittc2dzdHIgIqXHpaOluaWvpeml2aXrpM68787gpPLG/s7PpLekxqSvpMCktaSkoaMiCisKKyM6IHBhcnRlZC91aS5jOjExNzgKK21zZ2lkICJDYW4ndCBjcmVhdGUgYW55IG1vcmUgcGFydGl0aW9ucy4iCittc2dzdHIgIqXRobylxqWjpbel56XzpPLEybLDpMekraTepLuk86GjIgorCisjOiBwYXJ0ZWQvdWkuYzoxMTg4Cittc2dpZCAiRXhwZWN0aW5nIGEgcGFydGl0aW9uIHR5cGUuIgorbXNnc3RyICKl0aG8pcalo6W3peel86TOvO/O4KTyxv7Oz6S3pMakr6TApLWkpKGjIgorCisjOiBwYXJ0ZWQvdWkuYzoxMzE1Cittc2dpZCAib24iCittc2dzdHIgIm9uIgorCisjOiBwYXJ0ZWQvdWkuYzoxMzE2Cittc2dpZCAib2ZmIgorbXNnc3RyICJvZmYiCisKKyM6IHBhcnRlZC91aS5jOjE0MzEKK21zZ2lkICJPUFRJT05zOiIKK21zZ3N0ciAipaql16W3peel8yIKKworIzogcGFydGVkL3VpLmM6MTQzNgorbXNnaWQgIkNPTU1BTkRzOiIKK21zZ3N0ciAipbOl3qXzpck6IgorCisjOiBwYXJ0ZWQvdWkuYzoxNDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzaW5nICVzXG4iCittc2dzdHIgIiVzIKTyu8jN0VxuIgorCisjOiBwYXJ0ZWQvdWkuYzoxNTE5Cittc2dpZCAiVGhpcyBjb21tYW5kIGRvZXMgbm90IG1ha2Ugc2Vuc2UgaW4gbm9uLWludGVyYWN0aXZlIG1vZGUuXG4iCittc2dzdHIgIiIKKworI34gbXNnaWQgIkdOVSBQYXJ0ZWQgY2Fubm90IHJlc2l6ZSB0aGlzIGZpbGUgc3lzdGVtLCBwbGVhc2UgdXNlcmVzaXplMmZzLiIKKyN+IG1zZ3N0ciAiIgorI34gIkdOVSBQYXJ0ZWQgpMekz6GipLOkzqXVpaGlpKXrpbeluaXGpeCk8qXqpbWlpKW6pMekraTepLuk86GjcmVzaXplMmZzIKTyIgorI34gIrvIpMOkxqSvpMCktaSkoaMiCisKKyN+IG1zZ2lkICJ3aGVyZSBuZWNlc3NhcnksIHByb21wdHMgZm9yIHVzZXIgaW50ZXJ2ZW50aW9uIgorI34gbXNnc3RyICLJrM3XpMekoqTspNCl16XtpfOl16XIpPKkwKS3pMal5qG8pbaky7Lwxv6ktaS7pOsiCisKKyN+IG1zZ2lkICJHTlUgUGFydGVkIFZlcnNpb24gaW5mb3JtYXRpb246XG4iCisjfiBtc2dzdHIgIkdOVSBQYXJ0ZWQgpdChvKW4peel877wyvM6XG4iCisKKyN+IG1zZ2lkICIiCisjfiAicHJpbnQgW2ZyZWV8TlVNQkVSfGFsbF0gICAgICAgICAgICAgICAgICBkaXNwbGF5IHRoZSBwYXJ0aXRpb24gdGFibGUsIGEgIgorI34gInBhcnRpdGlvbiwgb3IgYWxsIGRldmljZXMiCisjfiBtc2dzdHIgInByaW50IFtmcmVlfE5VTUJFUnxhbGxdICAgICAgIKXRobylxqWjpbel56XzpcahvKXWpeuk8sm9vKikuaTrIgorCisjfiBtc2dpZCAiIgorI34gIldpdGhvdXQgYXJndW1lbnRzLCBwcmludCBkaXNwbGF5cyB0aGUgZW50aXJlIHBhcnRpdGlvbiB0YWJsZS4gV2l0aCAiCisjfiAiJ2ZyZWUnXG4iCisjfiAiYXJndW1lbnQsIGluZm9ybWF0aW9uIGFib3V0IGZyZWUgc3BhY2Ugd2lsbCBiZSBkaXNwbGF5ZWQgb3RoZXJ3aXNlIGlmIGFcbiIKKyN+ICJwYXJ0aXRpb24gbnVtYmVyIGlzIGdpdmVuLCB0aGVuIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gaXMgZGlzcGxheWVkXG4iCisjfiAiYWJvdXQgdGhhdCBwYXJ0aXRpb24uIElmIHRoZSAnYWxsJyBhcmd1bWVudCBpcyBwYXNzZWQgaW5zdGVhZCwgcGFydGl0aW9uXG4iCisjfiAiaW5mb3JtYXRpb24gZm9yIGFsbCBkZXZpY2VzIHdpbGwgYmUgZGlzcGxheWVkLlxuIgorI34gbXNnc3RyICIiCisjfiAisPq/9KTKpLekzr7sueehonByaW50IKTPpdGhvKXGpaOlt6XnpfOlxqG8pdal66TOwbTG4s3GpPLJvbyopLek3qS5oaNcbiIKKyN+ICInZnJlZSekyKSkpKaw+r/0pPLNv6SopOukyKGitvWkrc3Gzsyky6TEpKSkxsm9vKiktaTsoaJcbiIKKyN+ICKl0aG8pcalo6W3peel88jWueak8s2/pKik66TIoaKkvaTOpdGhvKXGpaOlt6XnpfOky6TEpKSkxqTOvty62aSsyb28qKS1pOyk3iIKKyN+ICKkuaGjXG4iCisjfiAiJ2FsbCek8s2/pKik66TIoaLBtKTGpM6lx6XQpaSluaTLpMSkpKTGpM6l0aG8pcalo6W3peel877wyvOkrMm9vKiktaTspN4iCisjfiAipLmho1xuIgpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L3BvL25sLmdtbyBiL3BhcnRlZC0xLjguNy9wby9ubC5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJiMjVmMwotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9wby9ubC5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L3BvL25sLnBvIGIvcGFydGVkLTEuOC43L3BvL25sLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5Y2M4YmMKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvcG8vbmwucG8KQEAgLTAsMCArMSwzMzEzIEBACisjIFRyYW5zbGF0aW9uIG9mIHBhcnRlZC0xLjguMSB0byBEdXRjaC4KKyMgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDA1LCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBJdm8gVGltbWVybWFucyA8aXZvQG8ydy5ubD4sIDIwMDAuCisjIEJlbm5vIFNjaHVsZW5iZXJnIDxiZW5ub0BuaWV0dmVyZ2V0ZW4ubmw+LCAyMDA1LCAyMDA2LgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogcGFydGVkIDEuOC4xXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGJ1Zy1wYXJ0ZWRAZ251Lm9yZ1xuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDA3LTA1LTA5IDE3OjAyLTA0MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDA2LTEyLTA3IDIyOjUyKzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEJlbm5vIFNjaHVsZW5iZXJnIDxiZW5ub0BuaWV0dmVyZ2V0ZW4ubmw+XG4iCisiTGFuZ3VhZ2UtVGVhbTogRHV0Y2ggPHZlcnRhbGluZ0B2cmlqc2NocmlmdC5vcmc+XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiWC1HZW5lcmF0b3I6IEtCYWJlbCAxLjExLjRcbiIKKworIzogbGliL2Nsb3Nlb3V0LmM6NzQKK21zZ2lkICJ3cml0ZSBlcnJvciIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXJyb3IuYzoxMjUKKyMsIGZ1enp5Cittc2dpZCAiVW5rbm93biBzeXN0ZW0gZXJyb3IiCittc2dzdHIgIk9uYmVrZW5kZSBiZXN0YW5kc3N5c3RlZW1zb29ydCAnJXMnLiIKKworIzogbGliL2dldG9wdC5jOjUzMSBsaWIvZ2V0b3B0LmM6NTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYCVzJyBpcyBhbWJpZ3VvdXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6NTgwIGxpYi9nZXRvcHQuYzo1ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiBgLS0lcycgZG9lc24ndCBhbGxvdyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo1OTMgbGliL2dldG9wdC5jOjU5OAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIGAlYyVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjY0MSBsaWIvZ2V0b3B0LmM6NjYwIGxpYi9nZXRvcHQuYzo5NzYgbGliL2dldG9wdC5jOjk5NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIGAlcycgcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6Njk4IGxpYi9nZXRvcHQuYzo3MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVucmVjb2duaXplZCBvcHRpb24gYC0tJXMnXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjcwOSBsaWIvZ2V0b3B0LmM6NzEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bnJlY29nbml6ZWQgb3B0aW9uIGAlYyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo3NjQgbGliL2dldG9wdC5jOjc2NworIywgYy1mb3JtYXQKK21zZ2lkICIlczogaWxsZWdhbCBvcHRpb24gLS0gJWNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6NzczIGxpYi9nZXRvcHQuYzo3NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgb3B0aW9uIC0tICVjXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjgyOCBsaWIvZ2V0b3B0LmM6ODQ0IGxpYi9nZXRvcHQuYzoxMDQ4IGxpYi9nZXRvcHQuYzoxMDY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQgLS0gJWNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6ODk3IGxpYi9nZXRvcHQuYzo5MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiBgLVcgJXMnIGlzIGFtYmlndW91c1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo5MzcgbGliL2dldG9wdC5jOjk1NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIGAtVyAlcycgZG9lc24ndCBhbGxvdyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOgorIy4gR2V0IHRyYW5zbGF0aW9ucyBmb3Igb3BlbiBhbmQgY2xvc2luZyBxdW90YXRpb24gbWFya3MuCisjLgorIy4gVGhlIG1lc3NhZ2UgY2F0YWxvZyBzaG91bGQgdHJhbnNsYXRlICJgIiB0byBhIGxlZnQKKyMuIHF1b3RhdGlvbiBtYXJrIHN1aXRhYmxlIGZvciB0aGUgbG9jYWxlLCBhbmQgc2ltaWxhcmx5IGZvcgorIy4gIiciLiAgSWYgdGhlIGNhdGFsb2cgaGFzIG5vIHRyYW5zbGF0aW9uLAorIy4gbG9jYWxlX3F1b3Rpbmdfc3R5bGUgcXVvdGVzIGBsaWtlIHRoaXMnLCBhbmQKKyMuIGNsb2NhbGVfcXVvdGluZ19zdHlsZSBxdW90ZXMgImxpa2UgdGhpcyIuCisjLgorIy4gRm9yIGV4YW1wbGUsIGFuIEFtZXJpY2FuIEVuZ2xpc2ggVW5pY29kZSBsb2NhbGUgc2hvdWxkCisjLiB0cmFuc2xhdGUgImAiIHRvIFUrMjAxQyAoTEVGVCBET1VCTEUgUVVPVEFUSU9OIE1BUkspLCBhbmQKKyMuIHNob3VsZCB0cmFuc2xhdGUgIiciIHRvIFUrMjAxRCAoUklHSFQgRE9VQkxFIFFVT1RBVElPTgorIy4gTUFSSykuICBBIEJyaXRpc2ggRW5nbGlzaCBVbmljb2RlIGxvY2FsZSBzaG91bGQgaW5zdGVhZAorIy4gdHJhbnNsYXRlIHRoZXNlIHRvIFUrMjAxOCAoTEVGVCBTSU5HTEUgUVVPVEFUSU9OIE1BUkspIGFuZAorIy4gVSsyMDE5IChSSUdIVCBTSU5HTEUgUVVPVEFUSU9OIE1BUkspLCByZXNwZWN0aXZlbHkuCisjLgorIy4gSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBwdXQgaGVyZSwgcGxlYXNlIHNlZQorIy4gPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUXVvdGF0aW9uX21hcmsjR2x5cGhzPgorIy4gYW5kIHVzZSBnbHlwaHMgc3VpdGFibGUgZm9yIHlvdXIgbGFuZ3VhZ2UuCisjOiBsaWIvcXVvdGVhcmcuYzoyMjkKK21zZ2lkICJgIgorbXNnc3RyICIiCisKKyM6IGxpYi9xdW90ZWFyZy5jOjIzMAorbXNnaWQgIiciCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxMzEKK21zZ2lkICJTdWNjZXNzIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTM0Cittc2dpZCAiTm8gbWF0Y2giCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxMzcKK21zZ2lkICJJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE0MAorbXNnaWQgIkludmFsaWQgY29sbGF0aW9uIGNoYXJhY3RlciIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE0MworbXNnaWQgIkludmFsaWQgY2hhcmFjdGVyIGNsYXNzIG5hbWUiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNDYKK21zZ2lkICJUcmFpbGluZyBiYWNrc2xhc2giCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNDkKK21zZ2lkICJJbnZhbGlkIGJhY2sgcmVmZXJlbmNlIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTUyCittc2dpZCAiVW5tYXRjaGVkIFsgb3IgW14iCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNTUKK21zZ2lkICJVbm1hdGNoZWQgKCBvciBcXCgiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNTgKK21zZ2lkICJVbm1hdGNoZWQgXFx7IgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTYxCittc2dpZCAiSW52YWxpZCBjb250ZW50IG9mIFxce1xcfSIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE2NAorIywgZnV6enkKK21zZ2lkICJJbnZhbGlkIHJhbmdlIGVuZCIKK21zZ3N0ciAiT25nZWxkaWcgbnVtbWVyLiIKKworIzogbGliL3JlZ2NvbXAuYzoxNjcKK21zZ2lkICJNZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTcwCittc2dpZCAiSW52YWxpZCBwcmVjZWRpbmcgcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTczCittc2dpZCAiUHJlbWF0dXJlIGVuZCBvZiByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNzYKK21zZ2lkICJSZWd1bGFyIGV4cHJlc3Npb24gdG9vIGJpZyIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE3OQorbXNnaWQgIlVubWF0Y2hlZCApIG9yIFxcKSIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjY4MAorbXNnaWQgIk5vIHByZXZpb3VzIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvcnBtYXRjaC5jOjcwCittc2dpZCAiXlt5WV0iCittc2dzdHIgIiIKKworIzogbGliL3JwbWF0Y2guYzo3MworbXNnaWQgIl5bbk5dIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBUcmFuc2xhdGUgIihDKSIgdG8gdGhlIGNvcHlyaWdodCBzeW1ib2wKKyMuIChDLWluLWEtY2lyY2xlKSwgaWYgdGhpcyBzeW1ib2wgaXMgYXZhaWxhYmxlIGluIHRoZSB1c2VyJ3MKKyMuIGxvY2FsZS4gIE90aGVyd2lzZSwgZG8gbm90IHRyYW5zbGF0ZSAiKEMpIjsgbGVhdmUgaXQgYXMtaXMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzo2NgorbXNnaWQgIihDKSIKK21zZ3N0ciAiIgorCisjOiBsaWIvdmVyc2lvbi1ldGMuYzo2OAorbXNnaWQgIiIKKyJcbiIKKyJMaWNlbnNlIEdQTHYyKzogR05VIEdQTCB2ZXJzaW9uIDIgb3IgbGF0ZXIgPGh0dHA6Ly9nbnUub3JnL2xpY2Vuc2VzL2dwbC4iCisiaHRtbD5cbiIKKyJUaGlzIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBhcmUgZnJlZSB0byBjaGFuZ2UgYW5kIHJlZGlzdHJpYnV0ZSBpdC5cbiIKKyJUaGVyZSBpcyBOTyBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3LlxuIgorIlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIzogbGliL3ZlcnNpb24tZXRjLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiV3JpdHRlbiBieSAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIzogbGliL3ZlcnNpb24tZXRjLmM6ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiV3JpdHRlbiBieSAlcyBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIldyaXR0ZW4gYnkgJXMsICVzLCBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyJhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6MTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiJXMsIGFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyIlcywgJXMsIGFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzoxMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyIlcywgJXMsICVzLCBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6MTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiJXMsICVzLCAlcywgJXMsXG4iCisiYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjLiBZb3UgY2FuIHVzZSBsaW5lIGJyZWFrcywgZXN0aW1hdGluZyB0aGF0IGVhY2ggYXV0aG9yIG5hbWUgb2NjdXBpZXMKKyMuIGNhLiAxNiBzY3JlZW4gY29sdW1ucyBhbmQgdGhhdCBhIHNjcmVlbiBsaW5lIGhhcyBjYS4gODAgY29sdW1ucy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjEzMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorIiVzLCAlcywgJXMsICVzLFxuIgorIiVzLCBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6MTQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiJXMsICVzLCAlcywgJXMsXG4iCisiJXMsICVzLCBhbmQgb3RoZXJzLlxuIgorbXNnc3RyICIiCisKKyM6IGxpYi94YWxsb2MtZGllLmM6MzUKK21zZ2lkICJtZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzoyMzcKK21zZ2lkICJEaXNrIEltYWdlIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzozMzggbGlicGFydGVkL2FyY2gvZ251LmM6MjYxCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjEyNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igb3BlbmluZyAlczogJXMiCittc2dzdHIgIkZvdXQgdGlqZGVucyBvcGVuZW4gdmFuICVzOiAlcyIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjM0OSBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzoyNzEKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTI4MworIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gb3BlbiAlcyByZWFkLXdyaXRlICglcykuICAlcyBoYXMgYmVlbiBvcGVuZWQgcmVhZC1vbmx5LiIKK21zZ3N0ciAiIgorIkthbiAlcyBuaWV0IG9wZW5lbiB2b29yIGxlemVuLWVuLXNjaHJpanZlbiAoJXMpOyAgJXMgaXMgZ2VvcGVuZCB2b29yIGFsbGVlbi0iCisibGV6ZW4uIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6NDExIGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTQzMQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkdXJpbmcgc2VlayBmb3IgcmVhZCBvbiAlcyIKK21zZ3N0ciAiJXMgdGlqZGVucyBlZW4gJ3NlZWsnIGJpaiBoZXQgbGV6ZW4gdmFuICVzIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6NDQ0IGxpYnBhcnRlZC9hcmNoL2dudS5jOjQ0OSBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo1NDgKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjY3NiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjEzOTEKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkdXJpbmcgcmVhZCBvbiAlcyIKK21zZ3N0ciAiJXMgdGlqZGVucyBsZXplbiB2YW4gJXMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzo0ODAgbGlicGFydGVkL2FyY2gvZ251LmM6NTA5CisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjE1NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2FuJ3Qgd3JpdGUgdG8gJXMsIGJlY2F1c2UgaXQgaXMgb3BlbmVkIHJlYWQtb25seS4iCittc2dzdHIgIkthbiBuaWV0IG5hYXIgJXMgc2NocmlqdmVuLCBvbWRhdCBoZXQgZ2VvcGVuZCBpcyB2b29yIGFsbGVlbi1sZXplbi4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzo0OTYgbGlicGFydGVkL2FyY2gvbGludXguYzoxNTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGR1cmluZyBzZWVrIGZvciB3cml0ZSBvbiAlcyIKK21zZ3N0ciAiJXMgdGlqZGVucyBlZW4gJ3NlZWsnIGJpaiBoZXQgc2NocmlqdmVuIG5hYXIgJXMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzo1MzMgbGlicGFydGVkL2FyY2gvZ251LmM6NTg1IGxpYnBhcnRlZC9hcmNoL2dudS5jOjYzMAorIzogbGlicGFydGVkL2FyY2gvZ251LmM6NzA3IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTUxNworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxNjEyIGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTY4NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkdXJpbmcgd3JpdGUgb24gJXMiCittc2dzdHIgIiVzIHRpamRlbnMgc2NocmlqdmVuIG5hYXIgJXMiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6NjMgcGFydHByb2JlL3BhcnRwcm9iZS5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICJUcnkgYCVzIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4iCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICVzIFtPUFRJT05dXG4iCisiICBvcjogICVzIERFVklDRSBNSU5PUlxuIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6NzAKK21zZ2lkICIiCisiQ2xlYXIgdW51c2VkIHNwYWNlIG9uIGEgRkFUIHBhcnRpdGlvbiAoYSBHTlUgUGFydGVkIHRlc3RpbmcgdG9vbCkuXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo3NAorbXNnaWQgIiAgICAgIC0taGVscCAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXRcbiIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjc1Cittc2dpZCAiICAgICAgLS12ZXJzaW9uICBvdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdFxuIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6NzcgcGFydHByb2JlL3BhcnRwcm9iZS5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiUmVwb3J0IGJ1Z3MgdG8gPCVzPi5cbiIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjI4NQorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gZmV3IGFyZ3VtZW50cyIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjI5MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIgorbXNnc3RyICJUZSB2ZWVsIHNsZWNodGUgcGFnaW5hJ3MuIgorCisjOiBwYXJ0cHJvYmUvcGFydHByb2JlLmM6MTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbT1BUSU9OXSBbREVWSUNFXS4uLlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRwcm9iZS9wYXJ0cHJvYmUuYzoxNDIKK21zZ2lkICIiCisiSW5mb3JtIHRoZSBPUyBvZiBwYXJ0aXRpb24gdGFibGUgY2hhbmdlcy5cbiIKKyJcbiIKKyIgIC1kLCAtLW5vLXVwZGF0ZSAgZG9uJ3QgdXBkYXRlIHRoZSBrZXJuZWxcbiIKKyIgIC1zLCAtLXN1bW1hcnkgICAgcHJpbnQgYSBzdW1tYXJ5IG9mIGNvbnRlbnRzXG4iCisiICAtaCwgLS1oZWxwICAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0XG4iCisiICAtdiwgLS12ZXJzaW9uICAgIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0XG4iCittc2dzdHIgIiIKKworIzogcGFydHByb2JlL3BhcnRwcm9iZS5jOjE1MAorbXNnaWQgIiIKKyJcbiIKKyJXaXRoIG5vIERFVklDRSwgcHJvYmUgYWxsIHBhcnRpdGlvbnMuXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIG9wZW4gJXMuIgorbXNnc3RyICJLYW4gJXMgbmlldCBvcGVuZW4uIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzoxMTQKK21zZ2lkICJVbmFibGUgdG8gcHJvYmUgc3RvcmUuIgorbXNnc3RyICJLYW4gZGUgbG9naXNjaGUgb3Bib3V3IHZhbiBoZXQgYXBwYXJhYXQgbmlldCBhY2h0ZXJoYWxlbi4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjM1MgorbXNnaWQgIiIKKyJUaGUgcGFydGl0aW9uIHRhYmxlIGNhbm5vdCBiZSByZS1yZWFkLiAgVGhpcyBtZWFucyB5b3UgbmVlZCB0byByZWJvb3QgYmVmb3JlICIKKyJtb3VudGluZyBhbnkgbW9kaWZpZWQgcGFydGl0aW9ucy4gIFlvdSBhbHNvIG5lZWQgdG8gcmVpbnN0YWxsIHlvdXIgYm9vdCAiCisibG9hZGVyIGJlZm9yZSB5b3UgcmVib290ICh3aGljaCBtYXkgcmVxdWlyZSBtb3VudGluZyBtb2RpZmllZCBwYXJ0aXRpb25zKS4gICIKKyJJdCBpcyBpbXBvc3NpYmxlIGRvIGJvdGggdGhpbmdzISAgU28geW91J2xsIG5lZWQgdG8gYm9vdCBvZmYgYSByZXNjdWUgZGlzaywgIgorImFuZCByZWluc3RhbGwgeW91ciBib290IGxvYWRlciBmcm9tIHRoZSByZXNjdWUgZGlzay4gIFJlYWQgc2VjdGlvbiA0IG9mIHRoZSAiCisiUGFydGVkIFVzZXIgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCittc2dzdHIgIiIKKyJEZSBrZXJuZWwga2FuIGRlIHBhcnRpdGlldGFiZWwgbmlldCBoZXJsZXplbi4gIERpdCBiZXRla2VudCBkYXQgdSB1dyAiCisiY29tcHV0ZXIgbW9ldCBoZXJzdGFydGVuIGFsdm9yZW5zIHZlcmFuZGVyZGUgcGFydGl0aWVzIHRlIGdlYnJ1aWtlbi4gIE1hYXIgIgorInZvb3IgaGV0IGhlcnN0YXJ0ZW4gbW9ldCB1IG9vayB1dyBvcHN0YXJ0cHJvZ3JhbW1hIG9wbmlldXcgaW5zdGFsbGVyZW4sIHdhdCAiCisibW9nZWxpamsgaGV0IGFhbmtvcHBlbGVuIHZhbiB2ZXJhbmRlcmRlIHBhcnRpdGl0aWVzIHZlcmVpc3QuICBEZSB0d2VlIGRpbmdlbiAiCisiemlqbiBuaWV0IHNhbWVuIG1vZ2VsaWprISAgVSB6dWx0IGR1cyB2YW4gZWVuIHJlZGRpbmdzZGlza2V0dGUgb2YgdmFuIGVlbiBDRCAiCisibW9ldGVuIGhlcnN0YXJ0ZW4sIGVuIHZhbmFmIGRhYXIgdXcgb3BzdGFydHByb2dyYW1tYSBtb2V0ZW4gaGVyaW5zdGFsbGVyZW4uICAiCisiTGVlcyBldmVudHVlZWwgc2VjdGllIDQgdmFuIGRlIFBhcnRlZC1nZWJydWlrZXJzZG9jdW1lbnRhdGllLiIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6MzY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgcGFydGl0aW9uIHRhYmxlIG9uICVzIGNhbm5vdCBiZSByZS1yZWFkICglcykuICBUaGlzIG1lYW5zIHRoZSBIdXJkIGtub3dzICIKKyJub3RoaW5nIGFib3V0IGFueSBtb2RpZmljYXRpb25zIHlvdSBtYWRlLiAgWW91IHNob3VsZCByZWJvb3QgeW91ciBjb21wdXRlciAiCisiYmVmb3JlIGRvaW5nIGFueXRoaW5nIHdpdGggJXMuIgorbXNnc3RyICIiCisiRGUga2VybmVsIGthbiBkZSBwYXJ0aXRpZXRhYmVsIG9wICVzIG5pZXQgaGVybGV6ZW4gKCVzKS4gIERpdCBiZXRla2VudCBkYXQgIgorImRlIEh1cmQgZ2VlbiB3ZWV0IGhlZWZ0IHZhbiBkZSB2ZXJhbmRlcmluZ2VuIGRpZSB1IG5ldCBoZWVmdCBnZW1hYWt0LiAgVSAiCisiZGllbnQgdXcgY29tcHV0ZXIgdGUgaGVyc3RhcnRlbiBhbHZvcmVucyBpZXRzIG1ldCAlcyB0ZSBkb2VuLiIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6MzgwIHBhcnRlZC9wYXJ0ZWQuYzoyNDQzCittc2dpZCAiIgorIllvdSBzaG91bGQgcmVpbnN0YWxsIHlvdXIgYm9vdCBsb2FkZXIgYmVmb3JlIHJlYm9vdGluZy4gIFJlYWQgc2VjdGlvbiA0IG9mICIKKyJ0aGUgUGFydGVkIFVzZXIgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCittc2dzdHIgIiIKKyJBbHZvcmVucyB0ZSBoZXJzdGFydGVuIGRpZW50IHUgdXcgb3BzdGFydHByb2dyYW1tYSBvcG5pZXV3IHRlIGluc3RhbGxlcmVuLiAgIgorIkxlZXMgc2VjdGllIDQgdmFuIGRlIFBhcnRlZC1nZWJydWlrZXJzZG9jdW1lbnRhdGllIHZvb3IgbWVlciBpbmZvcm1hdGllLiIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6NzcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHRyeWluZyB0byBzeW5jICVzIHRvIGRpc2siCittc2dzdHIgIiVzOiBiZXppZyBtZXQgc3luY2hyb25pc2VyZW4gdmFuICVzIG5hYXIgc2NoaWpmIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjQwOAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc3RhdCBkZXZpY2UgJXMgLSAlcy4iCittc2dzdHIgIkthbiBkZSBzdGF0dXMgdmFuIGFwcGFyYWF0ICVzIG5pZXQgb3B2cmFnZW4gLS0gJXMuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjUyMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGRldGVybWluZSBzZWN0b3Igc2l6ZSBmb3IgJXM6ICVzLlxuIgorIlVzaW5nIHRoZSBkZWZhdWx0IHNlY3RvciBzaXplICglbGxkKS4iCittc2dzdHIgIiIKKyJLYW4gZGUgc2VjdG9yZ3Jvb3R0ZSB2YW4gJXMgbmlldCBiZXBhbGVuOiAlcy5cbiIKKyJEZSBzdGFuZGFhcmQgc2VjdG9yZ3Jvb3R0ZSAoJWxsZCkgd29yZHQgZ2VicnVpa3QuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjUzOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRGV2aWNlICVzIGhhcyBhIGxvZ2ljYWwgc2VjdG9yIHNpemUgb2YgJWxsZC4gIE5vdCBhbGwgcGFydHMgb2YgR05VIFBhcnRlZCAiCisic3VwcG9ydCB0aGlzIGF0IHRoZSBtb21lbnQsIGFuZCB0aGUgd29ya2luZyBjb2RlIGlzIEhJR0hMWSBFWFBFUklNRU5UQUwuXG4iCittc2dzdHIgIiIKKyJBcHBhcmFhdCAlcyBoZWVmdCBlZW4gbG9naXNjaGUgc2VjdG9yZ3Jvb3R0ZSB2YW4gJWxsZC5cbiIKKyJOaWV0IGFsbGUgb25kZXJkZWxlbiB2YW4gR05VIFBhcnRlZCBvbmRlcnN0ZXVuZW4gZGl0IG1vbWVudGVlbCxcbiIKKyJlbiBkZSB3ZWwgYWFud2V6aWdlIG9uZGVyc3RldW5pbmcgaXMgWkVFUiBFWFBFUklNRU5URUVMLlxuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjU3OQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZGV0ZXJtaW5lIHRoZSBzaXplIG9mICVzICglcykuIgorbXNnc3RyICJLYW4gZGUgZ3Jvb3R0ZSB2YW4gJXMgbmlldCBhY2h0ZXJoYWxlbiAtLSAlcy4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6NjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBnZXQgaWRlbnRpdHkgb2YgZGV2aWNlICVzIC0gJXMiCittc2dzdHIgIkthbiBkZSBpZGVudGl0ZWl0IHZhbiBhcHBhcmFhdCAlcyBuaWV0IGFjaHRlcmhhbGVuIC0tICVzLiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo2NzcKK21zZ2lkICJHZW5lcmljIElERSIKK21zZ3N0ciAiR2V3b25lIElERSIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkRldmljZSAlcyBoYXMgbXVsdGlwbGUgKCVkKSBsb2dpY2FsIHNlY3RvcnMgcGVyIHBoeXNpY2FsIHNlY3Rvci5cbiIKKyJHTlUgUGFydGVkIHN1cHBvcnRzIHRoaXMgRVhQRVJJTUVOVEFMTFkgZm9yIHNvbWUgc3BlY2lhbCBkaXNrIGxhYmVsL2ZpbGUgIgorInN5c3RlbSBjb21iaW5hdGlvbnMsIGUuZy4gR1BUIGFuZCBleHQyLzMuXG4iCisiUGxlYXNlIGNvbnN1bHQgdGhlIHdlYiBzaXRlIGZvciB1cC10by1kYXRlIGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiIgorIkFwcGFyYWF0ICVzIGJldmF0IHBlciBmeXNpZWtlIHNlY3RvciBtZWVyZGVyZSAoJWQpIGxvZ2lzY2hlIHNlY3RvcmVuLlxuIgorIkdOVSBQYXJ0ZWQgb25kZXJzdGV1bnQgZGl0IG9wIEVYUEVSSU1FTlRFTEUgYmFzaXMgdm9vciBzb21taWdlIGNvbWJpbmF0aWVzICIKKyJ2YW4gc2NoaWpmbGFiZWwgZW4gYmVzdGFuZHNzeXN0ZWVtLCBiaWp2b29yYmVlbGQgR1BUIG1ldCBleHQyLzMuXG4iCisiWmllIGRlIHdlYnNpdGUgdmFuIFBhcnRlZCB2b29yIGRlIGxhYXRzdGUgaW5mb3JtYXRpZS4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6ODczCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGluaXRpYWxpc2luZyBTQ1NJIGRldmljZSAlcyAtICVzIgorbXNnc3RyICJGb3V0IHRpamRlbnMgaW5pdGlhbGlzZXJlbiB2YW4gU0NTSS1hcHBhcmFhdCAlcyAtLSAlcy4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6OTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZGV2aWNlICVzIGhhcyB6ZXJvIGxlbmd0aCwgYW5kIGNhbid0IHBvc3NpYmx5IHN0b3JlIGEgZmlsZSBzeXN0ZW0gb3IgIgorInBhcnRpdGlvbiB0YWJsZS4gIFBlcmhhcHMgeW91IHNlbGVjdGVkIHRoZSB3cm9uZyBkZXZpY2U/IgorbXNnc3RyICIiCisiQXBwYXJhYXQgJXMgaGVlZnQgbGVuZ3RlIG51bCBlbiBrYW4gbWV0IGdlZW4gbW9nZWxpamtoZWlkIGVlbiAiCisiYmVzdGFuZHNzeXN0ZWVtIG9mIHBhcnRpdGlldGFiZWwgYmV2YXR0ZW4uICBIZWVmdCB1IG1pc3NjaGllbiBlZW4gdmVya2VlcmQgIgorImFwcGFyYWF0IGdla296ZW4/IgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjEwMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVuYWJsZSB0byBkZXRlcm1pbmUgZ2VvbWV0cnkgb2YgZmlsZS9kZXZpY2UgJXMuICBZb3Ugc2hvdWxkIG5vdCB1c2UgUGFydGVkICIKKyJ1bmxlc3MgeW91IFJFQUxMWSBrbm93IHdoYXQgeW91J3JlIGRvaW5nISIKK21zZ3N0ciAiIgorIkthbiBkZSBsb2dpc2NoZSBvcGJvdXcgdmFuIGhldCBhcHBhcmFhdCAlcyBuaWV0IGFjaHRlcmhhbGVuLlxuIgorIlUga3VudCBQYXJ0ZWQgYmV0ZXIgbmlldCBnZWJydWlrZW4gdGVuemlqIHUgRUNIVCB3ZWV0IHdhdCB1IGRvZXQhIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExMTAKK21zZ2lkICJEQUM5NjAgUkFJRCBjb250cm9sbGVyIgorbXNnc3RyICJEQUM5NjAgUkFJRC1zdHV1cmFwcGFyYWF0IgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExMTUKK21zZ2lkICJQcm9taXNlIFNYOCBTQVRBIERldmljZSIKK21zZ3N0ciAiUHJvbWlzZSBTWDggU0FUQS1hcHBhcmFhdCIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTIwCittc2dpZCAiSUJNIFMzOTAgREFTRCBkcml2ZSIKK21zZ3N0ciAiSUJNIFMzOTAgREFTRC1zY2hpamYiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTEyNQorbXNnaWQgIklCTSBpU2VyaWVzIFZpcnR1YWwgREFTRCIKK21zZ3N0ciAiSUJNIGlTZXJpZXMgdmlydHVlbGUgREFTRCIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTMwCittc2dpZCAiQ29tcGFxIFNtYXJ0IEFycmF5IgorbXNnc3RyICJDb21wYXEgU21hcnQgQXJyYXktc3R1dXJhcHBhcmFhdCIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTM1Cittc2dpZCAiQVRBUkFJRCBDb250cm9sbGVyIgorbXNnc3RyICJBVEFSQUlELXN0dXVyYXBwYXJhYXQiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTE0MAorbXNnaWQgIkkyTyBDb250cm9sbGVyIgorbXNnc3RyICJJMk8tc3R1dXJhcHBhcmFhdCIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTQ1Cittc2dpZCAiVXNlci1Nb2RlIExpbnV4IFVCRCIKK21zZ3N0ciAiVXNlci1Nb2RlIExpbnV4LWJsb2thcHBhcmFhdCAoVUJEKSIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTU2Cittc2dpZCAiTGludXggZGV2aWNlLW1hcHBlciIKK21zZ3N0ciAiTGludXggZGV2aWNlLW1hcHBlciIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTYyCittc2dpZCAiVW5rbm93biIKK21zZ3N0ciAiT25iZWtlbmQiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTE2OQorbXNnaWQgInBlZF9kZXZpY2VfbmV3KCkgIFVuc3VwcG9ydGVkIGRldmljZSB0eXBlIgorbXNnc3RyICJBcHBhcmFhdHR5cGUgd29yZHQgbmlldCBvbmRlcnN0ZXVuZC4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MjA4MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRXJyb3IgaW5mb3JtaW5nIHRoZSBrZXJuZWwgYWJvdXQgbW9kaWZpY2F0aW9ucyB0byBwYXJ0aXRpb24gJXMgLS0gJXMuICBUaGlzICIKKyJtZWFucyBMaW51eCB3b24ndCBrbm93IGFib3V0IGFueSBjaGFuZ2VzIHlvdSBtYWRlIHRvICVzIHVudGlsIHlvdSByZWJvb3QgLS0gIgorInNvIHlvdSBzaG91bGRuJ3QgbW91bnQgaXQgb3IgdXNlIGl0IGluIGFueSB3YXkgYmVmb3JlIHJlYm9vdGluZy4iCittc2dzdHIgIiIKKyJGb3V0IHRpamRlbnMgaGV0IGlubGljaHRlbiB2YW4gZGUga2VybmVsIG92ZXIgZGUgdmVyYW5kZXJpbmdlbiBhYW4gcGFydGl0aWUgJSIKKyJzICglcykuICBEaXQgYmV0ZWtlbnQgZGF0IExpbnV4IGdlZW4gd2VldCBoZWVmdCB2YW4gZGUgdmVyYW5kZXJpbmdlbiBkaWUgdSAiCisibmV0IGhlZWZ0IGdlbWFha3QuICBVIGRpZW50IHV3IGNvbXB1dGVyIHRlIGhlcnN0YXJ0ZW4gYWx2b3JlbnMgaWV0cyBtZXQgJXMgIgorInRlIGRvZW4uIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjIyNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInBhcnRlZCB3YXMgdW5hYmxlIHRvIHJlLXJlYWQgdGhlIHBhcnRpdGlvbiB0YWJsZSBvbiAlcyAoJXMpLiAgVGhpcyBtZWFucyAiCisiTGludXggd29uJ3Qga25vdyBhbnl0aGluZyBhYm91dCB0aGUgbW9kaWZpY2F0aW9ucyB5b3UgbWFkZS4gIgorbXNnc3RyICIiCisiUGFydGVkIGthbiBkZSBwYXJ0aXRpZXRhYmVsIG9wICVzIG5pZXQgaGVybGV6ZW4gKCVzKS4gIERpdCBiZXRla2VudCBkYXQgIgorIkxpbnV4IGdlZW4gd2VldCBoZWVmdCB2YW4gZGUgdmVyYW5kZXJpbmdlbiBkaWUgdSBuZXQgaGVlZnQgZ2VtYWFrdC4gICIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoyMzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUga2VybmVsIHdhcyB1bmFibGUgdG8gcmUtcmVhZCB0aGUgcGFydGl0aW9uIHRhYmxlIG9uICVzICglcykuICBUaGlzIG1lYW5zICIKKyJMaW51eCB3b24ndCBrbm93IGFueXRoaW5nIGFib3V0IHRoZSBtb2RpZmljYXRpb25zIHlvdSBtYWRlIHVudGlsIHlvdSAiCisicmVib290LiAgWW91IHNob3VsZCByZWJvb3QgeW91ciBjb21wdXRlciBiZWZvcmUgZG9pbmcgYW55dGhpbmcgd2l0aCAlcy4iCittc2dzdHIgIiIKKyJEZSBrZXJuZWwga2FuIGRlIHBhcnRpdGlldGFiZWwgb3AgJXMgbmlldCBoZXJsZXplbiAoJXMpLiAgRGl0IGJldGVrZW50IGRhdCAiCisiTGludXggZ2VlbiB3ZWV0IGhlZWZ0IHZhbiBkZSB2ZXJhbmRlcmluZ2VuIGRpZSB1IG5ldCBoZWVmdCBnZW1hYWt0LiAgVSBkaWVudCAiCisidXcgY29tcHV0ZXIgdGUgaGVyc3RhcnRlbiBhbHZvcmVucyBpZXRzIG1ldCAlcyB0ZSBkb2VuLiIKKworIzogbGlicGFydGVkL2NzL2dlb20uYzoxNjIKK21zZ2lkICJDYW4ndCBoYXZlIHRoZSBlbmQgYmVmb3JlIHRoZSBzdGFydCEiCittc2dzdHIgIkhldCBlaW5kZSBrYW4gbmlldCB2w7PDs3IgaGV0IGJlZ2luIGxpZ2dlbiEiCisKKyM6IGxpYnBhcnRlZC9jcy9nZW9tLmM6MTY5Cittc2dpZCAiQ2FuJ3QgaGF2ZSBhIHBhcnRpdGlvbiBvdXRzaWRlIHRoZSBkaXNrISIKK21zZ3N0ciAiS2FuIGdlZW4gcGFydGl0aWUgbWFrZW4gYnVpdGVuIGRlIHNjaGlqZiEiCisKKyM6IGxpYnBhcnRlZC9jcy9nZW9tLmM6MzY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkF0dGVtcHQgdG8gd3JpdGUgc2VjdG9ycyAlbGQtJWxkIG91dHNpZGUgb2YgcGFydGl0aW9uIG9uICVzLiIKK21zZ3N0ciAiIgorIlBvZ2luZyB0b3QgaGV0IHNjaHJpanZlbiB2YW4gc2VjdG9yZW4gJWxkLSVsZCBidWl0ZW4gZGUgcGFydGl0aWUgb3AgJXMuIgorCisjOiBsaWJwYXJ0ZWQvY3MvZ2VvbS5jOjQwNiBsaWJwYXJ0ZWQvZnMvbGludXhfc3dhcC9saW51eF9zd2FwLmM6NDc1Cittc2dpZCAiY2hlY2tpbmcgZm9yIGJhZCBibG9ja3MiCittc2dzdHIgImJlemlnIG1ldCB6b2VrZW4gbmFhciBzbGVjaHRlIGJsb2trZW4iCisKKyM6IGxpYnBhcnRlZC9kZWJ1Zy5jOjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWNrdHJhY2UgaGFzICVkIGNhbGxzIG9uIHN0YWNrOlxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9kZWJ1Zy5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJBc3NlcnRpb24gKCVzKSBhdCAlczolZCBpbiBmdW5jdGlvbiAlcygpIGZhaWxlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIG9wZW4gJXMgLSB1bnJlY29nbmlzZWQgZGlzayBsYWJlbC4iCittc2dzdHIgIkthbiAlcyBuaWV0IG9wZW5lbiAtLSBvbmJla2VuZCBzY2hpamZsYWJlbC4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6NDcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGlzIGxpYnBhcnRlZCBkb2Vzbid0IGhhdmUgd3JpdGUgc3VwcG9ydCBmb3IgJXMuICBQZXJoYXBzIGl0IHdhcyBjb21waWxlZCAiCisicmVhZC1vbmx5LiIKK21zZ3N0ciAiIgorIkRlemUgbGlicGFydGVkIGthbiBuaWV0IG5hYXIgJXMgc2NocmlqdmVuLiAgTW9nZWxpamsgd2VyZCBsaWJwYXJ0ZWQgdm9vciAiCisiYWxsZWVuLWxlemVuIGdlY29tcGlsZWVyZC4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6NTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhcnRpdGlvbiAlZCBpcyAlcywgYnV0IHRoZSBmaWxlIHN5c3RlbSBpcyAlcy4iCittc2dzdHIgIlBhcnRpdGllICVkIGlzICVzLCBtYWFyIGhldCBiZXN0YW5kc3N5c3RlZW0gaXMgJXMuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjEwNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZGlzayBsYWJlbHMgZG8gbm90IHN1cHBvcnQgZXh0ZW5kZWQgcGFydGl0aW9ucy4iCittc2dzdHIgIiVzLXNjaGlqZmxhYmVscyBrZW5uZW4gZ2VlbiB1aXRnZWJyZWlkZSBwYXJ0aXRpZXMuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE2MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZGlzayBsYWJlbHMgZG9uJ3Qgc3VwcG9ydCBsb2dpY2FsIG9yIGV4dGVuZGVkIHBhcnRpdGlvbnMuIgorbXNnc3RyICIlcy1zY2hpamZsYWJlbHMga2VubmVuIGdlZW4gbG9naXNjaGUgb2YgdWl0Z2VicmVpZGUgcGFydGl0aWVzLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNjQ3Cittc2dpZCAiVG9vIG1hbnkgcHJpbWFyeSBwYXJ0aXRpb25zLiIKK21zZ3N0ciAiVGUgdmVlbCBwcmltYWlyZSBwYXJ0aXRpZXMuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE2NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbid0IGFkZCBhIGxvZ2ljYWwgcGFydGl0aW9uIHRvICVzLCBiZWNhdXNlIHRoZXJlIGlzIG5vIGV4dGVuZGVkIHBhcnRpdGlvbi4iCittc2dzdHIgIiIKKyJLYW4gZ2VlbiBsb2dpc2NoZSBwYXJ0aXRpZSBhYW4gJXMgdG9ldm9lZ2VuLCBvbWRhdCBlciBnZWVuIHVpdGdlYnJlaWRlICIKKyJwYXJ0aXRpZSBpcy4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTY4MAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW4ndCBoYXZlIG1vcmUgdGhhbiBvbmUgZXh0ZW5kZWQgcGFydGl0aW9uIG9uICVzLiIKK21zZ3N0ciAiS2FuIG5pZXQgbWVlciBkYW4gw6nDqW4gdWl0Z2VicmVpZGUgcGFydGl0aWUgbWFrZW4gb3AgJXMuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE2OTAKK21zZ2lkICJDYW4ndCBoYXZlIGxvZ2ljYWwgcGFydGl0aW9ucyBvdXRzaWRlIG9mIHRoZSBleHRlbmRlZCBwYXJ0aXRpb24uIgorbXNnc3RyICJLYW4gZ2VlbiBsb2dpc2NoZSBwYXJ0aXRpZSBidWl0ZW4gZGUgdWl0Z2VicmVpZGUgcGFydGl0aWUgbWFrZW4uIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE3MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2FuJ3QgaGF2ZSBhIGxvZ2ljYWwgcGFydGl0aW9uIG91dHNpZGUgb2YgdGhlIGV4dGVuZGVkIHBhcnRpdGlvbiBvbiAlcy4iCittc2dzdHIgIkthbiBnZWVuIGxvZ2lzY2hlIHBhcnRpdGllIGJ1aXRlbiBkZSB1aXRnZWJyZWlkZSBwYXJ0aXRpZSBvcCAlcyBtYWtlbi4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTcyNSBsaWJwYXJ0ZWQvZGlzay5jOjE3NzkgbGlicGFydGVkL2Rpc2suYzoxOTQ1Cittc2dpZCAiQ2FuJ3QgaGF2ZSBvdmVybGFwcGluZyBwYXJ0aXRpb25zLiIKK21zZ3N0ciAiS2FuIGdlZW4gb3ZlcmxhcHBlbmRlIHBhcnRpdGllcyBtYWtlbi4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTczMworbXNnaWQgIkNhbid0IGhhdmUgYSBwcmltYXJ5IHBhcnRpdGlvbiBpbnNpZGUgYW4gZXh0ZW5kZWQgcGFydGl0aW9uLiIKK21zZ3N0ciAiS2FuIGdlZW4gcHJpbWFpcmUgcGFydGl0aWUgYmlubmVuIGVlbiB1aXRnZWJyZWlkZSBwYXJ0aXRpZSBtYWtlbi4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE0MAorbXNnaWQgIm1ldGFkYXRhIgorbXNnc3RyICJtZXRhZ2VnZXZlbnMiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE0MgorbXNnaWQgImZyZWUiCittc2dzdHIgInZyaWoiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE0NCBwYXJ0ZWQvdWkuYzoxMTY5IHBhcnRlZC91aS5jOjExOTcKK21zZ2lkICJleHRlbmRlZCIKK21zZ3N0ciAidWl0Z2VicmVpZCIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTQ2IHBhcnRlZC91aS5jOjExNzMgcGFydGVkL3VpLmM6MTIwMQorbXNnaWQgImxvZ2ljYWwiCittc2dzdHIgImxvZ2lzY2giCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE0OCBwYXJ0ZWQvdWkuYzoxMTY1IHBhcnRlZC91aS5jOjExOTMKK21zZ2lkICJwcmltYXJ5IgorbXNnc3RyICJwcmltYWlyIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNjQKK21zZ2lkICJib290IgorbXNnc3RyICJvcHN0YXJ0IgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNjYKK21zZ2lkICJyb290IgorbXNnc3RyICJyb290IgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNjgKK21zZ2lkICJzd2FwIgorbXNnc3RyICJzd2FwIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNzAKK21zZ2lkICJoaWRkZW4iCittc2dzdHIgInZlcmJvcmdlbiIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTcyCittc2dpZCAicmFpZCIKK21zZ3N0ciAicmFpZCIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTc0Cittc2dpZCAibHZtIgorbXNnc3RyICJsdm0iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE3NgorbXNnaWQgImxiYSIKK21zZ3N0ciAibGJhIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNzgKK21zZ2lkICJocC1zZXJ2aWNlIgorbXNnc3RyICJocC1zZXJ2aWNlIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxODAKK21zZ2lkICJwYWxvIgorbXNnc3RyICJwYWxvIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxODIKK21zZ2lkICJwcmVwIgorbXNnc3RyICJwcmVwIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxODQKK21zZ2lkICJtc2Z0cmVzIgorbXNnc3RyICJtc2Z0cmVzIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBwYXJ0aXRpb24gZmxhZywgJWQuIgorbXNnc3RyICJPbmJla2VuZGUgcGFydGl0aWV2bGFnICVkLiIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjc4Cittc2dpZCAiSW5mb3JtYXRpb24iCittc2dzdHIgIkluZm9ybWF0aWUiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo3OQorbXNnaWQgIldhcm5pbmciCittc2dzdHIgIldhYXJzY2h1d2luZyIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjgwCittc2dpZCAiRXJyb3IiCittc2dzdHIgIkZvdXQiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4MQorbXNnaWQgIkZhdGFsIgorbXNnc3RyICJGYXRhYWwiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4MgorbXNnaWQgIkJ1ZyIKK21zZ3N0ciAiUHJvZ3JhbW1lZXJmb3V0IgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODMKK21zZ2lkICJObyBJbXBsZW1lbnRhdGlvbiIKK21zZ3N0ciAiTmlldC1nZcOvbXBsZW1lbnRlZXJkIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODcKK21zZ2lkICJGaXgiCittc2dzdHIgIlJlcGFyZXJlbiIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjg4Cittc2dpZCAiWWVzIgorbXNnc3RyICJKYSIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjg5Cittc2dpZCAiTm8iCittc2dzdHIgIk5lZSIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjkwCittc2dpZCAiT0siCittc2dzdHIgIk9LIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6OTEKK21zZ2lkICJSZXRyeSIKK21zZ3N0ciAiT3BuaWV1dyBwcm9iZXJlbiIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjkyCittc2dpZCAiSWdub3JlIgorbXNnc3RyICJOZWdlcmVuIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6OTMKK21zZ2lkICJDYW5jZWwiCittc2dzdHIgIkFubnVsZXJlbiIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQSBidWcgaGFzIGJlZW4gZGV0ZWN0ZWQgaW4gR05VIFBhcnRlZC4gIFJlZmVyIHRvIHRoZSB3ZWIgc2l0ZSBvZiBwYXJ0ZWQgIgorImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9wYXJ0ZWQvcGFydGVkLmh0bWwgZm9yIG1vcmUgaW5mb3JtYXRpb25zIG9mIHdoYXQgIgorImNvdWxkIGJlIHVzZWZ1bCBmb3IgYnVnIHN1Ym1pdHRpbmchICBQbGVhc2UgZW1haWwgYSBidWcgcmVwb3J0IHRvIGJ1Zy0iCisicGFydGVkQGdudS5vcmcgY29udGFpbmluZyBhdCBsZWFzdCB0aGUgdmVyc2lvbiAoJXMpIGFuZCB0aGUgZm9sbG93aW5nICIKKyJtZXNzYWdlOiAgIgorbXNnc3RyICIiCisiVSBiZW50IHRlZ2VuIGVlbiBwcm9ncmFtbWVlcmZvdXQgaW4gR05VIFBhcnRlZCBhYW5nZWxvcGVuLiAgWmllIGRlIHdlYnNpdGUgIgorInZhbiBQYXJ0ZWQgKGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9wYXJ0ZWQvcGFydGVkLmh0bWwpIHZvb3IgbWVlciAiCisiaW5mb3JtYXRpZSBvdmVyIGhldCBudXR0aWcgcmFwcG9ydGVyZW4gdmFuIGZvdXRlbi4gIFN0dXVyIGRlIGZvdXRyYXBwb3J0YWdlICIKKyJhbHN0dWJsaWVmdCBuYWFyIDxidWctcGFydGVkQGdudS5vcmc+IG1ldCBoZXQgdmVyc2llbnVtbWVyICglcykgZW4gZGUgIgorInZvbGdlbmRlIGJvb2RzY2hhcDoiCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6Mzg0Cittc2dpZCAiQ291bGQgbm90IGRldGVjdCBmaWxlIHN5c3RlbS4iCittc2dzdHIgIkthbiBnZWVuIGJlc3RhbmRzc3lzdGVlbSB2aW5kZW4uIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjM5NQorbXNnaWQgIlRoZSBmaWxlIHN5c3RlbSBpcyBiaWdnZXIgdGhhbiBpdHMgdm9sdW1lISIKK21zZ3N0ciAiSGV0IGJlc3RhbmRzc3lzdGVlbSBpcyBncm90ZXIgZGFuIGRlIHBhcnRpdGllISIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo0MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VwcG9ydCBmb3Igb3BlbmluZyAlcyBmaWxlIHN5c3RlbXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiIKKyJPbmRlcnN0ZXVuaW5nIHZvb3IgaGV0IG9wZW5lbiB2YW4gJXMtYmVzdGFuZHNzeXN0ZW1lbiBpcyBub2cgbmlldCAiCisiZ2XDr21wbGVtZW50ZWVyZC4iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnQgZm9yIGNyZWF0aW5nICVzIGZpbGUgc3lzdGVtcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiIgorIk9uZGVyc3RldW5pbmcgdm9vciBoZXQgbWFrZW4gdmFuICVzLWJlc3RhbmRzc3lzdGVtZW4gaXMgbm9nIG5pZXQgIgorImdlw69tcGxlbWVudGVlcmQuIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjUwNQorIywgYy1mb3JtYXQKK21zZ2lkICJTdXBwb3J0IGZvciBjaGVja2luZyAlcyBmaWxlIHN5c3RlbXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiIKKyJPbmRlcnN0ZXVuaW5nIHZvb3IgaGV0IGNvbnRyb2xlcmVuIHZhbiAlcy1iZXN0YW5kc3N5c3RlbWVuIGlzIG5vZyBuaWV0ICIKKyJnZcOvbXBsZW1lbnRlZXJkLiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo1NzEKK21zZ2lkICJyYXcgYmxvY2sgY29weWluZyIKK21zZ3N0ciAiYmV6aWcgbWV0IGtvcGnDq3JlbiB2YW4gYmxva2tlbiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo1ODIKK21zZ2lkICJncm93aW5nIGZpbGUgc3lzdGVtIgorbXNnc3RyICJiZXppZyBtZXQgdmVyZ3JvdGVuIHZhbiBiZXN0YW5kc3N5c3RlZW0iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NjIyCittc2dpZCAiQ2FuJ3QgY29weSBvbnRvIGFuIG92ZXJsYXBwaW5nIHBhcnRpdGlvbi4iCittc2dzdHIgIkthbiBuaWV0IG5hYXIgZWVuIG92ZXJsYXBwZW5kZSBwYXJ0aXRpZSBrb3Bpw6tyZW4uIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjY0NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRGlyZWN0IHN1cHBvcnQgZm9yIGNvcHlpbmcgZmlsZSBzeXN0ZW1zIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQgZm9yICVzLiAgIgorIkhvd2V2ZXIsIHN1cHBvcnQgZm9yIHJlc2l6aW5nIGlzIGltcGxlbWVudGVkLiAgVGhlcmVmb3JlLCB0aGUgZmlsZSBzeXN0ZW0gIgorImNhbiBiZSBjb3BpZWQgaWYgdGhlIG5ldyBwYXJ0aXRpb24gaXMgYXQgbGVhc3QgYXMgYmlnIGFzIHRoZSBvbGQgb25lLiAgU28sICIKKyJlaXRoZXIgc2hyaW5rIHRoZSBwYXJ0aXRpb24geW91IGFyZSB0cnlpbmcgdG8gY29weSwgb3IgY29weSB0byBhIGJpZ2dlciAiCisicGFydGl0aW9uLiIKK21zZ3N0ciAiIgorIkhldCB0ZWdlbGlqa2VydGlqZCBrb3Bpw6tyZW4gZW4gdmVya2xlaW5lbiB2YW4gZWVuICVzLWJlc3RhbmRzc3lzdGVlbSBpcyBub2cgIgorIm5pZXQgZ2XDr21wbGVtZW50ZWVyZC4gIFZlcmtsZWluIGR1cyBlZXJzdCBkZSBicm9ucGFydGl0aWUgYWx2b3JlbnMgZGV6ZSBuYWFyICIKKyJkZSBnZWtvemVuIHBhcnRpdGllIHRlIGtvcGnDq3Jlbiwgb2Yga2llcyBlZW4gZ3JvdGVyZSBkb2VscGFydGl0aWUuIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjY1OAorIywgYy1mb3JtYXQKK21zZ2lkICJTdXBwb3J0IGZvciBjb3B5aW5nICVzIGZpbGUgc3lzdGVtcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiIgorIk9uZGVyc3RldW5pbmcgdm9vciBoZXQga29wacOrcmVuIHZhbiAlcy1iZXN0YW5kc3N5c3RlbWVuIGlzIG5vZyBuaWV0ICIKKyJnZcOvbXBsZW1lbnRlZXJkLiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo2OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VwcG9ydCBmb3IgcmVzaXppbmcgJXMgZmlsZSBzeXN0ZW1zIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICIiCisiT25kZXJzdGV1bmluZyB2b29yIGhldCB2YW4gZ3Jvb3R0ZSB2ZXJhbmRlcmVuIHZhbiAlcy1iZXN0YW5kc3N5c3RlbWVuIGlzIG5vZyAiCisibmlldCBnZcOvbXBsZW1lbnRlZXJkLiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6MzE1Cittc2dpZCAiY3JlYXRpbmciCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDAyCisjLCBmdXp6eQorbXNnaWQgIlRoZSBmaWxlIHN5c3RlbSBpcyBpbiBhbiBpbnZhbGlkIHN0YXRlLiAgUGVyaGFwcyBpdCBpcyBtb3VudGVkPyIKK21zZ3N0ciAiSGV0IGJlc3RhbmRzc3lzdGVlbSBpcyBncm90ZXIgZGFuIGRlIHBhcnRpdGllISIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDEwCittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIGlzIGluIG9sZCAodW5yZXNpemVhYmxlKSBmb3JtYXQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQxNgorbXNnaWQgIkludmFsaWQgZnJlZSBibG9ja3MgY291bnQuICBSdW4gcmVpc2VyZnNjayAtLWNoZWNrIGZpcnN0LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0MzEKKyMsIGZ1enp5Cittc2dpZCAiY2hlY2tpbmciCittc2dzdHIgImNvbnRyb2xlZXIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQzNworbXNnaWQgIlJlaXNlcmZzIHRyZWUgc2VlbXMgdG8gYmUgY29ycnVwdGVkLiAgUnVuIHJlaXNlcmZzY2sgLS1jaGVjayBmaXJzdC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDQ5CisjLCBmdXp6eQorbXNnaWQgIiIKKyJUaGUgcmVpc2VyZnMgZmlsZSBzeXN0ZW0gcGFzc2VkIGEgYmFzaWMgY2hlY2suICBGb3IgYSBtb3JlIGNvbXByZWhlbnNpdmUgIgorImNoZWNrLCBydW4gcmVpc2VyZnNjayAtLWNoZWNrLiIKK21zZ3N0ciAiIgorIkhldCBleHQyLWJlc3RhbmRzc3lzdGVlbSBoZWVmdCBkZXplIGJhc2lzdGVzdCBnb2VkIGRvb3JzdGFhbi4gIFZvb3IgZWVuIG1lZXIgIgorInVpdGdlYnJlaWRlIHRlc3Qga3VudCB1IGhldCBwcm9ncmFtbWEgZTJmc2NrIGdlYnJ1aWtlbi4iCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQ3NAorIywgZnV6enkKK21zZ2lkICJTb3JyeSwgY2FuJ3QgbW92ZSB0aGUgc3RhcnQgb2YgcmVpc2VyZnMgcGFydGl0aW9ucyB5ZXQuIgorbXNnc3RyICJTb3JyeSwgaGV0IGJlZ2luIHZhbiBlZW4gZXh0Mi1wYXJ0aXRpZSBrYW4gbm9nIG5pZXQgdmVycGxhYXRzdCB3b3JkZW4hIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0OTAKK21zZ2lkICJDb3VsZG4ndCByZW9wZW4gZGV2aWNlIGFic3RyYWN0aW9uIGxheWVyIGZvciByZWFkL3dyaXRlLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo1MDggbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo1NTIKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MjUwIGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NjI5Cittc2dpZCAic2hyaW5raW5nIgorbXNnc3RyICJiZXppZyBtZXQgdmVya2xlaW5lbiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NTIwCisjLCBmdXp6eQorbXNnaWQgImV4cGFuZGluZyIKK21zZ3N0ciAiV2FhcnNjaHV3aW5nIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo1OTIKK21zZ2lkICJDb3VsZG4ndCBjcmVhdGUgcmVpc2VyZnMgZGV2aWNlIGFic3RyYWN0aW9uIGhhbmRsZXIuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjYwNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRGV2aWNlIGlzIHRvbyBzbWFsbCBmb3IgJWx1IGJsb2Nrcy4iCittc2dzdHIgIkhldCBiZXN0YW5kc3N5c3RlZW0gaXMgdGUga2xlaW4gdm9vciBleHQyLiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NjE1Cittc2dpZCAiY29weWluZyIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo2ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgcmVzb2x2ZSBzeW1ib2wgJXMuICBFcnJvcjogJXMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjcwNAorbXNnaWQgIkdOVSBQYXJ0ZWQgZm91bmQgYW4gaW52YWxpZCBsaWJyZWlzZXJmcyBsaWJyYXJ5LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo3MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkdOVSBQYXJ0ZWQgaGFzIGRldGVjdGVkIGxpYnJlaXNlcmZzIGludGVyZmFjZSB2ZXJzaW9uIG1pc21hdGNoLiAgRm91bmQgJWQtJSIKKyJkLCByZXF1aXJlZCAlZC4gUmVpc2VyRlMgc3VwcG9ydCB3aWxsIGJlIGRpc2FibGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2FpeC5jOjEzNworIywgZnV6enkKK21zZ2lkICJTdXBwb3J0IGZvciByZWFkaW5nIEFJWCBkaXNrIGxhYmVscyBpcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiIgorIk9uZGVyc3RldW5pbmcgdm9vciBoZXQgbWFrZW4gdmFuICVzLWJlc3RhbmRzc3lzdGVtZW4gaXMgbm9nIG5pZXQgIgorImdlw69tcGxlbWVudGVlcmQuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2FpeC5jOjE0OAorIywgZnV6enkKK21zZ2lkICJTdXBwb3J0IGZvciB3cml0aW5nIEFJWCBkaXNrIGxhYmVscyBpcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiIgorIk9uZGVyc3RldW5pbmcgdm9vciBoZXQgbWFrZW4gdmFuICVzLWJlc3RhbmRzc3lzdGVtZW4gaXMgbm9nIG5pZXQgIgorImdlw69tcGxlbWVudGVlcmQuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2FpeC5jOjE2MQorIywgZnV6enkKK21zZ2lkICIiCisiU3VwcG9ydCBmb3IgYWRkaW5nIHBhcnRpdGlvbnMgdG8gQUlYIGRpc2sgbGFiZWxzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICIiCisiT25kZXJzdGV1bmluZyB2b29yIGhldCBtYWtlbiB2YW4gJXMtYmVzdGFuZHNzeXN0ZW1lbiBpcyBub2cgbmlldCAiCisiZ2XDr21wbGVtZW50ZWVyZC4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYWl4LmM6MTcxCisjLCBmdXp6eQorbXNnaWQgIiIKKyJTdXBwb3J0IGZvciBkdXBsaWNhdGluZyBwYXJ0aXRpb25zIGluIEFJWCBkaXNrIGxhYmVscyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiIgorIk9uZGVyc3RldW5pbmcgdm9vciBoZXQgbWFrZW4gdmFuICVzLWJlc3RhbmRzc3lzdGVtZW4gaXMgbm9nIG5pZXQgIgorImdlw69tcGxlbWVudGVlcmQuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2FpeC5jOjE4OQorIywgZnV6enkKK21zZ2lkICIiCisiU3VwcG9ydCBmb3Igc2V0dGluZyBzeXN0ZW0gdHlwZSBvZiBwYXJ0aXRpb25zIGluIEFJWCBkaXNrIGxhYmVscyBpcyBub3QgIgorImltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiIKKyJPbmRlcnN0ZXVuaW5nIHZvb3IgaGV0IG1ha2VuIHZhbiAlcy1iZXN0YW5kc3N5c3RlbWVuIGlzIG5vZyBuaWV0ICIKKyJnZcOvbXBsZW1lbnRlZXJkLiIKKworIzogbGlicGFydGVkL2xhYmVscy9haXguYzoxOTkKKyMsIGZ1enp5Cittc2dpZCAiU3VwcG9ydCBmb3Igc2V0dGluZyBmbGFncyBpbiBBSVggZGlzayBsYWJlbHMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiIKKyJPbmRlcnN0ZXVuaW5nIHZvb3IgaGV0IG1ha2VuIHZhbiAlcy1iZXN0YW5kc3N5c3RlbWVuIGlzIG5vZyBuaWV0ICIKKyJnZcOvbXBsZW1lbnRlZXJkLiIKKworIzogbGlicGFydGVkL2xhYmVscy9ic2QuYzo1MDEgbGlicGFydGVkL2xhYmVscy9kYXNkLmM6NzU1CisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rvcy5jOjE5NzQgbGlicGFydGVkL2xhYmVscy9kdmguYzo3NzAKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6MTQ0OCBsaWJwYXJ0ZWQvbGFiZWxzL2xvb3AuYzoyNDgKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6MTQwOCBsaWJwYXJ0ZWQvbGFiZWxzL3BjOTguYzo3NTkKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6MTA0MSBsaWJwYXJ0ZWQvbGFiZWxzL3N1bi5jOjcwNQorbXNnaWQgIlVuYWJsZSB0byBzYXRpc2Z5IGFsbCBjb25zdHJhaW50cyBvbiB0aGUgcGFydGl0aW9uLiIKK21zZ3N0ciAiS2FuIG5pZXQgYWFuIGFsbGUgdm9vcndhYXJkZW4gdm9vciBkZXplIHBhcnRpdGllIHZvbGRvZW4uIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2JzZC5jOjUyNgorbXNnaWQgIlVuYWJsZSB0byBhbGxvY2F0ZSBhIGJzZCBkaXNrbGFiZWwgc2xvdC4iCittc2dzdHIgIkthbiBpbiBoZXQgQlNELXNjaGlqZmxhYmVsIGdlZW4gcGxla2plIG1lZXIgcmVzZXJ2ZXJlbi4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZGFzZC5jOjE2NgorIywgZnV6enkKK21zZ2lkICJVbmFibGUgdG8gZGV0ZXJtaW5lIHRoZSBibG9jayBzaXplIG9mIHRoaXMgZGFzZCIKK21zZ3N0ciAiS2FuIGRlIGdyb290dGUgdmFuICVzIG5pZXQgYWNodGVyaGFsZW4gLS0gJXMuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rhc2QuYzo3ODEKKyMsIGZ1enp5Cittc2dpZCAiVW5hYmxlIHRvIGFsbG9jYXRlIGEgZGFzZCBkaXNrbGFiZWwgc2xvdCIKK21zZ3N0ciAiS2FuIGluIGhldCBCU0Qtc2NoaWpmbGFiZWwgZ2VlbiBwbGVramUgbWVlciByZXNlcnZlcmVuLiIKKworIzogbGlicGFydGVkL2xhYmVscy9kb3MuYzo4MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBwYXJ0aXRpb24gdGFibGUgb24gJXMgLS0gd3Jvbmcgc2lnbmF0dXJlICV4LiIKK21zZ3N0ciAiT25nZWxkaWdlIHBhcnRpdGlldGFiZWwgb3AgJXMgLS0gb25qdWlzdGUgdmluZ2VyYWZkcnVrICV4LiIKKworIzogbGlicGFydGVkL2xhYmVscy9kb3MuYzo4NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBwYXJ0aXRpb24gdGFibGUgLSByZWN1cnNpdmUgcGFydGl0aW9uIG9uICVzLiIKK21zZ3N0ciAiT25nZWxkaWdlIHBhcnRpdGlldGFiZWwgLS0gcmVjdXJzaWV2ZSBwYXJ0aXRpZSBvcCAlcy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZG9zLmM6MTMxOAorbXNnaWQgIkV4dGVuZGVkIHBhcnRpdGlvbnMgY2Fubm90IGJlIGhpZGRlbiBvbiBtc2RvcyBkaXNrIGxhYmVscy4iCittc2dzdHIgIiIKKyJVaXRnZWJyZWlkZSBwYXJ0aXRpZXMga3VubmVuIG9wIE1TRE9TLXNjaGlqZmxhYmVscyBuaWV0IHZlcmJvcmdlbiB6aWpuLiIKKworIzogbGlicGFydGVkL2xhYmVscy9kb3MuYzoxOTU4Cittc2dpZCAiUGFydGVkIGNhbid0IHJlc2l6ZSBwYXJ0aXRpb25zIG1hbmFnZWQgYnkgV2luZG93cyBEeW5hbWljIERpc2suIgorbXNnc3RyICIiCisiUGFydGVkIGthbiBwYXJ0aXRpdGllcyBiZWhlZXJkIGRvb3IgV2luZG93cyBEeW5hbWljIERpc2sgbmlldCB2YW4gZ3Jvb3R0ZSAiCisidmVyYW5kZXJlbi4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6MTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyBubyBleHRlbmRlZCBwYXJ0aXRpb24gKHZvbHVtZSBoZWFkZXIgcGFydGl0aW9uKS4iCittc2dzdHIgIiVzIGJldmF0IGdlZW4gdWl0Z2VicmVpZGUgcGFydGl0aWUgKHZvbHVtZW5rb3AtcGFydGl0aWUpLiIKKworIzogbGlicGFydGVkL2xhYmVscy9kdmguYzozMTMKK21zZ2lkICJDaGVja3N1bSBpcyB3cm9uZywgaW5kaWNhdGluZyB0aGUgcGFydGl0aW9uIHRhYmxlIGlzIGNvcnJ1cHQuIgorbXNnc3RyICJPbmp1aXN0ZSBjb250cm9sZXNvbTogZGUgcGFydGl0aWV0YWJlbCBpcyBiZXNjaGFkaWdkLiIKKworIzogbGlicGFydGVkL2xhYmVscy9kdmguYzo2MTYKK21zZ2lkICJPbmx5IHByaW1hcnkgcGFydGl0aW9ucyBjYW4gYmUgcm9vdCBwYXJ0aXRpb25zLiIKK21zZ3N0ciAiQWxsZWVuIGVlbiBwcmltYWlyZSBwYXJ0aXRpZSBrYW4gcm9vdHBhcnRpdGllIHppam4uIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjYzMAorbXNnaWQgIk9ubHkgcHJpbWFyeSBwYXJ0aXRpb25zIGNhbiBiZSBzd2FwIHBhcnRpdGlvbnMuIgorbXNnc3RyICJBbGxlZW4gZWVuIHByaW1haXJlIHBhcnRpdGllIGthbiBzd2FwcGFydGl0aWUgemlqbi4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6NjQ0Cittc2dpZCAiT25seSBsb2dpY2FsIHBhcnRpdGlvbnMgY2FuIGJlIGEgYm9vdCBmaWxlLiIKK21zZ3N0ciAiQWxsZWVuIGVlbiBsb2dpc2NoZSBwYXJ0aXRpZSBrYW4gZWVuIG9wc3RhcnRiZXN0YW5kIHppam4uIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjcyMQorbXNnaWQgIk9ubHkgbG9naWNhbCBwYXJ0aXRpb25zIChib290IGZpbGVzKSBoYXZlIGEgbmFtZS4iCittc2dzdHIgIkFsbGVlbiBsb2dpc2NoZSBwYXJ0aXRpZXMgKG9wc3RhcnRiZXN0YW5kZW4pIGhlYmJlbiBlZW4gbmFhbS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6ODEyCittc2dpZCAiVG9vIG1hbnkgcHJpbWFyeSBwYXJ0aXRpb25zIgorbXNnc3RyICJUZSB2ZWVsIHByaW1haXJlIHBhcnRpdGllcy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIG9wZW4gZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHNlZWsgZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHJlYWQgZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMTMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyB3cml0ZSBlcnJvclxuIgorIiVzXG4iCittc2dzdHIgIiVzIHRpamRlbnMgc2NocmlqdmVuIG5hYXIgJXMiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIElPQ1RMIGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBBUEkgdmVyc2lvbiBtaXNtYXRjaFxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgVW5zdXBwb3J0ZWQgZGlzayB0eXBlXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBVbnN1cHBvcnRlZCBkaXNrIGZvcm1hdFxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEzMAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIERpc2sgaW4gdXNlXG4iCisiJXNcbiIKK21zZ3N0ciAiU2NoaWpmICVzOiAlc1xuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBDb25maWcgZmlsZSBzeW50YXggZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFZvbHVtZSBsYWJlbCBpcyBjb3JydXB0ZWQuXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBhIGRhdGEgc2V0IG5hbWUgaXMgY29ycnVwdGVkLlxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjE0NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgc3BhY2UgYWxsb2NhdGlvblxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgZGV2aWNlIHZlcmlmaWNhdGlvbiBmYWlsZWRcbiIKKyJUaGUgc3BlY2lmaWVkIGRldmljZSBpcyBub3QgYSB2YWxpZCBEQVNEIGRldmljZVxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIEZhdGFsIGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjQ1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgY29udGFpbnMgR1BUIHNpZ25hdHVyZXMsIGluZGljYXRpbmcgdGhhdCBpdCBoYXMgYSBHUFQgdGFibGUuICBIb3dldmVyLCBpdCAiCisiZG9lcyBub3QgaGF2ZSBhIHZhbGlkIGZha2UgbXNkb3MgcGFydGl0aW9uIHRhYmxlLCBhcyBpdCBzaG91bGQuICBQZXJoYXBzIGl0ICIKKyJ3YXMgY29ycnVwdGVkIC0tIHBvc3NpYmx5IGJ5IGEgcHJvZ3JhbSB0aGF0IGRvZXNuJ3QgdW5kZXJzdGFuZCBHUFQgcGFydGl0aW9uICIKKyJ0YWJsZXMuICBPciBwZXJoYXBzIHlvdSBkZWxldGVkIHRoZSBHUFQgdGFibGUsIGFuZCBhcmUgbm93IHVzaW5nIGFuIG1zZG9zICIKKyJwYXJ0aXRpb24gdGFibGUuICBJcyB0aGlzIGEgR1BUIHBhcnRpdGlvbiB0YWJsZT8iCittc2dzdHIgIiIKKyIlcyBiZXZhdCBHUFQtdmluZ2VyYWZkcnVra2VuLCBkaWUgYWFuZ2V2ZW4gZGF0IGhldCBlZW4gR1BULXRhYmVsIGhlZWZ0LiAgIgorIk1hYXIgaGV0IGJldmF0IGdlZW4gZ2VsZGlnZSBuZXAtTVNET1MtcGFydGl0aWV0YWJlbCwgem9hbHMgem91IG1vZXRlbi4gICIKKyJNaXNzY2hpZW4gd2VyZCBkZXplIGJlc2NoYWRpZ2QsIG1vZ2VsaWprIGRvb3IgZWVuIHByb2dyYW1tYSBkYXQgR1BULSIKKyJwYXJ0aXRpZXRhYmVsbGVuIG5pZXQgYmVncmlqcHQuICBPZiBtaXNzY2hpZW4gaGVlZnQgdSBkZSBHUFQtdGFiZWwgIgorInZlcndpamRlcmQgZW4gZ2VicnVpa3QgbnUgZWVuIE1TRE9TLXBhcnRpdGlldGFiZWwuICBJcyBkaXQgZWNodCBlZW4gR1BULSIKKyJwYXJ0aXRpZXRhYmVsPyIKKworIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzo2NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb3JtYXQgb2YgdGhlIEdQVCBwYXJ0aXRpb24gdGFibGUgaXMgdmVyc2lvbiAleCwgd2hpY2ggaXMgbmV3ZXIgdGhhbiAiCisid2hhdCBQYXJ0ZWQgY2FuIHJlY29nbmlzZS4gIFBsZWFzZSB0ZWxsIHVzISAgYnVnLXBhcnRlZEBnbnUub3JnIgorbXNnc3RyICIiCisiRGUgaW5kZWxpbmcgdmFuIGRlIEdQVC1wYXJ0aXRpZXRhYmVsIGlzIHZhbiB2ZXJzaWUgJXguICBEaXQgaXMgbmlldXdlciBkYW4gIgorIndhdCBkZXplIHZlcnNpZSB2YW4gUGFydGVkIGtlbnQuICBWZXJ0ZWwgaGV0IG9uczogPGJ1Zy1wYXJ0ZWRAZ251Lm9yZz4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6Njk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3QgYWxsIG9mIHRoZSBzcGFjZSBhdmFpbGFibGUgdG8gJXMgYXBwZWFycyB0byBiZSB1c2VkLCB5b3UgY2FuIGZpeCB0aGUgR1BUICIKKyJ0byB1c2UgYWxsIG9mIHRoZSBzcGFjZSAoYW4gZXh0cmEgJWxsdSBibG9ja3MpIG9yIGNvbnRpbnVlIHdpdGggdGhlIGN1cnJlbnQgIgorInNldHRpbmc/ICIKK21zZ3N0ciAiIgorIk5pZXQgYWxsZSBiZXNjaGliYXJlIHJ1aW10ZSB2b29yICVzIHNjaGlqbnQgZ2VicnVpa3QgdGUgd29yZGVuLlxuIgorIkRlIEdQVCBiaWp3ZXJrZW4gb20gYWxsZSBydWltdGUgdGUgZ2VicnVpa2VuICglbGx1IGV4dHJhIGJsb2trZW4pLFxuIgorIm9mIGRvb3JnYWFuIGVuIGRlemUgZXh0cmEgcnVpbXRlIG5lZ2VyZW4/IgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjgyNworbXNnaWQgIiIKKyJUaGUgYmFja3VwIEdQVCB0YWJsZSBpcyBub3QgYXQgdGhlIGVuZCBvZiB0aGUgZGlzaywgYXMgaXQgc2hvdWxkIGJlLiAgVGhpcyAiCisibWlnaHQgbWVhbiB0aGF0IGFub3RoZXIgb3BlcmF0aW5nIHN5c3RlbSBiZWxpZXZlcyB0aGUgZGlzayBpcyBzbWFsbGVyLiAgRml4LCAiCisiYnkgbW92aW5nIHRoZSBiYWNrdXAgdG8gdGhlIGVuZCAoYW5kIHJlbW92aW5nIHRoZSBvbGQgYmFja3VwKT8iCittc2dzdHIgIiIKKyJEZSByZXNlcnZla29waWUgdmFuIGRlIEdQVC10YWJlbCBzdGFhdCBuaWV0IGhlbGVtYWFsIGFhbiBoZXQgZWluZGUgdmFuIGRlICIKKyJzY2hpamYsIHpvYWxzIHpvdSBtb2V0ZW4uICBEaXQgem91IGt1bm5lbiBiZXRla2VuZW4gZGF0IGVlbiBhbmRlciAiCisiYmVzdHVyaW5nc3N5c3RlZW0gYWFubmVlbXQgZGF0IGRlIHNjaGlqZiBrbGVpbmVyIGlzIGRhbiBoaWogaXMuICBEaXQga2FuICIKKyJnZXJlcGFyZWVyZCB3b3JkZW4gZG9vciBkZSByZXNlcnZla29waWUgbmFhciBoZXQgZWluZGUgdGUgdmVycGxhYXRzZW4gZW4gZGUgIgorIm91ZGUgcmVzZXJ2ZWtvcGllIHRlIHZlcndpamRlcmVuLiAgUmVwYXJhdGllIHVpdHZvZXJlbj8iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6ODYyCittc2dpZCAiIgorIlRoZSBwcmltYXJ5IEdQVCB0YWJsZSBpcyBjb3JydXB0LCBidXQgdGhlIGJhY2t1cCBhcHBlYXJzIE9LLCBzbyB0aGF0IHdpbGwgYmUgIgorInVzZWQuIgorbXNnc3RyICIiCisiRGUgcHJpbWFpcmUgR1BULXRhYmVsIGlzIGJlc2NoYWRpZ2QsIG1hYXIgZGUgcmVzZXJ2ZWtvcGllIGxpamt0IGdvZWQuICBEZXplICIKKyJsYWF0c3RlIHphbCB3b3JkZW4gZ2VicnVpa3QuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjg3MAorbXNnaWQgIiIKKyJCb3RoIHRoZSBwcmltYXJ5IGFuZCBiYWNrdXAgR1BUIHRhYmxlcyBhcmUgY29ycnVwdC4gIFRyeSBtYWtpbmcgYSBmcmVzaCAiCisidGFibGUsIGFuZCB1c2luZyBQYXJ0ZWQncyByZXNjdWUgZmVhdHVyZSB0byByZWNvdmVyIHBhcnRpdGlvbnMuIgorbXNnc3RyICIiCisiWm93ZWwgZGUgcHJpbWFpcmUgR1BULXRhYmVsIGFscyBkZSByZXNlcnZla29waWUgemlqbiBiZXNjaGFkaWdkLiAgTWFhayBlZXJzdCAiCisiZWVuIG5pZXV3IHNjaGlqZmxhYmVsIGFhbiwgZW4gcHJvYmVlciBkYW4gbWV0IGRlICdyZWQnLW9wZHJhY2h0IGRlICIKKyJrd2lqdGdlcmFha3RlIHBhcnRpdGllcyB0ZSBoZXJzdGVsbGVuLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoxODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBzaWduYXR1cmUgJXggZm9yIE1hYyBkaXNrIGxhYmVscy4iCittc2dzdHIgIk9uZ2VsZGlnZSB2aW5nZXJhZmRydWsgJXggdm9vciBlZW4gTWFjLXNjaGlqZmxhYmVsLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoyMjYKK21zZ2lkICJQYXJ0aXRpb24gbWFwIGhhcyBubyBwYXJ0aXRpb24gbWFwIGVudHJ5ISIKK21zZ3N0ciAiUGFydGl0aWV0YWJlbCBiZXZhdCBnZWVuIHBhcnRpdGlldGFiZWxpdGVtISIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgdG9vIHNtYWxsIGZvciBhIE1hYyBkaXNrIGxhYmVsISIKK21zZ3N0ciAiJXMgaXMgdGUga2xlaW4gdm9vciBlZW4gTWFjLXNjaGlqZmxhYmVsISIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo1MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGFydGl0aW9uICVkIGhhcyBhbiBpbnZhbGlkIHNpZ25hdHVyZSAleC4iCittc2dzdHIgIlBhcnRpdGllICVkIGhlZWZ0IGVlbiBvbmdlbGRpZ2UgdmluZ2VyYWZkcnVrICV4LiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGFydGl0aW9uICVkIGhhcyBhbiBpbnZhbGlkIGxlbmd0aCBvZiAwIGJ5dGVzISIKK21zZ3N0ciAiUGFydGl0aWUgJWQgaGVlZnQgZWVuIG9uZ2VsZGlnZSBsZW5ndGUgdmFuIDAgYnl0ZXMhIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjU4MAorbXNnaWQgIlRoZSBkYXRhIHJlZ2lvbiBkb2Vzbid0IHN0YXJ0IGF0IHRoZSBzdGFydCBvZiB0aGUgcGFydGl0aW9uLiIKK21zZ3N0ciAiSGV0IGdlZ2V2ZW5zZ2ViaWVkIGJlZ2ludCBuaWV0IGJpaiBoZXQgYmVnaW4gdmFuIGRlIHBhcnRpdGllLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo1OTcKK21zZ2lkICJUaGUgYm9vdCByZWdpb24gZG9lc24ndCBzdGFydCBhdCB0aGUgc3RhcnQgb2YgdGhlIHBhcnRpdGlvbi4iCittc2dzdHIgIkhldCBvcHN0YXJ0Z2ViaWVkIGJlZ2ludCBuaWV0IGJpaiBoZXQgYmVnaW4gdmFuIGRlIHBhcnRpdGllLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo2MTEKK21zZ2lkICJUaGUgcGFydGl0aW9uJ3MgYm9vdCByZWdpb24gZG9lc24ndCBvY2N1cHkgdGhlIGVudGlyZSBwYXJ0aXRpb24uIgorbXNnc3RyICJIZXQgb3BzdGFydGdlYmllZCBiZXNsYWF0IG5pZXQgZGUgZ2VoZWxlIHBhcnRpdGllLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo2MjIKK21zZ2lkICJUaGUgcGFydGl0aW9uJ3MgZGF0YSByZWdpb24gZG9lc24ndCBvY2N1cHkgdGhlIGVudGlyZSBwYXJ0aXRpb24uIgorbXNnc3RyICJIZXQgZ2VnZXZlbnNnZWJpZWQgYmVzbGFhdCBuaWV0IGRlIGdlaGVsZSBwYXJ0aXRpZS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6Njc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXZWlyZCBibG9jayBzaXplIG9uIGRldmljZSBkZXNjcmlwdG9yOiAlZCBieXRlcyBpcyBub3QgZGl2aXNpYmxlIGJ5IDUxMi4iCittc2dzdHIgIiIKKyJWcmVlbWRlIGJsb2tncm9vdHRlIGluIGFwcGFyYWF0YmVzY2hyaWp2aW5nOiAlZCBieXRlcyBpcyBuaWV0IGRlZWxiYWFyIGRvb3IgIgorIjUxMi4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6Njg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZHJpdmVyIGRlc2NyaXB0b3Igc2F5cyB0aGUgcGh5c2ljYWwgYmxvY2sgc2l6ZSBpcyAlZCBieXRlcywgYnV0IExpbnV4ICIKKyJzYXlzIGl0IGlzICVkIGJ5dGVzLiIKK21zZ3N0ciAiIgorIkRlIGJlc2NocmlqdmluZyB2YW4gaGV0IHN0dXVycHJvZ3JhbW1hIHplZ3QgZGF0IGRlIGZ5c2lla2UgYmxva2dyb290dGUgJWQgIgorImJ5dGVzIGlzLCBtYWFyIExpbnV4IHplZ3QgZGF0IGhldCAlZCBieXRlcyBpcy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NzM2Cittc2dpZCAiTm8gdmFsaWQgcGFydGl0aW9uIG1hcCBmb3VuZC4iCittc2dzdHIgIkdlZW4gZ2VsZGlnZSBwYXJ0aXRpZXRhYmVsIGdldm9uZGVuLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo3OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvbmZsaWN0aW5nIHBhcnRpdGlvbiBtYXAgZW50cnkgc2l6ZXMhICBFbnRyeSAxIHNheXMgaXQgaXMgJWQsIGJ1dCBlbnRyeSAlZCAiCisic2F5cyBpdCBpcyAlZCEiCittc2dzdHIgIiIKKyJUZWdlbnN0cmlqZGlnZSBncm9vdHRlcyB2YW4gcGFydGl0aWV0YWJlbGl0ZW1zISAgSXRlbSAxIHplZ3QgZGF0IGhldCAlZCBpcywgIgorIm1hYXIgaXRlbSAlZCB6ZWd0IGRhdCBoZXQgJWQgaXMhIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjgyMgorbXNnaWQgIldlaXJkISAgVGhlcmUgYXJlIDIgcGFydGl0aW9ucyBtYXAgZW50cmllcyEiCittc2dzdHIgIlZyZWVtZDogdHdlZSBwYXJ0aXRpZXRhYmVsaXRlbXMhIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjEzNDcKK21zZ2lkICIiCisiQ2hhbmdpbmcgdGhlIG5hbWUgb2YgYSByb290IG9yIHN3YXAgcGFydGl0aW9uIHdpbGwgcHJldmVudCBMaW51eCBmcm9tICIKKyJyZWNvZ25pc2luZyBpdCBhcyBzdWNoLiIKK21zZ3N0ciAiIgorIkhldCB2ZXJhbmRlcmVuIHZhbiBkZSBuYWFtIHZhbiBlZW4gcm9vdC0gb2Ygc3dhcHBhcnRpdGllIHphbCB2ZXJoaW5kZXJlbiBkYXQgIgorIkxpbnV4IGRlemUgYWxzIHpvZGFuaWcgaGVya2VudC4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6MTQ0MworbXNnaWQgIkNhbid0IGFkZCBhbm90aGVyIHBhcnRpdGlvbiAtLSB0aGUgcGFydGl0aW9uIG1hcCBpcyB0b28gc21hbGwhIgorbXNnc3RyICIiCisiS2FuIGdlZW4gbmlldXdlIHByaW1haXJlIHBhcnRpdGllIHRvZXZvZWdlbjogZGUgcGFydGl0aWV0YWJlbCBpcyB0ZSBrbGVpbiEiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcGM5OC5jOjM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHBhcnRpdGlvbiB0YWJsZSBvbiAlcy4iCittc2dzdHIgIk9uZ2VsZGlnZSBwYXJ0aXRpZXRhYmVsIG9wICVzLiIKKworIzogbGlicGFydGVkL2xhYmVscy9wYzk4LmM6NDA2IGxpYnBhcnRlZC9sYWJlbHMvcGM5OC5jOjQ4NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGFydGl0aW9uICVkIGlzbid0IGFsaWduZWQgdG8gY3lsaW5kZXIgYm91bmRhcmllcy4gIFRoaXMgaXMgc3RpbGwgIgorInVuc3VwcG9ydGVkLiIKK21zZ3N0ciAiIgorIlBhcnRpdGllICVkIGlzIG5pZXQgdWl0Z2VsaWpuZCBvcCBjaWxpbmRlcmdyZW56ZW4uICBEaXQgd29yZHQgbm9nIG5pZXQgIgorIm9uZGVyc3RldW5kLiIKKworIzogbGlicGFydGVkL2xhYmVscy9wYzk4LmM6NzkxCittc2dpZCAiQ2FuJ3QgYWRkIGFub3RoZXIgcGFydGl0aW9uLiIKK21zZ3N0ciAiS2FuIG5pZXQgbm9nIGVlbiBwYXJ0aXRpZSB0b2V2b2VnZW4uIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjE2MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEJhZCBjaGVja3N1bSBvbiBibG9jayAlbGx1IG9mIHR5cGUgJXMuIgorbXNnc3RyICIlcyA6IE9uanVpc3RlIGNvbnRyb2xlc29tIG9wIGJsb2sgJWxsdSB2YW4gdHlwZSAlcy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6NDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRGlkbid0IGZpbmQgcmRiIGJsb2NrLCBzaG91bGQgbmV2ZXIgaGFwcGVuLiIKK21zZ3N0ciAiJXMgOiBHZWVuICdyZGInLWJsb2sgZ2V2b25kZW4gLS0gem91IG5vb2l0IG1vZ2VuIGdlYmV1cmVuLiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo1ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBMb29wIGRldGVjdGVkIGF0IGJsb2NrICVkLiIKK21zZ3N0ciAiJXMgOiBMdXMgZ2VkZXRlY3RlZXJkIGJpaiBibG9rICVkLiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo2MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBUaGUgJXMgbGlzdCBzZWVtcyBiYWQgYXQgYmxvY2sgJXMuIgorbXNnc3RyICIlcyA6IERlICVzLWxpanN0IGxpamt0IHZlcmtlZXJkIHRlIHppam4gYmlqIGJsb2sgJXMuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjY4OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBsaXN0IGJhZCBibG9ja3MuIgorbXNnc3RyICIlcyA6IEludnVsbGVuIHZhbiBzbGVjaHRlIGJsb2trZW4gaXMgbWlzbHVrdC4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6Njk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGxpc3QgcGFydGl0aW9uIGJsb2Nrcy4iCittc2dzdHIgIiVzIDogSW52dWxsZW4gdmFuIHBhcnRpdGllYmxva2tlbiBpcyBtaXNsdWt0LiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo3MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gbGlzdCBmaWxlIHN5c3RlbSBibG9ja3MuIgorbXNnc3RyICIlcyA6IEludnVsbGVuIHZhbiBiZXN0YW5kc3N5c3RlZW1ibG9ra2VuIGlzIG1pc2x1a3QuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjcxMworIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBsaXN0IGJvb3QgYmxvY2tzLiIKK21zZ3N0ciAiJXMgOiBJbnZ1bGxlbiB2YW4gb3BzdGFydGJsb2trZW4gaXMgbWlzbHVrdC4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6NzQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byB3cml0ZSBwYXJ0aXRpb24gYmxvY2sgYXQgJWQuIgorbXNnc3RyICJTY2hyaWp2ZW4gdmFuIHBhcnRpdGllYmxvayAlZCBpcyBtaXNsdWt0LiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzoxMDY5Cittc2dpZCAiVW5hYmxlIHRvIGFsbG9jYXRlIGEgcGFydGl0aW9uIG51bWJlci4iCittc2dzdHIgIkdlZW4gcGFydGl0aWVudW1tZXIgbWVlciBiZXNjaGlrYmFhci4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6MTQ1Cittc2dpZCAiQ29ycnVwdGVkIFN1biBkaXNrIGxhYmVsIGRldGVjdGVkLiIKK21zZ3N0ciAiQmVzY2hhZGlnZCBTdW4tc2NoaWpmbGFiZWwgZ2V2b25kZW4uIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3N1bi5jOjI2NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGRpc2sgQ0hTIGdlb21ldHJ5ICglZCwlZCwlZCkgcmVwb3J0ZWQgYnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0gZG9lcyBub3QgIgorIm1hdGNoIHRoZSBnZW9tZXRyeSBzdG9yZWQgb24gdGhlIGRpc2sgbGFiZWwgKCVkLCVkLCVkKS4iCittc2dzdHIgIiIKKyJEZSBsb2dpc2NoZSBzY2hpamZvcGJvdXcgKCVkLCVkLCVkKSBnZXJhcHBvcnRlZXJkIGRvb3IgaGV0IGJlc3R1cmluZ3NzeXN0ZWVtICIKKyJrb210IG5pZXQgb3ZlcmVlbiBtZXQgZGUgb3Bib3V3ICglZCwlZCwlZCkgb3BnZXNsYWdlbiBpbiBoZXQgc2NoaWpmbGFiZWwuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3N1bi5jOjI4OAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgZGlzayBsYWJlbCBkZXNjcmliZXMgYSBkaXNrIGJpZ2dlciB0aGFuICVzLiIKK21zZ3N0ciAiSGV0IHNjaGlqZmxhYmVsIGJlc2NocmlqZnQgZWVuIHNjaGlqZiBncm90ZXIgZGFuICVzLiIKKworIzogbGlicGFydGVkL2xhYmVscy9zdW4uYzo0NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGRpc2sgaGFzICVkIGN5bGluZGVycywgd2hpY2ggaXMgZ3JlYXRlciB0aGFuIHRoZSBtYXhpbXVtIG9mIDY1NTM2LiIKK21zZ3N0ciAiRGUgc2NoaWpmIGhlZWZ0ICVkIGNpbGluZGVycywgd2F0IGdyb3RlciBpcyBkYW4gaGV0IG1heGltdW0gdmFuIDY1NTM2LiIKKworIzogbGlicGFydGVkL2xhYmVscy9zdW4uYzo3MzcKK21zZ2lkICIiCisiVGhlIFdob2xlIERpc2sgcGFydGl0aW9uIGlzIHRoZSBvbmx5IGF2YWlsYWJsZSBvbmUgbGVmdC4gIEdlbmVyYWxseSwgaXQgaXMgIgorIm5vdCBhIGdvb2QgaWRlYSB0byBvdmVyd3JpdGUgdGhpcyBwYXJ0aXRpb24gd2l0aCBhIHJlYWwgb25lLiAgU29sYXJpcyBtYXkgIgorIm5vdCBiZSBhYmxlIHRvIGJvb3Qgd2l0aG91dCBpdCwgYW5kIFNJTE8gKHRoZSBzcGFyYyBib290IGxvYWRlcikgYXBwcmVjaWF0ZXMgIgorIml0IGFzIHdlbGwuIgorbXNnc3RyICIiCisiRGUgJ0hlbGUtU2NoaWpmJy1wYXJ0aXRpZSBpcyBkZSBlbmlnZSBkaWUgb3ZlciBpcy4gIEluIGhldCBhbGdlbWVlbiBpcyBoZXQgIgorImdlZW4gZ29lZCBpZGVlIG9tIGRlemUgcGFydGl0aWUgbWV0IGVlbiBlY2h0ZSB0ZSBvdmVyc2NocmlqdmVuLiAgU29sYXJpcyBrYW4gIgorIm1vZ2VsaWprIG5pZXQgem9uZGVyIGRlemUgcGFydGl0aWUgc3RhcnRlbiwgZW4gU0lMTyAoaGV0IFNwYXJjLSIKKyJvcHN0YXJ0cHJvZ3JhbW1hKSB3YWFyZGVlcnQgZGUgYWFud2V6aWdoZWlkIGVydmFuIG9vay4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6NzUyCittc2dpZCAiU3VuIGRpc2sgbGFiZWwgaXMgZnVsbC4iCittc2dzdHIgIlN1bi1zY2hpamZsYWJlbCBpcyB2b2wuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIG9wZW5pbmcgZGV2aWNlICclcycgZmFpbGVkLlxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6MTY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBzZWVraW5nIGRldmljZSAnJXMnIGZhaWxlZC5cbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjE3MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgd3JpdGluZyB0byBkZXZpY2UgJyVzJyBmYWlsZWQsXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzoxNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHJlYWRpbmcgZnJvbSBkZXZpY2UgJyVzJyBmYWlsZWQuXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzoxNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmF0YWwgZXJyb3JcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0MTgKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBWVE9DIGxhYmVscy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDI0Cittc2dpZCAiQ291bGQgbm90IHJlYWQgVlRPQyBGTVQxIERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQzMQorbXNnaWQgIkNvdWxkIG5vdCByZWFkIFZUT0MgRk1UNCBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0MzgKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBWVE9DIEZNVDUgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDQ1Cittc2dpZCAiQ291bGQgbm90IHJlYWQgVlRPQyBGTVQ3IERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQ2MgorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBWVE9DIGxhYmVscy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDY4Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIFZUT0MgRk1UMSBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0NzUKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgVlRPQyBGTVQ0IERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQ4MgorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBWVE9DIEZNVDUgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDg5Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIFZUT0MgRk1UNyBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGlicGFydGVkLmM6Mjk2IGxpYnBhcnRlZC9saWJwYXJ0ZWQuYzozMTYKK21zZ2lkICJPdXQgb2YgbWVtb3J5LiIKK21zZ3N0ciAiT252b2xkb2VuZGUgZ2VoZXVnZW4uIgorCisjOiBsaWJwYXJ0ZWQvdW5pdC5jOjEzOQorbXNnaWQgIkNhbm5vdCBnZXQgdW5pdCBzaXplIGZvciBzcGVjaWFsIHVuaXQgJ0NPTVBBQ1QnLiIKK21zZ3N0ciAiS2FuIGdyb290dGUgdmFuIHNwZWNpYWxlIGVlbmhlaWQgJ0NPTVBBQ1QnIG5pZXQgYmVwYWxlbi4iCisKKyM6IGxpYnBhcnRlZC91bml0LmM6Mzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIlwiJXNcIiBoYXMgaW52YWxpZCBzeW50YXggZm9yIGxvY2F0aW9ucy4iCittc2dzdHIgIlwiJXNcIiBoZWVmdCBlZW4gdm9vciBsb2thdGllcyBvbmdlbGRpZ2Ugc3ludGF4aXMuIgorCisjOiBsaWJwYXJ0ZWQvdW5pdC5jOjM5NAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgbWF4aW11bSBoZWFkIHZhbHVlIGlzICVkLiIKK21zZ3N0ciAiRGUgbWF4aW11bSB3YWFyZGUgdm9vciBkZSBrb3AgaXMgJWQuIgorCisjOiBsaWJwYXJ0ZWQvdW5pdC5jOjQwMQorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgbWF4aW11bSBzZWN0b3IgdmFsdWUgaXMgJWQuIgorbXNnc3RyICJEZSBtYXhpbXVtIHdhYXJkZSB2b29yIGRlIHNlY3RvciBpcyAlZC4iCisKKyM6IGxpYnBhcnRlZC91bml0LmM6NDEzIGxpYnBhcnRlZC91bml0LmM6NTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBsb2NhdGlvbiAlcyBpcyBvdXRzaWRlIG9mIHRoZSBkZXZpY2UgJXMuIgorbXNnc3RyICJMb2thdGllICVzIGxpZ3QgYnVpdGVuIGhldCBhcHBhcmFhdCAlcy4iCisKKyM6IGxpYnBhcnRlZC91bml0LmM6NTI3Cittc2dpZCAiSW52YWxpZCBudW1iZXIuIgorbXNnc3RyICJPbmdlbGRpZyBudW1tZXIuIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYWZmcy5jOjYzIGxpYnBhcnRlZC9mcy9hbWlnYS9hcGZzLmM6NTYKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hc2ZzLmM6NzAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGFsbG9jYXRlIHBhcnRpdGlvbiBibG9ja1xuIgorbXNnc3RyICIlcyA6IEludnVsbGVuIHZhbiBwYXJ0aXRpZWJsb2trZW4gaXMgbWlzbHVrdC4iCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hZmZzLmM6NzggbGlicGFydGVkL2ZzL2FtaWdhL2FwZnMuYzo3MAorIzogbGlicGFydGVkL2ZzL2FtaWdhL2FzZnMuYzo4NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gYWxsb2NhdGUgYmxvY2tcbiIKK21zZ3N0ciAiJXMgOiBJbnZ1bGxlbiB2YW4gb3BzdGFydGJsb2trZW4gaXMgbWlzbHVrdC4iCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hZmZzLmM6ODMgbGlicGFydGVkL2ZzL2FtaWdhL2FwZnMuYzo3NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBDb3VsZG4ndCByZWFkIGJvb3QgYmxvY2sgJWxsdVxuIgorbXNnc3RyICIlcyA6IEx1cyBnZWRldGVjdGVlcmQgYmlqIGJsb2sgJWQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYWZmcy5jOjk5IGxpYnBhcnRlZC9mcy9hbWlnYS9hcGZzLmM6ODYKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hc2ZzLmM6OTIgbGlicGFydGVkL2ZzL2FtaWdhL2FzZnMuYzoxMDYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogQ291bGRuJ3QgcmVhZCByb290IGJsb2NrICVsbHVcbiIKK21zZ3N0ciAiJXMgOiBMdXMgZ2VkZXRlY3RlZXJkIGJpaiBibG9rICVkLiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6NzIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGFsbG9jYXRlIGlkIGxpc3QgZWxlbWVudFxuIgorbXNnc3RyICIlcyA6IEludnVsbGVuIHZhbiBzbGVjaHRlIGJsb2trZW4gaXMgbWlzbHVrdC4iCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IENvdWxkbid0IHJlYWQgYmxvY2sgJWxsdVxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jOjIwMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBCYWQgY2hlY2tzdW0gb24gYmxvY2sgJWxsdSBvZiB0eXBlICVzXG4iCittc2dzdHIgIiVzIDogT25qdWlzdGUgY29udHJvbGVzb20gb3AgYmxvayAlbGx1IHZhbiB0eXBlICVzLiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6MjEyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyA6IENvdWxkbid0IHdyaXRlIGJsb2NrICVkXG4iCittc2dzdHIgIiVzIDogTHVzIGdlZGV0ZWN0ZWVyZCBiaWogYmxvayAlZC4iCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jOjI3OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gYWxsb2NhdGUgZGlza19zcGVjaWZpYyByZGIgYmxvY2tcbiIKK21zZ3N0ciAiJXMgOiBJbnZ1bGxlbiB2YW4gc2xlY2h0ZSBibG9ra2VuIGlzIG1pc2x1a3QuIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzoyODkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRGlkbid0IGZpbmQgcmRiIGJsb2NrLCBzaG91bGQgbmV2ZXIgaGFwcGVuXG4iCittc2dzdHIgIiVzIDogR2VlbiAncmRiJy1ibG9rIGdldm9uZGVuIC0tIHpvdSBub29pdCBtb2dlbiBnZWJldXJlbi4iCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jOjMxOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gcmVhZCBwYXJ0aXRpb24gYmxvY2sgJWxsdVxuIgorbXNnc3RyICIlcyA6IEludnVsbGVuIHZhbiBwYXJ0aXRpZWJsb2trZW4gaXMgbWlzbHVrdC4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo4NyBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6MTEyCittc2dpZCAiSW5jb25zaXN0ZW50IGdyb3VwIGRlc2NyaXB0b3JzISIKK21zZ3N0ciAiSW5jb25zaXN0ZW50ZSBncm9lcHNiZXNjaHJpanZlcnMhIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6OTEgbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjExNgorbXNnaWQgIkZpbGUgc3lzdGVtIGZ1bGwhIgorbXNnc3RyICJCZXN0YW5kc3N5c3RlZW0gaXMgdm9sISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjY4NgorbXNnaWQgIkludmFsaWQgc3VwZXJibG9jay4gIEFyZSB5b3Ugc3VyZSB0aGlzIGlzIGFuIGV4dDIgZmlsZSBzeXN0ZW0/IgorbXNnc3RyICJPbmdlbGRpZyBzdXBlcmJsb2suICBXZWV0IHUgemVrZXIgZGF0IGRpdCBlZW4gZXh0Mi1iZXN0YW5kc3N5c3RlZW0gaXM/IgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6NzAwIGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NjU4Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGVycm9ycyEgIFlvdSBzaG91bGQgcnVuIGUyZnNjay4iCittc2dzdHIgIkhldCBiZXN0YW5kc3N5c3RlZW0gYmV2YXQgZm91dGVuISAgVm9lciBlZXJzdCBlMmZzY2sgdWl0LiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjcxMQorbXNnaWQgIiIKKyJGaWxlIHN5c3RlbSB3YXMgbm90IGNsZWFubHkgdW5tb3VudGVkISAgWW91IHNob3VsZCBydW4gZTJmc2NrLiAgTW9kaWZ5aW5nIGFuICIKKyJ1bmNsZWFuIGZpbGUgc3lzdGVtIGNvdWxkIGNhdXNlIHNldmVyZSBjb3JydXB0aW9uLiIKK21zZ3N0ciAiIgorIkhldCBiZXN0YW5kc3N5c3RlZW0gd2VyZCBuaWV0IGNvcnJlY3Qgb250a29wcGVsZCEgIFZvZXIgZWVyc3QgZTJmc2NrIHVpdC4gICIKKyJIZXQgdmVyYW5kZXJlbiB2YW4gZWVuIG9uZ2VzY2hvb25kIGJlc3RhbmRzc3lzdGVlbSBrYW4gdG90IHp3YXJlICIKKyJiZXNjaGFkaWdpbmdlbiBsZWlkZW4uIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6NzMxCittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGluY29tcGF0aWJsZSBmZWF0dXJlIGVuYWJsZWQuIgorbXNnc3RyICJIZXQgYmVzdGFuZHNzeXN0ZWVtIGdlYnJ1aWt0IGVlbiBpbmNvbXBhdGliZWxlIGZ1bmN0aWUuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6NzQyCittc2dpZCAiRXJyb3IgYWxsb2NhdGluZyBidWZmZXIgY2FjaGUuIgorbXNnc3RyICJGb3V0IHRpamRlbnMgcmVzZXJ2ZXJlbiB2YW4gYnVmZmVyY2FjaGUuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2lub2RlX3JlbG9jYXRvci5jOjExNAorbXNnaWQgIiIKKyJGb3VuZCBhbiBpbm9kZSB3aXRoIGEgaW5jb3JyZWN0IGxpbmsgY291bnQuICBCZXR0ZXIgZ28gcnVuIGUyZnNjayBmaXJzdCEiCittc2dzdHIgIiIKKyJFciBpcyBlZW4gaW5vZGUgZ2V2b25kZW4gbWV0IGVlbiBvbmp1aXN0IGFhbnRhbCB2ZXJ3aWp6aW5nZW4uICBVIGt1bnQgYmV0ZXIgIgorImVlcnN0IGUyZnNjayB1aXR2b2VyZW4uIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2lub2RlX3JlbG9jYXRvci5jOjQ4NworbXNnaWQgIk5vdCBlbm91Z2ggZnJlZSBpbm9kZXMhIgorbXNnc3RyICJOaWV0IGdlbm9lZyBiZXNjaGlrYmFyZSBpbm9kZXMhIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjIyMworbXNnaWQgIkZpbGUgc3lzdGVtIGlzIHRvbyBmdWxsIHRvIHJlbW92ZSBhIGdyb3VwISIKK21zZ3N0ciAiSGV0IGJlc3RhbmRzc3lzdGVlbSBpcyB0ZSB2b2wgb20gZWVuIGdyb2VwIHRlIHZlcndpamRlcmVuISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzoyMzIKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgdG9vIG1hbnkgYWxsb2NhdGVkIGlub2RlcyB0byByZW1vdmUgYSBncm91cCEiCittc2dzdHIgIiIKKyJIZXQgYmVzdGFuZHNzeXN0ZWVtIGhlZWZ0IHRlIHZlZWwgZ2VicnVpa3RlIGlub2RlcyBvbSBlZW4gZ3JvZXAgdGUgIgorInZlcndpamRlcmVuISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo0OTEKK21zZ2lkICJhZGRpbmcgZ3JvdXBzIgorbXNnc3RyICJiZXppZyBtZXQgdG9ldm9lZ2VuIHZhbiBncm9lcGVuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjUyOAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGZpbGUgc3lzdGVtIGlzIHRvbyBmdWxsIHRvIHJlc2l6ZSBpdCB0byAlaSBibG9ja3MuICBTb3JyeS4iCittc2dzdHIgIiIKKyJVdyBiZXN0YW5kc3N5c3RlZW0gaXMgdGUgdm9sIG9tIGhldCBuYWFyICVpIGJsb2trZW4gdGUgdmVya2xlaW5lbi4gIFNvcnJ5LiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo1MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgZmlsZSBzeXN0ZW0gaGFzIHRvbyBtYW55IG9jY3VwaWVkIGlub2RlcyB0byByZXNpemUgaXQgdG8gJWkgYmxvY2tzLiAgIgorIlNvcnJ5LiIKK21zZ3N0ciAiIgorIlV3IGJlc3RhbmRzc3lzdGVlbSBoZWVmdCB0ZSB2ZWVsIGJlemV0dGUgaW5vZGVzIG9tIGhldCBuYWFyICVpIGJsb2trZW4gdGUgIgorInZlcmtsZWluZW4uICBTb3JyeS4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NjY2Cittc2dpZCAiRmlsZSBzeXN0ZW0gd2FzIG5vdCBjbGVhbmx5IHVubW91bnRlZCEgIFlvdSBzaG91bGQgcnVuIGUyZnNjay4iCittc2dzdHIgIiIKKyJIZXQgYmVzdGFuZHNzeXN0ZWVtIHdlcmQgbmlldCBjb3JyZWN0IG9udGtvcHBlbGQhICBWb2VyIGVlcnN0IGUyZnNjayB1aXQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjY3NQorbXNnaWQgIiIKKyJUaGUgZmlsZSBzeXN0ZW0gaGFzIHRoZSAnZGlyX2luZGV4JyBmZWF0dXJlIGVuYWJsZWQuICBQYXJ0ZWQgY2FuIG9ubHkgcmVzaXplICIKKyJ0aGUgZmlsZSBzeXN0ZW0gaWYgaXQgZGlzYWJsZXMgdGhpcyBmZWF0dXJlLiAgWW91IGNhbiBlbmFibGUgaXQgbGF0ZXIgYnkgIgorInJ1bm5pbmcgJ3R1bmUyZnMgLU8gZGlyX2luZGV4IERFVklDRScgYW5kIHRoZW4gJ2UyZnNjayAtZkQgREVWSUNFJy4iCittc2dzdHIgIiIKKyJIZXQgYmVzdGFuZHNzeXN0ZWVtIGdlYnJ1aWt0IGRlICdkaXJfaW5kZXgnLWZ1bmN0aWUuICBQYXJ0ZWQga2FuIGhldCAiCisiYmVzdGFuZHNzeXN0ZWVtIGFsbGVlbiB2YW4gZ3Jvb3R0ZSB2ZXJhbmRlcmVuIGFscyBoZXQgZGV6ZSBmdW5jdGllICIKKyJ1aXRzY2hha2VsdC4gIFUga3VudCBkZXplIGZ1bmN0aWUgbGF0ZXIgd2VlciBhYW56ZXR0ZW4gZG9vciBtaWRkZWwgdmFuICIKKyIndHVuZTJmcyAtTyBkaXJfaW5kZXggQVBQQVJBQVQnIGVuIGRhbiAnZTJmc2NrIC1mRCBBUFBBUkFBVCcuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjY5MQorbXNnaWQgIiIKKyJBIHJlc2l6ZSBvcGVyYXRpb24gb24gdGhpcyBmaWxlIHN5c3RlbSB3aWxsIHVzZSBFWFBFUklNRU5UQUwgY29kZVxuIgorInRoYXQgTUFZIENPUlJVUFQgaXQgKGFsdGhvdWdoIG5vIG9uZSBoYXMgcmVwb3J0ZWQgYW55IHN1Y2ggZGFtYWdlIHlldCkuXG4iCisiWW91IHNob3VsZCBhdCBsZWFzdCBiYWNrdXAgeW91ciBkYXRhIGZpcnN0LCBhbmQgcnVuICdlMmZzY2sgLWYnIGFmdGVyd2FyZHMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfYmxvY2tfcmVsb2NhdG9yLmM6MTk4Cittc2dpZCAiQ3Jvc3MtbGlua2VkIGJsb2NrcyBmb3VuZCEgIEJldHRlciBnbyBydW4gZTJmc2NrIGZpcnN0ISIKK21zZ3N0ciAiIgorIktydWlzZWxpbmdzIGdla29wcGVsZGUgYmxva2tlbiBnZXZvbmRlbiEgIFUga3VudCBiZXRlciBlZXJzdCBlMmZzY2sgIgorInVpdHZvZXJlbi4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfYmxvY2tfcmVsb2NhdG9yLmM6NTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrICVpIGhhcyBubyByZWZlcmVuY2U/ICBXZWlyZC4iCittc2dzdHIgIkFhbiBibG9rICVpIHdvcmR0IG5pZXQgZ2VyZWZlcmVlcmQhICBNZXJrd2FhcmRpZy4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfYmxvY2tfcmVsb2NhdG9yLmM6NzM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrICVpIHNob3VsZG4ndCBoYXZlIGJlZW4gbWFya2VkICglZCwgJWQpISIKK21zZ3N0ciAiQmxvayAlaSB6b3UgbmlldCAoJWQsICVkKSBnZW1hcmtlZXJkIG1vZXRlbiB6aWpuISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvaW50ZXJmYWNlLmM6MTg2Cittc2dpZCAiIgorIlRoZSBleHQyIGZpbGUgc3lzdGVtIHBhc3NlZCBhIGJhc2ljIGNoZWNrLiAgRm9yIGEgbW9yZSBjb21wcmVoZW5zaXZlIGNoZWNrLCAiCisidXNlIHRoZSBlMmZzY2sgcHJvZ3JhbS4iCittc2dzdHIgIiIKKyJIZXQgZXh0Mi1iZXN0YW5kc3N5c3RlZW0gaGVlZnQgZGV6ZSBiYXNpc3Rlc3QgZ29lZCBkb29yc3RhYW4uICBWb29yIGVlbiBtZWVyICIKKyJ1aXRnZWJyZWlkZSB0ZXN0IGt1bnQgdSBoZXQgcHJvZ3JhbW1hIGUyZnNjayBnZWJydWlrZW4uIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9pbnRlcmZhY2UuYzoyMDMKK21zZ2lkICJTb3JyeSwgY2FuJ3QgbW92ZSB0aGUgc3RhcnQgb2YgZXh0MiBwYXJ0aXRpb25zIHlldCEiCittc2dzdHIgIlNvcnJ5LCBoZXQgYmVnaW4gdmFuIGVlbiBleHQyLXBhcnRpdGllIGthbiBub2cgbmlldCB2ZXJwbGFhdHN0IHdvcmRlbiEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfYnVmZmVyLmM6ODIKK21zZ2lkICJDb3VsZG4ndCBmbHVzaCBidWZmZXIgY2FjaGUhIgorbXNnc3RyICJLYW4gZGUgYnVmZmVyY2FjaGUgbmlldCBsZWVnbWFrZW4hIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX21rZnMuYzoxNjIKK21zZ2lkICJ3cml0aW5nIHBlci1ncm91cCBtZXRhZGF0YSIKK21zZ3N0ciAiYmV6aWcgbWV0IHNjaHJpanZlbiB2YW4gZ3JvZXBzbWV0YWdlZ2V2ZW5zIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX21rZnMuYzo1NjQKK21zZ2lkICJGaWxlIHN5c3RlbSB0b28gc21hbGwgZm9yIGV4dDIuIgorbXNnc3RyICJIZXQgYmVzdGFuZHNzeXN0ZWVtIGlzIHRlIGtsZWluIHZvb3IgZXh0Mi4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY2FsYy5jOjEzNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IG5lZWQgJXMgb2YgZnJlZSBkaXNrIHNwYWNlIHRvIHNocmluayB0aGlzIHBhcnRpdGlvbiB0byB0aGlzIHNpemUuICAiCisiQ3VycmVudGx5LCBvbmx5ICVzIGlzIGZyZWUuIgorbXNnc3RyICIiCisiVSBoZWVmdCBtaW5zdGVucyAlcyB2cmlqZSBzY2hpamZydWltdGUgbm9kaWcgb20gZGV6ZSBwYXJ0aXRpZSBuYWFyIGRpZSAiCisiZ3Jvb3R0ZSB0ZSBrdW5uZW4gdmVya2xlaW5lbiAodSBoZWVmdCBudSBzbGVjaHRzICVzIGJlc2NoaWtiYWFyKS4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY29udGV4dC5jOjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDbHVzdGVyIHN0YXJ0IGRlbHRhID0gJWQsIHdoaWNoIGlzIG5vdCBhIG11bHRpcGxlIG9mIHRoZSBjbHVzdGVyIHNpemUgJWQuIgorbXNnc3RyICIiCisiQ2x1c3RlcmJlZ2luLWRlbHRhID0gJWQsIGVuIGRhdCBpcyBnZWVuIHZlZWx2b3VkIHZhbiBkZSBjbHVzdGVyZ3Jvb3R0ZSAlZC4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvZmF0LmM6MzA4CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhcnRpdGlvbiB0b28gYmlnL3NtYWxsIGZvciBhICVzIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiUGFydGl0aWUgaXMgdGUga2xlaW4gb2YgdGUgZ3Jvb3Qgdm9vciBlZW4gJXMtYmVzdGFuZHNzeXN0ZWVtLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9mYXQuYzo0NzQKK21zZ2lkICIiCisiVGhlIEZBVHMgZG9uJ3QgbWF0Y2guICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRoaXMgbWVhbnMsIHRoZW4gc2VsZWN0ICIKKyJjYW5jZWwsIHJ1biBzY2FuZGlzayBvbiB0aGUgZmlsZSBzeXN0ZW0sIGFuZCB0aGVuIGNvbWUgYmFjay4iCittc2dzdHIgIiIKKyJEZSBGQVRzIGtvbWVuIG5pZXQgb3ZlcmVlbi4gIEFscyB1IG5pZXQgd2VldCB3YXQgZGl0IGJldGVrZW50LCBzZWxlY3RlZXIgZGFuICIKKyInQW5udWxlcmVuJywgdm9lciBzY2FuZGlzayB1aXQgb3AgaGV0IGJlc3RhbmRzc3lzdGVlbSwgZW4ga29tIGRhbiB3ZWVyIHRlcnVnLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9mYXQuYzo1MTQKK21zZ2lkICJUaGVyZSBhcmUgbm8gcG9zc2libGUgY29uZmlndXJhdGlvbnMgZm9yIHRoaXMgRkFUIHR5cGUuIgorbXNnc3RyICJFciB6aWpuIGdlZW4gbW9nZWxpamtlIGNvbmZpZ3VyYXRpZXMgdm9vciBkaXQgdHlwZSBGQVQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jOjUyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRmlsZSBzeXN0ZW0gZG9lc24ndCBoYXZlIGV4cGVjdGVkIHNpemVzIGZvciBXaW5kb3dzIHRvIGxpa2UgaXQuICBDbHVzdGVyICIKKyJzaXplIGlzICVkayAoJWRrIGV4cGVjdGVkKTsgbnVtYmVyIG9mIGNsdXN0ZXJzIGlzICVkICglZCBleHBlY3RlZCk7IHNpemUgb2YgIgorIkZBVHMgaXMgJWQgc2VjdG9ycyAoJWQgZXhwZWN0ZWQpLiIKK21zZ3N0ciAiIgorIkhldCBiZXN0YW5kc3N5c3RlZW0gaGVlZnQgYW5kZXJlIGdyb290dGVzIGRhbiBXaW5kb3dzIGdyYWFnIHdpbC4gIERlICIKKyJjbHVzdGVyZ3Jvb3R0ZSBpcyAlZGsgKCVkayB2ZXJ3YWNodCk7IGhldCBhYW50YWwgY2x1c3RlcnMgaXMgJWQgKCVkICIKKyJ2ZXJ3YWNodCk7IGRlIGdyb290dGUgdmFuIGRlIEZBVHMgaXMgJWQgc2VjdG9yZW4gKCVkIHZlcndhY2h0KS4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvZmF0LmM6NTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGaWxlIHN5c3RlbSBpcyByZXBvcnRpbmcgdGhlIGZyZWUgc3BhY2UgYXMgJWQgY2x1c3RlcnMsIG5vdCAlZCBjbHVzdGVycy4iCittc2dzdHIgIiIKKyJIZXQgYmVzdGFuZHNzeXN0ZWVtIGdlZWZ0IGRlIGJlc2NoaWtiYXJlIHJ1aW10ZSBhYW4gYWxzICVkIGNsdXN0ZXJzLCBuaWV0ICVkICIKKyJjbHVzdGVycy4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvZmF0LmM6ODc0Cittc2dpZCAiIgorIkdOVSBQYXJ0ZWQgd2FzIG1pc2NvbXBpbGVkOiB0aGUgRkFUIGJvb3Qgc2VjdG9yIHNob3VsZCBiZSA1MTIgYnl0ZXMuICBGQVQgIgorInN1cHBvcnQgd2lsbCBiZSBkaXNhYmxlZC4iCittc2dzdHIgIiIKKyJHTlUgUGFydGVkIGlzIHZlcmtlZXJkIGdlY29tcGlsZWVyZDogZGUgRkFULW9wc3RhcnRzZWN0b3Igem91IDUxMiBieXRlcyAiCisibW9ldGVuIHppam4uICBPbmRlcnN0ZXVuaW5nIHZvb3IgRkFUIHdvcmR0IHVpdGdlc2NoYWtlbGQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjE1OQorbXNnaWQgIiIKKyJUaGVyZSdzIG5vdCBlbm91Z2ggcm9vbSBpbiB0aGUgcm9vdCBkaXJlY3RvcnkgZm9yIGFsbCBvZiB0aGUgZmlsZXMuICBFaXRoZXIgIgorImNhbmNlbCwgb3IgaWdub3JlIHRvIGxvc2UgdGhlIGZpbGVzLiIKK21zZ3N0ciAiIgorIkVyIGlzIG5pZXQgZ2Vub2VnIHJ1aW10ZSBpbiBkZSBob29mZG1hcCB2b29yIGFsbGUgYmVzdGFuZGVuLiAgS2llcyAnTmVnZXJlbicgIgorIm9tIGRlIG92ZXJ0YWxsaWdlIGJlc3RhbmRlbiB0ZSB2ZXJ3aWpkZXJlbi4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6MzAwCittc2dpZCAiRXJyb3Igd3JpdGluZyB0byB0aGUgcm9vdCBkaXJlY3RvcnkuIgorbXNnc3RyICJGb3V0IHRpamRlbnMgc2NocmlqdmVuIG5hYXIgZGUgaG9vZmRtYXAuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjQ4OQorbXNnaWQgIklmIHlvdSBsZWF2ZSB5b3VyIGZpbGUgc3lzdGVtIGFzIEZBVDE2LCB0aGVuIHlvdSB3aWxsIGhhdmUgbm8gcHJvYmxlbXMuIgorbXNnc3RyICIiCisiQWxzIHUgaGV0IGJlc3RhbmRzc3lzdGVlbSBhbHMgRkFUMTYgbGFhdCwgenVsdCB1IGdlZW4gcHJvYmxlbWVuIGhlYmJlbi4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NDkyCittc2dpZCAiIgorIklmIHlvdSBjb252ZXJ0IHRvIEZBVDE2LCBhbmQgTVMgV2luZG93cyBpcyBpbnN0YWxsZWQgb24gdGhpcyBwYXJ0aXRpb24sIHRoZW4gIgorInlvdSBtdXN0IHJlLWluc3RhbGwgdGhlIE1TIFdpbmRvd3MgYm9vdCBsb2FkZXIuICBJZiB5b3Ugd2FudCB0byBkbyB0aGlzLCB5b3UgIgorInNob3VsZCBjb25zdWx0IHRoZSBQYXJ0ZWQgbWFudWFsIChvciB5b3VyIGRpc3RyaWJ1dGlvbidzIG1hbnVhbCkuIgorbXNnc3RyICIiCisiQWxzIHUgY29udmVydGVlcnQgbmFhciBGQVQxNiwgZW4gTVMtV2luZG93cyBpcyBvcCBkZXplIHBhcnRpdGllICIKKyJnZcOvbnN0YWxsZWVyZCwgZGFuIGRpZW50IHUgaGV0IE1TLVdpbmRvd3Mtb3BzdGFydHByb2dyYW1tYSBvcG5pZXV3IHRlICIKKyJpbnN0YWxsZXJlbi4gIEFscyB1IGRpdCB3aWx0IGRvZW4sIHJhYWRwbGVlZyBkYW4gZGUgUGFydGVkLWRvY3VtZW50YXRpZSAob2YgIgorImRlIGRvY3VtZW50YXRpZSB2YW4gdXcgZGlzdHJpYnV0aWUpLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1MDAKK21zZ2lkICIiCisiSWYgeW91IGxlYXZlIHlvdXIgZmlsZSBzeXN0ZW0gYXMgRkFUMzIsIHRoZW4geW91IHdpbGwgbm90IGludHJvZHVjZSBhbnkgbmV3ICIKKyJwcm9ibGVtcy4iCittc2dzdHIgIiIKKyJBbHMgdSBoZXQgYmVzdGFuZHNzeXN0ZWVtIGFscyBGQVQzMiBsYWF0LCB6dWx0IHUgZ2VlbiBuaWV1d2UgcHJvYmxlbWVuICIKKyJpbnRyb2R1Y2VyZW4uIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjUwNAorbXNnaWQgIiIKKyJJZiB5b3UgY29udmVydCB0byBGQVQzMiwgYW5kIE1TIFdpbmRvd3MgaXMgaW5zdGFsbGVkIG9uIHRoaXMgcGFydGl0aW9uLCB0aGVuICIKKyJ5b3UgbXVzdCByZS1pbnN0YWxsIHRoZSBNUyBXaW5kb3dzIGJvb3QgbG9hZGVyLiAgSWYgeW91IHdhbnQgdG8gZG8gdGhpcywgeW91ICIKKyJzaG91bGQgY29uc3VsdCB0aGUgUGFydGVkIG1hbnVhbCAob3IgeW91ciBkaXN0cmlidXRpb24ncyBtYW51YWwpLiAgQWxzbywgIgorImNvbnZlcnRpbmcgdG8gRkFUMzIgd2lsbCBtYWtlIHRoZSBmaWxlIHN5c3RlbSB1bnJlYWRhYmxlIGJ5IE1TIERPUywgTVMgIgorIldpbmRvd3MgOTVhLCBhbmQgTVMgV2luZG93cyBOVC4iCittc2dzdHIgIiIKKyJBbHMgdSBjb252ZXJ0ZWVydCBuYWFyIEZBVDMyLCBlbiBNUy1XaW5kb3dzIGlzIG9wIGRlemUgcGFydGl0aWUgIgorImdlw69uc3RhbGxlZXJkLCBkYW4gZGllbnQgdSBoZXQgTVMtV2luZG93cy1vcHN0YXJ0cHJvZ3JhbW1hIG9wbmlldXcgdGUgIgorImluc3RhbGxlcmVuLiAgQWxzIHUgZGl0IHdpbHQgZG9lbiwgcmFhZHBsZWVnIGRhbiBkZSBQYXJ0ZWQtZG9jdW1lbnRhdGllIChvZiAiCisiZGUgZG9jdW1lbnRhdGllIHZhbiB1dyBkaXN0cmlidXRpZSkuICBNYWFyIGJlZGVuazogY29udmVydGVyZW4gbmFhciBGQVQzMiAiCisibWFha3QgaGV0IGJlc3RhbmRzc3lzdGVlbSBvbmxlZXNiYWFyIHZvb3IgTVNET1MsIFdpbmRvd3MgOTVhIGVuIFdpbmRvd3MgTlQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjUxOAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyAgJXMgICVzIgorbXNnc3RyICIlcyAgJXMgICVzIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjUxOQorbXNnaWQgIldvdWxkIHlvdSBsaWtlIHRvIHVzZSBGQVQzMj8iCittc2dzdHIgIldpbHQgdSBGQVQzMiBnZWJydWlrZW4/IgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjU1MCBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjU2NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyAgJXMiCittc2dzdHIgIiVzICAlcyIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1NTEKK21zZ2lkICIiCisiVGhlIGZpbGUgc3lzdGVtIGNhbiBvbmx5IGJlIHJlc2l6ZWQgdG8gdGhpcyBzaXplIGJ5IGNvbnZlcnRpbmcgdG8gRkFUMTYuIgorbXNnc3RyICIiCisiSGV0IGJlc3RhbmRzc3lzdGVlbSBrYW4gYWxsZWVuIG5hYXIgZGV6ZSBncm9vdHRlIHZlcmFuZGVyZCB3b3JkZW4gZG9vciB0ZSAiCisiY29udmVydGVyZW4gbmFhciBGQVQxNi4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTY3Cittc2dpZCAiIgorIlRoZSBmaWxlIHN5c3RlbSBjYW4gb25seSBiZSByZXNpemVkIHRvIHRoaXMgc2l6ZSBieSBjb252ZXJ0aW5nIHRvIEZBVDMyLiIKK21zZ3N0ciAiIgorIkhldCBiZXN0YW5kc3N5c3RlZW0ga2FuIGFsbGVlbiBuYWFyIGRlemUgZ3Jvb3R0ZSB2ZXJhbmRlcmQgd29yZGVuIGRvb3IgdGUgIgorImNvbnZlcnRlcmVuIG5hYXIgRkFUMzIuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjU4MAorbXNnaWQgIiIKKyJHTlUgUGFydGVkIGNhbm5vdCByZXNpemUgdGhpcyBwYXJ0aXRpb24gdG8gdGhpcyBzaXplLiAgV2UncmUgd29ya2luZyBvbiBpdCEiCittc2dzdHIgIiIKKyJHTlUgUGFydGVkIGthbiBkZSBwYXJ0aXRpZWdyb290dGUgbmlldCBuYWFyIGRlemUgYWZtZXRpbmdlbiB2ZXJhbmRlcmVuLiAgV2UgIgorInppam4gZXIgbWVlIGJlemlnISIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6NDkgbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6NTYKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgYW4gaW52YWxpZCBzaWduYXR1cmUgZm9yIGEgRkFUIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiRGl0IGJlc3RhbmRzc3lzdGVlbSBoZWVmdCBlZW4gdm9vciBGQVQgb25nZWxkaWdlIHZpbmdlcmFmZHJ1ay4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjY0Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGludmFsaWQgc2VjdG9yIHNpemUgZm9yIGEgRkFUIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiRGl0IGJlc3RhbmRzc3lzdGVlbSBoZWVmdCBlZW4gdm9vciBGQVQgb25nZWxkaWdlIHNlY3Rvcmdyb290dGUuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo3MQorbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyBhbiBpbnZhbGlkIGNsdXN0ZXIgc2l6ZSBmb3IgYSBGQVQgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICJEaXQgYmVzdGFuZHNzeXN0ZWVtIGhlZWZ0IGVlbiB2b29yIEZBVCBvbmdlbGRpZ2UgY2x1c3Rlcmdyb290dGUuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo3OAorbXNnaWQgIiIKKyJGaWxlIHN5c3RlbSBoYXMgYW4gaW52YWxpZCBudW1iZXIgb2YgcmVzZXJ2ZWQgc2VjdG9ycyBmb3IgYSBGQVQgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICIiCisiRGl0IGJlc3RhbmRzc3lzdGVlbSBoZWVmdCBlZW4gdm9vciBGQVQgb25nZWxkaWcgYWFudGFsIGdlcmVzZXJ2ZWVyZGUgIgorInNlY3RvcmVuLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6ODUKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgYW4gaW52YWxpZCBudW1iZXIgb2YgRkFUcy4iCittc2dzdHIgIkRpdCBiZXN0YW5kc3N5c3RlZW0gaGVlZnQgZWVuIG9uZ2VsZGlnIGFhbnRhbCBGQVRzLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6MTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGlzIGZpbGUgc3lzdGVtIGhhcyBhIGxvZ2ljYWwgc2VjdG9yIHNpemUgb2YgJWQuICBHTlUgUGFydGVkIGlzIGtub3duIG5vdCAiCisidG8gd29yayBwcm9wZXJseSB3aXRoIHNlY3RvciBzaXplcyBvdGhlciB0aGFuIDUxMiBieXRlcy4iCittc2dzdHIgIiIKKyJEaXQgYmVzdGFuZHNzeXN0ZWVtIGhlZWZ0IGVlbiBsb2dpc2NoZSBzZWN0b3Jncm9vdHRlIHZhbiAlZC4gIEdOVSBQYXJ0ZWQgIgorIndlcmt0IG5pZXQgZ29lZCBtZXQgc2VjdG9yZ3Jvb3R0ZXMgYW5kZXJzIGRhbiA1MTIgYnl0ZXMuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzoxNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmaWxlIHN5c3RlbSdzIENIUyBnZW9tZXRyeSBpcyAoJWQsICVkLCAlZCksIHdoaWNoIGlzIGludmFsaWQuICBUaGUgIgorInBhcnRpdGlvbiB0YWJsZSdzIENIUyBnZW9tZXRyeSBpcyAoJWQsICVkLCAlZCkuICBJZiB5b3Ugc2VsZWN0IElnbm9yZSwgdGhlICIKKyJmaWxlIHN5c3RlbSdzIENIUyBnZW9tZXRyeSB3aWxsIGJlIGxlZnQgdW5jaGFuZ2VkLiAgSWYgeW91IHNlbGVjdCBGaXgsIHRoZSAiCisiZmlsZSBzeXN0ZW0ncyBDSFMgZ2VvbWV0cnkgd2lsbCBiZSBzZXQgdG8gbWF0Y2ggdGhlIHBhcnRpdGlvbiB0YWJsZSdzIENIUyAiCisiZ2VvbWV0cnkuIgorbXNnc3RyICIiCisiRGUgbG9naXNjaGUgc2NoaWpmb3Bib3V3ICglZCwlZCwlZCkgdmVybWVsZCBpbiBoZXQgYmVzdGFuZHNzeXN0ZWVtIGlzICIKKyJvbmdlbGRpZy4gIERlIG9wYm91dyBvcGdlc2xhZ2VuIGluIGhldCBzY2hpamZsYWJlbCBpcyAoJWQsJWQsJWQpIChjaWxpbmRlcnMsIgorImtvcHBlbixzZWN0b3JlbikuICBBbHMgdSAnTmVnZXJlbicga2llc3QsIHdvcmR0IGRlIG9wYm91dyB2ZXJtZWxkIGluIGhldCAiCisiYmVzdGFuZHNzeXN0ZWVtIG9udmVyYW5kZXJkIGdlbGF0ZW4uICBBbHMgdSAnUmVwYXJlcmVuJyBraWVzdCwgd29yZHQgZGV6ZSAiCisib3Bib3V3IGdlbGlqa2dlbWFha3QgYWFuIGRpZSBpbiBkZSBwYXJ0aXRpZXRhYmVsLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6MjEzCittc2dpZCAiRkFUIGJvb3Qgc2VjdG9yIHNheXMgbG9naWNhbCBzZWN0b3Igc2l6ZSBpcyAwLiAgVGhpcyBpcyB3ZWlyZC4gIgorbXNnc3RyICIiCisiRGUgRkFULW9wc3RhcnRzZWN0b3IgemVndCBkYXQgZGUgbG9naXNjaGUgc2VjdG9yZ3Jvb3R0ZSAwIGlzLiAgRGl0IGlzIGhlZWwgIgorInZyZWVtZC4gIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzoyMTkKK21zZ2lkICJGQVQgYm9vdCBzZWN0b3Igc2F5cyB0aGVyZSBhcmUgbm8gRkFUIHRhYmxlcy4gIFRoaXMgaXMgd2VpcmQuICIKK21zZ3N0ciAiIgorIkRlIEZBVC1vcHN0YXJ0c2VjdG9yIHplZ3QgZGF0IGVyIGdlZW4gRkFULXRhYmVsbGVuIHppam4uICBEaXQgaXMgaGVlbCAiCisidnJlZW1kLiAiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjIyNQorbXNnaWQgIkZBVCBib290IHNlY3RvciBzYXlzIGNsdXN0ZXJzIGFyZSAwIHNlY3RvcnMuICBUaGlzIGlzIHdlaXJkLiAiCittc2dzdHIgIiIKKyJEZSBGQVQtb3BzdGFydHNlY3RvciB6ZWd0IGRhdCBlZW4gY2x1c3RlciBudWwgc2VjdG9yZW4gaGVlZnQuICBEaXQgaXMgaGVlbCAiCisidnJlZW1kLiAiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjIzNQorbXNnaWQgIkZpbGUgc3lzdGVtIGlzIEZBVDEyLCB3aGljaCBpcyB1bnN1cHBvcnRlZC4iCittc2dzdHIgIkhldCBiZXN0YW5kc3N5c3RlZW0gaXMgRkFUMTIuICBEaXQgd29yZHQgbmlldCBvbmRlcnN0ZXVuZC4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjQxMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGluZm9ybWF0aW9uIHNlY3RvciBoYXMgdGhlIHdyb25nIHNpZ25hdHVyZSAoJXgpLiAgU2VsZWN0IGNhbmNlbCBmb3Igbm93LCAiCisiYW5kIHNlbmQgaW4gYSBidWcgcmVwb3J0LiAgSWYgeW91J3JlIGRlc3BlcmF0ZSwgaXQncyBwcm9iYWJseSBzYWZlIHRvIGlnbm9yZS4iCittc2dzdHIgIiIKKyJEZSBpbmZvcm1hdGllc2VjdG9yIGhlZWZ0IGVlbiBvbmp1aXN0ZSB2aW5nZXJhZmRydWsgKCV4KS4gIEtpZXMgdm9vcmxvcGlnICIKKyInQW5udWxlcmVuJywgZW4gc3R1dXIgZWVuIGZvdXRyYXBwb3J0YWdlIG5hYXIgPGJ1Zy1wYXJ0ZWRAZ251Lm9yZz4uICBJbmRpZW4gIgorInUgaGVlbCB3YW5ob3BpZyBiZW50OiBoZXQgaXMgd2FhcnNjaGlqbmxpamsgd2VsIHZlaWxpZyBvbSB2b29yICdOZWdlcmVuJyAiCisia2llemVuLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb3VudC5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgZGlyZWN0b3J5IGVudHJ5IGZvciAlczogZmlyc3QgY2x1c3RlciBpcyB0aGUgZW5kIG9mIGZpbGUgbWFya2VyLiIKK21zZ3N0ciAiIgorIkZvdXRpZWYgbWFwaXRlbSB2b29yICVzOiBkZSBlZXJzdGUgY2x1c3RlciBpcyBlZW4gYmVzdGFuZHNlaW5kZS1tYXJrZXJpbmcuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvdW50LmM6MTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJCYWQgRkFUOiB1bnRlcm1pbmF0ZWQgY2hhaW4gZm9yICVzLiAgWW91IHNob3VsZCBydW4gZG9zZnNjayBvciBzY2FuZGlzay4iCittc2dzdHIgIiIKKyJPbmp1aXN0ZSBGQVQ6IG9uYmXDq2luZGlnZGUga2V0ZW4gdm9vciAlcy4gIFZvZXIgZWVyc3QgZG9zZnNjayBvZiBzY2FuZGlzayAiCisidWl0LiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb3VudC5jOjE3NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQmFkIEZBVDogY2x1c3RlciAlZCBvdXRzaWRlIGZpbGUgc3lzdGVtIGluIGNoYWluIGZvciAlcy4gIFlvdSBzaG91bGQgcnVuICIKKyJkb3Nmc2NrIG9yIHNjYW5kaXNrLiIKK21zZ3N0ciAiIgorIk9uanVpc3RlIEZBVDogY2x1c3RlciAlZCBpbiBkZSBrZXRlbiB2b29yICVzIGxpZ3QgYnVpdGVuIGhldCAiCisiYmVzdGFuZHNzeXN0ZWVtLiAgVm9lciBlZXJzdCBkb3Nmc2NrIG9mIHNjYW5kaXNrIHVpdC4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY291bnQuYzoxODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkJhZCBGQVQ6IGNsdXN0ZXIgJWQgaXMgY3Jvc3MtbGlua2VkIGZvciAlcy4gIFlvdSBzaG91bGQgcnVuIGRvc2ZzY2sgb3IgIgorInNjYW5kaXNrLiIKK21zZ3N0ciAiIgorIk9uanVpc3RlIEZBVDogY2x1c3RlciAlZCBpcyB2b29yICVzIGtydWlzZWxpbmdzIGdla29wcGVsZC4gIFZvZXIgZWVyc3QgIgorImRvc2ZzY2sgb2Ygc2NhbmRpc2sgdWl0LiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb3VudC5jOjIwMworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyAlZGssIGJ1dCBpdCBoYXMgJWQgY2x1c3RlcnMgKCVkaykuIgorbXNnc3RyICIlcyBpcyAlZGssIG1hYXIgaGVlZnQgJWQgY2x1c3RlcnMgKCVkaykuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvdW50LmM6MjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZmlsZSAlcyBpcyBtYXJrZWQgYXMgYSBzeXN0ZW0gZmlsZS4gIFRoaXMgbWVhbnMgbW92aW5nIGl0IGNvdWxkIGNhdXNlICIKKyJzb21lIHByb2dyYW1zIHRvIHN0b3Agd29ya2luZy4iCittc2dzdHIgIiIKKyJIZXQgYmVzdGFuZCAlcyBpcyBnZW1hcmtlZXJkIGFscyBlZW4gc3lzdGVlbWJlc3RhbmQuICBBbHMgaGV0IHZlcnBsYWF0c3QgIgorIndvcmR0LCB6dWxsZW4gc29tbWlnZSBwcm9ncmFtbWEncyBtaXNzY2hpZW4gbmlldCBtZWVyIHdlcmtlbi4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvdGFibGUuYzoxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZBVCAlZCBtZWRpYSAleCBkb2Vzbid0IG1hdGNoIHRoZSBib290IHNlY3RvcidzIG1lZGlhICV4LiAgWW91IHNob3VsZCAiCisicHJvYmFibHkgcnVuIHNjYW5kaXNrLiIKK21zZ3N0ciAiIgorIkZBVCAlZCBtZWRpdW0gJXgga29tdCBuaWV0IG92ZXJlZW4gbWV0IG1lZGl1bSAleCB1aXQgZGUgb3BzdGFydHNlY3Rvci4gIFUgIgorImt1bnQgYmV0ZXIgZWVyc3Qgc2NhbmRpc2sgdWl0dm9lcmVuLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC90YWJsZS5jOjI2OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYXRfdGFibGVfc2V0OiBjbHVzdGVyICVsZCBvdXRzaWRlIGZpbGUgc3lzdGVtIgorbXNnc3RyICJmYXRfdGFibGVfc2V0KCk6IGNsdXN0ZXIgJWxkIGxpZ3QgYnVpdGVuIGhldCBiZXN0YW5kc3N5c3RlZW0iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvdGFibGUuYzozMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmF0X3RhYmxlX2dldDogY2x1c3RlciAlbGQgb3V0c2lkZSBmaWxlIHN5c3RlbSIKK21zZ3N0ciAiZmF0X3RhYmxlX2dldCgpOiBjbHVzdGVyICVsZCBsaWd0IGJ1aXRlbiBoZXQgYmVzdGFuZHNzeXN0ZWVtIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3RhYmxlLmM6MzQzCittc2dpZCAiZmF0X3RhYmxlX2FsbG9jX2NsdXN0ZXI6IG5vIGZyZWUgY2x1c3RlcnMiCittc2dzdHIgImZhdF90YWJsZV9hbGxvY19jbHVzdGVyKCk6IGdlZW4gYmVzY2hpa2JhcmUgY2x1c3RlcnMiCisKKyM6IGxpYnBhcnRlZC9mcy9saW51eF9zd2FwL2xpbnV4X3N3YXAuYzoyNzUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVucmVjb2duaXNlZCBvbGQgc3R5bGUgbGludXggc3dhcCBzaWduYXR1cmUgJyUxMHMnLiIKK21zZ3N0ciAiT25iZWtlbmRlIHZpbmdlcmFmZHJ1ayAnJTEwcycgdm9vciBMaW51eC1zd2FwcGFydGl0aWUuIgorCisjOiBsaWJwYXJ0ZWQvZnMvbGludXhfc3dhcC9saW51eF9zd2FwLmM6MzE4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVbnJlY29nbmlzZWQgbmV3IHN0eWxlIGxpbnV4IHN3YXAgc2lnbmF0dXJlICclMTBzJy4iCittc2dzdHIgIk9uYmVrZW5kZSB2aW5nZXJhZmRydWsgJyUxMHMnIHZvb3IgTGludXgtc3dhcHBhcnRpdGllLiIKKworIzogbGlicGFydGVkL2ZzL2xpbnV4X3N3YXAvbGludXhfc3dhcC5jOjM1OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVW5yZWNvZ25pc2VkIHN3c3VzcCBsaW51eCBzd2FwIHNpZ25hdHVyZSAnJTlzJy4iCittc2dzdHIgIk9uYmVrZW5kZSB2aW5nZXJhZmRydWsgJyUxMHMnIHZvb3IgTGludXgtc3dhcHBhcnRpdGllLiIKKworIzogbGlicGFydGVkL2ZzL2xpbnV4X3N3YXAvbGludXhfc3dhcC5jOjQzNAorbXNnaWQgIlRvbyBtYW55IGJhZCBwYWdlcy4iCittc2dzdHIgIlRlIHZlZWwgc2xlY2h0ZSBwYWdpbmEncy4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvYWR2ZnMuYzoxMjEgbGlicGFydGVkL2ZzL2hmcy9hZHZmc19wbHVzLmM6MTIyCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NDE0IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzo1MDgKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjUzOSBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo2NTgKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjc3MgorbXNnaWQgIlRoZSBmaWxlIHN5c3RlbSBjb250YWlucyBlcnJvcnMuIgorbXNnc3RyICJIZXQgYmVzdGFuZHNzeXN0ZWVtIGJldmF0IGZvdXRlbi4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvYWR2ZnNfcGx1cy5jOjI4NworbXNnaWQgIkJhZCBibG9ja3MgY291bGQgbm90IGJlIHJlYWQuIgorbXNnc3RyICJTbGVjaHRlIGJsb2trZW4ga29uZGVuIG5pZXQgZ2VsZXplbiB3b3JkZW4uIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2NhY2hlLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUcnlpbmcgdG8gcmVnaXN0ZXIgYW4gZXh0ZW50IHN0YXJ0aW5nIGF0IGJsb2NrIDB4JVgsIGJ1dCBhbm90aGVyIG9uZSBhbHJlYWR5ICIKKyJleGlzdHMgYXQgdGhpcyBwb3NpdGlvbi4gIFlvdSBzaG91bGQgY2hlY2sgdGhlIGZpbGUgc3lzdGVtISIKK21zZ3N0ciAiIgorIlBvZ2luZyB0b3QgaGV0IHJlZ2lzdHJlcmVuIHZhbiBlZW4gJ2V4dGVudCcgYmVnaW5uZW5kIGJpaiBibG9rIDB4JVgsIG1hYXIgZXIgIgorImJlc3RhYXQgYWwgZWVuICdleHRlbnQnIG9wIGRpZSBwb3NpdGllLiAgVm9lciBlZW4gYmVzdGFuZHNzeXN0ZWVtY29udHJvbGUgIgorInVpdCEiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvY2FjaGUuYzoyMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRyeWluZyB0byBtb3ZlIGFuIGV4dGVudCBmcm9tIGJsb2NrIE94JVggdG8gYmxvY2sgT3glWCwgYnV0IGFub3RoZXIgb25lICIKKyJhbHJlYWR5IGV4aXN0cyBhdCB0aGlzIHBvc2l0aW9uLiAgVGhpcyBzaG91bGQgbm90IGhhcHBlbiEiCittc2dzdHIgIiIKKyJQb2dpbmcgdG90IGhldCB2ZXJwbGFhdHNlbiB2YW4gZWVuICdleHRlbnQnIHZhbiBibG9rIDB4JVggbmFhciBibG9rIE94JVgsICIKKyJtYWFyIGVyIGJlc3RhYXQgYWwgZWVuICdleHRlbnQnIG9wIGRpZSBwb3NpdGllLiAgRGl0IGhvb3J0IG5vb2l0IHRlIGdlYmV1cmVuISIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlLmM6MTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB1cGRhdGUgdGhlIGV4dGVudCBjYWNoZSBmb3IgSEZTIGZpbGUgd2l0aCBDTklEICVYLiIKK21zZ3N0ciAiS2FuICdleHRlbnQnLWNhY2hlIHZvb3IgSEZTLWJlc3RhbmQgbWV0IENOSUQgJVggbmlldCBiaWp3ZXJrZW4uIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGUuYzoxODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIHRvIHJlYWQgSEZTIGZpbGUgd2l0aCBDTklEICVYIGJlaGluZCBFT0YuIgorbXNnc3RyICIiCisiUG9naW5nIHRvdCBsZXplbiB2YW4gSEZTLWJlc3RhbmQgbWV0IENOSUQgJVggdm9vcmJpaiBlaW5kZS12YW4tYmVzdGFuZC4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZS5jOjE5MCBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGUuYzoyMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgc2VjdG9yICVsbGkgb2YgSEZTIGZpbGUgd2l0aCBDTklEICVYLiIKK21zZ3N0ciAiS2FuIHNlY3RvciAlbGxpIHZhbiBIRlMtYmVzdGFuZCBtZXQgQ05JRCAlWCBuaWV0IHZpbmRlbi4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZS5jOjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgdG8gd3JpdGUgSEZTIGZpbGUgd2l0aCBDTklEICVYIGJlaGluZCBFT0YuIgorbXNnc3RyICIiCisiUG9naW5nIHRvdCBzY2hyaWp2ZW4gdmFuIEhGUy1iZXN0YW5kIG1ldCBDTklEICVYIHZvb3JiaWogZWluZGUtdmFuLWJlc3RhbmQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGVfcGx1cy5jOjE1NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgdXBkYXRlIHRoZSBleHRlbnQgY2FjaGUgZm9yIEhGUysgZmlsZSB3aXRoIENOSUQgJVguIgorbXNnc3RyICJLYW4gJ2V4dGVudCctY2FjaGUgdm9vciBIRlMrLWJlc3RhbmQgbWV0IENOSUQgJVggbmlldCBiaWp3ZXJrZW4uIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGVfcGx1cy5jOjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgdG8gcmVhZCBIRlMrIGZpbGUgd2l0aCBDTklEICVYIGJlaGluZCBFT0YuIgorbXNnc3RyICIiCisiUG9naW5nIHRvdCBsZXplbiB2YW4gSEZTKy1iZXN0YW5kIG1ldCBDTklEICVYIHZvb3JiaWogZWluZGUtdmFuLWJlc3RhbmQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGVfcGx1cy5jOjIxMyBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGVfcGx1cy5jOjI1NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCBzZWN0b3IgJWxsaSBvZiBIRlMrIGZpbGUgd2l0aCBDTklEICVYLiIKK21zZ3N0ciAiS2FuIHNlY3RvciAlbGxpIHZhbiBIRlMrLWJlc3RhbmQgbWV0IENOSUQgJVggbmlldCB2aW5kZW4uIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGVfcGx1cy5jOjI0NQorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgdG8gd3JpdGUgSEZTKyBmaWxlIHdpdGggQ05JRCAlWCBiZWhpbmQgRU9GLiIKK21zZ3N0ciAiIgorIlBvZ2luZyB0b3Qgc2NocmlqdmVuIHZhbiBIRlMrLWJlc3RhbmQgbWV0IENOSUQgJVggdm9vcmJpaiBlaW5kZS12YW4tYmVzdGFuZC4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MjMyCittc2dpZCAiU29ycnksIEhGUyBjYW5ub3QgYmUgcmVzaXplZCB0aGF0IHdheSB5ZXQuIgorbXNnc3RyICJTb3JyeSwgSEZTIGthbiBub2cgbmlldCBvcCBkZXplIG1hbmllciB2YW4gZ3Jvb3R0ZSB2ZXJhbmRlcmQgd29yZGVuLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzoyNjIgbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo2NDEKK21zZ2lkICJEYXRhIHJlbG9jYXRpb24gaGFzIGZhaWxlZC4iCittc2dzdHIgIkRlIGdlZ2V2ZW5zdmVycGxhYXRzaW5nIGlzIG1pc2x1a3QuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjI4MQorbXNnaWQgIkRhdGEgcmVsb2NhdGlvbiBsZWZ0IHNvbWUgZGF0YSBpbiB0aGUgZW5kIG9mIHRoZSB2b2x1bWUuIgorbXNnc3RyICIiCisiRGUgZ2VnZXZlbnN2ZXJwbGFhdHNpbmcgaGVlZnQgZW5rZWxlIGdlZ2V2ZW5zIGFhbiBoZXQgZWluZGUgdmFuIGhldCB2b2x1bWVuICIKKyJhY2h0ZXJnZWxhdGVuLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzozMjAKK21zZ2lkICJ3cml0aW5nIEhGUyBNYXN0ZXIgRGlyZWN0b3J5IEJsb2NrIgorbXNnc3RyICJiZXppZyBtZXQgc2NocmlqdmVuIHZhbiBIRlMtaG9vZmRtYXBibG9rIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjQ2OAorbXNnaWQgIk5vIHZhbGlkIEhGU1srWF0gc2lnbmF0dXJlIGhhcyBiZWVuIGZvdW5kIHdoaWxlIG9wZW5pbmcuIgorbXNnc3RyICJHZWVuIGdlbGRpZ2UgSEZTWytYXS12aW5nZXJhZmRydWsgZ2V2b25kZW4gdGlqZGVucyBvcGVuZW4uIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjQ3OAorIywgYy1mb3JtYXQKK21zZ2lkICJWZXJzaW9uICVkIG9mIEhGUysgaXNuJ3Qgc3VwcG9ydGVkLiIKK21zZ3N0ciAiVmVyc2llICVkIHZhbiBIRlMrIHdvcmR0IG5pZXQgb25kZXJzdGV1bmQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICJWZXJzaW9uICVkIG9mIEhGU1ggaXNuJ3Qgc3VwcG9ydGVkLiIKK21zZ3N0ciAiVmVyc2llICVkIHZhbiBIRlNYIHdvcmR0IG5pZXQgb25kZXJzdGV1bmQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjY3MgorbXNnaWQgIkRhdGEgcmVsb2NhdGlvbiBsZWZ0IHNvbWUgZGF0YSBhdCB0aGUgZW5kIG9mIHRoZSB2b2x1bWUuIgorbXNnc3RyICIiCisiRGUgZ2VnZXZlbnN2ZXJwbGFhdHNpbmcgaGVlZnQgZW5rZWxlIGdlZ2V2ZW5zIGFhbiBoZXQgZWluZGUgdmFuIGhldCB2b2x1bWVuICIKKyJhY2h0ZXJnZWxhdGVuLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo3MjAKK21zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRoZSBhbGxvY2F0aW9uIGZpbGUuIgorbXNnc3RyICJGb3V0IHRpamRlbnMgc2NocmlqdmVuIHZhbiBoZXQgcmVzZXJ2ZXJpbmdzYmVzdGFuZC4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NzM1Cittc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0aGUgY29tcGF0aWJpbGl0eSBwYXJ0IG9mIHRoZSBhbGxvY2F0aW9uIGZpbGUuIgorbXNnc3RyICIiCisiRm91dCB0aWpkZW5zIHNjaHJpanZlbiB2YW4gaGV0IGNvbXBhdGliaWxpdGVpdHNkZWVsIHZhbiBoZXQgIgorInJlc2VydmVyaW5nc2Jlc3RhbmQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjc1MAorbXNnaWQgIndyaXRpbmcgSEZTKyBWb2x1bWUgSGVhZGVyIgorbXNnc3RyICJiZXppZyBtZXQgc2NocmlqdmVuIHZhbiBIRlMrLXZvbHVtZW5rb3AiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6ODUwCittc2dpZCAiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgbG9va2luZyBmb3IgdGhlIG1hbmRhdG9yeSBiYWQgYmxvY2tzIGZpbGUuIgorbXNnc3RyICJGb3V0IHRpamRlbnMgem9la2VuIG5hYXIgaGV0IHZlcmVpc3RlIHNsZWNodGUtYmxva2tlbmJlc3RhbmQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjkwNAorbXNnaWQgIiIKKyJJdCBzZWVtcyB0aGVyZSBpcyBhbiBlcnJvciBpbiB0aGUgSEZTIHdyYXBwZXI6IHRoZSBiYWQgYmxvY2tzIGZpbGUgZG9lc24ndCAiCisiY29udGFpbiB0aGUgZW1iZWRkZWQgSEZTKyB2b2x1bWUuIgorbXNnc3RyICIiCisiRXIgc2NoaWpudCBlZW4gZm91dCBpbiBkZSBIRlMtd2lra2VsIHRlIHppdHRlbjogaGV0IHNsZWNodGUtYmxva2tlbmJlc3RhbmQgIgorImJldmF0IGdlZW4gaW5nZWJlZCBIRlMrLXZvbHVtZW4uIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjk0MAorbXNnaWQgIlNvcnJ5LCBIRlMrIGNhbm5vdCBiZSByZXNpemVkIHRoYXQgd2F5IHlldC4iCittc2dzdHIgIlNvcnJ5LCBIRlMrIGthbiBub2cgbmlldCBvcCBkZXplIG1hbmllciB2YW4gZ3Jvb3R0ZSB2ZXJhbmRlcmQgd29yZGVuLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo5NzUKK21zZ2lkICJzaHJpbmtpbmcgZW1iZWRkZWQgSEZTKyB2b2x1bWUiCittc2dzdHIgImJlemlnIG1ldCB2ZXJrbGVpbmVuIHZhbiBlZW4gaW5nZWJlZCBIRlMrLXZvbHVtZW4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6OTkxCittc2dpZCAiUmVzaXppbmcgdGhlIEhGUysgdm9sdW1lIGhhcyBmYWlsZWQuIgorbXNnc3RyICJIZXQgdmFuIGdyb290dGUgdmVyYW5kZXJlbiB2YW4gaGV0IEhGUystdm9sdW1lbiBpcyBtaXNsdWt0LiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo5OTgKK21zZ2lkICJzaHJpbmtpbmcgSEZTIHdyYXBwZXIiCittc2dzdHIgImJlemlnIG1ldCB2ZXJrbGVpbmVuIHZhbiBIRlMtd2lra2VsIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjEwMDcKK21zZ2lkICJVcGRhdGluZyB0aGUgSEZTIHdyYXBwZXIgaGFzIGZhaWxlZC4iCittc2dzdHIgIkhldCBiaWp3ZXJrZW4gdmFuIGRlIEhGUy13aWtrZWwgaXMgbWlzbHVrdC4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MTEwOSBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjExOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgaXMgbm90IGEgcmVhbCAlcyBjaGVjay4gIFRoaXMgaXMgZ29pbmcgdG8gZXh0cmFjdCBzcGVjaWFsIGxvdyBsZXZlbCAiCisiZmlsZXMgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4iCittc2dzdHIgIiIKKyJEaXQgaXMgZ2VlbiBlY2h0ZSAlcy1jb250cm9sZS4gIEhldCBleHRyYWhlZXJ0IHNsZWNodHMgZW5rZWxlIHNwZWNpYWxlICIKKyJiZXN0YW5kZW4gb20gYmlqIGRlIGZvdXRvcHNwb3JpbmcgdGUgaGVscGVuLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MTU1Cittc2dpZCAiQmFkIGJsb2NrIGxpc3QgaGVhZGVyIGNoZWNrc3VtLiIKK21zZ3N0ciAiT25qdWlzdGUgY29udHJvbGVzb20gdmFuIGtvcCB2YW4gYmxva2tlbmxpanN0LiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJbnZhbGlkIHNpemUgb2YgYSB0cmFuc2FjdGlvbiBibG9jayB3aGlsZSByZXBsYXlpbmcgdGhlIGpvdXJuYWwgKCVpIGJ5dGVzKS4iCittc2dzdHIgIiIKKyJPbmdlbGRpZ2UgZ3Jvb3R0ZSAoJWkgYnl0ZXMpIHZhbiBlZW4gdHJhbnNhY3RpZWJsb2sgdGlqZGVucyBoZXJhZnNwZWxlbiB2YW4gIgorImhldCBqb3VybmFsLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MjYwCittc2dpZCAiIgorIkpvdXJuYWwgc3RvcmVkIG91dHNpZGUgb2YgdGhlIHZvbHVtZSBhcmUgbm90IHN1cHBvcnRlZC4gIFRyeSB0byBkZXNhY3RpdmF0ZSAiCisidGhlIGpvdXJuYWwgYW5kIHJ1biBQYXJ0ZWQgYWdhaW4uIgorbXNnc3RyICIiCisiRWVuIGpvdXJuYWwgb3BnZXNsYWdlbiBidWl0ZW4gaGV0IHZvbHVtZW4gd29yZHQgbmlldCBvbmRlcnN0ZXVuZC4gIFByb2JlZXIgIgorImhldCBqb3VybmFsIHVpdCB0ZSBzY2hha2VsZW4gZW4gdm9lciBkYW4gUGFydGVkIG9wbmlldXcgdWl0LiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MjcxCittc2dpZCAiSm91cm5hbCBvZmZzZXQgb3Igc2l6ZSBpcyBub3QgbXVsdGlwbGUgb2YgdGhlIHNlY3RvciBzaXplLiIKK21zZ3N0ciAiIgorIkdyb290dGUgb2Ygb2Zmc2V0IHZhbiBoZXQgam91cm5hbCBpcyBnZWVuIHZlZWx2b3VkIHZhbiBkZSBzZWN0b3Jncm9vdHRlLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MjkyCittc2dpZCAiSW5jb3JyZWN0IG1hZ2ljIHZhbHVlcyBpbiB0aGUgam91cm5hbCBoZWFkZXIuIgorbXNnc3RyICJPbmp1aXN0ZSBtYWdpc2NoZSBnZXRhbGxlbiBpbiBkZSBqb3VybmFsa29wLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MzAyCittc2dpZCAiSm91cm5hbCBzaXplIG1pc21hdGNoIGJldHdlZW4gam91cm5hbCBpbmZvIGJsb2NrIGFuZCBqb3VybmFsIGhlYWRlci4iCittc2dzdHIgIiIKKyJKb3VybmFsZ3Jvb3R0ZSBpcyB2ZXJzY2hpbGxlbmQgYWFuZ2VnZXZlbiBpbiBqb3VybmFsLWluZm9ibG9rIGVuIGpvdXJuYWxrb3AuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozMTQKK21zZ2lkICJTb21lIGhlYWRlciBmaWVsZHMgYXJlIG5vdCBtdWx0aXBsZSBvZiB0aGUgc2VjdG9yIHNpemUuIgorbXNnc3RyICIiCisiU29tbWlnZSB2ZWxkZW4gaW4gZGUgam91cm5hbGtvcCB6aWpuIGdlZW4gdmVlbHZvdWQgdmFuIGRlIHNlY3Rvcmdyb290dGUuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozMjMKK21zZ2lkICIiCisiVGhlIHNlY3RvciBzaXplIHN0b3JlZCBpbiB0aGUgam91cm5hbCBpcyBub3QgNTEyIGJ5dGVzLiAgUGFydGVkIG9ubHkgIgorInN1cHBvcnRzIDUxMiBieXRlcyBsZW5ndGggc2VjdG9ycy4iCittc2dzdHIgIiIKKyJEZSBzZWN0b3Jncm9vdHRlIGlzIHZvbGdlbnMgaGV0IGpvdXJuYWwgbmlldCA1MTIgYnl0ZXMuICBQYXJ0ZWQgb25kZXJzdGV1bnQgIgorImFsbGVlbiBzZWN0b3JlbiB2YW4gNTEyIGJ5dGVzLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MzM1Cittc2dpZCAiQmFkIGpvdXJuYWwgY2hlY2tzdW0uIgorbXNnc3RyICJPbmp1aXN0ZSBjb250cm9sZXNvbSB2YW4gam91cm5hbC4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjM1MworbXNnaWQgIiIKKyJUaGUgam91cm5hbCBpcyBub3QgZW1wdHkuICBQYXJ0ZWQgbXVzdCByZXBsYXkgdGhlIHRyYW5zYWN0aW9ucyBiZWZvcmUgIgorIm9wZW5pbmcgdGhlIGZpbGUgc3lzdGVtLiAgVGhpcyB3aWxsIG1vZGlmeSB0aGUgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICIiCisiSGV0IGpvdXJuYWwgaXMgbmlldCBsZWVnLiAgUGFydGVkIG1vZXQgZGUgdHJhbnNhY3RpZXMgaGVyYWZzcGVsZW4gYWx2b3JlbnMgIgorImhldCBiZXN0YW5kc3N5c3RlZW0gdGUgb3BlbmVuLiAgRGl0IHphbCBoZXQgYmVzdGFuZHNzeXN0ZWVtIHZlcmFuZGVyZW4uIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozODEKK21zZ2lkICIiCisiVGhlIHZvbHVtZSBoZWFkZXIgb3IgdGhlIG1hc3RlciBkaXJlY3RvcnkgYmxvY2sgaGFzIGNoYW5nZWQgd2hpbGUgcmVwbGF5aW5nICIKKyJ0aGUgam91cm5hbC4gIFlvdSBzaG91bGQgcmVzdGFydCBQYXJ0ZWQuIgorbXNnc3RyICIiCisiRGUgdm9sdW1lbmtvcCBvZiBoZXQgaG9vZmRtYXBwZW5ibG9rIGlzIHZlcmFuZGVyZCB0aWpkZW5zIGhldCBoZXJhZnNwZWxlbiAiCisidmFuIGhldCBqb3VybmFsLiAgVSBkaWVudCBQYXJ0ZWQgdGUgaGVyc3RhcnRlbi4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcHJvYmUuYzo1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGFydGVkIGNhbid0IHVzZSBIRlMgZmlsZSBzeXN0ZW1zIG9uIGRpc2tzIHdpdGggYSBzZWN0b3Igc2l6ZSBub3QgZXF1YWwgdG8gJSIKKyJkIGJ5dGVzLiIKK21zZ3N0ciAiIgorIlBhcnRlZCBrYW4gZ2VlbiBIRlMtYmVzdGFuZHNzeXN0ZW1lbiBiZXdlcmtlbiBvcCBzY2hpanZlbiBtZXQgZWVuIGFuZGVyZSAiCisic2VjdG9yZ3Jvb3R0ZSBkYW4gJWQgYnl0ZXMuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6MTUxIGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjE1NQorbXNnaWQgIkFuIGV4dGVudCBoYXMgbm90IGJlZW4gcmVsb2NhdGVkLiIKK21zZ3N0ciAiRWVuICdleHRlbnQnIGlzIG5pZXQgdmVycGxhYXRzdC4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzoyNTEgbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6MzA3Cittc2dpZCAiIgorIkEgcmVmZXJlbmNlIHRvIGFuIGV4dGVudCBjb21lcyBmcm9tIGEgcGxhY2UgaXQgc2hvdWxkIG5vdC4gIFlvdSBzaG91bGQgY2hlY2sgIgorInRoZSBmaWxlIHN5c3RlbSEiCittc2dzdHIgIiIKKyJFciB3b3JkdCBnZXJlZmVyZWVyZCBhYW4gZWVuICdleHRlbnQnIHZhbnVpdCBlZW4gb25tb2dlbGlqa2UgcGxhYXRzLiAgVm9lciAiCisiZWVuIGJlc3RhbmRzc3l0ZWVtY29udHJvbGUgdWl0ISIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjM4MQorbXNnaWQgIlRoaXMgSEZTIHZvbHVtZSBoYXMgbm8gY2F0YWxvZyBmaWxlLiAgVGhpcyBpcyB2ZXJ5IHVudXN1YWwhIgorbXNnc3RyICIiCisiRGl0IEhGUy12b2x1bWVuIGhlZWZ0IGdlZW4gY2F0YWxvZ3VzYmVzdGFuZC4gIERpdCBpcyB6ZWVyIG9uZ2VicnVpa2VsaWprISIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjQ3NQorbXNnaWQgIlRoaXMgSEZTIHZvbHVtZSBoYXMgbm8gZXh0ZW50cyBvdmVyZmxvdyBmaWxlLiAgVGhpcyBpcyBxdWl0ZSB1bnVzdWFsISIKK21zZ3N0ciAiIgorIkRpdCBIRlMtdm9sdW1lbiBoZWVmdCBnZWVuICdleHRlbnRzLW92ZXJmbG93Jy1iZXN0YW5kLiAgRGl0IGlzIHplZXIgIgorIm9uZ2VicnVpa2VsaWprISIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjUxNyBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo2NjgKK21zZ2lkICIiCisiVGhlIGV4dGVudHMgb3ZlcmZsb3cgZmlsZSBzaG91bGQgbm90IGNvbnRhaW4gaXRzIG93biBleHRlbnRzISAgWW91IHNob3VsZCAiCisiY2hlY2sgdGhlIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiIgorIkhldCAnZXh0ZW50cy1vdmVyZmxvdyctYmVzdGFuZCBob29ydCBuaWV0IHppam4gZWlnZW4gJ2V4dGVudHMnIHRlIGJldmF0dGVuLiAgIgorIlZvZXIgZWVuIGJlc3RhbmRzc3l0ZWVtY29udHJvbGUgdWl0ISIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjU3NCBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo4NDcKK21zZ2lkICJDb3VsZCBub3QgY2FjaGUgdGhlIGZpbGUgc3lzdGVtIGluIG1lbW9yeS4iCittc2dzdHIgIkthbiBoZXQgYmVzdGFuZHNzeXN0ZWVtIG5pZXQgdGlqZGVsaWprIG9wc2xhYW4gaW4gaGV0IGdlaGV1Z2VuLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjYzNSBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo5MDgKK21zZ2lkICJCYWQgYmxvY2tzIGxpc3QgY291bGQgbm90IGJlIGxvYWRlZC4iCittc2dzdHIgIkRlIGxpanN0IG1ldCBzbGVjaHRlIGJsb2trZW4ga2FuIG5pZXQgZ2VsYWRlbiB3b3JkZW4uIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NjQ5IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjkyNAorbXNnaWQgIkFuIGVycm9yIG9jY3VycmVkIGR1cmluZyBleHRlbnQgcmVsb2NhdGlvbi4iCittc2dzdHIgIkVyIGlzIGVlbiBmb3V0IG9wZ2V0cmVkZW4gdGlqZGVucyBoZXQgdmVycGxhYXRzZW4gdmFuIGVlbiAnZXh0ZW50Jy4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjQ5NQorbXNnaWQgIlRoaXMgSEZTKyB2b2x1bWUgaGFzIG5vIGNhdGFsb2cgZmlsZS4gIFRoaXMgaXMgdmVyeSB1bnVzdWFsISIKK21zZ3N0ciAiIgorIkRpdCBIRlMrLXZvbHVtZW4gaGVlZnQgZ2VlbiBjYXRhbG9ndXNiZXN0YW5kLiAgRGl0IGlzIHplZXIgb25nZWJydWlrZWxpamshIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo2MTkKK21zZ2lkICJUaGlzIEhGUysgdm9sdW1lIGhhcyBubyBleHRlbnRzIG92ZXJmbG93IGZpbGUuICBUaGlzIGlzIHF1aXRlIHVudXN1YWwhIgorbXNnc3RyICIiCisiRGl0IEhGUystdm9sdW1lbiBoZWVmdCBnZWVuICdleHRlbnRzLW92ZXJmbG93Jy1iZXN0YW5kLiAgRGl0IGlzIHplZXIgIgorIm9uZ2VicnVpa2VsaWprISIKKworIzogcGFydGVkL3BhcnRlZC5jOjk0Cittc2dpZCAiZGlzcGxheXMgdGhpcyBoZWxwIG1lc3NhZ2UiCittc2dzdHIgImRlemUgaHVscHRla3N0IHRvbmVuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6OTUKKyMsIGZ1enp5Cittc2dpZCAibGlzdHMgcGFydGl0aW9uIGxheW91dCBvbiBhbGwgYmxvY2sgZGV2aWNlcyIKK21zZ3N0ciAiZGUgcGFydGlldGFiZWxsZW4gdmFuIGFsbGUgYXBwYXJhdGVuIHRvbmVuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6OTYKK21zZ2lkICJkaXNwbGF5cyBtYWNoaW5lIHBhcnNlYWJsZSBvdXRwdXQiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjk3Cittc2dpZCAibmV2ZXIgcHJvbXB0cyBmb3IgdXNlciBpbnRlcnZlbnRpb24iCittc2dzdHIgIm5vb2l0IHZyYWdlbiBzdGVsbGVuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6OTgKK21zZ2lkICJkaXNwbGF5cyB0aGUgdmVyc2lvbiIKK21zZ3N0ciAiZGUgcHJvZ3JhbW1hdmVyc2llIHRvbmVuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTExCittc2dpZCAiIgorIk5VTUJFUiBpcyB0aGUgcGFydGl0aW9uIG51bWJlciB1c2VkIGJ5IExpbnV4LiAgT24gTVMtRE9TIGRpc2sgbGFiZWxzLCB0aGUgIgorInByaW1hcnkgcGFydGl0aW9ucyBudW1iZXIgZnJvbSAxIHRvIDQsIGxvZ2ljYWwgcGFydGl0aW9ucyBmcm9tIDUgb253YXJkcy5cbiIKK21zZ3N0ciAiIgorIk5VTU1FUiBpcyBoZXQgZG9vciBMaW51eCBnZWJydWlrdGUgbnVtbWVyIHZhbiBkZSBwYXJ0aXRpZS4gIEluIE1TRE9TLSIKKyJzY2hpamZsYWJlbHMgemlqbiBkZSBwcmltYWlyZSBwYXJ0aXRpZXMgZ2VudW1tZXJkIHZhbiAxIHRvdCA0LCBkZSBsb2dpc2NoZSAiCisicGFydGl0aWVzIHZhbmFmIDUgZW4gaG9nZXIuXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMTQKK21zZ2lkICJMQUJFTC1UWVBFIGlzIG9uZSBvZjogIgorbXNnc3RyICJMQUJFTC1UWVBFIGlzIGVlbiB2YW46ICIKKworIzogcGFydGVkL3BhcnRlZC5jOjExNQorbXNnaWQgIkZMQUcgaXMgb25lIG9mOiAiCittc2dzdHIgIlZMQUcgaXMgZWVuIHZhbjogIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTE2Cittc2dpZCAiVU5JVCBpcyBvbmUgb2Y6ICIKK21zZ3N0ciAiRUVOSEVJRCBpcyBlZW4gdmFuOiAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMTcKK21zZ2lkICJQQVJULVRZUEUgaXMgb25lIG9mOiBwcmltYXJ5LCBsb2dpY2FsLCBleHRlbmRlZFxuIgorbXNnc3RyICJQQVJULVRZUEUgaXMgZWVuIHZhbjogcHJpbWFpciwgbG9naXNjaCwgdWl0Z2VicmVpZFxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTE5Cittc2dpZCAiRlMtVFlQRSBpcyBvbmUgb2Y6ICIKK21zZ3N0ciAiQlMtU09PUlQgaXMgZWVuIHZhbjogIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIwCittc2dpZCAiIgorIlNUQVJUIGFuZCBFTkQgYXJlIGRpc2sgbG9jYXRpb25zLCBzdWNoIGFzIDRHQiBvciAxMCUuICBOZWdhdGl2ZSB2YWx1ZXMgY291bnQgIgorImZyb20gdGhlIGVuZCBvZiB0aGUgZGlzay4gIEZvciBleGFtcGxlLCAtMXMgc3BlY2lmaWVzIGV4YWN0bHkgdGhlIGxhc3QgIgorInNlY3Rvci5cbiIKK21zZ3N0ciAiIgorIkJFR0lOIGVuIEVJTkRFIHppam4gc2NoaWpmbG9rYXRpZXMsIHpvYWxzIDRHQiBvZiAxMCUuICBOZWdhdGlldmUgd2FhcmRlbiAiCisidGVsbGVuIHZhbmFmIGhldCBlaW5kZSB2YW4gZGUgc2NoaWpmLiAgQmlqdm9vcmJlZWxkLCAtMXMgZ2VlZnQgcHJlY2llcyBkZSAiCisibGFhdHN0ZSBzZWN0b3IgYWFuLlxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIzCittc2dpZCAiU1RBVEUgaXMgb25lIG9mOiBvbiwgb2ZmXG4iCittc2dzdHIgIlRPRVNUQU5EIGlzIMOpw6luIHZhbjogYWFuLCB1aXRcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyNAorbXNnaWQgIkRFVklDRSBpcyB1c3VhbGx5IC9kZXYvaGRhIG9yIC9kZXYvc2RhXG4iCittc2dzdHIgIkFQUEFSQUFUIGlzIGdld29vbmxpamsgL2Rldi9oZGEgb2YgL2Rldi9zZGFcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyNQorbXNnaWQgIk5BTUUgaXMgYW55IHdvcmQgeW91IHdhbnRcbiIKK21zZ3N0ciAiTkFBTSBpcyBlbGsgd29vcmQgZGF0IHUgd2lsdFxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTI2Cittc2dpZCAiVGhlIHBhcnRpdGlvbiBtdXN0IGhhdmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgRlMtVFlQRXM6ICIKK21zZ3N0ciAiRGUgcGFydGl0aWUgZGllbnQgZWVuIHZhbiBkZSB2b2xnZW5kZSBCUy1TT09SVGVuIHRlIGhlYmJlbjogIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTMwCisjLCBmdXp6eQorbXNnaWQgIiIKKyJDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLlxuIgorIlRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlLCBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS5cbiIKKyJcbiIKKyJUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiIKKyJidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuIgorIk1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbiIKKyJHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuIgorIlxuIgorbXNnc3RyICIiCisiQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy5cbiIKKyJEaXQgaXMgdnJpamUgcHJvZ3JhbW1hdHV1ciwgdmFsbGVuZCBvbmRlciBkZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS5cbiIKKyJcbiIKKyJEaXQgcHJvZ3JhbW1hIHdvcmR0IHVpdGdlZ2V2ZW4gaW4gZGUgaG9vcCBkYXQgaGV0IG51dHRpZyBpcywgbWFhciBaT05ERVIgIgorIkVOSUdFIEdBUkFOVElFOyB6ZWxmcyB6b25kZXIgZGUgaW1wbGljaWV0ZSBnYXJhbnRpZSB2YW4gVkVSS09PUEJBQVJIRUlEIG9mICIKKyJHRVNDSElLVEhFSUQgVk9PUiBFRU4gQkVQQUFMRCBET0VMLiAgWmllIGRlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZvb3IgIgorIm5hZGVyZSBkZXRhaWxzLlxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiUwLmYlJVx0KHRpbWUgbGVmdCAlLjJkOiUuMmQpIgorbXNnc3RyICIlMC5mJSVcdChyZXN0ZXJlbmRlIHRpamQ6ICUuMmQ6JS4yZCkiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBhcnRpdGlvbiAlcyBpcyBiZWluZyB1c2VkLiBZb3UgbXVzdCB1bm1vdW50IGl0IGJlZm9yZSB5b3UgbW9kaWZ5IGl0IHdpdGggIgorIlBhcnRlZC4iCittc2dzdHIgIiIKKyJQYXJ0aXRpZSAlcyBpcyBpbiBnZWJydWlrLiAgRGV6ZSBkaWVudCBvbnRrb3BwZWxkIHRlIHdvcmRlbiBhbHZvcmVucyBoZW0gbWV0ICIKKyJQYXJ0ZWQgdGUgYmV3ZXJrZW4uIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjExCisjLCBjLWZvcm1hdAorbXNnaWQgIlBhcnRpdGlvbihzKSBvbiAlcyBhcmUgYmVpbmcgdXNlZC4iCittc2dzdHIgIlBhcnRpdGllKHMpIG9wICVzIHppam4gaW4gZ2VicnVpay4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjMKK21zZ2lkICIiCisiVGhlIGV4aXN0aW5nIGZpbGUgc3lzdGVtIHdpbGwgYmUgZGVzdHJveWVkIGFuZCBhbGwgZGF0YSBvbiB0aGUgcGFydGl0aW9uICIKKyJ3aWxsIGJlIGxvc3QuIERvIHlvdSB3YW50IHRvIGNvbnRpbnVlPyIKK21zZ3N0ciAiIgorIkhldCBiZXN0YWFuZGUgYmVzdGFuZHNzeXN0ZWVtIHphbCB3b3JkZW4gdmVybmlldGlnZCBlbiBhbGxlIGdlZ2V2ZW5zIG9wIGRlICIKKyJwYXJ0aXRpZSB6dWxsZW4gdmVybG9yZW4gZ2Fhbi4gIFdpbHQgdSBkb29yZ2Fhbj8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBleGlzdGluZyBkaXNrIGxhYmVsIG9uICVzIHdpbGwgYmUgZGVzdHJveWVkIGFuZCBhbGwgZGF0YSBvbiB0aGlzIGRpc2sgIgorIndpbGwgYmUgbG9zdC4gRG8geW91IHdhbnQgdG8gY29udGludWU/IgorbXNnc3RyICIiCisiSGV0IGJlc3RhYW5kZSBsYWJlbCBvcCAlcyB6YWwgd29yZGVuIHZlcm5pZXRpZ2QgZW4gYWxsZSBnZWdldmVucyBvcCBkZXplICIKKyJzY2hpamYgenVsbGVuIHZlcmxvcmVuIGdhYW4uICBXaWx0IHUgZG9vcmdhYW4/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NDU4IHBhcnRlZC9wYXJ0ZWQuYzo2NTIgcGFydGVkL3BhcnRlZC5jOjEwNDQKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMTI4IHBhcnRlZC9wYXJ0ZWQuYzoxNzcxIHBhcnRlZC9wYXJ0ZWQuYzoxODUyCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTkwMAorbXNnaWQgIlBhcnRpdGlvbiBudW1iZXI/IgorbXNnc3RyICJOdW1tZXIgdmFuIHBhcnRpdGllPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjUwMAorbXNnaWQgIlNvdXJjZSBkZXZpY2U/IgorbXNnc3RyICJCcm9uYXBwYXJhYXQ/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NTA0Cittc2dpZCAiU291cmNlIHBhcnRpdGlvbiBudW1iZXI/IgorbXNnc3RyICJOdW1tZXIgdmFuIGJyb25wYXJ0aXRpZT8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo1MDkKK21zZ2lkICJDYW4ndCBjb3B5IGFuIGV4dGVuZGVkIHBhcnRpdGlvbi4iCittc2dzdHIgIkthbiBlZW4gdWl0Z2VicmVpZGUgcGFydGl0aWUgbmlldCBrb3Bpw6tyZW4uIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NTE1Cittc2dpZCAiRGVzdGluYXRpb24gcGFydGl0aW9uIG51bWJlcj8iCittc2dzdHIgIk51bW1lciB2YW4gZG9lbHBhcnRpdGllPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjYxNQorbXNnaWQgIk5ldyBkaXNrIGxhYmVsIHR5cGU/IgorbXNnc3RyICJUeXBlIHZhbiBuaWV1dyBzY2hpamZsYWJlbD8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo2NTYKK21zZ2lkICJGaWxlIHN5c3RlbT8iCittc2dzdHIgIkJlc3RhbmRzc3lzdGVlbT8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo3MDcgcGFydGVkL3BhcnRlZC5jOjg3OAorbXNnaWQgIlBhcnRpdGlvbiB0eXBlPyIKK21zZ3N0ciAiUGFydGl0aWV0eXBlPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjcxNCBwYXJ0ZWQvcGFydGVkLmM6ODg1IHBhcnRlZC9wYXJ0ZWQuYzoxMTMxCittc2dpZCAiUGFydGl0aW9uIG5hbWU/IgorbXNnc3RyICJOYWFtIHZhbiBwYXJ0aXRpZT8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo3MjIgcGFydGVkL3BhcnRlZC5jOjg5NQorbXNnaWQgIkZpbGUgc3lzdGVtIHR5cGU/IgorbXNnc3RyICJCZXN0YW5kc3N5c3RlZW1zb29ydD8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo3MjkgcGFydGVkL3BhcnRlZC5jOjg5NyBwYXJ0ZWQvcGFydGVkLmM6MTA1OQorIzogcGFydGVkL3BhcnRlZC5jOjE3MjUgcGFydGVkL3BhcnRlZC5jOjE3ODAKK21zZ2lkICJTdGFydD8iCittc2dzdHIgIkJlZ2luPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjczMSBwYXJ0ZWQvcGFydGVkLmM6OTAwIHBhcnRlZC9wYXJ0ZWQuYzoxMDYyCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTcyNyBwYXJ0ZWQvcGFydGVkLmM6MTc4MgorbXNnaWQgIkVuZD8iCittc2dzdHIgIkVpbmRlPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjc2OSBwYXJ0ZWQvcGFydGVkLmM6OTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgcmVxdWVzdGVkIGEgcGFydGl0aW9uIGZyb20gJXMgdG8gJXMuXG4iCisiVGhlIGNsb3Nlc3QgbG9jYXRpb24gd2UgY2FuIG1hbmFnZSBpcyAlcyB0byAlcy4gIElzIHRoaXMgc3RpbGwgYWNjZXB0YWJsZSB0byAiCisieW91PyIKK21zZ3N0ciAiIgorIlUgdmVyem9jaHQgb20gZWVuIHBhcnRpdGllIHZhbiAlcyB0b3QgJXMuXG4iCisiRGUgZGljaHRzdGJpanppam5kZSBtb2dlbGlqa2hlaWQgaXMgdmFuICVzIHRvdCAlcy4gIElzIGRpdCBub2cgYWNjZXB0YWJlbD8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo4OTAKK21zZ2lkICJBbiBleHRlbmRlZCBwYXJ0aXRpb24gY2Fubm90IGhvbGQgYSBmaWxlIHN5c3RlbS4gIERpZCB5b3Ugd2FudCBta3BhcnQ/IgorbXNnc3RyICIiCisiRWVuIHVpdGdlYnJlaWRlIHBhcnRpdGllIGthbiBnZWVuIGJlc3RhbmRzc3lzdGVlbSBiZXZhdHRlbi4gIEJlZG9lbGRlIHUgIgorIidtYWFrcGFydCc/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTA1MAorbXNnaWQgIkNhbid0IG1vdmUgYW4gZXh0ZW5kZWQgcGFydGl0aW9uLiIKK21zZ3N0ciAiS2FuIGVlbiB1aXRnZWJyZWlkZSBwYXJ0aXRpZSBuaWV0IHZlcnBsYWF0c2VuLiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEwNzkKK21zZ2lkICJDYW4ndCBtb3ZlIGEgcGFydGl0aW9uIG9udG8gaXRzZWxmLiAgVHJ5IHVzaW5nIHJlc2l6ZSwgcGVyaGFwcz8iCittc2dzdHIgIiIKKyJLYW4gZWVuIHBhcnRpdGllIG5pZXQgbmFhciB6aWNoemVsZiB2ZXJwbGFhdHNlbi4gIEJlZG9lbGRlIHUgJ2dyb290dGUnPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlub3I6ICVkXG4iCittc2dzdHIgIk51bW1lcjogJWRcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmxhZ3M6ICVzXG4iCittc2dzdHIgIlZsYWdnZW46ICVzXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGUgU3lzdGVtOiAlc1xuIgorbXNnc3RyICJCZXN0YW5kc3N5c3RlZW06ICVzXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjMwCittc2dpZCAiU2l6ZTogICAgICAgICAiCittc2dzdHIgIkdyb290dGU6ICAgICAgICAgIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIzNQorbXNnaWQgIk1pbmltdW0gc2l6ZTogIgorbXNnc3RyICJNaW5pbXVtIGdyb290dGU6ICIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMzgKK21zZ2lkICJNYXhpbXVtIHNpemU6ICIKK21zZ3N0ciAiTWF4aW11bSBncm9vdHRlOiAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMzYyCisjLCBjLWZvcm1hdAorbXNnaWQgIk1vZGVsOiAlcyAoJXMpXG4iCittc2dzdHIgIk1vZGVsOiAlcyAoJXMpXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMzY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkRpc2sgJXM6ICVzXG4iCittc2dzdHIgIlNjaGlqZiAlczogJXNcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEzNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VjdG9yIHNpemUgKGxvZ2ljYWwvcGh5c2ljYWwpOiAlbGxkQi8lbGxkQlxuIgorbXNnc3RyICJTZWN0b3Jncm9vdHRlIChsb2dpc2NoL2Z5c2llayk6ICVsbGRCLyVsbGRCXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMzgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkJJT1MgY3lsaW5kZXIsaGVhZCxzZWN0b3IgZ2VvbWV0cnk6ICVkLCVkLCVkLiAgRWFjaCBjeWxpbmRlciBpcyAlcy5cbiIKK21zZ3N0ciAiIgorIkxvZ2lzY2hlIHNjaGlqZm9wYm91dyB2b2xnZW5zIEJJT1M6ICVkLCVkLCVkIChjaWxpbmRlcnMsa29wcGVuLHNlY3RvcmVuKS4gICIKKyJFbGtlIGNpbGluZGVyIGlzICVzLlxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTM5MgorIywgYy1mb3JtYXQKK21zZ2lkICJQYXJ0aXRpb24gVGFibGU6ICVzXG4iCittc2dzdHIgIlBhcnRpdGlldGFiZWw6ICVzXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDA2IHBhcnRlZC9wYXJ0ZWQuYzoxNDA5Cittc2dpZCAiTnVtYmVyIgorbXNnc3RyICJOdW1tZXIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDA2IHBhcnRlZC9wYXJ0ZWQuYzoxNDA5Cittc2dpZCAiU3RhcnQiCittc2dzdHIgIkJlZ2luIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQwNyBwYXJ0ZWQvcGFydGVkLmM6MTQxMAorbXNnaWQgIkVuZCIKK21zZ3N0ciAiRWluZGUiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDEwCittc2dpZCAiU2l6ZSIKK21zZ3N0ciAiR3Jvb3R0ZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MTQKK21zZ2lkICJUeXBlIgorbXNnc3RyICJUeXBlIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQxNgorbXNnaWQgIkZpbGUgc3lzdGVtIgorbXNnc3RyICJCZXN0YW5kc3N5c3RlZW0iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDE5Cittc2dpZCAiTmFtZSIKK21zZ3N0ciAiTmFhbSIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MjEKK21zZ2lkICJGbGFncyIKK21zZ3N0ciAiVmxhZ2dlbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0NzcKK21zZ2lkICJGcmVlIFNwYWNlIgorbXNnc3RyICJWcmlqZSBydWltdGUiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBICVzICVzIHBhcnRpdGlvbiB3YXMgZm91bmQgYXQgJXMgLT4gJXMuICBEbyB5b3Ugd2FudCB0byBhZGQgaXQgdG8gdGhlICIKKyJwYXJ0aXRpb24gdGFibGU/IgorbXNnc3RyICIiCisiRXIgaXMgZWVuICVzICVzLXBhcnRpdGllIGdldm9uZGVuIHZhbiAlcyB0b3QgJXMuICBXaWx0IHUgZGV6ZSBhYW4gZGUgIgorInBhcnRpdGlldGFiZWwgdG9ldm9lZ2VuPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjE2NjMKK21zZ2lkICJzZWFyY2hpbmcgZm9yIGZpbGUgc3lzdGVtcyIKK21zZ3N0ciAiYmV6aWcgbWV0IHpvZWtlbiBuYWFyIGJlc3RhbmRzc3lzdGVtZW4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxODc3Cittc2dpZCAiTmV3IGRldmljZT8iCittc2dzdHIgIk5pZXV3IGFwcGFyYWF0PyIKKworIzogcGFydGVkL3BhcnRlZC5jOjE5MDIKK21zZ2lkICJGbGFnIHRvIEludmVydD8iCittc2dzdHIgIk9tIHRlIHpldHRlbiB2bGFnPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjE5MDcKK21zZ2lkICJOZXcgc3RhdGU/IgorbXNnc3RyICJOaWV1d2UgdG9lc3RhbmQ/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTk0NAorbXNnaWQgIlVuaXQ/IgorbXNnc3RyICJFZW5oZWlkPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjIwOTMKK21zZ2lkICJjaGVjayIKK21zZ3N0ciAiY29udHJvbGVlciIKKworIzogcGFydGVkL3BhcnRlZC5jOjIwOTYKK21zZ2lkICIiCisiY2hlY2sgTlVNQkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyBhIHNpbXBsZSBjaGVjayBvbiB0aGUgZmlsZSBzeXN0ZW0iCittc2dzdHIgIiIKKyJjb250cm9sZWVyIE5VTU1FUiAgICAgICAgICAgZWVuIHNpbXBlbGUgY29udHJvbGUgdWl0dm9lcmVuIHZhbiAiCisiYmVzdGFuZHNzeXN0ZWVtIG9wIHBhcnRpdGllIE5VTU1FUiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMDIKK21zZ2lkICJjcCIKK21zZ3N0ciAia29waWVlciIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMDUKK21zZ2lkICIiCisiY3AgW0ZST00tREVWSUNFXSBGUk9NLU5VTUJFUiBUTy1OVU1CRVIgICBjb3B5IGZpbGUgc3lzdGVtIHRvIGFub3RoZXIgIgorInBhcnRpdGlvbiIKK21zZ3N0ciAiIgorImtvcGllZXIgW0FQUEFSQUFUXSBWQU4tTlVNTUVSIE5BQVItTlVNTUVSICAgZWVuIGJlc3RhbmRzc3lzdGVlbSBuYWFyIGVlbiAiCisiYW5kZXJlIHBhcnRpdGllIGtvcGnDq3JlbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMTEKK21zZ2lkICJoZWxwIgorbXNnc3RyICJodWxwIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjExNAorIywgZnV6enkKK21zZ2lkICIiCisiaGVscCBbQ09NTUFORF0gICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCBnZW5lcmFsIGhlbHAsIG9yIGhlbHAgb24gIgorIkNPTU1BTkQiCittc2dzdHIgIiIKKyJoZWxwIFtPUERSQUNIVF0gICAgICAgICAgICAgZW5pZ2UgYWxnZW1lbmUgaHVscCBnZXZlbiAob2YgaHVscCBiaWogT1BEUkFDSFQpIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEyMAorbXNnaWQgIm1rbGFiZWwiCittc2dzdHIgIm1hYWtsYWJlbCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMjAKK21zZ2lkICJta3RhYmxlIgorbXNnc3RyICJtYWFrdGFiZWwiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTIzCittc2dpZCAiIgorIm1rbGFiZWwsbWt0YWJsZSBMQUJFTC1UWVBFICAgICAgICAgICAgICAgY3JlYXRlIGEgbmV3IGRpc2tsYWJlbCAocGFydGl0aW9uICIKKyJ0YWJsZSkiCittc2dzdHIgIiIKKyJtYWFrbGFiZWwgTEFCRUwtVFlQRSAgICAgICAgbmlldXcgc2NoaWpmbGFiZWwgbWFrZW4gKG1ldCBsZWdlIHBhcnRpdGlldGFiZWwpIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEyOQorbXNnaWQgIm1rZnMiCittc2dzdHIgIm1hYWticyIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMzIKK21zZ2lkICIiCisibWtmcyBOVU1CRVIgRlMtVFlQRSAgICAgICAgICAgICAgICAgICAgICBtYWtlIGEgRlMtVFlQRSBmaWxlIHN5c3RlbSBvbiAiCisicGFydGl0aXRvbiBOVU1CRVIiCittc2dzdHIgIiIKKyJtYWFrYnMgTlVNTUVSIEJTLVNPT1JUICAgICAgb3AgcGFydGl0aWUgTlVNTUVSIGVlbiBiZXN0YW5kc3N5c3RlZW0gdmFuIEJTLSIKKyJTT09SVCBhYW5tYWtlbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMzgKK21zZ2lkICJta3BhcnQiCittc2dzdHIgIm1hYWtwYXJ0IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE0MQorbXNnaWQgIm1rcGFydCBQQVJULVRZUEUgW0ZTLVRZUEVdIFNUQVJUIEVORCAgICAgbWFrZSBhIHBhcnRpdGlvbiIKK21zZ3N0ciAibWFha3BhcnQgUEFSVC1UWVBFIFtCUy1TT09SVF0gQkVHSU4gRUlOREUgICBlZW4gcGFydGl0aWUgYWFubWFrZW4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTQ3CisjLCBmdXp6eQorbXNnaWQgIiIKKyInbWtwYXJ0JyBtYWtlcyBhIHBhcnRpdGlvbiB3aXRob3V0IGNyZWF0aW5nIGEgbmV3IGZpbGUgc3lzdGVtIG9uIHRoZSAiCisicGFydGl0aW9uLiAgRlMtVFlQRSBtYXkgYmUgc3BlY2lmaWVkIHRvIHNldCBhbiBhcHByb3ByaWF0ZSBwYXJ0aXRpb24gSUQuXG4iCittc2dzdHIgIiIKKyJPcGRyYWNodCAnbWFha3BhcnQnIG1hYWt0IGVlbiBwYXJ0aXRpZSBhYW4gem9uZGVyIGVlbiBiZXN0YW5kc3N5c3RlZW0gYWFuIHRlICIKKyJtYWtlbi4gIEJTLVNPT1JUIG1hZyBnZWJydWlrdCB3b3JkZW4gb20gaGV0IGVlbiBnZXNjaGlrdCBwYXJ0aXRpZWtlbm1lcmsgdGUgIgorImdldmVuLlxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE1MgorbXNnaWQgIm1rcGFydGZzIgorbXNnc3RyICJtYWFrcGFydGJzIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE1NQorbXNnaWQgIiIKKyJta3BhcnRmcyBQQVJULVRZUEUgRlMtVFlQRSBTVEFSVCBFTkQgICAgIG1ha2UgYSBwYXJ0aXRpb24gd2l0aCBhIGZpbGUgc3lzdGVtIgorbXNnc3RyICIiCisibWFha3BhcnRicyBQQVJULVRZUEUgQlMtU09PUlQgQkVHSU4gRUlOREUgICBlZW4gcGFydGl0aWUgbWV0IGVlbiAiCisiYmVzdGFuZHNzeXN0ZWVtIGFhbm1ha2VuICIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNjEKK21zZ2lkICJtb3ZlIgorbXNnc3RyICJzY2h1aWYiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTY0Cittc2dpZCAibW92ZSBOVU1CRVIgU1RBUlQgRU5EICAgICAgICAgICAgICAgICAgICBtb3ZlIHBhcnRpdGlvbiBOVU1CRVIiCittc2dzdHIgIiIKKyJzY2h1aWYgTlVNTUVSIEJFR0lOIEVJTkRFICAgcGFydGl0aWUgdmVycGxhYXRzZW4gbmFhciBuaWV1dyBCRUdJTiBlbiBFSU5ERSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNjkKK21zZ2lkICJuYW1lIgorbXNnc3RyICJub2VtIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE3MgorbXNnaWQgIm5hbWUgTlVNQkVSIE5BTUUgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSBwYXJ0aXRpb24gTlVNQkVSIGFzIE5BTUUiCittc2dzdHIgIm5vZW0gTlVNTUVSIE5BQU0gICAgICAgICAgICBwYXJ0aXRpZSBOVU1NRVIgZGV6ZSBOQUFNIGdldmVuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE3NworbXNnaWQgInByaW50IgorbXNnc3RyICJ0b29uIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE4MAorbXNnaWQgIiIKKyJwcmludCBbZGV2aWNlc3xmcmVlfGxpc3QsYWxsfE5VTUJFUl0gICAgIGRpc3BsYXkgdGhlIHBhcnRpdGlvbiB0YWJsZSwgIgorImF2YWlsYWJsZSBkZXZpY2VzLCBmcmVlIHNwYWNlLCBhbGwgZm91bmQgcGFydGl0aW9ucywgb3IgYSBwYXJ0aWN1bGFyICIKKyJwYXJ0aXRpb24iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxODUKK21zZ2lkICIiCisiV2l0aG91dCBhcmd1bWVudHMsICdwcmludCcgZGlzcGxheXMgdGhlIGVudGlyZSBwYXJ0aXRpb24gdGFibGUuIEhvd2V2ZXIgd2l0aCAiCisidGhlIGZvbGxvd2luZyBhcmd1bWVudHMgaXQgcGVyZm9ybXMgdmFyaW91cyBvdGhlciBhY3Rpb25zLlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTg3Cittc2dpZCAiICBkZXZpY2VzICAgOiBkaXNwbGF5IGFsbCBhY3RpdmUgYmxvY2sgZGV2aWNlc1xuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTg4Cittc2dpZCAiIgorIiAgZnJlZSAgICAgIDogZGlzcGxheSBpbmZvcm1hdGlvbiBhYm91dCBmcmVlIHVucGFydGl0aW9uZWQgc3BhY2Ugb24gdGhlICIKKyJjdXJyZW50IGJsb2NrIGRldmljZVxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTkwCisjLCBmdXp6eQorbXNnaWQgIiIKKyIgIGxpc3QsIGFsbCA6IGRpc3BsYXkgdGhlIHBhcnRpdGlvbiB0YWJsZXMgb2YgYWxsIGFjdGl2ZSBibG9jayBkZXZpY2VzXG4iCittc2dzdHIgImRlIHBhcnRpZXRhYmVsbGVuIHZhbiBhbGxlIGFwcGFyYXRlbiB0b25lbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxOTEKK21zZ2lkICIiCisiICBOVU1CRVIgICAgOiBkaXNwbGF5IG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBwYXJ0aWN1bGFyICIKKyJwYXJ0aXRpb25cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE5NgorbXNnaWQgInF1aXQiCittc2dzdHIgImVpbmRlIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE5OQorbXNnaWQgInF1aXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCBwcm9ncmFtIgorbXNnc3RyICJlaW5kZSAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbW1hIGFmc2x1aXRlbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMDQKK21zZ2lkICJyZXNjdWUiCittc2dzdHIgInJlZCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMDcKK21zZ2lkICIiCisicmVzY3VlIFNUQVJUIEVORCAgICAgICAgICAgICAgICAgICAgICAgICByZXNjdWUgYSBsb3N0IHBhcnRpdGlvbiBuZWFyIFNUQVJUICIKKyJhbmQgRU5EIgorbXNnc3RyICIiCisicmVkIEJFR0lOIEVJTkRFICAgICAgICAgICAgIGVlbiB2ZXJsb3JlbiBwYXJ0aXRpZSBwcm9iZXJlbiB0ZSBoZXJzdGVsbGVuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIxMworbXNnaWQgInJlc2l6ZSIKK21zZ3N0ciAiZ3Jvb3R0ZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMTYKK21zZ2lkICIiCisicmVzaXplIE5VTUJFUiBTVEFSVCBFTkQgICAgICAgICAgICAgICAgICByZXNpemUgcGFydGl0aW9uIE5VTUJFUiBhbmQgaXRzICIKKyJmaWxlIHN5c3RlbSIKK21zZ3N0ciAiIgorImdyb290dGUgTlVNTUVSIEJFR0lOIEVJTkRFICBkZSBncm9vdHRlIHZhbiBoZXQgYmVzdGFuZHNzeXN0ZWVtIG9wIHBhcnRpdGllICIKKyJOVU1NRVIgdmVyYW5kZXJlbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMjQKK21zZ2lkICJybSIKK21zZ3N0ciAidmVyd2lqZGVyIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIyNworbXNnaWQgInJtIE5VTUJFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHBhcnRpdGlvbiBOVU1CRVIiCittc2dzdHIgInZlcndpamRlciBOVU1NRVIgICAgICAgICAgICBwYXJ0aXRpZSBOVU1NRVIgdmVyd2lqZGVyZW4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjMyCittc2dpZCAic2VsZWN0IgorbXNnc3RyICJraWVzIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIzNQorbXNnaWQgInNlbGVjdCBERVZJQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvb3NlIHRoZSBkZXZpY2UgdG8gZWRpdCIKK21zZ3N0ciAia2llcyBBUFBBUkFBVCAgICAgICAgICAgICAgIGRpdCBBUFBBUkFBVCBraWV6ZW4gb20gdGUgYmV3ZXJrZW4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjQwCittc2dpZCAic2V0IgorbXNnc3RyICJ6ZXQiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjQzCittc2dpZCAiIgorInNldCBOVU1CRVIgRkxBRyBTVEFURSAgICAgICAgICAgICAgICAgICAgY2hhbmdlIHRoZSBGTEFHIG9uIHBhcnRpdGlvbiBOVU1CRVIiCittc2dzdHIgIiIKKyJ6ZXQgTlVNTUVSIFZMQUcgVE9FU1RBTkQgICAgb3AgcGFydGl0aWUgTlVNTUVSIGRlemUgVkxBRyBpbiBUT0VTVEFORCB6ZXR0ZW4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjQ5Cittc2dpZCAidG9nZ2xlIgorbXNnc3RyICJ6ZXRvbSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNTIKK21zZ2lkICIiCisidG9nZ2xlIFtOVU1CRVIgW0ZMQUddXSAgICAgICAgICAgICAgICAgICB0b2dnbGUgdGhlIHN0YXRlIG9mIEZMQUcgb24gIgorInBhcnRpdGlvbiBOVU1CRVIiCittc2dzdHIgIiIKKyJ6ZXRvbSBbTlVNTUVSIFtWTEFHXV0gICAgICAgb3AgcGFydGl0aWUgTlVNTUVSIGRlIHRvZXN0YW5kIHZhbiBWTEFHIG9temV0dGVuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI1OAorbXNnaWQgInVuaXQiCittc2dzdHIgImVlbmhlaWQiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjYxCittc2dpZCAidW5pdCBVTklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgdGhlIGRlZmF1bHQgdW5pdCB0byBVTklUIgorbXNnc3RyICJlZW5oZWlkIEVFTkhFSUQgICAgICAgICAgICAgc3RhbmRhYXJkIGRlemUgRUVOSEVJRCBnZWJydWlrZW4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjY2Cittc2dpZCAidmVyc2lvbiIKK21zZ3N0ciAidmVyc2llIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI2OQorIywgZnV6enkKK21zZ2lkICIiCisidmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5IHRoZSB2ZXJzaW9uIG51bWJlciBhbmQgIgorImNvcHlyaWdodCBpbmZvcm1hdGlvbiBvZiBHTlUgUGFydGVkIgorbXNnc3RyICIiCisidmVyc2llICAgICAgICAgICAgICAgICAgICAgIHZlcnNpZW51bW1lciBlbiBjb3B5cmlnaHQgdmFuIGRlemUgUGFydGVkIHRvbmVuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI3MworIywgZnV6enkKK21zZ2lkICIiCisiJ3ZlcnNpb24nIGRpc3BsYXlzIGNvcHlyaWdodCBhbmQgdmVyc2lvbiBpbmZvcm1hdGlvbiBjb3JyZXNwb25kaW5nIHRvIHRoaXMgIgorImNvcHkgb2YgR05VIFBhcnRlZFxuIgorbXNnc3RyICIiCisiJ3ZlcnNpZScgdG9vbnQgaW5mb3JtYXRpZSBvdmVyIGhldCBjb3B5cmlnaHQgZW4gZGUgdmVyc2llIHZhbiBkZXplIEdOVSAiCisiUGFydGVkXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMzM1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLWhsbXN2XSBbREVWSUNFIFtDT01NQU5EIFtQQVJBTUVURVJTXV0uLi5dXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIzNzkKK21zZ2lkICJObyBkZXZpY2UgZm91bmQiCittc2dzdHIgIkdlZW4gYXBwYXJhYXQgZ2V2b25kZW4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyNDEyCisjLCBmdXp6eQorbXNnaWQgIldBUk5JTkc6IFlvdSBhcmUgbm90IHN1cGVydXNlci4gIFdhdGNoIG91dCBmb3IgcGVybWlzc2lvbnMuIgorbXNnc3RyICIiCisiV0FBUlNDSFVXSU5HOiB1IGJlbnQgbmlldCByb290LlxuIgorIkhvdWQgcmVrZW5pbmcgbWV0IG9udGJyZWtlbmRlIHRvZWdhbmdzcmVjaHRlbi5cbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjI0NTAKKyMsIGZ1enp5Cittc2dpZCAiWW91IG1heSBuZWVkIHRvIHVwZGF0ZSAvZXRjL2ZzdGFiLlxuIgorbXNnc3RyICJWZXJnZWV0IG5pZXQsIGluZGllbiBub2RpZywgL2V0Yy9mc3RhYiBiaWogdGUgd2Vya2VuLlxuIgorCisjOiBwYXJ0ZWQvdWkuYzoxNjAKK21zZ2lkICJXZWxjb21lIHRvIEdOVSBQYXJ0ZWQhIFR5cGUgJ2hlbHAnIHRvIHZpZXcgYSBsaXN0IG9mIGNvbW1hbmRzLlxuIgorbXNnc3RyICJXZWxrb20gYmlqIEdOVSBQYXJ0ZWQhICBUeXAgJ2hlbHAnIHZvb3IgZWVuIG9wZHJhY2h0ZW5vdmVyemljaHQuXG4iCisKKyM6IHBhcnRlZC91aS5jOjE2MworbXNnaWQgIiIKKyJVc2FnZTogcGFydGVkIFtPUFRJT05dLi4uIFtERVZJQ0UgW0NPTU1BTkQgW1BBUkFNRVRFUlNdLi4uXS4uLl1cbiIKKyJBcHBseSBDT01NQU5EcyB3aXRoIFBBUkFNRVRFUlMgdG8gREVWSUNFLiAgSWYgbm8gQ09NTUFORChzKSBhcmUgZ2l2ZW4sIHJ1biAiCisiaW5cbiIKKyJpbnRlcmFjdGl2ZSBtb2RlLlxuIgorbXNnc3RyICIiCisiR2VicnVpazogIHBhcnRlZCBbT1BUSUVdLi4uIFtBUFBBUkFBVCBbT1BEUkFDSFQgW0FSR1VNRU5URU5dLi4uXS4uLl1cbiIKKyJEaXQgdm9lcnQgT1BEUkFDSFQgbWV0IEFSR1VNRU5URU4gdWl0IG9wIEFQUEFSQUFULlxuIgorIkFscyBlciBnZWVuIE9QRFJBQ0hUIGdlZ2V2ZW4gaXMsIHdvcmR0IGludGVyYWN0aWV2ZSBtb2R1cyBnZXN0YXJ0LlxuIgorCisjOiBwYXJ0ZWQvdWkuYzoxNjgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJcbiIKKyJZb3UgZm91bmQgYSBidWcgaW4gR05VIFBhcnRlZCEgSGVyZSdzIHdoYXQgeW91IGhhdmUgdG8gZG86XG4iCisiXG4iCisiRG9uJ3QgcGFuaWMhIFRoZSBidWcgaGFzIG1vc3QgbGlrZWx5IG5vdCBhZmZlY3RlZCBhbnkgb2YgeW91ciBkYXRhLlxuIgorIkhlbHAgdXMgdG8gZml4IHRoaXMgYnVnIGJ5IGRvaW5nIHRoZSBmb2xsb3dpbmc6XG4iCisiXG4iCisiQ2hlY2sgd2hldGhlciB0aGUgYnVnIGhhcyBhbHJlYWR5IGJlZW4gZml4ZWQgYnkgY2hlY2tpbmdcbiIKKyJ0aGUgbGFzdCB2ZXJzaW9uIG9mIEdOVSBQYXJ0ZWQgdGhhdCB5b3UgY2FuIGZpbmQgYXQ6XG4iCisiXG4iCisiXHRodHRwOi8vZnRwLmdudS5vcmcvZ251L3BhcnRlZC9cbiIKKyJcbiIKKyJQbGVhc2UgY2hlY2sgdGhpcyB2ZXJzaW9uIHByaW9yIHRvIGJ1ZyByZXBvcnRpbmcuXG4iCisiXG4iCisiSWYgdGhpcyBoYXMgbm90IGJlZW4gZml4ZWQgeWV0IG9yIGlmIHlvdSBkb24ndCBrbm93IGhvdyB0byBjaGVjayxcbiIKKyJwbGVhc2UgdmlzaXQgdGhlIEdOVSBQYXJ0ZWQgd2Vic2l0ZTpcbiIKKyJcbiIKKyJcdGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9wYXJ0ZWRcbiIKKyJcbiIKKyJmb3IgZnVydGhlciBpbmZvcm1hdGlvbi5cbiIKKyJcbiIKKyJZb3VyIHJlcG9ydCBzaG91bGQgY29udGFpbiB0aGUgdmVyc2lvbiBvZiB0aGlzIHJlbGVhc2UgKCVzKVxuIgorImFsb25nIHdpdGggdGhlIGVycm9yIG1lc3NhZ2UgYmVsb3csIHRoZSBvdXRwdXQgb2ZcbiIKKyJcbiIKKyJcdHBhcnRlZCBERVZJQ0UgdW5pdCBjbyBwcmludCB1bml0IHMgcHJpbnRcbiIKKyJcbiIKKyJhbmQgdGhlIGZvbGxvd2luZyBoaXN0b3J5IG9mIGNvbW1hbmRzIHlvdSBlbnRlcmVkLlxuIgorIkFsc28gaW5jbHVkZSBhbnkgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB5b3VyIHNldHVwIHlvdVxuIgorImNvbnNpZGVyIGltcG9ydGFudC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIlxuIgorIlUgaGVlZnQgZWVuIHByb2dyYW1tZWVyZm91dCBpbiBHTlUgUGFydGVkIGdldm9uZGVuLiAgUmFhayBuaWV0IGluIHBhbmllay5cbiIKKyJEZSBmb3V0IGhlZWZ0IHplZXIgd2FhcnNjaGlqbmxpamsgdXcgZ2VnZXZlbnMgb25nZW1vZWlkIGdlbGF0ZW4uXG4iCisiXG4iCisiSGVscCBvbnMgZGUgZm91dCB0ZSB2ZXJiZXRlcmVuIGRvb3IgaGV0IHZvbGdlbmRlIHRlIGRvZW46XG4iCisiXG4iCisiQ29udHJvbGVlciBvZiBkZSBmb3V0IGFsIGlzIHZlcmJldGVyZCBkb29yIGRlIG5pZXV3c3RlIHZlcnNpZSB2YW4gR05VICIKKyJQYXJ0ZWRcbiIKKyJ0ZSBnZWJydWlrZW4gZGllIHRlIHZpbmRlbiBpcyBvcDpcbiIKKyJcbiIKKyJcdGh0dHA6Ly9mdHAuZ251Lm9yZy9nbnUvcGFydGVkL1xuIgorIlxuIgorIlByb2JlZXIgZGllIHZlcnNpZSBhbHZvcmVucyBlZW4gZm91dCB0ZSByYXBwb3J0ZXJlbi5cbiIKKyJcbiIKKyJBbHMgZGUgZm91dCBub2cgbmlldCBpcyB2ZXJiZXRlcmQsIG9mIGFscyB1IG5pZXQgcHJlY2llcyB3ZWV0IGhvZSBkaXRcbiIKKyJ0ZSBjb250cm9sZXJlbiwga2lqayBkYW4gdm9vciB2ZXJkZXJlIGluZm9ybWF0aWUgb3AgZGUgUGFydGVkLXdlYnNpdGU6XG4iCisiXG4iCisiXHRodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvcGFydGVkXG4iCisiXG4iCisiVXcgcmFwcG9ydGFnZSBkaWVudCBoZXQgdmVyc2llbnVtbWVyIHZhbiBQYXJ0ZWQgdGUgYmV2YXR0ZW4gKCVzKSxcbiIKKyJkZSBvbmRlcnN0YWFuZGUgZm91dG1lbGRpbmcsIGRlIHVpdHZvZXIgdmFuXG4iCisiXG4iCisiXHRwYXJ0ZWQgQVBQQVJBQVQgdW5pdCBjbyBwcmludCB1bml0IHMgcHJpbnRcbiIKKyJcbiIKKyJlbiB2ZXJkZXJlIHJlbGV2YW50ZSBpbmZvcm1hdGllIG92ZXIgZGUgY29uZmlndXJhdGllIHZhbiB1dyBzeXN0ZWVtLlxuIgorCisjOiBwYXJ0ZWQvdWkuYzoyODQKK21zZ2lkICIiCisiXG4iCisiQ29tbWFuZCBIaXN0b3J5OlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjM2NgorIywgZnV6enkKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IFNFR1ZfTUFQRVJSIChBZGRyZXNzIG5vdCBtYXBwZWQgdG8gb2JqZWN0KVxuIgorbXNnc3RyICIiCisiXG4iCisiRXJyb3I6IFNFR1ZfTUFQRVJSIChBZHJlcyBuaWV0IHZlcmJvbmRlbiBtZXQgb2JqZWN0KSIKKworIzogcGFydGVkL3VpLmM6MzcyCisjLCBmdXp6eQorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogU0VHVl9BQ0NFUlIgKEludmFsaWQgcGVybWlzc2lvbnMgZm9yIG1hcHBlZCBvYmplY3QpXG4iCittc2dzdHIgIiIKKyJcbiIKKyJFcnJvcjogU0VHVl9BQ0NFUlIgKE9uZ2VsZGlnZSB0b2VnYW5nc3JlY2h0ZW4gdm9vciBvYmplY3QpIgorCisjOiBwYXJ0ZWQvdWkuYzozNzcKKyMsIGZ1enp5Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBBIGdlbmVyYWwgU0lHU0VHViBzaWduYWwgd2FzIGVuY291bnRlcmVkLlxuIgorbXNnc3RyICIiCisiXG4iCisiRm91dDogZWVuIG5pZXQtc3BlY2lmaWVrIFNJR1NFR1Ytc2lnbmFhbCB3ZXJkIG9udHZhbmdlbi4iCisKKyM6IHBhcnRlZC91aS5jOjQxMAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0lOVERJViAoSW50ZWdlcjogZGl2aWRlIGJ5IHplcm8pIgorbXNnc3RyICIiCisiXG4iCisiRXJyb3I6IEZQRV9JTlRESVYgKERlbGluZyBkb29yIG51bCkiCisKKyM6IHBhcnRlZC91aS5jOjQxNQorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0lOVE9WRiAoSW50ZWdlcjogb3ZlcmZsb3cpIgorbXNnc3RyICIiCisiXG4iCisiRXJyb3I6IEZQRV9JTlRPVkYgKE92ZXJsb29wKSIKKworIzogcGFydGVkL3VpLmM6NDIwCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxURElWIChGbG9hdDogZGl2aWRlIGJ5IHplcm8pIgorbXNnc3RyICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRESVYgKERlbGluZyBkb29yIG51bCkiCisKKyM6IHBhcnRlZC91aS5jOjQyNQorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0ZMVE9WRiAoRmxvYXQ6IG92ZXJmbG93KSIKK21zZ3N0ciAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxUT1ZGIChPdmVybG9vcCkiCisKKyM6IHBhcnRlZC91aS5jOjQzMAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0ZMVFVORCAoRmxvYXQ6IHVuZGVyZmxvdykiCittc2dzdHIgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0ZMVFVORCAoT25kZXJsb29wKSIKKworIzogcGFydGVkL3VpLmM6NDM1Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxUUkVTIChGbG9hdDogaW5leGFjdCByZXN1bHQpIgorbXNnc3RyICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRSRVMgKEluZXhhY3QgcmVzdWx0YWF0KSIKKworIzogcGFydGVkL3VpLmM6NDQwCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxUSU5WIChGbG9hdDogaW52YWxpZCBvcGVyYXRpb24pIgorbXNnc3RyICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRJTlYgKE9uZ2VsZGlnZSBvcGVyYXRpZSkiCisKKyM6IHBhcnRlZC91aS5jOjQ0NQorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0ZMVFNVQiAoRmxvYXQ6IHN1YnNjcmlwdCBvdXQgb2YgcmFuZ2UpIgorbXNnc3RyICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRTVUIgKEluZGV4IGJ1aXRlbiBiZXJlaWspIgorCisjOiBwYXJ0ZWQvdWkuYzo0NTAKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEEgZ2VuZXJhbCBTSUdGUEUgc2lnbmFsIHdhcyBlbmNvdW50ZXJlZC4iCittc2dzdHIgIiIKKyJcbiIKKyJGb3V0OiBlZW4gbmlldC1zcGVjaWZpZWsgU0lHRlBFLXNpZ25hYWwgd2VyZCBvbnR2YW5nZW4uIgorCisjOiBwYXJ0ZWQvdWkuYzo0ODMKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9JTExPUEMgKElsbGVnYWwgT3Bjb2RlKSIKK21zZ3N0ciAiIgorIlxuIgorIkVycm9yOiBJTExfSUxMT1BDIChPbmdlbGRpZ2Ugb3Bjb2RlKSIKKworIzogcGFydGVkL3VpLmM6NDg4Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfSUxMT1BOIChJbGxlZ2FsIE9wZXJhbmQpIgorbXNnc3RyICIiCisiXG4iCisiRXJyb3I6IElMTF9JTExPUE4gKE9uZ2VsZGlnZSBwYXJhbWV0ZXIpIgorCisjOiBwYXJ0ZWQvdWkuYzo0OTMKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9JTExBRFIgKElsbGVnYWwgYWRkcmVzc2luZyBtb2RlKSIKK21zZ3N0ciAiIgorIlxuIgorIkVycm9yOiBJTExfSUxMQURSIChPbmdlbGRpZ2UgYWRyZXNzZXJpbmdzbW9kdXMpIgorCisjOiBwYXJ0ZWQvdWkuYzo0OTgKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9JTExUUlAgKElsbGVnYWwgVHJhcCkiCittc2dzdHIgIiIKKyJcbiIKKyJFcnJvcjogSUxMX0lMTFRSUCAoT25nZWxkaWdlICd0cmFwJykiCisKKyM6IHBhcnRlZC91aS5jOjUwMworbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX1BSVk9QQyAoUHJpdmlsZWdlZCBPcGNvZGUpIgorbXNnc3RyICIiCisiXG4iCisiRXJyb3I6IElMTF9QUlZPUEMgKEluc3RydWN0aWUgYWxsZWVuIHRvZWdhbmtlbGlqayB2b29yIGdlcHJpdmlsZWdlZXJkZW4pIgorCisjOiBwYXJ0ZWQvdWkuYzo1MDgKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9QUlZSRUcgKFByaXZpbGVnZWQgUmVnaXN0ZXIpIgorbXNnc3RyICIiCisiXG4iCisiRXJyb3I6IElMTF9QUlZSRUcgKFJlZ2lzdGVyIGFsbGVlbiB0b2VnYW5rZWxpamsgdm9vciBnZXByaXZpbGVnZWVyZGVuKSIKKworIzogcGFydGVkL3VpLmM6NTEzCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfQ09QUk9DIChDb3Byb2Nlc3NvciBFcnJvcikiCittc2dzdHIgIiIKKyJcbiIKKyJFcnJvcjogSUxMX0NPUFJPQyAoQ29wcm9jZXNzb3Jmb3V0KSIKKworIzogcGFydGVkL3VpLmM6NTE4Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfQkFEU1RLIChJbnRlcm5hbCBTdGFjayBFcnJvcikiCittc2dzdHIgIiIKKyJcbiIKKyJFcnJvcjogSUxMX0JBRFNUSyAoSW50ZXJuZSBzdGFja2ZvdXQpIgorCisjOiBwYXJ0ZWQvdWkuYzo1MjMKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEEgZ2VuZXJhbCBTSUdJTEwgc2lnbmFsIHdhcyBlbmNvdW50ZXJlZC4iCittc2dzdHIgIiIKKyJcbiIKKyJGb3V0OiBlZW4gbmlldC1zcGVjaWZpZWsgU0lHSUxMLXNpZ25hYWwgd2VyZCBvbnR2YW5nZW4uIgorCisjOiBwYXJ0ZWQvdWkuYzoxMDI0Cittc2dpZCAiRXhwZWN0aW5nIGEgcGFydGl0aW9uIG51bWJlci4iCittc2dzdHIgIkVlbiBwYXJ0aXRpZW51bW1lciB3b3JkdCB2ZXJ3YWNodC4iCisKKyM6IHBhcnRlZC91aS5jOjEwMzMKK21zZ2lkICJQYXJ0aXRpb24gZG9lc24ndCBleGlzdC4iCittc2dzdHIgIlBhcnRpdGllIGJlc3RhYXQgbmlldC4iCisKKyM6IHBhcnRlZC91aS5jOjEwNTMKK21zZ2lkICJFeHBlY3RpbmcgYSBmaWxlIHN5c3RlbSB0eXBlLiIKK21zZ3N0ciAiRWVuIGJlc3RhbmRzc3lzdGVlbXNvb3J0IHdvcmR0IHZlcndhY2h0LiIKKworIzogcGFydGVkL3VpLmM6MTA2MAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIGZpbGUgc3lzdGVtIHR5cGUgXCIlc1wiLiIKK21zZ3N0ciAiT25iZWtlbmRlIGJlc3RhbmRzc3lzdGVlbXNvb3J0ICclcycuIgorCisjOiBwYXJ0ZWQvdWkuYzoxMDgwCittc2dpZCAiRXhwZWN0aW5nIGEgZGlzayBsYWJlbCB0eXBlLiIKK21zZ3N0ciAiRWVuIHNjaGlqZmxhYmVsdHlwZSB3b3JkdCB2ZXJ3YWNodC4iCisKKyM6IHBhcnRlZC91aS5jOjExNzgKK21zZ2lkICJDYW4ndCBjcmVhdGUgYW55IG1vcmUgcGFydGl0aW9ucy4iCittc2dzdHIgIkthbiBnZWVuIG5pZXV3ZSBwYXJ0aXRpZXMgbWVlciBtYWtlbi4iCisKKyM6IHBhcnRlZC91aS5jOjExODgKK21zZ2lkICJFeHBlY3RpbmcgYSBwYXJ0aXRpb24gdHlwZS4iCittc2dzdHIgIkVlbiBwYXJ0aXRpZXR5cGUgd29yZHQgdmVyd2FjaHQuIgorCisjOiBwYXJ0ZWQvdWkuYzoxMzE1Cittc2dpZCAib24iCittc2dzdHIgImFhbiIKKworIzogcGFydGVkL3VpLmM6MTMxNgorbXNnaWQgIm9mZiIKK21zZ3N0ciAidWl0IgorCisjOiBwYXJ0ZWQvdWkuYzoxNDMxCittc2dpZCAiT1BUSU9OczoiCittc2dzdHIgIk9QVElFczoiCisKKyM6IHBhcnRlZC91aS5jOjE0MzYKK21zZ2lkICJDT01NQU5EczoiCittc2dzdHIgIk9QRFJBQ0hUZW46IgorCisjOiBwYXJ0ZWQvdWkuYzoxNDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzaW5nICVzXG4iCittc2dzdHIgIkFwcGFyYWF0ICVzIHdvcmR0IGdlYnJ1aWt0LlxuIgorCisjOiBwYXJ0ZWQvdWkuYzoxNTE5Cittc2dpZCAiVGhpcyBjb21tYW5kIGRvZXMgbm90IG1ha2Ugc2Vuc2UgaW4gbm9uLWludGVyYWN0aXZlIG1vZGUuXG4iCittc2dzdHIgIiIKKworI34gbXNnaWQgIkdOVSBQYXJ0ZWQgY2Fubm90IHJlc2l6ZSB0aGlzIGZpbGUgc3lzdGVtLCBwbGVhc2UgdXNlcmVzaXplMmZzLiIKKyN+IG1zZ3N0ciAiIgorI34gIkdOVSBQYXJ0ZWQga2FuIGRpdCBiZXN0YW5kc3N5c3RlZW0gbmlldCB2YW4gZ3Jvb3R0ZSB2ZXJhbmRlcmVuO1xuIgorI34gImdlYnJ1aWsgJ3Jlc2l6ZTJmcycuIgorCisjfiBtc2dpZCAid2hlcmUgbmVjZXNzYXJ5LCBwcm9tcHRzIGZvciB1c2VyIGludGVydmVudGlvbiIKKyN+IG1zZ3N0ciAiaW5kaWVuIG5vZGlnIHZyYWdlbiBzdGVsbGVuIgorCisjfiBtc2dpZCAiR05VIFBhcnRlZCBWZXJzaW9uIGluZm9ybWF0aW9uOlxuIgorI34gbXNnc3RyICJHTlUgUGFydGVkIHZlcnNpZWluZm9ybWF0aWU6XG4iCisKKyN+IG1zZ2lkICIiCisjfiAicHJpbnQgW2ZyZWV8TlVNQkVSfGFsbF0gICAgICAgICAgICAgICAgICBkaXNwbGF5IHRoZSBwYXJ0aXRpb24gdGFibGUsIGEgIgorI34gInBhcnRpdGlvbiwgb3IgYWxsIGRldmljZXMiCisjfiBtc2dzdHIgIiIKKyN+ICJ0b29uIFtmcmVlfE5VTU1FUnxhbGxdICAgICAgZGUgcGFydGl0aWV0YWJlbCB3ZWVyZ2V2ZW4gKG9mIGRlIHZyaWplICIKKyN+ICJydWltdGUsIG9mIGVlbiBzcGVjaWZpZWtlIHBhcnRpdGllLCBvZiBhbGxlIGFwcGFyYXRlbikiCisKKyN+IG1zZ2lkICIiCisjfiAiV2l0aG91dCBhcmd1bWVudHMsIHByaW50IGRpc3BsYXlzIHRoZSBlbnRpcmUgcGFydGl0aW9uIHRhYmxlLiBXaXRoICIKKyN+ICInZnJlZSdcbiIKKyN+ICJhcmd1bWVudCwgaW5mb3JtYXRpb24gYWJvdXQgZnJlZSBzcGFjZSB3aWxsIGJlIGRpc3BsYXllZCBvdGhlcndpc2UgaWYgYVxuIgorI34gInBhcnRpdGlvbiBudW1iZXIgaXMgZ2l2ZW4sIHRoZW4gbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBpcyBkaXNwbGF5ZWRcbiIKKyN+ICJhYm91dCB0aGF0IHBhcnRpdGlvbi4gSWYgdGhlICdhbGwnIGFyZ3VtZW50IGlzIHBhc3NlZCBpbnN0ZWFkLCBwYXJ0aXRpb25cbiIKKyN+ICJpbmZvcm1hdGlvbiBmb3IgYWxsIGRldmljZXMgd2lsbCBiZSBkaXNwbGF5ZWQuXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJab25kZXIgYXJndW1lbnRlbiB0b29udCAndG9vbicgZGUgdm9sbGVkaWdlIHBhcnRpdGlldGFiZWwuICBNZXQgJ2ZyZWUnXG4iCisjfiAiYWxzIGFyZ3VtZW50LCB0b29udCBoZXQgaG9ldmVlbCBydWltdGUgZXIgbm9nIGJlc2NoaWtiYWFyIGlzLiAgTWV0IGVlblxuIgorI34gInBhcnRpdGllbnVtbWVyIGFscyBhcmd1bWVudCwgdG9vbnQgaGV0IG1lZXIgZ2VkZXRhaWxsZWVyZGUgaW5mb3JtYXRpZVxuIgorI34gIm92ZXIgZGllIHBhcnRpdGllLiAgRW4gbWV0ICdhbGwnIGFscyBhcmd1bWVudCwgdG9vbnQgaGV0IGluZm9ybWF0aWUgb3ZlclxuIgorI34gImFsbGUgYXBwYXJhdGVuLlxuIgpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L3BvL25uLmdtbyBiL3BhcnRlZC0xLjguNy9wby9ubi5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVhMDgyYQotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9wby9ubi5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L3BvL25uLnBvIGIvcGFydGVkLTEuOC43L3BvL25uLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwYmNhZjgKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvcG8vbm4ucG8KQEAgLTAsMCArMSwzMzM2IEBACisjIE5vcndlZ2lhbiBueW5vcnNrIG1lc3NhZ2VzIGZvciBHTlUgcGFydGVkCisjIENvcHlyaWdodCAoQykgMjAwMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgS2pldGlsIFRvcmdyaW0gSG9tbWUgPGtqZXRpbGhvQGlmaS51aW8ubm8+LCAyMDAxLgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogR05VIHBhcnRlZCAxLjYuNi1wcmUyXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGJ1Zy1wYXJ0ZWRAZ251Lm9yZ1xuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDA3LTA1LTA5IDE3OjAyLTA0MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDAzLTA3LTA0IDE5OjAzKzAyMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEtqZXRpbCBUb3JncmltIEhvbW1lIDxramV0aWxob0BpZmkudWlvLm5vPlxuIgorIkxhbmd1YWdlLVRlYW06IE5vcndlZ2lhbiBOeW5vcnNrIDxpMThuLW5uQGxpc3Rlci5waW5nLnVpby5ubz5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1JU08tODg1OS0xXG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorCisjOiBsaWIvY2xvc2VvdXQuYzo3NAorbXNnaWQgIndyaXRlIGVycm9yIgorbXNnc3RyICIiCisKKyM6IGxpYi9lcnJvci5jOjEyNQorIywgZnV6enkKK21zZ2lkICJVbmtub3duIHN5c3RlbSBlcnJvciIKK21zZ3N0ciAiRmlsc3lzdGVtdHlwZW4gqyVzuyBlciB1a2plbmQuIgorCisjOiBsaWIvZ2V0b3B0LmM6NTMxIGxpYi9nZXRvcHQuYzo1NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiBgJXMnIGlzIGFtYmlndW91c1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo1ODAgbGliL2dldG9wdC5jOjU4NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIGAtLSVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjU5MyBsaWIvZ2V0b3B0LmM6NTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYCVjJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6NjQxIGxpYi9nZXRvcHQuYzo2NjAgbGliL2dldG9wdC5jOjk3NiBsaWIvZ2V0b3B0LmM6OTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYCVzJyByZXF1aXJlcyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo2OTggbGliL2dldG9wdC5jOjcwMQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5yZWNvZ25pemVkIG9wdGlvbiBgLS0lcydcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6NzA5IGxpYi9nZXRvcHQuYzo3MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVucmVjb2duaXplZCBvcHRpb24gYCVjJXMnXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjc2NCBsaWIvZ2V0b3B0LmM6NzY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbGxlZ2FsIG9wdGlvbiAtLSAlY1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo3NzMgbGliL2dldG9wdC5jOjc3NgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBvcHRpb24gLS0gJWNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6ODI4IGxpYi9nZXRvcHQuYzo4NDQgbGliL2dldG9wdC5jOjEwNDggbGliL2dldG9wdC5jOjEwNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCAtLSAlY1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo4OTcgbGliL2dldG9wdC5jOjkxMworIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIGAtVyAlcycgaXMgYW1iaWd1b3VzXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjkzNyBsaWIvZ2V0b3B0LmM6OTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYC1XICVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6CisjLiBHZXQgdHJhbnNsYXRpb25zIGZvciBvcGVuIGFuZCBjbG9zaW5nIHF1b3RhdGlvbiBtYXJrcy4KKyMuCisjLiBUaGUgbWVzc2FnZSBjYXRhbG9nIHNob3VsZCB0cmFuc2xhdGUgImAiIHRvIGEgbGVmdAorIy4gcXVvdGF0aW9uIG1hcmsgc3VpdGFibGUgZm9yIHRoZSBsb2NhbGUsIGFuZCBzaW1pbGFybHkgZm9yCisjLiAiJyIuICBJZiB0aGUgY2F0YWxvZyBoYXMgbm8gdHJhbnNsYXRpb24sCisjLiBsb2NhbGVfcXVvdGluZ19zdHlsZSBxdW90ZXMgYGxpa2UgdGhpcycsIGFuZAorIy4gY2xvY2FsZV9xdW90aW5nX3N0eWxlIHF1b3RlcyAibGlrZSB0aGlzIi4KKyMuCisjLiBGb3IgZXhhbXBsZSwgYW4gQW1lcmljYW4gRW5nbGlzaCBVbmljb2RlIGxvY2FsZSBzaG91bGQKKyMuIHRyYW5zbGF0ZSAiYCIgdG8gVSsyMDFDIChMRUZUIERPVUJMRSBRVU9UQVRJT04gTUFSSyksIGFuZAorIy4gc2hvdWxkIHRyYW5zbGF0ZSAiJyIgdG8gVSsyMDFEIChSSUdIVCBET1VCTEUgUVVPVEFUSU9OCisjLiBNQVJLKS4gIEEgQnJpdGlzaCBFbmdsaXNoIFVuaWNvZGUgbG9jYWxlIHNob3VsZCBpbnN0ZWFkCisjLiB0cmFuc2xhdGUgdGhlc2UgdG8gVSsyMDE4IChMRUZUIFNJTkdMRSBRVU9UQVRJT04gTUFSSykgYW5kCisjLiBVKzIwMTkgKFJJR0hUIFNJTkdMRSBRVU9UQVRJT04gTUFSSyksIHJlc3BlY3RpdmVseS4KKyMuCisjLiBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIHB1dCBoZXJlLCBwbGVhc2Ugc2VlCisjLiA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9RdW90YXRpb25fbWFyayNHbHlwaHM+CisjLiBhbmQgdXNlIGdseXBocyBzdWl0YWJsZSBmb3IgeW91ciBsYW5ndWFnZS4KKyM6IGxpYi9xdW90ZWFyZy5jOjIyOQorbXNnaWQgImAiCittc2dzdHIgIiIKKworIzogbGliL3F1b3RlYXJnLmM6MjMwCittc2dpZCAiJyIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjEzMQorbXNnaWQgIlN1Y2Nlc3MiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxMzQKK21zZ2lkICJObyBtYXRjaCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjEzNworbXNnaWQgIkludmFsaWQgcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTQwCittc2dpZCAiSW52YWxpZCBjb2xsYXRpb24gY2hhcmFjdGVyIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTQzCittc2dpZCAiSW52YWxpZCBjaGFyYWN0ZXIgY2xhc3MgbmFtZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE0NgorbXNnaWQgIlRyYWlsaW5nIGJhY2tzbGFzaCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE0OQorbXNnaWQgIkludmFsaWQgYmFjayByZWZlcmVuY2UiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNTIKK21zZ2lkICJVbm1hdGNoZWQgWyBvciBbXiIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE1NQorbXNnaWQgIlVubWF0Y2hlZCAoIG9yIFxcKCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE1OAorbXNnaWQgIlVubWF0Y2hlZCBcXHsiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNjEKK21zZ2lkICJJbnZhbGlkIGNvbnRlbnQgb2YgXFx7XFx9IgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTY0Cittc2dpZCAiSW52YWxpZCByYW5nZSBlbmQiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNjcKK21zZ2lkICJNZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTcwCittc2dpZCAiSW52YWxpZCBwcmVjZWRpbmcgcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTczCittc2dpZCAiUHJlbWF0dXJlIGVuZCBvZiByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNzYKK21zZ2lkICJSZWd1bGFyIGV4cHJlc3Npb24gdG9vIGJpZyIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE3OQorbXNnaWQgIlVubWF0Y2hlZCApIG9yIFxcKSIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjY4MAorbXNnaWQgIk5vIHByZXZpb3VzIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvcnBtYXRjaC5jOjcwCittc2dpZCAiXlt5WV0iCittc2dzdHIgIiIKKworIzogbGliL3JwbWF0Y2guYzo3MworbXNnaWQgIl5bbk5dIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBUcmFuc2xhdGUgIihDKSIgdG8gdGhlIGNvcHlyaWdodCBzeW1ib2wKKyMuIChDLWluLWEtY2lyY2xlKSwgaWYgdGhpcyBzeW1ib2wgaXMgYXZhaWxhYmxlIGluIHRoZSB1c2VyJ3MKKyMuIGxvY2FsZS4gIE90aGVyd2lzZSwgZG8gbm90IHRyYW5zbGF0ZSAiKEMpIjsgbGVhdmUgaXQgYXMtaXMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzo2NgorbXNnaWQgIihDKSIKK21zZ3N0ciAiIgorCisjOiBsaWIvdmVyc2lvbi1ldGMuYzo2OAorbXNnaWQgIiIKKyJcbiIKKyJMaWNlbnNlIEdQTHYyKzogR05VIEdQTCB2ZXJzaW9uIDIgb3IgbGF0ZXIgPGh0dHA6Ly9nbnUub3JnL2xpY2Vuc2VzL2dwbC4iCisiaHRtbD5cbiIKKyJUaGlzIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBhcmUgZnJlZSB0byBjaGFuZ2UgYW5kIHJlZGlzdHJpYnV0ZSBpdC5cbiIKKyJUaGVyZSBpcyBOTyBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3LlxuIgorIlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIzogbGliL3ZlcnNpb24tZXRjLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiV3JpdHRlbiBieSAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIzogbGliL3ZlcnNpb24tZXRjLmM6ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiV3JpdHRlbiBieSAlcyBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIldyaXR0ZW4gYnkgJXMsICVzLCBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyJhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6MTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiJXMsIGFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyIlcywgJXMsIGFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzoxMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyIlcywgJXMsICVzLCBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6MTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiJXMsICVzLCAlcywgJXMsXG4iCisiYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjLiBZb3UgY2FuIHVzZSBsaW5lIGJyZWFrcywgZXN0aW1hdGluZyB0aGF0IGVhY2ggYXV0aG9yIG5hbWUgb2NjdXBpZXMKKyMuIGNhLiAxNiBzY3JlZW4gY29sdW1ucyBhbmQgdGhhdCBhIHNjcmVlbiBsaW5lIGhhcyBjYS4gODAgY29sdW1ucy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjEzMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorIiVzLCAlcywgJXMsICVzLFxuIgorIiVzLCBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6MTQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiJXMsICVzLCAlcywgJXMsXG4iCisiJXMsICVzLCBhbmQgb3RoZXJzLlxuIgorbXNnc3RyICIiCisKKyM6IGxpYi94YWxsb2MtZGllLmM6MzUKK21zZ2lkICJtZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzoyMzcKK21zZ2lkICJEaXNrIEltYWdlIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzozMzggbGlicGFydGVkL2FyY2gvZ251LmM6MjYxCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjEyNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igb3BlbmluZyAlczogJXMiCittc2dzdHIgIkZlaWwgdmVkIG9wbmluZyBhdiAlczogJXMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzozNDkgbGlicGFydGVkL2FyY2gvZ251LmM6MjcxCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjEyODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIG9wZW4gJXMgcmVhZC13cml0ZSAoJXMpLiAgJXMgaGFzIGJlZW4gb3BlbmVkIHJlYWQtb25seS4iCittc2dzdHIgIiIKKyJLdW5uZSBpa2tqZSBvcG5hICVzIGZvciBi5WRlIGxlc2luZyBvZyBza3JpdmluZyAoJXMpLiAgJXMgZXIgYmVycmUgb3BuYSBmb3IgIgorImxlc2luZy4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzo0MTEgbGlicGFydGVkL2FyY2gvbGludXguYzoxNDMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGR1cmluZyBzZWVrIGZvciByZWFkIG9uICVzIgorbXNnc3RyICIlcyB1bmRlciBwb3Npc2pvbmVyaW5nIGb4ciBsZXNpbmcgYXYgJXMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzo0NDQgbGlicGFydGVkL2FyY2gvZ251LmM6NDQ5IGxpYnBhcnRlZC9hcmNoL2dudS5jOjU0OAorIzogbGlicGFydGVkL2FyY2gvZ251LmM6Njc2IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTM5MQorIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxNDY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGR1cmluZyByZWFkIG9uICVzIgorbXNnc3RyICIlcyB1bmRlciBsZXNpbmcgYXYgJXMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzo0ODAgbGlicGFydGVkL2FyY2gvZ251LmM6NTA5CisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjE1NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2FuJ3Qgd3JpdGUgdG8gJXMsIGJlY2F1c2UgaXQgaXMgb3BlbmVkIHJlYWQtb25seS4iCittc2dzdHIgIkthbiBpa2tqZSBza3JpdmEgdGlsICVzLCBzaWRhbiBoYW4gYmVycmUgZXIgb3BuYSBmb3IgbGVzaW5nLiIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjQ5NiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjE1NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZHVyaW5nIHNlZWsgZm9yIHdyaXRlIG9uICVzIgorbXNnc3RyICIlcyB1bmRlciBwb3Npc2pvbmVyaW5nIGb4ciBza3JpdmluZyB0aWwgJXMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzo1MzMgbGlicGFydGVkL2FyY2gvZ251LmM6NTg1IGxpYnBhcnRlZC9hcmNoL2dudS5jOjYzMAorIzogbGlicGFydGVkL2FyY2gvZ251LmM6NzA3IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTUxNworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxNjEyIGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTY4NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkdXJpbmcgd3JpdGUgb24gJXMiCittc2dzdHIgIiVzIHVuZGVyIHNrcml2aW5nIHRpbCAlcyIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo2MyBwYXJ0cHJvYmUvcGFydHByb2JlLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeSBgJXMgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogJXMgW09QVElPTl1cbiIKKyIgIG9yOiAgJXMgREVWSUNFIE1JTk9SXG4iCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo3MAorbXNnaWQgIiIKKyJDbGVhciB1bnVzZWQgc3BhY2Ugb24gYSBGQVQgcGFydGl0aW9uIChhIEdOVSBQYXJ0ZWQgdGVzdGluZyB0b29sKS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjc0Cittc2dpZCAiICAgICAgLS1oZWxwICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdFxuIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6NzUKK21zZ2lkICIgICAgICAtLXZlcnNpb24gIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0XG4iCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo3NyBwYXJ0cHJvYmUvcGFydHByb2JlLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJSZXBvcnQgYnVncyB0byA8JXM+LlxuIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6Mjg1CisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBmZXcgYXJndW1lbnRzIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6MjkwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMiCittc2dzdHIgIkZvciBtYW5nZSBk5XJsZWdlIHNpZGVyLiIKKworIzogcGFydHByb2JlL3BhcnRwcm9iZS5jOjE0MQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgW09QVElPTl0gW0RFVklDRV0uLi5cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0cHJvYmUvcGFydHByb2JlLmM6MTQyCittc2dpZCAiIgorIkluZm9ybSB0aGUgT1Mgb2YgcGFydGl0aW9uIHRhYmxlIGNoYW5nZXMuXG4iCisiXG4iCisiICAtZCwgLS1uby11cGRhdGUgIGRvbid0IHVwZGF0ZSB0aGUga2VybmVsXG4iCisiICAtcywgLS1zdW1tYXJ5ICAgIHByaW50IGEgc3VtbWFyeSBvZiBjb250ZW50c1xuIgorIiAgLWgsIC0taGVscCAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdFxuIgorIiAgLXYsIC0tdmVyc2lvbiAgICBvdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdFxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRwcm9iZS9wYXJ0cHJvYmUuYzoxNTAKK21zZ2lkICIiCisiXG4iCisiV2l0aCBubyBERVZJQ0UsIHByb2JlIGFsbCBwYXJ0aXRpb25zLlxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBvcGVuICVzLiIKK21zZ3N0ciAiS3VubmUgaWtramUgb3BuYSAlcy4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjExNAorbXNnaWQgIlVuYWJsZSB0byBwcm9iZSBzdG9yZS4iCittc2dzdHIgIkt1bm5lIGlra2plIHVuZGVyc/hramEgbGFncmluZ3NtZWRpZXQuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzozNTIKKyMsIGZ1enp5Cittc2dpZCAiIgorIlRoZSBwYXJ0aXRpb24gdGFibGUgY2Fubm90IGJlIHJlLXJlYWQuICBUaGlzIG1lYW5zIHlvdSBuZWVkIHRvIHJlYm9vdCBiZWZvcmUgIgorIm1vdW50aW5nIGFueSBtb2RpZmllZCBwYXJ0aXRpb25zLiAgWW91IGFsc28gbmVlZCB0byByZWluc3RhbGwgeW91ciBib290ICIKKyJsb2FkZXIgYmVmb3JlIHlvdSByZWJvb3QgKHdoaWNoIG1heSByZXF1aXJlIG1vdW50aW5nIG1vZGlmaWVkIHBhcnRpdGlvbnMpLiAgIgorIkl0IGlzIGltcG9zc2libGUgZG8gYm90aCB0aGluZ3MhICBTbyB5b3UnbGwgbmVlZCB0byBib290IG9mZiBhIHJlc2N1ZSBkaXNrLCAiCisiYW5kIHJlaW5zdGFsbCB5b3VyIGJvb3QgbG9hZGVyIGZyb20gdGhlIHJlc2N1ZSBkaXNrLiAgUmVhZCBzZWN0aW9uIDQgb2YgdGhlICIKKyJQYXJ0ZWQgVXNlciBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiIgorIktqZXJuYSBrbGFydGUgaWtramUg5SBsZXNhIHBhcnRpc2pvbnN0YWJlbGxlbiBw5SBueXR0LCBz5SBkdSBt5SBzdGFydGEgb20gIgorIm1hc2tpbmEgZvhyIGR1IGthbiBtb250ZXJhIGVuZHJhIHBhcnRpc2pvbmFyLiAgRHUgbeUgb2dz5SBpbnN0YWxsZXJhIGJvb3QtIgorImxhc3RhcmVuIHDlIG55dHQgZvhyIG9tc3RhcnRlbiAoc29tIGthbnNramUga3JldmVyIGF0IGR1IG1vbnRlcmVyICIKKyJwYXJ0aXNqb25hbmUgZHUgaGFyIGVuZHJhKS4gIERldCBlciB1bW9nbGVnIOUgZ2plcmEgYuVlIGRlbGFyISAgU3RhcnQgZnLlICIKKyJlaW4gcmVkbmluZ3NkaXNrZXR0LCBvZyByZWluc3RhbGxlcmEgYm9vdC1sYXN0YXJlbiBmcuUgcmVkbmluZ3NtaWxq+GV0LiAgTGVzICIKKyJkZWwgNCBpIGJydWthcmhhbmRib2thIGZvciBtZWlyIGluZm9ybWFzam9uLiIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6MzY5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIHBhcnRpdGlvbiB0YWJsZSBvbiAlcyBjYW5ub3QgYmUgcmUtcmVhZCAoJXMpLiAgVGhpcyBtZWFucyB0aGUgSHVyZCBrbm93cyAiCisibm90aGluZyBhYm91dCBhbnkgbW9kaWZpY2F0aW9ucyB5b3UgbWFkZS4gIFlvdSBzaG91bGQgcmVib290IHlvdXIgY29tcHV0ZXIgIgorImJlZm9yZSBkb2luZyBhbnl0aGluZyB3aXRoICVzLiIKK21zZ3N0ciAiIgorIlBhcnRpc2pvbnN0YWJlbGxlbiBw5SAlcyAoJXMpLiAgRGV0IHR5ZGVyIGF0IEh1cmQgaWtramUgdmVpdCBub2tvIG9tICIKKyJlbmRyaW5nYXIgZHUgaGFyIGdqb3J0LiAgRGF0YW1hc2tpbmVuIG3lIHN0YXJ0YXN0IHDlIG55dHQgZvhyIGR1IGdqZXIgbm9rbyAiCisibWVkICVzLiIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6MzgwIHBhcnRlZC9wYXJ0ZWQuYzoyNDQzCittc2dpZCAiIgorIllvdSBzaG91bGQgcmVpbnN0YWxsIHlvdXIgYm9vdCBsb2FkZXIgYmVmb3JlIHJlYm9vdGluZy4gIFJlYWQgc2VjdGlvbiA0IG9mICIKKyJ0aGUgUGFydGVkIFVzZXIgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCittc2dzdHIgIiIKKyJEdSBt5SBpbnN0YWxsZXJhIGJvb3QtbGFzdGFyZW4gcOUgbnl0dCBm+HIgbmVzdGUgb21zdGFydC4gIExlcyBkZWwgNCBpICIKKyJicnVrYXJoYW5kYm9rYSBmb3IgbWVpciBpbmZvcm1hc2pvbi4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjc3MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB0cnlpbmcgdG8gc3luYyAlcyB0byBkaXNrIgorbXNnc3RyICJGZWtrIGZlaWxtZWxkaW5nYSCrJXO7IHZlZCBmb3Jz+GsgcOUg5SBzeW5rcm9uaXNlcmEgJXMgdGlsIGRpc2siCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6NDA4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzdGF0IGRldmljZSAlcyAtICVzLiIKK21zZ3N0ciAiS3VubmUgaWtramUgdW5kZXJz+GtqYSBlaW5pbmdhICVzIC0gJXMuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjUyMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGRldGVybWluZSBzZWN0b3Igc2l6ZSBmb3IgJXM6ICVzLlxuIgorIlVzaW5nIHRoZSBkZWZhdWx0IHNlY3RvciBzaXplICglbGxkKS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo1MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkRldmljZSAlcyBoYXMgYSBsb2dpY2FsIHNlY3RvciBzaXplIG9mICVsbGQuICBOb3QgYWxsIHBhcnRzIG9mIEdOVSBQYXJ0ZWQgIgorInN1cHBvcnQgdGhpcyBhdCB0aGUgbW9tZW50LCBhbmQgdGhlIHdvcmtpbmcgY29kZSBpcyBISUdITFkgRVhQRVJJTUVOVEFMLlxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6NTc5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZGV0ZXJtaW5lIHRoZSBzaXplIG9mICVzICglcykuIgorbXNnc3RyICJLbGFydGUgaWtramUg5SBmaW5uYSBzdG9ybGVpa2VuIHRpbCAlcyAoJXMpIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjY2OAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZ2V0IGlkZW50aXR5IG9mIGRldmljZSAlcyAtICVzIgorbXNnc3RyICJLdW5uZSBpa2tqZSBmaW5uYSBpZGVudGl0ZXRlbiB0aWwgZWluaW5nYSAlcyAtICVzIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjY3NworbXNnaWQgIkdlbmVyaWMgSURFIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6Njk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJEZXZpY2UgJXMgaGFzIG11bHRpcGxlICglZCkgbG9naWNhbCBzZWN0b3JzIHBlciBwaHlzaWNhbCBzZWN0b3IuXG4iCisiR05VIFBhcnRlZCBzdXBwb3J0cyB0aGlzIEVYUEVSSU1FTlRBTExZIGZvciBzb21lIHNwZWNpYWwgZGlzayBsYWJlbC9maWxlICIKKyJzeXN0ZW0gY29tYmluYXRpb25zLCBlLmcuIEdQVCBhbmQgZXh0Mi8zLlxuIgorIlBsZWFzZSBjb25zdWx0IHRoZSB3ZWIgc2l0ZSBmb3IgdXAtdG8tZGF0ZSBpbmZvcm1hdGlvbi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo4NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgaW5pdGlhbGlzaW5nIFNDU0kgZGV2aWNlICVzIC0gJXMiCittc2dzdHIgIkluaXRpYWxpc2VyaW5nIGF2IFNDU0ktZWluaW5nYSAlcyBnYXYgZmVpbCAtICVzIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjkyOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBkZXZpY2UgJXMgaGFzIHplcm8gbGVuZ3RoLCBhbmQgY2FuJ3QgcG9zc2libHkgc3RvcmUgYSBmaWxlIHN5c3RlbSBvciAiCisicGFydGl0aW9uIHRhYmxlLiAgUGVyaGFwcyB5b3Ugc2VsZWN0ZWQgdGhlIHdyb25nIGRldmljZT8iCittc2dzdHIgIiIKKyJFaW5pbmdhICVzIGhhciBzdG9ybGVpayBudWxsLCBvZyBrYW4gdW1vZ2xlZyBpbm5laGFsZGEgZWl0IGZpbHN5c3RlbSBlbGxlciAiCisiZWluIHBhcnRpc2pvbnN0YWJlbGwuICBLYW5za2plIGR1IHZhbHRlIGZlaWwgZWluaW5nPyIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMDMyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiVW5hYmxlIHRvIGRldGVybWluZSBnZW9tZXRyeSBvZiBmaWxlL2RldmljZSAlcy4gIFlvdSBzaG91bGQgbm90IHVzZSBQYXJ0ZWQgIgorInVubGVzcyB5b3UgUkVBTExZIGtub3cgd2hhdCB5b3UncmUgZG9pbmchIgorbXNnc3RyICIiCisiS2xhcnRlIGlra2plIOUgZmlubmEgZ2VvbWV0cmllbiB0aWwgZmlsYS9laW5pbmdhLiAgRHUgYvhyIGlra2plIGJydWthIFBhcnRlZCAiCisibWVkIG1pbmRyZSBkdSBWRVJLRUxFRyB2ZWl0IGt2YSBkdSBnamVyISIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTEwCittc2dpZCAiREFDOTYwIFJBSUQgY29udHJvbGxlciIKK21zZ3N0ciAiREFDOTYwIFJBSUQta29udHJvbGxlciIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTE1Cittc2dpZCAiUHJvbWlzZSBTWDggU0FUQSBEZXZpY2UiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTIwCittc2dpZCAiSUJNIFMzOTAgREFTRCBkcml2ZSIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExMjUKK21zZ2lkICJJQk0gaVNlcmllcyBWaXJ0dWFsIERBU0QiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTMwCittc2dpZCAiQ29tcGFxIFNtYXJ0IEFycmF5IgorbXNnc3RyICJDb21wYXEgU21hcnQgQXJyYXkiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTEzNQorbXNnaWQgIkFUQVJBSUQgQ29udHJvbGxlciIKK21zZ3N0ciAiQVRBUkFJRC1rb250cm9sbGVyIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExNDAKK21zZ2lkICJJMk8gQ29udHJvbGxlciIKK21zZ3N0ciAiSTJPLWtvbnRyb2xsZXIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTE0NQorbXNnaWQgIlVzZXItTW9kZSBMaW51eCBVQkQiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTU2Cittc2dpZCAiTGludXggZGV2aWNlLW1hcHBlciIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExNjIKK21zZ2lkICJVbmtub3duIgorbXNnc3RyICJVa2plbnQiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTE2OQorbXNnaWQgInBlZF9kZXZpY2VfbmV3KCkgIFVuc3VwcG9ydGVkIGRldmljZSB0eXBlIgorbXNnc3RyICJwZWRfZGV2aWNlX25ldygpICBFaW5pbmdzdHlwZW4gZXIgaWtramUgc3T4dHRhIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjIwODMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFcnJvciBpbmZvcm1pbmcgdGhlIGtlcm5lbCBhYm91dCBtb2RpZmljYXRpb25zIHRvIHBhcnRpdGlvbiAlcyAtLSAlcy4gIFRoaXMgIgorIm1lYW5zIExpbnV4IHdvbid0IGtub3cgYWJvdXQgYW55IGNoYW5nZXMgeW91IG1hZGUgdG8gJXMgdW50aWwgeW91IHJlYm9vdCAtLSAiCisic28geW91IHNob3VsZG4ndCBtb3VudCBpdCBvciB1c2UgaXQgaW4gYW55IHdheSBiZWZvcmUgcmVib290aW5nLiIKK21zZ3N0ciAiIgorIkVpbiBmZWlsIG9wcHN0b2QgdmVkIHZhcnNsaW5nIGF2IGtqZXJuYSBvbSBlbmRyaW5nYW5lIHDlIHBhcnRpc2pvbiAlcyAtICVzLiAgIgorIkRldHRlIHR5ZGVyIGF0IExpbnV4IGlra2plIHZlaXQgb20gZW5kcmluZ2FyIGR1IGhhciBnam9ydCBw5SAlcyBm+HIgZXR0ZXIgIgorIm9tc3RhcnQgYXYgbWFza2luZW4sIHPlIGR1IG3lIGlra2plIG1vbnRlcmEgaGFuIGVsbGVyIGJydWthIGhhbiBw5SBub2tvbiAiCisibeV0ZSBm+HIgb21zdGFydC4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MjI2MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorInBhcnRlZCB3YXMgdW5hYmxlIHRvIHJlLXJlYWQgdGhlIHBhcnRpdGlvbiB0YWJsZSBvbiAlcyAoJXMpLiAgVGhpcyBtZWFucyAiCisiTGludXggd29uJ3Qga25vdyBhbnl0aGluZyBhYm91dCB0aGUgbW9kaWZpY2F0aW9ucyB5b3UgbWFkZS4gIgorbXNnc3RyICIiCisiS2plcm5hIGtsYXJ0ZSBpa2tqZSDlIGxlc2EgcGFydGlzam9uc3RhYmVsbGVuIHDlICVzIHDlIG55dHQgKCVzKS4gIERldHRlICIKKyJ0eWRlciBhdCBMaW51eCBpa2tqZSB2ZWl0IG9tIGVuZHJpbmdhbmUgZHUgaGFyIGdqb3J0LiAgRHUgbeUgdGEgb21zdGFydCBw5SAiCisibWFza2luZW4gZGluIGb4ciBkdSBnamVyIG5va28gbWVkICVzLiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoyMzY4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGtlcm5lbCB3YXMgdW5hYmxlIHRvIHJlLXJlYWQgdGhlIHBhcnRpdGlvbiB0YWJsZSBvbiAlcyAoJXMpLiAgVGhpcyBtZWFucyAiCisiTGludXggd29uJ3Qga25vdyBhbnl0aGluZyBhYm91dCB0aGUgbW9kaWZpY2F0aW9ucyB5b3UgbWFkZSB1bnRpbCB5b3UgIgorInJlYm9vdC4gIFlvdSBzaG91bGQgcmVib290IHlvdXIgY29tcHV0ZXIgYmVmb3JlIGRvaW5nIGFueXRoaW5nIHdpdGggJXMuIgorbXNnc3RyICIiCisiS2plcm5hIGtsYXJ0ZSBpa2tqZSDlIGxlc2EgcGFydGlzam9uc3RhYmVsbGVuIHDlICVzIHDlIG55dHQgKCVzKS4gIERldHRlICIKKyJ0eWRlciBhdCBMaW51eCBpa2tqZSB2ZWl0IG9tIGVuZHJpbmdhbmUgZHUgaGFyIGdqb3J0LiAgRHUgbeUgdGEgb21zdGFydCBw5SAiCisibWFza2luZW4gZGluIGb4ciBkdSBnamVyIG5va28gbWVkICVzLiIKKworIzogbGlicGFydGVkL2NzL2dlb20uYzoxNjIKK21zZ2lkICJDYW4ndCBoYXZlIHRoZSBlbmQgYmVmb3JlIHRoZSBzdGFydCEiCittc2dzdHIgIkthbiBpa2tqZSBoYSBzbHV0dGVuIGb4ciBzdGFydGVuISIKKworIzogbGlicGFydGVkL2NzL2dlb20uYzoxNjkKK21zZ2lkICJDYW4ndCBoYXZlIGEgcGFydGl0aW9uIG91dHNpZGUgdGhlIGRpc2shIgorbXNnc3RyICJLYW4gaWtramUgaGEgZWluIHBhcnRpc2pvbiB1dGFuZm9yIGRpc2tlbiEiCisKKyM6IGxpYnBhcnRlZC9jcy9nZW9tLmM6MzY2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJBdHRlbXB0IHRvIHdyaXRlIHNlY3RvcnMgJWxkLSVsZCBvdXRzaWRlIG9mIHBhcnRpdGlvbiBvbiAlcy4iCittc2dzdHIgIlBy+HZkZSDlIHNrcml2YSBzZWt0b3JhbmUgJWxkLSVsZCB1dGFuZm9yIHBhcnRpc2pvbmVuIHDlICVzIgorCisjOiBsaWJwYXJ0ZWQvY3MvZ2VvbS5jOjQwNiBsaWJwYXJ0ZWQvZnMvbGludXhfc3dhcC9saW51eF9zd2FwLmM6NDc1Cittc2dpZCAiY2hlY2tpbmcgZm9yIGJhZCBibG9ja3MiCittc2dzdHIgInNlciBldHRlciBk5XJsZWdlIGJsb2trZXIiCisKKyM6IGxpYnBhcnRlZC9kZWJ1Zy5jOjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWNrdHJhY2UgaGFzICVkIGNhbGxzIG9uIHN0YWNrOlxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9kZWJ1Zy5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJBc3NlcnRpb24gKCVzKSBhdCAlczolZCBpbiBmdW5jdGlvbiAlcygpIGZhaWxlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIG9wZW4gJXMgLSB1bnJlY29nbmlzZWQgZGlzayBsYWJlbC4iCittc2dzdHIgIkt1bm5lIGlra2plIG9wbmEgJXMgLSB1a2plbmQgZGlza2xhYmVsLiIKKworIzogbGlicGFydGVkL2Rpc2suYzo0NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgbGlicGFydGVkIGRvZXNuJ3QgaGF2ZSB3cml0ZSBzdXBwb3J0IGZvciAlcy4gIFBlcmhhcHMgaXQgd2FzIGNvbXBpbGVkICIKKyJyZWFkLW9ubHkuIgorbXNnc3RyICIiCisiRGV0dGUgbGlicGFydGVkLWJpYmxpb3Rla2V0IGhhciBpa2tqZSBzdPh0dGUgZm9yIHNrcml2aW5nIHRpbCAlcy4gIEthbnNramUgIgorInZhcnQgZGV0IGtvbXBpbGVydCBmb3Iga3VuIGxlc2luZy4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6NTk4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJQYXJ0aXRpb24gJWQgaXMgJXMsIGJ1dCB0aGUgZmlsZSBzeXN0ZW0gaXMgJXMuIgorbXNnc3RyICJQYXJ0aXNqb25lbiAlZCBlciAlLjNmIE1pQiwgbWVuIGZpbHN5c3RlbWV0IGVyICUuM2YgTWlCLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxMDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGRpc2sgbGFiZWxzIGRvIG5vdCBzdXBwb3J0IGV4dGVuZGVkIHBhcnRpdGlvbnMuIgorbXNnc3RyICJFaW4gJXMtZGlza2xhYmVsIHN0+HR0YXIgaWtramUgdXR2aWRpbmdzcGFydGlzam9uYXIuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE2MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZGlzayBsYWJlbHMgZG9uJ3Qgc3VwcG9ydCBsb2dpY2FsIG9yIGV4dGVuZGVkIHBhcnRpdGlvbnMuIgorbXNnc3RyICIlcy1kaXNrbGFibGFyIHN0+HR0YXIgaWtramUgbG9naXNrZSBlbGxlciB1dHZpZGluZ3NwYXJ0aXNqb25hci4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTY0NworIywgZnV6enkKK21zZ2lkICJUb28gbWFueSBwcmltYXJ5IHBhcnRpdGlvbnMuIgorbXNnc3RyICJGb3IgbWFuZ2UgcHJpbeZycGFydGlzam9uYXIiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTY1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2FuJ3QgYWRkIGEgbG9naWNhbCBwYXJ0aXRpb24gdG8gJXMsIGJlY2F1c2UgdGhlcmUgaXMgbm8gZXh0ZW5kZWQgcGFydGl0aW9uLiIKK21zZ3N0ciAiIgorIkthbiBpa2tqZSBsZWdnamEgZWluIGxvZ2lzayBwYXJ0aXNqb24gdGlsICVzLCBzaWRhbiBkZXIgaWtramUgZXIgbm9rb24gIgorInV0dmlkaW5nc3BhcnRpc2pvbi4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTY4MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ2FuJ3QgaGF2ZSBtb3JlIHRoYW4gb25lIGV4dGVuZGVkIHBhcnRpdGlvbiBvbiAlcy4iCittc2dzdHIgIkthbiBpa2tqZSBoYSBtZWlyIGVubiDpaW4gdXR2aWRpbmdzcGFydGlzam9uIHDlICVzIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE2OTAKK21zZ2lkICJDYW4ndCBoYXZlIGxvZ2ljYWwgcGFydGl0aW9ucyBvdXRzaWRlIG9mIHRoZSBleHRlbmRlZCBwYXJ0aXRpb24uIgorbXNnc3RyICJLYW4gaWtramUgaGEgbG9naXNrZSBwYXJ0aXNqb25hciB1dGFuZm9yIHV0dmlkaW5nc3BhcnRpc2pvbmVuLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbid0IGhhdmUgYSBsb2dpY2FsIHBhcnRpdGlvbiBvdXRzaWRlIG9mIHRoZSBleHRlbmRlZCBwYXJ0aXRpb24gb24gJXMuIgorbXNnc3RyICIiCisiRWluIGxvZ2lzayBwYXJ0aXNqb24ga2FuIGlra2plIGxpZ2dqYSB1dGFuZm9yIHV0dmlkaW5nc3BhcnRpc2pvbmVuIHDlICVzLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNzI1IGxpYnBhcnRlZC9kaXNrLmM6MTc3OSBsaWJwYXJ0ZWQvZGlzay5jOjE5NDUKKyMsIGZ1enp5Cittc2dpZCAiQ2FuJ3QgaGF2ZSBvdmVybGFwcGluZyBwYXJ0aXRpb25zLiIKK21zZ3N0ciAiUGFydGlzam9uYXIga2FuIGlra2plIG92ZXJsYXBwYSBrdmFyYW5kcmUuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE3MzMKK21zZ2lkICJDYW4ndCBoYXZlIGEgcHJpbWFyeSBwYXJ0aXRpb24gaW5zaWRlIGFuIGV4dGVuZGVkIHBhcnRpdGlvbi4iCittc2dzdHIgIkVpbiBwcmlt5nJwYXJ0aXNqb24ga2FuIGlra2plIGxpZ2dqYSBpbm5lIGkgZWluIHV0dmlkaW5nc3BhcnRpc2pvbi4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE0MAorbXNnaWQgIm1ldGFkYXRhIgorbXNnc3RyICJtZXRhZGF0YSIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTQyCittc2dpZCAiZnJlZSIKK21zZ3N0ciAibGVkaWciCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE0NCBwYXJ0ZWQvdWkuYzoxMTY5IHBhcnRlZC91aS5jOjExOTcKK21zZ2lkICJleHRlbmRlZCIKK21zZ3N0ciAidXR2aWRpbmciCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE0NiBwYXJ0ZWQvdWkuYzoxMTczIHBhcnRlZC91aS5jOjEyMDEKK21zZ2lkICJsb2dpY2FsIgorbXNnc3RyICJsb2dpc2siCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE0OCBwYXJ0ZWQvdWkuYzoxMTY1IHBhcnRlZC91aS5jOjExOTMKK21zZ2lkICJwcmltYXJ5IgorbXNnc3RyICJwcmlt5nIiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE2NAorbXNnaWQgImJvb3QiCittc2dzdHIgImJvb3QiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE2NgorbXNnaWQgInJvb3QiCittc2dzdHIgInJvdCIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTY4Cittc2dpZCAic3dhcCIKK21zZ3N0ciAic3dhcCIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTcwCittc2dpZCAiaGlkZGVuIgorbXNnc3RyICJza2p1bHQiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE3MgorbXNnaWQgInJhaWQiCittc2dzdHIgInJhaWQiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE3NAorbXNnaWQgImx2bSIKK21zZ3N0ciAibHZtIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNzYKK21zZ2lkICJsYmEiCittc2dzdHIgImxiYSIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTc4Cittc2dpZCAiaHAtc2VydmljZSIKK21zZ3N0ciAiaHAtc2VydmljZSIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTgwCittc2dpZCAicGFsbyIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxODIKK21zZ2lkICJwcmVwIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE4NAorbXNnaWQgIm1zZnRyZXMiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTkwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIHBhcnRpdGlvbiBmbGFnLCAlZC4iCittc2dzdHIgIlVramVudCBwYXJ0aXNqb25zZmxhZ2csICVkLiIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjc4Cittc2dpZCAiSW5mb3JtYXRpb24iCittc2dzdHIgIkluZm9ybWFzam9uIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6NzkKK21zZ2lkICJXYXJuaW5nIgorbXNnc3RyICLFdHZhcmluZyIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjgwCittc2dpZCAiRXJyb3IiCittc2dzdHIgIkZlaWwiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4MQorbXNnaWQgIkZhdGFsIgorbXNnc3RyICJLcml0aXNrIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODIKK21zZ2lkICJCdWciCittc2dzdHIgIlByb2dyYW1mZWlsIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODMKK21zZ2lkICJObyBJbXBsZW1lbnRhdGlvbiIKK21zZ3N0ciAiSWtramUgbGFnYSIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjg3Cittc2dpZCAiRml4IgorbXNnc3RyICJSZXR0IG9wcCIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjg4Cittc2dpZCAiWWVzIgorbXNnc3RyICJKYSIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjg5Cittc2dpZCAiTm8iCittc2dzdHIgIk5laSIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjkwCittc2dpZCAiT0siCittc2dzdHIgIk9LIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6OTEKK21zZ2lkICJSZXRyeSIKK21zZ3N0ciAiUHL4diBpZ2plbiIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjkyCittc2dpZCAiSWdub3JlIgorbXNnc3RyICJPdmVyc2rlIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6OTMKK21zZ2lkICJDYW5jZWwiCittc2dzdHIgIkF2YnJ5dCIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjEzMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIkEgYnVnIGhhcyBiZWVuIGRldGVjdGVkIGluIEdOVSBQYXJ0ZWQuICBSZWZlciB0byB0aGUgd2ViIHNpdGUgb2YgcGFydGVkICIKKyJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvcGFydGVkL3BhcnRlZC5odG1sIGZvciBtb3JlIGluZm9ybWF0aW9ucyBvZiB3aGF0ICIKKyJjb3VsZCBiZSB1c2VmdWwgZm9yIGJ1ZyBzdWJtaXR0aW5nISAgUGxlYXNlIGVtYWlsIGEgYnVnIHJlcG9ydCB0byBidWctIgorInBhcnRlZEBnbnUub3JnIGNvbnRhaW5pbmcgYXQgbGVhc3QgdGhlIHZlcnNpb24gKCVzKSBhbmQgdGhlIGZvbGxvd2luZyAiCisibWVzc2FnZTogICIKK21zZ3N0ciAiIgorIkVpbiBwcm9ncmFtZmVpbCBvcHBzdG9kIGkgR05VIFBhcnRlZC4gIFZlciB2ZW5sZWcg5SBzZW5kYSBlaSBmZWlsbWVsZGluZyB0aWwgIgorImJ1Zy1wYXJ0ZWRAZ251Lm9yZyBkZXIgZHUgb3BwZ2pldiB2ZXJzam9uc251bW1lcmV0ICglcykgb2cgZnlsZ2phbmRlIG1lbGRpbmc6IgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjM4NAorbXNnaWQgIkNvdWxkIG5vdCBkZXRlY3QgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICJLYW4gaWtramUga2plbm5hIGlnamVuIG5va28gZmlsc3lzdGVtLiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzozOTUKKyMsIGZ1enp5Cittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIGlzIGJpZ2dlciB0aGFuIGl0cyB2b2x1bWUhIgorbXNnc3RyICJGaWxzeXN0ZW1ldCBlciBzdPhycmUgZW5uIHZvbHVtZXQgZGV0IGxpZ2cgcOUhIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjQwMworIywgYy1mb3JtYXQKK21zZ2lkICJTdXBwb3J0IGZvciBvcGVuaW5nICVzIGZpbGUgc3lzdGVtcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiU3T4dHRlIGZvciDlIG9wbmEgJXMtZmlsc3lzdGVtIGVyIGlra2plIGxhZ3QgaW5uIGVubm8uIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjQ0NQorIywgYy1mb3JtYXQKK21zZ2lkICJTdXBwb3J0IGZvciBjcmVhdGluZyAlcyBmaWxlIHN5c3RlbXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIlN0+HR0ZSBmb3Ig5SBsYWdhICVzLWZpbHN5c3RlbSBlciBpa2tqZSBsYWd0IGlubiBlbm5vLiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo1MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VwcG9ydCBmb3IgY2hlY2tpbmcgJXMgZmlsZSBzeXN0ZW1zIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICJTdPh0dGUgZm9yIOUgc2pla2thICVzLWZpbHN5c3RlbSBmb3IgZmVpbCBlciBpa2tqZSBsYWd0IGlubiBlbm5vLiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo1NzEKK21zZ2lkICJyYXcgYmxvY2sgY29weWluZyIKK21zZ3N0ciAicuUgYmxva2tvcGllcmluZyIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo1ODIKK21zZ2lkICJncm93aW5nIGZpbGUgc3lzdGVtIgorbXNnc3RyICJhdWthciBzdG9ybGVpayBw5SBmaWxzeXN0ZW1ldCIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo2MjIKK21zZ2lkICJDYW4ndCBjb3B5IG9udG8gYW4gb3ZlcmxhcHBpbmcgcGFydGl0aW9uLiIKK21zZ3N0ciAiS2FuIGlra2plIGtvcGllcmEgaW5uIGkgZWluIG92ZXJsYXBwYW5kZSBwYXJ0aXNqb24uIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjY0NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIkRpcmVjdCBzdXBwb3J0IGZvciBjb3B5aW5nIGZpbGUgc3lzdGVtcyBpcyBub3QgeWV0IGltcGxlbWVudGVkIGZvciAlcy4gICIKKyJIb3dldmVyLCBzdXBwb3J0IGZvciByZXNpemluZyBpcyBpbXBsZW1lbnRlZC4gIFRoZXJlZm9yZSwgdGhlIGZpbGUgc3lzdGVtICIKKyJjYW4gYmUgY29waWVkIGlmIHRoZSBuZXcgcGFydGl0aW9uIGlzIGF0IGxlYXN0IGFzIGJpZyBhcyB0aGUgb2xkIG9uZS4gIFNvLCAiCisiZWl0aGVyIHNocmluayB0aGUgcGFydGl0aW9uIHlvdSBhcmUgdHJ5aW5nIHRvIGNvcHksIG9yIGNvcHkgdG8gYSBiaWdnZXIgIgorInBhcnRpdGlvbi4iCittc2dzdHIgIiIKKyLFIGtvcGllcmEgZmlsc3lzdGVtZXQgZXIgaWtramUgZGlyZWt0ZSBzdPh0dGEgZm9yICVzLiAgTWVuLCBzdPh0dGUgZm9yIOUgIgorImVuZHJhIHN0b3JsZWlrIGVyIG1lZCwgc+UgZmlsc3lzdGVtZXQga2FuIGtvcGllcmFzdCB2aXNzIGRlbiBueWUgcGFydGlzam9uZW4gIgorImVyIG1pbnN0IGxpa2Ugc3RvciBzb20gZGVuIGdhbWxlLiAgRHUgbeUgYWx0c+UgYW50ZW4ga3J5bXBhIHBhcnRpc2pvbmVuIGR1ICIKKyJwcvh2ZXIg5SBrb3BpZXJhLCBlbGxlciBrb3BpZXJhIHRpbCBlaW4gc3T4cnJlIHBhcnRpc2pvbi4iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnQgZm9yIGNvcHlpbmcgJXMgZmlsZSBzeXN0ZW1zIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICJTdPh0dGUgZm9yIOUga29waWVyYSAlcy1maWxzeXN0ZW0gZXIgaWtramUgbGFndCBpbm4gZW5uby4iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6Njk2CisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnQgZm9yIHJlc2l6aW5nICVzIGZpbGUgc3lzdGVtcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiU3T4dHRlIGZvciDlIGVuZHJhIHN0b3JsZWlrIHDlICVzLWZpbHN5c3RlbSBlciBpa2tqZSBsYWd0IGlubiBlbm5vLiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6MzE1Cittc2dpZCAiY3JlYXRpbmciCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDAyCisjLCBmdXp6eQorbXNnaWQgIlRoZSBmaWxlIHN5c3RlbSBpcyBpbiBhbiBpbnZhbGlkIHN0YXRlLiAgUGVyaGFwcyBpdCBpcyBtb3VudGVkPyIKK21zZ3N0ciAiRmlsc3lzdGVtZXQgZXIgc3T4cnJlIGVubiB2b2x1bWV0IGRldCBsaWdnIHDlISIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDEwCittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIGlzIGluIG9sZCAodW5yZXNpemVhYmxlKSBmb3JtYXQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQxNgorbXNnaWQgIkludmFsaWQgZnJlZSBibG9ja3MgY291bnQuICBSdW4gcmVpc2VyZnNjayAtLWNoZWNrIGZpcnN0LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0MzEKKyMsIGZ1enp5Cittc2dpZCAiY2hlY2tpbmciCittc2dzdHIgImNoZWNrIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0MzcKK21zZ2lkICJSZWlzZXJmcyB0cmVlIHNlZW1zIHRvIGJlIGNvcnJ1cHRlZC4gIFJ1biByZWlzZXJmc2NrIC0tY2hlY2sgZmlyc3QuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQ0OQorIywgZnV6enkKK21zZ2lkICIiCisiVGhlIHJlaXNlcmZzIGZpbGUgc3lzdGVtIHBhc3NlZCBhIGJhc2ljIGNoZWNrLiAgRm9yIGEgbW9yZSBjb21wcmVoZW5zaXZlICIKKyJjaGVjaywgcnVuIHJlaXNlcmZzY2sgLS1jaGVjay4iCittc2dzdHIgIiIKKyJFeHQyLWZpbHN5c3RlbWV0IGdqZWtrIGdqZW5ub20gZWluIGVua2VsIHNqZWtrLiAgRm9yIGVpbiBtZWlyIGdydW5kaWcgc2pla2ssICIKKyJicnVrIHByb2dyYW1tZXQgZTJmc2NrLiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDc0CisjLCBmdXp6eQorbXNnaWQgIlNvcnJ5LCBjYW4ndCBtb3ZlIHRoZSBzdGFydCBvZiByZWlzZXJmcyBwYXJ0aXRpb25zIHlldC4iCittc2dzdHIgIkJla2xhZ2FyLCBrYW4gaWtramUgZmx5dHRhIHN0YXJ0ZW4gcOUgZWluIGV4dDItcGFydGlzam9uIGVubm8hIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0OTAKK21zZ2lkICJDb3VsZG4ndCByZW9wZW4gZGV2aWNlIGFic3RyYWN0aW9uIGxheWVyIGZvciByZWFkL3dyaXRlLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo1MDggbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo1NTIKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MjUwIGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NjI5Cittc2dpZCAic2hyaW5raW5nIgorbXNnc3RyICJrcnltcGFyIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo1MjAKKyMsIGZ1enp5Cittc2dpZCAiZXhwYW5kaW5nIgorbXNnc3RyICLFdHZhcmluZyIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NTkyCittc2dpZCAiQ291bGRuJ3QgY3JlYXRlIHJlaXNlcmZzIGRldmljZSBhYnN0cmFjdGlvbiBoYW5kbGVyLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo2MDYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkRldmljZSBpcyB0b28gc21hbGwgZm9yICVsdSBibG9ja3MuIgorbXNnc3RyICJGaWxzeXN0ZW1ldCBlciBmb3IgbGl0ZSBmb3IgZXh0Mi4iCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjYxNQorbXNnaWQgImNvcHlpbmciCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IHJlc29sdmUgc3ltYm9sICVzLiAgRXJyb3I6ICVzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo3MDQKK21zZ2lkICJHTlUgUGFydGVkIGZvdW5kIGFuIGludmFsaWQgbGlicmVpc2VyZnMgbGlicmFyeS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJHTlUgUGFydGVkIGhhcyBkZXRlY3RlZCBsaWJyZWlzZXJmcyBpbnRlcmZhY2UgdmVyc2lvbiBtaXNtYXRjaC4gIEZvdW5kICVkLSUiCisiZCwgcmVxdWlyZWQgJWQuIFJlaXNlckZTIHN1cHBvcnQgd2lsbCBiZSBkaXNhYmxlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9haXguYzoxMzcKKyMsIGZ1enp5Cittc2dpZCAiU3VwcG9ydCBmb3IgcmVhZGluZyBBSVggZGlzayBsYWJlbHMgaXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIlN0+HR0ZSBmb3Ig5SBsYWdhICVzLWZpbHN5c3RlbSBlciBpa2tqZSBsYWd0IGlubiBlbm5vLiIKKworIzogbGlicGFydGVkL2xhYmVscy9haXguYzoxNDgKKyMsIGZ1enp5Cittc2dpZCAiU3VwcG9ydCBmb3Igd3JpdGluZyBBSVggZGlzayBsYWJlbHMgaXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIlN0+HR0ZSBmb3Ig5SBsYWdhICVzLWZpbHN5c3RlbSBlciBpa2tqZSBsYWd0IGlubiBlbm5vLiIKKworIzogbGlicGFydGVkL2xhYmVscy9haXguYzoxNjEKKyMsIGZ1enp5Cittc2dpZCAiIgorIlN1cHBvcnQgZm9yIGFkZGluZyBwYXJ0aXRpb25zIHRvIEFJWCBkaXNrIGxhYmVscyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiU3T4dHRlIGZvciDlIGxhZ2EgJXMtZmlsc3lzdGVtIGVyIGlra2plIGxhZ3QgaW5uIGVubm8uIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2FpeC5jOjE3MQorIywgZnV6enkKK21zZ2lkICIiCisiU3VwcG9ydCBmb3IgZHVwbGljYXRpbmcgcGFydGl0aW9ucyBpbiBBSVggZGlzayBsYWJlbHMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIlN0+HR0ZSBmb3Ig5SBsYWdhICVzLWZpbHN5c3RlbSBlciBpa2tqZSBsYWd0IGlubiBlbm5vLiIKKworIzogbGlicGFydGVkL2xhYmVscy9haXguYzoxODkKKyMsIGZ1enp5Cittc2dpZCAiIgorIlN1cHBvcnQgZm9yIHNldHRpbmcgc3lzdGVtIHR5cGUgb2YgcGFydGl0aW9ucyBpbiBBSVggZGlzayBsYWJlbHMgaXMgbm90ICIKKyJpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICJTdPh0dGUgZm9yIOUgbGFnYSAlcy1maWxzeXN0ZW0gZXIgaWtramUgbGFndCBpbm4gZW5uby4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYWl4LmM6MTk5CisjLCBmdXp6eQorbXNnaWQgIlN1cHBvcnQgZm9yIHNldHRpbmcgZmxhZ3MgaW4gQUlYIGRpc2sgbGFiZWxzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICJTdPh0dGUgZm9yIOUgbGFnYSAlcy1maWxzeXN0ZW0gZXIgaWtramUgbGFndCBpbm4gZW5uby4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYnNkLmM6NTAxIGxpYnBhcnRlZC9sYWJlbHMvZGFzZC5jOjc1NQorIzogbGlicGFydGVkL2xhYmVscy9kb3MuYzoxOTc0IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6NzcwCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjE0NDggbGlicGFydGVkL2xhYmVscy9sb29wLmM6MjQ4CisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjE0MDggbGlicGFydGVkL2xhYmVscy9wYzk4LmM6NzU5CisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjEwNDEgbGlicGFydGVkL2xhYmVscy9zdW4uYzo3MDUKK21zZ2lkICJVbmFibGUgdG8gc2F0aXNmeSBhbGwgY29uc3RyYWludHMgb24gdGhlIHBhcnRpdGlvbi4iCittc2dzdHIgIkt1bm5lIGlra2plIG9wcGZ5bGxhIGFsbGUgZGVpIHRla25pc2tlIGtyYXZhIHRpbCBwYXJ0aXNqb25lbi4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYnNkLmM6NTI2CisjLCBmdXp6eQorbXNnaWQgIlVuYWJsZSB0byBhbGxvY2F0ZSBhIGJzZCBkaXNrbGFiZWwgc2xvdC4iCittc2dzdHIgIkt1bm5lIGlra2plIHRpbG9yZG5hIHBsYXNzIGkgQlNELWRpc2tsYWJlbC4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZGFzZC5jOjE2NgorIywgZnV6enkKK21zZ2lkICJVbmFibGUgdG8gZGV0ZXJtaW5lIHRoZSBibG9jayBzaXplIG9mIHRoaXMgZGFzZCIKK21zZ3N0ciAiS2xhcnRlIGlra2plIOUgZmlubmEgc3RvcmxlaWtlbiB0aWwgJXMgKCVzKSIKKworIzogbGlicGFydGVkL2xhYmVscy9kYXNkLmM6NzgxCisjLCBmdXp6eQorbXNnaWQgIlVuYWJsZSB0byBhbGxvY2F0ZSBhIGRhc2QgZGlza2xhYmVsIHNsb3QiCittc2dzdHIgIkt1bm5lIGlra2plIHRpbG9yZG5hIHBsYXNzIGkgQlNELWRpc2tsYWJlbC4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZG9zLmM6ODI3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHBhcnRpdGlvbiB0YWJsZSBvbiAlcyAtLSB3cm9uZyBzaWduYXR1cmUgJXguIgorbXNnc3RyICJVZ3lsZGlnIHBhcnRpc2pvbnN0YWJlbGwgcOUgJXMgLSBmZWlsIHNpZ25hdHVyICV4IgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rvcy5jOjg1NQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHBhcnRpdGlvbiB0YWJsZSAtIHJlY3Vyc2l2ZSBwYXJ0aXRpb24gb24gJXMuIgorbXNnc3RyICJVZ3lsZGlnIHBhcnRpc2pvbnN0YWJlbGwgLSByZWt1cnNpdiBwYXJ0aXNqb24gcOUgJXMuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rvcy5jOjEzMTgKK21zZ2lkICJFeHRlbmRlZCBwYXJ0aXRpb25zIGNhbm5vdCBiZSBoaWRkZW4gb24gbXNkb3MgZGlzayBsYWJlbHMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZG9zLmM6MTk1OAorbXNnaWQgIlBhcnRlZCBjYW4ndCByZXNpemUgcGFydGl0aW9ucyBtYW5hZ2VkIGJ5IFdpbmRvd3MgRHluYW1pYyBEaXNrLiIKK21zZ3N0ciAiIgorCisjIGNoZWNraXQKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6MTkwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyBoYXMgbm8gZXh0ZW5kZWQgcGFydGl0aW9uICh2b2x1bWUgaGVhZGVyIHBhcnRpdGlvbikuIgorbXNnc3RyICIiCisiJXMgaGFyIGluZ2VuIHV0dmlkaW5nc3BhcnRpc2pvbiAodm9sdW1lIGhlYWRlci1wYXJ0aXNqb24pLiAgT20gZHUgb3ZlcnNlciAiCisiZGVubmUgbWVsZGluZ2EsIHZpbCBldmVudHVlbGxlIGJvb3R2b2x1bSB2ZXJ0YSBzbGV0dGEuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjMxMworbXNnaWQgIkNoZWNrc3VtIGlzIHdyb25nLCBpbmRpY2F0aW5nIHRoZSBwYXJ0aXRpb24gdGFibGUgaXMgY29ycnVwdC4iCittc2dzdHIgIlNqZWtrc3VtbWVuIGVyIGZlaWwsIG9nIGRldCB0eWRlciBw5SBhdCBwYXJ0aXNqb25zdGFiZWxsZW4gZXIga29ycnVwdC4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6NjE2Cittc2dpZCAiT25seSBwcmltYXJ5IHBhcnRpdGlvbnMgY2FuIGJlIHJvb3QgcGFydGl0aW9ucy4iCittc2dzdHIgIkJlcnJlIHByaW3mcnBhcnRpc2pvbmFyIGthbiB2ZXJhIHJvdHBhcnRpc2pvbmFyLiIKKworIzogbGlicGFydGVkL2xhYmVscy9kdmguYzo2MzAKK21zZ2lkICJPbmx5IHByaW1hcnkgcGFydGl0aW9ucyBjYW4gYmUgc3dhcCBwYXJ0aXRpb25zLiIKK21zZ3N0ciAiQmVycmUgcHJpbeZycGFydGlzam9uYXIga2FuIHZlcmEgc3dhcC1wYXJ0aXNqb25hci4iCisKKyMgY2hlY2tpdAorIzogbGlicGFydGVkL2xhYmVscy9kdmguYzo2NDQKK21zZ2lkICJPbmx5IGxvZ2ljYWwgcGFydGl0aW9ucyBjYW4gYmUgYSBib290IGZpbGUuIgorbXNnc3RyICJCZXJyZSBsb2dpc2tlIHBhcnRpc2pvbmFyIGthbiB2ZXJhIGVpIGJvb3RmaWwuIgorCisjIGNoZWNraXQKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6NzIxCittc2dpZCAiT25seSBsb2dpY2FsIHBhcnRpdGlvbnMgKGJvb3QgZmlsZXMpIGhhdmUgYSBuYW1lLiIKK21zZ3N0ciAiQmVycmUgbG9naXNrZSBwYXJ0aXNqb25hciAoYm9vdGZpbGVyKSBrYW4gaGEgbmFtbi4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6ODEyCittc2dpZCAiVG9vIG1hbnkgcHJpbWFyeSBwYXJ0aXRpb25zIgorbXNnc3RyICJGb3IgbWFuZ2UgcHJpbeZycGFydGlzam9uYXIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIG9wZW4gZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHNlZWsgZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHJlYWQgZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMTMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyB3cml0ZSBlcnJvclxuIgorIiVzXG4iCittc2dzdHIgIiVzIHVuZGVyIHNrcml2aW5nIHRpbCAlcyIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjExNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgSU9DVEwgZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIEFQSSB2ZXJzaW9uIG1pc21hdGNoXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBVbnN1cHBvcnRlZCBkaXNrIHR5cGVcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFVuc3VwcG9ydGVkIGRpc2sgZm9ybWF0XG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTMwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgRGlzayBpbiB1c2VcbiIKKyIlc1xuIgorbXNnc3RyICIlcyAgJXMgICVzIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBDb25maWcgZmlsZSBzeW50YXggZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFZvbHVtZSBsYWJlbCBpcyBjb3JydXB0ZWQuXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBhIGRhdGEgc2V0IG5hbWUgaXMgY29ycnVwdGVkLlxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjE0NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgc3BhY2UgYWxsb2NhdGlvblxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgZGV2aWNlIHZlcmlmaWNhdGlvbiBmYWlsZWRcbiIKKyJUaGUgc3BlY2lmaWVkIGRldmljZSBpcyBub3QgYSB2YWxpZCBEQVNEIGRldmljZVxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIEZhdGFsIGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjQ1NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIGNvbnRhaW5zIEdQVCBzaWduYXR1cmVzLCBpbmRpY2F0aW5nIHRoYXQgaXQgaGFzIGEgR1BUIHRhYmxlLiAgSG93ZXZlciwgaXQgIgorImRvZXMgbm90IGhhdmUgYSB2YWxpZCBmYWtlIG1zZG9zIHBhcnRpdGlvbiB0YWJsZSwgYXMgaXQgc2hvdWxkLiAgUGVyaGFwcyBpdCAiCisid2FzIGNvcnJ1cHRlZCAtLSBwb3NzaWJseSBieSBhIHByb2dyYW0gdGhhdCBkb2Vzbid0IHVuZGVyc3RhbmQgR1BUIHBhcnRpdGlvbiAiCisidGFibGVzLiAgT3IgcGVyaGFwcyB5b3UgZGVsZXRlZCB0aGUgR1BUIHRhYmxlLCBhbmQgYXJlIG5vdyB1c2luZyBhbiBtc2RvcyAiCisicGFydGl0aW9uIHRhYmxlLiAgSXMgdGhpcyBhIEdQVCBwYXJ0aXRpb24gdGFibGU/IgorbXNnc3RyICIiCisiJXMgaW5uZWhlbGQgR1BULXNpZ25hdHVyYXIsIHNvbSB0eWRlciBw5SBhdCBoYW4gaGFyIGVpbiBHUFQtdGFiZWxsLiAgTWVuIGhhbiAiCisiaGFyIGlra2plIGVpbiBneWxkaWcgZmFsc2sgTVNET1MtcGFydGlzam9uc3RhYmVsbCBzbGlrIGhhbiBza3VsbGUuICBLYW5za2plICIKKyJ2YXJ0IGhhbiD4eWRlbGFndCwgdC5kLiBhdiBlaXQgcHJvZ3JhbSBzb20gaWtramUgZm9yc3TlciBHUFQtIgorInBhcnRpc2pvbnN0YWJlbGxhci4gIEVsbGVyIGthbnNramUgZHUgaGFyIHNsZXR0YSBHUFQtdGFiZWxsZW4gb2cgYnJ1a2FyIG5vICIKKyJlaW4gTVNET1MtcGFydGlzam9uc3RhYmVsbC4gIEVyIGRldHRlIGVpbiBHUFQtcGFydGlzam9uc3RhYmVsbD8iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6NjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9ybWF0IG9mIHRoZSBHUFQgcGFydGl0aW9uIHRhYmxlIGlzIHZlcnNpb24gJXgsIHdoaWNoIGlzIG5ld2VyIHRoYW4gIgorIndoYXQgUGFydGVkIGNhbiByZWNvZ25pc2UuICBQbGVhc2UgdGVsbCB1cyEgIGJ1Zy1wYXJ0ZWRAZ251Lm9yZyIKK21zZ3N0ciAiIgorIkZvcm1hdGV0IHRpbCBHUFQtcGFydGlzam9uc3RhYmVsbGVuIGVyIHZlcnNqb24gJXgsIHNvbSBlciBueWFyZSBlbm4gZGV0ICIKKyJQYXJ0ZWQga2FuIGtqZW5uYSBhdHQuICBWZXIgdmVubGVnIOUgc2VpYSBpIGZy5SBtZWQgZWluIGVwb3N0IHRpbCA8YnVnLSIKKyJwYXJ0ZWRAZ251Lm9yZz4gKHNrcml2IGhlbHN0IHDlIGVuZ2Vsc2spIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm90IGFsbCBvZiB0aGUgc3BhY2UgYXZhaWxhYmxlIHRvICVzIGFwcGVhcnMgdG8gYmUgdXNlZCwgeW91IGNhbiBmaXggdGhlIEdQVCAiCisidG8gdXNlIGFsbCBvZiB0aGUgc3BhY2UgKGFuIGV4dHJhICVsbHUgYmxvY2tzKSBvciBjb250aW51ZSB3aXRoIHRoZSBjdXJyZW50ICIKKyJzZXR0aW5nPyAiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzo4MjcKK21zZ2lkICIiCisiVGhlIGJhY2t1cCBHUFQgdGFibGUgaXMgbm90IGF0IHRoZSBlbmQgb2YgdGhlIGRpc2ssIGFzIGl0IHNob3VsZCBiZS4gIFRoaXMgIgorIm1pZ2h0IG1lYW4gdGhhdCBhbm90aGVyIG9wZXJhdGluZyBzeXN0ZW0gYmVsaWV2ZXMgdGhlIGRpc2sgaXMgc21hbGxlci4gIEZpeCwgIgorImJ5IG1vdmluZyB0aGUgYmFja3VwIHRvIHRoZSBlbmQgKGFuZCByZW1vdmluZyB0aGUgb2xkIGJhY2t1cCk/IgorbXNnc3RyICIiCisiU2lrcmluZ3Nrb3BpZW4gYXYgR1BULXRhYmVsbGVuIGVyIGlra2plIHNpc3QgcOUgZGlza2VuIHNsaWsgaGFuIHNrYWwgdmVyYS4gICIKKyJEZXR0ZSBrYW4gdHlkYSBhdCBlaXQgYW5uYSBvcGVyYXRpdnN5c3RlbSB0cnVyIGF0IGRpc2tlbiBlciBtaW5kcmUuICBTa2FsICIKKyJkZXR0ZSByZXR0YXN0IHZlZCDlIGZseXR0YSBrb3BpZW4gdGlsIHNsdXR0ZW4gYXYgZGlza2VuIChvZyBzbGV0dGEgZGVuIGdhbWxlICIKKyJrb3BpZW4pPyIKKworIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzo4NjIKKyMsIGZ1enp5Cittc2dpZCAiIgorIlRoZSBwcmltYXJ5IEdQVCB0YWJsZSBpcyBjb3JydXB0LCBidXQgdGhlIGJhY2t1cCBhcHBlYXJzIE9LLCBzbyB0aGF0IHdpbGwgYmUgIgorInVzZWQuIgorbXNnc3RyICIiCisiR1BULXRhYmVsbGVuIGVyIGtvcnJ1cHQsIG1lbiBzaWtyaW5nc2tvcGllbiBzZXIgZnJpc2sgdXQsIHPlIGtvcGllbiB2ZXJ0ICIKKyJicnVrdC4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6ODcwCisjLCBmdXp6eQorbXNnaWQgIiIKKyJCb3RoIHRoZSBwcmltYXJ5IGFuZCBiYWNrdXAgR1BUIHRhYmxlcyBhcmUgY29ycnVwdC4gIFRyeSBtYWtpbmcgYSBmcmVzaCAiCisidGFibGUsIGFuZCB1c2luZyBQYXJ0ZWQncyByZXNjdWUgZmVhdHVyZSB0byByZWNvdmVyIHBhcnRpdGlvbnMuIgorbXNnc3RyICIiCisiQuVkZSBvcmlnaW5hbGVuIG9nIGtvcGllbiBhdiBHUFQtdGFiZWxsZW4gZXIga29ycnVwdC4gIFBy+HYg5SBsYWdhIGVpbiBueSAiCisidG9tIHRhYmVsbCwgb2cgYnJ1ayBQYXJ0ZWRzIHJlZG5pbmdzbW9kdXMgdGlsIOUgZmlubmEgcGFydGlzam9uYW5lLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoxODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBzaWduYXR1cmUgJXggZm9yIE1hYyBkaXNrIGxhYmVscy4iCittc2dzdHIgIlVneWxkaWcgc2lnbmF0dXIgJXggZm9yIGVpbiBNYWMtZGlza2xhYmVsLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoyMjYKK21zZ2lkICJQYXJ0aXRpb24gbWFwIGhhcyBubyBwYXJ0aXRpb24gbWFwIGVudHJ5ISIKK21zZ3N0ciAiUGFydGlzam9uc2thcnRldCBpbm5laGVsZCBpbmdlbiBvcHBm+HJpbmdhciEiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIHRvbyBzbWFsbCBmb3IgYSBNYWMgZGlzayBsYWJlbCEiCittc2dzdHIgIiVzIGVyIGZvciBsaXRlbiBmb3IgZWluIE1hYy1kaXNrbGFiZWwhIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjUzMgorIywgYy1mb3JtYXQKK21zZ2lkICJQYXJ0aXRpb24gJWQgaGFzIGFuIGludmFsaWQgc2lnbmF0dXJlICV4LiIKK21zZ3N0ciAiUGFydGlzam9uICVkIGhhciBlaW4gdWd5bGRpZyBzaWduYXR1ciAleC4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIlBhcnRpdGlvbiAlZCBoYXMgYW4gaW52YWxpZCBsZW5ndGggb2YgMCBieXRlcyEiCittc2dzdHIgIlBhcnRpc2pvbiAlZCBoYXIgZWkgdWd5bGRpZyBsZW5nZGUgcOUgMCBva3RldHRhciEiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NTgwCisjLCBmdXp6eQorbXNnaWQgIlRoZSBkYXRhIHJlZ2lvbiBkb2Vzbid0IHN0YXJ0IGF0IHRoZSBzdGFydCBvZiB0aGUgcGFydGl0aW9uLiIKK21zZ3N0ciAiRGF0YXJlZ2lvbmVuIHN0YXJ0YXIgaWtramUgcOUgc3RhcnRlbiBhdiBwYXJ0aXNqb25lbiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo1OTcKKyMsIGZ1enp5Cittc2dpZCAiVGhlIGJvb3QgcmVnaW9uIGRvZXNuJ3Qgc3RhcnQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBwYXJ0aXRpb24uIgorbXNnc3RyICJCb290cmVnaW9uZW4gc3RhcnRhciBpa2tqZSBw5SBzdGFydGVuIGF2IHBhcnRpc2pvbmVuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjYxMQorbXNnaWQgIlRoZSBwYXJ0aXRpb24ncyBib290IHJlZ2lvbiBkb2Vzbid0IG9jY3VweSB0aGUgZW50aXJlIHBhcnRpdGlvbi4iCittc2dzdHIgIkJvb3RyZWdpb25lbiBmeWxsZXIgaWtramUgaGVpbGUgcGFydGlzam9uZW4uIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjYyMgorbXNnaWQgIlRoZSBwYXJ0aXRpb24ncyBkYXRhIHJlZ2lvbiBkb2Vzbid0IG9jY3VweSB0aGUgZW50aXJlIHBhcnRpdGlvbi4iCittc2dzdHIgIkRhdGFyZWdpb25lbiBmeWxsZXIgaWtramUgaGVpbGUgcGFydGlzam9uZW4uIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjY3NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV2VpcmQgYmxvY2sgc2l6ZSBvbiBkZXZpY2UgZGVzY3JpcHRvcjogJWQgYnl0ZXMgaXMgbm90IGRpdmlzaWJsZSBieSA1MTIuIgorbXNnc3RyICIiCisiTWVya2VsZWcgYmxva2tzdG9ybGVpayBw5SBlaW5pbmdzZGVza3JpcHRvcjogJWQgb2t0ZXR0YXIgZXIgaWtramUgZGVsZWxlZyBw5SAiCisiNTEyLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo2ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBkcml2ZXIgZGVzY3JpcHRvciBzYXlzIHRoZSBwaHlzaWNhbCBibG9jayBzaXplIGlzICVkIGJ5dGVzLCBidXQgTGludXggIgorInNheXMgaXQgaXMgJWQgYnl0ZXMuIgorbXNnc3RyICIiCisiRHJpdmFyZGVza3JpcHRvcmVuIHNlaWVyIGF0IGRlbiBmeXNpc2tlIGJsb2trc3RvcmxlaWtlbiBlciAlZCBva3RldHRhciwgbWVuICIKKyJMaW51eCBzZWllciBhdCBoYW4gZXIgJWQgb2t0ZXR0YXIuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjczNgorbXNnaWQgIk5vIHZhbGlkIHBhcnRpdGlvbiBtYXAgZm91bmQuIgorbXNnc3RyICJGYW5uIGlra2plIG5va28gZ3lsZGlnIHBhcnRpc2pvbnNrYXJ0LiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo3OTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb25mbGljdGluZyBwYXJ0aXRpb24gbWFwIGVudHJ5IHNpemVzISAgRW50cnkgMSBzYXlzIGl0IGlzICVkLCBidXQgZW50cnkgJWQgIgorInNheXMgaXQgaXMgJWQhIgorbXNnc3RyICIiCisiTW90c3RyaWRhbmRlIHN0b3JsZWlrYXIgaSBwYXJ0aXNqb25za2FydGV0ISAgT3BwZvhyaW5nIDEgc2VpZXIgYXQgaGFuIGVyICVkLCAiCisibWVuIG9wcGb4cmluZyAlZCBzZWllciBhdCBoYW4gZXIgJWQhIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjgyMgorIywgZnV6enkKK21zZ2lkICJXZWlyZCEgIFRoZXJlIGFyZSAyIHBhcnRpdGlvbnMgbWFwIGVudHJpZXMhIgorbXNnc3RyICJNZXJrZWxlZyAtIHRvIHBhcnRpc2pvbnNrYXJ0b3BwZvhyaW5nYXIhIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjEzNDcKK21zZ2lkICIiCisiQ2hhbmdpbmcgdGhlIG5hbWUgb2YgYSByb290IG9yIHN3YXAgcGFydGl0aW9uIHdpbGwgcHJldmVudCBMaW51eCBmcm9tICIKKyJyZWNvZ25pc2luZyBpdCBhcyBzdWNoLiIKK21zZ3N0ciAiIgorIkVuZHJhciBkdSBuYW1uZXQgcOUgZWluIHJvdC0gZWxsZXIgc3dhcC1wYXJ0aXNqb24sIHZpbCBpa2tqZSBMaW51eCBsZW5nZXIgIgorImtqZW5uYSBoYW4gaWdqZW4uIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjE0NDMKKyMsIGZ1enp5Cittc2dpZCAiQ2FuJ3QgYWRkIGFub3RoZXIgcGFydGl0aW9uIC0tIHRoZSBwYXJ0aXRpb24gbWFwIGlzIHRvbyBzbWFsbCEiCittc2dzdHIgIkthbiBpa2tqZSBsZWdnamEgdGlsIGVpbiBwYXJ0aXNqb24gdGlsIC0gcGFydGlzam9uc2thcnRldCBlciBmb3IgbGl0ZSEiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcGM5OC5jOjM1NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBwYXJ0aXRpb24gdGFibGUgb24gJXMuIgorbXNnc3RyICJVZ3lsZGlnIHBhcnRpc2pvbnN0YWJlbGwgcOUgJXMiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcGM5OC5jOjQwNiBsaWJwYXJ0ZWQvbGFiZWxzL3BjOTguYzo0ODQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQYXJ0aXRpb24gJWQgaXNuJ3QgYWxpZ25lZCB0byBjeWxpbmRlciBib3VuZGFyaWVzLiAgVGhpcyBpcyBzdGlsbCAiCisidW5zdXBwb3J0ZWQuIgorbXNnc3RyICIiCisiUGFydGlzam9uICVkIGxpZ2cgaWtramUgbvh5YWt0aWcgcOUgZ3JlbnNhIG1lbGxvbSB0byBzeWxpbmRlcmFyLiAgRGV0ICIKKyJtYW5nbGFyIHN0+HR0ZSBmb3IgZGV0dGUuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3BjOTguYzo3OTEKK21zZ2lkICJDYW4ndCBhZGQgYW5vdGhlciBwYXJ0aXRpb24uIgorbXNnc3RyICJLYW4gaWtramUgbGVnZ2phIHRpbCBlaW4gcGFydGlzam9uIHRpbC4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6MTYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogQmFkIGNoZWNrc3VtIG9uIGJsb2NrICVsbHUgb2YgdHlwZSAlcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo0OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBEaWRuJ3QgZmluZCByZGIgYmxvY2ssIHNob3VsZCBuZXZlciBoYXBwZW4uIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6NTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogTG9vcCBkZXRlY3RlZCBhdCBibG9jayAlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo2MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBUaGUgJXMgbGlzdCBzZWVtcyBiYWQgYXQgYmxvY2sgJXMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6Njg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGxpc3QgYmFkIGJsb2Nrcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo2OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gbGlzdCBwYXJ0aXRpb24gYmxvY2tzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjcwNQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBsaXN0IGZpbGUgc3lzdGVtIGJsb2Nrcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo3MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gbGlzdCBib290IGJsb2Nrcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo3NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHdyaXRlIHBhcnRpdGlvbiBibG9jayBhdCAlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzoxMDY5CisjLCBmdXp6eQorbXNnaWQgIlVuYWJsZSB0byBhbGxvY2F0ZSBhIHBhcnRpdGlvbiBudW1iZXIuIgorbXNnc3RyICJGb3J2ZW50YSBlaXQgcGFydGlzam9uc251bW1lci4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6MTQ1Cittc2dpZCAiQ29ycnVwdGVkIFN1biBkaXNrIGxhYmVsIGRldGVjdGVkLiIKK21zZ3N0ciAi2HlkZWxhZ2QgU3VuLWRpc2tsYWJlbCBmdW5uZS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6MjY2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGRpc2sgQ0hTIGdlb21ldHJ5ICglZCwlZCwlZCkgcmVwb3J0ZWQgYnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0gZG9lcyBub3QgIgorIm1hdGNoIHRoZSBnZW9tZXRyeSBzdG9yZWQgb24gdGhlIGRpc2sgbGFiZWwgKCVkLCVkLCVkKS4iCittc2dzdHIgIiIKKyJHZW9tZXRyaWVuIHRpbCBkaXNrZW4gKEM9JWQsSD0lZCxTPSVkKSBzdGVtbWVyIGlra2plIG1lZCBnZW9tZXRyaWVuIGkgIgorImRpc2tsYWJlbGVuIChDPSVkLEg9JWQsUz0lZCkuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3N1bi5jOjI4OAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgZGlzayBsYWJlbCBkZXNjcmliZXMgYSBkaXNrIGJpZ2dlciB0aGFuICVzLiIKK21zZ3N0ciAiRGlza2xhYmVsZW4gc2tpbGRyYXIgZWluIGRpc2sgc3T4cnJlIGVubiAlcy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6NDQyCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBkaXNrIGhhcyAlZCBjeWxpbmRlcnMsIHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbWF4aW11bSBvZiA2NTUzNi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9zdW4uYzo3MzcKK21zZ2lkICIiCisiVGhlIFdob2xlIERpc2sgcGFydGl0aW9uIGlzIHRoZSBvbmx5IGF2YWlsYWJsZSBvbmUgbGVmdC4gIEdlbmVyYWxseSwgaXQgaXMgIgorIm5vdCBhIGdvb2QgaWRlYSB0byBvdmVyd3JpdGUgdGhpcyBwYXJ0aXRpb24gd2l0aCBhIHJlYWwgb25lLiAgU29sYXJpcyBtYXkgIgorIm5vdCBiZSBhYmxlIHRvIGJvb3Qgd2l0aG91dCBpdCwgYW5kIFNJTE8gKHRoZSBzcGFyYyBib290IGxvYWRlcikgYXBwcmVjaWF0ZXMgIgorIml0IGFzIHdlbGwuIgorbXNnc3RyICIiCisiUGFydGlzam9uZW4gc29tIG9tZmF0dGFyIGhlaWxlIGRpc2tlbiBlciBkZW4gZWluYXN0ZSBzb20gZXIgbGVkaWcuICBEZXQgZXIgIgorInZhbmxlZ3ZpcyBpa2tqZSBub2tvbiBnb2QgaWTpIOUgYnJ1a2EgZGV0dGUgc29tIGVpbiB2YW5sZWcgcGFydGlzam9uLiAgIgorIlNvbGFyaXMga2xhcmVyIGthbnNramUgaWtramUg5SBzdGFydGEgdXRhbiBoYW4sIG9nIFNJTE8gKGJvb3QtbGFzdGFyIGZvciAiCisiU1BBUkMpIGxpa2FyIGRldCBoZWxsZXIgaWtramUuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3N1bi5jOjc1MgorbXNnaWQgIlN1biBkaXNrIGxhYmVsIGlzIGZ1bGwuIgorbXNnc3RyICJTdW4tZGlza2xhYmVsIGVyIGZ1bGwuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIG9wZW5pbmcgZGV2aWNlICclcycgZmFpbGVkLlxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6MTY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBzZWVraW5nIGRldmljZSAnJXMnIGZhaWxlZC5cbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjE3MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgd3JpdGluZyB0byBkZXZpY2UgJyVzJyBmYWlsZWQsXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzoxNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHJlYWRpbmcgZnJvbSBkZXZpY2UgJyVzJyBmYWlsZWQuXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzoxNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmF0YWwgZXJyb3JcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0MTgKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBWVE9DIGxhYmVscy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDI0Cittc2dpZCAiQ291bGQgbm90IHJlYWQgVlRPQyBGTVQxIERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQzMQorbXNnaWQgIkNvdWxkIG5vdCByZWFkIFZUT0MgRk1UNCBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0MzgKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBWVE9DIEZNVDUgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDQ1Cittc2dpZCAiQ291bGQgbm90IHJlYWQgVlRPQyBGTVQ3IERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQ2MgorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBWVE9DIGxhYmVscy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDY4Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIFZUT0MgRk1UMSBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0NzUKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgVlRPQyBGTVQ0IERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQ4MgorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBWVE9DIEZNVDUgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDg5Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIFZUT0MgRk1UNyBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGlicGFydGVkLmM6Mjk2IGxpYnBhcnRlZC9saWJwYXJ0ZWQuYzozMTYKK21zZ2lkICJPdXQgb2YgbWVtb3J5LiIKK21zZ3N0ciAiVG9tIGZvciBtaW5uZS4iCisKKyM6IGxpYnBhcnRlZC91bml0LmM6MTM5Cittc2dpZCAiQ2Fubm90IGdldCB1bml0IHNpemUgZm9yIHNwZWNpYWwgdW5pdCAnQ09NUEFDVCcuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC91bml0LmM6Mzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIlwiJXNcIiBoYXMgaW52YWxpZCBzeW50YXggZm9yIGxvY2F0aW9ucy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL3VuaXQuYzozOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIG1heGltdW0gaGVhZCB2YWx1ZSBpcyAlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL3VuaXQuYzo0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIG1heGltdW0gc2VjdG9yIHZhbHVlIGlzICVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvdW5pdC5jOjQxMyBsaWJwYXJ0ZWQvdW5pdC5jOjU0NQorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgbG9jYXRpb24gJXMgaXMgb3V0c2lkZSBvZiB0aGUgZGV2aWNlICVzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvdW5pdC5jOjUyNworbXNnaWQgIkludmFsaWQgbnVtYmVyLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYWZmcy5jOjYzIGxpYnBhcnRlZC9mcy9hbWlnYS9hcGZzLmM6NTYKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hc2ZzLmM6NzAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGFsbG9jYXRlIHBhcnRpdGlvbiBibG9ja1xuIgorbXNnc3RyICJGb3J2ZW50YSBlaXQgcGFydGlzam9uc251bW1lci4iCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hZmZzLmM6NzggbGlicGFydGVkL2ZzL2FtaWdhL2FwZnMuYzo3MAorIzogbGlicGFydGVkL2ZzL2FtaWdhL2FzZnMuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBhbGxvY2F0ZSBibG9ja1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hZmZzLmM6ODMgbGlicGFydGVkL2ZzL2FtaWdhL2FwZnMuYzo3NQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IENvdWxkbid0IHJlYWQgYm9vdCBibG9jayAlbGx1XG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FmZnMuYzo5OSBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXBmcy5jOjg2CisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXNmcy5jOjkyIGxpYnBhcnRlZC9mcy9hbWlnYS9hc2ZzLmM6MTA2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogQ291bGRuJ3QgcmVhZCByb290IGJsb2NrICVsbHVcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzo3MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBhbGxvY2F0ZSBpZCBsaXN0IGVsZW1lbnRcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBDb3VsZG4ndCByZWFkIGJsb2NrICVsbHVcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzoyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBCYWQgY2hlY2tzdW0gb24gYmxvY2sgJWxsdSBvZiB0eXBlICVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6MjEyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyA6IENvdWxkbid0IHdyaXRlIGJsb2NrICVkXG4iCittc2dzdHIgIiVzIHVuZGVyIHNrcml2aW5nIHRpbCAlcyIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6Mjc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGFsbG9jYXRlIGRpc2tfc3BlY2lmaWMgcmRiIGJsb2NrXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6Mjg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRGlkbid0IGZpbmQgcmRiIGJsb2NrLCBzaG91bGQgbmV2ZXIgaGFwcGVuXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6MzE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIHJlYWQgcGFydGl0aW9uIGJsb2NrICVsbHVcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6ODcgbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjExMgorbXNnaWQgIkluY29uc2lzdGVudCBncm91cCBkZXNjcmlwdG9ycyEiCittc2dzdHIgIklua29uc2lzdGVudGUgZ3J1cHBlLWRlc2tyaXB0b3JhciIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjkxIGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzoxMTYKKyMsIGZ1enp5Cittc2dpZCAiRmlsZSBzeXN0ZW0gZnVsbCEiCittc2dzdHIgIkZpbHN5c3RlbWV0IGVyIGZ1bGx0ISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjY4NgorIywgZnV6enkKK21zZ2lkICJJbnZhbGlkIHN1cGVyYmxvY2suICBBcmUgeW91IHN1cmUgdGhpcyBpcyBhbiBleHQyIGZpbGUgc3lzdGVtPyIKK21zZ3N0ciAiVWd5bGRpZyBzdXBlcmJsb2trLiAgRXIgZHUgc2lra2VyIHDlIGF0IGRldHRlIGVyIGVpdCBleHQyLWZpbHN5c3RlbT8iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo3MDAgbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo2NTgKKyMsIGZ1enp5Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGVycm9ycyEgIFlvdSBzaG91bGQgcnVuIGUyZnNjay4iCittc2dzdHIgIkRlciBlciBmZWlsIHDlIGZpbHN5c3RlbWV0ISAgS/h5ciBlMmZzY2sgZvhyc3QuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6NzExCisjLCBmdXp6eQorbXNnaWQgIiIKKyJGaWxlIHN5c3RlbSB3YXMgbm90IGNsZWFubHkgdW5tb3VudGVkISAgWW91IHNob3VsZCBydW4gZTJmc2NrLiAgTW9kaWZ5aW5nIGFuICIKKyJ1bmNsZWFuIGZpbGUgc3lzdGVtIGNvdWxkIGNhdXNlIHNldmVyZSBjb3JydXB0aW9uLiIKK21zZ3N0ciAiIgorIkZpbHN5c3RlbWV0IHZhcnQgaWtramUgYXZtb250ZXJ0IHDlIGVpbiByZWluIG9nIHBlbiBt5XRlLiAgRHUgbeUga/h5cmEgIgorImUyZnNjay4gIMUgZ2plcmEgZW5kcmluZ2FyIHDlIGVpdCB1cmVpbnQgZmlsc3lzdGVtIGthbiBm+HJlIHRpbCBhbHZvcmxlZyAiCisiZGF0YXRhcC4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo3MzEKKyMsIGZ1enp5Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGluY29tcGF0aWJsZSBmZWF0dXJlIGVuYWJsZWQuIgorbXNnc3RyICJGaWxzeXN0ZW1ldCBicnVrYXIgZmluZXNzYXIgR05VIHBhcnRlZCBpa2tqZSBzdPh0dGFyIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6NzQyCittc2dpZCAiRXJyb3IgYWxsb2NhdGluZyBidWZmZXIgY2FjaGUuIgorbXNnc3RyICJLdW5uZSBpa2tqZSBhbGxva2VyYSBidWZmZXJjYWNoZS4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfaW5vZGVfcmVsb2NhdG9yLmM6MTE0CisjLCBmdXp6eQorbXNnaWQgIiIKKyJGb3VuZCBhbiBpbm9kZSB3aXRoIGEgaW5jb3JyZWN0IGxpbmsgY291bnQuICBCZXR0ZXIgZ28gcnVuIGUyZnNjayBmaXJzdCEiCittc2dzdHIgIkZhbm4gZWluIGlub2RlIG1lZCBmZWlsIHRhbCBw5SBsZW5rYXIuICBEdSBi+HIga/h5cmEgZTJmc2NrIGb4cnN0LiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9pbm9kZV9yZWxvY2F0b3IuYzo0ODcKK21zZ2lkICJOb3QgZW5vdWdoIGZyZWUgaW5vZGVzISIKK21zZ3N0ciAiRm9yIGblIGxlZGlnZSBpbm9kYXIhIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjIyMworIywgZnV6enkKK21zZ2lkICJGaWxlIHN5c3RlbSBpcyB0b28gZnVsbCB0byByZW1vdmUgYSBncm91cCEiCittc2dzdHIgIkZpbHN5c3RlbWV0IGVyIGZvciBmdWxsdCB0aWwg5SBzbGV0dGEgZWkgZ3J1cHBlISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzoyMzIKKyMsIGZ1enp5Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIHRvbyBtYW55IGFsbG9jYXRlZCBpbm9kZXMgdG8gcmVtb3ZlIGEgZ3JvdXAhIgorbXNnc3RyICJGaWxzeXN0ZW1ldCBoYXIgZm9yIG1hbmdlIGlub2RhciBpIGJydWsgdGlsIOUgc2xldHRhIGVpIGdydXBwZSEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NDkxCittc2dpZCAiYWRkaW5nIGdyb3VwcyIKK21zZ3N0ciAibGVnZyB0aWwgZ3J1cHBlciIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo1MjgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIllvdXIgZmlsZSBzeXN0ZW0gaXMgdG9vIGZ1bGwgdG8gcmVzaXplIGl0IHRvICVpIGJsb2Nrcy4gIFNvcnJ5LiIKK21zZ3N0ciAiIgorIkZpbHN5c3RlbWV0IGVyIGZvciBmdWxsdCB0aWwgYXQgZWluIGthbiBlbmRyYSBzdG9ybGVpa2VuIHRpbCAlaSBibG9ra2VyLiAgIgorIkJla2xhZ2FyLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo1MzgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGZpbGUgc3lzdGVtIGhhcyB0b28gbWFueSBvY2N1cGllZCBpbm9kZXMgdG8gcmVzaXplIGl0IHRvICVpIGJsb2Nrcy4gICIKKyJTb3JyeS4iCittc2dzdHIgIiIKKyJGaWxzeXN0ZW1ldCBoYXIgZm9yIG1hbmdlIGlub2RhciBpIGJydWsgdGlsIGF0IGVpbiBrYW4gZW5kcmEgc3RvcmxlaWtlbiB0aWwgJSIKKyJpIGJsb2trZXIuICBCZWtsYWdhci4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NjY2CisjLCBmdXp6eQorbXNnaWQgIkZpbGUgc3lzdGVtIHdhcyBub3QgY2xlYW5seSB1bm1vdW50ZWQhICBZb3Ugc2hvdWxkIHJ1biBlMmZzY2suIgorbXNnc3RyICIiCisiRmlsc3lzdGVtZXQgdmFydCBpa2tqZSBhdm1vbnRlcnQgcOUgZWluIHJlaW4gb2cgcGVuIG3ldGUuICBEdSBt5SBr+HlyYSAiCisiZTJmc2NrLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo2NzUKK21zZ2lkICIiCisiVGhlIGZpbGUgc3lzdGVtIGhhcyB0aGUgJ2Rpcl9pbmRleCcgZmVhdHVyZSBlbmFibGVkLiAgUGFydGVkIGNhbiBvbmx5IHJlc2l6ZSAiCisidGhlIGZpbGUgc3lzdGVtIGlmIGl0IGRpc2FibGVzIHRoaXMgZmVhdHVyZS4gIFlvdSBjYW4gZW5hYmxlIGl0IGxhdGVyIGJ5ICIKKyJydW5uaW5nICd0dW5lMmZzIC1PIGRpcl9pbmRleCBERVZJQ0UnIGFuZCB0aGVuICdlMmZzY2sgLWZEIERFVklDRScuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NjkxCittc2dpZCAiIgorIkEgcmVzaXplIG9wZXJhdGlvbiBvbiB0aGlzIGZpbGUgc3lzdGVtIHdpbGwgdXNlIEVYUEVSSU1FTlRBTCBjb2RlXG4iCisidGhhdCBNQVkgQ09SUlVQVCBpdCAoYWx0aG91Z2ggbm8gb25lIGhhcyByZXBvcnRlZCBhbnkgc3VjaCBkYW1hZ2UgeWV0KS5cbiIKKyJZb3Ugc2hvdWxkIGF0IGxlYXN0IGJhY2t1cCB5b3VyIGRhdGEgZmlyc3QsIGFuZCBydW4gJ2UyZnNjayAtZicgYWZ0ZXJ3YXJkcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9ibG9ja19yZWxvY2F0b3IuYzoxOTgKKyMsIGZ1enp5Cittc2dpZCAiQ3Jvc3MtbGlua2VkIGJsb2NrcyBmb3VuZCEgIEJldHRlciBnbyBydW4gZTJmc2NrIGZpcnN0ISIKK21zZ3N0ciAiS3J5c3NsZW5rYSBibG9ra2VyIGZ1bm5lISAgS/h5ciBlMmZzY2sgZvhyc3QhIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2Jsb2NrX3JlbG9jYXRvci5jOjUzNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQmxvY2sgJWkgaGFzIG5vIHJlZmVyZW5jZT8gIFdlaXJkLiIKK21zZ3N0ciAiQmxva2sgJWkgaGFyIGluZ2VuIHJlZmVyYW5zYXIgdGlsIHNlZz8gIFJhcnQiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfYmxvY2tfcmVsb2NhdG9yLmM6NzM3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJCbG9jayAlaSBzaG91bGRuJ3QgaGF2ZSBiZWVuIG1hcmtlZCAoJWQsICVkKSEiCittc2dzdHIgIkJsb2trICVpIGJ1cmRlIGlra2plIGhhIHZvcmUgbWVya2EhIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9pbnRlcmZhY2UuYzoxODYKKyMsIGZ1enp5Cittc2dpZCAiIgorIlRoZSBleHQyIGZpbGUgc3lzdGVtIHBhc3NlZCBhIGJhc2ljIGNoZWNrLiAgRm9yIGEgbW9yZSBjb21wcmVoZW5zaXZlIGNoZWNrLCAiCisidXNlIHRoZSBlMmZzY2sgcHJvZ3JhbS4iCittc2dzdHIgIiIKKyJFeHQyLWZpbHN5c3RlbWV0IGdqZWtrIGdqZW5ub20gZWluIGVua2VsIHNqZWtrLiAgRm9yIGVpbiBtZWlyIGdydW5kaWcgc2pla2ssICIKKyJicnVrIHByb2dyYW1tZXQgZTJmc2NrLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvaW50ZXJmYWNlLmM6MjAzCittc2dpZCAiU29ycnksIGNhbid0IG1vdmUgdGhlIHN0YXJ0IG9mIGV4dDIgcGFydGl0aW9ucyB5ZXQhIgorbXNnc3RyICJCZWtsYWdhciwga2FuIGlra2plIGZseXR0YSBzdGFydGVuIHDlIGVpbiBleHQyLXBhcnRpc2pvbiBlbm5vISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9idWZmZXIuYzo4MgorbXNnaWQgIkNvdWxkbid0IGZsdXNoIGJ1ZmZlciBjYWNoZSEiCittc2dzdHIgIkt1bm5lIGlra2plIGxhZ3JhIGJ1ZmZlcmNhY2hlIHRpbCBkaXNrISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9ta2ZzLmM6MTYyCittc2dpZCAid3JpdGluZyBwZXItZ3JvdXAgbWV0YWRhdGEiCittc2dzdHIgInNrcml2IHBlci1ncnVwcGUgbWV0YWRhdGEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfbWtmcy5jOjU2NAorbXNnaWQgIkZpbGUgc3lzdGVtIHRvbyBzbWFsbCBmb3IgZXh0Mi4iCittc2dzdHIgIkZpbHN5c3RlbWV0IGVyIGZvciBsaXRlIGZvciBleHQyLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jYWxjLmM6MTM1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IG5lZWQgJXMgb2YgZnJlZSBkaXNrIHNwYWNlIHRvIHNocmluayB0aGlzIHBhcnRpdGlvbiB0byB0aGlzIHNpemUuICAiCisiQ3VycmVudGx5LCBvbmx5ICVzIGlzIGZyZWUuIgorbXNnc3RyICIiCisiRHUgdHJlbmcgJWQgTWlCIG1lZCBsZWRpZyBkaXNrcGxhc3MgZm9yIOUga3J5bXBhIHBhcnRpc2pvbmVuIHRpbCBkZW5uZSAiCisic3RvcmxlaWtlbiAoZHUgaGFyIGZvciB0aWRhIGJlcnJlICVkIE1pQiBsZWRpZykiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY29udGV4dC5jOjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDbHVzdGVyIHN0YXJ0IGRlbHRhID0gJWQsIHdoaWNoIGlzIG5vdCBhIG11bHRpcGxlIG9mIHRoZSBjbHVzdGVyIHNpemUgJWQuIgorbXNnc3RyICIiCisiQWxsb2tlcmluZ3NlaW5pbmdhIHNpdHQgc3RhcnRkZWx0YSBlciAlZCwgb2cgZGV0IGVyIGlra2plIGVpdCBtdWx0aXBsdW0gYXYgIgorInN0b3JsZWlrZW4gJWQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jOjMwOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiUGFydGl0aW9uIHRvbyBiaWcvc21hbGwgZm9yIGEgJXMgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICJQYXJ0aXNqb25lbiBlciBmb3IgbGl0ZW4gZWxsZXIgc3RvciBmb3IgZWl0ICVzLWZpbHN5c3RlbSIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9mYXQuYzo0NzQKK21zZ2lkICIiCisiVGhlIEZBVHMgZG9uJ3QgbWF0Y2guICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRoaXMgbWVhbnMsIHRoZW4gc2VsZWN0ICIKKyJjYW5jZWwsIHJ1biBzY2FuZGlzayBvbiB0aGUgZmlsZSBzeXN0ZW0sIGFuZCB0aGVuIGNvbWUgYmFjay4iCittc2dzdHIgIiIKKyJGQVQtYW5lIHN0ZW1tZXIgaWtramUgb3ZlcmVpbnMuICBWaXNzIGR1IGlra2plIHZlaXQga3ZhIGRldHRlIHR5ZGVyLCB2ZWwgIgorImF2YnJ5dCwga/h5ciBzY2FuZGlzayBw5SBmaWxzeXN0ZW0sIG9nIGtvbSBhdHRlbmRlLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9mYXQuYzo1MTQKK21zZ2lkICJUaGVyZSBhcmUgbm8gcG9zc2libGUgY29uZmlndXJhdGlvbnMgZm9yIHRoaXMgRkFUIHR5cGUuIgorbXNnc3RyICJEZXIgZXIgaW5nZW4gbW9nbGVnZSBrb25maWd1cmFzam9uYXIgZm9yIGRlbm5lIEZBVC10eXBlbi4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvZmF0LmM6NTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGaWxlIHN5c3RlbSBkb2Vzbid0IGhhdmUgZXhwZWN0ZWQgc2l6ZXMgZm9yIFdpbmRvd3MgdG8gbGlrZSBpdC4gIENsdXN0ZXIgIgorInNpemUgaXMgJWRrICglZGsgZXhwZWN0ZWQpOyBudW1iZXIgb2YgY2x1c3RlcnMgaXMgJWQgKCVkIGV4cGVjdGVkKTsgc2l6ZSBvZiAiCisiRkFUcyBpcyAlZCBzZWN0b3JzICglZCBleHBlY3RlZCkuIgorbXNnc3RyICIiCisiRmlsc3lzdGVtZXQgaGFyIGlra2plIHBhcmFtZXRyYXIgc29tIFdpbmRvd3MgdmlsIGxpa2UuICBBbGxva2VyaW5nc2VpbmluZ2EgIgorImVyICVkIEtpQiAoJWQgS2lCIGVyIGZvcnZlbnRhKSwgdGFsZXQgcOUgYWxsb2tlcmluZ3NlaW5pbmdhciBlciAlZCAoJWQgZXIgIgorImZvcnZlbnRhKSwgRkFULWFuZSBlciBw5SAlZCBzZWt0b3JhciAoJWQgZXIgZm9ydmVudGEpLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9mYXQuYzo1NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZpbGUgc3lzdGVtIGlzIHJlcG9ydGluZyB0aGUgZnJlZSBzcGFjZSBhcyAlZCBjbHVzdGVycywgbm90ICVkIGNsdXN0ZXJzLiIKK21zZ3N0ciAiIgorIkZpbHN5c3RlbWV0IHJhcHBvcnRlcmVyICVkIGFsbG9rZXJpbmdzZWluaW5nYXIgbWVkIGxlZGlnIHBsYXNzLCBpa2tqZSAlZC4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvZmF0LmM6ODc0CisjLCBmdXp6eQorbXNnaWQgIiIKKyJHTlUgUGFydGVkIHdhcyBtaXNjb21waWxlZDogdGhlIEZBVCBib290IHNlY3RvciBzaG91bGQgYmUgNTEyIGJ5dGVzLiAgRkFUICIKKyJzdXBwb3J0IHdpbGwgYmUgZGlzYWJsZWQuIgorbXNnc3RyICIiCisiR05VIHBhcnRlZCBlciBmZWlsa29tcGlsZXJ0OiAgZWluIGJvb3RzZWt0b3IgaSBGQVQgc2thbCB2ZXJhIDUxMiBva3RldHRhci4gICIKKyJGQVQtc3T4dHRlIGVyIG5vIHNrcnVkZCBhdi4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6MTU5CisjLCBmdXp6eQorbXNnaWQgIiIKKyJUaGVyZSdzIG5vdCBlbm91Z2ggcm9vbSBpbiB0aGUgcm9vdCBkaXJlY3RvcnkgZm9yIGFsbCBvZiB0aGUgZmlsZXMuICBFaXRoZXIgIgorImNhbmNlbCwgb3IgaWdub3JlIHRvIGxvc2UgdGhlIGZpbGVzLiIKK21zZ3N0ciAiIgorIkRlciBlciBpa2tqZSBwbGFzcyBpIHRvcHBrYXRhbG9nZW4gdGlsIGFsbGUgZmlsZW5lLiAgVmVsIGFudGVuIGF2YnJ5dCwgZWxsZXIgIgorIm92ZXJzauUgZmVpbGVuIGZvciDlIG1pc3NlIGFsbGUgZmlsZW5lLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzozMDAKK21zZ2lkICJFcnJvciB3cml0aW5nIHRvIHRoZSByb290IGRpcmVjdG9yeS4iCittc2dzdHIgIkZlaWwgdmVkIHNrcml2aW5nIHRpbCB0b3Bwa2F0YWxvZ2VuLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo0ODkKKyMsIGZ1enp5Cittc2dpZCAiSWYgeW91IGxlYXZlIHlvdXIgZmlsZSBzeXN0ZW0gYXMgRkFUMTYsIHRoZW4geW91IHdpbGwgaGF2ZSBubyBwcm9ibGVtcy4iCittc2dzdHIgIlZpc3MgZHUgbGV0IGZpbHN5c3RlbWV0IHZlcmEgRkFUMTYsIHZpbCBkdSBpa2tqZSBoYSBub2tvbiBwcm9ibGVtLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo0OTIKK21zZ2lkICIiCisiSWYgeW91IGNvbnZlcnQgdG8gRkFUMTYsIGFuZCBNUyBXaW5kb3dzIGlzIGluc3RhbGxlZCBvbiB0aGlzIHBhcnRpdGlvbiwgdGhlbiAiCisieW91IG11c3QgcmUtaW5zdGFsbCB0aGUgTVMgV2luZG93cyBib290IGxvYWRlci4gIElmIHlvdSB3YW50IHRvIGRvIHRoaXMsIHlvdSAiCisic2hvdWxkIGNvbnN1bHQgdGhlIFBhcnRlZCBtYW51YWwgKG9yIHlvdXIgZGlzdHJpYnV0aW9uJ3MgbWFudWFsKS4iCittc2dzdHIgIiIKKyJWaXNzIGR1IGtvbnZlcnRlcmVyIHRpbCBGQVQxNiBvZyBNUyBXaW5kb3dzIGVyIGluc3RhbGxlcnQgcOUgZGVubmUgIgorInBhcnRpc2pvbmVuLCBt5SBkdSBsZWdnamEgaW5uIGJvb3QtbGFzdGFyZW4gdGlsIE1TIFdpbmRvd3MgcOUgbnl0dC4gIERlcnNvbSAiCisiZHUgdmlsIGdqZXJhIGRldHRlLCBi+HIgZHUgbGVzYSBQYXJ0ZWQtbWFudWFsZW4gKGVsbGVyIG1hbnVhbGVuIHNvbSBo+HlyZXIgIgorInRpbCBkaXN0cmlidXNqb25lbiBkaW4pLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1MDAKK21zZ2lkICIiCisiSWYgeW91IGxlYXZlIHlvdXIgZmlsZSBzeXN0ZW0gYXMgRkFUMzIsIHRoZW4geW91IHdpbGwgbm90IGludHJvZHVjZSBhbnkgbmV3ICIKKyJwcm9ibGVtcy4iCittc2dzdHIgIlZpc3MgZHUgbGV0IGZpbHN5c3RlbWV0IHZlcmEgRkFUMzIsIHZpbCBkdSBpa2tqZSBm5SBub2tvbiBueWUgcHJvYmxlbS4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTA0Cittc2dpZCAiIgorIklmIHlvdSBjb252ZXJ0IHRvIEZBVDMyLCBhbmQgTVMgV2luZG93cyBpcyBpbnN0YWxsZWQgb24gdGhpcyBwYXJ0aXRpb24sIHRoZW4gIgorInlvdSBtdXN0IHJlLWluc3RhbGwgdGhlIE1TIFdpbmRvd3MgYm9vdCBsb2FkZXIuICBJZiB5b3Ugd2FudCB0byBkbyB0aGlzLCB5b3UgIgorInNob3VsZCBjb25zdWx0IHRoZSBQYXJ0ZWQgbWFudWFsIChvciB5b3VyIGRpc3RyaWJ1dGlvbidzIG1hbnVhbCkuICBBbHNvLCAiCisiY29udmVydGluZyB0byBGQVQzMiB3aWxsIG1ha2UgdGhlIGZpbGUgc3lzdGVtIHVucmVhZGFibGUgYnkgTVMgRE9TLCBNUyAiCisiV2luZG93cyA5NWEsIGFuZCBNUyBXaW5kb3dzIE5ULiIKK21zZ3N0ciAiIgorIlZpc3MgZHUga29udmVydGVyZXIgdGlsIEZBVDMyLCBvZyBNUyBXaW5kb3dzIGVyIGluc3RhbGxlcnQgcOUgZGVubmUgIgorInBhcnRpc2pvbmVuLCBt5SBkdSBsZWdnamEgaW5uIGJvb3QtbGFzdGFyZW4gdGlsIE1TIFdpbmRvd3MgcOUgbnl0dC4gIERlcnNvbSAiCisiZHUgdmlsIGdqZXJhIGRldHRlLCBi+HIgZHUgbGVzYSBQYXJ0ZWQtbWFudWFsZW4gKGVsbGVyIG1hbnVhbGVuIHNvbSBo+HlyZXIgIgorInRpbCBkaXN0cmlidXNqb25lbiBkaW4pLiAgRkFUMzIgZXIgb2dz5SB1bGVzZWxlZyBmb3IgTVMtRE9TLCBNUyBXaW5kb3dzIDk1YSAiCisib2cgTlQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjUxOAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyAgJXMgICVzIgorbXNnc3RyICIlcyAgJXMgICVzIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjUxOQorbXNnaWQgIldvdWxkIHlvdSBsaWtlIHRvIHVzZSBGQVQzMj8iCittc2dzdHIgIthuc2tqZXIgZHUg5SBicnVrYSBGQVQzMj8iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTUwIGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzICAlcyIKK21zZ3N0ciAiJXMgICVzIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjU1MQorbXNnaWQgIiIKKyJUaGUgZmlsZSBzeXN0ZW0gY2FuIG9ubHkgYmUgcmVzaXplZCB0byB0aGlzIHNpemUgYnkgY29udmVydGluZyB0byBGQVQxNi4iCittc2dzdHIgIkZpbHN5c3RlbWV0IGthbiBrdW4gZuUgZGVubmUgc3RvcmxlaWtlbiB2ZWQg5SBrb252ZXJ0ZXJhIHRpbCBGQVQxNi4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTY3Cittc2dpZCAiIgorIlRoZSBmaWxlIHN5c3RlbSBjYW4gb25seSBiZSByZXNpemVkIHRvIHRoaXMgc2l6ZSBieSBjb252ZXJ0aW5nIHRvIEZBVDMyLiIKK21zZ3N0ciAiRmlsc3lzdGVtZXQga2FuIGt1biBm5SBkZW5uZSBzdG9ybGVpa2VuIHZlZCDlIGtvbnZlcnRlcmEgdGlsIEZBVDMyLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1ODAKKyMsIGZ1enp5Cittc2dpZCAiIgorIkdOVSBQYXJ0ZWQgY2Fubm90IHJlc2l6ZSB0aGlzIHBhcnRpdGlvbiB0byB0aGlzIHNpemUuICBXZSdyZSB3b3JraW5nIG9uIGl0ISIKK21zZ3N0ciAiIgorIkdOVSBQYXJ0ZWQga2FuIGlra2plIGVuZHJhIHN0b3JsZWlrZW4gdGlsIGRldHRlLiAgVmkgYXJiZWlkZXIgbWVkIHNha2EhIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo0OSBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo1NgorbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyBhbiBpbnZhbGlkIHNpZ25hdHVyZSBmb3IgYSBGQVQgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICJGaWxzeXN0ZW1ldCBoYXIgZWluIHVneWxkaWcgc2lnbmF0dXIgdGlsIOUgdmVyYSBlaXQgRkFULWZpbHN5c3RlbS4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjY0Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGludmFsaWQgc2VjdG9yIHNpemUgZm9yIGEgRkFUIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiIgorIkZpbHN5c3RlbWV0IGhhciBlaW4gdWd5bGRpZyBzZWt0b3JzdG9ybGVpayB0aWwg5SB2ZXJhIGVpdCBGQVQtZmlsc3lzdGVtLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6NzEKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgYW4gaW52YWxpZCBjbHVzdGVyIHNpemUgZm9yIGEgRkFUIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiIgorIkZpbHN5c3RlbWV0IGhhciBlaW4gc3RvcmxlaWsgcOUgYWxsb2tlcmluZ3NlaW5pbmdhIHNvbSBlciB1Z3lsZGlnIGZvciBGQVQtIgorImZpbHN5c3RlbS4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjc4CisjLCBmdXp6eQorbXNnaWQgIiIKKyJGaWxlIHN5c3RlbSBoYXMgYW4gaW52YWxpZCBudW1iZXIgb2YgcmVzZXJ2ZWQgc2VjdG9ycyBmb3IgYSBGQVQgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICIiCisiRmlsc3lzdGVtZXQgaGFyIGVpdCB1Z3lsZGlnIHRhbCBw5SByZXNlcnZlcnRlIHNla3RvcmFyIHRpbCDlIHZlcmEgZWl0IEZBVC0iCisiZmlsc3lzdGVtIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo4NQorIywgZnV6enkKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgYW4gaW52YWxpZCBudW1iZXIgb2YgRkFUcy4iCittc2dzdHIgIkZpbHN5c3RlbWV0IGhhciBlaXQgdWd5bGRpZyB0YWwgcOUgRkFULWFyLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6MTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGlzIGZpbGUgc3lzdGVtIGhhcyBhIGxvZ2ljYWwgc2VjdG9yIHNpemUgb2YgJWQuICBHTlUgUGFydGVkIGlzIGtub3duIG5vdCAiCisidG8gd29yayBwcm9wZXJseSB3aXRoIHNlY3RvciBzaXplcyBvdGhlciB0aGFuIDUxMiBieXRlcy4iCittc2dzdHIgIiIKKyJEZXR0ZSBmaWxzeXN0ZW1ldCBoYXIgZWluIGxvZ2lzayBzZWt0b3JzdG9ybGVpayBw5SAlZC4gIEdOVSBQYXJ0ZWQgZnVuZ2VyZXIgIgorImJlcnJlIHNraWtrZWxlZyBu5XIgc2VrdG9yc3RvcmxlaWtlbiBlciA1MTIgb2t0ZXR0YXIuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzoxNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmaWxlIHN5c3RlbSdzIENIUyBnZW9tZXRyeSBpcyAoJWQsICVkLCAlZCksIHdoaWNoIGlzIGludmFsaWQuICBUaGUgIgorInBhcnRpdGlvbiB0YWJsZSdzIENIUyBnZW9tZXRyeSBpcyAoJWQsICVkLCAlZCkuICBJZiB5b3Ugc2VsZWN0IElnbm9yZSwgdGhlICIKKyJmaWxlIHN5c3RlbSdzIENIUyBnZW9tZXRyeSB3aWxsIGJlIGxlZnQgdW5jaGFuZ2VkLiAgSWYgeW91IHNlbGVjdCBGaXgsIHRoZSAiCisiZmlsZSBzeXN0ZW0ncyBDSFMgZ2VvbWV0cnkgd2lsbCBiZSBzZXQgdG8gbWF0Y2ggdGhlIHBhcnRpdGlvbiB0YWJsZSdzIENIUyAiCisiZ2VvbWV0cnkuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjIxMworbXNnaWQgIkZBVCBib290IHNlY3RvciBzYXlzIGxvZ2ljYWwgc2VjdG9yIHNpemUgaXMgMC4gIFRoaXMgaXMgd2VpcmQuICIKK21zZ3N0ciAiIgorIkJvb3RzZWt0b3JlbiBpIEZBVCBzZWllciBhdCBsb2dpc2sgc2VrdG9yc3RvcmxlaWsgZXIgMC4gIERldCB2YXIgcmFydC4gIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzoyMTkKK21zZ2lkICJGQVQgYm9vdCBzZWN0b3Igc2F5cyB0aGVyZSBhcmUgbm8gRkFUIHRhYmxlcy4gIFRoaXMgaXMgd2VpcmQuICIKK21zZ3N0ciAiIgorIkJvb3RzZWt0b3JlbiBpIEZBVCBzZWllciBhdCBkZXIgaWtramUgZXIgbm9rb24gRkFULXRhYmVsbGFyLiAgRGV0IHZhciByYXJ0LiAiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjIyNQorbXNnaWQgIkZBVCBib290IHNlY3RvciBzYXlzIGNsdXN0ZXJzIGFyZSAwIHNlY3RvcnMuICBUaGlzIGlzIHdlaXJkLiAiCittc2dzdHIgIiIKKyJCb290c2VrdG9yZW4gaSBGQVQgc2VpZXIgYXQgYWxsb2tlcmluZ3NlaW5pbmdhIGVyIDAgc2VrdG9yYXIuICBEZXQgdmFyIHJhcnQuICIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6MjM1CisjLCBmdXp6eQorbXNnaWQgIkZpbGUgc3lzdGVtIGlzIEZBVDEyLCB3aGljaCBpcyB1bnN1cHBvcnRlZC4iCittc2dzdHIgIkZpbHN5c3RlbWV0IGVyIEZBVDEyLCBzb20gZXIgdXN0+HR0YS4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjQxMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGluZm9ybWF0aW9uIHNlY3RvciBoYXMgdGhlIHdyb25nIHNpZ25hdHVyZSAoJXgpLiAgU2VsZWN0IGNhbmNlbCBmb3Igbm93LCAiCisiYW5kIHNlbmQgaW4gYSBidWcgcmVwb3J0LiAgSWYgeW91J3JlIGRlc3BlcmF0ZSwgaXQncyBwcm9iYWJseSBzYWZlIHRvIGlnbm9yZS4iCittc2dzdHIgIiIKKyJJbmZvcm1hc2pvbnNzZWt0b3JlbiBoYXIgZmVpbCBzaWduYXR1ciAoJXgpLiAgVmVsIGF2YnJ5dCwgb2cgc2VuZCBpbm4gZWluICIKKyJmZWlscmFwcG9ydC4gIFZpc3MgZHUgZXIgZGVzcGVyYXQsIGVyIGRldCBzYW5uc3lubGVndmlzIHRyeWd0IOUgb3ZlcnNq5SAiCisiZGVubmUgZmVpbGVuLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb3VudC5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgZGlyZWN0b3J5IGVudHJ5IGZvciAlczogZmlyc3QgY2x1c3RlciBpcyB0aGUgZW5kIG9mIGZpbGUgbWFya2VyLiIKK21zZ3N0ciAiIgorIkZlaWwgaSBrYXRhbG9nb3BwZvhyaW5nYSBmb3IgJXM6IGb4cnN0ZSBhbGxva2VyaW5nc2VpbmluZ2EgbWFya2VyZXIgc2x1dHQgcOUgIgorImZpbGEuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvdW50LmM6MTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJCYWQgRkFUOiB1bnRlcm1pbmF0ZWQgY2hhaW4gZm9yICVzLiAgWW91IHNob3VsZCBydW4gZG9zZnNjayBvciBzY2FuZGlzay4iCittc2dzdHIgIiIKKyJGZWlsIHDlIEZBVDogZW5kZWxhdXMga2plZGUgZm9yICVzLiAgRHUgYvhyIGv4eXJlIGRvc2ZzY2sgZWxsZXIgc2NhbmRpc2suIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvdW50LmM6MTc0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiQmFkIEZBVDogY2x1c3RlciAlZCBvdXRzaWRlIGZpbGUgc3lzdGVtIGluIGNoYWluIGZvciAlcy4gIFlvdSBzaG91bGQgcnVuICIKKyJkb3Nmc2NrIG9yIHNjYW5kaXNrLiIKK21zZ3N0ciAiIgorIkZlaWwgcOUgRkFUOiBhbGxva2VyaW5nc2VpbmluZyAlZCBlciB1dGFuZm9yIGZpbHN5c3RlbWV0IGkga2plZGEgZm9yICVzLiAgRHUgIgorImL4ciBr+HlyYSBkb3Nmc2NrIGVsbGVyIHNjYW5kaXNrLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb3VudC5jOjE4NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQmFkIEZBVDogY2x1c3RlciAlZCBpcyBjcm9zcy1saW5rZWQgZm9yICVzLiAgWW91IHNob3VsZCBydW4gZG9zZnNjayBvciAiCisic2NhbmRpc2suIgorbXNnc3RyICIiCisiRmVpbCBw5SBGQVQ6IGFsbG9rZXJpbmdzZWluaW5nICVkIGVyIGtyeXNzbGVua2EgZm9yICVzLiAgRHUgYvhyIGv4eXJlICIKKyJkb3Nmc2NrIGVsbGVyIHNjYW5kaXNrLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb3VudC5jOjIwMworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyAlZGssIGJ1dCBpdCBoYXMgJWQgY2x1c3RlcnMgKCVkaykuIgorbXNnc3RyICIlcyBlciAlZCBLaUIsIG1lbiBoYXIgJWQgYWxsb2tlcmluZ3NlaW5pbmdhciAoJWQgS2lCKS4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY291bnQuYzoyNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmaWxlICVzIGlzIG1hcmtlZCBhcyBhIHN5c3RlbSBmaWxlLiAgVGhpcyBtZWFucyBtb3ZpbmcgaXQgY291bGQgY2F1c2UgIgorInNvbWUgcHJvZ3JhbXMgdG8gc3RvcCB3b3JraW5nLiIKK21zZ3N0ciAiIgorIkZpbGEgJXMgZXIga2xhc3NpZmlzZXJ0IHNvbSBlaSBzeXN0ZW1maWwuICDFIGZseXR0YSBkZW5uZSBmaWxhIGthbiBm+HJhIHRpbCAiCisiYXQgbm9rb24gcHJvZ3JhbSBzbHV0dGFyIOUgZnVuZ2VyYS4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvdGFibGUuYzoxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZBVCAlZCBtZWRpYSAleCBkb2Vzbid0IG1hdGNoIHRoZSBib290IHNlY3RvcidzIG1lZGlhICV4LiAgWW91IHNob3VsZCAiCisicHJvYmFibHkgcnVuIHNjYW5kaXNrLiIKK21zZ3N0ciAiIgorIkZBVCAlZCBtZWRpYSAleCBzdGVtbWVyIGlra2plIG92ZXJlaW5zIG1lZCBib290c2VrdG9yZW5zIG1lZGlhICV4LiAgRHUgYvhyICIKKyJzYW5uc3lubGVndmlzIGv4eXJhIHNjYW5kaXNrLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC90YWJsZS5jOjI2OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmF0X3RhYmxlX3NldDogY2x1c3RlciAlbGQgb3V0c2lkZSBmaWxlIHN5c3RlbSIKK21zZ3N0ciAiZmF0X3RhYmxlX3NldDogYWxsb2tlcmluZ3NlaW5pbmcgJWxkIHV0YW5mb3IgZmlsc3lzdGVtZXQiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvdGFibGUuYzozMDEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhdF90YWJsZV9nZXQ6IGNsdXN0ZXIgJWxkIG91dHNpZGUgZmlsZSBzeXN0ZW0iCittc2dzdHIgImZhdF90YWJsZV9nZXQ6IGFsbG9rZXJpbmdzZWluaW5nICVsZCB1dGFuZm9yIGZpbHN5c3RlbWV0IgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3RhYmxlLmM6MzQzCittc2dpZCAiZmF0X3RhYmxlX2FsbG9jX2NsdXN0ZXI6IG5vIGZyZWUgY2x1c3RlcnMiCittc2dzdHIgImZhdF90YWJsZV9hbGxvY19jbHVzdGVyOiBpbmdlbiBsZWRpZ2UgYWxsb2tlcmluZ3NlaW5pbmdhciIKKworIzogbGlicGFydGVkL2ZzL2xpbnV4X3N3YXAvbGludXhfc3dhcC5jOjI3NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVW5yZWNvZ25pc2VkIG9sZCBzdHlsZSBsaW51eCBzd2FwIHNpZ25hdHVyZSAnJTEwcycuIgorbXNnc3RyICJVa2plbnQgc3dhcC1zaWduYXR1ciBmb3IgTGludXggJyUxMHMnLiIKKworIzogbGlicGFydGVkL2ZzL2xpbnV4X3N3YXAvbGludXhfc3dhcC5jOjMxOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVW5yZWNvZ25pc2VkIG5ldyBzdHlsZSBsaW51eCBzd2FwIHNpZ25hdHVyZSAnJTEwcycuIgorbXNnc3RyICJVa2plbnQgc3dhcC1zaWduYXR1ciBmb3IgTGludXggJyUxMHMnLiIKKworIzogbGlicGFydGVkL2ZzL2xpbnV4X3N3YXAvbGludXhfc3dhcC5jOjM1OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVW5yZWNvZ25pc2VkIHN3c3VzcCBsaW51eCBzd2FwIHNpZ25hdHVyZSAnJTlzJy4iCittc2dzdHIgIlVramVudCBzd2FwLXNpZ25hdHVyIGZvciBMaW51eCAnJTEwcycuIgorCisjOiBsaWJwYXJ0ZWQvZnMvbGludXhfc3dhcC9saW51eF9zd2FwLmM6NDM0Cittc2dpZCAiVG9vIG1hbnkgYmFkIHBhZ2VzLiIKK21zZ3N0ciAiRm9yIG1hbmdlIGTlcmxlZ2Ugc2lkZXIuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2FkdmZzLmM6MTIxIGxpYnBhcnRlZC9mcy9oZnMvYWR2ZnNfcGx1cy5jOjEyMgorIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjQxNCBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NTA4CisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo1MzkgbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NjU4CisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo3NzIKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gY29udGFpbnMgZXJyb3JzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2FkdmZzX3BsdXMuYzoyODcKK21zZ2lkICJCYWQgYmxvY2tzIGNvdWxkIG5vdCBiZSByZWFkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2NhY2hlLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUcnlpbmcgdG8gcmVnaXN0ZXIgYW4gZXh0ZW50IHN0YXJ0aW5nIGF0IGJsb2NrIDB4JVgsIGJ1dCBhbm90aGVyIG9uZSBhbHJlYWR5ICIKKyJleGlzdHMgYXQgdGhpcyBwb3NpdGlvbi4gIFlvdSBzaG91bGQgY2hlY2sgdGhlIGZpbGUgc3lzdGVtISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2NhY2hlLmM6MjE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUcnlpbmcgdG8gbW92ZSBhbiBleHRlbnQgZnJvbSBibG9jayBPeCVYIHRvIGJsb2NrIE94JVgsIGJ1dCBhbm90aGVyIG9uZSAiCisiYWxyZWFkeSBleGlzdHMgYXQgdGhpcyBwb3NpdGlvbi4gIFRoaXMgc2hvdWxkIG5vdCBoYXBwZW4hIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZS5jOjE0MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgdXBkYXRlIHRoZSBleHRlbnQgY2FjaGUgZm9yIEhGUyBmaWxlIHdpdGggQ05JRCAlWC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlLmM6MTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyB0byByZWFkIEhGUyBmaWxlIHdpdGggQ05JRCAlWCBiZWhpbmQgRU9GLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGUuYzoxOTAgbGlicGFydGVkL2ZzL2hmcy9maWxlLmM6MjIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIHNlY3RvciAlbGxpIG9mIEhGUyBmaWxlIHdpdGggQ05JRCAlWC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlLmM6MjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyB0byB3cml0ZSBIRlMgZmlsZSB3aXRoIENOSUQgJVggYmVoaW5kIEVPRi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlX3BsdXMuYzoxNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHVwZGF0ZSB0aGUgZXh0ZW50IGNhY2hlIGZvciBIRlMrIGZpbGUgd2l0aCBDTklEICVYLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGVfcGx1cy5jOjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgdG8gcmVhZCBIRlMrIGZpbGUgd2l0aCBDTklEICVYIGJlaGluZCBFT0YuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZV9wbHVzLmM6MjEzIGxpYnBhcnRlZC9mcy9oZnMvZmlsZV9wbHVzLmM6MjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIHNlY3RvciAlbGxpIG9mIEhGUysgZmlsZSB3aXRoIENOSUQgJVguIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZV9wbHVzLmM6MjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyB0byB3cml0ZSBIRlMrIGZpbGUgd2l0aCBDTklEICVYIGJlaGluZCBFT0YuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MjMyCittc2dpZCAiU29ycnksIEhGUyBjYW5ub3QgYmUgcmVzaXplZCB0aGF0IHdheSB5ZXQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MjYyIGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NjQxCittc2dpZCAiRGF0YSByZWxvY2F0aW9uIGhhcyBmYWlsZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MjgxCittc2dpZCAiRGF0YSByZWxvY2F0aW9uIGxlZnQgc29tZSBkYXRhIGluIHRoZSBlbmQgb2YgdGhlIHZvbHVtZS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzozMjAKKyMsIGZ1enp5Cittc2dpZCAid3JpdGluZyBIRlMgTWFzdGVyIERpcmVjdG9yeSBCbG9jayIKK21zZ3N0ciAiRmVpbCB2ZWQgc2tyaXZpbmcgdGlsIHRvcHBrYXRhbG9nZW4uIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjQ2OAorbXNnaWQgIk5vIHZhbGlkIEhGU1srWF0gc2lnbmF0dXJlIGhhcyBiZWVuIGZvdW5kIHdoaWxlIG9wZW5pbmcuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NDc4CisjLCBjLWZvcm1hdAorbXNnaWQgIlZlcnNpb24gJWQgb2YgSEZTKyBpc24ndCBzdXBwb3J0ZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NDg5CisjLCBjLWZvcm1hdAorbXNnaWQgIlZlcnNpb24gJWQgb2YgSEZTWCBpc24ndCBzdXBwb3J0ZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NjcyCittc2dpZCAiRGF0YSByZWxvY2F0aW9uIGxlZnQgc29tZSBkYXRhIGF0IHRoZSBlbmQgb2YgdGhlIHZvbHVtZS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo3MjAKKyMsIGZ1enp5Cittc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0aGUgYWxsb2NhdGlvbiBmaWxlLiIKK21zZ3N0ciAiRmVpbCB2ZWQgc2tyaXZpbmcgdGlsIHRvcHBrYXRhbG9nZW4uIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjczNQorbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdGhlIGNvbXBhdGliaWxpdHkgcGFydCBvZiB0aGUgYWxsb2NhdGlvbiBmaWxlLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjc1MAorbXNnaWQgIndyaXRpbmcgSEZTKyBWb2x1bWUgSGVhZGVyIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6ODUwCittc2dpZCAiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgbG9va2luZyBmb3IgdGhlIG1hbmRhdG9yeSBiYWQgYmxvY2tzIGZpbGUuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6OTA0Cittc2dpZCAiIgorIkl0IHNlZW1zIHRoZXJlIGlzIGFuIGVycm9yIGluIHRoZSBIRlMgd3JhcHBlcjogdGhlIGJhZCBibG9ja3MgZmlsZSBkb2Vzbid0ICIKKyJjb250YWluIHRoZSBlbWJlZGRlZCBIRlMrIHZvbHVtZS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo5NDAKK21zZ2lkICJTb3JyeSwgSEZTKyBjYW5ub3QgYmUgcmVzaXplZCB0aGF0IHdheSB5ZXQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6OTc1Cittc2dpZCAic2hyaW5raW5nIGVtYmVkZGVkIEhGUysgdm9sdW1lIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6OTkxCittc2dpZCAiUmVzaXppbmcgdGhlIEhGUysgdm9sdW1lIGhhcyBmYWlsZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6OTk4CisjLCBmdXp6eQorbXNnaWQgInNocmlua2luZyBIRlMgd3JhcHBlciIKK21zZ3N0ciAia3J5bXBhciIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzoxMDA3Cittc2dpZCAiVXBkYXRpbmcgdGhlIEhGUyB3cmFwcGVyIGhhcyBmYWlsZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MTEwOSBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjExOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgaXMgbm90IGEgcmVhbCAlcyBjaGVjay4gIFRoaXMgaXMgZ29pbmcgdG8gZXh0cmFjdCBzcGVjaWFsIGxvdyBsZXZlbCAiCisiZmlsZXMgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MTU1Cittc2dpZCAiQmFkIGJsb2NrIGxpc3QgaGVhZGVyIGNoZWNrc3VtLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzoxNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkludmFsaWQgc2l6ZSBvZiBhIHRyYW5zYWN0aW9uIGJsb2NrIHdoaWxlIHJlcGxheWluZyB0aGUgam91cm5hbCAoJWkgYnl0ZXMpLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzoyNjAKK21zZ2lkICIiCisiSm91cm5hbCBzdG9yZWQgb3V0c2lkZSBvZiB0aGUgdm9sdW1lIGFyZSBub3Qgc3VwcG9ydGVkLiAgVHJ5IHRvIGRlc2FjdGl2YXRlICIKKyJ0aGUgam91cm5hbCBhbmQgcnVuIFBhcnRlZCBhZ2Fpbi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MjcxCisjLCBmdXp6eQorbXNnaWQgIkpvdXJuYWwgb2Zmc2V0IG9yIHNpemUgaXMgbm90IG11bHRpcGxlIG9mIHRoZSBzZWN0b3Igc2l6ZS4iCittc2dzdHIgIiIKKyJBbGxva2VyaW5nc2VpbmluZ2Egc2l0dCBzdGFydGRlbHRhIGVyICVkLCBvZyBkZXQgZXIgaWtramUgZWl0IG11bHRpcGx1bSBhdiAiCisic3RvcmxlaWtlbiAlZC4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjI5MgorbXNnaWQgIkluY29ycmVjdCBtYWdpYyB2YWx1ZXMgaW4gdGhlIGpvdXJuYWwgaGVhZGVyLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozMDIKK21zZ2lkICJKb3VybmFsIHNpemUgbWlzbWF0Y2ggYmV0d2VlbiBqb3VybmFsIGluZm8gYmxvY2sgYW5kIGpvdXJuYWwgaGVhZGVyLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozMTQKKyMsIGZ1enp5Cittc2dpZCAiU29tZSBoZWFkZXIgZmllbGRzIGFyZSBub3QgbXVsdGlwbGUgb2YgdGhlIHNlY3RvciBzaXplLiIKK21zZ3N0ciAiIgorIkFsbG9rZXJpbmdzZWluaW5nYSBzaXR0IHN0YXJ0ZGVsdGEgZXIgJWQsIG9nIGRldCBlciBpa2tqZSBlaXQgbXVsdGlwbHVtIGF2ICIKKyJzdG9ybGVpa2VuICVkLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MzIzCittc2dpZCAiIgorIlRoZSBzZWN0b3Igc2l6ZSBzdG9yZWQgaW4gdGhlIGpvdXJuYWwgaXMgbm90IDUxMiBieXRlcy4gIFBhcnRlZCBvbmx5ICIKKyJzdXBwb3J0cyA1MTIgYnl0ZXMgbGVuZ3RoIHNlY3RvcnMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjMzNQorbXNnaWQgIkJhZCBqb3VybmFsIGNoZWNrc3VtLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozNTMKK21zZ2lkICIiCisiVGhlIGpvdXJuYWwgaXMgbm90IGVtcHR5LiAgUGFydGVkIG11c3QgcmVwbGF5IHRoZSB0cmFuc2FjdGlvbnMgYmVmb3JlICIKKyJvcGVuaW5nIHRoZSBmaWxlIHN5c3RlbS4gIFRoaXMgd2lsbCBtb2RpZnkgdGhlIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozODEKK21zZ2lkICIiCisiVGhlIHZvbHVtZSBoZWFkZXIgb3IgdGhlIG1hc3RlciBkaXJlY3RvcnkgYmxvY2sgaGFzIGNoYW5nZWQgd2hpbGUgcmVwbGF5aW5nICIKKyJ0aGUgam91cm5hbC4gIFlvdSBzaG91bGQgcmVzdGFydCBQYXJ0ZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcHJvYmUuYzo1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGFydGVkIGNhbid0IHVzZSBIRlMgZmlsZSBzeXN0ZW1zIG9uIGRpc2tzIHdpdGggYSBzZWN0b3Igc2l6ZSBub3QgZXF1YWwgdG8gJSIKKyJkIGJ5dGVzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6MTUxIGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjE1NQorbXNnaWQgIkFuIGV4dGVudCBoYXMgbm90IGJlZW4gcmVsb2NhdGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6MjUxIGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjMwNworbXNnaWQgIiIKKyJBIHJlZmVyZW5jZSB0byBhbiBleHRlbnQgY29tZXMgZnJvbSBhIHBsYWNlIGl0IHNob3VsZCBub3QuICBZb3Ugc2hvdWxkIGNoZWNrICIKKyJ0aGUgZmlsZSBzeXN0ZW0hIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzozODEKK21zZ2lkICJUaGlzIEhGUyB2b2x1bWUgaGFzIG5vIGNhdGFsb2cgZmlsZS4gIFRoaXMgaXMgdmVyeSB1bnVzdWFsISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NDc1Cittc2dpZCAiVGhpcyBIRlMgdm9sdW1lIGhhcyBubyBleHRlbnRzIG92ZXJmbG93IGZpbGUuICBUaGlzIGlzIHF1aXRlIHVudXN1YWwhIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzo1MTcgbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NjY4Cittc2dpZCAiIgorIlRoZSBleHRlbnRzIG92ZXJmbG93IGZpbGUgc2hvdWxkIG5vdCBjb250YWluIGl0cyBvd24gZXh0ZW50cyEgIFlvdSBzaG91bGQgIgorImNoZWNrIHRoZSBmaWxlIHN5c3RlbS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjU3NCBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo4NDcKKyMsIGZ1enp5Cittc2dpZCAiQ291bGQgbm90IGNhY2hlIHRoZSBmaWxlIHN5c3RlbSBpbiBtZW1vcnkuIgorbXNnc3RyICJLYW4gaWtramUga2plbm5hIGlnamVuIG5va28gZmlsc3lzdGVtLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjYzNSBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo5MDgKK21zZ2lkICJCYWQgYmxvY2tzIGxpc3QgY291bGQgbm90IGJlIGxvYWRlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjY0OSBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo5MjQKK21zZ2lkICJBbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgZXh0ZW50IHJlbG9jYXRpb24uIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjQ5NQorbXNnaWQgIlRoaXMgSEZTKyB2b2x1bWUgaGFzIG5vIGNhdGFsb2cgZmlsZS4gIFRoaXMgaXMgdmVyeSB1bnVzdWFsISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo2MTkKK21zZ2lkICJUaGlzIEhGUysgdm9sdW1lIGhhcyBubyBleHRlbnRzIG92ZXJmbG93IGZpbGUuICBUaGlzIGlzIHF1aXRlIHVudXN1YWwhIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo5NAorbXNnaWQgImRpc3BsYXlzIHRoaXMgaGVscCBtZXNzYWdlIgorbXNnc3RyICJ2aXMgZGVubmUgaGplbHBldGVrc3RlbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjk1Cittc2dpZCAibGlzdHMgcGFydGl0aW9uIGxheW91dCBvbiBhbGwgYmxvY2sgZGV2aWNlcyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6OTYKK21zZ2lkICJkaXNwbGF5cyBtYWNoaW5lIHBhcnNlYWJsZSBvdXRwdXQiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjk3Cittc2dpZCAibmV2ZXIgcHJvbXB0cyBmb3IgdXNlciBpbnRlcnZlbnRpb24iCittc2dzdHIgInNw+HIgYWxkcmkgYnJ1a2FyZW4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo5OAorbXNnaWQgImRpc3BsYXlzIHRoZSB2ZXJzaW9uIgorbXNnc3RyICJ2aXMgcHJvZ3JhbXZlcnNqb24iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMTEKKyMsIGZ1enp5Cittc2dpZCAiIgorIk5VTUJFUiBpcyB0aGUgcGFydGl0aW9uIG51bWJlciB1c2VkIGJ5IExpbnV4LiAgT24gTVMtRE9TIGRpc2sgbGFiZWxzLCB0aGUgIgorInByaW1hcnkgcGFydGl0aW9ucyBudW1iZXIgZnJvbSAxIHRvIDQsIGxvZ2ljYWwgcGFydGl0aW9ucyBmcm9tIDUgb253YXJkcy5cbiIKK21zZ3N0ciAiIgorIk5SIGVyIHBhcnRpc2pvbnNudW1tZXJldCBicnVrdCBhdiBMaW51eC4gIFDlIE1TLURPUy1kaXNrbGFiZWxzLCBlciAiCisicHJpbeZycGFydGlzam9uYXIgbnVtbWVyZXJ0IDEtNCwgb2cgbG9naXNrZSBwYXJ0aXNqb25hciBn5XIgZnLlIDUgb2cgIgorIm9wcG92ZXIuXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMTQKK21zZ2lkICJMQUJFTC1UWVBFIGlzIG9uZSBvZjogIgorbXNnc3RyICJMQUJFTC1UWVBFIGVyIGVpbiBhdjogIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTE1Cittc2dpZCAiRkxBRyBpcyBvbmUgb2Y6ICIKK21zZ3N0ciAiRkxBR0cgZXIgZWl0dCBhdjogIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTE2CisjLCBmdXp6eQorbXNnaWQgIlVOSVQgaXMgb25lIG9mOiAiCittc2dzdHIgIkZMQUdHIGVyIGVpdHQgYXY6ICIKKworIzogcGFydGVkL3BhcnRlZC5jOjExNworbXNnaWQgIlBBUlQtVFlQRSBpcyBvbmUgb2Y6IHByaW1hcnksIGxvZ2ljYWwsIGV4dGVuZGVkXG4iCittc2dzdHIgIlBBUlQtVFlQRSBlciBlaW4gYXY6IHByaW3mciwgbG9naXNrLCB1dHZpZGluZ1xuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTE5Cittc2dpZCAiRlMtVFlQRSBpcyBvbmUgb2Y6ICIKK21zZ3N0ciAiRlMtVFlQRSBlciBlaW4gYXY6ICIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMAorIywgZnV6enkKK21zZ2lkICIiCisiU1RBUlQgYW5kIEVORCBhcmUgZGlzayBsb2NhdGlvbnMsIHN1Y2ggYXMgNEdCIG9yIDEwJS4gIE5lZ2F0aXZlIHZhbHVlcyBjb3VudCAiCisiZnJvbSB0aGUgZW5kIG9mIHRoZSBkaXNrLiAgRm9yIGV4YW1wbGUsIC0xcyBzcGVjaWZpZXMgZXhhY3RseSB0aGUgbGFzdCAiCisic2VjdG9yLlxuIgorbXNnc3RyICIiCisiU1RBUlQgb2cgU0xVVFQgZXIgaSBtZWJpYnl0ZXMuICBOZWdhdGl2ZSB2ZXJkaWFyIHRlbCBmcuUgc2x1dHRlbiBhdiBkaXNrZW4uXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjMKK21zZ2lkICJTVEFURSBpcyBvbmUgb2Y6IG9uLCBvZmZcbiIKK21zZ3N0ciAiU1RBVFVTIGVyIGVpbiBhdjogYXYsIHDlXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjQKK21zZ2lkICJERVZJQ0UgaXMgdXN1YWxseSAvZGV2L2hkYSBvciAvZGV2L3NkYVxuIgorbXNnc3RyICJFSU5JTkcgZXIgdmFubGVndmlzIC9kZXYvaGRhIGVsbGVyIC9kZXYvc2RhXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjUKK21zZ2lkICJOQU1FIGlzIGFueSB3b3JkIHlvdSB3YW50XG4iCittc2dzdHIgIk5BTU4gZXIgZWl0IHZhbGZyaXR0IG9yZFxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTI2Cittc2dpZCAiVGhlIHBhcnRpdGlvbiBtdXN0IGhhdmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgRlMtVFlQRXM6ICIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTMwCisjLCBmdXp6eQorbXNnaWQgIiIKKyJDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLlxuIgorIlRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlLCBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS5cbiIKKyJcbiIKKyJUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiIKKyJidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuIgorIk1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbiIKKyJHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuIgorIlxuIgorbXNnc3RyICIiCisiKEZ5bGdqYW5kZSB0ZWtzdCBlciBlaSBvbXNldGppbmcgc29tICprdW4qIHZlcnQgZ2pldmUgcOUgaW5mb3JtYXRpdiBiYXNpcy4gICIKKyJGb3IgYWxsZSBqdXJpZGlza2UgdG9sa2luZ2FyIGdqZWxkIGRlbiBlbmdlbHNrZSBvcmlnaW5hbHRla3N0ZW4uKVxuIgorIlxuIgorIkNvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy5cbiIKKyJEZXR0ZSBwcm9ncmFtbWV0IGVyIGZyaSBwcm9ncmFtdmFyZSwgZGVrdCBhdiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS5cbiIKKyJcbiIKKyJEZXR0ZSBwcm9ncmFtbWV0IHZlcnQgZGlzdHJpYnVlcnQgbWVkIHZvbiBvbSBhdCBkZXQgdmlsIHZlcmEgbnl0dGlnLCBtZW4gIgorInV0YW4gTk9LQSBGT1JNIEZPUiBnYXJhbnRpOyBpa2tqZSBlaW5nb25nIGZvciBhdCBwcm9kdWt0ZXQgZXIgZWlnbmEgZm9yIFNBTCAiCisiZWxsZXIgQlJVSyBUSUwgTk9LTyBGT1JNxUwuICBTauUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIGRldGFsamFyLlxuIgorIlxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiUwLmYlJVx0KHRpbWUgbGVmdCAlLjJkOiUuMmQpIgorbXNnc3RyICIlMC5mJSVcdCh0aWQgYXR0ICUuMmQ6JS4yZCkiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBhcnRpdGlvbiAlcyBpcyBiZWluZyB1c2VkLiBZb3UgbXVzdCB1bm1vdW50IGl0IGJlZm9yZSB5b3UgbW9kaWZ5IGl0IHdpdGggIgorIlBhcnRlZC4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICJQYXJ0aXRpb24ocykgb24gJXMgYXJlIGJlaW5nIHVzZWQuIgorbXNnc3RyICJQYXJ0aXNqb24oYW5lKSBw5SAlcyBlciBpIGJydWsuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIzCittc2dpZCAiIgorIlRoZSBleGlzdGluZyBmaWxlIHN5c3RlbSB3aWxsIGJlIGRlc3Ryb3llZCBhbmQgYWxsIGRhdGEgb24gdGhlIHBhcnRpdGlvbiAiCisid2lsbCBiZSBsb3N0LiBEbyB5b3Ugd2FudCB0byBjb250aW51ZT8iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIzNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGV4aXN0aW5nIGRpc2sgbGFiZWwgb24gJXMgd2lsbCBiZSBkZXN0cm95ZWQgYW5kIGFsbCBkYXRhIG9uIHRoaXMgZGlzayAiCisid2lsbCBiZSBsb3N0LiBEbyB5b3Ugd2FudCB0byBjb250aW51ZT8iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjQ1OCBwYXJ0ZWQvcGFydGVkLmM6NjUyIHBhcnRlZC9wYXJ0ZWQuYzoxMDQ0CisjOiBwYXJ0ZWQvcGFydGVkLmM6MTEyOCBwYXJ0ZWQvcGFydGVkLmM6MTc3MSBwYXJ0ZWQvcGFydGVkLmM6MTg1MgorIzogcGFydGVkL3BhcnRlZC5jOjE5MDAKK21zZ2lkICJQYXJ0aXRpb24gbnVtYmVyPyIKK21zZ3N0ciAiUGFydGlzam9uc251bW1lcj8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo1MDAKK21zZ2lkICJTb3VyY2UgZGV2aWNlPyIKK21zZ3N0ciAiS3ZhIGVpbmluZyBza2FsIHZlcmEga2plbGRhPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjUwNAorbXNnaWQgIlNvdXJjZSBwYXJ0aXRpb24gbnVtYmVyPyIKK21zZ3N0ciAiS3ZhIHBhcnRpc2pvbnNudW1tZXIgc2thbCB2ZXJhIGtqZWxkYT8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo1MDkKKyMsIGZ1enp5Cittc2dpZCAiQ2FuJ3QgY29weSBhbiBleHRlbmRlZCBwYXJ0aXRpb24uIgorbXNnc3RyICJLYW4gaWtramUga29waWVyYSB1dHZpZGluZ3NwYXJ0aXNqb25hci4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo1MTUKK21zZ2lkICJEZXN0aW5hdGlvbiBwYXJ0aXRpb24gbnVtYmVyPyIKK21zZ3N0ciAiS3ZhIHBhcnRpc2pvbnNudW1tZXIgZXIgbeVsZXQ/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NjE1Cittc2dpZCAiTmV3IGRpc2sgbGFiZWwgdHlwZT8iCittc2dzdHIgIk55IGRpc2tsYWJlbC10eXBlPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjY1NgorbXNnaWQgIkZpbGUgc3lzdGVtPyIKK21zZ3N0ciAiRmlsc3lzdGVtPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjcwNyBwYXJ0ZWQvcGFydGVkLmM6ODc4Cittc2dpZCAiUGFydGl0aW9uIHR5cGU/IgorbXNnc3RyICJQYXJ0aXNqb25zdHlwZT8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo3MTQgcGFydGVkL3BhcnRlZC5jOjg4NSBwYXJ0ZWQvcGFydGVkLmM6MTEzMQorbXNnaWQgIlBhcnRpdGlvbiBuYW1lPyIKK21zZ3N0ciAiUGFydGlzam9uc25hbW4/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NzIyIHBhcnRlZC9wYXJ0ZWQuYzo4OTUKK21zZ2lkICJGaWxlIHN5c3RlbSB0eXBlPyIKK21zZ3N0ciAiRmlsc3lzdGVtdHlwZT8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo3MjkgcGFydGVkL3BhcnRlZC5jOjg5NyBwYXJ0ZWQvcGFydGVkLmM6MTA1OQorIzogcGFydGVkL3BhcnRlZC5jOjE3MjUgcGFydGVkL3BhcnRlZC5jOjE3ODAKK21zZ2lkICJTdGFydD8iCittc2dzdHIgIlN0YXJ0PyIKKworIzogcGFydGVkL3BhcnRlZC5jOjczMSBwYXJ0ZWQvcGFydGVkLmM6OTAwIHBhcnRlZC9wYXJ0ZWQuYzoxMDYyCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTcyNyBwYXJ0ZWQvcGFydGVkLmM6MTc4MgorbXNnaWQgIkVuZD8iCittc2dzdHIgIlNsdXR0PyIKKworIzogcGFydGVkL3BhcnRlZC5jOjc2OSBwYXJ0ZWQvcGFydGVkLmM6OTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgcmVxdWVzdGVkIGEgcGFydGl0aW9uIGZyb20gJXMgdG8gJXMuXG4iCisiVGhlIGNsb3Nlc3QgbG9jYXRpb24gd2UgY2FuIG1hbmFnZSBpcyAlcyB0byAlcy4gIElzIHRoaXMgc3RpbGwgYWNjZXB0YWJsZSB0byAiCisieW91PyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6ODkwCisjLCBmdXp6eQorbXNnaWQgIkFuIGV4dGVuZGVkIHBhcnRpdGlvbiBjYW5ub3QgaG9sZCBhIGZpbGUgc3lzdGVtLiAgRGlkIHlvdSB3YW50IG1rcGFydD8iCittc2dzdHIgIlV0dmlkaW5nc3BhcnRpc2pvbmFyIGthbiBpa2tqZSBoYSBmaWxzeXN0ZW0uICBNZWludGUgZHUgbWtwYXJ0PyIKKworIzogcGFydGVkL3BhcnRlZC5jOjEwNTAKKyMsIGZ1enp5Cittc2dpZCAiQ2FuJ3QgbW92ZSBhbiBleHRlbmRlZCBwYXJ0aXRpb24uIgorbXNnc3RyICJLYW4gaWtramUgZmx5dHRhIHV0dmlkaW5nc3BhcnRpc2pvbmFyLiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEwNzkKK21zZ2lkICJDYW4ndCBtb3ZlIGEgcGFydGl0aW9uIG9udG8gaXRzZWxmLiAgVHJ5IHVzaW5nIHJlc2l6ZSwgcGVyaGFwcz8iCittc2dzdHIgIiIKKyJLYW4gaWtramUgZmx5dHRhIGVpbiBwYXJ0aXNqb24gdGlsIHNlZyBzavhsdi4gIEthbnNramUgZHUgdmlsIHBy+HZhIOUgZW5kcmEgIgorInN0b3JsZWlrPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlub3I6ICVkXG4iCittc2dzdHIgIk51bW1lcjogJWRcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMjgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkZsYWdzOiAlc1xuIgorbXNnc3RyICJGbGFnZzogIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIyOQorIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlIFN5c3RlbTogJXNcbiIKK21zZ3N0ciAiRmlsc3lzdGVtOiAlc1xuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIzMAorIywgZnV6enkKK21zZ2lkICJTaXplOiAgICAgICAgICIKK21zZ3N0ciAiU3RvcmxlaWs6ICAgICAgICAgJTEwLjNmTWlCICglZCUlKVxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIzNQorIywgZnV6enkKK21zZ2lkICJNaW5pbXVtIHNpemU6ICIKK21zZ3N0ciAiTWluc3RlIHN0b3JsZWlrOiAgJTEwLjNmTWlCICglZCUlKVxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIzOAorIywgZnV6enkKK21zZ2lkICJNYXhpbXVtIHNpemU6ICIKK21zZ3N0ciAiU3T4cnN0ZSBzdG9ybGVpazogJTEwLjNmTWlCICglZCUlKVxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJNb2RlbDogJXMgKCVzKVxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMzY0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJEaXNrICVzOiAlc1xuIgorbXNnc3RyICIlcyAgJXMgICVzIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTM2NQorIywgYy1mb3JtYXQKK21zZ2lkICJTZWN0b3Igc2l6ZSAobG9naWNhbC9waHlzaWNhbCk6ICVsbGRCLyVsbGRCXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEzODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQklPUyBjeWxpbmRlcixoZWFkLHNlY3RvciBnZW9tZXRyeTogJWQsJWQsJWQuICBFYWNoIGN5bGluZGVyIGlzICVzLlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMzkyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJQYXJ0aXRpb24gVGFibGU6ICVzXG4iCittc2dzdHIgIlBhcnRpc2pvbnNuYW1uPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MDYgcGFydGVkL3BhcnRlZC5jOjE0MDkKK21zZ2lkICJOdW1iZXIiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MDYgcGFydGVkL3BhcnRlZC5jOjE0MDkKKyMsIGZ1enp5Cittc2dpZCAiU3RhcnQiCittc2dzdHIgIlN0YXJ0PyIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MDcgcGFydGVkL3BhcnRlZC5jOjE0MTAKKyMsIGZ1enp5Cittc2dpZCAiRW5kIgorbXNnc3RyICJTbHV0dD8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDEwCisjLCBmdXp6eQorbXNnaWQgIlNpemUiCittc2dzdHIgInJlc2l6ZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MTQKK21zZ2lkICJUeXBlIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDE2CisjLCBmdXp6eQorbXNnaWQgIkZpbGUgc3lzdGVtIgorbXNnc3RyICJGaWxzeXN0ZW0/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQxOQorIywgZnV6enkKK21zZ2lkICJOYW1lIgorbXNnc3RyICJuYW1lIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQyMQorbXNnaWQgIkZsYWdzIgorbXNnc3RyICJGbGFnZyIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0NzcKK21zZ2lkICJGcmVlIFNwYWNlIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNjI0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiQSAlcyAlcyBwYXJ0aXRpb24gd2FzIGZvdW5kIGF0ICVzIC0+ICVzLiAgRG8geW91IHdhbnQgdG8gYWRkIGl0IHRvIHRoZSAiCisicGFydGl0aW9uIHRhYmxlPyIKK21zZ3N0ciAiIgorIkVpbiAlcyAlcy1wYXJ0aXNqb24gdmFydCBmdW5uZW4gcOUgJS4zZiBNaUIgLT4gJS4zZiBNaUIuICDYbnNramVyIGR1IOUgIgorImxlZ2dqYSBoYW4gdGlsIGkgcGFydGlzam9uc3RhYmVsbGVuPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjE2NjMKK21zZ2lkICJzZWFyY2hpbmcgZm9yIGZpbGUgc3lzdGVtcyIKK21zZ3N0ciAibGVpdGFyIGV0dGVyIGZpbHN5c3RlbSIKKworIzogcGFydGVkL3BhcnRlZC5jOjE4NzcKK21zZ2lkICJOZXcgZGV2aWNlPyIKK21zZ3N0ciAiTnkgZWluaW5nPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjE5MDIKKyMsIGZ1enp5Cittc2dpZCAiRmxhZyB0byBJbnZlcnQ/IgorbXNnc3RyICJGbGFnZyBzb20gc2thbCBlbmRyYXN0PyIKKworIzogcGFydGVkL3BhcnRlZC5jOjE5MDcKK21zZ2lkICJOZXcgc3RhdGU/IgorbXNnc3RyICJOeSBzdGF0dXM/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTk0NAorbXNnaWQgIlVuaXQ/IgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMDkzCittc2dpZCAiY2hlY2siCittc2dzdHIgImNoZWNrIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjA5NgorIywgZnV6enkKK21zZ2lkICIiCisiY2hlY2sgTlVNQkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyBhIHNpbXBsZSBjaGVjayBvbiB0aGUgZmlsZSBzeXN0ZW0iCittc2dzdHIgIiIKKyJjaGVjayBOUiAgICAgICAgICAgICAgICAgICAgICB0YSBlaW4gZW5rZWwga29uc2lzdGVuc3NqZWtrIGF2IGZpbHN5c3RlbWV0IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEwMgorbXNnaWQgImNwIgorbXNnc3RyICJjcCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMDUKKyMsIGZ1enp5Cittc2dpZCAiIgorImNwIFtGUk9NLURFVklDRV0gRlJPTS1OVU1CRVIgVE8tTlVNQkVSICAgY29weSBmaWxlIHN5c3RlbSB0byBhbm90aGVyICIKKyJwYXJ0aXRpb24iCittc2dzdHIgIiIKKyJjcCBbRlLFLUVJTklOR10gRlLFLU5SIFRJTC1OUiAgICAgIGtvcGllciBmaWxzeXN0ZW0gdGlsIGVpbiBhbm5hbiBwYXJ0aXNqb24iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTExCittc2dpZCAiaGVscCIKK21zZ3N0ciAiaGVscCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMTQKKyMsIGZ1enp5Cittc2dpZCAiIgorImhlbHAgW0NPTU1BTkRdICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgZ2VuZXJhbCBoZWxwLCBvciBoZWxwIG9uICIKKyJDT01NQU5EIgorbXNnc3RyICIiCisiaGVscCBbS09NTUFORE9dICAgICAgICAgICAgICAgZ2pldiBnZW5lcmVsbCBoamVscCwgZWxsZXIgaGplbHAgb20gS09NTUFORE8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTIwCittc2dpZCAibWtsYWJlbCIKK21zZ3N0ciAibWtsYWJlbCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMjAKKyMsIGZ1enp5Cittc2dpZCAibWt0YWJsZSIKK21zZ3N0ciAibWtsYWJlbCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMjMKKyMsIGZ1enp5Cittc2dpZCAiIgorIm1rbGFiZWwsbWt0YWJsZSBMQUJFTC1UWVBFICAgICAgICAgICAgICAgY3JlYXRlIGEgbmV3IGRpc2tsYWJlbCAocGFydGl0aW9uICIKKyJ0YWJsZSkiCittc2dzdHIgIm1rbGFiZWwgTEFCRUwtVFlQRSAgICAgICAgICAgIGxhZyBueSBkaXNrbGFiZWwgKHBhcnRpc2pvbnN0YWJlbGwpIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEyOQorbXNnaWQgIm1rZnMiCittc2dzdHIgIm1rZnMiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTMyCisjLCBmdXp6eQorbXNnaWQgIiIKKyJta2ZzIE5VTUJFUiBGUy1UWVBFICAgICAgICAgICAgICAgICAgICAgIG1ha2UgYSBGUy1UWVBFIGZpbGUgc3lzdGVtIG9uICIKKyJwYXJ0aXRpdG9uIE5VTUJFUiIKK21zZ3N0ciAiIgorIm1rZnMgTlIgRlMtVFlQRSAgICAgICAgICAgICAgIGxhZyBlaXQgZmlsc3lzdGVtIGF2IEZTLVRZUEUgcOUgcGFydGlzam9uIE5SIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEzOAorbXNnaWQgIm1rcGFydCIKK21zZ3N0ciAibWtwYXJ0IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE0MQorIywgZnV6enkKK21zZ2lkICJta3BhcnQgUEFSVC1UWVBFIFtGUy1UWVBFXSBTVEFSVCBFTkQgICAgIG1ha2UgYSBwYXJ0aXRpb24iCittc2dzdHIgIm1rcGFydCBQQVJULVRZUEUgW0ZTLVRZUEVdIFNUQVJUIFNMVVRUICAgIGxhZyBlaW4gcGFydGlzam9uIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE0NworIywgZnV6enkKK21zZ2lkICIiCisiJ21rcGFydCcgbWFrZXMgYSBwYXJ0aXRpb24gd2l0aG91dCBjcmVhdGluZyBhIG5ldyBmaWxlIHN5c3RlbSBvbiB0aGUgIgorInBhcnRpdGlvbi4gIEZTLVRZUEUgbWF5IGJlIHNwZWNpZmllZCB0byBzZXQgYW4gYXBwcm9wcmlhdGUgcGFydGl0aW9uIElELlxuIgorbXNnc3RyICIiCisibWtwYXJ0IGxhZ2FyIGVpbiBwYXJ0aXNqb24gdXRhbiDlIGxhZ2EgZWl0IG55dHQgZmlsc3lzdGVtIGRlci4gIER1IGthbiAiCisic3Blc2lmaXNlcmEgRlMtVFlQRSBmb3Ig5SBzZXRqYSBlaW4gcGFzc2FuZGUgcGFydGlzam9ucy1pZC5cbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNTIKK21zZ2lkICJta3BhcnRmcyIKK21zZ3N0ciAibWtwYXJ0ZnMiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTU1CisjLCBmdXp6eQorbXNnaWQgIiIKKyJta3BhcnRmcyBQQVJULVRZUEUgRlMtVFlQRSBTVEFSVCBFTkQgICAgIG1ha2UgYSBwYXJ0aXRpb24gd2l0aCBhIGZpbGUgc3lzdGVtIgorbXNnc3RyICIiCisibWtwYXJ0ZnMgUEFSVC1UWVBFIEZTLVRZUEUgU1RBUlQgU0xVVFQgICAgbGFnIGVpbiBwYXJ0aXRpb24gbWVkIGVpdCBmaWxzeXN0ZW0iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTYxCittc2dpZCAibW92ZSIKK21zZ3N0ciAibW92ZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNjQKKyMsIGZ1enp5Cittc2dpZCAibW92ZSBOVU1CRVIgU1RBUlQgRU5EICAgICAgICAgICAgICAgICAgICBtb3ZlIHBhcnRpdGlvbiBOVU1CRVIiCittc2dzdHIgIm1vdmUgTlIgU1RBUlQgU0xVVFQgICAgICAgICAgIGZseXR0IHBhcnRpc2pvbmVuIE5SIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE2OQorbXNnaWQgIm5hbWUiCittc2dzdHIgIm5hbWUiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTcyCisjLCBmdXp6eQorbXNnaWQgIm5hbWUgTlVNQkVSIE5BTUUgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSBwYXJ0aXRpb24gTlVNQkVSIGFzIE5BTUUiCittc2dzdHIgIm5hbWUgTlIgTkFNTiAgICAgICAgICAgICAgICAgIGdqZSBwYXJ0aXNqb25lbiBOUiBuYW1uZXQgTkFNTiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNzcKK21zZ2lkICJwcmludCIKK21zZ3N0ciAicHJpbnQiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTgwCittc2dpZCAiIgorInByaW50IFtkZXZpY2VzfGZyZWV8bGlzdCxhbGx8TlVNQkVSXSAgICAgZGlzcGxheSB0aGUgcGFydGl0aW9uIHRhYmxlLCAiCisiYXZhaWxhYmxlIGRldmljZXMsIGZyZWUgc3BhY2UsIGFsbCBmb3VuZCBwYXJ0aXRpb25zLCBvciBhIHBhcnRpY3VsYXIgIgorInBhcnRpdGlvbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE4NQorbXNnaWQgIiIKKyJXaXRob3V0IGFyZ3VtZW50cywgJ3ByaW50JyBkaXNwbGF5cyB0aGUgZW50aXJlIHBhcnRpdGlvbiB0YWJsZS4gSG93ZXZlciB3aXRoICIKKyJ0aGUgZm9sbG93aW5nIGFyZ3VtZW50cyBpdCBwZXJmb3JtcyB2YXJpb3VzIG90aGVyIGFjdGlvbnMuXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxODcKK21zZ2lkICIgIGRldmljZXMgICA6IGRpc3BsYXkgYWxsIGFjdGl2ZSBibG9jayBkZXZpY2VzXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxODgKK21zZ2lkICIiCisiICBmcmVlICAgICAgOiBkaXNwbGF5IGluZm9ybWF0aW9uIGFib3V0IGZyZWUgdW5wYXJ0aXRpb25lZCBzcGFjZSBvbiB0aGUgIgorImN1cnJlbnQgYmxvY2sgZGV2aWNlXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxOTAKKyMsIGZ1enp5Cittc2dpZCAiIgorIiAgbGlzdCwgYWxsIDogZGlzcGxheSB0aGUgcGFydGl0aW9uIHRhYmxlcyBvZiBhbGwgYWN0aXZlIGJsb2NrIGRldmljZXNcbiIKK21zZ3N0ciAiIgorInByaW50IFtOUl0gICAgICAgICAgICAgICAgICAgIHZpcyBwYXJ0aXNqb25zdGFiZWxsZW4gZWxsZXIgZWluIHBhcnRpc2pvbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxOTEKK21zZ2lkICIiCisiICBOVU1CRVIgICAgOiBkaXNwbGF5IG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBwYXJ0aWN1bGFyICIKKyJwYXJ0aXRpb25cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE5NgorbXNnaWQgInF1aXQiCittc2dzdHIgInF1aXQiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTk5CisjLCBmdXp6eQorbXNnaWQgInF1aXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCBwcm9ncmFtIgorbXNnc3RyICJxdWl0ICAgICAgICAgICAgICAgICAgICAgICAgICBhdnNsdXR0IHByb2dyYW1tZXQiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjA0Cittc2dpZCAicmVzY3VlIgorbXNnc3RyICJyZXNjdWUiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjA3CisjLCBmdXp6eQorbXNnaWQgIiIKKyJyZXNjdWUgU1RBUlQgRU5EICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2N1ZSBhIGxvc3QgcGFydGl0aW9uIG5lYXIgU1RBUlQgIgorImFuZCBFTkQiCittc2dzdHIgIiIKKyJyZXNjdWUgU1RBUlQgU0xVVFQgICAgICAgICAgICByZWRkIHRhcHRlIHBhcnRpc2pvbmFyIG7mciBTVEFSVCBvZyBTTFVUVCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMTMKK21zZ2lkICJyZXNpemUiCittc2dzdHIgInJlc2l6ZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMTYKKyMsIGZ1enp5Cittc2dpZCAiIgorInJlc2l6ZSBOVU1CRVIgU1RBUlQgRU5EICAgICAgICAgICAgICAgICAgcmVzaXplIHBhcnRpdGlvbiBOVU1CRVIgYW5kIGl0cyAiCisiZmlsZSBzeXN0ZW0iCittc2dzdHIgIiIKKyJyZXNjdWUgU1RBUlQgU0xVVFQgICAgICAgICAgICByZWRkIHRhcHRlIHBhcnRpc2pvbmFyIG7mciBTVEFSVCBvZyBTTFVUVCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMjQKK21zZ2lkICJybSIKK21zZ3N0ciAicm0iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjI3CisjLCBmdXp6eQorbXNnaWQgInJtIE5VTUJFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHBhcnRpdGlvbiBOVU1CRVIiCittc2dzdHIgInJtIE5SICAgICAgICAgICAgICAgICAgICAgICAgIHNsZXR0IHBhcnRpc2pvbmVuIE5SIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIzMgorbXNnaWQgInNlbGVjdCIKK21zZ3N0ciAic2VsZWN0IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIzNQorIywgZnV6enkKK21zZ2lkICJzZWxlY3QgREVWSUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNob29zZSB0aGUgZGV2aWNlIHRvIGVkaXQiCittc2dzdHIgInNlbGVjdCBFSU5JTkcgICAgICAgICAgICAgICAgIHZlbCBlaW5pbmdhIGR1IHZpbCBnamVyYSBlbmRyaW5nYXIgcOUiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjQwCittc2dpZCAic2V0IgorbXNnc3RyICJzZXQiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjQzCisjLCBmdXp6eQorbXNnaWQgIiIKKyJzZXQgTlVNQkVSIEZMQUcgU1RBVEUgICAgICAgICAgICAgICAgICAgIGNoYW5nZSB0aGUgRkxBRyBvbiBwYXJ0aXRpb24gTlVNQkVSIgorbXNnc3RyICJzZXQgTlIgRkxBR0cgU1RBVFVTICAgICAgICAgICBlbmRyYSBlaXQgZmxhZ2cgcOUgcGFydGlzam9uZW4gTlIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjQ5Cittc2dpZCAidG9nZ2xlIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjUyCittc2dpZCAiIgorInRvZ2dsZSBbTlVNQkVSIFtGTEFHXV0gICAgICAgICAgICAgICAgICAgdG9nZ2xlIHRoZSBzdGF0ZSBvZiBGTEFHIG9uICIKKyJwYXJ0aXRpb24gTlVNQkVSIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjU4CisjLCBmdXp6eQorbXNnaWQgInVuaXQiCittc2dzdHIgInF1aXQiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjYxCisjLCBmdXp6eQorbXNnaWQgInVuaXQgVU5JVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0IHRoZSBkZWZhdWx0IHVuaXQgdG8gVU5JVCIKK21zZ3N0ciAicXVpdCAgICAgICAgICAgICAgICAgICAgICAgICAgYXZzbHV0dCBwcm9ncmFtbWV0IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI2NgorbXNnaWQgInZlcnNpb24iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNjkKK21zZ2lkICIiCisidmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5IHRoZSB2ZXJzaW9uIG51bWJlciBhbmQgIgorImNvcHlyaWdodCBpbmZvcm1hdGlvbiBvZiBHTlUgUGFydGVkIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjczCittc2dpZCAiIgorIid2ZXJzaW9uJyBkaXNwbGF5cyBjb3B5cmlnaHQgYW5kIHZlcnNpb24gaW5mb3JtYXRpb24gY29ycmVzcG9uZGluZyB0byB0aGlzICIKKyJjb3B5IG9mIEdOVSBQYXJ0ZWRcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjMzNQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1obG1zdl0gW0RFVklDRSBbQ09NTUFORCBbUEFSQU1FVEVSU11dLi4uXVxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMzc5Cittc2dpZCAiTm8gZGV2aWNlIGZvdW5kIgorbXNnc3RyICJJbmdlbiBkaXNrYXIgZnVubmUiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyNDEyCittc2dpZCAiV0FSTklORzogWW91IGFyZSBub3Qgc3VwZXJ1c2VyLiAgV2F0Y2ggb3V0IGZvciBwZXJtaXNzaW9ucy4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjI0NTAKKyMsIGZ1enp5Cittc2dpZCAiWW91IG1heSBuZWVkIHRvIHVwZGF0ZSAvZXRjL2ZzdGFiLlxuIgorbXNnc3RyICJHbPh5bSBpa2tqZSDlIG9wcGRhdGVyYSAvZXRjL2ZzdGFiLCBvbSBuYXVkc3ludC5cbiIKKworIzogcGFydGVkL3VpLmM6MTYwCittc2dpZCAiV2VsY29tZSB0byBHTlUgUGFydGVkISBUeXBlICdoZWxwJyB0byB2aWV3IGEgbGlzdCBvZiBjb21tYW5kcy5cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzoxNjMKKyMsIGZ1enp5Cittc2dpZCAiIgorIlVzYWdlOiBwYXJ0ZWQgW09QVElPTl0uLi4gW0RFVklDRSBbQ09NTUFORCBbUEFSQU1FVEVSU10uLi5dLi4uXVxuIgorIkFwcGx5IENPTU1BTkRzIHdpdGggUEFSQU1FVEVSUyB0byBERVZJQ0UuICBJZiBubyBDT01NQU5EKHMpIGFyZSBnaXZlbiwgcnVuICIKKyJpblxuIgorImludGVyYWN0aXZlIG1vZGUuXG4iCittc2dzdHIgIiIKKyJCcnVrOiBwYXJ0ZWQgW0ZMQUdHXS4uLiBbRUlOSU5HIFtLT01NQU5ETyBbUEFSQU1FVEVSXS4uLl0uLi5dXG4iCisiVXRm+HIgS09NTUFORE8gbWVkIFBBUkFNRVRFUiBw5SBFSU5JTkcuICBEZXJzb20gaW5nZW4gS09NTUFORE8gZXIgZ2pldmVuLFxuIgorImv4eXJlciBHTlUgUGFydGVkIGkgaW50ZXJha3RpdiBtb2R1cy5cbiIKKworIzogcGFydGVkL3VpLmM6MTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJcbiIKKyJZb3UgZm91bmQgYSBidWcgaW4gR05VIFBhcnRlZCEgSGVyZSdzIHdoYXQgeW91IGhhdmUgdG8gZG86XG4iCisiXG4iCisiRG9uJ3QgcGFuaWMhIFRoZSBidWcgaGFzIG1vc3QgbGlrZWx5IG5vdCBhZmZlY3RlZCBhbnkgb2YgeW91ciBkYXRhLlxuIgorIkhlbHAgdXMgdG8gZml4IHRoaXMgYnVnIGJ5IGRvaW5nIHRoZSBmb2xsb3dpbmc6XG4iCisiXG4iCisiQ2hlY2sgd2hldGhlciB0aGUgYnVnIGhhcyBhbHJlYWR5IGJlZW4gZml4ZWQgYnkgY2hlY2tpbmdcbiIKKyJ0aGUgbGFzdCB2ZXJzaW9uIG9mIEdOVSBQYXJ0ZWQgdGhhdCB5b3UgY2FuIGZpbmQgYXQ6XG4iCisiXG4iCisiXHRodHRwOi8vZnRwLmdudS5vcmcvZ251L3BhcnRlZC9cbiIKKyJcbiIKKyJQbGVhc2UgY2hlY2sgdGhpcyB2ZXJzaW9uIHByaW9yIHRvIGJ1ZyByZXBvcnRpbmcuXG4iCisiXG4iCisiSWYgdGhpcyBoYXMgbm90IGJlZW4gZml4ZWQgeWV0IG9yIGlmIHlvdSBkb24ndCBrbm93IGhvdyB0byBjaGVjayxcbiIKKyJwbGVhc2UgdmlzaXQgdGhlIEdOVSBQYXJ0ZWQgd2Vic2l0ZTpcbiIKKyJcbiIKKyJcdGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9wYXJ0ZWRcbiIKKyJcbiIKKyJmb3IgZnVydGhlciBpbmZvcm1hdGlvbi5cbiIKKyJcbiIKKyJZb3VyIHJlcG9ydCBzaG91bGQgY29udGFpbiB0aGUgdmVyc2lvbiBvZiB0aGlzIHJlbGVhc2UgKCVzKVxuIgorImFsb25nIHdpdGggdGhlIGVycm9yIG1lc3NhZ2UgYmVsb3csIHRoZSBvdXRwdXQgb2ZcbiIKKyJcbiIKKyJcdHBhcnRlZCBERVZJQ0UgdW5pdCBjbyBwcmludCB1bml0IHMgcHJpbnRcbiIKKyJcbiIKKyJhbmQgdGhlIGZvbGxvd2luZyBoaXN0b3J5IG9mIGNvbW1hbmRzIHlvdSBlbnRlcmVkLlxuIgorIkFsc28gaW5jbHVkZSBhbnkgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB5b3VyIHNldHVwIHlvdVxuIgorImNvbnNpZGVyIGltcG9ydGFudC5cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzoyODQKK21zZ2lkICIiCisiXG4iCisiQ29tbWFuZCBIaXN0b3J5OlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjM2NgorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogU0VHVl9NQVBFUlIgKEFkZHJlc3Mgbm90IG1hcHBlZCB0byBvYmplY3QpXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6MzcyCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBTRUdWX0FDQ0VSUiAoSW52YWxpZCBwZXJtaXNzaW9ucyBmb3IgbWFwcGVkIG9iamVjdClcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzozNzcKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEEgZ2VuZXJhbCBTSUdTRUdWIHNpZ25hbCB3YXMgZW5jb3VudGVyZWQuXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDEwCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfSU5URElWIChJbnRlZ2VyOiBkaXZpZGUgYnkgemVybykiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDE1Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfSU5UT1ZGIChJbnRlZ2VyOiBvdmVyZmxvdykiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDIwCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxURElWIChGbG9hdDogZGl2aWRlIGJ5IHplcm8pIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQyNQorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0ZMVE9WRiAoRmxvYXQ6IG92ZXJmbG93KSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0MzAKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRVTkQgKEZsb2F0OiB1bmRlcmZsb3cpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQzNQorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0ZMVFJFUyAoRmxvYXQ6IGluZXhhY3QgcmVzdWx0KSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0NDAKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRJTlYgKEZsb2F0OiBpbnZhbGlkIG9wZXJhdGlvbikiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDQ1Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxUU1VCIChGbG9hdDogc3Vic2NyaXB0IG91dCBvZiByYW5nZSkiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDUwCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBBIGdlbmVyYWwgU0lHRlBFIHNpZ25hbCB3YXMgZW5jb3VudGVyZWQuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQ4MworbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX0lMTE9QQyAoSWxsZWdhbCBPcGNvZGUpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQ4OAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX0lMTE9QTiAoSWxsZWdhbCBPcGVyYW5kKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0OTMKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9JTExBRFIgKElsbGVnYWwgYWRkcmVzc2luZyBtb2RlKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0OTgKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9JTExUUlAgKElsbGVnYWwgVHJhcCkiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NTAzCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfUFJWT1BDIChQcml2aWxlZ2VkIE9wY29kZSkiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NTA4Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfUFJWUkVHIChQcml2aWxlZ2VkIFJlZ2lzdGVyKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo1MTMKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9DT1BST0MgKENvcHJvY2Vzc29yIEVycm9yKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo1MTgKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9CQURTVEsgKEludGVybmFsIFN0YWNrIEVycm9yKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo1MjMKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEEgZ2VuZXJhbCBTSUdJTEwgc2lnbmFsIHdhcyBlbmNvdW50ZXJlZC4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6MTAyNAorbXNnaWQgIkV4cGVjdGluZyBhIHBhcnRpdGlvbiBudW1iZXIuIgorbXNnc3RyICJGb3J2ZW50YSBlaXQgcGFydGlzam9uc251bW1lci4iCisKKyM6IHBhcnRlZC91aS5jOjEwMzMKK21zZ2lkICJQYXJ0aXRpb24gZG9lc24ndCBleGlzdC4iCittc2dzdHIgIlBhcnRpc2pvbmVuIGZpbnN0IGlra2plLiIKKworIzogcGFydGVkL3VpLmM6MTA1MworbXNnaWQgIkV4cGVjdGluZyBhIGZpbGUgc3lzdGVtIHR5cGUuIgorbXNnc3RyICJGb3J2ZW50YSBlaSBmaWxzeXN0ZW10eXBlLiIKKworIzogcGFydGVkL3VpLmM6MTA2MAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIGZpbGUgc3lzdGVtIHR5cGUgXCIlc1wiLiIKK21zZ3N0ciAiRmlsc3lzdGVtdHlwZW4gqyVzuyBlciB1a2plbmQuIgorCisjOiBwYXJ0ZWQvdWkuYzoxMDgwCittc2dpZCAiRXhwZWN0aW5nIGEgZGlzayBsYWJlbCB0eXBlLiIKK21zZ3N0ciAiRm9ydmVudGEgZWluIGRpc2tsYWJlbC10eXBlLiIKKworIzogcGFydGVkL3VpLmM6MTE3OAorbXNnaWQgIkNhbid0IGNyZWF0ZSBhbnkgbW9yZSBwYXJ0aXRpb25zLiIKK21zZ3N0ciAiS2FuIGlra2plIGxhZ2EgZmxlaXJlIHBhcnRpc2pvbmFyLiIKKworIzogcGFydGVkL3VpLmM6MTE4OAorbXNnaWQgIkV4cGVjdGluZyBhIHBhcnRpdGlvbiB0eXBlLiIKK21zZ3N0ciAiRm9ydmVudGEgZWluIHBhcnRpc2pvbnN0eXBlLiIKKworIzogcGFydGVkL3VpLmM6MTMxNQorbXNnaWQgIm9uIgorbXNnc3RyICJw5SIKKworIzogcGFydGVkL3VpLmM6MTMxNgorbXNnaWQgIm9mZiIKK21zZ3N0ciAiYXYiCisKKyM6IHBhcnRlZC91aS5jOjE0MzEKK21zZ2lkICJPUFRJT05zOiIKK21zZ3N0ciAiRkxBR0c6IgorCisjOiBwYXJ0ZWQvdWkuYzoxNDM2Cittc2dpZCAiQ09NTUFORHM6IgorbXNnc3RyICJLT01NQU5ET2FyOiIKKworIzogcGFydGVkL3VpLmM6MTQ0NQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2luZyAlc1xuIgorbXNnc3RyICJCcnVrYXIgJXNcbiIKKworIzogcGFydGVkL3VpLmM6MTUxOQorbXNnaWQgIlRoaXMgY29tbWFuZCBkb2VzIG5vdCBtYWtlIHNlbnNlIGluIG5vbi1pbnRlcmFjdGl2ZSBtb2RlLlxuIgorbXNnc3RyICIiCisKKyN+IG1zZ2lkICJ3aGVyZSBuZWNlc3NhcnksIHByb21wdHMgZm9yIHVzZXIgaW50ZXJ2ZW50aW9uIgorI34gbXNnc3RyICJkZXIgbmF1ZHN5bnQsIHNw+HIgYnJ1a2FyZW4iCisKKyMsIGZ1enp5CisjfiBtc2dpZCAiIgorI34gIldpdGhvdXQgYXJndW1lbnRzLCBwcmludCBkaXNwbGF5cyB0aGUgZW50aXJlIHBhcnRpdGlvbiB0YWJsZS4gV2l0aCAiCisjfiAiJ2ZyZWUnXG4iCisjfiAiYXJndW1lbnQsIGluZm9ybWF0aW9uIGFib3V0IGZyZWUgc3BhY2Ugd2lsbCBiZSBkaXNwbGF5ZWQgb3RoZXJ3aXNlIGlmIGFcbiIKKyN+ICJwYXJ0aXRpb24gbnVtYmVyIGlzIGdpdmVuLCB0aGVuIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gaXMgZGlzcGxheWVkXG4iCisjfiAiYWJvdXQgdGhhdCBwYXJ0aXRpb24uIElmIHRoZSAnYWxsJyBhcmd1bWVudCBpcyBwYXNzZWQgaW5zdGVhZCwgcGFydGl0aW9uXG4iCisjfiAiaW5mb3JtYXRpb24gZm9yIGFsbCBkZXZpY2VzIHdpbGwgYmUgZGlzcGxheWVkLlxuIgorI34gbXNnc3RyICIiCisjfiAiVXRhbiBhcmd1bWVudCBza3JpdiBwcmludCB1dCBoZWlsZSBwYXJ0aXNqb25zdGFiZWxsZW4uICBEZXJzb20gZWl0XG4iCisjfiAicGFydGlzam9uc251bW1lciBlciBvcHBnamV2ZSwgdmlsIG1laXIgZGV0YWxqZXJ0IGluZm9ybWFzam9uIG9tXG4iCisjfiAicGFydGlzam9uZW4gdmVydGEgdmlzdC5cbiIKKworI34gbXNnaWQgIiIKKyN+ICJUaGUgc2VjdG9yIHNpemUgb24gJXMgaXMgJWQgYnl0ZXMuICBQYXJ0ZWQgaXMga25vd24gbm90IHRvIHdvcmsgcHJvcGVybHkgIgorI34gIndpdGggZHJpdmVzIHdpdGggc2VjdG9yIHNpemVzIG90aGVyIHRoYW4gJWQgYnl0ZXMiCisjfiBtc2dzdHIgIiIKKyN+ICJTZWt0b3JhbmUgcOUgJXMgZXIgJWQgb2t0ZXR0YXIgc3RvcmUuICBQYXJ0ZWQgZnVuZ2VyZXIgYmVycmUgc2tpa2tlbGVnIHDlICIKKyN+ICJkaXNrYXIgc29tIGhhciBlaW4gc2VrdG9yc3RvcmxlaWsgcOUgJWQgb2t0ZXR0YXIiCisKKyN+IG1zZ2lkICJDb3VsZCBub3QgcmVhZCBnZW9tZXRyeSBvZiAlcyAtICVzLiIKKyN+IG1zZ3N0ciAiS3VubmUgaWtramUgbGVzYSBnZW9tZXRyaWVuIHRpbCAlcyAtICVzLiIKKworI34gbXNnaWQgIkRldmljZSAlcyBoYXMgZG9kZ2V5IGdlb21ldHJ5LiIKKyN+IG1zZ3N0ciAiRWluaW5nYSAlcyBoYXIgdHZpbHNhbSBnZW9tZXRyaS4iCisKKyN+IG1zZ2lkICJJREUiCisjfiBtc2dzdHIgIklERSIKKworI34gbXNnaWQgIlNDU0kiCisjfiBtc2dzdHIgIlNDU0kiCisKKyN+IG1zZ2lkICJEZXZpY2UgJXMgaXMgbmVpdGhlciBhIFNDU0kgbm9yIElERSBkcml2ZS4iCisjfiBtc2dzdHIgIkVpbmluZ2EgJXMgZXIga29ya2plIGVpbiBTQ1NJLSBlbGxlciBJREUtZGlzay4iCisKKyN+IG1zZ2lkICJFcnJvciByZWFkaW5nICVzICglcykgdG8gZGV0ZXJtaW5lIGlmIHBhcnRpdGlvbiBpcyBtb3VudGVkLiIKKyN+IG1zZ3N0ciAiRmVpbCB2ZWQgbGVzaW5nIGF2ICVzICglcykgZm9yIOUgYXZnamVyYSBvbSBwYXJ0aXNqb25lbiBlciBtb250ZXJ0LiIKKworI34gbXNnaWQgIiIKKyN+ICJVbmFibGUgdG8gZGV0ZXJtaW5lIGlmIHBhcnRpdGlvbnMgYXJlIG1vdW50ZWQgdmlhIC9wcm9jL21vdW50cyBvciAvZXRjLyIKKyN+ICJtdGFiLiAgTWFrZSBzdXJlIHlvdSBkb24ndCBhdHRlbXB0IHRvIHJlc2l6ZSBvciBtb2RpZnkgbW91bnRlZCBmaWxlICIKKyN+ICJzeXN0ZW1zLiAgKEV2ZW4gcmVhZC1vbmx5IG1vdW50ZWQpIgorI34gbXNnc3RyICIiCisjfiAiS3VubmUgaWtramUgZmlubmEgbGlzdGUgb3ZlciBtb250ZXJ0ZSBwYXJ0aXNqb25hciBpIC9wcm9jL21vdW50cyBlbGxlciAvIgorI34gImV0Yy9tdGFiLiAgRm9yc2lrcmEgZGVnIG9tIGF0IGR1IGlra2plIHBy+HZlciDlIGVuZHJhIHDlIG1vbnRlcnRlICIKKyN+ICJmaWxzeXN0ZW0gKHNq+Gx2IG9tIGRlaSBlciBtb250ZXJ0IG1lZCBrdW4gbGVzZXRpbGdhbmcpIgorCisjfiBtc2dpZCAiIgorI34gIlRoZSBwYXJ0aXRpb24gdGFibGUgb24gJXMgaXMgaW5jb25zaXN0ZW50LiAgVGhlcmUgYXJlIG1hbnkgcmVhc29ucyB3aHkgIgorI34gInRoaXMgbWlnaHQgYmUgdGhlIGNhc2UuICBIb3dldmVyLCB0aGUgbW9zdCBsaWtlbHkgcmVhc29uIGlzIHRoYXQgTGludXggIgorI34gImRldGVjdGVkIHRoZSBCSU9TIGdlb21ldHJ5IGZvciAlcyBpbmNvcnJlY3RseS4gIEdOVSBQYXJ0ZWQgc3VzcGVjdHMgdGhlICIKKyN+ICJyZWFsIGdlb21ldHJ5IHNob3VsZCBiZSAlZC8lZC8lZCAobm90ICVkLyVkLyVkKS4gIFlvdSBzaG91bGQgY2hlY2sgd2l0aCAiCisjfiAieW91ciBCSU9TIGZpcnN0LCBhcyB0aGlzIG1heSBub3QgYmUgY29ycmVjdC4gIFlvdSBjYW4gaW5mb3JtIExpbnV4IGJ5ICIKKyN+ICJhZGRpbmcgdGhlIHBhcmFtZXRlciAlcz0lZCwlZCwlZCB0byB0aGUgY29tbWFuZCBsaW5lLiAgU2VlIHRoZSBMSUxPIG9yICIKKyN+ICJHUlVCIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uICBJZiB5b3UgdGhpbmsgUGFydGVkJ3Mgc3VnZ2VzdGVkICIKKyN+ICJnZW9tZXRyeSBpcyBjb3JyZWN0LCB5b3UgbWF5IHNlbGVjdCBJZ25vcmUgdG8gY29udGludWUgKGFuZCBmaXggTGludXggIgorI34gImxhdGVyKS4gIE90aGVyd2lzZSwgc2VsZWN0IENhbmNlbCAoYW5kIGZpeCBMaW51eCBhbmQvb3IgdGhlIEJJT1Mgbm93KS4iCisjfiBtc2dzdHIgIiIKKyN+ICJQYXJ0aXNqb25zdGFiZWxsZW4gcOUgJXMgZXIgaW5rb25zaXN0ZW50LiAgRGV0IGthbiBrb21hIGF2IG1hbmdlIHRpbmcsICIKKyN+ICJtZW4gbWVzdCBzYW5uc3lubGVnIGhhciBMaW51eCBicnVrdCBmZWlsIEJJT1MtZ2VvbWV0cmkgZm9yICVzLiAgR05VICIKKyN+ICJQYXJ0ZWQgdHJ1ciBkZW4gdmVya2VsZWdlIGdlb21ldHJpZW4gZXIgJWQvJWQvJWQgKGlra2plICVkLyVkLyVkKS4gIFNqZWtrICIKKyN+ICJm+HJzdCBpIEJJT1Mgb20gZGV0IHN0ZW1tZXIuICBEdSBrYW4gbOZyYSBMaW51eCBkZXR0ZSB2ZWQg5SBsZWdnamEgdGlsICIKKyN+ICJwYXJhbWV0ZXJlbiAlcz0lZCwlZCwlZCBw5SBramVybmVrb21tYW5kb2xpbmphLiAgU2rlIGRva3VtZW50YXNqb25lbiB0aWwgIgorI34gIkxJTE8gZWxsZXIgR1JVQiBmb3IgbWVpciBpbmZvcm1hc2pvbi4gIFZpc3MgZHUgdHJ1ciBnZW9tZXRyaWVuIFBhcnRlZCAiCisjfiAiZm9yZXNs5XIgZXIgcmV0dCwga2FuIGR1IHZlbGphIElnbm9yZXIgZm9yIOUgaGFsZGEgZnJhbSAob2cgZmlrc2EgTGludXggIgorI34gInNlaW5hcmUpLiAgVmlzcyBpa2tqZSwgdmVsIEF2YnJ5dCAob2cgZmlrcyBMaW51eCBvZy9lbGxlciBCSU9TLWVuIG5vKS4iCisKKyN+IG1zZ2lkICIiCisjfiAiVGhlIHBhcnRpdGlvbiB0YWJsZSBvbiAlcyBpcyBpbmNvbnNpc3RlbnQuICBUaGVyZSBhcmUgbWFueSByZWFzb25zIHdoeSAiCisjfiAidGhpcyBtaWdodCBiZSB0aGUgY2FzZS4gIE9mdGVuLCB0aGUgcmVhc29uIGlzIHRoYXQgTGludXggZGV0ZWN0ZWQgdGhlICIKKyN+ICJCSU9TIGdlb21ldHJ5IGluY29ycmVjdGx5LiAgSG93ZXZlciwgdGhpcyBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgdGhlIGNhc2UgIgorI34gImhlcmUuICBJdCBpcyBzYWZlIHRvIGlnbm9yZSxidXQgaWdub3JpbmcgbWF5IGNhdXNlIChmaXhhYmxlKSBwcm9ibGVtcyAiCisjfiAid2l0aCBzb21lIGJvb3QgbG9hZGVycywgYW5kIG1heSBjYXVzZSBwcm9ibGVtcyB3aXRoIEZBVCBmaWxlIHN5c3RlbXMuICAiCisjfiAiVXNpbmcgTEJBIGlzIHJlY29tbWVuZGVkLiIKKyN+IG1zZ3N0ciAiIgorI34gIlBhcnRpc2pvbnN0YWJlbGxlbiBw5SAlcyBlciBpbmtvbnNpc3RlbnQuICBEZXQga2FuIGtvbWEgYXYgbWFuZ2UgdGluZywgb2cgIgorI34gIm9mdGUgZXIgZ3J1bm5lbiBhdCBMaW51eCBoYXIgYnJ1a3QgZmVpbCBCSU9TLWdlb21ldHJpLiAgSSBkZXR0ZSB0aWxmZWxsZXQgIgorI34gInNlciBkZXQgaWtramUgc2xpayB1dC4gIERldCBlciB0cnlndCDlIG92ZXJzauUgZGVubmUgZmVpbGVuLCBtZW4gZHUga2FuICIKKyN+ICJrb21hIGJvcnQgaSBwcm9ibGVtIG1lZCBib290LWxhc3RhcmVuIChzb20ga2FuIHJldHRhc3Qgb3BwKSwgb2cgbWVkIEZBVC0iCisjfiAiZmlsc3lzdGVtLiAgRGV0IGVyIHRpbHLlZGQg5SBicnVrYSBMQkEuIgorCisjfiBtc2dpZCAiIgorI34gIlVuYWJsZSB0byBhbGlnbiBwYXJ0aXRpb24gcHJvcGVybHkuICBUaGlzIHByb2JhYmx5IG1lYW5zIHRoYXQgYW5vdGhlciAiCisjfiAicGFydGl0aW9uaW5nIHRvb2wgZ2VuZXJhdGVkIGFuIGluY29ycmVjdCBwYXJ0aXRpb24gdGFibGUsIGJlY2F1c2UgaXQgIgorI34gImRpZG4ndCBoYXZlIHRoZSBjb3JyZWN0IEJJT1MgZ2VvbWV0cnkuICBJdCBpcyBzYWZlIHRvIGlnbm9yZSxidXQgaWdub3JpbmcgIgorI34gIm1heSBjYXVzZSAoZml4YWJsZSkgcHJvYmxlbXMgd2l0aCBzb21lIGJvb3QgbG9hZGVycy4iCisjfiBtc2dzdHIgIiIKKyN+ICJLdW5uZSBpa2tqZSBwbGFzc2VyYSBwYXJ0aXNqb25lbiBw5SBlaSBwYXNzYW5kZSBza2lsamVsaW5qZS4gIERldHRlIHR5ZGVyICIKKyN+ICJ2YW5sZWd2aXMgYXQgZWl0IGFubmEgcGFydGlzam9uc3Byb2dyYW0gaGFyIGxhZ2EgZWluIHBhcnRpc2pvbnN0YWJlbGwgbWVkICIKKyN+ICJmZWlsIEJJT1MtZ2VvbWV0cmkuICBEZXQgZXIgdHJ5Z3Qg5SBvdmVyc2rlIGRlbm5lIGZlaWxlbiwgbWVuIGR1IGthbiBrb21lICIKKyN+ICJib3J0IGkgcHJvYmxlbSBtZWQgYm9vdC1sYXN0YXJlbiAoc29tIGthbiByZXR0YXN0IG9wcCkuIgorCisjfiBtc2dpZCAiQXR0ZW1wdCB0byByZWFkIHNlY3RvcnMgJWxkLSVsZCBvdXRzaWRlIG9mIHBhcnRpdGlvbiBvbiAlcyIKKyN+IG1zZ3N0ciAiUHL4dmRlIOUgbGVzYSBzZWt0b3JhbmUgJWxkLSVsZCB1dGFuZm9yIHBhcnRpc2pvbmVuIHDlICVzIgorCisjfiBtc2dpZCAiIgorI34gIlRoaXMgZXh0MiBmaWxlc3lzdGVtIGhhcyBhIHJhdGhlciBzdHJhbmdlIGxheW91dCEgIFBhcnRlZCBjYW4ndCByZXNpemUgIgorI34gInRoaXMgKHlldCkuIgorI34gbXNnc3RyICIiCisjfiAiRGV0dGUgZXh0Mi1maWxzeXN0ZW1ldCBoYXIgZWl0IGdhbnNrZSByYXJ0IHV0bGVnZy4gIFBhcnRlZCBrYW4gaWtramUgIgorI34gImVuZHJhIHN0b3JsZWlrZW4gcOUgZGV0IChlbm5vKS4iCisKKyN+IG1zZ2lkICJGaWxlIHN5c3RlbSBoYXMgYW4gaW52YWxpZCBzaWduYXR1cmUgZm9yIGEgRkFUIGZpbGUgc3lzdGVtcy4iCisjfiBtc2dzdHIgIkZpbHN5c3RlbWV0IGhhciBlaW4gdWd5bGRpZyBzaWduYXR1ciB0aWwg5SB2ZXJhIGVpdCBGQVQtZmlsc3lzdGVtLiIKKworI34gbXNnaWQgIiIKKyN+ICJQYXJ0aXRpb24gJXMgaXMgYmVpbmcgdXNlZC4gIE1vZGlmeWluZyBpdCB3aGlsZSBpdCBpcyBpbiB1c2UgY291bGQgY2F1c2UgIgorI34gInNldmVyZSBjb3JydXB0aW9uLiIKKyN+IG1zZ3N0ciAiIgorI34gIlBhcnRpc2pvbmVuICVzIGVyIGkgYnJ1ay4gIEVuZHJpbmdhciBubyBrYW4gZvhyZSB0aWwgYWx2b3JsZWcgZGF0YXRhcC4iCisKKyN+IG1zZ2lkICIiCisjfiAiWW91IHJlcXVlc3RlZCB0byBjcmVhdGUgYSBwYXJ0aXRpb24gYXQgJS4zZi0lLjNmTWIuIFRoZSBjbG9zZXN0IFBhcnRlZCAiCisjfiAiY2FuIG1hbmFnZSBpcyAlLjNmLSUuM2ZNYi4iCisjfiBtc2dzdHIgIiIKKyN+ICJEdSBiYWQgb20gZWluIHBhcnRpc2pvbiBw5SAlLjNmLSUuM2YgTWlCLiAgRGV0IG7mcm1hc3RlIFBhcnRlZCBrYW4ga29tYSAiCisjfiAiZXIgJS4zZi0lLjNmIE1pQi4iCisKKyN+IG1zZ2lkICIiCisjfiAiWW91IHJlcXVlc3RlZCB0byBtb3ZlIHRoZSBwYXJ0aXRpb24gdG8gJS4zZi0lLjNmTWIuIFRoZSBjbG9zZXN0IFBhcnRlZCAiCisjfiAiY2FuIG1hbmFnZSBpcyAlLjNmLSUuM2ZNYi4iCisjfiBtc2dzdHIgIiIKKyN+ICJEdSBiYWQgb20g5SBmbHl0dGEgcGFydGlzam9uZW4gdGlsICUuM2YtJS4zZiBNaUIuICBEZXQgbuZybWFzdGUgUGFydGVkICIKKyN+ICJrYW4ga2xhcmEgZXIgJS4zZi0lLjNmIE1pQi4iCisKKyN+IG1zZ2lkICJEaXNrIGdlb21ldHJ5IGZvciAlczogMC4wMDAtJS4zZiBtZWdhYnl0ZXNcbiIKKyN+IG1zZ3N0ciAiRGlza2dlb21ldHJpIGZvciAlczogMC4wMDAtJS4zZiBtZWJpYnl0ZXNcbiIKKworI34gbXNnaWQgIkRpc2sgbGFiZWwgdHlwZTogJXNcbiIKKyN+IG1zZ3N0ciAiRGlza2xhYmVsLXR5cGU6ICVzXG4iCisKKyN+IG1zZ2lkICJNaW5vciAgICBTdGFydCAgICAgICBFbmQgICAgICIKKyN+IG1zZ3N0ciAiTnIgICAgICAgU3RhcnQgICAgICAgRW5kICAgICAiCisKKyN+IG1zZ2lkICJUeXBlICAgICAgIgorI34gbXNnc3RyICJUeXBlICAgICAgIgorCisjfiBtc2dpZCAiRmlsZXN5c3RlbSAgIgorI34gbXNnc3RyICJGaWxzeXN0ZW0gICAiCisKKyN+IG1zZ2lkICJOYW1lICAgICAgICAgICAgICAgICAgIgorI34gbXNnc3RyICJOYW1uICAgICAgICAgICAgICAgICAgIgorCisjfiBtc2dpZCAiIgorI34gIllvdSByZXF1ZXN0ZWQgdG8gcmVzaXplIHRoZSBwYXJ0aXRpb24gdG8gJS4zZi0lLjNmTWIuIFRoZSBjbG9zZXN0IFBhcnRlZCAiCisjfiAiY2FuIG1hbmFnZSBpcyAlLjNmLSUuM2ZNYi4iCisjfiBtc2dzdHIgIiIKKyN+ICJEdSBiYWQgb20g5SBlbmRyYSBzdG9ybGVpayBw5SBwYXJ0aXNqb25lbiB0aWwgJS4zZi0lLjNmIE1pQi4gIERldCAiCisjfiAibuZybWFzdGUgUGFydGVkIGthbiBrbGFyYSBlciAlLjNmLSUuM2YgTWlCLiIKKworI34gbXNnaWQgInJlc2l6ZSBNSU5PUiBTVEFSVCBFTkQgICAgICAgIHJlc2l6ZSBmaWxlc3lzdGVtIG9uIHBhcnRpdGlvbiBNSU5PUiIKKyN+IG1zZ3N0ciAiIgorI34gInJlc2l6ZSBOUiBTVEFSVCBTTFVUVCAgICAgICAgIGVuZHJhIHN0b3JsZWlrIHDlIGZpbHN5c3RlbWV0IHDlICIKKyN+ICJwYXJ0aXNqb25lbiBOUiIKKworI34gbXNnaWQgIiIKKyN+ICJZb3UgZm91bmQgYSBidWcgaW4gR05VIFBhcnRlZC4gIFBsZWFzZSBlbWFpbCBhIGJ1ZyByZXBvcnQgdG8gYnVnLSIKKyN+ICJwYXJ0ZWRAZ251Lm9yZyBjb250YWluaW5nIHRoZSB2ZXJzaW9uICglcyksIGFuZCB0aGUgZm9sbG93aW5nIG1lc3NhZ2U6XG4iCisjfiBtc2dzdHIgIiIKKyN+ICJEdSBoYXIgZnVubmUgZWluIHByb2dyYW1mZWlsIGkgR05VIFBhcnRlZC4gIFZlciB2ZW5sZWcg5SBzZW5kYSBlaSAiCisjfiAiZmVpbG1lbGRpbmcgdGlsIGJ1Zy1wYXJ0ZWRAZ251Lm9yZyBkZXIgZHUgb3BwZ2pldiB2ZXJzam9uc251bW1lcmV0ICglcykgIgorI34gIm9nIGZ5bGdqYW5kZSBtZWxkaW5nOlxuIgorCisjfiBtc2dpZCAiIgorI34gIiAgWW91IGhhdmUgV2luZG93cyBGQVQgcGFydGl0aW9uKHMpIHRoYXQgYXJlIG5vdCB1c2luZyBMQkEuICBJZiB5b3VyIEJJT1MgIgorI34gInN1cHBvcnRzIExCQSwgdGhlbiB5b3Ugc2hvdWxkIHN3aXRjaCB0byBMQkEgYnkgc2V0dGluZyB0aGUgTEJBIGZsYWcgb24gIgorI34gImFsbCBGQVQgcGFydGl0aW9ucy4gIE90aGVyd2lzZSwgbWFrZSBzdXJlIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGFuZCB0aGUgIgorI34gIkJJT1MgaGF2ZSB0aGUgc2FtZSBnZW9tZXRyeSBiZWZvcmUgcmVzaXppbmcgYW55IEZBVCBwYXJ0aXRpb25zLiIKKyN+IG1zZ3N0ciAiIgorI34gIiAgRHUgaGFyIFdpbmRvd3MgRkFULXBhcnRpc2pvbihhcikgc29tIGlra2plIGJydWthciBMQkEuICBWaXNzIEJJT1MgIgorI34gInN0+HR0YXIgTEJBLCBi+HIgZHUgYnl0dGEgdGlsIExCQSB2ZWQg5SBzZXRqYSBMQkEtZmxhZ2dldCBw5SBhbGxlIEZBVC0iCisjfiAicGFydGlzam9uYXIuICBWaXNzIGlra2plLCBzamVrayBhdCBvcGVyYXRpdnN5c3RlbWV0IG9nIEJJT1MgaGFyIHNhbWUgIgorI34gImZvcm1laW5pbmcgb20gZGlza2dlb210ZXRyaSBm+HIgZHUgZW5kcmFyIHN0b3JsZWlrIHDlIG5va29uIGF2IEZBVC0iCisjfiAicGFydGlzam9uYW5lLiIKKworI34gbXNnaWQgIiIKKyN+ICJUaGUgb3BlcmF0aW5nIHN5c3RlbSB0aGlua3MgdGhlIGdlb21ldHJ5IG9uICVzIGlzICVkLyVkLyVkLiAgVGhlcmVmb3JlLCAiCisjfiAiY3lsaW5kZXIgMTAyNCBlbmRzIGF0ICUuM2ZNLiVzIgorI34gbXNnc3RyICIiCisjfiAiT3BlcmF0aXZzeXN0ZW1ldCB0cnVyIGdlb21ldHJpZW4gcOUgJXMgZXIgJWQvJWQvJWQsIGFsdHPlIGVuZGFyIHN5bGluZGVyICIKKyN+ICIxMDI0IHDlICUuM2YgTWlCLiVzIgorCisjfiBtc2dpZCAiVGhlIG9wZXJhdGluZyBzeXN0ZW0gdGhpbmtzIHRoZSBnZW9tZXRyeSBvbiAlcyBpcyAlZC8lZC8lZC4lcyIKKyN+IG1zZ3N0ciAiT3BlcmF0aXZzeXN0ZW1ldCBtZWluZXIgYXQgZ2VvbWV0cmllbiB0aWwgJXMgZXIgJWQvJWQvJWQuJXMiCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvcG8vcGFydGVkLnBvdCBiL3BhcnRlZC0xLjguNy9wby9wYXJ0ZWQucG90Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjNWYyODUKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvcG8vcGFydGVkLnBvdApAQCAtMCwwICsxLDI4OTEgQEAKKyMgU09NRSBERVNDUklQVElWRSBUSVRMRS4KKyMgQ29weXJpZ2h0IChDKSBZRUFSIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgUEFDS0FHRSBwYWNrYWdlLgorIyBGSVJTVCBBVVRIT1IgPEVNQUlMQEFERFJFU1M+LCBZRUFSLgorIworIywgZnV6enkKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IFBBQ0tBR0UgVkVSU0lPTlxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBidWctcGFydGVkQGdudS5vcmdcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAwNy0wNS0wOSAxNzowMi0wNDAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogWUVBUi1NTy1EQSBITzpNSStaT05FXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBGVUxMIE5BTUUgPEVNQUlMQEFERFJFU1M+XG4iCisiTGFuZ3VhZ2UtVGVhbTogTEFOR1VBR0UgPExMQGxpLm9yZz5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1DSEFSU0VUXG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorCisjOiBsaWIvY2xvc2VvdXQuYzo3NAorbXNnaWQgIndyaXRlIGVycm9yIgorbXNnc3RyICIiCisKKyM6IGxpYi9lcnJvci5jOjEyNQorbXNnaWQgIlVua25vd24gc3lzdGVtIGVycm9yIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo1MzEgbGliL2dldG9wdC5jOjU0NworIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIGAlcycgaXMgYW1iaWd1b3VzXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjU4MCBsaWIvZ2V0b3B0LmM6NTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYC0tJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6NTkzIGxpYi9nZXRvcHQuYzo1OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiBgJWMlcycgZG9lc24ndCBhbGxvdyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo2NDEgbGliL2dldG9wdC5jOjY2MCBsaWIvZ2V0b3B0LmM6OTc2IGxpYi9nZXRvcHQuYzo5OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiBgJXMnIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjY5OCBsaWIvZ2V0b3B0LmM6NzAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bnJlY29nbml6ZWQgb3B0aW9uIGAtLSVzJ1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo3MDkgbGliL2dldG9wdC5jOjcxMgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5yZWNvZ25pemVkIG9wdGlvbiBgJWMlcydcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6NzY0IGxpYi9nZXRvcHQuYzo3NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGlsbGVnYWwgb3B0aW9uIC0tICVjXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjc3MyBsaWIvZ2V0b3B0LmM6Nzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbnZhbGlkIG9wdGlvbiAtLSAlY1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo4MjggbGliL2dldG9wdC5jOjg0NCBsaWIvZ2V0b3B0LmM6MTA0OCBsaWIvZ2V0b3B0LmM6MTA2NgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IC0tICVjXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjg5NyBsaWIvZ2V0b3B0LmM6OTEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYC1XICVzJyBpcyBhbWJpZ3VvdXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6OTM3IGxpYi9nZXRvcHQuYzo5NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiBgLVcgJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzoKKyMuIEdldCB0cmFuc2xhdGlvbnMgZm9yIG9wZW4gYW5kIGNsb3NpbmcgcXVvdGF0aW9uIG1hcmtzLgorIy4KKyMuIFRoZSBtZXNzYWdlIGNhdGFsb2cgc2hvdWxkIHRyYW5zbGF0ZSAiYCIgdG8gYSBsZWZ0CisjLiBxdW90YXRpb24gbWFyayBzdWl0YWJsZSBmb3IgdGhlIGxvY2FsZSwgYW5kIHNpbWlsYXJseSBmb3IKKyMuICInIi4gIElmIHRoZSBjYXRhbG9nIGhhcyBubyB0cmFuc2xhdGlvbiwKKyMuIGxvY2FsZV9xdW90aW5nX3N0eWxlIHF1b3RlcyBgbGlrZSB0aGlzJywgYW5kCisjLiBjbG9jYWxlX3F1b3Rpbmdfc3R5bGUgcXVvdGVzICJsaWtlIHRoaXMiLgorIy4KKyMuIEZvciBleGFtcGxlLCBhbiBBbWVyaWNhbiBFbmdsaXNoIFVuaWNvZGUgbG9jYWxlIHNob3VsZAorIy4gdHJhbnNsYXRlICJgIiB0byBVKzIwMUMgKExFRlQgRE9VQkxFIFFVT1RBVElPTiBNQVJLKSwgYW5kCisjLiBzaG91bGQgdHJhbnNsYXRlICInIiB0byBVKzIwMUQgKFJJR0hUIERPVUJMRSBRVU9UQVRJT04KKyMuIE1BUkspLiAgQSBCcml0aXNoIEVuZ2xpc2ggVW5pY29kZSBsb2NhbGUgc2hvdWxkIGluc3RlYWQKKyMuIHRyYW5zbGF0ZSB0aGVzZSB0byBVKzIwMTggKExFRlQgU0lOR0xFIFFVT1RBVElPTiBNQVJLKSBhbmQKKyMuIFUrMjAxOSAoUklHSFQgU0lOR0xFIFFVT1RBVElPTiBNQVJLKSwgcmVzcGVjdGl2ZWx5LgorIy4KKyMuIElmIHlvdSBkb24ndCBrbm93IHdoYXQgdG8gcHV0IGhlcmUsIHBsZWFzZSBzZWUKKyMuIDxodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1F1b3RhdGlvbl9tYXJrI0dseXBocz4KKyMuIGFuZCB1c2UgZ2x5cGhzIHN1aXRhYmxlIGZvciB5b3VyIGxhbmd1YWdlLgorIzogbGliL3F1b3RlYXJnLmM6MjI5Cittc2dpZCAiYCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcXVvdGVhcmcuYzoyMzAKK21zZ2lkICInIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTMxCittc2dpZCAiU3VjY2VzcyIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjEzNAorbXNnaWQgIk5vIG1hdGNoIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTM3Cittc2dpZCAiSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNDAKK21zZ2lkICJJbnZhbGlkIGNvbGxhdGlvbiBjaGFyYWN0ZXIiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNDMKK21zZ2lkICJJbnZhbGlkIGNoYXJhY3RlciBjbGFzcyBuYW1lIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTQ2Cittc2dpZCAiVHJhaWxpbmcgYmFja3NsYXNoIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTQ5Cittc2dpZCAiSW52YWxpZCBiYWNrIHJlZmVyZW5jZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE1MgorbXNnaWQgIlVubWF0Y2hlZCBbIG9yIFteIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTU1Cittc2dpZCAiVW5tYXRjaGVkICggb3IgXFwoIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTU4Cittc2dpZCAiVW5tYXRjaGVkIFxceyIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE2MQorbXNnaWQgIkludmFsaWQgY29udGVudCBvZiBcXHtcXH0iCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNjQKK21zZ2lkICJJbnZhbGlkIHJhbmdlIGVuZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE2NworbXNnaWQgIk1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNzAKK21zZ2lkICJJbnZhbGlkIHByZWNlZGluZyByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNzMKK21zZ2lkICJQcmVtYXR1cmUgZW5kIG9mIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE3NgorbXNnaWQgIlJlZ3VsYXIgZXhwcmVzc2lvbiB0b28gYmlnIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTc5Cittc2dpZCAiVW5tYXRjaGVkICkgb3IgXFwpIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6NjgwCittc2dpZCAiTm8gcHJldmlvdXMgcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9ycG1hdGNoLmM6NzAKK21zZ2lkICJeW3lZXSIKK21zZ3N0ciAiIgorCisjOiBsaWIvcnBtYXRjaC5jOjczCittc2dpZCAiXltuTl0iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IFRyYW5zbGF0ZSAiKEMpIiB0byB0aGUgY29weXJpZ2h0IHN5bWJvbAorIy4gKEMtaW4tYS1jaXJjbGUpLCBpZiB0aGlzIHN5bWJvbCBpcyBhdmFpbGFibGUgaW4gdGhlIHVzZXIncworIy4gbG9jYWxlLiAgT3RoZXJ3aXNlLCBkbyBub3QgdHJhbnNsYXRlICIoQykiOyBsZWF2ZSBpdCBhcy1pcy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjY2Cittc2dpZCAiKEMpIgorbXNnc3RyICIiCisKKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjY4Cittc2dpZCAiIgorIlxuIgorIkxpY2Vuc2UgR1BMdjIrOiBHTlUgR1BMIHZlcnNpb24gMiBvciBsYXRlciA8aHR0cDovL2dudS5vcmcvbGljZW5zZXMvZ3BsLiIKKyJodG1sPlxuIgorIlRoaXMgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGFyZSBmcmVlIHRvIGNoYW5nZSBhbmQgcmVkaXN0cmlidXRlIGl0LlxuIgorIlRoZXJlIGlzIE5PIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXcuXG4iCisiXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6ICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJXcml0dGVuIGJ5ICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzo4OAorIywgYy1mb3JtYXQKK21zZ2lkICJXcml0dGVuIGJ5ICVzIGFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIzogbGliL3ZlcnNpb24tZXRjLmM6OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiV3JpdHRlbiBieSAlcywgJXMsIGFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorImFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzoxMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyIlcywgYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjLiBZb3UgY2FuIHVzZSBsaW5lIGJyZWFrcywgZXN0aW1hdGluZyB0aGF0IGVhY2ggYXV0aG9yIG5hbWUgb2NjdXBpZXMKKyMuIGNhLiAxNiBzY3JlZW4gY29sdW1ucyBhbmQgdGhhdCBhIHNjcmVlbiBsaW5lIGhhcyBjYS4gODAgY29sdW1ucy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorIiVzLCAlcywgYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjLiBZb3UgY2FuIHVzZSBsaW5lIGJyZWFrcywgZXN0aW1hdGluZyB0aGF0IGVhY2ggYXV0aG9yIG5hbWUgb2NjdXBpZXMKKyMuIGNhLiAxNiBzY3JlZW4gY29sdW1ucyBhbmQgdGhhdCBhIHNjcmVlbiBsaW5lIGhhcyBjYS4gODAgY29sdW1ucy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjExNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorIiVzLCAlcywgJXMsIGFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzoxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyIlcywgJXMsICVzLCAlcyxcbiIKKyJhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6MTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiJXMsICVzLCAlcywgJXMsXG4iCisiJXMsIGFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzoxNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyIlcywgJXMsICVzLCAlcyxcbiIKKyIlcywgJXMsIGFuZCBvdGhlcnMuXG4iCittc2dzdHIgIiIKKworIzogbGliL3hhbGxvYy1kaWUuYzozNQorbXNnaWQgIm1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjIzNworbXNnaWQgIkRpc2sgSW1hZ2UiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjMzOCBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzoyNjEKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTI3MgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBvcGVuaW5nICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6MzQ5IGxpYnBhcnRlZC9hcmNoL2dudS5jOjI3MQorIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBvcGVuICVzIHJlYWQtd3JpdGUgKCVzKS4gICVzIGhhcyBiZWVuIG9wZW5lZCByZWFkLW9ubHkuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzo0MTEgbGlicGFydGVkL2FyY2gvbGludXguYzoxNDMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGR1cmluZyBzZWVrIGZvciByZWFkIG9uICVzIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzo0NDQgbGlicGFydGVkL2FyY2gvZ251LmM6NDQ5IGxpYnBhcnRlZC9hcmNoL2dudS5jOjU0OAorIzogbGlicGFydGVkL2FyY2gvZ251LmM6Njc2IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTM5MQorIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxNDY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGR1cmluZyByZWFkIG9uICVzIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzo0ODAgbGlicGFydGVkL2FyY2gvZ251LmM6NTA5CisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjE1NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2FuJ3Qgd3JpdGUgdG8gJXMsIGJlY2F1c2UgaXQgaXMgb3BlbmVkIHJlYWQtb25seS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjQ5NiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjE1NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZHVyaW5nIHNlZWsgZm9yIHdyaXRlIG9uICVzIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzo1MzMgbGlicGFydGVkL2FyY2gvZ251LmM6NTg1IGxpYnBhcnRlZC9hcmNoL2dudS5jOjYzMAorIzogbGlicGFydGVkL2FyY2gvZ251LmM6NzA3IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTUxNworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxNjEyIGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTY4NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkdXJpbmcgd3JpdGUgb24gJXMiCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo2MyBwYXJ0cHJvYmUvcGFydHByb2JlLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeSBgJXMgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogJXMgW09QVElPTl1cbiIKKyIgIG9yOiAgJXMgREVWSUNFIE1JTk9SXG4iCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo3MAorbXNnaWQgIiIKKyJDbGVhciB1bnVzZWQgc3BhY2Ugb24gYSBGQVQgcGFydGl0aW9uIChhIEdOVSBQYXJ0ZWQgdGVzdGluZyB0b29sKS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjc0Cittc2dpZCAiICAgICAgLS1oZWxwICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdFxuIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6NzUKK21zZ2lkICIgICAgICAtLXZlcnNpb24gIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0XG4iCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo3NyBwYXJ0cHJvYmUvcGFydHByb2JlLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJSZXBvcnQgYnVncyB0byA8JXM+LlxuIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6Mjg1CisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBmZXcgYXJndW1lbnRzIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6MjkwCisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0cHJvYmUvcGFydHByb2JlLmM6MTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbT1BUSU9OXSBbREVWSUNFXS4uLlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRwcm9iZS9wYXJ0cHJvYmUuYzoxNDIKK21zZ2lkICIiCisiSW5mb3JtIHRoZSBPUyBvZiBwYXJ0aXRpb24gdGFibGUgY2hhbmdlcy5cbiIKKyJcbiIKKyIgIC1kLCAtLW5vLXVwZGF0ZSAgZG9uJ3QgdXBkYXRlIHRoZSBrZXJuZWxcbiIKKyIgIC1zLCAtLXN1bW1hcnkgICAgcHJpbnQgYSBzdW1tYXJ5IG9mIGNvbnRlbnRzXG4iCisiICAtaCwgLS1oZWxwICAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0XG4iCisiICAtdiwgLS12ZXJzaW9uICAgIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0XG4iCittc2dzdHIgIiIKKworIzogcGFydHByb2JlL3BhcnRwcm9iZS5jOjE1MAorbXNnaWQgIiIKKyJcbiIKKyJXaXRoIG5vIERFVklDRSwgcHJvYmUgYWxsIHBhcnRpdGlvbnMuXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIG9wZW4gJXMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjExNAorbXNnaWQgIlVuYWJsZSB0byBwcm9iZSBzdG9yZS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6MzUyCittc2dpZCAiIgorIlRoZSBwYXJ0aXRpb24gdGFibGUgY2Fubm90IGJlIHJlLXJlYWQuICBUaGlzIG1lYW5zIHlvdSBuZWVkIHRvIHJlYm9vdCBiZWZvcmUgIgorIm1vdW50aW5nIGFueSBtb2RpZmllZCBwYXJ0aXRpb25zLiAgWW91IGFsc28gbmVlZCB0byByZWluc3RhbGwgeW91ciBib290ICIKKyJsb2FkZXIgYmVmb3JlIHlvdSByZWJvb3QgKHdoaWNoIG1heSByZXF1aXJlIG1vdW50aW5nIG1vZGlmaWVkIHBhcnRpdGlvbnMpLiAgIgorIkl0IGlzIGltcG9zc2libGUgZG8gYm90aCB0aGluZ3MhICBTbyB5b3UnbGwgbmVlZCB0byBib290IG9mZiBhIHJlc2N1ZSBkaXNrLCAiCisiYW5kIHJlaW5zdGFsbCB5b3VyIGJvb3QgbG9hZGVyIGZyb20gdGhlIHJlc2N1ZSBkaXNrLiAgUmVhZCBzZWN0aW9uIDQgb2YgdGhlICIKKyJQYXJ0ZWQgVXNlciBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzozNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBwYXJ0aXRpb24gdGFibGUgb24gJXMgY2Fubm90IGJlIHJlLXJlYWQgKCVzKS4gIFRoaXMgbWVhbnMgdGhlIEh1cmQga25vd3MgIgorIm5vdGhpbmcgYWJvdXQgYW55IG1vZGlmaWNhdGlvbnMgeW91IG1hZGUuICBZb3Ugc2hvdWxkIHJlYm9vdCB5b3VyIGNvbXB1dGVyICIKKyJiZWZvcmUgZG9pbmcgYW55dGhpbmcgd2l0aCAlcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6MzgwIHBhcnRlZC9wYXJ0ZWQuYzoyNDQzCittc2dpZCAiIgorIllvdSBzaG91bGQgcmVpbnN0YWxsIHlvdXIgYm9vdCBsb2FkZXIgYmVmb3JlIHJlYm9vdGluZy4gIFJlYWQgc2VjdGlvbiA0IG9mICIKKyJ0aGUgUGFydGVkIFVzZXIgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6NzcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHRyeWluZyB0byBzeW5jICVzIHRvIGRpc2siCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo0MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHN0YXQgZGV2aWNlICVzIC0gJXMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6NTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgZGV0ZXJtaW5lIHNlY3RvciBzaXplIGZvciAlczogJXMuXG4iCisiVXNpbmcgdGhlIGRlZmF1bHQgc2VjdG9yIHNpemUgKCVsbGQpLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjUzOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRGV2aWNlICVzIGhhcyBhIGxvZ2ljYWwgc2VjdG9yIHNpemUgb2YgJWxsZC4gIE5vdCBhbGwgcGFydHMgb2YgR05VIFBhcnRlZCAiCisic3VwcG9ydCB0aGlzIGF0IHRoZSBtb21lbnQsIGFuZCB0aGUgd29ya2luZyBjb2RlIGlzIEhJR0hMWSBFWFBFUklNRU5UQUwuXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo1NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGRldGVybWluZSB0aGUgc2l6ZSBvZiAlcyAoJXMpLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjY2OAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZ2V0IGlkZW50aXR5IG9mIGRldmljZSAlcyAtICVzIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6Njc3Cittc2dpZCAiR2VuZXJpYyBJREUiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkRldmljZSAlcyBoYXMgbXVsdGlwbGUgKCVkKSBsb2dpY2FsIHNlY3RvcnMgcGVyIHBoeXNpY2FsIHNlY3Rvci5cbiIKKyJHTlUgUGFydGVkIHN1cHBvcnRzIHRoaXMgRVhQRVJJTUVOVEFMTFkgZm9yIHNvbWUgc3BlY2lhbCBkaXNrIGxhYmVsL2ZpbGUgIgorInN5c3RlbSBjb21iaW5hdGlvbnMsIGUuZy4gR1BUIGFuZCBleHQyLzMuXG4iCisiUGxlYXNlIGNvbnN1bHQgdGhlIHdlYiBzaXRlIGZvciB1cC10by1kYXRlIGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjg3MworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBpbml0aWFsaXNpbmcgU0NTSSBkZXZpY2UgJXMgLSAlcyIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjkyOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGRldmljZSAlcyBoYXMgemVybyBsZW5ndGgsIGFuZCBjYW4ndCBwb3NzaWJseSBzdG9yZSBhIGZpbGUgc3lzdGVtIG9yICIKKyJwYXJ0aXRpb24gdGFibGUuICBQZXJoYXBzIHlvdSBzZWxlY3RlZCB0aGUgd3JvbmcgZGV2aWNlPyIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjEwMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVuYWJsZSB0byBkZXRlcm1pbmUgZ2VvbWV0cnkgb2YgZmlsZS9kZXZpY2UgJXMuICBZb3Ugc2hvdWxkIG5vdCB1c2UgUGFydGVkICIKKyJ1bmxlc3MgeW91IFJFQUxMWSBrbm93IHdoYXQgeW91J3JlIGRvaW5nISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExMTAKK21zZ2lkICJEQUM5NjAgUkFJRCBjb250cm9sbGVyIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTExNQorbXNnaWQgIlByb21pc2UgU1g4IFNBVEEgRGV2aWNlIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTEyMAorbXNnaWQgIklCTSBTMzkwIERBU0QgZHJpdmUiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTI1Cittc2dpZCAiSUJNIGlTZXJpZXMgVmlydHVhbCBEQVNEIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTEzMAorbXNnaWQgIkNvbXBhcSBTbWFydCBBcnJheSIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExMzUKK21zZ2lkICJBVEFSQUlEIENvbnRyb2xsZXIiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTQwCittc2dpZCAiSTJPIENvbnRyb2xsZXIiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTQ1Cittc2dpZCAiVXNlci1Nb2RlIExpbnV4IFVCRCIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExNTYKK21zZ2lkICJMaW51eCBkZXZpY2UtbWFwcGVyIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTE2MgorbXNnaWQgIlVua25vd24iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTY5Cittc2dpZCAicGVkX2RldmljZV9uZXcoKSAgVW5zdXBwb3J0ZWQgZGV2aWNlIHR5cGUiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoyMDgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFcnJvciBpbmZvcm1pbmcgdGhlIGtlcm5lbCBhYm91dCBtb2RpZmljYXRpb25zIHRvIHBhcnRpdGlvbiAlcyAtLSAlcy4gIFRoaXMgIgorIm1lYW5zIExpbnV4IHdvbid0IGtub3cgYWJvdXQgYW55IGNoYW5nZXMgeW91IG1hZGUgdG8gJXMgdW50aWwgeW91IHJlYm9vdCAtLSAiCisic28geW91IHNob3VsZG4ndCBtb3VudCBpdCBvciB1c2UgaXQgaW4gYW55IHdheSBiZWZvcmUgcmVib290aW5nLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjIyNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInBhcnRlZCB3YXMgdW5hYmxlIHRvIHJlLXJlYWQgdGhlIHBhcnRpdGlvbiB0YWJsZSBvbiAlcyAoJXMpLiAgVGhpcyBtZWFucyAiCisiTGludXggd29uJ3Qga25vdyBhbnl0aGluZyBhYm91dCB0aGUgbW9kaWZpY2F0aW9ucyB5b3UgbWFkZS4gIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MjM2OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGtlcm5lbCB3YXMgdW5hYmxlIHRvIHJlLXJlYWQgdGhlIHBhcnRpdGlvbiB0YWJsZSBvbiAlcyAoJXMpLiAgVGhpcyBtZWFucyAiCisiTGludXggd29uJ3Qga25vdyBhbnl0aGluZyBhYm91dCB0aGUgbW9kaWZpY2F0aW9ucyB5b3UgbWFkZSB1bnRpbCB5b3UgIgorInJlYm9vdC4gIFlvdSBzaG91bGQgcmVib290IHlvdXIgY29tcHV0ZXIgYmVmb3JlIGRvaW5nIGFueXRoaW5nIHdpdGggJXMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9jcy9nZW9tLmM6MTYyCittc2dpZCAiQ2FuJ3QgaGF2ZSB0aGUgZW5kIGJlZm9yZSB0aGUgc3RhcnQhIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9jcy9nZW9tLmM6MTY5Cittc2dpZCAiQ2FuJ3QgaGF2ZSBhIHBhcnRpdGlvbiBvdXRzaWRlIHRoZSBkaXNrISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvY3MvZ2VvbS5jOjM2NgorIywgYy1mb3JtYXQKK21zZ2lkICJBdHRlbXB0IHRvIHdyaXRlIHNlY3RvcnMgJWxkLSVsZCBvdXRzaWRlIG9mIHBhcnRpdGlvbiBvbiAlcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2NzL2dlb20uYzo0MDYgbGlicGFydGVkL2ZzL2xpbnV4X3N3YXAvbGludXhfc3dhcC5jOjQ3NQorbXNnaWQgImNoZWNraW5nIGZvciBiYWQgYmxvY2tzIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9kZWJ1Zy5jOjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWNrdHJhY2UgaGFzICVkIGNhbGxzIG9uIHN0YWNrOlxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9kZWJ1Zy5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJBc3NlcnRpb24gKCVzKSBhdCAlczolZCBpbiBmdW5jdGlvbiAlcygpIGZhaWxlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIG9wZW4gJXMgLSB1bnJlY29nbmlzZWQgZGlzayBsYWJlbC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2Rpc2suYzo0NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgbGlicGFydGVkIGRvZXNuJ3QgaGF2ZSB3cml0ZSBzdXBwb3J0IGZvciAlcy4gIFBlcmhhcHMgaXQgd2FzIGNvbXBpbGVkICIKKyJyZWFkLW9ubHkuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6NTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhcnRpdGlvbiAlZCBpcyAlcywgYnV0IHRoZSBmaWxlIHN5c3RlbSBpcyAlcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxMDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGRpc2sgbGFiZWxzIGRvIG5vdCBzdXBwb3J0IGV4dGVuZGVkIHBhcnRpdGlvbnMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTYzNAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkaXNrIGxhYmVscyBkb24ndCBzdXBwb3J0IGxvZ2ljYWwgb3IgZXh0ZW5kZWQgcGFydGl0aW9ucy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNjQ3Cittc2dpZCAiVG9vIG1hbnkgcHJpbWFyeSBwYXJ0aXRpb25zLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE2NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbid0IGFkZCBhIGxvZ2ljYWwgcGFydGl0aW9uIHRvICVzLCBiZWNhdXNlIHRoZXJlIGlzIG5vIGV4dGVuZGVkIHBhcnRpdGlvbi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbid0IGhhdmUgbW9yZSB0aGFuIG9uZSBleHRlbmRlZCBwYXJ0aXRpb24gb24gJXMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTY5MAorbXNnaWQgIkNhbid0IGhhdmUgbG9naWNhbCBwYXJ0aXRpb25zIG91dHNpZGUgb2YgdGhlIGV4dGVuZGVkIHBhcnRpdGlvbi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbid0IGhhdmUgYSBsb2dpY2FsIHBhcnRpdGlvbiBvdXRzaWRlIG9mIHRoZSBleHRlbmRlZCBwYXJ0aXRpb24gb24gJXMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTcyNSBsaWJwYXJ0ZWQvZGlzay5jOjE3NzkgbGlicGFydGVkL2Rpc2suYzoxOTQ1Cittc2dpZCAiQ2FuJ3QgaGF2ZSBvdmVybGFwcGluZyBwYXJ0aXRpb25zLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE3MzMKK21zZ2lkICJDYW4ndCBoYXZlIGEgcHJpbWFyeSBwYXJ0aXRpb24gaW5zaWRlIGFuIGV4dGVuZGVkIHBhcnRpdGlvbi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTQwCittc2dpZCAibWV0YWRhdGEiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTQyCittc2dpZCAiZnJlZSIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNDQgcGFydGVkL3VpLmM6MTE2OSBwYXJ0ZWQvdWkuYzoxMTk3Cittc2dpZCAiZXh0ZW5kZWQiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTQ2IHBhcnRlZC91aS5jOjExNzMgcGFydGVkL3VpLmM6MTIwMQorbXNnaWQgImxvZ2ljYWwiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTQ4IHBhcnRlZC91aS5jOjExNjUgcGFydGVkL3VpLmM6MTE5MworbXNnaWQgInByaW1hcnkiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTY0Cittc2dpZCAiYm9vdCIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNjYKK21zZ2lkICJyb290IgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE2OAorbXNnaWQgInN3YXAiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTcwCittc2dpZCAiaGlkZGVuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE3MgorbXNnaWQgInJhaWQiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTc0Cittc2dpZCAibHZtIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE3NgorbXNnaWQgImxiYSIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNzgKK21zZ2lkICJocC1zZXJ2aWNlIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE4MAorbXNnaWQgInBhbG8iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTgyCittc2dpZCAicHJlcCIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxODQKK21zZ2lkICJtc2Z0cmVzIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE5MAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIHBhcnRpdGlvbiBmbGFnLCAlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjc4Cittc2dpZCAiSW5mb3JtYXRpb24iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjc5Cittc2dpZCAiV2FybmluZyIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODAKK21zZ2lkICJFcnJvciIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODEKK21zZ2lkICJGYXRhbCIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODIKK21zZ2lkICJCdWciCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjgzCittc2dpZCAiTm8gSW1wbGVtZW50YXRpb24iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjg3Cittc2dpZCAiRml4IgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4OAorbXNnaWQgIlllcyIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODkKK21zZ2lkICJObyIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6OTAKK21zZ2lkICJPSyIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6OTEKK21zZ2lkICJSZXRyeSIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6OTIKK21zZ2lkICJJZ25vcmUiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjkzCittc2dpZCAiQ2FuY2VsIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkEgYnVnIGhhcyBiZWVuIGRldGVjdGVkIGluIEdOVSBQYXJ0ZWQuICBSZWZlciB0byB0aGUgd2ViIHNpdGUgb2YgcGFydGVkICIKKyJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvcGFydGVkL3BhcnRlZC5odG1sIGZvciBtb3JlIGluZm9ybWF0aW9ucyBvZiB3aGF0ICIKKyJjb3VsZCBiZSB1c2VmdWwgZm9yIGJ1ZyBzdWJtaXR0aW5nISAgUGxlYXNlIGVtYWlsIGEgYnVnIHJlcG9ydCB0byBidWctIgorInBhcnRlZEBnbnUub3JnIGNvbnRhaW5pbmcgYXQgbGVhc3QgdGhlIHZlcnNpb24gKCVzKSBhbmQgdGhlIGZvbGxvd2luZyAiCisibWVzc2FnZTogICIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjM4NAorbXNnaWQgIkNvdWxkIG5vdCBkZXRlY3QgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6Mzk1Cittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIGlzIGJpZ2dlciB0aGFuIGl0cyB2b2x1bWUhIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NDAzCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnQgZm9yIG9wZW5pbmcgJXMgZmlsZSBzeXN0ZW1zIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnQgZm9yIGNyZWF0aW5nICVzIGZpbGUgc3lzdGVtcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjUwNQorIywgYy1mb3JtYXQKK21zZ2lkICJTdXBwb3J0IGZvciBjaGVja2luZyAlcyBmaWxlIHN5c3RlbXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo1NzEKK21zZ2lkICJyYXcgYmxvY2sgY29weWluZyIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjU4MgorbXNnaWQgImdyb3dpbmcgZmlsZSBzeXN0ZW0iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo2MjIKK21zZ2lkICJDYW4ndCBjb3B5IG9udG8gYW4gb3ZlcmxhcHBpbmcgcGFydGl0aW9uLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjY0NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRGlyZWN0IHN1cHBvcnQgZm9yIGNvcHlpbmcgZmlsZSBzeXN0ZW1zIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQgZm9yICVzLiAgIgorIkhvd2V2ZXIsIHN1cHBvcnQgZm9yIHJlc2l6aW5nIGlzIGltcGxlbWVudGVkLiAgVGhlcmVmb3JlLCB0aGUgZmlsZSBzeXN0ZW0gIgorImNhbiBiZSBjb3BpZWQgaWYgdGhlIG5ldyBwYXJ0aXRpb24gaXMgYXQgbGVhc3QgYXMgYmlnIGFzIHRoZSBvbGQgb25lLiAgU28sICIKKyJlaXRoZXIgc2hyaW5rIHRoZSBwYXJ0aXRpb24geW91IGFyZSB0cnlpbmcgdG8gY29weSwgb3IgY29weSB0byBhIGJpZ2dlciAiCisicGFydGl0aW9uLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjY1OAorIywgYy1mb3JtYXQKK21zZ2lkICJTdXBwb3J0IGZvciBjb3B5aW5nICVzIGZpbGUgc3lzdGVtcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjY5NgorIywgYy1mb3JtYXQKK21zZ2lkICJTdXBwb3J0IGZvciByZXNpemluZyAlcyBmaWxlIHN5c3RlbXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6MzE1Cittc2dpZCAiY3JlYXRpbmciCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDAyCittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIGlzIGluIGFuIGludmFsaWQgc3RhdGUuICBQZXJoYXBzIGl0IGlzIG1vdW50ZWQ/IgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQxMAorbXNnaWQgIlRoZSBmaWxlIHN5c3RlbSBpcyBpbiBvbGQgKHVucmVzaXplYWJsZSkgZm9ybWF0LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0MTYKK21zZ2lkICJJbnZhbGlkIGZyZWUgYmxvY2tzIGNvdW50LiAgUnVuIHJlaXNlcmZzY2sgLS1jaGVjayBmaXJzdC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDMxCittc2dpZCAiY2hlY2tpbmciCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDM3Cittc2dpZCAiUmVpc2VyZnMgdHJlZSBzZWVtcyB0byBiZSBjb3JydXB0ZWQuICBSdW4gcmVpc2VyZnNjayAtLWNoZWNrIGZpcnN0LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0NDkKK21zZ2lkICIiCisiVGhlIHJlaXNlcmZzIGZpbGUgc3lzdGVtIHBhc3NlZCBhIGJhc2ljIGNoZWNrLiAgRm9yIGEgbW9yZSBjb21wcmVoZW5zaXZlICIKKyJjaGVjaywgcnVuIHJlaXNlcmZzY2sgLS1jaGVjay4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDc0Cittc2dpZCAiU29ycnksIGNhbid0IG1vdmUgdGhlIHN0YXJ0IG9mIHJlaXNlcmZzIHBhcnRpdGlvbnMgeWV0LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0OTAKK21zZ2lkICJDb3VsZG4ndCByZW9wZW4gZGV2aWNlIGFic3RyYWN0aW9uIGxheWVyIGZvciByZWFkL3dyaXRlLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo1MDggbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo1NTIKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MjUwIGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NjI5Cittc2dpZCAic2hyaW5raW5nIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjUyMAorbXNnaWQgImV4cGFuZGluZyIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo1OTIKK21zZ2lkICJDb3VsZG4ndCBjcmVhdGUgcmVpc2VyZnMgZGV2aWNlIGFic3RyYWN0aW9uIGhhbmRsZXIuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjYwNgorIywgYy1mb3JtYXQKK21zZ2lkICJEZXZpY2UgaXMgdG9vIHNtYWxsIGZvciAlbHUgYmxvY2tzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo2MTUKK21zZ2lkICJjb3B5aW5nIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjY4MgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCByZXNvbHZlIHN5bWJvbCAlcy4gIEVycm9yOiAlcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NzA0Cittc2dpZCAiR05VIFBhcnRlZCBmb3VuZCBhbiBpbnZhbGlkIGxpYnJlaXNlcmZzIGxpYnJhcnkuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjcxNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiR05VIFBhcnRlZCBoYXMgZGV0ZWN0ZWQgbGlicmVpc2VyZnMgaW50ZXJmYWNlIHZlcnNpb24gbWlzbWF0Y2guICBGb3VuZCAlZC0lIgorImQsIHJlcXVpcmVkICVkLiBSZWlzZXJGUyBzdXBwb3J0IHdpbGwgYmUgZGlzYWJsZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYWl4LmM6MTM3Cittc2dpZCAiU3VwcG9ydCBmb3IgcmVhZGluZyBBSVggZGlzayBsYWJlbHMgaXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9haXguYzoxNDgKK21zZ2lkICJTdXBwb3J0IGZvciB3cml0aW5nIEFJWCBkaXNrIGxhYmVscyBpcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2FpeC5jOjE2MQorbXNnaWQgIiIKKyJTdXBwb3J0IGZvciBhZGRpbmcgcGFydGl0aW9ucyB0byBBSVggZGlzayBsYWJlbHMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9haXguYzoxNzEKK21zZ2lkICIiCisiU3VwcG9ydCBmb3IgZHVwbGljYXRpbmcgcGFydGl0aW9ucyBpbiBBSVggZGlzayBsYWJlbHMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9haXguYzoxODkKK21zZ2lkICIiCisiU3VwcG9ydCBmb3Igc2V0dGluZyBzeXN0ZW0gdHlwZSBvZiBwYXJ0aXRpb25zIGluIEFJWCBkaXNrIGxhYmVscyBpcyBub3QgIgorImltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9haXguYzoxOTkKK21zZ2lkICJTdXBwb3J0IGZvciBzZXR0aW5nIGZsYWdzIGluIEFJWCBkaXNrIGxhYmVscyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2JzZC5jOjUwMSBsaWJwYXJ0ZWQvbGFiZWxzL2Rhc2QuYzo3NTUKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZG9zLmM6MTk3NCBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjc3MAorIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzoxNDQ4IGxpYnBhcnRlZC9sYWJlbHMvbG9vcC5jOjI0OAorIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoxNDA4IGxpYnBhcnRlZC9sYWJlbHMvcGM5OC5jOjc1OQorIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzoxMDQxIGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6NzA1Cittc2dpZCAiVW5hYmxlIHRvIHNhdGlzZnkgYWxsIGNvbnN0cmFpbnRzIG9uIHRoZSBwYXJ0aXRpb24uIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYnNkLmM6NTI2Cittc2dpZCAiVW5hYmxlIHRvIGFsbG9jYXRlIGEgYnNkIGRpc2tsYWJlbCBzbG90LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rhc2QuYzoxNjYKK21zZ2lkICJVbmFibGUgdG8gZGV0ZXJtaW5lIHRoZSBibG9jayBzaXplIG9mIHRoaXMgZGFzZCIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rhc2QuYzo3ODEKK21zZ2lkICJVbmFibGUgdG8gYWxsb2NhdGUgYSBkYXNkIGRpc2tsYWJlbCBzbG90IgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZG9zLmM6ODI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcGFydGl0aW9uIHRhYmxlIG9uICVzIC0tIHdyb25nIHNpZ25hdHVyZSAleC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9kb3MuYzo4NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBwYXJ0aXRpb24gdGFibGUgLSByZWN1cnNpdmUgcGFydGl0aW9uIG9uICVzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rvcy5jOjEzMTgKK21zZ2lkICJFeHRlbmRlZCBwYXJ0aXRpb25zIGNhbm5vdCBiZSBoaWRkZW4gb24gbXNkb3MgZGlzayBsYWJlbHMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZG9zLmM6MTk1OAorbXNnaWQgIlBhcnRlZCBjYW4ndCByZXNpemUgcGFydGl0aW9ucyBtYW5hZ2VkIGJ5IFdpbmRvd3MgRHluYW1pYyBEaXNrLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjE5MAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBoYXMgbm8gZXh0ZW5kZWQgcGFydGl0aW9uICh2b2x1bWUgaGVhZGVyIHBhcnRpdGlvbikuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6MzEzCittc2dpZCAiQ2hlY2tzdW0gaXMgd3JvbmcsIGluZGljYXRpbmcgdGhlIHBhcnRpdGlvbiB0YWJsZSBpcyBjb3JydXB0LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjYxNgorbXNnaWQgIk9ubHkgcHJpbWFyeSBwYXJ0aXRpb25zIGNhbiBiZSByb290IHBhcnRpdGlvbnMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6NjMwCittc2dpZCAiT25seSBwcmltYXJ5IHBhcnRpdGlvbnMgY2FuIGJlIHN3YXAgcGFydGl0aW9ucy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9kdmguYzo2NDQKK21zZ2lkICJPbmx5IGxvZ2ljYWwgcGFydGl0aW9ucyBjYW4gYmUgYSBib290IGZpbGUuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6NzIxCittc2dpZCAiT25seSBsb2dpY2FsIHBhcnRpdGlvbnMgKGJvb3QgZmlsZXMpIGhhdmUgYSBuYW1lLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjgxMgorbXNnaWQgIlRvbyBtYW55IHByaW1hcnkgcGFydGl0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBvcGVuIGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBzZWVrIGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyByZWFkIGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyB3cml0ZSBlcnJvclxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjExNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgSU9DVEwgZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIEFQSSB2ZXJzaW9uIG1pc21hdGNoXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBVbnN1cHBvcnRlZCBkaXNrIHR5cGVcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFVuc3VwcG9ydGVkIGRpc2sgZm9ybWF0XG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTMwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBEaXNrIGluIHVzZVxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgQ29uZmlnIGZpbGUgc3ludGF4IGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBWb2x1bWUgbGFiZWwgaXMgY29ycnVwdGVkLlxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjE0MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgYSBkYXRhIHNldCBuYW1lIGlzIGNvcnJ1cHRlZC5cbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHNwYWNlIGFsbG9jYXRpb25cbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIGRldmljZSB2ZXJpZmljYXRpb24gZmFpbGVkXG4iCisiVGhlIHNwZWNpZmllZCBkZXZpY2UgaXMgbm90IGEgdmFsaWQgREFTRCBkZXZpY2VcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBGYXRhbCBlcnJvclxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzo0NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIGNvbnRhaW5zIEdQVCBzaWduYXR1cmVzLCBpbmRpY2F0aW5nIHRoYXQgaXQgaGFzIGEgR1BUIHRhYmxlLiAgSG93ZXZlciwgaXQgIgorImRvZXMgbm90IGhhdmUgYSB2YWxpZCBmYWtlIG1zZG9zIHBhcnRpdGlvbiB0YWJsZSwgYXMgaXQgc2hvdWxkLiAgUGVyaGFwcyBpdCAiCisid2FzIGNvcnJ1cHRlZCAtLSBwb3NzaWJseSBieSBhIHByb2dyYW0gdGhhdCBkb2Vzbid0IHVuZGVyc3RhbmQgR1BUIHBhcnRpdGlvbiAiCisidGFibGVzLiAgT3IgcGVyaGFwcyB5b3UgZGVsZXRlZCB0aGUgR1BUIHRhYmxlLCBhbmQgYXJlIG5vdyB1c2luZyBhbiBtc2RvcyAiCisicGFydGl0aW9uIHRhYmxlLiAgSXMgdGhpcyBhIEdQVCBwYXJ0aXRpb24gdGFibGU/IgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6NjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9ybWF0IG9mIHRoZSBHUFQgcGFydGl0aW9uIHRhYmxlIGlzIHZlcnNpb24gJXgsIHdoaWNoIGlzIG5ld2VyIHRoYW4gIgorIndoYXQgUGFydGVkIGNhbiByZWNvZ25pc2UuICBQbGVhc2UgdGVsbCB1cyEgIGJ1Zy1wYXJ0ZWRAZ251Lm9yZyIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm90IGFsbCBvZiB0aGUgc3BhY2UgYXZhaWxhYmxlIHRvICVzIGFwcGVhcnMgdG8gYmUgdXNlZCwgeW91IGNhbiBmaXggdGhlIEdQVCAiCisidG8gdXNlIGFsbCBvZiB0aGUgc3BhY2UgKGFuIGV4dHJhICVsbHUgYmxvY2tzKSBvciBjb250aW51ZSB3aXRoIHRoZSBjdXJyZW50ICIKKyJzZXR0aW5nPyAiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzo4MjcKK21zZ2lkICIiCisiVGhlIGJhY2t1cCBHUFQgdGFibGUgaXMgbm90IGF0IHRoZSBlbmQgb2YgdGhlIGRpc2ssIGFzIGl0IHNob3VsZCBiZS4gIFRoaXMgIgorIm1pZ2h0IG1lYW4gdGhhdCBhbm90aGVyIG9wZXJhdGluZyBzeXN0ZW0gYmVsaWV2ZXMgdGhlIGRpc2sgaXMgc21hbGxlci4gIEZpeCwgIgorImJ5IG1vdmluZyB0aGUgYmFja3VwIHRvIHRoZSBlbmQgKGFuZCByZW1vdmluZyB0aGUgb2xkIGJhY2t1cCk/IgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6ODYyCittc2dpZCAiIgorIlRoZSBwcmltYXJ5IEdQVCB0YWJsZSBpcyBjb3JydXB0LCBidXQgdGhlIGJhY2t1cCBhcHBlYXJzIE9LLCBzbyB0aGF0IHdpbGwgYmUgIgorInVzZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6ODcwCittc2dpZCAiIgorIkJvdGggdGhlIHByaW1hcnkgYW5kIGJhY2t1cCBHUFQgdGFibGVzIGFyZSBjb3JydXB0LiAgVHJ5IG1ha2luZyBhIGZyZXNoICIKKyJ0YWJsZSwgYW5kIHVzaW5nIFBhcnRlZCdzIHJlc2N1ZSBmZWF0dXJlIHRvIHJlY292ZXIgcGFydGl0aW9ucy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoxODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBzaWduYXR1cmUgJXggZm9yIE1hYyBkaXNrIGxhYmVscy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoyMjYKK21zZ2lkICJQYXJ0aXRpb24gbWFwIGhhcyBubyBwYXJ0aXRpb24gbWFwIGVudHJ5ISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyB0b28gc21hbGwgZm9yIGEgTWFjIGRpc2sgbGFiZWwhIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIlBhcnRpdGlvbiAlZCBoYXMgYW4gaW52YWxpZCBzaWduYXR1cmUgJXguIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIlBhcnRpdGlvbiAlZCBoYXMgYW4gaW52YWxpZCBsZW5ndGggb2YgMCBieXRlcyEiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo1ODAKK21zZ2lkICJUaGUgZGF0YSByZWdpb24gZG9lc24ndCBzdGFydCBhdCB0aGUgc3RhcnQgb2YgdGhlIHBhcnRpdGlvbi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo1OTcKK21zZ2lkICJUaGUgYm9vdCByZWdpb24gZG9lc24ndCBzdGFydCBhdCB0aGUgc3RhcnQgb2YgdGhlIHBhcnRpdGlvbi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo2MTEKK21zZ2lkICJUaGUgcGFydGl0aW9uJ3MgYm9vdCByZWdpb24gZG9lc24ndCBvY2N1cHkgdGhlIGVudGlyZSBwYXJ0aXRpb24uIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NjIyCittc2dpZCAiVGhlIHBhcnRpdGlvbidzIGRhdGEgcmVnaW9uIGRvZXNuJ3Qgb2NjdXB5IHRoZSBlbnRpcmUgcGFydGl0aW9uLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjY3NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV2VpcmQgYmxvY2sgc2l6ZSBvbiBkZXZpY2UgZGVzY3JpcHRvcjogJWQgYnl0ZXMgaXMgbm90IGRpdmlzaWJsZSBieSA1MTIuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6Njg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZHJpdmVyIGRlc2NyaXB0b3Igc2F5cyB0aGUgcGh5c2ljYWwgYmxvY2sgc2l6ZSBpcyAlZCBieXRlcywgYnV0IExpbnV4ICIKKyJzYXlzIGl0IGlzICVkIGJ5dGVzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjczNgorbXNnaWQgIk5vIHZhbGlkIHBhcnRpdGlvbiBtYXAgZm91bmQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6Nzk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb25mbGljdGluZyBwYXJ0aXRpb24gbWFwIGVudHJ5IHNpemVzISAgRW50cnkgMSBzYXlzIGl0IGlzICVkLCBidXQgZW50cnkgJWQgIgorInNheXMgaXQgaXMgJWQhIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6ODIyCittc2dpZCAiV2VpcmQhICBUaGVyZSBhcmUgMiBwYXJ0aXRpb25zIG1hcCBlbnRyaWVzISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjEzNDcKK21zZ2lkICIiCisiQ2hhbmdpbmcgdGhlIG5hbWUgb2YgYSByb290IG9yIHN3YXAgcGFydGl0aW9uIHdpbGwgcHJldmVudCBMaW51eCBmcm9tICIKKyJyZWNvZ25pc2luZyBpdCBhcyBzdWNoLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjE0NDMKK21zZ2lkICJDYW4ndCBhZGQgYW5vdGhlciBwYXJ0aXRpb24gLS0gdGhlIHBhcnRpdGlvbiBtYXAgaXMgdG9vIHNtYWxsISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3BjOTguYzozNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBwYXJ0aXRpb24gdGFibGUgb24gJXMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcGM5OC5jOjQwNiBsaWJwYXJ0ZWQvbGFiZWxzL3BjOTguYzo0ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBhcnRpdGlvbiAlZCBpc24ndCBhbGlnbmVkIHRvIGN5bGluZGVyIGJvdW5kYXJpZXMuICBUaGlzIGlzIHN0aWxsICIKKyJ1bnN1cHBvcnRlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9wYzk4LmM6NzkxCittc2dpZCAiQ2FuJ3QgYWRkIGFub3RoZXIgcGFydGl0aW9uLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjE2MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEJhZCBjaGVja3N1bSBvbiBibG9jayAlbGx1IG9mIHR5cGUgJXMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6NDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRGlkbid0IGZpbmQgcmRiIGJsb2NrLCBzaG91bGQgbmV2ZXIgaGFwcGVuLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjU4MQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IExvb3AgZGV0ZWN0ZWQgYXQgYmxvY2sgJWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6NjAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogVGhlICVzIGxpc3Qgc2VlbXMgYmFkIGF0IGJsb2NrICVzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjY4OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBsaXN0IGJhZCBibG9ja3MuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6Njk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGxpc3QgcGFydGl0aW9uIGJsb2Nrcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo3MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gbGlzdCBmaWxlIHN5c3RlbSBibG9ja3MuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6NzEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGxpc3QgYm9vdCBibG9ja3MuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6NzQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byB3cml0ZSBwYXJ0aXRpb24gYmxvY2sgYXQgJWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6MTA2OQorbXNnaWQgIlVuYWJsZSB0byBhbGxvY2F0ZSBhIHBhcnRpdGlvbiBudW1iZXIuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6MTQ1Cittc2dpZCAiQ29ycnVwdGVkIFN1biBkaXNrIGxhYmVsIGRldGVjdGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3N1bi5jOjI2NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGRpc2sgQ0hTIGdlb21ldHJ5ICglZCwlZCwlZCkgcmVwb3J0ZWQgYnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0gZG9lcyBub3QgIgorIm1hdGNoIHRoZSBnZW9tZXRyeSBzdG9yZWQgb24gdGhlIGRpc2sgbGFiZWwgKCVkLCVkLCVkKS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9zdW4uYzoyODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGRpc2sgbGFiZWwgZGVzY3JpYmVzIGEgZGlzayBiaWdnZXIgdGhhbiAlcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9zdW4uYzo0NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGRpc2sgaGFzICVkIGN5bGluZGVycywgd2hpY2ggaXMgZ3JlYXRlciB0aGFuIHRoZSBtYXhpbXVtIG9mIDY1NTM2LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3N1bi5jOjczNworbXNnaWQgIiIKKyJUaGUgV2hvbGUgRGlzayBwYXJ0aXRpb24gaXMgdGhlIG9ubHkgYXZhaWxhYmxlIG9uZSBsZWZ0LiAgR2VuZXJhbGx5LCBpdCBpcyAiCisibm90IGEgZ29vZCBpZGVhIHRvIG92ZXJ3cml0ZSB0aGlzIHBhcnRpdGlvbiB3aXRoIGEgcmVhbCBvbmUuICBTb2xhcmlzIG1heSAiCisibm90IGJlIGFibGUgdG8gYm9vdCB3aXRob3V0IGl0LCBhbmQgU0lMTyAodGhlIHNwYXJjIGJvb3QgbG9hZGVyKSBhcHByZWNpYXRlcyAiCisiaXQgYXMgd2VsbC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9zdW4uYzo3NTIKK21zZ2lkICJTdW4gZGlzayBsYWJlbCBpcyBmdWxsLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIG9wZW5pbmcgZGV2aWNlICclcycgZmFpbGVkLlxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6MTY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBzZWVraW5nIGRldmljZSAnJXMnIGZhaWxlZC5cbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjE3MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgd3JpdGluZyB0byBkZXZpY2UgJyVzJyBmYWlsZWQsXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzoxNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHJlYWRpbmcgZnJvbSBkZXZpY2UgJyVzJyBmYWlsZWQuXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzoxNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmF0YWwgZXJyb3JcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0MTgKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBWVE9DIGxhYmVscy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDI0Cittc2dpZCAiQ291bGQgbm90IHJlYWQgVlRPQyBGTVQxIERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQzMQorbXNnaWQgIkNvdWxkIG5vdCByZWFkIFZUT0MgRk1UNCBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0MzgKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBWVE9DIEZNVDUgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDQ1Cittc2dpZCAiQ291bGQgbm90IHJlYWQgVlRPQyBGTVQ3IERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQ2MgorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBWVE9DIGxhYmVscy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDY4Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIFZUT0MgRk1UMSBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0NzUKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgVlRPQyBGTVQ0IERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQ4MgorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBWVE9DIEZNVDUgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDg5Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIFZUT0MgRk1UNyBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGlicGFydGVkLmM6Mjk2IGxpYnBhcnRlZC9saWJwYXJ0ZWQuYzozMTYKK21zZ2lkICJPdXQgb2YgbWVtb3J5LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvdW5pdC5jOjEzOQorbXNnaWQgIkNhbm5vdCBnZXQgdW5pdCBzaXplIGZvciBzcGVjaWFsIHVuaXQgJ0NPTVBBQ1QnLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvdW5pdC5jOjM4NgorIywgYy1mb3JtYXQKK21zZ2lkICJcIiVzXCIgaGFzIGludmFsaWQgc3ludGF4IGZvciBsb2NhdGlvbnMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC91bml0LmM6Mzk0CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBtYXhpbXVtIGhlYWQgdmFsdWUgaXMgJWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC91bml0LmM6NDAxCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBtYXhpbXVtIHNlY3RvciB2YWx1ZSBpcyAlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL3VuaXQuYzo0MTMgbGlicGFydGVkL3VuaXQuYzo1NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGxvY2F0aW9uICVzIGlzIG91dHNpZGUgb2YgdGhlIGRldmljZSAlcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL3VuaXQuYzo1MjcKK21zZ2lkICJJbnZhbGlkIG51bWJlci4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FmZnMuYzo2MyBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXBmcy5jOjU2CisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXNmcy5jOjcwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGFsbG9jYXRlIHBhcnRpdGlvbiBibG9ja1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hZmZzLmM6NzggbGlicGFydGVkL2ZzL2FtaWdhL2FwZnMuYzo3MAorIzogbGlicGFydGVkL2ZzL2FtaWdhL2FzZnMuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBhbGxvY2F0ZSBibG9ja1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hZmZzLmM6ODMgbGlicGFydGVkL2ZzL2FtaWdhL2FwZnMuYzo3NQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IENvdWxkbid0IHJlYWQgYm9vdCBibG9jayAlbGx1XG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FmZnMuYzo5OSBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXBmcy5jOjg2CisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXNmcy5jOjkyIGxpYnBhcnRlZC9mcy9hbWlnYS9hc2ZzLmM6MTA2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogQ291bGRuJ3QgcmVhZCByb290IGJsb2NrICVsbHVcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzo3MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBhbGxvY2F0ZSBpZCBsaXN0IGVsZW1lbnRcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBDb3VsZG4ndCByZWFkIGJsb2NrICVsbHVcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzoyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBCYWQgY2hlY2tzdW0gb24gYmxvY2sgJWxsdSBvZiB0eXBlICVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6MjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogQ291bGRuJ3Qgd3JpdGUgYmxvY2sgJWRcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzoyNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gYWxsb2NhdGUgZGlza19zcGVjaWZpYyByZGIgYmxvY2tcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzoyODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBEaWRuJ3QgZmluZCByZGIgYmxvY2ssIHNob3VsZCBuZXZlciBoYXBwZW5cbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzozMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gcmVhZCBwYXJ0aXRpb24gYmxvY2sgJWxsdVxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo4NyBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6MTEyCittc2dpZCAiSW5jb25zaXN0ZW50IGdyb3VwIGRlc2NyaXB0b3JzISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6OTEgbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjExNgorbXNnaWQgIkZpbGUgc3lzdGVtIGZ1bGwhIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo2ODYKK21zZ2lkICJJbnZhbGlkIHN1cGVyYmxvY2suICBBcmUgeW91IHN1cmUgdGhpcyBpcyBhbiBleHQyIGZpbGUgc3lzdGVtPyIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6NzAwIGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NjU4Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGVycm9ycyEgIFlvdSBzaG91bGQgcnVuIGUyZnNjay4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjcxMQorbXNnaWQgIiIKKyJGaWxlIHN5c3RlbSB3YXMgbm90IGNsZWFubHkgdW5tb3VudGVkISAgWW91IHNob3VsZCBydW4gZTJmc2NrLiAgTW9kaWZ5aW5nIGFuICIKKyJ1bmNsZWFuIGZpbGUgc3lzdGVtIGNvdWxkIGNhdXNlIHNldmVyZSBjb3JydXB0aW9uLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6NzMxCittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGluY29tcGF0aWJsZSBmZWF0dXJlIGVuYWJsZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo3NDIKK21zZ2lkICJFcnJvciBhbGxvY2F0aW5nIGJ1ZmZlciBjYWNoZS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9pbm9kZV9yZWxvY2F0b3IuYzoxMTQKK21zZ2lkICIiCisiRm91bmQgYW4gaW5vZGUgd2l0aCBhIGluY29ycmVjdCBsaW5rIGNvdW50LiAgQmV0dGVyIGdvIHJ1biBlMmZzY2sgZmlyc3QhIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfaW5vZGVfcmVsb2NhdG9yLmM6NDg3Cittc2dpZCAiTm90IGVub3VnaCBmcmVlIGlub2RlcyEiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzoyMjMKK21zZ2lkICJGaWxlIHN5c3RlbSBpcyB0b28gZnVsbCB0byByZW1vdmUgYSBncm91cCEiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzoyMzIKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgdG9vIG1hbnkgYWxsb2NhdGVkIGlub2RlcyB0byByZW1vdmUgYSBncm91cCEiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo0OTEKK21zZ2lkICJhZGRpbmcgZ3JvdXBzIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgZmlsZSBzeXN0ZW0gaXMgdG9vIGZ1bGwgdG8gcmVzaXplIGl0IHRvICVpIGJsb2Nrcy4gIFNvcnJ5LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjUzOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBmaWxlIHN5c3RlbSBoYXMgdG9vIG1hbnkgb2NjdXBpZWQgaW5vZGVzIHRvIHJlc2l6ZSBpdCB0byAlaSBibG9ja3MuICAiCisiU29ycnkuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NjY2Cittc2dpZCAiRmlsZSBzeXN0ZW0gd2FzIG5vdCBjbGVhbmx5IHVubW91bnRlZCEgIFlvdSBzaG91bGQgcnVuIGUyZnNjay4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo2NzUKK21zZ2lkICIiCisiVGhlIGZpbGUgc3lzdGVtIGhhcyB0aGUgJ2Rpcl9pbmRleCcgZmVhdHVyZSBlbmFibGVkLiAgUGFydGVkIGNhbiBvbmx5IHJlc2l6ZSAiCisidGhlIGZpbGUgc3lzdGVtIGlmIGl0IGRpc2FibGVzIHRoaXMgZmVhdHVyZS4gIFlvdSBjYW4gZW5hYmxlIGl0IGxhdGVyIGJ5ICIKKyJydW5uaW5nICd0dW5lMmZzIC1PIGRpcl9pbmRleCBERVZJQ0UnIGFuZCB0aGVuICdlMmZzY2sgLWZEIERFVklDRScuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NjkxCittc2dpZCAiIgorIkEgcmVzaXplIG9wZXJhdGlvbiBvbiB0aGlzIGZpbGUgc3lzdGVtIHdpbGwgdXNlIEVYUEVSSU1FTlRBTCBjb2RlXG4iCisidGhhdCBNQVkgQ09SUlVQVCBpdCAoYWx0aG91Z2ggbm8gb25lIGhhcyByZXBvcnRlZCBhbnkgc3VjaCBkYW1hZ2UgeWV0KS5cbiIKKyJZb3Ugc2hvdWxkIGF0IGxlYXN0IGJhY2t1cCB5b3VyIGRhdGEgZmlyc3QsIGFuZCBydW4gJ2UyZnNjayAtZicgYWZ0ZXJ3YXJkcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9ibG9ja19yZWxvY2F0b3IuYzoxOTgKK21zZ2lkICJDcm9zcy1saW5rZWQgYmxvY2tzIGZvdW5kISAgQmV0dGVyIGdvIHJ1biBlMmZzY2sgZmlyc3QhIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfYmxvY2tfcmVsb2NhdG9yLmM6NTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrICVpIGhhcyBubyByZWZlcmVuY2U/ICBXZWlyZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9ibG9ja19yZWxvY2F0b3IuYzo3MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmxvY2sgJWkgc2hvdWxkbid0IGhhdmUgYmVlbiBtYXJrZWQgKCVkLCAlZCkhIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2ludGVyZmFjZS5jOjE4NgorbXNnaWQgIiIKKyJUaGUgZXh0MiBmaWxlIHN5c3RlbSBwYXNzZWQgYSBiYXNpYyBjaGVjay4gIEZvciBhIG1vcmUgY29tcHJlaGVuc2l2ZSBjaGVjaywgIgorInVzZSB0aGUgZTJmc2NrIHByb2dyYW0uIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2ludGVyZmFjZS5jOjIwMworbXNnaWQgIlNvcnJ5LCBjYW4ndCBtb3ZlIHRoZSBzdGFydCBvZiBleHQyIHBhcnRpdGlvbnMgeWV0ISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2J1ZmZlci5jOjgyCittc2dpZCAiQ291bGRuJ3QgZmx1c2ggYnVmZmVyIGNhY2hlISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX21rZnMuYzoxNjIKK21zZ2lkICJ3cml0aW5nIHBlci1ncm91cCBtZXRhZGF0YSIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX21rZnMuYzo1NjQKK21zZ2lkICJGaWxlIHN5c3RlbSB0b28gc21hbGwgZm9yIGV4dDIuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY2FsYy5jOjEzNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IG5lZWQgJXMgb2YgZnJlZSBkaXNrIHNwYWNlIHRvIHNocmluayB0aGlzIHBhcnRpdGlvbiB0byB0aGlzIHNpemUuICAiCisiQ3VycmVudGx5LCBvbmx5ICVzIGlzIGZyZWUuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY29udGV4dC5jOjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDbHVzdGVyIHN0YXJ0IGRlbHRhID0gJWQsIHdoaWNoIGlzIG5vdCBhIG11bHRpcGxlIG9mIHRoZSBjbHVzdGVyIHNpemUgJWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvZmF0LmM6MzA4CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhcnRpdGlvbiB0b28gYmlnL3NtYWxsIGZvciBhICVzIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jOjQ3NAorbXNnaWQgIiIKKyJUaGUgRkFUcyBkb24ndCBtYXRjaC4gIElmIHlvdSBkb24ndCBrbm93IHdoYXQgdGhpcyBtZWFucywgdGhlbiBzZWxlY3QgIgorImNhbmNlbCwgcnVuIHNjYW5kaXNrIG9uIHRoZSBmaWxlIHN5c3RlbSwgYW5kIHRoZW4gY29tZSBiYWNrLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jOjUxNAorbXNnaWQgIlRoZXJlIGFyZSBubyBwb3NzaWJsZSBjb25maWd1cmF0aW9ucyBmb3IgdGhpcyBGQVQgdHlwZS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9mYXQuYzo1MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZpbGUgc3lzdGVtIGRvZXNuJ3QgaGF2ZSBleHBlY3RlZCBzaXplcyBmb3IgV2luZG93cyB0byBsaWtlIGl0LiAgQ2x1c3RlciAiCisic2l6ZSBpcyAlZGsgKCVkayBleHBlY3RlZCk7IG51bWJlciBvZiBjbHVzdGVycyBpcyAlZCAoJWQgZXhwZWN0ZWQpOyBzaXplIG9mICIKKyJGQVRzIGlzICVkIHNlY3RvcnMgKCVkIGV4cGVjdGVkKS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9mYXQuYzo1NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZpbGUgc3lzdGVtIGlzIHJlcG9ydGluZyB0aGUgZnJlZSBzcGFjZSBhcyAlZCBjbHVzdGVycywgbm90ICVkIGNsdXN0ZXJzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jOjg3NAorbXNnaWQgIiIKKyJHTlUgUGFydGVkIHdhcyBtaXNjb21waWxlZDogdGhlIEZBVCBib290IHNlY3RvciBzaG91bGQgYmUgNTEyIGJ5dGVzLiAgRkFUICIKKyJzdXBwb3J0IHdpbGwgYmUgZGlzYWJsZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6MTU5Cittc2dpZCAiIgorIlRoZXJlJ3Mgbm90IGVub3VnaCByb29tIGluIHRoZSByb290IGRpcmVjdG9yeSBmb3IgYWxsIG9mIHRoZSBmaWxlcy4gIEVpdGhlciAiCisiY2FuY2VsLCBvciBpZ25vcmUgdG8gbG9zZSB0aGUgZmlsZXMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6MzAwCittc2dpZCAiRXJyb3Igd3JpdGluZyB0byB0aGUgcm9vdCBkaXJlY3RvcnkuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NDg5Cittc2dpZCAiSWYgeW91IGxlYXZlIHlvdXIgZmlsZSBzeXN0ZW0gYXMgRkFUMTYsIHRoZW4geW91IHdpbGwgaGF2ZSBubyBwcm9ibGVtcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo0OTIKK21zZ2lkICIiCisiSWYgeW91IGNvbnZlcnQgdG8gRkFUMTYsIGFuZCBNUyBXaW5kb3dzIGlzIGluc3RhbGxlZCBvbiB0aGlzIHBhcnRpdGlvbiwgdGhlbiAiCisieW91IG11c3QgcmUtaW5zdGFsbCB0aGUgTVMgV2luZG93cyBib290IGxvYWRlci4gIElmIHlvdSB3YW50IHRvIGRvIHRoaXMsIHlvdSAiCisic2hvdWxkIGNvbnN1bHQgdGhlIFBhcnRlZCBtYW51YWwgKG9yIHlvdXIgZGlzdHJpYnV0aW9uJ3MgbWFudWFsKS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1MDAKK21zZ2lkICIiCisiSWYgeW91IGxlYXZlIHlvdXIgZmlsZSBzeXN0ZW0gYXMgRkFUMzIsIHRoZW4geW91IHdpbGwgbm90IGludHJvZHVjZSBhbnkgbmV3ICIKKyJwcm9ibGVtcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1MDQKK21zZ2lkICIiCisiSWYgeW91IGNvbnZlcnQgdG8gRkFUMzIsIGFuZCBNUyBXaW5kb3dzIGlzIGluc3RhbGxlZCBvbiB0aGlzIHBhcnRpdGlvbiwgdGhlbiAiCisieW91IG11c3QgcmUtaW5zdGFsbCB0aGUgTVMgV2luZG93cyBib290IGxvYWRlci4gIElmIHlvdSB3YW50IHRvIGRvIHRoaXMsIHlvdSAiCisic2hvdWxkIGNvbnN1bHQgdGhlIFBhcnRlZCBtYW51YWwgKG9yIHlvdXIgZGlzdHJpYnV0aW9uJ3MgbWFudWFsKS4gIEFsc28sICIKKyJjb252ZXJ0aW5nIHRvIEZBVDMyIHdpbGwgbWFrZSB0aGUgZmlsZSBzeXN0ZW0gdW5yZWFkYWJsZSBieSBNUyBET1MsIE1TICIKKyJXaW5kb3dzIDk1YSwgYW5kIE1TIFdpbmRvd3MgTlQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzICAlcyAgJXMiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1MTkKK21zZ2lkICJXb3VsZCB5b3UgbGlrZSB0byB1c2UgRkFUMzI/IgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTUwIGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzICAlcyIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjU1MQorbXNnaWQgIiIKKyJUaGUgZmlsZSBzeXN0ZW0gY2FuIG9ubHkgYmUgcmVzaXplZCB0byB0aGlzIHNpemUgYnkgY29udmVydGluZyB0byBGQVQxNi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1NjcKK21zZ2lkICIiCisiVGhlIGZpbGUgc3lzdGVtIGNhbiBvbmx5IGJlIHJlc2l6ZWQgdG8gdGhpcyBzaXplIGJ5IGNvbnZlcnRpbmcgdG8gRkFUMzIuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTgwCittc2dpZCAiIgorIkdOVSBQYXJ0ZWQgY2Fubm90IHJlc2l6ZSB0aGlzIHBhcnRpdGlvbiB0byB0aGlzIHNpemUuICBXZSdyZSB3b3JraW5nIG9uIGl0ISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo0OSBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo1NgorbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyBhbiBpbnZhbGlkIHNpZ25hdHVyZSBmb3IgYSBGQVQgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjY0Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGludmFsaWQgc2VjdG9yIHNpemUgZm9yIGEgRkFUIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo3MQorbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyBhbiBpbnZhbGlkIGNsdXN0ZXIgc2l6ZSBmb3IgYSBGQVQgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjc4Cittc2dpZCAiIgorIkZpbGUgc3lzdGVtIGhhcyBhbiBpbnZhbGlkIG51bWJlciBvZiByZXNlcnZlZCBzZWN0b3JzIGZvciBhIEZBVCBmaWxlIHN5c3RlbS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6ODUKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgYW4gaW52YWxpZCBudW1iZXIgb2YgRkFUcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6MTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGlzIGZpbGUgc3lzdGVtIGhhcyBhIGxvZ2ljYWwgc2VjdG9yIHNpemUgb2YgJWQuICBHTlUgUGFydGVkIGlzIGtub3duIG5vdCAiCisidG8gd29yayBwcm9wZXJseSB3aXRoIHNlY3RvciBzaXplcyBvdGhlciB0aGFuIDUxMiBieXRlcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6MTY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZmlsZSBzeXN0ZW0ncyBDSFMgZ2VvbWV0cnkgaXMgKCVkLCAlZCwgJWQpLCB3aGljaCBpcyBpbnZhbGlkLiAgVGhlICIKKyJwYXJ0aXRpb24gdGFibGUncyBDSFMgZ2VvbWV0cnkgaXMgKCVkLCAlZCwgJWQpLiAgSWYgeW91IHNlbGVjdCBJZ25vcmUsIHRoZSAiCisiZmlsZSBzeXN0ZW0ncyBDSFMgZ2VvbWV0cnkgd2lsbCBiZSBsZWZ0IHVuY2hhbmdlZC4gIElmIHlvdSBzZWxlY3QgRml4LCB0aGUgIgorImZpbGUgc3lzdGVtJ3MgQ0hTIGdlb21ldHJ5IHdpbGwgYmUgc2V0IHRvIG1hdGNoIHRoZSBwYXJ0aXRpb24gdGFibGUncyBDSFMgIgorImdlb21ldHJ5LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzoyMTMKK21zZ2lkICJGQVQgYm9vdCBzZWN0b3Igc2F5cyBsb2dpY2FsIHNlY3RvciBzaXplIGlzIDAuICBUaGlzIGlzIHdlaXJkLiAiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6MjE5Cittc2dpZCAiRkFUIGJvb3Qgc2VjdG9yIHNheXMgdGhlcmUgYXJlIG5vIEZBVCB0YWJsZXMuICBUaGlzIGlzIHdlaXJkLiAiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6MjI1Cittc2dpZCAiRkFUIGJvb3Qgc2VjdG9yIHNheXMgY2x1c3RlcnMgYXJlIDAgc2VjdG9ycy4gIFRoaXMgaXMgd2VpcmQuICIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzoyMzUKK21zZ2lkICJGaWxlIHN5c3RlbSBpcyBGQVQxMiwgd2hpY2ggaXMgdW5zdXBwb3J0ZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjQxMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGluZm9ybWF0aW9uIHNlY3RvciBoYXMgdGhlIHdyb25nIHNpZ25hdHVyZSAoJXgpLiAgU2VsZWN0IGNhbmNlbCBmb3Igbm93LCAiCisiYW5kIHNlbmQgaW4gYSBidWcgcmVwb3J0LiAgSWYgeW91J3JlIGRlc3BlcmF0ZSwgaXQncyBwcm9iYWJseSBzYWZlIHRvIGlnbm9yZS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb3VudC5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgZGlyZWN0b3J5IGVudHJ5IGZvciAlczogZmlyc3QgY2x1c3RlciBpcyB0aGUgZW5kIG9mIGZpbGUgbWFya2VyLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvdW50LmM6MTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJCYWQgRkFUOiB1bnRlcm1pbmF0ZWQgY2hhaW4gZm9yICVzLiAgWW91IHNob3VsZCBydW4gZG9zZnNjayBvciBzY2FuZGlzay4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb3VudC5jOjE3NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQmFkIEZBVDogY2x1c3RlciAlZCBvdXRzaWRlIGZpbGUgc3lzdGVtIGluIGNoYWluIGZvciAlcy4gIFlvdSBzaG91bGQgcnVuICIKKyJkb3Nmc2NrIG9yIHNjYW5kaXNrLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvdW50LmM6MTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJCYWQgRkFUOiBjbHVzdGVyICVkIGlzIGNyb3NzLWxpbmtlZCBmb3IgJXMuICBZb3Ugc2hvdWxkIHJ1biBkb3Nmc2NrIG9yICIKKyJzY2FuZGlzay4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb3VudC5jOjIwMworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyAlZGssIGJ1dCBpdCBoYXMgJWQgY2x1c3RlcnMgKCVkaykuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY291bnQuYzoyNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmaWxlICVzIGlzIG1hcmtlZCBhcyBhIHN5c3RlbSBmaWxlLiAgVGhpcyBtZWFucyBtb3ZpbmcgaXQgY291bGQgY2F1c2UgIgorInNvbWUgcHJvZ3JhbXMgdG8gc3RvcCB3b3JraW5nLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3RhYmxlLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGQVQgJWQgbWVkaWEgJXggZG9lc24ndCBtYXRjaCB0aGUgYm9vdCBzZWN0b3IncyBtZWRpYSAleC4gIFlvdSBzaG91bGQgIgorInByb2JhYmx5IHJ1biBzY2FuZGlzay4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC90YWJsZS5jOjI2OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYXRfdGFibGVfc2V0OiBjbHVzdGVyICVsZCBvdXRzaWRlIGZpbGUgc3lzdGVtIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvdGFibGUuYzozMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmF0X3RhYmxlX2dldDogY2x1c3RlciAlbGQgb3V0c2lkZSBmaWxlIHN5c3RlbSIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3RhYmxlLmM6MzQzCittc2dpZCAiZmF0X3RhYmxlX2FsbG9jX2NsdXN0ZXI6IG5vIGZyZWUgY2x1c3RlcnMiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2xpbnV4X3N3YXAvbGludXhfc3dhcC5jOjI3NQorIywgYy1mb3JtYXQKK21zZ2lkICJVbnJlY29nbmlzZWQgb2xkIHN0eWxlIGxpbnV4IHN3YXAgc2lnbmF0dXJlICclMTBzJy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2xpbnV4X3N3YXAvbGludXhfc3dhcC5jOjMxOAorIywgYy1mb3JtYXQKK21zZ2lkICJVbnJlY29nbmlzZWQgbmV3IHN0eWxlIGxpbnV4IHN3YXAgc2lnbmF0dXJlICclMTBzJy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2xpbnV4X3N3YXAvbGludXhfc3dhcC5jOjM1OAorIywgYy1mb3JtYXQKK21zZ2lkICJVbnJlY29nbmlzZWQgc3dzdXNwIGxpbnV4IHN3YXAgc2lnbmF0dXJlICclOXMnLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvbGludXhfc3dhcC9saW51eF9zd2FwLmM6NDM0Cittc2dpZCAiVG9vIG1hbnkgYmFkIHBhZ2VzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2FkdmZzLmM6MTIxIGxpYnBhcnRlZC9mcy9oZnMvYWR2ZnNfcGx1cy5jOjEyMgorIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjQxNCBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NTA4CisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo1MzkgbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NjU4CisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo3NzIKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gY29udGFpbnMgZXJyb3JzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2FkdmZzX3BsdXMuYzoyODcKK21zZ2lkICJCYWQgYmxvY2tzIGNvdWxkIG5vdCBiZSByZWFkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2NhY2hlLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUcnlpbmcgdG8gcmVnaXN0ZXIgYW4gZXh0ZW50IHN0YXJ0aW5nIGF0IGJsb2NrIDB4JVgsIGJ1dCBhbm90aGVyIG9uZSBhbHJlYWR5ICIKKyJleGlzdHMgYXQgdGhpcyBwb3NpdGlvbi4gIFlvdSBzaG91bGQgY2hlY2sgdGhlIGZpbGUgc3lzdGVtISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2NhY2hlLmM6MjE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUcnlpbmcgdG8gbW92ZSBhbiBleHRlbnQgZnJvbSBibG9jayBPeCVYIHRvIGJsb2NrIE94JVgsIGJ1dCBhbm90aGVyIG9uZSAiCisiYWxyZWFkeSBleGlzdHMgYXQgdGhpcyBwb3NpdGlvbi4gIFRoaXMgc2hvdWxkIG5vdCBoYXBwZW4hIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZS5jOjE0MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgdXBkYXRlIHRoZSBleHRlbnQgY2FjaGUgZm9yIEhGUyBmaWxlIHdpdGggQ05JRCAlWC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlLmM6MTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyB0byByZWFkIEhGUyBmaWxlIHdpdGggQ05JRCAlWCBiZWhpbmQgRU9GLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGUuYzoxOTAgbGlicGFydGVkL2ZzL2hmcy9maWxlLmM6MjIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIHNlY3RvciAlbGxpIG9mIEhGUyBmaWxlIHdpdGggQ05JRCAlWC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlLmM6MjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyB0byB3cml0ZSBIRlMgZmlsZSB3aXRoIENOSUQgJVggYmVoaW5kIEVPRi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlX3BsdXMuYzoxNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHVwZGF0ZSB0aGUgZXh0ZW50IGNhY2hlIGZvciBIRlMrIGZpbGUgd2l0aCBDTklEICVYLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGVfcGx1cy5jOjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgdG8gcmVhZCBIRlMrIGZpbGUgd2l0aCBDTklEICVYIGJlaGluZCBFT0YuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZV9wbHVzLmM6MjEzIGxpYnBhcnRlZC9mcy9oZnMvZmlsZV9wbHVzLmM6MjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIHNlY3RvciAlbGxpIG9mIEhGUysgZmlsZSB3aXRoIENOSUQgJVguIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZV9wbHVzLmM6MjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyB0byB3cml0ZSBIRlMrIGZpbGUgd2l0aCBDTklEICVYIGJlaGluZCBFT0YuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MjMyCittc2dpZCAiU29ycnksIEhGUyBjYW5ub3QgYmUgcmVzaXplZCB0aGF0IHdheSB5ZXQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MjYyIGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NjQxCittc2dpZCAiRGF0YSByZWxvY2F0aW9uIGhhcyBmYWlsZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MjgxCittc2dpZCAiRGF0YSByZWxvY2F0aW9uIGxlZnQgc29tZSBkYXRhIGluIHRoZSBlbmQgb2YgdGhlIHZvbHVtZS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzozMjAKK21zZ2lkICJ3cml0aW5nIEhGUyBNYXN0ZXIgRGlyZWN0b3J5IEJsb2NrIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NDY4Cittc2dpZCAiTm8gdmFsaWQgSEZTWytYXSBzaWduYXR1cmUgaGFzIGJlZW4gZm91bmQgd2hpbGUgb3BlbmluZy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo0NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmVyc2lvbiAlZCBvZiBIRlMrIGlzbid0IHN1cHBvcnRlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo0ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmVyc2lvbiAlZCBvZiBIRlNYIGlzbid0IHN1cHBvcnRlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo2NzIKK21zZ2lkICJEYXRhIHJlbG9jYXRpb24gbGVmdCBzb21lIGRhdGEgYXQgdGhlIGVuZCBvZiB0aGUgdm9sdW1lLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjcyMAorbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdGhlIGFsbG9jYXRpb24gZmlsZS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo3MzUKK21zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRoZSBjb21wYXRpYmlsaXR5IHBhcnQgb2YgdGhlIGFsbG9jYXRpb24gZmlsZS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo3NTAKK21zZ2lkICJ3cml0aW5nIEhGUysgVm9sdW1lIEhlYWRlciIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjg1MAorbXNnaWQgIkFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGxvb2tpbmcgZm9yIHRoZSBtYW5kYXRvcnkgYmFkIGJsb2NrcyBmaWxlLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjkwNAorbXNnaWQgIiIKKyJJdCBzZWVtcyB0aGVyZSBpcyBhbiBlcnJvciBpbiB0aGUgSEZTIHdyYXBwZXI6IHRoZSBiYWQgYmxvY2tzIGZpbGUgZG9lc24ndCAiCisiY29udGFpbiB0aGUgZW1iZWRkZWQgSEZTKyB2b2x1bWUuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6OTQwCittc2dpZCAiU29ycnksIEhGUysgY2Fubm90IGJlIHJlc2l6ZWQgdGhhdCB3YXkgeWV0LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjk3NQorbXNnaWQgInNocmlua2luZyBlbWJlZGRlZCBIRlMrIHZvbHVtZSIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjk5MQorbXNnaWQgIlJlc2l6aW5nIHRoZSBIRlMrIHZvbHVtZSBoYXMgZmFpbGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjk5OAorbXNnaWQgInNocmlua2luZyBIRlMgd3JhcHBlciIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjEwMDcKK21zZ2lkICJVcGRhdGluZyB0aGUgSEZTIHdyYXBwZXIgaGFzIGZhaWxlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzoxMTA5IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MTE5NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhpcyBpcyBub3QgYSByZWFsICVzIGNoZWNrLiAgVGhpcyBpcyBnb2luZyB0byBleHRyYWN0IHNwZWNpYWwgbG93IGxldmVsICIKKyJmaWxlcyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzoxNTUKK21zZ2lkICJCYWQgYmxvY2sgbGlzdCBoZWFkZXIgY2hlY2tzdW0uIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjE2OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSW52YWxpZCBzaXplIG9mIGEgdHJhbnNhY3Rpb24gYmxvY2sgd2hpbGUgcmVwbGF5aW5nIHRoZSBqb3VybmFsICglaSBieXRlcykuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjI2MAorbXNnaWQgIiIKKyJKb3VybmFsIHN0b3JlZCBvdXRzaWRlIG9mIHRoZSB2b2x1bWUgYXJlIG5vdCBzdXBwb3J0ZWQuICBUcnkgdG8gZGVzYWN0aXZhdGUgIgorInRoZSBqb3VybmFsIGFuZCBydW4gUGFydGVkIGFnYWluLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzoyNzEKK21zZ2lkICJKb3VybmFsIG9mZnNldCBvciBzaXplIGlzIG5vdCBtdWx0aXBsZSBvZiB0aGUgc2VjdG9yIHNpemUuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjI5MgorbXNnaWQgIkluY29ycmVjdCBtYWdpYyB2YWx1ZXMgaW4gdGhlIGpvdXJuYWwgaGVhZGVyLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozMDIKK21zZ2lkICJKb3VybmFsIHNpemUgbWlzbWF0Y2ggYmV0d2VlbiBqb3VybmFsIGluZm8gYmxvY2sgYW5kIGpvdXJuYWwgaGVhZGVyLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozMTQKK21zZ2lkICJTb21lIGhlYWRlciBmaWVsZHMgYXJlIG5vdCBtdWx0aXBsZSBvZiB0aGUgc2VjdG9yIHNpemUuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjMyMworbXNnaWQgIiIKKyJUaGUgc2VjdG9yIHNpemUgc3RvcmVkIGluIHRoZSBqb3VybmFsIGlzIG5vdCA1MTIgYnl0ZXMuICBQYXJ0ZWQgb25seSAiCisic3VwcG9ydHMgNTEyIGJ5dGVzIGxlbmd0aCBzZWN0b3JzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozMzUKK21zZ2lkICJCYWQgam91cm5hbCBjaGVja3N1bS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MzUzCittc2dpZCAiIgorIlRoZSBqb3VybmFsIGlzIG5vdCBlbXB0eS4gIFBhcnRlZCBtdXN0IHJlcGxheSB0aGUgdHJhbnNhY3Rpb25zIGJlZm9yZSAiCisib3BlbmluZyB0aGUgZmlsZSBzeXN0ZW0uICBUaGlzIHdpbGwgbW9kaWZ5IHRoZSBmaWxlIHN5c3RlbS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MzgxCittc2dpZCAiIgorIlRoZSB2b2x1bWUgaGVhZGVyIG9yIHRoZSBtYXN0ZXIgZGlyZWN0b3J5IGJsb2NrIGhhcyBjaGFuZ2VkIHdoaWxlIHJlcGxheWluZyAiCisidGhlIGpvdXJuYWwuICBZb3Ugc2hvdWxkIHJlc3RhcnQgUGFydGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3Byb2JlLmM6NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBhcnRlZCBjYW4ndCB1c2UgSEZTIGZpbGUgc3lzdGVtcyBvbiBkaXNrcyB3aXRoIGEgc2VjdG9yIHNpemUgbm90IGVxdWFsIHRvICUiCisiZCBieXRlcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjE1MSBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzoxNTUKK21zZ2lkICJBbiBleHRlbnQgaGFzIG5vdCBiZWVuIHJlbG9jYXRlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjI1MSBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzozMDcKK21zZ2lkICIiCisiQSByZWZlcmVuY2UgdG8gYW4gZXh0ZW50IGNvbWVzIGZyb20gYSBwbGFjZSBpdCBzaG91bGQgbm90LiAgWW91IHNob3VsZCBjaGVjayAiCisidGhlIGZpbGUgc3lzdGVtISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6MzgxCittc2dpZCAiVGhpcyBIRlMgdm9sdW1lIGhhcyBubyBjYXRhbG9nIGZpbGUuICBUaGlzIGlzIHZlcnkgdW51c3VhbCEiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjQ3NQorbXNnaWQgIlRoaXMgSEZTIHZvbHVtZSBoYXMgbm8gZXh0ZW50cyBvdmVyZmxvdyBmaWxlLiAgVGhpcyBpcyBxdWl0ZSB1bnVzdWFsISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NTE3IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjY2OAorbXNnaWQgIiIKKyJUaGUgZXh0ZW50cyBvdmVyZmxvdyBmaWxlIHNob3VsZCBub3QgY29udGFpbiBpdHMgb3duIGV4dGVudHMhICBZb3Ugc2hvdWxkICIKKyJjaGVjayB0aGUgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzo1NzQgbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6ODQ3Cittc2dpZCAiQ291bGQgbm90IGNhY2hlIHRoZSBmaWxlIHN5c3RlbSBpbiBtZW1vcnkuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzo2MzUgbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6OTA4Cittc2dpZCAiQmFkIGJsb2NrcyBsaXN0IGNvdWxkIG5vdCBiZSBsb2FkZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzo2NDkgbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6OTI0Cittc2dpZCAiQW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIGV4dGVudCByZWxvY2F0aW9uLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo0OTUKK21zZ2lkICJUaGlzIEhGUysgdm9sdW1lIGhhcyBubyBjYXRhbG9nIGZpbGUuICBUaGlzIGlzIHZlcnkgdW51c3VhbCEiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NjE5Cittc2dpZCAiVGhpcyBIRlMrIHZvbHVtZSBoYXMgbm8gZXh0ZW50cyBvdmVyZmxvdyBmaWxlLiAgVGhpcyBpcyBxdWl0ZSB1bnVzdWFsISIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6OTQKK21zZ2lkICJkaXNwbGF5cyB0aGlzIGhlbHAgbWVzc2FnZSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6OTUKK21zZ2lkICJsaXN0cyBwYXJ0aXRpb24gbGF5b3V0IG9uIGFsbCBibG9jayBkZXZpY2VzIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo5NgorbXNnaWQgImRpc3BsYXlzIG1hY2hpbmUgcGFyc2VhYmxlIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6OTcKK21zZ2lkICJuZXZlciBwcm9tcHRzIGZvciB1c2VyIGludGVydmVudGlvbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6OTgKK21zZ2lkICJkaXNwbGF5cyB0aGUgdmVyc2lvbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTExCittc2dpZCAiIgorIk5VTUJFUiBpcyB0aGUgcGFydGl0aW9uIG51bWJlciB1c2VkIGJ5IExpbnV4LiAgT24gTVMtRE9TIGRpc2sgbGFiZWxzLCB0aGUgIgorInByaW1hcnkgcGFydGl0aW9ucyBudW1iZXIgZnJvbSAxIHRvIDQsIGxvZ2ljYWwgcGFydGl0aW9ucyBmcm9tIDUgb253YXJkcy5cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTE0Cittc2dpZCAiTEFCRUwtVFlQRSBpcyBvbmUgb2Y6ICIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTE1Cittc2dpZCAiRkxBRyBpcyBvbmUgb2Y6ICIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTE2Cittc2dpZCAiVU5JVCBpcyBvbmUgb2Y6ICIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTE3Cittc2dpZCAiUEFSVC1UWVBFIGlzIG9uZSBvZjogcHJpbWFyeSwgbG9naWNhbCwgZXh0ZW5kZWRcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTE5Cittc2dpZCAiRlMtVFlQRSBpcyBvbmUgb2Y6ICIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIwCittc2dpZCAiIgorIlNUQVJUIGFuZCBFTkQgYXJlIGRpc2sgbG9jYXRpb25zLCBzdWNoIGFzIDRHQiBvciAxMCUuICBOZWdhdGl2ZSB2YWx1ZXMgY291bnQgIgorImZyb20gdGhlIGVuZCBvZiB0aGUgZGlzay4gIEZvciBleGFtcGxlLCAtMXMgc3BlY2lmaWVzIGV4YWN0bHkgdGhlIGxhc3QgIgorInNlY3Rvci5cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIzCittc2dpZCAiU1RBVEUgaXMgb25lIG9mOiBvbiwgb2ZmXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyNAorbXNnaWQgIkRFVklDRSBpcyB1c3VhbGx5IC9kZXYvaGRhIG9yIC9kZXYvc2RhXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyNQorbXNnaWQgIk5BTUUgaXMgYW55IHdvcmQgeW91IHdhbnRcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTI2Cittc2dpZCAiVGhlIHBhcnRpdGlvbiBtdXN0IGhhdmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgRlMtVFlQRXM6ICIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTMwCittc2dpZCAiIgorIkNvcHlyaWdodCAoQykgMTk5OCAtIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuXG4iCisiVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmUsIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLlxuIgorIlxuIgorIlRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuIgorImJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4iCisiTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuIgorIkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjE3NgorIywgYy1mb3JtYXQKK21zZ2lkICIlMC5mJSVcdCh0aW1lIGxlZnQgJS4yZDolLjJkKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQYXJ0aXRpb24gJXMgaXMgYmVpbmcgdXNlZC4gWW91IG11c3QgdW5tb3VudCBpdCBiZWZvcmUgeW91IG1vZGlmeSBpdCB3aXRoICIKKyJQYXJ0ZWQuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGFydGl0aW9uKHMpIG9uICVzIGFyZSBiZWluZyB1c2VkLiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIzCittc2dpZCAiIgorIlRoZSBleGlzdGluZyBmaWxlIHN5c3RlbSB3aWxsIGJlIGRlc3Ryb3llZCBhbmQgYWxsIGRhdGEgb24gdGhlIHBhcnRpdGlvbiAiCisid2lsbCBiZSBsb3N0LiBEbyB5b3Ugd2FudCB0byBjb250aW51ZT8iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIzNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGV4aXN0aW5nIGRpc2sgbGFiZWwgb24gJXMgd2lsbCBiZSBkZXN0cm95ZWQgYW5kIGFsbCBkYXRhIG9uIHRoaXMgZGlzayAiCisid2lsbCBiZSBsb3N0LiBEbyB5b3Ugd2FudCB0byBjb250aW51ZT8iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjQ1OCBwYXJ0ZWQvcGFydGVkLmM6NjUyIHBhcnRlZC9wYXJ0ZWQuYzoxMDQ0CisjOiBwYXJ0ZWQvcGFydGVkLmM6MTEyOCBwYXJ0ZWQvcGFydGVkLmM6MTc3MSBwYXJ0ZWQvcGFydGVkLmM6MTg1MgorIzogcGFydGVkL3BhcnRlZC5jOjE5MDAKK21zZ2lkICJQYXJ0aXRpb24gbnVtYmVyPyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NTAwCittc2dpZCAiU291cmNlIGRldmljZT8iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjUwNAorbXNnaWQgIlNvdXJjZSBwYXJ0aXRpb24gbnVtYmVyPyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NTA5Cittc2dpZCAiQ2FuJ3QgY29weSBhbiBleHRlbmRlZCBwYXJ0aXRpb24uIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo1MTUKK21zZ2lkICJEZXN0aW5hdGlvbiBwYXJ0aXRpb24gbnVtYmVyPyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NjE1Cittc2dpZCAiTmV3IGRpc2sgbGFiZWwgdHlwZT8iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjY1NgorbXNnaWQgIkZpbGUgc3lzdGVtPyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NzA3IHBhcnRlZC9wYXJ0ZWQuYzo4NzgKK21zZ2lkICJQYXJ0aXRpb24gdHlwZT8iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjcxNCBwYXJ0ZWQvcGFydGVkLmM6ODg1IHBhcnRlZC9wYXJ0ZWQuYzoxMTMxCittc2dpZCAiUGFydGl0aW9uIG5hbWU/IgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo3MjIgcGFydGVkL3BhcnRlZC5jOjg5NQorbXNnaWQgIkZpbGUgc3lzdGVtIHR5cGU/IgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo3MjkgcGFydGVkL3BhcnRlZC5jOjg5NyBwYXJ0ZWQvcGFydGVkLmM6MTA1OQorIzogcGFydGVkL3BhcnRlZC5jOjE3MjUgcGFydGVkL3BhcnRlZC5jOjE3ODAKK21zZ2lkICJTdGFydD8iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjczMSBwYXJ0ZWQvcGFydGVkLmM6OTAwIHBhcnRlZC9wYXJ0ZWQuYzoxMDYyCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTcyNyBwYXJ0ZWQvcGFydGVkLmM6MTc4MgorbXNnaWQgIkVuZD8iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjc2OSBwYXJ0ZWQvcGFydGVkLmM6OTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgcmVxdWVzdGVkIGEgcGFydGl0aW9uIGZyb20gJXMgdG8gJXMuXG4iCisiVGhlIGNsb3Nlc3QgbG9jYXRpb24gd2UgY2FuIG1hbmFnZSBpcyAlcyB0byAlcy4gIElzIHRoaXMgc3RpbGwgYWNjZXB0YWJsZSB0byAiCisieW91PyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6ODkwCittc2dpZCAiQW4gZXh0ZW5kZWQgcGFydGl0aW9uIGNhbm5vdCBob2xkIGEgZmlsZSBzeXN0ZW0uICBEaWQgeW91IHdhbnQgbWtwYXJ0PyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTA1MAorbXNnaWQgIkNhbid0IG1vdmUgYW4gZXh0ZW5kZWQgcGFydGl0aW9uLiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTA3OQorbXNnaWQgIkNhbid0IG1vdmUgYSBwYXJ0aXRpb24gb250byBpdHNlbGYuICBUcnkgdXNpbmcgcmVzaXplLCBwZXJoYXBzPyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIyNworIywgYy1mb3JtYXQKK21zZ2lkICJNaW5vcjogJWRcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIyOAorIywgYy1mb3JtYXQKK21zZ2lkICJGbGFnczogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIyOQorIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlIFN5c3RlbTogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIzMAorbXNnaWQgIlNpemU6ICAgICAgICAgIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjM1Cittc2dpZCAiTWluaW11bSBzaXplOiAiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMzgKK21zZ2lkICJNYXhpbXVtIHNpemU6ICIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJNb2RlbDogJXMgKCVzKVxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMzY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkRpc2sgJXM6ICVzXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEzNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VjdG9yIHNpemUgKGxvZ2ljYWwvcGh5c2ljYWwpOiAlbGxkQi8lbGxkQlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMzgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkJJT1MgY3lsaW5kZXIsaGVhZCxzZWN0b3IgZ2VvbWV0cnk6ICVkLCVkLCVkLiAgRWFjaCBjeWxpbmRlciBpcyAlcy5cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTM5MgorIywgYy1mb3JtYXQKK21zZ2lkICJQYXJ0aXRpb24gVGFibGU6ICVzXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MDYgcGFydGVkL3BhcnRlZC5jOjE0MDkKK21zZ2lkICJOdW1iZXIiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MDYgcGFydGVkL3BhcnRlZC5jOjE0MDkKK21zZ2lkICJTdGFydCIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQwNyBwYXJ0ZWQvcGFydGVkLmM6MTQxMAorbXNnaWQgIkVuZCIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQxMAorbXNnaWQgIlNpemUiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MTQKK21zZ2lkICJUeXBlIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDE2Cittc2dpZCAiRmlsZSBzeXN0ZW0iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MTkKK21zZ2lkICJOYW1lIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDIxCittc2dpZCAiRmxhZ3MiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0NzcKK21zZ2lkICJGcmVlIFNwYWNlIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBICVzICVzIHBhcnRpdGlvbiB3YXMgZm91bmQgYXQgJXMgLT4gJXMuICBEbyB5b3Ugd2FudCB0byBhZGQgaXQgdG8gdGhlICIKKyJwYXJ0aXRpb24gdGFibGU/IgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNjYzCittc2dpZCAic2VhcmNoaW5nIGZvciBmaWxlIHN5c3RlbXMiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjE4NzcKK21zZ2lkICJOZXcgZGV2aWNlPyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTkwMgorbXNnaWQgIkZsYWcgdG8gSW52ZXJ0PyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTkwNworbXNnaWQgIk5ldyBzdGF0ZT8iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjE5NDQKK21zZ2lkICJVbml0PyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjA5MworbXNnaWQgImNoZWNrIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMDk2Cittc2dpZCAiIgorImNoZWNrIE5VTUJFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8gYSBzaW1wbGUgY2hlY2sgb24gdGhlIGZpbGUgc3lzdGVtIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTAyCittc2dpZCAiY3AiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMDUKK21zZ2lkICIiCisiY3AgW0ZST00tREVWSUNFXSBGUk9NLU5VTUJFUiBUTy1OVU1CRVIgICBjb3B5IGZpbGUgc3lzdGVtIHRvIGFub3RoZXIgIgorInBhcnRpdGlvbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjExMQorbXNnaWQgImhlbHAiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMTQKK21zZ2lkICIiCisiaGVscCBbQ09NTUFORF0gICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCBnZW5lcmFsIGhlbHAsIG9yIGhlbHAgb24gIgorIkNPTU1BTkQiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMjAKK21zZ2lkICJta2xhYmVsIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTIwCittc2dpZCAibWt0YWJsZSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEyMworbXNnaWQgIiIKKyJta2xhYmVsLG1rdGFibGUgTEFCRUwtVFlQRSAgICAgICAgICAgICAgIGNyZWF0ZSBhIG5ldyBkaXNrbGFiZWwgKHBhcnRpdGlvbiAiCisidGFibGUpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTI5Cittc2dpZCAibWtmcyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEzMgorbXNnaWQgIiIKKyJta2ZzIE5VTUJFUiBGUy1UWVBFICAgICAgICAgICAgICAgICAgICAgIG1ha2UgYSBGUy1UWVBFIGZpbGUgc3lzdGVtIG9uICIKKyJwYXJ0aXRpdG9uIE5VTUJFUiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEzOAorbXNnaWQgIm1rcGFydCIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE0MQorbXNnaWQgIm1rcGFydCBQQVJULVRZUEUgW0ZTLVRZUEVdIFNUQVJUIEVORCAgICAgbWFrZSBhIHBhcnRpdGlvbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE0NworbXNnaWQgIiIKKyInbWtwYXJ0JyBtYWtlcyBhIHBhcnRpdGlvbiB3aXRob3V0IGNyZWF0aW5nIGEgbmV3IGZpbGUgc3lzdGVtIG9uIHRoZSAiCisicGFydGl0aW9uLiAgRlMtVFlQRSBtYXkgYmUgc3BlY2lmaWVkIHRvIHNldCBhbiBhcHByb3ByaWF0ZSBwYXJ0aXRpb24gSUQuXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNTIKK21zZ2lkICJta3BhcnRmcyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE1NQorbXNnaWQgIiIKKyJta3BhcnRmcyBQQVJULVRZUEUgRlMtVFlQRSBTVEFSVCBFTkQgICAgIG1ha2UgYSBwYXJ0aXRpb24gd2l0aCBhIGZpbGUgc3lzdGVtIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTYxCittc2dpZCAibW92ZSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE2NAorbXNnaWQgIm1vdmUgTlVNQkVSIFNUQVJUIEVORCAgICAgICAgICAgICAgICAgICAgbW92ZSBwYXJ0aXRpb24gTlVNQkVSIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTY5Cittc2dpZCAibmFtZSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE3MgorbXNnaWQgIm5hbWUgTlVNQkVSIE5BTUUgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSBwYXJ0aXRpb24gTlVNQkVSIGFzIE5BTUUiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNzcKK21zZ2lkICJwcmludCIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE4MAorbXNnaWQgIiIKKyJwcmludCBbZGV2aWNlc3xmcmVlfGxpc3QsYWxsfE5VTUJFUl0gICAgIGRpc3BsYXkgdGhlIHBhcnRpdGlvbiB0YWJsZSwgIgorImF2YWlsYWJsZSBkZXZpY2VzLCBmcmVlIHNwYWNlLCBhbGwgZm91bmQgcGFydGl0aW9ucywgb3IgYSBwYXJ0aWN1bGFyICIKKyJwYXJ0aXRpb24iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxODUKK21zZ2lkICIiCisiV2l0aG91dCBhcmd1bWVudHMsICdwcmludCcgZGlzcGxheXMgdGhlIGVudGlyZSBwYXJ0aXRpb24gdGFibGUuIEhvd2V2ZXIgd2l0aCAiCisidGhlIGZvbGxvd2luZyBhcmd1bWVudHMgaXQgcGVyZm9ybXMgdmFyaW91cyBvdGhlciBhY3Rpb25zLlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTg3Cittc2dpZCAiICBkZXZpY2VzICAgOiBkaXNwbGF5IGFsbCBhY3RpdmUgYmxvY2sgZGV2aWNlc1xuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTg4Cittc2dpZCAiIgorIiAgZnJlZSAgICAgIDogZGlzcGxheSBpbmZvcm1hdGlvbiBhYm91dCBmcmVlIHVucGFydGl0aW9uZWQgc3BhY2Ugb24gdGhlICIKKyJjdXJyZW50IGJsb2NrIGRldmljZVxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTkwCittc2dpZCAiIgorIiAgbGlzdCwgYWxsIDogZGlzcGxheSB0aGUgcGFydGl0aW9uIHRhYmxlcyBvZiBhbGwgYWN0aXZlIGJsb2NrIGRldmljZXNcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE5MQorbXNnaWQgIiIKKyIgIE5VTUJFUiAgICA6IGRpc3BsYXkgbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIHBhcnRpY3VsYXIgIgorInBhcnRpdGlvblxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTk2Cittc2dpZCAicXVpdCIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE5OQorbXNnaWQgInF1aXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCBwcm9ncmFtIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjA0Cittc2dpZCAicmVzY3VlIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjA3Cittc2dpZCAiIgorInJlc2N1ZSBTVEFSVCBFTkQgICAgICAgICAgICAgICAgICAgICAgICAgcmVzY3VlIGEgbG9zdCBwYXJ0aXRpb24gbmVhciBTVEFSVCAiCisiYW5kIEVORCIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIxMworbXNnaWQgInJlc2l6ZSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIxNgorbXNnaWQgIiIKKyJyZXNpemUgTlVNQkVSIFNUQVJUIEVORCAgICAgICAgICAgICAgICAgIHJlc2l6ZSBwYXJ0aXRpb24gTlVNQkVSIGFuZCBpdHMgIgorImZpbGUgc3lzdGVtIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjI0Cittc2dpZCAicm0iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMjcKK21zZ2lkICJybSBOVU1CRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwYXJ0aXRpb24gTlVNQkVSIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjMyCittc2dpZCAic2VsZWN0IgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjM1Cittc2dpZCAic2VsZWN0IERFVklDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9vc2UgdGhlIGRldmljZSB0byBlZGl0IgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjQwCittc2dpZCAic2V0IgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjQzCittc2dpZCAiIgorInNldCBOVU1CRVIgRkxBRyBTVEFURSAgICAgICAgICAgICAgICAgICAgY2hhbmdlIHRoZSBGTEFHIG9uIHBhcnRpdGlvbiBOVU1CRVIiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNDkKK21zZ2lkICJ0b2dnbGUiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNTIKK21zZ2lkICIiCisidG9nZ2xlIFtOVU1CRVIgW0ZMQUddXSAgICAgICAgICAgICAgICAgICB0b2dnbGUgdGhlIHN0YXRlIG9mIEZMQUcgb24gIgorInBhcnRpdGlvbiBOVU1CRVIiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNTgKK21zZ2lkICJ1bml0IgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjYxCittc2dpZCAidW5pdCBVTklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgdGhlIGRlZmF1bHQgdW5pdCB0byBVTklUIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjY2Cittc2dpZCAidmVyc2lvbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI2OQorbXNnaWQgIiIKKyJ2ZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXkgdGhlIHZlcnNpb24gbnVtYmVyIGFuZCAiCisiY29weXJpZ2h0IGluZm9ybWF0aW9uIG9mIEdOVSBQYXJ0ZWQiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNzMKK21zZ2lkICIiCisiJ3ZlcnNpb24nIGRpc3BsYXlzIGNvcHlyaWdodCBhbmQgdmVyc2lvbiBpbmZvcm1hdGlvbiBjb3JyZXNwb25kaW5nIHRvIHRoaXMgIgorImNvcHkgb2YgR05VIFBhcnRlZFxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMzM1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLWhsbXN2XSBbREVWSUNFIFtDT01NQU5EIFtQQVJBTUVURVJTXV0uLi5dXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIzNzkKK21zZ2lkICJObyBkZXZpY2UgZm91bmQiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjI0MTIKK21zZ2lkICJXQVJOSU5HOiBZb3UgYXJlIG5vdCBzdXBlcnVzZXIuICBXYXRjaCBvdXQgZm9yIHBlcm1pc3Npb25zLiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjQ1MAorbXNnaWQgIllvdSBtYXkgbmVlZCB0byB1cGRhdGUgL2V0Yy9mc3RhYi5cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzoxNjAKK21zZ2lkICJXZWxjb21lIHRvIEdOVSBQYXJ0ZWQhIFR5cGUgJ2hlbHAnIHRvIHZpZXcgYSBsaXN0IG9mIGNvbW1hbmRzLlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjE2MworbXNnaWQgIiIKKyJVc2FnZTogcGFydGVkIFtPUFRJT05dLi4uIFtERVZJQ0UgW0NPTU1BTkQgW1BBUkFNRVRFUlNdLi4uXS4uLl1cbiIKKyJBcHBseSBDT01NQU5EcyB3aXRoIFBBUkFNRVRFUlMgdG8gREVWSUNFLiAgSWYgbm8gQ09NTUFORChzKSBhcmUgZ2l2ZW4sIHJ1biAiCisiaW5cbiIKKyJpbnRlcmFjdGl2ZSBtb2RlLlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjE2OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiXG4iCisiWW91IGZvdW5kIGEgYnVnIGluIEdOVSBQYXJ0ZWQhIEhlcmUncyB3aGF0IHlvdSBoYXZlIHRvIGRvOlxuIgorIlxuIgorIkRvbid0IHBhbmljISBUaGUgYnVnIGhhcyBtb3N0IGxpa2VseSBub3QgYWZmZWN0ZWQgYW55IG9mIHlvdXIgZGF0YS5cbiIKKyJIZWxwIHVzIHRvIGZpeCB0aGlzIGJ1ZyBieSBkb2luZyB0aGUgZm9sbG93aW5nOlxuIgorIlxuIgorIkNoZWNrIHdoZXRoZXIgdGhlIGJ1ZyBoYXMgYWxyZWFkeSBiZWVuIGZpeGVkIGJ5IGNoZWNraW5nXG4iCisidGhlIGxhc3QgdmVyc2lvbiBvZiBHTlUgUGFydGVkIHRoYXQgeW91IGNhbiBmaW5kIGF0OlxuIgorIlxuIgorIlx0aHR0cDovL2Z0cC5nbnUub3JnL2dudS9wYXJ0ZWQvXG4iCisiXG4iCisiUGxlYXNlIGNoZWNrIHRoaXMgdmVyc2lvbiBwcmlvciB0byBidWcgcmVwb3J0aW5nLlxuIgorIlxuIgorIklmIHRoaXMgaGFzIG5vdCBiZWVuIGZpeGVkIHlldCBvciBpZiB5b3UgZG9uJ3Qga25vdyBob3cgdG8gY2hlY2ssXG4iCisicGxlYXNlIHZpc2l0IHRoZSBHTlUgUGFydGVkIHdlYnNpdGU6XG4iCisiXG4iCisiXHRodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvcGFydGVkXG4iCisiXG4iCisiZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uXG4iCisiXG4iCisiWW91ciByZXBvcnQgc2hvdWxkIGNvbnRhaW4gdGhlIHZlcnNpb24gb2YgdGhpcyByZWxlYXNlICglcylcbiIKKyJhbG9uZyB3aXRoIHRoZSBlcnJvciBtZXNzYWdlIGJlbG93LCB0aGUgb3V0cHV0IG9mXG4iCisiXG4iCisiXHRwYXJ0ZWQgREVWSUNFIHVuaXQgY28gcHJpbnQgdW5pdCBzIHByaW50XG4iCisiXG4iCisiYW5kIHRoZSBmb2xsb3dpbmcgaGlzdG9yeSBvZiBjb21tYW5kcyB5b3UgZW50ZXJlZC5cbiIKKyJBbHNvIGluY2x1ZGUgYW55IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgeW91ciBzZXR1cCB5b3VcbiIKKyJjb25zaWRlciBpbXBvcnRhbnQuXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6Mjg0Cittc2dpZCAiIgorIlxuIgorIkNvbW1hbmQgSGlzdG9yeTpcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzozNjYKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IFNFR1ZfTUFQRVJSIChBZGRyZXNzIG5vdCBtYXBwZWQgdG8gb2JqZWN0KVxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjM3MgorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogU0VHVl9BQ0NFUlIgKEludmFsaWQgcGVybWlzc2lvbnMgZm9yIG1hcHBlZCBvYmplY3QpXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6Mzc3Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBBIGdlbmVyYWwgU0lHU0VHViBzaWduYWwgd2FzIGVuY291bnRlcmVkLlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQxMAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0lOVERJViAoSW50ZWdlcjogZGl2aWRlIGJ5IHplcm8pIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQxNQorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0lOVE9WRiAoSW50ZWdlcjogb3ZlcmZsb3cpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQyMAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0ZMVERJViAoRmxvYXQ6IGRpdmlkZSBieSB6ZXJvKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0MjUKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRPVkYgKEZsb2F0OiBvdmVyZmxvdykiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDMwCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxUVU5EIChGbG9hdDogdW5kZXJmbG93KSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0MzUKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRSRVMgKEZsb2F0OiBpbmV4YWN0IHJlc3VsdCkiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDQwCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxUSU5WIChGbG9hdDogaW52YWxpZCBvcGVyYXRpb24pIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQ0NQorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0ZMVFNVQiAoRmxvYXQ6IHN1YnNjcmlwdCBvdXQgb2YgcmFuZ2UpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQ1MAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogQSBnZW5lcmFsIFNJR0ZQRSBzaWduYWwgd2FzIGVuY291bnRlcmVkLiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0ODMKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9JTExPUEMgKElsbGVnYWwgT3Bjb2RlKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0ODgKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9JTExPUE4gKElsbGVnYWwgT3BlcmFuZCkiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDkzCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfSUxMQURSIChJbGxlZ2FsIGFkZHJlc3NpbmcgbW9kZSkiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDk4Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfSUxMVFJQIChJbGxlZ2FsIFRyYXApIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjUwMworbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX1BSVk9QQyAoUHJpdmlsZWdlZCBPcGNvZGUpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjUwOAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX1BSVlJFRyAoUHJpdmlsZWdlZCBSZWdpc3RlcikiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NTEzCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfQ09QUk9DIChDb3Byb2Nlc3NvciBFcnJvcikiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NTE4Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfQkFEU1RLIChJbnRlcm5hbCBTdGFjayBFcnJvcikiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NTIzCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBBIGdlbmVyYWwgU0lHSUxMIHNpZ25hbCB3YXMgZW5jb3VudGVyZWQuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjEwMjQKK21zZ2lkICJFeHBlY3RpbmcgYSBwYXJ0aXRpb24gbnVtYmVyLiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzoxMDMzCittc2dpZCAiUGFydGl0aW9uIGRvZXNuJ3QgZXhpc3QuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjEwNTMKK21zZ2lkICJFeHBlY3RpbmcgYSBmaWxlIHN5c3RlbSB0eXBlLiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzoxMDYwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gZmlsZSBzeXN0ZW0gdHlwZSBcIiVzXCIuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjEwODAKK21zZ2lkICJFeHBlY3RpbmcgYSBkaXNrIGxhYmVsIHR5cGUuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjExNzgKK21zZ2lkICJDYW4ndCBjcmVhdGUgYW55IG1vcmUgcGFydGl0aW9ucy4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6MTE4OAorbXNnaWQgIkV4cGVjdGluZyBhIHBhcnRpdGlvbiB0eXBlLiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzoxMzE1Cittc2dpZCAib24iCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6MTMxNgorbXNnaWQgIm9mZiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzoxNDMxCittc2dpZCAiT1BUSU9OczoiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6MTQzNgorbXNnaWQgIkNPTU1BTkRzOiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzoxNDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzaW5nICVzXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6MTUxOQorbXNnaWQgIlRoaXMgY29tbWFuZCBkb2VzIG5vdCBtYWtlIHNlbnNlIGluIG5vbi1pbnRlcmFjdGl2ZSBtb2RlLlxuIgorbXNnc3RyICIiCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvcG8vcGwuZ21vIGIvcGFydGVkLTEuOC43L3BvL3BsLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODQ1ZTQwCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L3BvL3BsLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvcG8vcGwucG8gYi9wYXJ0ZWQtMS44LjcvcG8vcGwucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYyOWYxYwotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9wby9wbC5wbwpAQCAtMCwwICsxLDMzMDYgQEAKKyMgUG9saXNoIHRyYW5zbGF0aW9ucyBmb3IgR05VIFBhcnRlZCBwYWNrYWdlLgorIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFdvamNpZWNoIFBvbGFrIDxwb2xha0BnbnUub3JnPiwgMjAwMywgMjAwNSwgMjAwNi4KKyMgSmFrdWIgQm9ndXN6IDxxYm9vc2hAcGxkLWxpbnV4Lm9yZz4sIDIwMDYuCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBwYXJ0ZWQgMS44LjFcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogYnVnLXBhcnRlZEBnbnUub3JnXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMDctMDUtMDkgMTc6MDItMDQwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDYtMTItMDcgMTg6MDErMDEwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogSmFrdWIgQm9ndXN6IDxxYm9vc2hAcGxkLWxpbnV4Lm9yZz5cbiIKKyJMYW5ndWFnZS1UZWFtOiBQb2xpc2ggPHRyYW5zbGF0aW9uLXRlYW0tcGxAbGlzdHMuc291cmNlZm9yZ2UubmV0PlxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTy04ODU5LTJcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0zOyBwbHVyYWw9KG49PTEgPyAwIDogbiUxMD49MiAmJiBuJTEwPD00ICYmIChuJTEwMDwxMCAiCisifHwgbiUxMDA+PTIwKSA/IDEgOiAyKTtcbiIKKworIzogbGliL2Nsb3Nlb3V0LmM6NzQKK21zZ2lkICJ3cml0ZSBlcnJvciIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXJyb3IuYzoxMjUKKyMsIGZ1enp5Cittc2dpZCAiVW5rbm93biBzeXN0ZW0gZXJyb3IiCittc2dzdHIgIk5pZXpuYW55IHR5cCBzeXN0ZW11IHBsaWvzdyBcIiVzXCIuIgorCisjOiBsaWIvZ2V0b3B0LmM6NTMxIGxpYi9nZXRvcHQuYzo1NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiBgJXMnIGlzIGFtYmlndW91c1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo1ODAgbGliL2dldG9wdC5jOjU4NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIGAtLSVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjU5MyBsaWIvZ2V0b3B0LmM6NTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYCVjJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6NjQxIGxpYi9nZXRvcHQuYzo2NjAgbGliL2dldG9wdC5jOjk3NiBsaWIvZ2V0b3B0LmM6OTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYCVzJyByZXF1aXJlcyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo2OTggbGliL2dldG9wdC5jOjcwMQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5yZWNvZ25pemVkIG9wdGlvbiBgLS0lcydcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6NzA5IGxpYi9nZXRvcHQuYzo3MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVucmVjb2duaXplZCBvcHRpb24gYCVjJXMnXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjc2NCBsaWIvZ2V0b3B0LmM6NzY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbGxlZ2FsIG9wdGlvbiAtLSAlY1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo3NzMgbGliL2dldG9wdC5jOjc3NgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBvcHRpb24gLS0gJWNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6ODI4IGxpYi9nZXRvcHQuYzo4NDQgbGliL2dldG9wdC5jOjEwNDggbGliL2dldG9wdC5jOjEwNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCAtLSAlY1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo4OTcgbGliL2dldG9wdC5jOjkxMworIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIGAtVyAlcycgaXMgYW1iaWd1b3VzXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjkzNyBsaWIvZ2V0b3B0LmM6OTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYC1XICVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6CisjLiBHZXQgdHJhbnNsYXRpb25zIGZvciBvcGVuIGFuZCBjbG9zaW5nIHF1b3RhdGlvbiBtYXJrcy4KKyMuCisjLiBUaGUgbWVzc2FnZSBjYXRhbG9nIHNob3VsZCB0cmFuc2xhdGUgImAiIHRvIGEgbGVmdAorIy4gcXVvdGF0aW9uIG1hcmsgc3VpdGFibGUgZm9yIHRoZSBsb2NhbGUsIGFuZCBzaW1pbGFybHkgZm9yCisjLiAiJyIuICBJZiB0aGUgY2F0YWxvZyBoYXMgbm8gdHJhbnNsYXRpb24sCisjLiBsb2NhbGVfcXVvdGluZ19zdHlsZSBxdW90ZXMgYGxpa2UgdGhpcycsIGFuZAorIy4gY2xvY2FsZV9xdW90aW5nX3N0eWxlIHF1b3RlcyAibGlrZSB0aGlzIi4KKyMuCisjLiBGb3IgZXhhbXBsZSwgYW4gQW1lcmljYW4gRW5nbGlzaCBVbmljb2RlIGxvY2FsZSBzaG91bGQKKyMuIHRyYW5zbGF0ZSAiYCIgdG8gVSsyMDFDIChMRUZUIERPVUJMRSBRVU9UQVRJT04gTUFSSyksIGFuZAorIy4gc2hvdWxkIHRyYW5zbGF0ZSAiJyIgdG8gVSsyMDFEIChSSUdIVCBET1VCTEUgUVVPVEFUSU9OCisjLiBNQVJLKS4gIEEgQnJpdGlzaCBFbmdsaXNoIFVuaWNvZGUgbG9jYWxlIHNob3VsZCBpbnN0ZWFkCisjLiB0cmFuc2xhdGUgdGhlc2UgdG8gVSsyMDE4IChMRUZUIFNJTkdMRSBRVU9UQVRJT04gTUFSSykgYW5kCisjLiBVKzIwMTkgKFJJR0hUIFNJTkdMRSBRVU9UQVRJT04gTUFSSyksIHJlc3BlY3RpdmVseS4KKyMuCisjLiBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIHB1dCBoZXJlLCBwbGVhc2Ugc2VlCisjLiA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9RdW90YXRpb25fbWFyayNHbHlwaHM+CisjLiBhbmQgdXNlIGdseXBocyBzdWl0YWJsZSBmb3IgeW91ciBsYW5ndWFnZS4KKyM6IGxpYi9xdW90ZWFyZy5jOjIyOQorbXNnaWQgImAiCittc2dzdHIgIiIKKworIzogbGliL3F1b3RlYXJnLmM6MjMwCittc2dpZCAiJyIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjEzMQorbXNnaWQgIlN1Y2Nlc3MiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxMzQKK21zZ2lkICJObyBtYXRjaCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjEzNworbXNnaWQgIkludmFsaWQgcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTQwCittc2dpZCAiSW52YWxpZCBjb2xsYXRpb24gY2hhcmFjdGVyIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTQzCittc2dpZCAiSW52YWxpZCBjaGFyYWN0ZXIgY2xhc3MgbmFtZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE0NgorbXNnaWQgIlRyYWlsaW5nIGJhY2tzbGFzaCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE0OQorbXNnaWQgIkludmFsaWQgYmFjayByZWZlcmVuY2UiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNTIKK21zZ2lkICJVbm1hdGNoZWQgWyBvciBbXiIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE1NQorbXNnaWQgIlVubWF0Y2hlZCAoIG9yIFxcKCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE1OAorbXNnaWQgIlVubWF0Y2hlZCBcXHsiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNjEKK21zZ2lkICJJbnZhbGlkIGNvbnRlbnQgb2YgXFx7XFx9IgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTY0CisjLCBmdXp6eQorbXNnaWQgIkludmFsaWQgcmFuZ2UgZW5kIgorbXNnc3RyICJOaWVwcmF3aWSzb3d5IG51bWVyLiIKKworIzogbGliL3JlZ2NvbXAuYzoxNjcKK21zZ2lkICJNZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTcwCittc2dpZCAiSW52YWxpZCBwcmVjZWRpbmcgcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTczCittc2dpZCAiUHJlbWF0dXJlIGVuZCBvZiByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNzYKK21zZ2lkICJSZWd1bGFyIGV4cHJlc3Npb24gdG9vIGJpZyIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE3OQorbXNnaWQgIlVubWF0Y2hlZCApIG9yIFxcKSIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjY4MAorbXNnaWQgIk5vIHByZXZpb3VzIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvcnBtYXRjaC5jOjcwCittc2dpZCAiXlt5WV0iCittc2dzdHIgIiIKKworIzogbGliL3JwbWF0Y2guYzo3MworbXNnaWQgIl5bbk5dIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBUcmFuc2xhdGUgIihDKSIgdG8gdGhlIGNvcHlyaWdodCBzeW1ib2wKKyMuIChDLWluLWEtY2lyY2xlKSwgaWYgdGhpcyBzeW1ib2wgaXMgYXZhaWxhYmxlIGluIHRoZSB1c2VyJ3MKKyMuIGxvY2FsZS4gIE90aGVyd2lzZSwgZG8gbm90IHRyYW5zbGF0ZSAiKEMpIjsgbGVhdmUgaXQgYXMtaXMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzo2NgorbXNnaWQgIihDKSIKK21zZ3N0ciAiIgorCisjOiBsaWIvdmVyc2lvbi1ldGMuYzo2OAorbXNnaWQgIiIKKyJcbiIKKyJMaWNlbnNlIEdQTHYyKzogR05VIEdQTCB2ZXJzaW9uIDIgb3IgbGF0ZXIgPGh0dHA6Ly9nbnUub3JnL2xpY2Vuc2VzL2dwbC4iCisiaHRtbD5cbiIKKyJUaGlzIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBhcmUgZnJlZSB0byBjaGFuZ2UgYW5kIHJlZGlzdHJpYnV0ZSBpdC5cbiIKKyJUaGVyZSBpcyBOTyBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3LlxuIgorIlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIzogbGliL3ZlcnNpb24tZXRjLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiV3JpdHRlbiBieSAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIzogbGliL3ZlcnNpb24tZXRjLmM6ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiV3JpdHRlbiBieSAlcyBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIldyaXR0ZW4gYnkgJXMsICVzLCBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyJhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6MTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiJXMsIGFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyIlcywgJXMsIGFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzoxMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyIlcywgJXMsICVzLCBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6MTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiJXMsICVzLCAlcywgJXMsXG4iCisiYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjLiBZb3UgY2FuIHVzZSBsaW5lIGJyZWFrcywgZXN0aW1hdGluZyB0aGF0IGVhY2ggYXV0aG9yIG5hbWUgb2NjdXBpZXMKKyMuIGNhLiAxNiBzY3JlZW4gY29sdW1ucyBhbmQgdGhhdCBhIHNjcmVlbiBsaW5lIGhhcyBjYS4gODAgY29sdW1ucy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjEzMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorIiVzLCAlcywgJXMsICVzLFxuIgorIiVzLCBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6MTQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiJXMsICVzLCAlcywgJXMsXG4iCisiJXMsICVzLCBhbmQgb3RoZXJzLlxuIgorbXNnc3RyICIiCisKKyM6IGxpYi94YWxsb2MtZGllLmM6MzUKK21zZ2lkICJtZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzoyMzcKK21zZ2lkICJEaXNrIEltYWdlIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzozMzggbGlicGFydGVkL2FyY2gvZ251LmM6MjYxCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjEyNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igb3BlbmluZyAlczogJXMiCittc2dzdHIgIkKzsWQgcG9kY3phcyBvdHdpZXJhbmlhICVzOiAlcyIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjM0OSBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzoyNzEKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTI4MworIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gb3BlbiAlcyByZWFkLXdyaXRlICglcykuICAlcyBoYXMgYmVlbiBvcGVuZWQgcmVhZC1vbmx5LiIKK21zZ3N0ciAiIgorIk5pZSBtb79uYSBvdHdvcnp55iAlcyBqZWRub2N6ZbZuaWUgdyB0cnliaWUgZG8gb2Rjenl0dSBpIHphcGlzdSAoJXMpLiAgJXMgIgorInpvc3RhsyBvdHdhcnR5IHR5bGtvIHcgdHJ5YmllIGRvIG9kY3p5dHUuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6NDExIGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTQzMQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkdXJpbmcgc2VlayBmb3IgcmVhZCBvbiAlcyIKK21zZ3N0ciAiJXMgcG9kY3phcyB1c3Rhd2lhbmlhIGRvIG9kY3p5dHUgbmEgJXMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzo0NDQgbGlicGFydGVkL2FyY2gvZ251LmM6NDQ5IGxpYnBhcnRlZC9hcmNoL2dudS5jOjU0OAorIzogbGlicGFydGVkL2FyY2gvZ251LmM6Njc2IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTM5MQorIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxNDY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGR1cmluZyByZWFkIG9uICVzIgorbXNnc3RyICIlcyBwb2RjemFzIGN6eXRhbmlhICVzIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6NDgwIGxpYnBhcnRlZC9hcmNoL2dudS5jOjUwOQorIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxNTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbid0IHdyaXRlIHRvICVzLCBiZWNhdXNlIGl0IGlzIG9wZW5lZCByZWFkLW9ubHkuIgorbXNnc3RyICJOaWUgbW+/bmEgemFwaXNh5iBkbyAlcywgcG9uaWV3Yb8gb3R3YXJ0ZSBqZXN0IHR5bGtvIGRvIGN6eXRhbmlhLiIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjQ5NiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjE1NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZHVyaW5nIHNlZWsgZm9yIHdyaXRlIG9uICVzIgorbXNnc3RyICIlcyBwb2RjemFzIHVzdGF3aWFuaWEgZG8gemFwaXN1IG5hICVzIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6NTMzIGxpYnBhcnRlZC9hcmNoL2dudS5jOjU4NSBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo2MzAKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjcwNyBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjE1MTcKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTYxMiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjE2ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZHVyaW5nIHdyaXRlIG9uICVzIgorbXNnc3RyICIlcyBwb2RjemFzIHphcGlzdSAlcyIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo2MyBwYXJ0cHJvYmUvcGFydHByb2JlLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeSBgJXMgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogJXMgW09QVElPTl1cbiIKKyIgIG9yOiAgJXMgREVWSUNFIE1JTk9SXG4iCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo3MAorbXNnaWQgIiIKKyJDbGVhciB1bnVzZWQgc3BhY2Ugb24gYSBGQVQgcGFydGl0aW9uIChhIEdOVSBQYXJ0ZWQgdGVzdGluZyB0b29sKS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjc0Cittc2dpZCAiICAgICAgLS1oZWxwICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdFxuIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6NzUKK21zZ2lkICIgICAgICAtLXZlcnNpb24gIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0XG4iCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo3NyBwYXJ0cHJvYmUvcGFydHByb2JlLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJSZXBvcnQgYnVncyB0byA8JXM+LlxuIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6Mjg1CisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBmZXcgYXJndW1lbnRzIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6MjkwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMiCittc2dzdHIgIlpieXQgZHW/byBuaWVwcmF3aWSzb3d5Y2ggc3Ryb24uIgorCisjOiBwYXJ0cHJvYmUvcGFydHByb2JlLmM6MTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbT1BUSU9OXSBbREVWSUNFXS4uLlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRwcm9iZS9wYXJ0cHJvYmUuYzoxNDIKK21zZ2lkICIiCisiSW5mb3JtIHRoZSBPUyBvZiBwYXJ0aXRpb24gdGFibGUgY2hhbmdlcy5cbiIKKyJcbiIKKyIgIC1kLCAtLW5vLXVwZGF0ZSAgZG9uJ3QgdXBkYXRlIHRoZSBrZXJuZWxcbiIKKyIgIC1zLCAtLXN1bW1hcnkgICAgcHJpbnQgYSBzdW1tYXJ5IG9mIGNvbnRlbnRzXG4iCisiICAtaCwgLS1oZWxwICAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0XG4iCisiICAtdiwgLS12ZXJzaW9uICAgIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0XG4iCittc2dzdHIgIiIKKworIzogcGFydHByb2JlL3BhcnRwcm9iZS5jOjE1MAorbXNnaWQgIiIKKyJcbiIKKyJXaXRoIG5vIERFVklDRSwgcHJvYmUgYWxsIHBhcnRpdGlvbnMuXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIG9wZW4gJXMuIgorbXNnc3RyICJOaWUgbW+/bmEgb3R3b3J6eeYgJXMuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzoxMTQKK21zZ2lkICJVbmFibGUgdG8gcHJvYmUgc3RvcmUuIgorbXNnc3RyICJEZXRla2NqYSBnZW9tZXRyaWkgbmllIHBvd2lvZLNhIHNp6i4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjM1MgorbXNnaWQgIiIKKyJUaGUgcGFydGl0aW9uIHRhYmxlIGNhbm5vdCBiZSByZS1yZWFkLiAgVGhpcyBtZWFucyB5b3UgbmVlZCB0byByZWJvb3QgYmVmb3JlICIKKyJtb3VudGluZyBhbnkgbW9kaWZpZWQgcGFydGl0aW9ucy4gIFlvdSBhbHNvIG5lZWQgdG8gcmVpbnN0YWxsIHlvdXIgYm9vdCAiCisibG9hZGVyIGJlZm9yZSB5b3UgcmVib290ICh3aGljaCBtYXkgcmVxdWlyZSBtb3VudGluZyBtb2RpZmllZCBwYXJ0aXRpb25zKS4gICIKKyJJdCBpcyBpbXBvc3NpYmxlIGRvIGJvdGggdGhpbmdzISAgU28geW91J2xsIG5lZWQgdG8gYm9vdCBvZmYgYSByZXNjdWUgZGlzaywgIgorImFuZCByZWluc3RhbGwgeW91ciBib290IGxvYWRlciBmcm9tIHRoZSByZXNjdWUgZGlzay4gIFJlYWQgc2VjdGlvbiA0IG9mIHRoZSAiCisiUGFydGVkIFVzZXIgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCittc2dzdHIgIiIKKyJOaWUgbW+/bmEgcG9ub3duaWUgb2Rjenl0YeYgdGFibGljeSBwYXJ0eWNqaS4gIE5hbGW/eSBwb25vd25pZSB1cnVjaG9taeYgIgorImtvbXB1dGVyIHByemVkIHBvZLOxY3plbmllbSBqYWtpY2hrb2x3aWVrIHptb2R5Zmlrb3dhbnljaCBwYXJ0eWNqaS4gIE5hbGW/eSAiCisidGFrv2UgcHJ6ZWluc3RhbG93YeYgcHJvZ3JhbSCzYWR1arFjeSAoYm9vdCBsb2FkZXIpIHphbmltIHVydWNob21pc3ogIgorInBvbm93bmllIGtvbXB1dGVyIChjbyBtb79lIHd5bWFnYeYgcG9ks7FjemVuaWEgem1vZHlmaWtvd2FueWNoIHBhcnR5Y2ppKS4gICIKKyJXeWtvbmFuaWUgZHfzY2ggcG93eb9zenljaCByemVjenkgamVzdCBuaWVtb79saXdlISAgQSB3aepjIHBvem9zdGFqZSBDaSAiCisidXJ1Y2hvbWllbmllIGR5c2t1L3CzeXR5IHJhdHVua293ZWogaSBwcnplaW5zdGFsb3dhbmllIHByb2dyYW11ILNhZHVqsWNlZ28gIgorInByb3N0byB6IGR5c2t1IHJhdHVua293ZWdvLiAgUHJ6ZWN6eXRhaiByb3pkemlhsyA0IGRva3VtZW50YWNqaSBwcm9ncmFtdSBHTlUgIgorIlBhcnRlZCwgYWJ5IHV6eXNrYeYgd2nqY2VqIGluZm9ybWFjamkgbmEgdGVuIHRlbWF0LiIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6MzY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgcGFydGl0aW9uIHRhYmxlIG9uICVzIGNhbm5vdCBiZSByZS1yZWFkICglcykuICBUaGlzIG1lYW5zIHRoZSBIdXJkIGtub3dzICIKKyJub3RoaW5nIGFib3V0IGFueSBtb2RpZmljYXRpb25zIHlvdSBtYWRlLiAgWW91IHNob3VsZCByZWJvb3QgeW91ciBjb21wdXRlciAiCisiYmVmb3JlIGRvaW5nIGFueXRoaW5nIHdpdGggJXMuIgorbXNnc3RyICIiCisiTmllIG1vv25hIHBvbm93bmllIHdjenl0YeYgdGFibGljeSBwYXJ0eWNqaSBuYSAlcyAoJXMpLiAgT3puYWN6YSB0bywgv2UgSHVyZCAiCisibmllIHdpZSBvIL9hZG55Y2ggem1pYW5hY2ggamFraWUgem9zdGGzeSB3cHJvd2Fkem9uZS4gIE5hbGW/eSBwb25vd25pZSAiCisidXJ1Y2hvbWnmIGtvbXB1dGVyIHphbmltIHd5a29uYXN6IGpha7Frb2x3aWVrIG9wZXJhY2rqIG5hICVzLiIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6MzgwIHBhcnRlZC9wYXJ0ZWQuYzoyNDQzCittc2dpZCAiIgorIllvdSBzaG91bGQgcmVpbnN0YWxsIHlvdXIgYm9vdCBsb2FkZXIgYmVmb3JlIHJlYm9vdGluZy4gIFJlYWQgc2VjdGlvbiA0IG9mICIKKyJ0aGUgUGFydGVkIFVzZXIgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCittc2dzdHIgIiIKKyJOYWxlv3kgcHJ6ZWluc3RhbG93YeYgcHJvZ3JhbSCzYWR1arFjeSAoYm9vdCBsb2FkZXIpIHByemVkIHBvbm93bnltICIKKyJ1cnVjaG9taWVuaWVtIGtvbXB1dGVyYS4gIFByemVjenl0YWogcm96ZHppYbMgNCBkb2t1bWVudGFjamkgdb95dGtvd25pa2EgIgorIlBhcnRlZCwgYWJ5IHV6eXNrYeYgd2nqY2VqIGluZm9ybWFjamkuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo3NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdHJ5aW5nIHRvIHN5bmMgJXMgdG8gZGlzayIKK21zZ3N0ciAiQrOxZCBzeW5jaHJvbml6YWNqaSAlcyBkbyBkeXNrdSAlcyIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo0MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHN0YXQgZGV2aWNlICVzIC0gJXMuIgorbXNnc3RyICJOaWUgbW+/bmEgc3ByYXdkemnmIHVyerFkemVuaWEgJXMgLSAlcy4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6NTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgZGV0ZXJtaW5lIHNlY3RvciBzaXplIGZvciAlczogJXMuXG4iCisiVXNpbmcgdGhlIGRlZmF1bHQgc2VjdG9yIHNpemUgKCVsbGQpLiIKK21zZ3N0ciAiIgorIk5pZSB1ZGGzbyBzaeogb2tyZbZsaeYgcm96bWlhcnUgc2VrdG9yYSBkbGEgJXM6ICVzLlxuIgorIlW/eXRvIGRvbXm2bG5lZ28gcm96bWlhcnUgc2VrdG9yYSAoJWxsZCkuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjUzOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRGV2aWNlICVzIGhhcyBhIGxvZ2ljYWwgc2VjdG9yIHNpemUgb2YgJWxsZC4gIE5vdCBhbGwgcGFydHMgb2YgR05VIFBhcnRlZCAiCisic3VwcG9ydCB0aGlzIGF0IHRoZSBtb21lbnQsIGFuZCB0aGUgd29ya2luZyBjb2RlIGlzIEhJR0hMWSBFWFBFUklNRU5UQUwuXG4iCittc2dzdHIgIiIKKyJMb2dpY3pueSByb3ptaWFyIHNla3RvcmEgZGxhICVzIHd5bm9zaSAlbGxkLiBOaWUgd3N6eXN0a2llIGN66rZjaSBHTlUgIgorIlBhcnRlZGEgYWt0dWFsbmllIHRvIG9ic7N1Z3VqsSwgYSBkemlhs2FqsWN5IGtvZCBqZXN0IFdZU09DRSAiCisiRUtTUEVSWU1FTlRBTE5ZLlxuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjU3OQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZGV0ZXJtaW5lIHRoZSBzaXplIG9mICVzICglcykuIgorbXNnc3RyICJOaWUgbW+/bmEgdXN0YWxp5iByb3ptaWFydSAlcyAoJXMpLiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo2NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGdldCBpZGVudGl0eSBvZiBkZXZpY2UgJXMgLSAlcyIKK21zZ3N0ciAiTmllIG1vv25hIHV6eXNrYeYgdG+/c2Ftb7ZjaSB1cnqxZHplbmlhICVzIC0gJXMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6Njc3Cittc2dpZCAiR2VuZXJpYyBJREUiCittc2dzdHIgIk9n82xuZSBJREUiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6Njk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJEZXZpY2UgJXMgaGFzIG11bHRpcGxlICglZCkgbG9naWNhbCBzZWN0b3JzIHBlciBwaHlzaWNhbCBzZWN0b3IuXG4iCisiR05VIFBhcnRlZCBzdXBwb3J0cyB0aGlzIEVYUEVSSU1FTlRBTExZIGZvciBzb21lIHNwZWNpYWwgZGlzayBsYWJlbC9maWxlICIKKyJzeXN0ZW0gY29tYmluYXRpb25zLCBlLmcuIEdQVCBhbmQgZXh0Mi8zLlxuIgorIlBsZWFzZSBjb25zdWx0IHRoZSB3ZWIgc2l0ZSBmb3IgdXAtdG8tZGF0ZSBpbmZvcm1hdGlvbi4iCittc2dzdHIgIiIKKyJVcnqxZHplbmllICVzIG1hIHdpZWxlICglZCkgbG9naWN6bnljaCBzZWt0b3LzdyB3IGthv2R5bSBzZWt0b3J6ZSAiCisiZml6eWN6bnltLlxuIgorIkdOVSBQYXJ0ZWQgb2Jzs3VndWplIHRvIEVLU1BFUllNRU5UQUxOSUUgZGxhIG5pZWt083J5Y2ggc3BlY2phbG55Y2ggcG+zsWN6ZfEgIgorImV0eWtpZXQgZHlza/N3IGkgc3lzdGVt83cgcGxpa/N3LCBucC4gR1BUIGkgZXh0Mi8zLlxuIgorIkFrdHVhbG5lIGluZm9ybWFjamUgem5hamR1arEgc2nqIG5hIHN0cm9uaWUgV1dXLiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo4NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgaW5pdGlhbGlzaW5nIFNDU0kgZGV2aWNlICVzIC0gJXMiCittc2dzdHIgIkKzsWQgcG9kY3phcyBpbmljamFsaXphY2ppIHVyerFkemVuaWEgU0NTSSAlcyAtICVzIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjkyOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGRldmljZSAlcyBoYXMgemVybyBsZW5ndGgsIGFuZCBjYW4ndCBwb3NzaWJseSBzdG9yZSBhIGZpbGUgc3lzdGVtIG9yICIKKyJwYXJ0aXRpb24gdGFibGUuICBQZXJoYXBzIHlvdSBzZWxlY3RlZCB0aGUgd3JvbmcgZGV2aWNlPyIKK21zZ3N0ciAiIgorIlVyerFkemVuaWUgJXMgcG9zaWFkYSB6ZXJvd7EgZLN1Z2+25iBpIG1vv2UgbmllIGJ55iB3IHN0YW5pZSBwcnplY2hvd3l3YeYgIgorInN5c3RlbXUgcGxpa/N3IGx1YiB0YWJsaWN5IHBhcnR5Y2ppLiAgQnnmIG1vv2UgZG9rb25hbm8gbmlld7NhtmNpd2VnbyB3eWJvcnUgIgorInVyerFkemVuaWE/IgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjEwMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVuYWJsZSB0byBkZXRlcm1pbmUgZ2VvbWV0cnkgb2YgZmlsZS9kZXZpY2UgJXMuICBZb3Ugc2hvdWxkIG5vdCB1c2UgUGFydGVkICIKKyJ1bmxlc3MgeW91IFJFQUxMWSBrbm93IHdoYXQgeW91J3JlIGRvaW5nISIKK21zZ3N0ciAiIgorIk5pZSBtb79uYSB1c3RhbGnmIGdlb21ldHJpaSBwbGlrdS91cnqxZHplbmlhICVzLiAgVyB0eW0gcHJ6eXBhZGt1IG5pZSBqZXN0ICIKKyJ6YWxlY2FuZSB1v3l3YW5pZSBQYXJ0ZWRhLCBjaHliYSC/ZSBOQVBSQVdEyiB3aWVzeiBjbyByb2Jpc3ohIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExMTAKK21zZ2lkICJEQUM5NjAgUkFJRCBjb250cm9sbGVyIgorbXNnc3RyICJLb250cm9sZXIgREFDOTYwIFJBSUQiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTExNQorbXNnaWQgIlByb21pc2UgU1g4IFNBVEEgRGV2aWNlIgorbXNnc3RyICJVcnqxZHplbmllIFByb21pc2UgU1g4IFNBVEEiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTEyMAorbXNnaWQgIklCTSBTMzkwIERBU0QgZHJpdmUiCittc2dzdHIgIkR5c2sgREFTRCBJQk0gUzM5MCIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTI1Cittc2dpZCAiSUJNIGlTZXJpZXMgVmlydHVhbCBEQVNEIgorbXNnc3RyICJXaXJ0dWFsbnkgZHlzayBEQVNEIElCTSBpU2VyaWVzIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExMzAKK21zZ2lkICJDb21wYXEgU21hcnQgQXJyYXkiCittc2dzdHIgIkNvbXBhcSBTbWFydCBBcnJheSIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTM1Cittc2dpZCAiQVRBUkFJRCBDb250cm9sbGVyIgorbXNnc3RyICJLb250cm9sZXIgQVRBUkFJRCIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTQwCittc2dpZCAiSTJPIENvbnRyb2xsZXIiCittc2dzdHIgIktvbnRyb2xlciBJMk8iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTE0NQorbXNnaWQgIlVzZXItTW9kZSBMaW51eCBVQkQiCittc2dzdHIgIlVCRCB6IFVzZXItTW9kZSBMaW51a3NhIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExNTYKK21zZ2lkICJMaW51eCBkZXZpY2UtbWFwcGVyIgorbXNnc3RyICJMaW51a3Nvd3kgZGV2aWNlLW1hcHBlciIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTYyCittc2dpZCAiVW5rbm93biIKK21zZ3N0ciAiTmllem5hbmUiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTE2OQorbXNnaWQgInBlZF9kZXZpY2VfbmV3KCkgIFVuc3VwcG9ydGVkIGRldmljZSB0eXBlIgorbXNnc3RyICJwZWRfZGV2aWNlX25ldygpICBUZW4gdHlwIHVyerFkemVuaWEgbmllIGplc3Qgd3NwaWVyYW55IgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjIwODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkVycm9yIGluZm9ybWluZyB0aGUga2VybmVsIGFib3V0IG1vZGlmaWNhdGlvbnMgdG8gcGFydGl0aW9uICVzIC0tICVzLiAgVGhpcyAiCisibWVhbnMgTGludXggd29uJ3Qga25vdyBhYm91dCBhbnkgY2hhbmdlcyB5b3UgbWFkZSB0byAlcyB1bnRpbCB5b3UgcmVib290IC0tICIKKyJzbyB5b3Ugc2hvdWxkbid0IG1vdW50IGl0IG9yIHVzZSBpdCBpbiBhbnkgd2F5IGJlZm9yZSByZWJvb3RpbmcuIgorbXNnc3RyICIiCisiQrOxZCBwb2RjemFzIGluZm9ybW93YW5pYSBqsWRyYSBzeXN0ZW11IG8gbW9keWZpa2FjamkgcGFydHljamkgJXMgLS0gJXMuICAiCisiT3puYWN6YSB0bywgv2UgTGludXggbmllIGLqZHppZSB3aWVkemlhsyBvIL9hZG55Y2ggem1pYW5hY2ggamFraWUgem9zdGGzeSAiCisiZG9rb25hbmUgbmEgJXMgYb8gZG8gY3phc3UgcG9ub3duZWdvIHVydWNob21pZW5pYSBrb21wdXRlcmEgLS0gcHJvc3rqIG5pZSAiCisicG9ks7FjemHmIGFuaSB1v3l3YeYgdGVqIHBhcnR5Y2ppIGRvIGN6YXN1IHBvbm93bmVnbyB1cnVjaG9taWVuaWEga29tcHV0ZXJhLiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoyMjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJwYXJ0ZWQgd2FzIHVuYWJsZSB0byByZS1yZWFkIHRoZSBwYXJ0aXRpb24gdGFibGUgb24gJXMgKCVzKS4gIFRoaXMgbWVhbnMgIgorIkxpbnV4IHdvbid0IGtub3cgYW55dGhpbmcgYWJvdXQgdGhlIG1vZGlmaWNhdGlvbnMgeW91IG1hZGUuICIKK21zZ3N0ciAiIgorInBhcnRlZCBuaWUgbfNnsyBwb25vd25pZSBvZGN6eXRh5iB0YWJsaWN5IHBhcnR5Y2ppIG5hICVzICglcykuICBPem5hY3phIHRvLCAiCisiv2UgTGludXggbmllIGLqZHppZSB3aWVkemlhsyBuaWMgbyBtb2R5ZmlrYWNqYWNoIGpha2llIHpvc3Rhs3kgcG9jenluaW9uZS4gIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjIzNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBrZXJuZWwgd2FzIHVuYWJsZSB0byByZS1yZWFkIHRoZSBwYXJ0aXRpb24gdGFibGUgb24gJXMgKCVzKS4gIFRoaXMgbWVhbnMgIgorIkxpbnV4IHdvbid0IGtub3cgYW55dGhpbmcgYWJvdXQgdGhlIG1vZGlmaWNhdGlvbnMgeW91IG1hZGUgdW50aWwgeW91ICIKKyJyZWJvb3QuICBZb3Ugc2hvdWxkIHJlYm9vdCB5b3VyIGNvbXB1dGVyIGJlZm9yZSBkb2luZyBhbnl0aGluZyB3aXRoICVzLiIKK21zZ3N0ciAiIgorIkqxZHJvIHN5c3RlbXUgbmllIG1vZ7NvIHBvbm93bmllIG9kY3p5dGHmIHRhYmxpY3kgcGFydHljamkgbmEgJXMgKCVzKS4gICIKKyJPem5hY3phIHRvLCC/ZSBMaW51eCBuaWUgYupkemllIHdpZWR6aWGzIG5pYyBvIG1vZHlmaWthY2phY2ggamFraWUgem9zdGGzeSAiCisicG9jenluaW9uZSBhvyBkbyBjemFzdSBwb25vd25lZ28gdXJ1Y2hvbWllbmlhIGtvbXB1dGVyYS4gIE5hbGW/eSBwb25vd25pZSAiCisidXJ1Y2hvbWnmIGtvbXB1dGVyIHphbmltIHd5a29uYXN6IGpha7Frb2x3aWVrIG9wZXJhY2rqIG5hICVzLiIKKworIzogbGlicGFydGVkL2NzL2dlb20uYzoxNjIKK21zZ2lkICJDYW4ndCBoYXZlIHRoZSBlbmQgYmVmb3JlIHRoZSBzdGFydCEiCittc2dzdHIgIk5pZSBtb79uYSBtaWXmIGtv8WNhIHByemVkIHBvY3qxdGtpZW0hIgorCisjOiBsaWJwYXJ0ZWQvY3MvZ2VvbS5jOjE2OQorbXNnaWQgIkNhbid0IGhhdmUgYSBwYXJ0aXRpb24gb3V0c2lkZSB0aGUgZGlzayEiCittc2dzdHIgIk5pZSBtb79uYSBtaWXmIHBhcnR5Y2ppIHBvemEgZHlza2llbSEiCisKKyM6IGxpYnBhcnRlZC9jcy9nZW9tLmM6MzY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkF0dGVtcHQgdG8gd3JpdGUgc2VjdG9ycyAlbGQtJWxkIG91dHNpZGUgb2YgcGFydGl0aW9uIG9uICVzLiIKK21zZ3N0ciAiUHLzYmEgemFwaXNhbmlhIHNla3RvcvN3ICVsZC0lbGQgcG96YSBwYXJ0eWNqsSBuYSAlcy4iCisKKyM6IGxpYnBhcnRlZC9jcy9nZW9tLmM6NDA2IGxpYnBhcnRlZC9mcy9saW51eF9zd2FwL2xpbnV4X3N3YXAuYzo0NzUKK21zZ2lkICJjaGVja2luZyBmb3IgYmFkIGJsb2NrcyIKK21zZ3N0ciAic3ByYXdkemFtIGN6eSBpc3RuaWVqsSB1c3prb2R6b25lIGJsb2tpIgorCisjOiBsaWJwYXJ0ZWQvZGVidWcuYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFja3RyYWNlIGhhcyAlZCBjYWxscyBvbiBzdGFjazpcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZGVidWcuYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXNzZXJ0aW9uICglcykgYXQgJXM6JWQgaW4gZnVuY3Rpb24gJXMoKSBmYWlsZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBvcGVuICVzIC0gdW5yZWNvZ25pc2VkIGRpc2sgbGFiZWwuIgorbXNnc3RyICJOaWUgbW+/bmEgb3R3b3J6eeYgJXMgLSBuaWVyb3pwb3puYW5hIGV0eWtpZXRhIGR5c2t1LiIKKworIzogbGlicGFydGVkL2Rpc2suYzo0NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgbGlicGFydGVkIGRvZXNuJ3QgaGF2ZSB3cml0ZSBzdXBwb3J0IGZvciAlcy4gIFBlcmhhcHMgaXQgd2FzIGNvbXBpbGVkICIKKyJyZWFkLW9ubHkuIgorbXNnc3RyICIiCisiQmlibGlvdGVrYSBsaWJwYXJ0ZWQgbmllIHBvc2lhZGEgb2Jzs3VnaSB6YXBpc3UgZGxhICVzLiAgQnnmIG1vv2Ugem9zdGGzYSAiCisib25hIHpidWRvd2FuYSB6IG9ic7N1Z7EgdHlsa28tZG8tb2Rjenl0dS4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6NTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhcnRpdGlvbiAlZCBpcyAlcywgYnV0IHRoZSBmaWxlIHN5c3RlbSBpcyAlcy4iCittc2dzdHIgIlBhcnR5Y2phICVkIGplc3QgJXMsIGxlY3ogc3lzdGVtIHBsaWvzdyBqZXN0ICVzLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxMDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGRpc2sgbGFiZWxzIGRvIG5vdCBzdXBwb3J0IGV4dGVuZGVkIHBhcnRpdGlvbnMuIgorbXNnc3RyICJFdHlraWV0eSBkeXNrdSAlcyBuaWUgd3NwaWVyYWqxIHJvenN6ZXJ6b255Y2ggcGFydHljamkuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE2MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZGlzayBsYWJlbHMgZG9uJ3Qgc3VwcG9ydCBsb2dpY2FsIG9yIGV4dGVuZGVkIHBhcnRpdGlvbnMuIgorbXNnc3RyICJFdHlraWV0eSBkeXNrdSAlcyBuaWUgd3NwaWVyYWqxIGxvZ2ljem55Y2ggbHViIHJvenN6ZXJ6b255Y2ggcGFydHljamkuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE2NDcKK21zZ2lkICJUb28gbWFueSBwcmltYXJ5IHBhcnRpdGlvbnMuIgorbXNnc3RyICJaYnl0IGR1v28gcGFydHljamkgZ7Pzd255Y2guIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE2NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbid0IGFkZCBhIGxvZ2ljYWwgcGFydGl0aW9uIHRvICVzLCBiZWNhdXNlIHRoZXJlIGlzIG5vIGV4dGVuZGVkIHBhcnRpdGlvbi4iCittc2dzdHIgIiIKKyJOaWUgbW+/bmEgZG9kYeYgbG9naWN6bmVqIHBhcnR5Y2ppIGRvICVzLCBwb25pZXdhvyBuaWUgaXN0bmllamUgcm96c3plcnpvbmEgIgorInBhcnR5Y2phLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbid0IGhhdmUgbW9yZSB0aGFuIG9uZSBleHRlbmRlZCBwYXJ0aXRpb24gb24gJXMuIgorbXNnc3RyICJOaWUgbW+/bmEgbWll5iB3aepjZWogbmm/IGplZG6xIHJvenN6ZXJ6b26xIHBhcnR5Y2rqIG5hICVzLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNjkwCittc2dpZCAiQ2FuJ3QgaGF2ZSBsb2dpY2FsIHBhcnRpdGlvbnMgb3V0c2lkZSBvZiB0aGUgZXh0ZW5kZWQgcGFydGl0aW9uLiIKK21zZ3N0ciAiTmllIG1vv25hIG1pZeYgbG9naWN6bnljaCBwYXJ0eWNqaSBwb3phIHJvenN6ZXJ6b26xIHBhcnR5Y2qxLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbid0IGhhdmUgYSBsb2dpY2FsIHBhcnRpdGlvbiBvdXRzaWRlIG9mIHRoZSBleHRlbmRlZCBwYXJ0aXRpb24gb24gJXMuIgorbXNnc3RyICIlcyBuaWUgbW+/ZSBtaWXmIGxvZ2ljem5laiBwYXJ0eWNqaSBwb3phIHJvenN6ZXJ6b26xIHBhcnR5Y2qxLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNzI1IGxpYnBhcnRlZC9kaXNrLmM6MTc3OSBsaWJwYXJ0ZWQvZGlzay5jOjE5NDUKK21zZ2lkICJDYW4ndCBoYXZlIG92ZXJsYXBwaW5nIHBhcnRpdGlvbnMuIgorbXNnc3RyICJOaWUgbW+/bmEgbWll5iBuYWuzYWRharFjeWNoIHNp6iBwYXJ0eWNqaS4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTczMworbXNnaWQgIkNhbid0IGhhdmUgYSBwcmltYXJ5IHBhcnRpdGlvbiBpbnNpZGUgYW4gZXh0ZW5kZWQgcGFydGl0aW9uLiIKK21zZ3N0ciAiTmllIG1vv25hIG1pZeYgZ7Pzd25laiBwYXJ0eWNqaSB3ZXdusXRyeiByb3pzemVyem9uZWogcGFydHljamkuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNDAKK21zZ2lkICJtZXRhZGF0YSIKK21zZ3N0ciAibWV0YWRhbmUiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE0MgorbXNnaWQgImZyZWUiCittc2dzdHIgIndvbG5hIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNDQgcGFydGVkL3VpLmM6MTE2OSBwYXJ0ZWQvdWkuYzoxMTk3Cittc2dpZCAiZXh0ZW5kZWQiCittc2dzdHIgInJvenN6ZXJ6b25hIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNDYgcGFydGVkL3VpLmM6MTE3MyBwYXJ0ZWQvdWkuYzoxMjAxCittc2dpZCAibG9naWNhbCIKK21zZ3N0ciAibG9naWN6bmEiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE0OCBwYXJ0ZWQvdWkuYzoxMTY1IHBhcnRlZC91aS5jOjExOTMKK21zZ2lkICJwcmltYXJ5IgorbXNnc3RyICJns/N3bmEiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE2NAorbXNnaWQgImJvb3QiCittc2dzdHIgIrNhZG93YWxuYSIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTY2Cittc2dpZCAicm9vdCIKK21zZ3N0ciAicm9vdCIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTY4Cittc2dpZCAic3dhcCIKK21zZ3N0ciAid3ltaWFueSIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTcwCittc2dpZCAiaGlkZGVuIgorbXNnc3RyICJ1a3J5dGEiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE3MgorbXNnaWQgInJhaWQiCittc2dzdHIgInJhaWQiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE3NAorbXNnaWQgImx2bSIKK21zZ3N0ciAibHZtIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNzYKK21zZ2lkICJsYmEiCittc2dzdHIgImxiYSIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTc4Cittc2dpZCAiaHAtc2VydmljZSIKK21zZ3N0ciAidXOzdWdhLWhwIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxODAKK21zZ2lkICJwYWxvIgorbXNnc3RyICJwYWxvIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxODIKK21zZ2lkICJwcmVwIgorbXNnc3RyICJwcmVwIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxODQKK21zZ2lkICJtc2Z0cmVzIgorbXNnc3RyICJtc2Z0cmVzIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBwYXJ0aXRpb24gZmxhZywgJWQuIgorbXNnc3RyICJOaWV6bmFuYSBmbGFnYSBwYXJ0eWNqaSwgJWQuIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6NzgKK21zZ2lkICJJbmZvcm1hdGlvbiIKK21zZ3N0ciAiSW5mb3JtYWNqYSIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjc5Cittc2dpZCAiV2FybmluZyIKK21zZ3N0ciAiT3N0cnplv2VuaWUiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4MAorbXNnaWQgIkVycm9yIgorbXNnc3RyICJCs7FkIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODEKK21zZ2lkICJGYXRhbCIKK21zZ3N0ciAiRmF0YWxueSBis7FkIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODIKK21zZ2lkICJCdWciCittc2dzdHIgIkKzsWQiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4MworbXNnaWQgIk5vIEltcGxlbWVudGF0aW9uIgorbXNnc3RyICJCcmFrIGltcGxlbWVudGFjamkiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4NworbXNnaWQgIkZpeCIKK21zZ3N0ciAiUG9wcmF3IgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODgKK21zZ2lkICJZZXMiCittc2dzdHIgIlRhayIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjg5Cittc2dpZCAiTm8iCittc2dzdHIgIk5pZSIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjkwCittc2dpZCAiT0siCittc2dzdHIgIk9LIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6OTEKK21zZ2lkICJSZXRyeSIKK21zZ3N0ciAiUG93dPNyeiIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjkyCittc2dpZCAiSWdub3JlIgorbXNnc3RyICJaaWdub3J1aiIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjkzCittc2dpZCAiQ2FuY2VsIgorbXNnc3RyICJQb25pZWNoYWoiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkEgYnVnIGhhcyBiZWVuIGRldGVjdGVkIGluIEdOVSBQYXJ0ZWQuICBSZWZlciB0byB0aGUgd2ViIHNpdGUgb2YgcGFydGVkICIKKyJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvcGFydGVkL3BhcnRlZC5odG1sIGZvciBtb3JlIGluZm9ybWF0aW9ucyBvZiB3aGF0ICIKKyJjb3VsZCBiZSB1c2VmdWwgZm9yIGJ1ZyBzdWJtaXR0aW5nISAgUGxlYXNlIGVtYWlsIGEgYnVnIHJlcG9ydCB0byBidWctIgorInBhcnRlZEBnbnUub3JnIGNvbnRhaW5pbmcgYXQgbGVhc3QgdGhlIHZlcnNpb24gKCVzKSBhbmQgdGhlIGZvbGxvd2luZyAiCisibWVzc2FnZTogICIKK21zZ3N0ciAiIgorIlpvc3RhsyB3eWtyeXR5IGKzsWQgdyBkemlhs2FuaXUgcHJvZ3JhbXUgR05VIFBhcnRlZC4gIE9kd2llZLwgc3Ryb27qIGh0dHA6Ly8iCisid3d3LmdudS5vcmcvc29mdHdhcmUvcGFydGVkL3BhcnRlZC5odG1sIHcgY2VsdSB1enlza2FuaWEgaW5mb3JtYWNqaSBuYSB0ZW1hdCAiCisiemezYXN6YW5pYSBis+pk83cuICBQcm9zeuogd3lzs2HmIHJhcG9ydCBuYSB0ZW1hdCBis+pkdSBuYSBhZHJlcyBidWctIgorInBhcnRlZEBnbnUub3JnLCBkb7OxY3pharFjIG51bWVyIHdlcnNqaSAoJXMpIG9yYXogbmFzdOpwdWqxY7Egd2lhZG9tb7bmOiAgIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjM4NAorbXNnaWQgIkNvdWxkIG5vdCBkZXRlY3QgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICJOaWUgbW+/bmEgd3lrcnnmIHN5c3RlbXUgcGxpa/N3LiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzozOTUKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gaXMgYmlnZ2VyIHRoYW4gaXRzIHZvbHVtZSEiCittc2dzdHIgIlN5c3RlbSBwbGlr83cgamVzdCB3aeprc3p5IG5pvyBqZWdvIHdvbHVtZW4hIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjQwMworIywgYy1mb3JtYXQKK21zZ2lkICJTdXBwb3J0IGZvciBvcGVuaW5nICVzIGZpbGUgc3lzdGVtcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiIgorIldzcGFyY2llIGRsYSBvdHdpZXJhbmlhIHN5c3RlbfN3IHBsaWvzdyAlcyBuaWUgem9zdGGzbyBqZXN6Y3plICIKKyJ6YWltcGxlbWVudG93YW5lLiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo0NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VwcG9ydCBmb3IgY3JlYXRpbmcgJXMgZmlsZSBzeXN0ZW1zIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICIiCisiV3NwYXJjaWUgZGxhIHR3b3J6ZW5pYSBzeXN0ZW3zdyBwbGlr83cgJXMgbmllIHpvc3Rhs28gamVzemN6ZSAiCisiemFpbXBsZW1lbnRvd2FuZS4iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnQgZm9yIGNoZWNraW5nICVzIGZpbGUgc3lzdGVtcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiIgorIldzcGFyY2llIGRsYSBzcHJhd2R6YW5pYSBzeXN0ZW3zdyBwbGlr83cgJXMgbmllIHpvc3Rhs28gamVzemN6ZSAiCisiemFpbXBsZW1lbnRvd2FuZS4iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NTcxCittc2dpZCAicmF3IGJsb2NrIGNvcHlpbmciCittc2dzdHIgImJlenBvtnJlZG5pZSBrb3Bpb3dhbmllIGJsb2vzdyIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo1ODIKK21zZ2lkICJncm93aW5nIGZpbGUgc3lzdGVtIgorbXNnc3RyICJwb3dp6mtzemFuaWUgc3lzdGVtdSBwbGlr83ciCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NjIyCittc2dpZCAiQ2FuJ3QgY29weSBvbnRvIGFuIG92ZXJsYXBwaW5nIHBhcnRpdGlvbi4iCittc2dzdHIgIk5pZSBtb79uYSBza29waW93YeYgbmEgbmFrs2FkYWqxY7Egc2nqIHBhcnR5Y2rqLiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo2NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkRpcmVjdCBzdXBwb3J0IGZvciBjb3B5aW5nIGZpbGUgc3lzdGVtcyBpcyBub3QgeWV0IGltcGxlbWVudGVkIGZvciAlcy4gICIKKyJIb3dldmVyLCBzdXBwb3J0IGZvciByZXNpemluZyBpcyBpbXBsZW1lbnRlZC4gIFRoZXJlZm9yZSwgdGhlIGZpbGUgc3lzdGVtICIKKyJjYW4gYmUgY29waWVkIGlmIHRoZSBuZXcgcGFydGl0aW9uIGlzIGF0IGxlYXN0IGFzIGJpZyBhcyB0aGUgb2xkIG9uZS4gIFNvLCAiCisiZWl0aGVyIHNocmluayB0aGUgcGFydGl0aW9uIHlvdSBhcmUgdHJ5aW5nIHRvIGNvcHksIG9yIGNvcHkgdG8gYSBiaWdnZXIgIgorInBhcnRpdGlvbi4iCittc2dzdHIgIiIKKyJCZXpwb7ZyZWRuaWUgd3NwYXJjaWUga29waW93YW5pYSBzeXN0ZW3zdyBwbGlr83cgZGxhICVzIG5pZSBqZXN0IGplc3pjemUgIgorInphaW1wbGVtZW50b3dhbmUuICBBY3prb2x3aWVrLCB3c3BpZXJhbmEgamVzdCB6bWlhbmEgcm96bWlhcnUgc3lzdGVtdSAiCisicGxpa/N3LiAgVGFrIHdp6mMsIHN5c3RlbSBwbGlr83cgbW+/ZSB6b3N0YeYgc2tvcGlvd2FueSwgamW2bGkgbm93YSBwYXJ0eWNqYSAiCisibWEgcHJ6eW5ham1uaWVqIHRha7Egc2FtsSBwb2plbW5vtuYgamFrIHN0YXJhLiAgTW+/ZXN6IHRha79lIHptbmllanN6eeYgIgorInJvem1pYXIgcGFydHljamksIGt083KxIGNoY2VzeiBza29waW93YeYgbHViIHNrb3BpdWogbmEgcGFydHljauogbyB3aeprc3p5bSAiCisicm96bWlhcnplLiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo2NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VwcG9ydCBmb3IgY29weWluZyAlcyBmaWxlIHN5c3RlbXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiIKKyJXc3BhcmNpZSBkbGEga29waW93YW5pYSBzeXN0ZW3zdyBwbGlr83cgJXMgbmllIHpvc3Rhs28gamVzemN6ZSAiCisiemFpbXBsZW1lbnRvd2FuZS4iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6Njk2CisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnQgZm9yIHJlc2l6aW5nICVzIGZpbGUgc3lzdGVtcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiIgorIldzcGFyY2llIGRsYSB6bWlhbnkgd2llbGtvtmNpIHN5c3RlbfN3IHBsaWvzdyAlcyBuaWUgem9zdGGzbyBqZXN6Y3plICIKKyJ6YWltcGxlbWVudG93YW5lLiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6MzE1Cittc2dpZCAiY3JlYXRpbmciCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDAyCisjLCBmdXp6eQorbXNnaWQgIlRoZSBmaWxlIHN5c3RlbSBpcyBpbiBhbiBpbnZhbGlkIHN0YXRlLiAgUGVyaGFwcyBpdCBpcyBtb3VudGVkPyIKK21zZ3N0ciAiU3lzdGVtIHBsaWvzdyBqZXN0IHdp6mtzenkgbmm/IGplZ28gd29sdW1lbiEiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQxMAorbXNnaWQgIlRoZSBmaWxlIHN5c3RlbSBpcyBpbiBvbGQgKHVucmVzaXplYWJsZSkgZm9ybWF0LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0MTYKK21zZ2lkICJJbnZhbGlkIGZyZWUgYmxvY2tzIGNvdW50LiAgUnVuIHJlaXNlcmZzY2sgLS1jaGVjayBmaXJzdC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDMxCisjLCBmdXp6eQorbXNnaWQgImNoZWNraW5nIgorbXNnc3RyICJzcHJhd2S8IgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0MzcKK21zZ2lkICJSZWlzZXJmcyB0cmVlIHNlZW1zIHRvIGJlIGNvcnJ1cHRlZC4gIFJ1biByZWlzZXJmc2NrIC0tY2hlY2sgZmlyc3QuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQ0OQorIywgZnV6enkKK21zZ2lkICIiCisiVGhlIHJlaXNlcmZzIGZpbGUgc3lzdGVtIHBhc3NlZCBhIGJhc2ljIGNoZWNrLiAgRm9yIGEgbW9yZSBjb21wcmVoZW5zaXZlICIKKyJjaGVjaywgcnVuIHJlaXNlcmZzY2sgLS1jaGVjay4iCittc2dzdHIgIiIKKyJTeXN0ZW0gcGxpa/N3IGV4dDIgcHJ6ZXN6ZWSzIHBvbXm2bG5pZSBwb2RzdGF3b3dlIHNwcmF3ZHplbmllLiAgVb95aiBwcm9ncmFtICIKKyJlMmZzY2ssIGFieSB3eWtvbmHmIGJhcmR6aWVqIHd5Y3plcnB1arFjZSBzcHJhd2R6ZW5pZS4iCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQ3NAorIywgZnV6enkKK21zZ2lkICJTb3JyeSwgY2FuJ3QgbW92ZSB0aGUgc3RhcnQgb2YgcmVpc2VyZnMgcGFydGl0aW9ucyB5ZXQuIgorbXNnc3RyICJQcnplcHJhc3phbSwgYWxlIG5hIHJhemllIG5pZSBtb79uYSBwcnplc3VuseYgcG9jerF0a3UgcGFydHljamkgZXh0MiEiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQ5MAorbXNnaWQgIkNvdWxkbid0IHJlb3BlbiBkZXZpY2UgYWJzdHJhY3Rpb24gbGF5ZXIgZm9yIHJlYWQvd3JpdGUuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjUwOCBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjU1MgorIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzoyNTAgbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo2MjkKK21zZ2lkICJzaHJpbmtpbmciCittc2dzdHIgInptbmllanN6YW5pZSIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NTIwCisjLCBmdXp6eQorbXNnaWQgImV4cGFuZGluZyIKK21zZ3N0ciAiT3N0cnplv2VuaWUiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjU5MgorbXNnaWQgIkNvdWxkbid0IGNyZWF0ZSByZWlzZXJmcyBkZXZpY2UgYWJzdHJhY3Rpb24gaGFuZGxlci4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NjA2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJEZXZpY2UgaXMgdG9vIHNtYWxsIGZvciAlbHUgYmxvY2tzLiIKK21zZ3N0ciAiU3lzdGVtIHBsaWvzdyBqZXN0IHpieXQgbWGzeSBkbGEgZXh0Mi4iCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjYxNQorbXNnaWQgImNvcHlpbmciCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IHJlc29sdmUgc3ltYm9sICVzLiAgRXJyb3I6ICVzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo3MDQKK21zZ2lkICJHTlUgUGFydGVkIGZvdW5kIGFuIGludmFsaWQgbGlicmVpc2VyZnMgbGlicmFyeS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJHTlUgUGFydGVkIGhhcyBkZXRlY3RlZCBsaWJyZWlzZXJmcyBpbnRlcmZhY2UgdmVyc2lvbiBtaXNtYXRjaC4gIEZvdW5kICVkLSUiCisiZCwgcmVxdWlyZWQgJWQuIFJlaXNlckZTIHN1cHBvcnQgd2lsbCBiZSBkaXNhYmxlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9haXguYzoxMzcKKyMsIGZ1enp5Cittc2dpZCAiU3VwcG9ydCBmb3IgcmVhZGluZyBBSVggZGlzayBsYWJlbHMgaXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiIKKyJXc3BhcmNpZSBkbGEgdHdvcnplbmlhIHN5c3RlbfN3IHBsaWvzdyAlcyBuaWUgem9zdGGzbyBqZXN6Y3plICIKKyJ6YWltcGxlbWVudG93YW5lLiIKKworIzogbGlicGFydGVkL2xhYmVscy9haXguYzoxNDgKKyMsIGZ1enp5Cittc2dpZCAiU3VwcG9ydCBmb3Igd3JpdGluZyBBSVggZGlzayBsYWJlbHMgaXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiIKKyJXc3BhcmNpZSBkbGEgdHdvcnplbmlhIHN5c3RlbfN3IHBsaWvzdyAlcyBuaWUgem9zdGGzbyBqZXN6Y3plICIKKyJ6YWltcGxlbWVudG93YW5lLiIKKworIzogbGlicGFydGVkL2xhYmVscy9haXguYzoxNjEKKyMsIGZ1enp5Cittc2dpZCAiIgorIlN1cHBvcnQgZm9yIGFkZGluZyBwYXJ0aXRpb25zIHRvIEFJWCBkaXNrIGxhYmVscyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiIgorIldzcGFyY2llIGRsYSB0d29yemVuaWEgc3lzdGVt83cgcGxpa/N3ICVzIG5pZSB6b3N0YbNvIGplc3pjemUgIgorInphaW1wbGVtZW50b3dhbmUuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2FpeC5jOjE3MQorIywgZnV6enkKK21zZ2lkICIiCisiU3VwcG9ydCBmb3IgZHVwbGljYXRpbmcgcGFydGl0aW9ucyBpbiBBSVggZGlzayBsYWJlbHMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiIKKyJXc3BhcmNpZSBkbGEgdHdvcnplbmlhIHN5c3RlbfN3IHBsaWvzdyAlcyBuaWUgem9zdGGzbyBqZXN6Y3plICIKKyJ6YWltcGxlbWVudG93YW5lLiIKKworIzogbGlicGFydGVkL2xhYmVscy9haXguYzoxODkKKyMsIGZ1enp5Cittc2dpZCAiIgorIlN1cHBvcnQgZm9yIHNldHRpbmcgc3lzdGVtIHR5cGUgb2YgcGFydGl0aW9ucyBpbiBBSVggZGlzayBsYWJlbHMgaXMgbm90ICIKKyJpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICIiCisiV3NwYXJjaWUgZGxhIHR3b3J6ZW5pYSBzeXN0ZW3zdyBwbGlr83cgJXMgbmllIHpvc3Rhs28gamVzemN6ZSAiCisiemFpbXBsZW1lbnRvd2FuZS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYWl4LmM6MTk5CisjLCBmdXp6eQorbXNnaWQgIlN1cHBvcnQgZm9yIHNldHRpbmcgZmxhZ3MgaW4gQUlYIGRpc2sgbGFiZWxzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICIiCisiV3NwYXJjaWUgZGxhIHR3b3J6ZW5pYSBzeXN0ZW3zdyBwbGlr83cgJXMgbmllIHpvc3Rhs28gamVzemN6ZSAiCisiemFpbXBsZW1lbnRvd2FuZS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYnNkLmM6NTAxIGxpYnBhcnRlZC9sYWJlbHMvZGFzZC5jOjc1NQorIzogbGlicGFydGVkL2xhYmVscy9kb3MuYzoxOTc0IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6NzcwCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjE0NDggbGlicGFydGVkL2xhYmVscy9sb29wLmM6MjQ4CisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjE0MDggbGlicGFydGVkL2xhYmVscy9wYzk4LmM6NzU5CisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjEwNDEgbGlicGFydGVkL2xhYmVscy9zdW4uYzo3MDUKK21zZ2lkICJVbmFibGUgdG8gc2F0aXNmeSBhbGwgY29uc3RyYWludHMgb24gdGhlIHBhcnRpdGlvbi4iCittc2dzdHIgIk5pZSBtb79uYSB6YXNwb2tvaeYgd3N6eXN0a2ljaCBvZ3JhbmljemXxIG5hIHBhcnR5Y2ppLiIKKworIzogbGlicGFydGVkL2xhYmVscy9ic2QuYzo1MjYKK21zZ2lkICJVbmFibGUgdG8gYWxsb2NhdGUgYSBic2QgZGlza2xhYmVsIHNsb3QuIgorbXNnc3RyICJOaWUgbW+/bmEgcHJ6eWR6aWVsaeYgbWllanNjYSBuYSBldHlraWV06iBkeXNrdSBic2QuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rhc2QuYzoxNjYKKyMsIGZ1enp5Cittc2dpZCAiVW5hYmxlIHRvIGRldGVybWluZSB0aGUgYmxvY2sgc2l6ZSBvZiB0aGlzIGRhc2QiCittc2dzdHIgIk5pZSBtb79uYSB1c3RhbGnmIHJvem1pYXJ1ICVzICglcykuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rhc2QuYzo3ODEKKyMsIGZ1enp5Cittc2dpZCAiVW5hYmxlIHRvIGFsbG9jYXRlIGEgZGFzZCBkaXNrbGFiZWwgc2xvdCIKK21zZ3N0ciAiTmllIG1vv25hIHByenlkemllbGnmIG1pZWpzY2EgbmEgZXR5a2lldOogZHlza3UgYnNkLiIKKworIzogbGlicGFydGVkL2xhYmVscy9kb3MuYzo4MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBwYXJ0aXRpb24gdGFibGUgb24gJXMgLS0gd3Jvbmcgc2lnbmF0dXJlICV4LiIKK21zZ3N0ciAiTmllcHJhd2lks293YSB0YWJsaWNhIHBhcnR5Y2ppIG5hICVzIC0tIGKz6mRuYSBzeWduYXR1cmEgJXguIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rvcy5jOjg1NQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHBhcnRpdGlvbiB0YWJsZSAtIHJlY3Vyc2l2ZSBwYXJ0aXRpb24gb24gJXMuIgorbXNnc3RyICJOaWVwcmF3aWSzb3dhIHRhYmxpY2EgcGFydHljamkgLSBwYXJ0eWNqYSByZWt1cnN5d25hIG5hICVzLiIKKworIzogbGlicGFydGVkL2xhYmVscy9kb3MuYzoxMzE4Cittc2dpZCAiRXh0ZW5kZWQgcGFydGl0aW9ucyBjYW5ub3QgYmUgaGlkZGVuIG9uIG1zZG9zIGRpc2sgbGFiZWxzLiIKK21zZ3N0ciAiUm96c3plcnpvbmUgcGFydHljamUgbmllIG1vZ7EgYnnmIHVrcnl0ZSBkbGEgZXR5a2lldGEgZHlza/N3IG1zZG9zLiIKKworIzogbGlicGFydGVkL2xhYmVscy9kb3MuYzoxOTU4Cittc2dpZCAiUGFydGVkIGNhbid0IHJlc2l6ZSBwYXJ0aXRpb25zIG1hbmFnZWQgYnkgV2luZG93cyBEeW5hbWljIERpc2suIgorbXNnc3RyICIiCisiUGFydGVkIG5pZSBtb79lIHptaWVuaeYgcm96bWlhcnUgcGFydHljamkgemFyerFkemFueWNoIHByemV6IFdpbmRvd3MgRHluYW1pYyAiCisiRGlzay4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6MTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyBubyBleHRlbmRlZCBwYXJ0aXRpb24gKHZvbHVtZSBoZWFkZXIgcGFydGl0aW9uKS4iCittc2dzdHIgIiIKKyIlcyBuaWUgcG9zaWFkYSC/YWRueWNoIHJvenN6ZXJ6b255Y2ggcGFydHljamkgKHBhcnR5Y2ppIG5hZ7Pzd2thIHdvbHVtZW51KS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6MzEzCittc2dpZCAiQ2hlY2tzdW0gaXMgd3JvbmcsIGluZGljYXRpbmcgdGhlIHBhcnRpdGlvbiB0YWJsZSBpcyBjb3JydXB0LiIKK21zZ3N0ciAiIgorIlN1bWEga29udHJvbG5hIGplc3QgYrPqZG5hIGkgb3puYWN6YSB0bywgv2UgdGFibGljYSBwYXJ0eWNqaSBqZXN0IHVzemtvZHpvbmEuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjYxNgorbXNnaWQgIk9ubHkgcHJpbWFyeSBwYXJ0aXRpb25zIGNhbiBiZSByb290IHBhcnRpdGlvbnMuIgorbXNnc3RyICJUeWxrbyBns/N3bmUgcGFydHljamUgbW9nsSBieeYgdHlwdSByb290LiIKKworIzogbGlicGFydGVkL2xhYmVscy9kdmguYzo2MzAKK21zZ2lkICJPbmx5IHByaW1hcnkgcGFydGl0aW9ucyBjYW4gYmUgc3dhcCBwYXJ0aXRpb25zLiIKK21zZ3N0ciAiVHlsa28gZ7Pzd25lIHBhcnR5Y2plIG1vZ7EgYnnmIHBhcnR5Y2phbWkgd3ltaWFueS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6NjQ0Cittc2dpZCAiT25seSBsb2dpY2FsIHBhcnRpdGlvbnMgY2FuIGJlIGEgYm9vdCBmaWxlLiIKK21zZ3N0ciAiVHlsa28gbG9naWN6bmUgcGFydHljamUgbW9nsSBieeYgcGxpa2FtaSCzYWRvd2FsbnltaSAoYm9vdCkuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjcyMQorbXNnaWQgIk9ubHkgbG9naWNhbCBwYXJ0aXRpb25zIChib290IGZpbGVzKSBoYXZlIGEgbmFtZS4iCittc2dzdHIgIlR5bGtvIGxvZ2ljem5lIHBhcnR5Y2plICizYWRvd2FsbmUgcGxpa2kpIG1harEgbmF6d3kuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjgxMgorbXNnaWQgIlRvbyBtYW55IHByaW1hcnkgcGFydGl0aW9ucyIKK21zZ3N0ciAiWmJ5dCBkdb9vIHBhcnR5Y2ppIGez83dueWNoIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBvcGVuIGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBzZWVrIGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyByZWFkIGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTEzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgd3JpdGUgZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIlcyBwb2RjemFzIHphcGlzdSAlcyIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjExNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgSU9DVEwgZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIEFQSSB2ZXJzaW9uIG1pc21hdGNoXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBVbnN1cHBvcnRlZCBkaXNrIHR5cGVcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFVuc3VwcG9ydGVkIGRpc2sgZm9ybWF0XG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTMwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgRGlzayBpbiB1c2VcbiIKKyIlc1xuIgorbXNnc3RyICJEeXNrICVzOiAlc1xuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBDb25maWcgZmlsZSBzeW50YXggZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFZvbHVtZSBsYWJlbCBpcyBjb3JydXB0ZWQuXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBhIGRhdGEgc2V0IG5hbWUgaXMgY29ycnVwdGVkLlxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjE0NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgc3BhY2UgYWxsb2NhdGlvblxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgZGV2aWNlIHZlcmlmaWNhdGlvbiBmYWlsZWRcbiIKKyJUaGUgc3BlY2lmaWVkIGRldmljZSBpcyBub3QgYSB2YWxpZCBEQVNEIGRldmljZVxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIEZhdGFsIGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjQ1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgY29udGFpbnMgR1BUIHNpZ25hdHVyZXMsIGluZGljYXRpbmcgdGhhdCBpdCBoYXMgYSBHUFQgdGFibGUuICBIb3dldmVyLCBpdCAiCisiZG9lcyBub3QgaGF2ZSBhIHZhbGlkIGZha2UgbXNkb3MgcGFydGl0aW9uIHRhYmxlLCBhcyBpdCBzaG91bGQuICBQZXJoYXBzIGl0ICIKKyJ3YXMgY29ycnVwdGVkIC0tIHBvc3NpYmx5IGJ5IGEgcHJvZ3JhbSB0aGF0IGRvZXNuJ3QgdW5kZXJzdGFuZCBHUFQgcGFydGl0aW9uICIKKyJ0YWJsZXMuICBPciBwZXJoYXBzIHlvdSBkZWxldGVkIHRoZSBHUFQgdGFibGUsIGFuZCBhcmUgbm93IHVzaW5nIGFuIG1zZG9zICIKKyJwYXJ0aXRpb24gdGFibGUuICBJcyB0aGlzIGEgR1BUIHBhcnRpdGlvbiB0YWJsZT8iCittc2dzdHIgIiIKKyIlcyB6YXdpZXJhIHN5Z25hdHVy6iBHUFQuICBPem5hY3phIHRvLCC/ZSBwb3NpYWRhIHRhYmxpY+ogR1BULCBhbGUgbmllICIKKyJwb3NpYWRhIHByYXdpZLNvd2VqIGZhs3N6eXdlaiB0YWJsaWN5IHBhcnR5Y2ppIG1zZG9zLCB0YWsgamFrIHBvd2lubmEuICBCeeYgIgorIm1vv2UgamVzdCB1c3prb2R6b25hIC0tIG1vv2xpd2UsIL9lIHByemV6IHByb2dyYW0sIGt083J5IG5pZSByb3p1bWllIHRhYmxpYyAiCisicGFydHljamkgR1BULiAgQWxibyB0Zb8gdGFibGljYSBHUFQgem9zdGGzYSBza2Fzb3dhbmEsIHphtiB0ZXJheiB1v3l3YW5hICIKKyJqZXN0IHRhYmxpY2EgcGFydHljamkgbXNkb3MuICBDenkgdG8gamVzdCB0YWJsaWNhIHBhcnR5Y2ppIEdQVD8iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6NjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9ybWF0IG9mIHRoZSBHUFQgcGFydGl0aW9uIHRhYmxlIGlzIHZlcnNpb24gJXgsIHdoaWNoIGlzIG5ld2VyIHRoYW4gIgorIndoYXQgUGFydGVkIGNhbiByZWNvZ25pc2UuICBQbGVhc2UgdGVsbCB1cyEgIGJ1Zy1wYXJ0ZWRAZ251Lm9yZyIKK21zZ3N0ciAiIgorIkZvcm1hdCB0YWJsaWN5IHBhcnR5Y2ppIEdQVCAod2Vyc2phICV4KSBqZXN0IG5vd3N6eSBuab8gcHJvZ3JhbSBQYXJ0ZWQgamVzdCAiCisidyBzdGFuaWUgcm96cG96bmHmLiAgUG9pbmZvcm11aiBuYXMgbyB0eW0hICBidWctcGFydGVkQGdudS5vcmciCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6Njk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3QgYWxsIG9mIHRoZSBzcGFjZSBhdmFpbGFibGUgdG8gJXMgYXBwZWFycyB0byBiZSB1c2VkLCB5b3UgY2FuIGZpeCB0aGUgR1BUICIKKyJ0byB1c2UgYWxsIG9mIHRoZSBzcGFjZSAoYW4gZXh0cmEgJWxsdSBibG9ja3MpIG9yIGNvbnRpbnVlIHdpdGggdGhlIGN1cnJlbnQgIgorInNldHRpbmc/ICIKK21zZ3N0ciAiIgorIk5pZSBjYbNlIGRvc3TqcG5lIG1pZWpzY2UgbmEgJXMgd3lkYWplIHNp6iBieeYgdb95d2FuZSwgcG9wcmF3aeYgR1BULCBhYnkgIgorInW/eXRlIHpvc3Rhs28gY2GzZSBtaWVqc2NlIChkb2RhdGtvd2UgJWxsdSBibG9r83cpIGN6eSBrb250eW51b3dh5iBwcnp5ICIKKyJha3R1YWxueWNoIHVzdGF3aWVuaWFjaD8gIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjgyNworbXNnaWQgIiIKKyJUaGUgYmFja3VwIEdQVCB0YWJsZSBpcyBub3QgYXQgdGhlIGVuZCBvZiB0aGUgZGlzaywgYXMgaXQgc2hvdWxkIGJlLiAgVGhpcyAiCisibWlnaHQgbWVhbiB0aGF0IGFub3RoZXIgb3BlcmF0aW5nIHN5c3RlbSBiZWxpZXZlcyB0aGUgZGlzayBpcyBzbWFsbGVyLiAgRml4LCAiCisiYnkgbW92aW5nIHRoZSBiYWNrdXAgdG8gdGhlIGVuZCAoYW5kIHJlbW92aW5nIHRoZSBvbGQgYmFja3VwKT8iCittc2dzdHIgIiIKKyJLb3BpYSB6YXBhc293YSB0YWJsaWN5IEdQVCBuaWUgem5hamR1amUgc2nqIG5hIGtv8WN1IGR5c2t1LCBhIHBvd2lubmEuICBNb79lICIKKyJ0byBvem5hY3ph5iwgv2UgaW5ueSBzeXN0ZW0gb3BlcmFjeWpueSBtebZsaSwgv2UgZHlzayBqZXN0IG1uaWVqc3p5IG5pvyBqZXN0ICIKKyJ3IHJ6ZWN6eXdpc3RvtmNpLiAgQ3p5IG5hcHJhd2nmIHRvIHBvcHJ6ZXogcHJ6ZXN1bmnqY2llIGtvcGlpIHphcGFzb3dlaiBuYSAiCisia29uaWVjIChpIHVzdW5p6mNpZSBzdGFyZWoga29waWkpPyIKKworIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzo4NjIKK21zZ2lkICIiCisiVGhlIHByaW1hcnkgR1BUIHRhYmxlIGlzIGNvcnJ1cHQsIGJ1dCB0aGUgYmFja3VwIGFwcGVhcnMgT0ssIHNvIHRoYXQgd2lsbCBiZSAiCisidXNlZC4iCittc2dzdHIgIiIKKyJHs/N3bmEgdGFibGljYSBHUFQgamVzdCB1c3prb2R6b25hLCBhbGUgamVqIGtvcGlhIHphcGFzb3dhIHd5ZGFqZSBzaeogYnnmIHcgIgorInBvcnqxZGt1IGkgem9zdGFuaWUgb25hIHW/eXRhLiIKKworIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzo4NzAKK21zZ2lkICIiCisiQm90aCB0aGUgcHJpbWFyeSBhbmQgYmFja3VwIEdQVCB0YWJsZXMgYXJlIGNvcnJ1cHQuICBUcnkgbWFraW5nIGEgZnJlc2ggIgorInRhYmxlLCBhbmQgdXNpbmcgUGFydGVkJ3MgcmVzY3VlIGZlYXR1cmUgdG8gcmVjb3ZlciBwYXJ0aXRpb25zLiIKK21zZ3N0ciAiIgorIk9iaWUgdGFibGljZSBHUFQsIGez83duYSBpIGplaiBrb3BpYSB6YXBhc293YSwgc7EgdXN6a29kem9uZS4gIFNwcvNidWogIgorInV0d29yennmIG5vd7EgdGFibGlj6iBvcmF6IHW/eWogb3BjauogJ3Jlc2N1ZScsIGFieSBvZHp5c2th5iBwYXJ0eWNqZS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6MTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgc2lnbmF0dXJlICV4IGZvciBNYWMgZGlzayBsYWJlbHMuIgorbXNnc3RyICJOaWVwcmF3aWSzb3d5IHBvZHBpcyAleCBkbGEgZXR5a2lldCBkeXNr83cgTWFjLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoyMjYKK21zZ2lkICJQYXJ0aXRpb24gbWFwIGhhcyBubyBwYXJ0aXRpb24gbWFwIGVudHJ5ISIKK21zZ3N0ciAiTWFwYSBwYXJ0eWNqaSBuaWUgcG9zaWFkYSB3cGlzdSBtYXB5IHBhcnR5Y2ppISIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgdG9vIHNtYWxsIGZvciBhIE1hYyBkaXNrIGxhYmVsISIKK21zZ3N0ciAiJXMgamVzdCB6Ynl0IG1hs3kgZGxhIGV0eWtpZXR5IGR5c2t1IE1hYyEiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIlBhcnRpdGlvbiAlZCBoYXMgYW4gaW52YWxpZCBzaWduYXR1cmUgJXguIgorbXNnc3RyICJQYXJ0eWNqYSAlZCBwb3NpYWRhIG5pZXByYXdpZLNvd3kgcG9kcGlzICV4LiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGFydGl0aW9uICVkIGhhcyBhbiBpbnZhbGlkIGxlbmd0aCBvZiAwIGJ5dGVzISIKK21zZ3N0ciAiUGFydHljamEgJWQgcG9zaWFkYSBuaWVwcmF3aWSzb3exIGSzdWdvtuYgMCBiYWp083chIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjU4MAorbXNnaWQgIlRoZSBkYXRhIHJlZ2lvbiBkb2Vzbid0IHN0YXJ0IGF0IHRoZSBzdGFydCBvZiB0aGUgcGFydGl0aW9uLiIKK21zZ3N0ciAiT2JzemFyIGRhbnljaCBuaWUgcm96cG9jenluYSBzaeogbmEgcG9jerF0a3UgcGFydHljamkuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjU5NworbXNnaWQgIlRoZSBib290IHJlZ2lvbiBkb2Vzbid0IHN0YXJ0IGF0IHRoZSBzdGFydCBvZiB0aGUgcGFydGl0aW9uLiIKK21zZ3N0ciAiT2JzemFyIHJvenJ1Y2hvd3kgbmllIHphY3p5bmEgc2nqIG5hIHBvY3qxdGt1IHBhcnR5Y2ppLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo2MTEKK21zZ2lkICJUaGUgcGFydGl0aW9uJ3MgYm9vdCByZWdpb24gZG9lc24ndCBvY2N1cHkgdGhlIGVudGlyZSBwYXJ0aXRpb24uIgorbXNnc3RyICJPYnN6YXIgcm96cnVjaG93eSBwYXJ0eWNqaSBuaWUgb2t1cHVqZSBjYbNlaiBwYXJ0eWNqaS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NjIyCittc2dpZCAiVGhlIHBhcnRpdGlvbidzIGRhdGEgcmVnaW9uIGRvZXNuJ3Qgb2NjdXB5IHRoZSBlbnRpcmUgcGFydGl0aW9uLiIKK21zZ3N0ciAiT2JzemFyIGRhbnljaCBwYXJ0eWNqaSBuaWUgb2t1cHVqZSBjYbNlaiBwYXJ0eWNqaS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6Njc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXZWlyZCBibG9jayBzaXplIG9uIGRldmljZSBkZXNjcmlwdG9yOiAlZCBieXRlcyBpcyBub3QgZGl2aXNpYmxlIGJ5IDUxMi4iCittc2dzdHIgIiIKKyJEeml3bnkgcm96bWlhciBibG9rdSB3IGRlc2tyeXB0b3J6ZSB1cnqxZHplbmlhOiAlZCBiYWp083cgbmllIGplc3QgcG9kemllbG5lICIKKyJwcnpleiA1MTIuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjY4OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGRyaXZlciBkZXNjcmlwdG9yIHNheXMgdGhlIHBoeXNpY2FsIGJsb2NrIHNpemUgaXMgJWQgYnl0ZXMsIGJ1dCBMaW51eCAiCisic2F5cyBpdCBpcyAlZCBieXRlcy4iCittc2dzdHIgIiIKKyJEZXNrcnlwdG9yIG5hcOpkdSBt83dpLCC/ZSBmaXp5Y3pueSByb3ptaWFyIGJsb2t1IHd5bm9zaSAlZCBiYWp083csIGFsZSAiCisiTGludXggbfN3aSwgv2Ugd3lub3NpICVkIGJhanTzdy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NzM2Cittc2dpZCAiTm8gdmFsaWQgcGFydGl0aW9uIG1hcCBmb3VuZC4iCittc2dzdHIgIk5pZSB6bmFsZXppb25vIHByYXdpZLNvd2VqIG1hcHkgcGFydHljamkuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjc5NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ29uZmxpY3RpbmcgcGFydGl0aW9uIG1hcCBlbnRyeSBzaXplcyEgIEVudHJ5IDEgc2F5cyBpdCBpcyAlZCwgYnV0IGVudHJ5ICVkICIKKyJzYXlzIGl0IGlzICVkISIKK21zZ3N0ciAiIgorIld5c3SxcGmzIGtvbmZsaWt0IG1p6mR6eSByb3ptaWFyYW1pIHdwaXPzdyBtYXB5IHBhcnR5Y2ppISAgV3BpcyAxIG3zd2ksIL9lICIKKyJqZXN0ICVkLCBhbGUgd3BpcyAlZCBt83dpLCC/ZSBqZXN0ICVkISIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo4MjIKK21zZ2lkICJXZWlyZCEgIFRoZXJlIGFyZSAyIHBhcnRpdGlvbnMgbWFwIGVudHJpZXMhIgorbXNnc3RyICJEeml3bmUhICBJc3RuaWVqsSAyIHdwaXN5IG1hcCBwYXJ0eWNqaSEiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6MTM0NworbXNnaWQgIiIKKyJDaGFuZ2luZyB0aGUgbmFtZSBvZiBhIHJvb3Qgb3Igc3dhcCBwYXJ0aXRpb24gd2lsbCBwcmV2ZW50IExpbnV4IGZyb20gIgorInJlY29nbmlzaW5nIGl0IGFzIHN1Y2guIgorbXNnc3RyICIiCisiWm1pYW5hIG5hend5IHBhcnR5Y2ppIHJvb3QgbHViIHd5bWlhbnkgc3Bvd29kdWplLCC/ZSBMaW51eCBqZWogbmllIHJvenBvem5hLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoxNDQzCittc2dpZCAiQ2FuJ3QgYWRkIGFub3RoZXIgcGFydGl0aW9uIC0tIHRoZSBwYXJ0aXRpb24gbWFwIGlzIHRvbyBzbWFsbCEiCittc2dzdHIgIk5pZSBtb79uYSBkb2Rh5iBrb2xlam5laiBwYXJ0eWNqaSAtLSBtYXBhIHBhcnR5Y2ppIGplc3QgemJ5dCBtYbNhISIKKworIzogbGlicGFydGVkL2xhYmVscy9wYzk4LmM6MzU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcGFydGl0aW9uIHRhYmxlIG9uICVzLiIKK21zZ3N0ciAiTmllcHJhd2lks293YSB0YWJsaWNhIHBhcnR5Y2ppIG5hICVzLiIKKworIzogbGlicGFydGVkL2xhYmVscy9wYzk4LmM6NDA2IGxpYnBhcnRlZC9sYWJlbHMvcGM5OC5jOjQ4NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGFydGl0aW9uICVkIGlzbid0IGFsaWduZWQgdG8gY3lsaW5kZXIgYm91bmRhcmllcy4gIFRoaXMgaXMgc3RpbGwgIgorInVuc3VwcG9ydGVkLiIKK21zZ3N0ciAiIgorIlBhcnR5Y2phICVkIG5pZSBqZXN0IHd5cvN3bmFuYSBkbyBncmFuaWMgY3lsaW5kcmEuICBOYWRhbCBuaWUgamVzdCB0byAiCisid3NwaWVyYW5lLiIKKworIzogbGlicGFydGVkL2xhYmVscy9wYzk4LmM6NzkxCittc2dpZCAiQ2FuJ3QgYWRkIGFub3RoZXIgcGFydGl0aW9uLiIKK21zZ3N0ciAiTmllIG1vv25hIGRvZGHmIGtvbGVqbmVqIHBhcnR5Y2ppLiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzoxNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBCYWQgY2hlY2tzdW0gb24gYmxvY2sgJWxsdSBvZiB0eXBlICVzLiIKK21zZ3N0ciAiJXMgOiBOaWVwcmF3aWSzb3dhIHN1bWEga29udHJvbG5hIGJsb2t1ICVsbHUgdHlwdSAlcy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6NDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRGlkbid0IGZpbmQgcmRiIGJsb2NrLCBzaG91bGQgbmV2ZXIgaGFwcGVuLiIKK21zZ3N0ciAiJXMgOiBOaWUgem5hbGV6aW9ubyBibG9rdSByZGIsIGNvIG5pZSBwb3dpbm5vIHNp6iB6ZGFyennmLiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo1ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBMb29wIGRldGVjdGVkIGF0IGJsb2NrICVkLiIKK21zZ3N0ciAiJXMgOiBXeWtyeXRvIHDqdGzqIG5hIGJsb2t1ICVkLiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo2MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBUaGUgJXMgbGlzdCBzZWVtcyBiYWQgYXQgYmxvY2sgJXMuIgorbXNnc3RyICIlcyA6IExpc3RhICVzIHd5ZGFqZSBzaeogYnnmIHVzemtvZHpvbmEgbmEgYmxva3UgJXMuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjY4OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBsaXN0IGJhZCBibG9ja3MuIgorbXNnc3RyICIlcyA6IE5pZSBwb3dpb2SzbyBzaeogd3lwaXNhbmllIHVzemtvZHpvbnljaCBibG9r83cuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjY5NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBsaXN0IHBhcnRpdGlvbiBibG9ja3MuIgorbXNnc3RyICIlcyA6IFd5cGlzYW5pZSBibG9r83cgcGFydHljamkgbmllIHBvd2lvZLNvIHNp6i4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6NzA1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGxpc3QgZmlsZSBzeXN0ZW0gYmxvY2tzLiIKK21zZ3N0ciAiJXMgOiBXeXBpc2FuaWUgYmxva/N3IHN5c3RlbXUgcGxpa/N3IG5pZSBwb3dpb2SzbyBzaeouIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjcxMworIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBsaXN0IGJvb3QgYmxvY2tzLiIKK21zZ3N0ciAiJXMgOiBOaWUgcG93aW9ks28gc2nqIHd5cGlzYW5pZSBibG9r83cgcm96cnVjaG93eWNoLiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo3NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHdyaXRlIHBhcnRpdGlvbiBibG9jayBhdCAlZC4iCittc2dzdHIgIk5pZSBwb3dp82SzIHNp6iB6YXBpcyBibG9rdSBwYXJ0eWNqaSBuYSAlZC4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6MTA2OQorbXNnaWQgIlVuYWJsZSB0byBhbGxvY2F0ZSBhIHBhcnRpdGlvbiBudW1iZXIuIgorbXNnc3RyICJOaWUgbW+/bmEgcHJ6eWR6aWVsaeYgbnVtZXJ1IHBhcnR5Y2ppLiIKKworIzogbGlicGFydGVkL2xhYmVscy9zdW4uYzoxNDUKK21zZ2lkICJDb3JydXB0ZWQgU3VuIGRpc2sgbGFiZWwgZGV0ZWN0ZWQuIgorbXNnc3RyICJXeWtyeXRvIHVzemtvZHpvbrEgZXR5a2lldOogZHlza3UgU3VuLiIKKworIzogbGlicGFydGVkL2xhYmVscy9zdW4uYzoyNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBkaXNrIENIUyBnZW9tZXRyeSAoJWQsJWQsJWQpIHJlcG9ydGVkIGJ5IHRoZSBvcGVyYXRpbmcgc3lzdGVtIGRvZXMgbm90ICIKKyJtYXRjaCB0aGUgZ2VvbWV0cnkgc3RvcmVkIG9uIHRoZSBkaXNrIGxhYmVsICglZCwlZCwlZCkuIgorbXNnc3RyICIiCisiR2VvbWV0cmlhIGR5c2t1IENIUyAoJWQsJWQsJWQpLCB6Z7Nvc3pvbmEgcHJ6ZXogc3lzdGVtIG9wZXJhY3lqbnksIG5pZSAiCisicGFzdWplIGRvIGdlb21ldHJpaSBwcnplY2hvd3l3YW5laiB3IGV0eWtpZWNpZSBkeXNrdSAoJWQsJWQsJWQpLiIKKworIzogbGlicGFydGVkL2xhYmVscy9zdW4uYzoyODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGRpc2sgbGFiZWwgZGVzY3JpYmVzIGEgZGlzayBiaWdnZXIgdGhhbiAlcy4iCittc2dzdHIgIkV0eWtpZXRhIGR5c2t1IG9waXN1amUgZHlzayB3aeprc3p5IG5pvyAlcy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6NDQyCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBkaXNrIGhhcyAlZCBjeWxpbmRlcnMsIHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbWF4aW11bSBvZiA2NTUzNi4iCittc2dzdHIgIiIKKyJEeXNrIHBvc2lhZGEgJWQgY3lsaW5kcvN3LCBjbyBzdGFub3dpIHdp6mNlaiBuab8gZG9wdXN6Y3phbG55IGxpbWl0IDY1NTM2LiIKKworIzogbGlicGFydGVkL2xhYmVscy9zdW4uYzo3MzcKK21zZ2lkICIiCisiVGhlIFdob2xlIERpc2sgcGFydGl0aW9uIGlzIHRoZSBvbmx5IGF2YWlsYWJsZSBvbmUgbGVmdC4gIEdlbmVyYWxseSwgaXQgaXMgIgorIm5vdCBhIGdvb2QgaWRlYSB0byBvdmVyd3JpdGUgdGhpcyBwYXJ0aXRpb24gd2l0aCBhIHJlYWwgb25lLiAgU29sYXJpcyBtYXkgIgorIm5vdCBiZSBhYmxlIHRvIGJvb3Qgd2l0aG91dCBpdCwgYW5kIFNJTE8gKHRoZSBzcGFyYyBib290IGxvYWRlcikgYXBwcmVjaWF0ZXMgIgorIml0IGFzIHdlbGwuIgorbXNnc3RyICIiCisiUGFydHljamEgY2GzZWdvIGR5c2t1IGplc3QgamVkeW6xIGpha2EgcG96b3N0YbNhLiAgR2VuZXJhbG5pZSBuaWUgamVzdCB0byAiCisiZG9icnkgcG9teXOzLCBhYnkgarEgbmFkcGlzYeYgaW5usSwgcHJhd2R6aXexLiAgU3lzdGVtIFNvbGFyaXMgbW+/ZSBzaeogYmV6ICIKKyJuaWVqIG5pZSB1cnVjaG9taeYsIHphtiBTSUxPIChwcm9ncmFtILNhZHVqsWN5IFNQQVJDKSBy83duaWW/IGqxIGRvY2VuaS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6NzUyCittc2dpZCAiU3VuIGRpc2sgbGFiZWwgaXMgZnVsbC4iCittc2dzdHIgIkV0eWtpZXRhIGR5c2t1IFN1biBqZXN0IHBls25hLiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6MTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBvcGVuaW5nIGRldmljZSAnJXMnIGZhaWxlZC5cbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjE2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgc2Vla2luZyBkZXZpY2UgJyVzJyBmYWlsZWQuXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzoxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHdyaXRpbmcgdG8gZGV2aWNlICclcycgZmFpbGVkLFxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6MTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyByZWFkaW5nIGZyb20gZGV2aWNlICclcycgZmFpbGVkLlxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6MTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhdGFsIGVycm9yXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDE4Cittc2dpZCAiQ291bGQgbm90IHJlYWQgVlRPQyBsYWJlbHMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQyNAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIFZUT0MgRk1UMSBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0MzEKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBWVE9DIEZNVDQgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDM4Cittc2dpZCAiQ291bGQgbm90IHJlYWQgVlRPQyBGTVQ1IERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQ0NQorbXNnaWQgIkNvdWxkIG5vdCByZWFkIFZUT0MgRk1UNyBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0NjIKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgVlRPQyBsYWJlbHMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQ2OAorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBWVE9DIEZNVDEgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDc1Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIFZUT0MgRk1UNCBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0ODIKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgVlRPQyBGTVQ1IERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQ4OQorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBWVE9DIEZNVDcgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xpYnBhcnRlZC5jOjI5NiBsaWJwYXJ0ZWQvbGlicGFydGVkLmM6MzE2Cittc2dpZCAiT3V0IG9mIG1lbW9yeS4iCittc2dzdHIgIkJyYWsgcGFtaepjaSIKKworIzogbGlicGFydGVkL3VuaXQuYzoxMzkKK21zZ2lkICJDYW5ub3QgZ2V0IHVuaXQgc2l6ZSBmb3Igc3BlY2lhbCB1bml0ICdDT01QQUNUJy4iCittc2dzdHIgIiIKKyJOaWUgbW+/bmEgcG9icmHmIHJvem1pYXJ1IGplZG5vc3RraSBkbGEgc3BlY2phbG5laiBqZWRub3N0a2kgJ0NPTVBBQ1QnLiIKKworIzogbGlicGFydGVkL3VuaXQuYzozODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiXCIlc1wiIGhhcyBpbnZhbGlkIHN5bnRheCBmb3IgbG9jYXRpb25zLiIKK21zZ3N0ciAiXCIlc1wiIHBvc2lhZGEgbmllcHJhd2lks293sSBza7NhZG5p6iBkbGEgbG9rYWNqaS4iCisKKyM6IGxpYnBhcnRlZC91bml0LmM6Mzk0CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBtYXhpbXVtIGhlYWQgdmFsdWUgaXMgJWQuIgorbXNnc3RyICJNYWtzeW1hbG5hIHdhcnRvtuYgZ7Nvd2ljeSB3eW5vc2kgJWQuIgorCisjOiBsaWJwYXJ0ZWQvdW5pdC5jOjQwMQorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgbWF4aW11bSBzZWN0b3IgdmFsdWUgaXMgJWQuIgorbXNnc3RyICJNYWtzeW1hbG5hIHdhcnRvtuYgc2VrdG9yYSB3eW5vc2kgJWQuIgorCisjOiBsaWJwYXJ0ZWQvdW5pdC5jOjQxMyBsaWJwYXJ0ZWQvdW5pdC5jOjU0NQorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgbG9jYXRpb24gJXMgaXMgb3V0c2lkZSBvZiB0aGUgZGV2aWNlICVzLiIKK21zZ3N0ciAiTG9rYWNqYSAlcyBqZXN0IHBvemEgdXJ6sWR6ZW5pZW0gJXMuIgorCisjOiBsaWJwYXJ0ZWQvdW5pdC5jOjUyNworbXNnaWQgIkludmFsaWQgbnVtYmVyLiIKK21zZ3N0ciAiTmllcHJhd2lks293eSBudW1lci4iCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hZmZzLmM6NjMgbGlicGFydGVkL2ZzL2FtaWdhL2FwZnMuYzo1NgorIzogbGlicGFydGVkL2ZzL2FtaWdhL2FzZnMuYzo3MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gYWxsb2NhdGUgcGFydGl0aW9uIGJsb2NrXG4iCittc2dzdHIgIiVzIDogV3lwaXNhbmllIGJsb2vzdyBwYXJ0eWNqaSBuaWUgcG93aW9ks28gc2nqLiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FmZnMuYzo3OCBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXBmcy5jOjcwCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXNmcy5jOjg2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBhbGxvY2F0ZSBibG9ja1xuIgorbXNnc3RyICIlcyA6IE5pZSBwb3dpb2SzbyBzaeogd3lwaXNhbmllIGJsb2vzdyByb3pydWNob3d5Y2guIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYWZmcy5jOjgzIGxpYnBhcnRlZC9mcy9hbWlnYS9hcGZzLmM6NzUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogQ291bGRuJ3QgcmVhZCBib290IGJsb2NrICVsbHVcbiIKK21zZ3N0ciAiJXMgOiBXeWtyeXRvIHDqdGzqIG5hIGJsb2t1ICVkLiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FmZnMuYzo5OSBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXBmcy5jOjg2CisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXNmcy5jOjkyIGxpYnBhcnRlZC9mcy9hbWlnYS9hc2ZzLmM6MTA2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyA6IENvdWxkbid0IHJlYWQgcm9vdCBibG9jayAlbGx1XG4iCittc2dzdHIgIiVzIDogV3lrcnl0byBw6nRs6iBuYSBibG9rdSAlZC4iCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jOjcyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBhbGxvY2F0ZSBpZCBsaXN0IGVsZW1lbnRcbiIKK21zZ3N0ciAiJXMgOiBOaWUgcG93aW9ks28gc2nqIHd5cGlzYW5pZSB1c3prb2R6b255Y2ggYmxva/N3LiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogQ291bGRuJ3QgcmVhZCBibG9jayAlbGx1XG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6MjAyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEJhZCBjaGVja3N1bSBvbiBibG9jayAlbGx1IG9mIHR5cGUgJXNcbiIKK21zZ3N0ciAiJXMgOiBOaWVwcmF3aWSzb3dhIHN1bWEga29udHJvbG5hIGJsb2t1ICVsbHUgdHlwdSAlcy4iCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jOjIxMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBDb3VsZG4ndCB3cml0ZSBibG9jayAlZFxuIgorbXNnc3RyICIlcyA6IFd5a3J5dG8gcOp0bOogbmEgYmxva3UgJWQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzoyNzgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGFsbG9jYXRlIGRpc2tfc3BlY2lmaWMgcmRiIGJsb2NrXG4iCittc2dzdHIgIiVzIDogTmllIHBvd2lvZLNvIHNp6iB3eXBpc2FuaWUgdXN6a29kem9ueWNoIGJsb2vzdy4iCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jOjI4OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBEaWRuJ3QgZmluZCByZGIgYmxvY2ssIHNob3VsZCBuZXZlciBoYXBwZW5cbiIKK21zZ3N0ciAiJXMgOiBOaWUgem5hbGV6aW9ubyBibG9rdSByZGIsIGNvIG5pZSBwb3dpbm5vIHNp6iB6ZGFyennmLiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6MzE4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byByZWFkIHBhcnRpdGlvbiBibG9jayAlbGx1XG4iCittc2dzdHIgIiVzIDogV3lwaXNhbmllIGJsb2vzdyBwYXJ0eWNqaSBuaWUgcG93aW9ks28gc2nqLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjg3IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzoxMTIKK21zZ2lkICJJbmNvbnNpc3RlbnQgZ3JvdXAgZGVzY3JpcHRvcnMhIgorbXNnc3RyICJTcHJ6ZWN6bmUgZGVza3J5cHRvcnkgZ3J1cCEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo5MSBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6MTE2Cittc2dpZCAiRmlsZSBzeXN0ZW0gZnVsbCEiCittc2dzdHIgIlBls255IHN5c3RlbSBwbGlr83chIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6Njg2Cittc2dpZCAiSW52YWxpZCBzdXBlcmJsb2NrLiAgQXJlIHlvdSBzdXJlIHRoaXMgaXMgYW4gZXh0MiBmaWxlIHN5c3RlbT8iCittc2dzdHIgIk5pZXByYXdpZLNvd3kgc3VwZXJibG9rLiAgQ3p5IHRvIG5hIHBld25vIGplc3Qgc3lzdGVtIHBsaWvzdyBleHQyPyIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjcwMCBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjY1OAorbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyBlcnJvcnMhICBZb3Ugc2hvdWxkIHJ1biBlMmZzY2suIgorbXNnc3RyICJTeXN0ZW0gcGxpa/N3IHBvc2lhZGEgYrPqZHkhICBVcnVjaG9tIHByb2dyYW0gZTJmc2NrLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjcxMQorbXNnaWQgIiIKKyJGaWxlIHN5c3RlbSB3YXMgbm90IGNsZWFubHkgdW5tb3VudGVkISAgWW91IHNob3VsZCBydW4gZTJmc2NrLiAgTW9kaWZ5aW5nIGFuICIKKyJ1bmNsZWFuIGZpbGUgc3lzdGVtIGNvdWxkIGNhdXNlIHNldmVyZSBjb3JydXB0aW9uLiIKK21zZ3N0ciAiIgorIlN5c3RlbSBwbGlr83cgbmllIHpvc3RhsyBwcmF3aWSzb3dvIG9ks7Fjem9ueSEgIFVydWNob20gcHJvZ3JhbSBlMmZzY2suICIKKyJNb2R5Zmlrb3dhbmllIHRha2llZ28gc3lzdGVtdSBwbGlr83cgbW+/ZSBzcG93b2Rvd2HmIGplZ28gdXN6a29kemVuaWUuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6NzMxCittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGluY29tcGF0aWJsZSBmZWF0dXJlIGVuYWJsZWQuIgorbXNnc3RyICJTeXN0ZW0gcGxpa/N3IG1hIHezsWN6b26xIG5pZWtvbXBhdHliaWxusSBmdW5rY2rqLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjc0MgorbXNnaWQgIkVycm9yIGFsbG9jYXRpbmcgYnVmZmVyIGNhY2hlLiIKK21zZ3N0ciAiQrOxZCBwb2RjemFzIHByenlkemllbGFuaWEgcGFtaepjaSBkbyBidWZvcmEgcG9kcupjem5lZ28uIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2lub2RlX3JlbG9jYXRvci5jOjExNAorbXNnaWQgIiIKKyJGb3VuZCBhbiBpbm9kZSB3aXRoIGEgaW5jb3JyZWN0IGxpbmsgY291bnQuICBCZXR0ZXIgZ28gcnVuIGUyZnNjayBmaXJzdCEiCittc2dzdHIgIiIKKyJabmFsZXppb25vIGktd+p6ZbMgeiBuaWVwcmF3aWSzb3d5bSBsaWN6bmlraWVtIGRvd2mxemHxLiAgTGVwaWVqIHVydWNob20gIgorIm5hanBpZXJ3IHByb2dyYW0gZTJmc2NrISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9pbm9kZV9yZWxvY2F0b3IuYzo0ODcKK21zZ2lkICJOb3QgZW5vdWdoIGZyZWUgaW5vZGVzISIKK21zZ3N0ciAiWmJ5dCBtYbNvIHdvbG55Y2ggaS136nqz83chIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjIyMworbXNnaWQgIkZpbGUgc3lzdGVtIGlzIHRvbyBmdWxsIHRvIHJlbW92ZSBhIGdyb3VwISIKK21zZ3N0ciAiU3lzdGVtIHBsaWvzdyBqZXN0IHpieXQgcGWzbnksIGFieSB1c3VuseYgZ3J1cOohIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjIzMgorbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyB0b28gbWFueSBhbGxvY2F0ZWQgaW5vZGVzIHRvIHJlbW92ZSBhIGdyb3VwISIKK21zZ3N0ciAiIgorIlN5c3RlbSBwbGlr83cgcG9zaWFkYSB6Ynl0IGR1v28gcHJ6eWR6aWVsb255Y2ggaS136nqz83csIGFieSB1c3VuseYgZ3J1cOohIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjQ5MQorbXNnaWQgImFkZGluZyBncm91cHMiCittc2dzdHIgImRvZGF3YW5pZSBncnVwIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjUyOAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGZpbGUgc3lzdGVtIGlzIHRvbyBmdWxsIHRvIHJlc2l6ZSBpdCB0byAlaSBibG9ja3MuICBTb3JyeS4iCittc2dzdHIgIiIKKyJUd/NqIHN5c3RlbSBwbGlr83cgamVzdCB6Ynl0IHBls255LCBhYnkgbfNjIHptaWVuaeYgamVnbyByb3ptaWFyIGRvICVpICIKKyJibG9r83cuICBQcnp5a3JvIG1pLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo1MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgZmlsZSBzeXN0ZW0gaGFzIHRvbyBtYW55IG9jY3VwaWVkIGlub2RlcyB0byByZXNpemUgaXQgdG8gJWkgYmxvY2tzLiAgIgorIlNvcnJ5LiIKK21zZ3N0ciAiIgorIlR382ogc3lzdGVtIHBsaWvzdyBwb3NpYWRhIHpieXQgZHW/byB6YWrqdHljaCBpLXfqerPzdywgYWJ5IG3zYyB6bWllbmnmIGplZ28gIgorInJvem1pYXIgZG8gJWkgYmxva/N3LiAgUHJ6eWtybyBtaS4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NjY2Cittc2dpZCAiRmlsZSBzeXN0ZW0gd2FzIG5vdCBjbGVhbmx5IHVubW91bnRlZCEgIFlvdSBzaG91bGQgcnVuIGUyZnNjay4iCittc2dzdHIgIiIKKyJTeXN0ZW0gcGxpa/N3IG5pZSB6b3N0YbMgcHJhd2lks293byBvZLOxY3pvbnkhICBVcnVjaG9tIHByb2dyYW0gZTJmc2NrLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo2NzUKK21zZ2lkICIiCisiVGhlIGZpbGUgc3lzdGVtIGhhcyB0aGUgJ2Rpcl9pbmRleCcgZmVhdHVyZSBlbmFibGVkLiAgUGFydGVkIGNhbiBvbmx5IHJlc2l6ZSAiCisidGhlIGZpbGUgc3lzdGVtIGlmIGl0IGRpc2FibGVzIHRoaXMgZmVhdHVyZS4gIFlvdSBjYW4gZW5hYmxlIGl0IGxhdGVyIGJ5ICIKKyJydW5uaW5nICd0dW5lMmZzIC1PIGRpcl9pbmRleCBERVZJQ0UnIGFuZCB0aGVuICdlMmZzY2sgLWZEIERFVklDRScuIgorbXNnc3RyICIiCisiU3lzdGVtIHBsaWvzdyBwb3NpYWRhIHezsWN6b26xIGZ1bmtjauogJ2Rpcl9pbmRleCcuICBQYXJ0ZWQgbW+/ZSB6bWllbmnmICIKKyJyb3ptaWFyIHN5c3RlbXUgcGxpa/N3IHR5bGtvIGpltmxpIHpvc3RhbmllIHd5s7Fjem9uYSB0YSBmdW5rY2phLiAgTW+/ZXN6IGqxICIKKyJ3s7FjennmIHBvbm93bmllIHDzvG5pZWogcG9wcnpleiB1cnVjaG9taWVuaWUgJ3R1bmUyZnMgLU8gZGlyX2luZGV4ICIKKyJVUlqhRFpFTklFJywgYSBuYXN06nBuaWUgJ2UyZnNjayAtZkQgVVJaoURaRU5JRScuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjY5MQorbXNnaWQgIiIKKyJBIHJlc2l6ZSBvcGVyYXRpb24gb24gdGhpcyBmaWxlIHN5c3RlbSB3aWxsIHVzZSBFWFBFUklNRU5UQUwgY29kZVxuIgorInRoYXQgTUFZIENPUlJVUFQgaXQgKGFsdGhvdWdoIG5vIG9uZSBoYXMgcmVwb3J0ZWQgYW55IHN1Y2ggZGFtYWdlIHlldCkuXG4iCisiWW91IHNob3VsZCBhdCBsZWFzdCBiYWNrdXAgeW91ciBkYXRhIGZpcnN0LCBhbmQgcnVuICdlMmZzY2sgLWYnIGFmdGVyd2FyZHMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfYmxvY2tfcmVsb2NhdG9yLmM6MTk4Cittc2dpZCAiQ3Jvc3MtbGlua2VkIGJsb2NrcyBmb3VuZCEgIEJldHRlciBnbyBydW4gZTJmc2NrIGZpcnN0ISIKK21zZ3N0ciAiIgorIlpuYWxlemlvbm8gYmxva2kgZG93abF6YW5lIHNrcm+2bmllISBMZXBpZWogdXJ1Y2hvbSBuYWpwaWVydyBwcm9ncmFtIGUyZnNjayEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfYmxvY2tfcmVsb2NhdG9yLmM6NTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrICVpIGhhcyBubyByZWZlcmVuY2U/ICBXZWlyZC4iCittc2dzdHIgIkJsb2sgJWkgbmllIHBvc2lhZGEgb2R3b7Nh8T8gIER6aXduZS4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfYmxvY2tfcmVsb2NhdG9yLmM6NzM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrICVpIHNob3VsZG4ndCBoYXZlIGJlZW4gbWFya2VkICglZCwgJWQpISIKK21zZ3N0ciAiQmxvayAlaSBuaWUgcG93aW5pZW4gYnnmIHphem5hY3pvbnkgKCVkLCAlZCkhIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9pbnRlcmZhY2UuYzoxODYKK21zZ2lkICIiCisiVGhlIGV4dDIgZmlsZSBzeXN0ZW0gcGFzc2VkIGEgYmFzaWMgY2hlY2suICBGb3IgYSBtb3JlIGNvbXByZWhlbnNpdmUgY2hlY2ssICIKKyJ1c2UgdGhlIGUyZnNjayBwcm9ncmFtLiIKK21zZ3N0ciAiIgorIlN5c3RlbSBwbGlr83cgZXh0MiBwcnplc3plZLMgcG9tebZsbmllIHBvZHN0YXdvd2Ugc3ByYXdkemVuaWUuICBVv3lqIHByb2dyYW0gIgorImUyZnNjaywgYWJ5IHd5a29uYeYgYmFyZHppZWogd3ljemVycHVqsWNlIHNwcmF3ZHplbmllLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvaW50ZXJmYWNlLmM6MjAzCittc2dpZCAiU29ycnksIGNhbid0IG1vdmUgdGhlIHN0YXJ0IG9mIGV4dDIgcGFydGl0aW9ucyB5ZXQhIgorbXNnc3RyICJQcnplcHJhc3phbSwgYWxlIG5hIHJhemllIG5pZSBtb79uYSBwcnplc3VuseYgcG9jerF0a3UgcGFydHljamkgZXh0MiEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfYnVmZmVyLmM6ODIKK21zZ2lkICJDb3VsZG4ndCBmbHVzaCBidWZmZXIgY2FjaGUhIgorbXNnc3RyICJOaWUgbW+/bmEgb3By879uaeYgYnVmb3JhIHBhbWnqY2kgcG9kcupjem5laiEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfbWtmcy5jOjE2MgorbXNnaWQgIndyaXRpbmcgcGVyLWdyb3VwIG1ldGFkYXRhIgorbXNnc3RyICJ6YXBpcyBtZXRhZGFueWNoIGRvIGdydXAiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfbWtmcy5jOjU2NAorbXNnaWQgIkZpbGUgc3lzdGVtIHRvbyBzbWFsbCBmb3IgZXh0Mi4iCittc2dzdHIgIlN5c3RlbSBwbGlr83cgamVzdCB6Ynl0IG1hs3kgZGxhIGV4dDIuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NhbGMuYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBuZWVkICVzIG9mIGZyZWUgZGlzayBzcGFjZSB0byBzaHJpbmsgdGhpcyBwYXJ0aXRpb24gdG8gdGhpcyBzaXplLiAgIgorIkN1cnJlbnRseSwgb25seSAlcyBpcyBmcmVlLiIKK21zZ3N0ciAiIgorIlBvdHJ6ZWJ1amVzeiAlcyB3b2xuZWogcHJ6ZXN0cnplbmksIGFieSB6bW5pZWpzennmIHBhcnR5Y2rqIGRvIHRlZ28gIgorInJvem1pYXJ1LiAgQWt0dWFsbmllLCB0eWxrbyAlcyBqZXN0IHdvbG5lLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb250ZXh0LmM6NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNsdXN0ZXIgc3RhcnQgZGVsdGEgPSAlZCwgd2hpY2ggaXMgbm90IGEgbXVsdGlwbGUgb2YgdGhlIGNsdXN0ZXIgc2l6ZSAlZC4iCittc2dzdHIgIiIKKyJQb2N6sXRlayBrbGFzdHJhIGRlbHRhID0gJWQsIGEgd2nqYyBuaWUgamVzdCB0byB3aWVsb2tyb3Rub7bmIHJvem1pYXJ1ICIKKyJrbGFzdHJhICVkLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9mYXQuYzozMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGFydGl0aW9uIHRvbyBiaWcvc21hbGwgZm9yIGEgJXMgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICJQYXJ0eWNqYSBqZXN0IHpieXQgZHW/YS9tYbNhIGRsYSBzeXN0ZW11IHBsaWvzdyAlcy4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvZmF0LmM6NDc0Cittc2dpZCAiIgorIlRoZSBGQVRzIGRvbid0IG1hdGNoLiAgSWYgeW91IGRvbid0IGtub3cgd2hhdCB0aGlzIG1lYW5zLCB0aGVuIHNlbGVjdCAiCisiY2FuY2VsLCBydW4gc2NhbmRpc2sgb24gdGhlIGZpbGUgc3lzdGVtLCBhbmQgdGhlbiBjb21lIGJhY2suIgorbXNnc3RyICIiCisiVGFibGljZSBGQVQgbmllIHBhc3VqsS4gIEpltmxpIG5pZSB3aWVzeiBjbyB0byB6bmFjenksIHRvIHd5YmllcnogIgorIidQb25pZWNoYWonLCB1cnVjaG9tIHNjYW5kaXNrLCBhIHBvdGVtIHBvbvN3IHBy82LqLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9mYXQuYzo1MTQKK21zZ2lkICJUaGVyZSBhcmUgbm8gcG9zc2libGUgY29uZmlndXJhdGlvbnMgZm9yIHRoaXMgRkFUIHR5cGUuIgorbXNnc3RyICJOaWUgbWEgbW+/bGl3eWNoIGtvbmZpZ3VyYWNqaSBkbGEgdGVnbyB0eXB1IEZBVC4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvZmF0LmM6NTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGaWxlIHN5c3RlbSBkb2Vzbid0IGhhdmUgZXhwZWN0ZWQgc2l6ZXMgZm9yIFdpbmRvd3MgdG8gbGlrZSBpdC4gIENsdXN0ZXIgIgorInNpemUgaXMgJWRrICglZGsgZXhwZWN0ZWQpOyBudW1iZXIgb2YgY2x1c3RlcnMgaXMgJWQgKCVkIGV4cGVjdGVkKTsgc2l6ZSBvZiAiCisiRkFUcyBpcyAlZCBzZWN0b3JzICglZCBleHBlY3RlZCkuIgorbXNnc3RyICIiCisiU3lzdGVtIHBsaWvzdyBuaWUgcG9zaWFkYSByb3ptaWFydSBzcG9kemlld2FuZWdvIHByemV6IHN5c3RlbSBNUyBXaW5kb3dzLiAgIgorIlJvem1pYXIga2xhc3RyYSB3eW5vc2kgJWRrIChwb3dpbm5vIGJ55iAlZGspOyBpbG+25iBrbGFzdHLzdyB3eW5vc2kgJWQgIgorIihwb3dpbm5vIGJ55iAlZCk7IHJvem1pYXIgRkFUIHd5bm9zaSAlZCBzZWt0b3LzdyAocG93aW5ubyBieeYgJWQpLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9mYXQuYzo1NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZpbGUgc3lzdGVtIGlzIHJlcG9ydGluZyB0aGUgZnJlZSBzcGFjZSBhcyAlZCBjbHVzdGVycywgbm90ICVkIGNsdXN0ZXJzLiIKK21zZ3N0ciAiIgorIlN5c3RlbSBwbGlr83cgbfN3aSwgv2Ugd29sbmEgcHJ6ZXN0cnpl8SB3eW5vc2kgJWQga2xhc3Ry83csIGEgbmllICVkICIKKyJrbGFzdHLzdy4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvZmF0LmM6ODc0Cittc2dpZCAiIgorIkdOVSBQYXJ0ZWQgd2FzIG1pc2NvbXBpbGVkOiB0aGUgRkFUIGJvb3Qgc2VjdG9yIHNob3VsZCBiZSA1MTIgYnl0ZXMuICBGQVQgIgorInN1cHBvcnQgd2lsbCBiZSBkaXNhYmxlZC4iCittc2dzdHIgIiIKKyJQcm9ncmFtIEdOVSBQYXJ0ZWQgem9zdGGzIG5pZXByYXdpZLNvd28gemJ1ZG93YW55OiBzZWt0b3Igcm96cnVjaG93eSBGQVQgIgorInBvd2luaWVuIG1pZeYgNTEyIGJhanTzdy4gIFdzcGFyY2llIGRsYSBGQVQgem9zdGFqZSB3ebOxY3pvbmUuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjE1OQorbXNnaWQgIiIKKyJUaGVyZSdzIG5vdCBlbm91Z2ggcm9vbSBpbiB0aGUgcm9vdCBkaXJlY3RvcnkgZm9yIGFsbCBvZiB0aGUgZmlsZXMuICBFaXRoZXIgIgorImNhbmNlbCwgb3IgaWdub3JlIHRvIGxvc2UgdGhlIGZpbGVzLiIKK21zZ3N0ciAiIgorIkJyYWt1amUgbWllanNjYSB3IGthdGFsb2d1IHJvb3QgZGxhIHdzenlzdGtpY2ggdHljaCBwbGlr83cuICBQb25pZWNoYWogIgorIm9wZXJhY2rqIGx1YiB6aWdub3J1aiwgYWJ5IHV0cmFjaeYgcGxpa2kuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjMwMAorbXNnaWQgIkVycm9yIHdyaXRpbmcgdG8gdGhlIHJvb3QgZGlyZWN0b3J5LiIKK21zZ3N0ciAiQrOxZCBwb2RjemFzIHphcGlzdSBkbyBrYXRhbG9ndSBns/N3bmVnbyAocm9vdCkuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjQ4OQorbXNnaWQgIklmIHlvdSBsZWF2ZSB5b3VyIGZpbGUgc3lzdGVtIGFzIEZBVDE2LCB0aGVuIHlvdSB3aWxsIGhhdmUgbm8gcHJvYmxlbXMuIgorbXNnc3RyICIiCisiSmW2bGkgcG96b3N0YXdpc3ogc3fzaiBzeXN0ZW0gcGxpa/N3IGpha28gRkFUMTYsIHRvIG5pZSBi6mR6aWVzeiBtaWGzKGEpICIKKyK/YWRueWNoIHByb2JsZW3zdy4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NDkyCittc2dpZCAiIgorIklmIHlvdSBjb252ZXJ0IHRvIEZBVDE2LCBhbmQgTVMgV2luZG93cyBpcyBpbnN0YWxsZWQgb24gdGhpcyBwYXJ0aXRpb24sIHRoZW4gIgorInlvdSBtdXN0IHJlLWluc3RhbGwgdGhlIE1TIFdpbmRvd3MgYm9vdCBsb2FkZXIuICBJZiB5b3Ugd2FudCB0byBkbyB0aGlzLCB5b3UgIgorInNob3VsZCBjb25zdWx0IHRoZSBQYXJ0ZWQgbWFudWFsIChvciB5b3VyIGRpc3RyaWJ1dGlvbidzIG1hbnVhbCkuIgorbXNnc3RyICIiCisiSmW/ZWxpIGRva29uYXN6IGtvbndlcnNqaSBkbyBGQVQxNiBpIHN5c3RlbSBNUyBXaW5kb3dzIGplc3QgemFpbnN0YWxvd2FueSBuYSAiCisidGVqIHBhcnR5Y2ppLCB0byB3dGVkeSBtdXNpc3ogcHJ6ZWluc3RhbG93YeYgcHJvZ3JhbSCzYWR1arFjeSAoYm9vdCBsb2FkZXIpICIKKyJNUyBXaW5kb3dzLiAgSmW2bGkgY2hjZXN6IHRvIHpyb2Jp5iwgdG8gcHJvc3rqIHByemVjenl0YWogZG9rdW1lbnRhY2rqICIKKyJwcm9ncmFtdSBQYXJ0ZWQgKGx1YiBkb2t1bWVudGFjauogVHdvamVqIGR5c3RyeWJ1Y2ppIHN5c3RlbXUpLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1MDAKK21zZ2lkICIiCisiSWYgeW91IGxlYXZlIHlvdXIgZmlsZSBzeXN0ZW0gYXMgRkFUMzIsIHRoZW4geW91IHdpbGwgbm90IGludHJvZHVjZSBhbnkgbmV3ICIKKyJwcm9ibGVtcy4iCittc2dzdHIgIiIKKyJKZbZsaSBwb3pvc3Rhd2lzeiBzd/NqIHN5c3RlbSBwbGlr83cgamFrbyBGQVQzMiwgdG8gd3RlZHkgbmllIGLqZHppZXN6IG1pYbMiCisiKGEpIL9hZG55Y2ggbm93eWNoIHByb2JsZW3zdy4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTA0Cittc2dpZCAiIgorIklmIHlvdSBjb252ZXJ0IHRvIEZBVDMyLCBhbmQgTVMgV2luZG93cyBpcyBpbnN0YWxsZWQgb24gdGhpcyBwYXJ0aXRpb24sIHRoZW4gIgorInlvdSBtdXN0IHJlLWluc3RhbGwgdGhlIE1TIFdpbmRvd3MgYm9vdCBsb2FkZXIuICBJZiB5b3Ugd2FudCB0byBkbyB0aGlzLCB5b3UgIgorInNob3VsZCBjb25zdWx0IHRoZSBQYXJ0ZWQgbWFudWFsIChvciB5b3VyIGRpc3RyaWJ1dGlvbidzIG1hbnVhbCkuICBBbHNvLCAiCisiY29udmVydGluZyB0byBGQVQzMiB3aWxsIG1ha2UgdGhlIGZpbGUgc3lzdGVtIHVucmVhZGFibGUgYnkgTVMgRE9TLCBNUyAiCisiV2luZG93cyA5NWEsIGFuZCBNUyBXaW5kb3dzIE5ULiIKK21zZ3N0ciAiIgorIkplv2VsaSBkb2tvbmFzeiBrb253ZXJzamkgZG8gRkFUMzIgaSBzeXN0ZW0gTVMgV2luZG93cyBqZXN0IHphaW5zdGFsb3dhbnkgbmEgIgorInRlaiBwYXJ0eWNqaSwgdG8gd3RlZHkgbXVzaXN6IHByemVpbnN0YWxvd2HmIHByb2dyYW0gs2FkdWqxY3kgKGJvb3QgbG9hZGVyKSAiCisiTVMgV2luZG93cy4gIEpltmxpIGNoY2VzeiB0byB6cm9iaeYsIHRvIHByb3N66iBwcnplY3p5dGFqIGRva3VtZW50YWNq6iAiCisicHJvZ3JhbXUgUGFydGVkIChsdWIgZG9rdW1lbnRhY2rqIFR3b2plaiBkeXN0cnlidWNqaSBzeXN0ZW11KS4gUG9uYWR0bywgIgorImtvbndlcnNqYSBkbyBGQVQzMiBzcG93b2R1amUsIL9lIHRha2kgc3lzdGVtIHBsaWvzdyBi6mR6aWUgbmllbW+/bGl3eSBkbyAiCisib2Rjenl0YW5pYSBwcnpleiBzeXN0ZW15IE1TLURPUywgTVMgV2luZG93cyA5NWEgb3JheiBNUyBXaW5kb3dzIE5ULiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgICVzICAlcyIKK21zZ3N0ciAiJXMgICVzICAlcyIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1MTkKK21zZ2lkICJXb3VsZCB5b3UgbGlrZSB0byB1c2UgRkFUMzI/IgorbXNnc3RyICJDenkgY2hjZXN6IHW/eeYgRkFUMzI/IgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjU1MCBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjU2NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyAgJXMiCittc2dzdHIgIiVzICAlcyIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1NTEKK21zZ2lkICIiCisiVGhlIGZpbGUgc3lzdGVtIGNhbiBvbmx5IGJlIHJlc2l6ZWQgdG8gdGhpcyBzaXplIGJ5IGNvbnZlcnRpbmcgdG8gRkFUMTYuIgorbXNnc3RyICIiCisiUm96bWlhciBzeXN0ZW11IHBsaWvzdyBtb79lIGJ55iB0eWxrbyB6bWllbmlvbnkgcG9wcnpleiBrb253ZXJzauogZG8gRkFUMTYuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjU2NworbXNnaWQgIiIKKyJUaGUgZmlsZSBzeXN0ZW0gY2FuIG9ubHkgYmUgcmVzaXplZCB0byB0aGlzIHNpemUgYnkgY29udmVydGluZyB0byBGQVQzMi4iCittc2dzdHIgIiIKKyJTeXN0ZW0gcGxpa/N3IG1vv2UgbWll5iB6bWllbmlvbnkgcm96bWlhciwgYWxlIHR5bGtvIHBvcHJ6ZXoga29ud2Vyc2rqIGRvICIKKyJGQVQzMi4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTgwCittc2dpZCAiIgorIkdOVSBQYXJ0ZWQgY2Fubm90IHJlc2l6ZSB0aGlzIHBhcnRpdGlvbiB0byB0aGlzIHNpemUuICBXZSdyZSB3b3JraW5nIG9uIGl0ISIKK21zZ3N0ciAiIgorIkdOVSBQYXJ0ZWQgbmllIG1vv2Ugem1pZW5p5iByb3ptaWFydSB0ZWogcGFydHljamkgZG8gcG9kYW5lZ28uICBQcmFjdWplbXkgIgorIm5hZCB0eW0hIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo0OSBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo1NgorbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyBhbiBpbnZhbGlkIHNpZ25hdHVyZSBmb3IgYSBGQVQgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICJTeXN0ZW0gcGxpa/N3IHBvc2lhZGEgbmllcHJhd2lks293eSBwb2RwaXMgZGxhIHN5c3RlbXUgcGxpa/N3IEZBVC4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjY0Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGludmFsaWQgc2VjdG9yIHNpemUgZm9yIGEgRkFUIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiIgorIlN5c3RlbSBwbGlr83cgcG9zaWFkYSBuaWVwcmF3aWSzb3d5IHJvem1pYXIgc2VrdG9yYSBkbGEgc3lzdGVtdSBwbGlr83cgRkFULiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6NzEKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgYW4gaW52YWxpZCBjbHVzdGVyIHNpemUgZm9yIGEgRkFUIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiIgorIlN5c3RlbSBwbGlr83cgcG9zaWFkYSBuaWVwcmF3aWSzb3d5IHJvem1pYXIga2xhc3RyYSBkbGEgc3lzdGVtdSBwbGlr83cgRkFULiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6NzgKK21zZ2lkICIiCisiRmlsZSBzeXN0ZW0gaGFzIGFuIGludmFsaWQgbnVtYmVyIG9mIHJlc2VydmVkIHNlY3RvcnMgZm9yIGEgRkFUIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiIgorIlN5c3RlbSBwbGlr83cgcG9zaWFkYSBuaWVwcmF3aWSzb3exIGlsb7bmIHphcmV6ZXJ3b3dhbnljaCBzZWt0b3LzdyBkbGEgIgorInN5c3RlbXUgcGxpa/N3IEZBVC4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjg1Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGludmFsaWQgbnVtYmVyIG9mIEZBVHMuIgorbXNnc3RyICJTeXN0ZW0gcGxpa/N3IHBvc2lhZGEgbmllcHJhd2lks293sSBpbG+25iBGQVQt83cuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzoxMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgZmlsZSBzeXN0ZW0gaGFzIGEgbG9naWNhbCBzZWN0b3Igc2l6ZSBvZiAlZC4gIEdOVSBQYXJ0ZWQgaXMga25vd24gbm90ICIKKyJ0byB3b3JrIHByb3Blcmx5IHdpdGggc2VjdG9yIHNpemVzIG90aGVyIHRoYW4gNTEyIGJ5dGVzLiIKK21zZ3N0ciAiIgorIlRlbiBzeXN0ZW0gcGxpa/N3IHBvc2lhZGEgcm96bWlhciBsb2dpY3puZWdvIHNla3RvcmEgJWQuICBHTlUgUGFydGVkIG5pZSAiCisid3Nw87NwcmFjdWplIHByYXdpZLNvd28geiByb3ptaWFyYW1pIHNla3RvcvN3IGlubnltaSBuab8gNTEyIGJhanTzdy4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjE2NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGUgc3lzdGVtJ3MgQ0hTIGdlb21ldHJ5IGlzICglZCwgJWQsICVkKSwgd2hpY2ggaXMgaW52YWxpZC4gIFRoZSAiCisicGFydGl0aW9uIHRhYmxlJ3MgQ0hTIGdlb21ldHJ5IGlzICglZCwgJWQsICVkKS4gIElmIHlvdSBzZWxlY3QgSWdub3JlLCB0aGUgIgorImZpbGUgc3lzdGVtJ3MgQ0hTIGdlb21ldHJ5IHdpbGwgYmUgbGVmdCB1bmNoYW5nZWQuICBJZiB5b3Ugc2VsZWN0IEZpeCwgdGhlICIKKyJmaWxlIHN5c3RlbSdzIENIUyBnZW9tZXRyeSB3aWxsIGJlIHNldCB0byBtYXRjaCB0aGUgcGFydGl0aW9uIHRhYmxlJ3MgQ0hTICIKKyJnZW9tZXRyeS4iCittc2dzdHIgIiIKKyJHZW9tZXRyabEgQ0hTIHN5c3RlbXUgcGxpa3UgamVzdCAoJWQsICVkLCAlZCksIGt083JhIG5pZSBqZXN0IHByYXdpZLNvd2EuICAiCisiR2VvbWV0cmmxIENIUyB0YWJsaWN5IHBhcnR5Y2ppIGplc3QgKCVkLCAlZCwgJWQpLiAgSmW2bGkgemlnbm9ydWplc3osIHRvICIKKyJnZW9tZXRyaWEgQ0hTIHN5c3RlbXUgcGxpa3UgcG96b3N0YW5pZSBuaWV6bWllbmlvbmEuICBKZbZsaSB6ZGVjeWR1amVzeiBzaeogIgorIm5hcHJhd2nmLCBnZW9tZXRyaWEgQ0hTIHN5c3RlbXUgcGxpa/N3IHpvc3RhbmllIGRvcGFzb3dhbmEgZG8gZ2VvbWV0cmlpIENIUyAiCisidGFibGljeSBwYXJ0eWNqaS4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjIxMworbXNnaWQgIkZBVCBib290IHNlY3RvciBzYXlzIGxvZ2ljYWwgc2VjdG9yIHNpemUgaXMgMC4gIFRoaXMgaXMgd2VpcmQuICIKK21zZ3N0ciAiIgorIlNla3RvciByb3pydWNob3d5IEZBVCBt83dpLCC/ZSByb3ptaWFyIHNla3RvcmEgbG9naWN6bmVnbyBqZXN0IDAuICBEeml3bmUuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzoyMTkKK21zZ2lkICJGQVQgYm9vdCBzZWN0b3Igc2F5cyB0aGVyZSBhcmUgbm8gRkFUIHRhYmxlcy4gIFRoaXMgaXMgd2VpcmQuICIKK21zZ3N0ciAiU2VrdG9yIHJvenJ1Y2hvd3kgRkFUIG3zd2ksIL9lIG5pZSBtYSC/YWRueWNoIHRhYmxpYyBGQVQuICBEeml3bmUuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzoyMjUKK21zZ2lkICJGQVQgYm9vdCBzZWN0b3Igc2F5cyBjbHVzdGVycyBhcmUgMCBzZWN0b3JzLiAgVGhpcyBpcyB3ZWlyZC4gIgorbXNnc3RyICJTZWt0b3Igcm96cnVjaG93eSBGQVQgbfN3aSwgv2Uga2xhc3RyeSB6YWptdWqxIDAgc2VrdG9y83cuICBEeml3bmUuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzoyMzUKK21zZ2lkICJGaWxlIHN5c3RlbSBpcyBGQVQxMiwgd2hpY2ggaXMgdW5zdXBwb3J0ZWQuIgorbXNnc3RyICJTeXN0ZW1lbSBwbGlr83cgamVzdCBGQVQxMiwga3TzcnkgbmllIGplc3Qgd3NwaWVyYW55LiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6NDExCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgaW5mb3JtYXRpb24gc2VjdG9yIGhhcyB0aGUgd3Jvbmcgc2lnbmF0dXJlICgleCkuICBTZWxlY3QgY2FuY2VsIGZvciBub3csICIKKyJhbmQgc2VuZCBpbiBhIGJ1ZyByZXBvcnQuICBJZiB5b3UncmUgZGVzcGVyYXRlLCBpdCdzIHByb2JhYmx5IHNhZmUgdG8gaWdub3JlLiIKK21zZ3N0ciAiIgorIlNla3RvciBpbmZvcm1hY3lqbnkgcG9zaWFkYSBuaWVwcmF3aWSzb3d5IHBvZHBpcyAoJXgpLiAgTmEgcmF6aWUgcG9uaWVjaGFqICIKKyJha3R1YWxusSBvcGVyYWNq6iBpIHd5tmxpaiByYXBvcnQgZG90eWN6sWN5IGKz6mTzdy4gIEV3ZW50dWFsbmllIHppZ25vcnVqICIKKyJjYbOxIHN5dHVhY2rqLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb3VudC5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgZGlyZWN0b3J5IGVudHJ5IGZvciAlczogZmlyc3QgY2x1c3RlciBpcyB0aGUgZW5kIG9mIGZpbGUgbWFya2VyLiIKK21zZ3N0ciAiIgorIk5pZXByYXdpZLNvd3kgd3BpcyB3IGthdGFsb2d1IGRsYSAlczogcGllcndzenkga2xhc3RlciBqZXN0IHpuYWN6bmlraWVtICIKKyJrb/FjYSBwbGlrdS4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY291bnQuYzoxNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkJhZCBGQVQ6IHVudGVybWluYXRlZCBjaGFpbiBmb3IgJXMuICBZb3Ugc2hvdWxkIHJ1biBkb3Nmc2NrIG9yIHNjYW5kaXNrLiIKK21zZ3N0ciAiIgorIk5pZXByYXdpZLNvd3kgRkFUOiBuaWV6YWtv8WN6b255ILNh8WN1Y2ggZGxhICVzLiAgUHJvc3rqIHVydWNob21p5iBwcm9ncmFtICIKKyJkb3Nmc2NrIGx1YiBzY2FuZGlzay4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY291bnQuYzoxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkJhZCBGQVQ6IGNsdXN0ZXIgJWQgb3V0c2lkZSBmaWxlIHN5c3RlbSBpbiBjaGFpbiBmb3IgJXMuICBZb3Ugc2hvdWxkIHJ1biAiCisiZG9zZnNjayBvciBzY2FuZGlzay4iCittc2dzdHIgIiIKKyJOaWVwcmF3aWSzb3d5IEZBVDoga2xhc3RlciAlZCBqZXN0IHBvemEgc3lzdGVtZW0gcGxpa/N3IHcgs2HxY3VjaHUgZGxhICVzLiAgIgorIlByb3N66iB1cnVjaG9taeYgcHJvZ3JhbSBkb3Nmc2NrIGx1YiBzY2FuZGlzay4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY291bnQuYzoxODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkJhZCBGQVQ6IGNsdXN0ZXIgJWQgaXMgY3Jvc3MtbGlua2VkIGZvciAlcy4gIFlvdSBzaG91bGQgcnVuIGRvc2ZzY2sgb3IgIgorInNjYW5kaXNrLiIKK21zZ3N0ciAiIgorIk5pZXByYXdpZLNvd3kgRkFUOiBrbGFzdGVyICVkIGplc3QgZG93abF6YW55IHNrcm+2bmllIGRsYSAlcy4gIFByb3N66iAiCisidXJ1Y2hvbWnmIHByb2dyYW0gZG9zZnNjayBsdWIgc2NhbmRpc2suIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvdW50LmM6MjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzICVkaywgYnV0IGl0IGhhcyAlZCBjbHVzdGVycyAoJWRrKS4iCittc2dzdHIgIiVzIG1hICVkaywgamVkbmFrIG1hICVkIGtsYXN0cvN3ICglZGspLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb3VudC5jOjI2NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGUgJXMgaXMgbWFya2VkIGFzIGEgc3lzdGVtIGZpbGUuICBUaGlzIG1lYW5zIG1vdmluZyBpdCBjb3VsZCBjYXVzZSAiCisic29tZSBwcm9ncmFtcyB0byBzdG9wIHdvcmtpbmcuIgorbXNnc3RyICIiCisiUGxpayAlcyBqZXN0IG96bmFjem9ueSBqYWtvIHBsaWsgc3lzdGVtb3d5LiAgT3puYWN6YSB0bywgv2UgamVnbyAiCisicHJ6ZXN1bmnqY2llIG1vv2Ugc3Bvd29kb3dh5iBuaWVwcmF3aWSzb3exIHByYWPqIGlubnljaCBwcm9ncmFt83cuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3RhYmxlLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGQVQgJWQgbWVkaWEgJXggZG9lc24ndCBtYXRjaCB0aGUgYm9vdCBzZWN0b3IncyBtZWRpYSAleC4gIFlvdSBzaG91bGQgIgorInByb2JhYmx5IHJ1biBzY2FuZGlzay4iCittc2dzdHIgIiIKKyJUeXAgbm+2bmlrYSBvZGN6eXRhbnkgeiBGQVQgJWQgKCV4KSBuaWUgemdhZHphIHNp6iB6IHR5cGVtIG9kY3p5dGFueW0geiAiCisic2VrdG9yYSByb3pydWNob3dlZ28gKCV4KS4gIE5hbGW/eSB1cnVjaG9taeYgc2NhbmRpc2suIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3RhYmxlLmM6MjY5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhdF90YWJsZV9zZXQ6IGNsdXN0ZXIgJWxkIG91dHNpZGUgZmlsZSBzeXN0ZW0iCittc2dzdHIgImZhdF90YWJsZV9zZXQ6IGtsYXN0ZXIgJWxkIHBvemEgc3lzdGVtZW0gcGxpa/N3IgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3RhYmxlLmM6MzAxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhdF90YWJsZV9nZXQ6IGNsdXN0ZXIgJWxkIG91dHNpZGUgZmlsZSBzeXN0ZW0iCittc2dzdHIgImZhdF90YWJsZV9nZXQ6IGtsYXN0ZXIgJWxkIHBvemEgc3lzdGVtZW0gcGxpa/N3IgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3RhYmxlLmM6MzQzCittc2dpZCAiZmF0X3RhYmxlX2FsbG9jX2NsdXN0ZXI6IG5vIGZyZWUgY2x1c3RlcnMiCittc2dzdHIgImZhdF90YWJsZV9hbGxvY19jbHVzdGVyOiBicmFrIHdvbG55Y2gga2xhc3Ry83ciCisKKyM6IGxpYnBhcnRlZC9mcy9saW51eF9zd2FwL2xpbnV4X3N3YXAuYzoyNzUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVucmVjb2duaXNlZCBvbGQgc3R5bGUgbGludXggc3dhcCBzaWduYXR1cmUgJyUxMHMnLiIKK21zZ3N0ciAiTmllcm96cG96bmFueSBwb2RwaXMgbGludWtzb3dlaiBwYXJ0eWNqaSB3eW1pYW55IGAlMTBzJy4iCisKKyM6IGxpYnBhcnRlZC9mcy9saW51eF9zd2FwL2xpbnV4X3N3YXAuYzozMTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVucmVjb2duaXNlZCBuZXcgc3R5bGUgbGludXggc3dhcCBzaWduYXR1cmUgJyUxMHMnLiIKK21zZ3N0ciAiTmllcm96cG96bmFueSBwb2RwaXMgbGludWtzb3dlaiBwYXJ0eWNqaSB3eW1pYW55IGAlMTBzJy4iCisKKyM6IGxpYnBhcnRlZC9mcy9saW51eF9zd2FwL2xpbnV4X3N3YXAuYzozNTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVucmVjb2duaXNlZCBzd3N1c3AgbGludXggc3dhcCBzaWduYXR1cmUgJyU5cycuIgorbXNnc3RyICJOaWVyb3pwb3puYW55IHBvZHBpcyBsaW51a3Nvd2VqIHBhcnR5Y2ppIHd5bWlhbnkgYCUxMHMnLiIKKworIzogbGlicGFydGVkL2ZzL2xpbnV4X3N3YXAvbGludXhfc3dhcC5jOjQzNAorbXNnaWQgIlRvbyBtYW55IGJhZCBwYWdlcy4iCittc2dzdHIgIlpieXQgZHW/byBuaWVwcmF3aWSzb3d5Y2ggc3Ryb24uIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2FkdmZzLmM6MTIxIGxpYnBhcnRlZC9mcy9oZnMvYWR2ZnNfcGx1cy5jOjEyMgorIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjQxNCBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NTA4CisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo1MzkgbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NjU4CisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo3NzIKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gY29udGFpbnMgZXJyb3JzLiIKK21zZ3N0ciAiU3lzdGVtIHBsaWvzdyB6YXdpZXJhIGKz6mR5LiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9hZHZmc19wbHVzLmM6Mjg3Cittc2dpZCAiQmFkIGJsb2NrcyBjb3VsZCBub3QgYmUgcmVhZC4iCittc2dzdHIgIlVzemtvZHpvbmUgYmxva2kgbmllIG1vZ7EgYnnmIG9kY3p5dGFuZS4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvY2FjaGUuYzoxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRyeWluZyB0byByZWdpc3RlciBhbiBleHRlbnQgc3RhcnRpbmcgYXQgYmxvY2sgMHglWCwgYnV0IGFub3RoZXIgb25lIGFscmVhZHkgIgorImV4aXN0cyBhdCB0aGlzIHBvc2l0aW9uLiAgWW91IHNob3VsZCBjaGVjayB0aGUgZmlsZSBzeXN0ZW0hIgorbXNnc3RyICIiCisiUG9kY3phcyBwcvNieSB6YXJlamVzdHJvd2FuaWEgb2JzemFydSB6IHBvY3qxdGtpZW0gbmEgYmxva3UgMHglWCB3eWtyeXRvICIKKyJpbm55IG9ic3phciBuYSB0ZWogcG96eWNqaS4gIE5hbGW/eSBzcHJhd2R6aeYgc3lzdGVtIHBsaWvzdyEiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvY2FjaGUuYzoyMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRyeWluZyB0byBtb3ZlIGFuIGV4dGVudCBmcm9tIGJsb2NrIE94JVggdG8gYmxvY2sgT3glWCwgYnV0IGFub3RoZXIgb25lICIKKyJhbHJlYWR5IGV4aXN0cyBhdCB0aGlzIHBvc2l0aW9uLiAgVGhpcyBzaG91bGQgbm90IGhhcHBlbiEiCittc2dzdHIgIiIKKyJQb2RjemFzIHBy82J5IHByemVuaWVzaWVuaWEgb2JzemFydSB6IGJsb2t1IDB4JVggZG8gYmxva3UgMHglWCB3eWtyeXRvIGlubnkgIgorIm9ic3phciBuYSB0ZWogcG96eWNqaS4gIFRvIG5pZSBwb3dpbm5vIHNp6iB6ZGFyennmISIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlLmM6MTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB1cGRhdGUgdGhlIGV4dGVudCBjYWNoZSBmb3IgSEZTIGZpbGUgd2l0aCBDTklEICVYLiIKK21zZ3N0ciAiTmllIG1vv25hIHVha3R1YWxuaeYgcGFtaepjaSBvYnN6YXLzdyBkbGEgcGxpa3UgSEZTIHogQ05JRCAlWC4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZS5jOjE4MAorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgdG8gcmVhZCBIRlMgZmlsZSB3aXRoIENOSUQgJVggYmVoaW5kIEVPRi4iCittc2dzdHIgIlBy82JhIG9kY3p5dGFuaWEgcGxpa3UgSEZTIHogQ05JRCAlWCB6YSBFT0YuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGUuYzoxOTAgbGlicGFydGVkL2ZzL2hmcy9maWxlLmM6MjIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIHNlY3RvciAlbGxpIG9mIEhGUyBmaWxlIHdpdGggQ05JRCAlWC4iCittc2dzdHIgIk5pZSB6bmFsZXppb25vIHNla3RvcmEgJWxsaSBwbGlrdSBIRlMgeiBDTklEICVYLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlLmM6MjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyB0byB3cml0ZSBIRlMgZmlsZSB3aXRoIENOSUQgJVggYmVoaW5kIEVPRi4iCittc2dzdHIgIlBy82JhIHphcGlzdSBwbGlrdSBIRlMgeiBDTklEICVYIHphIEVPRi4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZV9wbHVzLmM6MTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB1cGRhdGUgdGhlIGV4dGVudCBjYWNoZSBmb3IgSEZTKyBmaWxlIHdpdGggQ05JRCAlWC4iCittc2dzdHIgIk5pZSBtb79uYSB1YWt0dWFsbmnmIHBhbWnqY2kgb2JzemFy83cgZGxhIHBsaWt1IEhGUysgeiBDTklEICVYLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlX3BsdXMuYzoyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIHRvIHJlYWQgSEZTKyBmaWxlIHdpdGggQ05JRCAlWCBiZWhpbmQgRU9GLiIKK21zZ3N0ciAiUHLzYmEgb2Rjenl0YW5pYSBwbGlrdSBIRlMrIHogQ05JRCAlWCB6YSBFT0YuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGVfcGx1cy5jOjIxMyBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGVfcGx1cy5jOjI1NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCBzZWN0b3IgJWxsaSBvZiBIRlMrIGZpbGUgd2l0aCBDTklEICVYLiIKK21zZ3N0ciAiTmllIHpuYWxlemlvbm8gc2VrdG9yYSAlbGxpIHBsaWt1IEhGUysgeiBDTklEICVYLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlX3BsdXMuYzoyNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIHRvIHdyaXRlIEhGUysgZmlsZSB3aXRoIENOSUQgJVggYmVoaW5kIEVPRi4iCittc2dzdHIgIlBy82JhIHphcGlzdSBwbGlrdSBIRlMrIHogQ05JRCAlWCB6YSBFT0YuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjIzMgorbXNnaWQgIlNvcnJ5LCBIRlMgY2Fubm90IGJlIHJlc2l6ZWQgdGhhdCB3YXkgeWV0LiIKK21zZ3N0ciAiUHJ6eWtybyBtaSwgYWxlIG5pZSBtb79uYSBqZXN6Y3plIHcgdGVuIHNwb3PzYiB6bWllbmnmIHJvem1pYXJ1IEhGUy4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MjYyIGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NjQxCittc2dpZCAiRGF0YSByZWxvY2F0aW9uIGhhcyBmYWlsZWQuIgorbXNnc3RyICJSZWxva2FjamEgZGFueWNoIG5pZSBwb3dpb2SzYSBzaeouIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjI4MQorbXNnaWQgIkRhdGEgcmVsb2NhdGlvbiBsZWZ0IHNvbWUgZGF0YSBpbiB0aGUgZW5kIG9mIHRoZSB2b2x1bWUuIgorbXNnc3RyICJSZWxva2FjamEgZGFueWNoIHBvem9zdGF3abNhIGRhbmUgcG9kIGtvbmllYyB3b2x1bWVudS4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MzIwCittc2dpZCAid3JpdGluZyBIRlMgTWFzdGVyIERpcmVjdG9yeSBCbG9jayIKK21zZ3N0ciAiemFwaXN5d2FuaWUgZ7Pzd25lZ28gYmxva3Uga2F0YWxvZ3UgSEZTIChIRlMgTWFzdGVyIERpcmVjdG9yeSBCbG9jaykiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NDY4Cittc2dpZCAiTm8gdmFsaWQgSEZTWytYXSBzaWduYXR1cmUgaGFzIGJlZW4gZm91bmQgd2hpbGUgb3BlbmluZy4iCittc2dzdHIgIk5pZSB6bmFsZXppb25vIHByYXdpZLNvd2VqIHN5Z25hdHVyeSBIRlNbK1hdIHBvZGN6YXMgb3R3aWVyYW5pYS4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NDc4CisjLCBjLWZvcm1hdAorbXNnaWQgIlZlcnNpb24gJWQgb2YgSEZTKyBpc24ndCBzdXBwb3J0ZWQuIgorbXNnc3RyICJXZXJzamEgJWQgSEZTKyBuaWUgamVzdCB3c3BpZXJhbmEuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICJWZXJzaW9uICVkIG9mIEhGU1ggaXNuJ3Qgc3VwcG9ydGVkLiIKK21zZ3N0ciAiV2Vyc2phICVkIEhGU1ggbmllIGplc3Qgd3NwaWVyYW5hLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo2NzIKK21zZ2lkICJEYXRhIHJlbG9jYXRpb24gbGVmdCBzb21lIGRhdGEgYXQgdGhlIGVuZCBvZiB0aGUgdm9sdW1lLiIKK21zZ3N0ciAiUmVsb2thY2phIGRhbnljaCBwb3pvc3Rhd2mzYSBkYW5lIG5hIGtv8WN1IHdvbHVtZW51LiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo3MjAKK21zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRoZSBhbGxvY2F0aW9uIGZpbGUuIgorbXNnc3RyICJCs7FkIHBvZGN6YXMgemFwaXN1IHBsaWt1IHByenlkemlhs3UuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjczNQorbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdGhlIGNvbXBhdGliaWxpdHkgcGFydCBvZiB0aGUgYWxsb2NhdGlvbiBmaWxlLiIKK21zZ3N0ciAiQrOxZCBwb2RjemFzIHphcGlzdSBrb21wYXR5YmlsbmVqIGN66rZjaSBwbGlrdSBwcnp5ZHppYbN1LiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo3NTAKK21zZ2lkICJ3cml0aW5nIEhGUysgVm9sdW1lIEhlYWRlciIKK21zZ3N0ciAiemFwaXN5d2FuaWUgbmFns/N3a2Egd29sdW1lbnUgSEZTKyIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo4NTAKK21zZ2lkICJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBsb29raW5nIGZvciB0aGUgbWFuZGF0b3J5IGJhZCBibG9ja3MgZmlsZS4iCittc2dzdHIgIiIKKyJXeXN0sXBpsyBis7FkIHBvZGN6YXMgc3p1a2FuaWEgb2Jvd2mxemtvd2VnbyBwbGlrdSB1c3prb2R6b255Y2ggYmxva/N3LiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo5MDQKK21zZ2lkICIiCisiSXQgc2VlbXMgdGhlcmUgaXMgYW4gZXJyb3IgaW4gdGhlIEhGUyB3cmFwcGVyOiB0aGUgYmFkIGJsb2NrcyBmaWxlIGRvZXNuJ3QgIgorImNvbnRhaW4gdGhlIGVtYmVkZGVkIEhGUysgdm9sdW1lLiIKK21zZ3N0ciAiIgorIlByYXdkb3BvZG9ibmllIHd5c3TqcHVqZSBis7FkIHcgb3RvY3pjZSBIRlM6IHBsaWsgdXN6a29kem9ueWNoIGJsb2vzdyBuaWUgIgorInphd2llcmEgd2J1ZG93YW5lZ28gd29sdW1lbnUgSEZTKy4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6OTQwCittc2dpZCAiU29ycnksIEhGUysgY2Fubm90IGJlIHJlc2l6ZWQgdGhhdCB3YXkgeWV0LiIKK21zZ3N0ciAiUHJ6eWtybyBtaSwgYWxlIG5pZSBtb79uYSBqZXN6Y3plIHcgdGVuIHNwb3PzYiB6bWllbmnmIHJvem1pYXJ1IEhGUysuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjk3NQorbXNnaWQgInNocmlua2luZyBlbWJlZGRlZCBIRlMrIHZvbHVtZSIKK21zZ3N0ciAiem1uaWVqc3phbmllIHdidWRvd2FuZWdvIHdvbHVtZW51IEhGUysiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6OTkxCittc2dpZCAiUmVzaXppbmcgdGhlIEhGUysgdm9sdW1lIGhhcyBmYWlsZWQuIgorbXNnc3RyICJabWlhbmEgcm96bWlhcnUgd29sdW1lbnUgSEZTKyBuaWUgcG93aW9ks2Egc2nqLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo5OTgKK21zZ2lkICJzaHJpbmtpbmcgSEZTIHdyYXBwZXIiCittc2dzdHIgInptbmllanN6YW5pZSBvdG9jemtpIEhGUyIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzoxMDA3Cittc2dpZCAiVXBkYXRpbmcgdGhlIEhGUyB3cmFwcGVyIGhhcyBmYWlsZWQuIgorbXNnc3RyICJBa3R1YWxpemFjamEgb3RvY3praSBIRlMgbmllIHBvd2lvZLNhIHNp6i4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MTEwOSBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjExOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgaXMgbm90IGEgcmVhbCAlcyBjaGVjay4gIFRoaXMgaXMgZ29pbmcgdG8gZXh0cmFjdCBzcGVjaWFsIGxvdyBsZXZlbCAiCisiZmlsZXMgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4iCittc2dzdHIgIiIKKyJUbyBuaWUgamVzdCBwcmF3ZHppd2Ugc3ByYXdkemFuaWUgJXMuICBDZWxlbSBqZXN0IHd5ZG9ieWNpZSBzcGVjamFsbnljaCAiCisibmlza29wb3ppb21vd3ljaCBwbGlr83cgdyBjZWx1IG9kcGx1c2t3aWFuaWEuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzoxNTUKK21zZ2lkICJCYWQgYmxvY2sgbGlzdCBoZWFkZXIgY2hlY2tzdW0uIgorbXNnc3RyICJTdW1hIGtvbnRyb2xuYSBuYWez83drYSBsaXN0eSB1c3prb2R6b255Y2ggYmxva/N3LiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJbnZhbGlkIHNpemUgb2YgYSB0cmFuc2FjdGlvbiBibG9jayB3aGlsZSByZXBsYXlpbmcgdGhlIGpvdXJuYWwgKCVpIGJ5dGVzKS4iCittc2dzdHIgIiIKKyJOaWVwcmF3aWSzb3d5IHJvem1pYXIgYmxva3UgdHJhbnNha2N5am5lZ28gcG9kY3phcyBwb25hd2lhbmlhIGtyb25pa2kgKCVpICIKKyJiYWp083cpLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MjYwCittc2dpZCAiIgorIkpvdXJuYWwgc3RvcmVkIG91dHNpZGUgb2YgdGhlIHZvbHVtZSBhcmUgbm90IHN1cHBvcnRlZC4gIFRyeSB0byBkZXNhY3RpdmF0ZSAiCisidGhlIGpvdXJuYWwgYW5kIHJ1biBQYXJ0ZWQgYWdhaW4uIgorbXNnc3RyICIiCisiS3JvbmlraSB1bWllc3pjem9uZSBwb3phIHdvbHVtZW5lbSBuaWUgc7Egd3NwaWVyYW5lLiAgUHJvc3rqIHd5s7FjennmICIKKyJrcm9uaWvqIGkgdXJ1Y2hvbWnmIHBvbm93bmllIFBhcnRlZC4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjI3MQorbXNnaWQgIkpvdXJuYWwgb2Zmc2V0IG9yIHNpemUgaXMgbm90IG11bHRpcGxlIG9mIHRoZSBzZWN0b3Igc2l6ZS4iCittc2dzdHIgIiIKKyJXeXLzd25hbmllIGtyb25pa2kgbHViIHdpZWxrb7bmIG5pZSBqZXN0IHdpZWxva3JvdG5vtmNpsSByb3ptaWFydSBzZWt0b3JhLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MjkyCittc2dpZCAiSW5jb3JyZWN0IG1hZ2ljIHZhbHVlcyBpbiB0aGUgam91cm5hbCBoZWFkZXIuIgorbXNnc3RyICJOaWVwcmF3aWSzb3dlIG1hZ2ljem5lIHdhcnRvtmNpIHcgbmFns/N3a3Uga3JvbmlraS4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjMwMgorbXNnaWQgIkpvdXJuYWwgc2l6ZSBtaXNtYXRjaCBiZXR3ZWVuIGpvdXJuYWwgaW5mbyBibG9jayBhbmQgam91cm5hbCBoZWFkZXIuIgorbXNnc3RyICIiCisiUm96bWlhciBrcm9uaWtpIG5pZSBwYXN1amUgcG9taepkenkgYmxva2llbSBpbmZvcm1hY3lqbnltIGtyb25pa2kgaSAiCisibmFns/N3a2llbSBrcm9uaWtpLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MzE0Cittc2dpZCAiU29tZSBoZWFkZXIgZmllbGRzIGFyZSBub3QgbXVsdGlwbGUgb2YgdGhlIHNlY3RvciBzaXplLiIKK21zZ3N0ciAiTmlla3TzcmUgcG9sYSBuYWez83drYSBuaWUgc7Egd2llbG9rcm90bm+2Y2mxIHJvem1pYXJ1IHNla3RvcmEuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozMjMKK21zZ2lkICIiCisiVGhlIHNlY3RvciBzaXplIHN0b3JlZCBpbiB0aGUgam91cm5hbCBpcyBub3QgNTEyIGJ5dGVzLiAgUGFydGVkIG9ubHkgIgorInN1cHBvcnRzIDUxMiBieXRlcyBsZW5ndGggc2VjdG9ycy4iCittc2dzdHIgIiIKKyJSb3ptaWFyIHNla3RvcmEgemFwaXNhbnkgdyBrcm9uaWNlIG5pZSBtYSA1MTIgYmFqdPN3LiAgUGFydGVkIHdzcGllcmEgdHlsa28gIgorInNla3RvcnkgbyByb3ptaWFyYWNoIDUxMiBiYWp083cuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozMzUKK21zZ2lkICJCYWQgam91cm5hbCBjaGVja3N1bS4iCittc2dzdHIgIk5pZXByYXdpZLNvd2Egc3VtYSBrb250cm9sbmEga3JvbmlraS4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjM1MworbXNnaWQgIiIKKyJUaGUgam91cm5hbCBpcyBub3QgZW1wdHkuICBQYXJ0ZWQgbXVzdCByZXBsYXkgdGhlIHRyYW5zYWN0aW9ucyBiZWZvcmUgIgorIm9wZW5pbmcgdGhlIGZpbGUgc3lzdGVtLiAgVGhpcyB3aWxsIG1vZGlmeSB0aGUgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICIiCisiS3JvbmlrYSBuaWUgamVzdCBwdXN0YS4gIFBhcnRlZCBtdXNpIHBvbm93aeYgdHJhbnNha2NqZSBwcnplZCBvdHdhcmNpZW0gIgorInN5c3RlbXUgcGxpa/N3LiAgVG8gem1vZHlmaWt1amUgc3lzdGVtIHBsaWvzdy4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjM4MQorbXNnaWQgIiIKKyJUaGUgdm9sdW1lIGhlYWRlciBvciB0aGUgbWFzdGVyIGRpcmVjdG9yeSBibG9jayBoYXMgY2hhbmdlZCB3aGlsZSByZXBsYXlpbmcgIgorInRoZSBqb3VybmFsLiAgWW91IHNob3VsZCByZXN0YXJ0IFBhcnRlZC4iCittc2dzdHIgIiIKKyJOYWez83dlayB3b2x1bWVudSBsdWIgZ7Pzd255IGJsb2sga2F0YWxvZ3Ugem1pZW5psyBzaeogcG9kY3phcyBwb25hd2lhbmlhICIKKyJrcm9uaWtpLiAgTmFsZb95IHBvbm93bmllIHVydWNob21p5iBQYXJ0ZWQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3Byb2JlLmM6NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBhcnRlZCBjYW4ndCB1c2UgSEZTIGZpbGUgc3lzdGVtcyBvbiBkaXNrcyB3aXRoIGEgc2VjdG9yIHNpemUgbm90IGVxdWFsIHRvICUiCisiZCBieXRlcy4iCittc2dzdHIgIiIKKyJQYXJ0ZWQgbmllIG1vv2Ugdb95d2HmIHN5c3RlbfN3IHBsaWvzdyBIRlMgbmEgZHlza2FjaCB6IHJvem1pYXJlbSBzZWt0b3JhICIKKyJpbm55bSBuab8gJWQgYmFqdPN3LiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjE1MSBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzoxNTUKK21zZ2lkICJBbiBleHRlbnQgaGFzIG5vdCBiZWVuIHJlbG9jYXRlZC4iCittc2dzdHIgIk9ic3phciBuaWUgem9zdGGzIHByemVuaWVzaW9ueS4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzoyNTEgbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6MzA3Cittc2dpZCAiIgorIkEgcmVmZXJlbmNlIHRvIGFuIGV4dGVudCBjb21lcyBmcm9tIGEgcGxhY2UgaXQgc2hvdWxkIG5vdC4gIFlvdSBzaG91bGQgY2hlY2sgIgorInRoZSBmaWxlIHN5c3RlbSEiCittc2dzdHIgIiIKKyJPZHdvs2FuaWUgZG8gb2JzemFydSBuaWUgcG93aW5ubyBiebNvIHd5c3SxcGnmIHcgdHltIG1pZWpzY3UuIE5hbGW/eSAiCisic3ByYXdkemnmIHN5c3RlbSBwbGlr83chIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6MzgxCittc2dpZCAiVGhpcyBIRlMgdm9sdW1lIGhhcyBubyBjYXRhbG9nIGZpbGUuICBUaGlzIGlzIHZlcnkgdW51c3VhbCEiCittc2dzdHIgIiIKKyJUZW4gd29sdW1lbiBIRlMgbmllIHBvc2lhZGEgcGxpa3Uga2F0YWxvZ293ZWdvLiAgVG8gamVzdCBiYXJkem8gbmllend5a7NlISIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjQ3NQorbXNnaWQgIlRoaXMgSEZTIHZvbHVtZSBoYXMgbm8gZXh0ZW50cyBvdmVyZmxvdyBmaWxlLiAgVGhpcyBpcyBxdWl0ZSB1bnVzdWFsISIKK21zZ3N0ciAiIgorIlRlbiB3b2x1bWVuIEhGUyBuaWUgemF3aWVyYSBwbGlrdSBwcnplcGWzbmllbmlhIG9ic3phcvN3LiAgVG8gcmFjemVqICIKKyJuaWV6d3lrbGUhIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NTE3IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjY2OAorbXNnaWQgIiIKKyJUaGUgZXh0ZW50cyBvdmVyZmxvdyBmaWxlIHNob3VsZCBub3QgY29udGFpbiBpdHMgb3duIGV4dGVudHMhICBZb3Ugc2hvdWxkICIKKyJjaGVjayB0aGUgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICIiCisiUGxpayBwcnplcGWzbmllbmlhIG9ic3phcvN3IG5pZSBwb3dpbmllbiB6YXdpZXJh5iB3s2FzbnljaCBvYnN6YXLzdyEgIE5hbGW/eSAiCisic3ByYXdkemnmIHN5c3RlbSBwbGlr83cuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NTc0IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjg0NworbXNnaWQgIkNvdWxkIG5vdCBjYWNoZSB0aGUgZmlsZSBzeXN0ZW0gaW4gbWVtb3J5LiIKK21zZ3N0ciAiTmllIG1vv25hIHphcGFtaep0YeYgc3lzdGVtdSBwbGlr83cgdyBwYW1p6mNpLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjYzNSBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo5MDgKK21zZ2lkICJCYWQgYmxvY2tzIGxpc3QgY291bGQgbm90IGJlIGxvYWRlZC4iCittc2dzdHIgIk5pZSBwb3dpb2SzbyBzaeogemGzYWRvd2FuaWUgbGlzdHkgdXN6a29kem9ueWNoIGJsb2vzdy4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzo2NDkgbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6OTI0Cittc2dpZCAiQW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIGV4dGVudCByZWxvY2F0aW9uLiIKK21zZ3N0ciAiV3lrcnl0byBis7FkIHBvZGN6YXMgcHJ6ZW5vc3plbmlhIG9ic3phcnUuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo0OTUKK21zZ2lkICJUaGlzIEhGUysgdm9sdW1lIGhhcyBubyBjYXRhbG9nIGZpbGUuICBUaGlzIGlzIHZlcnkgdW51c3VhbCEiCittc2dzdHIgIiIKKyJUZW4gd29sdW1lbiBIRlMrIG5pZSBwb3NpYWRhIHBsaWt1IGthdGFsb2dvd2Vnby4gIFRvIGplc3QgYmFyZHpvIG5pZXp3eWuzZSEiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjYxOQorbXNnaWQgIlRoaXMgSEZTKyB2b2x1bWUgaGFzIG5vIGV4dGVudHMgb3ZlcmZsb3cgZmlsZS4gIFRoaXMgaXMgcXVpdGUgdW51c3VhbCEiCittc2dzdHIgIiIKKyJUZW4gd29sdW1lbiBIRlMrIG5pZSB6YXdpZXJhIHBsaWt1IHByemVwZbNuaWVuaWEgb2JzemFy83cuIFRvIHJhY3plaiAiCisibmllend5a2xlISIKKworIzogcGFydGVkL3BhcnRlZC5jOjk0Cittc2dpZCAiZGlzcGxheXMgdGhpcyBoZWxwIG1lc3NhZ2UiCittc2dzdHIgInd5tndpZXRsYSB06iBvdG8gcG9tb2MiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo5NQorIywgZnV6enkKK21zZ2lkICJsaXN0cyBwYXJ0aXRpb24gbGF5b3V0IG9uIGFsbCBibG9jayBkZXZpY2VzIgorbXNnc3RyICJ3eXBpc3VqZSB0YWJsaWNlIHBhcnR5Y2ppIHdzenlzdGtpY2ggd3lrcnl0eWNoIHVyerFkemXxIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6OTYKK21zZ2lkICJkaXNwbGF5cyBtYWNoaW5lIHBhcnNlYWJsZSBvdXRwdXQiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjk3Cittc2dpZCAibmV2ZXIgcHJvbXB0cyBmb3IgdXNlciBpbnRlcnZlbnRpb24iCittc2dzdHIgIm5pZ2R5IG5pZSBwcm9zaSB1v3l0a293bmlrYSBvIGludGVyd2VuY2rqIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6OTgKK21zZ2lkICJkaXNwbGF5cyB0aGUgdmVyc2lvbiIKK21zZ3N0ciAid3m2d2lldGxhIG51bWVyIHdlcnNqaSIKKworIzogcGFydGVkL3BhcnRlZC5jOjExMQorbXNnaWQgIiIKKyJOVU1CRVIgaXMgdGhlIHBhcnRpdGlvbiBudW1iZXIgdXNlZCBieSBMaW51eC4gIE9uIE1TLURPUyBkaXNrIGxhYmVscywgdGhlICIKKyJwcmltYXJ5IHBhcnRpdGlvbnMgbnVtYmVyIGZyb20gMSB0byA0LCBsb2dpY2FsIHBhcnRpdGlvbnMgZnJvbSA1IG9ud2FyZHMuXG4iCittc2dzdHIgIiIKKyJOVU1FUiBvem5hY3phIG51bWVyIHBhcnR5Y2ppIHW/eXdhbmVqIHByemV6IExpbnVrc2EuICBEbGEgZXR5a2lldCBkeXNr83cgTVMtIgorIkRPUyBsaWN6YmEgcGFydHljamkgZ7Pzd255Y2ggbWlltmNpIHNp6iB3IHByemVkemlhbGUgMS00LCB6YbYgcGFydHljamUgIgorImxvZ2ljem5lIHpham11arEga29sZWpuZSBudW1lcnkgcG9jerF3c3p5IG9kIDUuXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMTQKK21zZ2lkICJMQUJFTC1UWVBFIGlzIG9uZSBvZjogIgorbXNnc3RyICJUWVAtRVRZS0lFVFkgc3Rhbm93aSBqZWRusSB6IG5hc3TqcHVqsWN5Y2ggd2FydG+2Y2k6ICIKKworIzogcGFydGVkL3BhcnRlZC5jOjExNQorbXNnaWQgIkZMQUcgaXMgb25lIG9mOiAiCittc2dzdHIgIkZMQUdBIHN0YW5vd2kgamVkbrEgeiBuYXN06nB1arFjeWNoIHdhcnRvtmNpOiAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMTYKK21zZ2lkICJVTklUIGlzIG9uZSBvZjogIgorbXNnc3RyICJKRUROT1NUS0Egc3Rhbm93aSBqZWRusSB6IG5hc3TqcHVqsWN5Y2ggd2FydG+2Y2k6ICIKKworIzogcGFydGVkL3BhcnRlZC5jOjExNworbXNnaWQgIlBBUlQtVFlQRSBpcyBvbmUgb2Y6IHByaW1hcnksIGxvZ2ljYWwsIGV4dGVuZGVkXG4iCittc2dzdHIgIiIKKyJUWVAtUEFSVFlDSkkgc3Rhbm93aSBqZWRusSB6IG5hc3TqcHVqsWN5Y2ggd2FydG+2Y2k6IGez83duYSwgbG9naWN6bmEsICIKKyJyb3pzemVyem9uYVxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTE5Cittc2dpZCAiRlMtVFlQRSBpcyBvbmUgb2Y6ICIKK21zZ3N0ciAiU1lTVEVNLVBMSUvTVyBzdGFub3dpIGplZG6xIHogbmFzdOpwdWqxY3ljaCB3YXJ0b7ZjaTogIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIwCittc2dpZCAiIgorIlNUQVJUIGFuZCBFTkQgYXJlIGRpc2sgbG9jYXRpb25zLCBzdWNoIGFzIDRHQiBvciAxMCUuICBOZWdhdGl2ZSB2YWx1ZXMgY291bnQgIgorImZyb20gdGhlIGVuZCBvZiB0aGUgZGlzay4gIEZvciBleGFtcGxlLCAtMXMgc3BlY2lmaWVzIGV4YWN0bHkgdGhlIGxhc3QgIgorInNlY3Rvci5cbiIKK21zZ3N0ciAiIgorIlBPQ1qhVEVLIGkgS09OSUVDIG96bmFjemFqsSBwb7Nvv2VuaWEgbmEgZHlza3UsIG5wLiA0R0IgbHViIDEwJS4gIFVqZW1uZSAiCisid2FydG+2Y2kgc7EgbGljem9uZSBvZCBrb/FjYSBkeXNrdS4gIE5hIHByenlrs2FkIC0xcyBvem5hY3phIGRva7NhZG5pZSAiCisib3N0YXRuaSBzZWt0b3IuXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjMKK21zZ2lkICJTVEFURSBpcyBvbmUgb2Y6IG9uLCBvZmZcbiIKK21zZ3N0ciAiU1RBTiBqZXN0IHJlcHJlemVudG93YW55IHBvcHJ6ZXo6IHezsWN6b255LCB3ebOxY3pvbnlcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyNAorbXNnaWQgIkRFVklDRSBpcyB1c3VhbGx5IC9kZXYvaGRhIG9yIC9kZXYvc2RhXG4iCittc2dzdHIgIlVSWqFEWkVOSUVNIGplc3Qgend5a2xlIC9kZXYvaGRhIGx1YiAvZGV2L3NkYVxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTI1Cittc2dpZCAiTkFNRSBpcyBhbnkgd29yZCB5b3Ugd2FudFxuIgorbXNnc3RyICJOQVpXQSBqZXN0IGRvd29sbnltIHOzb3dlbSBqYWtpZSBjaGNlc3pcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyNgorbXNnaWQgIlRoZSBwYXJ0aXRpb24gbXVzdCBoYXZlIG9uZSBvZiB0aGUgZm9sbG93aW5nIEZTLVRZUEVzOiAiCittc2dzdHIgIlBhcnR5Y2phIG11c2kgcG9zaWFkYeYgamVkZW4geiBuYXN06nB1arFjeWNoIHN5c3RlbfN3IHBsaWvzdzogIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTMwCisjLCBmdXp6eQorbXNnaWQgIiIKKyJDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLlxuIgorIlRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlLCBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS5cbiIKKyJcbiIKKyJUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiIKKyJidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuIgorIk1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbiIKKyJHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuIgorIlxuIgorbXNnc3RyICIiCisiQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy5cbiIKKyJQcm9ncmFtIHRlbiBqZXN0IHdvbG5vIGRvc3TqcG55LCB6Z29kbmllIHogUG93c3plY2husSBMaWNlbmNqsSBQdWJsaWN6brEgIgorIkdOVS5cbiIKKyJcbiIKKyJQcm9ncmFtIHRlbiB1ZG9zdOpwbmlhbnkgamVzdCB3IG5hZHppZWksIL9lIGLqZHppZSBwcnp5ZGF0bnksIGFsZSBCRVogr0FETkVKICIKKyJHV0FSQU5DSkksIG5hd2V0IGJleiBkb215tmxuZWogZ3dhcmFuY2ppIFBSWllEQVROT6ZDSSBIQU5ETE9XRUogYWxibyAiCisiUFJaWURBVE5PpkNJIERPIEtPTktSRVROWUNIIFpBU1RPU09XQdEuIFdp6mNlaiBzemN6ZWfzs/N3IHpuYWpkdWplIHNp6iB3ICIKKyJQb3dzemVjaG5laiBMaWNlbmNqaSBQdWJsaWN6bmVqIEdOVS5cbiIKKyJcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjE3NgorIywgYy1mb3JtYXQKK21zZ2lkICIlMC5mJSVcdCh0aW1lIGxlZnQgJS4yZDolLjJkKSIKK21zZ3N0ciAiJTAuZiUlXHQoY3phcyBkbyBrb/FjYSAlLjJkOiUuMmQpIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQYXJ0aXRpb24gJXMgaXMgYmVpbmcgdXNlZC4gWW91IG11c3QgdW5tb3VudCBpdCBiZWZvcmUgeW91IG1vZGlmeSBpdCB3aXRoICIKKyJQYXJ0ZWQuIgorbXNnc3RyICIiCisiUGFydHljamEgJXMgamVzdCB1v3l3YW5hLiAgTmFsZb95IGqxIG9ks7FjennmIHByemVkIGplaiBtb2R5ZmlrYWNqsSAiCisiUGFydGVkZGVtLiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICJQYXJ0aXRpb24ocykgb24gJXMgYXJlIGJlaW5nIHVzZWQuIgorbXNnc3RyICJQYXJ0eWNqYSAocGFydHljamUpIG5hICVzIHOxIHW/eXdhbmUuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIzCittc2dpZCAiIgorIlRoZSBleGlzdGluZyBmaWxlIHN5c3RlbSB3aWxsIGJlIGRlc3Ryb3llZCBhbmQgYWxsIGRhdGEgb24gdGhlIHBhcnRpdGlvbiAiCisid2lsbCBiZSBsb3N0LiBEbyB5b3Ugd2FudCB0byBjb250aW51ZT8iCittc2dzdHIgIiIKKyJJc3RuaWVqsWN5IHN5c3RlbSBwbGlr83cgem9zdGFuaWUgem5pc3pjem9ueSwgYSB3c3p5c3RraWUgZGFuZSBuYSBwYXJ0eWNqaSAiCisiem9zdGFusSB1dHJhY29uZS4gS29udHludW93YeY/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZXhpc3RpbmcgZGlzayBsYWJlbCBvbiAlcyB3aWxsIGJlIGRlc3Ryb3llZCBhbmQgYWxsIGRhdGEgb24gdGhpcyBkaXNrICIKKyJ3aWxsIGJlIGxvc3QuIERvIHlvdSB3YW50IHRvIGNvbnRpbnVlPyIKK21zZ3N0ciAiIgorIklzdG5pZWqxY2EgZXR5a2lldGEgZHlza3UgbmEgJXMgem9zdGFuaWUgem5pc3pjem9uYSwgYSB3c3p5c3RraWUgZGFuZSBuYSB0eW0gIgorImR5c2t1IHpvc3RhbrEgdXRyYWNvbmUuIEtvbnR5bnVvd2HmPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjQ1OCBwYXJ0ZWQvcGFydGVkLmM6NjUyIHBhcnRlZC9wYXJ0ZWQuYzoxMDQ0CisjOiBwYXJ0ZWQvcGFydGVkLmM6MTEyOCBwYXJ0ZWQvcGFydGVkLmM6MTc3MSBwYXJ0ZWQvcGFydGVkLmM6MTg1MgorIzogcGFydGVkL3BhcnRlZC5jOjE5MDAKK21zZ2lkICJQYXJ0aXRpb24gbnVtYmVyPyIKK21zZ3N0ciAiTnVtZXIgcGFydHljamk/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NTAwCittc2dpZCAiU291cmNlIGRldmljZT8iCittc2dzdHIgIlVyerFkemVuaWUgvHLzZLNvd2U/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NTA0Cittc2dpZCAiU291cmNlIHBhcnRpdGlvbiBudW1iZXI/IgorbXNnc3RyICJOdW1lciBwYXJ0eWNqaSC8cvNks293ZWo/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NTA5Cittc2dpZCAiQ2FuJ3QgY29weSBhbiBleHRlbmRlZCBwYXJ0aXRpb24uIgorbXNnc3RyICJOaWUgbW+/bmEgc2tvcGlvd2HmIHJvenN6ZXJ6b25laiBwYXJ0eWNqaS4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo1MTUKK21zZ2lkICJEZXN0aW5hdGlvbiBwYXJ0aXRpb24gbnVtYmVyPyIKK21zZ3N0ciAiTnVtZXIgcGFydHljamkgZG9jZWxvd2VqPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjYxNQorbXNnaWQgIk5ldyBkaXNrIGxhYmVsIHR5cGU/IgorbXNnc3RyICJOb3d5IHR5cCBldHlraWV0eSBkeXNrdT8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo2NTYKK21zZ2lkICJGaWxlIHN5c3RlbT8iCittc2dzdHIgIlN5c3RlbSBwbGlr83c/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NzA3IHBhcnRlZC9wYXJ0ZWQuYzo4NzgKK21zZ2lkICJQYXJ0aXRpb24gdHlwZT8iCittc2dzdHIgIlR5cCBwYXJ0eWNqaT8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo3MTQgcGFydGVkL3BhcnRlZC5jOjg4NSBwYXJ0ZWQvcGFydGVkLmM6MTEzMQorbXNnaWQgIlBhcnRpdGlvbiBuYW1lPyIKK21zZ3N0ciAiTmF6d2EgcGFydHljamk/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NzIyIHBhcnRlZC9wYXJ0ZWQuYzo4OTUKK21zZ2lkICJGaWxlIHN5c3RlbSB0eXBlPyIKK21zZ3N0ciAiVHlwIHN5c3RlbXUgcGxpa/N3PyIKKworIzogcGFydGVkL3BhcnRlZC5jOjcyOSBwYXJ0ZWQvcGFydGVkLmM6ODk3IHBhcnRlZC9wYXJ0ZWQuYzoxMDU5CisjOiBwYXJ0ZWQvcGFydGVkLmM6MTcyNSBwYXJ0ZWQvcGFydGVkLmM6MTc4MAorbXNnaWQgIlN0YXJ0PyIKK21zZ3N0ciAiUG9jerF0ZWs/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NzMxIHBhcnRlZC9wYXJ0ZWQuYzo5MDAgcGFydGVkL3BhcnRlZC5jOjEwNjIKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNzI3IHBhcnRlZC9wYXJ0ZWQuYzoxNzgyCittc2dpZCAiRW5kPyIKK21zZ3N0ciAiS29uaWVjPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjc2OSBwYXJ0ZWQvcGFydGVkLmM6OTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgcmVxdWVzdGVkIGEgcGFydGl0aW9uIGZyb20gJXMgdG8gJXMuXG4iCisiVGhlIGNsb3Nlc3QgbG9jYXRpb24gd2UgY2FuIG1hbmFnZSBpcyAlcyB0byAlcy4gIElzIHRoaXMgc3RpbGwgYWNjZXB0YWJsZSB0byAiCisieW91PyIKK21zZ3N0ciAiIgorIld5YnJhbm8gcGFydHljauogb2QgJXMgZG8gJXMuXG4iCisiTmFqYmxpv3N6YSB6IGpha7EgUGFydGVkIG1vv2Ugc29iaWUgcG9yYWR6aeYgamVzdCAlcyAtICVzLiBDenkgamVzdCB0byAiCisiYWtjZXB0b3dhbG5lPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjg5MAorbXNnaWQgIkFuIGV4dGVuZGVkIHBhcnRpdGlvbiBjYW5ub3QgaG9sZCBhIGZpbGUgc3lzdGVtLiAgRGlkIHlvdSB3YW50IG1rcGFydD8iCittc2dzdHIgIiIKKyJSb3pzemVyem9uYSBwYXJ0eWNqYSBuaWUgbW+/ZSB0cnp5bWHmIHN5c3RlbXUgcGxpa/N3LiAgQ3p5IGNob2R6abNvIENpIG8gIgorIm1rcGFydD8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMDUwCittc2dpZCAiQ2FuJ3QgbW92ZSBhbiBleHRlbmRlZCBwYXJ0aXRpb24uIgorbXNnc3RyICJOaWUgbW+/bmEgcHJ6ZXN1brHmIHJvenN6ZXJ6b25laiBwYXJ0eWNqaS4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMDc5Cittc2dpZCAiQ2FuJ3QgbW92ZSBhIHBhcnRpdGlvbiBvbnRvIGl0c2VsZi4gIFRyeSB1c2luZyByZXNpemUsIHBlcmhhcHM/IgorbXNnc3RyICIiCisiTmllIG1vv25hIHByemVzdW6x5iBwYXJ0eWNqaSBuYSBzYW2xIHNpZWJpZS4gIE1vv2Ugc3By82J1aiB6bWllbmnmIGplaiAiCisicm96bWlhcj8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIk1pbm9yOiAlZFxuIgorbXNnc3RyICJOdW1lcjogJWRcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmxhZ3M6ICVzXG4iCittc2dzdHIgIkZsYWdpOiAlc1xuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIyOQorIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlIFN5c3RlbTogJXNcbiIKK21zZ3N0ciAiU3lzdGVtIHBsaWvzdzogJXNcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMzAKK21zZ2lkICJTaXplOiAgICAgICAgICIKK21zZ3N0ciAiUm96bWlhcjogICAgICAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjM1Cittc2dpZCAiTWluaW11bSBzaXplOiAiCittc2dzdHIgIk1pbmltYWxueSByb3ptaWFyOiAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjM4Cittc2dpZCAiTWF4aW11bSBzaXplOiAiCittc2dzdHIgIk1ha3N5bWFsbnkgcm96bWlhcjogIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJNb2RlbDogJXMgKCVzKVxuIgorbXNnc3RyICJNb2RlbDogJXMgKCVzKVxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTM2NAorIywgYy1mb3JtYXQKK21zZ2lkICJEaXNrICVzOiAlc1xuIgorbXNnc3RyICJEeXNrICVzOiAlc1xuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTM2NQorIywgYy1mb3JtYXQKK21zZ2lkICJTZWN0b3Igc2l6ZSAobG9naWNhbC9waHlzaWNhbCk6ICVsbGRCLyVsbGRCXG4iCittc2dzdHIgIlJvem1pYXIgc2VrdG9yYSAobG9naWN6bnkvZml6eWN6bnkpOiAlbGxkQi8lbGxkQlxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTM4MworIywgYy1mb3JtYXQKK21zZ2lkICJCSU9TIGN5bGluZGVyLGhlYWQsc2VjdG9yIGdlb21ldHJ5OiAlZCwlZCwlZC4gIEVhY2ggY3lsaW5kZXIgaXMgJXMuXG4iCittc2dzdHIgIiIKKyJHZW9tZXRyaWEgQklPUyBjeWxpbmRlcixns293aWNhLHNla3RvcjogJWQsJWQsJWQuICBLYb9keSBjeWxpbmRlciBtYSAlcy5cbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEzOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGFydGl0aW9uIFRhYmxlOiAlc1xuIgorbXNnc3RyICJUYWJsaWNhIHBhcnR5Y2ppOiAlc1xuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQwNiBwYXJ0ZWQvcGFydGVkLmM6MTQwOQorbXNnaWQgIk51bWJlciIKK21zZ3N0ciAiTnVtZXIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDA2IHBhcnRlZC9wYXJ0ZWQuYzoxNDA5Cittc2dpZCAiU3RhcnQiCittc2dzdHIgIlBvY3qxdGVrIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQwNyBwYXJ0ZWQvcGFydGVkLmM6MTQxMAorbXNnaWQgIkVuZCIKK21zZ3N0ciAiS29uaWVjIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQxMAorbXNnaWQgIlNpemUiCittc2dzdHIgIlJvem1pYXIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDE0Cittc2dpZCAiVHlwZSIKK21zZ3N0ciAiVHlwIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQxNgorbXNnaWQgIkZpbGUgc3lzdGVtIgorbXNnc3RyICJTeXN0ZW0gcGxpa/N3IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQxOQorbXNnaWQgIk5hbWUiCittc2dzdHIgIk5hendhIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQyMQorbXNnaWQgIkZsYWdzIgorbXNnc3RyICJGbGFnYSIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0NzcKK21zZ2lkICJGcmVlIFNwYWNlIgorbXNnc3RyICJXb2xuZSBtaWVqc2NlIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTYyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQSAlcyAlcyBwYXJ0aXRpb24gd2FzIGZvdW5kIGF0ICVzIC0+ICVzLiAgRG8geW91IHdhbnQgdG8gYWRkIGl0IHRvIHRoZSAiCisicGFydGl0aW9uIHRhYmxlPyIKK21zZ3N0ciAiIgorIlBhcnR5Y2phICVzICVzIHpvc3Rhs2Egem5hbGV6aW9uYSBuYSAlcyAtPiAlcy4gIEN6eSBjaGNlc3ogarEgZG9kYeYgZG8gIgorInRhYmxpY3kgcGFydHljamk/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTY2MworbXNnaWQgInNlYXJjaGluZyBmb3IgZmlsZSBzeXN0ZW1zIgorbXNnc3RyICJzenVrYW0gc3lzdGVt83cgcGxpa/N3IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTg3NworbXNnaWQgIk5ldyBkZXZpY2U/IgorbXNnc3RyICJOb3dlIHVyerFkemVuaWU/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTkwMgorbXNnaWQgIkZsYWcgdG8gSW52ZXJ0PyIKK21zZ3N0ciAiRmxhZ2EgZG8gcHJ6ZXN0YXdpZW5pYT8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxOTA3Cittc2dpZCAiTmV3IHN0YXRlPyIKK21zZ3N0ciAiTm93eSBzdGFuPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjE5NDQKK21zZ2lkICJVbml0PyIKK21zZ3N0ciAiSmVkbm9zdGthPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjIwOTMKK21zZ2lkICJjaGVjayIKK21zZ3N0ciAic3ByYXdkvCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIwOTYKK21zZ2lkICIiCisiY2hlY2sgTlVNQkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyBhIHNpbXBsZSBjaGVjayBvbiB0aGUgZmlsZSBzeXN0ZW0iCittc2dzdHIgIiIKKyJjaGVjayBOVU1FUiAgICAgICAgICAgICAgICAgICB3eWtvbnVqZSBwcm9zdGUgc3ByYXdkemVuaWUgc3lzdGVtdSBwbGlr83ciCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTAyCittc2dpZCAiY3AiCittc2dzdHIgImtvcGl1aiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMDUKK21zZ2lkICIiCisiY3AgW0ZST00tREVWSUNFXSBGUk9NLU5VTUJFUiBUTy1OVU1CRVIgICBjb3B5IGZpbGUgc3lzdGVtIHRvIGFub3RoZXIgIgorInBhcnRpdGlvbiIKK21zZ3N0ciAiIgorImNwIFtVUlqhRFpFTklFLaxS00SjT1dFXSBOVU1FUi2sUtNEo09XWSBOVU1FUi1ET0NFTE9XWSAga29waXVqZSBzeXN0ZW0gIgorInBsaWvzdyBuYSBpbm6xIHBhcnR5Y2rqIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjExMQorbXNnaWQgImhlbHAiCittc2dzdHIgInBvbW9jIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjExNAorIywgZnV6enkKK21zZ2lkICIiCisiaGVscCBbQ09NTUFORF0gICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCBnZW5lcmFsIGhlbHAsIG9yIGhlbHAgb24gIgorIkNPTU1BTkQiCittc2dzdHIgIiIKKyJwb21vYyBbS09NRU5EQV0gICAgICAgICAgICAgICB3ebZ3aWV0bGEgcG9tb2Mgb2fzbG6xIGx1YiBkb3R5Y3qxY7EgS09NRU5EWSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMjAKK21zZ2lkICJta2xhYmVsIgorbXNnc3RyICJta2xhYmVsIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEyMAorbXNnaWQgIm1rdGFibGUiCittc2dzdHIgIm1rdGFibGUiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTIzCittc2dpZCAiIgorIm1rbGFiZWwsbWt0YWJsZSBMQUJFTC1UWVBFICAgICAgICAgICAgICAgY3JlYXRlIGEgbmV3IGRpc2tsYWJlbCAocGFydGl0aW9uICIKKyJ0YWJsZSkiCittc2dzdHIgIiIKKyJta2xhYmVsLG1rdGFibGUgVFlQLUVUWUtJRVRZICB0d29yenkgbm93sSBldHlraWV06iBkeXNrdSAodGFibGlj6iBwYXJ0eWNqaSkiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTI5Cittc2dpZCAibWtmcyIKK21zZ3N0ciAibWtmcyIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMzIKK21zZ2lkICIiCisibWtmcyBOVU1CRVIgRlMtVFlQRSAgICAgICAgICAgICAgICAgICAgICBtYWtlIGEgRlMtVFlQRSBmaWxlIHN5c3RlbSBvbiAiCisicGFydGl0aXRvbiBOVU1CRVIiCittc2dzdHIgIm1rZnMgTlVNRVIgU1lTVEVNLVBMSUvTVyAgICAgIHR3b3J6eSBzeXN0ZW0gcGxpa/N3IG5hIHBhcnR5Y2ppIE5VTUVSIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEzOAorbXNnaWQgIm1rcGFydCIKK21zZ3N0ciAibWtwYXJ0IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE0MQorbXNnaWQgIm1rcGFydCBQQVJULVRZUEUgW0ZTLVRZUEVdIFNUQVJUIEVORCAgICAgbWFrZSBhIHBhcnRpdGlvbiIKK21zZ3N0ciAibWtwYXJ0IFRZUC1QQVJUWUNKSSBbU1lTVEVNLVBMSUvTV10gUE9DWqFURUsgS09OSUVDICAgdHdvcnp5IHBhcnR5Y2rqIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE0NworIywgZnV6enkKK21zZ2lkICIiCisiJ21rcGFydCcgbWFrZXMgYSBwYXJ0aXRpb24gd2l0aG91dCBjcmVhdGluZyBhIG5ldyBmaWxlIHN5c3RlbSBvbiB0aGUgIgorInBhcnRpdGlvbi4gIEZTLVRZUEUgbWF5IGJlIHNwZWNpZmllZCB0byBzZXQgYW4gYXBwcm9wcmlhdGUgcGFydGl0aW9uIElELlxuIgorbXNnc3RyICIiCisiS29tZW5kYSBta3BhcnQgdHdvcnp5IHBhcnR5Y2rqIGJleiB0d29yemVuaWEgbm93ZWdvIHN5c3RlbXUgcGxpa/N3IG5hIHRlaiAiCisicGFydHljamkuICBPcGNqb25hbG55IFNZU1RFTS1QTElL01cgbW+/ZSB6b3N0YeYgcG9kYW55IGRvIG9rcmW2bGVuaWEgIgorInezYbZjaXdlZ28gaWRlbnR5ZmlrYXRvcmEgcGFydHljamkuXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTUyCittc2dpZCAibWtwYXJ0ZnMiCittc2dzdHIgIm1rcGFydGZzIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE1NQorbXNnaWQgIiIKKyJta3BhcnRmcyBQQVJULVRZUEUgRlMtVFlQRSBTVEFSVCBFTkQgICAgIG1ha2UgYSBwYXJ0aXRpb24gd2l0aCBhIGZpbGUgc3lzdGVtIgorbXNnc3RyICIiCisibWtwYXJ0ZnMgVFlQLVBBUlRZQ0pJIFNZU1RFTS1QTElL01cgUE9DWqFURUsgS09OSUVDICAgdHdvcnp5IHBhcnR5Y2rqIHogIgorInN5c3RlbWVtIHBsaWvzdyIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNjEKK21zZ2lkICJtb3ZlIgorbXNnc3RyICJwcnplc3XxIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE2NAorbXNnaWQgIm1vdmUgTlVNQkVSIFNUQVJUIEVORCAgICAgICAgICAgICAgICAgICAgbW92ZSBwYXJ0aXRpb24gTlVNQkVSIgorbXNnc3RyICJtb3ZlIE5VTUVSIFBPQ1qhVEVLIEtPTklFQyAgICBwcnplc3V3YSBwYXJ0eWNq6iBOVU1FUiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNjkKK21zZ2lkICJuYW1lIgorbXNnc3RyICJuYXp3YSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNzIKK21zZ2lkICJuYW1lIE5VTUJFUiBOQU1FICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgcGFydGl0aW9uIE5VTUJFUiBhcyBOQU1FIgorbXNnc3RyICJuYW1lIE5VTUVSIE5BWldBICAgICAgICAgICAgICBuYWRhamUgTkFaV8ogcGFydHljamkgTlVNRVIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTc3Cittc2dpZCAicHJpbnQiCittc2dzdHIgImRydWt1aiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxODAKK21zZ2lkICIiCisicHJpbnQgW2RldmljZXN8ZnJlZXxsaXN0LGFsbHxOVU1CRVJdICAgICBkaXNwbGF5IHRoZSBwYXJ0aXRpb24gdGFibGUsICIKKyJhdmFpbGFibGUgZGV2aWNlcywgZnJlZSBzcGFjZSwgYWxsIGZvdW5kIHBhcnRpdGlvbnMsIG9yIGEgcGFydGljdWxhciAiCisicGFydGl0aW9uIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTg1Cittc2dpZCAiIgorIldpdGhvdXQgYXJndW1lbnRzLCAncHJpbnQnIGRpc3BsYXlzIHRoZSBlbnRpcmUgcGFydGl0aW9uIHRhYmxlLiBIb3dldmVyIHdpdGggIgorInRoZSBmb2xsb3dpbmcgYXJndW1lbnRzIGl0IHBlcmZvcm1zIHZhcmlvdXMgb3RoZXIgYWN0aW9ucy5cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE4NworbXNnaWQgIiAgZGV2aWNlcyAgIDogZGlzcGxheSBhbGwgYWN0aXZlIGJsb2NrIGRldmljZXNcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE4OAorbXNnaWQgIiIKKyIgIGZyZWUgICAgICA6IGRpc3BsYXkgaW5mb3JtYXRpb24gYWJvdXQgZnJlZSB1bnBhcnRpdGlvbmVkIHNwYWNlIG9uIHRoZSAiCisiY3VycmVudCBibG9jayBkZXZpY2VcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE5MAorIywgZnV6enkKK21zZ2lkICIiCisiICBsaXN0LCBhbGwgOiBkaXNwbGF5IHRoZSBwYXJ0aXRpb24gdGFibGVzIG9mIGFsbCBhY3RpdmUgYmxvY2sgZGV2aWNlc1xuIgorbXNnc3RyICJ3eXBpc3VqZSB0YWJsaWNlIHBhcnR5Y2ppIHdzenlzdGtpY2ggd3lrcnl0eWNoIHVyerFkemXxIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE5MQorbXNnaWQgIiIKKyIgIE5VTUJFUiAgICA6IGRpc3BsYXkgbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIHBhcnRpY3VsYXIgIgorInBhcnRpdGlvblxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTk2Cittc2dpZCAicXVpdCIKK21zZ3N0ciAia29uaWVjIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE5OQorbXNnaWQgInF1aXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCBwcm9ncmFtIgorbXNnc3RyICJxdWl0ICAgICAgICAgICAgICAgICAgICAgICAgICBrb/FjenkgcHJhY+ogcHJvZ3JhbXUiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjA0Cittc2dpZCAicmVzY3VlIgorbXNnc3RyICJ1cmF0dWoiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjA3Cittc2dpZCAiIgorInJlc2N1ZSBTVEFSVCBFTkQgICAgICAgICAgICAgICAgICAgICAgICAgcmVzY3VlIGEgbG9zdCBwYXJ0aXRpb24gbmVhciBTVEFSVCAiCisiYW5kIEVORCIKK21zZ3N0ciAiIgorInJlc2N1ZSBQT0NaoVRFSyBLT05JRUMgICAgICAgIG9kenlza3VqZSB1dHJhY29usSBwYXJ0eWNq6iBibGlza28gUE9DWqFUS1UgaSAiCisiS0/RQ0EiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjEzCittc2dpZCAicmVzaXplIgorbXNnc3RyICJyb3ptaWFyIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIxNgorbXNnaWQgIiIKKyJyZXNpemUgTlVNQkVSIFNUQVJUIEVORCAgICAgICAgICAgICAgICAgIHJlc2l6ZSBwYXJ0aXRpb24gTlVNQkVSIGFuZCBpdHMgIgorImZpbGUgc3lzdGVtIgorbXNnc3RyICIiCisicmVzaXplIE5VTUVSIFBPQ1qhVEVLIEtPTklFQyAgem1pZW5pYSByb3ptaWFyIHN5c3RlbXUgcGxpa/N3IGkgcGFydHljamkgTlVNRVIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjI0Cittc2dpZCAicm0iCittc2dzdHIgInVzdfEiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjI3Cittc2dpZCAicm0gTlVNQkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcGFydGl0aW9uIE5VTUJFUiIKK21zZ3N0ciAicm0gTlVNRVIgICAgICAgICAgICAgICAgICAgICAgdXN1d2EgcGFydHljauogTlVNRVIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjMyCittc2dpZCAic2VsZWN0IgorbXNnc3RyICJ3eWJpZXJ6IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIzNQorbXNnaWQgInNlbGVjdCBERVZJQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvb3NlIHRoZSBkZXZpY2UgdG8gZWRpdCIKK21zZ3N0ciAic2VsZWN0IFVSWqFEWkVOSUUgICAgICAgICAgICAgd3liaWVyYSB1cnqxZHplbmllIGRvIGVkeWNqaSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNDAKK21zZ2lkICJzZXQiCittc2dzdHIgInVzdGF3IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI0MworbXNnaWQgIiIKKyJzZXQgTlVNQkVSIEZMQUcgU1RBVEUgICAgICAgICAgICAgICAgICAgIGNoYW5nZSB0aGUgRkxBRyBvbiBwYXJ0aXRpb24gTlVNQkVSIgorbXNnc3RyICJzZXQgTlVNRVIgRkxBR0EgU1RBTiAgICAgICAgICB6bWllbmlhIGZsYWfqIG5hIHBhcnR5Y2ppIE5VTUVSIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI0OQorbXNnaWQgInRvZ2dsZSIKK21zZ3N0ciAicHJ6ZXN0YXciCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjUyCittc2dpZCAiIgorInRvZ2dsZSBbTlVNQkVSIFtGTEFHXV0gICAgICAgICAgICAgICAgICAgdG9nZ2xlIHRoZSBzdGF0ZSBvZiBGTEFHIG9uICIKKyJwYXJ0aXRpb24gTlVNQkVSIgorbXNnc3RyICJ0b2dnbGUgW05VTUVSIFtGTEFHQV1dICAgICAgICBwcnplc3Rhd2lhIHN0YW4gRkxBR0kgbmEgcGFydHljamkgTlVNRVIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjU4Cittc2dpZCAidW5pdCIKK21zZ3N0ciAiamVkbm9zdGthIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI2MQorbXNnaWQgInVuaXQgVU5JVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0IHRoZSBkZWZhdWx0IHVuaXQgdG8gVU5JVCIKK21zZ3N0ciAidW5pdCBKRUROT1NUS0EgICAgICAgICAgICAgICAgdXN0YXdpYSBkb215tmxusSBqZWRub3N0a+oiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjY2Cittc2dpZCAidmVyc2lvbiIKK21zZ3N0ciAid2Vyc2phIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI2OQorIywgZnV6enkKK21zZ2lkICIiCisidmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5IHRoZSB2ZXJzaW9uIG51bWJlciBhbmQgIgorImNvcHlyaWdodCBpbmZvcm1hdGlvbiBvZiBHTlUgUGFydGVkIgorbXNnc3RyICIiCisidmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICAgd3m2d2lldGxhIGFrdHVhbG6xIHdlcnNq6iBHTlUgUGFydGVkYSBpICIKKyJpbmZvcm1hY2plIG8gcHJhd2FjaCBhdXRvcnNraWNoIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI3MworIywgZnV6enkKK21zZ2lkICIiCisiJ3ZlcnNpb24nIGRpc3BsYXlzIGNvcHlyaWdodCBhbmQgdmVyc2lvbiBpbmZvcm1hdGlvbiBjb3JyZXNwb25kaW5nIHRvIHRoaXMgIgorImNvcHkgb2YgR05VIFBhcnRlZFxuIgorbXNnc3RyICIiCisidmVyc2lvbiB3ebZ3aWV0bGEgaW5mb3JtYWNqZSBvIHByYXdhY2ggYXV0b3Jza2ljaCBpIHdlcnNqaSBkbGEgdGVqIGtvcGlpIEdOVSAiCisiUGFydGVkYVxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjMzNQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1obG1zdl0gW0RFVklDRSBbQ09NTUFORCBbUEFSQU1FVEVSU11dLi4uXVxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMzc5Cittc2dpZCAiTm8gZGV2aWNlIGZvdW5kIgorbXNnc3RyICJOaWUgem5hbGV6aW9ubyB1cnqxZHplbmlhIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjQxMgorIywgZnV6enkKK21zZ2lkICJXQVJOSU5HOiBZb3UgYXJlIG5vdCBzdXBlcnVzZXIuICBXYXRjaCBvdXQgZm9yIHBlcm1pc3Npb25zLiIKK21zZ3N0ciAiVVdBR0E6IE5pZSBqZXN0ZbYgc3VwZXJ1v3l0a293bmlraWVtLiBVd2G/YWogbmEgdXByYXduaWVuaWEuXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyNDUwCisjLCBmdXp6eQorbXNnaWQgIllvdSBtYXkgbmVlZCB0byB1cGRhdGUgL2V0Yy9mc3RhYi5cbiIKK21zZ3N0ciAiIgorIk5pZSB6YXBvbW5paiBvIGFrdHVhbGl6YWNqaSAvZXRjL2ZzdGFiLCBqZbZsaSBpc3RuaWVqZSB0YWthIHBvdHJ6ZWJhLlxuIgorCisjOiBwYXJ0ZWQvdWkuYzoxNjAKK21zZ2lkICJXZWxjb21lIHRvIEdOVSBQYXJ0ZWQhIFR5cGUgJ2hlbHAnIHRvIHZpZXcgYSBsaXN0IG9mIGNvbW1hbmRzLlxuIgorbXNnc3RyICIiCisiV2l0YW15IHcgR05VIFBhcnRlZHppZSEgTGlzdOoga29tZW5kIG1vv25hIHpvYmFjennmIHBvIG5hcGlzYW5pdSAnaGVscCcuXG4iCisKKyM6IHBhcnRlZC91aS5jOjE2MworbXNnaWQgIiIKKyJVc2FnZTogcGFydGVkIFtPUFRJT05dLi4uIFtERVZJQ0UgW0NPTU1BTkQgW1BBUkFNRVRFUlNdLi4uXS4uLl1cbiIKKyJBcHBseSBDT01NQU5EcyB3aXRoIFBBUkFNRVRFUlMgdG8gREVWSUNFLiAgSWYgbm8gQ09NTUFORChzKSBhcmUgZ2l2ZW4sIHJ1biAiCisiaW5cbiIKKyJpbnRlcmFjdGl2ZSBtb2RlLlxuIgorbXNnc3RyICIiCisiU2uzYWRuaWE6IHBhcnRlZCBbT1BDSkFdLi4uIFtVUlqhRFpFTklFIFtLT01FTkRBIFtQQVJBTUVUUlldLi4uXS4uLl1cbiIKKyJXeWtvbnVqZSBLT01FTkRZIHogUEFSQU1FVFJBTUkgZGxhIFVSWqFEWkVOSUEuICBKZbZsaSBuaWUgcG9kYW5vIEtPTUVORChZKSxcbiIKKyJwcm9ncmFtIHpvc3RhbmllIHVydWNob21pb255IHcgdHJ5YmllIGludGVyYWt0eXdueW0uXG4iCisKKyM6IHBhcnRlZC91aS5jOjE2OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlxuIgorIllvdSBmb3VuZCBhIGJ1ZyBpbiBHTlUgUGFydGVkISBIZXJlJ3Mgd2hhdCB5b3UgaGF2ZSB0byBkbzpcbiIKKyJcbiIKKyJEb24ndCBwYW5pYyEgVGhlIGJ1ZyBoYXMgbW9zdCBsaWtlbHkgbm90IGFmZmVjdGVkIGFueSBvZiB5b3VyIGRhdGEuXG4iCisiSGVscCB1cyB0byBmaXggdGhpcyBidWcgYnkgZG9pbmcgdGhlIGZvbGxvd2luZzpcbiIKKyJcbiIKKyJDaGVjayB3aGV0aGVyIHRoZSBidWcgaGFzIGFscmVhZHkgYmVlbiBmaXhlZCBieSBjaGVja2luZ1xuIgorInRoZSBsYXN0IHZlcnNpb24gb2YgR05VIFBhcnRlZCB0aGF0IHlvdSBjYW4gZmluZCBhdDpcbiIKKyJcbiIKKyJcdGh0dHA6Ly9mdHAuZ251Lm9yZy9nbnUvcGFydGVkL1xuIgorIlxuIgorIlBsZWFzZSBjaGVjayB0aGlzIHZlcnNpb24gcHJpb3IgdG8gYnVnIHJlcG9ydGluZy5cbiIKKyJcbiIKKyJJZiB0aGlzIGhhcyBub3QgYmVlbiBmaXhlZCB5ZXQgb3IgaWYgeW91IGRvbid0IGtub3cgaG93IHRvIGNoZWNrLFxuIgorInBsZWFzZSB2aXNpdCB0aGUgR05VIFBhcnRlZCB3ZWJzaXRlOlxuIgorIlxuIgorIlx0aHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3BhcnRlZFxuIgorIlxuIgorImZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLlxuIgorIlxuIgorIllvdXIgcmVwb3J0IHNob3VsZCBjb250YWluIHRoZSB2ZXJzaW9uIG9mIHRoaXMgcmVsZWFzZSAoJXMpXG4iCisiYWxvbmcgd2l0aCB0aGUgZXJyb3IgbWVzc2FnZSBiZWxvdywgdGhlIG91dHB1dCBvZlxuIgorIlxuIgorIlx0cGFydGVkIERFVklDRSB1bml0IGNvIHByaW50IHVuaXQgcyBwcmludFxuIgorIlxuIgorImFuZCB0aGUgZm9sbG93aW5nIGhpc3Rvcnkgb2YgY29tbWFuZHMgeW91IGVudGVyZWQuXG4iCisiQWxzbyBpbmNsdWRlIGFueSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHlvdXIgc2V0dXAgeW91XG4iCisiY29uc2lkZXIgaW1wb3J0YW50LlxuIgorbXNnc3RyICIiCisiXG4iCisiXG4iCisiWm5hbGF6s2W2IGKzsWQgdyBwcm9ncmFtaWUgR05VIFBhcnRlZCEgUG9uab9laiB6bmFqZHVqZSBzaeogaW5zdHJ1a2NqYSAiCisicG9zdOpwb3dhbmlhOlxuIgorIlxuIgorIk5pZSBwYW5pa3VqISBCs7FkIG5hanByYXdkb3BvZG9ibmllaiBuaWUgZG90a26xsyC/YWRueWNoIHR3b2ljaCBkYW55Y2guXG4iCisiUG9t878gbmFtIHBvcHJhd2nmIHRlbiBis7FkIHd5a29udWqxYyBuYXN06nB1arFjZSBjenlubm+2Y2k6XG4iCisiXG4iCisiU3ByYXdkvCwgY3p5IGKzsWQgem9zdGGzIGp1vyBwb3ByYXdpb255IHNwcmF3ZHpharFjIG5ham5vd3N6sSB3ZXJzauogR05VICIKKyJQYXJ0ZWRhXG4iCisiZG9zdOpwbrEgcG9kIGFkcmVzZW06XG4iCisiXG4iCisiXHRodHRwOi8vZnRwLmdudS5vcmcvZ251L3BhcnRlZC9cbiIKKyJcbiIKKyJQcm9zeuogc3ByYXdkemnmIHTqIHdlcnNq6iBwcnplZCB6Z7Nhc3phbmllbSBis+pkdS5cbiIKKyJcbiIKKyJKZbZsaSBis7FkIG5pZSB6b3N0YbMgamVzemN6ZSBwb3ByYXdpb255IGx1YiBuaWUgd2llc3osIGphayB0byBzcHJhd2R6aeYsXG4iCisicHJvc3rqIG9kd2llZHpp5iBzdHJvbuogR05VIFBhcnRlZGE6XG4iCisiXG4iCisiXHRodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvcGFydGVkXG4iCisiXG4iCisiZ2R6aWUgem5hamR1amUgc2nqIHdp6mNlaiBpbmZvcm1hY2ppLlxuIgorIlxuIgorIlpns29zemVuaWUgYrPqZHUgcG93aW5ubyB6YXdpZXJh5iB3ZXJzauogdGVnbyB3eWRhbmlhICglcylcbiIKKyJ3cmF6IHogcG9uab9zenltIGtvbXVuaWthdGVtIG8gYrPqZHppZSwgd3lqtmNpZW0gcG9sZWNlbmlhXG4iCisiXG4iCisiXHRwYXJ0ZWQgVVJaoURaRU5JRSB1bml0IGNvIHByaW50IHVuaXQgcyBwcmludFxuIgorIlxuIgorImkgZG9kYXRrb3d5bWkgaW5mb3JtYWNqYW1pIG8ga29uZmlndXJhY2ppLCBrdPNyZSB1d2G/YXN6IHphIGlzdG90bmUuXG4iCisKKyM6IHBhcnRlZC91aS5jOjI4NAorbXNnaWQgIiIKKyJcbiIKKyJDb21tYW5kIEhpc3Rvcnk6XG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6MzY2CisjLCBmdXp6eQorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogU0VHVl9NQVBFUlIgKEFkZHJlc3Mgbm90IG1hcHBlZCB0byBvYmplY3QpXG4iCittc2dzdHIgIiIKKyJcbiIKKyJCs7FkOiBTRUdWX01BUEVSUiAoQWRyZXMgbmllIG9kd3pvcm93YW55IG5hIG9iaWVrY2llKSIKKworIzogcGFydGVkL3VpLmM6MzcyCisjLCBmdXp6eQorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogU0VHVl9BQ0NFUlIgKEludmFsaWQgcGVybWlzc2lvbnMgZm9yIG1hcHBlZCBvYmplY3QpXG4iCittc2dzdHIgIiIKKyJcbiIKKyJCs7FkOiBTRUdWX0FDQ0VSUiAoTmllcHJhd2lks293ZSB1cHJhd25pZW5pYSBkbGEgb2R3em9yb3dhbmVnbyBvYmlla3R1KSIKKworIzogcGFydGVkL3VpLmM6Mzc3CisjLCBmdXp6eQorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogQSBnZW5lcmFsIFNJR1NFR1Ygc2lnbmFsIHdhcyBlbmNvdW50ZXJlZC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkKzsWQ6IFd5c3SxcGmzIG9n82xueSBzeWduYbMgU0lHU0VHVi4iCisKKyM6IHBhcnRlZC91aS5jOjQxMAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0lOVERJViAoSW50ZWdlcjogZGl2aWRlIGJ5IHplcm8pIgorbXNnc3RyICIiCisiXG4iCisiQrOxZDogRlBFX0lOVERJViAoZHppZWxlbmllIHByemV6IHplcm8gbmEgbGljemJhY2ggY2Gza293aXR5Y2gpIgorCisjOiBwYXJ0ZWQvdWkuYzo0MTUKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9JTlRPVkYgKEludGVnZXI6IG92ZXJmbG93KSIKK21zZ3N0ciAiIgorIlxuIgorIkKzsWQ6IEZQRV9JTlRPVkYgKHByemVwZbNuaWVuaWUgZGxhIGxpY3pieSBjYbNrb3dpdGVqKSIKKworIzogcGFydGVkL3VpLmM6NDIwCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxURElWIChGbG9hdDogZGl2aWRlIGJ5IHplcm8pIgorbXNnc3RyICIiCisiXG4iCisiQrOxZDogRlBFX0ZMVERJViAoZHppZWxlbmllIHByemV6IHplcm8gbmEgbGljemJhY2ggem1pZW5ub3ByemVjaW5rb3d5Y2gpIgorCisjOiBwYXJ0ZWQvdWkuYzo0MjUKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRPVkYgKEZsb2F0OiBvdmVyZmxvdykiCittc2dzdHIgIiIKKyJcbiIKKyJCs7FkOiBGUEVfRkxUT1ZGIChwcnplcGWzbmllbmllIGRsYSBsaWN6Ynkgem1pZW5ub3ByemVjaW5rb3dlaikiCisKKyM6IHBhcnRlZC91aS5jOjQzMAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0ZMVFVORCAoRmxvYXQ6IHVuZGVyZmxvdykiCittc2dzdHIgIiIKKyJcbiIKKyJCs7FkOiBGUEVfRkxUVU5EIChuaWVkb3Bls25pZW5pZSBkbGEgbGljemJ5IHptaWVubm9wcnplY2lua293ZWopIgorCisjOiBwYXJ0ZWQvdWkuYzo0MzUKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRSRVMgKEZsb2F0OiBpbmV4YWN0IHJlc3VsdCkiCittc2dzdHIgIiIKKyJcbiIKKyJCs7FkOiBGUEVfRkxUUkVTIChuaWVkb2uzYWRueSB3eW5payBkbGEgbGljemIgem1pZW5ub3ByemVjaW5rb3d5Y2gpIgorCisjOiBwYXJ0ZWQvdWkuYzo0NDAKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRJTlYgKEZsb2F0OiBpbnZhbGlkIG9wZXJhdGlvbikiCittc2dzdHIgIiIKKyJcbiIKKyJCs7FkOiBGUEVfRkxUSU5WIChuaWVwcmF3aWSzb3dhIG9wZXJhY2phIGRsYSBsaWN6YiB6bWllbm5vcHJ6ZWNpbmtvd3ljaCkiCisKKyM6IHBhcnRlZC91aS5jOjQ0NQorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0ZMVFNVQiAoRmxvYXQ6IHN1YnNjcmlwdCBvdXQgb2YgcmFuZ2UpIgorbXNnc3RyICIiCisiXG4iCisiQrOxZDogRlBFX0ZMVFNVQiAoaW5kZWtzIHNwb3phIHpha3Jlc3UgZGxhIGxpY3piIHptaWVubm9wcnplY2lua293eWNoKSIKKworIzogcGFydGVkL3VpLmM6NDUwCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBBIGdlbmVyYWwgU0lHRlBFIHNpZ25hbCB3YXMgZW5jb3VudGVyZWQuIgorbXNnc3RyICIiCisiXG4iCisiQrOxZDogV3lzdLFwabMgb2fzbG55IHN5Z25hsyBTSUdGUEUuIgorCisjOiBwYXJ0ZWQvdWkuYzo0ODMKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9JTExPUEMgKElsbGVnYWwgT3Bjb2RlKSIKK21zZ3N0ciAiIgorIlxuIgorIkKzsWQ6IElMTF9JTExPUEMgKG5pZWRvendvbG9ueSBrb2QgaW5zdHJ1a2NqaSkiCisKKyM6IHBhcnRlZC91aS5jOjQ4OAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX0lMTE9QTiAoSWxsZWdhbCBPcGVyYW5kKSIKK21zZ3N0ciAiIgorIlxuIgorIkKzsWQ6IElMTF9JTExPUE4gKG5pZWRvendvbG9ueSBvcGVyYW5kKSIKKworIzogcGFydGVkL3VpLmM6NDkzCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfSUxMQURSIChJbGxlZ2FsIGFkZHJlc3NpbmcgbW9kZSkiCittc2dzdHIgIiIKKyJcbiIKKyJCs7FkOiBJTExfSUxMQURSIChuaWVkb3p3b2xvbnkgdHJ5YiBhZHJlc293YW5pYSkiCisKKyM6IHBhcnRlZC91aS5jOjQ5OAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX0lMTFRSUCAoSWxsZWdhbCBUcmFwKSIKK21zZ3N0ciAiIgorIlxuIgorIkKzsWQ6IElMTF9JTExUUlAgKG5pZWRvendvbG9uYSBwdbNhcGthKSIKKworIzogcGFydGVkL3VpLmM6NTAzCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfUFJWT1BDIChQcml2aWxlZ2VkIE9wY29kZSkiCittc2dzdHIgIiIKKyJcbiIKKyJCs7FkOiBJTExfUFJWT1BDICh1cHJ6eXdpbGVqb3dhbnkga29kIGluc3RydWtjamkpIgorCisjOiBwYXJ0ZWQvdWkuYzo1MDgKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9QUlZSRUcgKFByaXZpbGVnZWQgUmVnaXN0ZXIpIgorbXNnc3RyICIiCisiXG4iCisiQrOxZDogSUxMX1BSVlJFRyAodXByenl3aWxlam93YW55IHJlamVzdHIpIgorCisjOiBwYXJ0ZWQvdWkuYzo1MTMKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9DT1BST0MgKENvcHJvY2Vzc29yIEVycm9yKSIKK21zZ3N0ciAiIgorIlxuIgorIkKzsWQ6IElMTF9DT1BST0MgKGKzsWQga29wcm9jZXNvcmEpIgorCisjOiBwYXJ0ZWQvdWkuYzo1MTgKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9CQURTVEsgKEludGVybmFsIFN0YWNrIEVycm9yKSIKK21zZ3N0ciAiIgorIlxuIgorIkKzsWQ6IElMTF9CQURTVEsgKHdld27qdHJ6bnkgYrOxZCBzdG9zdSkiCisKKyM6IHBhcnRlZC91aS5jOjUyMworbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogQSBnZW5lcmFsIFNJR0lMTCBzaWduYWwgd2FzIGVuY291bnRlcmVkLiIKK21zZ3N0ciAiIgorIlxuIgorIkKzsWQ6IFd5c3SxcGmzIG9n82xueSBzeWduYbMgU0lHSUxMLiIKKworIzogcGFydGVkL3VpLmM6MTAyNAorbXNnaWQgIkV4cGVjdGluZyBhIHBhcnRpdGlvbiBudW1iZXIuIgorbXNnc3RyICJPY3pla2l3YW55IGJ5syBudW1lciBwYXJ0eWNqaS4iCisKKyM6IHBhcnRlZC91aS5jOjEwMzMKK21zZ2lkICJQYXJ0aXRpb24gZG9lc24ndCBleGlzdC4iCittc2dzdHIgIlBhcnR5Y2phIG5pZSBpc3RuaWVqZS4iCisKKyM6IHBhcnRlZC91aS5jOjEwNTMKK21zZ2lkICJFeHBlY3RpbmcgYSBmaWxlIHN5c3RlbSB0eXBlLiIKK21zZ3N0ciAiT2N6ZWtpd2FueSBiebMgdHlwIHN5c3RlbXUgcGxpa/N3LiIKKworIzogcGFydGVkL3VpLmM6MTA2MAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIGZpbGUgc3lzdGVtIHR5cGUgXCIlc1wiLiIKK21zZ3N0ciAiTmllem5hbnkgdHlwIHN5c3RlbXUgcGxpa/N3IFwiJXNcIi4iCisKKyM6IHBhcnRlZC91aS5jOjEwODAKK21zZ2lkICJFeHBlY3RpbmcgYSBkaXNrIGxhYmVsIHR5cGUuIgorbXNnc3RyICJPY3pla2l3YW55IGJ5syB0eXAgZXR5a2lldHkgZHlza3UuIgorCisjOiBwYXJ0ZWQvdWkuYzoxMTc4Cittc2dpZCAiQ2FuJ3QgY3JlYXRlIGFueSBtb3JlIHBhcnRpdGlvbnMuIgorbXNnc3RyICJOaWUgbW+/bmEgdXR3b3J6eeYgd2nqY2VqIHBhcnR5Y2ppLiIKKworIzogcGFydGVkL3VpLmM6MTE4OAorbXNnaWQgIkV4cGVjdGluZyBhIHBhcnRpdGlvbiB0eXBlLiIKK21zZ3N0ciAiT2N6ZWtpd2FueSBiebMgdHlwIHBhcnR5Y2ppLiIKKworIzogcGFydGVkL3VpLmM6MTMxNQorbXNnaWQgIm9uIgorbXNnc3RyICJ3s7Fjem9uZSIKKworIzogcGFydGVkL3VpLmM6MTMxNgorbXNnaWQgIm9mZiIKK21zZ3N0ciAid3mzsWN6b25lIgorCisjOiBwYXJ0ZWQvdWkuYzoxNDMxCittc2dpZCAiT1BUSU9OczoiCittc2dzdHIgIk9QQ0pFOiIKKworIzogcGFydGVkL3VpLmM6MTQzNgorbXNnaWQgIkNPTU1BTkRzOiIKK21zZ3N0ciAiS09NRU5EWToiCisKKyM6IHBhcnRlZC91aS5jOjE0NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNpbmcgJXNcbiIKK21zZ3N0ciAiVb95Y2llICVzXG4iCisKKyM6IHBhcnRlZC91aS5jOjE1MTkKK21zZ2lkICJUaGlzIGNvbW1hbmQgZG9lcyBub3QgbWFrZSBzZW5zZSBpbiBub24taW50ZXJhY3RpdmUgbW9kZS5cbiIKK21zZ3N0ciAiIgorCisjfiBtc2dpZCAiR05VIFBhcnRlZCBjYW5ub3QgcmVzaXplIHRoaXMgZmlsZSBzeXN0ZW0sIHBsZWFzZSB1c2VyZXNpemUyZnMuIgorI34gbXNnc3RyICIiCisjfiAiR05VIFBhcnRlZCBuaWUgcG90cmFmaSB6bWllbmnmIHJvem1pYXJ1IHRlZ28gc3lzdGVtdSBwbGlr83csIHByb3N66iB1v3nmICIKKyN+ICJyZXNpemUyZnMuIgorCisjfiBtc2dpZCAid2hlcmUgbmVjZXNzYXJ5LCBwcm9tcHRzIGZvciB1c2VyIGludGVydmVudGlvbiIKKyN+IG1zZ3N0ciAiZ2R5IGplc3QgcG90cnplYmEsIHByb3NpIG8gaW50ZXJ3ZW5jauogdb95dGtvd25pa2EiCisKKyN+IG1zZ2lkICJHTlUgUGFydGVkIFZlcnNpb24gaW5mb3JtYXRpb246XG4iCisjfiBtc2dzdHIgIkluZm9ybWFjamUgbyB3ZXJzamkgR05VIFBhcnRlZGE6XG4iCisKKyN+IG1zZ2lkICIiCisjfiAicHJpbnQgW2ZyZWV8TlVNQkVSfGFsbF0gICAgICAgICAgICAgICAgICBkaXNwbGF5IHRoZSBwYXJ0aXRpb24gdGFibGUsIGEgIgorI34gInBhcnRpdGlvbiwgb3IgYWxsIGRldmljZXMiCisjfiBtc2dzdHIgIiIKKyN+ICJwcmludCBbZnJlZXxOVU1FUnxhbGxdICAgICAgICB3ebZ3aWV0bGEgdGFibGlj6iBwYXJ0eWNqaSwgcGFydHljauogbHViICIKKyN+ICJ3c3p5c3RraWUgdXJ6sWR6ZW5pYSIKKworI34gbXNnaWQgIiIKKyN+ICJXaXRob3V0IGFyZ3VtZW50cywgcHJpbnQgZGlzcGxheXMgdGhlIGVudGlyZSBwYXJ0aXRpb24gdGFibGUuIFdpdGggIgorI34gIidmcmVlJ1xuIgorI34gImFyZ3VtZW50LCBpbmZvcm1hdGlvbiBhYm91dCBmcmVlIHNwYWNlIHdpbGwgYmUgZGlzcGxheWVkIG90aGVyd2lzZSBpZiBhXG4iCisjfiAicGFydGl0aW9uIG51bWJlciBpcyBnaXZlbiwgdGhlbiBtb3JlIGRldGFpbGVkIGluZm9ybWF0aW9uIGlzIGRpc3BsYXllZFxuIgorI34gImFib3V0IHRoYXQgcGFydGl0aW9uLiBJZiB0aGUgJ2FsbCcgYXJndW1lbnQgaXMgcGFzc2VkIGluc3RlYWQsIHBhcnRpdGlvblxuIgorI34gImluZm9ybWF0aW9uIGZvciBhbGwgZGV2aWNlcyB3aWxsIGJlIGRpc3BsYXllZC5cbiIKKyN+IG1zZ3N0ciAiIgorI34gIkJleiBwb2RhbmlhIGFyZ3VtZW5083csIGtvbWVuZGEgcHJpbnQgd3m2d2lldGxhIGNhs7EgdGFibGlj6iBwYXJ0eWNqaS5cbiIKKyN+ICJaIGFyZ3VtZW50ZW0gJ2ZyZWUnIHd5tndpZXRsYSBpbmZvcm1hY2plIG8gd29sbnltIG1pZWpzY3UsIG5hdG9taWFzdFxuIgorI34gImpltmxpIHBvZGFubyBOVU1FUiBwYXJ0eWNqaSwgd3RlZHkgd3m2d2lldGxvbmUgem9zdGFusSBiYXJkemllalxuIgorI34gInN6Y3plZ/Ozb3dlIGluZm9ybWFjamUgb2Rub7ZuaWUgcG9kYW5laiBwYXJ0eWNqaS4gSmW2bGkgcG9kYW5vIGFyZ3VtZW50XG4iCisjfiAiJ2FsbCcsIHd5tndpZXRsb25lIHpvc3RhbrEgaW5mb3JtYWNqZSBkbGEgd3N6eXN0a2ljaCB1cnqxZHpl8S5cbiIKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9wby9wdC5nbW8gYi9wYXJ0ZWQtMS44LjcvcG8vcHQuZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2ZjZhMmEKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvcG8vcHQuZ21vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9wby9wdC5wbyBiL3BhcnRlZC0xLjguNy9wby9wdC5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTcwMjgwCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L3BvL3B0LnBvCkBAIC0wLDAgKzEsMzQxMSBAQAorIyBQb3J0dWd1ZXNlIG1lc3NhZ2VzIGZvciBHTlUgcGFydGVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMDEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIEdvbudhbG8gU2lsdmEgPGdvbmNhbG8uc2lsdmFAY2FpeGFtYWdpY2EucHQ+LCAyMDAxLgorIyBCYXNlZCBvbiBwdF9CUi5wbyBtYWRlIGJ5IEVsaXBoYXMgTGV2eSBUaGVvZG9yby4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IHBhcnRlZCAxLjQuMjBcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogYnVnLXBhcnRlZEBnbnUub3JnXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMDctMDUtMDkgMTc6MDItMDQwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDEtMTAtMTYgMjA6MTYrMDI6MDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEdvbudhbG8gU2lsdmEgPGdvbmNhbG8uc2lsdmFAY2FpeGFtYWdpY2Eub3JnPlxuIgorIkxhbmd1YWdlLVRlYW06IFBvcnR1Z3Vlc2UgPHB0QGxpLm9yZz5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1JU08tODg1OS0xXG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOC1iaXRcbiIKKworIzogbGliL2Nsb3Nlb3V0LmM6NzQKK21zZ2lkICJ3cml0ZSBlcnJvciIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXJyb3IuYzoxMjUKKyMsIGZ1enp5Cittc2dpZCAiVW5rbm93biBzeXN0ZW0gZXJyb3IiCittc2dzdHIgIlRpcG8gZGUgc2lzdGVtYSBkZSBmaWNoZWlyb3MgZGVzY29uaGVjaWRvLiIKKworIzogbGliL2dldG9wdC5jOjUzMSBsaWIvZ2V0b3B0LmM6NTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYCVzJyBpcyBhbWJpZ3VvdXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6NTgwIGxpYi9nZXRvcHQuYzo1ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiBgLS0lcycgZG9lc24ndCBhbGxvdyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo1OTMgbGliL2dldG9wdC5jOjU5OAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIGAlYyVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjY0MSBsaWIvZ2V0b3B0LmM6NjYwIGxpYi9nZXRvcHQuYzo5NzYgbGliL2dldG9wdC5jOjk5NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIGAlcycgcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6Njk4IGxpYi9nZXRvcHQuYzo3MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVucmVjb2duaXplZCBvcHRpb24gYC0tJXMnXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjcwOSBsaWIvZ2V0b3B0LmM6NzEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bnJlY29nbml6ZWQgb3B0aW9uIGAlYyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo3NjQgbGliL2dldG9wdC5jOjc2NworIywgYy1mb3JtYXQKK21zZ2lkICIlczogaWxsZWdhbCBvcHRpb24gLS0gJWNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6NzczIGxpYi9nZXRvcHQuYzo3NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgb3B0aW9uIC0tICVjXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjgyOCBsaWIvZ2V0b3B0LmM6ODQ0IGxpYi9nZXRvcHQuYzoxMDQ4IGxpYi9nZXRvcHQuYzoxMDY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQgLS0gJWNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6ODk3IGxpYi9nZXRvcHQuYzo5MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiBgLVcgJXMnIGlzIGFtYmlndW91c1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo5MzcgbGliL2dldG9wdC5jOjk1NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIGAtVyAlcycgZG9lc24ndCBhbGxvdyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOgorIy4gR2V0IHRyYW5zbGF0aW9ucyBmb3Igb3BlbiBhbmQgY2xvc2luZyBxdW90YXRpb24gbWFya3MuCisjLgorIy4gVGhlIG1lc3NhZ2UgY2F0YWxvZyBzaG91bGQgdHJhbnNsYXRlICJgIiB0byBhIGxlZnQKKyMuIHF1b3RhdGlvbiBtYXJrIHN1aXRhYmxlIGZvciB0aGUgbG9jYWxlLCBhbmQgc2ltaWxhcmx5IGZvcgorIy4gIiciLiAgSWYgdGhlIGNhdGFsb2cgaGFzIG5vIHRyYW5zbGF0aW9uLAorIy4gbG9jYWxlX3F1b3Rpbmdfc3R5bGUgcXVvdGVzIGBsaWtlIHRoaXMnLCBhbmQKKyMuIGNsb2NhbGVfcXVvdGluZ19zdHlsZSBxdW90ZXMgImxpa2UgdGhpcyIuCisjLgorIy4gRm9yIGV4YW1wbGUsIGFuIEFtZXJpY2FuIEVuZ2xpc2ggVW5pY29kZSBsb2NhbGUgc2hvdWxkCisjLiB0cmFuc2xhdGUgImAiIHRvIFUrMjAxQyAoTEVGVCBET1VCTEUgUVVPVEFUSU9OIE1BUkspLCBhbmQKKyMuIHNob3VsZCB0cmFuc2xhdGUgIiciIHRvIFUrMjAxRCAoUklHSFQgRE9VQkxFIFFVT1RBVElPTgorIy4gTUFSSykuICBBIEJyaXRpc2ggRW5nbGlzaCBVbmljb2RlIGxvY2FsZSBzaG91bGQgaW5zdGVhZAorIy4gdHJhbnNsYXRlIHRoZXNlIHRvIFUrMjAxOCAoTEVGVCBTSU5HTEUgUVVPVEFUSU9OIE1BUkspIGFuZAorIy4gVSsyMDE5IChSSUdIVCBTSU5HTEUgUVVPVEFUSU9OIE1BUkspLCByZXNwZWN0aXZlbHkuCisjLgorIy4gSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBwdXQgaGVyZSwgcGxlYXNlIHNlZQorIy4gPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUXVvdGF0aW9uX21hcmsjR2x5cGhzPgorIy4gYW5kIHVzZSBnbHlwaHMgc3VpdGFibGUgZm9yIHlvdXIgbGFuZ3VhZ2UuCisjOiBsaWIvcXVvdGVhcmcuYzoyMjkKK21zZ2lkICJgIgorbXNnc3RyICIiCisKKyM6IGxpYi9xdW90ZWFyZy5jOjIzMAorbXNnaWQgIiciCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxMzEKK21zZ2lkICJTdWNjZXNzIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTM0Cittc2dpZCAiTm8gbWF0Y2giCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxMzcKK21zZ2lkICJJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE0MAorbXNnaWQgIkludmFsaWQgY29sbGF0aW9uIGNoYXJhY3RlciIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE0MworbXNnaWQgIkludmFsaWQgY2hhcmFjdGVyIGNsYXNzIG5hbWUiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNDYKK21zZ2lkICJUcmFpbGluZyBiYWNrc2xhc2giCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNDkKK21zZ2lkICJJbnZhbGlkIGJhY2sgcmVmZXJlbmNlIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTUyCittc2dpZCAiVW5tYXRjaGVkIFsgb3IgW14iCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNTUKK21zZ2lkICJVbm1hdGNoZWQgKCBvciBcXCgiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNTgKK21zZ2lkICJVbm1hdGNoZWQgXFx7IgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTYxCittc2dpZCAiSW52YWxpZCBjb250ZW50IG9mIFxce1xcfSIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE2NAorbXNnaWQgIkludmFsaWQgcmFuZ2UgZW5kIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTY3Cittc2dpZCAiTWVtb3J5IGV4aGF1c3RlZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE3MAorbXNnaWQgIkludmFsaWQgcHJlY2VkaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE3MworbXNnaWQgIlByZW1hdHVyZSBlbmQgb2YgcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTc2Cittc2dpZCAiUmVndWxhciBleHByZXNzaW9uIHRvbyBiaWciCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNzkKK21zZ2lkICJVbm1hdGNoZWQgKSBvciBcXCkiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzo2ODAKK21zZ2lkICJObyBwcmV2aW91cyByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgIiIKKworIzogbGliL3JwbWF0Y2guYzo3MAorbXNnaWQgIl5beVldIgorbXNnc3RyICIiCisKKyM6IGxpYi9ycG1hdGNoLmM6NzMKK21zZ2lkICJeW25OXSIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogVHJhbnNsYXRlICIoQykiIHRvIHRoZSBjb3B5cmlnaHQgc3ltYm9sCisjLiAoQy1pbi1hLWNpcmNsZSksIGlmIHRoaXMgc3ltYm9sIGlzIGF2YWlsYWJsZSBpbiB0aGUgdXNlcidzCisjLiBsb2NhbGUuICBPdGhlcndpc2UsIGRvIG5vdCB0cmFuc2xhdGUgIihDKSI7IGxlYXZlIGl0IGFzLWlzLgorIzogbGliL3ZlcnNpb24tZXRjLmM6NjYKK21zZ2lkICIoQykiCittc2dzdHIgIiIKKworIzogbGliL3ZlcnNpb24tZXRjLmM6NjgKK21zZ2lkICIiCisiXG4iCisiTGljZW5zZSBHUEx2Mis6IEdOVSBHUEwgdmVyc2lvbiAyIG9yIGxhdGVyIDxodHRwOi8vZ251Lm9yZy9saWNlbnNlcy9ncGwuIgorImh0bWw+XG4iCisiVGhpcyBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgYXJlIGZyZWUgdG8gY2hhbmdlIGFuZCByZWRpc3RyaWJ1dGUgaXQuXG4iCisiVGhlcmUgaXMgTk8gV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIldyaXR0ZW4gYnkgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjg4CisjLCBjLWZvcm1hdAorbXNnaWQgIldyaXR0ZW4gYnkgJXMgYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzo5MgorIywgYy1mb3JtYXQKK21zZ2lkICJXcml0dGVuIGJ5ICVzLCAlcywgYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjLiBZb3UgY2FuIHVzZSBsaW5lIGJyZWFrcywgZXN0aW1hdGluZyB0aGF0IGVhY2ggYXV0aG9yIG5hbWUgb2NjdXBpZXMKKyMuIGNhLiAxNiBzY3JlZW4gY29sdW1ucyBhbmQgdGhhdCBhIHNjcmVlbiBsaW5lIGhhcyBjYS4gODAgY29sdW1ucy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjLiBZb3UgY2FuIHVzZSBsaW5lIGJyZWFrcywgZXN0aW1hdGluZyB0aGF0IGVhY2ggYXV0aG9yIG5hbWUgb2NjdXBpZXMKKyMuIGNhLiAxNiBzY3JlZW4gY29sdW1ucyBhbmQgdGhhdCBhIHNjcmVlbiBsaW5lIGhhcyBjYS4gODAgY29sdW1ucy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjEwNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorIiVzLCBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiJXMsICVzLCBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6MTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiJXMsICVzLCAlcywgYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjLiBZb3UgY2FuIHVzZSBsaW5lIGJyZWFrcywgZXN0aW1hdGluZyB0aGF0IGVhY2ggYXV0aG9yIG5hbWUgb2NjdXBpZXMKKyMuIGNhLiAxNiBzY3JlZW4gY29sdW1ucyBhbmQgdGhhdCBhIHNjcmVlbiBsaW5lIGhhcyBjYS4gODAgY29sdW1ucy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjEyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorIiVzLCAlcywgJXMsICVzLFxuIgorImFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzoxMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyIlcywgJXMsICVzLCAlcyxcbiIKKyIlcywgYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjLiBZb3UgY2FuIHVzZSBsaW5lIGJyZWFrcywgZXN0aW1hdGluZyB0aGF0IGVhY2ggYXV0aG9yIG5hbWUgb2NjdXBpZXMKKyMuIGNhLiAxNiBzY3JlZW4gY29sdW1ucyBhbmQgdGhhdCBhIHNjcmVlbiBsaW5lIGhhcyBjYS4gODAgY29sdW1ucy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjE0MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorIiVzLCAlcywgJXMsICVzLFxuIgorIiVzLCAlcywgYW5kIG90aGVycy5cbiIKK21zZ3N0ciAiIgorCisjOiBsaWIveGFsbG9jLWRpZS5jOjM1Cittc2dpZCAibWVtb3J5IGV4aGF1c3RlZCIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6MjM3Cittc2dpZCAiRGlzayBJbWFnZSIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6MzM4IGxpYnBhcnRlZC9hcmNoL2dudS5jOjI2MQorIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMjcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIG9wZW5pbmcgJXM6ICVzIgorbXNnc3RyICJFcnJvIGFicmluZG8gJXM6ICVzIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6MzQ5IGxpYnBhcnRlZC9hcmNoL2dudS5jOjI3MQorIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBvcGVuICVzIHJlYWQtd3JpdGUgKCVzKS4gICVzIGhhcyBiZWVuIG9wZW5lZCByZWFkLW9ubHkuIgorbXNnc3RyICIiCisiTuNvIHBvc3NvIGFicmlyICVzIHBhcmEgZ3JhdmHn428gKCVzKS4gJXMgZm9pIGFiZXJ0byBzb21lbnRlIHBhcmEgbGVpdHVyYS4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzo0MTEgbGlicGFydGVkL2FyY2gvbGludXguYzoxNDMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGR1cmluZyBzZWVrIGZvciByZWFkIG9uICVzIgorbXNnc3RyICIlcyBkdXJhbnRlIHByb2N1cmEgcGFyYSBsZWl0dXJhIGVtICVzIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6NDQ0IGxpYnBhcnRlZC9hcmNoL2dudS5jOjQ0OSBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo1NDgKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjY3NiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjEzOTEKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkdXJpbmcgcmVhZCBvbiAlcyIKK21zZ3N0ciAiJXMgZHVyYW50ZSBsZWl0dXJhIGVtICVzIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6NDgwIGxpYnBhcnRlZC9hcmNoL2dudS5jOjUwOQorIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxNTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbid0IHdyaXRlIHRvICVzLCBiZWNhdXNlIGl0IGlzIG9wZW5lZCByZWFkLW9ubHkuIgorbXNnc3RyICJO428gcG9zc28gZ3JhdmFyIGVtICVzLCBwb2lzIGVsYSBmb2kgYWJlcnRhIGNvbW8gc29tZW50ZSBwYXJhIGxlaXR1cmEuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6NDk2IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTU3MAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkdXJpbmcgc2VlayBmb3Igd3JpdGUgb24gJXMiCittc2dzdHIgIiVzIGR1cmFudGUgcHJvY3VyYSBwYXJhIGVzY3JpdGEgZW0gJXMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzo1MzMgbGlicGFydGVkL2FyY2gvZ251LmM6NTg1IGxpYnBhcnRlZC9hcmNoL2dudS5jOjYzMAorIzogbGlicGFydGVkL2FyY2gvZ251LmM6NzA3IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTUxNworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxNjEyIGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTY4NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkdXJpbmcgd3JpdGUgb24gJXMiCittc2dzdHIgIiVzIGR1cmFudGUgZXNjcml0YSBlbSAlcyIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo2MyBwYXJ0cHJvYmUvcGFydHByb2JlLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeSBgJXMgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogJXMgW09QVElPTl1cbiIKKyIgIG9yOiAgJXMgREVWSUNFIE1JTk9SXG4iCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo3MAorbXNnaWQgIiIKKyJDbGVhciB1bnVzZWQgc3BhY2Ugb24gYSBGQVQgcGFydGl0aW9uIChhIEdOVSBQYXJ0ZWQgdGVzdGluZyB0b29sKS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjc0Cittc2dpZCAiICAgICAgLS1oZWxwICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdFxuIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6NzUKK21zZ2lkICIgICAgICAtLXZlcnNpb24gIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0XG4iCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo3NyBwYXJ0cHJvYmUvcGFydHByb2JlLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJSZXBvcnQgYnVncyB0byA8JXM+LlxuIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6Mjg1CisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBmZXcgYXJndW1lbnRzIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6MjkwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMiCittc2dzdHIgIk11aXRhcyBw4WdpbmFzIGluduFsaWRhcy4iCisKKyM6IHBhcnRwcm9iZS9wYXJ0cHJvYmUuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFtPUFRJT05dIFtERVZJQ0VdLi4uXG4iCittc2dzdHIgIiIKKworIzogcGFydHByb2JlL3BhcnRwcm9iZS5jOjE0MgorbXNnaWQgIiIKKyJJbmZvcm0gdGhlIE9TIG9mIHBhcnRpdGlvbiB0YWJsZSBjaGFuZ2VzLlxuIgorIlxuIgorIiAgLWQsIC0tbm8tdXBkYXRlICBkb24ndCB1cGRhdGUgdGhlIGtlcm5lbFxuIgorIiAgLXMsIC0tc3VtbWFyeSAgICBwcmludCBhIHN1bW1hcnkgb2YgY29udGVudHNcbiIKKyIgIC1oLCAtLWhlbHAgICAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXRcbiIKKyIgIC12LCAtLXZlcnNpb24gICAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXRcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0cHJvYmUvcGFydHByb2JlLmM6MTUwCittc2dpZCAiIgorIlxuIgorIldpdGggbm8gREVWSUNFLCBwcm9iZSBhbGwgcGFydGl0aW9ucy5cbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gb3BlbiAlcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6MTE0CisjLCBmdXp6eQorbXNnaWQgIlVuYWJsZSB0byBwcm9iZSBzdG9yZS4iCittc2dzdHIgIkltcG9zc+12ZWwgYWxpbmhhciBhIHBhcnRp5+NvLiIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6MzUyCisjLCBmdXp6eQorbXNnaWQgIiIKKyJUaGUgcGFydGl0aW9uIHRhYmxlIGNhbm5vdCBiZSByZS1yZWFkLiAgVGhpcyBtZWFucyB5b3UgbmVlZCB0byByZWJvb3QgYmVmb3JlICIKKyJtb3VudGluZyBhbnkgbW9kaWZpZWQgcGFydGl0aW9ucy4gIFlvdSBhbHNvIG5lZWQgdG8gcmVpbnN0YWxsIHlvdXIgYm9vdCAiCisibG9hZGVyIGJlZm9yZSB5b3UgcmVib290ICh3aGljaCBtYXkgcmVxdWlyZSBtb3VudGluZyBtb2RpZmllZCBwYXJ0aXRpb25zKS4gICIKKyJJdCBpcyBpbXBvc3NpYmxlIGRvIGJvdGggdGhpbmdzISAgU28geW91J2xsIG5lZWQgdG8gYm9vdCBvZmYgYSByZXNjdWUgZGlzaywgIgorImFuZCByZWluc3RhbGwgeW91ciBib290IGxvYWRlciBmcm9tIHRoZSByZXNjdWUgZGlzay4gIFJlYWQgc2VjdGlvbiA0IG9mIHRoZSAiCisiUGFydGVkIFVzZXIgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCittc2dzdHIgIiIKKyJPIGtlcm5lbCBu428gcPRkZSByZWxlciBzdWEgdGFiZWxhIGRlIHBhcnRp5/VlcywgcG9ydGFudG8gcHJlY2lzYSBkZSAiCisicmVpbmljaWFyIGFudGVzIGRlIG1vbnRhciBxdWFscXVlciBwYXJ0aefjbyBtb2RpZmljYWRhLiBWb2NlIHBvZGUgdGFtYultICIKKyJwcmVjaXNhciByZWluc3RhbGFyIHNldSBnZXN0b3IgZGUgYm9vdCBhbnRlcyBkZSByZWluaWNpYWxpemFyIChvIHF1ZSBwb2RlICIKKyJyZXF1ZXJlciBhIG1vbnRhZ2VtIGRhcyBwYXJ0aef1ZXMgbW9kaWZpY2FkYXMpLiDJIGltcG9zc+12ZWwgZmF6ZXIgYXMgZHVhcyAiCisiY29pc2FzISBMZWlhIGEgc2Vj5+NvIDQgZGEgZG9jdW1lbnRh5+NvIGRvIHVzdeFyaW8gZG8gUGFydGVkIHBhcmEgbWFpcyAiCisiaW5mb3JtYef1ZXMuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzozNjkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgcGFydGl0aW9uIHRhYmxlIG9uICVzIGNhbm5vdCBiZSByZS1yZWFkICglcykuICBUaGlzIG1lYW5zIHRoZSBIdXJkIGtub3dzICIKKyJub3RoaW5nIGFib3V0IGFueSBtb2RpZmljYXRpb25zIHlvdSBtYWRlLiAgWW91IHNob3VsZCByZWJvb3QgeW91ciBjb21wdXRlciAiCisiYmVmb3JlIGRvaW5nIGFueXRoaW5nIHdpdGggJXMuIgorbXNnc3RyICIiCisiTyBrZXJuZWwgbuNvIGNvbnNlZ3VpdSByZWxlciBhIHRhYmVsYSBkZSBwYXJ0aef1ZXMgZGUgJXMgKCVzKS4gSXN0byAiCisic2lnbmlmaWNhIHF1ZSBvIExpbnV4IG7jbyBzYWJlIG5hZGEgc29icmUgYXMgbW9kaWZpY2Hn9WVzIHF1ZSBmZXouIERldmVy4SAiCisicmVpbmljaWFsaXphciBzZXUgY29tcHV0YWRvciBhbnRlcyBkZSBmYXplciBxdWFscXVlciB1c28gZGUgJXMuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzozODAgcGFydGVkL3BhcnRlZC5jOjI0NDMKK21zZ2lkICIiCisiWW91IHNob3VsZCByZWluc3RhbGwgeW91ciBib290IGxvYWRlciBiZWZvcmUgcmVib290aW5nLiAgUmVhZCBzZWN0aW9uIDQgb2YgIgorInRoZSBQYXJ0ZWQgVXNlciBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiIgorIkRldmVy4SByZWluc3RhbGFyIHNldSBnZXN0b3IgZGUgYm9vdCBhbnRlcyBkZSByZWluaWNpYWxpemFyLiBMZWlhIGEgc2Vj5+NvIDQgIgorImRhIGRvY3VtZW50YefjbyBkbyB1dGlsaXphZG9yIGRvIFBhcnRlZCBwYXJhIG1haXMgaW5mb3JtYef1ZXMuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo3NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdHJ5aW5nIHRvIHN5bmMgJXMgdG8gZGlzayIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjQwOAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc3RhdCBkZXZpY2UgJXMgLSAlcy4iCittc2dzdHIgIk7jbyBmb2kgcG9zc+12ZWwgaW5pY2lhbGl6YXIgbyBkaXNwb3NpdGl2byAlcyAtICVzLiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo1MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBkZXRlcm1pbmUgc2VjdG9yIHNpemUgZm9yICVzOiAlcy5cbiIKKyJVc2luZyB0aGUgZGVmYXVsdCBzZWN0b3Igc2l6ZSAoJWxsZCkuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6NTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJEZXZpY2UgJXMgaGFzIGEgbG9naWNhbCBzZWN0b3Igc2l6ZSBvZiAlbGxkLiAgTm90IGFsbCBwYXJ0cyBvZiBHTlUgUGFydGVkICIKKyJzdXBwb3J0IHRoaXMgYXQgdGhlIG1vbWVudCwgYW5kIHRoZSB3b3JraW5nIGNvZGUgaXMgSElHSExZIEVYUEVSSU1FTlRBTC5cbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjU3OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGRldGVybWluZSB0aGUgc2l6ZSBvZiAlcyAoJXMpLiIKK21zZ3N0ciAiSW1wb3Nz7XZlbCBkZXRlcm1pbmFyIHRhbWFuaG8gZGUgJXMgKCVzKSIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo2NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGdldCBpZGVudGl0eSBvZiBkZXZpY2UgJXMgLSAlcyIKK21zZ3N0ciAiTuNvIGZvaSBwb3Nz7XZlbCBvYnRlciBhIGlkZW50aWZpY2Hn428gZG8gZGlzcG9zaXRpdm8gJXMgLSAlcyIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo2NzcKK21zZ2lkICJHZW5lcmljIElERSIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRGV2aWNlICVzIGhhcyBtdWx0aXBsZSAoJWQpIGxvZ2ljYWwgc2VjdG9ycyBwZXIgcGh5c2ljYWwgc2VjdG9yLlxuIgorIkdOVSBQYXJ0ZWQgc3VwcG9ydHMgdGhpcyBFWFBFUklNRU5UQUxMWSBmb3Igc29tZSBzcGVjaWFsIGRpc2sgbGFiZWwvZmlsZSAiCisic3lzdGVtIGNvbWJpbmF0aW9ucywgZS5nLiBHUFQgYW5kIGV4dDIvMy5cbiIKKyJQbGVhc2UgY29uc3VsdCB0aGUgd2ViIHNpdGUgZm9yIHVwLXRvLWRhdGUgaW5mb3JtYXRpb24uIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6ODczCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGluaXRpYWxpc2luZyBTQ1NJIGRldmljZSAlcyAtICVzIgorbXNnc3RyICJFcnJvIGluaWNpYWxpemFuZG8gZGlzcG9zaXRpdm8gU0NTSSAlcyAtICVzIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjkyOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGRldmljZSAlcyBoYXMgemVybyBsZW5ndGgsIGFuZCBjYW4ndCBwb3NzaWJseSBzdG9yZSBhIGZpbGUgc3lzdGVtIG9yICIKKyJwYXJ0aXRpb24gdGFibGUuICBQZXJoYXBzIHlvdSBzZWxlY3RlZCB0aGUgd3JvbmcgZGV2aWNlPyIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjEwMzIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVbmFibGUgdG8gZGV0ZXJtaW5lIGdlb21ldHJ5IG9mIGZpbGUvZGV2aWNlICVzLiAgWW91IHNob3VsZCBub3QgdXNlIFBhcnRlZCAiCisidW5sZXNzIHlvdSBSRUFMTFkga25vdyB3aGF0IHlvdSdyZSBkb2luZyEiCittc2dzdHIgIiIKKyJJbXBvc3PtdmVsIGRldGVybWluYXIgYSBnZW9tZXRyaWEgZG8gZmljaGVpcm8vZGlzcG9zaXRpdm8uIE7jbyBkZXZlIHV0aWxpemFyICIKKyJvIFBhcnRlZCBhIG7jbyBzZXIgcXVlIFJFQUxNRU5URSBzYWliYSBvIHF1ZSBlc3ThIGEgZmF6ZXIhIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExMTAKK21zZ2lkICJEQUM5NjAgUkFJRCBjb250cm9sbGVyIgorbXNnc3RyICJDb250cm9sYWRvciBSQUlEIERBQzk2MCIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTE1Cittc2dpZCAiUHJvbWlzZSBTWDggU0FUQSBEZXZpY2UiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTIwCittc2dpZCAiSUJNIFMzOTAgREFTRCBkcml2ZSIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExMjUKK21zZ2lkICJJQk0gaVNlcmllcyBWaXJ0dWFsIERBU0QiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTMwCittc2dpZCAiQ29tcGFxIFNtYXJ0IEFycmF5IgorbXNnc3RyICJDb21wYXEgU21hcnQgQXJyYXkiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTEzNQorbXNnaWQgIkFUQVJBSUQgQ29udHJvbGxlciIKK21zZ3N0ciAiQ29udHJvbGFkb3IgQVRBUkFJRCIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTQwCittc2dpZCAiSTJPIENvbnRyb2xsZXIiCittc2dzdHIgIkNvbnRyb2xhZG9yIEkyMCIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTQ1Cittc2dpZCAiVXNlci1Nb2RlIExpbnV4IFVCRCIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExNTYKK21zZ2lkICJMaW51eCBkZXZpY2UtbWFwcGVyIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTE2MgorbXNnaWQgIlVua25vd24iCittc2dzdHIgIkRlc2NvbmhlY2lkbyIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTY5Cittc2dpZCAicGVkX2RldmljZV9uZXcoKSAgVW5zdXBwb3J0ZWQgZGV2aWNlIHR5cGUiCittc2dzdHIgInBlZF9kZXZpY2VfbmV3KCkgIFRpcG8gZGUgZGlzcG9zaXRpdm8gbuNvIHN1cG9ydGFkbyIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoyMDgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFcnJvciBpbmZvcm1pbmcgdGhlIGtlcm5lbCBhYm91dCBtb2RpZmljYXRpb25zIHRvIHBhcnRpdGlvbiAlcyAtLSAlcy4gIFRoaXMgIgorIm1lYW5zIExpbnV4IHdvbid0IGtub3cgYWJvdXQgYW55IGNoYW5nZXMgeW91IG1hZGUgdG8gJXMgdW50aWwgeW91IHJlYm9vdCAtLSAiCisic28geW91IHNob3VsZG4ndCBtb3VudCBpdCBvciB1c2UgaXQgaW4gYW55IHdheSBiZWZvcmUgcmVib290aW5nLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjIyNjIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJwYXJ0ZWQgd2FzIHVuYWJsZSB0byByZS1yZWFkIHRoZSBwYXJ0aXRpb24gdGFibGUgb24gJXMgKCVzKS4gIFRoaXMgbWVhbnMgIgorIkxpbnV4IHdvbid0IGtub3cgYW55dGhpbmcgYWJvdXQgdGhlIG1vZGlmaWNhdGlvbnMgeW91IG1hZGUuICIKK21zZ3N0ciAiIgorIk8ga2VybmVsIG7jbyBjb25zZWd1aXUgcmVsZXIgYSB0YWJlbGEgZGUgcGFydGnn9WVzIGRlICVzICglcykuIElzdG8gIgorInNpZ25pZmljYSBxdWUgbyBMaW51eCBu428gc2FiZSBuYWRhIHNvYnJlIGFzIG1vZGlmaWNh5/VlcyBxdWUgZmV6LiBEZXZlcuEgIgorInJlaW5pY2lhbGl6YXIgc2V1IGNvbXB1dGFkb3IgYW50ZXMgZGUgZmF6ZXIgcXVhbHF1ZXIgdXNvIGRlICVzLiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoyMzY4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGtlcm5lbCB3YXMgdW5hYmxlIHRvIHJlLXJlYWQgdGhlIHBhcnRpdGlvbiB0YWJsZSBvbiAlcyAoJXMpLiAgVGhpcyBtZWFucyAiCisiTGludXggd29uJ3Qga25vdyBhbnl0aGluZyBhYm91dCB0aGUgbW9kaWZpY2F0aW9ucyB5b3UgbWFkZSB1bnRpbCB5b3UgIgorInJlYm9vdC4gIFlvdSBzaG91bGQgcmVib290IHlvdXIgY29tcHV0ZXIgYmVmb3JlIGRvaW5nIGFueXRoaW5nIHdpdGggJXMuIgorbXNnc3RyICIiCisiTyBrZXJuZWwgbuNvIGNvbnNlZ3VpdSByZWxlciBhIHRhYmVsYSBkZSBwYXJ0aef1ZXMgZGUgJXMgKCVzKS4gSXN0byAiCisic2lnbmlmaWNhIHF1ZSBvIExpbnV4IG7jbyBzYWJlIG5hZGEgc29icmUgYXMgbW9kaWZpY2Hn9WVzIHF1ZSBmZXouIERldmVy4SAiCisicmVpbmljaWFsaXphciBzZXUgY29tcHV0YWRvciBhbnRlcyBkZSBmYXplciBxdWFscXVlciB1c28gZGUgJXMuIgorCisjOiBsaWJwYXJ0ZWQvY3MvZ2VvbS5jOjE2MgorbXNnaWQgIkNhbid0IGhhdmUgdGhlIGVuZCBiZWZvcmUgdGhlIHN0YXJ0ISIKK21zZ3N0ciAiTuNvIHBvZGUgdGVyIG8gZmltIGRhIHBhcnRp5+NvIGFudGVzIGRvIGlu7WNpby4iCisKKyM6IGxpYnBhcnRlZC9jcy9nZW9tLmM6MTY5Cittc2dpZCAiQ2FuJ3QgaGF2ZSBhIHBhcnRpdGlvbiBvdXRzaWRlIHRoZSBkaXNrISIKK21zZ3N0ciAiTuNvIHBvZGUgdGVyIHVtYSBwYXJ0aefjbyBmb3JhIGRvIGRpc2NvIS4iCisKKyM6IGxpYnBhcnRlZC9jcy9nZW9tLmM6MzY2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJBdHRlbXB0IHRvIHdyaXRlIHNlY3RvcnMgJWxkLSVsZCBvdXRzaWRlIG9mIHBhcnRpdGlvbiBvbiAlcy4iCittc2dzdHIgIlRlbnRhdGl2YSBkZSBlc2NyZXZlciBzZWN0b3JlcyAlbGQtJWxkIGZvcmEgZGEgcGFydGnn428gZW0gJXMiCisKKyM6IGxpYnBhcnRlZC9jcy9nZW9tLmM6NDA2IGxpYnBhcnRlZC9mcy9saW51eF9zd2FwL2xpbnV4X3N3YXAuYzo0NzUKK21zZ2lkICJjaGVja2luZyBmb3IgYmFkIGJsb2NrcyIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZGVidWcuYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFja3RyYWNlIGhhcyAlZCBjYWxscyBvbiBzdGFjazpcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZGVidWcuYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXNzZXJ0aW9uICglcykgYXQgJXM6JWQgaW4gZnVuY3Rpb24gJXMoKSBmYWlsZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBvcGVuICVzIC0gdW5yZWNvZ25pc2VkIGRpc2sgbGFiZWwuIgorbXNnc3RyICJJbXBvc3PtdmVsIGFicmlyICVzIC0gcvN0dWxvIGRlIGRpc2NvIGRlc2NvbmhlY2lkby4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6NDcxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhpcyBsaWJwYXJ0ZWQgZG9lc24ndCBoYXZlIHdyaXRlIHN1cHBvcnQgZm9yICVzLiAgUGVyaGFwcyBpdCB3YXMgY29tcGlsZWQgIgorInJlYWQtb25seS4iCittc2dzdHIgIk7jbyBwb3NzbyBncmF2YXIgZW0gJXMsIHBvaXMgZWxhIGZvaSBhYmVydGEgY29tbyBzb21lbnRlIHBhcmEgbGVpdHVyYS4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6NTk4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJQYXJ0aXRpb24gJWQgaXMgJXMsIGJ1dCB0aGUgZmlsZSBzeXN0ZW0gaXMgJXMuIgorbXNnc3RyICJBIHBhcnRp5+NvIOkgbXVpdG8gcGVxdWVuYSBwYXJhIHVtIHNpc3RlbWEgZGUgZmljaGVpcm9zIEZBVCIKKworIzogbGlicGFydGVkL2Rpc2suYzoxMDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGRpc2sgbGFiZWxzIGRvIG5vdCBzdXBwb3J0IGV4dGVuZGVkIHBhcnRpdGlvbnMuIgorbXNnc3RyICJS83R1bG9zIGRlIGRpc2NvICVzIG7jbyBzdXBvcnRhbSBwYXJ0aef1ZXMgZXh0ZW5kaWRhcy4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTYzNAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkaXNrIGxhYmVscyBkb24ndCBzdXBwb3J0IGxvZ2ljYWwgb3IgZXh0ZW5kZWQgcGFydGl0aW9ucy4iCittc2dzdHIgIlLzdHVsb3MgZGUgZGlzY28gJXMgbuNvIHN1cG9ydGFtIHBhcnRp5/VlcyBs82dpY2FzIG91IGV4dGVuZGlkYXMuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE2NDcKKyMsIGZ1enp5Cittc2dpZCAiVG9vIG1hbnkgcHJpbWFyeSBwYXJ0aXRpb25zLiIKK21zZ3N0ciAiTXVpdGFzIHDhZ2luYXMgaW524WxpZGFzLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW4ndCBhZGQgYSBsb2dpY2FsIHBhcnRpdGlvbiB0byAlcywgYmVjYXVzZSB0aGVyZSBpcyBubyBleHRlbmRlZCBwYXJ0aXRpb24uIgorbXNnc3RyICIiCisiTuNvIHBvc3NvIGFkaWNpb25hciB1bWEgcGFydGnn428gbPNnaWNhIGVtICVzLCBwb2lzIG7jbyBo4SB1bWEgcGFydGnn428gIgorImV4dGVuZGlkYS4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTY4MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ2FuJ3QgaGF2ZSBtb3JlIHRoYW4gb25lIGV4dGVuZGVkIHBhcnRpdGlvbiBvbiAlcy4iCittc2dzdHIgIk7jbyBzZSBwb2RlIGhhdmVyIG1haXMgZGUgdW1hIHBhcnRp5+NvIGV4dGVuZGlkYSBlbSAlcyIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNjkwCisjLCBmdXp6eQorbXNnaWQgIkNhbid0IGhhdmUgbG9naWNhbCBwYXJ0aXRpb25zIG91dHNpZGUgb2YgdGhlIGV4dGVuZGVkIHBhcnRpdGlvbi4iCittc2dzdHIgIiIKKyJO428gcG9zc28gYWRpY2lvbmFyIHVtYSBwYXJ0aefjbyBs82dpY2EgZm9yYSBkYSBwYXJ0aefjbyBleHRlbmRpZGEgZW0gJXMuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE3MTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkNhbid0IGhhdmUgYSBsb2dpY2FsIHBhcnRpdGlvbiBvdXRzaWRlIG9mIHRoZSBleHRlbmRlZCBwYXJ0aXRpb24gb24gJXMuIgorbXNnc3RyICIiCisiTuNvIHBvc3NvIGFkaWNpb25hciB1bWEgcGFydGnn428gbPNnaWNhIGZvcmEgZGEgcGFydGnn428gZXh0ZW5kaWRhIGVtICVzLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNzI1IGxpYnBhcnRlZC9kaXNrLmM6MTc3OSBsaWJwYXJ0ZWQvZGlzay5jOjE5NDUKKyMsIGZ1enp5Cittc2dpZCAiQ2FuJ3QgaGF2ZSBvdmVybGFwcGluZyBwYXJ0aXRpb25zLiIKK21zZ3N0ciAiTuNvIHBvc3NvIGNvcGlhciBwYXJhIHVtYSBwYXJ0aefjbyBzb2JyZXBvc3RhLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNzMzCisjLCBmdXp6eQorbXNnaWQgIkNhbid0IGhhdmUgYSBwcmltYXJ5IHBhcnRpdGlvbiBpbnNpZGUgYW4gZXh0ZW5kZWQgcGFydGl0aW9uLiIKK21zZ3N0ciAiTuNvIHBvc3NvIGFkaWNpb25hciB1bWEgcGFydGnn428gcHJpbeFyaWEgZGVudHJvIGRlIHVtYSBleHRlbmRpZGEuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNDAKK21zZ2lkICJtZXRhZGF0YSIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNDIKK21zZ2lkICJmcmVlIgorbXNnc3RyICJsaXZyZSIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTQ0IHBhcnRlZC91aS5jOjExNjkgcGFydGVkL3VpLmM6MTE5NworbXNnaWQgImV4dGVuZGVkIgorbXNnc3RyICJleHRlbmRpZGEiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE0NiBwYXJ0ZWQvdWkuYzoxMTczIHBhcnRlZC91aS5jOjEyMDEKK21zZ2lkICJsb2dpY2FsIgorbXNnc3RyICJs82dpY2EiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE0OCBwYXJ0ZWQvdWkuYzoxMTY1IHBhcnRlZC91aS5jOjExOTMKK21zZ2lkICJwcmltYXJ5IgorbXNnc3RyICJwcmlt4XJpYSIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTY0Cittc2dpZCAiYm9vdCIKK21zZ3N0ciAiYm9vdCIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTY2Cittc2dpZCAicm9vdCIKK21zZ3N0ciAicm9vdCIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTY4Cittc2dpZCAic3dhcCIKK21zZ3N0ciAic3dhcCIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTcwCittc2dpZCAiaGlkZGVuIgorbXNnc3RyICJlc2NvbmRpZGEiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE3MgorbXNnaWQgInJhaWQiCittc2dzdHIgInJhaWQiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE3NAorbXNnaWQgImx2bSIKK21zZ3N0ciAibHZtIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNzYKK21zZ2lkICJsYmEiCittc2dzdHIgImxiYSIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTc4Cittc2dpZCAiaHAtc2VydmljZSIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxODAKK21zZ2lkICJwYWxvIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE4MgorbXNnaWQgInByZXAiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTg0Cittc2dpZCAibXNmdHJlcyIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxOTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gcGFydGl0aW9uIGZsYWcsICVkLiIKK21zZ3N0ciAiU2luYWxpemFkb3IgZGUgcGFydGnn428gZGVzY29uaGVjaWRvLCAlZC4iCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo3OAorbXNnaWQgIkluZm9ybWF0aW9uIgorbXNnc3RyICJJbmZvcm1h5+NvIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6NzkKK21zZ2lkICJXYXJuaW5nIgorbXNnc3RyICJBdmlzbyIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjgwCittc2dpZCAiRXJyb3IiCittc2dzdHIgIkVycm8iCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4MQorbXNnaWQgIkZhdGFsIgorbXNnc3RyICJGYXRhbCIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjgyCittc2dpZCAiQnVnIgorbXNnc3RyICJCdWciCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4MworbXNnaWQgIk5vIEltcGxlbWVudGF0aW9uIgorbXNnc3RyICJTZW0gSW1wbGVtZW50YefjbyIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjg3Cittc2dpZCAiRml4IgorbXNnc3RyICJBcnJhbmphciIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjg4Cittc2dpZCAiWWVzIgorbXNnc3RyICJTaW0iCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4OQorbXNnaWQgIk5vIgorbXNnc3RyICJO428iCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo5MAorbXNnaWQgIk9LIgorbXNnc3RyICJPSyIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjkxCittc2dpZCAiUmV0cnkiCittc2dzdHIgIlJlcGV0aXIiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo5MgorbXNnaWQgIklnbm9yZSIKK21zZ3N0ciAiSWdub3JhciIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjkzCittc2dpZCAiQ2FuY2VsIgorbXNnc3RyICJDYW5jZWxhciIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjEzMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIkEgYnVnIGhhcyBiZWVuIGRldGVjdGVkIGluIEdOVSBQYXJ0ZWQuICBSZWZlciB0byB0aGUgd2ViIHNpdGUgb2YgcGFydGVkICIKKyJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvcGFydGVkL3BhcnRlZC5odG1sIGZvciBtb3JlIGluZm9ybWF0aW9ucyBvZiB3aGF0ICIKKyJjb3VsZCBiZSB1c2VmdWwgZm9yIGJ1ZyBzdWJtaXR0aW5nISAgUGxlYXNlIGVtYWlsIGEgYnVnIHJlcG9ydCB0byBidWctIgorInBhcnRlZEBnbnUub3JnIGNvbnRhaW5pbmcgYXQgbGVhc3QgdGhlIHZlcnNpb24gKCVzKSBhbmQgdGhlIGZvbGxvd2luZyAiCisibWVzc2FnZTogICIKK21zZ3N0ciAiIgorIlVtIGJ1ZyBmb2kgZGV0ZWN0YWRvIG5vIEdOVSBwYXJ0ZWQuIFBvciBmYXZvciwgZW52aWUgdW0gcmVsYXTzcmlvIGRvIGJ1ZyAiCisicGFyYSBidWctcGFydGVkQGdudS5vcmcgY29udGVuZG8gYSB2ZXJz428gKCVzKSBlIGEgbWVuc2FnZW0gYWJhaXhvOiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzozODQKK21zZ2lkICJDb3VsZCBub3QgZGV0ZWN0IGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiTuNvIGZvaSBwb3Nz7XZlbCBkZXRlY3RhciBvIHNpc3RlbWEgZGUgRmljaGVpcm9zLiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzozOTUKKyMsIGZ1enp5Cittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIGlzIGJpZ2dlciB0aGFuIGl0cyB2b2x1bWUhIgorbXNnc3RyICJPIHJvdHVsbyBkbyBkaXNjbyBhZmlybWEgcXVlIG8gZGlzY28g6SBtYWlvciBxdWUgJXMiCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NDAzCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnQgZm9yIG9wZW5pbmcgJXMgZmlsZSBzeXN0ZW1zIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICIiCisiTyBzdXBvcnRlIHBhcmEgYWJyaXIgc2lzdGVtYSBkZSBmaWNoZWlyb3MgJXMgbuNvIGZvaSBpbXBsZW1lbnRhZG8gYWluZGEuIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjQ0NQorIywgYy1mb3JtYXQKK21zZ2lkICJTdXBwb3J0IGZvciBjcmVhdGluZyAlcyBmaWxlIHN5c3RlbXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiIKKyJPIHN1cG9ydGUgcGFyYSBjcmlhciBzaXN0ZW1hIGRlIGZpY2hlaXJvcyAlcyBu428gZm9pIGltcGxlbWVudGFkbyBhaW5kYS4iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnQgZm9yIGNoZWNraW5nICVzIGZpbGUgc3lzdGVtcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiU3Vwb3J0ZSBwYXJhIHZlcmlmaWNhciBzaXN0ZW1hIGRlIGZpY2hlaXJvcyBu428gaW1wbGVtZW50YWRvIHBhcmEgJXMuIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjU3MQorbXNnaWQgInJhdyBibG9jayBjb3B5aW5nIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NTgyCisjLCBmdXp6eQorbXNnaWQgImdyb3dpbmcgZmlsZSBzeXN0ZW0iCittc2dzdHIgIlRpcG8gZGUgc2lzdGVtYSBkZSBmaWNoZWlyb3MgZGVzY29uaGVjaWRvLiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo2MjIKK21zZ2lkICJDYW4ndCBjb3B5IG9udG8gYW4gb3ZlcmxhcHBpbmcgcGFydGl0aW9uLiIKK21zZ3N0ciAiTuNvIHBvc3NvIGNvcGlhciBwYXJhIHVtYSBwYXJ0aefjbyBzb2JyZXBvc3RhLiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo2NDQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJEaXJlY3Qgc3VwcG9ydCBmb3IgY29weWluZyBmaWxlIHN5c3RlbXMgaXMgbm90IHlldCBpbXBsZW1lbnRlZCBmb3IgJXMuICAiCisiSG93ZXZlciwgc3VwcG9ydCBmb3IgcmVzaXppbmcgaXMgaW1wbGVtZW50ZWQuICBUaGVyZWZvcmUsIHRoZSBmaWxlIHN5c3RlbSAiCisiY2FuIGJlIGNvcGllZCBpZiB0aGUgbmV3IHBhcnRpdGlvbiBpcyBhdCBsZWFzdCBhcyBiaWcgYXMgdGhlIG9sZCBvbmUuICBTbywgIgorImVpdGhlciBzaHJpbmsgdGhlIHBhcnRpdGlvbiB5b3UgYXJlIHRyeWluZyB0byBjb3B5LCBvciBjb3B5IHRvIGEgYmlnZ2VyICIKKyJwYXJ0aXRpb24uIgorbXNnc3RyICIiCisiTyBzdXBvcnRlIGRpcmVjdG8gcGFyYSBj83BpYSBkZSBzaXN0ZW1hcyBkZSBmaWNoZWlyb3MgbuNvIGVzdOEgaW1wbGVtZW50YWRvICIKKyJwYXJhICVzLiBFbnRyZXRhbnRvLCBvIHN1cG9ydGUgcGFyYSByZWRpbWVuc2lvbmFtZW50byBlc3ThLiBQb3J0YW50bywgbyAiCisic2lzdGVtYSBkZSBmaWNoZWlyb3MgcG9kZSBzZXIgY29waWFkbyBzZSBhIG5vdmEgcGFydGnn428gZm9yIHBlbG8gbWVub3MgdONvICIKKyJncmFuZGUgcXVhbnRvIGEgYW50aWdhLiBFbnTjbywgZGltaW51YSBhIHBhcnRp5+NvIHF1ZSB2b2PqIGVzdOEgYSB0ZW50YXIgIgorImNvcGlhciwgb3UgY29waWUgcGFyYSB1bWEgcGFydGnn428gbWFpb3IuIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjY1OAorIywgYy1mb3JtYXQKK21zZ2lkICJTdXBwb3J0IGZvciBjb3B5aW5nICVzIGZpbGUgc3lzdGVtcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiU3Vwb3J0ZSBwYXJhIGNvcGlhciBzaXN0ZW1hIGRlIGZpY2hlaXJvcyBu428gaW1wbGVtZW50YWRvIHBhcmEgJXMuIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjY5NgorIywgYy1mb3JtYXQKK21zZ2lkICJTdXBwb3J0IGZvciByZXNpemluZyAlcyBmaWxlIHN5c3RlbXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiIKKyJTdXBvcnRlIHBhcmEgcmVkaW1lbnNpb25hciBzaXN0ZW1hIGRlIGZpY2hlaXJvcyBu428gaW1wbGVtZW50YWRvIHBhcmEgJXMuIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzozMTUKK21zZ2lkICJjcmVhdGluZyIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0MDIKKyMsIGZ1enp5Cittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIGlzIGluIGFuIGludmFsaWQgc3RhdGUuICBQZXJoYXBzIGl0IGlzIG1vdW50ZWQ/IgorbXNnc3RyICJPIHJvdHVsbyBkbyBkaXNjbyBhZmlybWEgcXVlIG8gZGlzY28g6SBtYWlvciBxdWUgJXMiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQxMAorbXNnaWQgIlRoZSBmaWxlIHN5c3RlbSBpcyBpbiBvbGQgKHVucmVzaXplYWJsZSkgZm9ybWF0LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0MTYKK21zZ2lkICJJbnZhbGlkIGZyZWUgYmxvY2tzIGNvdW50LiAgUnVuIHJlaXNlcmZzY2sgLS1jaGVjayBmaXJzdC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDMxCisjLCBmdXp6eQorbXNnaWQgImNoZWNraW5nIgorbXNnc3RyICJjaGVjayIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDM3Cittc2dpZCAiUmVpc2VyZnMgdHJlZSBzZWVtcyB0byBiZSBjb3JydXB0ZWQuICBSdW4gcmVpc2VyZnNjayAtLWNoZWNrIGZpcnN0LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0NDkKKyMsIGZ1enp5Cittc2dpZCAiIgorIlRoZSByZWlzZXJmcyBmaWxlIHN5c3RlbSBwYXNzZWQgYSBiYXNpYyBjaGVjay4gIEZvciBhIG1vcmUgY29tcHJlaGVuc2l2ZSAiCisiY2hlY2ssIHJ1biByZWlzZXJmc2NrIC0tY2hlY2suIgorbXNnc3RyICIiCisiTyBzaXN0ZW1hIGRlIGZpY2hlaXJvcyBleHQyIHBhc3NvdSBwZWxvIHRlc3RlIGLhc2ljby4gUGFyYSB1bSB0ZXN0ZSBtYWlzICIKKyJwcm9mdW5kbywgdXRpbGl6ZSBvIHByb2dyYW1hIGUyZnNjay4iCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQ3NAorIywgZnV6enkKK21zZ2lkICJTb3JyeSwgY2FuJ3QgbW92ZSB0aGUgc3RhcnQgb2YgcmVpc2VyZnMgcGFydGl0aW9ucyB5ZXQuIgorbXNnc3RyICJEZXNjdWxwZSwgbuNvIHBvc3NvIG1vdmVyIG8gaW7tY2lvIGRlIHBhcnRp5/VlcyBleHQyIGFpbmRhISIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDkwCittc2dpZCAiQ291bGRuJ3QgcmVvcGVuIGRldmljZSBhYnN0cmFjdGlvbiBsYXllciBmb3IgcmVhZC93cml0ZS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NTA4IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NTUyCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjI1MCBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjYyOQorIywgZnV6enkKK21zZ2lkICJzaHJpbmtpbmciCittc2dzdHIgIkF2aXNvIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo1MjAKKyMsIGZ1enp5Cittc2dpZCAiZXhwYW5kaW5nIgorbXNnc3RyICJBdmlzbyIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NTkyCittc2dpZCAiQ291bGRuJ3QgY3JlYXRlIHJlaXNlcmZzIGRldmljZSBhYnN0cmFjdGlvbiBoYW5kbGVyLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo2MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGV2aWNlIGlzIHRvbyBzbWFsbCBmb3IgJWx1IGJsb2Nrcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NjE1Cittc2dpZCAiY29weWluZyIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo2ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgcmVzb2x2ZSBzeW1ib2wgJXMuICBFcnJvcjogJXMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjcwNAorbXNnaWQgIkdOVSBQYXJ0ZWQgZm91bmQgYW4gaW52YWxpZCBsaWJyZWlzZXJmcyBsaWJyYXJ5LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo3MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkdOVSBQYXJ0ZWQgaGFzIGRldGVjdGVkIGxpYnJlaXNlcmZzIGludGVyZmFjZSB2ZXJzaW9uIG1pc21hdGNoLiAgRm91bmQgJWQtJSIKKyJkLCByZXF1aXJlZCAlZC4gUmVpc2VyRlMgc3VwcG9ydCB3aWxsIGJlIGRpc2FibGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2FpeC5jOjEzNworIywgZnV6enkKK21zZ2lkICJTdXBwb3J0IGZvciByZWFkaW5nIEFJWCBkaXNrIGxhYmVscyBpcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiIgorIk8gc3Vwb3J0ZSBwYXJhIGNyaWFyIHNpc3RlbWEgZGUgZmljaGVpcm9zICVzIG7jbyBmb2kgaW1wbGVtZW50YWRvIGFpbmRhLiIKKworIzogbGlicGFydGVkL2xhYmVscy9haXguYzoxNDgKKyMsIGZ1enp5Cittc2dpZCAiU3VwcG9ydCBmb3Igd3JpdGluZyBBSVggZGlzayBsYWJlbHMgaXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiIKKyJPIHN1cG9ydGUgcGFyYSBjcmlhciBzaXN0ZW1hIGRlIGZpY2hlaXJvcyAlcyBu428gZm9pIGltcGxlbWVudGFkbyBhaW5kYS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYWl4LmM6MTYxCisjLCBmdXp6eQorbXNnaWQgIiIKKyJTdXBwb3J0IGZvciBhZGRpbmcgcGFydGl0aW9ucyB0byBBSVggZGlzayBsYWJlbHMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiIKKyJPIHN1cG9ydGUgcGFyYSBjcmlhciBzaXN0ZW1hIGRlIGZpY2hlaXJvcyAlcyBu428gZm9pIGltcGxlbWVudGFkbyBhaW5kYS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYWl4LmM6MTcxCisjLCBmdXp6eQorbXNnaWQgIiIKKyJTdXBwb3J0IGZvciBkdXBsaWNhdGluZyBwYXJ0aXRpb25zIGluIEFJWCBkaXNrIGxhYmVscyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiIgorIk8gc3Vwb3J0ZSBwYXJhIGNyaWFyIHNpc3RlbWEgZGUgZmljaGVpcm9zICVzIG7jbyBmb2kgaW1wbGVtZW50YWRvIGFpbmRhLiIKKworIzogbGlicGFydGVkL2xhYmVscy9haXguYzoxODkKKyMsIGZ1enp5Cittc2dpZCAiIgorIlN1cHBvcnQgZm9yIHNldHRpbmcgc3lzdGVtIHR5cGUgb2YgcGFydGl0aW9ucyBpbiBBSVggZGlzayBsYWJlbHMgaXMgbm90ICIKKyJpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICIiCisiTyBzdXBvcnRlIHBhcmEgY3JpYXIgc2lzdGVtYSBkZSBmaWNoZWlyb3MgJXMgbuNvIGZvaSBpbXBsZW1lbnRhZG8gYWluZGEuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2FpeC5jOjE5OQorIywgZnV6enkKK21zZ2lkICJTdXBwb3J0IGZvciBzZXR0aW5nIGZsYWdzIGluIEFJWCBkaXNrIGxhYmVscyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiIgorIk8gc3Vwb3J0ZSBwYXJhIGNyaWFyIHNpc3RlbWEgZGUgZmljaGVpcm9zICVzIG7jbyBmb2kgaW1wbGVtZW50YWRvIGFpbmRhLiIKKworIzogbGlicGFydGVkL2xhYmVscy9ic2QuYzo1MDEgbGlicGFydGVkL2xhYmVscy9kYXNkLmM6NzU1CisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rvcy5jOjE5NzQgbGlicGFydGVkL2xhYmVscy9kdmguYzo3NzAKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6MTQ0OCBsaWJwYXJ0ZWQvbGFiZWxzL2xvb3AuYzoyNDgKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6MTQwOCBsaWJwYXJ0ZWQvbGFiZWxzL3BjOTguYzo3NTkKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6MTA0MSBsaWJwYXJ0ZWQvbGFiZWxzL3N1bi5jOjcwNQorIywgZnV6enkKK21zZ2lkICJVbmFibGUgdG8gc2F0aXNmeSBhbGwgY29uc3RyYWludHMgb24gdGhlIHBhcnRpdGlvbi4iCittc2dzdHIgIkltcG9zc+12ZWwgYWxpbmhhciBhIHBhcnRp5+NvLiIKKworIzogbGlicGFydGVkL2xhYmVscy9ic2QuYzo1MjYKKyMsIGZ1enp5Cittc2dpZCAiVW5hYmxlIHRvIGFsbG9jYXRlIGEgYnNkIGRpc2tsYWJlbCBzbG90LiIKK21zZ3N0ciAiSW1wb3Nz7XZlbCBsb2NhbGl6YXIgdW0gcm90dWxvIGRlIGRpc2NvIGJzZCIKKworIzogbGlicGFydGVkL2xhYmVscy9kYXNkLmM6MTY2CisjLCBmdXp6eQorbXNnaWQgIlVuYWJsZSB0byBkZXRlcm1pbmUgdGhlIGJsb2NrIHNpemUgb2YgdGhpcyBkYXNkIgorbXNnc3RyICJJbXBvc3PtdmVsIGRldGVybWluYXIgdGFtYW5obyBkZSAlcyAoJXMpIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rhc2QuYzo3ODEKKyMsIGZ1enp5Cittc2dpZCAiVW5hYmxlIHRvIGFsbG9jYXRlIGEgZGFzZCBkaXNrbGFiZWwgc2xvdCIKK21zZ3N0ciAiSW1wb3Nz7XZlbCBsb2NhbGl6YXIgdW0gcm90dWxvIGRlIGRpc2NvIGJzZCIKKworIzogbGlicGFydGVkL2xhYmVscy9kb3MuYzo4MjcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcGFydGl0aW9uIHRhYmxlIG9uICVzIC0tIHdyb25nIHNpZ25hdHVyZSAleC4iCittc2dzdHIgIlRhYmVsYSBkZSBwYXJ0aef1ZXMgaW524WxpZGEgZW0gJXMgLSBhc3NpbmF0dXJhIGVycmFkYSAleCIKKworIzogbGlicGFydGVkL2xhYmVscy9kb3MuYzo4NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBwYXJ0aXRpb24gdGFibGUgLSByZWN1cnNpdmUgcGFydGl0aW9uIG9uICVzLiIKK21zZ3N0ciAiVGFiZWxhIGRlIHBhcnRp5/VlcyBpbnbhbGlkYSAtIHBhcnRp5+NvIHJlY3Vyc2l2YSBlbSAlcy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZG9zLmM6MTMxOAorIywgZnV6enkKK21zZ2lkICJFeHRlbmRlZCBwYXJ0aXRpb25zIGNhbm5vdCBiZSBoaWRkZW4gb24gbXNkb3MgZGlzayBsYWJlbHMuIgorbXNnc3RyICJQYXJ0aef1ZXMgZXh0MiBu428gcG9kZW0gc2VyIGVzY29uZGlkYXMgZW0gcvN0dWxvcyBkZSBkaXNjbyBtc2Rvcy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZG9zLmM6MTk1OAorbXNnaWQgIlBhcnRlZCBjYW4ndCByZXNpemUgcGFydGl0aW9ucyBtYW5hZ2VkIGJ5IFdpbmRvd3MgRHluYW1pYyBEaXNrLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjE5MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIG5vIGV4dGVuZGVkIHBhcnRpdGlvbiAodm9sdW1lIGhlYWRlciBwYXJ0aXRpb24pLiIKK21zZ3N0ciAiIgorIk7jbyBwb3NzbyByZWRpbWVuc2lvbmFyIHVtYSBwYXJ0aefjbyBleHRlbmRpZGEsIHNlbSBleGNsdWlyIHVtYSBwYXJ0aefjbyAiCisibPNnaWNhLiIKKworIzogbGlicGFydGVkL2xhYmVscy9kdmguYzozMTMKK21zZ2lkICJDaGVja3N1bSBpcyB3cm9uZywgaW5kaWNhdGluZyB0aGUgcGFydGl0aW9uIHRhYmxlIGlzIGNvcnJ1cHQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6NjE2CisjLCBmdXp6eQorbXNnaWQgIk9ubHkgcHJpbWFyeSBwYXJ0aXRpb25zIGNhbiBiZSByb290IHBhcnRpdGlvbnMuIgorbXNnc3RyICJO428gcG9zc28gYWRpY2lvbmFyIHVtYSBwYXJ0aefjbyBwcmlt4XJpYSBkZW50cm8gZGUgdW1hIGV4dGVuZGlkYS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6NjMwCisjLCBmdXp6eQorbXNnaWQgIk9ubHkgcHJpbWFyeSBwYXJ0aXRpb25zIGNhbiBiZSBzd2FwIHBhcnRpdGlvbnMuIgorbXNnc3RyICJO428gcG9zc28gYWRpY2lvbmFyIHVtYSBwYXJ0aefjbyBwcmlt4XJpYSBkZW50cm8gZGUgdW1hIGV4dGVuZGlkYS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6NjQ0Cittc2dpZCAiT25seSBsb2dpY2FsIHBhcnRpdGlvbnMgY2FuIGJlIGEgYm9vdCBmaWxlLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjcyMQorbXNnaWQgIk9ubHkgbG9naWNhbCBwYXJ0aXRpb25zIChib290IGZpbGVzKSBoYXZlIGEgbmFtZS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9kdmguYzo4MTIKKyMsIGZ1enp5Cittc2dpZCAiVG9vIG1hbnkgcHJpbWFyeSBwYXJ0aXRpb25zIgorbXNnc3RyICJNdWl0YXMgcOFnaW5hcyBpbnbhbGlkYXMuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBvcGVuIGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBzZWVrIGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyByZWFkIGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTEzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgd3JpdGUgZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIlcyBkdXJhbnRlIGVzY3JpdGEgZW0gJXMiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIElPQ1RMIGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBBUEkgdmVyc2lvbiBtaXNtYXRjaFxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgVW5zdXBwb3J0ZWQgZGlzayB0eXBlXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBVbnN1cHBvcnRlZCBkaXNrIGZvcm1hdFxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEzMAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIERpc2sgaW4gdXNlXG4iCisiJXNcbiIKK21zZ3N0ciAiVGlwbyBkZSBy83R1bG8gZGUgZGlzY286ICVzXG4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIENvbmZpZyBmaWxlIHN5bnRheCBlcnJvclxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgVm9sdW1lIGxhYmVsIGlzIGNvcnJ1cHRlZC5cbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIGEgZGF0YSBzZXQgbmFtZSBpcyBjb3JydXB0ZWQuXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBzcGFjZSBhbGxvY2F0aW9uXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBkZXZpY2UgdmVyaWZpY2F0aW9uIGZhaWxlZFxuIgorIlRoZSBzcGVjaWZpZWQgZGV2aWNlIGlzIG5vdCBhIHZhbGlkIERBU0QgZGV2aWNlXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgRmF0YWwgZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6NDU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBjb250YWlucyBHUFQgc2lnbmF0dXJlcywgaW5kaWNhdGluZyB0aGF0IGl0IGhhcyBhIEdQVCB0YWJsZS4gIEhvd2V2ZXIsIGl0ICIKKyJkb2VzIG5vdCBoYXZlIGEgdmFsaWQgZmFrZSBtc2RvcyBwYXJ0aXRpb24gdGFibGUsIGFzIGl0IHNob3VsZC4gIFBlcmhhcHMgaXQgIgorIndhcyBjb3JydXB0ZWQgLS0gcG9zc2libHkgYnkgYSBwcm9ncmFtIHRoYXQgZG9lc24ndCB1bmRlcnN0YW5kIEdQVCBwYXJ0aXRpb24gIgorInRhYmxlcy4gIE9yIHBlcmhhcHMgeW91IGRlbGV0ZWQgdGhlIEdQVCB0YWJsZSwgYW5kIGFyZSBub3cgdXNpbmcgYW4gbXNkb3MgIgorInBhcnRpdGlvbiB0YWJsZS4gIElzIHRoaXMgYSBHUFQgcGFydGl0aW9uIHRhYmxlPyIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjY0OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvcm1hdCBvZiB0aGUgR1BUIHBhcnRpdGlvbiB0YWJsZSBpcyB2ZXJzaW9uICV4LCB3aGljaCBpcyBuZXdlciB0aGFuICIKKyJ3aGF0IFBhcnRlZCBjYW4gcmVjb2duaXNlLiAgUGxlYXNlIHRlbGwgdXMhICBidWctcGFydGVkQGdudS5vcmciCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzo2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vdCBhbGwgb2YgdGhlIHNwYWNlIGF2YWlsYWJsZSB0byAlcyBhcHBlYXJzIHRvIGJlIHVzZWQsIHlvdSBjYW4gZml4IHRoZSBHUFQgIgorInRvIHVzZSBhbGwgb2YgdGhlIHNwYWNlIChhbiBleHRyYSAlbGx1IGJsb2Nrcykgb3IgY29udGludWUgd2l0aCB0aGUgY3VycmVudCAiCisic2V0dGluZz8gIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6ODI3Cittc2dpZCAiIgorIlRoZSBiYWNrdXAgR1BUIHRhYmxlIGlzIG5vdCBhdCB0aGUgZW5kIG9mIHRoZSBkaXNrLCBhcyBpdCBzaG91bGQgYmUuICBUaGlzICIKKyJtaWdodCBtZWFuIHRoYXQgYW5vdGhlciBvcGVyYXRpbmcgc3lzdGVtIGJlbGlldmVzIHRoZSBkaXNrIGlzIHNtYWxsZXIuICBGaXgsICIKKyJieSBtb3ZpbmcgdGhlIGJhY2t1cCB0byB0aGUgZW5kIChhbmQgcmVtb3ZpbmcgdGhlIG9sZCBiYWNrdXApPyIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjg2MgorbXNnaWQgIiIKKyJUaGUgcHJpbWFyeSBHUFQgdGFibGUgaXMgY29ycnVwdCwgYnV0IHRoZSBiYWNrdXAgYXBwZWFycyBPSywgc28gdGhhdCB3aWxsIGJlICIKKyJ1c2VkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjg3MAorbXNnaWQgIiIKKyJCb3RoIHRoZSBwcmltYXJ5IGFuZCBiYWNrdXAgR1BUIHRhYmxlcyBhcmUgY29ycnVwdC4gIFRyeSBtYWtpbmcgYSBmcmVzaCAiCisidGFibGUsIGFuZCB1c2luZyBQYXJ0ZWQncyByZXNjdWUgZmVhdHVyZSB0byByZWNvdmVyIHBhcnRpdGlvbnMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6MTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgc2lnbmF0dXJlICV4IGZvciBNYWMgZGlzayBsYWJlbHMuIgorbXNnc3RyICJBc3NpbmF0dXJhIGluduFsaWRhICV4IHBhcmEgcvN0dWxvcyBkZSBkaXNjbyBNYWMuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjIyNgorbXNnaWQgIlBhcnRpdGlvbiBtYXAgaGFzIG5vIHBhcnRpdGlvbiBtYXAgZW50cnkhIgorbXNnc3RyICJNYXBhIGRlIHBhcnRp5/VlcyBu428gdGVtIG5lbmh1bWEgZW50cmFkYSEiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIHRvbyBzbWFsbCBmb3IgYSBNYWMgZGlzayBsYWJlbCEiCittc2dzdHIgIiVzIOkgbXVpdG8gcGVxdWVubyBwYXJhIHVtIHLzdHVsbyBkZSBkaXNjbyBNYWMhIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjUzMgorIywgYy1mb3JtYXQKK21zZ2lkICJQYXJ0aXRpb24gJWQgaGFzIGFuIGludmFsaWQgc2lnbmF0dXJlICV4LiIKK21zZ3N0ciAiQSBwYXJ0aefjbyAlZCB0ZW0gdW1hIGFzc2luYXR1cmEgaW524WxpZGEgJXguIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjU1MAorIywgYy1mb3JtYXQKK21zZ2lkICJQYXJ0aXRpb24gJWQgaGFzIGFuIGludmFsaWQgbGVuZ3RoIG9mIDAgYnl0ZXMhIgorbXNnc3RyICJBIHBhcnRp5+NvICVkIHRlbSB1bSB0YW1hbmhvIGluduFsaWRvIGRlIDAgYnl0ZXMhIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjU4MAorIywgZnV6enkKK21zZ2lkICJUaGUgZGF0YSByZWdpb24gZG9lc24ndCBzdGFydCBhdCB0aGUgc3RhcnQgb2YgdGhlIHBhcnRpdGlvbi4iCittc2dzdHIgIkEgcmVnaeNvIGRlIGRhZG9zIG7jbyBjb21l52Egbm8gaW7tY2lvIGRhIHBhcnRp5+NvIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjU5NworIywgZnV6enkKK21zZ2lkICJUaGUgYm9vdCByZWdpb24gZG9lc24ndCBzdGFydCBhdCB0aGUgc3RhcnQgb2YgdGhlIHBhcnRpdGlvbi4iCittc2dzdHIgIkEgcmVnaeNvIGRlIGluaWNpYWxpemHn428gbuNvIGNvbWXnYSBubyBpbu1jaW8gZGEgcGFydGnn428iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NjExCittc2dpZCAiVGhlIHBhcnRpdGlvbidzIGJvb3QgcmVnaW9uIGRvZXNuJ3Qgb2NjdXB5IHRoZSBlbnRpcmUgcGFydGl0aW9uLiIKK21zZ3N0ciAiQSByZWdp428gZGUgaW5pY2lhbGl6YefjbyBkYSBwYXJ0aefjbyBu428gYSBvY3VwYSBpbnRlaXJhbWVudGUuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjYyMgorbXNnaWQgIlRoZSBwYXJ0aXRpb24ncyBkYXRhIHJlZ2lvbiBkb2Vzbid0IG9jY3VweSB0aGUgZW50aXJlIHBhcnRpdGlvbi4iCittc2dzdHIgIkEgcmVnaeNvIGRlIGRhZG9zIGRhIHBhcnRp5+NvIG7jbyBhIG9jdXBhIGludGVpcmFtZW50ZS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6Njc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXZWlyZCBibG9jayBzaXplIG9uIGRldmljZSBkZXNjcmlwdG9yOiAlZCBieXRlcyBpcyBub3QgZGl2aXNpYmxlIGJ5IDUxMi4iCittc2dzdHIgIiIKKyJ0YW1hbmhvIGRlIGJsb2NvIGVzdHJhbmhvIG5vIGRlc2NyaXRvciBkZSBkaXNwb3NpdGl2bzogJWQgYnl0ZXMgbuNvIHPjbyAiCisiZGl2aXPtdmVpcyBwb3IgNTEyLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo2ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBkcml2ZXIgZGVzY3JpcHRvciBzYXlzIHRoZSBwaHlzaWNhbCBibG9jayBzaXplIGlzICVkIGJ5dGVzLCBidXQgTGludXggIgorInNheXMgaXQgaXMgJWQgYnl0ZXMuIgorbXNnc3RyICIiCisiTyBkZXNjcml0b3IgZG8gZHJpdmVyIGluZm9ybWEgcXVlIG8gdGFtYW5obyBm7XNpY28gZGUgYmxvY28g6SAlZCBieXRlcywgbWFzICIKKyJvIExpbnV4IGluZm9ybWEgcXVlIOkgJWQgYnl0ZXMuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjczNgorbXNnaWQgIk5vIHZhbGlkIHBhcnRpdGlvbiBtYXAgZm91bmQuIgorbXNnc3RyICJOZW5odW0gbWFwYSBkZSBwYXJ0aef1ZXMgduFsaWRvIGZvaSBlbmNvbnRyYWRvLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo3OTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb25mbGljdGluZyBwYXJ0aXRpb24gbWFwIGVudHJ5IHNpemVzISAgRW50cnkgMSBzYXlzIGl0IGlzICVkLCBidXQgZW50cnkgJWQgIgorInNheXMgaXQgaXMgJWQhIgorbXNnc3RyICIiCisiQ29uZmxpdG8gbm9zIHRhbWFuaG9zIGRlIG1hcGEgZGUgcGFydGnn428hIEVudHJhZGEgMSBpbmZvcm1hIHF1ZSDpICVkLCBtYXMgIgorImVudHJhZGEgJWQgaW5mb3JtYSBxdWUg6SAlZCEiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6ODIyCisjLCBmdXp6eQorbXNnaWQgIldlaXJkISAgVGhlcmUgYXJlIDIgcGFydGl0aW9ucyBtYXAgZW50cmllcyEiCittc2dzdHIgIkVzdHJhbmhvIC0gMiBlbnRyYWRhcyBubyBtYXBhIGRlIHBhcnRp5+NvIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjEzNDcKK21zZ2lkICIiCisiQ2hhbmdpbmcgdGhlIG5hbWUgb2YgYSByb290IG9yIHN3YXAgcGFydGl0aW9uIHdpbGwgcHJldmVudCBMaW51eCBmcm9tICIKKyJyZWNvZ25pc2luZyBpdCBhcyBzdWNoLiIKK21zZ3N0ciAiIgorIk11ZGFyIG8gbm9tZSBkZSB1bWEgcGFydGnn428gcm9vdCBvdSBzd2FwIGly4SBpbXBlZGlyIG8gTGludXggZGUgcmVjb25oZWPqLSIKKyJsYSBjb21vIHRhbC4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6MTQ0MworIywgZnV6enkKK21zZ2lkICJDYW4ndCBhZGQgYW5vdGhlciBwYXJ0aXRpb24gLS0gdGhlIHBhcnRpdGlvbiBtYXAgaXMgdG9vIHNtYWxsISIKK21zZ3N0ciAiIgorIk7jbyBwb3NzbyBhZGljaW9uYXIgb3V0cmEgcGFydGnn428gLSBvIG1hcGEgZGUgcGFydGnn9WVzIOkgbXVpdG8gcGVxdWVubyEiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcGM5OC5jOjM1NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBwYXJ0aXRpb24gdGFibGUgb24gJXMuIgorbXNnc3RyICJUYWJlbGEgZGUgcGFydGnn9WVzIGluduFsaWRhIGVtICVzIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3BjOTguYzo0MDYgbGlicGFydGVkL2xhYmVscy9wYzk4LmM6NDg0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiUGFydGl0aW9uICVkIGlzbid0IGFsaWduZWQgdG8gY3lsaW5kZXIgYm91bmRhcmllcy4gIFRoaXMgaXMgc3RpbGwgIgorInVuc3VwcG9ydGVkLiIKK21zZ3N0ciAiIgorIkEgcGFydGnn428gJWQgbuNvIGVzdOEgYWxpbmhhZGEgY29tIG8gbGltaXRlIGRvIGNpbGluZHJvLiBQcmVjaXNvIGFkaWNpb25hciAiCisic3Vwb3J0ZSBwYXJhIGlzc28uIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3BjOTguYzo3OTEKK21zZ2lkICJDYW4ndCBhZGQgYW5vdGhlciBwYXJ0aXRpb24uIgorbXNnc3RyICJO428gcG9zc28gYWRpY2lvbmFyIG91dHJhIHBhcnRp5+NvLiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzoxNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBCYWQgY2hlY2tzdW0gb24gYmxvY2sgJWxsdSBvZiB0eXBlICVzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjQ5NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IERpZG4ndCBmaW5kIHJkYiBibG9jaywgc2hvdWxkIG5ldmVyIGhhcHBlbi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo1ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBMb29wIGRldGVjdGVkIGF0IGJsb2NrICVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjYwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IFRoZSAlcyBsaXN0IHNlZW1zIGJhZCBhdCBibG9jayAlcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo2ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gbGlzdCBiYWQgYmxvY2tzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjY5NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gbGlzdCBwYXJ0aXRpb24gYmxvY2tzLiIKK21zZ3N0ciAiSW1wb3Nz7XZlbCBhbGluaGFyIGEgcGFydGnn428uIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjcwNQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBsaXN0IGZpbGUgc3lzdGVtIGJsb2Nrcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo3MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gbGlzdCBib290IGJsb2Nrcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo3NDAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byB3cml0ZSBwYXJ0aXRpb24gYmxvY2sgYXQgJWQuIgorbXNnc3RyICJJbXBvc3PtdmVsIGRldGVybWluYXIgc2UgYSBwYXJ0aefjbyBlc3ThIG1vbnRhZGEuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjEwNjkKKyMsIGZ1enp5Cittc2dpZCAiVW5hYmxlIHRvIGFsbG9jYXRlIGEgcGFydGl0aW9uIG51bWJlci4iCittc2dzdHIgIkltcG9zc+12ZWwgYWxpbmhhciBhIHBhcnRp5+NvLiIKKworIzogbGlicGFydGVkL2xhYmVscy9zdW4uYzoxNDUKK21zZ2lkICJDb3JydXB0ZWQgU3VuIGRpc2sgbGFiZWwgZGV0ZWN0ZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6MjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZGlzayBDSFMgZ2VvbWV0cnkgKCVkLCVkLCVkKSByZXBvcnRlZCBieSB0aGUgb3BlcmF0aW5nIHN5c3RlbSBkb2VzIG5vdCAiCisibWF0Y2ggdGhlIGdlb21ldHJ5IHN0b3JlZCBvbiB0aGUgZGlzayBsYWJlbCAoJWQsJWQsJWQpLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3N1bi5jOjI4OAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgZGlzayBsYWJlbCBkZXNjcmliZXMgYSBkaXNrIGJpZ2dlciB0aGFuICVzLiIKK21zZ3N0ciAiTyByb3R1bG8gZG8gZGlzY28gYWZpcm1hIHF1ZSBvIGRpc2NvIOkgbWFpb3IgcXVlICVzIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3N1bi5jOjQ0MgorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgZGlzayBoYXMgJWQgY3lsaW5kZXJzLCB3aGljaCBpcyBncmVhdGVyIHRoYW4gdGhlIG1heGltdW0gb2YgNjU1MzYuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6NzM3Cittc2dpZCAiIgorIlRoZSBXaG9sZSBEaXNrIHBhcnRpdGlvbiBpcyB0aGUgb25seSBhdmFpbGFibGUgb25lIGxlZnQuICBHZW5lcmFsbHksIGl0IGlzICIKKyJub3QgYSBnb29kIGlkZWEgdG8gb3ZlcndyaXRlIHRoaXMgcGFydGl0aW9uIHdpdGggYSByZWFsIG9uZS4gIFNvbGFyaXMgbWF5ICIKKyJub3QgYmUgYWJsZSB0byBib290IHdpdGhvdXQgaXQsIGFuZCBTSUxPICh0aGUgc3BhcmMgYm9vdCBsb2FkZXIpIGFwcHJlY2lhdGVzICIKKyJpdCBhcyB3ZWxsLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3N1bi5jOjc1MgorbXNnaWQgIlN1biBkaXNrIGxhYmVsIGlzIGZ1bGwuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjE2MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgb3BlbmluZyBkZXZpY2UgJyVzJyBmYWlsZWQuXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzoxNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHNlZWtpbmcgZGV2aWNlICclcycgZmFpbGVkLlxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6MTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyB3cml0aW5nIHRvIGRldmljZSAnJXMnIGZhaWxlZCxcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjE3NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgcmVhZGluZyBmcm9tIGRldmljZSAnJXMnIGZhaWxlZC5cbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjE3OQorIywgYy1mb3JtYXQKK21zZ2lkICJGYXRhbCBlcnJvclxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQxOAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIFZUT0MgbGFiZWxzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0MjQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBWVE9DIEZNVDEgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDMxCittc2dpZCAiQ291bGQgbm90IHJlYWQgVlRPQyBGTVQ0IERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQzOAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIFZUT0MgRk1UNSBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0NDUKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBWVE9DIEZNVDcgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDYyCittc2dpZCAiQ291bGQgbm90IHdyaXRlIFZUT0MgbGFiZWxzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0NjgKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgVlRPQyBGTVQxIERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQ3NQorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBWVE9DIEZNVDQgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDgyCittc2dpZCAiQ291bGQgbm90IHdyaXRlIFZUT0MgRk1UNSBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0ODkKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgVlRPQyBGTVQ3IERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9saWJwYXJ0ZWQuYzoyOTYgbGlicGFydGVkL2xpYnBhcnRlZC5jOjMxNgorbXNnaWQgIk91dCBvZiBtZW1vcnkuIgorbXNnc3RyICJO428gaOEgbWVt83JpYS4iCisKKyM6IGxpYnBhcnRlZC91bml0LmM6MTM5Cittc2dpZCAiQ2Fubm90IGdldCB1bml0IHNpemUgZm9yIHNwZWNpYWwgdW5pdCAnQ09NUEFDVCcuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC91bml0LmM6Mzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIlwiJXNcIiBoYXMgaW52YWxpZCBzeW50YXggZm9yIGxvY2F0aW9ucy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL3VuaXQuYzozOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIG1heGltdW0gaGVhZCB2YWx1ZSBpcyAlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL3VuaXQuYzo0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIG1heGltdW0gc2VjdG9yIHZhbHVlIGlzICVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvdW5pdC5jOjQxMyBsaWJwYXJ0ZWQvdW5pdC5jOjU0NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVGhlIGxvY2F0aW9uICVzIGlzIG91dHNpZGUgb2YgdGhlIGRldmljZSAlcy4iCittc2dzdHIgIkltcG9zc+12ZWwgY3JpYXIgcGFydGnn428gZm9yYSBkbyBkaXNwb3NpdGl2by4iCisKKyM6IGxpYnBhcnRlZC91bml0LmM6NTI3Cittc2dpZCAiSW52YWxpZCBudW1iZXIuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hZmZzLmM6NjMgbGlicGFydGVkL2ZzL2FtaWdhL2FwZnMuYzo1NgorIzogbGlicGFydGVkL2ZzL2FtaWdhL2FzZnMuYzo3MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gYWxsb2NhdGUgcGFydGl0aW9uIGJsb2NrXG4iCittc2dzdHIgIkltcG9zc+12ZWwgYWxpbmhhciBhIHBhcnRp5+NvLiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FmZnMuYzo3OCBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXBmcy5jOjcwCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXNmcy5jOjg2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBhbGxvY2F0ZSBibG9ja1xuIgorbXNnc3RyICJJbXBvc3PtdmVsIGFsaW5oYXIgYSBwYXJ0aefjby4iCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hZmZzLmM6ODMgbGlicGFydGVkL2ZzL2FtaWdhL2FwZnMuYzo3NQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IENvdWxkbid0IHJlYWQgYm9vdCBibG9jayAlbGx1XG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FmZnMuYzo5OSBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXBmcy5jOjg2CisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXNmcy5jOjkyIGxpYnBhcnRlZC9mcy9hbWlnYS9hc2ZzLmM6MTA2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogQ291bGRuJ3QgcmVhZCByb290IGJsb2NrICVsbHVcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzo3MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBhbGxvY2F0ZSBpZCBsaXN0IGVsZW1lbnRcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBDb3VsZG4ndCByZWFkIGJsb2NrICVsbHVcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzoyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBCYWQgY2hlY2tzdW0gb24gYmxvY2sgJWxsdSBvZiB0eXBlICVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6MjEyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyA6IENvdWxkbid0IHdyaXRlIGJsb2NrICVkXG4iCittc2dzdHIgIiVzIGR1cmFudGUgZXNjcml0YSBlbSAlcyIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6Mjc4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBhbGxvY2F0ZSBkaXNrX3NwZWNpZmljIHJkYiBibG9ja1xuIgorbXNnc3RyICJJbXBvc3PtdmVsIGFsaW5oYXIgYSBwYXJ0aefjby4iCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jOjI4OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IERpZG4ndCBmaW5kIHJkYiBibG9jaywgc2hvdWxkIG5ldmVyIGhhcHBlblxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jOjMxOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gcmVhZCBwYXJ0aXRpb24gYmxvY2sgJWxsdVxuIgorbXNnc3RyICJJbXBvc3PtdmVsIGFsaW5oYXIgYSBwYXJ0aefjby4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo4NyBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6MTEyCittc2dpZCAiSW5jb25zaXN0ZW50IGdyb3VwIGRlc2NyaXB0b3JzISIKK21zZ3N0ciAiRGVzY3JpdG9yZXMgZGUgZ3J1cG8gaW5jb25zaXN0ZW50ZXMhIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6OTEgbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjExNgorIywgZnV6enkKK21zZ2lkICJGaWxlIHN5c3RlbSBmdWxsISIKK21zZ3N0ciAiU2lzdGVtYSBkZSBmaWNoZWlyb3MgY2hlaW8hIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6Njg2CisjLCBmdXp6eQorbXNnaWQgIkludmFsaWQgc3VwZXJibG9jay4gIEFyZSB5b3Ugc3VyZSB0aGlzIGlzIGFuIGV4dDIgZmlsZSBzeXN0ZW0/IgorbXNnc3RyICJTdXBlcmJsb2NvIGluduFsaWRvLiBUZW0gY2VydGV6YSBxdWUgaXN0byDpIHVtIHNpc3RlbWEgZXh0Mj8iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo3MDAgbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo2NTgKKyMsIGZ1enp5Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGVycm9ycyEgIFlvdSBzaG91bGQgcnVuIGUyZnNjay4iCittc2dzdHIgIlNpc3RlbWEgZGUgZmljaGVpcm9zIHRlbSBlcnJvcyEgRXhlY3V0ZSBlMmZzY2sgcHJpbWVpcm8hIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6NzExCisjLCBmdXp6eQorbXNnaWQgIiIKKyJGaWxlIHN5c3RlbSB3YXMgbm90IGNsZWFubHkgdW5tb3VudGVkISAgWW91IHNob3VsZCBydW4gZTJmc2NrLiAgTW9kaWZ5aW5nIGFuICIKKyJ1bmNsZWFuIGZpbGUgc3lzdGVtIGNvdWxkIGNhdXNlIHNldmVyZSBjb3JydXB0aW9uLiIKK21zZ3N0ciAiIgorIlNpc3RlbWEgZGUgZmljaGVpcm9zIG7jbyBmb2kgZGVzbW9udGFkbyBjb3JyZWN0YW1lbnRlISBFeGVjdXRlIGUyZnNjayAiCisicHJpbWVpcm8hIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6NzMxCisjLCBmdXp6eQorbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyBhbiBpbmNvbXBhdGlibGUgZmVhdHVyZSBlbmFibGVkLiIKK21zZ3N0ciAiU2lzdGVtYSBkZSBmaWNoZWlyb3MgdGVtIGNhcmFjdGVy7XN0aWNhcyBpbmNvbXBhdO12ZWlzIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6NzQyCittc2dpZCAiRXJyb3IgYWxsb2NhdGluZyBidWZmZXIgY2FjaGUuIgorbXNnc3RyICJFcnJvIGFvIGRldGVybWluYXIgbyBjYWNoZSB0ZW1wb3LhcmlvLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9pbm9kZV9yZWxvY2F0b3IuYzoxMTQKKyMsIGZ1enp5Cittc2dpZCAiIgorIkZvdW5kIGFuIGlub2RlIHdpdGggYSBpbmNvcnJlY3QgbGluayBjb3VudC4gIEJldHRlciBnbyBydW4gZTJmc2NrIGZpcnN0ISIKK21zZ3N0ciAiIgorIkVuY29udHJhZG8gdW0gaW5vZGUgY29tIHVtYSBjb250YWdlbSBpbmNvcnJldGEgZGUgbGlnYef1ZXMuIE1lbGhvciBleGVjdXRhciAiCisibyBlMmZzY2sgcHJpbWVpcm8uIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2lub2RlX3JlbG9jYXRvci5jOjQ4NworbXNnaWQgIk5vdCBlbm91Z2ggZnJlZSBpbm9kZXMhIgorbXNnc3RyICJO428gaOEgaW5vZGVzIGxpdnJlcyBzdWZpY2llbnRlcyEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6MjIzCisjLCBmdXp6eQorbXNnaWQgIkZpbGUgc3lzdGVtIGlzIHRvbyBmdWxsIHRvIHJlbW92ZSBhIGdyb3VwISIKK21zZ3N0ciAiU2lzdGVtYSBkZSBmaWNoZWlyb3MgbXVpdG8gb2N1cGFkbyBwYXJhIHJlbW92ZXIgdW0gZ3J1cG8hIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjIzMgorIywgZnV6enkKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgdG9vIG1hbnkgYWxsb2NhdGVkIGlub2RlcyB0byByZW1vdmUgYSBncm91cCEiCittc2dzdHIgIiIKKyJTaXN0ZW1hIGRlIGZpY2hlaXJvcyB0ZW0gbXVpdG9zIGlub2RlcyB1dGlsaXphZG9zIHBhcmEgcmVtb3ZlciB1bSBncnVwbyEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NDkxCittc2dpZCAiYWRkaW5nIGdyb3VwcyIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjUyOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiWW91ciBmaWxlIHN5c3RlbSBpcyB0b28gZnVsbCB0byByZXNpemUgaXQgdG8gJWkgYmxvY2tzLiAgU29ycnkuIgorbXNnc3RyICIiCisiU2V1IHNpc3RlbWEgZGUgZmljaGVpcm9zIGVzdOEgbXVpdG8gb2N1cGFkbyBwYXJhIHJlZGltZW5zaW9u4S1sbyBwYXJhICVpICIKKyJibG9jb3MuIERlc2N1bHBlLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo1MzgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGZpbGUgc3lzdGVtIGhhcyB0b28gbWFueSBvY2N1cGllZCBpbm9kZXMgdG8gcmVzaXplIGl0IHRvICVpIGJsb2Nrcy4gICIKKyJTb3JyeS4iCittc2dzdHIgIiIKKyJTZXUgc2lzdGVtYSBkZSBmaWNoZWlyb3MgZXN04SBjb20gbXVpdG9zIGlub2RlcyBvY3VwYWRvcyBwYXJhIHJlZGltZW5zaW9u4S0iCisibG8gcGFyYSAlaSBibG9jb3MuIERlc2N1bHBlLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo2NjYKKyMsIGZ1enp5Cittc2dpZCAiRmlsZSBzeXN0ZW0gd2FzIG5vdCBjbGVhbmx5IHVubW91bnRlZCEgIFlvdSBzaG91bGQgcnVuIGUyZnNjay4iCittc2dzdHIgIiIKKyJTaXN0ZW1hIGRlIGZpY2hlaXJvcyBu428gZm9pIGRlc21vbnRhZG8gY29ycmVjdGFtZW50ZSEgRXhlY3V0ZSBlMmZzY2sgIgorInByaW1laXJvISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo2NzUKK21zZ2lkICIiCisiVGhlIGZpbGUgc3lzdGVtIGhhcyB0aGUgJ2Rpcl9pbmRleCcgZmVhdHVyZSBlbmFibGVkLiAgUGFydGVkIGNhbiBvbmx5IHJlc2l6ZSAiCisidGhlIGZpbGUgc3lzdGVtIGlmIGl0IGRpc2FibGVzIHRoaXMgZmVhdHVyZS4gIFlvdSBjYW4gZW5hYmxlIGl0IGxhdGVyIGJ5ICIKKyJydW5uaW5nICd0dW5lMmZzIC1PIGRpcl9pbmRleCBERVZJQ0UnIGFuZCB0aGVuICdlMmZzY2sgLWZEIERFVklDRScuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NjkxCittc2dpZCAiIgorIkEgcmVzaXplIG9wZXJhdGlvbiBvbiB0aGlzIGZpbGUgc3lzdGVtIHdpbGwgdXNlIEVYUEVSSU1FTlRBTCBjb2RlXG4iCisidGhhdCBNQVkgQ09SUlVQVCBpdCAoYWx0aG91Z2ggbm8gb25lIGhhcyByZXBvcnRlZCBhbnkgc3VjaCBkYW1hZ2UgeWV0KS5cbiIKKyJZb3Ugc2hvdWxkIGF0IGxlYXN0IGJhY2t1cCB5b3VyIGRhdGEgZmlyc3QsIGFuZCBydW4gJ2UyZnNjayAtZicgYWZ0ZXJ3YXJkcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9ibG9ja19yZWxvY2F0b3IuYzoxOTgKKyMsIGZ1enp5Cittc2dpZCAiQ3Jvc3MtbGlua2VkIGJsb2NrcyBmb3VuZCEgIEJldHRlciBnbyBydW4gZTJmc2NrIGZpcnN0ISIKK21zZ3N0ciAiIgorIkVuY29udHJhZG9zIGJsb2NvcyBjb20gcmVmZXLqbmNpYSBjcnV6YWRhISBNZWxob3IgZXhlY3V0YXIgZTJmc2NrIHByaW1laXJvLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9ibG9ja19yZWxvY2F0b3IuYzo1MzcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrICVpIGhhcyBubyByZWZlcmVuY2U/ICBXZWlyZC4iCittc2dzdHIgIkJsb2NvICVpIG7jbyB0ZW0gcmVmZXLqbmNpYT8gRXN0cmFuaG8iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfYmxvY2tfcmVsb2NhdG9yLmM6NzM3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJCbG9jayAlaSBzaG91bGRuJ3QgaGF2ZSBiZWVuIG1hcmtlZCAoJWQsICVkKSEiCittc2dzdHIgIkJsb2NvICVpIG7jbyBkZXZlcmlhIHRlciBzaWRvIG1hcmNhZG8hIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9pbnRlcmZhY2UuYzoxODYKKyMsIGZ1enp5Cittc2dpZCAiIgorIlRoZSBleHQyIGZpbGUgc3lzdGVtIHBhc3NlZCBhIGJhc2ljIGNoZWNrLiAgRm9yIGEgbW9yZSBjb21wcmVoZW5zaXZlIGNoZWNrLCAiCisidXNlIHRoZSBlMmZzY2sgcHJvZ3JhbS4iCittc2dzdHIgIiIKKyJPIHNpc3RlbWEgZGUgZmljaGVpcm9zIGV4dDIgcGFzc291IHBlbG8gdGVzdGUgYuFzaWNvLiBQYXJhIHVtIHRlc3RlIG1haXMgIgorInByb2Z1bmRvLCB1dGlsaXplIG8gcHJvZ3JhbWEgZTJmc2NrLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvaW50ZXJmYWNlLmM6MjAzCittc2dpZCAiU29ycnksIGNhbid0IG1vdmUgdGhlIHN0YXJ0IG9mIGV4dDIgcGFydGl0aW9ucyB5ZXQhIgorbXNnc3RyICJEZXNjdWxwZSwgbuNvIHBvc3NvIG1vdmVyIG8gaW7tY2lvIGRlIHBhcnRp5/VlcyBleHQyIGFpbmRhISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9idWZmZXIuYzo4MgorbXNnaWQgIkNvdWxkbid0IGZsdXNoIGJ1ZmZlciBjYWNoZSEiCittc2dzdHIgIk7jbyBmb2kgcG9zc+12ZWwgZXN2YXppYXIgYSBjYWNoZSB0ZW1wb3LhcmlhISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9ta2ZzLmM6MTYyCittc2dpZCAid3JpdGluZyBwZXItZ3JvdXAgbWV0YWRhdGEiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9ta2ZzLmM6NTY0Cittc2dpZCAiRmlsZSBzeXN0ZW0gdG9vIHNtYWxsIGZvciBleHQyLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NhbGMuYzoxMzUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgbmVlZCAlcyBvZiBmcmVlIGRpc2sgc3BhY2UgdG8gc2hyaW5rIHRoaXMgcGFydGl0aW9uIHRvIHRoaXMgc2l6ZS4gICIKKyJDdXJyZW50bHksIG9ubHkgJXMgaXMgZnJlZS4iCittc2dzdHIgIiIKKyJWb2PqIHByZWNpc2EgZGUgJWRNIGRlIGVzcGHnbyBsaXZyZSBwYXJhIGRpbWludWlyIGVzdGEgcGFydGnn428gcGFyYSBlc3RlICIKKyJ0YW1hbmhvICh2b2PqIHRlbSBzb21lbnRlICVkTSBsaXZyZXMpIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvbnRleHQuYzo1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2x1c3RlciBzdGFydCBkZWx0YSA9ICVkLCB3aGljaCBpcyBub3QgYSBtdWx0aXBsZSBvZiB0aGUgY2x1c3RlciBzaXplICVkLiIKK21zZ3N0ciAiIgorIk8gY2x1c3RlciBpbmljaWEgZW0gZGVsdGEgPSAlZCwgcXVlIG7jbyDpIHVtIG36bHRpcGxvIGRvIHRhbWFuaG8gZGUgY2x1c3RlciAlIgorImQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jOjMwOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiUGFydGl0aW9uIHRvbyBiaWcvc21hbGwgZm9yIGEgJXMgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICJBIHBhcnRp5+NvIOkgbXVpdG8gcGVxdWVuYSBwYXJhIHVtIHNpc3RlbWEgZGUgZmljaGVpcm9zIEZBVCIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9mYXQuYzo0NzQKK21zZ2lkICIiCisiVGhlIEZBVHMgZG9uJ3QgbWF0Y2guICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRoaXMgbWVhbnMsIHRoZW4gc2VsZWN0ICIKKyJjYW5jZWwsIHJ1biBzY2FuZGlzayBvbiB0aGUgZmlsZSBzeXN0ZW0sIGFuZCB0aGVuIGNvbWUgYmFjay4iCittc2dzdHIgIiIKKyJBcyBGQVRzIG7jbyBlc3TjbyBpZ3VhaXMuIFNlIG7jbyBzYWJlIG8gcXVlIGlzdG8gc2lnbmlmaWNhLCBzZWxlY2Npb25lICIKKyJjYW5jZWxhciwgZXhlY3V0ZSBvIHNjYW5kaXNrIG5vIHNpc3RlbWEgZGUgZmljaGVpcm9zLCBkZXBvaXMgdm9sdGUuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jOjUxNAorbXNnaWQgIlRoZXJlIGFyZSBubyBwb3NzaWJsZSBjb25maWd1cmF0aW9ucyBmb3IgdGhpcyBGQVQgdHlwZS4iCittc2dzdHIgIk7jbyBo4SBjb25maWd1cmHn9WVzIHBvc3PtdmVpcyBwYXJhIGVzdGUgdGlwbyBkZSBGQVQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jOjUyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRmlsZSBzeXN0ZW0gZG9lc24ndCBoYXZlIGV4cGVjdGVkIHNpemVzIGZvciBXaW5kb3dzIHRvIGxpa2UgaXQuICBDbHVzdGVyICIKKyJzaXplIGlzICVkayAoJWRrIGV4cGVjdGVkKTsgbnVtYmVyIG9mIGNsdXN0ZXJzIGlzICVkICglZCBleHBlY3RlZCk7IHNpemUgb2YgIgorIkZBVHMgaXMgJWQgc2VjdG9ycyAoJWQgZXhwZWN0ZWQpLiIKK21zZ3N0ciAiIgorIk8gc2lzdGVtYSBkZSBmaWNoZWlyb3MgbuNvIHRlbSBvIHRhbWFuaG8gZXNwZXJhZG8gcGFyYSBxdWUgbyBXaW5kb3dzIG8gIgorInV0aWxpemUuIE8gdGFtYW5obyBkbyBjbHVzdGVyIOkgJWRrICglZGsgZXNwZXJhZG8pOyBu+m1lcm8gZGUgY2x1c3RlcnMg6SAlZCAiCisiKCVkIGVzcGVyYWRvKTsgdGFtYW5obyBkYSBGQVQg6SAlZCBzZWN0b3JlcyAoJWQgZXNwZXJhZG8pLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9mYXQuYzo1NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZpbGUgc3lzdGVtIGlzIHJlcG9ydGluZyB0aGUgZnJlZSBzcGFjZSBhcyAlZCBjbHVzdGVycywgbm90ICVkIGNsdXN0ZXJzLiIKK21zZ3N0ciAiIgorIk8gc2lzdGVtYSBkZSBmaWNoZWlyb3MgcmVwb3J0YSBxdWUgbyBlc3Bh528gbGl2cmUg6SBkZSAlZCBjbHVzdGVycywgbuNvIGRlICUiCisiZCBjbHVzdGVycy4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvZmF0LmM6ODc0CisjLCBmdXp6eQorbXNnaWQgIiIKKyJHTlUgUGFydGVkIHdhcyBtaXNjb21waWxlZDogdGhlIEZBVCBib290IHNlY3RvciBzaG91bGQgYmUgNTEyIGJ5dGVzLiAgRkFUICIKKyJzdXBwb3J0IHdpbGwgYmUgZGlzYWJsZWQuIgorbXNnc3RyICIiCisiTyBHTlUgcGFydGVkIGZvaSBjb21waWxhZG8gZXJyYWRhbWVudGU6IG8gc2VjdG9yIGRlIGJvb3QgRkFUIGRldmVyaWEgc2VyIGRlICIKKyI1MTIgYnl0ZXMuIE8gc3Vwb3J0ZSBhIEZBVCBzZXLhIGRlc2FiaWxpdGFkby4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6MTU5CisjLCBmdXp6eQorbXNnaWQgIiIKKyJUaGVyZSdzIG5vdCBlbm91Z2ggcm9vbSBpbiB0aGUgcm9vdCBkaXJlY3RvcnkgZm9yIGFsbCBvZiB0aGUgZmlsZXMuICBFaXRoZXIgIgorImNhbmNlbCwgb3IgaWdub3JlIHRvIGxvc2UgdGhlIGZpbGVzLiIKK21zZ3N0ciAiIgorIk7jbyBo4SBlc3Bh528gc3VmaWNpZW50ZSBubyBkaXJldPNyaW8gcmFpeiBwYXJhIHRvZG9zIG9zIGZpY2hlaXJvcy4gQ2FuY2VsZSwgIgorIm91IGlnbm9yZSBwYXJhIHBlcmRlciBvcyBmaWNoZWlyb3MuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjMwMAorbXNnaWQgIkVycm9yIHdyaXRpbmcgdG8gdGhlIHJvb3QgZGlyZWN0b3J5LiIKK21zZ3N0ciAiRXJybyBlc2NyZXZlbmRvIG5vIGRpcmV083JpbyByYWl6LiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo0ODkKKyMsIGZ1enp5Cittc2dpZCAiSWYgeW91IGxlYXZlIHlvdXIgZmlsZSBzeXN0ZW0gYXMgRkFUMTYsIHRoZW4geW91IHdpbGwgaGF2ZSBubyBwcm9ibGVtcy4iCittc2dzdHIgIlNlIGRlaXhhciBzZXUgc2lzdGVtYSBkZSBmaWNoZWlyb3MgY29tbyBGQVQxNiwgbuNvIGhhdmVy4SBwcm9ibGVtYXMuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjQ5MgorbXNnaWQgIiIKKyJJZiB5b3UgY29udmVydCB0byBGQVQxNiwgYW5kIE1TIFdpbmRvd3MgaXMgaW5zdGFsbGVkIG9uIHRoaXMgcGFydGl0aW9uLCB0aGVuICIKKyJ5b3UgbXVzdCByZS1pbnN0YWxsIHRoZSBNUyBXaW5kb3dzIGJvb3QgbG9hZGVyLiAgSWYgeW91IHdhbnQgdG8gZG8gdGhpcywgeW91ICIKKyJzaG91bGQgY29uc3VsdCB0aGUgUGFydGVkIG1hbnVhbCAob3IgeW91ciBkaXN0cmlidXRpb24ncyBtYW51YWwpLiIKK21zZ3N0ciAiIgorIlNlIHZvY+ogY29udmVydGVyIHBhcmEgRkFUMTYsIGUgbyBNUyBXaW5kb3dzIGVzdOEgaW5zdGFsYWRvIG5lc3RhIHBhcnRp5+NvLCAiCisiZGV2ZXLhIHJlaW5zdGFsYXIgbyBnZXN0b3IgZGUgYm9vdCBkbyBNUyBXaW5kb3dzLiBTZSBxdWlzZXIgZmF6ZXIgaXNzbywgIgorImNvbnN1bHRlIG8gbWFudWFsIGRvIFBhcnRlZCAob3UgbyBtYW51YWwgZGUgc3VhIGRpc3RyaWJ1aefjbykuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjUwMAorbXNnaWQgIiIKKyJJZiB5b3UgbGVhdmUgeW91ciBmaWxlIHN5c3RlbSBhcyBGQVQzMiwgdGhlbiB5b3Ugd2lsbCBub3QgaW50cm9kdWNlIGFueSBuZXcgIgorInByb2JsZW1zLiIKK21zZ3N0ciAiIgorIlNlIGRlaXhhciBzZXUgc2lzdGVtYSBkZSBmaWNoZWlyb3MgY29tbyBGQVQzMiwgdm9j6iBu428gdGVy4SBtYWlzIG5lbmh1bSAiCisicHJvYmxlbWEgbm92by4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTA0Cittc2dpZCAiIgorIklmIHlvdSBjb252ZXJ0IHRvIEZBVDMyLCBhbmQgTVMgV2luZG93cyBpcyBpbnN0YWxsZWQgb24gdGhpcyBwYXJ0aXRpb24sIHRoZW4gIgorInlvdSBtdXN0IHJlLWluc3RhbGwgdGhlIE1TIFdpbmRvd3MgYm9vdCBsb2FkZXIuICBJZiB5b3Ugd2FudCB0byBkbyB0aGlzLCB5b3UgIgorInNob3VsZCBjb25zdWx0IHRoZSBQYXJ0ZWQgbWFudWFsIChvciB5b3VyIGRpc3RyaWJ1dGlvbidzIG1hbnVhbCkuICBBbHNvLCAiCisiY29udmVydGluZyB0byBGQVQzMiB3aWxsIG1ha2UgdGhlIGZpbGUgc3lzdGVtIHVucmVhZGFibGUgYnkgTVMgRE9TLCBNUyAiCisiV2luZG93cyA5NWEsIGFuZCBNUyBXaW5kb3dzIE5ULiIKK21zZ3N0ciAiIgorIlNlIHZvY+ogY29udmVydGVyIHBhcmEgRkFUMzIsIGUgbyBNUyBXaW5kb3dzIGVzdOEgaW5zdGFsYWRvIG5lc3RhIHBhcnRp5+NvLCAiCisiZGV2ZXLhIHJlaW5zdGFsYXIgbyBnZXN0b3IgZGUgYm9vdCBkbyBNUyBXaW5kb3dzLiBTZSBxdWlzZXIgZmF6ZXIgaXNzbywgIgorImNvbnN1bHRlIG8gbWFudWFsIGRvIFBhcnRlZCAob3UgbyBtYW51YWwgZGUgc3VhIGRpc3RyaWJ1aefjbykuIFRhbWLpbSwgIgorImNvbnZlcnRlbmRvIHBhcmEgRkFUMzIgZmFy4SBjb20gcXVlIG8gc2lzdGVtYSBkZSBmaWNoZWlyb3MgbuNvIHNlamEgbWFpcyAiCisicmVjb25oZWNpZG8gcGVsbyBNUyBET1MsIFdpbmRvd3MgOTVhLCBlIE1TIFdpbmRvd3MgTlQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjUxOAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyAgJXMgICVzIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTE5Cittc2dpZCAiV291bGQgeW91IGxpa2UgdG8gdXNlIEZBVDMyPyIKK21zZ3N0ciAiVm9j6iBnb3N0YXJpYSBkZSB1c2FyIEZBVDMyPyIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1NTAgbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgICVzIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTUxCittc2dpZCAiIgorIlRoZSBmaWxlIHN5c3RlbSBjYW4gb25seSBiZSByZXNpemVkIHRvIHRoaXMgc2l6ZSBieSBjb252ZXJ0aW5nIHRvIEZBVDE2LiIKK21zZ3N0ciAiIgorIk8gc2lzdGVtYSBkZSBmaWNoZWlyb3Mgc/MgcG9kZSBzZXIgcmVkaW1lbnNpb25hZG8gcGFyYSBlc3NlIHRhbWFuaG8gc2UgIgorImNvbnZlcnRpZG8gcGFyYSBGQVQxNi4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTY3Cittc2dpZCAiIgorIlRoZSBmaWxlIHN5c3RlbSBjYW4gb25seSBiZSByZXNpemVkIHRvIHRoaXMgc2l6ZSBieSBjb252ZXJ0aW5nIHRvIEZBVDMyLiIKK21zZ3N0ciAiIgorIk8gc2lzdGVtYSBkZSBmaWNoZWlyb3Mgc/MgcG9kZSBzZXIgcmVkaW1lbnNpb25hZG8gcGFyYSBlc3NlIHRhbWFuaG8gc2UgIgorImNvbnZlcnRpZG8gcGFyYSBGQVQzMi4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTgwCisjLCBmdXp6eQorbXNnaWQgIiIKKyJHTlUgUGFydGVkIGNhbm5vdCByZXNpemUgdGhpcyBwYXJ0aXRpb24gdG8gdGhpcyBzaXplLiAgV2UncmUgd29ya2luZyBvbiBpdCEiCittc2dzdHIgIiIKKyJPIEdOVSBQYXJ0ZWQgbuNvIHBvZGUgcmVkaW1lbnNpb25hciBlc3RhIHBhcnRp5+NvIHBhcmEgZXNzZSB0YW1hbmhvLiBFc3RhbW9zICIKKyJhIHRyYWJhbGhhciBuaXNzbyEiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjQ5IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjU2Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGludmFsaWQgc2lnbmF0dXJlIGZvciBhIEZBVCBmaWxlIHN5c3RlbS4iCittc2dzdHIgIlNpc3RlbWEgZGUgZmljaGVpcm9zIHRlbSB1bWEgYXNzaW5hdHVyYSBpbnbhbGlkYSBwYXJhIHVtIEZBVC4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjY0Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGludmFsaWQgc2VjdG9yIHNpemUgZm9yIGEgRkFUIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiU2lzdGVtYSBkZSBmaWNoZWlyb3MgdGVtIHVtIHRhbWFuaG8gZGUgc2VjdG9yIGluduFsaWRvIHBhcmEgdW0gRkFULiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6NzEKKyMsIGZ1enp5Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGludmFsaWQgY2x1c3RlciBzaXplIGZvciBhIEZBVCBmaWxlIHN5c3RlbS4iCittc2dzdHIgIlNpc3RlbWEgZGUgZmljaGVpcm9zIHRlbSB1bSB0YW1hbmhvIGRlIHNlY3RvciBpbnbhbGlkbyBwYXJhIHVtIEZBVC4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjc4CisjLCBmdXp6eQorbXNnaWQgIiIKKyJGaWxlIHN5c3RlbSBoYXMgYW4gaW52YWxpZCBudW1iZXIgb2YgcmVzZXJ2ZWQgc2VjdG9ycyBmb3IgYSBGQVQgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICIiCisiU2lzdGVtYSBkZSBmaWNoZWlyb3MgdGVtIHVtIG76bWVybyBkZSBzZXRvcmVzIHJlc2VydmFkb3MgaW524WxpZG8gcGFyYSB1bSAiCisiRkFULiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6ODUKKyMsIGZ1enp5Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGludmFsaWQgbnVtYmVyIG9mIEZBVHMuIgorbXNnc3RyICJTaXN0ZW1hIGRlIGZpY2hlaXJvcyB0ZW0gdW0gbvptZXJvIGluduFsaWRvIGRlIEZBVFMuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzoxMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgZmlsZSBzeXN0ZW0gaGFzIGEgbG9naWNhbCBzZWN0b3Igc2l6ZSBvZiAlZC4gIEdOVSBQYXJ0ZWQgaXMga25vd24gbm90ICIKKyJ0byB3b3JrIHByb3Blcmx5IHdpdGggc2VjdG9yIHNpemVzIG90aGVyIHRoYW4gNTEyIGJ5dGVzLiIKK21zZ3N0ciAiIgorIkVzdGUgc2lzdGVtYSBkZSBmaWNoZWlyb3MgdGVtIHVtIHRhbWFuaG8gZGUgc2VjdG9yIGzzZ2ljbyBkZSAlZC4gTyBHTlUgIgorIlBhcnRlZCDpIGNvbmhlY2lkbyBwb3IgbuNvIGZ1bmNpb25hciBjb3JyZXRhbWVudGUgY29tIHNlY3RvcmVzIGRpZmVyZW50ZXMgZGUgIgorIjUxMiBieXRlcy4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjE2NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGUgc3lzdGVtJ3MgQ0hTIGdlb21ldHJ5IGlzICglZCwgJWQsICVkKSwgd2hpY2ggaXMgaW52YWxpZC4gIFRoZSAiCisicGFydGl0aW9uIHRhYmxlJ3MgQ0hTIGdlb21ldHJ5IGlzICglZCwgJWQsICVkKS4gIElmIHlvdSBzZWxlY3QgSWdub3JlLCB0aGUgIgorImZpbGUgc3lzdGVtJ3MgQ0hTIGdlb21ldHJ5IHdpbGwgYmUgbGVmdCB1bmNoYW5nZWQuICBJZiB5b3Ugc2VsZWN0IEZpeCwgdGhlICIKKyJmaWxlIHN5c3RlbSdzIENIUyBnZW9tZXRyeSB3aWxsIGJlIHNldCB0byBtYXRjaCB0aGUgcGFydGl0aW9uIHRhYmxlJ3MgQ0hTICIKKyJnZW9tZXRyeS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6MjEzCittc2dpZCAiRkFUIGJvb3Qgc2VjdG9yIHNheXMgbG9naWNhbCBzZWN0b3Igc2l6ZSBpcyAwLiAgVGhpcyBpcyB3ZWlyZC4gIgorbXNnc3RyICJTZWN0b3IgZGUgYm9vdCBGQVQgZGl6IHF1ZSBvIHRhbWFuaG8gbPNnaWNvIGRvIHNlY3RvciDpIDAuIEVzdHJhbmhvLiAiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjIxOQorbXNnaWQgIkZBVCBib290IHNlY3RvciBzYXlzIHRoZXJlIGFyZSBubyBGQVQgdGFibGVzLiAgVGhpcyBpcyB3ZWlyZC4gIgorbXNnc3RyICJTZWN0b3IgZGUgYm9vdCBGQVQgZGl6IHF1ZSBu428gaOEgdGFiZWxhcyBGQVQuIEVzdHJhbmhvLiAiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjIyNQorbXNnaWQgIkZBVCBib290IHNlY3RvciBzYXlzIGNsdXN0ZXJzIGFyZSAwIHNlY3RvcnMuICBUaGlzIGlzIHdlaXJkLiAiCittc2dzdHIgIlNlY3RvciBkZSBib290IEZBVCBkaXogcXVlIG9zIGNsdXN0ZXJzIHTqbSAwIHNldG9yZXMuIEVzdHJhbmhvLiAiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjIzNQorIywgZnV6enkKK21zZ2lkICJGaWxlIHN5c3RlbSBpcyBGQVQxMiwgd2hpY2ggaXMgdW5zdXBwb3J0ZWQuIgorbXNnc3RyICJPIHNpc3RlbWEgZGUgZmljaGVpcm9zIOkgRkFUMTIsIHF1ZSBu428g6SBzdXBvcnRhZG8uIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo0MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBpbmZvcm1hdGlvbiBzZWN0b3IgaGFzIHRoZSB3cm9uZyBzaWduYXR1cmUgKCV4KS4gIFNlbGVjdCBjYW5jZWwgZm9yIG5vdywgIgorImFuZCBzZW5kIGluIGEgYnVnIHJlcG9ydC4gIElmIHlvdSdyZSBkZXNwZXJhdGUsIGl0J3MgcHJvYmFibHkgc2FmZSB0byBpZ25vcmUuIgorbXNnc3RyICIiCisiTyBzZWN0b3IgZGUgaW5mb3JtYef1ZXMgdGVtIHVtYSBhc3NpbmF0dXJhIGluduFsaWRhICgleCkuIFNlbGVjaW9uZSBjYW5jZWxhciAiCisiYWdvcmEsIGUgbWFuZGUgdW0gcmVsYXTzcmlvIGRlIGJ1Zy4gU2Ugdm9j6iBlc3ThIGRlc2VzcGVyYWRvLCDpIHByb3bhdmVsIHF1ZSAiCisic2VqYSBzZWd1cm8gaWdub3Jhci4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY291bnQuYzoxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIGRpcmVjdG9yeSBlbnRyeSBmb3IgJXM6IGZpcnN0IGNsdXN0ZXIgaXMgdGhlIGVuZCBvZiBmaWxlIG1hcmtlci4iCittc2dzdHIgIiIKKyJFbnRyYWRhIGRlIGRpcmV083JpbyBpbnbhbGlkYSBwYXJhICVzOiBvIHByaW1laXJvIGNsdXN0ZXIg6SBvIGZpbSBkbyAiCisibWFyY2Fkb3IgZGUgZmljaGVpcm8uIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvdW50LmM6MTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJCYWQgRkFUOiB1bnRlcm1pbmF0ZWQgY2hhaW4gZm9yICVzLiAgWW91IHNob3VsZCBydW4gZG9zZnNjayBvciBzY2FuZGlzay4iCittc2dzdHIgIiIKKyJGQVQgZXN0cmFnYWRhOiBjYWRlaWEgbuNvIHRlcm1pbmFkYSBwYXJhICVzLiBWb2PqIGRldmVyaWEgY29ycmVyIG8gZG9zZnNjayAiCisib3UgbyBzY2FuZGlzay4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY291bnQuYzoxNzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJCYWQgRkFUOiBjbHVzdGVyICVkIG91dHNpZGUgZmlsZSBzeXN0ZW0gaW4gY2hhaW4gZm9yICVzLiAgWW91IHNob3VsZCBydW4gIgorImRvc2ZzY2sgb3Igc2NhbmRpc2suIgorbXNnc3RyICIiCisiRkFUIGVzdHJhZ2FkYTogY2x1c3RlciAlZCBmb3JhIGRvIHNpc3RlbWEgZGUgZmljaGVpcm9zIG5hIGNhZGVpYSBwYXJhICVzLiAiCisiVm9j6iBkZXZlcmlhIGNvcnJlciBvIGRvc2ZzY2sgb3UgbyBzY2FuZGlzay4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY291bnQuYzoxODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkJhZCBGQVQ6IGNsdXN0ZXIgJWQgaXMgY3Jvc3MtbGlua2VkIGZvciAlcy4gIFlvdSBzaG91bGQgcnVuIGRvc2ZzY2sgb3IgIgorInNjYW5kaXNrLiIKK21zZ3N0ciAiIgorIkZBVCBlc3RyYWdhZGE6IG8gY2x1c3RlciAlZCB0ZW0gdW1hIHJlZmVy6m5jaWEgY3J1emFkYSBwYXJhICVzLiBWb2PqIGRldmVyaWEgIgorImNvcnJlciBvIGRvc2ZzY2sgb3UgbyBzY2FuZGlzay4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY291bnQuYzoyMDMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzICVkaywgYnV0IGl0IGhhcyAlZCBjbHVzdGVycyAoJWRrKS4iCittc2dzdHIgIiVzIOkgJWRrLCBtYXMgdGVtICVkIGNsdXN0ZXJzICglZGspLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb3VudC5jOjI2NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGUgJXMgaXMgbWFya2VkIGFzIGEgc3lzdGVtIGZpbGUuICBUaGlzIG1lYW5zIG1vdmluZyBpdCBjb3VsZCBjYXVzZSAiCisic29tZSBwcm9ncmFtcyB0byBzdG9wIHdvcmtpbmcuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvdGFibGUuYzoxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZBVCAlZCBtZWRpYSAleCBkb2Vzbid0IG1hdGNoIHRoZSBib290IHNlY3RvcidzIG1lZGlhICV4LiAgWW91IHNob3VsZCAiCisicHJvYmFibHkgcnVuIHNjYW5kaXNrLiIKK21zZ3N0ciAiIgorIkZBVCAlZCBt6WRpYSAleCBu428gY29pbmNpZGUgY29tIG8gc2VjdG9yIGRlIGJvb3QgbelkaW8gJXguIFZvY+ogZGV2ZXJpYSAiCisiZXhlY3V0YXIgbyBzY2FuZGlzay4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvdGFibGUuYzoyNjkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhdF90YWJsZV9zZXQ6IGNsdXN0ZXIgJWxkIG91dHNpZGUgZmlsZSBzeXN0ZW0iCittc2dzdHIgImZhdF90YWJsZV9zZXQ6IGNsdXN0ZXIgJWxkIGZvcmEgZG8gc2lzdGVtYSBkZSBmaWNoZWlyb3MiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvdGFibGUuYzozMDEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhdF90YWJsZV9nZXQ6IGNsdXN0ZXIgJWxkIG91dHNpZGUgZmlsZSBzeXN0ZW0iCittc2dzdHIgImZhdF90YWJsZV9nZXQ6IGNsdXN0ZXIgJWxkIGZvcmEgZG8gc2lzdGVtYSBkZSBmaWNoZWlyb3MiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvdGFibGUuYzozNDMKK21zZ2lkICJmYXRfdGFibGVfYWxsb2NfY2x1c3Rlcjogbm8gZnJlZSBjbHVzdGVycyIKK21zZ3N0ciAiZmF0X3RhYmxlX2FsbG9jX2NsdXN0ZXI6IG7jbyBo4SBjbHVzdGVycyBsaXZyZXMiCisKKyM6IGxpYnBhcnRlZC9mcy9saW51eF9zd2FwL2xpbnV4X3N3YXAuYzoyNzUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVucmVjb2duaXNlZCBvbGQgc3R5bGUgbGludXggc3dhcCBzaWduYXR1cmUgJyUxMHMnLiIKK21zZ3N0ciAiQXNzaW5hdHVyYSBsaW51eCBzd2FwIG7jbyByZWNvbmhlY2lkYSAnJTEwcycuIgorCisjOiBsaWJwYXJ0ZWQvZnMvbGludXhfc3dhcC9saW51eF9zd2FwLmM6MzE4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVbnJlY29nbmlzZWQgbmV3IHN0eWxlIGxpbnV4IHN3YXAgc2lnbmF0dXJlICclMTBzJy4iCittc2dzdHIgIkFzc2luYXR1cmEgbGludXggc3dhcCBu428gcmVjb25oZWNpZGEgJyUxMHMnLiIKKworIzogbGlicGFydGVkL2ZzL2xpbnV4X3N3YXAvbGludXhfc3dhcC5jOjM1OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVW5yZWNvZ25pc2VkIHN3c3VzcCBsaW51eCBzd2FwIHNpZ25hdHVyZSAnJTlzJy4iCittc2dzdHIgIkFzc2luYXR1cmEgbGludXggc3dhcCBu428gcmVjb25oZWNpZGEgJyUxMHMnLiIKKworIzogbGlicGFydGVkL2ZzL2xpbnV4X3N3YXAvbGludXhfc3dhcC5jOjQzNAorbXNnaWQgIlRvbyBtYW55IGJhZCBwYWdlcy4iCittc2dzdHIgIk11aXRhcyBw4WdpbmFzIGluduFsaWRhcy4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvYWR2ZnMuYzoxMjEgbGlicGFydGVkL2ZzL2hmcy9hZHZmc19wbHVzLmM6MTIyCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NDE0IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzo1MDgKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjUzOSBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo2NTgKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjc3MgorbXNnaWQgIlRoZSBmaWxlIHN5c3RlbSBjb250YWlucyBlcnJvcnMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvYWR2ZnNfcGx1cy5jOjI4NworbXNnaWQgIkJhZCBibG9ja3MgY291bGQgbm90IGJlIHJlYWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvY2FjaGUuYzoxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRyeWluZyB0byByZWdpc3RlciBhbiBleHRlbnQgc3RhcnRpbmcgYXQgYmxvY2sgMHglWCwgYnV0IGFub3RoZXIgb25lIGFscmVhZHkgIgorImV4aXN0cyBhdCB0aGlzIHBvc2l0aW9uLiAgWW91IHNob3VsZCBjaGVjayB0aGUgZmlsZSBzeXN0ZW0hIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvY2FjaGUuYzoyMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRyeWluZyB0byBtb3ZlIGFuIGV4dGVudCBmcm9tIGJsb2NrIE94JVggdG8gYmxvY2sgT3glWCwgYnV0IGFub3RoZXIgb25lICIKKyJhbHJlYWR5IGV4aXN0cyBhdCB0aGlzIHBvc2l0aW9uLiAgVGhpcyBzaG91bGQgbm90IGhhcHBlbiEiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlLmM6MTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB1cGRhdGUgdGhlIGV4dGVudCBjYWNoZSBmb3IgSEZTIGZpbGUgd2l0aCBDTklEICVYLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGUuYzoxODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIHRvIHJlYWQgSEZTIGZpbGUgd2l0aCBDTklEICVYIGJlaGluZCBFT0YuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZS5jOjE5MCBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGUuYzoyMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgc2VjdG9yICVsbGkgb2YgSEZTIGZpbGUgd2l0aCBDTklEICVYLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGUuYzoyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIHRvIHdyaXRlIEhGUyBmaWxlIHdpdGggQ05JRCAlWCBiZWhpbmQgRU9GLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGVfcGx1cy5jOjE1NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgdXBkYXRlIHRoZSBleHRlbnQgY2FjaGUgZm9yIEhGUysgZmlsZSB3aXRoIENOSUQgJVguIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZV9wbHVzLmM6MjAyCisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyB0byByZWFkIEhGUysgZmlsZSB3aXRoIENOSUQgJVggYmVoaW5kIEVPRi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlX3BsdXMuYzoyMTMgbGlicGFydGVkL2ZzL2hmcy9maWxlX3BsdXMuYzoyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgc2VjdG9yICVsbGkgb2YgSEZTKyBmaWxlIHdpdGggQ05JRCAlWC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlX3BsdXMuYzoyNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIHRvIHdyaXRlIEhGUysgZmlsZSB3aXRoIENOSUQgJVggYmVoaW5kIEVPRi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzoyMzIKK21zZ2lkICJTb3JyeSwgSEZTIGNhbm5vdCBiZSByZXNpemVkIHRoYXQgd2F5IHlldC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzoyNjIgbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo2NDEKK21zZ2lkICJEYXRhIHJlbG9jYXRpb24gaGFzIGZhaWxlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzoyODEKK21zZ2lkICJEYXRhIHJlbG9jYXRpb24gbGVmdCBzb21lIGRhdGEgaW4gdGhlIGVuZCBvZiB0aGUgdm9sdW1lLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjMyMAorIywgZnV6enkKK21zZ2lkICJ3cml0aW5nIEhGUyBNYXN0ZXIgRGlyZWN0b3J5IEJsb2NrIgorbXNnc3RyICJFcnJvIGVzY3JldmVuZG8gbm8gZGlyZXTzcmlvIHJhaXouIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjQ2OAorbXNnaWQgIk5vIHZhbGlkIEhGU1srWF0gc2lnbmF0dXJlIGhhcyBiZWVuIGZvdW5kIHdoaWxlIG9wZW5pbmcuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NDc4CisjLCBjLWZvcm1hdAorbXNnaWQgIlZlcnNpb24gJWQgb2YgSEZTKyBpc24ndCBzdXBwb3J0ZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NDg5CisjLCBjLWZvcm1hdAorbXNnaWQgIlZlcnNpb24gJWQgb2YgSEZTWCBpc24ndCBzdXBwb3J0ZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NjcyCittc2dpZCAiRGF0YSByZWxvY2F0aW9uIGxlZnQgc29tZSBkYXRhIGF0IHRoZSBlbmQgb2YgdGhlIHZvbHVtZS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo3MjAKKyMsIGZ1enp5Cittc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0aGUgYWxsb2NhdGlvbiBmaWxlLiIKK21zZ3N0ciAiRXJybyBlc2NyZXZlbmRvIG5vIGRpcmV083JpbyByYWl6LiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo3MzUKK21zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRoZSBjb21wYXRpYmlsaXR5IHBhcnQgb2YgdGhlIGFsbG9jYXRpb24gZmlsZS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo3NTAKK21zZ2lkICJ3cml0aW5nIEhGUysgVm9sdW1lIEhlYWRlciIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjg1MAorbXNnaWQgIkFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGxvb2tpbmcgZm9yIHRoZSBtYW5kYXRvcnkgYmFkIGJsb2NrcyBmaWxlLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjkwNAorbXNnaWQgIiIKKyJJdCBzZWVtcyB0aGVyZSBpcyBhbiBlcnJvciBpbiB0aGUgSEZTIHdyYXBwZXI6IHRoZSBiYWQgYmxvY2tzIGZpbGUgZG9lc24ndCAiCisiY29udGFpbiB0aGUgZW1iZWRkZWQgSEZTKyB2b2x1bWUuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6OTQwCittc2dpZCAiU29ycnksIEhGUysgY2Fubm90IGJlIHJlc2l6ZWQgdGhhdCB3YXkgeWV0LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjk3NQorbXNnaWQgInNocmlua2luZyBlbWJlZGRlZCBIRlMrIHZvbHVtZSIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjk5MQorbXNnaWQgIlJlc2l6aW5nIHRoZSBIRlMrIHZvbHVtZSBoYXMgZmFpbGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjk5OAorbXNnaWQgInNocmlua2luZyBIRlMgd3JhcHBlciIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjEwMDcKK21zZ2lkICJVcGRhdGluZyB0aGUgSEZTIHdyYXBwZXIgaGFzIGZhaWxlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzoxMTA5IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MTE5NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhpcyBpcyBub3QgYSByZWFsICVzIGNoZWNrLiAgVGhpcyBpcyBnb2luZyB0byBleHRyYWN0IHNwZWNpYWwgbG93IGxldmVsICIKKyJmaWxlcyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzoxNTUKK21zZ2lkICJCYWQgYmxvY2sgbGlzdCBoZWFkZXIgY2hlY2tzdW0uIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjE2OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSW52YWxpZCBzaXplIG9mIGEgdHJhbnNhY3Rpb24gYmxvY2sgd2hpbGUgcmVwbGF5aW5nIHRoZSBqb3VybmFsICglaSBieXRlcykuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjI2MAorbXNnaWQgIiIKKyJKb3VybmFsIHN0b3JlZCBvdXRzaWRlIG9mIHRoZSB2b2x1bWUgYXJlIG5vdCBzdXBwb3J0ZWQuICBUcnkgdG8gZGVzYWN0aXZhdGUgIgorInRoZSBqb3VybmFsIGFuZCBydW4gUGFydGVkIGFnYWluLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzoyNzEKKyMsIGZ1enp5Cittc2dpZCAiSm91cm5hbCBvZmZzZXQgb3Igc2l6ZSBpcyBub3QgbXVsdGlwbGUgb2YgdGhlIHNlY3RvciBzaXplLiIKK21zZ3N0ciAiIgorIk8gY2x1c3RlciBpbmljaWEgZW0gZGVsdGEgPSAlZCwgcXVlIG7jbyDpIHVtIG36bHRpcGxvIGRvIHRhbWFuaG8gZGUgY2x1c3RlciAlIgorImQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzoyOTIKK21zZ2lkICJJbmNvcnJlY3QgbWFnaWMgdmFsdWVzIGluIHRoZSBqb3VybmFsIGhlYWRlci4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MzAyCittc2dpZCAiSm91cm5hbCBzaXplIG1pc21hdGNoIGJldHdlZW4gam91cm5hbCBpbmZvIGJsb2NrIGFuZCBqb3VybmFsIGhlYWRlci4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MzE0CisjLCBmdXp6eQorbXNnaWQgIlNvbWUgaGVhZGVyIGZpZWxkcyBhcmUgbm90IG11bHRpcGxlIG9mIHRoZSBzZWN0b3Igc2l6ZS4iCittc2dzdHIgIiIKKyJPIGNsdXN0ZXIgaW5pY2lhIGVtIGRlbHRhID0gJWQsIHF1ZSBu428g6SB1bSBt+mx0aXBsbyBkbyB0YW1hbmhvIGRlIGNsdXN0ZXIgJSIKKyJkLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MzIzCittc2dpZCAiIgorIlRoZSBzZWN0b3Igc2l6ZSBzdG9yZWQgaW4gdGhlIGpvdXJuYWwgaXMgbm90IDUxMiBieXRlcy4gIFBhcnRlZCBvbmx5ICIKKyJzdXBwb3J0cyA1MTIgYnl0ZXMgbGVuZ3RoIHNlY3RvcnMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjMzNQorbXNnaWQgIkJhZCBqb3VybmFsIGNoZWNrc3VtLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozNTMKK21zZ2lkICIiCisiVGhlIGpvdXJuYWwgaXMgbm90IGVtcHR5LiAgUGFydGVkIG11c3QgcmVwbGF5IHRoZSB0cmFuc2FjdGlvbnMgYmVmb3JlICIKKyJvcGVuaW5nIHRoZSBmaWxlIHN5c3RlbS4gIFRoaXMgd2lsbCBtb2RpZnkgdGhlIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozODEKK21zZ2lkICIiCisiVGhlIHZvbHVtZSBoZWFkZXIgb3IgdGhlIG1hc3RlciBkaXJlY3RvcnkgYmxvY2sgaGFzIGNoYW5nZWQgd2hpbGUgcmVwbGF5aW5nICIKKyJ0aGUgam91cm5hbC4gIFlvdSBzaG91bGQgcmVzdGFydCBQYXJ0ZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcHJvYmUuYzo1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGFydGVkIGNhbid0IHVzZSBIRlMgZmlsZSBzeXN0ZW1zIG9uIGRpc2tzIHdpdGggYSBzZWN0b3Igc2l6ZSBub3QgZXF1YWwgdG8gJSIKKyJkIGJ5dGVzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6MTUxIGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjE1NQorbXNnaWQgIkFuIGV4dGVudCBoYXMgbm90IGJlZW4gcmVsb2NhdGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6MjUxIGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjMwNworbXNnaWQgIiIKKyJBIHJlZmVyZW5jZSB0byBhbiBleHRlbnQgY29tZXMgZnJvbSBhIHBsYWNlIGl0IHNob3VsZCBub3QuICBZb3Ugc2hvdWxkIGNoZWNrICIKKyJ0aGUgZmlsZSBzeXN0ZW0hIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzozODEKK21zZ2lkICJUaGlzIEhGUyB2b2x1bWUgaGFzIG5vIGNhdGFsb2cgZmlsZS4gIFRoaXMgaXMgdmVyeSB1bnVzdWFsISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NDc1Cittc2dpZCAiVGhpcyBIRlMgdm9sdW1lIGhhcyBubyBleHRlbnRzIG92ZXJmbG93IGZpbGUuICBUaGlzIGlzIHF1aXRlIHVudXN1YWwhIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzo1MTcgbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NjY4Cittc2dpZCAiIgorIlRoZSBleHRlbnRzIG92ZXJmbG93IGZpbGUgc2hvdWxkIG5vdCBjb250YWluIGl0cyBvd24gZXh0ZW50cyEgIFlvdSBzaG91bGQgIgorImNoZWNrIHRoZSBmaWxlIHN5c3RlbS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjU3NCBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo4NDcKKyMsIGZ1enp5Cittc2dpZCAiQ291bGQgbm90IGNhY2hlIHRoZSBmaWxlIHN5c3RlbSBpbiBtZW1vcnkuIgorbXNnc3RyICJO428gZm9pIHBvc3PtdmVsIGRldGVjdGFyIG8gc2lzdGVtYSBkZSBGaWNoZWlyb3MuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NjM1IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjkwOAorbXNnaWQgIkJhZCBibG9ja3MgbGlzdCBjb3VsZCBub3QgYmUgbG9hZGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NjQ5IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjkyNAorbXNnaWQgIkFuIGVycm9yIG9jY3VycmVkIGR1cmluZyBleHRlbnQgcmVsb2NhdGlvbi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NDk1Cittc2dpZCAiVGhpcyBIRlMrIHZvbHVtZSBoYXMgbm8gY2F0YWxvZyBmaWxlLiAgVGhpcyBpcyB2ZXJ5IHVudXN1YWwhIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjYxOQorbXNnaWQgIlRoaXMgSEZTKyB2b2x1bWUgaGFzIG5vIGV4dGVudHMgb3ZlcmZsb3cgZmlsZS4gIFRoaXMgaXMgcXVpdGUgdW51c3VhbCEiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjk0Cittc2dpZCAiZGlzcGxheXMgdGhpcyBoZWxwIG1lc3NhZ2UiCittc2dzdHIgIm1vc3RyYSBlc3RhIG1lbnNhZ2VtIGRlIGFqdWRhIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6OTUKK21zZ2lkICJsaXN0cyBwYXJ0aXRpb24gbGF5b3V0IG9uIGFsbCBibG9jayBkZXZpY2VzIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo5NgorbXNnaWQgImRpc3BsYXlzIG1hY2hpbmUgcGFyc2VhYmxlIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6OTcKK21zZ2lkICJuZXZlciBwcm9tcHRzIGZvciB1c2VyIGludGVydmVudGlvbiIKK21zZ3N0ciAibnVuY2EgcGVkZSBpbnRlcnZlbufjbyBkbyB1dHVsaXphZG9yIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6OTgKK21zZ2lkICJkaXNwbGF5cyB0aGUgdmVyc2lvbiIKK21zZ3N0ciAibW9zdHJhIGEgdmVyc+NvIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTExCisjLCBmdXp6eQorbXNnaWQgIiIKKyJOVU1CRVIgaXMgdGhlIHBhcnRpdGlvbiBudW1iZXIgdXNlZCBieSBMaW51eC4gIE9uIE1TLURPUyBkaXNrIGxhYmVscywgdGhlICIKKyJwcmltYXJ5IHBhcnRpdGlvbnMgbnVtYmVyIGZyb20gMSB0byA0LCBsb2dpY2FsIHBhcnRpdGlvbnMgZnJvbSA1IG9ud2FyZHMuXG4iCittc2dzdHIgIiIKKyJNSU5PUiDpIG8gbvptZXJvIGRhIHBhcnRp5+NvIHVzYWRvIHBlbG8gbGludXguIEVtIHLzdHVsb3MgZGUgZGlzY28gbXNkb3MsIGFzICIKKyJwYXJ0aef1ZXMgcHJpbeFyaWFzIHPjbyBkZSAxLTQsIGUgcGFydGnn9WVzIGzzZ2ljYXMgZGUgNSBhZGlhbnRlLlxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTE0Cittc2dpZCAiTEFCRUwtVFlQRSBpcyBvbmUgb2Y6ICIKK21zZ3N0ciAiVElQT19ST1RVTE8g6SB1bSBkZToiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMTUKK21zZ2lkICJGTEFHIGlzIG9uZSBvZjogIgorbXNnc3RyICJGTEFHIOkgdW0gZGU6ICIKKworIzogcGFydGVkL3BhcnRlZC5jOjExNgorIywgZnV6enkKK21zZ2lkICJVTklUIGlzIG9uZSBvZjogIgorbXNnc3RyICJGTEFHIOkgdW0gZGU6ICIKKworIzogcGFydGVkL3BhcnRlZC5jOjExNworbXNnaWQgIlBBUlQtVFlQRSBpcyBvbmUgb2Y6IHByaW1hcnksIGxvZ2ljYWwsIGV4dGVuZGVkXG4iCittc2dzdHIgIlRJUE8tUEFSVCDpIHVtIGRlOiBwcmltYXJ5LCBsb2dpY2FsLCBleHRlbmRlZFxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTE5Cittc2dpZCAiRlMtVFlQRSBpcyBvbmUgb2Y6ICIKK21zZ3N0ciAiVElQTy1GUyDpIHVtIGRlOiAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjAKK21zZ2lkICIiCisiU1RBUlQgYW5kIEVORCBhcmUgZGlzayBsb2NhdGlvbnMsIHN1Y2ggYXMgNEdCIG9yIDEwJS4gIE5lZ2F0aXZlIHZhbHVlcyBjb3VudCAiCisiZnJvbSB0aGUgZW5kIG9mIHRoZSBkaXNrLiAgRm9yIGV4YW1wbGUsIC0xcyBzcGVjaWZpZXMgZXhhY3RseSB0aGUgbGFzdCAiCisic2VjdG9yLlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjMKK21zZ2lkICJTVEFURSBpcyBvbmUgb2Y6IG9uLCBvZmZcbiIKK21zZ3N0ciAiRVNUQURPIOkgdW0gZGU6IG9uLCBvZmZcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyNAorbXNnaWQgIkRFVklDRSBpcyB1c3VhbGx5IC9kZXYvaGRhIG9yIC9kZXYvc2RhXG4iCittc2dzdHIgIkRJU1BPU0lUSVZPIOkgdXN1YWxtZW50ZSAvZGV2L2hkYSBvdSAvZGV2L3NkYVxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTI1Cittc2dpZCAiTkFNRSBpcyBhbnkgd29yZCB5b3Ugd2FudFxuIgorbXNnc3RyICJOQU1FIOkgcXVhbHF1ZXIgcGFsYXZyYSBxdWUgZGVzZWphclxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTI2Cittc2dpZCAiVGhlIHBhcnRpdGlvbiBtdXN0IGhhdmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgRlMtVFlQRXM6ICIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTMwCittc2dpZCAiIgorIkNvcHlyaWdodCAoQykgMTk5OCAtIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuXG4iCisiVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmUsIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLlxuIgorIlxuIgorIlRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuIgorImJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4iCisiTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuIgorIkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjE3NgorIywgYy1mb3JtYXQKK21zZ2lkICIlMC5mJSVcdCh0aW1lIGxlZnQgJS4yZDolLjJkKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQYXJ0aXRpb24gJXMgaXMgYmVpbmcgdXNlZC4gWW91IG11c3QgdW5tb3VudCBpdCBiZWZvcmUgeW91IG1vZGlmeSBpdCB3aXRoICIKKyJQYXJ0ZWQuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGFydGl0aW9uKHMpIG9uICVzIGFyZSBiZWluZyB1c2VkLiIKK21zZ3N0ciAiUGFydGnn428o9WVzKSBlbSAlcyBlc3ThKONvKSBhIHNlciB1dGlsaXphZGEocykuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIzCittc2dpZCAiIgorIlRoZSBleGlzdGluZyBmaWxlIHN5c3RlbSB3aWxsIGJlIGRlc3Ryb3llZCBhbmQgYWxsIGRhdGEgb24gdGhlIHBhcnRpdGlvbiAiCisid2lsbCBiZSBsb3N0LiBEbyB5b3Ugd2FudCB0byBjb250aW51ZT8iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIzNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGV4aXN0aW5nIGRpc2sgbGFiZWwgb24gJXMgd2lsbCBiZSBkZXN0cm95ZWQgYW5kIGFsbCBkYXRhIG9uIHRoaXMgZGlzayAiCisid2lsbCBiZSBsb3N0LiBEbyB5b3Ugd2FudCB0byBjb250aW51ZT8iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjQ1OCBwYXJ0ZWQvcGFydGVkLmM6NjUyIHBhcnRlZC9wYXJ0ZWQuYzoxMDQ0CisjOiBwYXJ0ZWQvcGFydGVkLmM6MTEyOCBwYXJ0ZWQvcGFydGVkLmM6MTc3MSBwYXJ0ZWQvcGFydGVkLmM6MTg1MgorIzogcGFydGVkL3BhcnRlZC5jOjE5MDAKKyMsIGZ1enp5Cittc2dpZCAiUGFydGl0aW9uIG51bWJlcj8iCittc2dzdHIgIkEgcGFydGnn428gZXN04SBhIHNlciB1dGlsaXphZGEuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NTAwCittc2dpZCAiU291cmNlIGRldmljZT8iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjUwNAorIywgZnV6enkKK21zZ2lkICJTb3VyY2UgcGFydGl0aW9uIG51bWJlcj8iCittc2dzdHIgIkEgcGFydGnn428gb3JpZ2VtIG7jbyBleGlzdGUuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NTA5CisjLCBmdXp6eQorbXNnaWQgIkNhbid0IGNvcHkgYW4gZXh0ZW5kZWQgcGFydGl0aW9uLiIKK21zZ3N0ciAiTuNvIHBvc3NvIGNvcGlhciBwYXJ0aef1ZXMgZXh0ZW5kaWRhcy4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo1MTUKKyMsIGZ1enp5Cittc2dpZCAiRGVzdGluYXRpb24gcGFydGl0aW9uIG51bWJlcj8iCittc2dzdHIgIkEgcGFydGnn428gZGVzdGlubyBlc3ThIGEgc2VyIHV0aWxpemFkYS4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo2MTUKKyMsIGZ1enp5Cittc2dpZCAiTmV3IGRpc2sgbGFiZWwgdHlwZT8iCittc2dzdHIgIlRpcG8gZGUgcvN0dWxvIGRlIGRpc2NvOiAlc1xuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NjU2CisjLCBmdXp6eQorbXNnaWQgIkZpbGUgc3lzdGVtPyIKK21zZ3N0ciAiU2lzdGVtYUZpY2ggIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NzA3IHBhcnRlZC9wYXJ0ZWQuYzo4NzgKKyMsIGZ1enp5Cittc2dpZCAiUGFydGl0aW9uIHR5cGU/IgorbXNnc3RyICJBIHBhcnRp5+NvIG7jbyBleGlzdGUuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NzE0IHBhcnRlZC9wYXJ0ZWQuYzo4ODUgcGFydGVkL3BhcnRlZC5jOjExMzEKKyMsIGZ1enp5Cittc2dpZCAiUGFydGl0aW9uIG5hbWU/IgorbXNnc3RyICJBIHBhcnRp5+NvIG7jbyBleGlzdGUuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NzIyIHBhcnRlZC9wYXJ0ZWQuYzo4OTUKKyMsIGZ1enp5Cittc2dpZCAiRmlsZSBzeXN0ZW0gdHlwZT8iCittc2dzdHIgIlNpc3RlbWFGaWNoICIKKworIzogcGFydGVkL3BhcnRlZC5jOjcyOSBwYXJ0ZWQvcGFydGVkLmM6ODk3IHBhcnRlZC9wYXJ0ZWQuYzoxMDU5CisjOiBwYXJ0ZWQvcGFydGVkLmM6MTcyNSBwYXJ0ZWQvcGFydGVkLmM6MTc4MAorbXNnaWQgIlN0YXJ0PyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NzMxIHBhcnRlZC9wYXJ0ZWQuYzo5MDAgcGFydGVkL3BhcnRlZC5jOjEwNjIKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNzI3IHBhcnRlZC9wYXJ0ZWQuYzoxNzgyCittc2dpZCAiRW5kPyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NzY5IHBhcnRlZC9wYXJ0ZWQuYzo5MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSByZXF1ZXN0ZWQgYSBwYXJ0aXRpb24gZnJvbSAlcyB0byAlcy5cbiIKKyJUaGUgY2xvc2VzdCBsb2NhdGlvbiB3ZSBjYW4gbWFuYWdlIGlzICVzIHRvICVzLiAgSXMgdGhpcyBzdGlsbCBhY2NlcHRhYmxlIHRvICIKKyJ5b3U/IgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo4OTAKK21zZ2lkICJBbiBleHRlbmRlZCBwYXJ0aXRpb24gY2Fubm90IGhvbGQgYSBmaWxlIHN5c3RlbS4gIERpZCB5b3Ugd2FudCBta3BhcnQ/IgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMDUwCisjLCBmdXp6eQorbXNnaWQgIkNhbid0IG1vdmUgYW4gZXh0ZW5kZWQgcGFydGl0aW9uLiIKK21zZ3N0ciAiTuNvIHBvc3NvIG1vdmVyIHBhcnRp5/VlcyBleHRlbmRpZGFzLiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEwNzkKK21zZ2lkICJDYW4ndCBtb3ZlIGEgcGFydGl0aW9uIG9udG8gaXRzZWxmLiAgVHJ5IHVzaW5nIHJlc2l6ZSwgcGVyaGFwcz8iCittc2dzdHIgIiIKKyJO428gcG9zc28gbW92ZXIgYSBwYXJ0aefjbyBzb2JyZSBlbGEgbWVzbWEuIFRhbHZleiBxdWVpcmEgcmVkaW1lbnNpb25hcj8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIk1pbm9yOiAlZFxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjI4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJGbGFnczogJXNcbiIKK21zZ3N0ciAiU2luYWxpemFkb3IiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjI5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJGaWxlIFN5c3RlbTogJXNcbiIKK21zZ3N0ciAiU2lzdGVtYUZpY2ggIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIzMAorbXNnaWQgIlNpemU6ICAgICAgICAgIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjM1Cittc2dpZCAiTWluaW11bSBzaXplOiAiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMzgKK21zZ2lkICJNYXhpbXVtIHNpemU6ICIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJNb2RlbDogJXMgKCVzKVxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMzY0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJEaXNrICVzOiAlc1xuIgorbXNnc3RyICJUaXBvIGRlIHLzdHVsbyBkZSBkaXNjbzogJXNcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEzNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VjdG9yIHNpemUgKGxvZ2ljYWwvcGh5c2ljYWwpOiAlbGxkQi8lbGxkQlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMzgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkJJT1MgY3lsaW5kZXIsaGVhZCxzZWN0b3IgZ2VvbWV0cnk6ICVkLCVkLCVkLiAgRWFjaCBjeWxpbmRlciBpcyAlcy5cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTM5MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiUGFydGl0aW9uIFRhYmxlOiAlc1xuIgorbXNnc3RyICJUYWJlbGEgZGUgcGFydGnn9WVzIGluduFsaWRhIGVtICVzIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQwNiBwYXJ0ZWQvcGFydGVkLmM6MTQwOQorbXNnaWQgIk51bWJlciIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQwNiBwYXJ0ZWQvcGFydGVkLmM6MTQwOQorbXNnaWQgIlN0YXJ0IgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDA3IHBhcnRlZC9wYXJ0ZWQuYzoxNDEwCittc2dpZCAiRW5kIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDEwCisjLCBmdXp6eQorbXNnaWQgIlNpemUiCittc2dzdHIgInJlc2l6ZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MTQKK21zZ2lkICJUeXBlIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDE2CisjLCBmdXp6eQorbXNnaWQgIkZpbGUgc3lzdGVtIgorbXNnc3RyICJTaXN0ZW1hRmljaCAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDE5CisjLCBmdXp6eQorbXNnaWQgIk5hbWUiCittc2dzdHIgIm5hbWUiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDIxCittc2dpZCAiRmxhZ3MiCittc2dzdHIgIlNpbmFsaXphZG9yIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQ3NworbXNnaWQgIkZyZWUgU3BhY2UiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjE2MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkEgJXMgJXMgcGFydGl0aW9uIHdhcyBmb3VuZCBhdCAlcyAtPiAlcy4gIERvIHlvdSB3YW50IHRvIGFkZCBpdCB0byB0aGUgIgorInBhcnRpdGlvbiB0YWJsZT8iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjE2NjMKK21zZ2lkICJzZWFyY2hpbmcgZm9yIGZpbGUgc3lzdGVtcyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTg3NworIywgZnV6enkKK21zZ2lkICJOZXcgZGV2aWNlPyIKK21zZ3N0ciAiTmVuaHVtIGRpc3Bvc2l0aXZvIGVuY29udHJhZG8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxOTAyCittc2dpZCAiRmxhZyB0byBJbnZlcnQ/IgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxOTA3Cittc2dpZCAiTmV3IHN0YXRlPyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTk0NAorbXNnaWQgIlVuaXQ/IgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMDkzCittc2dpZCAiY2hlY2siCittc2dzdHIgImNoZWNrIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjA5NgorIywgZnV6enkKK21zZ2lkICIiCisiY2hlY2sgTlVNQkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyBhIHNpbXBsZSBjaGVjayBvbiB0aGUgZmlsZSBzeXN0ZW0iCittc2dzdHIgIiIKKyJjaGVjayBNSU5PUiAgICAgICAgICAgICAgICAgICBmYXogdW0gdGVzdGUgc2ltcGxlcyBubyBzaXN0ZW1hIGRlIGZpY2hlaXJvcyIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMDIKK21zZ2lkICJjcCIKK21zZ3N0ciAiY3AiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTA1CisjLCBmdXp6eQorbXNnaWQgIiIKKyJjcCBbRlJPTS1ERVZJQ0VdIEZST00tTlVNQkVSIFRPLU5VTUJFUiAgIGNvcHkgZmlsZSBzeXN0ZW0gdG8gYW5vdGhlciAiCisicGFydGl0aW9uIgorbXNnc3RyICIiCisiY3AgW0ZST00tREVWSUNFXSBGUk9NLU1JTk9SIFRPLU1JTk9SICAgICAgY29waWEgbyBzaXN0ZW1hIGRlIGZpY2hlaXJvcyBwYXJhICIKKyJvdXRyYSBwYXJ0aefjbyIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMTEKK21zZ2lkICJoZWxwIgorbXNnc3RyICJoZWxwIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjExNAorIywgZnV6enkKK21zZ2lkICIiCisiaGVscCBbQ09NTUFORF0gICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCBnZW5lcmFsIGhlbHAsIG9yIGhlbHAgb24gIgorIkNPTU1BTkQiCittc2dzdHIgImhlbHAgW0NPTUFORE9dICAgICAgICAgICAgICAgIG1vc3RyYSBhanVkYSBnZXJhbCwgb3UgYWp1ZGEgYSBDT01BTkRPIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEyMAorbXNnaWQgIm1rbGFiZWwiCittc2dzdHIgIm1rbGFiZWwiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTIwCisjLCBmdXp6eQorbXNnaWQgIm1rdGFibGUiCittc2dzdHIgIm1rbGFiZWwiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTIzCisjLCBmdXp6eQorbXNnaWQgIiIKKyJta2xhYmVsLG1rdGFibGUgTEFCRUwtVFlQRSAgICAgICAgICAgICAgIGNyZWF0ZSBhIG5ldyBkaXNrbGFiZWwgKHBhcnRpdGlvbiAiCisidGFibGUpIgorbXNnc3RyICIiCisibWtsYWJlbCBUSVBPLVJPVFVMTyAgICAgICAgICAgY3JpYSB1bSBub3ZvIHLzdHVsbyAobmEgdGFiZWxhIGRlIHBhcnRp5+NvKSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMjkKK21zZ2lkICJta2ZzIgorbXNnc3RyICJta2ZzIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEzMgorIywgZnV6enkKK21zZ2lkICIiCisibWtmcyBOVU1CRVIgRlMtVFlQRSAgICAgICAgICAgICAgICAgICAgICBtYWtlIGEgRlMtVFlQRSBmaWxlIHN5c3RlbSBvbiAiCisicGFydGl0aXRvbiBOVU1CRVIiCittc2dzdHIgIiIKKyJta2ZzIE1JTk9SIFRJUE8tRlMgICAgICAgICAgICBjcmlhIHVtIHNpc3RlbWEgVElQTy1GUyBuYSBwYXJ0aefjbyBNSU5PUiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMzgKK21zZ2lkICJta3BhcnQiCittc2dzdHIgIm1rcGFydCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNDEKKyMsIGZ1enp5Cittc2dpZCAibWtwYXJ0IFBBUlQtVFlQRSBbRlMtVFlQRV0gU1RBUlQgRU5EICAgICBtYWtlIGEgcGFydGl0aW9uIgorbXNnc3RyICJta3BhcnQgVElQTy1QQVJUIFtGUy1UWVBFXSBJTklDSU8gRklNICAgICBjcmlhIHVtYSBwYXJ0aefjbyIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNDcKKyMsIGZ1enp5Cittc2dpZCAiIgorIidta3BhcnQnIG1ha2VzIGEgcGFydGl0aW9uIHdpdGhvdXQgY3JlYXRpbmcgYSBuZXcgZmlsZSBzeXN0ZW0gb24gdGhlICIKKyJwYXJ0aXRpb24uICBGUy1UWVBFIG1heSBiZSBzcGVjaWZpZWQgdG8gc2V0IGFuIGFwcHJvcHJpYXRlIHBhcnRpdGlvbiBJRC5cbiIKK21zZ3N0ciAiIgorIm1rcGFydCBjcmlhIHVtYSBwYXJ0aefjbyBzZW0gY3JpYXIgdW0gbm92byBzaXN0ZW1hIGRlIGZpY2hlaXJvcyBuYSBwYXJ0aefjby4gIgorIlRJUE8tRlMgZGV2ZSBzZXIgZXNwZWNpZmljYWRvIHBhcmEgcGFydGnn9WVzIGRlIGRhZG9zIChhbyBvcG9zdG8gZGUgdW1hICIKKyJwYXJ0aefjbyBleHRlbmRpZGEpLiBFc3RlIGNvbWFuZG8g6SD6dGlsIHNlIGFwYWdvdSBhY2lkZW50YWxtZW50ZSB1bWEgIgorInBhcnRp5+NvLlxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE1MgorbXNnaWQgIm1rcGFydGZzIgorbXNnc3RyICJta3BhcnRmcyIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNTUKKyMsIGZ1enp5Cittc2dpZCAiIgorIm1rcGFydGZzIFBBUlQtVFlQRSBGUy1UWVBFIFNUQVJUIEVORCAgICAgbWFrZSBhIHBhcnRpdGlvbiB3aXRoIGEgZmlsZSBzeXN0ZW0iCittc2dzdHIgIm1rcGFydGZzIFRJUE8tUEFSVCBUSVBPLUZTIElOSUNJTyBGSU0gICAgIGNyaWEgdW1hIHBhcnRp5+NvIFRJUE8tRlMiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTYxCittc2dpZCAibW92ZSIKK21zZ3N0ciAibW92ZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNjQKKyMsIGZ1enp5Cittc2dpZCAibW92ZSBOVU1CRVIgU1RBUlQgRU5EICAgICAgICAgICAgICAgICAgICBtb3ZlIHBhcnRpdGlvbiBOVU1CRVIiCittc2dzdHIgIm1vdmUgTUlOT1IgSU5JQ0lPIFtGSU1dICAgICAgIHJlZGltZW5zaW9uYSBhIHBhcnRp5+NvIE1JTk9SIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE2OQorbXNnaWQgIm5hbWUiCittc2dzdHIgIm5hbWUiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTcyCisjLCBmdXp6eQorbXNnaWQgIm5hbWUgTlVNQkVSIE5BTUUgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSBwYXJ0aXRpb24gTlVNQkVSIGFzIE5BTUUiCittc2dzdHIgIm5hbWUgTUlOT1IgTkFNRSAgICAgICAgICAgICAgIHJlbm9tZWlhIGEgcGFydGnn428gTUlOT1IgcGFyYSBOQU1FIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE3NworbXNnaWQgInByaW50IgorbXNnc3RyICJwcmludCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxODAKK21zZ2lkICIiCisicHJpbnQgW2RldmljZXN8ZnJlZXxsaXN0LGFsbHxOVU1CRVJdICAgICBkaXNwbGF5IHRoZSBwYXJ0aXRpb24gdGFibGUsICIKKyJhdmFpbGFibGUgZGV2aWNlcywgZnJlZSBzcGFjZSwgYWxsIGZvdW5kIHBhcnRpdGlvbnMsIG9yIGEgcGFydGljdWxhciAiCisicGFydGl0aW9uIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTg1Cittc2dpZCAiIgorIldpdGhvdXQgYXJndW1lbnRzLCAncHJpbnQnIGRpc3BsYXlzIHRoZSBlbnRpcmUgcGFydGl0aW9uIHRhYmxlLiBIb3dldmVyIHdpdGggIgorInRoZSBmb2xsb3dpbmcgYXJndW1lbnRzIGl0IHBlcmZvcm1zIHZhcmlvdXMgb3RoZXIgYWN0aW9ucy5cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE4NworbXNnaWQgIiAgZGV2aWNlcyAgIDogZGlzcGxheSBhbGwgYWN0aXZlIGJsb2NrIGRldmljZXNcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE4OAorbXNnaWQgIiIKKyIgIGZyZWUgICAgICA6IGRpc3BsYXkgaW5mb3JtYXRpb24gYWJvdXQgZnJlZSB1bnBhcnRpdGlvbmVkIHNwYWNlIG9uIHRoZSAiCisiY3VycmVudCBibG9jayBkZXZpY2VcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE5MAorIywgZnV6enkKK21zZ2lkICIiCisiICBsaXN0LCBhbGwgOiBkaXNwbGF5IHRoZSBwYXJ0aXRpb24gdGFibGVzIG9mIGFsbCBhY3RpdmUgYmxvY2sgZGV2aWNlc1xuIgorbXNnc3RyICJwcmludCAgICAgICAgICAgICAgICAgICAgICAgICBtb3N0cmEgYSB0YWJlbGEgZGUgcGFydGnn9WVzIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE5MQorbXNnaWQgIiIKKyIgIE5VTUJFUiAgICA6IGRpc3BsYXkgbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIHBhcnRpY3VsYXIgIgorInBhcnRpdGlvblxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTk2Cittc2dpZCAicXVpdCIKK21zZ3N0ciAicXVpdCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxOTkKKyMsIGZ1enp5Cittc2dpZCAicXVpdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGl0IHByb2dyYW0iCittc2dzdHIgInF1aXQgICAgICAgICAgICAgICAgICAgICAgICAgIHNhaXIgZG8gcHJvZ3JhbWEiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjA0CisjLCBmdXp6eQorbXNnaWQgInJlc2N1ZSIKK21zZ3N0ciAicmVzaXplIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIwNworIywgZnV6enkKK21zZ2lkICIiCisicmVzY3VlIFNUQVJUIEVORCAgICAgICAgICAgICAgICAgICAgICAgICByZXNjdWUgYSBsb3N0IHBhcnRpdGlvbiBuZWFyIFNUQVJUICIKKyJhbmQgRU5EIgorbXNnc3RyICJwcmludCAgICAgICAgICAgICAgICAgICAgICAgICBtb3N0cmEgYSB0YWJlbGEgZGUgcGFydGnn9WVzIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIxMworbXNnaWQgInJlc2l6ZSIKK21zZ3N0ciAicmVzaXplIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIxNgorIywgZnV6enkKK21zZ2lkICIiCisicmVzaXplIE5VTUJFUiBTVEFSVCBFTkQgICAgICAgICAgICAgICAgICByZXNpemUgcGFydGl0aW9uIE5VTUJFUiBhbmQgaXRzICIKKyJmaWxlIHN5c3RlbSIKK21zZ3N0ciAicmVzaXplIE1JTk9SIElOSUNJTyBGSU0gICAgICAgcmVkaW1lbnNpb25hIGEgcGFydGnn428gTUlOT1IiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjI0Cittc2dpZCAicm0iCittc2dzdHIgInJtIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIyNworIywgZnV6enkKK21zZ2lkICJybSBOVU1CRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwYXJ0aXRpb24gTlVNQkVSIgorbXNnc3RyICJybSBNSU5PUiAgICAgICAgICAgICAgICAgICAgICBhcGFnYSBhIHBhcnRp5+NvIE1JTk9SIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIzMgorbXNnaWQgInNlbGVjdCIKK21zZ3N0ciAic2VsZWN0IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIzNQorIywgZnV6enkKK21zZ2lkICJzZWxlY3QgREVWSUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNob29zZSB0aGUgZGV2aWNlIHRvIGVkaXQiCittc2dzdHIgInNlbGVjdCBERVZJQ0UgICAgICAgICAgICAgICAgIHNlbGVjY2lvbmEgbyBkaXNwb3NpdGl2byBhIGVkaXRhciIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNDAKK21zZ2lkICJzZXQiCittc2dzdHIgInNldCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNDMKKyMsIGZ1enp5Cittc2dpZCAiIgorInNldCBOVU1CRVIgRkxBRyBTVEFURSAgICAgICAgICAgICAgICAgICAgY2hhbmdlIHRoZSBGTEFHIG9uIHBhcnRpdGlvbiBOVU1CRVIiCittc2dzdHIgInNldCBNSU5PUiBGTEFHIEVTVEFETyAgICAgICAgIG11ZGEgbyBzaW5hbGl6YWRvciBuYSBwYXJ0aefjbyBNSU5PUiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNDkKK21zZ2lkICJ0b2dnbGUiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNTIKK21zZ2lkICIiCisidG9nZ2xlIFtOVU1CRVIgW0ZMQUddXSAgICAgICAgICAgICAgICAgICB0b2dnbGUgdGhlIHN0YXRlIG9mIEZMQUcgb24gIgorInBhcnRpdGlvbiBOVU1CRVIiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNTgKKyMsIGZ1enp5Cittc2dpZCAidW5pdCIKK21zZ3N0ciAicXVpdCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNjEKKyMsIGZ1enp5Cittc2dpZCAidW5pdCBVTklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgdGhlIGRlZmF1bHQgdW5pdCB0byBVTklUIgorbXNnc3RyICJwcmludCAgICAgICAgICAgICAgICAgICAgICAgICBtb3N0cmEgYSB0YWJlbGEgZGUgcGFydGnn9WVzIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI2NgorbXNnaWQgInZlcnNpb24iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNjkKK21zZ2lkICIiCisidmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5IHRoZSB2ZXJzaW9uIG51bWJlciBhbmQgIgorImNvcHlyaWdodCBpbmZvcm1hdGlvbiBvZiBHTlUgUGFydGVkIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjczCittc2dpZCAiIgorIid2ZXJzaW9uJyBkaXNwbGF5cyBjb3B5cmlnaHQgYW5kIHZlcnNpb24gaW5mb3JtYXRpb24gY29ycmVzcG9uZGluZyB0byB0aGlzICIKKyJjb3B5IG9mIEdOVSBQYXJ0ZWRcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjMzNQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1obG1zdl0gW0RFVklDRSBbQ09NTUFORCBbUEFSQU1FVEVSU11dLi4uXVxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMzc5Cittc2dpZCAiTm8gZGV2aWNlIGZvdW5kIgorbXNnc3RyICJOZW5odW0gZGlzcG9zaXRpdm8gZW5jb250cmFkbyIKKworIzogcGFydGVkL3BhcnRlZC5jOjI0MTIKK21zZ2lkICJXQVJOSU5HOiBZb3UgYXJlIG5vdCBzdXBlcnVzZXIuICBXYXRjaCBvdXQgZm9yIHBlcm1pc3Npb25zLiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjQ1MAorbXNnaWQgIllvdSBtYXkgbmVlZCB0byB1cGRhdGUgL2V0Yy9mc3RhYi5cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzoxNjAKK21zZ2lkICJXZWxjb21lIHRvIEdOVSBQYXJ0ZWQhIFR5cGUgJ2hlbHAnIHRvIHZpZXcgYSBsaXN0IG9mIGNvbW1hbmRzLlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjE2MworIywgZnV6enkKK21zZ2lkICIiCisiVXNhZ2U6IHBhcnRlZCBbT1BUSU9OXS4uLiBbREVWSUNFIFtDT01NQU5EIFtQQVJBTUVURVJTXS4uLl0uLi5dXG4iCisiQXBwbHkgQ09NTUFORHMgd2l0aCBQQVJBTUVURVJTIHRvIERFVklDRS4gIElmIG5vIENPTU1BTkQocykgYXJlIGdpdmVuLCBydW4gIgorImluXG4iCisiaW50ZXJhY3RpdmUgbW9kZS5cbiIKK21zZ3N0ciAiIgorIlVzbzogcGFydGVkIFtPUENPRVNdLi4uIFtESVNQT1NJVElWTyBbQ09NQU5ETyBbUEFSQU1FVFJPU10uLi5dLi4uXVxuIgorIkFwbGljYSBDT01BTkRPIGNvbSBvcyBQQVJBTUVUUk9TIG5vIERJU1BPU0lUSVZPLiBTZSBu428gZm9yIGRhZG8gbmVuaHVtXG4iCisiQ09NQU5ETywgZXhlY3V0YSBlbSBtb2RvIGludGVyYWN0aXZvLlxuIgorCisjOiBwYXJ0ZWQvdWkuYzoxNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlxuIgorIllvdSBmb3VuZCBhIGJ1ZyBpbiBHTlUgUGFydGVkISBIZXJlJ3Mgd2hhdCB5b3UgaGF2ZSB0byBkbzpcbiIKKyJcbiIKKyJEb24ndCBwYW5pYyEgVGhlIGJ1ZyBoYXMgbW9zdCBsaWtlbHkgbm90IGFmZmVjdGVkIGFueSBvZiB5b3VyIGRhdGEuXG4iCisiSGVscCB1cyB0byBmaXggdGhpcyBidWcgYnkgZG9pbmcgdGhlIGZvbGxvd2luZzpcbiIKKyJcbiIKKyJDaGVjayB3aGV0aGVyIHRoZSBidWcgaGFzIGFscmVhZHkgYmVlbiBmaXhlZCBieSBjaGVja2luZ1xuIgorInRoZSBsYXN0IHZlcnNpb24gb2YgR05VIFBhcnRlZCB0aGF0IHlvdSBjYW4gZmluZCBhdDpcbiIKKyJcbiIKKyJcdGh0dHA6Ly9mdHAuZ251Lm9yZy9nbnUvcGFydGVkL1xuIgorIlxuIgorIlBsZWFzZSBjaGVjayB0aGlzIHZlcnNpb24gcHJpb3IgdG8gYnVnIHJlcG9ydGluZy5cbiIKKyJcbiIKKyJJZiB0aGlzIGhhcyBub3QgYmVlbiBmaXhlZCB5ZXQgb3IgaWYgeW91IGRvbid0IGtub3cgaG93IHRvIGNoZWNrLFxuIgorInBsZWFzZSB2aXNpdCB0aGUgR05VIFBhcnRlZCB3ZWJzaXRlOlxuIgorIlxuIgorIlx0aHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3BhcnRlZFxuIgorIlxuIgorImZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLlxuIgorIlxuIgorIllvdXIgcmVwb3J0IHNob3VsZCBjb250YWluIHRoZSB2ZXJzaW9uIG9mIHRoaXMgcmVsZWFzZSAoJXMpXG4iCisiYWxvbmcgd2l0aCB0aGUgZXJyb3IgbWVzc2FnZSBiZWxvdywgdGhlIG91dHB1dCBvZlxuIgorIlxuIgorIlx0cGFydGVkIERFVklDRSB1bml0IGNvIHByaW50IHVuaXQgcyBwcmludFxuIgorIlxuIgorImFuZCB0aGUgZm9sbG93aW5nIGhpc3Rvcnkgb2YgY29tbWFuZHMgeW91IGVudGVyZWQuXG4iCisiQWxzbyBpbmNsdWRlIGFueSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHlvdXIgc2V0dXAgeW91XG4iCisiY29uc2lkZXIgaW1wb3J0YW50LlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjI4NAorbXNnaWQgIiIKKyJcbiIKKyJDb21tYW5kIEhpc3Rvcnk6XG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6MzY2Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBTRUdWX01BUEVSUiAoQWRkcmVzcyBub3QgbWFwcGVkIHRvIG9iamVjdClcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzozNzIKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IFNFR1ZfQUNDRVJSIChJbnZhbGlkIHBlcm1pc3Npb25zIGZvciBtYXBwZWQgb2JqZWN0KVxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjM3NworbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogQSBnZW5lcmFsIFNJR1NFR1Ygc2lnbmFsIHdhcyBlbmNvdW50ZXJlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0MTAKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9JTlRESVYgKEludGVnZXI6IGRpdmlkZSBieSB6ZXJvKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0MTUKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9JTlRPVkYgKEludGVnZXI6IG92ZXJmbG93KSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0MjAKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRESVYgKEZsb2F0OiBkaXZpZGUgYnkgemVybykiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDI1Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxUT1ZGIChGbG9hdDogb3ZlcmZsb3cpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQzMAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0ZMVFVORCAoRmxvYXQ6IHVuZGVyZmxvdykiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDM1Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxUUkVTIChGbG9hdDogaW5leGFjdCByZXN1bHQpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQ0MAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0ZMVElOViAoRmxvYXQ6IGludmFsaWQgb3BlcmF0aW9uKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0NDUKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRTVUIgKEZsb2F0OiBzdWJzY3JpcHQgb3V0IG9mIHJhbmdlKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0NTAKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEEgZ2VuZXJhbCBTSUdGUEUgc2lnbmFsIHdhcyBlbmNvdW50ZXJlZC4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDgzCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfSUxMT1BDIChJbGxlZ2FsIE9wY29kZSkiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDg4Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfSUxMT1BOIChJbGxlZ2FsIE9wZXJhbmQpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQ5MworbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX0lMTEFEUiAoSWxsZWdhbCBhZGRyZXNzaW5nIG1vZGUpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQ5OAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX0lMTFRSUCAoSWxsZWdhbCBUcmFwKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo1MDMKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9QUlZPUEMgKFByaXZpbGVnZWQgT3Bjb2RlKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo1MDgKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9QUlZSRUcgKFByaXZpbGVnZWQgUmVnaXN0ZXIpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjUxMworbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX0NPUFJPQyAoQ29wcm9jZXNzb3IgRXJyb3IpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjUxOAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX0JBRFNUSyAoSW50ZXJuYWwgU3RhY2sgRXJyb3IpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjUyMworbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogQSBnZW5lcmFsIFNJR0lMTCBzaWduYWwgd2FzIGVuY291bnRlcmVkLiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzoxMDI0CisjLCBmdXp6eQorbXNnaWQgIkV4cGVjdGluZyBhIHBhcnRpdGlvbiBudW1iZXIuIgorbXNnc3RyICJBIHBhcnRp5+NvIGRlc3Rpbm8gZXN04SBhIHNlciB1dGlsaXphZGEuIgorCisjOiBwYXJ0ZWQvdWkuYzoxMDMzCittc2dpZCAiUGFydGl0aW9uIGRvZXNuJ3QgZXhpc3QuIgorbXNnc3RyICJBIHBhcnRp5+NvIG7jbyBleGlzdGUuIgorCisjOiBwYXJ0ZWQvdWkuYzoxMDUzCisjLCBmdXp6eQorbXNnaWQgIkV4cGVjdGluZyBhIGZpbGUgc3lzdGVtIHR5cGUuIgorbXNnc3RyICJUaXBvIGRlIHNpc3RlbWEgZGUgZmljaGVpcm9zIGRlc2NvbmhlY2lkby4iCisKKyM6IHBhcnRlZC91aS5jOjEwNjAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gZmlsZSBzeXN0ZW0gdHlwZSBcIiVzXCIuIgorbXNnc3RyICJUaXBvIGRlIHNpc3RlbWEgZGUgZmljaGVpcm9zIGRlc2NvbmhlY2lkby4iCisKKyM6IHBhcnRlZC91aS5jOjEwODAKK21zZ2lkICJFeHBlY3RpbmcgYSBkaXNrIGxhYmVsIHR5cGUuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjExNzgKKyMsIGZ1enp5Cittc2dpZCAiQ2FuJ3QgY3JlYXRlIGFueSBtb3JlIHBhcnRpdGlvbnMuIgorbXNnc3RyICJO428gcG9zc28gYWRpY2lvbmFyIG91dHJhIHBhcnRp5+NvLiIKKworIzogcGFydGVkL3VpLmM6MTE4OAorIywgZnV6enkKK21zZ2lkICJFeHBlY3RpbmcgYSBwYXJ0aXRpb24gdHlwZS4iCittc2dzdHIgIkEgcGFydGnn428gZGVzdGlubyBu428gZXhpc3RlLiIKKworIzogcGFydGVkL3VpLmM6MTMxNQorbXNnaWQgIm9uIgorbXNnc3RyICJvbiIKKworIzogcGFydGVkL3VpLmM6MTMxNgorbXNnaWQgIm9mZiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzoxNDMxCittc2dpZCAiT1BUSU9OczoiCittc2dzdHIgIk9Qx9VFUzoiCisKKyM6IHBhcnRlZC91aS5jOjE0MzYKK21zZ2lkICJDT01NQU5EczoiCittc2dzdHIgIkNPTUFORE9zOiIKKworIzogcGFydGVkL3VpLmM6MTQ0NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVXNpbmcgJXNcbiIKK21zZ3N0ciAiIgorIlxuIgorIlVzYW5kbyAlc1xuIgorCisjOiBwYXJ0ZWQvdWkuYzoxNTE5Cittc2dpZCAiVGhpcyBjb21tYW5kIGRvZXMgbm90IG1ha2Ugc2Vuc2UgaW4gbm9uLWludGVyYWN0aXZlIG1vZGUuXG4iCittc2dzdHIgIiIKKworI34gbXNnaWQgIndoZXJlIG5lY2Vzc2FyeSwgcHJvbXB0cyBmb3IgdXNlciBpbnRlcnZlbnRpb24iCisjfiBtc2dzdHIgInF1YW5kbyBuZWNlc3PhcmlvLCBwZWRlIGludGVydmVu5+NvIGRvIHV0aWxpemFkb3IiCisKKyN+IG1zZ2lkICIiCisjfiAiVGhlIHNlY3RvciBzaXplIG9uICVzIGlzICVkIGJ5dGVzLiAgUGFydGVkIGlzIGtub3duIG5vdCB0byB3b3JrIHByb3Blcmx5ICIKKyN+ICJ3aXRoIGRyaXZlcyB3aXRoIHNlY3RvciBzaXplcyBvdGhlciB0aGFuIDUxMiBieXRlcyIKKyN+IG1zZ3N0ciAiIgorI34gIk8gdGFtYW5obyBkbyBzZWN0b3IgZW0gJXMg6SAlZCBieXRlcy4gTyBQYXJ0ZWQg6SBjb25oZWNpZG8gcG9yIG7jbyAiCisjfiAiZnVuY2lvbmFyIHBlcmZlaXRhbWVudGUgY29tIGRpc2NvcyBjb20gc2VjdG9yZXMgZGlmZXJlbnRlcyBkZSA1MTIgYnl0ZXMiCisKKyN+IG1zZ2lkICJDb3VsZCBub3QgcmVhZCBnZW9tZXRyeSBvZiAlcyAtICVzLiIKKyN+IG1zZ3N0ciAiTuNvIGZvaSBwb3Nz7XZlbCBsZXIgYSBnZW9tZXRyaWEgZGUgJXMgLSAlcyIKKworI34gbXNnaWQgIkRldmljZSAlcyBoYXMgZG9kZ2V5IGdlb21ldHJ5LiIKKyN+IG1zZ3N0ciAiRGlzcG9zaXRpdm8gJXMgdGVtIGdlb21ldHJpYSBlc3RyYW5oYS4iCisKKyN+IG1zZ2lkICJ1bmtub3duIgorI34gbXNnc3RyICJkZXNjb25oZWNpZG8iCisKKyN+IG1zZ2lkICJVbmtub3duIFNDU0kiCisjfiBtc2dzdHIgIlNDU0kgZGVzY29uaGVjaWRvIgorCisjfiBtc2dpZCAiRGV2aWNlICVzIGlzIG5laXRoZXIgYSBTQ1NJIG5vciBJREUgZHJpdmUuIgorI34gbXNnc3RyICJPIGRpc3Bvc2l0aXZvICVzIG7jbyDpIHVtIGRyaXZlIFNDU0kgb3UgSURFLiIKKworI34gbXNnaWQgIiIKKyN+ICJUaGUgcGFydGl0aW9uIHRhYmxlIG9uICVzIGlzIGluY29uc2lzdGVudC4gIFRoZXJlIGFyZSBtYW55IHJlYXNvbnMgd2h5ICIKKyN+ICJ0aGlzIG1pZ2h0IGJlIHRoZSBjYXNlLiAgSG93ZXZlciwgdGhlIG1vc3QgbGlrZWx5IHJlYXNvbiBpcyB0aGF0IExpbnV4ICIKKyN+ICJkZXRlY3RlZCB0aGUgQklPUyBnZW9tZXRyeSBmb3IgJXMgaW5jb3JyZWN0bHkuICBHTlUgUGFydGVkIHN1c3BlY3RzIHRoZSAiCisjfiAicmVhbCBnZW9tZXRyeSBzaG91bGQgYmUgJWQvJWQvJWQgKG5vdCAlZC8lZC8lZCkuICBZb3Ugc2hvdWxkIGNoZWNrIHdpdGggIgorI34gInlvdXIgQklPUyBmaXJzdCwgYXMgdGhpcyBtYXkgbm90IGJlIGNvcnJlY3QuICBZb3UgY2FuIGluZm9ybSBMaW51eCBieSAiCisjfiAiYWRkaW5nIHRoZSBwYXJhbWV0ZXIgJXM9JWQsJWQsJWQgdG8gdGhlIGNvbW1hbmQgbGluZS4gIFNlZSB0aGUgTElMTyBvciAiCisjfiAiR1JVQiBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLiAgSWYgeW91IHRoaW5rIFBhcnRlZCdzIHN1Z2dlc3RlZCAiCisjfiAiZ2VvbWV0cnkgaXMgY29ycmVjdCwgeW91IG1heSBzZWxlY3QgSWdub3JlIHRvIGNvbnRpbnVlIChhbmQgZml4IExpbnV4ICIKKyN+ICJsYXRlcikuICBPdGhlcndpc2UsIHNlbGVjdCBDYW5jZWwgKGFuZCBmaXggTGludXggYW5kL29yIHRoZSBCSU9TIG5vdykuIgorI34gbXNnc3RyICIiCisjfiAiQSB0YWJlbGEgZGUgcGFydGnn9WVzIGVtICVzIOkgaW5jb25zaXN0ZW50ZS4gSOEgduFyaWFzIHJhevVlcyBwYXJhIGlzdG8gIgorI34gIm9jb3JyZXIuIEEgbWFpcyBjZXJ0YSBzZXJpYSBvIExpbnV4IGRldGVjdGFyIGEgZ2VvbWV0cmlhIGRhIEJJT1MgcGFyYSAlcyAiCisjfiAiaW5jb3JyZXRhbWVudGUuIE8gR05VIFBhcnRlZCBzdXNwZWl0YSBxdWUgYSBnZW9tZXRyaWEgcmVhbCBkZXZlcmlhIHNlciAlZC8iCisjfiAiJWQvJWQgKGUgbuNvICVkLyVkLyVkKS4gRGV2ZXLhIHZlZmlmaWNhciBhIEJJT1MgcHJpbWVpcm8sIHBvaXMgaXN0byBwb2RlICIKKyN+ICJu428gZXN0YXIgY29ycmVjdG8uIFBvZGVy4SBpbmZvcm1hciBvIExpbnV4IGFkaWNpb25hbmRvIG8gcGFy4m1ldHJvICVzPSVkLCIKKyN+ICIlZCwlZCBuYSBsaW5oYSBkZSBjb21hbmRvLiBWZWphIGEgZG9jdW1lbnRh5+NvIGRvIExJTE8gb3UgR1JVQiBwYXJhICIKKyN+ICJtYWlvcmVzIGluZm9ybWHn9WVzLiBTZSBhY2hhIHF1ZSBhIGdlb21ldHJpYSBzdWdlcmlhIHBlbG8gUGFydGVkIOkgYSAiCisjfiAiY29ycmVjdGEsIHBvZGUgc2VsZWNpb25hciBJZ25vcmFyIHBhcmEgY29udGludWFyIChlIGNvcnJpZ2lyIG8gTGludXggIgorI34gImRlcG9pcykuIERlIG91dHJhIG1hbmVpcmEsIHNlbGVjY2lvbmUgQ2FuY2VsYXIgKGUgY29ycmlnaXIgbyBMaW51eCBlL291IGEgIgorI34gIkJJT1MgYWdvcmEpLiIKKworI34gbXNnaWQgIiIKKyN+ICJUaGUgcGFydGl0aW9uIHRhYmxlIG9uICVzIGlzIGluY29uc2lzdGVudC4gIFRoZXJlIGFyZSBtYW55IHJlYXNvbnMgd2h5ICIKKyN+ICJ0aGlzIG1pZ2h0IGJlIHRoZSBjYXNlLiAgT2Z0ZW4sIHRoZSByZWFzb24gaXMgdGhhdCBMaW51eCBkZXRlY3RlZCB0aGUgIgorI34gIkJJT1MgZ2VvbWV0cnkgaW5jb3JyZWN0bHkuICBIb3dldmVyLCB0aGlzIGRvZXMgbm90IGFwcGVhciB0byBiZSB0aGUgY2FzZSAiCisjfiAiaGVyZS4gIEl0IGlzIHNhZmUgdG8gaWdub3JlLGJ1dCBpZ25vcmluZyBtYXkgY2F1c2UgKGZpeGFibGUpIHByb2JsZW1zICIKKyN+ICJ3aXRoIHNvbWUgYm9vdCBsb2FkZXJzLCBhbmQgbWF5IGNhdXNlIHByb2JsZW1zIHdpdGggRkFUIGZpbGUgc3lzdGVtcy4gICIKKyN+ICJVc2luZyBMQkEgaXMgcmVjb21tZW5kZWQuIgorI34gbXNnc3RyICIiCisjfiAiQSB0YWJlbGEgZGUgcGFydGnn9WVzIGVtICVzIOkgaW5jb25zaXN0ZW50ZS4gSOEgduFyaWFzIHJhevVlcyBwYXJhIGlzdG8gIgorI34gIm9jb3JyZXIuIE11aXRhcyB2ZXplcywgbyBMaW51eCBkZXRlY3RhIGEgZ2VvbWV0cmlhIGRhIEJJT1MgIgorI34gImluY29ycmV0YW1lbnRlLiBQb3LpbSwgaXNzbyBu428gcGFyZWNlIHNlciBvIGNhc28gYXF1aS4gySBzZWd1cm8gaWdub3JhciwgIgorI34gIm1hcyBpc3NvIHBvZGUgY2F1c2FyIHByb2JsZW1hcyAoc29sdWNpb27hdmVpcykgY29tIGFsZ3VucyBnZXN0b3JlcyBkZSAiCisjfiAiYm9vdC4iCisKKyN+IG1zZ2lkICIiCisjfiAiVW5hYmxlIHRvIGFsaWduIHBhcnRpdGlvbiBwcm9wZXJseS4gIFRoaXMgcHJvYmFibHkgbWVhbnMgdGhhdCBhbm90aGVyICIKKyN+ICJwYXJ0aXRpb25pbmcgdG9vbCBnZW5lcmF0ZWQgYW4gaW5jb3JyZWN0IHBhcnRpdGlvbiB0YWJsZSwgYmVjYXVzZSBpdCAiCisjfiAiZGlkbid0IGhhdmUgdGhlIGNvcnJlY3QgQklPUyBnZW9tZXRyeS4gIEl0IGlzIHNhZmUgdG8gaWdub3JlLGJ1dCBpZ25vcmluZyAiCisjfiAibWF5IGNhdXNlIChmaXhhYmxlKSBwcm9ibGVtcyB3aXRoIHNvbWUgYm9vdCBsb2FkZXJzLiIKKyN+IG1zZ3N0ciAiIgorI34gIkltcG9zc+12ZWwgYWxpbmhhciBhIHBhcnRp5+NvIHByb3ByaWFtZW50ZS4gSXNzbyBwcm92YXZlbG1lbnRlIHNpZ25pZmljYSAiCisjfiAicXVlIG91dHJhIGZlcnJhbWVudGEgZGUgcGFydGljaW9uYW1lbnRvIGdlcm91IHVtYSB0YWJlbGEgZGUgcGFydGnn9WVzICIKKyN+ICJpbmNvcnJldGEgcG9ycXVlIG7jbyB0aW5oYSBhIGdlb21ldHJpYSBuYSBCSU9TIGNvcnJldGEuIMkgc2VndXJvIGlnbm9yYXIsICIKKyN+ICJtYXMgaXN0byBwb2RlIGNhdXNhciBwcm9ibGVtYXMgKHNvbHVjaW9u4XZlaXMpIGNvbSBhbGd1bnMgZ2VzdG9yZXMgZGUgIgorI34gImJvb3QuIgorCisjfiBtc2dpZCAiR1VJRCBQYXJ0aXRpb24gVGFibGUgSGVhZGVyIFNpZ25hdHVyZSBpcyB3cm9uZzogIgorI34gbXNnc3RyICJBIEdVSUQgbm8gY2FiZedhbGhvIGRhIHRhYmVsYSBkZSBwYXJ0aefjbyBlc3ThIGluY29ycmVjdGE6ICIKKworI34gbXNnaWQgIiBzaG91bGQgYmUgIgorI34gbXNnc3RyICIgRGV2ZXJpYSBzZXIiCisKKyN+IG1zZ2lkICJUaGUgbmV3IHBhcnRpdGlvbiBvdmVybGFwcyB3aXRoIGFub3RoZXIgcGFydGl0aW9uLiIKKyN+IG1zZ3N0ciAiQSBub3ZhIHBhcnRp5+NvIHNvYnJlcPVlIGFsZ3VtYSBvdXRyYSBwYXJ0aefjbyIKKworI34gbXNnaWQgIkNhbid0IHNldCBub24tTGludXggcGFydGl0aW9ucyBhcyBhIHJvb3QgZGV2aWNlLiIKKyN+IG1zZ3N0ciAiTuNvIHBvc3NvIGNvbmZpZ3VyYXIgcGFydGnn9WVzIG7jbyBMaW51eCBjb21vIHVtYSBwYXJ0aefjbyByb290LiIKKworI34gbXNnaWQgIkNhbid0IHNldCBub24tTGludXggcGFydGl0aW9ucyBhcyBhIHN3YXAgZGV2aWNlLiIKKyN+IG1zZ3N0ciAiIgorI34gIk7jbyBwb3NzbyBjb25maWd1cmFyIHBhcnRp5/VlcyBu428gbmFvIHNlamFtIExpbnV4IGNvbW8gdW1hIHBhcnRp5+NvIHN3YXAuIgorCisjfiBtc2dpZCAiTm8gZ2V0X3Jlc2l6ZV9jb25zdHJhaW50IGZvciAlcyEiCisjfiBtc2dzdHIgIk7jbyBo4SBnZXRfcmVzaXplX2NvbnN0cmFpbnQgcGFyYSAlcyEiCisKKyN+IG1zZ2lkICJUaGUgJXMgZmlsZSBzeXN0ZW0gY29kZSBkb2Vzbid0IHN1cHBvcnQgJXMgZGlzayBsYWJlbHMuIgorI34gbXNnc3RyICIiCisjfiAiTyBj82RpZ28gZG8gc2lzdGVtYSBkZSBmaWNoZWlyb3MgJXMgbuNvIHN1cG9ydGEgcvN0dWxvcyBkZSBkaXNjbyAlcy4iCisKKyN+IG1zZ2lkICJDcmVhdGluZyBuZXcgJXMgZGlza2xhYmVscyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKKyN+IG1zZ3N0ciAiQ3JpYefjbyBkZSBub3ZvcyBy83R1bG9zICVzIG7jbyBlc3ThIGltcGxlbWVudGFkbyBhaW5kYS4iCisKKyN+IG1zZ2lkICJUaGUgY29kZSB0byB3cml0ZSB0aGUgcGFydGl0aW9uIHRhYmxlIGhhc24ndCBiZWVuIHdyaXR0ZW4gZm9yICVzIHlldCIKKyN+IG1zZ3N0ciAiIgorI34gIk8gY/NkaWdvIHBhcmEgZXNjcmV2ZXIgYSB0YWJlbGEgZGUgcGFydGnn9WVzIGFpbmRhIG7jbyBmb2kgZXNjcml0byBwYXJhICUiCisjfiAicy4iCisKKyN+IG1zZ2lkICJFcnJvciByZWFkaW5nICVzICglcykgdG8gZGV0ZXJtaW5lIGlmIHBhcnRpdGlvbiBpcyBtb3VudGVkLiIKKyN+IG1zZ3N0ciAiRXJybyBsZW5kbyAlcyAoJXMpIHBhcmEgZGV0ZXJtaW5hciBzZSBhIHBhcnRp5+NvIGVzdOEgbW9udGFkYS4iCisKKyN+IG1zZ2lkICJDYW4ndCBncm93IGEgcGFydGl0aW9uIG9udG8gdXNlZCBzcGFjZS4iCisjfiBtc2dzdHIgIk7jbyBwb3NzbyBhdW1lbnRhciBhIHBhcnRp5+NvIGFjaW1hIGRlIGVzcGHnbyBq4SB1dGlsaXphZG8uIgorCisjfiBtc2dpZCAiQXR0ZW1wdCB0byByZWFkIHNlY3RvcnMgJWxkLSVsZCBvdXRzaWRlIG9mIHBhcnRpdGlvbiBvbiAlcyIKKyN+IG1zZ3N0ciAiVGVudGF0aXZhIGRlIGxlciBzZWN0b3JlcyAlbGQtJWxkIGZvcmEgZGEgcGFydGnn428gZW0gJXMiCisKKyN+IG1zZ2lkICIiCisjfiAiVGhpcyBleHQyIGZpbGVzeXN0ZW0gaGFzIGEgcmF0aGVyIHN0cmFuZ2UgbGF5b3V0ISAgUGxlYXNlIHVzZSBkdW1wZTJmcyBvbiAiCisjfiAidGhpcyBmaWxlc3lzdGVtIGFuZCBzZW5kIGl0IHRvIDxidXl0ZW5oQGdudS5vcmc+LiBJIHdvbid0IHJlc2l6ZSBpdCwgIgorI34gInNvcnJ5LiIKKyN+IG1zZ3N0ciAiIgorI34gIkVzdGUgc2lzdGVtYSBkZSBmaWNoZWlyb3MgZXh0MiB0ZW0gdW1hIGFwYXLqbmNpYSBtdWl0byBlc3RyYW5oYSEgUG9yICIKKyN+ICJmYXZvciB1c2UgbyBkdW1wZTJmcyBuZXN0ZSBzaXN0ZW1hIGUgZW52aWUtbyBwYXJhIDxidXl0ZW5oQGRzdi5ubD4uIEV1ICIKKyN+ICJu428gdm91IHJlZGltZW5zaW9u4S1sbywgZGVzY3VscGUuIgorCisjfiBtc2dpZCAiSW5zYW5lISAgJWQgY2x1c3RlcnMhIgorI34gbXNnc3RyICJFc3RyYW5obyEgJWQgY2x1c3RlcnMhIgorCisjfiBtc2dpZCAiIgorI34gIlRoZSBmaWxlc3lzdGVtIGlzIGdvaW5nIHRvIGJlIHRvbyBiaWcgZm9yIEZBVDE2LCBzbyBGQVQzMiB3aWxsIGJlIHVzZWQuICAiCisjfiAiVGhpcyBpcyBub3QgY29tcGF0aWJsZSB3aXRoIE1TLURPUywgZWFybHkgdmVyc2lvbnMgb2YgTVMtV2luZG93cyA5NSBhbmQgIgorI34gIldpbmRvd3MgTlQuICBJZiB5b3UgdXNlIHRoZXNlIG9wZXJhdGluZyBzeXN0ZW1zLCB0aGVuIHNlbGVjdCBjYW5jZWwsIGFuZCAiCisjfiAiY3JlYXRlIGEgc21hbGxlciBwYXJ0aXRpb24uICBJZiB5b3Ugb25seSB1c2UgTGludXgsIEJTRCwgTVMgV2luZG93cyA5OCAiCisjfiAiYW5kL29yIE1TIFdpbmRvd3MgOTUgQiwgdGhlbiBzZWxlY3QgT0suIgorI34gbXNnc3RyICIiCisjfiAiTyBzaXN0ZW1hIGRlIGZpY2hlaXJvcyBzZXLhIG11aXRvIGdyYW5kZSBwYXJhIEZBVDE2LCBvIG1lbGhvciBzZXLhIHVzYXIgIgorI34gIkZBVDMyLiBJc3RvIG7jbyDpIGNvbXBhdO12ZWwgY29tIG8gTVMtRE9TLCB2ZXJz9WVzIGFudGlnYXMgZG8gTVMtV2luZG93cyAiCisjfiAiOTUgZSBXaW5kb3dzIE5ULiBTZSB1dGlsaXphIGVzdGVzIHNpc3RlbWFzIG9wZXJhdGl2b3MsIHNlbGVjaW9uZSAiCisjfiAiY2FuY2VsYXIsIGUgY3JpZSB1bWEgcGFydGnn428gbWVub3IuIFNlIHV0aWxpemEgc29tZW50ZSBMaW51eCwgQlNELCBNUy0iCisjfiAiV2luZG93cyA5OCBlL291IE1TLVdpbmRvd3MgOTUgQiwgZW50428gc2VsZWNpb25lIE9LLiIKKworI34gbXNnaWQgIldlaXJkOiBmYXRfY2FsY19zaXplcygpIGZhaWxlZCBmb3IgRkFUMzIhIgorI34gbXNnc3RyICJFc3RyYW5obzogZmF0X2NhbGNfc2l6ZXMoKSBmYWxob3UgcGFyYSBhIEZBVDMyISIKKworI34gbXNnaWQgIiIKKyN+ICJXb3VsZCB5b3UgbGlrZSB0byB1c2UgRkFUMzIgZm9yIHRoaXMgZmlsZXN5c3RlbT8gIEl0IGlzIG11Y2ggbW9yZSAiCisjfiAiZWZmaWNpZW50IHdpdGggeW91ciBkaXNrIHNwYWNlLCBidXQgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBlYXJseSB2ZXJzaW9ucyAiCisjfiAib2YgV2luZG93cyA5NSBhbmQgV2luZG93cyBOVC4gIE9ubHkgc2VsZWN0IHllcyBpZiB5b3Ugb25seSB1c2UgTGludXgsICIKKyN+ICJCU0QsIE1TIFdpbmRvd3MgOTggYW5kL29yIE1TIFdpbmRvd3MgOTUgQi4iCisjfiBtc2dzdHIgIiIKKyN+ICJWb2PqIGdvc3RhcmlhIGRlIHVzYXIgYSBGQVQzMiBwYXJhIGVzdGUgc2lzdGVtYSBkZSBmaWNoZWlyb3M/IMkgbXVpdG8gIgorI34gIm1haXMgZWZpY2llbnRlIGNvbSBvIGVzcGHnbyBlbSBkaXNjbywgbWFzIG7jbyDpIGNvbXBhdO12ZWwgY29tIHZlcnP1ZXMgIgorI34gImFudGlnYXMgZG8gV2luZG93cyA5NSBlIFdpbmRvd3MgTlQuIFNlbGVjY2lvbmUgU0lNIHNlIHZvY+ogc/MgdXRpbGl6YXIgIgorI34gIkxpbnV4LCBCU0QsIE1TLVdpbmRvd3MgOTggZS9vdSBNUy1XaW5kb3dzIDk1IEIuIgorCisjfiBtc2dpZCAiIgorI34gIkZpbGUgc3lzdGVtIGRvZXNuJ3QgaGF2ZSBleHBlY3RlZCBzaXplcyBmb3IgV2luZG93cyB0byBsaWtlIGl0LiAgTnVtYmVyICIKKyN+ICJvZiBjbHVzdGVycyBpcyAlZCAoJWQgZXhwZWN0ZWQpOyBzaXplIG9mIEZBVHMgaXMgJWQgc2VjdG9ycyAoJWQgZXhwZWN0ZWQpLiIKKyN+IG1zZ3N0ciAiIgorI34gIk8gc2lzdGVtYSBkZSBmaWNoZWlyb3MgbuNvIHRlbSBvIHRhbWFuaG8gZXNwZXJhZG8gcGFyYSBxdWUgbyBXaW5kb3dzIG8gIgorI34gInV0aWxpemUuIE8gdGFtYW5obyBkbyBjbHVzdGVyIOkgJWRrICglZGsgZXNwZXJhZG8pOyB0YW1hbmhvIGRhIEZBVCDpICVkICIKKyN+ICJzZWN0b3JlcyAoJWQgZXNwZXJhZG8pLiIKKworI34gbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyBhbiBpbnZhbGlkIHNpZ25hdHVyZSBmb3IgYSBGQVQgZmlsZSBzeXN0ZW1zLiIKKyN+IG1zZ3N0ciAiU2lzdGVtYSBkZSBmaWNoZWlyb3MgdGVtIHVtYSBhc3NpbmF0dXJhIGluduFsaWRhIHBhcmEgdW0gRkFULiIKKworI34gbXNnaWQgIiIKKyN+ICJQYXJ0aXRpb24gc2l6ZSAoJWxkIHNlY3RvcnMpIGFuZCBmaWxlc3lzdGVtIHNpemUgKCVsZCBzZWN0b3JzKSBkbyBub3QgIgorI34gIm1hdGNoLiIKKyN+IG1zZ3N0ciAiIgorI34gIlRhbWFuaG8gZGEgcGFydGnn428gKCVsZCBzZWN0b3JlcykgZSB0YW1hbmhvIGRvIHNpc3RlbWEgZGUgZmljaGVpcm9zICglbGQgIgorI34gInNlY3RvcmVzKSBu428gY29pbmNpZGVtLiIKKworI34gbXNnaWQgIiIKKyN+ICJUaGUgRkFUcyBhcmVuJ3QgYmlnIGVub3VnaCB0byBkZXNjcmliZSBhbGwgY2x1c3RlcnMhICBFYWNoIEZBVCBpcyAlZCAiCisjfiAic2VjdG9ycy4gIFRoZXJlIGFyZSAlZCBjbHVzdGVycywgd2hpY2ggd291bGQgcmVxdWlyZSBlYWNoIEZBVCB0byBiZSAlZCAiCisjfiAic2VjdG9ycy4gIFRoaXMgaXMgUkVBTExZIHdlaXJkLiAgWW91IG1pZ2h0IHdhbnQgdG8gd3JpdGUgdXMgYW4gZW1haWw6IGJ1Zy0iCisjfiAicGFydGVkQGdudS5vcmciCisjfiBtc2dzdHIgIiIKKyN+ICJBcyBGQVRzIG7jbyBz428gZ3JhbmRlcyBvIHN1ZmljaWVudGUgcGFyYSBkZXNjcmV2ZXIgdG9kb3Mgb3MgY2x1c3RlcnMhICIKKyN+ICJDYWRhIEZBVCB0ZW0gJWQgc2VjdG9yZXMuIEV4aXN0ZW0gJWQgY2x1c3RlcnMsIG9zIHF1YWlzIHJlcXVlcmVtIHF1ZSBjYWRhICIKKyN+ICJGQVQgdGVuaGEgJWQgc2V0b3Jlcy4gSXN0byDpIFJFQUxNRU5URSBlc3RyYW5oby4gVm9j6iBwb2RlIHF1ZXJlciAiCisjfiAiZXNjcmV2ZXIgdW0gZW1haWw6IGJ1Zy1wYXJ0ZWRAZ251Lm9yZyIKKworI34gbXNnaWQgIiIKKyN+ICJUaGlzIHN3YXAgcGFydGl0aW9uIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggTGludXggdmVyc2lvbiAyLjEuMTE3IG9yICIKKyN+ICJlYXJsaWVyLiAgVXNlIGEgc21hbGxlciBwYXJ0aXRpb24gKG1heGltdW0gc2l6ZSAxMjhtYikgaWYgeW91IHdhbnQgdG8gdXNlICIKKyN+ICJvbGQgdmVyc2lvbnMgb2YgTGludXguIgorI34gbXNnc3RyICIiCisjfiAiRXN0YSBwYXJ0aefjbyBzd2FwIG7jbyDpIGNvbXBhdO12ZWwgY29tIG8gTGludXggdmVyc+NvIDIuMS4xMTcgb3UgIgorI34gImFudGVyaW9yLiBVdGlsaXplIHVtYSBwYXJ0aefjbyBtZW5vciAobeF4aW1vIGRlIDEyOG1iKSBzZSBxdWlzZXIgdXRpbGl6YXIgIgorI34gInZlcnP1ZXMgYW50aWdhcyBkbyBMaW51eC4iCisKKyN+IG1zZ2lkICJMaW51eC1zd2FwIHBhcnRpdGlvbnMgY2FuIG5vdCBiZSBoaWRkZW4gb24gbXNkb3MgZGlzayBsYWJlbHMuIgorI34gbXNnc3RyICIiCisjfiAiUGFydGnn9WVzIExpbnV4LXN3YXAgbuNvIHBvZGVtIHNlciBlc2NvbmRpZGFzIGVtIHLzdHVsb3MgZGUgZGlzY28gbXNkb3MuIgorCisjfiBtc2dpZCAiTGludXgtc3dhcCBwYXJ0aXRpb25zIGNhbiBub3QgYmUgYm9vdGFibGUgb24gcGM5OCBkaXNrIGxhYmVscy4iCisjfiBtc2dzdHIgIiIKKyN+ICJQYXJ0aef1ZXMgTGludXgtc3dhcCBu428gcG9kZW0gc2VyIGluaWNpYWxpeuF2ZWlzIGVtIHLzdHVsb3MgZGUgZGlzY28gIgorI34gInBjOTguIgorCisjfiBtc2dpZCAiSEZTIHBhcnRpdGlvbnMgY2FuJ3QgYmUgaGlkZGVuIG9uIG1zZG9zIGRpc2sgbGFiZWxzLiIKKyN+IG1zZ3N0ciAiUGFydGnn9WVzIEhGUyBu428gcG9kZW0gc2VyIGVzY29uZGlkYXMgZW0gcvN0dWxvcyBkZSBkaXNjbyBtc2Rvcy4iCisKKyN+IG1zZ2lkICJKRlMgcGFydGl0aW9ucyBjYW4ndCBiZSBoaWRkZW4gb24gbXNkb3MgZGlzayBsYWJlbHMuIgorI34gbXNnc3RyICJQYXJ0aef1ZXMgSkhTIG7jbyBwb2RlbSBzZXIgZXNjb25kaWRhcyBlbSBy83R1bG9zIGRlIGRpc2NvIG1zZG9zLiIKKworI34gbXNnaWQgIlJlaXNlcmZzIHBhcnRpdGlvbnMgY2FuJ3QgYmUgaGlkZGVuIG9uIG1zZG9zIGRpc2sgbGFiZWxzLiIKKyN+IG1zZ3N0ciAiIgorI34gIlBhcnRp5/VlcyBSZWlzZXJmcyBu428gcG9kZW0gc2VyIGVzY29uZGlkYXMgZW0gcvN0dWxvcyBkZSBkaXNjbyBtc2Rvcy4iCisKKyN+IG1zZ2lkICJSZWlzZXJmcyBwYXJ0aXRpb25zIG11c3QgYmUgYm9vdGFibGUgb24gcGM5OCBkaXNrIGxhYmVscy4iCisjfiBtc2dzdHIgIiIKKyN+ICJQYXJ0aef1ZXMgUmVpc2VyZnMgbuNvIHBvZGVtIHNlciBpbmljaWFsaXrhdmVpcyBlbSBy83R1bG9zIGRlIGRpc2NvIHBjOTguIgorCisjfiBtc2dpZCAiWEZTIHBhcnRpdGlvbnMgY2FuJ3QgYmUgaGlkZGVuIG9uIG1zZG9zIGRpc2sgbGFiZWxzLiIKKyN+IG1zZ3N0ciAiUGFydGnn9WVzIFhGUyBu428gcG9kZW0gc2VyIGVzY29uZGlkYXMgZW0gcvN0dWxvcyBkZSBkaXNjbyBtc2Rvcy4iCisKKyN+IG1zZ2lkICJTVEFSVCBhbmQgRU5EIGFyZSBpbiBtZWdhYnl0ZXNcbiIKKyN+IG1zZ3N0ciAiSU5JQ0lPIGUgRklNIHPjbyBlbSBtZWdhYnl0ZXNcbiIKKworI34gbXNnaWQgIiIKKyN+ICJZb3UgcmVxdWVzdGVkIHRvIGNyZWF0ZSBhIHBhcnRpdGlvbiBhdCAlLjNmLSUuM2ZNYi4gVGhlIGNsb3Nlc3QgUGFydGVkICIKKyN+ICJjYW4gbWFuYWdlIGlzICUuM2YtJS4zZk1iLiIKKyN+IG1zZ3N0ciAiIgorI34gIlByZXRlbmRlIGNyaWFyIHVtYSBwYXJ0aedhbyBlbSAlLjNmLSUuM2ZNYi4gTyBtYWlzIHBlcnRvIHF1ZSBzZSBjb25zZWd1ZSAiCisjfiAic2Vy4SAlM2YtJS4zZk1iLiIKKworI34gbXNnaWQgIiIKKyN+ICJZb3UgcmVxdWVzdGVkIHRvIG1vdmUgdGhlIHBhcnRpdGlvbiB0byAlLjNmLSUuM2ZNYi4gVGhlIGNsb3Nlc3QgUGFydGVkICIKKyN+ICJjYW4gbWFuYWdlIGlzICUuM2YtJS4zZk1iLiIKKyN+IG1zZ3N0ciAiIgorI34gIlByZXRlbmRlIG1vdmVyIGEgcGFydGnnYW8gcGFyYSAlLjNmLSUuM2ZNYi4gTyBtYWlzIHBlcnRvIHF1ZSBzZSBjb25zZWd1ZSAiCisjfiAic2Vy4SAlM2YtJS4zZk1iIgorCisjfiBtc2dpZCAiRGlzayBnZW9tZXRyeSBmb3IgJXM6IDAuMDAwLSUuM2YgbWVnYWJ5dGVzXG4iCisjfiBtc2dzdHIgIkdlb21ldHJpYSBkZSBkaXNjbyBwYXJhICVzOiAwLjAwMC0lLjNmIG1lZ2FieXRlc1xuIgorCisjfiBtc2dpZCAiTWlub3IgICAgU3RhcnQgICAgICAgRW5kICAgICAiCisjfiBtc2dzdHIgIk1pbm9yICAgIElu7WNpbyAgICAgIEZpbSAgICAgIgorCisjfiBtc2dpZCAiVHlwZSAgICAgICIKKyN+IG1zZ3N0ciAiVGlwbyAgICAgICIKKworI34gbXNnaWQgIk5hbWUgICAgICAgICAgICAgICAgICAiCisjfiBtc2dzdHIgIk5vbWUgICAgICAgICAgICAgICAgICAiCisKKyN+IG1zZ2lkICIiCisjfiAiWW91IHJlcXVlc3RlZCB0byByZXNpemUgdGhlIHBhcnRpdGlvbiB0byAlLjNmLSUuM2ZNYi4gVGhlIGNsb3Nlc3QgUGFydGVkICIKKyN+ICJjYW4gbWFuYWdlIGlzICUuM2YtJS4zZk1iLiIKKyN+IG1zZ3N0ciAiIgorI34gIlByZXRlbmRlIHJlZGltZW5zaW9uYXIgYSBwYXJ0aedhbyBwYXJhICUuM2YtJS4zZk1iLiBPIG1haXMgcGVydG8gcXVlIHNlICIKKyN+ICJjb25zZWd1ZSBzZXLhICUzZi0lLjNmTWIiCisKKyN+IG1zZ2lkICIiCisjfiAiWW91IGZvdW5kIGEgYnVnIGluIEdOVSBQYXJ0ZWQuICBQbGVhc2UgZW1haWwgYSBidWcgcmVwb3J0IHRvIGJ1Zy0iCisjfiAicGFydGVkQGdudS5vcmcgY29udGFpbmluZyB0aGUgdmVyc2lvbiAoJXMpLCBhbmQgdGhlIGZvbGxvd2luZyBtZXNzYWdlOlxuIgorI34gbXNnc3RyICIiCisjfiAiVm9j6iBlbmNvbnRyb3UgdW0gYnVnIG5vIEdOVSBwYXJ0ZWQuIFBvciBmYXZvciBlbnZpZSB1bSByZWxhdPNyaW8gcGFyYSAiCisjfiAiYnVnLXBhcnRlZEBnbnUub3JnXG4iCisjfiAiY29udGVuZG8gYSB2ZXJz428gKCVzKSwgZSBhIG1lbnNhZ2VtIGFiYWl4bzpcbiIKKworI34gbXNnaWQgIiIKKyN+ICIgIFlvdSBoYXZlIFdpbmRvd3MgRkFUIHBhcnRpdGlvbihzKSB0aGF0IGFyZSBub3QgdXNpbmcgTEJBLiAgSWYgeW91ciBCSU9TICIKKyN+ICJzdXBwb3J0cyBMQkEsIHRoZW4geW91IHNob3VsZCBzd2l0Y2ggdG8gTEJBIGJ5IHNldHRpbmcgdGhlIExCQSBmbGFnIG9uICIKKyN+ICJhbGwgRkFUIHBhcnRpdGlvbnMuICBPdGhlcndpc2UsIG1ha2Ugc3VyZSB0aGUgb3BlcmF0aW5nIHN5c3RlbSBhbmQgdGhlICIKKyN+ICJCSU9TIGhhdmUgdGhlIHNhbWUgZ2VvbWV0cnkgYmVmb3JlIHJlc2l6aW5nIGFueSBGQVQgcGFydGl0aW9ucy4iCisjfiBtc2dzdHIgIiIKKyN+ICJWb2PqIHRlbSBwYXJ0aedvZXMgRkFUIGUgbmFvIGVzdGEgYSB1c2FyIExCQS4gU2UgYSBzdWEgQklPUyBzdXBvcnRhIExCQSAiCisjfiAiZW50YW8gZGV2ZXLhIG11ZGFyIHRvZGFzIGFzIHBhcnRp529lcyBGQVQgcGFyYSBlc3NhIG9w52FvLiBDYXNvICIKKyN+ICJjb250cuFyaW8sIGNlcnRpZmlxdWUtc2UgcXVlIG8gc2lzdGVtYSBvcGVyYXRpdm8gZSBhIEJJT1MgdOptIGEgbWVzbWEgIgorI34gImdlb21ldHJpYSBhbnRlcyBkZSBmYXplciBvIHJlZGltZW5zaW9uYW1lbnRvIGRlIHF1YWxxdWVyIHBhcnRp52FvIEZBVCIKKworI34gbXNnaWQgIiIKKyN+ICJUaGUgb3BlcmF0aW5nIHN5c3RlbSB0aGlua3MgdGhlIGdlb21ldHJ5IG9uICVzIGlzICVkLyVkLyVkLiAgVGhlcmVmb3JlLCAiCisjfiAiY3lsaW5kZXIgMTAyNCBlbmRzIGF0ICUuM2ZNLiVzIgorI34gbXNnc3RyICIiCisjfiAiTyBzaXN0ZW1hIE9wZXJhdGl2byBhY2hhIHF1ZSBhIGdlb21ldHJpYSBkZSAlcyDpICVkLyVkLyVkLiBQb3LpbSwgbyAiCisjfiAiY2lsaW5kcm8gMTAyNCB0ZXJtaW5hIGVtICUuM2ZNJXMuIFZvY+ogZGV2aWEgdmVyaWZpY2FyIHNlIGlzdG8gZXN04SAiCisjfiAiY29ycmV0byBjb20gc3VhIFwiXCJCSU9TLCBhbnRlcyBkZSB1c2FyIGVzdGUgcHJvZ3JhbWEuIgorCisjfiBtc2dpZCAiVGhlIG9wZXJhdGluZyBzeXN0ZW0gdGhpbmtzIHRoZSBnZW9tZXRyeSBvbiAlcyBpcyAlZC8lZC8lZC4lcyIKKyN+IG1zZ3N0ciAiTyBTaXN0ZW1hIE9wZXJhdGl2byBkZXRlY3RvdSBxdWUgYSBnZW1vdHJpYSBlbSAlcyDpICVkLyVkLyVkLiVzIgpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L3BvL3B0X0JSLmdtbyBiL3BhcnRlZC0xLjguNy9wby9wdF9CUi5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdmMmFmZAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9wby9wdF9CUi5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L3BvL3B0X0JSLnBvIGIvcGFydGVkLTEuOC43L3BvL3B0X0JSLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NTk1ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvcG8vcHRfQlIucG8KQEAgLTAsMCArMSwzNDc4IEBACisjIEJyYXppbGlhbiBwb3J0dWd1ZXNlIG1lc3NhZ2VzIGZvciBHTlUgcGFydGVkLgorIyBDb3B5cmlnaHQgKEMpIDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIEVsaXBoYXMgTGV2eSBUaGVvZG9ybyA8ZWxpcGhhc0Bjb25lY3RpdmEuY29tPiwgMTk5OS4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IEdOVSBwYXJ0ZWQgMS40LjIxXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGJ1Zy1wYXJ0ZWRAZ251Lm9yZ1xuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDA3LTA1LTA5IDE3OjAyLTA0MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDAxLTExLTIxIDA5OjEwLTAzMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEVsaXBoYXMgTGV2eSBUaGVvZG9ybyA8ZWxpcGhhc0BmMnMuY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IEJyYXppbGlhbiBQb3J0dWd1ZXNlIDxsZHAtYnJAYmF6YXIuY29uZWN0aXZhLmNvbS5icj5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1JU08tODg1OS0xXG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOC1iaXRcbiIKKworIzogbGliL2Nsb3Nlb3V0LmM6NzQKK21zZ2lkICJ3cml0ZSBlcnJvciIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXJyb3IuYzoxMjUKKyMsIGZ1enp5Cittc2dpZCAiVW5rbm93biBzeXN0ZW0gZXJyb3IiCittc2dzdHIgIlRpcG8gZGUgc2lzdGVtYSBkZSBhcnF1aXZvcyBkZXNjb25oZWNpZG8uIgorCisjOiBsaWIvZ2V0b3B0LmM6NTMxIGxpYi9nZXRvcHQuYzo1NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiBgJXMnIGlzIGFtYmlndW91c1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo1ODAgbGliL2dldG9wdC5jOjU4NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIGAtLSVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjU5MyBsaWIvZ2V0b3B0LmM6NTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYCVjJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6NjQxIGxpYi9nZXRvcHQuYzo2NjAgbGliL2dldG9wdC5jOjk3NiBsaWIvZ2V0b3B0LmM6OTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYCVzJyByZXF1aXJlcyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo2OTggbGliL2dldG9wdC5jOjcwMQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5yZWNvZ25pemVkIG9wdGlvbiBgLS0lcydcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6NzA5IGxpYi9nZXRvcHQuYzo3MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVucmVjb2duaXplZCBvcHRpb24gYCVjJXMnXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjc2NCBsaWIvZ2V0b3B0LmM6NzY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbGxlZ2FsIG9wdGlvbiAtLSAlY1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo3NzMgbGliL2dldG9wdC5jOjc3NgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBvcHRpb24gLS0gJWNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6ODI4IGxpYi9nZXRvcHQuYzo4NDQgbGliL2dldG9wdC5jOjEwNDggbGliL2dldG9wdC5jOjEwNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCAtLSAlY1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo4OTcgbGliL2dldG9wdC5jOjkxMworIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIGAtVyAlcycgaXMgYW1iaWd1b3VzXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjkzNyBsaWIvZ2V0b3B0LmM6OTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYC1XICVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6CisjLiBHZXQgdHJhbnNsYXRpb25zIGZvciBvcGVuIGFuZCBjbG9zaW5nIHF1b3RhdGlvbiBtYXJrcy4KKyMuCisjLiBUaGUgbWVzc2FnZSBjYXRhbG9nIHNob3VsZCB0cmFuc2xhdGUgImAiIHRvIGEgbGVmdAorIy4gcXVvdGF0aW9uIG1hcmsgc3VpdGFibGUgZm9yIHRoZSBsb2NhbGUsIGFuZCBzaW1pbGFybHkgZm9yCisjLiAiJyIuICBJZiB0aGUgY2F0YWxvZyBoYXMgbm8gdHJhbnNsYXRpb24sCisjLiBsb2NhbGVfcXVvdGluZ19zdHlsZSBxdW90ZXMgYGxpa2UgdGhpcycsIGFuZAorIy4gY2xvY2FsZV9xdW90aW5nX3N0eWxlIHF1b3RlcyAibGlrZSB0aGlzIi4KKyMuCisjLiBGb3IgZXhhbXBsZSwgYW4gQW1lcmljYW4gRW5nbGlzaCBVbmljb2RlIGxvY2FsZSBzaG91bGQKKyMuIHRyYW5zbGF0ZSAiYCIgdG8gVSsyMDFDIChMRUZUIERPVUJMRSBRVU9UQVRJT04gTUFSSyksIGFuZAorIy4gc2hvdWxkIHRyYW5zbGF0ZSAiJyIgdG8gVSsyMDFEIChSSUdIVCBET1VCTEUgUVVPVEFUSU9OCisjLiBNQVJLKS4gIEEgQnJpdGlzaCBFbmdsaXNoIFVuaWNvZGUgbG9jYWxlIHNob3VsZCBpbnN0ZWFkCisjLiB0cmFuc2xhdGUgdGhlc2UgdG8gVSsyMDE4IChMRUZUIFNJTkdMRSBRVU9UQVRJT04gTUFSSykgYW5kCisjLiBVKzIwMTkgKFJJR0hUIFNJTkdMRSBRVU9UQVRJT04gTUFSSyksIHJlc3BlY3RpdmVseS4KKyMuCisjLiBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIHB1dCBoZXJlLCBwbGVhc2Ugc2VlCisjLiA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9RdW90YXRpb25fbWFyayNHbHlwaHM+CisjLiBhbmQgdXNlIGdseXBocyBzdWl0YWJsZSBmb3IgeW91ciBsYW5ndWFnZS4KKyM6IGxpYi9xdW90ZWFyZy5jOjIyOQorbXNnaWQgImAiCittc2dzdHIgIiIKKworIzogbGliL3F1b3RlYXJnLmM6MjMwCittc2dpZCAiJyIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjEzMQorbXNnaWQgIlN1Y2Nlc3MiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxMzQKK21zZ2lkICJObyBtYXRjaCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjEzNworbXNnaWQgIkludmFsaWQgcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTQwCittc2dpZCAiSW52YWxpZCBjb2xsYXRpb24gY2hhcmFjdGVyIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTQzCittc2dpZCAiSW52YWxpZCBjaGFyYWN0ZXIgY2xhc3MgbmFtZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE0NgorbXNnaWQgIlRyYWlsaW5nIGJhY2tzbGFzaCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE0OQorbXNnaWQgIkludmFsaWQgYmFjayByZWZlcmVuY2UiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNTIKK21zZ2lkICJVbm1hdGNoZWQgWyBvciBbXiIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE1NQorbXNnaWQgIlVubWF0Y2hlZCAoIG9yIFxcKCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE1OAorbXNnaWQgIlVubWF0Y2hlZCBcXHsiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNjEKK21zZ2lkICJJbnZhbGlkIGNvbnRlbnQgb2YgXFx7XFx9IgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTY0Cittc2dpZCAiSW52YWxpZCByYW5nZSBlbmQiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNjcKK21zZ2lkICJNZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTcwCittc2dpZCAiSW52YWxpZCBwcmVjZWRpbmcgcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTczCittc2dpZCAiUHJlbWF0dXJlIGVuZCBvZiByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNzYKK21zZ2lkICJSZWd1bGFyIGV4cHJlc3Npb24gdG9vIGJpZyIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE3OQorbXNnaWQgIlVubWF0Y2hlZCApIG9yIFxcKSIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjY4MAorbXNnaWQgIk5vIHByZXZpb3VzIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvcnBtYXRjaC5jOjcwCittc2dpZCAiXlt5WV0iCittc2dzdHIgIiIKKworIzogbGliL3JwbWF0Y2guYzo3MworbXNnaWQgIl5bbk5dIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBUcmFuc2xhdGUgIihDKSIgdG8gdGhlIGNvcHlyaWdodCBzeW1ib2wKKyMuIChDLWluLWEtY2lyY2xlKSwgaWYgdGhpcyBzeW1ib2wgaXMgYXZhaWxhYmxlIGluIHRoZSB1c2VyJ3MKKyMuIGxvY2FsZS4gIE90aGVyd2lzZSwgZG8gbm90IHRyYW5zbGF0ZSAiKEMpIjsgbGVhdmUgaXQgYXMtaXMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzo2NgorbXNnaWQgIihDKSIKK21zZ3N0ciAiIgorCisjOiBsaWIvdmVyc2lvbi1ldGMuYzo2OAorbXNnaWQgIiIKKyJcbiIKKyJMaWNlbnNlIEdQTHYyKzogR05VIEdQTCB2ZXJzaW9uIDIgb3IgbGF0ZXIgPGh0dHA6Ly9nbnUub3JnL2xpY2Vuc2VzL2dwbC4iCisiaHRtbD5cbiIKKyJUaGlzIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBhcmUgZnJlZSB0byBjaGFuZ2UgYW5kIHJlZGlzdHJpYnV0ZSBpdC5cbiIKKyJUaGVyZSBpcyBOTyBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3LlxuIgorIlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIzogbGliL3ZlcnNpb24tZXRjLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiV3JpdHRlbiBieSAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIzogbGliL3ZlcnNpb24tZXRjLmM6ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiV3JpdHRlbiBieSAlcyBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIldyaXR0ZW4gYnkgJXMsICVzLCBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyJhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6MTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiJXMsIGFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyIlcywgJXMsIGFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzoxMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyIlcywgJXMsICVzLCBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6MTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiJXMsICVzLCAlcywgJXMsXG4iCisiYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjLiBZb3UgY2FuIHVzZSBsaW5lIGJyZWFrcywgZXN0aW1hdGluZyB0aGF0IGVhY2ggYXV0aG9yIG5hbWUgb2NjdXBpZXMKKyMuIGNhLiAxNiBzY3JlZW4gY29sdW1ucyBhbmQgdGhhdCBhIHNjcmVlbiBsaW5lIGhhcyBjYS4gODAgY29sdW1ucy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjEzMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorIiVzLCAlcywgJXMsICVzLFxuIgorIiVzLCBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6MTQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiJXMsICVzLCAlcywgJXMsXG4iCisiJXMsICVzLCBhbmQgb3RoZXJzLlxuIgorbXNnc3RyICIiCisKKyM6IGxpYi94YWxsb2MtZGllLmM6MzUKK21zZ2lkICJtZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzoyMzcKK21zZ2lkICJEaXNrIEltYWdlIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzozMzggbGlicGFydGVkL2FyY2gvZ251LmM6MjYxCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjEyNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igb3BlbmluZyAlczogJXMiCittc2dzdHIgIkVycm8gYWJyaW5kbyAlczogJXMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzozNDkgbGlicGFydGVkL2FyY2gvZ251LmM6MjcxCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjEyODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIG9wZW4gJXMgcmVhZC13cml0ZSAoJXMpLiAgJXMgaGFzIGJlZW4gb3BlbmVkIHJlYWQtb25seS4iCittc2dzdHIgIiIKKyJO428gcG9zc28gYWJyaXIgJXMgcGFyYSBsZWl0dXJhLWdyYXZh5+NvICglcykuICVzIGZvaSBhYmVydG8gc29tZW50ZS1sZWl0dXJhLiIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjQxMSBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjE0MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZHVyaW5nIHNlZWsgZm9yIHJlYWQgb24gJXMiCittc2dzdHIgIiVzIGR1cmFudGUgcHJvY3VyYSBwYXJhIGxlaXR1cmEgZW0gJXMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzo0NDQgbGlicGFydGVkL2FyY2gvZ251LmM6NDQ5IGxpYnBhcnRlZC9hcmNoL2dudS5jOjU0OAorIzogbGlicGFydGVkL2FyY2gvZ251LmM6Njc2IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTM5MQorIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxNDY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGR1cmluZyByZWFkIG9uICVzIgorbXNnc3RyICIlcyBkdXJhbnRlIGxlaXR1cmEgZW0gJXMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzo0ODAgbGlicGFydGVkL2FyY2gvZ251LmM6NTA5CisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjE1NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2FuJ3Qgd3JpdGUgdG8gJXMsIGJlY2F1c2UgaXQgaXMgb3BlbmVkIHJlYWQtb25seS4iCittc2dzdHIgIk7jbyBwb3NzbyBncmF2YXIgZW0gJXMsIHBvaXMgZWxhIGZvaSBhYmVydGEgY29tbyBzb21lbnRlLWxlaXR1cmEuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6NDk2IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTU3MAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkdXJpbmcgc2VlayBmb3Igd3JpdGUgb24gJXMiCittc2dzdHIgIiVzIGR1cmFudGUgcHJvY3VyYSBwYXJhIGVzY3JpdGEgZW0gJXMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzo1MzMgbGlicGFydGVkL2FyY2gvZ251LmM6NTg1IGxpYnBhcnRlZC9hcmNoL2dudS5jOjYzMAorIzogbGlicGFydGVkL2FyY2gvZ251LmM6NzA3IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTUxNworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxNjEyIGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTY4NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkdXJpbmcgd3JpdGUgb24gJXMiCittc2dzdHIgIiVzIGR1cmFudGUgZXNjcml0YSBlbSAlcyIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo2MyBwYXJ0cHJvYmUvcGFydHByb2JlLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeSBgJXMgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogJXMgW09QVElPTl1cbiIKKyIgIG9yOiAgJXMgREVWSUNFIE1JTk9SXG4iCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo3MAorbXNnaWQgIiIKKyJDbGVhciB1bnVzZWQgc3BhY2Ugb24gYSBGQVQgcGFydGl0aW9uIChhIEdOVSBQYXJ0ZWQgdGVzdGluZyB0b29sKS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjc0Cittc2dpZCAiICAgICAgLS1oZWxwICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdFxuIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6NzUKK21zZ2lkICIgICAgICAtLXZlcnNpb24gIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0XG4iCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo3NyBwYXJ0cHJvYmUvcGFydHByb2JlLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJSZXBvcnQgYnVncyB0byA8JXM+LlxuIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6Mjg1CisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBmZXcgYXJndW1lbnRzIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6MjkwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMiCittc2dzdHIgIk11aXRhcyBw4WdpbmFzIGluduFsaWRhcy4iCisKKyM6IHBhcnRwcm9iZS9wYXJ0cHJvYmUuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFtPUFRJT05dIFtERVZJQ0VdLi4uXG4iCittc2dzdHIgIiIKKworIzogcGFydHByb2JlL3BhcnRwcm9iZS5jOjE0MgorbXNnaWQgIiIKKyJJbmZvcm0gdGhlIE9TIG9mIHBhcnRpdGlvbiB0YWJsZSBjaGFuZ2VzLlxuIgorIlxuIgorIiAgLWQsIC0tbm8tdXBkYXRlICBkb24ndCB1cGRhdGUgdGhlIGtlcm5lbFxuIgorIiAgLXMsIC0tc3VtbWFyeSAgICBwcmludCBhIHN1bW1hcnkgb2YgY29udGVudHNcbiIKKyIgIC1oLCAtLWhlbHAgICAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXRcbiIKKyIgIC12LCAtLXZlcnNpb24gICAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXRcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0cHJvYmUvcGFydHByb2JlLmM6MTUwCittc2dpZCAiIgorIlxuIgorIldpdGggbm8gREVWSUNFLCBwcm9iZSBhbGwgcGFydGl0aW9ucy5cbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gb3BlbiAlcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6MTE0CisjLCBmdXp6eQorbXNnaWQgIlVuYWJsZSB0byBwcm9iZSBzdG9yZS4iCittc2dzdHIgIkltcG9zc+12ZWwgYWxpbmhhciBhIHBhcnRp5+NvLiIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6MzUyCisjLCBmdXp6eQorbXNnaWQgIiIKKyJUaGUgcGFydGl0aW9uIHRhYmxlIGNhbm5vdCBiZSByZS1yZWFkLiAgVGhpcyBtZWFucyB5b3UgbmVlZCB0byByZWJvb3QgYmVmb3JlICIKKyJtb3VudGluZyBhbnkgbW9kaWZpZWQgcGFydGl0aW9ucy4gIFlvdSBhbHNvIG5lZWQgdG8gcmVpbnN0YWxsIHlvdXIgYm9vdCAiCisibG9hZGVyIGJlZm9yZSB5b3UgcmVib290ICh3aGljaCBtYXkgcmVxdWlyZSBtb3VudGluZyBtb2RpZmllZCBwYXJ0aXRpb25zKS4gICIKKyJJdCBpcyBpbXBvc3NpYmxlIGRvIGJvdGggdGhpbmdzISAgU28geW91J2xsIG5lZWQgdG8gYm9vdCBvZmYgYSByZXNjdWUgZGlzaywgIgorImFuZCByZWluc3RhbGwgeW91ciBib290IGxvYWRlciBmcm9tIHRoZSByZXNjdWUgZGlzay4gIFJlYWQgc2VjdGlvbiA0IG9mIHRoZSAiCisiUGFydGVkIFVzZXIgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCittc2dzdHIgIiIKKyJPIGtlcm5lbCBu428gcPRkZSByZWxlciBzdWEgdGFiZWxhIGRlIHBhcnRp5/VlcywgZW50428gdm9j6iBwcmVjaXNhICIKKyJyZWluaWNpYXIgYW50ZXMgZGUgbW9udGFyIHF1YWxxdWVyIHBhcnRp5+NvIG1vZGlmaWNhZGEuIFZvY2UgcG9kZSB0YW1i6W0gIgorInByZWNpc2FyIHJlaW5zdGFsYXIgc2V1IGdlcmVuY2lhZG9yIGRlIGJvb3QgYW50ZXMgZGUgcmVpbmljaWFsaXphciAobyBxdWUgIgorInBvZGUgcmVxdWVyZXIgYSBtb250YWdlbSBkYXMgcGFydGnn9WVzIG1vZGlmaWNhZGFzKS4gySBpbXBvc3PtdmVsIGZhemVyIGFzICIKKyJkdWFzIGNvaXNhcyEgRW50428gdm9j6iBpcuEgcHJlY2lzYXIgaW5pY2lhbGl6YXIgcG9yIHVtIGRpc2NvIGRlIHJlc2dhdGUsIGUgIgorInJlaW5zdGFsYXIgc2V1IGdlcmVuY2lhZG9yIGRlIGJvb3QgZGVzZGUgZXN0ZSBkaXNjby4gTGVpYSBhIHNl5+NvIDQgZGEgIgorImRvY3VtZW50YefjbyBkbyB1c3XhcmlvIGRvIFBhcnRlZCBwYXJhIG1haXMgaW5mb3JtYef1ZXMuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzozNjkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgcGFydGl0aW9uIHRhYmxlIG9uICVzIGNhbm5vdCBiZSByZS1yZWFkICglcykuICBUaGlzIG1lYW5zIHRoZSBIdXJkIGtub3dzICIKKyJub3RoaW5nIGFib3V0IGFueSBtb2RpZmljYXRpb25zIHlvdSBtYWRlLiAgWW91IHNob3VsZCByZWJvb3QgeW91ciBjb21wdXRlciAiCisiYmVmb3JlIGRvaW5nIGFueXRoaW5nIHdpdGggJXMuIgorbXNnc3RyICIiCisiTyBrZXJuZWwgbuNvIGNvbnNlZ3VpdSByZWxlciBhIHRhYmVsYSBkZSBwYXJ0aef1ZXMgZGUgJXMgKCVzKS4gSXN0byAiCisic2lnbmlmaWNhIHF1ZSBvIExpbnV4IG7jbyBzYWJlIG5hZGEgc29icmUgYXMgbW9kaWZpY2Hn9WVzIHF1ZSB2b2PqIGZlei4gVm9j6iAiCisiZGV2ZSByZWluaWNpYWxpemFyIHNldSBjb21wdXRhZG9yIGFudGVzIGRlIGZhemVyIHF1YWxxdWVyIHVzbyBkZSAlcy4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjM4MCBwYXJ0ZWQvcGFydGVkLmM6MjQ0MworbXNnaWQgIiIKKyJZb3Ugc2hvdWxkIHJlaW5zdGFsbCB5b3VyIGJvb3QgbG9hZGVyIGJlZm9yZSByZWJvb3RpbmcuICBSZWFkIHNlY3Rpb24gNCBvZiAiCisidGhlIFBhcnRlZCBVc2VyIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorbXNnc3RyICIiCisiVm9j6iBkZXZlIHJlaW5zdGFsYXIgc2V1IGdlcmVuY2lhZG9yIGRlIGJvb3QgYW50ZXMgZGUgcmVpbmljaWFsaXphci4gTGVpYSBhICIKKyJzZefjbyA0IGRhIGRvY3VtZW50YefjbyBkbyB1c3XhcmlvIGRvIFBhcnRlZCBwYXJhIG1haXMgaW5mb3JtYef1ZXMuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo3NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdHJ5aW5nIHRvIHN5bmMgJXMgdG8gZGlzayIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjQwOAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc3RhdCBkZXZpY2UgJXMgLSAlcy4iCittc2dzdHIgIk7jbyBmb2kgcG9zc+12ZWwgb2J0ZXIgc3RhdHVzIGRvIGRpc3Bvc2l0aXZvICVzIC0gJXMuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjUyMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGRldGVybWluZSBzZWN0b3Igc2l6ZSBmb3IgJXM6ICVzLlxuIgorIlVzaW5nIHRoZSBkZWZhdWx0IHNlY3RvciBzaXplICglbGxkKS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo1MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkRldmljZSAlcyBoYXMgYSBsb2dpY2FsIHNlY3RvciBzaXplIG9mICVsbGQuICBOb3QgYWxsIHBhcnRzIG9mIEdOVSBQYXJ0ZWQgIgorInN1cHBvcnQgdGhpcyBhdCB0aGUgbW9tZW50LCBhbmQgdGhlIHdvcmtpbmcgY29kZSBpcyBISUdITFkgRVhQRVJJTUVOVEFMLlxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6NTc5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZGV0ZXJtaW5lIHRoZSBzaXplIG9mICVzICglcykuIgorbXNnc3RyICJJbXBvc3PtdmVsIGRldGVybWluYXIgdGFtYW5obyBkZSAlcyAoJXMpIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjY2OAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZ2V0IGlkZW50aXR5IG9mIGRldmljZSAlcyAtICVzIgorbXNnc3RyICJO428gZm9pIHBvc3PtdmVsIG9idGVyIGEgaWRlbnRpZmljYefjbyBkbyBkaXNwb3NpdGl2byAlcyAtICVzIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjY3NworbXNnaWQgIkdlbmVyaWMgSURFIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6Njk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJEZXZpY2UgJXMgaGFzIG11bHRpcGxlICglZCkgbG9naWNhbCBzZWN0b3JzIHBlciBwaHlzaWNhbCBzZWN0b3IuXG4iCisiR05VIFBhcnRlZCBzdXBwb3J0cyB0aGlzIEVYUEVSSU1FTlRBTExZIGZvciBzb21lIHNwZWNpYWwgZGlzayBsYWJlbC9maWxlICIKKyJzeXN0ZW0gY29tYmluYXRpb25zLCBlLmcuIEdQVCBhbmQgZXh0Mi8zLlxuIgorIlBsZWFzZSBjb25zdWx0IHRoZSB3ZWIgc2l0ZSBmb3IgdXAtdG8tZGF0ZSBpbmZvcm1hdGlvbi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo4NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgaW5pdGlhbGlzaW5nIFNDU0kgZGV2aWNlICVzIC0gJXMiCittc2dzdHIgIkVycm8gaW5pY2lhbGl6YW5kbyBkaXNwb3NpdGl2byBTQ1NJICVzIC0gJXMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6OTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZGV2aWNlICVzIGhhcyB6ZXJvIGxlbmd0aCwgYW5kIGNhbid0IHBvc3NpYmx5IHN0b3JlIGEgZmlsZSBzeXN0ZW0gb3IgIgorInBhcnRpdGlvbiB0YWJsZS4gIFBlcmhhcHMgeW91IHNlbGVjdGVkIHRoZSB3cm9uZyBkZXZpY2U/IgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTAzMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlVuYWJsZSB0byBkZXRlcm1pbmUgZ2VvbWV0cnkgb2YgZmlsZS9kZXZpY2UgJXMuICBZb3Ugc2hvdWxkIG5vdCB1c2UgUGFydGVkICIKKyJ1bmxlc3MgeW91IFJFQUxMWSBrbm93IHdoYXQgeW91J3JlIGRvaW5nISIKK21zZ3N0ciAiIgorIkltcG9zc+12ZWwgZGV0ZXJtaW5hciBhIGdlb21ldHJpYSBkbyBhcnF1aXZvL2Rpc3Bvc2l0aXZvLiBWb2PqIG7jbyBkZXZlcmlhICIKKyJ1dGlsaXphciBvIFBhcnRlZCBhIG7jbyBzZXIgcXVlIHZvY+ogUkVBTE1FTlRFIHNhaWJhIG8gcXVlIGVzdOEgZmF6ZW5kbyEiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTExMAorbXNnaWQgIkRBQzk2MCBSQUlEIGNvbnRyb2xsZXIiCittc2dzdHIgIkNvbnRyb2xhZG9yIFJBSUQgREFDOTYwIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExMTUKK21zZ2lkICJQcm9taXNlIFNYOCBTQVRBIERldmljZSIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExMjAKK21zZ2lkICJJQk0gUzM5MCBEQVNEIGRyaXZlIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTEyNQorbXNnaWQgIklCTSBpU2VyaWVzIFZpcnR1YWwgREFTRCIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExMzAKK21zZ2lkICJDb21wYXEgU21hcnQgQXJyYXkiCittc2dzdHIgIkNvbXBhcSBTbWFydCBBcnJheSIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTM1Cittc2dpZCAiQVRBUkFJRCBDb250cm9sbGVyIgorbXNnc3RyICJDb250cm9sYWRvciBBVEFSQUlEIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExNDAKK21zZ2lkICJJMk8gQ29udHJvbGxlciIKK21zZ3N0ciAiQ29udHJvbGFkb3IgSTJPIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExNDUKK21zZ2lkICJVc2VyLU1vZGUgTGludXggVUJEIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTE1NgorbXNnaWQgIkxpbnV4IGRldmljZS1tYXBwZXIiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTYyCittc2dpZCAiVW5rbm93biIKK21zZ3N0ciAiRGVzY29uaGVjaWRvIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExNjkKK21zZ2lkICJwZWRfZGV2aWNlX25ldygpICBVbnN1cHBvcnRlZCBkZXZpY2UgdHlwZSIKK21zZ3N0ciAicGVkX2RldmljZV9uZXcoKSAgVGlwbyBkZSBkaXNwb3NpdGl2byBu428gc3Vwb3J0YWRvIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjIwODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkVycm9yIGluZm9ybWluZyB0aGUga2VybmVsIGFib3V0IG1vZGlmaWNhdGlvbnMgdG8gcGFydGl0aW9uICVzIC0tICVzLiAgVGhpcyAiCisibWVhbnMgTGludXggd29uJ3Qga25vdyBhYm91dCBhbnkgY2hhbmdlcyB5b3UgbWFkZSB0byAlcyB1bnRpbCB5b3UgcmVib290IC0tICIKKyJzbyB5b3Ugc2hvdWxkbid0IG1vdW50IGl0IG9yIHVzZSBpdCBpbiBhbnkgd2F5IGJlZm9yZSByZWJvb3RpbmcuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MjI2MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorInBhcnRlZCB3YXMgdW5hYmxlIHRvIHJlLXJlYWQgdGhlIHBhcnRpdGlvbiB0YWJsZSBvbiAlcyAoJXMpLiAgVGhpcyBtZWFucyAiCisiTGludXggd29uJ3Qga25vdyBhbnl0aGluZyBhYm91dCB0aGUgbW9kaWZpY2F0aW9ucyB5b3UgbWFkZS4gIgorbXNnc3RyICIiCisiTyBrZXJuZWwgbuNvIGNvbnNlZ3VpdSByZWxlciBhIHRhYmVsYSBkZSBwYXJ0aef1ZXMgZGUgJXMgKCVzKS4gSXN0byAiCisic2lnbmlmaWNhIHF1ZSBvIExpbnV4IG7jbyBzYWJlIG5hZGEgc29icmUgYXMgbW9kaWZpY2Hn9WVzIHF1ZSB2b2PqIGZlei4gVm9j6iAiCisiZGV2ZSByZWluaWNpYWxpemFyIHNldSBjb21wdXRhZG9yIGFudGVzIGRlIGZhemVyIHF1YWxxdWVyIHVzbyBkZSAlcy4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MjM2OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBrZXJuZWwgd2FzIHVuYWJsZSB0byByZS1yZWFkIHRoZSBwYXJ0aXRpb24gdGFibGUgb24gJXMgKCVzKS4gIFRoaXMgbWVhbnMgIgorIkxpbnV4IHdvbid0IGtub3cgYW55dGhpbmcgYWJvdXQgdGhlIG1vZGlmaWNhdGlvbnMgeW91IG1hZGUgdW50aWwgeW91ICIKKyJyZWJvb3QuICBZb3Ugc2hvdWxkIHJlYm9vdCB5b3VyIGNvbXB1dGVyIGJlZm9yZSBkb2luZyBhbnl0aGluZyB3aXRoICVzLiIKK21zZ3N0ciAiIgorIk8ga2VybmVsIG7jbyBjb25zZWd1aXUgcmVsZXIgYSB0YWJlbGEgZGUgcGFydGnn9WVzIGRlICVzICglcykuIElzdG8gIgorInNpZ25pZmljYSBxdWUgbyBMaW51eCBu428gc2FiZSBuYWRhIHNvYnJlIGFzIG1vZGlmaWNh5/VlcyBxdWUgdm9j6iBmZXouIFZvY+ogIgorImRldmUgcmVpbmljaWFsaXphciBzZXUgY29tcHV0YWRvciBhbnRlcyBkZSBmYXplciBxdWFscXVlciB1c28gZGUgJXMuIgorCisjOiBsaWJwYXJ0ZWQvY3MvZ2VvbS5jOjE2MgorbXNnaWQgIkNhbid0IGhhdmUgdGhlIGVuZCBiZWZvcmUgdGhlIHN0YXJ0ISIKK21zZ3N0ciAiTuNvIHBvZGUgdGVyIGZpbSBkYSBwYXJ0aefjbyBhbnRlcyBkbyBpbu1jaW8uIgorCisjOiBsaWJwYXJ0ZWQvY3MvZ2VvbS5jOjE2OQorbXNnaWQgIkNhbid0IGhhdmUgYSBwYXJ0aXRpb24gb3V0c2lkZSB0aGUgZGlzayEiCittc2dzdHIgIk7jbyBwb2RlIHRlciB1bWEgcGFydGnn428gcGFyYSBmb3JhIGRvIGRpc2NvIS4iCisKKyM6IGxpYnBhcnRlZC9jcy9nZW9tLmM6MzY2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJBdHRlbXB0IHRvIHdyaXRlIHNlY3RvcnMgJWxkLSVsZCBvdXRzaWRlIG9mIHBhcnRpdGlvbiBvbiAlcy4iCittc2dzdHIgIlRlbnRhdGl2YSBkZSBlc2NyZXZlciBzZXRvcmVzICVsZC0lbGQgZm9yYSBkYSBwYXJ0aefjbyBlbSAlcyIKKworIzogbGlicGFydGVkL2NzL2dlb20uYzo0MDYgbGlicGFydGVkL2ZzL2xpbnV4X3N3YXAvbGludXhfc3dhcC5jOjQ3NQorbXNnaWQgImNoZWNraW5nIGZvciBiYWQgYmxvY2tzIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9kZWJ1Zy5jOjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWNrdHJhY2UgaGFzICVkIGNhbGxzIG9uIHN0YWNrOlxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9kZWJ1Zy5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJBc3NlcnRpb24gKCVzKSBhdCAlczolZCBpbiBmdW5jdGlvbiAlcygpIGZhaWxlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIG9wZW4gJXMgLSB1bnJlY29nbmlzZWQgZGlzayBsYWJlbC4iCittc2dzdHIgIkltcG9zc+12ZWwgYWJyaXIgJXMgLSBy83R1bG8gZGUgZGlzY28gZGVzY29uaGVjaWRvLiIKKworIzogbGlicGFydGVkL2Rpc2suYzo0NzEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGlzIGxpYnBhcnRlZCBkb2Vzbid0IGhhdmUgd3JpdGUgc3VwcG9ydCBmb3IgJXMuICBQZXJoYXBzIGl0IHdhcyBjb21waWxlZCAiCisicmVhZC1vbmx5LiIKK21zZ3N0ciAiTuNvIHBvc3NvIGdyYXZhciBlbSAlcywgcG9pcyBlbGEgZm9pIGFiZXJ0YSBjb21vIHNvbWVudGUtbGVpdHVyYS4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6NTk4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJQYXJ0aXRpb24gJWQgaXMgJXMsIGJ1dCB0aGUgZmlsZSBzeXN0ZW0gaXMgJXMuIgorbXNnc3RyICJBIHBhcnRp5+NvIOkgbXVpdG8gcGVxdWVuYSBwYXJhIHVtIHNpc3RlbWEgZGUgYXJxdWl2b3MgRkFUIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjEwNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZGlzayBsYWJlbHMgZG8gbm90IHN1cHBvcnQgZXh0ZW5kZWQgcGFydGl0aW9ucy4iCittc2dzdHIgIlLzdHVsb3MgZGUgZGlzY28gJXMgbuNvIHN1cG9ydGFtIHBhcnRp5/VlcyBleHRlbmRpZGFzLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGRpc2sgbGFiZWxzIGRvbid0IHN1cHBvcnQgbG9naWNhbCBvciBleHRlbmRlZCBwYXJ0aXRpb25zLiIKK21zZ3N0ciAiUvN0dWxvcyBkZSBkaXNjbyAlcyBu428gc3Vwb3J0YW0gcGFydGnn9WVzIGzzZ2ljYXMgb3UgZXh0ZW5kaWRhcy4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTY0NworIywgZnV6enkKK21zZ2lkICJUb28gbWFueSBwcmltYXJ5IHBhcnRpdGlvbnMuIgorbXNnc3RyICJNdWl0YXMgcOFnaW5hcyBpbnbhbGlkYXMuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE2NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbid0IGFkZCBhIGxvZ2ljYWwgcGFydGl0aW9uIHRvICVzLCBiZWNhdXNlIHRoZXJlIGlzIG5vIGV4dGVuZGVkIHBhcnRpdGlvbi4iCittc2dzdHIgIiIKKyJO428gcG9zc28gYWRpY2lvbmFyIHVtYSBwYXJ0aefjbyBs82dpY2EgZW0gJXMsIHBvaXMgbuNvIGjhIHVtYSBwYXJ0aefjbyAiCisiZXh0ZW5kaWRhLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNjgwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJDYW4ndCBoYXZlIG1vcmUgdGhhbiBvbmUgZXh0ZW5kZWQgcGFydGl0aW9uIG9uICVzLiIKK21zZ3N0ciAiTuNvIHNlIHBvZGUgaGF2ZXIgbWFpcyBkZSB1bWEgcGFydGnn428gZXh0ZW5kaWRhIGVtICVzIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE2OTAKKyMsIGZ1enp5Cittc2dpZCAiQ2FuJ3QgaGF2ZSBsb2dpY2FsIHBhcnRpdGlvbnMgb3V0c2lkZSBvZiB0aGUgZXh0ZW5kZWQgcGFydGl0aW9uLiIKK21zZ3N0ciAiIgorIk7jbyBwb3NzbyBhZGljaW9uYXIgdW1hIHBhcnRp5+NvIGzzZ2ljYSBmb3JhIGRhIHBhcnRp5+NvIGV4dGVuZGlkYSBlbSAlcy4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTcxNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ2FuJ3QgaGF2ZSBhIGxvZ2ljYWwgcGFydGl0aW9uIG91dHNpZGUgb2YgdGhlIGV4dGVuZGVkIHBhcnRpdGlvbiBvbiAlcy4iCittc2dzdHIgIiIKKyJO428gcG9zc28gYWRpY2lvbmFyIHVtYSBwYXJ0aefjbyBs82dpY2EgZm9yYSBkYSBwYXJ0aefjbyBleHRlbmRpZGEgZW0gJXMuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE3MjUgbGlicGFydGVkL2Rpc2suYzoxNzc5IGxpYnBhcnRlZC9kaXNrLmM6MTk0NQorIywgZnV6enkKK21zZ2lkICJDYW4ndCBoYXZlIG92ZXJsYXBwaW5nIHBhcnRpdGlvbnMuIgorbXNnc3RyICJO428gcG9zc28gY29waWFyIGVtIHVtYSBwYXJ0aefjbyBzb2JyZXBvc3RhLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNzMzCisjLCBmdXp6eQorbXNnaWQgIkNhbid0IGhhdmUgYSBwcmltYXJ5IHBhcnRpdGlvbiBpbnNpZGUgYW4gZXh0ZW5kZWQgcGFydGl0aW9uLiIKK21zZ3N0ciAiTuNvIHBvc3NvIGFkaWNpb25hciB1bWEgcGFydGnn428gcHJpbeFyaWEgZGVudHJvIGRlIHVtYSBleHRlbmRpZGEuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNDAKK21zZ2lkICJtZXRhZGF0YSIKK21zZ3N0ciAibWV0YWRhZG8iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE0MgorbXNnaWQgImZyZWUiCittc2dzdHIgImxpdnJlIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNDQgcGFydGVkL3VpLmM6MTE2OSBwYXJ0ZWQvdWkuYzoxMTk3Cittc2dpZCAiZXh0ZW5kZWQiCittc2dzdHIgImV4dGVuZGlkYSIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTQ2IHBhcnRlZC91aS5jOjExNzMgcGFydGVkL3VpLmM6MTIwMQorbXNnaWQgImxvZ2ljYWwiCittc2dzdHIgImzzZ2ljYSIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTQ4IHBhcnRlZC91aS5jOjExNjUgcGFydGVkL3VpLmM6MTE5MworbXNnaWQgInByaW1hcnkiCittc2dzdHIgInByaW3hcmlhIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNjQKK21zZ2lkICJib290IgorbXNnc3RyICJib290IgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNjYKK21zZ2lkICJyb290IgorbXNnc3RyICJyb290IgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNjgKK21zZ2lkICJzd2FwIgorbXNnc3RyICJzd2FwIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNzAKK21zZ2lkICJoaWRkZW4iCittc2dzdHIgImVzY29uZGlkYSIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTcyCittc2dpZCAicmFpZCIKK21zZ3N0ciAicmFpZCIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTc0Cittc2dpZCAibHZtIgorbXNnc3RyICJsdm0iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE3NgorbXNnaWQgImxiYSIKK21zZ3N0ciAibGJhIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNzgKK21zZ2lkICJocC1zZXJ2aWNlIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE4MAorbXNnaWQgInBhbG8iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTgyCittc2dpZCAicHJlcCIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxODQKK21zZ2lkICJtc2Z0cmVzIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE5MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBwYXJ0aXRpb24gZmxhZywgJWQuIgorbXNnc3RyICJTaW5hbGl6YWRvciBkZSBwYXJ0aefjbyBkZXNjb25oZWNpZG8sICVkLiIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjc4Cittc2dpZCAiSW5mb3JtYXRpb24iCittc2dzdHIgIkluZm9ybWHn428iCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo3OQorbXNnaWQgIldhcm5pbmciCittc2dzdHIgIkF2aXNvIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODAKK21zZ2lkICJFcnJvciIKK21zZ3N0ciAiRXJybyIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjgxCittc2dpZCAiRmF0YWwiCittc2dzdHIgIkZhdGFsIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODIKK21zZ2lkICJCdWciCittc2dzdHIgIkJ1ZyIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjgzCittc2dpZCAiTm8gSW1wbGVtZW50YXRpb24iCittc2dzdHIgIlNlbSBJbXBsZW1lbnRh5+NvIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODcKK21zZ2lkICJGaXgiCittc2dzdHIgIkFycnVtYXIiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4OAorbXNnaWQgIlllcyIKK21zZ3N0ciAiU2ltIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODkKK21zZ2lkICJObyIKK21zZ3N0ciAiTuNvIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6OTAKK21zZ2lkICJPSyIKK21zZ3N0ciAiT0siCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo5MQorbXNnaWQgIlJldHJ5IgorbXNnc3RyICJSZXBldGlyIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6OTIKK21zZ2lkICJJZ25vcmUiCittc2dzdHIgIklnbm9yYXIiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo5MworbXNnaWQgIkNhbmNlbCIKK21zZ3N0ciAiQ2FuY2VsYXIiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzoxMzMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBIGJ1ZyBoYXMgYmVlbiBkZXRlY3RlZCBpbiBHTlUgUGFydGVkLiAgUmVmZXIgdG8gdGhlIHdlYiBzaXRlIG9mIHBhcnRlZCAiCisiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3BhcnRlZC9wYXJ0ZWQuaHRtbCBmb3IgbW9yZSBpbmZvcm1hdGlvbnMgb2Ygd2hhdCAiCisiY291bGQgYmUgdXNlZnVsIGZvciBidWcgc3VibWl0dGluZyEgIFBsZWFzZSBlbWFpbCBhIGJ1ZyByZXBvcnQgdG8gYnVnLSIKKyJwYXJ0ZWRAZ251Lm9yZyBjb250YWluaW5nIGF0IGxlYXN0IHRoZSB2ZXJzaW9uICglcykgYW5kIHRoZSBmb2xsb3dpbmcgIgorIm1lc3NhZ2U6ICAiCittc2dzdHIgIiIKKyJVbSBidWcgZm9pIGRldGVjdGFkbyBubyBHTlUgcGFydGVkLiBQb3IgZmF2b3IsIGVudmllIHVtIHJlbGF083JpbyBkZSBidWdwYXJhICIKKyJidWctcGFydGVkQGdudS5vcmcgY29udGVuZG8gYSB2ZXJz428gKCVzKSBlIGEgbWVuc2FnZW0gYWJhaXhvOiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzozODQKK21zZ2lkICJDb3VsZCBub3QgZGV0ZWN0IGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiTuNvIGZvaSBwb3Nz7XZlbCBkZXRlY3RhciBvIHNpc3RlbWEgZGUgYXJxdWl2b3MuIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjM5NQorIywgZnV6enkKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gaXMgYmlnZ2VyIHRoYW4gaXRzIHZvbHVtZSEiCittc2dzdHIgIk8gcvN0dWxvIGRlIGRpc2NvIGRlc2NyZXZlIHVtIGRpc2NvIG1haW9yIHF1ZSAlcy4iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NDAzCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnQgZm9yIG9wZW5pbmcgJXMgZmlsZSBzeXN0ZW1zIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICIiCisiTyBzdXBvcnRlIHBhcmEgYWJyaXIgc2lzdGVtYSBkZSBhcnF1aXZvcyAlcyBu428gZm9pIGltcGxlbWVudGFkbyBhaW5kYS4iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnQgZm9yIGNyZWF0aW5nICVzIGZpbGUgc3lzdGVtcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiIgorIk8gc3Vwb3J0ZSBwYXJhIGNyaWFyIHNpc3RlbWEgZGUgYXJxdWl2b3MgJXMgbuNvIGZvaSBpbXBsZW1lbnRhZG8gYWluZGEuIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjUwNQorIywgYy1mb3JtYXQKK21zZ2lkICJTdXBwb3J0IGZvciBjaGVja2luZyAlcyBmaWxlIHN5c3RlbXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIlN1cG9ydGUgcGFyYSBjaGVjYXIgc2lzdGVtYSBkZSBhcnF1aXZvcyBu428gaW1wbGVtZW50YWRvIHBhcmEgJXMuIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjU3MQorbXNnaWQgInJhdyBibG9jayBjb3B5aW5nIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NTgyCisjLCBmdXp6eQorbXNnaWQgImdyb3dpbmcgZmlsZSBzeXN0ZW0iCittc2dzdHIgIlRpcG8gZGUgc2lzdGVtYSBkZSBhcnF1aXZvcyBkZXNjb25oZWNpZG8uIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjYyMgorbXNnaWQgIkNhbid0IGNvcHkgb250byBhbiBvdmVybGFwcGluZyBwYXJ0aXRpb24uIgorbXNnc3RyICJO428gcG9zc28gY29waWFyIGVtIHVtYSBwYXJ0aefjbyBzb2JyZXBvc3RhLiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo2NDQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJEaXJlY3Qgc3VwcG9ydCBmb3IgY29weWluZyBmaWxlIHN5c3RlbXMgaXMgbm90IHlldCBpbXBsZW1lbnRlZCBmb3IgJXMuICAiCisiSG93ZXZlciwgc3VwcG9ydCBmb3IgcmVzaXppbmcgaXMgaW1wbGVtZW50ZWQuICBUaGVyZWZvcmUsIHRoZSBmaWxlIHN5c3RlbSAiCisiY2FuIGJlIGNvcGllZCBpZiB0aGUgbmV3IHBhcnRpdGlvbiBpcyBhdCBsZWFzdCBhcyBiaWcgYXMgdGhlIG9sZCBvbmUuICBTbywgIgorImVpdGhlciBzaHJpbmsgdGhlIHBhcnRpdGlvbiB5b3UgYXJlIHRyeWluZyB0byBjb3B5LCBvciBjb3B5IHRvIGEgYmlnZ2VyICIKKyJwYXJ0aXRpb24uIgorbXNnc3RyICIiCisiTyBzdXBvcnRlIGRpcmV0byBwYXJhIGPzcGlhIGRlIHNpc3RlbWFzIGRlIGFycXVpdm9zIG7jbyBlc3ThIGltcGxlbWVudGFkbyAiCisicGFyYSAlcy4gRW50cmV0YW50bywgbyBzdXBvcnRlIHBhcmEgcmVkaW1lbnNpb25hbWVudG8gZXN04S4gUG9ydGFudG8sIG8gIgorInNpc3RlbWEgZGUgYXJxdWl2b3MgcG9kZSBzZXIgY29waWFkbyBzZSBhIG5vdmEgcGFydGnn428gZm9yIHBlbG8gbWVub3MgdONvICIKKyJncmFuZGUgcXVhbnRvIGEgYW50aWdhLiBFbnTjbywgZGltaW51YSBhIHBhcnRp5+NvIHF1ZSB2b2PqIGVzdOEgdGVudGFuZG8gIgorImNvcGlhciwgb3UgY29waWUgcGFyYSB1bWEgcGFydGnn428gbWFpb3IuIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjY1OAorIywgYy1mb3JtYXQKK21zZ2lkICJTdXBwb3J0IGZvciBjb3B5aW5nICVzIGZpbGUgc3lzdGVtcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiU3Vwb3J0ZSBwYXJhIGNvcGlhciBzaXN0ZW1hIGRlIGFycXVpdm9zIG7jbyBpbXBsZW1lbnRhZG8gcGFyYSAlcy4iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6Njk2CisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnQgZm9yIHJlc2l6aW5nICVzIGZpbGUgc3lzdGVtcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiIgorIlN1cG9ydGUgcGFyYSByZWRpbWVuc2lvbmFyIHNpc3RlbWEgZGUgYXJxdWl2b3MgbuNvIGltcGxlbWVudGFkbyBwYXJhICVzLiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6MzE1Cittc2dpZCAiY3JlYXRpbmciCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDAyCisjLCBmdXp6eQorbXNnaWQgIlRoZSBmaWxlIHN5c3RlbSBpcyBpbiBhbiBpbnZhbGlkIHN0YXRlLiAgUGVyaGFwcyBpdCBpcyBtb3VudGVkPyIKK21zZ3N0ciAiTyBy83R1bG8gZGUgZGlzY28gZGVzY3JldmUgdW0gZGlzY28gbWFpb3IgcXVlICVzLiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDEwCittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIGlzIGluIG9sZCAodW5yZXNpemVhYmxlKSBmb3JtYXQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQxNgorbXNnaWQgIkludmFsaWQgZnJlZSBibG9ja3MgY291bnQuICBSdW4gcmVpc2VyZnNjayAtLWNoZWNrIGZpcnN0LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0MzEKKyMsIGZ1enp5Cittc2dpZCAiY2hlY2tpbmciCittc2dzdHIgImNoZWNrIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0MzcKK21zZ2lkICJSZWlzZXJmcyB0cmVlIHNlZW1zIHRvIGJlIGNvcnJ1cHRlZC4gIFJ1biByZWlzZXJmc2NrIC0tY2hlY2sgZmlyc3QuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQ0OQorIywgZnV6enkKK21zZ2lkICIiCisiVGhlIHJlaXNlcmZzIGZpbGUgc3lzdGVtIHBhc3NlZCBhIGJhc2ljIGNoZWNrLiAgRm9yIGEgbW9yZSBjb21wcmVoZW5zaXZlICIKKyJjaGVjaywgcnVuIHJlaXNlcmZzY2sgLS1jaGVjay4iCittc2dzdHIgIiIKKyJPIHNpc3RlbWEgZGUgYXJxdWl2b3MgZXh0MiBwYXNzb3UgcGVsbyB0ZXN0ZSBi4XNpY28uIFBhcmEgdW0gdGVzdGUgbWFpcyAiCisiY29tcHJlZW5zaXZvLCB1dGlsaXplIG8gcHJvZ3JhbWEgZTJmc2NrLiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDc0CisjLCBmdXp6eQorbXNnaWQgIlNvcnJ5LCBjYW4ndCBtb3ZlIHRoZSBzdGFydCBvZiByZWlzZXJmcyBwYXJ0aXRpb25zIHlldC4iCittc2dzdHIgIkRlc2N1bHBlLCBu428gcG9zc28gbW92ZXIgbyBpbu1jaW8gZGUgcGFydGnn9WVzIGV4dDIgYWluZGEhIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0OTAKK21zZ2lkICJDb3VsZG4ndCByZW9wZW4gZGV2aWNlIGFic3RyYWN0aW9uIGxheWVyIGZvciByZWFkL3dyaXRlLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo1MDggbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo1NTIKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MjUwIGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NjI5CisjLCBmdXp6eQorbXNnaWQgInNocmlua2luZyIKK21zZ3N0ciAiQXZpc28iCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjUyMAorIywgZnV6enkKK21zZ2lkICJleHBhbmRpbmciCittc2dzdHIgIkF2aXNvIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo1OTIKK21zZ2lkICJDb3VsZG4ndCBjcmVhdGUgcmVpc2VyZnMgZGV2aWNlIGFic3RyYWN0aW9uIGhhbmRsZXIuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjYwNgorIywgYy1mb3JtYXQKK21zZ2lkICJEZXZpY2UgaXMgdG9vIHNtYWxsIGZvciAlbHUgYmxvY2tzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo2MTUKK21zZ2lkICJjb3B5aW5nIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjY4MgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCByZXNvbHZlIHN5bWJvbCAlcy4gIEVycm9yOiAlcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NzA0Cittc2dpZCAiR05VIFBhcnRlZCBmb3VuZCBhbiBpbnZhbGlkIGxpYnJlaXNlcmZzIGxpYnJhcnkuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjcxNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiR05VIFBhcnRlZCBoYXMgZGV0ZWN0ZWQgbGlicmVpc2VyZnMgaW50ZXJmYWNlIHZlcnNpb24gbWlzbWF0Y2guICBGb3VuZCAlZC0lIgorImQsIHJlcXVpcmVkICVkLiBSZWlzZXJGUyBzdXBwb3J0IHdpbGwgYmUgZGlzYWJsZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYWl4LmM6MTM3CisjLCBmdXp6eQorbXNnaWQgIlN1cHBvcnQgZm9yIHJlYWRpbmcgQUlYIGRpc2sgbGFiZWxzIGlzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICIiCisiTyBzdXBvcnRlIHBhcmEgY3JpYXIgc2lzdGVtYSBkZSBhcnF1aXZvcyAlcyBu428gZm9pIGltcGxlbWVudGFkbyBhaW5kYS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYWl4LmM6MTQ4CisjLCBmdXp6eQorbXNnaWQgIlN1cHBvcnQgZm9yIHdyaXRpbmcgQUlYIGRpc2sgbGFiZWxzIGlzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICIiCisiTyBzdXBvcnRlIHBhcmEgY3JpYXIgc2lzdGVtYSBkZSBhcnF1aXZvcyAlcyBu428gZm9pIGltcGxlbWVudGFkbyBhaW5kYS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYWl4LmM6MTYxCisjLCBmdXp6eQorbXNnaWQgIiIKKyJTdXBwb3J0IGZvciBhZGRpbmcgcGFydGl0aW9ucyB0byBBSVggZGlzayBsYWJlbHMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiIKKyJPIHN1cG9ydGUgcGFyYSBjcmlhciBzaXN0ZW1hIGRlIGFycXVpdm9zICVzIG7jbyBmb2kgaW1wbGVtZW50YWRvIGFpbmRhLiIKKworIzogbGlicGFydGVkL2xhYmVscy9haXguYzoxNzEKKyMsIGZ1enp5Cittc2dpZCAiIgorIlN1cHBvcnQgZm9yIGR1cGxpY2F0aW5nIHBhcnRpdGlvbnMgaW4gQUlYIGRpc2sgbGFiZWxzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICIiCisiTyBzdXBvcnRlIHBhcmEgY3JpYXIgc2lzdGVtYSBkZSBhcnF1aXZvcyAlcyBu428gZm9pIGltcGxlbWVudGFkbyBhaW5kYS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYWl4LmM6MTg5CisjLCBmdXp6eQorbXNnaWQgIiIKKyJTdXBwb3J0IGZvciBzZXR0aW5nIHN5c3RlbSB0eXBlIG9mIHBhcnRpdGlvbnMgaW4gQUlYIGRpc2sgbGFiZWxzIGlzIG5vdCAiCisiaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiIgorIk8gc3Vwb3J0ZSBwYXJhIGNyaWFyIHNpc3RlbWEgZGUgYXJxdWl2b3MgJXMgbuNvIGZvaSBpbXBsZW1lbnRhZG8gYWluZGEuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2FpeC5jOjE5OQorIywgZnV6enkKK21zZ2lkICJTdXBwb3J0IGZvciBzZXR0aW5nIGZsYWdzIGluIEFJWCBkaXNrIGxhYmVscyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiIgorIk8gc3Vwb3J0ZSBwYXJhIGNyaWFyIHNpc3RlbWEgZGUgYXJxdWl2b3MgJXMgbuNvIGZvaSBpbXBsZW1lbnRhZG8gYWluZGEuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2JzZC5jOjUwMSBsaWJwYXJ0ZWQvbGFiZWxzL2Rhc2QuYzo3NTUKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZG9zLmM6MTk3NCBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjc3MAorIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzoxNDQ4IGxpYnBhcnRlZC9sYWJlbHMvbG9vcC5jOjI0OAorIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoxNDA4IGxpYnBhcnRlZC9sYWJlbHMvcGM5OC5jOjc1OQorIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzoxMDQxIGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6NzA1CisjLCBmdXp6eQorbXNnaWQgIlVuYWJsZSB0byBzYXRpc2Z5IGFsbCBjb25zdHJhaW50cyBvbiB0aGUgcGFydGl0aW9uLiIKK21zZ3N0ciAiSW1wb3Nz7XZlbCBhbGluaGFyIGEgcGFydGnn428uIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2JzZC5jOjUyNgorIywgZnV6enkKK21zZ2lkICJVbmFibGUgdG8gYWxsb2NhdGUgYSBic2QgZGlza2xhYmVsIHNsb3QuIgorbXNnc3RyICJJbXBvc3PtdmVsIGFsb2NhciB1bSBzbG90IGRlIHLzdHVsbyBkZSBkaXNjbyBic2QiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZGFzZC5jOjE2NgorIywgZnV6enkKK21zZ2lkICJVbmFibGUgdG8gZGV0ZXJtaW5lIHRoZSBibG9jayBzaXplIG9mIHRoaXMgZGFzZCIKK21zZ3N0ciAiSW1wb3Nz7XZlbCBkZXRlcm1pbmFyIHRhbWFuaG8gZGUgJXMgKCVzKSIKKworIzogbGlicGFydGVkL2xhYmVscy9kYXNkLmM6NzgxCisjLCBmdXp6eQorbXNnaWQgIlVuYWJsZSB0byBhbGxvY2F0ZSBhIGRhc2QgZGlza2xhYmVsIHNsb3QiCittc2dzdHIgIkltcG9zc+12ZWwgYWxvY2FyIHVtIHNsb3QgZGUgcvN0dWxvIGRlIGRpc2NvIGJzZCIKKworIzogbGlicGFydGVkL2xhYmVscy9kb3MuYzo4MjcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcGFydGl0aW9uIHRhYmxlIG9uICVzIC0tIHdyb25nIHNpZ25hdHVyZSAleC4iCittc2dzdHIgIlRhYmVsYSBkZSBwYXJ0aef1ZXMgaW524WxpZGEgZW0gJXMgLSBhc3NpbmF0dXJhIGVycmFkYSAleCIKKworIzogbGlicGFydGVkL2xhYmVscy9kb3MuYzo4NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBwYXJ0aXRpb24gdGFibGUgLSByZWN1cnNpdmUgcGFydGl0aW9uIG9uICVzLiIKK21zZ3N0ciAiVGFiZWxhIGRlIHBhcnRp5/VlcyBpbnbhbGlkYSAtIHBhcnRp5+NvIHJlY3Vyc2l2YSBlbSAlcy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZG9zLmM6MTMxOAorIywgZnV6enkKK21zZ2lkICJFeHRlbmRlZCBwYXJ0aXRpb25zIGNhbm5vdCBiZSBoaWRkZW4gb24gbXNkb3MgZGlzayBsYWJlbHMuIgorbXNnc3RyICJQYXJ0aef1ZXMgZXh0MiBu428gcG9kZW0gc2VyIGVzY29uZGlkYXMgZW0gcvN0dWxvcyBkZSBkaXNjbyBtc2Rvcy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZG9zLmM6MTk1OAorbXNnaWQgIlBhcnRlZCBjYW4ndCByZXNpemUgcGFydGl0aW9ucyBtYW5hZ2VkIGJ5IFdpbmRvd3MgRHluYW1pYyBEaXNrLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjE5MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIG5vIGV4dGVuZGVkIHBhcnRpdGlvbiAodm9sdW1lIGhlYWRlciBwYXJ0aXRpb24pLiIKK21zZ3N0ciAiIgorIk7jbyBwb3NzbyByZWRpbWVuc2lvbmFyIHVtYSBwYXJ0aefjbyBleHRlbmRpZGEsIHNlbSBleGNsdWlyIHVtYSBwYXJ0aefjbyAiCisibPNnaWNhLiIKKworIzogbGlicGFydGVkL2xhYmVscy9kdmguYzozMTMKK21zZ2lkICJDaGVja3N1bSBpcyB3cm9uZywgaW5kaWNhdGluZyB0aGUgcGFydGl0aW9uIHRhYmxlIGlzIGNvcnJ1cHQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6NjE2CisjLCBmdXp6eQorbXNnaWQgIk9ubHkgcHJpbWFyeSBwYXJ0aXRpb25zIGNhbiBiZSByb290IHBhcnRpdGlvbnMuIgorbXNnc3RyICJO428gcG9zc28gYWRpY2lvbmFyIHVtYSBwYXJ0aefjbyBwcmlt4XJpYSBkZW50cm8gZGUgdW1hIGV4dGVuZGlkYS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6NjMwCisjLCBmdXp6eQorbXNnaWQgIk9ubHkgcHJpbWFyeSBwYXJ0aXRpb25zIGNhbiBiZSBzd2FwIHBhcnRpdGlvbnMuIgorbXNnc3RyICJO428gcG9zc28gYWRpY2lvbmFyIHVtYSBwYXJ0aefjbyBwcmlt4XJpYSBkZW50cm8gZGUgdW1hIGV4dGVuZGlkYS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6NjQ0Cittc2dpZCAiT25seSBsb2dpY2FsIHBhcnRpdGlvbnMgY2FuIGJlIGEgYm9vdCBmaWxlLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjcyMQorbXNnaWQgIk9ubHkgbG9naWNhbCBwYXJ0aXRpb25zIChib290IGZpbGVzKSBoYXZlIGEgbmFtZS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9kdmguYzo4MTIKKyMsIGZ1enp5Cittc2dpZCAiVG9vIG1hbnkgcHJpbWFyeSBwYXJ0aXRpb25zIgorbXNnc3RyICJNdWl0YXMgcOFnaW5hcyBpbnbhbGlkYXMuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBvcGVuIGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBzZWVrIGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyByZWFkIGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTEzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgd3JpdGUgZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIlcyBkdXJhbnRlIGVzY3JpdGEgZW0gJXMiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIElPQ1RMIGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBBUEkgdmVyc2lvbiBtaXNtYXRjaFxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgVW5zdXBwb3J0ZWQgZGlzayB0eXBlXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBVbnN1cHBvcnRlZCBkaXNrIGZvcm1hdFxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEzMAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIERpc2sgaW4gdXNlXG4iCisiJXNcbiIKK21zZ3N0ciAiJXMgICVzICAlcyIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgQ29uZmlnIGZpbGUgc3ludGF4IGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBWb2x1bWUgbGFiZWwgaXMgY29ycnVwdGVkLlxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjE0MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgYSBkYXRhIHNldCBuYW1lIGlzIGNvcnJ1cHRlZC5cbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHNwYWNlIGFsbG9jYXRpb25cbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIGRldmljZSB2ZXJpZmljYXRpb24gZmFpbGVkXG4iCisiVGhlIHNwZWNpZmllZCBkZXZpY2UgaXMgbm90IGEgdmFsaWQgREFTRCBkZXZpY2VcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBGYXRhbCBlcnJvclxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzo0NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIGNvbnRhaW5zIEdQVCBzaWduYXR1cmVzLCBpbmRpY2F0aW5nIHRoYXQgaXQgaGFzIGEgR1BUIHRhYmxlLiAgSG93ZXZlciwgaXQgIgorImRvZXMgbm90IGhhdmUgYSB2YWxpZCBmYWtlIG1zZG9zIHBhcnRpdGlvbiB0YWJsZSwgYXMgaXQgc2hvdWxkLiAgUGVyaGFwcyBpdCAiCisid2FzIGNvcnJ1cHRlZCAtLSBwb3NzaWJseSBieSBhIHByb2dyYW0gdGhhdCBkb2Vzbid0IHVuZGVyc3RhbmQgR1BUIHBhcnRpdGlvbiAiCisidGFibGVzLiAgT3IgcGVyaGFwcyB5b3UgZGVsZXRlZCB0aGUgR1BUIHRhYmxlLCBhbmQgYXJlIG5vdyB1c2luZyBhbiBtc2RvcyAiCisicGFydGl0aW9uIHRhYmxlLiAgSXMgdGhpcyBhIEdQVCBwYXJ0aXRpb24gdGFibGU/IgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6NjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9ybWF0IG9mIHRoZSBHUFQgcGFydGl0aW9uIHRhYmxlIGlzIHZlcnNpb24gJXgsIHdoaWNoIGlzIG5ld2VyIHRoYW4gIgorIndoYXQgUGFydGVkIGNhbiByZWNvZ25pc2UuICBQbGVhc2UgdGVsbCB1cyEgIGJ1Zy1wYXJ0ZWRAZ251Lm9yZyIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm90IGFsbCBvZiB0aGUgc3BhY2UgYXZhaWxhYmxlIHRvICVzIGFwcGVhcnMgdG8gYmUgdXNlZCwgeW91IGNhbiBmaXggdGhlIEdQVCAiCisidG8gdXNlIGFsbCBvZiB0aGUgc3BhY2UgKGFuIGV4dHJhICVsbHUgYmxvY2tzKSBvciBjb250aW51ZSB3aXRoIHRoZSBjdXJyZW50ICIKKyJzZXR0aW5nPyAiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzo4MjcKK21zZ2lkICIiCisiVGhlIGJhY2t1cCBHUFQgdGFibGUgaXMgbm90IGF0IHRoZSBlbmQgb2YgdGhlIGRpc2ssIGFzIGl0IHNob3VsZCBiZS4gIFRoaXMgIgorIm1pZ2h0IG1lYW4gdGhhdCBhbm90aGVyIG9wZXJhdGluZyBzeXN0ZW0gYmVsaWV2ZXMgdGhlIGRpc2sgaXMgc21hbGxlci4gIEZpeCwgIgorImJ5IG1vdmluZyB0aGUgYmFja3VwIHRvIHRoZSBlbmQgKGFuZCByZW1vdmluZyB0aGUgb2xkIGJhY2t1cCk/IgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6ODYyCittc2dpZCAiIgorIlRoZSBwcmltYXJ5IEdQVCB0YWJsZSBpcyBjb3JydXB0LCBidXQgdGhlIGJhY2t1cCBhcHBlYXJzIE9LLCBzbyB0aGF0IHdpbGwgYmUgIgorInVzZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6ODcwCittc2dpZCAiIgorIkJvdGggdGhlIHByaW1hcnkgYW5kIGJhY2t1cCBHUFQgdGFibGVzIGFyZSBjb3JydXB0LiAgVHJ5IG1ha2luZyBhIGZyZXNoICIKKyJ0YWJsZSwgYW5kIHVzaW5nIFBhcnRlZCdzIHJlc2N1ZSBmZWF0dXJlIHRvIHJlY292ZXIgcGFydGl0aW9ucy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoxODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBzaWduYXR1cmUgJXggZm9yIE1hYyBkaXNrIGxhYmVscy4iCittc2dzdHIgIkFzc2luYXR1cmEgaW524WxpZGEgJXggcGFyYSBy83R1bG9zIGRlIGRpc2NvIE1hYy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6MjI2Cittc2dpZCAiUGFydGl0aW9uIG1hcCBoYXMgbm8gcGFydGl0aW9uIG1hcCBlbnRyeSEiCittc2dzdHIgIk1hcGEgZGUgcGFydGnn9WVzIG7jbyB0ZW0gbmVuaHVtYSBlbnRyYWRhISIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgdG9vIHNtYWxsIGZvciBhIE1hYyBkaXNrIGxhYmVsISIKK21zZ3N0ciAiJXMg6SBtdWl0byBwZXF1ZW5vIHBhcmEgdW0gcvN0dWxvIGRlIGRpc2NvIE1hYyEiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIlBhcnRpdGlvbiAlZCBoYXMgYW4gaW52YWxpZCBzaWduYXR1cmUgJXguIgorbXNnc3RyICJBIHBhcnRp5+NvICVkIHRlbSB1bWEgYXNzaW5hdHVyYSBpbnbhbGlkYSAleC4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIlBhcnRpdGlvbiAlZCBoYXMgYW4gaW52YWxpZCBsZW5ndGggb2YgMCBieXRlcyEiCittc2dzdHIgIkEgcGFydGnn428gJWQgdGVtIHVtIHRhbWFuaG8gaW524WxpZG8gZGUgMCBieXRlcyEiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NTgwCisjLCBmdXp6eQorbXNnaWQgIlRoZSBkYXRhIHJlZ2lvbiBkb2Vzbid0IHN0YXJ0IGF0IHRoZSBzdGFydCBvZiB0aGUgcGFydGl0aW9uLiIKK21zZ3N0ciAiQSByZWdp428gZGUgZGFkb3MgbuNvIGNvbWXnYSBubyBpbu1jaW8gZGEgcGFydGnn428iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NTk3CisjLCBmdXp6eQorbXNnaWQgIlRoZSBib290IHJlZ2lvbiBkb2Vzbid0IHN0YXJ0IGF0IHRoZSBzdGFydCBvZiB0aGUgcGFydGl0aW9uLiIKK21zZ3N0ciAiQSByZWdp428gZGUgaW5pY2lhbGl6YefjbyBu428gY29tZedhIG5vIGlu7WNpbyBkYSBwYXJ0aefjbyIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo2MTEKK21zZ2lkICJUaGUgcGFydGl0aW9uJ3MgYm9vdCByZWdpb24gZG9lc24ndCBvY2N1cHkgdGhlIGVudGlyZSBwYXJ0aXRpb24uIgorbXNnc3RyICJBIHJlZ2njbyBkZSBpbmljaWFsaXph5+NvIGRhIHBhcnRp5+NvIG7jbyBhIG9jdXBhIGludGVpcmFtZW50ZS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NjIyCittc2dpZCAiVGhlIHBhcnRpdGlvbidzIGRhdGEgcmVnaW9uIGRvZXNuJ3Qgb2NjdXB5IHRoZSBlbnRpcmUgcGFydGl0aW9uLiIKK21zZ3N0ciAiQSByZWdp428gZGUgZGFkb3MgZGEgcGFydGnn428gbuNvIGEgb2N1cGEgaW50ZWlyYW1lbnRlLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo2NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldlaXJkIGJsb2NrIHNpemUgb24gZGV2aWNlIGRlc2NyaXB0b3I6ICVkIGJ5dGVzIGlzIG5vdCBkaXZpc2libGUgYnkgNTEyLiIKK21zZ3N0ciAiIgorInRhbWFuaG8gZGUgYmxvY28gZXN0cmFuaG8gbm8gZGVzY3JpdG9yIGRlIGRpc3Bvc2l0aXZvOiAlZCBieXRlcyBu428gIgorInPjb2Rpdmlz7XZlaXMgcG9yIDUxMi4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6Njg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZHJpdmVyIGRlc2NyaXB0b3Igc2F5cyB0aGUgcGh5c2ljYWwgYmxvY2sgc2l6ZSBpcyAlZCBieXRlcywgYnV0IExpbnV4ICIKKyJzYXlzIGl0IGlzICVkIGJ5dGVzLiIKK21zZ3N0ciAiIgorIk8gZGVzY3JpdG9yIGRvIGRyaXZlciBpbmZvcm1hIHF1ZSBvIHRhbWFuaG8gZu1zaWNvIGRlIGJsb2NvIOkgJWQgYnl0ZXMsIG1hcyAiCisibyBMaW51eCBpbmZvcm1hIHF1ZSDpICVkIGJ5dGVzLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo3MzYKK21zZ2lkICJObyB2YWxpZCBwYXJ0aXRpb24gbWFwIGZvdW5kLiIKK21zZ3N0ciAiTmVuaHVtIG1hcGEgZGUgcGFydGnn9WVzIHbhbGlkbyBmb2kgZW5jb250cmFkby4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6Nzk1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiQ29uZmxpY3RpbmcgcGFydGl0aW9uIG1hcCBlbnRyeSBzaXplcyEgIEVudHJ5IDEgc2F5cyBpdCBpcyAlZCwgYnV0IGVudHJ5ICVkICIKKyJzYXlzIGl0IGlzICVkISIKK21zZ3N0ciAiIgorIlRhbWFuaG9zIGRlIG1hcGEgZGUgcGFydGnn428gY29uZmxpdGFudGVzISBFbnRyYWRhIDEgaW5mb3JtYSBxdWUg6SAlZCwgbWFzICIKKyJlbnRyYWRhICVkIGluZm9ybWEgcXVlIOkgJWQhIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjgyMgorIywgZnV6enkKK21zZ2lkICJXZWlyZCEgIFRoZXJlIGFyZSAyIHBhcnRpdGlvbnMgbWFwIGVudHJpZXMhIgorbXNnc3RyICJFc3RyYW5obyAtIDIgZW50cmFkYXMgbm8gbWFwYSBkZSBwYXJ0aefjbyIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoxMzQ3Cittc2dpZCAiIgorIkNoYW5naW5nIHRoZSBuYW1lIG9mIGEgcm9vdCBvciBzd2FwIHBhcnRpdGlvbiB3aWxsIHByZXZlbnQgTGludXggZnJvbSAiCisicmVjb2duaXNpbmcgaXQgYXMgc3VjaC4iCittc2dzdHIgIiIKKyJNdWRhciBvIG5vbWUgZGUgdW1hIHBhcnRp5+NvIHJvb3Qgb3Ugc3dhcCBpcuEgaW1wZWRpciBvIExpbnV4IGRlIHJlY29uaGVj6i0iCisibGEgY29tbyB0YWwuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjE0NDMKKyMsIGZ1enp5Cittc2dpZCAiQ2FuJ3QgYWRkIGFub3RoZXIgcGFydGl0aW9uIC0tIHRoZSBwYXJ0aXRpb24gbWFwIGlzIHRvbyBzbWFsbCEiCittc2dzdHIgIiIKKyJO428gcG9zc28gYWRpY2lvbmFyIG91dHJhIHBhcnRp5+NvIC0gbyBtYXBhIGRlIHBhcnRp5/VlcyDpIG11aXRvIHBlcXVlbm8hIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3BjOTguYzozNTQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcGFydGl0aW9uIHRhYmxlIG9uICVzLiIKK21zZ3N0ciAiVGFiZWxhIGRlIHBhcnRp5/VlcyBpbnbhbGlkYSBlbSAlcyIKKworIzogbGlicGFydGVkL2xhYmVscy9wYzk4LmM6NDA2IGxpYnBhcnRlZC9sYWJlbHMvcGM5OC5jOjQ4NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlBhcnRpdGlvbiAlZCBpc24ndCBhbGlnbmVkIHRvIGN5bGluZGVyIGJvdW5kYXJpZXMuICBUaGlzIGlzIHN0aWxsICIKKyJ1bnN1cHBvcnRlZC4iCittc2dzdHIgIiIKKyJBIHBhcnRp5+NvICVkIG7jbyBlc3ThIGFsaW5oYWRhIGFvIGxpbWl0ZSBkbyBjaWxpbmRyby4gUHJlY2lzbyBhZGljaW9uYXIgIgorInN1cG9ydGUgcGFyYSBpc3NvLiIKKworIzogbGlicGFydGVkL2xhYmVscy9wYzk4LmM6NzkxCittc2dpZCAiQ2FuJ3QgYWRkIGFub3RoZXIgcGFydGl0aW9uLiIKK21zZ3N0ciAiTuNvIHBvc3NvIGFkaWNpb25hciBvdXRyYSBwYXJ0aefjby4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6MTYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogQmFkIGNoZWNrc3VtIG9uIGJsb2NrICVsbHUgb2YgdHlwZSAlcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo0OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBEaWRuJ3QgZmluZCByZGIgYmxvY2ssIHNob3VsZCBuZXZlciBoYXBwZW4uIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6NTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogTG9vcCBkZXRlY3RlZCBhdCBibG9jayAlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo2MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBUaGUgJXMgbGlzdCBzZWVtcyBiYWQgYXQgYmxvY2sgJXMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6Njg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGxpc3QgYmFkIGJsb2Nrcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo2OTcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGxpc3QgcGFydGl0aW9uIGJsb2Nrcy4iCittc2dzdHIgIkltcG9zc+12ZWwgYWxpbmhhciBhIHBhcnRp5+NvLiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo3MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gbGlzdCBmaWxlIHN5c3RlbSBibG9ja3MuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6NzEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGxpc3QgYm9vdCBibG9ja3MuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6NzQwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gd3JpdGUgcGFydGl0aW9uIGJsb2NrIGF0ICVkLiIKK21zZ3N0ciAiSW1wb3Nz7XZlbCBkZXRlcm1pbmFyIHNlIGEgcGFydGnn428gZXN04SBtb250YWRhLiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzoxMDY5CisjLCBmdXp6eQorbXNnaWQgIlVuYWJsZSB0byBhbGxvY2F0ZSBhIHBhcnRpdGlvbiBudW1iZXIuIgorbXNnc3RyICJJbXBvc3PtdmVsIGFsaW5oYXIgYSBwYXJ0aefjby4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6MTQ1Cittc2dpZCAiQ29ycnVwdGVkIFN1biBkaXNrIGxhYmVsIGRldGVjdGVkLiIKK21zZ3N0ciAiVW0gcvN0dWxvIGRlIGRpc2NvIFN1biBjb3Jyb21waWRvIGZvaSBkZXRlY3RhZG8uIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3N1bi5jOjI2NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBkaXNrIENIUyBnZW9tZXRyeSAoJWQsJWQsJWQpIHJlcG9ydGVkIGJ5IHRoZSBvcGVyYXRpbmcgc3lzdGVtIGRvZXMgbm90ICIKKyJtYXRjaCB0aGUgZ2VvbWV0cnkgc3RvcmVkIG9uIHRoZSBkaXNrIGxhYmVsICglZCwlZCwlZCkuIgorbXNnc3RyICIiCisiQSBnZW9tZXRyaWEgQ0hTIGRvIGRpc2NvICglZCwlZCwlZCkgbuNvIGNvbmZlcmUgY29tIGEgZ2VvbWV0cmlhIGdyYXZhZGEgbm8gIgorInLzdHVsbyBkZSBkaXNjbyAoJWQsJWQsJWQpLiIKKworIzogbGlicGFydGVkL2xhYmVscy9zdW4uYzoyODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGRpc2sgbGFiZWwgZGVzY3JpYmVzIGEgZGlzayBiaWdnZXIgdGhhbiAlcy4iCittc2dzdHIgIk8gcvN0dWxvIGRlIGRpc2NvIGRlc2NyZXZlIHVtIGRpc2NvIG1haW9yIHF1ZSAlcy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6NDQyCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBkaXNrIGhhcyAlZCBjeWxpbmRlcnMsIHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbWF4aW11bSBvZiA2NTUzNi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9zdW4uYzo3MzcKK21zZ2lkICIiCisiVGhlIFdob2xlIERpc2sgcGFydGl0aW9uIGlzIHRoZSBvbmx5IGF2YWlsYWJsZSBvbmUgbGVmdC4gIEdlbmVyYWxseSwgaXQgaXMgIgorIm5vdCBhIGdvb2QgaWRlYSB0byBvdmVyd3JpdGUgdGhpcyBwYXJ0aXRpb24gd2l0aCBhIHJlYWwgb25lLiAgU29sYXJpcyBtYXkgIgorIm5vdCBiZSBhYmxlIHRvIGJvb3Qgd2l0aG91dCBpdCwgYW5kIFNJTE8gKHRoZSBzcGFyYyBib290IGxvYWRlcikgYXBwcmVjaWF0ZXMgIgorIml0IGFzIHdlbGwuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6NzUyCittc2dpZCAiU3VuIGRpc2sgbGFiZWwgaXMgZnVsbC4iCittc2dzdHIgIk8gcvN0dWxvIGRlIGRpc2NvIFN1biBlc3ThIGNoZWlvLiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6MTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBvcGVuaW5nIGRldmljZSAnJXMnIGZhaWxlZC5cbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjE2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgc2Vla2luZyBkZXZpY2UgJyVzJyBmYWlsZWQuXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzoxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHdyaXRpbmcgdG8gZGV2aWNlICclcycgZmFpbGVkLFxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6MTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyByZWFkaW5nIGZyb20gZGV2aWNlICclcycgZmFpbGVkLlxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6MTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhdGFsIGVycm9yXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDE4Cittc2dpZCAiQ291bGQgbm90IHJlYWQgVlRPQyBsYWJlbHMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQyNAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIFZUT0MgRk1UMSBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0MzEKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBWVE9DIEZNVDQgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDM4Cittc2dpZCAiQ291bGQgbm90IHJlYWQgVlRPQyBGTVQ1IERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQ0NQorbXNnaWQgIkNvdWxkIG5vdCByZWFkIFZUT0MgRk1UNyBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0NjIKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgVlRPQyBsYWJlbHMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQ2OAorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBWVE9DIEZNVDEgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDc1Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIFZUT0MgRk1UNCBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0ODIKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgVlRPQyBGTVQ1IERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQ4OQorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBWVE9DIEZNVDcgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xpYnBhcnRlZC5jOjI5NiBsaWJwYXJ0ZWQvbGlicGFydGVkLmM6MzE2Cittc2dpZCAiT3V0IG9mIG1lbW9yeS4iCittc2dzdHIgIk7jbyBo4SBtZW3zcmlhLiIKKworIzogbGlicGFydGVkL3VuaXQuYzoxMzkKK21zZ2lkICJDYW5ub3QgZ2V0IHVuaXQgc2l6ZSBmb3Igc3BlY2lhbCB1bml0ICdDT01QQUNUJy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL3VuaXQuYzozODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiXCIlc1wiIGhhcyBpbnZhbGlkIHN5bnRheCBmb3IgbG9jYXRpb25zLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvdW5pdC5jOjM5NAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgbWF4aW11bSBoZWFkIHZhbHVlIGlzICVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvdW5pdC5jOjQwMQorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgbWF4aW11bSBzZWN0b3IgdmFsdWUgaXMgJWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC91bml0LmM6NDEzIGxpYnBhcnRlZC91bml0LmM6NTQ1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJUaGUgbG9jYXRpb24gJXMgaXMgb3V0c2lkZSBvZiB0aGUgZGV2aWNlICVzLiIKK21zZ3N0ciAiSW1wb3Nz7XZlbCBjcmlhciBwYXJ0aefjbyBwYXJhIGZvcmEgZG8gZGlzcG9zaXRpdm8uIgorCisjOiBsaWJwYXJ0ZWQvdW5pdC5jOjUyNworbXNnaWQgIkludmFsaWQgbnVtYmVyLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYWZmcy5jOjYzIGxpYnBhcnRlZC9mcy9hbWlnYS9hcGZzLmM6NTYKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hc2ZzLmM6NzAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGFsbG9jYXRlIHBhcnRpdGlvbiBibG9ja1xuIgorbXNnc3RyICJJbXBvc3PtdmVsIGFsaW5oYXIgYSBwYXJ0aefjby4iCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hZmZzLmM6NzggbGlicGFydGVkL2ZzL2FtaWdhL2FwZnMuYzo3MAorIzogbGlicGFydGVkL2ZzL2FtaWdhL2FzZnMuYzo4NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gYWxsb2NhdGUgYmxvY2tcbiIKK21zZ3N0ciAiSW1wb3Nz7XZlbCBhbGluaGFyIGEgcGFydGnn428uIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYWZmcy5jOjgzIGxpYnBhcnRlZC9mcy9hbWlnYS9hcGZzLmM6NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBDb3VsZG4ndCByZWFkIGJvb3QgYmxvY2sgJWxsdVxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hZmZzLmM6OTkgbGlicGFydGVkL2ZzL2FtaWdhL2FwZnMuYzo4NgorIzogbGlicGFydGVkL2ZzL2FtaWdhL2FzZnMuYzo5MiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXNmcy5jOjEwNgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IENvdWxkbid0IHJlYWQgcm9vdCBibG9jayAlbGx1XG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gYWxsb2NhdGUgaWQgbGlzdCBlbGVtZW50XG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogQ291bGRuJ3QgcmVhZCBibG9jayAlbGx1XG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6MjAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogQmFkIGNoZWNrc3VtIG9uIGJsb2NrICVsbHUgb2YgdHlwZSAlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jOjIxMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBDb3VsZG4ndCB3cml0ZSBibG9jayAlZFxuIgorbXNnc3RyICIlcyBkdXJhbnRlIGVzY3JpdGEgZW0gJXMiCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jOjI3OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gYWxsb2NhdGUgZGlza19zcGVjaWZpYyByZGIgYmxvY2tcbiIKK21zZ3N0ciAiSW1wb3Nz7XZlbCBhbGluaGFyIGEgcGFydGnn428uIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzoyODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBEaWRuJ3QgZmluZCByZGIgYmxvY2ssIHNob3VsZCBuZXZlciBoYXBwZW5cbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzozMTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIHJlYWQgcGFydGl0aW9uIGJsb2NrICVsbHVcbiIKK21zZ3N0ciAiSW1wb3Nz7XZlbCBhbGluaGFyIGEgcGFydGnn428uIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6ODcgbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjExMgorbXNnaWQgIkluY29uc2lzdGVudCBncm91cCBkZXNjcmlwdG9ycyEiCittc2dzdHIgIkRlc2NyaXRvcmVzIGRlIGdydXBvIGluY29uc2lzdGVudGVzISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjkxIGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzoxMTYKKyMsIGZ1enp5Cittc2dpZCAiRmlsZSBzeXN0ZW0gZnVsbCEiCittc2dzdHIgIlNpc3RlbWEgZGUgYXJxdWl2b3MgY2hlaW8hIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6Njg2CisjLCBmdXp6eQorbXNnaWQgIkludmFsaWQgc3VwZXJibG9jay4gIEFyZSB5b3Ugc3VyZSB0aGlzIGlzIGFuIGV4dDIgZmlsZSBzeXN0ZW0/IgorbXNnc3RyICJTdXBlcmJsb2NvIGluduFsaWRvLiBWb2PqIHRlbSBjZXJ0ZXphIHF1ZSBpc3RvIOkgdW0gc2lzdGVtYSBleHQyPyIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjcwMCBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjY1OAorIywgZnV6enkKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgZXJyb3JzISAgWW91IHNob3VsZCBydW4gZTJmc2NrLiIKK21zZ3N0ciAiU2lzdGVtYSBkZSBhcnF1aXZvcyB0ZW0gZXJyb3MhIEV4ZWN1dGUgZTJmc2NrIHByaW1laXJvLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjcxMQorIywgZnV6enkKK21zZ2lkICIiCisiRmlsZSBzeXN0ZW0gd2FzIG5vdCBjbGVhbmx5IHVubW91bnRlZCEgIFlvdSBzaG91bGQgcnVuIGUyZnNjay4gIE1vZGlmeWluZyBhbiAiCisidW5jbGVhbiBmaWxlIHN5c3RlbSBjb3VsZCBjYXVzZSBzZXZlcmUgY29ycnVwdGlvbi4iCittc2dzdHIgIiIKKyJTaXN0ZW1hIGRlIGFycXVpdm9zIG7jbyBmb2kgZGVzbW9udGFkbyBjb3JyZXRhbWVudGUhIEV4ZWN1dGUgZTJmc2NrIHByaW1laXJvLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjczMQorIywgZnV6enkKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgYW4gaW5jb21wYXRpYmxlIGZlYXR1cmUgZW5hYmxlZC4iCittc2dzdHIgIlNpc3RlbWEgZGUgYXJxdWl2b3MgdGVtIHVtYSBjYXJhY3Rlcu1zdGljYSBpbmNvbXBhdO12ZWwgaGFiaWxpdGFkYSIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjc0MgorbXNnaWQgIkVycm9yIGFsbG9jYXRpbmcgYnVmZmVyIGNhY2hlLiIKK21zZ3N0ciAiRXJybyBkZXRlcm1pbmFuZG8gbyBjYWNoZSB0ZW1wb3LhcmlvLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9pbm9kZV9yZWxvY2F0b3IuYzoxMTQKKyMsIGZ1enp5Cittc2dpZCAiIgorIkZvdW5kIGFuIGlub2RlIHdpdGggYSBpbmNvcnJlY3QgbGluayBjb3VudC4gIEJldHRlciBnbyBydW4gZTJmc2NrIGZpcnN0ISIKK21zZ3N0ciAiIgorIkVuY29udHJhZG8gdW0gaW5vZGUgY29tIHVtYSBjb250YWdlbSBpbmNvcnJldGEgZGUgbGlnYef1ZXMuIE1lbGhvciBleGVjdXRhciAiCisibyBlMmZzY2sgcHJpbWVpcm8uIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2lub2RlX3JlbG9jYXRvci5jOjQ4NworbXNnaWQgIk5vdCBlbm91Z2ggZnJlZSBpbm9kZXMhIgorbXNnc3RyICJO428gaOEgaW5vZGVzIGxpdnJlcyBzdWZpY2llbnRlcyEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6MjIzCisjLCBmdXp6eQorbXNnaWQgIkZpbGUgc3lzdGVtIGlzIHRvbyBmdWxsIHRvIHJlbW92ZSBhIGdyb3VwISIKK21zZ3N0ciAiU2lzdGVtYSBkZSBhcnF1aXZvcyBtdWl0byBvY3VwYWRvIHBhcmEgcmVtb3ZlciB1bSBncnVwbyEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6MjMyCisjLCBmdXp6eQorbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyB0b28gbWFueSBhbGxvY2F0ZWQgaW5vZGVzIHRvIHJlbW92ZSBhIGdyb3VwISIKK21zZ3N0ciAiIgorIlNpc3RlbWEgZGUgYXJxdWl2b3MgdGVtIG11aXRvcyBpbm9kZXMgdXRpbGl6YWRvcyBwYXJhIHJlbW92ZXIgdW0gZ3J1cG8hIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjQ5MQorbXNnaWQgImFkZGluZyBncm91cHMiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo1MjgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIllvdXIgZmlsZSBzeXN0ZW0gaXMgdG9vIGZ1bGwgdG8gcmVzaXplIGl0IHRvICVpIGJsb2Nrcy4gIFNvcnJ5LiIKK21zZ3N0ciAiIgorIlNldSBzaXN0ZW1hIGRlIGFycXVpdm9zIGVzdOEgbXVpdG8gb2N1cGFkbyBwYXJhIHJlZGltZW5zaW9u4S1sbyBwYXJhICVpICIKKyJibG9jb3MuIERlc2N1bHBlLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo1MzgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGZpbGUgc3lzdGVtIGhhcyB0b28gbWFueSBvY2N1cGllZCBpbm9kZXMgdG8gcmVzaXplIGl0IHRvICVpIGJsb2Nrcy4gICIKKyJTb3JyeS4iCittc2dzdHIgIiIKKyJTZXUgc2lzdGVtYSBkZSBhcnF1aXZvcyBlc3ThIGNvbSBtdWl0b3MgaW5vZGVzIG9jdXBhZG9zIHBhcmEgcmVkaW1lbnNpb27hLWxvICIKKyJwYXJhICVpIGJsb2Nvcy4gRGVzY3VscGUuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjY2NgorIywgZnV6enkKK21zZ2lkICJGaWxlIHN5c3RlbSB3YXMgbm90IGNsZWFubHkgdW5tb3VudGVkISAgWW91IHNob3VsZCBydW4gZTJmc2NrLiIKK21zZ3N0ciAiIgorIlNpc3RlbWEgZGUgYXJxdWl2b3MgbuNvIGZvaSBkZXNtb250YWRvIGNvcnJldGFtZW50ZSEgRXhlY3V0ZSBlMmZzY2sgcHJpbWVpcm8uIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjY3NQorbXNnaWQgIiIKKyJUaGUgZmlsZSBzeXN0ZW0gaGFzIHRoZSAnZGlyX2luZGV4JyBmZWF0dXJlIGVuYWJsZWQuICBQYXJ0ZWQgY2FuIG9ubHkgcmVzaXplICIKKyJ0aGUgZmlsZSBzeXN0ZW0gaWYgaXQgZGlzYWJsZXMgdGhpcyBmZWF0dXJlLiAgWW91IGNhbiBlbmFibGUgaXQgbGF0ZXIgYnkgIgorInJ1bm5pbmcgJ3R1bmUyZnMgLU8gZGlyX2luZGV4IERFVklDRScgYW5kIHRoZW4gJ2UyZnNjayAtZkQgREVWSUNFJy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo2OTEKK21zZ2lkICIiCisiQSByZXNpemUgb3BlcmF0aW9uIG9uIHRoaXMgZmlsZSBzeXN0ZW0gd2lsbCB1c2UgRVhQRVJJTUVOVEFMIGNvZGVcbiIKKyJ0aGF0IE1BWSBDT1JSVVBUIGl0IChhbHRob3VnaCBubyBvbmUgaGFzIHJlcG9ydGVkIGFueSBzdWNoIGRhbWFnZSB5ZXQpLlxuIgorIllvdSBzaG91bGQgYXQgbGVhc3QgYmFja3VwIHlvdXIgZGF0YSBmaXJzdCwgYW5kIHJ1biAnZTJmc2NrIC1mJyBhZnRlcndhcmRzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2Jsb2NrX3JlbG9jYXRvci5jOjE5OAorIywgZnV6enkKK21zZ2lkICJDcm9zcy1saW5rZWQgYmxvY2tzIGZvdW5kISAgQmV0dGVyIGdvIHJ1biBlMmZzY2sgZmlyc3QhIgorbXNnc3RyICIiCisiRW5jb250cmFkb3MgYmxvY29zIGNvbSByZWZlcupuY2lhIGNydXphZGEhIE1lbGhvciBleGVjdXRhciBlMmZzY2sgcHJpbWVpcm8uIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2Jsb2NrX3JlbG9jYXRvci5jOjUzNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQmxvY2sgJWkgaGFzIG5vIHJlZmVyZW5jZT8gIFdlaXJkLiIKK21zZ3N0ciAiQmxvY28gJWkgbuNvIHRlbSByZWZlcupuY2lhPyBFc3RyYW5obyIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9ibG9ja19yZWxvY2F0b3IuYzo3MzcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrICVpIHNob3VsZG4ndCBoYXZlIGJlZW4gbWFya2VkICglZCwgJWQpISIKK21zZ3N0ciAiQmxvY28gJWkgbuNvIGRldmVyaWEgdGVyIHNpZG8gbWFyY2FkbyEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2ludGVyZmFjZS5jOjE4NgorIywgZnV6enkKK21zZ2lkICIiCisiVGhlIGV4dDIgZmlsZSBzeXN0ZW0gcGFzc2VkIGEgYmFzaWMgY2hlY2suICBGb3IgYSBtb3JlIGNvbXByZWhlbnNpdmUgY2hlY2ssICIKKyJ1c2UgdGhlIGUyZnNjayBwcm9ncmFtLiIKK21zZ3N0ciAiIgorIk8gc2lzdGVtYSBkZSBhcnF1aXZvcyBleHQyIHBhc3NvdSBwZWxvIHRlc3RlIGLhc2ljby4gUGFyYSB1bSB0ZXN0ZSBtYWlzICIKKyJjb21wcmVlbnNpdm8sIHV0aWxpemUgbyBwcm9ncmFtYSBlMmZzY2suIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9pbnRlcmZhY2UuYzoyMDMKK21zZ2lkICJTb3JyeSwgY2FuJ3QgbW92ZSB0aGUgc3RhcnQgb2YgZXh0MiBwYXJ0aXRpb25zIHlldCEiCittc2dzdHIgIkRlc2N1bHBlLCBu428gcG9zc28gbW92ZXIgbyBpbu1jaW8gZGUgcGFydGnn9WVzIGV4dDIgYWluZGEhIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2J1ZmZlci5jOjgyCittc2dpZCAiQ291bGRuJ3QgZmx1c2ggYnVmZmVyIGNhY2hlISIKK21zZ3N0ciAiTuNvIGZvaSBwb3Nz7XZlbCBlc3ZhemlhciBjYWNoZSB0ZW1wb3LhcmlvISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9ta2ZzLmM6MTYyCittc2dpZCAid3JpdGluZyBwZXItZ3JvdXAgbWV0YWRhdGEiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9ta2ZzLmM6NTY0Cittc2dpZCAiRmlsZSBzeXN0ZW0gdG9vIHNtYWxsIGZvciBleHQyLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NhbGMuYzoxMzUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgbmVlZCAlcyBvZiBmcmVlIGRpc2sgc3BhY2UgdG8gc2hyaW5rIHRoaXMgcGFydGl0aW9uIHRvIHRoaXMgc2l6ZS4gICIKKyJDdXJyZW50bHksIG9ubHkgJXMgaXMgZnJlZS4iCittc2dzdHIgIiIKKyJWb2PqIHByZWNpc2EgZGUgJWRNIGRlIGVzcGHnbyBsaXZyZSBwYXJhIGRpbWludWlyIGVzdGEgcGFydGnn428gcGFyYSBlc3RlICIKKyJ0YW1hbmhvICh2b2PqIHRlbSBzb21lbnRlICVkTSBsaXZyZXMpIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvbnRleHQuYzo1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2x1c3RlciBzdGFydCBkZWx0YSA9ICVkLCB3aGljaCBpcyBub3QgYSBtdWx0aXBsZSBvZiB0aGUgY2x1c3RlciBzaXplICVkLiIKK21zZ3N0ciAiIgorIk8gY2x1c3RlciBpbmljaWEgZW0gZGVsdGEgPSAlZCwgcXVlIG7jbyDpIHVtIG36bHRpcGxvIGRvIHRhbWFuaG8gZGUgY2x1c3RlciAlIgorImQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jOjMwOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiUGFydGl0aW9uIHRvbyBiaWcvc21hbGwgZm9yIGEgJXMgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICJBIHBhcnRp5+NvIOkgbXVpdG8gcGVxdWVuYSBwYXJhIHVtIHNpc3RlbWEgZGUgYXJxdWl2b3MgRkFUIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jOjQ3NAorbXNnaWQgIiIKKyJUaGUgRkFUcyBkb24ndCBtYXRjaC4gIElmIHlvdSBkb24ndCBrbm93IHdoYXQgdGhpcyBtZWFucywgdGhlbiBzZWxlY3QgIgorImNhbmNlbCwgcnVuIHNjYW5kaXNrIG9uIHRoZSBmaWxlIHN5c3RlbSwgYW5kIHRoZW4gY29tZSBiYWNrLiIKK21zZ3N0ciAiIgorIkFzIEZBVHMgbuNvIGVzdONvIGlndWFpcy4gU2Ugdm9j6iBu428gc2FiZSBvIHF1ZSBpc3RvIHNpZ25pZmljYSwgc2VsZWNpb25lICIKKyJjYW5jZWxhciwgZXhlY3V0ZSBvIHNjYW5kaXNrIG5vIHNpc3RlbWEgZGUgYXJxdWl2b3MsIGRlcG9pcyB2b2x0ZS4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvZmF0LmM6NTE0Cittc2dpZCAiVGhlcmUgYXJlIG5vIHBvc3NpYmxlIGNvbmZpZ3VyYXRpb25zIGZvciB0aGlzIEZBVCB0eXBlLiIKK21zZ3N0ciAiTuNvIGjhIGNvbmZpZ3VyYef1ZXMgcG9zc+12ZWlzIHBhcmEgZXN0ZSB0aXBvIGRlIEZBVC4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvZmF0LmM6NTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGaWxlIHN5c3RlbSBkb2Vzbid0IGhhdmUgZXhwZWN0ZWQgc2l6ZXMgZm9yIFdpbmRvd3MgdG8gbGlrZSBpdC4gIENsdXN0ZXIgIgorInNpemUgaXMgJWRrICglZGsgZXhwZWN0ZWQpOyBudW1iZXIgb2YgY2x1c3RlcnMgaXMgJWQgKCVkIGV4cGVjdGVkKTsgc2l6ZSBvZiAiCisiRkFUcyBpcyAlZCBzZWN0b3JzICglZCBleHBlY3RlZCkuIgorbXNnc3RyICIiCisiTyBzaXN0ZW1hIGRlIGFycXVpdm9zIG7jbyB0ZW0gbyB0YW1hbmhvIGVzcGVyYWRvIHBhcmEgcXVlIG8gV2luZG93cyB1dGlsaXplLiAiCisiTyB0YW1hbmhvIGRvIGNsdXN0ZXIg6SAlZGsgKCVkayBlc3BlcmFkbyk7IG76bWVybyBkZSBjbHVzdGVycyDpICVkICglZCAiCisiZXNwZXJhZG8pOyB0YW1hbmhvIGRhIEZBVCDpICVkIHNldG9yZXMgKCVkIGVzcGVyYWRvKS4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvZmF0LmM6NTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGaWxlIHN5c3RlbSBpcyByZXBvcnRpbmcgdGhlIGZyZWUgc3BhY2UgYXMgJWQgY2x1c3RlcnMsIG5vdCAlZCBjbHVzdGVycy4iCittc2dzdHIgIiIKKyJPIHNpc3RlbWEgZGUgYXJxdWl2b3MgZXN04SByZXBvcnRhbmRvIHF1ZSBvIGVzcGHnbyBsaXZyZSDpICVkIGNsdXN0ZXJzLCBu428gJSIKKyJkIGNsdXN0ZXJzLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9mYXQuYzo4NzQKKyMsIGZ1enp5Cittc2dpZCAiIgorIkdOVSBQYXJ0ZWQgd2FzIG1pc2NvbXBpbGVkOiB0aGUgRkFUIGJvb3Qgc2VjdG9yIHNob3VsZCBiZSA1MTIgYnl0ZXMuICBGQVQgIgorInN1cHBvcnQgd2lsbCBiZSBkaXNhYmxlZC4iCittc2dzdHIgIiIKKyJPIEdOVSBwYXJ0ZWQgZm9pIGNvbXBpbGFkbyBlcnJhZGFtZW50ZTogbyBzZXRvciBkZSBib290IEZBVCBkZXZlcmlhIHNlciBkZSAiCisiNTEyIGJ5dGVzLiBPIHN1cG9ydGUgYSBGQVQgc2Vy4SBkZXNhYmlsaXRhZG8uIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjE1OQorIywgZnV6enkKK21zZ2lkICIiCisiVGhlcmUncyBub3QgZW5vdWdoIHJvb20gaW4gdGhlIHJvb3QgZGlyZWN0b3J5IGZvciBhbGwgb2YgdGhlIGZpbGVzLiAgRWl0aGVyICIKKyJjYW5jZWwsIG9yIGlnbm9yZSB0byBsb3NlIHRoZSBmaWxlcy4iCittc2dzdHIgIiIKKyJO428gaOEgZXNwYedvIHN1ZmljaWVudGUgbm8gZGlyZXTzcmlvIHJhaXosIHBhcmEgdG9kb3Mgb3MgYXJxdWl2b3MuIENhbmNlbGUsICIKKyJvdSBpZ25vcmUgcGFyYSBwZXJkZXIgb3MgYXJxdWl2b3MuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjMwMAorbXNnaWQgIkVycm9yIHdyaXRpbmcgdG8gdGhlIHJvb3QgZGlyZWN0b3J5LiIKK21zZ3N0ciAiRXJybyBlc2NyZXZlbmRvIG5vIGRpcmV083JpbyByYWl6LiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo0ODkKKyMsIGZ1enp5Cittc2dpZCAiSWYgeW91IGxlYXZlIHlvdXIgZmlsZSBzeXN0ZW0gYXMgRkFUMTYsIHRoZW4geW91IHdpbGwgaGF2ZSBubyBwcm9ibGVtcy4iCittc2dzdHIgIlNlIGRlaXhhciBzZXUgc2lzdGVtYSBkZSBhcnF1aXZvcyBjb21vIEZBVDE2LCBu428gaGF2ZXLhIHByb2JsZW1hcy4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NDkyCittc2dpZCAiIgorIklmIHlvdSBjb252ZXJ0IHRvIEZBVDE2LCBhbmQgTVMgV2luZG93cyBpcyBpbnN0YWxsZWQgb24gdGhpcyBwYXJ0aXRpb24sIHRoZW4gIgorInlvdSBtdXN0IHJlLWluc3RhbGwgdGhlIE1TIFdpbmRvd3MgYm9vdCBsb2FkZXIuICBJZiB5b3Ugd2FudCB0byBkbyB0aGlzLCB5b3UgIgorInNob3VsZCBjb25zdWx0IHRoZSBQYXJ0ZWQgbWFudWFsIChvciB5b3VyIGRpc3RyaWJ1dGlvbidzIG1hbnVhbCkuIgorbXNnc3RyICIiCisiU2Ugdm9j6iBjb252ZXJ0ZXIgcGFyYSBGQVQxNiwgZSBvIE1TIFdpbmRvd3MgZXN04SBpbnN0YWxhZG8gbmVzdGEgcGFydGnn428sICIKKyJ2b2PqIGRldmVy4SByZWluc3RhbGFyIG8gZ2VyZW5jaWFkb3IgZGUgYm9vdCBkbyBNUyBXaW5kb3dzLiBTZSBxdWlzZXIgZmF6ZXIgIgorImlzc28sIGNvbnN1bHRlIG8gbWFudWFsIGRvIFBhcnRlZCAob3UgbyBtYW51YWwgZGUgc3VhIGRpc3RyaWJ1aefjbykuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjUwMAorbXNnaWQgIiIKKyJJZiB5b3UgbGVhdmUgeW91ciBmaWxlIHN5c3RlbSBhcyBGQVQzMiwgdGhlbiB5b3Ugd2lsbCBub3QgaW50cm9kdWNlIGFueSBuZXcgIgorInByb2JsZW1zLiIKK21zZ3N0ciAiIgorIlNlIGRlaXhhciBzZXUgc2lzdGVtYSBkZSBhcnF1aXZvcyBjb21vIEZBVDMyLCB2b2PqIG7jbyBjcmlhcuEgbWFpcyBuZW5odW0gIgorInByb2JsZW1hIG5vdm8uIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjUwNAorbXNnaWQgIiIKKyJJZiB5b3UgY29udmVydCB0byBGQVQzMiwgYW5kIE1TIFdpbmRvd3MgaXMgaW5zdGFsbGVkIG9uIHRoaXMgcGFydGl0aW9uLCB0aGVuICIKKyJ5b3UgbXVzdCByZS1pbnN0YWxsIHRoZSBNUyBXaW5kb3dzIGJvb3QgbG9hZGVyLiAgSWYgeW91IHdhbnQgdG8gZG8gdGhpcywgeW91ICIKKyJzaG91bGQgY29uc3VsdCB0aGUgUGFydGVkIG1hbnVhbCAob3IgeW91ciBkaXN0cmlidXRpb24ncyBtYW51YWwpLiAgQWxzbywgIgorImNvbnZlcnRpbmcgdG8gRkFUMzIgd2lsbCBtYWtlIHRoZSBmaWxlIHN5c3RlbSB1bnJlYWRhYmxlIGJ5IE1TIERPUywgTVMgIgorIldpbmRvd3MgOTVhLCBhbmQgTVMgV2luZG93cyBOVC4iCittc2dzdHIgIiIKKyJTZSB2b2PqIGNvbnZlcnRlciBwYXJhIEZBVDMyLCBlIG8gTVMgV2luZG93cyBlc3ThIGluc3RhbGFkbyBuZXN0YSBwYXJ0aefjbywgIgorInZvY+ogZGV2ZXLhIHJlaW5zdGFsYXIgbyBnZXJlbmNpYWRvciBkZSBib290IGRvIE1TIFdpbmRvd3MuIFNlIHF1aXNlciBmYXplciAiCisiaXNzbywgY29uc3VsdGUgbyBtYW51YWwgZG8gUGFydGVkIChvdSBvIG1hbnVhbCBkZSBzdWEgZGlzdHJpYnVp5+NvKS4gVGFtYultLCAiCisiY29udmVydGVuZG8gcGFyYSBGQVQzMiBmYXLhIGNvbSBxdWUgbyBzaXN0ZW1hIGRlIGFycXVpdm9zIG7jbyBzZWphIG1haXMgIgorInJlY29uaGVjaWRvIHBlbG8gTVMgRE9TLCBXaW5kb3dzIDk1YSwgZSBNUyBXaW5kb3dzIE5ULiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgICVzICAlcyIKK21zZ3N0ciAiJXMgICVzICAlcyIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1MTkKK21zZ2lkICJXb3VsZCB5b3UgbGlrZSB0byB1c2UgRkFUMzI/IgorbXNnc3RyICJWb2PqIGdvc3RhcmlhIGRlIHVzYXIgRkFUMzI/IgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjU1MCBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjU2NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyAgJXMiCittc2dzdHIgIiVzICAlcyIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1NTEKK21zZ2lkICIiCisiVGhlIGZpbGUgc3lzdGVtIGNhbiBvbmx5IGJlIHJlc2l6ZWQgdG8gdGhpcyBzaXplIGJ5IGNvbnZlcnRpbmcgdG8gRkFUMTYuIgorbXNnc3RyICIiCisiTyBzaXN0ZW1hIGRlIGFycXVpdm9zIHPzIHBvZGUgc2VyIHJlZGltZW5zaW9uYWRvIHBhcmEgZXN0ZSB0YW1hbmhvIHNlbmRvICIKKyJjb252ZXJ0aWRvIHBhcmEgRkFUMTYuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjU2NworbXNnaWQgIiIKKyJUaGUgZmlsZSBzeXN0ZW0gY2FuIG9ubHkgYmUgcmVzaXplZCB0byB0aGlzIHNpemUgYnkgY29udmVydGluZyB0byBGQVQzMi4iCittc2dzdHIgIiIKKyJPIHNpc3RlbWEgZGUgYXJxdWl2b3Mgc/MgcG9kZSBzZXIgcmVkaW1lbnNpb25hZG8gcGFyYSBlc3RlIHRhbWFuaG8gc2VuZG8gIgorImNvbnZlcnRpZG8gcGFyYSBGQVQzMi4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTgwCisjLCBmdXp6eQorbXNnaWQgIiIKKyJHTlUgUGFydGVkIGNhbm5vdCByZXNpemUgdGhpcyBwYXJ0aXRpb24gdG8gdGhpcyBzaXplLiAgV2UncmUgd29ya2luZyBvbiBpdCEiCittc2dzdHIgIiIKKyJPIEdOVSBQYXJ0ZWQgbuNvIHBvZGUgcmVkaW1lbnNpb25hciBlc3RhIHBhcnRp5+NvIGEgZXN0ZSB0YW1hbmhvLiBFc3RhbW9zICIKKyJ0cmFiYWxoYW5kbyBuaXN0byEiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjQ5IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjU2Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGludmFsaWQgc2lnbmF0dXJlIGZvciBhIEZBVCBmaWxlIHN5c3RlbS4iCittc2dzdHIgIlNpc3RlbWEgZGUgYXJxdWl2b3MgdGVtIHVtYSBhc3NpbmF0dXJhIGluduFsaWRhIHBhcmEgdW0gRkFULiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6NjQKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgYW4gaW52YWxpZCBzZWN0b3Igc2l6ZSBmb3IgYSBGQVQgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICJTaXN0ZW1hIGRlIGFycXVpdm9zIHRlbSB1bSB0YW1hbmhvIGRlIHNldG9yIGluduFsaWRvIHBhcmEgdW0gRkFULiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6NzEKKyMsIGZ1enp5Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGludmFsaWQgY2x1c3RlciBzaXplIGZvciBhIEZBVCBmaWxlIHN5c3RlbS4iCittc2dzdHIgIlNpc3RlbWEgZGUgYXJxdWl2b3MgdGVtIHVtIHRhbWFuaG8gZGUgc2V0b3IgaW524WxpZG8gcGFyYSB1bSBGQVQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo3OAorIywgZnV6enkKK21zZ2lkICIiCisiRmlsZSBzeXN0ZW0gaGFzIGFuIGludmFsaWQgbnVtYmVyIG9mIHJlc2VydmVkIHNlY3RvcnMgZm9yIGEgRkFUIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiIgorIlNpc3RlbWEgZGUgYXJxdWl2b3MgdGVtIHVtIG76bWVybyBkZSBzZXRvcmVzIHJlc2VydmFkb3MgaW524WxpZG8gcGFyYSB1bSBGQVQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo4NQorIywgZnV6enkKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgYW4gaW52YWxpZCBudW1iZXIgb2YgRkFUcy4iCittc2dzdHIgIlNpc3RlbWEgZGUgYXJxdWl2b3MgdGVtIHVtIG76bWVybyBpbnbhbGlkbyBkZSBGQVRTLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6MTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGlzIGZpbGUgc3lzdGVtIGhhcyBhIGxvZ2ljYWwgc2VjdG9yIHNpemUgb2YgJWQuICBHTlUgUGFydGVkIGlzIGtub3duIG5vdCAiCisidG8gd29yayBwcm9wZXJseSB3aXRoIHNlY3RvciBzaXplcyBvdGhlciB0aGFuIDUxMiBieXRlcy4iCittc2dzdHIgIiIKKyJFc3RlIHNpc3RlbWEgZGUgYXJxdWl2b3MgdGVtIHVtIHRhbWFuaG8gZGUgc2V0b3IgbPNnaWNvIGRlICVkLiBPIEdOVSBQYXJ0ZWQgIgorIukgY29uaGVjaWRvIHBvciBu428gZnVuY2lvbmFyIGNvcnJldGFtZW50ZSBjb20gc2V0b3JlcyBkaWZlcmVudGVzIGRlIDUxMiAiCisiYnl0ZXMuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzoxNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmaWxlIHN5c3RlbSdzIENIUyBnZW9tZXRyeSBpcyAoJWQsICVkLCAlZCksIHdoaWNoIGlzIGludmFsaWQuICBUaGUgIgorInBhcnRpdGlvbiB0YWJsZSdzIENIUyBnZW9tZXRyeSBpcyAoJWQsICVkLCAlZCkuICBJZiB5b3Ugc2VsZWN0IElnbm9yZSwgdGhlICIKKyJmaWxlIHN5c3RlbSdzIENIUyBnZW9tZXRyeSB3aWxsIGJlIGxlZnQgdW5jaGFuZ2VkLiAgSWYgeW91IHNlbGVjdCBGaXgsIHRoZSAiCisiZmlsZSBzeXN0ZW0ncyBDSFMgZ2VvbWV0cnkgd2lsbCBiZSBzZXQgdG8gbWF0Y2ggdGhlIHBhcnRpdGlvbiB0YWJsZSdzIENIUyAiCisiZ2VvbWV0cnkuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjIxMworbXNnaWQgIkZBVCBib290IHNlY3RvciBzYXlzIGxvZ2ljYWwgc2VjdG9yIHNpemUgaXMgMC4gIFRoaXMgaXMgd2VpcmQuICIKK21zZ3N0ciAiU2V0b3IgZGUgYm9vdCBGQVQgZGl6IHF1ZSBvIHRhbWFuaG8gbPNnaWNvIGRvIHNldG9yIOkgMC4gRXN0cmFuaG8uICIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6MjE5Cittc2dpZCAiRkFUIGJvb3Qgc2VjdG9yIHNheXMgdGhlcmUgYXJlIG5vIEZBVCB0YWJsZXMuICBUaGlzIGlzIHdlaXJkLiAiCittc2dzdHIgIlNldG9yIGRlIGJvb3QgRkFUIGRpeiBxdWUgbuNvIGjhIHRhYmVsYXMgRkFULiBFc3RyYW5oby4gIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzoyMjUKK21zZ2lkICJGQVQgYm9vdCBzZWN0b3Igc2F5cyBjbHVzdGVycyBhcmUgMCBzZWN0b3JzLiAgVGhpcyBpcyB3ZWlyZC4gIgorbXNnc3RyICJTZXRvciBkZSBib290IEZBVCBkaXogcXVlIG9zIGNsdXN0ZXJzIHTqbSAwIHNldG9yZXMuIEVzdHJhbmhvLiAiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjIzNQorIywgZnV6enkKK21zZ2lkICJGaWxlIHN5c3RlbSBpcyBGQVQxMiwgd2hpY2ggaXMgdW5zdXBwb3J0ZWQuIgorbXNnc3RyICJPIHNpc3RlbWEgZGUgYXJxdWl2b3Mg6SBGQVQxMiwgcXVlIG7jbyDpIHN1cG9ydGFkby4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjQxMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGluZm9ybWF0aW9uIHNlY3RvciBoYXMgdGhlIHdyb25nIHNpZ25hdHVyZSAoJXgpLiAgU2VsZWN0IGNhbmNlbCBmb3Igbm93LCAiCisiYW5kIHNlbmQgaW4gYSBidWcgcmVwb3J0LiAgSWYgeW91J3JlIGRlc3BlcmF0ZSwgaXQncyBwcm9iYWJseSBzYWZlIHRvIGlnbm9yZS4iCittc2dzdHIgIiIKKyJPIHNldG9yIGRlIGluZm9ybWHn9WVzIHRlbSB1bWEgYXNzaW5hdHVyYSBpbnbhbGlkYSAoJXgpLiBTZWxlY2lvbmUgY2FuY2VsYXIgIgorImFnb3JhLCBlIG1hbmRlIHVtIHJlbGF083JpbyBkZSBidWcuIFNlIHZvY+ogZXN04SBkZXNlc3BlcmFkbywg6SBwcm924XZlbCBxdWUgIgorInNlamEgc2VndXJvIGlnbm9yYXIuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvdW50LmM6MTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBkaXJlY3RvcnkgZW50cnkgZm9yICVzOiBmaXJzdCBjbHVzdGVyIGlzIHRoZSBlbmQgb2YgZmlsZSBtYXJrZXIuIgorbXNnc3RyICIiCisiRW50cmFkYSBkZSBkaXJldPNyaW8gaW524WxpZGEgcGFyYSAlczogbyBwcmltZWlybyBjbHVzdGVyIOkgbyBmaW0gZG8gIgorIm1hcmNhZG9yIGRlIGFycXVpdm8uIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvdW50LmM6MTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJCYWQgRkFUOiB1bnRlcm1pbmF0ZWQgY2hhaW4gZm9yICVzLiAgWW91IHNob3VsZCBydW4gZG9zZnNjayBvciBzY2FuZGlzay4iCittc2dzdHIgIiIKKyJGQVQgcnVpbTogY2FkZWlhIG7jbyB0ZXJtaW5hZGEgcGFyYSAlcy4gVm9j6iBkZXZlcmlhIHJvZGFyIG8gZG9zZnNjayBvdSBvICIKKyJzY2FuZGlzay4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY291bnQuYzoxNzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJCYWQgRkFUOiBjbHVzdGVyICVkIG91dHNpZGUgZmlsZSBzeXN0ZW0gaW4gY2hhaW4gZm9yICVzLiAgWW91IHNob3VsZCBydW4gIgorImRvc2ZzY2sgb3Igc2NhbmRpc2suIgorbXNnc3RyICIiCisiRkFUIHJ1aW06IGNsdXN0ZXIgJWQgZm9yYSBkbyBzaXN0ZW1hIGRlIGFycXVpdm9zIG5hIGNhZGVpYSBwYXJhICVzLiBWb2PqICIKKyJkZXZlcmlhIHJvZGFyIG8gZG9zZnNjayBvdSBvIHNjYW5kaXNrLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb3VudC5jOjE4NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQmFkIEZBVDogY2x1c3RlciAlZCBpcyBjcm9zcy1saW5rZWQgZm9yICVzLiAgWW91IHNob3VsZCBydW4gZG9zZnNjayBvciAiCisic2NhbmRpc2suIgorbXNnc3RyICIiCisiRkFUIHJ1aW06IG8gY2x1c3RlciAlZCB0ZW0gdW1hIHJlZmVy6m5jaWEgY3J1emFkYSBwYXJhICVzLiBWb2PqIGRldmVyaWEgIgorInJvZGFyIG8gZG9zZnNjayBvdSBvIHNjYW5kaXNrLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb3VudC5jOjIwMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgJWRrLCBidXQgaXQgaGFzICVkIGNsdXN0ZXJzICglZGspLiIKK21zZ3N0ciAiJXMg6SAlZGssIG1hcyB0ZW0gJWQgY2x1c3RlcnMgKCVkaykuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvdW50LmM6MjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZmlsZSAlcyBpcyBtYXJrZWQgYXMgYSBzeXN0ZW0gZmlsZS4gIFRoaXMgbWVhbnMgbW92aW5nIGl0IGNvdWxkIGNhdXNlICIKKyJzb21lIHByb2dyYW1zIHRvIHN0b3Agd29ya2luZy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC90YWJsZS5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRkFUICVkIG1lZGlhICV4IGRvZXNuJ3QgbWF0Y2ggdGhlIGJvb3Qgc2VjdG9yJ3MgbWVkaWEgJXguICBZb3Ugc2hvdWxkICIKKyJwcm9iYWJseSBydW4gc2NhbmRpc2suIgorbXNnc3RyICIiCisiRkFUICVkIG3tZGlhICV4IG7jbyBiYXRlIGNvbSBvIHNldG9yIGRlIGJvb3Qgbe1kaWEgJXguIFZvY+ogZGV2ZXJpYSBleGVjdXRhciAiCisibyBzY2FuZGlzay4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvdGFibGUuYzoyNjkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhdF90YWJsZV9zZXQ6IGNsdXN0ZXIgJWxkIG91dHNpZGUgZmlsZSBzeXN0ZW0iCittc2dzdHIgImZhdF90YWJsZV9zZXQ6IGNsdXN0ZXIgJWxkIGZvcmEgZG8gc2lzdGVtYSBkZSBhcnF1aXZvcyIKKworIzogbGlicGFydGVkL2ZzL2ZhdC90YWJsZS5jOjMwMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmF0X3RhYmxlX2dldDogY2x1c3RlciAlbGQgb3V0c2lkZSBmaWxlIHN5c3RlbSIKK21zZ3N0ciAiZmF0X3RhYmxlX2dldDogY2x1c3RlciAlbGQgZm9yYSBkbyBzaXN0ZW1hIGRlIGFycXVpdm9zIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3RhYmxlLmM6MzQzCittc2dpZCAiZmF0X3RhYmxlX2FsbG9jX2NsdXN0ZXI6IG5vIGZyZWUgY2x1c3RlcnMiCittc2dzdHIgImZhdF90YWJsZV9hbGxvY19jbHVzdGVyOiBu428gaOEgY2x1c3RlcnMgbGl2cmVzIgorCisjOiBsaWJwYXJ0ZWQvZnMvbGludXhfc3dhcC9saW51eF9zd2FwLmM6Mjc1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVbnJlY29nbmlzZWQgb2xkIHN0eWxlIGxpbnV4IHN3YXAgc2lnbmF0dXJlICclMTBzJy4iCittc2dzdHIgIkFzc2luYXR1cmEgbGludXggc3dhcCBu428gcmVjb25oZWNpZGEgJyUxMHMnLiIKKworIzogbGlicGFydGVkL2ZzL2xpbnV4X3N3YXAvbGludXhfc3dhcC5jOjMxOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVW5yZWNvZ25pc2VkIG5ldyBzdHlsZSBsaW51eCBzd2FwIHNpZ25hdHVyZSAnJTEwcycuIgorbXNnc3RyICJBc3NpbmF0dXJhIGxpbnV4IHN3YXAgbuNvIHJlY29uaGVjaWRhICclMTBzJy4iCisKKyM6IGxpYnBhcnRlZC9mcy9saW51eF9zd2FwL2xpbnV4X3N3YXAuYzozNTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVucmVjb2duaXNlZCBzd3N1c3AgbGludXggc3dhcCBzaWduYXR1cmUgJyU5cycuIgorbXNnc3RyICJBc3NpbmF0dXJhIGxpbnV4IHN3YXAgbuNvIHJlY29uaGVjaWRhICclMTBzJy4iCisKKyM6IGxpYnBhcnRlZC9mcy9saW51eF9zd2FwL2xpbnV4X3N3YXAuYzo0MzQKK21zZ2lkICJUb28gbWFueSBiYWQgcGFnZXMuIgorbXNnc3RyICJNdWl0YXMgcOFnaW5hcyBpbnbhbGlkYXMuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2FkdmZzLmM6MTIxIGxpYnBhcnRlZC9mcy9oZnMvYWR2ZnNfcGx1cy5jOjEyMgorIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjQxNCBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NTA4CisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo1MzkgbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NjU4CisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo3NzIKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gY29udGFpbnMgZXJyb3JzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2FkdmZzX3BsdXMuYzoyODcKK21zZ2lkICJCYWQgYmxvY2tzIGNvdWxkIG5vdCBiZSByZWFkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2NhY2hlLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUcnlpbmcgdG8gcmVnaXN0ZXIgYW4gZXh0ZW50IHN0YXJ0aW5nIGF0IGJsb2NrIDB4JVgsIGJ1dCBhbm90aGVyIG9uZSBhbHJlYWR5ICIKKyJleGlzdHMgYXQgdGhpcyBwb3NpdGlvbi4gIFlvdSBzaG91bGQgY2hlY2sgdGhlIGZpbGUgc3lzdGVtISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2NhY2hlLmM6MjE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUcnlpbmcgdG8gbW92ZSBhbiBleHRlbnQgZnJvbSBibG9jayBPeCVYIHRvIGJsb2NrIE94JVgsIGJ1dCBhbm90aGVyIG9uZSAiCisiYWxyZWFkeSBleGlzdHMgYXQgdGhpcyBwb3NpdGlvbi4gIFRoaXMgc2hvdWxkIG5vdCBoYXBwZW4hIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZS5jOjE0MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgdXBkYXRlIHRoZSBleHRlbnQgY2FjaGUgZm9yIEhGUyBmaWxlIHdpdGggQ05JRCAlWC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlLmM6MTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyB0byByZWFkIEhGUyBmaWxlIHdpdGggQ05JRCAlWCBiZWhpbmQgRU9GLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGUuYzoxOTAgbGlicGFydGVkL2ZzL2hmcy9maWxlLmM6MjIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIHNlY3RvciAlbGxpIG9mIEhGUyBmaWxlIHdpdGggQ05JRCAlWC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlLmM6MjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyB0byB3cml0ZSBIRlMgZmlsZSB3aXRoIENOSUQgJVggYmVoaW5kIEVPRi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlX3BsdXMuYzoxNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHVwZGF0ZSB0aGUgZXh0ZW50IGNhY2hlIGZvciBIRlMrIGZpbGUgd2l0aCBDTklEICVYLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGVfcGx1cy5jOjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgdG8gcmVhZCBIRlMrIGZpbGUgd2l0aCBDTklEICVYIGJlaGluZCBFT0YuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZV9wbHVzLmM6MjEzIGxpYnBhcnRlZC9mcy9oZnMvZmlsZV9wbHVzLmM6MjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIHNlY3RvciAlbGxpIG9mIEhGUysgZmlsZSB3aXRoIENOSUQgJVguIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZV9wbHVzLmM6MjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyB0byB3cml0ZSBIRlMrIGZpbGUgd2l0aCBDTklEICVYIGJlaGluZCBFT0YuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MjMyCittc2dpZCAiU29ycnksIEhGUyBjYW5ub3QgYmUgcmVzaXplZCB0aGF0IHdheSB5ZXQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MjYyIGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NjQxCittc2dpZCAiRGF0YSByZWxvY2F0aW9uIGhhcyBmYWlsZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MjgxCittc2dpZCAiRGF0YSByZWxvY2F0aW9uIGxlZnQgc29tZSBkYXRhIGluIHRoZSBlbmQgb2YgdGhlIHZvbHVtZS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzozMjAKKyMsIGZ1enp5Cittc2dpZCAid3JpdGluZyBIRlMgTWFzdGVyIERpcmVjdG9yeSBCbG9jayIKK21zZ3N0ciAiRXJybyBlc2NyZXZlbmRvIG5vIGRpcmV083JpbyByYWl6LiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo0NjgKK21zZ2lkICJObyB2YWxpZCBIRlNbK1hdIHNpZ25hdHVyZSBoYXMgYmVlbiBmb3VuZCB3aGlsZSBvcGVuaW5nLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjQ3OAorIywgYy1mb3JtYXQKK21zZ2lkICJWZXJzaW9uICVkIG9mIEhGUysgaXNuJ3Qgc3VwcG9ydGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICJWZXJzaW9uICVkIG9mIEhGU1ggaXNuJ3Qgc3VwcG9ydGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjY3MgorbXNnaWQgIkRhdGEgcmVsb2NhdGlvbiBsZWZ0IHNvbWUgZGF0YSBhdCB0aGUgZW5kIG9mIHRoZSB2b2x1bWUuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NzIwCisjLCBmdXp6eQorbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdGhlIGFsbG9jYXRpb24gZmlsZS4iCittc2dzdHIgIkVycm8gZXNjcmV2ZW5kbyBubyBkaXJldPNyaW8gcmFpei4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NzM1Cittc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0aGUgY29tcGF0aWJpbGl0eSBwYXJ0IG9mIHRoZSBhbGxvY2F0aW9uIGZpbGUuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NzUwCittc2dpZCAid3JpdGluZyBIRlMrIFZvbHVtZSBIZWFkZXIiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo4NTAKK21zZ2lkICJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBsb29raW5nIGZvciB0aGUgbWFuZGF0b3J5IGJhZCBibG9ja3MgZmlsZS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo5MDQKK21zZ2lkICIiCisiSXQgc2VlbXMgdGhlcmUgaXMgYW4gZXJyb3IgaW4gdGhlIEhGUyB3cmFwcGVyOiB0aGUgYmFkIGJsb2NrcyBmaWxlIGRvZXNuJ3QgIgorImNvbnRhaW4gdGhlIGVtYmVkZGVkIEhGUysgdm9sdW1lLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjk0MAorbXNnaWQgIlNvcnJ5LCBIRlMrIGNhbm5vdCBiZSByZXNpemVkIHRoYXQgd2F5IHlldC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo5NzUKK21zZ2lkICJzaHJpbmtpbmcgZW1iZWRkZWQgSEZTKyB2b2x1bWUiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo5OTEKK21zZ2lkICJSZXNpemluZyB0aGUgSEZTKyB2b2x1bWUgaGFzIGZhaWxlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo5OTgKK21zZ2lkICJzaHJpbmtpbmcgSEZTIHdyYXBwZXIiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzoxMDA3Cittc2dpZCAiVXBkYXRpbmcgdGhlIEhGUyB3cmFwcGVyIGhhcyBmYWlsZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MTEwOSBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjExOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgaXMgbm90IGEgcmVhbCAlcyBjaGVjay4gIFRoaXMgaXMgZ29pbmcgdG8gZXh0cmFjdCBzcGVjaWFsIGxvdyBsZXZlbCAiCisiZmlsZXMgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MTU1Cittc2dpZCAiQmFkIGJsb2NrIGxpc3QgaGVhZGVyIGNoZWNrc3VtLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzoxNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkludmFsaWQgc2l6ZSBvZiBhIHRyYW5zYWN0aW9uIGJsb2NrIHdoaWxlIHJlcGxheWluZyB0aGUgam91cm5hbCAoJWkgYnl0ZXMpLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzoyNjAKK21zZ2lkICIiCisiSm91cm5hbCBzdG9yZWQgb3V0c2lkZSBvZiB0aGUgdm9sdW1lIGFyZSBub3Qgc3VwcG9ydGVkLiAgVHJ5IHRvIGRlc2FjdGl2YXRlICIKKyJ0aGUgam91cm5hbCBhbmQgcnVuIFBhcnRlZCBhZ2Fpbi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MjcxCisjLCBmdXp6eQorbXNnaWQgIkpvdXJuYWwgb2Zmc2V0IG9yIHNpemUgaXMgbm90IG11bHRpcGxlIG9mIHRoZSBzZWN0b3Igc2l6ZS4iCittc2dzdHIgIiIKKyJPIGNsdXN0ZXIgaW5pY2lhIGVtIGRlbHRhID0gJWQsIHF1ZSBu428g6SB1bSBt+mx0aXBsbyBkbyB0YW1hbmhvIGRlIGNsdXN0ZXIgJSIKKyJkLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MjkyCittc2dpZCAiSW5jb3JyZWN0IG1hZ2ljIHZhbHVlcyBpbiB0aGUgam91cm5hbCBoZWFkZXIuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjMwMgorbXNnaWQgIkpvdXJuYWwgc2l6ZSBtaXNtYXRjaCBiZXR3ZWVuIGpvdXJuYWwgaW5mbyBibG9jayBhbmQgam91cm5hbCBoZWFkZXIuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjMxNAorIywgZnV6enkKK21zZ2lkICJTb21lIGhlYWRlciBmaWVsZHMgYXJlIG5vdCBtdWx0aXBsZSBvZiB0aGUgc2VjdG9yIHNpemUuIgorbXNnc3RyICIiCisiTyBjbHVzdGVyIGluaWNpYSBlbSBkZWx0YSA9ICVkLCBxdWUgbuNvIOkgdW0gbfpsdGlwbG8gZG8gdGFtYW5obyBkZSBjbHVzdGVyICUiCisiZC4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjMyMworbXNnaWQgIiIKKyJUaGUgc2VjdG9yIHNpemUgc3RvcmVkIGluIHRoZSBqb3VybmFsIGlzIG5vdCA1MTIgYnl0ZXMuICBQYXJ0ZWQgb25seSAiCisic3VwcG9ydHMgNTEyIGJ5dGVzIGxlbmd0aCBzZWN0b3JzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozMzUKK21zZ2lkICJCYWQgam91cm5hbCBjaGVja3N1bS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MzUzCittc2dpZCAiIgorIlRoZSBqb3VybmFsIGlzIG5vdCBlbXB0eS4gIFBhcnRlZCBtdXN0IHJlcGxheSB0aGUgdHJhbnNhY3Rpb25zIGJlZm9yZSAiCisib3BlbmluZyB0aGUgZmlsZSBzeXN0ZW0uICBUaGlzIHdpbGwgbW9kaWZ5IHRoZSBmaWxlIHN5c3RlbS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MzgxCittc2dpZCAiIgorIlRoZSB2b2x1bWUgaGVhZGVyIG9yIHRoZSBtYXN0ZXIgZGlyZWN0b3J5IGJsb2NrIGhhcyBjaGFuZ2VkIHdoaWxlIHJlcGxheWluZyAiCisidGhlIGpvdXJuYWwuICBZb3Ugc2hvdWxkIHJlc3RhcnQgUGFydGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3Byb2JlLmM6NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBhcnRlZCBjYW4ndCB1c2UgSEZTIGZpbGUgc3lzdGVtcyBvbiBkaXNrcyB3aXRoIGEgc2VjdG9yIHNpemUgbm90IGVxdWFsIHRvICUiCisiZCBieXRlcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjE1MSBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzoxNTUKK21zZ2lkICJBbiBleHRlbnQgaGFzIG5vdCBiZWVuIHJlbG9jYXRlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjI1MSBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzozMDcKK21zZ2lkICIiCisiQSByZWZlcmVuY2UgdG8gYW4gZXh0ZW50IGNvbWVzIGZyb20gYSBwbGFjZSBpdCBzaG91bGQgbm90LiAgWW91IHNob3VsZCBjaGVjayAiCisidGhlIGZpbGUgc3lzdGVtISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6MzgxCittc2dpZCAiVGhpcyBIRlMgdm9sdW1lIGhhcyBubyBjYXRhbG9nIGZpbGUuICBUaGlzIGlzIHZlcnkgdW51c3VhbCEiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjQ3NQorbXNnaWQgIlRoaXMgSEZTIHZvbHVtZSBoYXMgbm8gZXh0ZW50cyBvdmVyZmxvdyBmaWxlLiAgVGhpcyBpcyBxdWl0ZSB1bnVzdWFsISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NTE3IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjY2OAorbXNnaWQgIiIKKyJUaGUgZXh0ZW50cyBvdmVyZmxvdyBmaWxlIHNob3VsZCBub3QgY29udGFpbiBpdHMgb3duIGV4dGVudHMhICBZb3Ugc2hvdWxkICIKKyJjaGVjayB0aGUgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzo1NzQgbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6ODQ3CisjLCBmdXp6eQorbXNnaWQgIkNvdWxkIG5vdCBjYWNoZSB0aGUgZmlsZSBzeXN0ZW0gaW4gbWVtb3J5LiIKK21zZ3N0ciAiTuNvIGZvaSBwb3Nz7XZlbCBkZXRlY3RhciBvIHNpc3RlbWEgZGUgYXJxdWl2b3MuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NjM1IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjkwOAorbXNnaWQgIkJhZCBibG9ja3MgbGlzdCBjb3VsZCBub3QgYmUgbG9hZGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NjQ5IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjkyNAorbXNnaWQgIkFuIGVycm9yIG9jY3VycmVkIGR1cmluZyBleHRlbnQgcmVsb2NhdGlvbi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NDk1Cittc2dpZCAiVGhpcyBIRlMrIHZvbHVtZSBoYXMgbm8gY2F0YWxvZyBmaWxlLiAgVGhpcyBpcyB2ZXJ5IHVudXN1YWwhIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjYxOQorbXNnaWQgIlRoaXMgSEZTKyB2b2x1bWUgaGFzIG5vIGV4dGVudHMgb3ZlcmZsb3cgZmlsZS4gIFRoaXMgaXMgcXVpdGUgdW51c3VhbCEiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjk0Cittc2dpZCAiZGlzcGxheXMgdGhpcyBoZWxwIG1lc3NhZ2UiCittc2dzdHIgIm1vc3RyYSBlc3RhIG1lbnNhZ2VtIGRlIGFqdWRhIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6OTUKK21zZ2lkICJsaXN0cyBwYXJ0aXRpb24gbGF5b3V0IG9uIGFsbCBibG9jayBkZXZpY2VzIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo5NgorbXNnaWQgImRpc3BsYXlzIG1hY2hpbmUgcGFyc2VhYmxlIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6OTcKK21zZ2lkICJuZXZlciBwcm9tcHRzIGZvciB1c2VyIGludGVydmVudGlvbiIKK21zZ3N0ciAibnVuY2EgcGVkZSBpbnRlcnZlbufjbyBkbyB1c3XhcmlvIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6OTgKK21zZ2lkICJkaXNwbGF5cyB0aGUgdmVyc2lvbiIKK21zZ3N0ciAibW9zdHJhIGEgdmVyc+NvIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTExCisjLCBmdXp6eQorbXNnaWQgIiIKKyJOVU1CRVIgaXMgdGhlIHBhcnRpdGlvbiBudW1iZXIgdXNlZCBieSBMaW51eC4gIE9uIE1TLURPUyBkaXNrIGxhYmVscywgdGhlICIKKyJwcmltYXJ5IHBhcnRpdGlvbnMgbnVtYmVyIGZyb20gMSB0byA0LCBsb2dpY2FsIHBhcnRpdGlvbnMgZnJvbSA1IG9ud2FyZHMuXG4iCittc2dzdHIgIiIKKyJNSU5PUiDpIG8gbvptZXJvIGRhIHBhcnRp5+NvIHVzYWRvIHBlbG8gbGludXguIEVtIHLzdHVsb3MgZGUgZGlzY28gbXNkb3MsIGFzICIKKyJwYXJ0aef1ZXMgcHJpbeFyaWFzIHPjbyBkZSAxLTQsIGUgcGFydGnn9WVzIGzzZ2ljYXMgZGUgNSBhZGlhbnRlLlxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTE0Cittc2dpZCAiTEFCRUwtVFlQRSBpcyBvbmUgb2Y6ICIKK21zZ3N0ciAiVElQT19ST1RVTE8g6SB1bSBkZToiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMTUKK21zZ2lkICJGTEFHIGlzIG9uZSBvZjogIgorbXNnc3RyICJGTEFHIOkgdW0gZGU6ICIKKworIzogcGFydGVkL3BhcnRlZC5jOjExNgorIywgZnV6enkKK21zZ2lkICJVTklUIGlzIG9uZSBvZjogIgorbXNnc3RyICJGTEFHIOkgdW0gZGU6ICIKKworIzogcGFydGVkL3BhcnRlZC5jOjExNworbXNnaWQgIlBBUlQtVFlQRSBpcyBvbmUgb2Y6IHByaW1hcnksIGxvZ2ljYWwsIGV4dGVuZGVkXG4iCittc2dzdHIgIlRJUE8tUEFSVCDpIHVtIGRlOiBwcmltYXJ5LCBsb2dpY2FsLCBleHRlbmRlZFxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTE5Cittc2dpZCAiRlMtVFlQRSBpcyBvbmUgb2Y6ICIKK21zZ3N0ciAiVElQTy1GUyDpIHVtIGRlOiAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjAKK21zZ2lkICIiCisiU1RBUlQgYW5kIEVORCBhcmUgZGlzayBsb2NhdGlvbnMsIHN1Y2ggYXMgNEdCIG9yIDEwJS4gIE5lZ2F0aXZlIHZhbHVlcyBjb3VudCAiCisiZnJvbSB0aGUgZW5kIG9mIHRoZSBkaXNrLiAgRm9yIGV4YW1wbGUsIC0xcyBzcGVjaWZpZXMgZXhhY3RseSB0aGUgbGFzdCAiCisic2VjdG9yLlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjMKK21zZ2lkICJTVEFURSBpcyBvbmUgb2Y6IG9uLCBvZmZcbiIKK21zZ3N0ciAiRVNUQURPIOkgdW0gZGU6IG9uLCBvZmZcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyNAorbXNnaWQgIkRFVklDRSBpcyB1c3VhbGx5IC9kZXYvaGRhIG9yIC9kZXYvc2RhXG4iCittc2dzdHIgIkRJU1BPU0lUSVZPIOkgdXN1YWxtZW50ZSAvZGV2L2hkYSBvdSAvZGV2L3NkYVxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTI1Cittc2dpZCAiTkFNRSBpcyBhbnkgd29yZCB5b3Ugd2FudFxuIgorbXNnc3RyICJOQU1FIOkgcXVhbHF1ZXIgcGFsYXZyYSBxdWUgZGVzZWphclxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTI2Cittc2dpZCAiVGhlIHBhcnRpdGlvbiBtdXN0IGhhdmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgRlMtVFlQRXM6ICIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTMwCittc2dpZCAiIgorIkNvcHlyaWdodCAoQykgMTk5OCAtIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuXG4iCisiVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmUsIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLlxuIgorIlxuIgorIlRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuIgorImJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4iCisiTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuIgorIkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjE3NgorIywgYy1mb3JtYXQKK21zZ2lkICIlMC5mJSVcdCh0aW1lIGxlZnQgJS4yZDolLjJkKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQYXJ0aXRpb24gJXMgaXMgYmVpbmcgdXNlZC4gWW91IG11c3QgdW5tb3VudCBpdCBiZWZvcmUgeW91IG1vZGlmeSBpdCB3aXRoICIKKyJQYXJ0ZWQuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGFydGl0aW9uKHMpIG9uICVzIGFyZSBiZWluZyB1c2VkLiIKK21zZ3N0ciAiUGFydGnn428o9WVzKSBlbSAlcyBlc3ThKONvKSBzZW5kbyB1dGlsaXphZGEocykuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIzCittc2dpZCAiIgorIlRoZSBleGlzdGluZyBmaWxlIHN5c3RlbSB3aWxsIGJlIGRlc3Ryb3llZCBhbmQgYWxsIGRhdGEgb24gdGhlIHBhcnRpdGlvbiAiCisid2lsbCBiZSBsb3N0LiBEbyB5b3Ugd2FudCB0byBjb250aW51ZT8iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIzNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGV4aXN0aW5nIGRpc2sgbGFiZWwgb24gJXMgd2lsbCBiZSBkZXN0cm95ZWQgYW5kIGFsbCBkYXRhIG9uIHRoaXMgZGlzayAiCisid2lsbCBiZSBsb3N0LiBEbyB5b3Ugd2FudCB0byBjb250aW51ZT8iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjQ1OCBwYXJ0ZWQvcGFydGVkLmM6NjUyIHBhcnRlZC9wYXJ0ZWQuYzoxMDQ0CisjOiBwYXJ0ZWQvcGFydGVkLmM6MTEyOCBwYXJ0ZWQvcGFydGVkLmM6MTc3MSBwYXJ0ZWQvcGFydGVkLmM6MTg1MgorIzogcGFydGVkL3BhcnRlZC5jOjE5MDAKKyMsIGZ1enp5Cittc2dpZCAiUGFydGl0aW9uIG51bWJlcj8iCittc2dzdHIgIkEgcGFydGnn428gZXN04SBzZW5kbyB1dGlsaXphZGEuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NTAwCittc2dpZCAiU291cmNlIGRldmljZT8iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjUwNAorIywgZnV6enkKK21zZ2lkICJTb3VyY2UgcGFydGl0aW9uIG51bWJlcj8iCittc2dzdHIgIkEgcGFydGnn428gb3JpZ2VtIG7jbyBleGlzdGUuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NTA5CisjLCBmdXp6eQorbXNnaWQgIkNhbid0IGNvcHkgYW4gZXh0ZW5kZWQgcGFydGl0aW9uLiIKK21zZ3N0ciAiTuNvIHBvc3NvIGNvcGlhciBwYXJ0aef1ZXMgZXh0ZW5kaWRhcy4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo1MTUKKyMsIGZ1enp5Cittc2dpZCAiRGVzdGluYXRpb24gcGFydGl0aW9uIG51bWJlcj8iCittc2dzdHIgIkEgcGFydGnn428gZGVzdGlubyBlc3ThIHNlbmRvIHV0aWxpemFkYS4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo2MTUKKyMsIGZ1enp5Cittc2dpZCAiTmV3IGRpc2sgbGFiZWwgdHlwZT8iCittc2dzdHIgIlRpcG8gZGUgcvN0dWxvIGRlIGRpc2NvOiAlc1xuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NjU2CisjLCBmdXp6eQorbXNnaWQgIkZpbGUgc3lzdGVtPyIKK21zZ3N0ciAiU2lzdGVtYSBkZSBhcnF1aXZvcyAgIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NzA3IHBhcnRlZC9wYXJ0ZWQuYzo4NzgKKyMsIGZ1enp5Cittc2dpZCAiUGFydGl0aW9uIHR5cGU/IgorbXNnc3RyICJBIHBhcnRp5+NvIG7jbyBleGlzdGUuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NzE0IHBhcnRlZC9wYXJ0ZWQuYzo4ODUgcGFydGVkL3BhcnRlZC5jOjExMzEKKyMsIGZ1enp5Cittc2dpZCAiUGFydGl0aW9uIG5hbWU/IgorbXNnc3RyICJBIHBhcnRp5+NvIG7jbyBleGlzdGUuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NzIyIHBhcnRlZC9wYXJ0ZWQuYzo4OTUKKyMsIGZ1enp5Cittc2dpZCAiRmlsZSBzeXN0ZW0gdHlwZT8iCittc2dzdHIgIlNpc3RlbWEgZGUgYXJxdWl2b3MgICIKKworIzogcGFydGVkL3BhcnRlZC5jOjcyOSBwYXJ0ZWQvcGFydGVkLmM6ODk3IHBhcnRlZC9wYXJ0ZWQuYzoxMDU5CisjOiBwYXJ0ZWQvcGFydGVkLmM6MTcyNSBwYXJ0ZWQvcGFydGVkLmM6MTc4MAorbXNnaWQgIlN0YXJ0PyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NzMxIHBhcnRlZC9wYXJ0ZWQuYzo5MDAgcGFydGVkL3BhcnRlZC5jOjEwNjIKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNzI3IHBhcnRlZC9wYXJ0ZWQuYzoxNzgyCittc2dpZCAiRW5kPyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NzY5IHBhcnRlZC9wYXJ0ZWQuYzo5MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSByZXF1ZXN0ZWQgYSBwYXJ0aXRpb24gZnJvbSAlcyB0byAlcy5cbiIKKyJUaGUgY2xvc2VzdCBsb2NhdGlvbiB3ZSBjYW4gbWFuYWdlIGlzICVzIHRvICVzLiAgSXMgdGhpcyBzdGlsbCBhY2NlcHRhYmxlIHRvICIKKyJ5b3U/IgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo4OTAKK21zZ2lkICJBbiBleHRlbmRlZCBwYXJ0aXRpb24gY2Fubm90IGhvbGQgYSBmaWxlIHN5c3RlbS4gIERpZCB5b3Ugd2FudCBta3BhcnQ/IgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMDUwCisjLCBmdXp6eQorbXNnaWQgIkNhbid0IG1vdmUgYW4gZXh0ZW5kZWQgcGFydGl0aW9uLiIKK21zZ3N0ciAiTuNvIHBvc3NvIG1vdmVyIHBhcnRp5/VlcyBleHRlbmRpZGFzLiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEwNzkKK21zZ2lkICJDYW4ndCBtb3ZlIGEgcGFydGl0aW9uIG9udG8gaXRzZWxmLiAgVHJ5IHVzaW5nIHJlc2l6ZSwgcGVyaGFwcz8iCittc2dzdHIgIiIKKyJO428gcG9zc28gbW92ZXIgYSBwYXJ0aefjbyBzb2JyZSBlbGEgbWVzbWEuIFRhbHZleiBxdWVpcmEgcmVkaW1lbnNpb25hcj8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIk1pbm9yOiAlZFxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjI4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJGbGFnczogJXNcbiIKK21zZ3N0ciAiU2luYWxpemFkb3IiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjI5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJGaWxlIFN5c3RlbTogJXNcbiIKK21zZ3N0ciAiU2lzdGVtYSBkZSBhcnF1aXZvcyAgIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIzMAorbXNnaWQgIlNpemU6ICAgICAgICAgIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjM1Cittc2dpZCAiTWluaW11bSBzaXplOiAiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMzgKK21zZ2lkICJNYXhpbXVtIHNpemU6ICIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJNb2RlbDogJXMgKCVzKVxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMzY0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJEaXNrICVzOiAlc1xuIgorbXNnc3RyICIlcyAgJXMgICVzIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTM2NQorIywgYy1mb3JtYXQKK21zZ2lkICJTZWN0b3Igc2l6ZSAobG9naWNhbC9waHlzaWNhbCk6ICVsbGRCLyVsbGRCXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEzODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQklPUyBjeWxpbmRlcixoZWFkLHNlY3RvciBnZW9tZXRyeTogJWQsJWQsJWQuICBFYWNoIGN5bGluZGVyIGlzICVzLlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMzkyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJQYXJ0aXRpb24gVGFibGU6ICVzXG4iCittc2dzdHIgIlRhYmVsYSBkZSBwYXJ0aef1ZXMgaW524WxpZGEgZW0gJXMiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDA2IHBhcnRlZC9wYXJ0ZWQuYzoxNDA5Cittc2dpZCAiTnVtYmVyIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDA2IHBhcnRlZC9wYXJ0ZWQuYzoxNDA5Cittc2dpZCAiU3RhcnQiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MDcgcGFydGVkL3BhcnRlZC5jOjE0MTAKK21zZ2lkICJFbmQiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MTAKKyMsIGZ1enp5Cittc2dpZCAiU2l6ZSIKK21zZ3N0ciAicmVzaXplIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQxNAorbXNnaWQgIlR5cGUiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MTYKKyMsIGZ1enp5Cittc2dpZCAiRmlsZSBzeXN0ZW0iCittc2dzdHIgIlNpc3RlbWEgZGUgYXJxdWl2b3MgICIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MTkKKyMsIGZ1enp5Cittc2dpZCAiTmFtZSIKK21zZ3N0ciAibmFtZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MjEKK21zZ2lkICJGbGFncyIKK21zZ3N0ciAiU2luYWxpemFkb3IiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDc3Cittc2dpZCAiRnJlZSBTcGFjZSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTYyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQSAlcyAlcyBwYXJ0aXRpb24gd2FzIGZvdW5kIGF0ICVzIC0+ICVzLiAgRG8geW91IHdhbnQgdG8gYWRkIGl0IHRvIHRoZSAiCisicGFydGl0aW9uIHRhYmxlPyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTY2MworbXNnaWQgInNlYXJjaGluZyBmb3IgZmlsZSBzeXN0ZW1zIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxODc3CisjLCBmdXp6eQorbXNnaWQgIk5ldyBkZXZpY2U/IgorbXNnc3RyICJOZW5odW0gZGlzcG9zaXRpdm8gZW5jb250cmFkbyIKKworIzogcGFydGVkL3BhcnRlZC5jOjE5MDIKK21zZ2lkICJGbGFnIHRvIEludmVydD8iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjE5MDcKK21zZ2lkICJOZXcgc3RhdGU/IgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxOTQ0Cittc2dpZCAiVW5pdD8iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIwOTMKK21zZ2lkICJjaGVjayIKK21zZ3N0ciAiY2hlY2siCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMDk2CisjLCBmdXp6eQorbXNnaWQgIiIKKyJjaGVjayBOVU1CRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIGEgc2ltcGxlIGNoZWNrIG9uIHRoZSBmaWxlIHN5c3RlbSIKK21zZ3N0ciAiIgorImNoZWNrIE1JTk9SICAgICAgICAgICAgICAgICAgIGZheiB1bSB0ZXN0ZSBzaW1wbGVzIG5vIHNpc3RlbWEgZGUgYXJxdWl2b3MiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTAyCittc2dpZCAiY3AiCittc2dzdHIgImNwIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEwNQorIywgZnV6enkKK21zZ2lkICIiCisiY3AgW0ZST00tREVWSUNFXSBGUk9NLU5VTUJFUiBUTy1OVU1CRVIgICBjb3B5IGZpbGUgc3lzdGVtIHRvIGFub3RoZXIgIgorInBhcnRpdGlvbiIKK21zZ3N0ciAiIgorImNwIFtGUk9NLURFVklDRV0gRlJPTS1NSU5PUiBUTy1NSU5PUiAgICAgIGNvcGlhIG8gc2lzdGVtYSBkZSBhcnF1aXZvcyBwYXJhICIKKyJvdXRyYSBwYXJ0aefjbyIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMTEKK21zZ2lkICJoZWxwIgorbXNnc3RyICJoZWxwIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjExNAorIywgZnV6enkKK21zZ2lkICIiCisiaGVscCBbQ09NTUFORF0gICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCBnZW5lcmFsIGhlbHAsIG9yIGhlbHAgb24gIgorIkNPTU1BTkQiCittc2dzdHIgImhlbHAgW0NPTUFORE9dICAgICAgICAgICAgICAgIG1vc3RyYSBhanVkYSBnZXJhbCwgb3UgYWp1ZGEgYSBDT01BTkRPIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEyMAorbXNnaWQgIm1rbGFiZWwiCittc2dzdHIgIm1rbGFiZWwiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTIwCisjLCBmdXp6eQorbXNnaWQgIm1rdGFibGUiCittc2dzdHIgIm1rbGFiZWwiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTIzCisjLCBmdXp6eQorbXNnaWQgIiIKKyJta2xhYmVsLG1rdGFibGUgTEFCRUwtVFlQRSAgICAgICAgICAgICAgIGNyZWF0ZSBhIG5ldyBkaXNrbGFiZWwgKHBhcnRpdGlvbiAiCisidGFibGUpIgorbXNnc3RyICIiCisibWtsYWJlbCBUSVBPLVJPVFVMTyAgICAgICAgICAgY3JpYSB1bSBub3ZvIHLzdHVsbyAobmEgdGFiZWxhIGRlIHBhcnRp5+NvKSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMjkKK21zZ2lkICJta2ZzIgorbXNnc3RyICJta2ZzIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEzMgorIywgZnV6enkKK21zZ2lkICIiCisibWtmcyBOVU1CRVIgRlMtVFlQRSAgICAgICAgICAgICAgICAgICAgICBtYWtlIGEgRlMtVFlQRSBmaWxlIHN5c3RlbSBvbiAiCisicGFydGl0aXRvbiBOVU1CRVIiCittc2dzdHIgIiIKKyJta2ZzIE1JTk9SIFRJUE8tRlMgICAgICAgICAgICBjcmlhIHVtIHNpc3RlbWEgVElQTy1GUyBuYSBwYXJ0aefjbyBNSU5PUiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMzgKK21zZ2lkICJta3BhcnQiCittc2dzdHIgIm1rcGFydCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNDEKKyMsIGZ1enp5Cittc2dpZCAibWtwYXJ0IFBBUlQtVFlQRSBbRlMtVFlQRV0gU1RBUlQgRU5EICAgICBtYWtlIGEgcGFydGl0aW9uIgorbXNnc3RyICJta3BhcnQgVElQTy1QQVJUIFtGUy1UWVBFXSBJTklDSU8gRklNICAgICBjcmlhIHVtYSBwYXJ0aefjbyIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNDcKKyMsIGZ1enp5Cittc2dpZCAiIgorIidta3BhcnQnIG1ha2VzIGEgcGFydGl0aW9uIHdpdGhvdXQgY3JlYXRpbmcgYSBuZXcgZmlsZSBzeXN0ZW0gb24gdGhlICIKKyJwYXJ0aXRpb24uICBGUy1UWVBFIG1heSBiZSBzcGVjaWZpZWQgdG8gc2V0IGFuIGFwcHJvcHJpYXRlIHBhcnRpdGlvbiBJRC5cbiIKK21zZ3N0ciAiIgorIm1rcGFydCBjcmlhIHVtYSBwYXJ0aefjbyBzZW0gY3JpYXIgdW0gbm92byBzaXN0ZW1hIGRlIGFycXVpdm9zIG5hIHBhcnRp5+NvLiAiCisiVElQTy1GUyBkZXZlIHNlciBlc3BlY2lmaWNhZG8gcGFyYSBwYXJ0aef1ZXMgZGUgZGFkb3MgKGFvIG9wb3N0byBkZSB1bWEgIgorInBhcnRp5+NvIGV4dGVuZGlkYSkuIEVzdGUgY29tYW5kbyDpIPp0aWwgc2Ugdm9j6iBhcGFnb3UgYWNpZGVudGFsbWVudGUgdW1hICIKKyJwYXJ0aefjby5cbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNTIKK21zZ2lkICJta3BhcnRmcyIKK21zZ3N0ciAibWtwYXJ0ZnMiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTU1CisjLCBmdXp6eQorbXNnaWQgIiIKKyJta3BhcnRmcyBQQVJULVRZUEUgRlMtVFlQRSBTVEFSVCBFTkQgICAgIG1ha2UgYSBwYXJ0aXRpb24gd2l0aCBhIGZpbGUgc3lzdGVtIgorbXNnc3RyICJta3BhcnRmcyBUSVBPLVBBUlQgVElQTy1GUyBJTklDSU8gRklNICAgICBjcmlhIHVtYSBwYXJ0aefjbyBUSVBPLUZTIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE2MQorbXNnaWQgIm1vdmUiCittc2dzdHIgIm1vdmUiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTY0CisjLCBmdXp6eQorbXNnaWQgIm1vdmUgTlVNQkVSIFNUQVJUIEVORCAgICAgICAgICAgICAgICAgICAgbW92ZSBwYXJ0aXRpb24gTlVNQkVSIgorbXNnc3RyICJtb3ZlIE1JTk9SIElOSUNJTyBbRklNXSAgICAgICAgIG1vdmUgYSBwYXJ0aefjbyBNSU5PUiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNjkKK21zZ2lkICJuYW1lIgorbXNnc3RyICJuYW1lIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE3MgorIywgZnV6enkKK21zZ2lkICJuYW1lIE5VTUJFUiBOQU1FICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgcGFydGl0aW9uIE5VTUJFUiBhcyBOQU1FIgorbXNnc3RyICJuYW1lIE1JTk9SIE5BTUUgICAgICAgICAgICAgICByZW5vbWVpYSBhIHBhcnRp5+NvIE1JTk9SIHBhcmEgTkFNRSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNzcKK21zZ2lkICJwcmludCIKK21zZ3N0ciAicHJpbnQiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTgwCittc2dpZCAiIgorInByaW50IFtkZXZpY2VzfGZyZWV8bGlzdCxhbGx8TlVNQkVSXSAgICAgZGlzcGxheSB0aGUgcGFydGl0aW9uIHRhYmxlLCAiCisiYXZhaWxhYmxlIGRldmljZXMsIGZyZWUgc3BhY2UsIGFsbCBmb3VuZCBwYXJ0aXRpb25zLCBvciBhIHBhcnRpY3VsYXIgIgorInBhcnRpdGlvbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE4NQorbXNnaWQgIiIKKyJXaXRob3V0IGFyZ3VtZW50cywgJ3ByaW50JyBkaXNwbGF5cyB0aGUgZW50aXJlIHBhcnRpdGlvbiB0YWJsZS4gSG93ZXZlciB3aXRoICIKKyJ0aGUgZm9sbG93aW5nIGFyZ3VtZW50cyBpdCBwZXJmb3JtcyB2YXJpb3VzIG90aGVyIGFjdGlvbnMuXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxODcKK21zZ2lkICIgIGRldmljZXMgICA6IGRpc3BsYXkgYWxsIGFjdGl2ZSBibG9jayBkZXZpY2VzXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxODgKK21zZ2lkICIiCisiICBmcmVlICAgICAgOiBkaXNwbGF5IGluZm9ybWF0aW9uIGFib3V0IGZyZWUgdW5wYXJ0aXRpb25lZCBzcGFjZSBvbiB0aGUgIgorImN1cnJlbnQgYmxvY2sgZGV2aWNlXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxOTAKKyMsIGZ1enp5Cittc2dpZCAiIgorIiAgbGlzdCwgYWxsIDogZGlzcGxheSB0aGUgcGFydGl0aW9uIHRhYmxlcyBvZiBhbGwgYWN0aXZlIGJsb2NrIGRldmljZXNcbiIKK21zZ3N0ciAicHJpbnQgICAgICAgICAgICAgICAgICAgICAgICAgbW9zdHJhIGEgdGFiZWxhIGRlIHBhcnRp5/VlcyIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxOTEKK21zZ2lkICIiCisiICBOVU1CRVIgICAgOiBkaXNwbGF5IG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBwYXJ0aWN1bGFyICIKKyJwYXJ0aXRpb25cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE5NgorbXNnaWQgInF1aXQiCittc2dzdHIgInF1aXQiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTk5CisjLCBmdXp6eQorbXNnaWQgInF1aXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCBwcm9ncmFtIgorbXNnc3RyICJxdWl0ICAgICAgICAgICAgICAgICAgICAgICAgICBzYWlyIGRvIHByb2dyYW1hIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIwNAorIywgZnV6enkKK21zZ2lkICJyZXNjdWUiCittc2dzdHIgInJlc2l6ZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMDcKKyMsIGZ1enp5Cittc2dpZCAiIgorInJlc2N1ZSBTVEFSVCBFTkQgICAgICAgICAgICAgICAgICAgICAgICAgcmVzY3VlIGEgbG9zdCBwYXJ0aXRpb24gbmVhciBTVEFSVCAiCisiYW5kIEVORCIKK21zZ3N0ciAicHJpbnQgICAgICAgICAgICAgICAgICAgICAgICAgbW9zdHJhIGEgdGFiZWxhIGRlIHBhcnRp5/VlcyIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMTMKK21zZ2lkICJyZXNpemUiCittc2dzdHIgInJlc2l6ZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMTYKKyMsIGZ1enp5Cittc2dpZCAiIgorInJlc2l6ZSBOVU1CRVIgU1RBUlQgRU5EICAgICAgICAgICAgICAgICAgcmVzaXplIHBhcnRpdGlvbiBOVU1CRVIgYW5kIGl0cyAiCisiZmlsZSBzeXN0ZW0iCittc2dzdHIgInJlc2l6ZSBNSU5PUiBJTklDSU8gRklNICAgICAgIHJlZGltZW5zaW9uYSBhIHBhcnRp5+NvIE1JTk9SIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIyNAorbXNnaWQgInJtIgorbXNnc3RyICJybSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMjcKKyMsIGZ1enp5Cittc2dpZCAicm0gTlVNQkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcGFydGl0aW9uIE5VTUJFUiIKK21zZ3N0ciAicm0gTUlOT1IgICAgICAgICAgICAgICAgICAgICAgYXBhZ2EgYSBwYXJ0aefjbyBNSU5PUiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMzIKK21zZ2lkICJzZWxlY3QiCittc2dzdHIgInNlbGVjdCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMzUKKyMsIGZ1enp5Cittc2dpZCAic2VsZWN0IERFVklDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9vc2UgdGhlIGRldmljZSB0byBlZGl0IgorbXNnc3RyICJzZWxlY3QgREVWSUNFICAgICAgICAgICAgICAgICBzZWxlY2lvbmEgbyBkaXNwb3NpdGl2byBhIGVkaXRhciIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNDAKK21zZ2lkICJzZXQiCittc2dzdHIgInNldCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNDMKKyMsIGZ1enp5Cittc2dpZCAiIgorInNldCBOVU1CRVIgRkxBRyBTVEFURSAgICAgICAgICAgICAgICAgICAgY2hhbmdlIHRoZSBGTEFHIG9uIHBhcnRpdGlvbiBOVU1CRVIiCittc2dzdHIgInNldCBNSU5PUiBGTEFHIEVTVEFETyAgICAgICAgIG11ZGEgbyBzaW5hbGl6YWRvciBuYSBwYXJ0aefjbyBNSU5PUiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNDkKK21zZ2lkICJ0b2dnbGUiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNTIKK21zZ2lkICIiCisidG9nZ2xlIFtOVU1CRVIgW0ZMQUddXSAgICAgICAgICAgICAgICAgICB0b2dnbGUgdGhlIHN0YXRlIG9mIEZMQUcgb24gIgorInBhcnRpdGlvbiBOVU1CRVIiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNTgKKyMsIGZ1enp5Cittc2dpZCAidW5pdCIKK21zZ3N0ciAicXVpdCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNjEKKyMsIGZ1enp5Cittc2dpZCAidW5pdCBVTklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgdGhlIGRlZmF1bHQgdW5pdCB0byBVTklUIgorbXNnc3RyICJwcmludCAgICAgICAgICAgICAgICAgICAgICAgICBtb3N0cmEgYSB0YWJlbGEgZGUgcGFydGnn9WVzIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI2NgorbXNnaWQgInZlcnNpb24iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNjkKK21zZ2lkICIiCisidmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5IHRoZSB2ZXJzaW9uIG51bWJlciBhbmQgIgorImNvcHlyaWdodCBpbmZvcm1hdGlvbiBvZiBHTlUgUGFydGVkIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjczCittc2dpZCAiIgorIid2ZXJzaW9uJyBkaXNwbGF5cyBjb3B5cmlnaHQgYW5kIHZlcnNpb24gaW5mb3JtYXRpb24gY29ycmVzcG9uZGluZyB0byB0aGlzICIKKyJjb3B5IG9mIEdOVSBQYXJ0ZWRcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjMzNQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1obG1zdl0gW0RFVklDRSBbQ09NTUFORCBbUEFSQU1FVEVSU11dLi4uXVxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMzc5Cittc2dpZCAiTm8gZGV2aWNlIGZvdW5kIgorbXNnc3RyICJOZW5odW0gZGlzcG9zaXRpdm8gZW5jb250cmFkbyIKKworIzogcGFydGVkL3BhcnRlZC5jOjI0MTIKK21zZ2lkICJXQVJOSU5HOiBZb3UgYXJlIG5vdCBzdXBlcnVzZXIuICBXYXRjaCBvdXQgZm9yIHBlcm1pc3Npb25zLiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjQ1MAorbXNnaWQgIllvdSBtYXkgbmVlZCB0byB1cGRhdGUgL2V0Yy9mc3RhYi5cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzoxNjAKK21zZ2lkICJXZWxjb21lIHRvIEdOVSBQYXJ0ZWQhIFR5cGUgJ2hlbHAnIHRvIHZpZXcgYSBsaXN0IG9mIGNvbW1hbmRzLlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjE2MworIywgZnV6enkKK21zZ2lkICIiCisiVXNhZ2U6IHBhcnRlZCBbT1BUSU9OXS4uLiBbREVWSUNFIFtDT01NQU5EIFtQQVJBTUVURVJTXS4uLl0uLi5dXG4iCisiQXBwbHkgQ09NTUFORHMgd2l0aCBQQVJBTUVURVJTIHRvIERFVklDRS4gIElmIG5vIENPTU1BTkQocykgYXJlIGdpdmVuLCBydW4gIgorImluXG4iCisiaW50ZXJhY3RpdmUgbW9kZS5cbiIKK21zZ3N0ciAiIgorIlVzbzogcGFydGVkIFtPUENPRVNdLi4uIFtESVNQT1NJVElWTyBbQ09NQU5ETyBbUEFSQU1FVFJPU10uLi5dLi4uXVxuIgorIkFwbGljYSBDT01BTkRPIGNvbSBQQVJBTUVUUk9TIGVtIERJU1BPU0lUSVZPLiBTZSBu428gZm9yIGRhZG8gbmVuaHVtXG4iCisiQ09NQU5ETywgZXhlY3V0YSBlbSBtb2RvIGludGVyYXRpdm8uXG4iCisKKyM6IHBhcnRlZC91aS5jOjE2OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiXG4iCisiWW91IGZvdW5kIGEgYnVnIGluIEdOVSBQYXJ0ZWQhIEhlcmUncyB3aGF0IHlvdSBoYXZlIHRvIGRvOlxuIgorIlxuIgorIkRvbid0IHBhbmljISBUaGUgYnVnIGhhcyBtb3N0IGxpa2VseSBub3QgYWZmZWN0ZWQgYW55IG9mIHlvdXIgZGF0YS5cbiIKKyJIZWxwIHVzIHRvIGZpeCB0aGlzIGJ1ZyBieSBkb2luZyB0aGUgZm9sbG93aW5nOlxuIgorIlxuIgorIkNoZWNrIHdoZXRoZXIgdGhlIGJ1ZyBoYXMgYWxyZWFkeSBiZWVuIGZpeGVkIGJ5IGNoZWNraW5nXG4iCisidGhlIGxhc3QgdmVyc2lvbiBvZiBHTlUgUGFydGVkIHRoYXQgeW91IGNhbiBmaW5kIGF0OlxuIgorIlxuIgorIlx0aHR0cDovL2Z0cC5nbnUub3JnL2dudS9wYXJ0ZWQvXG4iCisiXG4iCisiUGxlYXNlIGNoZWNrIHRoaXMgdmVyc2lvbiBwcmlvciB0byBidWcgcmVwb3J0aW5nLlxuIgorIlxuIgorIklmIHRoaXMgaGFzIG5vdCBiZWVuIGZpeGVkIHlldCBvciBpZiB5b3UgZG9uJ3Qga25vdyBob3cgdG8gY2hlY2ssXG4iCisicGxlYXNlIHZpc2l0IHRoZSBHTlUgUGFydGVkIHdlYnNpdGU6XG4iCisiXG4iCisiXHRodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvcGFydGVkXG4iCisiXG4iCisiZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uXG4iCisiXG4iCisiWW91ciByZXBvcnQgc2hvdWxkIGNvbnRhaW4gdGhlIHZlcnNpb24gb2YgdGhpcyByZWxlYXNlICglcylcbiIKKyJhbG9uZyB3aXRoIHRoZSBlcnJvciBtZXNzYWdlIGJlbG93LCB0aGUgb3V0cHV0IG9mXG4iCisiXG4iCisiXHRwYXJ0ZWQgREVWSUNFIHVuaXQgY28gcHJpbnQgdW5pdCBzIHByaW50XG4iCisiXG4iCisiYW5kIHRoZSBmb2xsb3dpbmcgaGlzdG9yeSBvZiBjb21tYW5kcyB5b3UgZW50ZXJlZC5cbiIKKyJBbHNvIGluY2x1ZGUgYW55IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgeW91ciBzZXR1cCB5b3VcbiIKKyJjb25zaWRlciBpbXBvcnRhbnQuXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6Mjg0Cittc2dpZCAiIgorIlxuIgorIkNvbW1hbmQgSGlzdG9yeTpcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzozNjYKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IFNFR1ZfTUFQRVJSIChBZGRyZXNzIG5vdCBtYXBwZWQgdG8gb2JqZWN0KVxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjM3MgorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogU0VHVl9BQ0NFUlIgKEludmFsaWQgcGVybWlzc2lvbnMgZm9yIG1hcHBlZCBvYmplY3QpXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6Mzc3Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBBIGdlbmVyYWwgU0lHU0VHViBzaWduYWwgd2FzIGVuY291bnRlcmVkLlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQxMAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0lOVERJViAoSW50ZWdlcjogZGl2aWRlIGJ5IHplcm8pIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQxNQorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0lOVE9WRiAoSW50ZWdlcjogb3ZlcmZsb3cpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQyMAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0ZMVERJViAoRmxvYXQ6IGRpdmlkZSBieSB6ZXJvKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0MjUKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRPVkYgKEZsb2F0OiBvdmVyZmxvdykiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDMwCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxUVU5EIChGbG9hdDogdW5kZXJmbG93KSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0MzUKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRSRVMgKEZsb2F0OiBpbmV4YWN0IHJlc3VsdCkiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDQwCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxUSU5WIChGbG9hdDogaW52YWxpZCBvcGVyYXRpb24pIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQ0NQorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0ZMVFNVQiAoRmxvYXQ6IHN1YnNjcmlwdCBvdXQgb2YgcmFuZ2UpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQ1MAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogQSBnZW5lcmFsIFNJR0ZQRSBzaWduYWwgd2FzIGVuY291bnRlcmVkLiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0ODMKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9JTExPUEMgKElsbGVnYWwgT3Bjb2RlKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0ODgKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9JTExPUE4gKElsbGVnYWwgT3BlcmFuZCkiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDkzCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfSUxMQURSIChJbGxlZ2FsIGFkZHJlc3NpbmcgbW9kZSkiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDk4Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfSUxMVFJQIChJbGxlZ2FsIFRyYXApIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjUwMworbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX1BSVk9QQyAoUHJpdmlsZWdlZCBPcGNvZGUpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjUwOAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX1BSVlJFRyAoUHJpdmlsZWdlZCBSZWdpc3RlcikiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NTEzCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfQ09QUk9DIChDb3Byb2Nlc3NvciBFcnJvcikiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NTE4Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfQkFEU1RLIChJbnRlcm5hbCBTdGFjayBFcnJvcikiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NTIzCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBBIGdlbmVyYWwgU0lHSUxMIHNpZ25hbCB3YXMgZW5jb3VudGVyZWQuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjEwMjQKKyMsIGZ1enp5Cittc2dpZCAiRXhwZWN0aW5nIGEgcGFydGl0aW9uIG51bWJlci4iCittc2dzdHIgIkEgcGFydGnn428gZGVzdGlubyBlc3ThIHNlbmRvIHV0aWxpemFkYS4iCisKKyM6IHBhcnRlZC91aS5jOjEwMzMKK21zZ2lkICJQYXJ0aXRpb24gZG9lc24ndCBleGlzdC4iCittc2dzdHIgIkEgcGFydGnn428gbuNvIGV4aXN0ZS4iCisKKyM6IHBhcnRlZC91aS5jOjEwNTMKKyMsIGZ1enp5Cittc2dpZCAiRXhwZWN0aW5nIGEgZmlsZSBzeXN0ZW0gdHlwZS4iCittc2dzdHIgIlRpcG8gZGUgc2lzdGVtYSBkZSBhcnF1aXZvcyBkZXNjb25oZWNpZG8uIgorCisjOiBwYXJ0ZWQvdWkuYzoxMDYwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIGZpbGUgc3lzdGVtIHR5cGUgXCIlc1wiLiIKK21zZ3N0ciAiVGlwbyBkZSBzaXN0ZW1hIGRlIGFycXVpdm9zIGRlc2NvbmhlY2lkby4iCisKKyM6IHBhcnRlZC91aS5jOjEwODAKK21zZ2lkICJFeHBlY3RpbmcgYSBkaXNrIGxhYmVsIHR5cGUuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjExNzgKKyMsIGZ1enp5Cittc2dpZCAiQ2FuJ3QgY3JlYXRlIGFueSBtb3JlIHBhcnRpdGlvbnMuIgorbXNnc3RyICJO428gcG9zc28gYWRpY2lvbmFyIG91dHJhIHBhcnRp5+NvLiIKKworIzogcGFydGVkL3VpLmM6MTE4OAorIywgZnV6enkKK21zZ2lkICJFeHBlY3RpbmcgYSBwYXJ0aXRpb24gdHlwZS4iCittc2dzdHIgIkEgcGFydGnn428gZGVzdGlubyBu428gZXhpc3RlLiIKKworIzogcGFydGVkL3VpLmM6MTMxNQorbXNnaWQgIm9uIgorbXNnc3RyICJvbiIKKworIzogcGFydGVkL3VpLmM6MTMxNgorbXNnaWQgIm9mZiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzoxNDMxCittc2dpZCAiT1BUSU9OczoiCittc2dzdHIgIk9Qx9VFU3M6IgorCisjOiBwYXJ0ZWQvdWkuYzoxNDM2Cittc2dpZCAiQ09NTUFORHM6IgorbXNnc3RyICJDT01BTkRPczoiCisKKyM6IHBhcnRlZC91aS5jOjE0NDUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVzaW5nICVzXG4iCittc2dzdHIgIiIKKyJcbiIKKyJVc2FuZG8gJXNcbiIKKworIzogcGFydGVkL3VpLmM6MTUxOQorbXNnaWQgIlRoaXMgY29tbWFuZCBkb2VzIG5vdCBtYWtlIHNlbnNlIGluIG5vbi1pbnRlcmFjdGl2ZSBtb2RlLlxuIgorbXNnc3RyICIiCisKKyN+IG1zZ2lkICJ3aGVyZSBuZWNlc3NhcnksIHByb21wdHMgZm9yIHVzZXIgaW50ZXJ2ZW50aW9uIgorI34gbXNnc3RyICJxdWFuZG8gbmVjZXNz4XJpbywgcGVkZSBpbnRlcnZlbufjbyBkbyB1c3XhcmlvIgorCisjfiBtc2dpZCAiIgorI34gIlRoZSBzZWN0b3Igc2l6ZSBvbiAlcyBpcyAlZCBieXRlcy4gIFBhcnRlZCBpcyBrbm93biBub3QgdG8gd29yayBwcm9wZXJseSAiCisjfiAid2l0aCBkcml2ZXMgd2l0aCBzZWN0b3Igc2l6ZXMgb3RoZXIgdGhhbiA1MTIgYnl0ZXMiCisjfiBtc2dzdHIgIiIKKyN+ICJPIHRhbWFuaG8gZG8gc2V0b3IgZW0gJXMg6SAlZCBieXRlcy4gTyBQYXJ0ZWQg6SBjb25oZWNpZG8gcG9yIG7jbyAiCisjfiAiZnVuY2lvbmFyIHBlcmZlaXRhbWVudGUgY29tIGRpc2NvcyBjb20gc2V0b3JlcyBkaWZlcmVudGVzIGRlIDUxMiBieXRlcyIKKworI34gbXNnaWQgIkNvdWxkIG5vdCByZWFkIGdlb21ldHJ5IG9mICVzIC0gJXMuIgorI34gbXNnc3RyICJO428gZm9pIHBvc3PtdmVsIGxlciBhIGdlb21ldHJpYSBkZSAlcyAtICVzIgorCisjfiBtc2dpZCAiRGV2aWNlICVzIGhhcyBkb2RnZXkgZ2VvbWV0cnkuIgorI34gbXNnc3RyICJEaXNwb3NpdGl2byAlcyB0ZW0gdW1hIGdlb21ldHJpYSBlc3RyYW5oYS4iCisKKyN+IG1zZ2lkICJ1bmtub3duIgorI34gbXNnc3RyICJkZXNjb25oZWNpZG8iCisKKyN+IG1zZ2lkICJVbmtub3duIFNDU0kiCisjfiBtc2dzdHIgIlNDU0kgZGVzY29uaGVjaWRvIgorCisjfiBtc2dpZCAiRGV2aWNlICVzIGlzIG5laXRoZXIgYSBTQ1NJIG5vciBJREUgZHJpdmUuIgorI34gbXNnc3RyICJPIGRpc3Bvc2l0aXZvICVzIG7jbyDpIHVtIGRyaXZlIFNDU0kgb3UgSURFLiIKKworI34gbXNnaWQgIiIKKyN+ICJUaGUgcGFydGl0aW9uIHRhYmxlIG9uICVzIGlzIGluY29uc2lzdGVudC4gIFRoZXJlIGFyZSBtYW55IHJlYXNvbnMgd2h5ICIKKyN+ICJ0aGlzIG1pZ2h0IGJlIHRoZSBjYXNlLiAgSG93ZXZlciwgdGhlIG1vc3QgbGlrZWx5IHJlYXNvbiBpcyB0aGF0IExpbnV4ICIKKyN+ICJkZXRlY3RlZCB0aGUgQklPUyBnZW9tZXRyeSBmb3IgJXMgaW5jb3JyZWN0bHkuICBHTlUgUGFydGVkIHN1c3BlY3RzIHRoZSAiCisjfiAicmVhbCBnZW9tZXRyeSBzaG91bGQgYmUgJWQvJWQvJWQgKG5vdCAlZC8lZC8lZCkuICBZb3Ugc2hvdWxkIGNoZWNrIHdpdGggIgorI34gInlvdXIgQklPUyBmaXJzdCwgYXMgdGhpcyBtYXkgbm90IGJlIGNvcnJlY3QuICBZb3UgY2FuIGluZm9ybSBMaW51eCBieSAiCisjfiAiYWRkaW5nIHRoZSBwYXJhbWV0ZXIgJXM9JWQsJWQsJWQgdG8gdGhlIGNvbW1hbmQgbGluZS4gIFNlZSB0aGUgTElMTyBvciAiCisjfiAiR1JVQiBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLiAgSWYgeW91IHRoaW5rIFBhcnRlZCdzIHN1Z2dlc3RlZCAiCisjfiAiZ2VvbWV0cnkgaXMgY29ycmVjdCwgeW91IG1heSBzZWxlY3QgSWdub3JlIHRvIGNvbnRpbnVlIChhbmQgZml4IExpbnV4ICIKKyN+ICJsYXRlcikuICBPdGhlcndpc2UsIHNlbGVjdCBDYW5jZWwgKGFuZCBmaXggTGludXggYW5kL29yIHRoZSBCSU9TIG5vdykuIgorI34gbXNnc3RyICIiCisjfiAiQSB0YWJlbGEgZGUgcGFydGnn9WVzIGVtICVzIOkgaW5jb25zaXN0ZW50ZS4gSOEgduFyaWFzIHJhevVlcyBwYXJhIGlzdG8gIgorI34gIm9jb3JyZXIuIEEgbWFpcyBjZXJ0YSBzZXJpYSBvIExpbnV4IGRldGVjdGFyIGEgZ2VvbWV0cmlhIGRvIEJJT1MgcGFyYSAlcyAiCisjfiAiaW5jb3JyZXRhbWVudGUuIE8gR05VIFBhcnRlZCBzdXNwZWl0YSBxdWUgYSBnZW9tZXRyaWEgcmVhbCBkZXZlcmlhIHNlciAlZC8iCisjfiAiJWQvJWQgKGUgbuNvICVkLyVkLyVkKS4gVm9j6iBkZXZlIGNoZWNhciBjb20gc2V1IEJJT1MgcHJpbWVpcm8sIHBvaXMgaXN0byAiCisjfiAicG9kZSBu428gc2VyIGNvcnJldG8uIFZvY+ogcG9kZSBpbmZvcm1hciBvIExpbnV4IGFkaWNpb25hbmRvIG8gcGFy4m1ldHJvICUiCisjfiAicz0lZCwlZCwlZCBuYSBsaW5oYSBkZSBjb21hbmRvLiBWZWphIGEgZG9jdW1lbnRh5+NvIGRvIExJTE8gb3UgR1JVQiBwYXJhICIKKyN+ICJtYWlvcmVzIGluZm9ybWHn9WVzLiBTZSB2b2PqIGFjaGEgcXVlIGEgZ2VvbWV0cmlhIHN1Z2VyaWEgcGVsbyBQYXJ0ZWQg6SBhICIKKyN+ICJjb3JyZXRhLCBwb2RlIHNlbGVjaW9uYXIgSWdub3JhciBwYXJhIGNvbnRpbnVhciAoZSBhcnJ1bWFyIG8gTGludXggIgorI34gImRlcG9pcykuIERlIG91dHJhIG1hbmVpcmEsIHNlbGVjaW9uZSBDYW5jZWxhciAoZSBhcnJ1bWUgbyBMaW51eCBlL291IG8gIgorI34gIkJJT1MgYWdvcmEpLiIKKworI34gbXNnaWQgIiIKKyN+ICJUaGUgcGFydGl0aW9uIHRhYmxlIG9uICVzIGlzIGluY29uc2lzdGVudC4gIFRoZXJlIGFyZSBtYW55IHJlYXNvbnMgd2h5ICIKKyN+ICJ0aGlzIG1pZ2h0IGJlIHRoZSBjYXNlLiAgT2Z0ZW4sIHRoZSByZWFzb24gaXMgdGhhdCBMaW51eCBkZXRlY3RlZCB0aGUgIgorI34gIkJJT1MgZ2VvbWV0cnkgaW5jb3JyZWN0bHkuICBIb3dldmVyLCB0aGlzIGRvZXMgbm90IGFwcGVhciB0byBiZSB0aGUgY2FzZSAiCisjfiAiaGVyZS4gIEl0IGlzIHNhZmUgdG8gaWdub3JlLGJ1dCBpZ25vcmluZyBtYXkgY2F1c2UgKGZpeGFibGUpIHByb2JsZW1zICIKKyN+ICJ3aXRoIHNvbWUgYm9vdCBsb2FkZXJzLCBhbmQgbWF5IGNhdXNlIHByb2JsZW1zIHdpdGggRkFUIGZpbGUgc3lzdGVtcy4gICIKKyN+ICJVc2luZyBMQkEgaXMgcmVjb21tZW5kZWQuIgorI34gbXNnc3RyICIiCisjfiAiQSB0YWJlbGEgZGUgcGFydGnn9WVzIGVtICVzIGVzdOEgaW5jb25zaXN0ZW50ZS4gSOEgduFyaWFzIHJhevVlcyBwYXJhICIKKyN+ICJpc3RvIG9jb3JyZXIuIE11aXRhcyB2ZXplcywgbyBMaW51eCBkZXRlY3RhIGEgZ2VvbWV0cmlhIGRvIEJJT1MgIgorI34gImluY29ycmV0YW1lbnRlLiBQb3LpbSwgaXNzbyBu428gcGFyZWNlIHNlciBvIGNhc28gYXF1aS4gySBzZWd1cm8gaWdub3JhciwgIgorI34gIm1hcyBpc3NvIHBvZGUgY2F1c2FyIHByb2JsZW1hcyAoc29sdWNpb27hdmVpcykgY29tIGFsZ3VucyBnZXJlbmNpYWRvcmVzICIKKyN+ICJkZSBib290LiDJIHJlY29tZW5k4XZlbCB1c2FyIExCQS4iCisKKyN+IG1zZ2lkICIiCisjfiAiVW5hYmxlIHRvIGFsaWduIHBhcnRpdGlvbiBwcm9wZXJseS4gIFRoaXMgcHJvYmFibHkgbWVhbnMgdGhhdCBhbm90aGVyICIKKyN+ICJwYXJ0aXRpb25pbmcgdG9vbCBnZW5lcmF0ZWQgYW4gaW5jb3JyZWN0IHBhcnRpdGlvbiB0YWJsZSwgYmVjYXVzZSBpdCAiCisjfiAiZGlkbid0IGhhdmUgdGhlIGNvcnJlY3QgQklPUyBnZW9tZXRyeS4gIEl0IGlzIHNhZmUgdG8gaWdub3JlLGJ1dCBpZ25vcmluZyAiCisjfiAibWF5IGNhdXNlIChmaXhhYmxlKSBwcm9ibGVtcyB3aXRoIHNvbWUgYm9vdCBsb2FkZXJzLiIKKyN+IG1zZ3N0ciAiIgorI34gIkltcG9zc+12ZWwgYWxpbmhhciBhIHBhcnRp5+NvIHByb3ByaWFtZW50ZS4gSXNzbyBwcm92YXZlbG1lbnRlIHNpZ25pZmljYSAiCisjfiAicXVlIG91dHJhIGZlcnJhbWVudGEgZGUgcGFydGljaW9uYW1lbnRvIGdlcm91IHVtYSB0YWJlbGEgZGUgcGFydGnn9WVzICIKKyN+ICJpbmNvcnJldGEgcG9ycXVlIG7jbyB0aW5oYSBhIGdlb21ldHJpYSBuYSBCSU9TIGNvcnJldGEuIMkgc2VndXJvIGlnbm9yYXIsICIKKyN+ICJtYXMgaXN0byBwb2RlIGNhdXNhciBwcm9ibGVtYXMgKHNvbHVjaW9u4XZlaXMpIGNvbSBhbGd1bnMgZ2VyZW5jaWFkb3JlcyAiCisjfiAiZGUgYm9vdC4iCisKKyN+IG1zZ2lkICJHVUlEIFBhcnRpdGlvbiBUYWJsZSBIZWFkZXIgU2lnbmF0dXJlIGlzIHdyb25nOiAiCisjfiBtc2dzdHIgIkEgQXNzaW5hdHVyYSBkbyBDYWJl52FsaG8gZGEgVGFiZWxhIGRlIFBhcnRp5/VlcyBHVUlEIGVzdOEgZXJyYWRhOiAiCisKKyN+IG1zZ2lkICIgc2hvdWxkIGJlICIKKyN+IG1zZ3N0ciAiIGRldmVyaWEgc2VyICIKKworI34gbXNnaWQgIkdQVCBIZWFkZXIgQ1JDIGNoZWNrIGZhaWxlZCwgJXggc2hvdWxkIGJlICV4LiIKKyN+IG1zZ3N0ciAiQ2hlY2FnZW0gZGUgQ1JDIG5vIGNhYmXnYWxobyBHUFQgZmFsaG91LCAleCBkZXZlcmlhIHNlciAleC4iCisKKyN+IG1zZ2lkICJHUFQgUGFydGl0aW9uIEVudHJ5IEFycmF5IENSQyBjaGVjayBmYWlsZWQsICV4IHNob3VsZCBiZSAleC4iCisjfiBtc2dzdHIgIiIKKyN+ICJDaGVjYWdlbSBkZSBDUkMgbmEgTWF0cml6IGRlIEVudHJhZGFzIGRlIFBhcnRp5+NvIEdQVCBmYWxob3UsICV4IGRldmVyaWEgIgorI34gInNlciAleC4iCisKKyN+IG1zZ2lkICIiCisjfiAiVGhpcyBkaXNrIGNvbnRhaW5zIGEgdmFsaWQgUHJpbWFyeSBhbmQgQWx0ZXJuYXRlIEdVSUQgUGFydGl0aW9uIFRhYmxlIGJ1dCAiCisjfiAidGhlIFByb3RlY3RpdmUgTUJSIGlzIGludmFsaWQuICBUaGlzIGdlbmVyYWxseSBtZWFucyB0aGF0IHRoZSBkaXNrIGhhZCAiCisjfiAiR1BUIHBhcnRpdGlvbnMgb24gaXQsIGJ1dCB0aGVuIGEgbGVnYWN5IHBhcnRpdGlvbiBlZGl0aW5nIHRvb2wgd2FzIHVzZWQgIgorI34gInRvIGNoYW5nZSB0aGUgcGFydGl0aW9uIHRhYmxlIHN0b3JlZCBpbiB0aGUgTUJSLlxuIgorI34gIldoaWNoIGRhdGEgaXMgdmFsaWQsICBHUFQgb3IgTUJSP1xuIgorI34gIlllcyB3aWxsIGFzc3VtZSB0aGF0IHRoZSBHUFQgaW5mb3JtYXRpb24gaXMgY29ycmVjdCwgYW5kIHJld3JpdGUgdGhlICIKKyN+ICJQTUJSLlxuIgorI34gIk5vIHdpbGwgYXNzdW1lIHRoYXQgdGhlIE1CUiBpcyBjb3JyZWN0LCBhbmQgZXJhc2UgdGhlIEdQVCBpbmZvcm1hdGlvbi5cbiIKKyN+ICJJZ25vcmUgd2lsbCBhc3N1bWUgdGhhdCB0aGUgTUJSIGlzIGNvcnJlY3QsIGJ1dCBub3QgY2hhbmdlIHRoZSBkaXNrLiIKKyN+IG1zZ3N0ciAiIgorI34gIkVzc2UgZGlzY28gY29udOltIGFzIFRhYmVsYXMgZGUgUGFydGnn9WVzIEdVSUQgcHJpbeFyaWEgZSBhbHRlcm5hdGl2YSAiCisjfiAiY29ycmV0YXMsIG1hcyBhIFByb3RlY3RpdmUgTUJSIOkgaW524WxpZGEuIElzc28gZ2VyYWxtZW50ZSBzaWduaWZpY2EgcXVlICIKKyN+ICJvIGRpc2NvIHRpbmhhIHBhcnRp5/VlcyBHUFQsIG1hcyB1bSBwcm9ncmFtYSBwYWRy428gZGUgcGFydGljaW9uYW1lbnRvICIKKyN+ICJmb2kgdXNhZG8gcGFyYSBtdWRhciBhIHRhYmVsYSBkZSBwYXJ0aef1ZXMgZ3JhdmFkYSBuYSBNQlIuXG4iCisjfiAiUXVhaXMgZGFkb3Mgc+NvIHbhbGlkb3MsIEdQVCBvdSBNQlI/XG4iCisjfiAiU2ltOiBhc3N1bWUgcXVlIGEgaW5mb3JtYefjbyBuYSBHUFQg6SBhIGNvcnJldGEsIGUgcmVlc2NyZXZlIGEgUE1CUi5cbiIKKyN+ICJO4286IGFzc3VtZSBxdWUgYSBNQlIg6SBhIGNvcnJldGEsIGUgYXBhZ2EgYXMgaW5mb3JtYef1ZXMgbmEgR1BULlxuIgorI34gIklnbm9yYXI6IGFzc3VtZSBxdWUgYSBNQlIg6SBjb3JyZXRhLCBtYXMgbuNvIGFsdGVyYSBvIGRpc2NvLiIKKworI34gbXNnaWQgIiIKKyN+ICJUaGlzIGRpc2sgY29udGFpbnMgYSB2YWxpZCBBbHRlcm5hdGUgR1VJRCBQYXJ0aXRpb24gVGFibGUgYnV0IHRoZSBQcmltYXJ5ICIKKyN+ICJHUFQgYW5kIFByb3RlY3RpdmUgTUJSIGFyZSBpbnZhbGlkLiAgVGhpcyBnZW5lcmFsbHkgbWVhbnMgdGhhdCB0aGUgZGlzayAiCisjfiAiaGFkIEdQVCBwYXJ0aXRpb25zIG9uIGl0LCBidXQgdGhlbiBhIGxlZ2FjeSBwYXJ0aXRpb24gZWRpdGluZyB0b29sIHdhcyAiCisjfiAidXNlZCB0byBjaGFuZ2UgdGhlIHBhcnRpdGlvbiB0YWJsZSBzdG9yZWQgaW4gdGhlIE1CUi5cbiIKKyN+ICJXaGljaCBkYXRhIGlzIHZhbGlkLCAgR1BUIG9yIE1CUj9cbiIKKyN+ICJZZXMgd2lsbCBhc3N1bWUgdGhhdCB0aGUgR1BUIGluZm9ybWF0aW9uIGlzIGNvcnJlY3QsIGFuZCB3aWxsIHJld3JpdGUgdGhlICIKKyN+ICJQTUJSIGFuZCBQcmltYXJ5IEdQVC5cbiIKKyN+ICJObyB3aWxsIGFzc3VtZSB0aGF0IHRoZSBNQlIgaXMgY29ycmVjdCwgYW5kIGVyYXNlIHRoZSBHUFQgaW5mb3JtYXRpb24uXG4iCisjfiAiSWdub3JlIHdpbGwgYXNzdW1lIHRoYXQgdGhlIE1CUiBpcyBjb3JyZWN0LCBidXQgbm90IGNoYW5nZSB0aGUgZGlzay4iCisjfiBtc2dzdHIgIiIKKyN+ICJFc3NlIGRpc2NvIGNvbnTpbSB1bWEgVGFiZWxhIGRlIFBhcnRp5+NvIEdVSUQgYWx0ZXJuYXRpdmEgY29ycmV0YSwgbWFzIGEgIgorI34gIkdQVCBwcmlt4XJpYSBlIGEgUHJvdGVjdGl2ZSBNQlIgc+NvIGluduFsaWRhcy4gSXNzbyBnZXJhbG1lbnRlIHNpZ25pZmljYSAiCisjfiAicXVlIG8gZGlzY28gdGluaGEgcGFydGnn9WVzIEdQVCwgbWFzIHVtIHByb2dyYW1hIHBhZHLjbyBkZSAiCisjfiAicGFydGljaW9uYW1lbnRvIGZvaSB1c2FkbyBwYXJhIG11ZGFyIGEgdGFiZWxhIGRlIHBhcnRp5/VlcyBncmF2YWRhIG5hICIKKyN+ICJNQlIuXG4iCisjfiAiUXVhaXMgZGFkb3Mgc+NvIHbhbGlkb3MsIEdQVCBvdSBNQlI/XG4iCisjfiAiU2ltOiBhc3N1bWUgcXVlIGEgaW5mb3JtYefjbyBuYSBHUFQg6SBhIGNvcnJldGEsIGUgcmVlc2NyZXZlIGEgUE1CUiBlIGEgIgorI34gIkdQVCBwcmlt4XJpYS5cbiIKKyN+ICJO4286IGFzc3VtZSBxdWUgYSBNQlIg6SBhIGNvcnJldGEsIGUgYXBhZ2EgYXMgaW5mb3JtYef1ZXMgbmEgR1BULlxuIgorI34gIklnbm9yYXI6IGFzc3VtZSBxdWUgYSBNQlIg6SBjb3JyZXRhLCBtYXMgbuNvIGFsdGVyYSBvIGRpc2NvLiIKKworI34gbXNnaWQgIiIKKyN+ICJUaGlzIGRpc2sgY29udGFpbnMgYSB2YWxpZCBQcmltYXJ5IEdVSUQgUGFydGl0aW9uIFRhYmxlIGJ1dCB0aGUgQWx0ZXJuYXRlICIKKyN+ICJHUFQgYW5kIFByb3RlY3RpdmUgTUJSIGFyZSBpbnZhbGlkLiAgVGhpcyBnZW5lcmFsbHkgbWVhbnMgdGhhdCB0aGUgZGlzayAiCisjfiAiaGFkIEdQVCBwYXJ0aXRpb25zIG9uIGl0LCBidXQgdGhlbiBhIGxlZ2FjeSBwYXJ0aXRpb24gZWRpdGluZyB0b29sIHdhcyAiCisjfiAidXNlZCB0byBjaGFuZ2UgdGhlIHBhcnRpdGlvbiB0YWJsZSBzdG9yZWQgaW4gdGhlIE1CUi5cbiIKKyN+ICJXaGljaCBkYXRhIGlzIHZhbGlkLCAgR1BUIG9yIE1CUj9cbiIKKyN+ICJZZXMgd2lsbCBhc3N1bWUgdGhhdCB0aGUgR1BUIGluZm9ybWF0aW9uIGlzIGNvcnJlY3QsIGFuZCB3aWxsIHJld3JpdGUgdGhlICIKKyN+ICJQTUJSIGFuZCBBbHRlcm5hdGUgR1BULlxuIgorI34gIk5vIHdpbGwgYXNzdW1lIHRoYXQgdGhlIE1CUiBpcyBjb3JyZWN0LCBhbmQgZXJhc2UgdGhlIEdQVCBpbmZvcm1hdGlvbi5cbiIKKyN+ICJJZ25vcmUgd2lsbCBhc3N1bWUgdGhhdCB0aGUgTUJSIGlzIGNvcnJlY3QsIGJ1dCBub3QgY2hhbmdlIHRoZSBkaXNrLlxuIgorI34gbXNnc3RyICIiCisjfiAiRXNzZSBkaXNjbyBjb2506W0gdW1hIFRhYmVsYSBkZSBQYXJ0aefjbyBHVUlEIHByaW3hcmlhIGNvcnJldGEsIG1hcyBhIEdQVCAiCisjfiAiYWx0ZXJuYXRpdmEgZSBhIFByb3RlY3RpdmUgTUJSIHPjbyBpbnbhbGlkYXMuIElzc28gZ2VyYWxtZW50ZSBzaWduaWZpY2EgIgorI34gInF1ZSBvIGRpc2NvIHRpbmhhIHBhcnRp5/VlcyBHUFQsIG1hcyB1bSBwcm9ncmFtYSBwYWRy428gZGUgIgorI34gInBhcnRpY2lvbmFtZW50byBmb2kgdXNhZG8gcGFyYSBtdWRhciBhIHRhYmVsYSBkZSBwYXJ0aef1ZXMgZ3JhdmFkYSBuYSAiCisjfiAiTUJSLlxuIgorI34gIlF1YWlzIGRhZG9zIHPjbyB24WxpZG9zLCBHUFQgb3UgTUJSP1xuIgorI34gIlNpbTogYXNzdW1lIHF1ZSBhIGluZm9ybWHn428gbmEgR1BUIOkgYSBjb3JyZXRhLCBlIHJlZXNjcmV2ZSBhIFBNQlIgZSBhICIKKyN+ICJHUFQgYWx0ZXJuYXRpdmEuXG4iCisjfiAiTuNvOiBhc3N1bWUgcXVlIGEgTUJSIOkgYSBjb3JyZXRhLCBlIGFwYWdhIGFzIGluZm9ybWHn9WVzIG5hIEdQVC5cbiIKKyN+ICJJZ25vcmFyOiBhc3N1bWUgcXVlIGEgTUJSIOkgY29ycmV0YSwgbWFzIG7jbyBhbHRlcmEgbyBkaXNjby5cbiIKKworI34gbXNnaWQgIlRoZSBuZXcgcGFydGl0aW9uIG92ZXJsYXBzIHdpdGggYW5vdGhlciBwYXJ0aXRpb24uIgorI34gbXNnc3RyICJBIG5vdmEgcGFydGnn428gc29icmVw9WUgYWxndW1hIG91dHJhIHBhcnRp5+NvIgorCisjfiBtc2dpZCAiQ2FuJ3Qgc2V0IG5vbi1MaW51eCBwYXJ0aXRpb25zIGFzIGEgcm9vdCBkZXZpY2UuIgorI34gbXNnc3RyICJO428gcG9zc28gY29uZmlndXJhciBwYXJ0aef1ZXMgbuNvIExpbnV4IGNvbW8gdW1hIHBhcnRp5+NvIHJvb3QuIgorCisjfiBtc2dpZCAiQ2FuJ3Qgc2V0IG5vbi1MaW51eCBwYXJ0aXRpb25zIGFzIGEgc3dhcCBkZXZpY2UuIgorI34gbXNnc3RyICJO428gcG9zc28gY29uZmlndXJhciBwYXJ0aef1ZXMgbuNvIExpbnV4IGNvbW8gdW1hIHBhcnRp5+NvIHN3YXAuIgorCisjfiBtc2dpZCAiTm8gZ2V0X3Jlc2l6ZV9jb25zdHJhaW50IGZvciAlcyEiCisjfiBtc2dzdHIgIk7jbyBo4SBnZXRfcmVzaXplX2NvbnN0cmFpbnQgcGFyYSAlcyEiCisKKyN+IG1zZ2lkICJUaGUgJXMgZmlsZSBzeXN0ZW0gY29kZSBkb2Vzbid0IHN1cHBvcnQgJXMgZGlzayBsYWJlbHMuIgorI34gbXNnc3RyICJPIGPzZGlnbyBkbyBzaXN0ZW1hIGRlIGFycXVpdm9zICVzIG7jbyBzdXBvcnRhIHLzdHVsb3MgZGUgZGlzY28gJXMuIgorCisjfiBtc2dpZCAiQ3JlYXRpbmcgbmV3ICVzIGRpc2tsYWJlbHMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCisjfiBtc2dzdHIgIkNyaWHn428gZGUgbm92b3MgcvN0dWxvcyAlcyBu428gZXN04SBpbXBsZW1lbnRhZG8gYWluZGEuIgorCisjfiBtc2dpZCAiVGhlIGNvZGUgdG8gd3JpdGUgdGhlIHBhcnRpdGlvbiB0YWJsZSBoYXNuJ3QgYmVlbiB3cml0dGVuIGZvciAlcyB5ZXQiCisjfiBtc2dzdHIgIiIKKyN+ICJPIGPzZGlnbyBwYXJhIGVzY3JldmVyIGEgdGFiZWxhIGRlIHBhcnRp5/VlcyBhaW5kYSBu428gZm9pIGVzY3JpdG8gcGFyYSAlIgorI34gInMuIgorCisjfiBtc2dpZCAiRXJyb3IgcmVhZGluZyAlcyAoJXMpIHRvIGRldGVybWluZSBpZiBwYXJ0aXRpb24gaXMgbW91bnRlZC4iCisjfiBtc2dzdHIgIkVycm8gbGVuZG8gJXMgKCVzKSBwYXJhIGRldGVybWluYXIgc2UgYSBwYXJ0aefjbyBlc3ThIG1vbnRhZGEuIgorCisjfiBtc2dpZCAiQ2FuJ3QgZ3JvdyBhIHBhcnRpdGlvbiBvbnRvIHVzZWQgc3BhY2UuIgorI34gbXNnc3RyICJO428gcG9zc28gYXVtZW50YXIgYSBwYXJ0aefjbyBhY2ltYSBkZSBhbGd1bSBlc3Bh528gdXRpbGl6YWRvLiIKKworI34gbXNnaWQgIkF0dGVtcHQgdG8gcmVhZCBzZWN0b3JzICVsZC0lbGQgb3V0c2lkZSBvZiBwYXJ0aXRpb24gb24gJXMiCisjfiBtc2dzdHIgIlRlbnRhdGl2YSBkZSBsZXIgc2V0b3JlcyAlbGQtJWxkIGZvcmEgZGEgcGFydGnn428gZW0gJXMiCisKKyN+IG1zZ2lkICIiCisjfiAiVGhpcyBleHQyIGZpbGVzeXN0ZW0gaGFzIGEgcmF0aGVyIHN0cmFuZ2UgbGF5b3V0ISAgUGFydGVkIGNhbid0IHJlc2l6ZSAiCisjfiAidGhpcyAoeWV0KS4iCisjfiBtc2dzdHIgIiIKKyN+ICJFc3RlIHNpc3RlbWEgZGUgYXJxdWl2b3MgZXh0MiB0ZW0gdW1hIGFwYXLqbmNpYSBtdWl0byBlc3RyYW5oYSEgTyBQYXJ0ZWQgIgorI34gIm7jbyBwb2RlIHJlZGltZW5zaW9u4S1sbyAoYWluZGEpLiIKKworI34gbXNnaWQgIkluc2FuZSEgICVkIGNsdXN0ZXJzISIKKyN+IG1zZ3N0ciAiSW5zYW5vISAlZCBjbHVzdGVycyEiCisKKyN+IG1zZ2lkICIiCisjfiAiVGhlIGZpbGVzeXN0ZW0gaXMgZ29pbmcgdG8gYmUgdG9vIGJpZyBmb3IgRkFUMTYsIHNvIEZBVDMyIHdpbGwgYmUgdXNlZC4gICIKKyN+ICJUaGlzIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggTVMtRE9TLCBlYXJseSB2ZXJzaW9ucyBvZiBNUy1XaW5kb3dzIDk1IGFuZCAiCisjfiAiV2luZG93cyBOVC4gIElmIHlvdSB1c2UgdGhlc2Ugb3BlcmF0aW5nIHN5c3RlbXMsIHRoZW4gc2VsZWN0IGNhbmNlbCwgYW5kICIKKyN+ICJjcmVhdGUgYSBzbWFsbGVyIHBhcnRpdGlvbi4gIElmIHlvdSBvbmx5IHVzZSBMaW51eCwgQlNELCBNUyBXaW5kb3dzIDk4ICIKKyN+ICJhbmQvb3IgTVMgV2luZG93cyA5NSBCLCB0aGVuIHNlbGVjdCBPSy4iCisjfiBtc2dzdHIgIiIKKyN+ICJPIHNpc3RlbWEgZGUgYXJxdWl2b3Mgc2Vy4SBtdWl0byBncmFuZGUgcGFyYSBGQVQxNiwgZW50428gc2Vy4SB1c2FkbyAiCisjfiAiRkFUMzIuIElzdG8gbuNvIOkgY29tcGF07XZlbCBjb20gbyBNUy1ET1MsIHZlcnP1ZXMgYW50aWdhcyBkbyBNUy1XaW5kb3dzICIKKyN+ICI5NSBlIFdpbmRvd3MgTlQuIFNlIHZvY+ogdXRpbGl6YSBlc3RlcyBzaXN0ZW1hcyBvcGVyYWNpb25haXMsIHNlbGVjaW9uZSAiCisjfiAiY2FuY2VsYXIsIGUgY3JpZSB1bWEgcGFydGnn428gbWVub3IuIFNlIHZvY+ogdXRpbGl6YSBzb21lbnRlIExpbnV4LCBCU0QsICIKKyN+ICJNUy1XaW5kb3dzIDk4IGUvb3UgTVMtV2luZG93cyA5NSBCLCBlbnTjbyBzZWxlY2lvbmUgT0suIgorCisjfiBtc2dpZCAiV2VpcmQ6IGZhdF9jYWxjX3NpemVzKCkgZmFpbGVkIGZvciBGQVQzMiEiCisjfiBtc2dzdHIgIkVzdHJhbmhvOiBmYXRfY2FsY19zaXplcygpIGZhbGhvdSBwYXJhIGEgRkFUMzIhIgorCisjfiBtc2dpZCAiIgorI34gIldvdWxkIHlvdSBsaWtlIHRvIHVzZSBGQVQzMiBmb3IgdGhpcyBmaWxlc3lzdGVtPyAgSXQgaXMgbXVjaCBtb3JlICIKKyN+ICJlZmZpY2llbnQgd2l0aCB5b3VyIGRpc2sgc3BhY2UsIGJ1dCBpcyBub3QgY29tcGF0aWJsZSB3aXRoIGVhcmx5IHZlcnNpb25zICIKKyN+ICJvZiBXaW5kb3dzIDk1IGFuZCBXaW5kb3dzIE5ULiAgT25seSBzZWxlY3QgeWVzIGlmIHlvdSBvbmx5IHVzZSBMaW51eCwgIgorI34gIkJTRCwgTVMgV2luZG93cyA5OCBhbmQvb3IgTVMgV2luZG93cyA5NSBCLiIKKyN+IG1zZ3N0ciAiIgorI34gIlZvY+ogZ29zdGFyaWEgZGUgdXNhciBhIEZBVDMyIHBhcmEgZXN0ZSBzaXN0ZW1hIGRlIGFycXVpdm9zPyDJIG11aXRvIG1haXMgIgorI34gImVmaWNpZW50ZSBjb20gbyBlc3Bh528gZW0gZGlzY28sIG1hcyBu428g6SBjb21wYXTtdmVsIGNvbSB2ZXJz9WVzIGFudGlnYXMgIgorI34gImRvIFdpbmRvd3MgOTUgZSBXaW5kb3dzIE5ULiBTb21lbnRlIHNlbGVjaW9uZSBzaW0gc2Ugdm9j6iBz8yB1dGlsaXphciAiCisjfiAiTGludXgsIEJTRCwgTVMtV2luZG93cyA5OCBlL291IE1TLVdpbmRvd3MgOTUgQi4iCisKKyN+IG1zZ2lkICIiCisjfiAiRmlsZSBzeXN0ZW0gZG9lc24ndCBoYXZlIGV4cGVjdGVkIHNpemVzIGZvciBXaW5kb3dzIHRvIGxpa2UgaXQuICBOdW1iZXIgIgorI34gIm9mIGNsdXN0ZXJzIGlzICVkICglZCBleHBlY3RlZCk7IHNpemUgb2YgRkFUcyBpcyAlZCBzZWN0b3JzICglZCBleHBlY3RlZCkuIgorI34gbXNnc3RyICIiCisjfiAiTyBzaXN0ZW1hIGRlIGFycXVpdm9zIG7jbyB0ZW0gbyB0YW1hbmhvIGVzcGVyYWRvIHBhcmEgcXVlIG8gV2luZG93cyAiCisjfiAidXRpbGl6ZS4gTyB0YW1hbmhvIGRvIGNsdXN0ZXIg6SAlZGsgKCVkayBlc3BlcmFkbyk7IHRhbWFuaG8gZGEgRkFUIOkgJWQgIgorI34gInNldG9yZXMgKCVkIGVzcGVyYWRvKS4iCisKKyN+IG1zZ2lkICJGaWxlIHN5c3RlbSBoYXMgYW4gaW52YWxpZCBzaWduYXR1cmUgZm9yIGEgRkFUIGZpbGUgc3lzdGVtcy4iCisjfiBtc2dzdHIgIlNpc3RlbWEgZGUgYXJxdWl2b3MgdGVtIHVtYSBhc3NpbmF0dXJhIGluduFsaWRhIHBhcmEgdW0gRkFULiIKKworI34gbXNnaWQgIiIKKyN+ICJQYXJ0aXRpb24gc2l6ZSAoJWxkIHNlY3RvcnMpIGFuZCBmaWxlc3lzdGVtIHNpemUgKCVsZCBzZWN0b3JzKSBkbyBub3QgIgorI34gIm1hdGNoLiIKKyN+IG1zZ3N0ciAiIgorI34gIlRhbWFuaG8gZGUgcGFydGnn428gKCVsZCBzZXRvcmVzKSBlIHRhbWFuaG8gZG8gc2lzdGVtYSBkZSBhcnF1aXZvcyAoJWxkICIKKyN+ICJzZXRvcmVzKSBu428gYmF0ZW0uIgorCisjfiBtc2dpZCAiIgorI34gIlRoZSBGQVRzIGFyZW4ndCBiaWcgZW5vdWdoIHRvIGRlc2NyaWJlIGFsbCBjbHVzdGVycyEgIEVhY2ggRkFUIGlzICVkICIKKyN+ICJzZWN0b3JzLiAgVGhlcmUgYXJlICVkIGNsdXN0ZXJzLCB3aGljaCB3b3VsZCByZXF1aXJlIGVhY2ggRkFUIHRvIGJlICVkICIKKyN+ICJzZWN0b3JzLiAgVGhpcyBpcyBSRUFMTFkgd2VpcmQuICBZb3UgbWlnaHQgd2FudCB0byB3cml0ZSB1cyBhbiBlbWFpbDogYnVnLSIKKyN+ICJwYXJ0ZWRAZ251Lm9yZyIKKyN+IG1zZ3N0ciAiIgorI34gIkFzIEZBVHMgbuNvIHPjbyBncmFuZGVzIG8gc3VmaWNpZW50ZSBwYXJhIGRlc2NyZXZlciB0b2RvcyBvcyBjbHVzdGVycyEgIgorI34gIkNhZGEgRkFUIHRlbSAlZCBzZXRvcmVzLiBFeGlzdGVtICVkIGNsdXN0ZXJzLCBvcyBxdWFpcyByZXF1ZXJlbSBxdWUgY2FkYSAiCisjfiAiRkFUIHRlbmhhICVkIHNldG9yZXMuIElzdG8g6SBSRUFMTUVOVEUgZXN0cmFuaG8uIFZvY+ogcG9kZSBxdWVyZXIgbm9zICIKKyN+ICJlc2NyZXZlciB1bSBlbWFpbDogYnVnLXBhcnRlZEBnbnUub3JnIgorCisjfiBtc2dpZCAiIgorI34gIlRoaXMgc3dhcCBwYXJ0aXRpb24gaXMgbm90IGNvbXBhdGlibGUgd2l0aCBMaW51eCB2ZXJzaW9uIDIuMS4xMTcgb3IgIgorI34gImVhcmxpZXIuICBVc2UgYSBzbWFsbGVyIHBhcnRpdGlvbiAobWF4aW11bSBzaXplIDEyOG1iKSBpZiB5b3Ugd2FudCB0byB1c2UgIgorI34gIm9sZCB2ZXJzaW9ucyBvZiBMaW51eC4iCisjfiBtc2dzdHIgIiIKKyN+ICJFc3RhIHBhcnRp5+NvIHN3YXAgbuNvIOkgY29tcGF07XZlbCBjb20gbyBMaW51eCB2ZXJz428gMi4xLjExNyBvdSAiCisjfiAiYW50ZXJpb3IuIFV0aWxpemUgdW1hIHBhcnRp5+NvIG1lbm9yICht4XhpbW8gZGUgMTI4bWIpIHNlIHZvY+ogcXVpc2VyICIKKyN+ICJ1dGlsaXphciB2ZXJz9WVzIGFudGlnYXMgZG8gTGludXguIgorCisjfiBtc2dpZCAiTGludXgtc3dhcCBwYXJ0aXRpb25zIGNhbiBub3QgYmUgaGlkZGVuIG9uIG1zZG9zIGRpc2sgbGFiZWxzLiIKKyN+IG1zZ3N0ciAiIgorI34gIlBhcnRp5/VlcyBMaW51eC1zd2FwIG7jbyBwb2RlbSBzZXIgZXNjb25kaWRhcyBlbSBy83R1bG9zIGRlIGRpc2NvIG1zZG9zLiIKKworI34gbXNnaWQgIkxpbnV4LXN3YXAgcGFydGl0aW9ucyBjYW4gbm90IGJlIGJvb3RhYmxlIG9uIHBjOTggZGlzayBsYWJlbHMuIgorI34gbXNnc3RyICIiCisjfiAiUGFydGnn9WVzIExpbnV4LXN3YXAgbuNvIHBvZGVtIHNlciBpbmljaWFsaXrhdmVpcyBlbSBy83R1bG9zIGRlIGRpc2NvICIKKyN+ICJwYzk4LiIKKworI34gbXNnaWQgIkhGUyBwYXJ0aXRpb25zIGNhbid0IGJlIGhpZGRlbiBvbiBtc2RvcyBkaXNrIGxhYmVscy4iCisjfiBtc2dzdHIgIlBhcnRp5/VlcyBIRlMgbuNvIHBvZGVtIHNlciBlc2NvbmRpZGFzIGVtIHLzdHVsb3MgZGUgZGlzY28gbXNkb3MuIgorCisjfiBtc2dpZCAiSkZTIHBhcnRpdGlvbnMgY2FuJ3QgYmUgaGlkZGVuIG9uIG1zZG9zIGRpc2sgbGFiZWxzLiIKKyN+IG1zZ3N0ciAiUGFydGnn9WVzIEpGUyBu428gcG9kZW0gc2VyIGVzY29uZGlkYXMgZW0gcvN0dWxvcyBkZSBkaXNjbyBtc2Rvcy4iCisKKyN+IG1zZ2lkICJSZWlzZXJmcyBwYXJ0aXRpb25zIGNhbid0IGJlIGhpZGRlbiBvbiBtc2RvcyBkaXNrIGxhYmVscy4iCisjfiBtc2dzdHIgIiIKKyN+ICJQYXJ0aef1ZXMgUmVpc2VyRlMgbuNvIHBvZGVtIHNlciBlc2NvbmRpZGFzIGVtIHLzdHVsb3MgZGUgZGlzY28gbXNkb3MuIgorCisjfiBtc2dpZCAiUmVpc2VyZnMgcGFydGl0aW9ucyBtdXN0IGJlIGJvb3RhYmxlIG9uIHBjOTggZGlzayBsYWJlbHMuIgorI34gbXNnc3RyICIiCisjfiAiUGFydGnn9WVzIFJlaXNlckZTIGRldmVtIHNlciBpbmljaWFsaXrhdmVpcyBlbSBy83R1bG9zIGRlIGRpc2NvIHBjOTguIgorCisjfiBtc2dpZCAiWEZTIHBhcnRpdGlvbnMgY2FuJ3QgYmUgaGlkZGVuIG9uIG1zZG9zIGRpc2sgbGFiZWxzLiIKKyN+IG1zZ3N0ciAiUGFydGnn9WVzIFhGUyBu428gcG9kZW0gc2VyIGVzY29uZGlkYXMgZW0gcvN0dWxvcyBkZSBkaXNjbyBtc2Rvcy4iCisKKyN+IG1zZ2lkICJTVEFSVCBhbmQgRU5EIGFyZSBpbiBtZWdhYnl0ZXNcbiIKKyN+IG1zZ3N0ciAiSU5JQ0lPIGUgRklNIHPjbyBlbSBtZWdhYnl0ZXNcbiIKKworI34gbXNnaWQgIiIKKyN+ICJZb3UgcmVxdWVzdGVkIHRvIGNyZWF0ZSBhIHBhcnRpdGlvbiBhdCAlLjNmLSUuM2ZNYi4gVGhlIGNsb3Nlc3QgUGFydGVkICIKKyN+ICJjYW4gbWFuYWdlIGlzICUuM2YtJS4zZk1iLiIKKyN+IG1zZ3N0ciAiIgorI34gIlZvY+ogY29tYW5kb3UgYSBjcmlh5+NvIGRlIHVtYSBwYXJ0aefjbyBlbSAlLjNmLSUuM2ZNYi4gTyBtYWlzIHBlcnRvIHF1ZSAiCisjfiAibyBQYXJ0ZWQgcG9kZSBjaGVnYXIg6SAlLjNmLSUuM2ZNYi4iCisKKyN+IG1zZ2lkICIiCisjfiAiWW91IHJlcXVlc3RlZCB0byBtb3ZlIHRoZSBwYXJ0aXRpb24gdG8gJS4zZi0lLjNmTWIuIFRoZSBjbG9zZXN0IFBhcnRlZCAiCisjfiAiY2FuIG1hbmFnZSBpcyAlLjNmLSUuM2ZNYi4iCisjfiBtc2dzdHIgIiIKKyN+ICJWb2PqIGNvbWFuZG91IGEgbW92aW1lbnRh5+NvIGRhIHBhcnRp5+NvIHBhcmEgJS4zZi0lLjNmTWIuIE8gbWFpcyBwZXJ0byAiCisjfiAicXVlIG8gUGFydGVkIHBvZGUgY2hlZ2FyIOkgJS4zZi0lLjNmTWIuIgorCisjfiBtc2dpZCAiRGlzayBnZW9tZXRyeSBmb3IgJXM6IDAuMDAwLSUuM2YgbWVnYWJ5dGVzXG4iCisjfiBtc2dzdHIgIkdlb21ldHJpYSBkZSBkaXNjbyBwYXJhICVzOiAwLjAwMC0lLjNmIG1lZ2FieXRlc1xuIgorCisjfiBtc2dpZCAiTWlub3IgICAgU3RhcnQgICAgICAgRW5kICAgICAiCisjfiBtc2dzdHIgIk1pbm9yICAgIElu7WNpbyAgICAgIEZpbSAgICAgIgorCisjfiBtc2dpZCAiVHlwZSAgICAgICIKKyN+IG1zZ3N0ciAiVGlwbyAgICAgICIKKworI34gbXNnaWQgIk5hbWUgICAgICAgICAgICAgICAgICAiCisjfiBtc2dzdHIgIk5vbWUgICAgICAgICAgICAgICAgICAiCisKKyN+IG1zZ2lkICIiCisjfiAiWW91IHJlcXVlc3RlZCB0byByZXNpemUgdGhlIHBhcnRpdGlvbiB0byAlLjNmLSUuM2ZNYi4gVGhlIGNsb3Nlc3QgUGFydGVkICIKKyN+ICJjYW4gbWFuYWdlIGlzICUuM2YtJS4zZk1iLiIKKyN+IG1zZ3N0ciAiIgorI34gIlZvY+ogY29tYW5kb3UgbyByZWRpbWVuc2lvbmFtZW50byBkYSBwYXJ0aefjbyBwYXJhICUuM2YtJS4zZk1iLiBPIG1haXMgIgorI34gInBlcnRvIHF1ZSBvIFBhcnRlZCBwb2RlIGNoZWdhciDpICUuM2YtJS4zZk1iLiIKKworI34gbXNnaWQgIiIKKyN+ICJZb3UgZm91bmQgYSBidWcgaW4gR05VIFBhcnRlZC4gIFBsZWFzZSBlbWFpbCBhIGJ1ZyByZXBvcnQgdG8gYnVnLSIKKyN+ICJwYXJ0ZWRAZ251Lm9yZyBjb250YWluaW5nIHRoZSB2ZXJzaW9uICglcyksIGFuZCB0aGUgZm9sbG93aW5nIG1lc3NhZ2U6XG4iCisjfiBtc2dzdHIgIiIKKyN+ICJWb2PqIGVuY29udHJvdSB1bSBidWcgbm8gR05VIHBhcnRlZC4gUG9yIGZhdm9yIGVudmllIHVtIHJlbGF083JpbyBwYXJhICIKKyN+ICJidWctcGFydGVkQGdudS5vcmdcbiIKKyN+ICJjb250ZW5kbyBhIHZlcnPjbyAoJXMpLCBlIGEgbWVuc2FnZW0gYWJhaXhvOlxuIgorCisjfiBtc2dpZCAiIgorI34gIiAgWW91IGhhdmUgV2luZG93cyBGQVQgcGFydGl0aW9uKHMpIHRoYXQgYXJlIG5vdCB1c2luZyBMQkEuICBJZiB5b3VyIEJJT1MgIgorI34gInN1cHBvcnRzIExCQSwgdGhlbiB5b3Ugc2hvdWxkIHN3aXRjaCB0byBMQkEgYnkgc2V0dGluZyB0aGUgTEJBIGZsYWcgb24gIgorI34gImFsbCBGQVQgcGFydGl0aW9ucy4gIE90aGVyd2lzZSwgbWFrZSBzdXJlIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGFuZCB0aGUgIgorI34gIkJJT1MgaGF2ZSB0aGUgc2FtZSBnZW9tZXRyeSBiZWZvcmUgcmVzaXppbmcgYW55IEZBVCBwYXJ0aXRpb25zLiIKKyN+IG1zZ3N0ciAiIgorI34gIiAgVm9j6iB0ZW0gcGFydGnn9WVzIEZBVCBXaW5kb3dzIHF1ZSBu428gZXN0428gdXNhbmRvIExCQS4gU2Ugc2V1IEJJT1MgIgorI34gInN1cG9ydGEgTEJBLCB2b2PqIGRldmVyaWEgbXVkYXIgcGFyYSBMQkEgbGlnYW5kbyBvIHNpbmFsaXphZG9yIExCQSBlbSAiCisjfiAidG9kYXMgYXMgcGFydGnn9WVzIEZBVC4gRGUgb3V0cm8gbW9kbywgdGVuaGEgY2VydGV6YSBxdWUgbyBzaXN0ZW1hICIKKyN+ICJvcGVyYWNpb25hbCBlIG8gQklPUyB06m0gYSBtZXNtYSBnZW9tZXRyaWEgYW50ZXMgZGUgcmVkaW1lbnNpb25hciAiCisjfiAicXVhaXNxdWVyIHBhcnRp5/VlcyBGQVQuIgorCisjfiBtc2dpZCAiIgorI34gIlRoZSBvcGVyYXRpbmcgc3lzdGVtIHRoaW5rcyB0aGUgZ2VvbWV0cnkgb24gJXMgaXMgJWQvJWQvJWQuICBUaGVyZWZvcmUsICIKKyN+ICJjeWxpbmRlciAxMDI0IGVuZHMgYXQgJS4zZk0uJXMiCisjfiBtc2dzdHIgIiIKKyN+ICJPIHNpc3RlbWEgb3BlcmFjaW9uYWwgYWNoYSBxdWUgYSBnZW9tZXRyaWEgZGUgJXMg6SAlZC8lZC8lZC4gUG9y6W0sIG8gIgorI34gImNpbGluZHJvIDEwMjQgdGVybWluYSBlbSAlLjNmTS4lcyIKKworI34gbXNnaWQgIlRoZSBvcGVyYXRpbmcgc3lzdGVtIHRoaW5rcyB0aGUgZ2VvbWV0cnkgb24gJXMgaXMgJWQvJWQvJWQuJXMiCisjfiBtc2dzdHIgIk8gc2lzdGVtYSBvcGVyYWNpb25hbCBhY2hhIHF1ZSBhIGdlb21ldHJpYSBkZSAlcyDpICVkLyVkLyVkLiVzIgpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L3BvL3F1b3Quc2VkIGIvcGFydGVkLTEuOC43L3BvL3F1b3Quc2VkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxMjJjNDYKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvcG8vcXVvdC5zZWQKQEAgLTAsMCArMSw2IEBACitzLyJcKFteIl0qXCkiL+KAnFwx4oCdL2cKK3MvYFwoW15gJ10qXCknL+KAmFwx4oCZL2cKK3MvICdcKFteYCddKlwpJyAvIOKAmFwx4oCZIC9nCitzLyAnXChbXmAnXSpcKSckLyDigJhcMeKAmS9nCitzL14nXChbXmAnXSpcKScgL+KAmFwx4oCZIC9nCitzL+KAnOKAnS8iIi9nCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvcG8vcmVtb3ZlLXBvdGNkYXRlLnNpbiBiL3BhcnRlZC0xLjguNy9wby9yZW1vdmUtcG90Y2RhdGUuc2luCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0MzZjNDkKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvcG8vcmVtb3ZlLXBvdGNkYXRlLnNpbgpAQCAtMCwwICsxLDE5IEBACisjIFNlZCBzY3JpcHQgdGhhdCByZW1vdmUgdGhlIFBPVC1DcmVhdGlvbi1EYXRlIGxpbmUgaW4gdGhlIGhlYWRlciBlbnRyeQorIyBmcm9tIGEgUE9UIGZpbGUuCisjCisjIFRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgdGhlIGZvbGxvd2luZyBvY2N1cnJlbmNlcyBvZiB0aGUKKyMgcGF0dGVybiBpcyBhY2hpZXZlZCBieSBsb29raW5nIGF0IHRoZSBob2xkIHNwYWNlLgorL14iUE9ULUNyZWF0aW9uLURhdGU6IC4qIiQveworeAorIyBUZXN0IGlmIHRoZSBob2xkIHNwYWNlIGlzIGVtcHR5Lgorcy9QL1AvCit0YQorIyBZZXMgaXQgd2FzIGVtcHR5LiBGaXJzdCBvY2N1cnJlbmNlLiBSZW1vdmUgdGhlIGxpbmUuCitnCitkCitiYgorOmEKKyMgVGhlIGhvbGQgc3BhY2Ugd2FzIG5vbmVtcHR5LiBGb2xsb3dpbmcgb2NjdXJyZW5jZXMuIERvIG5vdGhpbmcuCit4Cis6YgorfQpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L3BvL3JvLmdtbyBiL3BhcnRlZC0xLjguNy9wby9yby5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBlZThkZgotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9wby9yby5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L3BvL3JvLnBvIGIvcGFydGVkLTEuOC43L3BvL3JvLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1MTY5ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvcG8vcm8ucG8KQEAgLTAsMCArMSwzMDMwIEBACisjIE1lc2FqZWxlIO5uIGxpbWJhIHJvbeJu4yBwZW50cnUgR05VIFBhcnRlZAorIyBDb3B5cmlnaHQgKEMpIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIExhdXJlbnRpdSBCdXpkdWdhbiA8bGJ1ekByb2xpeC5vcmc+LCAyMDA1CisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBwYXJ0ZWQgMS42LjIzXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGJ1Zy1wYXJ0ZWRAZ251Lm9yZ1xuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDA3LTA1LTA5IDE3OjAyLTA0MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDA1LTA4LTA4IDEyOjAwLTA1XG4iCisiTGFzdC1UcmFuc2xhdG9yOiBMYXVyZW50aXUgQnV6ZHVnYW4gPGxidXpAcm9saXgub3JnPlxuIgorIkxhbmd1YWdlLVRlYW06IFJvbWFuaWFuIDx0cmFuc2xhdGlvbi10ZWFtLXJvQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1JU08tODg1OS0yXG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuICE9IDEpO1xuIgorCisjOiBsaWIvY2xvc2VvdXQuYzo3NAorbXNnaWQgIndyaXRlIGVycm9yIgorbXNnc3RyICIiCisKKyM6IGxpYi9lcnJvci5jOjEyNQorIywgZnV6enkKK21zZ2lkICJVbmtub3duIHN5c3RlbSBlcnJvciIKK21zZ3N0ciAiVGlwIGRlIHNpc3RlbSBkZSBmabppZXJlIG5lY3Vub3NjdXQgXCIlc1wiLiIKKworIzogbGliL2dldG9wdC5jOjUzMSBsaWIvZ2V0b3B0LmM6NTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYCVzJyBpcyBhbWJpZ3VvdXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6NTgwIGxpYi9nZXRvcHQuYzo1ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiBgLS0lcycgZG9lc24ndCBhbGxvdyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo1OTMgbGliL2dldG9wdC5jOjU5OAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIGAlYyVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjY0MSBsaWIvZ2V0b3B0LmM6NjYwIGxpYi9nZXRvcHQuYzo5NzYgbGliL2dldG9wdC5jOjk5NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIGAlcycgcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6Njk4IGxpYi9nZXRvcHQuYzo3MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVucmVjb2duaXplZCBvcHRpb24gYC0tJXMnXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjcwOSBsaWIvZ2V0b3B0LmM6NzEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bnJlY29nbml6ZWQgb3B0aW9uIGAlYyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo3NjQgbGliL2dldG9wdC5jOjc2NworIywgYy1mb3JtYXQKK21zZ2lkICIlczogaWxsZWdhbCBvcHRpb24gLS0gJWNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6NzczIGxpYi9nZXRvcHQuYzo3NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgb3B0aW9uIC0tICVjXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjgyOCBsaWIvZ2V0b3B0LmM6ODQ0IGxpYi9nZXRvcHQuYzoxMDQ4IGxpYi9nZXRvcHQuYzoxMDY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQgLS0gJWNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6ODk3IGxpYi9nZXRvcHQuYzo5MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiBgLVcgJXMnIGlzIGFtYmlndW91c1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo5MzcgbGliL2dldG9wdC5jOjk1NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIGAtVyAlcycgZG9lc24ndCBhbGxvdyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOgorIy4gR2V0IHRyYW5zbGF0aW9ucyBmb3Igb3BlbiBhbmQgY2xvc2luZyBxdW90YXRpb24gbWFya3MuCisjLgorIy4gVGhlIG1lc3NhZ2UgY2F0YWxvZyBzaG91bGQgdHJhbnNsYXRlICJgIiB0byBhIGxlZnQKKyMuIHF1b3RhdGlvbiBtYXJrIHN1aXRhYmxlIGZvciB0aGUgbG9jYWxlLCBhbmQgc2ltaWxhcmx5IGZvcgorIy4gIiciLiAgSWYgdGhlIGNhdGFsb2cgaGFzIG5vIHRyYW5zbGF0aW9uLAorIy4gbG9jYWxlX3F1b3Rpbmdfc3R5bGUgcXVvdGVzIGBsaWtlIHRoaXMnLCBhbmQKKyMuIGNsb2NhbGVfcXVvdGluZ19zdHlsZSBxdW90ZXMgImxpa2UgdGhpcyIuCisjLgorIy4gRm9yIGV4YW1wbGUsIGFuIEFtZXJpY2FuIEVuZ2xpc2ggVW5pY29kZSBsb2NhbGUgc2hvdWxkCisjLiB0cmFuc2xhdGUgImAiIHRvIFUrMjAxQyAoTEVGVCBET1VCTEUgUVVPVEFUSU9OIE1BUkspLCBhbmQKKyMuIHNob3VsZCB0cmFuc2xhdGUgIiciIHRvIFUrMjAxRCAoUklHSFQgRE9VQkxFIFFVT1RBVElPTgorIy4gTUFSSykuICBBIEJyaXRpc2ggRW5nbGlzaCBVbmljb2RlIGxvY2FsZSBzaG91bGQgaW5zdGVhZAorIy4gdHJhbnNsYXRlIHRoZXNlIHRvIFUrMjAxOCAoTEVGVCBTSU5HTEUgUVVPVEFUSU9OIE1BUkspIGFuZAorIy4gVSsyMDE5IChSSUdIVCBTSU5HTEUgUVVPVEFUSU9OIE1BUkspLCByZXNwZWN0aXZlbHkuCisjLgorIy4gSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBwdXQgaGVyZSwgcGxlYXNlIHNlZQorIy4gPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUXVvdGF0aW9uX21hcmsjR2x5cGhzPgorIy4gYW5kIHVzZSBnbHlwaHMgc3VpdGFibGUgZm9yIHlvdXIgbGFuZ3VhZ2UuCisjOiBsaWIvcXVvdGVhcmcuYzoyMjkKK21zZ2lkICJgIgorbXNnc3RyICIiCisKKyM6IGxpYi9xdW90ZWFyZy5jOjIzMAorbXNnaWQgIiciCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxMzEKK21zZ2lkICJTdWNjZXNzIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTM0Cittc2dpZCAiTm8gbWF0Y2giCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxMzcKK21zZ2lkICJJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE0MAorbXNnaWQgIkludmFsaWQgY29sbGF0aW9uIGNoYXJhY3RlciIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE0MworbXNnaWQgIkludmFsaWQgY2hhcmFjdGVyIGNsYXNzIG5hbWUiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNDYKK21zZ2lkICJUcmFpbGluZyBiYWNrc2xhc2giCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNDkKK21zZ2lkICJJbnZhbGlkIGJhY2sgcmVmZXJlbmNlIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTUyCittc2dpZCAiVW5tYXRjaGVkIFsgb3IgW14iCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNTUKK21zZ2lkICJVbm1hdGNoZWQgKCBvciBcXCgiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNTgKK21zZ2lkICJVbm1hdGNoZWQgXFx7IgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTYxCittc2dpZCAiSW52YWxpZCBjb250ZW50IG9mIFxce1xcfSIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE2NAorbXNnaWQgIkludmFsaWQgcmFuZ2UgZW5kIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTY3Cittc2dpZCAiTWVtb3J5IGV4aGF1c3RlZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE3MAorbXNnaWQgIkludmFsaWQgcHJlY2VkaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE3MworbXNnaWQgIlByZW1hdHVyZSBlbmQgb2YgcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTc2Cittc2dpZCAiUmVndWxhciBleHByZXNzaW9uIHRvbyBiaWciCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNzkKK21zZ2lkICJVbm1hdGNoZWQgKSBvciBcXCkiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzo2ODAKK21zZ2lkICJObyBwcmV2aW91cyByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgIiIKKworIzogbGliL3JwbWF0Y2guYzo3MAorbXNnaWQgIl5beVldIgorbXNnc3RyICIiCisKKyM6IGxpYi9ycG1hdGNoLmM6NzMKK21zZ2lkICJeW25OXSIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogVHJhbnNsYXRlICIoQykiIHRvIHRoZSBjb3B5cmlnaHQgc3ltYm9sCisjLiAoQy1pbi1hLWNpcmNsZSksIGlmIHRoaXMgc3ltYm9sIGlzIGF2YWlsYWJsZSBpbiB0aGUgdXNlcidzCisjLiBsb2NhbGUuICBPdGhlcndpc2UsIGRvIG5vdCB0cmFuc2xhdGUgIihDKSI7IGxlYXZlIGl0IGFzLWlzLgorIzogbGliL3ZlcnNpb24tZXRjLmM6NjYKK21zZ2lkICIoQykiCittc2dzdHIgIiIKKworIzogbGliL3ZlcnNpb24tZXRjLmM6NjgKK21zZ2lkICIiCisiXG4iCisiTGljZW5zZSBHUEx2Mis6IEdOVSBHUEwgdmVyc2lvbiAyIG9yIGxhdGVyIDxodHRwOi8vZ251Lm9yZy9saWNlbnNlcy9ncGwuIgorImh0bWw+XG4iCisiVGhpcyBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgYXJlIGZyZWUgdG8gY2hhbmdlIGFuZCByZWRpc3RyaWJ1dGUgaXQuXG4iCisiVGhlcmUgaXMgTk8gV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIldyaXR0ZW4gYnkgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjg4CisjLCBjLWZvcm1hdAorbXNnaWQgIldyaXR0ZW4gYnkgJXMgYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzo5MgorIywgYy1mb3JtYXQKK21zZ2lkICJXcml0dGVuIGJ5ICVzLCAlcywgYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjLiBZb3UgY2FuIHVzZSBsaW5lIGJyZWFrcywgZXN0aW1hdGluZyB0aGF0IGVhY2ggYXV0aG9yIG5hbWUgb2NjdXBpZXMKKyMuIGNhLiAxNiBzY3JlZW4gY29sdW1ucyBhbmQgdGhhdCBhIHNjcmVlbiBsaW5lIGhhcyBjYS4gODAgY29sdW1ucy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjLiBZb3UgY2FuIHVzZSBsaW5lIGJyZWFrcywgZXN0aW1hdGluZyB0aGF0IGVhY2ggYXV0aG9yIG5hbWUgb2NjdXBpZXMKKyMuIGNhLiAxNiBzY3JlZW4gY29sdW1ucyBhbmQgdGhhdCBhIHNjcmVlbiBsaW5lIGhhcyBjYS4gODAgY29sdW1ucy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjEwNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorIiVzLCBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiJXMsICVzLCBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6MTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiJXMsICVzLCAlcywgYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjLiBZb3UgY2FuIHVzZSBsaW5lIGJyZWFrcywgZXN0aW1hdGluZyB0aGF0IGVhY2ggYXV0aG9yIG5hbWUgb2NjdXBpZXMKKyMuIGNhLiAxNiBzY3JlZW4gY29sdW1ucyBhbmQgdGhhdCBhIHNjcmVlbiBsaW5lIGhhcyBjYS4gODAgY29sdW1ucy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjEyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorIiVzLCAlcywgJXMsICVzLFxuIgorImFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzoxMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyIlcywgJXMsICVzLCAlcyxcbiIKKyIlcywgYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjLiBZb3UgY2FuIHVzZSBsaW5lIGJyZWFrcywgZXN0aW1hdGluZyB0aGF0IGVhY2ggYXV0aG9yIG5hbWUgb2NjdXBpZXMKKyMuIGNhLiAxNiBzY3JlZW4gY29sdW1ucyBhbmQgdGhhdCBhIHNjcmVlbiBsaW5lIGhhcyBjYS4gODAgY29sdW1ucy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjE0MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorIiVzLCAlcywgJXMsICVzLFxuIgorIiVzLCAlcywgYW5kIG90aGVycy5cbiIKK21zZ3N0ciAiIgorCisjOiBsaWIveGFsbG9jLWRpZS5jOjM1Cittc2dpZCAibWVtb3J5IGV4aGF1c3RlZCIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6MjM3Cittc2dpZCAiRGlzayBJbWFnZSIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6MzM4IGxpYnBhcnRlZC9hcmNoL2dudS5jOjI2MQorIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMjcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIG9wZW5pbmcgJXM6ICVzIgorbXNnc3RyICJFcm9hcmUgbGEgZGVzY2hpZGVyZWEgJXM6ICVzIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6MzQ5IGxpYnBhcnRlZC9hcmNoL2dudS5jOjI3MQorIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBvcGVuICVzIHJlYWQtd3JpdGUgKCVzKS4gICVzIGhhcyBiZWVuIG9wZW5lZCByZWFkLW9ubHkuIgorbXNnc3RyICIiCisiTnUgcG90IGRlc2NoaWRlICVzIGNpdGlyZS1zY3JpZXJlICglcykuICVzIGEgZm9zdCBkZXNjaGlzIG51bWFpLWNpdGlyZS4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzo0MTEgbGlicGFydGVkL2FyY2gvbGludXguYzoxNDMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGR1cmluZyBzZWVrIGZvciByZWFkIG9uICVzIgorbXNnc3RyICIlcyDubiB0aW1wdWwgY+N1dONyaWkgcGVudHJ1IGNpdGlyZSBwZSAlcyIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjQ0NCBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo0NDkgbGlicGFydGVkL2FyY2gvZ251LmM6NTQ4CisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo2NzYgbGlicGFydGVkL2FyY2gvbGludXguYzoxMzkxCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjE0NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZHVyaW5nIHJlYWQgb24gJXMiCittc2dzdHIgIiVzIO5uIHRpbXB1bCBjaXRpcmlpIHBlICVzIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6NDgwIGxpYnBhcnRlZC9hcmNoL2dudS5jOjUwOQorIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxNTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbid0IHdyaXRlIHRvICVzLCBiZWNhdXNlIGl0IGlzIG9wZW5lZCByZWFkLW9ubHkuIgorbXNnc3RyICJOdSBwb3Qgc2NyaWUgcGUgJXMsIHBlbnRydSBj4yBlc3RlIGRlc2NoaXMgbnVtYWktY2l0aXJlLiIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjQ5NiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjE1NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZHVyaW5nIHNlZWsgZm9yIHdyaXRlIG9uICVzIgorbXNnc3RyICIlcyDubiB0aW1wdWwgY+N1dONyaWkgcGVudHJ1IHNjcmllcmUgcGUgJXMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzo1MzMgbGlicGFydGVkL2FyY2gvZ251LmM6NTg1IGxpYnBhcnRlZC9hcmNoL2dudS5jOjYzMAorIzogbGlicGFydGVkL2FyY2gvZ251LmM6NzA3IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTUxNworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxNjEyIGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTY4NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkdXJpbmcgd3JpdGUgb24gJXMiCittc2dzdHIgIiVzIO5uIHRpbXB1bCBzY3JpZXJpaSBwZSAlcyIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo2MyBwYXJ0cHJvYmUvcGFydHByb2JlLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeSBgJXMgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogJXMgW09QVElPTl1cbiIKKyIgIG9yOiAgJXMgREVWSUNFIE1JTk9SXG4iCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo3MAorbXNnaWQgIiIKKyJDbGVhciB1bnVzZWQgc3BhY2Ugb24gYSBGQVQgcGFydGl0aW9uIChhIEdOVSBQYXJ0ZWQgdGVzdGluZyB0b29sKS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjc0Cittc2dpZCAiICAgICAgLS1oZWxwICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdFxuIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6NzUKK21zZ2lkICIgICAgICAtLXZlcnNpb24gIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0XG4iCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo3NyBwYXJ0cHJvYmUvcGFydHByb2JlLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJSZXBvcnQgYnVncyB0byA8JXM+LlxuIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6Mjg1CisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBmZXcgYXJndW1lbnRzIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6MjkwCisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0cHJvYmUvcGFydHByb2JlLmM6MTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbT1BUSU9OXSBbREVWSUNFXS4uLlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRwcm9iZS9wYXJ0cHJvYmUuYzoxNDIKK21zZ2lkICIiCisiSW5mb3JtIHRoZSBPUyBvZiBwYXJ0aXRpb24gdGFibGUgY2hhbmdlcy5cbiIKKyJcbiIKKyIgIC1kLCAtLW5vLXVwZGF0ZSAgZG9uJ3QgdXBkYXRlIHRoZSBrZXJuZWxcbiIKKyIgIC1zLCAtLXN1bW1hcnkgICAgcHJpbnQgYSBzdW1tYXJ5IG9mIGNvbnRlbnRzXG4iCisiICAtaCwgLS1oZWxwICAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0XG4iCisiICAtdiwgLS12ZXJzaW9uICAgIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0XG4iCittc2dzdHIgIiIKKworIzogcGFydHByb2JlL3BhcnRwcm9iZS5jOjE1MAorbXNnaWQgIiIKKyJcbiIKKyJXaXRoIG5vIERFVklDRSwgcHJvYmUgYWxsIHBhcnRpdGlvbnMuXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIG9wZW4gJXMuIgorbXNnc3RyICJOdSBwb3QgZGVzY2hpZGUgJXMuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzoxMTQKK21zZ2lkICJVbmFibGUgdG8gcHJvYmUgc3RvcmUuIgorbXNnc3RyICJOdSBwb3QgcHJvYmEgYHN0b3JlJy4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjM1MgorbXNnaWQgIiIKKyJUaGUgcGFydGl0aW9uIHRhYmxlIGNhbm5vdCBiZSByZS1yZWFkLiAgVGhpcyBtZWFucyB5b3UgbmVlZCB0byByZWJvb3QgYmVmb3JlICIKKyJtb3VudGluZyBhbnkgbW9kaWZpZWQgcGFydGl0aW9ucy4gIFlvdSBhbHNvIG5lZWQgdG8gcmVpbnN0YWxsIHlvdXIgYm9vdCAiCisibG9hZGVyIGJlZm9yZSB5b3UgcmVib290ICh3aGljaCBtYXkgcmVxdWlyZSBtb3VudGluZyBtb2RpZmllZCBwYXJ0aXRpb25zKS4gICIKKyJJdCBpcyBpbXBvc3NpYmxlIGRvIGJvdGggdGhpbmdzISAgU28geW91J2xsIG5lZWQgdG8gYm9vdCBvZmYgYSByZXNjdWUgZGlzaywgIgorImFuZCByZWluc3RhbGwgeW91ciBib290IGxvYWRlciBmcm9tIHRoZSByZXNjdWUgZGlzay4gIFJlYWQgc2VjdGlvbiA0IG9mIHRoZSAiCisiUGFydGVkIFVzZXIgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCittc2dzdHIgIiIKKyJUYWJlbGEgZGUgcGFydGn+aWkgbnUgcG9hdGUgZmkgcmVjaXRpdOMuICBBY2Vhc3RhIO5uc2VhbW7jIGPjIHRyZWJ1aWUgc+MgIgorInJlYm9vdC1h/mkg7m5haW50ZSAgZGUgYSBtb250YSBvcmljZSBwYXJ0af5paSBtb2RpZmljYXRlLiAgRGVhc2VtZW5lYSwgYXIgIgorInRyZWJ1aSBz4yByZWluc3RhbGH+aSBib290IGxvYWRlci11bCDubmFpbnRlIGRlIGEgcmVib290LWEgKGNlZWEgY2UgYXIgcHV0ZWEgIgorInPjIG5lY2VzaXRlIG1vbnRhcmVhIHBhcnRp/mlpbG9yIG1vZGlmaWNhdGUpLiAgRXN0ZSBpbXBvc2liaWwgc+MgZmFjZf5pICIKKyJhbWJlbGUgbHVjcnVyaSEgIEG6YSBj4yB0cmVidWllIHPjIGJvb3QtYf5pIGRlIHBlIHVuIGRpc2MgZGUgc2FsdmFyZSC6aSAiCisicmVpbnN0YWxh/mkgYm9vdCBsb2FkZXItdWwgZC12b2FzdHLjIGRlIHBlIGRpc2N1bCBkZSBzYWx2YXJlLiAgQ2l0af5pICIKKyJzZWP+aXVuZWEgNCBkaW4gZG9jdW1lbnRh/mlhIHV0aWxpemF0b3J1bHVpIGRlIFBhcnRlZCBwZW50cnUgaW5mb3JtYf5paSAiCisic3VwbGltZW50YXJlLiIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6MzY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgcGFydGl0aW9uIHRhYmxlIG9uICVzIGNhbm5vdCBiZSByZS1yZWFkICglcykuICBUaGlzIG1lYW5zIHRoZSBIdXJkIGtub3dzICIKKyJub3RoaW5nIGFib3V0IGFueSBtb2RpZmljYXRpb25zIHlvdSBtYWRlLiAgWW91IHNob3VsZCByZWJvb3QgeW91ciBjb21wdXRlciAiCisiYmVmb3JlIGRvaW5nIGFueXRoaW5nIHdpdGggJXMuIgorbXNnc3RyICIiCisiVGFiZWxhIGRlIHBhcnRp/mlpIHBlICVzIG51IHBvYXRlIGZpIHJlLWNpdGl04yAoJXMpLiAgQWNlYXN0YSDubnNlYW1u4yBj4yAiCisiSHVyZCBudSC6dGllIG5pbWljIGRlc3ByZSBuaWNpIG8gbW9kaWZpY2FyZSBwZSBjYXJlIGH+aSBm42N1dC1vLiAgQXIgdHJlYnVpICIKKyJz4yByZWJvb3QtYf5pIGNvbXB1dGVydWwg7m5haW50ZSBkZSBhIGZhY2UgY2V2YSBjdSAlcy4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjM4MCBwYXJ0ZWQvcGFydGVkLmM6MjQ0MworbXNnaWQgIiIKKyJZb3Ugc2hvdWxkIHJlaW5zdGFsbCB5b3VyIGJvb3QgbG9hZGVyIGJlZm9yZSByZWJvb3RpbmcuICBSZWFkIHNlY3Rpb24gNCBvZiAiCisidGhlIFBhcnRlZCBVc2VyIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorbXNnc3RyICIiCisiQXIgdHJlYnVpIHPjIHJlaW5zdGFsYf5pIGJvb3QgbG9hZGVyLXVsIGQtdm9hc3Ry4yDubmFpbnRlIGRlIHJlYm9vdC1hcmUuICAiCisiQ2l0af5pIHNlY/5pdW5lYSA0IGRpbiBkb2N1bWVudGH+aWEgdXRpbGl6YXRvcnVsdWkgUGFydGVkIHBlbnRydSBpbmZvcm1h/mlpICIKKyJzdXBsaW1lbnRhcmUuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo3NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdHJ5aW5nIHRvIHN5bmMgJXMgdG8gZGlzayIKK21zZ3N0ciAiJXMg7m5jZWFyY+Mgc+Mgc2luY3Jvbml6ZXplICVzIHBlIGRpc2MiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6NDA4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzdGF0IGRldmljZSAlcyAtICVzLiIKK21zZ3N0ciAiTnUgYW0gcHV0dXQgYWZsYSBkYXRlIGRlc3ByZSBkaXNwb3ppdGl2dWwgJXMgLSAlcy4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6NTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgZGV0ZXJtaW5lIHNlY3RvciBzaXplIGZvciAlczogJXMuXG4iCisiVXNpbmcgdGhlIGRlZmF1bHQgc2VjdG9yIHNpemUgKCVsbGQpLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjUzOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRGV2aWNlICVzIGhhcyBhIGxvZ2ljYWwgc2VjdG9yIHNpemUgb2YgJWxsZC4gIE5vdCBhbGwgcGFydHMgb2YgR05VIFBhcnRlZCAiCisic3VwcG9ydCB0aGlzIGF0IHRoZSBtb21lbnQsIGFuZCB0aGUgd29ya2luZyBjb2RlIGlzIEhJR0hMWSBFWFBFUklNRU5UQUwuXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo1NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGRldGVybWluZSB0aGUgc2l6ZSBvZiAlcyAoJXMpLiIKK21zZ3N0ciAiTnUgcG90IGRldGVybWluYSBkaW1lbnNpdW5lYSBsdWkgJXMgKCVzKS4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6NjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBnZXQgaWRlbnRpdHkgb2YgZGV2aWNlICVzIC0gJXMiCittc2dzdHIgIk51IGFtIHB1dHV0IGlkZW50aWZpY2EgZGlzcG96aXRpdnVsICVzIC0gJXMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6Njc3Cittc2dpZCAiR2VuZXJpYyBJREUiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkRldmljZSAlcyBoYXMgbXVsdGlwbGUgKCVkKSBsb2dpY2FsIHNlY3RvcnMgcGVyIHBoeXNpY2FsIHNlY3Rvci5cbiIKKyJHTlUgUGFydGVkIHN1cHBvcnRzIHRoaXMgRVhQRVJJTUVOVEFMTFkgZm9yIHNvbWUgc3BlY2lhbCBkaXNrIGxhYmVsL2ZpbGUgIgorInN5c3RlbSBjb21iaW5hdGlvbnMsIGUuZy4gR1BUIGFuZCBleHQyLzMuXG4iCisiUGxlYXNlIGNvbnN1bHQgdGhlIHdlYiBzaXRlIGZvciB1cC10by1kYXRlIGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjg3MworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBpbml0aWFsaXNpbmcgU0NTSSBkZXZpY2UgJXMgLSAlcyIKK21zZ3N0ciAiRXJvYXJlIGxhIGluaf5pYWxpemFyZWEgZGlzcG96aXRpdnVsdWkgU0NTSSAlcyAtICVzIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjkyOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBkZXZpY2UgJXMgaGFzIHplcm8gbGVuZ3RoLCBhbmQgY2FuJ3QgcG9zc2libHkgc3RvcmUgYSBmaWxlIHN5c3RlbSBvciAiCisicGFydGl0aW9uIHRhYmxlLiAgUGVyaGFwcyB5b3Ugc2VsZWN0ZWQgdGhlIHdyb25nIGRldmljZT8iCittc2dzdHIgIiIKKyJEaXNwb3ppdGl2dWwgJXMgYXJlIGx1bmdpbWUtemVybyC6aSBudSBwb2F0ZSBmaXppYyBzdG9jYSB1biBzaXN0ZW0gZGUgIgorImZpumllcmUgc2F1IG8gdGFiZWzjIGRlIHBhcnRp/mlpLiBB/mkgc2VsZWN0YXQgZGluIGdyZbplYWzjIHVuIGFsdCAiCisiZGlzcG96aXRpdj8iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTAzMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlVuYWJsZSB0byBkZXRlcm1pbmUgZ2VvbWV0cnkgb2YgZmlsZS9kZXZpY2UgJXMuICBZb3Ugc2hvdWxkIG5vdCB1c2UgUGFydGVkICIKKyJ1bmxlc3MgeW91IFJFQUxMWSBrbm93IHdoYXQgeW91J3JlIGRvaW5nISIKK21zZ3N0ciAiIgorIk51IHBvdCBkZXRlcm1pbmEgZ2VvbWV0cmlhIGZpumllcnVsdWkvZGlzcG96aXRpdnVsdWkuIE4tYXIgdHJlYnVpIHPjICIKKyJmb2xvc2n+aSBQYXJ0ZWQgZGVj4nQgZGFj4yC6dGn+aSBjdSBBREVWw1JBVCBjZSBmYWNl/mkhIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExMTAKK21zZ2lkICJEQUM5NjAgUkFJRCBjb250cm9sbGVyIgorbXNnc3RyICJDb250cm9sbGVyIFJBSUQgREFDOTYwIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExMTUKK21zZ2lkICJQcm9taXNlIFNYOCBTQVRBIERldmljZSIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExMjAKK21zZ2lkICJJQk0gUzM5MCBEQVNEIGRyaXZlIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTEyNQorbXNnaWQgIklCTSBpU2VyaWVzIFZpcnR1YWwgREFTRCIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExMzAKK21zZ2lkICJDb21wYXEgU21hcnQgQXJyYXkiCittc2dzdHIgIkNvbXBhcSBTbWFydCBBcnJheSIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTM1Cittc2dpZCAiQVRBUkFJRCBDb250cm9sbGVyIgorbXNnc3RyICJDb250cm9sbGVyIEFUQVJBSUQiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTE0MAorbXNnaWQgIkkyTyBDb250cm9sbGVyIgorbXNnc3RyICJDb250cm9sbGVyIEkyTyIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTQ1Cittc2dpZCAiVXNlci1Nb2RlIExpbnV4IFVCRCIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExNTYKK21zZ2lkICJMaW51eCBkZXZpY2UtbWFwcGVyIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTE2MgorbXNnaWQgIlVua25vd24iCittc2dzdHIgIk5lY3Vub3NjdXQiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTE2OQorbXNnaWQgInBlZF9kZXZpY2VfbmV3KCkgIFVuc3VwcG9ydGVkIGRldmljZSB0eXBlIgorbXNnc3RyICJwZWRfZGV2aWNlX25ldygpIFRpcCBkZSBkaXNwb3ppdGl2IG5lc3Vwb3J0YXQiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MjA4MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRXJyb3IgaW5mb3JtaW5nIHRoZSBrZXJuZWwgYWJvdXQgbW9kaWZpY2F0aW9ucyB0byBwYXJ0aXRpb24gJXMgLS0gJXMuICBUaGlzICIKKyJtZWFucyBMaW51eCB3b24ndCBrbm93IGFib3V0IGFueSBjaGFuZ2VzIHlvdSBtYWRlIHRvICVzIHVudGlsIHlvdSByZWJvb3QgLS0gIgorInNvIHlvdSBzaG91bGRuJ3QgbW91bnQgaXQgb3IgdXNlIGl0IGluIGFueSB3YXkgYmVmb3JlIHJlYm9vdGluZy4iCittc2dzdHIgIiIKKyJFcm9hcmUgbGEgaW5mb3JtYXJlYSBrZXJuZWwtdWx1aSBkZXNwcmUgbW9kaWZpY+NyaWxlIGbjY3V0ZSBwYXJ0af5pZWkgJXMgLS0gJSIKKyJzLiAgQWNlYXN0YSDubnNlYW1u4yBj4yBMaW51eCBudSB2YSC6dGkgbmltaWMgZGVzcHJlIHNjaGltYuNyaWxlIHBlIGNhcmUgbGUtIgorImH+aSBm42N1dCBsdWkgJXMgcOJu4yBj4m5kIG51IHJlYm9vdC1h/mkgLS0gYbphIGPjIG4tYXIgdHJlYnVpIHPjIO5sIG1vbnRh/mkgIgorInNhdSBmb2xvc2n+aSDubiB2cmV1biBmZWwg7m5haW50ZSBkZSBhIHJlYm9vdC1hLiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoyMjYyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisicGFydGVkIHdhcyB1bmFibGUgdG8gcmUtcmVhZCB0aGUgcGFydGl0aW9uIHRhYmxlIG9uICVzICglcykuICBUaGlzIG1lYW5zICIKKyJMaW51eCB3b24ndCBrbm93IGFueXRoaW5nIGFib3V0IHRoZSBtb2RpZmljYXRpb25zIHlvdSBtYWRlLiAiCittc2dzdHIgIiIKKyJLZXJuZWwtdWwgbnUgYSBwdXR1dCByZS1jaXRpIHRhYmVsYSBkZSBwYXJ0af5paSBwZSAlcyAoJXMpLiAgQWNlYXN0YSAiCisi7m5zZWFtbuMgY+MgTGludXggbnUgdmEgunRpIG5pbWljIGRlc3ByZSBzY2hpbWLjcmlsZSBwZSBjYXJlIGxlLWH+aSBm42N1dCAiCisicOJu4yBj4m5kIG51IHJlYm9vdC1h/mkuICBBciB0cmVidWkgc+MgcmVib290LWH+aSBjb21wdXRlcnVsIO5uYWludGUgZGUgYSAiCisiZmFjZSBjZXZhIGN1ICVzLiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoyMzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUga2VybmVsIHdhcyB1bmFibGUgdG8gcmUtcmVhZCB0aGUgcGFydGl0aW9uIHRhYmxlIG9uICVzICglcykuICBUaGlzIG1lYW5zICIKKyJMaW51eCB3b24ndCBrbm93IGFueXRoaW5nIGFib3V0IHRoZSBtb2RpZmljYXRpb25zIHlvdSBtYWRlIHVudGlsIHlvdSAiCisicmVib290LiAgWW91IHNob3VsZCByZWJvb3QgeW91ciBjb21wdXRlciBiZWZvcmUgZG9pbmcgYW55dGhpbmcgd2l0aCAlcy4iCittc2dzdHIgIiIKKyJLZXJuZWwtdWwgbnUgYSBwdXR1dCByZS1jaXRpIHRhYmVsYSBkZSBwYXJ0af5paSBwZSAlcyAoJXMpLiAgQWNlYXN0YSAiCisi7m5zZWFtbuMgY+MgTGludXggbnUgdmEgunRpIG5pbWljIGRlc3ByZSBzY2hpbWLjcmlsZSBwZSBjYXJlIGxlLWH+aSBm42N1dCAiCisicOJu4yBj4m5kIG51IHJlYm9vdC1h/mkuICBBciB0cmVidWkgc+MgcmVib290LWH+aSBjb21wdXRlcnVsIO5uYWludGUgZGUgYSAiCisiZmFjZSBjZXZhIGN1ICVzLiIKKworIzogbGlicGFydGVkL2NzL2dlb20uYzoxNjIKK21zZ2lkICJDYW4ndCBoYXZlIHRoZSBlbmQgYmVmb3JlIHRoZSBzdGFydCEiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2NzL2dlb20uYzoxNjkKK21zZ2lkICJDYW4ndCBoYXZlIGEgcGFydGl0aW9uIG91dHNpZGUgdGhlIGRpc2shIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9jcy9nZW9tLmM6MzY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkF0dGVtcHQgdG8gd3JpdGUgc2VjdG9ycyAlbGQtJWxkIG91dHNpZGUgb2YgcGFydGl0aW9uIG9uICVzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvY3MvZ2VvbS5jOjQwNiBsaWJwYXJ0ZWQvZnMvbGludXhfc3dhcC9saW51eF9zd2FwLmM6NDc1Cittc2dpZCAiY2hlY2tpbmcgZm9yIGJhZCBibG9ja3MiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2RlYnVnLmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkJhY2t0cmFjZSBoYXMgJWQgY2FsbHMgb24gc3RhY2s6XG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2RlYnVnLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkFzc2VydGlvbiAoJXMpIGF0ICVzOiVkIGluIGZ1bmN0aW9uICVzKCkgZmFpbGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIwMworIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gb3BlbiAlcyAtIHVucmVjb2duaXNlZCBkaXNrIGxhYmVsLiIKK21zZ3N0ciAiTnUgcG90IGRlc2NoaWRlICVzIC0gZXRpY2hldOMgZGUgZGlzYyBuZXJlY3Vub3NjdXTjLiIKKworIzogbGlicGFydGVkL2Rpc2suYzo0NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgbGlicGFydGVkIGRvZXNuJ3QgaGF2ZSB3cml0ZSBzdXBwb3J0IGZvciAlcy4gIFBlcmhhcHMgaXQgd2FzIGNvbXBpbGVkICIKKyJyZWFkLW9ubHkuIgorbXNnc3RyICIiCisiQWNlYXN0IGxpYnBhcnRlZCBudSBhcmUgc3Vwb3J0IHBlbnRydSAlcy4gUHJvYmFiaWwgY+MgYSBmb3N0IGNvbXBpbGF0IG51bWFpLSIKKyJjaXRpcmUuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjU5OAorIywgYy1mb3JtYXQKK21zZ2lkICJQYXJ0aXRpb24gJWQgaXMgJXMsIGJ1dCB0aGUgZmlsZSBzeXN0ZW0gaXMgJXMuIgorbXNnc3RyICJQYXJ0af5pYSAlZCBlc3RlICVzLCBkYXIgc2lzdGVtdWwgZGUgZmm6aWVyZSBlc3RlICVzLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxMDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGRpc2sgbGFiZWxzIGRvIG5vdCBzdXBwb3J0IGV4dGVuZGVkIHBhcnRpdGlvbnMuIgorbXNnc3RyICJFdGljaGV0ZWxlIGRlIGRpc2MgJXMgbnUgc3Vwb3J04yBwYXJ0af5paSBleHRpbnNlLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGRpc2sgbGFiZWxzIGRvbid0IHN1cHBvcnQgbG9naWNhbCBvciBleHRlbmRlZCBwYXJ0aXRpb25zLiIKK21zZ3N0ciAiRXRpY2hldGVsZSBkZSBkaXNjICVzIG51IHN1cG9ydOMgcGFydGn+aWkgbG9naWNlIHNhdSBleHRpbnNlLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNjQ3Cittc2dpZCAiVG9vIG1hbnkgcHJpbWFyeSBwYXJ0aXRpb25zLiIKK21zZ3N0ciAiUHJlYSBtdWx0ZSBwYXJ0af5paSBwcmltYXJlLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW4ndCBhZGQgYSBsb2dpY2FsIHBhcnRpdGlvbiB0byAlcywgYmVjYXVzZSB0aGVyZSBpcyBubyBleHRlbmRlZCBwYXJ0aXRpb24uIgorbXNnc3RyICIiCisiTnUgcG90IGFk43VnYSBvIHBhcnRp/mllIGxvZ2lj4yBsdWkgJXMgcGVudHJ1IGPjIGFjZWFzdGEgbnUgZXN0ZSBvIHBhcnRp/mllICIKKyJleHRpbnPjLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbid0IGhhdmUgbW9yZSB0aGFuIG9uZSBleHRlbmRlZCBwYXJ0aXRpb24gb24gJXMuIgorbXNnc3RyICJOdSBwdXRl/mkgYXZlYSBtYWkgbXVsdCBkZSBvIHBhcnRp/mllIGV4dGluc+MgcGUgJXMuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE2OTAKK21zZ2lkICJDYW4ndCBoYXZlIGxvZ2ljYWwgcGFydGl0aW9ucyBvdXRzaWRlIG9mIHRoZSBleHRlbmRlZCBwYXJ0aXRpb24uIgorbXNnc3RyICJOdSBwdXRl/mkgYXZlYSBwYXJ0af5paSBsb2dpY2Ug7m4gYWZhcmEgcGFydGn+aWVpIGV4dGluc2UuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE3MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2FuJ3QgaGF2ZSBhIGxvZ2ljYWwgcGFydGl0aW9uIG91dHNpZGUgb2YgdGhlIGV4dGVuZGVkIHBhcnRpdGlvbiBvbiAlcy4iCittc2dzdHIgIk51IHB1dGX+aSBhdmVhIG8gcGFydGn+aWUgbG9naWPjIO5uIGFmYXJhIHBhcnRp/mllaSBleHRpbnNlIHBlICVzLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNzI1IGxpYnBhcnRlZC9kaXNrLmM6MTc3OSBsaWJwYXJ0ZWQvZGlzay5jOjE5NDUKK21zZ2lkICJDYW4ndCBoYXZlIG92ZXJsYXBwaW5nIHBhcnRpdGlvbnMuIgorbXNnc3RyICJOdSBwdXRl/mkgYXZlYSBwYXJ0af5paSBjYXJlIHNlIHN1cHJhcHVuLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNzMzCittc2dpZCAiQ2FuJ3QgaGF2ZSBhIHByaW1hcnkgcGFydGl0aW9uIGluc2lkZSBhbiBleHRlbmRlZCBwYXJ0aXRpb24uIgorbXNnc3RyICJOdSBwdXRl/mkgYXZlYSBvIHBhcnRp/mllIHByaW1hcuMg7m50ci1vIHBhcnRp/mllIGV4dGluc+MuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNDAKK21zZ2lkICJtZXRhZGF0YSIKK21zZ3N0ciAibWV0YWRhdGEiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE0MgorbXNnaWQgImZyZWUiCittc2dzdHIgImxpYmVyIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNDQgcGFydGVkL3VpLmM6MTE2OSBwYXJ0ZWQvdWkuYzoxMTk3Cittc2dpZCAiZXh0ZW5kZWQiCittc2dzdHIgImV4dGluc+MiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE0NiBwYXJ0ZWQvdWkuYzoxMTczIHBhcnRlZC91aS5jOjEyMDEKK21zZ2lkICJsb2dpY2FsIgorbXNnc3RyICJsb2dpY+MiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE0OCBwYXJ0ZWQvdWkuYzoxMTY1IHBhcnRlZC91aS5jOjExOTMKK21zZ2lkICJwcmltYXJ5IgorbXNnc3RyICJwcmltYXLjIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNjQKK21zZ2lkICJib290IgorbXNnc3RyICJib290IgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNjYKK21zZ2lkICJyb290IgorbXNnc3RyICJyb290IgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNjgKK21zZ2lkICJzd2FwIgorbXNnc3RyICJzd2FwIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNzAKK21zZ2lkICJoaWRkZW4iCittc2dzdHIgImFzY3Vuc+MiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE3MgorbXNnaWQgInJhaWQiCittc2dzdHIgInJhaWQiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE3NAorbXNnaWQgImx2bSIKK21zZ3N0ciAibHZtIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNzYKK21zZ2lkICJsYmEiCittc2dzdHIgImxiYSIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTc4Cittc2dpZCAiaHAtc2VydmljZSIKK21zZ3N0ciAiaHAtc2VydmljZSIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTgwCittc2dpZCAicGFsbyIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxODIKK21zZ2lkICJwcmVwIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE4NAorbXNnaWQgIm1zZnRyZXMiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gcGFydGl0aW9uIGZsYWcsICVkLiIKK21zZ3N0ciAiRmxhZyBkZSBwYXJ0af5pZSBuZWN1bm9zY3V0LCAlZC4iCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo3OAorbXNnaWQgIkluZm9ybWF0aW9uIgorbXNnc3RyICJJbmZvcm1h/mlpIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6NzkKK21zZ2lkICJXYXJuaW5nIgorbXNnc3RyICJBdmVydGlzbWVudCIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjgwCittc2dpZCAiRXJyb3IiCittc2dzdHIgIkVyb2FyZSIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjgxCittc2dpZCAiRmF0YWwiCittc2dzdHIgIkZhdGFs4yIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjgyCittc2dpZCAiQnVnIgorbXNnc3RyICJCdWciCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4MworbXNnaWQgIk5vIEltcGxlbWVudGF0aW9uIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4NworbXNnaWQgIkZpeCIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODgKK21zZ2lkICJZZXMiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjg5Cittc2dpZCAiTm8iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjkwCittc2dpZCAiT0siCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjkxCittc2dpZCAiUmV0cnkiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjkyCittc2dpZCAiSWdub3JlIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo5MworbXNnaWQgIkNhbmNlbCIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBIGJ1ZyBoYXMgYmVlbiBkZXRlY3RlZCBpbiBHTlUgUGFydGVkLiAgUmVmZXIgdG8gdGhlIHdlYiBzaXRlIG9mIHBhcnRlZCAiCisiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3BhcnRlZC9wYXJ0ZWQuaHRtbCBmb3IgbW9yZSBpbmZvcm1hdGlvbnMgb2Ygd2hhdCAiCisiY291bGQgYmUgdXNlZnVsIGZvciBidWcgc3VibWl0dGluZyEgIFBsZWFzZSBlbWFpbCBhIGJ1ZyByZXBvcnQgdG8gYnVnLSIKKyJwYXJ0ZWRAZ251Lm9yZyBjb250YWluaW5nIGF0IGxlYXN0IHRoZSB2ZXJzaW9uICglcykgYW5kIHRoZSBmb2xsb3dpbmcgIgorIm1lc3NhZ2U6ICAiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzozODQKK21zZ2lkICJDb3VsZCBub3QgZGV0ZWN0IGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjM5NQorbXNnaWQgIlRoZSBmaWxlIHN5c3RlbSBpcyBiaWdnZXIgdGhhbiBpdHMgdm9sdW1lISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjQwMworIywgYy1mb3JtYXQKK21zZ2lkICJTdXBwb3J0IGZvciBvcGVuaW5nICVzIGZpbGUgc3lzdGVtcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjQ0NQorIywgYy1mb3JtYXQKK21zZ2lkICJTdXBwb3J0IGZvciBjcmVhdGluZyAlcyBmaWxlIHN5c3RlbXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo1MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VwcG9ydCBmb3IgY2hlY2tpbmcgJXMgZmlsZSBzeXN0ZW1zIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NTcxCittc2dpZCAicmF3IGJsb2NrIGNvcHlpbmciCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo1ODIKK21zZ2lkICJncm93aW5nIGZpbGUgc3lzdGVtIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NjIyCittc2dpZCAiQ2FuJ3QgY29weSBvbnRvIGFuIG92ZXJsYXBwaW5nIHBhcnRpdGlvbi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo2NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkRpcmVjdCBzdXBwb3J0IGZvciBjb3B5aW5nIGZpbGUgc3lzdGVtcyBpcyBub3QgeWV0IGltcGxlbWVudGVkIGZvciAlcy4gICIKKyJIb3dldmVyLCBzdXBwb3J0IGZvciByZXNpemluZyBpcyBpbXBsZW1lbnRlZC4gIFRoZXJlZm9yZSwgdGhlIGZpbGUgc3lzdGVtICIKKyJjYW4gYmUgY29waWVkIGlmIHRoZSBuZXcgcGFydGl0aW9uIGlzIGF0IGxlYXN0IGFzIGJpZyBhcyB0aGUgb2xkIG9uZS4gIFNvLCAiCisiZWl0aGVyIHNocmluayB0aGUgcGFydGl0aW9uIHlvdSBhcmUgdHJ5aW5nIHRvIGNvcHksIG9yIGNvcHkgdG8gYSBiaWdnZXIgIgorInBhcnRpdGlvbi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo2NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VwcG9ydCBmb3IgY29weWluZyAlcyBmaWxlIHN5c3RlbXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo2OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VwcG9ydCBmb3IgcmVzaXppbmcgJXMgZmlsZSBzeXN0ZW1zIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjMxNQorbXNnaWQgImNyZWF0aW5nIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQwMgorbXNnaWQgIlRoZSBmaWxlIHN5c3RlbSBpcyBpbiBhbiBpbnZhbGlkIHN0YXRlLiAgUGVyaGFwcyBpdCBpcyBtb3VudGVkPyIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0MTAKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gaXMgaW4gb2xkICh1bnJlc2l6ZWFibGUpIGZvcm1hdC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDE2Cittc2dpZCAiSW52YWxpZCBmcmVlIGJsb2NrcyBjb3VudC4gIFJ1biByZWlzZXJmc2NrIC0tY2hlY2sgZmlyc3QuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQzMQorbXNnaWQgImNoZWNraW5nIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQzNworbXNnaWQgIlJlaXNlcmZzIHRyZWUgc2VlbXMgdG8gYmUgY29ycnVwdGVkLiAgUnVuIHJlaXNlcmZzY2sgLS1jaGVjayBmaXJzdC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDQ5Cittc2dpZCAiIgorIlRoZSByZWlzZXJmcyBmaWxlIHN5c3RlbSBwYXNzZWQgYSBiYXNpYyBjaGVjay4gIEZvciBhIG1vcmUgY29tcHJlaGVuc2l2ZSAiCisiY2hlY2ssIHJ1biByZWlzZXJmc2NrIC0tY2hlY2suIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQ3NAorbXNnaWQgIlNvcnJ5LCBjYW4ndCBtb3ZlIHRoZSBzdGFydCBvZiByZWlzZXJmcyBwYXJ0aXRpb25zIHlldC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDkwCittc2dpZCAiQ291bGRuJ3QgcmVvcGVuIGRldmljZSBhYnN0cmFjdGlvbiBsYXllciBmb3IgcmVhZC93cml0ZS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NTA4IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NTUyCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjI1MCBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjYyOQorbXNnaWQgInNocmlua2luZyIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo1MjAKKyMsIGZ1enp5Cittc2dpZCAiZXhwYW5kaW5nIgorbXNnc3RyICJBdmVydGlzbWVudCIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NTkyCittc2dpZCAiQ291bGRuJ3QgY3JlYXRlIHJlaXNlcmZzIGRldmljZSBhYnN0cmFjdGlvbiBoYW5kbGVyLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo2MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGV2aWNlIGlzIHRvbyBzbWFsbCBmb3IgJWx1IGJsb2Nrcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NjE1Cittc2dpZCAiY29weWluZyIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo2ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgcmVzb2x2ZSBzeW1ib2wgJXMuICBFcnJvcjogJXMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjcwNAorbXNnaWQgIkdOVSBQYXJ0ZWQgZm91bmQgYW4gaW52YWxpZCBsaWJyZWlzZXJmcyBsaWJyYXJ5LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo3MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkdOVSBQYXJ0ZWQgaGFzIGRldGVjdGVkIGxpYnJlaXNlcmZzIGludGVyZmFjZSB2ZXJzaW9uIG1pc21hdGNoLiAgRm91bmQgJWQtJSIKKyJkLCByZXF1aXJlZCAlZC4gUmVpc2VyRlMgc3VwcG9ydCB3aWxsIGJlIGRpc2FibGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2FpeC5jOjEzNworbXNnaWQgIlN1cHBvcnQgZm9yIHJlYWRpbmcgQUlYIGRpc2sgbGFiZWxzIGlzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYWl4LmM6MTQ4Cittc2dpZCAiU3VwcG9ydCBmb3Igd3JpdGluZyBBSVggZGlzayBsYWJlbHMgaXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9haXguYzoxNjEKK21zZ2lkICIiCisiU3VwcG9ydCBmb3IgYWRkaW5nIHBhcnRpdGlvbnMgdG8gQUlYIGRpc2sgbGFiZWxzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYWl4LmM6MTcxCittc2dpZCAiIgorIlN1cHBvcnQgZm9yIGR1cGxpY2F0aW5nIHBhcnRpdGlvbnMgaW4gQUlYIGRpc2sgbGFiZWxzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYWl4LmM6MTg5Cittc2dpZCAiIgorIlN1cHBvcnQgZm9yIHNldHRpbmcgc3lzdGVtIHR5cGUgb2YgcGFydGl0aW9ucyBpbiBBSVggZGlzayBsYWJlbHMgaXMgbm90ICIKKyJpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYWl4LmM6MTk5Cittc2dpZCAiU3VwcG9ydCBmb3Igc2V0dGluZyBmbGFncyBpbiBBSVggZGlzayBsYWJlbHMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9ic2QuYzo1MDEgbGlicGFydGVkL2xhYmVscy9kYXNkLmM6NzU1CisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rvcy5jOjE5NzQgbGlicGFydGVkL2xhYmVscy9kdmguYzo3NzAKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6MTQ0OCBsaWJwYXJ0ZWQvbGFiZWxzL2xvb3AuYzoyNDgKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6MTQwOCBsaWJwYXJ0ZWQvbGFiZWxzL3BjOTguYzo3NTkKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6MTA0MSBsaWJwYXJ0ZWQvbGFiZWxzL3N1bi5jOjcwNQorbXNnaWQgIlVuYWJsZSB0byBzYXRpc2Z5IGFsbCBjb25zdHJhaW50cyBvbiB0aGUgcGFydGl0aW9uLiIKK21zZ3N0ciAiTnUgcG90IHNhdGlzZmFjZSB0b2F0ZSBjb25zdHLibmdlcmlsZSBwZSBwYXJ0af5pZS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYnNkLmM6NTI2Cittc2dpZCAiVW5hYmxlIHRvIGFsbG9jYXRlIGEgYnNkIGRpc2tsYWJlbCBzbG90LiIKK21zZ3N0ciAiTnUgcG90IGFsb2NhIGxvYyBwZW50cnUgZXRpY2hldGEgZGUgZGlzYyBic2QuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rhc2QuYzoxNjYKKyMsIGZ1enp5Cittc2dpZCAiVW5hYmxlIHRvIGRldGVybWluZSB0aGUgYmxvY2sgc2l6ZSBvZiB0aGlzIGRhc2QiCittc2dzdHIgIk51IHBvdCBkZXRlcm1pbmEgZGltZW5zaXVuZWEgbHVpICVzICglcykuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rhc2QuYzo3ODEKKyMsIGZ1enp5Cittc2dpZCAiVW5hYmxlIHRvIGFsbG9jYXRlIGEgZGFzZCBkaXNrbGFiZWwgc2xvdCIKK21zZ3N0ciAiTnUgcG90IGFsb2NhIGxvYyBwZW50cnUgZXRpY2hldGEgZGUgZGlzYyBic2QuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rvcy5jOjgyNworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHBhcnRpdGlvbiB0YWJsZSBvbiAlcyAtLSB3cm9uZyBzaWduYXR1cmUgJXguIgorbXNnc3RyICJUYWJlbGEgZGUgcGFydGn+aWkgaW52YWxpZOMgcGUgJXMgLS0gc2VtbuN0dXLjIGdyZbppdOMgJXguIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rvcy5jOjg1NQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHBhcnRpdGlvbiB0YWJsZSAtIHJlY3Vyc2l2ZSBwYXJ0aXRpb24gb24gJXMuIgorbXNnc3RyICJUYWJlbGEgZGUgcGFydGn+aWkgaW52YWxpZOMgLSBwYXJ0af5pZSByZWN1cnNpduMgcGUgJXMuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rvcy5jOjEzMTgKK21zZ2lkICJFeHRlbmRlZCBwYXJ0aXRpb25zIGNhbm5vdCBiZSBoaWRkZW4gb24gbXNkb3MgZGlzayBsYWJlbHMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZG9zLmM6MTk1OAorbXNnaWQgIlBhcnRlZCBjYW4ndCByZXNpemUgcGFydGl0aW9ucyBtYW5hZ2VkIGJ5IFdpbmRvd3MgRHluYW1pYyBEaXNrLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjE5MAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBoYXMgbm8gZXh0ZW5kZWQgcGFydGl0aW9uICh2b2x1bWUgaGVhZGVyIHBhcnRpdGlvbikuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6MzEzCittc2dpZCAiQ2hlY2tzdW0gaXMgd3JvbmcsIGluZGljYXRpbmcgdGhlIHBhcnRpdGlvbiB0YWJsZSBpcyBjb3JydXB0LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjYxNgorbXNnaWQgIk9ubHkgcHJpbWFyeSBwYXJ0aXRpb25zIGNhbiBiZSByb290IHBhcnRpdGlvbnMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6NjMwCittc2dpZCAiT25seSBwcmltYXJ5IHBhcnRpdGlvbnMgY2FuIGJlIHN3YXAgcGFydGl0aW9ucy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9kdmguYzo2NDQKK21zZ2lkICJPbmx5IGxvZ2ljYWwgcGFydGl0aW9ucyBjYW4gYmUgYSBib290IGZpbGUuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6NzIxCittc2dpZCAiT25seSBsb2dpY2FsIHBhcnRpdGlvbnMgKGJvb3QgZmlsZXMpIGhhdmUgYSBuYW1lLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjgxMgorbXNnaWQgIlRvbyBtYW55IHByaW1hcnkgcGFydGl0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBvcGVuIGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBzZWVrIGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyByZWFkIGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTEzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgd3JpdGUgZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIlcyDubiB0aW1wdWwgc2NyaWVyaWkgcGUgJXMiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIElPQ1RMIGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBBUEkgdmVyc2lvbiBtaXNtYXRjaFxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgVW5zdXBwb3J0ZWQgZGlzayB0eXBlXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBVbnN1cHBvcnRlZCBkaXNrIGZvcm1hdFxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEzMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgRGlzayBpbiB1c2VcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIENvbmZpZyBmaWxlIHN5bnRheCBlcnJvclxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgVm9sdW1lIGxhYmVsIGlzIGNvcnJ1cHRlZC5cbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIGEgZGF0YSBzZXQgbmFtZSBpcyBjb3JydXB0ZWQuXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBzcGFjZSBhbGxvY2F0aW9uXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBkZXZpY2UgdmVyaWZpY2F0aW9uIGZhaWxlZFxuIgorIlRoZSBzcGVjaWZpZWQgZGV2aWNlIGlzIG5vdCBhIHZhbGlkIERBU0QgZGV2aWNlXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgRmF0YWwgZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6NDU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBjb250YWlucyBHUFQgc2lnbmF0dXJlcywgaW5kaWNhdGluZyB0aGF0IGl0IGhhcyBhIEdQVCB0YWJsZS4gIEhvd2V2ZXIsIGl0ICIKKyJkb2VzIG5vdCBoYXZlIGEgdmFsaWQgZmFrZSBtc2RvcyBwYXJ0aXRpb24gdGFibGUsIGFzIGl0IHNob3VsZC4gIFBlcmhhcHMgaXQgIgorIndhcyBjb3JydXB0ZWQgLS0gcG9zc2libHkgYnkgYSBwcm9ncmFtIHRoYXQgZG9lc24ndCB1bmRlcnN0YW5kIEdQVCBwYXJ0aXRpb24gIgorInRhYmxlcy4gIE9yIHBlcmhhcHMgeW91IGRlbGV0ZWQgdGhlIEdQVCB0YWJsZSwgYW5kIGFyZSBub3cgdXNpbmcgYW4gbXNkb3MgIgorInBhcnRpdGlvbiB0YWJsZS4gIElzIHRoaXMgYSBHUFQgcGFydGl0aW9uIHRhYmxlPyIKK21zZ3N0ciAiIgorIiVzIGNvbv5pbmUgc2VtbuN0dXJpIEdQVCwgaW5kaWPibmQgY+MgYXJlIG8gdGFiZWzjIEdQVC4gIFRvdHW6aSwgYWNlYXN0YSBudSAiCisiYXJlIG8gdGFiZWzjIGRlIHBhcnRp/mlpIG1zZG9zIGZhbHPjLCBhumEgY3VtIGFyIHRyZWJ1aS4gIFByb2JhYmlsIGPjIGEgZm9zdCAiCisiY29ydXB04yAtLSBwb3NpYmlsIGRlIHVuIHByb2dyYW0gY2UgbnUg7m7+ZWxlZ2UgdGFiZWxlbGUgZGUgcGFydGn+aWkgR1BULiAgIgorIlNhdSBwcm9iYWJpbCBj4yBh/mkgunRlcnMgdGFiZWxhIEdQVCC6aSBmb2xvc2n+aSBhY3VtIG8gdGFiZWzjIGRlIHBhcnRp/mlpICIKKyJtc2Rvcy4gIEVzdGUgYWNlYXN0YSBvIHRhYmVs4yBkZSBwYXJ0af5paSBHUFQ/IgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjY0OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvcm1hdCBvZiB0aGUgR1BUIHBhcnRpdGlvbiB0YWJsZSBpcyB2ZXJzaW9uICV4LCB3aGljaCBpcyBuZXdlciB0aGFuICIKKyJ3aGF0IFBhcnRlZCBjYW4gcmVjb2duaXNlLiAgUGxlYXNlIHRlbGwgdXMhICBidWctcGFydGVkQGdudS5vcmciCittc2dzdHIgIiIKKyJGb3JtYXR1bCB0YWJlbGVpIGRlIHBhcnRp/mlpIEdQVCBlc3RlIHZlcnNpdW5lYSAleCwgY2FyZSBlc3RlIG1haSBub3UgZGVj4nQgIgorImNlZWEgY2UgUGFydGVkIHBvYXRlIHJlY3Vub2G6dGUuICBW4yBydWfjbSBzcHVuZf5pLW5lISAgYnVnLXBhcnRlZEBnbnUub3JnIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm90IGFsbCBvZiB0aGUgc3BhY2UgYXZhaWxhYmxlIHRvICVzIGFwcGVhcnMgdG8gYmUgdXNlZCwgeW91IGNhbiBmaXggdGhlIEdQVCAiCisidG8gdXNlIGFsbCBvZiB0aGUgc3BhY2UgKGFuIGV4dHJhICVsbHUgYmxvY2tzKSBvciBjb250aW51ZSB3aXRoIHRoZSBjdXJyZW50ICIKKyJzZXR0aW5nPyAiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzo4MjcKK21zZ2lkICIiCisiVGhlIGJhY2t1cCBHUFQgdGFibGUgaXMgbm90IGF0IHRoZSBlbmQgb2YgdGhlIGRpc2ssIGFzIGl0IHNob3VsZCBiZS4gIFRoaXMgIgorIm1pZ2h0IG1lYW4gdGhhdCBhbm90aGVyIG9wZXJhdGluZyBzeXN0ZW0gYmVsaWV2ZXMgdGhlIGRpc2sgaXMgc21hbGxlci4gIEZpeCwgIgorImJ5IG1vdmluZyB0aGUgYmFja3VwIHRvIHRoZSBlbmQgKGFuZCByZW1vdmluZyB0aGUgb2xkIGJhY2t1cCk/IgorbXNnc3RyICIiCisiVGFiZWxhIEdQVCBkZSByZXplcnbjIG51IGVzdGUgbGEgc2bicrppdHVsIGRpc2N1bHVpLCBjdW0gYXIgdHJidWkgc+MgZmllLiAgIgorIkFjZWFzdGEgYXIgcHV0ZWEg7m5zZW1uYSBj4yB1biBhbHQgc2lzdGVtIGRlIG9wZXJhcmUgY3JlZGUgY+MgZGlhY3VsIGVzdGUgIgorIm1haSBtaWMuICBSZXBhcuMsIG11dOJuZCByZXplcnZhIChiYWNrdXApIGxhIHNm4nK6aXQgKLppILp0ZXJnZSB2ZWNoZWEgIgorInJlemVyduM/IgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjg2MgorbXNnaWQgIiIKKyJUaGUgcHJpbWFyeSBHUFQgdGFibGUgaXMgY29ycnVwdCwgYnV0IHRoZSBiYWNrdXAgYXBwZWFycyBPSywgc28gdGhhdCB3aWxsIGJlICIKKyJ1c2VkLiIKK21zZ3N0ciAiIgorIlRhYmVsYSBwcmltYXLjIEdQVCBlc3RlIGNvcnVwdOMsIGRhciByZXplcnZhIHBhcmUgT0ssIGG6YSBj4yB2YSBmaSBmb2xvc2l04yAiCisicmV6ZXJ2YS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6ODcwCittc2dpZCAiIgorIkJvdGggdGhlIHByaW1hcnkgYW5kIGJhY2t1cCBHUFQgdGFibGVzIGFyZSBjb3JydXB0LiAgVHJ5IG1ha2luZyBhIGZyZXNoICIKKyJ0YWJsZSwgYW5kIHVzaW5nIFBhcnRlZCdzIHJlc2N1ZSBmZWF0dXJlIHRvIHJlY292ZXIgcGFydGl0aW9ucy4iCittc2dzdHIgIiIKKyJBdOJ0IHRhYmVsYSBwcmltYXLjIGPidCC6aSBjZWEgZGUgcmV6ZXJ24yBzdW50IGNvcnVwdGUuICDObmNlcmNh/mkgc+MgY3JlYf5pICIKKyJvIHRhYmVs4yBub3XjILppIHPjIGZvbG9zaf5pIGNhcGFiaWxpdGF0ZWEgZGUgc2FsdmFyZSBsdWkgUGFydGVkIHBlbnRydSBhICIKKyJyZWN1cGVyYSBwYXJ0af5paWxlLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoxODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBzaWduYXR1cmUgJXggZm9yIE1hYyBkaXNrIGxhYmVscy4iCittc2dzdHIgIlNlbW7jdHVy4yBpbnZhbGlk4yAleCBwZW50cnUgZXRpY2hldGVsZSBkZSBkaXNjIHBlbnRydSBNYWMuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjIyNgorbXNnaWQgIlBhcnRpdGlvbiBtYXAgaGFzIG5vIHBhcnRpdGlvbiBtYXAgZW50cnkhIgorbXNnc3RyICJIYXJ0YSBkZSBwYXJ0af5paSBudSBhcmUgbmljaSBvIGludHJhcmUhIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyB0b28gc21hbGwgZm9yIGEgTWFjIGRpc2sgbGFiZWwhIgorbXNnc3RyICIlcyBlc3RlIHByZWEgbWljIHBlbnRyIG8gZXRpY2hldOMgZGUgZGlzYyBwZW50cnUgTWFjLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo1MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGFydGl0aW9uICVkIGhhcyBhbiBpbnZhbGlkIHNpZ25hdHVyZSAleC4iCittc2dzdHIgIlBhcnRp/mlhICVkIGFyZSBvIHNlbW7jdHVy4yBpbnZhbGlk4yAleC4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIlBhcnRpdGlvbiAlZCBoYXMgYW4gaW52YWxpZCBsZW5ndGggb2YgMCBieXRlcyEiCittc2dzdHIgIlBhcnRp/mlhICVkIGFyZSBvIGx1bmdpbWUgaW52YWxpZOMgZGUgMCBvY3Rl/mkhIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjU4MAorbXNnaWQgIlRoZSBkYXRhIHJlZ2lvbiBkb2Vzbid0IHN0YXJ0IGF0IHRoZSBzdGFydCBvZiB0aGUgcGFydGl0aW9uLiIKK21zZ3N0ciAiUmVnaXVuZWEgZGUgZGF0ZSBudSDubmNlcGUgbGEg7m5jZXB1dHVsIHBhcnRp/mllaS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NTk3Cittc2dpZCAiVGhlIGJvb3QgcmVnaW9uIGRvZXNuJ3Qgc3RhcnQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBwYXJ0aXRpb24uIgorbXNnc3RyICJSZWdpdW5lYSBkZSBib290IG51IO5uY2VwZSBsYSDubmNlcHV0dWwgcGFydGn+aWVpLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo2MTEKK21zZ2lkICJUaGUgcGFydGl0aW9uJ3MgYm9vdCByZWdpb24gZG9lc24ndCBvY2N1cHkgdGhlIGVudGlyZSBwYXJ0aXRpb24uIgorbXNnc3RyICJSZWdpdW5lYSBkZSBib290IGEgcGFydGn+aWVpIG51IG9jdXDjIO5udHJlYWdhIHBhcnRp/mllLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo2MjIKK21zZ2lkICJUaGUgcGFydGl0aW9uJ3MgZGF0YSByZWdpb24gZG9lc24ndCBvY2N1cHkgdGhlIGVudGlyZSBwYXJ0aXRpb24uIgorbXNnc3RyICJSZWdpdW5lYSBkZSBkYXRlIGEgcGFydGn+aWVpIG51IG9jdXDjIO5udHJlYWdhIHBhcnRp/mllLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo2NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldlaXJkIGJsb2NrIHNpemUgb24gZGV2aWNlIGRlc2NyaXB0b3I6ICVkIGJ5dGVzIGlzIG5vdCBkaXZpc2libGUgYnkgNTEyLiIKK21zZ3N0ciAiIgorIkRpbWVuc2l1bmUgZGUgYmxvYyBjaXVkYXTjIHBlIGRlc2NyaXB0b3J1bCBkaXNwb3ppdGl2dWx1aTogJWQgb2N0Zf5pIG51IGVzdGUgIgorImRpdml6aWJpbCBjdSA1MTIuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjY4OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGRyaXZlciBkZXNjcmlwdG9yIHNheXMgdGhlIHBoeXNpY2FsIGJsb2NrIHNpemUgaXMgJWQgYnl0ZXMsIGJ1dCBMaW51eCAiCisic2F5cyBpdCBpcyAlZCBieXRlcy4iCittc2dzdHIgIiIKKyJEZXNjcmlwdG9ydWwgZGUgZHJpdmVyIHNwdW5lIGPjIGRpbWVuc2l1bmVhIGZpemlj4yBhIGJsb2N1bHVpIGVzdGUgJWQgb2N0Zf5pICIKKyJkYXIgTGludXggc3B1bmUgY+MgZXN0ZSAlZCBvY3Rl/mkuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjczNgorbXNnaWQgIk5vIHZhbGlkIHBhcnRpdGlvbiBtYXAgZm91bmQuIgorbXNnc3RyICJOdSBhIGZvc3QgZ+NzaXTjIG5pY2kgbyBoYXJ04yBkZSBwYXJ0af5pZSB2YWxpZOMuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjc5NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ29uZmxpY3RpbmcgcGFydGl0aW9uIG1hcCBlbnRyeSBzaXplcyEgIEVudHJ5IDEgc2F5cyBpdCBpcyAlZCwgYnV0IGVudHJ5ICVkICIKKyJzYXlzIGl0IGlzICVkISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjgyMgorbXNnaWQgIldlaXJkISAgVGhlcmUgYXJlIDIgcGFydGl0aW9ucyBtYXAgZW50cmllcyEiCittc2dzdHIgIkNpdWRhdCEgIEV4aXN04yAyIGludHLjcmkg7m4gaGFydGEgcGFydGn+aWVpIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjEzNDcKK21zZ2lkICIiCisiQ2hhbmdpbmcgdGhlIG5hbWUgb2YgYSByb290IG9yIHN3YXAgcGFydGl0aW9uIHdpbGwgcHJldmVudCBMaW51eCBmcm9tICIKKyJyZWNvZ25pc2luZyBpdCBhcyBzdWNoLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjE0NDMKK21zZ2lkICJDYW4ndCBhZGQgYW5vdGhlciBwYXJ0aXRpb24gLS0gdGhlIHBhcnRpdGlvbiBtYXAgaXMgdG9vIHNtYWxsISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3BjOTguYzozNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBwYXJ0aXRpb24gdGFibGUgb24gJXMuIgorbXNnc3RyICJUYWJlbGEgZGUgcGFydGn+aWkgaW52YWxpZOMgcGUgJXMuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3BjOTguYzo0MDYgbGlicGFydGVkL2xhYmVscy9wYzk4LmM6NDg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQYXJ0aXRpb24gJWQgaXNuJ3QgYWxpZ25lZCB0byBjeWxpbmRlciBib3VuZGFyaWVzLiAgVGhpcyBpcyBzdGlsbCAiCisidW5zdXBwb3J0ZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcGM5OC5jOjc5MQorbXNnaWQgIkNhbid0IGFkZCBhbm90aGVyIHBhcnRpdGlvbi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzoxNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBCYWQgY2hlY2tzdW0gb24gYmxvY2sgJWxsdSBvZiB0eXBlICVzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjQ5NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IERpZG4ndCBmaW5kIHJkYiBibG9jaywgc2hvdWxkIG5ldmVyIGhhcHBlbi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo1ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBMb29wIGRldGVjdGVkIGF0IGJsb2NrICVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjYwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IFRoZSAlcyBsaXN0IHNlZW1zIGJhZCBhdCBibG9jayAlcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo2ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gbGlzdCBiYWQgYmxvY2tzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjY5NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBsaXN0IHBhcnRpdGlvbiBibG9ja3MuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6NzA1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGxpc3QgZmlsZSBzeXN0ZW0gYmxvY2tzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjcxMworIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBsaXN0IGJvb3QgYmxvY2tzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjc0MAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gd3JpdGUgcGFydGl0aW9uIGJsb2NrIGF0ICVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjEwNjkKK21zZ2lkICJVbmFibGUgdG8gYWxsb2NhdGUgYSBwYXJ0aXRpb24gbnVtYmVyLiIKK21zZ3N0ciAiTnUgcG90IGFsb2NhIHVuIG51beNyIGRlIHBhcnRp/mllLiIKKworIzogbGlicGFydGVkL2xhYmVscy9zdW4uYzoxNDUKK21zZ2lkICJDb3JydXB0ZWQgU3VuIGRpc2sgbGFiZWwgZGV0ZWN0ZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6MjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZGlzayBDSFMgZ2VvbWV0cnkgKCVkLCVkLCVkKSByZXBvcnRlZCBieSB0aGUgb3BlcmF0aW5nIHN5c3RlbSBkb2VzIG5vdCAiCisibWF0Y2ggdGhlIGdlb21ldHJ5IHN0b3JlZCBvbiB0aGUgZGlzayBsYWJlbCAoJWQsJWQsJWQpLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3N1bi5jOjI4OAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgZGlzayBsYWJlbCBkZXNjcmliZXMgYSBkaXNrIGJpZ2dlciB0aGFuICVzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3N1bi5jOjQ0MgorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgZGlzayBoYXMgJWQgY3lsaW5kZXJzLCB3aGljaCBpcyBncmVhdGVyIHRoYW4gdGhlIG1heGltdW0gb2YgNjU1MzYuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6NzM3Cittc2dpZCAiIgorIlRoZSBXaG9sZSBEaXNrIHBhcnRpdGlvbiBpcyB0aGUgb25seSBhdmFpbGFibGUgb25lIGxlZnQuICBHZW5lcmFsbHksIGl0IGlzICIKKyJub3QgYSBnb29kIGlkZWEgdG8gb3ZlcndyaXRlIHRoaXMgcGFydGl0aW9uIHdpdGggYSByZWFsIG9uZS4gIFNvbGFyaXMgbWF5ICIKKyJub3QgYmUgYWJsZSB0byBib290IHdpdGhvdXQgaXQsIGFuZCBTSUxPICh0aGUgc3BhcmMgYm9vdCBsb2FkZXIpIGFwcHJlY2lhdGVzICIKKyJpdCBhcyB3ZWxsLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3N1bi5jOjc1MgorbXNnaWQgIlN1biBkaXNrIGxhYmVsIGlzIGZ1bGwuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjE2MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgb3BlbmluZyBkZXZpY2UgJyVzJyBmYWlsZWQuXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzoxNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHNlZWtpbmcgZGV2aWNlICclcycgZmFpbGVkLlxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6MTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyB3cml0aW5nIHRvIGRldmljZSAnJXMnIGZhaWxlZCxcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjE3NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgcmVhZGluZyBmcm9tIGRldmljZSAnJXMnIGZhaWxlZC5cbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjE3OQorIywgYy1mb3JtYXQKK21zZ2lkICJGYXRhbCBlcnJvclxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQxOAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIFZUT0MgbGFiZWxzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0MjQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBWVE9DIEZNVDEgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDMxCittc2dpZCAiQ291bGQgbm90IHJlYWQgVlRPQyBGTVQ0IERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQzOAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIFZUT0MgRk1UNSBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0NDUKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBWVE9DIEZNVDcgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDYyCittc2dpZCAiQ291bGQgbm90IHdyaXRlIFZUT0MgbGFiZWxzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0NjgKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgVlRPQyBGTVQxIERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQ3NQorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBWVE9DIEZNVDQgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDgyCittc2dpZCAiQ291bGQgbm90IHdyaXRlIFZUT0MgRk1UNSBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0ODkKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgVlRPQyBGTVQ3IERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9saWJwYXJ0ZWQuYzoyOTYgbGlicGFydGVkL2xpYnBhcnRlZC5jOjMxNgorbXNnaWQgIk91dCBvZiBtZW1vcnkuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC91bml0LmM6MTM5Cittc2dpZCAiQ2Fubm90IGdldCB1bml0IHNpemUgZm9yIHNwZWNpYWwgdW5pdCAnQ09NUEFDVCcuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC91bml0LmM6Mzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIlwiJXNcIiBoYXMgaW52YWxpZCBzeW50YXggZm9yIGxvY2F0aW9ucy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL3VuaXQuYzozOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIG1heGltdW0gaGVhZCB2YWx1ZSBpcyAlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL3VuaXQuYzo0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIG1heGltdW0gc2VjdG9yIHZhbHVlIGlzICVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvdW5pdC5jOjQxMyBsaWJwYXJ0ZWQvdW5pdC5jOjU0NQorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgbG9jYXRpb24gJXMgaXMgb3V0c2lkZSBvZiB0aGUgZGV2aWNlICVzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvdW5pdC5jOjUyNworbXNnaWQgIkludmFsaWQgbnVtYmVyLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYWZmcy5jOjYzIGxpYnBhcnRlZC9mcy9hbWlnYS9hcGZzLmM6NTYKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hc2ZzLmM6NzAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGFsbG9jYXRlIHBhcnRpdGlvbiBibG9ja1xuIgorbXNnc3RyICJOdSBwb3QgYWxvY2EgdW4gbnVt43IgZGUgcGFydGn+aWUuIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYWZmcy5jOjc4IGxpYnBhcnRlZC9mcy9hbWlnYS9hcGZzLmM6NzAKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hc2ZzLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gYWxsb2NhdGUgYmxvY2tcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYWZmcy5jOjgzIGxpYnBhcnRlZC9mcy9hbWlnYS9hcGZzLmM6NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBDb3VsZG4ndCByZWFkIGJvb3QgYmxvY2sgJWxsdVxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hZmZzLmM6OTkgbGlicGFydGVkL2ZzL2FtaWdhL2FwZnMuYzo4NgorIzogbGlicGFydGVkL2ZzL2FtaWdhL2FzZnMuYzo5MiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXNmcy5jOjEwNgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IENvdWxkbid0IHJlYWQgcm9vdCBibG9jayAlbGx1XG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gYWxsb2NhdGUgaWQgbGlzdCBlbGVtZW50XG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogQ291bGRuJ3QgcmVhZCBibG9jayAlbGx1XG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6MjAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogQmFkIGNoZWNrc3VtIG9uIGJsb2NrICVsbHUgb2YgdHlwZSAlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jOjIxMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBDb3VsZG4ndCB3cml0ZSBibG9jayAlZFxuIgorbXNnc3RyICIlcyDubiB0aW1wdWwgc2NyaWVyaWkgcGUgJXMiCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jOjI3OAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBhbGxvY2F0ZSBkaXNrX3NwZWNpZmljIHJkYiBibG9ja1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jOjI4OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IERpZG4ndCBmaW5kIHJkYiBibG9jaywgc2hvdWxkIG5ldmVyIGhhcHBlblxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jOjMxOAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byByZWFkIHBhcnRpdGlvbiBibG9jayAlbGx1XG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjg3IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzoxMTIKK21zZ2lkICJJbmNvbnNpc3RlbnQgZ3JvdXAgZGVzY3JpcHRvcnMhIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo5MSBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6MTE2Cittc2dpZCAiRmlsZSBzeXN0ZW0gZnVsbCEiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjY4NgorbXNnaWQgIkludmFsaWQgc3VwZXJibG9jay4gIEFyZSB5b3Ugc3VyZSB0aGlzIGlzIGFuIGV4dDIgZmlsZSBzeXN0ZW0/IgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo3MDAgbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo2NTgKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgZXJyb3JzISAgWW91IHNob3VsZCBydW4gZTJmc2NrLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6NzExCittc2dpZCAiIgorIkZpbGUgc3lzdGVtIHdhcyBub3QgY2xlYW5seSB1bm1vdW50ZWQhICBZb3Ugc2hvdWxkIHJ1biBlMmZzY2suICBNb2RpZnlpbmcgYW4gIgorInVuY2xlYW4gZmlsZSBzeXN0ZW0gY291bGQgY2F1c2Ugc2V2ZXJlIGNvcnJ1cHRpb24uIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo3MzEKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgYW4gaW5jb21wYXRpYmxlIGZlYXR1cmUgZW5hYmxlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjc0MgorbXNnaWQgIkVycm9yIGFsbG9jYXRpbmcgYnVmZmVyIGNhY2hlLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2lub2RlX3JlbG9jYXRvci5jOjExNAorbXNnaWQgIiIKKyJGb3VuZCBhbiBpbm9kZSB3aXRoIGEgaW5jb3JyZWN0IGxpbmsgY291bnQuICBCZXR0ZXIgZ28gcnVuIGUyZnNjayBmaXJzdCEiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9pbm9kZV9yZWxvY2F0b3IuYzo0ODcKK21zZ2lkICJOb3QgZW5vdWdoIGZyZWUgaW5vZGVzISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjIyMworbXNnaWQgIkZpbGUgc3lzdGVtIGlzIHRvbyBmdWxsIHRvIHJlbW92ZSBhIGdyb3VwISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjIzMgorbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyB0b28gbWFueSBhbGxvY2F0ZWQgaW5vZGVzIHRvIHJlbW92ZSBhIGdyb3VwISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjQ5MQorbXNnaWQgImFkZGluZyBncm91cHMiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo1MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBmaWxlIHN5c3RlbSBpcyB0b28gZnVsbCB0byByZXNpemUgaXQgdG8gJWkgYmxvY2tzLiAgU29ycnkuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGZpbGUgc3lzdGVtIGhhcyB0b28gbWFueSBvY2N1cGllZCBpbm9kZXMgdG8gcmVzaXplIGl0IHRvICVpIGJsb2Nrcy4gICIKKyJTb3JyeS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo2NjYKK21zZ2lkICJGaWxlIHN5c3RlbSB3YXMgbm90IGNsZWFubHkgdW5tb3VudGVkISAgWW91IHNob3VsZCBydW4gZTJmc2NrLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjY3NQorbXNnaWQgIiIKKyJUaGUgZmlsZSBzeXN0ZW0gaGFzIHRoZSAnZGlyX2luZGV4JyBmZWF0dXJlIGVuYWJsZWQuICBQYXJ0ZWQgY2FuIG9ubHkgcmVzaXplICIKKyJ0aGUgZmlsZSBzeXN0ZW0gaWYgaXQgZGlzYWJsZXMgdGhpcyBmZWF0dXJlLiAgWW91IGNhbiBlbmFibGUgaXQgbGF0ZXIgYnkgIgorInJ1bm5pbmcgJ3R1bmUyZnMgLU8gZGlyX2luZGV4IERFVklDRScgYW5kIHRoZW4gJ2UyZnNjayAtZkQgREVWSUNFJy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo2OTEKK21zZ2lkICIiCisiQSByZXNpemUgb3BlcmF0aW9uIG9uIHRoaXMgZmlsZSBzeXN0ZW0gd2lsbCB1c2UgRVhQRVJJTUVOVEFMIGNvZGVcbiIKKyJ0aGF0IE1BWSBDT1JSVVBUIGl0IChhbHRob3VnaCBubyBvbmUgaGFzIHJlcG9ydGVkIGFueSBzdWNoIGRhbWFnZSB5ZXQpLlxuIgorIllvdSBzaG91bGQgYXQgbGVhc3QgYmFja3VwIHlvdXIgZGF0YSBmaXJzdCwgYW5kIHJ1biAnZTJmc2NrIC1mJyBhZnRlcndhcmRzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2Jsb2NrX3JlbG9jYXRvci5jOjE5OAorbXNnaWQgIkNyb3NzLWxpbmtlZCBibG9ja3MgZm91bmQhICBCZXR0ZXIgZ28gcnVuIGUyZnNjayBmaXJzdCEiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9ibG9ja19yZWxvY2F0b3IuYzo1MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmxvY2sgJWkgaGFzIG5vIHJlZmVyZW5jZT8gIFdlaXJkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2Jsb2NrX3JlbG9jYXRvci5jOjczNworIywgYy1mb3JtYXQKK21zZ2lkICJCbG9jayAlaSBzaG91bGRuJ3QgaGF2ZSBiZWVuIG1hcmtlZCAoJWQsICVkKSEiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvaW50ZXJmYWNlLmM6MTg2Cittc2dpZCAiIgorIlRoZSBleHQyIGZpbGUgc3lzdGVtIHBhc3NlZCBhIGJhc2ljIGNoZWNrLiAgRm9yIGEgbW9yZSBjb21wcmVoZW5zaXZlIGNoZWNrLCAiCisidXNlIHRoZSBlMmZzY2sgcHJvZ3JhbS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvaW50ZXJmYWNlLmM6MjAzCittc2dpZCAiU29ycnksIGNhbid0IG1vdmUgdGhlIHN0YXJ0IG9mIGV4dDIgcGFydGl0aW9ucyB5ZXQhIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfYnVmZmVyLmM6ODIKK21zZ2lkICJDb3VsZG4ndCBmbHVzaCBidWZmZXIgY2FjaGUhIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfbWtmcy5jOjE2MgorbXNnaWQgIndyaXRpbmcgcGVyLWdyb3VwIG1ldGFkYXRhIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfbWtmcy5jOjU2NAorbXNnaWQgIkZpbGUgc3lzdGVtIHRvbyBzbWFsbCBmb3IgZXh0Mi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jYWxjLmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgbmVlZCAlcyBvZiBmcmVlIGRpc2sgc3BhY2UgdG8gc2hyaW5rIHRoaXMgcGFydGl0aW9uIHRvIHRoaXMgc2l6ZS4gICIKKyJDdXJyZW50bHksIG9ubHkgJXMgaXMgZnJlZS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb250ZXh0LmM6NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNsdXN0ZXIgc3RhcnQgZGVsdGEgPSAlZCwgd2hpY2ggaXMgbm90IGEgbXVsdGlwbGUgb2YgdGhlIGNsdXN0ZXIgc2l6ZSAlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9mYXQuYzozMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGFydGl0aW9uIHRvbyBiaWcvc21hbGwgZm9yIGEgJXMgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICJQYXJ0af5pZSBwcmVhIG1hcmUvbWlj4yBwZW50cnUgdW4gc2lzdGVtIGRlIGZpumllcmUgJXMuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jOjQ3NAorbXNnaWQgIiIKKyJUaGUgRkFUcyBkb24ndCBtYXRjaC4gIElmIHlvdSBkb24ndCBrbm93IHdoYXQgdGhpcyBtZWFucywgdGhlbiBzZWxlY3QgIgorImNhbmNlbCwgcnVuIHNjYW5kaXNrIG9uIHRoZSBmaWxlIHN5c3RlbSwgYW5kIHRoZW4gY29tZSBiYWNrLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jOjUxNAorbXNnaWQgIlRoZXJlIGFyZSBubyBwb3NzaWJsZSBjb25maWd1cmF0aW9ucyBmb3IgdGhpcyBGQVQgdHlwZS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9mYXQuYzo1MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZpbGUgc3lzdGVtIGRvZXNuJ3QgaGF2ZSBleHBlY3RlZCBzaXplcyBmb3IgV2luZG93cyB0byBsaWtlIGl0LiAgQ2x1c3RlciAiCisic2l6ZSBpcyAlZGsgKCVkayBleHBlY3RlZCk7IG51bWJlciBvZiBjbHVzdGVycyBpcyAlZCAoJWQgZXhwZWN0ZWQpOyBzaXplIG9mICIKKyJGQVRzIGlzICVkIHNlY3RvcnMgKCVkIGV4cGVjdGVkKS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9mYXQuYzo1NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZpbGUgc3lzdGVtIGlzIHJlcG9ydGluZyB0aGUgZnJlZSBzcGFjZSBhcyAlZCBjbHVzdGVycywgbm90ICVkIGNsdXN0ZXJzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jOjg3NAorbXNnaWQgIiIKKyJHTlUgUGFydGVkIHdhcyBtaXNjb21waWxlZDogdGhlIEZBVCBib290IHNlY3RvciBzaG91bGQgYmUgNTEyIGJ5dGVzLiAgRkFUICIKKyJzdXBwb3J0IHdpbGwgYmUgZGlzYWJsZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6MTU5Cittc2dpZCAiIgorIlRoZXJlJ3Mgbm90IGVub3VnaCByb29tIGluIHRoZSByb290IGRpcmVjdG9yeSBmb3IgYWxsIG9mIHRoZSBmaWxlcy4gIEVpdGhlciAiCisiY2FuY2VsLCBvciBpZ25vcmUgdG8gbG9zZSB0aGUgZmlsZXMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6MzAwCittc2dpZCAiRXJyb3Igd3JpdGluZyB0byB0aGUgcm9vdCBkaXJlY3RvcnkuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NDg5Cittc2dpZCAiSWYgeW91IGxlYXZlIHlvdXIgZmlsZSBzeXN0ZW0gYXMgRkFUMTYsIHRoZW4geW91IHdpbGwgaGF2ZSBubyBwcm9ibGVtcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo0OTIKK21zZ2lkICIiCisiSWYgeW91IGNvbnZlcnQgdG8gRkFUMTYsIGFuZCBNUyBXaW5kb3dzIGlzIGluc3RhbGxlZCBvbiB0aGlzIHBhcnRpdGlvbiwgdGhlbiAiCisieW91IG11c3QgcmUtaW5zdGFsbCB0aGUgTVMgV2luZG93cyBib290IGxvYWRlci4gIElmIHlvdSB3YW50IHRvIGRvIHRoaXMsIHlvdSAiCisic2hvdWxkIGNvbnN1bHQgdGhlIFBhcnRlZCBtYW51YWwgKG9yIHlvdXIgZGlzdHJpYnV0aW9uJ3MgbWFudWFsKS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1MDAKK21zZ2lkICIiCisiSWYgeW91IGxlYXZlIHlvdXIgZmlsZSBzeXN0ZW0gYXMgRkFUMzIsIHRoZW4geW91IHdpbGwgbm90IGludHJvZHVjZSBhbnkgbmV3ICIKKyJwcm9ibGVtcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1MDQKK21zZ2lkICIiCisiSWYgeW91IGNvbnZlcnQgdG8gRkFUMzIsIGFuZCBNUyBXaW5kb3dzIGlzIGluc3RhbGxlZCBvbiB0aGlzIHBhcnRpdGlvbiwgdGhlbiAiCisieW91IG11c3QgcmUtaW5zdGFsbCB0aGUgTVMgV2luZG93cyBib290IGxvYWRlci4gIElmIHlvdSB3YW50IHRvIGRvIHRoaXMsIHlvdSAiCisic2hvdWxkIGNvbnN1bHQgdGhlIFBhcnRlZCBtYW51YWwgKG9yIHlvdXIgZGlzdHJpYnV0aW9uJ3MgbWFudWFsKS4gIEFsc28sICIKKyJjb252ZXJ0aW5nIHRvIEZBVDMyIHdpbGwgbWFrZSB0aGUgZmlsZSBzeXN0ZW0gdW5yZWFkYWJsZSBieSBNUyBET1MsIE1TICIKKyJXaW5kb3dzIDk1YSwgYW5kIE1TIFdpbmRvd3MgTlQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzICAlcyAgJXMiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1MTkKK21zZ2lkICJXb3VsZCB5b3UgbGlrZSB0byB1c2UgRkFUMzI/IgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTUwIGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzICAlcyIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjU1MQorbXNnaWQgIiIKKyJUaGUgZmlsZSBzeXN0ZW0gY2FuIG9ubHkgYmUgcmVzaXplZCB0byB0aGlzIHNpemUgYnkgY29udmVydGluZyB0byBGQVQxNi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1NjcKK21zZ2lkICIiCisiVGhlIGZpbGUgc3lzdGVtIGNhbiBvbmx5IGJlIHJlc2l6ZWQgdG8gdGhpcyBzaXplIGJ5IGNvbnZlcnRpbmcgdG8gRkFUMzIuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTgwCittc2dpZCAiIgorIkdOVSBQYXJ0ZWQgY2Fubm90IHJlc2l6ZSB0aGlzIHBhcnRpdGlvbiB0byB0aGlzIHNpemUuICBXZSdyZSB3b3JraW5nIG9uIGl0ISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo0OSBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo1NgorbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyBhbiBpbnZhbGlkIHNpZ25hdHVyZSBmb3IgYSBGQVQgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjY0Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGludmFsaWQgc2VjdG9yIHNpemUgZm9yIGEgRkFUIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo3MQorbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyBhbiBpbnZhbGlkIGNsdXN0ZXIgc2l6ZSBmb3IgYSBGQVQgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjc4Cittc2dpZCAiIgorIkZpbGUgc3lzdGVtIGhhcyBhbiBpbnZhbGlkIG51bWJlciBvZiByZXNlcnZlZCBzZWN0b3JzIGZvciBhIEZBVCBmaWxlIHN5c3RlbS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6ODUKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgYW4gaW52YWxpZCBudW1iZXIgb2YgRkFUcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6MTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGlzIGZpbGUgc3lzdGVtIGhhcyBhIGxvZ2ljYWwgc2VjdG9yIHNpemUgb2YgJWQuICBHTlUgUGFydGVkIGlzIGtub3duIG5vdCAiCisidG8gd29yayBwcm9wZXJseSB3aXRoIHNlY3RvciBzaXplcyBvdGhlciB0aGFuIDUxMiBieXRlcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6MTY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZmlsZSBzeXN0ZW0ncyBDSFMgZ2VvbWV0cnkgaXMgKCVkLCAlZCwgJWQpLCB3aGljaCBpcyBpbnZhbGlkLiAgVGhlICIKKyJwYXJ0aXRpb24gdGFibGUncyBDSFMgZ2VvbWV0cnkgaXMgKCVkLCAlZCwgJWQpLiAgSWYgeW91IHNlbGVjdCBJZ25vcmUsIHRoZSAiCisiZmlsZSBzeXN0ZW0ncyBDSFMgZ2VvbWV0cnkgd2lsbCBiZSBsZWZ0IHVuY2hhbmdlZC4gIElmIHlvdSBzZWxlY3QgRml4LCB0aGUgIgorImZpbGUgc3lzdGVtJ3MgQ0hTIGdlb21ldHJ5IHdpbGwgYmUgc2V0IHRvIG1hdGNoIHRoZSBwYXJ0aXRpb24gdGFibGUncyBDSFMgIgorImdlb21ldHJ5LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzoyMTMKK21zZ2lkICJGQVQgYm9vdCBzZWN0b3Igc2F5cyBsb2dpY2FsIHNlY3RvciBzaXplIGlzIDAuICBUaGlzIGlzIHdlaXJkLiAiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6MjE5Cittc2dpZCAiRkFUIGJvb3Qgc2VjdG9yIHNheXMgdGhlcmUgYXJlIG5vIEZBVCB0YWJsZXMuICBUaGlzIGlzIHdlaXJkLiAiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6MjI1Cittc2dpZCAiRkFUIGJvb3Qgc2VjdG9yIHNheXMgY2x1c3RlcnMgYXJlIDAgc2VjdG9ycy4gIFRoaXMgaXMgd2VpcmQuICIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzoyMzUKK21zZ2lkICJGaWxlIHN5c3RlbSBpcyBGQVQxMiwgd2hpY2ggaXMgdW5zdXBwb3J0ZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjQxMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGluZm9ybWF0aW9uIHNlY3RvciBoYXMgdGhlIHdyb25nIHNpZ25hdHVyZSAoJXgpLiAgU2VsZWN0IGNhbmNlbCBmb3Igbm93LCAiCisiYW5kIHNlbmQgaW4gYSBidWcgcmVwb3J0LiAgSWYgeW91J3JlIGRlc3BlcmF0ZSwgaXQncyBwcm9iYWJseSBzYWZlIHRvIGlnbm9yZS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb3VudC5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgZGlyZWN0b3J5IGVudHJ5IGZvciAlczogZmlyc3QgY2x1c3RlciBpcyB0aGUgZW5kIG9mIGZpbGUgbWFya2VyLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvdW50LmM6MTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJCYWQgRkFUOiB1bnRlcm1pbmF0ZWQgY2hhaW4gZm9yICVzLiAgWW91IHNob3VsZCBydW4gZG9zZnNjayBvciBzY2FuZGlzay4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb3VudC5jOjE3NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQmFkIEZBVDogY2x1c3RlciAlZCBvdXRzaWRlIGZpbGUgc3lzdGVtIGluIGNoYWluIGZvciAlcy4gIFlvdSBzaG91bGQgcnVuICIKKyJkb3Nmc2NrIG9yIHNjYW5kaXNrLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvdW50LmM6MTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJCYWQgRkFUOiBjbHVzdGVyICVkIGlzIGNyb3NzLWxpbmtlZCBmb3IgJXMuICBZb3Ugc2hvdWxkIHJ1biBkb3Nmc2NrIG9yICIKKyJzY2FuZGlzay4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb3VudC5jOjIwMworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyAlZGssIGJ1dCBpdCBoYXMgJWQgY2x1c3RlcnMgKCVkaykuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY291bnQuYzoyNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmaWxlICVzIGlzIG1hcmtlZCBhcyBhIHN5c3RlbSBmaWxlLiAgVGhpcyBtZWFucyBtb3ZpbmcgaXQgY291bGQgY2F1c2UgIgorInNvbWUgcHJvZ3JhbXMgdG8gc3RvcCB3b3JraW5nLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3RhYmxlLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGQVQgJWQgbWVkaWEgJXggZG9lc24ndCBtYXRjaCB0aGUgYm9vdCBzZWN0b3IncyBtZWRpYSAleC4gIFlvdSBzaG91bGQgIgorInByb2JhYmx5IHJ1biBzY2FuZGlzay4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC90YWJsZS5jOjI2OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYXRfdGFibGVfc2V0OiBjbHVzdGVyICVsZCBvdXRzaWRlIGZpbGUgc3lzdGVtIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvdGFibGUuYzozMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmF0X3RhYmxlX2dldDogY2x1c3RlciAlbGQgb3V0c2lkZSBmaWxlIHN5c3RlbSIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3RhYmxlLmM6MzQzCittc2dpZCAiZmF0X3RhYmxlX2FsbG9jX2NsdXN0ZXI6IG5vIGZyZWUgY2x1c3RlcnMiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2xpbnV4X3N3YXAvbGludXhfc3dhcC5jOjI3NQorIywgYy1mb3JtYXQKK21zZ2lkICJVbnJlY29nbmlzZWQgb2xkIHN0eWxlIGxpbnV4IHN3YXAgc2lnbmF0dXJlICclMTBzJy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2xpbnV4X3N3YXAvbGludXhfc3dhcC5jOjMxOAorIywgYy1mb3JtYXQKK21zZ2lkICJVbnJlY29nbmlzZWQgbmV3IHN0eWxlIGxpbnV4IHN3YXAgc2lnbmF0dXJlICclMTBzJy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2xpbnV4X3N3YXAvbGludXhfc3dhcC5jOjM1OAorIywgYy1mb3JtYXQKK21zZ2lkICJVbnJlY29nbmlzZWQgc3dzdXNwIGxpbnV4IHN3YXAgc2lnbmF0dXJlICclOXMnLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvbGludXhfc3dhcC9saW51eF9zd2FwLmM6NDM0Cittc2dpZCAiVG9vIG1hbnkgYmFkIHBhZ2VzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2FkdmZzLmM6MTIxIGxpYnBhcnRlZC9mcy9oZnMvYWR2ZnNfcGx1cy5jOjEyMgorIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjQxNCBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NTA4CisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo1MzkgbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NjU4CisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo3NzIKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gY29udGFpbnMgZXJyb3JzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2FkdmZzX3BsdXMuYzoyODcKK21zZ2lkICJCYWQgYmxvY2tzIGNvdWxkIG5vdCBiZSByZWFkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2NhY2hlLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUcnlpbmcgdG8gcmVnaXN0ZXIgYW4gZXh0ZW50IHN0YXJ0aW5nIGF0IGJsb2NrIDB4JVgsIGJ1dCBhbm90aGVyIG9uZSBhbHJlYWR5ICIKKyJleGlzdHMgYXQgdGhpcyBwb3NpdGlvbi4gIFlvdSBzaG91bGQgY2hlY2sgdGhlIGZpbGUgc3lzdGVtISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2NhY2hlLmM6MjE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUcnlpbmcgdG8gbW92ZSBhbiBleHRlbnQgZnJvbSBibG9jayBPeCVYIHRvIGJsb2NrIE94JVgsIGJ1dCBhbm90aGVyIG9uZSAiCisiYWxyZWFkeSBleGlzdHMgYXQgdGhpcyBwb3NpdGlvbi4gIFRoaXMgc2hvdWxkIG5vdCBoYXBwZW4hIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZS5jOjE0MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgdXBkYXRlIHRoZSBleHRlbnQgY2FjaGUgZm9yIEhGUyBmaWxlIHdpdGggQ05JRCAlWC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlLmM6MTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyB0byByZWFkIEhGUyBmaWxlIHdpdGggQ05JRCAlWCBiZWhpbmQgRU9GLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGUuYzoxOTAgbGlicGFydGVkL2ZzL2hmcy9maWxlLmM6MjIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIHNlY3RvciAlbGxpIG9mIEhGUyBmaWxlIHdpdGggQ05JRCAlWC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlLmM6MjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyB0byB3cml0ZSBIRlMgZmlsZSB3aXRoIENOSUQgJVggYmVoaW5kIEVPRi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlX3BsdXMuYzoxNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHVwZGF0ZSB0aGUgZXh0ZW50IGNhY2hlIGZvciBIRlMrIGZpbGUgd2l0aCBDTklEICVYLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGVfcGx1cy5jOjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgdG8gcmVhZCBIRlMrIGZpbGUgd2l0aCBDTklEICVYIGJlaGluZCBFT0YuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZV9wbHVzLmM6MjEzIGxpYnBhcnRlZC9mcy9oZnMvZmlsZV9wbHVzLmM6MjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIHNlY3RvciAlbGxpIG9mIEhGUysgZmlsZSB3aXRoIENOSUQgJVguIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZV9wbHVzLmM6MjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyB0byB3cml0ZSBIRlMrIGZpbGUgd2l0aCBDTklEICVYIGJlaGluZCBFT0YuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MjMyCittc2dpZCAiU29ycnksIEhGUyBjYW5ub3QgYmUgcmVzaXplZCB0aGF0IHdheSB5ZXQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MjYyIGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NjQxCittc2dpZCAiRGF0YSByZWxvY2F0aW9uIGhhcyBmYWlsZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MjgxCittc2dpZCAiRGF0YSByZWxvY2F0aW9uIGxlZnQgc29tZSBkYXRhIGluIHRoZSBlbmQgb2YgdGhlIHZvbHVtZS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzozMjAKK21zZ2lkICJ3cml0aW5nIEhGUyBNYXN0ZXIgRGlyZWN0b3J5IEJsb2NrIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NDY4Cittc2dpZCAiTm8gdmFsaWQgSEZTWytYXSBzaWduYXR1cmUgaGFzIGJlZW4gZm91bmQgd2hpbGUgb3BlbmluZy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo0NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmVyc2lvbiAlZCBvZiBIRlMrIGlzbid0IHN1cHBvcnRlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo0ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmVyc2lvbiAlZCBvZiBIRlNYIGlzbid0IHN1cHBvcnRlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo2NzIKK21zZ2lkICJEYXRhIHJlbG9jYXRpb24gbGVmdCBzb21lIGRhdGEgYXQgdGhlIGVuZCBvZiB0aGUgdm9sdW1lLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjcyMAorbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdGhlIGFsbG9jYXRpb24gZmlsZS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo3MzUKK21zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRoZSBjb21wYXRpYmlsaXR5IHBhcnQgb2YgdGhlIGFsbG9jYXRpb24gZmlsZS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo3NTAKK21zZ2lkICJ3cml0aW5nIEhGUysgVm9sdW1lIEhlYWRlciIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjg1MAorbXNnaWQgIkFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGxvb2tpbmcgZm9yIHRoZSBtYW5kYXRvcnkgYmFkIGJsb2NrcyBmaWxlLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjkwNAorbXNnaWQgIiIKKyJJdCBzZWVtcyB0aGVyZSBpcyBhbiBlcnJvciBpbiB0aGUgSEZTIHdyYXBwZXI6IHRoZSBiYWQgYmxvY2tzIGZpbGUgZG9lc24ndCAiCisiY29udGFpbiB0aGUgZW1iZWRkZWQgSEZTKyB2b2x1bWUuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6OTQwCittc2dpZCAiU29ycnksIEhGUysgY2Fubm90IGJlIHJlc2l6ZWQgdGhhdCB3YXkgeWV0LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjk3NQorbXNnaWQgInNocmlua2luZyBlbWJlZGRlZCBIRlMrIHZvbHVtZSIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjk5MQorbXNnaWQgIlJlc2l6aW5nIHRoZSBIRlMrIHZvbHVtZSBoYXMgZmFpbGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjk5OAorbXNnaWQgInNocmlua2luZyBIRlMgd3JhcHBlciIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjEwMDcKK21zZ2lkICJVcGRhdGluZyB0aGUgSEZTIHdyYXBwZXIgaGFzIGZhaWxlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzoxMTA5IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MTE5NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhpcyBpcyBub3QgYSByZWFsICVzIGNoZWNrLiAgVGhpcyBpcyBnb2luZyB0byBleHRyYWN0IHNwZWNpYWwgbG93IGxldmVsICIKKyJmaWxlcyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzoxNTUKK21zZ2lkICJCYWQgYmxvY2sgbGlzdCBoZWFkZXIgY2hlY2tzdW0uIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjE2OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSW52YWxpZCBzaXplIG9mIGEgdHJhbnNhY3Rpb24gYmxvY2sgd2hpbGUgcmVwbGF5aW5nIHRoZSBqb3VybmFsICglaSBieXRlcykuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjI2MAorbXNnaWQgIiIKKyJKb3VybmFsIHN0b3JlZCBvdXRzaWRlIG9mIHRoZSB2b2x1bWUgYXJlIG5vdCBzdXBwb3J0ZWQuICBUcnkgdG8gZGVzYWN0aXZhdGUgIgorInRoZSBqb3VybmFsIGFuZCBydW4gUGFydGVkIGFnYWluLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzoyNzEKK21zZ2lkICJKb3VybmFsIG9mZnNldCBvciBzaXplIGlzIG5vdCBtdWx0aXBsZSBvZiB0aGUgc2VjdG9yIHNpemUuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjI5MgorbXNnaWQgIkluY29ycmVjdCBtYWdpYyB2YWx1ZXMgaW4gdGhlIGpvdXJuYWwgaGVhZGVyLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozMDIKK21zZ2lkICJKb3VybmFsIHNpemUgbWlzbWF0Y2ggYmV0d2VlbiBqb3VybmFsIGluZm8gYmxvY2sgYW5kIGpvdXJuYWwgaGVhZGVyLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozMTQKK21zZ2lkICJTb21lIGhlYWRlciBmaWVsZHMgYXJlIG5vdCBtdWx0aXBsZSBvZiB0aGUgc2VjdG9yIHNpemUuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjMyMworbXNnaWQgIiIKKyJUaGUgc2VjdG9yIHNpemUgc3RvcmVkIGluIHRoZSBqb3VybmFsIGlzIG5vdCA1MTIgYnl0ZXMuICBQYXJ0ZWQgb25seSAiCisic3VwcG9ydHMgNTEyIGJ5dGVzIGxlbmd0aCBzZWN0b3JzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozMzUKK21zZ2lkICJCYWQgam91cm5hbCBjaGVja3N1bS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MzUzCittc2dpZCAiIgorIlRoZSBqb3VybmFsIGlzIG5vdCBlbXB0eS4gIFBhcnRlZCBtdXN0IHJlcGxheSB0aGUgdHJhbnNhY3Rpb25zIGJlZm9yZSAiCisib3BlbmluZyB0aGUgZmlsZSBzeXN0ZW0uICBUaGlzIHdpbGwgbW9kaWZ5IHRoZSBmaWxlIHN5c3RlbS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MzgxCittc2dpZCAiIgorIlRoZSB2b2x1bWUgaGVhZGVyIG9yIHRoZSBtYXN0ZXIgZGlyZWN0b3J5IGJsb2NrIGhhcyBjaGFuZ2VkIHdoaWxlIHJlcGxheWluZyAiCisidGhlIGpvdXJuYWwuICBZb3Ugc2hvdWxkIHJlc3RhcnQgUGFydGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3Byb2JlLmM6NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBhcnRlZCBjYW4ndCB1c2UgSEZTIGZpbGUgc3lzdGVtcyBvbiBkaXNrcyB3aXRoIGEgc2VjdG9yIHNpemUgbm90IGVxdWFsIHRvICUiCisiZCBieXRlcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjE1MSBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzoxNTUKK21zZ2lkICJBbiBleHRlbnQgaGFzIG5vdCBiZWVuIHJlbG9jYXRlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjI1MSBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzozMDcKK21zZ2lkICIiCisiQSByZWZlcmVuY2UgdG8gYW4gZXh0ZW50IGNvbWVzIGZyb20gYSBwbGFjZSBpdCBzaG91bGQgbm90LiAgWW91IHNob3VsZCBjaGVjayAiCisidGhlIGZpbGUgc3lzdGVtISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6MzgxCittc2dpZCAiVGhpcyBIRlMgdm9sdW1lIGhhcyBubyBjYXRhbG9nIGZpbGUuICBUaGlzIGlzIHZlcnkgdW51c3VhbCEiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjQ3NQorbXNnaWQgIlRoaXMgSEZTIHZvbHVtZSBoYXMgbm8gZXh0ZW50cyBvdmVyZmxvdyBmaWxlLiAgVGhpcyBpcyBxdWl0ZSB1bnVzdWFsISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NTE3IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjY2OAorbXNnaWQgIiIKKyJUaGUgZXh0ZW50cyBvdmVyZmxvdyBmaWxlIHNob3VsZCBub3QgY29udGFpbiBpdHMgb3duIGV4dGVudHMhICBZb3Ugc2hvdWxkICIKKyJjaGVjayB0aGUgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzo1NzQgbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6ODQ3Cittc2dpZCAiQ291bGQgbm90IGNhY2hlIHRoZSBmaWxlIHN5c3RlbSBpbiBtZW1vcnkuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzo2MzUgbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6OTA4Cittc2dpZCAiQmFkIGJsb2NrcyBsaXN0IGNvdWxkIG5vdCBiZSBsb2FkZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzo2NDkgbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6OTI0Cittc2dpZCAiQW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIGV4dGVudCByZWxvY2F0aW9uLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo0OTUKK21zZ2lkICJUaGlzIEhGUysgdm9sdW1lIGhhcyBubyBjYXRhbG9nIGZpbGUuICBUaGlzIGlzIHZlcnkgdW51c3VhbCEiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NjE5Cittc2dpZCAiVGhpcyBIRlMrIHZvbHVtZSBoYXMgbm8gZXh0ZW50cyBvdmVyZmxvdyBmaWxlLiAgVGhpcyBpcyBxdWl0ZSB1bnVzdWFsISIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6OTQKK21zZ2lkICJkaXNwbGF5cyB0aGlzIGhlbHAgbWVzc2FnZSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6OTUKK21zZ2lkICJsaXN0cyBwYXJ0aXRpb24gbGF5b3V0IG9uIGFsbCBibG9jayBkZXZpY2VzIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo5NgorbXNnaWQgImRpc3BsYXlzIG1hY2hpbmUgcGFyc2VhYmxlIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6OTcKK21zZ2lkICJuZXZlciBwcm9tcHRzIGZvciB1c2VyIGludGVydmVudGlvbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6OTgKK21zZ2lkICJkaXNwbGF5cyB0aGUgdmVyc2lvbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTExCittc2dpZCAiIgorIk5VTUJFUiBpcyB0aGUgcGFydGl0aW9uIG51bWJlciB1c2VkIGJ5IExpbnV4LiAgT24gTVMtRE9TIGRpc2sgbGFiZWxzLCB0aGUgIgorInByaW1hcnkgcGFydGl0aW9ucyBudW1iZXIgZnJvbSAxIHRvIDQsIGxvZ2ljYWwgcGFydGl0aW9ucyBmcm9tIDUgb253YXJkcy5cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTE0Cittc2dpZCAiTEFCRUwtVFlQRSBpcyBvbmUgb2Y6ICIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTE1Cittc2dpZCAiRkxBRyBpcyBvbmUgb2Y6ICIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTE2Cittc2dpZCAiVU5JVCBpcyBvbmUgb2Y6ICIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTE3Cittc2dpZCAiUEFSVC1UWVBFIGlzIG9uZSBvZjogcHJpbWFyeSwgbG9naWNhbCwgZXh0ZW5kZWRcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTE5Cittc2dpZCAiRlMtVFlQRSBpcyBvbmUgb2Y6ICIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIwCittc2dpZCAiIgorIlNUQVJUIGFuZCBFTkQgYXJlIGRpc2sgbG9jYXRpb25zLCBzdWNoIGFzIDRHQiBvciAxMCUuICBOZWdhdGl2ZSB2YWx1ZXMgY291bnQgIgorImZyb20gdGhlIGVuZCBvZiB0aGUgZGlzay4gIEZvciBleGFtcGxlLCAtMXMgc3BlY2lmaWVzIGV4YWN0bHkgdGhlIGxhc3QgIgorInNlY3Rvci5cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIzCittc2dpZCAiU1RBVEUgaXMgb25lIG9mOiBvbiwgb2ZmXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyNAorbXNnaWQgIkRFVklDRSBpcyB1c3VhbGx5IC9kZXYvaGRhIG9yIC9kZXYvc2RhXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyNQorbXNnaWQgIk5BTUUgaXMgYW55IHdvcmQgeW91IHdhbnRcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTI2Cittc2dpZCAiVGhlIHBhcnRpdGlvbiBtdXN0IGhhdmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgRlMtVFlQRXM6ICIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTMwCisjLCBmdXp6eQorbXNnaWQgIiIKKyJDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLlxuIgorIlRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlLCBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS5cbiIKKyJcbiIKKyJUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiIKKyJidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuIgorIk1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbiIKKyJHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuIgorIlxuIgorbXNnc3RyICIiCisiQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy5cbiIKKyJBY2VzdCBwcm9ncmFtIGUgc29mdHdhcmUgbGliZXIsIGRpc3RyaWJ1aXQgc3ViIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLlxuIgorIlxuIgorIkFjZXN0IHByb2dyYW0gZXN0ZSBkaXN0cmlidWkg7m4gc3BlcmFu/mEgY+MgdmEgZmkgZm9sb3NpdG9yLCBkYXIgRsNSwyBOSUNJXG4iCisiTyBHQVJBTt5JRTsgY2hpYXIgumkgZuNy4yBnYXJhbv5pYSBpbXBsaWNpdOMgZGUgVkFOREFCSUxJVEFURSBzYXUgUE9UUklWSVJFXG4iCisiUEVOVFJVIFVOIFNDT1AgQU5VTUUuICBWZWRl/mkgTGljZW7+YSBQdWJsaWPjIEdlbmVyYWzjIEdOVSAoR05VIEdQTCkgcGVudHJ1XG4iCisiZGV0YWxpaSBzdXBsaW1lbnRhcmUuXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTAuZiUlXHQodGltZSBsZWZ0ICUuMmQ6JS4yZCkiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjE5NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGFydGl0aW9uICVzIGlzIGJlaW5nIHVzZWQuIFlvdSBtdXN0IHVubW91bnQgaXQgYmVmb3JlIHlvdSBtb2RpZnkgaXQgd2l0aCAiCisiUGFydGVkLiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjExCisjLCBjLWZvcm1hdAorbXNnaWQgIlBhcnRpdGlvbihzKSBvbiAlcyBhcmUgYmVpbmcgdXNlZC4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMworbXNnaWQgIiIKKyJUaGUgZXhpc3RpbmcgZmlsZSBzeXN0ZW0gd2lsbCBiZSBkZXN0cm95ZWQgYW5kIGFsbCBkYXRhIG9uIHRoZSBwYXJ0aXRpb24gIgorIndpbGwgYmUgbG9zdC4gRG8geW91IHdhbnQgdG8gY29udGludWU/IgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBleGlzdGluZyBkaXNrIGxhYmVsIG9uICVzIHdpbGwgYmUgZGVzdHJveWVkIGFuZCBhbGwgZGF0YSBvbiB0aGlzIGRpc2sgIgorIndpbGwgYmUgbG9zdC4gRG8geW91IHdhbnQgdG8gY29udGludWU/IgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo0NTggcGFydGVkL3BhcnRlZC5jOjY1MiBwYXJ0ZWQvcGFydGVkLmM6MTA0NAorIzogcGFydGVkL3BhcnRlZC5jOjExMjggcGFydGVkL3BhcnRlZC5jOjE3NzEgcGFydGVkL3BhcnRlZC5jOjE4NTIKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxOTAwCittc2dpZCAiUGFydGl0aW9uIG51bWJlcj8iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjUwMAorbXNnaWQgIlNvdXJjZSBkZXZpY2U/IgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo1MDQKK21zZ2lkICJTb3VyY2UgcGFydGl0aW9uIG51bWJlcj8iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjUwOQorbXNnaWQgIkNhbid0IGNvcHkgYW4gZXh0ZW5kZWQgcGFydGl0aW9uLiIKK21zZ3N0ciAiTnUgcHV0Zf5pIGNvcGlhIG8gcGFydGn+aWUgZXh0aW5z4y4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo1MTUKK21zZ2lkICJEZXN0aW5hdGlvbiBwYXJ0aXRpb24gbnVtYmVyPyIKK21zZ3N0ciAiTnVt43J1bCBwYXJ0af5pZWkgZGVzdGluYf5pZT8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo2MTUKK21zZ2lkICJOZXcgZGlzayBsYWJlbCB0eXBlPyIKK21zZ3N0ciAiVGlwIGRlIGV0aWNoZXTjIHBlbnRydSBkaXNjdWwgbm91PyIKKworIzogcGFydGVkL3BhcnRlZC5jOjY1NgorbXNnaWQgIkZpbGUgc3lzdGVtPyIKK21zZ3N0ciAiU2lzdGVtIGRlIGZpumllcmU/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NzA3IHBhcnRlZC9wYXJ0ZWQuYzo4NzgKK21zZ2lkICJQYXJ0aXRpb24gdHlwZT8iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjcxNCBwYXJ0ZWQvcGFydGVkLmM6ODg1IHBhcnRlZC9wYXJ0ZWQuYzoxMTMxCittc2dpZCAiUGFydGl0aW9uIG5hbWU/IgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo3MjIgcGFydGVkL3BhcnRlZC5jOjg5NQorbXNnaWQgIkZpbGUgc3lzdGVtIHR5cGU/IgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo3MjkgcGFydGVkL3BhcnRlZC5jOjg5NyBwYXJ0ZWQvcGFydGVkLmM6MTA1OQorIzogcGFydGVkL3BhcnRlZC5jOjE3MjUgcGFydGVkL3BhcnRlZC5jOjE3ODAKK21zZ2lkICJTdGFydD8iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjczMSBwYXJ0ZWQvcGFydGVkLmM6OTAwIHBhcnRlZC9wYXJ0ZWQuYzoxMDYyCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTcyNyBwYXJ0ZWQvcGFydGVkLmM6MTc4MgorbXNnaWQgIkVuZD8iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjc2OSBwYXJ0ZWQvcGFydGVkLmM6OTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgcmVxdWVzdGVkIGEgcGFydGl0aW9uIGZyb20gJXMgdG8gJXMuXG4iCisiVGhlIGNsb3Nlc3QgbG9jYXRpb24gd2UgY2FuIG1hbmFnZSBpcyAlcyB0byAlcy4gIElzIHRoaXMgc3RpbGwgYWNjZXB0YWJsZSB0byAiCisieW91PyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6ODkwCittc2dpZCAiQW4gZXh0ZW5kZWQgcGFydGl0aW9uIGNhbm5vdCBob2xkIGEgZmlsZSBzeXN0ZW0uICBEaWQgeW91IHdhbnQgbWtwYXJ0PyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTA1MAorbXNnaWQgIkNhbid0IG1vdmUgYW4gZXh0ZW5kZWQgcGFydGl0aW9uLiIKK21zZ3N0ciAiTnUgcHV0Zf5pIG11dGEgbyBwYXJ0af5pZSBleHRpbnPjLiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEwNzkKK21zZ2lkICJDYW4ndCBtb3ZlIGEgcGFydGl0aW9uIG9udG8gaXRzZWxmLiAgVHJ5IHVzaW5nIHJlc2l6ZSwgcGVyaGFwcz8iCittc2dzdHIgIiIKKyJOdSBwdXRl/mkgbXV0YSBvIHBhcnRp/mllIHBlc3RlIGVhIO5uc+O6aS4gIO5uY2VyY2H+aSBwb2F0ZSBz4yBmb2xvc2n+aSAiCisicmVkaW1lbnNpb25hcmU/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIyNworIywgYy1mb3JtYXQKK21zZ2lkICJNaW5vcjogJWRcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIyOAorIywgYy1mb3JtYXQKK21zZ2lkICJGbGFnczogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIyOQorIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlIFN5c3RlbTogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIzMAorbXNnaWQgIlNpemU6ICAgICAgICAgIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjM1Cittc2dpZCAiTWluaW11bSBzaXplOiAiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMzgKK21zZ2lkICJNYXhpbXVtIHNpemU6ICIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJNb2RlbDogJXMgKCVzKVxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMzY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkRpc2sgJXM6ICVzXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEzNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VjdG9yIHNpemUgKGxvZ2ljYWwvcGh5c2ljYWwpOiAlbGxkQi8lbGxkQlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMzgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkJJT1MgY3lsaW5kZXIsaGVhZCxzZWN0b3IgZ2VvbWV0cnk6ICVkLCVkLCVkLiAgRWFjaCBjeWxpbmRlciBpcyAlcy5cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTM5MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiUGFydGl0aW9uIFRhYmxlOiAlc1xuIgorbXNnc3RyICJUYWJlbGEgZGUgcGFydGn+aWkgaW52YWxpZOMgcGUgJXMuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQwNiBwYXJ0ZWQvcGFydGVkLmM6MTQwOQorbXNnaWQgIk51bWJlciIKK21zZ3N0ciAiTnVt43IiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDA2IHBhcnRlZC9wYXJ0ZWQuYzoxNDA5Cittc2dpZCAiU3RhcnQiCittc2dzdHIgIlN0YXJ0IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQwNyBwYXJ0ZWQvcGFydGVkLmM6MTQxMAorbXNnaWQgIkVuZCIKK21zZ3N0ciAiU2bicrppdCIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MTAKK21zZ2lkICJTaXplIgorbXNnc3RyICJEaW1lbnNpdW5lIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQxNAorbXNnaWQgIlR5cGUiCittc2dzdHIgIlRpcCIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MTYKK21zZ2lkICJGaWxlIHN5c3RlbSIKK21zZ3N0ciAiU2lzdGVtIGRlIGZpumllcmUiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDE5Cittc2dpZCAiTmFtZSIKK21zZ3N0ciAiTnVtZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MjEKK21zZ2lkICJGbGFncyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQ3NworbXNnaWQgIkZyZWUgU3BhY2UiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjE2MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkEgJXMgJXMgcGFydGl0aW9uIHdhcyBmb3VuZCBhdCAlcyAtPiAlcy4gIERvIHlvdSB3YW50IHRvIGFkZCBpdCB0byB0aGUgIgorInBhcnRpdGlvbiB0YWJsZT8iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjE2NjMKK21zZ2lkICJzZWFyY2hpbmcgZm9yIGZpbGUgc3lzdGVtcyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTg3NworbXNnaWQgIk5ldyBkZXZpY2U/IgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxOTAyCittc2dpZCAiRmxhZyB0byBJbnZlcnQ/IgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxOTA3Cittc2dpZCAiTmV3IHN0YXRlPyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTk0NAorbXNnaWQgIlVuaXQ/IgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMDkzCittc2dpZCAiY2hlY2siCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIwOTYKK21zZ2lkICIiCisiY2hlY2sgTlVNQkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyBhIHNpbXBsZSBjaGVjayBvbiB0aGUgZmlsZSBzeXN0ZW0iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMDIKK21zZ2lkICJjcCIKK21zZ3N0ciAiY3AiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTA1Cittc2dpZCAiIgorImNwIFtGUk9NLURFVklDRV0gRlJPTS1OVU1CRVIgVE8tTlVNQkVSICAgY29weSBmaWxlIHN5c3RlbSB0byBhbm90aGVyICIKKyJwYXJ0aXRpb24iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMTEKK21zZ2lkICJoZWxwIgorbXNnc3RyICJoZWxwIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjExNAorIywgZnV6enkKK21zZ2lkICIiCisiaGVscCBbQ09NTUFORF0gICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCBnZW5lcmFsIGhlbHAsIG9yIGhlbHAgb24gIgorIkNPTU1BTkQiCittc2dzdHIgIiIKKyJoZWxwIFtDT01BTkRBXSAgICAgICAgICAgICAgICBhZmm6ZWF64yBpbmZvcm1h/mlpIGdlbmVyYWxlLCBzYXVcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHJlIENPTUFOREEiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTIwCittc2dpZCAibWtsYWJlbCIKK21zZ3N0ciAibWtsYWJlbCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMjAKKyMsIGZ1enp5Cittc2dpZCAibWt0YWJsZSIKK21zZ3N0ciAibWtsYWJlbCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMjMKKyMsIGZ1enp5Cittc2dpZCAiIgorIm1rbGFiZWwsbWt0YWJsZSBMQUJFTC1UWVBFICAgICAgICAgICAgICAgY3JlYXRlIGEgbmV3IGRpc2tsYWJlbCAocGFydGl0aW9uICIKKyJ0YWJsZSkiCittc2dzdHIgIiIKKyJta2xhYmVsIFRJUF9FVElDSEVUQSAgICAgICAgICBjcmVheuMgbyBub3XjIGV0aWNoZXTjIGRlIGRpc2NcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGFiZWxhIGRlIHBhcnRp/mlpKSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMjkKK21zZ2lkICJta2ZzIgorbXNnc3RyICJta2ZzIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEzMgorIywgZnV6enkKK21zZ2lkICIiCisibWtmcyBOVU1CRVIgRlMtVFlQRSAgICAgICAgICAgICAgICAgICAgICBtYWtlIGEgRlMtVFlQRSBmaWxlIHN5c3RlbSBvbiAiCisicGFydGl0aXRvbiBOVU1CRVIiCittc2dzdHIgIiIKKyJta2ZzIE5VTcNSIFRJUC1TRiAgICAgICAgY3JlYXrjIHVuIHNpc3RlbSBkZSBmabppZXJlIFRJUC1TRiBwZSBwYXJ0af5pYSBOVU3DUiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMzgKK21zZ2lkICJta3BhcnQiCittc2dzdHIgIm1rcGFydCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNDEKK21zZ2lkICJta3BhcnQgUEFSVC1UWVBFIFtGUy1UWVBFXSBTVEFSVCBFTkQgICAgIG1ha2UgYSBwYXJ0aXRpb24iCittc2dzdHIgIm1rcGFydCBUSVAtUEFSVCBbVElQLVNGXSBTVEFSVCBTRsJSqklUICAgIGNyZWF64yBvIHBhcnRp/mllIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE0NworIywgZnV6enkKK21zZ2lkICIiCisiJ21rcGFydCcgbWFrZXMgYSBwYXJ0aXRpb24gd2l0aG91dCBjcmVhdGluZyBhIG5ldyBmaWxlIHN5c3RlbSBvbiB0aGUgIgorInBhcnRpdGlvbi4gIEZTLVRZUEUgbWF5IGJlIHNwZWNpZmllZCB0byBzZXQgYW4gYXBwcm9wcmlhdGUgcGFydGl0aW9uIElELlxuIgorbXNnc3RyICIiCisibWtwYXJ0IGNyZWF64yBvIHBhcnRp/mllIGbjcuMgYSBjcmVhIHVuIG5vdSBzaXN0ZW0gZGUgZmm6aWVyZSBwZSBhY2VhICIKKyJwYXJ0af5pZS4gVElQLVNGIHBvYXRlIGZpIHNwZWNpZmljYXQgcGVudHJ1IGEgc2V0YSB1biBhbnVtaXQgSUQgZGUgIgorInBhcnRp/mllLlxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE1MgorbXNnaWQgIm1rcGFydGZzIgorbXNnc3RyICJta3BhcnRmcyIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNTUKK21zZ2lkICIiCisibWtwYXJ0ZnMgUEFSVC1UWVBFIEZTLVRZUEUgU1RBUlQgRU5EICAgICBtYWtlIGEgcGFydGl0aW9uIHdpdGggYSBmaWxlIHN5c3RlbSIKK21zZ3N0ciAiIgorIm1rcGFydGZzIFRJUC1QQVJUIFRJUC1TRiBTVEFSVCBTRsJSqklUICAgICBjcmVheuMgbyBwYXJ0af5pZSBjdSB1biBzaXN0ZW0gZGUgIgorImZpumllcmUiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTYxCittc2dpZCAibW92ZSIKK21zZ3N0ciAibW92ZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNjQKKyMsIGZ1enp5Cittc2dpZCAibW92ZSBOVU1CRVIgU1RBUlQgRU5EICAgICAgICAgICAgICAgICAgICBtb3ZlIHBhcnRpdGlvbiBOVU1CRVIiCittc2dzdHIgIm1vdmUgTlVNw1IgU1RBUlQgU0bCUqpJVCAgICAgIG11dOMgcGFydGn+aWEgTlVNw1IiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTY5Cittc2dpZCAibmFtZSIKK21zZ3N0ciAibmFtZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNzIKKyMsIGZ1enp5Cittc2dpZCAibmFtZSBOVU1CRVIgTkFNRSAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lIHBhcnRpdGlvbiBOVU1CRVIgYXMgTkFNRSIKK21zZ3N0ciAibmFtZSBOVU3DUiBOVU1FICAgICAgICAgICAgICAgbnVtZbp0ZSBwYXRp/mlhIE5VTcNSIGNhIE5VTUUiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTc3Cittc2dpZCAicHJpbnQiCittc2dzdHIgInByaW50IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE4MAorbXNnaWQgIiIKKyJwcmludCBbZGV2aWNlc3xmcmVlfGxpc3QsYWxsfE5VTUJFUl0gICAgIGRpc3BsYXkgdGhlIHBhcnRpdGlvbiB0YWJsZSwgIgorImF2YWlsYWJsZSBkZXZpY2VzLCBmcmVlIHNwYWNlLCBhbGwgZm91bmQgcGFydGl0aW9ucywgb3IgYSBwYXJ0aWN1bGFyICIKKyJwYXJ0aXRpb24iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxODUKK21zZ2lkICIiCisiV2l0aG91dCBhcmd1bWVudHMsICdwcmludCcgZGlzcGxheXMgdGhlIGVudGlyZSBwYXJ0aXRpb24gdGFibGUuIEhvd2V2ZXIgd2l0aCAiCisidGhlIGZvbGxvd2luZyBhcmd1bWVudHMgaXQgcGVyZm9ybXMgdmFyaW91cyBvdGhlciBhY3Rpb25zLlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTg3Cittc2dpZCAiICBkZXZpY2VzICAgOiBkaXNwbGF5IGFsbCBhY3RpdmUgYmxvY2sgZGV2aWNlc1xuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTg4Cittc2dpZCAiIgorIiAgZnJlZSAgICAgIDogZGlzcGxheSBpbmZvcm1hdGlvbiBhYm91dCBmcmVlIHVucGFydGl0aW9uZWQgc3BhY2Ugb24gdGhlICIKKyJjdXJyZW50IGJsb2NrIGRldmljZVxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTkwCisjLCBmdXp6eQorbXNnaWQgIiIKKyIgIGxpc3QsIGFsbCA6IGRpc3BsYXkgdGhlIHBhcnRpdGlvbiB0YWJsZXMgb2YgYWxsIGFjdGl2ZSBibG9jayBkZXZpY2VzXG4iCittc2dzdHIgIiIKKyJwcmludCBbTlVNw1JdICAgICAgICAgICAgICAgICBhZmm6ZWF64yB0YWJlbGEgZGUgcGFydGn+aWksIHNhdSBvIHBhcnRp/mllIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE5MQorbXNnaWQgIiIKKyIgIE5VTUJFUiAgICA6IGRpc3BsYXkgbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIHBhcnRpY3VsYXIgIgorInBhcnRpdGlvblxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTk2Cittc2dpZCAicXVpdCIKK21zZ3N0ciAicXVpdCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxOTkKKyMsIGZ1enp5Cittc2dpZCAicXVpdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGl0IHByb2dyYW0iCittc2dzdHIgInF1aXQgICAgICAgICAgICAgICAgICAgICAgICAgIGllumlyZSBkaW4gcHJvZ3JhbSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMDQKK21zZ2lkICJyZXNjdWUiCittc2dzdHIgInJlc2N1ZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMDcKKyMsIGZ1enp5Cittc2dpZCAiIgorInJlc2N1ZSBTVEFSVCBFTkQgICAgICAgICAgICAgICAgICAgICAgICAgcmVzY3VlIGEgbG9zdCBwYXJ0aXRpb24gbmVhciBTVEFSVCAiCisiYW5kIEVORCIKK21zZ3N0ciAiIgorInJlc2N1ZSBTVEFSVCBTRkFSU0lUICAgICAgICAgICBzYWx2ZWF64yBvIHBhcnRp/mllIHBpZXJkdXTjIGxpbmfjIFNUQVJUILppXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0ZBUlNJVCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMTMKK21zZ2lkICJyZXNpemUiCittc2dzdHIgInJlc2l6ZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMTYKKyMsIGZ1enp5Cittc2dpZCAiIgorInJlc2l6ZSBOVU1CRVIgU1RBUlQgRU5EICAgICAgICAgICAgICAgICAgcmVzaXplIHBhcnRpdGlvbiBOVU1CRVIgYW5kIGl0cyAiCisiZmlsZSBzeXN0ZW0iCittc2dzdHIgIiIKKyJyZXNpemUgTlVNw1IgU1RBUlQgU0bCUqpJVCAgICByZWRpbWVuc2lvbmVheuMgcGFydGn+aWEgTlVNw1Igumkgc2lzdGVtdWwgc+N1ICIKKyJkZSBmabppZXJlIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIyNAorbXNnaWQgInJtIgorbXNnc3RyICJybSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMjcKKyMsIGZ1enp5Cittc2dpZCAicm0gTlVNQkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcGFydGl0aW9uIE5VTUJFUiIKK21zZ3N0ciAicm0gTlVNw1IgICAgICAgICAgICAgICAgICAgICAgunRlcmdlIHBhcnRp/mlhIE5VTcNSIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIzMgorbXNnaWQgInNlbGVjdCIKK21zZ3N0ciAic2VsZWN0IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIzNQorIywgZnV6enkKK21zZ2lkICJzZWxlY3QgREVWSUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNob29zZSB0aGUgZGV2aWNlIHRvIGVkaXQiCittc2dzdHIgInNlbGVjdCBVTklUQVRFICAgICAgICAgICAgICAgICBhbGVnZSB1bml0YXRlYSBkZSBlZGl0YXQiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjQwCittc2dpZCAic2V0IgorbXNnc3RyICJzZXQiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjQzCisjLCBmdXp6eQorbXNnaWQgIiIKKyJzZXQgTlVNQkVSIEZMQUcgU1RBVEUgICAgICAgICAgICAgICAgICAgIGNoYW5nZSB0aGUgRkxBRyBvbiBwYXJ0aXRpb24gTlVNQkVSIgorbXNnc3RyICJzZXQgTlVNw1IgRkxBRyBTVEFSRSAgICAgICAgICBzY2hpbWLjIHVuIGZsYWcgcGUgcGFydGn+aWEgTlVNw1IiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjQ5Cittc2dpZCAidG9nZ2xlIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjUyCisjLCBmdXp6eQorbXNnaWQgIiIKKyJ0b2dnbGUgW05VTUJFUiBbRkxBR11dICAgICAgICAgICAgICAgICAgIHRvZ2dsZSB0aGUgc3RhdGUgb2YgRkxBRyBvbiAiCisicGFydGl0aW9uIE5VTUJFUiIKK21zZ3N0ciAicm0gTlVNw1IgICAgICAgICAgICAgICAgICAgICAgunRlcmdlIHBhcnRp/mlhIE5VTcNSIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI1OAorbXNnaWQgInVuaXQiCittc2dzdHIgInVuaXRhdGUiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjYxCisjLCBmdXp6eQorbXNnaWQgInVuaXQgVU5JVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0IHRoZSBkZWZhdWx0IHVuaXQgdG8gVU5JVCIKK21zZ3N0ciAicXVpdCBVTklUQVRFICAgICAgICAgICAgICAgICAgc2V0ZWF64yB1bml0YXRlYSBpbXBsaWNpdOMgY2EgVU5JVEFURSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNjYKK21zZ2lkICJ2ZXJzaW9uIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjY5Cittc2dpZCAiIgorInZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheSB0aGUgdmVyc2lvbiBudW1iZXIgYW5kICIKKyJjb3B5cmlnaHQgaW5mb3JtYXRpb24gb2YgR05VIFBhcnRlZCIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI3MworbXNnaWQgIiIKKyIndmVyc2lvbicgZGlzcGxheXMgY29weXJpZ2h0IGFuZCB2ZXJzaW9uIGluZm9ybWF0aW9uIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyAiCisiY29weSBvZiBHTlUgUGFydGVkXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIzMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstaGxtc3ZdIFtERVZJQ0UgW0NPTU1BTkQgW1BBUkFNRVRFUlNdXS4uLl1cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjM3OQorbXNnaWQgIk5vIGRldmljZSBmb3VuZCIKK21zZ3N0ciAiTnUgYSBmb3N0IGfjc2l04yBuaWNpIG8gdW5pdGF0ZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjI0MTIKK21zZ2lkICJXQVJOSU5HOiBZb3UgYXJlIG5vdCBzdXBlcnVzZXIuICBXYXRjaCBvdXQgZm9yIHBlcm1pc3Npb25zLiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjQ1MAorIywgZnV6enkKK21zZ2lkICJZb3UgbWF5IG5lZWQgdG8gdXBkYXRlIC9ldGMvZnN0YWIuXG4iCittc2dzdHIgIk51IHVpdGH+aSBz4yBhY3R1YWxpemH+aSAvZXRjL2ZzdGFiLCBkYWPjIGUgbmVjZXNhci5cbiIKKworIzogcGFydGVkL3VpLmM6MTYwCittc2dpZCAiV2VsY29tZSB0byBHTlUgUGFydGVkISBUeXBlICdoZWxwJyB0byB2aWV3IGEgbGlzdCBvZiBjb21tYW5kcy5cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzoxNjMKKyMsIGZ1enp5Cittc2dpZCAiIgorIlVzYWdlOiBwYXJ0ZWQgW09QVElPTl0uLi4gW0RFVklDRSBbQ09NTUFORCBbUEFSQU1FVEVSU10uLi5dLi4uXVxuIgorIkFwcGx5IENPTU1BTkRzIHdpdGggUEFSQU1FVEVSUyB0byBERVZJQ0UuICBJZiBubyBDT01NQU5EKHMpIGFyZSBnaXZlbiwgcnVuICIKKyJpblxuIgorImludGVyYWN0aXZlIG1vZGUuXG4iCittc2dzdHIgIiIKKyJGb2xvc2lyZTogcGFydGVkIFtPUN5JVU5FXS4uLiB7VU5JVEFURSBbQ09NQU5EwyBbUEFSQU1FVFJJSV0uLi5dLi4uXVxuIgorIkFwbGlj4yBDT01BTkRBIGN1IFBBUkFNRVRJSSBsYSBVTklUQVRFLiAgRGFj4yBudSBlc3RlIGRhdOMgbmljaSBvIENPTUFORMMsXG4iCisicnVsZWF64yDubiBtb2QgaW50ZXJhY3Rpdi5cbiIKKworIzogcGFydGVkL3VpLmM6MTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJcbiIKKyJZb3UgZm91bmQgYSBidWcgaW4gR05VIFBhcnRlZCEgSGVyZSdzIHdoYXQgeW91IGhhdmUgdG8gZG86XG4iCisiXG4iCisiRG9uJ3QgcGFuaWMhIFRoZSBidWcgaGFzIG1vc3QgbGlrZWx5IG5vdCBhZmZlY3RlZCBhbnkgb2YgeW91ciBkYXRhLlxuIgorIkhlbHAgdXMgdG8gZml4IHRoaXMgYnVnIGJ5IGRvaW5nIHRoZSBmb2xsb3dpbmc6XG4iCisiXG4iCisiQ2hlY2sgd2hldGhlciB0aGUgYnVnIGhhcyBhbHJlYWR5IGJlZW4gZml4ZWQgYnkgY2hlY2tpbmdcbiIKKyJ0aGUgbGFzdCB2ZXJzaW9uIG9mIEdOVSBQYXJ0ZWQgdGhhdCB5b3UgY2FuIGZpbmQgYXQ6XG4iCisiXG4iCisiXHRodHRwOi8vZnRwLmdudS5vcmcvZ251L3BhcnRlZC9cbiIKKyJcbiIKKyJQbGVhc2UgY2hlY2sgdGhpcyB2ZXJzaW9uIHByaW9yIHRvIGJ1ZyByZXBvcnRpbmcuXG4iCisiXG4iCisiSWYgdGhpcyBoYXMgbm90IGJlZW4gZml4ZWQgeWV0IG9yIGlmIHlvdSBkb24ndCBrbm93IGhvdyB0byBjaGVjayxcbiIKKyJwbGVhc2UgdmlzaXQgdGhlIEdOVSBQYXJ0ZWQgd2Vic2l0ZTpcbiIKKyJcbiIKKyJcdGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9wYXJ0ZWRcbiIKKyJcbiIKKyJmb3IgZnVydGhlciBpbmZvcm1hdGlvbi5cbiIKKyJcbiIKKyJZb3VyIHJlcG9ydCBzaG91bGQgY29udGFpbiB0aGUgdmVyc2lvbiBvZiB0aGlzIHJlbGVhc2UgKCVzKVxuIgorImFsb25nIHdpdGggdGhlIGVycm9yIG1lc3NhZ2UgYmVsb3csIHRoZSBvdXRwdXQgb2ZcbiIKKyJcbiIKKyJcdHBhcnRlZCBERVZJQ0UgdW5pdCBjbyBwcmludCB1bml0IHMgcHJpbnRcbiIKKyJcbiIKKyJhbmQgdGhlIGZvbGxvd2luZyBoaXN0b3J5IG9mIGNvbW1hbmRzIHlvdSBlbnRlcmVkLlxuIgorIkFsc28gaW5jbHVkZSBhbnkgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB5b3VyIHNldHVwIHlvdVxuIgorImNvbnNpZGVyIGltcG9ydGFudC5cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzoyODQKK21zZ2lkICIiCisiXG4iCisiQ29tbWFuZCBIaXN0b3J5OlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjM2NgorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogU0VHVl9NQVBFUlIgKEFkZHJlc3Mgbm90IG1hcHBlZCB0byBvYmplY3QpXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6MzcyCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBTRUdWX0FDQ0VSUiAoSW52YWxpZCBwZXJtaXNzaW9ucyBmb3IgbWFwcGVkIG9iamVjdClcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzozNzcKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEEgZ2VuZXJhbCBTSUdTRUdWIHNpZ25hbCB3YXMgZW5jb3VudGVyZWQuXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDEwCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfSU5URElWIChJbnRlZ2VyOiBkaXZpZGUgYnkgemVybykiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDE1Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfSU5UT1ZGIChJbnRlZ2VyOiBvdmVyZmxvdykiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDIwCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxURElWIChGbG9hdDogZGl2aWRlIGJ5IHplcm8pIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQyNQorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0ZMVE9WRiAoRmxvYXQ6IG92ZXJmbG93KSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0MzAKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRVTkQgKEZsb2F0OiB1bmRlcmZsb3cpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQzNQorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0ZMVFJFUyAoRmxvYXQ6IGluZXhhY3QgcmVzdWx0KSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0NDAKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRJTlYgKEZsb2F0OiBpbnZhbGlkIG9wZXJhdGlvbikiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDQ1Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxUU1VCIChGbG9hdDogc3Vic2NyaXB0IG91dCBvZiByYW5nZSkiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDUwCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBBIGdlbmVyYWwgU0lHRlBFIHNpZ25hbCB3YXMgZW5jb3VudGVyZWQuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQ4MworbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX0lMTE9QQyAoSWxsZWdhbCBPcGNvZGUpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQ4OAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX0lMTE9QTiAoSWxsZWdhbCBPcGVyYW5kKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0OTMKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9JTExBRFIgKElsbGVnYWwgYWRkcmVzc2luZyBtb2RlKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0OTgKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9JTExUUlAgKElsbGVnYWwgVHJhcCkiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NTAzCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfUFJWT1BDIChQcml2aWxlZ2VkIE9wY29kZSkiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NTA4Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfUFJWUkVHIChQcml2aWxlZ2VkIFJlZ2lzdGVyKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo1MTMKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9DT1BST0MgKENvcHJvY2Vzc29yIEVycm9yKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo1MTgKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9CQURTVEsgKEludGVybmFsIFN0YWNrIEVycm9yKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo1MjMKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEEgZ2VuZXJhbCBTSUdJTEwgc2lnbmFsIHdhcyBlbmNvdW50ZXJlZC4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6MTAyNAorbXNnaWQgIkV4cGVjdGluZyBhIHBhcnRpdGlvbiBudW1iZXIuIgorbXNnc3RyICJBunRlcHQgdW4gbnVt43IgZGUgcGFydGn+aWUuIgorCisjOiBwYXJ0ZWQvdWkuYzoxMDMzCittc2dpZCAiUGFydGl0aW9uIGRvZXNuJ3QgZXhpc3QuIgorbXNnc3RyICJQYXJ0af5pYSBudSBleGlzdOMuIgorCisjOiBwYXJ0ZWQvdWkuYzoxMDUzCittc2dpZCAiRXhwZWN0aW5nIGEgZmlsZSBzeXN0ZW0gdHlwZS4iCittc2dzdHIgIkG6dGVwdCB1biB0aXAgZGUgc2lzdGVtIGRlIGZpumllcmUuIgorCisjOiBwYXJ0ZWQvdWkuYzoxMDYwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gZmlsZSBzeXN0ZW0gdHlwZSBcIiVzXCIuIgorbXNnc3RyICJUaXAgZGUgc2lzdGVtIGRlIGZpumllcmUgbmVjdW5vc2N1dCBcIiVzXCIuIgorCisjOiBwYXJ0ZWQvdWkuYzoxMDgwCittc2dpZCAiRXhwZWN0aW5nIGEgZGlzayBsYWJlbCB0eXBlLiIKK21zZ3N0ciAiQbp0ZXB0IHVuIHRpcCBkZSBldGljaGV04yBkZSBkaXNjLiIKKworIzogcGFydGVkL3VpLmM6MTE3OAorbXNnaWQgIkNhbid0IGNyZWF0ZSBhbnkgbW9yZSBwYXJ0aXRpb25zLiIKK21zZ3N0ciAiTnUgbWFpIHBvdCBjcmVhIG5pY2kgbyBwYXJ0af5pZSIKKworIzogcGFydGVkL3VpLmM6MTE4OAorbXNnaWQgIkV4cGVjdGluZyBhIHBhcnRpdGlvbiB0eXBlLiIKK21zZ3N0ciAiQbp0ZXB0IHVuIHRpcCBkZSBwYXJ0af5pZS4iCisKKyM6IHBhcnRlZC91aS5jOjEzMTUKK21zZ2lkICJvbiIKK21zZ3N0ciAicG9ybml0IgorCisjOiBwYXJ0ZWQvdWkuYzoxMzE2Cittc2dpZCAib2ZmIgorbXNnc3RyICJvcHJpdCIKKworIzogcGFydGVkL3VpLmM6MTQzMQorbXNnaWQgIk9QVElPTnM6IgorbXNnc3RyICJPUN5JVU5JOiIKKworIzogcGFydGVkL3VpLmM6MTQzNgorbXNnaWQgIkNPTU1BTkRzOiIKK21zZ3N0ciAiQ09NTUVOWkk6IgorCisjOiBwYXJ0ZWQvdWkuYzoxNDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzaW5nICVzXG4iCittc2dzdHIgIkZvbG9zZXNjICVzXG4iCisKKyM6IHBhcnRlZC91aS5jOjE1MTkKK21zZ2lkICJUaGlzIGNvbW1hbmQgZG9lcyBub3QgbWFrZSBzZW5zZSBpbiBub24taW50ZXJhY3RpdmUgbW9kZS5cbiIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorI34gbXNnaWQgIiIKKyN+ICJXaXRob3V0IGFyZ3VtZW50cywgcHJpbnQgZGlzcGxheXMgdGhlIGVudGlyZSBwYXJ0aXRpb24gdGFibGUuIFdpdGggIgorI34gIidmcmVlJ1xuIgorI34gImFyZ3VtZW50LCBpbmZvcm1hdGlvbiBhYm91dCBmcmVlIHNwYWNlIHdpbGwgYmUgZGlzcGxheWVkIG90aGVyd2lzZSBpZiBhXG4iCisjfiAicGFydGl0aW9uIG51bWJlciBpcyBnaXZlbiwgdGhlbiBtb3JlIGRldGFpbGVkIGluZm9ybWF0aW9uIGlzIGRpc3BsYXllZFxuIgorI34gImFib3V0IHRoYXQgcGFydGl0aW9uLiBJZiB0aGUgJ2FsbCcgYXJndW1lbnQgaXMgcGFzc2VkIGluc3RlYWQsIHBhcnRpdGlvblxuIgorI34gImluZm9ybWF0aW9uIGZvciBhbGwgZGV2aWNlcyB3aWxsIGJlIGRpc3BsYXllZC5cbiIKKyN+IG1zZ3N0ciAiIgorI34gIkbjcuMgYXJndW1lbnRlLCBwcmludCBhZmm6ZWF64yDubnRyZWFnYSB0YWJlbOMgZGUgcGFydGn+aWkuICBEYWPjIGVzdGUgIgorI34gImRhdFxuIgorI34gInVuIG51beNyIGRlIHBhcnRp/mllLCBhdHVuY2kgZXN0ZSBhZmm6YXTjIGluZm9ybWH+aWkgZGV0YWxpYXRlIGRlc3ByZSAiCisjfiAiYWNlYVxuIgorI34gInBhcnRp/mllLlxuIgorCisjfiBtc2dpZCAiIgorI34gIlRoZSBzZWN0b3Igc2l6ZSBvbiAlcyBpcyAlZCBieXRlcy4gIFBhcnRlZCBpcyBrbm93biBub3QgdG8gd29yayBwcm9wZXJseSAiCisjfiAid2l0aCBkcml2ZXMgd2l0aCBzZWN0b3Igc2l6ZXMgb3RoZXIgdGhhbiAlZCBieXRlcy4iCisjfiBtc2dzdHIgIiIKKyN+ICJEaW1lbnNpdW5lYSBzZWN0b3J1bHVpIHBlICVzIGVzdGUgJWQgb2N0Zf5pLiBFc3RlILp0aXV0IGPjIHBhcnRlZCBudSAiCisjfiAiZnVuY/5pb25lYXrjIGNvcmVzcHVueuN0b3IgY3UgZGlzY3VyaSBjdSBkaW1lbnNpdW5lYSBzZWN0b3J1bHVpIGRpZmVyaXTjICIKKyN+ICJkZSAlZCBvY3Rl/mkuIgorCisjfiBtc2dpZCAiSURFIgorI34gbXNnc3RyICJJREUiCisKKyN+IG1zZ2lkICIiCisjfiAiWW91IGZvdW5kIGEgYnVnIGluIEdOVSBQYXJ0ZWQuICBQbGVhc2UgZW1haWwgYSBidWcgcmVwb3J0IHRvIGJ1Zy0iCisjfiAicGFydGVkQGdudS5vcmcgY29udGFpbmluZyB0aGUgdmVyc2lvbiAoJXMpLCBhbmQgdGhlIGZvbGxvd2luZyBtZXNzYWdlOlxuIgorI34gbXNnc3RyICIiCisjfiAiQf5pIGfjc2l0IHVuIGJ1ZyDubiBHTlUgUGFydGVkLiAgVuMgcnVn420gc+MgdHJpbWl0Zf5pIHVuIGVtYWlsIHJhcG9ydOJuZCAiCisjfiAiYWNlc3QgYnVnICjubiBsaW1iYSBlbmdsZXrjKSBsYSBidWctcGFydGVkQGdudS5vcmcgY29u/mlu4m5kIHZlcnNpdW5lYSAoJSIKKyN+ICJzKSC6aSB1cm3jdG9ydWwgbWVzYWo6XG4iCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvcG8vcnUuZ21vIGIvcGFydGVkLTEuOC43L3BvL3J1LmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWI0OWEzCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L3BvL3J1LmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvcG8vcnUucG8gYi9wYXJ0ZWQtMS44LjcvcG8vcnUucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE1ZDVkMgotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9wby9ydS5wbwpAQCAtMCwwICsxLDMzMzAgQEAKKyMg8MXSxdfPxCDTz8/C3cXOycogcGFydGVkLgorIyBDb3B5cmlnaHQgKEMpIDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIERtaXRyeSBTLiBTaXZhY2hlbmtvIDxkaW1hQENoZy5SVT4sIDE5OTkuCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBwYXJ0ZWQgMS4yLjFcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogYnVnLXBhcnRlZEBnbnUub3JnXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMDctMDUtMDkgMTc6MDItMDQwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDAtMDYtMTYgMjI6NTIrMDQ6MDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IERtaXRyeSBTLiBTaXZhY2hlbmtvIDxkaW1hQENoZy5SVT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBSdXNzaWFuIDxydUBsaS5vcmc+XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9a29pOC1yXG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOC1iaXRcbiIKKworIzogbGliL2Nsb3Nlb3V0LmM6NzQKK21zZ2lkICJ3cml0ZSBlcnJvciIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXJyb3IuYzoxMjUKKyMsIGZ1enp5Cittc2dpZCAiVW5rbm93biBzeXN0ZW0gZXJyb3IiCittc2dzdHIgIu7FydrXxdPUztnKINTJ0CDGwcrMz9fPyiDTydPUxc3ZLiIKKworIzogbGliL2dldG9wdC5jOjUzMSBsaWIvZ2V0b3B0LmM6NTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYCVzJyBpcyBhbWJpZ3VvdXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6NTgwIGxpYi9nZXRvcHQuYzo1ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiBgLS0lcycgZG9lc24ndCBhbGxvdyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo1OTMgbGliL2dldG9wdC5jOjU5OAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIGAlYyVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjY0MSBsaWIvZ2V0b3B0LmM6NjYwIGxpYi9nZXRvcHQuYzo5NzYgbGliL2dldG9wdC5jOjk5NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIGAlcycgcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6Njk4IGxpYi9nZXRvcHQuYzo3MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVucmVjb2duaXplZCBvcHRpb24gYC0tJXMnXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjcwOSBsaWIvZ2V0b3B0LmM6NzEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bnJlY29nbml6ZWQgb3B0aW9uIGAlYyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo3NjQgbGliL2dldG9wdC5jOjc2NworIywgYy1mb3JtYXQKK21zZ2lkICIlczogaWxsZWdhbCBvcHRpb24gLS0gJWNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6NzczIGxpYi9nZXRvcHQuYzo3NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgb3B0aW9uIC0tICVjXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjgyOCBsaWIvZ2V0b3B0LmM6ODQ0IGxpYi9nZXRvcHQuYzoxMDQ4IGxpYi9nZXRvcHQuYzoxMDY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQgLS0gJWNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6ODk3IGxpYi9nZXRvcHQuYzo5MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiBgLVcgJXMnIGlzIGFtYmlndW91c1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo5MzcgbGliL2dldG9wdC5jOjk1NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIGAtVyAlcycgZG9lc24ndCBhbGxvdyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOgorIy4gR2V0IHRyYW5zbGF0aW9ucyBmb3Igb3BlbiBhbmQgY2xvc2luZyBxdW90YXRpb24gbWFya3MuCisjLgorIy4gVGhlIG1lc3NhZ2UgY2F0YWxvZyBzaG91bGQgdHJhbnNsYXRlICJgIiB0byBhIGxlZnQKKyMuIHF1b3RhdGlvbiBtYXJrIHN1aXRhYmxlIGZvciB0aGUgbG9jYWxlLCBhbmQgc2ltaWxhcmx5IGZvcgorIy4gIiciLiAgSWYgdGhlIGNhdGFsb2cgaGFzIG5vIHRyYW5zbGF0aW9uLAorIy4gbG9jYWxlX3F1b3Rpbmdfc3R5bGUgcXVvdGVzIGBsaWtlIHRoaXMnLCBhbmQKKyMuIGNsb2NhbGVfcXVvdGluZ19zdHlsZSBxdW90ZXMgImxpa2UgdGhpcyIuCisjLgorIy4gRm9yIGV4YW1wbGUsIGFuIEFtZXJpY2FuIEVuZ2xpc2ggVW5pY29kZSBsb2NhbGUgc2hvdWxkCisjLiB0cmFuc2xhdGUgImAiIHRvIFUrMjAxQyAoTEVGVCBET1VCTEUgUVVPVEFUSU9OIE1BUkspLCBhbmQKKyMuIHNob3VsZCB0cmFuc2xhdGUgIiciIHRvIFUrMjAxRCAoUklHSFQgRE9VQkxFIFFVT1RBVElPTgorIy4gTUFSSykuICBBIEJyaXRpc2ggRW5nbGlzaCBVbmljb2RlIGxvY2FsZSBzaG91bGQgaW5zdGVhZAorIy4gdHJhbnNsYXRlIHRoZXNlIHRvIFUrMjAxOCAoTEVGVCBTSU5HTEUgUVVPVEFUSU9OIE1BUkspIGFuZAorIy4gVSsyMDE5IChSSUdIVCBTSU5HTEUgUVVPVEFUSU9OIE1BUkspLCByZXNwZWN0aXZlbHkuCisjLgorIy4gSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBwdXQgaGVyZSwgcGxlYXNlIHNlZQorIy4gPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUXVvdGF0aW9uX21hcmsjR2x5cGhzPgorIy4gYW5kIHVzZSBnbHlwaHMgc3VpdGFibGUgZm9yIHlvdXIgbGFuZ3VhZ2UuCisjOiBsaWIvcXVvdGVhcmcuYzoyMjkKK21zZ2lkICJgIgorbXNnc3RyICIiCisKKyM6IGxpYi9xdW90ZWFyZy5jOjIzMAorbXNnaWQgIiciCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxMzEKK21zZ2lkICJTdWNjZXNzIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTM0Cittc2dpZCAiTm8gbWF0Y2giCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxMzcKK21zZ2lkICJJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE0MAorbXNnaWQgIkludmFsaWQgY29sbGF0aW9uIGNoYXJhY3RlciIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE0MworbXNnaWQgIkludmFsaWQgY2hhcmFjdGVyIGNsYXNzIG5hbWUiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNDYKK21zZ2lkICJUcmFpbGluZyBiYWNrc2xhc2giCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNDkKK21zZ2lkICJJbnZhbGlkIGJhY2sgcmVmZXJlbmNlIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTUyCittc2dpZCAiVW5tYXRjaGVkIFsgb3IgW14iCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNTUKK21zZ2lkICJVbm1hdGNoZWQgKCBvciBcXCgiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNTgKK21zZ2lkICJVbm1hdGNoZWQgXFx7IgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTYxCittc2dpZCAiSW52YWxpZCBjb250ZW50IG9mIFxce1xcfSIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE2NAorbXNnaWQgIkludmFsaWQgcmFuZ2UgZW5kIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTY3Cittc2dpZCAiTWVtb3J5IGV4aGF1c3RlZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE3MAorbXNnaWQgIkludmFsaWQgcHJlY2VkaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE3MworbXNnaWQgIlByZW1hdHVyZSBlbmQgb2YgcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTc2Cittc2dpZCAiUmVndWxhciBleHByZXNzaW9uIHRvbyBiaWciCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNzkKK21zZ2lkICJVbm1hdGNoZWQgKSBvciBcXCkiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzo2ODAKK21zZ2lkICJObyBwcmV2aW91cyByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgIiIKKworIzogbGliL3JwbWF0Y2guYzo3MAorbXNnaWQgIl5beVldIgorbXNnc3RyICIiCisKKyM6IGxpYi9ycG1hdGNoLmM6NzMKK21zZ2lkICJeW25OXSIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogVHJhbnNsYXRlICIoQykiIHRvIHRoZSBjb3B5cmlnaHQgc3ltYm9sCisjLiAoQy1pbi1hLWNpcmNsZSksIGlmIHRoaXMgc3ltYm9sIGlzIGF2YWlsYWJsZSBpbiB0aGUgdXNlcidzCisjLiBsb2NhbGUuICBPdGhlcndpc2UsIGRvIG5vdCB0cmFuc2xhdGUgIihDKSI7IGxlYXZlIGl0IGFzLWlzLgorIzogbGliL3ZlcnNpb24tZXRjLmM6NjYKK21zZ2lkICIoQykiCittc2dzdHIgIiIKKworIzogbGliL3ZlcnNpb24tZXRjLmM6NjgKK21zZ2lkICIiCisiXG4iCisiTGljZW5zZSBHUEx2Mis6IEdOVSBHUEwgdmVyc2lvbiAyIG9yIGxhdGVyIDxodHRwOi8vZ251Lm9yZy9saWNlbnNlcy9ncGwuIgorImh0bWw+XG4iCisiVGhpcyBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgYXJlIGZyZWUgdG8gY2hhbmdlIGFuZCByZWRpc3RyaWJ1dGUgaXQuXG4iCisiVGhlcmUgaXMgTk8gV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIldyaXR0ZW4gYnkgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjg4CisjLCBjLWZvcm1hdAorbXNnaWQgIldyaXR0ZW4gYnkgJXMgYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzo5MgorIywgYy1mb3JtYXQKK21zZ2lkICJXcml0dGVuIGJ5ICVzLCAlcywgYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjLiBZb3UgY2FuIHVzZSBsaW5lIGJyZWFrcywgZXN0aW1hdGluZyB0aGF0IGVhY2ggYXV0aG9yIG5hbWUgb2NjdXBpZXMKKyMuIGNhLiAxNiBzY3JlZW4gY29sdW1ucyBhbmQgdGhhdCBhIHNjcmVlbiBsaW5lIGhhcyBjYS4gODAgY29sdW1ucy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjLiBZb3UgY2FuIHVzZSBsaW5lIGJyZWFrcywgZXN0aW1hdGluZyB0aGF0IGVhY2ggYXV0aG9yIG5hbWUgb2NjdXBpZXMKKyMuIGNhLiAxNiBzY3JlZW4gY29sdW1ucyBhbmQgdGhhdCBhIHNjcmVlbiBsaW5lIGhhcyBjYS4gODAgY29sdW1ucy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjEwNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorIiVzLCBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiJXMsICVzLCBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6MTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiJXMsICVzLCAlcywgYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjLiBZb3UgY2FuIHVzZSBsaW5lIGJyZWFrcywgZXN0aW1hdGluZyB0aGF0IGVhY2ggYXV0aG9yIG5hbWUgb2NjdXBpZXMKKyMuIGNhLiAxNiBzY3JlZW4gY29sdW1ucyBhbmQgdGhhdCBhIHNjcmVlbiBsaW5lIGhhcyBjYS4gODAgY29sdW1ucy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjEyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorIiVzLCAlcywgJXMsICVzLFxuIgorImFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzoxMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyIlcywgJXMsICVzLCAlcyxcbiIKKyIlcywgYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjLiBZb3UgY2FuIHVzZSBsaW5lIGJyZWFrcywgZXN0aW1hdGluZyB0aGF0IGVhY2ggYXV0aG9yIG5hbWUgb2NjdXBpZXMKKyMuIGNhLiAxNiBzY3JlZW4gY29sdW1ucyBhbmQgdGhhdCBhIHNjcmVlbiBsaW5lIGhhcyBjYS4gODAgY29sdW1ucy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjE0MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorIiVzLCAlcywgJXMsICVzLFxuIgorIiVzLCAlcywgYW5kIG90aGVycy5cbiIKK21zZ3N0ciAiIgorCisjOiBsaWIveGFsbG9jLWRpZS5jOjM1Cittc2dpZCAibWVtb3J5IGV4aGF1c3RlZCIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6MjM3Cittc2dpZCAiRGlzayBJbWFnZSIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6MzM4IGxpYnBhcnRlZC9hcmNoL2dudS5jOjI2MQorIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMjcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIG9wZW5pbmcgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzozNDkgbGlicGFydGVkL2FyY2gvZ251LmM6MjcxCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjEyODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIG9wZW4gJXMgcmVhZC13cml0ZSAoJXMpLiAgJXMgaGFzIGJlZW4gb3BlbmVkIHJlYWQtb25seS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjQxMSBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjE0MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZHVyaW5nIHNlZWsgZm9yIHJlYWQgb24gJXMiCittc2dzdHIgIiVzINfPINfSxc3RINDP2snDyc/OydLP18HOydEgxMzRIN7Uxc7J0SDOwSAlcyIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjQ0NCBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo0NDkgbGlicGFydGVkL2FyY2gvZ251LmM6NTQ4CisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo2NzYgbGlicGFydGVkL2FyY2gvbGludXguYzoxMzkxCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjE0NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZHVyaW5nIHJlYWQgb24gJXMiCittc2dzdHIgIiVzINfPINfSxc3RIN7Uxc7J0SDOwSAlcyIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjQ4MCBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo1MDkKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTU0NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ2FuJ3Qgd3JpdGUgdG8gJXMsIGJlY2F1c2UgaXQgaXMgb3BlbmVkIHJlYWQtb25seS4iCittc2dzdHIgIiIKKyLuxdfP2s3P1s7PIMTPwsHXydTYIMzPx8nexdPLycog0sHaxMXMIM7BICVzLCDQz9TPzdUg3tTPIM7F1CDSwdPbydLFzs7Px88gIgorItLB2sTFzMEuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6NDk2IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTU3MAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkdXJpbmcgc2VlayBmb3Igd3JpdGUgb24gJXMiCittc2dzdHIgIiVzINfPINfSxc3RINDP2snDyc/OydLP18HOydEgxMzRINrB0MnTySDOwSAlcyIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjUzMyBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo1ODUgbGlicGFydGVkL2FyY2gvZ251LmM6NjMwCisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo3MDcgbGlicGFydGVkL2FyY2gvbGludXguYzoxNTE3CisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjE2MTIgbGlicGFydGVkL2FyY2gvbGludXguYzoxNjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGR1cmluZyB3cml0ZSBvbiAlcyIKK21zZ3N0ciAiJXMg188g19LFzdEg2sHQydPJIM7BICVzIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjYzIHBhcnRwcm9iZS9wYXJ0cHJvYmUuYzoxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5IGAlcyAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbT1BUSU9OXVxuIgorIiAgb3I6ICAlcyBERVZJQ0UgTUlOT1JcbiIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjcwCittc2dpZCAiIgorIkNsZWFyIHVudXNlZCBzcGFjZSBvbiBhIEZBVCBwYXJ0aXRpb24gKGEgR05VIFBhcnRlZCB0ZXN0aW5nIHRvb2wpLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6NzQKK21zZ2lkICIgICAgICAtLWhlbHAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0XG4iCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo3NQorbXNnaWQgIiAgICAgIC0tdmVyc2lvbiAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXRcbiIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjc3IHBhcnRwcm9iZS9wYXJ0cHJvYmUuYzoxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlJlcG9ydCBidWdzIHRvIDwlcz4uXG4iCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzoyODUKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIGZldyBhcmd1bWVudHMiCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzoyOTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyIKK21zZ3N0ciAi88zJ28vPzSDNzs/HzyDQzM/Iycgg09TSwc7Jwy4iCisKKyM6IHBhcnRwcm9iZS9wYXJ0cHJvYmUuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFtPUFRJT05dIFtERVZJQ0VdLi4uXG4iCittc2dzdHIgIiIKKworIzogcGFydHByb2JlL3BhcnRwcm9iZS5jOjE0MgorbXNnaWQgIiIKKyJJbmZvcm0gdGhlIE9TIG9mIHBhcnRpdGlvbiB0YWJsZSBjaGFuZ2VzLlxuIgorIlxuIgorIiAgLWQsIC0tbm8tdXBkYXRlICBkb24ndCB1cGRhdGUgdGhlIGtlcm5lbFxuIgorIiAgLXMsIC0tc3VtbWFyeSAgICBwcmludCBhIHN1bW1hcnkgb2YgY29udGVudHNcbiIKKyIgIC1oLCAtLWhlbHAgICAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXRcbiIKKyIgIC12LCAtLXZlcnNpb24gICAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXRcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0cHJvYmUvcGFydHByb2JlLmM6MTUwCittc2dpZCAiIgorIlxuIgorIldpdGggbm8gREVWSUNFLCBwcm9iZSBhbGwgcGFydGl0aW9ucy5cbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gb3BlbiAlcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6MTE0Cittc2dpZCAiVW5hYmxlIHRvIHByb2JlIHN0b3JlLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzozNTIKK21zZ2lkICIiCisiVGhlIHBhcnRpdGlvbiB0YWJsZSBjYW5ub3QgYmUgcmUtcmVhZC4gIFRoaXMgbWVhbnMgeW91IG5lZWQgdG8gcmVib290IGJlZm9yZSAiCisibW91bnRpbmcgYW55IG1vZGlmaWVkIHBhcnRpdGlvbnMuICBZb3UgYWxzbyBuZWVkIHRvIHJlaW5zdGFsbCB5b3VyIGJvb3QgIgorImxvYWRlciBiZWZvcmUgeW91IHJlYm9vdCAod2hpY2ggbWF5IHJlcXVpcmUgbW91bnRpbmcgbW9kaWZpZWQgcGFydGl0aW9ucykuICAiCisiSXQgaXMgaW1wb3NzaWJsZSBkbyBib3RoIHRoaW5ncyEgIFNvIHlvdSdsbCBuZWVkIHRvIGJvb3Qgb2ZmIGEgcmVzY3VlIGRpc2ssICIKKyJhbmQgcmVpbnN0YWxsIHlvdXIgYm9vdCBsb2FkZXIgZnJvbSB0aGUgcmVzY3VlIGRpc2suICBSZWFkIHNlY3Rpb24gNCBvZiB0aGUgIgorIlBhcnRlZCBVc2VyIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjM2OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBwYXJ0aXRpb24gdGFibGUgb24gJXMgY2Fubm90IGJlIHJlLXJlYWQgKCVzKS4gIFRoaXMgbWVhbnMgdGhlIEh1cmQga25vd3MgIgorIm5vdGhpbmcgYWJvdXQgYW55IG1vZGlmaWNhdGlvbnMgeW91IG1hZGUuICBZb3Ugc2hvdWxkIHJlYm9vdCB5b3VyIGNvbXB1dGVyICIKKyJiZWZvcmUgZG9pbmcgYW55dGhpbmcgd2l0aCAlcy4iCittc2dzdHIgIiIKKyLxxNLPIM7FINPNz8fMzyDT3snUwdTYINTBwszJw9Ug0sHaxMXMz9cgzsEgJXMgKCVzKS4gIPzUzyDazsHeydQsIN7UzyAiCisi08TFzMHOztnFINfBzckgydrNxc7FzsnRIM7FxM/T1NXQztkgxMzRIExpbnV4LiAg99kgxM/M1s7ZINDF0sXawcfS1drJ1Ngg18HbICIKKyLLz83Q2MDUxdIgxM8g1M/Hzywgy8HLIN7Uzy3MycLPIMTFzMHU2CDTICVzLiIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6MzgwIHBhcnRlZC9wYXJ0ZWQuYzoyNDQzCittc2dpZCAiIgorIllvdSBzaG91bGQgcmVpbnN0YWxsIHlvdXIgYm9vdCBsb2FkZXIgYmVmb3JlIHJlYm9vdGluZy4gIFJlYWQgc2VjdGlvbiA0IG9mICIKKyJ0aGUgUGFydGVkIFVzZXIgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6NzcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHRyeWluZyB0byBzeW5jICVzIHRvIGRpc2siCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo0MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHN0YXQgZGV2aWNlICVzIC0gJXMuIgorbXNnc3RyICLuxSDVxMHF1NPRINDPzNXeydTYINPUwdTV0yDV09TSz8rT1NfBICVzIC0gJXMuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjUyMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGRldGVybWluZSBzZWN0b3Igc2l6ZSBmb3IgJXM6ICVzLlxuIgorIlVzaW5nIHRoZSBkZWZhdWx0IHNlY3RvciBzaXplICglbGxkKS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo1MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkRldmljZSAlcyBoYXMgYSBsb2dpY2FsIHNlY3RvciBzaXplIG9mICVsbGQuICBOb3QgYWxsIHBhcnRzIG9mIEdOVSBQYXJ0ZWQgIgorInN1cHBvcnQgdGhpcyBhdCB0aGUgbW9tZW50LCBhbmQgdGhlIHdvcmtpbmcgY29kZSBpcyBISUdITFkgRVhQRVJJTUVOVEFMLlxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6NTc5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZGV0ZXJtaW5lIHRoZSBzaXplIG9mICVzICglcykuIgorbXNnc3RyICLuxSDVxMHF1NPRIM/Q0sXExczJ1Ngg0sHazcXSICVzICglcykiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6NjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBnZXQgaWRlbnRpdHkgb2YgZGV2aWNlICVzIC0gJXMiCittc2dzdHIgIu7FINXEwcXU09Eg0M/M1d7J1NggycTFztTJxsnLwdTP0iDV09TSz8rT1NfBICVzIC0gJXMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6Njc3Cittc2dpZCAiR2VuZXJpYyBJREUiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkRldmljZSAlcyBoYXMgbXVsdGlwbGUgKCVkKSBsb2dpY2FsIHNlY3RvcnMgcGVyIHBoeXNpY2FsIHNlY3Rvci5cbiIKKyJHTlUgUGFydGVkIHN1cHBvcnRzIHRoaXMgRVhQRVJJTUVOVEFMTFkgZm9yIHNvbWUgc3BlY2lhbCBkaXNrIGxhYmVsL2ZpbGUgIgorInN5c3RlbSBjb21iaW5hdGlvbnMsIGUuZy4gR1BUIGFuZCBleHQyLzMuXG4iCisiUGxlYXNlIGNvbnN1bHQgdGhlIHdlYiBzaXRlIGZvciB1cC10by1kYXRlIGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjg3MworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBpbml0aWFsaXNpbmcgU0NTSSBkZXZpY2UgJXMgLSAlcyIKK21zZ3N0ciAi79vJwsvBIMnOycPJwczJ2sHDyckgU0NTSS3V09TSz8rT1NfBICVzIC0gJXMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6OTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZGV2aWNlICVzIGhhcyB6ZXJvIGxlbmd0aCwgYW5kIGNhbid0IHBvc3NpYmx5IHN0b3JlIGEgZmlsZSBzeXN0ZW0gb3IgIgorInBhcnRpdGlvbiB0YWJsZS4gIFBlcmhhcHMgeW91IHNlbGVjdGVkIHRoZSB3cm9uZyBkZXZpY2U/IgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTAzMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlVuYWJsZSB0byBkZXRlcm1pbmUgZ2VvbWV0cnkgb2YgZmlsZS9kZXZpY2UgJXMuICBZb3Ugc2hvdWxkIG5vdCB1c2UgUGFydGVkICIKKyJ1bmxlc3MgeW91IFJFQUxMWSBrbm93IHdoYXQgeW91J3JlIGRvaW5nISIKK21zZ3N0ciAiIgorIu7FINXEwcXU09Egz9DSxcTFzMnU2CDHxc/NxdTSycAgxsHKzMEv1dPU0s/K09TXwS4gIPfZIM7FIMTPzNbO2SDJ09DPzNjaz9fB1NggIgorIlBhcnRlZCwgxdPMySDX2SDOxSDazsHF1MUg7uH35fLu8evhLCDe1M8gxMXMwcXUxSEiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTExMAorbXNnaWQgIkRBQzk2MCBSQUlEIGNvbnRyb2xsZXIiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTE1Cittc2dpZCAiUHJvbWlzZSBTWDggU0FUQSBEZXZpY2UiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTIwCittc2dpZCAiSUJNIFMzOTAgREFTRCBkcml2ZSIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExMjUKK21zZ2lkICJJQk0gaVNlcmllcyBWaXJ0dWFsIERBU0QiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTMwCittc2dpZCAiQ29tcGFxIFNtYXJ0IEFycmF5IgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTEzNQorbXNnaWQgIkFUQVJBSUQgQ29udHJvbGxlciIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExNDAKK21zZ2lkICJJMk8gQ29udHJvbGxlciIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExNDUKK21zZ2lkICJVc2VyLU1vZGUgTGludXggVUJEIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTE1NgorbXNnaWQgIkxpbnV4IGRldmljZS1tYXBwZXIiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTYyCisjLCBmdXp6eQorbXNnaWQgIlVua25vd24iCittc2dzdHIgIs7FydrXxdPUzsHRIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExNjkKK21zZ2lkICJwZWRfZGV2aWNlX25ldygpICBVbnN1cHBvcnRlZCBkZXZpY2UgdHlwZSIKK21zZ3N0ciAicGVkX2RldmljZV9uZXcoKSAg7sXQz8TExdLWydfBxc3ZyiDUydAg1dPU0s/K09TXwSIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoyMDgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFcnJvciBpbmZvcm1pbmcgdGhlIGtlcm5lbCBhYm91dCBtb2RpZmljYXRpb25zIHRvIHBhcnRpdGlvbiAlcyAtLSAlcy4gIFRoaXMgIgorIm1lYW5zIExpbnV4IHdvbid0IGtub3cgYWJvdXQgYW55IGNoYW5nZXMgeW91IG1hZGUgdG8gJXMgdW50aWwgeW91IHJlYm9vdCAtLSAiCisic28geW91IHNob3VsZG4ndCBtb3VudCBpdCBvciB1c2UgaXQgaW4gYW55IHdheSBiZWZvcmUgcmVib290aW5nLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjIyNjIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJwYXJ0ZWQgd2FzIHVuYWJsZSB0byByZS1yZWFkIHRoZSBwYXJ0aXRpb24gdGFibGUgb24gJXMgKCVzKS4gIFRoaXMgbWVhbnMgIgorIkxpbnV4IHdvbid0IGtub3cgYW55dGhpbmcgYWJvdXQgdGhlIG1vZGlmaWNhdGlvbnMgeW91IG1hZGUuICIKK21zZ3N0ciAiIgorIvHE0s8gzsUg083Px8zPINPeydTB1Ngg1MHCzMnD1SDSwdrExczP1yDOwSAlcyAoJXMpLiAg/NTPINrOwd7J1Cwg3tTPICIKKyLTxMXMwc7O2cUg18HNySDJ2s3FzsXOydEgzsXEz9PU1dDO2SDEzNEgTGludXguICD32SDEz8zWztkg0MXSxdrBx9LV2snU2CDXwdsgIgorIsvPzdDYwNTF0iDEzyDUz8fPLCDLwcsg3tTPLczJws8gxMXMwdTYINMgJXMuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjIzNjgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUga2VybmVsIHdhcyB1bmFibGUgdG8gcmUtcmVhZCB0aGUgcGFydGl0aW9uIHRhYmxlIG9uICVzICglcykuICBUaGlzIG1lYW5zICIKKyJMaW51eCB3b24ndCBrbm93IGFueXRoaW5nIGFib3V0IHRoZSBtb2RpZmljYXRpb25zIHlvdSBtYWRlIHVudGlsIHlvdSAiCisicmVib290LiAgWW91IHNob3VsZCByZWJvb3QgeW91ciBjb21wdXRlciBiZWZvcmUgZG9pbmcgYW55dGhpbmcgd2l0aCAlcy4iCittc2dzdHIgIiIKKyLxxNLPIM7FINPNz8fMzyDT3snUwdTYINTBwszJw9Ug0sHaxMXMz9cgzsEgJXMgKCVzKS4gIPzUzyDazsHeydQsIN7UzyAiCisi08TFzMHOztnFINfBzckgydrNxc7FzsnRIM7FxM/T1NXQztkgxMzRIExpbnV4LiAg99kgxM/M1s7ZINDF0sXawcfS1drJ1Ngg18HbICIKKyLLz83Q2MDUxdIgxM8g1M/Hzywgy8HLIN7Uzy3MycLPIMTFzMHU2CDTICVzLiIKKworIzogbGlicGFydGVkL2NzL2dlb20uYzoxNjIKKyMsIGZ1enp5Cittc2dpZCAiQ2FuJ3QgaGF2ZSB0aGUgZW5kIGJlZm9yZSB0aGUgc3RhcnQhIgorbXNnc3RyICLuxdfP2s3P1s7PINDF0sXNxdPUydTYIMvPzsXDINLB2sTFzMEg2sEgzsHewczPLiIKKworIzogbGlicGFydGVkL2NzL2dlb20uYzoxNjkKKyMsIGZ1enp5Cittc2dpZCAiQ2FuJ3QgaGF2ZSBhIHBhcnRpdGlvbiBvdXRzaWRlIHRoZSBkaXNrISIKK21zZ3N0ciAi7sXXz9rNz9bOzyDTz9rEwdTYINLB2sTFzCDXzsUg1dPU0s/K09TXwS4iCisKKyM6IGxpYnBhcnRlZC9jcy9nZW9tLmM6MzY2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJBdHRlbXB0IHRvIHdyaXRlIHNlY3RvcnMgJWxkLSVsZCBvdXRzaWRlIG9mIHBhcnRpdGlvbiBvbiAlcy4iCittc2dzdHIgIvDP0NnUy8Eg2sHQydPJINPPy9TP0s/XICVsZC0lbGQg2sEg0NLFxMXM2SDSwdrExczBIM7BICVzIgorCisjOiBsaWJwYXJ0ZWQvY3MvZ2VvbS5jOjQwNiBsaWJwYXJ0ZWQvZnMvbGludXhfc3dhcC9saW51eF9zd2FwLmM6NDc1Cittc2dpZCAiY2hlY2tpbmcgZm9yIGJhZCBibG9ja3MiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2RlYnVnLmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkJhY2t0cmFjZSBoYXMgJWQgY2FsbHMgb24gc3RhY2s6XG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2RlYnVnLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkFzc2VydGlvbiAoJXMpIGF0ICVzOiVkIGluIGZ1bmN0aW9uICVzKCkgZmFpbGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIwMworIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gb3BlbiAlcyAtIHVucmVjb2duaXNlZCBkaXNrIGxhYmVsLiIKK21zZ3N0ciAi7sUg1cTBxdTT0SDP1MvS2dTYICVzIC0gzsXSwdPQz9rOwc7OwdEgzcXUy8EgxMnTy8EuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjQ3MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhpcyBsaWJwYXJ0ZWQgZG9lc24ndCBoYXZlIHdyaXRlIHN1cHBvcnQgZm9yICVzLiAgUGVyaGFwcyBpdCB3YXMgY29tcGlsZWQgIgorInJlYWQtb25seS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2Rpc2suYzo1OTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlBhcnRpdGlvbiAlZCBpcyAlcywgYnV0IHRoZSBmaWxlIHN5c3RlbSBpcyAlcy4iCittc2dzdHIgIvLB2sTFzCDTzMnby8/NIM3BzCDEzNEgxsHKzM/Xz8og08nT1MXN2SBGQVQiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTA3NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgZGlzayBsYWJlbHMgZG8gbm90IHN1cHBvcnQgZXh0ZW5kZWQgcGFydGl0aW9ucy4iCittc2dzdHIgIu7F18/azc/Wzs8g08vP0MnSz9fB1Ngg0sHT28nSxc7O2cog0sHaxMXMLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNjM0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyBkaXNrIGxhYmVscyBkb24ndCBzdXBwb3J0IGxvZ2ljYWwgb3IgZXh0ZW5kZWQgcGFydGl0aW9ucy4iCittc2dzdHIgIu7F18/azc/Wzs8g08vP0MnSz9fB1Ngg0sHT28nSxc7O2cog0sHaxMXMLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNjQ3CisjLCBmdXp6eQorbXNnaWQgIlRvbyBtYW55IHByaW1hcnkgcGFydGl0aW9ucy4iCittc2dzdHIgIvPMydvLz80gzc7Px88g0MzPyMnIINPU0sHOycMuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE2NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbid0IGFkZCBhIGxvZ2ljYWwgcGFydGl0aW9uIHRvICVzLCBiZWNhdXNlIHRoZXJlIGlzIG5vIGV4dGVuZGVkIHBhcnRpdGlvbi4iCittc2dzdHIgIiIKKyLuxdfP2s3P1s7PIMTPwsHXydTYIMzPx8nexdPLycog0sHaxMXMIM7BICVzLCDQz9TPzdUg3tTPIM7F1CDSwdPbydLFzs7Px88gIgorItLB2sTFzMEuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE2ODAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkNhbid0IGhhdmUgbW9yZSB0aGFuIG9uZSBleHRlbmRlZCBwYXJ0aXRpb24gb24gJXMuIgorbXNnc3RyICLuxdfP2s3P1s7PIMnNxdTYIMLPzNjbxSDPxM7Px88g0sHT28nSxc7Oz8fPINLB2sTFzMEgzsEgJXMiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTY5MAorIywgZnV6enkKK21zZ2lkICJDYW4ndCBoYXZlIGxvZ2ljYWwgcGFydGl0aW9ucyBvdXRzaWRlIG9mIHRoZSBleHRlbmRlZCBwYXJ0aXRpb24uIgorbXNnc3RyICLuxdfP2s3P1s7PINXXxczJ3snU2CDMz8fJ3sXTy8nKINLB2sTFzCDXzsUg0sHT28nSxc7Oz8fPINLB2sTFzMEuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE3MTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkNhbid0IGhhdmUgYSBsb2dpY2FsIHBhcnRpdGlvbiBvdXRzaWRlIG9mIHRoZSBleHRlbmRlZCBwYXJ0aXRpb24gb24gJXMuIgorbXNnc3RyICLuxdfP2s3P1s7PIMTPwsHXydTYIMzPx8nexdPLycog0sHaxMXMINfOxSDSwdPbydLFzs7Px88g0sHaxMXMwSDOwSAlcy4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTcyNSBsaWJwYXJ0ZWQvZGlzay5jOjE3NzkgbGlicGFydGVkL2Rpc2suYzoxOTQ1CisjLCBmdXp6eQorbXNnaWQgIkNhbid0IGhhdmUgb3ZlcmxhcHBpbmcgcGFydGl0aW9ucy4iCittc2dzdHIgIu7F18/azc/Wzs8g08vP0MnSz9fB1Ngg0sHT28nSxc7O2cog0sHaxMXMLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNzMzCisjLCBmdXp6eQorbXNnaWQgIkNhbid0IGhhdmUgYSBwcmltYXJ5IHBhcnRpdGlvbiBpbnNpZGUgYW4gZXh0ZW5kZWQgcGFydGl0aW9uLiIKK21zZ3N0ciAi7sXXz9rNz9bOzyDEz8LB18nU2CDP087P187PyiDSwdrExcwg187V1NLYINLB09vJ0sXOzs/Hzy4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE0MAorbXNnaWQgIm1ldGFkYXRhIgorbXNnc3RyICLNxdTBxMHOztnFIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNDIKK21zZ2lkICJmcmVlIgorbXNnc3RyICLT18/Cz8TOzyIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTQ0IHBhcnRlZC91aS5jOjExNjkgcGFydGVkL3VpLmM6MTE5NworbXNnaWQgImV4dGVuZGVkIgorbXNnc3RyICLSwdPbydLFzs7ZyiIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTQ2IHBhcnRlZC91aS5jOjExNzMgcGFydGVkL3VpLmM6MTIwMQorbXNnaWQgImxvZ2ljYWwiCittc2dzdHIgIszPx8nexdPLycoiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE0OCBwYXJ0ZWQvdWkuYzoxMTY1IHBhcnRlZC91aS5jOjExOTMKK21zZ2lkICJwcmltYXJ5IgorbXNnc3RyICLP087P187PyiIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTY0Cittc2dpZCAiYm9vdCIKK21zZ3N0ciAiYm9vdCIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTY2CisjLCBmdXp6eQorbXNnaWQgInJvb3QiCittc2dzdHIgImJvb3QiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE2OAorbXNnaWQgInN3YXAiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTcwCittc2dpZCAiaGlkZGVuIgorbXNnc3RyICLTy9LZ1NnKIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNzIKK21zZ2lkICJyYWlkIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE3NAorbXNnaWQgImx2bSIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNzYKK21zZ2lkICJsYmEiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTc4Cittc2dpZCAiaHAtc2VydmljZSIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxODAKK21zZ2lkICJwYWxvIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE4MgorbXNnaWQgInByZXAiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTg0Cittc2dpZCAibXNmdHJlcyIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBwYXJ0aXRpb24gZmxhZywgJWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo3OAorbXNnaWQgIkluZm9ybWF0aW9uIgorbXNnc3RyICLpzsbP0s3Bw8nRIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6NzkKK21zZ2lkICJXYXJuaW5nIgorbXNnc3RyICLw0sXE1dDSxdbExc7JxSIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjgwCittc2dpZCAiRXJyb3IiCittc2dzdHIgIu/bycLLwSIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjgxCittc2dpZCAiRmF0YWwiCittc2dzdHIgIubB1MHM2M7B0SDP28nCy8EiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4MgorbXNnaWQgIkJ1ZyIKK21zZ3N0ciAi79vJwsvBIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODMKK21zZ2lkICJObyBJbXBsZW1lbnRhdGlvbiIKK21zZ3N0ciAi7sXUINLFwczJ2sHDyckiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4NworbXNnaWQgIkZpeCIKK21zZ3N0ciAi6dPQ0sHXydTYIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODgKK21zZ2lkICJZZXMiCittc2dzdHIgIuTBIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODkKK21zZ2lkICJObyIKK21zZ3N0ciAi7sXUIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6OTAKK21zZ2lkICJPSyIKK21zZ3N0ciAiT0siCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo5MQorbXNnaWQgIlJldHJ5IgorbXNnc3RyICLwz9fUz9LJ1NgiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo5MgorbXNnaWQgIklnbm9yZSIKK21zZ3N0ciAi6cfOz9LJ0s/XwdTYIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6OTMKK21zZ2lkICJDYW5jZWwiCittc2dzdHIgIu/UzcXOydTYIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6MTMzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiQSBidWcgaGFzIGJlZW4gZGV0ZWN0ZWQgaW4gR05VIFBhcnRlZC4gIFJlZmVyIHRvIHRoZSB3ZWIgc2l0ZSBvZiBwYXJ0ZWQgIgorImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9wYXJ0ZWQvcGFydGVkLmh0bWwgZm9yIG1vcmUgaW5mb3JtYXRpb25zIG9mIHdoYXQgIgorImNvdWxkIGJlIHVzZWZ1bCBmb3IgYnVnIHN1Ym1pdHRpbmchICBQbGVhc2UgZW1haWwgYSBidWcgcmVwb3J0IHRvIGJ1Zy0iCisicGFydGVkQGdudS5vcmcgY29udGFpbmluZyBhdCBsZWFzdCB0aGUgdmVyc2lvbiAoJXMpIGFuZCB0aGUgZm9sbG93aW5nICIKKyJtZXNzYWdlOiAgIgorbXNnc3RyICIiCisi9yBHTlUgcGFydGVkIMLZzMEgz8LOwdLV1sXOwSDP28nCy8EuICDwz9bBzNXK09TBLCDQz9vMydTFINDPIMHE0sXT1SBidWctIgorInBhcnRlZEBnbnUub3JnINPPz8Ldxc7JxSDPwiDP28nCy8UsINPPxMXS1sHdxcUg18XS08nAICglcykgySDTzMXE1cDdxcUgIgorItPPz8Ldxc7JxToiCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6Mzg0Cittc2dpZCAiQ291bGQgbm90IGRldGVjdCBmaWxlIHN5c3RlbS4iCittc2dzdHIgIu7FINXEwcXU09Egz9DSxcTFzMnU2CDGwcrMz9fVwCDTydPUxc3VLiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzozOTUKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gaXMgYmlnZ2VyIHRoYW4gaXRzIHZvbHVtZSEiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo0MDMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnQgZm9yIG9wZW5pbmcgJXMgZmlsZSBzeXN0ZW1zIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICLwz8TExdLWy8EgxMzRIMvP0MnSz9fBzsnRIMbByszP18/KINPJ09TFzdkgxMzRICVzINDPy8EgzsUg0sXBzMnaz9fBzsEuIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjQ0NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiU3VwcG9ydCBmb3IgY3JlYXRpbmcgJXMgZmlsZSBzeXN0ZW1zIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICLwz8TExdLWy8Egxs/SzcHUydLP18HOydEgxsHKzM/Xz8og08nT1MXN2SDEzNEgJXMg0M/LwSDOxSDSxcHMydrP18HOwS4iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NTA1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJTdXBwb3J0IGZvciBjaGVja2luZyAlcyBmaWxlIHN5c3RlbXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIvDPxMTF0tbLwSDEzNEg0NLP18XSy8kgxsHKzM/Xz8og08nT1MXN2SDEzNEgJXMg0M/LwSDOxSDSxcHMydrP18HOwS4iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NTcxCittc2dpZCAicmF3IGJsb2NrIGNvcHlpbmciCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo1ODIKKyMsIGZ1enp5Cittc2dpZCAiZ3Jvd2luZyBmaWxlIHN5c3RlbSIKK21zZ3N0ciAi7sXJ2tfF09TO2cog1MnQIMbByszP18/KINPJ09TFzdkuIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjYyMgorIywgZnV6enkKK21zZ2lkICJDYW4ndCBjb3B5IG9udG8gYW4gb3ZlcmxhcHBpbmcgcGFydGl0aW9uLiIKK21zZ3N0ciAi7sXXz9rNz9bOzyDTy8/QydLP18HU2CDSwdPbydLFzs7ZyiDSwdrExcwuIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjY0NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRGlyZWN0IHN1cHBvcnQgZm9yIGNvcHlpbmcgZmlsZSBzeXN0ZW1zIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQgZm9yICVzLiAgIgorIkhvd2V2ZXIsIHN1cHBvcnQgZm9yIHJlc2l6aW5nIGlzIGltcGxlbWVudGVkLiAgVGhlcmVmb3JlLCB0aGUgZmlsZSBzeXN0ZW0gIgorImNhbiBiZSBjb3BpZWQgaWYgdGhlIG5ldyBwYXJ0aXRpb24gaXMgYXQgbGVhc3QgYXMgYmlnIGFzIHRoZSBvbGQgb25lLiAgU28sICIKKyJlaXRoZXIgc2hyaW5rIHRoZSBwYXJ0aXRpb24geW91IGFyZSB0cnlpbmcgdG8gY29weSwgb3IgY29weSB0byBhIGJpZ2dlciAiCisicGFydGl0aW9uLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjY1OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiU3VwcG9ydCBmb3IgY29weWluZyAlcyBmaWxlIHN5c3RlbXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIvDPxMTF0tbLwSDEzNEgy8/QydLP18HOydEgxsHKzM/Xz8og08nT1MXN2SDEzNEgJXMg0M/LwSDOxSDSxcHMydrP18HOwS4iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6Njk2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJTdXBwb3J0IGZvciByZXNpemluZyAlcyBmaWxlIHN5c3RlbXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiIKKyLwz8TExdLWy8EgxMzRIMnazcXOxc7J0SDSwdrNxdLBIMbByszP18/KINPJ09TFzdkgxMzRICVzINDPy8EgzsUg0sXBzMnaz9fBzsEuIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzozMTUKK21zZ2lkICJjcmVhdGluZyIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0MDIKKyMsIGZ1enp5Cittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIGlzIGluIGFuIGludmFsaWQgc3RhdGUuICBQZXJoYXBzIGl0IGlzIG1vdW50ZWQ/IgorbXNnc3RyICLmwcrMz9fB0SDTydPUxc3BIMnNxcXUIM7F18XSztXAIMTM0SBGQVQg08nHzsHU1dLVLiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDEwCittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIGlzIGluIG9sZCAodW5yZXNpemVhYmxlKSBmb3JtYXQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQxNgorbXNnaWQgIkludmFsaWQgZnJlZSBibG9ja3MgY291bnQuICBSdW4gcmVpc2VyZnNjayAtLWNoZWNrIGZpcnN0LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0MzEKKyMsIGZ1enp5Cittc2dpZCAiY2hlY2tpbmciCittc2dzdHIgImNoZWNrIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0MzcKK21zZ2lkICJSZWlzZXJmcyB0cmVlIHNlZW1zIHRvIGJlIGNvcnJ1cHRlZC4gIFJ1biByZWlzZXJmc2NrIC0tY2hlY2sgZmlyc3QuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQ0OQorIywgZnV6enkKK21zZ2lkICIiCisiVGhlIHJlaXNlcmZzIGZpbGUgc3lzdGVtIHBhc3NlZCBhIGJhc2ljIGNoZWNrLiAgRm9yIGEgbW9yZSBjb21wcmVoZW5zaXZlICIKKyJjaGVjaywgcnVuIHJlaXNlcmZzY2sgLS1jaGVjay4iCittc2dzdHIgIiIKKyLmwcrMz9fB0SDTydPUxc3BIGV4dDIg0NLP28zBIM/Tzs/XztXAINDSz9fF0svVLiAg5MzRIMLPzMXFIM/C09TP0dTFzNjOz8ogIgorItDSz9fF0svJLCDJ09DPzNja1crUxSDQ0s/H0sHNzdUgZTJmc2NrLiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDc0CisjLCBmdXp6eQorbXNnaWQgIlNvcnJ5LCBjYW4ndCBtb3ZlIHRoZSBzdGFydCBvZiByZWlzZXJmcyBwYXJ0aXRpb25zIHlldC4iCittc2dzdHIgIusg08/WwczFzsnALCDQxdLFzcXdxc7JxSDOwd7BzMEg0sHaxMXMz9cgZXh0MiDQz8vBIM7F18/azc/Wzs8hIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0OTAKK21zZ2lkICJDb3VsZG4ndCByZW9wZW4gZGV2aWNlIGFic3RyYWN0aW9uIGxheWVyIGZvciByZWFkL3dyaXRlLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo1MDggbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo1NTIKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MjUwIGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NjI5CisjLCBmdXp6eQorbXNnaWQgInNocmlua2luZyIKK21zZ3N0ciAi8NLFxNXQ0sXWxMXOycUiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjUyMAorIywgZnV6enkKK21zZ2lkICJleHBhbmRpbmciCittc2dzdHIgIvDSxcTV0NLF1sTFzsnFIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo1OTIKK21zZ2lkICJDb3VsZG4ndCBjcmVhdGUgcmVpc2VyZnMgZGV2aWNlIGFic3RyYWN0aW9uIGhhbmRsZXIuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjYwNgorIywgYy1mb3JtYXQKK21zZ2lkICJEZXZpY2UgaXMgdG9vIHNtYWxsIGZvciAlbHUgYmxvY2tzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo2MTUKK21zZ2lkICJjb3B5aW5nIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjY4MgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCByZXNvbHZlIHN5bWJvbCAlcy4gIEVycm9yOiAlcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NzA0Cittc2dpZCAiR05VIFBhcnRlZCBmb3VuZCBhbiBpbnZhbGlkIGxpYnJlaXNlcmZzIGxpYnJhcnkuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjcxNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiR05VIFBhcnRlZCBoYXMgZGV0ZWN0ZWQgbGlicmVpc2VyZnMgaW50ZXJmYWNlIHZlcnNpb24gbWlzbWF0Y2guICBGb3VuZCAlZC0lIgorImQsIHJlcXVpcmVkICVkLiBSZWlzZXJGUyBzdXBwb3J0IHdpbGwgYmUgZGlzYWJsZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYWl4LmM6MTM3CisjLCBmdXp6eQorbXNnaWQgIlN1cHBvcnQgZm9yIHJlYWRpbmcgQUlYIGRpc2sgbGFiZWxzIGlzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICLwz8TExdLWy8Egxs/SzcHUydLP18HOydEgxsHKzM/Xz8og08nT1MXN2SDEzNEgJXMg0M/LwSDOxSDSxcHMydrP18HOwS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYWl4LmM6MTQ4CisjLCBmdXp6eQorbXNnaWQgIlN1cHBvcnQgZm9yIHdyaXRpbmcgQUlYIGRpc2sgbGFiZWxzIGlzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICLwz8TExdLWy8Egxs/SzcHUydLP18HOydEgxsHKzM/Xz8og08nT1MXN2SDEzNEgJXMg0M/LwSDOxSDSxcHMydrP18HOwS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYWl4LmM6MTYxCisjLCBmdXp6eQorbXNnaWQgIiIKKyJTdXBwb3J0IGZvciBhZGRpbmcgcGFydGl0aW9ucyB0byBBSVggZGlzayBsYWJlbHMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIvDPxMTF0tbLwSDGz9LNwdTJ0s/Xwc7J0SDGwcrMz9fPyiDTydPUxc3ZIMTM0SAlcyDQz8vBIM7FINLFwczJ2s/Xwc7BLiIKKworIzogbGlicGFydGVkL2xhYmVscy9haXguYzoxNzEKKyMsIGZ1enp5Cittc2dpZCAiIgorIlN1cHBvcnQgZm9yIGR1cGxpY2F0aW5nIHBhcnRpdGlvbnMgaW4gQUlYIGRpc2sgbGFiZWxzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICLwz8TExdLWy8Egxs/SzcHUydLP18HOydEgxsHKzM/Xz8og08nT1MXN2SDEzNEgJXMg0M/LwSDOxSDSxcHMydrP18HOwS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYWl4LmM6MTg5CisjLCBmdXp6eQorbXNnaWQgIiIKKyJTdXBwb3J0IGZvciBzZXR0aW5nIHN5c3RlbSB0eXBlIG9mIHBhcnRpdGlvbnMgaW4gQUlYIGRpc2sgbGFiZWxzIGlzIG5vdCAiCisiaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAi8M/ExMXS1svBIMbP0s3B1MnSz9fBzsnRIMbByszP18/KINPJ09TFzdkgxMzRICVzINDPy8EgzsUg0sXBzMnaz9fBzsEuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2FpeC5jOjE5OQorIywgZnV6enkKK21zZ2lkICJTdXBwb3J0IGZvciBzZXR0aW5nIGZsYWdzIGluIEFJWCBkaXNrIGxhYmVscyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAi8M/ExMXS1svBIMbP0s3B1MnSz9fBzsnRIMbByszP18/KINPJ09TFzdkgxMzRICVzINDPy8EgzsUg0sXBzMnaz9fBzsEuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2JzZC5jOjUwMSBsaWJwYXJ0ZWQvbGFiZWxzL2Rhc2QuYzo3NTUKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZG9zLmM6MTk3NCBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjc3MAorIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzoxNDQ4IGxpYnBhcnRlZC9sYWJlbHMvbG9vcC5jOjI0OAorIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoxNDA4IGxpYnBhcnRlZC9sYWJlbHMvcGM5OC5jOjc1OQorIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzoxMDQxIGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6NzA1Cittc2dpZCAiVW5hYmxlIHRvIHNhdGlzZnkgYWxsIGNvbnN0cmFpbnRzIG9uIHRoZSBwYXJ0aXRpb24uIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYnNkLmM6NTI2CisjLCBmdXp6eQorbXNnaWQgIlVuYWJsZSB0byBhbGxvY2F0ZSBhIGJzZCBkaXNrbGFiZWwgc2xvdC4iCittc2dzdHIgIu7FINXEwcXU09Egz9TL0tnU2CAlcyAtIM7F0sHT0M/azsHOzsHRIM3F1MvBIMTJ08vBLiIKKworIzogbGlicGFydGVkL2xhYmVscy9kYXNkLmM6MTY2CisjLCBmdXp6eQorbXNnaWQgIlVuYWJsZSB0byBkZXRlcm1pbmUgdGhlIGJsb2NrIHNpemUgb2YgdGhpcyBkYXNkIgorbXNnc3RyICLuxSDVxMHF1NPRIM/Q0sXExczJ1Ngg0sHazcXSICVzICglcykiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZGFzZC5jOjc4MQorIywgZnV6enkKK21zZ2lkICJVbmFibGUgdG8gYWxsb2NhdGUgYSBkYXNkIGRpc2tsYWJlbCBzbG90IgorbXNnc3RyICLuxSDVxMHF1NPRIM/Uy9LZ1NggJXMgLSDOxdLB09DP2s7Bzs7B0SDNxdTLwSDEydPLwS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZG9zLmM6ODI3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHBhcnRpdGlvbiB0YWJsZSBvbiAlcyAtLSB3cm9uZyBzaWduYXR1cmUgJXguIgorbXNnc3RyICLuxdfF0s7B0SDUwcLMycPBINLB2sTFzM/XIM7BICVzIC0gzsXQ0sHXyczYzsHRINPJx87B1NXSwSAleCIKKworIzogbGlicGFydGVkL2xhYmVscy9kb3MuYzo4NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBwYXJ0aXRpb24gdGFibGUgLSByZWN1cnNpdmUgcGFydGl0aW9uIG9uICVzLiIKK21zZ3N0ciAi7sXXxdLOwdEg1MHCzMnDwSDSwdrExczP1yAtINLFy9XS08nXztnKINLB2sTFzCDOwSAlcy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZG9zLmM6MTMxOAorIywgZnV6enkKK21zZ2lkICJFeHRlbmRlZCBwYXJ0aXRpb25zIGNhbm5vdCBiZSBoaWRkZW4gb24gbXNkb3MgZGlzayBsYWJlbHMuIgorbXNnc3RyICLywdrExcwgZXh0MiDOxSDNz9bF1CDC2dTYINPL0tnULiIKKworIzogbGlicGFydGVkL2xhYmVscy9kb3MuYzoxOTU4Cittc2dpZCAiUGFydGVkIGNhbid0IHJlc2l6ZSBwYXJ0aXRpb25zIG1hbmFnZWQgYnkgV2luZG93cyBEeW5hbWljIERpc2suIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6MTkwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyBoYXMgbm8gZXh0ZW5kZWQgcGFydGl0aW9uICh2b2x1bWUgaGVhZGVyIHBhcnRpdGlvbikuIgorbXNnc3RyICIiCisi7sXXz9rNz9bOzyDJ2s3FzsnU2CDSwdrNxdIg0sHT28nSxc7Oz8fPINLB2sTFzMEg1MHLLCDe1M/C2SDJ08vMwN7J1NggIgorIszPx8nexdPLycog0sHaxMXMLiIKKworIzogbGlicGFydGVkL2xhYmVscy9kdmguYzozMTMKK21zZ2lkICJDaGVja3N1bSBpcyB3cm9uZywgaW5kaWNhdGluZyB0aGUgcGFydGl0aW9uIHRhYmxlIGlzIGNvcnJ1cHQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6NjE2CisjLCBmdXp6eQorbXNnaWQgIk9ubHkgcHJpbWFyeSBwYXJ0aXRpb25zIGNhbiBiZSByb290IHBhcnRpdGlvbnMuIgorbXNnc3RyICLuxdfP2s3P1s7PIMTPwsHXydTYIM/Tzs/Xzs/KINLB2sTFzCDXztXU0tgg0sHT28nSxc7Oz8fPLiIKKworIzogbGlicGFydGVkL2xhYmVscy9kdmguYzo2MzAKKyMsIGZ1enp5Cittc2dpZCAiT25seSBwcmltYXJ5IHBhcnRpdGlvbnMgY2FuIGJlIHN3YXAgcGFydGl0aW9ucy4iCittc2dzdHIgIu7F18/azc/Wzs8gxM/CwdfJ1Nggz9POz9fOz8og0sHaxMXMINfO1dTS2CDSwdPbydLFzs7Px88uIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjY0NAorbXNnaWQgIk9ubHkgbG9naWNhbCBwYXJ0aXRpb25zIGNhbiBiZSBhIGJvb3QgZmlsZS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9kdmguYzo3MjEKK21zZ2lkICJPbmx5IGxvZ2ljYWwgcGFydGl0aW9ucyAoYm9vdCBmaWxlcykgaGF2ZSBhIG5hbWUuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6ODEyCisjLCBmdXp6eQorbXNnaWQgIlRvbyBtYW55IHByaW1hcnkgcGFydGl0aW9ucyIKK21zZ3N0ciAi88zJ28vPzSDNzs/HzyDQzM/Iycgg09TSwc7Jwy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIG9wZW4gZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHNlZWsgZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHJlYWQgZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMTMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyB3cml0ZSBlcnJvclxuIgorIiVzXG4iCittc2dzdHIgIiVzINfPINfSxc3RINrB0MnTySDOwSAlcyIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjExNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgSU9DVEwgZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIEFQSSB2ZXJzaW9uIG1pc21hdGNoXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBVbnN1cHBvcnRlZCBkaXNrIHR5cGVcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFVuc3VwcG9ydGVkIGRpc2sgZm9ybWF0XG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTMwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBEaXNrIGluIHVzZVxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgQ29uZmlnIGZpbGUgc3ludGF4IGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBWb2x1bWUgbGFiZWwgaXMgY29ycnVwdGVkLlxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjE0MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgYSBkYXRhIHNldCBuYW1lIGlzIGNvcnJ1cHRlZC5cbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHNwYWNlIGFsbG9jYXRpb25cbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIGRldmljZSB2ZXJpZmljYXRpb24gZmFpbGVkXG4iCisiVGhlIHNwZWNpZmllZCBkZXZpY2UgaXMgbm90IGEgdmFsaWQgREFTRCBkZXZpY2VcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBGYXRhbCBlcnJvclxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzo0NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIGNvbnRhaW5zIEdQVCBzaWduYXR1cmVzLCBpbmRpY2F0aW5nIHRoYXQgaXQgaGFzIGEgR1BUIHRhYmxlLiAgSG93ZXZlciwgaXQgIgorImRvZXMgbm90IGhhdmUgYSB2YWxpZCBmYWtlIG1zZG9zIHBhcnRpdGlvbiB0YWJsZSwgYXMgaXQgc2hvdWxkLiAgUGVyaGFwcyBpdCAiCisid2FzIGNvcnJ1cHRlZCAtLSBwb3NzaWJseSBieSBhIHByb2dyYW0gdGhhdCBkb2Vzbid0IHVuZGVyc3RhbmQgR1BUIHBhcnRpdGlvbiAiCisidGFibGVzLiAgT3IgcGVyaGFwcyB5b3UgZGVsZXRlZCB0aGUgR1BUIHRhYmxlLCBhbmQgYXJlIG5vdyB1c2luZyBhbiBtc2RvcyAiCisicGFydGl0aW9uIHRhYmxlLiAgSXMgdGhpcyBhIEdQVCBwYXJ0aXRpb24gdGFibGU/IgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6NjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9ybWF0IG9mIHRoZSBHUFQgcGFydGl0aW9uIHRhYmxlIGlzIHZlcnNpb24gJXgsIHdoaWNoIGlzIG5ld2VyIHRoYW4gIgorIndoYXQgUGFydGVkIGNhbiByZWNvZ25pc2UuICBQbGVhc2UgdGVsbCB1cyEgIGJ1Zy1wYXJ0ZWRAZ251Lm9yZyIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm90IGFsbCBvZiB0aGUgc3BhY2UgYXZhaWxhYmxlIHRvICVzIGFwcGVhcnMgdG8gYmUgdXNlZCwgeW91IGNhbiBmaXggdGhlIEdQVCAiCisidG8gdXNlIGFsbCBvZiB0aGUgc3BhY2UgKGFuIGV4dHJhICVsbHUgYmxvY2tzKSBvciBjb250aW51ZSB3aXRoIHRoZSBjdXJyZW50ICIKKyJzZXR0aW5nPyAiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzo4MjcKK21zZ2lkICIiCisiVGhlIGJhY2t1cCBHUFQgdGFibGUgaXMgbm90IGF0IHRoZSBlbmQgb2YgdGhlIGRpc2ssIGFzIGl0IHNob3VsZCBiZS4gIFRoaXMgIgorIm1pZ2h0IG1lYW4gdGhhdCBhbm90aGVyIG9wZXJhdGluZyBzeXN0ZW0gYmVsaWV2ZXMgdGhlIGRpc2sgaXMgc21hbGxlci4gIEZpeCwgIgorImJ5IG1vdmluZyB0aGUgYmFja3VwIHRvIHRoZSBlbmQgKGFuZCByZW1vdmluZyB0aGUgb2xkIGJhY2t1cCk/IgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6ODYyCittc2dpZCAiIgorIlRoZSBwcmltYXJ5IEdQVCB0YWJsZSBpcyBjb3JydXB0LCBidXQgdGhlIGJhY2t1cCBhcHBlYXJzIE9LLCBzbyB0aGF0IHdpbGwgYmUgIgorInVzZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6ODcwCittc2dpZCAiIgorIkJvdGggdGhlIHByaW1hcnkgYW5kIGJhY2t1cCBHUFQgdGFibGVzIGFyZSBjb3JydXB0LiAgVHJ5IG1ha2luZyBhIGZyZXNoICIKKyJ0YWJsZSwgYW5kIHVzaW5nIFBhcnRlZCdzIHJlc2N1ZSBmZWF0dXJlIHRvIHJlY292ZXIgcGFydGl0aW9ucy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoxODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBzaWduYXR1cmUgJXggZm9yIE1hYyBkaXNrIGxhYmVscy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoyMjYKK21zZ2lkICJQYXJ0aXRpb24gbWFwIGhhcyBubyBwYXJ0aXRpb24gbWFwIGVudHJ5ISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyB0b28gc21hbGwgZm9yIGEgTWFjIGRpc2sgbGFiZWwhIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIlBhcnRpdGlvbiAlZCBoYXMgYW4gaW52YWxpZCBzaWduYXR1cmUgJXguIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIlBhcnRpdGlvbiAlZCBoYXMgYW4gaW52YWxpZCBsZW5ndGggb2YgMCBieXRlcyEiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo1ODAKKyMsIGZ1enp5Cittc2dpZCAiVGhlIGRhdGEgcmVnaW9uIGRvZXNuJ3Qgc3RhcnQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBwYXJ0aXRpb24uIgorbXNnc3RyICLuz9fZyiDSwdrExcwg0MXSxcvS2dfBxdTT0SDTIMTS1cfJzSDSwdrExczPzS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NTk3CisjLCBmdXp6eQorbXNnaWQgIlRoZSBib290IHJlZ2lvbiBkb2Vzbid0IHN0YXJ0IGF0IHRoZSBzdGFydCBvZiB0aGUgcGFydGl0aW9uLiIKK21zZ3N0ciAi7s/X2cog0sHaxMXMINDF0sXL0tnXwcXU09Eg0yDE0tXHyc0g0sHaxMXMz80uIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjYxMQorIywgZnV6enkKK21zZ2lkICJUaGUgcGFydGl0aW9uJ3MgYm9vdCByZWdpb24gZG9lc24ndCBvY2N1cHkgdGhlIGVudGlyZSBwYXJ0aXRpb24uIgorbXNnc3RyICLuz9fZyiDSwdrExcwg0MXSxcvS2dfBxdTT0SDTIMTS1cfJzSDSwdrExczPzS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NjIyCisjLCBmdXp6eQorbXNnaWQgIlRoZSBwYXJ0aXRpb24ncyBkYXRhIHJlZ2lvbiBkb2Vzbid0IG9jY3VweSB0aGUgZW50aXJlIHBhcnRpdGlvbi4iCittc2dzdHIgIu7P19nKINLB2sTFzCDQxdLFy9LZ18HF1NPRINMgxNLVx8nNINLB2sTFzM/NLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo2NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldlaXJkIGJsb2NrIHNpemUgb24gZGV2aWNlIGRlc2NyaXB0b3I6ICVkIGJ5dGVzIGlzIG5vdCBkaXZpc2libGUgYnkgNTEyLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjY4OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGRyaXZlciBkZXNjcmlwdG9yIHNheXMgdGhlIHBoeXNpY2FsIGJsb2NrIHNpemUgaXMgJWQgYnl0ZXMsIGJ1dCBMaW51eCAiCisic2F5cyBpdCBpcyAlZCBieXRlcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo3MzYKK21zZ2lkICJObyB2YWxpZCBwYXJ0aXRpb24gbWFwIGZvdW5kLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjc5NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ29uZmxpY3RpbmcgcGFydGl0aW9uIG1hcCBlbnRyeSBzaXplcyEgIEVudHJ5IDEgc2F5cyBpdCBpcyAlZCwgYnV0IGVudHJ5ICVkICIKKyJzYXlzIGl0IGlzICVkISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjgyMgorbXNnaWQgIldlaXJkISAgVGhlcmUgYXJlIDIgcGFydGl0aW9ucyBtYXAgZW50cmllcyEiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoxMzQ3Cittc2dpZCAiIgorIkNoYW5naW5nIHRoZSBuYW1lIG9mIGEgcm9vdCBvciBzd2FwIHBhcnRpdGlvbiB3aWxsIHByZXZlbnQgTGludXggZnJvbSAiCisicmVjb2duaXNpbmcgaXQgYXMgc3VjaC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoxNDQzCisjLCBmdXp6eQorbXNnaWQgIkNhbid0IGFkZCBhbm90aGVyIHBhcnRpdGlvbiAtLSB0aGUgcGFydGl0aW9uIG1hcCBpcyB0b28gc21hbGwhIgorbXNnc3RyICIiCisi7sUg1cTBxdTT0SDEz8LB18nU2CDF3cUgz8TJziDP087P187PyiDSwdrExcwsINPV3cXT1NfVxdQg0NLFxMXMINcgNCDP087P187ZyCAiCisi0sHaxMXMwS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcGM5OC5jOjM1NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBwYXJ0aXRpb24gdGFibGUgb24gJXMuIgorbXNnc3RyICLuxdfF0s7B0SDUwcLMycPBINLB2sTFzM/XIC0g0sXL1dLTydfO2cog0sHaxMXMIM7BICVzLiIKKworIzogbGlicGFydGVkL2xhYmVscy9wYzk4LmM6NDA2IGxpYnBhcnRlZC9sYWJlbHMvcGM5OC5jOjQ4NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGFydGl0aW9uICVkIGlzbid0IGFsaWduZWQgdG8gY3lsaW5kZXIgYm91bmRhcmllcy4gIFRoaXMgaXMgc3RpbGwgIgorInVuc3VwcG9ydGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3BjOTguYzo3OTEKKyMsIGZ1enp5Cittc2dpZCAiQ2FuJ3QgYWRkIGFub3RoZXIgcGFydGl0aW9uLiIKK21zZ3N0ciAi7sXXz9rNz9bOzyDTy8/QydLP18HU2CDSwdPbydLFzs7ZyiDSwdrExcwuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjE2MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEJhZCBjaGVja3N1bSBvbiBibG9jayAlbGx1IG9mIHR5cGUgJXMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6NDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRGlkbid0IGZpbmQgcmRiIGJsb2NrLCBzaG91bGQgbmV2ZXIgaGFwcGVuLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjU4MQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBMb29wIGRldGVjdGVkIGF0IGJsb2NrICVkLiIKK21zZ3N0ciAiJXMgzsUg0dfM0cXU09EgwszP3s7ZzSDV09TSz8rT1NfPzS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6NjAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogVGhlICVzIGxpc3Qgc2VlbXMgYmFkIGF0IGJsb2NrICVzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjY4OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBsaXN0IGJhZCBibG9ja3MuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6Njk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGxpc3QgcGFydGl0aW9uIGJsb2Nrcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo3MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gbGlzdCBmaWxlIHN5c3RlbSBibG9ja3MuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6NzEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGxpc3QgYm9vdCBibG9ja3MuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6NzQwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gd3JpdGUgcGFydGl0aW9uIGJsb2NrIGF0ICVkLiIKK21zZ3N0ciAi7sUg1cTBxdTT0SDP0NLFxMXMydTYLCDR18zRxdTT0SDMySDSwdrExcwg2sHNz87UydLP18HOztnNLiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzoxMDY5CisjLCBmdXp6eQorbXNnaWQgIlVuYWJsZSB0byBhbGxvY2F0ZSBhIHBhcnRpdGlvbiBudW1iZXIuIgorbXNnc3RyICLuxSDVxMHF1NPRIM/Q0sXExczJ1NgsINHXzNHF1NPRIMzJINLB2sTFzCDawc3PztTJ0s/Xwc7O2c0uIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3N1bi5jOjE0NQorbXNnaWQgIkNvcnJ1cHRlZCBTdW4gZGlzayBsYWJlbCBkZXRlY3RlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9zdW4uYzoyNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBkaXNrIENIUyBnZW9tZXRyeSAoJWQsJWQsJWQpIHJlcG9ydGVkIGJ5IHRoZSBvcGVyYXRpbmcgc3lzdGVtIGRvZXMgbm90ICIKKyJtYXRjaCB0aGUgZ2VvbWV0cnkgc3RvcmVkIG9uIHRoZSBkaXNrIGxhYmVsICglZCwlZCwlZCkuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6Mjg4CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBkaXNrIGxhYmVsIGRlc2NyaWJlcyBhIGRpc2sgYmlnZ2VyIHRoYW4gJXMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6NDQyCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBkaXNrIGhhcyAlZCBjeWxpbmRlcnMsIHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbWF4aW11bSBvZiA2NTUzNi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9zdW4uYzo3MzcKK21zZ2lkICIiCisiVGhlIFdob2xlIERpc2sgcGFydGl0aW9uIGlzIHRoZSBvbmx5IGF2YWlsYWJsZSBvbmUgbGVmdC4gIEdlbmVyYWxseSwgaXQgaXMgIgorIm5vdCBhIGdvb2QgaWRlYSB0byBvdmVyd3JpdGUgdGhpcyBwYXJ0aXRpb24gd2l0aCBhIHJlYWwgb25lLiAgU29sYXJpcyBtYXkgIgorIm5vdCBiZSBhYmxlIHRvIGJvb3Qgd2l0aG91dCBpdCwgYW5kIFNJTE8gKHRoZSBzcGFyYyBib290IGxvYWRlcikgYXBwcmVjaWF0ZXMgIgorIml0IGFzIHdlbGwuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6NzUyCittc2dpZCAiU3VuIGRpc2sgbGFiZWwgaXMgZnVsbC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6MTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBvcGVuaW5nIGRldmljZSAnJXMnIGZhaWxlZC5cbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjE2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgc2Vla2luZyBkZXZpY2UgJyVzJyBmYWlsZWQuXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzoxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHdyaXRpbmcgdG8gZGV2aWNlICclcycgZmFpbGVkLFxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6MTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyByZWFkaW5nIGZyb20gZGV2aWNlICclcycgZmFpbGVkLlxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6MTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhdGFsIGVycm9yXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDE4Cittc2dpZCAiQ291bGQgbm90IHJlYWQgVlRPQyBsYWJlbHMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQyNAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIFZUT0MgRk1UMSBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0MzEKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBWVE9DIEZNVDQgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDM4Cittc2dpZCAiQ291bGQgbm90IHJlYWQgVlRPQyBGTVQ1IERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQ0NQorbXNnaWQgIkNvdWxkIG5vdCByZWFkIFZUT0MgRk1UNyBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0NjIKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgVlRPQyBsYWJlbHMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQ2OAorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBWVE9DIEZNVDEgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDc1Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIFZUT0MgRk1UNCBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0ODIKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgVlRPQyBGTVQ1IERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQ4OQorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBWVE9DIEZNVDcgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xpYnBhcnRlZC5jOjI5NiBsaWJwYXJ0ZWQvbGlicGFydGVkLmM6MzE2Cittc2dpZCAiT3V0IG9mIG1lbW9yeS4iCittc2dzdHIgIu7FIMjXwdTBxdQg0MHN0dTJLiIKKworIzogbGlicGFydGVkL3VuaXQuYzoxMzkKK21zZ2lkICJDYW5ub3QgZ2V0IHVuaXQgc2l6ZSBmb3Igc3BlY2lhbCB1bml0ICdDT01QQUNUJy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL3VuaXQuYzozODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiXCIlc1wiIGhhcyBpbnZhbGlkIHN5bnRheCBmb3IgbG9jYXRpb25zLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvdW5pdC5jOjM5NAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgbWF4aW11bSBoZWFkIHZhbHVlIGlzICVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvdW5pdC5jOjQwMQorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgbWF4aW11bSBzZWN0b3IgdmFsdWUgaXMgJWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC91bml0LmM6NDEzIGxpYnBhcnRlZC91bml0LmM6NTQ1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJUaGUgbG9jYXRpb24gJXMgaXMgb3V0c2lkZSBvZiB0aGUgZGV2aWNlICVzLiIKK21zZ3N0ciAi7sXXz9rNz9bOzyDTz9rEwdTYINLB2sTFzCDXzsUg1dPU0s/K09TXwS4iCisKKyM6IGxpYnBhcnRlZC91bml0LmM6NTI3Cittc2dpZCAiSW52YWxpZCBudW1iZXIuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hZmZzLmM6NjMgbGlicGFydGVkL2ZzL2FtaWdhL2FwZnMuYzo1NgorIzogbGlicGFydGVkL2ZzL2FtaWdhL2FzZnMuYzo3MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gYWxsb2NhdGUgcGFydGl0aW9uIGJsb2NrXG4iCittc2dzdHIgIu7FINXEwcXU09Egz9DSxcTFzMnU2Cwg0dfM0cXU09EgzMkg0sHaxMXMINrBzc/O1MnSz9fBzs7ZzS4iCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hZmZzLmM6NzggbGlicGFydGVkL2ZzL2FtaWdhL2FwZnMuYzo3MAorIzogbGlicGFydGVkL2ZzL2FtaWdhL2FzZnMuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBhbGxvY2F0ZSBibG9ja1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hZmZzLmM6ODMgbGlicGFydGVkL2ZzL2FtaWdhL2FwZnMuYzo3NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBDb3VsZG4ndCByZWFkIGJvb3QgYmxvY2sgJWxsdVxuIgorbXNnc3RyICIlcyDOxSDR18zRxdTT0SDCzM/eztnNINXT1NLPytPU18/NLiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FmZnMuYzo5OSBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXBmcy5jOjg2CisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXNmcy5jOjkyIGxpYnBhcnRlZC9mcy9hbWlnYS9hc2ZzLmM6MTA2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyA6IENvdWxkbid0IHJlYWQgcm9vdCBibG9jayAlbGx1XG4iCittc2dzdHIgIiVzIM7FINHXzNHF1NPRIMLMz97O2c0g1dPU0s/K09TXz80uIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzo3MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBhbGxvY2F0ZSBpZCBsaXN0IGVsZW1lbnRcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBDb3VsZG4ndCByZWFkIGJsb2NrICVsbHVcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzoyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBCYWQgY2hlY2tzdW0gb24gYmxvY2sgJWxsdSBvZiB0eXBlICVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6MjEyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyA6IENvdWxkbid0IHdyaXRlIGJsb2NrICVkXG4iCittc2dzdHIgIiVzIM7FINHXzNHF1NPRIMLMz97O2c0g1dPU0s/K09TXz80uIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzoyNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gYWxsb2NhdGUgZGlza19zcGVjaWZpYyByZGIgYmxvY2tcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzoyODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBEaWRuJ3QgZmluZCByZGIgYmxvY2ssIHNob3VsZCBuZXZlciBoYXBwZW5cbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzozMTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIHJlYWQgcGFydGl0aW9uIGJsb2NrICVsbHVcbiIKK21zZ3N0ciAi7sUg1cTBxdTT0SDP0NLFxMXMydTYLCDR18zRxdTT0SDMySDSwdrExcwg2sHNz87UydLP18HOztnNLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjg3IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzoxMTIKK21zZ2lkICJJbmNvbnNpc3RlbnQgZ3JvdXAgZGVzY3JpcHRvcnMhIgorbXNnc3RyICLw0s/UydfP0sXeydfB0SDH0tXQ0MEgxMXTy9LJ0NTP0s/XISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjkxIGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzoxMTYKKyMsIGZ1enp5Cittc2dpZCAiRmlsZSBzeXN0ZW0gZnVsbCEiCittc2dzdHIgIubByszP18HRINPJ09TFzcEg0M/MzsEhIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6Njg2CisjLCBmdXp6eQorbXNnaWQgIkludmFsaWQgc3VwZXJibG9jay4gIEFyZSB5b3Ugc3VyZSB0aGlzIGlzIGFuIGV4dDIgZmlsZSBzeXN0ZW0/IgorbXNnc3RyICLuxdfF0s7ZyiDT1dDF0sLMz8suICD32SDV18XSxc7ZLCDe1M8g3NTPIMbByszP18HRINPJ09TFzcEgZXh0Mj8iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo3MDAgbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo2NTgKKyMsIGZ1enp5Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGVycm9ycyEgIFlvdSBzaG91bGQgcnVuIGUyZnNjay4iCittc2dzdHIgIubByszP18HRINPJ09TFzcEg08/ExdLWydQgz9vJwsvJISAg+sHQ1dPUydTFINPOwd7BzMEgZTJmc2NrISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjcxMQorbXNnaWQgIiIKKyJGaWxlIHN5c3RlbSB3YXMgbm90IGNsZWFubHkgdW5tb3VudGVkISAgWW91IHNob3VsZCBydW4gZTJmc2NrLiAgTW9kaWZ5aW5nIGFuICIKKyJ1bmNsZWFuIGZpbGUgc3lzdGVtIGNvdWxkIGNhdXNlIHNldmVyZSBjb3JydXB0aW9uLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6NzMxCisjLCBmdXp6eQorbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyBhbiBpbmNvbXBhdGlibGUgZmVhdHVyZSBlbmFibGVkLiIKK21zZ3N0ciAi5sHKzM/XwdEg08nT1MXNwSDJzcXF1CDXy8zA3sXOzs/FIM7F08/XzcXT1MnNz8Ug09fPytPU188iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo3NDIKK21zZ2lkICJFcnJvciBhbGxvY2F0aW5nIGJ1ZmZlciBjYWNoZS4iCittc2dzdHIgIu/bycLLwSDSwdrNxd3FzsnRIMLVxsXSwSDL3NvBLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9pbm9kZV9yZWxvY2F0b3IuYzoxMTQKKyMsIGZ1enp5Cittc2dpZCAiIgorIkZvdW5kIGFuIGlub2RlIHdpdGggYSBpbmNvcnJlY3QgbGluayBjb3VudC4gIEJldHRlciBnbyBydW4gZTJmc2NrIGZpcnN0ISIKK21zZ3N0ciAiIgorIu7BysTFzsEgaW5vZGUg0yDOxdDSwdfJzNjO2c0g3snTzM/NINPT2czPyy4gIOzV3tvFINrB0NXT1MnUxSDTzsHewczBIGUyZnNjay4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfaW5vZGVfcmVsb2NhdG9yLmM6NDg3Cittc2dpZCAiTm90IGVub3VnaCBmcmVlIGlub2RlcyEiCittc2dzdHIgIu7FxM/T1MHUz97OzyDT18/Cz8TO2cggaW5vZGUhIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjIyMworIywgZnV6enkKK21zZ2lkICJGaWxlIHN5c3RlbSBpcyB0b28gZnVsbCB0byByZW1vdmUgYSBncm91cCEiCittc2dzdHIgIubByszP18HRINPJ09TFzcEg08zJ28vPzSDawdDPzM7FzsEsIN7Uz8LZINXEwczJ1Nggx9LV0NDVISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzoyMzIKKyMsIGZ1enp5Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIHRvbyBtYW55IGFsbG9jYXRlZCBpbm9kZXMgdG8gcmVtb3ZlIGEgZ3JvdXAhIgorbXNnc3RyICIiCisi5sHKzM/XwdEg08nT1MXNwSDJzcXF1CDTzMnby8/NIM3Oz8fPINfZxMXMxc7O2cggaW5vZGUsIN7Uz8LZINXEwczJ1Nggx9LV0NDVISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo0OTEKK21zZ2lkICJhZGRpbmcgZ3JvdXBzIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NTI4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGZpbGUgc3lzdGVtIGlzIHRvbyBmdWxsIHRvIHJlc2l6ZSBpdCB0byAlaSBibG9ja3MuICBTb3JyeS4iCittc2dzdHIgIiIKKyLrINPP1sHMxc7JwCwgxsHKzM/XwdEg08nT1MXNwSDTzMnby8/NINrB0M/MzsXOwSwg3tTPwtkgydrNxc7J1NggxcUg0sHazcXSIMTPICIKKyIlaSDCzM/Lz9cuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjUzOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgZmlsZSBzeXN0ZW0gaGFzIHRvbyBtYW55IG9jY3VwaWVkIGlub2RlcyB0byByZXNpemUgaXQgdG8gJWkgYmxvY2tzLiAgIgorIlNvcnJ5LiIKK21zZ3N0ciAiIgorIusg08/WwczFzsnALCDXwdvBIMbByszP18HRINPJ09TFzcEgyc3FxdQg08zJ28vPzSDNzs/HzyDawc7R1NnIIGlub2RlLCDe1M/C2SAiCisiydrNxc7J1NggxcUg0sHazcXSIMTPICVpIMLMz8vP1y4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NjY2CisjLCBmdXp6eQorbXNnaWQgIkZpbGUgc3lzdGVtIHdhcyBub3QgY2xlYW5seSB1bm1vdW50ZWQhICBZb3Ugc2hvdWxkIHJ1biBlMmZzY2suIgorbXNnc3RyICIiCisi5sHKzM/XwdEg08nT1MXNwSDOxSDC2czBINDSwdfJzNjOzyDSwdrNz87UydLP18HOwSEgIPrB0NXT1MnUxSDTzsHewczBIGUyZnNjayEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6Njc1Cittc2dpZCAiIgorIlRoZSBmaWxlIHN5c3RlbSBoYXMgdGhlICdkaXJfaW5kZXgnIGZlYXR1cmUgZW5hYmxlZC4gIFBhcnRlZCBjYW4gb25seSByZXNpemUgIgorInRoZSBmaWxlIHN5c3RlbSBpZiBpdCBkaXNhYmxlcyB0aGlzIGZlYXR1cmUuICBZb3UgY2FuIGVuYWJsZSBpdCBsYXRlciBieSAiCisicnVubmluZyAndHVuZTJmcyAtTyBkaXJfaW5kZXggREVWSUNFJyBhbmQgdGhlbiAnZTJmc2NrIC1mRCBERVZJQ0UnLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjY5MQorbXNnaWQgIiIKKyJBIHJlc2l6ZSBvcGVyYXRpb24gb24gdGhpcyBmaWxlIHN5c3RlbSB3aWxsIHVzZSBFWFBFUklNRU5UQUwgY29kZVxuIgorInRoYXQgTUFZIENPUlJVUFQgaXQgKGFsdGhvdWdoIG5vIG9uZSBoYXMgcmVwb3J0ZWQgYW55IHN1Y2ggZGFtYWdlIHlldCkuXG4iCisiWW91IHNob3VsZCBhdCBsZWFzdCBiYWNrdXAgeW91ciBkYXRhIGZpcnN0LCBhbmQgcnVuICdlMmZzY2sgLWYnIGFmdGVyd2FyZHMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfYmxvY2tfcmVsb2NhdG9yLmM6MTk4CisjLCBmdXp6eQorbXNnaWQgIkNyb3NzLWxpbmtlZCBibG9ja3MgZm91bmQhICBCZXR0ZXIgZ28gcnVuIGUyZnNjayBmaXJzdCEiCittc2dzdHIgIiIKKyLuwcrExc7ZIMLMz8vJINMg0MXSxcvSxdPUztnNySDT09nMy8HNySEgzNXe28Ug087B3sHMwSDawdDV09TJ1MUgZTJmc2NrISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9ibG9ja19yZWxvY2F0b3IuYzo1MzcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrICVpIGhhcyBubyByZWZlcmVuY2U/ICBXZWlyZC4iCittc2dzdHIgIuLMz8sgJWkgzsUgyc3FxdQg09PZzMvJPyAg89TSwc7OzyIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9ibG9ja19yZWxvY2F0b3IuYzo3MzcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrICVpIHNob3VsZG4ndCBoYXZlIGJlZW4gbWFya2VkICglZCwgJWQpISIKK21zZ3N0ciAi4szPyyAlaSDOxSDEz8zWxc4gwtnU2CDQz83F3sXOztnNISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvaW50ZXJmYWNlLmM6MTg2CisjLCBmdXp6eQorbXNnaWQgIiIKKyJUaGUgZXh0MiBmaWxlIHN5c3RlbSBwYXNzZWQgYSBiYXNpYyBjaGVjay4gIEZvciBhIG1vcmUgY29tcHJlaGVuc2l2ZSBjaGVjaywgIgorInVzZSB0aGUgZTJmc2NrIHByb2dyYW0uIgorbXNnc3RyICIiCisi5sHKzM/XwdEg08nT1MXNwSBleHQyINDSz9vMwSDP087P187VwCDQ0s/XxdLL1S4gIOTM0SDCz8zFxSDPwtPUz9HUxczYzs/KICIKKyLQ0s/XxdLLySwgydPQz8zY2tXK1MUg0NLPx9LBzc3VIGUyZnNjay4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2ludGVyZmFjZS5jOjIwMworbXNnaWQgIlNvcnJ5LCBjYW4ndCBtb3ZlIHRoZSBzdGFydCBvZiBleHQyIHBhcnRpdGlvbnMgeWV0ISIKK21zZ3N0ciAi6yDTz9bBzMXOycAsINDF0sXNxd3FzsnFIM7B3sHMwSDSwdrExczP1yBleHQyINDPy8EgzsXXz9rNz9bOzyEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfYnVmZmVyLmM6ODIKK21zZ2lkICJDb3VsZG4ndCBmbHVzaCBidWZmZXIgY2FjaGUhIgorbXNnc3RyICLuxSDVxMHF1NPRIM/eydPUydTYIMLVxsXSIMvc28EhIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX21rZnMuYzoxNjIKK21zZ2lkICJ3cml0aW5nIHBlci1ncm91cCBtZXRhZGF0YSIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX21rZnMuYzo1NjQKK21zZ2lkICJGaWxlIHN5c3RlbSB0b28gc21hbGwgZm9yIGV4dDIuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY2FsYy5jOjEzNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBuZWVkICVzIG9mIGZyZWUgZGlzayBzcGFjZSB0byBzaHJpbmsgdGhpcyBwYXJ0aXRpb24gdG8gdGhpcyBzaXplLiAgIgorIkN1cnJlbnRseSwgb25seSAlcyBpcyBmcmVlLiIKK21zZ3N0ciAiIgorIvfBzSDU0sXC1cXU09EgJWTt4iDT18/Cz8TOz8fPINDSz9PU0sHO09TXwSwg3tTPwtkg1c3FztjbydTYIMTBzs7ZyiDSwdrExcwgxM8gIgorItTBy8/HzyDSwdrNxdLBICjVINfB0yDTxcrewdMg09fPws/Ezs8g1M/M2MvPICVk7eIpIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvbnRleHQuYzo1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2x1c3RlciBzdGFydCBkZWx0YSA9ICVkLCB3aGljaCBpcyBub3QgYSBtdWx0aXBsZSBvZiB0aGUgY2x1c3RlciBzaXplICVkLiIKK21zZ3N0ciAiIgorIuvMwdPUxdIgzsHeyc7BxdTT0SDTzyDTzcXdxc7Jxc0gJWQsIN7UzyDOxSDR18zRxdTT0SDDxczZzSDeydPMz80gy8zB09TF0s/XICIKKyLSwdrNxdLBICVkLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9mYXQuYzozMDgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlBhcnRpdGlvbiB0b28gYmlnL3NtYWxsIGZvciBhICVzIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAi8sHaxMXMINPMydvLz80gzcHMIMTM0SDGwcrMz9fPyiDTydPUxc3ZIEZBVCIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9mYXQuYzo0NzQKK21zZ2lkICIiCisiVGhlIEZBVHMgZG9uJ3QgbWF0Y2guICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRoaXMgbWVhbnMsIHRoZW4gc2VsZWN0ICIKKyJjYW5jZWwsIHJ1biBzY2FuZGlzayBvbiB0aGUgZmlsZSBzeXN0ZW0sIGFuZCB0aGVuIGNvbWUgYmFjay4iCittc2dzdHIgIiIKKyLmwcrMz9fZxSDTydPUxc3ZIEZBVCDOxSDTz9fQwcTBwNQuICDl08zJINfZIM7FINrOwcXUxSwg3tTPINzUzyDP2s7B3sHF1CwgIgorItfZwsXSydTFIM/UzcXO1Swg2sHQ1dPUydTFIHNjYW5kaXNrIMTM0SDGwcrMz9fPyiDTydPUxc3ZLCDJINrB1MXNICIKKyLXz9rX0sHdwcrUxdPYLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9mYXQuYzo1MTQKK21zZ2lkICJUaGVyZSBhcmUgbm8gcG9zc2libGUgY29uZmlndXJhdGlvbnMgZm9yIHRoaXMgRkFUIHR5cGUuIgorbXNnc3RyICLkzNEg3NTPx88g1MnQwSBGQVQgxM/Q1dPUyc3ZyCDLz87GycfV0sHDycogzsXULiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9mYXQuYzo1MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZpbGUgc3lzdGVtIGRvZXNuJ3QgaGF2ZSBleHBlY3RlZCBzaXplcyBmb3IgV2luZG93cyB0byBsaWtlIGl0LiAgQ2x1c3RlciAiCisic2l6ZSBpcyAlZGsgKCVkayBleHBlY3RlZCk7IG51bWJlciBvZiBjbHVzdGVycyBpcyAlZCAoJWQgZXhwZWN0ZWQpOyBzaXplIG9mICIKKyJGQVRzIGlzICVkIHNlY3RvcnMgKCVkIGV4cGVjdGVkKS4iCittc2dzdHIgIiIKKyJXaW5kb3dzIM7FIM3P1sXUINLBws/UwdTYINMgxsHKzM/Xz8og08nT1MXNz8osIMnNxcDdxcog1MHLycUg0sHazcXS2S4gICIKKyLywdrNxdIgy8zB09TF0sEgJWRrICjP1snEwcXN2cogJWRrKTsg3snTzM8gy8zB09TF0s/XICVkICjP1snEwcXNz8UgJWQpOyAiCisi0sHazcXSIEZBVCAlZCDTxcvUz9LP1yAoz9bJxMHFzdnKICVkKS4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvZmF0LmM6NTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGaWxlIHN5c3RlbSBpcyByZXBvcnRpbmcgdGhlIGZyZWUgc3BhY2UgYXMgJWQgY2x1c3RlcnMsIG5vdCAlZCBjbHVzdGVycy4iCittc2dzdHIgIiIKKyLmwcrMz9fB0SDTydPUxc3BINPPz8LdwcXUIM8g09fPws/Ezs/NINDSz9PU0sHO09TXxSDXICVkIMvMwdPUxdLP1ywgwSDOxSDXICVkICIKKyLLzMHT1MXSz9cuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jOjg3NAorIywgZnV6enkKK21zZ2lkICIiCisiR05VIFBhcnRlZCB3YXMgbWlzY29tcGlsZWQ6IHRoZSBGQVQgYm9vdCBzZWN0b3Igc2hvdWxkIGJlIDUxMiBieXRlcy4gIEZBVCAiCisic3VwcG9ydCB3aWxsIGJlIGRpc2FibGVkLiIKK21zZ3N0ciAiIgorIkdOVSBwYXJ0ZWQgwtnMIM7F0NLB18nM2M7PINPLz83QyczJ0s/Xwc46INrBx9LV2s/eztnKINPFy9TP0iBGQVQgxM/M1sXOICIKKyLawc7JzcHU2CA1MTIgwsHK1C4gIPDPxMTF0tbLwSBGQVQgwtXExdQgz9TLzMDexc7BLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzoxNTkKKyMsIGZ1enp5Cittc2dpZCAiIgorIlRoZXJlJ3Mgbm90IGVub3VnaCByb29tIGluIHRoZSByb290IGRpcmVjdG9yeSBmb3IgYWxsIG9mIHRoZSBmaWxlcy4gIEVpdGhlciAiCisiY2FuY2VsLCBvciBpZ25vcmUgdG8gbG9zZSB0aGUgZmlsZXMuIgorbXNnc3RyICIiCisi5MzRINfTxcggxsHKzM/XIM7FIMjXwdTBxdQgzcXT1MEg1yDLz9LOxdfPzSDLwdTBzM/HxS4gIOzJws8gz9TNxc7J1MUsIMzJws8gIgorIsnHzs/SydLVytTFIMTM0SDQz9TF0skgxsHKzM/XLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzozMDAKK21zZ2lkICJFcnJvciB3cml0aW5nIHRvIHRoZSByb290IGRpcmVjdG9yeS4iCittc2dzdHIgIu/bycLLwSDawdDJ08kg1yDLz9LOxdfPyiDLwdTBzM/HLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo0ODkKK21zZ2lkICJJZiB5b3UgbGVhdmUgeW91ciBmaWxlIHN5c3RlbSBhcyBGQVQxNiwgdGhlbiB5b3Ugd2lsbCBoYXZlIG5vIHByb2JsZW1zLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjQ5MgorbXNnaWQgIiIKKyJJZiB5b3UgY29udmVydCB0byBGQVQxNiwgYW5kIE1TIFdpbmRvd3MgaXMgaW5zdGFsbGVkIG9uIHRoaXMgcGFydGl0aW9uLCB0aGVuICIKKyJ5b3UgbXVzdCByZS1pbnN0YWxsIHRoZSBNUyBXaW5kb3dzIGJvb3QgbG9hZGVyLiAgSWYgeW91IHdhbnQgdG8gZG8gdGhpcywgeW91ICIKKyJzaG91bGQgY29uc3VsdCB0aGUgUGFydGVkIG1hbnVhbCAob3IgeW91ciBkaXN0cmlidXRpb24ncyBtYW51YWwpLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjUwMAorbXNnaWQgIiIKKyJJZiB5b3UgbGVhdmUgeW91ciBmaWxlIHN5c3RlbSBhcyBGQVQzMiwgdGhlbiB5b3Ugd2lsbCBub3QgaW50cm9kdWNlIGFueSBuZXcgIgorInByb2JsZW1zLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjUwNAorbXNnaWQgIiIKKyJJZiB5b3UgY29udmVydCB0byBGQVQzMiwgYW5kIE1TIFdpbmRvd3MgaXMgaW5zdGFsbGVkIG9uIHRoaXMgcGFydGl0aW9uLCB0aGVuICIKKyJ5b3UgbXVzdCByZS1pbnN0YWxsIHRoZSBNUyBXaW5kb3dzIGJvb3QgbG9hZGVyLiAgSWYgeW91IHdhbnQgdG8gZG8gdGhpcywgeW91ICIKKyJzaG91bGQgY29uc3VsdCB0aGUgUGFydGVkIG1hbnVhbCAob3IgeW91ciBkaXN0cmlidXRpb24ncyBtYW51YWwpLiAgQWxzbywgIgorImNvbnZlcnRpbmcgdG8gRkFUMzIgd2lsbCBtYWtlIHRoZSBmaWxlIHN5c3RlbSB1bnJlYWRhYmxlIGJ5IE1TIERPUywgTVMgIgorIldpbmRvd3MgOTVhLCBhbmQgTVMgV2luZG93cyBOVC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgICVzICAlcyIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjUxOQorbXNnaWQgIldvdWxkIHlvdSBsaWtlIHRvIHVzZSBGQVQzMj8iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1NTAgbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgICVzIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTUxCittc2dpZCAiIgorIlRoZSBmaWxlIHN5c3RlbSBjYW4gb25seSBiZSByZXNpemVkIHRvIHRoaXMgc2l6ZSBieSBjb252ZXJ0aW5nIHRvIEZBVDE2LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjU2NworbXNnaWQgIiIKKyJUaGUgZmlsZSBzeXN0ZW0gY2FuIG9ubHkgYmUgcmVzaXplZCB0byB0aGlzIHNpemUgYnkgY29udmVydGluZyB0byBGQVQzMi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1ODAKKyMsIGZ1enp5Cittc2dpZCAiIgorIkdOVSBQYXJ0ZWQgY2Fubm90IHJlc2l6ZSB0aGlzIHBhcnRpdGlvbiB0byB0aGlzIHNpemUuICBXZSdyZSB3b3JraW5nIG9uIGl0ISIKK21zZ3N0ciAiIgorIkdOVSBQYXJ0ZWQgzsUgzc/WxdQgydrNxc7J1Ngg0sHazcXSINLB2sTFzMEgxM8g3NTPyiDXxczJ3snO2S4gIO3ZINLBws/UwcXNICIKKyLOwcQg3NTJzSEiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjQ5IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjU2CisjLCBmdXp6eQorbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyBhbiBpbnZhbGlkIHNpZ25hdHVyZSBmb3IgYSBGQVQgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICLmwcrMz9fB0SDTydPUxc3BIMnNxcXUIM7F18XSztXAIMTM0SBGQVQg08nHzsHU1dLVLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6NjQKKyMsIGZ1enp5Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGludmFsaWQgc2VjdG9yIHNpemUgZm9yIGEgRkFUIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAi5sHKzM/XwdEg08nT1MXNwSDJzcXF1CDOxdfF0s7ZyiDEzNEgRkFUINLB2s3F0iDTxcvUz9LBLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6NzEKKyMsIGZ1enp5Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGludmFsaWQgY2x1c3RlciBzaXplIGZvciBhIEZBVCBmaWxlIHN5c3RlbS4iCittc2dzdHIgIubByszP18HRINPJ09TFzcEgyc3FxdQgzsXXxdLO2cogxMzRIEZBVCDSwdrNxdIg08XL1M/SwS4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjc4CisjLCBmdXp6eQorbXNnaWQgIiIKKyJGaWxlIHN5c3RlbSBoYXMgYW4gaW52YWxpZCBudW1iZXIgb2YgcmVzZXJ2ZWQgc2VjdG9ycyBmb3IgYSBGQVQgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICIiCisi5sHKzM/XwdEg08nT1MXNwSDJzcXF1CDOxdfF0s7PxSDEzNEgRkFUIN7J08zPINrB0sXaxdLXydLP18HOztnIINPFy9TP0s/XLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6ODUKKyMsIGZ1enp5Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGludmFsaWQgbnVtYmVyIG9mIEZBVHMuIgorbXNnc3RyICLmwcrMz9fB0SDTydPUxc3BIMnNxcXUIM7F18XSztXAIMTM0SBGQVQg08nHzsHU1dLVLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6MTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGlzIGZpbGUgc3lzdGVtIGhhcyBhIGxvZ2ljYWwgc2VjdG9yIHNpemUgb2YgJWQuICBHTlUgUGFydGVkIGlzIGtub3duIG5vdCAiCisidG8gd29yayBwcm9wZXJseSB3aXRoIHNlY3RvciBzaXplcyBvdGhlciB0aGFuIDUxMiBieXRlcy4iCittc2dzdHIgIiIKKyL81MEgxsHKzM/XwdEg08nT1MXNwSDJzcXF1CDSwdrNxdIgzM/Hyd7F08vPx88g08XL1M/SwSAlZC4gIPPeydTBxdTT0Swg3tTPICIKKyJHTlUgUGFydGVkINLBws/UwcXUIM7F0NLB18nM2M7PINMg08XL1M/Swc3JLCDSwdrNxdIgy8/Uz9LZyCDP1MzJ3sXOIM/UIDUxMiAiCisiwsHK1C4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjE2NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGUgc3lzdGVtJ3MgQ0hTIGdlb21ldHJ5IGlzICglZCwgJWQsICVkKSwgd2hpY2ggaXMgaW52YWxpZC4gIFRoZSAiCisicGFydGl0aW9uIHRhYmxlJ3MgQ0hTIGdlb21ldHJ5IGlzICglZCwgJWQsICVkKS4gIElmIHlvdSBzZWxlY3QgSWdub3JlLCB0aGUgIgorImZpbGUgc3lzdGVtJ3MgQ0hTIGdlb21ldHJ5IHdpbGwgYmUgbGVmdCB1bmNoYW5nZWQuICBJZiB5b3Ugc2VsZWN0IEZpeCwgdGhlICIKKyJmaWxlIHN5c3RlbSdzIENIUyBnZW9tZXRyeSB3aWxsIGJlIHNldCB0byBtYXRjaCB0aGUgcGFydGl0aW9uIHRhYmxlJ3MgQ0hTICIKKyJnZW9tZXRyeS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6MjEzCittc2dpZCAiRkFUIGJvb3Qgc2VjdG9yIHNheXMgbG9naWNhbCBzZWN0b3Igc2l6ZSBpcyAwLiAgVGhpcyBpcyB3ZWlyZC4gIgorbXNnc3RyICIiCisi+sHH0tXaz97O2cog08XL1M/SIEZBVCDTz8TF0tbJ1CDSwdrNxdIgzM/Hyd7F08vPx88g08XL1M/SwSwg0sHXztnKIDAuICD81M8gIgorItPU0sHOzs8uICIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6MjE5Cittc2dpZCAiRkFUIGJvb3Qgc2VjdG9yIHNheXMgdGhlcmUgYXJlIG5vIEZBVCB0YWJsZXMuICBUaGlzIGlzIHdlaXJkLiAiCittc2dzdHIgIiIKKyL3INrBx9LV2s/ezs/NINPFy9TP0sUgRkFUIM7FINPPxMXS1snU09Egyc7Gz9LNwcPJySDPINTBwszJw8HIIEZBVC4gIPzUzyAiCisi09TSwc7Ozy4gIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzoyMjUKK21zZ2lkICJGQVQgYm9vdCBzZWN0b3Igc2F5cyBjbHVzdGVycyBhcmUgMCBzZWN0b3JzLiAgVGhpcyBpcyB3ZWlyZC4gIgorbXNnc3RyICIiCisi9yDTz8/U18XU09TXyckg0yDawcfS1drP3s7ZzSDTxcvUz9LPzSBGQVQsIMvMwdPUxdIg08/ExdLWydQgMCDTxcvUz9LP1y4gIPzUzyAiCisi09TSwc7Ozy4gIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzoyMzUKKyMsIGZ1enp5Cittc2dpZCAiRmlsZSBzeXN0ZW0gaXMgRkFUMTIsIHdoaWNoIGlzIHVuc3VwcG9ydGVkLiIKK21zZ3N0ciAi5sHKzM/XwdEg08nT1MXNwSBGQVQxMi4gIO/OwSDOxSDQz8TExdLWydfBxdTT0S4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjQxMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGluZm9ybWF0aW9uIHNlY3RvciBoYXMgdGhlIHdyb25nIHNpZ25hdHVyZSAoJXgpLiAgU2VsZWN0IGNhbmNlbCBmb3Igbm93LCAiCisiYW5kIHNlbmQgaW4gYSBidWcgcmVwb3J0LiAgSWYgeW91J3JlIGRlc3BlcmF0ZSwgaXQncyBwcm9iYWJseSBzYWZlIHRvIGlnbm9yZS4iCittc2dzdHIgIiIKKyLpzsbP0s3Bw8nPzs7ZyiDTxcvUz9Igyc3FxdQgzsXXxdLO1cAg08nHzsHU1dLVICgleCkuICD32cLF0snUxSDP1M3FztUsIMkgIgorItDP28zJ1MUg08/Pwt3FzsnFIM/CIM/bycLLxS4gIOXTzMkg19kg1dbFIM/U3sHRzMnT2Cwg1M8sINfF0s/R1M7PLCDNz9bOzyAiCisi0NLPycfOz9LJ0s/XwdTYLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb3VudC5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgZGlyZWN0b3J5IGVudHJ5IGZvciAlczogZmlyc3QgY2x1c3RlciBpcyB0aGUgZW5kIG9mIGZpbGUgbWFya2VyLiIKK21zZ3N0ciAiIgorIvDMz8jPyiDczMXNxc7UIMvB1MHMz8fBIMTM0SAlczog0MXS19nKIMvMwdPUxdIg0dfM0cXU09Egy8/Ow8/NIM3B0svF0sEgxsHKzMEuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvdW50LmM6MTY1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiQmFkIEZBVDogdW50ZXJtaW5hdGVkIGNoYWluIGZvciAlcy4gIFlvdSBzaG91bGQgcnVuIGRvc2ZzY2sgb3Igc2NhbmRpc2suIgorbXNnc3RyICLv28nCy8Eg1yBGQVQ6IM7F2sHXxdLbxc7OwdEgw8XQz97LwSDEzNEgJXMiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY291bnQuYzoxNzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJCYWQgRkFUOiBjbHVzdGVyICVkIG91dHNpZGUgZmlsZSBzeXN0ZW0gaW4gY2hhaW4gZm9yICVzLiAgWW91IHNob3VsZCBydW4gIgorImRvc2ZzY2sgb3Igc2NhbmRpc2suIgorbXNnc3RyICIiCisi79vJwsvBINcgRkFUOiDLzMHT1MXSICVkIM7ByM/EydTT0SDXzsUgxsHKzM/Xz8og08nT1MXN2SDXIMPF0M/ey8UgxMzRICVzIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvdW50LmM6MTg0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiQmFkIEZBVDogY2x1c3RlciAlZCBpcyBjcm9zcy1saW5rZWQgZm9yICVzLiAgWW91IHNob3VsZCBydW4gZG9zZnNjayBvciAiCisic2NhbmRpc2suIgorbXNnc3RyICLv28nCy8Eg1yBGQVQ6IMvMwdPUxdIgJWQgyc3FxdQg09PZzMvVIMTM0SAlcyIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb3VudC5jOjIwMworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyAlZGssIGJ1dCBpdCBoYXMgJWQgY2x1c3RlcnMgKCVkaykuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY291bnQuYzoyNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmaWxlICVzIGlzIG1hcmtlZCBhcyBhIHN5c3RlbSBmaWxlLiAgVGhpcyBtZWFucyBtb3ZpbmcgaXQgY291bGQgY2F1c2UgIgorInNvbWUgcHJvZ3JhbXMgdG8gc3RvcCB3b3JraW5nLiIKK21zZ3N0ciAiIgorIubByswgJXMg0M/Nxd7FziDLwcsg08nT1MXNztnKLiAg/NTPINrOwd7J1Cwg3tTPIMXHzyDQxdLFzcXdxc7JxSDNz9bF1CAiCisi0NLJ18XT1MkgyyDQ0sXL0sHdxc7JwCDSwcLP1NkgzsXLz9TP0tnIINDSz8fSwc3NLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC90YWJsZS5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRkFUICVkIG1lZGlhICV4IGRvZXNuJ3QgbWF0Y2ggdGhlIGJvb3Qgc2VjdG9yJ3MgbWVkaWEgJXguICBZb3Ugc2hvdWxkICIKKyJwcm9iYWJseSBydW4gc2NhbmRpc2suIgorbXNnc3RyICIiCisiRkFUICVkIM7P08nUxczYICV4IM7FINPP19DBxMHF1CDTIM7P08nUxczFzSDawcfS1drP3s7Px88g08XL1M/SwSAleC4gICIKKyL3z9rNz9bOzywg18HNINPMxcTVxdQg2sHQ1dPUydTYIHNjYW5kaXNrLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC90YWJsZS5jOjI2OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmF0X3RhYmxlX3NldDogY2x1c3RlciAlbGQgb3V0c2lkZSBmaWxlIHN5c3RlbSIKK21zZ3N0ciAiZmF0X3RhYmxlX3NldDogy8zB09TF0iAlbGQgzsHIz8TJ1NPRINfOxSDGwcrMz9fPyiDTydPUxc3ZIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3RhYmxlLmM6MzAxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYXRfdGFibGVfZ2V0OiBjbHVzdGVyICVsZCBvdXRzaWRlIGZpbGUgc3lzdGVtIgorbXNnc3RyICJmYXRfdGFibGVfZ2V0OiDLzMHT1MXSICVsZCDOwcjPxMnU09Eg187FIMbByszP18/KINPJ09TFzdkiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvdGFibGUuYzozNDMKK21zZ2lkICJmYXRfdGFibGVfYWxsb2NfY2x1c3Rlcjogbm8gZnJlZSBjbHVzdGVycyIKK21zZ3N0ciAiZmF0X3RhYmxlX2FsbG9jX2NsdXN0ZXI6IM7F1CDT18/Cz8TO2cggy8zB09TF0s/XIgorCisjOiBsaWJwYXJ0ZWQvZnMvbGludXhfc3dhcC9saW51eF9zd2FwLmM6Mjc1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVbnJlY29nbmlzZWQgb2xkIHN0eWxlIGxpbnV4IHN3YXAgc2lnbmF0dXJlICclMTBzJy4iCittc2dzdHIgIu7F0sHT0M/azsHOzsHRINPJx87B1NXSwSBsaW51eCBzd2FwICUxMHMuIgorCisjOiBsaWJwYXJ0ZWQvZnMvbGludXhfc3dhcC9saW51eF9zd2FwLmM6MzE4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVbnJlY29nbmlzZWQgbmV3IHN0eWxlIGxpbnV4IHN3YXAgc2lnbmF0dXJlICclMTBzJy4iCittc2dzdHIgIu7F0sHT0M/azsHOzsHRINPJx87B1NXSwSBsaW51eCBzd2FwICUxMHMuIgorCisjOiBsaWJwYXJ0ZWQvZnMvbGludXhfc3dhcC9saW51eF9zd2FwLmM6MzU4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVbnJlY29nbmlzZWQgc3dzdXNwIGxpbnV4IHN3YXAgc2lnbmF0dXJlICclOXMnLiIKK21zZ3N0ciAi7sXSwdPQz9rOwc7OwdEg08nHzsHU1dLBIGxpbnV4IHN3YXAgJTEwcy4iCisKKyM6IGxpYnBhcnRlZC9mcy9saW51eF9zd2FwL2xpbnV4X3N3YXAuYzo0MzQKK21zZ2lkICJUb28gbWFueSBiYWQgcGFnZXMuIgorbXNnc3RyICLzzMnby8/NIM3Oz8fPINDMz8jJyCDT1NLBzsnDLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9hZHZmcy5jOjEyMSBsaWJwYXJ0ZWQvZnMvaGZzL2FkdmZzX3BsdXMuYzoxMjIKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzo0MTQgbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjUwOAorIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NTM5IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjY1OAorIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NzcyCittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIGNvbnRhaW5zIGVycm9ycy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9hZHZmc19wbHVzLmM6Mjg3Cittc2dpZCAiQmFkIGJsb2NrcyBjb3VsZCBub3QgYmUgcmVhZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9jYWNoZS5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVHJ5aW5nIHRvIHJlZ2lzdGVyIGFuIGV4dGVudCBzdGFydGluZyBhdCBibG9jayAweCVYLCBidXQgYW5vdGhlciBvbmUgYWxyZWFkeSAiCisiZXhpc3RzIGF0IHRoaXMgcG9zaXRpb24uICBZb3Ugc2hvdWxkIGNoZWNrIHRoZSBmaWxlIHN5c3RlbSEiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9jYWNoZS5jOjIxNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVHJ5aW5nIHRvIG1vdmUgYW4gZXh0ZW50IGZyb20gYmxvY2sgT3glWCB0byBibG9jayBPeCVYLCBidXQgYW5vdGhlciBvbmUgIgorImFscmVhZHkgZXhpc3RzIGF0IHRoaXMgcG9zaXRpb24uICBUaGlzIHNob3VsZCBub3QgaGFwcGVuISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGUuYzoxNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHVwZGF0ZSB0aGUgZXh0ZW50IGNhY2hlIGZvciBIRlMgZmlsZSB3aXRoIENOSUQgJVguIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZS5jOjE4MAorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgdG8gcmVhZCBIRlMgZmlsZSB3aXRoIENOSUQgJVggYmVoaW5kIEVPRi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlLmM6MTkwIGxpYnBhcnRlZC9mcy9oZnMvZmlsZS5jOjIyMAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCBzZWN0b3IgJWxsaSBvZiBIRlMgZmlsZSB3aXRoIENOSUQgJVguIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZS5jOjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgdG8gd3JpdGUgSEZTIGZpbGUgd2l0aCBDTklEICVYIGJlaGluZCBFT0YuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZV9wbHVzLmM6MTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB1cGRhdGUgdGhlIGV4dGVudCBjYWNoZSBmb3IgSEZTKyBmaWxlIHdpdGggQ05JRCAlWC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlX3BsdXMuYzoyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIHRvIHJlYWQgSEZTKyBmaWxlIHdpdGggQ05JRCAlWCBiZWhpbmQgRU9GLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGVfcGx1cy5jOjIxMyBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGVfcGx1cy5jOjI1NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCBzZWN0b3IgJWxsaSBvZiBIRlMrIGZpbGUgd2l0aCBDTklEICVYLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGVfcGx1cy5jOjI0NQorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgdG8gd3JpdGUgSEZTKyBmaWxlIHdpdGggQ05JRCAlWCBiZWhpbmQgRU9GLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjIzMgorbXNnaWQgIlNvcnJ5LCBIRlMgY2Fubm90IGJlIHJlc2l6ZWQgdGhhdCB3YXkgeWV0LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjI2MiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjY0MQorbXNnaWQgIkRhdGEgcmVsb2NhdGlvbiBoYXMgZmFpbGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjI4MQorbXNnaWQgIkRhdGEgcmVsb2NhdGlvbiBsZWZ0IHNvbWUgZGF0YSBpbiB0aGUgZW5kIG9mIHRoZSB2b2x1bWUuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MzIwCisjLCBmdXp6eQorbXNnaWQgIndyaXRpbmcgSEZTIE1hc3RlciBEaXJlY3RvcnkgQmxvY2siCittc2dzdHIgIu/bycLLwSDawdDJ08kg1yDLz9LOxdfPyiDLwdTBzM/HLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo0NjgKK21zZ2lkICJObyB2YWxpZCBIRlNbK1hdIHNpZ25hdHVyZSBoYXMgYmVlbiBmb3VuZCB3aGlsZSBvcGVuaW5nLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjQ3OAorIywgYy1mb3JtYXQKK21zZ2lkICJWZXJzaW9uICVkIG9mIEhGUysgaXNuJ3Qgc3VwcG9ydGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICJWZXJzaW9uICVkIG9mIEhGU1ggaXNuJ3Qgc3VwcG9ydGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjY3MgorbXNnaWQgIkRhdGEgcmVsb2NhdGlvbiBsZWZ0IHNvbWUgZGF0YSBhdCB0aGUgZW5kIG9mIHRoZSB2b2x1bWUuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NzIwCisjLCBmdXp6eQorbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdGhlIGFsbG9jYXRpb24gZmlsZS4iCittc2dzdHIgIu/bycLLwSDawdDJ08kg1yDLz9LOxdfPyiDLwdTBzM/HLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo3MzUKK21zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRoZSBjb21wYXRpYmlsaXR5IHBhcnQgb2YgdGhlIGFsbG9jYXRpb24gZmlsZS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo3NTAKK21zZ2lkICJ3cml0aW5nIEhGUysgVm9sdW1lIEhlYWRlciIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjg1MAorbXNnaWQgIkFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGxvb2tpbmcgZm9yIHRoZSBtYW5kYXRvcnkgYmFkIGJsb2NrcyBmaWxlLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjkwNAorbXNnaWQgIiIKKyJJdCBzZWVtcyB0aGVyZSBpcyBhbiBlcnJvciBpbiB0aGUgSEZTIHdyYXBwZXI6IHRoZSBiYWQgYmxvY2tzIGZpbGUgZG9lc24ndCAiCisiY29udGFpbiB0aGUgZW1iZWRkZWQgSEZTKyB2b2x1bWUuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6OTQwCittc2dpZCAiU29ycnksIEhGUysgY2Fubm90IGJlIHJlc2l6ZWQgdGhhdCB3YXkgeWV0LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjk3NQorbXNnaWQgInNocmlua2luZyBlbWJlZGRlZCBIRlMrIHZvbHVtZSIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjk5MQorbXNnaWQgIlJlc2l6aW5nIHRoZSBIRlMrIHZvbHVtZSBoYXMgZmFpbGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjk5OAorbXNnaWQgInNocmlua2luZyBIRlMgd3JhcHBlciIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjEwMDcKK21zZ2lkICJVcGRhdGluZyB0aGUgSEZTIHdyYXBwZXIgaGFzIGZhaWxlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzoxMTA5IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MTE5NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhpcyBpcyBub3QgYSByZWFsICVzIGNoZWNrLiAgVGhpcyBpcyBnb2luZyB0byBleHRyYWN0IHNwZWNpYWwgbG93IGxldmVsICIKKyJmaWxlcyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzoxNTUKK21zZ2lkICJCYWQgYmxvY2sgbGlzdCBoZWFkZXIgY2hlY2tzdW0uIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjE2OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSW52YWxpZCBzaXplIG9mIGEgdHJhbnNhY3Rpb24gYmxvY2sgd2hpbGUgcmVwbGF5aW5nIHRoZSBqb3VybmFsICglaSBieXRlcykuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjI2MAorbXNnaWQgIiIKKyJKb3VybmFsIHN0b3JlZCBvdXRzaWRlIG9mIHRoZSB2b2x1bWUgYXJlIG5vdCBzdXBwb3J0ZWQuICBUcnkgdG8gZGVzYWN0aXZhdGUgIgorInRoZSBqb3VybmFsIGFuZCBydW4gUGFydGVkIGFnYWluLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzoyNzEKKyMsIGZ1enp5Cittc2dpZCAiSm91cm5hbCBvZmZzZXQgb3Igc2l6ZSBpcyBub3QgbXVsdGlwbGUgb2YgdGhlIHNlY3RvciBzaXplLiIKK21zZ3N0ciAiIgorIuvMwdPUxdIgzsHeyc7BxdTT0SDTzyDTzcXdxc7Jxc0gJWQsIN7UzyDOxSDR18zRxdTT0SDDxczZzSDeydPMz80gy8zB09TF0s/XICIKKyLSwdrNxdLBICVkLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MjkyCittc2dpZCAiSW5jb3JyZWN0IG1hZ2ljIHZhbHVlcyBpbiB0aGUgam91cm5hbCBoZWFkZXIuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjMwMgorbXNnaWQgIkpvdXJuYWwgc2l6ZSBtaXNtYXRjaCBiZXR3ZWVuIGpvdXJuYWwgaW5mbyBibG9jayBhbmQgam91cm5hbCBoZWFkZXIuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjMxNAorIywgZnV6enkKK21zZ2lkICJTb21lIGhlYWRlciBmaWVsZHMgYXJlIG5vdCBtdWx0aXBsZSBvZiB0aGUgc2VjdG9yIHNpemUuIgorbXNnc3RyICIiCisi68zB09TF0iDOwd7JzsHF1NPRINPPINPNxd3FzsnFzSAlZCwg3tTPIM7FINHXzNHF1NPRIMPFzNnNIN7J08zPzSDLzMHT1MXSz9cgIgorItLB2s3F0sEgJWQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozMjMKK21zZ2lkICIiCisiVGhlIHNlY3RvciBzaXplIHN0b3JlZCBpbiB0aGUgam91cm5hbCBpcyBub3QgNTEyIGJ5dGVzLiAgUGFydGVkIG9ubHkgIgorInN1cHBvcnRzIDUxMiBieXRlcyBsZW5ndGggc2VjdG9ycy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MzM1Cittc2dpZCAiQmFkIGpvdXJuYWwgY2hlY2tzdW0uIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjM1MworbXNnaWQgIiIKKyJUaGUgam91cm5hbCBpcyBub3QgZW1wdHkuICBQYXJ0ZWQgbXVzdCByZXBsYXkgdGhlIHRyYW5zYWN0aW9ucyBiZWZvcmUgIgorIm9wZW5pbmcgdGhlIGZpbGUgc3lzdGVtLiAgVGhpcyB3aWxsIG1vZGlmeSB0aGUgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjM4MQorbXNnaWQgIiIKKyJUaGUgdm9sdW1lIGhlYWRlciBvciB0aGUgbWFzdGVyIGRpcmVjdG9yeSBibG9jayBoYXMgY2hhbmdlZCB3aGlsZSByZXBsYXlpbmcgIgorInRoZSBqb3VybmFsLiAgWW91IHNob3VsZCByZXN0YXJ0IFBhcnRlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9wcm9iZS5jOjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQYXJ0ZWQgY2FuJ3QgdXNlIEhGUyBmaWxlIHN5c3RlbXMgb24gZGlza3Mgd2l0aCBhIHNlY3RvciBzaXplIG5vdCBlcXVhbCB0byAlIgorImQgYnl0ZXMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzoxNTEgbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6MTU1Cittc2dpZCAiQW4gZXh0ZW50IGhhcyBub3QgYmVlbiByZWxvY2F0ZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzoyNTEgbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6MzA3Cittc2dpZCAiIgorIkEgcmVmZXJlbmNlIHRvIGFuIGV4dGVudCBjb21lcyBmcm9tIGEgcGxhY2UgaXQgc2hvdWxkIG5vdC4gIFlvdSBzaG91bGQgY2hlY2sgIgorInRoZSBmaWxlIHN5c3RlbSEiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjM4MQorbXNnaWQgIlRoaXMgSEZTIHZvbHVtZSBoYXMgbm8gY2F0YWxvZyBmaWxlLiAgVGhpcyBpcyB2ZXJ5IHVudXN1YWwhIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzo0NzUKK21zZ2lkICJUaGlzIEhGUyB2b2x1bWUgaGFzIG5vIGV4dGVudHMgb3ZlcmZsb3cgZmlsZS4gIFRoaXMgaXMgcXVpdGUgdW51c3VhbCEiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjUxNyBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo2NjgKK21zZ2lkICIiCisiVGhlIGV4dGVudHMgb3ZlcmZsb3cgZmlsZSBzaG91bGQgbm90IGNvbnRhaW4gaXRzIG93biBleHRlbnRzISAgWW91IHNob3VsZCAiCisiY2hlY2sgdGhlIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NTc0IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjg0NworIywgZnV6enkKK21zZ2lkICJDb3VsZCBub3QgY2FjaGUgdGhlIGZpbGUgc3lzdGVtIGluIG1lbW9yeS4iCittc2dzdHIgIu7FINXEwcXU09Egz9DSxcTFzMnU2CDGwcrMz9fVwCDTydPUxc3VLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjYzNSBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo5MDgKK21zZ2lkICJCYWQgYmxvY2tzIGxpc3QgY291bGQgbm90IGJlIGxvYWRlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjY0OSBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo5MjQKK21zZ2lkICJBbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgZXh0ZW50IHJlbG9jYXRpb24uIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjQ5NQorbXNnaWQgIlRoaXMgSEZTKyB2b2x1bWUgaGFzIG5vIGNhdGFsb2cgZmlsZS4gIFRoaXMgaXMgdmVyeSB1bnVzdWFsISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo2MTkKK21zZ2lkICJUaGlzIEhGUysgdm9sdW1lIGhhcyBubyBleHRlbnRzIG92ZXJmbG93IGZpbGUuICBUaGlzIGlzIHF1aXRlIHVudXN1YWwhIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo5NAorbXNnaWQgImRpc3BsYXlzIHRoaXMgaGVscCBtZXNzYWdlIgorbXNnc3RyICLP1M/C0sHWwcXUINzUzyDT0NLB18/ezs/FINPPz8Ldxc7JxSIKKworIzogcGFydGVkL3BhcnRlZC5jOjk1Cittc2dpZCAibGlzdHMgcGFydGl0aW9uIGxheW91dCBvbiBhbGwgYmxvY2sgZGV2aWNlcyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6OTYKK21zZ2lkICJkaXNwbGF5cyBtYWNoaW5lIHBhcnNlYWJsZSBvdXRwdXQiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjk3Cittc2dpZCAibmV2ZXIgcHJvbXB0cyBmb3IgdXNlciBpbnRlcnZlbnRpb24iCittc2dzdHIgIs7Jy8/HxMEgzsUg2sHQ0sHbydfBxdQg183F28HUxczY09TXzyDQz8zY2s/XwdTFzNEiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo5OAorbXNnaWQgImRpc3BsYXlzIHRoZSB2ZXJzaW9uIgorbXNnc3RyICLP1M/C0sHWwcXUINfF0tPJwCIKKworIzogcGFydGVkL3BhcnRlZC5jOjExMQorIywgZnV6enkKK21zZ2lkICIiCisiTlVNQkVSIGlzIHRoZSBwYXJ0aXRpb24gbnVtYmVyIHVzZWQgYnkgTGludXguICBPbiBNUy1ET1MgZGlzayBsYWJlbHMsIHRoZSAiCisicHJpbWFyeSBwYXJ0aXRpb25zIG51bWJlciBmcm9tIDEgdG8gNCwgbG9naWNhbCBwYXJ0aXRpb25zIGZyb20gNSBvbndhcmRzLlxuIgorbXNnc3RyICIiCisiTUlOT1IgLSDc1M8gzs/NxdIg0sHaxMXMwSwgydPQz8zY2tXFzdnKIExpbnV4LiAg79POz9fO2cUg0sHaxMXM2SDJzcXA1CAiCisizs/NxdLBIDEtNCwgwSDMz8fJ3sXTy8nFIC0gNSDJIMTBzMXFLlxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTE0Cittc2dpZCAiTEFCRUwtVFlQRSBpcyBvbmUgb2Y6ICIKK21zZ3N0ciAi9OnwLe3l9OvpIM/Eyc4gydo6ICIKKworIzogcGFydGVkL3BhcnRlZC5jOjExNQorIywgZnV6enkKK21zZ2lkICJGTEFHIGlzIG9uZSBvZjogIgorbXNnc3RyICL06fBf5vMgz8TJziDJ2jogIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTE2CisjLCBmdXp6eQorbXNnaWQgIlVOSVQgaXMgb25lIG9mOiAiCittc2dzdHIgIvTp8F/m8yDPxMnOIMnaOiAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMTcKK21zZ2lkICJQQVJULVRZUEUgaXMgb25lIG9mOiBwcmltYXJ5LCBsb2dpY2FsLCBleHRlbmRlZFxuIgorbXNnc3RyICL06fBf8uH65CDPxMnOIMnaOiDP087P187PyiwgzM/Hyd7F08vJyiwg0sHT28nSxc7O2cpcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjExOQorbXNnaWQgIkZTLVRZUEUgaXMgb25lIG9mOiAiCittc2dzdHIgIvTp8F/m8yDPxMnOIMnaOiAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjAKK21zZ2lkICIiCisiU1RBUlQgYW5kIEVORCBhcmUgZGlzayBsb2NhdGlvbnMsIHN1Y2ggYXMgNEdCIG9yIDEwJS4gIE5lZ2F0aXZlIHZhbHVlcyBjb3VudCAiCisiZnJvbSB0aGUgZW5kIG9mIHRoZSBkaXNrLiAgRm9yIGV4YW1wbGUsIC0xcyBzcGVjaWZpZXMgZXhhY3RseSB0aGUgbGFzdCAiCisic2VjdG9yLlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjMKKyMsIGZ1enp5Cittc2dpZCAiU1RBVEUgaXMgb25lIG9mOiBvbiwgb2ZmXG4iCittc2dzdHIgIvTp8F/m8yDPxMnOIMnaOiAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjQKK21zZ2lkICJERVZJQ0UgaXMgdXN1YWxseSAvZGV2L2hkYSBvciAvZGV2L3NkYVxuIgorbXNnc3RyICL18/Ty7+rz9Pfv7SDPwtnezs8g0dfM0cXU09EgL2Rldi9oZGEgyczJIC9kZXYvc2RhXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjUKK21zZ2lkICJOQU1FIGlzIGFueSB3b3JkIHlvdSB3YW50XG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyNgorbXNnaWQgIlRoZSBwYXJ0aXRpb24gbXVzdCBoYXZlIG9uZSBvZiB0aGUgZm9sbG93aW5nIEZTLVRZUEVzOiAiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEzMAorIywgZnV6enkKK21zZ2lkICIiCisiQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy5cbiIKKyJUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZSwgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuXG4iCisiXG4iCisiVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4iCisiYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiIKKyJNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4iCisiR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkNvcHlyaWdodCAoQykgMTk5OS0yMDAwIEFuZHJldyBDbGF1c2VuLCBMZW5uZXJ0IEJ1eXRlbmhlayDJIFJlZCBIYXQgSW5jLlxuIgorIvDF0sXXz8TZOiBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluY1xuIgorIvzUzyDT18/Cz8TOwdEg0NLPx9LBzc3BLCDOwSDOxcUg0sHT0NLP09TSwc7RxdTT0SD1zsnXxdLTwczYzsHRIO/C3cXT1NfFzs7B0VxuIgorIuzJw8XO2snRIEdOVS5cbiIKKyJcbiIKKyL81MEg0NLPx9LBzc3BINLB09DSz9PU0sHO0cXU09Eg1yDOwcTF1sTFLCDe1M8gz87BIMLVxMXUINDPzMXazs/KLCDOzyDi5fpcbiIKKyLr4evp6C3s6eLvIOfh8uHu9OnqOyDEwdbFIMLF2iDQz8TSwdrVzcXXwcXN2cggx8HSwc7Uycog6+/t7eXy/uXz6+/qIOPl7u7v8/TpICIKKyLJzMkg8PLp5+/k7u/z9Okg5OzxIOvv7uvy5fTu7+og4+Xs6S4gIOTM0SDQz8zV3sXOydEgws/MxcUg0M/E0s/Czs/KICIKKyLJzsbP0s3Bw8nJINPNz9TSydTFIPXOydfF0tPBzNjO1cAg78LdxdPU18XOztXAIOzJw8XO2snAIEdOVS5cbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjE3NgorIywgYy1mb3JtYXQKK21zZ2lkICIlMC5mJSVcdCh0aW1lIGxlZnQgJS4yZDolLjJkKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQYXJ0aXRpb24gJXMgaXMgYmVpbmcgdXNlZC4gWW91IG11c3QgdW5tb3VudCBpdCBiZWZvcmUgeW91IG1vZGlmeSBpdCB3aXRoICIKKyJQYXJ0ZWQuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGFydGl0aW9uKHMpIG9uICVzIGFyZSBiZWluZyB1c2VkLiIKK21zZ3N0ciAi8sHaxMXM2SDOwSAlcyDJ09DPzNja1cDU09EuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIzCittc2dpZCAiIgorIlRoZSBleGlzdGluZyBmaWxlIHN5c3RlbSB3aWxsIGJlIGRlc3Ryb3llZCBhbmQgYWxsIGRhdGEgb24gdGhlIHBhcnRpdGlvbiAiCisid2lsbCBiZSBsb3N0LiBEbyB5b3Ugd2FudCB0byBjb250aW51ZT8iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIzNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGV4aXN0aW5nIGRpc2sgbGFiZWwgb24gJXMgd2lsbCBiZSBkZXN0cm95ZWQgYW5kIGFsbCBkYXRhIG9uIHRoaXMgZGlzayAiCisid2lsbCBiZSBsb3N0LiBEbyB5b3Ugd2FudCB0byBjb250aW51ZT8iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjQ1OCBwYXJ0ZWQvcGFydGVkLmM6NjUyIHBhcnRlZC9wYXJ0ZWQuYzoxMDQ0CisjOiBwYXJ0ZWQvcGFydGVkLmM6MTEyOCBwYXJ0ZWQvcGFydGVkLmM6MTc3MSBwYXJ0ZWQvcGFydGVkLmM6MTg1MgorIzogcGFydGVkL3BhcnRlZC5jOjE5MDAKKyMsIGZ1enp5Cittc2dpZCAiUGFydGl0aW9uIG51bWJlcj8iCittc2dzdHIgIvLB2sTFzCDJ09DPzNja1cXU09EuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NTAwCittc2dpZCAiU291cmNlIGRldmljZT8iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjUwNAorIywgZnV6enkKK21zZ2lkICJTb3VyY2UgcGFydGl0aW9uIG51bWJlcj8iCittc2dzdHIgIunTyM/EztnKINLB2sTFzCDOxSDT1d3F09TX1cXULiIKKworIzogcGFydGVkL3BhcnRlZC5jOjUwOQorIywgZnV6enkKK21zZ2lkICJDYW4ndCBjb3B5IGFuIGV4dGVuZGVkIHBhcnRpdGlvbi4iCittc2dzdHIgIu7F18/azc/Wzs8g08vP0MnSz9fB1Ngg0sHT28nSxc7O2cog0sHaxMXMLiIKKworIzogcGFydGVkL3BhcnRlZC5jOjUxNQorIywgZnV6enkKK21zZ2lkICJEZXN0aW5hdGlvbiBwYXJ0aXRpb24gbnVtYmVyPyIKK21zZ3N0ciAi8sHaxMXMIM7B2s7B3sXOydEgydPQz8zY2tXF1NPRLiIKKworIzogcGFydGVkL3BhcnRlZC5jOjYxNQorbXNnaWQgIk5ldyBkaXNrIGxhYmVsIHR5cGU/IgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo2NTYKKyMsIGZ1enp5Cittc2dpZCAiRmlsZSBzeXN0ZW0/IgorbXNnc3RyICLmwcrMz9fB0SDTydPUxc3BINDPzM7BISIKKworIzogcGFydGVkL3BhcnRlZC5jOjcwNyBwYXJ0ZWQvcGFydGVkLmM6ODc4CisjLCBmdXp6eQorbXNnaWQgIlBhcnRpdGlvbiB0eXBlPyIKK21zZ3N0ciAi8sHaxMXMIM7FINPV3cXT1NfVxdQuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NzE0IHBhcnRlZC9wYXJ0ZWQuYzo4ODUgcGFydGVkL3BhcnRlZC5jOjExMzEKKyMsIGZ1enp5Cittc2dpZCAiUGFydGl0aW9uIG5hbWU/IgorbXNnc3RyICLywdrExcwgzsUg09XdxdPU19XF1C4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo3MjIgcGFydGVkL3BhcnRlZC5jOjg5NQorIywgZnV6enkKK21zZ2lkICJGaWxlIHN5c3RlbSB0eXBlPyIKK21zZ3N0ciAi7sXJ2tfF09TO2cog1MnQIMbByszP18/KINPJ09TFzdkuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NzI5IHBhcnRlZC9wYXJ0ZWQuYzo4OTcgcGFydGVkL3BhcnRlZC5jOjEwNTkKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNzI1IHBhcnRlZC9wYXJ0ZWQuYzoxNzgwCittc2dpZCAiU3RhcnQ/IgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo3MzEgcGFydGVkL3BhcnRlZC5jOjkwMCBwYXJ0ZWQvcGFydGVkLmM6MTA2MgorIzogcGFydGVkL3BhcnRlZC5jOjE3MjcgcGFydGVkL3BhcnRlZC5jOjE3ODIKK21zZ2lkICJFbmQ/IgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo3NjkgcGFydGVkL3BhcnRlZC5jOjkzOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IHJlcXVlc3RlZCBhIHBhcnRpdGlvbiBmcm9tICVzIHRvICVzLlxuIgorIlRoZSBjbG9zZXN0IGxvY2F0aW9uIHdlIGNhbiBtYW5hZ2UgaXMgJXMgdG8gJXMuICBJcyB0aGlzIHN0aWxsIGFjY2VwdGFibGUgdG8gIgorInlvdT8iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjg5MAorbXNnaWQgIkFuIGV4dGVuZGVkIHBhcnRpdGlvbiBjYW5ub3QgaG9sZCBhIGZpbGUgc3lzdGVtLiAgRGlkIHlvdSB3YW50IG1rcGFydD8iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEwNTAKKyMsIGZ1enp5Cittc2dpZCAiQ2FuJ3QgbW92ZSBhbiBleHRlbmRlZCBwYXJ0aXRpb24uIgorbXNnc3RyICLuxdfP2s3P1s7PINPLz9DJ0s/XwdTYINLB09vJ0sXOztnKINLB2sTFzC4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMDc5Cittc2dpZCAiQ2FuJ3QgbW92ZSBhIHBhcnRpdGlvbiBvbnRvIGl0c2VsZi4gIFRyeSB1c2luZyByZXNpemUsIHBlcmhhcHM/IgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIk1pbm9yOiAlZFxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZsYWdzOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjI5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJGaWxlIFN5c3RlbTogJXNcbiIKK21zZ3N0ciAi5sHKzM/XwdEg08nT1MXNwSDQz8zOwSEiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjMwCittc2dpZCAiU2l6ZTogICAgICAgICAiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMzUKK21zZ2lkICJNaW5pbXVtIHNpemU6ICIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIzOAorbXNnaWQgIk1heGltdW0gc2l6ZTogIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMzYyCisjLCBjLWZvcm1hdAorbXNnaWQgIk1vZGVsOiAlcyAoJXMpXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEzNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGlzayAlczogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTM2NQorIywgYy1mb3JtYXQKK21zZ2lkICJTZWN0b3Igc2l6ZSAobG9naWNhbC9waHlzaWNhbCk6ICVsbGRCLyVsbGRCXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEzODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQklPUyBjeWxpbmRlcixoZWFkLHNlY3RvciBnZW9tZXRyeTogJWQsJWQsJWQuICBFYWNoIGN5bGluZGVyIGlzICVzLlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMzkyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJQYXJ0aXRpb24gVGFibGU6ICVzXG4iCittc2dzdHIgIvLB2sTFzCDJ09DPzNja1cXU09EuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQwNiBwYXJ0ZWQvcGFydGVkLmM6MTQwOQorbXNnaWQgIk51bWJlciIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQwNiBwYXJ0ZWQvcGFydGVkLmM6MTQwOQorbXNnaWQgIlN0YXJ0IgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDA3IHBhcnRlZC9wYXJ0ZWQuYzoxNDEwCittc2dpZCAiRW5kIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDEwCisjLCBmdXp6eQorbXNnaWQgIlNpemUiCittc2dzdHIgInJlc2l6ZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MTQKK21zZ2lkICJUeXBlIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDE2CisjLCBmdXp6eQorbXNnaWQgIkZpbGUgc3lzdGVtIgorbXNnc3RyICLmwcrMz9fB0SDTydPUxc3BINDPzM7BISIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MTkKK21zZ2lkICJOYW1lIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDIxCittc2dpZCAiRmxhZ3MiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0NzcKK21zZ2lkICJGcmVlIFNwYWNlIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBICVzICVzIHBhcnRpdGlvbiB3YXMgZm91bmQgYXQgJXMgLT4gJXMuICBEbyB5b3Ugd2FudCB0byBhZGQgaXQgdG8gdGhlICIKKyJwYXJ0aXRpb24gdGFibGU/IgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNjYzCittc2dpZCAic2VhcmNoaW5nIGZvciBmaWxlIHN5c3RlbXMiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjE4NzcKKyMsIGZ1enp5Cittc2dpZCAiTmV3IGRldmljZT8iCittc2dzdHIgIu7FIM7BysTFzs8gzskgz8TOz8fPINXT1NLPytPU18EiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxOTAyCittc2dpZCAiRmxhZyB0byBJbnZlcnQ/IgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxOTA3Cittc2dpZCAiTmV3IHN0YXRlPyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTk0NAorbXNnaWQgIlVuaXQ/IgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMDkzCittc2dpZCAiY2hlY2siCittc2dzdHIgImNoZWNrIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjA5NgorIywgZnV6enkKK21zZ2lkICIiCisiY2hlY2sgTlVNQkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyBhIHNpbXBsZSBjaGVjayBvbiB0aGUgZmlsZSBzeXN0ZW0iCittc2dzdHIgIiIKKyJjaGVjayBNSU5PUiAgICAgICAgICAgICAgICAgICDQ0s/J2tfPxMnUINDSz9PU1cAg0NLP18XSy9UgxsHKzM/Xz8og08nT1MXN2SIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMDIKK21zZ2lkICJjcCIKK21zZ3N0ciAiY3AiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTA1CisjLCBmdXp6eQorbXNnaWQgIiIKKyJjcCBbRlJPTS1ERVZJQ0VdIEZST00tTlVNQkVSIFRPLU5VTUJFUiAgIGNvcHkgZmlsZSBzeXN0ZW0gdG8gYW5vdGhlciAiCisicGFydGl0aW9uIgorbXNnc3RyICIiCisiY3AgTUlOT1IgW/Xz9PLv6vP09+9dIE1JTk9SICAg08vP0MnSz9fB1NggxsHKzM/X1cAg08nT1MXN1SDOwSDE0tXHz8og0sHaxMXMIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjExMQorbXNnaWQgImhlbHAiCittc2dzdHIgImhlbHAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTE0CisjLCBmdXp6eQorbXNnaWQgIiIKKyJoZWxwIFtDT01NQU5EXSAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50IGdlbmVyYWwgaGVscCwgb3IgaGVscCBvbiAiCisiQ09NTUFORCIKK21zZ3N0ciAiIgorImhlbHAgW+vv7eHu5OFdICAgICAgICAgICAgICAgINLB09DF3sHUwdTYIM/C3dXAINPQ0sHXy9UsIMnMySDT0NLB18vVINDPICIKKyLr7+3h7uTlIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEyMAorbXNnaWQgIm1rbGFiZWwiCittc2dzdHIgIm1rbGFiZWwiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTIwCisjLCBmdXp6eQorbXNnaWQgIm1rdGFibGUiCittc2dzdHIgIm1rbGFiZWwiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTIzCisjLCBmdXp6eQorbXNnaWQgIiIKKyJta2xhYmVsLG1rdGFibGUgTEFCRUwtVFlQRSAgICAgICAgICAgICAgIGNyZWF0ZSBhIG5ldyBkaXNrbGFiZWwgKHBhcnRpdGlvbiAiCisidGFibGUpIgorbXNnc3RyICIiCisibWtsYWJlbCD06fAt7eX06+kgICAgICAgICAgICAg08/axMHU2CDOz9fVwCDNxdTL1SDEydPLwSAo1MHCzMnD1SDSwdrExczBKSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMjkKK21zZ2lkICJta2ZzIgorbXNnc3RyICJta2ZzIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEzMgorIywgZnV6enkKK21zZ2lkICIiCisibWtmcyBOVU1CRVIgRlMtVFlQRSAgICAgICAgICAgICAgICAgICAgICBtYWtlIGEgRlMtVFlQRSBmaWxlIHN5c3RlbSBvbiAiCisicGFydGl0aXRvbiBOVU1CRVIiCittc2dzdHIgIiIKKyJta2ZzIE1JTk9SIPTp8C3m8yAgICAgICAgICAgICDTz9rEwdTYIMbByszP19XAINPJ09TFzdUg9OnwLebzIM7BINLB2sTFzMUgIgorIk1JTk9SIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEzOAorbXNnaWQgIm1rcGFydCIKK21zZ3N0ciAibWtwYXJ0IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE0MQorIywgZnV6enkKK21zZ2lkICJta3BhcnQgUEFSVC1UWVBFIFtGUy1UWVBFXSBTVEFSVCBFTkQgICAgIG1ha2UgYSBwYXJ0aXRpb24iCittc2dzdHIgIm1rcGFydCD06fAt8uH65CBb9OnwLebzXSDu4f4g6+/uICAgICAgICAgINPP2sTB1Ngg0sHaxMXMIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE0NworIywgZnV6enkKK21zZ2lkICIiCisiJ21rcGFydCcgbWFrZXMgYSBwYXJ0aXRpb24gd2l0aG91dCBjcmVhdGluZyBhIG5ldyBmaWxlIHN5c3RlbSBvbiB0aGUgIgorInBhcnRpdGlvbi4gIEZTLVRZUEUgbWF5IGJlIHNwZWNpZmllZCB0byBzZXQgYW4gYXBwcm9wcmlhdGUgcGFydGl0aW9uIElELlxuIgorbXNnc3RyICIiCisibWtwYXJ0IMTFzMHF1CDSwdrExcwgwsXaINPP2sTBzsnRIM7BIM7FzSDOz9fPyiDGwcrMz9fPyiDTydPUxc3ZLiAg9OnwLebzICIKKyLEz8zWxc4gwtnU2CDVy8Hawc4gxMzRINLB2sTFzM/XINMgxMHOztnNySAo1yDP1MzJ3snFIM/UINLB09vJ0sXOztnIICIKKyLSwdrExczP1ykuICD81MEgy8/Nwc7EwSDQz8zF2s7BLCDF08zJINfZINXEwczJzMkg0sHaxMXMINPM1d7Bys7PLlxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE1MgorbXNnaWQgIm1rcGFydGZzIgorbXNnc3RyICJta3BhcnRmcyIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNTUKKyMsIGZ1enp5Cittc2dpZCAiIgorIm1rcGFydGZzIFBBUlQtVFlQRSBGUy1UWVBFIFNUQVJUIEVORCAgICAgbWFrZSBhIHBhcnRpdGlvbiB3aXRoIGEgZmlsZSBzeXN0ZW0iCittc2dzdHIgIiIKKyJta3BhcnRmcyD06fAt8uH65CD06fAt5vMg7uH+IOvv7iAgICAgICAgICDTz9rEwdTYINLB2sTFzCDTIMbByszP18/KINPJ09TFzc/KIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE2MQorbXNnaWQgIm1vdmUiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNjQKKyMsIGZ1enp5Cittc2dpZCAibW92ZSBOVU1CRVIgU1RBUlQgRU5EICAgICAgICAgICAgICAgICAgICBtb3ZlIHBhcnRpdGlvbiBOVU1CRVIiCittc2dzdHIgInJtIE1JTk9SICAgICAgICAgICAgICAgICAgICAgINXEwczJ1Ngg0sHaxMXMIE1JTk9SIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE2OQorbXNnaWQgIm5hbWUiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNzIKKyMsIGZ1enp5Cittc2dpZCAibmFtZSBOVU1CRVIgTkFNRSAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lIHBhcnRpdGlvbiBOVU1CRVIgYXMgTkFNRSIKK21zZ3N0ciAicm0gTUlOT1IgICAgICAgICAgICAgICAgICAgICAg1cTBzMnU2CDSwdrExcwgTUlOT1IiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTc3Cittc2dpZCAicHJpbnQiCittc2dzdHIgInByaW50IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE4MAorbXNnaWQgIiIKKyJwcmludCBbZGV2aWNlc3xmcmVlfGxpc3QsYWxsfE5VTUJFUl0gICAgIGRpc3BsYXkgdGhlIHBhcnRpdGlvbiB0YWJsZSwgIgorImF2YWlsYWJsZSBkZXZpY2VzLCBmcmVlIHNwYWNlLCBhbGwgZm91bmQgcGFydGl0aW9ucywgb3IgYSBwYXJ0aWN1bGFyICIKKyJwYXJ0aXRpb24iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxODUKK21zZ2lkICIiCisiV2l0aG91dCBhcmd1bWVudHMsICdwcmludCcgZGlzcGxheXMgdGhlIGVudGlyZSBwYXJ0aXRpb24gdGFibGUuIEhvd2V2ZXIgd2l0aCAiCisidGhlIGZvbGxvd2luZyBhcmd1bWVudHMgaXQgcGVyZm9ybXMgdmFyaW91cyBvdGhlciBhY3Rpb25zLlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTg3Cittc2dpZCAiICBkZXZpY2VzICAgOiBkaXNwbGF5IGFsbCBhY3RpdmUgYmxvY2sgZGV2aWNlc1xuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTg4Cittc2dpZCAiIgorIiAgZnJlZSAgICAgIDogZGlzcGxheSBpbmZvcm1hdGlvbiBhYm91dCBmcmVlIHVucGFydGl0aW9uZWQgc3BhY2Ugb24gdGhlICIKKyJjdXJyZW50IGJsb2NrIGRldmljZVxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTkwCisjLCBmdXp6eQorbXNnaWQgIiIKKyIgIGxpc3QsIGFsbCA6IGRpc3BsYXkgdGhlIHBhcnRpdGlvbiB0YWJsZXMgb2YgYWxsIGFjdGl2ZSBibG9jayBkZXZpY2VzXG4iCittc2dzdHIgInByaW50ICAgICAgICAgICAgICAgICAgICAgICAgINfZ18XT1Mkg1MHCzMnD1SDSwdrExczP1yIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxOTEKK21zZ2lkICIiCisiICBOVU1CRVIgICAgOiBkaXNwbGF5IG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBwYXJ0aWN1bGFyICIKKyJwYXJ0aXRpb25cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE5NgorbXNnaWQgInF1aXQiCittc2dzdHIgInF1aXQiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTk5CisjLCBmdXp6eQorbXNnaWQgInF1aXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCBwcm9ncmFtIgorbXNnc3RyICJxdWl0ICAgICAgICAgICAgICAgICAgICAgICAgICDX2crUySDJ2iDQ0s/H0sHNzdkiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjA0CisjLCBmdXp6eQorbXNnaWQgInJlc2N1ZSIKK21zZ3N0ciAicmVzaXplIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIwNworIywgZnV6enkKK21zZ2lkICIiCisicmVzY3VlIFNUQVJUIEVORCAgICAgICAgICAgICAgICAgICAgICAgICByZXNjdWUgYSBsb3N0IHBhcnRpdGlvbiBuZWFyIFNUQVJUICIKKyJhbmQgRU5EIgorbXNnc3RyICJwcmludCAgICAgICAgICAgICAgICAgICAgICAgICDX2dfF09TJINTBwszJw9Ug0sHaxMXMz9ciCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjEzCittc2dpZCAicmVzaXplIgorbXNnc3RyICJyZXNpemUiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjE2CisjLCBmdXp6eQorbXNnaWQgIiIKKyJyZXNpemUgTlVNQkVSIFNUQVJUIEVORCAgICAgICAgICAgICAgICAgIHJlc2l6ZSBwYXJ0aXRpb24gTlVNQkVSIGFuZCBpdHMgIgorImZpbGUgc3lzdGVtIgorbXNnc3RyICIiCisicmVzaXplIE1JTk9SIO7h/iDr7+4gICAgICAgICAgydrNxc7J1Ngg0sHazcXSIMbByszP18/KINPJ09TFzdkgzsEg0sHaxMXMxSAiCisiTUlOT1IiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjI0Cittc2dpZCAicm0iCittc2dzdHIgInJtIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIyNworIywgZnV6enkKK21zZ2lkICJybSBOVU1CRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwYXJ0aXRpb24gTlVNQkVSIgorbXNnc3RyICJybSBNSU5PUiAgICAgICAgICAgICAgICAgICAgICDVxMHMydTYINLB2sTFzCBNSU5PUiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMzIKK21zZ2lkICJzZWxlY3QiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMzUKKyMsIGZ1enp5Cittc2dpZCAic2VsZWN0IERFVklDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9vc2UgdGhlIGRldmljZSB0byBlZGl0IgorbXNnc3RyICJwcmludCAgICAgICAgICAgICAgICAgICAgICAgICDX2dfF09TJINTBwszJw9Ug0sHaxMXMz9ciCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjQwCittc2dpZCAic2V0IgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjQzCisjLCBmdXp6eQorbXNnaWQgIiIKKyJzZXQgTlVNQkVSIEZMQUcgU1RBVEUgICAgICAgICAgICAgICAgICAgIGNoYW5nZSB0aGUgRkxBRyBvbiBwYXJ0aXRpb24gTlVNQkVSIgorbXNnc3RyICJybSBNSU5PUiAgICAgICAgICAgICAgICAgICAgICDVxMHMydTYINLB2sTFzCBNSU5PUiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNDkKK21zZ2lkICJ0b2dnbGUiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNTIKKyMsIGZ1enp5Cittc2dpZCAiIgorInRvZ2dsZSBbTlVNQkVSIFtGTEFHXV0gICAgICAgICAgICAgICAgICAgdG9nZ2xlIHRoZSBzdGF0ZSBvZiBGTEFHIG9uICIKKyJwYXJ0aXRpb24gTlVNQkVSIgorbXNnc3RyICJib290IE1JTk9SICAgICAgICAgICAgICAgICAgICDV09TBzsHXzMnXwcXUINrBx9LV2s/eztnKINLB2sTFzCDXIE1JTk9SIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI1OAorIywgZnV6enkKK21zZ2lkICJ1bml0IgorbXNnc3RyICJxdWl0IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI2MQorIywgZnV6enkKK21zZ2lkICJ1bml0IFVOSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCB0aGUgZGVmYXVsdCB1bml0IHRvIFVOSVQiCittc2dzdHIgInByaW50ICAgICAgICAgICAgICAgICAgICAgICAgINfZ18XT1Mkg1MHCzMnD1SDSwdrExczP1yIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNjYKK21zZ2lkICJ2ZXJzaW9uIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjY5Cittc2dpZCAiIgorInZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheSB0aGUgdmVyc2lvbiBudW1iZXIgYW5kICIKKyJjb3B5cmlnaHQgaW5mb3JtYXRpb24gb2YgR05VIFBhcnRlZCIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI3MworbXNnaWQgIiIKKyIndmVyc2lvbicgZGlzcGxheXMgY29weXJpZ2h0IGFuZCB2ZXJzaW9uIGluZm9ybWF0aW9uIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyAiCisiY29weSBvZiBHTlUgUGFydGVkXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIzMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstaGxtc3ZdIFtERVZJQ0UgW0NPTU1BTkQgW1BBUkFNRVRFUlNdXS4uLl1cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjM3OQorbXNnaWQgIk5vIGRldmljZSBmb3VuZCIKK21zZ3N0ciAi7sUgzsHKxMXOzyDOySDPxM7Px88g1dPU0s/K09TXwSIKKworIzogcGFydGVkL3BhcnRlZC5jOjI0MTIKK21zZ2lkICJXQVJOSU5HOiBZb3UgYXJlIG5vdCBzdXBlcnVzZXIuICBXYXRjaCBvdXQgZm9yIHBlcm1pc3Npb25zLiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjQ1MAorbXNnaWQgIllvdSBtYXkgbmVlZCB0byB1cGRhdGUgL2V0Yy9mc3RhYi5cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzoxNjAKK21zZ2lkICJXZWxjb21lIHRvIEdOVSBQYXJ0ZWQhIFR5cGUgJ2hlbHAnIHRvIHZpZXcgYSBsaXN0IG9mIGNvbW1hbmRzLlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjE2MworIywgZnV6enkKK21zZ2lkICIiCisiVXNhZ2U6IHBhcnRlZCBbT1BUSU9OXS4uLiBbREVWSUNFIFtDT01NQU5EIFtQQVJBTUVURVJTXS4uLl0uLi5dXG4iCisiQXBwbHkgQ09NTUFORHMgd2l0aCBQQVJBTUVURVJTIHRvIERFVklDRS4gIElmIG5vIENPTU1BTkQocykgYXJlIGdpdmVuLCBydW4gIgorImluXG4iCisiaW50ZXJhY3RpdmUgbW9kZS5cbiIKK21zZ3N0ciAiIgorIunT0M/M2NrP18HOycU6IHBhcnRlZCBb6+zg/l0gW/Xz9PLv6vP09+8gW+vv7eHu5OEgW/Dh8uHt5fTy+V0uLi5dLi4uXVxuIgorIvDSyc3FztHF1CDr7+3h7uT1INMg8OHy4e3l9PLh7ekgyyD18/Ty7+rz9Pf1LiAg5dPMySDOySDPxM7PyiDr7+3h7uT5IM7FICIKKyLawcTBzs8sXG4iCisi19nQz8zO0cXU09Eg1yDJztTF0sHL1MnXzs/NINLF1snNxS5cbiIKKworIzogcGFydGVkL3VpLmM6MTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJcbiIKKyJZb3UgZm91bmQgYSBidWcgaW4gR05VIFBhcnRlZCEgSGVyZSdzIHdoYXQgeW91IGhhdmUgdG8gZG86XG4iCisiXG4iCisiRG9uJ3QgcGFuaWMhIFRoZSBidWcgaGFzIG1vc3QgbGlrZWx5IG5vdCBhZmZlY3RlZCBhbnkgb2YgeW91ciBkYXRhLlxuIgorIkhlbHAgdXMgdG8gZml4IHRoaXMgYnVnIGJ5IGRvaW5nIHRoZSBmb2xsb3dpbmc6XG4iCisiXG4iCisiQ2hlY2sgd2hldGhlciB0aGUgYnVnIGhhcyBhbHJlYWR5IGJlZW4gZml4ZWQgYnkgY2hlY2tpbmdcbiIKKyJ0aGUgbGFzdCB2ZXJzaW9uIG9mIEdOVSBQYXJ0ZWQgdGhhdCB5b3UgY2FuIGZpbmQgYXQ6XG4iCisiXG4iCisiXHRodHRwOi8vZnRwLmdudS5vcmcvZ251L3BhcnRlZC9cbiIKKyJcbiIKKyJQbGVhc2UgY2hlY2sgdGhpcyB2ZXJzaW9uIHByaW9yIHRvIGJ1ZyByZXBvcnRpbmcuXG4iCisiXG4iCisiSWYgdGhpcyBoYXMgbm90IGJlZW4gZml4ZWQgeWV0IG9yIGlmIHlvdSBkb24ndCBrbm93IGhvdyB0byBjaGVjayxcbiIKKyJwbGVhc2UgdmlzaXQgdGhlIEdOVSBQYXJ0ZWQgd2Vic2l0ZTpcbiIKKyJcbiIKKyJcdGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9wYXJ0ZWRcbiIKKyJcbiIKKyJmb3IgZnVydGhlciBpbmZvcm1hdGlvbi5cbiIKKyJcbiIKKyJZb3VyIHJlcG9ydCBzaG91bGQgY29udGFpbiB0aGUgdmVyc2lvbiBvZiB0aGlzIHJlbGVhc2UgKCVzKVxuIgorImFsb25nIHdpdGggdGhlIGVycm9yIG1lc3NhZ2UgYmVsb3csIHRoZSBvdXRwdXQgb2ZcbiIKKyJcbiIKKyJcdHBhcnRlZCBERVZJQ0UgdW5pdCBjbyBwcmludCB1bml0IHMgcHJpbnRcbiIKKyJcbiIKKyJhbmQgdGhlIGZvbGxvd2luZyBoaXN0b3J5IG9mIGNvbW1hbmRzIHlvdSBlbnRlcmVkLlxuIgorIkFsc28gaW5jbHVkZSBhbnkgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB5b3VyIHNldHVwIHlvdVxuIgorImNvbnNpZGVyIGltcG9ydGFudC5cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzoyODQKK21zZ2lkICIiCisiXG4iCisiQ29tbWFuZCBIaXN0b3J5OlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjM2NgorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogU0VHVl9NQVBFUlIgKEFkZHJlc3Mgbm90IG1hcHBlZCB0byBvYmplY3QpXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6MzcyCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBTRUdWX0FDQ0VSUiAoSW52YWxpZCBwZXJtaXNzaW9ucyBmb3IgbWFwcGVkIG9iamVjdClcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzozNzcKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEEgZ2VuZXJhbCBTSUdTRUdWIHNpZ25hbCB3YXMgZW5jb3VudGVyZWQuXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDEwCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfSU5URElWIChJbnRlZ2VyOiBkaXZpZGUgYnkgemVybykiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDE1Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfSU5UT1ZGIChJbnRlZ2VyOiBvdmVyZmxvdykiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDIwCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxURElWIChGbG9hdDogZGl2aWRlIGJ5IHplcm8pIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQyNQorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0ZMVE9WRiAoRmxvYXQ6IG92ZXJmbG93KSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0MzAKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRVTkQgKEZsb2F0OiB1bmRlcmZsb3cpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQzNQorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0ZMVFJFUyAoRmxvYXQ6IGluZXhhY3QgcmVzdWx0KSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0NDAKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRJTlYgKEZsb2F0OiBpbnZhbGlkIG9wZXJhdGlvbikiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDQ1Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxUU1VCIChGbG9hdDogc3Vic2NyaXB0IG91dCBvZiByYW5nZSkiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDUwCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBBIGdlbmVyYWwgU0lHRlBFIHNpZ25hbCB3YXMgZW5jb3VudGVyZWQuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQ4MworbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX0lMTE9QQyAoSWxsZWdhbCBPcGNvZGUpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQ4OAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX0lMTE9QTiAoSWxsZWdhbCBPcGVyYW5kKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0OTMKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9JTExBRFIgKElsbGVnYWwgYWRkcmVzc2luZyBtb2RlKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0OTgKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9JTExUUlAgKElsbGVnYWwgVHJhcCkiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NTAzCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfUFJWT1BDIChQcml2aWxlZ2VkIE9wY29kZSkiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NTA4Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfUFJWUkVHIChQcml2aWxlZ2VkIFJlZ2lzdGVyKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo1MTMKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9DT1BST0MgKENvcHJvY2Vzc29yIEVycm9yKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo1MTgKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9CQURTVEsgKEludGVybmFsIFN0YWNrIEVycm9yKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo1MjMKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEEgZ2VuZXJhbCBTSUdJTEwgc2lnbmFsIHdhcyBlbmNvdW50ZXJlZC4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6MTAyNAorIywgZnV6enkKK21zZ2lkICJFeHBlY3RpbmcgYSBwYXJ0aXRpb24gbnVtYmVyLiIKK21zZ3N0ciAi8sHaxMXMIM7B2s7B3sXOydEgydPQz8zY2tXF1NPRLiIKKworIzogcGFydGVkL3VpLmM6MTAzMworbXNnaWQgIlBhcnRpdGlvbiBkb2Vzbid0IGV4aXN0LiIKK21zZ3N0ciAi8sHaxMXMIM7FINPV3cXT1NfVxdQuIgorCisjOiBwYXJ0ZWQvdWkuYzoxMDUzCisjLCBmdXp6eQorbXNnaWQgIkV4cGVjdGluZyBhIGZpbGUgc3lzdGVtIHR5cGUuIgorbXNnc3RyICLuxcna18XT1M7ZyiDUydAgxsHKzM/Xz8og08nT1MXN2S4iCisKKyM6IHBhcnRlZC91aS5jOjEwNjAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gZmlsZSBzeXN0ZW0gdHlwZSBcIiVzXCIuIgorbXNnc3RyICLuxcna18XT1M7ZyiDUydAgxsHKzM/Xz8og08nT1MXN2S4iCisKKyM6IHBhcnRlZC91aS5jOjEwODAKK21zZ2lkICJFeHBlY3RpbmcgYSBkaXNrIGxhYmVsIHR5cGUuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjExNzgKKyMsIGZ1enp5Cittc2dpZCAiQ2FuJ3QgY3JlYXRlIGFueSBtb3JlIHBhcnRpdGlvbnMuIgorbXNnc3RyICLuxdfP2s3P1s7PINPLz9DJ0s/XwdTYINLB09vJ0sXOztnKINLB2sTFzC4iCisKKyM6IHBhcnRlZC91aS5jOjExODgKKyMsIGZ1enp5Cittc2dpZCAiRXhwZWN0aW5nIGEgcGFydGl0aW9uIHR5cGUuIgorbXNnc3RyICLywdrExcwgzsHazsHexc7J0SDOxSDT1d3F09TX1cXULiIKKworIzogcGFydGVkL3VpLmM6MTMxNQorbXNnaWQgIm9uIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjEzMTYKK21zZ2lkICJvZmYiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6MTQzMQorbXNnaWQgIk9QVElPTnM6IgorbXNnc3RyICLr7OD+6ToiCisKKyM6IHBhcnRlZC91aS5jOjE0MzYKK21zZ2lkICJDT01NQU5EczoiCittc2dzdHIgIuvv7eHu5Pk6IgorCisjOiBwYXJ0ZWQvdWkuYzoxNDQ1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVc2luZyAlc1xuIgorbXNnc3RyICIiCisiXG4iCisi6dPQz8zY2tXF1NPRICVzXG4iCisKKyM6IHBhcnRlZC91aS5jOjE1MTkKK21zZ2lkICJUaGlzIGNvbW1hbmQgZG9lcyBub3QgbWFrZSBzZW5zZSBpbiBub24taW50ZXJhY3RpdmUgbW9kZS5cbiIKK21zZ3N0ciAiIgorCisjfiBtc2dpZCAid2hlcmUgbmVjZXNzYXJ5LCBwcm9tcHRzIGZvciB1c2VyIGludGVydmVudGlvbiIKKyN+IG1zZ3N0ciAiy8/HxMEgzsXPwsjPxMnNzywg2sHQ0sHbydfBxdQg183F28HUxczY09TXzyDQz8zY2s/XwdTFzNEiCisKKyN+IG1zZ2lkICJEZXZpY2UgJXMgaXMgbmVpdGhlciBhIFNDU0kgbm9yIElERSBkcml2ZS4iCisjfiBtc2dzdHIgIvXT1NLPytPU188gJXMgzsUg0dfM0cXU09EgzskgU0NTSSwgzskgSURFIMTJ08vPzS4iCisKKyN+IG1zZ2lkICIiCisjfiAiVGhlIHNlY3RvciBzaXplIG9uICVzIGlzICVkIGJ5dGVzLiAgUGFydGVkIGlzIGtub3duIG5vdCB0byB3b3JrIHByb3Blcmx5ICIKKyN+ICJ3aXRoIGRyaXZlcyB3aXRoIHNlY3RvciBzaXplcyBvdGhlciB0aGFuIDUxMiBieXRlcyIKKyN+IG1zZ3N0ciAiIgorI34gIvPFy9TP0tkgzsEgJXMgyc3FwNQg0sHazcXSICVkIMLBytQuICDz3snUwcXU09EsIN7UzyBQYXJ0ZWQg0sHCz9TBxdQgIgorI34gIs7F0NLB18nM2M7PINMg1dPU0s/K09TXwc3JLCDSwdrNxdIg08XL1M/Sz9cgy8/Uz9LZyCDP1MzJ3sHF1NPRIM/UIDUxMiDCwcrUIgorCisjfiBtc2dpZCAiQ291bGQgbm90IHJlYWQgZ2VvbWV0cnkgb2YgJXMgLSAlcy4iCisjfiBtc2dzdHIgIu7FINXEwcXU09Eg0NLP3snUwdTYIMfFz83F1NLJwCAlcyAtICVzLiIKKworI34gbXNnaWQgIkRldmljZSAlcyBoYXMgZG9kZ2V5IGdlb21ldHJ5LiIKKyN+IG1zZ3N0ciAi9dPU0s/K09TXzyAlcyDJzcXF1CDT1NLBzs7VwCDHxc/NxdTSycAuIgorCisjfiBtc2dpZCAiVW5rbm93biBTQ1NJIgorI34gbXNnc3RyICLuxcna18XT1M7ZyiBTQ1NJIgorCisjfiBtc2dpZCAiIgorI34gIlRoZXJlIGlzIG5vIGJvb3QgY29kZSBvbiB0aGlzIGRpc2suICBXb3VsZCB5b3UgbGlrZSB0byB1c2UgR05VIHBhcnRlZCdzICIKKyN+ICJib290IGxvYWRlcj8iCisjfiBtc2dzdHIgIiIKKyN+ICLuwSDc1M/NIMTJ08vFIM7F1CDLz8TBINrBx9LV2svJLiAg99kgyM/UydTFIMnT0M/M2NrP18HU2CDawcfS1dreycsgR05VICIKKyN+ICJwYXJ0ZWQ/IgorCisjfiBtc2dpZCAiIgorI34gIlRoZSBwYXJ0aXRpb24gdGFibGUgb24gJXMgaXMgaW5jb25zaXN0ZW50LiAgVGhlcmUgYXJlIG1hbnkgcmVhc29ucyB3aHkgIgorI34gInRoaXMgbWlnaHQgYmUgdGhlIGNhc2UuICBIb3dldmVyLCB0aGUgbW9zdCBsaWtlbHkgcmVhc29uIGlzIHRoYXQgTGludXggIgorI34gImRldGVjdGVkIHRoZSBCSU9TIGdlb21ldHJ5IGZvciAlcyBpbmNvcnJlY3RseS4gIEdOVSBQYXJ0ZWQgc3VzcGVjdHMgdGhlICIKKyN+ICJyZWFsIGdlb21ldHJ5IHNob3VsZCBiZSAlZC8lZC8lZCAobm90ICVkLyVkLyVkKS4gIFlvdSBzaG91bGQgY2hlY2sgd2l0aCAiCisjfiAieW91ciBCSU9TIGZpcnN0LCBhcyB0aGlzIG1heSBub3QgYmUgY29ycmVjdC4gIFlvdSBjYW4gaW5mb3JtIExpbnV4IGJ5ICIKKyN+ICJhZGRpbmcgdGhlIHBhcmFtZXRlciAlcz0lZCwlZCwlZCB0byB0aGUgY29tbWFuZCBsaW5lLiAgU2VlIHRoZSBMSUxPICIKKyN+ICJkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLiAgSWYgeW91IHRoaW5rIFBhcnRlZCdzIHN1Z2dlc3RlZCAiCisjfiAiZ2VvbWV0cnkgaXMgY29ycmVjdCwgeW91IG1heSBzZWxlY3QgSWdub3JlIHRvIGNvbnRpbnVlIChhbmQgZml4IExpbnV4ICIKKyN+ICJsYXRlcikuICBPdGhlcndpc2UsIHNlbGVjdCBDYW5jZWwgKGFuZCBmaXggTGludXggYW5kL29yIHRoZSBCSU9TIG5vdykuIgorI34gbXNnc3RyICIiCisjfiAi9MHCzMnDwSDSwdrExczP1yDOwSAlcyDR18zRxdTT0SDQ0s/UydfP0sXeydfPyi4gIPPV3cXT1NfVxdQgzc7Px88g0NLJ3snOLCAiCisjfiAi1yDTyczVIMvP1M/S2cgg3NTPIM3P1sXUIMnNxdTYIM3F09TPLiAg78TOwcvPLCDXxdLP0dTOxcUg19PFx88sIExpbnV4ICIKKyN+ICLOxdDSwdfJzNjOzyDP0NLFxMXMycwgx8XPzcXU0snAIEJJT1MgxMzRICVzLiAgR05VIFBhcnRlZCDQz8TP2tLF18HF1Cwg3tTPICIKKyN+ICLSxcHM2M7B0SDHxc/NxdTSydEgxM/M1s7BIMLZ1NggJWQvJWQvJWQgKMEgzsUgJWQvJWQvJWQpLiAg887B3sHMwSDX2SAiCisjfiAixM/M1s7ZINDSz9fF0snU2CBCSU9TLCDUwcsgy8HLINzUzyDNz9bF1CDC2dTYIM7F18XSzs8uICD32SDNz9bF1MUg0dfOzyAiCisjfiAi1cvB2sHU2CDFxSBMaW51eCwgxM/CwdfJ1yDXIMvPzcHOxM7PyiDT1NLPy8Ug0MHSwc3F1NIgJXM9JWQsJWQsJWQuICDkzNEgIgorI34gIsTP0M/MzsnUxczYzs/KIMnOxs/SzcHDycksINPNLiDEz8vVzcXO1MHDycAgzsEgTElMTy4gIOXTzMkg19kg097J1MHF1MUsICIKKyN+ICLe1M8g0NLFxMzP1sXOzsHRIFBhcnRlZCDHxc/NxdTSydEg18XSzsEsINfZwsXSydTFIOnHzs/SydLP18HU2CDEzNEgIgorI34gItDSz8TPzNbFzsnRICjJINPLz9LSxcvUydLVytTFIExpbnV4INDP2tbFKS4gIOnOwd7FLCDX2cLF0snUxSDv1M3FztUgKMkgIgorI34gItPLz9LSxcvUydLVytTFIExpbnV4IMkvyczJIEJJT1Mg08XK3sHTKS4iCisKKyN+IG1zZ2lkICIiCisjfiAiVGhlIHBhcnRpdGlvbiB0YWJsZSBvbiAlcyBpcyBpbmNvbnNpc3RlbnQuICBUaGVyZSBhcmUgbWFueSByZWFzb25zIHdoeSAiCisjfiAidGhpcyBtaWdodCBiZSB0aGUgY2FzZS4gIE9mdGVuLCB0aGUgcmVhc29uIGlzIHRoYXQgTGludXggZGV0ZWN0ZWQgdGhlICIKKyN+ICJCSU9TIGdlb21ldHJ5IGluY29ycmVjdGx5LiAgSG93ZXZlciwgdGhpcyBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgdGhlIGNhc2UgIgorI34gImhlcmUuIgorI34gbXNnc3RyICIiCisjfiAi8NLP1MnXz9LF3snXwdEg1MHCzMnDwSDSwdrExczP1yDOwSAlcy4gIPzUzyDNz9bF1CDJzcXU2CDNxdPUzyDXINPJzNUgIgorI34gIs3Oz8fJyCDQ0sneyc4uICD+wdPUzyDc1M8g0NLPydPIz8TJ1CDQz9TPzdUsIN7UzyBMaW51eCDOxdDSwdfJzNjOzyAiCisjfiAiz9DSxcTFzNHF1CDHxc/NxdTSycAgQklPUy4gIO/EzsHLzywg1yDEwc7Oz80g08zV3sHFINDSyd7JzsEsINfJxMnNzywgyc7B0S4iCisKKyN+IG1zZ2lkICJObyBnZXRfbWluX3NpemUoKSBmb3IgJXMhIgorI34gbXNnc3RyICLuxdQgZ2V0X21pbl9zaXplKCkgxMzRICVzISIKKworI34gbXNnaWQgIk5vIGdldF9zeXN0ZW0oKSBmb3IgJXMhIgorI34gbXNnc3RyICLuxdQgZ2V0X3N5c3RlbSgpIMTM0SAlcyEiCisKKyN+IG1zZ2lkICJDcmVhdGluZyBuZXcgJXMgZGlza2xhYmVscyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKKyN+IG1zZ3N0ciAi88/axMHOycUgzs/X2cggJXMgzcXUz8sgxMnTy8Eg0M/LwSDOxSDSxcHMydrP18HOzy4iCisKKyN+IG1zZ2lkICJUaGUgY29kZSB0byB3cml0ZSB0aGUgcGFydGl0aW9uIHRhYmxlIGhhc24ndCBiZWVuIHdyaXR0ZW4gZm9yICVzIHlldCIKKyN+IG1zZ3N0ciAi8NLPx9LBzc3BIMTM0SDawdDJ08kg1MHCzMnD2SDSwdrExczP1yDEzNEgJXMg0M/LwSDOxSDOwdDJ08HOwSIKKworI34gbXNnaWQgIkNhbid0IGNyZWF0ZSBhIHBhcnRpdGlvbiB3aXRoIHRoZSBzdGFydCBhZnRlciB0aGUgZW5kLiIKKyN+IG1zZ3N0ciAiIgorI34gIu7F18/azc/Wzs8g08/axMHU2CDSwdrExcwsINUgy8/Uz9LPx88gzsHewczPINLB09DPzM/Wxc7PINDP08zFIMvPzsPBLiIKKworI34gbXNnaWQgIiIKKyN+ICJObyBmaWxlc3lzdGVtIGZvdW5kIG9uIHBhcnRpdGlvbi4gIENhbid0IGRldGVybWluZSB3aGF0IHBhcnRpdGlvbiBzeXN0ZW0gIgorI34gInRvIHVzZS4iCisjfiBtc2dzdHIgIiIKKyN+ICLuwSDSwdrExczFIM7FIM7BysTFzs8gzskgz8TOz8ogxsHKzM/Xz8og08nT1MXN2S4gIO7F18/azc/Wzs8gz9DSxcTFzMnU2CwgIgorI34gIsvBy9XAINPJ09TFzdUg0sHaxMXMz9cgydPQz8zY2s/XwdTYLiIKKworI34gbXNnaWQgIkVycm9yIHJlYWRpbmcgJXMgKCVzKSB0byBkZXRlcm1pbmUgaWYgcGFydGl0aW9uIGlzIG1vdW50ZWQuIgorI34gbXNnc3RyICIiCisjfiAi79vJwsvBINDSySDe1MXOyckgJXMgKCVzKSDEzNEgz9DSxcTFzMXOydEsINHXzNHF1NPRIMzJINLB2sTFzCAiCisjfiAi2sHNz87UydLP18HOztnNLiIKKworI34gbXNnaWQgIkNhbid0IGdyb3cgcGFydGl0aW9uIG9udG8gdXNlZCBzcGFjZSwgb3Igb3V0c2lkZSB0aGUgZGlzay4iCisjfiBtc2dzdHIgIiIKKyN+ICLuxdfP2s3P1s7PINXXxczJ3snU2CDSwdrExcwg2sEg097F1CDJ09DPzNja1cXNz8fPINDSz9PU0sHO09TXwSwgyczJINrBICIKKyN+ICLQ0sXExczZIMTJ08vBLiIKKworI34gbXNnaWQgIkF0dGVtcHQgdG8gcmVhZCBzZWN0b3JzICVsZC0lbGQgb3V0c2lkZSBvZiBwYXJ0aXRpb24gb24gJXMiCisjfiBtc2dzdHIgIvDP0NnUy8Eg0NLP3snUwdTYINPFy9TP0sEgJWxkLSVsZCDXzsUg0sHaxMXMwSDOwSAlcyIKKworI34gbXNnaWQgIiIKKyN+ICJUaGlzIGV4dDIgZmlsZXN5c3RlbSBoYXMgYSByYXRoZXIgc3RyYW5nZSBsYXlvdXQhICBQbGVhc2UgdXNlIGR1bXBlMmZzIG9uICIKKyN+ICJ0aGlzIGZpbGVzeXN0ZW0gYW5kIHNlbmQgaXQgdG8gPGJ1eXRlbmhAZ251Lm9yZz4uIEkgd29uJ3QgcmVzaXplIGl0LCAiCisjfiAic29ycnkuIgorI34gbXNnc3RyICIiCisjfiAi/NTBIMbByszP18HRINPJ09TFzcEgZXh0MiDJzcXF1CDEz9fPzNjOzyDT1NLBzs7VwCDTyMXN1SEgIPDP1sHM1crT1MEsICIKKyN+ICLJ09DPzNja1crUxSBkdW1wZTJmcyDEzNEg3NTPyiDGwcrMz9fPyiDTydPUxc3ZIMkg0M/bzMnUxSDSxdrVzNjUwdQgIgorI34gIjxidXl0ZW5oQGdudS5vcmc+LiDywdrNxdIgzsUgwtXExdQgydrNxc7FziwgydrXyc7J1MUuIgorCisjfiBtc2dpZCAiSW5zYW5lISAgJWQgY2x1c3RlcnMhIgorI34gbXNnc3RyICLz1NLBzs7PISAgJWQgy8zB09TF0s/XISIKKworI34gbXNnaWQgIiIKKyN+ICJUaGUgZmlsZXN5c3RlbSBpcyBnb2luZyB0byBiZSB0b28gYmlnIGZvciBGQVQxNiwgc28gRkFUMzIgd2lsbCBiZSB1c2VkLiAgIgorI34gIlRoaXMgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBNUy1ET1MsIGVhcmx5IHZlcnNpb25zIG9mIE1TLVdpbmRvd3MgOTUgYW5kICIKKyN+ICJXaW5kb3dzIE5ULiAgSWYgeW91IHVzZSB0aGVzZSBvcGVyYXRpbmcgc3lzdGVtcywgdGhlbiBzZWxlY3QgY2FuY2VsLCBhbmQgIgorI34gImNyZWF0ZSBhIHNtYWxsZXIgcGFydGl0aW9uLiAgSWYgeW91IG9ubHkgdXNlIExpbnV4LCBCU0QsIE1TIFdpbmRvd3MgOTggIgorI34gImFuZC9vciBNUyBXaW5kb3dzIDk1IEIsIHRoZW4gc2VsZWN0IE9LLiIKKyN+IG1zZ3N0ciAiIgorI34gIubByszP18HRINPJ09TFzcEg09TBzs/XydTT0SDTzMnby8/NIMLPzNjbz8ogxMzRIEZBVDE2LCDUwcsg3tTPIMLVxMXUICIKKyN+ICLJ09DPzNjaz9fBzsEgRkFUMzIuICD81M8gzsUg08/XzcXT1MnNzyDTIE1TLURPUywg0sHOzsnNySDXxdLTydHNySBNUy0iCisjfiAiV2luZG93cyA5NSDJIFdpbmRvd3MgTlQuICDl08zJINfZIMnT0M/M2NrVxdTFINzUySDP0MXSwcPJz87O2cUg08nT1MXN2SwgIgorI34gItfZwsXSydTFIM/UzcXO1SDJINPP2sTBytTFIM3Fztjbycog0sHaxMXMLiAg5dPMySDX2SDJ09DPzNja1cXUxSDUz8zYy88gIgorI34gIkxpbnV4LCBCU0QsIE1TIFdpbmRvd3MgOTggyS/JzMkgTVMgV2lkbm93cyA5NSBCLCDX2cLF0snUxSBPSy4iCisKKyN+IG1zZ2lkICJXZWlyZDogZmF0X2NhbGNfc2l6ZXMoKSBmYWlsZWQgZm9yIEZBVDMyISIKKyN+IG1zZ3N0ciAi89TSwc7Ozzogz9vJwsvBINcgZmF0X2NhbGNfc2l6ZXMoKSDEzNEgRkFUMzIhIgorCisjfiBtc2dpZCAiIgorI34gIldvdWxkIHlvdSBsaWtlIHRvIHVzZSBGQVQzMiBmb3IgdGhpcyBmaWxlc3lzdGVtPyAgSXQgaXMgbXVjaCBtb3JlICIKKyN+ICJlZmZpY2llbnQgd2l0aCB5b3VyIGRpc2sgc3BhY2UsIGJ1dCBpcyBub3QgY29tcGF0aWJsZSB3aXRoIGVhcmx5IHZlcnNpb25zICIKKyN+ICJvZiBXaW5kb3dzIDk1IGFuZCBXaW5kb3dzIE5ULiAgT25seSBzZWxlY3QgeWVzIGlmIHlvdSBvbmx5IHVzZSBMaW51eCwgIgorI34gIkJTRCwgTVMgV2luZG93cyA5OCBhbmQvb3IgTVMgV2luZG93cyA5NSBCLiIKKyN+IG1zZ3N0ciAiIgorI34gIujP1MnUxSDJ09DPzNjaz9fB1NggRkFUMzIgxMzRINzUz8ogxsHKzM/Xz8og08nT1MXN2T8gIO/OwSDOwc3Oz8fPICIKKyN+ICLcxsbFy9TJ187FxSDJ09DPzNja1cXUIMTJ08vP18/FINDSz9PU0sHO09TXzywgzs8gzsXTz9fNxdPUyc3BINMg0sHOzsnNySAiCisjfiAi18XS08nRzckgV2luZG93cyA5NSDJIFdpbmRvd3MgTlQuICD32cLF0snUxSBgxMEnIMzJ29gg1yDTzNXewcUsIMXTzMkgIgorI34gIsnT0M/M2NrVxdTFINTPzNjLzyBMaW51eCwgQlNELCBNUyBXaW5kb3dzIDk4IMkvyczJIE1TIFdpbmRvd3MgOTUgQi4iCisKKyN+IG1zZ2lkICIiCisjfiAiRmlsZSBzeXN0ZW0gZG9lc24ndCBoYXZlIGV4cGVjdGVkIHNpemVzIGZvciBXaW5kb3dzIHRvIGxpa2UgaXQuICBOdW1iZXIgIgorI34gIm9mIGNsdXN0ZXJzIGlzICVkICglZCBleHBlY3RlZCk7IHNpemUgb2YgRkFUcyBpcyAlZCBzZWN0b3JzICglZCBleHBlY3RlZCkuIgorI34gbXNnc3RyICIiCisjfiAiV2luZG93cyDOxSDNz9bF1CDSwcLP1MHU2CDTIMbByszP18/KINPJ09TFzc/KLCDJzcXA3cXKINTBy8nFINLB2s3F0tkuICAiCisjfiAi/snTzM8gy8zB09TF0s/XICVkICjP1snEwcXNz8UgJWQpOyDSwdrNxdIgRkFUICVkINPFy9TP0s/XICjP1snEwcXN2cogJWQpLiIKKworI34gbXNnaWQgIkZBVCBmaWxlc3lzdGVtcyBkb24ndCBoYXZlIGFuIGlkIGZvciBub24tbXNkb3MgcGFydGl0aW9uIHRhYmxlcyIKKyN+IG1zZ3N0ciAiIgorI34gIubByszP19nFINPJ09TFzdkgRkFUIM7FIMnNxcDUIMnExc7UycbJy8HUz9LBIMTM0SDOxS1tc2RvcyDUwcLMycMg0sHaxMXMz9ciCisKKyN+IG1zZ2lkICIiCisjfiAiV291bGQgeW91IGxpa2UgdG8gdXNlIEZBVDMyPyAgSXQgaXMgbW9yZSBlZmZpY2llbnQsIGJ1dCBpdCBpcyBub3QgIgorI34gImNvbXBhdGlibGUgd2l0aCBNUy1ET1MsIGVhcmx5IHZlcnNpb25zIG9mIE1TLVdpbmRvd3MgOTUgYW5kIFdpbmRvd3MgTlQuICAiCisjfiAiSWYgeW91IHVzZSB0aGVzZSBvcGVyYXRpbmcgc3lzdGVtcywgdGhlbiBzZWxlY3QgTm8uICBJZiB5b3Ugb25seSB1c2UgIgorI34gIkxpbnV4LCBCU0QsIE1TIFdpbmRvd3MgOTggYW5kL29yIE1TIFdpbmRvd3MgOTUgQiwgdGhlbiB5b3UgbWF5IHNlbGVjdCBZZXMuIgorI34gbXNnc3RyICIiCisjfiAi99kgyM/UydTFIMnT0M/M2NrP18HU2CBGQVQzMj8gIO/OwSDCz8zFxSDcxsbFy9TJ187BLCDOzyDOxSDTz9fNxdPUyc3BINMgIgorI34gIk1TLURPUywg0sHOzsnNySDXxdLTydHNySBNUy1XaW5kb3dzIDk1IMkgV2luZG93cyBOVC4gIOXTzMkg19kgydPQz8zY2tXF1MUgIgorI34gItzUySDP0MXSwcPJz87O2cUg08nT1MXN2Swg19nCxdLJ1MUg7sXULiAg5dPMySDX2SDJ09DPzNja1cXUxSDUz8zYy88gIgorI34gIkxpbnV4LCBCU0QsIE1TIFdpbmRvd3MgOTggyS/JzMkgTVMgV2lkbm93cyA5NSBCLCDUz8fEwSDNz9bF1MUg19nC0sHU2CDkwS4iCisKKyN+IG1zZ2lkICIiCisjfiAiVGhlIGZpbGVzeXN0ZW0gaXMgZ29pbmcgdG8gYmUgdG9vIGJpZyBmb3IgRkFUMTYsIHNvIEZBVDMyIG11c3QgYmUgdXNlZC4gICIKKyN+ICJUaGlzIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggTVMtRE9TLCBlYXJseSB2ZXJzaW9ucyBvZiBNUy1XaW5kb3dzIDk1IGFuZCAiCisjfiAiV2luZG93cyBOVC4gIElmIHlvdSB1c2UgdGhlc2Ugb3BlcmF0aW5nIHN5c3RlbXMsIHRoZW4gc2VsZWN0IENhbmNlbCwgYW5kICIKKyN+ICJjcmVhdGUgYSBzbWFsbGVyIHBhcnRpdGlvbi4gIElmIHlvdSBvbmx5IHVzZSBMaW51eCwgQlNELCBNUyBXaW5kb3dzIDk4ICIKKyN+ICJhbmQvb3IgTVMgV2luZG93cyA5NSBCLCB0aGVuIHNlbGVjdCBPSy4iCisjfiBtc2dzdHIgIiIKKyN+ICLmwcrMz9fB0SDTydPUxc3BINPUwc7P18nU09Eg08zJ28vPzSDCz8zY28/KIMTM0SBGQVQxNiwg1MHLIN7UzyDC1cTF1CAiCisjfiAiydPQz8zY2s/Xwc7BIEZBVDMyLiAg/NTPIM7FINPP183F09TJzc8g0yBNUy1ET1MsINLBzs7Jzckg18XS08nRzckgTVMtIgorI34gIldpbmRvd3MgOTUgySBXaW5kb3dzIE5ULiAg5dPMySDX2SDJ09DPzNja1cXUxSDc1Mkgz9DF0sHDyc/OztnFINPJ09TFzdksICIKKyN+ICLX2cLF0snUxSDv1M3FzsnU2CDJINPP2sTBytTFIM3Fztjbycog0sHaxMXMLiAg5dPMySDX2SDJ09DPzNja1cXUxSDUz8zYy88gIgorI34gIkxpbnV4LCBCU0QsIE1TIFdpbmRvd3MgOTggyS/JzMkgTVMgV2lkbm93cyA5NSBCLCDX2cLF0snUxSBPSy4iCisKKyN+IG1zZ2lkICJGaWxlc3lzdGVtIGhhcyBhbiBpbnZhbGlkIHNpZ25hdHVyZSBmb3IgYSBGQVQgZmlsZXN5c3RlbXMuIgorI34gbXNnc3RyICLmwcrMz9fB0SDTydPUxc3BIMnNxcXUIM7F18XSztXAIMTM0SBGQVQg08nHzsHU1dLVLiIKKworI34gbXNnaWQgIiIKKyN+ICJQYXJ0aXRpb24gc2l6ZSAoJWxkIHNlY3RvcnMpIGFuZCBmaWxlc3lzdGVtIHNpemUgKCVkIHNlY3RvcnMpIGRvIG5vdCAiCisjfiAibWF0Y2guIgorI34gbXNnc3RyICIiCisjfiAi8sHazcXS2SDSwdrExczBICglbGQg08XL1M/Sz9cpIMkgxsHKzM/Xz8og08nT1MXN2SAoJWQg08XL1M/Sz9cpIM7FICIKKyN+ICLTz9fQwcTBwNQuIgorCisjfiBtc2dpZCAiIgorI34gIlRoaXMgc3dhcCBwYXJ0aXRpb24gaXMgbm90IGNvbXBhdGlibGUgd2l0aCBMaW51eCB2ZXJzaW9uIDIuMS4xMTcgb3IgIgorI34gImVhcmxpZXIuICBVc2UgYSBzbWFsbGVyIHBhcnRpdGlvbiAobWF4aW11bSBzaXplIDEyOG1iKSBpZiB5b3Ugd2FudCB0byB1c2UgIgorI34gIm9sZCB2ZXJzaW9ucyBvZiBMaW51eC4iCisjfiBtc2dzdHIgIiIKKyN+ICL81M/UIHN3YXAt0sHaxMXMIM7FINPP183F09TJzSDTIExpbnV4INfF0tPJySAyLjEuMTE3IMnMySDCz8zFxSDSwc7OxcouICAiCisjfiAi6dPQz8zY2tXK1MUgzcXO2NvJyiDSwdrExcwgKM3By9PJzcHM2M7ZyiDSwdrNxdIgMTI47eIpLCDF08zJINfZIMjP1MnUxSAiCisjfiAiydPQz8zY2s/XwdTYINPUwdLZxSDXxdLTyckgTGludXguIgorCisjfiBtc2dpZCAiTGludXgtc3dhcCBwYXJ0aXRpb25zIGNhbiBub3QgYmUgaGlkZGVuLiIKKyN+IG1zZ3N0ciAic3dhcC3SwdrExcwgTGludXggzsUgzc/WxdQgwtnU2CDTy9LZ1C4iCisKKyN+IG1zZ2lkICJTVEFSVCBhbmQgRU5EIGFyZSBpbiBjeWxpbmRlcnNcbiIKKyN+IG1zZ3N0ciAiU1RBUlQgySBFTkQgzsHIz8TR1NPRINcgw8nMyc7E0sHIXG4iCisKKyN+IG1zZ2lkICJoaWRlIgorI34gbXNnc3RyICJoaWRlIgorCisjfiBtc2dpZCAiRGlzayBnZW9tZXRyeTogMS0lZCwgJWRrIGN5bGluZGVyc1xuIgorI34gbXNnc3RyICLnxc/NxdTSydEgxMnTy8E6IDEtJWQsICVkayDDyczJzsTSz9dcbiIKKworI34gbXNnaWQgIk1pbm9yICAgIFN0YXJ0ICAgIEVuZCAgICAgIFR5cGUgICAgICAgICAgICBGaWxlc3lzdGVtICAgICBGbGFnc1xuIgorI34gbXNnc3RyICLuz83F0iAgICDuwd7BzM8gICDrz87FwyAgICD0ydAgICAgICAg5sHKzM/XwdEg08nT1MXNwSAgICAg5szBx8lcbiIKKworI34gbXNnaWQgInVuaGlkZSIKKyN+IG1zZ3N0ciAidW5oaWRlIgorCisjfiBtc2dpZCAiaGlkZSBNSU5PUiAgICAgICAgICAgICAgICAgICAgaGlkZXMgcGFydGl0aW9uIE1JTk9SIgorI34gbXNnc3RyICJoaWRlIE1JTk9SICAgICAgICAgICAgICAgICAgICDTy9LZ1Ngg0sHaxMXMIE1JTk9SIgorCisjfiBtc2dpZCAidW5oaWRlIE1JTk9SICAgICAgICAgICAgICAgICAgdW5oaWRlcyBwYXJ0aXRpb24gTUlOT1IiCisjfiBtc2dzdHIgInVuaGlkZSBNSU5PUiAgICAgICAgICAgICAgICAgIMTFzMHF1CDXycTJzdnNINLB2sTFzCBNSU5PUiIKKworI34gbXNnaWQgIiIKKyN+ICJZb3UgZm91bmQgYSBidWcgaW4gR05VIFBhcnRlZC4gIFBsZWFzZSBlbWFpbCBhIGJ1ZyByZXBvcnQgdG8gYnVnLSIKKyN+ICJwYXJ0ZWRAZ251Lm9yZyBjb250YWluaW5nIHRoZSB2ZXJzaW9uICglcyksIGFuZCB0aGUgZm9sbG93aW5nIG1lc3NhZ2U6XG4iCisjfiBtc2dzdHIgIiIKKyN+ICL32SDPws7B0tXWyczJIM/bycLL1SDXIEdOVSBwYXJ0ZWQuICDwz9bBzNXK09TBLCDQz9vMydTFIM/U3sXUIM/CIM/bycLLxVxuIgorI34gItDPIMHE0sXT1SBidWctcGFydGVkQGdudS5vcmcsINPPxMXS1sHdycog18XS08nAICglcykgyVxuIgorI34gItPMxcTVwN3FxSDTz8/C3cXOycU6XG4iCisKKyN+IG1zZ2lkICIiCisjfiAiVGhlIG9wZXJhdGluZyBzeXN0ZW0gdGhpbmtzIHRoZSBnZW9tZXRyeSBvbiAlcyBpcyAlZC8lZC8lZC4gIFlvdSBzaG91bGQgIgorI34gImNoZWNrIHRoYXQgdGhpcyBtYXRjaGVzIHRoZSBCSU9TIGdlb21ldHJ5IGJlZm9yZSB1c2luZyB0aGlzIHByb2dyYW0uIgorI34gbXNnc3RyICIiCisjfiAi79DF0sHDyc/OzsHRINPJ09TFzcEgz9DSxcTFzMnMwSDHxc/NxdTSycAgzsEgJXMgy8HLICVkLyVkLyVkLiAg8MXSxcQgIgorI34gIsnT0M/M2NrP18HOycXNINDSz8fSwc3N2Swg19kgxM/M1s7ZINDSz9fF0snU2Cwg3tTPINzUzyDTz8/U18XU09TX1cXUICIKKyN+ICLHxc/NxdTSycksINXLwdrBzs7PyiDXIEJJT1MuIgpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L3BvL3J3LmdtbyBiL3BhcnRlZC0xLjguNy9wby9ydy5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY3YmQyZAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9wby9ydy5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L3BvL3J3LnBvIGIvcGFydGVkLTEuOC43L3BvL3J3LnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMjNhMGEKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvcG8vcncucG8KQEAgLTAsMCArMSwzMzU0IEBACisjIEtpbnlhcndhbmRhIHRyYW5zbGF0aW9ucyBmb3IgcGFydGVkIHBhY2thZ2UuCisjIENvcHlyaWdodCAoQykgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgU3RldmUgTXVycGh5IDxtdXJmQGUtdG9vbHMuY29tPiwgMjAwNS4KKyMgU3RldmUgcGVyZm9ybWVkIGluaXRpYWwgcm91Z2ggdHJhbnNsYXRpb24gZnJvbSBjb21wZW5kaXVtIGJ1aWx0IGZyb20gdHJhbnNsYXRpb25zIHByb3ZpZGVkIGJ5IHRoZSBmb2xsb3dpbmcgdHJhbnNsYXRvcnM6CisjIFBoaWxpYmVydCBOZGFuZGFsaSAgPG5kYW5kYWxpQHlhaG9vLmZyPiwgMjAwNS4KKyMgVmlhdGV1ciBNVUdFTlpJIDxtdXZpYTFAeWFob28uZnI+LCAyMDA1LgorIyBOb8OrbGxhIE11cG9sZSA8czI0MjExMDQ1QHR1a3MuY28uemE+LCAyMDA1LgorIyBDYXJvbGUgS2FyZW1hIDxrYXJlbWFjYXJvbGVAaG90bWFpbC5jb20+LCAyMDA1LgorIyBKRUFOIEJBUFRJU1RFIE5HRU5EQUhBWU8gPG5nZW5kYV9kZW5pc0B5YWhvby5jby51az4sIDIwMDUuCisjIEF1Z3VzdGluIEtJQkVSV0EgIDxha2liZXJ3YUB5YWhvby5jby51az4sIDIwMDUuCisjIERvbmF0aWVuIE5TRU5HSVlVTVZBIDxuZG9uYXRpZW51a0B5YWhvby5jby51az4sIDIwMDUuCisjIEFudG9pbmUgQmlnaXJpbWFuYSA8YW50b2luZUBlLXRvb2xzLmNvbT4sIDIwMDUuCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBwYXJ0ZWQgMS42LjZcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogYnVnLXBhcnRlZEBnbnUub3JnXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMDctMDUtMDkgMTc6MDItMDQwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDUtMDQtMDQgMTA6NTUtMDcwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogU3RldmVuIE1pY2hhZWwgTXVycGh5IDxtdXJmQGUtdG9vbHMuY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IEtpbnlhcndhbmRhIDx0cmFuc2xhdGlvbi10ZWFtLXJ3QGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKworIzogbGliL2Nsb3Nlb3V0LmM6NzQKK21zZ2lkICJ3cml0ZSBlcnJvciIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXJyb3IuYzoxMjUKKyMsIGZ1enp5Cittc2dpZCAiVW5rbm93biBzeXN0ZW0gZXJyb3IiCittc2dzdHIgIklET1NJWUUgU2lzaXRlbXUgVWJ3b2tvIgorCisjOiBsaWIvZ2V0b3B0LmM6NTMxIGxpYi9nZXRvcHQuYzo1NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiBgJXMnIGlzIGFtYmlndW91c1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo1ODAgbGliL2dldG9wdC5jOjU4NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIGAtLSVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjU5MyBsaWIvZ2V0b3B0LmM6NTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYCVjJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6NjQxIGxpYi9nZXRvcHQuYzo2NjAgbGliL2dldG9wdC5jOjk3NiBsaWIvZ2V0b3B0LmM6OTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYCVzJyByZXF1aXJlcyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo2OTggbGliL2dldG9wdC5jOjcwMQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5yZWNvZ25pemVkIG9wdGlvbiBgLS0lcydcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6NzA5IGxpYi9nZXRvcHQuYzo3MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVucmVjb2duaXplZCBvcHRpb24gYCVjJXMnXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjc2NCBsaWIvZ2V0b3B0LmM6NzY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbGxlZ2FsIG9wdGlvbiAtLSAlY1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo3NzMgbGliL2dldG9wdC5jOjc3NgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBvcHRpb24gLS0gJWNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6ODI4IGxpYi9nZXRvcHQuYzo4NDQgbGliL2dldG9wdC5jOjEwNDggbGliL2dldG9wdC5jOjEwNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCAtLSAlY1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo4OTcgbGliL2dldG9wdC5jOjkxMworIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIGAtVyAlcycgaXMgYW1iaWd1b3VzXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjkzNyBsaWIvZ2V0b3B0LmM6OTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYC1XICVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6CisjLiBHZXQgdHJhbnNsYXRpb25zIGZvciBvcGVuIGFuZCBjbG9zaW5nIHF1b3RhdGlvbiBtYXJrcy4KKyMuCisjLiBUaGUgbWVzc2FnZSBjYXRhbG9nIHNob3VsZCB0cmFuc2xhdGUgImAiIHRvIGEgbGVmdAorIy4gcXVvdGF0aW9uIG1hcmsgc3VpdGFibGUgZm9yIHRoZSBsb2NhbGUsIGFuZCBzaW1pbGFybHkgZm9yCisjLiAiJyIuICBJZiB0aGUgY2F0YWxvZyBoYXMgbm8gdHJhbnNsYXRpb24sCisjLiBsb2NhbGVfcXVvdGluZ19zdHlsZSBxdW90ZXMgYGxpa2UgdGhpcycsIGFuZAorIy4gY2xvY2FsZV9xdW90aW5nX3N0eWxlIHF1b3RlcyAibGlrZSB0aGlzIi4KKyMuCisjLiBGb3IgZXhhbXBsZSwgYW4gQW1lcmljYW4gRW5nbGlzaCBVbmljb2RlIGxvY2FsZSBzaG91bGQKKyMuIHRyYW5zbGF0ZSAiYCIgdG8gVSsyMDFDIChMRUZUIERPVUJMRSBRVU9UQVRJT04gTUFSSyksIGFuZAorIy4gc2hvdWxkIHRyYW5zbGF0ZSAiJyIgdG8gVSsyMDFEIChSSUdIVCBET1VCTEUgUVVPVEFUSU9OCisjLiBNQVJLKS4gIEEgQnJpdGlzaCBFbmdsaXNoIFVuaWNvZGUgbG9jYWxlIHNob3VsZCBpbnN0ZWFkCisjLiB0cmFuc2xhdGUgdGhlc2UgdG8gVSsyMDE4IChMRUZUIFNJTkdMRSBRVU9UQVRJT04gTUFSSykgYW5kCisjLiBVKzIwMTkgKFJJR0hUIFNJTkdMRSBRVU9UQVRJT04gTUFSSyksIHJlc3BlY3RpdmVseS4KKyMuCisjLiBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIHB1dCBoZXJlLCBwbGVhc2Ugc2VlCisjLiA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9RdW90YXRpb25fbWFyayNHbHlwaHM+CisjLiBhbmQgdXNlIGdseXBocyBzdWl0YWJsZSBmb3IgeW91ciBsYW5ndWFnZS4KKyM6IGxpYi9xdW90ZWFyZy5jOjIyOQorbXNnaWQgImAiCittc2dzdHIgIiIKKworIzogbGliL3F1b3RlYXJnLmM6MjMwCittc2dpZCAiJyIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjEzMQorbXNnaWQgIlN1Y2Nlc3MiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxMzQKK21zZ2lkICJObyBtYXRjaCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjEzNworbXNnaWQgIkludmFsaWQgcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTQwCittc2dpZCAiSW52YWxpZCBjb2xsYXRpb24gY2hhcmFjdGVyIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTQzCittc2dpZCAiSW52YWxpZCBjaGFyYWN0ZXIgY2xhc3MgbmFtZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE0NgorbXNnaWQgIlRyYWlsaW5nIGJhY2tzbGFzaCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE0OQorbXNnaWQgIkludmFsaWQgYmFjayByZWZlcmVuY2UiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNTIKK21zZ2lkICJVbm1hdGNoZWQgWyBvciBbXiIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE1NQorbXNnaWQgIlVubWF0Y2hlZCAoIG9yIFxcKCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE1OAorbXNnaWQgIlVubWF0Y2hlZCBcXHsiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNjEKK21zZ2lkICJJbnZhbGlkIGNvbnRlbnQgb2YgXFx7XFx9IgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTY0Cittc2dpZCAiSW52YWxpZCByYW5nZSBlbmQiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNjcKK21zZ2lkICJNZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTcwCittc2dpZCAiSW52YWxpZCBwcmVjZWRpbmcgcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTczCittc2dpZCAiUHJlbWF0dXJlIGVuZCBvZiByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNzYKK21zZ2lkICJSZWd1bGFyIGV4cHJlc3Npb24gdG9vIGJpZyIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE3OQorbXNnaWQgIlVubWF0Y2hlZCApIG9yIFxcKSIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjY4MAorbXNnaWQgIk5vIHByZXZpb3VzIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvcnBtYXRjaC5jOjcwCittc2dpZCAiXlt5WV0iCittc2dzdHIgIiIKKworIzogbGliL3JwbWF0Y2guYzo3MworbXNnaWQgIl5bbk5dIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBUcmFuc2xhdGUgIihDKSIgdG8gdGhlIGNvcHlyaWdodCBzeW1ib2wKKyMuIChDLWluLWEtY2lyY2xlKSwgaWYgdGhpcyBzeW1ib2wgaXMgYXZhaWxhYmxlIGluIHRoZSB1c2VyJ3MKKyMuIGxvY2FsZS4gIE90aGVyd2lzZSwgZG8gbm90IHRyYW5zbGF0ZSAiKEMpIjsgbGVhdmUgaXQgYXMtaXMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzo2NgorbXNnaWQgIihDKSIKK21zZ3N0ciAiIgorCisjOiBsaWIvdmVyc2lvbi1ldGMuYzo2OAorbXNnaWQgIiIKKyJcbiIKKyJMaWNlbnNlIEdQTHYyKzogR05VIEdQTCB2ZXJzaW9uIDIgb3IgbGF0ZXIgPGh0dHA6Ly9nbnUub3JnL2xpY2Vuc2VzL2dwbC4iCisiaHRtbD5cbiIKKyJUaGlzIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBhcmUgZnJlZSB0byBjaGFuZ2UgYW5kIHJlZGlzdHJpYnV0ZSBpdC5cbiIKKyJUaGVyZSBpcyBOTyBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3LlxuIgorIlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIzogbGliL3ZlcnNpb24tZXRjLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiV3JpdHRlbiBieSAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIzogbGliL3ZlcnNpb24tZXRjLmM6ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiV3JpdHRlbiBieSAlcyBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIldyaXR0ZW4gYnkgJXMsICVzLCBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyJhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6MTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiJXMsIGFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyIlcywgJXMsIGFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzoxMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyIlcywgJXMsICVzLCBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6MTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiJXMsICVzLCAlcywgJXMsXG4iCisiYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjLiBZb3UgY2FuIHVzZSBsaW5lIGJyZWFrcywgZXN0aW1hdGluZyB0aGF0IGVhY2ggYXV0aG9yIG5hbWUgb2NjdXBpZXMKKyMuIGNhLiAxNiBzY3JlZW4gY29sdW1ucyBhbmQgdGhhdCBhIHNjcmVlbiBsaW5lIGhhcyBjYS4gODAgY29sdW1ucy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjEzMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorIiVzLCAlcywgJXMsICVzLFxuIgorIiVzLCBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6MTQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiJXMsICVzLCAlcywgJXMsXG4iCisiJXMsICVzLCBhbmQgb3RoZXJzLlxuIgorbXNnc3RyICIiCisKKyM6IGxpYi94YWxsb2MtZGllLmM6MzUKK21zZ2lkICJtZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzoyMzcKK21zZ2lkICJEaXNrIEltYWdlIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzozMzggbGlicGFydGVkL2FyY2gvZ251LmM6MjYxCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjEyNzIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIG9wZW5pbmcgJXM6ICVzIgorbXNnc3RyICJIYXJpIGlraWJhem8gbXUgZ3VmdW5ndXJhICVzJVMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzozNDkgbGlicGFydGVkL2FyY2gvZ251LmM6MjcxCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjEyODMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBvcGVuICVzIHJlYWQtd3JpdGUgKCVzKS4gICVzIGhhcyBiZWVuIG9wZW5lZCByZWFkLW9ubHkuIgorbXNnc3RyICJLdXJpIEd1ZnVuZ3VyYSBHdXNvbWEgS3dhbmRpa2EgR3Vzb21hIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6NDExIGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTQzMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgZHVyaW5nIHNlZWsgZm9yIHJlYWQgb24gJXMiCittc2dzdHIgIiVza3VnaXJhbmdvIEd1c29tYSBrdSIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjQ0NCBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo0NDkgbGlicGFydGVkL2FyY2gvZ251LmM6NTQ4CisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo2NzYgbGlicGFydGVkL2FyY2gvbGludXguYzoxMzkxCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjE0NjkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIGR1cmluZyByZWFkIG9uICVzIgorbXNnc3RyICIlc0d1c29tYSBrdSIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjQ4MCBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo1MDkKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTU0NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ2FuJ3Qgd3JpdGUgdG8gJXMsIGJlY2F1c2UgaXQgaXMgb3BlbmVkIHJlYWQtb25seS4iCittc2dzdHIgIkt3YW5kaWthIEt1cmkgbmkgR3Vzb21hIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6NDk2IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTU3MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgZHVyaW5nIHNlZWsgZm9yIHdyaXRlIG9uICVzIgorbXNnc3RyICIlc2t1Z2lyYW5nbyBLd2FuZGlrYSBrdSIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjUzMyBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo1ODUgbGlicGFydGVkL2FyY2gvZ251LmM6NjMwCisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo3MDcgbGlicGFydGVkL2FyY2gvbGludXguYzoxNTE3CisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjE2MTIgbGlicGFydGVkL2FyY2gvbGludXguYzoxNjg0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyBkdXJpbmcgd3JpdGUgb24gJXMiCittc2dzdHIgIiVzS3dhbmRpa2Ega3UiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6NjMgcGFydHByb2JlL3BhcnRwcm9iZS5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICJUcnkgYCVzIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4iCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICVzIFtPUFRJT05dXG4iCisiICBvcjogICVzIERFVklDRSBNSU5PUlxuIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6NzAKK21zZ2lkICIiCisiQ2xlYXIgdW51c2VkIHNwYWNlIG9uIGEgRkFUIHBhcnRpdGlvbiAoYSBHTlUgUGFydGVkIHRlc3RpbmcgdG9vbCkuXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo3NAorbXNnaWQgIiAgICAgIC0taGVscCAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXRcbiIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjc1Cittc2dpZCAiICAgICAgLS12ZXJzaW9uICBvdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdFxuIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6NzcgcGFydHByb2JlL3BhcnRwcm9iZS5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiUmVwb3J0IGJ1Z3MgdG8gPCVzPi5cbiIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjI4NQorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gZmV3IGFyZ3VtZW50cyIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjI5MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIgorbXNnc3RyICJBbWFwYWppIgorCisjOiBwYXJ0cHJvYmUvcGFydHByb2JlLmM6MTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbT1BUSU9OXSBbREVWSUNFXS4uLlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRwcm9iZS9wYXJ0cHJvYmUuYzoxNDIKK21zZ2lkICIiCisiSW5mb3JtIHRoZSBPUyBvZiBwYXJ0aXRpb24gdGFibGUgY2hhbmdlcy5cbiIKKyJcbiIKKyIgIC1kLCAtLW5vLXVwZGF0ZSAgZG9uJ3QgdXBkYXRlIHRoZSBrZXJuZWxcbiIKKyIgIC1zLCAtLXN1bW1hcnkgICAgcHJpbnQgYSBzdW1tYXJ5IG9mIGNvbnRlbnRzXG4iCisiICAtaCwgLS1oZWxwICAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0XG4iCisiICAtdiwgLS12ZXJzaW9uICAgIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0XG4iCittc2dzdHIgIiIKKworIzogcGFydHByb2JlL3BhcnRwcm9iZS5jOjE1MAorbXNnaWQgIiIKKyJcbiIKKyJXaXRoIG5vIERFVklDRSwgcHJvYmUgYWxsIHBhcnRpdGlvbnMuXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6OTQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBvcGVuICVzLiIKK21zZ3N0ciAiS3VyaSBHdWZ1bmd1cmEiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjExNAorIywgZnV6enkKK21zZ2lkICJVbmFibGUgdG8gcHJvYmUgc3RvcmUuIgorbXNnc3RyICJLdXJpIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzozNTIKKyMsIGZ1enp5Cittc2dpZCAiIgorIlRoZSBwYXJ0aXRpb24gdGFibGUgY2Fubm90IGJlIHJlLXJlYWQuICBUaGlzIG1lYW5zIHlvdSBuZWVkIHRvIHJlYm9vdCBiZWZvcmUgIgorIm1vdW50aW5nIGFueSBtb2RpZmllZCBwYXJ0aXRpb25zLiAgWW91IGFsc28gbmVlZCB0byByZWluc3RhbGwgeW91ciBib290ICIKKyJsb2FkZXIgYmVmb3JlIHlvdSByZWJvb3QgKHdoaWNoIG1heSByZXF1aXJlIG1vdW50aW5nIG1vZGlmaWVkIHBhcnRpdGlvbnMpLiAgIgorIkl0IGlzIGltcG9zc2libGUgZG8gYm90aCB0aGluZ3MhICBTbyB5b3UnbGwgbmVlZCB0byBib290IG9mZiBhIHJlc2N1ZSBkaXNrLCAiCisiYW5kIHJlaW5zdGFsbCB5b3VyIGJvb3QgbG9hZGVyIGZyb20gdGhlIHJlc2N1ZSBkaXNrLiAgUmVhZCBzZWN0aW9uIDQgb2YgdGhlICIKKyJQYXJ0ZWQgVXNlciBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiIgorImltYm9uZXJhaGFtd2UjIEt1cmkgTmthIEt1cmkgTWJlcmUgQnlhaGluZHV3ZSBLdXJpIE1iZXJlIEdpY3VyYXNpIEJ5YWhpbmR1d2UgIgorIm5pIEJ5b21iaSBLdXJpIEJpZGFrb3JhIGEgTmEgQml2dXllIGkgSWN5aWNpcm8gNC4gQnlhIGkga3VnaXJhbmdvIEJpcmVuemVobyAiCisiSWJpc29iYW51cm8iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjM2OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBwYXJ0aXRpb24gdGFibGUgb24gJXMgY2Fubm90IGJlIHJlLXJlYWQgKCVzKS4gIFRoaXMgbWVhbnMgdGhlIEh1cmQga25vd3MgIgorIm5vdGhpbmcgYWJvdXQgYW55IG1vZGlmaWNhdGlvbnMgeW91IG1hZGUuICBZb3Ugc2hvdWxkIHJlYm9vdCB5b3VyIGNvbXB1dGVyICIKKyJiZWZvcmUgZG9pbmcgYW55dGhpbmcgd2l0aCAlcy4iCittc2dzdHIgImltYm9uZXJhaGFtd2UjIGt1IGkgSWJ5ZXJla2V5ZSBNYmVyZSBOYToiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjM4MCBwYXJ0ZWQvcGFydGVkLmM6MjQ0MworIywgZnV6enkKK21zZ2lkICIiCisiWW91IHNob3VsZCByZWluc3RhbGwgeW91ciBib290IGxvYWRlciBiZWZvcmUgcmVib290aW5nLiAgUmVhZCBzZWN0aW9uIDQgb2YgIgorInRoZSBQYXJ0ZWQgVXNlciBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiTWJlcmUgSWN5aWNpcm8gNC4gQnlhIGkga3VnaXJhbmdvIEJpcmVuemVobyBJYmlzb2JhbnVybyIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6NzcyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyB0cnlpbmcgdG8gc3luYyAlcyB0byBkaXNrIgorbXNnc3RyICIlc0t1cmkgS3VyaSIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo0MDgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzdGF0IGRldmljZSAlcyAtICVzLiIKK21zZ3N0ciAiT1lBIEFQQVJFWUUiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6NTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgZGV0ZXJtaW5lIHNlY3RvciBzaXplIGZvciAlczogJXMuXG4iCisiVXNpbmcgdGhlIGRlZmF1bHQgc2VjdG9yIHNpemUgKCVsbGQpLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjUzOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRGV2aWNlICVzIGhhcyBhIGxvZ2ljYWwgc2VjdG9yIHNpemUgb2YgJWxsZC4gIE5vdCBhbGwgcGFydHMgb2YgR05VIFBhcnRlZCAiCisic3VwcG9ydCB0aGlzIGF0IHRoZSBtb21lbnQsIGFuZCB0aGUgd29ya2luZyBjb2RlIGlzIEhJR0hMWSBFWFBFUklNRU5UQUwuXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo1NzkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBkZXRlcm1pbmUgdGhlIHNpemUgb2YgJXMgKCVzKS4iCittc2dzdHIgIkt1cmkgaSBJbmdhbm8gQnlhIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjY2OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGdldCBpZGVudGl0eSBvZiBkZXZpY2UgJXMgLSAlcyIKK21zZ3N0ciAiT1lBIEt1Ym9uYSBJa2lyYW5nYSBCeWEgQVBBUkVZRSIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo2NzcKK21zZ2lkICJHZW5lcmljIElERSIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRGV2aWNlICVzIGhhcyBtdWx0aXBsZSAoJWQpIGxvZ2ljYWwgc2VjdG9ycyBwZXIgcGh5c2ljYWwgc2VjdG9yLlxuIgorIkdOVSBQYXJ0ZWQgc3VwcG9ydHMgdGhpcyBFWFBFUklNRU5UQUxMWSBmb3Igc29tZSBzcGVjaWFsIGRpc2sgbGFiZWwvZmlsZSAiCisic3lzdGVtIGNvbWJpbmF0aW9ucywgZS5nLiBHUFQgYW5kIGV4dDIvMy5cbiIKKyJQbGVhc2UgY29uc3VsdCB0aGUgd2ViIHNpdGUgZm9yIHVwLXRvLWRhdGUgaW5mb3JtYXRpb24uIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6ODczCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBpbml0aWFsaXNpbmcgU0NTSSBkZXZpY2UgJXMgLSAlcyIKK21zZ3N0ciAiQVBBUkVZRSIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo5MjgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZGV2aWNlICVzIGhhcyB6ZXJvIGxlbmd0aCwgYW5kIGNhbid0IHBvc3NpYmx5IHN0b3JlIGEgZmlsZSBzeXN0ZW0gb3IgIgorInBhcnRpdGlvbiB0YWJsZS4gIFBlcmhhcHMgeW91IHNlbGVjdGVkIHRoZSB3cm9uZyBkZXZpY2U/IgorbXNnc3RyICIiCisiQVBBUkVZRSBuaSBaZXJ1IFVidXJlYnVyZSBOYSBhIElET1NJWUUgU2lzaXRlbXUgQ3lhbmd3YSBpbWJvbmVyYWhhbXdlIyAiCisiQnlhaGlzd2VtbyBpIEFQQVJFWUUiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTAzMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlVuYWJsZSB0byBkZXRlcm1pbmUgZ2VvbWV0cnkgb2YgZmlsZS9kZXZpY2UgJXMuICBZb3Ugc2hvdWxkIG5vdCB1c2UgUGFydGVkICIKKyJ1bmxlc3MgeW91IFJFQUxMWSBrbm93IHdoYXQgeW91J3JlIGRvaW5nISIKK21zZ3N0ciAiS3VyaSBJeWlnYW1hc2h1c2hvIEJ5YSBJRE9TSVlFIEFQQVJFWUUgT1lBIEd1a29yZXNoYSIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTEwCittc2dpZCAiREFDOTYwIFJBSUQgY29udHJvbGxlciIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExMTUKK21zZ2lkICJQcm9taXNlIFNYOCBTQVRBIERldmljZSIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExMjAKK21zZ2lkICJJQk0gUzM5MCBEQVNEIGRyaXZlIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTEyNQorbXNnaWQgIklCTSBpU2VyaWVzIFZpcnR1YWwgREFTRCIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExMzAKK21zZ2lkICJDb21wYXEgU21hcnQgQXJyYXkiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTM1Cittc2dpZCAiQVRBUkFJRCBDb250cm9sbGVyIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTE0MAorbXNnaWQgIkkyTyBDb250cm9sbGVyIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTE0NQorbXNnaWQgIlVzZXItTW9kZSBMaW51eCBVQkQiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTU2Cittc2dpZCAiTGludXggZGV2aWNlLW1hcHBlciIKK21zZ3N0ciAiIgorCisjIGZpbHRlci9zb3VyY2VceHNsdGRpYWxvZ1x4bWxmaWx0ZXJkaWFsb2dzdHJpbmdzLnNyYzpTVFJfVU5LTk9XTl9BUFBMSUNBVElPTi50ZXh0CisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExNjIKK21zZ2lkICJVbmtub3duIgorbXNnc3RyICJLaXRhendpIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExNjkKKyMsIGZ1enp5Cittc2dpZCAicGVkX2RldmljZV9uZXcoKSAgVW5zdXBwb3J0ZWQgZGV2aWNlIHR5cGUiCittc2dzdHIgIkFQQVJFWUUgVWJ3b2tvIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjIwODMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFcnJvciBpbmZvcm1pbmcgdGhlIGtlcm5lbCBhYm91dCBtb2RpZmljYXRpb25zIHRvIHBhcnRpdGlvbiAlcyAtLSAlcy4gIFRoaXMgIgorIm1lYW5zIExpbnV4IHdvbid0IGtub3cgYWJvdXQgYW55IGNoYW5nZXMgeW91IG1hZGUgdG8gJXMgdW50aWwgeW91IHJlYm9vdCAtLSAiCisic28geW91IHNob3VsZG4ndCBtb3VudCBpdCBvciB1c2UgaXQgaW4gYW55IHdheSBiZWZvcmUgcmVib290aW5nLiIKK21zZ3N0ciAiIgorImkgSWJ5ZXJla2V5ZSBLdXJpIElieWVyZWtleWUgQW1haGluZHVrYSBLdXJpIEN5YW5nd2EgR3Vrb3Jlc2hhIGluIE1iZXJlIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjIyNjIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJwYXJ0ZWQgd2FzIHVuYWJsZSB0byByZS1yZWFkIHRoZSBwYXJ0aXRpb24gdGFibGUgb24gJXMgKCVzKS4gIFRoaXMgbWVhbnMgIgorIkxpbnV4IHdvbid0IGtub3cgYW55dGhpbmcgYWJvdXQgdGhlIG1vZGlmaWNhdGlvbnMgeW91IG1hZGUuICIKK21zZ3N0ciAiS3VyaSBHdXNvbWEgaSBpbWJvbmVyYWhhbXdlIyBrdSBJYnllcmVrZXllIGkgTWJlcmUgTmE6IgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjIzNjgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUga2VybmVsIHdhcyB1bmFibGUgdG8gcmUtcmVhZCB0aGUgcGFydGl0aW9uIHRhYmxlIG9uICVzICglcykuICBUaGlzIG1lYW5zICIKKyJMaW51eCB3b24ndCBrbm93IGFueXRoaW5nIGFib3V0IHRoZSBtb2RpZmljYXRpb25zIHlvdSBtYWRlIHVudGlsIHlvdSAiCisicmVib290LiAgWW91IHNob3VsZCByZWJvb3QgeW91ciBjb21wdXRlciBiZWZvcmUgZG9pbmcgYW55dGhpbmcgd2l0aCAlcy4iCittc2dzdHIgIkt1cmkgR3Vzb21hIGkgaW1ib25lcmFoYW13ZSMga3UgSWJ5ZXJla2V5ZSBpIE1iZXJlIE5hOiIKKworIzogbGlicGFydGVkL2NzL2dlb20uYzoxNjIKKyMsIGZ1enp5Cittc2dpZCAiQ2FuJ3QgaGF2ZSB0aGUgZW5kIGJlZm9yZSB0aGUgc3RhcnQhIgorbXNnc3RyICJpIEltcGVyYSBNYmVyZSBpIEd1dGFuZ2lyYSIKKworIzogbGlicGFydGVkL2NzL2dlb20uYzoxNjkKKyMsIGZ1enp5Cittc2dpZCAiQ2FuJ3QgaGF2ZSBhIHBhcnRpdGlvbiBvdXRzaWRlIHRoZSBkaXNrISIKK21zZ3N0ciAiYSBIYW56ZSBpIgorCisjOiBsaWJwYXJ0ZWQvY3MvZ2VvbS5jOjM2NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQXR0ZW1wdCB0byB3cml0ZSBzZWN0b3JzICVsZC0lbGQgb3V0c2lkZSBvZiBwYXJ0aXRpb24gb24gJXMuIgorbXNnc3RyICJLdXJpIEt3YW5kaWthIEhhbnplIEJ5YSBrdSIKKworIzogbGlicGFydGVkL2NzL2dlb20uYzo0MDYgbGlicGFydGVkL2ZzL2xpbnV4X3N3YXAvbGludXhfc3dhcC5jOjQ3NQorIywgZnV6enkKK21zZ2lkICJjaGVja2luZyBmb3IgYmFkIGJsb2NrcyIKK21zZ3N0ciAia3VnaXJhbmdvIgorCisjOiBsaWJwYXJ0ZWQvZGVidWcuYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFja3RyYWNlIGhhcyAlZCBjYWxscyBvbiBzdGFjazpcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZGVidWcuYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXNzZXJ0aW9uICglcykgYXQgJXM6JWQgaW4gZnVuY3Rpb24gJXMoKSBmYWlsZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjAzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gb3BlbiAlcyAtIHVucmVjb2duaXNlZCBkaXNrIGxhYmVsLiIKK21zZ3N0ciAiS3VyaSBHdWZ1bmd1cmEgQWthcmFuZ28iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6NDcxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhpcyBsaWJwYXJ0ZWQgZG9lc24ndCBoYXZlIHdyaXRlIHN1cHBvcnQgZm9yICVzLiAgUGVyaGFwcyBpdCB3YXMgY29tcGlsZWQgIgorInJlYWQtb25seS4iCittc2dzdHIgIkt3YW5kaWthIEd1c2hpZ2lraXJhIGt1Z2lyYW5nbyBHdXNvbWEiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6NTk4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJQYXJ0aXRpb24gJWQgaXMgJXMsIGJ1dCB0aGUgZmlsZSBzeXN0ZW0gaXMgJXMuIgorbXNnc3RyICJuaSBpIElET1NJWUUgU2lzaXRlbXUgbmkiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTA3NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgZGlzayBsYWJlbHMgZG8gbm90IHN1cHBvcnQgZXh0ZW5kZWQgcGFydGl0aW9ucy4iCittc2dzdHIgIiVzVXR1cmFuZ28uLi4gT1lBIEd1c2hpZ2lraXJhIEJ5b25nZXJld2UuLi4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTYzNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgZGlzayBsYWJlbHMgZG9uJ3Qgc3VwcG9ydCBsb2dpY2FsIG9yIGV4dGVuZGVkIHBhcnRpdGlvbnMuIgorbXNnc3RyICIiCisiJXNVdHVyYW5nby4uLiBHdXNoaWdpa2lyYSBCaWp5YW55ZSBuJ2lueXVyYWJ3ZW5nZSBDeWFuZ3dhIEJ5b25nZXJld2UuLi4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTY0NworIywgZnV6enkKK21zZ2lkICJUb28gbWFueSBwcmltYXJ5IHBhcnRpdGlvbnMuIgorbXNnc3RyICJBbWFwYWppIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE2NTYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW4ndCBhZGQgYSBsb2dpY2FsIHBhcnRpdGlvbiB0byAlcywgYmVjYXVzZSB0aGVyZSBpcyBubyBleHRlbmRlZCBwYXJ0aXRpb24uIgorbXNnc3RyICJLb25nZXJhbW8gYSBCaWp5YW55ZSBuJ2lueXVyYWJ3ZW5nZSBLdXJpIG5pIE95YSBCeW9uZ2VyZXdlLi4uIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE2ODAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkNhbid0IGhhdmUgbW9yZSB0aGFuIG9uZSBleHRlbmRlZCBwYXJ0aXRpb24gb24gJXMuIgorbXNnc3RyICJCaXJlbnplaG8gQnlvbmdlcmV3ZS4uLiBrdSIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNjkwCisjLCBmdXp6eQorbXNnaWQgIkNhbid0IGhhdmUgbG9naWNhbCBwYXJ0aXRpb25zIG91dHNpZGUgb2YgdGhlIGV4dGVuZGVkIHBhcnRpdGlvbi4iCittc2dzdHIgIkJpanlhbnllIG4naW55dXJhYndlbmdlIEhhbnplIEJ5YSBpIEJ5b25nZXJld2UuLi4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTcxNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ2FuJ3QgaGF2ZSBhIGxvZ2ljYWwgcGFydGl0aW9uIG91dHNpZGUgb2YgdGhlIGV4dGVuZGVkIHBhcnRpdGlvbiBvbiAlcy4iCittc2dzdHIgImEgQmlqeWFueWUgbidpbnl1cmFid2VuZ2UgSGFuemUgQnlhIGkgQnlvbmdlcmV3ZS4uLiBrdSIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNzI1IGxpYnBhcnRlZC9kaXNrLmM6MTc3OSBsaWJwYXJ0ZWQvZGlzay5jOjE5NDUKKyMsIGZ1enp5Cittc2dpZCAiQ2FuJ3QgaGF2ZSBvdmVybGFwcGluZyBwYXJ0aXRpb25zLiIKK21zZ3N0ciAiaXlvcm9zYSIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNzMzCisjLCBmdXp6eQorbXNnaWQgIkNhbid0IGhhdmUgYSBwcmltYXJ5IHBhcnRpdGlvbiBpbnNpZGUgYW4gZXh0ZW5kZWQgcGFydGl0aW9uLiIKK21zZ3N0ciAiYSBNbyBJbWJlcmUgQnlvbmdlcmV3ZS4uLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTQwCittc2dpZCAibWV0YWRhdGEiCittc2dzdHIgIiIKKworIyBzdngvc291cmNlXGRpYWxvZ1xsYWJkbGcuc3JjOlJJRF9TVlhQQUdFX0NBUFRJT04uTEJfV0lOS0VMLjEudGV4dAorIzogbGlicGFydGVkL2Rpc2suYzoyMTQyCisjLCBmdXp6eQorbXNnaWQgImZyZWUiCittc2dzdHIgIktpZ2VuZ2EiCisKKyMgMjE3NQorIzogbGlicGFydGVkL2Rpc2suYzoyMTQ0IHBhcnRlZC91aS5jOjExNjkgcGFydGVkL3VpLmM6MTE5NworIywgZnV6enkKK21zZ2lkICJleHRlbmRlZCIKK21zZ3N0ciAiY3lhLyBieWFndXRzZSIKKworIyAjLSMtIy0jLSMgIHNjLnBvdCAoUEFDS0FHRSBWRVJTSU9OKSAgIy0jLSMtIy0jCisjIHNjL3NvdXJjZVx1aVxmb3JtZGxnXGR3ZnVuY3RyLnNyYzpGSURfRlVOQ1RJT05fQk9YLkNCX0NBVC43LnRleHQKKyMgIy0jLSMtIy0jICBzYy5wb3QgKFBBQ0tBR0UgVkVSU0lPTikgICMtIy0jLSMtIworIyBzYy9zb3VyY2VcdWlcZm9ybWRsZ1xmb3JtZGxncy5zcmM6UklEX1NDVEFCX0ZVTkNUSU9OLkxCX0NBVEVHT1JZLjcudGV4dAorIzogbGlicGFydGVkL2Rpc2suYzoyMTQ2IHBhcnRlZC91aS5jOjExNzMgcGFydGVkL3VpLmM6MTIwMQorIywgZnV6enkKK21zZ2lkICJsb2dpY2FsIgorbXNnc3RyICJCaWp5YW55ZSBuJ2lueXVyYWJ3ZW5nZSIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTQ4IHBhcnRlZC91aS5jOjExNjUgcGFydGVkL3VpLmM6MTE5MworbXNnaWQgInByaW1hcnkiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTY0Cittc2dpZCAiYm9vdCIKK21zZ3N0ciAiIgorCisjIDUyMTQKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE2NgorIywgZnV6enkKK21zZ2lkICJyb290IgorbXNnc3RyICJJbWl6aSIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTY4Cittc2dpZCAic3dhcCIKK21zZ3N0ciAiIgorCisjIHNjL3NvdXJjZVx1aVxuYXZpcGlcbmF2aXBpLnNyYzpSSURfU0NETEdfTkFWSUdBVE9SLlNUUl9ISURERU4udGV4dAorIzogbGlicGFydGVkL2Rpc2suYzoyMTcwCittc2dpZCAiaGlkZGVuIgorbXNnc3RyICJnaWhpc2h3ZSIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTcyCittc2dpZCAicmFpZCIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNzQKK21zZ2lkICJsdm0iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTc2Cittc2dpZCAibGJhIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE3OAorIywgZnV6enkKK21zZ2lkICJocC1zZXJ2aWNlIgorbXNnc3RyICJTZXJpdmlzaSIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTgwCittc2dpZCAicGFsbyIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxODIKK21zZ2lkICJwcmVwIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE4NAorbXNnaWQgIm1zZnRyZXMiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTkwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIHBhcnRpdGlvbiBmbGFnLCAlZC4iCittc2dzdHIgIkliZW5kZXJhIEliZW5kZXJhIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6NzgKK21zZ2lkICJJbmZvcm1hdGlvbiIKK21zZ3N0ciAiSWJpc29iYW51cm8iCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo3OQorbXNnaWQgIldhcm5pbmciCittc2dzdHIgIklidXJpcmEiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4MAorbXNnaWQgIkVycm9yIgorbXNnc3RyICJJa29zYSIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjgxCittc2dpZCAiRmF0YWwiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjgyCittc2dpZCAiQnVnIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4MworbXNnaWQgIk5vIEltcGxlbWVudGF0aW9uIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4NworbXNnaWQgIkZpeCIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODgKK21zZ2lkICJZZXMiCittc2dzdHIgIlllZ28iCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4OQorbXNnaWQgIk5vIgorbXNnc3RyICJPeWEiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo5MAorbXNnaWQgIk9LIgorbXNnc3RyICJPS0UiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo5MQorbXNnaWQgIlJldHJ5IgorbXNnc3RyICJPbmdlcmEgdWdlcmFnZXplIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6OTIKK21zZ2lkICJJZ25vcmUiCittc2dzdHIgIkt1cmVrYSIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjkzCittc2dpZCAiQ2FuY2VsIgorbXNnc3RyICJLdXJla2EiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzoxMzMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBIGJ1ZyBoYXMgYmVlbiBkZXRlY3RlZCBpbiBHTlUgUGFydGVkLiAgUmVmZXIgdG8gdGhlIHdlYiBzaXRlIG9mIHBhcnRlZCAiCisiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3BhcnRlZC9wYXJ0ZWQuaHRtbCBmb3IgbW9yZSBpbmZvcm1hdGlvbnMgb2Ygd2hhdCAiCisiY291bGQgYmUgdXNlZnVsIGZvciBidWcgc3VibWl0dGluZyEgIFBsZWFzZSBlbWFpbCBhIGJ1ZyByZXBvcnQgdG8gYnVnLSIKKyJwYXJ0ZWRAZ251Lm9yZyBjb250YWluaW5nIGF0IGxlYXN0IHRoZSB2ZXJzaW9uICglcykgYW5kIHRoZSBmb2xsb3dpbmcgIgorIm1lc3NhZ2U6ICAiCittc2dzdHIgIkEgaW4gaW1lbGkgYSBJY3llZ2VyYW55byBLdXJpIG9yZyBpIFZlcmlzaXlvIE5hIGkgVWJ1dHVtd2EiCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6Mzg0CisjLCBmdXp6eQorbXNnaWQgIkNvdWxkIG5vdCBkZXRlY3QgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICJPWUEgSURPU0lZRSBTaXNpdGVtdSIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzozOTUKKyMsIGZ1enp5Cittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIGlzIGJpZ2dlciB0aGFuIGl0cyB2b2x1bWUhIgorbXNnc3RyICJJRE9TSVlFIFNpc2l0ZW11IG5pIElnaWNlIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjQwMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiU3VwcG9ydCBmb3Igb3BlbmluZyAlcyBmaWxlIHN5c3RlbXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgImt1Z2lyYW5nbyBHdWZ1bmd1cmEgJXMlUyBJRE9TSVlFIG5pIE9ZQSIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo0NDUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnQgZm9yIGNyZWF0aW5nICVzIGZpbGUgc3lzdGVtcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAia3VnaXJhbmdvIElET1NJWUUgbmkgT1lBIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjUwNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiU3VwcG9ydCBmb3IgY2hlY2tpbmcgJXMgZmlsZSBzeXN0ZW1zIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICJrdWdpcmFuZ28gSURPU0lZRSBuaSBPWUEiCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NTcxCisjLCBmdXp6eQorbXNnaWQgInJhdyBibG9jayBjb3B5aW5nIgorbXNnc3RyICJGdW5nYSIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo1ODIKKyMsIGZ1enp5Cittc2dpZCAiZ3Jvd2luZyBmaWxlIHN5c3RlbSIKK21zZ3N0ciAiSURPU0lZRSBTaXNpdGVtdSIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo2MjIKKyMsIGZ1enp5Cittc2dpZCAiQ2FuJ3QgY29weSBvbnRvIGFuIG92ZXJsYXBwaW5nIHBhcnRpdGlvbi4iCittc2dzdHIgIkd1a29wb3JvcmEgaXlvcm9zYSIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo2NDQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJEaXJlY3Qgc3VwcG9ydCBmb3IgY29weWluZyBmaWxlIHN5c3RlbXMgaXMgbm90IHlldCBpbXBsZW1lbnRlZCBmb3IgJXMuICAiCisiSG93ZXZlciwgc3VwcG9ydCBmb3IgcmVzaXppbmcgaXMgaW1wbGVtZW50ZWQuICBUaGVyZWZvcmUsIHRoZSBmaWxlIHN5c3RlbSAiCisiY2FuIGJlIGNvcGllZCBpZiB0aGUgbmV3IHBhcnRpdGlvbiBpcyBhdCBsZWFzdCBhcyBiaWcgYXMgdGhlIG9sZCBvbmUuICBTbywgIgorImVpdGhlciBzaHJpbmsgdGhlIHBhcnRpdGlvbiB5b3UgYXJlIHRyeWluZyB0byBjb3B5LCBvciBjb3B5IHRvIGEgYmlnZ2VyICIKKyJwYXJ0aXRpb24uIgorbXNnc3RyICIiCisiR3VzaGlnaWtpcmEga3VnaXJhbmdvIElET1NJWUUgbmkgT1lBIGt1Z2lyYW5nbyBHdXNoaWdpa2lyYSBrdWdpcmFuZ28gaSAiCisiSURPU0lZRSBTaXNpdGVtdSBOSUJBIGkgR2lzaHlhIG5pIGt1IE5rYSBOa2EgaSBraS8gYmlzaGFqZSBLdWdhYmFudWthIGkgS3VyaSAiCisiR3Vrb3Bvcm9yYSBDeWFuZ3dhIEd1a29wb3JvcmEgS3VyaSBhIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjY1OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiU3VwcG9ydCBmb3IgY29weWluZyAlcyBmaWxlIHN5c3RlbXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgImt1Z2lyYW5nbyBJRE9TSVlFIG5pIE9ZQSIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo2OTYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnQgZm9yIHJlc2l6aW5nICVzIGZpbGUgc3lzdGVtcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAia3VnaXJhbmdvIElET1NJWUUgbmkgT1lBIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzozMTUKK21zZ2lkICJjcmVhdGluZyIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0MDIKKyMsIGZ1enp5Cittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIGlzIGluIGFuIGludmFsaWQgc3RhdGUuICBQZXJoYXBzIGl0IGlzIG1vdW50ZWQ/IgorbXNnc3RyICJJRE9TSVlFIFNpc2l0ZW11IG5pIElnaWNlIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0MTAKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gaXMgaW4gb2xkICh1bnJlc2l6ZWFibGUpIGZvcm1hdC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDE2Cittc2dpZCAiSW52YWxpZCBmcmVlIGJsb2NrcyBjb3VudC4gIFJ1biByZWlzZXJmc2NrIC0tY2hlY2sgZmlyc3QuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQzMQorIywgZnV6enkKK21zZ2lkICJjaGVja2luZyIKK21zZ3N0ciAiZ2VuenVyYSIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDM3Cittc2dpZCAiUmVpc2VyZnMgdHJlZSBzZWVtcyB0byBiZSBjb3JydXB0ZWQuICBSdW4gcmVpc2VyZnNjayAtLWNoZWNrIGZpcnN0LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0NDkKKyMsIGZ1enp5Cittc2dpZCAiIgorIlRoZSByZWlzZXJmcyBmaWxlIHN5c3RlbSBwYXNzZWQgYSBiYXNpYyBjaGVjay4gIEZvciBhIG1vcmUgY29tcHJlaGVuc2l2ZSAiCisiY2hlY2ssIHJ1biByZWlzZXJmc2NrIC0tY2hlY2suIgorbXNnc3RyICJhIEJBU0lDIEt1Z2VuenVyYS4uLiBhIEJpcmVuemVobyBLdWdlbnp1cmEuLi4gR3Vrb3Jlc2hhIGkgUG9yb2dhcmFtdSIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDc0CisjLCBmdXp6eQorbXNnaWQgIlNvcnJ5LCBjYW4ndCBtb3ZlIHRoZSBzdGFydCBvZiByZWlzZXJmcyBwYXJ0aXRpb25zIHlldC4iCittc2dzdHIgIkt3aW11cmEgaSBHdXRhbmdpcmEgQnlhIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0OTAKK21zZ2lkICJDb3VsZG4ndCByZW9wZW4gZGV2aWNlIGFic3RyYWN0aW9uIGxheWVyIGZvciByZWFkL3dyaXRlLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo1MDggbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo1NTIKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MjUwIGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NjI5Cittc2dpZCAic2hyaW5raW5nIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjUyMAorIywgZnV6enkKK21zZ2lkICJleHBhbmRpbmciCittc2dzdHIgIklidXJpcmEiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjU5MgorbXNnaWQgIkNvdWxkbid0IGNyZWF0ZSByZWlzZXJmcyBkZXZpY2UgYWJzdHJhY3Rpb24gaGFuZGxlci4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NjA2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJEZXZpY2UgaXMgdG9vIHNtYWxsIGZvciAlbHUgYmxvY2tzLiIKK21zZ3N0ciAiSWRvc2l5ZSBTaXNpdGVtdSBHaXRveWEga3VnaXJhbmdvIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo2MTUKK21zZ2lkICJjb3B5aW5nIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjY4MgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCByZXNvbHZlIHN5bWJvbCAlcy4gIEVycm9yOiAlcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NzA0Cittc2dpZCAiR05VIFBhcnRlZCBmb3VuZCBhbiBpbnZhbGlkIGxpYnJlaXNlcmZzIGxpYnJhcnkuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjcxNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiR05VIFBhcnRlZCBoYXMgZGV0ZWN0ZWQgbGlicmVpc2VyZnMgaW50ZXJmYWNlIHZlcnNpb24gbWlzbWF0Y2guICBGb3VuZCAlZC0lIgorImQsIHJlcXVpcmVkICVkLiBSZWlzZXJGUyBzdXBwb3J0IHdpbGwgYmUgZGlzYWJsZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYWl4LmM6MTM3CisjLCBmdXp6eQorbXNnaWQgIlN1cHBvcnQgZm9yIHJlYWRpbmcgQUlYIGRpc2sgbGFiZWxzIGlzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICJrdWdpcmFuZ28gSURPU0lZRSBuaSBPWUEiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYWl4LmM6MTQ4CisjLCBmdXp6eQorbXNnaWQgIlN1cHBvcnQgZm9yIHdyaXRpbmcgQUlYIGRpc2sgbGFiZWxzIGlzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICJrdWdpcmFuZ28gSURPU0lZRSBuaSBPWUEiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYWl4LmM6MTYxCisjLCBmdXp6eQorbXNnaWQgIiIKKyJTdXBwb3J0IGZvciBhZGRpbmcgcGFydGl0aW9ucyB0byBBSVggZGlzayBsYWJlbHMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgImt1Z2lyYW5nbyBJRE9TSVlFIG5pIE9ZQSIKKworIzogbGlicGFydGVkL2xhYmVscy9haXguYzoxNzEKKyMsIGZ1enp5Cittc2dpZCAiIgorIlN1cHBvcnQgZm9yIGR1cGxpY2F0aW5nIHBhcnRpdGlvbnMgaW4gQUlYIGRpc2sgbGFiZWxzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICJrdWdpcmFuZ28gSURPU0lZRSBuaSBPWUEiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYWl4LmM6MTg5CisjLCBmdXp6eQorbXNnaWQgIiIKKyJTdXBwb3J0IGZvciBzZXR0aW5nIHN5c3RlbSB0eXBlIG9mIHBhcnRpdGlvbnMgaW4gQUlYIGRpc2sgbGFiZWxzIGlzIG5vdCAiCisiaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAia3VnaXJhbmdvIElET1NJWUUgbmkgT1lBIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2FpeC5jOjE5OQorIywgZnV6enkKK21zZ2lkICJTdXBwb3J0IGZvciBzZXR0aW5nIGZsYWdzIGluIEFJWCBkaXNrIGxhYmVscyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAia3VnaXJhbmdvIElET1NJWUUgbmkgT1lBIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2JzZC5jOjUwMSBsaWJwYXJ0ZWQvbGFiZWxzL2Rhc2QuYzo3NTUKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZG9zLmM6MTk3NCBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjc3MAorIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzoxNDQ4IGxpYnBhcnRlZC9sYWJlbHMvbG9vcC5jOjI0OAorIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoxNDA4IGxpYnBhcnRlZC9sYWJlbHMvcGM5OC5jOjc1OQorIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzoxMDQxIGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6NzA1CisjLCBmdXp6eQorbXNnaWQgIlVuYWJsZSB0byBzYXRpc2Z5IGFsbCBjb25zdHJhaW50cyBvbiB0aGUgcGFydGl0aW9uLiIKK21zZ3N0ciAiS3VyaSBCeW9zZSBrdSBpIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2JzZC5jOjUyNgorIywgZnV6enkKK21zZ2lkICJVbmFibGUgdG8gYWxsb2NhdGUgYSBic2QgZGlza2xhYmVsIHNsb3QuIgorbXNnc3RyICJLdXJpIGEiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZGFzZC5jOjE2NgorIywgZnV6enkKK21zZ2lkICJVbmFibGUgdG8gZGV0ZXJtaW5lIHRoZSBibG9jayBzaXplIG9mIHRoaXMgZGFzZCIKK21zZ3N0ciAiS3VyaSBpIEluZ2FubyBCeWEiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZGFzZC5jOjc4MQorIywgZnV6enkKK21zZ2lkICJVbmFibGUgdG8gYWxsb2NhdGUgYSBkYXNkIGRpc2tsYWJlbCBzbG90IgorbXNnc3RyICJLdXJpIGEiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZG9zLmM6ODI3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHBhcnRpdGlvbiB0YWJsZSBvbiAlcyAtLSB3cm9uZyBzaWduYXR1cmUgJXguIgorbXNnc3RyICJpbWJvbmVyYWhhbXdlIyBrdSBJc2lueWEiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZG9zLmM6ODU1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHBhcnRpdGlvbiB0YWJsZSAtIHJlY3Vyc2l2ZSBwYXJ0aXRpb24gb24gJXMuIgorbXNnc3RyICJpbWJvbmVyYWhhbXdlIyBrdSIKKworIzogbGlicGFydGVkL2xhYmVscy9kb3MuYzoxMzE4Cittc2dpZCAiRXh0ZW5kZWQgcGFydGl0aW9ucyBjYW5ub3QgYmUgaGlkZGVuIG9uIG1zZG9zIGRpc2sgbGFiZWxzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rvcy5jOjE5NTgKK21zZ2lkICJQYXJ0ZWQgY2FuJ3QgcmVzaXplIHBhcnRpdGlvbnMgbWFuYWdlZCBieSBXaW5kb3dzIER5bmFtaWMgRGlzay4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9kdmguYzoxOTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyBubyBleHRlbmRlZCBwYXJ0aXRpb24gKHZvbHVtZSBoZWFkZXIgcGFydGl0aW9uKS4iCittc2dzdHIgIiVzT3lhIEJ5b25nZXJld2UuLi4gSWdpY2UgVW11dHdlbXBhbmdhbm8gS3dpcmVuZ2FnaXphIEhhbnl1bWEgQ3lhc2lid2UiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6MzEzCisjLCBmdXp6eQorbXNnaWQgIkNoZWNrc3VtIGlzIHdyb25nLCBpbmRpY2F0aW5nIHRoZSBwYXJ0aXRpb24gdGFibGUgaXMgY29ycnVwdC4iCittc2dzdHIgIm5pIGkgaW1ib25lcmFoYW13ZSMgbmkiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6NjE2CisjLCBmdXp6eQorbXNnaWQgIk9ubHkgcHJpbWFyeSBwYXJ0aXRpb25zIGNhbiBiZSByb290IHBhcnRpdGlvbnMuIgorbXNnc3RyICJJbWl6aSIKKworIzogbGlicGFydGVkL2xhYmVscy9kdmguYzo2MzAKK21zZ2lkICJPbmx5IHByaW1hcnkgcGFydGl0aW9ucyBjYW4gYmUgc3dhcCBwYXJ0aXRpb25zLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjY0NAorIywgZnV6enkKK21zZ2lkICJPbmx5IGxvZ2ljYWwgcGFydGl0aW9ucyBjYW4gYmUgYSBib290IGZpbGUuIgorbXNnc3RyICJCaWp5YW55ZSBuJ2lueXVyYWJ3ZW5nZSBhIElET1NJWUUiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6NzIxCisjLCBmdXp6eQorbXNnaWQgIk9ubHkgbG9naWNhbCBwYXJ0aXRpb25zIChib290IGZpbGVzKSBoYXZlIGEgbmFtZS4iCittc2dzdHIgIkJpanlhbnllIG4naW55dXJhYndlbmdlIElkb3NpeWUgYSBJemluYToiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6ODEyCittc2dpZCAiVG9vIG1hbnkgcHJpbWFyeSBwYXJ0aXRpb25zIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIG9wZW4gZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHNlZWsgZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHJlYWQgZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMTMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyB3cml0ZSBlcnJvclxuIgorIiVzXG4iCittc2dzdHIgIiVzS3dhbmRpa2Ega3UiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIElPQ1RMIGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBBUEkgdmVyc2lvbiBtaXNtYXRjaFxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgVW5zdXBwb3J0ZWQgZGlzayB0eXBlXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBVbnN1cHBvcnRlZCBkaXNrIGZvcm1hdFxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIyBkZXNrdG9wL3NvdXJjZVxhcHBcc3NvZGxnLnNyYzpETEdfU1NPTE9HSU4udGV4dAorIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEzMAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIERpc2sgaW4gdXNlXG4iCisiJXNcbiIKK21zZ3N0ciAiJXMlcyVzIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBDb25maWcgZmlsZSBzeW50YXggZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFZvbHVtZSBsYWJlbCBpcyBjb3JydXB0ZWQuXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBhIGRhdGEgc2V0IG5hbWUgaXMgY29ycnVwdGVkLlxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjE0NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgc3BhY2UgYWxsb2NhdGlvblxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgZGV2aWNlIHZlcmlmaWNhdGlvbiBmYWlsZWRcbiIKKyJUaGUgc3BlY2lmaWVkIGRldmljZSBpcyBub3QgYSB2YWxpZCBEQVNEIGRldmljZVxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIEZhdGFsIGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjQ1NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIGNvbnRhaW5zIEdQVCBzaWduYXR1cmVzLCBpbmRpY2F0aW5nIHRoYXQgaXQgaGFzIGEgR1BUIHRhYmxlLiAgSG93ZXZlciwgaXQgIgorImRvZXMgbm90IGhhdmUgYSB2YWxpZCBmYWtlIG1zZG9zIHBhcnRpdGlvbiB0YWJsZSwgYXMgaXQgc2hvdWxkLiAgUGVyaGFwcyBpdCAiCisid2FzIGNvcnJ1cHRlZCAtLSBwb3NzaWJseSBieSBhIHByb2dyYW0gdGhhdCBkb2Vzbid0IHVuZGVyc3RhbmQgR1BUIHBhcnRpdGlvbiAiCisidGFibGVzLiAgT3IgcGVyaGFwcyB5b3UgZGVsZXRlZCB0aGUgR1BUIHRhYmxlLCBhbmQgYXJlIG5vdyB1c2luZyBhbiBtc2RvcyAiCisicGFydGl0aW9uIHRhYmxlLiAgSXMgdGhpcyBhIEdQVCBwYXJ0aXRpb24gdGFibGU/IgorbXNnc3RyICIiCisiJXNLaXJpbW8gYSBpbWJvbmVyYWhhbXdlIyBPWUEgYSBCeWVtZXdlIGltYm9uZXJhaGFtd2UjIE5rYSBrdSBhIFBvcm9nYXJhbXUgIgorIkltYm9uZXJhaGFtd2UgQ3lhc2lid2UgaSBpbWJvbmVyYWhhbXdlIyBOYSBOT05FQUhBIGlrb3Jlc2hhIGltYm9uZXJhaGFtd2UjICIKKyJpeWkgYSBpbWJvbmVyYWhhbXdlIyIKKworIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzo2NDgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9ybWF0IG9mIHRoZSBHUFQgcGFydGl0aW9uIHRhYmxlIGlzIHZlcnNpb24gJXgsIHdoaWNoIGlzIG5ld2VyIHRoYW4gIgorIndoYXQgUGFydGVkIGNhbiByZWNvZ25pc2UuICBQbGVhc2UgdGVsbCB1cyEgIGJ1Zy1wYXJ0ZWRAZ251Lm9yZyIKK21zZ3N0ciAiSW1pdGVyZXJlIEJ5YSBpIGltYm9uZXJhaGFtd2UjIG5pIFZlcmlzaXlvIG5pIFJXIG9yZyIKKworIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzo2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vdCBhbGwgb2YgdGhlIHNwYWNlIGF2YWlsYWJsZSB0byAlcyBhcHBlYXJzIHRvIGJlIHVzZWQsIHlvdSBjYW4gZml4IHRoZSBHUFQgIgorInRvIHVzZSBhbGwgb2YgdGhlIHNwYWNlIChhbiBleHRyYSAlbGx1IGJsb2Nrcykgb3IgY29udGludWUgd2l0aCB0aGUgY3VycmVudCAiCisic2V0dGluZz8gIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6ODI3CisjLCBmdXp6eQorbXNnaWQgIiIKKyJUaGUgYmFja3VwIEdQVCB0YWJsZSBpcyBub3QgYXQgdGhlIGVuZCBvZiB0aGUgZGlzaywgYXMgaXQgc2hvdWxkIGJlLiAgVGhpcyAiCisibWlnaHQgbWVhbiB0aGF0IGFub3RoZXIgb3BlcmF0aW5nIHN5c3RlbSBiZWxpZXZlcyB0aGUgZGlzayBpcyBzbWFsbGVyLiAgRml4LCAiCisiYnkgbW92aW5nIHRoZSBiYWNrdXAgdG8gdGhlIGVuZCAoYW5kIHJlbW92aW5nIHRoZSBvbGQgYmFja3VwKT8iCittc2dzdHIgIiIKKyJJbnlpYnV0c2EgaW1ib25lcmFoYW13ZSMgbmkgT1lBIGt1IGkgSW1wZXJhIEJ5YSBpIE5rYSBJbXB1emFuZGVuZ28tIFNpc2l0ZW11ICIKKyJpIG5pIEdpdG95YSBrdSBpIElueWlidXRzYSBLdXJpIGkgSW1wZXJhIE5hIGkga2kvIGJpc2hhamUgSW55aWJ1dHNhIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjg2MgorIywgZnV6enkKK21zZ2lkICIiCisiVGhlIHByaW1hcnkgR1BUIHRhYmxlIGlzIGNvcnJ1cHQsIGJ1dCB0aGUgYmFja3VwIGFwcGVhcnMgT0ssIHNvIHRoYXQgd2lsbCBiZSAiCisidXNlZC4iCittc2dzdHIgImltYm9uZXJhaGFtd2UjIG5pIGkgSW55aWJ1dHNhIFlFR08iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6ODcwCisjLCBmdXp6eQorbXNnaWQgIiIKKyJCb3RoIHRoZSBwcmltYXJ5IGFuZCBiYWNrdXAgR1BUIHRhYmxlcyBhcmUgY29ycnVwdC4gIFRyeSBtYWtpbmcgYSBmcmVzaCAiCisidGFibGUsIGFuZCB1c2luZyBQYXJ0ZWQncyByZXNjdWUgZmVhdHVyZSB0byByZWNvdmVyIHBhcnRpdGlvbnMuIgorbXNnc3RyICJpIE5hIElueWlidXRzYSBJbWJvbmVyYWhhbXdlIGEgaW1ib25lcmFoYW13ZSMgTmEgaWtvcmVzaGEgS3VyaSIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoxODEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgc2lnbmF0dXJlICV4IGZvciBNYWMgZGlzayBsYWJlbHMuIgorbXNnc3RyICJJc2lueWEga3VnaXJhbmdvIFV0dXJhbmdvLi4uIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjIyNgorIywgZnV6enkKK21zZ2lkICJQYXJ0aXRpb24gbWFwIGhhcyBubyBwYXJ0aXRpb24gbWFwIGVudHJ5ISIKK21zZ3N0ciAiT3lhIEljeWluamlqd2UiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6MjczCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyB0b28gc21hbGwgZm9yIGEgTWFjIGRpc2sgbGFiZWwhIgorbXNnc3RyICIlc25pIEdpdG95YSBrdWdpcmFuZ28gYSBBa2FyYW5nbyIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo1MzIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlBhcnRpdGlvbiAlZCBoYXMgYW4gaW52YWxpZCBzaWduYXR1cmUgJXguIgorbXNnc3RyICJTaWJ5byBJc2lueWEiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NTUwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJQYXJ0aXRpb24gJWQgaGFzIGFuIGludmFsaWQgbGVuZ3RoIG9mIDAgYnl0ZXMhIgorbXNnc3RyICJTaWJ5byBVYnVyZWJ1cmUgQnlhIDAgQmF5aXRlIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjU4MAorIywgZnV6enkKK21zZ2lkICJUaGUgZGF0YSByZWdpb24gZG9lc24ndCBzdGFydCBhdCB0aGUgc3RhcnQgb2YgdGhlIHBhcnRpdGlvbi4iCittc2dzdHIgIklieWF0YW56d2UgR3V0YW5naXJhIGt1IGkgR3V0YW5naXJhIEJ5YSBpIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjU5NworIywgZnV6enkKK21zZ2lkICJUaGUgYm9vdCByZWdpb24gZG9lc24ndCBzdGFydCBhdCB0aGUgc3RhcnQgb2YgdGhlIHBhcnRpdGlvbi4iCittc2dzdHIgIkd1dGFuZ2lyYSBrdSBpIEd1dGFuZ2lyYSBCeWEgaSIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo2MTEKKyMsIGZ1enp5Cittc2dpZCAiVGhlIHBhcnRpdGlvbidzIGJvb3QgcmVnaW9uIGRvZXNuJ3Qgb2NjdXB5IHRoZSBlbnRpcmUgcGFydGl0aW9uLiIKK21zZ3N0ciAiaSIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo2MjIKKyMsIGZ1enp5Cittc2dpZCAiVGhlIHBhcnRpdGlvbidzIGRhdGEgcmVnaW9uIGRvZXNuJ3Qgb2NjdXB5IHRoZSBlbnRpcmUgcGFydGl0aW9uLiIKK21zZ3N0ciAiSWJ5YXRhbnp3ZSBpIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjY3NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIldlaXJkIGJsb2NrIHNpemUgb24gZGV2aWNlIGRlc2NyaXB0b3I6ICVkIGJ5dGVzIGlzIG5vdCBkaXZpc2libGUgYnkgNTEyLiIKK21zZ3N0ciAiRnVuZ2EgSW5nYW5vIGt1IEFQQVJFWUUgQmF5aXRlIG5pIE9ZQSBrdSIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo2ODgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZHJpdmVyIGRlc2NyaXB0b3Igc2F5cyB0aGUgcGh5c2ljYWwgYmxvY2sgc2l6ZSBpcyAlZCBieXRlcywgYnV0IExpbnV4ICIKKyJzYXlzIGl0IGlzICVkIGJ5dGVzLiIKK21zZ3N0ciAiTXVzb215aTogaSBJZmF0aWthIEZ1bmdhIEluZ2FubyBuaSBCYXlpdGUgbmkgQmF5aXRlIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjczNgorIywgZnV6enkKK21zZ2lkICJObyB2YWxpZCBwYXJ0aXRpb24gbWFwIGZvdW5kLiIKK21zZ3N0ciAiQnllbWV3ZSBCeWFib25ldHNlIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjc5NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvbmZsaWN0aW5nIHBhcnRpdGlvbiBtYXAgZW50cnkgc2l6ZXMhICBFbnRyeSAxIHNheXMgaXQgaXMgJWQsIGJ1dCBlbnRyeSAlZCAiCisic2F5cyBpdCBpcyAlZCEiCittc2dzdHIgIkljeWluamlqd2UgMS4gSWN5aW5qaWp3ZSIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo4MjIKKyMsIGZ1enp5Cittc2dpZCAiV2VpcmQhICBUaGVyZSBhcmUgMiBwYXJ0aXRpb25zIG1hcCBlbnRyaWVzISIKK21zZ3N0ciAiMi4gSWJ5aW5qaWp3ZSIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoxMzQ3CisjLCBmdXp6eQorbXNnaWQgIiIKKyJDaGFuZ2luZyB0aGUgbmFtZSBvZiBhIHJvb3Qgb3Igc3dhcCBwYXJ0aXRpb24gd2lsbCBwcmV2ZW50IExpbnV4IGZyb20gIgorInJlY29nbmlzaW5nIGl0IGFzIHN1Y2guIgorbXNnc3RyICJpIEl6aW5hOiBCeWEgYSBJbWl6aSBDeWFuZ3dhIEJpdnV5ZSBOa2EiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6MTQ0MworIywgZnV6enkKK21zZ2lkICJDYW4ndCBhZGQgYW5vdGhlciBwYXJ0aXRpb24gLS0gdGhlIHBhcnRpdGlvbiBtYXAgaXMgdG9vIHNtYWxsISIKK21zZ3N0ciAiS29uZ2VyYW1vIG5pIEdpdG95YSIKKworIzogbGlicGFydGVkL2xhYmVscy9wYzk4LmM6MzU0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHBhcnRpdGlvbiB0YWJsZSBvbiAlcy4iCittc2dzdHIgImltYm9uZXJhaGFtd2UjIGt1IgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3BjOTguYzo0MDYgbGlicGFydGVkL2xhYmVscy9wYzk4LmM6NDg0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiUGFydGl0aW9uICVkIGlzbid0IGFsaWduZWQgdG8gY3lsaW5kZXIgYm91bmRhcmllcy4gIFRoaXMgaXMgc3RpbGwgIgorInVuc3VwcG9ydGVkLiIKK21zZ3N0ciAic2kgS3VyaSBVbXdpYnVydW5ndXNodXJlIEt1cmkgS29uZ2VyYW1vIEd1c2hpZ2lraXJhIGt1Z2lyYW5nbyBpeWkiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcGM5OC5jOjc5MQorIywgZnV6enkKK21zZ2lkICJDYW4ndCBhZGQgYW5vdGhlciBwYXJ0aXRpb24uIgorbXNnc3RyICJLb25nZXJhbW8iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6MTYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogQmFkIGNoZWNrc3VtIG9uIGJsb2NrICVsbHUgb2YgdHlwZSAlcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo0OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBEaWRuJ3QgZmluZCByZGIgYmxvY2ssIHNob3VsZCBuZXZlciBoYXBwZW4uIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6NTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogTG9vcCBkZXRlY3RlZCBhdCBibG9jayAlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo2MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBUaGUgJXMgbGlzdCBzZWVtcyBiYWQgYXQgYmxvY2sgJXMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6Njg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGxpc3QgYmFkIGJsb2Nrcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo2OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gbGlzdCBwYXJ0aXRpb24gYmxvY2tzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjcwNQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBsaXN0IGZpbGUgc3lzdGVtIGJsb2Nrcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo3MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gbGlzdCBib290IGJsb2Nrcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo3NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHdyaXRlIHBhcnRpdGlvbiBibG9jayBhdCAlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzoxMDY5CisjLCBmdXp6eQorbXNnaWQgIlVuYWJsZSB0byBhbGxvY2F0ZSBhIHBhcnRpdGlvbiBudW1iZXIuIgorbXNnc3RyICJhIFVtdWJhcmUiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6MTQ1CisjLCBmdXp6eQorbXNnaWQgIkNvcnJ1cHRlZCBTdW4gZGlzayBsYWJlbCBkZXRlY3RlZC4iCittc2dzdHIgIkFrYXJhbmdvIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3N1bi5jOjI2NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBkaXNrIENIUyBnZW9tZXRyeSAoJWQsJWQsJWQpIHJlcG9ydGVkIGJ5IHRoZSBvcGVyYXRpbmcgc3lzdGVtIGRvZXMgbm90ICIKKyJtYXRjaCB0aGUgZ2VvbWV0cnkgc3RvcmVkIG9uIHRoZSBkaXNrIGxhYmVsICglZCwlZCwlZCkuIgorbXNnc3RyICJJeWlnYW1hc2h1c2hvIE9ZQSBCSUhVWUUgaSBJeWlnYW1hc2h1c2hvIGt1IGkgQWthcmFuZ28iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6Mjg4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJUaGUgZGlzayBsYWJlbCBkZXNjcmliZXMgYSBkaXNrIGJpZ2dlciB0aGFuICVzLiIKK21zZ3N0ciAiQWthcmFuZ28gYSIKKworIzogbGlicGFydGVkL2xhYmVscy9zdW4uYzo0NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGRpc2sgaGFzICVkIGN5bGluZGVycywgd2hpY2ggaXMgZ3JlYXRlciB0aGFuIHRoZSBtYXhpbXVtIG9mIDY1NTM2LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3N1bi5jOjczNworIywgZnV6enkKK21zZ2lkICIiCisiVGhlIFdob2xlIERpc2sgcGFydGl0aW9uIGlzIHRoZSBvbmx5IGF2YWlsYWJsZSBvbmUgbGVmdC4gIEdlbmVyYWxseSwgaXQgaXMgIgorIm5vdCBhIGdvb2QgaWRlYSB0byBvdmVyd3JpdGUgdGhpcyBwYXJ0aXRpb24gd2l0aCBhIHJlYWwgb25lLiAgU29sYXJpcyBtYXkgIgorIm5vdCBiZSBhYmxlIHRvIGJvb3Qgd2l0aG91dCBpdCwgYW5kIFNJTE8gKHRoZSBzcGFyYyBib290IGxvYWRlcikgYXBwcmVjaWF0ZXMgIgorIml0IGFzIHdlbGwuIgorbXNnc3RyICIiCisibmkgaSBCaWhhcmkgSWJ1bW9zbzogbmkgT1lBIGEgS3VyaSBHdWhpbmR1cmEgaXlpIE5hOiBhIEdpY3VyYXNpIE9ZQSBLdXJpIE5hICIKKyJpIE5rYSIKKworIzogbGlicGFydGVkL2xhYmVscy9zdW4uYzo3NTIKKyMsIGZ1enp5Cittc2dpZCAiU3VuIGRpc2sgbGFiZWwgaXMgZnVsbC4iCittc2dzdHIgIkFrYXJhbmdvIG5pIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIG9wZW5pbmcgZGV2aWNlICclcycgZmFpbGVkLlxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6MTY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBzZWVraW5nIGRldmljZSAnJXMnIGZhaWxlZC5cbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjE3MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgd3JpdGluZyB0byBkZXZpY2UgJyVzJyBmYWlsZWQsXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzoxNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHJlYWRpbmcgZnJvbSBkZXZpY2UgJyVzJyBmYWlsZWQuXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzoxNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmF0YWwgZXJyb3JcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0MTgKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBWVE9DIGxhYmVscy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDI0Cittc2dpZCAiQ291bGQgbm90IHJlYWQgVlRPQyBGTVQxIERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQzMQorbXNnaWQgIkNvdWxkIG5vdCByZWFkIFZUT0MgRk1UNCBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0MzgKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBWVE9DIEZNVDUgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDQ1Cittc2dpZCAiQ291bGQgbm90IHJlYWQgVlRPQyBGTVQ3IERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQ2MgorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBWVE9DIGxhYmVscy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDY4Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIFZUT0MgRk1UMSBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0NzUKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgVlRPQyBGTVQ0IERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQ4MgorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBWVE9DIEZNVDUgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDg5Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIFZUT0MgRk1UNyBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGlicGFydGVkLmM6Mjk2IGxpYnBhcnRlZC9saWJwYXJ0ZWQuYzozMTYKKyMsIGZ1enp5Cittc2dpZCAiT3V0IG9mIG1lbW9yeS4iCittc2dzdHIgIlVidWJpa28gYndhcmVuendlIgorCisjOiBsaWJwYXJ0ZWQvdW5pdC5jOjEzOQorbXNnaWQgIkNhbm5vdCBnZXQgdW5pdCBzaXplIGZvciBzcGVjaWFsIHVuaXQgJ0NPTVBBQ1QnLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvdW5pdC5jOjM4NgorIywgYy1mb3JtYXQKK21zZ2lkICJcIiVzXCIgaGFzIGludmFsaWQgc3ludGF4IGZvciBsb2NhdGlvbnMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC91bml0LmM6Mzk0CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBtYXhpbXVtIGhlYWQgdmFsdWUgaXMgJWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC91bml0LmM6NDAxCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBtYXhpbXVtIHNlY3RvciB2YWx1ZSBpcyAlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL3VuaXQuYzo0MTMgbGlicGFydGVkL3VuaXQuYzo1NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGxvY2F0aW9uICVzIGlzIG91dHNpZGUgb2YgdGhlIGRldmljZSAlcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL3VuaXQuYzo1MjcKK21zZ2lkICJJbnZhbGlkIG51bWJlci4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FmZnMuYzo2MyBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXBmcy5jOjU2CisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXNmcy5jOjcwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBhbGxvY2F0ZSBwYXJ0aXRpb24gYmxvY2tcbiIKK21zZ3N0ciAiYSBVbXViYXJlIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYWZmcy5jOjc4IGxpYnBhcnRlZC9mcy9hbWlnYS9hcGZzLmM6NzAKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hc2ZzLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gYWxsb2NhdGUgYmxvY2tcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYWZmcy5jOjgzIGxpYnBhcnRlZC9mcy9hbWlnYS9hcGZzLmM6NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBDb3VsZG4ndCByZWFkIGJvb3QgYmxvY2sgJWxsdVxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hZmZzLmM6OTkgbGlicGFydGVkL2ZzL2FtaWdhL2FwZnMuYzo4NgorIzogbGlicGFydGVkL2ZzL2FtaWdhL2FzZnMuYzo5MiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXNmcy5jOjEwNgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IENvdWxkbid0IHJlYWQgcm9vdCBibG9jayAlbGx1XG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gYWxsb2NhdGUgaWQgbGlzdCBlbGVtZW50XG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogQ291bGRuJ3QgcmVhZCBibG9jayAlbGx1XG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6MjAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogQmFkIGNoZWNrc3VtIG9uIGJsb2NrICVsbHUgb2YgdHlwZSAlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jOjIxMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBDb3VsZG4ndCB3cml0ZSBibG9jayAlZFxuIgorbXNnc3RyICIlc0t3YW5kaWthIGt1IgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzoyNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gYWxsb2NhdGUgZGlza19zcGVjaWZpYyByZGIgYmxvY2tcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzoyODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBEaWRuJ3QgZmluZCByZGIgYmxvY2ssIHNob3VsZCBuZXZlciBoYXBwZW5cbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzozMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gcmVhZCBwYXJ0aXRpb24gYmxvY2sgJWxsdVxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo4NyBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6MTEyCisjLCBmdXp6eQorbXNnaWQgIkluY29uc2lzdGVudCBncm91cCBkZXNjcmlwdG9ycyEiCittc2dzdHIgIkl0c2luZGEiCisKKyMgb2ZmaWNlY2ZnL3JlZ2lzdHJ5XHNjaGVtYVxvcmdcb3Blbm9mZmljZVxPZmZpY2VcQ29tbW9uLnhjczouLi4uU2F2ZS5VUkwuRmlsZVN5c3RlbS50ZXh0CisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6OTEgbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjExNgorIywgZnV6enkKK21zZ2lkICJGaWxlIHN5c3RlbSBmdWxsISIKK21zZ3N0ciAiSWRvc2l5ZSB5YSBzaXNpdGVtdSIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjY4NgorIywgZnV6enkKK21zZ2lkICJJbnZhbGlkIHN1cGVyYmxvY2suICBBcmUgeW91IHN1cmUgdGhpcyBpcyBhbiBleHQyIGZpbGUgc3lzdGVtPyIKK21zZ3N0ciAiaXlpIG5pIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6NzAwIGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NjU4CisjLCBmdXp6eQorbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyBlcnJvcnMhICBZb3Ugc2hvdWxkIHJ1biBlMmZzY2suIgorbXNnc3RyICJBbWFrb3NhIEd1a29yZXNoYSIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjcxMQorIywgZnV6enkKK21zZ2lkICIiCisiRmlsZSBzeXN0ZW0gd2FzIG5vdCBjbGVhbmx5IHVubW91bnRlZCEgIFlvdSBzaG91bGQgcnVuIGUyZnNjay4gIE1vZGlmeWluZyBhbiAiCisidW5jbGVhbiBmaWxlIHN5c3RlbSBjb3VsZCBjYXVzZSBzZXZlcmUgY29ycnVwdGlvbi4iCittc2dzdHIgIk9ZQSIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjczMQorIywgZnV6enkKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgYW4gaW5jb21wYXRpYmxlIGZlYXR1cmUgZW5hYmxlZC4iCittc2dzdHIgIkJpa29yYSIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjc0MgorIywgZnV6enkKK21zZ2lkICJFcnJvciBhbGxvY2F0aW5nIGJ1ZmZlciBjYWNoZS4iCittc2dzdHIgIlVid2loaXNobyIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9pbm9kZV9yZWxvY2F0b3IuYzoxMTQKKyMsIGZ1enp5Cittc2dpZCAiIgorIkZvdW5kIGFuIGlub2RlIHdpdGggYSBpbmNvcnJlY3QgbGluayBjb3VudC4gIEJldHRlciBnbyBydW4gZTJmc2NrIGZpcnN0ISIKK21zZ3N0ciAiTmE6IGEgSWh1emEgSUJBUkEgR3lheW8gR3Vrb3Jlc2hhIEl0YW5naXJhIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2lub2RlX3JlbG9jYXRvci5jOjQ4NworIywgZnV6enkKK21zZ2lkICJOb3QgZW5vdWdoIGZyZWUgaW5vZGVzISIKK21zZ3N0ciAiS2lnZW5nYSIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzoyMjMKKyMsIGZ1enp5Cittc2dpZCAiRmlsZSBzeXN0ZW0gaXMgdG9vIGZ1bGwgdG8gcmVtb3ZlIGEgZ3JvdXAhIgorbXNnc3RyICJuaSBLdXJpIEd1a3VyYWhvLi4uIGEgSXRzaW5kYSIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzoyMzIKKyMsIGZ1enp5Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIHRvbyBtYW55IGFsbG9jYXRlZCBpbm9kZXMgdG8gcmVtb3ZlIGEgZ3JvdXAhIgorbXNnc3RyICJLdXJpIEd1a3VyYWhvLi4uIGEgSXRzaW5kYSIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo0OTEKKyMsIGZ1enp5Cittc2dpZCAiYWRkaW5nIGdyb3VwcyIKK21zZ3N0ciAiV29uZ2VyYSBBbWF0c2luZGEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NTI4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGZpbGUgc3lzdGVtIGlzIHRvbyBmdWxsIHRvIHJlc2l6ZSBpdCB0byAlaSBibG9ja3MuICBTb3JyeS4iCittc2dzdHIgIm5pIEt1cmkgSWhpbmR1cmFuZ2VybyBLdXJpIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjUzOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgZmlsZSBzeXN0ZW0gaGFzIHRvbyBtYW55IG9jY3VwaWVkIGlub2RlcyB0byByZXNpemUgaXQgdG8gJWkgYmxvY2tzLiAgIgorIlNvcnJ5LiIKK21zZ3N0ciAiS3VyaSBJaGluZHVyYW5nZXJvIEt1cmkiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NjY2CisjLCBmdXp6eQorbXNnaWQgIkZpbGUgc3lzdGVtIHdhcyBub3QgY2xlYW5seSB1bm1vdW50ZWQhICBZb3Ugc2hvdWxkIHJ1biBlMmZzY2suIgorbXNnc3RyICJPWUEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6Njc1CisjLCBmdXp6eQorbXNnaWQgIiIKKyJUaGUgZmlsZSBzeXN0ZW0gaGFzIHRoZSAnZGlyX2luZGV4JyBmZWF0dXJlIGVuYWJsZWQuICBQYXJ0ZWQgY2FuIG9ubHkgcmVzaXplICIKKyJ0aGUgZmlsZSBzeXN0ZW0gaWYgaXQgZGlzYWJsZXMgdGhpcyBmZWF0dXJlLiAgWW91IGNhbiBlbmFibGUgaXQgbGF0ZXIgYnkgIgorInJ1bm5pbmcgJ3R1bmUyZnMgLU8gZGlyX2luZGV4IERFVklDRScgYW5kIHRoZW4gJ2UyZnNjayAtZkQgREVWSUNFJy4iCittc2dzdHIgIiIKKyJJRE9TSVlFIFNpc2l0ZW11IGkgQmlrb3JhIEloaW5kdXJhbmdlcm8gaSBJRE9TSVlFIFNpc2l0ZW11IE5JQkEgaXlpICIKKyJHdXNob2JvemEga3UgTmEgSGFueXVtYSIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo2OTEKK21zZ2lkICIiCisiQSByZXNpemUgb3BlcmF0aW9uIG9uIHRoaXMgZmlsZSBzeXN0ZW0gd2lsbCB1c2UgRVhQRVJJTUVOVEFMIGNvZGVcbiIKKyJ0aGF0IE1BWSBDT1JSVVBUIGl0IChhbHRob3VnaCBubyBvbmUgaGFzIHJlcG9ydGVkIGFueSBzdWNoIGRhbWFnZSB5ZXQpLlxuIgorIllvdSBzaG91bGQgYXQgbGVhc3QgYmFja3VwIHlvdXIgZGF0YSBmaXJzdCwgYW5kIHJ1biAnZTJmc2NrIC1mJyBhZnRlcndhcmRzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2Jsb2NrX3JlbG9jYXRvci5jOjE5OAorIywgZnV6enkKK21zZ2lkICJDcm9zcy1saW5rZWQgYmxvY2tzIGZvdW5kISAgQmV0dGVyIGdvIHJ1biBlMmZzY2sgZmlyc3QhIgorbXNnc3RyICJCeWFib25ldHNlIEd5YXlvIEd1a29yZXNoYSBJdGFuZ2lyYSIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9ibG9ja19yZWxvY2F0b3IuYzo1MzcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrICVpIGhhcyBubyByZWZlcmVuY2U/ICBXZWlyZC4iCittc2dzdHIgIk95YSBJbmRhbmdvIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2Jsb2NrX3JlbG9jYXRvci5jOjczNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQmxvY2sgJWkgc2hvdWxkbid0IGhhdmUgYmVlbiBtYXJrZWQgKCVkLCAlZCkhIgorbXNnc3RyICJjeS8gYnlhZ2FyYWp3ZSIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvaW50ZXJmYWNlLmM6MTg2CisjLCBmdXp6eQorbXNnaWQgIiIKKyJUaGUgZXh0MiBmaWxlIHN5c3RlbSBwYXNzZWQgYSBiYXNpYyBjaGVjay4gIEZvciBhIG1vcmUgY29tcHJlaGVuc2l2ZSBjaGVjaywgIgorInVzZSB0aGUgZTJmc2NrIHByb2dyYW0uIgorbXNnc3RyICJhIEJBU0lDIEt1Z2VuenVyYS4uLiBhIEJpcmVuemVobyBLdWdlbnp1cmEuLi4gR3Vrb3Jlc2hhIGkgUG9yb2dhcmFtdSIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvaW50ZXJmYWNlLmM6MjAzCisjLCBmdXp6eQorbXNnaWQgIlNvcnJ5LCBjYW4ndCBtb3ZlIHRoZSBzdGFydCBvZiBleHQyIHBhcnRpdGlvbnMgeWV0ISIKK21zZ3N0ciAiS3dpbXVyYSBpIEd1dGFuZ2lyYSBCeWEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfYnVmZmVyLmM6ODIKKyMsIGZ1enp5Cittc2dpZCAiQ291bGRuJ3QgZmx1c2ggYnVmZmVyIGNhY2hlISIKK21zZ3N0ciAiVWJ3aWhpc2hvIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX21rZnMuYzoxNjIKKyMsIGZ1enp5Cittc2dpZCAid3JpdGluZyBwZXItZ3JvdXAgbWV0YWRhdGEiCittc2dzdHIgIkl0c2luZGEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfbWtmcy5jOjU2NAorIywgZnV6enkKK21zZ2lkICJGaWxlIHN5c3RlbSB0b28gc21hbGwgZm9yIGV4dDIuIgorbXNnc3RyICJJZG9zaXllIFNpc2l0ZW11IEdpdG95YSBrdWdpcmFuZ28iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY2FsYy5jOjEzNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBuZWVkICVzIG9mIGZyZWUgZGlzayBzcGFjZSB0byBzaHJpbmsgdGhpcyBwYXJ0aXRpb24gdG8gdGhpcyBzaXplLiAgIgorIkN1cnJlbnRseSwgb25seSAlcyBpcyBmcmVlLiIKK21zZ3N0ciAiQnlhIEtpZ2VuZ2EgVW13YW55YSBLdXJpIEt1Z2FiYW51a2EgaXlpIEt1cmkgaXlpIEluZ2FubyBLaWdlbmdhIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvbnRleHQuYzo1NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIkNsdXN0ZXIgc3RhcnQgZGVsdGEgPSAlZCwgd2hpY2ggaXMgbm90IGEgbXVsdGlwbGUgb2YgdGhlIGNsdXN0ZXIgc2l6ZSAlZC4iCittc2dzdHIgIkd1dGFuZ2lyYSBERUxUQSBuaSBPWUEgYSBJZ2lrdWJvIEJ5YSBpIEluZ2FubyIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9mYXQuYzozMDgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlBhcnRpdGlvbiB0b28gYmlnL3NtYWxsIGZvciBhICVzIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiR2l0b3lhIGt1Z2lyYW5nbyBhIElET1NJWUUgU2lzaXRlbXUiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvZmF0LmM6NDc0CisjLCBmdXp6eQorbXNnaWQgIiIKKyJUaGUgRkFUcyBkb24ndCBtYXRjaC4gIElmIHlvdSBkb24ndCBrbm93IHdoYXQgdGhpcyBtZWFucywgdGhlbiBzZWxlY3QgIgorImNhbmNlbCwgcnVuIHNjYW5kaXNrIG9uIHRoZSBmaWxlIHN5c3RlbSwgYW5kIHRoZW4gY29tZSBiYWNrLiIKK21zZ3N0ciAiIgorIkJJSFVZRSBpeWkgSGFueXVtYSBHdWhpdGFtbyBLdXJla2EgR3Vrb3Jlc2hhIGt1IGkgSURPU0lZRSBTaXNpdGVtdSBOYSAiCisiSGFueXVtYSBJbnl1bWEiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvZmF0LmM6NTE0CisjLCBmdXp6eQorbXNnaWQgIlRoZXJlIGFyZSBubyBwb3NzaWJsZSBjb25maWd1cmF0aW9ucyBmb3IgdGhpcyBGQVQgdHlwZS4iCittc2dzdHIgIk95YSBBbWFib25lemEga3VnaXJhbmdvIGl5aSBVYndva28iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvZmF0LmM6NTI2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiRmlsZSBzeXN0ZW0gZG9lc24ndCBoYXZlIGV4cGVjdGVkIHNpemVzIGZvciBXaW5kb3dzIHRvIGxpa2UgaXQuICBDbHVzdGVyICIKKyJzaXplIGlzICVkayAoJWRrIGV4cGVjdGVkKTsgbnVtYmVyIG9mIGNsdXN0ZXJzIGlzICVkICglZCBleHBlY3RlZCk7IHNpemUgb2YgIgorIkZBVHMgaXMgJWQgc2VjdG9ycyAoJWQgZXhwZWN0ZWQpLiIKK21zZ3N0ciAiIgorIklkb3NpeWUgU2lzaXRlbXUgSWtpdGV6d2U6IGt1Z2lyYW5nbyBLdXJpIG5rYSBJbmdhbm8gbmkgSWtpdGV6d2U6IFVtdWJhcmUgIgorIkJ5YSBuaSBJa2l0ZXp3ZTogSW5nYW5vIEJ5YSBuaSBJa2l0ZXp3ZToiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvZmF0LmM6NTQ5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiRmlsZSBzeXN0ZW0gaXMgcmVwb3J0aW5nIHRoZSBmcmVlIHNwYWNlIGFzICVkIGNsdXN0ZXJzLCBub3QgJWQgY2x1c3RlcnMuIgorbXNnc3RyICJJZG9zaXllIFNpc2l0ZW11IG5pIGkgS2lnZW5nYSBVbXdhbnlhIE5rYSBPWUEiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvZmF0LmM6ODc0CisjLCBmdXp6eQorbXNnaWQgIiIKKyJHTlUgUGFydGVkIHdhcyBtaXNjb21waWxlZDogdGhlIEZBVCBib290IHNlY3RvciBzaG91bGQgYmUgNTEyIGJ5dGVzLiAgRkFUICIKKyJzdXBwb3J0IHdpbGwgYmUgZGlzYWJsZWQuIgorbXNnc3RyICJpIEJheWl0ZSBHdXNoaWdpa2lyYSBZYWhhZ2FyaXRzd2UiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6MTU5CisjLCBmdXp6eQorbXNnaWQgIiIKKyJUaGVyZSdzIG5vdCBlbm91Z2ggcm9vbSBpbiB0aGUgcm9vdCBkaXJlY3RvcnkgZm9yIGFsbCBvZiB0aGUgZmlsZXMuICBFaXRoZXIgIgorImNhbmNlbCwgb3IgaWdub3JlIHRvIGxvc2UgdGhlIGZpbGVzLiIKK21zZ3N0ciAiIgorIk9ZQSBpbiBpIEltaXppIGJ1c2h5aW5ndXJvIGt1Z2lyYW5nbyBCeW9zZSBCeWEgaSBJZG9zaXllIEt1cmVrYSBDeWFuZ3dhICIKKyJLd2lyZW5nYWdpemEgS3VyaSBpIElkb3NpeWUiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6MzAwCisjLCBmdXp6eQorbXNnaWQgIkVycm9yIHdyaXRpbmcgdG8gdGhlIHJvb3QgZGlyZWN0b3J5LiIKK21zZ3N0ciAiS3VyaSBpIEltaXppIGJ1c2h5aW5ndXJvIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjQ4OQorIywgZnV6enkKK21zZ2lkICJJZiB5b3UgbGVhdmUgeW91ciBmaWxlIHN5c3RlbSBhcyBGQVQxNiwgdGhlbiB5b3Ugd2lsbCBoYXZlIG5vIHByb2JsZW1zLiIKK21zZ3N0ciAiSURPU0lZRSBTaXNpdGVtdSBOa2EgSGFueXVtYSBPeWEiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NDkyCisjLCBmdXp6eQorbXNnaWQgIiIKKyJJZiB5b3UgY29udmVydCB0byBGQVQxNiwgYW5kIE1TIFdpbmRvd3MgaXMgaW5zdGFsbGVkIG9uIHRoaXMgcGFydGl0aW9uLCB0aGVuICIKKyJ5b3UgbXVzdCByZS1pbnN0YWxsIHRoZSBNUyBXaW5kb3dzIGJvb3QgbG9hZGVyLiAgSWYgeW91IHdhbnQgdG8gZG8gdGhpcywgeW91ICIKKyJzaG91bGQgY29uc3VsdCB0aGUgUGFydGVkIG1hbnVhbCAob3IgeW91ciBkaXN0cmlidXRpb24ncyBtYW51YWwpLiIKK21zZ3N0ciAiIgorIkdVSElORFVSQSBLdXJpIE5hIG5pIGt1IGl5aSBIYW55dW1hIEt3aW5qaXphIHBvcm9nYXJhbXUgaSBLdXJpIGl5aSBpIEJpa29yd2EgIgorIkN5YW5nd2EgQmlrb3J3YSIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1MDAKKyMsIGZ1enp5Cittc2dpZCAiIgorIklmIHlvdSBsZWF2ZSB5b3VyIGZpbGUgc3lzdGVtIGFzIEZBVDMyLCB0aGVuIHlvdSB3aWxsIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyAiCisicHJvYmxlbXMuIgorbXNnc3RyICJJRE9TSVlFIFNpc2l0ZW11IE5rYSBIYW55dW1hIE9ZQSBHaXNoeWEiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTA0CisjLCBmdXp6eQorbXNnaWQgIiIKKyJJZiB5b3UgY29udmVydCB0byBGQVQzMiwgYW5kIE1TIFdpbmRvd3MgaXMgaW5zdGFsbGVkIG9uIHRoaXMgcGFydGl0aW9uLCB0aGVuICIKKyJ5b3UgbXVzdCByZS1pbnN0YWxsIHRoZSBNUyBXaW5kb3dzIGJvb3QgbG9hZGVyLiAgSWYgeW91IHdhbnQgdG8gZG8gdGhpcywgeW91ICIKKyJzaG91bGQgY29uc3VsdCB0aGUgUGFydGVkIG1hbnVhbCAob3IgeW91ciBkaXN0cmlidXRpb24ncyBtYW51YWwpLiAgQWxzbywgIgorImNvbnZlcnRpbmcgdG8gRkFUMzIgd2lsbCBtYWtlIHRoZSBmaWxlIHN5c3RlbSB1bnJlYWRhYmxlIGJ5IE1TIERPUywgTVMgIgorIldpbmRvd3MgOTVhLCBhbmQgTVMgV2luZG93cyBOVC4iCittc2dzdHIgIiIKKyJHVUhJTkRVUkEgS3VyaSBOYSBuaSBrdSBpeWkgSGFueXVtYSBLd2luaml6YSBwb3JvZ2FyYW11IGkgS3VyaSBpeWkgaSBCaWtvcndhICIKKyJDeWFuZ3dhIEJpa29yd2EgR3VoaW5kdXJhLi4uLiBLdXJpIFVid29rbyBpIElET1NJWUUgU2lzaXRlbXUga3UgTmEiCisKKyMgZGVza3RvcC9zb3VyY2VcYXBwXHNzb2RsZy5zcmM6RExHX1NTT0xPR0lOLnRleHQKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTE4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyAgJXMgICVzIgorbXNnc3RyICIlcyVzJXMiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTE5CisjLCBmdXp6eQorbXNnaWQgIldvdWxkIHlvdSBsaWtlIHRvIHVzZSBGQVQzMj8iCittc2dzdHIgIm5rYSBLdXJpIEd1a29yZXNoYSIKKworIyAjLSMtIy0jLSMgIGRiYWNjZXNzLnBvdCAoUEFDS0FHRSBWRVJTSU9OKSAgIy0jLSMtIy0jCisjICMtIy0jLSMtIyAgZGJhY2Nlc3MucG90IChQQUNLQUdFIFZFUlNJT04pICAjLSMtIy0jLSMKKyMgIy0jLSMtIy0jICBkYmFjY2Vzcy5wb3QgKFBBQ0tBR0UgVkVSU0lPTikgICMtIy0jLSMtIworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1NTAgbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1NjYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzICAlcyIKK21zZ3N0ciAiJXMlcyIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1NTEKKyMsIGZ1enp5Cittc2dpZCAiIgorIlRoZSBmaWxlIHN5c3RlbSBjYW4gb25seSBiZSByZXNpemVkIHRvIHRoaXMgc2l6ZSBieSBjb252ZXJ0aW5nIHRvIEZBVDE2LiIKK21zZ3N0ciAiSURPU0lZRSBTaXNpdGVtdSBLdXJpIGl5aSBJbmdhbm8ga3UgR3VoaW5kdXJhLi4uLiBLdXJpIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjU2NworIywgZnV6enkKK21zZ2lkICIiCisiVGhlIGZpbGUgc3lzdGVtIGNhbiBvbmx5IGJlIHJlc2l6ZWQgdG8gdGhpcyBzaXplIGJ5IGNvbnZlcnRpbmcgdG8gRkFUMzIuIgorbXNnc3RyICJJRE9TSVlFIFNpc2l0ZW11IEt1cmkgaXlpIEluZ2FubyBrdSBHdWhpbmR1cmEuLi4uIEt1cmkiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTgwCisjLCBmdXp6eQorbXNnaWQgIiIKKyJHTlUgUGFydGVkIGNhbm5vdCByZXNpemUgdGhpcyBwYXJ0aXRpb24gdG8gdGhpcyBzaXplLiAgV2UncmUgd29ya2luZyBvbiBpdCEiCittc2dzdHIgIk9ZQSBJaGluZHVyYW5nZXJvIGl5aSBLdXJpIGl5aSBJbmdhbm8ga3UiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjQ5IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjU2CisjLCBmdXp6eQorbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyBhbiBpbnZhbGlkIHNpZ25hdHVyZSBmb3IgYSBGQVQgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICJJZG9zaXllIFNpc2l0ZW11IFNpYnlvIElzaW55YSBrdWdpcmFuZ28gYSBJRE9TSVlFIFNpc2l0ZW11IgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo2NAorIywgZnV6enkKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgYW4gaW52YWxpZCBzZWN0b3Igc2l6ZSBmb3IgYSBGQVQgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICJJZG9zaXllIFNpc2l0ZW11IFNpYnlvIEluZ2FubyBrdWdpcmFuZ28gYSBJRE9TSVlFIFNpc2l0ZW11IgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo3MQorIywgZnV6enkKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgYW4gaW52YWxpZCBjbHVzdGVyIHNpemUgZm9yIGEgRkFUIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiSWRvc2l5ZSBTaXNpdGVtdSBTaWJ5byBJbmdhbm8ga3VnaXJhbmdvIGEgSURPU0lZRSBTaXNpdGVtdSIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6NzgKKyMsIGZ1enp5Cittc2dpZCAiIgorIkZpbGUgc3lzdGVtIGhhcyBhbiBpbnZhbGlkIG51bWJlciBvZiByZXNlcnZlZCBzZWN0b3JzIGZvciBhIEZBVCBmaWxlIHN5c3RlbS4iCittc2dzdHIgIklkb3NpeWUgU2lzaXRlbXUgU2lieW8gVW11YmFyZSBCeWEga3VnaXJhbmdvIGEiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjg1CisjLCBmdXp6eQorbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyBhbiBpbnZhbGlkIG51bWJlciBvZiBGQVRzLiIKK21zZ3N0ciAiSWRvc2l5ZSBTaXNpdGVtdSBTaWJ5byBVbXViYXJlIEJ5YSIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6MTM5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhpcyBmaWxlIHN5c3RlbSBoYXMgYSBsb2dpY2FsIHNlY3RvciBzaXplIG9mICVkLiAgR05VIFBhcnRlZCBpcyBrbm93biBub3QgIgorInRvIHdvcmsgcHJvcGVybHkgd2l0aCBzZWN0b3Igc2l6ZXMgb3RoZXIgdGhhbiA1MTIgYnl0ZXMuIgorbXNnc3RyICIiCisiSURPU0lZRSBTaXNpdGVtdSBhIEJpanlhbnllIG4naW55dXJhYndlbmdlIEluZ2FubyBCeWEgbmkgT1lBIEt1cmkgQWthemkgTmE6ICIKKyJJa2luZGkgQmF5aXRlIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzoxNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmaWxlIHN5c3RlbSdzIENIUyBnZW9tZXRyeSBpcyAoJWQsICVkLCAlZCksIHdoaWNoIGlzIGludmFsaWQuICBUaGUgIgorInBhcnRpdGlvbiB0YWJsZSdzIENIUyBnZW9tZXRyeSBpcyAoJWQsICVkLCAlZCkuICBJZiB5b3Ugc2VsZWN0IElnbm9yZSwgdGhlICIKKyJmaWxlIHN5c3RlbSdzIENIUyBnZW9tZXRyeSB3aWxsIGJlIGxlZnQgdW5jaGFuZ2VkLiAgSWYgeW91IHNlbGVjdCBGaXgsIHRoZSAiCisiZmlsZSBzeXN0ZW0ncyBDSFMgZ2VvbWV0cnkgd2lsbCBiZSBzZXQgdG8gbWF0Y2ggdGhlIHBhcnRpdGlvbiB0YWJsZSdzIENIUyAiCisiZ2VvbWV0cnkuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjIxMworIywgZnV6enkKK21zZ2lkICJGQVQgYm9vdCBzZWN0b3Igc2F5cyBsb2dpY2FsIHNlY3RvciBzaXplIGlzIDAuICBUaGlzIGlzIHdlaXJkLiAiCittc2dzdHIgIkJpanlhbnllIG4naW55dXJhYndlbmdlIEluZ2FubyBuaSAwIG5pIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzoyMTkKKyMsIGZ1enp5Cittc2dpZCAiRkFUIGJvb3Qgc2VjdG9yIHNheXMgdGhlcmUgYXJlIG5vIEZBVCB0YWJsZXMuICBUaGlzIGlzIHdlaXJkLiAiCittc2dzdHIgIk95YSBJbWJvbmVyYWhhbXdlIG5pIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzoyMjUKKyMsIGZ1enp5Cittc2dpZCAiRkFUIGJvb3Qgc2VjdG9yIHNheXMgY2x1c3RlcnMgYXJlIDAgc2VjdG9ycy4gIFRoaXMgaXMgd2VpcmQuICIKK21zZ3N0ciAiMCBuaSIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6MjM1CisjLCBmdXp6eQorbXNnaWQgIkZpbGUgc3lzdGVtIGlzIEZBVDEyLCB3aGljaCBpcyB1bnN1cHBvcnRlZC4iCittc2dzdHIgIm5pIG5pIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo0MTEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgaW5mb3JtYXRpb24gc2VjdG9yIGhhcyB0aGUgd3Jvbmcgc2lnbmF0dXJlICgleCkuICBTZWxlY3QgY2FuY2VsIGZvciBub3csICIKKyJhbmQgc2VuZCBpbiBhIGJ1ZyByZXBvcnQuICBJZiB5b3UncmUgZGVzcGVyYXRlLCBpdCdzIHByb2JhYmx5IHNhZmUgdG8gaWdub3JlLiIKK21zZ3N0ciAiIgorIkliaXNvYmFudXJvIGkgSXNpbnlhIEt1cmVrYSBrdWdpcmFuZ28gTk9ORUFIQSBOYSBLb2hlcmV6YSBpbiBhIEljeWVnZXJhbnlvICIKKyJLdXJpIEt3aXJlbmdhZ2l6YSIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb3VudC5jOjE1MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQmFkIGRpcmVjdG9yeSBlbnRyeSBmb3IgJXM6IGZpcnN0IGNsdXN0ZXIgaXMgdGhlIGVuZCBvZiBmaWxlIG1hcmtlci4iCittc2dzdHIgImJ1c2h5aW5ndXJvIEljeWluamlqd2Uga3VnaXJhbmdvIEl0YW5naXJhIG5pIGkgSW1wZXJhIEJ5YSBJRE9TSVlFIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvdW50LmM6MTY1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiQmFkIEZBVDogdW50ZXJtaW5hdGVkIGNoYWluIGZvciAlcy4gIFlvdSBzaG91bGQgcnVuIGRvc2ZzY2sgb3Igc2NhbmRpc2suIgorbXNnc3RyICJrdWdpcmFuZ28gR3Vrb3Jlc2hhIEN5YW5nd2EiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY291bnQuYzoxNzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJCYWQgRkFUOiBjbHVzdGVyICVkIG91dHNpZGUgZmlsZSBzeXN0ZW0gaW4gY2hhaW4gZm9yICVzLiAgWW91IHNob3VsZCBydW4gIgorImRvc2ZzY2sgb3Igc2NhbmRpc2suIgorbXNnc3RyICJIYW56ZSBpbiBrdWdpcmFuZ28gR3Vrb3Jlc2hhIEN5YW5nd2EiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY291bnQuYzoxODQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJCYWQgRkFUOiBjbHVzdGVyICVkIGlzIGNyb3NzLWxpbmtlZCBmb3IgJXMuICBZb3Ugc2hvdWxkIHJ1biBkb3Nmc2NrIG9yICIKKyJzY2FuZGlzay4iCittc2dzdHIgIm5pIEt3YW1idWtpcmFueWEga3VnaXJhbmdvIEd1a29yZXNoYSBDeWFuZ3dhIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvdW50LmM6MjAzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyAlZGssIGJ1dCBpdCBoYXMgJWQgY2x1c3RlcnMgKCVkaykuIgorbXNnc3RyICIlc25pIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvdW50LmM6MjY2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGUgJXMgaXMgbWFya2VkIGFzIGEgc3lzdGVtIGZpbGUuICBUaGlzIG1lYW5zIG1vdmluZyBpdCBjb3VsZCBjYXVzZSAiCisic29tZSBwcm9ncmFtcyB0byBzdG9wIHdvcmtpbmcuIgorbXNnc3RyICIiCisiSURPU0lZRSBuaSBjeS8gYnlhZ2FyYWp3ZSBOa2EgYSBTaXNpdGVtdSBJRE9TSVlFIFBvcm9nYXJhbXUgS3VyaSBHdWhhZ2FyYXJhIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3RhYmxlLmM6MTM3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiRkFUICVkIG1lZGlhICV4IGRvZXNuJ3QgbWF0Y2ggdGhlIGJvb3Qgc2VjdG9yJ3MgbWVkaWEgJXguICBZb3Ugc2hvdWxkICIKKyJwcm9iYWJseSBydW4gc2NhbmRpc2suIgorbXNnc3RyICJJYml0YW5nYXphbWFrdXJ1IEJJSFVZRSBpIEliaXRhbmdhemFtYWt1cnUgR3Vrb3Jlc2hhIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3RhYmxlLmM6MjY5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYXRfdGFibGVfc2V0OiBjbHVzdGVyICVsZCBvdXRzaWRlIGZpbGUgc3lzdGVtIgorbXNnc3RyICJIYW56ZSIKKworIzogbGlicGFydGVkL2ZzL2ZhdC90YWJsZS5jOjMwMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmF0X3RhYmxlX2dldDogY2x1c3RlciAlbGQgb3V0c2lkZSBmaWxlIHN5c3RlbSIKK21zZ3N0ciAiSGFuemUiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvdGFibGUuYzozNDMKKyMsIGZ1enp5Cittc2dpZCAiZmF0X3RhYmxlX2FsbG9jX2NsdXN0ZXI6IG5vIGZyZWUgY2x1c3RlcnMiCittc2dzdHIgIk95YSBLaWdlbmdhIgorCisjOiBsaWJwYXJ0ZWQvZnMvbGludXhfc3dhcC9saW51eF9zd2FwLmM6Mjc1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVbnJlY29nbmlzZWQgb2xkIHN0eWxlIGxpbnV4IHN3YXAgc2lnbmF0dXJlICclMTBzJy4iCittc2dzdHIgIklzaW55YSIKKworIzogbGlicGFydGVkL2ZzL2xpbnV4X3N3YXAvbGludXhfc3dhcC5jOjMxOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVW5yZWNvZ25pc2VkIG5ldyBzdHlsZSBsaW51eCBzd2FwIHNpZ25hdHVyZSAnJTEwcycuIgorbXNnc3RyICJJc2lueWEiCisKKyM6IGxpYnBhcnRlZC9mcy9saW51eF9zd2FwL2xpbnV4X3N3YXAuYzozNTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVucmVjb2duaXNlZCBzd3N1c3AgbGludXggc3dhcCBzaWduYXR1cmUgJyU5cycuIgorbXNnc3RyICJJc2lueWEiCisKKyM6IGxpYnBhcnRlZC9mcy9saW51eF9zd2FwL2xpbnV4X3N3YXAuYzo0MzQKKyMsIGZ1enp5Cittc2dpZCAiVG9vIG1hbnkgYmFkIHBhZ2VzLiIKK21zZ3N0ciAiQW1hcGFqaSIKKworIzogbGlicGFydGVkL2ZzL2hmcy9hZHZmcy5jOjEyMSBsaWJwYXJ0ZWQvZnMvaGZzL2FkdmZzX3BsdXMuYzoxMjIKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzo0MTQgbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjUwOAorIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NTM5IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjY1OAorIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NzcyCittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIGNvbnRhaW5zIGVycm9ycy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9hZHZmc19wbHVzLmM6Mjg3Cittc2dpZCAiQmFkIGJsb2NrcyBjb3VsZCBub3QgYmUgcmVhZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9jYWNoZS5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVHJ5aW5nIHRvIHJlZ2lzdGVyIGFuIGV4dGVudCBzdGFydGluZyBhdCBibG9jayAweCVYLCBidXQgYW5vdGhlciBvbmUgYWxyZWFkeSAiCisiZXhpc3RzIGF0IHRoaXMgcG9zaXRpb24uICBZb3Ugc2hvdWxkIGNoZWNrIHRoZSBmaWxlIHN5c3RlbSEiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9jYWNoZS5jOjIxNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVHJ5aW5nIHRvIG1vdmUgYW4gZXh0ZW50IGZyb20gYmxvY2sgT3glWCB0byBibG9jayBPeCVYLCBidXQgYW5vdGhlciBvbmUgIgorImFscmVhZHkgZXhpc3RzIGF0IHRoaXMgcG9zaXRpb24uICBUaGlzIHNob3VsZCBub3QgaGFwcGVuISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGUuYzoxNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHVwZGF0ZSB0aGUgZXh0ZW50IGNhY2hlIGZvciBIRlMgZmlsZSB3aXRoIENOSUQgJVguIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZS5jOjE4MAorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgdG8gcmVhZCBIRlMgZmlsZSB3aXRoIENOSUQgJVggYmVoaW5kIEVPRi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlLmM6MTkwIGxpYnBhcnRlZC9mcy9oZnMvZmlsZS5jOjIyMAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCBzZWN0b3IgJWxsaSBvZiBIRlMgZmlsZSB3aXRoIENOSUQgJVguIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZS5jOjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgdG8gd3JpdGUgSEZTIGZpbGUgd2l0aCBDTklEICVYIGJlaGluZCBFT0YuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZV9wbHVzLmM6MTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB1cGRhdGUgdGhlIGV4dGVudCBjYWNoZSBmb3IgSEZTKyBmaWxlIHdpdGggQ05JRCAlWC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlX3BsdXMuYzoyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIHRvIHJlYWQgSEZTKyBmaWxlIHdpdGggQ05JRCAlWCBiZWhpbmQgRU9GLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGVfcGx1cy5jOjIxMyBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGVfcGx1cy5jOjI1NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCBzZWN0b3IgJWxsaSBvZiBIRlMrIGZpbGUgd2l0aCBDTklEICVYLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGVfcGx1cy5jOjI0NQorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgdG8gd3JpdGUgSEZTKyBmaWxlIHdpdGggQ05JRCAlWCBiZWhpbmQgRU9GLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjIzMgorbXNnaWQgIlNvcnJ5LCBIRlMgY2Fubm90IGJlIHJlc2l6ZWQgdGhhdCB3YXkgeWV0LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjI2MiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjY0MQorbXNnaWQgIkRhdGEgcmVsb2NhdGlvbiBoYXMgZmFpbGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjI4MQorbXNnaWQgIkRhdGEgcmVsb2NhdGlvbiBsZWZ0IHNvbWUgZGF0YSBpbiB0aGUgZW5kIG9mIHRoZSB2b2x1bWUuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MzIwCisjLCBmdXp6eQorbXNnaWQgIndyaXRpbmcgSEZTIE1hc3RlciBEaXJlY3RvcnkgQmxvY2siCittc2dzdHIgIkt1cmkgaSBJbWl6aSBidXNoeWluZ3VybyIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo0NjgKK21zZ2lkICJObyB2YWxpZCBIRlNbK1hdIHNpZ25hdHVyZSBoYXMgYmVlbiBmb3VuZCB3aGlsZSBvcGVuaW5nLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjQ3OAorIywgYy1mb3JtYXQKK21zZ2lkICJWZXJzaW9uICVkIG9mIEhGUysgaXNuJ3Qgc3VwcG9ydGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICJWZXJzaW9uICVkIG9mIEhGU1ggaXNuJ3Qgc3VwcG9ydGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjY3MgorbXNnaWQgIkRhdGEgcmVsb2NhdGlvbiBsZWZ0IHNvbWUgZGF0YSBhdCB0aGUgZW5kIG9mIHRoZSB2b2x1bWUuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NzIwCisjLCBmdXp6eQorbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdGhlIGFsbG9jYXRpb24gZmlsZS4iCittc2dzdHIgIkt1cmkgaSBJbWl6aSBidXNoeWluZ3VybyIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo3MzUKK21zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRoZSBjb21wYXRpYmlsaXR5IHBhcnQgb2YgdGhlIGFsbG9jYXRpb24gZmlsZS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo3NTAKK21zZ2lkICJ3cml0aW5nIEhGUysgVm9sdW1lIEhlYWRlciIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjg1MAorbXNnaWQgIkFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGxvb2tpbmcgZm9yIHRoZSBtYW5kYXRvcnkgYmFkIGJsb2NrcyBmaWxlLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjkwNAorbXNnaWQgIiIKKyJJdCBzZWVtcyB0aGVyZSBpcyBhbiBlcnJvciBpbiB0aGUgSEZTIHdyYXBwZXI6IHRoZSBiYWQgYmxvY2tzIGZpbGUgZG9lc24ndCAiCisiY29udGFpbiB0aGUgZW1iZWRkZWQgSEZTKyB2b2x1bWUuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6OTQwCittc2dpZCAiU29ycnksIEhGUysgY2Fubm90IGJlIHJlc2l6ZWQgdGhhdCB3YXkgeWV0LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjk3NQorbXNnaWQgInNocmlua2luZyBlbWJlZGRlZCBIRlMrIHZvbHVtZSIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjk5MQorbXNnaWQgIlJlc2l6aW5nIHRoZSBIRlMrIHZvbHVtZSBoYXMgZmFpbGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjk5OAorbXNnaWQgInNocmlua2luZyBIRlMgd3JhcHBlciIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjEwMDcKK21zZ2lkICJVcGRhdGluZyB0aGUgSEZTIHdyYXBwZXIgaGFzIGZhaWxlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzoxMTA5IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MTE5NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhpcyBpcyBub3QgYSByZWFsICVzIGNoZWNrLiAgVGhpcyBpcyBnb2luZyB0byBleHRyYWN0IHNwZWNpYWwgbG93IGxldmVsICIKKyJmaWxlcyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzoxNTUKK21zZ2lkICJCYWQgYmxvY2sgbGlzdCBoZWFkZXIgY2hlY2tzdW0uIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjE2OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSW52YWxpZCBzaXplIG9mIGEgdHJhbnNhY3Rpb24gYmxvY2sgd2hpbGUgcmVwbGF5aW5nIHRoZSBqb3VybmFsICglaSBieXRlcykuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjI2MAorbXNnaWQgIiIKKyJKb3VybmFsIHN0b3JlZCBvdXRzaWRlIG9mIHRoZSB2b2x1bWUgYXJlIG5vdCBzdXBwb3J0ZWQuICBUcnkgdG8gZGVzYWN0aXZhdGUgIgorInRoZSBqb3VybmFsIGFuZCBydW4gUGFydGVkIGFnYWluLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzoyNzEKKyMsIGZ1enp5Cittc2dpZCAiSm91cm5hbCBvZmZzZXQgb3Igc2l6ZSBpcyBub3QgbXVsdGlwbGUgb2YgdGhlIHNlY3RvciBzaXplLiIKK21zZ3N0ciAiR3V0YW5naXJhIERFTFRBIG5pIE9ZQSBhIElnaWt1Ym8gQnlhIGkgSW5nYW5vIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzoyOTIKK21zZ2lkICJJbmNvcnJlY3QgbWFnaWMgdmFsdWVzIGluIHRoZSBqb3VybmFsIGhlYWRlci4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MzAyCittc2dpZCAiSm91cm5hbCBzaXplIG1pc21hdGNoIGJldHdlZW4gam91cm5hbCBpbmZvIGJsb2NrIGFuZCBqb3VybmFsIGhlYWRlci4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MzE0CisjLCBmdXp6eQorbXNnaWQgIlNvbWUgaGVhZGVyIGZpZWxkcyBhcmUgbm90IG11bHRpcGxlIG9mIHRoZSBzZWN0b3Igc2l6ZS4iCittc2dzdHIgIkd1dGFuZ2lyYSBERUxUQSBuaSBPWUEgYSBJZ2lrdWJvIEJ5YSBpIEluZ2FubyIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MzIzCittc2dpZCAiIgorIlRoZSBzZWN0b3Igc2l6ZSBzdG9yZWQgaW4gdGhlIGpvdXJuYWwgaXMgbm90IDUxMiBieXRlcy4gIFBhcnRlZCBvbmx5ICIKKyJzdXBwb3J0cyA1MTIgYnl0ZXMgbGVuZ3RoIHNlY3RvcnMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjMzNQorbXNnaWQgIkJhZCBqb3VybmFsIGNoZWNrc3VtLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozNTMKK21zZ2lkICIiCisiVGhlIGpvdXJuYWwgaXMgbm90IGVtcHR5LiAgUGFydGVkIG11c3QgcmVwbGF5IHRoZSB0cmFuc2FjdGlvbnMgYmVmb3JlICIKKyJvcGVuaW5nIHRoZSBmaWxlIHN5c3RlbS4gIFRoaXMgd2lsbCBtb2RpZnkgdGhlIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozODEKK21zZ2lkICIiCisiVGhlIHZvbHVtZSBoZWFkZXIgb3IgdGhlIG1hc3RlciBkaXJlY3RvcnkgYmxvY2sgaGFzIGNoYW5nZWQgd2hpbGUgcmVwbGF5aW5nICIKKyJ0aGUgam91cm5hbC4gIFlvdSBzaG91bGQgcmVzdGFydCBQYXJ0ZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcHJvYmUuYzo1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGFydGVkIGNhbid0IHVzZSBIRlMgZmlsZSBzeXN0ZW1zIG9uIGRpc2tzIHdpdGggYSBzZWN0b3Igc2l6ZSBub3QgZXF1YWwgdG8gJSIKKyJkIGJ5dGVzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6MTUxIGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjE1NQorbXNnaWQgIkFuIGV4dGVudCBoYXMgbm90IGJlZW4gcmVsb2NhdGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6MjUxIGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjMwNworbXNnaWQgIiIKKyJBIHJlZmVyZW5jZSB0byBhbiBleHRlbnQgY29tZXMgZnJvbSBhIHBsYWNlIGl0IHNob3VsZCBub3QuICBZb3Ugc2hvdWxkIGNoZWNrICIKKyJ0aGUgZmlsZSBzeXN0ZW0hIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzozODEKK21zZ2lkICJUaGlzIEhGUyB2b2x1bWUgaGFzIG5vIGNhdGFsb2cgZmlsZS4gIFRoaXMgaXMgdmVyeSB1bnVzdWFsISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NDc1Cittc2dpZCAiVGhpcyBIRlMgdm9sdW1lIGhhcyBubyBleHRlbnRzIG92ZXJmbG93IGZpbGUuICBUaGlzIGlzIHF1aXRlIHVudXN1YWwhIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzo1MTcgbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NjY4Cittc2dpZCAiIgorIlRoZSBleHRlbnRzIG92ZXJmbG93IGZpbGUgc2hvdWxkIG5vdCBjb250YWluIGl0cyBvd24gZXh0ZW50cyEgIFlvdSBzaG91bGQgIgorImNoZWNrIHRoZSBmaWxlIHN5c3RlbS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjU3NCBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo4NDcKKyMsIGZ1enp5Cittc2dpZCAiQ291bGQgbm90IGNhY2hlIHRoZSBmaWxlIHN5c3RlbSBpbiBtZW1vcnkuIgorbXNnc3RyICJPWUEgSURPU0lZRSBTaXNpdGVtdSIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjYzNSBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo5MDgKK21zZ2lkICJCYWQgYmxvY2tzIGxpc3QgY291bGQgbm90IGJlIGxvYWRlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjY0OSBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo5MjQKK21zZ2lkICJBbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgZXh0ZW50IHJlbG9jYXRpb24uIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjQ5NQorbXNnaWQgIlRoaXMgSEZTKyB2b2x1bWUgaGFzIG5vIGNhdGFsb2cgZmlsZS4gIFRoaXMgaXMgdmVyeSB1bnVzdWFsISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo2MTkKK21zZ2lkICJUaGlzIEhGUysgdm9sdW1lIGhhcyBubyBleHRlbnRzIG92ZXJmbG93IGZpbGUuICBUaGlzIGlzIHF1aXRlIHVudXN1YWwhIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo5NAorIywgZnV6enkKK21zZ2lkICJkaXNwbGF5cyB0aGlzIGhlbHAgbWVzc2FnZSIKK21zZ3N0ciAiaXlpIElmYXNoYXlvYm9yYSBVYnV0dW13YSIKKworIzogcGFydGVkL3BhcnRlZC5jOjk1Cittc2dpZCAibGlzdHMgcGFydGl0aW9uIGxheW91dCBvbiBhbGwgYmxvY2sgZGV2aWNlcyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6OTYKK21zZ2lkICJkaXNwbGF5cyBtYWNoaW5lIHBhcnNlYWJsZSBvdXRwdXQiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjk3CisjLCBmdXp6eQorbXNnaWQgIm5ldmVyIHByb21wdHMgZm9yIHVzZXIgaW50ZXJ2ZW50aW9uIgorbXNnc3RyICJOdGEgbmFyaW13ZSBrdWdpcmFuZ28gVWtvcmVzaGE6IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6OTgKKyMsIGZ1enp5Cittc2dpZCAiZGlzcGxheXMgdGhlIHZlcnNpb24iCittc2dzdHIgImkgVmVyaXNpeW8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMTEKKyMsIGZ1enp5Cittc2dpZCAiIgorIk5VTUJFUiBpcyB0aGUgcGFydGl0aW9uIG51bWJlciB1c2VkIGJ5IExpbnV4LiAgT24gTVMtRE9TIGRpc2sgbGFiZWxzLCB0aGUgIgorInByaW1hcnkgcGFydGl0aW9ucyBudW1iZXIgZnJvbSAxIHRvIDQsIGxvZ2ljYWwgcGFydGl0aW9ucyBmcm9tIDUgb253YXJkcy5cbiIKK21zZ3N0ciAiIgorIm5pIGkgVW11YmFyZSBrdSBVdHVyYW5nby4uLiBpIFVtdWJhcmUgQml2dXllIDEuIDQuIE5hIEJpanlhbnllICIKKyJuJ2lueXVyYWJ3ZW5nZSA1IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTE0CisjLCBmdXp6eQorbXNnaWQgIkxBQkVMLVRZUEUgaXMgb25lIG9mOiAiCittc2dzdHIgIm5pIEJ5YSIKKworIzogcGFydGVkL3BhcnRlZC5jOjExNQorIywgZnV6enkKK21zZ2lkICJGTEFHIGlzIG9uZSBvZjogIgorbXNnc3RyICJuaSBCeWEiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMTYKKyMsIGZ1enp5Cittc2dpZCAiVU5JVCBpcyBvbmUgb2Y6ICIKK21zZ3N0ciAibmkgQnlhIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTE3CisjLCBmdXp6eQorbXNnaWQgIlBBUlQtVFlQRSBpcyBvbmUgb2Y6IHByaW1hcnksIGxvZ2ljYWwsIGV4dGVuZGVkXG4iCittc2dzdHIgIm5pIEJ5YSBCaWp5YW55ZSBuJ2lueXVyYWJ3ZW5nZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjExOQorIywgZnV6enkKK21zZ2lkICJGUy1UWVBFIGlzIG9uZSBvZjogIgorbXNnc3RyICJuaSBCeWEiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjAKKyMsIGZ1enp5Cittc2dpZCAiIgorIlNUQVJUIGFuZCBFTkQgYXJlIGRpc2sgbG9jYXRpb25zLCBzdWNoIGFzIDRHQiBvciAxMCUuICBOZWdhdGl2ZSB2YWx1ZXMgY291bnQgIgorImZyb20gdGhlIGVuZCBvZiB0aGUgZGlzay4gIEZvciBleGFtcGxlLCAtMXMgc3BlY2lmaWVzIGV4YWN0bHkgdGhlIGxhc3QgIgorInNlY3Rvci5cbiIKK21zZ3N0ciAiTmEgaW4gVWR1Y2lybyBJQkFSQSBCaXZ1eWUgaSBJbXBlcmEgQnlhIGkiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjMKKyMsIGZ1enp5Cittc2dpZCAiU1RBVEUgaXMgb25lIG9mOiBvbiwgb2ZmXG4iCittc2dzdHIgIm5pIEJ5YSBrdSIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyNAorIywgZnV6enkKK21zZ2lkICJERVZJQ0UgaXMgdXN1YWxseSAvZGV2L2hkYSBvciAvZGV2L3NkYVxuIgorbXNnc3RyICJuaSBDeWFuZ3dhIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTI1CisjLCBmdXp6eQorbXNnaWQgIk5BTUUgaXMgYW55IHdvcmQgeW91IHdhbnRcbiIKK21zZ3N0ciAibmkgaWphbWJvIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTI2Cittc2dpZCAiVGhlIHBhcnRpdGlvbiBtdXN0IGhhdmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgRlMtVFlQRXM6ICIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTMwCisjLCBmdXp6eQorbXNnaWQgIiIKKyJDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLlxuIgorIlRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlLCBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS5cbiIKKyJcbiIKKyJUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiIKKyJidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuIgorIk1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbiIKKyJHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuIgorIlxuIgorbXNnc3RyICIiCisiQyBQb3JvZ2FyYW11IG5pIEtpZ2VuZ2Ega3UgaSBQb3JvZ2FyYW11IG5pIGluIGkgQVRBUklJR0lIQVJXRSBpIEJ5YSBDeWFuZ3dhICIKKyJBIGkga3VnaXJhbmdvIEJpcmVuemVobyBCaXJhbWJ1eWUiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNzYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiUwLmYlJVx0KHRpbWUgbGVmdCAlLjJkOiUuMmQpIgorbXNnc3RyICIiCisiJTAuUHJvamVjdC0gSWQtIFZlcnNpb246IGJhc2N0bFxuIgorIlBPVC0gQ3JlYXRpb24tIERhdGU6IDIwMDMtIDEyLSAwNyAxNzogMTMrIDAyXG4iCisiUE8tIFJldmlzaW9uLSBEYXRlOiAyMDA0LSAxMS0gMDQgMTA6IDEzLSAwNzAwXG4iCisiTGFzdC0gVHJhbnNsYXRvcjogTGFuZ3VhZ2UtIFRlYW06PCBlbkAgbGkuIG9yZz4gTUlNRS0gVmVyc2lvbjogMS4gMFxuIgorIkNvbnRlbnQtIFR5cGU6IHRleHQvIHBsYWluOyBjaGFyc2V0PSBVVEYtIDhcbiIKKyJDb250ZW50LSBUcmFuc2Zlci0gRW5jb2Rpbmc6IDhiaXRcbiIKKyJYLSBHZW5lcmF0b3I6IEtCYWJlbCAxLiAwXG4iCisiLiAyRC4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBhcnRpdGlvbiAlcyBpcyBiZWluZyB1c2VkLiBZb3UgbXVzdCB1bm1vdW50IGl0IGJlZm9yZSB5b3UgbW9kaWZ5IGl0IHdpdGggIgorIlBhcnRlZC4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiUGFydGl0aW9uKHMpIG9uICVzIGFyZSBiZWluZyB1c2VkLiIKK21zZ3N0ciAiUyBrdSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMworbXNnaWQgIiIKKyJUaGUgZXhpc3RpbmcgZmlsZSBzeXN0ZW0gd2lsbCBiZSBkZXN0cm95ZWQgYW5kIGFsbCBkYXRhIG9uIHRoZSBwYXJ0aXRpb24gIgorIndpbGwgYmUgbG9zdC4gRG8geW91IHdhbnQgdG8gY29udGludWU/IgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBleGlzdGluZyBkaXNrIGxhYmVsIG9uICVzIHdpbGwgYmUgZGVzdHJveWVkIGFuZCBhbGwgZGF0YSBvbiB0aGlzIGRpc2sgIgorIndpbGwgYmUgbG9zdC4gRG8geW91IHdhbnQgdG8gY29udGludWU/IgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo0NTggcGFydGVkL3BhcnRlZC5jOjY1MiBwYXJ0ZWQvcGFydGVkLmM6MTA0NAorIzogcGFydGVkL3BhcnRlZC5jOjExMjggcGFydGVkL3BhcnRlZC5jOjE3NzEgcGFydGVkL3BhcnRlZC5jOjE4NTIKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxOTAwCisjLCBmdXp6eQorbXNnaWQgIlBhcnRpdGlvbiBudW1iZXI/IgorbXNnc3RyICJVbXViYXJlIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NTAwCisjLCBmdXp6eQorbXNnaWQgIlNvdXJjZSBkZXZpY2U/IgorbXNnc3RyICJBUEFSRVlFIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NTA0CisjLCBmdXp6eQorbXNnaWQgIlNvdXJjZSBwYXJ0aXRpb24gbnVtYmVyPyIKK21zZ3N0ciAiVW11YmFyZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjUwOQorIywgZnV6enkKK21zZ2lkICJDYW4ndCBjb3B5IGFuIGV4dGVuZGVkIHBhcnRpdGlvbi4iCittc2dzdHIgIkd1a29wb3JvcmEgQnlvbmdlcmV3ZS4uLiIKKworIzogcGFydGVkL3BhcnRlZC5jOjUxNQorIywgZnV6enkKK21zZ2lkICJEZXN0aW5hdGlvbiBwYXJ0aXRpb24gbnVtYmVyPyIKK21zZ3N0ciAiVW11YmFyZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjYxNQorIywgZnV6enkKK21zZ2lkICJOZXcgZGlzayBsYWJlbCB0eXBlPyIKK21zZ3N0ciAiQWthcmFuZ28gVWJ3b2tvIgorCisjIG9mZmljZWNmZy9yZWdpc3RyeVxzY2hlbWFcb3JnXG9wZW5vZmZpY2VcT2ZmaWNlXENvbW1vbi54Y3M6Li4uLlNhdmUuVVJMLkZpbGVTeXN0ZW0udGV4dAorIzogcGFydGVkL3BhcnRlZC5jOjY1NgorIywgZnV6enkKK21zZ2lkICJGaWxlIHN5c3RlbT8iCittc2dzdHIgIklkb3NpeWUgeWEgc2lzaXRlbXUiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo3MDcgcGFydGVkL3BhcnRlZC5jOjg3OAorIywgZnV6enkKK21zZ2lkICJQYXJ0aXRpb24gdHlwZT8iCittc2dzdHIgIlVid29rbyIKKworIzogcGFydGVkL3BhcnRlZC5jOjcxNCBwYXJ0ZWQvcGFydGVkLmM6ODg1IHBhcnRlZC9wYXJ0ZWQuYzoxMTMxCisjLCBmdXp6eQorbXNnaWQgIlBhcnRpdGlvbiBuYW1lPyIKK21zZ3N0ciAiSXppbmE6IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NzIyIHBhcnRlZC9wYXJ0ZWQuYzo4OTUKKyMsIGZ1enp5Cittc2dpZCAiRmlsZSBzeXN0ZW0gdHlwZT8iCittc2dzdHIgIklkb3NpeWUgU2lzaXRlbXUgVWJ3b2tvIgorCisjICMtIy0jLSMtIyAgc2MucG90IChQQUNLQUdFIFZFUlNJT04pICAjLSMtIy0jLSMKKyMgc2Mvc291cmNlXHVpXG5hdmlwaVxuYXZpcGkuc3JjOlJJRF9TQ0RMR19OQVZJR0FUT1IuVEJYX0NNRC5JSURfVVAudGV4dAorIyAjLSMtIy0jLSMgIHNjLnBvdCAoUEFDS0FHRSBWRVJTSU9OKSAgIy0jLSMtIy0jCisjIHNjL3NvdXJjZVx1aVxzcmNcc2NmdW5jcy5zcmM6UklEX1NDX0ZVTkNUSU9OX0RFU0NSSVBUSU9OUzIuU0NfT1BDT0RFX1BST0IuNi50ZXh0CisjICMtIy0jLSMtIyAgc2MucG90IChQQUNLQUdFIFZFUlNJT04pICAjLSMtIy0jLSMKKyMgc2Mvc291cmNlXHVpXHNyY1xzY2Z1bmNzLnNyYzpSSURfU0NfRlVOQ1RJT05fREVTQ1JJUFRJT05TMi5TQ19PUENPREVfQkVUQV9ESVNULjgudGV4dAorIyAjLSMtIy0jLSMgIHNjLnBvdCAoUEFDS0FHRSBWRVJTSU9OKSAgIy0jLSMtIy0jCisjIHNjL3NvdXJjZVx1aVxzcmNcc2NmdW5jcy5zcmM6UklEX1NDX0ZVTkNUSU9OX0RFU0NSSVBUSU9OUzIuU0NfT1BDT0RFX0JFVEFfSU5WLjgudGV4dAorIzogcGFydGVkL3BhcnRlZC5jOjcyOSBwYXJ0ZWQvcGFydGVkLmM6ODk3IHBhcnRlZC9wYXJ0ZWQuYzoxMDU5CisjOiBwYXJ0ZWQvcGFydGVkLmM6MTcyNSBwYXJ0ZWQvcGFydGVkLmM6MTc4MAorIywgZnV6enkKK21zZ2lkICJTdGFydD8iCittc2dzdHIgIkd1dGFuZ2lyYSIKKworIyBvZmZpY2VjZmcvcmVnaXN0cnlcc2NoZW1hXG9yZ1xvcGVub2ZmaWNlXE9mZmljZVxEYXRhQWNjZXNzLnhjczouLi4uRm9ybVNlYXJjaE9wdGlvbnMuU2VhcmNoUG9zaXRpb24uLmVuZC1vZi1maWVsZC50ZXh0CisjOiBwYXJ0ZWQvcGFydGVkLmM6NzMxIHBhcnRlZC9wYXJ0ZWQuYzo5MDAgcGFydGVkL3BhcnRlZC5jOjEwNjIKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNzI3IHBhcnRlZC9wYXJ0ZWQuYzoxNzgyCisjLCBmdXp6eQorbXNnaWQgIkVuZD8iCittc2dzdHIgIkltcGVyYSIKKworIzogcGFydGVkL3BhcnRlZC5jOjc2OSBwYXJ0ZWQvcGFydGVkLmM6OTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgcmVxdWVzdGVkIGEgcGFydGl0aW9uIGZyb20gJXMgdG8gJXMuXG4iCisiVGhlIGNsb3Nlc3QgbG9jYXRpb24gd2UgY2FuIG1hbmFnZSBpcyAlcyB0byAlcy4gIElzIHRoaXMgc3RpbGwgYWNjZXB0YWJsZSB0byAiCisieW91PyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6ODkwCisjLCBmdXp6eQorbXNnaWQgIkFuIGV4dGVuZGVkIHBhcnRpdGlvbiBjYW5ub3QgaG9sZCBhIGZpbGUgc3lzdGVtLiAgRGlkIHlvdSB3YW50IG1rcGFydD8iCittc2dzdHIgIklET1NJWUUiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMDUwCisjLCBmdXp6eQorbXNnaWQgIkNhbid0IG1vdmUgYW4gZXh0ZW5kZWQgcGFydGl0aW9uLiIKK21zZ3N0ciAiS3dpbXVyYSBCeW9uZ2VyZXdlLi4uIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTA3OQorIywgZnV6enkKK21zZ2lkICJDYW4ndCBtb3ZlIGEgcGFydGl0aW9uIG9udG8gaXRzZWxmLiAgVHJ5IHVzaW5nIHJlc2l6ZSwgcGVyaGFwcz8iCittc2dzdHIgIkt3aW11cmEgYSBpa29yZXNoYSBJaGluZHVyYW5nZXJvIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIyNworIywgYy1mb3JtYXQKK21zZ2lkICJNaW5vcjogJWRcbiIKK21zZ3N0ciAiIgorCisjIHN2eC9zb3VyY2VcZ2FsbGVyeTJcZ2FsdGhlbWUuc3JjOlJJRF9HQUxMRVJZU1RSX1RIRU1FX0ZMQUdTLnRleHQKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjI4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJGbGFnczogJXNcbiIKK21zZ3N0ciAiQW1hYmVuZGVyYSIKKworIyBvZmZpY2VjZmcvcmVnaXN0cnlcc2NoZW1hXG9yZ1xvcGVub2ZmaWNlXE9mZmljZVxDb21tb24ueGNzOi4uLi5TYXZlLlVSTC5GaWxlU3lzdGVtLnRleHQKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjI5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJGaWxlIFN5c3RlbTogJXNcbiIKK21zZ3N0ciAiSWRvc2l5ZSB5YSBzaXNpdGVtdSIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMzAKK21zZ2lkICJTaXplOiAgICAgICAgICIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIzNQorIywgZnV6enkKK21zZ2lkICJNaW5pbXVtIHNpemU6ICIKK21zZ3N0ciAiSW5nYW5vIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIzOAorIywgZnV6enkKK21zZ2lkICJNYXhpbXVtIHNpemU6ICIKK21zZ3N0ciAiSW5nYW5vIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJNb2RlbDogJXMgKCVzKVxuIgorbXNnc3RyICIiCisKKyMgZGVza3RvcC9zb3VyY2VcYXBwXHNzb2RsZy5zcmM6RExHX1NTT0xPR0lOLnRleHQKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMzY0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJEaXNrICVzOiAlc1xuIgorbXNnc3RyICIlcyVzJXMiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlY3RvciBzaXplIChsb2dpY2FsL3BoeXNpY2FsKTogJWxsZEIvJWxsZEJcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTM4MworIywgYy1mb3JtYXQKK21zZ2lkICJCSU9TIGN5bGluZGVyLGhlYWQsc2VjdG9yIGdlb21ldHJ5OiAlZCwlZCwlZC4gIEVhY2ggY3lsaW5kZXIgaXMgJXMuXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEzOTIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlBhcnRpdGlvbiBUYWJsZTogJXNcbiIKK21zZ3N0ciAiSXppbmE6IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQwNiBwYXJ0ZWQvcGFydGVkLmM6MTQwOQorbXNnaWQgIk51bWJlciIKK21zZ3N0ciAiIgorCisjICMtIy0jLSMtIyAgc2MucG90IChQQUNLQUdFIFZFUlNJT04pICAjLSMtIy0jLSMKKyMgc2Mvc291cmNlXHVpXG5hdmlwaVxuYXZpcGkuc3JjOlJJRF9TQ0RMR19OQVZJR0FUT1IuVEJYX0NNRC5JSURfVVAudGV4dAorIyAjLSMtIy0jLSMgIHNjLnBvdCAoUEFDS0FHRSBWRVJTSU9OKSAgIy0jLSMtIy0jCisjIHNjL3NvdXJjZVx1aVxzcmNcc2NmdW5jcy5zcmM6UklEX1NDX0ZVTkNUSU9OX0RFU0NSSVBUSU9OUzIuU0NfT1BDT0RFX1BST0IuNi50ZXh0CisjICMtIy0jLSMtIyAgc2MucG90IChQQUNLQUdFIFZFUlNJT04pICAjLSMtIy0jLSMKKyMgc2Mvc291cmNlXHVpXHNyY1xzY2Z1bmNzLnNyYzpSSURfU0NfRlVOQ1RJT05fREVTQ1JJUFRJT05TMi5TQ19PUENPREVfQkVUQV9ESVNULjgudGV4dAorIyAjLSMtIy0jLSMgIHNjLnBvdCAoUEFDS0FHRSBWRVJTSU9OKSAgIy0jLSMtIy0jCisjIHNjL3NvdXJjZVx1aVxzcmNcc2NmdW5jcy5zcmM6UklEX1NDX0ZVTkNUSU9OX0RFU0NSSVBUSU9OUzIuU0NfT1BDT0RFX0JFVEFfSU5WLjgudGV4dAorIzogcGFydGVkL3BhcnRlZC5jOjE0MDYgcGFydGVkL3BhcnRlZC5jOjE0MDkKKyMsIGZ1enp5Cittc2dpZCAiU3RhcnQiCittc2dzdHIgIkd1dGFuZ2lyYSIKKworIyBvZmZpY2VjZmcvcmVnaXN0cnlcc2NoZW1hXG9yZ1xvcGVub2ZmaWNlXE9mZmljZVxEYXRhQWNjZXNzLnhjczouLi4uRm9ybVNlYXJjaE9wdGlvbnMuU2VhcmNoUG9zaXRpb24uLmVuZC1vZi1maWVsZC50ZXh0CisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQwNyBwYXJ0ZWQvcGFydGVkLmM6MTQxMAorIywgZnV6enkKK21zZ2lkICJFbmQiCittc2dzdHIgIkltcGVyYSIKKworIyBzdGFybWF0aC9zb3VyY2Vcc21yZXMuc3JjOlJJRF9UT09MQk9YV0lORE9XLjYuUklEX1NJWkVYWS50ZXh0CisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQxMAorIywgZnV6enkKK21zZ2lkICJTaXplIgorbXNnc3RyICJLdXJpbmdhbml6YSIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MTQKK21zZ2lkICJUeXBlIgorbXNnc3RyICIiCisKKyMgb2ZmaWNlY2ZnL3JlZ2lzdHJ5XHNjaGVtYVxvcmdcb3Blbm9mZmljZVxPZmZpY2VcQ29tbW9uLnhjczouLi4uU2F2ZS5VUkwuRmlsZVN5c3RlbS50ZXh0CisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQxNgorIywgZnV6enkKK21zZ2lkICJGaWxlIHN5c3RlbSIKK21zZ3N0ciAiSWRvc2l5ZSB5YSBzaXNpdGVtdSIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MTkKKyMsIGZ1enp5Cittc2dpZCAiTmFtZSIKK21zZ3N0ciAiaXppbmEiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDIxCittc2dpZCAiRmxhZ3MiCittc2dzdHIgIkFtYWJlbmRlcmEiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDc3Cittc2dpZCAiRnJlZSBTcGFjZSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTYyNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIkEgJXMgJXMgcGFydGl0aW9uIHdhcyBmb3VuZCBhdCAlcyAtPiAlcy4gIERvIHlvdSB3YW50IHRvIGFkZCBpdCB0byB0aGUgIgorInBhcnRpdGlvbiB0YWJsZT8iCittc2dzdHIgIkEgQnlhYm9uZXRzZSBrdSBLdXJpIEtvbmdlcmFtbyBLdXJpIGkgaW1ib25lcmFoYW13ZSMiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNjYzCisjLCBmdXp6eQorbXNnaWQgInNlYXJjaGluZyBmb3IgZmlsZSBzeXN0ZW1zIgorbXNnc3RyICJJc2hha2lzaGEga3VnaXJhbmdvIElET1NJWUUiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxODc3CisjLCBmdXp6eQorbXNnaWQgIk5ldyBkZXZpY2U/IgorbXNnc3RyICJBUEFSRVlFIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTkwMgorIywgZnV6enkKK21zZ2lkICJGbGFnIHRvIEludmVydD8iCittc2dzdHIgIkt1cmkgR3VoaW5kdXJhPj4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxOTA3CisjLCBmdXp6eQorbXNnaWQgIk5ldyBzdGF0ZT8iCittc2dzdHIgIkxldGEiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxOTQ0Cittc2dpZCAiVW5pdD8iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIwOTMKK21zZ2lkICJjaGVjayIKK21zZ3N0ciAiZ2VuenVyYSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIwOTYKKyMsIGZ1enp5Cittc2dpZCAiIgorImNoZWNrIE5VTUJFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8gYSBzaW1wbGUgY2hlY2sgb24gdGhlIGZpbGUgc3lzdGVtIgorbXNnc3RyICJLdWdlbnp1cmEuLi4gYSBCeW9yb2hlamUgS3VnZW56dXJhLi4uIGt1IGkiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTAyCittc2dpZCAiY3AiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMDUKKyMsIGZ1enp5Cittc2dpZCAiIgorImNwIFtGUk9NLURFVklDRV0gRlJPTS1OVU1CRVIgVE8tTlVNQkVSICAgY29weSBmaWxlIHN5c3RlbSB0byBhbm90aGVyICIKKyJwYXJ0aXRpb24iCittc2dzdHIgIkd1a29wb3JvcmEgS3VyaSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMTEKKyMsIGZ1enp5Cittc2dpZCAiaGVscCIKK21zZ3N0ciAiSWZhc2hheW9ib3JhIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjExNAorIywgZnV6enkKK21zZ2lkICIiCisiaGVscCBbQ09NTUFORF0gICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCBnZW5lcmFsIGhlbHAsIG9yIGhlbHAgb24gIgorIkNPTU1BTkQiCittc2dzdHIgIklmYXNoYXlvYm9yYSBSdXNhbmdlIElmYXNoYXlvYm9yYSBDeWFuZ3dhIElmYXNoYXlvYm9yYSBrdSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMjAKK21zZ2lkICJta2xhYmVsIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTIwCittc2dpZCAibWt0YWJsZSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEyMworIywgZnV6enkKK21zZ2lkICIiCisibWtsYWJlbCxta3RhYmxlIExBQkVMLVRZUEUgICAgICAgICAgICAgICBjcmVhdGUgYSBuZXcgZGlza2xhYmVsIChwYXJ0aXRpb24gIgorInRhYmxlKSIKK21zZ3N0ciAiS3VyZW1hIGEgR2lzaHlhIGltYm9uZXJhaGFtd2UjIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEyOQorbXNnaWQgIm1rZnMiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMzIKKyMsIGZ1enp5Cittc2dpZCAiIgorIm1rZnMgTlVNQkVSIEZTLVRZUEUgICAgICAgICAgICAgICAgICAgICAgbWFrZSBhIEZTLVRZUEUgZmlsZSBzeXN0ZW0gb24gIgorInBhcnRpdGl0b24gTlVNQkVSIgorbXNnc3RyICJVYndva28gYSBrdSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMzgKK21zZ2lkICJta3BhcnQiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNDEKKyMsIGZ1enp5Cittc2dpZCAibWtwYXJ0IFBBUlQtVFlQRSBbRlMtVFlQRV0gU1RBUlQgRU5EICAgICBtYWtlIGEgcGFydGl0aW9uIgorbXNnc3RyICJVYndva28gYSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNDcKKyMsIGZ1enp5Cittc2dpZCAiIgorIidta3BhcnQnIG1ha2VzIGEgcGFydGl0aW9uIHdpdGhvdXQgY3JlYXRpbmcgYSBuZXcgZmlsZSBzeXN0ZW0gb24gdGhlICIKKyJwYXJ0aXRpb24uICBGUy1UWVBFIG1heSBiZSBzcGVjaWZpZWQgdG8gc2V0IGFuIGFwcHJvcHJpYXRlIHBhcnRpdGlvbiBJRC5cbiIKK21zZ3N0ciAiYSBhIEdpc2h5YSBJRE9TSVlFIFNpc2l0ZW11IGt1IGkgR2ljdXJhc2kgS3VyaSBHdXNoeWlyYWhvIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE1MgorbXNnaWQgIm1rcGFydGZzIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTU1CisjLCBmdXp6eQorbXNnaWQgIiIKKyJta3BhcnRmcyBQQVJULVRZUEUgRlMtVFlQRSBTVEFSVCBFTkQgICAgIG1ha2UgYSBwYXJ0aXRpb24gd2l0aCBhIGZpbGUgc3lzdGVtIgorbXNnc3RyICJVYndva28gYSBOYTogYSIKKworIyBzYy9zb3VyY2VcdWlcc3JjXGdsb2JzdHIuc3JjOlJJRF9HTE9CU1RSLlNUUl9VTkRPX01PVkUudGV4dAorIzogcGFydGVkL3BhcnRlZC5jOjIxNjEKKyMsIGZ1enp5Cittc2dpZCAibW92ZSIKK21zZ3N0ciAiS3dpbXVyYSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNjQKKyMsIGZ1enp5Cittc2dpZCAibW92ZSBOVU1CRVIgU1RBUlQgRU5EICAgICAgICAgICAgICAgICAgICBtb3ZlIHBhcnRpdGlvbiBOVU1CRVIiCittc2dzdHIgIkt3aW11cmEgS3dpbXVyYSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNjkKK21zZ2lkICJuYW1lIgorbXNnc3RyICJpemluYSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNzIKKyMsIGZ1enp5Cittc2dpZCAibmFtZSBOVU1CRVIgTkFNRSAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lIHBhcnRpdGlvbiBOVU1CRVIgYXMgTkFNRSIKK21zZ3N0ciAiSXppbmE6IEl6aW5hOiIKKworIyAjLSMtIy0jLSMgIGRiYWNjZXNzLnBvdCAoUEFDS0FHRSBWRVJTSU9OKSAgIy0jLSMtIy0jCisjICMtIy0jLSMtIyAgZGJhY2Nlc3MucG90IChQQUNLQUdFIFZFUlNJT04pICAjLSMtIy0jLSMKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTc3CisjLCBmdXp6eQorbXNnaWQgInByaW50IgorbXNnc3RyICJHdWNhcGEiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTgwCittc2dpZCAiIgorInByaW50IFtkZXZpY2VzfGZyZWV8bGlzdCxhbGx8TlVNQkVSXSAgICAgZGlzcGxheSB0aGUgcGFydGl0aW9uIHRhYmxlLCAiCisiYXZhaWxhYmxlIGRldmljZXMsIGZyZWUgc3BhY2UsIGFsbCBmb3VuZCBwYXJ0aXRpb25zLCBvciBhIHBhcnRpY3VsYXIgIgorInBhcnRpdGlvbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE4NQorbXNnaWQgIiIKKyJXaXRob3V0IGFyZ3VtZW50cywgJ3ByaW50JyBkaXNwbGF5cyB0aGUgZW50aXJlIHBhcnRpdGlvbiB0YWJsZS4gSG93ZXZlciB3aXRoICIKKyJ0aGUgZm9sbG93aW5nIGFyZ3VtZW50cyBpdCBwZXJmb3JtcyB2YXJpb3VzIG90aGVyIGFjdGlvbnMuXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxODcKK21zZ2lkICIgIGRldmljZXMgICA6IGRpc3BsYXkgYWxsIGFjdGl2ZSBibG9jayBkZXZpY2VzXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxODgKK21zZ2lkICIiCisiICBmcmVlICAgICAgOiBkaXNwbGF5IGluZm9ybWF0aW9uIGFib3V0IGZyZWUgdW5wYXJ0aXRpb25lZCBzcGFjZSBvbiB0aGUgIgorImN1cnJlbnQgYmxvY2sgZGV2aWNlXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxOTAKKyMsIGZ1enp5Cittc2dpZCAiIgorIiAgbGlzdCwgYWxsIDogZGlzcGxheSB0aGUgcGFydGl0aW9uIHRhYmxlcyBvZiBhbGwgYWN0aXZlIGJsb2NrIGRldmljZXNcbiIKK21zZ3N0ciAiR3VjYXBhIEt1Z2FyYWdhemEgaSBpbWJvbmVyYWhhbXdlIyBDeWFuZ3dhIGEiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTkxCittc2dpZCAiIgorIiAgTlVNQkVSICAgIDogZGlzcGxheSBtb3JlIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgcGFydGljdWxhciAiCisicGFydGl0aW9uXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxOTYKKyMsIGZ1enp5Cittc2dpZCAicXVpdCIKK21zZ3N0ciAiS3V2YW1vIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE5OQorIywgZnV6enkKK21zZ2lkICJxdWl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQgcHJvZ3JhbSIKK21zZ3N0ciAiS3V2YW1vIEd1c29ob2thIFBvcm9nYXJhbXUiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjA0Cittc2dpZCAicmVzY3VlIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjA3CisjLCBmdXp6eQorbXNnaWQgIiIKKyJyZXNjdWUgU1RBUlQgRU5EICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2N1ZSBhIGxvc3QgcGFydGl0aW9uIG5lYXIgU1RBUlQgIgorImFuZCBFTkQiCittc2dzdHIgImEgTmEiCisKKyMgc3Rhcm1hdGgvc291cmNlXHNtcmVzLnNyYzpSSURfVE9PTEJPWFdJTkRPVy42LlJJRF9TSVpFWFkudGV4dAorIzogcGFydGVkL3BhcnRlZC5jOjIyMTMKKyMsIGZ1enp5Cittc2dpZCAicmVzaXplIgorbXNnc3RyICJLdXJpbmdhbml6YSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMTYKKyMsIGZ1enp5Cittc2dpZCAiIgorInJlc2l6ZSBOVU1CRVIgU1RBUlQgRU5EICAgICAgICAgICAgICAgICAgcmVzaXplIHBhcnRpdGlvbiBOVU1CRVIgYW5kIGl0cyAiCisiZmlsZSBzeXN0ZW0iCittc2dzdHIgImEgTmEiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjI0Cittc2dpZCAicm0iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMjcKKyMsIGZ1enp5Cittc2dpZCAicm0gTlVNQkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcGFydGl0aW9uIE5VTUJFUiIKK21zZ3N0ciAiR3VzaWJhIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIzMgorbXNnaWQgInNlbGVjdCIKK21zZ3N0ciAiZ3VoaXRhbW8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjM1CisjLCBmdXp6eQorbXNnaWQgInNlbGVjdCBERVZJQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvb3NlIHRoZSBkZXZpY2UgdG8gZWRpdCIKK21zZ3N0ciAiR3VoaXRhbW8gR3VoaXRhbW8gaSBBUEFSRVlFIEt1cmkgR3VoaW5kdXJhIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI0MAorIywgZnV6enkKK21zZ2lkICJzZXQiCittc2dzdHIgIkd1c2h5aXJhaG8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjQzCisjLCBmdXp6eQorbXNnaWQgIiIKKyJzZXQgTlVNQkVSIEZMQUcgU1RBVEUgICAgICAgICAgICAgICAgICAgIGNoYW5nZSB0aGUgRkxBRyBvbiBwYXJ0aXRpb24gTlVNQkVSIgorbXNnc3RyICJHdXNoeWlyYWhvIEd1aGluZHVyYT4+IGEgSWJlbmRlcmEga3UiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjQ5Cittc2dpZCAidG9nZ2xlIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjUyCittc2dpZCAiIgorInRvZ2dsZSBbTlVNQkVSIFtGTEFHXV0gICAgICAgICAgICAgICAgICAgdG9nZ2xlIHRoZSBzdGF0ZSBvZiBGTEFHIG9uICIKKyJwYXJ0aXRpb24gTlVNQkVSIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjU4CisjLCBmdXp6eQorbXNnaWQgInVuaXQiCittc2dzdHIgIkt1dmFtbyIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNjEKKyMsIGZ1enp5Cittc2dpZCAidW5pdCBVTklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgdGhlIGRlZmF1bHQgdW5pdCB0byBVTklUIgorbXNnc3RyICJLdXZhbW8gR3Vzb2hva2EgUG9yb2dhcmFtdSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNjYKK21zZ2lkICJ2ZXJzaW9uIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjY5Cittc2dpZCAiIgorInZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheSB0aGUgdmVyc2lvbiBudW1iZXIgYW5kICIKKyJjb3B5cmlnaHQgaW5mb3JtYXRpb24gb2YgR05VIFBhcnRlZCIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI3MworbXNnaWQgIiIKKyIndmVyc2lvbicgZGlzcGxheXMgY29weXJpZ2h0IGFuZCB2ZXJzaW9uIGluZm9ybWF0aW9uIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyAiCisiY29weSBvZiBHTlUgUGFydGVkXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIzMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstaGxtc3ZdIFtERVZJQ0UgW0NPTU1BTkQgW1BBUkFNRVRFUlNdXS4uLl1cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjM3OQorIywgZnV6enkKK21zZ2lkICJObyBkZXZpY2UgZm91bmQiCittc2dzdHIgIkFQQVJFWUUgQnlhYm9uZXRzZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjI0MTIKK21zZ2lkICJXQVJOSU5HOiBZb3UgYXJlIG5vdCBzdXBlcnVzZXIuICBXYXRjaCBvdXQgZm9yIHBlcm1pc3Npb25zLiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjQ1MAorIywgZnV6enkKK21zZ2lkICJZb3UgbWF5IG5lZWQgdG8gdXBkYXRlIC9ldGMvZnN0YWIuXG4iCittc2dzdHIgIkt1cmkgS3V2dWd1cnVyYSBOSUJBIgorCisjOiBwYXJ0ZWQvdWkuYzoxNjAKK21zZ2lkICJXZWxjb21lIHRvIEdOVSBQYXJ0ZWQhIFR5cGUgJ2hlbHAnIHRvIHZpZXcgYSBsaXN0IG9mIGNvbW1hbmRzLlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjE2MworIywgZnV6enkKK21zZ2lkICIiCisiVXNhZ2U6IHBhcnRlZCBbT1BUSU9OXS4uLiBbREVWSUNFIFtDT01NQU5EIFtQQVJBTUVURVJTXS4uLl0uLi5dXG4iCisiQXBwbHkgQ09NTUFORHMgd2l0aCBQQVJBTUVURVJTIHRvIERFVklDRS4gIElmIG5vIENPTU1BTkQocykgYXJlIGdpdmVuLCBydW4gIgorImluXG4iCisiaW50ZXJhY3RpdmUgbW9kZS5cbiIKK21zZ3N0ciAiTmE6IEt1cmkgT3lhIFMgVWJ3b2tvIgorCisjOiBwYXJ0ZWQvdWkuYzoxNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlxuIgorIllvdSBmb3VuZCBhIGJ1ZyBpbiBHTlUgUGFydGVkISBIZXJlJ3Mgd2hhdCB5b3UgaGF2ZSB0byBkbzpcbiIKKyJcbiIKKyJEb24ndCBwYW5pYyEgVGhlIGJ1ZyBoYXMgbW9zdCBsaWtlbHkgbm90IGFmZmVjdGVkIGFueSBvZiB5b3VyIGRhdGEuXG4iCisiSGVscCB1cyB0byBmaXggdGhpcyBidWcgYnkgZG9pbmcgdGhlIGZvbGxvd2luZzpcbiIKKyJcbiIKKyJDaGVjayB3aGV0aGVyIHRoZSBidWcgaGFzIGFscmVhZHkgYmVlbiBmaXhlZCBieSBjaGVja2luZ1xuIgorInRoZSBsYXN0IHZlcnNpb24gb2YgR05VIFBhcnRlZCB0aGF0IHlvdSBjYW4gZmluZCBhdDpcbiIKKyJcbiIKKyJcdGh0dHA6Ly9mdHAuZ251Lm9yZy9nbnUvcGFydGVkL1xuIgorIlxuIgorIlBsZWFzZSBjaGVjayB0aGlzIHZlcnNpb24gcHJpb3IgdG8gYnVnIHJlcG9ydGluZy5cbiIKKyJcbiIKKyJJZiB0aGlzIGhhcyBub3QgYmVlbiBmaXhlZCB5ZXQgb3IgaWYgeW91IGRvbid0IGtub3cgaG93IHRvIGNoZWNrLFxuIgorInBsZWFzZSB2aXNpdCB0aGUgR05VIFBhcnRlZCB3ZWJzaXRlOlxuIgorIlxuIgorIlx0aHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3BhcnRlZFxuIgorIlxuIgorImZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLlxuIgorIlxuIgorIllvdXIgcmVwb3J0IHNob3VsZCBjb250YWluIHRoZSB2ZXJzaW9uIG9mIHRoaXMgcmVsZWFzZSAoJXMpXG4iCisiYWxvbmcgd2l0aCB0aGUgZXJyb3IgbWVzc2FnZSBiZWxvdywgdGhlIG91dHB1dCBvZlxuIgorIlxuIgorIlx0cGFydGVkIERFVklDRSB1bml0IGNvIHByaW50IHVuaXQgcyBwcmludFxuIgorIlxuIgorImFuZCB0aGUgZm9sbG93aW5nIGhpc3Rvcnkgb2YgY29tbWFuZHMgeW91IGVudGVyZWQuXG4iCisiQWxzbyBpbmNsdWRlIGFueSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHlvdXIgc2V0dXAgeW91XG4iCisiY29uc2lkZXIgaW1wb3J0YW50LlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjI4NAorbXNnaWQgIiIKKyJcbiIKKyJDb21tYW5kIEhpc3Rvcnk6XG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6MzY2Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBTRUdWX01BUEVSUiAoQWRkcmVzcyBub3QgbWFwcGVkIHRvIG9iamVjdClcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzozNzIKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IFNFR1ZfQUNDRVJSIChJbnZhbGlkIHBlcm1pc3Npb25zIGZvciBtYXBwZWQgb2JqZWN0KVxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjM3NworbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogQSBnZW5lcmFsIFNJR1NFR1Ygc2lnbmFsIHdhcyBlbmNvdW50ZXJlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0MTAKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9JTlRESVYgKEludGVnZXI6IGRpdmlkZSBieSB6ZXJvKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0MTUKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9JTlRPVkYgKEludGVnZXI6IG92ZXJmbG93KSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0MjAKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRESVYgKEZsb2F0OiBkaXZpZGUgYnkgemVybykiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDI1Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxUT1ZGIChGbG9hdDogb3ZlcmZsb3cpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQzMAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0ZMVFVORCAoRmxvYXQ6IHVuZGVyZmxvdykiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDM1Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxUUkVTIChGbG9hdDogaW5leGFjdCByZXN1bHQpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQ0MAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0ZMVElOViAoRmxvYXQ6IGludmFsaWQgb3BlcmF0aW9uKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0NDUKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRTVUIgKEZsb2F0OiBzdWJzY3JpcHQgb3V0IG9mIHJhbmdlKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0NTAKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEEgZ2VuZXJhbCBTSUdGUEUgc2lnbmFsIHdhcyBlbmNvdW50ZXJlZC4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDgzCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfSUxMT1BDIChJbGxlZ2FsIE9wY29kZSkiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDg4Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfSUxMT1BOIChJbGxlZ2FsIE9wZXJhbmQpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQ5MworbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX0lMTEFEUiAoSWxsZWdhbCBhZGRyZXNzaW5nIG1vZGUpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQ5OAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX0lMTFRSUCAoSWxsZWdhbCBUcmFwKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo1MDMKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9QUlZPUEMgKFByaXZpbGVnZWQgT3Bjb2RlKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo1MDgKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9QUlZSRUcgKFByaXZpbGVnZWQgUmVnaXN0ZXIpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjUxMworbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX0NPUFJPQyAoQ29wcm9jZXNzb3IgRXJyb3IpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjUxOAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX0JBRFNUSyAoSW50ZXJuYWwgU3RhY2sgRXJyb3IpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjUyMworbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogQSBnZW5lcmFsIFNJR0lMTCBzaWduYWwgd2FzIGVuY291bnRlcmVkLiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzoxMDI0CisjLCBmdXp6eQorbXNnaWQgIkV4cGVjdGluZyBhIHBhcnRpdGlvbiBudW1iZXIuIgorbXNnc3RyICJhIFVtdWJhcmUiCisKKyM6IHBhcnRlZC91aS5jOjEwMzMKK21zZ2lkICJQYXJ0aXRpb24gZG9lc24ndCBleGlzdC4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6MTA1MworIywgZnV6enkKK21zZ2lkICJFeHBlY3RpbmcgYSBmaWxlIHN5c3RlbSB0eXBlLiIKK21zZ3N0ciAiYSBJRE9TSVlFIFNpc2l0ZW11IFVid29rbyIKKworIzogcGFydGVkL3VpLmM6MTA2MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBmaWxlIHN5c3RlbSB0eXBlIFwiJXNcIi4iCittc2dzdHIgIklET1NJWUUgU2lzaXRlbXUgVWJ3b2tvIgorCisjOiBwYXJ0ZWQvdWkuYzoxMDgwCisjLCBmdXp6eQorbXNnaWQgIkV4cGVjdGluZyBhIGRpc2sgbGFiZWwgdHlwZS4iCittc2dzdHIgImEgQWthcmFuZ28gVWJ3b2tvIgorCisjOiBwYXJ0ZWQvdWkuYzoxMTc4CisjLCBmdXp6eQorbXNnaWQgIkNhbid0IGNyZWF0ZSBhbnkgbW9yZSBwYXJ0aXRpb25zLiIKK21zZ3N0ciAiS3VyZW1hIEJpcmVuemVobyIKKworIzogcGFydGVkL3VpLmM6MTE4OAorIywgZnV6enkKK21zZ2lkICJFeHBlY3RpbmcgYSBwYXJ0aXRpb24gdHlwZS4iCittc2dzdHIgImEgVWJ3b2tvIgorCisjOiBwYXJ0ZWQvdWkuYzoxMzE1Cittc2dpZCAib24iCittc2dzdHIgImt1cmkiCisKKyMgIy0jLSMtIy0jICBzdngucG90IChQQUNLQUdFIFZFUlNJT04pICAjLSMtIy0jLSMKKyMgc3Z4L3NvdXJjZVxzdmRyYXdcc3Zkc3RyLnNyYzpTVFJfSXRlbVZhbE9GRi50ZXh0CisjICMtIy0jLSMtIyAgc3Z4LnBvdCAoUEFDS0FHRSBWRVJTSU9OKSAgIy0jLSMtIy0jCisjIHN2eC9zb3VyY2Vcc3ZkcmF3XHN2ZHN0ci5zcmM6U1RSX0l0ZW1WYWxURVhUQU5JX05PTkUudGV4dAorIzogcGFydGVkL3VpLmM6MTMxNgorbXNnaWQgIm9mZiIKK21zZ3N0ciAiYmlkYWtvcmEiCisKKyMgY3Jhc2hyZXAvc291cmNlXGFsbFxjcmFzaHJlcC5sbmc6JU9QVElPTlNfQlVUVE9OJS50ZXh0CisjOiBwYXJ0ZWQvdWkuYzoxNDMxCisjLCBmdXp6eQorbXNnaWQgIk9QVElPTnM6IgorbXNnc3RyICJBbWFoaXRhbW8uLi4iCisKKyMgc2Z4Mi9zb3VyY2VcZG9jXGRvY3Zvci5zcmM6RExHX09SR0FOSVpFLkJUTl9FRElULnRleHQKKyM6IHBhcnRlZC91aS5jOjE0MzYKKyMsIGZ1enp5Cittc2dpZCAiQ09NTUFORHM6IgorbXNnc3RyICJBbWFid2lyaXphIgorCisjOiBwYXJ0ZWQvdWkuYzoxNDQ1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVc2luZyAlc1xuIgorbXNnc3RyICJpa29yZXNoYSIKKworIzogcGFydGVkL3VpLmM6MTUxOQorbXNnaWQgIlRoaXMgY29tbWFuZCBkb2VzIG5vdCBtYWtlIHNlbnNlIGluIG5vbi1pbnRlcmFjdGl2ZSBtb2RlLlxuIgorbXNnc3RyICIiCisKKyMsIGZ1enp5CisjfiBtc2dpZCAid2hlcmUgbmVjZXNzYXJ5LCBwcm9tcHRzIGZvciB1c2VyIGludGVydmVudGlvbiIKKyN+IG1zZ3N0ciAia3VnaXJhbmdvIFVrb3Jlc2hhOiIKKworIywgZnV6enkKKyN+IG1zZ2lkICIiCisjfiAiV2l0aG91dCBhcmd1bWVudHMsIHByaW50IGRpc3BsYXlzIHRoZSBlbnRpcmUgcGFydGl0aW9uIHRhYmxlLiBXaXRoICIKKyN+ICInZnJlZSdcbiIKKyN+ICJhcmd1bWVudCwgaW5mb3JtYXRpb24gYWJvdXQgZnJlZSBzcGFjZSB3aWxsIGJlIGRpc3BsYXllZCBvdGhlcndpc2UgaWYgYVxuIgorI34gInBhcnRpdGlvbiBudW1iZXIgaXMgZ2l2ZW4sIHRoZW4gbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBpcyBkaXNwbGF5ZWRcbiIKKyN+ICJhYm91dCB0aGF0IHBhcnRpdGlvbi4gSWYgdGhlICdhbGwnIGFyZ3VtZW50IGlzIHBhc3NlZCBpbnN0ZWFkLCBwYXJ0aXRpb25cbiIKKyN+ICJpbmZvcm1hdGlvbiBmb3IgYWxsIGRldmljZXMgd2lsbCBiZSBkaXNwbGF5ZWQuXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJpbmdpbmdvIEd1Y2FwYSBpIGltYm9uZXJhaGFtd2UjIFVtdWJhcmUgbmkgSGFueXVtYSBCaXJlbnplaG8gSWJpc29iYW51cm8gIgorI34gIm5pIgorCisjLCBmdXp6eQorI34gbXNnaWQgIiIKKyN+ICJUaGUgc2VjdG9yIHNpemUgb24gJXMgaXMgJWQgYnl0ZXMuICBQYXJ0ZWQgaXMga25vd24gbm90IHRvIHdvcmsgcHJvcGVybHkgIgorI34gIndpdGggZHJpdmVzIHdpdGggc2VjdG9yIHNpemVzIG90aGVyIHRoYW4gJWQgYnl0ZXMiCisjfiBtc2dzdHIgIkluZ2FubyBrdSBuaSBCYXlpdGUgbmkgT1lBIEt1cmkgQWthemkgTmE6IE5hOiBJa2luZGkgQmF5aXRlIgorCisjLCBmdXp6eQorI34gbXNnaWQgIkNvdWxkIG5vdCByZWFkIGdlb21ldHJ5IG9mICVzIC0gJXMuIgorI34gbXNnc3RyICJPWUEgR3Vzb21hIEl5aWdhbWFzaHVzaG8gQnlhIgorCisjLCBmdXp6eQorI34gbXNnaWQgIkRldmljZSAlcyBoYXMgZG9kZ2V5IGdlb21ldHJ5LiIKKyN+IG1zZ3N0ciAiSXlpZ2FtYXNodXNobyIKKworIywgZnV6enkKKyN+IG1zZ2lkICJEZXZpY2UgJXMgaXMgbmVpdGhlciBhIFNDU0kgbm9yIElERSBkcml2ZS4iCisjfiBtc2dzdHIgIm5pIGEgUG9yb2dhcmFtdS0gc2hvYm96YSIKKworIywgZnV6enkKKyN+IG1zZ2lkICJFcnJvciByZWFkaW5nICVzICglcykgdG8gZGV0ZXJtaW5lIGlmIHBhcnRpdGlvbiBpcyBtb3VudGVkLiIKKyN+IG1zZ3N0ciAiS3VyaSBOSUJBIG5pIgorCisjLCBmdXp6eQorI34gbXNnaWQgIiIKKyN+ICJVbmFibGUgdG8gZGV0ZXJtaW5lIGlmIHBhcnRpdGlvbnMgYXJlIG1vdW50ZWQgdmlhIC9wcm9jL21vdW50cyBvciAvZXRjLyIKKyN+ICJtdGFiLiAgTWFrZSBzdXJlIHlvdSBkb24ndCBhdHRlbXB0IHRvIHJlc2l6ZSBvciBtb2RpZnkgbW91bnRlZCBmaWxlICIKKyN+ICJzeXN0ZW1zLiAgKEV2ZW4gcmVhZC1vbmx5IG1vdW50ZWQpIgorI34gbXNnc3RyICIiCisjfiAiS3VyaSBOSUJBIEJpdHVydXRzZSBDeWFuZ3dhIEt1cmkgSWhpbmR1cmFuZ2VybyBDeWFuZ3dhIEd1aGluZHVyYSBJRE9TSVlFICIKKyN+ICJHdXNvbWEiCisKKyMsIGZ1enp5CisjfiBtc2dpZCAiIgorI34gIlRoZSBwYXJ0aXRpb24gdGFibGUgb24gJXMgaXMgaW5jb25zaXN0ZW50LiAgVGhlcmUgYXJlIG1hbnkgcmVhc29ucyB3aHkgIgorI34gInRoaXMgbWlnaHQgYmUgdGhlIGNhc2UuICBIb3dldmVyLCB0aGUgbW9zdCBsaWtlbHkgcmVhc29uIGlzIHRoYXQgTGludXggIgorI34gImRldGVjdGVkIHRoZSBCSU9TIGdlb21ldHJ5IGZvciAlcyBpbmNvcnJlY3RseS4gIEdOVSBQYXJ0ZWQgc3VzcGVjdHMgdGhlICIKKyN+ICJyZWFsIGdlb21ldHJ5IHNob3VsZCBiZSAlZC8lZC8lZCAobm90ICVkLyVkLyVkKS4gIFlvdSBzaG91bGQgY2hlY2sgd2l0aCAiCisjfiAieW91ciBCSU9TIGZpcnN0LCBhcyB0aGlzIG1heSBub3QgYmUgY29ycmVjdC4gIFlvdSBjYW4gaW5mb3JtIExpbnV4IGJ5ICIKKyN+ICJhZGRpbmcgdGhlIHBhcmFtZXRlciAlcz0lZCwlZCwlZCB0byB0aGUgY29tbWFuZCBsaW5lLiAgU2VlIHRoZSBMSUxPIG9yICIKKyN+ICJHUlVCIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uICBJZiB5b3UgdGhpbmsgUGFydGVkJ3Mgc3VnZ2VzdGVkICIKKyN+ICJnZW9tZXRyeSBpcyBjb3JyZWN0LCB5b3UgbWF5IHNlbGVjdCBJZ25vcmUgdG8gY29udGludWUgKGFuZCBmaXggTGludXggIgorI34gImxhdGVyKS4gIE90aGVyd2lzZSwgc2VsZWN0IENhbmNlbCAoYW5kIGZpeCBMaW51eCBhbmQvb3IgdGhlIEJJT1Mgbm93KS4iCisjfiBtc2dzdHIgIiIKKyN+ICJpbWJvbmVyYWhhbXdlIyBrdSBuaSBpeWkgaSBpIG5pIGkgSXlpZ2FtYXNodXNobyBrdWdpcmFuZ28gaSBJeWlnYW1hc2h1c2hvICIKKyN+ICJPWUEgS3VnZW56dXJhLi4uIE5hOiBJdGFuZ2lyYSBOa2EgaXlpIEdpY3VyYXNpIE9ZQSBrdSBXb25nZXJhIGkgS3VyaSBpICIKKyN+ICJLb21hbmRpOiBVbXVyb25nbyBpIEN5YW5nd2Ega3VnaXJhbmdvIEJpcmVuemVobyBJYmlzb2JhbnVybyBJeWlnYW1hc2h1c2hvICIKKyN+ICJuaSBHaWN1cmFzaSBHdWhpdGFtbyBLdXJpIHVyaWZ1emFndWtvbWV6YSBOYSBHdWhpdGFtbyBOYSBOYSBDeWFuZ3dhIGkgIgorI34gIk5PTkVBSEEiCisKKyMsIGZ1enp5CisjfiBtc2dpZCAiIgorI34gIlRoZSBwYXJ0aXRpb24gdGFibGUgb24gJXMgaXMgaW5jb25zaXN0ZW50LiAgVGhlcmUgYXJlIG1hbnkgcmVhc29ucyB3aHkgIgorI34gInRoaXMgbWlnaHQgYmUgdGhlIGNhc2UuICBPZnRlbiwgdGhlIHJlYXNvbiBpcyB0aGF0IExpbnV4IGRldGVjdGVkIHRoZSAiCisjfiAiQklPUyBnZW9tZXRyeSBpbmNvcnJlY3RseS4gIEhvd2V2ZXIsIHRoaXMgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHRoZSBjYXNlICIKKyN+ICJoZXJlLiAgSXQgaXMgc2FmZSB0byBpZ25vcmUsYnV0IGlnbm9yaW5nIG1heSBjYXVzZSAoZml4YWJsZSkgcHJvYmxlbXMgIgorI34gIndpdGggc29tZSBib290IGxvYWRlcnMsIGFuZCBtYXkgY2F1c2UgcHJvYmxlbXMgd2l0aCBGQVQgZmlsZSBzeXN0ZW1zLiAgIgorI34gIlVzaW5nIExCQSBpcyByZWNvbW1lbmRlZC4iCisjfiBtc2dzdHIgIiIKKyN+ICJpbWJvbmVyYWhhbXdlIyBrdSBuaSBpeWkgaSBpIG5pIGkgSXlpZ2FtYXNodXNobyBpeWkgT1lBIEt1Z2FyYWdhcmEgS3VyaSBpICIKKyN+ICJuaSBLdXJpIEt3aXJlbmdhZ2l6YSBHaWN1cmFzaSBOYTogTmEgR2ljdXJhc2kgTmE6IElET1NJWUUgbmkiCisKKyMsIGZ1enp5CisjfiBtc2dpZCAiIgorI34gIlVuYWJsZSB0byBhbGlnbiBwYXJ0aXRpb24gcHJvcGVybHkuICBUaGlzIHByb2JhYmx5IG1lYW5zIHRoYXQgYW5vdGhlciAiCisjfiAicGFydGl0aW9uaW5nIHRvb2wgZ2VuZXJhdGVkIGFuIGluY29ycmVjdCBwYXJ0aXRpb24gdGFibGUsIGJlY2F1c2UgaXQgIgorI34gImRpZG4ndCBoYXZlIHRoZSBjb3JyZWN0IEJJT1MgZ2VvbWV0cnkuICBJdCBpcyBzYWZlIHRvIGlnbm9yZSxidXQgaWdub3JpbmcgIgorI34gIm1heSBjYXVzZSAoZml4YWJsZSkgcHJvYmxlbXMgd2l0aCBzb21lIGJvb3QgbG9hZGVycy4iCisjfiBtc2dzdHIgIiIKKyN+ICJLdXJpIEd1dG9uZGVrYSBpbWJvbmVyYWhhbXdlIyBpIEl5aWdhbWFzaHVzaG8gbmkgS3VyaSBLd2lyZW5nYWdpemEgIgorI34gIkdpY3VyYXNpIE5hOiIKKworIywgZnV6enkKKyN+IG1zZ2lkICJBdHRlbXB0IHRvIHJlYWQgc2VjdG9ycyAlbGQtJWxkIG91dHNpZGUgb2YgcGFydGl0aW9uIG9uICVzIgorI34gbXNnc3RyICJLdXJpIEd1c29tYSBIYW56ZSBCeWEga3UiCisKKyMsIGZ1enp5CisjfiBtc2dpZCAiIgorI34gIlRoaXMgZXh0MiBmaWxlc3lzdGVtIGhhcyBhIHJhdGhlciBzdHJhbmdlIGxheW91dCEgIFBhcnRlZCBjYW4ndCByZXNpemUgIgorI34gInRoaXMgKHlldCkuIgorI34gbXNnc3RyICJhIEltaWdhcmFnYXJpcmUgSWhpbmR1cmFuZ2VybyBpeWkiCisKKyMsIGZ1enp5CisjfiBtc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGludmFsaWQgc2lnbmF0dXJlIGZvciBhIEZBVCBmaWxlIHN5c3RlbXMuIgorI34gbXNnc3RyICJJZG9zaXllIFNpc2l0ZW11IFNpYnlvIElzaW55YSBrdWdpcmFuZ28gYSBJRE9TSVlFIgorCisjLCBmdXp6eQorI34gbXNnaWQgIiIKKyN+ICJQYXJ0aXRpb24gJXMgaXMgYmVpbmcgdXNlZC4gIE1vZGlmeWluZyBpdCB3aGlsZSBpdCBpcyBpbiB1c2UgY291bGQgY2F1c2UgIgorI34gInNldmVyZSBjb3JydXB0aW9uLiIKKyN+IG1zZ3N0ciAibmkgbmkgaW4gR3Vrb3Jlc2hhIgorCisjLCBmdXp6eQorI34gbXNnaWQgIiIKKyN+ICJZb3UgcmVxdWVzdGVkIHRvIGNyZWF0ZSBhIHBhcnRpdGlvbiBhdCAlLjNmLSUuM2ZNYi4gVGhlIGNsb3Nlc3QgUGFydGVkICIKKyN+ICJjYW4gbWFuYWdlIGlzICUuM2YtJS4zZk1iLiIKKyN+IG1zZ3N0ciAiS3VyaSBLdXJlbWEgYSBrdSBrdXlvYm9yYSBuaSIKKworIywgZnV6enkKKyN+IG1zZ2lkICIiCisjfiAiWW91IHJlcXVlc3RlZCB0byBtb3ZlIHRoZSBwYXJ0aXRpb24gdG8gJS4zZi0lLjNmTWIuIFRoZSBjbG9zZXN0IFBhcnRlZCAiCisjfiAiY2FuIG1hbmFnZSBpcyAlLjNmLSUuM2ZNYi4iCisjfiBtc2dzdHIgIkt1cmkgS3dpbXVyYSBpIEt1cmkga3V5b2JvcmEgbmkiCisKKyMsIGZ1enp5CisjfiBtc2dpZCAiRGlzayBnZW9tZXRyeSBmb3IgJXM6IDAuMDAwLSUuM2YgbWVnYWJ5dGVzXG4iCisjfiBtc2dzdHIgIjAwMC4iCisKKyMsIGZ1enp5CisjfiBtc2dpZCAiRGlzayBsYWJlbCB0eXBlOiAlc1xuIgorI34gbXNnc3RyICJBa2FyYW5nbyBVYndva28iCisKKyMsIGZ1enp5CisjfiBtc2dpZCAiTWlub3IgICAgU3RhcnQgICAgICAgRW5kICAgICAiCisjfiBtc2dzdHIgIkd1dGFuZ2lyYSBJbXBlcmEiCisKKyMgIy0jLSMtIy0jICBkYmFjY2Vzcy5wb3QgKFBBQ0tBR0UgVkVSU0lPTikgICMtIy0jLSMtIworIyAjLSMtIy0jLSMgIGRiYWNjZXNzLnBvdCAoUEFDS0FHRSBWRVJTSU9OKSAgIy0jLSMtIy0jCisjLCBmdXp6eQorI34gbXNnaWQgIlR5cGUgICAgICAiCisjfiBtc2dzdHIgIlVid29rbyIKKworIywgZnV6enkKKyN+IG1zZ2lkICJOYW1lICAgICAgICAgICAgICAgICAgIgorI34gbXNnc3RyICJJemluYSIKKworIywgZnV6enkKKyN+IG1zZ2lkICIiCisjfiAiWW91IHJlcXVlc3RlZCB0byByZXNpemUgdGhlIHBhcnRpdGlvbiB0byAlLjNmLSUuM2ZNYi4gVGhlIGNsb3Nlc3QgUGFydGVkICIKKyN+ICJjYW4gbWFuYWdlIGlzICUuM2YtJS4zZk1iLiIKKyN+IG1zZ3N0ciAiS3VyaSBJaGluZHVyYW5nZXJvIGkgS3VyaSBrdXlvYm9yYSBuaSIKKworIywgZnV6enkKKyN+IG1zZ2lkICJyZXNpemUgTUlOT1IgU1RBUlQgRU5EICAgICAgICByZXNpemUgZmlsZXN5c3RlbSBvbiBwYXJ0aXRpb24gTUlOT1IiCisjfiBtc2dzdHIgIkloaW5kdXJhbmdlcm8gSWhpbmR1cmFuZ2VybyBrdSIKKworIywgZnV6enkKKyN+IG1zZ2lkICIiCisjfiAiWW91IGZvdW5kIGEgYnVnIGluIEdOVSBQYXJ0ZWQuICBQbGVhc2UgZW1haWwgYSBidWcgcmVwb3J0IHRvIGJ1Zy0iCisjfiAicGFydGVkQGdudS5vcmcgY29udGFpbmluZyB0aGUgdmVyc2lvbiAoJXMpLCBhbmQgdGhlIGZvbGxvd2luZyBtZXNzYWdlOlxuIgorI34gbXNnc3RyICIiCisjfiAiQnlhYm9uZXRzZSBhIGluIGltZWxpIGEgSWN5ZWdlcmFueW8gS3VyaSBvcmcgaSBWZXJpc2l5byBOYSBpIFVidXR1bXdhIgorCisjLCBmdXp6eQorI34gbXNnaWQgIiIKKyN+ICIgIFlvdSBoYXZlIFdpbmRvd3MgRkFUIHBhcnRpdGlvbihzKSB0aGF0IGFyZSBub3QgdXNpbmcgTEJBLiAgSWYgeW91ciBCSU9TICIKKyN+ICJzdXBwb3J0cyBMQkEsIHRoZW4geW91IHNob3VsZCBzd2l0Y2ggdG8gTEJBIGJ5IHNldHRpbmcgdGhlIExCQSBmbGFnIG9uICIKKyN+ICJhbGwgRkFUIHBhcnRpdGlvbnMuICBPdGhlcndpc2UsIG1ha2Ugc3VyZSB0aGUgb3BlcmF0aW5nIHN5c3RlbSBhbmQgdGhlICIKKyN+ICJCSU9TIGhhdmUgdGhlIHNhbWUgZ2VvbWV0cnkgYmVmb3JlIHJlc2l6aW5nIGFueSBGQVQgcGFydGl0aW9ucy4iCisjfiBtc2dzdHIgIiIKKyN+ICJTIE9ZQSBpa29yZXNoYSBIYW55dW1hIEhpbmR1cmEgS3VyaSBrdSBJZ2VuYW1pdGVyZXJlIGkgSWJlbmRlcmEga3UgQnlvc2UgIgorI34gIlVid29rbyBpIFNpc2l0ZW11IE5hIGkgaSBJeWlnYW1hc2h1c2hvIE1iZXJlIgorCisjLCBmdXp6eQorI34gbXNnaWQgIiIKKyN+ICJUaGUgb3BlcmF0aW5nIHN5c3RlbSB0aGlua3MgdGhlIGdlb21ldHJ5IG9uICVzIGlzICVkLyVkLyVkLiAgVGhlcmVmb3JlLCAiCisjfiAiY3lsaW5kZXIgMTAyNCBlbmRzIGF0ICUuM2ZNLiVzIgorI34gbXNnc3RyICJTaXNpdGVtdSBpIEl5aWdhbWFzaHVzaG8ga3UgbmkgVW13aWJ1cnVuZ3VzaHVyZSBrdSIKKworIywgZnV6enkKKyN+IG1zZ2lkICJUaGUgb3BlcmF0aW5nIHN5c3RlbSB0aGlua3MgdGhlIGdlb21ldHJ5IG9uICVzIGlzICVkLyVkLyVkLiVzIgorI34gbXNnc3RyICJTaXNpdGVtdSBpIEl5aWdhbWFzaHVzaG8ga3UgbmkiCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvcG8vc3RhbXAtcG8gYi9wYXJ0ZWQtMS44LjcvcG8vc3RhbXAtcG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc4OGY3MAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9wby9zdGFtcC1wbwpAQCAtMCwwICsxIEBACit0aW1lc3RhbXAKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9wby9zdi5nbW8gYi9wYXJ0ZWQtMS44LjcvcG8vc3YuZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5Y2UxYTMKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvcG8vc3YuZ21vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9wby9zdi5wbyBiL3BhcnRlZC0xLjguNy9wby9zdi5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjU1Njg0Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L3BvL3N2LnBvCkBAIC0wLDAgKzEsMzM3OCBAQAorIyBTd2VkaXNoIG1lc3NhZ2VzIGZvciBwYXJ0ZWQKKyMgQ29weXJpZ2h0IKkgMjAwMSBK9nJnZW4gVGVnbulyLgorIyBK9nJnZW4gVGVnbulyIDxqb3JnZW4udGVnbmVyQHRlbGlhLmNvbT4sIDIwMDEuCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBwYXJ0ZWQgMS40LjE4XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGJ1Zy1wYXJ0ZWRAZ251Lm9yZ1xuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDA3LTA1LTA5IDE3OjAyLTA0MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDAxLTA4LTI2IDIzOjA5KzAyMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEr2cmdlbiBUZWdu6XIgPGpvcmdlbi50ZWduZXJAdGVsaWEuY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IFN3ZWRpc2ggPHN2QGxpLm9yZz5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1pc28tODg1OS0xXG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorCisjOiBsaWIvY2xvc2VvdXQuYzo3NAorbXNnaWQgIndyaXRlIGVycm9yIgorbXNnc3RyICIiCisKKyM6IGxpYi9lcnJvci5jOjEyNQorIywgZnV6enkKK21zZ2lkICJVbmtub3duIHN5c3RlbSBlcnJvciIKK21zZ3N0ciAiT2vkbmQgZmlsc3lzdGVtc3R5cC4iCisKKyM6IGxpYi9nZXRvcHQuYzo1MzEgbGliL2dldG9wdC5jOjU0NworIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIGAlcycgaXMgYW1iaWd1b3VzXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjU4MCBsaWIvZ2V0b3B0LmM6NTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYC0tJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6NTkzIGxpYi9nZXRvcHQuYzo1OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiBgJWMlcycgZG9lc24ndCBhbGxvdyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo2NDEgbGliL2dldG9wdC5jOjY2MCBsaWIvZ2V0b3B0LmM6OTc2IGxpYi9nZXRvcHQuYzo5OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiBgJXMnIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjY5OCBsaWIvZ2V0b3B0LmM6NzAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bnJlY29nbml6ZWQgb3B0aW9uIGAtLSVzJ1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo3MDkgbGliL2dldG9wdC5jOjcxMgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5yZWNvZ25pemVkIG9wdGlvbiBgJWMlcydcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6NzY0IGxpYi9nZXRvcHQuYzo3NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGlsbGVnYWwgb3B0aW9uIC0tICVjXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjc3MyBsaWIvZ2V0b3B0LmM6Nzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbnZhbGlkIG9wdGlvbiAtLSAlY1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo4MjggbGliL2dldG9wdC5jOjg0NCBsaWIvZ2V0b3B0LmM6MTA0OCBsaWIvZ2V0b3B0LmM6MTA2NgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IC0tICVjXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjg5NyBsaWIvZ2V0b3B0LmM6OTEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYC1XICVzJyBpcyBhbWJpZ3VvdXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6OTM3IGxpYi9nZXRvcHQuYzo5NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiBgLVcgJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzoKKyMuIEdldCB0cmFuc2xhdGlvbnMgZm9yIG9wZW4gYW5kIGNsb3NpbmcgcXVvdGF0aW9uIG1hcmtzLgorIy4KKyMuIFRoZSBtZXNzYWdlIGNhdGFsb2cgc2hvdWxkIHRyYW5zbGF0ZSAiYCIgdG8gYSBsZWZ0CisjLiBxdW90YXRpb24gbWFyayBzdWl0YWJsZSBmb3IgdGhlIGxvY2FsZSwgYW5kIHNpbWlsYXJseSBmb3IKKyMuICInIi4gIElmIHRoZSBjYXRhbG9nIGhhcyBubyB0cmFuc2xhdGlvbiwKKyMuIGxvY2FsZV9xdW90aW5nX3N0eWxlIHF1b3RlcyBgbGlrZSB0aGlzJywgYW5kCisjLiBjbG9jYWxlX3F1b3Rpbmdfc3R5bGUgcXVvdGVzICJsaWtlIHRoaXMiLgorIy4KKyMuIEZvciBleGFtcGxlLCBhbiBBbWVyaWNhbiBFbmdsaXNoIFVuaWNvZGUgbG9jYWxlIHNob3VsZAorIy4gdHJhbnNsYXRlICJgIiB0byBVKzIwMUMgKExFRlQgRE9VQkxFIFFVT1RBVElPTiBNQVJLKSwgYW5kCisjLiBzaG91bGQgdHJhbnNsYXRlICInIiB0byBVKzIwMUQgKFJJR0hUIERPVUJMRSBRVU9UQVRJT04KKyMuIE1BUkspLiAgQSBCcml0aXNoIEVuZ2xpc2ggVW5pY29kZSBsb2NhbGUgc2hvdWxkIGluc3RlYWQKKyMuIHRyYW5zbGF0ZSB0aGVzZSB0byBVKzIwMTggKExFRlQgU0lOR0xFIFFVT1RBVElPTiBNQVJLKSBhbmQKKyMuIFUrMjAxOSAoUklHSFQgU0lOR0xFIFFVT1RBVElPTiBNQVJLKSwgcmVzcGVjdGl2ZWx5LgorIy4KKyMuIElmIHlvdSBkb24ndCBrbm93IHdoYXQgdG8gcHV0IGhlcmUsIHBsZWFzZSBzZWUKKyMuIDxodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1F1b3RhdGlvbl9tYXJrI0dseXBocz4KKyMuIGFuZCB1c2UgZ2x5cGhzIHN1aXRhYmxlIGZvciB5b3VyIGxhbmd1YWdlLgorIzogbGliL3F1b3RlYXJnLmM6MjI5Cittc2dpZCAiYCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcXVvdGVhcmcuYzoyMzAKK21zZ2lkICInIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTMxCittc2dpZCAiU3VjY2VzcyIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjEzNAorbXNnaWQgIk5vIG1hdGNoIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTM3Cittc2dpZCAiSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNDAKK21zZ2lkICJJbnZhbGlkIGNvbGxhdGlvbiBjaGFyYWN0ZXIiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNDMKK21zZ2lkICJJbnZhbGlkIGNoYXJhY3RlciBjbGFzcyBuYW1lIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTQ2Cittc2dpZCAiVHJhaWxpbmcgYmFja3NsYXNoIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTQ5Cittc2dpZCAiSW52YWxpZCBiYWNrIHJlZmVyZW5jZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE1MgorbXNnaWQgIlVubWF0Y2hlZCBbIG9yIFteIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTU1Cittc2dpZCAiVW5tYXRjaGVkICggb3IgXFwoIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTU4Cittc2dpZCAiVW5tYXRjaGVkIFxceyIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE2MQorbXNnaWQgIkludmFsaWQgY29udGVudCBvZiBcXHtcXH0iCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNjQKK21zZ2lkICJJbnZhbGlkIHJhbmdlIGVuZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE2NworbXNnaWQgIk1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNzAKK21zZ2lkICJJbnZhbGlkIHByZWNlZGluZyByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNzMKK21zZ2lkICJQcmVtYXR1cmUgZW5kIG9mIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE3NgorbXNnaWQgIlJlZ3VsYXIgZXhwcmVzc2lvbiB0b28gYmlnIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTc5Cittc2dpZCAiVW5tYXRjaGVkICkgb3IgXFwpIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6NjgwCittc2dpZCAiTm8gcHJldmlvdXMgcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9ycG1hdGNoLmM6NzAKK21zZ2lkICJeW3lZXSIKK21zZ3N0ciAiIgorCisjOiBsaWIvcnBtYXRjaC5jOjczCittc2dpZCAiXltuTl0iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IFRyYW5zbGF0ZSAiKEMpIiB0byB0aGUgY29weXJpZ2h0IHN5bWJvbAorIy4gKEMtaW4tYS1jaXJjbGUpLCBpZiB0aGlzIHN5bWJvbCBpcyBhdmFpbGFibGUgaW4gdGhlIHVzZXIncworIy4gbG9jYWxlLiAgT3RoZXJ3aXNlLCBkbyBub3QgdHJhbnNsYXRlICIoQykiOyBsZWF2ZSBpdCBhcy1pcy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjY2Cittc2dpZCAiKEMpIgorbXNnc3RyICIiCisKKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjY4Cittc2dpZCAiIgorIlxuIgorIkxpY2Vuc2UgR1BMdjIrOiBHTlUgR1BMIHZlcnNpb24gMiBvciBsYXRlciA8aHR0cDovL2dudS5vcmcvbGljZW5zZXMvZ3BsLiIKKyJodG1sPlxuIgorIlRoaXMgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGFyZSBmcmVlIHRvIGNoYW5nZSBhbmQgcmVkaXN0cmlidXRlIGl0LlxuIgorIlRoZXJlIGlzIE5PIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXcuXG4iCisiXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6ICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJXcml0dGVuIGJ5ICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzo4OAorIywgYy1mb3JtYXQKK21zZ2lkICJXcml0dGVuIGJ5ICVzIGFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIzogbGliL3ZlcnNpb24tZXRjLmM6OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiV3JpdHRlbiBieSAlcywgJXMsIGFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorImFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzoxMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyIlcywgYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjLiBZb3UgY2FuIHVzZSBsaW5lIGJyZWFrcywgZXN0aW1hdGluZyB0aGF0IGVhY2ggYXV0aG9yIG5hbWUgb2NjdXBpZXMKKyMuIGNhLiAxNiBzY3JlZW4gY29sdW1ucyBhbmQgdGhhdCBhIHNjcmVlbiBsaW5lIGhhcyBjYS4gODAgY29sdW1ucy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorIiVzLCAlcywgYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjLiBZb3UgY2FuIHVzZSBsaW5lIGJyZWFrcywgZXN0aW1hdGluZyB0aGF0IGVhY2ggYXV0aG9yIG5hbWUgb2NjdXBpZXMKKyMuIGNhLiAxNiBzY3JlZW4gY29sdW1ucyBhbmQgdGhhdCBhIHNjcmVlbiBsaW5lIGhhcyBjYS4gODAgY29sdW1ucy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjExNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorIiVzLCAlcywgJXMsIGFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzoxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyIlcywgJXMsICVzLCAlcyxcbiIKKyJhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6MTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiJXMsICVzLCAlcywgJXMsXG4iCisiJXMsIGFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzoxNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyIlcywgJXMsICVzLCAlcyxcbiIKKyIlcywgJXMsIGFuZCBvdGhlcnMuXG4iCittc2dzdHIgIiIKKworIzogbGliL3hhbGxvYy1kaWUuYzozNQorbXNnaWQgIm1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjIzNworbXNnaWQgIkRpc2sgSW1hZ2UiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjMzOCBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzoyNjEKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTI3MgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBvcGVuaW5nICVzOiAlcyIKK21zZ3N0ciAiRXR0IGZlbCB1cHBzdG9kIG7kciAlcyD2cHBuYWRlczogJXMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzozNDkgbGlicGFydGVkL2FyY2gvZ251LmM6MjcxCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjEyODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIG9wZW4gJXMgcmVhZC13cml0ZSAoJXMpLiAgJXMgaGFzIGJlZW4gb3BlbmVkIHJlYWQtb25seS4iCittc2dzdHIgIiIKKyJLdW5kZSBpbnRlIPZwcG5hICVzIGb2ciBi5WRlIGzkc25pbmcgb2NoIHNrcml2bmluZyAoJXMpLiAlcyD2cHBuYWRlcyBpICIKKyJs5HNs5GdlLiIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjQxMSBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjE0MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZHVyaW5nIHNlZWsgZm9yIHJlYWQgb24gJXMiCittc2dzdHIgIiVzIHVuZGVyIHBvc2l0aW9uZXJpbmcgZvZyIGF0dCBs5HNhIHDlICVzIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6NDQ0IGxpYnBhcnRlZC9hcmNoL2dudS5jOjQ0OSBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo1NDgKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjY3NiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjEzOTEKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkdXJpbmcgcmVhZCBvbiAlcyIKK21zZ3N0ciAiJXMgdW5kZXIgbORzbmluZyBw5SAlcyIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjQ4MCBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo1MDkKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTU0NgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW4ndCB3cml0ZSB0byAlcywgYmVjYXVzZSBpdCBpcyBvcGVuZWQgcmVhZC1vbmx5LiIKK21zZ3N0ciAiS2FuIGludGUgc2tyaXZhIHRpbGwgJXMgZWZ0ZXJzb20gZGVuIGVuZGFzdCDkciD2cHBuYWQgaSBs5HNs5GdlLiIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjQ5NiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjE1NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZHVyaW5nIHNlZWsgZm9yIHdyaXRlIG9uICVzIgorbXNnc3RyICIlcyB1bmRlciBwb3NpdGlvbmVyaW5nIGb2ciBhdHQgc2tyaXZhIHDlICVzIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6NTMzIGxpYnBhcnRlZC9hcmNoL2dudS5jOjU4NSBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo2MzAKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjcwNyBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjE1MTcKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTYxMiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjE2ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZHVyaW5nIHdyaXRlIG9uICVzIgorbXNnc3RyICIlcyB1bmRlciBza3Jpdm5pbmcgcOUgJXMiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6NjMgcGFydHByb2JlL3BhcnRwcm9iZS5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICJUcnkgYCVzIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4iCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICVzIFtPUFRJT05dXG4iCisiICBvcjogICVzIERFVklDRSBNSU5PUlxuIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6NzAKK21zZ2lkICIiCisiQ2xlYXIgdW51c2VkIHNwYWNlIG9uIGEgRkFUIHBhcnRpdGlvbiAoYSBHTlUgUGFydGVkIHRlc3RpbmcgdG9vbCkuXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo3NAorbXNnaWQgIiAgICAgIC0taGVscCAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXRcbiIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjc1Cittc2dpZCAiICAgICAgLS12ZXJzaW9uICBvdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdFxuIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6NzcgcGFydHByb2JlL3BhcnRwcm9iZS5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiUmVwb3J0IGJ1Z3MgdG8gPCVzPi5cbiIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjI4NQorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gZmV3IGFyZ3VtZW50cyIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjI5MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIgorbXNnc3RyICJG9nIgbeVuZ2EgZOVsaWdhIHNpZG9yLiIKKworIzogcGFydHByb2JlL3BhcnRwcm9iZS5jOjE0MQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgW09QVElPTl0gW0RFVklDRV0uLi5cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0cHJvYmUvcGFydHByb2JlLmM6MTQyCittc2dpZCAiIgorIkluZm9ybSB0aGUgT1Mgb2YgcGFydGl0aW9uIHRhYmxlIGNoYW5nZXMuXG4iCisiXG4iCisiICAtZCwgLS1uby11cGRhdGUgIGRvbid0IHVwZGF0ZSB0aGUga2VybmVsXG4iCisiICAtcywgLS1zdW1tYXJ5ICAgIHByaW50IGEgc3VtbWFyeSBvZiBjb250ZW50c1xuIgorIiAgLWgsIC0taGVscCAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdFxuIgorIiAgLXYsIC0tdmVyc2lvbiAgICBvdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdFxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRwcm9iZS9wYXJ0cHJvYmUuYzoxNTAKK21zZ2lkICIiCisiXG4iCisiV2l0aCBubyBERVZJQ0UsIHByb2JlIGFsbCBwYXJ0aXRpb25zLlxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBvcGVuICVzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzoxMTQKKyMsIGZ1enp5Cittc2dpZCAiVW5hYmxlIHRvIHByb2JlIHN0b3JlLiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBwbGFjZXJhIHBhcnRpdGlvbmVuIHDlIGrkbW4gY3lsaW5kZXJncuRucy4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjM1MgorIywgZnV6enkKK21zZ2lkICIiCisiVGhlIHBhcnRpdGlvbiB0YWJsZSBjYW5ub3QgYmUgcmUtcmVhZC4gIFRoaXMgbWVhbnMgeW91IG5lZWQgdG8gcmVib290IGJlZm9yZSAiCisibW91bnRpbmcgYW55IG1vZGlmaWVkIHBhcnRpdGlvbnMuICBZb3UgYWxzbyBuZWVkIHRvIHJlaW5zdGFsbCB5b3VyIGJvb3QgIgorImxvYWRlciBiZWZvcmUgeW91IHJlYm9vdCAod2hpY2ggbWF5IHJlcXVpcmUgbW91bnRpbmcgbW9kaWZpZWQgcGFydGl0aW9ucykuICAiCisiSXQgaXMgaW1wb3NzaWJsZSBkbyBib3RoIHRoaW5ncyEgIFNvIHlvdSdsbCBuZWVkIHRvIGJvb3Qgb2ZmIGEgcmVzY3VlIGRpc2ssICIKKyJhbmQgcmVpbnN0YWxsIHlvdXIgYm9vdCBsb2FkZXIgZnJvbSB0aGUgcmVzY3VlIGRpc2suICBSZWFkIHNlY3Rpb24gNCBvZiB0aGUgIgorIlBhcnRlZCBVc2VyIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorbXNnc3RyICIiCisiS+RybmFuIGt1bmRlIGludGUgbORzYSBvbSBwYXJ0aXRpb25zdGFiZWxsZW4sIHPlIGR1IG3lc3RlIHN0YXJ0YSBvbSBkYXRvcm4gIgorImlubmFuIGR1IGthbiBtb250ZXJhIG7lZ29uIORuZHJhZCBwYXJ0aXRpb24uIER1IG3lc3RlIG9ja3PlIGluc3RhbGxlcmEgb20gIgorInN0YXJ0cHJvZ3JhbW1ldCBpbm5hbiBkdSBzdGFydGFyIG9tICh2aWxrZXQga2FuIGlubmVi5HJhIG1vbnRlcmluZyBhdiAiCisi5G5kcmFkZSBwYXJ0aXRpb25lcikuIERldCDkciBvbfZqbGlndCBhdHQgZ/ZyYSBi5WRhISBEdSBt5XN0ZSBzdGFydGEgZnLlbiBlbiAiCisicuRkZG5pbmdzc2tpdmEgb2NoIGluc3RhbGxlcmEgb20gc3RhcnRwcm9ncmFtbWV0IGZy5W4gZGVuLiBM5HMga2FwaXRlbCBmeXJhICIKKyJpIFBhcnRlZHMgYW525G5kYXJtYW51YWwgZvZyIG1lciBpbmZvcm1hdGlvbi4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjM2OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBwYXJ0aXRpb24gdGFibGUgb24gJXMgY2Fubm90IGJlIHJlLXJlYWQgKCVzKS4gIFRoaXMgbWVhbnMgdGhlIEh1cmQga25vd3MgIgorIm5vdGhpbmcgYWJvdXQgYW55IG1vZGlmaWNhdGlvbnMgeW91IG1hZGUuICBZb3Ugc2hvdWxkIHJlYm9vdCB5b3VyIGNvbXB1dGVyICIKKyJiZWZvcmUgZG9pbmcgYW55dGhpbmcgd2l0aCAlcy4iCittc2dzdHIgIiIKKyJL5HJuYW4ga3VuZGUgaW50ZSBs5HNhIG9tIHBhcnRpdGlvbnN0YWJlbGxlbiBw5SAlcyAoJXMpLiBEZXQgYmV0eWRlciBhdHQgIgorIkxpbnV4IGludGUgdmV0IG7lbnRpbmcgb20gZGUg5G5kcmluZ2FyIGR1IGdqb3J0LiBEdSBi9nIgc3RhcnRhIG9tIGRhdG9ybiAiCisiaW5uYW4gZHUgZ/ZyIG7lbnRpbmcgbWVkICVzLiIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6MzgwIHBhcnRlZC9wYXJ0ZWQuYzoyNDQzCittc2dpZCAiIgorIllvdSBzaG91bGQgcmVpbnN0YWxsIHlvdXIgYm9vdCBsb2FkZXIgYmVmb3JlIHJlYm9vdGluZy4gIFJlYWQgc2VjdGlvbiA0IG9mICIKKyJ0aGUgUGFydGVkIFVzZXIgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCittc2dzdHIgIiIKKyJEdSBi9nIgaW5zdGFsbGVyYSBvbSBzdGFydHByb2dyYW1tZXQgaW5uYW4gZHUgc3RhcnRhciBvbS4gTORzIHNla3Rpb24gZnlyYSBpICIKKyJQYXJ0ZWRzIGFuduRuZGFybWFudWFsIGb2ciBtZXIgaW5mb3JtYXRpb24uIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo3NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdHJ5aW5nIHRvIHN5bmMgJXMgdG8gZGlzayIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjQwOAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc3RhdCBkZXZpY2UgJXMgLSAlcy4iCittc2dzdHIgIkt1bmRlIGludGUgdGEgc3RhdHVzIHDlIGVuaGV0ZW4gJXMgLSAlcy4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6NTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgZGV0ZXJtaW5lIHNlY3RvciBzaXplIGZvciAlczogJXMuXG4iCisiVXNpbmcgdGhlIGRlZmF1bHQgc2VjdG9yIHNpemUgKCVsbGQpLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjUzOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRGV2aWNlICVzIGhhcyBhIGxvZ2ljYWwgc2VjdG9yIHNpemUgb2YgJWxsZC4gIE5vdCBhbGwgcGFydHMgb2YgR05VIFBhcnRlZCAiCisic3VwcG9ydCB0aGlzIGF0IHRoZSBtb21lbnQsIGFuZCB0aGUgd29ya2luZyBjb2RlIGlzIEhJR0hMWSBFWFBFUklNRU5UQUwuXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo1NzkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBkZXRlcm1pbmUgdGhlIHNpemUgb2YgJXMgKCVzKS4iCittc2dzdHIgIkt1bmRlIGludGUgYXZn9nJhIHN0b3JsZWtlbiBw5SAlcyAoJXMpIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjY2OAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZ2V0IGlkZW50aXR5IG9mIGRldmljZSAlcyAtICVzIgorbXNnc3RyICJLdW5kZSBpbnRlIGhpdHRhIGlkZW50aXRldCBm9nIgZW5oZXQgJXMgLSAlcyIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo2NzcKK21zZ2lkICJHZW5lcmljIElERSIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRGV2aWNlICVzIGhhcyBtdWx0aXBsZSAoJWQpIGxvZ2ljYWwgc2VjdG9ycyBwZXIgcGh5c2ljYWwgc2VjdG9yLlxuIgorIkdOVSBQYXJ0ZWQgc3VwcG9ydHMgdGhpcyBFWFBFUklNRU5UQUxMWSBmb3Igc29tZSBzcGVjaWFsIGRpc2sgbGFiZWwvZmlsZSAiCisic3lzdGVtIGNvbWJpbmF0aW9ucywgZS5nLiBHUFQgYW5kIGV4dDIvMy5cbiIKKyJQbGVhc2UgY29uc3VsdCB0aGUgd2ViIHNpdGUgZm9yIHVwLXRvLWRhdGUgaW5mb3JtYXRpb24uIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6ODczCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGluaXRpYWxpc2luZyBTQ1NJIGRldmljZSAlcyAtICVzIgorbXNnc3RyICJFdHQgZmVsIHVwcHN0b2QgdmlkIGluaXRpZXJpbmcgYXYgU0NTSS1lbmhldGVuICVzIC0gJXMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6OTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZGV2aWNlICVzIGhhcyB6ZXJvIGxlbmd0aCwgYW5kIGNhbid0IHBvc3NpYmx5IHN0b3JlIGEgZmlsZSBzeXN0ZW0gb3IgIgorInBhcnRpdGlvbiB0YWJsZS4gIFBlcmhhcHMgeW91IHNlbGVjdGVkIHRoZSB3cm9uZyBkZXZpY2U/IgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTAzMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlVuYWJsZSB0byBkZXRlcm1pbmUgZ2VvbWV0cnkgb2YgZmlsZS9kZXZpY2UgJXMuICBZb3Ugc2hvdWxkIG5vdCB1c2UgUGFydGVkICIKKyJ1bmxlc3MgeW91IFJFQUxMWSBrbm93IHdoYXQgeW91J3JlIGRvaW5nISIKK21zZ3N0ciAiIgorIkt1bmRlIGludGUgYXZn9nJhIGdlb21ldHJpbiBw5SBmaWxlbi9lbmhldGVuLiBEdSBi9nIgaW50ZSBhbnbkbmRhIFBhcnRlZCBvbSAiCisiZHUgaW50ZSDkciBSSUtUSUdUIHPka2VyIHDlIHZhZCBkdSBn9nIhIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExMTAKK21zZ2lkICJEQUM5NjAgUkFJRCBjb250cm9sbGVyIgorbXNnc3RyICJTdHlya29ydCBm9nIgREFDOTYwIFJBSUQiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTExNQorbXNnaWQgIlByb21pc2UgU1g4IFNBVEEgRGV2aWNlIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTEyMAorbXNnaWQgIklCTSBTMzkwIERBU0QgZHJpdmUiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTI1Cittc2dpZCAiSUJNIGlTZXJpZXMgVmlydHVhbCBEQVNEIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTEzMAorbXNnaWQgIkNvbXBhcSBTbWFydCBBcnJheSIKK21zZ3N0ciAiQ29tcGFxIFNtYXJ0IEFycmF5IgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExMzUKK21zZ2lkICJBVEFSQUlEIENvbnRyb2xsZXIiCittc2dzdHIgIlN0eXJrb3J0IGb2ciBBVEFSQUlEIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExNDAKKyMsIGZ1enp5Cittc2dpZCAiSTJPIENvbnRyb2xsZXIiCittc2dzdHIgIlN0eXJrb3J0IGb2ciBBVEFSQUlEIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExNDUKK21zZ2lkICJVc2VyLU1vZGUgTGludXggVUJEIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTE1NgorbXNnaWQgIkxpbnV4IGRldmljZS1tYXBwZXIiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTYyCittc2dpZCAiVW5rbm93biIKK21zZ3N0ciAiT2vkbmQiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTE2OQorbXNnaWQgInBlZF9kZXZpY2VfbmV3KCkgIFVuc3VwcG9ydGVkIGRldmljZSB0eXBlIgorbXNnc3RyICJwZWRfZGV2aWNlX25ldygpIFN09mQgc2FrbmFzIGb2ciBkZW4gaORyIGVuaGV0c3R5cGVuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjIwODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkVycm9yIGluZm9ybWluZyB0aGUga2VybmVsIGFib3V0IG1vZGlmaWNhdGlvbnMgdG8gcGFydGl0aW9uICVzIC0tICVzLiAgVGhpcyAiCisibWVhbnMgTGludXggd29uJ3Qga25vdyBhYm91dCBhbnkgY2hhbmdlcyB5b3UgbWFkZSB0byAlcyB1bnRpbCB5b3UgcmVib290IC0tICIKKyJzbyB5b3Ugc2hvdWxkbid0IG1vdW50IGl0IG9yIHVzZSBpdCBpbiBhbnkgd2F5IGJlZm9yZSByZWJvb3RpbmcuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MjI2MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorInBhcnRlZCB3YXMgdW5hYmxlIHRvIHJlLXJlYWQgdGhlIHBhcnRpdGlvbiB0YWJsZSBvbiAlcyAoJXMpLiAgVGhpcyBtZWFucyAiCisiTGludXggd29uJ3Qga25vdyBhbnl0aGluZyBhYm91dCB0aGUgbW9kaWZpY2F0aW9ucyB5b3UgbWFkZS4gIgorbXNnc3RyICIiCisiS+RybmFuIGt1bmRlIGludGUgbORzYSBvbSBwYXJ0aXRpb25zdGFiZWxsZW4gcOUgJXMgKCVzKS4gRGV0IGJldHlkZXIgYXR0ICIKKyJMaW51eCBpbnRlIHZldCBu5W50aW5nIG9tIGRlIORuZHJpbmdhciBkdSBnam9ydC4gRHUgYvZyIHN0YXJ0YSBvbSBkYXRvcm4gIgorImlubmFuIGR1IGf2ciBu5W50aW5nIG1lZCAlcy4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MjM2OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBrZXJuZWwgd2FzIHVuYWJsZSB0byByZS1yZWFkIHRoZSBwYXJ0aXRpb24gdGFibGUgb24gJXMgKCVzKS4gIFRoaXMgbWVhbnMgIgorIkxpbnV4IHdvbid0IGtub3cgYW55dGhpbmcgYWJvdXQgdGhlIG1vZGlmaWNhdGlvbnMgeW91IG1hZGUgdW50aWwgeW91ICIKKyJyZWJvb3QuICBZb3Ugc2hvdWxkIHJlYm9vdCB5b3VyIGNvbXB1dGVyIGJlZm9yZSBkb2luZyBhbnl0aGluZyB3aXRoICVzLiIKK21zZ3N0ciAiIgorIkvkcm5hbiBrdW5kZSBpbnRlIGzkc2Egb20gcGFydGl0aW9uc3RhYmVsbGVuIHDlICVzICglcykuIERldCBiZXR5ZGVyIGF0dCAiCisiTGludXggaW50ZSB2ZXQgbuVudGluZyBvbSBkZSDkbmRyaW5nYXIgZHUgZ2pvcnQuIER1IGL2ciBzdGFydGEgb20gZGF0b3JuICIKKyJpbm5hbiBkdSBn9nIgbuVudGluZyBtZWQgJXMuIgorCisjOiBsaWJwYXJ0ZWQvY3MvZ2VvbS5jOjE2MgorbXNnaWQgIkNhbid0IGhhdmUgdGhlIGVuZCBiZWZvcmUgdGhlIHN0YXJ0ISIKK21zZ3N0ciAiS2FuIGludGUgaGEgc2x1dGV0IGb2cmUgYvZyamFuISIKKworIzogbGlicGFydGVkL2NzL2dlb20uYzoxNjkKK21zZ2lkICJDYW4ndCBoYXZlIGEgcGFydGl0aW9uIG91dHNpZGUgdGhlIGRpc2shIgorbXNnc3RyICJLYW4gaW50ZSBoYSBlbiBwYXJ0aXRpb24gdXRhbmb2ciBo5XJkZGlza2VuISIKKworIzogbGlicGFydGVkL2NzL2dlb20uYzozNjYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkF0dGVtcHQgdG8gd3JpdGUgc2VjdG9ycyAlbGQtJWxkIG91dHNpZGUgb2YgcGFydGl0aW9uIG9uICVzLiIKK21zZ3N0ciAiRvZyc/ZrdGUgc2tyaXZhIHNla3RvcmVybmEgJWxkLSVsZCB1dGFuZvZyIHBhcnRpdGlvbmVuIHDlICVzIgorCisjOiBsaWJwYXJ0ZWQvY3MvZ2VvbS5jOjQwNiBsaWJwYXJ0ZWQvZnMvbGludXhfc3dhcC9saW51eF9zd2FwLmM6NDc1Cittc2dpZCAiY2hlY2tpbmcgZm9yIGJhZCBibG9ja3MiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2RlYnVnLmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkJhY2t0cmFjZSBoYXMgJWQgY2FsbHMgb24gc3RhY2s6XG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2RlYnVnLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkFzc2VydGlvbiAoJXMpIGF0ICVzOiVkIGluIGZ1bmN0aW9uICVzKCkgZmFpbGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIwMworIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gb3BlbiAlcyAtIHVucmVjb2duaXNlZCBkaXNrIGxhYmVsLiIKK21zZ3N0ciAiS2FuIGludGUg9nBwbmEgJXMgLSBva+RuZCBmaWxhbGxva2VyaW5nc3RhYmVsbC4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6NDcxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhpcyBsaWJwYXJ0ZWQgZG9lc24ndCBoYXZlIHdyaXRlIHN1cHBvcnQgZm9yICVzLiAgUGVyaGFwcyBpdCB3YXMgY29tcGlsZWQgIgorInJlYWQtb25seS4iCittc2dzdHIgIkthbiBpbnRlIHNrcml2YSB0aWxsICVzIGVmdGVyc29tIGRlbiBlbmRhc3Qg5HIg9nBwbmFkIGkgbORzbORnZS4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6NTk4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJQYXJ0aXRpb24gJWQgaXMgJXMsIGJ1dCB0aGUgZmlsZSBzeXN0ZW0gaXMgJXMuIgorbXNnc3RyICJQYXJ0aXRpb25lbiBm9nIgbGl0ZW4gZvZyIGF0dCBo5WxsYSBldHQgZmlsc3lzdGVtIGF2IHR5cGVuIEZBVCIKKworIzogbGlicGFydGVkL2Rpc2suYzoxMDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGRpc2sgbGFiZWxzIGRvIG5vdCBzdXBwb3J0IGV4dGVuZGVkIHBhcnRpdGlvbnMuIgorbXNnc3RyICJGaWxhbGxva2VyaW5nc3RhYmVsbGVyIGb2ciAlcyBzdPZkamVyIGludGUgdXT2a2FkZSBwYXJ0aXRpb25lci4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTYzNAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkaXNrIGxhYmVscyBkb24ndCBzdXBwb3J0IGxvZ2ljYWwgb3IgZXh0ZW5kZWQgcGFydGl0aW9ucy4iCittc2dzdHIgIiIKKyJGaWxhbGxva2VyaW5nc3RhbGJlbGxlciBm9nIgJXMgc3T2ZGplciBpbnRlIGxvZ2lza2EgZWxsZXIgdXT2a2FkZSAiCisicGFydGl0aW9uZXIuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE2NDcKKyMsIGZ1enp5Cittc2dpZCAiVG9vIG1hbnkgcHJpbWFyeSBwYXJ0aXRpb25zLiIKK21zZ3N0ciAiRvZyIG3lbmdhIGTlbGlnYSBzaWRvci4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTY1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2FuJ3QgYWRkIGEgbG9naWNhbCBwYXJ0aXRpb24gdG8gJXMsIGJlY2F1c2UgdGhlcmUgaXMgbm8gZXh0ZW5kZWQgcGFydGl0aW9uLiIKK21zZ3N0ciAiIgorIkthbiBpbnRlIGzkZ2dhIHRpbGwgZW4gbG9naXNrIHBhcnRpdGlvbiB0aWxsICVzLCBlZnRlcnNvbSBkZXQgc2FrbmFzIGVuICIKKyJ1dPZrYWQgcGFydGl0aW9uLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNjgwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJDYW4ndCBoYXZlIG1vcmUgdGhhbiBvbmUgZXh0ZW5kZWQgcGFydGl0aW9uIG9uICVzLiIKK21zZ3N0ciAiS2FuIGludGUgaGEgZmxlciDkbiBlbiB1dPZrYWQgcGFydGl0aW9uIHDlICVzIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE2OTAKKyMsIGZ1enp5Cittc2dpZCAiQ2FuJ3QgaGF2ZSBsb2dpY2FsIHBhcnRpdGlvbnMgb3V0c2lkZSBvZiB0aGUgZXh0ZW5kZWQgcGFydGl0aW9uLiIKK21zZ3N0ciAiIgorIkthbiBpbnRlIGzldGEgZW4gbG9naXNrIHBhcnRpdGlvbiB25HhhIHV0IHV0YW5m9nIgZGVuIHV09mthZGUgcGFydGl0aW9uZW4uIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE3MTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkNhbid0IGhhdmUgYSBsb2dpY2FsIHBhcnRpdGlvbiBvdXRzaWRlIG9mIHRoZSBleHRlbmRlZCBwYXJ0aXRpb24gb24gJXMuIgorbXNnc3RyICIiCisiS2FuIGludGUgbORnZ2EgdGlsbCBlbiBsb2dpc2sgcGFydGl0aW9uIHV0YW5m9nIgZW4gdXT2a2FkIHBhcnRpdGlvbiBw5SAlcy4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTcyNSBsaWJwYXJ0ZWQvZGlzay5jOjE3NzkgbGlicGFydGVkL2Rpc2suYzoxOTQ1CisjLCBmdXp6eQorbXNnaWQgIkNhbid0IGhhdmUgb3ZlcmxhcHBpbmcgcGFydGl0aW9ucy4iCittc2dzdHIgIkthbiBpbnRlIGtvcGllcmEgdGlsbCBlbiD2dmVybGFwcGFuZGUgcGFydGl0aW9uLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNzMzCisjLCBmdXp6eQorbXNnaWQgIkNhbid0IGhhdmUgYSBwcmltYXJ5IHBhcnRpdGlvbiBpbnNpZGUgYW4gZXh0ZW5kZWQgcGFydGl0aW9uLiIKK21zZ3N0ciAiS2FuIGludGUgbORnZ2EgdGlsbCBlbiBwcmlt5HIgcGFydGl0aW9uIGludXRpIGVuIHV09mthZC4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE0MAorbXNnaWQgIm1ldGFkYXRhIgorbXNnc3RyICJtZXRhZGF0YSIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTQyCittc2dpZCAiZnJlZSIKK21zZ3N0ciAibGVkaWd0IgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNDQgcGFydGVkL3VpLmM6MTE2OSBwYXJ0ZWQvdWkuYzoxMTk3Cittc2dpZCAiZXh0ZW5kZWQiCittc2dzdHIgInV09mthdCIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTQ2IHBhcnRlZC91aS5jOjExNzMgcGFydGVkL3VpLmM6MTIwMQorbXNnaWQgImxvZ2ljYWwiCittc2dzdHIgImxvZ2lza3QiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE0OCBwYXJ0ZWQvdWkuYzoxMTY1IHBhcnRlZC91aS5jOjExOTMKK21zZ2lkICJwcmltYXJ5IgorbXNnc3RyICJwcmlt5HIiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE2NAorbXNnaWQgImJvb3QiCittc2dzdHIgInN0YXJ0IgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNjYKK21zZ2lkICJyb290IgorbXNnc3RyICJyb3QiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE2OAorbXNnaWQgInN3YXAiCittc2dzdHIgInbkeGxpbmdzdXRyeW1tZSIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTcwCittc2dpZCAiaGlkZGVuIgorbXNnc3RyICJkb2xkIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNzIKK21zZ2lkICJyYWlkIgorbXNnc3RyICJyYWlkIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNzQKK21zZ2lkICJsdm0iCittc2dzdHIgImx2bSIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTc2Cittc2dpZCAibGJhIgorbXNnc3RyICJsYmEiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE3OAorbXNnaWQgImhwLXNlcnZpY2UiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTgwCittc2dpZCAicGFsbyIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxODIKK21zZ2lkICJwcmVwIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE4NAorbXNnaWQgIm1zZnRyZXMiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTkwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIHBhcnRpdGlvbiBmbGFnLCAlZC4iCittc2dzdHIgIk9r5G5kIHBhcnRpdGlvbnNmbGFnZ2EsICVkLiIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjc4Cittc2dpZCAiSW5mb3JtYXRpb24iCittc2dzdHIgIkluZm9ybWF0aW9uIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6NzkKK21zZ2lkICJXYXJuaW5nIgorbXNnc3RyICJWYXJuaW5nIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODAKK21zZ2lkICJFcnJvciIKK21zZ3N0ciAiRmVsIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODEKK21zZ2lkICJGYXRhbCIKK21zZ3N0ciAi1mRlc2RpZ2VyIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODIKK21zZ2lkICJCdWciCittc2dzdHIgIlByb2dyYW1mZWwiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4MworbXNnaWQgIk5vIEltcGxlbWVudGF0aW9uIgorbXNnc3RyICJJbnRlIGltcGxlbWVudGVyYXQiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4NworbXNnaWQgIkZpeCIKK21zZ3N0ciAiUmVwYXJlcmEiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4OAorbXNnaWQgIlllcyIKK21zZ3N0ciAiSmEiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4OQorbXNnaWQgIk5vIgorbXNnc3RyICJOZWoiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo5MAorbXNnaWQgIk9LIgorbXNnc3RyICJPSyIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjkxCittc2dpZCAiUmV0cnkiCittc2dzdHIgIkb2cnP2ayBpZ2VuIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6OTIKK21zZ2lkICJJZ25vcmUiCittc2dzdHIgIklnbm9yZXJhIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6OTMKK21zZ2lkICJDYW5jZWwiCittc2dzdHIgIkF2YnJ5dCIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjEzMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIkEgYnVnIGhhcyBiZWVuIGRldGVjdGVkIGluIEdOVSBQYXJ0ZWQuICBSZWZlciB0byB0aGUgd2ViIHNpdGUgb2YgcGFydGVkICIKKyJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvcGFydGVkL3BhcnRlZC5odG1sIGZvciBtb3JlIGluZm9ybWF0aW9ucyBvZiB3aGF0ICIKKyJjb3VsZCBiZSB1c2VmdWwgZm9yIGJ1ZyBzdWJtaXR0aW5nISAgUGxlYXNlIGVtYWlsIGEgYnVnIHJlcG9ydCB0byBidWctIgorInBhcnRlZEBnbnUub3JnIGNvbnRhaW5pbmcgYXQgbGVhc3QgdGhlIHZlcnNpb24gKCVzKSBhbmQgdGhlIGZvbGxvd2luZyAiCisibWVzc2FnZTogICIKK21zZ3N0ciAiIgorIlNraWNrYSBlbiBmZWxyYXBwb3J0IG1lZCBlLXBvc3QgdGlsbCBidWctcGFydGVkQGdudS5vcmcsIGTkciBkdSB0YXIgbWVkICIKKyJ2ZXJzaW9uc251bXJldCAoJXMpIG9jaCBm9mxqYW5kZSBtZWRkZWxhbmRlOiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzozODQKK21zZ2lkICJDb3VsZCBub3QgZGV0ZWN0IGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBoaXR0YSBu5WdvdCBmaWxzeXN0ZW0uIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjM5NQorbXNnaWQgIlRoZSBmaWxlIHN5c3RlbSBpcyBiaWdnZXIgdGhhbiBpdHMgdm9sdW1lISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjQwMworIywgYy1mb3JtYXQKK21zZ2lkICJTdXBwb3J0IGZvciBvcGVuaW5nICVzIGZpbGUgc3lzdGVtcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiU3T2ZCBm9nIgYXR0IPZwcG5hIGZpbHN5c3RlbSBhdiB0eXAgJXMg5HIgaW50ZSBpbXBsZW1lbnRlcmF0IORuLiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo0NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VwcG9ydCBmb3IgY3JlYXRpbmcgJXMgZmlsZSBzeXN0ZW1zIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICJTdPZkIGb2ciBhdHQgc2thcGEgZmlsc3lzdGVtIGF2IHR5cCAlcyDkciBpbnRlIGltcGxlbWVudGVyYXQg5G4uIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjUwNQorIywgYy1mb3JtYXQKK21zZ2lkICJTdXBwb3J0IGZvciBjaGVja2luZyAlcyBmaWxlIHN5c3RlbXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIlN09mQgZvZyIGF0dCBrb250cm9sbGVyYSBmaWxzeXN0ZW0gYXYgdHlwICVzIORyIGludGUgaW1wbGVtZW50ZXJhdCDkbi4iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NTcxCittc2dpZCAicmF3IGJsb2NrIGNvcHlpbmciCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo1ODIKKyMsIGZ1enp5Cittc2dpZCAiZ3Jvd2luZyBmaWxlIHN5c3RlbSIKK21zZ3N0ciAiT2vkbmQgZmlsc3lzdGVtc3R5cC4iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NjIyCittc2dpZCAiQ2FuJ3QgY29weSBvbnRvIGFuIG92ZXJsYXBwaW5nIHBhcnRpdGlvbi4iCittc2dzdHIgIkthbiBpbnRlIGtvcGllcmEgdGlsbCBlbiD2dmVybGFwcGFuZGUgcGFydGl0aW9uLiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo2NDQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJEaXJlY3Qgc3VwcG9ydCBmb3IgY29weWluZyBmaWxlIHN5c3RlbXMgaXMgbm90IHlldCBpbXBsZW1lbnRlZCBmb3IgJXMuICAiCisiSG93ZXZlciwgc3VwcG9ydCBmb3IgcmVzaXppbmcgaXMgaW1wbGVtZW50ZWQuICBUaGVyZWZvcmUsIHRoZSBmaWxlIHN5c3RlbSAiCisiY2FuIGJlIGNvcGllZCBpZiB0aGUgbmV3IHBhcnRpdGlvbiBpcyBhdCBsZWFzdCBhcyBiaWcgYXMgdGhlIG9sZCBvbmUuICBTbywgIgorImVpdGhlciBzaHJpbmsgdGhlIHBhcnRpdGlvbiB5b3UgYXJlIHRyeWluZyB0byBjb3B5LCBvciBjb3B5IHRvIGEgYmlnZ2VyICIKKyJwYXJ0aXRpb24uIgorbXNnc3RyICIiCisiRGlyZWt0IHN09mQgZvZyIGF0dCBrb3BpZXJhIGZpbHN5c3RlbSBhdiB0eXBlbiAlcyDkciBpbnRlIGltcGxlbWVudGVyYXQg5G4uICIKKyJTdPZkIGb2ciBhdHQg5G5kcmEgc3RvcmxlayBmaW5ucyBkb2NrLiBE5HJm9nIga2FuIGZpbHN5c3RlbWV0IGtvcGllcmFzIG9tICIKKyJkZW4gbnlhIHBhcnRpdGlvbmVuIORyIG1pbnN0IGxpa2Egc3RvciBzb20gZGVuIGdhbWxhLiBT5SBhbnRpbmdlbiBm5XIgZHUgIgorIm1pbnNrYSBwYXJ0aXRpb25lbiBzb20gZHUgZvZyc/ZrZXIga29waWVyYSwgZWxsZXIgc+Uga29waWVyYXIgZHUgdGlsbCBlbiAiCisic3T2cnJlIHBhcnRpdGlvbi4iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnQgZm9yIGNvcHlpbmcgJXMgZmlsZSBzeXN0ZW1zIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICJTdPZkIGb2ciBhdHQga29waWVyYSBmaWxzeXN0ZW0gYXYgdHlwICVzIORyIGludGUgaW1wbGVtZW50ZXJhdCDkbi4iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6Njk2CisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnQgZm9yIHJlc2l6aW5nICVzIGZpbGUgc3lzdGVtcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiIgorIlN09mQgZvZyIGF0dCDkbmRyYSBzdG9ybGVrIHDlIGZpbHN5c3RlbSBhdiB0eXAgJXMg5HIgaW50ZSBpbXBsZW1lbnRlcmF0IORuLiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6MzE1Cittc2dpZCAiY3JlYXRpbmciCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDAyCisjLCBmdXp6eQorbXNnaWQgIlRoZSBmaWxlIHN5c3RlbSBpcyBpbiBhbiBpbnZhbGlkIHN0YXRlLiAgUGVyaGFwcyBpdCBpcyBtb3VudGVkPyIKK21zZ3N0ciAiRmlsc3lzdGVtZXQgaGFyIGVuIG9naWx0aWcgc2lnbmF0dXIgZvZyIGZpbHN5c3RlbSBhdiB0eXBlbiBGQVQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0MTAKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gaXMgaW4gb2xkICh1bnJlc2l6ZWFibGUpIGZvcm1hdC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDE2Cittc2dpZCAiSW52YWxpZCBmcmVlIGJsb2NrcyBjb3VudC4gIFJ1biByZWlzZXJmc2NrIC0tY2hlY2sgZmlyc3QuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQzMQorIywgZnV6enkKK21zZ2lkICJjaGVja2luZyIKK21zZ3N0ciAidGVzdGEiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQzNworbXNnaWQgIlJlaXNlcmZzIHRyZWUgc2VlbXMgdG8gYmUgY29ycnVwdGVkLiAgUnVuIHJlaXNlcmZzY2sgLS1jaGVjayBmaXJzdC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDQ5CisjLCBmdXp6eQorbXNnaWQgIiIKKyJUaGUgcmVpc2VyZnMgZmlsZSBzeXN0ZW0gcGFzc2VkIGEgYmFzaWMgY2hlY2suICBGb3IgYSBtb3JlIGNvbXByZWhlbnNpdmUgIgorImNoZWNrLCBydW4gcmVpc2VyZnNjayAtLWNoZWNrLiIKK21zZ3N0ciAiIgorIkZpbHN5c3RlbWV0IChlMmZzKSBrbGFyYWRlIGV0dCBncnVuZGzkZ2dhbmRlIHRlc3QuIEb2ciBldHQgbWVyIGdlbm9tZ+VlbmRlICIKKyJ0ZXN0LCBhbnbkbmQgcHJvZ3JhbW1ldCBlMmZzY2suIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0NzQKKyMsIGZ1enp5Cittc2dpZCAiU29ycnksIGNhbid0IG1vdmUgdGhlIHN0YXJ0IG9mIHJlaXNlcmZzIHBhcnRpdGlvbnMgeWV0LiIKK21zZ3N0ciAiS2FuIGludGUgZmx5dHRhIGVuIGV4dDItcGFydGl0aW9ucyBi9nJqYW4g5G5udSEiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQ5MAorbXNnaWQgIkNvdWxkbid0IHJlb3BlbiBkZXZpY2UgYWJzdHJhY3Rpb24gbGF5ZXIgZm9yIHJlYWQvd3JpdGUuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjUwOCBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjU1MgorIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzoyNTAgbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo2MjkKKyMsIGZ1enp5Cittc2dpZCAic2hyaW5raW5nIgorbXNnc3RyICJWYXJuaW5nIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo1MjAKKyMsIGZ1enp5Cittc2dpZCAiZXhwYW5kaW5nIgorbXNnc3RyICJWYXJuaW5nIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo1OTIKK21zZ2lkICJDb3VsZG4ndCBjcmVhdGUgcmVpc2VyZnMgZGV2aWNlIGFic3RyYWN0aW9uIGhhbmRsZXIuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjYwNgorIywgYy1mb3JtYXQKK21zZ2lkICJEZXZpY2UgaXMgdG9vIHNtYWxsIGZvciAlbHUgYmxvY2tzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo2MTUKK21zZ2lkICJjb3B5aW5nIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjY4MgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCByZXNvbHZlIHN5bWJvbCAlcy4gIEVycm9yOiAlcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NzA0Cittc2dpZCAiR05VIFBhcnRlZCBmb3VuZCBhbiBpbnZhbGlkIGxpYnJlaXNlcmZzIGxpYnJhcnkuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjcxNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiR05VIFBhcnRlZCBoYXMgZGV0ZWN0ZWQgbGlicmVpc2VyZnMgaW50ZXJmYWNlIHZlcnNpb24gbWlzbWF0Y2guICBGb3VuZCAlZC0lIgorImQsIHJlcXVpcmVkICVkLiBSZWlzZXJGUyBzdXBwb3J0IHdpbGwgYmUgZGlzYWJsZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYWl4LmM6MTM3CisjLCBmdXp6eQorbXNnaWQgIlN1cHBvcnQgZm9yIHJlYWRpbmcgQUlYIGRpc2sgbGFiZWxzIGlzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICJTdPZkIGb2ciBhdHQgc2thcGEgZmlsc3lzdGVtIGF2IHR5cCAlcyDkciBpbnRlIGltcGxlbWVudGVyYXQg5G4uIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2FpeC5jOjE0OAorIywgZnV6enkKK21zZ2lkICJTdXBwb3J0IGZvciB3cml0aW5nIEFJWCBkaXNrIGxhYmVscyBpcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiU3T2ZCBm9nIgYXR0IHNrYXBhIGZpbHN5c3RlbSBhdiB0eXAgJXMg5HIgaW50ZSBpbXBsZW1lbnRlcmF0IORuLiIKKworIzogbGlicGFydGVkL2xhYmVscy9haXguYzoxNjEKKyMsIGZ1enp5Cittc2dpZCAiIgorIlN1cHBvcnQgZm9yIGFkZGluZyBwYXJ0aXRpb25zIHRvIEFJWCBkaXNrIGxhYmVscyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiU3T2ZCBm9nIgYXR0IHNrYXBhIGZpbHN5c3RlbSBhdiB0eXAgJXMg5HIgaW50ZSBpbXBsZW1lbnRlcmF0IORuLiIKKworIzogbGlicGFydGVkL2xhYmVscy9haXguYzoxNzEKKyMsIGZ1enp5Cittc2dpZCAiIgorIlN1cHBvcnQgZm9yIGR1cGxpY2F0aW5nIHBhcnRpdGlvbnMgaW4gQUlYIGRpc2sgbGFiZWxzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICJTdPZkIGb2ciBhdHQgc2thcGEgZmlsc3lzdGVtIGF2IHR5cCAlcyDkciBpbnRlIGltcGxlbWVudGVyYXQg5G4uIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2FpeC5jOjE4OQorIywgZnV6enkKK21zZ2lkICIiCisiU3VwcG9ydCBmb3Igc2V0dGluZyBzeXN0ZW0gdHlwZSBvZiBwYXJ0aXRpb25zIGluIEFJWCBkaXNrIGxhYmVscyBpcyBub3QgIgorImltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIlN09mQgZvZyIGF0dCBza2FwYSBmaWxzeXN0ZW0gYXYgdHlwICVzIORyIGludGUgaW1wbGVtZW50ZXJhdCDkbi4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYWl4LmM6MTk5CisjLCBmdXp6eQorbXNnaWQgIlN1cHBvcnQgZm9yIHNldHRpbmcgZmxhZ3MgaW4gQUlYIGRpc2sgbGFiZWxzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICJTdPZkIGb2ciBhdHQgc2thcGEgZmlsc3lzdGVtIGF2IHR5cCAlcyDkciBpbnRlIGltcGxlbWVudGVyYXQg5G4uIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2JzZC5jOjUwMSBsaWJwYXJ0ZWQvbGFiZWxzL2Rhc2QuYzo3NTUKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZG9zLmM6MTk3NCBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjc3MAorIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzoxNDQ4IGxpYnBhcnRlZC9sYWJlbHMvbG9vcC5jOjI0OAorIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoxNDA4IGxpYnBhcnRlZC9sYWJlbHMvcGM5OC5jOjc1OQorIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzoxMDQxIGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6NzA1CisjLCBmdXp6eQorbXNnaWQgIlVuYWJsZSB0byBzYXRpc2Z5IGFsbCBjb25zdHJhaW50cyBvbiB0aGUgcGFydGl0aW9uLiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBwbGFjZXJhIHBhcnRpdGlvbmVuIHDlIGrkbW4gY3lsaW5kZXJncuRucy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYnNkLmM6NTI2CisjLCBmdXp6eQorbXNnaWQgIlVuYWJsZSB0byBhbGxvY2F0ZSBhIGJzZCBkaXNrbGFiZWwgc2xvdC4iCittc2dzdHIgIkthbiBpbnRlIPZwcG5hICVzIC0gb2vkbmQgZmlsYWxsb2tlcmluZ3N0YWJlbGwuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rhc2QuYzoxNjYKKyMsIGZ1enp5Cittc2dpZCAiVW5hYmxlIHRvIGRldGVybWluZSB0aGUgYmxvY2sgc2l6ZSBvZiB0aGlzIGRhc2QiCittc2dzdHIgIkt1bmRlIGludGUgYXZn9nJhIHN0b3JsZWtlbiBw5SAlcyAoJXMpIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rhc2QuYzo3ODEKKyMsIGZ1enp5Cittc2dpZCAiVW5hYmxlIHRvIGFsbG9jYXRlIGEgZGFzZCBkaXNrbGFiZWwgc2xvdCIKK21zZ3N0ciAiS2FuIGludGUg9nBwbmEgJXMgLSBva+RuZCBmaWxhbGxva2VyaW5nc3RhYmVsbC4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZG9zLmM6ODI3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHBhcnRpdGlvbiB0YWJsZSBvbiAlcyAtLSB3cm9uZyBzaWduYXR1cmUgJXguIgorbXNnc3RyICJPZ2lsdGlnIHBhcnRpdGlvbnN0YWJlbGwgcOUgJXMgLSBmZWxha3RpZyBzaWduYXR1ciAleCIKKworIzogbGlicGFydGVkL2xhYmVscy9kb3MuYzo4NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBwYXJ0aXRpb24gdGFibGUgLSByZWN1cnNpdmUgcGFydGl0aW9uIG9uICVzLiIKK21zZ3N0ciAiT2dpbHRpZyBwYXJ0aXRpb25zdGFiZWxsIC0gcmVrdXJzaXYgcGFydGl0aW9uIHDlICVzLiIKKworIzogbGlicGFydGVkL2xhYmVscy9kb3MuYzoxMzE4CisjLCBmdXp6eQorbXNnaWQgIkV4dGVuZGVkIHBhcnRpdGlvbnMgY2Fubm90IGJlIGhpZGRlbiBvbiBtc2RvcyBkaXNrIGxhYmVscy4iCittc2dzdHIgIkV4dDItcGFydGl0aW9uZXIga2FuIGludGUgZ/ZtbWFzIGkgZmlsc3lzdGVtIGF2IHR5cGVuIG1zZG9zLiIKKworIzogbGlicGFydGVkL2xhYmVscy9kb3MuYzoxOTU4Cittc2dpZCAiUGFydGVkIGNhbid0IHJlc2l6ZSBwYXJ0aXRpb25zIG1hbmFnZWQgYnkgV2luZG93cyBEeW5hbWljIERpc2suIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6MTkwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyBoYXMgbm8gZXh0ZW5kZWQgcGFydGl0aW9uICh2b2x1bWUgaGVhZGVyIHBhcnRpdGlvbikuIgorbXNnc3RyICIiCisiS2FuIGludGUg5G5kcmEgc3RvcmxlayBw5SBlbiB1dPZrYWQgcGFydGl0aW9uIGb2ciBhdHQgZXhrbHVkZXJhIGVuIGxvZ2lzayAiCisicGFydGl0aW9uLiIKKworIzogbGlicGFydGVkL2xhYmVscy9kdmguYzozMTMKK21zZ2lkICJDaGVja3N1bSBpcyB3cm9uZywgaW5kaWNhdGluZyB0aGUgcGFydGl0aW9uIHRhYmxlIGlzIGNvcnJ1cHQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6NjE2CisjLCBmdXp6eQorbXNnaWQgIk9ubHkgcHJpbWFyeSBwYXJ0aXRpb25zIGNhbiBiZSByb290IHBhcnRpdGlvbnMuIgorbXNnc3RyICJLYW4gaW50ZSBs5GdnYSB0aWxsIGVuIHByaW3kciBwYXJ0aXRpb24gaW51dGkgZW4gdXT2a2FkLiIKKworIzogbGlicGFydGVkL2xhYmVscy9kdmguYzo2MzAKKyMsIGZ1enp5Cittc2dpZCAiT25seSBwcmltYXJ5IHBhcnRpdGlvbnMgY2FuIGJlIHN3YXAgcGFydGl0aW9ucy4iCittc2dzdHIgIkthbiBpbnRlIGzkZ2dhIHRpbGwgZW4gcHJpbeRyIHBhcnRpdGlvbiBpbnV0aSBlbiB1dPZrYWQuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjY0NAorbXNnaWQgIk9ubHkgbG9naWNhbCBwYXJ0aXRpb25zIGNhbiBiZSBhIGJvb3QgZmlsZS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9kdmguYzo3MjEKK21zZ2lkICJPbmx5IGxvZ2ljYWwgcGFydGl0aW9ucyAoYm9vdCBmaWxlcykgaGF2ZSBhIG5hbWUuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6ODEyCisjLCBmdXp6eQorbXNnaWQgIlRvbyBtYW55IHByaW1hcnkgcGFydGl0aW9ucyIKK21zZ3N0ciAiRvZyIG3lbmdhIGTlbGlnYSBzaWRvci4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIG9wZW4gZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHNlZWsgZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHJlYWQgZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMTMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyB3cml0ZSBlcnJvclxuIgorIiVzXG4iCittc2dzdHIgIiVzIHVuZGVyIHNrcml2bmluZyBw5SAlcyIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjExNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgSU9DVEwgZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIEFQSSB2ZXJzaW9uIG1pc21hdGNoXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBVbnN1cHBvcnRlZCBkaXNrIHR5cGVcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFVuc3VwcG9ydGVkIGRpc2sgZm9ybWF0XG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTMwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgRGlzayBpbiB1c2VcbiIKKyIlc1xuIgorbXNnc3RyICIlcyAgJXMgICVzIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBDb25maWcgZmlsZSBzeW50YXggZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFZvbHVtZSBsYWJlbCBpcyBjb3JydXB0ZWQuXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBhIGRhdGEgc2V0IG5hbWUgaXMgY29ycnVwdGVkLlxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjE0NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgc3BhY2UgYWxsb2NhdGlvblxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgZGV2aWNlIHZlcmlmaWNhdGlvbiBmYWlsZWRcbiIKKyJUaGUgc3BlY2lmaWVkIGRldmljZSBpcyBub3QgYSB2YWxpZCBEQVNEIGRldmljZVxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIEZhdGFsIGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjQ1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgY29udGFpbnMgR1BUIHNpZ25hdHVyZXMsIGluZGljYXRpbmcgdGhhdCBpdCBoYXMgYSBHUFQgdGFibGUuICBIb3dldmVyLCBpdCAiCisiZG9lcyBub3QgaGF2ZSBhIHZhbGlkIGZha2UgbXNkb3MgcGFydGl0aW9uIHRhYmxlLCBhcyBpdCBzaG91bGQuICBQZXJoYXBzIGl0ICIKKyJ3YXMgY29ycnVwdGVkIC0tIHBvc3NpYmx5IGJ5IGEgcHJvZ3JhbSB0aGF0IGRvZXNuJ3QgdW5kZXJzdGFuZCBHUFQgcGFydGl0aW9uICIKKyJ0YWJsZXMuICBPciBwZXJoYXBzIHlvdSBkZWxldGVkIHRoZSBHUFQgdGFibGUsIGFuZCBhcmUgbm93IHVzaW5nIGFuIG1zZG9zICIKKyJwYXJ0aXRpb24gdGFibGUuICBJcyB0aGlzIGEgR1BUIHBhcnRpdGlvbiB0YWJsZT8iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzo2NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb3JtYXQgb2YgdGhlIEdQVCBwYXJ0aXRpb24gdGFibGUgaXMgdmVyc2lvbiAleCwgd2hpY2ggaXMgbmV3ZXIgdGhhbiAiCisid2hhdCBQYXJ0ZWQgY2FuIHJlY29nbmlzZS4gIFBsZWFzZSB0ZWxsIHVzISAgYnVnLXBhcnRlZEBnbnUub3JnIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6Njk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3QgYWxsIG9mIHRoZSBzcGFjZSBhdmFpbGFibGUgdG8gJXMgYXBwZWFycyB0byBiZSB1c2VkLCB5b3UgY2FuIGZpeCB0aGUgR1BUICIKKyJ0byB1c2UgYWxsIG9mIHRoZSBzcGFjZSAoYW4gZXh0cmEgJWxsdSBibG9ja3MpIG9yIGNvbnRpbnVlIHdpdGggdGhlIGN1cnJlbnQgIgorInNldHRpbmc/ICIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjgyNworbXNnaWQgIiIKKyJUaGUgYmFja3VwIEdQVCB0YWJsZSBpcyBub3QgYXQgdGhlIGVuZCBvZiB0aGUgZGlzaywgYXMgaXQgc2hvdWxkIGJlLiAgVGhpcyAiCisibWlnaHQgbWVhbiB0aGF0IGFub3RoZXIgb3BlcmF0aW5nIHN5c3RlbSBiZWxpZXZlcyB0aGUgZGlzayBpcyBzbWFsbGVyLiAgRml4LCAiCisiYnkgbW92aW5nIHRoZSBiYWNrdXAgdG8gdGhlIGVuZCAoYW5kIHJlbW92aW5nIHRoZSBvbGQgYmFja3VwKT8iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzo4NjIKK21zZ2lkICIiCisiVGhlIHByaW1hcnkgR1BUIHRhYmxlIGlzIGNvcnJ1cHQsIGJ1dCB0aGUgYmFja3VwIGFwcGVhcnMgT0ssIHNvIHRoYXQgd2lsbCBiZSAiCisidXNlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzo4NzAKK21zZ2lkICIiCisiQm90aCB0aGUgcHJpbWFyeSBhbmQgYmFja3VwIEdQVCB0YWJsZXMgYXJlIGNvcnJ1cHQuICBUcnkgbWFraW5nIGEgZnJlc2ggIgorInRhYmxlLCBhbmQgdXNpbmcgUGFydGVkJ3MgcmVzY3VlIGZlYXR1cmUgdG8gcmVjb3ZlciBwYXJ0aXRpb25zLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjE4MQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHNpZ25hdHVyZSAleCBmb3IgTWFjIGRpc2sgbGFiZWxzLiIKK21zZ3N0ciAiT2dpbHRpZyBzaWduYXR1ciAleCBm9nIgZW4gZmlsYWxsb2tlcmluZ3N0YWJlbGwgZvZyIE1hYy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6MjI2Cittc2dpZCAiUGFydGl0aW9uIG1hcCBoYXMgbm8gcGFydGl0aW9uIG1hcCBlbnRyeSEiCittc2dzdHIgIlBhcnRpdGlvbnN0YWJlbGxlbiBzYWtuYXIgdXBwZ2lmdCBvbSBzaWcgc2rkbHYhIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyB0b28gc21hbGwgZm9yIGEgTWFjIGRpc2sgbGFiZWwhIgorbXNnc3RyICIlcyDkciBm9nIgbGl0ZW4gZvZyIGVuIGZpbGFsbG9rZXJpbmdzdGFiZWxsIGb2ciBNYWMhIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjUzMgorIywgYy1mb3JtYXQKK21zZ2lkICJQYXJ0aXRpb24gJWQgaGFzIGFuIGludmFsaWQgc2lnbmF0dXJlICV4LiIKK21zZ3N0ciAiUGFydGl0aW9uICVkIGhhciBlbiBvZ2lsdGlnIHNpZ25hdHVyICV4LiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGFydGl0aW9uICVkIGhhcyBhbiBpbnZhbGlkIGxlbmd0aCBvZiAwIGJ5dGVzISIKK21zZ3N0ciAiUGFydGl0aW9uICVkIGhhciBlbiBvZ2lsdGlnIGzkbmdkLCAwIGJ5dGUhIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjU4MAorIywgZnV6enkKK21zZ2lkICJUaGUgZGF0YSByZWdpb24gZG9lc24ndCBzdGFydCBhdCB0aGUgc3RhcnQgb2YgdGhlIHBhcnRpdGlvbi4iCittc2dzdHIgIkRhdGFvbXLlZGV0IGL2cmphciBpbnRlIHZpZCBwYXJ0aXRpb25lbnMgYvZyamFuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjU5NworIywgZnV6enkKK21zZ2lkICJUaGUgYm9vdCByZWdpb24gZG9lc24ndCBzdGFydCBhdCB0aGUgc3RhcnQgb2YgdGhlIHBhcnRpdGlvbi4iCittc2dzdHIgIlN0YXJ0b21y5WRldCBi9nJqYXIgaW50ZSB2aWQgcGFydGl0aW9uZW5zIGL2cmphbiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo2MTEKK21zZ2lkICJUaGUgcGFydGl0aW9uJ3MgYm9vdCByZWdpb24gZG9lc24ndCBvY2N1cHkgdGhlIGVudGlyZSBwYXJ0aXRpb24uIgorbXNnc3RyICJQYXJ0aXRpb25lbnMgc3RhcnRvbXLlZGUgdGFyIGludGUgdXBwIGhlbGEgcGFydGl0aW9uZW5zIHV0cnltbWUuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjYyMgorbXNnaWQgIlRoZSBwYXJ0aXRpb24ncyBkYXRhIHJlZ2lvbiBkb2Vzbid0IG9jY3VweSB0aGUgZW50aXJlIHBhcnRpdGlvbi4iCittc2dzdHIgIlBhcnRpdGlvbmVucyBkYXRhb21y5WRlIHRhciBpbnRlIHVwcCBoZWxhIHBhcnRpdGlvbmVucyB1dHJ5bW1lLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo2NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldlaXJkIGJsb2NrIHNpemUgb24gZGV2aWNlIGRlc2NyaXB0b3I6ICVkIGJ5dGVzIGlzIG5vdCBkaXZpc2libGUgYnkgNTEyLiIKK21zZ3N0ciAiIgorIktvbnN0aWcgYmxvY2tzdG9ybGVrIHDlIGVuaGV0ZW5zIGhhbmR0YWc6ICVkIGJ5dGUg5HIgaW50ZSBq5G1udCBkZWxiYXJ0IG1lZCAiCisiNTEyLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo2ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBkcml2ZXIgZGVzY3JpcHRvciBzYXlzIHRoZSBwaHlzaWNhbCBibG9jayBzaXplIGlzICVkIGJ5dGVzLCBidXQgTGludXggIgorInNheXMgaXQgaXMgJWQgYnl0ZXMuIgorbXNnc3RyICIiCisiRW5oZXRlbnMgaGFuZHRhZyBw5XN05XIgYXR0IGRlbiBmeXNpc2thIGJsb2Nrc3Rvcmxla2VuIORyICVkIGJ5dGUsIG1lbiBMaW51eCAiCisicOVzdOVyIGF0dCBkZW4g5HIgJWQgYnl0ZS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NzM2Cittc2dpZCAiTm8gdmFsaWQgcGFydGl0aW9uIG1hcCBmb3VuZC4iCittc2dzdHIgIkluZ2VuIGdpbHRpZyBwYXJ0aXRpb25zdGFiZWxsIGt1bmRlIGhpdHRhcy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6Nzk1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiQ29uZmxpY3RpbmcgcGFydGl0aW9uIG1hcCBlbnRyeSBzaXplcyEgIEVudHJ5IDEgc2F5cyBpdCBpcyAlZCwgYnV0IGVudHJ5ICVkICIKKyJzYXlzIGl0IGlzICVkISIKK21zZ3N0ciAiIgorIk1vdHPkZ2Vsc2VmdWxsYSBzdG9ybGVrc2RhdGEgaSBwYXJ0aXRpb25zdGFiZWxsZW4hIFBvc3QgZXR0IHDlc3TlciBzaWcgdmFyYSAlIgorImQgbWVkYW4gcG9zdCAlZCBw5XN05XIgc2lnIHZhcmEgJWQhIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjgyMgorIywgZnV6enkKK21zZ2lkICJXZWlyZCEgIFRoZXJlIGFyZSAyIHBhcnRpdGlvbnMgbWFwIGVudHJpZXMhIgorbXNnc3RyICJLb25zdGlndCAtIHR25SBwb3N0ZXIgaSBwYXJ0aXRpb25zdGFiZWxsZW4hIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjEzNDcKK21zZ2lkICIiCisiQ2hhbmdpbmcgdGhlIG5hbWUgb2YgYSByb290IG9yIHN3YXAgcGFydGl0aW9uIHdpbGwgcHJldmVudCBMaW51eCBmcm9tICIKKyJyZWNvZ25pc2luZyBpdCBhcyBzdWNoLiIKK21zZ3N0ciAiIgorIkF0dCDkbmRyYSBuYW1uZXQgcOUgZW4gcm90LSBlbGxlciB25HhsaW5nc3BhcnRpdGlvbiBn9nIgYXR0IExpbnV4IGludGUga2FuICIKKyJr5G5uYSBpZ2VuIGRlbS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6MTQ0MworIywgZnV6enkKK21zZ2lkICJDYW4ndCBhZGQgYW5vdGhlciBwYXJ0aXRpb24gLS0gdGhlIHBhcnRpdGlvbiBtYXAgaXMgdG9vIHNtYWxsISIKK21zZ3N0ciAiIgorIkthbiBpbnRlIGzkZ2dhIHRpbGwgZW4gdGlsbCBwcmlt5HIgcGFydGl0aW9uIC0gcGFydGl0aW9uc3RhYmVsbGVuIORyIGb2ciAiCisibGl0ZW4uIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3BjOTguYzozNTQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcGFydGl0aW9uIHRhYmxlIG9uICVzLiIKK21zZ3N0ciAiT2dpbHRpZyBwYXJ0aXRpb25zdGFiZWxsIHDlICVzIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3BjOTguYzo0MDYgbGlicGFydGVkL2xhYmVscy9wYzk4LmM6NDg0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiUGFydGl0aW9uICVkIGlzbid0IGFsaWduZWQgdG8gY3lsaW5kZXIgYm91bmRhcmllcy4gIFRoaXMgaXMgc3RpbGwgIgorInVuc3VwcG9ydGVkLiIKK21zZ3N0ciAiIgorIlBhcnRpdGlvbmVuICVkIGxpZ2dlciBpbnRlIHDlIGrkbW5hIGN5bGluZGVyZ3LkbnNlci4gTeVzdGUgbORnZ2EgdGlsbCBzdPZkICIKKyJm9nIgZGV0dGEuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3BjOTguYzo3OTEKK21zZ2lkICJDYW4ndCBhZGQgYW5vdGhlciBwYXJ0aXRpb24uIgorbXNnc3RyICJLYW4gaW50ZSBs5GdnYSB0aWxsIORubnUgZW4gcGFydGl0aW9uLiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzoxNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBCYWQgY2hlY2tzdW0gb24gYmxvY2sgJWxsdSBvZiB0eXBlICVzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjQ5NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IERpZG4ndCBmaW5kIHJkYiBibG9jaywgc2hvdWxkIG5ldmVyIGhhcHBlbi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo1ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBMb29wIGRldGVjdGVkIGF0IGJsb2NrICVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjYwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IFRoZSAlcyBsaXN0IHNlZW1zIGJhZCBhdCBibG9jayAlcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo2ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gbGlzdCBiYWQgYmxvY2tzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjY5NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gbGlzdCBwYXJ0aXRpb24gYmxvY2tzLiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBwbGFjZXJhIHBhcnRpdGlvbmVuIHDlIGrkbW4gY3lsaW5kZXJncuRucy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6NzA1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGxpc3QgZmlsZSBzeXN0ZW0gYmxvY2tzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjcxMworIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBsaXN0IGJvb3QgYmxvY2tzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjc0MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHdyaXRlIHBhcnRpdGlvbiBibG9jayBhdCAlZC4iCittc2dzdHIgIkthbiBpbnRlIGF2Z/ZyYSBvbSBwYXJ0aXRpb25lbiDkciBtb250ZXJhZC4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6MTA2OQorIywgZnV6enkKK21zZ2lkICJVbmFibGUgdG8gYWxsb2NhdGUgYSBwYXJ0aXRpb24gbnVtYmVyLiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBwbGFjZXJhIHBhcnRpdGlvbmVuIHDlIGrkbW4gY3lsaW5kZXJncuRucy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6MTQ1Cittc2dpZCAiQ29ycnVwdGVkIFN1biBkaXNrIGxhYmVsIGRldGVjdGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3N1bi5jOjI2NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGRpc2sgQ0hTIGdlb21ldHJ5ICglZCwlZCwlZCkgcmVwb3J0ZWQgYnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0gZG9lcyBub3QgIgorIm1hdGNoIHRoZSBnZW9tZXRyeSBzdG9yZWQgb24gdGhlIGRpc2sgbGFiZWwgKCVkLCVkLCVkKS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9zdW4uYzoyODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGRpc2sgbGFiZWwgZGVzY3JpYmVzIGEgZGlzayBiaWdnZXIgdGhhbiAlcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9zdW4uYzo0NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGRpc2sgaGFzICVkIGN5bGluZGVycywgd2hpY2ggaXMgZ3JlYXRlciB0aGFuIHRoZSBtYXhpbXVtIG9mIDY1NTM2LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3N1bi5jOjczNworbXNnaWQgIiIKKyJUaGUgV2hvbGUgRGlzayBwYXJ0aXRpb24gaXMgdGhlIG9ubHkgYXZhaWxhYmxlIG9uZSBsZWZ0LiAgR2VuZXJhbGx5LCBpdCBpcyAiCisibm90IGEgZ29vZCBpZGVhIHRvIG92ZXJ3cml0ZSB0aGlzIHBhcnRpdGlvbiB3aXRoIGEgcmVhbCBvbmUuICBTb2xhcmlzIG1heSAiCisibm90IGJlIGFibGUgdG8gYm9vdCB3aXRob3V0IGl0LCBhbmQgU0lMTyAodGhlIHNwYXJjIGJvb3QgbG9hZGVyKSBhcHByZWNpYXRlcyAiCisiaXQgYXMgd2VsbC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9zdW4uYzo3NTIKK21zZ2lkICJTdW4gZGlzayBsYWJlbCBpcyBmdWxsLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIG9wZW5pbmcgZGV2aWNlICclcycgZmFpbGVkLlxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6MTY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBzZWVraW5nIGRldmljZSAnJXMnIGZhaWxlZC5cbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjE3MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgd3JpdGluZyB0byBkZXZpY2UgJyVzJyBmYWlsZWQsXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzoxNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHJlYWRpbmcgZnJvbSBkZXZpY2UgJyVzJyBmYWlsZWQuXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzoxNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmF0YWwgZXJyb3JcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0MTgKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBWVE9DIGxhYmVscy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDI0Cittc2dpZCAiQ291bGQgbm90IHJlYWQgVlRPQyBGTVQxIERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQzMQorbXNnaWQgIkNvdWxkIG5vdCByZWFkIFZUT0MgRk1UNCBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0MzgKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBWVE9DIEZNVDUgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDQ1Cittc2dpZCAiQ291bGQgbm90IHJlYWQgVlRPQyBGTVQ3IERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQ2MgorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBWVE9DIGxhYmVscy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDY4Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIFZUT0MgRk1UMSBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0NzUKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgVlRPQyBGTVQ0IERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQ4MgorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBWVE9DIEZNVDUgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDg5Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIFZUT0MgRk1UNyBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGlicGFydGVkLmM6Mjk2IGxpYnBhcnRlZC9saWJwYXJ0ZWQuYzozMTYKK21zZ2lkICJPdXQgb2YgbWVtb3J5LiIKK21zZ3N0ciAiU2x1dCBw5SBtaW5uZS4iCisKKyM6IGxpYnBhcnRlZC91bml0LmM6MTM5Cittc2dpZCAiQ2Fubm90IGdldCB1bml0IHNpemUgZm9yIHNwZWNpYWwgdW5pdCAnQ09NUEFDVCcuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC91bml0LmM6Mzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIlwiJXNcIiBoYXMgaW52YWxpZCBzeW50YXggZm9yIGxvY2F0aW9ucy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL3VuaXQuYzozOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIG1heGltdW0gaGVhZCB2YWx1ZSBpcyAlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL3VuaXQuYzo0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIG1heGltdW0gc2VjdG9yIHZhbHVlIGlzICVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvdW5pdC5jOjQxMyBsaWJwYXJ0ZWQvdW5pdC5jOjU0NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVGhlIGxvY2F0aW9uICVzIGlzIG91dHNpZGUgb2YgdGhlIGRldmljZSAlcy4iCittc2dzdHIgIkthbiBpbnRlIHNrYXBhIGVuIHBhcnRpdGlvbiB1dGFuZvZyIGVuaGV0ZW4uIgorCisjOiBsaWJwYXJ0ZWQvdW5pdC5jOjUyNworbXNnaWQgIkludmFsaWQgbnVtYmVyLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYWZmcy5jOjYzIGxpYnBhcnRlZC9mcy9hbWlnYS9hcGZzLmM6NTYKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hc2ZzLmM6NzAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGFsbG9jYXRlIHBhcnRpdGlvbiBibG9ja1xuIgorbXNnc3RyICJLdW5kZSBpbnRlIHBsYWNlcmEgcGFydGl0aW9uZW4gcOUgauRtbiBjeWxpbmRlcmdy5G5zLiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FmZnMuYzo3OCBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXBmcy5jOjcwCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXNmcy5jOjg2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBhbGxvY2F0ZSBibG9ja1xuIgorbXNnc3RyICJLdW5kZSBpbnRlIHBsYWNlcmEgcGFydGl0aW9uZW4gcOUgauRtbiBjeWxpbmRlcmdy5G5zLiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FmZnMuYzo4MyBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXBmcy5jOjc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogQ291bGRuJ3QgcmVhZCBib290IGJsb2NrICVsbHVcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYWZmcy5jOjk5IGxpYnBhcnRlZC9mcy9hbWlnYS9hcGZzLmM6ODYKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hc2ZzLmM6OTIgbGlicGFydGVkL2ZzL2FtaWdhL2FzZnMuYzoxMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBDb3VsZG4ndCByZWFkIHJvb3QgYmxvY2sgJWxsdVxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jOjcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGFsbG9jYXRlIGlkIGxpc3QgZWxlbWVudFxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IENvdWxkbid0IHJlYWQgYmxvY2sgJWxsdVxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jOjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEJhZCBjaGVja3N1bSBvbiBibG9jayAlbGx1IG9mIHR5cGUgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzoyMTIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogQ291bGRuJ3Qgd3JpdGUgYmxvY2sgJWRcbiIKK21zZ3N0ciAiJXMgdW5kZXIgc2tyaXZuaW5nIHDlICVzIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzoyNzgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGFsbG9jYXRlIGRpc2tfc3BlY2lmaWMgcmRiIGJsb2NrXG4iCittc2dzdHIgIkt1bmRlIGludGUgcGxhY2VyYSBwYXJ0aXRpb25lbiBw5SBq5G1uIGN5bGluZGVyZ3LkbnMuIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzoyODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBEaWRuJ3QgZmluZCByZGIgYmxvY2ssIHNob3VsZCBuZXZlciBoYXBwZW5cbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzozMTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIHJlYWQgcGFydGl0aW9uIGJsb2NrICVsbHVcbiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBwbGFjZXJhIHBhcnRpdGlvbmVuIHDlIGrkbW4gY3lsaW5kZXJncuRucy4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo4NyBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6MTEyCittc2dpZCAiSW5jb25zaXN0ZW50IGdyb3VwIGRlc2NyaXB0b3JzISIKK21zZ3N0ciAiSW5rb25zaXN0ZW50YSBncnVwcGhhbmR0YWchIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6OTEgbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjExNgorIywgZnV6enkKK21zZ2lkICJGaWxlIHN5c3RlbSBmdWxsISIKK21zZ3N0ciAiRmlsc3lzdGVtZXQg5HIgZnVsbHQhIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6Njg2CisjLCBmdXp6eQorbXNnaWQgIkludmFsaWQgc3VwZXJibG9jay4gIEFyZSB5b3Ugc3VyZSB0aGlzIGlzIGFuIGV4dDIgZmlsZSBzeXN0ZW0/IgorbXNnc3RyICJPZ2lsdGlndCBzdXBlcmJsb2NrLiDEciBkdSBz5GtlciBw5SBhdHQgZGV0IGjkciDkciBldHQgZXh0Mi1maWxzeXN0ZW0/IgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6NzAwIGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NjU4CisjLCBmdXp6eQorbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyBlcnJvcnMhICBZb3Ugc2hvdWxkIHJ1biBlMmZzY2suIgorbXNnc3RyICJGaWxzeXN0ZW1ldCBpbm5laOVsbGVyIGZlbCEgS/ZyIGUyZnNjayBm9nJzdC4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo3MTEKKyMsIGZ1enp5Cittc2dpZCAiIgorIkZpbGUgc3lzdGVtIHdhcyBub3QgY2xlYW5seSB1bm1vdW50ZWQhICBZb3Ugc2hvdWxkIHJ1biBlMmZzY2suICBNb2RpZnlpbmcgYW4gIgorInVuY2xlYW4gZmlsZSBzeXN0ZW0gY291bGQgY2F1c2Ugc2V2ZXJlIGNvcnJ1cHRpb24uIgorbXNnc3RyICJGaWxzeXN0ZW1ldCBoYXIgaW50ZSBhdm1vbnRlcmF0cyBw5SBy5HR0IHPkdHQhIEFuduRuZCBlMmZzY2suIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6NzMxCisjLCBmdXp6eQorbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyBhbiBpbmNvbXBhdGlibGUgZmVhdHVyZSBlbmFibGVkLiIKK21zZ3N0ciAiRmlsc3lzdGVtZXQgaGFyIGVuIGlua29tcGF0aWJlbCBmaW5lc3MgYWt0aXZlcmFkIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6NzQyCittc2dpZCAiRXJyb3IgYWxsb2NhdGluZyBidWZmZXIgY2FjaGUuIgorbXNnc3RyICJLdW5kZSBpbnRlIHJlc2VydmVyYSBidWZmZXJjYWNoZSIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9pbm9kZV9yZWxvY2F0b3IuYzoxMTQKKyMsIGZ1enp5Cittc2dpZCAiIgorIkZvdW5kIGFuIGlub2RlIHdpdGggYSBpbmNvcnJlY3QgbGluayBjb3VudC4gIEJldHRlciBnbyBydW4gZTJmc2NrIGZpcnN0ISIKK21zZ3N0ciAiSGl0dGFkZSBlbiBpbm9kZSBtZWQgZmVsYWt0aWdhIGFudGFsIGzkbmthci4gS/ZyIGUyZnNjayBm9nJzdC4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfaW5vZGVfcmVsb2NhdG9yLmM6NDg3Cittc2dpZCAiTm90IGVub3VnaCBmcmVlIGlub2RlcyEiCittc2dzdHIgIkRldCBmaW5ucyBpbnRlIHRpbGxy5GNrbGlndCBt5W5nYSBmcmlhIGlub2RlciEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6MjIzCisjLCBmdXp6eQorbXNnaWQgIkZpbGUgc3lzdGVtIGlzIHRvbyBmdWxsIHRvIHJlbW92ZSBhIGdyb3VwISIKK21zZ3N0ciAiRmlsc3lzdGVtZXQg5HIgZvZyIHVwcHRhZ2V0IGb2ciBhdHQgdGEgYm9ydCBlbiBncnVwcCEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6MjMyCisjLCBmdXp6eQorbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyB0b28gbWFueSBhbGxvY2F0ZWQgaW5vZGVzIHRvIHJlbW92ZSBhIGdyb3VwISIKK21zZ3N0ciAiRmlsc3lzdGVtZXQgaGFyIGb2ciBt5W5nYSByZXNlcnZlcmFkZSBpbm9kZXIgZvZyIGF0dCB0YSBib3J0IGVuIGdydXBwISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo0OTEKK21zZ2lkICJhZGRpbmcgZ3JvdXBzIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NTI4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGZpbGUgc3lzdGVtIGlzIHRvbyBmdWxsIHRvIHJlc2l6ZSBpdCB0byAlaSBibG9ja3MuICBTb3JyeS4iCittc2dzdHIgIkZpbHN5c3RlbWV0IORyIGb2ciB1cHB0YWdldCBm9nIgYXR0IORuZHJhIGRlc3Mgc3RvcmxlayB0aWxsICVpIGJsb2NrLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo1MzgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGZpbGUgc3lzdGVtIGhhcyB0b28gbWFueSBvY2N1cGllZCBpbm9kZXMgdG8gcmVzaXplIGl0IHRvICVpIGJsb2Nrcy4gICIKKyJTb3JyeS4iCittc2dzdHIgIiIKKyJGaWxzeXN0ZW1ldCBoYXIgZvZyIG3lbmdhIHVwcHRhZ25hIGlub2RlciBm9nIgYXR0IORuZHJhIGRlc3Mgc3RvcmxlayB0aWxsICVpICIKKyJibG9jay4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NjY2CisjLCBmdXp6eQorbXNnaWQgIkZpbGUgc3lzdGVtIHdhcyBub3QgY2xlYW5seSB1bm1vdW50ZWQhICBZb3Ugc2hvdWxkIHJ1biBlMmZzY2suIgorbXNnc3RyICJGaWxzeXN0ZW1ldCBoYXIgaW50ZSBhdm1vbnRlcmF0cyBw5SBy5HR0IHPkdHQhIEFuduRuZCBlMmZzY2suIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjY3NQorbXNnaWQgIiIKKyJUaGUgZmlsZSBzeXN0ZW0gaGFzIHRoZSAnZGlyX2luZGV4JyBmZWF0dXJlIGVuYWJsZWQuICBQYXJ0ZWQgY2FuIG9ubHkgcmVzaXplICIKKyJ0aGUgZmlsZSBzeXN0ZW0gaWYgaXQgZGlzYWJsZXMgdGhpcyBmZWF0dXJlLiAgWW91IGNhbiBlbmFibGUgaXQgbGF0ZXIgYnkgIgorInJ1bm5pbmcgJ3R1bmUyZnMgLU8gZGlyX2luZGV4IERFVklDRScgYW5kIHRoZW4gJ2UyZnNjayAtZkQgREVWSUNFJy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo2OTEKK21zZ2lkICIiCisiQSByZXNpemUgb3BlcmF0aW9uIG9uIHRoaXMgZmlsZSBzeXN0ZW0gd2lsbCB1c2UgRVhQRVJJTUVOVEFMIGNvZGVcbiIKKyJ0aGF0IE1BWSBDT1JSVVBUIGl0IChhbHRob3VnaCBubyBvbmUgaGFzIHJlcG9ydGVkIGFueSBzdWNoIGRhbWFnZSB5ZXQpLlxuIgorIllvdSBzaG91bGQgYXQgbGVhc3QgYmFja3VwIHlvdXIgZGF0YSBmaXJzdCwgYW5kIHJ1biAnZTJmc2NrIC1mJyBhZnRlcndhcmRzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2Jsb2NrX3JlbG9jYXRvci5jOjE5OAorIywgZnV6enkKK21zZ2lkICJDcm9zcy1saW5rZWQgYmxvY2tzIGZvdW5kISAgQmV0dGVyIGdvIHJ1biBlMmZzY2sgZmlyc3QhIgorbXNnc3RyICJLb3JzbORua2FkZSBibG9jayBoaXR0YWRlcyEgS/ZyIGUyZnNjayBm9nJzdCEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfYmxvY2tfcmVsb2NhdG9yLmM6NTM3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJCbG9jayAlaSBoYXMgbm8gcmVmZXJlbmNlPyAgV2VpcmQuIgorbXNnc3RyICJCbG9jayAlaSBoYXIgaW5nZW4gcmVmZXJlbnM/IEtvbnN0aWd0IgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2Jsb2NrX3JlbG9jYXRvci5jOjczNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQmxvY2sgJWkgc2hvdWxkbid0IGhhdmUgYmVlbiBtYXJrZWQgKCVkLCAlZCkhIgorbXNnc3RyICJCbG9jayAlaSBib3JkZSBoYSBtYXJrZXJhdHMhIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9pbnRlcmZhY2UuYzoxODYKKyMsIGZ1enp5Cittc2dpZCAiIgorIlRoZSBleHQyIGZpbGUgc3lzdGVtIHBhc3NlZCBhIGJhc2ljIGNoZWNrLiAgRm9yIGEgbW9yZSBjb21wcmVoZW5zaXZlIGNoZWNrLCAiCisidXNlIHRoZSBlMmZzY2sgcHJvZ3JhbS4iCittc2dzdHIgIiIKKyJGaWxzeXN0ZW1ldCAoZTJmcykga2xhcmFkZSBldHQgZ3J1bmRs5GdnYW5kZSB0ZXN0LiBG9nIgZXR0IG1lciBnZW5vbWflZW5kZSAiCisidGVzdCwgYW525G5kIHByb2dyYW1tZXQgZTJmc2NrLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvaW50ZXJmYWNlLmM6MjAzCittc2dpZCAiU29ycnksIGNhbid0IG1vdmUgdGhlIHN0YXJ0IG9mIGV4dDIgcGFydGl0aW9ucyB5ZXQhIgorbXNnc3RyICJLYW4gaW50ZSBmbHl0dGEgZW4gZXh0Mi1wYXJ0aXRpb25zIGL2cmphbiDkbm51ISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9idWZmZXIuYzo4MgorbXNnaWQgIkNvdWxkbid0IGZsdXNoIGJ1ZmZlciBjYWNoZSEiCittc2dzdHIgIkt1bmRlIGludGUgcmVuc2EgYnVmZmVyY2FjaGVuISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9ta2ZzLmM6MTYyCittc2dpZCAid3JpdGluZyBwZXItZ3JvdXAgbWV0YWRhdGEiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9ta2ZzLmM6NTY0Cittc2dpZCAiRmlsZSBzeXN0ZW0gdG9vIHNtYWxsIGZvciBleHQyLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NhbGMuYzoxMzUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgbmVlZCAlcyBvZiBmcmVlIGRpc2sgc3BhY2UgdG8gc2hyaW5rIHRoaXMgcGFydGl0aW9uIHRvIHRoaXMgc2l6ZS4gICIKKyJDdXJyZW50bHksIG9ubHkgJXMgaXMgZnJlZS4iCittc2dzdHIgIiIKKyJEdSBiZWj2dmVyICVkTSBsZWRpZ3QgdXRyeW1tZSBm9nIgYXR0IG1pbnNrYSBzdG9ybGVrZW4gcOUgZGVuIGjkciAiCisicGFydGl0aW9uZW4gdGlsbCBhbmdpdmVuIHN0b3JsZWsuIChkZXQgZmlubnMgZW5kYXN0ICVkTSBsZWRpZ3QpIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvbnRleHQuYzo1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2x1c3RlciBzdGFydCBkZWx0YSA9ICVkLCB3aGljaCBpcyBub3QgYSBtdWx0aXBsZSBvZiB0aGUgY2x1c3RlciBzaXplICVkLiIKK21zZ3N0ciAiIgorIktsdXN0cmV0cyBzdGFydGRpZmZlcmVucyDkciAlZCwgdmlsa2V0IGludGUg5HIgZW4gbXVsdGlwZWwgYXYgIgorImtsdXN0ZXJzdG9ybGVrZW4gJWQiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvZmF0LmM6MzA4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJQYXJ0aXRpb24gdG9vIGJpZy9zbWFsbCBmb3IgYSAlcyBmaWxlIHN5c3RlbS4iCittc2dzdHIgIlBhcnRpdGlvbmVuIGb2ciBsaXRlbiBm9nIgYXR0IGjlbGxhIGV0dCBmaWxzeXN0ZW0gYXYgdHlwZW4gRkFUIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jOjQ3NAorbXNnaWQgIiIKKyJUaGUgRkFUcyBkb24ndCBtYXRjaC4gIElmIHlvdSBkb24ndCBrbm93IHdoYXQgdGhpcyBtZWFucywgdGhlbiBzZWxlY3QgIgorImNhbmNlbCwgcnVuIHNjYW5kaXNrIG9uIHRoZSBmaWxlIHN5c3RlbSwgYW5kIHRoZW4gY29tZSBiYWNrLiIKK21zZ3N0ciAiIgorIkZpbGFsbG9rZXJpbmdzdGFiZWxsZXJuYSBzdORtbWVyIGludGUg9nZlcmVucy4gT20gZHUgaW50ZSB2ZXQgdmFkIGRldHRhICIKKyJiZXR5ZGVyLCB25GxqIGF2YnJ5dCwga/ZyIHNjYW5kaXNrIHDlIGZpbHN5c3RlbWV0IG9jaCBm9nJz9msgaWdlbi4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvZmF0LmM6NTE0Cittc2dpZCAiVGhlcmUgYXJlIG5vIHBvc3NpYmxlIGNvbmZpZ3VyYXRpb25zIGZvciB0aGlzIEZBVCB0eXBlLiIKK21zZ3N0ciAiRGV0IGZpbm5zIGluZ2EgbfZqbGlnYSBrb21iaW5hdGlvbmVyIGb2ciBkZW4gaORyIHNvcnRlbnMgRkFULiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9mYXQuYzo1MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZpbGUgc3lzdGVtIGRvZXNuJ3QgaGF2ZSBleHBlY3RlZCBzaXplcyBmb3IgV2luZG93cyB0byBsaWtlIGl0LiAgQ2x1c3RlciAiCisic2l6ZSBpcyAlZGsgKCVkayBleHBlY3RlZCk7IG51bWJlciBvZiBjbHVzdGVycyBpcyAlZCAoJWQgZXhwZWN0ZWQpOyBzaXplIG9mICIKKyJGQVRzIGlzICVkIHNlY3RvcnMgKCVkIGV4cGVjdGVkKS4iCittc2dzdHIgIiIKKyJGaWxzeXN0ZW1ldCBoYXIgaW50ZSBlbiBzdG9ybGVrIHNvbSBXaW5kb3dzIGdpbGxhci4gS2x1c3RlcnN0b3JsZWtlbiDkciAlZGsgIgorIiglZGsgZvZyduRudGFzKTsgYW50YWxldCBrbHVzdGVyIORyICVkICglZCBm9nJ25G50YXMpOyBzdG9ybGVrZW4gcOUgRkFUOmFybmEgIgorIuRyICVkIHNla3RvcmVyICglZCBm9nJ25G50YXMpLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9mYXQuYzo1NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZpbGUgc3lzdGVtIGlzIHJlcG9ydGluZyB0aGUgZnJlZSBzcGFjZSBhcyAlZCBjbHVzdGVycywgbm90ICVkIGNsdXN0ZXJzLiIKK21zZ3N0ciAiRmlsc3lzdGVtZXQgbWVuYXIgYXR0IGRldCBmcmlhIHV0cnltbWV0IORyICVkIGtsdXN0ZXIsIGludGUgJWQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jOjg3NAorIywgZnV6enkKK21zZ2lkICIiCisiR05VIFBhcnRlZCB3YXMgbWlzY29tcGlsZWQ6IHRoZSBGQVQgYm9vdCBzZWN0b3Igc2hvdWxkIGJlIDUxMiBieXRlcy4gIEZBVCAiCisic3VwcG9ydCB3aWxsIGJlIGRpc2FibGVkLiIKK21zZ3N0ciAiIgorIkdOVSBQYXJ0ZWQga29tcGlsZXJhZGVzIGZlbGFrdGlndDogRkFUJ3Mgc3RhcnRzZWt0b3Igc2thbGwgdmFyYSA1MTIgYnl0ZS4gIgorIlN09mRldCBm9nIgRkFUIGtvbW1lciBhdHQgYmxvY2tlcmFzLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzoxNTkKKyMsIGZ1enp5Cittc2dpZCAiIgorIlRoZXJlJ3Mgbm90IGVub3VnaCByb29tIGluIHRoZSByb290IGRpcmVjdG9yeSBmb3IgYWxsIG9mIHRoZSBmaWxlcy4gIEVpdGhlciAiCisiY2FuY2VsLCBvciBpZ25vcmUgdG8gbG9zZSB0aGUgZmlsZXMuIgorbXNnc3RyICIiCisiRGV0IGZpbm5zIGludGUgdGlsbHLkY2tsaWd0IG1lZCB1dHJ5bW1lIGb2ciBhbGxhIGZpbGVyIGkgcm90a2F0YWxvZ2VuLiBW5GxqICIKKyJhbnRpbmdlbiBhdHQgYXZicnl0YSwgZWxsZXIgaWdub3JlcmEgb2NoIGb2cmxvcmEgZmlsZXJuYS4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6MzAwCittc2dpZCAiRXJyb3Igd3JpdGluZyB0byB0aGUgcm9vdCBkaXJlY3RvcnkuIgorbXNnc3RyICJFdHQgZmVsIHVwcHN0b2QgdmlkIHNrcml2bmluZyB0aWxsIHJvdGthdGFsb2dlbi4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NDg5CisjLCBmdXp6eQorbXNnaWQgIklmIHlvdSBsZWF2ZSB5b3VyIGZpbGUgc3lzdGVtIGFzIEZBVDE2LCB0aGVuIHlvdSB3aWxsIGhhdmUgbm8gcHJvYmxlbXMuIgorbXNnc3RyICIiCisiT20gZHUgbOV0ZXIgZmlsc3lzdGVtZXQgZm9ydHPkdHRhIHZhcmEgRkFUMTYga29tbWVyIGR1IGludGUgYXR0IGblIG7lZ3JhICIKKyJiZWt5bW1lci4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NDkyCittc2dpZCAiIgorIklmIHlvdSBjb252ZXJ0IHRvIEZBVDE2LCBhbmQgTVMgV2luZG93cyBpcyBpbnN0YWxsZWQgb24gdGhpcyBwYXJ0aXRpb24sIHRoZW4gIgorInlvdSBtdXN0IHJlLWluc3RhbGwgdGhlIE1TIFdpbmRvd3MgYm9vdCBsb2FkZXIuICBJZiB5b3Ugd2FudCB0byBkbyB0aGlzLCB5b3UgIgorInNob3VsZCBjb25zdWx0IHRoZSBQYXJ0ZWQgbWFudWFsIChvciB5b3VyIGRpc3RyaWJ1dGlvbidzIG1hbnVhbCkuIgorbXNnc3RyICIiCisiT20gZHUga29udmVydGVyYXIgdGlsbCBGQVQxNiBvY2ggTVMgV2luZG93cyDkciBpbnN0YWxsZXJhZCBw5SBkZW4gaORyICIKKyJwYXJ0aXRpb25lbiBz5SBt5XN0ZSBkdSBpbnN0YWxsZXJhIG9tIE1TIFdpbmRvd3Mgc3RhcnRwcm9ncmFtLiBPbSBkdSBn9nIgZGV0ICIKKyJi9nIgZHUgc3R1ZGVyYSBQYXJ0ZWRzIG1hbnVhbCAoZWxsZXIgZGluIGRpc3RyaWJ1dGlvbnMgbWFudWFsKS4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTAwCittc2dpZCAiIgorIklmIHlvdSBsZWF2ZSB5b3VyIGZpbGUgc3lzdGVtIGFzIEZBVDMyLCB0aGVuIHlvdSB3aWxsIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyAiCisicHJvYmxlbXMuIgorbXNnc3RyICIiCisiT20gZHUgbOV0ZXIgZmlsc3lzdGVtZXQgZm9ydHPkdHRhIHZhcmEgRkFUMzIga29tbWVyIGR1IGludGUgYXR0IGludHJvZHVjZXJhICIKKyJu5WdyYSBueWEgcHJvYmxlbS4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTA0Cittc2dpZCAiIgorIklmIHlvdSBjb252ZXJ0IHRvIEZBVDMyLCBhbmQgTVMgV2luZG93cyBpcyBpbnN0YWxsZWQgb24gdGhpcyBwYXJ0aXRpb24sIHRoZW4gIgorInlvdSBtdXN0IHJlLWluc3RhbGwgdGhlIE1TIFdpbmRvd3MgYm9vdCBsb2FkZXIuICBJZiB5b3Ugd2FudCB0byBkbyB0aGlzLCB5b3UgIgorInNob3VsZCBjb25zdWx0IHRoZSBQYXJ0ZWQgbWFudWFsIChvciB5b3VyIGRpc3RyaWJ1dGlvbidzIG1hbnVhbCkuICBBbHNvLCAiCisiY29udmVydGluZyB0byBGQVQzMiB3aWxsIG1ha2UgdGhlIGZpbGUgc3lzdGVtIHVucmVhZGFibGUgYnkgTVMgRE9TLCBNUyAiCisiV2luZG93cyA5NWEsIGFuZCBNUyBXaW5kb3dzIE5ULiIKK21zZ3N0ciAiIgorIk9tIGR1IGtvbnZlcnRlcmFyIHRpbGwgRkFUMzIgb2NoIE1TIFdpbmRvd3Mg5HIgaW5zdGFsbGVyYWQgcOUgZGVuIGjkciAiCisicGFydGl0aW9uZW4gbeVzdGUgZHUgaW5zdGFsbGVyYSBvbSBNUyBXaW5kb3dzIHN0YXJ0cHJvZ3JhbS4gT20gZHUgZ/ZyIGRldCAiCisiYvZyIGR1IHN0dWRlcmEgUGFydGVkcyBtYW51YWwgKGVsbGVyIGRpbiBkaXN0cmlidXRpb25zIG1hbnVhbCkuIE3kcmsgYXR0ICIKKyJnZW5vbSBhdHQga29udmVydGVyYSBmaWxzeXN0ZW1ldCB0aWxsIEZBVDMyIGtvbW1lciBkZXQgaW50ZSBhdHQga3VubmEgbORzYXMgIgorImF2IE1TIERPUywgTVMgV2luZG93cyA5NWEgb2NoIE1TIFdpbmRvd3MgTlQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjUxOAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyAgJXMgICVzIgorbXNnc3RyICIlcyAgJXMgICVzIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjUxOQorbXNnaWQgIldvdWxkIHlvdSBsaWtlIHRvIHVzZSBGQVQzMj8iCittc2dzdHIgIlZpbGwgZHUgYW525G5kYSBGQVQzMj8iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTUwIGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzICAlcyIKK21zZ3N0ciAiJXMgICVzIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjU1MQorbXNnaWQgIiIKKyJUaGUgZmlsZSBzeXN0ZW0gY2FuIG9ubHkgYmUgcmVzaXplZCB0byB0aGlzIHNpemUgYnkgY29udmVydGluZyB0byBGQVQxNi4iCittc2dzdHIgIiIKKyJGaWxzeXN0ZW1ldCBrYW4gYmFyYSDkbmRyYXMgdGlsbCBkZW4gaORyIHN0b3JsZWtlbiBnZW5vbSBhdHQga29udmVydGVyYSB0aWxsICIKKyJGQVQxNi4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTY3Cittc2dpZCAiIgorIlRoZSBmaWxlIHN5c3RlbSBjYW4gb25seSBiZSByZXNpemVkIHRvIHRoaXMgc2l6ZSBieSBjb252ZXJ0aW5nIHRvIEZBVDMyLiIKK21zZ3N0ciAiIgorIkZpbHN5c3RlbWV0IGthbiBiYXJhIORuZHJhcyB0aWxsIGRlbiBo5HIgc3Rvcmxla2VuIGdlbm9tIGF0dCBrb252ZXJ0ZXJhIHRpbGwgIgorIkZBVDMyLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1ODAKKyMsIGZ1enp5Cittc2dpZCAiIgorIkdOVSBQYXJ0ZWQgY2Fubm90IHJlc2l6ZSB0aGlzIHBhcnRpdGlvbiB0byB0aGlzIHNpemUuICBXZSdyZSB3b3JraW5nIG9uIGl0ISIKK21zZ3N0ciAiIgorIkdOVSBQYXJ0ZWQga2FuIGludGUg5G5kcmEgcGFydGl0aW9uZW4gdGlsbCBkZW4gaORyIHN0b3JsZWtlbi4gVmkgYXJiZXRhciBw5SAiCisiZW4gbPZzbmluZyEiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjQ5IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjU2Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGludmFsaWQgc2lnbmF0dXJlIGZvciBhIEZBVCBmaWxlIHN5c3RlbS4iCittc2dzdHIgIkZpbHN5c3RlbWV0IGhhciBlbiBvZ2lsdGlnIHNpZ25hdHVyIGb2ciBmaWxzeXN0ZW0gYXYgdHlwZW4gRkFULiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6NjQKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgYW4gaW52YWxpZCBzZWN0b3Igc2l6ZSBmb3IgYSBGQVQgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICIiCisiRmlsc3lzdGVtZXQgaGFyIGVuIG9naWx0aWcgc2VrdG9yc3RvcmxlayBm9nIgZXR0IGZpbHN5c3RlbSBhdiB0eXBlbiBGQVQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo3MQorIywgZnV6enkKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgYW4gaW52YWxpZCBjbHVzdGVyIHNpemUgZm9yIGEgRkFUIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiIgorIkZpbHN5c3RlbWV0IGhhciBlbiBvZ2lsdGlnIHNla3RvcnN0b3JsZWsgZvZyIGV0dCBmaWxzeXN0ZW0gYXYgdHlwZW4gRkFULiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6NzgKKyMsIGZ1enp5Cittc2dpZCAiIgorIkZpbGUgc3lzdGVtIGhhcyBhbiBpbnZhbGlkIG51bWJlciBvZiByZXNlcnZlZCBzZWN0b3JzIGZvciBhIEZBVCBmaWxlIHN5c3RlbS4iCittc2dzdHIgIiIKKyJGaWxzeXN0ZW1ldCBoYXIgZXR0IG9naWx0aWd0IGFudGFsIHJlc2VydmVyYWRlIHNla3RvcmVyIGb2ciBldHQgZmlsc3lzdGVtIGF2ICIKKyJ0eXBlbiBGQVQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo4NQorIywgZnV6enkKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgYW4gaW52YWxpZCBudW1iZXIgb2YgRkFUcy4iCittc2dzdHIgIkZpbHN5c3RlbWV0IGhhciBldHQgZmVsYWt0aWd0IGFudGFsIGZpbGFsbG9rZXJpbmdzdGFiZWxsZXIuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzoxMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgZmlsZSBzeXN0ZW0gaGFzIGEgbG9naWNhbCBzZWN0b3Igc2l6ZSBvZiAlZC4gIEdOVSBQYXJ0ZWQgaXMga25vd24gbm90ICIKKyJ0byB3b3JrIHByb3Blcmx5IHdpdGggc2VjdG9yIHNpemVzIG90aGVyIHRoYW4gNTEyIGJ5dGVzLiIKK21zZ3N0ciAiIgorIkZpbHN5c3RlbWV0IGhhciBlbiBsb2dpc2sgc2VrdG9yc3RvcmxlayBw5SAlZC4gRGV0IORyIGvkbnQgYXR0IEdOVSBQYXJ0ZWQgIgorImludGUgZnVuZ2VyYXIgYnJhIG1lZCBhbmRyYSBzZWt0b3JzdG9ybGVrYXIgNTEyIGJ5dGUuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzoxNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmaWxlIHN5c3RlbSdzIENIUyBnZW9tZXRyeSBpcyAoJWQsICVkLCAlZCksIHdoaWNoIGlzIGludmFsaWQuICBUaGUgIgorInBhcnRpdGlvbiB0YWJsZSdzIENIUyBnZW9tZXRyeSBpcyAoJWQsICVkLCAlZCkuICBJZiB5b3Ugc2VsZWN0IElnbm9yZSwgdGhlICIKKyJmaWxlIHN5c3RlbSdzIENIUyBnZW9tZXRyeSB3aWxsIGJlIGxlZnQgdW5jaGFuZ2VkLiAgSWYgeW91IHNlbGVjdCBGaXgsIHRoZSAiCisiZmlsZSBzeXN0ZW0ncyBDSFMgZ2VvbWV0cnkgd2lsbCBiZSBzZXQgdG8gbWF0Y2ggdGhlIHBhcnRpdGlvbiB0YWJsZSdzIENIUyAiCisiZ2VvbWV0cnkuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjIxMworbXNnaWQgIkZBVCBib290IHNlY3RvciBzYXlzIGxvZ2ljYWwgc2VjdG9yIHNpemUgaXMgMC4gIFRoaXMgaXMgd2VpcmQuICIKK21zZ3N0ciAiIgorIkZBVDpzIHN0YXJ0c2VrdG9yIG1lbmFyIGF0dCBkZW4gbG9naXNrYSBzZWt0b3JzdG9ybGVrZW4g5HIgMC4gTeRya2xpZ3QuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzoyMTkKK21zZ2lkICJGQVQgYm9vdCBzZWN0b3Igc2F5cyB0aGVyZSBhcmUgbm8gRkFUIHRhYmxlcy4gIFRoaXMgaXMgd2VpcmQuICIKK21zZ3N0ciAiRkFUOnMgc3RhcnRzZWt0b3IgbWVuYXIgYXR0IGRldCBzYWtuYXMgRkFULXRhYmVsbGVyLiBN5HJrbGlndC4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjIyNQorbXNnaWQgIkZBVCBib290IHNlY3RvciBzYXlzIGNsdXN0ZXJzIGFyZSAwIHNlY3RvcnMuICBUaGlzIGlzIHdlaXJkLiAiCittc2dzdHIgIiIKKyJGQVQ6cyBzdGFydHNla3RvciBtZW5hciBhdHQgZXR0IGtsdXN0ZXIgYmVzdOVyIGF2IDAgc2VrdG9yZXIuIE3kcmtsaWd0LiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6MjM1CisjLCBmdXp6eQorbXNnaWQgIkZpbGUgc3lzdGVtIGlzIEZBVDEyLCB3aGljaCBpcyB1bnN1cHBvcnRlZC4iCittc2dzdHIgIkZpbHN5c3RlbWV0IORyIEZBVDEyLCBzb20gaW50ZSBzdPZkcy4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjQxMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGluZm9ybWF0aW9uIHNlY3RvciBoYXMgdGhlIHdyb25nIHNpZ25hdHVyZSAoJXgpLiAgU2VsZWN0IGNhbmNlbCBmb3Igbm93LCAiCisiYW5kIHNlbmQgaW4gYSBidWcgcmVwb3J0LiAgSWYgeW91J3JlIGRlc3BlcmF0ZSwgaXQncyBwcm9iYWJseSBzYWZlIHRvIGlnbm9yZS4iCittc2dzdHIgIiIKKyJJbmZvcm1hdGlvbnNzZWt0b3JuIGhhciBmZWwgc2lnbmF0dXIgKCV4KS4gVuRsaiBhdmJyeXQgb2NoIHNraWNrYSBpbiBlbiAiCisiZmVscmFwcG9ydC4gT20gZHUg5HIgZGVzcGVyYXQgc+Ug5HIgZGV0IHRyb2xpZ2VuIHPka2VydCBhdHQgc3RydW50YSBpIGZlbGV0LiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb3VudC5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgZGlyZWN0b3J5IGVudHJ5IGZvciAlczogZmlyc3QgY2x1c3RlciBpcyB0aGUgZW5kIG9mIGZpbGUgbWFya2VyLiIKK21zZ3N0ciAiRmVsYWt0aWcga2F0YWxvZ3Bvc3QgZvZyICVzOiBm9nJzdGEga2x1c3RyZXQg5HIgZW4gZmlsc2x1dHNtYXJrZXJpbmcuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvdW50LmM6MTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJCYWQgRkFUOiB1bnRlcm1pbmF0ZWQgY2hhaW4gZm9yICVzLiAgWW91IHNob3VsZCBydW4gZG9zZnNjayBvciBzY2FuZGlzay4iCittc2dzdHIgIiIKKyJUcmFzaWcgZmlsYWxsb2tlcmluZ3N0YWJlbGw6IGVqIGF2c2x1dGFkIGtlZGphIGb2ciAlcy4gRHUgYvZyIGv2cmEgZG9zZnNjayAiCisiZWxsZXIgc2NhbmRpc2suIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvdW50LmM6MTc0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiQmFkIEZBVDogY2x1c3RlciAlZCBvdXRzaWRlIGZpbGUgc3lzdGVtIGluIGNoYWluIGZvciAlcy4gIFlvdSBzaG91bGQgcnVuICIKKyJkb3Nmc2NrIG9yIHNjYW5kaXNrLiIKK21zZ3N0ciAiIgorIlRyYXNpZyBmaWxhbGxva2VyaW5nc3RhYmVsbDoga2x1c3RlciAlZCBsaWdnZXIgdXRhbmb2ciBmaWxzeXN0ZW1ldCBm9nIgJXMuICIKKyJEdSBi9nIga/ZyYSBkb3Nmc2NrIGVsbGVyIHNjYW5kaXNrLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb3VudC5jOjE4NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQmFkIEZBVDogY2x1c3RlciAlZCBpcyBjcm9zcy1saW5rZWQgZm9yICVzLiAgWW91IHNob3VsZCBydW4gZG9zZnNjayBvciAiCisic2NhbmRpc2suIgorbXNnc3RyICIiCisiVHJhc2lnIGZpbGFsbG9rZXJpbmdzdGFiZWxsOiBrbHVzdGVyICVkIORyIGtvcnNs5G5rYWQgZvZyICVzLiBEdSBi9nIga/ZyYSAiCisiZG9zZnNjayBlbGxlciBzY2FuZGlzay4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY291bnQuYzoyMDMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzICVkaywgYnV0IGl0IGhhcyAlZCBjbHVzdGVycyAoJWRrKS4iCittc2dzdHIgIiVzIORyICVkaywgbWVuIGRlbiBoYXIgJWQga2x1c3RlciAoJWRrKS4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY291bnQuYzoyNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmaWxlICVzIGlzIG1hcmtlZCBhcyBhIHN5c3RlbSBmaWxlLiAgVGhpcyBtZWFucyBtb3ZpbmcgaXQgY291bGQgY2F1c2UgIgorInNvbWUgcHJvZ3JhbXMgdG8gc3RvcCB3b3JraW5nLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3RhYmxlLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGQVQgJWQgbWVkaWEgJXggZG9lc24ndCBtYXRjaCB0aGUgYm9vdCBzZWN0b3IncyBtZWRpYSAleC4gIFlvdSBzaG91bGQgIgorInByb2JhYmx5IHJ1biBzY2FuZGlzay4iCittc2dzdHIgIiIKKyJGQVQgJWQgbWVkaWEgJXggcGFzc2FyIGludGUgbWVkIHN0YXJ0c2VrdG9ybnMgbWVkaWEgJXguIER1IGL2ciBhbnRhZ2xpZ2VuICIKKyJr9nJhIHNjYW5kaXNrLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC90YWJsZS5jOjI2OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmF0X3RhYmxlX3NldDogY2x1c3RlciAlbGQgb3V0c2lkZSBmaWxlIHN5c3RlbSIKK21zZ3N0ciAiZmF0X3RhYmxlX3NldDoga2x1c3RlciAlbGQgbGlnZ2VyIHV0YW5m9nIgZmlsc3lzdGVtZXQiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvdGFibGUuYzozMDEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhdF90YWJsZV9nZXQ6IGNsdXN0ZXIgJWxkIG91dHNpZGUgZmlsZSBzeXN0ZW0iCittc2dzdHIgImZhdF90YWJsZV9nZXQ6IGtsdXN0ZXIgJWxkIGxpZ2dlciB1dGFuZvZyIGZpbHN5c3RlbWV0IgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3RhYmxlLmM6MzQzCittc2dpZCAiZmF0X3RhYmxlX2FsbG9jX2NsdXN0ZXI6IG5vIGZyZWUgY2x1c3RlcnMiCittc2dzdHIgImZhdF90YWJsZV9hbGxvY19jbHVzdGVyOiBpbmdhIGxlZGlnYSBrbHVzdGVyIgorCisjOiBsaWJwYXJ0ZWQvZnMvbGludXhfc3dhcC9saW51eF9zd2FwLmM6Mjc1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVbnJlY29nbmlzZWQgb2xkIHN0eWxlIGxpbnV4IHN3YXAgc2lnbmF0dXJlICclMTBzJy4iCittc2dzdHIgIk9r5G5kIHNpZ25hdHVyIGb2ciBMaW51eCB25HhsaW5nc3V0cnltbWUgXFxcIiUxMHNcXFwiLiIKKworIzogbGlicGFydGVkL2ZzL2xpbnV4X3N3YXAvbGludXhfc3dhcC5jOjMxOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVW5yZWNvZ25pc2VkIG5ldyBzdHlsZSBsaW51eCBzd2FwIHNpZ25hdHVyZSAnJTEwcycuIgorbXNnc3RyICJPa+RuZCBzaWduYXR1ciBm9nIgTGludXggduR4bGluZ3N1dHJ5bW1lIFxcXCIlMTBzXFxcIi4iCisKKyM6IGxpYnBhcnRlZC9mcy9saW51eF9zd2FwL2xpbnV4X3N3YXAuYzozNTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVucmVjb2duaXNlZCBzd3N1c3AgbGludXggc3dhcCBzaWduYXR1cmUgJyU5cycuIgorbXNnc3RyICJPa+RuZCBzaWduYXR1ciBm9nIgTGludXggduR4bGluZ3N1dHJ5bW1lIFxcXCIlMTBzXFxcIi4iCisKKyM6IGxpYnBhcnRlZC9mcy9saW51eF9zd2FwL2xpbnV4X3N3YXAuYzo0MzQKK21zZ2lkICJUb28gbWFueSBiYWQgcGFnZXMuIgorbXNnc3RyICJG9nIgbeVuZ2EgZOVsaWdhIHNpZG9yLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9hZHZmcy5jOjEyMSBsaWJwYXJ0ZWQvZnMvaGZzL2FkdmZzX3BsdXMuYzoxMjIKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzo0MTQgbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjUwOAorIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NTM5IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjY1OAorIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NzcyCittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIGNvbnRhaW5zIGVycm9ycy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9hZHZmc19wbHVzLmM6Mjg3Cittc2dpZCAiQmFkIGJsb2NrcyBjb3VsZCBub3QgYmUgcmVhZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9jYWNoZS5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVHJ5aW5nIHRvIHJlZ2lzdGVyIGFuIGV4dGVudCBzdGFydGluZyBhdCBibG9jayAweCVYLCBidXQgYW5vdGhlciBvbmUgYWxyZWFkeSAiCisiZXhpc3RzIGF0IHRoaXMgcG9zaXRpb24uICBZb3Ugc2hvdWxkIGNoZWNrIHRoZSBmaWxlIHN5c3RlbSEiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9jYWNoZS5jOjIxNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVHJ5aW5nIHRvIG1vdmUgYW4gZXh0ZW50IGZyb20gYmxvY2sgT3glWCB0byBibG9jayBPeCVYLCBidXQgYW5vdGhlciBvbmUgIgorImFscmVhZHkgZXhpc3RzIGF0IHRoaXMgcG9zaXRpb24uICBUaGlzIHNob3VsZCBub3QgaGFwcGVuISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGUuYzoxNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHVwZGF0ZSB0aGUgZXh0ZW50IGNhY2hlIGZvciBIRlMgZmlsZSB3aXRoIENOSUQgJVguIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZS5jOjE4MAorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgdG8gcmVhZCBIRlMgZmlsZSB3aXRoIENOSUQgJVggYmVoaW5kIEVPRi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlLmM6MTkwIGxpYnBhcnRlZC9mcy9oZnMvZmlsZS5jOjIyMAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCBzZWN0b3IgJWxsaSBvZiBIRlMgZmlsZSB3aXRoIENOSUQgJVguIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZS5jOjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgdG8gd3JpdGUgSEZTIGZpbGUgd2l0aCBDTklEICVYIGJlaGluZCBFT0YuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZV9wbHVzLmM6MTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB1cGRhdGUgdGhlIGV4dGVudCBjYWNoZSBmb3IgSEZTKyBmaWxlIHdpdGggQ05JRCAlWC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlX3BsdXMuYzoyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIHRvIHJlYWQgSEZTKyBmaWxlIHdpdGggQ05JRCAlWCBiZWhpbmQgRU9GLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGVfcGx1cy5jOjIxMyBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGVfcGx1cy5jOjI1NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCBzZWN0b3IgJWxsaSBvZiBIRlMrIGZpbGUgd2l0aCBDTklEICVYLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGVfcGx1cy5jOjI0NQorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgdG8gd3JpdGUgSEZTKyBmaWxlIHdpdGggQ05JRCAlWCBiZWhpbmQgRU9GLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjIzMgorbXNnaWQgIlNvcnJ5LCBIRlMgY2Fubm90IGJlIHJlc2l6ZWQgdGhhdCB3YXkgeWV0LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjI2MiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjY0MQorbXNnaWQgIkRhdGEgcmVsb2NhdGlvbiBoYXMgZmFpbGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjI4MQorbXNnaWQgIkRhdGEgcmVsb2NhdGlvbiBsZWZ0IHNvbWUgZGF0YSBpbiB0aGUgZW5kIG9mIHRoZSB2b2x1bWUuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MzIwCisjLCBmdXp6eQorbXNnaWQgIndyaXRpbmcgSEZTIE1hc3RlciBEaXJlY3RvcnkgQmxvY2siCittc2dzdHIgIkV0dCBmZWwgdXBwc3RvZCB2aWQgc2tyaXZuaW5nIHRpbGwgcm90a2F0YWxvZ2VuLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo0NjgKK21zZ2lkICJObyB2YWxpZCBIRlNbK1hdIHNpZ25hdHVyZSBoYXMgYmVlbiBmb3VuZCB3aGlsZSBvcGVuaW5nLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjQ3OAorIywgYy1mb3JtYXQKK21zZ2lkICJWZXJzaW9uICVkIG9mIEhGUysgaXNuJ3Qgc3VwcG9ydGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICJWZXJzaW9uICVkIG9mIEhGU1ggaXNuJ3Qgc3VwcG9ydGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjY3MgorbXNnaWQgIkRhdGEgcmVsb2NhdGlvbiBsZWZ0IHNvbWUgZGF0YSBhdCB0aGUgZW5kIG9mIHRoZSB2b2x1bWUuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NzIwCisjLCBmdXp6eQorbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdGhlIGFsbG9jYXRpb24gZmlsZS4iCittc2dzdHIgIkV0dCBmZWwgdXBwc3RvZCB2aWQgc2tyaXZuaW5nIHRpbGwgcm90a2F0YWxvZ2VuLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo3MzUKK21zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRoZSBjb21wYXRpYmlsaXR5IHBhcnQgb2YgdGhlIGFsbG9jYXRpb24gZmlsZS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo3NTAKK21zZ2lkICJ3cml0aW5nIEhGUysgVm9sdW1lIEhlYWRlciIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjg1MAorbXNnaWQgIkFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGxvb2tpbmcgZm9yIHRoZSBtYW5kYXRvcnkgYmFkIGJsb2NrcyBmaWxlLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjkwNAorbXNnaWQgIiIKKyJJdCBzZWVtcyB0aGVyZSBpcyBhbiBlcnJvciBpbiB0aGUgSEZTIHdyYXBwZXI6IHRoZSBiYWQgYmxvY2tzIGZpbGUgZG9lc24ndCAiCisiY29udGFpbiB0aGUgZW1iZWRkZWQgSEZTKyB2b2x1bWUuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6OTQwCittc2dpZCAiU29ycnksIEhGUysgY2Fubm90IGJlIHJlc2l6ZWQgdGhhdCB3YXkgeWV0LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjk3NQorbXNnaWQgInNocmlua2luZyBlbWJlZGRlZCBIRlMrIHZvbHVtZSIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjk5MQorbXNnaWQgIlJlc2l6aW5nIHRoZSBIRlMrIHZvbHVtZSBoYXMgZmFpbGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjk5OAorbXNnaWQgInNocmlua2luZyBIRlMgd3JhcHBlciIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjEwMDcKK21zZ2lkICJVcGRhdGluZyB0aGUgSEZTIHdyYXBwZXIgaGFzIGZhaWxlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzoxMTA5IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MTE5NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhpcyBpcyBub3QgYSByZWFsICVzIGNoZWNrLiAgVGhpcyBpcyBnb2luZyB0byBleHRyYWN0IHNwZWNpYWwgbG93IGxldmVsICIKKyJmaWxlcyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzoxNTUKK21zZ2lkICJCYWQgYmxvY2sgbGlzdCBoZWFkZXIgY2hlY2tzdW0uIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjE2OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSW52YWxpZCBzaXplIG9mIGEgdHJhbnNhY3Rpb24gYmxvY2sgd2hpbGUgcmVwbGF5aW5nIHRoZSBqb3VybmFsICglaSBieXRlcykuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjI2MAorbXNnaWQgIiIKKyJKb3VybmFsIHN0b3JlZCBvdXRzaWRlIG9mIHRoZSB2b2x1bWUgYXJlIG5vdCBzdXBwb3J0ZWQuICBUcnkgdG8gZGVzYWN0aXZhdGUgIgorInRoZSBqb3VybmFsIGFuZCBydW4gUGFydGVkIGFnYWluLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzoyNzEKKyMsIGZ1enp5Cittc2dpZCAiSm91cm5hbCBvZmZzZXQgb3Igc2l6ZSBpcyBub3QgbXVsdGlwbGUgb2YgdGhlIHNlY3RvciBzaXplLiIKK21zZ3N0ciAiIgorIktsdXN0cmV0cyBzdGFydGRpZmZlcmVucyDkciAlZCwgdmlsa2V0IGludGUg5HIgZW4gbXVsdGlwZWwgYXYgIgorImtsdXN0ZXJzdG9ybGVrZW4gJWQiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjI5MgorbXNnaWQgIkluY29ycmVjdCBtYWdpYyB2YWx1ZXMgaW4gdGhlIGpvdXJuYWwgaGVhZGVyLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozMDIKK21zZ2lkICJKb3VybmFsIHNpemUgbWlzbWF0Y2ggYmV0d2VlbiBqb3VybmFsIGluZm8gYmxvY2sgYW5kIGpvdXJuYWwgaGVhZGVyLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozMTQKKyMsIGZ1enp5Cittc2dpZCAiU29tZSBoZWFkZXIgZmllbGRzIGFyZSBub3QgbXVsdGlwbGUgb2YgdGhlIHNlY3RvciBzaXplLiIKK21zZ3N0ciAiIgorIktsdXN0cmV0cyBzdGFydGRpZmZlcmVucyDkciAlZCwgdmlsa2V0IGludGUg5HIgZW4gbXVsdGlwZWwgYXYgIgorImtsdXN0ZXJzdG9ybGVrZW4gJWQiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjMyMworbXNnaWQgIiIKKyJUaGUgc2VjdG9yIHNpemUgc3RvcmVkIGluIHRoZSBqb3VybmFsIGlzIG5vdCA1MTIgYnl0ZXMuICBQYXJ0ZWQgb25seSAiCisic3VwcG9ydHMgNTEyIGJ5dGVzIGxlbmd0aCBzZWN0b3JzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozMzUKK21zZ2lkICJCYWQgam91cm5hbCBjaGVja3N1bS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MzUzCittc2dpZCAiIgorIlRoZSBqb3VybmFsIGlzIG5vdCBlbXB0eS4gIFBhcnRlZCBtdXN0IHJlcGxheSB0aGUgdHJhbnNhY3Rpb25zIGJlZm9yZSAiCisib3BlbmluZyB0aGUgZmlsZSBzeXN0ZW0uICBUaGlzIHdpbGwgbW9kaWZ5IHRoZSBmaWxlIHN5c3RlbS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MzgxCittc2dpZCAiIgorIlRoZSB2b2x1bWUgaGVhZGVyIG9yIHRoZSBtYXN0ZXIgZGlyZWN0b3J5IGJsb2NrIGhhcyBjaGFuZ2VkIHdoaWxlIHJlcGxheWluZyAiCisidGhlIGpvdXJuYWwuICBZb3Ugc2hvdWxkIHJlc3RhcnQgUGFydGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3Byb2JlLmM6NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBhcnRlZCBjYW4ndCB1c2UgSEZTIGZpbGUgc3lzdGVtcyBvbiBkaXNrcyB3aXRoIGEgc2VjdG9yIHNpemUgbm90IGVxdWFsIHRvICUiCisiZCBieXRlcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjE1MSBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzoxNTUKK21zZ2lkICJBbiBleHRlbnQgaGFzIG5vdCBiZWVuIHJlbG9jYXRlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjI1MSBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzozMDcKK21zZ2lkICIiCisiQSByZWZlcmVuY2UgdG8gYW4gZXh0ZW50IGNvbWVzIGZyb20gYSBwbGFjZSBpdCBzaG91bGQgbm90LiAgWW91IHNob3VsZCBjaGVjayAiCisidGhlIGZpbGUgc3lzdGVtISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6MzgxCittc2dpZCAiVGhpcyBIRlMgdm9sdW1lIGhhcyBubyBjYXRhbG9nIGZpbGUuICBUaGlzIGlzIHZlcnkgdW51c3VhbCEiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjQ3NQorbXNnaWQgIlRoaXMgSEZTIHZvbHVtZSBoYXMgbm8gZXh0ZW50cyBvdmVyZmxvdyBmaWxlLiAgVGhpcyBpcyBxdWl0ZSB1bnVzdWFsISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NTE3IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjY2OAorbXNnaWQgIiIKKyJUaGUgZXh0ZW50cyBvdmVyZmxvdyBmaWxlIHNob3VsZCBub3QgY29udGFpbiBpdHMgb3duIGV4dGVudHMhICBZb3Ugc2hvdWxkICIKKyJjaGVjayB0aGUgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzo1NzQgbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6ODQ3CisjLCBmdXp6eQorbXNnaWQgIkNvdWxkIG5vdCBjYWNoZSB0aGUgZmlsZSBzeXN0ZW0gaW4gbWVtb3J5LiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBoaXR0YSBu5WdvdCBmaWxzeXN0ZW0uIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NjM1IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjkwOAorbXNnaWQgIkJhZCBibG9ja3MgbGlzdCBjb3VsZCBub3QgYmUgbG9hZGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NjQ5IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjkyNAorbXNnaWQgIkFuIGVycm9yIG9jY3VycmVkIGR1cmluZyBleHRlbnQgcmVsb2NhdGlvbi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NDk1Cittc2dpZCAiVGhpcyBIRlMrIHZvbHVtZSBoYXMgbm8gY2F0YWxvZyBmaWxlLiAgVGhpcyBpcyB2ZXJ5IHVudXN1YWwhIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjYxOQorbXNnaWQgIlRoaXMgSEZTKyB2b2x1bWUgaGFzIG5vIGV4dGVudHMgb3ZlcmZsb3cgZmlsZS4gIFRoaXMgaXMgcXVpdGUgdW51c3VhbCEiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjk0Cittc2dpZCAiZGlzcGxheXMgdGhpcyBoZWxwIG1lc3NhZ2UiCittc2dzdHIgInZpc2EgZGVuIGjkciBoauRscHRleHRlbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjk1Cittc2dpZCAibGlzdHMgcGFydGl0aW9uIGxheW91dCBvbiBhbGwgYmxvY2sgZGV2aWNlcyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6OTYKK21zZ2lkICJkaXNwbGF5cyBtYWNoaW5lIHBhcnNlYWJsZSBvdXRwdXQiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjk3Cittc2dpZCAibmV2ZXIgcHJvbXB0cyBmb3IgdXNlciBpbnRlcnZlbnRpb24iCittc2dzdHIgImZy5WdhciBhbGRyaWcgYW525G5kYXJlbiBvbSBhbHRlcm5hdGl2IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6OTgKK21zZ2lkICJkaXNwbGF5cyB0aGUgdmVyc2lvbiIKK21zZ3N0ciAidmlzYXIgdmVyc2lvbmVuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTExCisjLCBmdXp6eQorbXNnaWQgIiIKKyJOVU1CRVIgaXMgdGhlIHBhcnRpdGlvbiBudW1iZXIgdXNlZCBieSBMaW51eC4gIE9uIE1TLURPUyBkaXNrIGxhYmVscywgdGhlICIKKyJwcmltYXJ5IHBhcnRpdGlvbnMgbnVtYmVyIGZyb20gMSB0byA0LCBsb2dpY2FsIHBhcnRpdGlvbnMgZnJvbSA1IG9ud2FyZHMuXG4iCittc2dzdHIgIiIKKyJVTkRSRSDkciBwYXJ0aXRpb25zbnVtcmV0IHNvbSBMaW51eCBhbnbkbmRlci4gUOUgZmlsc3lzdGVtIGF2IHR5cCBNU0RPUyDkciAiCisiZGUgcHJpbeRyYSBwYXJ0aXRpb25lcm5hIG51bXJlcmFkZSBmcuVuIGV0dCB0aWxsIGZ5cmEsIG9jaCBkZSBsb2dpc2thICIKKyJwYXJ0aXRpb25lcm5hIGZy5W4gZmVtIG9jaCB1cHDldC5cbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjExNAorbXNnaWQgIkxBQkVMLVRZUEUgaXMgb25lIG9mOiAiCittc2dzdHIgIlBBUlQtVFlQIORyIGVuIGF2OiIKKworIzogcGFydGVkL3BhcnRlZC5jOjExNQorbXNnaWQgIkZMQUcgaXMgb25lIG9mOiAiCittc2dzdHIgIkZMQUdHQSDkciBlbiBhdjogIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTE2CisjLCBmdXp6eQorbXNnaWQgIlVOSVQgaXMgb25lIG9mOiAiCittc2dzdHIgIkZMQUdHQSDkciBlbiBhdjogIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTE3CisjLCBmdXp6eQorbXNnaWQgIlBBUlQtVFlQRSBpcyBvbmUgb2Y6IHByaW1hcnksIGxvZ2ljYWwsIGV4dGVuZGVkXG4iCittc2dzdHIgIlBBUlQtVFlQIORyIGVuIGF2OiBwcmlt5HIsIGxvZ2lzaywgdXT2a2FkXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMTkKK21zZ2lkICJGUy1UWVBFIGlzIG9uZSBvZjogIgorbXNnc3RyICJGUy1UWVAg5HIgZW4gYXY6ICIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMAorbXNnaWQgIiIKKyJTVEFSVCBhbmQgRU5EIGFyZSBkaXNrIGxvY2F0aW9ucywgc3VjaCBhcyA0R0Igb3IgMTAlLiAgTmVnYXRpdmUgdmFsdWVzIGNvdW50ICIKKyJmcm9tIHRoZSBlbmQgb2YgdGhlIGRpc2suICBGb3IgZXhhbXBsZSwgLTFzIHNwZWNpZmllcyBleGFjdGx5IHRoZSBsYXN0ICIKKyJzZWN0b3IuXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMworbXNnaWQgIlNUQVRFIGlzIG9uZSBvZjogb24sIG9mZlxuIgorbXNnc3RyICJUSUxMU1TFTkQg5HIgZXR0IGF2OiBw5SwgYXZcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyNAorbXNnaWQgIkRFVklDRSBpcyB1c3VhbGx5IC9kZXYvaGRhIG9yIC9kZXYvc2RhXG4iCittc2dzdHIgIkVOSEVUIORyIHZhbmxpZ2VuIC9kZXYvaGRhIGVsbGVyIC9kZXYvc2RhXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjUKK21zZ2lkICJOQU1FIGlzIGFueSB3b3JkIHlvdSB3YW50XG4iCittc2dzdHIgIk5BTU4g5HIgdmlsa2V0IG9yZCBkdSB2aWxsXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjYKK21zZ2lkICJUaGUgcGFydGl0aW9uIG11c3QgaGF2ZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBGUy1UWVBFczogIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMzAKKyMsIGZ1enp5Cittc2dpZCAiIgorIkNvcHlyaWdodCAoQykgMTk5OCAtIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuXG4iCisiVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmUsIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLlxuIgorIlxuIgorIlRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuIgorImJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4iCisiTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuIgorIkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4iCisiXG4iCittc2dzdHIgIiIKKyJVcHBob3ZzcuR0dCCpIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuXG4iCisiXG4iCisiRvZsamFuZGUgdGV4dCDkciBlbiBpbmZvcm1lbGwg9nZlcnPkdHRuaW5nIHNvbSBlbmJhcnQgdGlsbGhhbmRhaOVsbHMgaVxuIgorImluZm9ybWF0aXZ0IHN5ZnRlLiBG9nIgYWxsYSBqdXJpZGlza2EgdG9sa25pbmdhciBn5GxsZXIgZGVuIGVuZ2Vsc2thICIKKyJvcmlnaW5hbC1cbiIKKyJ0ZXh0ZW4uXG4iCisiXG4iCisiRGV0dGEgcHJvZ3JhbSDkciBmcmkgcHJvZ3JhbXZhcmEuIER1IGthbiBkaXN0cmlidWVyYSBkZXQgb2NoL2VsbGVyICIKKyJtb2RpZmllcmFcbiIKKyJkZXQgdW5kZXIgdmlsbGtvcmVuIGkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHB1YmxpY2VyYWQgYXYgRnJlZSAiCisiU29mdHdhcmVcbiIKKyJGb3VuZGF0aW9uLCBhbnRpbmdlbiB2ZXJzaW9uIDIgZWxsZXIgKG9tIGR1IHPlIHZpbGwpIG7lZ29uIHNlbmFyZSB2ZXJzaW9uLlxuIgorIlxuIgorIkRldHRhIHByb2dyYW0gZGlzdHJpYnVlcmFzIGkgaG9wcCBvbSBhdHQgZGV0IHNrYSB2YXJhIGFuduRuZGJhcnQsIG1lbiBVVEFOXG4iCisiTsVHT04gU09NIEhFTFNUIEdBUkFOVEksIOR2ZW4gdXRhbiB1bmRlcmb2cnN05WRkIGdhcmFudGkgb20gU8RMSkJBUkhFVCAiCisiZWxsZXJcbiIKKyJMxE1QTElHSEVUIEbWUiBOxUdPVCBTUEVDSUVMTFQgxE5EQU3FTC4gU2UgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZvZyXG4iCisieXR0ZXJsaWdhcmUgaW5mb3JtYXRpb24uXG4iCisiXG4iCisiRHUgYvZyIGhhIGbldHQgZW4ga29waWEgYXYgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdGlsbHNhbW1hbnMgbWVkIGRldHRhXG4iCisicHJvZ3JhbS4gT20gaW50ZSwgc2tyaXYgdGlsbCBcbiIKKyJGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZS0gU3VpdGUgMzMwLFxuIgorIkJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiUwLmYlJVx0KHRpbWUgbGVmdCAlLjJkOiUuMmQpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBhcnRpdGlvbiAlcyBpcyBiZWluZyB1c2VkLiBZb3UgbXVzdCB1bm1vdW50IGl0IGJlZm9yZSB5b3UgbW9kaWZ5IGl0IHdpdGggIgorIlBhcnRlZC4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICJQYXJ0aXRpb24ocykgb24gJXMgYXJlIGJlaW5nIHVzZWQuIgorbXNnc3RyICJQYXJ0aXRpb25lbiBw5SAlcyDkciBpIGJydWsuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIzCittc2dpZCAiIgorIlRoZSBleGlzdGluZyBmaWxlIHN5c3RlbSB3aWxsIGJlIGRlc3Ryb3llZCBhbmQgYWxsIGRhdGEgb24gdGhlIHBhcnRpdGlvbiAiCisid2lsbCBiZSBsb3N0LiBEbyB5b3Ugd2FudCB0byBjb250aW51ZT8iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIzNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGV4aXN0aW5nIGRpc2sgbGFiZWwgb24gJXMgd2lsbCBiZSBkZXN0cm95ZWQgYW5kIGFsbCBkYXRhIG9uIHRoaXMgZGlzayAiCisid2lsbCBiZSBsb3N0LiBEbyB5b3Ugd2FudCB0byBjb250aW51ZT8iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjQ1OCBwYXJ0ZWQvcGFydGVkLmM6NjUyIHBhcnRlZC9wYXJ0ZWQuYzoxMDQ0CisjOiBwYXJ0ZWQvcGFydGVkLmM6MTEyOCBwYXJ0ZWQvcGFydGVkLmM6MTc3MSBwYXJ0ZWQvcGFydGVkLmM6MTg1MgorIzogcGFydGVkL3BhcnRlZC5jOjE5MDAKKyMsIGZ1enp5Cittc2dpZCAiUGFydGl0aW9uIG51bWJlcj8iCittc2dzdHIgIlBhcnRpdGlvbmVuIORyIGkgYnJ1ay4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo1MDAKK21zZ2lkICJTb3VyY2UgZGV2aWNlPyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NTA0CisjLCBmdXp6eQorbXNnaWQgIlNvdXJjZSBwYXJ0aXRpb24gbnVtYmVyPyIKK21zZ3N0ciAiS+RsbHBhcnRpdGlvbmVuIGZpbm5zIGludGUuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NTA5CisjLCBmdXp6eQorbXNnaWQgIkNhbid0IGNvcHkgYW4gZXh0ZW5kZWQgcGFydGl0aW9uLiIKK21zZ3N0ciAiS2FuIGludGUga29waWVyYSB1dPZrYWRlIHBhcnRpdGlvbmVyLiIKKworIzogcGFydGVkL3BhcnRlZC5jOjUxNQorIywgZnV6enkKK21zZ2lkICJEZXN0aW5hdGlvbiBwYXJ0aXRpb24gbnVtYmVyPyIKK21zZ3N0ciAiTeVscGFydGl0aW9uZW4g5HIgaSBicnVrLiIKKworIzogcGFydGVkL3BhcnRlZC5jOjYxNQorIywgZnV6enkKK21zZ2lkICJOZXcgZGlzayBsYWJlbCB0eXBlPyIKK21zZ3N0ciAiVHlwIGF2IGZpbHN5c3RlbTogJXNcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjY1NgorIywgZnV6enkKK21zZ2lkICJGaWxlIHN5c3RlbT8iCittc2dzdHIgIkZpbHN5c3RlbSAgICIKKworIzogcGFydGVkL3BhcnRlZC5jOjcwNyBwYXJ0ZWQvcGFydGVkLmM6ODc4CisjLCBmdXp6eQorbXNnaWQgIlBhcnRpdGlvbiB0eXBlPyIKK21zZ3N0ciAiUGFydGl0aW9uZW4gZmlubnMgaW50ZS4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo3MTQgcGFydGVkL3BhcnRlZC5jOjg4NSBwYXJ0ZWQvcGFydGVkLmM6MTEzMQorIywgZnV6enkKK21zZ2lkICJQYXJ0aXRpb24gbmFtZT8iCittc2dzdHIgIlBhcnRpdGlvbmVuIGZpbm5zIGludGUuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NzIyIHBhcnRlZC9wYXJ0ZWQuYzo4OTUKKyMsIGZ1enp5Cittc2dpZCAiRmlsZSBzeXN0ZW0gdHlwZT8iCittc2dzdHIgIkZpbHN5c3RlbSAgICIKKworIzogcGFydGVkL3BhcnRlZC5jOjcyOSBwYXJ0ZWQvcGFydGVkLmM6ODk3IHBhcnRlZC9wYXJ0ZWQuYzoxMDU5CisjOiBwYXJ0ZWQvcGFydGVkLmM6MTcyNSBwYXJ0ZWQvcGFydGVkLmM6MTc4MAorbXNnaWQgIlN0YXJ0PyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NzMxIHBhcnRlZC9wYXJ0ZWQuYzo5MDAgcGFydGVkL3BhcnRlZC5jOjEwNjIKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNzI3IHBhcnRlZC9wYXJ0ZWQuYzoxNzgyCittc2dpZCAiRW5kPyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NzY5IHBhcnRlZC9wYXJ0ZWQuYzo5MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSByZXF1ZXN0ZWQgYSBwYXJ0aXRpb24gZnJvbSAlcyB0byAlcy5cbiIKKyJUaGUgY2xvc2VzdCBsb2NhdGlvbiB3ZSBjYW4gbWFuYWdlIGlzICVzIHRvICVzLiAgSXMgdGhpcyBzdGlsbCBhY2NlcHRhYmxlIHRvICIKKyJ5b3U/IgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo4OTAKK21zZ2lkICJBbiBleHRlbmRlZCBwYXJ0aXRpb24gY2Fubm90IGhvbGQgYSBmaWxlIHN5c3RlbS4gIERpZCB5b3Ugd2FudCBta3BhcnQ/IgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMDUwCisjLCBmdXp6eQorbXNnaWQgIkNhbid0IG1vdmUgYW4gZXh0ZW5kZWQgcGFydGl0aW9uLiIKK21zZ3N0ciAiS2FuIGludGUgZmx5dHRhIHV09mthZGUgcGFydGl0aW9uZXIuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTA3OQorbXNnaWQgIkNhbid0IG1vdmUgYSBwYXJ0aXRpb24gb250byBpdHNlbGYuICBUcnkgdXNpbmcgcmVzaXplLCBwZXJoYXBzPyIKK21zZ3N0ciAiIgorIkthbiBpbnRlIGZseXR0YSBlbiBwYXJ0aXRpb24gdGlsbCBzaWcgc2rkbHYuIFByb3ZhIGF0dCDkbmRyYSBzdG9ybGVrZW4gIgorImlzdORsbGV0LiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlub3I6ICVkXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMjgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkZsYWdzOiAlc1xuIgorbXNnc3RyICJGbGFnZ29yIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIyOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRmlsZSBTeXN0ZW06ICVzXG4iCittc2dzdHIgIkZpbHN5c3RlbSAgICIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMzAKK21zZ2lkICJTaXplOiAgICAgICAgICIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIzNQorbXNnaWQgIk1pbmltdW0gc2l6ZTogIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjM4Cittc2dpZCAiTWF4aW11bSBzaXplOiAiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEzNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTW9kZWw6ICVzICglcylcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTM2NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRGlzayAlczogJXNcbiIKK21zZ3N0ciAiJXMgICVzICAlcyIKKworIzogcGFydGVkL3BhcnRlZC5jOjEzNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VjdG9yIHNpemUgKGxvZ2ljYWwvcGh5c2ljYWwpOiAlbGxkQi8lbGxkQlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMzgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkJJT1MgY3lsaW5kZXIsaGVhZCxzZWN0b3IgZ2VvbWV0cnk6ICVkLCVkLCVkLiAgRWFjaCBjeWxpbmRlciBpcyAlcy5cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTM5MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiUGFydGl0aW9uIFRhYmxlOiAlc1xuIgorbXNnc3RyICJPZ2lsdGlnIHBhcnRpdGlvbnN0YWJlbGwgcOUgJXMiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDA2IHBhcnRlZC9wYXJ0ZWQuYzoxNDA5Cittc2dpZCAiTnVtYmVyIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDA2IHBhcnRlZC9wYXJ0ZWQuYzoxNDA5Cittc2dpZCAiU3RhcnQiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MDcgcGFydGVkL3BhcnRlZC5jOjE0MTAKK21zZ2lkICJFbmQiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MTAKKyMsIGZ1enp5Cittc2dpZCAiU2l6ZSIKK21zZ3N0ciAi5G5kcmFfc3RvcmxlayIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MTQKK21zZ2lkICJUeXBlIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDE2CisjLCBmdXp6eQorbXNnaWQgIkZpbGUgc3lzdGVtIgorbXNnc3RyICJGaWxzeXN0ZW0gICAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDE5CisjLCBmdXp6eQorbXNnaWQgIk5hbWUiCittc2dzdHIgIm5hbW4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDIxCittc2dpZCAiRmxhZ3MiCittc2dzdHIgIkZsYWdnb3IiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDc3Cittc2dpZCAiRnJlZSBTcGFjZSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTYyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQSAlcyAlcyBwYXJ0aXRpb24gd2FzIGZvdW5kIGF0ICVzIC0+ICVzLiAgRG8geW91IHdhbnQgdG8gYWRkIGl0IHRvIHRoZSAiCisicGFydGl0aW9uIHRhYmxlPyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTY2MworbXNnaWQgInNlYXJjaGluZyBmb3IgZmlsZSBzeXN0ZW1zIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxODc3CisjLCBmdXp6eQorbXNnaWQgIk5ldyBkZXZpY2U/IgorbXNnc3RyICJJbmdlbiBlbmhldCBoaXR0YWRlcyIKKworIzogcGFydGVkL3BhcnRlZC5jOjE5MDIKK21zZ2lkICJGbGFnIHRvIEludmVydD8iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjE5MDcKK21zZ2lkICJOZXcgc3RhdGU/IgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxOTQ0Cittc2dpZCAiVW5pdD8iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIwOTMKK21zZ2lkICJjaGVjayIKK21zZ3N0ciAidGVzdGEiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMDk2CisjLCBmdXp6eQorbXNnaWQgIiIKKyJjaGVjayBOVU1CRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIGEgc2ltcGxlIGNoZWNrIG9uIHRoZSBmaWxlIHN5c3RlbSIKK21zZ3N0ciAidGVzdGEgVU5EUkUgICAgICAgICAgICAgICAgICAgIGf2ciBlbiBlbmtlbCB0ZXN0IGF2IGZpbHN5c3RlbWV0IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEwMgorbXNnaWQgImNwIgorbXNnc3RyICJrb3BpZXJhIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEwNQorIywgZnV6enkKK21zZ2lkICIiCisiY3AgW0ZST00tREVWSUNFXSBGUk9NLU5VTUJFUiBUTy1OVU1CRVIgICBjb3B5IGZpbGUgc3lzdGVtIHRvIGFub3RoZXIgIgorInBhcnRpdGlvbiIKK21zZ3N0ciAiIgorImtvcGllcmEgW0ZSxU4gRU5IRVRdIEZSxU4tVU5EUkUgVElMTC1VTkRSRSAgICAga29waWVyYSBldHQgZmlsc3lzdGVtIHRpbGwgIgorImV0dCBhbm5hdCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMTEKK21zZ2lkICJoZWxwIgorbXNnc3RyICJoauRscCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMTQKKyMsIGZ1enp5Cittc2dpZCAiIgorImhlbHAgW0NPTU1BTkRdICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgZ2VuZXJhbCBoZWxwLCBvciBoZWxwIG9uICIKKyJDT01NQU5EIgorbXNnc3RyICIiCisiaGrkbHAgW0tPTU1BTkRPXSAgICAgICAgICAgICBza3JpdmVyIGdlbmVyZWxsIGhq5GxwLCBlbGxlciBzcGVjaWVsbCBoauRscCAiCisiZvZyIEtPTU1BTkRPIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEyMAorbXNnaWQgIm1rbGFiZWwiCittc2dzdHIgIm1rbGFiZWwiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTIwCisjLCBmdXp6eQorbXNnaWQgIm1rdGFibGUiCittc2dzdHIgIm1rbGFiZWwiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTIzCisjLCBmdXp6eQorbXNnaWQgIiIKKyJta2xhYmVsLG1rdGFibGUgTEFCRUwtVFlQRSAgICAgICAgICAgICAgIGNyZWF0ZSBhIG5ldyBkaXNrbGFiZWwgKHBhcnRpdGlvbiAiCisidGFibGUpIgorbXNnc3RyICJta2xhYmVsIFBBUlQtVFlQICBza2FwYSBlbiBueSBwYXJ0aXRpb25zdGFiZWxsIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEyOQorbXNnaWQgIm1rZnMiCittc2dzdHIgIm1rZnMiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTMyCisjLCBmdXp6eQorbXNnaWQgIiIKKyJta2ZzIE5VTUJFUiBGUy1UWVBFICAgICAgICAgICAgICAgICAgICAgIG1ha2UgYSBGUy1UWVBFIGZpbGUgc3lzdGVtIG9uICIKKyJwYXJ0aXRpdG9uIE5VTUJFUiIKK21zZ3N0ciAiIgorIm1rZnMgVU5EUkUgVFlQICAgICAgIHNrYXBhIGV0dCBmaWxzeXN0ZW0gYXYgdHlwZW4gVFlQIHDlIHBhcnRpdGlvbiBVTkRSRSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMzgKK21zZ2lkICJta3BhcnQiCittc2dzdHIgIm1rcGFydCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNDEKKyMsIGZ1enp5Cittc2dpZCAibWtwYXJ0IFBBUlQtVFlQRSBbRlMtVFlQRV0gU1RBUlQgRU5EICAgICBtYWtlIGEgcGFydGl0aW9uIgorbXNnc3RyICJta3BhcnQgUEFSVElUSU9OU1RZUCBbVFlQXSBC1lJKQU4gU0xVVCAgICBza2FwYSBlbiBwYXJ0aXRpb24iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTQ3CisjLCBmdXp6eQorbXNnaWQgIiIKKyInbWtwYXJ0JyBtYWtlcyBhIHBhcnRpdGlvbiB3aXRob3V0IGNyZWF0aW5nIGEgbmV3IGZpbGUgc3lzdGVtIG9uIHRoZSAiCisicGFydGl0aW9uLiAgRlMtVFlQRSBtYXkgYmUgc3BlY2lmaWVkIHRvIHNldCBhbiBhcHByb3ByaWF0ZSBwYXJ0aXRpb24gSUQuXG4iCittc2dzdHIgIiIKKyJta3BhcnQgc2thcGFyIGVuIHBhcnRpdGlvbiB1dGFuIGF0dCBza2FwYSBldHQgbnl0dCBmaWxzeXN0ZW0gcOUgZGVuLiBUWVAgIgorIm3lc3RlIHZhcmEgYW5naXZlbiBm9nIgZGF0YXBhcnRpdGlvbmVyICh0aWxsIHNraWxsbmFkIG1vdCB1dPZrYWRlICIKKyJwYXJ0aXRpb25lcikuIERldCBo5HIga29tbWFuZG90IORyIGFuduRuZGJhcnQgb20gZHUgdGFyIGJvcnQgZW4gcGFydGl0aW9uIGF2ICIKKyJtaXNzdGFnLlxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE1MgorbXNnaWQgIm1rcGFydGZzIgorbXNnc3RyICJta3BhcnRmcyIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNTUKKyMsIGZ1enp5Cittc2dpZCAiIgorIm1rcGFydGZzIFBBUlQtVFlQRSBGUy1UWVBFIFNUQVJUIEVORCAgICAgbWFrZSBhIHBhcnRpdGlvbiB3aXRoIGEgZmlsZSBzeXN0ZW0iCittc2dzdHIgIiIKKyJta3BhcnRmcyBQQVJUSVRJT05TVFlQIEZJTFNZU1RFTVNUWVAgQtZSSkFOIFNMVVQgICBn9nIgZW4gcGFydGl0aW9uIG1lZCBldHQgIgorImZpbHN5c3RlbSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNjEKK21zZ2lkICJtb3ZlIgorbXNnc3RyICJmbHl0dGEiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTY0CisjLCBmdXp6eQorbXNnaWQgIm1vdmUgTlVNQkVSIFNUQVJUIEVORCAgICAgICAgICAgICAgICAgICAgbW92ZSBwYXJ0aXRpb24gTlVNQkVSIgorbXNnc3RyICJmbHl0dGEgVU5EUkUgU1RBUlQgW1NMVVRdICAgICAgICAgZmx5dHRhIHBhcnRpdGlvbiBVTkRSRSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNjkKK21zZ2lkICJuYW1lIgorbXNnc3RyICJuYW1uIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE3MgorIywgZnV6enkKK21zZ2lkICJuYW1lIE5VTUJFUiBOQU1FICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgcGFydGl0aW9uIE5VTUJFUiBhcyBOQU1FIgorbXNnc3RyICJuYW1uIFVORFJFIE5BTU4gICAgICAgICAgICAgICAgYmVu5G1uIHBhcnRpdGlvbiBVTkRSRSBOQU1OIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE3NworbXNnaWQgInByaW50IgorbXNnc3RyICJza3JpdiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxODAKK21zZ2lkICIiCisicHJpbnQgW2RldmljZXN8ZnJlZXxsaXN0LGFsbHxOVU1CRVJdICAgICBkaXNwbGF5IHRoZSBwYXJ0aXRpb24gdGFibGUsICIKKyJhdmFpbGFibGUgZGV2aWNlcywgZnJlZSBzcGFjZSwgYWxsIGZvdW5kIHBhcnRpdGlvbnMsIG9yIGEgcGFydGljdWxhciAiCisicGFydGl0aW9uIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTg1Cittc2dpZCAiIgorIldpdGhvdXQgYXJndW1lbnRzLCAncHJpbnQnIGRpc3BsYXlzIHRoZSBlbnRpcmUgcGFydGl0aW9uIHRhYmxlLiBIb3dldmVyIHdpdGggIgorInRoZSBmb2xsb3dpbmcgYXJndW1lbnRzIGl0IHBlcmZvcm1zIHZhcmlvdXMgb3RoZXIgYWN0aW9ucy5cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE4NworbXNnaWQgIiAgZGV2aWNlcyAgIDogZGlzcGxheSBhbGwgYWN0aXZlIGJsb2NrIGRldmljZXNcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE4OAorbXNnaWQgIiIKKyIgIGZyZWUgICAgICA6IGRpc3BsYXkgaW5mb3JtYXRpb24gYWJvdXQgZnJlZSB1bnBhcnRpdGlvbmVkIHNwYWNlIG9uIHRoZSAiCisiY3VycmVudCBibG9jayBkZXZpY2VcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE5MAorIywgZnV6enkKK21zZ2lkICIiCisiICBsaXN0LCBhbGwgOiBkaXNwbGF5IHRoZSBwYXJ0aXRpb24gdGFibGVzIG9mIGFsbCBhY3RpdmUgYmxvY2sgZGV2aWNlc1xuIgorbXNnc3RyICJza3JpdiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2EgcGFydGl0aW9uc3RhYmVsbGVuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE5MQorbXNnaWQgIiIKKyIgIE5VTUJFUiAgICA6IGRpc3BsYXkgbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIHBhcnRpY3VsYXIgIgorInBhcnRpdGlvblxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTk2Cittc2dpZCAicXVpdCIKK21zZ3N0ciAiYXZzbHV0YSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxOTkKKyMsIGZ1enp5Cittc2dpZCAicXVpdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGl0IHByb2dyYW0iCittc2dzdHIgImF2c2x1dGEgICAgICAgICAgICAgICAgICAgIGF2c2x1dGEgcHJvZ3JhbW1ldCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMDQKKyMsIGZ1enp5Cittc2dpZCAicmVzY3VlIgorbXNnc3RyICLkbmRyYV9zdG9ybGVrIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIwNworIywgZnV6enkKK21zZ2lkICIiCisicmVzY3VlIFNUQVJUIEVORCAgICAgICAgICAgICAgICAgICAgICAgICByZXNjdWUgYSBsb3N0IHBhcnRpdGlvbiBuZWFyIFNUQVJUICIKKyJhbmQgRU5EIgorbXNnc3RyICJza3JpdiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2EgcGFydGl0aW9uc3RhYmVsbGVuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIxMworbXNnaWQgInJlc2l6ZSIKK21zZ3N0ciAi5G5kcmFfc3RvcmxlayIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMTYKKyMsIGZ1enp5Cittc2dpZCAiIgorInJlc2l6ZSBOVU1CRVIgU1RBUlQgRU5EICAgICAgICAgICAgICAgICAgcmVzaXplIHBhcnRpdGlvbiBOVU1CRVIgYW5kIGl0cyAiCisiZmlsZSBzeXN0ZW0iCittc2dzdHIgIiIKKyLkbmRyYV9zdG9ybGVrIFVORFJFIFNUQVJUIFNMVVQgIORuZHJhIHN0b3JsZWsgcOUgZmlsc3lzdGVtZXQgcOUgcGFydGl0aW9uICIKKyJVTkRSRSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMjQKK21zZ2lkICJybSIKK21zZ3N0ciAidGFfYm9ydCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMjcKKyMsIGZ1enp5Cittc2dpZCAicm0gTlVNQkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcGFydGl0aW9uIE5VTUJFUiIKK21zZ3N0ciAidGFfYm9ydCBVTkRSRSAgICAgICAgICAgICAgIHRhIGJvcnQgcGFydGl0aW9uIFVORFJFIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIzMgorbXNnaWQgInNlbGVjdCIKK21zZ3N0ciAiduRsaiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMzUKKyMsIGZ1enp5Cittc2dpZCAic2VsZWN0IERFVklDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9vc2UgdGhlIGRldmljZSB0byBlZGl0IgorbXNnc3RyICJ25GxqIEVOSEVUICAgICAgICAgICAgICAgICAgICAgduRsaiBlbmhldCBhdHQgZvZy5G5kcmEiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjQwCittc2dpZCAic2V0IgorbXNnc3RyICJz5HR0IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI0MworIywgZnV6enkKK21zZ2lkICIiCisic2V0IE5VTUJFUiBGTEFHIFNUQVRFICAgICAgICAgICAgICAgICAgICBjaGFuZ2UgdGhlIEZMQUcgb24gcGFydGl0aW9uIE5VTUJFUiIKK21zZ3N0ciAic+R0dCBVTkRSRSBGTEFHR0EgVElMTFNUxU5EICAgICAgICDkbmRyYSBlbiBmbGFnZ2EgcOUgcGFydGl0aW9uIFVORFJFIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI0OQorbXNnaWQgInRvZ2dsZSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI1MgorbXNnaWQgIiIKKyJ0b2dnbGUgW05VTUJFUiBbRkxBR11dICAgICAgICAgICAgICAgICAgIHRvZ2dsZSB0aGUgc3RhdGUgb2YgRkxBRyBvbiAiCisicGFydGl0aW9uIE5VTUJFUiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI1OAorIywgZnV6enkKK21zZ2lkICJ1bml0IgorbXNnc3RyICJhdnNsdXRhIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI2MQorIywgZnV6enkKK21zZ2lkICJ1bml0IFVOSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCB0aGUgZGVmYXVsdCB1bml0IHRvIFVOSVQiCittc2dzdHIgInNrcml2ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzYSBwYXJ0aXRpb25zdGFiZWxsZW4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjY2Cittc2dpZCAidmVyc2lvbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI2OQorbXNnaWQgIiIKKyJ2ZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXkgdGhlIHZlcnNpb24gbnVtYmVyIGFuZCAiCisiY29weXJpZ2h0IGluZm9ybWF0aW9uIG9mIEdOVSBQYXJ0ZWQiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNzMKK21zZ2lkICIiCisiJ3ZlcnNpb24nIGRpc3BsYXlzIGNvcHlyaWdodCBhbmQgdmVyc2lvbiBpbmZvcm1hdGlvbiBjb3JyZXNwb25kaW5nIHRvIHRoaXMgIgorImNvcHkgb2YgR05VIFBhcnRlZFxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMzM1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLWhsbXN2XSBbREVWSUNFIFtDT01NQU5EIFtQQVJBTUVURVJTXV0uLi5dXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIzNzkKK21zZ2lkICJObyBkZXZpY2UgZm91bmQiCittc2dzdHIgIkluZ2VuIGVuaGV0IGhpdHRhZGVzIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjQxMgorbXNnaWQgIldBUk5JTkc6IFlvdSBhcmUgbm90IHN1cGVydXNlci4gIFdhdGNoIG91dCBmb3IgcGVybWlzc2lvbnMuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyNDUwCittc2dpZCAiWW91IG1heSBuZWVkIHRvIHVwZGF0ZSAvZXRjL2ZzdGFiLlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjE2MAorbXNnaWQgIldlbGNvbWUgdG8gR05VIFBhcnRlZCEgVHlwZSAnaGVscCcgdG8gdmlldyBhIGxpc3Qgb2YgY29tbWFuZHMuXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6MTYzCisjLCBmdXp6eQorbXNnaWQgIiIKKyJVc2FnZTogcGFydGVkIFtPUFRJT05dLi4uIFtERVZJQ0UgW0NPTU1BTkQgW1BBUkFNRVRFUlNdLi4uXS4uLl1cbiIKKyJBcHBseSBDT01NQU5EcyB3aXRoIFBBUkFNRVRFUlMgdG8gREVWSUNFLiAgSWYgbm8gQ09NTUFORChzKSBhcmUgZ2l2ZW4sIHJ1biAiCisiaW5cbiIKKyJpbnRlcmFjdGl2ZSBtb2RlLlxuIgorbXNnc3RyICIiCisiQW525G5kbmluZzogcGFydGVkIFtGTEFHR0FdLi4uIFtFTkhFVCBbS09NTUFORE8gW1BBUkFNRVRSQVJdLi4uXS4uLl1cbiIKKyJL9nIgS09NTUFORE8gbWVkIFBBUkFNRVRSQVJOQSBw5SBFTkhFVC4gT20gaW5nYSBLT01NQU5ET04gYW5nZXMga/Zyc1xuIgorInByb2dyYW1tZXQgaSBpbnRlcmFrdGl2dCBs5GdlLlxuIgorCisjOiBwYXJ0ZWQvdWkuYzoxNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlxuIgorIllvdSBmb3VuZCBhIGJ1ZyBpbiBHTlUgUGFydGVkISBIZXJlJ3Mgd2hhdCB5b3UgaGF2ZSB0byBkbzpcbiIKKyJcbiIKKyJEb24ndCBwYW5pYyEgVGhlIGJ1ZyBoYXMgbW9zdCBsaWtlbHkgbm90IGFmZmVjdGVkIGFueSBvZiB5b3VyIGRhdGEuXG4iCisiSGVscCB1cyB0byBmaXggdGhpcyBidWcgYnkgZG9pbmcgdGhlIGZvbGxvd2luZzpcbiIKKyJcbiIKKyJDaGVjayB3aGV0aGVyIHRoZSBidWcgaGFzIGFscmVhZHkgYmVlbiBmaXhlZCBieSBjaGVja2luZ1xuIgorInRoZSBsYXN0IHZlcnNpb24gb2YgR05VIFBhcnRlZCB0aGF0IHlvdSBjYW4gZmluZCBhdDpcbiIKKyJcbiIKKyJcdGh0dHA6Ly9mdHAuZ251Lm9yZy9nbnUvcGFydGVkL1xuIgorIlxuIgorIlBsZWFzZSBjaGVjayB0aGlzIHZlcnNpb24gcHJpb3IgdG8gYnVnIHJlcG9ydGluZy5cbiIKKyJcbiIKKyJJZiB0aGlzIGhhcyBub3QgYmVlbiBmaXhlZCB5ZXQgb3IgaWYgeW91IGRvbid0IGtub3cgaG93IHRvIGNoZWNrLFxuIgorInBsZWFzZSB2aXNpdCB0aGUgR05VIFBhcnRlZCB3ZWJzaXRlOlxuIgorIlxuIgorIlx0aHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3BhcnRlZFxuIgorIlxuIgorImZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLlxuIgorIlxuIgorIllvdXIgcmVwb3J0IHNob3VsZCBjb250YWluIHRoZSB2ZXJzaW9uIG9mIHRoaXMgcmVsZWFzZSAoJXMpXG4iCisiYWxvbmcgd2l0aCB0aGUgZXJyb3IgbWVzc2FnZSBiZWxvdywgdGhlIG91dHB1dCBvZlxuIgorIlxuIgorIlx0cGFydGVkIERFVklDRSB1bml0IGNvIHByaW50IHVuaXQgcyBwcmludFxuIgorIlxuIgorImFuZCB0aGUgZm9sbG93aW5nIGhpc3Rvcnkgb2YgY29tbWFuZHMgeW91IGVudGVyZWQuXG4iCisiQWxzbyBpbmNsdWRlIGFueSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHlvdXIgc2V0dXAgeW91XG4iCisiY29uc2lkZXIgaW1wb3J0YW50LlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjI4NAorbXNnaWQgIiIKKyJcbiIKKyJDb21tYW5kIEhpc3Rvcnk6XG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6MzY2Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBTRUdWX01BUEVSUiAoQWRkcmVzcyBub3QgbWFwcGVkIHRvIG9iamVjdClcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzozNzIKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IFNFR1ZfQUNDRVJSIChJbnZhbGlkIHBlcm1pc3Npb25zIGZvciBtYXBwZWQgb2JqZWN0KVxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjM3NworbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogQSBnZW5lcmFsIFNJR1NFR1Ygc2lnbmFsIHdhcyBlbmNvdW50ZXJlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0MTAKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9JTlRESVYgKEludGVnZXI6IGRpdmlkZSBieSB6ZXJvKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0MTUKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9JTlRPVkYgKEludGVnZXI6IG92ZXJmbG93KSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0MjAKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRESVYgKEZsb2F0OiBkaXZpZGUgYnkgemVybykiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDI1Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxUT1ZGIChGbG9hdDogb3ZlcmZsb3cpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQzMAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0ZMVFVORCAoRmxvYXQ6IHVuZGVyZmxvdykiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDM1Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxUUkVTIChGbG9hdDogaW5leGFjdCByZXN1bHQpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQ0MAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0ZMVElOViAoRmxvYXQ6IGludmFsaWQgb3BlcmF0aW9uKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0NDUKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRTVUIgKEZsb2F0OiBzdWJzY3JpcHQgb3V0IG9mIHJhbmdlKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0NTAKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEEgZ2VuZXJhbCBTSUdGUEUgc2lnbmFsIHdhcyBlbmNvdW50ZXJlZC4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDgzCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfSUxMT1BDIChJbGxlZ2FsIE9wY29kZSkiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDg4Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfSUxMT1BOIChJbGxlZ2FsIE9wZXJhbmQpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQ5MworbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX0lMTEFEUiAoSWxsZWdhbCBhZGRyZXNzaW5nIG1vZGUpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQ5OAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX0lMTFRSUCAoSWxsZWdhbCBUcmFwKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo1MDMKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9QUlZPUEMgKFByaXZpbGVnZWQgT3Bjb2RlKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo1MDgKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9QUlZSRUcgKFByaXZpbGVnZWQgUmVnaXN0ZXIpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjUxMworbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX0NPUFJPQyAoQ29wcm9jZXNzb3IgRXJyb3IpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjUxOAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX0JBRFNUSyAoSW50ZXJuYWwgU3RhY2sgRXJyb3IpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjUyMworbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogQSBnZW5lcmFsIFNJR0lMTCBzaWduYWwgd2FzIGVuY291bnRlcmVkLiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzoxMDI0CisjLCBmdXp6eQorbXNnaWQgIkV4cGVjdGluZyBhIHBhcnRpdGlvbiBudW1iZXIuIgorbXNnc3RyICJN5WxwYXJ0aXRpb25lbiDkciBpIGJydWsuIgorCisjOiBwYXJ0ZWQvdWkuYzoxMDMzCittc2dpZCAiUGFydGl0aW9uIGRvZXNuJ3QgZXhpc3QuIgorbXNnc3RyICJQYXJ0aXRpb25lbiBmaW5ucyBpbnRlLiIKKworIzogcGFydGVkL3VpLmM6MTA1MworIywgZnV6enkKK21zZ2lkICJFeHBlY3RpbmcgYSBmaWxlIHN5c3RlbSB0eXBlLiIKK21zZ3N0ciAiT2vkbmQgZmlsc3lzdGVtc3R5cC4iCisKKyM6IHBhcnRlZC91aS5jOjEwNjAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gZmlsZSBzeXN0ZW0gdHlwZSBcIiVzXCIuIgorbXNnc3RyICJPa+RuZCBmaWxzeXN0ZW1zdHlwLiIKKworIzogcGFydGVkL3VpLmM6MTA4MAorbXNnaWQgIkV4cGVjdGluZyBhIGRpc2sgbGFiZWwgdHlwZS4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6MTE3OAorIywgZnV6enkKK21zZ2lkICJDYW4ndCBjcmVhdGUgYW55IG1vcmUgcGFydGl0aW9ucy4iCittc2dzdHIgIkthbiBpbnRlIGzkZ2dhIHRpbGwg5G5udSBlbiBwYXJ0aXRpb24uIgorCisjOiBwYXJ0ZWQvdWkuYzoxMTg4CisjLCBmdXp6eQorbXNnaWQgIkV4cGVjdGluZyBhIHBhcnRpdGlvbiB0eXBlLiIKK21zZ3N0ciAiTeVscGFydGl0aW9uZW4gZmlubnMgaW50ZS4iCisKKyM6IHBhcnRlZC91aS5jOjEzMTUKK21zZ2lkICJvbiIKK21zZ3N0ciAicOUiCisKKyM6IHBhcnRlZC91aS5jOjEzMTYKK21zZ2lkICJvZmYiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6MTQzMQorbXNnaWQgIk9QVElPTnM6IgorbXNnc3RyICJGTEFHR09SOiIKKworIzogcGFydGVkL3VpLmM6MTQzNgorbXNnaWQgIkNPTU1BTkRzOiIKK21zZ3N0ciAiS09NTUFORE9OOiIKKworIzogcGFydGVkL3VpLmM6MTQ0NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVXNpbmcgJXNcbiIKK21zZ3N0ciAiIgorIlxuIgorIkFuduRuZGVyICVzXG4iCisKKyM6IHBhcnRlZC91aS5jOjE1MTkKK21zZ2lkICJUaGlzIGNvbW1hbmQgZG9lcyBub3QgbWFrZSBzZW5zZSBpbiBub24taW50ZXJhY3RpdmUgbW9kZS5cbiIKK21zZ3N0ciAiIgorCisjfiBtc2dpZCAid2hlcmUgbmVjZXNzYXJ5LCBwcm9tcHRzIGZvciB1c2VyIGludGVydmVudGlvbiIKKyN+IG1zZ3N0ciAiZORyIHPlIORyIG72ZHbkbmRpZ3QsIGZy5WdhciBhbnbkbmRhcmVuIG9tIGFsdGVybmF0aXYiCisKKyN+IG1zZ2lkICIiCisjfiAiVGhlIHNlY3RvciBzaXplIG9uICVzIGlzICVkIGJ5dGVzLiAgUGFydGVkIGlzIGtub3duIG5vdCB0byB3b3JrIHByb3Blcmx5ICIKKyN+ICJ3aXRoIGRyaXZlcyB3aXRoIHNlY3RvciBzaXplcyBvdGhlciB0aGFuIDUxMiBieXRlcyIKKyN+IG1zZ3N0ciAiIgorI34gIlNla3RvcnN0b3JsZWtlbiBw5SAlcyDkciAlZCBieXRlLiBQYXJ0ZWQgZnVuZ2VyYXIgaW50ZSBicmEgcOUgc2tpdm9yIG1lZCAiCisjfiAiYW5uYW4gc2VrdG9yc3RvcmxlayDkbiA1MTIgYnl0ZSIKKworI34gbXNnaWQgIkNvdWxkIG5vdCByZWFkIGdlb21ldHJ5IG9mICVzIC0gJXMuIgorI34gbXNnc3RyICJLdW5kZSBpbnRlIGzkc2EgZ2VvbWV0cmluIHDlICVzIC0gJXMuIgorCisjfiBtc2dpZCAiRGV2aWNlICVzIGhhcyBkb2RnZXkgZ2VvbWV0cnkuIgorI34gbXNnc3RyICJFbmhldGVuICVzIGhhciBt5HJrbGlnIGdlb21ldHJpLiIKKworI34gbXNnaWQgInVua25vd24iCisjfiBtc2dzdHIgIm9r5G5kIgorCisjID8/CisjfiBtc2dpZCAiVW5rbm93biBTQ1NJIgorI34gbXNnc3RyICJPa+RuZCBTQ1NJIgorCisjfiBtc2dpZCAiRGV2aWNlICVzIGlzIG5laXRoZXIgYSBTQ1NJIG5vciBJREUgZHJpdmUuIgorI34gbXNnc3RyICJFbmhldGVuICVzIORyIHZhcmtlbiBlbiBTQ1NJLSBlbGxlciBJREUtZW5oZXQuIgorCisjfiBtc2dpZCAiIgorI34gIlRoZSBwYXJ0aXRpb24gdGFibGUgb24gJXMgaXMgaW5jb25zaXN0ZW50LiAgVGhlcmUgYXJlIG1hbnkgcmVhc29ucyB3aHkgIgorI34gInRoaXMgbWlnaHQgYmUgdGhlIGNhc2UuICBIb3dldmVyLCB0aGUgbW9zdCBsaWtlbHkgcmVhc29uIGlzIHRoYXQgTGludXggIgorI34gImRldGVjdGVkIHRoZSBCSU9TIGdlb21ldHJ5IGZvciAlcyBpbmNvcnJlY3RseS4gIEdOVSBQYXJ0ZWQgc3VzcGVjdHMgdGhlICIKKyN+ICJyZWFsIGdlb21ldHJ5IHNob3VsZCBiZSAlZC8lZC8lZCAobm90ICVkLyVkLyVkKS4gIFlvdSBzaG91bGQgY2hlY2sgd2l0aCAiCisjfiAieW91ciBCSU9TIGZpcnN0LCBhcyB0aGlzIG1heSBub3QgYmUgY29ycmVjdC4gIFlvdSBjYW4gaW5mb3JtIExpbnV4IGJ5ICIKKyN+ICJhZGRpbmcgdGhlIHBhcmFtZXRlciAlcz0lZCwlZCwlZCB0byB0aGUgY29tbWFuZCBsaW5lLiAgU2VlIHRoZSBMSUxPIG9yICIKKyN+ICJHUlVCIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uICBJZiB5b3UgdGhpbmsgUGFydGVkJ3Mgc3VnZ2VzdGVkICIKKyN+ICJnZW9tZXRyeSBpcyBjb3JyZWN0LCB5b3UgbWF5IHNlbGVjdCBJZ25vcmUgdG8gY29udGludWUgKGFuZCBmaXggTGludXggIgorI34gImxhdGVyKS4gIE90aGVyd2lzZSwgc2VsZWN0IENhbmNlbCAoYW5kIGZpeCBMaW51eCBhbmQvb3IgdGhlIEJJT1Mgbm93KS4iCisjfiBtc2dzdHIgIiIKKyN+ICJQYXJ0aXRpb25zdGFiZWxsZW4gcOUgJXMg5HIgaW50ZSBrb25zaXN0ZW50LiBEZXQga2FuIGZpbm5zIG3lbmdhIHNr5GwgIgorI34gInRpbGwgZGV0dGEuIERldCBtZXN0IHRyb2xpZ2Egc2vkbGV0IORyIGF0dCBMaW51eCBs5HN0ZSBmZWwgIgorI34gImdlb21ldHJpaW5mb3JtYXRpb24gZvZyICVzIGkgQklPUy4gR05VIFBhcnRlZCBtaXNzdORua2VyIGF0dCBkZW4gcmlrdGlnYSAiCisjfiAiZ2VvbWV0cmluIGL2ciB2YXJhICVkLyVkLyVkIChpbnRlICVkLyVkLyVkKS4gRHUgYvZyIGb2cnN0IGtvbnRyb2xsZXJhICIKKyN+ICJkaXR0IEJJT1MgZWZ0ZXJzb20gZGV0IGthbiB2YXJhIGZlbC4gRHUga2FuIGluZm9ybWVyYSBMaW51eCBnZW5vbSBhdHQgIgorI34gImzkZ2dhIHRpbGwgcGFyYW1ldGVybiAlcz0lZCwlZCwlZCBw5SBrb21tYW5kb3JhZGVuLiBNZXIgaW5mb3JtYXRpb24gZmlubnMgIgorI34gImkgbWFudWFsZXJuYSBm9nIgTElMTyBlbGxlciBHUlVCLiBPbSBkdSB0cm9yIGF0dCBQYXJ0ZWRzIGb2cmVzbGFnbmEgIgorI34gImdlb21ldHJpIORyIHJpa3RpZyBrYW4gZHUgduRsamEgSWdub3JlcmEgZvZyIGF0dCBmb3J0c+R0dGEgKG9jaCBvcmRuYSAiCisjfiAidGlsbCBMaW51eCBzZW5hcmUpLiBBbm5hcnMsIHbkbGogQXZicnl0IChvY2ggb3JkbmEgdGlsbCBMaW51eCBvY2gvZWxsZXIgIgorI34gIkJJT1MgbnUpLiIKKworI34gbXNnaWQgIiIKKyN+ICJUaGUgcGFydGl0aW9uIHRhYmxlIG9uICVzIGlzIGluY29uc2lzdGVudC4gIFRoZXJlIGFyZSBtYW55IHJlYXNvbnMgd2h5ICIKKyN+ICJ0aGlzIG1pZ2h0IGJlIHRoZSBjYXNlLiAgT2Z0ZW4sIHRoZSByZWFzb24gaXMgdGhhdCBMaW51eCBkZXRlY3RlZCB0aGUgIgorI34gIkJJT1MgZ2VvbWV0cnkgaW5jb3JyZWN0bHkuICBIb3dldmVyLCB0aGlzIGRvZXMgbm90IGFwcGVhciB0byBiZSB0aGUgY2FzZSAiCisjfiAiaGVyZS4gIEl0IGlzIHNhZmUgdG8gaWdub3JlLGJ1dCBpZ25vcmluZyBtYXkgY2F1c2UgKGZpeGFibGUpIHByb2JsZW1zICIKKyN+ICJ3aXRoIHNvbWUgYm9vdCBsb2FkZXJzLiIKKyN+IG1zZ3N0ciAiIgorI34gIlBhcnRpdGlvbnN0YWJlbGxlbiBw5SAlcyDkciBpbnRlIGtvbnNpc3RlbnQuIERldCBrYW4gZmlubmFzIGZsZXJhICIKKyN+ICJhbmxlZG5pbmdhciB0aWxsIGRldC4gT2Z0YSDkciBhbmxlZG5pbmdlbiBhdHQgTGludXggaGFyIGzkc3QgIgorI34gImdlb21ldHJpaW5mb3JtYXRpb25lbiBpIEJJT1MgZmVsYWt0aWd0LiBEZXQgdmVya2FyIGRvY2sgaW50ZSB2YXJhICIKKyN+ICJwcm9ibGVtZXQgaORyLiBEdSBrYW4gaWdub3JlcmEgZmVsZXQsIG1lbiBkZXQga2FuIHVwcHN05SBwcm9ibGVtIChzb20ga2FuICIKKyN+ICLldGfkcmRhcykgbWVkIHZpc3NhIHN0YXJ0cHJvZ3JhbS4iCisKKyN+IG1zZ2lkICIiCisjfiAiVW5hYmxlIHRvIGFsaWduIHBhcnRpdGlvbiBwcm9wZXJseS4gIFRoaXMgcHJvYmFibHkgbWVhbnMgdGhhdCBhbm90aGVyICIKKyN+ICJwYXJ0aXRpb25pbmcgdG9vbCBnZW5lcmF0ZWQgYW4gaW5jb3JyZWN0IHBhcnRpdGlvbiB0YWJsZSwgYmVjYXVzZSBpdCAiCisjfiAiZGlkbid0IGhhdmUgdGhlIGNvcnJlY3QgQklPUyBnZW9tZXRyeS4gIEl0IGlzIHNhZmUgdG8gaWdub3JlLGJ1dCBpZ25vcmluZyAiCisjfiAibWF5IGNhdXNlIChmaXhhYmxlKSBwcm9ibGVtcyB3aXRoIHNvbWUgYm9vdCBsb2FkZXJzLiIKKyN+IG1zZ3N0ciAiIgorI34gIkt1bmRlIGludGUgbORnZ2EgcGFydGl0aW9uZW4gcOUgauRtbiBjeWxpbmRlcmdy5G5zLiBEZXQgYmV0eWRlciBvZnRhIGF0dCAiCisjfiAiZXR0IGFubmF0IHBhcnRpdGlvbnN2ZXJrdHlnIHNrcmV2IGVuIG9naWx0aWcgcGFydGl0aW9uc3RhYmVsbCwgYmVyb2VuZGUgIgorI34gInDlIGZlbGFrdGlnIGdlb210cmlpbmZvcm1hdGlvbiBmcuVuIGRpdHQgQklPUy4gRHUga2FuIGlnbm9yZXJhIGZlbGV0LCBtZW4gIgorI34gImRldCBrYW4gdXBwc3TlIHByb2JsZW0gKHNvbSBrYW4g5XRn5HJkYXMpIG1lZCB2aXNzYSBzdGFydHByb2dyYW0uIgorCisjfiBtc2dpZCAiQ2FuJ3Qgc2V0IG5vbi1MaW51eCBwYXJ0aXRpb25zIGFzIGEgcm9vdCBkZXZpY2UuIgorI34gbXNnc3RyICJLYW4gaW50ZSBz5HR0YSBhbmRyYSBwYXJ0aXRpb25lciDkbiBMaW51eCBlZ25hIHNvbSByb3RlbmhldC4iCisKKyN+IG1zZ2lkICJDYW4ndCBzZXQgbm9uLUxpbnV4IHBhcnRpdGlvbnMgYXMgYSBzd2FwIGRldmljZS4iCisjfiBtc2dzdHIgIiIKKyN+ICJLYW4gaW50ZSBz5HR0YSBwYXJ0aXRpb24gc29tIGludGUgZmlubnMgZvZyIExpbnV4IHNvbSB25HhsaW5nc2VuaGV0LiIKKworI34gbXNnaWQgIk5vIGdldF9yZXNpemVfY29uc3RyYWludCBmb3IgJXMhIgorI34gbXNnc3RyICJnZXRfcmVzaXplX2NvbnN0cmFpbnQgc2FrbmFzIGb2ciAlcyEiCisKKyN+IG1zZ2lkICJUaGUgJXMgZmlsZSBzeXN0ZW0gY29kZSBkb2Vzbid0IHN1cHBvcnQgJXMgZGlzayBsYWJlbHMuIgorI34gbXNnc3RyICJLb2RlbiBm9nIgZmlsc3lzdGVtZXQgJXMgc3T2ZGVyIGludGUgZmlsYWxsb2tlcmluZ3N0YWJlbGxlciBm9nIgJXMuIgorCisjfiBtc2dpZCAiQ3JlYXRpbmcgbmV3ICVzIGRpc2tsYWJlbHMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCisjfiBtc2dzdHIgIiIKKyN+ICJTdPZkIGb2ciBhdHQgc2thcGEgbnlhIHBhcnRpdGlvbnN0YWJlbGxlciBhdiB0eXBlbiAlcyDkciBpbnRlICIKKyN+ICJpbXBsZW1lbnRlcmF0IORuLiIKKworI34gbXNnaWQgIlRoZSBjb2RlIHRvIHdyaXRlIHRoZSBwYXJ0aXRpb24gdGFibGUgaGFzbid0IGJlZW4gd3JpdHRlbiBmb3IgJXMgeWV0IgorI34gbXNnc3RyICIiCisjfiAiU3T2ZCBm9nIgYXR0IHNrcml2YSBwYXJ0aXRpb25zdGFiZWxsIGb2ciAlcyDkciBpbnRlIGltcGxlbWVudGVyYXQg5G4uIgorCisjfiBtc2dpZCAiRXJyb3IgcmVhZGluZyAlcyAoJXMpIHRvIGRldGVybWluZSBpZiBwYXJ0aXRpb24gaXMgbW91bnRlZC4iCisjfiBtc2dzdHIgIiIKKyN+ICJFdHQgZmVsIHVwcHN0b2QgbuRyICVzICglcykgc2t1bGxlIGzkc2FzIGb2ciBhdHQgYXZn9nJhIG9tIHBhcnRpdGlvbmVuIORyICIKKyN+ICJtb250ZXJhZC4iCisKKyN+IG1zZ2lkICJUaGUgbmV3IHBhcnRpdGlvbiBvdmVybGFwcyB3aXRoIGFub3RoZXIgcGFydGl0aW9uLiIKKyN+IG1zZ3N0ciAiRGVuIG55YSBwYXJ0aXRpb25lbiD2dmVybGFwcGFyIG1lZCBlbiBhbm5hbi4iCisKKyN+IG1zZ2lkICJDYW4ndCBncm93IGEgcGFydGl0aW9uIG9udG8gdXNlZCBzcGFjZS4iCisjfiBtc2dzdHIgIkthbiBpbnRlIGzldGEgZW4gcGFydGl0aW9uIHbkeGEgdXQgcOUgYW525G50IHV0cnltbWUuIgorCisjfiBtc2dpZCAiQXR0ZW1wdCB0byByZWFkIHNlY3RvcnMgJWxkLSVsZCBvdXRzaWRlIG9mIHBhcnRpdGlvbiBvbiAlcyIKKyN+IG1zZ3N0ciAiRvZyc/ZrdGUgbORzYSBzZWt0b3Jlcm5hICVsZC0lbGQgdXRhbmb2ciBwYXJ0aXRpb25lbiBw5SAlcyIKKworI34gbXNnaWQgIiIKKyN+ICJUaGlzIGV4dDIgZmlsZXN5c3RlbSBoYXMgYSByYXRoZXIgc3RyYW5nZSBsYXlvdXQhICBQbGVhc2UgdXNlIGR1bXBlMmZzIG9uICIKKyN+ICJ0aGlzIGZpbGVzeXN0ZW0gYW5kIHNlbmQgaXQgdG8gPGJ1eXRlbmhAZ251Lm9yZz4uIEkgd29uJ3QgcmVzaXplIGl0LCAiCisjfiAic29ycnkuIgorI34gbXNnc3RyICIiCisjfiAiRGV0IGjkciBmaWxzeXN0ZW1ldCAoZXh0MikgaGFyIGVuIGdhbnNrYSBrb25zdGlnIHVwcGzkZ2duaW5nISBBbnbkbmQgIgorI34gImR1bXBlMmZzIHDlIGZpbHN5c3RlbWV0IG9jaCBza2lja2EgcmVzdWx0YXRldCB0aWxsIDxidXl0ZW5oQGdudS5vcmc+LiAiCisjfiAiU3Rvcmxla2VuIGtvbW1lciBpbnRlIGF0dCDkbmRyYXMuIgorCisjfiBtc2dpZCAiSW5zYW5lISAgJWQgY2x1c3RlcnMhIgorI34gbXNnc3RyICJLb25zdGlndCEgJWQgY2x1c3RlcnMhIgorCisjfiBtc2dpZCAiIgorI34gIlRoZSBmaWxlc3lzdGVtIGlzIGdvaW5nIHRvIGJlIHRvbyBiaWcgZm9yIEZBVDE2LCBzbyBGQVQzMiB3aWxsIGJlIHVzZWQuICAiCisjfiAiVGhpcyBpcyBub3QgY29tcGF0aWJsZSB3aXRoIE1TLURPUywgZWFybHkgdmVyc2lvbnMgb2YgTVMtV2luZG93cyA5NSBhbmQgIgorI34gIldpbmRvd3MgTlQuICBJZiB5b3UgdXNlIHRoZXNlIG9wZXJhdGluZyBzeXN0ZW1zLCB0aGVuIHNlbGVjdCBjYW5jZWwsIGFuZCAiCisjfiAiY3JlYXRlIGEgc21hbGxlciBwYXJ0aXRpb24uICBJZiB5b3Ugb25seSB1c2UgTGludXgsIEJTRCwgTVMgV2luZG93cyA5OCAiCisjfiAiYW5kL29yIE1TIFdpbmRvd3MgOTUgQiwgdGhlbiBzZWxlY3QgT0suIgorI34gbXNnc3RyICIiCisjfiAiRmlsc3lzdGVtIGtvbW1lciBhdHQgbGJpIGb2ciBzdG9ydCBm9nIgRkFUMTYsIHPlIEZBVDMyIGtvbW1lciBhdHQgIgorI34gImFuduRuZGFzLiBEZXQg5HIgaW50ZSBrb21wYXRpYmVsdCBtZWQgTVMtRE9TLCB0aWRpZ2EgdmVyc2lvbmVyIGF2IE1TLSIKKyN+ICJXaW5kb3dzIDk1IGVsbGVyIFdpbmRvd3MgTlQuIE9tIGR1IGFuduRuZGVyIGRlc3NhIG9wZXJhdGl2c3lzdGVtLCB25GxqICIKKyN+ICJhdmJyeXQgb2NoIHNrYXBhIGVuIG1pbmRyZSBwYXJ0aXRpb24uIE9tIGR1IGVuZGFzdCBhbnbkbmRlciBMaW51eCwgQlNELCAiCisjfiAiTVMgV2luZG93cyA5OCBvY2gvZWxsZXIgTVMgV2luZG93cyA5NSBCLCB25GxqIE9LLiIKKworI34gbXNnaWQgIldlaXJkOiBmYXRfY2FsY19zaXplcygpIGZhaWxlZCBmb3IgRkFUMzIhIgorI34gbXNnc3RyICJLb25zdGlndDogZmF0X2NhbGNfc2l6ZXMoKSBtaXNzbHlja2FkZXMgZvZyIEZBVDMyISIKKworI34gbXNnaWQgIiIKKyN+ICJXb3VsZCB5b3UgbGlrZSB0byB1c2UgRkFUMzIgZm9yIHRoaXMgZmlsZXN5c3RlbT8gIEl0IGlzIG11Y2ggbW9yZSAiCisjfiAiZWZmaWNpZW50IHdpdGggeW91ciBkaXNrIHNwYWNlLCBidXQgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBlYXJseSB2ZXJzaW9ucyAiCisjfiAib2YgV2luZG93cyA5NSBhbmQgV2luZG93cyBOVC4gIE9ubHkgc2VsZWN0IHllcyBpZiB5b3Ugb25seSB1c2UgTGludXgsICIKKyN+ICJCU0QsIE1TIFdpbmRvd3MgOTggYW5kL29yIE1TIFdpbmRvd3MgOTUgQi4iCisjfiBtc2dzdHIgIiIKKyN+ICJWaWxsIGR1IGFuduRuZGEgRkFUMzIgc29tIGZpbHN5c3RlbT8gRGV0IORyIG15Y2tldCBtZXIgZWZmZWt0aXZ0IG1lZCAiCisjfiAic2tpdnV0cnltbWV0LCBtZW4gZGV0IORyIGludGUga29tcGF0aWJlbHQgbWVkIHRpZGlnYSB2ZXJzaW9uZXIgYXYgV2luZG93cyAiCisjfiAiOTUgZWxsZXIgV2luZG93cyBOVC4gVuRsaiBiYXJhIEpBIG9tIGR1IGVuZGFzdCBhbnbkbmRlciBMaW51eCwgQlNELCBNUyAiCisjfiAiV2luZG93cyA5OCBvY2gvZWxsZXIgTVMgV2luZG93cyA5NSBCLiIKKworI34gbXNnaWQgIiIKKyN+ICJGaWxlIHN5c3RlbSBkb2Vzbid0IGhhdmUgZXhwZWN0ZWQgc2l6ZXMgZm9yIFdpbmRvd3MgdG8gbGlrZSBpdC4gIE51bWJlciAiCisjfiAib2YgY2x1c3RlcnMgaXMgJWQgKCVkIGV4cGVjdGVkKTsgc2l6ZSBvZiBGQVRzIGlzICVkIHNlY3RvcnMgKCVkIGV4cGVjdGVkKS4iCisjfiBtc2dzdHIgIiIKKyN+ICJGaWxzeXN0ZW1ldCBoYXIgaW50ZSBlbiBzdG9ybGVrIHNvbSBXaW5kb3dzIGdpbGxhci4gQW50YWxldCBrbHVzdGVyIORyICVkICIKKyN+ICIoJWQgZvZyduRudGFzKTsgc3Rvcmxla2VuIHDlIEZBVDphcm5hIORyICVkIHNla3RvcmVyICglZCBm9nJ25G50YXMpLiIKKworI34gbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyBhbiBpbnZhbGlkIHNpZ25hdHVyZSBmb3IgYSBGQVQgZmlsZSBzeXN0ZW1zLiIKKyN+IG1zZ3N0ciAiRmlsc3lzdGVtZXQgaGFyIGVuIG9naWx0aWcgc2lnbmF0dXIgZvZyIGZpbHN5c3RlbSBhdiB0eXBlbiBGQVQuIgorCisjfiBtc2dpZCAiIgorI34gIlBhcnRpdGlvbiBzaXplICglbGQgc2VjdG9ycykgYW5kIGZpbGVzeXN0ZW0gc2l6ZSAoJWxkIHNlY3RvcnMpIGRvIG5vdCAiCisjfiAibWF0Y2guIgorI34gbXNnc3RyICIiCisjfiAiUGFydGl0aW9uZW5zIHN0b3JsZWsgKCVsZCBzZWt0b3Jlcikgb2NoIGZpbHN5c3RlbWV0cyBzdG9ybGVrICglbGQgIgorI34gInNla3RvcmVyKSBzdORtbWVyIGludGUg9nZlcmVucy4iCisKKyN+IG1zZ2lkICIiCisjfiAiVGhlIEZBVHMgYXJlbid0IGJpZyBlbm91Z2ggdG8gZGVzY3JpYmUgYWxsIGNsdXN0ZXJzISAgRWFjaCBGQVQgaXMgJWQgIgorI34gInNlY3RvcnMuICBUaGVyZSBhcmUgJWQgY2x1c3RlcnMsIHdoaWNoIHdvdWxkIHJlcXVpcmUgZWFjaCBGQVQgdG8gYmUgJWQgIgorI34gInNlY3RvcnMuICBUaGlzIGlzIFJFQUxMWSB3ZWlyZC4gIFlvdSBtaWdodCB3YW50IHRvIHdyaXRlIHVzIGFuIGVtYWlsOiBidWctIgorI34gInBhcnRlZEBnbnUub3JnIgorI34gbXNnc3RyICIiCisjfiAiRmlsYWxsb2tlcmluZ3N0YWJlbGxlcm5hIORyIGludGUgc3RvcmEgbm9nIGb2ciBhdHQgYmVza3JpdmEgYWxsYSBrbHVzdGVyISAiCisjfiAiVmFyamUgdGFiZWxsIORyICVkIHNla3RvcmVyLiBEZXQgZmlubnMgJWQga2x1c3Rlciwgdmlsa2V0IGlubmVi5HIgYXR0ICIKKyN+ICJ2YXJqZSB0YWJlbGwgYm9yZGUgdmFyYSAlZCBzZWt0b3Jlci4gRGV0dGEg5HIgUklLVElHVCBrb25zdGlndC4gU2tyaXYgZXR0ICIKKyN+ICJicmV2IHRpbGwgb3NzOiBidWctcGFydGVkQGdudS5vcmciCisKKyN+IG1zZ2lkICIiCisjfiAiVGhpcyBzd2FwIHBhcnRpdGlvbiBpcyBub3QgY29tcGF0aWJsZSB3aXRoIExpbnV4IHZlcnNpb24gMi4xLjExNyBvciAiCisjfiAiZWFybGllci4gIFVzZSBhIHNtYWxsZXIgcGFydGl0aW9uIChtYXhpbXVtIHNpemUgMTI4bWIpIGlmIHlvdSB3YW50IHRvIHVzZSAiCisjfiAib2xkIHZlcnNpb25zIG9mIExpbnV4LiIKKyN+IG1zZ3N0ciAiIgorI34gIkRlbiBo5HIgduR4bGluZ3NwYXJ0aXRpb25lbiDkciBpbnRlIGtvbXBhdGliZWwgbWVkIExpbnV4IHZlcnNpb24gMi4xLjExNyAiCisjfiAib2NoIHRpZGlnYXJlLiBBbnbkbmQgZW4gbWluZHJlIHBhcnRpdGlvbiAobWF4aW1hbCBzdG9ybGVrIDEyOCBNQikgb20gZHUgIgorI34gImFuduRuZGVyIORsZHJlIHZlcnNpb25lciBhdiBMaW51eC4iCisKKyN+IG1zZ2lkICJMaW51eC1zd2FwIHBhcnRpdGlvbnMgY2FuIG5vdCBiZSBoaWRkZW4gb24gbXNkb3MgZGlzayBsYWJlbHMuIgorI34gbXNnc3RyICIiCisjfiAiTGludXggduR4bGluZ3NlbmhldCBrYW4gaW50ZSBk9mxqYXMgcOUgZXR0IGZpbHN5c3RlbSBhdiB0eXBlbiBtc2Rvcy4iCisKKyN+IG1zZ2lkICJMaW51eC1zd2FwIHBhcnRpdGlvbnMgY2FuIG5vdCBiZSBib290YWJsZSBvbiBwYzk4IGRpc2sgbGFiZWxzLiIKKyN+IG1zZ3N0ciAiTGludXggduR4bGluZ3NlbmhldCDkciBpbnRlIHN0YXJ0YmFyIHDlIHBjOTguIgorCisjfiBtc2dpZCAiSEZTIHBhcnRpdGlvbnMgY2FuJ3QgYmUgaGlkZGVuIG9uIG1zZG9zIGRpc2sgbGFiZWxzLiIKKyN+IG1zZ3N0ciAiUGFydGl0aW9uZXIgYXYgdHlwIEhGUyBrYW4gaW50ZSBn9m1tYXMgcOUgZmlsc3lzdGVtIGF2IHR5cGVuIG1zZG9zLiIKKworI34gbXNnaWQgIlNUQVJUIGFuZCBFTkQgYXJlIGluIG1lZ2FieXRlc1xuIgorI34gbXNnc3RyICJC1lJKQU4gb2NoIFNMVVQgYW5nZXMgaSBtZWdhYnl0ZVxuIgorCisjfiBtc2dpZCAiRGlzayBnZW9tZXRyeSBmb3IgJXM6IDAuMDAwLSUuM2YgbWVnYWJ5dGVzXG4iCisjfiBtc2dzdHIgIkdlb21ldHJpIHDlICVzOiAwLjAwMC0lLjNmIG1lZ2FieXRlXG4iCisKKyN+IG1zZ2lkICJNaW5vciAgICBTdGFydCAgICAgICBFbmQgICAgICIKKyN+IG1zZ3N0ciAiTWlub3IgICAgIFN0YXJ0ICAgICAgIFNsdXQgICAiCisKKyN+IG1zZ2lkICJUeXBlICAgICAgIgorI34gbXNnc3RyICJUeXAgICAgICAgIgorCisjfiBtc2dpZCAiTmFtZSAgICAgICAgICAgICAgICAgICIKKyN+IG1zZ3N0ciAiTmFtbiAgICAgICAgICAgICAgICAgICIKKworI34gbXNnaWQgIiIKKyN+ICJZb3UgZm91bmQgYSBidWcgaW4gR05VIFBhcnRlZC4gIFBsZWFzZSBlbWFpbCBhIGJ1ZyByZXBvcnQgdG8gYnVnLSIKKyN+ICJwYXJ0ZWRAZ251Lm9yZyBjb250YWluaW5nIHRoZSB2ZXJzaW9uICglcyksIGFuZCB0aGUgZm9sbG93aW5nIG1lc3NhZ2U6XG4iCisjfiBtc2dzdHIgIiIKKyN+ICJEdSBoYXIgaGl0dGF0IGV0dCBmZWwgaSBHTlUgUGFydGVkLiBTa2lja2EgZW4gZmVscmFwcG9ydCB0aWxsIGJ1Zy0iCisjfiAicGFydGVkQGdudS5vcmcgaW5uZWjlbGxhbmRlIHZlcnNpb25zbnVtbWVyICglcykgb2NoIGb2bGphbmRlIG1lZGRlbGFuZGU6XG4iCisKKyN+IG1zZ2lkICIiCisjfiAiVGhlIG9wZXJhdGluZyBzeXN0ZW0gdGhpbmtzIHRoZSBnZW9tZXRyeSBvbiAlcyBpcyAlZC8lZC8lZC4gIFRoZXJlZm9yZSwgIgorI34gImN5bGluZGVyIDEwMjQgZW5kcyBhdCAlLjNmTS4gIFlvdSBzaG91bGQgY2hlY2sgdGhhdCB0aGlzIG1hdGNoZXMgdGhlIEJJT1MgIgorI34gImdlb21ldHJ5IGJlZm9yZSB1c2luZyB0aGlzIHByb2dyYW0uIgorI34gbXNnc3RyICIiCisjfiAiT3BlcmF0aXZzeXN0ZW1ldCB0cm9yIGF0dCAlcyBnZW9tZXRyaSDkciAlZC8lZC8lZC4gRORyZvZyIHNsdXRhciBjeWxpbmRlciAiCisjfiAiMTAyNCBw5SAlLjNmTS4gRHUgYvZyIGtvbnRyb2xsZXJhIGF0dCBkZXR0YSBzdORtbWVyIPZ2ZXJlbnMgbWVkICIKKyN+ICJpbmZvcm1hdGlvbmVuIGkgQklPUyBpbm5hbiBkdSBhbnbkbmRlciBwcm9ncmFtbWV0LiIKKworI34gbXNnaWQgIiIKKyN+ICJUaGUgb3BlcmF0aW5nIHN5c3RlbSB0aGlua3MgdGhlIGdlb21ldHJ5IG9uICVzIGlzICVkLyVkLyVkLiAgWW91IHNob3VsZCAiCisjfiAiY2hlY2sgdGhhdCB0aGlzIG1hdGNoZXMgdGhlIEJJT1MgZ2VvbWV0cnkgYmVmb3JlIHVzaW5nIHRoaXMgcHJvZ3JhbS4iCisjfiBtc2dzdHIgIiIKKyN+ICJPcGVyYXRpdnN5c3RlbWV0IHRyb3IgYXR0ICVzIGdlb210cmkg5HIgJWQvJWQvJWQuIER1IGL2ciBrb250cm9sbGVyYSBhdHQgIgorI34gImRldHRhIHN05G1tZXIg9nZlcmVucyBtZWQgaW5mb3JtYXRpb25lbiBpIEJJT1MgaW5uYW4gZHUgYW525G5kZXIgIgorI34gInByb2dyYW1tZXQuIgpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L3BvL3RyLmdtbyBiL3BhcnRlZC0xLjguNy9wby90ci5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZkOWU3OAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9wby90ci5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L3BvL3RyLnBvIGIvcGFydGVkLTEuOC43L3BvL3RyLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyOThkOWMKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvcG8vdHIucG8KQEAgLTAsMCArMSwzMjU2IEBACisjIHRyYW5zbGF0aW9uIG9mIHBhcnRlZC0xLjguMS5wbyB0byBUdXJraXNoCisjIEV5/HAgSGFrYW4gRHVyYW4gPGhha2FuX2R1cmFuQGhvdG1haWwuY29tPiwgMjAwMiwgMjAwNi4KKyMgcGFydGVkLTEuOC4xLnBvJ251biBU/HJr52Ug52V2aXJpc2kKKyMgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogcGFydGVkLTEuOC4xXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGJ1Zy1wYXJ0ZWRAZ251Lm9yZ1xuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDA3LTA1LTA5IDE3OjAyLTA0MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDA2LTEyLTEyIDIwOjM4LTA1MDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEV5/HAgSGFrYW4gRHVyYW4gPGhha2FuX2R1cmFuQGhvdG1haWwuY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IFR1cmtpc2ggPGdudS10ci11MTJhQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1JU08tODg1OS05XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlgtR2VuZXJhdG9yOiBLQmFiZWwgMS4xMS40XG4iCisKKyM6IGxpYi9jbG9zZW91dC5jOjc0Cittc2dpZCAid3JpdGUgZXJyb3IiCittc2dzdHIgIiIKKworIzogbGliL2Vycm9yLmM6MTI1CisjLCBmdXp6eQorbXNnaWQgIlVua25vd24gc3lzdGVtIGVycm9yIgorbXNnc3RyICJCaWxpbm1leWVuIGRvc3lhIHNpc3RlbWkgdPxy/CBcIiVzXCIuIgorCisjOiBsaWIvZ2V0b3B0LmM6NTMxIGxpYi9nZXRvcHQuYzo1NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiBgJXMnIGlzIGFtYmlndW91c1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo1ODAgbGliL2dldG9wdC5jOjU4NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIGAtLSVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjU5MyBsaWIvZ2V0b3B0LmM6NTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYCVjJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6NjQxIGxpYi9nZXRvcHQuYzo2NjAgbGliL2dldG9wdC5jOjk3NiBsaWIvZ2V0b3B0LmM6OTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYCVzJyByZXF1aXJlcyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo2OTggbGliL2dldG9wdC5jOjcwMQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5yZWNvZ25pemVkIG9wdGlvbiBgLS0lcydcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6NzA5IGxpYi9nZXRvcHQuYzo3MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVucmVjb2duaXplZCBvcHRpb24gYCVjJXMnXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjc2NCBsaWIvZ2V0b3B0LmM6NzY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbGxlZ2FsIG9wdGlvbiAtLSAlY1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo3NzMgbGliL2dldG9wdC5jOjc3NgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBvcHRpb24gLS0gJWNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6ODI4IGxpYi9nZXRvcHQuYzo4NDQgbGliL2dldG9wdC5jOjEwNDggbGliL2dldG9wdC5jOjEwNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCAtLSAlY1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo4OTcgbGliL2dldG9wdC5jOjkxMworIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIGAtVyAlcycgaXMgYW1iaWd1b3VzXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjkzNyBsaWIvZ2V0b3B0LmM6OTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYC1XICVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6CisjLiBHZXQgdHJhbnNsYXRpb25zIGZvciBvcGVuIGFuZCBjbG9zaW5nIHF1b3RhdGlvbiBtYXJrcy4KKyMuCisjLiBUaGUgbWVzc2FnZSBjYXRhbG9nIHNob3VsZCB0cmFuc2xhdGUgImAiIHRvIGEgbGVmdAorIy4gcXVvdGF0aW9uIG1hcmsgc3VpdGFibGUgZm9yIHRoZSBsb2NhbGUsIGFuZCBzaW1pbGFybHkgZm9yCisjLiAiJyIuICBJZiB0aGUgY2F0YWxvZyBoYXMgbm8gdHJhbnNsYXRpb24sCisjLiBsb2NhbGVfcXVvdGluZ19zdHlsZSBxdW90ZXMgYGxpa2UgdGhpcycsIGFuZAorIy4gY2xvY2FsZV9xdW90aW5nX3N0eWxlIHF1b3RlcyAibGlrZSB0aGlzIi4KKyMuCisjLiBGb3IgZXhhbXBsZSwgYW4gQW1lcmljYW4gRW5nbGlzaCBVbmljb2RlIGxvY2FsZSBzaG91bGQKKyMuIHRyYW5zbGF0ZSAiYCIgdG8gVSsyMDFDIChMRUZUIERPVUJMRSBRVU9UQVRJT04gTUFSSyksIGFuZAorIy4gc2hvdWxkIHRyYW5zbGF0ZSAiJyIgdG8gVSsyMDFEIChSSUdIVCBET1VCTEUgUVVPVEFUSU9OCisjLiBNQVJLKS4gIEEgQnJpdGlzaCBFbmdsaXNoIFVuaWNvZGUgbG9jYWxlIHNob3VsZCBpbnN0ZWFkCisjLiB0cmFuc2xhdGUgdGhlc2UgdG8gVSsyMDE4IChMRUZUIFNJTkdMRSBRVU9UQVRJT04gTUFSSykgYW5kCisjLiBVKzIwMTkgKFJJR0hUIFNJTkdMRSBRVU9UQVRJT04gTUFSSyksIHJlc3BlY3RpdmVseS4KKyMuCisjLiBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIHB1dCBoZXJlLCBwbGVhc2Ugc2VlCisjLiA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9RdW90YXRpb25fbWFyayNHbHlwaHM+CisjLiBhbmQgdXNlIGdseXBocyBzdWl0YWJsZSBmb3IgeW91ciBsYW5ndWFnZS4KKyM6IGxpYi9xdW90ZWFyZy5jOjIyOQorbXNnaWQgImAiCittc2dzdHIgIiIKKworIzogbGliL3F1b3RlYXJnLmM6MjMwCittc2dpZCAiJyIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjEzMQorbXNnaWQgIlN1Y2Nlc3MiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxMzQKK21zZ2lkICJObyBtYXRjaCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjEzNworbXNnaWQgIkludmFsaWQgcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTQwCittc2dpZCAiSW52YWxpZCBjb2xsYXRpb24gY2hhcmFjdGVyIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTQzCittc2dpZCAiSW52YWxpZCBjaGFyYWN0ZXIgY2xhc3MgbmFtZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE0NgorbXNnaWQgIlRyYWlsaW5nIGJhY2tzbGFzaCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE0OQorbXNnaWQgIkludmFsaWQgYmFjayByZWZlcmVuY2UiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNTIKK21zZ2lkICJVbm1hdGNoZWQgWyBvciBbXiIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE1NQorbXNnaWQgIlVubWF0Y2hlZCAoIG9yIFxcKCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE1OAorbXNnaWQgIlVubWF0Y2hlZCBcXHsiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNjEKK21zZ2lkICJJbnZhbGlkIGNvbnRlbnQgb2YgXFx7XFx9IgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTY0CisjLCBmdXp6eQorbXNnaWQgIkludmFsaWQgcmFuZ2UgZW5kIgorbXNnc3RyICJHZedlcnNpeiBudW1hcmEuIgorCisjOiBsaWIvcmVnY29tcC5jOjE2NworbXNnaWQgIk1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNzAKK21zZ2lkICJJbnZhbGlkIHByZWNlZGluZyByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNzMKK21zZ2lkICJQcmVtYXR1cmUgZW5kIG9mIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE3NgorbXNnaWQgIlJlZ3VsYXIgZXhwcmVzc2lvbiB0b28gYmlnIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTc5Cittc2dpZCAiVW5tYXRjaGVkICkgb3IgXFwpIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6NjgwCittc2dpZCAiTm8gcHJldmlvdXMgcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9ycG1hdGNoLmM6NzAKK21zZ2lkICJeW3lZXSIKK21zZ3N0ciAiIgorCisjOiBsaWIvcnBtYXRjaC5jOjczCittc2dpZCAiXltuTl0iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IFRyYW5zbGF0ZSAiKEMpIiB0byB0aGUgY29weXJpZ2h0IHN5bWJvbAorIy4gKEMtaW4tYS1jaXJjbGUpLCBpZiB0aGlzIHN5bWJvbCBpcyBhdmFpbGFibGUgaW4gdGhlIHVzZXIncworIy4gbG9jYWxlLiAgT3RoZXJ3aXNlLCBkbyBub3QgdHJhbnNsYXRlICIoQykiOyBsZWF2ZSBpdCBhcy1pcy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjY2Cittc2dpZCAiKEMpIgorbXNnc3RyICIiCisKKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjY4Cittc2dpZCAiIgorIlxuIgorIkxpY2Vuc2UgR1BMdjIrOiBHTlUgR1BMIHZlcnNpb24gMiBvciBsYXRlciA8aHR0cDovL2dudS5vcmcvbGljZW5zZXMvZ3BsLiIKKyJodG1sPlxuIgorIlRoaXMgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGFyZSBmcmVlIHRvIGNoYW5nZSBhbmQgcmVkaXN0cmlidXRlIGl0LlxuIgorIlRoZXJlIGlzIE5PIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXcuXG4iCisiXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6ICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJXcml0dGVuIGJ5ICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzo4OAorIywgYy1mb3JtYXQKK21zZ2lkICJXcml0dGVuIGJ5ICVzIGFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIzogbGliL3ZlcnNpb24tZXRjLmM6OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiV3JpdHRlbiBieSAlcywgJXMsIGFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorImFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzoxMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyIlcywgYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjLiBZb3UgY2FuIHVzZSBsaW5lIGJyZWFrcywgZXN0aW1hdGluZyB0aGF0IGVhY2ggYXV0aG9yIG5hbWUgb2NjdXBpZXMKKyMuIGNhLiAxNiBzY3JlZW4gY29sdW1ucyBhbmQgdGhhdCBhIHNjcmVlbiBsaW5lIGhhcyBjYS4gODAgY29sdW1ucy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorIiVzLCAlcywgYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjLiBZb3UgY2FuIHVzZSBsaW5lIGJyZWFrcywgZXN0aW1hdGluZyB0aGF0IGVhY2ggYXV0aG9yIG5hbWUgb2NjdXBpZXMKKyMuIGNhLiAxNiBzY3JlZW4gY29sdW1ucyBhbmQgdGhhdCBhIHNjcmVlbiBsaW5lIGhhcyBjYS4gODAgY29sdW1ucy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjExNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorIiVzLCAlcywgJXMsIGFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzoxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyIlcywgJXMsICVzLCAlcyxcbiIKKyJhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6MTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiJXMsICVzLCAlcywgJXMsXG4iCisiJXMsIGFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzoxNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyIlcywgJXMsICVzLCAlcyxcbiIKKyIlcywgJXMsIGFuZCBvdGhlcnMuXG4iCittc2dzdHIgIiIKKworIzogbGliL3hhbGxvYy1kaWUuYzozNQorbXNnaWQgIm1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjIzNworbXNnaWQgIkRpc2sgSW1hZ2UiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjMzOCBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzoyNjEKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTI3MgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBvcGVuaW5nICVzOiAlcyIKK21zZ3N0ciAiJTEkcyBh52Fya2VuIGhhdGE6ICUyJHMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzozNDkgbGlicGFydGVkL2FyY2gvZ251LmM6MjcxCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjEyODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIG9wZW4gJXMgcmVhZC13cml0ZSAoJXMpLiAgJXMgaGFzIGJlZW4gb3BlbmVkIHJlYWQtb25seS4iCittc2dzdHIgIiIKKyIlMSRzIG9rdS15YXog/mVrbGluZGUgYef9bGFt/XlvciAoJTIkcykuICAlMyRzIHNhbHQtb2t1bnVyIG9sYXJhayBh5/1sZP0uIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6NDExIGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTQzMQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkdXJpbmcgc2VlayBmb3IgcmVhZCBvbiAlcyIKK21zZ3N0ciAiJTIkcyd0ZSBva3VtYSBp52luIGFyYW1hIHP9cmFz/W5kYSAlMSRzIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6NDQ0IGxpYnBhcnRlZC9hcmNoL2dudS5jOjQ0OSBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo1NDgKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjY3NiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjEzOTEKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkdXJpbmcgcmVhZCBvbiAlcyIKK21zZ3N0ciAiJTIkcydpIG9rdW1hIHP9cmFz/W5kYSAlMSRzIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6NDgwIGxpYnBhcnRlZC9hcmNoL2dudS5jOjUwOQorIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxNTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbid0IHdyaXRlIHRvICVzLCBiZWNhdXNlIGl0IGlzIG9wZW5lZCByZWFkLW9ubHkuIgorbXNnc3RyICIlcydlIHlhev1sYW39eW9yLCDn/G5r/CBzYWx0LW9rdW51ciBvbGFyYWsgYef9bG39/i4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzo0OTYgbGlicGFydGVkL2FyY2gvbGludXguYzoxNTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGR1cmluZyBzZWVrIGZvciB3cml0ZSBvbiAlcyIKK21zZ3N0ciAiJTIkcydlIHlhem1hIGnnaW4gYXJhbWEgc/1yYXP9bmRhICUxJHMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzo1MzMgbGlicGFydGVkL2FyY2gvZ251LmM6NTg1IGxpYnBhcnRlZC9hcmNoL2dudS5jOjYzMAorIzogbGlicGFydGVkL2FyY2gvZ251LmM6NzA3IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTUxNworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxNjEyIGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTY4NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkdXJpbmcgd3JpdGUgb24gJXMiCittc2dzdHIgIiUyJHMnZSB5YXptYSBz/XJhc/1uZGEgJTEkcyIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo2MyBwYXJ0cHJvYmUvcGFydHByb2JlLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeSBgJXMgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogJXMgW09QVElPTl1cbiIKKyIgIG9yOiAgJXMgREVWSUNFIE1JTk9SXG4iCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo3MAorbXNnaWQgIiIKKyJDbGVhciB1bnVzZWQgc3BhY2Ugb24gYSBGQVQgcGFydGl0aW9uIChhIEdOVSBQYXJ0ZWQgdGVzdGluZyB0b29sKS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjc0Cittc2dpZCAiICAgICAgLS1oZWxwICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdFxuIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6NzUKK21zZ2lkICIgICAgICAtLXZlcnNpb24gIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0XG4iCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo3NyBwYXJ0cHJvYmUvcGFydHByb2JlLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJSZXBvcnQgYnVncyB0byA8JXM+LlxuIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6Mjg1CisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBmZXcgYXJndW1lbnRzIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6MjkwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMiCittc2dzdHIgIsdvayBzYXn9ZGEgYm96dWsgc2F5ZmEuIgorCisjOiBwYXJ0cHJvYmUvcGFydHByb2JlLmM6MTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbT1BUSU9OXSBbREVWSUNFXS4uLlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRwcm9iZS9wYXJ0cHJvYmUuYzoxNDIKK21zZ2lkICIiCisiSW5mb3JtIHRoZSBPUyBvZiBwYXJ0aXRpb24gdGFibGUgY2hhbmdlcy5cbiIKKyJcbiIKKyIgIC1kLCAtLW5vLXVwZGF0ZSAgZG9uJ3QgdXBkYXRlIHRoZSBrZXJuZWxcbiIKKyIgIC1zLCAtLXN1bW1hcnkgICAgcHJpbnQgYSBzdW1tYXJ5IG9mIGNvbnRlbnRzXG4iCisiICAtaCwgLS1oZWxwICAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0XG4iCisiICAtdiwgLS12ZXJzaW9uICAgIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0XG4iCittc2dzdHIgIiIKKworIzogcGFydHByb2JlL3BhcnRwcm9iZS5jOjE1MAorbXNnaWQgIiIKKyJcbiIKKyJXaXRoIG5vIERFVklDRSwgcHJvYmUgYWxsIHBhcnRpdGlvbnMuXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIG9wZW4gJXMuIgorbXNnc3RyICIlcyBh5/1sYW1hZP0uIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzoxMTQKK21zZ2lkICJVbmFibGUgdG8gcHJvYmUgc3RvcmUuIgorbXNnc3RyICJEZXBvIHNvbmRhbGFuYW1hZP0uIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzozNTIKK21zZ2lkICIiCisiVGhlIHBhcnRpdGlvbiB0YWJsZSBjYW5ub3QgYmUgcmUtcmVhZC4gIFRoaXMgbWVhbnMgeW91IG5lZWQgdG8gcmVib290IGJlZm9yZSAiCisibW91bnRpbmcgYW55IG1vZGlmaWVkIHBhcnRpdGlvbnMuICBZb3UgYWxzbyBuZWVkIHRvIHJlaW5zdGFsbCB5b3VyIGJvb3QgIgorImxvYWRlciBiZWZvcmUgeW91IHJlYm9vdCAod2hpY2ggbWF5IHJlcXVpcmUgbW91bnRpbmcgbW9kaWZpZWQgcGFydGl0aW9ucykuICAiCisiSXQgaXMgaW1wb3NzaWJsZSBkbyBib3RoIHRoaW5ncyEgIFNvIHlvdSdsbCBuZWVkIHRvIGJvb3Qgb2ZmIGEgcmVzY3VlIGRpc2ssICIKKyJhbmQgcmVpbnN0YWxsIHlvdXIgYm9vdCBsb2FkZXIgZnJvbSB0aGUgcmVzY3VlIGRpc2suICBSZWFkIHNlY3Rpb24gNCBvZiB0aGUgIgorIlBhcnRlZCBVc2VyIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorbXNnc3RyICIiCisiRGlzayBi9mz8bWxlbWUgdGFibG9zdSB5ZW5pZGVuIG9rdW5hbWFk/SwgYnUgbmVkZW5sZSBkZfBp/nRpcmlsbWn+IGhlcmhhbmdpICIKKyJiaXIgZGlzayBi9mz8bfxu/CBiYfBsYW1hZGFuIChiaWxnaXNheWFy/SkgeWVuaWRlbiBh521hbP1z/W79ei4gIFllbmlkZW4gIgorImHnbWFkYW4g9m5jZSD2bnn8a2xleWljaW5pemkgZGUgeWVuaWRlbiBrdXJtYWz9c/1u/XogKGtpIGJ1IGRl8Gn+dGlyaWxtaf4gIgorImRpc2sgYvZs/G1sZXJpbmkgYmHwbGFtYXn9IGdlcmVrdGlyZWJpbGlyKS4gIN1raSD+ZXlpIGJpcmRlbiB5YXBtYWsgIgorIm9sYW5ha3P9eiEgIERvbGF5/XP9eWxhLCBiaXIga3VydGFybWEgZGlza2l5bGUgYedtYW79eiB2ZSD2bnn8a2xleWljaW5pemkgYnUgIgorImRpc2t0ZW4geWVuaWRlbiBrdXJtYW79eiBnZXJla2VjZWsuICBEYWhhIGZhemxhIGJpbGdpIGnnaW4gUGFydGVkIEt1bGxhbv1j/SAiCisiYmVsZ2VzaW5pbiA0LiBi9mz8bfxu/CBva3V5dW51ei4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjM2OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIHBhcnRpdGlvbiB0YWJsZSBvbiAlcyBjYW5ub3QgYmUgcmUtcmVhZCAoJXMpLiAgVGhpcyBtZWFucyB0aGUgSHVyZCBrbm93cyAiCisibm90aGluZyBhYm91dCBhbnkgbW9kaWZpY2F0aW9ucyB5b3UgbWFkZS4gIFlvdSBzaG91bGQgcmVib290IHlvdXIgY29tcHV0ZXIgIgorImJlZm9yZSBkb2luZyBhbnl0aGluZyB3aXRoICVzLiIKK21zZ3N0ciAiIgorIiUxJHMgKCUyJHMpIPx6ZXJpbmRla2kgZGlzayBi9mz8bWxlbWUgdGFibG9zdS4gIEJ1LCBzaXppbiB5YXB0/fD9bv16ICIKKyJkZfBp/mlrbGlrbGVyaSBIdXJkIGJpbG1peW9yIGFubGFt/W5hIGdlbGlyLiAgJTMkcyBpbGUgaWxnaWxpIGhp52JpciD+ZXkgIgorInlhcG1hZGFuIPZuY2UgYmlsZ2lzYXlhcv1u/Xr9IHllbmlkZW4gYedtYWz9c/1u/XouIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzozODAgcGFydGVkL3BhcnRlZC5jOjI0NDMKK21zZ2lkICIiCisiWW91IHNob3VsZCByZWluc3RhbGwgeW91ciBib290IGxvYWRlciBiZWZvcmUgcmVib290aW5nLiAgUmVhZCBzZWN0aW9uIDQgb2YgIgorInRoZSBQYXJ0ZWQgVXNlciBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiIgorIlllbmlkZW4gYedtYWRhbiD2bmNlIPZuefxrbGV5aWNpbml6aSB5ZW5pZGVuIGt1cm1hbP1z/W79ei4gIERhaGEgZmF6bGEgYmlsZ2kgIgorImnnaW4gUGFydGVkIEt1bGxhbv1j/SBiZWxnZXNpbmluIDQuIGL2bPxt/G78IG9rdXl1bnV6LiIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6NzcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHRyeWluZyB0byBzeW5jICVzIHRvIGRpc2siCittc2dzdHIgIiUxJHMgJTIkcyBkaXNrZSBl/nphbWFubGFubWF5YSDnYWz9/v1s/XlvciIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo0MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHN0YXQgZGV2aWNlICVzIC0gJXMuIgorbXNnc3RyICJEb3N5YSBkdXJ1bSBiaWxnaXNpIGFs/W5hbWF5YW4gYXln/XQgJXMgLSAlcy4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6NTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgZGV0ZXJtaW5lIHNlY3RvciBzaXplIGZvciAlczogJXMuXG4iCisiVXNpbmcgdGhlIGRlZmF1bHQgc2VjdG9yIHNpemUgKCVsbGQpLiIKK21zZ3N0ciAiIgorIiUxJHM6ICUyJHMgaedpbiBzZWt09nIgYm95dXR1IGJlbGlybGVuZW1peW9yLlxuIgorItZudGFu/W1s/SBzZWt09nIgYm95dXR1ICglMyRsbGQpIGt1bGxhbv1sYWNhay4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6NTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJEZXZpY2UgJXMgaGFzIGEgbG9naWNhbCBzZWN0b3Igc2l6ZSBvZiAlbGxkLiAgTm90IGFsbCBwYXJ0cyBvZiBHTlUgUGFydGVkICIKKyJzdXBwb3J0IHRoaXMgYXQgdGhlIG1vbWVudCwgYW5kIHRoZSB3b3JraW5nIGNvZGUgaXMgSElHSExZIEVYUEVSSU1FTlRBTC5cbiIKK21zZ3N0ciAiIgorIiVzIGF5Z/10/W79biBtYW50/WtzYWwgc2VrdPZyIGJveXV0dSAlbGxkJ2Rpci4gR05VIHBhcnRlZCdpbiB0/G0gYvZs/G1sZXJpICIKKyJidW51IGhlbvx6IGRlc3Rla2xlbWVtZWt0ZSBvbHVwIOdhbP3+YW4ga29kIE9MRFVLx0EgREVORVlTRUxE3VIuXG4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6NTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBkZXRlcm1pbmUgdGhlIHNpemUgb2YgJXMgKCVzKS4iCittc2dzdHIgIiUxJHMgKCUyJHMpJ2luIGJveXV0dSBiZWxpcmxlbmVtZWRpIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjY2OAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZ2V0IGlkZW50aXR5IG9mIGRldmljZSAlcyAtICVzIgorbXNnc3RyICIlcyAtICVzIGF5Z/10/W79biBraW1safBpIGFs/W5hbWFk/SAiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6Njc3Cittc2dpZCAiR2VuZXJpYyBJREUiCittc2dzdHIgIkdlbmVsIElERSIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkRldmljZSAlcyBoYXMgbXVsdGlwbGUgKCVkKSBsb2dpY2FsIHNlY3RvcnMgcGVyIHBoeXNpY2FsIHNlY3Rvci5cbiIKKyJHTlUgUGFydGVkIHN1cHBvcnRzIHRoaXMgRVhQRVJJTUVOVEFMTFkgZm9yIHNvbWUgc3BlY2lhbCBkaXNrIGxhYmVsL2ZpbGUgIgorInN5c3RlbSBjb21iaW5hdGlvbnMsIGUuZy4gR1BUIGFuZCBleHQyLzMuXG4iCisiUGxlYXNlIGNvbnN1bHQgdGhlIHdlYiBzaXRlIGZvciB1cC10by1kYXRlIGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiIgorIkF5Z/10ICVzIGZpemlrc2VsIHNla3T2ciBiYf79bmEg529rIHNhef1kYSAoJWQpIG1hbnT9a3NhbCBzZWt09nIgaedlcml5b3IuXG4iCisiR05VIFBhcnRlZCBidW51IERFTkVZU0VMIG9sYXJhayBiYXr9IGRpc2sgZXRpa2V0aS9kb3N5YSBzaXN0ZW1pICIKKyJrb21iaW5hc3lvbmxhcv0gaedpbiBkZXN0ZWtsaXlvciwg9nJuZfBpbiBHUFQgdmUgZXh0Mi8zLlxuIgorIkz8dGZlbiBn/G5jZWwgYmlsZ2kgaedpbiB3ZWIgc2l0ZXNpbmUgYmH+dnVydW4uIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjg3MworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBpbml0aWFsaXNpbmcgU0NTSSBkZXZpY2UgJXMgLSAlcyIKK21zZ3N0ciAiJXMgLSAlcyBTQ1NJIGF5Z/10/W79IGlsa2xlbmRpcm1lZGUgaGF0YSIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo5MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBkZXZpY2UgJXMgaGFzIHplcm8gbGVuZ3RoLCBhbmQgY2FuJ3QgcG9zc2libHkgc3RvcmUgYSBmaWxlIHN5c3RlbSBvciAiCisicGFydGl0aW9uIHRhYmxlLiAgUGVyaGFwcyB5b3Ugc2VsZWN0ZWQgdGhlIHdyb25nIGRldmljZT8iCittc2dzdHIgIiIKKyIlcyBheWf9dP0gc/1m/XItdXp1bmx1a3RhIHZlIG11aHRlbWVsZW4gYmlyIGRvc3lhIHNpc3RlbWkgeWEgZGEgYvZs/G1sZW1lICIKKyJ0YWJsb3N1IGRlcG9sYXlhbf15b3IuICBZYW5s/f4gYXln/XT9IHNl521p/iBvbG1heWFz/W79ej8iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTAzMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVW5hYmxlIHRvIGRldGVybWluZSBnZW9tZXRyeSBvZiBmaWxlL2RldmljZSAlcy4gIFlvdSBzaG91bGQgbm90IHVzZSBQYXJ0ZWQgIgorInVubGVzcyB5b3UgUkVBTExZIGtub3cgd2hhdCB5b3UncmUgZG9pbmchIgorbXNnc3RyICIiCisiJXMgRG9zeWEvYXln/XT9bv1uIGdlb21ldHJpc2kgYmVsaXJsZW5lbWVkaS4gIEPdRERFTiBuZSB5YXB0/fD9bv16/SAiCisiYmlsbWl5b3JzYW79eiBQYXJ0ZWQga3VsbGFubWFtYWz9c/1u/XohIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExMTAKK21zZ2lkICJEQUM5NjAgUkFJRCBjb250cm9sbGVyIgorbXNnc3RyICJEQUM5NjAgUkFJRCBkZW5ldGxleWljaSIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTE1Cittc2dpZCAiUHJvbWlzZSBTWDggU0FUQSBEZXZpY2UiCittc2dzdHIgIlByb21pc2UgU1g4IFNBVEEgQXln/XT9IgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExMjAKK21zZ2lkICJJQk0gUzM5MCBEQVNEIGRyaXZlIgorbXNnc3RyICJJQk0gUzM5MCBEQVNEIHP8cvxj/HP8IgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExMjUKK21zZ2lkICJJQk0gaVNlcmllcyBWaXJ0dWFsIERBU0QiCittc2dzdHIgIklCTSBpU2VyaWVzIFZpcnR1YWwgREFTRCIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTMwCittc2dpZCAiQ29tcGFxIFNtYXJ0IEFycmF5IgorbXNnc3RyICJDb21wYXEgQWv9bGz9IERpemkiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTEzNQorbXNnaWQgIkFUQVJBSUQgQ29udHJvbGxlciIKK21zZ3N0ciAiQVRBUkFJRCBEZW5ldGxleWljaSIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTQwCittc2dpZCAiSTJPIENvbnRyb2xsZXIiCittc2dzdHIgIkkyMCBEZW5ldGxleWljaSIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTQ1Cittc2dpZCAiVXNlci1Nb2RlIExpbnV4IFVCRCIKK21zZ3N0ciAiS3VsbGFu/WP9IEtpcGkgTGludXggVUJEIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExNTYKK21zZ2lkICJMaW51eCBkZXZpY2UtbWFwcGVyIgorbXNnc3RyICJMaW51eCBheWf9dC1l/mxlbWxleWljaXNpIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExNjIKK21zZ2lkICJVbmtub3duIgorbXNnc3RyICJCaWxpbm1leWVuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExNjkKK21zZ2lkICJwZWRfZGV2aWNlX25ldygpICBVbnN1cHBvcnRlZCBkZXZpY2UgdHlwZSIKK21zZ3N0ciAicGVkX2RldmljZV9uZXcoKSAgRGVzdGVrbGVubWV5ZW4gYXln/XQgdPxy/CIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoyMDgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFcnJvciBpbmZvcm1pbmcgdGhlIGtlcm5lbCBhYm91dCBtb2RpZmljYXRpb25zIHRvIHBhcnRpdGlvbiAlcyAtLSAlcy4gIFRoaXMgIgorIm1lYW5zIExpbnV4IHdvbid0IGtub3cgYWJvdXQgYW55IGNoYW5nZXMgeW91IG1hZGUgdG8gJXMgdW50aWwgeW91IHJlYm9vdCAtLSAiCisic28geW91IHNob3VsZG4ndCBtb3VudCBpdCBvciB1c2UgaXQgaW4gYW55IHdheSBiZWZvcmUgcmVib290aW5nLiIKK21zZ3N0ciAiIgorIiUxJHMgLSAlMiRzIGRpc2sgYvZs/G38bmRla2kgZGXwaf5pa2xpa2xlciBoYWtr/W5kYSBrZXJuZWxpIGJpbGdpbGVuZGlybWVkZSAiCisiaGF0YS4gIEJ1LCBzaXogKGJpbGdpc2F5YXL9KSB5ZW5pZGVuIGHnYW5hIGRlayAlMyRzJ2UgeWFwdP3w/W79eiAiCisiZGXwaf5pa2xpa2xlcmkgTGludXgndW4gYmlsbWVtZXNpIGRlbWVrIC0gZG9sYXn9c/15bGEgeWVuaWRlbiBh521hZGFuICIKKyJoZXJoYW5naSBiaXIg/mVraWxkZSBiYfBsYW1hbWFs/SB5YSBkYSBrdWxsYW5tYW1hbP1z/W79ei4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MjI2MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisicGFydGVkIHdhcyB1bmFibGUgdG8gcmUtcmVhZCB0aGUgcGFydGl0aW9uIHRhYmxlIG9uICVzICglcykuICBUaGlzIG1lYW5zICIKKyJMaW51eCB3b24ndCBrbm93IGFueXRoaW5nIGFib3V0IHRoZSBtb2RpZmljYXRpb25zIHlvdSBtYWRlLiAiCittc2dzdHIgIiIKKyJwYXJ0ZWQsICUxJHMgKCUyJHMpIPx6ZXJpbmRla2kgZGlzayBi9mz8bWxlbWUgdGFibG9zdW51IHllbmlkZW4gb2t1eWFtYWT9LiAgIgorIkJ1LCBzaXogKGJpbGdpc2F5YXL9KSB5ZW5pZGVuIGHnYW5hIGRlayB5YXB0/fD9bv16IGRl8Gn+aWtsaWtsZXJpIExpbnV4J3VuICIKKyJiaWxtZW1lc2kgZGVtZWsuICIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoyMzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUga2VybmVsIHdhcyB1bmFibGUgdG8gcmUtcmVhZCB0aGUgcGFydGl0aW9uIHRhYmxlIG9uICVzICglcykuICBUaGlzIG1lYW5zICIKKyJMaW51eCB3b24ndCBrbm93IGFueXRoaW5nIGFib3V0IHRoZSBtb2RpZmljYXRpb25zIHlvdSBtYWRlIHVudGlsIHlvdSAiCisicmVib290LiAgWW91IHNob3VsZCByZWJvb3QgeW91ciBjb21wdXRlciBiZWZvcmUgZG9pbmcgYW55dGhpbmcgd2l0aCAlcy4iCittc2dzdHIgIiIKKyJLZXJuZWwsICUxJHMgKCUyJHMpIPx6ZXJpbmRla2kgZGlzayBi9mz8bWxlbWUgdGFibG9zdW51IHllbmlkZW4gb2t1eWFtYWT9LiAgIgorIkJ1LCBzaXogKGJpbGdpc2F5YXL9KSB5ZW5pZGVuIGHnYW5hIGRlayB5YXB0/fD9bv16IGRl8Gn+aWtsaWtsZXJpIExpbnV4J3VuICIKKyJiaWxtZW1lc2kgZGVtZWsuLi4gICUzJHMgaWxlIGlsZ2lsaSBoZXJoYW5naSBiaXIg/mV5IHlhcG1hZGFuICIKKyJiaWxnaXNheWFy/W79ev0geWVuaWRlbiBh521hbP1z/W79ei4iCisKKyM6IGxpYnBhcnRlZC9jcy9nZW9tLmM6MTYyCittc2dpZCAiQ2FuJ3QgaGF2ZSB0aGUgZW5kIGJlZm9yZSB0aGUgc3RhcnQhIgorbXNnc3RyICJCYf5sYW5n/ed0YW4g9m5jZSBzb24gZ2VsZW1leiEiCisKKyM6IGxpYnBhcnRlZC9jcy9nZW9tLmM6MTY5Cittc2dpZCAiQ2FuJ3QgaGF2ZSBhIHBhcnRpdGlvbiBvdXRzaWRlIHRoZSBkaXNrISIKK21zZ3N0ciAiRGlzayBi9mz8bfwgZGlzayBk/f79bmRhIGJ1bHVuYW1heiEiCisKKyM6IGxpYnBhcnRlZC9jcy9nZW9tLmM6MzY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkF0dGVtcHQgdG8gd3JpdGUgc2VjdG9ycyAlbGQtJWxkIG91dHNpZGUgb2YgcGFydGl0aW9uIG9uICVzLiIKK21zZ3N0ciAiIgorIiUzJHMg/HplcmluZGVraSBkaXNrIGL2bPxt/G78biBk/f79bmRhIHllcmFsYW4gJTEkbGQtJTIkbGQgc2VrdPZybGVyZSAiCisieWF6bWF5YSDnYWz9/v1s/Xlvci4iCisKKyM6IGxpYnBhcnRlZC9jcy9nZW9tLmM6NDA2IGxpYnBhcnRlZC9mcy9saW51eF9zd2FwL2xpbnV4X3N3YXAuYzo0NzUKK21zZ2lkICJjaGVja2luZyBmb3IgYmFkIGJsb2NrcyIKK21zZ3N0ciAiaGF0YWz9IGJsb2sgYXJhbv15b3IiCisKKyM6IGxpYnBhcnRlZC9kZWJ1Zy5jOjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWNrdHJhY2UgaGFzICVkIGNhbGxzIG9uIHN0YWNrOlxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9kZWJ1Zy5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJBc3NlcnRpb24gKCVzKSBhdCAlczolZCBpbiBmdW5jdGlvbiAlcygpIGZhaWxlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIG9wZW4gJXMgLSB1bnJlY29nbmlzZWQgZGlzayBsYWJlbC4iCittc2dzdHIgIiVzIGHn/Wxhbf15b3IgLSB0YW79bm1heWFuIGRpc2sgZXRpa2V0aS4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6NDcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGlzIGxpYnBhcnRlZCBkb2Vzbid0IGhhdmUgd3JpdGUgc3VwcG9ydCBmb3IgJXMuICBQZXJoYXBzIGl0IHdhcyBjb21waWxlZCAiCisicmVhZC1vbmx5LiIKK21zZ3N0ciAiIgorIkJ1IGxpYnBhcnRlZCdpbiAlcyBp52luIHlhem1hIGRlc3Rl8GkgeW9rLiAgQmVsa2kgZGUgc2FsdC1va3VudXIgb2xhcmFrICIKKyJkZXJsZW5taf50aXIuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjU5OAorIywgYy1mb3JtYXQKK21zZ2lkICJQYXJ0aXRpb24gJWQgaXMgJXMsIGJ1dCB0aGUgZmlsZSBzeXN0ZW0gaXMgJXMuIgorbXNnc3RyICIlMSRkIGRpc2sgYvZs/G38ICUyJHMsIGZha2F0IGRvc3lhIHNpc3RlbWkgJTMkcydkaXIuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjEwNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZGlzayBsYWJlbHMgZG8gbm90IHN1cHBvcnQgZXh0ZW5kZWQgcGFydGl0aW9ucy4iCittc2dzdHIgIiVzIGRpc2sgZXRpa2V0bGVyaSBlayBkaXNrIGL2bPxtbGVyaW5pIGRlc3Rla2xlbWl5b3IuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE2MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZGlzayBsYWJlbHMgZG9uJ3Qgc3VwcG9ydCBsb2dpY2FsIG9yIGV4dGVuZGVkIHBhcnRpdGlvbnMuIgorbXNnc3RyICIlcyBkaXNrIGV0aWtldGxlcmkgbWFudP1rc2FsIHlhIGRhIGVrIGRpc2sgYvZs/G1sZXJpbmkgZGVzdGVrbGVtaXlvci4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTY0NworbXNnaWQgIlRvbyBtYW55IHByaW1hcnkgcGFydGl0aW9ucy4iCittc2dzdHIgIsdvayBmYXpsYSBiaXJpbmNpbCBkaXNrIGL2bPxt/CIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW4ndCBhZGQgYSBsb2dpY2FsIHBhcnRpdGlvbiB0byAlcywgYmVjYXVzZSB0aGVyZSBpcyBubyBleHRlbmRlZCBwYXJ0aXRpb24uIgorbXNnc3RyICIlcydlIG1hbnT9a3NhbCBkaXNrIGL2bPxt/CBla2xlbmVtZXosIOf8bmv8IGVrIGRpc2sgYvZs/G38IHlvay4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTY4MAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW4ndCBoYXZlIG1vcmUgdGhhbiBvbmUgZXh0ZW5kZWQgcGFydGl0aW9uIG9uICVzLiIKK21zZ3N0ciAiJXMg/HplcmluZGUgYmlyZGVuIGZhemxhIGVrIGRpc2sgYvZs/G38IG9sYW1heiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNjkwCittc2dpZCAiQ2FuJ3QgaGF2ZSBsb2dpY2FsIHBhcnRpdGlvbnMgb3V0c2lkZSBvZiB0aGUgZXh0ZW5kZWQgcGFydGl0aW9uLiIKK21zZ3N0ciAiRWsgZGlzayBi9mz8bfwgZP3+/W5kYSBtYW50/WtzYWwgZGlzayBi9mz8bWxlcmkgb2xhbWF6LiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbid0IGhhdmUgYSBsb2dpY2FsIHBhcnRpdGlvbiBvdXRzaWRlIG9mIHRoZSBleHRlbmRlZCBwYXJ0aXRpb24gb24gJXMuIgorbXNnc3RyICIlcyD8emVyaW5kZSBlayBkaXNrIGL2bPxt/CBk/f79bmRhIG1hbnT9a3NhbCBkaXNrIGL2bPxtbGVyaSBvbGFtYXouIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE3MjUgbGlicGFydGVkL2Rpc2suYzoxNzc5IGxpYnBhcnRlZC9kaXNrLmM6MTk0NQorbXNnaWQgIkNhbid0IGhhdmUgb3ZlcmxhcHBpbmcgcGFydGl0aW9ucy4iCittc2dzdHIgItZydPz+ZW4gZGlzayBi9mz8bWxlcmkgb2xhbWF6IgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE3MzMKK21zZ2lkICJDYW4ndCBoYXZlIGEgcHJpbWFyeSBwYXJ0aXRpb24gaW5zaWRlIGFuIGV4dGVuZGVkIHBhcnRpdGlvbi4iCittc2dzdHIgIkJpciBlayBkaXNrIGL2bPxt/CBp52luZGUgYmlyaW5jaWwgZGlzayBi9mz8bfwgYnVsdW5hbWF6LiIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTQwCittc2dpZCAibWV0YWRhdGEiCittc2dzdHIgIm1ldGF2ZXJpc2kiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE0MgorbXNnaWQgImZyZWUiCittc2dzdHIgImt1bGxhbv1sbWFt/f4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE0NCBwYXJ0ZWQvdWkuYzoxMTY5IHBhcnRlZC91aS5jOjExOTcKK21zZ2lkICJleHRlbmRlZCIKK21zZ3N0ciAiZWsiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE0NiBwYXJ0ZWQvdWkuYzoxMTczIHBhcnRlZC91aS5jOjEyMDEKK21zZ2lkICJsb2dpY2FsIgorbXNnc3RyICJtYW50/WtzYWwiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE0OCBwYXJ0ZWQvdWkuYzoxMTY1IHBhcnRlZC91aS5jOjExOTMKK21zZ2lkICJwcmltYXJ5IgorbXNnc3RyICJiaXJpbmNpbCIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTY0Cittc2dpZCAiYm9vdCIKK21zZ3N0ciAi9m55/GtsZW1lIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNjYKK21zZ2lkICJyb290IgorbXNnc3RyICJr9msiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE2OAorbXNnaWQgInN3YXAiCittc2dzdHIgInRha2FzIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNzAKK21zZ2lkICJoaWRkZW4iCittc2dzdHIgImdpemxpIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNzIKK21zZ2lkICJyYWlkIgorbXNnc3RyICJyYWlkIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNzQKK21zZ2lkICJsdm0iCittc2dzdHIgImx2bSIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTc2Cittc2dpZCAibGJhIgorbXNnc3RyICJsYmEiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE3OAorbXNnaWQgImhwLXNlcnZpY2UiCittc2dzdHIgImhwLXNlcnZpc2kiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE4MAorbXNnaWQgInBhbG8iCittc2dzdHIgInBhbG8iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE4MgorbXNnaWQgInByZXAiCittc2dzdHIgInByZXAiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE4NAorbXNnaWQgIm1zZnRyZXMiCittc2dzdHIgIm1zZnRyZXMiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE5MAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIHBhcnRpdGlvbiBmbGFnLCAlZC4iCittc2dzdHIgIkJpbGlubWV5ZW4uZGlzayBi9mz8bfwgYmF5cmHw/SwgJWQuIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6NzgKK21zZ2lkICJJbmZvcm1hdGlvbiIKK21zZ3N0ciAiQmlsZ2kiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo3OQorbXNnaWQgIldhcm5pbmciCittc2dzdHIgIlV5YXL9IgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODAKK21zZ2lkICJFcnJvciIKK21zZ3N0ciAiSGF0YSIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjgxCittc2dpZCAiRmF0YWwiCittc2dzdHIgItZs/G1j/GwiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4MgorbXNnaWQgIkJ1ZyIKK21zZ3N0ciAiWWF6/Wz9bSBoYXRhc/0iCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4MworbXNnaWQgIk5vIEltcGxlbWVudGF0aW9uIgorbXNnc3RyICJVeWFybGFtYSB5b2siCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4NworbXNnaWQgIkZpeCIKK21zZ3N0ciAiT25hciIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjg4Cittc2dpZCAiWWVzIgorbXNnc3RyICJFdmV0IgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODkKK21zZ2lkICJObyIKK21zZ3N0ciAiSGF5/XIiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo5MAorbXNnaWQgIk9LIgorbXNnc3RyICJUYW1hbSIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjkxCittc2dpZCAiUmV0cnkiCittc2dzdHIgIlllbmlkZW4gZGVuZSIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjkyCittc2dpZCAiSWdub3JlIgorbXNnc3RyICJZb2tzYXkiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo5MworbXNnaWQgIkNhbmNlbCIKK21zZ3N0ciAiVmF6Z2XnIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBIGJ1ZyBoYXMgYmVlbiBkZXRlY3RlZCBpbiBHTlUgUGFydGVkLiAgUmVmZXIgdG8gdGhlIHdlYiBzaXRlIG9mIHBhcnRlZCAiCisiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3BhcnRlZC9wYXJ0ZWQuaHRtbCBmb3IgbW9yZSBpbmZvcm1hdGlvbnMgb2Ygd2hhdCAiCisiY291bGQgYmUgdXNlZnVsIGZvciBidWcgc3VibWl0dGluZyEgIFBsZWFzZSBlbWFpbCBhIGJ1ZyByZXBvcnQgdG8gYnVnLSIKKyJwYXJ0ZWRAZ251Lm9yZyBjb250YWluaW5nIGF0IGxlYXN0IHRoZSB2ZXJzaW9uICglcykgYW5kIHRoZSBmb2xsb3dpbmcgIgorIm1lc3NhZ2U6ICAiCittc2dzdHIgIiIKKyJHTlUgcGFydGVkJ2RhIGJpciB5YXr9bP1tIGhhdGFz/SBzYXB0YW5k/S4gIEhhdGEgYmlsZGlybWVrIGnnaW4gZGFoYSBmYXpsYSAiCisiYmlsZ2l5ZSB1bGH+bWFrIPx6ZXJlIHBhcnRlZCf9biB3ZWIgc2l0ZXNpbmUgYmH+dnVydW46IGh0dHA6Ly93d3cuZ251Lm9yZy8iCisic29mdHdhcmUvcGFydGVkL3BhcnRlZC5odG1sISAgTPx0ZmVuIGJ1Zy1wYXJ0ZWRAZ251Lm9yZydhIHP8cvxtICglcykgdmUgIgorImH+YfD9ZGFraSBtZXNhav0gaedlcmVuIGJpciB5YXr9bP1tIGhhdGFz/SByYXBvcnUgZ/ZuZGVyaW46ICAiCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6Mzg0Cittc2dpZCAiQ291bGQgbm90IGRldGVjdCBmaWxlIHN5c3RlbS4iCittc2dzdHIgIkRvc3lhIHNpc3RlbWkgc2FwdGFuYW39eW9yLiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzozOTUKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gaXMgYmlnZ2VyIHRoYW4gaXRzIHZvbHVtZSEiCittc2dzdHIgIkRvc3lhIHNpc3RlbWkgb3lsdW11bmRhbiBkYWhhIGL8efxrISIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo0MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VwcG9ydCBmb3Igb3BlbmluZyAlcyBmaWxlIHN5c3RlbXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiVzIGRvc3lhIHNpc3RlbWxlcmluaSBh521hayBp52luIGRlc3RlayBoZW78eiBzYfBsYW5tYW39/nT9ci4iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnQgZm9yIGNyZWF0aW5nICVzIGZpbGUgc3lzdGVtcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiJXMgZG9zeWEgc2lzdGVtbGVyaW5pIG9sdf50dXJtYWsgaedpbiBkZXN0ZWsgaGVu/Hogc2HwbGFubWFt/f50/XIuIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjUwNQorIywgYy1mb3JtYXQKK21zZ2lkICJTdXBwb3J0IGZvciBjaGVja2luZyAlcyBmaWxlIHN5c3RlbXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiVzIGRvc3lhIHNpc3RlbWxlcmluaSBrb250cm9sIGV0bWVrIGnnaW4gZGVzdGVrIGhlbvx6IHNh8Gxhbm1hbf3+dP1yLiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo1NzEKK21zZ2lkICJyYXcgYmxvY2sgY29weWluZyIKK21zZ3N0ciAiaGFtIGJsb2sga29weWFsYW1hIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjU4MgorbXNnaWQgImdyb3dpbmcgZmlsZSBzeXN0ZW0iCittc2dzdHIgImL8efx5ZW4gZG9zeWEgc2lzdGVtaSIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo2MjIKK21zZ2lkICJDYW4ndCBjb3B5IG9udG8gYW4gb3ZlcmxhcHBpbmcgcGFydGl0aW9uLiIKK21zZ3N0ciAix2Fr/f5hbiBkaXNrIGL2bPxtbGVyaW5pbiD8emVyaW5lIGtvcHlhbGFuYW39eW9yLiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo2NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkRpcmVjdCBzdXBwb3J0IGZvciBjb3B5aW5nIGZpbGUgc3lzdGVtcyBpcyBub3QgeWV0IGltcGxlbWVudGVkIGZvciAlcy4gICIKKyJIb3dldmVyLCBzdXBwb3J0IGZvciByZXNpemluZyBpcyBpbXBsZW1lbnRlZC4gIFRoZXJlZm9yZSwgdGhlIGZpbGUgc3lzdGVtICIKKyJjYW4gYmUgY29waWVkIGlmIHRoZSBuZXcgcGFydGl0aW9uIGlzIGF0IGxlYXN0IGFzIGJpZyBhcyB0aGUgb2xkIG9uZS4gIFNvLCAiCisiZWl0aGVyIHNocmluayB0aGUgcGFydGl0aW9uIHlvdSBhcmUgdHJ5aW5nIHRvIGNvcHksIG9yIGNvcHkgdG8gYSBiaWdnZXIgIgorInBhcnRpdGlvbi4iCittc2dzdHIgIiIKKyIlcyBp52luIGRvc3lhIHNpc3RlbWxlcmluaSBrb3B5YWxhbWF5YSBkaXJla3QgZGVzdGVrIGhlbvx6IHNh8Gxhbm1hbf3+dP1yLiAgIgorIkFuY2FrIHllbmlkZW4gYm95dXRsYW5k/XJtYSBkZXN0ZfBpIG1ldmN1dC4gIEJ1IG5lZGVubGUsIGXwZXIgeWVuaSBkaXNrICIKKyJi9mz8bfwgZW4gYXogZXNraXNpIGthZGFyIGL8efxrc2UsIGRvc3lhIHNpc3RlbWkga29weWFsYW5hYmlsaXIuICAiCisiRG9sYXn9c/15bGEsIHlhIGtvcHlhbGFtYXlhIOdhbP3+dP3w/W79eiBkaXNrIGL2bPxt/G78IGv85/xsdPxuLCB5YSBkYSBkYWhhICIKKyJi/Hn8ayBiaXIgZGlzayBi9mz8bfxuZSBrb3B5YWxhef1uLiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo2NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VwcG9ydCBmb3IgY29weWluZyAlcyBmaWxlIHN5c3RlbXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiVzIGRvc3lhIHNpc3RlbWxlcmluaSBrb3B5YWxhbWFrIGnnaW4gZGVzdGVrIGhlbvx6IHNh8Gxhbm1hbf3+dP1yLiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo2OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VwcG9ydCBmb3IgcmVzaXppbmcgJXMgZmlsZSBzeXN0ZW1zIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICIiCisiJXMgZG9zeWEgc2lzdGVtbGVyaW5pIHllbmlkZW4gYm95dXRsYW5k/XJtYWsgaedpbiBkZXN0ZWsgaGVu/HogIgorInNh8Gxhbm1hbf3+dP1yLiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6MzE1Cittc2dpZCAiY3JlYXRpbmciCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDAyCisjLCBmdXp6eQorbXNnaWQgIlRoZSBmaWxlIHN5c3RlbSBpcyBpbiBhbiBpbnZhbGlkIHN0YXRlLiAgUGVyaGFwcyBpdCBpcyBtb3VudGVkPyIKK21zZ3N0ciAiRG9zeWEgc2lzdGVtaSBveWx1bXVuZGFuIGRhaGEgYvx5/GshIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0MTAKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gaXMgaW4gb2xkICh1bnJlc2l6ZWFibGUpIGZvcm1hdC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDE2Cittc2dpZCAiSW52YWxpZCBmcmVlIGJsb2NrcyBjb3VudC4gIFJ1biByZWlzZXJmc2NrIC0tY2hlY2sgZmlyc3QuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQzMQorIywgZnV6enkKK21zZ2lkICJjaGVja2luZyIKK21zZ3N0ciAiY2hlY2siCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQzNworbXNnaWQgIlJlaXNlcmZzIHRyZWUgc2VlbXMgdG8gYmUgY29ycnVwdGVkLiAgUnVuIHJlaXNlcmZzY2sgLS1jaGVjayBmaXJzdC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDQ5CisjLCBmdXp6eQorbXNnaWQgIiIKKyJUaGUgcmVpc2VyZnMgZmlsZSBzeXN0ZW0gcGFzc2VkIGEgYmFzaWMgY2hlY2suICBGb3IgYSBtb3JlIGNvbXByZWhlbnNpdmUgIgorImNoZWNrLCBydW4gcmVpc2VyZnNjayAtLWNoZWNrLiIKK21zZ3N0ciAiIgorImV4dDIgZG9zeWEgc2lzdGVtaSB0ZW1lbCBiaXIga29udHJvbPwgZ2XndGkuICBEYWhhIGthcHNhbWz9IGJpciBrb250cm9sIGnnaW4gIgorImUyZnNjayBwcm9ncmFt/W79IGt1bGxhbv1u/XouIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0NzQKKyMsIGZ1enp5Cittc2dpZCAiU29ycnksIGNhbid0IG1vdmUgdGhlIHN0YXJ0IG9mIHJlaXNlcmZzIHBhcnRpdGlvbnMgeWV0LiIKK21zZ3N0ciAi3Hpn/G78bSwgaGVu/HogZXh0MiBkaXNrIGL2bPxtbGVyaW5pbiBiYf5sYW5n/WP9IHRh/v1uYW39eW9yISIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDkwCittc2dpZCAiQ291bGRuJ3QgcmVvcGVuIGRldmljZSBhYnN0cmFjdGlvbiBsYXllciBmb3IgcmVhZC93cml0ZS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NTA4IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NTUyCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjI1MCBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjYyOQorbXNnaWQgInNocmlua2luZyIKK21zZ3N0ciAia/zn/Gx0/Gz8eW9yIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo1MjAKKyMsIGZ1enp5Cittc2dpZCAiZXhwYW5kaW5nIgorbXNnc3RyICJVeWFy/SIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NTkyCittc2dpZCAiQ291bGRuJ3QgY3JlYXRlIHJlaXNlcmZzIGRldmljZSBhYnN0cmFjdGlvbiBoYW5kbGVyLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo2MDYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkRldmljZSBpcyB0b28gc21hbGwgZm9yICVsdSBibG9ja3MuIgorbXNnc3RyICJleHQyIGnnaW4gZG9zeWEgc2lzdGVtaSDnb2sga/zn/GsuIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo2MTUKK21zZ2lkICJjb3B5aW5nIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjY4MgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCByZXNvbHZlIHN5bWJvbCAlcy4gIEVycm9yOiAlcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NzA0Cittc2dpZCAiR05VIFBhcnRlZCBmb3VuZCBhbiBpbnZhbGlkIGxpYnJlaXNlcmZzIGxpYnJhcnkuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjcxNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiR05VIFBhcnRlZCBoYXMgZGV0ZWN0ZWQgbGlicmVpc2VyZnMgaW50ZXJmYWNlIHZlcnNpb24gbWlzbWF0Y2guICBGb3VuZCAlZC0lIgorImQsIHJlcXVpcmVkICVkLiBSZWlzZXJGUyBzdXBwb3J0IHdpbGwgYmUgZGlzYWJsZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYWl4LmM6MTM3CisjLCBmdXp6eQorbXNnaWQgIlN1cHBvcnQgZm9yIHJlYWRpbmcgQUlYIGRpc2sgbGFiZWxzIGlzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICIlcyBkb3N5YSBzaXN0ZW1sZXJpbmkgb2x1/nR1cm1hayBp52luIGRlc3RlayBoZW78eiBzYfBsYW5tYW39/nT9ci4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYWl4LmM6MTQ4CisjLCBmdXp6eQorbXNnaWQgIlN1cHBvcnQgZm9yIHdyaXRpbmcgQUlYIGRpc2sgbGFiZWxzIGlzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICIlcyBkb3N5YSBzaXN0ZW1sZXJpbmkgb2x1/nR1cm1hayBp52luIGRlc3RlayBoZW78eiBzYfBsYW5tYW39/nT9ci4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYWl4LmM6MTYxCisjLCBmdXp6eQorbXNnaWQgIiIKKyJTdXBwb3J0IGZvciBhZGRpbmcgcGFydGl0aW9ucyB0byBBSVggZGlzayBsYWJlbHMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIiVzIGRvc3lhIHNpc3RlbWxlcmluaSBvbHX+dHVybWFrIGnnaW4gZGVzdGVrIGhlbvx6IHNh8Gxhbm1hbf3+dP1yLiIKKworIzogbGlicGFydGVkL2xhYmVscy9haXguYzoxNzEKKyMsIGZ1enp5Cittc2dpZCAiIgorIlN1cHBvcnQgZm9yIGR1cGxpY2F0aW5nIHBhcnRpdGlvbnMgaW4gQUlYIGRpc2sgbGFiZWxzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICIlcyBkb3N5YSBzaXN0ZW1sZXJpbmkgb2x1/nR1cm1hayBp52luIGRlc3RlayBoZW78eiBzYfBsYW5tYW39/nT9ci4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYWl4LmM6MTg5CisjLCBmdXp6eQorbXNnaWQgIiIKKyJTdXBwb3J0IGZvciBzZXR0aW5nIHN5c3RlbSB0eXBlIG9mIHBhcnRpdGlvbnMgaW4gQUlYIGRpc2sgbGFiZWxzIGlzIG5vdCAiCisiaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiJXMgZG9zeWEgc2lzdGVtbGVyaW5pIG9sdf50dXJtYWsgaedpbiBkZXN0ZWsgaGVu/Hogc2HwbGFubWFt/f50/XIuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2FpeC5jOjE5OQorIywgZnV6enkKK21zZ2lkICJTdXBwb3J0IGZvciBzZXR0aW5nIGZsYWdzIGluIEFJWCBkaXNrIGxhYmVscyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiJXMgZG9zeWEgc2lzdGVtbGVyaW5pIG9sdf50dXJtYWsgaedpbiBkZXN0ZWsgaGVu/Hogc2HwbGFubWFt/f50/XIuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2JzZC5jOjUwMSBsaWJwYXJ0ZWQvbGFiZWxzL2Rhc2QuYzo3NTUKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZG9zLmM6MTk3NCBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjc3MAorIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzoxNDQ4IGxpYnBhcnRlZC9sYWJlbHMvbG9vcC5jOjI0OAorIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoxNDA4IGxpYnBhcnRlZC9sYWJlbHMvcGM5OC5jOjc1OQorIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzoxMDQxIGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6NzA1Cittc2dpZCAiVW5hYmxlIHRvIHNhdGlzZnkgYWxsIGNvbnN0cmFpbnRzIG9uIHRoZSBwYXJ0aXRpb24uIgorbXNnc3RyICJEaXNrIGL2bPxt/CD8emVyaW5kZWtpIHT8bSBrb/51bGxhciBrYXL+/WxhbmFtYWT9LiIKKworIzogbGlicGFydGVkL2xhYmVscy9ic2QuYzo1MjYKK21zZ2lkICJVbmFibGUgdG8gYWxsb2NhdGUgYSBic2QgZGlza2xhYmVsIHNsb3QuIgorbXNnc3RyICJCaXIgYnNkIGRpc2sgZXRpa2V0aSB5dXZhc/0gdGFoc2lzIGVkaWxlbWVkaSIKKworIzogbGlicGFydGVkL2xhYmVscy9kYXNkLmM6MTY2CisjLCBmdXp6eQorbXNnaWQgIlVuYWJsZSB0byBkZXRlcm1pbmUgdGhlIGJsb2NrIHNpemUgb2YgdGhpcyBkYXNkIgorbXNnc3RyICIlMSRzICglMiRzKSdpbiBib3l1dHUgYmVsaXJsZW5lbWVkaSIKKworIzogbGlicGFydGVkL2xhYmVscy9kYXNkLmM6NzgxCisjLCBmdXp6eQorbXNnaWQgIlVuYWJsZSB0byBhbGxvY2F0ZSBhIGRhc2QgZGlza2xhYmVsIHNsb3QiCittc2dzdHIgIkJpciBic2QgZGlzayBldGlrZXRpIHl1dmFz/SB0YWhzaXMgZWRpbGVtZWRpIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rvcy5jOjgyNworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHBhcnRpdGlvbiB0YWJsZSBvbiAlcyAtLSB3cm9uZyBzaWduYXR1cmUgJXguIgorbXNnc3RyICIlMSRzIPx6ZXJpbmRlIGdl52Vyc2l6IGRpc2sgYvZs/G1sZW1lIHRhYmxvc3UgLSB5YW5s/f4gaW16YSAlMiR4IgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rvcy5jOjg1NQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHBhcnRpdGlvbiB0YWJsZSAtIHJlY3Vyc2l2ZSBwYXJ0aXRpb24gb24gJXMuIgorbXNnc3RyICIiCisiR2XnZXJzaXogZGlzayBi9mz8bWxlbWUgdGFibG9zdSAtICVzIPx6ZXJpbmRlIPZ6eWluZWxlbWVsaSBkaXNrIGL2bPxt/C4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZG9zLmM6MTMxOAorbXNnaWQgIkV4dGVuZGVkIHBhcnRpdGlvbnMgY2Fubm90IGJlIGhpZGRlbiBvbiBtc2RvcyBkaXNrIGxhYmVscy4iCittc2dzdHIgIk1zZG9zIGRpc2sgZXRpa2V0bGVyaW5kZSBlayBkaXNrIGL2bPxtbGVyaSBnaXpsaSBvbGFtYXouIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rvcy5jOjE5NTgKK21zZ2lkICJQYXJ0ZWQgY2FuJ3QgcmVzaXplIHBhcnRpdGlvbnMgbWFuYWdlZCBieSBXaW5kb3dzIER5bmFtaWMgRGlzay4iCittc2dzdHIgIiIKKyJQYXJ0ZWQsIFdpbmRvd3MgRGluYW1payBEaXNrIHRhcmFm/W5kYW4gefZuZXRpbGVuIGL2bPxtbGVyaSB5ZW5pZGVuICIKKyJib3l1dGxheWFtYXouIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjE5MAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBoYXMgbm8gZXh0ZW5kZWQgcGFydGl0aW9uICh2b2x1bWUgaGVhZGVyIHBhcnRpdGlvbikuIgorbXNnc3RyICIlcydpbiBlayBkaXNrIGL2bPxt/CAob3lsdW0gYmH+bP3w/SBkaXNrIGL2bPxt/CkgeW9rLiIKKworIzogbGlicGFydGVkL2xhYmVscy9kdmguYzozMTMKK21zZ2lkICJDaGVja3N1bSBpcyB3cm9uZywgaW5kaWNhdGluZyB0aGUgcGFydGl0aW9uIHRhYmxlIGlzIGNvcnJ1cHQuIgorbXNnc3RyICIiCisiU2HwbGFtYSB0b3BsYW39LCBkaXNrIGL2bPxtbGVtZSB0YWJsb3N1bnVuIGJvenVrIG9sZHXwdW51IGJlbGlydGlyIP5la2lsZGUgIgorInlhbmz9/i4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6NjE2Cittc2dpZCAiT25seSBwcmltYXJ5IHBhcnRpdGlvbnMgY2FuIGJlIHJvb3QgcGFydGl0aW9ucy4iCittc2dzdHIgIllhbG79emNhIGJpcmluY2lsIGRpc2sgYvZs/G1sZXJpIGv2ayBkaXNrIGL2bPxt/CBvbGFiaWxpci4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6NjMwCittc2dpZCAiT25seSBwcmltYXJ5IHBhcnRpdGlvbnMgY2FuIGJlIHN3YXAgcGFydGl0aW9ucy4iCittc2dzdHIgIllhbG79emNhIGJpcmluY2lsIGRpc2sgYvZs/G1sZXJpIHRha2FzIGRpc2sgYvZs/G1sZXJpIG9sYWJpbGlyLiIKKworIzogbGlicGFydGVkL2xhYmVscy9kdmguYzo2NDQKK21zZ2lkICJPbmx5IGxvZ2ljYWwgcGFydGl0aW9ucyBjYW4gYmUgYSBib290IGZpbGUuIgorbXNnc3RyICJZYWxu/XpjYSBtYW50/WtzYWwgZGlzayBi9mz8bWxlcmkgYmlyIPZuefxrbGVtZSBkb3N5YXP9IG9sYWJpbGlyLiIKKworIzogbGlicGFydGVkL2xhYmVscy9kdmguYzo3MjEKK21zZ2lkICJPbmx5IGxvZ2ljYWwgcGFydGl0aW9ucyAoYm9vdCBmaWxlcykgaGF2ZSBhIG5hbWUuIgorbXNnc3RyICIiCisiWWFsbv16Y2EgbWFudP1rc2FsIGRpc2sgYvZs/G1sZXJpbmluICj2bnn8a2xlbWUgZG9zeWFsYXL9KSBiaXIgYWT9IG9sYWJpbGlyLiIKKworIzogbGlicGFydGVkL2xhYmVscy9kdmguYzo4MTIKK21zZ2lkICJUb28gbWFueSBwcmltYXJ5IHBhcnRpdGlvbnMiCittc2dzdHIgIsdvayBmYXpsYSBiaXJpbmNpbCBkaXNrIGL2bPxt/CIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEwMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgb3BlbiBlcnJvclxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEwNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgc2VlayBlcnJvclxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgcmVhZCBlcnJvclxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjExMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHdyaXRlIGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiJTIkcydlIHlhem1hIHP9cmFz/W5kYSAlMSRzIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBJT0NUTCBlcnJvclxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjExOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgQVBJIHZlcnNpb24gbWlzbWF0Y2hcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFVuc3VwcG9ydGVkIGRpc2sgdHlwZVxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgVW5zdXBwb3J0ZWQgZGlzayBmb3JtYXRcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMzAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBEaXNrIGluIHVzZVxuIgorIiVzXG4iCittc2dzdHIgIkRpc2sgJTEkczogJTIkc1xuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBDb25maWcgZmlsZSBzeW50YXggZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFZvbHVtZSBsYWJlbCBpcyBjb3JydXB0ZWQuXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBhIGRhdGEgc2V0IG5hbWUgaXMgY29ycnVwdGVkLlxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjE0NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgc3BhY2UgYWxsb2NhdGlvblxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgZGV2aWNlIHZlcmlmaWNhdGlvbiBmYWlsZWRcbiIKKyJUaGUgc3BlY2lmaWVkIGRldmljZSBpcyBub3QgYSB2YWxpZCBEQVNEIGRldmljZVxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIEZhdGFsIGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjQ1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgY29udGFpbnMgR1BUIHNpZ25hdHVyZXMsIGluZGljYXRpbmcgdGhhdCBpdCBoYXMgYSBHUFQgdGFibGUuICBIb3dldmVyLCBpdCAiCisiZG9lcyBub3QgaGF2ZSBhIHZhbGlkIGZha2UgbXNkb3MgcGFydGl0aW9uIHRhYmxlLCBhcyBpdCBzaG91bGQuICBQZXJoYXBzIGl0ICIKKyJ3YXMgY29ycnVwdGVkIC0tIHBvc3NpYmx5IGJ5IGEgcHJvZ3JhbSB0aGF0IGRvZXNuJ3QgdW5kZXJzdGFuZCBHUFQgcGFydGl0aW9uICIKKyJ0YWJsZXMuICBPciBwZXJoYXBzIHlvdSBkZWxldGVkIHRoZSBHUFQgdGFibGUsIGFuZCBhcmUgbm93IHVzaW5nIGFuIG1zZG9zICIKKyJwYXJ0aXRpb24gdGFibGUuICBJcyB0aGlzIGEgR1BUIHBhcnRpdGlvbiB0YWJsZT8iCittc2dzdHIgIiIKKyIlcywgR1BUIHRhYmxvc3UgaedlcmRp8GluaSBiZWxpcnRlbiBHUFQgaW16YWxhcv1uYSBzYWhpcC4gIEF5cv1jYSwgb2xtYXP9ICIKKyJnZXJla2VuaW4gYWtzaW5lLCBnZedlcmxpIHNhaHRlIG1zZG9zIGRpc2sgYvZs/G1sZW1lIHRhYmxvc3UgeW9rLiAgQmVsa2kgR1BUICIKKyJkaXNrIGL2bPxtbGVtZSB0YWJsb2xhcv1uZGFuIGFubGFtYXlhbiBiaXIgcHJvZ3JhbSB0YXJhZv1uZGFuIGJvenVsbXX+dHVyLiAgIgorIllhIGRhIGJlbGtpIHNpeiBHUFQgdGFibG9zdW51IHNpbGRpbml6IHZlIP5pbWRpIGJpciBtc2RvcyBkaXNrIGL2bPxtbGVtZSAiCisidGFibG9zdSBrdWxsYW5tYWt0YXP9bv16LiAgQnUgYmlyIEdQVCBkaXNrIGL2bPxtbGVtZSB0YWJsb3N1IG11PyIKKworIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzo2NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb3JtYXQgb2YgdGhlIEdQVCBwYXJ0aXRpb24gdGFibGUgaXMgdmVyc2lvbiAleCwgd2hpY2ggaXMgbmV3ZXIgdGhhbiAiCisid2hhdCBQYXJ0ZWQgY2FuIHJlY29nbmlzZS4gIFBsZWFzZSB0ZWxsIHVzISAgYnVnLXBhcnRlZEBnbnUub3JnIgorbXNnc3RyICIiCisiR1BUIGRpc2sgYvZs/G1sZW1lIHRhYmxvc3UgYmnnZW1pIHP8cvxtICV4IG9sdXAsIFBhcnRlZCf9biAiCisidGFu/XlhYmlsZWNl8GluZGVuIGRhaGEgeWVuaWRpci4gIEz8dGZlbiBiaXplIGJpbGRpcmluISAgYnVnLXBhcnRlZEBnbnUub3JnIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm90IGFsbCBvZiB0aGUgc3BhY2UgYXZhaWxhYmxlIHRvICVzIGFwcGVhcnMgdG8gYmUgdXNlZCwgeW91IGNhbiBmaXggdGhlIEdQVCAiCisidG8gdXNlIGFsbCBvZiB0aGUgc3BhY2UgKGFuIGV4dHJhICVsbHUgYmxvY2tzKSBvciBjb250aW51ZSB3aXRoIHRoZSBjdXJyZW50ICIKKyJzZXR0aW5nPyAiCittc2dzdHIgIiIKKyIlcyBp52luIGt1bGxhbv1sYWJpbGlyIGJv/mx18HVuIHRhbWFt/SBrdWxsYW79bG1hbf3+IGf2cvxu/HlvciwgR1BUJ3lpICIKKyJheWFybGF5/XAgdPxtIG1ldmN1dCBib/5sdfB1ICglbGx1IGVrIGJsb2spIGt1bGxhbmFiaWxpciB5YSBkYSBtZXZjdXQgYXlhcmxhICIKKyJkZXZhbSBlZGViaWxpcnNpbml6PyIKKworIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzo4MjcKK21zZ2lkICIiCisiVGhlIGJhY2t1cCBHUFQgdGFibGUgaXMgbm90IGF0IHRoZSBlbmQgb2YgdGhlIGRpc2ssIGFzIGl0IHNob3VsZCBiZS4gIFRoaXMgIgorIm1pZ2h0IG1lYW4gdGhhdCBhbm90aGVyIG9wZXJhdGluZyBzeXN0ZW0gYmVsaWV2ZXMgdGhlIGRpc2sgaXMgc21hbGxlci4gIEZpeCwgIgorImJ5IG1vdmluZyB0aGUgYmFja3VwIHRvIHRoZSBlbmQgKGFuZCByZW1vdmluZyB0aGUgb2xkIGJhY2t1cCk/IgorbXNnc3RyICIiCisiR1BUIHRhYmxvc3VudW4geWVkZfBpLCBvbG1hc/0gZ2VyZWt0afBpIGdpYmkgZGlza2luIHNvbnVuZGEgZGXwaWwuICBCdSwgYmlyICIKKyJiYf5rYSBp/mxldGltIHNpc3RlbWluaW4gZGlza2kgb2xkdfB1bmRhbiBr/Of8ayBzYW5tYXP9IGFubGFt/W5hIGdlbGViaWxpci4gICIKKyJZZWRl8Gkgc29uYSB0Yf79eWFyYWsgKHZlIGVza2kgeWVkZfBpIHNpbGVyZWspIG9uYXL9bv16PyIKKworIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzo4NjIKK21zZ2lkICIiCisiVGhlIHByaW1hcnkgR1BUIHRhYmxlIGlzIGNvcnJ1cHQsIGJ1dCB0aGUgYmFja3VwIGFwcGVhcnMgT0ssIHNvIHRoYXQgd2lsbCBiZSAiCisidXNlZC4iCittc2dzdHIgIiIKKyJCaXJpbmNpbCBHUFQgdGFibG9zdSBib3p1aywgYW1hIHllZGVrIHRhbWFtIGf2cvxu/HlvciwgZG9sYXn9c/15bGEgeWVkZWsgIgorImt1bGxhbv1sYWNhay4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6ODcwCittc2dpZCAiIgorIkJvdGggdGhlIHByaW1hcnkgYW5kIGJhY2t1cCBHUFQgdGFibGVzIGFyZSBjb3JydXB0LiAgVHJ5IG1ha2luZyBhIGZyZXNoICIKKyJ0YWJsZSwgYW5kIHVzaW5nIFBhcnRlZCdzIHJlc2N1ZSBmZWF0dXJlIHRvIHJlY292ZXIgcGFydGl0aW9ucy4iCittc2dzdHIgIiIKKyJIZW0gYmlyaW5jaWwsIGhlbSBkZSB5ZWRlayBHUFQgdGFibG9zdSBib3p1ay4gIFllbmkgYmlyIHRhYmxvIG9sdf50dXJtYXn9IHZlICIKKyJQYXJ0ZWQn/W4ga3VydGFybWEg9nplbGxp8GluaSBrdWxsYW5hcmFrIGRpc2sgYvZs/G1sZXJpbmkga3VydGFybWF5/SBkZW5leWluLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoxODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBzaWduYXR1cmUgJXggZm9yIE1hYyBkaXNrIGxhYmVscy4iCittc2dzdHIgIk1hYyBkaXNrIGV0aWtldGxlcmkgaedpbiBnZedlcnNpeiBpbXphICV4LiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoyMjYKK21zZ2lkICJQYXJ0aXRpb24gbWFwIGhhcyBubyBwYXJ0aXRpb24gbWFwIGVudHJ5ISIKK21zZ3N0ciAiRGlzayBi9mz8bfwgZf5sZW1pbmluIGRpc2sgYvZs/G38IGX+bGVtIGdpcmRpc2kgeW9rISIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgdG9vIHNtYWxsIGZvciBhIE1hYyBkaXNrIGxhYmVsISIKK21zZ3N0ciAiJXMsIGJpciBNYWMgZGlzayBldGlrZXRpIGnnaW4g529rIGv85/xrISIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo1MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGFydGl0aW9uICVkIGhhcyBhbiBpbnZhbGlkIHNpZ25hdHVyZSAleC4iCittc2dzdHIgIiVkIGRpc2sgYvZs/G38IGdl52Vyc2l6IGltemF5YSBzYWhpcCAleC4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIlBhcnRpdGlvbiAlZCBoYXMgYW4gaW52YWxpZCBsZW5ndGggb2YgMCBieXRlcyEiCittc2dzdHIgIiVkIGRpc2sgYvZs/G38IDAgYmF5dGz9ayBnZedlcnNpeiB1enVubHXwYSBzYWhpcCEiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NTgwCittc2dpZCAiVGhlIGRhdGEgcmVnaW9uIGRvZXNuJ3Qgc3RhcnQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBwYXJ0aXRpb24uIgorbXNnc3RyICJWZXJpIGL2bGdlc2ksIGRpc2sgYvZs/G38bvxuIGJh/v1uZGFuIGJh/mxhbf15b3IiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NTk3Cittc2dpZCAiVGhlIGJvb3QgcmVnaW9uIGRvZXNuJ3Qgc3RhcnQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBwYXJ0aXRpb24uIgorbXNnc3RyICLWbnn8a2xlbWUgYvZsZ2VzaSwgZGlzayBi9mz8bfxu/G4gYmH+/W5kYW4gYmH+bGFt/XlvciIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo2MTEKK21zZ2lkICJUaGUgcGFydGl0aW9uJ3MgYm9vdCByZWdpb24gZG9lc24ndCBvY2N1cHkgdGhlIGVudGlyZSBwYXJ0aXRpb24uIgorbXNnc3RyICJEaXNrIGL2bPxt/G78biD2bnn8a2xlbWUgYvZsZ2VzaSB0/G0gZGlzayBi9mz8bfxu/CBrYXBsYW39eW9yLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo2MjIKK21zZ2lkICJUaGUgcGFydGl0aW9uJ3MgZGF0YSByZWdpb24gZG9lc24ndCBvY2N1cHkgdGhlIGVudGlyZSBwYXJ0aXRpb24uIgorbXNnc3RyICJEaXNrIGL2bPxt/G78biB2ZXJpIGL2bGdlc2kgdPxtIGRpc2sgYvZs/G38bvwga2FwbGFt/Xlvci4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6Njc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXZWlyZCBibG9jayBzaXplIG9uIGRldmljZSBkZXNjcmlwdG9yOiAlZCBieXRlcyBpcyBub3QgZGl2aXNpYmxlIGJ5IDUxMi4iCittc2dzdHIgIkF5Z/10IHRhbv1tbGF5/WP9c/1uZGEgdHVoYWYgYmxvayBib3l1dHU6ICVkIGJheXQsIDUxMid5ZSBi9mz8bmVtaXlvci4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6Njg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZHJpdmVyIGRlc2NyaXB0b3Igc2F5cyB0aGUgcGh5c2ljYWwgYmxvY2sgc2l6ZSBpcyAlZCBieXRlcywgYnV0IExpbnV4ICIKKyJzYXlzIGl0IGlzICVkIGJ5dGVzLiIKK21zZ3N0ciAiIgorIlP8cvxj/CB0YW79bWxhef1j/XP9IGZpemlrc2VsIGJsb2sgYm95dXR1bnVuICVkIGJheXQgb2xkdfB1bnUsIExpbnV4ICVkIGJheXQgIgorIm9sZHXwdW51IGJpbGRpcml5b3IuLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo3MzYKK21zZ2lkICJObyB2YWxpZCBwYXJ0aXRpb24gbWFwIGZvdW5kLiIKK21zZ3N0ciAiR2XnZXJsaSBkaXNrIGL2bPxt/CBl/mxlbWkgYnVsdW5hbWFk/S4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6Nzk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb25mbGljdGluZyBwYXJ0aXRpb24gbWFwIGVudHJ5IHNpemVzISAgRW50cnkgMSBzYXlzIGl0IGlzICVkLCBidXQgZW50cnkgJWQgIgorInNheXMgaXQgaXMgJWQhIgorbXNnc3RyICIiCisix2Vsaf5lbiBkaXNrIGL2bPxt/CBl/mxlbSBnaXJkaSBib3l1dGxhcv0hICAxLiBHaXJkaSAlMSRkIG9sZHXwdW51LCBhbmNhayAlMiIKKyIkZC4gZ2lyZGkgJTMkZCBvbGR18HVudSBiaWxkaXJpeW9yISIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo4MjIKK21zZ2lkICJXZWlyZCEgIFRoZXJlIGFyZSAyIHBhcnRpdGlvbnMgbWFwIGVudHJpZXMhIgorbXNnc3RyICJUdWhhZiEtICAyIGRpc2sgYvZs/G38IGX+bGVtIGdpcmRpc2kgbWV2Y3V0ISIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoxMzQ3Cittc2dpZCAiIgorIkNoYW5naW5nIHRoZSBuYW1lIG9mIGEgcm9vdCBvciBzd2FwIHBhcnRpdGlvbiB3aWxsIHByZXZlbnQgTGludXggZnJvbSAiCisicmVjb2duaXNpbmcgaXQgYXMgc3VjaC4iCittc2dzdHIgIiIKKyJCaXIga/ZrIHlhIGRhIHRha2FzIGRpc2sgYvZs/G38bvxuIGFk/W79IGRl8Gn+dGlybWVrLCBMaW51eCd1biBvbnUgb2xkdfB1ICIKKyJnaWJpIHRhbv1tYXP9bv0gZW5nZWxsZXllY2VrLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoxNDQzCittc2dpZCAiQ2FuJ3QgYWRkIGFub3RoZXIgcGFydGl0aW9uIC0tIHRoZSBwYXJ0aXRpb24gbWFwIGlzIHRvbyBzbWFsbCEiCittc2dzdHIgIkJpciBiYf5rYSBkaXNrIGL2bPxt/CBla2xlbmVtaXlvciAtLSBkaXNrIGL2bPxtIGX+bGVtaSDnb2sga/zn/GshIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3BjOTguYzozNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBwYXJ0aXRpb24gdGFibGUgb24gJXMuIgorbXNnc3RyICIlcyD8emVyaW5kZSBnZedlcnNpeiBkaXNrIGL2bPxtbGVtZSB0YWJsb3N1LiIKKworIzogbGlicGFydGVkL2xhYmVscy9wYzk4LmM6NDA2IGxpYnBhcnRlZC9sYWJlbHMvcGM5OC5jOjQ4NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGFydGl0aW9uICVkIGlzbid0IGFsaWduZWQgdG8gY3lsaW5kZXIgYm91bmRhcmllcy4gIFRoaXMgaXMgc3RpbGwgIgorInVuc3VwcG9ydGVkLiIKK21zZ3N0ciAiIgorIiVkIGRpc2sgYvZs/G38IHNpbGluZGlyIHP9bv1ybGFy/W5hIGhpemFsYW5tYW39/i4gIEJ1IGhhbGEgZGVzdGVrbGVubWl5b3IuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3BjOTguYzo3OTEKK21zZ2lkICJDYW4ndCBhZGQgYW5vdGhlciBwYXJ0aXRpb24uIgorbXNnc3RyICJCaXIgYmH+a2EgZGlzayBi9mz8bfwgZWtsZW5lbWl5b3IuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjE2MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEJhZCBjaGVja3N1bSBvbiBibG9jayAlbGx1IG9mIHR5cGUgJXMuIgorbXNnc3RyICIlMSRzIDogJTMkcyB0/HL8bmRla2kgJTIkbGx1IGJsb/B1bmRhIGJvenVrIHNh8GxhbWEgdG9wbGFt/SIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo0OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBEaWRuJ3QgZmluZCByZGIgYmxvY2ssIHNob3VsZCBuZXZlciBoYXBwZW4uIgorbXNnc3RyICIlcyA6IHJkYiBibG/wdSBidWx1bmFtYWT9LCBhc2xhIG9sbWFtYWz9KHlk/SkuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjU4MQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IExvb3AgZGV0ZWN0ZWQgYXQgYmxvY2sgJWQuIgorbXNnc3RyICIlMSRzIDogQmxvayAlMiRkJ2RlIGT2bmf8IHNhcHRhbmT9LiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo2MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBUaGUgJXMgbGlzdCBzZWVtcyBiYWQgYXQgYmxvY2sgJXMuIgorbXNnc3RyICIlMSRzIDogJTIkcyBsaXN0ZXNpICUzJHMgYmxv8HVuZGEgYm96dWsgZ/Zy/G78eW9yLiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo2ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gbGlzdCBiYWQgYmxvY2tzLiIKK21zZ3N0ciAiJXMgOiBIYXRhbP0gYmxva2xhcv0gbGlzdGVsZW1lIGJh/mFy/XP9ei4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6Njk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGxpc3QgcGFydGl0aW9uIGJsb2Nrcy4iCittc2dzdHIgIiVzIDogQvZs/G1sZW1lIGJsb2tsYXL9bv0gbGlzdGVsZW1lIGJh/mFy/XP9ei4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6NzA1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGxpc3QgZmlsZSBzeXN0ZW0gYmxvY2tzLiIKK21zZ3N0ciAiJXMgOiBEb3N5YSBzaXN0ZW1pIGJsb2tsYXL9bv0gbGlzdGVsZW1lIGJh/mFy/XP9eiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo3MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gbGlzdCBib290IGJsb2Nrcy4iCittc2dzdHIgIiVzIDog1m55/GtsZW1lIGJsb2tsYXL9bv0gbGlzdGVsZW1lIGJh/mFy/XP9ei4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6NzQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byB3cml0ZSBwYXJ0aXRpb24gYmxvY2sgYXQgJWQuIgorbXNnc3RyICIlZCd5ZSBi9mz8bWxlbWUgYmxv8HUgeWF6/W39IGJh/mFy/XP9ei4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6MTA2OQorbXNnaWQgIlVuYWJsZSB0byBhbGxvY2F0ZSBhIHBhcnRpdGlvbiBudW1iZXIuIgorbXNnc3RyICJCaXIgZGlzayBi9mz8bfwgbnVtYXJhc/0gYXRhbmFtYWT9LiIKKworIzogbGlicGFydGVkL2xhYmVscy9zdW4uYzoxNDUKK21zZ2lkICJDb3JydXB0ZWQgU3VuIGRpc2sgbGFiZWwgZGV0ZWN0ZWQuIgorbXNnc3RyICJCb3p1ayBTdW4gZGlzayBldGlrZXRpIHNhcHRhbmT9LiIKKworIzogbGlicGFydGVkL2xhYmVscy9zdW4uYzoyNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBkaXNrIENIUyBnZW9tZXRyeSAoJWQsJWQsJWQpIHJlcG9ydGVkIGJ5IHRoZSBvcGVyYXRpbmcgc3lzdGVtIGRvZXMgbm90ICIKKyJtYXRjaCB0aGUgZ2VvbWV0cnkgc3RvcmVkIG9uIHRoZSBkaXNrIGxhYmVsICglZCwlZCwlZCkuIgorbXNnc3RyICIiCisiRGlzayBDSFMgZ2VvbWV0cmlzaSAoJWQsJWQsJWQpLCBkaXNrIGV0aWtldGluZGUgc2FrbGFuYW4gZ2VvbWV0cml5ZSAoJWQsJWQsJSIKKyJkKS51eW11eW9yLiIKKworIzogbGlicGFydGVkL2xhYmVscy9zdW4uYzoyODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGRpc2sgbGFiZWwgZGVzY3JpYmVzIGEgZGlzayBiaWdnZXIgdGhhbiAlcy4iCittc2dzdHIgIkRpc2sgZXRpa2V0aSwgJXMnZGVuIGRhaGEgYvx5/GsgYmlyIGRpc2sgdGFu/W1s/Xlvci4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6NDQyCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBkaXNrIGhhcyAlZCBjeWxpbmRlcnMsIHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbWF4aW11bSBvZiA2NTUzNi4iCittc2dzdHIgIkRpc2sgJWQgc2lsaW5kaXJlIHNhaGlwIGtpIGJ1IG1ha3NpbXVtIDY1NTM2J2RhbiBkYWhhIOdvay4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6NzM3Cittc2dpZCAiIgorIlRoZSBXaG9sZSBEaXNrIHBhcnRpdGlvbiBpcyB0aGUgb25seSBhdmFpbGFibGUgb25lIGxlZnQuICBHZW5lcmFsbHksIGl0IGlzICIKKyJub3QgYSBnb29kIGlkZWEgdG8gb3ZlcndyaXRlIHRoaXMgcGFydGl0aW9uIHdpdGggYSByZWFsIG9uZS4gIFNvbGFyaXMgbWF5ICIKKyJub3QgYmUgYWJsZSB0byBib290IHdpdGhvdXQgaXQsIGFuZCBTSUxPICh0aGUgc3BhcmMgYm9vdCBsb2FkZXIpIGFwcHJlY2lhdGVzICIKKyJpdCBhcyB3ZWxsLiIKK21zZ3N0ciAiIgorIkdlcmlkZSB5YWxu/XpjYSBU/G0gRGlzayBkaXNrIGL2bPxt/CBrYWxk/S4gIEdlbmVsbGlrbGUsIGJ1IGRpc2sgYvZs/G38bvxuICIKKyL8emVyaW5lIGJpciBnZXLnZfBpbmkgeWF6bWFrIGl5aSBiaXIgZmlraXIgZGXwaWxkaXIuICBTb2xhcmlzIG9uc3V6ICIKKyJh5/1sbWF5YWJpbGlyLCB2ZSBTSUxPIGRhIChzcGFyYyD2bnn8a2xleWljaXNpKSBvbmEgZGXwZXIgdmVyaXIuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3N1bi5jOjc1MgorbXNnaWQgIlN1biBkaXNrIGxhYmVsIGlzIGZ1bGwuIgorbXNnc3RyICJTdW4gZGlzayBldGlrZXRpIGRvbGR1LiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6MTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBvcGVuaW5nIGRldmljZSAnJXMnIGZhaWxlZC5cbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjE2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgc2Vla2luZyBkZXZpY2UgJyVzJyBmYWlsZWQuXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzoxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHdyaXRpbmcgdG8gZGV2aWNlICclcycgZmFpbGVkLFxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6MTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyByZWFkaW5nIGZyb20gZGV2aWNlICclcycgZmFpbGVkLlxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6MTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhdGFsIGVycm9yXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDE4Cittc2dpZCAiQ291bGQgbm90IHJlYWQgVlRPQyBsYWJlbHMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQyNAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIFZUT0MgRk1UMSBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0MzEKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBWVE9DIEZNVDQgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDM4Cittc2dpZCAiQ291bGQgbm90IHJlYWQgVlRPQyBGTVQ1IERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQ0NQorbXNnaWQgIkNvdWxkIG5vdCByZWFkIFZUT0MgRk1UNyBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0NjIKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgVlRPQyBsYWJlbHMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQ2OAorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBWVE9DIEZNVDEgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDc1Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIFZUT0MgRk1UNCBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0ODIKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgVlRPQyBGTVQ1IERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQ4OQorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBWVE9DIEZNVDcgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xpYnBhcnRlZC5jOjI5NiBsaWJwYXJ0ZWQvbGlicGFydGVkLmM6MzE2Cittc2dpZCAiT3V0IG9mIG1lbW9yeS4iCittc2dzdHIgIllldGVyc2l6IGJlbGxlayIKKworIzogbGlicGFydGVkL3VuaXQuYzoxMzkKK21zZ2lkICJDYW5ub3QgZ2V0IHVuaXQgc2l6ZSBmb3Igc3BlY2lhbCB1bml0ICdDT01QQUNUJy4iCittc2dzdHIgItZ6ZWwgYmlyaW0gJ0NPTVBBQ1QnIGnnaW4gYmlyaW0gYm95dXR1IGFs/W5hbf15b3IuIgorCisjOiBsaWJwYXJ0ZWQvdW5pdC5jOjM4NgorIywgYy1mb3JtYXQKK21zZ2lkICJcIiVzXCIgaGFzIGludmFsaWQgc3ludGF4IGZvciBsb2NhdGlvbnMuIgorbXNnc3RyICJcIiVzXCIgeWVybGX+aW1sZXIgaedpbiBnZedlcnNpeiB5YXr9bWEgc2FoaXAuIgorCisjOiBsaWJwYXJ0ZWQvdW5pdC5jOjM5NAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgbWF4aW11bSBoZWFkIHZhbHVlIGlzICVkLiIKK21zZ3N0ciAiTWFrc2ltdW0ga2FmYSBkZfBlcmkgJWQuIgorCisjOiBsaWJwYXJ0ZWQvdW5pdC5jOjQwMQorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgbWF4aW11bSBzZWN0b3IgdmFsdWUgaXMgJWQuIgorbXNnc3RyICJNYWtzaW11bSBzZWt09nIgZGXwZXJpICVkLiIKKworIzogbGlicGFydGVkL3VuaXQuYzo0MTMgbGlicGFydGVkL3VuaXQuYzo1NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGxvY2F0aW9uICVzIGlzIG91dHNpZGUgb2YgdGhlIGRldmljZSAlcy4iCittc2dzdHIgIiUxJHMgeWVybGX+aW1pICUyJHMgYXln/XT9bv1uIGT9/v1uZGEuIgorCisjOiBsaWJwYXJ0ZWQvdW5pdC5jOjUyNworbXNnaWQgIkludmFsaWQgbnVtYmVyLiIKK21zZ3N0ciAiR2XnZXJzaXogbnVtYXJhLiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FmZnMuYzo2MyBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXBmcy5jOjU2CisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXNmcy5jOjcwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBhbGxvY2F0ZSBwYXJ0aXRpb24gYmxvY2tcbiIKK21zZ3N0ciAiJXMgOiBC9mz8bWxlbWUgYmxva2xhcv1u/SBsaXN0ZWxlbWUgYmH+YXL9c/16LiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FmZnMuYzo3OCBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXBmcy5jOjcwCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXNmcy5jOjg2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBhbGxvY2F0ZSBibG9ja1xuIgorbXNnc3RyICIlcyA6INZuefxrbGVtZSBibG9rbGFy/W79IGxpc3RlbGVtZSBiYf5hcv1z/XouIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYWZmcy5jOjgzIGxpYnBhcnRlZC9mcy9hbWlnYS9hcGZzLmM6NzUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogQ291bGRuJ3QgcmVhZCBib290IGJsb2NrICVsbHVcbiIKK21zZ3N0ciAiJTEkcyA6IEJsb2sgJTIkZCdkZSBk9m5n/CBzYXB0YW5k/S4iCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hZmZzLmM6OTkgbGlicGFydGVkL2ZzL2FtaWdhL2FwZnMuYzo4NgorIzogbGlicGFydGVkL2ZzL2FtaWdhL2FzZnMuYzo5MiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXNmcy5jOjEwNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBDb3VsZG4ndCByZWFkIHJvb3QgYmxvY2sgJWxsdVxuIgorbXNnc3RyICIlMSRzIDogQmxvayAlMiRkJ2RlIGT2bmf8IHNhcHRhbmT9LiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6NzIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGFsbG9jYXRlIGlkIGxpc3QgZWxlbWVudFxuIgorbXNnc3RyICIlcyA6IEhhdGFs/SBibG9rbGFy/SBsaXN0ZWxlbWUgYmH+YXL9c/16LiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogQ291bGRuJ3QgcmVhZCBibG9jayAlbGx1XG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6MjAyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEJhZCBjaGVja3N1bSBvbiBibG9jayAlbGx1IG9mIHR5cGUgJXNcbiIKK21zZ3N0ciAiJTEkcyA6ICUzJHMgdPxy/G5kZWtpICUyJGxsdSBibG/wdW5kYSBib3p1ayBzYfBsYW1hIHRvcGxhbf0iCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jOjIxMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBDb3VsZG4ndCB3cml0ZSBibG9jayAlZFxuIgorbXNnc3RyICIlMSRzIDogQmxvayAlMiRkJ2RlIGT2bmf8IHNhcHRhbmT9LiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6Mjc4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBhbGxvY2F0ZSBkaXNrX3NwZWNpZmljIHJkYiBibG9ja1xuIgorbXNnc3RyICIlcyA6IEhhdGFs/SBibG9rbGFy/SBsaXN0ZWxlbWUgYmH+YXL9c/16LiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6Mjg5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyA6IERpZG4ndCBmaW5kIHJkYiBibG9jaywgc2hvdWxkIG5ldmVyIGhhcHBlblxuIgorbXNnc3RyICIlcyA6IHJkYiBibG/wdSBidWx1bmFtYWT9LCBhc2xhIG9sbWFtYWz9KHlk/SkuIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzozMTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIHJlYWQgcGFydGl0aW9uIGJsb2NrICVsbHVcbiIKK21zZ3N0ciAiJXMgOiBC9mz8bWxlbWUgYmxva2xhcv1u/SBsaXN0ZWxlbWUgYmH+YXL9c/16LiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjg3IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzoxMTIKK21zZ2lkICJJbmNvbnNpc3RlbnQgZ3JvdXAgZGVzY3JpcHRvcnMhIgorbXNnc3RyICJUdXRhcnP9eiBncnVwIHRhbv1tbGF5/WP9bGFy/SEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo5MSBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6MTE2Cittc2dpZCAiRmlsZSBzeXN0ZW0gZnVsbCEiCittc2dzdHIgIkRvc3lhIHNpc3RlbWkgZG9sdSEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo2ODYKK21zZ2lkICJJbnZhbGlkIHN1cGVyYmxvY2suICBBcmUgeW91IHN1cmUgdGhpcyBpcyBhbiBleHQyIGZpbGUgc3lzdGVtPyIKK21zZ3N0ciAiIgorIkdl52Vyc2l6IHP8cGVyYmxvay4gIEJ1bnVuIGJpciBleHQyIGRvc3lhIHNpc3RlbWkgb2xkdfB1bmRhbiBlbWluIG1pc2luaXo/IgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6NzAwIGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NjU4Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGVycm9ycyEgIFlvdSBzaG91bGQgcnVuIGUyZnNjay4iCittc2dzdHIgIkRvc3lhIHNpc3RlbWluZGUgaGF0YWxhciB2YXIhICBlMmZzY2sneWkgefxy/HT8bi4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo3MTEKK21zZ2lkICIiCisiRmlsZSBzeXN0ZW0gd2FzIG5vdCBjbGVhbmx5IHVubW91bnRlZCEgIFlvdSBzaG91bGQgcnVuIGUyZnNjay4gIE1vZGlmeWluZyBhbiAiCisidW5jbGVhbiBmaWxlIHN5c3RlbSBjb3VsZCBjYXVzZSBzZXZlcmUgY29ycnVwdGlvbi4iCittc2dzdHIgIiIKKyJEb3N5YSBzaXN0ZW1pIHRlbWl6Y2UgYXly/WxtYWT9ISAgZTJmc2NrJ2xhbWFs/XP9bv16LiAgVGVtaXogb2xtYXlhbiBkb3N5YSAiCisic2lzdGVtaW5pIGRl8Gn+dGlybWVrIGNpZGRpIHNvcnVubGFyYSB5b2wgYedhYmlsaXIuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6NzMxCittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGluY29tcGF0aWJsZSBmZWF0dXJlIGVuYWJsZWQuIgorbXNnc3RyICJEb3N5YSBzaXN0ZW1pbmluIHV5dW1zdXogYmlyIG5pdGVsafBpIGV0a2lubGX+dGlyaWxtaf4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo3NDIKK21zZ2lkICJFcnJvciBhbGxvY2F0aW5nIGJ1ZmZlciBjYWNoZS4iCittc2dzdHIgIlRhbXBvbiD2bmJlbGxlayBhdGFtYWRhIGhhdGEuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2lub2RlX3JlbG9jYXRvci5jOjExNAorbXNnaWQgIiIKKyJGb3VuZCBhbiBpbm9kZSB3aXRoIGEgaW5jb3JyZWN0IGxpbmsgY291bnQuICBCZXR0ZXIgZ28gcnVuIGUyZnNjayBmaXJzdCEiCittc2dzdHIgIiIKKyJZYW5s/f4gbGluayBzYXn9c/1uYSBzYWhpcCBiaXIgZG9zeWEgaW5kZWtzaSBidWx1bmR1LiAg3Xlpc2kgbWkg9m5jZSBiaXIgIgorImUyZnNjayB5/HL8dPxuLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9pbm9kZV9yZWxvY2F0b3IuYzo0ODcKK21zZ2lkICJOb3QgZW5vdWdoIGZyZWUgaW5vZGVzISIKK21zZ3N0ciAiWWV0ZXJsaSBzZXJiZXN0IGRvc3lhIGluZGVrc2kgeW9rISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzoyMjMKK21zZ2lkICJGaWxlIHN5c3RlbSBpcyB0b28gZnVsbCB0byByZW1vdmUgYSBncm91cCEiCittc2dzdHIgIkRvc3lhIHNpc3RlbWkgYmlyIGdydWJ1IHNpbG1layBp52luIOdvayBkb2x1ISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzoyMzIKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgdG9vIG1hbnkgYWxsb2NhdGVkIGlub2RlcyB0byByZW1vdmUgYSBncm91cCEiCittc2dzdHIgIkRvc3lhIHNpc3RlbWkgYmlyIGdydWJ1IHNpbG1layBp52luIOdvayBzYXn9ZGEgZG9zeWEgaW5kZWtzaW5lIHNhaGlwISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo0OTEKK21zZ2lkICJhZGRpbmcgZ3JvdXBzIgorbXNnc3RyICJncnVwbGFyIGVrbGVuaXlvciIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo1MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBmaWxlIHN5c3RlbSBpcyB0b28gZnVsbCB0byByZXNpemUgaXQgdG8gJWkgYmxvY2tzLiAgU29ycnkuIgorbXNnc3RyICIiCisiRG9zeWEgc2lzdGVtaW5peiAlaSBibG/wYSB5ZW5pZGVuIGJveXV0bGFuZP1y/WxtYWsgaedpbiDnb2sgZG9sdWwuICDcemf8bvxtLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo1MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgZmlsZSBzeXN0ZW0gaGFzIHRvbyBtYW55IG9jY3VwaWVkIGlub2RlcyB0byByZXNpemUgaXQgdG8gJWkgYmxvY2tzLiAgIgorIlNvcnJ5LiIKK21zZ3N0ciAiIgorIkRvc3lhIHNpc3RlbWluaXogJWkgYmxv8GEgeWVuaWRlbiBib3l1dGxhbmT9cm1hayBp52luIOdvayBzYXn9ZGEgZG9sdSBkb3N5YSAiCisiaW5kZWtzaW5lIHNhaGlwLiAg3Hpn/G78bS4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NjY2Cittc2dpZCAiRmlsZSBzeXN0ZW0gd2FzIG5vdCBjbGVhbmx5IHVubW91bnRlZCEgIFlvdSBzaG91bGQgcnVuIGUyZnNjay4iCittc2dzdHIgIkRvc3lhIHNpc3RlbWkgdGVtaXpjZSBheXL9bG1hZP0hICBlMmZzY2sg52Fs/f50/XJtYWz9c/1u/XouIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjY3NQorbXNnaWQgIiIKKyJUaGUgZmlsZSBzeXN0ZW0gaGFzIHRoZSAnZGlyX2luZGV4JyBmZWF0dXJlIGVuYWJsZWQuICBQYXJ0ZWQgY2FuIG9ubHkgcmVzaXplICIKKyJ0aGUgZmlsZSBzeXN0ZW0gaWYgaXQgZGlzYWJsZXMgdGhpcyBmZWF0dXJlLiAgWW91IGNhbiBlbmFibGUgaXQgbGF0ZXIgYnkgIgorInJ1bm5pbmcgJ3R1bmUyZnMgLU8gZGlyX2luZGV4IERFVklDRScgYW5kIHRoZW4gJ2UyZnNjayAtZkQgREVWSUNFJy4iCittc2dzdHIgIiIKKyJEb3N5YSBzaXN0ZW1pbmluICdkaXJfaW5kZXgnIPZ6ZWxsafBpIGV0a2luIGhhbGRlLi4uICBQYXJ0ZWQsIGRvc3lhICIKKyJzaXN0ZW1pbmkgYW5jYWsgYnUg9nplbGxp8GkgZGV2cmUgZP3+/SBi/XJha2FyYWsgeWVuaWRlbiBib3l1dGxhbmT9cmFiaWxpci4gICIKKyJEYWhhIHNvbnJhICd0dW5lMmZzIC1PIGRpcl9pbmRleCcgdmUgc29ucmFz/W5kYSAnZTJmc2NrIC1mRCBBWUdJVCcgIgorImtvbXV0bGFy/XlsYSB5ZW5pZGVuIGV0a2lubGX+dGlyZWJpbGlyc2luaXouIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjY5MQorbXNnaWQgIiIKKyJBIHJlc2l6ZSBvcGVyYXRpb24gb24gdGhpcyBmaWxlIHN5c3RlbSB3aWxsIHVzZSBFWFBFUklNRU5UQUwgY29kZVxuIgorInRoYXQgTUFZIENPUlJVUFQgaXQgKGFsdGhvdWdoIG5vIG9uZSBoYXMgcmVwb3J0ZWQgYW55IHN1Y2ggZGFtYWdlIHlldCkuXG4iCisiWW91IHNob3VsZCBhdCBsZWFzdCBiYWNrdXAgeW91ciBkYXRhIGZpcnN0LCBhbmQgcnVuICdlMmZzY2sgLWYnIGFmdGVyd2FyZHMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfYmxvY2tfcmVsb2NhdG9yLmM6MTk4Cittc2dpZCAiQ3Jvc3MtbGlua2VkIGJsb2NrcyBmb3VuZCEgIEJldHRlciBnbyBydW4gZTJmc2NrIGZpcnN0ISIKK21zZ3N0ciAix2FwcmF6IGJh8Gz9IGJsb2tsYXIgYnVsdW5kdSEg3Wl5aXNpIG1pIPZuY2UgZ2liaXAgZTJmc2NrIHn8cvx0/G4hIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2Jsb2NrX3JlbG9jYXRvci5jOjUzNworIywgYy1mb3JtYXQKK21zZ2lkICJCbG9jayAlaSBoYXMgbm8gcmVmZXJlbmNlPyAgV2VpcmQuIgorbXNnc3RyICIlaSBibG/wdW51biBiYf52dXJ1c3UgeW9rPyAgVHVoYWYiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfYmxvY2tfcmVsb2NhdG9yLmM6NzM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrICVpIHNob3VsZG4ndCBoYXZlIGJlZW4gbWFya2VkICglZCwgJWQpISIKK21zZ3N0ciAiJWkgYmxv8HUgaf5hcmV0bGVubWVtaf4gb2xtYWz9eWT9ICglZCwgJWQpISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvaW50ZXJmYWNlLmM6MTg2Cittc2dpZCAiIgorIlRoZSBleHQyIGZpbGUgc3lzdGVtIHBhc3NlZCBhIGJhc2ljIGNoZWNrLiAgRm9yIGEgbW9yZSBjb21wcmVoZW5zaXZlIGNoZWNrLCAiCisidXNlIHRoZSBlMmZzY2sgcHJvZ3JhbS4iCittc2dzdHIgIiIKKyJleHQyIGRvc3lhIHNpc3RlbWkgdGVtZWwgYmlyIGtvbnRyb2z8IGdl53RpLiAgRGFoYSBrYXBzYW1s/SBiaXIga29udHJvbCBp52luICIKKyJlMmZzY2sgcHJvZ3Jhbf1u/SBrdWxsYW79bv16LiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvaW50ZXJmYWNlLmM6MjAzCittc2dpZCAiU29ycnksIGNhbid0IG1vdmUgdGhlIHN0YXJ0IG9mIGV4dDIgcGFydGl0aW9ucyB5ZXQhIgorbXNnc3RyICLcemf8bvxtLCBoZW78eiBleHQyIGRpc2sgYvZs/G1sZXJpbmluIGJh/mxhbmf9Y/0gdGH+/W5hbf15b3IhIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2J1ZmZlci5jOjgyCittc2dpZCAiQ291bGRuJ3QgZmx1c2ggYnVmZmVyIGNhY2hlISIKK21zZ3N0ciAiVGFtcG9uIPZuYmVsbGVrIGJv/mFsdP1sYW1hZP0hIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX21rZnMuYzoxNjIKK21zZ2lkICJ3cml0aW5nIHBlci1ncm91cCBtZXRhZGF0YSIKK21zZ3N0ciAiZ3J1cCBiYXr9bmRhIG1ldGF2ZXJpc2kgeWF6/Wz9eW9yIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX21rZnMuYzo1NjQKK21zZ2lkICJGaWxlIHN5c3RlbSB0b28gc21hbGwgZm9yIGV4dDIuIgorbXNnc3RyICJleHQyIGnnaW4gZG9zeWEgc2lzdGVtaSDnb2sga/zn/GsuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NhbGMuYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBuZWVkICVzIG9mIGZyZWUgZGlzayBzcGFjZSB0byBzaHJpbmsgdGhpcyBwYXJ0aXRpb24gdG8gdGhpcyBzaXplLiAgIgorIkN1cnJlbnRseSwgb25seSAlcyBpcyBmcmVlLiIKK21zZ3N0ciAiIgorIkJ1IGRpc2sgYvZs/G38bvwgYnUgYm95dXRhIGv85/xsdG1layBp52luICUxJHMnbGlrIGJv/iB5ZXJlIGdlcmVrc2luaW1pbml6ICIKKyJ2YXIuICBIYWxlbiB5YWxu/XpjYSAlMiRzIGthZGFy/SBib/4uIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvbnRleHQuYzo1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2x1c3RlciBzdGFydCBkZWx0YSA9ICVkLCB3aGljaCBpcyBub3QgYSBtdWx0aXBsZSBvZiB0aGUgY2x1c3RlciBzaXplICVkLiIKK21zZ3N0ciAiS/xtZSBiYf5sYW5n/WP9IGRlbHRhID0gJWQsIGv8bWUgYm95dXR1IG9sYW4gJWQnbmluIGthdHNhef1z/SBkZfBpbC4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvZmF0LmM6MzA4CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhcnRpdGlvbiB0b28gYmlnL3NtYWxsIGZvciBhICVzIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiRGlzayBi9mz8bfwsIGJpciAlcyBkb3N5YSBzaXN0ZW1pIGnnaW4g529rIGL8efxrL2v85/xrIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jOjQ3NAorbXNnaWQgIiIKKyJUaGUgRkFUcyBkb24ndCBtYXRjaC4gIElmIHlvdSBkb24ndCBrbm93IHdoYXQgdGhpcyBtZWFucywgdGhlbiBzZWxlY3QgIgorImNhbmNlbCwgcnVuIHNjYW5kaXNrIG9uIHRoZSBmaWxlIHN5c3RlbSwgYW5kIHRoZW4gY29tZSBiYWNrLiIKK21zZ3N0ciAiIgorIkZBVCdsYXIgdXl1/m11eW9yLiAgRfBlciBidW51biBuZSBkZW1layBvbGR18HVudSBiaWxtaXlvcnNhbv16LCBWYXpnZecnaSAiCisic2XnaW4sIGRvc3lhIHNpc3RlbWluZGUgc2NhbmRpc2snaSB5/HL8dPxuLCB2ZSBidXJheWEgZPZu/G4uIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jOjUxNAorbXNnaWQgIlRoZXJlIGFyZSBubyBwb3NzaWJsZSBjb25maWd1cmF0aW9ucyBmb3IgdGhpcyBGQVQgdHlwZS4iCittc2dzdHIgIkJ1IEZBVCB0/HL8IGnnaW4gb2xhc/0geWFw/WxhbmT9cm1hIHlvay4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvZmF0LmM6NTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGaWxlIHN5c3RlbSBkb2Vzbid0IGhhdmUgZXhwZWN0ZWQgc2l6ZXMgZm9yIFdpbmRvd3MgdG8gbGlrZSBpdC4gIENsdXN0ZXIgIgorInNpemUgaXMgJWRrICglZGsgZXhwZWN0ZWQpOyBudW1iZXIgb2YgY2x1c3RlcnMgaXMgJWQgKCVkIGV4cGVjdGVkKTsgc2l6ZSBvZiAiCisiRkFUcyBpcyAlZCBzZWN0b3JzICglZCBleHBlY3RlZCkuIgorbXNnc3RyICIiCisiRG9zeWEgc2lzdGVtaSwgV2luZG93cyd1biBob/5sYW5tYXP9IGJla2xlbmVuIGJveXV0bGFyYSBzYWhpcCBkZfBpbC4gIEv8bWUgIgorImJveXV0dSAlZGsgKCVkayBiZWtsZW5pcmRpKTsga/xtZSBzYXn9c/0gJWQgKCVkIGJla2xlbmlyZGkpOyBGQVQgYm95dXRsYXL9ICUiCisiZCBzZWt09nJk/HIgKCVkIGJla2xlbmlyZGkpLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9mYXQuYzo1NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZpbGUgc3lzdGVtIGlzIHJlcG9ydGluZyB0aGUgZnJlZSBzcGFjZSBhcyAlZCBjbHVzdGVycywgbm90ICVkIGNsdXN0ZXJzLiIKK21zZ3N0ciAiRG9zeWEgc2lzdGVtaSBib/5sdfB1biAlZCBr/G1lIG9sZHXwdW51IGJpbGRpcml5b3IsICVkIGv8bWUgZGXwaWwuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jOjg3NAorbXNnaWQgIiIKKyJHTlUgUGFydGVkIHdhcyBtaXNjb21waWxlZDogdGhlIEZBVCBib290IHNlY3RvciBzaG91bGQgYmUgNTEyIGJ5dGVzLiAgRkFUICIKKyJzdXBwb3J0IHdpbGwgYmUgZGlzYWJsZWQuIgorbXNnc3RyICIiCisiR05VIHBhcnRlZCB5YW5s/f4gZGVybGVubWn+OiBGQVQg9m55/GtsZW1lIHNla3T2cvwgNTEyIGJheXQgb2xtYWz9LiAgRkFUICIKKyJkZXN0ZfBpIGRldnJlIGT9/v0gYv1yYWv9bGFjYWsuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjE1OQorbXNnaWQgIiIKKyJUaGVyZSdzIG5vdCBlbm91Z2ggcm9vbSBpbiB0aGUgcm9vdCBkaXJlY3RvcnkgZm9yIGFsbCBvZiB0aGUgZmlsZXMuICBFaXRoZXIgIgorImNhbmNlbCwgb3IgaWdub3JlIHRvIGxvc2UgdGhlIGZpbGVzLiIKK21zZ3N0ciAiIgorIkv2ayBkaXppbmluZGUgdPxtIGRvc3lhbGFyYSB5ZXRlY2VrIHllciB5b2suICBZYSBpcHRhbCBlZGluLCB5YSBkYSBkb3N5YWxhcv0gIgorInlpdGlybWVrIGnnaW4geW9rc2F5/W4uIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjMwMAorbXNnaWQgIkVycm9yIHdyaXRpbmcgdG8gdGhlIHJvb3QgZGlyZWN0b3J5LiIKK21zZ3N0ciAiS/ZrIGRpemluaW5lIHlhem1hZGEgaGF0YS4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NDg5Cittc2dpZCAiSWYgeW91IGxlYXZlIHlvdXIgZmlsZSBzeXN0ZW0gYXMgRkFUMTYsIHRoZW4geW91IHdpbGwgaGF2ZSBubyBwcm9ibGVtcy4iCittc2dzdHIgIkXwZXIgZG9zeWEgc2lzdGVtaW5pemkgRkFUMTYgb2xhcmFrIGL9cmFr/XJzYW79eiBzb3J1bnVudXogb2xtYXouIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjQ5MgorbXNnaWQgIiIKKyJJZiB5b3UgY29udmVydCB0byBGQVQxNiwgYW5kIE1TIFdpbmRvd3MgaXMgaW5zdGFsbGVkIG9uIHRoaXMgcGFydGl0aW9uLCB0aGVuICIKKyJ5b3UgbXVzdCByZS1pbnN0YWxsIHRoZSBNUyBXaW5kb3dzIGJvb3QgbG9hZGVyLiAgSWYgeW91IHdhbnQgdG8gZG8gdGhpcywgeW91ICIKKyJzaG91bGQgY29uc3VsdCB0aGUgUGFydGVkIG1hbnVhbCAob3IgeW91ciBkaXN0cmlidXRpb24ncyBtYW51YWwpLiIKK21zZ3N0ciAiIgorIkXwZXIgRkFUMTYneWEgZPZu/P50/HL8cnNlbml6IHZlIGJ1IGRpc2sgYvZs/G38bmUgTVMgV2luZG93cyB5/GtsZW5taf5zZSwgTVMgIgorIldpbmRvd3Mg9m55/GtsZXlpY2lzaW5pIHllbmlkZW4gefxrbGVtZWxpc2luaXouICBF8GVyIGJ1bnUgeWFwbWFrICIKKyJpc3RlcnNlbml6LCBQYXJ0ZWQgZWwga2l0YWL9bmEgKHlhIGRhIGRh8P10/W39bv16/W4gZWwga2l0YWL9bmEpICIKKyJiYf52dXJtYWz9c/1u/XouIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjUwMAorbXNnaWQgIiIKKyJJZiB5b3UgbGVhdmUgeW91ciBmaWxlIHN5c3RlbSBhcyBGQVQzMiwgdGhlbiB5b3Ugd2lsbCBub3QgaW50cm9kdWNlIGFueSBuZXcgIgorInByb2JsZW1zLiIKK21zZ3N0ciAiIgorIkXwZXIgZG9zeWEgc2lzdGVtaW5pemkgRkFUMzIgb2xhcmFrIGL9cmFr/XJzYW79eiB5ZW5pIGJpciBzb3J1bmxhICIKKyJrYXL+/Wxh/m1heWFjYWtz/W79ei4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTA0Cittc2dpZCAiIgorIklmIHlvdSBjb252ZXJ0IHRvIEZBVDMyLCBhbmQgTVMgV2luZG93cyBpcyBpbnN0YWxsZWQgb24gdGhpcyBwYXJ0aXRpb24sIHRoZW4gIgorInlvdSBtdXN0IHJlLWluc3RhbGwgdGhlIE1TIFdpbmRvd3MgYm9vdCBsb2FkZXIuICBJZiB5b3Ugd2FudCB0byBkbyB0aGlzLCB5b3UgIgorInNob3VsZCBjb25zdWx0IHRoZSBQYXJ0ZWQgbWFudWFsIChvciB5b3VyIGRpc3RyaWJ1dGlvbidzIG1hbnVhbCkuICBBbHNvLCAiCisiY29udmVydGluZyB0byBGQVQzMiB3aWxsIG1ha2UgdGhlIGZpbGUgc3lzdGVtIHVucmVhZGFibGUgYnkgTVMgRE9TLCBNUyAiCisiV2luZG93cyA5NWEsIGFuZCBNUyBXaW5kb3dzIE5ULiIKK21zZ3N0ciAiIgorIkXwZXIgRkFUMzIneWUgZPZu/P50/HL8cnNlbml6IHZlIGJ1IGRpc2sgYvZs/G38bmUgTVMgV2luZG93cyB5/GtsZW5taf5zZSwgTVMgIgorIldpbmRvd3Mg9m55/GtsZXlpY2lzaW5pIHllbmlkZW4gefxrbGVtZWxpc2luaXouICBF8GVyIGJ1bnUgeWFwbWFrICIKKyJpc3RlcnNlbml6LCBQYXJ0ZWQgZWwga2l0YWL9bmEgKHlhIGRhIGRh8P10/W39bv16/W4gZWwga2l0YWL9bmEpICIKKyJiYf52dXJtYWz9c/1u/XouICBBeXL9Y2EgRkFUMzIneWUgZPZu/P78bSwgZG9zeWEgc2lzdGVtaW5pbiBNUyBET1MsIE1TICIKKyJXaW5kb3dzIDk1YSB2ZSBNUyBXaW5kb3dzIE5UIHRhcmFm/W5kYW4gb2t1bmFtYXogb2xtYXP9bmEgeW9sIGHnYWNha3T9ci4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzICAlcyAgJXMiCittc2dzdHIgIiVzICAlcyAgJXMiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTE5Cittc2dpZCAiV291bGQgeW91IGxpa2UgdG8gdXNlIEZBVDMyPyIKK21zZ3N0ciAiRkFUMzIga3VsbGFubWFrIGlzdGVyIG1pc2luaXo/IgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjU1MCBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjU2NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyAgJXMiCittc2dzdHIgIiVzICAlcyIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1NTEKK21zZ2lkICIiCisiVGhlIGZpbGUgc3lzdGVtIGNhbiBvbmx5IGJlIHJlc2l6ZWQgdG8gdGhpcyBzaXplIGJ5IGNvbnZlcnRpbmcgdG8gRkFUMTYuIgorbXNnc3RyICIiCisiRG9zeWEgc2lzdGVtaSwgeWFsbv16Y2EgRkFUMTYneWEgZPZu/P50/HL8bGVyZWsgYnUgYm95dXRhIHllbmlkZW4gIgorImJveXV0bGFuZP1y/WxhYmlsaXIuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjU2NworbXNnaWQgIiIKKyJUaGUgZmlsZSBzeXN0ZW0gY2FuIG9ubHkgYmUgcmVzaXplZCB0byB0aGlzIHNpemUgYnkgY29udmVydGluZyB0byBGQVQzMi4iCittc2dzdHIgIiIKKyJEb3N5YSBzaXN0ZW1pLCB5YWxu/XpjYSBGQVQzMid5ZSBk9m78/nT8cvxsZXJlayBidSBib3l1dGEgeWVuaWRlbiAiCisiYm95dXRsYW5k/XL9bGFiaWxpci4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTgwCittc2dpZCAiIgorIkdOVSBQYXJ0ZWQgY2Fubm90IHJlc2l6ZSB0aGlzIHBhcnRpdGlvbiB0byB0aGlzIHNpemUuICBXZSdyZSB3b3JraW5nIG9uIGl0ISIKK21zZ3N0ciAiIgorIkdOVSBQYXJ0ZWQgYnUgZGlzayBi9mz8bfxu/CBidSBib3l1dGEgeWVuaWRlbiBib3l1dGxhbmT9cmFtYXouICDcemVyaW5kZSAiCisi52Fs/f79eW9ydXohIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo0OSBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo1NgorbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyBhbiBpbnZhbGlkIHNpZ25hdHVyZSBmb3IgYSBGQVQgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICJEb3N5YSBzaXN0ZW1pLCBGQVQgZG9zeWEgc2lzdGVtaSBp52luIGdl52Vyc2l6IGJpciBpbXpheWEgc2FoaXAuLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6NjQKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgYW4gaW52YWxpZCBzZWN0b3Igc2l6ZSBmb3IgYSBGQVQgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICIiCisiRG9zeWEgc2lzdGVtaSwgRkFUIGRvc3lhIHNpc3RlbWkgaedpbiBnZedlcnNpeiBiaXIgc2VrdPZyIGJveXV0dW5hIHNhaGlwLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6NzEKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgYW4gaW52YWxpZCBjbHVzdGVyIHNpemUgZm9yIGEgRkFUIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiIgorIkRvc3lhIHNpc3RlbWksIEZBVCBkb3N5YSBzaXN0ZW1pIGnnaW4gZ2XnZXJzaXogYmlyIGv8bWUgYm95dXR1bmEgc2FoaXAuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo3OAorbXNnaWQgIiIKKyJGaWxlIHN5c3RlbSBoYXMgYW4gaW52YWxpZCBudW1iZXIgb2YgcmVzZXJ2ZWQgc2VjdG9ycyBmb3IgYSBGQVQgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICIiCisiRG9zeWEgc2lzdGVtaSwgRkFUIGRvc3lhIHNpc3RlbWkgaedpbiBnZedlcnNpeiBiaXIgYXly/Wxt/f4gc2VrdPZyIHNhef1z/W5hICIKKyJzYWhpcC4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjg1Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGludmFsaWQgbnVtYmVyIG9mIEZBVHMuIgorbXNnc3RyICJEb3N5YSBzaXN0ZW1pLCBnZedlcnNpeiBGQVRTIHNhef1z/W5hIHNhaGlwLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6MTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGlzIGZpbGUgc3lzdGVtIGhhcyBhIGxvZ2ljYWwgc2VjdG9yIHNpemUgb2YgJWQuICBHTlUgUGFydGVkIGlzIGtub3duIG5vdCAiCisidG8gd29yayBwcm9wZXJseSB3aXRoIHNlY3RvciBzaXplcyBvdGhlciB0aGFuIDUxMiBieXRlcy4iCittc2dzdHIgIiIKKyJCdSBkb3N5YSBzaXN0ZW1pICVkIG1hbnT9a3NhbCBzZWt09nIgYm95dXR1bmEgc2FoaXAuICBHTlUgUGFydGVkJ2luIDUxMiAiCisiYmF5dHRhbiBmYXJrbP0gc2VrdPZyIGJveXV0bGFy/XlsYSBk/Hpn/G4g52Fs/f5tYWT98P0gYmlsaW5tZWt0ZWRpci4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjE2NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGUgc3lzdGVtJ3MgQ0hTIGdlb21ldHJ5IGlzICglZCwgJWQsICVkKSwgd2hpY2ggaXMgaW52YWxpZC4gIFRoZSAiCisicGFydGl0aW9uIHRhYmxlJ3MgQ0hTIGdlb21ldHJ5IGlzICglZCwgJWQsICVkKS4gIElmIHlvdSBzZWxlY3QgSWdub3JlLCB0aGUgIgorImZpbGUgc3lzdGVtJ3MgQ0hTIGdlb21ldHJ5IHdpbGwgYmUgbGVmdCB1bmNoYW5nZWQuICBJZiB5b3Ugc2VsZWN0IEZpeCwgdGhlICIKKyJmaWxlIHN5c3RlbSdzIENIUyBnZW9tZXRyeSB3aWxsIGJlIHNldCB0byBtYXRjaCB0aGUgcGFydGl0aW9uIHRhYmxlJ3MgQ0hTICIKKyJnZW9tZXRyeS4iCittc2dzdHIgIiIKKyJEb3N5YSBzaXN0ZW1pbmluIENIUyBnZW9tZXRyaXNpICglZCwgJWQsICVkKSwga2kgYnUgZ2XnZXJzaXouICBC9mz8bWxlbWUgIgorInRhYmxvc3VudW4gQ0hTIGdlb21ldHJpc2kgKCVkICwlZCAsJWQpLiAgWW9rc2F5J/0gc2XnZXJzZW5peiBkb3N5YSAiCisic2lzdGVtaW5pbiBDSFMgZ2VvbWV0cmlzaSBkZfBp/nRpcmlsbWV5ZWNlay4gICBPbmFyJ/0gc2XnZXJzZW5peiBkb3N5YSAiCisic2lzdGVtaW5pbiBDSFMgZ2VvbWV0cmlzaSwgYvZs/G1sZW1lIHRhYmxvc3VudW4gQ0hTIGdlb21ldHJpc2l5bGUgdXl1/mFjYWsgIgorIv5la2lsZGUgYXlhcmxhbmFjYWsuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzoyMTMKK21zZ2lkICJGQVQgYm9vdCBzZWN0b3Igc2F5cyBsb2dpY2FsIHNlY3RvciBzaXplIGlzIDAuICBUaGlzIGlzIHdlaXJkLiAiCittc2dzdHIgIiIKKyJGQVQg9m55/GtsZW1lIHNla3T2cvwgbWFudP1rc2FsIHNla3T2ciBib3l1dHVudW4gMCBvbGR18HVudSBz9nls/Hlvci4gIEJ1ICIKKyJ0dWhhZi4gIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzoyMTkKK21zZ2lkICJGQVQgYm9vdCBzZWN0b3Igc2F5cyB0aGVyZSBhcmUgbm8gRkFUIHRhYmxlcy4gIFRoaXMgaXMgd2VpcmQuICIKK21zZ3N0ciAiRkFUIPZuefxrbGVtZSBzZWt09nL8IEZBVCB0YWJsb3N1bnVuIG9sbWFk/fD9bv0gc/Z5bPx5b3IuICBCdSB0dWhhZi4gIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzoyMjUKK21zZ2lkICJGQVQgYm9vdCBzZWN0b3Igc2F5cyBjbHVzdGVycyBhcmUgMCBzZWN0b3JzLiAgVGhpcyBpcyB3ZWlyZC4gIgorbXNnc3RyICIiCisiRkFUIPZuefxrbGVtZSBzZWt09nL8IGv8bWVsZXJpbiAwIHNla3T2ciBvbGR18HVudSBz9nls/Hlvci4gIEJ1IHR1aGFmLiAiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjIzNQorbXNnaWQgIkZpbGUgc3lzdGVtIGlzIEZBVDEyLCB3aGljaCBpcyB1bnN1cHBvcnRlZC4iCittc2dzdHIgIkRvc3lhIHNpc3RlbWkgRkFUMTIsIGtpIGRlc3Rla2xlbm1peW9yLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6NDExCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgaW5mb3JtYXRpb24gc2VjdG9yIGhhcyB0aGUgd3Jvbmcgc2lnbmF0dXJlICgleCkuICBTZWxlY3QgY2FuY2VsIGZvciBub3csICIKKyJhbmQgc2VuZCBpbiBhIGJ1ZyByZXBvcnQuICBJZiB5b3UncmUgZGVzcGVyYXRlLCBpdCdzIHByb2JhYmx5IHNhZmUgdG8gaWdub3JlLiIKK21zZ3N0ciAiIgorIkJpbGdpIHNla3T2cvwgeWFubP3+IGltemF5YSBzYWhpcC4gKCV4KS4gIN5pbWRpbGlrIHZhemdl52kgc2XnaW4gdmUgYmlyICIKKyJ5YXr9bP1tIGhhdGFz/SByYXBvcnUgZ/ZuZGVyaW4uICDHYXJlc2l6c2VuaXosIHlva3NheW1hayBtdWh0ZW1lbGVuIGf8dmVubGkuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvdW50LmM6MTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBkaXJlY3RvcnkgZW50cnkgZm9yICVzOiBmaXJzdCBjbHVzdGVyIGlzIHRoZSBlbmQgb2YgZmlsZSBtYXJrZXIuIgorbXNnc3RyICIlcyBp52luIGJvenVrIGRpemluIGdpcmn+aTogaWxrIGv8bWUgZG9zeWEgYmVsaXJ0ZWNpbmluIHNvbnVuZGEuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvdW50LmM6MTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJCYWQgRkFUOiB1bnRlcm1pbmF0ZWQgY2hhaW4gZm9yICVzLiAgWW91IHNob3VsZCBydW4gZG9zZnNjayBvciBzY2FuZGlzay4iCittc2dzdHIgIiIKKyJCb3p1ayBGQVQ6ICVzIGnnaW4gc29ubGFuZP1y/WxtYW39/iB6aW5jaXIuICBkb3Nmc2NrIHlhIGRhIHNjYW5kaXNrICIKKyJ5/HL8dG1lbGlzaW5pei4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY291bnQuYzoxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkJhZCBGQVQ6IGNsdXN0ZXIgJWQgb3V0c2lkZSBmaWxlIHN5c3RlbSBpbiBjaGFpbiBmb3IgJXMuICBZb3Ugc2hvdWxkIHJ1biAiCisiZG9zZnNjayBvciBzY2FuZGlzay4iCittc2dzdHIgIiIKKyJCb3p1ayBGQVQ6ICVkIGv8bWVzaSAlcyBp52luIGRvc3lhIHNpc3RlbWkgemluY2lyaW5pbiBk/f79bmRhLiAgZG9zZnNjayB5YSAiCisiZGEgc2NhbmRpc2sgefxy/HRtZWxpc2luaXouIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvdW50LmM6MTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJCYWQgRkFUOiBjbHVzdGVyICVkIGlzIGNyb3NzLWxpbmtlZCBmb3IgJXMuICBZb3Ugc2hvdWxkIHJ1biBkb3Nmc2NrIG9yICIKKyJzY2FuZGlzay4iCittc2dzdHIgIiIKKyJCb3p1ayBGQVQ6ICVkIGv8bWVzaSAlcyBp52luIOdhcHJheiBiYfBs/S4gIGRvc2ZzY2sgeWEgZGEgc2NhbmRpc2sgIgorInn8cvx0bWVsaXNpbml6LiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb3VudC5jOjIwMworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyAlZGssIGJ1dCBpdCBoYXMgJWQgY2x1c3RlcnMgKCVkaykuIgorbXNnc3RyICIlcyAlZGtk/XIsIGZha2F0ICVkIGv8bWV5ZSAoJWRrKSBzYWhpcC4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY291bnQuYzoyNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmaWxlICVzIGlzIG1hcmtlZCBhcyBhIHN5c3RlbSBmaWxlLiAgVGhpcyBtZWFucyBtb3ZpbmcgaXQgY291bGQgY2F1c2UgIgorInNvbWUgcHJvZ3JhbXMgdG8gc3RvcCB3b3JraW5nLiIKK21zZ3N0ciAiIgorIiVzIGRvc3lhc/0gYmlyIHNpc3RlbSBkb3N5YXP9IG9sYXJhayBp/mFyZXRsZW5taf4uICBCdSwgb251IHRh/v1tYW79biBiYXr9ICIKKyJwcm9ncmFtbGFy/W4g52Fs/f5tYXP9bv0gZHVyZHVybWF5YSB5b2xh52FjYfD9IGFubGFt/W5hIGdlbGlyLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC90YWJsZS5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRkFUICVkIG1lZGlhICV4IGRvZXNuJ3QgbWF0Y2ggdGhlIGJvb3Qgc2VjdG9yJ3MgbWVkaWEgJXguICBZb3Ugc2hvdWxkICIKKyJwcm9iYWJseSBydW4gc2NhbmRpc2suIgorbXNnc3RyICIiCisiRkFUICVkIG9ydGFtICV4IPZuefxrbGVtZSBzZWt09nL8bvxuIG9ydGFt/SAleCdsZSB1eXX+bWFtYWt0YS4gIE11aHRlbWVsZW4gIgorInNjYW5kaXNrIHn8cvx0bWVsaXNpbml6LiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC90YWJsZS5jOjI2OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYXRfdGFibGVfc2V0OiBjbHVzdGVyICVsZCBvdXRzaWRlIGZpbGUgc3lzdGVtIgorbXNnc3RyICJmYXRfdGFibGVfc2V0OiAlbGQga/xtZXNpIGRvc3lhIHNpc3RlbWluaW4gZP3+/W5kYSIKKworIzogbGlicGFydGVkL2ZzL2ZhdC90YWJsZS5jOjMwMQorIywgYy1mb3JtYXQKK21zZ2lkICJmYXRfdGFibGVfZ2V0OiBjbHVzdGVyICVsZCBvdXRzaWRlIGZpbGUgc3lzdGVtIgorbXNnc3RyICJmYXRfdGFibGVfZ2V0OiAlbGQga/xtZXNpIGRvc3lhIHNpc3RlbWluaW4gZP3+/W5kYSIKKworIzogbGlicGFydGVkL2ZzL2ZhdC90YWJsZS5jOjM0MworbXNnaWQgImZhdF90YWJsZV9hbGxvY19jbHVzdGVyOiBubyBmcmVlIGNsdXN0ZXJzIgorbXNnc3RyICJmYXRfdGFibGVfYWxsb2NfY2x1c3RlcjogYm/+IGv8bWUgeW9rIgorCisjOiBsaWJwYXJ0ZWQvZnMvbGludXhfc3dhcC9saW51eF9zd2FwLmM6Mjc1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVbnJlY29nbmlzZWQgb2xkIHN0eWxlIGxpbnV4IHN3YXAgc2lnbmF0dXJlICclMTBzJy4iCittc2dzdHIgIlRhbv1ubWF5YW4gbGludXggdGFrYXMgaW16YXP9ICclMTBzJy4iCisKKyM6IGxpYnBhcnRlZC9mcy9saW51eF9zd2FwL2xpbnV4X3N3YXAuYzozMTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVucmVjb2duaXNlZCBuZXcgc3R5bGUgbGludXggc3dhcCBzaWduYXR1cmUgJyUxMHMnLiIKK21zZ3N0ciAiVGFu/W5tYXlhbiBsaW51eCB0YWthcyBpbXphc/0gJyUxMHMnLiIKKworIzogbGlicGFydGVkL2ZzL2xpbnV4X3N3YXAvbGludXhfc3dhcC5jOjM1OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVW5yZWNvZ25pc2VkIHN3c3VzcCBsaW51eCBzd2FwIHNpZ25hdHVyZSAnJTlzJy4iCittc2dzdHIgIlRhbv1ubWF5YW4gbGludXggdGFrYXMgaW16YXP9ICclMTBzJy4iCisKKyM6IGxpYnBhcnRlZC9mcy9saW51eF9zd2FwL2xpbnV4X3N3YXAuYzo0MzQKK21zZ2lkICJUb28gbWFueSBiYWQgcGFnZXMuIgorbXNnc3RyICLHb2sgc2F5/WRhIGJvenVrIHNheWZhLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9hZHZmcy5jOjEyMSBsaWJwYXJ0ZWQvZnMvaGZzL2FkdmZzX3BsdXMuYzoxMjIKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzo0MTQgbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjUwOAorIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NTM5IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjY1OAorIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NzcyCittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIGNvbnRhaW5zIGVycm9ycy4iCittc2dzdHIgIkRvc3lhIHNpc3RlbWkgaGF0YWxhciBp52VyaXlvci4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvYWR2ZnNfcGx1cy5jOjI4NworbXNnaWQgIkJhZCBibG9ja3MgY291bGQgbm90IGJlIHJlYWQuIgorbXNnc3RyICJIYXRhbP0gYmxva2xhciBva3VuYW39eW9yLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9jYWNoZS5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVHJ5aW5nIHRvIHJlZ2lzdGVyIGFuIGV4dGVudCBzdGFydGluZyBhdCBibG9jayAweCVYLCBidXQgYW5vdGhlciBvbmUgYWxyZWFkeSAiCisiZXhpc3RzIGF0IHRoaXMgcG9zaXRpb24uICBZb3Ugc2hvdWxkIGNoZWNrIHRoZSBmaWxlIHN5c3RlbSEiCittc2dzdHIgIiIKKyJCbG9rIDB4JVgnZGVuIGJh/mxheWFjYWsg/mVraWxkZSBiaXIgYXJhbP1rIGtheWRlZGlsbWV5ZSDnYWz9/v1s/XlvciwgZmFrYXQgIgorImJ1IGtvbnVtZGEgYmlyIGJh/mthc/0gemF0ZW4gbWV2Y3V0LiAgRG9zeWEgc2lzdGVtaW5pIGtvbnRyb2wgZXRtZWxpc2luaXohIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2NhY2hlLmM6MjE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUcnlpbmcgdG8gbW92ZSBhbiBleHRlbnQgZnJvbSBibG9jayBPeCVYIHRvIGJsb2NrIE94JVgsIGJ1dCBhbm90aGVyIG9uZSAiCisiYWxyZWFkeSBleGlzdHMgYXQgdGhpcyBwb3NpdGlvbi4gIFRoaXMgc2hvdWxkIG5vdCBoYXBwZW4hIgorbXNnc3RyICIiCisiQmxvayBPeCVYJ2RlbiBPeCVYJ2UgYmlyIGFyYWz9ayB0Yf79bm1heWEg52Fs/f79bP15b3IsIGZha2F0IGJ1IGtvbnVtZGEgYmlyICIKKyJiYf5rYXP9IHphdGVuIG1ldmN1dC4gIEJ1IG9sbWFtYWz9ISIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlLmM6MTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB1cGRhdGUgdGhlIGV4dGVudCBjYWNoZSBmb3IgSEZTIGZpbGUgd2l0aCBDTklEICVYLiIKK21zZ3N0ciAiQXJhbP1rIPZuYmVsbGXwaSBDTklEICVYJ2xpIEhGUyBkb3N5YXP9IGnnaW4gZ/xuY2VsbGVuZW1lZGkuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGUuYzoxODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIHRvIHJlYWQgSEZTIGZpbGUgd2l0aCBDTklEICVYIGJlaGluZCBFT0YuIgorbXNnc3RyICJFT0YgYXJrYXP9bmRhIENOSUQgJVgnbGkgSEZTIGRvc3lhc/0gb2t1bm1heWEg52Fs/f79bP15b3IuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGUuYzoxOTAgbGlicGFydGVkL2ZzL2hmcy9maWxlLmM6MjIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIHNlY3RvciAlbGxpIG9mIEhGUyBmaWxlIHdpdGggQ05JRCAlWC4iCittc2dzdHIgIkNOSUQgJTIkWCBsaSBIRlMgZG9zeWFz/W79biAlMSRsbGkgc2VrdPZy/CBidWx1bmFtYWT9LiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlLmM6MjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyB0byB3cml0ZSBIRlMgZmlsZSB3aXRoIENOSUQgJVggYmVoaW5kIEVPRi4iCittc2dzdHIgIkVPRiBhcmthc/1uZGEgQ05JRCAlWCdsaSBIRlMgZG9zeWFz/SB5YXr9bG1heWEg52Fs/f79bP15b3IuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGVfcGx1cy5jOjE1NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgdXBkYXRlIHRoZSBleHRlbnQgY2FjaGUgZm9yIEhGUysgZmlsZSB3aXRoIENOSUQgJVguIgorbXNnc3RyICJBcmFs/Wsg9m5iZWxsZfBpIENOSUQgJVgnbGkgSEZTKyBkb3N5YXP9IGnnaW4gZ/xuY2VsbGVuZW1lZGkuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGVfcGx1cy5jOjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgdG8gcmVhZCBIRlMrIGZpbGUgd2l0aCBDTklEICVYIGJlaGluZCBFT0YuIgorbXNnc3RyICJFT0YgYXJrYXP9bmRhIENOSUQgJVgnbGkgSEZTKyBkb3N5YXP9IG9rdW5tYXlhIOdhbP3+/Wz9eW9yLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlX3BsdXMuYzoyMTMgbGlicGFydGVkL2ZzL2hmcy9maWxlX3BsdXMuYzoyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgc2VjdG9yICVsbGkgb2YgSEZTKyBmaWxlIHdpdGggQ05JRCAlWC4iCittc2dzdHIgIkNOSUQgJTIkWCBsaSBIRlMrIGRvc3lhc/1u/W4gJTEkbGxpIHNla3T2cvwgYnVsdW5hbWFk/S4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZV9wbHVzLmM6MjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyB0byB3cml0ZSBIRlMrIGZpbGUgd2l0aCBDTklEICVYIGJlaGluZCBFT0YuIgorbXNnc3RyICJFT0YgYXJrYXP9bmRhIENOSUQgJVgnbGkgSEZTKyBkb3N5YXP9IHlhev1sbWF5YSDnYWz9/v1s/Xlvci4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MjMyCittc2dpZCAiU29ycnksIEhGUyBjYW5ub3QgYmUgcmVzaXplZCB0aGF0IHdheSB5ZXQuIgorbXNnc3RyICLcemf8bvxtLCBIRlMgaGVu/HogbyD+ZWtpbGRlIHllbmlkZW4gYm95dXRsYW5k/XL9bGFt/Xlvci4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MjYyIGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NjQxCittc2dpZCAiRGF0YSByZWxvY2F0aW9uIGhhcyBmYWlsZWQuIgorbXNnc3RyICJWZXJpIHllbmlkZW4ga29udW1sYW5k/XL9bG1hc/0gYmH+YXL9c/16LiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzoyODEKK21zZ2lkICJEYXRhIHJlbG9jYXRpb24gbGVmdCBzb21lIGRhdGEgaW4gdGhlIGVuZCBvZiB0aGUgdm9sdW1lLiIKK21zZ3N0ciAiVmVyaSB5ZW5pZGVuIGtvbnVtbGFk/XL9bG1hc/0gb3lsdW11biBzb251bmRhIGJhev0gdmVyaWxlcmkgYv1yYWt0/S4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MzIwCittc2dpZCAid3JpdGluZyBIRlMgTWFzdGVyIERpcmVjdG9yeSBCbG9jayIKK21zZ3N0ciAiSEZTIEFuYSBEaXppbiBCbG/wdSB5YXr9bP15b3IiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NDY4Cittc2dpZCAiTm8gdmFsaWQgSEZTWytYXSBzaWduYXR1cmUgaGFzIGJlZW4gZm91bmQgd2hpbGUgb3BlbmluZy4iCittc2dzdHIgIkHnYXJrZW4sIGdl52VybGkgSEZTWytYXSBpbXphc/0gYnVsdW5hbWFk/S4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NDc4CisjLCBjLWZvcm1hdAorbXNnaWQgIlZlcnNpb24gJWQgb2YgSEZTKyBpc24ndCBzdXBwb3J0ZWQuIgorbXNnc3RyICJIRlMrJ2luICVkIHP8cvxt/CBkZXN0ZWtsZW5taXlvci4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NDg5CisjLCBjLWZvcm1hdAorbXNnaWQgIlZlcnNpb24gJWQgb2YgSEZTWCBpc24ndCBzdXBwb3J0ZWQuIgorbXNnc3RyICJIRlNYJ2luICVkIHP8cvxt/CBkZXN0ZWtsZW5taXlvci4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NjcyCittc2dpZCAiRGF0YSByZWxvY2F0aW9uIGxlZnQgc29tZSBkYXRhIGF0IHRoZSBlbmQgb2YgdGhlIHZvbHVtZS4iCittc2dzdHIgIlZlcmkgeWVuaWRlbiBrb251bWxhZP1y/WxtYXP9IG95bHVtdW4gc29udW5kYSBiYXr9IHZlcmlsZXJpIGL9cmFrdP0uIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjcyMAorbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdGhlIGFsbG9jYXRpb24gZmlsZS4iCittc2dzdHIgIkF0YW1hIGRvc3lhc/1uYSB5YXptYWRhIGhhdGEuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjczNQorbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdGhlIGNvbXBhdGliaWxpdHkgcGFydCBvZiB0aGUgYWxsb2NhdGlvbiBmaWxlLiIKK21zZ3N0ciAiQXRhbWEgZG9zeWFz/W79biB1eXVtbHVsdWsgYvZs/G38bmUgeWF6bWFkYSBoYXRhLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo3NTAKK21zZ2lkICJ3cml0aW5nIEhGUysgVm9sdW1lIEhlYWRlciIKK21zZ3N0ciAiSEZTKyBPeWx1bSBCYf5s/fD9IHlhev1s/XlvciIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo4NTAKK21zZ2lkICJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBsb29raW5nIGZvciB0aGUgbWFuZGF0b3J5IGJhZCBibG9ja3MgZmlsZS4iCittc2dzdHIgIlpvcnVubHUgaGF0YWz9IGJsb2tsYXIgZG9zeWFz/SBhcmFu/XJrZW4gYmlyIGhhdGEgb2x1/nR1LiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo5MDQKK21zZ2lkICIiCisiSXQgc2VlbXMgdGhlcmUgaXMgYW4gZXJyb3IgaW4gdGhlIEhGUyB3cmFwcGVyOiB0aGUgYmFkIGJsb2NrcyBmaWxlIGRvZXNuJ3QgIgorImNvbnRhaW4gdGhlIGVtYmVkZGVkIEhGUysgdm9sdW1lLiIKK21zZ3N0ciAiIgorIkhGUyBzYXJtYWxhef1j/XP9bmRhIGhhdGEgdmFyIGdpYmkgZ/Zy/G78eW9yOiBoYXRhbP0gYmxvayBkb3N5YXP9LCBn9m38bPwgSEZTIgorIisgb3lsdW11bnUgaedlcm1peW9yLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo5NDAKK21zZ2lkICJTb3JyeSwgSEZTKyBjYW5ub3QgYmUgcmVzaXplZCB0aGF0IHdheSB5ZXQuIgorbXNnc3RyICLcemf8bvxtLCBIRlMrIGhlbvx6IG8g/mVraWxkZSB5ZW5pZGVuIGJveXV0bGFuZP1y/Wxhbf15b3IuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjk3NQorbXNnaWQgInNocmlua2luZyBlbWJlZGRlZCBIRlMrIHZvbHVtZSIKK21zZ3N0ciAiZ/Zt/Gz8IEhGUysgb3lsdW11IGv85/xsdPxs/HlvciIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo5OTEKK21zZ2lkICJSZXNpemluZyB0aGUgSEZTKyB2b2x1bWUgaGFzIGZhaWxlZC4iCittc2dzdHIgIkhGUysgb3lsdW11bnVuIHllbmlkZW4gYm95dXRsYW5k/XL9bG1hc/0gYmH+YXL9c/16LiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo5OTgKK21zZ2lkICJzaHJpbmtpbmcgSEZTIHdyYXBwZXIiCittc2dzdHIgIkhGUyBzYXJtYWxhef1j/XP9IGv85/xsdPxs/HlvciIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzoxMDA3Cittc2dpZCAiVXBkYXRpbmcgdGhlIEhGUyB3cmFwcGVyIGhhcyBmYWlsZWQuIgorbXNnc3RyICJIRlMgc2FybWFsYXn9Y/1z/W79biBn9m5jZWxsZW5tZXNpIGJh/mFy/XP9ei4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MTEwOSBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjExOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgaXMgbm90IGEgcmVhbCAlcyBjaGVjay4gIFRoaXMgaXMgZ29pbmcgdG8gZXh0cmFjdCBzcGVjaWFsIGxvdyBsZXZlbCAiCisiZmlsZXMgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4iCittc2dzdHIgIiIKKyJCdSBnZedlayBiaXIgJXMga29udHJvbPwgZGXwaWwuICBIYXRhIGF5/WtsYW1hIGFtYWP9eWxhIGT8/vxrIGT8emV5IGRvc3lhbGFyICIKKyL2evx0bGVuZWNlay4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjE1NQorbXNnaWQgIkJhZCBibG9jayBsaXN0IGhlYWRlciBjaGVja3N1bS4iCittc2dzdHIgIkhhdGFs/SBibG9rIGxpc3RlIGJh/mz98P0gc2HwbGFtYSB0b3BsYW39IgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzoxNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkludmFsaWQgc2l6ZSBvZiBhIHRyYW5zYWN0aW9uIGJsb2NrIHdoaWxlIHJlcGxheWluZyB0aGUgam91cm5hbCAoJWkgYnl0ZXMpLiIKK21zZ3N0ciAiR/xubPxrIHRla3JhciBva3VudXJrZW4gZ2XnZXJzaXogYmlyIGn+bGVtIGJveXV0IGJsb/B1ICglaSBiYXl0KS4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjI2MAorbXNnaWQgIiIKKyJKb3VybmFsIHN0b3JlZCBvdXRzaWRlIG9mIHRoZSB2b2x1bWUgYXJlIG5vdCBzdXBwb3J0ZWQuICBUcnkgdG8gZGVzYWN0aXZhdGUgIgorInRoZSBqb3VybmFsIGFuZCBydW4gUGFydGVkIGFnYWluLiIKK21zZ3N0ciAiIgorIk95bHVtIGT9/v1uZGEgZGVwb2xhbmFuIGf8bmz8a2xlciBkZXN0ZWtsZW5taXlvci4gIEf8bmz88PwgZXRraXNpeiBr/WxtYXn9ICIKKyJ2ZSBQYXJ0ZWQn/SB5ZW5pZGVuIOdhbP3+dP1ybWF5/SBkZW5leWluLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MjcxCittc2dpZCAiSm91cm5hbCBvZmZzZXQgb3Igc2l6ZSBpcyBub3QgbXVsdGlwbGUgb2YgdGhlIHNlY3RvciBzaXplLiIKK21zZ3N0ciAiR/xubPxrIGJh/mxhbmf9Y/0geWEgZGEgYm95dXR1IHNla3T2ciBib3l1dHVudW4ga2F0/SBkZfBpbC4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjI5MgorbXNnaWQgIkluY29ycmVjdCBtYWdpYyB2YWx1ZXMgaW4gdGhlIGpvdXJuYWwgaGVhZGVyLiIKK21zZ3N0ciAiR/xubPxrIGJh/mz98P1uZGEgZ2XnZXJzaXogc2loaXJsaSBkZfBlcmxlci4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjMwMgorbXNnaWQgIkpvdXJuYWwgc2l6ZSBtaXNtYXRjaCBiZXR3ZWVuIGpvdXJuYWwgaW5mbyBibG9jayBhbmQgam91cm5hbCBoZWFkZXIuIgorbXNnc3RyICJH/G5s/GsgYmlsZ2kgYmxv8HUgdmUgYmH+bP3w/SBhcmFz/W5kYSBn/G5s/GsgYm95dXR1IPZydPz+bfx5b3IuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozMTQKK21zZ2lkICJTb21lIGhlYWRlciBmaWVsZHMgYXJlIG5vdCBtdWx0aXBsZSBvZiB0aGUgc2VjdG9yIHNpemUuIgorbXNnc3RyICJCYXr9IGJh/mz9ayBhbGFubGFy/SBzZWt09nIgYm95dXR1bnVuIGthdP0gZGXwaWwuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozMjMKK21zZ2lkICIiCisiVGhlIHNlY3RvciBzaXplIHN0b3JlZCBpbiB0aGUgam91cm5hbCBpcyBub3QgNTEyIGJ5dGVzLiAgUGFydGVkIG9ubHkgIgorInN1cHBvcnRzIDUxMiBieXRlcyBsZW5ndGggc2VjdG9ycy4iCittc2dzdHIgIiIKKyJH/G5s/Gt0ZSBrYXn9dGz9IHNla3T2ciBib3l1dHUgNTEyIGJheXQgZGXwaWwuIFBhcnRlZCB5YWxu/XpjYSA1MTIgYmF5dCAiCisidXp1bmx1a3Rha2kgc2VrdPZybGVyaSBkZXN0ZWtsZXIuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozMzUKK21zZ2lkICJCYWQgam91cm5hbCBjaGVja3N1bS4iCittc2dzdHIgIkJvenVrIGf8bmz8ayBzYfBsYW1hIHRvcGxhbf0uIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozNTMKK21zZ2lkICIiCisiVGhlIGpvdXJuYWwgaXMgbm90IGVtcHR5LiAgUGFydGVkIG11c3QgcmVwbGF5IHRoZSB0cmFuc2FjdGlvbnMgYmVmb3JlICIKKyJvcGVuaW5nIHRoZSBmaWxlIHN5c3RlbS4gIFRoaXMgd2lsbCBtb2RpZnkgdGhlIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiIgorIkf8bmz8ayBib/4uICBQYXJ0ZWQsIGRvc3lhIHNpc3RlbWluaSBh521hZGFuIGn+bGVtbGVyaSB5aW5lbGVtZWxpLiAgQnUsICIKKyJkb3N5YSBzaXN0ZW1pbmkgZGXwaf50aXJlY2VrLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MzgxCittc2dpZCAiIgorIlRoZSB2b2x1bWUgaGVhZGVyIG9yIHRoZSBtYXN0ZXIgZGlyZWN0b3J5IGJsb2NrIGhhcyBjaGFuZ2VkIHdoaWxlIHJlcGxheWluZyAiCisidGhlIGpvdXJuYWwuICBZb3Ugc2hvdWxkIHJlc3RhcnQgUGFydGVkLiIKK21zZ3N0ciAiIgorIkf8bmz8ayB5aW5lbGVuaXJrZW4gYW5hIGRpemluIGJsb/B1bnVuIG95bHVtIGJh/mz98P0gZGXwaf50aS4gIFBhcnRlZCf9ICIKKyJ5ZW5pZGVuIGJh/mxhdG1hbP1z/W79ei4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcHJvYmUuYzo1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGFydGVkIGNhbid0IHVzZSBIRlMgZmlsZSBzeXN0ZW1zIG9uIGRpc2tzIHdpdGggYSBzZWN0b3Igc2l6ZSBub3QgZXF1YWwgdG8gJSIKKyJkIGJ5dGVzLiIKK21zZ3N0ciAiIgorIlBhcnRlZCBzZWt09nIgYm95dXR1ICVkIGJheXRhIGX+aXQgb2xtYXlhbiBkaXNrbGVyZGUgSEZTIGRvc3lhIHNpc3RlbWkgIgorImt1bGxhbmFtYXouIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6MTUxIGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjE1NQorbXNnaWQgIkFuIGV4dGVudCBoYXMgbm90IGJlZW4gcmVsb2NhdGVkLiIKK21zZ3N0ciAiQmlyIGFyYWz9ayB5ZW5pZGVuIGtvbnVtbGFubWFk/S4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzoyNTEgbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6MzA3Cittc2dpZCAiIgorIkEgcmVmZXJlbmNlIHRvIGFuIGV4dGVudCBjb21lcyBmcm9tIGEgcGxhY2UgaXQgc2hvdWxkIG5vdC4gIFlvdSBzaG91bGQgY2hlY2sgIgorInRoZSBmaWxlIHN5c3RlbSEiCittc2dzdHIgIiIKKyJCaXIgYXJhbP3w/W4gYmH+dnVydXN1IGdlbG1lbWVzaSBnZXJla2VuIGJpciB5ZXJkZW4gZ2VsaXlvci4gIERvc3lhICIKKyJzaXN0ZW1pbmkga29udHJvbCBldG1lbGlzaW5peiEiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzozODEKK21zZ2lkICJUaGlzIEhGUyB2b2x1bWUgaGFzIG5vIGNhdGFsb2cgZmlsZS4gIFRoaXMgaXMgdmVyeSB1bnVzdWFsISIKK21zZ3N0ciAiQnUgSEZTIG95bHVtdW51biBrYXRhbG9nIGRvc3lhc/0geW9rLiAgQnUg529rIHP9cmFk/f79ISIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjQ3NQorbXNnaWQgIlRoaXMgSEZTIHZvbHVtZSBoYXMgbm8gZXh0ZW50cyBvdmVyZmxvdyBmaWxlLiAgVGhpcyBpcyBxdWl0ZSB1bnVzdWFsISIKK21zZ3N0ciAiQnUgSEZTIG95bHVtdW51biBhcmFs/WsgdGH+bWFz/SBkb3N5YXP9IHlvay4gIEJ1IG9sZHVr52Egc/1yYWT9/v0hIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NTE3IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjY2OAorbXNnaWQgIiIKKyJUaGUgZXh0ZW50cyBvdmVyZmxvdyBmaWxlIHNob3VsZCBub3QgY29udGFpbiBpdHMgb3duIGV4dGVudHMhICBZb3Ugc2hvdWxkICIKKyJjaGVjayB0aGUgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICIiCisiQXJhbP1rIHRh/m1hc/0gZG9zeWFz/Swga2VuZGkgYXJhbP1rbGFy/W79IGnnZXJtZW1lbGkhICBEb3N5YSBzaXN0ZW1pbmkgIgorImtvbnRyb2wgZXRtZWxpc2luaXouIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NTc0IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjg0NworbXNnaWQgIkNvdWxkIG5vdCBjYWNoZSB0aGUgZmlsZSBzeXN0ZW0gaW4gbWVtb3J5LiIKK21zZ3N0ciAiRG9zeWEgc2lzdGVtaSD2bmJlbGxl8GUgYWz9bmFt/Xlvci4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzo2MzUgbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6OTA4Cittc2dpZCAiQmFkIGJsb2NrcyBsaXN0IGNvdWxkIG5vdCBiZSBsb2FkZWQuIgorbXNnc3RyICJIYXRhbP0gYmxvayBsaXN0ZXNpIHn8a2xlbmVtZWRpLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjY0OSBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo5MjQKK21zZ2lkICJBbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgZXh0ZW50IHJlbG9jYXRpb24uIgorbXNnc3RyICJBcmFs/WsgeWVuaWRlbiBrb251bWxhbmT9cv1sbWFz/SBz/XJhc/1uZGEgYmlyIGhhdGEgb2x1/nR1LiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NDk1Cittc2dpZCAiVGhpcyBIRlMrIHZvbHVtZSBoYXMgbm8gY2F0YWxvZyBmaWxlLiAgVGhpcyBpcyB2ZXJ5IHVudXN1YWwhIgorbXNnc3RyICJCdSBIRlMrIG95bHVtdW51biBrYXRhbG9nIGRvc3lhc/0geW9rLiAgQnUg529rIHP9cmFk/f79ISIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NjE5Cittc2dpZCAiVGhpcyBIRlMrIHZvbHVtZSBoYXMgbm8gZXh0ZW50cyBvdmVyZmxvdyBmaWxlLiAgVGhpcyBpcyBxdWl0ZSB1bnVzdWFsISIKK21zZ3N0ciAiQnUgSEZTKyBveWx1bXVudW4gYXJhbP1rIHRh/m1hc/0gZG9zeWFz/SB5b2suICBCdSBvbGR1a+dhIHP9cmFk/f79ISIKKworIzogcGFydGVkL3BhcnRlZC5jOjk0Cittc2dpZCAiZGlzcGxheXMgdGhpcyBoZWxwIG1lc3NhZ2UiCittc2dzdHIgImJ1IHlhcmT9bSBtZXNhav1u/SBn9nL8bnT8bGVyIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6OTUKKyMsIGZ1enp5Cittc2dpZCAibGlzdHMgcGFydGl0aW9uIGxheW91dCBvbiBhbGwgYmxvY2sgZGV2aWNlcyIKK21zZ3N0ciAiYWxn/WxhbmFuIHT8bSBheWf9dGxhcv1uIGLnbPxtbGVtZSB0YWJsb2xhcv1u/W4gbGlzdGVsZXIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo5NgorbXNnaWQgImRpc3BsYXlzIG1hY2hpbmUgcGFyc2VhYmxlIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6OTcKK21zZ2lkICJuZXZlciBwcm9tcHRzIGZvciB1c2VyIGludGVydmVudGlvbiIKK21zZ3N0ciAia3VsbGFu/WP9IG38ZGFoYWxlc2kgaedpbiBhc2xhIGlzdGVtZGUgYnVsdW5tYXoiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo5OAorbXNnaWQgImRpc3BsYXlzIHRoZSB2ZXJzaW9uIgorbXNnc3RyICJz/HL8bfwgZ/Zy/G50/GxlciIKKworIzogcGFydGVkL3BhcnRlZC5jOjExMQorbXNnaWQgIiIKKyJOVU1CRVIgaXMgdGhlIHBhcnRpdGlvbiBudW1iZXIgdXNlZCBieSBMaW51eC4gIE9uIE1TLURPUyBkaXNrIGxhYmVscywgdGhlICIKKyJwcmltYXJ5IHBhcnRpdGlvbnMgbnVtYmVyIGZyb20gMSB0byA0LCBsb2dpY2FsIHBhcnRpdGlvbnMgZnJvbSA1IG9ud2FyZHMuXG4iCittc2dzdHIgIiIKKyJOVU1CRVIsIExpbnV4IHRhcmFm/W5kYW4ga3VsbGFu/WxhbiBkaXNrIGL2bPxt/CBudW1hcmFz/WT9ci4gIE1zZG9zIGRpc2sgIgorImV0aWtldGxlcmluZGUgYmlyaW5jaWwgZGlzayBi9mz8bfwgbnVtYXJhc/0gMS00IGFyYXP9LCBtYW50/WtzYWwgZGlzayAiCisiYvZs/G1sZXJpIGRlIDUgdmUg/HN0/GT8ci5cbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjExNAorbXNnaWQgIkxBQkVMLVRZUEUgaXMgb25lIG9mOiAiCittc2dzdHIgIkxBQkVMLVRZUEUg/nVubGFyZGFuIGJpcmlkaXI6ICIKKworIzogcGFydGVkL3BhcnRlZC5jOjExNQorbXNnaWQgIkZMQUcgaXMgb25lIG9mOiAiCittc2dzdHIgIkZMQUcg/nVubGFyZGFuIGJpcmlkaXI6ICIKKworIzogcGFydGVkL3BhcnRlZC5jOjExNgorbXNnaWQgIlVOSVQgaXMgb25lIG9mOiAiCittc2dzdHIgIlVOSVQg/nVubGFyZGFuIGJpcmlkaXI6ICIKKworIzogcGFydGVkL3BhcnRlZC5jOjExNworbXNnaWQgIlBBUlQtVFlQRSBpcyBvbmUgb2Y6IHByaW1hcnksIGxvZ2ljYWwsIGV4dGVuZGVkXG4iCittc2dzdHIgIlBBUlQtVFlQRSD+dW5sYXJkYW4gYmlyaWRpcjogYmlyaW5jaWwsIG1hbnT9a3NhbCwgZWtcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjExOQorbXNnaWQgIkZTLVRZUEUgaXMgb25lIG9mOiAiCittc2dzdHIgIkZTLVRZUEUg/nVubGFyZGFuIGJpcmlkaXI6ICIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMAorbXNnaWQgIiIKKyJTVEFSVCBhbmQgRU5EIGFyZSBkaXNrIGxvY2F0aW9ucywgc3VjaCBhcyA0R0Igb3IgMTAlLiAgTmVnYXRpdmUgdmFsdWVzIGNvdW50ICIKKyJmcm9tIHRoZSBlbmQgb2YgdGhlIGRpc2suICBGb3IgZXhhbXBsZSwgLTFzIHNwZWNpZmllcyBleGFjdGx5IHRoZSBsYXN0ICIKKyJzZWN0b3IuXG4iCittc2dzdHIgIiIKKyJTVEFSVCB2ZSBFTkQgZGlzayBrb251bWxhcv1k/XIsIDRHQiB5YSBkYSAlMTAgZ2liaS4gIEVrc2kgZGXwZXJsZXIsIGRpc2tpbiAiCisic29udW5hIHV6YWts/fD9IGJlbGlydGlyLiAg1nJuZfBpbiAtMXMgdGFtIG9sYXJhayBzb24gc2VrdPZy/CBiZWxpcnRpci5cbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMworbXNnaWQgIlNUQVRFIGlzIG9uZSBvZjogb24sIG9mZlxuIgorbXNnc3RyICJTVEFURSD+dW5sYXJkYW4gYmlyaWRpcjogYef9aywga2FwYWz9XG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjQKK21zZ2lkICJERVZJQ0UgaXMgdXN1YWxseSAvZGV2L2hkYSBvciAvZGV2L3NkYVxuIgorbXNnc3RyICJERVZJQ0Ugc/1rbP1rbGEgL2Rldi9oZGEgeWEgZGEgL2Rldi9zZGEnZP1yXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjUKK21zZ2lkICJOQU1FIGlzIGFueSB3b3JkIHlvdSB3YW50XG4iCittc2dzdHIgIk5BTUUgaXN0ZWRp8GluaXogaGVyaGFuZ2kgYmlyIHP2emP8a3T8clxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTI2Cittc2dpZCAiVGhlIHBhcnRpdGlvbiBtdXN0IGhhdmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgRlMtVFlQRXM6ICIKK21zZ3N0ciAiRGlzayBi9mz8bfwgYf5h8P1kYWtpIEZTLVRZUEUnbGFy/W5kYW4gYmlyaW5lIHNhaGlwIG9sbWFs/WT9cjogIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTMwCisjLCBmdXp6eQorbXNnaWQgIiIKKyJDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLlxuIgorIlRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlLCBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS5cbiIKKyJcbiIKKyJUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiIKKyJidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuIgorIk1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbiIKKyJHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuIgorIlxuIgorbXNnc3RyICIiCisiVGVsaWZoYWtr/SAoQykgMTk5OCAtIDIwMDUg1npn/HIgWWF6/Wz9bSBLdXJ1bHX+dSwgQS7eLlxuIgorIkJ1IHByb2dyYW0sIEdOVSBHZW5lbCBLYW11IExpc2Fuc/0nbmNhIGthcHNhbmFuIGJlZGF2YSB5YXr9bP1tZP1yLlxuIgorIlxuIgorIkJ1IHByb2dyYW0sIHlhcmFybP0gb2xhY2Hw/SD8bWlkaXlsZSBkYfD9dP1sbf3+IG9sdXAsIFNBVElMQULdTN1STN1LIHlhIGRhICIKKyJCRUxM3SBC3VIgQU1BQ0EgVVlHVU5MVUsgZ2FyYW50aWxlcmkgZGUgZGFoaWwgb2xtYWsg/HplcmUgSEVSSEFOR90gQt1SICIKKyJHQVJBTlTdIGnnZXJtZXouICBEYWhhIGZhemxhIGF5cv1udP0gaedpbiBHTlUgR2VuZWwgS2FtdSBMaXNhbnP9J25hICIKKyJiYWv9bv16LlxuIgorIlxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiUwLmYlJVx0KHRpbWUgbGVmdCAlLjJkOiUuMmQpIgorbXNnc3RyICIlMC5mJSVcdChrYWxhbiBz/HJlICUuMmQ6JS4yZCkiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBhcnRpdGlvbiAlcyBpcyBiZWluZyB1c2VkLiBZb3UgbXVzdCB1bm1vdW50IGl0IGJlZm9yZSB5b3UgbW9kaWZ5IGl0IHdpdGggIgorIlBhcnRlZC4iCittc2dzdHIgIiIKKyIlcyBkaXNrIGL2bPxt/CBrdWxsYW79bP15b3IuICBQYXJ0ZWQnbGEgZGXwaf50aXJtZWRlbiD2bmNlIGF5/XJtYWz9c/1u/XouIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjExCisjLCBjLWZvcm1hdAorbXNnaWQgIlBhcnRpdGlvbihzKSBvbiAlcyBhcmUgYmVpbmcgdXNlZC4iCittc2dzdHIgIiVzIPx6ZXJpbmRla2kgZGlzayBi9mz8bfwobGVyaSkga3VsbGFu/Wz9eW9yLiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMworbXNnaWQgIiIKKyJUaGUgZXhpc3RpbmcgZmlsZSBzeXN0ZW0gd2lsbCBiZSBkZXN0cm95ZWQgYW5kIGFsbCBkYXRhIG9uIHRoZSBwYXJ0aXRpb24gIgorIndpbGwgYmUgbG9zdC4gRG8geW91IHdhbnQgdG8gY29udGludWU/IgorbXNnc3RyICIiCisiTWV2Y3V0IGRvc3lhIHNpc3RlbWkgc2lsaW5lY2VrIHZlIGRpc2sgYvZs/G38bmRla2kgdPxtIHZlcmkga2F5Ym9sYWNhay4gIgorIkRldmFtIGV0bWVrIGlzdGl5b3IgbXVzdW51ej8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBleGlzdGluZyBkaXNrIGxhYmVsIG9uICVzIHdpbGwgYmUgZGVzdHJveWVkIGFuZCBhbGwgZGF0YSBvbiB0aGlzIGRpc2sgIgorIndpbGwgYmUgbG9zdC4gRG8geW91IHdhbnQgdG8gY29udGludWU/IgorbXNnc3RyICIiCisiJXMg/HplcmluZGVraSBtZXZjdXQgZGlzayBldGlrZXRpIHNpbGluZWNlayB2ZSBidSBkaXNrIPx6ZXJpbmRla2kgdPxtIHZlcmkgIgorImtheWJvbGFjYWsuIERldmFtIGV0bWVrIGlzdGl5b3IgbXVzdW51ej8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo0NTggcGFydGVkL3BhcnRlZC5jOjY1MiBwYXJ0ZWQvcGFydGVkLmM6MTA0NAorIzogcGFydGVkL3BhcnRlZC5jOjExMjggcGFydGVkL3BhcnRlZC5jOjE3NzEgcGFydGVkL3BhcnRlZC5jOjE4NTIKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxOTAwCittc2dpZCAiUGFydGl0aW9uIG51bWJlcj8iCittc2dzdHIgIkRpc2sgYvZs/G38IG51bWFyYXP9PyIKKworIzogcGFydGVkL3BhcnRlZC5jOjUwMAorbXNnaWQgIlNvdXJjZSBkZXZpY2U/IgorbXNnc3RyICJLYXluYWsgYXln/XT9PyIKKworIzogcGFydGVkL3BhcnRlZC5jOjUwNAorbXNnaWQgIlNvdXJjZSBwYXJ0aXRpb24gbnVtYmVyPyIKK21zZ3N0ciAiS2F5bmFrIGRpc2sgYvZs/G38IG51bWFyYXP9PyIKKworIzogcGFydGVkL3BhcnRlZC5jOjUwOQorbXNnaWQgIkNhbid0IGNvcHkgYW4gZXh0ZW5kZWQgcGFydGl0aW9uLiIKK21zZ3N0ciAiRWsgZGlzayBi9mz8bWxlcmkga29weWFsYW5hbf15b3IuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NTE1Cittc2dpZCAiRGVzdGluYXRpb24gcGFydGl0aW9uIG51bWJlcj8iCittc2dzdHIgIkhlZGVmIGRpc2sgYvZs/G38IG51bWFyYXP9PyIKKworIzogcGFydGVkL3BhcnRlZC5jOjYxNQorbXNnaWQgIk5ldyBkaXNrIGxhYmVsIHR5cGU/IgorbXNnc3RyICJZZW5pIGRpc2sgZXRpa2V0aSB0/HL8PyIKKworIzogcGFydGVkL3BhcnRlZC5jOjY1NgorbXNnaWQgIkZpbGUgc3lzdGVtPyIKK21zZ3N0ciAiRG9zeWEgc2lzdGVtaT8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo3MDcgcGFydGVkL3BhcnRlZC5jOjg3OAorbXNnaWQgIlBhcnRpdGlvbiB0eXBlPyIKK21zZ3N0ciAiRGlzayBi9mz8bfwgdPxy/D8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo3MTQgcGFydGVkL3BhcnRlZC5jOjg4NSBwYXJ0ZWQvcGFydGVkLmM6MTEzMQorbXNnaWQgIlBhcnRpdGlvbiBuYW1lPyIKK21zZ3N0ciAiRGlzayBi9mz8bfwgYWT9PyIKKworIzogcGFydGVkL3BhcnRlZC5jOjcyMiBwYXJ0ZWQvcGFydGVkLmM6ODk1Cittc2dpZCAiRmlsZSBzeXN0ZW0gdHlwZT8iCittc2dzdHIgIkRvc3lhIHNpc3RlbWkgdPxy/D8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo3MjkgcGFydGVkL3BhcnRlZC5jOjg5NyBwYXJ0ZWQvcGFydGVkLmM6MTA1OQorIzogcGFydGVkL3BhcnRlZC5jOjE3MjUgcGFydGVkL3BhcnRlZC5jOjE3ODAKK21zZ2lkICJTdGFydD8iCittc2dzdHIgIkJh/mxhbmf95z8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo3MzEgcGFydGVkL3BhcnRlZC5jOjkwMCBwYXJ0ZWQvcGFydGVkLmM6MTA2MgorIzogcGFydGVkL3BhcnRlZC5jOjE3MjcgcGFydGVkL3BhcnRlZC5jOjE3ODIKK21zZ2lkICJFbmQ/IgorbXNnc3RyICJCaXRp/j8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo3NjkgcGFydGVkL3BhcnRlZC5jOjkzOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IHJlcXVlc3RlZCBhIHBhcnRpdGlvbiBmcm9tICVzIHRvICVzLlxuIgorIlRoZSBjbG9zZXN0IGxvY2F0aW9uIHdlIGNhbiBtYW5hZ2UgaXMgJXMgdG8gJXMuICBJcyB0aGlzIHN0aWxsIGFjY2VwdGFibGUgdG8gIgorInlvdT8iCittc2dzdHIgIiIKKyIlMSRzJ2RlbiAlMiRzJ2UgYmlyIGL2bPxtIGlzdGVkaW5pei5cbiIKKyJCZWNlcmViaWxkafBpbWl6IGJ1bmEgZW4geWFr/W4ga29udW0gJTMkcy0lNCRzLiAgQnUgc2l6aW4gaedpbiBoYWxhIGthYnVsICIKKyJlZGlsZWJpbGlyIG1pPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjg5MAorbXNnaWQgIkFuIGV4dGVuZGVkIHBhcnRpdGlvbiBjYW5ub3QgaG9sZCBhIGZpbGUgc3lzdGVtLiAgRGlkIHlvdSB3YW50IG1rcGFydD8iCittc2dzdHIgIkJpciBlayBkaXNrIGL2bPxt/G78biBkb3N5YSBzaXN0ZW1pIG9sYW1hei4gIG1rcGFydCBt/SBpc3RlZGluaXo/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTA1MAorbXNnaWQgIkNhbid0IG1vdmUgYW4gZXh0ZW5kZWQgcGFydGl0aW9uLiIKK21zZ3N0ciAiQmlyIGVrIGRpc2sgYvZs/G38IHRh/v1uYW1hei4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMDc5Cittc2dpZCAiQ2FuJ3QgbW92ZSBhIHBhcnRpdGlvbiBvbnRvIGl0c2VsZi4gIFRyeSB1c2luZyByZXNpemUsIHBlcmhhcHM/IgorbXNnc3RyICIiCisiQmlyIGRpc2sgYvZs/G38IGtlbmRpIPx6ZXJpbmUgdGH+/W5hbWF6LiAgQmVsa2kgeWVuaWRlbiBib3l1dGxhbmT9cm1hef0gIgorImRlbmVyIG1pc2luaXo/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIyNworIywgYy1mb3JtYXQKK21zZ2lkICJNaW5vcjogJWRcbiIKK21zZ3N0ciAiTWlub3I6ICVkXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZsYWdzOiAlc1xuIgorbXNnc3RyICJCYXlyYWtsYXI6ICVzXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGUgU3lzdGVtOiAlc1xuIgorbXNnc3RyICJEb3N5YSBTaXN0ZW1pOiAlc1xuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIzMAorbXNnaWQgIlNpemU6ICAgICAgICAgIgorbXNnc3RyICJCb3l1dDogICAgICAgICAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjM1Cittc2dpZCAiTWluaW11bSBzaXplOiAiCittc2dzdHIgIk1pbmltdW0gYm95dXQ6ICIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMzgKK21zZ2lkICJNYXhpbXVtIHNpemU6ICIKK21zZ3N0ciAiTWFrc2ltdW0gYm95dXQ6ICIKKworIzogcGFydGVkL3BhcnRlZC5jOjEzNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTW9kZWw6ICVzICglcylcbiIKK21zZ3N0ciAiTW9kZWw6ICVzICglcylcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEzNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGlzayAlczogJXNcbiIKK21zZ3N0ciAiRGlzayAlMSRzOiAlMiRzXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlY3RvciBzaXplIChsb2dpY2FsL3BoeXNpY2FsKTogJWxsZEIvJWxsZEJcbiIKK21zZ3N0ciAiU2VrdPZyIGJveXV0dSAobWFudP1rc2FsL2Zpemlrc2VsKTogJWxsZEIvJWxsZEJcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEzODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQklPUyBjeWxpbmRlcixoZWFkLHNlY3RvciBnZW9tZXRyeTogJWQsJWQsJWQuICBFYWNoIGN5bGluZGVyIGlzICVzLlxuIgorbXNnc3RyICIiCisiQklPUyBzaWxpbmRpcmksIGthZmEsIHNla3T2ciBnZW9tZXRyaXNpOiAlZCwlZCwlZC4gIEhlcmJpciBzaWxpbmRpciAlcyd0aXIuXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMzkyCisjLCBjLWZvcm1hdAorbXNnaWQgIlBhcnRpdGlvbiBUYWJsZTogJXNcbiIKK21zZ3N0ciAiRGlzayBi9mz8bfwgVGFibG9zdTogJXNcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MDYgcGFydGVkL3BhcnRlZC5jOjE0MDkKK21zZ2lkICJOdW1iZXIiCittc2dzdHIgIk51bWFyYSIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MDYgcGFydGVkL3BhcnRlZC5jOjE0MDkKK21zZ2lkICJTdGFydCIKK21zZ3N0ciAiQmH+bGFuZ/3nIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQwNyBwYXJ0ZWQvcGFydGVkLmM6MTQxMAorbXNnaWQgIkVuZCIKK21zZ3N0ciAiU29uIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQxMAorbXNnaWQgIlNpemUiCittc2dzdHIgIkJveXV0IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQxNAorbXNnaWQgIlR5cGUiCittc2dzdHIgIlT8ciIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MTYKK21zZ2lkICJGaWxlIHN5c3RlbSIKK21zZ3N0ciAiRG9zeWEgc2lzdGVtaSIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MTkKK21zZ2lkICJOYW1lIgorbXNnc3RyICLdc2ltIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQyMQorbXNnaWQgIkZsYWdzIgorbXNnc3RyICJCYXlyYWtsYXIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDc3Cittc2dpZCAiRnJlZSBTcGFjZSIKK21zZ3N0ciAiQm/+IEFsYW4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBICVzICVzIHBhcnRpdGlvbiB3YXMgZm91bmQgYXQgJXMgLT4gJXMuICBEbyB5b3Ugd2FudCB0byBhZGQgaXQgdG8gdGhlICIKKyJwYXJ0aXRpb24gdGFibGU/IgorbXNnc3RyICIiCisiJTMkcyAtPiAlNCRzJ2RlIGJpciAlMSRzICUyJHMgZGlzayBi9mz8bfwgYnVsdW5kdS4gIEJ1bnUgZGlzayBi9mz8bfwgIgorInRhYmxvc3VuYSBla2xlbWV5aSBpc3RlciBtaXNpbml6PyIKKworIzogcGFydGVkL3BhcnRlZC5jOjE2NjMKK21zZ2lkICJzZWFyY2hpbmcgZm9yIGZpbGUgc3lzdGVtcyIKK21zZ3N0ciAiZG9zeWEiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxODc3Cittc2dpZCAiTmV3IGRldmljZT8iCittc2dzdHIgIlllbmkgYXln/XQ/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTkwMgorbXNnaWQgIkZsYWcgdG8gSW52ZXJ0PyIKK21zZ3N0ciAiVGVyc2luZSDnZXZpcm1layD8emVyZSBiYXlyYWtsYT8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxOTA3Cittc2dpZCAiTmV3IHN0YXRlPyIKK21zZ3N0ciAiWWVuaSBkdXJ1bT8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxOTQ0Cittc2dpZCAiVW5pdD8iCittc2dzdHIgIkJpcmltPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjIwOTMKK21zZ2lkICJjaGVjayIKK21zZ3N0ciAiY2hlY2siCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMDk2Cittc2dpZCAiIgorImNoZWNrIE5VTUJFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8gYSBzaW1wbGUgY2hlY2sgb24gdGhlIGZpbGUgc3lzdGVtIgorbXNnc3RyICIiCisiY2hlY2sgTlVNQkVSICAgICAgICAgICAgICAgICAgZG9zeWEgc2lzdGVtaSD8emVyaW5kZSBiYXNpdCBiaXIga29udHJvbCB5YXAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTAyCittc2dpZCAiY3AiCittc2dzdHIgImNwIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEwNQorbXNnaWQgIiIKKyJjcCBbRlJPTS1ERVZJQ0VdIEZST00tTlVNQkVSIFRPLU5VTUJFUiAgIGNvcHkgZmlsZSBzeXN0ZW0gdG8gYW5vdGhlciAiCisicGFydGl0aW9uIgorbXNnc3RyICIiCisiY3AgW0ZST00tREVWSUNFXSBGUk9NLU5VTUJFUiBUTy1OVU1CRVIgICBkb3N5YSBzaXN0ZW1pbmkgYmlyIGJh/mthIGRpc2sgIgorImL2bPxt/G5lIGtvcHlhbGEiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTExCittc2dpZCAiaGVscCIKK21zZ3N0ciAiaGVscCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMTQKKyMsIGZ1enp5Cittc2dpZCAiIgorImhlbHAgW0NPTU1BTkRdICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgZ2VuZXJhbCBoZWxwLCBvciBoZWxwIG9uICIKKyJDT01NQU5EIgorbXNnc3RyICIiCisiaGVscCBbQ09NTUFORF0gICAgICAgICAgICAgICBnZW5lbCB5YXJk/W39IHlhIGRhIEtPTVVUIHlhcmT9bf1u/SB5YXpk/XL9ciIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMjAKK21zZ2lkICJta2xhYmVsIgorbXNnc3RyICJta2xhYmVsIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEyMAorbXNnaWQgIm1rdGFibGUiCittc2dzdHIgIm1rdGFibGUiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTIzCittc2dpZCAiIgorIm1rbGFiZWwsbWt0YWJsZSBMQUJFTC1UWVBFICAgICAgICAgICAgICAgY3JlYXRlIGEgbmV3IGRpc2tsYWJlbCAocGFydGl0aW9uICIKKyJ0YWJsZSkiCittc2dzdHIgIiIKKyJta2xhYmVsLG1rdGFibGUgTEFCRUwtVFlQRSAgICAgICAgICAgICB5ZW5pIGJpciBkaXNrIGV0aWtldGkgKGRpc2sgYvZs/G38ICIKKyJ0YWJsb3N1KSBvbHX+dHVyIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEyOQorbXNnaWQgIm1rZnMiCittc2dzdHIgIm1rZnMiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTMyCittc2dpZCAiIgorIm1rZnMgTlVNQkVSIEZTLVRZUEUgICAgICAgICAgICAgICAgICAgICAgbWFrZSBhIEZTLVRZUEUgZmlsZSBzeXN0ZW0gb24gIgorInBhcnRpdGl0b24gTlVNQkVSIgorbXNnc3RyICIiCisibWtmcyBOVU1CRVIgRlMtVFlQRSAgICAgICAgICAgICBOVU1CRVIgZGlzayBi9mz8bfwg/HplcmluZGUgRlMtVFlQRSBkb3N5YSAiCisic2lzdGVtaW5pIHlhcCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMzgKK21zZ2lkICJta3BhcnQiCittc2dzdHIgIm1rcGFydCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNDEKK21zZ2lkICJta3BhcnQgUEFSVC1UWVBFIFtGUy1UWVBFXSBTVEFSVCBFTkQgICAgIG1ha2UgYSBwYXJ0aXRpb24iCittc2dzdHIgIm1rcGFydCBQQVJULVRZUEUgW0ZTLVRZUEVdIFNUQVJUIEVORCAgICAgICAgICBiaXIgZGlzayBi9mz8bfwgeWFwIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE0NworIywgZnV6enkKK21zZ2lkICIiCisiJ21rcGFydCcgbWFrZXMgYSBwYXJ0aXRpb24gd2l0aG91dCBjcmVhdGluZyBhIG5ldyBmaWxlIHN5c3RlbSBvbiB0aGUgIgorInBhcnRpdGlvbi4gIEZTLVRZUEUgbWF5IGJlIHNwZWNpZmllZCB0byBzZXQgYW4gYXBwcm9wcmlhdGUgcGFydGl0aW9uIElELlxuIgorbXNnc3RyICIiCisibWtwYXJ0LCBkaXNrIGL2bPxt/CD8emVyaW5kZSB5ZW5pIGJpciBkb3N5YSBzaXN0ZW1pIG9sdf50dXJtYWRhbiBiaXIgZGlzayAiCisiYvZs/G38IHlhcGFyLiAgRFMtVNxS3CwgdXlndW4gYmlyIGRpc2sgYvZs/G38IG51bWFyYXP9IGF0YW1hayBp52luICIKKyJiZWxpcnRpbGViaWxpci5cbiIKKyJcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNTIKK21zZ2lkICJta3BhcnRmcyIKK21zZ3N0ciAibWtwYXJ0ZnMiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTU1Cittc2dpZCAiIgorIm1rcGFydGZzIFBBUlQtVFlQRSBGUy1UWVBFIFNUQVJUIEVORCAgICAgbWFrZSBhIHBhcnRpdGlvbiB3aXRoIGEgZmlsZSBzeXN0ZW0iCittc2dzdHIgIiIKKyJta3BhcnRmcyBQQVJULVRZUEUgRlMtVFlQRSBTVEFSVCBFTkQgICAgICBkb3N5YSBzaXN0ZW1pIG9sYW4gYmlyIGRpc2sgYvZs/G38ICIKKyJ5YXAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTYxCittc2dpZCAibW92ZSIKK21zZ3N0ciAibW92ZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNjQKK21zZ2lkICJtb3ZlIE5VTUJFUiBTVEFSVCBFTkQgICAgICAgICAgICAgICAgICAgIG1vdmUgcGFydGl0aW9uIE5VTUJFUiIKK21zZ3N0ciAibW92ZSBOVU1CRVIgU1RBUlQgRU5EICAgICAgICAgICBOVU1CRVIuIGRpc2sgYvZs/G38bvwgdGH+/SIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNjkKK21zZ2lkICJuYW1lIgorbXNnc3RyICJuYW1lIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE3MgorbXNnaWQgIm5hbWUgTlVNQkVSIE5BTUUgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSBwYXJ0aXRpb24gTlVNQkVSIGFzIE5BTUUiCittc2dzdHIgIiIKKyJuYW1lIE5VTUJFUiBOQU1FICAgICAgICAgICAgICAgICAgICAgTlVNQkVSLiBkaXNrIGL2bPxt/G78IE5BTUUnbGUgYWRsYW5k/XIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTc3Cittc2dpZCAicHJpbnQiCittc2dzdHIgInByaW50IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE4MAorbXNnaWQgIiIKKyJwcmludCBbZGV2aWNlc3xmcmVlfGxpc3QsYWxsfE5VTUJFUl0gICAgIGRpc3BsYXkgdGhlIHBhcnRpdGlvbiB0YWJsZSwgIgorImF2YWlsYWJsZSBkZXZpY2VzLCBmcmVlIHNwYWNlLCBhbGwgZm91bmQgcGFydGl0aW9ucywgb3IgYSBwYXJ0aWN1bGFyICIKKyJwYXJ0aXRpb24iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxODUKK21zZ2lkICIiCisiV2l0aG91dCBhcmd1bWVudHMsICdwcmludCcgZGlzcGxheXMgdGhlIGVudGlyZSBwYXJ0aXRpb24gdGFibGUuIEhvd2V2ZXIgd2l0aCAiCisidGhlIGZvbGxvd2luZyBhcmd1bWVudHMgaXQgcGVyZm9ybXMgdmFyaW91cyBvdGhlciBhY3Rpb25zLlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTg3Cittc2dpZCAiICBkZXZpY2VzICAgOiBkaXNwbGF5IGFsbCBhY3RpdmUgYmxvY2sgZGV2aWNlc1xuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTg4Cittc2dpZCAiIgorIiAgZnJlZSAgICAgIDogZGlzcGxheSBpbmZvcm1hdGlvbiBhYm91dCBmcmVlIHVucGFydGl0aW9uZWQgc3BhY2Ugb24gdGhlICIKKyJjdXJyZW50IGJsb2NrIGRldmljZVxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTkwCisjLCBmdXp6eQorbXNnaWQgIiIKKyIgIGxpc3QsIGFsbCA6IGRpc3BsYXkgdGhlIHBhcnRpdGlvbiB0YWJsZXMgb2YgYWxsIGFjdGl2ZSBibG9jayBkZXZpY2VzXG4iCittc2dzdHIgImFsZ/1sYW5hbiB0/G0gYXln/XRsYXL9biBi52z8bWxlbWUgdGFibG9sYXL9bv1uIGxpc3RlbGVyIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE5MQorbXNnaWQgIiIKKyIgIE5VTUJFUiAgICA6IGRpc3BsYXkgbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIHBhcnRpY3VsYXIgIgorInBhcnRpdGlvblxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTk2Cittc2dpZCAicXVpdCIKK21zZ3N0ciAicXVpdCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxOTkKK21zZ2lkICJxdWl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQgcHJvZ3JhbSIKK21zZ3N0ciAicXVpdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtZGFuIOf9ayIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMDQKK21zZ2lkICJyZXNjdWUiCittc2dzdHIgInJlc2N1ZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMDcKK21zZ2lkICIiCisicmVzY3VlIFNUQVJUIEVORCAgICAgICAgICAgICAgICAgICAgICAgICByZXNjdWUgYSBsb3N0IHBhcnRpdGlvbiBuZWFyIFNUQVJUICIKKyJhbmQgRU5EIgorbXNnc3RyICIiCisicmVzY3VlIFNUQVJUIEVORCAgICAgICAgICAgICAgICAgU1RBUlQgdmUgRU5EIGFyYXP9bmRha2kga2F5/XAgZGlzayAiCisiYvZs/G1sZXJpbmkga3VydGFyIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIxMworbXNnaWQgInJlc2l6ZSIKK21zZ3N0ciAicmVzaXplIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIxNgorbXNnaWQgIiIKKyJyZXNpemUgTlVNQkVSIFNUQVJUIEVORCAgICAgICAgICAgICAgICAgIHJlc2l6ZSBwYXJ0aXRpb24gTlVNQkVSIGFuZCBpdHMgIgorImZpbGUgc3lzdGVtIgorbXNnc3RyICIiCisicmVzaXplIE5VTUJFUiBTVEFSVCBFTkQgICAgICAgICAgTlVNQkVSLiBkaXNrIGL2bPxt/G78IHZlIPx6ZXJpbmRla2kgZG9zeWEgIgorInNpc3RlbWluaSB5ZW5pZGVuIGJveXV0bGFuZP1yIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIyNAorbXNnaWQgInJtIgorbXNnc3RyICJybSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMjcKK21zZ2lkICJybSBOVU1CRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwYXJ0aXRpb24gTlVNQkVSIgorbXNnc3RyICJybSBOVU1CRVIgICAgICAgICAgICAgICAgICAgICAgICBOVU1CRVIuIGRpc2sgYvZs/G38bvwgc2lsIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIzMgorbXNnaWQgInNlbGVjdCIKK21zZ3N0ciAic2VsZWN0IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIzNQorbXNnaWQgInNlbGVjdCBERVZJQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvb3NlIHRoZSBkZXZpY2UgdG8gZWRpdCIKK21zZ3N0ciAic2VsZWN0IERFVklDRSAgICAgICAgICAgICAgICAgIGT8emVubGVuZWNlayBheWf9dP0gc2XnIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI0MAorbXNnaWQgInNldCIKK21zZ3N0ciAic2V0IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI0MworbXNnaWQgIiIKKyJzZXQgTlVNQkVSIEZMQUcgU1RBVEUgICAgICAgICAgICAgICAgICAgIGNoYW5nZSB0aGUgRkxBRyBvbiBwYXJ0aXRpb24gTlVNQkVSIgorbXNnc3RyICIiCisic2V0IE5VTUJFUiBGTEFHIFNUQVRFICAgICAgICAgICAgIE5VTUJFUi4gZGlzayBi9mz8bfwg/HplcmluZGVraSBiYXlyYfD9ICIKKyJkZfBp/nRpciIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNDkKK21zZ2lkICJ0b2dnbGUiCittc2dzdHIgInNl521lY2UgLyBkZfBp/nRpciIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNTIKK21zZ2lkICIiCisidG9nZ2xlIFtOVU1CRVIgW0ZMQUddXSAgICAgICAgICAgICAgICAgICB0b2dnbGUgdGhlIHN0YXRlIG9mIEZMQUcgb24gIgorInBhcnRpdGlvbiBOVU1CRVIiCittc2dzdHIgIiIKKyJ0b2dnbGUgW05VTUJFUiBbRkxBR10gICAgICAgICAgICAgICAgICAgICAgIE5VTUJFUi4gZGlzayBi9mz8bfwg/HplcmluZGVraSAiCisiQkFZUkFLIGR1cnVtdW51IGRl8Gn+dGlyIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI1OAorbXNnaWQgInVuaXQiCittc2dzdHIgImJpcmltIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI2MQorbXNnaWQgInVuaXQgVU5JVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0IHRoZSBkZWZhdWx0IHVuaXQgdG8gVU5JVCIKK21zZ3N0ciAiYmlyaW0gVU5JVCAgICAgICAgICAgICAgICAgICAgICAgIPZudGFu/W1s/SBiaXJpbWkgVU5JVCdlIGF5YXJsYSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNjYKK21zZ2lkICJ2ZXJzaW9uIgorbXNnc3RyICJz/HL8bSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNjkKKyMsIGZ1enp5Cittc2dpZCAiIgorInZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheSB0aGUgdmVyc2lvbiBudW1iZXIgYW5kICIKKyJjb3B5cmlnaHQgaW5mb3JtYXRpb24gb2YgR05VIFBhcnRlZCIKK21zZ3N0ciAiIgorInZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR05VIFBhcnRlZCdpbiBn/G5jZWwgc/xy/G38bvwgdmUgdGVsaWYgIgorImhha2v9IGJpbGdpc2luaSBn9nL8bnT8bGVyIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI3MworIywgZnV6enkKK21zZ2lkICIiCisiJ3ZlcnNpb24nIGRpc3BsYXlzIGNvcHlyaWdodCBhbmQgdmVyc2lvbiBpbmZvcm1hdGlvbiBjb3JyZXNwb25kaW5nIHRvIHRoaXMgIgorImNvcHkgb2YgR05VIFBhcnRlZFxuIgorbXNnc3RyICIiCisic/xy/G0sIEdOVSBQYXJ0ZWQnaW4gYnUga29weWFz/W79biB0ZWxpZiBoYWtr/SB2ZSBz/HL8bSBiaWxnaXNpbmkgIgorImf2cvxudPxsZXJcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIzMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstaGxtc3ZdIFtERVZJQ0UgW0NPTU1BTkQgW1BBUkFNRVRFUlNdXS4uLl1cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjM3OQorbXNnaWQgIk5vIGRldmljZSBmb3VuZCIKK21zZ3N0ciAiQXln/XQgYnVsdW5hbWFk/SIKKworIzogcGFydGVkL3BhcnRlZC5jOjI0MTIKKyMsIGZ1enp5Cittc2dpZCAiV0FSTklORzogWW91IGFyZSBub3Qgc3VwZXJ1c2VyLiAgV2F0Y2ggb3V0IGZvciBwZXJtaXNzaW9ucy4iCittc2dzdHIgIlVZQVJJOiBT/HBlciBrdWxsYW79Y/0gZGXwaWxzaW5pei4gIN16aW5sZXJlIGRpa2thdCBlZGluLlxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjQ1MAorIywgZnV6enkKK21zZ2lkICJZb3UgbWF5IG5lZWQgdG8gdXBkYXRlIC9ldGMvZnN0YWIuXG4iCittc2dzdHIgIlpvcnVubHV5c2EsIC9ldGMvZnN0YWInaSBn/G5jZWxsZW1leWkgdW51dG1hef1uLlxuIgorCisjOiBwYXJ0ZWQvdWkuYzoxNjAKK21zZ2lkICJXZWxjb21lIHRvIEdOVSBQYXJ0ZWQhIFR5cGUgJ2hlbHAnIHRvIHZpZXcgYSBsaXN0IG9mIGNvbW1hbmRzLlxuIgorbXNnc3RyICIiCisiR05VIFBhcnRlZCdhIGhv/mdlbGRpbml6ISBLb211dGxhcv1uIGJpciBsaXN0ZXNpbmkgZ/ZybWVrIGnnaW4gJ2hlbHAnICIKKyJ5YXr9bv16LlxuIgorCisjOiBwYXJ0ZWQvdWkuYzoxNjMKK21zZ2lkICIiCisiVXNhZ2U6IHBhcnRlZCBbT1BUSU9OXS4uLiBbREVWSUNFIFtDT01NQU5EIFtQQVJBTUVURVJTXS4uLl0uLi5dXG4iCisiQXBwbHkgQ09NTUFORHMgd2l0aCBQQVJBTUVURVJTIHRvIERFVklDRS4gIElmIG5vIENPTU1BTkQocykgYXJlIGdpdmVuLCBydW4gIgorImluXG4iCisiaW50ZXJhY3RpdmUgbW9kZS5cbiIKK21zZ3N0ciAiIgorIkt1bGxhbv1tOiBwYXJ0ZWQgW1NFx0VORUtdLi4uIFtBWUdJVCBbS09NVVQgW1BBUkFNRVRSRUxFUl0uLi5dLi4uXVxuIgorIktPTVVUTEFSSSBQQVJBTUVUUkVMRVJsZSBBWUdJVGEgdXlndWxhci4gIEXwZXIgS09NVVQobGFyKSB2ZXJpbG1lenNlLFxuIgorImV0a2lsZf5pbWxpIGtpcHRlIOdhbP3+/XIuXG4iCisKKyM6IHBhcnRlZC91aS5jOjE2OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlxuIgorIllvdSBmb3VuZCBhIGJ1ZyBpbiBHTlUgUGFydGVkISBIZXJlJ3Mgd2hhdCB5b3UgaGF2ZSB0byBkbzpcbiIKKyJcbiIKKyJEb24ndCBwYW5pYyEgVGhlIGJ1ZyBoYXMgbW9zdCBsaWtlbHkgbm90IGFmZmVjdGVkIGFueSBvZiB5b3VyIGRhdGEuXG4iCisiSGVscCB1cyB0byBmaXggdGhpcyBidWcgYnkgZG9pbmcgdGhlIGZvbGxvd2luZzpcbiIKKyJcbiIKKyJDaGVjayB3aGV0aGVyIHRoZSBidWcgaGFzIGFscmVhZHkgYmVlbiBmaXhlZCBieSBjaGVja2luZ1xuIgorInRoZSBsYXN0IHZlcnNpb24gb2YgR05VIFBhcnRlZCB0aGF0IHlvdSBjYW4gZmluZCBhdDpcbiIKKyJcbiIKKyJcdGh0dHA6Ly9mdHAuZ251Lm9yZy9nbnUvcGFydGVkL1xuIgorIlxuIgorIlBsZWFzZSBjaGVjayB0aGlzIHZlcnNpb24gcHJpb3IgdG8gYnVnIHJlcG9ydGluZy5cbiIKKyJcbiIKKyJJZiB0aGlzIGhhcyBub3QgYmVlbiBmaXhlZCB5ZXQgb3IgaWYgeW91IGRvbid0IGtub3cgaG93IHRvIGNoZWNrLFxuIgorInBsZWFzZSB2aXNpdCB0aGUgR05VIFBhcnRlZCB3ZWJzaXRlOlxuIgorIlxuIgorIlx0aHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3BhcnRlZFxuIgorIlxuIgorImZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLlxuIgorIlxuIgorIllvdXIgcmVwb3J0IHNob3VsZCBjb250YWluIHRoZSB2ZXJzaW9uIG9mIHRoaXMgcmVsZWFzZSAoJXMpXG4iCisiYWxvbmcgd2l0aCB0aGUgZXJyb3IgbWVzc2FnZSBiZWxvdywgdGhlIG91dHB1dCBvZlxuIgorIlxuIgorIlx0cGFydGVkIERFVklDRSB1bml0IGNvIHByaW50IHVuaXQgcyBwcmludFxuIgorIlxuIgorImFuZCB0aGUgZm9sbG93aW5nIGhpc3Rvcnkgb2YgY29tbWFuZHMgeW91IGVudGVyZWQuXG4iCisiQWxzbyBpbmNsdWRlIGFueSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHlvdXIgc2V0dXAgeW91XG4iCisiY29uc2lkZXIgaW1wb3J0YW50LlxuIgorbXNnc3RyICIiCisiXG4iCisiXG4iCisiR05VIFBhcnRlZCdkYSBiaXIgeWF6/Wz9bSBoYXRhc/0gYnVsZHVudXohIFlhcG1hbv16IGdlcmVrZW4g/nVubGFyZP1yOlxuIgorIlxuIgorIlBhbmnwZSBrYXD9bG1hef1uISBZYXr9bP1tIGhhdGFz/SBi/Hn8ayBvbGFz/Wz9a2xhIHZlcmluaXppIGV0a2lsZW1lZGkuXG4iCisiQnUgaGF0YXn9IG9uYXJtYWsgaedpbiBiaXplIP51bmxhcv0geWFwYXJhayB5YXJk/W0gZWRpbjpcbiIKKyJcbiIKKyJcdGh0dHA6Ly9mdHAuZ251Lm9yZy9nbnUvcGFydGVkL1xuIgorIlxuIgorImFkcmVzaW5kZSBidWxhYmlsZWNl8GluaXogR05VIFBhcnRlZCdpbiBzb24gc/xy/G38bvwga29udHJvbFxuIgorImVkZXJlayBoYXRhbv1uIHphdGVuIGT8emVsdGlsbWn+IG9sdXAgb2xtYWT98P1u/SBrb250cm9sIGVkaW4uXG4iCisiSGF0YXn9IHJhcG9yIGV0bWVkZW4g9m5jZSBs/HRmZW4gYnUgc/xy/G38IGtvbnRyb2wgZWRpbi5cbiIKKyJcbiIKKyJF8GVyIGhhdGEgb25hcv1sbWFt/f5zYSB5YSBkYSBuYXP9bCBrb250cm9sIGVkZWNl8GluaXppIGJpbG1peW9yc2Fu/XosXG4iCisibPx0ZmVuIEdOVSBQYXJ0ZWQgd2ViIHNpdGVzaW5pXG4iCisiZGFoYSBmYXpsYSBiaWxnaSBp52luIHppeWFyZXQgZWRpbjpcbiIKKyJcbiIKKyJcdGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9wYXJ0ZWRcbiIKKyJcbiIKKyJSYXBvcnVudXogYnUgZGHw/XT9bf1uIHP8cvxtIG51bWFyYXP9bv0gKCVzKVxuIgorImH+YfD9ZGFraSBoYXRhIG1lc2Fq/W79LFxuIgorIlxuIgorIlx0cGFydGVkIERFVklDRSB1bml0IGNvIHByaW50IHVuaXQgcyBwcmludFxuIgorIlxuIgorImtvbXV0dW51biDn/Wt0/XP9bv0gdmUga3VydWx1bXVudXogaGFra/1uZGEg9m5lbWxpIG9sZHXwdW51IGT8/vxuZPzw/G78eiBlayAiCisiYmlsZ2lsZXJpXG4iCisiaedlcm1lbGlkaXIuXG4iCisKKyM6IHBhcnRlZC91aS5jOjI4NAorbXNnaWQgIiIKKyJcbiIKKyJDb21tYW5kIEhpc3Rvcnk6XG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6MzY2CisjLCBmdXp6eQorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogU0VHVl9NQVBFUlIgKEFkZHJlc3Mgbm90IG1hcHBlZCB0byBvYmplY3QpXG4iCittc2dzdHIgIiIKKyJcbiIKKyJIYXRhOiBTRUdWX01BUEVSUiAoQWRyZXMgbmVzbmV5ZSBl/mxlbm1lZGkpIgorCisjOiBwYXJ0ZWQvdWkuYzozNzIKKyMsIGZ1enp5Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBTRUdWX0FDQ0VSUiAoSW52YWxpZCBwZXJtaXNzaW9ucyBmb3IgbWFwcGVkIG9iamVjdClcbiIKK21zZ3N0ciAiIgorIlxuIgorIkhhdGE6IFNFR1ZfQUNDRVJSIChF/mxlbm1p/iBuZXNuZSBp52luIGdl52Vyc2l6IGl6aW5sZXIpIgorCisjOiBwYXJ0ZWQvdWkuYzozNzcKKyMsIGZ1enp5Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBBIGdlbmVyYWwgU0lHU0VHViBzaWduYWwgd2FzIGVuY291bnRlcmVkLlxuIgorbXNnc3RyICIiCisiXG4iCisiSGF0YTogR2VuZWwgYmlyIFNJR1NFR1Ygc2lueWFsaXlsZSBrYXL+/Wxh/v1sZP0uIgorCisjOiBwYXJ0ZWQvdWkuYzo0MTAKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9JTlRESVYgKEludGVnZXI6IGRpdmlkZSBieSB6ZXJvKSIKK21zZ3N0ciAiIgorIlxuIgorIkhhdGE6IEZQRV9JTlRESVYgKFRhbXNhef06IHP9Zv1ybGEgYvZs/G5tZSkiCisKKyM6IHBhcnRlZC91aS5jOjQxNQorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0lOVE9WRiAoSW50ZWdlcjogb3ZlcmZsb3cpIgorbXNnc3RyICIiCisiXG4iCisiSGF0YTogRlBFX0lOVE9WRiAoVGFtc2F5/TogdGH+bWEpIgorCisjOiBwYXJ0ZWQvdWkuYzo0MjAKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRESVYgKEZsb2F0OiBkaXZpZGUgYnkgemVybykiCittc2dzdHIgIiIKKyJcbiIKKyJIYXRhOiBGUEVfRkxURElWIChLYXlhbjogc/1m/XJsYSBi9mz8bm1lKSIKKworIzogcGFydGVkL3VpLmM6NDI1Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxUT1ZGIChGbG9hdDogb3ZlcmZsb3cpIgorbXNnc3RyICIiCisiXG4iCisiSGF0YTogRlBFX0ZMVE9WRiAoS2F5YW46IHRh/m1hKSIKKworIzogcGFydGVkL3VpLmM6NDMwCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxUVU5EIChGbG9hdDogdW5kZXJmbG93KSIKK21zZ3N0ciAiIgorIlxuIgorIkhhdGE6IEZQRV9GTFRVTkQgKEtheWFuOiBib/5hbG1hKSIKKworIzogcGFydGVkL3VpLmM6NDM1Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxUUkVTIChGbG9hdDogaW5leGFjdCByZXN1bHQpIgorbXNnc3RyICIiCisiXG4iCisiSGF0YTogRlBFX0ZMVFJFUyAoS2F5YW46IGtlc2luIG9sbWF5YW4gc29udecpIgorCisjOiBwYXJ0ZWQvdWkuYzo0NDAKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRJTlYgKEZsb2F0OiBpbnZhbGlkIG9wZXJhdGlvbikiCittc2dzdHIgIiIKKyJcbiIKKyJIYXRhOiBGUEVfRkxUSU5WIChLYXlhbjogZ2XnZXJzaXogaf5sZW0pIgorCisjOiBwYXJ0ZWQvdWkuYzo0NDUKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRTVUIgKEZsb2F0OiBzdWJzY3JpcHQgb3V0IG9mIHJhbmdlKSIKK21zZ3N0ciAiIgorIlxuIgorIkhhdGE6IEZQRV9GTFRTVUIgKEtheWFuOiBhbHRzaW1nZSBlcmltIGT9/v0pIgorCisjOiBwYXJ0ZWQvdWkuYzo0NTAKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEEgZ2VuZXJhbCBTSUdGUEUgc2lnbmFsIHdhcyBlbmNvdW50ZXJlZC4iCittc2dzdHIgIiIKKyJcbiIKKyJIYXRhOiBHZW5lbCBiaXIgU0lHRlBFIHNpbnlhbGl5bGUga2Fy/v1sYf79bGT9LiIKKworIzogcGFydGVkL3VpLmM6NDgzCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfSUxMT1BDIChJbGxlZ2FsIE9wY29kZSkiCittc2dzdHIgIiIKKyJcbiIKKyJIYXRhOiBJTExfSUxMT1BDIChLdXJhbGT9/v0gT3Bjb2RlKSIKKworIzogcGFydGVkL3VpLmM6NDg4Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfSUxMT1BOIChJbGxlZ2FsIE9wZXJhbmQpIgorbXNnc3RyICIiCisiXG4iCisiSGF0YTogSUxMX0lMTE9QTiAoS3VyYWxk/f79IN3+bGVuZW4pIgorCisjOiBwYXJ0ZWQvdWkuYzo0OTMKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9JTExBRFIgKElsbGVnYWwgYWRkcmVzc2luZyBtb2RlKSIKK21zZ3N0ciAiIgorIlxuIgorIkhhdGE6IElMTF9JTExBRFIgKEt1cmFsZP3+/SBhZHJlc2xlbWUga2lwaSkiCisKKyM6IHBhcnRlZC91aS5jOjQ5OAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX0lMTFRSUCAoSWxsZWdhbCBUcmFwKSIKK21zZ3N0ciAiIgorIlxuIgorIkhhdGE6IElMTF9JTExUUlAgKEt1cmFsZP3+/SBUdXphaykiCisKKyM6IHBhcnRlZC91aS5jOjUwMworbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX1BSVk9QQyAoUHJpdmlsZWdlZCBPcGNvZGUpIgorbXNnc3RyICIiCisiXG4iCisiSGF0YTogSUxMX1BSVk9QQyAoQXly/WNhbP1rbP0gT3Bjb2RlKSIKKworIzogcGFydGVkL3VpLmM6NTA4Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfUFJWUkVHIChQcml2aWxlZ2VkIFJlZ2lzdGVyKSIKK21zZ3N0ciAiIgorIlxuIgorIkhhdGE6IElMTF9QUlZSRUcgKEF5cv1jYWz9a2z9IFlhem1h5ykiCisKKyM6IHBhcnRlZC91aS5jOjUxMworbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX0NPUFJPQyAoQ29wcm9jZXNzb3IgRXJyb3IpIgorbXNnc3RyICIiCisiXG4iCisiSGF0YTogSUxMX0NPUFJPQyAoRf5p/mxlbWNpIEhhdGFz/SkiCisKKyM6IHBhcnRlZC91aS5jOjUxOAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX0JBRFNUSyAoSW50ZXJuYWwgU3RhY2sgRXJyb3IpIgorbXNnc3RyICIiCisiXG4iCisiSGF0YTogSUxMX0JBRFNUSyAoRGFoaWxpIFn98P1uIEhhdGFz/SkiCisKKyM6IHBhcnRlZC91aS5jOjUyMworbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogQSBnZW5lcmFsIFNJR0lMTCBzaWduYWwgd2FzIGVuY291bnRlcmVkLiIKK21zZ3N0ciAiIgorIlxuIgorIkhhdGE6IEdlbmVsIGJpciBTSUdJTEwgc2lueWFsaXlsZSBrYXL+/Wxh/v1sZP0uIgorCisjOiBwYXJ0ZWQvdWkuYzoxMDI0Cittc2dpZCAiRXhwZWN0aW5nIGEgcGFydGl0aW9uIG51bWJlci4iCittc2dzdHIgIkJpciBkaXNrIGL2bPxt/CBudW1hcmFz/SBiZWtsZW5peW9yLiIKKworIzogcGFydGVkL3VpLmM6MTAzMworbXNnaWQgIlBhcnRpdGlvbiBkb2Vzbid0IGV4aXN0LiIKK21zZ3N0ciAiRGlzayBi9mz8bfwgeW9rLiIKKworIzogcGFydGVkL3VpLmM6MTA1MworbXNnaWQgIkV4cGVjdGluZyBhIGZpbGUgc3lzdGVtIHR5cGUuIgorbXNnc3RyICJCaXIgZG9zeWEgc2lzdGVtaSB0/HL8IGJla2xlbml5b3IuIgorCisjOiBwYXJ0ZWQvdWkuYzoxMDYwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gZmlsZSBzeXN0ZW0gdHlwZSBcIiVzXCIuIgorbXNnc3RyICJCaWxpbm1leWVuIGRvc3lhIHNpc3RlbWkgdPxy/CBcIiVzXCIuIgorCisjOiBwYXJ0ZWQvdWkuYzoxMDgwCittc2dpZCAiRXhwZWN0aW5nIGEgZGlzayBsYWJlbCB0eXBlLiIKK21zZ3N0ciAiQmlyIGRpc2sgZXRpa2V0aSB0/HL8IGJla2xlbml5b3IuIgorCisjOiBwYXJ0ZWQvdWkuYzoxMTc4Cittc2dpZCAiQ2FuJ3QgY3JlYXRlIGFueSBtb3JlIHBhcnRpdGlvbnMuIgorbXNnc3RyICJCYf5rYSBkaXNrIGL2bPxt/CBvbHX+dHVydWxhbf15b3IuIgorCisjOiBwYXJ0ZWQvdWkuYzoxMTg4Cittc2dpZCAiRXhwZWN0aW5nIGEgcGFydGl0aW9uIHR5cGUuIgorbXNnc3RyICJCaXIgZGlzayBi9mz8bfwgdPxy/CBiZWtsZW5peW9yLiIKKworIzogcGFydGVkL3VpLmM6MTMxNQorbXNnaWQgIm9uIgorbXNnc3RyICJh5/1rIgorCisjOiBwYXJ0ZWQvdWkuYzoxMzE2Cittc2dpZCAib2ZmIgorbXNnc3RyICJrYXBhbP0iCisKKyM6IHBhcnRlZC91aS5jOjE0MzEKK21zZ2lkICJPUFRJT05zOiIKK21zZ3N0ciAiU0XHRU5FS2xlcjoiCisKKyM6IHBhcnRlZC91aS5jOjE0MzYKK21zZ2lkICJDT01NQU5EczoiCittc2dzdHIgIktPTVVUbGFyOiIKKworIzogcGFydGVkL3VpLmM6MTQ0NQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2luZyAlc1xuIgorbXNnc3RyICIlcyBrdWxsYW79bP15b3JcbiIKKworIzogcGFydGVkL3VpLmM6MTUxOQorbXNnaWQgIlRoaXMgY29tbWFuZCBkb2VzIG5vdCBtYWtlIHNlbnNlIGluIG5vbi1pbnRlcmFjdGl2ZSBtb2RlLlxuIgorbXNnc3RyICIiCisKKyN+IG1zZ2lkICJHTlUgUGFydGVkIGNhbm5vdCByZXNpemUgdGhpcyBmaWxlIHN5c3RlbSwgcGxlYXNlIHVzZXJlc2l6ZTJmcy4iCisjfiBtc2dzdHIgIiIKKyN+ICJHTlUgUGFydGVkIGJ1IGRvc3lhIHNpc3RlbWluaSB5ZW5pZGVuIGJveXV0bGFuZP1yYW39eW9yLCBs/HRmZW4gcmVzaXplMmZzICIKKyN+ICJrdWxsYW79bi4iCisKKyN+IG1zZ2lkICJ3aGVyZSBuZWNlc3NhcnksIHByb21wdHMgZm9yIHVzZXIgaW50ZXJ2ZW50aW9uIgorI34gbXNnc3RyICJ6b3J1bmx1IG9sZHXwdW5kYSwga3VsbGFu/WP9IG38ZGFoYWxlc2kgaedpbiBpc3RlbWRlIGJ1bHVudXIiCisKKyN+IG1zZ2lkICJHTlUgUGFydGVkIFZlcnNpb24gaW5mb3JtYXRpb246XG4iCisjfiBtc2dzdHIgIkdOVSBQYXJ0ZWQgU/xy/G0gYmlsZ2lzaTpcbiIKKworI34gbXNnaWQgIiIKKyN+ICJwcmludCBbZnJlZXxOVU1CRVJ8YWxsXSAgICAgICAgICAgICAgICAgIGRpc3BsYXkgdGhlIHBhcnRpdGlvbiB0YWJsZSwgYSAiCisjfiAicGFydGl0aW9uLCBvciBhbGwgZGV2aWNlcyIKKyN+IG1zZ3N0ciAiIgorI34gInByaW50IFtmcmVlfE5VTUJFUnxhbGxdICAgICAgICAgICAgICAgICAgICBiaXIgZGlzayBi9mz8bfwsIHRhYmxvc3UgeWEgZGEgIgorI34gInT8bSBheWf9dGxhcv0gZ/Zy/G50/GxlIgorCisjfiBtc2dpZCAiIgorI34gIldpdGhvdXQgYXJndW1lbnRzLCBwcmludCBkaXNwbGF5cyB0aGUgZW50aXJlIHBhcnRpdGlvbiB0YWJsZS4gV2l0aCAiCisjfiAiJ2ZyZWUnXG4iCisjfiAiYXJndW1lbnQsIGluZm9ybWF0aW9uIGFib3V0IGZyZWUgc3BhY2Ugd2lsbCBiZSBkaXNwbGF5ZWQgb3RoZXJ3aXNlIGlmIGFcbiIKKyN+ICJwYXJ0aXRpb24gbnVtYmVyIGlzIGdpdmVuLCB0aGVuIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gaXMgZGlzcGxheWVkXG4iCisjfiAiYWJvdXQgdGhhdCBwYXJ0aXRpb24uIElmIHRoZSAnYWxsJyBhcmd1bWVudCBpcyBwYXNzZWQgaW5zdGVhZCwgcGFydGl0aW9uXG4iCisjfiAiaW5mb3JtYXRpb24gZm9yIGFsbCBkZXZpY2VzIHdpbGwgYmUgZGlzcGxheWVkLlxuIgorI34gbXNnc3RyICIiCisjfiAiQXJn/G1hbnP9eiBrdWxsYW79bGT98P1uZGEgeWF6ZP1yLCB0/G0gZGlzayBi9mz8bfwgdGFibG9zdW51IGf2cvxudPxsZXIuICIKKyN+ICInZnJlZScgYXJn/G1hbv15bGFcbiIKKyN+ICJib/4gYWxhbiBoYWtr/W5kYWtpIGJpbGdpIGf2cvxudPxsZW5pciwgeWEgZGEgZfBlclxuIgorI34gImJpciBkaXNrIGL2bPxt/CBudW1hcmFz/SB2ZXJpbGlyc2UsIG8gZGlzayBi9mz8bfwgaGFra/1uZGEgZGFoYSBheXL9bnT9bP0gIgorI34gImJpbGdpIGf2cvxudPxsZW5pci5cbiIKKyN+ICJF8GVyICdhbGwnIGFyZ/xtYW79IGt1bGxhbv1s/XJzYSB0/G0gYXln/XRsYXL9biBi9mz8bWxlbWUgYmlsZ2lzaSAiCisjfiAiZ/Zy/G50/GxlbmVjZWt0aXIuXG4iCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvcG8vdWsuZ21vIGIvcGFydGVkLTEuOC43L3BvL3VrLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmViOWVmCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L3BvL3VrLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvcG8vdWsucG8gYi9wYXJ0ZWQtMS44LjcvcG8vdWsucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg5ZmJhZAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9wby91ay5wbwpAQCAtMCwwICsxLDMyNDkgQEAKKyMgVWtyYWluaWFuIHRyYW5zbGF0aW9uIHRvIHBhcnRlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBNYXhpbSBWLiBEeml1bWFuZW5rbyA8ZHppdW1hbmVua29AZ21haWwuY29tPiwgMjAwNC0yMDA2LgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogcGFydGVkIDEuOC4xXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGJ1Zy1wYXJ0ZWRAZ251Lm9yZ1xuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDA3LTA1LTA5IDE3OjAyLTA0MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDA2LTEyLTI3IDEwOjA3KzAyMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IE1heGltIFYuIER6aXVtYW5lbmtvIDxkeml1bWFuZW5rb0BnbWFpbC5jb20+XG4iCisiTGFuZ3VhZ2UtVGVhbTogVWtyYWluaWFuIDx0cmFuc2xhdGlvbi10ZWFtLXVrQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKworIzogbGliL2Nsb3Nlb3V0LmM6NzQKK21zZ2lkICJ3cml0ZSBlcnJvciIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXJyb3IuYzoxMjUKKyMsIGZ1enp5Cittc2dpZCAiVW5rbm93biBzeXN0ZW0gZXJyb3IiCittc2dzdHIgItCd0LXQstGW0LTQvtC80LjQuSDRgtC40L8g0YTQsNC50LvQvtCy0L7RlyDRgdC40YHRgtC10LzQuCBcIiVzXCIuIgorCisjOiBsaWIvZ2V0b3B0LmM6NTMxIGxpYi9nZXRvcHQuYzo1NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiBgJXMnIGlzIGFtYmlndW91c1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo1ODAgbGliL2dldG9wdC5jOjU4NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIGAtLSVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjU5MyBsaWIvZ2V0b3B0LmM6NTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYCVjJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6NjQxIGxpYi9nZXRvcHQuYzo2NjAgbGliL2dldG9wdC5jOjk3NiBsaWIvZ2V0b3B0LmM6OTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYCVzJyByZXF1aXJlcyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo2OTggbGliL2dldG9wdC5jOjcwMQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5yZWNvZ25pemVkIG9wdGlvbiBgLS0lcydcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6NzA5IGxpYi9nZXRvcHQuYzo3MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVucmVjb2duaXplZCBvcHRpb24gYCVjJXMnXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjc2NCBsaWIvZ2V0b3B0LmM6NzY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbGxlZ2FsIG9wdGlvbiAtLSAlY1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo3NzMgbGliL2dldG9wdC5jOjc3NgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBvcHRpb24gLS0gJWNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6ODI4IGxpYi9nZXRvcHQuYzo4NDQgbGliL2dldG9wdC5jOjEwNDggbGliL2dldG9wdC5jOjEwNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCAtLSAlY1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo4OTcgbGliL2dldG9wdC5jOjkxMworIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIGAtVyAlcycgaXMgYW1iaWd1b3VzXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjkzNyBsaWIvZ2V0b3B0LmM6OTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYC1XICVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6CisjLiBHZXQgdHJhbnNsYXRpb25zIGZvciBvcGVuIGFuZCBjbG9zaW5nIHF1b3RhdGlvbiBtYXJrcy4KKyMuCisjLiBUaGUgbWVzc2FnZSBjYXRhbG9nIHNob3VsZCB0cmFuc2xhdGUgImAiIHRvIGEgbGVmdAorIy4gcXVvdGF0aW9uIG1hcmsgc3VpdGFibGUgZm9yIHRoZSBsb2NhbGUsIGFuZCBzaW1pbGFybHkgZm9yCisjLiAiJyIuICBJZiB0aGUgY2F0YWxvZyBoYXMgbm8gdHJhbnNsYXRpb24sCisjLiBsb2NhbGVfcXVvdGluZ19zdHlsZSBxdW90ZXMgYGxpa2UgdGhpcycsIGFuZAorIy4gY2xvY2FsZV9xdW90aW5nX3N0eWxlIHF1b3RlcyAibGlrZSB0aGlzIi4KKyMuCisjLiBGb3IgZXhhbXBsZSwgYW4gQW1lcmljYW4gRW5nbGlzaCBVbmljb2RlIGxvY2FsZSBzaG91bGQKKyMuIHRyYW5zbGF0ZSAiYCIgdG8gVSsyMDFDIChMRUZUIERPVUJMRSBRVU9UQVRJT04gTUFSSyksIGFuZAorIy4gc2hvdWxkIHRyYW5zbGF0ZSAiJyIgdG8gVSsyMDFEIChSSUdIVCBET1VCTEUgUVVPVEFUSU9OCisjLiBNQVJLKS4gIEEgQnJpdGlzaCBFbmdsaXNoIFVuaWNvZGUgbG9jYWxlIHNob3VsZCBpbnN0ZWFkCisjLiB0cmFuc2xhdGUgdGhlc2UgdG8gVSsyMDE4IChMRUZUIFNJTkdMRSBRVU9UQVRJT04gTUFSSykgYW5kCisjLiBVKzIwMTkgKFJJR0hUIFNJTkdMRSBRVU9UQVRJT04gTUFSSyksIHJlc3BlY3RpdmVseS4KKyMuCisjLiBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIHB1dCBoZXJlLCBwbGVhc2Ugc2VlCisjLiA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9RdW90YXRpb25fbWFyayNHbHlwaHM+CisjLiBhbmQgdXNlIGdseXBocyBzdWl0YWJsZSBmb3IgeW91ciBsYW5ndWFnZS4KKyM6IGxpYi9xdW90ZWFyZy5jOjIyOQorbXNnaWQgImAiCittc2dzdHIgIiIKKworIzogbGliL3F1b3RlYXJnLmM6MjMwCittc2dpZCAiJyIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjEzMQorbXNnaWQgIlN1Y2Nlc3MiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxMzQKK21zZ2lkICJObyBtYXRjaCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjEzNworbXNnaWQgIkludmFsaWQgcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTQwCittc2dpZCAiSW52YWxpZCBjb2xsYXRpb24gY2hhcmFjdGVyIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTQzCittc2dpZCAiSW52YWxpZCBjaGFyYWN0ZXIgY2xhc3MgbmFtZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE0NgorbXNnaWQgIlRyYWlsaW5nIGJhY2tzbGFzaCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE0OQorbXNnaWQgIkludmFsaWQgYmFjayByZWZlcmVuY2UiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNTIKK21zZ2lkICJVbm1hdGNoZWQgWyBvciBbXiIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE1NQorbXNnaWQgIlVubWF0Y2hlZCAoIG9yIFxcKCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE1OAorbXNnaWQgIlVubWF0Y2hlZCBcXHsiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNjEKK21zZ2lkICJJbnZhbGlkIGNvbnRlbnQgb2YgXFx7XFx9IgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTY0CisjLCBmdXp6eQorbXNnaWQgIkludmFsaWQgcmFuZ2UgZW5kIgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70YzQvdC1INGH0LjRgdC70L4uIgorCisjOiBsaWIvcmVnY29tcC5jOjE2NworbXNnaWQgIk1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNzAKK21zZ2lkICJJbnZhbGlkIHByZWNlZGluZyByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNzMKK21zZ2lkICJQcmVtYXR1cmUgZW5kIG9mIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE3NgorbXNnaWQgIlJlZ3VsYXIgZXhwcmVzc2lvbiB0b28gYmlnIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTc5Cittc2dpZCAiVW5tYXRjaGVkICkgb3IgXFwpIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6NjgwCittc2dpZCAiTm8gcHJldmlvdXMgcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9ycG1hdGNoLmM6NzAKK21zZ2lkICJeW3lZXSIKK21zZ3N0ciAiIgorCisjOiBsaWIvcnBtYXRjaC5jOjczCittc2dpZCAiXltuTl0iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IFRyYW5zbGF0ZSAiKEMpIiB0byB0aGUgY29weXJpZ2h0IHN5bWJvbAorIy4gKEMtaW4tYS1jaXJjbGUpLCBpZiB0aGlzIHN5bWJvbCBpcyBhdmFpbGFibGUgaW4gdGhlIHVzZXIncworIy4gbG9jYWxlLiAgT3RoZXJ3aXNlLCBkbyBub3QgdHJhbnNsYXRlICIoQykiOyBsZWF2ZSBpdCBhcy1pcy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjY2Cittc2dpZCAiKEMpIgorbXNnc3RyICIiCisKKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjY4Cittc2dpZCAiIgorIlxuIgorIkxpY2Vuc2UgR1BMdjIrOiBHTlUgR1BMIHZlcnNpb24gMiBvciBsYXRlciA8aHR0cDovL2dudS5vcmcvbGljZW5zZXMvZ3BsLiIKKyJodG1sPlxuIgorIlRoaXMgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGFyZSBmcmVlIHRvIGNoYW5nZSBhbmQgcmVkaXN0cmlidXRlIGl0LlxuIgorIlRoZXJlIGlzIE5PIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXcuXG4iCisiXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6ICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJXcml0dGVuIGJ5ICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzo4OAorIywgYy1mb3JtYXQKK21zZ2lkICJXcml0dGVuIGJ5ICVzIGFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIzogbGliL3ZlcnNpb24tZXRjLmM6OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiV3JpdHRlbiBieSAlcywgJXMsIGFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorImFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzoxMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyIlcywgYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjLiBZb3UgY2FuIHVzZSBsaW5lIGJyZWFrcywgZXN0aW1hdGluZyB0aGF0IGVhY2ggYXV0aG9yIG5hbWUgb2NjdXBpZXMKKyMuIGNhLiAxNiBzY3JlZW4gY29sdW1ucyBhbmQgdGhhdCBhIHNjcmVlbiBsaW5lIGhhcyBjYS4gODAgY29sdW1ucy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorIiVzLCAlcywgYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjLiBZb3UgY2FuIHVzZSBsaW5lIGJyZWFrcywgZXN0aW1hdGluZyB0aGF0IGVhY2ggYXV0aG9yIG5hbWUgb2NjdXBpZXMKKyMuIGNhLiAxNiBzY3JlZW4gY29sdW1ucyBhbmQgdGhhdCBhIHNjcmVlbiBsaW5lIGhhcyBjYS4gODAgY29sdW1ucy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjExNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorIiVzLCAlcywgJXMsIGFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzoxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyIlcywgJXMsICVzLCAlcyxcbiIKKyJhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6MTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiJXMsICVzLCAlcywgJXMsXG4iCisiJXMsIGFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzoxNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyIlcywgJXMsICVzLCAlcyxcbiIKKyIlcywgJXMsIGFuZCBvdGhlcnMuXG4iCittc2dzdHIgIiIKKworIzogbGliL3hhbGxvYy1kaWUuYzozNQorbXNnaWQgIm1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjIzNworbXNnaWQgIkRpc2sgSW1hZ2UiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjMzOCBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzoyNjEKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTI3MgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBvcGVuaW5nICVzOiAlcyIKK21zZ3N0ciAi0J/QvtC80LjQu9C60LAg0LLRltC00LrRgNC40LLQsNC90L3RjyAlczogJXMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzozNDkgbGlicGFydGVkL2FyY2gvZ251LmM6MjcxCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjEyODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIG9wZW4gJXMgcmVhZC13cml0ZSAoJXMpLiAgJXMgaGFzIGJlZW4gb3BlbmVkIHJlYWQtb25seS4iCittc2dzdHIgIiIKKyLQndC1INCy0LTQsNGU0YLRjNGB0Y8g0LLRltC00LrRgNC40YLQuCAlcyDQtNC70Y8g0YfQuNGC0LDQvdC90Y8t0LfQsNC/0LjRgdGDICglcykuICVzINCy0ZbQtNC60YDQuNGC0L4g0YMg0YDQtdC20LjQvNGWINC70LjRiNC1LSIKKyLRh9C40YLQsNC90L3Rjy4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzo0MTEgbGlicGFydGVkL2FyY2gvbGludXguYzoxNDMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGR1cmluZyBzZWVrIGZvciByZWFkIG9uICVzIgorbXNnc3RyICIlcyDQv9GA0Lgg0LLRgdGC0LDQvdC+0LLQu9C10L3QvdGWINC/0L7Qt9C40YbRltGXINC00LvRjyDRh9C40YLQsNC90L3RjyDQvdCwICVzIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6NDQ0IGxpYnBhcnRlZC9hcmNoL2dudS5jOjQ0OSBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo1NDgKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjY3NiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjEzOTEKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkdXJpbmcgcmVhZCBvbiAlcyIKK21zZ3N0ciAiJXMg0L/RgNC4INGH0LjRgtCw0L3QvdGWINC3ICVzIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6NDgwIGxpYnBhcnRlZC9hcmNoL2dudS5jOjUwOQorIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxNTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbid0IHdyaXRlIHRvICVzLCBiZWNhdXNlIGl0IGlzIG9wZW5lZCByZWFkLW9ubHkuIgorbXNnc3RyICLQndC1INCy0LTQsNGU0YLRjNGB0Y8g0LfQsNC/0LjRgdCw0YLQuCDQvdCwICVzLCDRgtC+0LzRgyDRidC+INCy0ZbQvSDQstGW0LTQutGA0LjRgtC40Lkg0LvQuNGI0LUg0LTQu9GPINGH0LjRgtCw0L3QvdGPLiIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjQ5NiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjE1NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZHVyaW5nIHNlZWsgZm9yIHdyaXRlIG9uICVzIgorbXNnc3RyICIlcyDQv9GA0Lgg0LLRgdGC0LDQvdC+0LLQu9C10L3QvdGWINC/0L7Qt9C40YbRltGXINC00LvRjyDQt9Cw0L/QuNGB0YMg0L3QsCAlcyIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjUzMyBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo1ODUgbGlicGFydGVkL2FyY2gvZ251LmM6NjMwCisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo3MDcgbGlicGFydGVkL2FyY2gvbGludXguYzoxNTE3CisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjE2MTIgbGlicGFydGVkL2FyY2gvbGludXguYzoxNjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGR1cmluZyB3cml0ZSBvbiAlcyIKK21zZ3N0ciAiJXMg0L/RgNC4INC30LDQv9C40YHRliDQvdCwICVzIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjYzIHBhcnRwcm9iZS9wYXJ0cHJvYmUuYzoxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5IGAlcyAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbT1BUSU9OXVxuIgorIiAgb3I6ICAlcyBERVZJQ0UgTUlOT1JcbiIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjcwCittc2dpZCAiIgorIkNsZWFyIHVudXNlZCBzcGFjZSBvbiBhIEZBVCBwYXJ0aXRpb24gKGEgR05VIFBhcnRlZCB0ZXN0aW5nIHRvb2wpLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6NzQKK21zZ2lkICIgICAgICAtLWhlbHAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0XG4iCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo3NQorbXNnaWQgIiAgICAgIC0tdmVyc2lvbiAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXRcbiIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjc3IHBhcnRwcm9iZS9wYXJ0cHJvYmUuYzoxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlJlcG9ydCBidWdzIHRvIDwlcz4uXG4iCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzoyODUKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIGZldyBhcmd1bWVudHMiCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzoyOTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyIKK21zZ3N0ciAi0J3QsNC00YLQviDQsdCw0LPQsNGC0L4g0L/QvtGI0LrQvtC00LbQtdC90LjRhSDRgdGC0L7RgNGW0L3QvtC6LiIKKworIzogcGFydHByb2JlL3BhcnRwcm9iZS5jOjE0MQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgW09QVElPTl0gW0RFVklDRV0uLi5cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0cHJvYmUvcGFydHByb2JlLmM6MTQyCittc2dpZCAiIgorIkluZm9ybSB0aGUgT1Mgb2YgcGFydGl0aW9uIHRhYmxlIGNoYW5nZXMuXG4iCisiXG4iCisiICAtZCwgLS1uby11cGRhdGUgIGRvbid0IHVwZGF0ZSB0aGUga2VybmVsXG4iCisiICAtcywgLS1zdW1tYXJ5ICAgIHByaW50IGEgc3VtbWFyeSBvZiBjb250ZW50c1xuIgorIiAgLWgsIC0taGVscCAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdFxuIgorIiAgLXYsIC0tdmVyc2lvbiAgICBvdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdFxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRwcm9iZS9wYXJ0cHJvYmUuYzoxNTAKK21zZ2lkICIiCisiXG4iCisiV2l0aCBubyBERVZJQ0UsIHByb2JlIGFsbCBwYXJ0aXRpb25zLlxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBvcGVuICVzLiIKK21zZ3N0ciAi0J3QtSDQstC00LDRlNGC0YzRgdGPINCy0ZbQtNC60YDQuNGC0LggJXMuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzoxMTQKK21zZ2lkICJVbmFibGUgdG8gcHJvYmUgc3RvcmUuIgorbXNnc3RyICLQndC1INCy0LTQsNGU0YLRjNGB0Y8g0LLQuNC30L3QsNGH0LjRgtC4INGB0YXQvtCy0LjRidC1LiIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6MzUyCittc2dpZCAiIgorIlRoZSBwYXJ0aXRpb24gdGFibGUgY2Fubm90IGJlIHJlLXJlYWQuICBUaGlzIG1lYW5zIHlvdSBuZWVkIHRvIHJlYm9vdCBiZWZvcmUgIgorIm1vdW50aW5nIGFueSBtb2RpZmllZCBwYXJ0aXRpb25zLiAgWW91IGFsc28gbmVlZCB0byByZWluc3RhbGwgeW91ciBib290ICIKKyJsb2FkZXIgYmVmb3JlIHlvdSByZWJvb3QgKHdoaWNoIG1heSByZXF1aXJlIG1vdW50aW5nIG1vZGlmaWVkIHBhcnRpdGlvbnMpLiAgIgorIkl0IGlzIGltcG9zc2libGUgZG8gYm90aCB0aGluZ3MhICBTbyB5b3UnbGwgbmVlZCB0byBib290IG9mZiBhIHJlc2N1ZSBkaXNrLCAiCisiYW5kIHJlaW5zdGFsbCB5b3VyIGJvb3QgbG9hZGVyIGZyb20gdGhlIHJlc2N1ZSBkaXNrLiAgUmVhZCBzZWN0aW9uIDQgb2YgdGhlICIKKyJQYXJ0ZWQgVXNlciBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiIgorItCd0LUg0LLQtNCw0ZTRgtGM0YHRjyDQv9C10YDQtdGH0LjRgtCw0YLQuCDRgtCw0LHQu9C40YbRjiDRgNC+0LfQtNGW0LvRltCyLCDRgdC70ZbQtCDQv9C10YDQtdC30LDQstCw0L3RgtCw0LbQuNGC0LjRgdGMINC/0LXRgNGIINC90ZbQtiAiCisi0L/RltC00LrQu9GO0YfQsNGC0Lgg0LfQvNGW0L3QtdC90ZYg0YDQvtC30LTRltC70LguINCi0LDQutC+0LYg0L/QtdGA0LXQtCDQv9C10YDQtdC30LDQstCw0L3RgtCw0LbQtdC90L3Rj9C8INC90LXQvtCx0YXRltC00L3QviAiCisi0L/QtdGA0LXQstGB0YLQsNC90L7QstC40YLQuCDQt9Cw0LLQsNC90YLQsNC20YPQstCw0YcgKNGJ0L4g0LLQuNC80LDQs9Cw0ZQg0L/RltC00LrQu9GO0YfQtdC90L3RjyDQt9C80ZbQvdC10L3QuNGFINGA0L7Qt9C00ZbQu9GW0LIpLiAiCisi0J3QtdC80L7QttC70LjQstC+INCy0LjQutC+0L3QsNGC0Lgg0L7QtNC90L7Rh9Cw0YHQvdC+INC+0LHQuNC00LLRliDQtNGW0ZchINCi0L7QvNGDINGB0LvRltC0INC30LDQstCw0L3RgtCw0LbQuNGC0LjRgdGMINC3ICIKKyLQt9Cw0LLQsNC90YLQsNC20YPQstCw0LvRjNC90L7Qs9C+INC00LjRgdC60YMsINGC0LAg0L/QtdGA0LXQstGB0YLQsNC90L7QstC40YLQuCDQt9Cw0LLQsNC90YLQsNC20YPQstCw0YcuINCU0L7QtNCw0YLQutC+0LLRgyAiCisi0ZbQvdGE0L7RgNC80LDRhtGW0Y4g0LfQvdCw0LnQtNC10YLQtSDRgyDRgNC+0LfQtNGW0LvRliA0INC00L7QutGD0LzQtdC90YLQsNGG0ZbRlyDQtyBQYXJ0ZWQuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzozNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBwYXJ0aXRpb24gdGFibGUgb24gJXMgY2Fubm90IGJlIHJlLXJlYWQgKCVzKS4gIFRoaXMgbWVhbnMgdGhlIEh1cmQga25vd3MgIgorIm5vdGhpbmcgYWJvdXQgYW55IG1vZGlmaWNhdGlvbnMgeW91IG1hZGUuICBZb3Ugc2hvdWxkIHJlYm9vdCB5b3VyIGNvbXB1dGVyICIKKyJiZWZvcmUgZG9pbmcgYW55dGhpbmcgd2l0aCAlcy4iCittc2dzdHIgIiIKKyLQotCw0LHQu9C40YbRjiDRgNC+0LfQtNGW0LvRltCyINC90LAgJXMg0L3QtSDQstC00LDRlNGC0YzRgdGPINC/0LXRgNC10YfQuNGC0LDRgtC4ICglcykuINCm0LUg0L7Qt9C90LDRh9Cw0ZQsINGJ0L4gSHVyZCAiCisi0L3RltGH0L7Qs9C+INC90LUg0LfQvdCw0ZQg0L/RgNC+INCy0L3QtdGB0LXQvdGWINCy0LDQvNC4INC30LzRltC90LguINCd0LXQvtCx0YXRltC00L3QviDQv9C10YDQtdC30LDQstCw0L3RgtCw0LbQuNGC0Lgg0LLQsNGIICIKKyLQutC+0LzQvyfRjtGC0LXRgCDQv9C10YDQtdC0INCy0LjQutC+0L3QsNC90L3Rj9C8INCx0YPQtNGMLdGP0LrQuNGFINC00ZbQuSDQtyAlcy4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjM4MCBwYXJ0ZWQvcGFydGVkLmM6MjQ0MworbXNnaWQgIiIKKyJZb3Ugc2hvdWxkIHJlaW5zdGFsbCB5b3VyIGJvb3QgbG9hZGVyIGJlZm9yZSByZWJvb3RpbmcuICBSZWFkIHNlY3Rpb24gNCBvZiAiCisidGhlIFBhcnRlZCBVc2VyIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorbXNnc3RyICIiCisi0J3QtdC+0LHRhdGW0LTQvdC+INC/0LXRgNC10LLRgdGC0LDQvdC+0LLQuNGC0Lgg0LLQsNGIINC30LDQstCw0L3RgtCw0LbRg9Cy0LDRhyDQv9C10YDQtdC0INC/0LXRgNC10LfQsNCy0LDQvdGC0LDQttC10L3QvdGP0LwuINCU0L7QtNCw0YLQutC+0LLRgyAiCisi0ZbQvdGE0L7RgNC80LDRhtGW0Y4g0LfQvdCw0LnQtNC10YLQtSDRgyDRgNC+0LfQtNGW0LvRliA0INC00L7QutGD0LzQtdC90YLQsNGG0ZbRlyDQtyBQYXJ0ZWQuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo3NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdHJ5aW5nIHRvIHN5bmMgJXMgdG8gZGlzayIKK21zZ3N0ciAiJXMg0L/RgNC4INGB0L/RgNC+0LHRliDRgdC40L3RhdGA0L7QvdGW0LfQsNGG0ZbRlyAlcyDQvdCwINC00LjRgdC6IgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjQwOAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc3RhdCBkZXZpY2UgJXMgLSAlcy4iCittc2dzdHIgItCd0LUg0LLQtNCw0ZTRgtGM0YHRjyDQvtGC0YDQuNC80LDRgtC4INGB0YLQsNGC0YPRgSDQv9GA0LjRgdGC0YDQvtGOICVzIC0gJXMuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjUyMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGRldGVybWluZSBzZWN0b3Igc2l6ZSBmb3IgJXM6ICVzLlxuIgorIlVzaW5nIHRoZSBkZWZhdWx0IHNlY3RvciBzaXplICglbGxkKS4iCittc2dzdHIgIiIKKyLQndC1INCy0LTQsNGU0YLRjNGB0Y8g0LLQuNC30L3QsNGH0LjRgtC4INGA0L7Qt9C80ZbRgCDRgdC10LrRgtC+0YDRgyDQtNC70Y8gJXM6ICVzLlxuIgorItCS0LjQutC+0YDQuNGB0YLQvtCy0YPRlNGC0YzRgdGPINGC0LjQv9C+0LLQuNC5INGA0L7Qt9C80ZbRgCDRgdC10LrRgtC+0YDRgyAoJWxsZCkuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjUzOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRGV2aWNlICVzIGhhcyBhIGxvZ2ljYWwgc2VjdG9yIHNpemUgb2YgJWxsZC4gIE5vdCBhbGwgcGFydHMgb2YgR05VIFBhcnRlZCAiCisic3VwcG9ydCB0aGlzIGF0IHRoZSBtb21lbnQsIGFuZCB0aGUgd29ya2luZyBjb2RlIGlzIEhJR0hMWSBFWFBFUklNRU5UQUwuXG4iCittc2dzdHIgIiIKKyLQoNC+0LfQvNGW0YAg0LvQvtCz0ZbRh9C90L7Qs9C+INGB0LXQutGC0L7RgNGDINC00LvRjyAlcyDRgdC60LvQsNC00LDRlCAlbGxkLiDQndCw0YDQsNC30ZYg0L3QtSDQstGB0ZYg0LrQvtC80L/QvtC90LXQvdGC0LggR05VICIKKyJQYXJ0ZWQg0YbQtSDQv9GW0LTRgtGA0LjQvNGD0Y7RgtGMLlxuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjU3OQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZGV0ZXJtaW5lIHRoZSBzaXplIG9mICVzICglcykuIgorbXNnc3RyICLQndC1INCy0LTQsNGU0YLRjNGB0Y8g0LLQuNC30L3QsNGH0LjRgtC4INGA0L7Qt9C80ZbRgCAlcyAoJXMpLiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo2NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGdldCBpZGVudGl0eSBvZiBkZXZpY2UgJXMgLSAlcyIKK21zZ3N0ciAi0J3QtSDQstC00LDRlNGC0YzRgdGPINC+0YLRgNC40LzQsNGC0Lgg0ZbQtNC10L3RgtC40YTRltC60LDRgtC+0YAg0L/RgNC40YHRgtGA0L7RjiAlcyAtICVzIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjY3NworbXNnaWQgIkdlbmVyaWMgSURFIgorbXNnc3RyICLQl9Cw0LPQsNC70YzQvdC40LkgSURFIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRGV2aWNlICVzIGhhcyBtdWx0aXBsZSAoJWQpIGxvZ2ljYWwgc2VjdG9ycyBwZXIgcGh5c2ljYWwgc2VjdG9yLlxuIgorIkdOVSBQYXJ0ZWQgc3VwcG9ydHMgdGhpcyBFWFBFUklNRU5UQUxMWSBmb3Igc29tZSBzcGVjaWFsIGRpc2sgbGFiZWwvZmlsZSAiCisic3lzdGVtIGNvbWJpbmF0aW9ucywgZS5nLiBHUFQgYW5kIGV4dDIvMy5cbiIKKyJQbGVhc2UgY29uc3VsdCB0aGUgd2ViIHNpdGUgZm9yIHVwLXRvLWRhdGUgaW5mb3JtYXRpb24uIgorbXNnc3RyICIiCisi0J/RgNC40YHRgtGA0ZbQuSAlcyDQvNCw0ZQg0LTQtdC60ZbQu9GM0LrQsCAoJWQpINC70L7Qs9GW0YfQvdC40YUg0YHQtdGA0LLQtdGA0ZbQsiDQvdCwINGE0ZbQt9C40YfQvdC40Lkg0YHQtdC60YLQvtGALlxuIgorItCf0ZbQtNGC0YDQuNC80LrQsCDRhtGM0L7Qs9C+INGDIEdOVSBQYXJ0ZWQg0ZQg0JXQmtCh0J/QldCg0JjQnNCV0J3QotCQ0JvQrNCd0J7QriDQtNC70Y8g0LTQtdGP0LrQuNGFINGB0L/QtdGG0ZbQsNC70YzQvdC40YUgIgorItC60L7QvNCx0ZbQvdCw0YbRltC5ICDQv9C+0LfQvdCw0YfQutCwINC00LjRgdC60YMv0YTQsNC50LvQvtCy0LAg0YHQuNGB0YLQtdC80LAsINC90LDQv9GA0LjQutC70LDQtC4gR1BUINGC0LAgZXh0Mi8zLlxuIgorItCU0L7QtNCw0YLQutC+0LLRgyDRltC90YTQvtGA0LzQsNGG0ZbRjiDRiNGD0LrQsNC50YLQtSDQvdCwINCy0LXQsS3RgdCw0LnRgtGWLiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo4NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgaW5pdGlhbGlzaW5nIFNDU0kgZGV2aWNlICVzIC0gJXMiCittc2dzdHIgItCf0L7QvNC40LvQutCwINGW0L3RltGG0ZbQsNC70ZbQt9Cw0YbRltGXIFNDU0kg0L/RgNC40YHRgtGA0L7RjiAlcyAtICVzIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjkyOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGRldmljZSAlcyBoYXMgemVybyBsZW5ndGgsIGFuZCBjYW4ndCBwb3NzaWJseSBzdG9yZSBhIGZpbGUgc3lzdGVtIG9yICIKKyJwYXJ0aXRpb24gdGFibGUuICBQZXJoYXBzIHlvdSBzZWxlY3RlZCB0aGUgd3JvbmcgZGV2aWNlPyIKK21zZ3N0ciAiIgorItCf0YDQuNGB0YLRgNGW0LkgJXMg0LzQsNGUINC90YPQu9GM0L7QstGDINC00L7QstC20LjQvdGDLCDRgtCwINC90LXQv9GA0LjQtNCw0YLQvdC40Lkg0LTQu9GPINGA0L7Qt9C80ZbRidC10L3QvdGPINGE0LDQudC70L7QstC+0ZcgIgorItGB0LjRgdGC0LXQvNC4INGH0Lgg0YLQsNCx0LvQuNGG0ZYg0YDQvtC30LTRltC70ZbQsi4g0JzQvtC20LvQuNCy0L4g0LLQuCDQstC40LHRgNCw0LvQuCDQvdC10L/RgNCw0LLQuNC70YzQvdC40Lkg0L/RgNC40YHRgtGA0ZbQuT8iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTAzMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVW5hYmxlIHRvIGRldGVybWluZSBnZW9tZXRyeSBvZiBmaWxlL2RldmljZSAlcy4gIFlvdSBzaG91bGQgbm90IHVzZSBQYXJ0ZWQgIgorInVubGVzcyB5b3UgUkVBTExZIGtub3cgd2hhdCB5b3UncmUgZG9pbmchIgorbXNnc3RyICIiCisi0J3QtSDQstC00LDRlNGC0YzRgdGPINCy0LjQt9C90LDRh9C40YLQuCDQs9C10L7QvNC10YLRgNGW0Y4g0YTQsNC50LvRgy/Qv9GA0LjRgdGC0YDQvtGOICVzLiDQndC1INGB0LvRltC0INCy0LjQutC+0YDQuNGB0YLQvtCy0YPQstCw0YLQuCAiCisiUGFydGVkLCDRhdGW0LHQsC3RidC+INCy0Lgg0JTQhtCZ0KHQndCeINC30L3QsNGU0YLQtSwg0YnQviDQstC4INGA0L7QsdC40YLQtSEiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTExMAorbXNnaWQgIkRBQzk2MCBSQUlEIGNvbnRyb2xsZXIiCittc2dzdHIgIkRBQzk2MCBSQUlEINC60L7QvdGC0YDQvtC70LXRgCIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTE1Cittc2dpZCAiUHJvbWlzZSBTWDggU0FUQSBEZXZpY2UiCittc2dzdHIgItCf0YDQuNGB0YLRgNGW0LkgUHJvbWlzZSBTWDggU0FUQSIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTIwCittc2dpZCAiSUJNIFMzOTAgREFTRCBkcml2ZSIKK21zZ3N0ciAi0J/RgNC40YHRgtGA0ZbQuSBJQk0gUzM5MCBEQVNEIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExMjUKK21zZ2lkICJJQk0gaVNlcmllcyBWaXJ0dWFsIERBU0QiCittc2dzdHIgIklCTSBpU2VyaWVzIFZpcnR1YWwgREFTRCIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTMwCittc2dpZCAiQ29tcGFxIFNtYXJ0IEFycmF5IgorbXNnc3RyICJDb21wYXEgU21hcnQgQXJyYXkiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTEzNQorbXNnaWQgIkFUQVJBSUQgQ29udHJvbGxlciIKK21zZ3N0ciAiQVRBUkFJRCDQutC+0L3RgtGA0L7Qu9C10YAiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTE0MAorbXNnaWQgIkkyTyBDb250cm9sbGVyIgorbXNnc3RyICJJMk8g0LrQvtC90YLRgNC+0LvQtdGAIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExNDUKK21zZ2lkICJVc2VyLU1vZGUgTGludXggVUJEIgorbXNnc3RyICJVc2VyLU1vZGUgTGludXggVUJEIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExNTYKK21zZ2lkICJMaW51eCBkZXZpY2UtbWFwcGVyIgorbXNnc3RyICJMaW51eCBkZXZpY2UtbWFwcGVyIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExNjIKK21zZ2lkICJVbmtub3duIgorbXNnc3RyICLQndC10LLRltC00L7QvNC40LkiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTE2OQorbXNnaWQgInBlZF9kZXZpY2VfbmV3KCkgIFVuc3VwcG9ydGVkIGRldmljZSB0eXBlIgorbXNnc3RyICJwZWRfZGV2aWNlX25ldygpINGC0LjQvyDQv9GA0LjRgdGC0YDQvtGOINC90LUg0L/RltC00YLRgNC40LzRg9GU0YLRjNGB0Y8iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MjA4MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRXJyb3IgaW5mb3JtaW5nIHRoZSBrZXJuZWwgYWJvdXQgbW9kaWZpY2F0aW9ucyB0byBwYXJ0aXRpb24gJXMgLS0gJXMuICBUaGlzICIKKyJtZWFucyBMaW51eCB3b24ndCBrbm93IGFib3V0IGFueSBjaGFuZ2VzIHlvdSBtYWRlIHRvICVzIHVudGlsIHlvdSByZWJvb3QgLS0gIgorInNvIHlvdSBzaG91bGRuJ3QgbW91bnQgaXQgb3IgdXNlIGl0IGluIGFueSB3YXkgYmVmb3JlIHJlYm9vdGluZy4iCittc2dzdHIgIiIKKyLQn9C+0LzQuNC70LrQsCDRgdC/0L7QstGW0YnQtdC90L3RjyDRj9C00YDQsCDQv9GA0L4g0LfQvNGW0L3QuCDRgyDRgNC+0LfQtNGW0LvRliAlcyAtLSAlcy4g0KbQtSDQvtC30L3QsNGH0LDRlCwg0YnQviBMaW51eCAiCisi0L3QtSDQstGA0LDRhdC+0LLRg9Cy0LDRgtC40LzQtSDQstC90LXRgdC10L3RliDRgyAlcyDQt9C80ZbQvdC4INC00L4g0L/QtdGA0LXQt9Cw0LLQsNC90YLQsNC20LXQvdC90Y8gLSDRgtC+0LzRgyDQtNC+ICIKKyLQv9C10YDQtdC30LDQstCw0L3RgtCw0LbQtdC90L3RjyDQvdC1INGB0LvRltC0INC/0ZbQtNC60LvRjtGH0LDRgtC4INGA0L7Qt9C00ZbQuyDRh9C4INCy0LjQutC+0YDQuNGB0YLQvtCy0YPQstCw0YLQuCDQsdGD0LTRjC3Rj9C60LjQvCAiCisi0ZbQvdGI0LjQvCDRh9C40L3QvtC8LiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoyMjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJwYXJ0ZWQgd2FzIHVuYWJsZSB0byByZS1yZWFkIHRoZSBwYXJ0aXRpb24gdGFibGUgb24gJXMgKCVzKS4gIFRoaXMgbWVhbnMgIgorIkxpbnV4IHdvbid0IGtub3cgYW55dGhpbmcgYWJvdXQgdGhlIG1vZGlmaWNhdGlvbnMgeW91IG1hZGUuICIKK21zZ3N0ciAiIgorInBhcnRlZCDQvdC1INC80L7QttC1INC/0LXRgNC10YfQuNGC0LDRgtC4INGC0LDQsdC70LjRhtGOINGA0L7Qt9C00ZbQu9GW0LIg0L3QsCAlcyAoJXMpLiDQptC1INC+0LfQvdCw0YfQsNGULCDRidC+IExpbnV4ICIKKyLQvdC1INCy0YDQsNGF0L7QstGD0LLQsNGC0LjQvNC1INCy0L3QtdGB0LXQvdGWINC30LzRltC90LguIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjIzNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBrZXJuZWwgd2FzIHVuYWJsZSB0byByZS1yZWFkIHRoZSBwYXJ0aXRpb24gdGFibGUgb24gJXMgKCVzKS4gIFRoaXMgbWVhbnMgIgorIkxpbnV4IHdvbid0IGtub3cgYW55dGhpbmcgYWJvdXQgdGhlIG1vZGlmaWNhdGlvbnMgeW91IG1hZGUgdW50aWwgeW91ICIKKyJyZWJvb3QuICBZb3Ugc2hvdWxkIHJlYm9vdCB5b3VyIGNvbXB1dGVyIGJlZm9yZSBkb2luZyBhbnl0aGluZyB3aXRoICVzLiIKK21zZ3N0ciAiIgorItCv0LTRgNC+INC90LUg0LzQvtC20LUg0L/QtdGA0LXRh9C40YLQsNGC0Lgg0YLQsNCx0LvQuNGG0Y4g0YDQvtC30LTRltC70ZbQsiDQvdCwICVzICglcykuINCm0LUg0L7Qt9C90LDRh9Cw0ZQsINGJ0L4gTGludXgg0L3QtSAiCisi0LLRgNCw0YXQvtCy0YPQstCw0YLQuNC80LUg0LLQvdC10YHQtdC90ZYg0LfQvNGW0L3QuCDQtNC+INC/0LXRgNC10LfQsNCy0LDQvdGC0LDQttC10L3QvdGPLiDQndC10L7QsdGF0ZbQtNC90L4g0L/QtdGA0LXQt9Cw0LLQsNC90YLQsNC20LjRgtC4ICIKKyLQstCw0Ygg0LrQvtC80L8n0Y7RgtC10YAg0L/QtdGA0Ygg0L3RltC2INGP0LrQvtGB0Ywg0LLQuNC60L7RgNC40YHRgtC+0LLRg9Cy0LDRgtC4ICVzLiIKKworIzogbGlicGFydGVkL2NzL2dlb20uYzoxNjIKK21zZ2lkICJDYW4ndCBoYXZlIHRoZSBlbmQgYmVmb3JlIHRoZSBzdGFydCEiCittc2dzdHIgItCd0LXQv9GA0LjQv9GD0YHRgtC40LzQviwg0YnQvtCxINC60ZbQvdC10YbRjCDRgNC+0LfQtNGW0LvRgyDQsdGD0LIg0L/QtdGA0LXQtCDQv9C+0YfQsNGC0LrQvtC8ISIKKworIzogbGlicGFydGVkL2NzL2dlb20uYzoxNjkKK21zZ2lkICJDYW4ndCBoYXZlIGEgcGFydGl0aW9uIG91dHNpZGUgdGhlIGRpc2shIgorbXNnc3RyICLQndC10L/RgNC40L/Rg9GB0YLQuNC80L4sINGJ0L7QsSDRgNC+0LfQtNGW0Lsg0LLQuNGF0L7QtNC40LIg0LfQsCDQvNC10LbRliDQtNC40YHQutGDISIKKworIzogbGlicGFydGVkL2NzL2dlb20uYzozNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXR0ZW1wdCB0byB3cml0ZSBzZWN0b3JzICVsZC0lbGQgb3V0c2lkZSBvZiBwYXJ0aXRpb24gb24gJXMuIgorbXNnc3RyICLQodC/0YDQvtCx0LAg0LfQsNC/0LjRgdCw0YLQuCDRgdC10LrRgtC+0YDQuCAlbGQtJWxkINC30LAg0LzQtdC20LDQvNC4INGA0L7Qt9C00ZbQu9GDINC90LAgJXMuIgorCisjOiBsaWJwYXJ0ZWQvY3MvZ2VvbS5jOjQwNiBsaWJwYXJ0ZWQvZnMvbGludXhfc3dhcC9saW51eF9zd2FwLmM6NDc1Cittc2dpZCAiY2hlY2tpbmcgZm9yIGJhZCBibG9ja3MiCittc2dzdHIgItC/0L7RiNGD0Log0L/QvtGI0LrQvtC00LbQtdC90LjRhSDQsdC70L7QutGW0LIiCisKKyM6IGxpYnBhcnRlZC9kZWJ1Zy5jOjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWNrdHJhY2UgaGFzICVkIGNhbGxzIG9uIHN0YWNrOlxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9kZWJ1Zy5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJBc3NlcnRpb24gKCVzKSBhdCAlczolZCBpbiBmdW5jdGlvbiAlcygpIGZhaWxlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIG9wZW4gJXMgLSB1bnJlY29nbmlzZWQgZGlzayBsYWJlbC4iCittc2dzdHIgItCd0LUg0LLQtNCw0ZTRgtGM0YHRjyDQstGW0LTQutGA0LjRgtC4ICVzIC0g0L3QtdGA0L7Qt9C/0ZbQt9C90LDQvdCwINC10YLQuNC60LXRgtC60LAg0LTQuNGB0LrQsC4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6NDcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGlzIGxpYnBhcnRlZCBkb2Vzbid0IGhhdmUgd3JpdGUgc3VwcG9ydCBmb3IgJXMuICBQZXJoYXBzIGl0IHdhcyBjb21waWxlZCAiCisicmVhZC1vbmx5LiIKK21zZ3N0ciAiIgorItCm0Y8g0LLQtdGA0YHRltGPIGxpYnBhcnRlZCDQvdC1INC/0ZbQtNGC0YDQuNC80YPRlCDQt9Cw0L/QuNGBINC90LAgJXMuINCc0L7QttC70LjQstC+INC/0YDQvtCz0YDQsNC80YMg0LfRltCx0YDQsNC90L4g0LcgIgorItC/0ZbQtNGC0YDQuNC80LrQvtGOINC70LjRiNC1INC00LvRjyDRh9C40YLQsNC90L3Rjy4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6NTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhcnRpdGlvbiAlZCBpcyAlcywgYnV0IHRoZSBmaWxlIHN5c3RlbSBpcyAlcy4iCittc2dzdHIgItCg0L7Qt9C80ZbRgCAlZCAlcywg0LDQu9C1INGE0LDQudC70L7QstCwINGB0LjRgdGC0LXQvNCwICVzLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxMDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGRpc2sgbGFiZWxzIGRvIG5vdCBzdXBwb3J0IGV4dGVuZGVkIHBhcnRpdGlvbnMuIgorbXNnc3RyICIlcyDQtdGC0LjQutC10YLQutC4INC00LjRgdC60ZbQsiDQtNC70Y8g0YDQvtC30YjQuNGA0LXQvdC40YUg0YDQvtC30LTRltC70ZbQsiDQvdC1INC/0ZbQtNGC0YDQuNC80YPRjtGC0YzRgdGPLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGRpc2sgbGFiZWxzIGRvbid0IHN1cHBvcnQgbG9naWNhbCBvciBleHRlbmRlZCBwYXJ0aXRpb25zLiIKK21zZ3N0ciAiIgorIiVzINC10YLQuNC60LXRgtC60Lgg0LTQuNGB0LrRltCyINC00LvRjyDQu9C+0LPRltGH0L3QuNGFINCw0LHQviDRgNC+0LfRiNC40YDQtdC90LjRhSDRgNC+0LfQtNGW0LvRltCyINC90LUg0L/RltC00YLRgNC40LzRg9GO0YLRjNGB0Y8uIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE2NDcKK21zZ2lkICJUb28gbWFueSBwcmltYXJ5IHBhcnRpdGlvbnMuIgorbXNnc3RyICLQl9Cw0L3QsNC00YLQviDQsdCw0LPQsNGC0L4g0L7RgdC90L7QstC90LjRhSDRgNC+0LfQtNGW0LvRltCyLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW4ndCBhZGQgYSBsb2dpY2FsIHBhcnRpdGlvbiB0byAlcywgYmVjYXVzZSB0aGVyZSBpcyBubyBleHRlbmRlZCBwYXJ0aXRpb24uIgorbXNnc3RyICIiCisi0J3QtSDQstC00LDRlNGC0YzRgdGPINC00L7QtNCw0YLQuCDQu9C+0LPRltGH0L3QuNC5INGA0L7Qt9C00ZbQuyDQtNC+ICVzLCDRgtC+0LzRgyDRidC+INC90LXQvNCw0ZQg0YDQvtC30YjQuNGA0LXQvdC+0LPQviDRgNC+0LfQtNGW0LvRgy4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTY4MAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW4ndCBoYXZlIG1vcmUgdGhhbiBvbmUgZXh0ZW5kZWQgcGFydGl0aW9uIG9uICVzLiIKK21zZ3N0ciAi0J3QtSDQvNC+0LbQvdCwINC80LDRgtC4INCx0ZbQu9GM0YjQtSDQvtC00L3QvtCz0L4g0YDQvtC30YjQuNGA0LXQvdC+0LPQviDRgNC+0LfQtNGW0LvRgyDQvdCwICVzLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNjkwCittc2dpZCAiQ2FuJ3QgaGF2ZSBsb2dpY2FsIHBhcnRpdGlvbnMgb3V0c2lkZSBvZiB0aGUgZXh0ZW5kZWQgcGFydGl0aW9uLiIKK21zZ3N0ciAi0J3QtSDQstC00LDRlNGC0YzRgdGPINGA0L7Qt9GI0LjRgNC40YLQuCDQu9C+0LPRltGH0L3QuNC5INGA0L7Qt9C00ZbQuyDQt9CwINC80LXQttGWINGA0L7Qt9GI0LjRgNC10L3QvtCz0L4g0YDQvtC30LTRltC70YMuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE3MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2FuJ3QgaGF2ZSBhIGxvZ2ljYWwgcGFydGl0aW9uIG91dHNpZGUgb2YgdGhlIGV4dGVuZGVkIHBhcnRpdGlvbiBvbiAlcy4iCittc2dzdHIgIiIKKyLQndC1INCy0LTQsNGU0YLRjNGB0Y8g0YDQvtC30YjQuNGA0LjRgtC4INC70L7Qs9GW0YfQvdC40Lkg0YDQvtC30LTRltC7INC30LAg0LzQtdC20ZYg0YDQvtC30YjQuNGA0LXQvdC+0LPQviDRgNC+0LfQtNGW0LvRgyDQvdCwICVzLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNzI1IGxpYnBhcnRlZC9kaXNrLmM6MTc3OSBsaWJwYXJ0ZWQvZGlzay5jOjE5NDUKK21zZ2lkICJDYW4ndCBoYXZlIG92ZXJsYXBwaW5nIHBhcnRpdGlvbnMuIgorbXNnc3RyICLQndC1INC80L7QttC90LAg0LzQsNGC0Lgg0YDQvtC30LTRltC70LgsINGP0LrRliDQv9C10YDQtdC60YDQuNCy0LDRjtGC0YzRgdGPLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNzMzCittc2dpZCAiQ2FuJ3QgaGF2ZSBhIHByaW1hcnkgcGFydGl0aW9uIGluc2lkZSBhbiBleHRlbmRlZCBwYXJ0aXRpb24uIgorbXNnc3RyICLQndC1INC80L7QttC90LAg0LTQvtC00LDQstCw0YLQuCDQvtGB0L3QvtCy0L3QuNC5INGA0L7Qt9C00ZbQuyDRgyDRgNC+0LfRiNC40YDQtdC90LjQuSDRgNC+0LfQtNGW0LsuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNDAKK21zZ2lkICJtZXRhZGF0YSIKK21zZ3N0ciAi0LzQtdGC0LDQtNCw0L3RliIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTQyCittc2dpZCAiZnJlZSIKK21zZ3N0ciAi0LLRltC70YzQvdC+IgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNDQgcGFydGVkL3VpLmM6MTE2OSBwYXJ0ZWQvdWkuYzoxMTk3Cittc2dpZCAiZXh0ZW5kZWQiCittc2dzdHIgItGA0L7Qt9GI0LjRgNC10L3QuNC5IgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNDYgcGFydGVkL3VpLmM6MTE3MyBwYXJ0ZWQvdWkuYzoxMjAxCittc2dpZCAibG9naWNhbCIKK21zZ3N0ciAi0LvQvtCz0ZbRh9C90LjQuSIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTQ4IHBhcnRlZC91aS5jOjExNjUgcGFydGVkL3VpLmM6MTE5MworbXNnaWQgInByaW1hcnkiCittc2dzdHIgItC+0YHQvdC+0LLQvdC40LkiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE2NAorbXNnaWQgImJvb3QiCittc2dzdHIgImJvb3QiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE2NgorbXNnaWQgInJvb3QiCittc2dzdHIgItC60L7RgNC10L3QtdCy0LjQuSIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTY4Cittc2dpZCAic3dhcCIKK21zZ3N0ciAic3dhcCIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTcwCittc2dpZCAiaGlkZGVuIgorbXNnc3RyICLRgdGF0L7QstCw0L3QuNC5IgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNzIKK21zZ2lkICJyYWlkIgorbXNnc3RyICJyYWlkIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNzQKK21zZ2lkICJsdm0iCittc2dzdHIgImx2bSIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTc2Cittc2dpZCAibGJhIgorbXNnc3RyICJsYmEiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE3OAorbXNnaWQgImhwLXNlcnZpY2UiCittc2dzdHIgImhwLdGB0LXRgNCy0ZbRgSIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTgwCittc2dpZCAicGFsbyIKK21zZ3N0ciAicGFsbyIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTgyCittc2dpZCAicHJlcCIKK21zZ3N0ciAicHJlcCIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTg0Cittc2dpZCAibXNmdHJlcyIKK21zZ3N0ciAibXNmdHJlcyIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gcGFydGl0aW9uIGZsYWcsICVkLiIKK21zZ3N0ciAi0J3QtdCy0ZbQtNC+0LzQsCDQvtC30L3QsNC60LAg0YDQvtC30LTRltC70YMsICVkLiIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjc4Cittc2dpZCAiSW5mb3JtYXRpb24iCittc2dzdHIgItCG0L3RhNC+0YDQvNCw0YbRltGPIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6NzkKK21zZ2lkICJXYXJuaW5nIgorbXNnc3RyICLQn9C+0L/QtdGA0LXQtNC20LXQvdC90Y8iCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4MAorbXNnaWQgIkVycm9yIgorbXNnc3RyICLQn9C+0LzQuNC70LrQsCIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjgxCittc2dpZCAiRmF0YWwiCittc2dzdHIgItCa0YDQuNGC0LjRh9C90LAg0L/QvtC80LjQu9C60LAiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4MgorbXNnaWQgIkJ1ZyIKK21zZ3N0ciAi0J/QvtC80LjQu9C60LAiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4MworbXNnaWQgIk5vIEltcGxlbWVudGF0aW9uIgorbXNnc3RyICLQndC1INGA0LXQsNC70ZbQt9C+0LLQsNC90L4iCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4NworbXNnaWQgIkZpeCIKK21zZ3N0ciAi0JLQuNC/0YDQsNCy0LjRgtC4IgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODgKK21zZ2lkICJZZXMiCittc2dzdHIgItCi0LDQuiIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjg5Cittc2dpZCAiTm8iCittc2dzdHIgItCd0ZYiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo5MAorbXNnaWQgIk9LIgorbXNnc3RyICLQk9Cw0YDQsNC30LQiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo5MQorbXNnaWQgIlJldHJ5IgorbXNnc3RyICLQn9C+0LLRgtC+0YDQuNGC0LgiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo5MgorbXNnaWQgIklnbm9yZSIKK21zZ3N0ciAi0IbQs9C90L7RgNGD0LLQsNGC0LgiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo5MworbXNnaWQgIkNhbmNlbCIKK21zZ3N0ciAi0KHQutCw0YHRg9Cy0LDRgtC4IgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBIGJ1ZyBoYXMgYmVlbiBkZXRlY3RlZCBpbiBHTlUgUGFydGVkLiAgUmVmZXIgdG8gdGhlIHdlYiBzaXRlIG9mIHBhcnRlZCAiCisiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3BhcnRlZC9wYXJ0ZWQuaHRtbCBmb3IgbW9yZSBpbmZvcm1hdGlvbnMgb2Ygd2hhdCAiCisiY291bGQgYmUgdXNlZnVsIGZvciBidWcgc3VibWl0dGluZyEgIFBsZWFzZSBlbWFpbCBhIGJ1ZyByZXBvcnQgdG8gYnVnLSIKKyJwYXJ0ZWRAZ251Lm9yZyBjb250YWluaW5nIGF0IGxlYXN0IHRoZSB2ZXJzaW9uICglcykgYW5kIHRoZSBmb2xsb3dpbmcgIgorIm1lc3NhZ2U6ICAiCittc2dzdHIgIiIKKyLQoyBHTlUgcGFydGVkINCy0LjQvdC40LrQu9CwINC/0L7QvNC40LvQutCwLiDQndCwINCy0LXQsS3RgdCw0LnRgtGWIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS8iCisicGFydGVkL3BhcnRlZC5odG1sINC00LjQstGW0YLRjNGB0Y8g0ZbQvdGE0L7RgNC80LDRhtGW0Y4g0YHRgtC+0YHQvtCy0L3QviDQt9Cy0ZbRgtGW0LIg0L/RgNC+INC/0L7QvNC40LvQutC4LiDQkdGD0LTRjCAiCisi0LvQsNGB0LrQsCwg0LLRltC00L/RgNCw0LLRgtC1INC/0L7QstGW0LTQvtC80LvQtdC90L3RjyDQv9GA0L4g0L/QvtC80LjQu9C60YMg0LfQsCDQsNC00YDQtdGB0L7RjiBidWctcGFydGVkQGdudS5vcmcsINC90LUgIgorItC30LDQsdGD0LTRjNGC0LUg0LLQutCw0LfQsNGC0Lgg0LLQtdGA0YHRltGOICglcykg0YLQsCDQvdCw0YHRgtGD0L/QvdC1INC/0L7QstGW0LTQvtC80LvQtdC90L3RjzoiCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6Mzg0Cittc2dpZCAiQ291bGQgbm90IGRldGVjdCBmaWxlIHN5c3RlbS4iCittc2dzdHIgItCd0LUg0LLQtNCw0ZTRgtGM0YHRjyDQstC40Y/QstC40YLQuCDRhNCw0LnQu9C+0LLRgyDRgdC40YHRgtC10LzRgy4iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6Mzk1Cittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIGlzIGJpZ2dlciB0aGFuIGl0cyB2b2x1bWUhIgorbXNnc3RyICLQpNCw0LnQu9C+0LLQsCDRgdC40YHRgtC10LzQsCDQsdGW0LvRjNGI0LAg0L3RltC2INGC0L7QvCEiCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NDAzCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnQgZm9yIG9wZW5pbmcgJXMgZmlsZSBzeXN0ZW1zIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICLQn9GW0LTRgtGA0LjQvNC60LAg0LLRltC00LrRgNC40LLQsNC90L3RjyAlcyDRhNCw0LnQu9C+0LLQuNGFINGB0LjRgdGC0LXQvCDRidC1INC90LUg0YDQtdCw0LvRltC30L7QstCw0L3QsC4iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnQgZm9yIGNyZWF0aW5nICVzIGZpbGUgc3lzdGVtcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAi0J/RltC00YLRgNC40LzQutCwINGB0YLQstC+0YDQtdC90L3RjyAlcyDRhNCw0LnQu9C+0LLQuNGFINGB0LjRgdGC0LXQvCDRidC1INC90LUg0YDQtdCw0LvRltC30L7QstCw0L3QsC4iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnQgZm9yIGNoZWNraW5nICVzIGZpbGUgc3lzdGVtcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAi0J/RltC00YLRgNC40LzQutCwINC/0LXRgNC10LLRltGA0LrQuCAlcyDRhNCw0LnQu9C+0LLQuNGFINGB0LjRgdGC0LXQvCDRidC1INC90LUg0YDQtdCw0LvRltC30L7QstCw0L3QsC4iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NTcxCittc2dpZCAicmF3IGJsb2NrIGNvcHlpbmciCittc2dzdHIgItC60L7Qv9GW0Y7QstCw0L3QvdGPINCx0LvQvtC60ZbQsiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo1ODIKK21zZ2lkICJncm93aW5nIGZpbGUgc3lzdGVtIgorbXNnc3RyICLRgNC+0LfRiNC40YDQtdC90L3RjyDRhNCw0LnQu9C+0LLQvtGXINGB0LjRgdGC0LXQvNC4IgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjYyMgorbXNnaWQgIkNhbid0IGNvcHkgb250byBhbiBvdmVybGFwcGluZyBwYXJ0aXRpb24uIgorbXNnc3RyICLQndC1INC80L7QttC90LAg0LrQvtC/0ZbRjtCy0LDRgtC4INC90LAg0YDQvtC30LTRltC70LgsINGJ0L4g0L/QtdGA0LXQutGA0LjQstCw0Y7RgtGM0YHRjy4iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJEaXJlY3Qgc3VwcG9ydCBmb3IgY29weWluZyBmaWxlIHN5c3RlbXMgaXMgbm90IHlldCBpbXBsZW1lbnRlZCBmb3IgJXMuICAiCisiSG93ZXZlciwgc3VwcG9ydCBmb3IgcmVzaXppbmcgaXMgaW1wbGVtZW50ZWQuICBUaGVyZWZvcmUsIHRoZSBmaWxlIHN5c3RlbSAiCisiY2FuIGJlIGNvcGllZCBpZiB0aGUgbmV3IHBhcnRpdGlvbiBpcyBhdCBsZWFzdCBhcyBiaWcgYXMgdGhlIG9sZCBvbmUuICBTbywgIgorImVpdGhlciBzaHJpbmsgdGhlIHBhcnRpdGlvbiB5b3UgYXJlIHRyeWluZyB0byBjb3B5LCBvciBjb3B5IHRvIGEgYmlnZ2VyICIKKyJwYXJ0aXRpb24uIgorbXNnc3RyICIiCisi0JHQtdC30L/QvtGB0LXRgNC10LTQvdGPINC/0ZbQtNGC0YDQuNC80LrQsCDRhNCw0LnQu9C+0LLQuNGFINGB0LjRgdGC0LXQvCDRidC1INC90LUg0YDQtdCw0LvRltC30L7QstCw0L3QsCDQtNC70Y8gJXMuINCQ0LvQtSwgIgorItGA0LXQsNC70ZbQt9C+0LLQsNC90LAg0L/RltC00YLRgNC40LzQutCwINC30LzRltC90Lgg0YDQvtC30LzRltGA0YMuINCi0LDQutC40Lwg0YfQuNC90L7QvCDRhNCw0LnQu9C+0LLRgyDRgdC40YHRgtC10LzRgyDQvNC+0LbQvdCwICIKKyLRgdC60L7Qv9GW0Y7QstCw0YLQuCDQvdCwINC90L7QstC40Lkg0YDQvtC30LTRltC7INCx0ZbQu9GM0YjQvtCz0L4g0YDQvtC30LzRltGA0YMg0L3RltC2INGW0YHQvdGD0Y7Rh9C40LkuINCi0L7QvNGDINCw0LHQviDQt9C80LXQvdGI0ZbRgtGMICIKKyLRgNC+0LfQtNGW0LssINGP0LrQuNC5INCy0Lgg0L3QsNC80LDQs9Cw0ZTRgtC10YHRjCDRgdC60L7Qv9GW0Y7QstCw0YLQuCwg0LDQsdC+INC60L7Qv9GW0Y7QudGC0LUg0L3QsCDQsdGW0LvRjNGI0LjQuSDRgNC+0LfQtNGW0LsuIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjY1OAorIywgYy1mb3JtYXQKK21zZ2lkICJTdXBwb3J0IGZvciBjb3B5aW5nICVzIGZpbGUgc3lzdGVtcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAi0J/RltC00YLRgNC40LzQutCwINC60L7Qv9GW0Y7QstCw0L3QvdGPINGE0LDQudC70L7QstC40YUg0YHQuNGB0YLQtdC8INGC0LjQv9GDICVzINGJ0LUg0L3QtSDQv9GW0LTRgtGA0LjQvNGD0ZTRgtGM0YHRjy4iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6Njk2CisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnQgZm9yIHJlc2l6aW5nICVzIGZpbGUgc3lzdGVtcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAi0J/RltC00YLRgNC40LzQutCwINC30LzRltC90Lgg0YDQvtC30LzRltGA0YMg0YTQsNC50LvQvtCy0LjRhSDRgdC40YHRgtC10Lwg0YLQuNC/0YMgJXMg0YnQtSDQvdC1INC/0ZbQtNGC0YDQuNC80YPRlNGC0YzRgdGPLiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6MzE1Cittc2dpZCAiY3JlYXRpbmciCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDAyCisjLCBmdXp6eQorbXNnaWQgIlRoZSBmaWxlIHN5c3RlbSBpcyBpbiBhbiBpbnZhbGlkIHN0YXRlLiAgUGVyaGFwcyBpdCBpcyBtb3VudGVkPyIKK21zZ3N0ciAi0KTQsNC50LvQvtCy0LAg0YHQuNGB0YLQtdC80LAg0LHRltC70YzRiNCwINC90ZbQtiDRgtC+0LwhIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0MTAKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gaXMgaW4gb2xkICh1bnJlc2l6ZWFibGUpIGZvcm1hdC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDE2Cittc2dpZCAiSW52YWxpZCBmcmVlIGJsb2NrcyBjb3VudC4gIFJ1biByZWlzZXJmc2NrIC0tY2hlY2sgZmlyc3QuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQzMQorIywgZnV6enkKK21zZ2lkICJjaGVja2luZyIKK21zZ3N0ciAiY2hlY2siCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQzNworbXNnaWQgIlJlaXNlcmZzIHRyZWUgc2VlbXMgdG8gYmUgY29ycnVwdGVkLiAgUnVuIHJlaXNlcmZzY2sgLS1jaGVjayBmaXJzdC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDQ5CisjLCBmdXp6eQorbXNnaWQgIiIKKyJUaGUgcmVpc2VyZnMgZmlsZSBzeXN0ZW0gcGFzc2VkIGEgYmFzaWMgY2hlY2suICBGb3IgYSBtb3JlIGNvbXByZWhlbnNpdmUgIgorImNoZWNrLCBydW4gcmVpc2VyZnNjayAtLWNoZWNrLiIKK21zZ3N0ciAiIgorItCk0LDQudC70L7QstCwINGB0LjRgdGC0LXQvNCwIGV4dDIg0L/RgNC+0LnRiNC70LAg0LfQsNCz0LDQu9GM0L3RgyDQv9C10YDQtdCy0ZbRgNC60YMuINCU0LvRjyDQsdGW0LvRjNGIINC00L7QutC70LDQtNC90L7RlyAiCisi0L/QtdGA0LXQstGW0YDQutC4INC60L7RgNC40YHRgtGD0LnRgtC10YHRjCDQv9GA0L7Qs9GA0LDQvNC+0Y4gZTJmc2NrLiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDc0CisjLCBmdXp6eQorbXNnaWQgIlNvcnJ5LCBjYW4ndCBtb3ZlIHRoZSBzdGFydCBvZiByZWlzZXJmcyBwYXJ0aXRpb25zIHlldC4iCittc2dzdHIgItCd0LDQttCw0LvRjCwg0L/QtdGA0LXQvNGW0YnQtdC90L3RjyDQv9C+0YfQsNGC0LrRgyDRgNC+0LfQtNGW0LvRltCyINGC0LjQv9GDIGV4dDIg0YnQtSDQvdC1INC/0ZbQtNGC0YDQuNC80YPRlNGC0YzRgdGPISIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDkwCittc2dpZCAiQ291bGRuJ3QgcmVvcGVuIGRldmljZSBhYnN0cmFjdGlvbiBsYXllciBmb3IgcmVhZC93cml0ZS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NTA4IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NTUyCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjI1MCBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjYyOQorbXNnaWQgInNocmlua2luZyIKK21zZ3N0ciAi0YHQutC+0YDQvtGH0LXQvdC90Y8iCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjUyMAorIywgZnV6enkKK21zZ2lkICJleHBhbmRpbmciCittc2dzdHIgItCf0L7Qv9C10YDQtdC00LbQtdC90L3RjyIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NTkyCittc2dpZCAiQ291bGRuJ3QgY3JlYXRlIHJlaXNlcmZzIGRldmljZSBhYnN0cmFjdGlvbiBoYW5kbGVyLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo2MDYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkRldmljZSBpcyB0b28gc21hbGwgZm9yICVsdSBibG9ja3MuIgorbXNnc3RyICLQpNCw0LnQu9C+0LLQsCDRgdC40YHRgtC10LzQsCDQt9Cw0L3QsNC00YLQviDQvNCw0LvQtdC90YzQutCwINC00LvRjyBleHQyLiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NjE1Cittc2dpZCAiY29weWluZyIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo2ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgcmVzb2x2ZSBzeW1ib2wgJXMuICBFcnJvcjogJXMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjcwNAorbXNnaWQgIkdOVSBQYXJ0ZWQgZm91bmQgYW4gaW52YWxpZCBsaWJyZWlzZXJmcyBsaWJyYXJ5LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo3MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkdOVSBQYXJ0ZWQgaGFzIGRldGVjdGVkIGxpYnJlaXNlcmZzIGludGVyZmFjZSB2ZXJzaW9uIG1pc21hdGNoLiAgRm91bmQgJWQtJSIKKyJkLCByZXF1aXJlZCAlZC4gUmVpc2VyRlMgc3VwcG9ydCB3aWxsIGJlIGRpc2FibGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2FpeC5jOjEzNworIywgZnV6enkKK21zZ2lkICJTdXBwb3J0IGZvciByZWFkaW5nIEFJWCBkaXNrIGxhYmVscyBpcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAi0J/RltC00YLRgNC40LzQutCwINGB0YLQstC+0YDQtdC90L3RjyAlcyDRhNCw0LnQu9C+0LLQuNGFINGB0LjRgdGC0LXQvCDRidC1INC90LUg0YDQtdCw0LvRltC30L7QstCw0L3QsC4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYWl4LmM6MTQ4CisjLCBmdXp6eQorbXNnaWQgIlN1cHBvcnQgZm9yIHdyaXRpbmcgQUlYIGRpc2sgbGFiZWxzIGlzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICLQn9GW0LTRgtGA0LjQvNC60LAg0YHRgtCy0L7RgNC10L3QvdGPICVzINGE0LDQudC70L7QstC40YUg0YHQuNGB0YLQtdC8INGJ0LUg0L3QtSDRgNC10LDQu9GW0LfQvtCy0LDQvdCwLiIKKworIzogbGlicGFydGVkL2xhYmVscy9haXguYzoxNjEKKyMsIGZ1enp5Cittc2dpZCAiIgorIlN1cHBvcnQgZm9yIGFkZGluZyBwYXJ0aXRpb25zIHRvIEFJWCBkaXNrIGxhYmVscyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAi0J/RltC00YLRgNC40LzQutCwINGB0YLQstC+0YDQtdC90L3RjyAlcyDRhNCw0LnQu9C+0LLQuNGFINGB0LjRgdGC0LXQvCDRidC1INC90LUg0YDQtdCw0LvRltC30L7QstCw0L3QsC4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYWl4LmM6MTcxCisjLCBmdXp6eQorbXNnaWQgIiIKKyJTdXBwb3J0IGZvciBkdXBsaWNhdGluZyBwYXJ0aXRpb25zIGluIEFJWCBkaXNrIGxhYmVscyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAi0J/RltC00YLRgNC40LzQutCwINGB0YLQstC+0YDQtdC90L3RjyAlcyDRhNCw0LnQu9C+0LLQuNGFINGB0LjRgdGC0LXQvCDRidC1INC90LUg0YDQtdCw0LvRltC30L7QstCw0L3QsC4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYWl4LmM6MTg5CisjLCBmdXp6eQorbXNnaWQgIiIKKyJTdXBwb3J0IGZvciBzZXR0aW5nIHN5c3RlbSB0eXBlIG9mIHBhcnRpdGlvbnMgaW4gQUlYIGRpc2sgbGFiZWxzIGlzIG5vdCAiCisiaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAi0J/RltC00YLRgNC40LzQutCwINGB0YLQstC+0YDQtdC90L3RjyAlcyDRhNCw0LnQu9C+0LLQuNGFINGB0LjRgdGC0LXQvCDRidC1INC90LUg0YDQtdCw0LvRltC30L7QstCw0L3QsC4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYWl4LmM6MTk5CisjLCBmdXp6eQorbXNnaWQgIlN1cHBvcnQgZm9yIHNldHRpbmcgZmxhZ3MgaW4gQUlYIGRpc2sgbGFiZWxzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICLQn9GW0LTRgtGA0LjQvNC60LAg0YHRgtCy0L7RgNC10L3QvdGPICVzINGE0LDQudC70L7QstC40YUg0YHQuNGB0YLQtdC8INGJ0LUg0L3QtSDRgNC10LDQu9GW0LfQvtCy0LDQvdCwLiIKKworIzogbGlicGFydGVkL2xhYmVscy9ic2QuYzo1MDEgbGlicGFydGVkL2xhYmVscy9kYXNkLmM6NzU1CisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rvcy5jOjE5NzQgbGlicGFydGVkL2xhYmVscy9kdmguYzo3NzAKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6MTQ0OCBsaWJwYXJ0ZWQvbGFiZWxzL2xvb3AuYzoyNDgKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6MTQwOCBsaWJwYXJ0ZWQvbGFiZWxzL3BjOTguYzo3NTkKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6MTA0MSBsaWJwYXJ0ZWQvbGFiZWxzL3N1bi5jOjcwNQorbXNnaWQgIlVuYWJsZSB0byBzYXRpc2Z5IGFsbCBjb25zdHJhaW50cyBvbiB0aGUgcGFydGl0aW9uLiIKK21zZ3N0ciAi0J3QtSDQstC00LDRlNGC0YzRgdGPINC30LDQtNC+0LLQvtC70YzQvdC40YLQuCDQstGB0ZYg0L7QsdC80LXQttC10L3QvdGPINC90LAg0YDQvtC30LTRltC7LiIKKworIzogbGlicGFydGVkL2xhYmVscy9ic2QuYzo1MjYKK21zZ2lkICJVbmFibGUgdG8gYWxsb2NhdGUgYSBic2QgZGlza2xhYmVsIHNsb3QuIgorbXNnc3RyICLQndC1INCy0LTQsNGU0YLRjNGB0Y8g0YDQvtC30L/QvtC00ZbQu9C40YLQuCDRgdC70L7RgiBic2Qg0LXRgtC40LrQtdGC0LrQuCDQtNC40YHQutGDLiIKKworIzogbGlicGFydGVkL2xhYmVscy9kYXNkLmM6MTY2CisjLCBmdXp6eQorbXNnaWQgIlVuYWJsZSB0byBkZXRlcm1pbmUgdGhlIGJsb2NrIHNpemUgb2YgdGhpcyBkYXNkIgorbXNnc3RyICLQndC1INCy0LTQsNGU0YLRjNGB0Y8g0LLQuNC30L3QsNGH0LjRgtC4INGA0L7Qt9C80ZbRgCAlcyAoJXMpLiIKKworIzogbGlicGFydGVkL2xhYmVscy9kYXNkLmM6NzgxCisjLCBmdXp6eQorbXNnaWQgIlVuYWJsZSB0byBhbGxvY2F0ZSBhIGRhc2QgZGlza2xhYmVsIHNsb3QiCittc2dzdHIgItCd0LUg0LLQtNCw0ZTRgtGM0YHRjyDRgNC+0LfQv9C+0LTRltC70LjRgtC4INGB0LvQvtGCIGJzZCDQtdGC0LjQutC10YLQutC4INC00LjRgdC60YMuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rvcy5jOjgyNworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHBhcnRpdGlvbiB0YWJsZSBvbiAlcyAtLSB3cm9uZyBzaWduYXR1cmUgJXguIgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70YzQvdCwINGC0LDQsdC70LjRhtGPINGA0L7Qt9C00ZbQu9GW0LIg0L3QsCAlcyAtINC90LXQv9GA0LDQstC40LvRjNC90LAg0YHQuNCz0L3QsNGC0YPRgNCwICV4LiIKKworIzogbGlicGFydGVkL2xhYmVscy9kb3MuYzo4NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBwYXJ0aXRpb24gdGFibGUgLSByZWN1cnNpdmUgcGFydGl0aW9uIG9uICVzLiIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9GM0L3QsCDRgtCw0LHQu9C40YbRjyDRgNC+0LfQtNGW0LvRltCyIC0g0YDQtdC60YPRgNGB0LjQstC90ZYg0YDQvtC30LTRltC70Lgg0L3QsCAlcy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZG9zLmM6MTMxOAorbXNnaWQgIkV4dGVuZGVkIHBhcnRpdGlvbnMgY2Fubm90IGJlIGhpZGRlbiBvbiBtc2RvcyBkaXNrIGxhYmVscy4iCittc2dzdHIgItCg0L7Qt9GI0LjRgNC10L3RliDRgNC+0LfQtNGW0LvQuCDQvdC1INC80L7QttGD0YLRjCDQsdGD0YLQuCDQvdCwINC00LjRgdC60L7QstC40YUg0LXRgtC40LrQtdGC0LrQsNGFIG1zZG9zLiIKKworIzogbGlicGFydGVkL2xhYmVscy9kb3MuYzoxOTU4Cittc2dpZCAiUGFydGVkIGNhbid0IHJlc2l6ZSBwYXJ0aXRpb25zIG1hbmFnZWQgYnkgV2luZG93cyBEeW5hbWljIERpc2suIgorbXNnc3RyICJQYXJ0ZWQg0L3QtSDQvNC+0LbQtSDQt9C80ZbQvdGO0LLQsNGC0Lgg0YDQvtC30LTRltC70LgsINGP0LrRliDRgdGC0LLQvtGA0LXQvdGWIFdpbmRvd3MgRHluYW1pYyBEaXNrLiIKKworIzogbGlicGFydGVkL2xhYmVscy9kdmguYzoxOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIG5vIGV4dGVuZGVkIHBhcnRpdGlvbiAodm9sdW1lIGhlYWRlciBwYXJ0aXRpb24pLiIKK21zZ3N0ciAiJXMg0L3QtSDQvNGW0YHRgtC40YLRjCDRgNC+0LfRiNC40YDQtdC90L7Qs9C+INGA0L7Qt9C00ZbQu9GDICjRgNC+0LfQtNGW0LvRgyDQt9Cw0LPQvtC70L7QstC60ZbQsiDRgtC+0LzRltCyKS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6MzEzCittc2dpZCAiQ2hlY2tzdW0gaXMgd3JvbmcsIGluZGljYXRpbmcgdGhlIHBhcnRpdGlvbiB0YWJsZSBpcyBjb3JydXB0LiIKK21zZ3N0ciAiIgorItCd0LXQv9GA0LDQstC40LvRjNC90LAg0LrQvtC90YLRgNC+0LvRjNC90LAg0YHRg9C80LAsINGG0LUg0L7Qt9C90LDRh9Cw0ZQsINGJ0L4g0YLQsNCx0LvQuNGG0Y8g0YDQvtC30LTRltC70ZbQsiDQv9C+0YjQutC+0LTQttC10L3QsC4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6NjE2Cittc2dpZCAiT25seSBwcmltYXJ5IHBhcnRpdGlvbnMgY2FuIGJlIHJvb3QgcGFydGl0aW9ucy4iCittc2dzdHIgItCb0LjRiNC1INC+0YHQvdC+0LLQvdGWINGA0L7Qt9C00ZbQu9C4INC80L7QttGD0YLRjCDQsdGD0YLQuCDQt9Cw0LLQsNC90YLQsNC20YPQstCw0LvRjNC90LjQvNC4LiIKKworIzogbGlicGFydGVkL2xhYmVscy9kdmguYzo2MzAKK21zZ2lkICJPbmx5IHByaW1hcnkgcGFydGl0aW9ucyBjYW4gYmUgc3dhcCBwYXJ0aXRpb25zLiIKK21zZ3N0ciAi0JvQuNGI0LUg0L7RgdC90L7QstC90ZYg0YDQvtC30LTRltC70Lgg0LzQvtC20YPRgtGMINCx0YPRgtC4INGA0L7Qt9C00ZbQu9Cw0LzQuCDQv9GW0LTQutCw0YfQutC4LiIKKworIzogbGlicGFydGVkL2xhYmVscy9kdmguYzo2NDQKK21zZ2lkICJPbmx5IGxvZ2ljYWwgcGFydGl0aW9ucyBjYW4gYmUgYSBib290IGZpbGUuIgorbXNnc3RyICLQm9C40YjQtSDQu9C+0LPRltGH0L3RliDRgNC+0LfQtNGW0LvQuCDQvNC+0LbRg9GC0Ywg0LHRg9GC0Lgg0LfQsNCy0LDQvdGC0LDQttGD0LLQsNC70YzQvdC40Lwg0YTQsNC50LvQvtC8LiIKKworIzogbGlicGFydGVkL2xhYmVscy9kdmguYzo3MjEKK21zZ2lkICJPbmx5IGxvZ2ljYWwgcGFydGl0aW9ucyAoYm9vdCBmaWxlcykgaGF2ZSBhIG5hbWUuIgorbXNnc3RyICLQm9C40YjQtSDQu9C+0LPRltGH0L3RliDRgNC+0LfQtNGW0LvQuCAo0LfQsNCy0LDQvdGC0LDQttGD0LLQsNC70YzQvdGWINGE0LDQudC70LgpINC80LDRjtGC0Ywg0L3QsNC30LLRgy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6ODEyCittc2dpZCAiVG9vIG1hbnkgcHJpbWFyeSBwYXJ0aXRpb25zIgorbXNnc3RyICLQl9Cw0L3QsNC00YLQviDQsdCw0LPQsNGC0L4g0L7RgdC90L7QstC90LjRhSDRgNC+0LfQtNGW0LvRltCyIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBvcGVuIGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBzZWVrIGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyByZWFkIGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTEzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgd3JpdGUgZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIlcyDQv9GA0Lgg0LfQsNC/0LjRgdGWINC90LAgJXMiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIElPQ1RMIGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBBUEkgdmVyc2lvbiBtaXNtYXRjaFxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgVW5zdXBwb3J0ZWQgZGlzayB0eXBlXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBVbnN1cHBvcnRlZCBkaXNrIGZvcm1hdFxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEzMAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIERpc2sgaW4gdXNlXG4iCisiJXNcbiIKK21zZ3N0ciAi0JTQuNGB0LogJXM6ICVzXG4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIENvbmZpZyBmaWxlIHN5bnRheCBlcnJvclxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgVm9sdW1lIGxhYmVsIGlzIGNvcnJ1cHRlZC5cbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIGEgZGF0YSBzZXQgbmFtZSBpcyBjb3JydXB0ZWQuXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBzcGFjZSBhbGxvY2F0aW9uXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBkZXZpY2UgdmVyaWZpY2F0aW9uIGZhaWxlZFxuIgorIlRoZSBzcGVjaWZpZWQgZGV2aWNlIGlzIG5vdCBhIHZhbGlkIERBU0QgZGV2aWNlXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgRmF0YWwgZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6NDU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBjb250YWlucyBHUFQgc2lnbmF0dXJlcywgaW5kaWNhdGluZyB0aGF0IGl0IGhhcyBhIEdQVCB0YWJsZS4gIEhvd2V2ZXIsIGl0ICIKKyJkb2VzIG5vdCBoYXZlIGEgdmFsaWQgZmFrZSBtc2RvcyBwYXJ0aXRpb24gdGFibGUsIGFzIGl0IHNob3VsZC4gIFBlcmhhcHMgaXQgIgorIndhcyBjb3JydXB0ZWQgLS0gcG9zc2libHkgYnkgYSBwcm9ncmFtIHRoYXQgZG9lc24ndCB1bmRlcnN0YW5kIEdQVCBwYXJ0aXRpb24gIgorInRhYmxlcy4gIE9yIHBlcmhhcHMgeW91IGRlbGV0ZWQgdGhlIEdQVCB0YWJsZSwgYW5kIGFyZSBub3cgdXNpbmcgYW4gbXNkb3MgIgorInBhcnRpdGlvbiB0YWJsZS4gIElzIHRoaXMgYSBHUFQgcGFydGl0aW9uIHRhYmxlPyIKK21zZ3N0ciAiIgorIiVzINC80ZbRgdGC0LjRgtGMIEdQVCDRgdC40LPQvdCw0YLRg9GA0YMsINGG0LUg0L7Qt9C90LDRh9Cw0ZQsINGJ0L4g0LLRltC9INC80ZbRgdGC0LjRgtGMIEdQVCDRgtCw0LHQu9C40YbRji4g0JDQu9C1LCDQstGW0L0gIgorItC90LUg0LzRltGB0YLQuNGC0Ywg0L/RgNCw0LLQuNC70YzQvdC+0Zcg0ZbQvNGW0YLQsNGG0ZbRlyBtc2Rvcy3RgdGD0LzRltGB0L3QvtGXINGC0LDQsdC70LjRhtGWINGA0L7Qt9C00ZbQu9GW0LIsINGF0L7Rh9CwINGWICIKKyLQv9C+0LLQuNC90LXQvSDQvNGW0YHRgtC40YLQuC4g0JzQvtC20LvQuNCy0L4g0LLRltC9INC/0L7RiNC60L7QtNC20LXQvdC40Lkg0L/RgNC+0LPRgNCw0LzQvtGOINGP0LrQsCDQvdC1INGA0L7Qt9GD0LzRltGUIEdQVCAiCisi0YLQsNCx0LvQuNGG0ZYg0YDQvtC30LTRltC70ZbQsi4g0JDQsdC+LCDQvNC+0LbQu9C40LLQviwg0LLQuCDQstC40LTQsNC70LjQu9C4IEdQVCDRgtCw0LHQu9C40YbRjiwg0LAg0YLQtdC/0LXRgCAiCisi0LLQuNC60L7RgNC40YHRgtC+0LLRg9GU0YLQtSBtc2Rvcy3RgdGD0LzRltGB0L3RgyDRgtCw0LHQu9C40YbRjiDRgNC+0LfQtNGW0LvRltCyLiDQndCwINGG0YzQvtC80YMg0YDQvtC30LTRltC70ZYg0ZQgR1BUICIKKyLRgtCw0LHQu9C40YbRjz8iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6NjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9ybWF0IG9mIHRoZSBHUFQgcGFydGl0aW9uIHRhYmxlIGlzIHZlcnNpb24gJXgsIHdoaWNoIGlzIG5ld2VyIHRoYW4gIgorIndoYXQgUGFydGVkIGNhbiByZWNvZ25pc2UuICBQbGVhc2UgdGVsbCB1cyEgIGJ1Zy1wYXJ0ZWRAZ251Lm9yZyIKK21zZ3N0ciAiIgorItCX0L3QsNC50LTQtdC90L4gR1BUINGC0LDQsdC70LjRhtGOINGA0L7Qt9C00ZbQu9GW0LIg0LLQtdGA0YHRltGXICV4LCDRhtGPINCy0LXRgNGB0ZbRjyDRgdGC0LDRgNGI0LAg0L3RltC2INCy0LXRgNGB0ZbRjywg0YnQviAiCisi0L/RltC00YLRgNC40LzRg9GU0YLRjNGB0Y8g0L/RgNC+0LPRgNCw0LzQvtGOIFBhcnRlZC4g0JHRg9C00Ywg0LvQsNGB0LrQsCwg0L/QvtCy0ZbQtNC+0LzRgtC1INC90LDQvCEgYnVnLXBhcnRlZEBnbnUub3JnIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm90IGFsbCBvZiB0aGUgc3BhY2UgYXZhaWxhYmxlIHRvICVzIGFwcGVhcnMgdG8gYmUgdXNlZCwgeW91IGNhbiBmaXggdGhlIEdQVCAiCisidG8gdXNlIGFsbCBvZiB0aGUgc3BhY2UgKGFuIGV4dHJhICVsbHUgYmxvY2tzKSBvciBjb250aW51ZSB3aXRoIHRoZSBjdXJyZW50ICIKKyJzZXR0aW5nPyAiCittc2dzdHIgIiIKKyLQndCwICVzINCy0LjQutC+0YDQuNGB0YLQvtCy0YPRlNGC0YzRgdGPINC90LUg0LLQtdGB0Ywg0LTQvtGB0YLRg9C/0L3QuNC5INC/0YDQvtGB0YLRltGALCDQstC40L/RgNCw0LLQuNGC0LggR1BULCDRidC+0LEgIgorItCy0LjQutC+0YDQuNGB0YLQvtCy0YPQstCw0LLRgdGPINCy0LXRgdGMINC/0YDQvtGB0YLRltGAICjQtNC+0LTQsNGC0LrQvtCy0L4gJWxsdSDQsdC70L7QutGW0LIpINCw0LHQviDQv9GA0L7QtNC+0LLQttC40YLQuCDQtyAiCisi0LLQutCw0LfQsNC90LjQvNC4INC/0LDRgNCw0LzQtdGC0YDQsNC80Lg/LiIKKworIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzo4MjcKK21zZ2lkICIiCisiVGhlIGJhY2t1cCBHUFQgdGFibGUgaXMgbm90IGF0IHRoZSBlbmQgb2YgdGhlIGRpc2ssIGFzIGl0IHNob3VsZCBiZS4gIFRoaXMgIgorIm1pZ2h0IG1lYW4gdGhhdCBhbm90aGVyIG9wZXJhdGluZyBzeXN0ZW0gYmVsaWV2ZXMgdGhlIGRpc2sgaXMgc21hbGxlci4gIEZpeCwgIgorImJ5IG1vdmluZyB0aGUgYmFja3VwIHRvIHRoZSBlbmQgKGFuZCByZW1vdmluZyB0aGUgb2xkIGJhY2t1cCk/IgorbXNnc3RyICIiCisi0KDQtdC30LXRgNCy0L3QsCBHUFQg0YLQsNCx0LvQuNGG0Y8g0L3QtSDQt9C90LDRhdC+0LTQuNGC0YzRgdGPINC90LDQv9GA0LjQutGW0L3RhtGWINC00LjRgdC60LAsINGF0L7Rh9CwINC/0L7QstC40L3QvdCwINGC0LDQvCAiCisi0LfQvdCw0YXQvtC00LjRgtC40YHRjC4g0JzQvtC20LvQuNCy0L4sINGG0LUg0L7Qt9C90LDRh9Cw0ZQsINGJ0L4g0ZbQvdGI0LAg0L7Qv9C10YDQsNGG0ZbQudC90LAg0YHQuNGB0YLQtdC80LAg0LLQstCw0LbQsNGULCDRidC+ICIKKyLRgNC+0LfQvNGW0YAg0LTQuNGB0LrRgyDQvNC10L3RiNC40LkuINCS0LjQv9GA0LDQstC40YLQuCDRhtC1INGI0LvRj9GF0L7QvCDQv9C10YDQtdC80ZbRidC10L3QvdGPINC60L7Qv9GW0Zcg0YLQsNCx0LvQuNGG0ZYg0YMg0LrRltC90LXRhtGMICIKKyIo0YLQsCDQstC40LTQsNC70LjRgtC4INGB0YLQsNGA0YMg0LrQvtC/0ZbRjik/IgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjg2MgorbXNnaWQgIiIKKyJUaGUgcHJpbWFyeSBHUFQgdGFibGUgaXMgY29ycnVwdCwgYnV0IHRoZSBiYWNrdXAgYXBwZWFycyBPSywgc28gdGhhdCB3aWxsIGJlICIKKyJ1c2VkLiIKK21zZ3N0ciAiIgorItCe0YHQvdC+0LLQvdCwIEdQVCDRgtCw0LHQu9C40YbRjyDQv9C+0YjQutC+0LTQttC10L3QsCwg0LDQu9C1INGA0LXQt9C10YDQstC90LAg0LLQuNCz0LvRj9C00LDRlCDQv9GA0LDQstC40LvRjNC90L7Rjiwg0YLQvtC80YMg0LHRg9C00LUgIgorItCy0LjQutC+0YDQuNGB0YLQvtCy0YPQstCw0YLQuNGB0Ywg0YHQsNC80LUg0LLQvtC90LAuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjg3MAorbXNnaWQgIiIKKyJCb3RoIHRoZSBwcmltYXJ5IGFuZCBiYWNrdXAgR1BUIHRhYmxlcyBhcmUgY29ycnVwdC4gIFRyeSBtYWtpbmcgYSBmcmVzaCAiCisidGFibGUsIGFuZCB1c2luZyBQYXJ0ZWQncyByZXNjdWUgZmVhdHVyZSB0byByZWNvdmVyIHBhcnRpdGlvbnMuIgorbXNnc3RyICIiCisi0J/QvtGI0LrQvtC00LbQtdC90L4g0Y/QuiDQs9C+0LvQvtCy0L3RgyDRgtCw0Log0ZYg0YDQtdC30LXRgNCy0L3RgyBHUFQg0YLQsNCx0LvQuNGG0ZYuINCh0L/RgNC+0LHRg9C50YLQtSDRgdGC0LLQvtGA0LjRgtC4INGH0LjRgdGC0YMgIgorItGC0LDQsdC70LjRhtGOLCDRgtCwINCy0LjQutC+0YDQuNGB0YLQvtCy0YPQudGC0LUg0YTRg9C90LrRhtGW0Y4g0LLRltC00L3QvtCy0LvQtdC90L3RjyDQv9GA0L7Qs9GA0LDQvNC4IFBhcnRlZCwg0YnQvtCxICIKKyLQv9C+0LLQtdGA0L3Rg9GC0Lgg0YDQvtC30LTRltC70LguIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjE4MQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHNpZ25hdHVyZSAleCBmb3IgTWFjIGRpc2sgbGFiZWxzLiIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9GM0L3QsCDRgdC40LPQvdCw0YLRg9GA0LAgJXgg0LTQu9GPIE1hY2ludG9zaCDQtdGC0LjQutC10YLQutC4INC00LjRgdC60YMuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjIyNgorbXNnaWQgIlBhcnRpdGlvbiBtYXAgaGFzIG5vIHBhcnRpdGlvbiBtYXAgZW50cnkhIgorbXNnc3RyICLQmtCw0YDRgtCwINGA0L7Qt9C00ZbQu9GW0LIg0L3QtSDQvNGW0YHRgtC40YLRjCDQtdC70LXQvNC10L3RgtGDINC60LDRgNGC0Lgg0YDQvtC30LTRltC70ZbQsiEiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIHRvbyBzbWFsbCBmb3IgYSBNYWMgZGlzayBsYWJlbCEiCittc2dzdHIgIiVzINC30LDQvdCw0LTRgtC+INC80LDQu9C1INC00LvRjyBNYWNpbnRvc2gg0LXRgtC40LrQtdGC0LrQuCDQtNC40YHQutGDISIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo1MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGFydGl0aW9uICVkIGhhcyBhbiBpbnZhbGlkIHNpZ25hdHVyZSAleC4iCittc2dzdHIgItCg0L7Qt9C00ZbQuyAlZCDQvNCw0ZQg0L3QtdC/0YDQsNCy0LjQu9GM0L3RgyDRgdC40LPQvdCw0YLRg9GA0YMgJXguIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjU1MAorIywgYy1mb3JtYXQKK21zZ2lkICJQYXJ0aXRpb24gJWQgaGFzIGFuIGludmFsaWQgbGVuZ3RoIG9mIDAgYnl0ZXMhIgorbXNnc3RyICLQoNC+0LfQtNGW0LsgJWQg0LzQsNGUINC90LXQv9GA0LDQstC40LvRjNC90YMg0LTQvtCy0LbQuNC90YMgMCDQsdCw0LnRgiEiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NTgwCittc2dpZCAiVGhlIGRhdGEgcmVnaW9uIGRvZXNuJ3Qgc3RhcnQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBwYXJ0aXRpb24uIgorbXNnc3RyICLQntCx0LvQsNGB0YLRjCDQtNCw0L3QuNGFINC90LUg0L/QvtGH0LjQvdCw0ZTRgtGM0YHRjyDQtyDQv9C+0YfQsNGC0LrRgyDRgNC+0LfQtNGW0LvRgy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NTk3Cittc2dpZCAiVGhlIGJvb3QgcmVnaW9uIGRvZXNuJ3Qgc3RhcnQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBwYXJ0aXRpb24uIgorbXNnc3RyICLQntCx0LvQsNGB0YLRjCDQt9Cw0LLQsNC90YLQsNC20LXQvdC90Y8g0L3QtSDQv9C+0YfQuNC90LDRlNGC0YzRgdGPINC3INC/0L7Rh9Cw0YLQutGDINGA0L7Qt9C00ZbQu9GDLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo2MTEKK21zZ2lkICJUaGUgcGFydGl0aW9uJ3MgYm9vdCByZWdpb24gZG9lc24ndCBvY2N1cHkgdGhlIGVudGlyZSBwYXJ0aXRpb24uIgorbXNnc3RyICLQntCx0LvQsNGB0YLRjCDQt9Cw0LLQsNC90YLQsNC20LXQvdC90Y8g0YDQvtC30LTRltC70YMg0L3QtSDQt9Cw0LnQvNCw0ZQg0LLQtdGB0Ywg0YDQvtC30LTRltC7LiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo2MjIKK21zZ2lkICJUaGUgcGFydGl0aW9uJ3MgZGF0YSByZWdpb24gZG9lc24ndCBvY2N1cHkgdGhlIGVudGlyZSBwYXJ0aXRpb24uIgorbXNnc3RyICLQntCx0LvQsNGB0YLRjCDQtNCw0L3QuNGFINGA0L7Qt9C00ZbQu9GDINC90LUg0LfQsNC50LzQsNGUINCy0LXRgdGMINGA0L7Qt9C00ZbQuy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6Njc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXZWlyZCBibG9jayBzaXplIG9uIGRldmljZSBkZXNjcmlwdG9yOiAlZCBieXRlcyBpcyBub3QgZGl2aXNpYmxlIGJ5IDUxMi4iCittc2dzdHIgIiIKKyLQlNC40LLQvdC40Lkg0YDQvtC30LzRltGAINCx0LvQvtC60YMg0YMg0LTQtdGB0LrRgNC40L/RgtC+0YDRliDQv9GA0LjRgdGC0YDQvtGOOiAlZCDQsdCw0LnRgiDQvdC1INC00ZbQu9C40YLRjNGB0Y8g0L3QsCA1MTIuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjY4OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGRyaXZlciBkZXNjcmlwdG9yIHNheXMgdGhlIHBoeXNpY2FsIGJsb2NrIHNpemUgaXMgJWQgYnl0ZXMsIGJ1dCBMaW51eCAiCisic2F5cyBpdCBpcyAlZCBieXRlcy4iCittc2dzdHIgIiIKKyLQoyDQtNC10YHQutGA0LjQv9GC0L7RgNGWINC00YDQsNC50LLQtdGA0LAg0LfQsNC30L3QsNGH0LXQvdC+LCDRidC+INGA0L7Qt9C80ZbRgCDRhNGW0LfQuNGH0L3QvtCz0L4g0LHQu9C+0LrRgyDQtNC+0YDRltCy0L3RjtGUICVkICIKKyLQsdCw0LnRgtGW0LIsINCw0LvQtSBMaW51eCDQstCy0LDQttCw0ZQsINGJ0L4g0LLRltC9ICVkINCx0LDQudGC0ZbQsi4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NzM2Cittc2dpZCAiTm8gdmFsaWQgcGFydGl0aW9uIG1hcCBmb3VuZC4iCittc2dzdHIgItCd0LUg0LfQvdCw0LnQtNC10L3QviDQv9GA0LDQstC40LvRjNC90L7RlyDQutCw0YDRgtC4INGA0L7Qt9C00ZbQu9GW0LIuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjc5NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ29uZmxpY3RpbmcgcGFydGl0aW9uIG1hcCBlbnRyeSBzaXplcyEgIEVudHJ5IDEgc2F5cyBpdCBpcyAlZCwgYnV0IGVudHJ5ICVkICIKKyJzYXlzIGl0IGlzICVkISIKK21zZ3N0ciAiIgorItCa0L7QvdGE0LvRltC60YLRg9GO0YfRliDRgNC+0LfQvNGW0YDQuCDRgyDQtdC70LXQvNC10L3RgtCw0YUg0LrQsNGA0YLQuCDRgNC+0LfQtNGW0LvRltCyISDQoyDQtdC70LXQvNC10L3RgtGWIDEg0LLQutCw0LfQsNC90L4gJWQsICIKKyLQsNC70LUg0YMg0LXQu9C10LzQtdC90YLRliAlZCDQstC60LDQt9Cw0L3QviAlZCEiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6ODIyCittc2dpZCAiV2VpcmQhICBUaGVyZSBhcmUgMiBwYXJ0aXRpb25zIG1hcCBlbnRyaWVzISIKK21zZ3N0ciAi0KTQsNGC0LDQu9GM0L3QviEg0JTQuNCy0L3QsCDQv9C+0LzQuNC70LrQsCAtIDIg0LXQu9C10LzQtdC90YLQuCDQutCw0YDRgtC4INGA0L7Qt9C00ZbQu9GW0LIhIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjEzNDcKK21zZ2lkICIiCisiQ2hhbmdpbmcgdGhlIG5hbWUgb2YgYSByb290IG9yIHN3YXAgcGFydGl0aW9uIHdpbGwgcHJldmVudCBMaW51eCBmcm9tICIKKyJyZWNvZ25pc2luZyBpdCBhcyBzdWNoLiIKK21zZ3N0ciAiIgorItCX0LzRltC90LAg0L3QsNC30LLQuCDQutC+0YDQtdC90LXQstC+0LPQviDRgNC+0LfQtNGW0LvRgyDRh9C4INGA0L7Qt9C00ZbQu9GDINC/0ZbQtNC60LDRh9C60Lgg0LfQsNCy0LDQttCw0YLQuNC80LUgTGludXggIgorItGA0L7Qt9C/0ZbQt9C90LDRgtC4INGX0YUuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjE0NDMKK21zZ2lkICJDYW4ndCBhZGQgYW5vdGhlciBwYXJ0aXRpb24gLS0gdGhlIHBhcnRpdGlvbiBtYXAgaXMgdG9vIHNtYWxsISIKK21zZ3N0ciAi0J3QtSDQstC00LDRlNGC0YzRgdGPINC00L7QtNCw0YLQuCDRltC90YjQuNC5INGA0L7Qt9C00ZbQuyAtINC60LDRgNGC0LAg0YDQvtC30LTRltC70ZbQsiDQvdCw0LTRgtC+INC80LDQu9C10L3RjNC60LAhIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3BjOTguYzozNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBwYXJ0aXRpb24gdGFibGUgb24gJXMuIgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70YzQvdCwINGC0LDQsdC70LjRhtGPINGA0L7Qt9C00ZbQu9GW0LIg0YMgJXMuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3BjOTguYzo0MDYgbGlicGFydGVkL2xhYmVscy9wYzk4LmM6NDg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQYXJ0aXRpb24gJWQgaXNuJ3QgYWxpZ25lZCB0byBjeWxpbmRlciBib3VuZGFyaWVzLiAgVGhpcyBpcyBzdGlsbCAiCisidW5zdXBwb3J0ZWQuIgorbXNnc3RyICIiCisi0KDQvtC30LTRltC7ICVkINC90LUg0LLQuNGA0ZbQstC90Y/QvdC40Lkg0L3QsCDQvNC10LbRliDRhtC40LvRltC90LTRgNGDLiDQndC10L7QsdGF0ZbQtNC90L4g0LTQvtC00LDRgtC4INC/0ZbQtNGC0YDQuNC80LrRgyDQtNC70Y8gIgorItGG0YzQvtCz0L4g0LLQuNC/0LDQtNC60YMuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3BjOTguYzo3OTEKK21zZ2lkICJDYW4ndCBhZGQgYW5vdGhlciBwYXJ0aXRpb24uIgorbXNnc3RyICLQndC1INCy0LTQsNGU0YLRjNGB0Y8g0LTQvtC00LDRgtC4INGW0L3RiNC40Lkg0YDQvtC30LTRltC7LiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzoxNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBCYWQgY2hlY2tzdW0gb24gYmxvY2sgJWxsdSBvZiB0eXBlICVzLiIKK21zZ3N0ciAiJXMgOiDQndC10L/RgNCw0LLQuNC70YzQvdCwINC60L7QvdGC0YDQvtC70YzQvdCwINGB0YPQvNCwINC90LAg0LHQu9C+0YbRliAlbGx1INGC0LjQv9GDICVzLiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo0OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBEaWRuJ3QgZmluZCByZGIgYmxvY2ssIHNob3VsZCBuZXZlciBoYXBwZW4uIgorbXNnc3RyICIlcyA6INCd0LUg0LLQtNCw0ZTRgtGM0YHRjyDQt9C90LDQudGC0Lgg0LHQu9C+0LogcmRiLCDRhtGM0L7Qs9C+INC90LUg0L/QvtCy0LjQvdC90L4g0LHRg9C70L4g0YHRgtCw0YLQuNGB0Y8uIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjU4MQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IExvb3AgZGV0ZWN0ZWQgYXQgYmxvY2sgJWQuIgorbXNnc3RyICIlcyA6INCy0LjRj9Cy0LvQtdC90L4g0YbQuNC60Lsg0YMg0LHQu9C+0YbRliAlZC4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6NjAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogVGhlICVzIGxpc3Qgc2VlbXMgYmFkIGF0IGJsb2NrICVzLiIKK21zZ3N0ciAiJXMgOiDQodC/0LjRgdC+0LogJXMg0LzQsNGUINC/0L7RiNC60L7QtNC20LXQvdC40Lkg0LHQu9C+0LogJXMuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjY4OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBsaXN0IGJhZCBibG9ja3MuIgorbXNnc3RyICIlcyA6INC90LUg0LLQtNCw0ZTRgtGM0YHRjyDQvtGC0YDQuNC80LDRgtC4INGB0L/QuNGB0L7QuiDQv9C+0YjQutC+0LTQttC10L3QuNGFINCx0LvQvtC60ZbQsi4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6Njk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGxpc3QgcGFydGl0aW9uIGJsb2Nrcy4iCittc2dzdHIgIiVzIDog0L3QtSDQstC00LDRlNGC0YzRgdGPINC+0YLRgNC40LzQsNGC0Lgg0YHQv9C40YHQvtC6INCx0LvQvtC60ZbQsiDRgNC+0LfQtNGW0LvRgy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6NzA1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGxpc3QgZmlsZSBzeXN0ZW0gYmxvY2tzLiIKK21zZ3N0ciAiJXMgOiDQvdC1INCy0LTQsNGU0YLRjNGB0Y8g0L7RgtGA0LjQvNCw0YLQuCDRgdC/0LjRgdC+0Log0LHQu9C+0LrRltCyINGE0LDQudC70L7QstC+0Zcg0YHQuNGB0YLQtdC80LguIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjcxMworIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBsaXN0IGJvb3QgYmxvY2tzLiIKK21zZ3N0ciAiJXMgOiDQvdC1INCy0LTQsNGU0YLRjNGB0Y8g0L7RgtGA0LjQvNCw0YLQuCDRgdC/0LjRgdC+0Log0LfQsNCy0LDQvdGC0LDQttGD0LLQsNC70YzQvdC40YUg0LHQu9C+0LrRltCyLiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo3NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHdyaXRlIHBhcnRpdGlvbiBibG9jayBhdCAlZC4iCittc2dzdHIgItCd0LUg0LLQtNCw0ZTRgtGM0YHRjyDQt9Cw0L/QuNGB0LDRgtC4INCx0LvQvtC6INGA0L7Qt9C00ZbQu9GDINGDICVkLiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzoxMDY5Cittc2dpZCAiVW5hYmxlIHRvIGFsbG9jYXRlIGEgcGFydGl0aW9uIG51bWJlci4iCittc2dzdHIgItCe0YfRltC60YPRlNGC0YzRgdGPINC90L7QvNC10YAg0YDQvtC30LTRltC70YMuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3N1bi5jOjE0NQorbXNnaWQgIkNvcnJ1cHRlZCBTdW4gZGlzayBsYWJlbCBkZXRlY3RlZC4iCittc2dzdHIgItCX0L3QsNC50LTQtdC90L4g0L/QvtGI0LrQvtC00LbQtdC90YMgU3VuINC10YLQuNC60LXRgtC60YMg0LTQuNGB0LrRgy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6MjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZGlzayBDSFMgZ2VvbWV0cnkgKCVkLCVkLCVkKSByZXBvcnRlZCBieSB0aGUgb3BlcmF0aW5nIHN5c3RlbSBkb2VzIG5vdCAiCisibWF0Y2ggdGhlIGdlb21ldHJ5IHN0b3JlZCBvbiB0aGUgZGlzayBsYWJlbCAoJWQsJWQsJWQpLiIKK21zZ3N0ciAiIgorItCm0JPQoShDSFMpINCz0LXQvtC80LXRgtGA0ZbRjyDQtNC40YHQutGDICglZCwlZCwlZCkg0Y/QutGDINCy0LjQtNCw0ZQg0L7Qv9C10YDQsNGG0ZbQudC90LAg0YHQuNGB0YLQtdC80LAg0L3QtSAiCisi0LLRltC00L/QvtCy0ZbQtNCw0ZQg0LPQtdC+0LzQtdGC0YDRltGXLCDRidC+INC30LHQtdGA0ZbQs9Cw0ZTRgtGM0YHRjyDRgyDQv9C+0LfQvdCw0YfRhtGWINC00LjRgdC60YMgKCVkLCVkLCVkKS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6Mjg4CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBkaXNrIGxhYmVsIGRlc2NyaWJlcyBhIGRpc2sgYmlnZ2VyIHRoYW4gJXMuIgorbXNnc3RyICLQldGC0LjQutC10YLQutCwINC00LjRgdC60YMg0L7Qv9C40YHRg9GUINC00LjRgdC6INCx0ZbQu9GM0YjQvtCz0L4g0YDQvtC30LzRltGA0YMg0L3RltC2ICVzLiIKKworIzogbGlicGFydGVkL2xhYmVscy9zdW4uYzo0NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGRpc2sgaGFzICVkIGN5bGluZGVycywgd2hpY2ggaXMgZ3JlYXRlciB0aGFuIHRoZSBtYXhpbXVtIG9mIDY1NTM2LiIKK21zZ3N0ciAi0JTQuNGB0Log0LzQsNGUICVkINGG0LjQu9GW0L3QtNGA0ZbQsiwg0YnQviDQsdGW0LvRjNGI0LUg0L3RltC2INC80LDQutGB0LjQvNCw0LvRjNC90LUg0LfQvdCw0YfQtdC90L3RjyA2NTUzNi4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6NzM3Cittc2dpZCAiIgorIlRoZSBXaG9sZSBEaXNrIHBhcnRpdGlvbiBpcyB0aGUgb25seSBhdmFpbGFibGUgb25lIGxlZnQuICBHZW5lcmFsbHksIGl0IGlzICIKKyJub3QgYSBnb29kIGlkZWEgdG8gb3ZlcndyaXRlIHRoaXMgcGFydGl0aW9uIHdpdGggYSByZWFsIG9uZS4gIFNvbGFyaXMgbWF5ICIKKyJub3QgYmUgYWJsZSB0byBib290IHdpdGhvdXQgaXQsIGFuZCBTSUxPICh0aGUgc3BhcmMgYm9vdCBsb2FkZXIpIGFwcHJlY2lhdGVzICIKKyJpdCBhcyB3ZWxsLiIKK21zZ3N0ciAiIgorItCg0L7Qt9C00ZbQuyBcItCS0LXRgdGMINC00LjRgdC6XCIgLSDRlNC00LjQvdC40Lkg0L3QsNGP0LLQvdC40LkuINCX0LDQt9Cy0LjRh9Cw0LksINC90LXQsdCw0LbQsNC90L4g0L/QtdGA0LXQt9Cw0L/QuNGB0YPQstCw0YLQuCDRhtC10LkgIgorItGA0L7Qt9C00ZbQuyDRgNC10LDQu9GM0L3QuNC8INGA0L7Qt9C00ZbQu9C+0LwuIFNvbGFyaXMsINC80L7QttC70LjQstC+LCDQvdC1INCx0YPQtNC1INC30LTQsNGC0L3QuNC5INC30LDQstCw0L3RgtCw0LbQuNGC0LjRgdGMICIKKyLQsdC10Lcg0L3RjNC+0LPQviwg0YbQtSDRgtCw0LrQvtC2INCy0L/Qu9C40L3QtSDQvdCwIFNJTE8gKNC30LDQstCw0L3RgtCw0LbRg9Cy0LDRhyBzcGFyYykuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3N1bi5jOjc1MgorbXNnaWQgIlN1biBkaXNrIGxhYmVsIGlzIGZ1bGwuIgorbXNnc3RyICJTdW4g0LXRgtC40LrQtdGC0LrQsCDQtNC40YHQutGDINC30LDQv9C+0LLQvdC10L3QsC4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjE2MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgb3BlbmluZyBkZXZpY2UgJyVzJyBmYWlsZWQuXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzoxNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHNlZWtpbmcgZGV2aWNlICclcycgZmFpbGVkLlxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6MTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyB3cml0aW5nIHRvIGRldmljZSAnJXMnIGZhaWxlZCxcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjE3NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgcmVhZGluZyBmcm9tIGRldmljZSAnJXMnIGZhaWxlZC5cbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjE3OQorIywgYy1mb3JtYXQKK21zZ2lkICJGYXRhbCBlcnJvclxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQxOAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIFZUT0MgbGFiZWxzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0MjQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBWVE9DIEZNVDEgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDMxCittc2dpZCAiQ291bGQgbm90IHJlYWQgVlRPQyBGTVQ0IERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQzOAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIFZUT0MgRk1UNSBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0NDUKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBWVE9DIEZNVDcgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDYyCittc2dpZCAiQ291bGQgbm90IHdyaXRlIFZUT0MgbGFiZWxzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0NjgKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgVlRPQyBGTVQxIERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQ3NQorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBWVE9DIEZNVDQgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDgyCittc2dpZCAiQ291bGQgbm90IHdyaXRlIFZUT0MgRk1UNSBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0ODkKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgVlRPQyBGTVQ3IERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9saWJwYXJ0ZWQuYzoyOTYgbGlicGFydGVkL2xpYnBhcnRlZC5jOjMxNgorbXNnaWQgIk91dCBvZiBtZW1vcnkuIgorbXNnc3RyICLQndC10LTQvtGB0YLQsNGC0L3RjNC+INC/0LDQvCfRj9GC0ZYuIgorCisjOiBsaWJwYXJ0ZWQvdW5pdC5jOjEzOQorbXNnaWQgIkNhbm5vdCBnZXQgdW5pdCBzaXplIGZvciBzcGVjaWFsIHVuaXQgJ0NPTVBBQ1QnLiIKK21zZ3N0ciAi0J3QtSDQstC00LDRlNGC0YzRgdGPINC+0YLRgNC40LzQsNGC0Lgg0L7QtNC40L3QuNGG0Y4g0YDQvtC30LzRltGA0YMg0LTQu9GPINGB0L/QtdGG0ZbQsNC70YzQvdC+0LPQviDQsdC70L7QutGDICdDT01QQUNUJy4iCisKKyM6IGxpYnBhcnRlZC91bml0LmM6Mzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIlwiJXNcIiBoYXMgaW52YWxpZCBzeW50YXggZm9yIGxvY2F0aW9ucy4iCittc2dzdHIgIlwiJXNcIiDQvNCw0ZQg0L3QtdC/0YDQsNCy0LjQu9GM0L3QuNC5INGB0LjQvdGC0LDQutGB0LjRgSDQsNC00YDQtdGBLiIKKworIzogbGlicGFydGVkL3VuaXQuYzozOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIG1heGltdW0gaGVhZCB2YWx1ZSBpcyAlZC4iCittc2dzdHIgItCc0LDQutGB0LjQvNCw0LvRjNC90LjQuSDQvdC+0LzQtdGAINCz0L7Qu9C+0LLQutC4IC0gJWQuIgorCisjOiBsaWJwYXJ0ZWQvdW5pdC5jOjQwMQorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgbWF4aW11bSBzZWN0b3IgdmFsdWUgaXMgJWQuIgorbXNnc3RyICLQnNCw0LrRgdC40LzQsNC70YzQvdC40Lkg0L3QvtC80LXRgCDRgdC10LrRgtC+0YDQsCAtICVkLiIKKworIzogbGlicGFydGVkL3VuaXQuYzo0MTMgbGlicGFydGVkL3VuaXQuYzo1NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGxvY2F0aW9uICVzIGlzIG91dHNpZGUgb2YgdGhlIGRldmljZSAlcy4iCittc2dzdHIgItCQ0LTRgNC10YHQsCAlcyDQv9C+0LfQsCDQvNC10LbQsNC80Lgg0L/RgNC40YHRgtGA0L7RjiAlcy4iCisKKyM6IGxpYnBhcnRlZC91bml0LmM6NTI3Cittc2dpZCAiSW52YWxpZCBudW1iZXIuIgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70YzQvdC1INGH0LjRgdC70L4uIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYWZmcy5jOjYzIGxpYnBhcnRlZC9mcy9hbWlnYS9hcGZzLmM6NTYKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hc2ZzLmM6NzAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGFsbG9jYXRlIHBhcnRpdGlvbiBibG9ja1xuIgorbXNnc3RyICIlcyA6INC90LUg0LLQtNCw0ZTRgtGM0YHRjyDQvtGC0YDQuNC80LDRgtC4INGB0L/QuNGB0L7QuiDQsdC70L7QutGW0LIg0YDQvtC30LTRltC70YMuIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYWZmcy5jOjc4IGxpYnBhcnRlZC9mcy9hbWlnYS9hcGZzLmM6NzAKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hc2ZzLmM6ODYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGFsbG9jYXRlIGJsb2NrXG4iCittc2dzdHIgIiVzIDog0L3QtSDQstC00LDRlNGC0YzRgdGPINC+0YLRgNC40LzQsNGC0Lgg0YHQv9C40YHQvtC6INC30LDQstCw0L3RgtCw0LbRg9Cy0LDQu9GM0L3QuNGFINCx0LvQvtC60ZbQsi4iCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hZmZzLmM6ODMgbGlicGFydGVkL2ZzL2FtaWdhL2FwZnMuYzo3NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBDb3VsZG4ndCByZWFkIGJvb3QgYmxvY2sgJWxsdVxuIgorbXNnc3RyICIlcyA6INCy0LjRj9Cy0LvQtdC90L4g0YbQuNC60Lsg0YMg0LHQu9C+0YbRliAlZC4iCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hZmZzLmM6OTkgbGlicGFydGVkL2ZzL2FtaWdhL2FwZnMuYzo4NgorIzogbGlicGFydGVkL2ZzL2FtaWdhL2FzZnMuYzo5MiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXNmcy5jOjEwNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBDb3VsZG4ndCByZWFkIHJvb3QgYmxvY2sgJWxsdVxuIgorbXNnc3RyICIlcyA6INCy0LjRj9Cy0LvQtdC90L4g0YbQuNC60Lsg0YMg0LHQu9C+0YbRliAlZC4iCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jOjcyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBhbGxvY2F0ZSBpZCBsaXN0IGVsZW1lbnRcbiIKK21zZ3N0ciAiJXMgOiDQvdC1INCy0LTQsNGU0YLRjNGB0Y8g0L7RgtGA0LjQvNCw0YLQuCDRgdC/0LjRgdC+0Log0L/QvtGI0LrQvtC00LbQtdC90LjRhSDQsdC70L7QutGW0LIuIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBDb3VsZG4ndCByZWFkIGJsb2NrICVsbHVcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzoyMDIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogQmFkIGNoZWNrc3VtIG9uIGJsb2NrICVsbHUgb2YgdHlwZSAlc1xuIgorbXNnc3RyICIlcyA6INCd0LXQv9GA0LDQstC40LvRjNC90LAg0LrQvtC90YLRgNC+0LvRjNC90LAg0YHRg9C80LAg0L3QsCDQsdC70L7RhtGWICVsbHUg0YLQuNC/0YMgJXMuIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzoyMTIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogQ291bGRuJ3Qgd3JpdGUgYmxvY2sgJWRcbiIKK21zZ3N0ciAiJXMgOiDQstC40Y/QstC70LXQvdC+INGG0LjQutC7INGDINCx0LvQvtGG0ZYgJWQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzoyNzgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGFsbG9jYXRlIGRpc2tfc3BlY2lmaWMgcmRiIGJsb2NrXG4iCittc2dzdHIgIiVzIDog0L3QtSDQstC00LDRlNGC0YzRgdGPINC+0YLRgNC40LzQsNGC0Lgg0YHQv9C40YHQvtC6INC/0L7RiNC60L7QtNC20LXQvdC40YUg0LHQu9C+0LrRltCyLiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6Mjg5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyA6IERpZG4ndCBmaW5kIHJkYiBibG9jaywgc2hvdWxkIG5ldmVyIGhhcHBlblxuIgorbXNnc3RyICIlcyA6INCd0LUg0LLQtNCw0ZTRgtGM0YHRjyDQt9C90LDQudGC0Lgg0LHQu9C+0LogcmRiLCDRhtGM0L7Qs9C+INC90LUg0L/QvtCy0LjQvdC90L4g0LHRg9C70L4g0YHRgtCw0YLQuNGB0Y8uIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzozMTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIHJlYWQgcGFydGl0aW9uIGJsb2NrICVsbHVcbiIKK21zZ3N0ciAiJXMgOiDQvdC1INCy0LTQsNGU0YLRjNGB0Y8g0L7RgtGA0LjQvNCw0YLQuCDRgdC/0LjRgdC+0Log0LHQu9C+0LrRltCyINGA0L7Qt9C00ZbQu9GDLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjg3IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzoxMTIKK21zZ2lkICJJbmNvbnNpc3RlbnQgZ3JvdXAgZGVzY3JpcHRvcnMhIgorbXNnc3RyICLQodGD0L/QtdGA0LXRh9C70LjQstCwINCz0YDRg9C/0LAg0LTQtdGB0LrRgNC40L/RgtC+0YDRltCyISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjkxIGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzoxMTYKK21zZ2lkICJGaWxlIHN5c3RlbSBmdWxsISIKK21zZ3N0ciAi0KTQsNC50LvQvtCy0LAg0YHQuNGB0YLQtdC80LAg0L/QvtCy0L3QsCEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo2ODYKK21zZ2lkICJJbnZhbGlkIHN1cGVyYmxvY2suICBBcmUgeW91IHN1cmUgdGhpcyBpcyBhbiBleHQyIGZpbGUgc3lzdGVtPyIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9GM0L3QuNC5INGB0YPQv9C10YDQsdC70L7Qui4g0JLQuCDQstC/0LXQstC90LXQvdGWLCDRidC+INGG0LUg0YTQsNC50LvQvtCy0LAg0YHQuNGB0YLQtdC80LAg0YLQuNC/0YMgZXh0Mj8iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo3MDAgbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo2NTgKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgZXJyb3JzISAgWW91IHNob3VsZCBydW4gZTJmc2NrLiIKK21zZ3N0ciAi0KTQsNC50LvQvtCy0LAg0YHQuNGB0YLQtdC80LAg0LzRltGB0YLQuNGC0Ywg0L/QvtC80LjQu9C60LghINCd0LXQvtCx0YXRltC00L3QviDQt9Cw0L/Rg9GB0YLQuNGC0LggZTJmc2NrLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjcxMQorbXNnaWQgIiIKKyJGaWxlIHN5c3RlbSB3YXMgbm90IGNsZWFubHkgdW5tb3VudGVkISAgWW91IHNob3VsZCBydW4gZTJmc2NrLiAgTW9kaWZ5aW5nIGFuICIKKyJ1bmNsZWFuIGZpbGUgc3lzdGVtIGNvdWxkIGNhdXNlIHNldmVyZSBjb3JydXB0aW9uLiIKK21zZ3N0ciAiIgorItCk0LDQudC70L7QstCwINGB0LjRgdGC0LXQvNCwINC90LUg0LHRg9C70LAg0L/RgNCw0LLQuNC70YzQvdC+INCy0ZbQtNC60LvRjtGH0LXQvdCwISDQndC10L7QsdGF0ZbQtNC90L4g0LfQsNC/0YPRgdGC0LjRgtC4IGUyZnNjay4gIgorItCX0LzRltC90Lgg0LTQviDQvdC10YbRltC70ZbRgdC90L7RlyDRhNCw0LnQu9C+0LLQvtGXINGB0LjRgdGC0LXQvNC4INC80L7QttGD0YLRjCDQv9GA0LjQt9Cy0LXRgdGC0Lgg0LTQviDRgdC10YDQudC+0LfQvdC40YUgIgorItC/0L7RiNC60L7QtNC20LXQvdGMLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjczMQorbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyBhbiBpbmNvbXBhdGlibGUgZmVhdHVyZSBlbmFibGVkLiIKK21zZ3N0ciAi0KMg0YTQsNC50LvQvtCy0ZbQuSDRgdC40YHRgtC10LzRliDQstCy0ZbQvNC60L3QtdC90L4g0L3QtdGB0YPQvNGW0YHQvdGDINCy0LvQsNGB0YLQuNCy0ZbRgdGC0YwuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6NzQyCittc2dpZCAiRXJyb3IgYWxsb2NhdGluZyBidWZmZXIgY2FjaGUuIgorbXNnc3RyICLQn9C+0LzQuNC70LrQsCDRgNC+0LfQv9C+0LTRltC70YMg0LHRg9GE0LXRgNCwINC60LXRiNCwLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9pbm9kZV9yZWxvY2F0b3IuYzoxMTQKK21zZ2lkICIiCisiRm91bmQgYW4gaW5vZGUgd2l0aCBhIGluY29ycmVjdCBsaW5rIGNvdW50LiAgQmV0dGVyIGdvIHJ1biBlMmZzY2sgZmlyc3QhIgorbXNnc3RyICIiCisi0JfQvdCw0LnQtNC10L3QviDQstGD0LfQvtC7IChpbm9kZSkg0Lcg0L3QtdC/0YDQsNCy0LjQu9GM0L3QvtGOINC60ZbQu9GM0LrRltGB0YLRjiDQv9C+0YHQuNC70LDQvdGMLiDQoNC10LrQvtC80LXQvdC00YPRlNGC0YzRgdGPICIKKyLRgdC/0L7Rh9Cw0YLQutGDINC30LDQv9GD0YHRgtC40YLQuCBlMmZzY2suIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2lub2RlX3JlbG9jYXRvci5jOjQ4NworbXNnaWQgIk5vdCBlbm91Z2ggZnJlZSBpbm9kZXMhIgorbXNnc3RyICLQndC10LTQvtGB0YLQsNGC0L3RjNC+INCy0ZbQu9GM0L3QuNGFINCy0YPQt9C70ZbQsiAoaW5vZGUpISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzoyMjMKK21zZ2lkICJGaWxlIHN5c3RlbSBpcyB0b28gZnVsbCB0byByZW1vdmUgYSBncm91cCEiCittc2dzdHIgItCk0LDQudC70L7QstCwINGB0LjRgdGC0LXQvNCwINC90LDQtNGC0L4g0LfQsNC/0L7QstC90LXQvdCwLCDRidC+0LEg0LLQuNC00LDQu9C40YLQuCDQs9GA0YPQv9GDISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzoyMzIKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgdG9vIG1hbnkgYWxsb2NhdGVkIGlub2RlcyB0byByZW1vdmUgYSBncm91cCEiCittc2dzdHIgIiIKKyLQoyDRhNCw0LnQu9C+0LLRltC5INGB0LjRgdGC0LXQvNGWINCy0LjQtNGW0LvQtdC90L4g0L3QsNC00YLQviDQsdCw0LPQsNGC0L4g0LLRg9C30LvRltCyIChpbm9kZSksINGJ0L7QsSDQstC40LTQsNC70LjRgtC4INCz0YDRg9C/0YMhIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjQ5MQorbXNnaWQgImFkZGluZyBncm91cHMiCittc2dzdHIgItC00L7QtNCw0LLQsNC90L3RjyDQs9GA0YPQvyIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo1MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBmaWxlIHN5c3RlbSBpcyB0b28gZnVsbCB0byByZXNpemUgaXQgdG8gJWkgYmxvY2tzLiAgU29ycnkuIgorbXNnc3RyICLQpNCw0LnQu9C+0LLQsCDRgdC40YHRgtC10LzQsCDQvdCw0LTRgtC+INC30LDQv9C+0LLQvdC10L3QsCDRidC+0LEg0LfQvNGW0L3QuNGC0Lgg0ZfRlyDRgNC+0LfQvNGW0YAg0LTQviAlaSDQsdC70L7QutGW0LIuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjUzOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBmaWxlIHN5c3RlbSBoYXMgdG9vIG1hbnkgb2NjdXBpZWQgaW5vZGVzIHRvIHJlc2l6ZSBpdCB0byAlaSBibG9ja3MuICAiCisiU29ycnkuIgorbXNnc3RyICIiCisi0KMg0YTQsNC50LvQvtCy0ZbQuSDRgdC40YHRgtC10LzRliDQvdCw0LTRgtC+INCx0LDQs9Cw0YLQviDQt9Cw0LnQvdGP0YLQuNGFIGkt0LLRg9C30LvRltCyLCDRidC+0LEg0LfQvNGW0L3QuNGC0Lgg0ZfRlyDRgNC+0LfQvNGW0YAg0LTQviAlIgorImkg0LHQu9C+0LrRltCyLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo2NjYKK21zZ2lkICJGaWxlIHN5c3RlbSB3YXMgbm90IGNsZWFubHkgdW5tb3VudGVkISAgWW91IHNob3VsZCBydW4gZTJmc2NrLiIKK21zZ3N0ciAiIgorItCk0LDQudC70L7QstCwINGB0LjRgdGC0LXQvNCwINCx0YPQu9CwINC90LXQv9GA0LDQstC40LvRjNC90L4g0LLRltC00LrQu9GO0YfQtdC90LAhINCd0LXQvtCx0YXRltC00L3QviDQt9Cw0L/Rg9GB0YLQuNGC0LggZTJmc2NrLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo2NzUKK21zZ2lkICIiCisiVGhlIGZpbGUgc3lzdGVtIGhhcyB0aGUgJ2Rpcl9pbmRleCcgZmVhdHVyZSBlbmFibGVkLiAgUGFydGVkIGNhbiBvbmx5IHJlc2l6ZSAiCisidGhlIGZpbGUgc3lzdGVtIGlmIGl0IGRpc2FibGVzIHRoaXMgZmVhdHVyZS4gIFlvdSBjYW4gZW5hYmxlIGl0IGxhdGVyIGJ5ICIKKyJydW5uaW5nICd0dW5lMmZzIC1PIGRpcl9pbmRleCBERVZJQ0UnIGFuZCB0aGVuICdlMmZzY2sgLWZEIERFVklDRScuIgorbXNnc3RyICIiCisi0KMg0YTQsNC50LvQvtCy0ZbQuSDRgdC40YHRgtC10LzRliDQstCy0ZbQvNC60L3QtdC90L4g0LLQu9Cw0YHRgtC40LLRltGB0YLRjCAnZGlyX2luZGV4Jy4gUGFydGVkINC80L7QttC1INC30LzRltC90Y7QstCw0YLQuCAiCisi0YDQvtC30LzRltGAINC70LjRiNC1INGDINGE0LDQudC70L7QstC40YUg0YHQuNGB0YLQtdC8LCDRgyDRj9C60LjRhSDRhtGPINCy0LvQsNGB0YLQuNCy0ZbRgdGC0Ywg0LLQuNC80LrQvdC10L3QsC4g0JLQuCDQvNC+0LbQtdGC0LUgIgorItGD0LLRltC80LrQvdGD0YLQuCDRl9GXINC/0ZbQt9C90ZbRiNC1LCDQutC+0LzQsNC90LTQvtGOICd0dW5lMmZzIC1PIGRpcl9pbmRleCBERVZJQ0UnLCDQv9GW0YHQu9GPINGH0L7Qs9C+ICIKKyLRgdC70ZbQtCDQt9Cw0L/Rg9GB0YLQuNGC0LggJ2UyZnNjayAtZkQgREVWSUNFJy4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NjkxCisjLCBmdXp6eQorbXNnaWQgIiIKKyJBIHJlc2l6ZSBvcGVyYXRpb24gb24gdGhpcyBmaWxlIHN5c3RlbSB3aWxsIHVzZSBFWFBFUklNRU5UQUwgY29kZVxuIgorInRoYXQgTUFZIENPUlJVUFQgaXQgKGFsdGhvdWdoIG5vIG9uZSBoYXMgcmVwb3J0ZWQgYW55IHN1Y2ggZGFtYWdlIHlldCkuXG4iCisiWW91IHNob3VsZCBhdCBsZWFzdCBiYWNrdXAgeW91ciBkYXRhIGZpcnN0LCBhbmQgcnVuICdlMmZzY2sgLWYnIGFmdGVyd2FyZHMuIgorbXNnc3RyICIiCisi0J7Qv9C10YDQsNGG0ZbRjyDQt9C80ZbQvdC4INGA0L7Qt9C80ZbRgNGDINC90LAg0YbRltC5INGE0LDQudC70L7QstGW0Lkg0YHQuNGB0YLQtdC80ZYg0LLQuNC60L7RgNC40YHRgtC+0LLRg9GUICIKKyLQldCa0KHQn9CV0KDQmNCc0JXQndCi0JDQm9Cs0J3QmNCZINC60L7QtCDRgtCwINCc0J7QltCVINCf0J7QqNCa0J7QlNCY0KLQmCDRl9GXICjRhdC+0YfQsCDRhtGM0L7Qs9C+INC00L7RgdGWINC90LUg0LHRg9C70L4gIgorItC/0L7QvNGW0YfQtdC90L4pLiDQn9GA0LjQvdCw0LnQvNC90ZYsINGB0LvRltC0INC30YDQvtCx0LjRgtC4INGA0LXQt9C10YDQstC90YMg0LrQvtC/0ZbRjiDQtNCw0L3QuNGFINGC0LAg0LfQsNC/0YPRgdGC0LjRgtC4ICdlMmZzY2sgIgorIi1mJyDQv9GW0YHQu9GPINC30LDQstC10YDRiNC10L3QvdGPINC30LzRltC90Lgg0YDQvtC30LzRltGA0YMuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2Jsb2NrX3JlbG9jYXRvci5jOjE5OAorbXNnaWQgIkNyb3NzLWxpbmtlZCBibG9ja3MgZm91bmQhICBCZXR0ZXIgZ28gcnVuIGUyZnNjayBmaXJzdCEiCittc2dzdHIgIiIKKyLQktC40Y/QstC70LXQvdC+INCx0LvQvtC60Lgg0Lcg0L/QtdGA0LXRhdGA0LXRgdC90LjQvNC4INC/0L7RgdC40LvQsNC90L3Rj9C80LghINCa0YDQsNGJ0LUg0YHQv9C+0YfQsNGC0LrRgyDQt9Cw0L/Rg9GB0YLQuNGC0LggZTJmc2NrISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9ibG9ja19yZWxvY2F0b3IuYzo1MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmxvY2sgJWkgaGFzIG5vIHJlZmVyZW5jZT8gIFdlaXJkLiIKK21zZ3N0ciAi0JHQu9C+0LogJWkg0L3QtSDQvNCw0ZQg0L/QvtGB0LjQu9Cw0L3QvdGPPyDQlNC40LLQvdC+IgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2Jsb2NrX3JlbG9jYXRvci5jOjczNworIywgYy1mb3JtYXQKK21zZ2lkICJCbG9jayAlaSBzaG91bGRuJ3QgaGF2ZSBiZWVuIG1hcmtlZCAoJWQsICVkKSEiCittc2dzdHIgItCR0LvQvtC6ICVpINC90LUg0L/QvtCy0LjQvdC10L0g0LHRg9GC0Lgg0LLRltC00LzRltGH0LXQvdC40LwgKCVkLCAlZCkhIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9pbnRlcmZhY2UuYzoxODYKK21zZ2lkICIiCisiVGhlIGV4dDIgZmlsZSBzeXN0ZW0gcGFzc2VkIGEgYmFzaWMgY2hlY2suICBGb3IgYSBtb3JlIGNvbXByZWhlbnNpdmUgY2hlY2ssICIKKyJ1c2UgdGhlIGUyZnNjayBwcm9ncmFtLiIKK21zZ3N0ciAiIgorItCk0LDQudC70L7QstCwINGB0LjRgdGC0LXQvNCwIGV4dDIg0L/RgNC+0LnRiNC70LAg0LfQsNCz0LDQu9GM0L3RgyDQv9C10YDQtdCy0ZbRgNC60YMuINCU0LvRjyDQsdGW0LvRjNGIINC00L7QutC70LDQtNC90L7RlyAiCisi0L/QtdGA0LXQstGW0YDQutC4INC60L7RgNC40YHRgtGD0LnRgtC10YHRjCDQv9GA0L7Qs9GA0LDQvNC+0Y4gZTJmc2NrLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvaW50ZXJmYWNlLmM6MjAzCittc2dpZCAiU29ycnksIGNhbid0IG1vdmUgdGhlIHN0YXJ0IG9mIGV4dDIgcGFydGl0aW9ucyB5ZXQhIgorbXNnc3RyICLQndCw0LbQsNC70YwsINC/0LXRgNC10LzRltGJ0LXQvdC90Y8g0L/QvtGH0LDRgtC60YMg0YDQvtC30LTRltC70ZbQsiDRgtC40L/RgyBleHQyINGJ0LUg0L3QtSDQv9GW0LTRgtGA0LjQvNGD0ZTRgtGM0YHRjyEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfYnVmZmVyLmM6ODIKK21zZ2lkICJDb3VsZG4ndCBmbHVzaCBidWZmZXIgY2FjaGUhIgorbXNnc3RyICLQndC1INCy0LTQsNGU0YLRjNGB0Y8g0L7Rh9C40YHRgtC40YLQuCDQsdGD0YTQtdGAINC60LXRiNGDISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9ta2ZzLmM6MTYyCittc2dpZCAid3JpdGluZyBwZXItZ3JvdXAgbWV0YWRhdGEiCittc2dzdHIgItC30LDQv9C40YHRg9Cy0LDQvdC90Y8g0LzQtdGC0LDQtNCw0L3QuNGFINCz0YDRg9C/IgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX21rZnMuYzo1NjQKK21zZ2lkICJGaWxlIHN5c3RlbSB0b28gc21hbGwgZm9yIGV4dDIuIgorbXNnc3RyICLQpNCw0LnQu9C+0LLQsCDRgdC40YHRgtC10LzQsCDQt9Cw0L3QsNC00YLQviDQvNCw0LvQtdC90YzQutCwINC00LvRjyBleHQyLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jYWxjLmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgbmVlZCAlcyBvZiBmcmVlIGRpc2sgc3BhY2UgdG8gc2hyaW5rIHRoaXMgcGFydGl0aW9uIHRvIHRoaXMgc2l6ZS4gICIKKyJDdXJyZW50bHksIG9ubHkgJXMgaXMgZnJlZS4iCittc2dzdHIgIiIKKyLQndC10L7QsdGF0ZbQtNC90L4gJXMg0LLRltC70YzQvdC+0LPQviDQv9GA0L7RgdGC0L7RgNGDLCDRidC+0LEg0LfQvNC10L3RiNC40YLQuCDRgNC+0LfQtNGW0Lsg0LTQviDRgtCw0LrQvtCz0L4g0YDQvtC30LzRltGA0YMgKNC30LDRgNCw0LcgIgorItGDINCy0LDRgSDQstGW0LvRjNC90L4g0LvQuNGI0LUgJXMpLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb250ZXh0LmM6NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNsdXN0ZXIgc3RhcnQgZGVsdGEgPSAlZCwgd2hpY2ggaXMgbm90IGEgbXVsdGlwbGUgb2YgdGhlIGNsdXN0ZXIgc2l6ZSAlZC4iCittc2dzdHIgIiIKKyLQmtC70LDRgdGC0LXRgCDQv9C+0YfQuNC90LDRlNGC0YzRgdGPINC30ZYg0LfRgdGD0LLQvtC8ICVkLCDRidC+INC90LUg0ZQg0YbRltC70LjQvCDRh9C40YHQu9C+0Lwg0LrQu9Cw0YHRgtC10YDRltCyINGA0L7Qt9C80ZbRgNGDICVkLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9mYXQuYzozMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGFydGl0aW9uIHRvbyBiaWcvc21hbGwgZm9yIGEgJXMgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICLQoNC+0LfQtNGW0Lsg0L3QsNC00YLQviDQstC10LvQuNC60LjQuS/QvNCw0LvQuNC5INC00LvRjyDRhNCw0LnQu9C+0LLQvtGXINGB0LjRgdGC0LXQvNC4INGC0LjQv9GDICVzLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9mYXQuYzo0NzQKK21zZ2lkICIiCisiVGhlIEZBVHMgZG9uJ3QgbWF0Y2guICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRoaXMgbWVhbnMsIHRoZW4gc2VsZWN0ICIKKyJjYW5jZWwsIHJ1biBzY2FuZGlzayBvbiB0aGUgZmlsZSBzeXN0ZW0sIGFuZCB0aGVuIGNvbWUgYmFjay4iCittc2dzdHIgIiIKKyLQmtC+0L/RltGXIEZBVCDQvdC1INGB0L/RltCy0L/QsNC00LDRjtGC0YwuINCv0LrRidC+INCy0Lgg0L3QtSDQt9C90LDRlNGC0LUsINGJ0L4g0YbQtSDQvtC30L3QsNGH0LDRlCwg0LLQuNCx0LXRgNGW0YLRjCAiCisiXCLQodC60LDRgdGD0LLQsNGC0LhcIiwg0LfQsNC/0YPRgdGC0ZbRgtGMIHNjYW5kaXNrINC00LvRjyDRhNCw0LnQu9C+0LLQvtGXINGB0LjRgdGC0LXQvNC4LCDQsCDQv9C+0YLRltC8INC/0L7QstGC0L7RgNGW0YLRjCDRhtGOICIKKyLQutC+0LzQsNC90LTRgy4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvZmF0LmM6NTE0Cittc2dpZCAiVGhlcmUgYXJlIG5vIHBvc3NpYmxlIGNvbmZpZ3VyYXRpb25zIGZvciB0aGlzIEZBVCB0eXBlLiIKK21zZ3N0ciAi0JTQu9GPINGG0YzQvtCz0L4g0YLQuNC/0YMgRkFUINC90LXQvNCw0ZQg0LTQvtC/0YPRgdGC0LjQvNC40YUg0LrQvtC90YTRltCz0YPRgNCw0YbRltC5LiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9mYXQuYzo1MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZpbGUgc3lzdGVtIGRvZXNuJ3QgaGF2ZSBleHBlY3RlZCBzaXplcyBmb3IgV2luZG93cyB0byBsaWtlIGl0LiAgQ2x1c3RlciAiCisic2l6ZSBpcyAlZGsgKCVkayBleHBlY3RlZCk7IG51bWJlciBvZiBjbHVzdGVycyBpcyAlZCAoJWQgZXhwZWN0ZWQpOyBzaXplIG9mICIKKyJGQVRzIGlzICVkIHNlY3RvcnMgKCVkIGV4cGVjdGVkKS4iCittc2dzdHIgIiIKKyJXaW5kb3dzINC90LUg0L/RltC00YLRgNC40LzRg9GUINGE0LDQudC70L7QstGDINGB0LjRgdGC0LXQvNGDLCDRidC+INC80LDRlCDRgtCw0LrRliDRgNC+0LfQvNGW0YDQuC4g0KDQvtC30LzRltGAINC60LvQsNGB0YLQtdGA0LAgJSIKKyJkayAo0L7Rh9GW0LrRg9Cy0LDQu9C+0YHRjCAlZGspOyDQutGW0LvRjNC60ZbRgdGC0Ywg0LrQu9Cw0YHRgtC10YDRltCyICVkICjQvtGH0ZbQutGD0LLQsNC70L7RgdGMICVkKTsg0YDQvtC30LzRltGAIEZBVCAlZCAiCisi0YHQtdC60YLQvtGA0ZbQsiAo0L7Rh9GW0LrRg9Cy0LDQu9C+0YHRjCAlZCkuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jOjU0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRmlsZSBzeXN0ZW0gaXMgcmVwb3J0aW5nIHRoZSBmcmVlIHNwYWNlIGFzICVkIGNsdXN0ZXJzLCBub3QgJWQgY2x1c3RlcnMuIgorbXNnc3RyICIiCisi0KTQsNC50LvQvtCy0LAg0YHQuNGB0YLQtdC80LAg0L/QvtCy0ZbQtNC+0LzQu9GP0ZQg0L/RgNC+INCy0ZbQu9GM0L3QuNC5INC/0YDQvtGB0YLRltGAICVkINC60LvQsNGB0YLQtdGA0ZbQsiwg0LAg0L3QtSAlZCAiCisi0LrQu9Cw0YHRgtC10YDRltCyLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9mYXQuYzo4NzQKK21zZ2lkICIiCisiR05VIFBhcnRlZCB3YXMgbWlzY29tcGlsZWQ6IHRoZSBGQVQgYm9vdCBzZWN0b3Igc2hvdWxkIGJlIDUxMiBieXRlcy4gIEZBVCAiCisic3VwcG9ydCB3aWxsIGJlIGRpc2FibGVkLiIKK21zZ3N0ciAiIgorIkdOVSBwYXJ0ZWQg0LfRltCx0YDQsNC90L4g0L3QtdC/0YDQsNCy0LjQu9GM0L3Qvjog0LfQsNCy0LDQvdGC0LDQttGD0LLQsNC70YzQvdC40Lkg0YHQtdC60YLQvtGAIEZBVCDQv9C+0LLQuNC90LXQvSDQvNCw0YLQuCAiCisi0YDQvtC30LzRltGAIDUxMiDQsdCw0LnRgtGW0LIuINCf0ZbQtNGC0YDQuNC80LrQsCBGQVQg0LLQuNC80LrQvdC10L3QsC4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6MTU5Cittc2dpZCAiIgorIlRoZXJlJ3Mgbm90IGVub3VnaCByb29tIGluIHRoZSByb290IGRpcmVjdG9yeSBmb3IgYWxsIG9mIHRoZSBmaWxlcy4gIEVpdGhlciAiCisiY2FuY2VsLCBvciBpZ25vcmUgdG8gbG9zZSB0aGUgZmlsZXMuIgorbXNnc3RyICIiCisi0J3QtSDQstC40YHRgtCw0YfQsNGUINC/0YDQvtGB0YLQvtGA0YMg0LTQu9GPINCy0YHRltGFINGE0LDQudC70ZbQsiDQsiDQutC+0YDQtdC90LXQstC+0LzRgyDQutCw0YLQsNC70L7Qt9GWLiDQktC40LHQtdGA0ZbRgtGMICIKKyJcItCh0LrQsNGB0YPQstCw0YLQuFwiLCDRj9C60YnQviDQv9GA0L7RltCz0L3QvtGA0YPRlNGC0LUsINGG0LUg0L/RgNC40LfQstC10LTQtSDQtNC+INCy0YLRgNCw0YLQuCAg0YTQsNC50LvRltCyLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzozMDAKK21zZ2lkICJFcnJvciB3cml0aW5nIHRvIHRoZSByb290IGRpcmVjdG9yeS4iCittc2dzdHIgItCf0L7QvNC40LvQutCwINC30LDQv9C40YHRg9Cy0LDQvdC90Y8g0YMg0LrQvtGA0LXQvdC10LLQuNC5INC60LDRgtCw0LvQvtCzLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo0ODkKK21zZ2lkICJJZiB5b3UgbGVhdmUgeW91ciBmaWxlIHN5c3RlbSBhcyBGQVQxNiwgdGhlbiB5b3Ugd2lsbCBoYXZlIG5vIHByb2JsZW1zLiIKK21zZ3N0ciAiIgorItCv0LrRidC+INC30LDQu9C40YjQuNGC0Lgg0YTQsNC50LvQvtCy0YMg0YHQuNGB0YLQtdC80YMg0Y/QuiBGQVQxNiwg0YLQvtC00ZYg0YMg0LLQsNGBINC90LUg0LLQuNC90LjQutCw0YLQuNC80LUg0L/RgNC+0LHQu9C10LwuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjQ5MgorbXNnaWQgIiIKKyJJZiB5b3UgY29udmVydCB0byBGQVQxNiwgYW5kIE1TIFdpbmRvd3MgaXMgaW5zdGFsbGVkIG9uIHRoaXMgcGFydGl0aW9uLCB0aGVuICIKKyJ5b3UgbXVzdCByZS1pbnN0YWxsIHRoZSBNUyBXaW5kb3dzIGJvb3QgbG9hZGVyLiAgSWYgeW91IHdhbnQgdG8gZG8gdGhpcywgeW91ICIKKyJzaG91bGQgY29uc3VsdCB0aGUgUGFydGVkIG1hbnVhbCAob3IgeW91ciBkaXN0cmlidXRpb24ncyBtYW51YWwpLiIKK21zZ3N0ciAiIgorItCv0LrRidC+INCy0Lgg0L/QtdGA0LXRgtCy0L7RgNGO0ZTRgtC1INGE0LDQudC70L7QstGDINGB0LjRgdGC0LXQvNGDINGA0L7Qt9C00ZbQu9GDINC3IFdpbmRvd3Mg0YMg0YDQvtC30LTRltC7IEZBVDE2LCDQsdGD0LTQtSAiCisi0L/QvtGC0YDRltCx0L3QviDQv9C10YDQtdCy0YHRgtCw0L3QvtCy0LjRgtC4INC30LDQstCw0L3RgtCw0LbRg9Cy0LDRhyBNUyBXaW5kb3dzLiDQlNC70Y8g0YbRjNC+0LPQviDRgdC70ZbQtCDQv9C10YDQtdCz0LvRj9C90YPRgtC4ICIKKyLQtNC+0LLRltC00LrRgyDQtyBQYXJ0ZWQgKNCw0LHQviDQv9C+0YHRltCx0L3QuNC6INC3INCy0LDRiNC+0LPQviDQtNC40YHRgtGA0LjQsdGD0YLQuNCy0YMpLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1MDAKK21zZ2lkICIiCisiSWYgeW91IGxlYXZlIHlvdXIgZmlsZSBzeXN0ZW0gYXMgRkFUMzIsIHRoZW4geW91IHdpbGwgbm90IGludHJvZHVjZSBhbnkgbmV3ICIKKyJwcm9ibGVtcy4iCittc2dzdHIgIiIKKyLQr9C60YnQviDQstC4INC30LDQu9C40YjQsNGU0YLQtSDRhNCw0LnQu9C+0LLRgyDRgdC40YHRgtC10LzRgyDRj9C6IEZBVDMyLCDRgtC+0LTRliDQvdC1INCy0LjQvdC40LrQvdC1INC90ZbRj9C60LjRhSDQvdC+0LLQuNGFICIKKyLQv9GA0L7QsdC70LXQvC4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTA0Cittc2dpZCAiIgorIklmIHlvdSBjb252ZXJ0IHRvIEZBVDMyLCBhbmQgTVMgV2luZG93cyBpcyBpbnN0YWxsZWQgb24gdGhpcyBwYXJ0aXRpb24sIHRoZW4gIgorInlvdSBtdXN0IHJlLWluc3RhbGwgdGhlIE1TIFdpbmRvd3MgYm9vdCBsb2FkZXIuICBJZiB5b3Ugd2FudCB0byBkbyB0aGlzLCB5b3UgIgorInNob3VsZCBjb25zdWx0IHRoZSBQYXJ0ZWQgbWFudWFsIChvciB5b3VyIGRpc3RyaWJ1dGlvbidzIG1hbnVhbCkuICBBbHNvLCAiCisiY29udmVydGluZyB0byBGQVQzMiB3aWxsIG1ha2UgdGhlIGZpbGUgc3lzdGVtIHVucmVhZGFibGUgYnkgTVMgRE9TLCBNUyAiCisiV2luZG93cyA5NWEsIGFuZCBNUyBXaW5kb3dzIE5ULiIKK21zZ3N0ciAiIgorItCv0LrRidC+INCy0Lgg0L/QtdGA0LXRgtCy0L7RgNC40YLQtSDRhNCw0LnQu9C+0LLRgyDRgdC40YHRgtC10LzRgyDRgNC+0LfQtNGW0LvRgyDQtyBNUyBXaW5kb3dzINGDINGA0L7Qt9C00ZbQuyBGQVQzMizQsdGD0LTQtSAiCisi0L/QvtGC0YDRltCx0L3QviDQv9C10YDQtdCy0YHRgtCw0L3QvtCy0LjRgtC4INC30LDQstCw0L3RgtCw0LbRg9Cy0LDRhyBNUyBXaW5kb3dzLiDQlNC70Y8g0YbRjNC+0LPQviDRgdC70ZbQtCDQv9C10YDQtdCz0LvRj9C90YPRgtC4ICIKKyLQtNC+0LLRltC00LrRgyDQtyBQYXJ0ZWQgKNCw0LHQviDQv9C+0YHRltCx0L3QuNC6INC3INCy0LDRiNC+0LPQviDQtNC40YHRgtGA0LjQsdGD0YLQuNCy0YMpLiDQn9C10YDQtdGC0LLQvtGA0LXQvdC90Y8g0YMgRkFUMzIgIgorItGD0L3QtdC80L7QttC70LjQstC40YLRjCDRh9C40YLQsNC90L3RjyDRhNCw0LnQu9C+0LLQvtGXINGB0LjRgdGC0LXQvNC4INC/0ZbQtCBNUyBET1MsIE1TIFdpbmRvd3MgOTVhLCDRgtCwIE1TICIKKyJXaW5kb3dzIE5ULiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgICVzICAlcyIKK21zZ3N0ciAiJXMgICVzICAlcyIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1MTkKK21zZ2lkICJXb3VsZCB5b3UgbGlrZSB0byB1c2UgRkFUMzI/IgorbXNnc3RyICLQkdCw0LbQsNGU0YLQtSDQstC40LrQvtGA0LjRgdGC0L7QstGD0LLQsNGC0LggRkFUMzI/IgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjU1MCBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjU2NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyAgJXMiCittc2dzdHIgIiVzICAlcyIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1NTEKK21zZ2lkICIiCisiVGhlIGZpbGUgc3lzdGVtIGNhbiBvbmx5IGJlIHJlc2l6ZWQgdG8gdGhpcyBzaXplIGJ5IGNvbnZlcnRpbmcgdG8gRkFUMTYuIgorbXNnc3RyICIiCisi0JfQvNGW0L3QuNGC0Lgg0YDQvtC30LzRltGAINGE0LDQudC70L7QstC+0Zcg0YHQuNGB0YLQtdC80Lgg0L3QsCDQstC60LDQt9Cw0L3QuNC5INGA0L7Qt9C80ZbRgCDQvNC+0LbQvdCwINC70LjRiNC1INC/0YDQuCAiCisi0L/QtdGA0LXRgtCy0L7RgNC10L3QvdGWINC90LAgRkFUMTYuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjU2NworbXNnaWQgIiIKKyJUaGUgZmlsZSBzeXN0ZW0gY2FuIG9ubHkgYmUgcmVzaXplZCB0byB0aGlzIHNpemUgYnkgY29udmVydGluZyB0byBGQVQzMi4iCittc2dzdHIgIiIKKyLQl9C80ZbQvdC40YLQuCDRgNC+0LfQvNGW0YAg0YTQsNC50LvQvtCy0L7RlyDRgdC40YHRgtC10LzQuCDQvdCwINCy0LrQsNC30LDQvdC40Lkg0YDQvtC30LzRltGAINC80L7QttC90LAg0LvQuNGI0LUg0L/RgNC4ICIKKyLQv9C10YDQtdGC0LLQvtGA0LXQvdC90ZYg0L3QsCBGQVQzMi4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTgwCittc2dpZCAiIgorIkdOVSBQYXJ0ZWQgY2Fubm90IHJlc2l6ZSB0aGlzIHBhcnRpdGlvbiB0byB0aGlzIHNpemUuICBXZSdyZSB3b3JraW5nIG9uIGl0ISIKK21zZ3N0ciAiIgorIkdOVSBQYXJ0ZWQg0L3QtdC30LTQsNGC0LXQvSDQt9C80ZbQvdC40YLQuCDRgNC+0LfQvNGW0YAg0YDQvtC30LTRltC70YMg0L3QsCDQstC60LDQt9Cw0L3QtSDQt9C90LDRh9C10L3QvdGPLiDQnNC4INC90LDQtCDRhtC40LwgIgorItC/0YDQsNGG0Y7RlNC80L4hIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo0OSBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo1NgorbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyBhbiBpbnZhbGlkIHNpZ25hdHVyZSBmb3IgYSBGQVQgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICLQpNCw0LnQu9C+0LLQsCDRgdC40YHRgtC10LzQsCDQvNGW0YHRgtC40YLRjCDQvdC10L/RgNCw0LLQuNC70YzQvdGDINGB0LjQs9C90LDRgtGD0YDRgyDRhNCw0LnQu9C+0LLQvtGXINGB0LjRgdGC0LXQvNC4IEZBVC4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjY0Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGludmFsaWQgc2VjdG9yIHNpemUgZm9yIGEgRkFUIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAi0KTQsNC50LvQvtCy0LAg0YHQuNGB0YLQtdC80LAg0LzQsNGUINC90LXQv9GA0LDQstC40LvRjNC90LjQuSDRgNC+0LfQvNGW0YAg0YHQtdC60YLQvtGA0LAg0YTQsNC50LvQvtCy0L7RlyDRgdC40YHRgtC10LzQuCBGQVQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo3MQorbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyBhbiBpbnZhbGlkIGNsdXN0ZXIgc2l6ZSBmb3IgYSBGQVQgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICLQpNCw0LnQu9C+0LLQsCDRgdC40YHRgtC10LzQsCDQvNCw0ZQg0L3QtdC/0YDQsNCy0LjQu9GM0L3QuNC5INGA0L7Qt9C80ZbRgCDQutC70LDRgdGC0LXRgNCwINGE0LDQudC70L7QstC+0Zcg0YHQuNGB0YLQtdC80LggRkFULiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6NzgKK21zZ2lkICIiCisiRmlsZSBzeXN0ZW0gaGFzIGFuIGludmFsaWQgbnVtYmVyIG9mIHJlc2VydmVkIHNlY3RvcnMgZm9yIGEgRkFUIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAi0KMg0YTQsNC50LvQvtCy0ZbQuSDRgdC40YHRgtC10LzRliDQvdC10L/RgNCw0LLQuNC70YzQvdCwINC60ZbQu9GM0LrRltGB0YLRjCDRgNC10LfQtdGA0LLQvdC40YUg0YHQtdC60YLQvtGA0ZbQsiBGQVQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo4NQorbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyBhbiBpbnZhbGlkIG51bWJlciBvZiBGQVRzLiIKK21zZ3N0ciAi0KMg0YTQsNC50LvQvtCy0ZbQuSDRgdC40YHRgtC10LzRliDQvdC10L/RgNCw0LLQuNC70YzQvdC1INGH0LjRgdC70L4g0LrQvtC/0ZbQuSBGQVQuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzoxMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgZmlsZSBzeXN0ZW0gaGFzIGEgbG9naWNhbCBzZWN0b3Igc2l6ZSBvZiAlZC4gIEdOVSBQYXJ0ZWQgaXMga25vd24gbm90ICIKKyJ0byB3b3JrIHByb3Blcmx5IHdpdGggc2VjdG9yIHNpemVzIG90aGVyIHRoYW4gNTEyIGJ5dGVzLiIKK21zZ3N0ciAiIgorItCk0LDQudC70L7QstCwINGB0LjRgdGC0LXQvNCwINC80LDRlCDQu9C+0LPRltGH0L3QuNC5INGA0L7Qt9C80ZbRgCDRgdC10LrRgtC+0YDQsCAlZC4g0JLQstCw0LbQsNGU0YLRjNGB0Y8sINGJ0L4gR05VIFBhcnRlZCAiCisi0L/RgNCw0YbRjtGUINC90LXQv9GA0LDQstC40LvRjNC90L4g0Lcg0YHQtdC60YLQvtGA0LDQvNC4LCDRgNC+0LfQvNGW0YAg0Y/QutC40YUg0L3QtSDQtNC+0YDRltCy0L3RjtGUIDUxMiDQsdCw0LnRgi4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjE2NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGUgc3lzdGVtJ3MgQ0hTIGdlb21ldHJ5IGlzICglZCwgJWQsICVkKSwgd2hpY2ggaXMgaW52YWxpZC4gIFRoZSAiCisicGFydGl0aW9uIHRhYmxlJ3MgQ0hTIGdlb21ldHJ5IGlzICglZCwgJWQsICVkKS4gIElmIHlvdSBzZWxlY3QgSWdub3JlLCB0aGUgIgorImZpbGUgc3lzdGVtJ3MgQ0hTIGdlb21ldHJ5IHdpbGwgYmUgbGVmdCB1bmNoYW5nZWQuICBJZiB5b3Ugc2VsZWN0IEZpeCwgdGhlICIKKyJmaWxlIHN5c3RlbSdzIENIUyBnZW9tZXRyeSB3aWxsIGJlIHNldCB0byBtYXRjaCB0aGUgcGFydGl0aW9uIHRhYmxlJ3MgQ0hTICIKKyJnZW9tZXRyeS4iCittc2dzdHIgIiIKKyLQk9C10L7QvNC10YLRgNGW0Y8gQ0hTINGE0LDQudC70L7QstC+0Zcg0YHQuNGB0YLQtdC80Lgg0YHRgtCw0L3QvtCy0LjRgtGMICglZCwgJWQsICVkKSwg0YnQviDRlCDQvdC10L/RgNCw0LLQuNC70YzQvdC40LwuICAiCisi0JPQtdC+0LzQtdGC0YDRltGPIENIUyDRgtCw0LHQu9C40YbRliDRgNC+0LfQtNGW0LvRltCyINGB0YLQsNC90L7QstC40YLRjCAoJWQsICVkLCAlZCkuICDQr9C60YnQviDQstC4INCy0LjQsdC10YDQtdGC0LUgIgorItCG0LPQvdC+0YDRg9Cy0LDRgtC4LCDQs9C10L7QvNC10YLRgNGW0Y4gQ0hTINGE0LDQudC70L7QstC+0Zcg0YHQuNGB0YLQtdC80Lgg0LHRg9C00LUg0LfQsNC70LjRiNC10L3QviDQsdC10Lcg0LfQvNGW0L0uICDQr9C60YnQviDQstC4ICIKKyLQvtCx0LXRgNC10YLQtSDQktC40L/RgNCw0LLQuNGC0LgoRml4KSwg0LPQtdC+0LzQtdGC0YDRltGOIENIUyDRhNCw0LnQu9C+0LLQvtGXINGB0LjRgdGC0LXQvNC4INCx0YPQtNC1INC/0YDQuNCy0LXQtNC10L3QviDRgyAiCisi0LLRltC00L/QvtCy0ZbQtNC90ZbRgdGC0Ywg0LTQviDQs9C10L7QvNC10YLRgNGW0ZcgQ0hTINGC0LDQsdC70LjRhtGWINGA0L7Qt9C00ZbQu9GW0LIuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzoyMTMKK21zZ2lkICJGQVQgYm9vdCBzZWN0b3Igc2F5cyBsb2dpY2FsIHNlY3RvciBzaXplIGlzIDAuICBUaGlzIGlzIHdlaXJkLiAiCittc2dzdHIgIiIKKyLQl9Cw0LLQsNC90YLQsNC20YPQstCw0LvRjNC90LjQuSDRgdC10LrRgtC+0YAgRkFUINC80ZbRgdGC0LjRgtGMINGA0L7Qt9C80ZbRgCDQu9C+0LPRltGH0L3QvtCz0L4g0YHQtdC60YLQvtGA0LAsINGJ0L4g0LTQvtGA0ZbQstC90Y7RlCAwLiAiCisi0KbQtSDQtNC40LLQvdC+LiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6MjE5Cittc2dpZCAiRkFUIGJvb3Qgc2VjdG9yIHNheXMgdGhlcmUgYXJlIG5vIEZBVCB0YWJsZXMuICBUaGlzIGlzIHdlaXJkLiAiCittc2dzdHIgIiIKKyLQoyDQt9Cw0LLQsNC90YLQsNC20YPQstCw0LvRjNC90L7QvNGDINGB0LXQutGC0L7RgNGWIEZBVCDQvdC1INC80ZbRgdGC0LjRgtGM0YHRjyDRltC90YTQvtGA0LzQsNGG0ZbRjyDQv9GA0L4g0YLQsNCx0LvQuNGG0ZYgRkFULiDQptC1ICIKKyLQtNC40LLQvdC+LiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6MjI1Cittc2dpZCAiRkFUIGJvb3Qgc2VjdG9yIHNheXMgY2x1c3RlcnMgYXJlIDAgc2VjdG9ycy4gIFRoaXMgaXMgd2VpcmQuICIKK21zZ3N0ciAiIgorItCjINCy0ZbQtNC/0L7QstGW0LTQvdC+0YHRgtGWINC00L4g0LfQsNCy0LDQvdGC0LDQttGD0LLQsNC70YzQvdC+0LPQviDRgdC10LrRgtC+0YDQsCBGQVQsINC60LvQsNGB0YLQtdGAINC80ZbRgdGC0LjRgtGMIDAgIgorItGB0LXQutGC0L7RgNGW0LIuINCm0LUg0LTQuNCy0L3Qvi4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjIzNQorbXNnaWQgIkZpbGUgc3lzdGVtIGlzIEZBVDEyLCB3aGljaCBpcyB1bnN1cHBvcnRlZC4iCittc2dzdHIgItCk0LDQudC70L7QstGWINGB0LjRgdGC0LXQvNC4INGC0LjQv9GDIEZBVDEyINC90LUg0L/RltC00YLRgNC40LzRg9GO0YLRjNGB0Y8uIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo0MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBpbmZvcm1hdGlvbiBzZWN0b3IgaGFzIHRoZSB3cm9uZyBzaWduYXR1cmUgKCV4KS4gIFNlbGVjdCBjYW5jZWwgZm9yIG5vdywgIgorImFuZCBzZW5kIGluIGEgYnVnIHJlcG9ydC4gIElmIHlvdSdyZSBkZXNwZXJhdGUsIGl0J3MgcHJvYmFibHkgc2FmZSB0byBpZ25vcmUuIgorbXNnc3RyICIiCisi0IbQvdGE0L7RgNC80LDRhtGW0LnQvdC40Lkg0YHQtdC60YLQvtGAINC80ZbRgdGC0LjRgtGMINC90LXQv9GA0LDQstC40LvRjNC90YMg0YHQuNCz0L3QsNGC0YPRgNGDICgleCkuINCS0LjQsdC10YDRltGC0YwgXCLQodC60LDRgdGD0LLQsNGC0LgiCisiXCIg0YLQsCDQstGW0LTQv9GA0LDQstGC0LUg0L/QvtCy0ZbQtNC+0LzQu9C10L3QvdGPINC/0YDQviDQv9C+0LzQuNC70LrRgy4g0K/QutGJ0L4g0LLQuCDQstGC0YDQsNGC0LjQu9C4INC90LDQtNGW0Y4sINGC0L7QtNGWINC80L7QttC90LAgIgorItC/0YDQvtGW0LPQvdC+0YDRg9Cy0LDRgtC4INGG0Y4g0L/RgNC+0LHQu9C10LzRgy4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY291bnQuYzoxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIGRpcmVjdG9yeSBlbnRyeSBmb3IgJXM6IGZpcnN0IGNsdXN0ZXIgaXMgdGhlIGVuZCBvZiBmaWxlIG1hcmtlci4iCittc2dzdHIgIiIKKyLQndC10L/RgNCw0LLQuNC70YzQvdC40Lkg0LXQu9C10LzQtdC90YIg0LrQsNGC0LDQu9C+0LPRgyAlczog0L/QtdGA0YjQuNC5INC60LvQsNGB0YLQtdGAINGUINC60ZbQvdGG0LXQvCDQvNCw0YDQutC10YDQsCDRhNCw0LnQu9CwLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb3VudC5jOjE2NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQmFkIEZBVDogdW50ZXJtaW5hdGVkIGNoYWluIGZvciAlcy4gIFlvdSBzaG91bGQgcnVuIGRvc2ZzY2sgb3Igc2NhbmRpc2suIgorbXNnc3RyICIiCisi0J/QvtC80LjQu9C60LAg0YMgRkFUOiDQvdC10LfQsNCy0LXRgNGI0LXQvdC40Lkg0LvQsNC90YbRjtCzINC00LvRjyAlcy4g0J/QvtGC0YDRltCx0L3QviDQt9Cw0L/Rg9GB0YLQuNGC0LggZG9zZnNjayDQsNCx0L4gIgorInNjYW5kaXNrLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb3VudC5jOjE3NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQmFkIEZBVDogY2x1c3RlciAlZCBvdXRzaWRlIGZpbGUgc3lzdGVtIGluIGNoYWluIGZvciAlcy4gIFlvdSBzaG91bGQgcnVuICIKKyJkb3Nmc2NrIG9yIHNjYW5kaXNrLiIKK21zZ3N0ciAiIgorItCf0L7QvNC40LvQutCwINGDIEZBVDog0LrQu9Cw0YHRgtC10YAgJWQg0LfQvdCw0YXQvtC00LjRgtGM0YHRjyDQv9C+0LfQsCDQvNC10LbQsNC80Lgg0YTQsNC50LvQvtCy0L7RlyDRgdC40YHRgtC10LzQuCDRgyDQu9Cw0L3RhtGO0LPRgyAiCisi0LTQu9GPICVzLiDQn9C+0YLRgNGW0LHQvdC+INC30LDQv9GD0YHRgtC40YLQuCBkb3Nmc2NrINCw0LHQviBzY2FuZGlzay4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY291bnQuYzoxODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkJhZCBGQVQ6IGNsdXN0ZXIgJWQgaXMgY3Jvc3MtbGlua2VkIGZvciAlcy4gIFlvdSBzaG91bGQgcnVuIGRvc2ZzY2sgb3IgIgorInNjYW5kaXNrLiIKK21zZ3N0ciAiIgorItCf0L7QvNC40LvQutCwINGDIEZBVDog0L/QtdGA0LXRhdGA0LXRgdC90LUg0L/QvtGB0LjQu9Cw0L3QvdGPINGDINC60LvQsNGB0YLQtdGA0ZYgJWQg0LTQu9GPICVzLiDQn9C+0YLRgNGW0LHQvdC+INC30LDQv9GD0YHRgtC40YLQuCAiCisiZG9zZnNjayDQsNCx0L4gc2NhbmRpc2suIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvdW50LmM6MjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzICVkaywgYnV0IGl0IGhhcyAlZCBjbHVzdGVycyAoJWRrKS4iCittc2dzdHIgIiVzINC00L7RgNGW0LLQvdGO0ZQgJWRrLCDQsNC70LUg0LzQsNGUICVkINC60LvQsNGB0YLQtdGA0ZbQsiAoJWRrKS4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY291bnQuYzoyNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmaWxlICVzIGlzIG1hcmtlZCBhcyBhIHN5c3RlbSBmaWxlLiAgVGhpcyBtZWFucyBtb3ZpbmcgaXQgY291bGQgY2F1c2UgIgorInNvbWUgcHJvZ3JhbXMgdG8gc3RvcCB3b3JraW5nLiIKK21zZ3N0ciAiIgorItCk0LDQudC7ICVzINC/0L7Qt9C90LDRh9C10L3QuNC5INGP0Log0YHQuNGB0YLQtdC80L3QuNC5INGE0LDQudC7LiDQptC1INC+0LfQvdCw0YfQsNGULCDRidC+INC50L7Qs9C+INC/0LXRgNC10LzRltGJ0LXQvdC90Y8g0LzQvtC20LUgIgorItC/0YDQuNC30LLQtdGB0YLQuCDQtNC+INC/0YDQuNC/0LjQvdC10L3QvdGPINGA0L7QsdC+0YLQuCDQtNC10Y/QutC40YUg0L/RgNC+0LPRgNCw0LwuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3RhYmxlLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGQVQgJWQgbWVkaWEgJXggZG9lc24ndCBtYXRjaCB0aGUgYm9vdCBzZWN0b3IncyBtZWRpYSAleC4gIFlvdSBzaG91bGQgIgorInByb2JhYmx5IHJ1biBzY2FuZGlzay4iCittc2dzdHIgIiIKKyJGQVQgJWQg0L3QvtGB0ZbQuSAleCDQvdC1INCy0ZbQtNC/0L7QstGW0LTQsNGUINC30LDQstCw0L3RgtCw0LbRg9Cy0LDQu9GM0L3QuNC8INGB0LXQutGC0L7RgNCw0Lwg0L3QvtGB0ZbRjyAleC4g0J/QvtGC0YDRltCx0L3QviAiCisi0LfQsNC/0YPRgdGC0LjRgtC4IGRvc2ZzY2sg0LDQsdC+IHNjYW5kaXNrLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC90YWJsZS5jOjI2OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYXRfdGFibGVfc2V0OiBjbHVzdGVyICVsZCBvdXRzaWRlIGZpbGUgc3lzdGVtIgorbXNnc3RyICJmYXRfdGFibGVfc2V0OiDQutC70LDRgdGC0LXRgCAlbGQg0LfQvdCw0YXQvtC00LjRgtGM0YHRjyDQv9C+0LfQsCDQvNC10LbQsNC80Lgg0YTQsNC50LvQvtCy0L7RlyDRgdC40YHRgtC10LzQuCIKKworIzogbGlicGFydGVkL2ZzL2ZhdC90YWJsZS5jOjMwMQorIywgYy1mb3JtYXQKK21zZ2lkICJmYXRfdGFibGVfZ2V0OiBjbHVzdGVyICVsZCBvdXRzaWRlIGZpbGUgc3lzdGVtIgorbXNnc3RyICJmYXRfdGFibGVfZ2V0OiDQutC70LDRgdGC0LXRgCAlbGQg0LfQvdCw0YXQvtC00LjRgtGM0YHRjyDQv9C+0LfQsCDQvNC10LbQsNC80Lgg0YTQsNC50LvQvtCy0L7RlyDRgdC40YHRgtC10LzQuCIKKworIzogbGlicGFydGVkL2ZzL2ZhdC90YWJsZS5jOjM0MworbXNnaWQgImZhdF90YWJsZV9hbGxvY19jbHVzdGVyOiBubyBmcmVlIGNsdXN0ZXJzIgorbXNnc3RyICJmYXRfdGFibGVfYWxsb2NfY2x1c3Rlcjog0L3QtdC80LDRlCDQstGW0LvRjNC90LjRhSDQutC70LDRgdGC0LXRgNGW0LIiCisKKyM6IGxpYnBhcnRlZC9mcy9saW51eF9zd2FwL2xpbnV4X3N3YXAuYzoyNzUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVucmVjb2duaXNlZCBvbGQgc3R5bGUgbGludXggc3dhcCBzaWduYXR1cmUgJyUxMHMnLiIKK21zZ3N0ciAi0J3QtdCy0ZbQtNC+0LzQsCDRgdC40LPQvdCw0YLRg9GA0LAgJyUxMHMnINGA0L7Qt9C00ZbQu9GDINC/0ZbQtNC60LDRh9C60LggbGludXguIgorCisjOiBsaWJwYXJ0ZWQvZnMvbGludXhfc3dhcC9saW51eF9zd2FwLmM6MzE4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVbnJlY29nbmlzZWQgbmV3IHN0eWxlIGxpbnV4IHN3YXAgc2lnbmF0dXJlICclMTBzJy4iCittc2dzdHIgItCd0LXQstGW0LTQvtC80LAg0YHQuNCz0L3QsNGC0YPRgNCwICclMTBzJyDRgNC+0LfQtNGW0LvRgyDQv9GW0LTQutCw0YfQutC4IGxpbnV4LiIKKworIzogbGlicGFydGVkL2ZzL2xpbnV4X3N3YXAvbGludXhfc3dhcC5jOjM1OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVW5yZWNvZ25pc2VkIHN3c3VzcCBsaW51eCBzd2FwIHNpZ25hdHVyZSAnJTlzJy4iCittc2dzdHIgItCd0LXQstGW0LTQvtC80LAg0YHQuNCz0L3QsNGC0YPRgNCwICclMTBzJyDRgNC+0LfQtNGW0LvRgyDQv9GW0LTQutCw0YfQutC4IGxpbnV4LiIKKworIzogbGlicGFydGVkL2ZzL2xpbnV4X3N3YXAvbGludXhfc3dhcC5jOjQzNAorbXNnaWQgIlRvbyBtYW55IGJhZCBwYWdlcy4iCittc2dzdHIgItCd0LDQtNGC0L4g0LHQsNCz0LDRgtC+INC/0L7RiNC60L7QtNC20LXQvdC40YUg0YHRgtC+0YDRltC90L7Qui4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvYWR2ZnMuYzoxMjEgbGlicGFydGVkL2ZzL2hmcy9hZHZmc19wbHVzLmM6MTIyCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NDE0IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzo1MDgKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjUzOSBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo2NTgKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjc3MgorbXNnaWQgIlRoZSBmaWxlIHN5c3RlbSBjb250YWlucyBlcnJvcnMuIgorbXNnc3RyICLQpNCw0LnQu9C+0LLQsCDRgdC40YHRgtC10LzQsCDQvNGW0YHRgtC40YLRjCDQv9C+0LzQuNC70LrQuC4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvYWR2ZnNfcGx1cy5jOjI4NworbXNnaWQgIkJhZCBibG9ja3MgY291bGQgbm90IGJlIHJlYWQuIgorbXNnc3RyICLQn9C+0YjQutC+0LTQttC10L3RliDQsdC70L7QutC4INC90LUg0LLQtNCw0ZTRgtGM0YHRjyDQv9GA0L7Rh9C40YLQsNGC0LguIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2NhY2hlLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUcnlpbmcgdG8gcmVnaXN0ZXIgYW4gZXh0ZW50IHN0YXJ0aW5nIGF0IGJsb2NrIDB4JVgsIGJ1dCBhbm90aGVyIG9uZSBhbHJlYWR5ICIKKyJleGlzdHMgYXQgdGhpcyBwb3NpdGlvbi4gIFlvdSBzaG91bGQgY2hlY2sgdGhlIGZpbGUgc3lzdGVtISIKK21zZ3N0ciAiIgorItCh0L/RgNC+0LHQsCDQt9Cw0YDQtdGU0YHRgtGA0YPQstCw0YLQuCDQtdC60YHRgtC10L3Rgiwg0L4g0L/QvtGH0LjQvdCw0ZTRgtGM0YHRjyDQtyDQsdC70L7QutGDIDB4JVgsINCw0LvQtSDQsiDRhtGW0Lkg0L/QvtC30LjRhtGW0ZcgIgorItCy0LbQtSDRltGB0L3Rg9GUINGW0L3RiNC40LkuINCh0LvRltC0INC/0LXRgNC10LLRltGA0LjRgtC4INGE0LDQudC70L7QstGDINGB0LjRgdGC0LXQvNGDISIKKworIzogbGlicGFydGVkL2ZzL2hmcy9jYWNoZS5jOjIxNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVHJ5aW5nIHRvIG1vdmUgYW4gZXh0ZW50IGZyb20gYmxvY2sgT3glWCB0byBibG9jayBPeCVYLCBidXQgYW5vdGhlciBvbmUgIgorImFscmVhZHkgZXhpc3RzIGF0IHRoaXMgcG9zaXRpb24uICBUaGlzIHNob3VsZCBub3QgaGFwcGVuISIKK21zZ3N0ciAiIgorItCh0L/RgNC+0LHQsCDQv9C10YDQtdC80ZbRgdGC0LjRgtC4INC10LrRgdGC0LXQvdGCINC3INCx0LvQvtC60YMgT3glWCDRgyDQsdC70L7QuiBPeCVYLCDQsNC70LUg0LIg0YbRltC5INC/0L7Qt9C40YbRltGXINCy0LbQtSAiCisi0ZbRgdC90YPRlCDRltC90YjQuNC5LiAg0KbRjNC+0LPQviDQvdC1INC/0L7QstC40L3QvdC+INCx0YPRgtC4ISIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlLmM6MTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB1cGRhdGUgdGhlIGV4dGVudCBjYWNoZSBmb3IgSEZTIGZpbGUgd2l0aCBDTklEICVYLiIKK21zZ3N0ciAi0J3QtSDQstC00LDRlNGC0YzRgdGPINC+0L3QvtCy0LjRgtC4INC60LXRiCDQtdC60YHRgtC10L3RgtGDINC00LvRjyDRhNCw0LnQu9GDIEhGUyDQtyBDTklEICVYLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlLmM6MTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyB0byByZWFkIEhGUyBmaWxlIHdpdGggQ05JRCAlWCBiZWhpbmQgRU9GLiIKK21zZ3N0ciAi0KHQv9GA0L7QsdCwINC/0YDQvtGH0LjRgtCw0YLQuCDRhNCw0LnQuyBIRlMg0LcgQ05JRCAlWCDQv9C10YDQtdC0IEVPRi4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZS5jOjE5MCBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGUuYzoyMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgc2VjdG9yICVsbGkgb2YgSEZTIGZpbGUgd2l0aCBDTklEICVYLiIKK21zZ3N0ciAi0J3QtSDQstC00LDRlNGC0YzRgdGPINC30L3QsNC50YLQuCDRgdC10LrRgtC+0YAgJWxsaSDQtyDRhNCw0LnQu9GDIEhGUyDQtyBDTklEICVYLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlLmM6MjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyB0byB3cml0ZSBIRlMgZmlsZSB3aXRoIENOSUQgJVggYmVoaW5kIEVPRi4iCittc2dzdHIgItCh0L/RgNC+0LHQsCDQt9Cw0L/QuNGB0LDRgtC4INGE0LDQudC7IEhGUyDQtyBDTklEICVYINC/0LXRgNC10LQgRU9GLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlX3BsdXMuYzoxNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHVwZGF0ZSB0aGUgZXh0ZW50IGNhY2hlIGZvciBIRlMrIGZpbGUgd2l0aCBDTklEICVYLiIKK21zZ3N0ciAi0J3QtSDQstC00LDRlNGC0YzRgdGPINC+0L3QvtCy0LjRgtC4INC60LXRiCDQtdC60YHRgtC10L3RgtGDINC00LvRjyDRhNCw0LnQu9GDIEhGUysg0LcgQ05JRCAlWC4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZV9wbHVzLmM6MjAyCisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyB0byByZWFkIEhGUysgZmlsZSB3aXRoIENOSUQgJVggYmVoaW5kIEVPRi4iCittc2dzdHIgItCh0L/RgNC+0LHQsCDQv9GA0L7Rh9C40YLQsNGC0Lgg0YTQsNC50LsgSEZTKyDQtyBDTklEICVYINC/0LXRgNC10LQgRU9GLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlX3BsdXMuYzoyMTMgbGlicGFydGVkL2ZzL2hmcy9maWxlX3BsdXMuYzoyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgc2VjdG9yICVsbGkgb2YgSEZTKyBmaWxlIHdpdGggQ05JRCAlWC4iCittc2dzdHIgItCd0LUg0LLQtNCw0ZTRgtGM0YHRjyDQt9C90LDQudGC0Lgg0YHQtdC60YLQvtGAICVsbGkg0Lcg0YTQsNC50LvRgyBIRlMrINC3IENOSUQgJVguIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGVfcGx1cy5jOjI0NQorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgdG8gd3JpdGUgSEZTKyBmaWxlIHdpdGggQ05JRCAlWCBiZWhpbmQgRU9GLiIKK21zZ3N0ciAi0KHQv9GA0L7QsdCwINC30LDQv9C40YHQsNGC0Lgg0YTQsNC50LsgSEZTKyDQtyBDTklEICVYINC/0LXRgNC10LQgRU9GLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzoyMzIKK21zZ2lkICJTb3JyeSwgSEZTIGNhbm5vdCBiZSByZXNpemVkIHRoYXQgd2F5IHlldC4iCittc2dzdHIgItCg0L7Qt9C80ZbRgCBIRlMg0L3QtSDQvNC+0LbQvdCwINC30LzRltC90Y7QstCw0YLQuCDRgtCw0LrQuNC8INGB0L/QvtGB0L7QsdC+0LwuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjI2MiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjY0MQorbXNnaWQgIkRhdGEgcmVsb2NhdGlvbiBoYXMgZmFpbGVkLiIKK21zZ3N0ciAi0J/QvtC80LjQu9C60LAg0L/QtdGA0LXQvdC+0YHRgyDQtNCw0L3QuNGFLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzoyODEKK21zZ2lkICJEYXRhIHJlbG9jYXRpb24gbGVmdCBzb21lIGRhdGEgaW4gdGhlIGVuZCBvZiB0aGUgdm9sdW1lLiIKK21zZ3N0ciAi0J/RgNC4INC/0LXRgNC10L3QvtGB0ZYg0LTQsNC90LjRhSDRh9Cw0YHRgtC40L3QsCDQtNCw0L3QuNGFINC30LDQu9C40YjQuNC70LDRgdGMINC90LDQv9GA0LjQutGW0L3RhtGWINGC0L7QvNGDLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzozMjAKK21zZ2lkICJ3cml0aW5nIEhGUyBNYXN0ZXIgRGlyZWN0b3J5IEJsb2NrIgorbXNnc3RyICLQt9Cw0L/QuNGB0YPRlNGC0YzRgdGPINCz0L7Qu9C+0LLQvdC40Lkg0LHQu9C+0Log0LrQsNGC0LDQu9C+0LPRgyIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo0NjgKK21zZ2lkICJObyB2YWxpZCBIRlNbK1hdIHNpZ25hdHVyZSBoYXMgYmVlbiBmb3VuZCB3aGlsZSBvcGVuaW5nLiIKK21zZ3N0ciAi0J/RgNC4INCy0ZbQtNC60YDQuNCy0LDQvdC90ZYg0L3QtSDQstC40Y/QstC70LXQvdC+INC/0YDQsNCy0LjQu9GM0L3RgyDRgdC40LPQvdCw0YLRg9GA0YMgSEZTWytYXS4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NDc4CisjLCBjLWZvcm1hdAorbXNnaWQgIlZlcnNpb24gJWQgb2YgSEZTKyBpc24ndCBzdXBwb3J0ZWQuIgorbXNnc3RyICLQktC10YDRgdGW0Y8gJWQg0YHQuNGB0YLQtdC80LggSEZTKyDQvdC1INC/0ZbQtNGC0YDQuNC80YPRlNGC0YzRgdGPLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo0ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmVyc2lvbiAlZCBvZiBIRlNYIGlzbid0IHN1cHBvcnRlZC4iCittc2dzdHIgItCS0LXRgNGB0ZbRjyAlZCDRgdC40YHRgtC10LzQuCBIRlNYINC90LUg0L/RltC00YLRgNC40LzRg9GU0YLRjNGB0Y8uIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjY3MgorbXNnaWQgIkRhdGEgcmVsb2NhdGlvbiBsZWZ0IHNvbWUgZGF0YSBhdCB0aGUgZW5kIG9mIHRoZSB2b2x1bWUuIgorbXNnc3RyICLQn9GA0Lgg0L/QtdGA0LXQvdC+0YHRliDQtNCw0L3QuNGFINC90LDQv9GA0LjQutGW0L3RhtGWINGA0L7Qt9C00ZbQu9GDINC30LDQu9C40YjQuNC70LjRgdGMINC00LXRj9C60ZYg0LTQsNC90ZYuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjcyMAorbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdGhlIGFsbG9jYXRpb24gZmlsZS4iCittc2dzdHIgItCf0L7QvNC40LvQutCwINC30LDQv9C40YHRgyDQstC40LTRltC70LXQvdC+0LPQviDRhNCw0LnQu9GDLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo3MzUKK21zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRoZSBjb21wYXRpYmlsaXR5IHBhcnQgb2YgdGhlIGFsbG9jYXRpb24gZmlsZS4iCittc2dzdHIgItCf0L7QvNC40LvQutCwINC30LDQv9C40YHRgyDRh9Cw0YHRgtC40L3QuCDRgdGD0LzRltGB0L3QvtGB0YLRliDQstC40LTRltC70LXQvdC+0LPQviDRhNCw0LnQu9GDLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo3NTAKK21zZ2lkICJ3cml0aW5nIEhGUysgVm9sdW1lIEhlYWRlciIKK21zZ3N0ciAi0LfQsNC/0LjRgSDQt9Cw0LPQvtC70L7QstC60YMg0YLQvtC80YMgSEZTKyIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo4NTAKK21zZ2lkICJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBsb29raW5nIGZvciB0aGUgbWFuZGF0b3J5IGJhZCBibG9ja3MgZmlsZS4iCittc2dzdHIgItCf0L7QvNC40LvQutCwINC/0L7RiNGD0LrRgyDRhNCw0LnQu9GDINCy0ZbQtNC+0LzQuNGFINC/0L7RiNC60L7QtNC20LXQvdC40YUg0LHQu9C+0LrRltCyLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo5MDQKK21zZ2lkICIiCisiSXQgc2VlbXMgdGhlcmUgaXMgYW4gZXJyb3IgaW4gdGhlIEhGUyB3cmFwcGVyOiB0aGUgYmFkIGJsb2NrcyBmaWxlIGRvZXNuJ3QgIgorImNvbnRhaW4gdGhlIGVtYmVkZGVkIEhGUysgdm9sdW1lLiIKK21zZ3N0ciAiIgorItCf0L7QvNC40LvQutCwINGDINC+0LHRgNC+0LHQvdC40LrRgyBIRlM6INGE0LDQudC7INC/0L7RiNC60L7QtNC20LXQvdC40YUg0LHQu9C+0LrRltCyINC90LUg0LzRltGB0YLQuNGC0Ywg0LLQsdGD0LTQvtCy0LDQvdC40Lkg0YLQvtC8ICIKKyJIRlMrLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo5NDAKK21zZ2lkICJTb3JyeSwgSEZTKyBjYW5ub3QgYmUgcmVzaXplZCB0aGF0IHdheSB5ZXQuIgorbXNnc3RyICLQoNC+0LfQvNGW0YAgSEZTKyDQvdC1INC80L7QttC90LAg0LfQvNGW0L3RjtCy0LDRgtC4INGC0LDQutC40Lwg0YHQv9C+0YHQvtCx0L7QvC4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6OTc1Cittc2dpZCAic2hyaW5raW5nIGVtYmVkZGVkIEhGUysgdm9sdW1lIgorbXNnc3RyICLQt9C80LXQvdGI0LXQvdC90Y8g0LLQsdGD0LTQvtCy0LDQvdC+0LPQviDRgtC+0LzRgyBIRlMrIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjk5MQorbXNnaWQgIlJlc2l6aW5nIHRoZSBIRlMrIHZvbHVtZSBoYXMgZmFpbGVkLiIKK21zZ3N0ciAi0J/QvtC80LjQu9C60LAg0LfQvNGW0L3QuCDRgNC+0LfQvNGW0YDRgyDRgtC+0LzRgyBIRlMrLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo5OTgKK21zZ2lkICJzaHJpbmtpbmcgSEZTIHdyYXBwZXIiCittc2dzdHIgItC+0LHQvtC70L7QvdC60LAg0YHQutC+0YDQvtGH0LXQvdC90Y8gSEZTIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjEwMDcKK21zZ2lkICJVcGRhdGluZyB0aGUgSEZTIHdyYXBwZXIgaGFzIGZhaWxlZC4iCittc2dzdHIgItC+0L3QvtCy0LvQtdC90L3RjyDQv9C+0LzQuNC70LrQsCDQvtCx0L7Qu9C+0L3QutC4IEhGUy4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MTEwOSBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjExOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgaXMgbm90IGEgcmVhbCAlcyBjaGVjay4gIFRoaXMgaXMgZ29pbmcgdG8gZXh0cmFjdCBzcGVjaWFsIGxvdyBsZXZlbCAiCisiZmlsZXMgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4iCittc2dzdHIgIiIKKyLQptC1INC90LUg0YHQv9GA0LDQstC20L3RjyDQv9C10YDQtdCy0ZbRgNC60LAgJXMuINCS0ZbQtNCx0YPQstCw0ZTRgtGM0YHRjyDQu9C40YjQtSDQvtGC0YDQuNC80LDQvdC90Y8g0YHQv9C10YbRltCw0LvRjNC90LjRhSAiCisi0L3RjNC30YzQutC+0YDRltCy0L3QtdCy0LjRhSDRhNCw0LnQu9GW0LIg0LTQu9GPINC90LDQu9Cw0LPQvtC00LbQtdC90L3Rjy4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjE1NQorbXNnaWQgIkJhZCBibG9jayBsaXN0IGhlYWRlciBjaGVja3N1bS4iCittc2dzdHIgItCd0LXQv9GA0LDQstC40LvRjNC90LAg0LrQvtC90YLRgNC+0LvRjNC90LAg0YHRg9C80LAg0LfQsNCz0L7Qu9C+0LLQutCwINGB0L/QuNGB0LrRgyDQsdC70L7QutGW0LIuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzoxNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkludmFsaWQgc2l6ZSBvZiBhIHRyYW5zYWN0aW9uIGJsb2NrIHdoaWxlIHJlcGxheWluZyB0aGUgam91cm5hbCAoJWkgYnl0ZXMpLiIKK21zZ3N0ciAiIgorItCd0LXQv9GA0LDQstC40LvRjNC90LjQuSDRgNC+0LfQvNGW0YAg0LHQu9C+0LrRgyDRgtGA0LDQvdC30LDQutGG0ZbRlyDQv9GA0Lgg0L/QvtCy0YLQvtGA0L3QvtC80YMg0L3QsNC60LvQsNC00LDQvdC90ZYg0LbRg9GA0L3QsNC70YMgKCVpICIKKyLQsdCw0LnRgtGW0LIpLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MjYwCittc2dpZCAiIgorIkpvdXJuYWwgc3RvcmVkIG91dHNpZGUgb2YgdGhlIHZvbHVtZSBhcmUgbm90IHN1cHBvcnRlZC4gIFRyeSB0byBkZXNhY3RpdmF0ZSAiCisidGhlIGpvdXJuYWwgYW5kIHJ1biBQYXJ0ZWQgYWdhaW4uIgorbXNnc3RyICIiCisi0JbRg9GA0L3QsNC7INGA0L7Qt9C80ZbRidC10L3QviDQv9C+0LfQsCDQvNC10LbQsNC80Lgg0YLQvtC80YMg0L3QtSDQv9GW0LTRgtGA0LjQvNGD0ZTRgtGM0YHRjy4g0KHQu9GW0LQg0LLQuNC80LrQvdGD0YLQuCDQttGD0YDQvdCw0Lsg0YLQsCAiCisi0L/QtdGA0LXQt9Cw0L/Rg9GB0YLQuNGC0LggUGFydGVkLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MjcxCittc2dpZCAiSm91cm5hbCBvZmZzZXQgb3Igc2l6ZSBpcyBub3QgbXVsdGlwbGUgb2YgdGhlIHNlY3RvciBzaXplLiIKK21zZ3N0ciAi0J/QvtGH0LDRgtC+0Log0YfQuCDRgNC+0LfQvNGW0YAg0LbRg9GA0L3QsNC70YMg0L3QtSDRlCDRhtGW0LvQuNC8INGH0LjRgdC70L7QvCDRgdC10LrRgtC+0YDRltCyLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MjkyCittc2dpZCAiSW5jb3JyZWN0IG1hZ2ljIHZhbHVlcyBpbiB0aGUgam91cm5hbCBoZWFkZXIuIgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70YzQvdGWINGB0LjQs9C90LDRgtGD0YDQuCDRgyDQt9Cw0LPQvtC70L7QstC60YMg0LbRg9GA0L3QsNC70YMuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozMDIKK21zZ2lkICJKb3VybmFsIHNpemUgbWlzbWF0Y2ggYmV0d2VlbiBqb3VybmFsIGluZm8gYmxvY2sgYW5kIGpvdXJuYWwgaGVhZGVyLiIKK21zZ3N0ciAiIgorItCg0L7Qt9C80ZbRgCDQttGD0YDQvdCw0LvRgyDQvdC1INCy0ZbQtNC/0L7QstGW0LTQsNGUINC30L3QsNGH0LXQvdC90Y4g0YMg0ZbQvdGE0L7RgNC80LDRhtGW0LnQvdC+0LzRgyDQsdC70L7RhtGWINC20YPRgNC90LDQu9GDINGC0LAgIgorItC30LDQs9C+0LvQvtCy0LrRgyDQttGD0YDQvdCw0LvRgy4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjMxNAorbXNnaWQgIlNvbWUgaGVhZGVyIGZpZWxkcyBhcmUgbm90IG11bHRpcGxlIG9mIHRoZSBzZWN0b3Igc2l6ZS4iCittc2dzdHIgItCg0L7Qt9C80ZbRgCDQtNC10Y/QutC40YUg0L/QvtC70ZbQsiDQt9Cw0LPQvtC70L7QstC60YMg0L3QtSDRgdC60LvQsNC00LDRlCDRhtGW0LvQtSDRh9C40YHQu9C+INGB0LXQutGC0L7RgNGW0LIuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozMjMKK21zZ2lkICIiCisiVGhlIHNlY3RvciBzaXplIHN0b3JlZCBpbiB0aGUgam91cm5hbCBpcyBub3QgNTEyIGJ5dGVzLiAgUGFydGVkIG9ubHkgIgorInN1cHBvcnRzIDUxMiBieXRlcyBsZW5ndGggc2VjdG9ycy4iCittc2dzdHIgIiIKKyLQoNC+0LfQvNGW0YAg0YHQtdC60YLQvtGA0LAsINGJ0L4g0LfQsdC10YDRltCz0LDRlNGC0YzRgdGPINGDINC20YPRgNC90LDQu9GWLCDQvdC1INC00L7RgNGW0LLQvdGO0ZQgNTEyINCx0LDQudGC0LDQvC4gIFBhcnRlZCAiCisi0L/RltC00YLRgNC40LzRg9GUINC70LjRiNC1INGB0LXQutGC0L7RgNC4INGA0L7Qt9C80ZbRgNC+0LwgNTEyINCx0LDQudGC0ZbQsi4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjMzNQorbXNnaWQgIkJhZCBqb3VybmFsIGNoZWNrc3VtLiIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9GM0L3QsCDQutC+0L3RgtGA0L7Qu9GM0L3QsCDRgdGD0LzQsCDQttGD0YDQvdCw0LvRgy4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjM1MworbXNnaWQgIiIKKyJUaGUgam91cm5hbCBpcyBub3QgZW1wdHkuICBQYXJ0ZWQgbXVzdCByZXBsYXkgdGhlIHRyYW5zYWN0aW9ucyBiZWZvcmUgIgorIm9wZW5pbmcgdGhlIGZpbGUgc3lzdGVtLiAgVGhpcyB3aWxsIG1vZGlmeSB0aGUgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICIiCisi0JbRg9GA0L3QsNC7INC90LUg0L/QvtGA0L7QttC90ZbQuS4gUGFydGVkINC80LDQtiDQvdCw0LrQu9Cw0YHRgtC4INGC0YDQsNC90LfQsNC60YbRltGXINC/0LXRgNC10LQg0LLRltC00LrRgNC40LLQsNC90L3RjyAiCisi0YTQsNC50LvQvtCy0L7RlyDRgdC40YHRgtC10LzQuC4g0KbQtSDQv9GA0LjQt9Cy0LXQtNC1INC00L4g0LfQvNGW0L3QuCDRhNCw0LnQu9C+0LLQvtGXINGB0LjRgdGC0LXQvNC4LiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MzgxCittc2dpZCAiIgorIlRoZSB2b2x1bWUgaGVhZGVyIG9yIHRoZSBtYXN0ZXIgZGlyZWN0b3J5IGJsb2NrIGhhcyBjaGFuZ2VkIHdoaWxlIHJlcGxheWluZyAiCisidGhlIGpvdXJuYWwuICBZb3Ugc2hvdWxkIHJlc3RhcnQgUGFydGVkLiIKK21zZ3N0ciAiIgorItCf0YDQuCDQvdCw0LrQu9Cw0LTQsNC90L3RliDQttGD0YDQvdCw0LvRgyDQt9C80ZbQvdC40LLRgdGPINC30LDQs9C+0LvQvtCy0L7QuiDRgtC+0LzRgyDRh9C4INCx0LvQvtC6INCz0L7Qu9C+0LLQvdC+0LPQviDQutCw0YLQsNC70L7Qs9GDLiAiCisi0KHQu9GW0LQg0L/QtdGA0LXQt9Cw0L/Rg9GB0YLQuNGC0LggUGFydGVkLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9wcm9iZS5jOjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQYXJ0ZWQgY2FuJ3QgdXNlIEhGUyBmaWxlIHN5c3RlbXMgb24gZGlza3Mgd2l0aCBhIHNlY3RvciBzaXplIG5vdCBlcXVhbCB0byAlIgorImQgYnl0ZXMuIgorbXNnc3RyICIiCisiUGFydGVkINC90LUg0LzQvtC20LUg0LLQuNC60L7RgNC40YHRgtC+0LLRg9Cy0LDRgtC4INGE0LDQudC70L7QstGWINGB0LjRgdGC0LXQvNC4IEhGUyDQvdCwINC00LjRgdC60LDRhSDQtyDRgNC+0LfQvNGW0YDQvtC8ICIKKyLRgdC10LrRgtC+0YDRgywg0YnQviDQvdC1INC60YDQsNGC0L3QuNC5ICVkINCx0LDQudGC0ZbQsi4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzoxNTEgbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6MTU1Cittc2dpZCAiQW4gZXh0ZW50IGhhcyBub3QgYmVlbiByZWxvY2F0ZWQuIgorbXNnc3RyICLQldC60YHRgtC10L3RgiDQvdC1INCx0YPQsiDQv9C10YDQtdC80ZbRidC10L3QuNC5LiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjI1MSBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzozMDcKK21zZ2lkICIiCisiQSByZWZlcmVuY2UgdG8gYW4gZXh0ZW50IGNvbWVzIGZyb20gYSBwbGFjZSBpdCBzaG91bGQgbm90LiAgWW91IHNob3VsZCBjaGVjayAiCisidGhlIGZpbGUgc3lzdGVtISIKK21zZ3N0ciAiIgorItCf0L7RgdC40LvQsNC90L3RjyDQvdCwINC10LrRgdGC0LXQvdGCINC3INC80ZbRgdGG0Y8sINC3INGP0LrQvtCz0L4g0L3QtSDQvNCw0ZQg0LHRg9GC0Lgg0L/QvtGB0LjQu9Cw0L3QvdGPLiDQodC70ZbQtCDQv9C10YDQtdCy0ZbRgNC40YLQuCAiCisi0YTQsNC50LvQvtCy0YMg0YHQuNGB0YLQtdC80YMhIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6MzgxCittc2dpZCAiVGhpcyBIRlMgdm9sdW1lIGhhcyBubyBjYXRhbG9nIGZpbGUuICBUaGlzIGlzIHZlcnkgdW51c3VhbCEiCittc2dzdHIgItCm0LXQuSDRgtC+0LwgSEZTINC90LUg0LzRltGB0YLQuNGC0Ywg0YTQsNC50Lsg0LrQsNGC0LDQu9C+0LPRgy4g0JTQvtGB0LjRgtGMINC00LjQstC90L4hIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NDc1Cittc2dpZCAiVGhpcyBIRlMgdm9sdW1lIGhhcyBubyBleHRlbnRzIG92ZXJmbG93IGZpbGUuICBUaGlzIGlzIHF1aXRlIHVudXN1YWwhIgorbXNnc3RyICLQptC10Lkg0YLQvtC8IEhGUyDQvdC1INC80ZbRgdGC0LjRgtGMINGE0LDQudC70YMg0L/QtdGA0LXQutGA0LjQstCw0L3QvdGPINC10LrRgdGC0LXQvdGC0ZbQsi4g0JTQvtGB0LjRgtGMINC00LjQstC90L4hIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NTE3IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjY2OAorbXNnaWQgIiIKKyJUaGUgZXh0ZW50cyBvdmVyZmxvdyBmaWxlIHNob3VsZCBub3QgY29udGFpbiBpdHMgb3duIGV4dGVudHMhICBZb3Ugc2hvdWxkICIKKyJjaGVjayB0aGUgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICIiCisi0KTQsNC50Lsg0L/QtdGA0LXQutGA0LjQstCw0L3QvdGPINC10LrRgdGC0LXQvdGC0ZbQsiDQvdC1INC80LDRlCDQvNGW0YHRgtC40YLRjCDQstC70LDRgdC90LjRhSDQtdC60YHRgtC10L3RgtGW0LIhINCh0LvRltC0ICIKKyLQv9C10YDQtdCy0ZbRgNC40YLQuCDRhNCw0LnQu9C+0LLRgyDRgdC40YHRgtC10LzRgy4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzo1NzQgbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6ODQ3Cittc2dpZCAiQ291bGQgbm90IGNhY2hlIHRoZSBmaWxlIHN5c3RlbSBpbiBtZW1vcnkuIgorbXNnc3RyICLQndC1INCy0LTQsNGU0YLRjNGB0Y8g0LfQsNC90LXRgdGC0Lgg0YMg0LrQtdGIINGE0LDQudC70L7QstGDINGB0LjRgdGC0LXQvNGDINGDINC/0LDQvCfRj9GC0ZYuIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NjM1IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjkwOAorbXNnaWQgIkJhZCBibG9ja3MgbGlzdCBjb3VsZCBub3QgYmUgbG9hZGVkLiIKK21zZ3N0ciAi0KHQv9C40YHQvtC6INC90LXQv9GA0LDQstC40LvRjNC90LjRhSDQsdC70L7QutGW0LIg0L3QtSDQsdGD0LvQviDQt9Cw0LLQsNC90YLQsNC20LXQvdC+LiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjY0OSBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo5MjQKK21zZ2lkICJBbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgZXh0ZW50IHJlbG9jYXRpb24uIgorbXNnc3RyICLQn9C+0LzQuNC70LrQsCDQv9GA0Lgg0L/QtdGA0LXQvNGW0YnQtdC90L3RliDQtdC60YHRgtC10L3RgtGDLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NDk1Cittc2dpZCAiVGhpcyBIRlMrIHZvbHVtZSBoYXMgbm8gY2F0YWxvZyBmaWxlLiAgVGhpcyBpcyB2ZXJ5IHVudXN1YWwhIgorbXNnc3RyICLQptC10Lkg0YLQvtC8IEhGUysg0L3QtSDQvNGW0YHRgtC40YLRjCDRhNCw0LnQu9GDINC60LDRgtCw0LvQvtCz0YMuICDQlNC+0YHQuNGC0Ywg0LTQuNCy0L3QviEiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjYxOQorbXNnaWQgIlRoaXMgSEZTKyB2b2x1bWUgaGFzIG5vIGV4dGVudHMgb3ZlcmZsb3cgZmlsZS4gIFRoaXMgaXMgcXVpdGUgdW51c3VhbCEiCittc2dzdHIgItCm0LXQuSDRgtC+0LwgSEZTKyDQvdC1INC80ZbRgdGC0LjRgtGMINGE0LDQudC70YMg0L/QtdGA0LXQutGA0LjQstCw0L3QvdGPINC10LrRgdGC0LXQvdGC0ZbQsi4g0JTQvtGB0LjRgtGMINC00LjQstC90L4hIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6OTQKK21zZ2lkICJkaXNwbGF5cyB0aGlzIGhlbHAgbWVzc2FnZSIKK21zZ3N0ciAi0LLRltC00L7QsdGA0LDQttCw0ZQg0YbQtSDQv9C+0LLRltC00L7QvNC70LXQvdC90Y8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo5NQorIywgZnV6enkKK21zZ2lkICJsaXN0cyBwYXJ0aXRpb24gbGF5b3V0IG9uIGFsbCBibG9jayBkZXZpY2VzIgorbXNnc3RyICLQstC40LLQtdGB0YLQuCDRgdC/0LjRgdC+0Log0YLQsNCx0LvQuNGG0Ywg0YDQvtC30LTRltC70ZbQsiDQvdCwINGD0YHRltGFINC/0YDQuNGB0YLRgNC+0Y/RhSIKKworIzogcGFydGVkL3BhcnRlZC5jOjk2Cittc2dpZCAiZGlzcGxheXMgbWFjaGluZSBwYXJzZWFibGUgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo5NworbXNnaWQgIm5ldmVyIHByb21wdHMgZm9yIHVzZXIgaW50ZXJ2ZW50aW9uIgorbXNnc3RyICLQvdGW0LrQvtC70Lgg0L3QtSDQt9Cw0L/QuNGC0YPQstCw0YLQuCDQstGC0YDRg9GH0LDQvdC90Y8g0LrQvtGA0LjRgdGC0YPQstCw0YfQsCIKKworIzogcGFydGVkL3BhcnRlZC5jOjk4Cittc2dpZCAiZGlzcGxheXMgdGhlIHZlcnNpb24iCittc2dzdHIgItCy0ZbQtNC+0LHRgNCw0LbQsNGUINCy0LXRgNGB0ZbRjiIKKworIzogcGFydGVkL3BhcnRlZC5jOjExMQorbXNnaWQgIiIKKyJOVU1CRVIgaXMgdGhlIHBhcnRpdGlvbiBudW1iZXIgdXNlZCBieSBMaW51eC4gIE9uIE1TLURPUyBkaXNrIGxhYmVscywgdGhlICIKKyJwcmltYXJ5IHBhcnRpdGlvbnMgbnVtYmVyIGZyb20gMSB0byA0LCBsb2dpY2FsIHBhcnRpdGlvbnMgZnJvbSA1IG9ud2FyZHMuXG4iCittc2dzdHIgIiIKKyLQndCe0JzQldCgIC0g0YbQtSDQvdC+0LzQtdGAINGA0L7Qt9C00ZbQu9GDLCDRidC+INCy0LjQutC+0YDQuNGB0YLQvtCy0YPRlNGC0YzRgdGPIExpbnV4LiAg0KMg0LXRgtC40LrQtdGC0LrQsNGFINC00LjRgdC60YMgTVMtIgorIkRPUywg0L7RgdC90L7QstC90ZYg0YDQvtC30LTRltC70Lgg0LzQsNGO0YLRjCDQvdC+0LzQtdGA0LggMS00LCDQsCDQu9C+0LPRltGH0L3RliAtIDUg0YLQsCDQtNCw0LvRli5cbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjExNAorbXNnaWQgIkxBQkVMLVRZUEUgaXMgb25lIG9mOiAiCittc2dzdHIgItCi0JjQny3QldCi0JjQmtCV0KLQmtCYINC+0LTQuNC9INC3OiAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMTUKK21zZ2lkICJGTEFHIGlzIG9uZSBvZjogIgorbXNnc3RyICLQntCX0J3QkNCa0JAg0L7QtNC90LUg0Lc6ICIKKworIzogcGFydGVkL3BhcnRlZC5jOjExNgorbXNnaWQgIlVOSVQgaXMgb25lIG9mOiAiCittc2dzdHIgItCR0JvQntCaINC+0LTQvdC1INC3OiAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMTcKK21zZ2lkICJQQVJULVRZUEUgaXMgb25lIG9mOiBwcmltYXJ5LCBsb2dpY2FsLCBleHRlbmRlZFxuIgorbXNnc3RyICLQotCY0J8t0KDQntCX0JTQhtCb0KMg0L7QtNC40L0g0Lc6INC+0YHQvdC+0LLQvdC40LksINC70L7Qs9GW0YfQvdC40LksINGA0L7Qt9GI0LjRgNC10L3QuNC5XG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMTkKK21zZ2lkICJGUy1UWVBFIGlzIG9uZSBvZjogIgorbXNnc3RyICLQotCY0J8t0KTQoSDQvtC00LjQvSDQtzogIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIwCittc2dpZCAiIgorIlNUQVJUIGFuZCBFTkQgYXJlIGRpc2sgbG9jYXRpb25zLCBzdWNoIGFzIDRHQiBvciAxMCUuICBOZWdhdGl2ZSB2YWx1ZXMgY291bnQgIgorImZyb20gdGhlIGVuZCBvZiB0aGUgZGlzay4gIEZvciBleGFtcGxlLCAtMXMgc3BlY2lmaWVzIGV4YWN0bHkgdGhlIGxhc3QgIgorInNlY3Rvci5cbiIKK21zZ3N0ciAiIgorItCf0J7Qp9CQ0KLQntCaINGC0LAg0JrQhtCd0JXQptCsIC0g0YbQtSDQvNGW0YHRhtGPINC90LAg0LTQuNGB0LrRgywg0YLQsNC60ZYg0Y/QuiA0R0Ig0YfQuCAxMCUuICDQktGW0LQn0ZTQvNC90ZYgIgorItC30L3QsNGH0LXQvdC90Y8g0LLRltC00YDQsNGF0L7QstGD0Y7RgtGM0YHRjyDQstGW0LQg0LrRltC90YbRjyDQtNC40YHQutGDLiDQndCw0L/RgNC40LrQu9Cw0LQsIC0xcyDQstC60LDQt9GD0ZQg0L7RgdGC0LDQvdC90ZbQuSAiCisi0YHQtdC60YLQvtGAINC00LjRgdC60YMuXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjMKK21zZ2lkICJTVEFURSBpcyBvbmUgb2Y6IG9uLCBvZmZcbiIKK21zZ3N0ciAi0KHQotCQ0J0g0L7QtNC40L0g0Lc6IG9uLCBvZmZcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyNAorbXNnaWQgIkRFVklDRSBpcyB1c3VhbGx5IC9kZXYvaGRhIG9yIC9kZXYvc2RhXG4iCittc2dzdHIgItCf0KDQmNCh0KLQoNCG0JkgLSDQt9Cw0LfQstC40YfQsNC5IC9kZXYvaGRhINGH0LggL2Rldi9zZGFcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyNQorbXNnaWQgIk5BTUUgaXMgYW55IHdvcmQgeW91IHdhbnRcbiIKK21zZ3N0ciAi0J3QkNCX0JLQkCAtINCx0YPQtNGMLdGP0LrQtSDRgdC70L7QstC+INC90LAg0LLQsNGIINCy0LjQsdGW0YBcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyNgorbXNnaWQgIlRoZSBwYXJ0aXRpb24gbXVzdCBoYXZlIG9uZSBvZiB0aGUgZm9sbG93aW5nIEZTLVRZUEVzOiAiCittc2dzdHIgItCg0L7Qt9C00ZbQuyDQv9C+0LLQuNC90LXQvSDQvNCw0YLQuCDQvtC00LjQvSDQtyDQvdCw0YHRgtGD0L/QvdC40YUg0YLQuNC/0ZbQsiBGUy1UWVBFOiAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMzAKKyMsIGZ1enp5Cittc2dpZCAiIgorIkNvcHlyaWdodCAoQykgMTk5OCAtIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuXG4iCisiVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmUsIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLlxuIgorIlxuIgorIlRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuIgorImJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4iCisiTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuIgorIkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4iCisiXG4iCittc2dzdHIgIiIKKyJDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLlxuIgorItCm0Y8g0L/RgNC+0LPRgNCw0LzQsCDRlCDQstGW0LvRjNC90LjQvCDQv9GA0L7Qs9GA0LDQvNC90LjQvCDQt9Cw0LHQtdC30L/QtdGH0LXQvdC90Y/QvCwg0L3QsCDQvdC10Zcg0L/QvtGI0LjRgNGO0ZTRgtGM0YHRjyAiCisi0KPQvdGW0LLQtdGA0YHQsNC70YzQvdCwINCf0YPQsdC70ZbRh9C90LAg0JvRltGG0LXQvdC30ZbRjyBHTlUuXG4iCisiXG4iCisi0KbRjyDQv9GA0L7Qs9GA0LDQvNCwINGA0L7Qt9C/0L7QstGB0Y7QtNC20YPRlNGC0YzRgdGPINC30ZYg0YHQv9C+0LTRltCy0LDQvdC90Y/QvCzRidC+INCy0L7QvdCwINCx0YPQtNC1INC60L7RgNC40YHQvdC+0Y4sINCw0LvQtSDQkdCV0JcgIgorItCR0KPQlNCsLdCv0JrQmNClINCT0JDQoNCQ0J3QotCG0Jk7INC90LDQstGW0YLRjCDQsdC10Lcg0L3QtdGP0LLQvdC+0Zcg0LPQsNGA0LDQvdGC0ZbRlyDQmtCe0JzQldCg0KbQhtCZ0J3QntCHINCm0IbQndCd0J7QodCi0IYg0YfQuCAiCisi0J/QoNCY0JTQkNCi0J3QntCh0KLQhiDQlNCb0K8g0J/QldCS0J3QntCHINCc0JXQotCYLiDQlNC+0LrQu9Cw0LTQvdGW0YjRgyDRltC90YTQvtGA0LzQsNGG0ZbRjiDQv9GA0L4g0YbQtSDQtNC40LLRltGC0YzRgdGPINGDICIKKyLQo9C90ZbQstC10YDRgdCw0LvRjNC90ZbQuSDQn9GD0LHQu9GW0YfQvdGW0Lkg0JvRltGG0LXQvdC30ZbRlyBHTlUuXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTAuZiUlXHQodGltZSBsZWZ0ICUuMmQ6JS4yZCkiCittc2dzdHIgIiUwLmYlJVx0KNC30LDQu9C40YjQuNC70L7RgdGMINGH0LDRgdGDICUuMmQ6JS4yZCkiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBhcnRpdGlvbiAlcyBpcyBiZWluZyB1c2VkLiBZb3UgbXVzdCB1bm1vdW50IGl0IGJlZm9yZSB5b3UgbW9kaWZ5IGl0IHdpdGggIgorIlBhcnRlZC4iCittc2dzdHIgIiIKKyLQoNC+0LfQtNGW0LsgJXMg0L3QsNGA0LDQt9GWINC30LDQudC90Y/RgtC40LkuINCh0LvRltC0INCy0ZbQtNC60LvRjtGH0LjRgtC4INC50L7Qs9C+LCDQv9C10YDRiCDQvdGW0LYg0LfQvNGW0L3RjtCy0LDRgtC4INC50L7Qs9C+ICIKKyLQv9GA0L7Qs9GA0LDQvNC+0Y4gUGFydGVkLiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICJQYXJ0aXRpb24ocykgb24gJXMgYXJlIGJlaW5nIHVzZWQuIgorbXNnc3RyICLQoNC+0LfQtNGW0LvQuCDQvdCwICVzINC90LDRgNCw0LfRliDQt9Cw0LnQvdGP0YLRli4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjMKK21zZ2lkICIiCisiVGhlIGV4aXN0aW5nIGZpbGUgc3lzdGVtIHdpbGwgYmUgZGVzdHJveWVkIGFuZCBhbGwgZGF0YSBvbiB0aGUgcGFydGl0aW9uICIKKyJ3aWxsIGJlIGxvc3QuIERvIHlvdSB3YW50IHRvIGNvbnRpbnVlPyIKK21zZ3N0ciAiIgorItCG0YHQvdGD0Y7Rh9CwINGE0LDQudC70L7QstCwINGB0LjRgdGC0LXQvNCwINCx0YPQtNC1INC30L3QuNGJ0LXQvdCwINGA0LDQt9C+0Lwg0Lcg0YPRgdGW0LzQsCDQtNCw0L3QuNC80Lgg0L3QsCDQvdGW0LkuINCf0YDQvtC00L7QstC20LjRgtC4PyIKKworIzogcGFydGVkL3BhcnRlZC5jOjIzNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGV4aXN0aW5nIGRpc2sgbGFiZWwgb24gJXMgd2lsbCBiZSBkZXN0cm95ZWQgYW5kIGFsbCBkYXRhIG9uIHRoaXMgZGlzayAiCisid2lsbCBiZSBsb3N0LiBEbyB5b3Ugd2FudCB0byBjb250aW51ZT8iCittc2dzdHIgIiIKKyLQhtGB0L3Rg9GO0YfQsCDQv9C+0LfQvdCw0YfQutCwINC00LjRgdC60YMg0L3QsCAlcyDQsdGD0LTQtSDQt9C90LjRidC10L3QsCDRgNCw0LfQvtC8INC3INGD0YHRltC80LAg0LTQsNC90LjQvNC4INC90LAg0L3RltC5LiAiCisi0J/RgNC+0LTQvtCy0LbQuNGC0Lg/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NDU4IHBhcnRlZC9wYXJ0ZWQuYzo2NTIgcGFydGVkL3BhcnRlZC5jOjEwNDQKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMTI4IHBhcnRlZC9wYXJ0ZWQuYzoxNzcxIHBhcnRlZC9wYXJ0ZWQuYzoxODUyCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTkwMAorbXNnaWQgIlBhcnRpdGlvbiBudW1iZXI/IgorbXNnc3RyICLQndC+0LzQtdGAINGA0L7Qt9C00ZbQu9GDPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjUwMAorbXNnaWQgIlNvdXJjZSBkZXZpY2U/IgorbXNnc3RyICLQn9GA0LjRgdGC0YDRltC5LdC00LbQtdGA0LXQu9C+PyIKKworIzogcGFydGVkL3BhcnRlZC5jOjUwNAorbXNnaWQgIlNvdXJjZSBwYXJ0aXRpb24gbnVtYmVyPyIKK21zZ3N0ciAi0J3QvtC80LXRgCDQstC40YXRltC00L3QvtCz0L4g0YDQvtC30LTRltC70YM/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NTA5Cittc2dpZCAiQ2FuJ3QgY29weSBhbiBleHRlbmRlZCBwYXJ0aXRpb24uIgorbXNnc3RyICLQndC1INC80L7QttC90LAg0LrQvtC/0ZbRjtCy0LDRgtC4INGA0L7Qt9GI0LjRgNC10L3RliDRgNC+0LfQtNGW0LvQuC4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo1MTUKK21zZ2lkICJEZXN0aW5hdGlvbiBwYXJ0aXRpb24gbnVtYmVyPyIKK21zZ3N0ciAi0J3QvtC80LXRgCDRhtGW0LvRjNC+0LLQvtCz0L4g0YDQvtC30LTRltC70YM/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NjE1Cittc2dpZCAiTmV3IGRpc2sgbGFiZWwgdHlwZT8iCittc2dzdHIgItCd0L7QstCwINC10YLQuNC60LXRgtC60LAg0LTQuNGB0LrRgz8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo2NTYKK21zZ2lkICJGaWxlIHN5c3RlbT8iCittc2dzdHIgItCk0LDQudC70L7QstCwINGB0LjRgdGC0LXQvNCwPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjcwNyBwYXJ0ZWQvcGFydGVkLmM6ODc4Cittc2dpZCAiUGFydGl0aW9uIHR5cGU/IgorbXNnc3RyICLQotC40L8g0YDQvtC30LTRltC70YM/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NzE0IHBhcnRlZC9wYXJ0ZWQuYzo4ODUgcGFydGVkL3BhcnRlZC5jOjExMzEKK21zZ2lkICJQYXJ0aXRpb24gbmFtZT8iCittc2dzdHIgItCd0LDQt9Cy0LAg0YDQvtC30LTRltC70YM/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NzIyIHBhcnRlZC9wYXJ0ZWQuYzo4OTUKK21zZ2lkICJGaWxlIHN5c3RlbSB0eXBlPyIKK21zZ3N0ciAi0KLQuNC/INGE0LDQudC70L7QstC+0Zcg0YHQuNGB0YLQtdC80Lg/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NzI5IHBhcnRlZC9wYXJ0ZWQuYzo4OTcgcGFydGVkL3BhcnRlZC5jOjEwNTkKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNzI1IHBhcnRlZC9wYXJ0ZWQuYzoxNzgwCittc2dpZCAiU3RhcnQ/IgorbXNnc3RyICLQn9C+0YfQsNGC0L7Quj8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo3MzEgcGFydGVkL3BhcnRlZC5jOjkwMCBwYXJ0ZWQvcGFydGVkLmM6MTA2MgorIzogcGFydGVkL3BhcnRlZC5jOjE3MjcgcGFydGVkL3BhcnRlZC5jOjE3ODIKK21zZ2lkICJFbmQ/IgorbXNnc3RyICLQmtGW0L3QtdGG0Yw/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NzY5IHBhcnRlZC9wYXJ0ZWQuYzo5MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSByZXF1ZXN0ZWQgYSBwYXJ0aXRpb24gZnJvbSAlcyB0byAlcy5cbiIKKyJUaGUgY2xvc2VzdCBsb2NhdGlvbiB3ZSBjYW4gbWFuYWdlIGlzICVzIHRvICVzLiAgSXMgdGhpcyBzdGlsbCBhY2NlcHRhYmxlIHRvICIKKyJ5b3U/IgorbXNnc3RyICIiCisi0JLQuCDQstC60LDQt9Cw0LvQuCDRgNC+0LfQtNGW0Lsg0YMg0LzQtdC20LDRhSAlcyAtICVzLlxuIgorItCd0LDQudCx0LvQuNC20YfQuNC5INC00L4g0L3RjNC+0LPQviDQtNGW0LDQv9Cw0LfQvtC9ICVzIC0gJXMuINCS0Lgg0LfQs9C+0LTQvdGWINC3INGC0LDQutC40Lwg0LTRltCw0L/QsNC30L7QvdC+0Lw/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6ODkwCittc2dpZCAiQW4gZXh0ZW5kZWQgcGFydGl0aW9uIGNhbm5vdCBob2xkIGEgZmlsZSBzeXN0ZW0uICBEaWQgeW91IHdhbnQgbWtwYXJ0PyIKK21zZ3N0ciAi0KDQvtC30YjQuNGA0LXQvdC40Lkg0YDQvtC30LTRltC7INC90LUg0LzQvtC20LUg0LzQsNGC0Lgg0YTQsNC50LvQvtCy0YMg0YHQuNGB0YLQtdC80YMuINCS0LjQutC+0L3QsNGC0LggbWtwYXJ0PyIKKworIzogcGFydGVkL3BhcnRlZC5jOjEwNTAKK21zZ2lkICJDYW4ndCBtb3ZlIGFuIGV4dGVuZGVkIHBhcnRpdGlvbi4iCittc2dzdHIgItCf0LXRgNC10LzRltGJ0LXQvdC90Y8g0YDQvtC30YjQuNGA0LXQvdC40YUg0YDQvtC30LTRltC70ZbQsiDQvdC1INC/0ZbQtNGC0YDQuNC80YPRlNGC0YzRgdGPLiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEwNzkKK21zZ2lkICJDYW4ndCBtb3ZlIGEgcGFydGl0aW9uIG9udG8gaXRzZWxmLiAgVHJ5IHVzaW5nIHJlc2l6ZSwgcGVyaGFwcz8iCittc2dzdHIgItCd0LUg0LzQvtC20L3QsCDQv9C10YDQtdC80ZbRidGD0LLQsNGC0Lgg0YDQvtC30LTRltC7INGB0LDQvCDRgyDRgdC10LHQtS4gINCc0L7QttC1INGB0L/RgNC+0LHRg9Cy0LDRgtC4IHJlc2l6ZT8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIk1pbm9yOiAlZFxuIgorbXNnc3RyICLQndC+0LzQtdGAOiAlZFxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIyOAorIywgYy1mb3JtYXQKK21zZ2lkICJGbGFnczogJXNcbiIKK21zZ3N0ciAi0J7Qt9C90LDQutC4OiAlc1xuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIyOQorIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlIFN5c3RlbTogJXNcbiIKK21zZ3N0ciAi0KTQsNC50LvQvtCy0LAg0YHQuNGB0YLQtdC80LA6ICVzXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjMwCittc2dpZCAiU2l6ZTogICAgICAgICAiCittc2dzdHIgItCg0L7Qt9C80ZbRgDogICAgICAgIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIzNQorbXNnaWQgIk1pbmltdW0gc2l6ZTogIgorbXNnc3RyICLQnNGW0L3RltC80LDQu9GM0L3QuNC5INGA0L7Qt9C80ZbRgDogIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIzOAorbXNnaWQgIk1heGltdW0gc2l6ZTogIgorbXNnc3RyICLQnNCw0LrRgdC40LzQsNC70YzQvdC40Lkg0YDQvtC30LzRltGAOiAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMzYyCisjLCBjLWZvcm1hdAorbXNnaWQgIk1vZGVsOiAlcyAoJXMpXG4iCittc2dzdHIgItCc0L7QtNC10LvRjDogJXMgKCVzKVxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTM2NAorIywgYy1mb3JtYXQKK21zZ2lkICJEaXNrICVzOiAlc1xuIgorbXNnc3RyICLQlNC40YHQuiAlczogJXNcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEzNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VjdG9yIHNpemUgKGxvZ2ljYWwvcGh5c2ljYWwpOiAlbGxkQi8lbGxkQlxuIgorbXNnc3RyICLQoNC+0LfQvNGW0YAg0YHQtdC60YLQvtGA0LAgKNC70L7Qs9GW0YfQvdC40Lkv0YTRltC30LjRh9C90LjQuSk6ICVsbGTQkS8lbGxk0JFcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEzODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQklPUyBjeWxpbmRlcixoZWFkLHNlY3RvciBnZW9tZXRyeTogJWQsJWQsJWQuICBFYWNoIGN5bGluZGVyIGlzICVzLlxuIgorbXNnc3RyICJCSU9TINGG0LjQu9GW0L3QtNGALNCz0L7Qu9C+0LLQutCwLNGB0LXQutGC0L7RgCDQs9C10L7QvNC10YLRgNGW0Y86ICVkLCVkLCVkLiAg0JrQvtC20LXQvSDRhtC40LvRltC90LTRgCAlcy5cbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEzOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGFydGl0aW9uIFRhYmxlOiAlc1xuIgorbXNnc3RyICLRgtCw0LHQu9C40YbRjyDRgNC+0LfQtNGW0LvRltCyOiAlc1xuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQwNiBwYXJ0ZWQvcGFydGVkLmM6MTQwOQorbXNnaWQgIk51bWJlciIKK21zZ3N0ciAi0J3QvtC80LXRgCIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MDYgcGFydGVkL3BhcnRlZC5jOjE0MDkKK21zZ2lkICJTdGFydCIKK21zZ3N0ciAi0J/QvtGH0LDRgtC+0LoiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDA3IHBhcnRlZC9wYXJ0ZWQuYzoxNDEwCittc2dpZCAiRW5kIgorbXNnc3RyICLQmtGW0L3QtdGG0YwiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDEwCittc2dpZCAiU2l6ZSIKK21zZ3N0ciAi0KDQvtC30LzRltGAIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQxNAorbXNnaWQgIlR5cGUiCittc2dzdHIgItCi0LjQvyIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MTYKK21zZ2lkICJGaWxlIHN5c3RlbSIKK21zZ3N0ciAi0KTQsNC50LvQvtCy0LAg0YHQuNGB0YLQtdC80LAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDE5Cittc2dpZCAiTmFtZSIKK21zZ3N0ciAi0J3QsNC30LLQsCIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MjEKK21zZ2lkICJGbGFncyIKK21zZ3N0ciAi0J7Qt9C90LDQutC4IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQ3NworbXNnaWQgIkZyZWUgU3BhY2UiCittc2dzdHIgItCS0ZbQu9GM0L3QuNC5INC/0YDQvtGB0YLRltGAIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTYyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQSAlcyAlcyBwYXJ0aXRpb24gd2FzIGZvdW5kIGF0ICVzIC0+ICVzLiAgRG8geW91IHdhbnQgdG8gYWRkIGl0IHRvIHRoZSAiCisicGFydGl0aW9uIHRhYmxlPyIKK21zZ3N0ciAiIgorItCX0L3QsNC50LTQtdC90L4g0YDQvtC30LTRltC7ICVzICVzINGDINC80LXQttCw0YUg0LLRltC0ICVzIC0+ICVzLiDQkdCw0LbQsNGU0YLQtSDQtNC+0LTQsNGC0Lgg0LnQvtCz0L4g0LTQviDRgtCw0LHQu9C40YbRliAiCisi0YDQvtC30LTRltC70ZbQsj8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNjYzCittc2dpZCAic2VhcmNoaW5nIGZvciBmaWxlIHN5c3RlbXMiCittc2dzdHIgItC/0L7RiNGD0Log0YTQsNC50LvQvtCy0LjRhSDRgdC40YHRgtC10LwiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxODc3Cittc2dpZCAiTmV3IGRldmljZT8iCittc2dzdHIgItCd0L7QstC40Lkg0L/RgNC40YHRgtGA0ZbQuT8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxOTAyCittc2dpZCAiRmxhZyB0byBJbnZlcnQ/IgorbXNnc3RyICLQntC30L3QsNC60LAsINGP0LrRgyDRltC90LLQtdGA0YLRg9Cy0LDRgtC4PyIKKworIzogcGFydGVkL3BhcnRlZC5jOjE5MDcKK21zZ2lkICJOZXcgc3RhdGU/IgorbXNnc3RyICLQndC+0LLQtSDQt9C90LDRh9C10L3QvdGPPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjE5NDQKK21zZ2lkICJVbml0PyIKK21zZ3N0ciAi0JHQu9C+0Lo/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjA5MworbXNnaWQgImNoZWNrIgorbXNnc3RyICJjaGVjayIKKworIzogcGFydGVkL3BhcnRlZC5jOjIwOTYKK21zZ2lkICIiCisiY2hlY2sgTlVNQkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyBhIHNpbXBsZSBjaGVjayBvbiB0aGUgZmlsZSBzeXN0ZW0iCittc2dzdHIgIiIKKyJjaGVjayDQndCe0JzQldCgICAgICAgICAgICAgICAgICAgINCy0LjQutC+0L3QsNGC0Lgg0L/RgNC+0YHRgtGDINC/0LXRgNC10LLRltGA0LrRgyDRhNCw0LnQu9C+0LLQvtGXINGB0LjRgdGC0LXQvNC4IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEwMgorbXNnaWQgImNwIgorbXNnc3RyICJjcCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMDUKK21zZ2lkICIiCisiY3AgW0ZST00tREVWSUNFXSBGUk9NLU5VTUJFUiBUTy1OVU1CRVIgICBjb3B5IGZpbGUgc3lzdGVtIHRvIGFub3RoZXIgIgorInBhcnRpdGlvbiIKK21zZ3N0ciAiIgorImNwIFvQly3Qn9Cg0JjQodCi0KDQntCuXSDQly3QndCe0JzQldCgINCjLdCd0J7QnNCV0KAgICAgINC60L7Qv9GW0Y7QstCw0YLQuCDRhNCw0LnQu9C+0LLRgyDRgdC40YHRgtC10LzRgyDRgyDRltC90YjQuNC5INGA0L7Qt9C00ZbQuyIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMTEKK21zZ2lkICJoZWxwIgorbXNnc3RyICJoZWxwIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjExNAorIywgZnV6enkKK21zZ2lkICIiCisiaGVscCBbQ09NTUFORF0gICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCBnZW5lcmFsIGhlbHAsIG9yIGhlbHAgb24gIgorIkNPTU1BTkQiCittc2dzdHIgImhlbHAgW9Ca0J7QnNCQ0J3QlNCQXSAgICAgICAgICAgICAgICDQstC40LLQtdGB0YLQuCDQtNC+0LLRltC00LrRgywg0LDQsdC+INC00L7QstGW0LTQutGDINC/0YDQviDQmtCe0JzQkNCd0JTQkCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMjAKK21zZ2lkICJta2xhYmVsIgorbXNnc3RyICJta2xhYmVsIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEyMAorbXNnaWQgIm1rdGFibGUiCittc2dzdHIgIm1rdGFibGUiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTIzCittc2dpZCAiIgorIm1rbGFiZWwsbWt0YWJsZSBMQUJFTC1UWVBFICAgICAgICAgICAgICAgY3JlYXRlIGEgbmV3IGRpc2tsYWJlbCAocGFydGl0aW9uICIKKyJ0YWJsZSkiCittc2dzdHIgIiIKKyJta2xhYmVsLG1rdGFibGUg0KLQmNCfX9CV0KLQmNCa0JXQotCa0JggINGB0YLQstC+0YDQuNGC0Lgg0L3QvtCy0YMg0L/QvtC30L3QsNGH0LrRgyDQtNC40YHQutGDICjRgtCw0LHQu9C40YbRjiDRgNC+0LfQtNGW0LvRltCyKSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMjkKK21zZ2lkICJta2ZzIgorbXNnc3RyICJta2ZzIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEzMgorbXNnaWQgIiIKKyJta2ZzIE5VTUJFUiBGUy1UWVBFICAgICAgICAgICAgICAgICAgICAgIG1ha2UgYSBGUy1UWVBFIGZpbGUgc3lzdGVtIG9uICIKKyJwYXJ0aXRpdG9uIE5VTUJFUiIKK21zZ3N0ciAiIgorIm1rZnMg0J3QntCc0JXQoCDQotCY0J8t0KTQoSAgICAgICAgICAgICDRgdGC0LLQvtGA0LjRgtC4INGE0LDQudC70L7QstGDINGB0LjRgdGC0LXQvNGDINCi0JjQny3QpNChINGDINGA0L7Qt9C00ZbQu9GWINCd0J7QnNCV0KAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTM4Cittc2dpZCAibWtwYXJ0IgorbXNnc3RyICJta3BhcnQiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTQxCittc2dpZCAibWtwYXJ0IFBBUlQtVFlQRSBbRlMtVFlQRV0gU1RBUlQgRU5EICAgICBtYWtlIGEgcGFydGl0aW9uIgorbXNnc3RyICJta3BhcnQg0KLQmNCfLdCg0J7Ql9CU0IbQm9CjIFvQotCY0J8t0KTQoV0g0J/QntCn0JDQotCe0Jog0JrQhtCd0JXQptCsICAgINGB0YLQstC+0YDQuNGC0Lgg0YDQvtC30LTRltC7IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE0NworIywgZnV6enkKK21zZ2lkICIiCisiJ21rcGFydCcgbWFrZXMgYSBwYXJ0aXRpb24gd2l0aG91dCBjcmVhdGluZyBhIG5ldyBmaWxlIHN5c3RlbSBvbiB0aGUgIgorInBhcnRpdGlvbi4gIEZTLVRZUEUgbWF5IGJlIHNwZWNpZmllZCB0byBzZXQgYW4gYXBwcm9wcmlhdGUgcGFydGl0aW9uIElELlxuIgorbXNnc3RyICIiCisibWtwYXJ0INGB0YLQstC+0YDQuNGC0Lgg0YDQvtC30LTRltC7INCx0LXQtyDRgdGC0LLQvtGA0LXQvdC90Y8g0L3QvtCy0L7RlyDRhNCw0LnQu9C+0LLQvtGXINGB0LjRgdGC0LXQvNC4INGDINC90YzQvtC80YMuINCc0L7QttC90LAgIgorItCy0LrQsNC30LDRgtC4INCi0JjQny3QpNChINC00LvRjyDQstGB0YLQsNC90L7QstC70LXQvdC90Y8g0LLRltC00L/QvtCy0ZbQtNC90L7Qs9C+INGW0LTQtdC90YLQuNGE0ZbQutCw0YLQvtGA0LAg0YDQvtC30LTRltC70YMuXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTUyCittc2dpZCAibWtwYXJ0ZnMiCittc2dzdHIgIm1rcGFydGZzIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE1NQorbXNnaWQgIiIKKyJta3BhcnRmcyBQQVJULVRZUEUgRlMtVFlQRSBTVEFSVCBFTkQgICAgIG1ha2UgYSBwYXJ0aXRpb24gd2l0aCBhIGZpbGUgc3lzdGVtIgorbXNnc3RyICIiCisibWtwYXJ0ZnMg0KLQmNCfLdCg0J7Ql9CU0IbQm9CjINCi0JjQny3QpNChINCf0J7Qp9CQ0KLQntCaINCa0IbQndCV0KbQrCAgICDRgdGC0LLQvtGA0LjRgtC4INGA0L7Qt9C00ZbQuyDQtyDRhNCw0LnQu9C+0LLQvtGOICIKKyLRgdC40YHRgtC10LzQvtGOIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE2MQorbXNnaWQgIm1vdmUiCittc2dzdHIgIm1vdmUiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTY0Cittc2dpZCAibW92ZSBOVU1CRVIgU1RBUlQgRU5EICAgICAgICAgICAgICAgICAgICBtb3ZlIHBhcnRpdGlvbiBOVU1CRVIiCittc2dzdHIgIm1vdmUg0J3QntCc0JXQoCDQn9Ce0KfQkNCi0J7QmiDQmtCG0J3QldCm0KwgICAgINC/0LXRgNC10LzRltGB0YLQuNGC0Lgg0YDQvtC30LTRltC7INC3INC90L7QvNC10YDQvtC8INCd0J7QnNCV0KAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTY5Cittc2dpZCAibmFtZSIKK21zZ3N0ciAibmFtZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNzIKK21zZ2lkICJuYW1lIE5VTUJFUiBOQU1FICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgcGFydGl0aW9uIE5VTUJFUiBhcyBOQU1FIgorbXNnc3RyICJuYW1lINCd0J7QnNCV0KAg0J3QkNCX0JLQkCAgICAgICAgICAgICAg0L/RgNC40LfQvdCw0YfQuNGC0Lgg0L3QsNC30LLRgyDQndCQ0JfQktCQINGA0L7Qt9C00ZbQu9GDINCd0J7QnNCV0KAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTc3Cittc2dpZCAicHJpbnQiCittc2dzdHIgInByaW50IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE4MAorbXNnaWQgIiIKKyJwcmludCBbZGV2aWNlc3xmcmVlfGxpc3QsYWxsfE5VTUJFUl0gICAgIGRpc3BsYXkgdGhlIHBhcnRpdGlvbiB0YWJsZSwgIgorImF2YWlsYWJsZSBkZXZpY2VzLCBmcmVlIHNwYWNlLCBhbGwgZm91bmQgcGFydGl0aW9ucywgb3IgYSBwYXJ0aWN1bGFyICIKKyJwYXJ0aXRpb24iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxODUKK21zZ2lkICIiCisiV2l0aG91dCBhcmd1bWVudHMsICdwcmludCcgZGlzcGxheXMgdGhlIGVudGlyZSBwYXJ0aXRpb24gdGFibGUuIEhvd2V2ZXIgd2l0aCAiCisidGhlIGZvbGxvd2luZyBhcmd1bWVudHMgaXQgcGVyZm9ybXMgdmFyaW91cyBvdGhlciBhY3Rpb25zLlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTg3Cittc2dpZCAiICBkZXZpY2VzICAgOiBkaXNwbGF5IGFsbCBhY3RpdmUgYmxvY2sgZGV2aWNlc1xuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTg4Cittc2dpZCAiIgorIiAgZnJlZSAgICAgIDogZGlzcGxheSBpbmZvcm1hdGlvbiBhYm91dCBmcmVlIHVucGFydGl0aW9uZWQgc3BhY2Ugb24gdGhlICIKKyJjdXJyZW50IGJsb2NrIGRldmljZVxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTkwCisjLCBmdXp6eQorbXNnaWQgIiIKKyIgIGxpc3QsIGFsbCA6IGRpc3BsYXkgdGhlIHBhcnRpdGlvbiB0YWJsZXMgb2YgYWxsIGFjdGl2ZSBibG9jayBkZXZpY2VzXG4iCittc2dzdHIgItCy0LjQstC10YHRgtC4INGB0L/QuNGB0L7QuiDRgtCw0LHQu9C40YbRjCDRgNC+0LfQtNGW0LvRltCyINC90LAg0YPRgdGW0YUg0L/RgNC40YHRgtGA0L7Rj9GFIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE5MQorbXNnaWQgIiIKKyIgIE5VTUJFUiAgICA6IGRpc3BsYXkgbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIHBhcnRpY3VsYXIgIgorInBhcnRpdGlvblxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTk2Cittc2dpZCAicXVpdCIKK21zZ3N0ciAicXVpdCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxOTkKK21zZ2lkICJxdWl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQgcHJvZ3JhbSIKK21zZ3N0ciAicXVpdCAgICAgICAgICAgICAgICAgICAgICAgICAg0LLQuNGF0ZbQtCDQtyDQv9GA0L7Qs9GA0LDQvNC4IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIwNAorbXNnaWQgInJlc2N1ZSIKK21zZ3N0ciAicmVzY3VlIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIwNworbXNnaWQgIiIKKyJyZXNjdWUgU1RBUlQgRU5EICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2N1ZSBhIGxvc3QgcGFydGl0aW9uIG5lYXIgU1RBUlQgIgorImFuZCBFTkQiCittc2dzdHIgIiIKKyJyZXNjdWUg0J/QntCn0JDQotCe0Jog0JrQhtCd0JXQptCsICAgICAgICAg0LfQvdCw0LnRgtC4INCy0YLRgNCw0YfQtdC90ZYg0YDQvtC30LTRltC70Lgg0LzRltC2INCf0J7Qp9CQ0KLQntCaINGC0LAg0JrQhtCd0JXQptCsIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIxMworbXNnaWQgInJlc2l6ZSIKK21zZ3N0ciAicmVzaXplIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIxNgorbXNnaWQgIiIKKyJyZXNpemUgTlVNQkVSIFNUQVJUIEVORCAgICAgICAgICAgICAgICAgIHJlc2l6ZSBwYXJ0aXRpb24gTlVNQkVSIGFuZCBpdHMgIgorImZpbGUgc3lzdGVtIgorbXNnc3RyICJyZXNpemUg0J3QntCc0JXQoCDQn9Ce0KfQkNCi0J7QmiDQmtCG0J3QldCm0KwgICDQt9C80ZbQvdC40YLQuCDRgNC+0LfQvNGW0YAg0YDQvtC30LTRltC70YMg0J3QntCc0JXQoCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMjQKK21zZ2lkICJybSIKK21zZ3N0ciAicm0iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjI3Cittc2dpZCAicm0gTlVNQkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcGFydGl0aW9uIE5VTUJFUiIKK21zZ3N0ciAicm0g0J3QntCc0JXQoCAgICAgICAgICAgICAgICAgICAgICDQstC40LTQsNC70LjRgtC4INGA0L7Qt9C00ZbQuyDQtyDQvdC+0LzQtdGA0L7QvCDQndCe0JzQldCgIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIzMgorbXNnaWQgInNlbGVjdCIKK21zZ3N0ciAic2VsZWN0IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIzNQorbXNnaWQgInNlbGVjdCBERVZJQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvb3NlIHRoZSBkZXZpY2UgdG8gZWRpdCIKK21zZ3N0ciAic2VsZWN0INCf0KDQmNCh0KLQoNCG0JkgICAgICAgICAgICAgICDQstC40LHQuNGA0LDRgtC4INC/0YDQuNGB0YLRgNGW0Lkg0LTQu9GPINGA0L7QsdC+0YLQuCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNDAKK21zZ2lkICJzZXQiCittc2dzdHIgInNldCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNDMKK21zZ2lkICIiCisic2V0IE5VTUJFUiBGTEFHIFNUQVRFICAgICAgICAgICAgICAgICAgICBjaGFuZ2UgdGhlIEZMQUcgb24gcGFydGl0aW9uIE5VTUJFUiIKK21zZ3N0ciAic2V0INCd0J7QnNCV0KAg0J7Ql9Cd0JDQmtCQINCh0KLQkNCdICAgICAgICAg0LfQvNGW0L3QuNGC0Lgg0L7Qt9C90LDQutGDINGA0L7Qt9C00ZbQu9GDINC3INC90L7QvNC10YDQvtC8INCd0J7QnNCV0KAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjQ5Cittc2dpZCAidG9nZ2xlIgorbXNnc3RyICJ0b2dnbGUiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjUyCittc2dpZCAiIgorInRvZ2dsZSBbTlVNQkVSIFtGTEFHXV0gICAgICAgICAgICAgICAgICAgdG9nZ2xlIHRoZSBzdGF0ZSBvZiBGTEFHIG9uICIKKyJwYXJ0aXRpb24gTlVNQkVSIgorbXNnc3RyICIiCisidG9nZ2xlIFvQndCe0JzQldCgIFvQntCX0J3QkNCa0JBdXSAgICAgICDQv9C10YDQtdC80LjQutC90YPRgtC4INC+0LfQvdCw0LrRgyDQntCX0J3QkNCa0JAg0YDQvtC30LTRltC70YMg0Lcg0L3QvtC80LXRgNC+0LwgIgorItCd0J7QnNCV0KAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjU4Cittc2dpZCAidW5pdCIKK21zZ3N0ciAidW5pdCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNjEKK21zZ2lkICJ1bml0IFVOSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCB0aGUgZGVmYXVsdCB1bml0IHRvIFVOSVQiCittc2dzdHIgIiIKKyJ1bml0INCR0JvQntCaICAgICAgICAgICAgICAgICAgICAg0LLRgdGC0LDQvdC+0LLQuNGC0Lgg0LTQu9GPINGC0LjQv9C+0LLQvtCz0L4g0LHQu9C+0LrRgyDQt9C90LDRh9C10L3QvdGPINCR0JvQntCaIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI2NgorbXNnaWQgInZlcnNpb24iCittc2dzdHIgItCy0LXRgNGB0ZbRjyIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNjkKKyMsIGZ1enp5Cittc2dpZCAiIgorInZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheSB0aGUgdmVyc2lvbiBudW1iZXIgYW5kICIKKyJjb3B5cmlnaHQgaW5mb3JtYXRpb24gb2YgR05VIFBhcnRlZCIKK21zZ3N0ciAiIgorItCy0LXRgNGB0ZbRjyAgICAgICAgICAgICAgICAgICAgICAgINCy0LjQstC10YHRgtC4INC/0L7RgtC+0YfQvdGDINCy0LXRgNGB0ZbRjiBHTlUgUGFydGVkINGC0LAgIgorItGW0L3RhNC+0YDQvNCw0YbRltGOINC/0YDQviDQsNCy0YLQvtGA0YHRjNC60LUg0L/RgNCw0LLQviIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNzMKKyMsIGZ1enp5Cittc2dpZCAiIgorIid2ZXJzaW9uJyBkaXNwbGF5cyBjb3B5cmlnaHQgYW5kIHZlcnNpb24gaW5mb3JtYXRpb24gY29ycmVzcG9uZGluZyB0byB0aGlzICIKKyJjb3B5IG9mIEdOVSBQYXJ0ZWRcbiIKK21zZ3N0ciAiIgorItC60L7QvNCw0L3QtNCwIHZlcnNpb24g0LLQuNCy0L7QtNC40YLRjCDRltC90YTQvtGA0LzQsNGG0ZbRjiDQv9GA0L4g0LLQtdGA0YHRltGOINGG0ZbRlNGXINC/0YDQvtCz0YDQsNC80LggR05VIFBhcnRlZFxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjMzNQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1obG1zdl0gW0RFVklDRSBbQ09NTUFORCBbUEFSQU1FVEVSU11dLi4uXVxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMzc5Cittc2dpZCAiTm8gZGV2aWNlIGZvdW5kIgorbXNnc3RyICLQn9GA0LjRgdGC0YDRltC5INC90LUg0LfQvdCw0LnQtNC10L3QviIKKworIzogcGFydGVkL3BhcnRlZC5jOjI0MTIKKyMsIGZ1enp5Cittc2dpZCAiV0FSTklORzogWW91IGFyZSBub3Qgc3VwZXJ1c2VyLiAgV2F0Y2ggb3V0IGZvciBwZXJtaXNzaW9ucy4iCittc2dzdHIgIiIKKyLQn9Ce0J/QldCg0JXQlNCW0JXQndCd0K86INCS0Lgg0L3QtSDQvNCw0ZTRgtC1INC/0YDQuNCy0ZbQu9C10Lkg0LDQtNC80ZbQvdGW0YHRgtGA0LDRgtC+0YDQsC4g0J7RgtGA0LjQvNCw0LnRgtC1INC/0L7QstC90L7QstCw0LbQtdC90L3Rjy5cbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjI0NTAKKyMsIGZ1enp5Cittc2dpZCAiWW91IG1heSBuZWVkIHRvIHVwZGF0ZSAvZXRjL2ZzdGFiLlxuIgorbXNnc3RyICLQndC1INC30LDQsdGD0LTRjNGC0LUg0L7QvdC+0LLQuNGC0LggL2V0Yy9mc3RhYiwg0Y/QutGJ0L4g0YbQtSDQvdC10L7QsdGF0ZbQtNC90L4uXG4iCisKKyM6IHBhcnRlZC91aS5jOjE2MAorbXNnaWQgIldlbGNvbWUgdG8gR05VIFBhcnRlZCEgVHlwZSAnaGVscCcgdG8gdmlldyBhIGxpc3Qgb2YgY29tbWFuZHMuXG4iCittc2dzdHIgIiIKKyLQm9Cw0YHQutCw0LLQviDQv9GA0L7RgdC40LzQviDQtNC+IEdOVSBQYXJ0ZWQhINCf0LXRgNC10LvRltC6INC60L7QvNCw0L3QtCDQstC40LLQvtC00LjRgtGM0YHRjyDQutC+0LzQsNC90LTQvtGOICdoZWxwJy5cbiIKKworIzogcGFydGVkL3VpLmM6MTYzCittc2dpZCAiIgorIlVzYWdlOiBwYXJ0ZWQgW09QVElPTl0uLi4gW0RFVklDRSBbQ09NTUFORCBbUEFSQU1FVEVSU10uLi5dLi4uXVxuIgorIkFwcGx5IENPTU1BTkRzIHdpdGggUEFSQU1FVEVSUyB0byBERVZJQ0UuICBJZiBubyBDT01NQU5EKHMpIGFyZSBnaXZlbiwgcnVuICIKKyJpblxuIgorImludGVyYWN0aXZlIG1vZGUuXG4iCittc2dzdHIgIiIKKyLQktC40LrQvtGA0LjRgdGC0LDQvdC90Y86IHBhcnRlZCBb0JrQm9Cu0KddLi4uIFvQn9Cg0JjQodCi0KDQhtCZIFvQmtCe0JzQkNCd0JTQkCBb0J/QkNCg0JDQnNCV0KLQoNCYXS4uLl0uLi5dXG4iCisi0JLQuNC60L7QvdCw0YLQuCDQmtCe0JzQkNCd0JTQkCDQtyDQv9Cw0YDQsNC80LXRgtGA0LDQvNC4INCf0JDQoNCQ0JzQldCi0KDQmCDQtNC70Y8g0L/RgNC40YHRgtGA0L7RjiDQn9Cg0JjQodCi0KDQhtCZLiAg0K/QutGJ0L5cbiIKKyLQmtCe0JzQkNCd0JTQkCDQvdC1INCy0LrQsNC30LDQvdCwLCDQt9Cw0L/Rg9GB0LrQsNGU0YLRjNGB0Y8g0YMg0ZbQvdGC0LXRgNCw0LrRgtC40LLQvdC+0LzRgyDRgNC10LbQuNC80ZYuXG4iCisKKyM6IHBhcnRlZC91aS5jOjE2OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlxuIgorIllvdSBmb3VuZCBhIGJ1ZyBpbiBHTlUgUGFydGVkISBIZXJlJ3Mgd2hhdCB5b3UgaGF2ZSB0byBkbzpcbiIKKyJcbiIKKyJEb24ndCBwYW5pYyEgVGhlIGJ1ZyBoYXMgbW9zdCBsaWtlbHkgbm90IGFmZmVjdGVkIGFueSBvZiB5b3VyIGRhdGEuXG4iCisiSGVscCB1cyB0byBmaXggdGhpcyBidWcgYnkgZG9pbmcgdGhlIGZvbGxvd2luZzpcbiIKKyJcbiIKKyJDaGVjayB3aGV0aGVyIHRoZSBidWcgaGFzIGFscmVhZHkgYmVlbiBmaXhlZCBieSBjaGVja2luZ1xuIgorInRoZSBsYXN0IHZlcnNpb24gb2YgR05VIFBhcnRlZCB0aGF0IHlvdSBjYW4gZmluZCBhdDpcbiIKKyJcbiIKKyJcdGh0dHA6Ly9mdHAuZ251Lm9yZy9nbnUvcGFydGVkL1xuIgorIlxuIgorIlBsZWFzZSBjaGVjayB0aGlzIHZlcnNpb24gcHJpb3IgdG8gYnVnIHJlcG9ydGluZy5cbiIKKyJcbiIKKyJJZiB0aGlzIGhhcyBub3QgYmVlbiBmaXhlZCB5ZXQgb3IgaWYgeW91IGRvbid0IGtub3cgaG93IHRvIGNoZWNrLFxuIgorInBsZWFzZSB2aXNpdCB0aGUgR05VIFBhcnRlZCB3ZWJzaXRlOlxuIgorIlxuIgorIlx0aHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3BhcnRlZFxuIgorIlxuIgorImZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLlxuIgorIlxuIgorIllvdXIgcmVwb3J0IHNob3VsZCBjb250YWluIHRoZSB2ZXJzaW9uIG9mIHRoaXMgcmVsZWFzZSAoJXMpXG4iCisiYWxvbmcgd2l0aCB0aGUgZXJyb3IgbWVzc2FnZSBiZWxvdywgdGhlIG91dHB1dCBvZlxuIgorIlxuIgorIlx0cGFydGVkIERFVklDRSB1bml0IGNvIHByaW50IHVuaXQgcyBwcmludFxuIgorIlxuIgorImFuZCB0aGUgZm9sbG93aW5nIGhpc3Rvcnkgb2YgY29tbWFuZHMgeW91IGVudGVyZWQuXG4iCisiQWxzbyBpbmNsdWRlIGFueSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHlvdXIgc2V0dXAgeW91XG4iCisiY29uc2lkZXIgaW1wb3J0YW50LlxuIgorbXNnc3RyICIiCisiXG4iCisiXG4iCisi0JLQuCDQt9C90LDQudGI0LvQuCDQv9C+0LzQuNC70LrRgyDRgyBHTlUgUGFydGVkISDQoNC10LrQvtC80LXQvdC00LDRhtGW0Zcg0YnQvtC00L4g0L/QvtC00LDQu9GM0YjQuNGFINC00ZbQuTpcbiIKKyJcbiIKKyLQndC1INC/0LDQvdGW0LrRg9C50YLQtSEg0KjQstC40LTRiNC1INC30LAg0LLRgdC1INC/0L7QvNC40LvQutCwINC90LUg0LLQv9C70LjQstCw0ZQg0L3QsCDQstCw0YjRliDQtNCw0L3Rli5cbiIKKyLQlNC+0L/QvtC80L7QttGW0YLRjCDQvdCw0Lwg0LLQuNC/0YDQsNCy0LjRgtC4INC/0L7QvNC40LvQutGDLCDQtNC70Y8g0YbRjNC+0LPQvjpcbiIKKyJcbiIKKyLQn9C10YDQtdCy0ZbRgNGC0LUg0YfQuCDQvdC1INCx0YPQu9CwINC/0L7QvNC40LvQutCwINCy0LbQtSDQstC40L/RgNCw0LLQu9C10L3QsCDRgyDQvtGB0YLQsNC90L3RltC5INCy0LXRgNGB0ZbRl1xuIgorIkdOVSBQYXJ0ZWQsINGP0LrRgyDQvNC+0LbQvdCwINC30L3QsNC50YLQuCDQt9CwINCw0LTRgNC10YHQvtGOOlxuIgorIlxuIgorIlx0aHR0cDovL2Z0cC5nbnUub3JnL2dudS9wYXJ0ZWQvXG4iCisiXG4iCisi0J/QtdGA0LXQstGW0YDRgtC1INGG0Y4g0LLQtdGA0YHRltGOLCDQv9C10YDRiCDQvdGW0LYg0L3QsNC00YHQuNC70LDRgtC4INC30LLRltGCINC/0YDQviDQv9C+0LzQuNC70LrRgy5cbiIKKyJcbiIKKyLQr9C60YnQviDQv9C+0LzQuNC70LrQsCDQvdC1INCy0LjQv9GA0LDQstC70LXQvdCwINGH0Lgg0LLQuCDQvdC1INC30L3QsNGU0YLQtSDRj9C6INGG0LUg0L/QtdGA0LXQstGW0YDQuNGC0LgsXG4iCisi0L/QvtC00LDQu9GM0YjRgyDRltC90YTQvtGA0LzQsNGG0ZbRjiDRiNGD0LrQsNC50YLQtSDQvdCwINCy0LXQsS3RgdCw0LnRgtGWIEdOVSBQYXJ0ZWQ6XG4iCisiXG4iCisiXHRodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvcGFydGVkXG4iCisiXG4iCisi0KMg0LLQsNGI0L7QvNGDINC30LLRltGC0ZYg0YHQu9GW0LQg0LLQutCw0LfQsNGC0Lgg0LLQtdGA0YHRltGOINCy0LjQv9GD0YHQutGDLCAoJXMpXG4iCisi0L3QsNCy0LXQtNC10L3QtSDQvdC40LbRh9C1INC/0L7QstGW0LTQvtC80LvQtdC90L3RjyDQv9GA0L4g0L/QvtC80LjQu9C60YMsINCy0LjQstGW0LQg0LrQvtC80LDQvdC00LhcbiIKKyJcbiIKKyJcdHBhcnRlZCBERVZJQ0UgdW5pdCBjbyBwcmludCB1bml0IHMgcHJpbnRcbiIKKyJcbiIKKyLRgtCwINC00L7QtNCw0YLQutC+0LLRgyDRltC90YTQvtGA0LzQsNGG0ZbRjiDQv9GA0L4g0L/QsNGA0LDQvNC10YLRgNC4LCDRj9C60ZYg0LLQuCDQstCy0LDQttCw0YLQuNC80LXRgtC1INCy0LDQttC70LjQstC40LzQuC5cbiIKKworIzogcGFydGVkL3VpLmM6Mjg0Cittc2dpZCAiIgorIlxuIgorIkNvbW1hbmQgSGlzdG9yeTpcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzozNjYKKyMsIGZ1enp5Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBTRUdWX01BUEVSUiAoQWRkcmVzcyBub3QgbWFwcGVkIHRvIG9iamVjdClcbiIKK21zZ3N0ciAiIgorIlxuIgorItCf0L7QvNC40LvQutCwOiBTRUdWX01BUEVSUiAo0JDQtNGA0LXRgdCwINC90LUg0L/RgNC40LIn0Y/Qt9Cw0L3QsCDQtNC+INC+0LEn0ZTQutGC0YMpIgorCisjOiBwYXJ0ZWQvdWkuYzozNzIKKyMsIGZ1enp5Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBTRUdWX0FDQ0VSUiAoSW52YWxpZCBwZXJtaXNzaW9ucyBmb3IgbWFwcGVkIG9iamVjdClcbiIKK21zZ3N0ciAiIgorIlxuIgorItCf0L7QvNC40LvQutCwOiBTRUdWX0FDQ0VSUiAo0J3QtdC/0YDQsNCy0LjQu9GM0L3RliDQv9GA0LDQstCwINC00L7RgdGC0YPQv9GDINC00LvRjyDQv9GA0LjQsifRj9C30LDQvdC+0LPQviDQvtCxJ9GU0LrRgtGDKSIKKworIzogcGFydGVkL3VpLmM6Mzc3CisjLCBmdXp6eQorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogQSBnZW5lcmFsIFNJR1NFR1Ygc2lnbmFsIHdhcyBlbmNvdW50ZXJlZC5cbiIKK21zZ3N0ciAiIgorIlxuIgorItCf0L7QvNC40LvQutCwOiDQktC40Y/QstC70LXQvdC+INC30LDQs9Cw0LvRjNC90LjQuSDRgdC40LPQvdCw0LsgU0lHU0VHVi4iCisKKyM6IHBhcnRlZC91aS5jOjQxMAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0lOVERJViAoSW50ZWdlcjogZGl2aWRlIGJ5IHplcm8pIgorbXNnc3RyICIiCisiXG4iCisi0J/QvtC80LjQu9C60LA6IEZQRV9JTlRESVYgKNCm0ZbQu9C1OiDQtNGW0LvQtdC90L3RjyDQvdCwINC90YPQu9GMKSIKKworIzogcGFydGVkL3VpLmM6NDE1Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfSU5UT1ZGIChJbnRlZ2VyOiBvdmVyZmxvdykiCittc2dzdHIgIiIKKyJcbiIKKyLQn9C+0LzQuNC70LrQsDogRlBFX0lOVE9WRiAo0KbRltC70LUg0YfQuNGB0LvQvjog0L/QtdGA0LXQv9C+0LLQvdC10L3QvdGPKSIKKworIzogcGFydGVkL3VpLmM6NDIwCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxURElWIChGbG9hdDogZGl2aWRlIGJ5IHplcm8pIgorbXNnc3RyICIiCisiXG4iCisi0J/QvtC80LjQu9C60LA6IEZQRV9JTlRESVYgKNCn0LjRgdC70L4g0Lcg0YDRg9GF0L7QvNC+0Y4g0LrQvtC80L7Rjjog0LTRltC70LXQvdC90Y8g0L3QsCDQvdGD0LvRjCkiCisKKyM6IHBhcnRlZC91aS5jOjQyNQorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0ZMVE9WRiAoRmxvYXQ6IG92ZXJmbG93KSIKK21zZ3N0ciAiIgorIlxuIgorItCf0L7QvNC40LvQutCwOiBGUEVfRkxUT1ZGICjQp9C40YHQu9C+INC3INGA0YPRhdC+0LzQvtGOINC60L7QvNC+0Y46INC/0LXRgNC10L/QvtCy0L3QtdC90L3RjykiCisKKyM6IHBhcnRlZC91aS5jOjQzMAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0ZMVFVORCAoRmxvYXQ6IHVuZGVyZmxvdykiCittc2dzdHIgIiIKKyJcbiIKKyLQn9C+0LzQuNC70LrQsDogRlBFX0ZMVFVORCAo0KfQuNGB0LvQviDQtyDRgNGD0YXQvtC80L7RjiDQutC+0LzQvtGOOiDQtNGD0LbQtSDQvNCw0LvQtSDQt9C90LDRh9C10L3QvdGPKSIKKworIzogcGFydGVkL3VpLmM6NDM1Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxUUkVTIChGbG9hdDogaW5leGFjdCByZXN1bHQpIgorbXNnc3RyICIiCisiXG4iCisi0J/QvtC80LjQu9C60LA6IEZQRV9GTFRSRVMgKNCn0LjRgdC70L4g0Lcg0YDRg9GF0L7QvNC+0Y4g0LrQvtC80L7Rjjog0L3QtdGC0L7Rh9C90LjQuSDRgNC10LfRg9C70YzRgtCw0YIpIgorCisjOiBwYXJ0ZWQvdWkuYzo0NDAKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRJTlYgKEZsb2F0OiBpbnZhbGlkIG9wZXJhdGlvbikiCittc2dzdHIgIiIKKyJcbiIKKyLQn9C+0LzQuNC70LrQsDogRlBFX0ZMVElOViAo0KfQuNGB0LvQviDQtyDRgNGD0YXQvtC80L7RjiDQutC+0LzQvtGOOiDQvdC10L/RgNCw0LLQuNC70YzQvdCwINC+0L/QtdGA0LDRhtGW0Y8pIgorCisjOiBwYXJ0ZWQvdWkuYzo0NDUKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRTVUIgKEZsb2F0OiBzdWJzY3JpcHQgb3V0IG9mIHJhbmdlKSIKK21zZ3N0ciAiIgorIlxuIgorItCf0L7QvNC40LvQutCwOiBGUEVfRkxUU1VCICjQp9C40YHQu9C+INC3INGA0YPRhdC+0LzQvtGOINC60L7QvNC+0Y46INC/0ZbQtNC/0LjRgSDQv9C+0LfQsCDQvNC10LbQsNC80LgpIgorCisjOiBwYXJ0ZWQvdWkuYzo0NTAKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEEgZ2VuZXJhbCBTSUdGUEUgc2lnbmFsIHdhcyBlbmNvdW50ZXJlZC4iCittc2dzdHIgIiIKKyJcbiIKKyLQn9C+0LzQuNC70LrQsDog0JLQuNGP0LLQu9C10L3QviDQt9Cw0LPQsNC70YzQvdC40Lkg0YHQuNCz0L3QsNC7IFNJR0ZQRS4iCisKKyM6IHBhcnRlZC91aS5jOjQ4MworbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX0lMTE9QQyAoSWxsZWdhbCBPcGNvZGUpIgorbXNnc3RyICIiCisiXG4iCisi0J/QvtC80LjQu9C60LA6IElMTF9JTExPUEMgKNCd0LXQtNC+0L/Rg9GB0YLQuNC80LjQuSDQutC+0LQg0L7Qv9C10YDQsNGG0ZbQuSkiCisKKyM6IHBhcnRlZC91aS5jOjQ4OAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX0lMTE9QTiAoSWxsZWdhbCBPcGVyYW5kKSIKK21zZ3N0ciAiIgorIlxuIgorItCf0L7QvNC40LvQutCwOiBJTExfSUxMT1BOICjQndC10L/RgNCw0LLQuNC70YzQvdC40Lkg0L7Qv9C10YDQsNC90LQpIgorCisjOiBwYXJ0ZWQvdWkuYzo0OTMKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9JTExBRFIgKElsbGVnYWwgYWRkcmVzc2luZyBtb2RlKSIKK21zZ3N0ciAiIgorIlxuIgorItCf0L7QvNC40LvQutCwOiBJTExfSUxMQURSICjQndC10L/RgNCw0LLQuNC70YzQvdC40Lkg0YDQtdC20LjQvCDQsNC00YDQtdGB0LDRhtGW0ZcpIgorCisjOiBwYXJ0ZWQvdWkuYzo0OTgKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9JTExUUlAgKElsbGVnYWwgVHJhcCkiCittc2dzdHIgIiIKKyJcbiIKKyLQn9C+0LzQuNC70LrQsDogSUxMX0lMTFRSUCAo0J3QtdC/0YDQsNCy0LjQu9GM0L3QsCDQv9Cw0YHRgtC60LApIgorCisjOiBwYXJ0ZWQvdWkuYzo1MDMKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9QUlZPUEMgKFByaXZpbGVnZWQgT3Bjb2RlKSIKK21zZ3N0ciAiIgorIlxuIgorItCf0L7QvNC40LvQutCwOiBJTExfUFJWT1BDICjQmtC+0LQg0L/RgNC40LLRltC70LXQudC+0LLQsNC90L7RlyDQvtC/0LXRgNCw0YbRltGXKSIKKworIzogcGFydGVkL3VpLmM6NTA4Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfUFJWUkVHIChQcml2aWxlZ2VkIFJlZ2lzdGVyKSIKK21zZ3N0ciAiIgorIlxuIgorItCf0L7QvNC40LvQutCwOiBJTExfUFJWUkVHICjQn9GA0LjQstGW0LvQtdC50L7QstCw0L3QuNC5INGA0LXQs9GW0YHRgtGAKSIKKworIzogcGFydGVkL3VpLmM6NTEzCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfQ09QUk9DIChDb3Byb2Nlc3NvciBFcnJvcikiCittc2dzdHIgIiIKKyJcbiIKKyLQn9C+0LzQuNC70LrQsDogSUxMX0NPUFJPQyAo0J/QvtC80LjQu9C60LAg0YHQv9GW0LLQv9GA0L7RhtC10YHQvtGA0LApIgorCisjOiBwYXJ0ZWQvdWkuYzo1MTgKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9CQURTVEsgKEludGVybmFsIFN0YWNrIEVycm9yKSIKK21zZ3N0ciAiIgorIlxuIgorItCf0L7QvNC40LvQutCwOiBJTExfQkFEU1RLICjQktC90YPRgtGA0ZbRiNC90Y8g0L/QvtC80LjQu9C60LAg0YHRgtC10LrRgykiCisKKyM6IHBhcnRlZC91aS5jOjUyMworbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogQSBnZW5lcmFsIFNJR0lMTCBzaWduYWwgd2FzIGVuY291bnRlcmVkLiIKK21zZ3N0ciAiIgorIlxuIgorItCf0L7QvNC40LvQutCwOiDQktC40Y/QstC70LXQvdC+INC30LDQs9Cw0LvRjNC90LjQuSDRgdC40LPQvdCw0LsgU0lHSUxMLiIKKworIzogcGFydGVkL3VpLmM6MTAyNAorbXNnaWQgIkV4cGVjdGluZyBhIHBhcnRpdGlvbiBudW1iZXIuIgorbXNnc3RyICLQntGH0ZbQutGD0ZTRgtGM0YHRjyDQvdC+0LzQtdGAINGA0L7Qt9C00ZbQu9GDLiIKKworIzogcGFydGVkL3VpLmM6MTAzMworbXNnaWQgIlBhcnRpdGlvbiBkb2Vzbid0IGV4aXN0LiIKK21zZ3N0ciAi0KDQvtC30LTRltC7INC90LUg0ZbRgdC90YPRlC4iCisKKyM6IHBhcnRlZC91aS5jOjEwNTMKK21zZ2lkICJFeHBlY3RpbmcgYSBmaWxlIHN5c3RlbSB0eXBlLiIKK21zZ3N0ciAi0J7Rh9GW0LrRg9GU0YLRjNGB0Y8g0YLQuNC/INGE0LDQudC70L7QstCwINGB0LjRgdGC0LXQvNCwLiIKKworIzogcGFydGVkL3VpLmM6MTA2MAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIGZpbGUgc3lzdGVtIHR5cGUgXCIlc1wiLiIKK21zZ3N0ciAi0J3QtdCy0ZbQtNC+0LzQuNC5INGC0LjQvyDRhNCw0LnQu9C+0LLQvtGXINGB0LjRgdGC0LXQvNC4IFwiJXNcIi4iCisKKyM6IHBhcnRlZC91aS5jOjEwODAKK21zZ2lkICJFeHBlY3RpbmcgYSBkaXNrIGxhYmVsIHR5cGUuIgorbXNnc3RyICLQntGH0ZbQutGD0ZTRgtGM0YHRjyDRgtC40L8g0LTQuNGB0LrQvtCy0L7RlyDQtdGC0LjQutC10YLQutC4LiIKKworIzogcGFydGVkL3VpLmM6MTE3OAorbXNnaWQgIkNhbid0IGNyZWF0ZSBhbnkgbW9yZSBwYXJ0aXRpb25zLiIKK21zZ3N0ciAi0J3QtSDQstC00LDRlNGC0YzRgdGPINC00L7QtNCw0YLQutC+0LLQviDRgdGC0LLQvtGA0LjRgtC4INGA0L7Qt9C00ZbQu9C4LiIKKworIzogcGFydGVkL3VpLmM6MTE4OAorbXNnaWQgIkV4cGVjdGluZyBhIHBhcnRpdGlvbiB0eXBlLiIKK21zZ3N0ciAi0J7Rh9GW0LrRg9GU0YLRjNGB0Y8g0YLQuNC/INGA0L7Qt9C00ZbQu9GDLiIKKworIzogcGFydGVkL3VpLmM6MTMxNQorbXNnaWQgIm9uIgorbXNnc3RyICJvbiIKKworIzogcGFydGVkL3VpLmM6MTMxNgorbXNnaWQgIm9mZiIKK21zZ3N0ciAib2ZmIgorCisjOiBwYXJ0ZWQvdWkuYzoxNDMxCittc2dpZCAiT1BUSU9OczoiCittc2dzdHIgItCa0JvQrtCn0IY6IgorCisjOiBwYXJ0ZWQvdWkuYzoxNDM2Cittc2dpZCAiQ09NTUFORHM6IgorbXNnc3RyICLQmtCe0JzQkNCd0JTQmDoiCisKKyM6IHBhcnRlZC91aS5jOjE0NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNpbmcgJXNcbiIKK21zZ3N0ciAi0JLQuNC60L7RgNC40YHRgtC+0LLRg9GU0YLRjNGB0Y8gJXNcbiIKKworIzogcGFydGVkL3VpLmM6MTUxOQorbXNnaWQgIlRoaXMgY29tbWFuZCBkb2VzIG5vdCBtYWtlIHNlbnNlIGluIG5vbi1pbnRlcmFjdGl2ZSBtb2RlLlxuIgorbXNnc3RyICIiCisKKyN+IG1zZ2lkICJHTlUgUGFydGVkIGNhbm5vdCByZXNpemUgdGhpcyBmaWxlIHN5c3RlbSwgcGxlYXNlIHVzZXJlc2l6ZTJmcy4iCisjfiBtc2dzdHIgIiIKKyN+ICJHTlUgUGFydGVkINC90LUg0LzQvtC20LUg0LfQvNGW0L3RjtCy0LDRgtC4INGG0Y4g0YTQsNC50LvQvtCy0YMg0YHQuNGB0YLQtdC80YMsINC60L7RgNC40YHRgtGD0LnRgtC10YHRjCAiCisjfiAidXNlcmVzaXplMmZzLiIKKworI34gbXNnaWQgIndoZXJlIG5lY2Vzc2FyeSwgcHJvbXB0cyBmb3IgdXNlciBpbnRlcnZlbnRpb24iCisjfiBtc2dzdHIgItC60L7Qu9C4INC90LXQvtCx0YXRltC00L3Qviwg0LfQsNC/0LjRgtGD0LLQsNGC0Lgg0LLRgtGA0YPRh9Cw0L3QvdGPINC60L7RgNC40YHRgtGD0LLQsNGH0LAiCisKKyN+IG1zZ2lkICJHTlUgUGFydGVkIFZlcnNpb24gaW5mb3JtYXRpb246XG4iCisjfiBtc2dzdHIgItCS0LXRgNGB0ZbRjyBHTlUgUGFydGVkOlxuIgorCisjfiBtc2dpZCAiIgorI34gInByaW50IFtmcmVlfE5VTUJFUnxhbGxdICAgICAgICAgICAgICAgICAgZGlzcGxheSB0aGUgcGFydGl0aW9uIHRhYmxlLCBhICIKKyN+ICJwYXJ0aXRpb24sIG9yIGFsbCBkZXZpY2VzIgorI34gbXNnc3RyICIiCisjfiAicHJpbnQgW2ZyZWV80J3QntCc0JXQoHxhbGxdICAgICAgICDQstC40LLQtdGB0YLQuCDRgtCw0LHQu9C40YbRjiDRgNC+0LfQtNGW0LvRltCyLCDRgNC+0LfQtNGW0Lsg0LDQsdC+INGD0YHRliAiCisjfiAi0L/RgNC40YHRgtGA0L7RlyIKKworI34gbXNnaWQgIiIKKyN+ICJXaXRob3V0IGFyZ3VtZW50cywgcHJpbnQgZGlzcGxheXMgdGhlIGVudGlyZSBwYXJ0aXRpb24gdGFibGUuIFdpdGggIgorI34gIidmcmVlJ1xuIgorI34gImFyZ3VtZW50LCBpbmZvcm1hdGlvbiBhYm91dCBmcmVlIHNwYWNlIHdpbGwgYmUgZGlzcGxheWVkIG90aGVyd2lzZSBpZiBhXG4iCisjfiAicGFydGl0aW9uIG51bWJlciBpcyBnaXZlbiwgdGhlbiBtb3JlIGRldGFpbGVkIGluZm9ybWF0aW9uIGlzIGRpc3BsYXllZFxuIgorI34gImFib3V0IHRoYXQgcGFydGl0aW9uLiBJZiB0aGUgJ2FsbCcgYXJndW1lbnQgaXMgcGFzc2VkIGluc3RlYWQsIHBhcnRpdGlvblxuIgorI34gImluZm9ybWF0aW9uIGZvciBhbGwgZGV2aWNlcyB3aWxsIGJlIGRpc3BsYXllZC5cbiIKKyN+IG1zZ3N0ciAiIgorI34gItCR0LXQtyDQsNGA0LPRg9C80LXQvdGC0ZbQsiwg0LLQuNCy0L7QtNC40YLRjCDRgtCw0LHQu9C40YbRjiDRgNC+0LfQtNGW0LvRltCyLiDQr9C60YnQviDQstC60LDQt9Cw0L3QviAnZnJlZScsXG4iCisjfiAi0LLRltC00L7QsdGA0LDQttCw0ZTRgtGM0YHRjyDRltC90YTQvtGA0LzQsNGG0ZbRjyDQv9GA0L4g0LLRltC70YzQvdC40Lkg0L/RgNC+0YHRgtGW0YAsINGP0LrRidC+INCy0LrQsNC30LDQvdC+INC90L7QvNC10YBcbiIKKyN+ICLRgNC+0LfQtNGW0LvRgywg0LLQuNCy0L7QtNC40YLRjNGB0Y8g0LTQvtC60LvQsNC00L3RltGI0LAg0ZbQvdGE0L7RgNC80LDRhtGW0Y8g0L/RgNC+INGA0L7Qt9C00ZbQuy4gXG4iCisjfiAi0K/QutGJ0L4g0LLQutCw0LfQsNC90L4gJ2FsbCcsINCy0ZbQtNC+0LHRgNCw0LbQsNGU0YLRjNGB0Y8g0ZbQvdGE0L7RgNC80LDRhtGW0Y8g0L/RgNC+INGD0YHRliDQv9GA0LjRgdGC0YDQvtGXLlxuIgorCisjfiBtc2dpZCAiQXR0ZW1wdCB0byByZWFkIHNlY3RvcnMgJWxkLSVsZCBvdXRzaWRlIG9mIHBhcnRpdGlvbiBvbiAlcy4iCisjfiBtc2dzdHIgItCh0L/RgNC+0LHQsCDQv9GA0L7Rh9C40YLQsNGC0Lgg0YHQtdC60YLQvtGA0LggJWxkLSVsZCDQt9CwINC80LXQttCw0LzQuCDRgNC+0LfQtNGW0LvRgyDQvdCwICVzLiIKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9wby92aS5nbW8gYi9wYXJ0ZWQtMS44LjcvcG8vdmkuZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2NGUwMGIKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvcG8vdmkuZ21vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy9wby92aS5wbyBiL3BhcnRlZC0xLjguNy9wby92aS5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNThkOTM3Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L3BvL3ZpLnBvCkBAIC0wLDAgKzEsMzMyMSBAQAorIyB0cmFuc2xhdGlvbiBvZiBwYXJ0ZWQtMS42LjYucG8gdG8gVmlldG5hbWVzZQorIyBDb3B5cmlnaHQgKEMpIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRyYW4gVGhpIEhvYW5nIFF1eWVuIDxiYW5oZGF1eGFuaGhhaWR1b25nQGdtYWlsLmNvbT4sIDIwMDUuCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBwYXJ0ZWQgMS42LjZcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogYnVnLXBhcnRlZEBnbnUub3JnXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMDctMDUtMDkgMTc6MDItMDQwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDUtMDctMDMgMjE6MDQrMDQwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogVHJhbiBUaGkgSG9hbmcgUXV5ZW4gPGJhbmhkYXV4YW5oaGFpZHVvbmdAZ21haWwuY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IFZpZXRuYW1lc2UgPGdub21ldmktbGlzdEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiWC1HZW5lcmF0b3I6IEtCYWJlbCAxLjkuMVxuIgorCisjOiBsaWIvY2xvc2VvdXQuYzo3NAorbXNnaWQgIndyaXRlIGVycm9yIgorbXNnc3RyICIiCisKKyM6IGxpYi9lcnJvci5jOjEyNQorIywgZnV6enkKK21zZ2lkICJVbmtub3duIHN5c3RlbSBlcnJvciIKK21zZ3N0ciAiROG6oW5nIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4ga2jDtG5nIHLDtSBcIiVzXCIuIgorCisjOiBsaWIvZ2V0b3B0LmM6NTMxIGxpYi9nZXRvcHQuYzo1NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiBgJXMnIGlzIGFtYmlndW91c1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo1ODAgbGliL2dldG9wdC5jOjU4NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIGAtLSVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjU5MyBsaWIvZ2V0b3B0LmM6NTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYCVjJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6NjQxIGxpYi9nZXRvcHQuYzo2NjAgbGliL2dldG9wdC5jOjk3NiBsaWIvZ2V0b3B0LmM6OTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYCVzJyByZXF1aXJlcyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo2OTggbGliL2dldG9wdC5jOjcwMQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5yZWNvZ25pemVkIG9wdGlvbiBgLS0lcydcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6NzA5IGxpYi9nZXRvcHQuYzo3MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVucmVjb2duaXplZCBvcHRpb24gYCVjJXMnXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjc2NCBsaWIvZ2V0b3B0LmM6NzY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbGxlZ2FsIG9wdGlvbiAtLSAlY1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo3NzMgbGliL2dldG9wdC5jOjc3NgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBvcHRpb24gLS0gJWNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6ODI4IGxpYi9nZXRvcHQuYzo4NDQgbGliL2dldG9wdC5jOjEwNDggbGliL2dldG9wdC5jOjEwNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCAtLSAlY1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo4OTcgbGliL2dldG9wdC5jOjkxMworIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIGAtVyAlcycgaXMgYW1iaWd1b3VzXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjkzNyBsaWIvZ2V0b3B0LmM6OTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYC1XICVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6CisjLiBHZXQgdHJhbnNsYXRpb25zIGZvciBvcGVuIGFuZCBjbG9zaW5nIHF1b3RhdGlvbiBtYXJrcy4KKyMuCisjLiBUaGUgbWVzc2FnZSBjYXRhbG9nIHNob3VsZCB0cmFuc2xhdGUgImAiIHRvIGEgbGVmdAorIy4gcXVvdGF0aW9uIG1hcmsgc3VpdGFibGUgZm9yIHRoZSBsb2NhbGUsIGFuZCBzaW1pbGFybHkgZm9yCisjLiAiJyIuICBJZiB0aGUgY2F0YWxvZyBoYXMgbm8gdHJhbnNsYXRpb24sCisjLiBsb2NhbGVfcXVvdGluZ19zdHlsZSBxdW90ZXMgYGxpa2UgdGhpcycsIGFuZAorIy4gY2xvY2FsZV9xdW90aW5nX3N0eWxlIHF1b3RlcyAibGlrZSB0aGlzIi4KKyMuCisjLiBGb3IgZXhhbXBsZSwgYW4gQW1lcmljYW4gRW5nbGlzaCBVbmljb2RlIGxvY2FsZSBzaG91bGQKKyMuIHRyYW5zbGF0ZSAiYCIgdG8gVSsyMDFDIChMRUZUIERPVUJMRSBRVU9UQVRJT04gTUFSSyksIGFuZAorIy4gc2hvdWxkIHRyYW5zbGF0ZSAiJyIgdG8gVSsyMDFEIChSSUdIVCBET1VCTEUgUVVPVEFUSU9OCisjLiBNQVJLKS4gIEEgQnJpdGlzaCBFbmdsaXNoIFVuaWNvZGUgbG9jYWxlIHNob3VsZCBpbnN0ZWFkCisjLiB0cmFuc2xhdGUgdGhlc2UgdG8gVSsyMDE4IChMRUZUIFNJTkdMRSBRVU9UQVRJT04gTUFSSykgYW5kCisjLiBVKzIwMTkgKFJJR0hUIFNJTkdMRSBRVU9UQVRJT04gTUFSSyksIHJlc3BlY3RpdmVseS4KKyMuCisjLiBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIHB1dCBoZXJlLCBwbGVhc2Ugc2VlCisjLiA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9RdW90YXRpb25fbWFyayNHbHlwaHM+CisjLiBhbmQgdXNlIGdseXBocyBzdWl0YWJsZSBmb3IgeW91ciBsYW5ndWFnZS4KKyM6IGxpYi9xdW90ZWFyZy5jOjIyOQorbXNnaWQgImAiCittc2dzdHIgIiIKKworIzogbGliL3F1b3RlYXJnLmM6MjMwCittc2dpZCAiJyIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjEzMQorbXNnaWQgIlN1Y2Nlc3MiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxMzQKK21zZ2lkICJObyBtYXRjaCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjEzNworbXNnaWQgIkludmFsaWQgcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTQwCittc2dpZCAiSW52YWxpZCBjb2xsYXRpb24gY2hhcmFjdGVyIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTQzCittc2dpZCAiSW52YWxpZCBjaGFyYWN0ZXIgY2xhc3MgbmFtZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE0NgorbXNnaWQgIlRyYWlsaW5nIGJhY2tzbGFzaCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE0OQorbXNnaWQgIkludmFsaWQgYmFjayByZWZlcmVuY2UiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNTIKK21zZ2lkICJVbm1hdGNoZWQgWyBvciBbXiIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE1NQorbXNnaWQgIlVubWF0Y2hlZCAoIG9yIFxcKCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE1OAorbXNnaWQgIlVubWF0Y2hlZCBcXHsiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNjEKK21zZ2lkICJJbnZhbGlkIGNvbnRlbnQgb2YgXFx7XFx9IgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTY0Cittc2dpZCAiSW52YWxpZCByYW5nZSBlbmQiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNjcKK21zZ2lkICJNZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTcwCittc2dpZCAiSW52YWxpZCBwcmVjZWRpbmcgcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTczCittc2dpZCAiUHJlbWF0dXJlIGVuZCBvZiByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNzYKK21zZ2lkICJSZWd1bGFyIGV4cHJlc3Npb24gdG9vIGJpZyIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE3OQorbXNnaWQgIlVubWF0Y2hlZCApIG9yIFxcKSIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjY4MAorbXNnaWQgIk5vIHByZXZpb3VzIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvcnBtYXRjaC5jOjcwCittc2dpZCAiXlt5WV0iCittc2dzdHIgIiIKKworIzogbGliL3JwbWF0Y2guYzo3MworbXNnaWQgIl5bbk5dIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBUcmFuc2xhdGUgIihDKSIgdG8gdGhlIGNvcHlyaWdodCBzeW1ib2wKKyMuIChDLWluLWEtY2lyY2xlKSwgaWYgdGhpcyBzeW1ib2wgaXMgYXZhaWxhYmxlIGluIHRoZSB1c2VyJ3MKKyMuIGxvY2FsZS4gIE90aGVyd2lzZSwgZG8gbm90IHRyYW5zbGF0ZSAiKEMpIjsgbGVhdmUgaXQgYXMtaXMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzo2NgorbXNnaWQgIihDKSIKK21zZ3N0ciAiIgorCisjOiBsaWIvdmVyc2lvbi1ldGMuYzo2OAorbXNnaWQgIiIKKyJcbiIKKyJMaWNlbnNlIEdQTHYyKzogR05VIEdQTCB2ZXJzaW9uIDIgb3IgbGF0ZXIgPGh0dHA6Ly9nbnUub3JnL2xpY2Vuc2VzL2dwbC4iCisiaHRtbD5cbiIKKyJUaGlzIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBhcmUgZnJlZSB0byBjaGFuZ2UgYW5kIHJlZGlzdHJpYnV0ZSBpdC5cbiIKKyJUaGVyZSBpcyBOTyBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3LlxuIgorIlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIzogbGliL3ZlcnNpb24tZXRjLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiV3JpdHRlbiBieSAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIzogbGliL3ZlcnNpb24tZXRjLmM6ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiV3JpdHRlbiBieSAlcyBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIldyaXR0ZW4gYnkgJXMsICVzLCBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyJhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6MTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiJXMsIGFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyIlcywgJXMsIGFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzoxMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyIlcywgJXMsICVzLCBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6MTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiJXMsICVzLCAlcywgJXMsXG4iCisiYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjLiBZb3UgY2FuIHVzZSBsaW5lIGJyZWFrcywgZXN0aW1hdGluZyB0aGF0IGVhY2ggYXV0aG9yIG5hbWUgb2NjdXBpZXMKKyMuIGNhLiAxNiBzY3JlZW4gY29sdW1ucyBhbmQgdGhhdCBhIHNjcmVlbiBsaW5lIGhhcyBjYS4gODAgY29sdW1ucy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjEzMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorIiVzLCAlcywgJXMsICVzLFxuIgorIiVzLCBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6MTQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiJXMsICVzLCAlcywgJXMsXG4iCisiJXMsICVzLCBhbmQgb3RoZXJzLlxuIgorbXNnc3RyICIiCisKKyM6IGxpYi94YWxsb2MtZGllLmM6MzUKK21zZ2lkICJtZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzoyMzcKK21zZ2lkICJEaXNrIEltYWdlIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzozMzggbGlicGFydGVkL2FyY2gvZ251LmM6MjYxCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjEyNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igb3BlbmluZyAlczogJXMiCittc2dzdHIgIkzhu5dpIG3hu58gJXM6ICVzIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6MzQ5IGxpYnBhcnRlZC9hcmNoL2dudS5jOjI3MQorIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBvcGVuICVzIHJlYWQtd3JpdGUgKCVzKS4gICVzIGhhcyBiZWVuIG9wZW5lZCByZWFkLW9ubHkuIgorbXNnc3RyICJLSMO0bmcgbeG7nyDEkcaw4bujYyAlcyDEkeG7jWMtZ2hpICglcykuICBN4bufICVzIGNo4buJIMSR4buNYy4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzo0MTEgbGlicGFydGVkL2FyY2gvbGludXguYzoxNDMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGR1cmluZyBzZWVrIGZvciByZWFkIG9uICVzIgorbXNnc3RyICIlcyBraGkgdMOsbSDEkeG7gyDEkeG7jWMgdHLDqm4gJXMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzo0NDQgbGlicGFydGVkL2FyY2gvZ251LmM6NDQ5IGxpYnBhcnRlZC9hcmNoL2dudS5jOjU0OAorIzogbGlicGFydGVkL2FyY2gvZ251LmM6Njc2IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTM5MQorIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxNDY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGR1cmluZyByZWFkIG9uICVzIgorbXNnc3RyICIlcyBraGkgxJHhu41jIHRyw6puICVzIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6NDgwIGxpYnBhcnRlZC9hcmNoL2dudS5jOjUwOQorIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxNTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbid0IHdyaXRlIHRvICVzLCBiZWNhdXNlIGl0IGlzIG9wZW5lZCByZWFkLW9ubHkuIgorbXNnc3RyICJLaMO0bmcgZ2hpIMSRxrDhu6NjIHThu5tpICVzLCB2w6wgbeG7nyBuw7MgY2jhu4kgxJHhu41jLiIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjQ5NiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjE1NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZHVyaW5nIHNlZWsgZm9yIHdyaXRlIG9uICVzIgorbXNnc3RyICIlcyBraGkgdMOsbSDEkeG7gyBnaGkgdHLDqm4gJXMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzo1MzMgbGlicGFydGVkL2FyY2gvZ251LmM6NTg1IGxpYnBhcnRlZC9hcmNoL2dudS5jOjYzMAorIzogbGlicGFydGVkL2FyY2gvZ251LmM6NzA3IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTUxNworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxNjEyIGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTY4NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkdXJpbmcgd3JpdGUgb24gJXMiCittc2dzdHIgIiVzIGtoaSBnaGkgdHLDqm4gJXMiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6NjMgcGFydHByb2JlL3BhcnRwcm9iZS5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICJUcnkgYCVzIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4iCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICVzIFtPUFRJT05dXG4iCisiICBvcjogICVzIERFVklDRSBNSU5PUlxuIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6NzAKK21zZ2lkICIiCisiQ2xlYXIgdW51c2VkIHNwYWNlIG9uIGEgRkFUIHBhcnRpdGlvbiAoYSBHTlUgUGFydGVkIHRlc3RpbmcgdG9vbCkuXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo3NAorbXNnaWQgIiAgICAgIC0taGVscCAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXRcbiIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjc1Cittc2dpZCAiICAgICAgLS12ZXJzaW9uICBvdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdFxuIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6NzcgcGFydHByb2JlL3BhcnRwcm9iZS5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiUmVwb3J0IGJ1Z3MgdG8gPCVzPi5cbiIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjI4NQorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gZmV3IGFyZ3VtZW50cyIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjI5MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIgorbXNnc3RyICJRdcOhIG5oaeG7gXUgdHJhbmcgeOG6pXUuIgorCisjOiBwYXJ0cHJvYmUvcGFydHByb2JlLmM6MTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbT1BUSU9OXSBbREVWSUNFXS4uLlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRwcm9iZS9wYXJ0cHJvYmUuYzoxNDIKK21zZ2lkICIiCisiSW5mb3JtIHRoZSBPUyBvZiBwYXJ0aXRpb24gdGFibGUgY2hhbmdlcy5cbiIKKyJcbiIKKyIgIC1kLCAtLW5vLXVwZGF0ZSAgZG9uJ3QgdXBkYXRlIHRoZSBrZXJuZWxcbiIKKyIgIC1zLCAtLXN1bW1hcnkgICAgcHJpbnQgYSBzdW1tYXJ5IG9mIGNvbnRlbnRzXG4iCisiICAtaCwgLS1oZWxwICAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0XG4iCisiICAtdiwgLS12ZXJzaW9uICAgIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0XG4iCittc2dzdHIgIiIKKworIzogcGFydHByb2JlL3BhcnRwcm9iZS5jOjE1MAorbXNnaWQgIiIKKyJcbiIKKyJXaXRoIG5vIERFVklDRSwgcHJvYmUgYWxsIHBhcnRpdGlvbnMuXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIG9wZW4gJXMuIgorbXNnc3RyICJLaMO0bmcgbeG7nyDEkcaw4bujYyAlcy4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjExNAorbXNnaWQgIlVuYWJsZSB0byBwcm9iZSBzdG9yZS4iCittc2dzdHIgIktow7RuZyB0aMSDbSBkw7IgxJHGsOG7o2Mga2hvIGNo4bupYS4iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjM1MgorIywgZnV6enkKK21zZ2lkICIiCisiVGhlIHBhcnRpdGlvbiB0YWJsZSBjYW5ub3QgYmUgcmUtcmVhZC4gIFRoaXMgbWVhbnMgeW91IG5lZWQgdG8gcmVib290IGJlZm9yZSAiCisibW91bnRpbmcgYW55IG1vZGlmaWVkIHBhcnRpdGlvbnMuICBZb3UgYWxzbyBuZWVkIHRvIHJlaW5zdGFsbCB5b3VyIGJvb3QgIgorImxvYWRlciBiZWZvcmUgeW91IHJlYm9vdCAod2hpY2ggbWF5IHJlcXVpcmUgbW91bnRpbmcgbW9kaWZpZWQgcGFydGl0aW9ucykuICAiCisiSXQgaXMgaW1wb3NzaWJsZSBkbyBib3RoIHRoaW5ncyEgIFNvIHlvdSdsbCBuZWVkIHRvIGJvb3Qgb2ZmIGEgcmVzY3VlIGRpc2ssICIKKyJhbmQgcmVpbnN0YWxsIHlvdXIgYm9vdCBsb2FkZXIgZnJvbSB0aGUgcmVzY3VlIGRpc2suICBSZWFkIHNlY3Rpb24gNCBvZiB0aGUgIgorIlBhcnRlZCBVc2VyIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorbXNnc3RyICIiCisiS2jDtG5nIMSR4buNYyBs4bqhaSDEkcaw4bujYyBi4bqjbmcgcGjDom4gdsO5bmcsIHbDrCB0aOG6vywgY+G6p24ga2jhu59pIMSR4buZbmcgbOG6oWkgdHLGsOG7m2Mga2hpIGfhuq9uICIKKyJi4bqldCBrw70gcGjDom4gdsO5bmcgxJHDoyBz4butYSDEkeG7lWkgbsOgby4gIE5nxrDhu51pIGTDuW5nIGPFqW5nIGPhuqduIGPDoGkgxJHhurd0IGzhuqFpIHRyw6xuaCBraOG7n2kgIgorIsSR4buZbmcgY+G7p2EgbcOsbmggdHLGsOG7m2Mga2hpIGto4bufaSDEkeG7mW5nIGzhuqFpICh0aGFvIHTDoWMgbsOgeSBjw7MgdGjhu4MgecOqdSBj4bqndSBn4bqvbiBwaMOibiAiCisidsO5bmcgxJHDoyBz4butYSDEkeG7lWkpLiAgS2jDtG5nIHRo4buDIHRo4buxYyBoaeG7h24gY+G6oyBoYWkgdGhhbyB0w6FjISAgVsOsIHRo4bq/IG5nxrDhu51pIGTDuW5nICIKKyJz4bq9IGPhuqduIGto4bufaSDEkeG7mW5nIGLhurNuZyDEkcSpYSBt4buBbSBk4buxIHBow7JuZywgdsOgIGPDoGkgxJHhurd0IGzhuqFpIHRyw6xuaCBraOG7n2kgxJHhu5luZyB04burICIKKyLEkcOzLiBIw6N5IMSR4buNYyBwaOG6p24gNCBj4bunYSB0w6BpIGxp4buHdSBOZ8aw4budaSBkw7luZyBQYXJ0ZWQgxJHhu4MgYmnhur90IHRow6ptIGNoaSB0aeG6v3QuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzozNjkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgcGFydGl0aW9uIHRhYmxlIG9uICVzIGNhbm5vdCBiZSByZS1yZWFkICglcykuICBUaGlzIG1lYW5zIHRoZSBIdXJkIGtub3dzICIKKyJub3RoaW5nIGFib3V0IGFueSBtb2RpZmljYXRpb25zIHlvdSBtYWRlLiAgWW91IHNob3VsZCByZWJvb3QgeW91ciBjb21wdXRlciAiCisiYmVmb3JlIGRvaW5nIGFueXRoaW5nIHdpdGggJXMuIgorbXNnc3RyICIiCisiQuG6o25nIHBow6JuIHbDuW5nIHRyw6puICVzICglcykuICBDw7MgbmdoxKlhIGzDoCBIdXJkIGtow7RuZyBiaeG6v3QgZ8OsIHbhu4Egbmjhu69uZyB0aGF5ICIKKyLEkeG7lWkgxJHDoyB04bqhbyByYS4gIE5nxrDhu51pIGTDuW5nIGPhuqduIGto4bufaSDEkeG7mW5nIGzhuqFpIG3DoXkgdMOtbmggdHLGsOG7m2Mga2hpIHRo4buxYyBoaeG7h24gIgorImLhuqV0IGvhu7MgdGhhbyB0w6FjIG7DoG8gduG7m2kgJXMuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzozODAgcGFydGVkL3BhcnRlZC5jOjI0NDMKK21zZ2lkICIiCisiWW91IHNob3VsZCByZWluc3RhbGwgeW91ciBib290IGxvYWRlciBiZWZvcmUgcmVib290aW5nLiAgUmVhZCBzZWN0aW9uIDQgb2YgIgorInRoZSBQYXJ0ZWQgVXNlciBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiIgorIkPhuqduIGPDoGkgxJHhurd0IGzhuqFpIHRyw6xuaCBraOG7n2kgxJHhu5luZyB0csaw4bubYyBraGkga2jhu59pIMSR4buZbmcgbOG6oWkuIEjDo3kgxJHhu41jIHBo4bqnbiA0IGPhu6dhICIKKyJ0w6BpIGxp4buHdSBOZ8aw4budaSBkw7luZyBQYXJ0ZWQgxJHhu4MgYmnhur90IHRow6ptIGNoaSB0aeG6v3QuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo3NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdHJ5aW5nIHRvIHN5bmMgJXMgdG8gZGlzayIKK21zZ3N0ciAiJXMgxJFhbmcgY+G7kSDEkeG7k25nIGLhu5kgc3luYyAlcyBsw6puIMSRxKlhIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjQwOAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc3RhdCBkZXZpY2UgJXMgLSAlcy4iCittc2dzdHIgIktow7RuZyBzdGF0IMSRxrDhu6NjIHRoaeG6v3QgYuG7iyAlcyAtICVzLiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo1MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBkZXRlcm1pbmUgc2VjdG9yIHNpemUgZm9yICVzOiAlcy5cbiIKKyJVc2luZyB0aGUgZGVmYXVsdCBzZWN0b3Igc2l6ZSAoJWxsZCkuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6NTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJEZXZpY2UgJXMgaGFzIGEgbG9naWNhbCBzZWN0b3Igc2l6ZSBvZiAlbGxkLiAgTm90IGFsbCBwYXJ0cyBvZiBHTlUgUGFydGVkICIKKyJzdXBwb3J0IHRoaXMgYXQgdGhlIG1vbWVudCwgYW5kIHRoZSB3b3JraW5nIGNvZGUgaXMgSElHSExZIEVYUEVSSU1FTlRBTC5cbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjU3OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGRldGVybWluZSB0aGUgc2l6ZSBvZiAlcyAoJXMpLiIKK21zZ3N0ciAiS2jDtG5nIG5o4bqtbiByYSBrw61jaCB0aMaw4bubYyBj4bunYSAlcyAoJXMpIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjY2OAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZ2V0IGlkZW50aXR5IG9mIGRldmljZSAlcyAtICVzIgorbXNnc3RyICJLaMO0bmcgbOG6pXkgxJHGsOG7o2MgdMOqbiBj4bunYSB0aGnhur90IGLhu4sgJXMgLSAlcyIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo2NzcKK21zZ2lkICJHZW5lcmljIElERSIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRGV2aWNlICVzIGhhcyBtdWx0aXBsZSAoJWQpIGxvZ2ljYWwgc2VjdG9ycyBwZXIgcGh5c2ljYWwgc2VjdG9yLlxuIgorIkdOVSBQYXJ0ZWQgc3VwcG9ydHMgdGhpcyBFWFBFUklNRU5UQUxMWSBmb3Igc29tZSBzcGVjaWFsIGRpc2sgbGFiZWwvZmlsZSAiCisic3lzdGVtIGNvbWJpbmF0aW9ucywgZS5nLiBHUFQgYW5kIGV4dDIvMy5cbiIKKyJQbGVhc2UgY29uc3VsdCB0aGUgd2ViIHNpdGUgZm9yIHVwLXRvLWRhdGUgaW5mb3JtYXRpb24uIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6ODczCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGluaXRpYWxpc2luZyBTQ1NJIGRldmljZSAlcyAtICVzIgorbXNnc3RyICJM4buXaSBjaOG6oXkgdGhp4bq/dCBi4buLIFNDU0kgJXMgLSAlcyIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo5MjgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZGV2aWNlICVzIGhhcyB6ZXJvIGxlbmd0aCwgYW5kIGNhbid0IHBvc3NpYmx5IHN0b3JlIGEgZmlsZSBzeXN0ZW0gb3IgIgorInBhcnRpdGlvbiB0YWJsZS4gIFBlcmhhcHMgeW91IHNlbGVjdGVkIHRoZSB3cm9uZyBkZXZpY2U/IgorbXNnc3RyICIiCisiVGhp4bq/dCBi4buLICVzIGPDsyBjaGnhu4F1IGTDoGkgYuG6sW5nIGtow7RuZywgdsOgIGtow7RuZyB0aOG7gyBjaOG7qWEgbeG7mXQgaOG7hyB0aOG7kW5nIHThuq1wIHRpbiAiCisiaGF5IG3hu5l0IGLhuqNuZyBwaMOibiB2w7luZy4gIEPDsyB0aOG7gyDEkcOjIGNo4buNbiBzYWkgdGhp4bq/dCBi4buLPyIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMDMyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiVW5hYmxlIHRvIGRldGVybWluZSBnZW9tZXRyeSBvZiBmaWxlL2RldmljZSAlcy4gIFlvdSBzaG91bGQgbm90IHVzZSBQYXJ0ZWQgIgorInVubGVzcyB5b3UgUkVBTExZIGtub3cgd2hhdCB5b3UncmUgZG9pbmchIgorbXNnc3RyICIiCisiS2jDtG5nIG5o4bqtbiByYSBj4bqldSB0csO6YyBow6xuaCBo4buNYyBj4bunYSB04bqtcCB0aW4vdGhp4bq/dCBi4buLLiAgS2jDtG5nIMSRxrDhu6NjIHPhu60gZOG7pW5nICIKKyJQYXJ0ZWQgdHLhu6sga2hpIFRI4buwQyBT4buwIGJp4bq/dCBtw6xuaCDEkWFuZyBsw6BtIGfDrCEiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTExMAorbXNnaWQgIkRBQzk2MCBSQUlEIGNvbnRyb2xsZXIiCittc2dzdHIgIsSQaeG7gXUga2hp4buDbiBEQUM5NjAgUkFJRCBjb250cm9sbGVyIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExMTUKK21zZ2lkICJQcm9taXNlIFNYOCBTQVRBIERldmljZSIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExMjAKK21zZ2lkICJJQk0gUzM5MCBEQVNEIGRyaXZlIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTEyNQorbXNnaWQgIklCTSBpU2VyaWVzIFZpcnR1YWwgREFTRCIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExMzAKK21zZ2lkICJDb21wYXEgU21hcnQgQXJyYXkiCittc2dzdHIgIkTDo3kgVGjDtG5nIG1pbmggY+G7p2EgQ29tcGFxIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExMzUKK21zZ2lkICJBVEFSQUlEIENvbnRyb2xsZXIiCittc2dzdHIgIsSQaeG7gXUga2hp4buDbiBBVEFSQUlEIENvbnRyb2xsZXIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTE0MAorbXNnaWQgIkkyTyBDb250cm9sbGVyIgorbXNnc3RyICLEkGnhu4F1IGtoaeG7g24gSTJPIENvbnRyb2xsZXIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTE0NQorbXNnaWQgIlVzZXItTW9kZSBMaW51eCBVQkQiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTU2Cittc2dpZCAiTGludXggZGV2aWNlLW1hcHBlciIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExNjIKK21zZ2lkICJVbmtub3duIgorbXNnc3RyICJLaMO0bmcgcsO1IgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExNjkKK21zZ2lkICJwZWRfZGV2aWNlX25ldygpICBVbnN1cHBvcnRlZCBkZXZpY2UgdHlwZSIKK21zZ3N0ciAicGVkX2RldmljZV9uZXcoKSAgROG6oW5nIHRoaeG6v3QgYuG7iyBraMO0bmcgaOG7lyB0cuG7oyIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoyMDgzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiRXJyb3IgaW5mb3JtaW5nIHRoZSBrZXJuZWwgYWJvdXQgbW9kaWZpY2F0aW9ucyB0byBwYXJ0aXRpb24gJXMgLS0gJXMuICBUaGlzICIKKyJtZWFucyBMaW51eCB3b24ndCBrbm93IGFib3V0IGFueSBjaGFuZ2VzIHlvdSBtYWRlIHRvICVzIHVudGlsIHlvdSByZWJvb3QgLS0gIgorInNvIHlvdSBzaG91bGRuJ3QgbW91bnQgaXQgb3IgdXNlIGl0IGluIGFueSB3YXkgYmVmb3JlIHJlYm9vdGluZy4iCittc2dzdHIgIiIKKyJM4buXaSBjdW5nIGPhuqVwIGNobyBuaMOibiB0aMO0bmcgdGluIHbhu4Egc+G7sSBz4butYSDEkeG7lWkgcGjDom4gdsO5bmcgJXMgLSAlcy4gIEPDsyBuZ2jEqWEgIgorImzDoCBMaW51eCBz4bq9IGtow7RuZyBiaeG6v3QgduG7gSBuaOG7r25nIHRoYXkgxJHhu5VpIMSRw6MgdOG6oW8gcmEgdHLDqm4gJXMgY2hvIMSR4bq/biBraGkga2jhu59pICIKKyLEkeG7mW5nIGzhuqFpIC0gdsOsIHRo4bq/IGtow7RuZyBuw6puIGfhuq9uIGhv4bq3YyBz4butIGThu6VuZyBwaMOibiB2w7luZyBuw6B5IHRyxrDhu5tjIGtoaSBraOG7n2kgIgorIsSR4buZbmcgbOG6oWkuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjIyNjIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJwYXJ0ZWQgd2FzIHVuYWJsZSB0byByZS1yZWFkIHRoZSBwYXJ0aXRpb24gdGFibGUgb24gJXMgKCVzKS4gIFRoaXMgbWVhbnMgIgorIkxpbnV4IHdvbid0IGtub3cgYW55dGhpbmcgYWJvdXQgdGhlIG1vZGlmaWNhdGlvbnMgeW91IG1hZGUuICIKK21zZ3N0ciAiIgorIk5ow6JuIGtow7RuZyDEkeG7jWMgbOG6oWkgxJHGsOG7o2MgYuG6o25nIHBow6JuIHbDuW5nIHRyw6puICVzICglcykuICBDw7MgbmdoxKlhIGzDoCBMaW51eCBz4bq9ICIKKyJraMO0bmcgYmnhur90IHbhu4Egbmjhu69uZyB0aGF5IMSR4buVaSDEkcOjIHThuqFvIHJhIGNobyDEkeG6v24ga2hpIGto4bufaSDEkeG7mW5nIGzhuqFpLiAgTmfGsOG7nWkgIgorImTDuW5nIG7Dqm4ga2jhu59pIMSR4buZbmcgbOG6oWkgbcOheSB0w61uaCB0csaw4bubYyBraGkgdGhhbyB0w6FjIHbhu5tpICVzLiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoyMzY4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGtlcm5lbCB3YXMgdW5hYmxlIHRvIHJlLXJlYWQgdGhlIHBhcnRpdGlvbiB0YWJsZSBvbiAlcyAoJXMpLiAgVGhpcyBtZWFucyAiCisiTGludXggd29uJ3Qga25vdyBhbnl0aGluZyBhYm91dCB0aGUgbW9kaWZpY2F0aW9ucyB5b3UgbWFkZSB1bnRpbCB5b3UgIgorInJlYm9vdC4gIFlvdSBzaG91bGQgcmVib290IHlvdXIgY29tcHV0ZXIgYmVmb3JlIGRvaW5nIGFueXRoaW5nIHdpdGggJXMuIgorbXNnc3RyICIiCisiTmjDom4ga2jDtG5nIMSR4buNYyBs4bqhaSDEkcaw4bujYyBi4bqjbmcgcGjDom4gdsO5bmcgdHLDqm4gJXMgKCVzKS4gIEPDsyBuZ2jEqWEgbMOgIExpbnV4IHPhur0gIgorImtow7RuZyBiaeG6v3QgduG7gSBuaOG7r25nIHRoYXkgxJHhu5VpIMSRw6MgdOG6oW8gcmEgY2hvIMSR4bq/biBraGkga2jhu59pIMSR4buZbmcgbOG6oWkuICBOZ8aw4budaSAiCisiZMO5bmcgbsOqbiBraOG7n2kgxJHhu5luZyBs4bqhaSBtw6F5IHTDrW5oIHRyxrDhu5tjIGtoaSB0aGFvIHTDoWMgduG7m2kgJXMuIgorCisjOiBsaWJwYXJ0ZWQvY3MvZ2VvbS5jOjE2MgorbXNnaWQgIkNhbid0IGhhdmUgdGhlIGVuZCBiZWZvcmUgdGhlIHN0YXJ0ISIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGPDsyBr4bq/dCB0aMO6YyDEkeG7qW5nIHRyxrDhu5tjIGLhuq90IMSR4bqndSEiCisKKyM6IGxpYnBhcnRlZC9jcy9nZW9tLmM6MTY5Cittc2dpZCAiQ2FuJ3QgaGF2ZSBhIHBhcnRpdGlvbiBvdXRzaWRlIHRoZSBkaXNrISIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGPDsyBwaMOibiB2w7luZyBu4bqxbSBuZ2/DoGkg4buVIMSRxKlhISIKKworIzogbGlicGFydGVkL2NzL2dlb20uYzozNjYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkF0dGVtcHQgdG8gd3JpdGUgc2VjdG9ycyAlbGQtJWxkIG91dHNpZGUgb2YgcGFydGl0aW9uIG9uICVzLiIKK21zZ3N0ciAiQ+G7kSBnaGkgY8OhYyBzZWN0b3IgJWxkLSVsZCBu4bqxbSBuZ2/DoGkgcGjDom4gdsO5bmcgdHLDqm4gJXMiCisKKyM6IGxpYnBhcnRlZC9jcy9nZW9tLmM6NDA2IGxpYnBhcnRlZC9mcy9saW51eF9zd2FwL2xpbnV4X3N3YXAuYzo0NzUKK21zZ2lkICJjaGVja2luZyBmb3IgYmFkIGJsb2NrcyIKK21zZ3N0ciAixJFhbmcga2nhu4NtIHRyYSBjw6FjIGto4buRaSB44bqldSIKKworIzogbGlicGFydGVkL2RlYnVnLmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkJhY2t0cmFjZSBoYXMgJWQgY2FsbHMgb24gc3RhY2s6XG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2RlYnVnLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkFzc2VydGlvbiAoJXMpIGF0ICVzOiVkIGluIGZ1bmN0aW9uICVzKCkgZmFpbGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIwMworIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gb3BlbiAlcyAtIHVucmVjb2duaXNlZCBkaXNrIGxhYmVsLiIKK21zZ3N0ciAiS2jDtG5nIG3hu58gxJHGsOG7o2MgJXMgLSBuaMOjbiDEkcSpYSBraMO0bmcgbmjhuq1uIHJhLiIKKworIzogbGlicGFydGVkL2Rpc2suYzo0NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgbGlicGFydGVkIGRvZXNuJ3QgaGF2ZSB3cml0ZSBzdXBwb3J0IGZvciAlcy4gIFBlcmhhcHMgaXQgd2FzIGNvbXBpbGVkICIKKyJyZWFkLW9ubHkuIgorbXNnc3RyICIiCisiVGjGsCB2aeG7h24gbGlicGFydGVkIG7DoHkga2jDtG5nIGjhu5cgdHLhu6MgJXMuICBDw7MgdGjhu4MgxJHDoyBiacOqbiBk4buLY2ggbsOzIGNo4buJIMSR4buNYy4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6NTk4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJQYXJ0aXRpb24gJWQgaXMgJXMsIGJ1dCB0aGUgZmlsZSBzeXN0ZW0gaXMgJXMuIgorbXNnc3RyICJQaMOibiB2w7luZyAlZCAlLjNmTWIsIG5oxrBuZyBo4buHIHRo4buRbmcgdOG6rXAgdGluIGzDoCAlLjNmTWIuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjEwNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZGlzayBsYWJlbHMgZG8gbm90IHN1cHBvcnQgZXh0ZW5kZWQgcGFydGl0aW9ucy4iCittc2dzdHIgIk5ow6NuIMSRxKlhICVzIGtow7RuZyBo4buXIHRy4bujIGPDoWMgcGjDom4gdsO5bmcgbeG7nyBy4buZbmcuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE2MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZGlzayBsYWJlbHMgZG9uJ3Qgc3VwcG9ydCBsb2dpY2FsIG9yIGV4dGVuZGVkIHBhcnRpdGlvbnMuIgorbXNnc3RyICJOaMOjbiDEkcSpYSAlcyBraMO0bmcgaOG7lyB0cuG7oyBjw6FjIHBow6JuIHbDuW5nIG3hu58gcuG7mW5nIGhheSBsw7Rnw61jLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNjQ3CisjLCBmdXp6eQorbXNnaWQgIlRvbyBtYW55IHByaW1hcnkgcGFydGl0aW9ucy4iCittc2dzdHIgIlF1w6Egbmhp4buBdSBwaMOibiB2w7luZyBjaMOtbmgiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTY1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2FuJ3QgYWRkIGEgbG9naWNhbCBwYXJ0aXRpb24gdG8gJXMsIGJlY2F1c2UgdGhlcmUgaXMgbm8gZXh0ZW5kZWQgcGFydGl0aW9uLiIKK21zZ3N0ciAiS2jDtG5nIHRow6ptIMSRxrDhu6NjIHBow6JuIHbDuW5nIGzDtGfDrWMgdsOgbyAlcywgdsOsIGtow7RuZyBjw7MgcGjDom4gdsO5bmcgbeG7nyBy4buZbmcuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE2ODAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkNhbid0IGhhdmUgbW9yZSB0aGFuIG9uZSBleHRlbmRlZCBwYXJ0aXRpb24gb24gJXMuIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgY8OzIGjGoW4gbeG7mXQgcGjDom4gdsO5bmcgbeG7nyBy4buZbmcgdHLDqm4gJXMiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTY5MAorbXNnaWQgIkNhbid0IGhhdmUgbG9naWNhbCBwYXJ0aXRpb25zIG91dHNpZGUgb2YgdGhlIGV4dGVuZGVkIHBhcnRpdGlvbi4iCittc2dzdHIgIktow7RuZyB0aOG7gyBjw7MgcGjDom4gdsO5bmcgbMO0Z8OtYyBu4bqxbSBuZ2/DoGkgcGjDom4gdsO5bmcgbeG7nyBy4buZbmcuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE3MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2FuJ3QgaGF2ZSBhIGxvZ2ljYWwgcGFydGl0aW9uIG91dHNpZGUgb2YgdGhlIGV4dGVuZGVkIHBhcnRpdGlvbiBvbiAlcy4iCittc2dzdHIgIktow7RuZyB0aOG7gyBjw7MgcGjDom4gdsO5bmcgbMO0Z8OtYyBu4bqxbSBuZ2/DoGkgcGjDom4gdsO5bmcgbeG7nyBy4buZbmcgdHLDqm4gJXMuIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE3MjUgbGlicGFydGVkL2Rpc2suYzoxNzc5IGxpYnBhcnRlZC9kaXNrLmM6MTk0NQorIywgZnV6enkKK21zZ2lkICJDYW4ndCBoYXZlIG92ZXJsYXBwaW5nIHBhcnRpdGlvbnMuIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgY8OzIHBow6JuIHbDuW5nIMSRw6ggbMOqbiBuaGF1IgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE3MzMKK21zZ2lkICJDYW4ndCBoYXZlIGEgcHJpbWFyeSBwYXJ0aXRpb24gaW5zaWRlIGFuIGV4dGVuZGVkIHBhcnRpdGlvbi4iCittc2dzdHIgIktow7RuZyB0aOG7gyBjw7MgcGjDom4gdsO5bmcgY2jDrW5oIG7hurFtIHRyb25nIG3hu5l0IHBow6JuIHbDuW5nIG3hu58gcuG7mW5nLiIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTQwCittc2dpZCAibWV0YWRhdGEiCittc2dzdHIgImThu68gbGnhu4d1IG3DqnRhIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNDIKK21zZ2lkICJmcmVlIgorbXNnc3RyICJ0cuG7kW5nIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNDQgcGFydGVkL3VpLmM6MTE2OSBwYXJ0ZWQvdWkuYzoxMTk3Cittc2dpZCAiZXh0ZW5kZWQiCittc2dzdHIgIm3hu59y4buZbmciCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE0NiBwYXJ0ZWQvdWkuYzoxMTczIHBhcnRlZC91aS5jOjEyMDEKK21zZ2lkICJsb2dpY2FsIgorbXNnc3RyICJsw7Rnw61jIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNDggcGFydGVkL3VpLmM6MTE2NSBwYXJ0ZWQvdWkuYzoxMTkzCittc2dpZCAicHJpbWFyeSIKK21zZ3N0ciAiY2jDrW5oIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNjQKK21zZ2lkICJib290IgorbXNnc3RyICJrxJHhu5luZyIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTY2Cittc2dpZCAicm9vdCIKK21zZ3N0ciAiZ+G7kWMiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE2OAorbXNnaWQgInN3YXAiCittc2dzdHIgInN3YXAiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE3MAorbXNnaWQgImhpZGRlbiIKK21zZ3N0ciAi4bqpbiIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTcyCittc2dpZCAicmFpZCIKK21zZ3N0ciAicmFpZCIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTc0Cittc2dpZCAibHZtIgorbXNnc3RyICJsdm0iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE3NgorbXNnaWQgImxiYSIKK21zZ3N0ciAibGJhIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNzgKK21zZ2lkICJocC1zZXJ2aWNlIgorbXNnc3RyICJocC1k4buLY2h24bulIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxODAKK21zZ2lkICJwYWxvIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE4MgorbXNnaWQgInByZXAiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTg0Cittc2dpZCAibXNmdHJlcyIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxOTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gcGFydGl0aW9uIGZsYWcsICVkLiIKK21zZ3N0ciAiS2jDtG5nIHLDtSBj4budIHBow6JuIHbDuW5nLCAlZC4iCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo3OAorbXNnaWQgIkluZm9ybWF0aW9uIgorbXNnc3RyICJUaMO0bmcgdGluIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6NzkKK21zZ2lkICJXYXJuaW5nIgorbXNnc3RyICJD4bqjbmggYsOhbyIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjgwCittc2dpZCAiRXJyb3IiCittc2dzdHIgIkzhu5dpIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODEKK21zZ2lkICJGYXRhbCIKK21zZ3N0ciAiTOG7l2kgbuG6t25nIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODIKK21zZ2lkICJCdWciCittc2dzdHIgIkzhu5dpIGJ1ZyIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjgzCittc2dpZCAiTm8gSW1wbGVtZW50YXRpb24iCittc2dzdHIgIkNoxrBhIHBow6F0IHRyaeG7g24iCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4NworbXNnaWQgIkZpeCIKK21zZ3N0ciAiU+G7rWEiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4OAorbXNnaWQgIlllcyIKK21zZ3N0ciAiQ8OzIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODkKK21zZ2lkICJObyIKK21zZ3N0ciAiS2jDtG5nIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6OTAKK21zZ2lkICJPSyIKK21zZ3N0ciAixJDGsOG7o2MiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo5MQorbXNnaWQgIlJldHJ5IgorbXNnc3RyICJUaOG7rSBs4bqhaSIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjkyCittc2dpZCAiSWdub3JlIgorbXNnc3RyICJM4budIMSRaSIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjkzCittc2dpZCAiQ2FuY2VsIgorbXNnc3RyICJE4burbmciCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzoxMzMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBIGJ1ZyBoYXMgYmVlbiBkZXRlY3RlZCBpbiBHTlUgUGFydGVkLiAgUmVmZXIgdG8gdGhlIHdlYiBzaXRlIG9mIHBhcnRlZCAiCisiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3BhcnRlZC9wYXJ0ZWQuaHRtbCBmb3IgbW9yZSBpbmZvcm1hdGlvbnMgb2Ygd2hhdCAiCisiY291bGQgYmUgdXNlZnVsIGZvciBidWcgc3VibWl0dGluZyEgIFBsZWFzZSBlbWFpbCBhIGJ1ZyByZXBvcnQgdG8gYnVnLSIKKyJwYXJ0ZWRAZ251Lm9yZyBjb250YWluaW5nIGF0IGxlYXN0IHRoZSB2ZXJzaW9uICglcykgYW5kIHRoZSBmb2xsb3dpbmcgIgorIm1lc3NhZ2U6ICAiCittc2dzdHIgIiIKKyJQaMOhdCBoaeG7h24gcmEgbeG7mXQgbOG7l2kgYnVnIHRyb25nIEdOVSBwYXJ0ZWQuICBYaW4gaMOjeSBn4butaSBlbWFpbCB0aMO0bmcgYsOhbyB04bubaSAiCisiYnVnLXBhcnRlZEBnbnUub3JnIGvDqG0gdGhlbyBwaGnDqm4gYuG6o24gKCVzKSB2w6AgdGjDtG5nIHRpbiBzYXU6IgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjM4NAorbXNnaWQgIkNvdWxkIG5vdCBkZXRlY3QgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICJLaMO0bmcgbmjhuq1uIHJhIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4uIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjM5NQorIywgZnV6enkKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gaXMgYmlnZ2VyIHRoYW4gaXRzIHZvbHVtZSEiCittc2dzdHIgIkjhu4cgdGjhu5FuZyB04bqtcCB0aW4gbOG7m24gaMahbiB2b2x1bWUgY+G7p2EgbsOzISIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo0MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VwcG9ydCBmb3Igb3BlbmluZyAlcyBmaWxlIHN5c3RlbXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIkjhu5cgdHLhu6MgbeG7nyAlcyBo4buHIHRo4buRbmcgdOG6rXAgdGluIGPDsm4gY2jGsGEgxJHGsOG7o2MgcGjDoXQgdHJp4buDbi4iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnQgZm9yIGNyZWF0aW5nICVzIGZpbGUgc3lzdGVtcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiSOG7lyB0cuG7oyB04bqhbyAlcyBo4buHIHRo4buRbmcgdOG6rXAgdGluIGPDsm4gY2jGsGEgxJHGsOG7o2MgcGjDoXQgdHJp4buDbi4iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnQgZm9yIGNoZWNraW5nICVzIGZpbGUgc3lzdGVtcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiSOG7lyB0cuG7oyBraeG7g20gdHJhICVzIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4gY8OybiBjaMawYSDEkcaw4bujYyBwaMOhdCB0cmnhu4NuLiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo1NzEKK21zZ2lkICJyYXcgYmxvY2sgY29weWluZyIKK21zZ3N0ciAic2FvIGNow6lwIGPDoWMga2jhu5FpIHRow7Qgc8ahIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjU4MgorbXNnaWQgImdyb3dpbmcgZmlsZSBzeXN0ZW0iCittc2dzdHIgIsSRYW5nIHTEg25nIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4iCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NjIyCittc2dpZCAiQ2FuJ3QgY29weSBvbnRvIGFuIG92ZXJsYXBwaW5nIHBhcnRpdGlvbi4iCittc2dzdHIgIktow7RuZyBzYW8gY2jDqXAgxJHGsOG7o2MgdOG7m2kgbeG7mXQgcGjDom4gdsO5bmcgY2jDqG4gbMOqbiBuaGF1LiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo2NDQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJEaXJlY3Qgc3VwcG9ydCBmb3IgY29weWluZyBmaWxlIHN5c3RlbXMgaXMgbm90IHlldCBpbXBsZW1lbnRlZCBmb3IgJXMuICAiCisiSG93ZXZlciwgc3VwcG9ydCBmb3IgcmVzaXppbmcgaXMgaW1wbGVtZW50ZWQuICBUaGVyZWZvcmUsIHRoZSBmaWxlIHN5c3RlbSAiCisiY2FuIGJlIGNvcGllZCBpZiB0aGUgbmV3IHBhcnRpdGlvbiBpcyBhdCBsZWFzdCBhcyBiaWcgYXMgdGhlIG9sZCBvbmUuICBTbywgIgorImVpdGhlciBzaHJpbmsgdGhlIHBhcnRpdGlvbiB5b3UgYXJlIHRyeWluZyB0byBjb3B5LCBvciBjb3B5IHRvIGEgYmlnZ2VyICIKKyJwYXJ0aXRpb24uIgorbXNnc3RyICIiCisiSOG7lyB0cuG7oyB0aOG6s25nIMSR4buDIHNhbyBjaMOpcCBo4buHIHRo4buRbmcgdOG6rXAgdGluIGNoxrBhIMSRxrDhu6NjIHBow6F0IHRyaeG7g24gY2hvICVzLiAgVHV5ICIKKyJuaGnDqm4sIMSRw6MgY8OzIGjhu5cgdHLhu6MgdGhheSDEkeG7lWkga8OtY2ggdGjGsOG7m2MuICBWw6wgdGjhur8sIGPDsyB0aOG7gyBzYW8gY2jDqXAgaOG7hyB0aOG7kW5nICIKKyJ04bqtcCB0aW4gbuG6v3UgcGjDom4gdsO5bmcgbeG7m2kgY8OzIGvDrWNoIHRoxrDhu5tjIGtow7RuZyBuaOG7jyBoxqFuIHBow6JuIHbDuW5nIGPFqS4gIFbDrCB24bqteSwgIgorImhv4bq3YyByw7p0IG5n4bqvbiBwaMOibiB2w7luZyBj4bqnbiBzYW8gY2jDqXAsIGhv4bq3YyBzYW8gY2jDqXAgdOG7m2kgbeG7mXQgcGjDom4gdsO5bmcgbOG7m24gIgorImjGoW4uIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjY1OAorIywgYy1mb3JtYXQKK21zZ2lkICJTdXBwb3J0IGZvciBjb3B5aW5nICVzIGZpbGUgc3lzdGVtcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiSOG7lyB0cuG7oyBzYW8gY2jDqXAgY2jDqXAgJXMgaOG7hyB0aOG7kW5nIHThuq1wIHRpbiBjaMawYSDEkcaw4bujYyBwaMOhdCB0cmnhu4NuLiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo2OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VwcG9ydCBmb3IgcmVzaXppbmcgJXMgZmlsZSBzeXN0ZW1zIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICJI4buXIHRy4bujIHRoYXkgxJHhu5VpIGvDrWNoIHRoxrDhu5tjICVzIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4gY2jGsGEgxJHGsOG7o2MgcGjDoXQgdHJp4buDbi4iCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjMxNQorbXNnaWQgImNyZWF0aW5nIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQwMgorIywgZnV6enkKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gaXMgaW4gYW4gaW52YWxpZCBzdGF0ZS4gIFBlcmhhcHMgaXQgaXMgbW91bnRlZD8iCittc2dzdHIgIkjhu4cgdGjhu5FuZyB04bqtcCB0aW4gbOG7m24gaMahbiB2b2x1bWUgY+G7p2EgbsOzISIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDEwCittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIGlzIGluIG9sZCAodW5yZXNpemVhYmxlKSBmb3JtYXQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQxNgorbXNnaWQgIkludmFsaWQgZnJlZSBibG9ja3MgY291bnQuICBSdW4gcmVpc2VyZnNjayAtLWNoZWNrIGZpcnN0LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0MzEKKyMsIGZ1enp5Cittc2dpZCAiY2hlY2tpbmciCittc2dzdHIgImNoZWNrIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0MzcKK21zZ2lkICJSZWlzZXJmcyB0cmVlIHNlZW1zIHRvIGJlIGNvcnJ1cHRlZC4gIFJ1biByZWlzZXJmc2NrIC0tY2hlY2sgZmlyc3QuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQ0OQorIywgZnV6enkKK21zZ2lkICIiCisiVGhlIHJlaXNlcmZzIGZpbGUgc3lzdGVtIHBhc3NlZCBhIGJhc2ljIGNoZWNrLiAgRm9yIGEgbW9yZSBjb21wcmVoZW5zaXZlICIKKyJjaGVjaywgcnVuIHJlaXNlcmZzY2sgLS1jaGVjay4iCittc2dzdHIgIiIKKyJI4buHIHRo4buRbmcgdOG6rXAgdGluIGV4dDIgxJHDoyBxdWEga2nhu4NtIHRyYSBjxqEgYuG6o24uICDEkOG7gyBraeG7g20gdHJhIGvhu7kgaMahbiwgaMOjeSBkw7luZyAiCisiY2jGsMahbmcgdHLDrG5oIGUyZnNjay4iCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQ3NAorIywgZnV6enkKK21zZ2lkICJTb3JyeSwgY2FuJ3QgbW92ZSB0aGUgc3RhcnQgb2YgcmVpc2VyZnMgcGFydGl0aW9ucyB5ZXQuIgorbXNnc3RyICJS4bqldCB0aeG6v2MsIHThuqFtIHRo4budaSBjaMawYSB0aOG7gyBkaSBjaHV54buDbiDEkeG6p3UgY+G7p2EgcGjDom4gdsO5bmcgZXh0MiEiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQ5MAorbXNnaWQgIkNvdWxkbid0IHJlb3BlbiBkZXZpY2UgYWJzdHJhY3Rpb24gbGF5ZXIgZm9yIHJlYWQvd3JpdGUuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjUwOCBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjU1MgorIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzoyNTAgbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo2MjkKK21zZ2lkICJzaHJpbmtpbmciCittc2dzdHIgIsSRYW5nIHLDunQgbmfhuq9uIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo1MjAKKyMsIGZ1enp5Cittc2dpZCAiZXhwYW5kaW5nIgorbXNnc3RyICJD4bqjbmggYsOhbyIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NTkyCittc2dpZCAiQ291bGRuJ3QgY3JlYXRlIHJlaXNlcmZzIGRldmljZSBhYnN0cmFjdGlvbiBoYW5kbGVyLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo2MDYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkRldmljZSBpcyB0b28gc21hbGwgZm9yICVsdSBibG9ja3MuIgorbXNnc3RyICJI4buHIHRo4buRbmcgdOG6rXAgdGluIHF1w6Egbmjhu48gY2hvIGV4dDIuIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo2MTUKK21zZ2lkICJjb3B5aW5nIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjY4MgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCByZXNvbHZlIHN5bWJvbCAlcy4gIEVycm9yOiAlcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NzA0Cittc2dpZCAiR05VIFBhcnRlZCBmb3VuZCBhbiBpbnZhbGlkIGxpYnJlaXNlcmZzIGxpYnJhcnkuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjcxNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiR05VIFBhcnRlZCBoYXMgZGV0ZWN0ZWQgbGlicmVpc2VyZnMgaW50ZXJmYWNlIHZlcnNpb24gbWlzbWF0Y2guICBGb3VuZCAlZC0lIgorImQsIHJlcXVpcmVkICVkLiBSZWlzZXJGUyBzdXBwb3J0IHdpbGwgYmUgZGlzYWJsZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYWl4LmM6MTM3CisjLCBmdXp6eQorbXNnaWQgIlN1cHBvcnQgZm9yIHJlYWRpbmcgQUlYIGRpc2sgbGFiZWxzIGlzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICJI4buXIHRy4bujIHThuqFvICVzIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4gY8OybiBjaMawYSDEkcaw4bujYyBwaMOhdCB0cmnhu4NuLiIKKworIzogbGlicGFydGVkL2xhYmVscy9haXguYzoxNDgKKyMsIGZ1enp5Cittc2dpZCAiU3VwcG9ydCBmb3Igd3JpdGluZyBBSVggZGlzayBsYWJlbHMgaXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIkjhu5cgdHLhu6MgdOG6oW8gJXMgaOG7hyB0aOG7kW5nIHThuq1wIHRpbiBjw7JuIGNoxrBhIMSRxrDhu6NjIHBow6F0IHRyaeG7g24uIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2FpeC5jOjE2MQorIywgZnV6enkKK21zZ2lkICIiCisiU3VwcG9ydCBmb3IgYWRkaW5nIHBhcnRpdGlvbnMgdG8gQUlYIGRpc2sgbGFiZWxzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICJI4buXIHRy4bujIHThuqFvICVzIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4gY8OybiBjaMawYSDEkcaw4bujYyBwaMOhdCB0cmnhu4NuLiIKKworIzogbGlicGFydGVkL2xhYmVscy9haXguYzoxNzEKKyMsIGZ1enp5Cittc2dpZCAiIgorIlN1cHBvcnQgZm9yIGR1cGxpY2F0aW5nIHBhcnRpdGlvbnMgaW4gQUlYIGRpc2sgbGFiZWxzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICJI4buXIHRy4bujIHThuqFvICVzIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4gY8OybiBjaMawYSDEkcaw4bujYyBwaMOhdCB0cmnhu4NuLiIKKworIzogbGlicGFydGVkL2xhYmVscy9haXguYzoxODkKKyMsIGZ1enp5Cittc2dpZCAiIgorIlN1cHBvcnQgZm9yIHNldHRpbmcgc3lzdGVtIHR5cGUgb2YgcGFydGl0aW9ucyBpbiBBSVggZGlzayBsYWJlbHMgaXMgbm90ICIKKyJpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICJI4buXIHRy4bujIHThuqFvICVzIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4gY8OybiBjaMawYSDEkcaw4bujYyBwaMOhdCB0cmnhu4NuLiIKKworIzogbGlicGFydGVkL2xhYmVscy9haXguYzoxOTkKKyMsIGZ1enp5Cittc2dpZCAiU3VwcG9ydCBmb3Igc2V0dGluZyBmbGFncyBpbiBBSVggZGlzayBsYWJlbHMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIkjhu5cgdHLhu6MgdOG6oW8gJXMgaOG7hyB0aOG7kW5nIHThuq1wIHRpbiBjw7JuIGNoxrBhIMSRxrDhu6NjIHBow6F0IHRyaeG7g24uIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2JzZC5jOjUwMSBsaWJwYXJ0ZWQvbGFiZWxzL2Rhc2QuYzo3NTUKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZG9zLmM6MTk3NCBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjc3MAorIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzoxNDQ4IGxpYnBhcnRlZC9sYWJlbHMvbG9vcC5jOjI0OAorIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoxNDA4IGxpYnBhcnRlZC9sYWJlbHMvcGM5OC5jOjc1OQorIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzoxMDQxIGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6NzA1Cittc2dpZCAiVW5hYmxlIHRvIHNhdGlzZnkgYWxsIGNvbnN0cmFpbnRzIG9uIHRoZSBwYXJ0aXRpb24uIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgdGhv4bqjIG3Do24gbeG7jWkgc+G7sSBi4bqvdCBideG7mWMgdHLDqm4gcGjDom4gdsO5bmcuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2JzZC5jOjUyNgorIywgZnV6enkKK21zZ2lkICJVbmFibGUgdG8gYWxsb2NhdGUgYSBic2QgZGlza2xhYmVsIHNsb3QuIgorbXNnc3RyICJLaMO0bmcgcGjDom4gcGjhu5FpIMSRxrDhu6NjIG3hu5l0IHLDo25oIG5ow6NuIMSRxKlhIGJzZCIKKworIzogbGlicGFydGVkL2xhYmVscy9kYXNkLmM6MTY2CisjLCBmdXp6eQorbXNnaWQgIlVuYWJsZSB0byBkZXRlcm1pbmUgdGhlIGJsb2NrIHNpemUgb2YgdGhpcyBkYXNkIgorbXNnc3RyICJLaMO0bmcgbmjhuq1uIHJhIGvDrWNoIHRoxrDhu5tjIGPhu6dhICVzICglcykiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZGFzZC5jOjc4MQorIywgZnV6enkKK21zZ2lkICJVbmFibGUgdG8gYWxsb2NhdGUgYSBkYXNkIGRpc2tsYWJlbCBzbG90IgorbXNnc3RyICJLaMO0bmcgcGjDom4gcGjhu5FpIMSRxrDhu6NjIG3hu5l0IHLDo25oIG5ow6NuIMSRxKlhIGJzZCIKKworIzogbGlicGFydGVkL2xhYmVscy9kb3MuYzo4MjcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcGFydGl0aW9uIHRhYmxlIG9uICVzIC0tIHdyb25nIHNpZ25hdHVyZSAleC4iCittc2dzdHIgIkLhuqNuZyBwaMOibiB2w7luZyBzYWkgdHLDqm4gJXMgLSBzYWkgY2jhu68ga8O9ICV4IgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rvcy5jOjg1NQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHBhcnRpdGlvbiB0YWJsZSAtIHJlY3Vyc2l2ZSBwYXJ0aXRpb24gb24gJXMuIgorbXNnc3RyICJC4bqjbmcgcGjDom4gdsO5bmcgc2FpIC0gcGjDom4gdsO5bmcgxJHhu4cgcXV5IHRyw6puICVzLiIKKworIzogbGlicGFydGVkL2xhYmVscy9kb3MuYzoxMzE4Cittc2dpZCAiRXh0ZW5kZWQgcGFydGl0aW9ucyBjYW5ub3QgYmUgaGlkZGVuIG9uIG1zZG9zIGRpc2sgbGFiZWxzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rvcy5jOjE5NTgKK21zZ2lkICJQYXJ0ZWQgY2FuJ3QgcmVzaXplIHBhcnRpdGlvbnMgbWFuYWdlZCBieSBXaW5kb3dzIER5bmFtaWMgRGlzay4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9kdmguYzoxOTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyBubyBleHRlbmRlZCBwYXJ0aXRpb24gKHZvbHVtZSBoZWFkZXIgcGFydGl0aW9uKS4iCittc2dzdHIgIiIKKyIlcyBraMO0bmcgY8OzIHBow6JuIHbDuW5nIG3hu58gcuG7mW5nIChwaMOibiB2w7luZyBwaOG6p24gxJHhuqd1IGPhu6dhIGPDoWMgdm9sdW1lKS4gIE7hur91IGzhu50gIgorIsSRaSwgdGjDrCBt4buNaSB2b2x1bWUga2jhu59pIMSR4buZbmcgc+G6vSBi4buLIHjDs2EuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjMxMworbXNnaWQgIkNoZWNrc3VtIGlzIHdyb25nLCBpbmRpY2F0aW5nIHRoZSBwYXJ0aXRpb24gdGFibGUgaXMgY29ycnVwdC4iCittc2dzdHIgIlThu5VuZyBraeG7g20gdHJhIGLhu4sgc2FpLCBjaOG7iSByYSBi4bqjbmcgcGjDom4gdsO5bmcgYuG7iyBo4buPbmcuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjYxNgorbXNnaWQgIk9ubHkgcHJpbWFyeSBwYXJ0aXRpb25zIGNhbiBiZSByb290IHBhcnRpdGlvbnMuIgorbXNnc3RyICJDaOG7iSBjw6FjIHBow6JuIHbDuW5nIGNow61uaCBjw7MgdGjhu4MgbMOgIHBow6JuIHbDuW5nIGfhu5FjLiIKKworIzogbGlicGFydGVkL2xhYmVscy9kdmguYzo2MzAKK21zZ2lkICJPbmx5IHByaW1hcnkgcGFydGl0aW9ucyBjYW4gYmUgc3dhcCBwYXJ0aXRpb25zLiIKK21zZ3N0ciAiQ2jhu4kgY8OhYyBwaMOibiB2w7luZyBjaMOtbmggY8OzIHRo4buDIGzDoCBwaMOibiB2w7luZyBzd2FwLiIKKworIzogbGlicGFydGVkL2xhYmVscy9kdmguYzo2NDQKK21zZ2lkICJPbmx5IGxvZ2ljYWwgcGFydGl0aW9ucyBjYW4gYmUgYSBib290IGZpbGUuIgorbXNnc3RyICJDaOG7iSBwaMOibiB2w7luZyBsw7Rnw61jIGPDsyB0aOG7gyBsw6AgdOG6rXAgdGluIGto4bufaSDEkeG7mW5nLiIKKworIzogbGlicGFydGVkL2xhYmVscy9kdmguYzo3MjEKK21zZ2lkICJPbmx5IGxvZ2ljYWwgcGFydGl0aW9ucyAoYm9vdCBmaWxlcykgaGF2ZSBhIG5hbWUuIgorbXNnc3RyICJDaOG7iSBwaMOibiB2w7luZyBsw7Rnw61jICh04bqtcCB0aW4ga2jhu59pIMSR4buZbmcpIGPDsyBt4buZdCB0w6puLiIKKworIzogbGlicGFydGVkL2xhYmVscy9kdmguYzo4MTIKK21zZ2lkICJUb28gbWFueSBwcmltYXJ5IHBhcnRpdGlvbnMiCittc2dzdHIgIlF1w6Egbmhp4buBdSBwaMOibiB2w7luZyBjaMOtbmgiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIG9wZW4gZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHNlZWsgZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHJlYWQgZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMTMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyB3cml0ZSBlcnJvclxuIgorIiVzXG4iCittc2dzdHIgIiVzIGtoaSBnaGkgdHLDqm4gJXMiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIElPQ1RMIGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBBUEkgdmVyc2lvbiBtaXNtYXRjaFxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgVW5zdXBwb3J0ZWQgZGlzayB0eXBlXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBVbnN1cHBvcnRlZCBkaXNrIGZvcm1hdFxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEzMAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIERpc2sgaW4gdXNlXG4iCisiJXNcbiIKK21zZ3N0ciAiJXMgICVzICAlcyIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgQ29uZmlnIGZpbGUgc3ludGF4IGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBWb2x1bWUgbGFiZWwgaXMgY29ycnVwdGVkLlxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjE0MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgYSBkYXRhIHNldCBuYW1lIGlzIGNvcnJ1cHRlZC5cbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHNwYWNlIGFsbG9jYXRpb25cbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIGRldmljZSB2ZXJpZmljYXRpb24gZmFpbGVkXG4iCisiVGhlIHNwZWNpZmllZCBkZXZpY2UgaXMgbm90IGEgdmFsaWQgREFTRCBkZXZpY2VcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBGYXRhbCBlcnJvclxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzo0NTQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBjb250YWlucyBHUFQgc2lnbmF0dXJlcywgaW5kaWNhdGluZyB0aGF0IGl0IGhhcyBhIEdQVCB0YWJsZS4gIEhvd2V2ZXIsIGl0ICIKKyJkb2VzIG5vdCBoYXZlIGEgdmFsaWQgZmFrZSBtc2RvcyBwYXJ0aXRpb24gdGFibGUsIGFzIGl0IHNob3VsZC4gIFBlcmhhcHMgaXQgIgorIndhcyBjb3JydXB0ZWQgLS0gcG9zc2libHkgYnkgYSBwcm9ncmFtIHRoYXQgZG9lc24ndCB1bmRlcnN0YW5kIEdQVCBwYXJ0aXRpb24gIgorInRhYmxlcy4gIE9yIHBlcmhhcHMgeW91IGRlbGV0ZWQgdGhlIEdQVCB0YWJsZSwgYW5kIGFyZSBub3cgdXNpbmcgYW4gbXNkb3MgIgorInBhcnRpdGlvbiB0YWJsZS4gIElzIHRoaXMgYSBHUFQgcGFydGl0aW9uIHRhYmxlPyIKK21zZ3N0ciAiIgorIiVzIGNo4bupYSBjaOG7ryBrw70gR1BULCBjaOG7iSByYSBuw7MgY8OzIGLhuqNuZyBHUFQuICBUdXkgbmhpw6puLCBuw7Mga2jDtG5nIGPDsyBt4buZdCBi4bqjbmcgIgorInBow6JuIHbDuW5nIGdp4bqjIG1zZG9zIGPhuqduIHRoaeG6v3QuICBDw7MgdGjhu4MgbsOzIMSRw6MgYuG7iyBsw6BtIGjhu49uZyBi4bufaSBt4buZdCBjaMawxqFuZyAiCisidHLDrG5oIGtow7RuZyBoaeG7g3UgYuG6o25nIHBow6JuIHbDuW5nIEdQVC4gIEhv4bq3YyBjw7MgdGjhu4MgbmfGsOG7nWkgZMO5bmcgxJHDoyB4w7NhIGLhuqNuZyAiCisiR1BULCB2w6AgYsOieSBnaeG7nSDEkWFuZyBz4butIGThu6VuZyBt4buZdCBi4bqjbmcgcGjDom4gdsO5bmcgbXNkb3MuICDEkMOieSBjw7MgcGjhuqNpIGzDoCBt4buZdCAiCisiYuG6o25nIHBow6JuIHbDuW5nIEdQVD8iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6NjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9ybWF0IG9mIHRoZSBHUFQgcGFydGl0aW9uIHRhYmxlIGlzIHZlcnNpb24gJXgsIHdoaWNoIGlzIG5ld2VyIHRoYW4gIgorIndoYXQgUGFydGVkIGNhbiByZWNvZ25pc2UuICBQbGVhc2UgdGVsbCB1cyEgIGJ1Zy1wYXJ0ZWRAZ251Lm9yZyIKK21zZ3N0ciAiIgorIsSQ4buLbmggZOG6oW5nIGPhu6dhIGLhuqNuZyBwaMOibiB2w7luZyBHUFQgY8OzIHBoacOqbiBi4bqjbiAleCwgbeG7m2kgaMahbiBzbyB24bubaSBwaGnDqm4gYuG6o24gIgorIlBhcnRlZCBjw7MgdGjhu4Mgbmjhuq1uIHJhLiAgWGluIGjDo3kgY2hvIGNow7puZyB0w7RpIGJp4bq/dCEgIGJ1Zy1wYXJ0ZWRAZ251Lm9yZyIKKworIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzo2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vdCBhbGwgb2YgdGhlIHNwYWNlIGF2YWlsYWJsZSB0byAlcyBhcHBlYXJzIHRvIGJlIHVzZWQsIHlvdSBjYW4gZml4IHRoZSBHUFQgIgorInRvIHVzZSBhbGwgb2YgdGhlIHNwYWNlIChhbiBleHRyYSAlbGx1IGJsb2Nrcykgb3IgY29udGludWUgd2l0aCB0aGUgY3VycmVudCAiCisic2V0dGluZz8gIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6ODI3Cittc2dpZCAiIgorIlRoZSBiYWNrdXAgR1BUIHRhYmxlIGlzIG5vdCBhdCB0aGUgZW5kIG9mIHRoZSBkaXNrLCBhcyBpdCBzaG91bGQgYmUuICBUaGlzICIKKyJtaWdodCBtZWFuIHRoYXQgYW5vdGhlciBvcGVyYXRpbmcgc3lzdGVtIGJlbGlldmVzIHRoZSBkaXNrIGlzIHNtYWxsZXIuICBGaXgsICIKKyJieSBtb3ZpbmcgdGhlIGJhY2t1cCB0byB0aGUgZW5kIChhbmQgcmVtb3ZpbmcgdGhlIG9sZCBiYWNrdXApPyIKK21zZ3N0ciAiIgorIkLhuqNuZyBHUFQgc2FvIGzGsHUga2jDtG5nIG7hurFtIHThuqFpIGN14buRaSDEkcSpYSBuaMawIHnDqnUgY+G6p3UuICBDw7MgbmdoxKlhIGzDoCBo4buHIMSRaeG7gXUgIgorImjDoG5oIGtow6FjIHPhur0gdGjhuqV5IMSRxKlhIG5o4buPIGjGoW4gdGjDtG5nIHRoxrDhu51uZy4gIFPhu61hIGLhurFuZyBjw6FjaCBkaSBjaHV54buDbiBzYW8gbMawdSAiCisidOG7m2kgY3Xhu5FpICh2w6AgeMOzYSBi4buPIHNhbyBsxrB1IGPFqSk/IgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjg2MgorIywgZnV6enkKK21zZ2lkICIiCisiVGhlIHByaW1hcnkgR1BUIHRhYmxlIGlzIGNvcnJ1cHQsIGJ1dCB0aGUgYmFja3VwIGFwcGVhcnMgT0ssIHNvIHRoYXQgd2lsbCBiZSAiCisidXNlZC4iCittc2dzdHIgIiIKKyJC4bqjbmcgR1BUIGNow61uaCBi4buLIGjhu49uZywgbmjGsG5nIHNhbyBsxrB1IHRow6wgduG6q24gdOG7kXQsIHbDrCB0aOG6vyBz4bq9IHPhu60gZOG7pW5nIHNhbyBsxrB1LiIKKworIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzo4NzAKKyMsIGZ1enp5Cittc2dpZCAiIgorIkJvdGggdGhlIHByaW1hcnkgYW5kIGJhY2t1cCBHUFQgdGFibGVzIGFyZSBjb3JydXB0LiAgVHJ5IG1ha2luZyBhIGZyZXNoICIKKyJ0YWJsZSwgYW5kIHVzaW5nIFBhcnRlZCdzIHJlc2N1ZSBmZWF0dXJlIHRvIHJlY292ZXIgcGFydGl0aW9ucy4iCittc2dzdHIgIiIKKyJD4bqjIGLhuqNuZyBHUFQgY2jDrW5oIHbDoCBzYW8gbMawdSDEkeG7gXUgaOG7j25nLiAgSMOjeSB0aOG7rSB04bqhbyBt4buZdCBi4bqjbmcgbeG7m2ksIHbDoCBz4butIGThu6VuZyAiCisidMOtbmggbsSDbmcgY+G7qXUgbmd1eSBj4bunYSBQYXJ0ZWQsIMSR4buDIHBo4bulYyBo4buTaSBjw6FjIHBow6JuIHbDuW5nLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoxODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBzaWduYXR1cmUgJXggZm9yIE1hYyBkaXNrIGxhYmVscy4iCittc2dzdHIgIkNo4buvIGvDvSBzYWkgJXggY2hvIG5ow6NuIMSRxKlhIE1hYy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6MjI2Cittc2dpZCAiUGFydGl0aW9uIG1hcCBoYXMgbm8gcGFydGl0aW9uIG1hcCBlbnRyeSEiCittc2dzdHIgIlPGoSDEkeG7kyBwaMOibiB2w7luZyBraMO0bmcgY8OzIG3hu6VjIHPGoSDEkeG7kyBwaMOibiB2w7luZyEiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIHRvbyBzbWFsbCBmb3IgYSBNYWMgZGlzayBsYWJlbCEiCittc2dzdHIgIiVzIHF1w6Egbmjhu48gY2hvIG3hu5l0IG5ow6NuIMSRxKlhIE1hYyEiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIlBhcnRpdGlvbiAlZCBoYXMgYW4gaW52YWxpZCBzaWduYXR1cmUgJXguIgorbXNnc3RyICJQaMOibiB2w7luZyAlZCBjw7MgbeG7mXQgY2jhu68ga8O9IHNhaSAleC4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIlBhcnRpdGlvbiAlZCBoYXMgYW4gaW52YWxpZCBsZW5ndGggb2YgMCBieXRlcyEiCittc2dzdHIgIlBow6JuIHbDuW5nICVkIGPDsyBt4buZdCBjaGnhu4F1IGTDoGkgc2FpIDAgYnl0ZSEiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NTgwCisjLCBmdXp6eQorbXNnaWQgIlRoZSBkYXRhIHJlZ2lvbiBkb2Vzbid0IHN0YXJ0IGF0IHRoZSBzdGFydCBvZiB0aGUgcGFydGl0aW9uLiIKK21zZ3N0ciAiVsO5bmcgZOG7ryBsaeG7h3Uga2jDtG5nIGLhuq90IMSR4bqndSB04bqhaSDEkeG6p3UgY+G7p2EgcGjDom4gdsO5bmciCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NTk3CisjLCBmdXp6eQorbXNnaWQgIlRoZSBib290IHJlZ2lvbiBkb2Vzbid0IHN0YXJ0IGF0IHRoZSBzdGFydCBvZiB0aGUgcGFydGl0aW9uLiIKK21zZ3N0ciAiVsO5bmcga2jhu59pIMSR4buZbmcga2jDtG5nIGLhuq90IMSR4bqndSB04bqhaSDEkeG6p3UgY+G7p2EgcGjDom4gdsO5bmciCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NjExCittc2dpZCAiVGhlIHBhcnRpdGlvbidzIGJvb3QgcmVnaW9uIGRvZXNuJ3Qgb2NjdXB5IHRoZSBlbnRpcmUgcGFydGl0aW9uLiIKK21zZ3N0ciAiVsO5bmcga2jhu59pIMSR4buZbmcgY+G7p2EgcGjDom4gdsO5bmcga2jDtG5nIGNoaeG6v20gdG/DoG4gYuG7mSBwaMOibiB2w7luZy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NjIyCittc2dpZCAiVGhlIHBhcnRpdGlvbidzIGRhdGEgcmVnaW9uIGRvZXNuJ3Qgb2NjdXB5IHRoZSBlbnRpcmUgcGFydGl0aW9uLiIKK21zZ3N0ciAiVsO5bmcgZOG7ryBsaeG7h3UgY+G7p2EgcGjDom4gdsO5bmcga2jDtG5nIGNoaeG6v20gdG/DoG4gYuG7mSBwaMOibiB2w7luZy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6Njc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXZWlyZCBibG9jayBzaXplIG9uIGRldmljZSBkZXNjcmlwdG9yOiAlZCBieXRlcyBpcyBub3QgZGl2aXNpYmxlIGJ5IDUxMi4iCittc2dzdHIgIiIKKyJLw61jaCB0aMaw4bubYyBraOG7kWkga+G7syBs4bqhIHRyw6puIG3DtCB04bqjIHRoaeG6v3QgYuG7izogJWQgYnl0ZSBraMO0bmcgY2hpYSBo4bq/dCBjaG8gNTEyLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo2ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBkcml2ZXIgZGVzY3JpcHRvciBzYXlzIHRoZSBwaHlzaWNhbCBibG9jayBzaXplIGlzICVkIGJ5dGVzLCBidXQgTGludXggIgorInNheXMgaXQgaXMgJWQgYnl0ZXMuIgorbXNnc3RyICIiCisiTcO0IHThuqMgY+G7p2Eg4buVIGNobyBiaeG6v3Qga8OtY2ggdGjGsOG7m2Mga2jhu5FpIGzDoCAlZCBieXRlLCBuaMawbmcgTGludXggbsOzaSBuw7MgJWQgYnl0ZS4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NzM2Cittc2dpZCAiTm8gdmFsaWQgcGFydGl0aW9uIG1hcCBmb3VuZC4iCittc2dzdHIgIktow7RuZyB0w6xtIHRo4bqleSBt4buZdCBzxqEgxJHhu5MgcGjDom4gdsO5bmcgxJHDum5nLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo3OTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb25mbGljdGluZyBwYXJ0aXRpb24gbWFwIGVudHJ5IHNpemVzISAgRW50cnkgMSBzYXlzIGl0IGlzICVkLCBidXQgZW50cnkgJWQgIgorInNheXMgaXQgaXMgJWQhIgorbXNnc3RyICIiCisiWHVuZyDEkeG7mXQga8OtY2ggdGjGsOG7m2MgbeG7pWMgc8ahIMSR4buTIHBow6JuIHbDuW5nISAgTeG7pWMgMSBuw7NpIGzDoCAlZCwgbmjGsG5nIG3hu6VjICVkIG7Ds2kgIgorImzDoCAlZCEiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6ODIyCisjLCBmdXp6eQorbXNnaWQgIldlaXJkISAgVGhlcmUgYXJlIDIgcGFydGl0aW9ucyBtYXAgZW50cmllcyEiCittc2dzdHIgIkvhu7MgbOG6oSAtIGhhaSBt4bulYyBzxqEgxJHhu5MgcGjDom4gdsO5bmchIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjEzNDcKK21zZ2lkICIiCisiQ2hhbmdpbmcgdGhlIG5hbWUgb2YgYSByb290IG9yIHN3YXAgcGFydGl0aW9uIHdpbGwgcHJldmVudCBMaW51eCBmcm9tICIKKyJyZWNvZ25pc2luZyBpdCBhcyBzdWNoLiIKK21zZ3N0ciAiIgorIlRoYXkgxJHhu5VpIHTDqm4gY+G7p2EgbeG7mXQgcGjDom4gdsO5bmcgZ+G7kWMgaGF5IHN3YXAgc+G6vSBraGnhur9uIExpbnV4IGtow7RuZyBuaOG6rW4gcmEgIgorImNow7puZyBuaMawIHRyxrDhu5tjLiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoxNDQzCisjLCBmdXp6eQorbXNnaWQgIkNhbid0IGFkZCBhbm90aGVyIHBhcnRpdGlvbiAtLSB0aGUgcGFydGl0aW9uIG1hcCBpcyB0b28gc21hbGwhIgorbXNnc3RyICJLaMO0bmcgdGjDqm0gxJHGsOG7o2MgcGjDom4gdsO5bmcga2jDoWMgLSBzxqEgxJHhu5MgcGjDom4gcXXDoSBuaOG7jyEiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcGM5OC5jOjM1NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBwYXJ0aXRpb24gdGFibGUgb24gJXMuIgorbXNnc3RyICJC4bqjbmcgcGjDom4gdsO5bmcgc2FpIHRyw6puICVzIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3BjOTguYzo0MDYgbGlicGFydGVkL2xhYmVscy9wYzk4LmM6NDg0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiUGFydGl0aW9uICVkIGlzbid0IGFsaWduZWQgdG8gY3lsaW5kZXIgYm91bmRhcmllcy4gIFRoaXMgaXMgc3RpbGwgIgorInVuc3VwcG9ydGVkLiIKK21zZ3N0ciAiIgorIlBow6JuIHbDuW5nICVkIGNoxrBhIHPhuq9wIGjDoG5nIHThu5tpIGtodW5nIGN5bGluZGVyLiAgQ+G6p24gdGjDqm0gaOG7lyB0cuG7oyBjaG8gdMOtbmggIgorIm7Eg25nIG7DoHkuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3BjOTguYzo3OTEKK21zZ2lkICJDYW4ndCBhZGQgYW5vdGhlciBwYXJ0aXRpb24uIgorbXNnc3RyICJLaMO0bmcgdGjDqm0gxJHGsOG7o2MgcGjDom4gdsO5bmcga2jDoWMuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjE2MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEJhZCBjaGVja3N1bSBvbiBibG9jayAlbGx1IG9mIHR5cGUgJXMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6NDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRGlkbid0IGZpbmQgcmRiIGJsb2NrLCBzaG91bGQgbmV2ZXIgaGFwcGVuLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjU4MQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IExvb3AgZGV0ZWN0ZWQgYXQgYmxvY2sgJWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6NjAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogVGhlICVzIGxpc3Qgc2VlbXMgYmFkIGF0IGJsb2NrICVzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjY4OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBsaXN0IGJhZCBibG9ja3MuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6Njk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGxpc3QgcGFydGl0aW9uIGJsb2Nrcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo3MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gbGlzdCBmaWxlIHN5c3RlbSBibG9ja3MuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6NzEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGxpc3QgYm9vdCBibG9ja3MuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6NzQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byB3cml0ZSBwYXJ0aXRpb24gYmxvY2sgYXQgJWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6MTA2OQorIywgZnV6enkKK21zZ2lkICJVbmFibGUgdG8gYWxsb2NhdGUgYSBwYXJ0aXRpb24gbnVtYmVyLiIKK21zZ3N0ciAiTW9uZyDEkeG7o2kgbeG7mXQgc+G7kSBj4bunYSBwaMOibiB2w7luZy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6MTQ1Cittc2dpZCAiQ29ycnVwdGVkIFN1biBkaXNrIGxhYmVsIGRldGVjdGVkLiIKK21zZ3N0ciAiTmjhuq1uIHJhIG3hu5l0IG5ow6NuIMSRxKlhIFN1biBi4buLIGjhu49uZy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6MjY2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGRpc2sgQ0hTIGdlb21ldHJ5ICglZCwlZCwlZCkgcmVwb3J0ZWQgYnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0gZG9lcyBub3QgIgorIm1hdGNoIHRoZSBnZW9tZXRyeSBzdG9yZWQgb24gdGhlIGRpc2sgbGFiZWwgKCVkLCVkLCVkKS4iCittc2dzdHIgIiIKKyJD4bqldSB0csO6YyBDSFMgY+G7p2EgxJHEqWEgKCVkLCVkLCVkKSBraMO0bmcgdMawxqFuZyDhu6luZyBj4bqldSB0csO6YyBjaOG7qWEgdHJvbmcgbmjDo24gxJHEqWEgIgorIiglZCwlZCwlZCkuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3N1bi5jOjI4OAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgZGlzayBsYWJlbCBkZXNjcmliZXMgYSBkaXNrIGJpZ2dlciB0aGFuICVzLiIKK21zZ3N0ciAiTmjDo24gxJHEqWEgbcO0IHThuqMgbeG7mXQgxJHEqWEgbOG7m24gaMahbiAlcy4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6NDQyCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBkaXNrIGhhcyAlZCBjeWxpbmRlcnMsIHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbWF4aW11bSBvZiA2NTUzNi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9zdW4uYzo3MzcKK21zZ2lkICIiCisiVGhlIFdob2xlIERpc2sgcGFydGl0aW9uIGlzIHRoZSBvbmx5IGF2YWlsYWJsZSBvbmUgbGVmdC4gIEdlbmVyYWxseSwgaXQgaXMgIgorIm5vdCBhIGdvb2QgaWRlYSB0byBvdmVyd3JpdGUgdGhpcyBwYXJ0aXRpb24gd2l0aCBhIHJlYWwgb25lLiAgU29sYXJpcyBtYXkgIgorIm5vdCBiZSBhYmxlIHRvIGJvb3Qgd2l0aG91dCBpdCwgYW5kIFNJTE8gKHRoZSBzcGFyYyBib290IGxvYWRlcikgYXBwcmVjaWF0ZXMgIgorIml0IGFzIHdlbGwuIgorbXNnc3RyICIiCisiUGjDom4gdsO5bmcgVG/DoG4gYuG7mSDEkMSpYSBXaG9sZSBEaXNrIGzDoCBwaMOibiB2w7luZyBjw7JuIGzhuqFpIGR1eSBuaOG6pXQuICBOw7NpIGNodW5nLCAiCisia2jDtG5nIG7Dqm4gZ2hpIGNow6huIHBow6JuIHbDuW5nIG7DoHkgYuG6sW5nIG3hu5l0IHBow6JuIHbDuW5nIHRo4buxYyBz4buxLiAgU29sYXJpcyBjw7MgdGjhu4MgIgorInPhur0ga2jDtG5nIGto4bufaSDEkeG7mW5nIGtoaSBraMO0bmcgY8OzIG7DsywgdsOgIFNJTE8gKHRyw6xuaCBraOG7n2kgxJHhu5luZyBzcGFyYykgY8WpbmcgY+G6p24gIgorInBow6JuIHbDuW5nIG7DoHkuIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3N1bi5jOjc1MgorbXNnaWQgIlN1biBkaXNrIGxhYmVsIGlzIGZ1bGwuIgorbXNnc3RyICJOaMOjbiDEkcSpYSBTdW4gxJHhuqd5LiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6MTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBvcGVuaW5nIGRldmljZSAnJXMnIGZhaWxlZC5cbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjE2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgc2Vla2luZyBkZXZpY2UgJyVzJyBmYWlsZWQuXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzoxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHdyaXRpbmcgdG8gZGV2aWNlICclcycgZmFpbGVkLFxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6MTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyByZWFkaW5nIGZyb20gZGV2aWNlICclcycgZmFpbGVkLlxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6MTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhdGFsIGVycm9yXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDE4Cittc2dpZCAiQ291bGQgbm90IHJlYWQgVlRPQyBsYWJlbHMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQyNAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIFZUT0MgRk1UMSBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0MzEKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBWVE9DIEZNVDQgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDM4Cittc2dpZCAiQ291bGQgbm90IHJlYWQgVlRPQyBGTVQ1IERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQ0NQorbXNnaWQgIkNvdWxkIG5vdCByZWFkIFZUT0MgRk1UNyBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0NjIKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgVlRPQyBsYWJlbHMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQ2OAorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBWVE9DIEZNVDEgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDc1Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIFZUT0MgRk1UNCBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0ODIKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgVlRPQyBGTVQ1IERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQ4OQorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBWVE9DIEZNVDcgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xpYnBhcnRlZC5jOjI5NiBsaWJwYXJ0ZWQvbGlicGFydGVkLmM6MzE2Cittc2dpZCAiT3V0IG9mIG1lbW9yeS4iCittc2dzdHIgIktow7RuZyDEkeG7pyBi4buZIG5o4bubLiIKKworIzogbGlicGFydGVkL3VuaXQuYzoxMzkKK21zZ2lkICJDYW5ub3QgZ2V0IHVuaXQgc2l6ZSBmb3Igc3BlY2lhbCB1bml0ICdDT01QQUNUJy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL3VuaXQuYzozODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiXCIlc1wiIGhhcyBpbnZhbGlkIHN5bnRheCBmb3IgbG9jYXRpb25zLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvdW5pdC5jOjM5NAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgbWF4aW11bSBoZWFkIHZhbHVlIGlzICVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvdW5pdC5jOjQwMQorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgbWF4aW11bSBzZWN0b3IgdmFsdWUgaXMgJWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC91bml0LmM6NDEzIGxpYnBhcnRlZC91bml0LmM6NTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBsb2NhdGlvbiAlcyBpcyBvdXRzaWRlIG9mIHRoZSBkZXZpY2UgJXMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC91bml0LmM6NTI3Cittc2dpZCAiSW52YWxpZCBudW1iZXIuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hZmZzLmM6NjMgbGlicGFydGVkL2ZzL2FtaWdhL2FwZnMuYzo1NgorIzogbGlicGFydGVkL2ZzL2FtaWdhL2FzZnMuYzo3MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gYWxsb2NhdGUgcGFydGl0aW9uIGJsb2NrXG4iCittc2dzdHIgIk1vbmcgxJHhu6NpIG3hu5l0IHPhu5EgY+G7p2EgcGjDom4gdsO5bmcuIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYWZmcy5jOjc4IGxpYnBhcnRlZC9mcy9hbWlnYS9hcGZzLmM6NzAKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hc2ZzLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gYWxsb2NhdGUgYmxvY2tcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYWZmcy5jOjgzIGxpYnBhcnRlZC9mcy9hbWlnYS9hcGZzLmM6NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBDb3VsZG4ndCByZWFkIGJvb3QgYmxvY2sgJWxsdVxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hZmZzLmM6OTkgbGlicGFydGVkL2ZzL2FtaWdhL2FwZnMuYzo4NgorIzogbGlicGFydGVkL2ZzL2FtaWdhL2FzZnMuYzo5MiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXNmcy5jOjEwNgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IENvdWxkbid0IHJlYWQgcm9vdCBibG9jayAlbGx1XG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gYWxsb2NhdGUgaWQgbGlzdCBlbGVtZW50XG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogQ291bGRuJ3QgcmVhZCBibG9jayAlbGx1XG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6MjAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogQmFkIGNoZWNrc3VtIG9uIGJsb2NrICVsbHUgb2YgdHlwZSAlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jOjIxMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBDb3VsZG4ndCB3cml0ZSBibG9jayAlZFxuIgorbXNnc3RyICIlcyBraGkgZ2hpIHRyw6puICVzIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzoyNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gYWxsb2NhdGUgZGlza19zcGVjaWZpYyByZGIgYmxvY2tcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzoyODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBEaWRuJ3QgZmluZCByZGIgYmxvY2ssIHNob3VsZCBuZXZlciBoYXBwZW5cbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzozMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gcmVhZCBwYXJ0aXRpb24gYmxvY2sgJWxsdVxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo4NyBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6MTEyCittc2dpZCAiSW5jb25zaXN0ZW50IGdyb3VwIGRlc2NyaXB0b3JzISIKK21zZ3N0ciAiQ8OhYyBtw7QgdOG6oyBuaMOzbSDEkcOjIHRoYXkgxJHhu5VpISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjkxIGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzoxMTYKKyMsIGZ1enp5Cittc2dpZCAiRmlsZSBzeXN0ZW0gZnVsbCEiCittc2dzdHIgIsSQ4bqneSBo4buHIHRo4buRbmcgdOG6rXAgdGluISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjY4NgorIywgZnV6enkKK21zZ2lkICJJbnZhbGlkIHN1cGVyYmxvY2suICBBcmUgeW91IHN1cmUgdGhpcyBpcyBhbiBleHQyIGZpbGUgc3lzdGVtPyIKK21zZ3N0ciAiS2jhu5FpIHN1cGVyIHNhaS4gIMSQw6J5IGNo4bqvYyBjaOG6r24gbMOgIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4gZXh0Mj8iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo3MDAgbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo2NTgKKyMsIGZ1enp5Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGVycm9ycyEgIFlvdSBzaG91bGQgcnVuIGUyZnNjay4iCittc2dzdHIgIkjhu4cgdGjhu5FuZyB04bqtcCB0aW4gY8OzIGzhu5dpISAgQ+G6p24gY2jhuqF5IGUyZnNjay4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo3MTEKKyMsIGZ1enp5Cittc2dpZCAiIgorIkZpbGUgc3lzdGVtIHdhcyBub3QgY2xlYW5seSB1bm1vdW50ZWQhICBZb3Ugc2hvdWxkIHJ1biBlMmZzY2suICBNb2RpZnlpbmcgYW4gIgorInVuY2xlYW4gZmlsZSBzeXN0ZW0gY291bGQgY2F1c2Ugc2V2ZXJlIGNvcnJ1cHRpb24uIgorbXNnc3RyICIiCisiSOG7hyB0aOG7kW5nIHThuq1wIHRpbiBjaMawYSDEkcaw4bujYyBi4buPIGfhuq9uIG3hu5l0IGPDoWNoIMSRw7puZyDEkeG6r24hICBD4bqnbiBjaOG6oXkgZTJmc2NrLiAgU+G7rWEgIgorIsSR4buVaSBo4buHIHRo4buRbmcgdGluIMSRw7MgY8OzIHRo4buDIGfDonkgbeG7mXQgdsOgaSBs4buXaS4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo3MzEKKyMsIGZ1enp5Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGluY29tcGF0aWJsZSBmZWF0dXJlIGVuYWJsZWQuIgorbXNnc3RyICJI4buHIHRo4buRbmcgdOG6rXAgdGluIGPDsyB0w61uaCBuxINuZyBraMO0bmcgdMawxqFuZyB0aMOtY2ggxJHGsOG7o2MgYuG6rXQiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo3NDIKK21zZ2lkICJFcnJvciBhbGxvY2F0aW5nIGJ1ZmZlciBjYWNoZS4iCittc2dzdHIgIkzhu5dpIHBow6JuIHBo4buRaSBjYWNoZSBi4buZIMSR4buHbS4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfaW5vZGVfcmVsb2NhdG9yLmM6MTE0CisjLCBmdXp6eQorbXNnaWQgIiIKKyJGb3VuZCBhbiBpbm9kZSB3aXRoIGEgaW5jb3JyZWN0IGxpbmsgY291bnQuICBCZXR0ZXIgZ28gcnVuIGUyZnNjayBmaXJzdCEiCittc2dzdHIgIiIKKyJUw6xtIHRo4bqleSBt4buZdCBpbm9kZSB24bubaSBz4buRIMSR4bq/bSBsacOqbiBr4bq/dCBzYWkuICBU4buRdCBuaOG6pXQgaMOjeSBjaOG6oXkgZTJmc2NrIHRyxrDhu5tjLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9pbm9kZV9yZWxvY2F0b3IuYzo0ODcKK21zZ2lkICJOb3QgZW5vdWdoIGZyZWUgaW5vZGVzISIKK21zZ3N0ciAiS2jDtG5nIMSR4bunIGlub2RlIHRy4buRbmchIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjIyMworIywgZnV6enkKK21zZ2lkICJGaWxlIHN5c3RlbSBpcyB0b28gZnVsbCB0byByZW1vdmUgYSBncm91cCEiCittc2dzdHIgIkjhu4cgdGjhu5FuZyB04bqtcCB0aW4ga2jDtG5nIGPDsm4gxJHhu6cgY2jhu5cgxJHhu4MgeMOzYSBi4buPIG3hu5l0IG5ow7NtISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzoyMzIKKyMsIGZ1enp5Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIHRvbyBtYW55IGFsbG9jYXRlZCBpbm9kZXMgdG8gcmVtb3ZlIGEgZ3JvdXAhIgorbXNnc3RyICJI4buHIHRo4buRbmcgdOG6rXAgdGluIGPDsyBxdcOhIG5oaeG7gXUgaW5vZGUgcGjDom4gcGjhu5FpIMSR4buDIHjDs2EgbeG7mXQgbmjDs20hIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjQ5MQorbXNnaWQgImFkZGluZyBncm91cHMiCittc2dzdHIgInRow6ptIG5ow7NtIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjUyOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiWW91ciBmaWxlIHN5c3RlbSBpcyB0b28gZnVsbCB0byByZXNpemUgaXQgdG8gJWkgYmxvY2tzLiAgU29ycnkuIgorbXNnc3RyICIiCisiSOG7hyB0aOG7kW5nIHThuq1wIHRpbiBraMO0bmcgY8OybiDEkeG7pyB0cuG7kW5nIMSR4buDIHRoYXkgxJHhu5VpIGvDrWNoIHRoxrDhu5tjIHRow6BuaCAlaSBraOG7kWkuICIKKyJS4bqldCB0aeG6v2MuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjUzOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgZmlsZSBzeXN0ZW0gaGFzIHRvbyBtYW55IG9jY3VwaWVkIGlub2RlcyB0byByZXNpemUgaXQgdG8gJWkgYmxvY2tzLiAgIgorIlNvcnJ5LiIKK21zZ3N0ciAiIgorIkjhu4cgdGjhu5FuZyB04bqtcCB0aW4ga2jDtG5nIGPDsm4gxJHhu6cgaW5vZGUgxJHhu4MgdGhheSDEkeG7lWkga8OtY2ggdGjGsOG7m2MgdGjDoG5oICVpIGto4buRaS4gIgorIlLhuqV0IHRp4bq/Yy4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NjY2CisjLCBmdXp6eQorbXNnaWQgIkZpbGUgc3lzdGVtIHdhcyBub3QgY2xlYW5seSB1bm1vdW50ZWQhICBZb3Ugc2hvdWxkIHJ1biBlMmZzY2suIgorbXNnc3RyICJI4buHIHRo4buRbmcgdOG6rXAgdGluIGNoxrBhIMSRxrDhu6NjIGLhu48gZ+G6r24gxJHDum5nISAgQ+G6p24gY2jhuqF5IGUyZnNjay4iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6Njc1Cittc2dpZCAiIgorIlRoZSBmaWxlIHN5c3RlbSBoYXMgdGhlICdkaXJfaW5kZXgnIGZlYXR1cmUgZW5hYmxlZC4gIFBhcnRlZCBjYW4gb25seSByZXNpemUgIgorInRoZSBmaWxlIHN5c3RlbSBpZiBpdCBkaXNhYmxlcyB0aGlzIGZlYXR1cmUuICBZb3UgY2FuIGVuYWJsZSBpdCBsYXRlciBieSAiCisicnVubmluZyAndHVuZTJmcyAtTyBkaXJfaW5kZXggREVWSUNFJyBhbmQgdGhlbiAnZTJmc2NrIC1mRCBERVZJQ0UnLiIKK21zZ3N0ciAiIgorIkjhu4cgdGjhu5FuZyB04bqtcCB0aW4gY8OzIHTDrW5oIG7Eg25nICdkaXJfaW5kZXgnIGLhuq10IGTDuW5nLiAgUGFydGVkIGNo4buJIGPDsyB0aOG7gyB0aGF5ICIKKyLEkeG7lWkga8OtY2ggdGjGsOG7m2MgY+G7p2EgaOG7hyB0aOG7kW5nIHThuq1wIHRpbiBu4bq/dSB04bqvdCBi4buPIHTDrW5oIG7Eg25nIG7DoHkuICBDw7MgdGjhu4MgYuG6rXQgIgorImTDuW5nIGzhuqFpIHTDrW5oIG7Eg25nIHNhdSBuw6B5IGLhurFuZyAndHVuZTJmcyAtTyBkaXJfaW5kZXggVEhJ4bq+VELhu4onIHbDoCBzYXUgxJHDsyAiCisiJ2UyZnNjayAtZkQgVEhJ4bq+VELhu4onLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo2OTEKK21zZ2lkICIiCisiQSByZXNpemUgb3BlcmF0aW9uIG9uIHRoaXMgZmlsZSBzeXN0ZW0gd2lsbCB1c2UgRVhQRVJJTUVOVEFMIGNvZGVcbiIKKyJ0aGF0IE1BWSBDT1JSVVBUIGl0IChhbHRob3VnaCBubyBvbmUgaGFzIHJlcG9ydGVkIGFueSBzdWNoIGRhbWFnZSB5ZXQpLlxuIgorIllvdSBzaG91bGQgYXQgbGVhc3QgYmFja3VwIHlvdXIgZGF0YSBmaXJzdCwgYW5kIHJ1biAnZTJmc2NrIC1mJyBhZnRlcndhcmRzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2Jsb2NrX3JlbG9jYXRvci5jOjE5OAorIywgZnV6enkKK21zZ2lkICJDcm9zcy1saW5rZWQgYmxvY2tzIGZvdW5kISAgQmV0dGVyIGdvIHJ1biBlMmZzY2sgZmlyc3QhIgorbXNnc3RyICJUw6xtIHRo4bqleSBjw6FjIGto4buRaSBsacOqbiBr4bq/dCBjaOG7k25nIGNow6lvISB04buRdCBuaOG6pXQgaMOjeSBjaOG6oXkgZTJmc2NrIHRyxrDhu5tjISIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9ibG9ja19yZWxvY2F0b3IuYzo1MzcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrICVpIGhhcyBubyByZWZlcmVuY2U/ICBXZWlyZC4iCittc2dzdHIgIkto4buRaSAlaSBraMO0bmcgY8OzIGxpw6puIGvhur90PyAgS+G7syBs4bqhIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2Jsb2NrX3JlbG9jYXRvci5jOjczNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQmxvY2sgJWkgc2hvdWxkbid0IGhhdmUgYmVlbiBtYXJrZWQgKCVkLCAlZCkhIgorbXNnc3RyICJLaMO0bmcgxJHGsOG7o2MgxJHDoW5oIGThuqV1IGto4buRaSAlaSEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2ludGVyZmFjZS5jOjE4NgorIywgZnV6enkKK21zZ2lkICIiCisiVGhlIGV4dDIgZmlsZSBzeXN0ZW0gcGFzc2VkIGEgYmFzaWMgY2hlY2suICBGb3IgYSBtb3JlIGNvbXByZWhlbnNpdmUgY2hlY2ssICIKKyJ1c2UgdGhlIGUyZnNjayBwcm9ncmFtLiIKK21zZ3N0ciAiIgorIkjhu4cgdGjhu5FuZyB04bqtcCB0aW4gZXh0MiDEkcOjIHF1YSBraeG7g20gdHJhIGPGoSBi4bqjbi4gIMSQ4buDIGtp4buDbSB0cmEga+G7uSBoxqFuLCBow6N5IGTDuW5nICIKKyJjaMawxqFuZyB0csOsbmggZTJmc2NrLiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvaW50ZXJmYWNlLmM6MjAzCittc2dpZCAiU29ycnksIGNhbid0IG1vdmUgdGhlIHN0YXJ0IG9mIGV4dDIgcGFydGl0aW9ucyB5ZXQhIgorbXNnc3RyICJS4bqldCB0aeG6v2MsIHThuqFtIHRo4budaSBjaMawYSB0aOG7gyBkaSBjaHV54buDbiDEkeG6p3UgY+G7p2EgcGjDom4gdsO5bmcgZXh0MiEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfYnVmZmVyLmM6ODIKK21zZ2lkICJDb3VsZG4ndCBmbHVzaCBidWZmZXIgY2FjaGUhIgorbXNnc3RyICJLaMO0bmcgc2FuIGLhurFuZyDEkcaw4bujYyBjYWNoZSBi4buZIMSR4buHbSEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfbWtmcy5jOjE2MgorbXNnaWQgIndyaXRpbmcgcGVyLWdyb3VwIG1ldGFkYXRhIgorbXNnc3RyICLEkWFuZyBnaGkgZOG7ryBsaeG7h3UgbcOqdGEgY+G7p2EgbeG7l2kgbmjDs20iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfbWtmcy5jOjU2NAorbXNnaWQgIkZpbGUgc3lzdGVtIHRvbyBzbWFsbCBmb3IgZXh0Mi4iCittc2dzdHIgIkjhu4cgdGjhu5FuZyB04bqtcCB0aW4gcXXDoSBuaOG7jyBjaG8gZXh0Mi4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY2FsYy5jOjEzNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBuZWVkICVzIG9mIGZyZWUgZGlzayBzcGFjZSB0byBzaHJpbmsgdGhpcyBwYXJ0aXRpb24gdG8gdGhpcyBzaXplLiAgIgorIkN1cnJlbnRseSwgb25seSAlcyBpcyBmcmVlLiIKK21zZ3N0ciAiIgorIk5nxrDhu51pIGTDuW5nIGPhuqduICVkTSBraMO0bmcgZ2lhbiB0cuG7kW5nIMSR4buDIHLDunQgbmfhuq9uIHBow6JuIHbDuW5nIHThu5tpIGvDrWNoIHRoxrDhu5tjIG7DoHkgIgorIihoaeG7h24gdGjhu51pIGNo4buJIGPDsyAlZE0gdHLhu5FuZykiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY29udGV4dC5jOjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDbHVzdGVyIHN0YXJ0IGRlbHRhID0gJWQsIHdoaWNoIGlzIG5vdCBhIG11bHRpcGxlIG9mIHRoZSBjbHVzdGVyIHNpemUgJWQuIgorbXNnc3RyICIiCisiRGVsdGEgYuG6r3QgxJHhuqd1IGNsdXN0ZXIgPSAlZCwgdsOgIGtow7RuZyBwaOG6o2kgbMOgIGLhu5kgc+G7kSBj4bunYSBrw61jaCB0aMaw4bubYyBjbHVzdGVyICVkLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9mYXQuYzozMDgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlBhcnRpdGlvbiB0b28gYmlnL3NtYWxsIGZvciBhICVzIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiUGjDom4gdsO5bmcgcXXDoSBs4bubbi9uaOG7jyBjaG8gbeG7mXQgaOG7hyB0aOG7kW5nIHThuq1wIHRpbiAlcyIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9mYXQuYzo0NzQKK21zZ2lkICIiCisiVGhlIEZBVHMgZG9uJ3QgbWF0Y2guICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRoaXMgbWVhbnMsIHRoZW4gc2VsZWN0ICIKKyJjYW5jZWwsIHJ1biBzY2FuZGlzayBvbiB0aGUgZmlsZSBzeXN0ZW0sIGFuZCB0aGVuIGNvbWUgYmFjay4iCittc2dzdHIgIiIKKyJDw6FjIEZBVCBraMO0bmcgdMawxqFuZyDhu6luZy4gIE7hur91IGtow7RuZyBiaeG6v3Qgw70gbmdoxKlhIGPhu6dhIG7DsywgdGjDrCBow6N5IGNo4buNbiBjYW5jZWwgIgorIihk4burbmcpLCBjaOG6oXkgc2NhbmRpc2sgdHLDqm4gaOG7hyB0aOG7kW5nIHThuq1wIHRpbiwgc2F1IMSRw7MgcXVheSBs4bqhaS4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvZmF0LmM6NTE0Cittc2dpZCAiVGhlcmUgYXJlIG5vIHBvc3NpYmxlIGNvbmZpZ3VyYXRpb25zIGZvciB0aGlzIEZBVCB0eXBlLiIKK21zZ3N0ciAiS2jDtG5nIGPDsyBj4bqldSBow6xuaCBjw7MgdGjhu4MgY2hvIGThuqFuZyBGQVQgbsOgeS4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvZmF0LmM6NTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGaWxlIHN5c3RlbSBkb2Vzbid0IGhhdmUgZXhwZWN0ZWQgc2l6ZXMgZm9yIFdpbmRvd3MgdG8gbGlrZSBpdC4gIENsdXN0ZXIgIgorInNpemUgaXMgJWRrICglZGsgZXhwZWN0ZWQpOyBudW1iZXIgb2YgY2x1c3RlcnMgaXMgJWQgKCVkIGV4cGVjdGVkKTsgc2l6ZSBvZiAiCisiRkFUcyBpcyAlZCBzZWN0b3JzICglZCBleHBlY3RlZCkuIgorbXNnc3RyICIiCisiSOG7hyB0aOG7kW5nIHThuq1wIHRpbiBraMO0bmcgY8OzIGvDrWNoIHRoxrDhu5tjIFdpbmRvd3MgbW9uZyDEkeG7o2kuICBLw61jaCB0aMaw4bubYyBjbHVzdGVyICIKKyJsw6AgJWRrIChtb25nIMSR4bujaSAlZGspOyBz4buRIGNsdXN0ZXIgbMOgICVkIChtb25nIMSR4bujaSAlZCk7IGvDrWNoIHRoxrDhu5tjIEZBVCBsw6AgJWQgIgorInNlY3RvciAobW9uZyDEkeG7o2kgJWQpLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9mYXQuYzo1NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZpbGUgc3lzdGVtIGlzIHJlcG9ydGluZyB0aGUgZnJlZSBzcGFjZSBhcyAlZCBjbHVzdGVycywgbm90ICVkIGNsdXN0ZXJzLiIKK21zZ3N0ciAiIgorIkjhu4cgdGjhu5FuZyB04bqtcCB0aW4gY2hvIGJp4bq/dCBraMO0bmcgZ2lhbiB0cuG7kW5nIGzDoCAlZCBjbHVzdGVyLCBraMO0bmcgcGjhuqNpICVkLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9mYXQuYzo4NzQKKyMsIGZ1enp5Cittc2dpZCAiIgorIkdOVSBQYXJ0ZWQgd2FzIG1pc2NvbXBpbGVkOiB0aGUgRkFUIGJvb3Qgc2VjdG9yIHNob3VsZCBiZSA1MTIgYnl0ZXMuICBGQVQgIgorInN1cHBvcnQgd2lsbCBiZSBkaXNhYmxlZC4iCittc2dzdHIgIiIKKyLEkMOjIGJpw6puIGThu4tjaCBzYWkgR05VIHBhcnRlZDogc2VjdG9yIGto4bufaSDEkeG7mW5nIEZBVCBwaOG6o2kgbMOgIDUxMiBieXRlLiAgSOG7lyB0cuG7oyAiCisiRkFUIHPhur0gYuG7iyB04bqvdCBi4buPLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzoxNTkKKyMsIGZ1enp5Cittc2dpZCAiIgorIlRoZXJlJ3Mgbm90IGVub3VnaCByb29tIGluIHRoZSByb290IGRpcmVjdG9yeSBmb3IgYWxsIG9mIHRoZSBmaWxlcy4gIEVpdGhlciAiCisiY2FuY2VsLCBvciBpZ25vcmUgdG8gbG9zZSB0aGUgZmlsZXMuIgorbXNnc3RyICIiCisiS2jDtG5nIMSR4bunIGNo4buXIHRy4buRbmcgdHJvbmcgdGjGsCBt4bulYyBn4buRYywgY2hvIHThuqV0IGPhuqMgY8OhYyB04bqtcCB0aW4uICBIb+G6t2MgZOG7q25nICIKKyIoY2FuY2VsKSwgaG/hurdjIGzhu50gxJFpIChpZ25vcmUpIHbDoCBz4bq9IG3huqV0IGPDoWMgdOG6rXAgdGluLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzozMDAKK21zZ2lkICJFcnJvciB3cml0aW5nIHRvIHRoZSByb290IGRpcmVjdG9yeS4iCittc2dzdHIgIkzhu5dpIGdoaSB04bubaSB0aMawIG3hu6VjIGfhu5FjLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo0ODkKKyMsIGZ1enp5Cittc2dpZCAiSWYgeW91IGxlYXZlIHlvdXIgZmlsZSBzeXN0ZW0gYXMgRkFUMTYsIHRoZW4geW91IHdpbGwgaGF2ZSBubyBwcm9ibGVtcy4iCittc2dzdHIgIk7hur91IMSR4buDIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4gbMOgIEZBVDE2LCB0aMOsIHPhur0ga2jDtG5nIGPDsyB24bqlbiDEkeG7gSBnw6wuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjQ5MgorbXNnaWQgIiIKKyJJZiB5b3UgY29udmVydCB0byBGQVQxNiwgYW5kIE1TIFdpbmRvd3MgaXMgaW5zdGFsbGVkIG9uIHRoaXMgcGFydGl0aW9uLCB0aGVuICIKKyJ5b3UgbXVzdCByZS1pbnN0YWxsIHRoZSBNUyBXaW5kb3dzIGJvb3QgbG9hZGVyLiAgSWYgeW91IHdhbnQgdG8gZG8gdGhpcywgeW91ICIKKyJzaG91bGQgY29uc3VsdCB0aGUgUGFydGVkIG1hbnVhbCAob3IgeW91ciBkaXN0cmlidXRpb24ncyBtYW51YWwpLiIKK21zZ3N0ciAiIgorIk7hur91IGNodXnhu4NuIHRow6BuaCBGQVQxNiwgdsOgIGPDoGkgxJHhurd0IE1TIFdpbmRvd3MgdHLDqm4gcGjDom4gdsO5bmcgbsOgeSwgdGjDrCBz4bq9ICIKKyJwaOG6o2kgY8OgaSDEkeG6t3QgbOG6oWkgdHLDrG5oIGto4bufaSDEkeG7mW5nIGPhu6dhIE1TIFdpbmRvd3MuICBO4bq/dSBtdeG7kW4gdGjhu7FjIGhp4buHbiwgdGjDrCAiCisiY+G6p24geGVtIHTDoGkgbGnhu4d1IG5nxrDhu51pIGTDuW5nIGPhu6dhIFBhcnRlZCAoaG/hurdjIHTDoGkgbGnhu4d1IGPhu6dhIG5ow6AgcGjDom4gcGjhu5FpKS4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTAwCittc2dpZCAiIgorIklmIHlvdSBsZWF2ZSB5b3VyIGZpbGUgc3lzdGVtIGFzIEZBVDMyLCB0aGVuIHlvdSB3aWxsIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyAiCisicHJvYmxlbXMuIgorbXNnc3RyICJO4bq/dSBk4buDIGjhu4cgdGjhu5FuZyBsw6AgRkFUMzIsIHRow6wgc+G6vSBraMO0bmcgY8OzIHbhuqVuIMSR4buBIG3hu5tpIG7DoG8geOG6o3kgcmEuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjUwNAorbXNnaWQgIiIKKyJJZiB5b3UgY29udmVydCB0byBGQVQzMiwgYW5kIE1TIFdpbmRvd3MgaXMgaW5zdGFsbGVkIG9uIHRoaXMgcGFydGl0aW9uLCB0aGVuICIKKyJ5b3UgbXVzdCByZS1pbnN0YWxsIHRoZSBNUyBXaW5kb3dzIGJvb3QgbG9hZGVyLiAgSWYgeW91IHdhbnQgdG8gZG8gdGhpcywgeW91ICIKKyJzaG91bGQgY29uc3VsdCB0aGUgUGFydGVkIG1hbnVhbCAob3IgeW91ciBkaXN0cmlidXRpb24ncyBtYW51YWwpLiAgQWxzbywgIgorImNvbnZlcnRpbmcgdG8gRkFUMzIgd2lsbCBtYWtlIHRoZSBmaWxlIHN5c3RlbSB1bnJlYWRhYmxlIGJ5IE1TIERPUywgTVMgIgorIldpbmRvd3MgOTVhLCBhbmQgTVMgV2luZG93cyBOVC4iCittc2dzdHIgIiIKKyJO4bq/dSBjaHV54buDbiB0aMOgbmggRkFUMzIsIHbDoCBjw6BpIMSR4bq3dCBNUyBXaW5kb3dzIHRyw6puIHBow6JuIHbDuW5nIG7DoHksIHRow6wgc+G6vSAiCisicGjhuqNpIGPDoGkgxJHhurd0IGzhuqFpIHRyw6xuaCBraOG7n2kgxJHhu5luZyBj4bunYSBNUyBXaW5kb3dzLiAgTuG6v3UgbXXhu5FuIHRo4buxYyBoaeG7h24sIHRow6wgIgorImPhuqduIHhlbSB0w6BpIGxp4buHdSBuZ8aw4budaSBkw7luZyBj4bunYSBQYXJ0ZWQgKGhv4bq3YyB0w6BpIGxp4buHdSBj4bunYSBuaMOgIHBow6JuIHBo4buRaSkuICAiCisixJDhu5NuZyB0aOG7nWksIGNodXnhu4NuIHRow6BuaCBGQVQzMiBz4bq9IGtoaeG6v24gTVMgRE9TLCBNUyBXaW5kb3dzIDk1YSwgdsOgIE1TIFdpbmRvd3MgIgorIk5UIGtow7RuZyDEkeG7jWMgxJHGsOG7o2MgY2jDum5nLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgICVzICAlcyIKK21zZ3N0ciAiJXMgICVzICAlcyIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1MTkKK21zZ2lkICJXb3VsZCB5b3UgbGlrZSB0byB1c2UgRkFUMzI/IgorbXNnc3RyICJOZ8OgaSBtdeG7kW4gZMO5bmcgRkFUMzI/IgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjU1MCBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjU2NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyAgJXMiCittc2dzdHIgIiVzICAlcyIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1NTEKK21zZ2lkICIiCisiVGhlIGZpbGUgc3lzdGVtIGNhbiBvbmx5IGJlIHJlc2l6ZWQgdG8gdGhpcyBzaXplIGJ5IGNvbnZlcnRpbmcgdG8gRkFUMTYuIgorbXNnc3RyICIiCisiQ2jhu4kgdGhheSDEkeG7lWkgxJHGsOG7o2Mga8OtY2ggdGjGsOG7m2MgY+G7p2EgaOG7hyB0aOG7kW5nIHThuq1wIHRpbiB0aMOgbmgga8OtY2ggdGjGsOG7m2MgbsOgeSBraGkgIgorImNodXnhu4NuIHRow6BuaCBGQVQxNi4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTY3Cittc2dpZCAiIgorIlRoZSBmaWxlIHN5c3RlbSBjYW4gb25seSBiZSByZXNpemVkIHRvIHRoaXMgc2l6ZSBieSBjb252ZXJ0aW5nIHRvIEZBVDMyLiIKK21zZ3N0ciAiIgorIkNo4buJIHRoYXkgxJHhu5VpIMSRxrDhu6NjIGvDrWNoIHRoxrDhu5tjIGPhu6dhIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4gdGjDoG5oIGvDrWNoIHRoxrDhu5tjIG7DoHkga2hpICIKKyJjaHV54buDbiB0aMOgbmggRkFUMzIuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjU4MAorIywgZnV6enkKK21zZ2lkICIiCisiR05VIFBhcnRlZCBjYW5ub3QgcmVzaXplIHRoaXMgcGFydGl0aW9uIHRvIHRoaXMgc2l6ZS4gIFdlJ3JlIHdvcmtpbmcgb24gaXQhIgorbXNnc3RyICIiCisiR05VIFBhcnRlZCBraMO0bmcgdGhheSDEkeG7lWkgxJHGsOG7o2Mga8OtY2ggdGjGsOG7m2MgY+G7p2EgcGjDom4gdsO5bmcgbsOgeSB0aMOgbmgga8OtY2ggdGjGsOG7m2MgIgorImNo4buJIHJhLiAgQ2jDum5nIHTDtGkgxJFhbmcgdGjhu7FjIGhp4buHbiB2aeG7h2MgxJHDsyEiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjQ5IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjU2Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGludmFsaWQgc2lnbmF0dXJlIGZvciBhIEZBVCBmaWxlIHN5c3RlbS4iCittc2dzdHIgIkjhu4cgdGjhu5FuZyB04bqtcCB0aW4gY8OzIGNo4buvIGvDvSBo4buHIHRo4buRbmcgdOG6rXAgdGluIEZBVCBzYWkuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo2NAorbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyBhbiBpbnZhbGlkIHNlY3RvciBzaXplIGZvciBhIEZBVCBmaWxlIHN5c3RlbS4iCittc2dzdHIgIkjhu4cgdGjhu5FuZyB04bqtcCB0aW4gY8OzIGvDrWNoIHRoxrDhu5tjIHNlY3RvciBzYWkgY2hvIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4gRkFULiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6NzEKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgYW4gaW52YWxpZCBjbHVzdGVyIHNpemUgZm9yIGEgRkFUIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiSOG7hyB0aOG7kW5nIHThuq1wIHRpbiBjw7Mga8OtY2ggdGjGsOG7m2MgY2x1c3RlciBzYWkgY2hvIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4gRkFULiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6NzgKKyMsIGZ1enp5Cittc2dpZCAiIgorIkZpbGUgc3lzdGVtIGhhcyBhbiBpbnZhbGlkIG51bWJlciBvZiByZXNlcnZlZCBzZWN0b3JzIGZvciBhIEZBVCBmaWxlIHN5c3RlbS4iCittc2dzdHIgIkjhu4cgdGjhu5FuZyB04bqtcCB0aW4gY8OzIHPhu5Egc2VjdG9yIGThu7EgdHLhu68gc2FpIGNobyBo4buHIHRo4buRbmcgdOG6rXAgdGluIEZBVC4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjg1CisjLCBmdXp6eQorbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyBhbiBpbnZhbGlkIG51bWJlciBvZiBGQVRzLiIKK21zZ3N0ciAiSOG7hyB0aOG7kW5nIHThuq1wIHRpbiBjw7Mgc+G7kSBo4buHIHRo4buRbmcgdOG6rXAgdGluIEZBVCBzYWkuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzoxMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgZmlsZSBzeXN0ZW0gaGFzIGEgbG9naWNhbCBzZWN0b3Igc2l6ZSBvZiAlZC4gIEdOVSBQYXJ0ZWQgaXMga25vd24gbm90ICIKKyJ0byB3b3JrIHByb3Blcmx5IHdpdGggc2VjdG9yIHNpemVzIG90aGVyIHRoYW4gNTEyIGJ5dGVzLiIKK21zZ3N0ciAiIgorIkjhu4cgdGjhu5FuZyB04bqtcCB0aW4gY8OzIGvDrWNoIHRoxrDhu5tjIHNlY3RvciBsw7Rnw61jIGzDoCAlZC4gIEdOVSBQYXJ0ZWQga2jDtG5nIGzDoG0gIgorInZp4buHYyBjaMOtbmggeMOhYyB24bubaSBrw61jaCB0aMaw4bubYyBzZWN0b3Iga2jDoWMgNTEyIGJ5dGUuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzoxNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmaWxlIHN5c3RlbSdzIENIUyBnZW9tZXRyeSBpcyAoJWQsICVkLCAlZCksIHdoaWNoIGlzIGludmFsaWQuICBUaGUgIgorInBhcnRpdGlvbiB0YWJsZSdzIENIUyBnZW9tZXRyeSBpcyAoJWQsICVkLCAlZCkuICBJZiB5b3Ugc2VsZWN0IElnbm9yZSwgdGhlICIKKyJmaWxlIHN5c3RlbSdzIENIUyBnZW9tZXRyeSB3aWxsIGJlIGxlZnQgdW5jaGFuZ2VkLiAgSWYgeW91IHNlbGVjdCBGaXgsIHRoZSAiCisiZmlsZSBzeXN0ZW0ncyBDSFMgZ2VvbWV0cnkgd2lsbCBiZSBzZXQgdG8gbWF0Y2ggdGhlIHBhcnRpdGlvbiB0YWJsZSdzIENIUyAiCisiZ2VvbWV0cnkuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjIxMworbXNnaWQgIkZBVCBib290IHNlY3RvciBzYXlzIGxvZ2ljYWwgc2VjdG9yIHNpemUgaXMgMC4gIFRoaXMgaXMgd2VpcmQuICIKK21zZ3N0ciAiU2VjdG9yIGto4bufaSDEkeG7mW5nIEZBVCBuw7NpIGvDrWNoIHRoxrDhu5tjIHNlY3RvciBsw7Rnw61jIGzDoCAwLiAgS+G7syBs4bqhLiAiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjIxOQorbXNnaWQgIkZBVCBib290IHNlY3RvciBzYXlzIHRoZXJlIGFyZSBubyBGQVQgdGFibGVzLiAgVGhpcyBpcyB3ZWlyZC4gIgorbXNnc3RyICJTZWN0b3Iga2jhu59pIMSR4buZbmcgRkFUIG7Ds2kga2jDtG5nIGPDsyBi4bqjbmcgRkFULiAgS+G7syBs4bqhLiAiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjIyNQorbXNnaWQgIkZBVCBib290IHNlY3RvciBzYXlzIGNsdXN0ZXJzIGFyZSAwIHNlY3RvcnMuICBUaGlzIGlzIHdlaXJkLiAiCittc2dzdHIgIlNlY3RvciBraOG7n2kgxJHhu5luZyBGQVQgbsOzaSBjw6FjIGNsdXN0ZXIgbMOgIGPDoWMgc2VjdG9yIDAuICBL4buzIGzhuqEuICIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6MjM1CisjLCBmdXp6eQorbXNnaWQgIkZpbGUgc3lzdGVtIGlzIEZBVDEyLCB3aGljaCBpcyB1bnN1cHBvcnRlZC4iCittc2dzdHIgIkjhu4cgdGjhu5FuZyB04bqtcCB0aW4gbMOgIEZBVDEyLCB2w6Aga2jDtG5nIMSRxrDhu6NjIGjhu5cgdHLhu6MuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo0MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBpbmZvcm1hdGlvbiBzZWN0b3IgaGFzIHRoZSB3cm9uZyBzaWduYXR1cmUgKCV4KS4gIFNlbGVjdCBjYW5jZWwgZm9yIG5vdywgIgorImFuZCBzZW5kIGluIGEgYnVnIHJlcG9ydC4gIElmIHlvdSdyZSBkZXNwZXJhdGUsIGl0J3MgcHJvYmFibHkgc2FmZSB0byBpZ25vcmUuIgorbXNnc3RyICIiCisiU2VjdG9yIHRow7RuZyB0aW4gY8OzIGNo4buvIGvDvSBzYWkgKCV4KS4gIEjDo3kgY2jhu41uIGThu6tuZyAoY2FuY2VsKSwgdsOgIGfhu61pIG3hu5l0IGLDoW8gIgorImPDoW8gbOG7l2kgYnVnLiAgTuG6v3UgbGnhu4F1IGzEqW5oLCB0aMOsIGPDsyB0aOG7gyBs4budIMSRaS4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY291bnQuYzoxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIGRpcmVjdG9yeSBlbnRyeSBmb3IgJXM6IGZpcnN0IGNsdXN0ZXIgaXMgdGhlIGVuZCBvZiBmaWxlIG1hcmtlci4iCittc2dzdHIgIk3hu6VjIHRoxrAgbeG7pWMgeOG6pXUgY2hvICVzOiBjbHVzdGVyIMSR4bqndSB0acOqbiBsw6AgY3Xhu5FpIGPhu6dhIMSRw6FuaCBk4bqldSB04bqtcCB0aW4uIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvdW50LmM6MTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJCYWQgRkFUOiB1bnRlcm1pbmF0ZWQgY2hhaW4gZm9yICVzLiAgWW91IHNob3VsZCBydW4gZG9zZnNjayBvciBzY2FuZGlzay4iCittc2dzdHIgIkZBVCBY4bqldTogY2h14buXaSBraMO0bmcga+G6v3QgdGjDumMgY2hvICVzLiAgQ+G6p24gY2jhuqF5IGRvc2ZzY2sgaG/hurdjIHNjYW5kaXNrLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb3VudC5jOjE3NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIkJhZCBGQVQ6IGNsdXN0ZXIgJWQgb3V0c2lkZSBmaWxlIHN5c3RlbSBpbiBjaGFpbiBmb3IgJXMuICBZb3Ugc2hvdWxkIHJ1biAiCisiZG9zZnNjayBvciBzY2FuZGlzay4iCittc2dzdHIgIiIKKyJGQVQgWOG6pXU6IGNsdXN0ZXIgJWQgbmdvw6BpIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4gdHJvbmcgY2h14buXaSBjaG8gJXMuICBD4bqnbiBjaOG6oXkgIgorImRvc2ZzY2sgaG/hurdjIHNjYW5kaXNrLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb3VudC5jOjE4NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQmFkIEZBVDogY2x1c3RlciAlZCBpcyBjcm9zcy1saW5rZWQgZm9yICVzLiAgWW91IHNob3VsZCBydW4gZG9zZnNjayBvciAiCisic2NhbmRpc2suIgorbXNnc3RyICIiCisiRkFUIFjhuqV1OiBjbHVzdGVyICVkIGzDoCBsacOqbiBr4bq/dCBjaOG7k25nIGNow6lvIGNobyAlcy4gIEPhuqduIGNo4bqheSBkb3Nmc2NrIGhv4bq3YyAiCisic2NhbmRpc2suIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvdW50LmM6MjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzICVkaywgYnV0IGl0IGhhcyAlZCBjbHVzdGVycyAoJWRrKS4iCittc2dzdHIgIiVzIGzDoCAlZGssIG5oxrBuZyBuw7MgY8OzICVkIGNsdXN0ZXIgKCVkaykuIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvdW50LmM6MjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZmlsZSAlcyBpcyBtYXJrZWQgYXMgYSBzeXN0ZW0gZmlsZS4gIFRoaXMgbWVhbnMgbW92aW5nIGl0IGNvdWxkIGNhdXNlICIKKyJzb21lIHByb2dyYW1zIHRvIHN0b3Agd29ya2luZy4iCittc2dzdHIgIiIKKyJU4bqtcCB0aW4gJXMgY8OzIGThuqV1IGhp4buHdSBj4bunYSB04bqtcCB0aW4gaOG7hyB0aOG7kW5nLiAgQ8OzIG5naMSpYSBkaSBjaHV54buDbiB04bqtcCB0aW4gbsOgeSAiCisiY8OzIHRo4buDIGtoaeG6v24gbeG7mXQgc+G7kSBjaMawxqFuZyB0csOsbmggZOG7q25nIGzDoG0gdmnhu4djLiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC90YWJsZS5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRkFUICVkIG1lZGlhICV4IGRvZXNuJ3QgbWF0Y2ggdGhlIGJvb3Qgc2VjdG9yJ3MgbWVkaWEgJXguICBZb3Ugc2hvdWxkICIKKyJwcm9iYWJseSBydW4gc2NhbmRpc2suIgorbXNnc3RyICIiCisiRkFUICVkIHRoaeG6v3QgYuG7iyAleCBraMO0bmcgdMawxqFuZyDhu6luZyB0aGnhur90IGLhu4sgc2VjdG9yIGto4bufaSDEkeG7mW5nICV4LiAgQ8OzIHRo4buDIGPhuqduICIKKyJjaOG6oXkgc2NhbmRpc2suIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3RhYmxlLmM6MjY5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYXRfdGFibGVfc2V0OiBjbHVzdGVyICVsZCBvdXRzaWRlIGZpbGUgc3lzdGVtIgorbXNnc3RyICJmYXRfdGFibGVfc2V0OiBjbHVzdGVyICVsZCBuZ2/DoGkgaOG7hyB0aOG7kW5nIHThuq1wIHRpbiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC90YWJsZS5jOjMwMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmF0X3RhYmxlX2dldDogY2x1c3RlciAlbGQgb3V0c2lkZSBmaWxlIHN5c3RlbSIKK21zZ3N0ciAiZmF0X3RhYmxlX2dldDogY2x1c3RlciAlbGQgbmdvw6BpIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvdGFibGUuYzozNDMKK21zZ2lkICJmYXRfdGFibGVfYWxsb2NfY2x1c3Rlcjogbm8gZnJlZSBjbHVzdGVycyIKK21zZ3N0ciAiZmF0X3RhYmxlX2FsbG9jX2NsdXN0ZXI6IGtow7RuZyBjw7JuIGNsdXN0ZXIgdHLhu5FuZyIKKworIzogbGlicGFydGVkL2ZzL2xpbnV4X3N3YXAvbGludXhfc3dhcC5jOjI3NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVW5yZWNvZ25pc2VkIG9sZCBzdHlsZSBsaW51eCBzd2FwIHNpZ25hdHVyZSAnJTEwcycuIgorbXNnc3RyICJDaOG7ryBrw70gbGludXggc3dhcCBraMO0bmcgbmjhuq1uIHJhICclMTBzJy4iCisKKyM6IGxpYnBhcnRlZC9mcy9saW51eF9zd2FwL2xpbnV4X3N3YXAuYzozMTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVucmVjb2duaXNlZCBuZXcgc3R5bGUgbGludXggc3dhcCBzaWduYXR1cmUgJyUxMHMnLiIKK21zZ3N0ciAiQ2jhu68ga8O9IGxpbnV4IHN3YXAga2jDtG5nIG5o4bqtbiByYSAnJTEwcycuIgorCisjOiBsaWJwYXJ0ZWQvZnMvbGludXhfc3dhcC9saW51eF9zd2FwLmM6MzU4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVbnJlY29nbmlzZWQgc3dzdXNwIGxpbnV4IHN3YXAgc2lnbmF0dXJlICclOXMnLiIKK21zZ3N0ciAiQ2jhu68ga8O9IGxpbnV4IHN3YXAga2jDtG5nIG5o4bqtbiByYSAnJTEwcycuIgorCisjOiBsaWJwYXJ0ZWQvZnMvbGludXhfc3dhcC9saW51eF9zd2FwLmM6NDM0Cittc2dpZCAiVG9vIG1hbnkgYmFkIHBhZ2VzLiIKK21zZ3N0ciAiUXXDoSBuaGnhu4F1IHRyYW5nIHjhuqV1LiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9hZHZmcy5jOjEyMSBsaWJwYXJ0ZWQvZnMvaGZzL2FkdmZzX3BsdXMuYzoxMjIKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzo0MTQgbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjUwOAorIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NTM5IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjY1OAorIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NzcyCittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIGNvbnRhaW5zIGVycm9ycy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9hZHZmc19wbHVzLmM6Mjg3Cittc2dpZCAiQmFkIGJsb2NrcyBjb3VsZCBub3QgYmUgcmVhZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9jYWNoZS5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVHJ5aW5nIHRvIHJlZ2lzdGVyIGFuIGV4dGVudCBzdGFydGluZyBhdCBibG9jayAweCVYLCBidXQgYW5vdGhlciBvbmUgYWxyZWFkeSAiCisiZXhpc3RzIGF0IHRoaXMgcG9zaXRpb24uICBZb3Ugc2hvdWxkIGNoZWNrIHRoZSBmaWxlIHN5c3RlbSEiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9jYWNoZS5jOjIxNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVHJ5aW5nIHRvIG1vdmUgYW4gZXh0ZW50IGZyb20gYmxvY2sgT3glWCB0byBibG9jayBPeCVYLCBidXQgYW5vdGhlciBvbmUgIgorImFscmVhZHkgZXhpc3RzIGF0IHRoaXMgcG9zaXRpb24uICBUaGlzIHNob3VsZCBub3QgaGFwcGVuISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGUuYzoxNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHVwZGF0ZSB0aGUgZXh0ZW50IGNhY2hlIGZvciBIRlMgZmlsZSB3aXRoIENOSUQgJVguIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZS5jOjE4MAorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgdG8gcmVhZCBIRlMgZmlsZSB3aXRoIENOSUQgJVggYmVoaW5kIEVPRi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlLmM6MTkwIGxpYnBhcnRlZC9mcy9oZnMvZmlsZS5jOjIyMAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCBzZWN0b3IgJWxsaSBvZiBIRlMgZmlsZSB3aXRoIENOSUQgJVguIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZS5jOjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgdG8gd3JpdGUgSEZTIGZpbGUgd2l0aCBDTklEICVYIGJlaGluZCBFT0YuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZV9wbHVzLmM6MTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB1cGRhdGUgdGhlIGV4dGVudCBjYWNoZSBmb3IgSEZTKyBmaWxlIHdpdGggQ05JRCAlWC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlX3BsdXMuYzoyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIHRvIHJlYWQgSEZTKyBmaWxlIHdpdGggQ05JRCAlWCBiZWhpbmQgRU9GLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGVfcGx1cy5jOjIxMyBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGVfcGx1cy5jOjI1NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCBzZWN0b3IgJWxsaSBvZiBIRlMrIGZpbGUgd2l0aCBDTklEICVYLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGVfcGx1cy5jOjI0NQorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgdG8gd3JpdGUgSEZTKyBmaWxlIHdpdGggQ05JRCAlWCBiZWhpbmQgRU9GLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjIzMgorbXNnaWQgIlNvcnJ5LCBIRlMgY2Fubm90IGJlIHJlc2l6ZWQgdGhhdCB3YXkgeWV0LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjI2MiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjY0MQorbXNnaWQgIkRhdGEgcmVsb2NhdGlvbiBoYXMgZmFpbGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjI4MQorbXNnaWQgIkRhdGEgcmVsb2NhdGlvbiBsZWZ0IHNvbWUgZGF0YSBpbiB0aGUgZW5kIG9mIHRoZSB2b2x1bWUuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MzIwCisjLCBmdXp6eQorbXNnaWQgIndyaXRpbmcgSEZTIE1hc3RlciBEaXJlY3RvcnkgQmxvY2siCittc2dzdHIgIkzhu5dpIGdoaSB04bubaSB0aMawIG3hu6VjIGfhu5FjLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo0NjgKK21zZ2lkICJObyB2YWxpZCBIRlNbK1hdIHNpZ25hdHVyZSBoYXMgYmVlbiBmb3VuZCB3aGlsZSBvcGVuaW5nLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjQ3OAorIywgYy1mb3JtYXQKK21zZ2lkICJWZXJzaW9uICVkIG9mIEhGUysgaXNuJ3Qgc3VwcG9ydGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICJWZXJzaW9uICVkIG9mIEhGU1ggaXNuJ3Qgc3VwcG9ydGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjY3MgorbXNnaWQgIkRhdGEgcmVsb2NhdGlvbiBsZWZ0IHNvbWUgZGF0YSBhdCB0aGUgZW5kIG9mIHRoZSB2b2x1bWUuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NzIwCisjLCBmdXp6eQorbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdGhlIGFsbG9jYXRpb24gZmlsZS4iCittc2dzdHIgIkzhu5dpIGdoaSB04bubaSB0aMawIG3hu6VjIGfhu5FjLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo3MzUKK21zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRoZSBjb21wYXRpYmlsaXR5IHBhcnQgb2YgdGhlIGFsbG9jYXRpb24gZmlsZS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo3NTAKK21zZ2lkICJ3cml0aW5nIEhGUysgVm9sdW1lIEhlYWRlciIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjg1MAorbXNnaWQgIkFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGxvb2tpbmcgZm9yIHRoZSBtYW5kYXRvcnkgYmFkIGJsb2NrcyBmaWxlLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjkwNAorbXNnaWQgIiIKKyJJdCBzZWVtcyB0aGVyZSBpcyBhbiBlcnJvciBpbiB0aGUgSEZTIHdyYXBwZXI6IHRoZSBiYWQgYmxvY2tzIGZpbGUgZG9lc24ndCAiCisiY29udGFpbiB0aGUgZW1iZWRkZWQgSEZTKyB2b2x1bWUuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6OTQwCittc2dpZCAiU29ycnksIEhGUysgY2Fubm90IGJlIHJlc2l6ZWQgdGhhdCB3YXkgeWV0LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjk3NQorbXNnaWQgInNocmlua2luZyBlbWJlZGRlZCBIRlMrIHZvbHVtZSIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjk5MQorbXNnaWQgIlJlc2l6aW5nIHRoZSBIRlMrIHZvbHVtZSBoYXMgZmFpbGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjk5OAorIywgZnV6enkKK21zZ2lkICJzaHJpbmtpbmcgSEZTIHdyYXBwZXIiCittc2dzdHIgIsSRYW5nIHLDunQgbmfhuq9uIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjEwMDcKK21zZ2lkICJVcGRhdGluZyB0aGUgSEZTIHdyYXBwZXIgaGFzIGZhaWxlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzoxMTA5IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MTE5NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhpcyBpcyBub3QgYSByZWFsICVzIGNoZWNrLiAgVGhpcyBpcyBnb2luZyB0byBleHRyYWN0IHNwZWNpYWwgbG93IGxldmVsICIKKyJmaWxlcyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzoxNTUKK21zZ2lkICJCYWQgYmxvY2sgbGlzdCBoZWFkZXIgY2hlY2tzdW0uIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjE2OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSW52YWxpZCBzaXplIG9mIGEgdHJhbnNhY3Rpb24gYmxvY2sgd2hpbGUgcmVwbGF5aW5nIHRoZSBqb3VybmFsICglaSBieXRlcykuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjI2MAorbXNnaWQgIiIKKyJKb3VybmFsIHN0b3JlZCBvdXRzaWRlIG9mIHRoZSB2b2x1bWUgYXJlIG5vdCBzdXBwb3J0ZWQuICBUcnkgdG8gZGVzYWN0aXZhdGUgIgorInRoZSBqb3VybmFsIGFuZCBydW4gUGFydGVkIGFnYWluLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzoyNzEKKyMsIGZ1enp5Cittc2dpZCAiSm91cm5hbCBvZmZzZXQgb3Igc2l6ZSBpcyBub3QgbXVsdGlwbGUgb2YgdGhlIHNlY3RvciBzaXplLiIKK21zZ3N0ciAiIgorIkRlbHRhIGLhuq90IMSR4bqndSBjbHVzdGVyID0gJWQsIHbDoCBraMO0bmcgcGjhuqNpIGzDoCBi4buZIHPhu5EgY+G7p2Ega8OtY2ggdGjGsOG7m2MgY2x1c3RlciAlZC4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjI5MgorbXNnaWQgIkluY29ycmVjdCBtYWdpYyB2YWx1ZXMgaW4gdGhlIGpvdXJuYWwgaGVhZGVyLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozMDIKK21zZ2lkICJKb3VybmFsIHNpemUgbWlzbWF0Y2ggYmV0d2VlbiBqb3VybmFsIGluZm8gYmxvY2sgYW5kIGpvdXJuYWwgaGVhZGVyLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozMTQKKyMsIGZ1enp5Cittc2dpZCAiU29tZSBoZWFkZXIgZmllbGRzIGFyZSBub3QgbXVsdGlwbGUgb2YgdGhlIHNlY3RvciBzaXplLiIKK21zZ3N0ciAiIgorIkRlbHRhIGLhuq90IMSR4bqndSBjbHVzdGVyID0gJWQsIHbDoCBraMO0bmcgcGjhuqNpIGzDoCBi4buZIHPhu5EgY+G7p2Ega8OtY2ggdGjGsOG7m2MgY2x1c3RlciAlZC4iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjMyMworbXNnaWQgIiIKKyJUaGUgc2VjdG9yIHNpemUgc3RvcmVkIGluIHRoZSBqb3VybmFsIGlzIG5vdCA1MTIgYnl0ZXMuICBQYXJ0ZWQgb25seSAiCisic3VwcG9ydHMgNTEyIGJ5dGVzIGxlbmd0aCBzZWN0b3JzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozMzUKK21zZ2lkICJCYWQgam91cm5hbCBjaGVja3N1bS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MzUzCittc2dpZCAiIgorIlRoZSBqb3VybmFsIGlzIG5vdCBlbXB0eS4gIFBhcnRlZCBtdXN0IHJlcGxheSB0aGUgdHJhbnNhY3Rpb25zIGJlZm9yZSAiCisib3BlbmluZyB0aGUgZmlsZSBzeXN0ZW0uICBUaGlzIHdpbGwgbW9kaWZ5IHRoZSBmaWxlIHN5c3RlbS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MzgxCittc2dpZCAiIgorIlRoZSB2b2x1bWUgaGVhZGVyIG9yIHRoZSBtYXN0ZXIgZGlyZWN0b3J5IGJsb2NrIGhhcyBjaGFuZ2VkIHdoaWxlIHJlcGxheWluZyAiCisidGhlIGpvdXJuYWwuICBZb3Ugc2hvdWxkIHJlc3RhcnQgUGFydGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3Byb2JlLmM6NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBhcnRlZCBjYW4ndCB1c2UgSEZTIGZpbGUgc3lzdGVtcyBvbiBkaXNrcyB3aXRoIGEgc2VjdG9yIHNpemUgbm90IGVxdWFsIHRvICUiCisiZCBieXRlcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjE1MSBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzoxNTUKK21zZ2lkICJBbiBleHRlbnQgaGFzIG5vdCBiZWVuIHJlbG9jYXRlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjI1MSBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzozMDcKK21zZ2lkICIiCisiQSByZWZlcmVuY2UgdG8gYW4gZXh0ZW50IGNvbWVzIGZyb20gYSBwbGFjZSBpdCBzaG91bGQgbm90LiAgWW91IHNob3VsZCBjaGVjayAiCisidGhlIGZpbGUgc3lzdGVtISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6MzgxCittc2dpZCAiVGhpcyBIRlMgdm9sdW1lIGhhcyBubyBjYXRhbG9nIGZpbGUuICBUaGlzIGlzIHZlcnkgdW51c3VhbCEiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjQ3NQorbXNnaWQgIlRoaXMgSEZTIHZvbHVtZSBoYXMgbm8gZXh0ZW50cyBvdmVyZmxvdyBmaWxlLiAgVGhpcyBpcyBxdWl0ZSB1bnVzdWFsISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NTE3IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjY2OAorbXNnaWQgIiIKKyJUaGUgZXh0ZW50cyBvdmVyZmxvdyBmaWxlIHNob3VsZCBub3QgY29udGFpbiBpdHMgb3duIGV4dGVudHMhICBZb3Ugc2hvdWxkICIKKyJjaGVjayB0aGUgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzo1NzQgbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6ODQ3CisjLCBmdXp6eQorbXNnaWQgIkNvdWxkIG5vdCBjYWNoZSB0aGUgZmlsZSBzeXN0ZW0gaW4gbWVtb3J5LiIKK21zZ3N0ciAiS2jDtG5nIG5o4bqtbiByYSBo4buHIHRo4buRbmcgdOG6rXAgdGluLiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjYzNSBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo5MDgKK21zZ2lkICJCYWQgYmxvY2tzIGxpc3QgY291bGQgbm90IGJlIGxvYWRlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjY0OSBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo5MjQKK21zZ2lkICJBbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgZXh0ZW50IHJlbG9jYXRpb24uIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjQ5NQorbXNnaWQgIlRoaXMgSEZTKyB2b2x1bWUgaGFzIG5vIGNhdGFsb2cgZmlsZS4gIFRoaXMgaXMgdmVyeSB1bnVzdWFsISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo2MTkKK21zZ2lkICJUaGlzIEhGUysgdm9sdW1lIGhhcyBubyBleHRlbnRzIG92ZXJmbG93IGZpbGUuICBUaGlzIGlzIHF1aXRlIHVudXN1YWwhIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo5NAorbXNnaWQgImRpc3BsYXlzIHRoaXMgaGVscCBtZXNzYWdlIgorbXNnc3RyICJoaeG7g24gdGjhu4sgdHLhu6MgZ2nDunAgbsOgeSIKKworIzogcGFydGVkL3BhcnRlZC5jOjk1Cittc2dpZCAibGlzdHMgcGFydGl0aW9uIGxheW91dCBvbiBhbGwgYmxvY2sgZGV2aWNlcyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6OTYKK21zZ2lkICJkaXNwbGF5cyBtYWNoaW5lIHBhcnNlYWJsZSBvdXRwdXQiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjk3Cittc2dpZCAibmV2ZXIgcHJvbXB0cyBmb3IgdXNlciBpbnRlcnZlbnRpb24iCittc2dzdHIgImtow7RuZyBiYW8gZ2nhu50gaOG7j2kgbmfGsOG7nWkgZMO5bmciCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo5OAorbXNnaWQgImRpc3BsYXlzIHRoZSB2ZXJzaW9uIgorbXNnc3RyICJoaeG7g24gdGjhu4sgcGhpw6puIGLhuqNuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTExCisjLCBmdXp6eQorbXNnaWQgIiIKKyJOVU1CRVIgaXMgdGhlIHBhcnRpdGlvbiBudW1iZXIgdXNlZCBieSBMaW51eC4gIE9uIE1TLURPUyBkaXNrIGxhYmVscywgdGhlICIKKyJwcmltYXJ5IHBhcnRpdGlvbnMgbnVtYmVyIGZyb20gMSB0byA0LCBsb2dpY2FsIHBhcnRpdGlvbnMgZnJvbSA1IG9ud2FyZHMuXG4iCittc2dzdHIgIiIKKyJNSU5PUiAoTkjhu44pIGzDoCBz4buRIGPhu6dhIHBow6JuIHbDuW5nIHPhu60gZOG7pW5nIGLhu59pIExpbnV4LiAgVHLDqm4gbmjDo24gxJHEqWEgbXNkb3MsIGPDoWMgIgorInBow6JuIHbDuW5nIGNow61uaCBjw7Mgc+G7kSB04burIDEgxJHhur9uIDQsIHbDoCBwaMOibiB2w7luZyBsw7Rnw61jIHThu6sgNSB0cuG7nyDEkWkuXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMTQKK21zZ2lkICJMQUJFTC1UWVBFIGlzIG9uZSBvZjogIgorbXNnc3RyICJMQUJFTC1UWVBFIGzDoCBt4buZdCB0cm9uZyBz4buROiAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMTUKK21zZ2lkICJGTEFHIGlzIG9uZSBvZjogIgorbXNnc3RyICJGTEFHIGzDoCBt4buZdCB0cm9uZyBz4buROiAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMTYKKyMsIGZ1enp5Cittc2dpZCAiVU5JVCBpcyBvbmUgb2Y6ICIKK21zZ3N0ciAiRkxBRyBsw6AgbeG7mXQgdHJvbmcgc+G7kTogIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTE3Cittc2dpZCAiUEFSVC1UWVBFIGlzIG9uZSBvZjogcHJpbWFyeSwgbG9naWNhbCwgZXh0ZW5kZWRcbiIKK21zZ3N0ciAiUEFSVC1UWVBFIGzDoCBt4buZdCB0cm9uZyBz4buROiBwcmltYXJ5LCBsb2dpY2FsLCBleHRlbmRlZFxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTE5Cittc2dpZCAiRlMtVFlQRSBpcyBvbmUgb2Y6ICIKK21zZ3N0ciAiRlMtVFlQRSBsw6AgbeG7mXQgdHJvbmcgc+G7kTogIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIwCisjLCBmdXp6eQorbXNnaWQgIiIKKyJTVEFSVCBhbmQgRU5EIGFyZSBkaXNrIGxvY2F0aW9ucywgc3VjaCBhcyA0R0Igb3IgMTAlLiAgTmVnYXRpdmUgdmFsdWVzIGNvdW50ICIKKyJmcm9tIHRoZSBlbmQgb2YgdGhlIGRpc2suICBGb3IgZXhhbXBsZSwgLTFzIHNwZWNpZmllcyBleGFjdGx5IHRoZSBsYXN0ICIKKyJzZWN0b3IuXG4iCittc2dzdHIgIlNUQVJUIHbDoCBFTkQgdMOtbmggdGhlbyBtw6pnYSBieXRlLiAgR2nDoSB0cuG7iyDDom0gxJHhur9tIHThu6sgY3Xhu5FpIMSRxKlhLlxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIzCittc2dpZCAiU1RBVEUgaXMgb25lIG9mOiBvbiwgb2ZmXG4iCittc2dzdHIgIlNUQVRFIGzDoCBt4buZdCB0cm9uZyBz4buROiBvbiwgb2ZmXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjQKK21zZ2lkICJERVZJQ0UgaXMgdXN1YWxseSAvZGV2L2hkYSBvciAvZGV2L3NkYVxuIgorbXNnc3RyICJERVZJQ0UgdGjDtG5nIHRoxrDhu51uZyBsw6AgL2Rldi9oZGEgaGF5IC9kZXYvc2RhXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjUKK21zZ2lkICJOQU1FIGlzIGFueSB3b3JkIHlvdSB3YW50XG4iCittc2dzdHIgIk5BTUUgbMOgIGLhuqV0IGvhu7MgdOG7qyBnw6wgdGhlbyDDvSBtdeG7kW5cbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyNgorbXNnaWQgIlRoZSBwYXJ0aXRpb24gbXVzdCBoYXZlIG9uZSBvZiB0aGUgZm9sbG93aW5nIEZTLVRZUEVzOiAiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEzMAorIywgZnV6enkKK21zZ2lkICIiCisiQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy5cbiIKKyJUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZSwgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuXG4iCisiXG4iCisiVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4iCisiYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiIKKyJNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4iCisiR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIsSQxINuZyBrw70gYuG6o24gcXV54buBbiAoQykgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMyBGcmVlIFNvZnR3YXJlICIKKyJGb3VuZGF0aW9uLCBJbmMuXG4iCisiQ2jGsMahbmcgdHLDrG5oIG7DoHkgbMOgIG3hu5l0IHBo4bqnbSBt4buBbSBtaeG7hW4gcGjDrSwgdGhlbyBi4bqjbiBxdXnhu4FuIEdOVSBHZW5lcmFsIFB1YmxpYyAiCisiTGljZW5zZS5cbiIKKyJcbiIKKyJDaMawxqFuZyB0csOsbmggbsOgeSDEkcaw4bujYyBwaMOhdCBow6BuaCB24bubaSBoeSB24buNbmcgcuG6sW5nIG7DsyBz4bq9IHRy4bufIG7Dqm4gaOG7r3Ugw61jaCwgIgorIm5oxrBuZyBuw7MgS0jDlE5HIEvDiE0gVEhFTyBC4bqkVCBL4buyIFPhu7AgQuG6ok8gxJDhuqJNIE7DgE8sIG5nYXkgY+G6oyBuaOG7r25nIMSR4bqjbSBi4bqjbyBuZ+G6p20gIgorImhp4buDdSB24buBIHZp4buHYyBUSMavxqBORyBN4bqgSSBIw5NBIGhheSBQSOG6okkgUEjDmSBI4buiUCBW4buaSSBN4buYVCBN4bukQyDEkMONQ0ggQ+G7pCBUSOG7giBOw4BPLiAiCisiSMOjeSB0aGFtIGto4bqjbyBnaeG6pXkgcGjDqXAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgxJHhu4MgYmnhur90IHRow6ptIGNoaSB0aeG6v3QuXG4iCisiXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTAuZiUlXHQodGltZSBsZWZ0ICUuMmQ6JS4yZCkiCittc2dzdHIgIiUwLmYlJVx0KGPDsm4gbOG6oWkgJS4yZDolLjJkKSIKKworIzogcGFydGVkL3BhcnRlZC5jOjE5NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGFydGl0aW9uICVzIGlzIGJlaW5nIHVzZWQuIFlvdSBtdXN0IHVubW91bnQgaXQgYmVmb3JlIHlvdSBtb2RpZnkgaXQgd2l0aCAiCisiUGFydGVkLiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjExCisjLCBjLWZvcm1hdAorbXNnaWQgIlBhcnRpdGlvbihzKSBvbiAlcyBhcmUgYmVpbmcgdXNlZC4iCittc2dzdHIgIihDw6FjKSBwaMOibiB2w7luZyB0csOqbiAlcyDEkWFuZyDEkcaw4bujYyBkw7luZy4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjMKK21zZ2lkICIiCisiVGhlIGV4aXN0aW5nIGZpbGUgc3lzdGVtIHdpbGwgYmUgZGVzdHJveWVkIGFuZCBhbGwgZGF0YSBvbiB0aGUgcGFydGl0aW9uICIKKyJ3aWxsIGJlIGxvc3QuIERvIHlvdSB3YW50IHRvIGNvbnRpbnVlPyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZXhpc3RpbmcgZGlzayBsYWJlbCBvbiAlcyB3aWxsIGJlIGRlc3Ryb3llZCBhbmQgYWxsIGRhdGEgb24gdGhpcyBkaXNrICIKKyJ3aWxsIGJlIGxvc3QuIERvIHlvdSB3YW50IHRvIGNvbnRpbnVlPyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NDU4IHBhcnRlZC9wYXJ0ZWQuYzo2NTIgcGFydGVkL3BhcnRlZC5jOjEwNDQKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMTI4IHBhcnRlZC9wYXJ0ZWQuYzoxNzcxIHBhcnRlZC9wYXJ0ZWQuYzoxODUyCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTkwMAorbXNnaWQgIlBhcnRpdGlvbiBudW1iZXI/IgorbXNnc3RyICJT4buRIGPhu6dhIHBow6JuIHbDuW5nPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjUwMAorbXNnaWQgIlNvdXJjZSBkZXZpY2U/IgorbXNnc3RyICJUaGnhur90IGLhu4sgbmd14buTbj8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo1MDQKK21zZ2lkICJTb3VyY2UgcGFydGl0aW9uIG51bWJlcj8iCittc2dzdHIgIlPhu5EgY+G7p2EgcGjDom4gdsO5bmcgY+G7p2Egbmd14buTbj8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo1MDkKKyMsIGZ1enp5Cittc2dpZCAiQ2FuJ3QgY29weSBhbiBleHRlbmRlZCBwYXJ0aXRpb24uIgorbXNnc3RyICJLaMO0bmcgc2FvIGNow6lwIMSRxrDhu6NjIHBow6JuIHbDuW5nIG3hu58gcuG7mW5nLiIKKworIzogcGFydGVkL3BhcnRlZC5jOjUxNQorbXNnaWQgIkRlc3RpbmF0aW9uIHBhcnRpdGlvbiBudW1iZXI/IgorbXNnc3RyICJT4buRIGPhu6dhIHBow6JuIHbDuW5nIGPhu6dhIMSRw61jaD8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo2MTUKK21zZ2lkICJOZXcgZGlzayBsYWJlbCB0eXBlPyIKK21zZ3N0ciAiROG6oW5nIG5ow6NuIMSRxKlhIG3hu5tpPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjY1NgorbXNnaWQgIkZpbGUgc3lzdGVtPyIKK21zZ3N0ciAiSOG7hyB0aOG7kW5nIHThuq1wIHRpbj8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo3MDcgcGFydGVkL3BhcnRlZC5jOjg3OAorbXNnaWQgIlBhcnRpdGlvbiB0eXBlPyIKK21zZ3N0ciAiROG6oW5nIHBow6JuIHbDuW5nPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjcxNCBwYXJ0ZWQvcGFydGVkLmM6ODg1IHBhcnRlZC9wYXJ0ZWQuYzoxMTMxCittc2dpZCAiUGFydGl0aW9uIG5hbWU/IgorbXNnc3RyICJUw6puIHBow6JuIHbDuW5nPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjcyMiBwYXJ0ZWQvcGFydGVkLmM6ODk1Cittc2dpZCAiRmlsZSBzeXN0ZW0gdHlwZT8iCittc2dzdHIgIkThuqFuZyBo4buHIHRo4buRbmcgdOG6rXAgdGluPyIKKworIzogcGFydGVkL3BhcnRlZC5jOjcyOSBwYXJ0ZWQvcGFydGVkLmM6ODk3IHBhcnRlZC9wYXJ0ZWQuYzoxMDU5CisjOiBwYXJ0ZWQvcGFydGVkLmM6MTcyNSBwYXJ0ZWQvcGFydGVkLmM6MTc4MAorbXNnaWQgIlN0YXJ0PyIKK21zZ3N0ciAixJDhuqd1PyIKKworIzogcGFydGVkL3BhcnRlZC5jOjczMSBwYXJ0ZWQvcGFydGVkLmM6OTAwIHBhcnRlZC9wYXJ0ZWQuYzoxMDYyCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTcyNyBwYXJ0ZWQvcGFydGVkLmM6MTc4MgorbXNnaWQgIkVuZD8iCittc2dzdHIgIkN14buRaT8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo3NjkgcGFydGVkL3BhcnRlZC5jOjkzOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IHJlcXVlc3RlZCBhIHBhcnRpdGlvbiBmcm9tICVzIHRvICVzLlxuIgorIlRoZSBjbG9zZXN0IGxvY2F0aW9uIHdlIGNhbiBtYW5hZ2UgaXMgJXMgdG8gJXMuICBJcyB0aGlzIHN0aWxsIGFjY2VwdGFibGUgdG8gIgorInlvdT8iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjg5MAorIywgZnV6enkKK21zZ2lkICJBbiBleHRlbmRlZCBwYXJ0aXRpb24gY2Fubm90IGhvbGQgYSBmaWxlIHN5c3RlbS4gIERpZCB5b3Ugd2FudCBta3BhcnQ/IgorbXNnc3RyICJQaMOibiB2w7luZyBt4bufIHLhu5luZyBraMO0bmcgdGjhu4MgY8OzIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4uICBC4bqhbiBtdeG7kW4gbWtwYXJ0PyIKKworIzogcGFydGVkL3BhcnRlZC5jOjEwNTAKKyMsIGZ1enp5Cittc2dpZCAiQ2FuJ3QgbW92ZSBhbiBleHRlbmRlZCBwYXJ0aXRpb24uIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgZGkgY2h1eeG7g24gY8OhYyBwaMOibiB2w7luZyBt4bufIHLhu5luZy4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMDc5Cittc2dpZCAiQ2FuJ3QgbW92ZSBhIHBhcnRpdGlvbiBvbnRvIGl0c2VsZi4gIFRyeSB1c2luZyByZXNpemUsIHBlcmhhcHM/IgorbXNnc3RyICIiCisiS2jDtG5nIHRo4buDIGRpIGNodXnhu4NuIG3hu5l0IHBow6JuIHbDuW5nIGzDqm4gY2jDrW5oIG7Dsy4gIEPDsyB0aOG7gywgaMOjeSB0aOG7rSB0aGF5IMSR4buVaSAiCisia8OtY2ggdGjGsOG7m2M/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIyNworIywgYy1mb3JtYXQKK21zZ2lkICJNaW5vcjogJWRcbiIKK21zZ3N0ciAiU+G7kSBuaOG7jzogJWRcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMjgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkZsYWdzOiAlc1xuIgorbXNnc3RyICJD4budOiAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGUgU3lzdGVtOiAlc1xuIgorbXNnc3RyICJI4buHIHRo4buRbmcgdOG6rXAgdGluOiAlc1xuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIzMAorIywgZnV6enkKK21zZ2lkICJTaXplOiAgICAgICAgICIKK21zZ3N0ciAiS8OtY2h0aMaw4bubYzogICAgICAgICAlMTAuM2ZNYiAoJWQlJSlcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMzUKKyMsIGZ1enp5Cittc2dpZCAiTWluaW11bSBzaXplOiAiCittc2dzdHIgIkvDrWNoIHRoxrDhu5tjIG5o4buPIG5o4bqldDogJTEwLjNmTWIgKCVkJSUpXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjM4CisjLCBmdXp6eQorbXNnaWQgIk1heGltdW0gc2l6ZTogIgorbXNnc3RyICJLw61jaCB0aMaw4bubYyBs4bubbiBuaOG6pXQ6ICUxMC4zZk1iICglZCUlKVxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJNb2RlbDogJXMgKCVzKVxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMzY0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJEaXNrICVzOiAlc1xuIgorbXNnc3RyICIlcyAgJXMgICVzIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTM2NQorIywgYy1mb3JtYXQKK21zZ2lkICJTZWN0b3Igc2l6ZSAobG9naWNhbC9waHlzaWNhbCk6ICVsbGRCLyVsbGRCXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEzODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQklPUyBjeWxpbmRlcixoZWFkLHNlY3RvciBnZW9tZXRyeTogJWQsJWQsJWQuICBFYWNoIGN5bGluZGVyIGlzICVzLlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMzkyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJQYXJ0aXRpb24gVGFibGU6ICVzXG4iCittc2dzdHIgIlTDqm4gcGjDom4gdsO5bmc/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQwNiBwYXJ0ZWQvcGFydGVkLmM6MTQwOQorbXNnaWQgIk51bWJlciIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQwNiBwYXJ0ZWQvcGFydGVkLmM6MTQwOQorIywgZnV6enkKK21zZ2lkICJTdGFydCIKK21zZ3N0ciAixJDhuqd1PyIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MDcgcGFydGVkL3BhcnRlZC5jOjE0MTAKKyMsIGZ1enp5Cittc2dpZCAiRW5kIgorbXNnc3RyICJDdeG7kWk/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQxMAorIywgZnV6enkKK21zZ2lkICJTaXplIgorbXNnc3RyICJyZXNpemUiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDE0Cittc2dpZCAiVHlwZSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQxNgorIywgZnV6enkKK21zZ2lkICJGaWxlIHN5c3RlbSIKK21zZ3N0ciAiSOG7hyB0aOG7kW5nIHThuq1wIHRpbj8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDE5CisjLCBmdXp6eQorbXNnaWQgIk5hbWUiCittc2dzdHIgIm5hbWUiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDIxCittc2dpZCAiRmxhZ3MiCittc2dzdHIgIkPhu50iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDc3Cittc2dpZCAiRnJlZSBTcGFjZSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTYyNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIkEgJXMgJXMgcGFydGl0aW9uIHdhcyBmb3VuZCBhdCAlcyAtPiAlcy4gIERvIHlvdSB3YW50IHRvIGFkZCBpdCB0byB0aGUgIgorInBhcnRpdGlvbiB0YWJsZT8iCittc2dzdHIgIiIKKyJUw6xtIHRo4bqleSBt4buZdCBwaMOibiB2w7luZyAlcyAlcyB04bqhaSAlLjNmTWIgLT4gJS4zZk1iLiAgVGjDqm0gbsOzIHbDoG8gYuG6o25nIHBow6JuICIKKyJ2w7luZz8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNjYzCittc2dpZCAic2VhcmNoaW5nIGZvciBmaWxlIHN5c3RlbXMiCittc2dzdHIgInTDrG0ga2nhur9tIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxODc3Cittc2dpZCAiTmV3IGRldmljZT8iCittc2dzdHIgIlRoaeG6v3QgYuG7iyBt4bubaT8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxOTAyCisjLCBmdXp6eQorbXNnaWQgIkZsYWcgdG8gSW52ZXJ0PyIKK21zZ3N0ciAiQ+G7nSDEkeG7gyB0aGF5IMSR4buVaT8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxOTA3Cittc2dpZCAiTmV3IHN0YXRlPyIKK21zZ3N0ciAiVHLhuqFuZyB0aMOhaSBt4bubaT8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxOTQ0Cittc2dpZCAiVW5pdD8iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIwOTMKK21zZ2lkICJjaGVjayIKK21zZ3N0ciAiY2hlY2siCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMDk2CisjLCBmdXp6eQorbXNnaWQgIiIKKyJjaGVjayBOVU1CRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIGEgc2ltcGxlIGNoZWNrIG9uIHRoZSBmaWxlIHN5c3RlbSIKK21zZ3N0ciAiIgorImNoZWNrIE1JTk9SICAgICAgICAgICAgICAgICAgIHRo4buxYyBoaeG7h24gbeG7mXQga2nhu4NtIHRyYSDEkcahbiBnaeG6o24gdHLDqm4gaOG7hyB0aOG7kW5nICIKKyJ04bqtcCB0aW4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTAyCittc2dpZCAiY3AiCittc2dzdHIgImNwIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEwNQorIywgZnV6enkKK21zZ2lkICIiCisiY3AgW0ZST00tREVWSUNFXSBGUk9NLU5VTUJFUiBUTy1OVU1CRVIgICBjb3B5IGZpbGUgc3lzdGVtIHRvIGFub3RoZXIgIgorInBhcnRpdGlvbiIKK21zZ3N0ciAiIgorImNwIFtGUk9NLURFVklDRV0gRlJPTS1NSU5PUiBUTy1NSU5PUiAgICAgIHNhbyBjaMOpcCBo4buHIHRo4buRbmcgdOG6rXAgdGluIHThu5tpIHBow6JuICIKKyJ2w7luZyBraMOhYyIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMTEKK21zZ2lkICJoZWxwIgorbXNnc3RyICJoZWxwIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjExNAorIywgZnV6enkKK21zZ2lkICIiCisiaGVscCBbQ09NTUFORF0gICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCBnZW5lcmFsIGhlbHAsIG9yIGhlbHAgb24gIgorIkNPTU1BTkQiCittc2dzdHIgIiIKKyJoZWxwIFtDT01NQU5EXSAgICAgICAgICAgICAgICBpbiB0cuG7oyBnacO6cCBjaHVuZywgaG/hurdjIHRy4bujIGdpw7pwIHRyw6puIGPDonUgbOG7h25oICIKKyJDT01NQU5EIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEyMAorbXNnaWQgIm1rbGFiZWwiCittc2dzdHIgIm1rbGFiZWwiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTIwCisjLCBmdXp6eQorbXNnaWQgIm1rdGFibGUiCittc2dzdHIgIm1rbGFiZWwiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTIzCisjLCBmdXp6eQorbXNnaWQgIiIKKyJta2xhYmVsLG1rdGFibGUgTEFCRUwtVFlQRSAgICAgICAgICAgICAgIGNyZWF0ZSBhIG5ldyBkaXNrbGFiZWwgKHBhcnRpdGlvbiAiCisidGFibGUpIgorbXNnc3RyICJta2xhYmVsIExBQkVMLVRZUEUgICAgICAgICAgICB04bqhbyBt4buZdCBuaMOjbiDEkcSpYSBt4bubaSAoYuG6o25nIHBow6JuIHbDuW5nKSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMjkKK21zZ2lkICJta2ZzIgorbXNnc3RyICJta2ZzIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEzMgorIywgZnV6enkKK21zZ2lkICIiCisibWtmcyBOVU1CRVIgRlMtVFlQRSAgICAgICAgICAgICAgICAgICAgICBtYWtlIGEgRlMtVFlQRSBmaWxlIHN5c3RlbSBvbiAiCisicGFydGl0aXRvbiBOVU1CRVIiCittc2dzdHIgIiIKKyJta2ZzIE1JTk9SIEZTLVRZUEUgICAgICAgICAgICB04bqhbyBt4buZdCBo4buHIHRo4buRbmcgdOG6rXAgdGluIGThuqFuZyBGUy1UWVBFIHRyw6puICIKKyJwaMOibiB2w7luZyBNSU5PUiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMzgKK21zZ2lkICJta3BhcnQiCittc2dzdHIgIm1rcGFydCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNDEKKyMsIGZ1enp5Cittc2dpZCAibWtwYXJ0IFBBUlQtVFlQRSBbRlMtVFlQRV0gU1RBUlQgRU5EICAgICBtYWtlIGEgcGFydGl0aW9uIgorbXNnc3RyICJta3BhcnQgUEFSVC1UWVBFIFtGUy1UWVBFXSBTVEFSVCBFTkQgICAgICB04bqhbyBt4buZdCBwaMOibiB2w7luZyIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNDcKKyMsIGZ1enp5Cittc2dpZCAiIgorIidta3BhcnQnIG1ha2VzIGEgcGFydGl0aW9uIHdpdGhvdXQgY3JlYXRpbmcgYSBuZXcgZmlsZSBzeXN0ZW0gb24gdGhlICIKKyJwYXJ0aXRpb24uICBGUy1UWVBFIG1heSBiZSBzcGVjaWZpZWQgdG8gc2V0IGFuIGFwcHJvcHJpYXRlIHBhcnRpdGlvbiBJRC5cbiIKK21zZ3N0ciAiIgorIm1rcGFydCB04bqhbyBt4buZdCBwaMOibiB2w7luZyB2w6Aga2jDtG5nIHThuqFvIG3hu5l0IGjhu4cgdGjhu5FuZyB04bqtcCB0aW4gbeG7m2kgdHLDqm4gcGjDom4gIgorInbDuW5nIMSRw7MuICBDw7MgdGjhu4MgY2jhu4kgcmEgRlMtVFlQRSDEkeG7gyDEkeG6t3QgbeG7mXQgSUQgcGjDom4gdsO5bmcgdGjDrWNoIGjhu6NwLlxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE1MgorbXNnaWQgIm1rcGFydGZzIgorbXNnc3RyICJta3BhcnRmcyIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNTUKKyMsIGZ1enp5Cittc2dpZCAiIgorIm1rcGFydGZzIFBBUlQtVFlQRSBGUy1UWVBFIFNUQVJUIEVORCAgICAgbWFrZSBhIHBhcnRpdGlvbiB3aXRoIGEgZmlsZSBzeXN0ZW0iCittc2dzdHIgIiIKKyJta3BhcnRmcyBQQVJULVRZUEUgRlMtVFlQRSBTVEFSVCBFTkQgICAgICB04bqhbyBt4buZdCBwaMOibiB2w7luZyB24bubaSBt4buZdCBo4buHIHRo4buRbmcgIgorInThuq1wIHRpbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNjEKK21zZ2lkICJtb3ZlIgorbXNnc3RyICJtb3ZlIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE2NAorIywgZnV6enkKK21zZ2lkICJtb3ZlIE5VTUJFUiBTVEFSVCBFTkQgICAgICAgICAgICAgICAgICAgIG1vdmUgcGFydGl0aW9uIE5VTUJFUiIKK21zZ3N0ciAibW92ZSBNSU5PUiBTVEFSVCBFTkQgICAgICAgICAgZGkgY2h1eeG7g24gcGjDom4gdsO5bmcgTUlOT1IiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTY5Cittc2dpZCAibmFtZSIKK21zZ3N0ciAibmFtZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNzIKKyMsIGZ1enp5Cittc2dpZCAibmFtZSBOVU1CRVIgTkFNRSAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lIHBhcnRpdGlvbiBOVU1CRVIgYXMgTkFNRSIKK21zZ3N0ciAibmFtZSBNSU5PUiBOQU1FICAgICAgICAgICAgICAgxJHhurd0IHTDqm4gcGjDom4gdsO5bmcgTUlOT1IgYuG6sW5nIHTDqm4gTkFNRSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNzcKK21zZ2lkICJwcmludCIKK21zZ3N0ciAicHJpbnQiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTgwCittc2dpZCAiIgorInByaW50IFtkZXZpY2VzfGZyZWV8bGlzdCxhbGx8TlVNQkVSXSAgICAgZGlzcGxheSB0aGUgcGFydGl0aW9uIHRhYmxlLCAiCisiYXZhaWxhYmxlIGRldmljZXMsIGZyZWUgc3BhY2UsIGFsbCBmb3VuZCBwYXJ0aXRpb25zLCBvciBhIHBhcnRpY3VsYXIgIgorInBhcnRpdGlvbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE4NQorbXNnaWQgIiIKKyJXaXRob3V0IGFyZ3VtZW50cywgJ3ByaW50JyBkaXNwbGF5cyB0aGUgZW50aXJlIHBhcnRpdGlvbiB0YWJsZS4gSG93ZXZlciB3aXRoICIKKyJ0aGUgZm9sbG93aW5nIGFyZ3VtZW50cyBpdCBwZXJmb3JtcyB2YXJpb3VzIG90aGVyIGFjdGlvbnMuXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxODcKK21zZ2lkICIgIGRldmljZXMgICA6IGRpc3BsYXkgYWxsIGFjdGl2ZSBibG9jayBkZXZpY2VzXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxODgKK21zZ2lkICIiCisiICBmcmVlICAgICAgOiBkaXNwbGF5IGluZm9ybWF0aW9uIGFib3V0IGZyZWUgdW5wYXJ0aXRpb25lZCBzcGFjZSBvbiB0aGUgIgorImN1cnJlbnQgYmxvY2sgZGV2aWNlXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxOTAKKyMsIGZ1enp5Cittc2dpZCAiIgorIiAgbGlzdCwgYWxsIDogZGlzcGxheSB0aGUgcGFydGl0aW9uIHRhYmxlcyBvZiBhbGwgYWN0aXZlIGJsb2NrIGRldmljZXNcbiIKK21zZ3N0ciAiIgorInByaW50IFtNSU5PUl0gICAgICAgICAgICAgICAgIGhp4buDbiB0aOG7iyBi4bqjbmcgcGjDom4gdsO5bmcsIGhv4bq3YyBt4buZdCBwaMOibiB2w7luZyIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxOTEKK21zZ2lkICIiCisiICBOVU1CRVIgICAgOiBkaXNwbGF5IG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBwYXJ0aWN1bGFyICIKKyJwYXJ0aXRpb25cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE5NgorbXNnaWQgInF1aXQiCittc2dzdHIgInF1aXQiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTk5CisjLCBmdXp6eQorbXNnaWQgInF1aXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCBwcm9ncmFtIgorbXNnc3RyICJxdWl0ICAgICAgICAgICAgICAgICAgICAgICAgICB0aG/DoXQga2jhu49pIGNoxrDGoW5nIHRyw6xuaCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMDQKK21zZ2lkICJyZXNjdWUiCittc2dzdHIgInJlc2N1ZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMDcKKyMsIGZ1enp5Cittc2dpZCAiIgorInJlc2N1ZSBTVEFSVCBFTkQgICAgICAgICAgICAgICAgICAgICAgICAgcmVzY3VlIGEgbG9zdCBwYXJ0aXRpb24gbmVhciBTVEFSVCAiCisiYW5kIEVORCIKK21zZ3N0ciAiIgorInJlc2N1ZSBTVEFSVCBFTkQgICAgICAgICAgICAgIHBo4bulYyBo4buTaSBt4buZdCBwaMOibiB2w7luZyDEkcOjIG3huqV0IGPhuqFuaCDEkeG6p3UgU1RBUlQgIgorInbDoCBjdeG7kWkgRU5EIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIxMworbXNnaWQgInJlc2l6ZSIKK21zZ3N0ciAicmVzaXplIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIxNgorIywgZnV6enkKK21zZ2lkICIiCisicmVzaXplIE5VTUJFUiBTVEFSVCBFTkQgICAgICAgICAgICAgICAgICByZXNpemUgcGFydGl0aW9uIE5VTUJFUiBhbmQgaXRzICIKKyJmaWxlIHN5c3RlbSIKK21zZ3N0ciAiIgorInJlc2N1ZSBTVEFSVCBFTkQgICAgICAgICAgICAgIHBo4bulYyBo4buTaSBt4buZdCBwaMOibiB2w7luZyDEkcOjIG3huqV0IGPhuqFuaCDEkeG6p3UgU1RBUlQgIgorInbDoCBjdeG7kWkgRU5EIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIyNAorbXNnaWQgInJtIgorbXNnc3RyICJybSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMjcKKyMsIGZ1enp5Cittc2dpZCAicm0gTlVNQkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcGFydGl0aW9uIE5VTUJFUiIKK21zZ3N0ciAicm0gTUlOT1IgICAgICAgICAgICAgICAgICAgICAgeMOzYSBi4buPIHBow6JuIHbDuW5nIE1JTk9SIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIzMgorbXNnaWQgInNlbGVjdCIKK21zZ3N0ciAic2VsZWN0IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIzNQorIywgZnV6enkKK21zZ2lkICJzZWxlY3QgREVWSUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNob29zZSB0aGUgZGV2aWNlIHRvIGVkaXQiCittc2dzdHIgInNlbGVjdCBERVZJQ0UgICAgICAgICAgICAgICAgIGNo4buNbiB0aGnhur90IGLhu4sgxJHhu4MgdGjhu7FjIGhp4buHbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNDAKK21zZ2lkICJzZXQiCittc2dzdHIgInNldCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNDMKKyMsIGZ1enp5Cittc2dpZCAiIgorInNldCBOVU1CRVIgRkxBRyBTVEFURSAgICAgICAgICAgICAgICAgICAgY2hhbmdlIHRoZSBGTEFHIG9uIHBhcnRpdGlvbiBOVU1CRVIiCittc2dzdHIgInNldCBNSU5PUiBGTEFHIFNUQVRFICAgICAgICAgIHRoYXkgxJHhu5VpIGPhu50gdHLDqm4gcGjDom4gdsO5bmcgTUlOT1IiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjQ5Cittc2dpZCAidG9nZ2xlIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjUyCittc2dpZCAiIgorInRvZ2dsZSBbTlVNQkVSIFtGTEFHXV0gICAgICAgICAgICAgICAgICAgdG9nZ2xlIHRoZSBzdGF0ZSBvZiBGTEFHIG9uICIKKyJwYXJ0aXRpb24gTlVNQkVSIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjU4CisjLCBmdXp6eQorbXNnaWQgInVuaXQiCittc2dzdHIgInF1aXQiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjYxCisjLCBmdXp6eQorbXNnaWQgInVuaXQgVU5JVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0IHRoZSBkZWZhdWx0IHVuaXQgdG8gVU5JVCIKK21zZ3N0ciAicXVpdCAgICAgICAgICAgICAgICAgICAgICAgICAgdGhvw6F0IGto4buPaSBjaMawxqFuZyB0csOsbmgiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjY2Cittc2dpZCAidmVyc2lvbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI2OQorbXNnaWQgIiIKKyJ2ZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXkgdGhlIHZlcnNpb24gbnVtYmVyIGFuZCAiCisiY29weXJpZ2h0IGluZm9ybWF0aW9uIG9mIEdOVSBQYXJ0ZWQiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNzMKK21zZ2lkICIiCisiJ3ZlcnNpb24nIGRpc3BsYXlzIGNvcHlyaWdodCBhbmQgdmVyc2lvbiBpbmZvcm1hdGlvbiBjb3JyZXNwb25kaW5nIHRvIHRoaXMgIgorImNvcHkgb2YgR05VIFBhcnRlZFxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMzM1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLWhsbXN2XSBbREVWSUNFIFtDT01NQU5EIFtQQVJBTUVURVJTXV0uLi5dXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIzNzkKK21zZ2lkICJObyBkZXZpY2UgZm91bmQiCittc2dzdHIgIktow7RuZyB0w6xtIHRo4bqleSB0aGnhur90IGLhu4sgbsOgbyIKKworIzogcGFydGVkL3BhcnRlZC5jOjI0MTIKK21zZ2lkICJXQVJOSU5HOiBZb3UgYXJlIG5vdCBzdXBlcnVzZXIuICBXYXRjaCBvdXQgZm9yIHBlcm1pc3Npb25zLiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjQ1MAorIywgZnV6enkKK21zZ2lkICJZb3UgbWF5IG5lZWQgdG8gdXBkYXRlIC9ldGMvZnN0YWIuXG4iCittc2dzdHIgIsSQ4burbmcgcXXDqm4gY+G6rXAgbmjhuq10IC9ldGMvZnN0YWIsIG7hur91IGPhuqduIHRoaeG6v3QuXG4iCisKKyM6IHBhcnRlZC91aS5jOjE2MAorbXNnaWQgIldlbGNvbWUgdG8gR05VIFBhcnRlZCEgVHlwZSAnaGVscCcgdG8gdmlldyBhIGxpc3Qgb2YgY29tbWFuZHMuXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6MTYzCisjLCBmdXp6eQorbXNnaWQgIiIKKyJVc2FnZTogcGFydGVkIFtPUFRJT05dLi4uIFtERVZJQ0UgW0NPTU1BTkQgW1BBUkFNRVRFUlNdLi4uXS4uLl1cbiIKKyJBcHBseSBDT01NQU5EcyB3aXRoIFBBUkFNRVRFUlMgdG8gREVWSUNFLiAgSWYgbm8gQ09NTUFORChzKSBhcmUgZ2l2ZW4sIHJ1biAiCisiaW5cbiIKKyJpbnRlcmFjdGl2ZSBtb2RlLlxuIgorbXNnc3RyICIiCisiU+G7rSBk4bulbmc6IHBhcnRlZCBbT1BUSU9OXS4uLiBbREVWSUNFIFtDT01NQU5EIFtQQVJBTUVURVJTXS4uLl0uLi5dXG4iCisiw4FwIGThu6VuZyBjw6FjIGPDonUgbOG7h25oIENPTU1BTkQgduG7m2kgY8OhYyB0aGFtIHPhu5EgUEFSQU1FVEVSUyB04bubaSB0aGnhur90IGLhu4sgIgorIkRFVklDRS4gIE7hur91XG4iCisia2jDtG5nIGPDsyBjw6J1IGzhu4duaCBDT01NQU5EIG7DoG8gY2jhuqF5IHRyb25nIGNo4bq/IMSR4buZIGjhu49pIMSRw6FwLlxuIgorCisjOiBwYXJ0ZWQvdWkuYzoxNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlxuIgorIllvdSBmb3VuZCBhIGJ1ZyBpbiBHTlUgUGFydGVkISBIZXJlJ3Mgd2hhdCB5b3UgaGF2ZSB0byBkbzpcbiIKKyJcbiIKKyJEb24ndCBwYW5pYyEgVGhlIGJ1ZyBoYXMgbW9zdCBsaWtlbHkgbm90IGFmZmVjdGVkIGFueSBvZiB5b3VyIGRhdGEuXG4iCisiSGVscCB1cyB0byBmaXggdGhpcyBidWcgYnkgZG9pbmcgdGhlIGZvbGxvd2luZzpcbiIKKyJcbiIKKyJDaGVjayB3aGV0aGVyIHRoZSBidWcgaGFzIGFscmVhZHkgYmVlbiBmaXhlZCBieSBjaGVja2luZ1xuIgorInRoZSBsYXN0IHZlcnNpb24gb2YgR05VIFBhcnRlZCB0aGF0IHlvdSBjYW4gZmluZCBhdDpcbiIKKyJcbiIKKyJcdGh0dHA6Ly9mdHAuZ251Lm9yZy9nbnUvcGFydGVkL1xuIgorIlxuIgorIlBsZWFzZSBjaGVjayB0aGlzIHZlcnNpb24gcHJpb3IgdG8gYnVnIHJlcG9ydGluZy5cbiIKKyJcbiIKKyJJZiB0aGlzIGhhcyBub3QgYmVlbiBmaXhlZCB5ZXQgb3IgaWYgeW91IGRvbid0IGtub3cgaG93IHRvIGNoZWNrLFxuIgorInBsZWFzZSB2aXNpdCB0aGUgR05VIFBhcnRlZCB3ZWJzaXRlOlxuIgorIlxuIgorIlx0aHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3BhcnRlZFxuIgorIlxuIgorImZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLlxuIgorIlxuIgorIllvdXIgcmVwb3J0IHNob3VsZCBjb250YWluIHRoZSB2ZXJzaW9uIG9mIHRoaXMgcmVsZWFzZSAoJXMpXG4iCisiYWxvbmcgd2l0aCB0aGUgZXJyb3IgbWVzc2FnZSBiZWxvdywgdGhlIG91dHB1dCBvZlxuIgorIlxuIgorIlx0cGFydGVkIERFVklDRSB1bml0IGNvIHByaW50IHVuaXQgcyBwcmludFxuIgorIlxuIgorImFuZCB0aGUgZm9sbG93aW5nIGhpc3Rvcnkgb2YgY29tbWFuZHMgeW91IGVudGVyZWQuXG4iCisiQWxzbyBpbmNsdWRlIGFueSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHlvdXIgc2V0dXAgeW91XG4iCisiY29uc2lkZXIgaW1wb3J0YW50LlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjI4NAorbXNnaWQgIiIKKyJcbiIKKyJDb21tYW5kIEhpc3Rvcnk6XG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6MzY2Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBTRUdWX01BUEVSUiAoQWRkcmVzcyBub3QgbWFwcGVkIHRvIG9iamVjdClcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzozNzIKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IFNFR1ZfQUNDRVJSIChJbnZhbGlkIHBlcm1pc3Npb25zIGZvciBtYXBwZWQgb2JqZWN0KVxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjM3NworbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogQSBnZW5lcmFsIFNJR1NFR1Ygc2lnbmFsIHdhcyBlbmNvdW50ZXJlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0MTAKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9JTlRESVYgKEludGVnZXI6IGRpdmlkZSBieSB6ZXJvKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0MTUKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9JTlRPVkYgKEludGVnZXI6IG92ZXJmbG93KSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0MjAKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRESVYgKEZsb2F0OiBkaXZpZGUgYnkgemVybykiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDI1Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxUT1ZGIChGbG9hdDogb3ZlcmZsb3cpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQzMAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0ZMVFVORCAoRmxvYXQ6IHVuZGVyZmxvdykiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDM1Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxUUkVTIChGbG9hdDogaW5leGFjdCByZXN1bHQpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQ0MAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0ZMVElOViAoRmxvYXQ6IGludmFsaWQgb3BlcmF0aW9uKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0NDUKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRTVUIgKEZsb2F0OiBzdWJzY3JpcHQgb3V0IG9mIHJhbmdlKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0NTAKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEEgZ2VuZXJhbCBTSUdGUEUgc2lnbmFsIHdhcyBlbmNvdW50ZXJlZC4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDgzCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfSUxMT1BDIChJbGxlZ2FsIE9wY29kZSkiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDg4Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfSUxMT1BOIChJbGxlZ2FsIE9wZXJhbmQpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQ5MworbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX0lMTEFEUiAoSWxsZWdhbCBhZGRyZXNzaW5nIG1vZGUpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQ5OAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX0lMTFRSUCAoSWxsZWdhbCBUcmFwKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo1MDMKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9QUlZPUEMgKFByaXZpbGVnZWQgT3Bjb2RlKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo1MDgKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9QUlZSRUcgKFByaXZpbGVnZWQgUmVnaXN0ZXIpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjUxMworbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX0NPUFJPQyAoQ29wcm9jZXNzb3IgRXJyb3IpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjUxOAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX0JBRFNUSyAoSW50ZXJuYWwgU3RhY2sgRXJyb3IpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjUyMworbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogQSBnZW5lcmFsIFNJR0lMTCBzaWduYWwgd2FzIGVuY291bnRlcmVkLiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzoxMDI0Cittc2dpZCAiRXhwZWN0aW5nIGEgcGFydGl0aW9uIG51bWJlci4iCittc2dzdHIgIk1vbmcgxJHhu6NpIG3hu5l0IHPhu5EgY+G7p2EgcGjDom4gdsO5bmcuIgorCisjOiBwYXJ0ZWQvdWkuYzoxMDMzCittc2dpZCAiUGFydGl0aW9uIGRvZXNuJ3QgZXhpc3QuIgorbXNnc3RyICJQaMOibiB2w7luZyBraMO0bmcgdOG7k24gdOG6oWkuIgorCisjOiBwYXJ0ZWQvdWkuYzoxMDUzCittc2dpZCAiRXhwZWN0aW5nIGEgZmlsZSBzeXN0ZW0gdHlwZS4iCittc2dzdHIgIk1vbmcgxJHhu6NpIG3hu5l0IGThuqFuZyBo4buHIHRo4buRbmcgdOG6rXAgdGluLiIKKworIzogcGFydGVkL3VpLmM6MTA2MAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIGZpbGUgc3lzdGVtIHR5cGUgXCIlc1wiLiIKK21zZ3N0ciAiROG6oW5nIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4ga2jDtG5nIHLDtSBcIiVzXCIuIgorCisjOiBwYXJ0ZWQvdWkuYzoxMDgwCittc2dpZCAiRXhwZWN0aW5nIGEgZGlzayBsYWJlbCB0eXBlLiIKK21zZ3N0ciAiTW9uZyDEkeG7o2kgbeG7mXQgZOG6oW5nIG5ow6NuIMSRxKlhLiIKKworIzogcGFydGVkL3VpLmM6MTE3OAorbXNnaWQgIkNhbid0IGNyZWF0ZSBhbnkgbW9yZSBwYXJ0aXRpb25zLiIKK21zZ3N0ciAiS2jDtG5nIHThuqFvIMSRxrDhu6NjIHRow6ptIHBow6JuIHbDuW5nIG7hu69hLiIKKworIzogcGFydGVkL3VpLmM6MTE4OAorbXNnaWQgIkV4cGVjdGluZyBhIHBhcnRpdGlvbiB0eXBlLiIKK21zZ3N0ciAiTW9uZyDEkeG7o2kgbeG7mXQgZOG6oW5nIHBow6JuIHbDuW5nLiIKKworIzogcGFydGVkL3VpLmM6MTMxNQorbXNnaWQgIm9uIgorbXNnc3RyICJi4bqtdCIKKworIzogcGFydGVkL3VpLmM6MTMxNgorbXNnaWQgIm9mZiIKK21zZ3N0ciAidOG6r3QiCisKKyM6IHBhcnRlZC91aS5jOjE0MzEKK21zZ2lkICJPUFRJT05zOiIKK21zZ3N0ciAiVMOZWSBDSOG7jE46IgorCisjOiBwYXJ0ZWQvdWkuYzoxNDM2Cittc2dpZCAiQ09NTUFORHM6IgorbXNnc3RyICJDw4JVIEzhu4ZOSDoiCisKKyM6IHBhcnRlZC91aS5jOjE0NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNpbmcgJXNcbiIKK21zZ3N0ciAiU+G7rSBk4bulbmcgJXNcbiIKKworIzogcGFydGVkL3VpLmM6MTUxOQorbXNnaWQgIlRoaXMgY29tbWFuZCBkb2VzIG5vdCBtYWtlIHNlbnNlIGluIG5vbi1pbnRlcmFjdGl2ZSBtb2RlLlxuIgorbXNnc3RyICIiCisKKyN+IG1zZ2lkICJ3aGVyZSBuZWNlc3NhcnksIHByb21wdHMgZm9yIHVzZXIgaW50ZXJ2ZW50aW9uIgorI34gbXNnc3RyICJraGkgY+G6p24gdGhp4bq/dCwgaOG7j2kgbmfGsOG7nWkgZMO5bmcgdGhhbyB0w6FjIGPhuqduIGzDoG0iCisKKyMsIGZ1enp5CisjfiBtc2dpZCAiIgorI34gIldpdGhvdXQgYXJndW1lbnRzLCBwcmludCBkaXNwbGF5cyB0aGUgZW50aXJlIHBhcnRpdGlvbiB0YWJsZS4gV2l0aCAiCisjfiAiJ2ZyZWUnXG4iCisjfiAiYXJndW1lbnQsIGluZm9ybWF0aW9uIGFib3V0IGZyZWUgc3BhY2Ugd2lsbCBiZSBkaXNwbGF5ZWQgb3RoZXJ3aXNlIGlmIGFcbiIKKyN+ICJwYXJ0aXRpb24gbnVtYmVyIGlzIGdpdmVuLCB0aGVuIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gaXMgZGlzcGxheWVkXG4iCisjfiAiYWJvdXQgdGhhdCBwYXJ0aXRpb24uIElmIHRoZSAnYWxsJyBhcmd1bWVudCBpcyBwYXNzZWQgaW5zdGVhZCwgcGFydGl0aW9uXG4iCisjfiAiaW5mb3JtYXRpb24gZm9yIGFsbCBkZXZpY2VzIHdpbGwgYmUgZGlzcGxheWVkLlxuIgorI34gbXNnc3RyICIiCisjfiAiS2hpIGtow7RuZyBjw7MgdGhhbSBz4buRLCBwcmludCBoaeG7g24gdGjhu4sgdG/DoG4gYuG7mSBi4bqjbmcgcGjDom4gdsO5bmcuICBO4bq/dSDEkcawYVxuIgorI34gInJhIHPhu5EgY+G7p2EgYuG6o25nIHBow6JuIHbDuW5nLCB0aMOsIGhp4buDbiB0aOG7iyB0aMO0bmcgdGluIGNoaSB0aeG6v3QgaMahbiB24buBIHBow6JuICIKKyN+ICJ2w7luZ1xuIgorI34gIsSRw7MuXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiVGhlIHNlY3RvciBzaXplIG9uICVzIGlzICVkIGJ5dGVzLiAgUGFydGVkIGlzIGtub3duIG5vdCB0byB3b3JrIHByb3Blcmx5ICIKKyN+ICJ3aXRoIGRyaXZlcyB3aXRoIHNlY3RvciBzaXplcyBvdGhlciB0aGFuICVkIGJ5dGVzIgorI34gbXNnc3RyICIiCisjfiAiS8OtY2ggdGjGsOG7m2Mgc2VjdG9yIHRyw6puICVzIGzDoCAlZCBieXRlLiAgUGFydGVkIGtow7RuZyBsw6BtIHZp4buHYyBjaMOtbmggeMOhYyAiCisjfiAixJHGsOG7o2MgduG7m2kgY8OhYyDhu5UgY8OzIGvDrWNoIHRoxrDhu5tjIHNlY3RvciBraMO0bmcgcGjhuqNpICVkIGJ5dGUiCisKKyN+IG1zZ2lkICJDb3VsZCBub3QgcmVhZCBnZW9tZXRyeSBvZiAlcyAtICVzLiIKKyN+IG1zZ3N0ciAiS2jDtG5nIMSR4buNYyDEkcaw4bujYyBj4bqldSB0csO6YyBow6xuaCBo4buNYyBj4bunYSAlcyAtICVzLiIKKworI34gbXNnaWQgIkRldmljZSAlcyBoYXMgZG9kZ2V5IGdlb21ldHJ5LiIKKyN+IG1zZ3N0ciAiVGhp4bq/dCBi4buLICVzIGPDsyBj4bqldSB0csO6YyBow6xuaCBo4buNYyBraMOzIGhp4buDdS4iCisKKyN+IG1zZ2lkICJJREUiCisjfiBtc2dzdHIgIklERSIKKworI34gbXNnaWQgIlNDU0kiCisjfiBtc2dzdHIgIlNDU0kiCisKKyN+IG1zZ2lkICJEZXZpY2UgJXMgaXMgbmVpdGhlciBhIFNDU0kgbm9yIElERSBkcml2ZS4iCisjfiBtc2dzdHIgIlRoaeG6v3QgYuG7iyAlcyBraMO0bmcgcGjhuqNpIGzDoCBt4buZdCDhu5UgU0NTSSBoYXkgSURFLiIKKworI34gbXNnaWQgIkVycm9yIHJlYWRpbmcgJXMgKCVzKSB0byBkZXRlcm1pbmUgaWYgcGFydGl0aW9uIGlzIG1vdW50ZWQuIgorI34gbXNnc3RyICJM4buXaSDEkeG7jWMgJXMgKCVzKSDEkeG7gyB4ZW0gxJHDoyBn4bqvbiBwaMOibiB2w7luZyBoYXkgY2jGsGEuIgorCisjfiBtc2dpZCAiIgorI34gIlVuYWJsZSB0byBkZXRlcm1pbmUgaWYgcGFydGl0aW9ucyBhcmUgbW91bnRlZCB2aWEgL3Byb2MvbW91bnRzIG9yIC9ldGMvIgorI34gIm10YWIuICBNYWtlIHN1cmUgeW91IGRvbid0IGF0dGVtcHQgdG8gcmVzaXplIG9yIG1vZGlmeSBtb3VudGVkIGZpbGUgIgorI34gInN5c3RlbXMuICAoRXZlbiByZWFkLW9ubHkgbW91bnRlZCkiCisjfiBtc2dzdHIgIiIKKyN+ICJLaMO0bmcgbmjhuq1uIHJhIMSRxrDhu6NjIGPDoWMgcGjDom4gdsO5bmcgxJHDoyBn4bqvbiBxdWEgL3Byb2MvbW91bnRzIGhheSAvZXRjLyBtdGFiICIKKyN+ICJoYXkgY2jGsGEuICBD4bqnbiBraeG7g20gdHJhIGzhuqFpIMSR4buDIGNo4bqvYyBjaOG6r24gbMOgIGtow7RuZyB0aGF5IMSR4buVaSBrw61jaCB0aMaw4bubYyBoYXkgIgorI34gInPhu61hIMSR4buVaSBj4bunYSBo4buHIHRo4buRbmcgdOG6rXAgdGluIMSRw6MgZ+G6r24uICAoVGjhuq1tIGNow60gY+G6oyBraGkgZ+G6r24gY2jhu4kgxJHhu41jKSIKKworI34gbXNnaWQgIiIKKyN+ICJUaGUgcGFydGl0aW9uIHRhYmxlIG9uICVzIGlzIGluY29uc2lzdGVudC4gIFRoZXJlIGFyZSBtYW55IHJlYXNvbnMgd2h5ICIKKyN+ICJ0aGlzIG1pZ2h0IGJlIHRoZSBjYXNlLiAgSG93ZXZlciwgdGhlIG1vc3QgbGlrZWx5IHJlYXNvbiBpcyB0aGF0IExpbnV4ICIKKyN+ICJkZXRlY3RlZCB0aGUgQklPUyBnZW9tZXRyeSBmb3IgJXMgaW5jb3JyZWN0bHkuICBHTlUgUGFydGVkIHN1c3BlY3RzIHRoZSAiCisjfiAicmVhbCBnZW9tZXRyeSBzaG91bGQgYmUgJWQvJWQvJWQgKG5vdCAlZC8lZC8lZCkuICBZb3Ugc2hvdWxkIGNoZWNrIHdpdGggIgorI34gInlvdXIgQklPUyBmaXJzdCwgYXMgdGhpcyBtYXkgbm90IGJlIGNvcnJlY3QuICBZb3UgY2FuIGluZm9ybSBMaW51eCBieSAiCisjfiAiYWRkaW5nIHRoZSBwYXJhbWV0ZXIgJXM9JWQsJWQsJWQgdG8gdGhlIGNvbW1hbmQgbGluZS4gIFNlZSB0aGUgTElMTyBvciAiCisjfiAiR1JVQiBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLiAgSWYgeW91IHRoaW5rIFBhcnRlZCdzIHN1Z2dlc3RlZCAiCisjfiAiZ2VvbWV0cnkgaXMgY29ycmVjdCwgeW91IG1heSBzZWxlY3QgSWdub3JlIHRvIGNvbnRpbnVlIChhbmQgZml4IExpbnV4ICIKKyN+ICJsYXRlcikuICBPdGhlcndpc2UsIHNlbGVjdCBDYW5jZWwgKGFuZCBmaXggTGludXggYW5kL29yIHRoZSBCSU9TIG5vdykuIgorI34gbXNnc3RyICIiCisjfiAiQuG6o25nIHBow6JuIHbDuW5nIHRyw6puICVzIMSRw6MgdGhheSDEkeG7lWkuICBDw7Mgbmhp4buBdSBuZ3V5w6puIG5ow6JuIGPhu6dhIHPhu7EgdGhheSDEkeG7lWkgIgorI34gIm7DoHkuICBUdXkgbmhpw6puLCBuZ3V5w6puIG5ow6JuIGPDsyBraOG6oyBuxINuZyBjYW8gbmjhuqV0IGzDoCBMaW51eCDEkcOjIG5o4bqtbiByYSBj4bqldSAiCisjfiAidHLDumMgaMOsbmggaOG7jWMgY+G7p2EgQklPUyBjaG8gJXMgYuG7iyBzYWkuICBHTlUgUGFydGVkIGNobyBy4bqzbmcgY+G6pXUgdHLDumMgdGjhu7FjICIKKyN+ICJz4buxIHBo4bqjaSBsw6AgJWQvJWQvJWQgKGtow7RuZyBwaOG6o2kgJWQvJWQvJWQpLiAgTmfGsOG7nWkgZMO5bmcgY+G6p24ga2nhu4NtIHRyYSBCSU9TICIKKyN+ICJj4bunYSBtw6xuaCB0csaw4bubYy4gIEPDsyB0aOG7gyBn4butaSB04bubaSBMaW51eCBi4bqxbmcgdGhhbSBz4buRICVzPSVkLCVkLCVkIHRyw6puIGTDsm5nICIKKyN+ICJs4buHbmguICBIw6N5IHhlbSB0w6BpIGxp4buHdSBj4bunYSBMSUxPIGhheSBHUlVCIMSR4buDIGJp4bq/dCB0aMOqbSB0aMO0bmcgdGluLiAgTuG6v3UgIgorI34gIm5nxrDhu51pIGTDuW5nIGNobyBy4bqxbmcgY+G6pXUgdHLDumMgUGFydGVkIMSRw6MgxJHhu4Egbmdo4buLIGzDoCBzYWksIHRow6wgY8OzIHRo4buDIGNo4buNbiAiCisjfiAiSWdub3JlIChs4budIMSRaSkgxJHhu4MgdGnhur9wIHThu6VjICh2w6Agc2F1IMSRw7Mgc+G7rWEgTGludXgpLiAgTuG6v3Uga2jDtG5nLCBow6N5IGNo4buNbiAiCisjfiAiQ2FuY2VsICjEkMOzbmcpIHbDoCBz4butYSBMaW51eCB2w6AvaG/hurdjIEJJT1MgbmdheSBiw6J5IGdp4budLiIKKworI34gbXNnaWQgIiIKKyN+ICJUaGUgcGFydGl0aW9uIHRhYmxlIG9uICVzIGlzIGluY29uc2lzdGVudC4gIFRoZXJlIGFyZSBtYW55IHJlYXNvbnMgd2h5ICIKKyN+ICJ0aGlzIG1pZ2h0IGJlIHRoZSBjYXNlLiAgT2Z0ZW4sIHRoZSByZWFzb24gaXMgdGhhdCBMaW51eCBkZXRlY3RlZCB0aGUgIgorI34gIkJJT1MgZ2VvbWV0cnkgaW5jb3JyZWN0bHkuICBIb3dldmVyLCB0aGlzIGRvZXMgbm90IGFwcGVhciB0byBiZSB0aGUgY2FzZSAiCisjfiAiaGVyZS4gIEl0IGlzIHNhZmUgdG8gaWdub3JlLGJ1dCBpZ25vcmluZyBtYXkgY2F1c2UgKGZpeGFibGUpIHByb2JsZW1zICIKKyN+ICJ3aXRoIHNvbWUgYm9vdCBsb2FkZXJzLCBhbmQgbWF5IGNhdXNlIHByb2JsZW1zIHdpdGggRkFUIGZpbGUgc3lzdGVtcy4gICIKKyN+ICJVc2luZyBMQkEgaXMgcmVjb21tZW5kZWQuIgorI34gbXNnc3RyICIiCisjfiAiQuG6o25nIHBow6JuIHbDuW5nIHRyw6puICVzIMSRw6MgdGhheSDEkeG7lWkuICBDw7Mgbmhp4buBdSBuZ3V5w6puIG5ow6JuIGPhu6dhIHPhu7EgdGhheSDEkeG7lWkgIgorI34gIm7DoHkuICBUaMO0bmcgdGjGsOG7nW5nLCBuZ3V5w6puIG5ow6JuIGzDoCBMaW51eCDEkcOjIG5o4bqtbiByYSBj4bqldSB0csO6YyBow6xuaCBo4buNYyBj4bunYSAiCisjfiAiQklPUyBi4buLIHNhaS4gIFR1eSBuaGnDqm4sIMSRw6J5IGtow7RuZyBwaOG6o2kgbMOgIHRyxrDhu51uZyBo4bujcCBuaMawIHbhuq15LiAgQ8OzIHRo4buDIGzhu50gIgorI34gIsSRaSwgbmjGsG5nIGzhu50gxJFpIGPDsyB0aOG7gyBnw6J5IHJhIHbhuqVuIMSR4buBIChjw7MgdGjhu4Mgc+G7rWEpIHbhu5tpIG3hu5l0IHPhu5EgdHLDrG5oIGto4bufaSAiCisjfiAixJHhu5luZywgdsOgIHThuqFvIHbhuqVuIMSR4buBIHbhu5tpIGPDoWMgaOG7hyB0aOG7kW5nIHThuq1wIHRpbiBGQVQuICBOw6puIHPhu60gZOG7pW5nIExCQS4iCisKKyN+IG1zZ2lkICIiCisjfiAiVW5hYmxlIHRvIGFsaWduIHBhcnRpdGlvbiBwcm9wZXJseS4gIFRoaXMgcHJvYmFibHkgbWVhbnMgdGhhdCBhbm90aGVyICIKKyN+ICJwYXJ0aXRpb25pbmcgdG9vbCBnZW5lcmF0ZWQgYW4gaW5jb3JyZWN0IHBhcnRpdGlvbiB0YWJsZSwgYmVjYXVzZSBpdCAiCisjfiAiZGlkbid0IGhhdmUgdGhlIGNvcnJlY3QgQklPUyBnZW9tZXRyeS4gIEl0IGlzIHNhZmUgdG8gaWdub3JlLGJ1dCBpZ25vcmluZyAiCisjfiAibWF5IGNhdXNlIChmaXhhYmxlKSBwcm9ibGVtcyB3aXRoIHNvbWUgYm9vdCBsb2FkZXJzLiIKKyN+IG1zZ3N0ciAiIgorI34gIktow7RuZyBz4bqvcCBow6BuZyDEkcO6bmcgxJHGsOG7o2MgY8OhYyBwaMOibiB2w7luZy4gIEPDsyB0aOG7gyBt4buZdCBjw7RuZyBj4bulIHBow6JuIGtow6FjIMSRw6MgIgorI34gInThuqFvIHJhIG3hu5l0IGLhuqNuZyBwaMOibiB2w7luZyBzYWksIHbDrCBuw7Mga2jDtG5nIGPDsyBj4bqldSB0csO6YyDEkcO6bmcgY+G7p2EgQklPUy4gIEPDsyAiCisjfiAidGjhu4MgbOG7nSDEkWksIG5oxrBuZyBs4budIMSRaSBjw7MgdGjhu4Mgc+G6vSBnw6J5IHbhuqVuIMSR4buBIChjw7MgdGjhu4Mgc+G7rWEpIHbhu5tpIG3hu5l0IHPhu5EgdHLDrG5oICIKKyN+ICJraOG7n2kgxJHhu5luZy4iCisKKyN+IG1zZ2lkICJBdHRlbXB0IHRvIHJlYWQgc2VjdG9ycyAlbGQtJWxkIG91dHNpZGUgb2YgcGFydGl0aW9uIG9uICVzIgorI34gbXNnc3RyICJD4buRIMSR4buNYyBjw6FjIHNlY3RvciAlbGQtJWxkIG7hurFtIG5nb8OgaSBwaMOibiB2w7luZyB0csOqbiAlcyIKKworI34gbXNnaWQgIiIKKyN+ICJUaGlzIGV4dDIgZmlsZXN5c3RlbSBoYXMgYSByYXRoZXIgc3RyYW5nZSBsYXlvdXQhICBQYXJ0ZWQgY2FuJ3QgcmVzaXplICIKKyN+ICJ0aGlzICh5ZXQpLiIKKyN+IG1zZ3N0ciAiIgorI34gIkjhu4cgdGjhu5FuZyB04bqtcCB0aW4gZXh0MiBuw6B5IGPDsyBi4buRIHRyw60gbOG6oSEgIFBhcnRlZCAodOG6oW0gdGjhu51pKSBraMO0bmcgdGjhu4MgdGhheSAiCisjfiAixJHhu5VpIGvDrWNoIHRoxrDhu5tjLiIKKworI34gbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyBhbiBpbnZhbGlkIHNpZ25hdHVyZSBmb3IgYSBGQVQgZmlsZSBzeXN0ZW1zLiIKKyN+IG1zZ3N0ciAiSOG7hyB0aOG7kW5nIHThuq1wIHRpbiBjw7MgY2jhu68ga8O9IGjhu4cgdGjhu5FuZyB04bqtcCB0aW4gRkFUIHNhaS4iCisKKyN+IG1zZ2lkICIiCisjfiAiUGFydGl0aW9uICVzIGlzIGJlaW5nIHVzZWQuICBNb2RpZnlpbmcgaXQgd2hpbGUgaXQgaXMgaW4gdXNlIGNvdWxkIGNhdXNlICIKKyN+ICJzZXZlcmUgY29ycnVwdGlvbi4iCisjfiBtc2dzdHIgIlBow6JuIHbDuW5nICVzIMSRYW5nIMSRxrDhu6NjIGTDuW5nLiAgU+G7rWEgxJHhu5VpIG7DsyBiw6J5IGdp4budIGPDsyB0aOG7gyBnw6J5IGjhu49uZy4iCisKKyN+IG1zZ2lkICIiCisjfiAiWW91IHJlcXVlc3RlZCB0byBjcmVhdGUgYSBwYXJ0aXRpb24gYXQgJS4zZi0lLjNmTWIuIFRoZSBjbG9zZXN0IFBhcnRlZCAiCisjfiAiY2FuIG1hbmFnZSBpcyAlLjNmLSUuM2ZNYi4iCisjfiBtc2dzdHIgIiIKKyN+ICJOZ8aw4budaSBkw7luZyDEkcOjIHnDqnUgY+G6p3UgdOG6oW8gbeG7mXQgcGjDom4gdsO5bmcgdOG6oWkgJS4zZi0lLjNmTWIuIFbDuW5nIGfhuqduIG5o4bqldCAiCisjfiAiUGFydGVkIGPDsyB0aOG7gyBxdeG6o24gbMO9IGzDoCAlLjNmLSUuM2ZNYi4iCisKKyN+IG1zZ2lkICIiCisjfiAiWW91IHJlcXVlc3RlZCB0byBtb3ZlIHRoZSBwYXJ0aXRpb24gdG8gJS4zZi0lLjNmTWIuIFRoZSBjbG9zZXN0IFBhcnRlZCAiCisjfiAiY2FuIG1hbmFnZSBpcyAlLjNmLSUuM2ZNYi4iCisjfiBtc2dzdHIgIiIKKyN+ICJOZ8aw4budaSBkw7luZyDEkcOjIHnDqnUgY+G6p3UgZGkgY2h1eeG7g24gbeG7mXQgcGjDom4gdsO5bmcgdOG7m2kgJS4zZi0lLjNmTWIuIFbDuW5nIGfhuqduICIKKyN+ICJuaOG6pXQgUGFydGVkIGPDsyB0aOG7gyBxdeG6o24gbMO9IGzDoCAlLjNmLSUuM2ZNYi4iCisKKyN+IG1zZ2lkICJEaXNrIGdlb21ldHJ5IGZvciAlczogMC4wMDAtJS4zZiBtZWdhYnl0ZXNcbiIKKyN+IG1zZ3N0ciAiQ+G6pXUgdHLDumMgaMOsbmggaOG7jWMgY2hvICVzOiAwLjAwMC0lLjNmIG3DqmdhIGJ5dGVcbiIKKworI34gbXNnaWQgIkRpc2sgbGFiZWwgdHlwZTogJXNcbiIKKyN+IG1zZ3N0ciAiROG6oW5nIG5ow6NuIMSRxKlhOiAlc1xuIgorCisjfiBtc2dpZCAiTWlub3IgICAgU3RhcnQgICAgICAgRW5kICAgICAiCisjfiBtc2dzdHIgIlPhu5FuaOG7jyAgICDEkOG6p3UgICAgICAgQ3Xhu5FpICAgICAiCisKKyN+IG1zZ2lkICJUeXBlICAgICAgIgorI34gbXNnc3RyICJE4bqhbmcgICAgICAiCisKKyN+IG1zZ2lkICJGaWxlc3lzdGVtICAiCisjfiBtc2dzdHIgIkh0dOG6rXB0aW4gICIKKworI34gbXNnaWQgIk5hbWUgICAgICAgICAgICAgICAgICAiCisjfiBtc2dzdHIgIlTDqm4gICAgICAgICAgICAgICAgICAiCisKKyN+IG1zZ2lkICIiCisjfiAiWW91IHJlcXVlc3RlZCB0byByZXNpemUgdGhlIHBhcnRpdGlvbiB0byAlLjNmLSUuM2ZNYi4gVGhlIGNsb3Nlc3QgUGFydGVkICIKKyN+ICJjYW4gbWFuYWdlIGlzICUuM2YtJS4zZk1iLiIKKyN+IG1zZ3N0ciAiIgorI34gIk5nxrDhu51pIGTDuW5nIMSRw6MgecOqdSBj4bqndSB0aGF5IMSR4buVaSBrw61jaCB0aMaw4bubYyBt4buZdCBwaMOibiB2w7luZyB0aMOgbmggJS4zZi0iCisjfiAiJS4zZk1iLiBWw7luZyBn4bqnbiBuaOG6pXQgUGFydGVkIGPDsyB0aOG7gyBxdeG6o24gbMO9IGzDoCAlLjNmLSUuM2ZNYi4iCisKKyN+IG1zZ2lkICJyZXNpemUgTUlOT1IgU1RBUlQgRU5EICAgICAgICByZXNpemUgZmlsZXN5c3RlbSBvbiBwYXJ0aXRpb24gTUlOT1IiCisjfiBtc2dzdHIgIiIKKyN+ICJyZXNpemUgTUlOT1IgU1RBUlQgRU5EICAgICAgICB0aGF5IMSR4buVaSBrw61jaCB0aMaw4bubYyBo4buHIHRo4buRbmcgdOG6rXAgdGluIHRyw6puICIKKyN+ICJwaMOibiB2w7luZyBNSU5PUiIKKworI34gbXNnaWQgIiIKKyN+ICJZb3UgZm91bmQgYSBidWcgaW4gR05VIFBhcnRlZC4gIFBsZWFzZSBlbWFpbCBhIGJ1ZyByZXBvcnQgdG8gYnVnLSIKKyN+ICJwYXJ0ZWRAZ251Lm9yZyBjb250YWluaW5nIHRoZSB2ZXJzaW9uICglcyksIGFuZCB0aGUgZm9sbG93aW5nIG1lc3NhZ2U6XG4iCisjfiBtc2dzdHIgIiIKKyN+ICJC4bqhbiB0w6xtIHRo4bqleSBt4buZdCBs4buXaSBidWcgdHJvbmcgR05VIFBhcnRlZC4gIFhpbiBow6N5IGfhu61pIGVtYWlsIGLDoW8gY8OhbyBs4buXaSAiCisjfiAidOG7m2kgYnVnLXBhcnRlZEBnbnUub3JnIGvDqG0gdGhlbyBwaGnDqm4gYuG6o24gKCVzKSwgdsOgIHRow7RuZyBiw6FvIHNhdTpcbiIKKworI34gbXNnaWQgIiIKKyN+ICIgIFlvdSBoYXZlIFdpbmRvd3MgRkFUIHBhcnRpdGlvbihzKSB0aGF0IGFyZSBub3QgdXNpbmcgTEJBLiAgSWYgeW91ciBCSU9TICIKKyN+ICJzdXBwb3J0cyBMQkEsIHRoZW4geW91IHNob3VsZCBzd2l0Y2ggdG8gTEJBIGJ5IHNldHRpbmcgdGhlIExCQSBmbGFnIG9uICIKKyN+ICJhbGwgRkFUIHBhcnRpdGlvbnMuICBPdGhlcndpc2UsIG1ha2Ugc3VyZSB0aGUgb3BlcmF0aW5nIHN5c3RlbSBhbmQgdGhlICIKKyN+ICJCSU9TIGhhdmUgdGhlIHNhbWUgZ2VvbWV0cnkgYmVmb3JlIHJlc2l6aW5nIGFueSBGQVQgcGFydGl0aW9ucy4iCisjfiBtc2dzdHIgIiIKKyN+ICIgIE5nxrDhu51pIGTDuW5nIGPDsyBjw6FjIHBow6JuIHbDuW5nIEZBVCBj4bunYSBXaW5kb3dzIGtow7RuZyBz4butIGThu6VuZyBMQkEuICBO4bq/dSAiCisjfiAiQklPUyBo4buXIHRy4bujIExCQSwgdGjDrCBj4bqnbiBjaHV54buDbiB04bubaSBMQkEgYuG6sW5nIHRoaeG6v3QgbOG6rXAgY+G7nSBMQkEgdHLDqm4gdOG6pXQgY+G6oyAiCisjfiAiY8OhYyBwaMOibiB2w7luZyBGQVQuICBO4bq/dSBraMO0bmcsIGPhuqduIGNo4bqvYyBsw6AgaOG7hyDEkWnhu4F1IGjDoG5oIHbDoCBCSU9TIGPDsyBjw7luZyAiCisjfiAiY+G6pXUgdHLDumMgaMOsbmggaOG7jWMgY+G7p2EgxJHEqWEgdHLGsOG7m2Mga2hpIHRoYXkgxJHhu5VpIGvDrWNoIHRoxrDhu5tjIGLhuqV0IGvhu7MgcGjDom4gdsO5bmcgIgorI34gIkZBVCBuw6BvLiIKKworI34gbXNnaWQgIiIKKyN+ICJUaGUgb3BlcmF0aW5nIHN5c3RlbSB0aGlua3MgdGhlIGdlb21ldHJ5IG9uICVzIGlzICVkLyVkLyVkLiAgVGhlcmVmb3JlLCAiCisjfiAiY3lsaW5kZXIgMTAyNCBlbmRzIGF0ICUuM2ZNLiVzIgorI34gbXNnc3RyICIiCisjfiAiSOG7hyDEkWnhu4F1IGjDoG5oIG5naMSpIGzDoCBow6xuaCBo4buNYyB0csOqbiAlcyBsw6AgJWQvJWQvJWQuICBUdXkgbmhpw6puLCBjeWxpbmRlciAiCisjfiAic+G7kSAxMDI0IGvhur90IHRow7pjIHThuqFpICUuM2ZNLiVzIgorCisjfiBtc2dpZCAiVGhlIG9wZXJhdGluZyBzeXN0ZW0gdGhpbmtzIHRoZSBnZW9tZXRyeSBvbiAlcyBpcyAlZC8lZC8lZC4lcyIKKyN+IG1zZ3N0ciAiSOG7hyDEkWnhu4F1IGjDoG5oIG5naMSpIGzDoCBow6xuaCBo4buNYyB0csOqbiAlcyBsw6AgJWQvJWQvJWQuJXMiCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvcG8vemhfQ04uZ21vIGIvcGFydGVkLTEuOC43L3BvL3poX0NOLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzVkYWM0Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L3BvL3poX0NOLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvcG8vemhfQ04ucG8gYi9wYXJ0ZWQtMS44LjcvcG8vemhfQ04ucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRhNzg1MQotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9wby96aF9DTi5wbwpAQCAtMCwwICsxLDMyMjEgQEAKKyMgU09NRSBERVNDUklQVElWRSBUSVRMRS4KKyMgQ29weXJpZ2h0IChDKSAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBXYW5nIExpIDxjaGFybGVzQGxpbnV4Lm5ldC5jbj4sIDIwMDMuCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBwYXJ0ZWQgMS42LjZcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogYnVnLXBhcnRlZEBnbnUub3JnXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMDctMDUtMDkgMTc6MDItMDQwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDMtMDgtMDEgMTE6MjcrMDgwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogV2FuZyBMaSA8Y2hhcmxlc0BsaW51eC5uZXQuY24+XG4iCisiTGFuZ3VhZ2UtVGVhbTogQ2hpbmVzZSAoc2ltcGxpZmllZCkgPGkxOG4tdHJhbnNsYXRpb25AbGlzdHMubGludXgubmV0LmNuPlxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PWdiMjMxMlxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKworIzogbGliL2Nsb3Nlb3V0LmM6NzQKK21zZ2lkICJ3cml0ZSBlcnJvciIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXJyb3IuYzoxMjUKKyMsIGZ1enp5Cittc2dpZCAiVW5rbm93biBzeXN0ZW0gZXJyb3IiCittc2dzdHIgIs601qq1xM7EvP7Ptc2zwODQzaGwJXOhsaGjIgorCisjOiBsaWIvZ2V0b3B0LmM6NTMxIGxpYi9nZXRvcHQuYzo1NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiBgJXMnIGlzIGFtYmlndW91c1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo1ODAgbGliL2dldG9wdC5jOjU4NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIGAtLSVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjU5MyBsaWIvZ2V0b3B0LmM6NTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYCVjJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6NjQxIGxpYi9nZXRvcHQuYzo2NjAgbGliL2dldG9wdC5jOjk3NiBsaWIvZ2V0b3B0LmM6OTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYCVzJyByZXF1aXJlcyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo2OTggbGliL2dldG9wdC5jOjcwMQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5yZWNvZ25pemVkIG9wdGlvbiBgLS0lcydcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6NzA5IGxpYi9nZXRvcHQuYzo3MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVucmVjb2duaXplZCBvcHRpb24gYCVjJXMnXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjc2NCBsaWIvZ2V0b3B0LmM6NzY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbGxlZ2FsIG9wdGlvbiAtLSAlY1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo3NzMgbGliL2dldG9wdC5jOjc3NgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBvcHRpb24gLS0gJWNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6ODI4IGxpYi9nZXRvcHQuYzo4NDQgbGliL2dldG9wdC5jOjEwNDggbGliL2dldG9wdC5jOjEwNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCAtLSAlY1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo4OTcgbGliL2dldG9wdC5jOjkxMworIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIGAtVyAlcycgaXMgYW1iaWd1b3VzXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjkzNyBsaWIvZ2V0b3B0LmM6OTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYC1XICVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6CisjLiBHZXQgdHJhbnNsYXRpb25zIGZvciBvcGVuIGFuZCBjbG9zaW5nIHF1b3RhdGlvbiBtYXJrcy4KKyMuCisjLiBUaGUgbWVzc2FnZSBjYXRhbG9nIHNob3VsZCB0cmFuc2xhdGUgImAiIHRvIGEgbGVmdAorIy4gcXVvdGF0aW9uIG1hcmsgc3VpdGFibGUgZm9yIHRoZSBsb2NhbGUsIGFuZCBzaW1pbGFybHkgZm9yCisjLiAiJyIuICBJZiB0aGUgY2F0YWxvZyBoYXMgbm8gdHJhbnNsYXRpb24sCisjLiBsb2NhbGVfcXVvdGluZ19zdHlsZSBxdW90ZXMgYGxpa2UgdGhpcycsIGFuZAorIy4gY2xvY2FsZV9xdW90aW5nX3N0eWxlIHF1b3RlcyAibGlrZSB0aGlzIi4KKyMuCisjLiBGb3IgZXhhbXBsZSwgYW4gQW1lcmljYW4gRW5nbGlzaCBVbmljb2RlIGxvY2FsZSBzaG91bGQKKyMuIHRyYW5zbGF0ZSAiYCIgdG8gVSsyMDFDIChMRUZUIERPVUJMRSBRVU9UQVRJT04gTUFSSyksIGFuZAorIy4gc2hvdWxkIHRyYW5zbGF0ZSAiJyIgdG8gVSsyMDFEIChSSUdIVCBET1VCTEUgUVVPVEFUSU9OCisjLiBNQVJLKS4gIEEgQnJpdGlzaCBFbmdsaXNoIFVuaWNvZGUgbG9jYWxlIHNob3VsZCBpbnN0ZWFkCisjLiB0cmFuc2xhdGUgdGhlc2UgdG8gVSsyMDE4IChMRUZUIFNJTkdMRSBRVU9UQVRJT04gTUFSSykgYW5kCisjLiBVKzIwMTkgKFJJR0hUIFNJTkdMRSBRVU9UQVRJT04gTUFSSyksIHJlc3BlY3RpdmVseS4KKyMuCisjLiBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIHB1dCBoZXJlLCBwbGVhc2Ugc2VlCisjLiA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9RdW90YXRpb25fbWFyayNHbHlwaHM+CisjLiBhbmQgdXNlIGdseXBocyBzdWl0YWJsZSBmb3IgeW91ciBsYW5ndWFnZS4KKyM6IGxpYi9xdW90ZWFyZy5jOjIyOQorbXNnaWQgImAiCittc2dzdHIgIiIKKworIzogbGliL3F1b3RlYXJnLmM6MjMwCittc2dpZCAiJyIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjEzMQorbXNnaWQgIlN1Y2Nlc3MiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxMzQKK21zZ2lkICJObyBtYXRjaCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjEzNworbXNnaWQgIkludmFsaWQgcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTQwCittc2dpZCAiSW52YWxpZCBjb2xsYXRpb24gY2hhcmFjdGVyIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTQzCittc2dpZCAiSW52YWxpZCBjaGFyYWN0ZXIgY2xhc3MgbmFtZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE0NgorbXNnaWQgIlRyYWlsaW5nIGJhY2tzbGFzaCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE0OQorbXNnaWQgIkludmFsaWQgYmFjayByZWZlcmVuY2UiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNTIKK21zZ2lkICJVbm1hdGNoZWQgWyBvciBbXiIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE1NQorbXNnaWQgIlVubWF0Y2hlZCAoIG9yIFxcKCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE1OAorbXNnaWQgIlVubWF0Y2hlZCBcXHsiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNjEKK21zZ2lkICJJbnZhbGlkIGNvbnRlbnQgb2YgXFx7XFx9IgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTY0Cittc2dpZCAiSW52YWxpZCByYW5nZSBlbmQiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNjcKK21zZ2lkICJNZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTcwCittc2dpZCAiSW52YWxpZCBwcmVjZWRpbmcgcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTczCittc2dpZCAiUHJlbWF0dXJlIGVuZCBvZiByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNzYKK21zZ2lkICJSZWd1bGFyIGV4cHJlc3Npb24gdG9vIGJpZyIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE3OQorbXNnaWQgIlVubWF0Y2hlZCApIG9yIFxcKSIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjY4MAorbXNnaWQgIk5vIHByZXZpb3VzIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvcnBtYXRjaC5jOjcwCittc2dpZCAiXlt5WV0iCittc2dzdHIgIiIKKworIzogbGliL3JwbWF0Y2guYzo3MworbXNnaWQgIl5bbk5dIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBUcmFuc2xhdGUgIihDKSIgdG8gdGhlIGNvcHlyaWdodCBzeW1ib2wKKyMuIChDLWluLWEtY2lyY2xlKSwgaWYgdGhpcyBzeW1ib2wgaXMgYXZhaWxhYmxlIGluIHRoZSB1c2VyJ3MKKyMuIGxvY2FsZS4gIE90aGVyd2lzZSwgZG8gbm90IHRyYW5zbGF0ZSAiKEMpIjsgbGVhdmUgaXQgYXMtaXMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzo2NgorbXNnaWQgIihDKSIKK21zZ3N0ciAiIgorCisjOiBsaWIvdmVyc2lvbi1ldGMuYzo2OAorbXNnaWQgIiIKKyJcbiIKKyJMaWNlbnNlIEdQTHYyKzogR05VIEdQTCB2ZXJzaW9uIDIgb3IgbGF0ZXIgPGh0dHA6Ly9nbnUub3JnL2xpY2Vuc2VzL2dwbC4iCisiaHRtbD5cbiIKKyJUaGlzIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBhcmUgZnJlZSB0byBjaGFuZ2UgYW5kIHJlZGlzdHJpYnV0ZSBpdC5cbiIKKyJUaGVyZSBpcyBOTyBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3LlxuIgorIlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIzogbGliL3ZlcnNpb24tZXRjLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiV3JpdHRlbiBieSAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIzogbGliL3ZlcnNpb24tZXRjLmM6ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiV3JpdHRlbiBieSAlcyBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIldyaXR0ZW4gYnkgJXMsICVzLCBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyJhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6MTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiJXMsIGFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyIlcywgJXMsIGFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzoxMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyIlcywgJXMsICVzLCBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6MTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiJXMsICVzLCAlcywgJXMsXG4iCisiYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjLiBZb3UgY2FuIHVzZSBsaW5lIGJyZWFrcywgZXN0aW1hdGluZyB0aGF0IGVhY2ggYXV0aG9yIG5hbWUgb2NjdXBpZXMKKyMuIGNhLiAxNiBzY3JlZW4gY29sdW1ucyBhbmQgdGhhdCBhIHNjcmVlbiBsaW5lIGhhcyBjYS4gODAgY29sdW1ucy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjEzMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorIiVzLCAlcywgJXMsICVzLFxuIgorIiVzLCBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6MTQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiJXMsICVzLCAlcywgJXMsXG4iCisiJXMsICVzLCBhbmQgb3RoZXJzLlxuIgorbXNnc3RyICIiCisKKyM6IGxpYi94YWxsb2MtZGllLmM6MzUKK21zZ2lkICJtZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzoyMzcKK21zZ2lkICJEaXNrIEltYWdlIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzozMzggbGlicGFydGVkL2FyY2gvZ251LmM6MjYxCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjEyNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igb3BlbmluZyAlczogJXMiCittc2dzdHIgIrTyv6ogJXMgs/a07aO6JXMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzozNDkgbGlicGFydGVkL2FyY2gvZ251LmM6MjcxCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjEyODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIG9wZW4gJXMgcmVhZC13cml0ZSAoJXMpLiAgJXMgaGFzIGJlZW4gb3BlbmVkIHJlYWQtb25seS4iCittc2dzdHIgIs7et6jS1LbB0LS3vcq9tPK/qiAlcyAoJXMpoaMlcyDS0bC01dXWu7bBt73KvbTyv6qhoyIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjQxMSBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjE0MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZHVyaW5nIHNlZWsgZm9yIHJlYWQgb24gJXMiCittc2dzdHIgItTazqq2wcihICUyJHMgtvi199PDIHNlZWsgyrEgJTEkcyIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjQ0NCBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo0NDkgbGlicGFydGVkL2FyY2gvZ251LmM6NTQ4CisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo2NzYgbGlicGFydGVkL2FyY2gvbGludXguYzoxMzkxCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjE0NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZHVyaW5nIHJlYWQgb24gJXMiCittc2dzdHIgItTatsHIoSAlMiRzIMbavOQgJTEkcyIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjQ4MCBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo1MDkKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTU0NgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW4ndCB3cml0ZSB0byAlcywgYmVjYXVzZSBpdCBpcyBvcGVuZWQgcmVhZC1vbmx5LiIKK21zZ3N0ciAi08nT2iAlcyDKx9LU1ru2wbe9yr208r+qtcSjrNLytMvO3reo0LTI66GjIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6NDk2IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTU3MAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkdXJpbmcgc2VlayBmb3Igd3JpdGUgb24gJXMiCittc2dzdHIgItTazqrQtMjrICUyJHMgtffTwyBzZWVrIMqxICUxJHMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzo1MzMgbGlicGFydGVkL2FyY2gvZ251LmM6NTg1IGxpYnBhcnRlZC9hcmNoL2dudS5jOjYzMAorIzogbGlicGFydGVkL2FyY2gvZ251LmM6NzA3IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTUxNworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxNjEyIGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTY4NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkdXJpbmcgd3JpdGUgb24gJXMiCittc2dzdHIgItTa0LTI6yAlMiRzIMqxICUxJHMiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6NjMgcGFydHByb2JlL3BhcnRwcm9iZS5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICJUcnkgYCVzIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4iCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICVzIFtPUFRJT05dXG4iCisiICBvcjogICVzIERFVklDRSBNSU5PUlxuIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6NzAKK21zZ2lkICIiCisiQ2xlYXIgdW51c2VkIHNwYWNlIG9uIGEgRkFUIHBhcnRpdGlvbiAoYSBHTlUgUGFydGVkIHRlc3RpbmcgdG9vbCkuXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo3NAorbXNnaWQgIiAgICAgIC0taGVscCAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXRcbiIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjc1Cittc2dpZCAiICAgICAgLS12ZXJzaW9uICBvdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdFxuIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6NzcgcGFydHByb2JlL3BhcnRwcm9iZS5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiUmVwb3J0IGJ1Z3MgdG8gPCVzPi5cbiIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjI4NQorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gZmV3IGFyZ3VtZW50cyIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjI5MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIgorbXNnc3RyICK5/bbgtcS7tdKzoaMiCisKKyM6IHBhcnRwcm9iZS9wYXJ0cHJvYmUuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFtPUFRJT05dIFtERVZJQ0VdLi4uXG4iCittc2dzdHIgIiIKKworIzogcGFydHByb2JlL3BhcnRwcm9iZS5jOjE0MgorbXNnaWQgIiIKKyJJbmZvcm0gdGhlIE9TIG9mIHBhcnRpdGlvbiB0YWJsZSBjaGFuZ2VzLlxuIgorIlxuIgorIiAgLWQsIC0tbm8tdXBkYXRlICBkb24ndCB1cGRhdGUgdGhlIGtlcm5lbFxuIgorIiAgLXMsIC0tc3VtbWFyeSAgICBwcmludCBhIHN1bW1hcnkgb2YgY29udGVudHNcbiIKKyIgIC1oLCAtLWhlbHAgICAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXRcbiIKKyIgIC12LCAtLXZlcnNpb24gICAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXRcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0cHJvYmUvcGFydHByb2JlLmM6MTUwCittc2dpZCAiIgorIlxuIgorIldpdGggbm8gREVWSUNFLCBwcm9iZSBhbGwgcGFydGl0aW9ucy5cbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gb3BlbiAlcy4iCittc2dzdHIgIs7et6i08r+qICVzoaMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjExNAorbXNnaWQgIlVuYWJsZSB0byBwcm9iZSBzdG9yZS4iCittc2dzdHIgIs7et6jMvbLitOa0osnosbihoyIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6MzUyCisjLCBmdXp6eQorbXNnaWQgIiIKKyJUaGUgcGFydGl0aW9uIHRhYmxlIGNhbm5vdCBiZSByZS1yZWFkLiAgVGhpcyBtZWFucyB5b3UgbmVlZCB0byByZWJvb3QgYmVmb3JlICIKKyJtb3VudGluZyBhbnkgbW9kaWZpZWQgcGFydGl0aW9ucy4gIFlvdSBhbHNvIG5lZWQgdG8gcmVpbnN0YWxsIHlvdXIgYm9vdCAiCisibG9hZGVyIGJlZm9yZSB5b3UgcmVib290ICh3aGljaCBtYXkgcmVxdWlyZSBtb3VudGluZyBtb2RpZmllZCBwYXJ0aXRpb25zKS4gICIKKyJJdCBpcyBpbXBvc3NpYmxlIGRvIGJvdGggdGhpbmdzISAgU28geW91J2xsIG5lZWQgdG8gYm9vdCBvZmYgYSByZXNjdWUgZGlzaywgIgorImFuZCByZWluc3RhbGwgeW91ciBib290IGxvYWRlciBmcm9tIHRoZSByZXNjdWUgZGlzay4gIFJlYWQgc2VjdGlvbiA0IG9mIHRoZSAiCisiUGFydGVkIFVzZXIgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCittc2dzdHIgIiIKKyLO3reo1tjQwrbByOu31sf4se2jrM2s0fmjrMT6sdjQ69TavNPU2MjOus7Q3rjEwcu1xLfWx/jWrsew1tjQwsb0tq+ho8T6u7nQ6NKqIgorItTaxPrW2NDCxvS2r9aux7DW2NDCsLLXsMb0tq+53MDtxvcgKMv8v8nE3NDo0qq809TY0N64xMHLtcS31sf4KaGjzazKsdf21eLBvbz+IgorIsrCyseyu7/JxNy1xKOhy/nS1MT6vs3Q6NKqtNO8sb7IxczG9Lavo6yyorTTvLG+yMXM1tjQwrCy17DE+rXExvS2r7ncwO3G96GjuPwiCisituDP6sfpx+uyztTEIFBhcnRlZCDTw7unzsS1tbXEtdrLxL3aoaMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjM2OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBwYXJ0aXRpb24gdGFibGUgb24gJXMgY2Fubm90IGJlIHJlLXJlYWQgKCVzKS4gIFRoaXMgbWVhbnMgdGhlIEh1cmQga25vd3MgIgorIm5vdGhpbmcgYWJvdXQgYW55IG1vZGlmaWNhdGlvbnMgeW91IG1hZGUuICBZb3Ugc2hvdWxkIHJlYm9vdCB5b3VyIGNvbXB1dGVyICIKKyJiZWZvcmUgZG9pbmcgYW55dGhpbmcgd2l0aCAlcy4iCittc2dzdHIgIiIKKyIlcyAoJXMpIMnPtcS31sf4se2ho9Xi0uLOttfFIEh1cmQgsrvWqrXAyM66zsT6y/nX97XE0N64xKGjxPrTprjD1Nq21CAlcyDX9sjOIgorIrrOstnX99aux7DW2NDCxvS2r8T6tcS8xsvju/qhoyIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6MzgwIHBhcnRlZC9wYXJ0ZWQuYzoyNDQzCittc2dpZCAiIgorIllvdSBzaG91bGQgcmVpbnN0YWxsIHlvdXIgYm9vdCBsb2FkZXIgYmVmb3JlIHJlYm9vdGluZy4gIFJlYWQgc2VjdGlvbiA0IG9mICIKKyJ0aGUgUGFydGVkIFVzZXIgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCittc2dzdHIgIiIKKyLE+tOmuMPU2tbY0MLG9Lav1q7HsNbY0MKwstewxPq1xMb0tq+53MDtxveho8/qx+nH69TEtsEgUGFydGVkINPDu6fOxLW1tcS12svEIgorIr3aoaMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjc3MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB0cnlpbmcgdG8gc3luYyAlcyB0byBkaXNrIgorbXNnc3RyICIlcyDK1M28vasgJXMgzayyvbW9tMXFzMnPIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjQwOAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc3RhdCBkZXZpY2UgJXMgLSAlcy4iCittc2dzdHIgIs7et6i21MnosbggJXMgLSAlcyDX9iBzdGF0ILLZ1/ehoyIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo1MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBkZXRlcm1pbmUgc2VjdG9yIHNpemUgZm9yICVzOiAlcy5cbiIKKyJVc2luZyB0aGUgZGVmYXVsdCBzZWN0b3Igc2l6ZSAoJWxsZCkuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6NTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJEZXZpY2UgJXMgaGFzIGEgbG9naWNhbCBzZWN0b3Igc2l6ZSBvZiAlbGxkLiAgTm90IGFsbCBwYXJ0cyBvZiBHTlUgUGFydGVkICIKKyJzdXBwb3J0IHRoaXMgYXQgdGhlIG1vbWVudCwgYW5kIHRoZSB3b3JraW5nIGNvZGUgaXMgSElHSExZIEVYUEVSSU1FTlRBTC5cbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjU3OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGRldGVybWluZSB0aGUgc2l6ZSBvZiAlcyAoJXMpLiIKK21zZ3N0ciAizt63qMi3tqggJXMgKCVzKSC1xLTz0KEiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6NjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBnZXQgaWRlbnRpdHkgb2YgZGV2aWNlICVzIC0gJXMiCittc2dzdHIgIs7et6i78cihyeixuCAlcyAtICVzILXEserKtiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo2NzcKK21zZ2lkICJHZW5lcmljIElERSIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRGV2aWNlICVzIGhhcyBtdWx0aXBsZSAoJWQpIGxvZ2ljYWwgc2VjdG9ycyBwZXIgcGh5c2ljYWwgc2VjdG9yLlxuIgorIkdOVSBQYXJ0ZWQgc3VwcG9ydHMgdGhpcyBFWFBFUklNRU5UQUxMWSBmb3Igc29tZSBzcGVjaWFsIGRpc2sgbGFiZWwvZmlsZSAiCisic3lzdGVtIGNvbWJpbmF0aW9ucywgZS5nLiBHUFQgYW5kIGV4dDIvMy5cbiIKKyJQbGVhc2UgY29uc3VsdCB0aGUgd2ViIHNpdGUgZm9yIHVwLXRvLWRhdGUgaW5mb3JtYXRpb24uIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6ODczCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGluaXRpYWxpc2luZyBTQ1NJIGRldmljZSAlcyAtICVzIgorbXNnc3RyICKz9cq8u68gU0NTSSDJ6LG4ICVzIC0gJXMgs/a07SIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo5MjgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZGV2aWNlICVzIGhhcyB6ZXJvIGxlbmd0aCwgYW5kIGNhbid0IHBvc3NpYmx5IHN0b3JlIGEgZmlsZSBzeXN0ZW0gb3IgIgorInBhcnRpdGlvbiB0YWJsZS4gIFBlcmhhcHMgeW91IHNlbGVjdGVkIHRoZSB3cm9uZyBkZXZpY2U/IgorbXNnc3RyICIiCisiyeixuCAlcyC1xLOktsjOqsHjo6zS8rTLzt63qLGjtObOxLz+z7XNs7vyt9bH+LHtoaO/ycTcxPrRodTxwcu07c7ztcTJ6LG4o78iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTAzMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlVuYWJsZSB0byBkZXRlcm1pbmUgZ2VvbWV0cnkgb2YgZmlsZS9kZXZpY2UgJXMuICBZb3Ugc2hvdWxkIG5vdCB1c2UgUGFydGVkICIKKyJ1bmxlc3MgeW91IFJFQUxMWSBrbm93IHdoYXQgeW91J3JlIGRvaW5nISIKK21zZ3N0ciAiIgorIs7et6jIt7aozsS8/i/J6LG4tcS8uLrOveG5uaGjs/23x8T6yLfKtdaqtcDE+tTa1/bKssO0o6y38dTyxPqyu7jDyrnTwyAiCisiUGFydGVko6EiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTExMAorbXNnaWQgIkRBQzk2MCBSQUlEIGNvbnRyb2xsZXIiCittc2dzdHIgIkRBQzk2MCBSQUlEIL/Y1sbG9yIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTE1Cittc2dpZCAiUHJvbWlzZSBTWDggU0FUQSBEZXZpY2UiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTIwCittc2dpZCAiSUJNIFMzOTAgREFTRCBkcml2ZSIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExMjUKK21zZ2lkICJJQk0gaVNlcmllcyBWaXJ0dWFsIERBU0QiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTMwCittc2dpZCAiQ29tcGFxIFNtYXJ0IEFycmF5IgorbXNnc3RyICJDb21wYXEg1sfE3NXzwdAiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTEzNQorbXNnaWQgIkFUQVJBSUQgQ29udHJvbGxlciIKK21zZ3N0ciAiQVRBUkFJRCC/2NbGxvciCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTE0MAorbXNnaWQgIkkyTyBDb250cm9sbGVyIgorbXNnc3RyICJJMk8gv9jWxsb3IgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExNDUKK21zZ2lkICJVc2VyLU1vZGUgTGludXggVUJEIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTE1NgorbXNnaWQgIkxpbnV4IGRldmljZS1tYXBwZXIiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTYyCittc2dpZCAiVW5rbm93biIKK21zZ3N0ciAizrTWqiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTY5Cittc2dpZCAicGVkX2RldmljZV9uZXcoKSAgVW5zdXBwb3J0ZWQgZGV2aWNlIHR5cGUiCittc2dzdHIgInBlZF9kZXZpY2VfbmV3KCkgILK71qez1rXEyeixuMDg0M0iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MjA4MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIkVycm9yIGluZm9ybWluZyB0aGUga2VybmVsIGFib3V0IG1vZGlmaWNhdGlvbnMgdG8gcGFydGl0aW9uICVzIC0tICVzLiAgVGhpcyAiCisibWVhbnMgTGludXggd29uJ3Qga25vdyBhYm91dCBhbnkgY2hhbmdlcyB5b3UgbWFkZSB0byAlcyB1bnRpbCB5b3UgcmVib290IC0tICIKKyJzbyB5b3Ugc2hvdWxkbid0IG1vdW50IGl0IG9yIHVzZSBpdCBpbiBhbnkgd2F5IGJlZm9yZSByZWJvb3RpbmcuIgorbXNnc3RyICIiCisizajWqsTausu52NPat9bH+CAlcyAtICVzILXE0N64xMqxs/a07aGj1eLS4s6218UgTGludXgg1NrW2NDCxvS2r9aux7DO3reo1qq1wCIKKyLE+tXrttQgJXMgy/nX97XEyM66ztDeuMQgLSDL+dLUxPrSsrK7xNzU2tbY0MLG9Lav1q7HsLzT1Ni78tLUyM66zre9yr3KudPDy/yhoyIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoyMjYyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisicGFydGVkIHdhcyB1bmFibGUgdG8gcmUtcmVhZCB0aGUgcGFydGl0aW9uIHRhYmxlIG9uICVzICglcykuICBUaGlzIG1lYW5zICIKKyJMaW51eCB3b24ndCBrbm93IGFueXRoaW5nIGFib3V0IHRoZSBtb2RpZmljYXRpb25zIHlvdSBtYWRlLiAiCittc2dzdHIgIiIKKyLE2rrLzt63qNbY0MK2wcihICVzICglcykgyc+1xLfWx/ix7aGj1eLS4s621eIgTGludXgg1NrE+tbY0MLG9Lav1q7HsM7et6jWqrXAIgorIsjOus7Q3rjEoaPE+tOmuMPU2rbUICVzINf2yM66zrLZ1/cgINaux7DW2NDCxvS2r8T6tcS8xsvju/qhoyIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoyMzY4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGtlcm5lbCB3YXMgdW5hYmxlIHRvIHJlLXJlYWQgdGhlIHBhcnRpdGlvbiB0YWJsZSBvbiAlcyAoJXMpLiAgVGhpcyBtZWFucyAiCisiTGludXggd29uJ3Qga25vdyBhbnl0aGluZyBhYm91dCB0aGUgbW9kaWZpY2F0aW9ucyB5b3UgbWFkZSB1bnRpbCB5b3UgIgorInJlYm9vdC4gIFlvdSBzaG91bGQgcmVib290IHlvdXIgY29tcHV0ZXIgYmVmb3JlIGRvaW5nIGFueXRoaW5nIHdpdGggJXMuIgorbXNnc3RyICIiCisixNq6y87et6jW2NDCtsHIoSAlcyAoJXMpIMnPtcS31sf4se2ho9Xi0uLOttXiIExpbnV4INTaxPrW2NDCxvS2r9aux7DO3reo1qq1wCIKKyLIzrrO0N64xKGjxPrTprjD1Nq21CAlcyDX9sjOus6y2df3ICDWrsew1tjQwsb0tq/E+rXEvMbL47v6oaMiCisKKyM6IGxpYnBhcnRlZC9jcy9nZW9tLmM6MTYyCittc2dpZCAiQ2FuJ3QgaGF2ZSB0aGUgZW5kIGJlZm9yZSB0aGUgc3RhcnQhIgorbXNnc3RyICLO3reo1Nq/qsq81q7HsL3hyvijoSIKKworIzogbGlicGFydGVkL2NzL2dlb20uYzoxNjkKK21zZ2lkICJDYW4ndCBoYXZlIGEgcGFydGl0aW9uIG91dHNpZGUgdGhlIGRpc2shIgorbXNnc3RyICLO3reoyMO31sf4s6yz9rTFxcyjoSIKKworIzogbGlicGFydGVkL2NzL2dlb20uYzozNjYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkF0dGVtcHQgdG8gd3JpdGUgc2VjdG9ycyAlbGQtJWxkIG91dHNpZGUgb2YgcGFydGl0aW9uIG9uICVzLiIKK21zZ3N0ciAiytTNvNC0yOsgJTMkcyDJz7fWx/jWrs3itcTJyMf4ICUxJGxkLSUyJGxkIgorCisjOiBsaWJwYXJ0ZWQvY3MvZ2VvbS5jOjQwNiBsaWJwYXJ0ZWQvZnMvbGludXhfc3dhcC9saW51eF9zd2FwLmM6NDc1Cittc2dpZCAiY2hlY2tpbmcgZm9yIGJhZCBibG9ja3MiCittc2dzdHIgIrzssum7tb/pIgorCisjOiBsaWJwYXJ0ZWQvZGVidWcuYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFja3RyYWNlIGhhcyAlZCBjYWxscyBvbiBzdGFjazpcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZGVidWcuYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXNzZXJ0aW9uICglcykgYXQgJXM6JWQgaW4gZnVuY3Rpb24gJXMoKSBmYWlsZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBvcGVuICVzIC0gdW5yZWNvZ25pc2VkIGRpc2sgbGFiZWwuIgorbXNnc3RyICLO3reotPK/qiAlcyAtIM7et6jKtrHwtcS0xcXMserHqaGjIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjQ3MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhpcyBsaWJwYXJ0ZWQgZG9lc24ndCBoYXZlIHdyaXRlIHN1cHBvcnQgZm9yICVzLiAgUGVyaGFwcyBpdCB3YXMgY29tcGlsZWQgIgorInJlYWQtb25seS4iCittc2dzdHIgItXiuPYgbGlicGFydGVkILK71qez1rbUICVzILXE0LSy2df3oaO/ycTcy/zKx7C01ru2wbe9yr2x4NLrtcShoyIKKworIzogbGlicGFydGVkL2Rpc2suYzo1OTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlBhcnRpdGlvbiAlZCBpcyAlcywgYnV0IHRoZSBmaWxlIHN5c3RlbSBpcyAlcy4iCittc2dzdHIgIrfWx/ggJWQgzqogJS4zZk1io6y1q87EvP7Ptc2zzqogJS4zZk1ioaMiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTA3NQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkaXNrIGxhYmVscyBkbyBub3Qgc3VwcG9ydCBleHRlbmRlZCBwYXJ0aXRpb25zLiIKK21zZ3N0ciAiJXMgtMXFzLHqx6myu9ans9bAqdW5t9bH+KGjIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE2MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZGlzayBsYWJlbHMgZG9uJ3Qgc3VwcG9ydCBsb2dpY2FsIG9yIGV4dGVuZGVkIHBhcnRpdGlvbnMuIgorbXNnc3RyICIlcyC0xcXMserHqbK71qez1sLfvK278sCp1bm31sf4oaMiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTY0NworIywgZnV6enkKK21zZ2lkICJUb28gbWFueSBwcmltYXJ5IHBhcnRpdGlvbnMuIgorbXNnc3RyICK5/bbgtcTW97fWx/giCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTY1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2FuJ3QgYWRkIGEgbG9naWNhbCBwYXJ0aXRpb24gdG8gJXMsIGJlY2F1c2UgdGhlcmUgaXMgbm8gZXh0ZW5kZWQgcGFydGl0aW9uLiIKK21zZ3N0ciAi08nT2sO709DAqdW5t9bH+KOszt63qL2rwt+8rbfWx/jM7bzTtb0gJXOhoyIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNjgwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJDYW4ndCBoYXZlIG1vcmUgdGhhbiBvbmUgZXh0ZW5kZWQgcGFydGl0aW9uIG9uICVzLiIKK21zZ3N0ciAiJXMgyc+yu8TcuqzT0Lbg09rSu7j2wKnVubfWx/giCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTY5MAorbXNnaWQgIkNhbid0IGhhdmUgbG9naWNhbCBwYXJ0aXRpb25zIG91dHNpZGUgb2YgdGhlIGV4dGVuZGVkIHBhcnRpdGlvbi4iCittc2dzdHIgIsLfvK231sf4srvE3LSm09rAqdW5t9bH+NauzeKhoyIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbid0IGhhdmUgYSBsb2dpY2FsIHBhcnRpdGlvbiBvdXRzaWRlIG9mIHRoZSBleHRlbmRlZCBwYXJ0aXRpb24gb24gJXMuIgorbXNnc3RyICIlcyDJz7XEwt+8rbfWx/iyu8TctKbT2sCp1bm31sf41q7N4qGjIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE3MjUgbGlicGFydGVkL2Rpc2suYzoxNzc5IGxpYnBhcnRlZC9kaXNrLmM6MTk0NQorIywgZnV6enkKK21zZ2lkICJDYW4ndCBoYXZlIG92ZXJsYXBwaW5nIHBhcnRpdGlvbnMuIgorbXNnc3RyICK31sf4srvE3NbYtf4iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTczMworbXNnaWQgIkNhbid0IGhhdmUgYSBwcmltYXJ5IHBhcnRpdGlvbiBpbnNpZGUgYW4gZXh0ZW5kZWQgcGFydGl0aW9uLiIKK21zZ3N0ciAiwKnVubfWx/jW0LK7xNy6rNPQ1ve31sf4oaMiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE0MAorbXNnaWQgIm1ldGFkYXRhIgorbXNnc3RyICLUqsr9vt0iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE0MgorbXNnaWQgImZyZWUiCittc2dzdHIgIr/Vz9C/1bzkIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNDQgcGFydGVkL3VpLmM6MTE2OSBwYXJ0ZWQvdWkuYzoxMTk3Cittc2dpZCAiZXh0ZW5kZWQiCittc2dzdHIgIsCp1bm31sf4IgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNDYgcGFydGVkL3VpLmM6MTE3MyBwYXJ0ZWQvdWkuYzoxMjAxCittc2dpZCAibG9naWNhbCIKK21zZ3N0ciAiwt+8rbfWx/giCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE0OCBwYXJ0ZWQvdWkuYzoxMTY1IHBhcnRlZC91aS5jOjExOTMKK21zZ2lkICJwcmltYXJ5IgorbXNnc3RyICLW97fWx/giCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE2NAorbXNnaWQgImJvb3QiCittc2dzdHIgIsb0tq8iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE2NgorbXNnaWQgInJvb3QiCittc2dzdHIgIrj5IgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNjgKK21zZ2lkICJzd2FwIgorbXNnc3RyICK21Lu7t9bH+CIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTcwCittc2dpZCAiaGlkZGVuIgorbXNnc3RyICLS/rLYt9bH+CIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTcyCittc2dpZCAicmFpZCIKK21zZ3N0ciAicmFpZCIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTc0Cittc2dpZCAibHZtIgorbXNnc3RyICJsdm0iCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE3NgorbXNnaWQgImxiYSIKK21zZ3N0ciAibGJhIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNzgKK21zZ2lkICJocC1zZXJ2aWNlIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE4MAorbXNnaWQgInBhbG8iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTgyCittc2dpZCAicHJlcCIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxODQKK21zZ2lkICJtc2Z0cmVzIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE5MAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIHBhcnRpdGlvbiBmbGFnLCAlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjc4Cittc2dpZCAiSW5mb3JtYXRpb24iCittc2dzdHIgItDFz6IiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo3OQorbXNnaWQgIldhcm5pbmciCittc2dzdHIgIr6vuOYiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4MAorbXNnaWQgIkVycm9yIgorbXNnc3RyICK07c7zIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODEKK21zZ2lkICJGYXRhbCIKK21zZ3N0ciAi1sLD/LTtzvMiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4MgorbXNnaWQgIkJ1ZyIKK21zZ3N0ciAiQnVnIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODMKK21zZ2lkICJObyBJbXBsZW1lbnRhdGlvbiIKK21zZ3N0ciAizrTKtc/WIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODcKK21zZ2lkICJGaXgiCittc2dzdHIgItDe1f0iCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4OAorbXNnaWQgIlllcyIKK21zZ3N0ciAiysciCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4OQorbXNnaWQgIk5vIgorbXNnc3RyICK38SIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjkwCittc2dpZCAiT0siCittc2dzdHIgIsi3yM8iCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo5MQorbXNnaWQgIlJldHJ5IgorbXNnc3RyICLW2MrUIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6OTIKK21zZ2lkICJJZ25vcmUiCittc2dzdHIgIrr2wtQiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo5MworbXNnaWQgIkNhbmNlbCIKK21zZ3N0ciAit8XG+iIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjEzMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIkEgYnVnIGhhcyBiZWVuIGRldGVjdGVkIGluIEdOVSBQYXJ0ZWQuICBSZWZlciB0byB0aGUgd2ViIHNpdGUgb2YgcGFydGVkICIKKyJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvcGFydGVkL3BhcnRlZC5odG1sIGZvciBtb3JlIGluZm9ybWF0aW9ucyBvZiB3aGF0ICIKKyJjb3VsZCBiZSB1c2VmdWwgZm9yIGJ1ZyBzdWJtaXR0aW5nISAgUGxlYXNlIGVtYWlsIGEgYnVnIHJlcG9ydCB0byBidWctIgorInBhcnRlZEBnbnUub3JnIGNvbnRhaW5pbmcgYXQgbGVhc3QgdGhlIHZlcnNpb24gKCVzKSBhbmQgdGhlIGZvbGxvd2luZyAiCisibWVzc2FnZTogICIKK21zZ3N0ciAiIgorIreiz9YgR05VIFBhcnRlZCDW0LXEIGJ1Z6Gjx+u9q7qs09Cw5rG+ICglcykgus3S1M/C0MXPorXEIGJ1ZyCxqLjmt6LLzbW9IGJ1Zy0iCisicGFydGVkQGdudS5vcmejuiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzozODQKK21zZ2lkICJDb3VsZCBub3QgZGV0ZWN0IGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAizt63qLzssuLOxLz+z7XNs6GjIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjM5NQorIywgZnV6enkKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gaXMgYmlnZ2VyIHRoYW4gaXRzIHZvbHVtZSEiCittc2dzdHIgIs7EvP7Ptc2zscjL/LXEvu27ubTzo6EiCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NDAzCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnQgZm9yIG9wZW5pbmcgJXMgZmlsZSBzeXN0ZW1zIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICK52NPatPK/qiAlcyDOxLz+z7XNs7XE1qez1snQzrTKtc/WoaMiCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnQgZm9yIGNyZWF0aW5nICVzIGZpbGUgc3lzdGVtcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiudjT2rS0vaggJXMgzsS8/s+1zbO1xNans9bJ0M60yrXP1qGjIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjUwNQorIywgYy1mb3JtYXQKK21zZ2lkICJTdXBwb3J0IGZvciBjaGVja2luZyAlcyBmaWxlIHN5c3RlbXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIrnY09q87LLpICVzIM7EvP7Ptc2ztcTWp7PWydDOtMq1z9ahoyIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo1NzEKK21zZ2lkICJyYXcgYmxvY2sgY29weWluZyIKK21zZ3N0ciAi1K3KvL/puLTWxiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo1ODIKK21zZ2lkICJncm93aW5nIGZpbGUgc3lzdGVtIgorbXNnc3RyICLV/dTawKm0887EvP7Ptc2zIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjYyMgorbXNnaWQgIkNhbid0IGNvcHkgb250byBhbiBvdmVybGFwcGluZyBwYXJ0aXRpb24uIgorbXNnc3RyICLO3reouLTWxrW91ti1/rXEt9bH+KGjIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjY0NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIkRpcmVjdCBzdXBwb3J0IGZvciBjb3B5aW5nIGZpbGUgc3lzdGVtcyBpcyBub3QgeWV0IGltcGxlbWVudGVkIGZvciAlcy4gICIKKyJIb3dldmVyLCBzdXBwb3J0IGZvciByZXNpemluZyBpcyBpbXBsZW1lbnRlZC4gIFRoZXJlZm9yZSwgdGhlIGZpbGUgc3lzdGVtICIKKyJjYW4gYmUgY29waWVkIGlmIHRoZSBuZXcgcGFydGl0aW9uIGlzIGF0IGxlYXN0IGFzIGJpZyBhcyB0aGUgb2xkIG9uZS4gIFNvLCAiCisiZWl0aGVyIHNocmluayB0aGUgcGFydGl0aW9uIHlvdSBhcmUgdHJ5aW5nIHRvIGNvcHksIG9yIGNvcHkgdG8gYSBiaWdnZXIgIgorInBhcnRpdGlvbi4iCittc2dzdHIgIiIKKyK21CAlcyDAtMu1ydCyu9ans9bWsb3TtcTOxLz+z7XNs7i01saho7Wr1qez1rjEseS089ChoaPS8rTLo6zWu9Kq0MK31sf4scjUrbfWIgorIsf4tPOjrL7NxNy5u7i01sbOxLz+z7XNs6Gjy/nS1KOsy/XQocT6ytTNvLi01sa1xLfWx/ijrLvyuLTWxrW9vc+087XEt9bH+KGjIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjY1OAorIywgYy1mb3JtYXQKK21zZ2lkICJTdXBwb3J0IGZvciBjb3B5aW5nICVzIGZpbGUgc3lzdGVtcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiudjT2ri01sYgJXMgzsS8/s+1zbO1xNans9bJ0M60yrXP1qGjIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjY5NgorIywgYy1mb3JtYXQKK21zZ2lkICJTdXBwb3J0IGZvciByZXNpemluZyAlcyBmaWxlIHN5c3RlbXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIrjEseQgJXMgzsS8/s+1zbO1xNans9bJ0M60yrXP1qGjIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzozMTUKK21zZ2lkICJjcmVhdGluZyIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0MDIKKyMsIGZ1enp5Cittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIGlzIGluIGFuIGludmFsaWQgc3RhdGUuICBQZXJoYXBzIGl0IGlzIG1vdW50ZWQ/IgorbXNnc3RyICLOxLz+z7XNs7HIy/y1xL7tu7m086OhIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0MTAKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gaXMgaW4gb2xkICh1bnJlc2l6ZWFibGUpIGZvcm1hdC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDE2Cittc2dpZCAiSW52YWxpZCBmcmVlIGJsb2NrcyBjb3VudC4gIFJ1biByZWlzZXJmc2NrIC0tY2hlY2sgZmlyc3QuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQzMQorIywgZnV6enkKK21zZ2lkICJjaGVja2luZyIKK21zZ3N0ciAivOyy6SIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDM3Cittc2dpZCAiUmVpc2VyZnMgdHJlZSBzZWVtcyB0byBiZSBjb3JydXB0ZWQuICBSdW4gcmVpc2VyZnNjayAtLWNoZWNrIGZpcnN0LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0NDkKKyMsIGZ1enp5Cittc2dpZCAiIgorIlRoZSByZWlzZXJmcyBmaWxlIHN5c3RlbSBwYXNzZWQgYSBiYXNpYyBjaGVjay4gIEZvciBhIG1vcmUgY29tcHJlaGVuc2l2ZSAiCisiY2hlY2ssIHJ1biByZWlzZXJmc2NrIC0tY2hlY2suIgorbXNnc3RyICJleHQyIM7EvP7Ptc2zzai5/bv5sb687LLpoaPWwdPauPy4utTYtcS87LLpo6zKudPDIGUyZnNjayCzzNDyoaMiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQ3NAorIywgZnV6enkKK21zZ2lkICJTb3JyeSwgY2FuJ3QgbW92ZSB0aGUgc3RhcnQgb2YgcmVpc2VyZnMgcGFydGl0aW9ucyB5ZXQuIgorbXNnc3RyICK07c7zo6zJ0M7et6jSxravIGV4dDIgt9bH+LXExvC146OhIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0OTAKK21zZ2lkICJDb3VsZG4ndCByZW9wZW4gZGV2aWNlIGFic3RyYWN0aW9uIGxheWVyIGZvciByZWFkL3dyaXRlLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo1MDggbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo1NTIKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MjUwIGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NjI5Cittc2dpZCAic2hyaW5raW5nIgorbXNnc3RyICLV/dTay/XQoSIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NTIwCisjLCBmdXp6eQorbXNnaWQgImV4cGFuZGluZyIKK21zZ3N0ciAivq+45iIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NTkyCittc2dpZCAiQ291bGRuJ3QgY3JlYXRlIHJlaXNlcmZzIGRldmljZSBhYnN0cmFjdGlvbiBoYW5kbGVyLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo2MDYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkRldmljZSBpcyB0b28gc21hbGwgZm9yICVsdSBibG9ja3MuIgorbXNnc3RyICK21CBleHQyIMC0y7XOxLz+z7XNs7n90KGhoyIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NjE1Cittc2dpZCAiY29weWluZyIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo2ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgcmVzb2x2ZSBzeW1ib2wgJXMuICBFcnJvcjogJXMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjcwNAorbXNnaWQgIkdOVSBQYXJ0ZWQgZm91bmQgYW4gaW52YWxpZCBsaWJyZWlzZXJmcyBsaWJyYXJ5LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo3MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkdOVSBQYXJ0ZWQgaGFzIGRldGVjdGVkIGxpYnJlaXNlcmZzIGludGVyZmFjZSB2ZXJzaW9uIG1pc21hdGNoLiAgRm91bmQgJWQtJSIKKyJkLCByZXF1aXJlZCAlZC4gUmVpc2VyRlMgc3VwcG9ydCB3aWxsIGJlIGRpc2FibGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2FpeC5jOjEzNworIywgZnV6enkKK21zZ2lkICJTdXBwb3J0IGZvciByZWFkaW5nIEFJWCBkaXNrIGxhYmVscyBpcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiudjT2rS0vaggJXMgzsS8/s+1zbO1xNans9bJ0M60yrXP1qGjIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2FpeC5jOjE0OAorIywgZnV6enkKK21zZ2lkICJTdXBwb3J0IGZvciB3cml0aW5nIEFJWCBkaXNrIGxhYmVscyBpcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiudjT2rS0vaggJXMgzsS8/s+1zbO1xNans9bJ0M60yrXP1qGjIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2FpeC5jOjE2MQorIywgZnV6enkKK21zZ2lkICIiCisiU3VwcG9ydCBmb3IgYWRkaW5nIHBhcnRpdGlvbnMgdG8gQUlYIGRpc2sgbGFiZWxzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICK52NPatLS9qCAlcyDOxLz+z7XNs7XE1qez1snQzrTKtc/WoaMiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYWl4LmM6MTcxCisjLCBmdXp6eQorbXNnaWQgIiIKKyJTdXBwb3J0IGZvciBkdXBsaWNhdGluZyBwYXJ0aXRpb25zIGluIEFJWCBkaXNrIGxhYmVscyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAiudjT2rS0vaggJXMgzsS8/s+1zbO1xNans9bJ0M60yrXP1qGjIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2FpeC5jOjE4OQorIywgZnV6enkKK21zZ2lkICIiCisiU3VwcG9ydCBmb3Igc2V0dGluZyBzeXN0ZW0gdHlwZSBvZiBwYXJ0aXRpb25zIGluIEFJWCBkaXNrIGxhYmVscyBpcyBub3QgIgorImltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIrnY09q0tL2oICVzIM7EvP7Ptc2ztcTWp7PWydDOtMq1z9ahoyIKKworIzogbGlicGFydGVkL2xhYmVscy9haXguYzoxOTkKKyMsIGZ1enp5Cittc2dpZCAiU3VwcG9ydCBmb3Igc2V0dGluZyBmbGFncyBpbiBBSVggZGlzayBsYWJlbHMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIrnY09q0tL2oICVzIM7EvP7Ptc2ztcTWp7PWydDOtMq1z9ahoyIKKworIzogbGlicGFydGVkL2xhYmVscy9ic2QuYzo1MDEgbGlicGFydGVkL2xhYmVscy9kYXNkLmM6NzU1CisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rvcy5jOjE5NzQgbGlicGFydGVkL2xhYmVscy9kdmguYzo3NzAKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6MTQ0OCBsaWJwYXJ0ZWQvbGFiZWxzL2xvb3AuYzoyNDgKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6MTQwOCBsaWJwYXJ0ZWQvbGFiZWxzL3BjOTguYzo3NTkKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6MTA0MSBsaWJwYXJ0ZWQvbGFiZWxzL3N1bi5jOjcwNQorbXNnaWQgIlVuYWJsZSB0byBzYXRpc2Z5IGFsbCBjb25zdHJhaW50cyBvbiB0aGUgcGFydGl0aW9uLiIKK21zZ3N0ciAizt63qML61+O31sf4tcTL+dPQz97WxqGjIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2JzZC5jOjUyNgorIywgZnV6enkKK21zZ2lkICJVbmFibGUgdG8gYWxsb2NhdGUgYSBic2QgZGlza2xhYmVsIHNsb3QuIgorbXNnc3RyICLIobeotqjOuyBic2QgtMXFzLHqx6my2yIKKworIzogbGlicGFydGVkL2xhYmVscy9kYXNkLmM6MTY2CisjLCBmdXp6eQorbXNnaWQgIlVuYWJsZSB0byBkZXRlcm1pbmUgdGhlIGJsb2NrIHNpemUgb2YgdGhpcyBkYXNkIgorbXNnc3RyICLO3reoyLe2qCAlcyAoJXMpILXEtPPQoSIKKworIzogbGlicGFydGVkL2xhYmVscy9kYXNkLmM6NzgxCisjLCBmdXp6eQorbXNnaWQgIlVuYWJsZSB0byBhbGxvY2F0ZSBhIGRhc2QgZGlza2xhYmVsIHNsb3QiCittc2dzdHIgIsiht6i2qM67IGJzZCC0xcXMserHqbLbIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rvcy5jOjgyNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBwYXJ0aXRpb24gdGFibGUgb24gJXMgLS0gd3Jvbmcgc2lnbmF0dXJlICV4LiIKK21zZ3N0ciAiJXMgyc+1xLfWx/ix7c7e0KcgLSC07c7ztcTHqcP7ICV4IgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rvcy5jOjg1NQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHBhcnRpdGlvbiB0YWJsZSAtIHJlY3Vyc2l2ZSBwYXJ0aXRpb24gb24gJXMuIgorbXNnc3RyICLO3tCntcS31sf4se0gLSAlcyCz9s/Wtd256bfWx/ihoyIKKworIzogbGlicGFydGVkL2xhYmVscy9kb3MuYzoxMzE4Cittc2dpZCAiRXh0ZW5kZWQgcGFydGl0aW9ucyBjYW5ub3QgYmUgaGlkZGVuIG9uIG1zZG9zIGRpc2sgbGFiZWxzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rvcy5jOjE5NTgKK21zZ2lkICJQYXJ0ZWQgY2FuJ3QgcmVzaXplIHBhcnRpdGlvbnMgbWFuYWdlZCBieSBXaW5kb3dzIER5bmFtaWMgRGlzay4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9kdmguYzoxOTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyBubyBleHRlbmRlZCBwYXJ0aXRpb24gKHZvbHVtZSBoZWFkZXIgcGFydGl0aW9uKS4iCittc2dzdHIgIiVzIMO709DAqdW5t9bH+CAovu3Nt7fWx/gpoaPI57n7xPq69sLUo6y9q8m+s/3L+dPQxvS2r77toaMiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6MzEzCittc2dpZCAiQ2hlY2tzdW0gaXMgd3JvbmcsIGluZGljYXRpbmcgdGhlIHBhcnRpdGlvbiB0YWJsZSBpcyBjb3JydXB0LiIKK21zZ3N0ciAi0KPR6brNtO3O86OsserD97fWx/ix7dLRy/C7taGjIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjYxNgorbXNnaWQgIk9ubHkgcHJpbWFyeSBwYXJ0aXRpb25zIGNhbiBiZSByb290IHBhcnRpdGlvbnMuIgorbXNnc3RyICLWu9PQ1ve31sf4v8nS1MrHuPm31sf4oaMiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6NjMwCittc2dpZCAiT25seSBwcmltYXJ5IHBhcnRpdGlvbnMgY2FuIGJlIHN3YXAgcGFydGl0aW9ucy4iCittc2dzdHIgIta709DW97fWx/i/ydLUyse21Lu7t9bH+KGjIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjY0NAorbXNnaWQgIk9ubHkgbG9naWNhbCBwYXJ0aXRpb25zIGNhbiBiZSBhIGJvb3QgZmlsZS4iCittc2dzdHIgIta709DC37ytt9bH+L/J0tTKx8b0tq/OxLz+oaMiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6NzIxCittc2dpZCAiT25seSBsb2dpY2FsIHBhcnRpdGlvbnMgKGJvb3QgZmlsZXMpIGhhdmUgYSBuYW1lLiIKK21zZ3N0ciAi1rvT0MLfvK231sf4ICjG9LavzsS8/ikg07XT0MP719ahoyIKKworIzogbGlicGFydGVkL2xhYmVscy9kdmguYzo4MTIKK21zZ2lkICJUb28gbWFueSBwcmltYXJ5IHBhcnRpdGlvbnMiCittc2dzdHIgIrn9tuC1xNb3t9bH+CIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEwMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgb3BlbiBlcnJvclxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEwNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgc2VlayBlcnJvclxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgcmVhZCBlcnJvclxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjExMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHdyaXRlIGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAi1NrQtMjrICUyJHMgyrEgJTEkcyIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjExNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgSU9DVEwgZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIEFQSSB2ZXJzaW9uIG1pc21hdGNoXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBVbnN1cHBvcnRlZCBkaXNrIHR5cGVcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFVuc3VwcG9ydGVkIGRpc2sgZm9ybWF0XG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTMwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgRGlzayBpbiB1c2VcbiIKKyIlc1xuIgorbXNnc3RyICIlcyAgJXMgICVzIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBDb25maWcgZmlsZSBzeW50YXggZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFZvbHVtZSBsYWJlbCBpcyBjb3JydXB0ZWQuXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBhIGRhdGEgc2V0IG5hbWUgaXMgY29ycnVwdGVkLlxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjE0NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgc3BhY2UgYWxsb2NhdGlvblxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgZGV2aWNlIHZlcmlmaWNhdGlvbiBmYWlsZWRcbiIKKyJUaGUgc3BlY2lmaWVkIGRldmljZSBpcyBub3QgYSB2YWxpZCBEQVNEIGRldmljZVxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIEZhdGFsIGVycm9yXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjQ1NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIGNvbnRhaW5zIEdQVCBzaWduYXR1cmVzLCBpbmRpY2F0aW5nIHRoYXQgaXQgaGFzIGEgR1BUIHRhYmxlLiAgSG93ZXZlciwgaXQgIgorImRvZXMgbm90IGhhdmUgYSB2YWxpZCBmYWtlIG1zZG9zIHBhcnRpdGlvbiB0YWJsZSwgYXMgaXQgc2hvdWxkLiAgUGVyaGFwcyBpdCAiCisid2FzIGNvcnJ1cHRlZCAtLSBwb3NzaWJseSBieSBhIHByb2dyYW0gdGhhdCBkb2Vzbid0IHVuZGVyc3RhbmQgR1BUIHBhcnRpdGlvbiAiCisidGFibGVzLiAgT3IgcGVyaGFwcyB5b3UgZGVsZXRlZCB0aGUgR1BUIHRhYmxlLCBhbmQgYXJlIG5vdyB1c2luZyBhbiBtc2RvcyAiCisicGFydGl0aW9uIHRhYmxlLiAgSXMgdGhpcyBhIEdQVCBwYXJ0aXRpb24gdGFibGU/IgorbXNnc3RyICIiCisiJXMguqzT0CBHUFQgx6nD+6OsserD98v8uqzT0CBHUFQgse2ho8i7tvijrMv8sqKyu8/x06a4w7XExMfR+bqs09DT0NCntcTOsSAiCisibXNkb3Mgt9bH+LHtoaO/ycTcy/zS0b6ty/C7tSAtIL/JxNzKx7K7wO294iBHUFQgt9bH+LHttcSzzNDytbzWwrXEoaO78tXfxPrJviIKKyKz/cHLIEdQVCCx7aOsz9bU2sq508MgbXNkb3Mgt9bH+LHtoaPV4srHIEdQVCC31sf4se3C8KO/IgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjY0OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvcm1hdCBvZiB0aGUgR1BUIHBhcnRpdGlvbiB0YWJsZSBpcyB2ZXJzaW9uICV4LCB3aGljaCBpcyBuZXdlciB0aGFuICIKKyJ3aGF0IFBhcnRlZCBjYW4gcmVjb2duaXNlLiAgUGxlYXNlIHRlbGwgdXMhICBidWctcGFydGVkQGdudS5vcmciCittc2dzdHIgIiIKKyJHUFQgt9bH+LHttcS48cq9sOaxvs6qICV4o6zL/LHIIFBhcnRlZCDL+cTcyrax8LXEsOaxvtKq0MKho8fruObL387Sw8ejoWJ1Zy0iCisicGFydGVkQGdudS5vcmciCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6Njk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3QgYWxsIG9mIHRoZSBzcGFjZSBhdmFpbGFibGUgdG8gJXMgYXBwZWFycyB0byBiZSB1c2VkLCB5b3UgY2FuIGZpeCB0aGUgR1BUICIKKyJ0byB1c2UgYWxsIG9mIHRoZSBzcGFjZSAoYW4gZXh0cmEgJWxsdSBibG9ja3MpIG9yIGNvbnRpbnVlIHdpdGggdGhlIGN1cnJlbnQgIgorInNldHRpbmc/ICIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjgyNworbXNnaWQgIiIKKyJUaGUgYmFja3VwIEdQVCB0YWJsZSBpcyBub3QgYXQgdGhlIGVuZCBvZiB0aGUgZGlzaywgYXMgaXQgc2hvdWxkIGJlLiAgVGhpcyAiCisibWlnaHQgbWVhbiB0aGF0IGFub3RoZXIgb3BlcmF0aW5nIHN5c3RlbSBiZWxpZXZlcyB0aGUgZGlzayBpcyBzbWFsbGVyLiAgRml4LCAiCisiYnkgbW92aW5nIHRoZSBiYWNrdXAgdG8gdGhlIGVuZCAoYW5kIHJlbW92aW5nIHRoZSBvbGQgYmFja3VwKT8iCittc2dzdHIgIiIKKyKxuLfdIEdQVCCx7bK7z/HTprjDtcTEx9H5s/bP1tTatMXFzLXExKnOsqGj1eK/ycTc0uLOttXixuTL/LLZ1/fPtc2zz+DQxbTFxczQoSIKKyLSu9CpoaPNqLn9vauxuLfd0sa2r7W9xKnOsiAosqLJvrP9vsmxuLfdKSDAtNDe1f2jvyIKKworIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzo4NjIKKyMsIGZ1enp5Cittc2dpZCAiIgorIlRoZSBwcmltYXJ5IEdQVCB0YWJsZSBpcyBjb3JydXB0LCBidXQgdGhlIGJhY2t1cCBhcHBlYXJzIE9LLCBzbyB0aGF0IHdpbGwgYmUgIgorInVzZWQuIgorbXNnc3RyICLW9yBHUFQgse3L8Lu1o6y1q7G4t93Lxrr1ysfV/ci3tcSjrMv50tTKudPDsbi33aGjIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjg3MAorIywgZnV6enkKK21zZ2lkICIiCisiQm90aCB0aGUgcHJpbWFyeSBhbmQgYmFja3VwIEdQVCB0YWJsZXMgYXJlIGNvcnJ1cHQuICBUcnkgbWFraW5nIGEgZnJlc2ggIgorInRhYmxlLCBhbmQgdXNpbmcgUGFydGVkJ3MgcmVzY3VlIGZlYXR1cmUgdG8gcmVjb3ZlciBwYXJ0aXRpb25zLiIKK21zZ3N0ciAiIgorItb3IEdQVCC6zbG4t90gR1BUILa8y/C7tcHLoaPK1M28tLS9qNDCse2yosq508MgUGFydGVkILXEvLG+yLmmxNzS1NDeuLS31sf4IgorIrHtoaMiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6MTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgc2lnbmF0dXJlICV4IGZvciBNYWMgZGlzayBsYWJlbHMuIgorbXNnc3RyICLO3tCntcQgTWFjILTFxcyx6sepx6nD+yAleKGjIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjIyNgorbXNnaWQgIlBhcnRpdGlvbiBtYXAgaGFzIG5vIHBhcnRpdGlvbiBtYXAgZW50cnkhIgorbXNnc3RyICK31sf407PJ5LK7uqzT0LfWx/jTs8nkzPXEv6OhIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyB0b28gc21hbGwgZm9yIGEgTWFjIGRpc2sgbGFiZWwhIgorbXNnc3RyICIlcyC21CBNYWMgtMXFzLHqx6nAtMu1zKvQocHLo6EiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIlBhcnRpdGlvbiAlZCBoYXMgYW4gaW52YWxpZCBzaWduYXR1cmUgJXguIgorbXNnc3RyICK31sf4ICVkILqs09DO3tCntcTHqcP7ICV4oaMiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIlBhcnRpdGlvbiAlZCBoYXMgYW4gaW52YWxpZCBsZW5ndGggb2YgMCBieXRlcyEiCittc2dzdHIgIrfWx/ggJWQguqzT0M7e0Ke1xLOktsggMCDX1r3ao6EiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NTgwCisjLCBmdXp6eQorbXNnaWQgIlRoZSBkYXRhIHJlZ2lvbiBkb2Vzbid0IHN0YXJ0IGF0IHRoZSBzdGFydCBvZiB0aGUgcGFydGl0aW9uLiIKK21zZ3N0ciAiyv2+3cf4sqLOtLTTt9bH+LXExvC147+qyrwiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NTk3CisjLCBmdXp6eQorbXNnaWQgIlRoZSBib290IHJlZ2lvbiBkb2Vzbid0IHN0YXJ0IGF0IHRoZSBzdGFydCBvZiB0aGUgcGFydGl0aW9uLiIKK21zZ3N0ciAixvS2r8f40/Kyos60tNO31sf4tcTG8LXjv6rKvCIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo2MTEKK21zZ2lkICJUaGUgcGFydGl0aW9uJ3MgYm9vdCByZWdpb24gZG9lc24ndCBvY2N1cHkgdGhlIGVudGlyZSBwYXJ0aXRpb24uIgorbXNnc3RyICK31sf4tcTG9Lavx/jT8rKizrTVvNPD1fu49rfWx/ihoyIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo2MjIKK21zZ2lkICJUaGUgcGFydGl0aW9uJ3MgZGF0YSByZWdpb24gZG9lc24ndCBvY2N1cHkgdGhlIGVudGlyZSBwYXJ0aXRpb24uIgorbXNnc3RyICK31sf4tcTK/b7dx/jT8rKizrTVvNPD1fu49rfWx/ihoyIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo2NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldlaXJkIGJsb2NrIHNpemUgb24gZGV2aWNlIGRlc2NyaXB0b3I6ICVkIGJ5dGVzIGlzIG5vdCBkaXZpc2libGUgYnkgNTEyLiIKK21zZ3N0ciAiyeixuMPoyvbW0LP2z9a5xbnWtcS/6bTz0KGjuiVkINfWvdqyu8TcsbsgNTEyINX7s/2hoyIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo2ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBkcml2ZXIgZGVzY3JpcHRvciBzYXlzIHRoZSBwaHlzaWNhbCBibG9jayBzaXplIGlzICVkIGJ5dGVzLCBidXQgTGludXggIgorInNheXMgaXQgaXMgJWQgYnl0ZXMuIgorbXNnc3RyICK0xcXMw+jK9rHtw/fO78Dtv+m089ChzqogJWQg19a92qOstasgTGludXggyM/Oqsv8yscgJWQg19a92qGjIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjczNgorbXNnaWQgIk5vIHZhbGlkIHBhcnRpdGlvbiBtYXAgZm91bmQuIgorbXNnc3RyICLV0rK7tb3T0NCntcS31sf407PJ5KGjIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjc5NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvbmZsaWN0aW5nIHBhcnRpdGlvbiBtYXAgZW50cnkgc2l6ZXMhICBFbnRyeSAxIHNheXMgaXQgaXMgJWQsIGJ1dCBlbnRyeSAlZCAiCisic2F5cyBpdCBpcyAlZCEiCittc2dzdHIgIrfWx/jTs8nkzPXEv7Tz0KGz5c27o6HM9cS/IDEgy7XL/MrHICVko6y1q8z1xL8gJWQgy7XL/MrHICVko6EiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6ODIyCisjLCBmdXp6eQorbXNnaWQgIldlaXJkISAgVGhlcmUgYXJlIDIgcGFydGl0aW9ucyBtYXAgZW50cmllcyEiCittc2dzdHIgIsbmudYgLSDBvbj2t9bH+NOzyeTM9cS/o6EiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6MTM0NworbXNnaWQgIiIKKyJDaGFuZ2luZyB0aGUgbmFtZSBvZiBhIHJvb3Qgb3Igc3dhcCBwYXJ0aXRpb24gd2lsbCBwcmV2ZW50IExpbnV4IGZyb20gIgorInJlY29nbmlzaW5nIGl0IGFzIHN1Y2guIgorbXNnc3RyICK4xLHkuPm31sf4u/K21Lu7t9bH+LXEw/uzxr2rtbzWwiBMaW51eCDO3reoyrax8Mv8oaMiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6MTQ0MworIywgZnV6enkKK21zZ2lkICJDYW4ndCBhZGQgYW5vdGhlciBwYXJ0aXRpb24gLS0gdGhlIHBhcnRpdGlvbiBtYXAgaXMgdG9vIHNtYWxsISIKK21zZ3N0ciAizt63qMztvNPB7dK7uPa31sf4IC0gt9bH+NOzyeS5/dCho6EiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcGM5OC5jOjM1NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBwYXJ0aXRpb24gdGFibGUgb24gJXMuIgorbXNnc3RyICIlcyC1xLfWx/ix7c7e0KciCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcGM5OC5jOjQwNiBsaWJwYXJ0ZWQvbGFiZWxzL3BjOTguYzo0ODQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQYXJ0aXRpb24gJWQgaXNuJ3QgYWxpZ25lZCB0byBjeWxpbmRlciBib3VuZGFyaWVzLiAgVGhpcyBpcyBzdGlsbCAiCisidW5zdXBwb3J0ZWQuIgorbXNnc3RyICK31sf4ICVkILKizrS21Mbrtb3W+cPmsd+956Gj0OjSqsztvNO21Mv8tcTWp7PWoaMiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcGM5OC5jOjc5MQorbXNnaWQgIkNhbid0IGFkZCBhbm90aGVyIHBhcnRpdGlvbi4iCittc2dzdHIgIs7et6jM7bzTxuTL/LfWx/ihoyIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzoxNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBCYWQgY2hlY2tzdW0gb24gYmxvY2sgJWxsdSBvZiB0eXBlICVzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjQ5NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IERpZG4ndCBmaW5kIHJkYiBibG9jaywgc2hvdWxkIG5ldmVyIGhhcHBlbi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo1ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBMb29wIGRldGVjdGVkIGF0IGJsb2NrICVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjYwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IFRoZSAlcyBsaXN0IHNlZW1zIGJhZCBhdCBibG9jayAlcy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo2ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gbGlzdCBiYWQgYmxvY2tzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjY5NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBsaXN0IHBhcnRpdGlvbiBibG9ja3MuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6NzA1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGxpc3QgZmlsZSBzeXN0ZW0gYmxvY2tzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjcxMworIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBsaXN0IGJvb3QgYmxvY2tzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjc0MAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gd3JpdGUgcGFydGl0aW9uIGJsb2NrIGF0ICVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjEwNjkKKyMsIGZ1enp5Cittc2dpZCAiVW5hYmxlIHRvIGFsbG9jYXRlIGEgcGFydGl0aW9uIG51bWJlci4iCittc2dzdHIgItDo0qq31sf4seC6xaGjIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3N1bi5jOjE0NQorbXNnaWQgIkNvcnJ1cHRlZCBTdW4gZGlzayBsYWJlbCBkZXRlY3RlZC4iCittc2dzdHIgIrzssuK1vcvwu7XBy7XEIFN1biC0xcXMserHqaGjIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3N1bi5jOjI2NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBkaXNrIENIUyBnZW9tZXRyeSAoJWQsJWQsJWQpIHJlcG9ydGVkIGJ5IHRoZSBvcGVyYXRpbmcgc3lzdGVtIGRvZXMgbm90ICIKKyJtYXRjaCB0aGUgZ2VvbWV0cnkgc3RvcmVkIG9uIHRoZSBkaXNrIGxhYmVsICglZCwlZCwlZCkuIgorbXNnc3RyICIiCisitMXFzCBDSFMgvLi6zr3hubkgKCVkLCVkLCVkKSDT2rGjtObU2rTFxcyx6sepICglZCwlZCwlZCkg1tC1xLy4us694bm5srvGpcXkoaMiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6Mjg4CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBkaXNrIGxhYmVsIGRlc2NyaWJlcyBhIGRpc2sgYmlnZ2VyIHRoYW4gJXMuIgorbXNnc3RyICK0xcXMserHqcPoyva1xLTFxcy089PaICVzoaMiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6NDQyCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBkaXNrIGhhcyAlZCBjeWxpbmRlcnMsIHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbWF4aW11bSBvZiA2NTUzNi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9zdW4uYzo3MzcKK21zZ2lkICIiCisiVGhlIFdob2xlIERpc2sgcGFydGl0aW9uIGlzIHRoZSBvbmx5IGF2YWlsYWJsZSBvbmUgbGVmdC4gIEdlbmVyYWxseSwgaXQgaXMgIgorIm5vdCBhIGdvb2QgaWRlYSB0byBvdmVyd3JpdGUgdGhpcyBwYXJ0aXRpb24gd2l0aCBhIHJlYWwgb25lLiAgU29sYXJpcyBtYXkgIgorIm5vdCBiZSBhYmxlIHRvIGJvb3Qgd2l0aG91dCBpdCwgYW5kIFNJTE8gKHRoZSBzcGFyYyBib290IGxvYWRlcikgYXBwcmVjaWF0ZXMgIgorIml0IGFzIHdlbGwuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6NzUyCittc2dpZCAiU3VuIGRpc2sgbGFiZWwgaXMgZnVsbC4iCittc2dzdHIgIlN1biC0xcXMserHqdLRwvqhoyIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6MTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBvcGVuaW5nIGRldmljZSAnJXMnIGZhaWxlZC5cbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjE2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgc2Vla2luZyBkZXZpY2UgJyVzJyBmYWlsZWQuXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzoxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHdyaXRpbmcgdG8gZGV2aWNlICclcycgZmFpbGVkLFxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6MTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyByZWFkaW5nIGZyb20gZGV2aWNlICclcycgZmFpbGVkLlxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6MTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhdGFsIGVycm9yXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDE4Cittc2dpZCAiQ291bGQgbm90IHJlYWQgVlRPQyBsYWJlbHMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQyNAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIFZUT0MgRk1UMSBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0MzEKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBWVE9DIEZNVDQgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDM4Cittc2dpZCAiQ291bGQgbm90IHJlYWQgVlRPQyBGTVQ1IERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQ0NQorbXNnaWQgIkNvdWxkIG5vdCByZWFkIFZUT0MgRk1UNyBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0NjIKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgVlRPQyBsYWJlbHMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQ2OAorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBWVE9DIEZNVDEgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDc1Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIFZUT0MgRk1UNCBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0ODIKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgVlRPQyBGTVQ1IERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQ4OQorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBWVE9DIEZNVDcgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xpYnBhcnRlZC5jOjI5NiBsaWJwYXJ0ZWQvbGlicGFydGVkLmM6MzE2Cittc2dpZCAiT3V0IG9mIG1lbW9yeS4iCittc2dzdHIgIsTatOa6xL6hoaMiCisKKyM6IGxpYnBhcnRlZC91bml0LmM6MTM5Cittc2dpZCAiQ2Fubm90IGdldCB1bml0IHNpemUgZm9yIHNwZWNpYWwgdW5pdCAnQ09NUEFDVCcuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC91bml0LmM6Mzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIlwiJXNcIiBoYXMgaW52YWxpZCBzeW50YXggZm9yIGxvY2F0aW9ucy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL3VuaXQuYzozOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIG1heGltdW0gaGVhZCB2YWx1ZSBpcyAlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL3VuaXQuYzo0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIG1heGltdW0gc2VjdG9yIHZhbHVlIGlzICVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvdW5pdC5jOjQxMyBsaWJwYXJ0ZWQvdW5pdC5jOjU0NQorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgbG9jYXRpb24gJXMgaXMgb3V0c2lkZSBvZiB0aGUgZGV2aWNlICVzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvdW5pdC5jOjUyNworbXNnaWQgIkludmFsaWQgbnVtYmVyLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYWZmcy5jOjYzIGxpYnBhcnRlZC9mcy9hbWlnYS9hcGZzLmM6NTYKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hc2ZzLmM6NzAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGFsbG9jYXRlIHBhcnRpdGlvbiBibG9ja1xuIgorbXNnc3RyICLQ6NKqt9bH+LHgusWhoyIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FmZnMuYzo3OCBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXBmcy5jOjcwCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXNmcy5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGFsbG9jYXRlIGJsb2NrXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FmZnMuYzo4MyBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYXBmcy5jOjc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogQ291bGRuJ3QgcmVhZCBib290IGJsb2NrICVsbHVcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYWZmcy5jOjk5IGxpYnBhcnRlZC9mcy9hbWlnYS9hcGZzLmM6ODYKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hc2ZzLmM6OTIgbGlicGFydGVkL2ZzL2FtaWdhL2FzZnMuYzoxMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBDb3VsZG4ndCByZWFkIHJvb3QgYmxvY2sgJWxsdVxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jOjcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGFsbG9jYXRlIGlkIGxpc3QgZWxlbWVudFxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IENvdWxkbid0IHJlYWQgYmxvY2sgJWxsdVxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jOjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEJhZCBjaGVja3N1bSBvbiBibG9jayAlbGx1IG9mIHR5cGUgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzoyMTIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogQ291bGRuJ3Qgd3JpdGUgYmxvY2sgJWRcbiIKK21zZ3N0ciAi1NrQtMjrICUyJHMgyrEgJTEkcyIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6Mjc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGFsbG9jYXRlIGRpc2tfc3BlY2lmaWMgcmRiIGJsb2NrXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6Mjg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRGlkbid0IGZpbmQgcmRiIGJsb2NrLCBzaG91bGQgbmV2ZXIgaGFwcGVuXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6MzE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIHJlYWQgcGFydGl0aW9uIGJsb2NrICVsbHVcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6ODcgbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjExMgorbXNnaWQgIkluY29uc2lzdGVudCBncm91cCBkZXNjcmlwdG9ycyEiCittc2dzdHIgIrK70rvWwrXE1+nD6Mr2t/ujoSIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjkxIGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzoxMTYKKyMsIGZ1enp5Cittc2dpZCAiRmlsZSBzeXN0ZW0gZnVsbCEiCittc2dzdHIgIs7EvP7Ptc2z0tHC+qOhIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6Njg2CisjLCBmdXp6eQorbXNnaWQgIkludmFsaWQgc3VwZXJibG9jay4gIEFyZSB5b3Ugc3VyZSB0aGlzIGlzIGFuIGV4dDIgZmlsZSBzeXN0ZW0/IgorbXNnc3RyICLO3tCntcSzrL/poaPE+si3yM/L/MrH0ru49iBleHQyIM7EvP7Ptc2zo78iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo3MDAgbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo2NTgKKyMsIGZ1enp5Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGVycm9ycyEgIFlvdSBzaG91bGQgcnVuIGUyZnNjay4iCittc2dzdHIgIs7EvP7Ptc2ztO3O86OhxPrTprjD1MvQ0CBlMmZzY2uhoyIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjcxMQorIywgZnV6enkKK21zZ2lkICIiCisiRmlsZSBzeXN0ZW0gd2FzIG5vdCBjbGVhbmx5IHVubW91bnRlZCEgIFlvdSBzaG91bGQgcnVuIGUyZnNjay4gIE1vZGlmeWluZyBhbiAiCisidW5jbGVhbiBmaWxlIHN5c3RlbSBjb3VsZCBjYXVzZSBzZXZlcmUgY29ycnVwdGlvbi4iCittc2dzdHIgIiIKKyLOxLz+z7XNs8O709Cxu7jJvru12NC21NijocT606a4w9TL0NAgZTJmc2NroaPQ3rjEsru4yb67tcTOxLz+z7XNs72rtbzWwtHP1ti1xCIKKyLL8Lu1oaMiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo3MzEKKyMsIGZ1enp5Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGluY29tcGF0aWJsZSBmZWF0dXJlIGVuYWJsZWQuIgorbXNnc3RyICLOxLz+z7XNs8b008PBy7K7vObI3bXEuabE3CIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjc0MgorbXNnaWQgIkVycm9yIGFsbG9jYXRpbmcgYnVmZmVyIGNhY2hlLiIKK21zZ3N0ciAit9bF5Lu6s+XH+CBjYWNoZSC07c7zoaMiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfaW5vZGVfcmVsb2NhdG9yLmM6MTE0CisjLCBmdXp6eQorbXNnaWQgIiIKKyJGb3VuZCBhbiBpbm9kZSB3aXRoIGEgaW5jb3JyZWN0IGxpbmsgY291bnQuICBCZXR0ZXIgZ28gcnVuIGUyZnNjayBmaXJzdCEiCittc2dzdHIgItXStb20+NPQtO3O88GsvdO8xsr9tcQgaW5vZGWho9fuusPPyNTL0NAgZTJmc2NroaMiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfaW5vZGVfcmVsb2NhdG9yLmM6NDg3Cittc2dpZCAiTm90IGVub3VnaCBmcmVlIGlub2RlcyEiCittc2dzdHIgIsO709DX47m7tcS/1c/QIGlub2Rlc6OhIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjIyMworIywgZnV6enkKK21zZ2lkICJGaWxlIHN5c3RlbSBpcyB0b28gZnVsbCB0byByZW1vdmUgYSBncm91cCEiCittc2dzdHIgIs7EvP7Ptc2zsbu5/bbJ1bzTw9LU1sLO3reoyb6z/dfpo6EiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6MjMyCisjLCBmdXp6eQorbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyB0b28gbWFueSBhbGxvY2F0ZWQgaW5vZGVzIHRvIHJlbW92ZSBhIGdyb3VwISIKK21zZ3N0ciAizsS8/s+1zbPW0NLRyrnTw7XEIGlub2RlILn9tuDS1NbCzt63qMm+s/3X6aOhIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjQ5MQorbXNnaWQgImFkZGluZyBncm91cHMiCittc2dzdHIgIsztvNPX6SIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo1MjgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIllvdXIgZmlsZSBzeXN0ZW0gaXMgdG9vIGZ1bGwgdG8gcmVzaXplIGl0IHRvICVpIGJsb2Nrcy4gIFNvcnJ5LiIKK21zZ3N0ciAixPq1xM7EvP7Ptc2zsbu5/bbJ1bzTw9LU1sLO3reovavL/LXEtPPQobjEseTOqiAlaSC49r/poaOxp8e4oaMiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NTM4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBmaWxlIHN5c3RlbSBoYXMgdG9vIG1hbnkgb2NjdXBpZWQgaW5vZGVzIHRvIHJlc2l6ZSBpdCB0byAlaSBibG9ja3MuICAiCisiU29ycnkuIgorbXNnc3RyICIiCisixPq1xM7EvP7Ptc2z1tDS0cq508O1xCBpbm9kZSC5/bbg0tTWws7et6i9q8bktPPQobjEseTOqiAlaSC49r/poaOxp8e4oaMiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NjY2CisjLCBmdXp6eQorbXNnaWQgIkZpbGUgc3lzdGVtIHdhcyBub3QgY2xlYW5seSB1bm1vdW50ZWQhICBZb3Ugc2hvdWxkIHJ1biBlMmZzY2suIgorbXNnc3RyICLOxLz+z7XNs8O709C4yb67tdjQttTYo6HE+tOmuMPUy9DQIGUyZnNja6GjIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjY3NQorbXNnaWQgIiIKKyJUaGUgZmlsZSBzeXN0ZW0gaGFzIHRoZSAnZGlyX2luZGV4JyBmZWF0dXJlIGVuYWJsZWQuICBQYXJ0ZWQgY2FuIG9ubHkgcmVzaXplICIKKyJ0aGUgZmlsZSBzeXN0ZW0gaWYgaXQgZGlzYWJsZXMgdGhpcyBmZWF0dXJlLiAgWW91IGNhbiBlbmFibGUgaXQgbGF0ZXIgYnkgIgorInJ1bm5pbmcgJ3R1bmUyZnMgLU8gZGlyX2luZGV4IERFVklDRScgYW5kIHRoZW4gJ2UyZnNjayAtZkQgREVWSUNFJy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo2OTEKK21zZ2lkICIiCisiQSByZXNpemUgb3BlcmF0aW9uIG9uIHRoaXMgZmlsZSBzeXN0ZW0gd2lsbCB1c2UgRVhQRVJJTUVOVEFMIGNvZGVcbiIKKyJ0aGF0IE1BWSBDT1JSVVBUIGl0IChhbHRob3VnaCBubyBvbmUgaGFzIHJlcG9ydGVkIGFueSBzdWNoIGRhbWFnZSB5ZXQpLlxuIgorIllvdSBzaG91bGQgYXQgbGVhc3QgYmFja3VwIHlvdXIgZGF0YSBmaXJzdCwgYW5kIHJ1biAnZTJmc2NrIC1mJyBhZnRlcndhcmRzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2Jsb2NrX3JlbG9jYXRvci5jOjE5OAorIywgZnV6enkKK21zZ2lkICJDcm9zcy1saW5rZWQgYmxvY2tzIGZvdW5kISAgQmV0dGVyIGdvIHJ1biBlMmZzY2sgZmlyc3QhIgorbXNnc3RyICK3os/Wvbuy5sGsvdO/6aOh1+66w8/I1MvQ0CBlMmZzY2ujoSIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9ibG9ja19yZWxvY2F0b3IuYzo1MzcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrICVpIGhhcyBubyByZWZlcmVuY2U/ICBXZWlyZC4iCittc2dzdHIgIr/pICVpIMO709DS/dPDo7/G5rnWIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2Jsb2NrX3JlbG9jYXRvci5jOjczNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQmxvY2sgJWkgc2hvdWxkbid0IGhhdmUgYmVlbiBtYXJrZWQgKCVkLCAlZCkhIgorbXNnc3RyICK/6SAlaSCyu9OmuMPS0bG7seq8x6OhIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9pbnRlcmZhY2UuYzoxODYKKyMsIGZ1enp5Cittc2dpZCAiIgorIlRoZSBleHQyIGZpbGUgc3lzdGVtIHBhc3NlZCBhIGJhc2ljIGNoZWNrLiAgRm9yIGEgbW9yZSBjb21wcmVoZW5zaXZlIGNoZWNrLCAiCisidXNlIHRoZSBlMmZzY2sgcHJvZ3JhbS4iCittc2dzdHIgImV4dDIgzsS8/s+1zbPNqLn9u/mxvrzssumho9bB09q4/Li61Ni1xLzssumjrMq508MgZTJmc2NrILPM0PKhoyIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvaW50ZXJmYWNlLmM6MjAzCittc2dpZCAiU29ycnksIGNhbid0IG1vdmUgdGhlIHN0YXJ0IG9mIGV4dDIgcGFydGl0aW9ucyB5ZXQhIgorbXNnc3RyICK07c7zo6zJ0M7et6jSxravIGV4dDIgt9bH+LXExvC146OhIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2J1ZmZlci5jOjgyCittc2dpZCAiQ291bGRuJ3QgZmx1c2ggYnVmZmVyIGNhY2hlISIKK21zZ3N0ciAizt63qMui0MK7urPlx/ggY2FjaGWjoSIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9ta2ZzLmM6MTYyCittc2dpZCAid3JpdGluZyBwZXItZ3JvdXAgbWV0YWRhdGEiCittc2dzdHIgItC0yOvDv7j21+m2vNPQtcTUqsr9vt0iCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfbWtmcy5jOjU2NAorbXNnaWQgIkZpbGUgc3lzdGVtIHRvbyBzbWFsbCBmb3IgZXh0Mi4iCittc2dzdHIgIrbUIGV4dDIgwLTLtc7EvP7Ptc2zuf3QoaGjIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NhbGMuYzoxMzUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgbmVlZCAlcyBvZiBmcmVlIGRpc2sgc3BhY2UgdG8gc2hyaW5rIHRoaXMgcGFydGl0aW9uIHRvIHRoaXMgc2l6ZS4gICIKKyJDdXJyZW50bHksIG9ubHkgJXMgaXMgZnJlZS4iCittc2dzdHIgIiIKKyLE+tDo0qogJWRNILXEv9XP0L/VvOTAtL2rtMu31sf4ytXL9bW91eLSu7Tz0KEgKMT6xL/HsNa709AgJWRNILXEv9XP0L/VvOQpIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvbnRleHQuYzo1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2x1c3RlciBzdGFydCBkZWx0YSA9ICVkLCB3aGljaCBpcyBub3QgYSBtdWx0aXBsZSBvZiB0aGUgY2x1c3RlciBzaXplICVkLiIKK21zZ3N0ciAitNjG8Mq8xqvSxiA9ICVko6yyu8rHtNi089ChICVkILXE1fvK/bG2oaMiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvZmF0LmM6MzA4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJQYXJ0aXRpb24gdG9vIGJpZy9zbWFsbCBmb3IgYSAlcyBmaWxlIHN5c3RlbS4iCittc2dzdHIgIrbU09ogJXMgzsS8/s+1zbPAtMu1o6y31sf4uf2087vyuf3QoSIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9mYXQuYzo0NzQKK21zZ2lkICIiCisiVGhlIEZBVHMgZG9uJ3QgbWF0Y2guICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRoaXMgbWVhbnMsIHRoZW4gc2VsZWN0ICIKKyJjYW5jZWwsIHJ1biBzY2FuZGlzayBvbiB0aGUgZmlsZSBzeXN0ZW0sIGFuZCB0aGVuIGNvbWUgYmFjay4iCittc2dzdHIgIiIKKyJGQVQgsrvGpcXkoaPI57n7xOOyu9aqtcDL/LXEuqzS5aOsx+vRodTxt8XG+qOssqK21M7EvP7Ptc2z1MvQ0CBzY2FuZGlza6Ostvi68yIKKyLU2rvYtb3V4sDvwLShoyIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9mYXQuYzo1MTQKK21zZ2lkICJUaGVyZSBhcmUgbm8gcG9zc2libGUgY29uZmlndXJhdGlvbnMgZm9yIHRoaXMgRkFUIHR5cGUuIgorbXNnc3RyICK21NPatMsgRkFUIMDg0M3Du9PQv8nE3LXExeTWw6GjIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jOjUyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRmlsZSBzeXN0ZW0gZG9lc24ndCBoYXZlIGV4cGVjdGVkIHNpemVzIGZvciBXaW5kb3dzIHRvIGxpa2UgaXQuICBDbHVzdGVyICIKKyJzaXplIGlzICVkayAoJWRrIGV4cGVjdGVkKTsgbnVtYmVyIG9mIGNsdXN0ZXJzIGlzICVkICglZCBleHBlY3RlZCk7IHNpemUgb2YgIgorIkZBVHMgaXMgJWQgc2VjdG9ycyAoJWQgZXhwZWN0ZWQpLiIKK21zZ3N0ciAiIgorIs7EvP7Ptc2ztcS089ChsrvKxyBXaW5kb3dzIMv5z6PN+7XEoaO02LTz0KHOqiAlZGsgKMbazfsgJWRrKaO7tNjK/cG/zqogJWQgKMbaIgorIs37ICVkKaO7RkFUILXEtPPQoc6qICVkIMnIx/ggKMbazfsgJWQpoaMiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvZmF0LmM6NTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGaWxlIHN5c3RlbSBpcyByZXBvcnRpbmcgdGhlIGZyZWUgc3BhY2UgYXMgJWQgY2x1c3RlcnMsIG5vdCAlZCBjbHVzdGVycy4iCittc2dzdHIgIs7EvP7Ptc2zsai45r/Vz9C/1bzkzqogJWQgtNijrLb4srvKxyAlZCC02KGjIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jOjg3NAorIywgZnV6enkKK21zZ2lkICIiCisiR05VIFBhcnRlZCB3YXMgbWlzY29tcGlsZWQ6IHRoZSBGQVQgYm9vdCBzZWN0b3Igc2hvdWxkIGJlIDUxMiBieXRlcy4gIEZBVCAiCisic3VwcG9ydCB3aWxsIGJlIGRpc2FibGVkLiIKK21zZ3N0ciAiR05VIHBhcnRlZCCx4NLrtO3O86O6RkFUIMb0tq/JyMf406bOqiA1MTIg19a92qGjRkFUINans9a9q7G7udix1aGjIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjE1OQorIywgZnV6enkKK21zZ2lkICIiCisiVGhlcmUncyBub3QgZW5vdWdoIHJvb20gaW4gdGhlIHJvb3QgZGlyZWN0b3J5IGZvciBhbGwgb2YgdGhlIGZpbGVzLiAgRWl0aGVyICIKKyJjYW5jZWwsIG9yIGlnbm9yZSB0byBsb3NlIHRoZSBmaWxlcy4iCittc2dzdHIgIrj5xL/CvM/Cw7vT0LGjtObL+dPQzsS8/rXE1+O5u7/VvOSho7fFxvq78tXf0tTL8MqnzsS8/s6qtPq827r2wtShoyIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzozMDAKK21zZ2lkICJFcnJvciB3cml0aW5nIHRvIHRoZSByb290IGRpcmVjdG9yeS4iCittc2dzdHIgItC0yOu4+cS/wry07c7zoaMiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NDg5CisjLCBmdXp6eQorbXNnaWQgIklmIHlvdSBsZWF2ZSB5b3VyIGZpbGUgc3lzdGVtIGFzIEZBVDE2LCB0aGVuIHlvdSB3aWxsIGhhdmUgbm8gcHJvYmxlbXMuIgorbXNnc3RyICLI57n7vavE+rXEzsS8/s+1zbPA4NDNsaOz1iBGQVQxNiCyu7Hko6zEx8O0xOO+zbK7u+HT0M7KzOKhoyIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo0OTIKK21zZ2lkICIiCisiSWYgeW91IGNvbnZlcnQgdG8gRkFUMTYsIGFuZCBNUyBXaW5kb3dzIGlzIGluc3RhbGxlZCBvbiB0aGlzIHBhcnRpdGlvbiwgdGhlbiAiCisieW91IG11c3QgcmUtaW5zdGFsbCB0aGUgTVMgV2luZG93cyBib290IGxvYWRlci4gIElmIHlvdSB3YW50IHRvIGRvIHRoaXMsIHlvdSAiCisic2hvdWxkIGNvbnN1bHQgdGhlIFBhcnRlZCBtYW51YWwgKG9yIHlvdXIgZGlzdHJpYnV0aW9uJ3MgbWFudWFsKS4iCittc2dzdHIgIiIKKyLI57n7xPrXqru7zqogRkFUMTajrLKivasgTVMgV2luZG93cyCwstewtb3V4rj2t9bH+KOsxMfDtMT6sdjQ69bY0MKwstewIE1TICIKKyJXaW5kb3dzIMb0tq+53MDtxveho8jnufvE+rTyy+PV4sO01/ajrMT606a4w7LO1MQgUGFydGVkILXEytay4SAou/LE+rXEt6LQ0LDmIgorIrXEytay4SmhoyIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1MDAKK21zZ2lkICIiCisiSWYgeW91IGxlYXZlIHlvdXIgZmlsZSBzeXN0ZW0gYXMgRkFUMzIsIHRoZW4geW91IHdpbGwgbm90IGludHJvZHVjZSBhbnkgbmV3ICIKKyJwcm9ibGVtcy4iCittc2dzdHIgIsjnufvE+rGjs9bOxLz+z7XNs8Dg0M3OqiBGQVQzMiCyu7Hko6zEx8O0xPq9q7K7u+HT9rW9yM66ztDCzsrM4qGjIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjUwNAorbXNnaWQgIiIKKyJJZiB5b3UgY29udmVydCB0byBGQVQzMiwgYW5kIE1TIFdpbmRvd3MgaXMgaW5zdGFsbGVkIG9uIHRoaXMgcGFydGl0aW9uLCB0aGVuICIKKyJ5b3UgbXVzdCByZS1pbnN0YWxsIHRoZSBNUyBXaW5kb3dzIGJvb3QgbG9hZGVyLiAgSWYgeW91IHdhbnQgdG8gZG8gdGhpcywgeW91ICIKKyJzaG91bGQgY29uc3VsdCB0aGUgUGFydGVkIG1hbnVhbCAob3IgeW91ciBkaXN0cmlidXRpb24ncyBtYW51YWwpLiAgQWxzbywgIgorImNvbnZlcnRpbmcgdG8gRkFUMzIgd2lsbCBtYWtlIHRoZSBmaWxlIHN5c3RlbSB1bnJlYWRhYmxlIGJ5IE1TIERPUywgTVMgIgorIldpbmRvd3MgOTVhLCBhbmQgTVMgV2luZG93cyBOVC4iCittc2dzdHIgIiIKKyLI57n7xPrXqru7zqogRkFUMzKjrLKix9IgTVMgV2luZG93cyCwstew1NrV4rj2t9bH+KOsxMfDtMT6sdjQ69bY0MKwstewIE1TICIKKyJXaW5kb3dzILXExvS2r7ncwO3G96GjyOe5+8T6tPLL49Xi0fnX96OsxPrTprjDss7UxCBQYXJ0ZWQgtcTK1rLhICi78tXfxPq1xLeiIgorItDQsOa1xMrWsuEpoaO0y83io6y9q87EvP7Ptc2z16q7u86qIEZBVDMyo6zOxLz+z7XNs77NsrvE3Lm7sbsgTVMgRE9ToaJNUyAiCisiV2luZG93cyA5NWEgus0gTVMgV2luZG93cyBOVCDL+bfDzsrBy6GjIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjUxOAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyAgJXMgICVzIgorbXNnc3RyICIlcyAgJXMgICVzIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjUxOQorbXNnaWQgIldvdWxkIHlvdSBsaWtlIHRvIHVzZSBGQVQzMj8iCittc2dzdHIgIsT6yse38dS40uLKudPDIEZBVDMyo78iCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTUwIGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzICAlcyIKK21zZ3N0ciAiJXMgICVzIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjU1MQorbXNnaWQgIiIKKyJUaGUgZmlsZSBzeXN0ZW0gY2FuIG9ubHkgYmUgcmVzaXplZCB0byB0aGlzIHNpemUgYnkgY29udmVydGluZyB0byBGQVQxNi4iCittc2dzdHIgIs7EvP7Ptc2ztcS089Ch1rvE3M2ouf3Xqru7zqogRkFUMTYguMSx5LW91eLSu7Tz0KGhoyIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1NjcKK21zZ2lkICIiCisiVGhlIGZpbGUgc3lzdGVtIGNhbiBvbmx5IGJlIHJlc2l6ZWQgdG8gdGhpcyBzaXplIGJ5IGNvbnZlcnRpbmcgdG8gRkFUMzIuIgorbXNnc3RyICLOxLz+z7XNs7XEtPPQoda7xNzNqLn916q7u86qIEZBVDMyILjEseS1vdXi0ru089ChoaMiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTgwCisjLCBmdXp6eQorbXNnaWQgIiIKKyJHTlUgUGFydGVkIGNhbm5vdCByZXNpemUgdGhpcyBwYXJ0aXRpb24gdG8gdGhpcyBzaXplLiAgV2UncmUgd29ya2luZyBvbiBpdCEiCittc2dzdHIgIkdOVSBQYXJ0ZWQgzt63qL2rtMu31sf416q7u7W91eLSu7Tz0KGho87Sw8fV/dTayrXP1sv8o6EiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjQ5IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjU2Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGludmFsaWQgc2lnbmF0dXJlIGZvciBhIEZBVCBmaWxlIHN5c3RlbS4iCittc2dzdHIgIs7EvP7Ptc2zuqzT0M7e0Ke1xCBGQVQgzsS8/s+1zbPHqcP7oaMiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjY0Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGludmFsaWQgc2VjdG9yIHNpemUgZm9yIGEgRkFUIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAizsS8/s+1zbO1xMnIx/i089ChttQgRkFUIM7EvP7Ptc2zwLTLtc7e0KehoyIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6NzEKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgYW4gaW52YWxpZCBjbHVzdGVyIHNpemUgZm9yIGEgRkFUIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAizsS8/s+1zbO1xLTYtPPQobbUIEZBVCDOxLz+z7XNs8C0y7XO3tCnoaMiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjc4CisjLCBmdXp6eQorbXNnaWQgIiIKKyJGaWxlIHN5c3RlbSBoYXMgYW4gaW52YWxpZCBudW1iZXIgb2YgcmVzZXJ2ZWQgc2VjdG9ycyBmb3IgYSBGQVQgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICLOxLz+z7XNs7XEsaPB9MnIx/jK/bbUIEZBVCDOxLz+z7XNs8C0y7XO3tCnoaMiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjg1CisjLCBmdXp6eQorbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyBhbiBpbnZhbGlkIG51bWJlciBvZiBGQVRzLiIKK21zZ3N0ciAizsS8/s+1zbO1xCBGQVRTIMr9wb/O3tCnoaMiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjEzOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhpcyBmaWxlIHN5c3RlbSBoYXMgYSBsb2dpY2FsIHNlY3RvciBzaXplIG9mICVkLiAgR05VIFBhcnRlZCBpcyBrbm93biBub3QgIgorInRvIHdvcmsgcHJvcGVybHkgd2l0aCBzZWN0b3Igc2l6ZXMgb3RoZXIgdGhhbiA1MTIgYnl0ZXMuIgorbXNnc3RyICIiCisitMvOxLz+z7XNs7XEwt+8rcnIx/i089ChzqogJWSho0dOVSBQYXJ0ZWQgsrvE3NTaycjH+LTz0KGyu8rHIDUxMiDX1r3atcTH6b/2z8IiCisi1f3It7mk1/ehoyIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6MTY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZmlsZSBzeXN0ZW0ncyBDSFMgZ2VvbWV0cnkgaXMgKCVkLCAlZCwgJWQpLCB3aGljaCBpcyBpbnZhbGlkLiAgVGhlICIKKyJwYXJ0aXRpb24gdGFibGUncyBDSFMgZ2VvbWV0cnkgaXMgKCVkLCAlZCwgJWQpLiAgSWYgeW91IHNlbGVjdCBJZ25vcmUsIHRoZSAiCisiZmlsZSBzeXN0ZW0ncyBDSFMgZ2VvbWV0cnkgd2lsbCBiZSBsZWZ0IHVuY2hhbmdlZC4gIElmIHlvdSBzZWxlY3QgRml4LCB0aGUgIgorImZpbGUgc3lzdGVtJ3MgQ0hTIGdlb21ldHJ5IHdpbGwgYmUgc2V0IHRvIG1hdGNoIHRoZSBwYXJ0aXRpb24gdGFibGUncyBDSFMgIgorImdlb21ldHJ5LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzoyMTMKK21zZ2lkICJGQVQgYm9vdCBzZWN0b3Igc2F5cyBsb2dpY2FsIHNlY3RvciBzaXplIGlzIDAuICBUaGlzIGlzIHdlaXJkLiAiCittc2dzdHIgIkZBVCDG9LavycjH+Mn5s8bC37ytycjH+LXEtPPQoc6qweOho9XiutzG5rnWoaMiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjIxOQorbXNnaWQgIkZBVCBib290IHNlY3RvciBzYXlzIHRoZXJlIGFyZSBubyBGQVQgdGFibGVzLiAgVGhpcyBpcyB3ZWlyZC4gIgorbXNnc3RyICJGQVQgxvS2r8nIx/jJ+bPGw7vT0CBGQVQgse2ho9XiutzG5rnWoaMiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjIyNQorbXNnaWQgIkZBVCBib290IHNlY3RvciBzYXlzIGNsdXN0ZXJzIGFyZSAwIHNlY3RvcnMuICBUaGlzIGlzIHdlaXJkLiAiCittc2dzdHIgIkZBVCDG9LavycjH+Mn5s8bX5MrHwePJyMf4oaPV4rrcxua51qGjIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzoyMzUKKyMsIGZ1enp5Cittc2dpZCAiRmlsZSBzeXN0ZW0gaXMgRkFUMTIsIHdoaWNoIGlzIHVuc3VwcG9ydGVkLiIKK21zZ3N0ciAizsS8/s+1zbPOqiBGQVQxMqOssrvWp7PWoaMiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjQxMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGluZm9ybWF0aW9uIHNlY3RvciBoYXMgdGhlIHdyb25nIHNpZ25hdHVyZSAoJXgpLiAgU2VsZWN0IGNhbmNlbCBmb3Igbm93LCAiCisiYW5kIHNlbmQgaW4gYSBidWcgcmVwb3J0LiAgSWYgeW91J3JlIGRlc3BlcmF0ZSwgaXQncyBwcm9iYWJseSBzYWZlIHRvIGlnbm9yZS4iCittc2dzdHIgIiIKKyLQxc+iycjH+LXEx6nD+7TtzvMgKCV4KaGjz9bU2tGh1PG3xcb6o6yyoreiy80gYnVnILGouOaho8jnufvE+rK7ucvSu8fQo6zRodTxIgorIrr2wtTT0L/JxNzKx6GwsLLIq6GxtcShoyIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb3VudC5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgZGlyZWN0b3J5IGVudHJ5IGZvciAlczogZmlyc3QgY2x1c3RlciBpcyB0aGUgZW5kIG9mIGZpbGUgbWFya2VyLiIKK21zZ3N0ciAiJXMgtcTEv8K8zPXEv7TtzvOjurXa0ru49rTYvs3Kx87EvP6x6ta+tcS94cr4oaMiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY291bnQuYzoxNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkJhZCBGQVQ6IHVudGVybWluYXRlZCBjaGFpbiBmb3IgJXMuICBZb3Ugc2hvdWxkIHJ1biBkb3Nmc2NrIG9yIHNjYW5kaXNrLiIKK21zZ3N0ciAitO3O87XEIEZBVKO6JXMgtcTBtM601tXWuaGjxPrTprjD1MvQ0CBkb3Nmc2NrILvyIHNjYW5kaXNroaMiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY291bnQuYzoxNzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJCYWQgRkFUOiBjbHVzdGVyICVkIG91dHNpZGUgZmlsZSBzeXN0ZW0gaW4gY2hhaW4gZm9yICVzLiAgWW91IHNob3VsZCBydW4gIgorImRvc2ZzY2sgb3Igc2NhbmRpc2suIgorbXNnc3RyICIiCisitO3O87XEIEZBVKO61NolMiRzILXEwbTW0KOstNggJTEkZCC0ptPazsS8/s+1zbPWrs3ioaPE+tOmuMPUy9DQIGRvc2ZzY2sgu/IgIgorInNjYW5kaXNroaMiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY291bnQuYzoxODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkJhZCBGQVQ6IGNsdXN0ZXIgJWQgaXMgY3Jvc3MtbGlua2VkIGZvciAlcy4gIFlvdSBzaG91bGQgcnVuIGRvc2ZzY2sgb3IgIgorInNjYW5kaXNrLiIKK21zZ3N0ciAitO3O87XEIEZBVKO6tNggJWQgzawgJXMgtcTBtL27subBy6GjxPrTprjD1MvQ0CBkb3Nmc2NrILvyIHNjYW5kaXNroaMiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY291bnQuYzoyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgJWRrLCBidXQgaXQgaGFzICVkIGNsdXN0ZXJzICglZGspLiIKK21zZ3N0ciAiJXMgzqogJWRro6y1q7qs09AgJWQguPa02CAoJWRrKaGjIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvdW50LmM6MjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZmlsZSAlcyBpcyBtYXJrZWQgYXMgYSBzeXN0ZW0gZmlsZS4gIFRoaXMgbWVhbnMgbW92aW5nIGl0IGNvdWxkIGNhdXNlICIKKyJzb21lIHByb2dyYW1zIHRvIHN0b3Agd29ya2luZy4iCittc2dzdHIgIs7EvP4gJXMgsbux6rzHzqrPtc2zzsS8/qGj1eLS4s6218XSxravy/y/ycTctbzWwsSz0KmzzNDyzaPWubmk1/ehoyIKKworIzogbGlicGFydGVkL2ZzL2ZhdC90YWJsZS5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRkFUICVkIG1lZGlhICV4IGRvZXNuJ3QgbWF0Y2ggdGhlIGJvb3Qgc2VjdG9yJ3MgbWVkaWEgJXguICBZb3Ugc2hvdWxkICIKKyJwcm9iYWJseSBydW4gc2NhbmRpc2suIgorbXNnc3RyICIiCisiRkFUICVkIMO9zOUgJXggus3G9LavycjH+Mv51Nq1xMO9zOUgJXggsrvGpcXkoaPE+r/JxNzTprjD1MvQ0CBzY2FuZGlza6GjIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3RhYmxlLmM6MjY5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYXRfdGFibGVfc2V0OiBjbHVzdGVyICVsZCBvdXRzaWRlIGZpbGUgc3lzdGVtIgorbXNnc3RyICJmYXRfdGFibGVfc2V0o7q02CAlbGQgtKbT2s7EvP7Ptc2z1q7N4iIKKworIzogbGlicGFydGVkL2ZzL2ZhdC90YWJsZS5jOjMwMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmF0X3RhYmxlX2dldDogY2x1c3RlciAlbGQgb3V0c2lkZSBmaWxlIHN5c3RlbSIKK21zZ3N0ciAiZmF0X3RhYmxlX2dldKO6tNggJWxkILSm09rOxLz+z7XNs9auzeIiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvdGFibGUuYzozNDMKK21zZ2lkICJmYXRfdGFibGVfYWxsb2NfY2x1c3Rlcjogbm8gZnJlZSBjbHVzdGVycyIKK21zZ3N0ciAiZmF0X3RhYmxlX2FsbG9jX2NsdXN0ZXKjusO709C/1c/QtNgiCisKKyM6IGxpYnBhcnRlZC9mcy9saW51eF9zd2FwL2xpbnV4X3N3YXAuYzoyNzUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVucmVjb2duaXNlZCBvbGQgc3R5bGUgbGludXggc3dhcCBzaWduYXR1cmUgJyUxMHMnLiIKK21zZ3N0ciAizt63qMq2sfC1xCBsaW51eCC21Lu7x6nD+6GwJTEwc6GxoaMiCisKKyM6IGxpYnBhcnRlZC9mcy9saW51eF9zd2FwL2xpbnV4X3N3YXAuYzozMTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVucmVjb2duaXNlZCBuZXcgc3R5bGUgbGludXggc3dhcCBzaWduYXR1cmUgJyUxMHMnLiIKK21zZ3N0ciAizt63qMq2sfC1xCBsaW51eCC21Lu7x6nD+6GwJTEwc6GxoaMiCisKKyM6IGxpYnBhcnRlZC9mcy9saW51eF9zd2FwL2xpbnV4X3N3YXAuYzozNTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVucmVjb2duaXNlZCBzd3N1c3AgbGludXggc3dhcCBzaWduYXR1cmUgJyU5cycuIgorbXNnc3RyICLO3reoyrax8LXEIGxpbnV4ILbUu7vHqcP7obAlMTBzobGhoyIKKworIzogbGlicGFydGVkL2ZzL2xpbnV4X3N3YXAvbGludXhfc3dhcC5jOjQzNAorbXNnaWQgIlRvbyBtYW55IGJhZCBwYWdlcy4iCittc2dzdHIgIrn9tuC1xLu10rOhoyIKKworIzogbGlicGFydGVkL2ZzL2hmcy9hZHZmcy5jOjEyMSBsaWJwYXJ0ZWQvZnMvaGZzL2FkdmZzX3BsdXMuYzoxMjIKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzo0MTQgbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjUwOAorIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NTM5IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjY1OAorIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NzcyCittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIGNvbnRhaW5zIGVycm9ycy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9hZHZmc19wbHVzLmM6Mjg3Cittc2dpZCAiQmFkIGJsb2NrcyBjb3VsZCBub3QgYmUgcmVhZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9jYWNoZS5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVHJ5aW5nIHRvIHJlZ2lzdGVyIGFuIGV4dGVudCBzdGFydGluZyBhdCBibG9jayAweCVYLCBidXQgYW5vdGhlciBvbmUgYWxyZWFkeSAiCisiZXhpc3RzIGF0IHRoaXMgcG9zaXRpb24uICBZb3Ugc2hvdWxkIGNoZWNrIHRoZSBmaWxlIHN5c3RlbSEiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9jYWNoZS5jOjIxNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVHJ5aW5nIHRvIG1vdmUgYW4gZXh0ZW50IGZyb20gYmxvY2sgT3glWCB0byBibG9jayBPeCVYLCBidXQgYW5vdGhlciBvbmUgIgorImFscmVhZHkgZXhpc3RzIGF0IHRoaXMgcG9zaXRpb24uICBUaGlzIHNob3VsZCBub3QgaGFwcGVuISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGUuYzoxNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHVwZGF0ZSB0aGUgZXh0ZW50IGNhY2hlIGZvciBIRlMgZmlsZSB3aXRoIENOSUQgJVguIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZS5jOjE4MAorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgdG8gcmVhZCBIRlMgZmlsZSB3aXRoIENOSUQgJVggYmVoaW5kIEVPRi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlLmM6MTkwIGxpYnBhcnRlZC9mcy9oZnMvZmlsZS5jOjIyMAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCBzZWN0b3IgJWxsaSBvZiBIRlMgZmlsZSB3aXRoIENOSUQgJVguIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZS5jOjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgdG8gd3JpdGUgSEZTIGZpbGUgd2l0aCBDTklEICVYIGJlaGluZCBFT0YuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZV9wbHVzLmM6MTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB1cGRhdGUgdGhlIGV4dGVudCBjYWNoZSBmb3IgSEZTKyBmaWxlIHdpdGggQ05JRCAlWC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlX3BsdXMuYzoyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIHRvIHJlYWQgSEZTKyBmaWxlIHdpdGggQ05JRCAlWCBiZWhpbmQgRU9GLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGVfcGx1cy5jOjIxMyBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGVfcGx1cy5jOjI1NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCBzZWN0b3IgJWxsaSBvZiBIRlMrIGZpbGUgd2l0aCBDTklEICVYLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGVfcGx1cy5jOjI0NQorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgdG8gd3JpdGUgSEZTKyBmaWxlIHdpdGggQ05JRCAlWCBiZWhpbmQgRU9GLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjIzMgorbXNnaWQgIlNvcnJ5LCBIRlMgY2Fubm90IGJlIHJlc2l6ZWQgdGhhdCB3YXkgeWV0LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjI2MiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjY0MQorbXNnaWQgIkRhdGEgcmVsb2NhdGlvbiBoYXMgZmFpbGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjI4MQorbXNnaWQgIkRhdGEgcmVsb2NhdGlvbiBsZWZ0IHNvbWUgZGF0YSBpbiB0aGUgZW5kIG9mIHRoZSB2b2x1bWUuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MzIwCisjLCBmdXp6eQorbXNnaWQgIndyaXRpbmcgSEZTIE1hc3RlciBEaXJlY3RvcnkgQmxvY2siCittc2dzdHIgItC0yOu4+cS/wry07c7zoaMiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NDY4Cittc2dpZCAiTm8gdmFsaWQgSEZTWytYXSBzaWduYXR1cmUgaGFzIGJlZW4gZm91bmQgd2hpbGUgb3BlbmluZy4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo0NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmVyc2lvbiAlZCBvZiBIRlMrIGlzbid0IHN1cHBvcnRlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo0ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmVyc2lvbiAlZCBvZiBIRlNYIGlzbid0IHN1cHBvcnRlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo2NzIKK21zZ2lkICJEYXRhIHJlbG9jYXRpb24gbGVmdCBzb21lIGRhdGEgYXQgdGhlIGVuZCBvZiB0aGUgdm9sdW1lLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjcyMAorIywgZnV6enkKK21zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRoZSBhbGxvY2F0aW9uIGZpbGUuIgorbXNnc3RyICLQtMjruPnEv8K8tO3O86GjIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjczNQorbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdGhlIGNvbXBhdGliaWxpdHkgcGFydCBvZiB0aGUgYWxsb2NhdGlvbiBmaWxlLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjc1MAorbXNnaWQgIndyaXRpbmcgSEZTKyBWb2x1bWUgSGVhZGVyIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6ODUwCittc2dpZCAiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgbG9va2luZyBmb3IgdGhlIG1hbmRhdG9yeSBiYWQgYmxvY2tzIGZpbGUuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6OTA0Cittc2dpZCAiIgorIkl0IHNlZW1zIHRoZXJlIGlzIGFuIGVycm9yIGluIHRoZSBIRlMgd3JhcHBlcjogdGhlIGJhZCBibG9ja3MgZmlsZSBkb2Vzbid0ICIKKyJjb250YWluIHRoZSBlbWJlZGRlZCBIRlMrIHZvbHVtZS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo5NDAKK21zZ2lkICJTb3JyeSwgSEZTKyBjYW5ub3QgYmUgcmVzaXplZCB0aGF0IHdheSB5ZXQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6OTc1Cittc2dpZCAic2hyaW5raW5nIGVtYmVkZGVkIEhGUysgdm9sdW1lIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6OTkxCittc2dpZCAiUmVzaXppbmcgdGhlIEhGUysgdm9sdW1lIGhhcyBmYWlsZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6OTk4CisjLCBmdXp6eQorbXNnaWQgInNocmlua2luZyBIRlMgd3JhcHBlciIKK21zZ3N0ciAi1f3U2sv10KEiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MTAwNworbXNnaWQgIlVwZGF0aW5nIHRoZSBIRlMgd3JhcHBlciBoYXMgZmFpbGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjExMDkgbGlicGFydGVkL2ZzL2hmcy9oZnMuYzoxMTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGlzIGlzIG5vdCBhIHJlYWwgJXMgY2hlY2suICBUaGlzIGlzIGdvaW5nIHRvIGV4dHJhY3Qgc3BlY2lhbCBsb3cgbGV2ZWwgIgorImZpbGVzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjE1NQorbXNnaWQgIkJhZCBibG9jayBsaXN0IGhlYWRlciBjaGVja3N1bS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJbnZhbGlkIHNpemUgb2YgYSB0cmFuc2FjdGlvbiBibG9jayB3aGlsZSByZXBsYXlpbmcgdGhlIGpvdXJuYWwgKCVpIGJ5dGVzKS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MjYwCittc2dpZCAiIgorIkpvdXJuYWwgc3RvcmVkIG91dHNpZGUgb2YgdGhlIHZvbHVtZSBhcmUgbm90IHN1cHBvcnRlZC4gIFRyeSB0byBkZXNhY3RpdmF0ZSAiCisidGhlIGpvdXJuYWwgYW5kIHJ1biBQYXJ0ZWQgYWdhaW4uIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjI3MQorIywgZnV6enkKK21zZ2lkICJKb3VybmFsIG9mZnNldCBvciBzaXplIGlzIG5vdCBtdWx0aXBsZSBvZiB0aGUgc2VjdG9yIHNpemUuIgorbXNnc3RyICK02MbwyrzGq9LGID0gJWSjrLK7yse02LTz0KEgJWQgtcTV+8r9sbahoyIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MjkyCittc2dpZCAiSW5jb3JyZWN0IG1hZ2ljIHZhbHVlcyBpbiB0aGUgam91cm5hbCBoZWFkZXIuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjMwMgorbXNnaWQgIkpvdXJuYWwgc2l6ZSBtaXNtYXRjaCBiZXR3ZWVuIGpvdXJuYWwgaW5mbyBibG9jayBhbmQgam91cm5hbCBoZWFkZXIuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjMxNAorIywgZnV6enkKK21zZ2lkICJTb21lIGhlYWRlciBmaWVsZHMgYXJlIG5vdCBtdWx0aXBsZSBvZiB0aGUgc2VjdG9yIHNpemUuIgorbXNnc3RyICK02MbwyrzGq9LGID0gJWSjrLK7yse02LTz0KEgJWQgtcTV+8r9sbahoyIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MzIzCittc2dpZCAiIgorIlRoZSBzZWN0b3Igc2l6ZSBzdG9yZWQgaW4gdGhlIGpvdXJuYWwgaXMgbm90IDUxMiBieXRlcy4gIFBhcnRlZCBvbmx5ICIKKyJzdXBwb3J0cyA1MTIgYnl0ZXMgbGVuZ3RoIHNlY3RvcnMuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjMzNQorbXNnaWQgIkJhZCBqb3VybmFsIGNoZWNrc3VtLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozNTMKK21zZ2lkICIiCisiVGhlIGpvdXJuYWwgaXMgbm90IGVtcHR5LiAgUGFydGVkIG11c3QgcmVwbGF5IHRoZSB0cmFuc2FjdGlvbnMgYmVmb3JlICIKKyJvcGVuaW5nIHRoZSBmaWxlIHN5c3RlbS4gIFRoaXMgd2lsbCBtb2RpZnkgdGhlIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozODEKK21zZ2lkICIiCisiVGhlIHZvbHVtZSBoZWFkZXIgb3IgdGhlIG1hc3RlciBkaXJlY3RvcnkgYmxvY2sgaGFzIGNoYW5nZWQgd2hpbGUgcmVwbGF5aW5nICIKKyJ0aGUgam91cm5hbC4gIFlvdSBzaG91bGQgcmVzdGFydCBQYXJ0ZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcHJvYmUuYzo1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGFydGVkIGNhbid0IHVzZSBIRlMgZmlsZSBzeXN0ZW1zIG9uIGRpc2tzIHdpdGggYSBzZWN0b3Igc2l6ZSBub3QgZXF1YWwgdG8gJSIKKyJkIGJ5dGVzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6MTUxIGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjE1NQorbXNnaWQgIkFuIGV4dGVudCBoYXMgbm90IGJlZW4gcmVsb2NhdGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6MjUxIGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjMwNworbXNnaWQgIiIKKyJBIHJlZmVyZW5jZSB0byBhbiBleHRlbnQgY29tZXMgZnJvbSBhIHBsYWNlIGl0IHNob3VsZCBub3QuICBZb3Ugc2hvdWxkIGNoZWNrICIKKyJ0aGUgZmlsZSBzeXN0ZW0hIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzozODEKK21zZ2lkICJUaGlzIEhGUyB2b2x1bWUgaGFzIG5vIGNhdGFsb2cgZmlsZS4gIFRoaXMgaXMgdmVyeSB1bnVzdWFsISIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NDc1Cittc2dpZCAiVGhpcyBIRlMgdm9sdW1lIGhhcyBubyBleHRlbnRzIG92ZXJmbG93IGZpbGUuICBUaGlzIGlzIHF1aXRlIHVudXN1YWwhIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzo1MTcgbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NjY4Cittc2dpZCAiIgorIlRoZSBleHRlbnRzIG92ZXJmbG93IGZpbGUgc2hvdWxkIG5vdCBjb250YWluIGl0cyBvd24gZXh0ZW50cyEgIFlvdSBzaG91bGQgIgorImNoZWNrIHRoZSBmaWxlIHN5c3RlbS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjU3NCBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo4NDcKKyMsIGZ1enp5Cittc2dpZCAiQ291bGQgbm90IGNhY2hlIHRoZSBmaWxlIHN5c3RlbSBpbiBtZW1vcnkuIgorbXNnc3RyICLO3reovOyy4s7EvP7Ptc2zoaMiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzo2MzUgbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6OTA4Cittc2dpZCAiQmFkIGJsb2NrcyBsaXN0IGNvdWxkIG5vdCBiZSBsb2FkZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzo2NDkgbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6OTI0Cittc2dpZCAiQW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIGV4dGVudCByZWxvY2F0aW9uLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo0OTUKK21zZ2lkICJUaGlzIEhGUysgdm9sdW1lIGhhcyBubyBjYXRhbG9nIGZpbGUuICBUaGlzIGlzIHZlcnkgdW51c3VhbCEiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NjE5Cittc2dpZCAiVGhpcyBIRlMrIHZvbHVtZSBoYXMgbm8gZXh0ZW50cyBvdmVyZmxvdyBmaWxlLiAgVGhpcyBpcyBxdWl0ZSB1bnVzdWFsISIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6OTQKK21zZ2lkICJkaXNwbGF5cyB0aGlzIGhlbHAgbWVzc2FnZSIKK21zZ3N0ciAiz9TKvrTLx/PW+tDFz6IiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo5NQorbXNnaWQgImxpc3RzIHBhcnRpdGlvbiBsYXlvdXQgb24gYWxsIGJsb2NrIGRldmljZXMiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjk2Cittc2dpZCAiZGlzcGxheXMgbWFjaGluZSBwYXJzZWFibGUgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo5NworbXNnaWQgIm5ldmVyIHByb21wdHMgZm9yIHVzZXIgaW50ZXJ2ZW50aW9uIgorbXNnc3RyICK007K7zOHKvtPDu6ciCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo5OAorbXNnaWQgImRpc3BsYXlzIHRoZSB2ZXJzaW9uIgorbXNnc3RyICLP1Mq+sOaxviIKKworIzogcGFydGVkL3BhcnRlZC5jOjExMQorIywgZnV6enkKK21zZ2lkICIiCisiTlVNQkVSIGlzIHRoZSBwYXJ0aXRpb24gbnVtYmVyIHVzZWQgYnkgTGludXguICBPbiBNUy1ET1MgZGlzayBsYWJlbHMsIHRoZSAiCisicHJpbWFyeSBwYXJ0aXRpb25zIG51bWJlciBmcm9tIDEgdG8gNCwgbG9naWNhbCBwYXJ0aXRpb25zIGZyb20gNSBvbndhcmRzLlxuIgorbXNnc3RyICIiCisiTUlOT1IgyscgTGludXggyrnTw7XEt9bH+LHgusWho9TaIG1zZG9zILTFxcwgICAgserHqdbQo6zW97fWx/ix4LrFzqogMSAtIDSjrCIKKyLC37ytt9bH+LTTIDUgv6rKvKGjXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMTQKK21zZ2lkICJMQUJFTC1UWVBFIGlzIG9uZSBvZjogIgorbXNnc3RyICKhsLHqx6nA4NDNobHKx9LUz8LIztLi0rvP7qO6IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTE1Cittc2dpZCAiRkxBRyBpcyBvbmUgb2Y6ICIKK21zZ3N0ciAiobCx6ta+obHKx9LUz8LIztLi0rvP7qO6IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTE2CisjLCBmdXp6eQorbXNnaWQgIlVOSVQgaXMgb25lIG9mOiAiCittc2dzdHIgIqGwserWvqGxysfS1M/CyM7S4tK7z+6juiIKKworIzogcGFydGVkL3BhcnRlZC5jOjExNworbXNnaWQgIlBBUlQtVFlQRSBpcyBvbmUgb2Y6IHByaW1hcnksIGxvZ2ljYWwsIGV4dGVuZGVkXG4iCittc2dzdHIgIqGwt9bH+MDg0M2hscrH1ve31sf4oaLC37ytt9bH+KGiwKnVubfWx/jWrtK7XG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMTkKK21zZ2lkICJGUy1UWVBFIGlzIG9uZSBvZjogIgorbXNnc3RyICKhsM7EvP7Ptc2zwODQzaGxysfS1M/CyM7S4tK7z+6juiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMAorIywgZnV6enkKK21zZ2lkICIiCisiU1RBUlQgYW5kIEVORCBhcmUgZGlzayBsb2NhdGlvbnMsIHN1Y2ggYXMgNEdCIG9yIDEwJS4gIE5lZ2F0aXZlIHZhbHVlcyBjb3VudCAiCisiZnJvbSB0aGUgZW5kIG9mIHRoZSBkaXNrLiAgRm9yIGV4YW1wbGUsIC0xcyBzcGVjaWZpZXMgZXhhY3RseSB0aGUgbGFzdCAiCisic2VjdG9yLlxuIgorbXNnc3RyICKhsMbwyry146Gxus2hsNbV1rm146Gx0tTV186qtaXOu6GjuLrWtbHtyr6007TFxczEqbbOv6rKvLzGyv2ho1xuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIzCittc2dpZCAiU1RBVEUgaXMgb25lIG9mOiBvbiwgb2ZmXG4iCittc2dzdHIgIte0zKzOqqO6v6qhornYXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjQKK21zZ2lkICJERVZJQ0UgaXMgdXN1YWxseSAvZGV2L2hkYSBvciAvZGV2L3NkYVxuIgorbXNnc3RyICJERVZJQ0Ugzaizo86qIC9kZXYvaGRhILvyIC9kZXYvc2RhXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjUKK21zZ2lkICJOQU1FIGlzIGFueSB3b3JkIHlvdSB3YW50XG4iCittc2dzdHIgIk5BTUUgysfE+tDo0qq1xMjOus61pbTKXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjYKK21zZ2lkICJUaGUgcGFydGl0aW9uIG11c3QgaGF2ZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBGUy1UWVBFczogIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMzAKKyMsIGZ1enp5Cittc2dpZCAiIgorIkNvcHlyaWdodCAoQykgMTk5OCAtIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuXG4iCisiVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmUsIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLlxuIgorIlxuIgorIlRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuIgorImJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4iCisiTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuIgorIkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4iCisiXG4iCittc2dzdHIgIiIKKyKw5sioy/nT0CAoQykgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMyDX1NPJyO28/rv5vfC74aGjXG4iCisisb6zzNDyzqrX1NPJyO28/qOssLQgR05VIM2o08O5q7my0O2/ydakt6LQ0KGjXG4iCisiXG4iCisit6LQ0LG+s8zQ8srHz6PN+8v8xNy5u9PQ08OjrLWrw7vT0MjOus61o7Gjo7vJ9dbBsruw/MCo0v66rLXEysrP+rrNysq6z8zYtqjTwyIKKyLNvrXEsaPWpKGjz+rH6cfrss68+yBHTlUgzajTw7mrubLQ7b/J1qSho1xuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiUwLmYlJVx0KHRpbWUgbGVmdCAlLjJkOiUuMmQpIgorbXNnc3RyICIlMC5mJSVcdCjKo9PgyrG85CAlLjJkOiUuMmQpIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQYXJ0aXRpb24gJXMgaXMgYmVpbmcgdXNlZC4gWW91IG11c3QgdW5tb3VudCBpdCBiZWZvcmUgeW91IG1vZGlmeSBpdCB3aXRoICIKKyJQYXJ0ZWQuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGFydGl0aW9uKHMpIG9uICVzIGFyZSBiZWluZyB1c2VkLiIKK21zZ3N0ciAi1f3U2sq508MgJXMgyc+1xLfWx/ihoyIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMworbXNnaWQgIiIKKyJUaGUgZXhpc3RpbmcgZmlsZSBzeXN0ZW0gd2lsbCBiZSBkZXN0cm95ZWQgYW5kIGFsbCBkYXRhIG9uIHRoZSBwYXJ0aXRpb24gIgorIndpbGwgYmUgbG9zdC4gRG8geW91IHdhbnQgdG8gY29udGludWU/IgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBleGlzdGluZyBkaXNrIGxhYmVsIG9uICVzIHdpbGwgYmUgZGVzdHJveWVkIGFuZCBhbGwgZGF0YSBvbiB0aGlzIGRpc2sgIgorIndpbGwgYmUgbG9zdC4gRG8geW91IHdhbnQgdG8gY29udGludWU/IgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo0NTggcGFydGVkL3BhcnRlZC5jOjY1MiBwYXJ0ZWQvcGFydGVkLmM6MTA0NAorIzogcGFydGVkL3BhcnRlZC5jOjExMjggcGFydGVkL3BhcnRlZC5jOjE3NzEgcGFydGVkL3BhcnRlZC5jOjE4NTIKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxOTAwCittc2dpZCAiUGFydGl0aW9uIG51bWJlcj8iCittc2dzdHIgIrfWx/ix4LrFo78iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo1MDAKK21zZ2lkICJTb3VyY2UgZGV2aWNlPyIKK21zZ3N0ciAi1LTJ6LG4o78iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo1MDQKK21zZ2lkICJTb3VyY2UgcGFydGl0aW9uIG51bWJlcj8iCittc2dzdHIgItS0t9bH+LHgusWjvyIKKworIzogcGFydGVkL3BhcnRlZC5jOjUwOQorIywgZnV6enkKK21zZ2lkICJDYW4ndCBjb3B5IGFuIGV4dGVuZGVkIHBhcnRpdGlvbi4iCittc2dzdHIgIrK7xNzWu7i01sbAqdW5t9bH+KGjIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NTE1Cittc2dpZCAiRGVzdGluYXRpb24gcGFydGl0aW9uIG51bWJlcj8iCittc2dzdHIgIsS/seq31sf4seC6xaO/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NjE1Cittc2dpZCAiTmV3IGRpc2sgbGFiZWwgdHlwZT8iCittc2dzdHIgItDCtcS0xcXMserHqcDg0M2jvyIKKworIzogcGFydGVkL3BhcnRlZC5jOjY1NgorbXNnaWQgIkZpbGUgc3lzdGVtPyIKK21zZ3N0ciAizsS8/s+1zbOjvyIKKworIzogcGFydGVkL3BhcnRlZC5jOjcwNyBwYXJ0ZWQvcGFydGVkLmM6ODc4Cittc2dpZCAiUGFydGl0aW9uIHR5cGU/IgorbXNnc3RyICK31sf4wODQzaO/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NzE0IHBhcnRlZC9wYXJ0ZWQuYzo4ODUgcGFydGVkL3BhcnRlZC5jOjExMzEKK21zZ2lkICJQYXJ0aXRpb24gbmFtZT8iCittc2dzdHIgIrfWx/jD+7PGo78iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo3MjIgcGFydGVkL3BhcnRlZC5jOjg5NQorbXNnaWQgIkZpbGUgc3lzdGVtIHR5cGU/IgorbXNnc3RyICLOxLz+z7XNs8Dg0M2jvyIKKworIzogcGFydGVkL3BhcnRlZC5jOjcyOSBwYXJ0ZWQvcGFydGVkLmM6ODk3IHBhcnRlZC9wYXJ0ZWQuYzoxMDU5CisjOiBwYXJ0ZWQvcGFydGVkLmM6MTcyNSBwYXJ0ZWQvcGFydGVkLmM6MTc4MAorbXNnaWQgIlN0YXJ0PyIKK21zZ3N0ciAixvDKvLXjo78iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo3MzEgcGFydGVkL3BhcnRlZC5jOjkwMCBwYXJ0ZWQvcGFydGVkLmM6MTA2MgorIzogcGFydGVkL3BhcnRlZC5jOjE3MjcgcGFydGVkL3BhcnRlZC5jOjE3ODIKK21zZ2lkICJFbmQ/IgorbXNnc3RyICK94cr4teOjvyIKKworIzogcGFydGVkL3BhcnRlZC5jOjc2OSBwYXJ0ZWQvcGFydGVkLmM6OTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgcmVxdWVzdGVkIGEgcGFydGl0aW9uIGZyb20gJXMgdG8gJXMuXG4iCisiVGhlIGNsb3Nlc3QgbG9jYXRpb24gd2UgY2FuIG1hbmFnZSBpcyAlcyB0byAlcy4gIElzIHRoaXMgc3RpbGwgYWNjZXB0YWJsZSB0byAiCisieW91PyIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6ODkwCisjLCBmdXp6eQorbXNnaWQgIkFuIGV4dGVuZGVkIHBhcnRpdGlvbiBjYW5ub3QgaG9sZCBhIGZpbGUgc3lzdGVtLiAgRGlkIHlvdSB3YW50IG1rcGFydD8iCittc2dzdHIgIsCp1bm31sf4srvE3Lqs09DOxLz+z7XNs6GjxPrKx9Kq08MgbWtwYXJ0ILDJo78iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMDUwCisjLCBmdXp6eQorbXNnaWQgIkNhbid0IG1vdmUgYW4gZXh0ZW5kZWQgcGFydGl0aW9uLiIKK21zZ3N0ciAizt63qNLGtq/AqdW5t9bH+KGjIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTA3OQorbXNnaWQgIkNhbid0IG1vdmUgYSBwYXJ0aXRpb24gb250byBpdHNlbGYuICBUcnkgdXNpbmcgcmVzaXplLCBwZXJoYXBzPyIKK21zZ3N0ciAizt63qL2rt9bH+NLGtq+1vcv819TJ7aGjytTTw7jEseS089Cho6y/ycTco78iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIk1pbm9yOiAlZFxuIgorbXNnc3RyICJNaW5vcqO6JWRcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMjgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkZsYWdzOiAlc1xuIgorbXNnc3RyICKx6ta+o7oiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGUgU3lzdGVtOiAlc1xuIgorbXNnc3RyICLOxLz+z7XNs6O6JXNcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMzAKKyMsIGZ1enp5Cittc2dpZCAiU2l6ZTogICAgICAgICAiCittc2dzdHIgIrTz0KGjuiAgICAgICAgICUxMC4zZk1iICglZCUlKVxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIzNQorIywgZnV6enkKK21zZ2lkICJNaW5pbXVtIHNpemU6ICIKK21zZ3N0ciAi1+7QobPftOejuiAgICAgJTEwLjNmTWIgKCVkJSUpXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjM4CisjLCBmdXp6eQorbXNnaWQgIk1heGltdW0gc2l6ZTogIgorbXNnc3RyICLX7rTzs9+056O6ICAgICAlMTAuM2ZNYiAoJWQlJSlcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEzNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTW9kZWw6ICVzICglcylcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTM2NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRGlzayAlczogJXNcbiIKK21zZ3N0ciAiJXMgICVzICAlcyIKKworIzogcGFydGVkL3BhcnRlZC5jOjEzNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VjdG9yIHNpemUgKGxvZ2ljYWwvcGh5c2ljYWwpOiAlbGxkQi8lbGxkQlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMzgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkJJT1MgY3lsaW5kZXIsaGVhZCxzZWN0b3IgZ2VvbWV0cnk6ICVkLCVkLCVkLiAgRWFjaCBjeWxpbmRlciBpcyAlcy5cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTM5MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiUGFydGl0aW9uIFRhYmxlOiAlc1xuIgorbXNnc3RyICK31sf4w/uzxqO/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQwNiBwYXJ0ZWQvcGFydGVkLmM6MTQwOQorbXNnaWQgIk51bWJlciIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQwNiBwYXJ0ZWQvcGFydGVkLmM6MTQwOQorIywgZnV6enkKK21zZ2lkICJTdGFydCIKK21zZ3N0ciAixvDKvLXjo78iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDA3IHBhcnRlZC9wYXJ0ZWQuYzoxNDEwCisjLCBmdXp6eQorbXNnaWQgIkVuZCIKK21zZ3N0ciAiveHK+LXjo78iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDEwCisjLCBmdXp6eQorbXNnaWQgIlNpemUiCittc2dzdHIgInJlc2l6ZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MTQKK21zZ2lkICJUeXBlIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDE2CisjLCBmdXp6eQorbXNnaWQgIkZpbGUgc3lzdGVtIgorbXNnc3RyICLOxLz+z7XNs6O/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQxOQorIywgZnV6enkKK21zZ2lkICJOYW1lIgorbXNnc3RyICJuYW1lIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQyMQorbXNnaWQgIkZsYWdzIgorbXNnc3RyICKx6ta+IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQ3NworbXNnaWQgIkZyZWUgU3BhY2UiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjE2MjQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBICVzICVzIHBhcnRpdGlvbiB3YXMgZm91bmQgYXQgJXMgLT4gJXMuICBEbyB5b3Ugd2FudCB0byBhZGQgaXQgdG8gdGhlICIKKyJwYXJ0aXRpb24gdGFibGU/IgorbXNnc3RyICIiCisi1NogJTMkLjNmTWIgLT4gJTQkLjNmTWIgtKbV0rW90ru49iAlMSRzICUyJHMgt9bH+KGjxPrPo837vavG5MztvNO1vbfWx/ix7dbQIgorIsLwo78iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNjYzCittc2dpZCAic2VhcmNoaW5nIGZvciBmaWxlIHN5c3RlbXMiCittc2dzdHIgItX91NrL0cv3zsS8/s+1zbMiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxODc3Cittc2dpZCAiTmV3IGRldmljZT8iCittc2dzdHIgItDCyeixuKO/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTkwMgorIywgZnV6enkKK21zZ2lkICJGbGFnIHRvIEludmVydD8iCittc2dzdHIgItKq0N64xLXEserWvqO/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTkwNworbXNnaWQgIk5ldyBzdGF0ZT8iCittc2dzdHIgItDC17TMrKO/IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTk0NAorbXNnaWQgIlVuaXQ/IgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMDkzCittc2dpZCAiY2hlY2siCittc2dzdHIgIrzssukiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMDk2CisjLCBmdXp6eQorbXNnaWQgIiIKKyJjaGVjayBOVU1CRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIGEgc2ltcGxlIGNoZWNrIG9uIHRoZSBmaWxlIHN5c3RlbSIKK21zZ3N0ciAivOyy6SAgTUlOT1IgICAgICAgICAgICAgICAgICAgttTOxLz+z7XNs7340NDSu7j2vPK1pbXEvOyy6SIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMDIKK21zZ2lkICJjcCIKK21zZ3N0ciAiY3AiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTA1CisjLCBmdXp6eQorbXNnaWQgIiIKKyJjcCBbRlJPTS1ERVZJQ0VdIEZST00tTlVNQkVSIFRPLU5VTUJFUiAgIGNvcHkgZmlsZSBzeXN0ZW0gdG8gYW5vdGhlciAiCisicGFydGl0aW9uIgorbXNnc3RyICJjcCBbRlJPTS1ERVZJQ0VdIEZST00tTUlOT1IgVE8tTUlOT1IgICAgICC9q87EvP7Ptc2zuLTWxrW9we3Su7j2t9bH+CIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMTEKK21zZ2lkICJoZWxwIgorbXNnc3RyICJoZWxwIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjExNAorIywgZnV6enkKK21zZ2lkICIiCisiaGVscCBbQ09NTUFORF0gICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCBnZW5lcmFsIGhlbHAsIG9yIGhlbHAgb24gIgorIkNPTU1BTkQiCittc2dzdHIgImhlbHAgW0NPTU1BTkRdICAgICAgICAgICAgICAgILTy06HNqNPDx/PW+tDFz6KjrLvyudjT2iBDT01NQU5EILXE0MXPoiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMjAKK21zZ2lkICJta2xhYmVsIgorbXNnc3RyICJta2xhYmVsIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEyMAorIywgZnV6enkKK21zZ2lkICJta3RhYmxlIgorbXNnc3RyICJta2xhYmVsIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEyMworIywgZnV6enkKK21zZ2lkICIiCisibWtsYWJlbCxta3RhYmxlIExBQkVMLVRZUEUgICAgICAgICAgICAgICBjcmVhdGUgYSBuZXcgZGlza2xhYmVsIChwYXJ0aXRpb24gIgorInRhYmxlKSIKK21zZ3N0ciAibWtsYWJlbCCx6sepwODQzSAgICAgICAgICAgICAgtLS9qNDCtcS0xcXMserHqSAot9bH+LHtKSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMjkKK21zZ2lkICJta2ZzIgorbXNnc3RyICJta2ZzIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEzMgorIywgZnV6enkKK21zZ2lkICIiCisibWtmcyBOVU1CRVIgRlMtVFlQRSAgICAgICAgICAgICAgICAgICAgICBtYWtlIGEgRlMtVFlQRSBmaWxlIHN5c3RlbSBvbiAiCisicGFydGl0aXRvbiBOVU1CRVIiCittc2dzdHIgIiIKKyJta2ZzIE1JTk9SIM7EvP7Ptc2zwODQzSAgICAgICDU2iBNSU5PUiC0tL2owODQzc6qobDOxLz+z7XNs8Dg0M2hsbXEzsS8/s+1zbMiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTM4Cittc2dpZCAibWtwYXJ0IgorbXNnc3RyICJta3BhcnQiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTQxCisjLCBmdXp6eQorbXNnaWQgIm1rcGFydCBQQVJULVRZUEUgW0ZTLVRZUEVdIFNUQVJUIEVORCAgICAgbWFrZSBhIHBhcnRpdGlvbiIKK21zZ3N0ciAibWtwYXJ0ILfWx/jA4NDNIFvOxLz+z7XNs8Dg0M1dIMbwyry14yDW1da5teMgICAgICC0tL2o0ru49rfWx/giCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTQ3CisjLCBmdXp6eQorbXNnaWQgIiIKKyInbWtwYXJ0JyBtYWtlcyBhIHBhcnRpdGlvbiB3aXRob3V0IGNyZWF0aW5nIGEgbmV3IGZpbGUgc3lzdGVtIG9uIHRoZSAiCisicGFydGl0aW9uLiAgRlMtVFlQRSBtYXkgYmUgc3BlY2lmaWVkIHRvIHNldCBhbiBhcHByb3ByaWF0ZSBwYXJ0aXRpb24gSUQuXG4iCittc2dzdHIgIiIKKyJta3BhcnQgtLS9qLfWx/i2+LK71Nq31sf4yc+0tL2o0MLOxLz+z7XNs6GjobDOxLz+z7XNs8Dg0M2hsb/J0tTTw9PayejWw8rKtbG1xCIKKyK31sf4serKtqGjXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTUyCittc2dpZCAibWtwYXJ0ZnMiCittc2dzdHIgIm1rcGFydGZzIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE1NQorIywgZnV6enkKK21zZ2lkICIiCisibWtwYXJ0ZnMgUEFSVC1UWVBFIEZTLVRZUEUgU1RBUlQgRU5EICAgICBtYWtlIGEgcGFydGl0aW9uIHdpdGggYSBmaWxlIHN5c3RlbSIKK21zZ3N0ciAiIgorIm1rcGFydGZzILfWx/jA4NDNIM7EvP7Ptc2zwODQzSDG8Mq8teMg1tXWubXjICC0tL2o0ru49rT409DOxLz+z7XNs7XEt9bH+CIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNjEKK21zZ2lkICJtb3ZlIgorbXNnc3RyICJtb3ZlIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE2NAorIywgZnV6enkKK21zZ2lkICJtb3ZlIE5VTUJFUiBTVEFSVCBFTkQgICAgICAgICAgICAgICAgICAgIG1vdmUgcGFydGl0aW9uIE5VTUJFUiIKK21zZ3N0ciAibW92ZSBNSU5PUiDG8Mq8teMg1tXWubXjICAgICAg0sa2r7HgusXOqiBNSU5PUiC1xLfWx/giCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTY5Cittc2dpZCAibmFtZSIKK21zZ3N0ciAibmFtZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNzIKKyMsIGZ1enp5Cittc2dpZCAibmFtZSBOVU1CRVIgTkFNRSAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lIHBhcnRpdGlvbiBOVU1CRVIgYXMgTkFNRSIKK21zZ3N0ciAibmFtZSBNSU5PUiDD+7PGICAgICAgICAgICAgICAgvaux4LrFzqogTUlOT1IgtcS31sf4w/zD+86qobDD+7PGobEiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTc3Cittc2dpZCAicHJpbnQiCittc2dzdHIgInByaW50IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE4MAorbXNnaWQgIiIKKyJwcmludCBbZGV2aWNlc3xmcmVlfGxpc3QsYWxsfE5VTUJFUl0gICAgIGRpc3BsYXkgdGhlIHBhcnRpdGlvbiB0YWJsZSwgIgorImF2YWlsYWJsZSBkZXZpY2VzLCBmcmVlIHNwYWNlLCBhbGwgZm91bmQgcGFydGl0aW9ucywgb3IgYSBwYXJ0aWN1bGFyICIKKyJwYXJ0aXRpb24iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxODUKK21zZ2lkICIiCisiV2l0aG91dCBhcmd1bWVudHMsICdwcmludCcgZGlzcGxheXMgdGhlIGVudGlyZSBwYXJ0aXRpb24gdGFibGUuIEhvd2V2ZXIgd2l0aCAiCisidGhlIGZvbGxvd2luZyBhcmd1bWVudHMgaXQgcGVyZm9ybXMgdmFyaW91cyBvdGhlciBhY3Rpb25zLlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTg3Cittc2dpZCAiICBkZXZpY2VzICAgOiBkaXNwbGF5IGFsbCBhY3RpdmUgYmxvY2sgZGV2aWNlc1xuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTg4Cittc2dpZCAiIgorIiAgZnJlZSAgICAgIDogZGlzcGxheSBpbmZvcm1hdGlvbiBhYm91dCBmcmVlIHVucGFydGl0aW9uZWQgc3BhY2Ugb24gdGhlICIKKyJjdXJyZW50IGJsb2NrIGRldmljZVxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTkwCisjLCBmdXp6eQorbXNnaWQgIiIKKyIgIGxpc3QsIGFsbCA6IGRpc3BsYXkgdGhlIHBhcnRpdGlvbiB0YWJsZXMgb2YgYWxsIGFjdGl2ZSBibG9jayBkZXZpY2VzXG4iCittc2dzdHIgInByaW50IFtNSU5PUl0gICAgICAgICAgICAgICAgILTy06G31sf4se2jrLvy1d+31sf4IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE5MQorbXNnaWQgIiIKKyIgIE5VTUJFUiAgICA6IGRpc3BsYXkgbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIHBhcnRpY3VsYXIgIgorInBhcnRpdGlvblxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTk2Cittc2dpZCAicXVpdCIKK21zZ3N0ciAicXVpdCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxOTkKKyMsIGZ1enp5Cittc2dpZCAicXVpdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGl0IHByb2dyYW0iCittc2dzdHIgInF1aXQgICAgICAgICAgICAgICAgICAgICAgICAgIM3Ls/azzNDyIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIwNAorbXNnaWQgInJlc2N1ZSIKK21zZ3N0ciAicmVzY3VlIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIwNworIywgZnV6enkKK21zZ2lkICIiCisicmVzY3VlIFNUQVJUIEVORCAgICAgICAgICAgICAgICAgICAgICAgICByZXNjdWUgYSBsb3N0IHBhcnRpdGlvbiBuZWFyIFNUQVJUICIKKyJhbmQgRU5EIgorbXNnc3RyICIiCisicmVzY3VlIMbwyry14yDW1da5teMgICAgICAgICAgzey+yMHZvfyhsMbwyry146GxoaKhsNbV1rm146GxtcTSxcqntcS31sf4IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIxMworbXNnaWQgInJlc2l6ZSIKK21zZ3N0ciAicmVzaXplIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIxNgorIywgZnV6enkKK21zZ2lkICIiCisicmVzaXplIE5VTUJFUiBTVEFSVCBFTkQgICAgICAgICAgICAgICAgICByZXNpemUgcGFydGl0aW9uIE5VTUJFUiBhbmQgaXRzICIKKyJmaWxlIHN5c3RlbSIKK21zZ3N0ciAiIgorInJlc2N1ZSDG8Mq8teMg1tXWubXjICAgICAgICAgIM3svsjB2b38obDG8Mq8teOhsaGiobDW1da5teOhsbXE0sXKp7XEt9bH+CIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMjQKK21zZ2lkICJybSIKK21zZ3N0ciAicm0iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjI3CisjLCBmdXp6eQorbXNnaWQgInJtIE5VTUJFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHBhcnRpdGlvbiBOVU1CRVIiCittc2dzdHIgInJtIE1JTk9SICAgICAgICAgICAgICAgICAgICAgIMm+s/2x4LrFzqogTUlOT1IgtcS31sf4IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIzMgorbXNnaWQgInNlbGVjdCIKK21zZ3N0ciAic2VsZWN0IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIzNQorIywgZnV6enkKK21zZ2lkICJzZWxlY3QgREVWSUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNob29zZSB0aGUgZGV2aWNlIHRvIGVkaXQiCittc2dzdHIgInNlbGVjdCDJ6LG4ICAgICAgICAgICAgICAgICDRodTx0qqx4LyttcTJ6LG4IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI0MAorbXNnaWQgInNldCIKK21zZ3N0ciAic2V0IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI0MworIywgZnV6enkKK21zZ2lkICIiCisic2V0IE5VTUJFUiBGTEFHIFNUQVRFICAgICAgICAgICAgICAgICAgICBjaGFuZ2UgdGhlIEZMQUcgb24gcGFydGl0aW9uIE5VTUJFUiIKK21zZ3N0ciAic2V0IE1JTk9SILHq1r4g17TMrCAgICAgICAgICAguMSx5LHgusXOqiBNSU5PUiC1xLfWx/i1xLHq1r4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjQ5Cittc2dpZCAidG9nZ2xlIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjUyCittc2dpZCAiIgorInRvZ2dsZSBbTlVNQkVSIFtGTEFHXV0gICAgICAgICAgICAgICAgICAgdG9nZ2xlIHRoZSBzdGF0ZSBvZiBGTEFHIG9uICIKKyJwYXJ0aXRpb24gTlVNQkVSIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjU4CisjLCBmdXp6eQorbXNnaWQgInVuaXQiCittc2dzdHIgInF1aXQiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjYxCisjLCBmdXp6eQorbXNnaWQgInVuaXQgVU5JVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0IHRoZSBkZWZhdWx0IHVuaXQgdG8gVU5JVCIKK21zZ3N0ciAicXVpdCAgICAgICAgICAgICAgICAgICAgICAgICAgzcuz9rPM0PIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjY2Cittc2dpZCAidmVyc2lvbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI2OQorbXNnaWQgIiIKKyJ2ZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXkgdGhlIHZlcnNpb24gbnVtYmVyIGFuZCAiCisiY29weXJpZ2h0IGluZm9ybWF0aW9uIG9mIEdOVSBQYXJ0ZWQiCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNzMKK21zZ2lkICIiCisiJ3ZlcnNpb24nIGRpc3BsYXlzIGNvcHlyaWdodCBhbmQgdmVyc2lvbiBpbmZvcm1hdGlvbiBjb3JyZXNwb25kaW5nIHRvIHRoaXMgIgorImNvcHkgb2YgR05VIFBhcnRlZFxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMzM1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLWhsbXN2XSBbREVWSUNFIFtDT01NQU5EIFtQQVJBTUVURVJTXV0uLi5dXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIzNzkKK21zZ2lkICJObyBkZXZpY2UgZm91bmQiCittc2dzdHIgIsO709DV0rW9yeixuCIKKworIzogcGFydGVkL3BhcnRlZC5jOjI0MTIKK21zZ2lkICJXQVJOSU5HOiBZb3UgYXJlIG5vdCBzdXBlcnVzZXIuICBXYXRjaCBvdXQgZm9yIHBlcm1pc3Npb25zLiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjQ1MAorIywgZnV6enkKK21zZ2lkICJZb3UgbWF5IG5lZWQgdG8gdXBkYXRlIC9ldGMvZnN0YWIuXG4iCittc2dzdHIgIsjnufux2NKqo6yyu9Kqzfy8x7j80MIgL2V0Yy9mc3RhYqGjXG4iCisKKyM6IHBhcnRlZC91aS5jOjE2MAorbXNnaWQgIldlbGNvbWUgdG8gR05VIFBhcnRlZCEgVHlwZSAnaGVscCcgdG8gdmlldyBhIGxpc3Qgb2YgY29tbWFuZHMuXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6MTYzCisjLCBmdXp6eQorbXNnaWQgIiIKKyJVc2FnZTogcGFydGVkIFtPUFRJT05dLi4uIFtERVZJQ0UgW0NPTU1BTkQgW1BBUkFNRVRFUlNdLi4uXS4uLl1cbiIKKyJBcHBseSBDT01NQU5EcyB3aXRoIFBBUkFNRVRFUlMgdG8gREVWSUNFLiAgSWYgbm8gQ09NTUFORChzKSBhcmUgZ2l2ZW4sIHJ1biAiCisiaW5cbiIKKyJpbnRlcmFjdGl2ZSBtb2RlLlxuIgorbXNnc3RyICIiCisi08O3qKO6cGFydGVkIFvRoc/uXS4uLiBbyeixuCBbw/zB7iBbss7K/V0uLi5dLi4uXVxuIgorIr2rtPjT0KGwss7K/aGxtcTD/MHu06bTw9PaobDJ6LG4obGho8jnufvDu9PQuPiz9qGww/zB7qGxo6zU8tLUvbu7pcSjyr3UyyIKKyLQ0KGjXG4iCisKKyM6IHBhcnRlZC91aS5jOjE2OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiXG4iCisiWW91IGZvdW5kIGEgYnVnIGluIEdOVSBQYXJ0ZWQhIEhlcmUncyB3aGF0IHlvdSBoYXZlIHRvIGRvOlxuIgorIlxuIgorIkRvbid0IHBhbmljISBUaGUgYnVnIGhhcyBtb3N0IGxpa2VseSBub3QgYWZmZWN0ZWQgYW55IG9mIHlvdXIgZGF0YS5cbiIKKyJIZWxwIHVzIHRvIGZpeCB0aGlzIGJ1ZyBieSBkb2luZyB0aGUgZm9sbG93aW5nOlxuIgorIlxuIgorIkNoZWNrIHdoZXRoZXIgdGhlIGJ1ZyBoYXMgYWxyZWFkeSBiZWVuIGZpeGVkIGJ5IGNoZWNraW5nXG4iCisidGhlIGxhc3QgdmVyc2lvbiBvZiBHTlUgUGFydGVkIHRoYXQgeW91IGNhbiBmaW5kIGF0OlxuIgorIlxuIgorIlx0aHR0cDovL2Z0cC5nbnUub3JnL2dudS9wYXJ0ZWQvXG4iCisiXG4iCisiUGxlYXNlIGNoZWNrIHRoaXMgdmVyc2lvbiBwcmlvciB0byBidWcgcmVwb3J0aW5nLlxuIgorIlxuIgorIklmIHRoaXMgaGFzIG5vdCBiZWVuIGZpeGVkIHlldCBvciBpZiB5b3UgZG9uJ3Qga25vdyBob3cgdG8gY2hlY2ssXG4iCisicGxlYXNlIHZpc2l0IHRoZSBHTlUgUGFydGVkIHdlYnNpdGU6XG4iCisiXG4iCisiXHRodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvcGFydGVkXG4iCisiXG4iCisiZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uXG4iCisiXG4iCisiWW91ciByZXBvcnQgc2hvdWxkIGNvbnRhaW4gdGhlIHZlcnNpb24gb2YgdGhpcyByZWxlYXNlICglcylcbiIKKyJhbG9uZyB3aXRoIHRoZSBlcnJvciBtZXNzYWdlIGJlbG93LCB0aGUgb3V0cHV0IG9mXG4iCisiXG4iCisiXHRwYXJ0ZWQgREVWSUNFIHVuaXQgY28gcHJpbnQgdW5pdCBzIHByaW50XG4iCisiXG4iCisiYW5kIHRoZSBmb2xsb3dpbmcgaGlzdG9yeSBvZiBjb21tYW5kcyB5b3UgZW50ZXJlZC5cbiIKKyJBbHNvIGluY2x1ZGUgYW55IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgeW91ciBzZXR1cCB5b3VcbiIKKyJjb25zaWRlciBpbXBvcnRhbnQuXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6Mjg0Cittc2dpZCAiIgorIlxuIgorIkNvbW1hbmQgSGlzdG9yeTpcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzozNjYKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IFNFR1ZfTUFQRVJSIChBZGRyZXNzIG5vdCBtYXBwZWQgdG8gb2JqZWN0KVxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjM3MgorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogU0VHVl9BQ0NFUlIgKEludmFsaWQgcGVybWlzc2lvbnMgZm9yIG1hcHBlZCBvYmplY3QpXG4iCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6Mzc3Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBBIGdlbmVyYWwgU0lHU0VHViBzaWduYWwgd2FzIGVuY291bnRlcmVkLlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQxMAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0lOVERJViAoSW50ZWdlcjogZGl2aWRlIGJ5IHplcm8pIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQxNQorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0lOVE9WRiAoSW50ZWdlcjogb3ZlcmZsb3cpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQyMAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0ZMVERJViAoRmxvYXQ6IGRpdmlkZSBieSB6ZXJvKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0MjUKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRPVkYgKEZsb2F0OiBvdmVyZmxvdykiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDMwCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxUVU5EIChGbG9hdDogdW5kZXJmbG93KSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0MzUKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRSRVMgKEZsb2F0OiBpbmV4YWN0IHJlc3VsdCkiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDQwCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxUSU5WIChGbG9hdDogaW52YWxpZCBvcGVyYXRpb24pIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQ0NQorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0ZMVFNVQiAoRmxvYXQ6IHN1YnNjcmlwdCBvdXQgb2YgcmFuZ2UpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjQ1MAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogQSBnZW5lcmFsIFNJR0ZQRSBzaWduYWwgd2FzIGVuY291bnRlcmVkLiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0ODMKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9JTExPUEMgKElsbGVnYWwgT3Bjb2RlKSIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzo0ODgKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9JTExPUE4gKElsbGVnYWwgT3BlcmFuZCkiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDkzCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfSUxMQURSIChJbGxlZ2FsIGFkZHJlc3NpbmcgbW9kZSkiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NDk4Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfSUxMVFJQIChJbGxlZ2FsIFRyYXApIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjUwMworbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX1BSVk9QQyAoUHJpdmlsZWdlZCBPcGNvZGUpIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjUwOAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX1BSVlJFRyAoUHJpdmlsZWdlZCBSZWdpc3RlcikiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NTEzCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfQ09QUk9DIChDb3Byb2Nlc3NvciBFcnJvcikiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NTE4Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfQkFEU1RLIChJbnRlcm5hbCBTdGFjayBFcnJvcikiCittc2dzdHIgIiIKKworIzogcGFydGVkL3VpLmM6NTIzCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBBIGdlbmVyYWwgU0lHSUxMIHNpZ25hbCB3YXMgZW5jb3VudGVyZWQuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC91aS5jOjEwMjQKK21zZ2lkICJFeHBlY3RpbmcgYSBwYXJ0aXRpb24gbnVtYmVyLiIKK21zZ3N0ciAi0OjSqrfWx/ix4LrFoaMiCisKKyM6IHBhcnRlZC91aS5jOjEwMzMKK21zZ2lkICJQYXJ0aXRpb24gZG9lc24ndCBleGlzdC4iCittc2dzdHIgIrfWx/iyu7Tm1NqhoyIKKworIzogcGFydGVkL3VpLmM6MTA1MworbXNnaWQgIkV4cGVjdGluZyBhIGZpbGUgc3lzdGVtIHR5cGUuIgorbXNnc3RyICLQ6NKqzsS8/s+1zbPA4NDNoaMiCisKKyM6IHBhcnRlZC91aS5jOjEwNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBmaWxlIHN5c3RlbSB0eXBlIFwiJXNcIi4iCittc2dzdHIgIs601qq1xM7EvP7Ptc2zwODQzaGwJXOhsaGjIgorCisjOiBwYXJ0ZWQvdWkuYzoxMDgwCittc2dpZCAiRXhwZWN0aW5nIGEgZGlzayBsYWJlbCB0eXBlLiIKK21zZ3N0ciAi0OjSqrTFxcyx6sepwODQzaGjIgorCisjOiBwYXJ0ZWQvdWkuYzoxMTc4Cittc2dpZCAiQ2FuJ3QgY3JlYXRlIGFueSBtb3JlIHBhcnRpdGlvbnMuIgorbXNnc3RyICLO3reotLS9qLj8tuC31sf4oaMiCisKKyM6IHBhcnRlZC91aS5jOjExODgKK21zZ2lkICJFeHBlY3RpbmcgYSBwYXJ0aXRpb24gdHlwZS4iCittc2dzdHIgItDo0qq31sf4wODQzaGjIgorCisjOiBwYXJ0ZWQvdWkuYzoxMzE1Cittc2dpZCAib24iCittc2dzdHIgIr+qIgorCisjOiBwYXJ0ZWQvdWkuYzoxMzE2Cittc2dpZCAib2ZmIgorbXNnc3RyICK52CIKKworIzogcGFydGVkL3VpLmM6MTQzMQorbXNnaWQgIk9QVElPTnM6IgorbXNnc3RyICLRoc/uo7oiCisKKyM6IHBhcnRlZC91aS5jOjE0MzYKK21zZ2lkICJDT01NQU5EczoiCittc2dzdHIgIsP8we6juiIKKworIzogcGFydGVkL3VpLmM6MTQ0NQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2luZyAlc1xuIgorbXNnc3RyICLKudPDICVzXG4iCisKKyM6IHBhcnRlZC91aS5jOjE1MTkKK21zZ2lkICJUaGlzIGNvbW1hbmQgZG9lcyBub3QgbWFrZSBzZW5zZSBpbiBub24taW50ZXJhY3RpdmUgbW9kZS5cbiIKK21zZ3N0ciAiIgorCisjfiBtc2dpZCAid2hlcmUgbmVjZXNzYXJ5LCBwcm9tcHRzIGZvciB1c2VyIGludGVydmVudGlvbiIKKyN+IG1zZ3N0ciAi1Nqx2NKqyrGjrMzhyr7Tw7unIgorCisjLCBmdXp6eQorI34gbXNnaWQgIiIKKyN+ICJXaXRob3V0IGFyZ3VtZW50cywgcHJpbnQgZGlzcGxheXMgdGhlIGVudGlyZSBwYXJ0aXRpb24gdGFibGUuIFdpdGggIgorI34gIidmcmVlJ1xuIgorI34gImFyZ3VtZW50LCBpbmZvcm1hdGlvbiBhYm91dCBmcmVlIHNwYWNlIHdpbGwgYmUgZGlzcGxheWVkIG90aGVyd2lzZSBpZiBhXG4iCisjfiAicGFydGl0aW9uIG51bWJlciBpcyBnaXZlbiwgdGhlbiBtb3JlIGRldGFpbGVkIGluZm9ybWF0aW9uIGlzIGRpc3BsYXllZFxuIgorI34gImFib3V0IHRoYXQgcGFydGl0aW9uLiBJZiB0aGUgJ2FsbCcgYXJndW1lbnQgaXMgcGFzc2VkIGluc3RlYWQsIHBhcnRpdGlvblxuIgorI34gImluZm9ybWF0aW9uIGZvciBhbGwgZGV2aWNlcyB3aWxsIGJlIGRpc3BsYXllZC5cbiIKKyN+IG1zZ3N0ciAiIgorI34gIrK7tPiyzsr9o6xwcmludCDP1Mq+1fu49rfWx/ix7aGjXG4iCisjfiAiyOe5+7j4s/bBy7fWx/ix7aOsvs3P1Mq+uPy24FxuIgorI34gIrnY09q31sf4tcTP6s+40MXPoqGjXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiVGhlIHNlY3RvciBzaXplIG9uICVzIGlzICVkIGJ5dGVzLiAgUGFydGVkIGlzIGtub3duIG5vdCB0byB3b3JrIHByb3Blcmx5ICIKKyN+ICJ3aXRoIGRyaXZlcyB3aXRoIHNlY3RvciBzaXplcyBvdGhlciB0aGFuICVkIGJ5dGVzIgorI34gbXNnc3RyICIiCisjfiAiJXMgyc+1xMnIx/i089ChzqogJWQg19a92qGjxL/HsCBQYXJ0ZWQgsrvE3NTaycjH+LTz0KGyu8rHICVkINfWvdq1xLTFxczJzyIKKyN+ICLV/ci3uaTX96GjIgorCisjfiBtc2dpZCAiQ291bGQgbm90IHJlYWQgZ2VvbWV0cnkgb2YgJXMgLSAlcy4iCisjfiBtc2dzdHIgIs7et6i2wcihICVzIC0gJXMgtcS8uLrOveG5uaGjIgorCisjfiBtc2dpZCAiRGV2aWNlICVzIGhhcyBkb2RnZXkgZ2VvbWV0cnkuIgorI34gbXNnc3RyICLJ6LG4ICVzILXEvLi6zr3hubm63MbmudahoyIKKworI34gbXNnaWQgIklERSIKKyN+IG1zZ3N0ciAiSURFIgorCisjfiBtc2dpZCAiU0NTSSIKKyN+IG1zZ3N0ciAiU0NTSSIKKworI34gbXNnaWQgIkRldmljZSAlcyBpcyBuZWl0aGVyIGEgU0NTSSBub3IgSURFIGRyaXZlLiIKKyN+IG1zZ3N0ciAiyeixuCAlcyC8tLK7yscgU0NTSSC0xcXM0rKyu8rHIElERSC0xcXMoaMiCisKKyN+IG1zZ2lkICJFcnJvciByZWFkaW5nICVzICglcykgdG8gZGV0ZXJtaW5lIGlmIHBhcnRpdGlvbiBpcyBtb3VudGVkLiIKKyN+IG1zZ3N0ciAizqrIt7aot9bH+MrHt/G809TYtvi2wcihICVzICglcykgyrGz9rTtoaMiCisKKyN+IG1zZ2lkICIiCisjfiAiVW5hYmxlIHRvIGRldGVybWluZSBpZiBwYXJ0aXRpb25zIGFyZSBtb3VudGVkIHZpYSAvcHJvYy9tb3VudHMgb3IgL2V0Yy8iCisjfiAibXRhYi4gIE1ha2Ugc3VyZSB5b3UgZG9uJ3QgYXR0ZW1wdCB0byByZXNpemUgb3IgbW9kaWZ5IG1vdW50ZWQgZmlsZSAiCisjfiAic3lzdGVtcy4gIChFdmVuIHJlYWQtb25seSBtb3VudGVkKSIKKyN+IG1zZ3N0ciAiIgorI34gIs7et6jIt7aot9bH+MrHt/HKx82ouf0gL3Byb2MvbW91bnRzILvyIC9ldGMvbXRhYiC809TYtcSho8fryLfIz8T6sru74crUzbwiCisjfiAiuMSx5M7EvP7Ptc2ztcS089Chu/LV39DeuMS809TYtcTOxLz+z7XNs6GjKLy0yrmwtNa7tsG3vcq9vNPU2NKysrvQ0CkiCisKKyN+IG1zZ2lkICIiCisjfiAiVGhlIHBhcnRpdGlvbiB0YWJsZSBvbiAlcyBpcyBpbmNvbnNpc3RlbnQuICBUaGVyZSBhcmUgbWFueSByZWFzb25zIHdoeSAiCisjfiAidGhpcyBtaWdodCBiZSB0aGUgY2FzZS4gIEhvd2V2ZXIsIHRoZSBtb3N0IGxpa2VseSByZWFzb24gaXMgdGhhdCBMaW51eCAiCisjfiAiZGV0ZWN0ZWQgdGhlIEJJT1MgZ2VvbWV0cnkgZm9yICVzIGluY29ycmVjdGx5LiAgR05VIFBhcnRlZCBzdXNwZWN0cyB0aGUgIgorI34gInJlYWwgZ2VvbWV0cnkgc2hvdWxkIGJlICVkLyVkLyVkIChub3QgJWQvJWQvJWQpLiAgWW91IHNob3VsZCBjaGVjayB3aXRoICIKKyN+ICJ5b3VyIEJJT1MgZmlyc3QsIGFzIHRoaXMgbWF5IG5vdCBiZSBjb3JyZWN0LiAgWW91IGNhbiBpbmZvcm0gTGludXggYnkgIgorI34gImFkZGluZyB0aGUgcGFyYW1ldGVyICVzPSVkLCVkLCVkIHRvIHRoZSBjb21tYW5kIGxpbmUuICBTZWUgdGhlIExJTE8gb3IgIgorI34gIkdSVUIgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gIElmIHlvdSB0aGluayBQYXJ0ZWQncyBzdWdnZXN0ZWQgIgorI34gImdlb21ldHJ5IGlzIGNvcnJlY3QsIHlvdSBtYXkgc2VsZWN0IElnbm9yZSB0byBjb250aW51ZSAoYW5kIGZpeCBMaW51eCAiCisjfiAibGF0ZXIpLiAgT3RoZXJ3aXNlLCBzZWxlY3QgQ2FuY2VsIChhbmQgZml4IExpbnV4IGFuZC9vciB0aGUgQklPUyBub3cpLiIKKyN+IG1zZ3N0ciAiIgorI34gIiVzIMnPtcS31sf4srvQrbX3oaOy+sn61eLW1sfpv/a1xNSt0vK63LbgoaPIu7b4o6zX7r/JxNy1xNSt0vLKxyBMaW51eCC87LLiIgorI34gIrW9tcQgQklPUyC52NPaICVzILXEvLi6zr3hubnKx7TtzvO1xKGjR05VIFBhcnRlZCC7s9LJyrW8yrXEvLi6zr3hubnOqiAlZC8lIgorI34gImQvJWQgKLb4srvKxyAlZC8lZC8lZCmho9LyzqogQklPUyC/ycTcsrvV/ci3o6zE+tOmuMPK18/IvOyy6cT6tcQgQklPU6GjxPoiCisjfiAiv8nS1M2ouf3U2sP8we7Q0NbQzO2807LOyv0gJXM9JWQsJWQsJWQgwLTNqNaqIExpbnV4oaPP6sfpx+uyzrz7IExJTE8gu/IgIgorI34gIkdSVUIgtcTOxLW1oaPI57n7xPrIz86qIFBhcnRlZCDL+b2o0um1xLy4us694bm5ysfV/ci3tcSjrMT6v8nS1Lr2wtSyorzM0PggIgorI34gIiiyotTa0tS689De1f0gTGludXgpoaO38dTyo6zRodTxt8XG+iAosqLC7cnP0N7V/SBMaW51eCCyosfSL7vy1d8gQklPUymhoyIKKworI34gbXNnaWQgIiIKKyN+ICJUaGUgcGFydGl0aW9uIHRhYmxlIG9uICVzIGlzIGluY29uc2lzdGVudC4gIFRoZXJlIGFyZSBtYW55IHJlYXNvbnMgd2h5ICIKKyN+ICJ0aGlzIG1pZ2h0IGJlIHRoZSBjYXNlLiAgT2Z0ZW4sIHRoZSByZWFzb24gaXMgdGhhdCBMaW51eCBkZXRlY3RlZCB0aGUgIgorI34gIkJJT1MgZ2VvbWV0cnkgaW5jb3JyZWN0bHkuICBIb3dldmVyLCB0aGlzIGRvZXMgbm90IGFwcGVhciB0byBiZSB0aGUgY2FzZSAiCisjfiAiaGVyZS4gIEl0IGlzIHNhZmUgdG8gaWdub3JlLGJ1dCBpZ25vcmluZyBtYXkgY2F1c2UgKGZpeGFibGUpIHByb2JsZW1zICIKKyN+ICJ3aXRoIHNvbWUgYm9vdCBsb2FkZXJzLCBhbmQgbWF5IGNhdXNlIHByb2JsZW1zIHdpdGggRkFUIGZpbGUgc3lzdGVtcy4gICIKKyN+ICJVc2luZyBMQkEgaXMgcmVjb21tZW5kZWQuIgorI34gbXNnc3RyICIiCisjfiAiJXMgyc+1xLfWx/ix7bK70K2196Gjv8nE3LW81sLV4tbWx+m/9rXE1K3S8tPQuty24KGjzaizo6Os1K3S8srHIExpbnV4ILzssuIiCisjfiAitb21xCBCSU9TILy4us694bm5yse07c7ztcSho8i7tvijrM/W1NrLxrr1sqKyu8rH1eLW1sfpv/aho7r2wtTKx7CyyKu1xKOstasiCisjfiAiyse69sLUv8nE3LW81sLEs9CpxvS2r7ncwO3G97XEzsrM4iAov8nQ3ri0tcQpo6y7ub/JxNy1vNbCIEZBVCDOxLz+z7XNs7P2z9YiCisjfiAizsrM4qGjvajS6cq508MgTEJBoaMiCisKKyN+IG1zZ2lkICIiCisjfiAiVW5hYmxlIHRvIGFsaWduIHBhcnRpdGlvbiBwcm9wZXJseS4gIFRoaXMgcHJvYmFibHkgbWVhbnMgdGhhdCBhbm90aGVyICIKKyN+ICJwYXJ0aXRpb25pbmcgdG9vbCBnZW5lcmF0ZWQgYW4gaW5jb3JyZWN0IHBhcnRpdGlvbiB0YWJsZSwgYmVjYXVzZSBpdCAiCisjfiAiZGlkbid0IGhhdmUgdGhlIGNvcnJlY3QgQklPUyBnZW9tZXRyeS4gIEl0IGlzIHNhZmUgdG8gaWdub3JlLGJ1dCBpZ25vcmluZyAiCisjfiAibWF5IGNhdXNlIChmaXhhYmxlKSBwcm9ibGVtcyB3aXRoIHNvbWUgYm9vdCBsb2FkZXJzLiIKKyN+IG1zZ3N0ciAiIgorI34gIs7et6jV/ci3tdi21Mbrt9bH+KGj1eK/ycTc0uLOttfFxuTL/LfWx/i5pL7f08nT2sO709C1w7W91f3It7XEIEJJT1MgvLi6zr3hIgorI34gIrm5tvjJ+rPJwcu07c7ztcS31sf4se2ho7r2wtTKx7CyyKu1xKOstau69sLUv8nE3LW81sLEs9CpxvS2r7ncwO3G97P2z9a/ydDeIgorI34gIri0tcTOyszioaMiCisKKyN+IG1zZ2lkICJBdHRlbXB0IHRvIHJlYWQgc2VjdG9ycyAlbGQtJWxkIG91dHNpZGUgb2YgcGFydGl0aW9uIG9uICVzIgorI34gbXNnc3RyICLK1M28tsHIoSAlMyRzIMnPt9bH+NauzeK1xMnIx/ggJTEkbGQtJTIkbGQiCisKKyN+IG1zZ2lkICIiCisjfiAiVGhpcyBleHQyIGZpbGVzeXN0ZW0gaGFzIGEgcmF0aGVyIHN0cmFuZ2UgbGF5b3V0ISAgUGFydGVkIGNhbid0IHJlc2l6ZSAiCisjfiAidGhpcyAoeWV0KS4iCisjfiBtc2dzdHIgIrjDIGV4dDIgzsS8/s+1zbO1xLK8vtbP4LWxxua51qOhUGFydGVkIMnQx9LO3reouMSx5Mv8tcS089ChoaMiCisKKyN+IG1zZ2lkICJGaWxlIHN5c3RlbSBoYXMgYW4gaW52YWxpZCBzaWduYXR1cmUgZm9yIGEgRkFUIGZpbGUgc3lzdGVtcy4iCisjfiBtc2dzdHIgIs7EvP7Ptc2zuqzT0M7e0Ke1xCBGQVQgzsS8/s+1zbPHqcP7oaMiCisKKyN+IG1zZ2lkICIiCisjfiAiUGFydGl0aW9uICVzIGlzIGJlaW5nIHVzZWQuICBNb2RpZnlpbmcgaXQgd2hpbGUgaXQgaXMgaW4gdXNlIGNvdWxkIGNhdXNlICIKKyN+ICJzZXZlcmUgY29ycnVwdGlvbi4iCisjfiBtc2dzdHIgItX91NrKudPDt9bH+CAlc6Gj1NrKudPDyrHQ3rjEy/u9q7W81sLRz9bYtcTGxru1oaMiCisKKyN+IG1zZ2lkICIiCisjfiAiWW91IHJlcXVlc3RlZCB0byBjcmVhdGUgYSBwYXJ0aXRpb24gYXQgJS4zZi0lLjNmTWIuIFRoZSBjbG9zZXN0IFBhcnRlZCAiCisjfiAiY2FuIG1hbmFnZSBpcyAlLjNmLSUuM2ZNYi4iCisjfiBtc2dzdHIgIiIKKyN+ICLE+tKqx/PU2iAlLjNmIC0gJS4zZk1iILXEzrvWw7S0vai31sf4oaO/ybncwO21xNfuz+C9/LfWx/jOqiAlLjNmLSUuM2ZNYqGjIgorCisjfiBtc2dpZCAiIgorI34gIllvdSByZXF1ZXN0ZWQgdG8gbW92ZSB0aGUgcGFydGl0aW9uIHRvICUuM2YtJS4zZk1iLiBUaGUgY2xvc2VzdCBQYXJ0ZWQgIgorI34gImNhbiBtYW5hZ2UgaXMgJS4zZi0lLjNmTWIuIgorI34gbXNnc3RyICIiCisjfiAixPrH68fzvau31sf40sa2r7W9ICUuM2YgLSAlLjNmTWKho7/JudzA7dfuzPm9/LXEt9bH+M6qICUuM2YgLSAlLjNmTUKhoyIKKworI34gbXNnaWQgIkRpc2sgZ2VvbWV0cnkgZm9yICVzOiAwLjAwMC0lLjNmIG1lZ2FieXRlc1xuIgorI34gbXNnc3RyICIlcyC1xLTFxcy8uLrOveG5uaO6MC4wMDAtJS4zZiDV19fWvdpcbiIKKworI34gbXNnaWQgIkRpc2sgbGFiZWwgdHlwZTogJXNcbiIKKyN+IG1zZ3N0ciAitMXFzLHqx6nA4NDNo7olc1xuIgorCisjfiBtc2dpZCAiTWlub3IgICAgU3RhcnQgICAgICAgRW5kICAgICAiCisjfiBtc2dzdHIgIk1pbm9yICAgIMbwyry14yAgICAgICAg1tXWubXjICAiCisKKyN+IG1zZ2lkICJUeXBlICAgICAgIgorI34gbXNnc3RyICLA4NDNICAgICAgIgorCisjfiBtc2dpZCAiRmlsZXN5c3RlbSAgIgorI34gbXNnc3RyICLOxLz+z7XNsyAgICAiCisKKyN+IG1zZ2lkICJOYW1lICAgICAgICAgICAgICAgICAgIgorI34gbXNnc3RyICLD+7PGICAgICAgICAgICAgICAgICAgIgorCisjfiBtc2dpZCAiIgorI34gIllvdSByZXF1ZXN0ZWQgdG8gcmVzaXplIHRoZSBwYXJ0aXRpb24gdG8gJS4zZi0lLjNmTWIuIFRoZSBjbG9zZXN0IFBhcnRlZCAiCisjfiAiY2FuIG1hbmFnZSBpcyAlLjNmLSUuM2ZNYi4iCisjfiBtc2dzdHIgIiIKKyN+ICLE+tKqx/O9q7fWx/i4xLHktPPQobKisaO05rW9ICUuM2YgLSAlLjNmTWKho7/JudzA7dfuvdO9/LXEt9bH+M6qICUuM2YgLSAiCisjfiAiJS4zZk1ioaMiCisKKyN+IG1zZ2lkICJyZXNpemUgTUlOT1IgU1RBUlQgRU5EICAgICAgICByZXNpemUgZmlsZXN5c3RlbSBvbiBwYXJ0aXRpb24gTUlOT1IiCisjfiBtc2dzdHIgIiIKKyN+ICJyZXNpemUgTUlOT1IgxvDKvLXjINbV1rm14yAgICC4xLHkzrvT2rHgusXOqiBNSU5PUiC1xLfWx/jW0M7EvP7Ptc2ztcS089ChIgorCisjfiBtc2dpZCAiIgorI34gIllvdSBmb3VuZCBhIGJ1ZyBpbiBHTlUgUGFydGVkLiAgUGxlYXNlIGVtYWlsIGEgYnVnIHJlcG9ydCB0byBidWctIgorI34gInBhcnRlZEBnbnUub3JnIGNvbnRhaW5pbmcgdGhlIHZlcnNpb24gKCVzKSwgYW5kIHRoZSBmb2xsb3dpbmcgbWVzc2FnZTpcbiIKKyN+IG1zZ3N0ciAiIgorI34gIsT61dK1vcHLIEdOVSBQYXJ0ZWQgtcQgYnVnoaPH672ruqzT0LDmsb4gKCVzKSC6zdLUz8LQxc+itcQgYnVnILGouOa3osvNtb0gIgorI34gImJ1Zy1wYXJ0ZWRAZ251Lm9yZ6O6XG4iCisKKyN+IG1zZ2lkICIiCisjfiAiICBZb3UgaGF2ZSBXaW5kb3dzIEZBVCBwYXJ0aXRpb24ocykgdGhhdCBhcmUgbm90IHVzaW5nIExCQS4gIElmIHlvdXIgQklPUyAiCisjfiAic3VwcG9ydHMgTEJBLCB0aGVuIHlvdSBzaG91bGQgc3dpdGNoIHRvIExCQSBieSBzZXR0aW5nIHRoZSBMQkEgZmxhZyBvbiAiCisjfiAiYWxsIEZBVCBwYXJ0aXRpb25zLiAgT3RoZXJ3aXNlLCBtYWtlIHN1cmUgdGhlIG9wZXJhdGluZyBzeXN0ZW0gYW5kIHRoZSAiCisjfiAiQklPUyBoYXZlIHRoZSBzYW1lIGdlb21ldHJ5IGJlZm9yZSByZXNpemluZyBhbnkgRkFUIHBhcnRpdGlvbnMuIgorI34gbXNnc3RyICIiCisjfiAixPrKudPDwcuyu8q508MgTEJBILXEIFdpbmRvd3MgRkFUILfWx/iho8jnufvE+rXEIEJJT1Mg1qez1iBMQkGjrMTHw7TE+tOmuMMiCisjfiAizai5/dTay/nT0CBGQVQgt9bH+MnPyejWwyBMQkEgserWvtLUx9C7u7W9IExCQSDEo8q9oaO38dTyo6zU2rjEseTIzrrOIEZBVCAiCisjfiAit9bH+LTz0KG1xMqxuvLIt8jPstnX98+1zbO6zSBCSU9TIMq508PP4M2stcS8uLrOveG5uaGjIgorCisjfiBtc2dpZCAiIgorI34gIlRoZSBvcGVyYXRpbmcgc3lzdGVtIHRoaW5rcyB0aGUgZ2VvbWV0cnkgb24gJXMgaXMgJWQvJWQvJWQuICBUaGVyZWZvcmUsICIKKyN+ICJjeWxpbmRlciAxMDI0IGVuZHMgYXQgJS4zZk0uJXMiCisjfiBtc2dzdHIgIiIKKyN+ICKy2df3z7XNs8jPzqogJXMgtcS8uLrOveG5uc6qICVkLyVkLyVkoaPS8rTLo6zW+cPmIDEwMjQgveHK+NPaICUuM2ZNLiVzIgorCisjfiBtc2dpZCAiVGhlIG9wZXJhdGluZyBzeXN0ZW0gdGhpbmtzIHRoZSBnZW9tZXRyeSBvbiAlcyBpcyAlZC8lZC8lZC4lcyIKKyN+IG1zZ3N0ciAistnX98+1zbPIz86qICVzILXEvLi6zr3hubkgJWQvJWQvJWQuJXMiCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvcG8vemhfVFcuZ21vIGIvcGFydGVkLTEuOC43L3BvL3poX1RXLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmFiZDhkCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L3BvL3poX1RXLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYXJ0ZWQtMS44LjcvcG8vemhfVFcucG8gYi9wYXJ0ZWQtMS44LjcvcG8vemhfVFcucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA2OTNiOQotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC0xLjguNy9wby96aF9UVy5wbwpAQCAtMCwwICsxLDMxMjkgQEAKKyMgVHJhZGl0aW9uYWwgQ2hpbmVzZSBNZXNzYWdlcyBmb3IgcGFydGVkCisjIENvcHlyaWdodCAoQykgMjAwMywgMDUsIDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBXYW5nIExpIDxjaGFybGVzQGxpbnV4Lm5ldC5jbj4sIDIwMDMKKyMgV2VpLUx1biBDaGFvIDxjaGFvd2VpbHVuQHBjbWFpbC5jb20udHc+LCAyMDA1LCAwNgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogcGFydGVkIDEuNy4wcmMxXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGJ1Zy1wYXJ0ZWRAZ251Lm9yZ1xuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDA3LTA1LTA5IDE3OjAyLTA0MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDA2LTA3LTA0IDE4OjE4KzA4MDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IFdlaS1MdW4gQ2hhbyA8Y2hhb3dlaWx1bkBwY21haWwuY29tLnR3PlxuIgorIkxhbmd1YWdlLVRlYW06IENoaW5lc2UgKHRyYWRpdGlvbmFsKSA8emgtbDEwbkBsaW51eC5vcmcudHc+XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0xOyBwbHVyYWw9MDtcbiIKKworIzogbGliL2Nsb3Nlb3V0LmM6NzQKK21zZ2lkICJ3cml0ZSBlcnJvciIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXJyb3IuYzoxMjUKKyMsIGZ1enp5Cittc2dpZCAiVW5rbm93biBzeXN0ZW0gZXJyb3IiCittc2dzdHIgIuacquefpeeahOaqlOahiOezu+e1semhnuWei+OAjCVz44CN44CCIgorCisjOiBsaWIvZ2V0b3B0LmM6NTMxIGxpYi9nZXRvcHQuYzo1NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiBgJXMnIGlzIGFtYmlndW91c1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo1ODAgbGliL2dldG9wdC5jOjU4NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIGAtLSVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjU5MyBsaWIvZ2V0b3B0LmM6NTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYCVjJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6NjQxIGxpYi9nZXRvcHQuYzo2NjAgbGliL2dldG9wdC5jOjk3NiBsaWIvZ2V0b3B0LmM6OTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYCVzJyByZXF1aXJlcyBhbiBhcmd1bWVudFxuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo2OTggbGliL2dldG9wdC5jOjcwMQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5yZWNvZ25pemVkIG9wdGlvbiBgLS0lcydcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6NzA5IGxpYi9nZXRvcHQuYzo3MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVucmVjb2duaXplZCBvcHRpb24gYCVjJXMnXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjc2NCBsaWIvZ2V0b3B0LmM6NzY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbGxlZ2FsIG9wdGlvbiAtLSAlY1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo3NzMgbGliL2dldG9wdC5jOjc3NgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBvcHRpb24gLS0gJWNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZ2V0b3B0LmM6ODI4IGxpYi9nZXRvcHQuYzo4NDQgbGliL2dldG9wdC5jOjEwNDggbGliL2dldG9wdC5jOjEwNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCAtLSAlY1xuIgorbXNnc3RyICIiCisKKyM6IGxpYi9nZXRvcHQuYzo4OTcgbGliL2dldG9wdC5jOjkxMworIywgYy1mb3JtYXQKK21zZ2lkICIlczogb3B0aW9uIGAtVyAlcycgaXMgYW1iaWd1b3VzXG4iCittc2dzdHIgIiIKKworIzogbGliL2dldG9wdC5jOjkzNyBsaWIvZ2V0b3B0LmM6OTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvcHRpb24gYC1XICVzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6CisjLiBHZXQgdHJhbnNsYXRpb25zIGZvciBvcGVuIGFuZCBjbG9zaW5nIHF1b3RhdGlvbiBtYXJrcy4KKyMuCisjLiBUaGUgbWVzc2FnZSBjYXRhbG9nIHNob3VsZCB0cmFuc2xhdGUgImAiIHRvIGEgbGVmdAorIy4gcXVvdGF0aW9uIG1hcmsgc3VpdGFibGUgZm9yIHRoZSBsb2NhbGUsIGFuZCBzaW1pbGFybHkgZm9yCisjLiAiJyIuICBJZiB0aGUgY2F0YWxvZyBoYXMgbm8gdHJhbnNsYXRpb24sCisjLiBsb2NhbGVfcXVvdGluZ19zdHlsZSBxdW90ZXMgYGxpa2UgdGhpcycsIGFuZAorIy4gY2xvY2FsZV9xdW90aW5nX3N0eWxlIHF1b3RlcyAibGlrZSB0aGlzIi4KKyMuCisjLiBGb3IgZXhhbXBsZSwgYW4gQW1lcmljYW4gRW5nbGlzaCBVbmljb2RlIGxvY2FsZSBzaG91bGQKKyMuIHRyYW5zbGF0ZSAiYCIgdG8gVSsyMDFDIChMRUZUIERPVUJMRSBRVU9UQVRJT04gTUFSSyksIGFuZAorIy4gc2hvdWxkIHRyYW5zbGF0ZSAiJyIgdG8gVSsyMDFEIChSSUdIVCBET1VCTEUgUVVPVEFUSU9OCisjLiBNQVJLKS4gIEEgQnJpdGlzaCBFbmdsaXNoIFVuaWNvZGUgbG9jYWxlIHNob3VsZCBpbnN0ZWFkCisjLiB0cmFuc2xhdGUgdGhlc2UgdG8gVSsyMDE4IChMRUZUIFNJTkdMRSBRVU9UQVRJT04gTUFSSykgYW5kCisjLiBVKzIwMTkgKFJJR0hUIFNJTkdMRSBRVU9UQVRJT04gTUFSSyksIHJlc3BlY3RpdmVseS4KKyMuCisjLiBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIHB1dCBoZXJlLCBwbGVhc2Ugc2VlCisjLiA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9RdW90YXRpb25fbWFyayNHbHlwaHM+CisjLiBhbmQgdXNlIGdseXBocyBzdWl0YWJsZSBmb3IgeW91ciBsYW5ndWFnZS4KKyM6IGxpYi9xdW90ZWFyZy5jOjIyOQorbXNnaWQgImAiCittc2dzdHIgIiIKKworIzogbGliL3F1b3RlYXJnLmM6MjMwCittc2dpZCAiJyIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjEzMQorbXNnaWQgIlN1Y2Nlc3MiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxMzQKK21zZ2lkICJObyBtYXRjaCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjEzNworbXNnaWQgIkludmFsaWQgcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTQwCittc2dpZCAiSW52YWxpZCBjb2xsYXRpb24gY2hhcmFjdGVyIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTQzCittc2dpZCAiSW52YWxpZCBjaGFyYWN0ZXIgY2xhc3MgbmFtZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE0NgorbXNnaWQgIlRyYWlsaW5nIGJhY2tzbGFzaCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE0OQorbXNnaWQgIkludmFsaWQgYmFjayByZWZlcmVuY2UiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNTIKK21zZ2lkICJVbm1hdGNoZWQgWyBvciBbXiIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE1NQorbXNnaWQgIlVubWF0Y2hlZCAoIG9yIFxcKCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE1OAorbXNnaWQgIlVubWF0Y2hlZCBcXHsiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNjEKK21zZ2lkICJJbnZhbGlkIGNvbnRlbnQgb2YgXFx7XFx9IgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTY0CisjLCBmdXp6eQorbXNnaWQgIkludmFsaWQgcmFuZ2UgZW5kIgorbXNnc3RyICLnhKHmlYjnmoTnt6jomZ/jgIIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTY3Cittc2dpZCAiTWVtb3J5IGV4aGF1c3RlZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE3MAorbXNnaWQgIkludmFsaWQgcHJlY2VkaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVnY29tcC5jOjE3MworbXNnaWQgIlByZW1hdHVyZSBlbmQgb2YgcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZWdjb21wLmM6MTc2Cittc2dpZCAiUmVndWxhciBleHByZXNzaW9uIHRvbyBiaWciCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzoxNzkKK21zZ2lkICJVbm1hdGNoZWQgKSBvciBcXCkiCittc2dzdHIgIiIKKworIzogbGliL3JlZ2NvbXAuYzo2ODAKK21zZ2lkICJObyBwcmV2aW91cyByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgIiIKKworIzogbGliL3JwbWF0Y2guYzo3MAorbXNnaWQgIl5beVldIgorbXNnc3RyICIiCisKKyM6IGxpYi9ycG1hdGNoLmM6NzMKK21zZ2lkICJeW25OXSIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogVHJhbnNsYXRlICIoQykiIHRvIHRoZSBjb3B5cmlnaHQgc3ltYm9sCisjLiAoQy1pbi1hLWNpcmNsZSksIGlmIHRoaXMgc3ltYm9sIGlzIGF2YWlsYWJsZSBpbiB0aGUgdXNlcidzCisjLiBsb2NhbGUuICBPdGhlcndpc2UsIGRvIG5vdCB0cmFuc2xhdGUgIihDKSI7IGxlYXZlIGl0IGFzLWlzLgorIzogbGliL3ZlcnNpb24tZXRjLmM6NjYKK21zZ2lkICIoQykiCittc2dzdHIgIiIKKworIzogbGliL3ZlcnNpb24tZXRjLmM6NjgKK21zZ2lkICIiCisiXG4iCisiTGljZW5zZSBHUEx2Mis6IEdOVSBHUEwgdmVyc2lvbiAyIG9yIGxhdGVyIDxodHRwOi8vZ251Lm9yZy9saWNlbnNlcy9ncGwuIgorImh0bWw+XG4iCisiVGhpcyBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgYXJlIGZyZWUgdG8gY2hhbmdlIGFuZCByZWRpc3RyaWJ1dGUgaXQuXG4iCisiVGhlcmUgaXMgTk8gV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIldyaXR0ZW4gYnkgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjg4CisjLCBjLWZvcm1hdAorbXNnaWQgIldyaXR0ZW4gYnkgJXMgYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzo5MgorIywgYy1mb3JtYXQKK21zZ2lkICJXcml0dGVuIGJ5ICVzLCAlcywgYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjLiBZb3UgY2FuIHVzZSBsaW5lIGJyZWFrcywgZXN0aW1hdGluZyB0aGF0IGVhY2ggYXV0aG9yIG5hbWUgb2NjdXBpZXMKKyMuIGNhLiAxNiBzY3JlZW4gY29sdW1ucyBhbmQgdGhhdCBhIHNjcmVlbiBsaW5lIGhhcyBjYS4gODAgY29sdW1ucy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjLiBZb3UgY2FuIHVzZSBsaW5lIGJyZWFrcywgZXN0aW1hdGluZyB0aGF0IGVhY2ggYXV0aG9yIG5hbWUgb2NjdXBpZXMKKyMuIGNhLiAxNiBzY3JlZW4gY29sdW1ucyBhbmQgdGhhdCBhIHNjcmVlbiBsaW5lIGhhcyBjYS4gODAgY29sdW1ucy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjEwNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorIiVzLCBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiJXMsICVzLCBhbmQgJXMuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IEVhY2ggJXMgZGVub3RlcyBhbiBhdXRob3IgbmFtZS4KKyMuIFlvdSBjYW4gdXNlIGxpbmUgYnJlYWtzLCBlc3RpbWF0aW5nIHRoYXQgZWFjaCBhdXRob3IgbmFtZSBvY2N1cGllcworIy4gY2EuIDE2IHNjcmVlbiBjb2x1bW5zIGFuZCB0aGF0IGEgc2NyZWVuIGxpbmUgaGFzIGNhLiA4MCBjb2x1bW5zLgorIzogbGliL3ZlcnNpb24tZXRjLmM6MTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXcml0dGVuIGJ5ICVzLCAlcywgJXMsXG4iCisiJXMsICVzLCAlcywgYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjLiBZb3UgY2FuIHVzZSBsaW5lIGJyZWFrcywgZXN0aW1hdGluZyB0aGF0IGVhY2ggYXV0aG9yIG5hbWUgb2NjdXBpZXMKKyMuIGNhLiAxNiBzY3JlZW4gY29sdW1ucyBhbmQgdGhhdCBhIHNjcmVlbiBsaW5lIGhhcyBjYS4gODAgY29sdW1ucy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjEyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorIiVzLCAlcywgJXMsICVzLFxuIgorImFuZCAlcy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogRWFjaCAlcyBkZW5vdGVzIGFuIGF1dGhvciBuYW1lLgorIy4gWW91IGNhbiB1c2UgbGluZSBicmVha3MsIGVzdGltYXRpbmcgdGhhdCBlYWNoIGF1dGhvciBuYW1lIG9jY3VwaWVzCisjLiBjYS4gMTYgc2NyZWVuIGNvbHVtbnMgYW5kIHRoYXQgYSBzY3JlZW4gbGluZSBoYXMgY2EuIDgwIGNvbHVtbnMuCisjOiBsaWIvdmVyc2lvbi1ldGMuYzoxMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldyaXR0ZW4gYnkgJXMsICVzLCAlcyxcbiIKKyIlcywgJXMsICVzLCAlcyxcbiIKKyIlcywgYW5kICVzLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBFYWNoICVzIGRlbm90ZXMgYW4gYXV0aG9yIG5hbWUuCisjLiBZb3UgY2FuIHVzZSBsaW5lIGJyZWFrcywgZXN0aW1hdGluZyB0aGF0IGVhY2ggYXV0aG9yIG5hbWUgb2NjdXBpZXMKKyMuIGNhLiAxNiBzY3JlZW4gY29sdW1ucyBhbmQgdGhhdCBhIHNjcmVlbiBsaW5lIGhhcyBjYS4gODAgY29sdW1ucy4KKyM6IGxpYi92ZXJzaW9uLWV0Yy5jOjE0MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV3JpdHRlbiBieSAlcywgJXMsICVzLFxuIgorIiVzLCAlcywgJXMsICVzLFxuIgorIiVzLCAlcywgYW5kIG90aGVycy5cbiIKK21zZ3N0ciAiIgorCisjOiBsaWIveGFsbG9jLWRpZS5jOjM1Cittc2dpZCAibWVtb3J5IGV4aGF1c3RlZCIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6MjM3Cittc2dpZCAiRGlzayBJbWFnZSIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6MzM4IGxpYnBhcnRlZC9hcmNoL2dudS5jOjI2MQorIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMjcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIG9wZW5pbmcgJXM6ICVzIgorbXNnc3RyICLplovllZ8gJXMg5Ye66Yyv77yaJXMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzozNDkgbGlicGFydGVkL2FyY2gvZ251LmM6MjcxCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjEyODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIG9wZW4gJXMgcmVhZC13cml0ZSAoJXMpLiAgJXMgaGFzIGJlZW4gb3BlbmVkIHJlYWQtb25seS4iCittc2dzdHIgIueEoeazlemWi+WVnyAlcyDku6XoroDlr6sgKCVzKeOAgiVzIOW3sueUqOWUr+iugOeahOaWueW8j+mWi+WVn+OAgiIKKworIzogbGlicGFydGVkL2FyY2gvYmVvcy5jOjQxMSBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjE0MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZHVyaW5nIHNlZWsgZm9yIHJlYWQgb24gJXMiCittc2dzdHIgIuWcqOeCuuiugOWPliAlMiRzIOiAjOWRvOWPqyBzZWVrIOaZgiAlMSRzIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9iZW9zLmM6NDQ0IGxpYnBhcnRlZC9hcmNoL2dudS5jOjQ0OSBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzo1NDgKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjY3NiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjEzOTEKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkdXJpbmcgcmVhZCBvbiAlcyIKK21zZ3N0ciAi5Zyo6K6A5Y+WICUyJHMg5pyf6ZaTICUxJHMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzo0ODAgbGlicGFydGVkL2FyY2gvZ251LmM6NTA5CisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjE1NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2FuJ3Qgd3JpdGUgdG8gJXMsIGJlY2F1c2UgaXQgaXMgb3BlbmVkIHJlYWQtb25seS4iCittc2dzdHIgIueUseaWvCAlcyDmmK/ku6XllK/oroDmlrnlvI/plovllZ/nmoTvvIzlm6DmraTnhKHms5Xlr6vlhaXjgIIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzo0OTYgbGlicGFydGVkL2FyY2gvbGludXguYzoxNTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGR1cmluZyBzZWVrIGZvciB3cml0ZSBvbiAlcyIKK21zZ3N0ciAi5Zyo54K65a+r5YWlICUyJHMg5ZG85Y+rIHNlZWsg5pmCICUxJHMiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2Jlb3MuYzo1MzMgbGlicGFydGVkL2FyY2gvZ251LmM6NTg1IGxpYnBhcnRlZC9hcmNoL2dudS5jOjYzMAorIzogbGlicGFydGVkL2FyY2gvZ251LmM6NzA3IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTUxNworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxNjEyIGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTY4NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkdXJpbmcgd3JpdGUgb24gJXMiCittc2dzdHIgIuWcqOWvq+WFpSAlMiRzIOaZgiAlMSRzIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjYzIHBhcnRwcm9iZS9wYXJ0cHJvYmUuYzoxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5IGAlcyAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbT1BUSU9OXVxuIgorIiAgb3I6ICAlcyBERVZJQ0UgTUlOT1JcbiIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjcwCittc2dpZCAiIgorIkNsZWFyIHVudXNlZCBzcGFjZSBvbiBhIEZBVCBwYXJ0aXRpb24gKGEgR05VIFBhcnRlZCB0ZXN0aW5nIHRvb2wpLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGRlYnVnL2NsZWFyZmF0L2NsZWFyZmF0LmM6NzQKK21zZ2lkICIgICAgICAtLWhlbHAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0XG4iCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzo3NQorbXNnaWQgIiAgICAgIC0tdmVyc2lvbiAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXRcbiIKK21zZ3N0ciAiIgorCisjOiBkZWJ1Zy9jbGVhcmZhdC9jbGVhcmZhdC5jOjc3IHBhcnRwcm9iZS9wYXJ0cHJvYmUuYzoxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlJlcG9ydCBidWdzIHRvIDwlcz4uXG4iCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzoyODUKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIGZldyBhcmd1bWVudHMiCittc2dzdHIgIiIKKworIzogZGVidWcvY2xlYXJmYXQvY2xlYXJmYXQuYzoyOTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyIKK21zZ3N0ciAi6YGO5aSa55qE5LiN55W25YiG6aCB44CCIgorCisjOiBwYXJ0cHJvYmUvcGFydHByb2JlLmM6MTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbT1BUSU9OXSBbREVWSUNFXS4uLlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRwcm9iZS9wYXJ0cHJvYmUuYzoxNDIKK21zZ2lkICIiCisiSW5mb3JtIHRoZSBPUyBvZiBwYXJ0aXRpb24gdGFibGUgY2hhbmdlcy5cbiIKKyJcbiIKKyIgIC1kLCAtLW5vLXVwZGF0ZSAgZG9uJ3QgdXBkYXRlIHRoZSBrZXJuZWxcbiIKKyIgIC1zLCAtLXN1bW1hcnkgICAgcHJpbnQgYSBzdW1tYXJ5IG9mIGNvbnRlbnRzXG4iCisiICAtaCwgLS1oZWxwICAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0XG4iCisiICAtdiwgLS12ZXJzaW9uICAgIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0XG4iCittc2dzdHIgIiIKKworIzogcGFydHByb2JlL3BhcnRwcm9iZS5jOjE1MAorbXNnaWQgIiIKKyJcbiIKKyJXaXRoIG5vIERFVklDRSwgcHJvYmUgYWxsIHBhcnRpdGlvbnMuXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIG9wZW4gJXMuIgorbXNnc3RyICLnhKHms5XplovllZ8gJXPjgIIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2dudS5jOjExNAorbXNnaWQgIlVuYWJsZSB0byBwcm9iZSBzdG9yZS4iCittc2dzdHIgIueEoeazleWBtea4rOWEsuWtmOioreWCmeOAgiIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6MzUyCittc2dpZCAiIgorIlRoZSBwYXJ0aXRpb24gdGFibGUgY2Fubm90IGJlIHJlLXJlYWQuICBUaGlzIG1lYW5zIHlvdSBuZWVkIHRvIHJlYm9vdCBiZWZvcmUgIgorIm1vdW50aW5nIGFueSBtb2RpZmllZCBwYXJ0aXRpb25zLiAgWW91IGFsc28gbmVlZCB0byByZWluc3RhbGwgeW91ciBib290ICIKKyJsb2FkZXIgYmVmb3JlIHlvdSByZWJvb3QgKHdoaWNoIG1heSByZXF1aXJlIG1vdW50aW5nIG1vZGlmaWVkIHBhcnRpdGlvbnMpLiAgIgorIkl0IGlzIGltcG9zc2libGUgZG8gYm90aCB0aGluZ3MhICBTbyB5b3UnbGwgbmVlZCB0byBib290IG9mZiBhIHJlc2N1ZSBkaXNrLCAiCisiYW5kIHJlaW5zdGFsbCB5b3VyIGJvb3QgbG9hZGVyIGZyb20gdGhlIHJlc2N1ZSBkaXNrLiAgUmVhZCBzZWN0aW9uIDQgb2YgdGhlICIKKyJQYXJ0ZWQgVXNlciBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiIgorIueEoeazlemHjeaWsOiugOWFpeWIhuWJsuWNgOihqOOAguWQjOaoo++8jOaCqOW/hemgiOWcqOaOm+i8ieS7u+S9leS/ruaUuemBjueahOWIhuWJsuWNgOS5i+WJjemHjeaWsOWVn+WLleOAguaCqOmChCIKKyLpnIDopoHlnKjmgqjph43mlrDllZ/li5XkuYvliY3ph43mlrDlronoo53plovmqZ/ovInlhaXnqIvlvI8gKOWug+WPr+iDvemcgOimgeaOm+i8ieS/ruaUuemBjueahOWIhuWJsuWNgCnjgILlkIzmmYIiCisi5YGa6YCZ5YWp5Lu25LqL5piv5LiN5Y+v6IO955qE77yB5omA5Lul5oKo5bCx6ZyA6KaB5b6e5Zue5b6p56Kf54mH5ZWf5YuV77yM5Lim5b6e5Zue5b6p56Kf54mH6YeN5paw5a6J6KOd5oKo55qE6ZaLIgorIuapn+i8ieWFpeeoi+W8j+OAguabtOWkmuips+aDheiri+WPg+mWsSBQYXJ0ZWQg5L2/55So6ICF5paH5Lu255qE56ys5Zub56+A44CCIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzozNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBwYXJ0aXRpb24gdGFibGUgb24gJXMgY2Fubm90IGJlIHJlLXJlYWQgKCVzKS4gIFRoaXMgbWVhbnMgdGhlIEh1cmQga25vd3MgIgorIm5vdGhpbmcgYWJvdXQgYW55IG1vZGlmaWNhdGlvbnMgeW91IG1hZGUuICBZb3Ugc2hvdWxkIHJlYm9vdCB5b3VyIGNvbXB1dGVyICIKKyJiZWZvcmUgZG9pbmcgYW55dGhpbmcgd2l0aCAlcy4iCittc2dzdHIgIiIKKyIlcyDkuIrnmoTliIblibLljYDooajnhKHms5Xooqvph43mlrDoroDlj5YgKCVzKeOAgumAmeaEj+WRs+iRlyBIdXJkIOS4jeefpemBk+S7u+S9leaCqOaJgOS9nOeahOS/ruaUueOAguaCqCIKKyLmh4noqbLlnKjlsI0gJXMg5YGa5Lu75L2V5pON5L2c5LmL5YmN6YeN5paw5ZWf5YuV5oKo55qE6Zu76IWm44CCIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9nbnUuYzozODAgcGFydGVkL3BhcnRlZC5jOjI0NDMKK21zZ2lkICIiCisiWW91IHNob3VsZCByZWluc3RhbGwgeW91ciBib290IGxvYWRlciBiZWZvcmUgcmVib290aW5nLiAgUmVhZCBzZWN0aW9uIDQgb2YgIgorInRoZSBQYXJ0ZWQgVXNlciBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiIgorIuaCqOaHieipsuWcqOmHjeaWsOWVn+WLleS5i+WJjemHjeaWsOWuieijneaCqOeahOmWi+apn+i8ieWFpeeoi+W8j+OAguips+aDheiri+mWseiugCBQYXJ0ZWQg5L2/55So6ICF5paH5Lu255qEIgorIuesrOWbm+evgOOAgiIKKworIzogbGlicGFydGVkL2FyY2gvZ251LmM6NzcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHRyeWluZyB0byBzeW5jICVzIHRvIGRpc2siCittc2dzdHIgIiVzIOippuWcluWwhyAlcyDlkIzmraXliLDno4Hnop/kuIoiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6NDA4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzdGF0IGRldmljZSAlcyAtICVzLiIKK21zZ3N0ciAi54Sh5rOV5bCN6Kit5YKZICVzIC0gJXMg6YCy6KGMIHN0YXQg5pON5L2c44CCIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjUyMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBkZXRlcm1pbmUgc2VjdG9yIHNpemUgZm9yICVzOiAlcy5cbiIKKyJVc2luZyB0aGUgZGVmYXVsdCBzZWN0b3Igc2l6ZSAoJWxsZCkuIgorbXNnc3RyICIiCisi54Sh5rOV5rG65a6aICVzIOeahOejgeWNgOWkp+Wwj++8miVz44CCXG4iCisi5L2/55So6aCQ6Kit56OB5Y2A5aSn5bCPICglZCnjgIIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6NTM5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiRGV2aWNlICVzIGhhcyBhIGxvZ2ljYWwgc2VjdG9yIHNpemUgb2YgJWxsZC4gIE5vdCBhbGwgcGFydHMgb2YgR05VIFBhcnRlZCAiCisic3VwcG9ydCB0aGlzIGF0IHRoZSBtb21lbnQsIGFuZCB0aGUgd29ya2luZyBjb2RlIGlzIEhJR0hMWSBFWFBFUklNRU5UQUwuXG4iCittc2dzdHIgIiVzIOeahOmCj+i8r+ejgeWNgOWkp+Wwj+eCuiAlZOOAguebruWJjeS4pumdnuWFqOmDqOeahCBHTlUgUGFydGVkIOmDveaUr+aPtOWug+OAglxuIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjU3OQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZGV0ZXJtaW5lIHRoZSBzaXplIG9mICVzICglcykuIgorbXNnc3RyICLnhKHms5XnorrlrpogJXMgKCVzKSDnmoTlpKflsI/jgIIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6NjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBnZXQgaWRlbnRpdHkgb2YgZGV2aWNlICVzIC0gJXMiCittc2dzdHIgIueEoeazleeNsuWPluioreWCmSAlcyAtICVzIOeahOaomeitmCIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo2NzcKK21zZ2lkICJHZW5lcmljIElERSIKK21zZ3N0ciAi5LiA6IisIElERSIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzo2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkRldmljZSAlcyBoYXMgbXVsdGlwbGUgKCVkKSBsb2dpY2FsIHNlY3RvcnMgcGVyIHBoeXNpY2FsIHNlY3Rvci5cbiIKKyJHTlUgUGFydGVkIHN1cHBvcnRzIHRoaXMgRVhQRVJJTUVOVEFMTFkgZm9yIHNvbWUgc3BlY2lhbCBkaXNrIGxhYmVsL2ZpbGUgIgorInN5c3RlbSBjb21iaW5hdGlvbnMsIGUuZy4gR1BUIGFuZCBleHQyLzMuXG4iCisiUGxlYXNlIGNvbnN1bHQgdGhlIHdlYiBzaXRlIGZvciB1cC10by1kYXRlIGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiIgorIuijnee9riAlcyDnmoTmr4/kuIDniannkIbno4HljYDlhbfmnInlpJrlgIsgKCVkKSDpgo/ovK/no4HljYDjgIJcbiIKKyJHTlUgUGFydGVkIOWwjeafkOS6m+eJueWumuejgeein+aomeexpC/mqpTmoYjns7vntbHntYTlkIjpgoTmmK9b5a+m6amX5oCnXeaUr+aPtO+8jOWDj+aYryBHUFQg5ZKMICIKKyJleHQyLzPjgIJcbiIKKyLoq4vlj4PnhafntrLpoIHku6XnjbLlvpfmnIDmlrDnmoTos4foqIrjgIIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6ODczCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGluaXRpYWxpc2luZyBTQ1NJIGRldmljZSAlcyAtICVzIgorbXNnc3RyICLliJ3lp4vljJYgU0NTSSDoqK3lgpkgJXMgLSAlcyDlh7rpjK8iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6OTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZGV2aWNlICVzIGhhcyB6ZXJvIGxlbmd0aCwgYW5kIGNhbid0IHBvc3NpYmx5IHN0b3JlIGEgZmlsZSBzeXN0ZW0gb3IgIgorInBhcnRpdGlvbiB0YWJsZS4gIFBlcmhhcHMgeW91IHNlbGVjdGVkIHRoZSB3cm9uZyBkZXZpY2U/IgorbXNnc3RyICIiCisi6Kit5YKZICVzIOeahOmVt+W6pueCuumbtu+8jOWboOatpOS5n+ioseeEoeazleS/neWtmOaqlOahiOezu+e1seaIluWIhuWJsuWNgOihqOOAguWPr+iDveaCqOmBuOaTh+S6humMr+iqpOeahOiorSIKKyLlgpnvvJ8iCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTAzMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlVuYWJsZSB0byBkZXRlcm1pbmUgZ2VvbWV0cnkgb2YgZmlsZS9kZXZpY2UgJXMuICBZb3Ugc2hvdWxkIG5vdCB1c2UgUGFydGVkICIKKyJ1bmxlc3MgeW91IFJFQUxMWSBrbm93IHdoYXQgeW91J3JlIGRvaW5nISIKK21zZ3N0ciAiIgorIueEoeazleeiuuWumuaqlOahiC/oqK3lgpnnmoTlub7kvZXntZDmp4vjgILpmaTpnZ7mgqjnorrlr6bnn6XpgZPmgqjlnKjlgZrku4DpurzvvIzlkKbliYfmgqjkuI3oqbLkvb/nlKggIgorIlBhcnRlZO+8gSIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTEwCittc2dpZCAiREFDOTYwIFJBSUQgY29udHJvbGxlciIKK21zZ3N0ciAiREFDOTYwIFJBSUQg5o6n5Yi25ZmoIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExMTUKK21zZ2lkICJQcm9taXNlIFNYOCBTQVRBIERldmljZSIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExMjAKK21zZ2lkICJJQk0gUzM5MCBEQVNEIGRyaXZlIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTEyNQorbXNnaWQgIklCTSBpU2VyaWVzIFZpcnR1YWwgREFTRCIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExMzAKK21zZ2lkICJDb21wYXEgU21hcnQgQXJyYXkiCittc2dzdHIgIkNvbXBhcSDmmbrmhaflnovpmaPliJciCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTEzNQorbXNnaWQgIkFUQVJBSUQgQ29udHJvbGxlciIKK21zZ3N0ciAiQVRBUkFJRCDmjqfliLblmagiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTE0MAorbXNnaWQgIkkyTyBDb250cm9sbGVyIgorbXNnc3RyICJJMk8g5o6n5Yi25ZmoIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExNDUKK21zZ2lkICJVc2VyLU1vZGUgTGludXggVUJEIgorbXNnc3RyICLkvb/nlKjogIXmqKHlvI8gTGludXggVUJEIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjExNTYKK21zZ2lkICJMaW51eCBkZXZpY2UtbWFwcGVyIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6MTE2MgorbXNnaWQgIlVua25vd24iCittc2dzdHIgIuacquefpSIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoxMTY5Cittc2dpZCAicGVkX2RldmljZV9uZXcoKSAgVW5zdXBwb3J0ZWQgZGV2aWNlIHR5cGUiCittc2dzdHIgInBlZF9kZXZpY2VfbmV3KCkgIOS4jeaUr+aPtOeahOioreWCmemhnuWeiyIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoyMDgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFcnJvciBpbmZvcm1pbmcgdGhlIGtlcm5lbCBhYm91dCBtb2RpZmljYXRpb25zIHRvIHBhcnRpdGlvbiAlcyAtLSAlcy4gIFRoaXMgIgorIm1lYW5zIExpbnV4IHdvbid0IGtub3cgYWJvdXQgYW55IGNoYW5nZXMgeW91IG1hZGUgdG8gJXMgdW50aWwgeW91IHJlYm9vdCAtLSAiCisic28geW91IHNob3VsZG4ndCBtb3VudCBpdCBvciB1c2UgaXQgaW4gYW55IHdheSBiZWZvcmUgcmVib290aW5nLiIKK21zZ3N0ciAiIgorIumAmuefpeaguOW/g+mXnOaWvOWIhuWJsuWNgCAlcyAtLSAlcyDnmoTkv67mlLnmmYLlh7rpjK/jgILpgJnmhI/lkbPokZcgTGludXgg5Zyo6YeN5paw5ZWf5YuV5LmL5YmN54Sh5rOV55+lIgorIumBk+aCqOmHneWwjSAlcyDmiYDkvZznmoTku7vkvZXkv67mlLkgLSDmiYDku6XmgqjkuZ/kuI3og73lnKjph43mlrDllZ/li5XkuYvliY3mjpvovInmiJbku6Xku7vkvZXmlrnlvI/kvb/nlKgiCisi5a6D44CCIgorCisjOiBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOjIyNjIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJwYXJ0ZWQgd2FzIHVuYWJsZSB0byByZS1yZWFkIHRoZSBwYXJ0aXRpb24gdGFibGUgb24gJXMgKCVzKS4gIFRoaXMgbWVhbnMgIgorIkxpbnV4IHdvbid0IGtub3cgYW55dGhpbmcgYWJvdXQgdGhlIG1vZGlmaWNhdGlvbnMgeW91IG1hZGUuICIKK21zZ3N0ciAiIgorIuaguOW/g+eEoeazlemHjeaWsOiugOWPliAlcyAoJXMpIOS4iueahOWIhuWJsuWNgOihqOOAgumAmeaEj+WRs+mAmSBMaW51eCDlnKjmgqjph43mlrDllZ/li5XkuYvliY3nhKHms5Xnn6UiCisi6YGT5Lu75L2V5L+u5pS544CC5oKo5oeJ6Kmy5Zyo5bCNICVzIOWBmuS7u+S9leaTjeS9nOS5i+WJjemHjeaWsOWVn+WLleaCqOeahOmbu+iFpuOAgiIKKworIzogbGlicGFydGVkL2FyY2gvbGludXguYzoyMzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUga2VybmVsIHdhcyB1bmFibGUgdG8gcmUtcmVhZCB0aGUgcGFydGl0aW9uIHRhYmxlIG9uICVzICglcykuICBUaGlzIG1lYW5zICIKKyJMaW51eCB3b24ndCBrbm93IGFueXRoaW5nIGFib3V0IHRoZSBtb2RpZmljYXRpb25zIHlvdSBtYWRlIHVudGlsIHlvdSAiCisicmVib290LiAgWW91IHNob3VsZCByZWJvb3QgeW91ciBjb21wdXRlciBiZWZvcmUgZG9pbmcgYW55dGhpbmcgd2l0aCAlcy4iCittc2dzdHIgIiIKKyLmoLjlv4PnhKHms5Xph43mlrDoroDlj5YgJXMgKCVzKSDkuIrnmoTliIblibLljYDooajjgILpgJnmhI/lkbPpgJkgTGludXgg5Zyo5oKo6YeN5paw5ZWf5YuV5LmL5YmN54Sh5rOV55+lIgorIumBk+S7u+S9leS/ruaUueOAguaCqOaHieipsuWcqOWwjSAlcyDlgZrku7vkvZXmk43kvZzkuYvliY3ph43mlrDllZ/li5XmgqjnmoTpm7vohabjgIIiCisKKyM6IGxpYnBhcnRlZC9jcy9nZW9tLmM6MTYyCittc2dpZCAiQ2FuJ3QgaGF2ZSB0aGUgZW5kIGJlZm9yZSB0aGUgc3RhcnQhIgorbXNnc3RyICLnhKHms5XlnKjplovlp4vkuYvliY3ntZDmnZ/vvIEiCisKKyM6IGxpYnBhcnRlZC9jcy9nZW9tLmM6MTY5Cittc2dpZCAiQ2FuJ3QgaGF2ZSBhIHBhcnRpdGlvbiBvdXRzaWRlIHRoZSBkaXNrISIKK21zZ3N0ciAi54Sh5rOV6K6T5YiG5Ymy5Y2A6LaF5Ye656OB56Kf77yBIgorCisjOiBsaWJwYXJ0ZWQvY3MvZ2VvbS5jOjM2NgorIywgYy1mb3JtYXQKK21zZ2lkICJBdHRlbXB0IHRvIHdyaXRlIHNlY3RvcnMgJWxkLSVsZCBvdXRzaWRlIG9mIHBhcnRpdGlvbiBvbiAlcy4iCittc2dzdHIgIuippuWcluWvq+WFpSAlMyRzIOS4iuWIhuWJsuWNgOS5i+WklueahOejgeWNgCAlMSRsZC0lMiRsZOOAgiIKKworIzogbGlicGFydGVkL2NzL2dlb20uYzo0MDYgbGlicGFydGVkL2ZzL2xpbnV4X3N3YXAvbGludXhfc3dhcC5jOjQ3NQorbXNnaWQgImNoZWNraW5nIGZvciBiYWQgYmxvY2tzIgorbXNnc3RyICLmqqLmn6Xlo57ljYDloYoiCisKKyM6IGxpYnBhcnRlZC9kZWJ1Zy5jOjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWNrdHJhY2UgaGFzICVkIGNhbGxzIG9uIHN0YWNrOlxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9kZWJ1Zy5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJBc3NlcnRpb24gKCVzKSBhdCAlczolZCBpbiBmdW5jdGlvbiAlcygpIGZhaWxlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIG9wZW4gJXMgLSB1bnJlY29nbmlzZWQgZGlzayBsYWJlbC4iCittc2dzdHIgIueEoeazlemWi+WVnyAlcyAtIOeEoeazleitmOWIpeeahOejgeein+aomeexpOOAgiIKKworIzogbGlicGFydGVkL2Rpc2suYzo0NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgbGlicGFydGVkIGRvZXNuJ3QgaGF2ZSB3cml0ZSBzdXBwb3J0IGZvciAlcy4gIFBlcmhhcHMgaXQgd2FzIGNvbXBpbGVkICIKKyJyZWFkLW9ubHkuIgorbXNnc3RyICLpgJnlgIsgbGlicGFydGVkIOS4jeaUr+aPtOWwjSAlcyDnmoTlr6vlhaXmk43kvZzjgILlj6/og73lroPmmK/ku6XllK/oroDmlrnlvI/nt6jora/nmoTjgIIiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6NTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhcnRpdGlvbiAlZCBpcyAlcywgYnV0IHRoZSBmaWxlIHN5c3RlbSBpcyAlcy4iCittc2dzdHIgIuWIhuWJsuWNgCAlZCDlpKflsI/ngrogJXPvvIzkvYbmqpTmoYjns7vntbHlpKflsI/ngrogJXPjgIIiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTA3NQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkaXNrIGxhYmVscyBkbyBub3Qgc3VwcG9ydCBleHRlbmRlZCBwYXJ0aXRpb25zLiIKK21zZ3N0ciAiJXMg56OB56Kf5qiZ57Gk5LiN5pSv5o+05pO05YWF5YiG5Ymy5Y2A44CCIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE2MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZGlzayBsYWJlbHMgZG9uJ3Qgc3VwcG9ydCBsb2dpY2FsIG9yIGV4dGVuZGVkIHBhcnRpdGlvbnMuIgorbXNnc3RyICIlcyDno4Hnop/mqJnnsaTkuI3mlK/mj7Tpgo/ovK/miJbmk7TlhYXliIblibLljYDjgIIiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTY0NworbXNnaWQgIlRvbyBtYW55IHByaW1hcnkgcGFydGl0aW9ucy4iCittc2dzdHIgIumBjuWkmueahOS4u+WIhuWJsuWNgOOAgiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW4ndCBhZGQgYSBsb2dpY2FsIHBhcnRpdGlvbiB0byAlcywgYmVjYXVzZSB0aGVyZSBpcyBubyBleHRlbmRlZCBwYXJ0aXRpb24uIgorbXNnc3RyICLnlLHmlrzmspLmnInmk7TlhYXliIblibLljYDvvIznhKHms5XlsIfpgo/ovK/liIblibLljYDmt7vliqDliLAgJXPjgIIiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTY4MAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW4ndCBoYXZlIG1vcmUgdGhhbiBvbmUgZXh0ZW5kZWQgcGFydGl0aW9uIG9uICVzLiIKK21zZ3N0ciAiJXMg5LiK5LiN6IO95ZCr5pyJ5aSa5pa85LiA5YCL55qE5pO05YWF5YiG5Ymy5Y2A44CCIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE2OTAKK21zZ2lkICJDYW4ndCBoYXZlIGxvZ2ljYWwgcGFydGl0aW9ucyBvdXRzaWRlIG9mIHRoZSBleHRlbmRlZCBwYXJ0aXRpb24uIgorbXNnc3RyICLpgo/ovK/liIblibLljYDkuI3og73kvY3mlrzmk7TlhYXliIblibLljYDkuYvlpJbjgIIiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MTcxNQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW4ndCBoYXZlIGEgbG9naWNhbCBwYXJ0aXRpb24gb3V0c2lkZSBvZiB0aGUgZXh0ZW5kZWQgcGFydGl0aW9uIG9uICVzLiIKK21zZ3N0ciAiJXMg5LiK55qE6YKP6Lyv5YiG5Ymy5Y2A5LiN6IO95L2N5pa85pO05YWF5YiG5Ymy5Y2A5LmL5aSW44CCIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjE3MjUgbGlicGFydGVkL2Rpc2suYzoxNzc5IGxpYnBhcnRlZC9kaXNrLmM6MTk0NQorbXNnaWQgIkNhbid0IGhhdmUgb3ZlcmxhcHBpbmcgcGFydGl0aW9ucy4iCittc2dzdHIgIuWIhuWJsuWNgOS4jeiDvemHjeeWiuOAgiIKKworIzogbGlicGFydGVkL2Rpc2suYzoxNzMzCittc2dpZCAiQ2FuJ3QgaGF2ZSBhIHByaW1hcnkgcGFydGl0aW9uIGluc2lkZSBhbiBleHRlbmRlZCBwYXJ0aXRpb24uIgorbXNnc3RyICLmk7TlhYXliIblibLljYDkuK3kuI3og73lkKvmnInkuLvliIblibLljYDjgIIiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE0MAorbXNnaWQgIm1ldGFkYXRhIgorbXNnc3RyICLkuK3nubzos4fmlpkiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE0MgorbXNnaWQgImZyZWUiCittc2dzdHIgIuiHqueUseepuumWkyIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTQ0IHBhcnRlZC91aS5jOjExNjkgcGFydGVkL3VpLmM6MTE5NworbXNnaWQgImV4dGVuZGVkIgorbXNnc3RyICLmk7TlhYXliIblibLljYAiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE0NiBwYXJ0ZWQvdWkuYzoxMTczIHBhcnRlZC91aS5jOjEyMDEKK21zZ2lkICJsb2dpY2FsIgorbXNnc3RyICLpgo/ovK/liIblibLljYAiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE0OCBwYXJ0ZWQvdWkuYzoxMTY1IHBhcnRlZC91aS5jOjExOTMKK21zZ2lkICJwcmltYXJ5IgorbXNnc3RyICLkuLvliIblibLljYAiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE2NAorbXNnaWQgImJvb3QiCittc2dzdHIgIuWVn+WLlSIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTY2Cittc2dpZCAicm9vdCIKK21zZ3N0ciAi5qC5IgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNjgKK21zZ2lkICJzd2FwIgorbXNnc3RyICLkuqTmj5vliIblibLljYAiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE3MAorbXNnaWQgImhpZGRlbiIKK21zZ3N0ciAi6Zqx6JeP5YiG5Ymy5Y2AIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNzIKK21zZ2lkICJyYWlkIgorbXNnc3RyICJyYWlkIgorCisjOiBsaWJwYXJ0ZWQvZGlzay5jOjIxNzQKK21zZ2lkICJsdm0iCittc2dzdHIgImx2bSIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTc2Cittc2dpZCAibGJhIgorbXNnc3RyICJsYmEiCisKKyM6IGxpYnBhcnRlZC9kaXNrLmM6MjE3OAorbXNnaWQgImhwLXNlcnZpY2UiCittc2dzdHIgImhwLeacjeWLmSIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTgwCittc2dpZCAicGFsbyIKK21zZ3N0ciAicGFsbyIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTgyCittc2dpZCAicHJlcCIKK21zZ3N0ciAicHJlcCIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTg0Cittc2dpZCAibXNmdHJlcyIKK21zZ3N0ciAibXNmdHJlcyIKKworIzogbGlicGFydGVkL2Rpc2suYzoyMTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gcGFydGl0aW9uIGZsYWcsICVkLiIKK21zZ3N0ciAi5pyq55+l55qE5YiG5Ymy5Y2A5peX5qiZ77yMJWTjgIIiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo3OAorbXNnaWQgIkluZm9ybWF0aW9uIgorbXNnc3RyICLos4foqIoiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo3OQorbXNnaWQgIldhcm5pbmciCittc2dzdHIgIuitpuWRiiIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjgwCittc2dpZCAiRXJyb3IiCittc2dzdHIgIumMr+iqpCIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjgxCittc2dpZCAiRmF0YWwiCittc2dzdHIgIuiHtOWRvemMr+iqpCIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjgyCittc2dpZCAiQnVnIgorbXNnc3RyICLoh63on7IiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4MworbXNnaWQgIk5vIEltcGxlbWVudGF0aW9uIgorbXNnc3RyICLmnKrlr6bkvZwiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo4NworbXNnaWQgIkZpeCIKK21zZ3N0ciAi5L+u5q2jIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6ODgKK21zZ2lkICJZZXMiCittc2dzdHIgIuaYryIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjg5Cittc2dpZCAiTm8iCittc2dzdHIgIuWQpiIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjkwCittc2dpZCAiT0siCittc2dzdHIgIueiuuiqjSIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjkxCittc2dpZCAiUmV0cnkiCittc2dzdHIgIumHjeippiIKKworIzogbGlicGFydGVkL2V4Y2VwdGlvbi5jOjkyCittc2dpZCAiSWdub3JlIgorbXNnc3RyICLlv73nlaUiCisKKyM6IGxpYnBhcnRlZC9leGNlcHRpb24uYzo5MworbXNnaWQgIkNhbmNlbCIKK21zZ3N0ciAi5Y+W5raIIgorCisjOiBsaWJwYXJ0ZWQvZXhjZXB0aW9uLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBIGJ1ZyBoYXMgYmVlbiBkZXRlY3RlZCBpbiBHTlUgUGFydGVkLiAgUmVmZXIgdG8gdGhlIHdlYiBzaXRlIG9mIHBhcnRlZCAiCisiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3BhcnRlZC9wYXJ0ZWQuaHRtbCBmb3IgbW9yZSBpbmZvcm1hdGlvbnMgb2Ygd2hhdCAiCisiY291bGQgYmUgdXNlZnVsIGZvciBidWcgc3VibWl0dGluZyEgIFBsZWFzZSBlbWFpbCBhIGJ1ZyByZXBvcnQgdG8gYnVnLSIKKyJwYXJ0ZWRAZ251Lm9yZyBjb250YWluaW5nIGF0IGxlYXN0IHRoZSB2ZXJzaW9uICglcykgYW5kIHRoZSBmb2xsb3dpbmcgIgorIm1lc3NhZ2U6ICAiCittc2dzdHIgIiIKKyLnmbznj74gR05VIFBhcnRlZCDkuK3nmoTnqIvlvI/pjK/oqqTjgILlj4PnhacgcGFydGVkIOeahOe2suWdgCBodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvIgorInBhcnRlZC9wYXJ0ZWQuaHRtbCDku6XnjbLlvpfmm7TlpJrmnInpl5zmj5DkuqTpjK/oqqTloLHlkYrnmoTmnInnlKjos4foqIrjgILoq4vlsIfoh7PlsJHlkKvmnInniYjmnKwgKCUiCisicykg5ZKM5Lul5LiL6LOH6KiK55qE6Yyv6Kqk5aCx5ZGK55m86YCB5YiwIGJ1Zy1wYXJ0ZWRAZ251Lm9yZ++8miIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzozODQKK21zZ2lkICJDb3VsZCBub3QgZGV0ZWN0IGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAi54Sh5rOV5YG15ris5qqU5qGI57O757Wx44CCIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjM5NQorbXNnaWQgIlRoZSBmaWxlIHN5c3RlbSBpcyBiaWdnZXIgdGhhbiBpdHMgdm9sdW1lISIKK21zZ3N0ciAi5qqU5qGI57O757Wx5q+U5a6D55qE5Y235YaK6YKE5aSn77yBIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjQwMworIywgYy1mb3JtYXQKK21zZ2lkICJTdXBwb3J0IGZvciBvcGVuaW5nICVzIGZpbGUgc3lzdGVtcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAi6ZaL5ZWfICVzIOaqlOahiOezu+e1seeahOaUr+aPtOWwmuacquWvpuS9nOOAgiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo0NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VwcG9ydCBmb3IgY3JlYXRpbmcgJXMgZmlsZSBzeXN0ZW1zIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICLlu7rnq4sgJXMg5qqU5qGI57O757Wx55qE5pSv5o+05bCa5pyq5a+m5L2c44CCIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjUwNQorIywgYy1mb3JtYXQKK21zZ2lkICJTdXBwb3J0IGZvciBjaGVja2luZyAlcyBmaWxlIHN5c3RlbXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIuaqouafpSAlcyDmqpTmoYjns7vntbHnmoTmlK/mj7TlsJrmnKrlr6bkvZzjgIIiCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NTcxCittc2dpZCAicmF3IGJsb2NrIGNvcHlpbmciCittc2dzdHIgIuWOn+Wni+WNgOWhiuikh+ijvSIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo1ODIKK21zZ2lkICJncm93aW5nIGZpbGUgc3lzdGVtIgorbXNnc3RyICLmraPlnKjmk7TlpKfmqpTmoYjns7vntbEiCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NjIyCittc2dpZCAiQ2FuJ3QgY29weSBvbnRvIGFuIG92ZXJsYXBwaW5nIHBhcnRpdGlvbi4iCittc2dzdHIgIueEoeazleikh+ijveWIsOmHjeeWiueahOWIhuWJsuWNgOOAgiIKKworIzogbGlicGFydGVkL2ZpbGVzeXMuYzo2NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkRpcmVjdCBzdXBwb3J0IGZvciBjb3B5aW5nIGZpbGUgc3lzdGVtcyBpcyBub3QgeWV0IGltcGxlbWVudGVkIGZvciAlcy4gICIKKyJIb3dldmVyLCBzdXBwb3J0IGZvciByZXNpemluZyBpcyBpbXBsZW1lbnRlZC4gIFRoZXJlZm9yZSwgdGhlIGZpbGUgc3lzdGVtICIKKyJjYW4gYmUgY29waWVkIGlmIHRoZSBuZXcgcGFydGl0aW9uIGlzIGF0IGxlYXN0IGFzIGJpZyBhcyB0aGUgb2xkIG9uZS4gIFNvLCAiCisiZWl0aGVyIHNocmluayB0aGUgcGFydGl0aW9uIHlvdSBhcmUgdHJ5aW5nIHRvIGNvcHksIG9yIGNvcHkgdG8gYSBiaWdnZXIgIgorInBhcnRpdGlvbi4iCittc2dzdHIgIiIKKyLlsI0gJXMg5L6G6Kqq5bCa5LiN55u05o6l5pSv5o+05a6D55qE5qqU5qGI57O757Wx6KSH6KO944CC54S26ICM77yM5pS56K6K5aSn5bCP55qE5pSv5o+05bey5a+m5L2c5a6M5oiQ44CC5ZugIgorIuatpO+8jOWPquimgeaWsOWIhuWJsuWNgOavlOiIiuWIhuWJsuWNgOWkp++8jOWwseiDveWkoOikh+ijveaqlOahiOezu+e1seOAguaJgOS7pe+8jOe4ruWwj+aCqOippuWcluikh+ijveeahOWIhuWJsiIKKyLljYDvvIzmiJbmmK/opIfoo73liLDovIPlpKfnmoTliIblibLljYDjgIIiCisKKyM6IGxpYnBhcnRlZC9maWxlc3lzLmM6NjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnQgZm9yIGNvcHlpbmcgJXMgZmlsZSBzeXN0ZW1zIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICLopIfoo70gJXMg5qqU5qGI57O757Wx55qE5pSv5o+05bCa5pyq5a+m5L2c44CCIgorCisjOiBsaWJwYXJ0ZWQvZmlsZXN5cy5jOjY5NgorIywgYy1mb3JtYXQKK21zZ2lkICJTdXBwb3J0IGZvciByZXNpemluZyAlcyBmaWxlIHN5c3RlbXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIuaUueiuiiAlcyDmqpTmoYjns7vntbHnmoTmlK/mj7TlsJrmnKrlr6bkvZzjgIIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjMxNQorbXNnaWQgImNyZWF0aW5nIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQwMgorIywgZnV6enkKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gaXMgaW4gYW4gaW52YWxpZCBzdGF0ZS4gIFBlcmhhcHMgaXQgaXMgbW91bnRlZD8iCittc2dzdHIgIuaqlOahiOezu+e1seavlOWug+eahOWNt+WGiumChOWkp++8gSIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDEwCittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIGlzIGluIG9sZCAodW5yZXNpemVhYmxlKSBmb3JtYXQuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjQxNgorbXNnaWQgIkludmFsaWQgZnJlZSBibG9ja3MgY291bnQuICBSdW4gcmVpc2VyZnNjayAtLWNoZWNrIGZpcnN0LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0MzEKKyMsIGZ1enp5Cittc2dpZCAiY2hlY2tpbmciCittc2dzdHIgIuaqouafpSIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NDM3Cittc2dpZCAiUmVpc2VyZnMgdHJlZSBzZWVtcyB0byBiZSBjb3JydXB0ZWQuICBSdW4gcmVpc2VyZnNjayAtLWNoZWNrIGZpcnN0LiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0NDkKKyMsIGZ1enp5Cittc2dpZCAiIgorIlRoZSByZWlzZXJmcyBmaWxlIHN5c3RlbSBwYXNzZWQgYSBiYXNpYyBjaGVjay4gIEZvciBhIG1vcmUgY29tcHJlaGVuc2l2ZSAiCisiY2hlY2ssIHJ1biByZWlzZXJmc2NrIC0tY2hlY2suIgorbXNnc3RyICJleHQyIOaqlOahiOezu+e1semAmumBjuS6huWfuuacrOaqouafpeOAguiHs+aWvOabtOWujOaVtOeahOaqouafpe+8jOiri+S9v+eUqCBlMmZzY2sg56iL5byP44CCIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0NzQKKyMsIGZ1enp5Cittc2dpZCAiU29ycnksIGNhbid0IG1vdmUgdGhlIHN0YXJ0IG9mIHJlaXNlcmZzIHBhcnRpdGlvbnMgeWV0LiIKK21zZ3N0ciAi5oqx5q2J77yM5bCa54Sh5rOV56e75YuVIGV4dDIg5YiG5Ymy5Y2A55qE6LW36bue77yBIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo0OTAKK21zZ2lkICJDb3VsZG4ndCByZW9wZW4gZGV2aWNlIGFic3RyYWN0aW9uIGxheWVyIGZvciByZWFkL3dyaXRlLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo1MDggbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo1NTIKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MjUwIGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NjI5Cittc2dpZCAic2hyaW5raW5nIgorbXNnc3RyICLmraPlnKjnuK7lsI8iCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjUyMAorIywgZnV6enkKK21zZ2lkICJleHBhbmRpbmciCittc2dzdHIgIuitpuWRiiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NTkyCittc2dpZCAiQ291bGRuJ3QgY3JlYXRlIHJlaXNlcmZzIGRldmljZSBhYnN0cmFjdGlvbiBoYW5kbGVyLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo2MDYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkRldmljZSBpcyB0b28gc21hbGwgZm9yICVsdSBibG9ja3MuIgorbXNnc3RyICLlsI0gZXh0MiDkvoboqqrmqpTmoYjns7vntbHpgY7lsI/jgIIiCisKKyM6IGxpYnBhcnRlZC9mcy9yZWlzZXJmcy9yZWlzZXJmcy5jOjYxNQorbXNnaWQgImNvcHlpbmciCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IHJlc29sdmUgc3ltYm9sICVzLiAgRXJyb3I6ICVzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvcmVpc2VyZnMvcmVpc2VyZnMuYzo3MDQKK21zZ2lkICJHTlUgUGFydGVkIGZvdW5kIGFuIGludmFsaWQgbGlicmVpc2VyZnMgbGlicmFyeS4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmM6NzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJHTlUgUGFydGVkIGhhcyBkZXRlY3RlZCBsaWJyZWlzZXJmcyBpbnRlcmZhY2UgdmVyc2lvbiBtaXNtYXRjaC4gIEZvdW5kICVkLSUiCisiZCwgcmVxdWlyZWQgJWQuIFJlaXNlckZTIHN1cHBvcnQgd2lsbCBiZSBkaXNhYmxlZC4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9haXguYzoxMzcKKyMsIGZ1enp5Cittc2dpZCAiU3VwcG9ydCBmb3IgcmVhZGluZyBBSVggZGlzayBsYWJlbHMgaXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIuW7uueriyAlcyDmqpTmoYjns7vntbHnmoTmlK/mj7TlsJrmnKrlr6bkvZzjgIIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYWl4LmM6MTQ4CisjLCBmdXp6eQorbXNnaWQgIlN1cHBvcnQgZm9yIHdyaXRpbmcgQUlYIGRpc2sgbGFiZWxzIGlzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICLlu7rnq4sgJXMg5qqU5qGI57O757Wx55qE5pSv5o+05bCa5pyq5a+m5L2c44CCIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2FpeC5jOjE2MQorIywgZnV6enkKK21zZ2lkICIiCisiU3VwcG9ydCBmb3IgYWRkaW5nIHBhcnRpdGlvbnMgdG8gQUlYIGRpc2sgbGFiZWxzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIgorbXNnc3RyICLlu7rnq4sgJXMg5qqU5qGI57O757Wx55qE5pSv5o+05bCa5pyq5a+m5L2c44CCIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2FpeC5jOjE3MQorIywgZnV6enkKK21zZ2lkICIiCisiU3VwcG9ydCBmb3IgZHVwbGljYXRpbmcgcGFydGl0aW9ucyBpbiBBSVggZGlzayBsYWJlbHMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIuW7uueriyAlcyDmqpTmoYjns7vntbHnmoTmlK/mj7TlsJrmnKrlr6bkvZzjgIIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYWl4LmM6MTg5CisjLCBmdXp6eQorbXNnaWQgIiIKKyJTdXBwb3J0IGZvciBzZXR0aW5nIHN5c3RlbSB0eXBlIG9mIHBhcnRpdGlvbnMgaW4gQUlYIGRpc2sgbGFiZWxzIGlzIG5vdCAiCisiaW1wbGVtZW50ZWQgeWV0LiIKK21zZ3N0ciAi5bu656uLICVzIOaqlOahiOezu+e1seeahOaUr+aPtOWwmuacquWvpuS9nOOAgiIKKworIzogbGlicGFydGVkL2xhYmVscy9haXguYzoxOTkKKyMsIGZ1enp5Cittc2dpZCAiU3VwcG9ydCBmb3Igc2V0dGluZyBmbGFncyBpbiBBSVggZGlzayBsYWJlbHMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iCittc2dzdHIgIuW7uueriyAlcyDmqpTmoYjns7vntbHnmoTmlK/mj7TlsJrmnKrlr6bkvZzjgIIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvYnNkLmM6NTAxIGxpYnBhcnRlZC9sYWJlbHMvZGFzZC5jOjc1NQorIzogbGlicGFydGVkL2xhYmVscy9kb3MuYzoxOTc0IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6NzcwCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjE0NDggbGlicGFydGVkL2xhYmVscy9sb29wLmM6MjQ4CisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjE0MDggbGlicGFydGVkL2xhYmVscy9wYzk4LmM6NzU5CisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjEwNDEgbGlicGFydGVkL2xhYmVscy9zdW4uYzo3MDUKK21zZ2lkICJVbmFibGUgdG8gc2F0aXNmeSBhbGwgY29uc3RyYWludHMgb24gdGhlIHBhcnRpdGlvbi4iCittc2dzdHIgIueEoeazlea7v+i2s+WIhuWJsuWNgOeahOaJgOaciemZkOWItuOAgiIKKworIzogbGlicGFydGVkL2xhYmVscy9ic2QuYzo1MjYKK21zZ2lkICJVbmFibGUgdG8gYWxsb2NhdGUgYSBic2QgZGlza2xhYmVsIHNsb3QuIgorbXNnc3RyICLnhKHms5XlrprkvY0gYnNkIOejgeein+aomeexpOanveOAgiIKKworIzogbGlicGFydGVkL2xhYmVscy9kYXNkLmM6MTY2CisjLCBmdXp6eQorbXNnaWQgIlVuYWJsZSB0byBkZXRlcm1pbmUgdGhlIGJsb2NrIHNpemUgb2YgdGhpcyBkYXNkIgorbXNnc3RyICLnhKHms5XnorrlrpogJXMgKCVzKSDnmoTlpKflsI/jgIIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZGFzZC5jOjc4MQorIywgZnV6enkKK21zZ2lkICJVbmFibGUgdG8gYWxsb2NhdGUgYSBkYXNkIGRpc2tsYWJlbCBzbG90IgorbXNnc3RyICLnhKHms5XlrprkvY0gYnNkIOejgeein+aomeexpOanveOAgiIKKworIzogbGlicGFydGVkL2xhYmVscy9kb3MuYzo4MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBwYXJ0aXRpb24gdGFibGUgb24gJXMgLS0gd3Jvbmcgc2lnbmF0dXJlICV4LiIKK21zZ3N0ciAiJXMg5LiK55qE5YiG5Ymy5Y2A6KGo54Sh5pWIIC0g6Yyv6Kqk55qE57C95ZCNICV444CCIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2Rvcy5jOjg1NQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHBhcnRpdGlvbiB0YWJsZSAtIHJlY3Vyc2l2ZSBwYXJ0aXRpb24gb24gJXMuIgorbXNnc3RyICLnhKHmlYjnmoTliIblibLljYDooaggLSAlcyDlh7rnj77pgZ7mrbjliIblibLljYDjgIIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZG9zLmM6MTMxOAorbXNnaWQgIkV4dGVuZGVkIHBhcnRpdGlvbnMgY2Fubm90IGJlIGhpZGRlbiBvbiBtc2RvcyBkaXNrIGxhYmVscy4iCittc2dzdHIgIuaTtOWFheWIhuWJsuWNgOeEoeazlemaseiXj+aWvCBtc2RvcyDno4Hnop/mqJnnsaTkuYvkuIrjgIIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZG9zLmM6MTk1OAorbXNnaWQgIlBhcnRlZCBjYW4ndCByZXNpemUgcGFydGl0aW9ucyBtYW5hZ2VkIGJ5IFdpbmRvd3MgRHluYW1pYyBEaXNrLiIKK21zZ3N0ciAiUGFydGVkIOeEoeazleaUueiuiueUseOAjOimlueql+WLleaFi+ejgeein+OAjeaJgOeuoeeQhueahOWIhuWJsuWNgOWkp+Wwj+OAgiIKKworIzogbGlicGFydGVkL2xhYmVscy9kdmguYzoxOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIG5vIGV4dGVuZGVkIHBhcnRpdGlvbiAodm9sdW1lIGhlYWRlciBwYXJ0aXRpb24pLiIKK21zZ3N0ciAiJXMg5rKS5pyJ5pO05YWF5YiG5Ymy5Y2AICjljbfpoK3liIblibLljYAp44CCIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjMxMworbXNnaWQgIkNoZWNrc3VtIGlzIHdyb25nLCBpbmRpY2F0aW5nIHRoZSBwYXJ0aXRpb24gdGFibGUgaXMgY29ycnVwdC4iCittc2dzdHIgIue4veWSjOaqouafpemMr+iqpO+8jOaomeaYjuWIhuWJsuWNgOihqOW3suaQjeWjnuOAgiIKKworIzogbGlicGFydGVkL2xhYmVscy9kdmguYzo2MTYKK21zZ2lkICJPbmx5IHByaW1hcnkgcGFydGl0aW9ucyBjYW4gYmUgcm9vdCBwYXJ0aXRpb25zLiIKK21zZ3N0ciAi5Y+q5pyJ5Li75YiG5Ymy5Y2A5Y+v5Lul5YGa54K65qC55YiG5Ymy5Y2A44CCIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjYzMAorbXNnaWQgIk9ubHkgcHJpbWFyeSBwYXJ0aXRpb25zIGNhbiBiZSBzd2FwIHBhcnRpdGlvbnMuIgorbXNnc3RyICLlj6rmnInkuLvliIblibLljYDlj6/ku6XmmK/kuqTmj5vliIblibLljYDjgIIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6NjQ0Cittc2dpZCAiT25seSBsb2dpY2FsIHBhcnRpdGlvbnMgY2FuIGJlIGEgYm9vdCBmaWxlLiIKK21zZ3N0ciAi5Y+q5pyJ6YKP6Lyv5YiG5Ymy5Y2A5Y+v5Lul5piv5YCL6ZaL5qmf5qqU5qGI44CCIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2R2aC5jOjcyMQorbXNnaWQgIk9ubHkgbG9naWNhbCBwYXJ0aXRpb25zIChib290IGZpbGVzKSBoYXZlIGEgbmFtZS4iCittc2dzdHIgIuWPquaciemCj+i8r+WIhuWJsuWNgCAo6ZaL5qmf5qqU5qGIKSDmk4HmnInlkI3lrZfjgIIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZHZoLmM6ODEyCittc2dpZCAiVG9vIG1hbnkgcHJpbWFyeSBwYXJ0aXRpb25zIgorbXNnc3RyICLpgY7lpJrnmoTkuLvliIblibLljYAiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIG9wZW4gZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHNlZWsgZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHJlYWQgZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMTMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyB3cml0ZSBlcnJvclxuIgorIiVzXG4iCittc2dzdHIgIuWcqOWvq+WFpSAlMiRzIOaZgiAlMSRzIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBJT0NUTCBlcnJvclxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjExOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgQVBJIHZlcnNpb24gbWlzbWF0Y2hcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFVuc3VwcG9ydGVkIGRpc2sgdHlwZVxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgVW5zdXBwb3J0ZWQgZGlzayBmb3JtYXRcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMzAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBEaXNrIGluIHVzZVxuIgorIiVzXG4iCittc2dzdHIgIuejgeeinyAlc++8miVzXG4iCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIENvbmZpZyBmaWxlIHN5bnRheCBlcnJvclxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgVm9sdW1lIGxhYmVsIGlzIGNvcnJ1cHRlZC5cbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZmRhc2QuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIGEgZGF0YSBzZXQgbmFtZSBpcyBjb3JydXB0ZWQuXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBzcGFjZSBhbGxvY2F0aW9uXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2ZkYXNkLmM6MTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBkZXZpY2UgdmVyaWZpY2F0aW9uIGZhaWxlZFxuIgorIlRoZSBzcGVjaWZpZWQgZGV2aWNlIGlzIG5vdCBhIHZhbGlkIERBU0QgZGV2aWNlXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9mZGFzZC5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgRmF0YWwgZXJyb3JcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvZ3B0LmM6NDU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBjb250YWlucyBHUFQgc2lnbmF0dXJlcywgaW5kaWNhdGluZyB0aGF0IGl0IGhhcyBhIEdQVCB0YWJsZS4gIEhvd2V2ZXIsIGl0ICIKKyJkb2VzIG5vdCBoYXZlIGEgdmFsaWQgZmFrZSBtc2RvcyBwYXJ0aXRpb24gdGFibGUsIGFzIGl0IHNob3VsZC4gIFBlcmhhcHMgaXQgIgorIndhcyBjb3JydXB0ZWQgLS0gcG9zc2libHkgYnkgYSBwcm9ncmFtIHRoYXQgZG9lc24ndCB1bmRlcnN0YW5kIEdQVCBwYXJ0aXRpb24gIgorInRhYmxlcy4gIE9yIHBlcmhhcHMgeW91IGRlbGV0ZWQgdGhlIEdQVCB0YWJsZSwgYW5kIGFyZSBub3cgdXNpbmcgYW4gbXNkb3MgIgorInBhcnRpdGlvbiB0YWJsZS4gIElzIHRoaXMgYSBHUFQgcGFydGl0aW9uIHRhYmxlPyIKK21zZ3N0ciAiIgorIiVzIOWQq+aciSBHUFQg57C95ZCN77yM5qiZ5piO5a6D5ZCr5pyJIEdQVCDooajjgILnhLbogIzvvIzlroPkuKbkuI3lg4/mh4noqbLnmoTpgqPmqKPlkKvmnInmnInmlYjnmoTlgb0gIgorIm1zZG9zIOWIhuWJsuWNgOihqOOAguWPr+iDveWug+W3sue2k+aQjeWjniAtIOWPr+iDveaYr+S4jeeQhuinoyBHUFQg5YiG5Ymy5Y2A6KGo55qE56iL5byP5omA5bCO6Ie055qE44CC5oiWIgorIuiAheaCqOWIqumZpOS6hiBHUFQg6KGo77yM6ICM54++5Zyo5L2/55SoIG1zZG9zIOWIhuWJsuWNgOihqOOAgumAmeaYryBHUFQg5YiG5Ymy5Y2A6KGo5ZeO77yfIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjY0OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvcm1hdCBvZiB0aGUgR1BUIHBhcnRpdGlvbiB0YWJsZSBpcyB2ZXJzaW9uICV4LCB3aGljaCBpcyBuZXdlciB0aGFuICIKKyJ3aGF0IFBhcnRlZCBjYW4gcmVjb2duaXNlLiAgUGxlYXNlIHRlbGwgdXMhICBidWctcGFydGVkQGdudS5vcmciCittc2dzdHIgIiIKKyJHUFQg5YiG5Ymy5Y2A6KGo55qE5qC85byP54mI5pys54K6ICV477yM5a6D5q+UIFBhcnRlZCDmiYDog73orZjliKXnmoTniYjmnKzopoHmlrDjgILoq4vlkYroqLTmiJHlgJHvvIFidWctIgorInBhcnRlZEBnbnUub3JnIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm90IGFsbCBvZiB0aGUgc3BhY2UgYXZhaWxhYmxlIHRvICVzIGFwcGVhcnMgdG8gYmUgdXNlZCwgeW91IGNhbiBmaXggdGhlIEdQVCAiCisidG8gdXNlIGFsbCBvZiB0aGUgc3BhY2UgKGFuIGV4dHJhICVsbHUgYmxvY2tzKSBvciBjb250aW51ZSB3aXRoIHRoZSBjdXJyZW50ICIKKyJzZXR0aW5nPyAiCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzo4MjcKK21zZ2lkICIiCisiVGhlIGJhY2t1cCBHUFQgdGFibGUgaXMgbm90IGF0IHRoZSBlbmQgb2YgdGhlIGRpc2ssIGFzIGl0IHNob3VsZCBiZS4gIFRoaXMgIgorIm1pZ2h0IG1lYW4gdGhhdCBhbm90aGVyIG9wZXJhdGluZyBzeXN0ZW0gYmVsaWV2ZXMgdGhlIGRpc2sgaXMgc21hbGxlci4gIEZpeCwgIgorImJ5IG1vdmluZyB0aGUgYmFja3VwIHRvIHRoZSBlbmQgKGFuZCByZW1vdmluZyB0aGUgb2xkIGJhY2t1cCk/IgorbXNnc3RyICIiCisi5YKZ5Lu9IEdQVCDooajkuI3lg4/mh4noqbLnmoTpgqPmqKPlh7rnj77lnKjno4Hnop/nmoTmnKvlsL7jgILpgJnlj6/og73mhI/lkbPogIXlhbblroPmk43kvZzns7vntbHnm7jkv6Hno4Hnop/lsI8iCisi5LiA5Lqb44CC57aT55Sx5bCH5YKZ5Lu956e75YuV5Yiw5pyr5bC+ICjkuKbliKrpmaToiIrlgpnku70pIOS+huS/ruato+Wug++8nyIKKworIzogbGlicGFydGVkL2xhYmVscy9ncHQuYzo4NjIKK21zZ2lkICIiCisiVGhlIHByaW1hcnkgR1BUIHRhYmxlIGlzIGNvcnJ1cHQsIGJ1dCB0aGUgYmFja3VwIGFwcGVhcnMgT0ssIHNvIHRoYXQgd2lsbCBiZSAiCisidXNlZC4iCittc2dzdHIgIuS4uyBHUFQg6KGo5pCN5aOe77yM5L2G5YKZ5Lu95Ly85LmO5piv5q2j56K655qE77yM5omA5Lul5bCH5pyD5L2/55So5a6D44CCIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL2dwdC5jOjg3MAorbXNnaWQgIiIKKyJCb3RoIHRoZSBwcmltYXJ5IGFuZCBiYWNrdXAgR1BUIHRhYmxlcyBhcmUgY29ycnVwdC4gIFRyeSBtYWtpbmcgYSBmcmVzaCAiCisidGFibGUsIGFuZCB1c2luZyBQYXJ0ZWQncyByZXNjdWUgZmVhdHVyZSB0byByZWNvdmVyIHBhcnRpdGlvbnMuIgorbXNnc3RyICIiCisi5Li7IEdQVCDlkozlgpnku70gR1BUIOmDveaQjeWjnuS6huOAguePvuWcqOippuWcluW7uueri+aWsOihqO+8jOS4puS9v+eUqCBQYXJ0ZWQg55qE5Zue5b6p5Yqf6IO95Lul6YeN5bu6IgorIuWIhuWJsuWNgOihqOOAgiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoxODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBzaWduYXR1cmUgJXggZm9yIE1hYyBkaXNrIGxhYmVscy4iCittc2dzdHIgIueEoeaViOeahCBNYWMg56OB56Kf5qiZ57Gk57C95ZCNICV444CCIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjIyNgorbXNnaWQgIlBhcnRpdGlvbiBtYXAgaGFzIG5vIHBhcnRpdGlvbiBtYXAgZW50cnkhIgorbXNnc3RyICLliIblibLljYDmmKDlsITkuI3lkKvmnInliIblibLljYDmmKDlsITmop3nm67vvIEiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIHRvbyBzbWFsbCBmb3IgYSBNYWMgZGlzayBsYWJlbCEiCittc2dzdHIgIiVzIOWwjSBNYWMg56OB56Kf5qiZ57Gk5L6G6Kqq5aSq5bCP5LqG77yBIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjUzMgorIywgYy1mb3JtYXQKK21zZ2lkICJQYXJ0aXRpb24gJWQgaGFzIGFuIGludmFsaWQgc2lnbmF0dXJlICV4LiIKK21zZ3N0ciAi5YiG5Ymy5Y2AICVkIOWQq+acieeEoeaViOeahOewveWQjSAleOOAgiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGFydGl0aW9uICVkIGhhcyBhbiBpbnZhbGlkIGxlbmd0aCBvZiAwIGJ5dGVzISIKK21zZ3N0ciAi5YiG5Ymy5Y2AICVkIOWQq+acieeEoeaViOeahOmVt+W6piAwIOS9jeWFg+e1hO+8gSIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo1ODAKK21zZ2lkICJUaGUgZGF0YSByZWdpb24gZG9lc24ndCBzdGFydCBhdCB0aGUgc3RhcnQgb2YgdGhlIHBhcnRpdGlvbi4iCittc2dzdHIgIuizh+aWmeWNgOS4puacquW+nuWIhuWJsuWNgOeahOi1t+m7numWi+Wni+OAgiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo1OTcKK21zZ2lkICJUaGUgYm9vdCByZWdpb24gZG9lc24ndCBzdGFydCBhdCB0aGUgc3RhcnQgb2YgdGhlIHBhcnRpdGlvbi4iCittc2dzdHIgIuWVn+WLleWNgOWfn+S4puacquW+nuWIhuWJsuWNgOeahOi1t+m7numWi+Wni+OAgiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo2MTEKK21zZ2lkICJUaGUgcGFydGl0aW9uJ3MgYm9vdCByZWdpb24gZG9lc24ndCBvY2N1cHkgdGhlIGVudGlyZSBwYXJ0aXRpb24uIgorbXNnc3RyICLliIblibLljYDnmoTllZ/li5XljYDln5/kuKbmnKrkvZTnlKjmlbTlgIvliIblibLljYDjgIIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NjIyCittc2dpZCAiVGhlIHBhcnRpdGlvbidzIGRhdGEgcmVnaW9uIGRvZXNuJ3Qgb2NjdXB5IHRoZSBlbnRpcmUgcGFydGl0aW9uLiIKK21zZ3N0ciAi5YiG5Ymy5Y2A55qE6LOH5paZ5Y2A5Z+f5Lim5pyq5L2U55So5pW05YCL5YiG5Ymy5Y2A44CCIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjY3NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV2VpcmQgYmxvY2sgc2l6ZSBvbiBkZXZpY2UgZGVzY3JpcHRvcjogJWQgYnl0ZXMgaXMgbm90IGRpdmlzaWJsZSBieSA1MTIuIgorbXNnc3RyICLoqK3lgpnmj4/ov7DkuK3lh7rnj77lj6TmgKrnmoTljYDloYrlpKflsI/vvJolZCDkvY3lhYPntYTkuI3og73ooqsgNTEyIOaVtOmZpOOAgiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo2ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBkcml2ZXIgZGVzY3JpcHRvciBzYXlzIHRoZSBwaHlzaWNhbCBibG9jayBzaXplIGlzICVkIGJ5dGVzLCBidXQgTGludXggIgorInNheXMgaXQgaXMgJWQgYnl0ZXMuIgorbXNnc3RyICLno4Hnop/mj4/ov7DooajmmI7niannkIbljYDloYrlpKflsI/ngrogJWQg5L2N5YWD57WE77yM5L2GIExpbnV4IOiqjeeCuuWug+aYryAlZCDkvY3lhYPntYTjgIIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6NzM2Cittc2dpZCAiTm8gdmFsaWQgcGFydGl0aW9uIG1hcCBmb3VuZC4iCittc2dzdHIgIuaJvuS4jeWIsOacieaViOeahOWIhuWJsuWNgOaYoOWwhOOAgiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzo3OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvbmZsaWN0aW5nIHBhcnRpdGlvbiBtYXAgZW50cnkgc2l6ZXMhICBFbnRyeSAxIHNheXMgaXQgaXMgJWQsIGJ1dCBlbnRyeSAlZCAiCisic2F5cyBpdCBpcyAlZCEiCittc2dzdHIgIuWIhuWJsuWNgOaYoOWwhOaineebruWkp+Wwj+eZvOeUn+ihneeqge+8geaineebriAxIOiqquWug+aYryAlZO+8jOS9huaineebriAlZCDoqqrlroPmmK8gJWTvvIEiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvbWFjLmM6ODIyCittc2dpZCAiV2VpcmQhICBUaGVyZSBhcmUgMiBwYXJ0aXRpb25zIG1hcCBlbnRyaWVzISIKK21zZ3N0ciAi5aWH5oCq77yB5YWp5YCL5YiG5Ymy5Y2A5pig5bCE5qKd55uu77yBIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL21hYy5jOjEzNDcKK21zZ2lkICIiCisiQ2hhbmdpbmcgdGhlIG5hbWUgb2YgYSByb290IG9yIHN3YXAgcGFydGl0aW9uIHdpbGwgcHJldmVudCBMaW51eCBmcm9tICIKKyJyZWNvZ25pc2luZyBpdCBhcyBzdWNoLiIKK21zZ3N0ciAi5pS56K6K5qC55YiG5Ymy5Y2A5oiW5Lqk5o+b5YiG5Ymy5Y2A55qE5ZCN56ix5bCH5bCO6Ie0IExpbnV4IOeEoeazleitmOWIpeWug+OAgiIKKworIzogbGlicGFydGVkL2xhYmVscy9tYWMuYzoxNDQzCittc2dpZCAiQ2FuJ3QgYWRkIGFub3RoZXIgcGFydGl0aW9uIC0tIHRoZSBwYXJ0aXRpb24gbWFwIGlzIHRvbyBzbWFsbCEiCittc2dzdHIgIueEoeazlea3u+WKoOWPpuS4gOWAi+WIhuWJsuWNgCAtLSDliIblibLljYDmmKDlsITpgY7lsI/vvIEiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcGM5OC5jOjM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHBhcnRpdGlvbiB0YWJsZSBvbiAlcy4iCittc2dzdHIgIiVzIOeahOWIhuWJsuWNgOihqOeEoeaViOOAgiIKKworIzogbGlicGFydGVkL2xhYmVscy9wYzk4LmM6NDA2IGxpYnBhcnRlZC9sYWJlbHMvcGM5OC5jOjQ4NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGFydGl0aW9uICVkIGlzbid0IGFsaWduZWQgdG8gY3lsaW5kZXIgYm91bmRhcmllcy4gIFRoaXMgaXMgc3RpbGwgIgorInVuc3VwcG9ydGVkLiIKK21zZ3N0ciAi5YiG5Ymy5Y2AICVkIOS4puacquWwjem9iuWIsOejgeafsemCiueVjOOAguatpOWKn+iDveS7jeeEtuWwmuacquiiq+aUr+aPtOOAgiIKKworIzogbGlicGFydGVkL2xhYmVscy9wYzk4LmM6NzkxCittc2dpZCAiQ2FuJ3QgYWRkIGFub3RoZXIgcGFydGl0aW9uLiIKK21zZ3N0ciAi54Sh5rOV5re75Yqg5YW25a6D5YiG5Ymy5Y2A44CCIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjE2MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEJhZCBjaGVja3N1bSBvbiBibG9jayAlbGx1IG9mIHR5cGUgJXMuIgorbXNnc3RyICIlc++8muWNgOWhiiAlbGx1IOeahOmhnuWeiyAlcyDmnInkuI3nlbbnmoTnuL3lkozmqqLmn6XlgLzjgIIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6NDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRGlkbid0IGZpbmQgcmRiIGJsb2NrLCBzaG91bGQgbmV2ZXIgaGFwcGVuLiIKK21zZ3N0ciAiJXPvvJrnhKHms5Xmib7liLAgcmRiIOWNgOWhiu+8jOmAmeS4jeaHieipsueZvOeUn+OAgiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo1ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBMb29wIGRldGVjdGVkIGF0IGJsb2NrICVkLiIKK21zZ3N0ciAiJXPvvJrmlrzljYDloYogJWQg5YG15ris5Yiw6L+05ZyI44CCIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjYwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IFRoZSAlcyBsaXN0IHNlZW1zIGJhZCBhdCBibG9jayAlcy4iCittc2dzdHIgIiUxJHPvvJrljYDloYogJTMkcyDomZXkvLzmnInkuI3nlbYgJTIkcyDliJfooajjgIIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvcmRiLmM6Njg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGxpc3QgYmFkIGJsb2Nrcy4iCittc2dzdHIgIiVz77ya5YiX6IiJ5LiN55W25Y2A5aGK5pmC5aSx5pWX44CCIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjY5NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byBsaXN0IHBhcnRpdGlvbiBibG9ja3MuIgorbXNnc3RyICIlc++8muWIl+iIieWIhuWJsuWNgOWNgOWhiuaZguWkseaVl+OAgiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo3MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gbGlzdCBmaWxlIHN5c3RlbSBibG9ja3MuIgorbXNnc3RyICIlc++8muWIl+iIieaqlOahiOezu+e1seWNgOWhiuaZguWkseaVl+OAgiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzo3MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gbGlzdCBib290IGJsb2Nrcy4iCittc2dzdHIgIiVz77ya5YiX6IiJ6ZaL5qmf5Y2A5aGK5pmC5aSx5pWX44CCIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3JkYi5jOjc0MAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gd3JpdGUgcGFydGl0aW9uIGJsb2NrIGF0ICVkLiIKK21zZ3N0ciAi5a+r5YWl5YiG5Ymy5Y2A5Y2A5aGKICVkIOaZguWkseaVl+OAgiIKKworIzogbGlicGFydGVkL2xhYmVscy9yZGIuYzoxMDY5Cittc2dpZCAiVW5hYmxlIHRvIGFsbG9jYXRlIGEgcGFydGl0aW9uIG51bWJlci4iCittc2dzdHIgIueEoeazleWumuS9jeWIhuWJsuWNgOe3qOiZn+OAgiIKKworIzogbGlicGFydGVkL2xhYmVscy9zdW4uYzoxNDUKK21zZ2lkICJDb3JydXB0ZWQgU3VuIGRpc2sgbGFiZWwgZGV0ZWN0ZWQuIgorbXNnc3RyICLlgbXmuKzliLDmkI3lo57kuobnmoQgU3VuIOejgeein+aomeexpOOAgiIKKworIzogbGlicGFydGVkL2xhYmVscy9zdW4uYzoyNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBkaXNrIENIUyBnZW9tZXRyeSAoJWQsJWQsJWQpIHJlcG9ydGVkIGJ5IHRoZSBvcGVyYXRpbmcgc3lzdGVtIGRvZXMgbm90ICIKKyJtYXRjaCB0aGUgZ2VvbWV0cnkgc3RvcmVkIG9uIHRoZSBkaXNrIGxhYmVsICglZCwlZCwlZCkuIgorbXNnc3RyICIiCisi55Sx5L2c5qWt57O757Wx5Zue5aCx55qE56OB56KfIENIUyDlub7kvZXntZDmp4sgKCVkLCVkLCVkKSDoiIfkv53lrZjlnKjno4Hnop/mqJnnsaTkuK3nmoTlub7kvZXntZDmp4sgKCUiCisiZCwlZCwlZCkg5LiN56ym5ZCI44CCIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3N1bi5jOjI4OAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgZGlzayBsYWJlbCBkZXNjcmliZXMgYSBkaXNrIGJpZ2dlciB0aGFuICVzLiIKK21zZ3N0ciAi56OB56Kf5qiZ57Gk5o+P6L+w55qE56OB56Kf5aSn5pa8ICVz44CCIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3N1bi5jOjQ0MgorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgZGlzayBoYXMgJWQgY3lsaW5kZXJzLCB3aGljaCBpcyBncmVhdGVyIHRoYW4gdGhlIG1heGltdW0gb2YgNjU1MzYuIgorbXNnc3RyICLoqbLno4Hnop/lhbfmnIkgJWQg5ZyI56OB5p+x77yM5bey6LaF6YGOIDY1NTM2IOeahOacgOWkp+mZkOWItuOAgiIKKworIzogbGlicGFydGVkL2xhYmVscy9zdW4uYzo3MzcKK21zZ2lkICIiCisiVGhlIFdob2xlIERpc2sgcGFydGl0aW9uIGlzIHRoZSBvbmx5IGF2YWlsYWJsZSBvbmUgbGVmdC4gIEdlbmVyYWxseSwgaXQgaXMgIgorIm5vdCBhIGdvb2QgaWRlYSB0byBvdmVyd3JpdGUgdGhpcyBwYXJ0aXRpb24gd2l0aCBhIHJlYWwgb25lLiAgU29sYXJpcyBtYXkgIgorIm5vdCBiZSBhYmxlIHRvIGJvb3Qgd2l0aG91dCBpdCwgYW5kIFNJTE8gKHRoZSBzcGFyYyBib290IGxvYWRlcikgYXBwcmVjaWF0ZXMgIgorIml0IGFzIHdlbGwuIgorbXNnc3RyICIiCisi5pW05YCL56OB56Kf5YiG5Ymy5Y2A5piv5oOf5LiA6YKE55WZ5LiL5Y+v55So55qE5Y2A5aGK44CC5LiA6Iis6ICM6KiA77yM5Lul55yf5a+m55qE5Y2A5aGK5L6G6KaG5a+r6YCZ5aGK5YiG5Ymy5Y2AICIKKyLkuKbkuI3mmK/lgIvlpb3kuLvmhI/jgILmspLmnInkuoblroPvvIxTb2xhcmlzIOS5n+ioseWwseeEoeazlemWi+apn++8jOS4puS4lCBTSUxPIChzcGFyYyDplovmqZ/ovInlhaXnqIsiCisi5byPKSDkuZ/mnIPlm6DmraTogIzmhJ/mv4DnmoTjgIIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvc3VuLmM6NzUyCittc2dpZCAiU3VuIGRpc2sgbGFiZWwgaXMgZnVsbC4iCittc2dzdHIgIlN1biDno4Hnop/mqJnnsaTlt7Lmu7/jgIIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjE2MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgb3BlbmluZyBkZXZpY2UgJyVzJyBmYWlsZWQuXG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzoxNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIHNlZWtpbmcgZGV2aWNlICclcycgZmFpbGVkLlxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6MTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyB3cml0aW5nIHRvIGRldmljZSAnJXMnIGZhaWxlZCxcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjE3NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgcmVhZGluZyBmcm9tIGRldmljZSAnJXMnIGZhaWxlZC5cbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjE3OQorIywgYy1mb3JtYXQKK21zZ2lkICJGYXRhbCBlcnJvclxuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQxOAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIFZUT0MgbGFiZWxzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0MjQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBWVE9DIEZNVDEgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDMxCittc2dpZCAiQ291bGQgbm90IHJlYWQgVlRPQyBGTVQ0IERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQzOAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIFZUT0MgRk1UNSBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0NDUKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBWVE9DIEZNVDcgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDYyCittc2dpZCAiQ291bGQgbm90IHdyaXRlIFZUT0MgbGFiZWxzLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0NjgKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgVlRPQyBGTVQxIERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9sYWJlbHMvdnRvYy5jOjQ3NQorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBWVE9DIEZNVDQgRFNDQi4iCittc2dzdHIgIiIKKworIzogbGlicGFydGVkL2xhYmVscy92dG9jLmM6NDgyCittc2dpZCAiQ291bGQgbm90IHdyaXRlIFZUT0MgRk1UNSBEU0NCLiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvbGFiZWxzL3Z0b2MuYzo0ODkKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgVlRPQyBGTVQ3IERTQ0IuIgorbXNnc3RyICIiCisKKyM6IGxpYnBhcnRlZC9saWJwYXJ0ZWQuYzoyOTYgbGlicGFydGVkL2xpYnBhcnRlZC5jOjMxNgorbXNnaWQgIk91dCBvZiBtZW1vcnkuIgorbXNnc3RyICLoqJjmhrbpq5TogJfnm6HjgIIiCisKKyM6IGxpYnBhcnRlZC91bml0LmM6MTM5Cittc2dpZCAiQ2Fubm90IGdldCB1bml0IHNpemUgZm9yIHNwZWNpYWwgdW5pdCAnQ09NUEFDVCcuIgorbXNnc3RyICLnhKHms5XnjbLlvpfnibnmrornmoTjgIxDT01QQUNU44CN5omA55So55qE5Zau5L2N5aSn5bCP44CCIgorCisjOiBsaWJwYXJ0ZWQvdW5pdC5jOjM4NgorIywgYy1mb3JtYXQKK21zZ2lkICJcIiVzXCIgaGFzIGludmFsaWQgc3ludGF4IGZvciBsb2NhdGlvbnMuIgorbXNnc3RyICLlrprkvY0gXCIlc1wiIOaZguiqnuazleeEoeaViOOAgiIKKworIzogbGlicGFydGVkL3VuaXQuYzozOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIG1heGltdW0gaGVhZCB2YWx1ZSBpcyAlZC4iCittc2dzdHIgIuejgemgreaVuOmHj+eahOacgOWkp+WAvOeCuiAlZOOAgiIKKworIzogbGlicGFydGVkL3VuaXQuYzo0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIG1heGltdW0gc2VjdG9yIHZhbHVlIGlzICVkLiIKK21zZ3N0ciAi56OB5Y2A5pW46YeP55qE5pyA5aSn5YC854K6ICVk44CCIgorCisjOiBsaWJwYXJ0ZWQvdW5pdC5jOjQxMyBsaWJwYXJ0ZWQvdW5pdC5jOjU0NQorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgbG9jYXRpb24gJXMgaXMgb3V0c2lkZSBvZiB0aGUgZGV2aWNlICVzLiIKK21zZ3N0ciAi5L2N572uICVzIOi2heWHuuijnee9riAlcyDnmoTnr4TlnI3jgIIiCisKKyM6IGxpYnBhcnRlZC91bml0LmM6NTI3Cittc2dpZCAiSW52YWxpZCBudW1iZXIuIgorbXNnc3RyICLnhKHmlYjnmoTnt6jomZ/jgIIiCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hZmZzLmM6NjMgbGlicGFydGVkL2ZzL2FtaWdhL2FwZnMuYzo1NgorIzogbGlicGFydGVkL2ZzL2FtaWdhL2FzZnMuYzo3MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gYWxsb2NhdGUgcGFydGl0aW9uIGJsb2NrXG4iCittc2dzdHIgIiVz77ya5YiX6IiJ5YiG5Ymy5Y2A5Y2A5aGK5pmC5aSx5pWX44CCIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYWZmcy5jOjc4IGxpYnBhcnRlZC9mcy9hbWlnYS9hcGZzLmM6NzAKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hc2ZzLmM6ODYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogRmFpbGVkIHRvIGFsbG9jYXRlIGJsb2NrXG4iCittc2dzdHIgIiVz77ya5YiX6IiJ6ZaL5qmf5Y2A5aGK5pmC5aSx5pWX44CCIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYWZmcy5jOjgzIGxpYnBhcnRlZC9mcy9hbWlnYS9hcGZzLmM6NzUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogQ291bGRuJ3QgcmVhZCBib290IGJsb2NrICVsbHVcbiIKK21zZ3N0ciAiJXPvvJrmlrzljYDloYogJWQg5YG15ris5Yiw6L+05ZyI44CCIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYWZmcy5jOjk5IGxpYnBhcnRlZC9mcy9hbWlnYS9hcGZzLmM6ODYKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hc2ZzLmM6OTIgbGlicGFydGVkL2ZzL2FtaWdhL2FzZnMuYzoxMDYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogQ291bGRuJ3QgcmVhZCByb290IGJsb2NrICVsbHVcbiIKK21zZ3N0ciAiJXPvvJrmlrzljYDloYogJWQg5YG15ris5Yiw6L+05ZyI44CCIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzo3MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gYWxsb2NhdGUgaWQgbGlzdCBlbGVtZW50XG4iCittc2dzdHIgIiVz77ya5YiX6IiJ5LiN55W25Y2A5aGK5pmC5aSx5pWX44CCIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBDb3VsZG4ndCByZWFkIGJsb2NrICVsbHVcbiIKK21zZ3N0ciAiIgorCisjOiBsaWJwYXJ0ZWQvZnMvYW1pZ2EvYW1pZ2EuYzoyMDIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIDogQmFkIGNoZWNrc3VtIG9uIGJsb2NrICVsbHUgb2YgdHlwZSAlc1xuIgorbXNnc3RyICIlc++8muWNgOWhiiAlbGx1IOeahOmhnuWeiyAlcyDmnInkuI3nlbbnmoTnuL3lkozmqqLmn6XlgLzjgIIiCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jOjIxMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBDb3VsZG4ndCB3cml0ZSBibG9jayAlZFxuIgorbXNnc3RyICIlc++8muaWvOWNgOWhiiAlZCDlgbXmuKzliLDov7TlnIjjgIIiCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jOjI3OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBGYWlsZWQgdG8gYWxsb2NhdGUgZGlza19zcGVjaWZpYyByZGIgYmxvY2tcbiIKK21zZ3N0ciAiJXPvvJrliJfoiInkuI3nlbbljYDloYrmmYLlpLHmlZfjgIIiCisKKyM6IGxpYnBhcnRlZC9mcy9hbWlnYS9hbWlnYS5jOjI4OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBEaWRuJ3QgZmluZCByZGIgYmxvY2ssIHNob3VsZCBuZXZlciBoYXBwZW5cbiIKK21zZ3N0ciAiJXPvvJrnhKHms5Xmib7liLAgcmRiIOWNgOWhiu+8jOmAmeS4jeaHieipsueZvOeUn+OAgiIKKworIzogbGlicGFydGVkL2ZzL2FtaWdhL2FtaWdhLmM6MzE4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyA6IEZhaWxlZCB0byByZWFkIHBhcnRpdGlvbiBibG9jayAlbGx1XG4iCittc2dzdHIgIiVz77ya5YiX6IiJ5YiG5Ymy5Y2A5Y2A5aGK5pmC5aSx5pWX44CCIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6ODcgbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjExMgorbXNnaWQgIkluY29uc2lzdGVudCBncm91cCBkZXNjcmlwdG9ycyEiCittc2dzdHIgIuS4jeS4gOiHtOeahOe+pOe1hOaPj+i/sOespuiZn++8gSIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjkxIGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzoxMTYKK21zZ2lkICJGaWxlIHN5c3RlbSBmdWxsISIKK21zZ3N0ciAi5qqU5qGI57O757Wx5bey5ru/77yBIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6Njg2Cittc2dpZCAiSW52YWxpZCBzdXBlcmJsb2NrLiAgQXJlIHlvdSBzdXJlIHRoaXMgaXMgYW4gZXh0MiBmaWxlIHN5c3RlbT8iCittc2dzdHIgIueEoeaViOeahOi2heWNgOWhiuOAguaCqOeiuuS/oeWug+aYr+S4gOWAiyBleHQyIOaqlOahiOezu+e1se+8nyIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjcwMCBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjY1OAorbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyBlcnJvcnMhICBZb3Ugc2hvdWxkIHJ1biBlMmZzY2suIgorbXNnc3RyICLmqpTmoYjns7vntbHnmbznlJ/pjK/oqqTvvIHmgqjmh4noqbLln7fooYwgZTJmc2Nr44CCIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyLmM6NzExCittc2dpZCAiIgorIkZpbGUgc3lzdGVtIHdhcyBub3QgY2xlYW5seSB1bm1vdW50ZWQhICBZb3Ugc2hvdWxkIHJ1biBlMmZzY2suICBNb2RpZnlpbmcgYW4gIgorInVuY2xlYW4gZmlsZSBzeXN0ZW0gY291bGQgY2F1c2Ugc2V2ZXJlIGNvcnJ1cHRpb24uIgorbXNnc3RyICIiCisi5qqU5qGI57O757Wx5rKS5pyJ6KKr5Lm+5reo5Zyw5Y246LyJ77yB5oKo5oeJ6Kmy5Z+36KGMIGUyZnNja+OAguS/ruaUueS4jeS5vua3qOeahOaqlOahiOezu+e1seWPr+iDveWwjuiHtOWatOmHjSIKKyLnmoTmkI3lo57jgIIiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDIuYzo3MzEKK21zZ2lkICJGaWxlIHN5c3RlbSBoYXMgYW4gaW5jb21wYXRpYmxlIGZlYXR1cmUgZW5hYmxlZC4iCittc2dzdHIgIuaqlOahiOezu+e1seWVn+eUqOS6huS4jeebuOWuueeahOWKn+iDveOAgiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Mi5jOjc0MgorbXNnaWQgIkVycm9yIGFsbG9jYXRpbmcgYnVmZmVyIGNhY2hlLiIKK21zZ3N0ciAi5YiG6YWN57ep6KGd5Y2A5b+r5Y+W5pmC55m855Sf6Yyv6Kqk44CCIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2lub2RlX3JlbG9jYXRvci5jOjExNAorbXNnaWQgIiIKKyJGb3VuZCBhbiBpbm9kZSB3aXRoIGEgaW5jb3JyZWN0IGxpbmsgY291bnQuICBCZXR0ZXIgZ28gcnVuIGUyZnNjayBmaXJzdCEiCittc2dzdHIgIuaJvuWIsOW4tuaciemMr+iqpOmAo+e1kOioiOaVuOeahCBpbm9kZeOAguacgOWlveWFiOWft+ihjCBlMmZzY2vvvIEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfaW5vZGVfcmVsb2NhdG9yLmM6NDg3Cittc2dpZCAiTm90IGVub3VnaCBmcmVlIGlub2RlcyEiCittc2dzdHIgIuaykuaciei2s+WkoOeahOWPr+eUqCBpbm9kZXPvvIEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6MjIzCittc2dpZCAiRmlsZSBzeXN0ZW0gaXMgdG9vIGZ1bGwgdG8gcmVtb3ZlIGEgZ3JvdXAhIgorbXNnc3RyICLmqpTmoYjns7vntbHooqvpgY7luqbkvZTnlKjvvIzku6Xoh7TnhKHms5XliKrpmaTmlbTntYTvvIEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6MjMyCittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIHRvbyBtYW55IGFsbG9jYXRlZCBpbm9kZXMgdG8gcmVtb3ZlIGEgZ3JvdXAhIgorbXNnc3RyICLmqpTmoYjns7vntbHkuK3lt7Lkvb/nlKjnmoQgaW5vZGUg6YGO5aSa77yM5Lul6Ie054Sh5rOV5Yiq6Zmk5pW057WE77yBIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjQ5MQorbXNnaWQgImFkZGluZyBncm91cHMiCittc2dzdHIgIua3u+WKoOe+pOe1hCIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9yZXNpemUuYzo1MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBmaWxlIHN5c3RlbSBpcyB0b28gZnVsbCB0byByZXNpemUgaXQgdG8gJWkgYmxvY2tzLiAgU29ycnkuIgorbXNnc3RyICLmgqjnmoTmqpTmoYjns7vntbHooqvpgY7luqbkvZTnlKjvvIzku6Xoh7TnhKHms5XlsIflroPnmoTlpKflsI/mlLnororngrogJWkg5YCL5Y2A5aGK44CC5oqx5q2J44CCIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjUzOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBmaWxlIHN5c3RlbSBoYXMgdG9vIG1hbnkgb2NjdXBpZWQgaW5vZGVzIHRvIHJlc2l6ZSBpdCB0byAlaSBibG9ja3MuICAiCisiU29ycnkuIgorbXNnc3RyICIiCisi5oKo55qE5qqU5qGI57O757Wx5Lit5bey5L2/55So55qEIGlub2RlIOmBjuWkmu+8jOS7peiHtOeEoeazleWwh+WFtuWkp+Wwj+aUueiuiueCuiAlaSDlgIvljYDloYrjgILmirHmrYnjgIIiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6NjY2Cittc2dpZCAiRmlsZSBzeXN0ZW0gd2FzIG5vdCBjbGVhbmx5IHVubW91bnRlZCEgIFlvdSBzaG91bGQgcnVuIGUyZnNjay4iCittc2dzdHIgIuaqlOahiOezu+e1seaykuacieS5vua3qOWcsOWNuOi8ie+8geaCqOaHieipsuWft+ihjCBlMmZzY2vjgIIiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfcmVzaXplLmM6Njc1Cittc2dpZCAiIgorIlRoZSBmaWxlIHN5c3RlbSBoYXMgdGhlICdkaXJfaW5kZXgnIGZlYXR1cmUgZW5hYmxlZC4gIFBhcnRlZCBjYW4gb25seSByZXNpemUgIgorInRoZSBmaWxlIHN5c3RlbSBpZiBpdCBkaXNhYmxlcyB0aGlzIGZlYXR1cmUuICBZb3UgY2FuIGVuYWJsZSBpdCBsYXRlciBieSAiCisicnVubmluZyAndHVuZTJmcyAtTyBkaXJfaW5kZXggREVWSUNFJyBhbmQgdGhlbiAnZTJmc2NrIC1mRCBERVZJQ0UnLiIKK21zZ3N0ciAiIgorIuaqlOahiOezu+e1seW3suWVn+eUqOOAjGRpcl9pbmRleOOAjeeahOeJueauiuWKn+iDveOAguWPquacieeVtuatpOeJueaAp+WBnOeUqOaZgu+8jFBhcnRlZCDmiY3og73mlLnorormqpQiCisi5qGI57O757Wx55qE5aSn5bCP44CC5oKo5Y+v5Lul5Zyo56iN5b6M5Yip55So5Z+36KGM44CMdHVuZTJmcyAtTyBkaXJfaW5kZXggREVWSUNF44CN5L6G5ZWf55So5a6D77yM54S2IgorIuW+jOaOpeiRl+OAjGUyZnNjayAtZkQgREVWSUNF44CN44CCIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX3Jlc2l6ZS5jOjY5MQorIywgZnV6enkKK21zZ2lkICIiCisiQSByZXNpemUgb3BlcmF0aW9uIG9uIHRoaXMgZmlsZSBzeXN0ZW0gd2lsbCB1c2UgRVhQRVJJTUVOVEFMIGNvZGVcbiIKKyJ0aGF0IE1BWSBDT1JSVVBUIGl0IChhbHRob3VnaCBubyBvbmUgaGFzIHJlcG9ydGVkIGFueSBzdWNoIGRhbWFnZSB5ZXQpLlxuIgorIllvdSBzaG91bGQgYXQgbGVhc3QgYmFja3VwIHlvdXIgZGF0YSBmaXJzdCwgYW5kIHJ1biAnZTJmc2NrIC1mJyBhZnRlcndhcmRzLiIKK21zZ3N0ciAiIgorIuWcqOmAmeWAi+aqlOahiOezu+e1seS4iuaUueiuiuWkp+Wwj+eahOaTjeS9nO+8jOWwh+acg+S9v+eUqFvlr6bpqZfmgKdd55qE56iL5byP56K877yM5a6DW+acieWPr+iDvV3pgKDmiJBb5q+AIgorIuaQjV0o6ZuW54S26YKE5LiN5pu+55m855Sf6YGOKeOAguaCqOaHieipsuiHs+WwkeimgeWCmeS7veaCqOeahOizh+aWme+8jOS4puWcqOS5i+W+jOWft+ihjCAnZTJmc2NrIC1mJ+OAgiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvZXh0Ml9ibG9ja19yZWxvY2F0b3IuYzoxOTgKK21zZ2lkICJDcm9zcy1saW5rZWQgYmxvY2tzIGZvdW5kISAgQmV0dGVyIGdvIHJ1biBlMmZzY2sgZmlyc3QhIgorbXNnc3RyICLnmbznj77kuqTlj4npgKPntZDljYDloYrvvIHmnIDlpb3lhYjln7fooYwgZTJmc2Nr77yBIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2Jsb2NrX3JlbG9jYXRvci5jOjUzNworIywgYy1mb3JtYXQKK21zZ2lkICJCbG9jayAlaSBoYXMgbm8gcmVmZXJlbmNlPyAgV2VpcmQuIgorbXNnc3RyICLljYDloYogJWkg5rKS5pyJ6KKr5Y+D54Wn77yf5aWH5oCq44CCIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9leHQyX2Jsb2NrX3JlbG9jYXRvci5jOjczNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQmxvY2sgJWkgc2hvdWxkbid0IGhhdmUgYmVlbiBtYXJrZWQgKCVkLCAlZCkhIgorbXNnc3RyICLljYDloYogJWkg5LiN5oeJ6Kmy5bey6KKr5qiZ6KiY77yBIgorCisjOiBsaWJwYXJ0ZWQvZnMvZXh0Mi9pbnRlcmZhY2UuYzoxODYKK21zZ2lkICIiCisiVGhlIGV4dDIgZmlsZSBzeXN0ZW0gcGFzc2VkIGEgYmFzaWMgY2hlY2suICBGb3IgYSBtb3JlIGNvbXByZWhlbnNpdmUgY2hlY2ssICIKKyJ1c2UgdGhlIGUyZnNjayBwcm9ncmFtLiIKK21zZ3N0ciAiZXh0MiDmqpTmoYjns7vntbHpgJrpgY7kuobln7rmnKzmqqLmn6XjgILoh7Pmlrzmm7TlrozmlbTnmoTmqqLmn6XvvIzoq4vkvb/nlKggZTJmc2NrIOeoi+W8j+OAgiIKKworIzogbGlicGFydGVkL2ZzL2V4dDIvaW50ZXJmYWNlLmM6MjAzCittc2dpZCAiU29ycnksIGNhbid0IG1vdmUgdGhlIHN0YXJ0IG9mIGV4dDIgcGFydGl0aW9ucyB5ZXQhIgorbXNnc3RyICLmirHmrYnvvIzlsJrnhKHms5Xnp7vli5UgZXh0MiDliIblibLljYDnmoTotbfpu57vvIEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfYnVmZmVyLmM6ODIKK21zZ2lkICJDb3VsZG4ndCBmbHVzaCBidWZmZXIgY2FjaGUhIgorbXNnc3RyICLnhKHms5XmjpLnqbrnt6nooZ3ljYDlv6vlj5bvvIEiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfbWtmcy5jOjE2MgorbXNnaWQgIndyaXRpbmcgcGVyLWdyb3VwIG1ldGFkYXRhIgorbXNnc3RyICLlr6vlhaXlgIvliKXnvqTntYTnmoTkuK3nubzos4fmlpkiCisKKyM6IGxpYnBhcnRlZC9mcy9leHQyL2V4dDJfbWtmcy5jOjU2NAorbXNnaWQgIkZpbGUgc3lzdGVtIHRvbyBzbWFsbCBmb3IgZXh0Mi4iCittc2dzdHIgIuWwjSBleHQyIOS+huiqquaqlOahiOezu+e1semBjuWwj+OAgiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jYWxjLmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgbmVlZCAlcyBvZiBmcmVlIGRpc2sgc3BhY2UgdG8gc2hyaW5rIHRoaXMgcGFydGl0aW9uIHRvIHRoaXMgc2l6ZS4gICIKKyJDdXJyZW50bHksIG9ubHkgJXMgaXMgZnJlZS4iCittc2dzdHIgIiIKKyLmgqjpnIDopoEgJXMg55qE6Ieq55Sx56m66ZaT5L6G5bCH5q2k5YiG5Ymy5Y2A5pS257iu5Yiw6YCZ5LiA5aSn5bCP44CC6ICM55uu5YmN5Y+q5pyJICVzIOeahOiHqueUseepuumWk+OAgiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb250ZXh0LmM6NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNsdXN0ZXIgc3RhcnQgZGVsdGEgPSAlZCwgd2hpY2ggaXMgbm90IGEgbXVsdGlwbGUgb2YgdGhlIGNsdXN0ZXIgc2l6ZSAlZC4iCittc2dzdHIgIuejgeewh+i1t+Wni+WBj+enuyA9ICVk77yM5LiN5piv56OB57CH5aSn5bCPICVkIOeahOaVtOaVuOWAjeOAgiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9mYXQuYzozMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGFydGl0aW9uIHRvbyBiaWcvc21hbGwgZm9yIGEgJXMgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICLlsI3mlrwgJXMg5qqU5qGI57O757Wx5L6G6Kqq77yM5YiG5Ymy5Y2A6YGO5aSn5oiW6YGO5bCP44CCIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jOjQ3NAorbXNnaWQgIiIKKyJUaGUgRkFUcyBkb24ndCBtYXRjaC4gIElmIHlvdSBkb24ndCBrbm93IHdoYXQgdGhpcyBtZWFucywgdGhlbiBzZWxlY3QgIgorImNhbmNlbCwgcnVuIHNjYW5kaXNrIG9uIHRoZSBmaWxlIHN5c3RlbSwgYW5kIHRoZW4gY29tZSBiYWNrLiIKK21zZ3N0ciAiIgorIkZBVCDkuI3nm7jnrKblkIjjgILlpoLmnpzkvaDkuI3nn6XpgZPlroPnmoTlkKvnvqnvvIzoq4vpgbjmk4flj5bmtojvvIzkuKblsI3mqpTmoYjns7vntbHln7fooYwgc2NhbmRpc2vvvIznhLYiCisi5b6M5YaN5Zue5Yiw6YCZ6KOh5L6G44CCIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jOjUxNAorbXNnaWQgIlRoZXJlIGFyZSBubyBwb3NzaWJsZSBjb25maWd1cmF0aW9ucyBmb3IgdGhpcyBGQVQgdHlwZS4iCittc2dzdHIgIuWwjeaWvOatpCBGQVQg6aGe5Z6L5rKS5pyJ5Y+v6IO955qE6YWN572u44CCIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jOjUyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRmlsZSBzeXN0ZW0gZG9lc24ndCBoYXZlIGV4cGVjdGVkIHNpemVzIGZvciBXaW5kb3dzIHRvIGxpa2UgaXQuICBDbHVzdGVyICIKKyJzaXplIGlzICVkayAoJWRrIGV4cGVjdGVkKTsgbnVtYmVyIG9mIGNsdXN0ZXJzIGlzICVkICglZCBleHBlY3RlZCk7IHNpemUgb2YgIgorIkZBVHMgaXMgJWQgc2VjdG9ycyAoJWQgZXhwZWN0ZWQpLiIKK21zZ3N0ciAiIgorIuaqlOahiOezu+e1seeahOWkp+Wwj+S4jeaYryBXaW5kb3dzIOaJgOW4jOacm+eahOOAguejgeewh+Wkp+Wwj+eCuiAlZGsgKOacn+acmyAlZGsp77yb56OB57CH5pW46YeP54K6ICUiCisiZCAo5pyf5pybICVkKe+8m0ZBVCDnmoTlpKflsI/ngrogJWQg56OB5Y2AICjmnJ/mnJsgJWQp44CCIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2ZhdC5jOjU0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRmlsZSBzeXN0ZW0gaXMgcmVwb3J0aW5nIHRoZSBmcmVlIHNwYWNlIGFzICVkIGNsdXN0ZXJzLCBub3QgJWQgY2x1c3RlcnMuIgorbXNnc3RyICLmqpTmoYjns7vntbHloLHlkYroh6rnlLHnqbrplpPngrogJWQg56OB57CH77yM6ICM5LiN5pivICVkIOejgeewh+OAgiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9mYXQuYzo4NzQKK21zZ2lkICIiCisiR05VIFBhcnRlZCB3YXMgbWlzY29tcGlsZWQ6IHRoZSBGQVQgYm9vdCBzZWN0b3Igc2hvdWxkIGJlIDUxMiBieXRlcy4gIEZBVCAiCisic3VwcG9ydCB3aWxsIGJlIGRpc2FibGVkLiIKK21zZ3N0ciAiR05VIHBhcnRlZCDnt6jora/pjK/oqqTvvJpGQVQg5ZWf5YuV56OB5Y2A5oeJ54K6IDUxMiDkvY3lhYPntYTjgIJGQVQg5pSv5o+05bCH6KKr6Zec6ZaJ44CCIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjE1OQorbXNnaWQgIiIKKyJUaGVyZSdzIG5vdCBlbm91Z2ggcm9vbSBpbiB0aGUgcm9vdCBkaXJlY3RvcnkgZm9yIGFsbCBvZiB0aGUgZmlsZXMuICBFaXRoZXIgIgorImNhbmNlbCwgb3IgaWdub3JlIHRvIGxvc2UgdGhlIGZpbGVzLiIKK21zZ3N0ciAi5qC555uu6YyE5LiL5rKS5pyJ5L+d5a2Y5omA5pyJ5qqU5qGI55qE6Laz5aSg56m66ZaT44CC5Y+W5raI5oiW6ICF5Lul5pCN5aSx5qqU5qGI54K65Luj5YO55b+955Wl5a6D44CCIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjMwMAorbXNnaWQgIkVycm9yIHdyaXRpbmcgdG8gdGhlIHJvb3QgZGlyZWN0b3J5LiIKK21zZ3N0ciAi5a+r5YWl5qC555uu6YyE5pmC6Yyv6Kqk44CCIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjQ4OQorbXNnaWQgIklmIHlvdSBsZWF2ZSB5b3VyIGZpbGUgc3lzdGVtIGFzIEZBVDE2LCB0aGVuIHlvdSB3aWxsIGhhdmUgbm8gcHJvYmxlbXMuIgorbXNnc3RyICLlpoLmnpzlsIfmgqjnmoTmqpTmoYjns7vntbHpoZ7lnovkv53mjIEgRkFUMTYg5LiN6K6K77yM6YKj6bq85L2g5bCx5LiN5pyD5pyJ5ZWP6aGM44CCIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjQ5MgorbXNnaWQgIiIKKyJJZiB5b3UgY29udmVydCB0byBGQVQxNiwgYW5kIE1TIFdpbmRvd3MgaXMgaW5zdGFsbGVkIG9uIHRoaXMgcGFydGl0aW9uLCB0aGVuICIKKyJ5b3UgbXVzdCByZS1pbnN0YWxsIHRoZSBNUyBXaW5kb3dzIGJvb3QgbG9hZGVyLiAgSWYgeW91IHdhbnQgdG8gZG8gdGhpcywgeW91ICIKKyJzaG91bGQgY29uc3VsdCB0aGUgUGFydGVkIG1hbnVhbCAob3IgeW91ciBkaXN0cmlidXRpb24ncyBtYW51YWwpLiIKK21zZ3N0ciAiIgorIuWmguaenOaCqOi9ieaPm+eCuiBGQVQxNu+8jOS4puWwhyBNUyBXaW5kb3dzIOWuieijneWIsOmAmeWAi+WIhuWJsuWNgO+8jOmCo+m6vOaCqOW/hemgiOmHjeaWsOWuieijnSBNUyAiCisiV2luZG93cyDplovmqZ/ovInlhaXnqIvlvI/jgILlpoLmnpzmgqjmiZPnrpfpgJnpurzlgZrvvIzmgqjmh4noqbLlj4PplrEgUGFydGVkIOeahOaJi+WGiiAo5oiW5oKo55qE55m86KGMIgorIueJiOaJi+WGiinjgIIiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTAwCittc2dpZCAiIgorIklmIHlvdSBsZWF2ZSB5b3VyIGZpbGUgc3lzdGVtIGFzIEZBVDMyLCB0aGVuIHlvdSB3aWxsIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyAiCisicHJvYmxlbXMuIgorbXNnc3RyICLlpoLmnpzmgqjkv53mjIHmqpTmoYjns7vntbHpoZ7lnovngrogRkFUMzIg5LiN6K6K77yM6YKj6bq85oKo5bCH5LiN5pyD6YGH5Yiw5Lu75L2V5paw5ZWP6aGM44CCIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjUwNAorbXNnaWQgIiIKKyJJZiB5b3UgY29udmVydCB0byBGQVQzMiwgYW5kIE1TIFdpbmRvd3MgaXMgaW5zdGFsbGVkIG9uIHRoaXMgcGFydGl0aW9uLCB0aGVuICIKKyJ5b3UgbXVzdCByZS1pbnN0YWxsIHRoZSBNUyBXaW5kb3dzIGJvb3QgbG9hZGVyLiAgSWYgeW91IHdhbnQgdG8gZG8gdGhpcywgeW91ICIKKyJzaG91bGQgY29uc3VsdCB0aGUgUGFydGVkIG1hbnVhbCAob3IgeW91ciBkaXN0cmlidXRpb24ncyBtYW51YWwpLiAgQWxzbywgIgorImNvbnZlcnRpbmcgdG8gRkFUMzIgd2lsbCBtYWtlIHRoZSBmaWxlIHN5c3RlbSB1bnJlYWRhYmxlIGJ5IE1TIERPUywgTVMgIgorIldpbmRvd3MgOTVhLCBhbmQgTVMgV2luZG93cyBOVC4iCittc2dzdHIgIiIKKyLlpoLmnpzmgqjovYnmj5vngrogRkFUMzLvvIzkuKbkuJQgTVMgV2luZG93cyDlronoo53lnKjpgJnlgIvliIblibLljYDvvIzpgqPpurzmgqjlv4XpoIjph43mlrDlronoo50gTVMgIgorIldpbmRvd3Mg55qE6ZaL5qmf6LyJ5YWl56iL5byP44CC5aaC5p6c5oKo5omT566X6YCZ5qij5L2c77yM5oKo5oeJ6Kmy5Y+D6ZaxIFBhcnRlZCDnmoTmiYvlhoogKOaIluiAheaCqOeahCIKKyLnmbzooYzniYjmiYvlhoop44CC5q2k5aSW77yM5bCH5qqU5qGI57O757Wx6L2J5o+b54K6IEZBVDMy77yM5qqU5qGI57O757Wx5bCx5LiN6IO95aSg6KKrIE1TIERPU+OAgU1TICIKKyJXaW5kb3dzIDk1YSDlkowgTVMgV2luZG93cyBOVCDmiYDlrZjlj5bjgIIiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzICAlcyAgJXMiCittc2dzdHIgIiVzICAlcyAgJXMiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTE5Cittc2dpZCAiV291bGQgeW91IGxpa2UgdG8gdXNlIEZBVDMyPyIKK21zZ3N0ciAi5oKo5piv5ZCm6aGY5oSP5L2/55SoIEZBVDMy77yfIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjU1MCBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjU2NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyAgJXMiCittc2dzdHIgIiVzICAlcyIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9yZXNpemUuYzo1NTEKK21zZ2lkICIiCisiVGhlIGZpbGUgc3lzdGVtIGNhbiBvbmx5IGJlIHJlc2l6ZWQgdG8gdGhpcyBzaXplIGJ5IGNvbnZlcnRpbmcgdG8gRkFUMTYuIgorbXNnc3RyICLmqpTmoYjns7vntbHnmoTlpKflsI/lj6rog73ntpPnlLHovYnmj5vngrogRkFUMTYg5pS56K6K5Yiw6YCZ5LiA5aSn5bCP44CCIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3Jlc2l6ZS5jOjU2NworbXNnaWQgIiIKKyJUaGUgZmlsZSBzeXN0ZW0gY2FuIG9ubHkgYmUgcmVzaXplZCB0byB0aGlzIHNpemUgYnkgY29udmVydGluZyB0byBGQVQzMi4iCittc2dzdHIgIuaqlOahiOezu+e1seeahOWkp+Wwj+WPquiDvee2k+eUsei9ieaPm+eCuiBGQVQzMiDmlLnororliLDpgJnkuIDlpKflsI/jgIIiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvcmVzaXplLmM6NTgwCittc2dpZCAiIgorIkdOVSBQYXJ0ZWQgY2Fubm90IHJlc2l6ZSB0aGlzIHBhcnRpdGlvbiB0byB0aGlzIHNpemUuICBXZSdyZSB3b3JraW5nIG9uIGl0ISIKK21zZ3N0ciAiR05VIFBhcnRlZCDnhKHms5XlsIfmraTliIblibLljYDovYnmj5vliLDpgJnkuIDlpKflsI/jgILmiJHlgJHmraPlnKjliqrlipvkuK3vvIEiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjQ5IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjU2Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGludmFsaWQgc2lnbmF0dXJlIGZvciBhIEZBVCBmaWxlIHN5c3RlbS4iCittc2dzdHIgIuaqlOahiOezu+e1seWQq+acieeEoeaViOeahCBGQVQg5qqU5qGI57O757Wx57C95ZCN44CCIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo2NAorbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyBhbiBpbnZhbGlkIHNlY3RvciBzaXplIGZvciBhIEZBVCBmaWxlIHN5c3RlbS4iCittc2dzdHIgIuaqlOahiOezu+e1seeahOejgeWNgOWkp+Wwj+WwjSBGQVQg5qqU5qGI57O757Wx5L6G6Kqq54Sh5pWI44CCIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzo3MQorbXNnaWQgIkZpbGUgc3lzdGVtIGhhcyBhbiBpbnZhbGlkIGNsdXN0ZXIgc2l6ZSBmb3IgYSBGQVQgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICLmqpTmoYjns7vntbHnmoTno4HnsIflpKflsI/lsI0gRkFUIOaqlOahiOezu+e1seS+huiqqueEoeaViOOAgiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6NzgKK21zZ2lkICIiCisiRmlsZSBzeXN0ZW0gaGFzIGFuIGludmFsaWQgbnVtYmVyIG9mIHJlc2VydmVkIHNlY3RvcnMgZm9yIGEgRkFUIGZpbGUgc3lzdGVtLiIKK21zZ3N0ciAi5qqU5qGI57O757Wx55qE5L+d55WZ56OB5Y2A5pW45bCNIEZBVCDmqpTmoYjns7vntbHkvoboqqrnhKHmlYjjgIIiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjg1Cittc2dpZCAiRmlsZSBzeXN0ZW0gaGFzIGFuIGludmFsaWQgbnVtYmVyIG9mIEZBVHMuIgorbXNnc3RyICLmqpTmoYjns7vntbHnmoQgRkFUIOaVuOmHj+eEoeaViOOAgiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6MTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGlzIGZpbGUgc3lzdGVtIGhhcyBhIGxvZ2ljYWwgc2VjdG9yIHNpemUgb2YgJWQuICBHTlUgUGFydGVkIGlzIGtub3duIG5vdCAiCisidG8gd29yayBwcm9wZXJseSB3aXRoIHNlY3RvciBzaXplcyBvdGhlciB0aGFuIDUxMiBieXRlcy4iCittc2dzdHIgIiIKKyLmraTmqpTmoYjns7vntbHnmoTpgo/ovK/no4HljYDlpKflsI/ngrogJWTjgIJHTlUgUGFydGVkIOeEoeazleWcqOejgeWNgOWkp+Wwj+S4jeaYryA1MTIg5L2N5YWD57WE55qE5oOF5rOBIgorIuS4i+ato+eiuuW3peS9nOOAgiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6MTY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZmlsZSBzeXN0ZW0ncyBDSFMgZ2VvbWV0cnkgaXMgKCVkLCAlZCwgJWQpLCB3aGljaCBpcyBpbnZhbGlkLiAgVGhlICIKKyJwYXJ0aXRpb24gdGFibGUncyBDSFMgZ2VvbWV0cnkgaXMgKCVkLCAlZCwgJWQpLiAgSWYgeW91IHNlbGVjdCBJZ25vcmUsIHRoZSAiCisiZmlsZSBzeXN0ZW0ncyBDSFMgZ2VvbWV0cnkgd2lsbCBiZSBsZWZ0IHVuY2hhbmdlZC4gIElmIHlvdSBzZWxlY3QgRml4LCB0aGUgIgorImZpbGUgc3lzdGVtJ3MgQ0hTIGdlb21ldHJ5IHdpbGwgYmUgc2V0IHRvIG1hdGNoIHRoZSBwYXJ0aXRpb24gdGFibGUncyBDSFMgIgorImdlb21ldHJ5LiIKK21zZ3N0ciAiIgorIuaqlOahiOezu+e1seeahCBDSFMg5bm+5L2V57WQ5qeL54K6ICglZCwgJWQsICVkKe+8jOiAjOWFtueCuueEoeaViOOAguWIhuWJsuWNgOihqOeahCBDSFMg5bm+5L2V57WQ5qeLIgorIueCuiAoJWQsICVkLCAlZCnjgILlpoLmnpzmgqjpgbjmk4flv73nlaXvvIzmqpTmoYjns7vntbHnmoQgQ0hTIOW5vuS9lee1kOani+Wwh+acg+S/neeVmeS4jeiuiuOAguWmguaenOaCqCIKKyLpgbjmk4fkv67lvqnvvIzmqpTmoYjns7vntbHnmoQgQ0hTIOW5vuS9lee1kOani+Wwh+acg+iiq+ioreWumuS7peespuWQiOWIhuWJsuWNgOihqOeahCBDSFMg5bm+5L2V57WQ5qeL44CCIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2Jvb3RzZWN0b3IuYzoyMTMKK21zZ2lkICJGQVQgYm9vdCBzZWN0b3Igc2F5cyBsb2dpY2FsIHNlY3RvciBzaXplIGlzIDAuICBUaGlzIGlzIHdlaXJkLiAiCittc2dzdHIgIkZBVCDllZ/li5Xno4HljYDogbLnqLHpgo/ovK/no4HljYDnmoTlpKflsI/ngrrpm7bjgILpgJnlvojlpYfmgKrjgIIiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjIxOQorbXNnaWQgIkZBVCBib290IHNlY3RvciBzYXlzIHRoZXJlIGFyZSBubyBGQVQgdGFibGVzLiAgVGhpcyBpcyB3ZWlyZC4gIgorbXNnc3RyICJGQVQg5ZWf5YuV56OB5Y2A6IGy56ix5rKS5pyJIEZBVCDooajjgILpgJnlvojlpYfmgKrjgIIiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjIyNQorbXNnaWQgIkZBVCBib290IHNlY3RvciBzYXlzIGNsdXN0ZXJzIGFyZSAwIHNlY3RvcnMuICBUaGlzIGlzIHdlaXJkLiAiCittc2dzdHIgIkZBVCDllZ/li5Xno4HljYDogbLnqLHno4HnsIflhbfmnInpm7bno4HljYDjgILpgJnlvojlpYfmgKrjgIIiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvYm9vdHNlY3Rvci5jOjIzNQorbXNnaWQgIkZpbGUgc3lzdGVtIGlzIEZBVDEyLCB3aGljaCBpcyB1bnN1cHBvcnRlZC4iCittc2dzdHIgIuaqlOahiOezu+e1seeCuiBGQVQxMu+8jOS4jeaUr+aPtOOAgiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9ib290c2VjdG9yLmM6NDExCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgaW5mb3JtYXRpb24gc2VjdG9yIGhhcyB0aGUgd3Jvbmcgc2lnbmF0dXJlICgleCkuICBTZWxlY3QgY2FuY2VsIGZvciBub3csICIKKyJhbmQgc2VuZCBpbiBhIGJ1ZyByZXBvcnQuICBJZiB5b3UncmUgZGVzcGVyYXRlLCBpdCdzIHByb2JhYmx5IHNhZmUgdG8gaWdub3JlLiIKK21zZ3N0ciAiIgorIuizh+ioiuejgeWNgOeahOewveWQjemMr+iqpCAoJXgp44CC54++5Zyo6YG45pOH5Y+W5raI77yM5Lim55m86YCB56iL5byP6Yyv6Kqk5aCx5ZGK44CC5aaC5p6c5oKo5LiN6aGn5LiA5YiH77yM6YG4IgorIuaTh+W/veeVpeacieWPr+iDveaYr+OAjOWuieWFqOOAjeeahOOAgiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb3VudC5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgZGlyZWN0b3J5IGVudHJ5IGZvciAlczogZmlyc3QgY2x1c3RlciBpcyB0aGUgZW5kIG9mIGZpbGUgbWFya2VyLiIKK21zZ3N0ciAiJXMg55qE55uu6YyE5qKd55uu5LiN55W277ya56ys5LiA5YCL56OB57CH5bCx5piv5qqU5qGI5qiZ6KiY55qE57WQ5p2f44CCIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvdW50LmM6MTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJCYWQgRkFUOiB1bnRlcm1pbmF0ZWQgY2hhaW4gZm9yICVzLiAgWW91IHNob3VsZCBydW4gZG9zZnNjayBvciBzY2FuZGlzay4iCittc2dzdHIgIuS4jeeVtueahCBGQVTvvJolcyDnmoTpj4jntZDmnKrntZDmnZ/jgILmgqjmh4noqbLln7fooYwgZG9zZnNjayDmiJYgc2NhbmRpc2vjgIIiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvY291bnQuYzoxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkJhZCBGQVQ6IGNsdXN0ZXIgJWQgb3V0c2lkZSBmaWxlIHN5c3RlbSBpbiBjaGFpbiBmb3IgJXMuICBZb3Ugc2hvdWxkIHJ1biAiCisiZG9zZnNjayBvciBzY2FuZGlzay4iCittc2dzdHIgIiIKKyLkuI3nlbbnmoQgRkFU77ya5ZyoJTIkcyDnmoTpj4jntZDkuK3vvIzno4HnsIcgJTEkZCDkvY3mlrzmqpTmoYjns7vntbHkuYvlpJbjgILmgqjmh4noqbLln7fooYwgZG9zZnNjayAiCisi5oiWIHNjYW5kaXNr44CCIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L2NvdW50LmM6MTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJCYWQgRkFUOiBjbHVzdGVyICVkIGlzIGNyb3NzLWxpbmtlZCBmb3IgJXMuICBZb3Ugc2hvdWxkIHJ1biBkb3Nmc2NrIG9yICIKKyJzY2FuZGlzay4iCittc2dzdHIgIuS4jeeVtueahCBGQVTvvJrno4HnsIcgJWQg6IiHICVzIOeahOmPiOe1kOS6pOWPieOAguaCqOaHieipsuWft+ihjCBkb3Nmc2NrIOaIliBzY2FuZGlza+OAgiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb3VudC5jOjIwMworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyAlZGssIGJ1dCBpdCBoYXMgJWQgY2x1c3RlcnMgKCVkaykuIgorbXNnc3RyICIlcyDngrogJWRr77yM5L2G5ZCr5pyJICVkIOWAi+ejgeewhyAoJWRrKeOAgiIKKworIzogbGlicGFydGVkL2ZzL2ZhdC9jb3VudC5jOjI2NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGUgJXMgaXMgbWFya2VkIGFzIGEgc3lzdGVtIGZpbGUuICBUaGlzIG1lYW5zIG1vdmluZyBpdCBjb3VsZCBjYXVzZSAiCisic29tZSBwcm9ncmFtcyB0byBzdG9wIHdvcmtpbmcuIgorbXNnc3RyICLmqpTmoYggJXMg6KKr5qiZ6KiY54K657O757Wx5qqU5qGI44CC6YCZ5oSP5ZGz6JGX56e75YuV5a6D5Y+v6IO95bCO6Ie05p+Q5Lqb56iL5byP5YGc5q2i5bel5L2c44CCIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3RhYmxlLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGQVQgJWQgbWVkaWEgJXggZG9lc24ndCBtYXRjaCB0aGUgYm9vdCBzZWN0b3IncyBtZWRpYSAleC4gIFlvdSBzaG91bGQgIgorInByb2JhYmx5IHJ1biBzY2FuZGlzay4iCittc2dzdHIgIiIKKyJGQVQgJWQg5aqS6auUICV4IOWSjOWVn+WLleejgeWNgOaJgOWcqOeahOWqkumrlCAleCDkuI3nrKblkIjjgILmgqjlj6/og73mh4noqbLln7fooYwgc2NhbmRpc2vjgIIiCisKKyM6IGxpYnBhcnRlZC9mcy9mYXQvdGFibGUuYzoyNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmF0X3RhYmxlX3NldDogY2x1c3RlciAlbGQgb3V0c2lkZSBmaWxlIHN5c3RlbSIKK21zZ3N0ciAiZmF0X3RhYmxlX3NldO+8muejgeewhyAlbGQg5L2N5pa85qqU5qGI57O757Wx5LmL5aSWIgorCisjOiBsaWJwYXJ0ZWQvZnMvZmF0L3RhYmxlLmM6MzAxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhdF90YWJsZV9nZXQ6IGNsdXN0ZXIgJWxkIG91dHNpZGUgZmlsZSBzeXN0ZW0iCittc2dzdHIgImZhdF90YWJsZV9nZXTvvJrno4HnsIcgJWxkIOS9jeaWvOaqlOahiOezu+e1seS5i+WkliIKKworIzogbGlicGFydGVkL2ZzL2ZhdC90YWJsZS5jOjM0MworbXNnaWQgImZhdF90YWJsZV9hbGxvY19jbHVzdGVyOiBubyBmcmVlIGNsdXN0ZXJzIgorbXNnc3RyICJmYXRfdGFibGVfYWxsb2NfY2x1c3Rlcu+8muaykuacieiHqueUseejgeewhyIKKworIzogbGlicGFydGVkL2ZzL2xpbnV4X3N3YXAvbGludXhfc3dhcC5jOjI3NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVW5yZWNvZ25pc2VkIG9sZCBzdHlsZSBsaW51eCBzd2FwIHNpZ25hdHVyZSAnJTEwcycuIgorbXNnc3RyICLnhKHms5XorZjliKXnmoQgbGludXgg5Lqk5o+b57C95ZCN44CMJTEwc+OAjeOAgiIKKworIzogbGlicGFydGVkL2ZzL2xpbnV4X3N3YXAvbGludXhfc3dhcC5jOjMxOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVW5yZWNvZ25pc2VkIG5ldyBzdHlsZSBsaW51eCBzd2FwIHNpZ25hdHVyZSAnJTEwcycuIgorbXNnc3RyICLnhKHms5XorZjliKXnmoQgbGludXgg5Lqk5o+b57C95ZCN44CMJTEwc+OAjeOAgiIKKworIzogbGlicGFydGVkL2ZzL2xpbnV4X3N3YXAvbGludXhfc3dhcC5jOjM1OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVW5yZWNvZ25pc2VkIHN3c3VzcCBsaW51eCBzd2FwIHNpZ25hdHVyZSAnJTlzJy4iCittc2dzdHIgIueEoeazleitmOWIpeeahCBsaW51eCDkuqTmj5vnsL3lkI3jgIwlMTBz44CN44CCIgorCisjOiBsaWJwYXJ0ZWQvZnMvbGludXhfc3dhcC9saW51eF9zd2FwLmM6NDM0Cittc2dpZCAiVG9vIG1hbnkgYmFkIHBhZ2VzLiIKK21zZ3N0ciAi6YGO5aSa55qE5LiN55W25YiG6aCB44CCIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2FkdmZzLmM6MTIxIGxpYnBhcnRlZC9mcy9oZnMvYWR2ZnNfcGx1cy5jOjEyMgorIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvYy5jOjQxNCBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NTA4CisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo1MzkgbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NjU4CisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo3NzIKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gY29udGFpbnMgZXJyb3JzLiIKK21zZ3N0ciAi5qqU5qGI57O757Wx5YyF5ZCr6Yyv6Kqk44CCIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2FkdmZzX3BsdXMuYzoyODcKK21zZ2lkICJCYWQgYmxvY2tzIGNvdWxkIG5vdCBiZSByZWFkLiIKK21zZ3N0ciAi54Sh5rOV6K6A5Y+W5LiN55W255qE5Y2A5aGK44CCIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2NhY2hlLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUcnlpbmcgdG8gcmVnaXN0ZXIgYW4gZXh0ZW50IHN0YXJ0aW5nIGF0IGJsb2NrIDB4JVgsIGJ1dCBhbm90aGVyIG9uZSBhbHJlYWR5ICIKKyJleGlzdHMgYXQgdGhpcyBwb3NpdGlvbi4gIFlvdSBzaG91bGQgY2hlY2sgdGhlIGZpbGUgc3lzdGVtISIKK21zZ3N0ciAiIgorIuWYl+ippuiou+WGiuS4gOWAi+i1t+Wni+aWvOWNgOWhiiAweCVYIOeahOaTtOWFheWNgO+8jOS9huaYr+atpOiZleW3suacieWFtuS7luWNgOWhiuWtmOWcqOOAguaCqOaHieipsuaqouafpeaqlCIKKyLmoYjns7vntbHvvIEiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvY2FjaGUuYzoyMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRyeWluZyB0byBtb3ZlIGFuIGV4dGVudCBmcm9tIGJsb2NrIE94JVggdG8gYmxvY2sgT3glWCwgYnV0IGFub3RoZXIgb25lICIKKyJhbHJlYWR5IGV4aXN0cyBhdCB0aGlzIHBvc2l0aW9uLiAgVGhpcyBzaG91bGQgbm90IGhhcHBlbiEiCittc2dzdHIgIiIKKyLlmJfoqablsIfkuIDlgIvmk7TlhYXljYDoh6rljYDloYogT3glWCDnp7voh7MgT3glWO+8jOS9huaYr+atpOiZleW3suacieWFtuS7luWNgOWhiuWtmOWcqOOAgumAmeeoruS6i+S4jeaHieipsiIKKyLnmbznlJ/vvIEiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZS5jOjE0MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgdXBkYXRlIHRoZSBleHRlbnQgY2FjaGUgZm9yIEhGUyBmaWxlIHdpdGggQ05JRCAlWC4iCittc2dzdHIgIueEoeazleabtOaWsOWFt+aciSBDTklEICVYIOeahCBIRlMg5qqU5qGI5pO05YWF5b+r5Y+W44CCIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGUuYzoxODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIHRvIHJlYWQgSEZTIGZpbGUgd2l0aCBDTklEICVYIGJlaGluZCBFT0YuIgorbXNnc3RyICLlmJfoqaboroDlj5bos4fmlpnmlrzlhbfmnIkgQ05JRCAlWCDnmoQgSEZTIOaqlOahiOe1kOWwvuS5i+W+jOOAgiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlLmM6MTkwIGxpYnBhcnRlZC9mcy9oZnMvZmlsZS5jOjIyMAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCBzZWN0b3IgJWxsaSBvZiBIRlMgZmlsZSB3aXRoIENOSUQgJVguIgorbXNnc3RyICLnhKHms5Xmib7liLDlhbfmnIkgQ05JRCAlMiRYIOeahCBIRlMg5qqU5qGI5LmL5Lit55qE56OB5Y2AICUxJGxsaeOAgiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlLmM6MjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyB0byB3cml0ZSBIRlMgZmlsZSB3aXRoIENOSUQgJVggYmVoaW5kIEVPRi4iCittc2dzdHIgIuWYl+ippuWvq+WFpeizh+aWmeaWvOWFt+aciSBDTklEICVYIOeahCBIRlMg5qqU5qGI57WQ5bC+5LmL5b6M44CCIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2ZpbGVfcGx1cy5jOjE1NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgdXBkYXRlIHRoZSBleHRlbnQgY2FjaGUgZm9yIEhGUysgZmlsZSB3aXRoIENOSUQgJVguIgorbXNnc3RyICLnhKHms5Xmm7TmlrDlhbfmnIkgQ05JRCAlWCDnmoQgSEZTKyDmqpTmoYjkuYvmk7TlhYXlv6vlj5bjgIIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvZmlsZV9wbHVzLmM6MjAyCisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyB0byByZWFkIEhGUysgZmlsZSB3aXRoIENOSUQgJVggYmVoaW5kIEVPRi4iCittc2dzdHIgIuWYl+ippuiugOWPluizh+aWmeaWvOWFt+aciSBDTklEICVYIOeahCBIRlMrIOaqlOahiOe1kOWwvuS5i+W+jOOAgiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlX3BsdXMuYzoyMTMgbGlicGFydGVkL2ZzL2hmcy9maWxlX3BsdXMuYzoyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgc2VjdG9yICVsbGkgb2YgSEZTKyBmaWxlIHdpdGggQ05JRCAlWC4iCittc2dzdHIgIueEoeazleaJvuWIsOWFt+aciSBDTklEICUyJFgg55qEIEhGUysg5qqU5qGI5LmL5Lit55qE56OB5Y2AICUxJGxsaeOAgiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9maWxlX3BsdXMuYzoyNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIHRvIHdyaXRlIEhGUysgZmlsZSB3aXRoIENOSUQgJVggYmVoaW5kIEVPRi4iCittc2dzdHIgIuWYl+ippuWvq+WFpeizh+aWmeaWvOWFt+aciSBDTklEICVYIOeahCBIRlMrIOaqlOahiOe1kOWwvuS5i+W+jOOAgiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzoyMzIKK21zZ2lkICJTb3JyeSwgSEZTIGNhbm5vdCBiZSByZXNpemVkIHRoYXQgd2F5IHlldC4iCittc2dzdHIgIuaKseatie+8jEhGUyDlsJrnhKHms5Xku6XmraTmlrnlvI/mlLnororlpKflsI/jgIIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MjYyIGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NjQxCittc2dpZCAiRGF0YSByZWxvY2F0aW9uIGhhcyBmYWlsZWQuIgorbXNnc3RyICLos4fmlpnph43mlrDlrprkvY3mmYLlpLHmlZfjgIIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MjgxCittc2dpZCAiRGF0YSByZWxvY2F0aW9uIGxlZnQgc29tZSBkYXRhIGluIHRoZSBlbmQgb2YgdGhlIHZvbHVtZS4iCittc2dzdHIgIuizh+aWmemHjeaWsOWumuS9jeaZgueVmeS4i+S4gOS6m+izh+aWmeaWvOWNt+WGiuacq+err+OAgiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzozMjAKK21zZ2lkICJ3cml0aW5nIEhGUyBNYXN0ZXIgRGlyZWN0b3J5IEJsb2NrIgorbXNnc3RyICLmraPlnKjlr6vlhaUgSEZTIOS4u+ebrumMhOWNgOWhiiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo0NjgKK21zZ2lkICJObyB2YWxpZCBIRlNbK1hdIHNpZ25hdHVyZSBoYXMgYmVlbiBmb3VuZCB3aGlsZSBvcGVuaW5nLiIKK21zZ3N0ciAi6ZaL5ZWf5pmC5rKS5pyJ5om+5Yiw5Lu75L2V5pyJ5pWI55qEIEhGU1srWF0g57C956ug44CCIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjQ3OAorIywgYy1mb3JtYXQKK21zZ2lkICJWZXJzaW9uICVkIG9mIEhGUysgaXNuJ3Qgc3VwcG9ydGVkLiIKK21zZ3N0ciAi5Lim5LiN5pSv5o+054mI5pysICVkIOeahCBIRlMr44CCIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICJWZXJzaW9uICVkIG9mIEhGU1ggaXNuJ3Qgc3VwcG9ydGVkLiIKK21zZ3N0ciAi5Lim5LiN5pSv5o+054mI5pysICVkIOeahCBIRlNY44CCIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjY3MgorbXNnaWQgIkRhdGEgcmVsb2NhdGlvbiBsZWZ0IHNvbWUgZGF0YSBhdCB0aGUgZW5kIG9mIHRoZSB2b2x1bWUuIgorbXNnc3RyICLos4fmlpnph43lrprkvY3lvozpgbrnlZnkuIDkupvos4fmlpnmlrzljbflhornmoTmnKvnq6/jgIIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6NzIwCittc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0aGUgYWxsb2NhdGlvbiBmaWxlLiIKK21zZ3N0ciAi5a+r5YWl5a6a5L2N5qqU5qGI5pmC55m855Sf6Yyv6Kqk44CCIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjczNQorbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdGhlIGNvbXBhdGliaWxpdHkgcGFydCBvZiB0aGUgYWxsb2NhdGlvbiBmaWxlLiIKK21zZ3N0ciAi5a+r5YWl5a6a5L2N5qqU5qGI55qE55u45a656YOo5Lu95pmC55m855Sf6Yyv6Kqk44CCIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjc1MAorbXNnaWQgIndyaXRpbmcgSEZTKyBWb2x1bWUgSGVhZGVyIgorbXNnc3RyICLmraPlnKjlr6vlhaUgSEZTKyDljbflhorooajpoK0iCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6ODUwCittc2dpZCAiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgbG9va2luZyBmb3IgdGhlIG1hbmRhdG9yeSBiYWQgYmxvY2tzIGZpbGUuIgorbXNnc3RyICLlsIvmib7lvLfliLbmgKfmkI3lo57ljYDloYrmqpTmoYjmmYLnmbznlJ/pjK/oqqTjgIIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6OTA0Cittc2dpZCAiIgorIkl0IHNlZW1zIHRoZXJlIGlzIGFuIGVycm9yIGluIHRoZSBIRlMgd3JhcHBlcjogdGhlIGJhZCBibG9ja3MgZmlsZSBkb2Vzbid0ICIKKyJjb250YWluIHRoZSBlbWJlZGRlZCBIRlMrIHZvbHVtZS4iCittc2dzdHIgIuWcqCBIRlMrIOi9ieWMheeoi+W8j+S4reS8vOS5juaciemMr+iqpO+8muaQjeWjnueahOWNgOWhiuaqlOahiOS4puacquWMheWQq+WFp+W1jOeahCBIRlMrIOWNt+WGiuOAgiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo5NDAKK21zZ2lkICJTb3JyeSwgSEZTKyBjYW5ub3QgYmUgcmVzaXplZCB0aGF0IHdheSB5ZXQuIgorbXNnc3RyICLmirHmrYnvvIxIRlMrIOWwmueEoeazleS7peatpOaWueW8j+aUueiuiuWkp+Wwj+OAgiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo5NzUKK21zZ2lkICJzaHJpbmtpbmcgZW1iZWRkZWQgSEZTKyB2b2x1bWUiCittc2dzdHIgIuato+WcqOe4ruWwj+WFp+W1jOeahCBIRlMrIOWNt+WGiiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo5OTEKK21zZ2lkICJSZXNpemluZyB0aGUgSEZTKyB2b2x1bWUgaGFzIGZhaWxlZC4iCittc2dzdHIgIuaUueiuiiBIRlMrIOWNt+WGiuWkp+Wwj+aZguWkseaVl+OAgiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzo5OTgKK21zZ2lkICJzaHJpbmtpbmcgSEZTIHdyYXBwZXIiCittc2dzdHIgIuato+WcqOe4ruWwjyBIRlMg6L2J5YyF56iL5byPIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2hmcy5jOjEwMDcKK21zZ2lkICJVcGRhdGluZyB0aGUgSEZTIHdyYXBwZXIgaGFzIGZhaWxlZC4iCittc2dzdHIgIuabtOaWsCBIRlMrIOi9ieWMheeoi+W8j+aZguWkseaVl+OAgiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9oZnMuYzoxMTA5IGxpYnBhcnRlZC9mcy9oZnMvaGZzLmM6MTE5NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhpcyBpcyBub3QgYSByZWFsICVzIGNoZWNrLiAgVGhpcyBpcyBnb2luZyB0byBleHRyYWN0IHNwZWNpYWwgbG93IGxldmVsICIKKyJmaWxlcyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLiIKK21zZ3N0ciAiIgorIumAmeS4pumdnuaYr+S4gOasoeecn+ato+eahCAlcyDmqqLmn6XjgILogIzmmK/ngrrkuobopoHliIbpm6Llh7rnibnliKXnmoTkvY7pmo7mqpTmoYjvvIzku6XpgZTliLDpmaTpjK/nmoTnm64iCisi55qE44CCIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzoxNTUKK21zZ2lkICJCYWQgYmxvY2sgbGlzdCBoZWFkZXIgY2hlY2tzdW0uIgorbXNnc3RyICLkuI3oia/nmoTljYDloYrliJfooajpoK3nuL3lkozmqqLmn6XlgLzjgIIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjE2OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSW52YWxpZCBzaXplIG9mIGEgdHJhbnNhY3Rpb24gYmxvY2sgd2hpbGUgcmVwbGF5aW5nIHRoZSBqb3VybmFsICglaSBieXRlcykuIgorbXNnc3RyICLph43mkq3ml6XoqozmmYLnhKHmlYjnmoTnlbDli5XljYDloYrlpKflsI8gKCVpIOS9jeWFg+e1hCnjgIIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjI2MAorbXNnaWQgIiIKKyJKb3VybmFsIHN0b3JlZCBvdXRzaWRlIG9mIHRoZSB2b2x1bWUgYXJlIG5vdCBzdXBwb3J0ZWQuICBUcnkgdG8gZGVzYWN0aXZhdGUgIgorInRoZSBqb3VybmFsIGFuZCBydW4gUGFydGVkIGFnYWluLiIKK21zZ3N0ciAi5LiN5pSv5o+05pel6KqM5byPIEhGUysg5Y235YaK77yM5oKo5oeJ6Kmy5Zyo5YW25LiK5ZiX6Kmm5Lu75L2V5L2c5qWt5LmL5YmN6Zec6ZaJ5pel6KqM5Yqf6IO944CCIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzoyNzEKK21zZ2lkICJKb3VybmFsIG9mZnNldCBvciBzaXplIGlzIG5vdCBtdWx0aXBsZSBvZiB0aGUgc2VjdG9yIHNpemUuIgorbXNnc3RyICLml6XoqozlgY/np7vph4/miJblpKflsI/kuI3mmK/no4HljYDlpKflsI/nmoTmlbTmlbjlgI3jgIIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjI5MgorbXNnaWQgIkluY29ycmVjdCBtYWdpYyB2YWx1ZXMgaW4gdGhlIGpvdXJuYWwgaGVhZGVyLiIKK21zZ3N0ciAi5Zyo5pel6KqM6KGo6aCt5Lit5pyJ5LiN5q2j56K655qE54m555Ww5YC844CCIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozMDIKK21zZ2lkICJKb3VybmFsIHNpemUgbWlzbWF0Y2ggYmV0d2VlbiBqb3VybmFsIGluZm8gYmxvY2sgYW5kIGpvdXJuYWwgaGVhZGVyLiIKK21zZ3N0ciAi5Zyo5pel6KqM6LOH6KiK5Y2A5aGK6IiH5pel6KqM6KGo6aCt5LmL6ZaT55qE5aSn5bCP5LiN55u456ym5ZCI44CCIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozMTQKK21zZ2lkICJTb21lIGhlYWRlciBmaWVsZHMgYXJlIG5vdCBtdWx0aXBsZSBvZiB0aGUgc2VjdG9yIHNpemUuIgorbXNnc3RyICLmn5DkupvooajpoK3mrITkvY3kuI3mmK/no4HljYDlpKflsI/nmoTmlbTmlbjlgI3jgIIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvam91cm5hbC5jOjMyMworbXNnaWQgIiIKKyJUaGUgc2VjdG9yIHNpemUgc3RvcmVkIGluIHRoZSBqb3VybmFsIGlzIG5vdCA1MTIgYnl0ZXMuICBQYXJ0ZWQgb25seSAiCisic3VwcG9ydHMgNTEyIGJ5dGVzIGxlbmd0aCBzZWN0b3JzLiIKK21zZ3N0ciAiIgorIuWEsuWtmOaWvOaXpeiqjOeahOejgeWNgOWkp+Wwj+S4jeaYryA1MTIg5L2N5YWD57WE44CCUGFydGVkIOWPquaUr+aPtOmVt+W6pueCuiA1MTIg5L2N5YWD57WE55qE56OB5Y2A44CCIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozMzUKK21zZ2lkICJCYWQgam91cm5hbCBjaGVja3N1bS4iCittc2dzdHIgIuS4jeiJr+eahOaXpeiqjOe4veWSjOaqouafpeWAvOOAgiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9qb3VybmFsLmM6MzUzCittc2dpZCAiIgorIlRoZSBqb3VybmFsIGlzIG5vdCBlbXB0eS4gIFBhcnRlZCBtdXN0IHJlcGxheSB0aGUgdHJhbnNhY3Rpb25zIGJlZm9yZSAiCisib3BlbmluZyB0aGUgZmlsZSBzeXN0ZW0uICBUaGlzIHdpbGwgbW9kaWZ5IHRoZSBmaWxlIHN5c3RlbS4iCittc2dzdHIgIiIKKyLml6XoqozkuKbpnZ7ngrrnqbrjgIJQYXJ0ZWQg5b+F6aCI5Zyo6ZaL5ZWf5qqU5qGI57O757Wx5LmL5YmN6YeN5paw5pKt5pS+55Ww5YuV44CC6YCZ5bCH5pyD5L+u5pS55qqU5qGI57O757Wx44CCIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL2pvdXJuYWwuYzozODEKK21zZ2lkICIiCisiVGhlIHZvbHVtZSBoZWFkZXIgb3IgdGhlIG1hc3RlciBkaXJlY3RvcnkgYmxvY2sgaGFzIGNoYW5nZWQgd2hpbGUgcmVwbGF5aW5nICIKKyJ0aGUgam91cm5hbC4gIFlvdSBzaG91bGQgcmVzdGFydCBQYXJ0ZWQuIgorbXNnc3RyICIiCisi55W26YeN5paw5pKt5pS+5pel6KqM5pmC77yM5Y235YaK6KGo6aCt5oiW5piv5Li755uu6YyE5Y2A5aGK5bey57aT5pS56K6K44CC5oKo5oeJ6Kmy6YeN5paw5ZWf5YuVIFBhcnRlZOOAgiIKKworIzogbGlicGFydGVkL2ZzL2hmcy9wcm9iZS5jOjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQYXJ0ZWQgY2FuJ3QgdXNlIEhGUyBmaWxlIHN5c3RlbXMgb24gZGlza3Mgd2l0aCBhIHNlY3RvciBzaXplIG5vdCBlcXVhbCB0byAlIgorImQgYnl0ZXMuIgorbXNnc3RyICJQYXJ0ZWQg54Sh5rOV5Zyo5YW256OB5Y2A5aSn5bCP5LiN562J5pa8ICVkIOS9jeWFg+e1hOeahOejgeein+S4iuS9v+eUqCBIRlMg5qqU5qGI57O757Wx44CCIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6MTUxIGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjE1NQorbXNnaWQgIkFuIGV4dGVudCBoYXMgbm90IGJlZW4gcmVsb2NhdGVkLiIKK21zZ3N0ciAi5bCa5pyq6YeN5paw5a6a5L2N5LiA5YCL5pO05YWF5YiG5Ymy5Y2A44CCIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6MjUxIGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjMwNworbXNnaWQgIiIKKyJBIHJlZmVyZW5jZSB0byBhbiBleHRlbnQgY29tZXMgZnJvbSBhIHBsYWNlIGl0IHNob3VsZCBub3QuICBZb3Ugc2hvdWxkIGNoZWNrICIKKyJ0aGUgZmlsZSBzeXN0ZW0hIgorbXNnc3RyICLlsI3mlrzmk7TlhYXliIblibLljYDnmoTlj4Pnhafkvoboh6rkuIDlgIvkuI3mh4noqbLnmoTlnLDmlrnjgILmgqjmh4noqbLmqqLmn6XmqpTmoYjns7vntbHvvIEiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzozODEKK21zZ2lkICJUaGlzIEhGUyB2b2x1bWUgaGFzIG5vIGNhdGFsb2cgZmlsZS4gIFRoaXMgaXMgdmVyeSB1bnVzdWFsISIKK21zZ3N0ciAi6YCZ5YCLIEhGUyDljbflhormspLmnInpoZ7nm67mqpTmoYjjgILpgJnmmK/lvojkuI3lsIvluLjnmoTvvIEiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzo0NzUKK21zZ2lkICJUaGlzIEhGUyB2b2x1bWUgaGFzIG5vIGV4dGVudHMgb3ZlcmZsb3cgZmlsZS4gIFRoaXMgaXMgcXVpdGUgdW51c3VhbCEiCittc2dzdHIgIumAmeWAiyBIRlMg5Y235YaK5rKS5pyJ5pO05YWF5Y2A5rqi5L2N5qqU5qGI44CC6YCZ5piv55u455W25LiN5bCL5bi455qE77yBIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jLmM6NTE3IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2NfcGx1cy5jOjY2OAorbXNnaWQgIiIKKyJUaGUgZXh0ZW50cyBvdmVyZmxvdyBmaWxlIHNob3VsZCBub3QgY29udGFpbiBpdHMgb3duIGV4dGVudHMhICBZb3Ugc2hvdWxkICIKKyJjaGVjayB0aGUgZmlsZSBzeXN0ZW0uIgorbXNnc3RyICLmk7TlhYXljYDmuqLkvY3mqpTmoYjkuI3mh4noqbLljIXlkKvlroPoh6rlt7HnmoTmk7TlhYXpg6jku73vvIHmgqjmh4noqbLmqqLmn6XmqpTmoYjns7vntbHjgIIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzo1NzQgbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6ODQ3Cittc2dpZCAiQ291bGQgbm90IGNhY2hlIHRoZSBmaWxlIHN5c3RlbSBpbiBtZW1vcnkuIgorbXNnc3RyICLnhKHms5Xlv6vlj5boqJjmhrbpq5TkuK3nmoTmqpTmoYjns7vntbHjgIIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzo2MzUgbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6OTA4Cittc2dpZCAiQmFkIGJsb2NrcyBsaXN0IGNvdWxkIG5vdCBiZSBsb2FkZWQuIgorbXNnc3RyICLkuI3nlbbnmoTljYDloYrliJfooajnhKHms5XooqvovInlhaXjgIIiCisKKyM6IGxpYnBhcnRlZC9mcy9oZnMvcmVsb2MuYzo2NDkgbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6OTI0Cittc2dpZCAiQW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIGV4dGVudCByZWxvY2F0aW9uLiIKK21zZ3N0ciAi5pO05YWF5YiG5Ymy5Y2A6YeN5paw5a6a5L2N5pyf6ZaT55m855Sf6Yyv6Kqk44CCIgorCisjOiBsaWJwYXJ0ZWQvZnMvaGZzL3JlbG9jX3BsdXMuYzo0OTUKK21zZ2lkICJUaGlzIEhGUysgdm9sdW1lIGhhcyBubyBjYXRhbG9nIGZpbGUuICBUaGlzIGlzIHZlcnkgdW51c3VhbCEiCittc2dzdHIgIumAmeWAiyBIRlMrIOWNt+WGiuaykuaciemhnuebruaqlOahiOOAgumAmeaYr+W+iOS4jeWwi+W4uOeahO+8gSIKKworIzogbGlicGFydGVkL2ZzL2hmcy9yZWxvY19wbHVzLmM6NjE5Cittc2dpZCAiVGhpcyBIRlMrIHZvbHVtZSBoYXMgbm8gZXh0ZW50cyBvdmVyZmxvdyBmaWxlLiAgVGhpcyBpcyBxdWl0ZSB1bnVzdWFsISIKK21zZ3N0ciAi6YCZ5YCLIEhGUysg5Y235YaK5rKS5pyJ5pO05YWF5Y2A5rqi5L2N5qqU5qGI44CC6YCZ5piv55u455W25LiN5bCL5bi455qE77yBIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6OTQKK21zZ2lkICJkaXNwbGF5cyB0aGlzIGhlbHAgbWVzc2FnZSIKK21zZ3N0ciAi6aGv56S65q2k5rGC5Yqp6LOH6KiKIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6OTUKK21zZ2lkICJsaXN0cyBwYXJ0aXRpb24gbGF5b3V0IG9uIGFsbCBibG9jayBkZXZpY2VzIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo5NgorbXNnaWQgImRpc3BsYXlzIG1hY2hpbmUgcGFyc2VhYmxlIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6OTcKK21zZ2lkICJuZXZlciBwcm9tcHRzIGZvciB1c2VyIGludGVydmVudGlvbiIKK21zZ3N0ciAi5b6e5LiN5o+Q56S65L2/55So6ICF5LuL5YWlIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6OTgKK21zZ2lkICJkaXNwbGF5cyB0aGUgdmVyc2lvbiIKK21zZ3N0ciAi6aGv56S654mI5pysIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTExCittc2dpZCAiIgorIk5VTUJFUiBpcyB0aGUgcGFydGl0aW9uIG51bWJlciB1c2VkIGJ5IExpbnV4LiAgT24gTVMtRE9TIGRpc2sgbGFiZWxzLCB0aGUgIgorInByaW1hcnkgcGFydGl0aW9ucyBudW1iZXIgZnJvbSAxIHRvIDQsIGxvZ2ljYWwgcGFydGl0aW9ucyBmcm9tIDUgb253YXJkcy5cbiIKK21zZ3N0ciAiIgorIk5VTUJFUiDmmK8gTGludXgg5L2/55So55qE5YiG5Ymy5Y2A57eo6Jmf44CC5ZyoIE1TLURPUyDno4Hnop/mqJnnsaTkuK3vvIzkuLvliIblibLljYDnt6jomZ/ngrogMSAtICIKKyI077yM6YKP6Lyv5YiG5Ymy5Y2A5b6eIDUg6ZaL5aeL44CCXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMTQKK21zZ2lkICJMQUJFTC1UWVBFIGlzIG9uZSBvZjogIgorbXNnc3RyICJMQUJFTC1UWVBFIOaYr+S7peS4i+S7u+aEj+S4gOmghe+8miIKKworIzogcGFydGVkL3BhcnRlZC5jOjExNQorbXNnaWQgIkZMQUcgaXMgb25lIG9mOiAiCittc2dzdHIgIkZMQUcg5piv5Lul5LiL5Lu75oSP5LiA6aCF77yaIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTE2Cittc2dpZCAiVU5JVCBpcyBvbmUgb2Y6ICIKK21zZ3N0ciAiVU5JVCDmmK/ku6XkuIvku7vmhI/kuIDpoIXvvJoiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMTcKK21zZ2lkICJQQVJULVRZUEUgaXMgb25lIG9mOiBwcmltYXJ5LCBsb2dpY2FsLCBleHRlbmRlZFxuIgorbXNnc3RyICJQQVJULVRZUEUg5piv5Li75YiG5Ymy5Y2A44CB6YKP6Lyv5YiG5Ymy5Y2A44CB5pO05YWF5YiG5Ymy5Y2A5LmL5LiAXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMTkKK21zZ2lkICJGUy1UWVBFIGlzIG9uZSBvZjogIgorbXNnc3RyICJGUy1UWVBFIOaYr+S7peS4i+S7u+aEj+S4gOmghe+8miIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMAorbXNnaWQgIiIKKyJTVEFSVCBhbmQgRU5EIGFyZSBkaXNrIGxvY2F0aW9ucywgc3VjaCBhcyA0R0Igb3IgMTAlLiAgTmVnYXRpdmUgdmFsdWVzIGNvdW50ICIKKyJmcm9tIHRoZSBlbmQgb2YgdGhlIGRpc2suICBGb3IgZXhhbXBsZSwgLTFzIHNwZWNpZmllcyBleGFjdGx5IHRoZSBsYXN0ICIKKyJzZWN0b3IuXG4iCittc2dzdHIgIiIKKyJTVEFSVCDlkowgRU5EIOaYr+ejgeein+eUqOmHj++8jOWDj+aYryA0R0Ig5oiWIDEwJeOAguiyoOaVuOWAvOWJh+aYr+W+nuejgeein+acq+err+i1t+eul+OAguS+i+Wmgu+8jC0iCisiMXMg5oyH5a6a5pyA5b6M5LiA5YCL56OB5Y2A44CCXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjMKK21zZ2lkICJTVEFURSBpcyBvbmUgb2Y6IG9uLCBvZmZcbiIKK21zZ3N0ciAiU1RBVEUg54K677ya6ZaL44CB6ZecXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjQKK21zZ2lkICJERVZJQ0UgaXMgdXN1YWxseSAvZGV2L2hkYSBvciAvZGV2L3NkYVxuIgorbXNnc3RyICJERVZJQ0Ug6YCa5bi454K6IC9kZXYvaGRhIOaIliAvZGV2L3NkYVxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTI1Cittc2dpZCAiTkFNRSBpcyBhbnkgd29yZCB5b3Ugd2FudFxuIgorbXNnc3RyICJOQU1FIOaYr+aCqOmcgOimgeeahOS7u+S9leWWruipnlxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTI2Cittc2dpZCAiVGhlIHBhcnRpdGlvbiBtdXN0IGhhdmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgRlMtVFlQRXM6ICIKK21zZ3N0ciAi5YiG5Ymy5Y2A5b+F6aCI5YW35YKZ5Lul5LiLIEZTLVRZUEVzIOS5i+S4gO+8miIKKworIzogcGFydGVkL3BhcnRlZC5jOjEzMAorIywgZnV6enkKK21zZ2lkICIiCisiQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy5cbiIKKyJUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZSwgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuXG4iCisiXG4iCisiVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4iCisiYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiIKKyJNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4iCisiR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIueJiOasiuaJgOaciSAoQykgMTk5OCAtIDIwMDYg6Ieq55Sx6Luf6auU5Z+66YeR5pyD44CCXG4iCisi5pys56iL5byP54K66Ieq55Sx6Luf6auU77yM5oyJIEdOVSDpgJrnlKjlhazlhbHoqLHlj6/orYnnmbzooYzjgIJcbiIKKyJcbiIKKyLnmbzooYzmnKznqIvlvI/mmK/luIzmnJvlroPog73lpKDmnInnlKjvvIzkvYbmspLmnInku7vkvZXmk5Tkv53vvJvnlJroh7PkuI3ljIXmi6zpmrHlkKvnmoTpganpirflkozpganlkIjnibnlrprnlKgiCisi6YCU55qE5L+d6K2J44CC6Kmz5oOF6KuL5Y+D6KaLIEdOVSDpgJrnlKjlhazlhbHoqLHlj6/orYnjgIJcbiIKKyJcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjE3NgorIywgYy1mb3JtYXQKK21zZ2lkICIlMC5mJSVcdCh0aW1lIGxlZnQgJS4yZDolLjJkKSIKK21zZ3N0ciAiJTAuZiUlXHQo5Ymp6aSY5pmC6ZaTICUuMmQ6JS4yZCkiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxOTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQYXJ0aXRpb24gJXMgaXMgYmVpbmcgdXNlZC4gWW91IG11c3QgdW5tb3VudCBpdCBiZWZvcmUgeW91IG1vZGlmeSBpdCB3aXRoICIKKyJQYXJ0ZWQuIgorbXNnc3RyICLmraPlnKjkvb/nlKjliIblibLljYAgJXPjgILmgqjlv4XpoIjlnKjku6UgUGFydGVkIOabtOaUueWug+S5i+WJjeWFiOWwh+Wug+WNuOi8ieOAgiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICJQYXJ0aXRpb24ocykgb24gJXMgYXJlIGJlaW5nIHVzZWQuIgorbXNnc3RyICLmraPlnKjkvb/nlKggJXMg5LiK55qE5YiG5Ymy5Y2A44CCIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIzCittc2dpZCAiIgorIlRoZSBleGlzdGluZyBmaWxlIHN5c3RlbSB3aWxsIGJlIGRlc3Ryb3llZCBhbmQgYWxsIGRhdGEgb24gdGhlIHBhcnRpdGlvbiAiCisid2lsbCBiZSBsb3N0LiBEbyB5b3Ugd2FudCB0byBjb250aW51ZT8iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIzNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGV4aXN0aW5nIGRpc2sgbGFiZWwgb24gJXMgd2lsbCBiZSBkZXN0cm95ZWQgYW5kIGFsbCBkYXRhIG9uIHRoaXMgZGlzayAiCisid2lsbCBiZSBsb3N0LiBEbyB5b3Ugd2FudCB0byBjb250aW51ZT8iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjQ1OCBwYXJ0ZWQvcGFydGVkLmM6NjUyIHBhcnRlZC9wYXJ0ZWQuYzoxMDQ0CisjOiBwYXJ0ZWQvcGFydGVkLmM6MTEyOCBwYXJ0ZWQvcGFydGVkLmM6MTc3MSBwYXJ0ZWQvcGFydGVkLmM6MTg1MgorIzogcGFydGVkL3BhcnRlZC5jOjE5MDAKK21zZ2lkICJQYXJ0aXRpb24gbnVtYmVyPyIKK21zZ3N0ciAi5YiG5Ymy5Y2A57eo6Jmf77yfIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NTAwCittc2dpZCAiU291cmNlIGRldmljZT8iCittc2dzdHIgIuS+hua6kOioreWCme+8nyIKKworIzogcGFydGVkL3BhcnRlZC5jOjUwNAorbXNnaWQgIlNvdXJjZSBwYXJ0aXRpb24gbnVtYmVyPyIKK21zZ3N0ciAi5L6G5rqQ5YiG5Ymy5Y2A57eo6Jmf77yfIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NTA5Cittc2dpZCAiQ2FuJ3QgY29weSBhbiBleHRlbmRlZCBwYXJ0aXRpb24uIgorbXNnc3RyICLnhKHms5XopIfoo73mk7TlhYXliIblibLljYDjgIIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo1MTUKK21zZ2lkICJEZXN0aW5hdGlvbiBwYXJ0aXRpb24gbnVtYmVyPyIKK21zZ3N0ciAi55uu5qiZ5YiG5Ymy5Y2A57eo6Jmf77yfIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NjE1Cittc2dpZCAiTmV3IGRpc2sgbGFiZWwgdHlwZT8iCittc2dzdHIgIuaWsOeahOejgeein+aomeexpOmhnuWei++8nyIKKworIzogcGFydGVkL3BhcnRlZC5jOjY1NgorbXNnaWQgIkZpbGUgc3lzdGVtPyIKK21zZ3N0ciAi5qqU5qGI57O757Wx77yfIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6NzA3IHBhcnRlZC9wYXJ0ZWQuYzo4NzgKK21zZ2lkICJQYXJ0aXRpb24gdHlwZT8iCittc2dzdHIgIuWIhuWJsuWNgOmhnuWei++8nyIKKworIzogcGFydGVkL3BhcnRlZC5jOjcxNCBwYXJ0ZWQvcGFydGVkLmM6ODg1IHBhcnRlZC9wYXJ0ZWQuYzoxMTMxCittc2dpZCAiUGFydGl0aW9uIG5hbWU/IgorbXNnc3RyICLliIblibLljYDlkI3nqLHvvJ8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo3MjIgcGFydGVkL3BhcnRlZC5jOjg5NQorbXNnaWQgIkZpbGUgc3lzdGVtIHR5cGU/IgorbXNnc3RyICLmqpTmoYjns7vntbHpoZ7lnovvvJ8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzo3MjkgcGFydGVkL3BhcnRlZC5jOjg5NyBwYXJ0ZWQvcGFydGVkLmM6MTA1OQorIzogcGFydGVkL3BhcnRlZC5jOjE3MjUgcGFydGVkL3BhcnRlZC5jOjE3ODAKK21zZ2lkICJTdGFydD8iCittc2dzdHIgIui1t+Wni+m7nu+8nyIKKworIzogcGFydGVkL3BhcnRlZC5jOjczMSBwYXJ0ZWQvcGFydGVkLmM6OTAwIHBhcnRlZC9wYXJ0ZWQuYzoxMDYyCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTcyNyBwYXJ0ZWQvcGFydGVkLmM6MTc4MgorbXNnaWQgIkVuZD8iCittc2dzdHIgIue1kOadn+m7nu+8nyIKKworIzogcGFydGVkL3BhcnRlZC5jOjc2OSBwYXJ0ZWQvcGFydGVkLmM6OTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgcmVxdWVzdGVkIGEgcGFydGl0aW9uIGZyb20gJXMgdG8gJXMuXG4iCisiVGhlIGNsb3Nlc3QgbG9jYXRpb24gd2UgY2FuIG1hbmFnZSBpcyAlcyB0byAlcy4gIElzIHRoaXMgc3RpbGwgYWNjZXB0YWJsZSB0byAiCisieW91PyIKK21zZ3N0ciAiIgorIuaCqOimgeaxguWwh+WIhuWJsuWNgOW+niAlcyDnp7vli5XliLAgJXPjgIJcbiIKKyLmiJHlgJHlj6/ku6XnrqHnkIbnmoTmnIDmjqXov5HliIblibLljYDmmK/lvp4gJXMg5YiwICVz44CC6YCZ5qij5oKo5Y+v5Lul5o6l5Y+X5ZeO77yfIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6ODkwCittc2dpZCAiQW4gZXh0ZW5kZWQgcGFydGl0aW9uIGNhbm5vdCBob2xkIGEgZmlsZSBzeXN0ZW0uICBEaWQgeW91IHdhbnQgbWtwYXJ0PyIKK21zZ3N0ciAi5pO05YWF5YiG5Ymy5Y2A5LiN6IO95ZCr5pyJ5qqU5qGI57O757Wx44CC5oKo5piv6KaB55SoIG1rcGFydCDlkKfvvJ8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMDUwCittc2dpZCAiQ2FuJ3QgbW92ZSBhbiBleHRlbmRlZCBwYXJ0aXRpb24uIgorbXNnc3RyICLnhKHms5Xnp7vli5Xmk7TlhYXliIblibLljYDjgIIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMDc5Cittc2dpZCAiQ2FuJ3QgbW92ZSBhIHBhcnRpdGlvbiBvbnRvIGl0c2VsZi4gIFRyeSB1c2luZyByZXNpemUsIHBlcmhhcHM/IgorbXNnc3RyICLnhKHms5XlsIfliIblibLljYDnp7vli5XliLDlroPoh6rouqvjgILkuZ/oqLHoqaboqabmlLnororlpKflsI/vvJ8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIk1pbm9yOiAlZFxuIgorbXNnc3RyICLnt6jomZ/vvJolZFxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIyOAorIywgYy1mb3JtYXQKK21zZ2lkICJGbGFnczogJXNcbiIKK21zZ3N0ciAi5peX5qiZ77yaJXNcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEyMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlsZSBTeXN0ZW06ICVzXG4iCittc2dzdHIgIuaqlOahiOezu+e1se+8miVzXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjMwCittc2dpZCAiU2l6ZTogICAgICAgICAiCittc2dzdHIgIuWkp+Wwj++8miAgICAgICAgIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTIzNQorbXNnaWQgIk1pbmltdW0gc2l6ZTogIgorbXNnc3RyICLmnIDlsI/lsLrlr7jvvJoiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxMjM4Cittc2dpZCAiTWF4aW11bSBzaXplOiAiCittc2dzdHIgIuacgOWkp+WwuuWvuO+8miIKKworIzogcGFydGVkL3BhcnRlZC5jOjEzNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTW9kZWw6ICVzICglcylcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTM2NAorIywgYy1mb3JtYXQKK21zZ2lkICJEaXNrICVzOiAlc1xuIgorbXNnc3RyICLno4Hnop8gJXPvvJolc1xuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTM2NQorIywgYy1mb3JtYXQKK21zZ2lkICJTZWN0b3Igc2l6ZSAobG9naWNhbC9waHlzaWNhbCk6ICVsbGRCLyVsbGRCXG4iCittc2dzdHIgIuejgeWNgOWkp+WwjyAo6YKP6LyvL+eJqeeQhinvvJolbGxkQi8lbGxkQlxuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTM4MworIywgYy1mb3JtYXQKK21zZ2lkICJCSU9TIGN5bGluZGVyLGhlYWQsc2VjdG9yIGdlb21ldHJ5OiAlZCwlZCwlZC4gIEVhY2ggY3lsaW5kZXIgaXMgJXMuXG4iCittc2dzdHIgIkJJT1Mg55qE56OB5p+x44CB56OB6aCt44CB56OB5Y2A5bm+5L2V57WQ5qeL77yaJWQsJWQsJWTjgILmr4/lnIjno4Hmn7HmmK8gJXPjgIJcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjEzOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGFydGl0aW9uIFRhYmxlOiAlc1xuIgorbXNnc3RyICLliIblibLljYDvvJolc1xuIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQwNiBwYXJ0ZWQvcGFydGVkLmM6MTQwOQorbXNnaWQgIk51bWJlciIKK21zZ3N0ciAi57eo6JmfIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQwNiBwYXJ0ZWQvcGFydGVkLmM6MTQwOQorbXNnaWQgIlN0YXJ0IgorbXNnc3RyICLotbflp4vpu54iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDA3IHBhcnRlZC9wYXJ0ZWQuYzoxNDEwCittc2dpZCAiRW5kIgorbXNnc3RyICLntZDmnZ/pu54iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxNDEwCittc2dpZCAiU2l6ZSIKK21zZ3N0ciAi5aSn5bCPIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQxNAorbXNnaWQgIlR5cGUiCittc2dzdHIgIumhnuWeiyIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MTYKK21zZ2lkICJGaWxlIHN5c3RlbSIKK21zZ3N0ciAi5qqU5qGI57O757WxIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQxOQorbXNnaWQgIk5hbWUiCittc2dzdHIgIuWQjeeosSIKKworIzogcGFydGVkL3BhcnRlZC5jOjE0MjEKK21zZ2lkICJGbGFncyIKK21zZ3N0ciAi5peX5qiZIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTQ3NworbXNnaWQgIkZyZWUgU3BhY2UiCittc2dzdHIgIuWPr+eUqOepuumWkyIKKworIzogcGFydGVkL3BhcnRlZC5jOjE2MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkEgJXMgJXMgcGFydGl0aW9uIHdhcyBmb3VuZCBhdCAlcyAtPiAlcy4gIERvIHlvdSB3YW50IHRvIGFkZCBpdCB0byB0aGUgIgorInBhcnRpdGlvbiB0YWJsZT8iCittc2dzdHIgIiIKKyLlnKggJTMkcyAtPiAlNCRzIOiZleaJvuWIsOS4gOWAiyAlMSRzICUyJHMg5YiG5Ymy5Y2A44CC5oKo5biM5pyb5bCH5YW25re75Yqg5Yiw5YiG5Ymy6KGo5Lit5ZeO77yfIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MTY2MworbXNnaWQgInNlYXJjaGluZyBmb3IgZmlsZSBzeXN0ZW1zIgorbXNnc3RyICLmraPlnKjmkJzlsIvmqpTmoYjns7vntbEiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxODc3Cittc2dpZCAiTmV3IGRldmljZT8iCittc2dzdHIgIuaWsOijnee9ru+8nyIKKworIzogcGFydGVkL3BhcnRlZC5jOjE5MDIKK21zZ2lkICJGbGFnIHRvIEludmVydD8iCittc2dzdHIgIuimgeWPjeebuOeahOaXl+aome+8nyIKKworIzogcGFydGVkL3BhcnRlZC5jOjE5MDcKK21zZ2lkICJOZXcgc3RhdGU/IgorbXNnc3RyICLmlrDni4DmhYvvvJ8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoxOTQ0Cittc2dpZCAiVW5pdD8iCittc2dzdHIgIuWWruS9je+8nyIKKworIzogcGFydGVkL3BhcnRlZC5jOjIwOTMKK21zZ2lkICJjaGVjayIKK21zZ3N0ciAi5qqi5p+lIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjA5NgorbXNnaWQgIiIKKyJjaGVjayBOVU1CRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIGEgc2ltcGxlIGNoZWNrIG9uIHRoZSBmaWxlIHN5c3RlbSIKK21zZ3N0ciAiY2hlY2sg57eo6JmfICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOWwjeaqlOahiOezu+e1semAsuihjOewoeWWrueahOaqouafpSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMDIKK21zZ2lkICJjcCIKK21zZ3N0ciAiY3AiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTA1Cittc2dpZCAiIgorImNwIFtGUk9NLURFVklDRV0gRlJPTS1OVU1CRVIgVE8tTlVNQkVSICAgY29weSBmaWxlIHN5c3RlbSB0byBhbm90aGVyICIKKyJwYXJ0aXRpb24iCittc2dzdHIgImNwIFvkvobmupDoo53nva5dIOS+hua6kOe3qOiZnyDnm67mqJnnt6jomZ8gICAgICAgICAg5bCH5qqU5qGI57O757Wx6KSH6KO95Yiw5Y+m5LiA5YCL5YiG5Ymy5Y2AIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjExMQorbXNnaWQgImhlbHAiCittc2dzdHIgImhlbHAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTE0CisjLCBmdXp6eQorbXNnaWQgIiIKKyJoZWxwIFtDT01NQU5EXSAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50IGdlbmVyYWwgaGVscCwgb3IgaGVscCBvbiAiCisiQ09NTUFORCIKK21zZ3N0ciAiIgorImhlbHAgW+WRveS7pF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICDljbDlh7rkuIDoiKzmsYLliqnos4foqIrvvIzmiJbpl5zmlrzjgIzlkb3ku6TjgI3nmoTos4ciCisi6KiKIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjEyMAorbXNnaWQgIm1rbGFiZWwiCittc2dzdHIgIm1rbGFiZWwiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTIwCisjLCBmdXp6eQorbXNnaWQgIm1rdGFibGUiCittc2dzdHIgIm1rbGFiZWwiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTIzCisjLCBmdXp6eQorbXNnaWQgIiIKKyJta2xhYmVsLG1rdGFibGUgTEFCRUwtVFlQRSAgICAgICAgICAgICAgIGNyZWF0ZSBhIG5ldyBkaXNrbGFiZWwgKHBhcnRpdGlvbiAiCisidGFibGUpIgorbXNnc3RyICJta2xhYmVsIOaomeexpOmhnuWeiyAgICAgICAgICAgICAgICAgICAgICAgICDlu7rnq4vmlrDnmoTno4Hnop/mqJnnsaQgKOWIhuWJsuWNgOihqCkiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTI5Cittc2dpZCAibWtmcyIKK21zZ3N0ciAibWtmcyIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMzIKK21zZ2lkICIiCisibWtmcyBOVU1CRVIgRlMtVFlQRSAgICAgICAgICAgICAgICAgICAgICBtYWtlIGEgRlMtVFlQRSBmaWxlIHN5c3RlbSBvbiAiCisicGFydGl0aXRvbiBOVU1CRVIiCittc2dzdHIgIiIKKyJta2ZzIOe3qOiZnyDmqpTmoYjns7vntbHpoZ7lnosgICAgICAgICAgICAgICAgICAg5Zyo5oyH5a6a44CM57eo6Jmf44CN55qE5YiG5Ymy5Y2A5Lit5bu656uL6aGe5Z6L54K6IgorIuOAjOaqlOahiOezu+e1semhnuWei+OAjeeahOaqlOahiOezu+e1sSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxMzgKK21zZ2lkICJta3BhcnQiCittc2dzdHIgIm1rcGFydCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNDEKK21zZ2lkICJta3BhcnQgUEFSVC1UWVBFIFtGUy1UWVBFXSBTVEFSVCBFTkQgICAgIG1ha2UgYSBwYXJ0aXRpb24iCittc2dzdHIgIm1rcGFydCDliIblibLljYDpoZ7lnosgW+aqlOahiOezu+e1semhnuWei10g6LW35aeL6bueIOe1kOadn+m7niAgICAgIOW7uueri+S4gOWAi+WIhuWJsuWNgCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNDcKKyMsIGZ1enp5Cittc2dpZCAiIgorIidta3BhcnQnIG1ha2VzIGEgcGFydGl0aW9uIHdpdGhvdXQgY3JlYXRpbmcgYSBuZXcgZmlsZSBzeXN0ZW0gb24gdGhlICIKKyJwYXJ0aXRpb24uICBGUy1UWVBFIG1heSBiZSBzcGVjaWZpZWQgdG8gc2V0IGFuIGFwcHJvcHJpYXRlIHBhcnRpdGlvbiBJRC5cbiIKK21zZ3N0ciAiIgorIm1rcGFydCDlu7rnq4vliIblibLljYDogIzkuI3lnKjliIblibLljYDkuIrlu7rnq4vmlrDmqpTmoYjns7vntbHjgILjgIzmqpTmoYjns7vntbHpoZ7lnovjgI3lj6/ku6XnlKjmlrzoqK3nva7pgakiCisi55W255qE5YiG5Ymy5Y2A6K2Y5Yil6Jmf44CCXG4iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTUyCittc2dpZCAibWtwYXJ0ZnMiCittc2dzdHIgIm1rcGFydGZzIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE1NQorbXNnaWQgIiIKKyJta3BhcnRmcyBQQVJULVRZUEUgRlMtVFlQRSBTVEFSVCBFTkQgICAgIG1ha2UgYSBwYXJ0aXRpb24gd2l0aCBhIGZpbGUgc3lzdGVtIgorbXNnc3RyICIiCisibWtwYXJ0ZnMg5YiG5Ymy5Y2A6aGe5Z6LIOaqlOahiOezu+e1semhnuWeiyDotbflp4vpu54g57WQ5p2f6bueICDlu7rnq4vkuIDlgIvluLbmnInmqpTmoYjns7vntbHnmoTliIblibLljYAiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTYxCittc2dpZCAibW92ZSIKK21zZ3N0ciAibW92ZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNjQKK21zZ2lkICJtb3ZlIE5VTUJFUiBTVEFSVCBFTkQgICAgICAgICAgICAgICAgICAgIG1vdmUgcGFydGl0aW9uIE5VTUJFUiIKK21zZ3N0ciAibW92ZSDnt6jomZ8g6LW35aeL6bueIOe1kOadn+m7niAgICAgICAgICAgICAgICAgIOenu+WLleaMh+WumuOAjOe3qOiZn+OAjeeahOWIhuWJsuWNgCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxNjkKK21zZ2lkICJuYW1lIgorbXNnc3RyICJuYW1lIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE3MgorbXNnaWQgIm5hbWUgTlVNQkVSIE5BTUUgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSBwYXJ0aXRpb24gTlVNQkVSIGFzIE5BTUUiCittc2dzdHIgIiIKKyJuYW1lIOe3qOiZnyDlkI3nqLEgICAgICAgICAgICAgICAgICAgICAgICAgICDlsIfmjIflrprjgIznt6jomZ/jgI3nmoTliIblibLljYDlkb3lkI3ngrrjgIzlkI3nqLHjgI0iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTc3Cittc2dpZCAicHJpbnQiCittc2dzdHIgInByaW50IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE4MAorbXNnaWQgIiIKKyJwcmludCBbZGV2aWNlc3xmcmVlfGxpc3QsYWxsfE5VTUJFUl0gICAgIGRpc3BsYXkgdGhlIHBhcnRpdGlvbiB0YWJsZSwgIgorImF2YWlsYWJsZSBkZXZpY2VzLCBmcmVlIHNwYWNlLCBhbGwgZm91bmQgcGFydGl0aW9ucywgb3IgYSBwYXJ0aWN1bGFyICIKKyJwYXJ0aXRpb24iCittc2dzdHIgIiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxODUKK21zZ2lkICIiCisiV2l0aG91dCBhcmd1bWVudHMsICdwcmludCcgZGlzcGxheXMgdGhlIGVudGlyZSBwYXJ0aXRpb24gdGFibGUuIEhvd2V2ZXIgd2l0aCAiCisidGhlIGZvbGxvd2luZyBhcmd1bWVudHMgaXQgcGVyZm9ybXMgdmFyaW91cyBvdGhlciBhY3Rpb25zLlxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTg3Cittc2dpZCAiICBkZXZpY2VzICAgOiBkaXNwbGF5IGFsbCBhY3RpdmUgYmxvY2sgZGV2aWNlc1xuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTg4Cittc2dpZCAiIgorIiAgZnJlZSAgICAgIDogZGlzcGxheSBpbmZvcm1hdGlvbiBhYm91dCBmcmVlIHVucGFydGl0aW9uZWQgc3BhY2Ugb24gdGhlICIKKyJjdXJyZW50IGJsb2NrIGRldmljZVxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTkwCisjLCBmdXp6eQorbXNnaWQgIiIKKyIgIGxpc3QsIGFsbCA6IGRpc3BsYXkgdGhlIHBhcnRpdGlvbiB0YWJsZXMgb2YgYWxsIGFjdGl2ZSBibG9jayBkZXZpY2VzXG4iCittc2dzdHIgIiIKKyJwcmludCBbZnJlZXznt6jomZ98YWxsXSAgICAgICAgICAgICAgICAgICAg6aGv56S65YiG5Ymy5Y2A6KGo44CB5YiG5Ymy5Y2A77yM5oiW6ICF5omA5pyJ6KOd572uIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjE5MQorbXNnaWQgIiIKKyIgIE5VTUJFUiAgICA6IGRpc3BsYXkgbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIHBhcnRpY3VsYXIgIgorInBhcnRpdGlvblxuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMTk2Cittc2dpZCAicXVpdCIKK21zZ3N0ciAicXVpdCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIxOTkKK21zZ2lkICJxdWl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQgcHJvZ3JhbSIKK21zZ3N0ciAicXVpdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDpm6LplovnqIvlvI8iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjA0Cittc2dpZCAicmVzY3VlIgorbXNnc3RyICJyZXNjdWUiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjA3Cittc2dpZCAiIgorInJlc2N1ZSBTVEFSVCBFTkQgICAgICAgICAgICAgICAgICAgICAgICAgcmVzY3VlIGEgbG9zdCBwYXJ0aXRpb24gbmVhciBTVEFSVCAiCisiYW5kIEVORCIKK21zZ3N0ciAiIgorInJlc2N1ZSDotbflp4vpu54g57WQ5p2f6bueICAgICAgICAgICAgICAgICAgICAg5oy95pWR6Ieo6L+R44CM6LW35aeL6bue44CN44CB44CM57WQ5p2f6bue44CN55qE6YG65aSxIgorIueahOWIhuWJsuWNgCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMTMKK21zZ2lkICJyZXNpemUiCittc2dzdHIgInJlc2l6ZSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMTYKK21zZ2lkICIiCisicmVzaXplIE5VTUJFUiBTVEFSVCBFTkQgICAgICAgICAgICAgICAgICByZXNpemUgcGFydGl0aW9uIE5VTUJFUiBhbmQgaXRzICIKKyJmaWxlIHN5c3RlbSIKK21zZ3N0ciAiIgorInJlc2l6ZSDnt6jomZ8g6LW35aeL6bueIOe1kOadn+m7niAgICAgICAgICAgICAgICDmlLnororkvY3mlrzmjIflrprjgIznt6jomZ/jgI3nmoTliIblibLljYDkuK3mqpTmoYjns7siCisi57Wx55qE5aSn5bCPIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIyNAorbXNnaWQgInJtIgorbXNnc3RyICJybSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyMjcKK21zZ2lkICJybSBOVU1CRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwYXJ0aXRpb24gTlVNQkVSIgorbXNnc3RyICJybSDnt6jomZ8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg5Yiq6Zmk5oyH5a6a44CM57eo6Jmf44CN55qE5YiG5Ymy5Y2AIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIzMgorbXNnaWQgInNlbGVjdCIKK21zZ3N0ciAic2VsZWN0IgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjIzNQorbXNnaWQgInNlbGVjdCBERVZJQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvb3NlIHRoZSBkZXZpY2UgdG8gZWRpdCIKK21zZ3N0ciAic2VsZWN0IOioreWCmSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOmBuOaTh+imgee3qOi8r+eahOioreWCmSIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNDAKK21zZ2lkICJzZXQiCittc2dzdHIgInNldCIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNDMKK21zZ2lkICIiCisic2V0IE5VTUJFUiBGTEFHIFNUQVRFICAgICAgICAgICAgICAgICAgICBjaGFuZ2UgdGhlIEZMQUcgb24gcGFydGl0aW9uIE5VTUJFUiIKK21zZ3N0ciAic2V0IOe3qOiZnyDml5fmqJkg54uA5oWLICAgICAgICAgICAgICAgICAgICAgICDmlLnorormjIflrprjgIznt6jomZ/jgI3liIblibLljYDnmoTml5fmqJkiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjQ5Cittc2dpZCAidG9nZ2xlIgorbXNnc3RyICJ0b2dnbGUiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjUyCittc2dpZCAiIgorInRvZ2dsZSBbTlVNQkVSIFtGTEFHXV0gICAgICAgICAgICAgICAgICAgdG9nZ2xlIHRoZSBzdGF0ZSBvZiBGTEFHIG9uICIKKyJwYXJ0aXRpb24gTlVNQkVSIgorbXNnc3RyICIiCisidG9nZ2xlIFvnt6jomZ8gW+aXl+aomV1dICAgICAgICAgICAgICAgICAgICAg5YiH5o+b44CM57eo6Jmf44CN5YiG5Ymy5Y2A5LiK55qE44CM5peX5qiZ44CN54uA5oWLIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI1OAorbXNnaWQgInVuaXQiCittc2dzdHIgInVuaXQiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjYxCittc2dpZCAidW5pdCBVTklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgdGhlIGRlZmF1bHQgdW5pdCB0byBVTklUIgorbXNnc3RyICJ1bml0IOWWruS9jSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg6Kit5a6a6aCQ6Kit55qE44CM5Zau5L2N44CNIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjI2NgorIywgZnV6enkKK21zZ2lkICJ2ZXJzaW9uIgorbXNnc3RyICJ2ZXJpb24iCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyMjY5CisjLCBmdXp6eQorbXNnaWQgIiIKKyJ2ZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXkgdGhlIHZlcnNpb24gbnVtYmVyIGFuZCAiCisiY29weXJpZ2h0IGluZm9ybWF0aW9uIG9mIEdOVSBQYXJ0ZWQiCittc2dzdHIgIiIKKyJ2ZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOmhr+ekuuebruWJjSBHTlUgUGFydGVkIOeahOeJiOacrOiIh+eJiOasiuizh+ioiiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIyNzMKKyMsIGZ1enp5Cittc2dpZCAiIgorIid2ZXJzaW9uJyBkaXNwbGF5cyBjb3B5cmlnaHQgYW5kIHZlcnNpb24gaW5mb3JtYXRpb24gY29ycmVzcG9uZGluZyB0byB0aGlzICIKKyJjb3B5IG9mIEdOVSBQYXJ0ZWRcbiIKK21zZ3N0ciAidmVyc2lvbiDkvp3mk5rmraTku70gR05VIFBhcnRlZCDpoa/npLrlhbbniYjmrIroiIfniYjmnKzos4foqIpcbiIKKworIzogcGFydGVkL3BhcnRlZC5jOjIzMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstaGxtc3ZdIFtERVZJQ0UgW0NPTU1BTkQgW1BBUkFNRVRFUlNdXS4uLl1cbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjM3OQorbXNnaWQgIk5vIGRldmljZSBmb3VuZCIKK21zZ3N0ciAi5rKS5pyJ5om+5Yiw6Kit5YKZIgorCisjOiBwYXJ0ZWQvcGFydGVkLmM6MjQxMgorbXNnaWQgIldBUk5JTkc6IFlvdSBhcmUgbm90IHN1cGVydXNlci4gIFdhdGNoIG91dCBmb3IgcGVybWlzc2lvbnMuIgorbXNnc3RyICIiCisKKyM6IHBhcnRlZC9wYXJ0ZWQuYzoyNDUwCisjLCBmdXp6eQorbXNnaWQgIllvdSBtYXkgbmVlZCB0byB1cGRhdGUgL2V0Yy9mc3RhYi5cbiIKK21zZ3N0ciAi5aaC5p6c5b+F6KaB77yM5LiN6KaB5b+Y6KiY5pu05pawIC9ldGMvZnN0YWLjgIJcbiIKKworIzogcGFydGVkL3VpLmM6MTYwCittc2dpZCAiV2VsY29tZSB0byBHTlUgUGFydGVkISBUeXBlICdoZWxwJyB0byB2aWV3IGEgbGlzdCBvZiBjb21tYW5kcy5cbiIKK21zZ3N0ciAi5q2h6L+O5L2/55SoIEdOVSBQYXJ0ZWTvvIHovLjlhaUgJ2hlbHAnIOS+huaqouimluWRveS7pOWIl+ihqOOAglxuIgorCisjOiBwYXJ0ZWQvdWkuYzoxNjMKK21zZ2lkICIiCisiVXNhZ2U6IHBhcnRlZCBbT1BUSU9OXS4uLiBbREVWSUNFIFtDT01NQU5EIFtQQVJBTUVURVJTXS4uLl0uLi5dXG4iCisiQXBwbHkgQ09NTUFORHMgd2l0aCBQQVJBTUVURVJTIHRvIERFVklDRS4gIElmIG5vIENPTU1BTkQocykgYXJlIGdpdmVuLCBydW4gIgorImluXG4iCisiaW50ZXJhY3RpdmUgbW9kZS5cbiIKK21zZ3N0ciAiIgorIueUqOazle+8mnBhcnRlZCBb6YG46aCFXeKApiBb6KOd572uIFvlkb3ku6QgW+WPg+aVuF3igKZd4oCmXVxuIgorIuWwh+W4tuacieOAjOWPg+aVuOOAjeeahOOAjOWRveS7pOOAjeaHieeUqOaWvOOAjOijnee9ruOAjeOAguWmguaenOaykuacieaMh+WumuOAjOWRveS7pOOAje+8jOWJh+S7peS6pOirh+aooeW8j+WftyIKKyLooYzjgIJcbiIKKworIzogcGFydGVkL3VpLmM6MTY4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiXG4iCisiWW91IGZvdW5kIGEgYnVnIGluIEdOVSBQYXJ0ZWQhIEhlcmUncyB3aGF0IHlvdSBoYXZlIHRvIGRvOlxuIgorIlxuIgorIkRvbid0IHBhbmljISBUaGUgYnVnIGhhcyBtb3N0IGxpa2VseSBub3QgYWZmZWN0ZWQgYW55IG9mIHlvdXIgZGF0YS5cbiIKKyJIZWxwIHVzIHRvIGZpeCB0aGlzIGJ1ZyBieSBkb2luZyB0aGUgZm9sbG93aW5nOlxuIgorIlxuIgorIkNoZWNrIHdoZXRoZXIgdGhlIGJ1ZyBoYXMgYWxyZWFkeSBiZWVuIGZpeGVkIGJ5IGNoZWNraW5nXG4iCisidGhlIGxhc3QgdmVyc2lvbiBvZiBHTlUgUGFydGVkIHRoYXQgeW91IGNhbiBmaW5kIGF0OlxuIgorIlxuIgorIlx0aHR0cDovL2Z0cC5nbnUub3JnL2dudS9wYXJ0ZWQvXG4iCisiXG4iCisiUGxlYXNlIGNoZWNrIHRoaXMgdmVyc2lvbiBwcmlvciB0byBidWcgcmVwb3J0aW5nLlxuIgorIlxuIgorIklmIHRoaXMgaGFzIG5vdCBiZWVuIGZpeGVkIHlldCBvciBpZiB5b3UgZG9uJ3Qga25vdyBob3cgdG8gY2hlY2ssXG4iCisicGxlYXNlIHZpc2l0IHRoZSBHTlUgUGFydGVkIHdlYnNpdGU6XG4iCisiXG4iCisiXHRodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvcGFydGVkXG4iCisiXG4iCisiZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uXG4iCisiXG4iCisiWW91ciByZXBvcnQgc2hvdWxkIGNvbnRhaW4gdGhlIHZlcnNpb24gb2YgdGhpcyByZWxlYXNlICglcylcbiIKKyJhbG9uZyB3aXRoIHRoZSBlcnJvciBtZXNzYWdlIGJlbG93LCB0aGUgb3V0cHV0IG9mXG4iCisiXG4iCisiXHRwYXJ0ZWQgREVWSUNFIHVuaXQgY28gcHJpbnQgdW5pdCBzIHByaW50XG4iCisiXG4iCisiYW5kIHRoZSBmb2xsb3dpbmcgaGlzdG9yeSBvZiBjb21tYW5kcyB5b3UgZW50ZXJlZC5cbiIKKyJBbHNvIGluY2x1ZGUgYW55IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgeW91ciBzZXR1cCB5b3VcbiIKKyJjb25zaWRlciBpbXBvcnRhbnQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJcbiIKKyLmgqjmib7liLDkuoYgR05VIFBhcnRlZCDkuK3nmoTkuIDlgIvpjK/oqqTvvIHku6XkuIvmmK/mgqjlv4XpoIjpgLLooYznmoTkuovvvJpcbiIKKyJcbiIKKyLkuI3lv4XmhYzlvLXvvIHmraTkuIDpjK/oqqTkuI3lpKrlj6/og73mnIPlvbHpn7/liLDmgqjnmoTku7vkvZXos4fmlpnjgIJcbiIKKyLoq4vnlKjku6XkuIvmlrnms5XkvobluavliqnmiJHlgJHkv67mraPpgJnlgIvpjK/oqqTvvJpcbiIKKyJcbiIKKyLol4nnlLHmqqLmn6XkvY3mlrzvvJpcbiIKKyJcbiIKKyJcdGh0dHA6Ly9mdHAuZ251Lm9yZy9nbnUvcGFydGVkL1xuIgorIlxuIgorIueahOacgOaWsOeJiCBHTlUgUGFydGVk77yM5oKo5Y+v5Lul56K66KqN5piv5ZCm6YCZ5YCL6Yyv6Kqk5bey57aT6KKr5L+u5q2j5LqG44CCXG4iCisi6KuL5pa85Zue5aCx6Yyv6Kqk5YmN5YWI5qqi5p+l5q2k5LiA54mI5pys44CCXG4iCisiXG4iCisi5aaC5p6c6YCZ5bCa5pyq6KKr5L+u5q2j77yM5oiW5piv5oKo5LiN55+l6YGT5aaC5L2V5Y675qqi5p+l77yMXG4iCisi6KuL5Y+D6KiqIEdOVSBQYXJ0ZWQg57ay5Z2A77yaXG4iCisiXG4iCisiXHRodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvcGFydGVkXG4iCisiXG4iCisi5Lul542y5b6X6YCy5LiA5q2l55qE6LOH6KiK44CCXG4iCisiXG4iCisi5oKo55qE5Zue5aCx5oeJ6Kmy6KaB5YyF5ZCr6YeL5Ye655qE54mI5pys57eo6JmfICglcylcbiIKKyLku6Xlj4rlhbbkuIvnmoTpjK/oqqToqIrmga/vvIzns7vliJflkb3ku6RcbiIKKyJcbiIKKyJcdHBhcnRlZCDoo53nva4gdW5pdCBjbyBwcmludCB1bml0IHMgcHJpbnRcbiIKKyJcbiIKKyLnmoTovLjlh7rntZDmnpzlkozlhbbku5bmgqjoqo3ngrrph43opoHnmoToqK3lrpros4foqIrjgIJcbiIKKworIzogcGFydGVkL3VpLmM6Mjg0Cittc2dpZCAiIgorIlxuIgorIkNvbW1hbmQgSGlzdG9yeTpcbiIKK21zZ3N0ciAiIgorCisjOiBwYXJ0ZWQvdWkuYzozNjYKKyMsIGZ1enp5Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBTRUdWX01BUEVSUiAoQWRkcmVzcyBub3QgbWFwcGVkIHRvIG9iamVjdClcbiIKK21zZ3N0ciAiIgorIlxuIgorIumMr+iqpDogU0VHVl9NQVBFUlIgKOS9jeWdgOS4puacquWwjeaHieWIsOeJqeS7tikiCisKKyM6IHBhcnRlZC91aS5jOjM3MgorIywgZnV6enkKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IFNFR1ZfQUNDRVJSIChJbnZhbGlkIHBlcm1pc3Npb25zIGZvciBtYXBwZWQgb2JqZWN0KVxuIgorbXNnc3RyICIiCisiXG4iCisi6Yyv6KqkOiBTRUdWX0FDQ0VSUiAo5bCN5oeJ55qE54mp5Lu25qyK6ZmQ54Sh5pWIKSIKKworIzogcGFydGVkL3VpLmM6Mzc3CisjLCBmdXp6eQorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogQSBnZW5lcmFsIFNJR1NFR1Ygc2lnbmFsIHdhcyBlbmNvdW50ZXJlZC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIumMr+iqpDog6YGH5Yiw5LiA6Iis55qEIFNJR1NFR1Yg6KiK6Jmf44CCIgorCisjOiBwYXJ0ZWQvdWkuYzo0MTAKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9JTlRESVYgKEludGVnZXI6IGRpdmlkZSBieSB6ZXJvKSIKK21zZ3N0ciAiIgorIlxuIgorIumMr+iqpDogRlBFX0lOVERJViAo5pW05pW4OiDooqvpm7bpmaQpIgorCisjOiBwYXJ0ZWQvdWkuYzo0MTUKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9JTlRPVkYgKEludGVnZXI6IG92ZXJmbG93KSIKK21zZ3N0ciAiIgorIlxuIgorIumMr+iqpDogRlBFX0lOVE9WRiAo5pW05pW4OiDlkJHkuIrmuqLkvY0pIgorCisjOiBwYXJ0ZWQvdWkuYzo0MjAKKyMsIGZ1enp5Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxURElWIChGbG9hdDogZGl2aWRlIGJ5IHplcm8pIgorbXNnc3RyICIiCisiXG4iCisi6Yyv6KqkOiBGUEVfSU5URElWICjmta7pu546IOiiq+mbtumZpCkiCisKKyM6IHBhcnRlZC91aS5jOjQyNQorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0ZMVE9WRiAoRmxvYXQ6IG92ZXJmbG93KSIKK21zZ3N0ciAiIgorIlxuIgorIumMr+iqpDogRlBFX0ZMVE9WRiAo5rWu6bueOiDlkJHkuIrmuqLkvY0pIgorCisjOiBwYXJ0ZWQvdWkuYzo0MzAKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRVTkQgKEZsb2F0OiB1bmRlcmZsb3cpIgorbXNnc3RyICIiCisiXG4iCisi6Yyv6KqkOiBGUEVfRkxUVU5EICjmta7pu546IOWQkeS4i+a6ouS9jSkiCisKKyM6IHBhcnRlZC91aS5jOjQzNQorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogRlBFX0ZMVFJFUyAoRmxvYXQ6IGluZXhhY3QgcmVzdWx0KSIKK21zZ3N0ciAiIgorIlxuIgorIumMr+iqpDogRlBFX0ZMVFJFUyAo5rWu6bueOiDkuI3mmI7norrnmoTntZDmnpwpIgorCisjOiBwYXJ0ZWQvdWkuYzo0NDAKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IEZQRV9GTFRJTlYgKEZsb2F0OiBpbnZhbGlkIG9wZXJhdGlvbikiCittc2dzdHIgIiIKKyJcbiIKKyLpjK/oqqQ6IEZQRV9GTFRJTlYgKOa1rum7njog54Sh5pWI55qE5pON5L2cKSIKKworIzogcGFydGVkL3VpLmM6NDQ1Cittc2dpZCAiIgorIlxuIgorIkVycm9yOiBGUEVfRkxUU1VCIChGbG9hdDogc3Vic2NyaXB0IG91dCBvZiByYW5nZSkiCittc2dzdHIgIiIKKyJcbiIKKyLpjK/oqqQ6IEZQRV9GTFRTVUIgKOa1rum7njog6Ki75qiZ6LaF5Ye656+E5ZyNKSIKKworIzogcGFydGVkL3VpLmM6NDUwCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBBIGdlbmVyYWwgU0lHRlBFIHNpZ25hbCB3YXMgZW5jb3VudGVyZWQuIgorbXNnc3RyICIiCisiXG4iCisi6Yyv6KqkOiDpgYfliLDkuIDoiKznmoQgU0lHRlBFIOioiuiZn+OAgiIKKworIzogcGFydGVkL3VpLmM6NDgzCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfSUxMT1BDIChJbGxlZ2FsIE9wY29kZSkiCittc2dzdHIgIiIKKyJcbiIKKyLpjK/oqqQ6IElMTF9JTExPUEMgKOS4jeWQiOazleeahOaTjeS9nOeivCkiCisKKyM6IHBhcnRlZC91aS5jOjQ4OAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX0lMTE9QTiAoSWxsZWdhbCBPcGVyYW5kKSIKK21zZ3N0ciAiIgorIlxuIgorIumMr+iqpDogSUxMX0lMTE9QTiAo5LiN5ZCI5rOV55qE6YGL566X5YWDKSIKKworIzogcGFydGVkL3VpLmM6NDkzCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfSUxMQURSIChJbGxlZ2FsIGFkZHJlc3NpbmcgbW9kZSkiCittc2dzdHIgIiIKKyJcbiIKKyLpjK/oqqQ6IElMTF9JTExBRFIgKOS4jeWQiOazleeahOWumuWdgOaooeW8jykiCisKKyM6IHBhcnRlZC91aS5jOjQ5OAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX0lMTFRSUCAoSWxsZWdhbCBUcmFwKSIKK21zZ3N0ciAiIgorIlxuIgorIumMr+iqpDogSUxMX0lMTFRSUCAo5LiN5ZCI5rOV55qE6Zm36ZixKSIKKworIzogcGFydGVkL3VpLmM6NTAzCittc2dpZCAiIgorIlxuIgorIkVycm9yOiBJTExfUFJWT1BDIChQcml2aWxlZ2VkIE9wY29kZSkiCittc2dzdHIgIiIKKyJcbiIKKyLpjK/oqqQ6IElMTF9QUlZPUEMgKOWFt+WEquWFiOasiueahOaTjeS9nOeivCkiCisKKyM6IHBhcnRlZC91aS5jOjUwOAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX1BSVlJFRyAoUHJpdmlsZWdlZCBSZWdpc3RlcikiCittc2dzdHIgIiIKKyJcbiIKKyLpjK/oqqQ6IElMTF9QUlZSRUcgKOWFt+WEquWFiOasiueahOaaq+WtmOWZqCkiCisKKyM6IHBhcnRlZC91aS5jOjUxMworbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogSUxMX0NPUFJPQyAoQ29wcm9jZXNzb3IgRXJyb3IpIgorbXNnc3RyICIiCisiXG4iCisi6Yyv6KqkOiBJTExfQ09QUk9DICjovJTliqnomZXnkIblmajpjK/oqqQpIgorCisjOiBwYXJ0ZWQvdWkuYzo1MTgKK21zZ2lkICIiCisiXG4iCisiRXJyb3I6IElMTF9CQURTVEsgKEludGVybmFsIFN0YWNrIEVycm9yKSIKK21zZ3N0ciAiIgorIlxuIgorIumMr+iqpDogSUxMX0JBRFNUSyAo5YWn6YOo5aCG55aK6Yyv6KqkKSIKKworIzogcGFydGVkL3VpLmM6NTIzCisjLCBmdXp6eQorbXNnaWQgIiIKKyJcbiIKKyJFcnJvcjogQSBnZW5lcmFsIFNJR0lMTCBzaWduYWwgd2FzIGVuY291bnRlcmVkLiIKK21zZ3N0ciAiIgorIlxuIgorIumMr+iqpDog6YGH5Yiw5LiA6Iis55qEIFNJR0lMTCDoqIromZ/jgIIiCisKKyM6IHBhcnRlZC91aS5jOjEwMjQKK21zZ2lkICJFeHBlY3RpbmcgYSBwYXJ0aXRpb24gbnVtYmVyLiIKK21zZ3N0ciAi6ZyA6KaB5YiG5Ymy5Y2A57eo6Jmf44CCIgorCisjOiBwYXJ0ZWQvdWkuYzoxMDMzCittc2dpZCAiUGFydGl0aW9uIGRvZXNuJ3QgZXhpc3QuIgorbXNnc3RyICLliIblibLljYDkuI3lrZjlnKjjgIIiCisKKyM6IHBhcnRlZC91aS5jOjEwNTMKK21zZ2lkICJFeHBlY3RpbmcgYSBmaWxlIHN5c3RlbSB0eXBlLiIKK21zZ3N0ciAi6ZyA6KaB5qqU5qGI57O757Wx6aGe5Z6L44CCIgorCisjOiBwYXJ0ZWQvdWkuYzoxMDYwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gZmlsZSBzeXN0ZW0gdHlwZSBcIiVzXCIuIgorbXNnc3RyICLmnKrnn6XnmoTmqpTmoYjns7vntbHpoZ7lnovjgIwlc+OAjeOAgiIKKworIzogcGFydGVkL3VpLmM6MTA4MAorbXNnaWQgIkV4cGVjdGluZyBhIGRpc2sgbGFiZWwgdHlwZS4iCittc2dzdHIgIumcgOimgeejgeein+aomeexpOmhnuWei+OAgiIKKworIzogcGFydGVkL3VpLmM6MTE3OAorbXNnaWQgIkNhbid0IGNyZWF0ZSBhbnkgbW9yZSBwYXJ0aXRpb25zLiIKK21zZ3N0ciAi54Sh5rOV5bu656uL5pu05aSa5YiG5Ymy5Y2A44CCIgorCisjOiBwYXJ0ZWQvdWkuYzoxMTg4Cittc2dpZCAiRXhwZWN0aW5nIGEgcGFydGl0aW9uIHR5cGUuIgorbXNnc3RyICLpnIDopoHliIblibLljYDpoZ7lnovjgIIiCisKKyM6IHBhcnRlZC91aS5jOjEzMTUKK21zZ2lkICJvbiIKK21zZ3N0ciAi6ZaLIgorCisjOiBwYXJ0ZWQvdWkuYzoxMzE2Cittc2dpZCAib2ZmIgorbXNnc3RyICLpl5wiCisKKyM6IHBhcnRlZC91aS5jOjE0MzEKK21zZ2lkICJPUFRJT05zOiIKK21zZ3N0ciAi6YG46aCF77yaIgorCisjOiBwYXJ0ZWQvdWkuYzoxNDM2Cittc2dpZCAiQ09NTUFORHM6IgorbXNnc3RyICLlkb3ku6TvvJoiCisKKyM6IHBhcnRlZC91aS5jOjE0NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNpbmcgJXNcbiIKK21zZ3N0ciAi5L2/55SoICVzXG4iCisKKyM6IHBhcnRlZC91aS5jOjE1MTkKK21zZ2lkICJUaGlzIGNvbW1hbmQgZG9lcyBub3QgbWFrZSBzZW5zZSBpbiBub24taW50ZXJhY3RpdmUgbW9kZS5cbiIKK21zZ3N0ciAiIgorCisjfiBtc2dpZCAid2hlcmUgbmVjZXNzYXJ5LCBwcm9tcHRzIGZvciB1c2VyIGludGVydmVudGlvbiIKKyN+IG1zZ3N0ciAi5Zyo5b+F6KaB5pmC77yM5o+Q56S65L2/55So6ICF5LuL5YWlIgorCisjfiBtc2dpZCAiR05VIFBhcnRlZCBWZXJzaW9uIGluZm9ybWF0aW9uOlxuIgorI34gbXNnc3RyICJHTlUgUGFydGVkIOeJiOacrOizh+ioiu+8mlxuIgorCisjLCBmdXp6eQorI34gbXNnaWQgIiIKKyN+ICJXaXRob3V0IGFyZ3VtZW50cywgcHJpbnQgZGlzcGxheXMgdGhlIGVudGlyZSBwYXJ0aXRpb24gdGFibGUuIFdpdGggIgorI34gIidmcmVlJ1xuIgorI34gImFyZ3VtZW50LCBpbmZvcm1hdGlvbiBhYm91dCBmcmVlIHNwYWNlIHdpbGwgYmUgZGlzcGxheWVkIG90aGVyd2lzZSBpZiBhXG4iCisjfiAicGFydGl0aW9uIG51bWJlciBpcyBnaXZlbiwgdGhlbiBtb3JlIGRldGFpbGVkIGluZm9ybWF0aW9uIGlzIGRpc3BsYXllZFxuIgorI34gImFib3V0IHRoYXQgcGFydGl0aW9uLiBJZiB0aGUgJ2FsbCcgYXJndW1lbnQgaXMgcGFzc2VkIGluc3RlYWQsIHBhcnRpdGlvblxuIgorI34gImluZm9ybWF0aW9uIGZvciBhbGwgZGV2aWNlcyB3aWxsIGJlIGRpc3BsYXllZC5cbiIKKyN+IG1zZ3N0ciAiIgorI34gIuiLpeeEoeW8leaVuO+8jHByaW50IOmhr+ekuuaVtOWAi+WIhuWJsuWNgOihqOOAguWIqeeUqCAnZnJlZScg5byV5pW45L6G6aGv56S65Y+v55So56m66ZaT55qE6LOH6KiK77yMXG4iCisjfiAi5ZCm5YmH5aaC5p6c5oyH5a6a5LqG5YiG5Ymy5Y2A6Jmf56K877yM5bCx6aGv56S65pu05aSa6Zec5pa85YiG5Ymy5Y2A55qE6Kmz57Sw6LOH6KiK44CC5aaC5p6c5Lul5byV5pW4ICIKKyN+ICInYWxsJyDkvoblj5bku6PvvIxcbiIKKyN+ICLlsIfmnIPpoa/npLrmiYDmnInoo53nva7nmoTliIblibLljYDos4foqIrjgIIiCisKKyN+IG1zZ2lkICJBdHRlbXB0IHRvIHJlYWQgc2VjdG9ycyAlbGQtJWxkIG91dHNpZGUgb2YgcGFydGl0aW9uIG9uICVzLiIKKyN+IG1zZ3N0ciAi6Kmm5ZyW6K6A5Y+WICUzJHMg5LiK5YiG5Ymy5Y2A5LmL5aSW55qE56OB5Y2AICUxJGxkLSUyJGxk44CCIgpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L3NjcmlwdHMvZGF0YS9hYmkvYmFzZWxpbmVfc3ltYm9scy50eHQgYi9wYXJ0ZWQtMS44Ljcvc2NyaXB0cy9kYXRhL2FiaS9iYXNlbGluZV9zeW1ib2xzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmZlNmY0Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L3NjcmlwdHMvZGF0YS9hYmkvYmFzZWxpbmVfc3ltYm9scy50eHQKQEAgLTAsMCArMSw0NTIgQEAKK0ZVTkM6X19lZmlfY3JjMzIKK0ZVTkM6X2FtaWdhX2FkZF9pZAorRlVOQzpfYW1pZ2FfZnJlZV9pZHMKK0ZVTkM6X2FtaWdhX2lkX2luX2xpc3QKK0ZVTkM6X2NvcHlfaGlkZGVuX3NlY3RvcnMKK0ZVTkM6X2ZpbmkKK0ZVTkM6X2luaXQKK0ZVTkM6X3BlZF9kZXZpY2VfcHJvYmUKK0ZVTkM6X3BlZF9kaXNrX2FsbG9jCitGVU5DOl9wZWRfZGlza19mcmVlCitGVU5DOl9wZWRfcGFydGl0aW9uX2FsbG9jCitGVU5DOl9wZWRfcGFydGl0aW9uX2F0dGVtcHRfYWxpZ24KK0ZVTkM6X3BlZF9wYXJ0aXRpb25fZnJlZQorRlVOQzpfdXBkYXRlX3N0YXRzCitGVU5DOmFic19tb2QKK0ZVTkM6YW1pZ2FfZmluZF9wYXJ0CitGVU5DOmV4dDJfYmNhY2hlX2RlaW5pdAorRlVOQzpleHQyX2JjYWNoZV9kdW1wCitGVU5DOmV4dDJfYmNhY2hlX2ZsdXNoCitGVU5DOmV4dDJfYmNhY2hlX2ZsdXNoX3JhbmdlCitGVU5DOmV4dDJfYmNhY2hlX2luaXQKK0ZVTkM6ZXh0Ml9iY2FjaGVfc3luYworRlVOQzpleHQyX2JjcmVhdGUKK0ZVTkM6ZXh0Ml9ibG9ja19yZWxvY2F0ZQorRlVOQzpleHQyX2JyZWFkCitGVU5DOmV4dDJfYnJlbHNlCitGVU5DOmV4dDJfY2xvc2UKK0ZVTkM6ZXh0Ml9jb21taXRfbWV0YWRhdGEKK0ZVTkM6ZXh0Ml9jb3B5X2Jsb2NrCitGVU5DOmV4dDJfZGVzdHJveV9kZXZfaGFuZGxlCitGVU5DOmV4dDJfZG9faW5vZGUKK0ZVTkM6ZXh0Ml9maW5kX2ZyZWVfYmxvY2sKK0ZVTkM6ZXh0Ml9maW5kX2ZyZWVfaW5vZGUKK0ZVTkM6ZXh0Ml9nZXRfYmxvY2tfc3RhdGUKK0ZVTkM6ZXh0Ml9nZXRfaW5vZGVfb2Zmc2V0CitGVU5DOmV4dDJfZ2V0X2lub2RlX3N0YXRlCitGVU5DOmV4dDJfaW5vZGVfcmVsb2NhdGUKK0ZVTkM6ZXh0Ml9pc19ncm91cF9zcGFyc2UKK0ZVTkM6ZXh0Ml9tYWtlX2Rldl9oYW5kbGVfZnJvbV9wYXJ0ZWRfZ2VvbWV0cnkKK0ZVTkM6ZXh0Ml9tZXRhZGF0YV9wdXNoCitGVU5DOmV4dDJfbWtmcworRlVOQzpleHQyX21vdmVfYmxvY2tzCitGVU5DOmV4dDJfb3BlbgorRlVOQzpleHQyX3JlYWRfYmxvY2tzCitGVU5DOmV4dDJfcmVhZF9pbm9kZQorRlVOQzpleHQyX3Jlc2l6ZV9mcworRlVOQzpleHQyX3NldF9ibG9ja19zdGF0ZQorRlVOQzpleHQyX3NldF9pbm9kZV9zdGF0ZQorRlVOQzpleHQyX3N5bmMKK0ZVTkM6ZXh0Ml93cml0ZV9ibG9ja3MKK0ZVTkM6ZXh0Ml93cml0ZV9pbm9kZQorRlVOQzpleHQyX3plcm9fYmxvY2tzCitGVU5DOmV4dDJfemVyb19pbm9kZQorRlVOQzpleHRlbmRlZF9ldWNsaWQKK0ZVTkM6ZmF0X2FsbG9jCitGVU5DOmZhdF9hbGxvY19idWZmZXJzCitGVU5DOmZhdF9ib290X3NlY3Rvcl9hbmFseXNlCitGVU5DOmZhdF9ib290X3NlY3Rvcl9nZW5lcmF0ZQorRlVOQzpmYXRfYm9vdF9zZWN0b3JfcHJvYmVfdHlwZQorRlVOQzpmYXRfYm9vdF9zZWN0b3JfcmVhZAorRlVOQzpmYXRfYm9vdF9zZWN0b3Jfc2V0X2Jvb3RfY29kZQorRlVOQzpmYXRfYm9vdF9zZWN0b3Jfd3JpdGUKK0ZVTkM6ZmF0X2NhbGNfYWxpZ25fc2VjdG9ycworRlVOQzpmYXRfY2FsY19yZXNpemVfc2l6ZXMKK0ZVTkM6ZmF0X2NhbGNfc2l6ZXMKK0ZVTkM6ZmF0X2NoZWNrCitGVU5DOmZhdF9jaGVja19yZXNpemVfZ2VvbWV0cnkKK0ZVTkM6ZmF0X2Nsb2JiZXIKK0ZVTkM6ZmF0X2Nsb3NlCitGVU5DOmZhdF9jbHVzdGVyX3RvX2ZyYWcKK0ZVTkM6ZmF0X2NsdXN0ZXJfdG9fc2VjdG9yCitGVU5DOmZhdF9jb2xsZWN0X2NsdXN0ZXJfaW5mbworRlVOQzpmYXRfY29weQorRlVOQzpmYXRfY3JlYXRlCitGVU5DOmZhdF9jcmVhdGVfZmF0MTYKK0ZVTkM6ZmF0X2NyZWF0ZV9mYXQzMgorRlVOQzpmYXRfZGlyX2VudHJ5X2dldF9maXJzdF9jbHVzdGVyCitGVU5DOmZhdF9kaXJfZW50cnlfZ2V0X2xlbmd0aAorRlVOQzpmYXRfZGlyX2VudHJ5X2dldF9uYW1lCitGVU5DOmZhdF9kaXJfZW50cnlfaGFzX2ZpcnN0X2NsdXN0ZXIKK0ZVTkM6ZmF0X2Rpcl9lbnRyeV9pc19hY3RpdmUKK0ZVTkM6ZmF0X2Rpcl9lbnRyeV9pc19kaXJlY3RvcnkKK0ZVTkM6ZmF0X2Rpcl9lbnRyeV9pc19maWxlCitGVU5DOmZhdF9kaXJfZW50cnlfaXNfbnVsbF90ZXJtCitGVU5DOmZhdF9kaXJfZW50cnlfaXNfc3lzdGVtX2ZpbGUKK0ZVTkM6ZmF0X2Rpcl9lbnRyeV9zZXRfZmlyc3RfY2x1c3RlcgorRlVOQzpmYXRfZHVwbGljYXRlX2NsdXN0ZXJzCitGVU5DOmZhdF9mcmFnX3RvX2NsdXN0ZXIKK0ZVTkM6ZmF0X2ZyYWdfdG9fc2VjdG9yCitGVU5DOmZhdF9mcmVlCitGVU5DOmZhdF9mcmVlX2J1ZmZlcnMKK0ZVTkM6ZmF0X2dldF9jbHVzdGVyX2ZsYWcKK0ZVTkM6ZmF0X2dldF9jbHVzdGVyX3VzYWdlCitGVU5DOmZhdF9nZXRfY29weV9jb25zdHJhaW50CitGVU5DOmZhdF9nZXRfY3JlYXRlX2NvbnN0cmFpbnRfZmF0MTYKK0ZVTkM6ZmF0X2dldF9jcmVhdGVfY29uc3RyYWludF9mYXQzMgorRlVOQzpmYXRfZ2V0X2ZyYWdtZW50X2ZsYWcKK0ZVTkM6ZmF0X2dldF9yZXNpemVfY29uc3RyYWludAorRlVOQzpmYXRfaW5mb19zZWN0b3JfZ2VuZXJhdGUKK0ZVTkM6ZmF0X2luZm9fc2VjdG9yX3JlYWQKK0ZVTkM6ZmF0X2luZm9fc2VjdG9yX3dyaXRlCitGVU5DOmZhdF9pc19mcmFnbWVudF9hY3RpdmUKK0ZVTkM6ZmF0X2lzX3NlY3Rvcl9pbl9jbHVzdGVycworRlVOQzpmYXRfbWF4X2NsdXN0ZXJfY291bnQKK0ZVTkM6ZmF0X21heF9jbHVzdGVyX3NpemUKK0ZVTkM6ZmF0X21pbl9jbHVzdGVyX2NvdW50CitGVU5DOmZhdF9taW5fY2x1c3Rlcl9zaXplCitGVU5DOmZhdF9taW5fcmVzZXJ2ZWRfc2VjdG9yX2NvdW50CitGVU5DOmZhdF9vcF9jb250ZXh0X2NyZWF0ZV9pbml0aWFsX2ZhdAorRlVOQzpmYXRfb3BfY29udGV4dF9kZXN0cm95CitGVU5DOmZhdF9vcF9jb250ZXh0X21hcF9jbHVzdGVyCitGVU5DOmZhdF9vcF9jb250ZXh0X21hcF9mcmFnbWVudAorRlVOQzpmYXRfb3BfY29udGV4dF9tYXBfc3RhdGljX2NsdXN0ZXIKK0ZVTkM6ZmF0X29wX2NvbnRleHRfbWFwX3N0YXRpY19mcmFnbWVudAorRlVOQzpmYXRfb3BfY29udGV4dF9uZXcKK0ZVTkM6ZmF0X29wZW4KK0ZVTkM6ZmF0X3Byb2JlCitGVU5DOmZhdF9wcm9iZV9mYXQxNgorRlVOQzpmYXRfcHJvYmVfZmF0MzIKK0ZVTkM6ZmF0X3JlYWRfY2x1c3RlcgorRlVOQzpmYXRfcmVhZF9jbHVzdGVycworRlVOQzpmYXRfcmVhZF9mcmFnbWVudAorRlVOQzpmYXRfcmVhZF9mcmFnbWVudHMKK0ZVTkM6ZmF0X3JlY29tbWVuZF9taW5fY2x1c3Rlcl9zaXplCitGVU5DOmZhdF9yZXNpemUKK0ZVTkM6ZmF0X3NlY3Rvcl90b19jbHVzdGVyCitGVU5DOmZhdF9zZWN0b3JfdG9fZnJhZworRlVOQzpmYXRfc2V0X2ZyYWdfc2VjdG9ycworRlVOQzpmYXRfdGFibGVfYWxsb2NfY2hlY2tfY2x1c3RlcgorRlVOQzpmYXRfdGFibGVfYWxsb2NfY2x1c3RlcgorRlVOQzpmYXRfdGFibGVfY2xlYXIKK0ZVTkM6ZmF0X3RhYmxlX2NvbXBhcmUKK0ZVTkM6ZmF0X3RhYmxlX2NvdW50X3N0YXRzCitGVU5DOmZhdF90YWJsZV9kZXN0cm95CitGVU5DOmZhdF90YWJsZV9kdXBsaWNhdGUKK0ZVTkM6ZmF0X3RhYmxlX2VudHJ5X3NpemUKK0ZVTkM6ZmF0X3RhYmxlX2dldAorRlVOQzpmYXRfdGFibGVfaXNfYWN0aXZlCitGVU5DOmZhdF90YWJsZV9pc19hdmFpbGFibGUKK0ZVTkM6ZmF0X3RhYmxlX2lzX2JhZAorRlVOQzpmYXRfdGFibGVfaXNfZW1wdHkKK0ZVTkM6ZmF0X3RhYmxlX2lzX2VvZgorRlVOQzpmYXRfdGFibGVfbmV3CitGVU5DOmZhdF90YWJsZV9yZWFkCitGVU5DOmZhdF90YWJsZV9zZXQKK0ZVTkM6ZmF0X3RhYmxlX3NldF9hdmFpbAorRlVOQzpmYXRfdGFibGVfc2V0X2JhZAorRlVOQzpmYXRfdGFibGVfc2V0X2NsdXN0ZXJfY291bnQKK0ZVTkM6ZmF0X3RhYmxlX3NldF9lb2YKK0ZVTkM6ZmF0X3RhYmxlX3dyaXRlCitGVU5DOmZhdF90YWJsZV93cml0ZV9hbGwKK0ZVTkM6ZmF0X3RyYXZlcnNlX2JlZ2luCitGVU5DOmZhdF90cmF2ZXJzZV9jb21wbGV0ZQorRlVOQzpmYXRfdHJhdmVyc2VfZGlyZWN0b3J5CitGVU5DOmZhdF90cmF2ZXJzZV9lbnRyaWVzX3Blcl9idWZmZXIKK0ZVTkM6ZmF0X3RyYXZlcnNlX21hcmtfZGlydHkKK0ZVTkM6ZmF0X3RyYXZlcnNlX25leHRfZGlyX2VudHJ5CitGVU5DOmZhdF93cml0ZV9jbHVzdGVyCitGVU5DOmZhdF93cml0ZV9jbHVzdGVycworRlVOQzpmYXRfd3JpdGVfZnJhZ21lbnQKK0ZVTkM6ZmF0X3dyaXRlX2ZyYWdtZW50cworRlVOQzpmYXRfd3JpdGVfc3luY19jbHVzdGVyCitGVU5DOmZhdF93cml0ZV9zeW5jX2NsdXN0ZXJzCitGVU5DOmZhdF93cml0ZV9zeW5jX2ZyYWdtZW50CitGVU5DOmZhdF93cml0ZV9zeW5jX2ZyYWdtZW50cworRlVOQzpmaW5kaXQKK0ZVTkM6Z2VvbV9kYWxfY3JlYXRlCitGVU5DOmdlb21fZGFsX2ZyZWUKK0ZVTkM6Z2VvbV9kYWxfcmVvcGVuCitGVU5DOmhmc19hbmRfd3JhcHBlcl9wcm9iZQorRlVOQzpoZnNfYnRyZWVfc2VhcmNoCitGVU5DOmhmc19maWxlX2Nsb3NlCitGVU5DOmhmc19maWxlX29wZW4KK0ZVTkM6aGZzX2ZpbGVfcmVhZF9zZWN0b3IKK0ZVTkM6aGZzX2ZpbGVfd3JpdGVfc2VjdG9yCitGVU5DOmhmc19maW5kX3N0YXJ0X3BhY2sKK0ZVTkM6aGZzX2ZyZWVfYmFkX2Jsb2Nrc19saXN0CitGVU5DOmhmc19nZXRfZW1wdHlfZW5kCitGVU5DOmhmc19pc19iYWRfYmxvY2sKK0ZVTkM6aGZzX3BhY2tfZnJlZV9zcGFjZV9mcm9tX2Jsb2NrCitGVU5DOmhmc19wcm9iZQorRlVOQzpoZnNfcmVhZF9iYWRfYmxvY2tzCitGVU5DOmhmc191cGRhdGVfbWRiCitGVU5DOmhmc2NfY2FjaGVfYWRkX2V4dGVudAorRlVOQzpoZnNjX2NhY2hlX21vdmVfZXh0ZW50CitGVU5DOmhmc2NfY2FjaGVfc2VhcmNoX2V4dGVudAorRlVOQzpoZnNjX2Nhbl91c2VfZ2VvbQorRlVOQzpoZnNjX2RlbGV0ZV9jYWNoZQorRlVOQzpoZnNjX25ld19jYWNoZQorRlVOQzpoZnNqX3JlcGxheV9qb3VybmFsCitGVU5DOmhmc2pfdXBkYXRlX2ppYgorRlVOQzpoZnNqX3VwZGF0ZV9qbAorRlVOQzpoZnNwbHVzX2J0cmVlX3NlYXJjaAorRlVOQzpoZnNwbHVzX2ZpbGVfY2xvc2UKK0ZVTkM6aGZzcGx1c19maWxlX29wZW4KK0ZVTkM6aGZzcGx1c19maWxlX3JlYWQKK0ZVTkM6aGZzcGx1c19maWxlX3dyaXRlCitGVU5DOmhmc3BsdXNfZmluZF9zdGFydF9wYWNrCitGVU5DOmhmc3BsdXNfZnJlZV9iYWRfYmxvY2tzX2xpc3QKK0ZVTkM6aGZzcGx1c19nZXRfZW1wdHlfZW5kCitGVU5DOmhmc3BsdXNfZ2V0X21pbl9zaXplCitGVU5DOmhmc3BsdXNfaXNfYmFkX2Jsb2NrCitGVU5DOmhmc3BsdXNfcGFja19mcmVlX3NwYWNlX2Zyb21fYmxvY2sKK0ZVTkM6aGZzcGx1c19wcm9iZQorRlVOQzpoZnNwbHVzX3JlYWRfYmFkX2Jsb2NrcworRlVOQzpoZnNwbHVzX3VwZGF0ZV92aAorRlVOQzpoZnN4X3Byb2JlCitGVU5DOm1hY19hbGxvYworRlVOQzpwZWRfYWxpZ25tZW50X2FsaWduX2Rvd24KK0ZVTkM6cGVkX2FsaWdubWVudF9hbGlnbl9uZWFyZXN0CitGVU5DOnBlZF9hbGlnbm1lbnRfYWxpZ25fdXAKK0ZVTkM6cGVkX2FsaWdubWVudF9kZXN0cm95CitGVU5DOnBlZF9hbGlnbm1lbnRfZHVwbGljYXRlCitGVU5DOnBlZF9hbGlnbm1lbnRfaW5pdAorRlVOQzpwZWRfYWxpZ25tZW50X2ludGVyc2VjdAorRlVOQzpwZWRfYWxpZ25tZW50X2lzX2FsaWduZWQKK0ZVTkM6cGVkX2FsaWdubWVudF9uZXcKK0ZVTkM6cGVkX2Fzc2VydAorRlVOQzpwZWRfY2FsbG9jCitGVU5DOnBlZF9jb25zdHJhaW50X2FueQorRlVOQzpwZWRfY29uc3RyYWludF9kZXN0cm95CitGVU5DOnBlZF9jb25zdHJhaW50X2RvbmUKK0ZVTkM6cGVkX2NvbnN0cmFpbnRfZHVwbGljYXRlCitGVU5DOnBlZF9jb25zdHJhaW50X2V4YWN0CitGVU5DOnBlZF9jb25zdHJhaW50X2luaXQKK0ZVTkM6cGVkX2NvbnN0cmFpbnRfaW50ZXJzZWN0CitGVU5DOnBlZF9jb25zdHJhaW50X2lzX3NvbHV0aW9uCitGVU5DOnBlZF9jb25zdHJhaW50X25ldworRlVOQzpwZWRfY29uc3RyYWludF9uZXdfZnJvbV9tYXgKK0ZVTkM6cGVkX2NvbnN0cmFpbnRfbmV3X2Zyb21fbWluCitGVU5DOnBlZF9jb25zdHJhaW50X25ld19mcm9tX21pbl9tYXgKK0ZVTkM6cGVkX2NvbnN0cmFpbnRfc29sdmVfbWF4CitGVU5DOnBlZF9jb25zdHJhaW50X3NvbHZlX25lYXJlc3QKK0ZVTkM6cGVkX2RlYnVnCitGVU5DOnBlZF9kZWJ1Z19zZXRfaGFuZGxlcgorRlVOQzpwZWRfZGV2aWNlX2JlZ2luX2V4dGVybmFsX2FjY2VzcworRlVOQzpwZWRfZGV2aWNlX2NoZWNrCitGVU5DOnBlZF9kZXZpY2VfY2xvc2UKK0ZVTkM6cGVkX2RldmljZV9kZXN0cm95CitGVU5DOnBlZF9kZXZpY2VfZW5kX2V4dGVybmFsX2FjY2VzcworRlVOQzpwZWRfZGV2aWNlX2ZyZWVfYWxsCitGVU5DOnBlZF9kZXZpY2VfZ2V0CitGVU5DOnBlZF9kZXZpY2VfZ2V0X2NvbnN0cmFpbnQKK0ZVTkM6cGVkX2RldmljZV9nZXRfbmV4dAorRlVOQzpwZWRfZGV2aWNlX2lzX2J1c3kKK0ZVTkM6cGVkX2RldmljZV9vcGVuCitGVU5DOnBlZF9kZXZpY2VfcHJvYmVfYWxsCitGVU5DOnBlZF9kZXZpY2VfcmVhZAorRlVOQzpwZWRfZGV2aWNlX3N5bmMKK0ZVTkM6cGVkX2RldmljZV9zeW5jX2Zhc3QKK0ZVTkM6cGVkX2RldmljZV93cml0ZQorRlVOQzpwZWRfZGlza19hZGRfcGFydGl0aW9uCitGVU5DOnBlZF9kaXNrX2FtaWdhX2RvbmUKK0ZVTkM6cGVkX2Rpc2tfYW1pZ2FfaW5pdAorRlVOQzpwZWRfZGlza19ic2RfZG9uZQorRlVOQzpwZWRfZGlza19ic2RfaW5pdAorRlVOQzpwZWRfZGlza19jaGVjaworRlVOQzpwZWRfZGlza19jbG9iYmVyCitGVU5DOnBlZF9kaXNrX2Nsb2JiZXJfZXhjbHVkZQorRlVOQzpwZWRfZGlza19jb21taXQKK0ZVTkM6cGVkX2Rpc2tfY29tbWl0X3RvX2RldgorRlVOQzpwZWRfZGlza19jb21taXRfdG9fb3MKK0ZVTkM6cGVkX2Rpc2tfZGVsZXRlX2FsbAorRlVOQzpwZWRfZGlza19kZWxldGVfcGFydGl0aW9uCitGVU5DOnBlZF9kaXNrX2Rlc3Ryb3kKK0ZVTkM6cGVkX2Rpc2tfZHVwbGljYXRlCitGVU5DOnBlZF9kaXNrX2R2aF9kb25lCitGVU5DOnBlZF9kaXNrX2R2aF9pbml0CitGVU5DOnBlZF9kaXNrX2V4dGVuZGVkX3BhcnRpdGlvbgorRlVOQzpwZWRfZGlza19nZXRfbGFzdF9wYXJ0aXRpb25fbnVtCitGVU5DOnBlZF9kaXNrX2dldF9tYXhfcGFydGl0aW9uX2dlb21ldHJ5CitGVU5DOnBlZF9kaXNrX2dldF9tYXhfcHJpbWFyeV9wYXJ0aXRpb25fY291bnQKK0ZVTkM6cGVkX2Rpc2tfZ2V0X3BhcnRpdGlvbgorRlVOQzpwZWRfZGlza19nZXRfcGFydGl0aW9uX2J5X3NlY3RvcgorRlVOQzpwZWRfZGlza19nZXRfcHJpbWFyeV9wYXJ0aXRpb25fY291bnQKK0ZVTkM6cGVkX2Rpc2tfZ3B0X2RvbmUKK0ZVTkM6cGVkX2Rpc2tfZ3B0X2luaXQKK0ZVTkM6cGVkX2Rpc2tfbG9vcF9kb25lCitGVU5DOnBlZF9kaXNrX2xvb3BfaW5pdAorRlVOQzpwZWRfZGlza19tYWNfZG9uZQorRlVOQzpwZWRfZGlza19tYWNfaW5pdAorRlVOQzpwZWRfZGlza19tYXhpbWl6ZV9wYXJ0aXRpb24KK0ZVTkM6cGVkX2Rpc2tfbWluaW1pemVfZXh0ZW5kZWRfcGFydGl0aW9uCitGVU5DOnBlZF9kaXNrX21zZG9zX2RvbmUKK0ZVTkM6cGVkX2Rpc2tfbXNkb3NfaW5pdAorRlVOQzpwZWRfZGlza19uZXcKK0ZVTkM6cGVkX2Rpc2tfbmV3X2ZyZXNoCitGVU5DOnBlZF9kaXNrX25leHRfcGFydGl0aW9uCitGVU5DOnBlZF9kaXNrX3BjOThfZG9uZQorRlVOQzpwZWRfZGlza19wYzk4X2luaXQKK0ZVTkM6cGVkX2Rpc2tfcHJpbnQKK0ZVTkM6cGVkX2Rpc2tfcHJvYmUKK0ZVTkM6cGVkX2Rpc2tfcmVtb3ZlX3BhcnRpdGlvbgorRlVOQzpwZWRfZGlza19zZXRfcGFydGl0aW9uX2dlb20KK0ZVTkM6cGVkX2Rpc2tfc3VuX2RvbmUKK0ZVTkM6cGVkX2Rpc2tfc3VuX2luaXQKK0ZVTkM6cGVkX2Rpc2tfdHlwZV9jaGVja19mZWF0dXJlCitGVU5DOnBlZF9kaXNrX3R5cGVfZ2V0CitGVU5DOnBlZF9kaXNrX3R5cGVfZ2V0X25leHQKK0ZVTkM6cGVkX2Rpc2tfdHlwZV9yZWdpc3RlcgorRlVOQzpwZWRfZGlza190eXBlX3VucmVnaXN0ZXIKK0ZVTkM6cGVkX2Rpdl9yb3VuZF90b19uZWFyZXN0CitGVU5DOnBlZF9kaXZfcm91bmRfdXAKK0ZVTkM6cGVkX2V4Y2VwdGlvbl9jYXRjaAorRlVOQzpwZWRfZXhjZXB0aW9uX2ZldGNoX2FsbAorRlVOQzpwZWRfZXhjZXB0aW9uX2dldF9vcHRpb25fc3RyaW5nCitGVU5DOnBlZF9leGNlcHRpb25fZ2V0X3R5cGVfc3RyaW5nCitGVU5DOnBlZF9leGNlcHRpb25fbGVhdmVfYWxsCitGVU5DOnBlZF9leGNlcHRpb25fcmV0aHJvdworRlVOQzpwZWRfZXhjZXB0aW9uX3NldF9oYW5kbGVyCitGVU5DOnBlZF9leGNlcHRpb25fdGhyb3cKK0ZVTkM6cGVkX2ZpbGVfc3lzdGVtX2FtaWdhX2RvbmUKK0ZVTkM6cGVkX2ZpbGVfc3lzdGVtX2FtaWdhX2luaXQKK0ZVTkM6cGVkX2ZpbGVfc3lzdGVtX2NoZWNrCitGVU5DOnBlZF9maWxlX3N5c3RlbV9jbG9iYmVyCitGVU5DOnBlZF9maWxlX3N5c3RlbV9jbG9zZQorRlVOQzpwZWRfZmlsZV9zeXN0ZW1fY29weQorRlVOQzpwZWRfZmlsZV9zeXN0ZW1fY3JlYXRlCitGVU5DOnBlZF9maWxlX3N5c3RlbV9leHQyX2RvbmUKK0ZVTkM6cGVkX2ZpbGVfc3lzdGVtX2V4dDJfaW5pdAorRlVOQzpwZWRfZmlsZV9zeXN0ZW1fZmF0X2RvbmUKK0ZVTkM6cGVkX2ZpbGVfc3lzdGVtX2ZhdF9pbml0CitGVU5DOnBlZF9maWxlX3N5c3RlbV9nZXRfY29weV9jb25zdHJhaW50CitGVU5DOnBlZF9maWxlX3N5c3RlbV9nZXRfY3JlYXRlX2NvbnN0cmFpbnQKK0ZVTkM6cGVkX2ZpbGVfc3lzdGVtX2dldF9yZXNpemVfY29uc3RyYWludAorRlVOQzpwZWRfZmlsZV9zeXN0ZW1faGZzX2RvbmUKK0ZVTkM6cGVkX2ZpbGVfc3lzdGVtX2hmc19pbml0CitGVU5DOnBlZF9maWxlX3N5c3RlbV9qZnNfZG9uZQorRlVOQzpwZWRfZmlsZV9zeXN0ZW1famZzX2luaXQKK0ZVTkM6cGVkX2ZpbGVfc3lzdGVtX2xpbnV4X3N3YXBfZG9uZQorRlVOQzpwZWRfZmlsZV9zeXN0ZW1fbGludXhfc3dhcF9pbml0CitGVU5DOnBlZF9maWxlX3N5c3RlbV9udGZzX2RvbmUKK0ZVTkM6cGVkX2ZpbGVfc3lzdGVtX250ZnNfaW5pdAorRlVOQzpwZWRfZmlsZV9zeXN0ZW1fb3BlbgorRlVOQzpwZWRfZmlsZV9zeXN0ZW1fcHJvYmUKK0ZVTkM6cGVkX2ZpbGVfc3lzdGVtX3Byb2JlX3NwZWNpZmljCitGVU5DOnBlZF9maWxlX3N5c3RlbV9yZWlzZXJmc19kb25lCitGVU5DOnBlZF9maWxlX3N5c3RlbV9yZWlzZXJmc19pbml0CitGVU5DOnBlZF9maWxlX3N5c3RlbV9yZXNpemUKK0ZVTkM6cGVkX2ZpbGVfc3lzdGVtX3R5cGVfZ2V0CitGVU5DOnBlZF9maWxlX3N5c3RlbV90eXBlX2dldF9uZXh0CitGVU5DOnBlZF9maWxlX3N5c3RlbV90eXBlX3JlZ2lzdGVyCitGVU5DOnBlZF9maWxlX3N5c3RlbV90eXBlX3VucmVnaXN0ZXIKK0ZVTkM6cGVkX2ZpbGVfc3lzdGVtX3Vmc19kb25lCitGVU5DOnBlZF9maWxlX3N5c3RlbV91ZnNfaW5pdAorRlVOQzpwZWRfZmlsZV9zeXN0ZW1feGZzX2RvbmUKK0ZVTkM6cGVkX2ZpbGVfc3lzdGVtX3hmc19pbml0CitGVU5DOnBlZF9mcmVlCitGVU5DOnBlZF9nZW9tZXRyeV9jaGVjaworRlVOQzpwZWRfZ2VvbWV0cnlfZGVzdHJveQorRlVOQzpwZWRfZ2VvbWV0cnlfZHVwbGljYXRlCitGVU5DOnBlZF9nZW9tZXRyeV9pbml0CitGVU5DOnBlZF9nZW9tZXRyeV9pbnRlcnNlY3QKK0ZVTkM6cGVkX2dlb21ldHJ5X21hcAorRlVOQzpwZWRfZ2VvbWV0cnlfbmV3CitGVU5DOnBlZF9nZW9tZXRyeV9yZWFkCitGVU5DOnBlZF9nZW9tZXRyeV9zZXQKK0ZVTkM6cGVkX2dlb21ldHJ5X3NldF9lbmQKK0ZVTkM6cGVkX2dlb21ldHJ5X3NldF9zdGFydAorRlVOQzpwZWRfZ2VvbWV0cnlfc3luYworRlVOQzpwZWRfZ2VvbWV0cnlfc3luY19mYXN0CitGVU5DOnBlZF9nZW9tZXRyeV90ZXN0X2VxdWFsCitGVU5DOnBlZF9nZW9tZXRyeV90ZXN0X2luc2lkZQorRlVOQzpwZWRfZ2VvbWV0cnlfdGVzdF9vdmVybGFwCitGVU5DOnBlZF9nZW9tZXRyeV90ZXN0X3NlY3Rvcl9pbnNpZGUKK0ZVTkM6cGVkX2dlb21ldHJ5X3dyaXRlCitGVU5DOnBlZF9nZXRfdmVyc2lvbgorRlVOQzpwZWRfZ3JlYXRlc3RfY29tbW9uX2Rpdmlzb3IKK0ZVTkM6cGVkX21hbGxvYworRlVOQzpwZWRfcGFydGl0aW9uX2Rlc3Ryb3kKK0ZVTkM6cGVkX3BhcnRpdGlvbl9mbGFnX2dldF9ieV9uYW1lCitGVU5DOnBlZF9wYXJ0aXRpb25fZmxhZ19nZXRfbmFtZQorRlVOQzpwZWRfcGFydGl0aW9uX2ZsYWdfbmV4dAorRlVOQzpwZWRfcGFydGl0aW9uX2dldF9mbGFnCitGVU5DOnBlZF9wYXJ0aXRpb25fZ2V0X25hbWUKK0ZVTkM6cGVkX3BhcnRpdGlvbl9nZXRfcGF0aAorRlVOQzpwZWRfcGFydGl0aW9uX2lzX2FjdGl2ZQorRlVOQzpwZWRfcGFydGl0aW9uX2lzX2J1c3kKK0ZVTkM6cGVkX3BhcnRpdGlvbl9pc19mbGFnX2F2YWlsYWJsZQorRlVOQzpwZWRfcGFydGl0aW9uX25ldworRlVOQzpwZWRfcGFydGl0aW9uX3ByaW50CitGVU5DOnBlZF9wYXJ0aXRpb25fc2V0X2ZsYWcKK0ZVTkM6cGVkX3BhcnRpdGlvbl9zZXRfbmFtZQorRlVOQzpwZWRfcGFydGl0aW9uX3NldF9zeXN0ZW0KK0ZVTkM6cGVkX3BhcnRpdGlvbl90eXBlX2dldF9uYW1lCitGVU5DOnBlZF9yZWFsbG9jCitGVU5DOnBlZF9yZWdpc3Rlcl9kaXNrX3R5cGUKK0ZVTkM6cGVkX3JvdW5kX2Rvd25fdG8KK0ZVTkM6cGVkX3JvdW5kX3RvX25lYXJlc3QKK0ZVTkM6cGVkX3JvdW5kX3VwX3RvCitGVU5DOnBlZF9zZXRfYXJjaGl0ZWN0dXJlCitGVU5DOnBlZF90aW1lcl9kZXN0cm95CitGVU5DOnBlZF90aW1lcl9kZXN0cm95X25lc3RlZAorRlVOQzpwZWRfdGltZXJfbmV3CitGVU5DOnBlZF90aW1lcl9uZXdfbmVzdGVkCitGVU5DOnBlZF90aW1lcl9yZXNldAorRlVOQzpwZWRfdGltZXJfc2V0X3N0YXRlX25hbWUKK0ZVTkM6cGVkX3RpbWVyX3RvdWNoCitGVU5DOnBlZF90aW1lcl91cGRhdGUKK0ZVTkM6cGVkX3VuaXRfZm9ybWF0CitGVU5DOnBlZF91bml0X2Zvcm1hdF9ieXRlCitGVU5DOnBlZF91bml0X2Zvcm1hdF9jdXN0b20KK0ZVTkM6cGVkX3VuaXRfZm9ybWF0X2N1c3RvbV9ieXRlCitGVU5DOnBlZF91bml0X2dldF9ieV9uYW1lCitGVU5DOnBlZF91bml0X2dldF9kZWZhdWx0CitGVU5DOnBlZF91bml0X2dldF9uYW1lCitGVU5DOnBlZF91bml0X2dldF9zaXplCitGVU5DOnBlZF91bml0X3BhcnNlCitGVU5DOnBlZF91bml0X3BhcnNlX2N1c3RvbQorRlVOQzpwZWRfdW5pdF9zZXRfZGVmYXVsdAorRlVOQzpwZWRfdW5yZWdpc3Rlcl9kaXNrX3R5cGUKK0ZVTkM6cmF3X3BhcnRfcGFyc2UKK05PVFlQRTpfX2Jzc19zdGFydAorTk9UWVBFOl9lZGF0YQorTk9UWVBFOl9lbmQKK09CSkVDVDoxMjpsaW51eF9kaXNrX29wcworT0JKRUNUOjE2Ol9hZmZzMF90eXBlCitPQkpFQ1Q6MTY6X2FmZnMxX3R5cGUKK09CSkVDVDoxNjpfYWZmczJfdHlwZQorT0JKRUNUOjE2Ol9hZmZzM190eXBlCitPQkpFQ1Q6MTY6X2FmZnM0X3R5cGUKK09CSkVDVDoxNjpfYWZmczVfdHlwZQorT0JKRUNUOjE2Ol9hZmZzNl90eXBlCitPQkpFQ1Q6MTY6X2FmZnM3X3R5cGUKK09CSkVDVDoxNjpfYW11ZnMwX3R5cGUKK09CSkVDVDoxNjpfYW11ZnMxX3R5cGUKK09CSkVDVDoxNjpfYW11ZnMyX3R5cGUKK09CSkVDVDoxNjpfYW11ZnMzX3R5cGUKK09CSkVDVDoxNjpfYW11ZnM0X3R5cGUKK09CSkVDVDoxNjpfYW11ZnM1X3R5cGUKK09CSkVDVDoxNjpfYW11ZnNfdHlwZQorT0JKRUNUOjE2Ol9hcGZzMV90eXBlCitPQkpFQ1Q6MTY6X2FwZnMyX3R5cGUKK09CSkVDVDoxNjpfYXNmc190eXBlCitPQkpFQ1Q6MTY6ZmF0MTZfdHlwZQorT0JKRUNUOjE2OmZhdDMyX3R5cGUKK09CSkVDVDoxOmZhdDE2CitPQkpFQ1Q6MjQ6b3BzCitPQkpFQ1Q6MzI0Onhmc3N0YXRzCitPQkpFQ1Q6NDpleHQyX2J1ZmZlcl9jYWNoZV9wb29sX3NpemUKK09CSkVDVDo0OmV4dDJfaGFzaF9iaXRzCitPQkpFQ1Q6NDpleHQyX3JlbG9jYXRvcl9wb29sX3NpemUKK09CSkVDVDo0Omhmc19ibG9jaworT0JKRUNUOjQ6aGZzX2Jsb2NrX2NvdW50CitPQkpFQ1Q6NDpoZnNwX2Jsb2NrCitPQkpFQ1Q6NDpoZnNwX2Jsb2NrX2NvdW50CitPQkpFQ1Q6NDpwZWRfYWxpZ25tZW50X2FueQorT0JKRUNUOjQ6cGVkX2FsaWdubWVudF9ub25lCitPQkpFQ1Q6NDpwZWRfYXJjaGl0ZWN0dXJlCitPQkpFQ1Q6NDpwZWRfZXhjZXB0aW9uCitPQkpFQ1Q6ODpfYml0bWFwCitPQkpFQ1Q6ODpwZWRfbGludXhfYXJjaApkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L3NjcmlwdHMvZXh0cmFjdF9zeW12ZXJzIGIvcGFydGVkLTEuOC43L3NjcmlwdHMvZXh0cmFjdF9zeW12ZXJzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhhNzRkYjkKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44Ljcvc2NyaXB0cy9leHRyYWN0X3N5bXZlcnMKQEAgLTAsMCArMSw2NyBAQAorIyEvYmluL3NoCisKKyMgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisjIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorIyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyMgU29mdHdhcmUgRm91bmRhdGlvbiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLAorIyBVU0EuCisjCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorIyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisjIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisjIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworIyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorIyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisjIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorIyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisKKworaWYgdGVzdCAkeyN9IC1sdCAyIHx8IHRlc3QgJDEgPSAnLS1oZWxwJzsgdGhlbgorICBlY2hvICJVc2FnZTogIGV4dHJhY3Rfc3ltdmVycyAgc2hhcmVkX2xpYiBvdXRwdXRfZmlsZSIgMT4mMgorICBleGl0IDEKK2ZpCisKK2xpYj0kMQorb3V0cHV0PSQyCisKKyMgR05VIGJpbnV0aWxzLCBzb21ld2hlcmUgYWZ0ZXIgdmVyc2lvbiAyLjExLjIsIHJlcXVpcmVzIC1XLy0td2lkZSB0byBhdm9pZAorIyBkZWZhdWx0IGxpbmUgdHJ1bmNhdGlvbi4gIC1XIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIHRydW5jYXRpb24gZGlkIG5vdCBvY2N1cgorIyBieSBkZWZhdWx0IGJlZm9yZSB0aGF0IHBvaW50LgorcmVhZGVsZj0icmVhZGVsZiAtLXN5bWJvbHMiCitpZiByZWFkZWxmIC0taGVscCB8IGdyZXAgLS0gLS13aWRlID4gL2Rldi9udWxsOyB0aGVuCisgICAgcmVhZGVsZj0iJHJlYWRlbGYgLS13aWRlIgorZmkKKworIyBUaGlzIGF2b2lkcyB3ZWlyZCBzb3J0aW5nIHByb2JsZW1zIGxhdGVyLgorTENfQUxMPUMKK2V4cG9ydCBMQ19BTEwKK0xBTkc9QworZXhwb3J0IExBTkcKKwordG1wPWV4dHJhY3QuJCQKKworJHtyZWFkZWxmfSAke2xpYn0gfCBzZWQgJy9cLmR5bnN5bS8sL14kL3A7ZCcgfCBlZ3JlcCAtdiAnIChMT0NBTHxVTkQpICcgfFwKK2F3ayAneyBpZiAoJDQgPT0gIkZVTkMiIHx8ICQ0ID09ICJOT1RZUEUiKQorICAgICAgICAgcHJpbnRmICIlczolc1xuIiwgJDQsICQ4OworICAgICAgIGVsc2UgaWYgKCQ0ID09ICJPQkpFQ1QiKQorICAgICAgICAgcHJpbnRmICIlczolczolc1xuIiwgJDQsICQzLCAkODsKKyAgICAgfScgfCBzb3J0IHwgdW5pcSA+ICR0bXAgMj4mMQorIyAgICAgICBlbHNlIHByaW50ZiAiSHVoPyAgV2hhdCBpcyAlcz9cbiIsICQ4OworCisKKyMgSSB0aGluayB3ZSdsbCBiZSBkb2luZyBzb21lIG1vcmUgd2l0aCB0aGlzIGZpbGUsIGJ1dCBmb3Igbm93LCBkdW1wLgorbXYgJHRtcCAkb3V0cHV0CisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L3Rlc3RzL01ha2VmaWxlLmFtIGIvcGFydGVkLTEuOC43L3Rlc3RzL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NDhhZTIKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvdGVzdHMvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSwxMCBAQAorVEVTVFMgPSBcCisgIHQwMDAwLWJhc2ljLnNoIFwKKyAgdDEwMDAtbWtwYXJ0ZnMuc2ggXAorICB0MjAwMC1ta2ZzLnNoCisKK1RFU1RTX0VOVklST05NRU5UID0gXAorICBQQVRIPSJgcHdkYC8uLi9wYXJ0ZWQkKFBBVEhfU0VQQVJBVE9SKSQkUEFUSCIKKworRVhUUkFfRElTVCA9IFwKKyAgJChURVNUUykgdGVzdC1saWIuc2gKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy90ZXN0cy9NYWtlZmlsZS5pbiBiL3BhcnRlZC0xLjguNy90ZXN0cy9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjE1NGRlCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L3Rlc3RzL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNTk1IEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjEwIGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitzdWJkaXIgPSB0ZXN0cworRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9hYnNvbHV0ZS1oZWFkZXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvYWxsb2NhLm00ICQodG9wX3NyY2RpcikvbTQvYXNzZXJ0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2F0ZXhpdC5tNCAkKHRvcF9zcmNkaXIpL200L2NhbGxvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jbG9zZS1zdHJlYW0ubTQgJCh0b3Bfc3JjZGlyKS9tNC9jbG9zZW91dC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jb2Rlc2V0Lm00ICQodG9wX3NyY2RpcikvbTQvY29uZmlnLWgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZGlybmFtZS5tNCAkKHRvcF9zcmNkaXIpL200L2Rvcy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9kb3VibGUtc2xhc2gtcm9vdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9lcnJvci5tNCAkKHRvcF9zcmNkaXIpL200L2V4aXRmYWlsLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2V4dGVuc2lvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9mcGVuZGluZy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9mcmVlLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0b3B0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgJCh0b3Bfc3JjZGlyKS9tNC9nbGliYzIxLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2dudWxpYi1jb21tb24ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvZ251bGliLWNvbXAubTQgJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pbmxpbmUubTQgJCh0b3Bfc3JjZGlyKS9tNC9pbnR0eXBlcy1wcmkubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaW50dHlwZXMubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItaWdub3JlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbG9jYWxjaGFyc2V0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xvbmctb3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2xvbmdsb25nLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21icnRvd2MubTQgJCh0b3Bfc3JjZGlyKS9tNC9tYnN0YXRlX3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWVtY2hyLm00ICQodG9wX3NyY2RpcikvbTQvbWVtY21wLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21lbWNweS5tNCAkKHRvcF9zcmNkaXIpL200L21lbW1vdmUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWVtc2V0Lm00ICQodG9wX3NyY2RpcikvbTQvbmxzLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3BvLm00ICQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcXVvdGVhcmcubTQgJCh0b3Bfc3JjZGlyKS9tNC9yZWdleC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9yZW5hbWUubTQgJCh0b3Bfc3JjZGlyKS9tNC9ycG1hdGNoLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3NhZmUtcmVhZC5tNCAkKHRvcF9zcmNkaXIpL200L3NhZmUtd3JpdGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3NpemVfdC5tNCAkKHRvcF9zcmNkaXIpL200L3N0ZGFyZy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdGRib29sLm00ICQodG9wX3NyY2RpcikvbTQvc3RkaW50Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3N0ZGxpYl9oLm00ICQodG9wX3NyY2RpcikvbTQvc3RyY3Nwbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdHJpbmdfaC5tNCAkKHRvcF9zcmNkaXIpL200L3N0cm5kdXAubTQgXAorCSQodG9wX3NyY2RpcikvbTQvc3Rybmxlbi5tNCAkKHRvcF9zcmNkaXIpL200L3N0cnRvZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9zdHJ0b2wubTQgJCh0b3Bfc3JjZGlyKS9tNC91bmlzdGRfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC91dGltYnVmLm00ICQodG9wX3NyY2RpcikvbTQvdXRpbWUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdXRpbWVzLW51bGwubTQgJCh0b3Bfc3JjZGlyKS9tNC93Y2hhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC93Y3R5cGUubTQgJCh0b3Bfc3JjZGlyKS9tNC93aW50X3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQveGFsbG9jLm00ICQodG9wX3NyY2RpcikvbTQveHN0cm5kdXAubTQgXAorCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCithbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorCSQoQUNMT0NBTF9NNCkKK21raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK1NPVVJDRVMgPQorRElTVF9TT1VSQ0VTID0KK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitBQlNPTFVURV9JTlRUWVBFU19IID0gQEFCU09MVVRFX0lOVFRZUEVTX0hACitBQlNPTFVURV9TVERJTlRfSCA9IEBBQlNPTFVURV9TVERJTlRfSEAKK0FCU09MVVRFX1NURExJQl9IID0gQEFCU09MVVRFX1NURExJQl9IQAorQUJTT0xVVEVfU1RSSU5HX0ggPSBAQUJTT0xVVEVfU1RSSU5HX0hACitBQlNPTFVURV9VTklTVERfSCA9IEBBQlNPTFVURV9VTklTVERfSEAKK0FCU09MVVRFX1dDSEFSX0ggPSBAQUJTT0xVVEVfV0NIQVJfSEAKK0FCU09MVVRFX1dDVFlQRV9IID0gQEFCU09MVVRFX1dDVFlQRV9IQAorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQUxMT0NBID0gQEFMTE9DQUAKK0FMTE9DQV9IID0gQEFMTE9DQV9IQAorQU1UQVIgPSBAQU1UQVJACitBUiA9IEBBUkAKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBV0sgPSBAQVdLQAorQklUU0laRU9GX1BUUkRJRkZfVCA9IEBCSVRTSVpFT0ZfUFRSRElGRl9UQAorQklUU0laRU9GX1NJR19BVE9NSUNfVCA9IEBCSVRTSVpFT0ZfU0lHX0FUT01JQ19UQAorQklUU0laRU9GX1NJWkVfVCA9IEBCSVRTSVpFT0ZfU0laRV9UQAorQklUU0laRU9GX1dDSEFSX1QgPSBAQklUU0laRU9GX1dDSEFSX1RACitCSVRTSVpFT0ZfV0lOVF9UID0gQEJJVFNJWkVPRl9XSU5UX1RACitCVUlMRElORk8gPSBAQlVJTERJTkZPQAorQ0MgPSBAQ0NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NIRUNLX0NGTEFHUyA9IEBDSEVDS19DRkxBR1NACitDSEVDS19MSUJTID0gQENIRUNLX0xJQlNACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitETF9MSUJTID0gQERMX0xJQlNACitETV9MSUJTID0gQERNX0xJQlNACitFQ0hPID0gQEVDSE9ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VYRUVYVCA9IEBFWEVFWFRACitGNzcgPSBARjc3QAorRkZMQUdTID0gQEZGTEFHU0AKK0dFVE9QVF9IID0gQEdFVE9QVF9IQAorR0xJQkMyMSA9IEBHTElCQzIxQAorR01TR0ZNVCA9IEBHTVNHRk1UQAorR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACitHTlVMSUJfQ0hPV04gPSBAR05VTElCX0NIT1dOQAorR05VTElCX0RVUDIgPSBAR05VTElCX0RVUDJACitHTlVMSUJfRkNIRElSID0gQEdOVUxJQl9GQ0hESVJACitHTlVMSUJfRlRSVU5DQVRFID0gQEdOVUxJQl9GVFJVTkNBVEVACitHTlVMSUJfR0VUQ1dEID0gQEdOVUxJQl9HRVRDV0RACitHTlVMSUJfR0VUTE9HSU5fUiA9IEBHTlVMSUJfR0VUTE9HSU5fUkAKK0dOVUxJQl9HRVRTVUJPUFQgPSBAR05VTElCX0dFVFNVQk9QVEAKK0dOVUxJQl9JTUFYQUJTID0gQEdOVUxJQl9JTUFYQUJTQAorR05VTElCX0lNQVhESVYgPSBAR05VTElCX0lNQVhESVZACitHTlVMSUJfTUJTQ0FTRUNNUCA9IEBHTlVMSUJfTUJTQ0FTRUNNUEAKK0dOVUxJQl9NQlNDQVNFU1RSID0gQEdOVUxJQl9NQlNDQVNFU1RSQAorR05VTElCX01CU0NIUiA9IEBHTlVMSUJfTUJTQ0hSQAorR05VTElCX01CU0NTUE4gPSBAR05VTElCX01CU0NTUE5ACitHTlVMSUJfTUJTTEVOID0gQEdOVUxJQl9NQlNMRU5ACitHTlVMSUJfTUJTTkNBU0VDTVAgPSBAR05VTElCX01CU05DQVNFQ01QQAorR05VTElCX01CU1BCUksgPSBAR05VTElCX01CU1BCUktACitHTlVMSUJfTUJTUENBU0VDTVAgPSBAR05VTElCX01CU1BDQVNFQ01QQAorR05VTElCX01CU1JDSFIgPSBAR05VTElCX01CU1JDSFJACitHTlVMSUJfTUJTU0VQID0gQEdOVUxJQl9NQlNTRVBACitHTlVMSUJfTUJTU1BOID0gQEdOVUxJQl9NQlNTUE5ACitHTlVMSUJfTUJTU1RSID0gQEdOVUxJQl9NQlNTVFJACitHTlVMSUJfTUJTVE9LX1IgPSBAR05VTElCX01CU1RPS19SQAorR05VTElCX01FTU1FTSA9IEBHTlVMSUJfTUVNTUVNQAorR05VTElCX01FTVBDUFkgPSBAR05VTElCX01FTVBDUFlACitHTlVMSUJfTUVNUkNIUiA9IEBHTlVMSUJfTUVNUkNIUkAKK0dOVUxJQl9NS0RURU1QID0gQEdOVUxJQl9NS0RURU1QQAorR05VTElCX01LU1RFTVAgPSBAR05VTElCX01LU1RFTVBACitHTlVMSUJfUkVBRExJTksgPSBAR05VTElCX1JFQURMSU5LQAorR05VTElCX1NMRUVQID0gQEdOVUxJQl9TTEVFUEAKK0dOVUxJQl9TVFBDUFkgPSBAR05VTElCX1NUUENQWUAKK0dOVUxJQl9TVFBOQ1BZID0gQEdOVUxJQl9TVFBOQ1BZQAorR05VTElCX1NUUkNBU0VTVFIgPSBAR05VTElCX1NUUkNBU0VTVFJACitHTlVMSUJfU1RSQ0hSTlVMID0gQEdOVUxJQl9TVFJDSFJOVUxACitHTlVMSUJfU1RSRFVQID0gQEdOVUxJQl9TVFJEVVBACitHTlVMSUJfU1RSTkRVUCA9IEBHTlVMSUJfU1RSTkRVUEAKK0dOVUxJQl9TVFJOTEVOID0gQEdOVUxJQl9TVFJOTEVOQAorR05VTElCX1NUUlBCUksgPSBAR05VTElCX1NUUlBCUktACitHTlVMSUJfU1RSU0VQID0gQEdOVUxJQl9TVFJTRVBACitHTlVMSUJfU1RSVE9JTUFYID0gQEdOVUxJQl9TVFJUT0lNQVhACitHTlVMSUJfU1RSVE9LX1IgPSBAR05VTElCX1NUUlRPS19SQAorR05VTElCX1NUUlRPVU1BWCA9IEBHTlVMSUJfU1RSVE9VTUFYQAorR1JFUCA9IEBHUkVQQAorSEFWRV9ERUNMX0dFVExPR0lOX1IgPSBASEFWRV9ERUNMX0dFVExPR0lOX1JACitIQVZFX0RFQ0xfSU1BWEFCUyA9IEBIQVZFX0RFQ0xfSU1BWEFCU0AKK0hBVkVfREVDTF9JTUFYRElWID0gQEhBVkVfREVDTF9JTUFYRElWQAorSEFWRV9ERUNMX01FTU1FTSA9IEBIQVZFX0RFQ0xfTUVNTUVNQAorSEFWRV9ERUNMX01FTVJDSFIgPSBASEFWRV9ERUNMX01FTVJDSFJACitIQVZFX0RFQ0xfU1RSRFVQID0gQEhBVkVfREVDTF9TVFJEVVBACitIQVZFX0RFQ0xfU1RSTkNBU0VDTVAgPSBASEFWRV9ERUNMX1NUUk5DQVNFQ01QQAorSEFWRV9ERUNMX1NUUk5EVVAgPSBASEFWRV9ERUNMX1NUUk5EVVBACitIQVZFX0RFQ0xfU1RSTkxFTiA9IEBIQVZFX0RFQ0xfU1RSTkxFTkAKK0hBVkVfREVDTF9TVFJUT0lNQVggPSBASEFWRV9ERUNMX1NUUlRPSU1BWEAKK0hBVkVfREVDTF9TVFJUT0tfUiA9IEBIQVZFX0RFQ0xfU1RSVE9LX1JACitIQVZFX0RFQ0xfU1RSVE9VTUFYID0gQEhBVkVfREVDTF9TVFJUT1VNQVhACitIQVZFX0RVUDIgPSBASEFWRV9EVVAyQAorSEFWRV9GVFJVTkNBVEUgPSBASEFWRV9GVFJVTkNBVEVACitIQVZFX0dFVFNVQk9QVCA9IEBIQVZFX0dFVFNVQk9QVEAKK0hBVkVfSU5UVFlQRVNfSCA9IEBIQVZFX0lOVFRZUEVTX0hACitIQVZFX0lTV0NOVFJMID0gQEhBVkVfSVNXQ05UUkxACitIQVZFX0xPTkdfTE9OR19JTlQgPSBASEFWRV9MT05HX0xPTkdfSU5UQAorSEFWRV9NRU1QQ1BZID0gQEhBVkVfTUVNUENQWUAKK0hBVkVfTUtEVEVNUCA9IEBIQVZFX01LRFRFTVBACitIQVZFX1JFQURMSU5LID0gQEhBVkVfUkVBRExJTktACitIQVZFX1NJR05FRF9TSUdfQVRPTUlDX1QgPSBASEFWRV9TSUdORURfU0lHX0FUT01JQ19UQAorSEFWRV9TSUdORURfV0NIQVJfVCA9IEBIQVZFX1NJR05FRF9XQ0hBUl9UQAorSEFWRV9TSUdORURfV0lOVF9UID0gQEhBVkVfU0lHTkVEX1dJTlRfVEAKK0hBVkVfU0xFRVAgPSBASEFWRV9TTEVFUEAKK0hBVkVfU1RESU5UX0ggPSBASEFWRV9TVERJTlRfSEAKK0hBVkVfU1RQQ1BZID0gQEhBVkVfU1RQQ1BZQAorSEFWRV9TVFBOQ1BZID0gQEhBVkVfU1RQTkNQWUAKK0hBVkVfU1RSQ0FTRUNNUCA9IEBIQVZFX1NUUkNBU0VDTVBACitIQVZFX1NUUkNBU0VTVFIgPSBASEFWRV9TVFJDQVNFU1RSQAorSEFWRV9TVFJDSFJOVUwgPSBASEFWRV9TVFJDSFJOVUxACitIQVZFX1NUUk5EVVAgPSBASEFWRV9TVFJORFVQQAorSEFWRV9TVFJQQlJLID0gQEhBVkVfU1RSUEJSS0AKK0hBVkVfU1RSU0VQID0gQEhBVkVfU1RSU0VQQAorSEFWRV9TWVNfQklUWVBFU19IID0gQEhBVkVfU1lTX0JJVFlQRVNfSEAKK0hBVkVfU1lTX0lOVFRZUEVTX0ggPSBASEFWRV9TWVNfSU5UVFlQRVNfSEAKK0hBVkVfU1lTX1RZUEVTX0ggPSBASEFWRV9TWVNfVFlQRVNfSEAKK0hBVkVfVU5JU1REX0ggPSBASEFWRV9VTklTVERfSEAKK0hBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVCA9IEBIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlRACitIQVZFX1dDVFlQRV9IID0gQEhBVkVfV0NUWVBFX0hACitIQVZFX1dJTlRfVCA9IEBIQVZFX1dJTlRfVEAKK0hBVkVfX0JPT0wgPSBASEFWRV9fQk9PTEAKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSU5UTElOQ1MgPSBASU5UTElOQ1NACitJTlRMTElCUyA9IEBJTlRMTElCU0AKK0lOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKK0lOVFRZUEVTX0ggPSBASU5UVFlQRVNfSEAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQklDT05WID0gQExJQklDT05WQAorTElCSU5UTCA9IEBMSUJJTlRMQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTE5fUyA9IEBMTl9TQAorTFRBTExPQ0EgPSBATFRBTExPQ0FACitMVExJQklDT05WID0gQExUTElCSUNPTlZACitMVExJQklOVEwgPSBATFRMSUJJTlRMQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK0xUX0FHRSA9IEBMVF9BR0VACitMVF9DVVJSRU5UID0gQExUX0NVUlJFTlRACitMVF9SRUxFQVNFID0gQExUX1JFTEVBU0VACitMVF9SRVZJU0lPTiA9IEBMVF9SRVZJU0lPTkAKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTVNHRk1UID0gQE1TR0ZNVEAKK01TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKK01TR01FUkdFID0gQE1TR01FUkdFQAorT0JKRVhUID0gQE9CSkVYVEAKK09TID0gQE9TQAorT1NfTElCUyA9IEBPU19MSUJTQAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBUlRFRExERkxBR1MgPSBAUEFSVEVETERGTEFHU0AKK1BBUlRFRF9MSUJTID0gQFBBUlRFRF9MSUJTQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQT1NVQiA9IEBQT1NVQkAKK1BPV19MSUIgPSBAUE9XX0xJQkAKK1BSSVBUUl9QUkVGSVggPSBAUFJJUFRSX1BSRUZJWEAKK1BSSV9NQUNST1NfQlJPS0VOID0gQFBSSV9NQUNST1NfQlJPS0VOQAorUFRSRElGRl9UX1NVRkZJWCA9IEBQVFJESUZGX1RfU1VGRklYQAorUkFOTElCID0gQFJBTkxJQkAKK1JFSVNFUl9MSUJTID0gQFJFSVNFUl9MSUJTQAorUkVQTEFDRV9DSE9XTiA9IEBSRVBMQUNFX0NIT1dOQAorUkVQTEFDRV9GQ0hESVIgPSBAUkVQTEFDRV9GQ0hESVJACitSRVBMQUNFX0dFVENXRCA9IEBSRVBMQUNFX0dFVENXREAKK1JFUExBQ0VfTUtTVEVNUCA9IEBSRVBMQUNFX01LU1RFTVBACitTRUQgPSBAU0VEQAorU0VMSU5VWF9MSUJTID0gQFNFTElOVVhfTElCU0AKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTSUdfQVRPTUlDX1RfU1VGRklYID0gQFNJR19BVE9NSUNfVF9TVUZGSVhACitTSVpFX1RfU1VGRklYID0gQFNJWkVfVF9TVUZGSVhACitTVERCT09MX0ggPSBAU1REQk9PTF9IQAorU1RESU5UX0ggPSBAU1RESU5UX0hACitTVFJJUCA9IEBTVFJJUEAKK1VTRV9OTFMgPSBAVVNFX05MU0AKK1VVSURfTElCUyA9IEBVVUlEX0xJQlNACitWRVJTSU9OID0gQFZFUlNJT05ACitXQ0hBUl9IID0gQFdDSEFSX0hACitXQ0hBUl9UX1NVRkZJWCA9IEBXQ0hBUl9UX1NVRkZJWEAKK1dDVFlQRV9IID0gQFdDVFlQRV9IQAorV0lOVF9UX1NVRkZJWCA9IEBXSU5UX1RfU1VGRklYQAorWEdFVFRFWFQgPSBAWEdFVFRFWFRACitYR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9DWFggPSBAYWNfY3RfQ1hYQAorYWNfY3RfRjc3ID0gQGFjX2N0X0Y3N0AKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitnbF9MSUJPQkpTID0gQGdsX0xJQk9CSlNACitnbF9MVExJQk9CSlMgPSBAZ2xfTFRMSUJPQkpTQAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK1RFU1RTID0gXAorICB0MDAwMC1iYXNpYy5zaCBcCisgIHQxMDAwLW1rcGFydGZzLnNoIFwKKyAgdDIwMDAtbWtmcy5zaAorCitURVNUU19FTlZJUk9OTUVOVCA9IFwKKyAgUEFUSD0iYHB3ZGAvLi4vcGFydGVkJChQQVRIX1NFUEFSQVRPUikkJFBBVEgiCisKK0VYVFJBX0RJU1QgPSBcCisgICQoVEVTVFMpIHRlc3QtbGliLnNoCisKK2FsbDogYWxsLWFtCisKKy5TVUZGSVhFUzoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoIFwKKwkJJiYgZXhpdCAwOyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSAgdGVzdHMvTWFrZWZpbGUnOyBcCisJY2QgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWdudSAgdGVzdHMvTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6ICAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6ICAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKK21vc3RseWNsZWFuLWxpYnRvb2w6CisJLXJtIC1mICoubG8KKworY2xlYW4tbGlidG9vbDoKKwktcm0gLXJmIC5saWJzIF9saWJzCit0YWdzOiBUQUdTCitUQUdTOgorCitjdGFnczogQ1RBR1MKK0NUQUdTOgorCisKK2NoZWNrLVRFU1RTOiAkKFRFU1RTKQorCUBmYWlsZWQ9MDsgYWxsPTA7IHhmYWlsPTA7IHhwYXNzPTA7IHNraXA9MDsgd3M9J1sJIF0nOyBcCisJc3JjZGlyPSQoc3JjZGlyKTsgZXhwb3J0IHNyY2RpcjsgXAorCWxpc3Q9JyAkKFRFU1RTKSAnOyBcCisJaWYgdGVzdCAtbiAiJCRsaXN0IjsgdGhlbiBcCisJICBmb3IgdHN0IGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mIC4vJCR0c3Q7IHRoZW4gZGlyPS4vOyBcCisJICAgIGVsaWYgdGVzdCAtZiAkJHRzdDsgdGhlbiBkaXI9OyBcCisJICAgIGVsc2UgZGlyPSIkKHNyY2RpcikvIjsgZmk7IFwKKwkgICAgaWYgJChURVNUU19FTlZJUk9OTUVOVCkgJCR7ZGlyfSQkdHN0OyB0aGVuIFwKKwkgICAgICBhbGw9YGV4cHIgJCRhbGwgKyAxYDsgXAorCSAgICAgIGNhc2UgIiAkKFhGQUlMX1RFU1RTKSAiIGluIFwKKwkgICAgICAqJCR3cyQkdHN0JCR3cyopIFwKKwkJeHBhc3M9YGV4cHIgJCR4cGFzcyArIDFgOyBcCisJCWZhaWxlZD1gZXhwciAkJGZhaWxlZCArIDFgOyBcCisJCWVjaG8gIlhQQVNTOiAkJHRzdCI7IFwKKwkgICAgICA7OyBcCisJICAgICAgKikgXAorCQllY2hvICJQQVNTOiAkJHRzdCI7IFwKKwkgICAgICA7OyBcCisJICAgICAgZXNhYzsgXAorCSAgICBlbGlmIHRlc3QgJCQ/IC1uZSA3NzsgdGhlbiBcCisJICAgICAgYWxsPWBleHByICQkYWxsICsgMWA7IFwKKwkgICAgICBjYXNlICIgJChYRkFJTF9URVNUUykgIiBpbiBcCisJICAgICAgKiQkd3MkJHRzdCQkd3MqKSBcCisJCXhmYWlsPWBleHByICQkeGZhaWwgKyAxYDsgXAorCQllY2hvICJYRkFJTDogJCR0c3QiOyBcCisJICAgICAgOzsgXAorCSAgICAgICopIFwKKwkJZmFpbGVkPWBleHByICQkZmFpbGVkICsgMWA7IFwKKwkJZWNobyAiRkFJTDogJCR0c3QiOyBcCisJICAgICAgOzsgXAorCSAgICAgIGVzYWM7IFwKKwkgICAgZWxzZSBcCisJICAgICAgc2tpcD1gZXhwciAkJHNraXAgKyAxYDsgXAorCSAgICAgIGVjaG8gIlNLSVA6ICQkdHN0IjsgXAorCSAgICBmaTsgXAorCSAgZG9uZTsgXAorCSAgaWYgdGVzdCAiJCRmYWlsZWQiIC1lcSAwOyB0aGVuIFwKKwkgICAgaWYgdGVzdCAiJCR4ZmFpbCIgLWVxIDA7IHRoZW4gXAorCSAgICAgIGJhbm5lcj0iQWxsICQkYWxsIHRlc3RzIHBhc3NlZCI7IFwKKwkgICAgZWxzZSBcCisJICAgICAgYmFubmVyPSJBbGwgJCRhbGwgdGVzdHMgYmVoYXZlZCBhcyBleHBlY3RlZCAoJCR4ZmFpbCBleHBlY3RlZCBmYWlsdXJlcykiOyBcCisJICAgIGZpOyBcCisJICBlbHNlIFwKKwkgICAgaWYgdGVzdCAiJCR4cGFzcyIgLWVxIDA7IHRoZW4gXAorCSAgICAgIGJhbm5lcj0iJCRmYWlsZWQgb2YgJCRhbGwgdGVzdHMgZmFpbGVkIjsgXAorCSAgICBlbHNlIFwKKwkgICAgICBiYW5uZXI9IiQkZmFpbGVkIG9mICQkYWxsIHRlc3RzIGRpZCBub3QgYmVoYXZlIGFzIGV4cGVjdGVkICgkJHhwYXNzIHVuZXhwZWN0ZWQgcGFzc2VzKSI7IFwKKwkgICAgZmk7IFwKKwkgIGZpOyBcCisJICBkYXNoZXM9IiQkYmFubmVyIjsgXAorCSAgc2tpcHBlZD0iIjsgXAorCSAgaWYgdGVzdCAiJCRza2lwIiAtbmUgMDsgdGhlbiBcCisJICAgIHNraXBwZWQ9IigkJHNraXAgdGVzdHMgd2VyZSBub3QgcnVuKSI7IFwKKwkgICAgdGVzdCBgZWNobyAiJCRza2lwcGVkIiB8IHdjIC1jYCAtbGUgYGVjaG8gIiQkYmFubmVyIiB8IHdjIC1jYCB8fCBcCisJICAgICAgZGFzaGVzPSIkJHNraXBwZWQiOyBcCisJICBmaTsgXAorCSAgcmVwb3J0PSIiOyBcCisJICBpZiB0ZXN0ICIkJGZhaWxlZCIgLW5lIDAgJiYgdGVzdCAtbiAiJChQQUNLQUdFX0JVR1JFUE9SVCkiOyB0aGVuIFwKKwkgICAgcmVwb3J0PSJQbGVhc2UgcmVwb3J0IHRvICQoUEFDS0FHRV9CVUdSRVBPUlQpIjsgXAorCSAgICB0ZXN0IGBlY2hvICIkJHJlcG9ydCIgfCB3YyAtY2AgLWxlIGBlY2hvICIkJGJhbm5lciIgfCB3YyAtY2AgfHwgXAorCSAgICAgIGRhc2hlcz0iJCRyZXBvcnQiOyBcCisJICBmaTsgXAorCSAgZGFzaGVzPWBlY2hvICIkJGRhc2hlcyIgfCBzZWQgcy8uLz0vZ2A7IFwKKwkgIGVjaG8gIiQkZGFzaGVzIjsgXAorCSAgZWNobyAiJCRiYW5uZXIiOyBcCisJICB0ZXN0IC16ICIkJHNraXBwZWQiIHx8IGVjaG8gIiQkc2tpcHBlZCI7IFwKKwkgIHRlc3QgLXogIiQkcmVwb3J0IiB8fCBlY2hvICIkJHJlcG9ydCI7IFwKKwkgIGVjaG8gIiQkZGFzaGVzIjsgXAorCSAgdGVzdCAiJCRmYWlsZWQiIC1lcSAwOyBcCisJZWxzZSA6OyBmaQorCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLXBSICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtcFIgJCRkLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAkKGRpc3RkaXIpLyQkZmlsZSBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgJChkaXN0ZGlyKS8kJGZpbGUgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorY2hlY2stYW06IGFsbC1hbQorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGNoZWNrLVRFU1RTCitjaGVjazogY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUKK2luc3RhbGxkaXJzOgoraW5zdGFsbDogaW5zdGFsbC1hbQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCit1bmluc3RhbGw6IHVuaW5zdGFsbC1hbQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQoraW5zdGFsbC1zdHJpcDoKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKKwkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKK2NsZWFuOiBjbGVhbi1hbQorCitjbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIG1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1nZW5lcmljCisKK2R2aTogZHZpLWFtCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1hbQorCitpbmZvOiBpbmZvLWFtCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbToKKworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1tYW46CisKK2luc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQorCitpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1hbQorCitwZGYtYW06CisKK3BzOiBwcy1hbQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOgorCisuTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisKKy5QSE9OWTogYWxsIGFsbC1hbSBjaGVjayBjaGVjay1URVNUUyBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKKwljbGVhbi1saWJ0b29sIGRpc3RjbGVhbiBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBcCisJZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBcCisJaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIFwKKwlpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBcCisJaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gXAorCWluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCisJaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKKwltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBcCisJbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAorCXVuaW5zdGFsbCB1bmluc3RhbGwtYW0KKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L3Rlc3RzL3QwMDAwLWJhc2ljLnNoIGIvcGFydGVkLTEuOC43L3Rlc3RzL3QwMDAwLWJhc2ljLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYwNDllMTUKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvdGVzdHMvdDAwMDAtYmFzaWMuc2gKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L3Rlc3RzL3QxMDAwLW1rcGFydGZzLnNoIGIvcGFydGVkLTEuOC43L3Rlc3RzL3QxMDAwLW1rcGFydGZzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM3ZGM0M2EKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQtMS44LjcvdGVzdHMvdDEwMDAtbWtwYXJ0ZnMuc2gKQEAgLTAsMCArMSw2OSBAQAorIyEvYmluL3NoCisKKyMgQ29weXJpZ2h0IChDKSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisjIDAyMTEwLTEzMDEsIFVTQS4KKwordGVzdF9kZXNjcmlwdGlvbj0nQ3JlYXRlIHNvbWUgZmlsZSBzeXN0ZW1zIHVzaW5nIG1rcGFydGZzLicKKworLiAkc3JjZGlyL3Rlc3QtbGliLnNoCisKK049MU0KK2Rldj1sb29wLWZpbGUKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjcmVhdGUgYSBmaWxlIHRvbyBzbWFsbCB0byBob2xkIGEgZmF0MzIgZmlsZSBzeXN0ZW0nIFwKKyAgICAnZGQgaWY9L2Rldi96ZXJvIG9mPSRkZXYgYnM9JE4gY291bnQ9MSAyPiAvZGV2L251bGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdsYWJlbCB0aGUgdGVzdCBkaXNrJyBcCisgICAgJ3BhcnRlZCAtcyAkZGV2IG1rbGFiZWwgbXNkb3MgPiBvdXQgMj4mMScKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4cGVjdCBubyBvdXRwdXQnICckY29tcGFyZSBvdXQgL2Rldi9udWxsJworCisjIEV4cGVjdCBwYXJ0ZWQncyBta3BhcnRmcyBjb21tYW5kIHRvIGZhaWwuCit0ZXN0X2V4cGVjdF9mYWlsdXJlIFwKKyAgICAndHJ5L2ZhaWwgdG8gY3JlYXRlIGEgZmlsZSBzeXN0ZW0gaW4gdG9vIHNtYWxsIGEgc3BhY2UnIFwKKyAgICAncGFydGVkIC1zICRkZXYgbWtwYXJ0ZnMgcHJpbWFyeSBmYXQzMiAwIDEgPiBvdXQgMj4mMScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NyZWF0ZSBleHBlY3RlZCBvdXRwdXQgZmlsZScgXAorICAgICdlY2hvICJFcnJvcjogUGFydGl0aW9uIHRvbyBiaWcvc21hbGwgZm9yIGEgZmF0MzIgZmlsZSBzeXN0ZW0uIiA+IGV4cCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NoZWNrIGZvciBleHBlY3RlZCBmYWlsdXJlIGRpYWdub3N0aWMnIFwKKyAgICAnJGNvbXBhcmUgb3V0IGV4cCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW4gdXAsIHByZXBhcmluZyBmb3IgbmV4dCB0ZXN0JyAncm0gJGRldiBvdXQnCisKKyM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBTaW1pbGFyLCBidXQgd2l0aCBhIGZpbGUgdGhhdCdzIGxhcmdlIGVub3VnaCwgc28gbWtwYXJ0ZnMgc3VjY2VlZHMuCitOPTQwTQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY3JlYXRlIGEgZmlsZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBhIGZhdDMyIGZpbGUgc3lzdGVtJyBcCisgICAgJ2RkIGlmPS9kZXYvemVybyBvZj0kZGV2IGJzPSROIGNvdW50PTEgMj4gL2Rldi9udWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnbGFiZWwgdGhlIHRlc3QgZGlzaycgXAorICAgICdwYXJ0ZWQgLXMgJGRldiBta2xhYmVsIG1zZG9zID4gb3V0IDI+JjEnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleHBlY3Qgbm8gb3V0cHV0JyAnJGNvbXBhcmUgb3V0IC9kZXYvbnVsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NyZWF0ZSBhbiBtc2RvcyBmaWxlIHN5c3RlbScgXAorICAgICdwYXJ0ZWQgLXMgJGRldiBta3BhcnRmcyBwcmltYXJ5IGZhdDMyIDEgNDAgPiBvdXQgMj4mMScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhwZWN0IG5vIG91dHB1dCcgJyRjb21wYXJlIG91dCAvZGV2L251bGwnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvcGFydGVkLTEuOC43L3Rlc3RzL3QyMDAwLW1rZnMuc2ggYi9wYXJ0ZWQtMS44LjcvdGVzdHMvdDIwMDAtbWtmcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lNDdkYThmCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L3Rlc3RzL3QyMDAwLW1rZnMuc2gKQEAgLTAsMCArMSw0NSBAQAorIyEvYmluL3NoCisKKyMgQ29weXJpZ2h0IChDKSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisjIDAyMTEwLTEzMDEsIFVTQS4KKwordGVzdF9kZXNjcmlwdGlvbj0nQ3JlYXRlIHNvbWUgZmlsZSBzeXN0ZW1zIHVzaW5nIG1rZnMuJworCisuICRzcmNkaXIvdGVzdC1saWIuc2gKKworTj00ME0KK2Rldj1sb29wLWZpbGUKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjcmVhdGUgYSBmaWxlIGxhcmdlIGVub3VnaCB0byBob2xkIGEgZmF0MzIgZmlsZSBzeXN0ZW0nIFwKKyAgICAnZGQgaWY9L2Rldi96ZXJvIG9mPSRkZXYgYnM9JE4gY291bnQ9MSAyPiAvZGV2L251bGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdsYWJlbCB0aGUgdGVzdCBkaXNrJyBcCisgICAgJ3BhcnRlZCAtcyAkZGV2IG1rbGFiZWwgbXNkb3MgPiBvdXQgMj4mMScKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4cGVjdCBubyBvdXRwdXQnICckY29tcGFyZSBvdXQgL2Rldi9udWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY3JlYXRlIGFuIHBhcnRpdGlvbicgXAorICAgICdwYXJ0ZWQgLXMgJGRldiBta3BhcnQgcHJpbWFyeSAxIDQwID4gb3V0IDI+JjEnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjcmVhdGUgYW4gbXNkb3MgZmlsZSBzeXN0ZW0nIFwKKyAgICAncGFydGVkIC1zICRkZXYgbWtmcyAxIGZhdDMyID4gb3V0IDI+JjEnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4cGVjdCBubyBvdXRwdXQnICckY29tcGFyZSBvdXQgL2Rldi9udWxsJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3BhcnRlZC0xLjguNy90ZXN0cy90ZXN0LWxpYi5zaCBiL3BhcnRlZC0xLjguNy90ZXN0cy90ZXN0LWxpYi5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjgwNGNmCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLTEuOC43L3Rlc3RzL3Rlc3QtbGliLnNoCkBAIC0wLDAgKzEsMjM4IEBACisjIS9iaW4vc2gKKyMgRGVyaXZlZCBmcm9tIGdpdCdzIHQvdGVzdC1saWIuc2guCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworCisjIEZvciByZXBlYXRhYmlsaXR5LCByZXNldCB0aGUgZW52aXJvbm1lbnQgdG8ga25vd24gdmFsdWUuCitMQU5HPUMKK0xDX0FMTD1DCitUWj1VVEMKK2V4cG9ydCBMQU5HIExDX0FMTCBUWgorCisjIFByb3RlY3Qgb3Vyc2VsdmVzIGZyb20gY29tbW9uIG1pc2NvbmZpZ3VyYXRpb24gdG8gZXhwb3J0CisjIENEUEFUSCBpbnRvIHRoZSBlbnZpcm9ubWVudAordW5zZXQgQ0RQQVRICisKKyMgRWFjaCB0ZXN0IHNob3VsZCBzdGFydCB3aXRoIHNvbWV0aGluZyBsaWtlIHRoaXMsIGFmdGVyIGNvcHlyaWdodCBub3RpY2VzOgorIworIyB0ZXN0X2Rlc2NyaXB0aW9uPSdEZXNjcmlwdGlvbiBvZiB0aGlzIHRlc3QuLi4KKyMgVGhpcyB0ZXN0IGNoZWNrcyBpZiBjb21tYW5kIHh5enp5IGRvZXMgdGhlIHJpZ2h0IHRoaW5nLi4uCisjICcKKyMgLiAuL3Rlc3QtbGliLnNoCisKK2Vycm9yICgpIHsKKwllY2hvICIqIGVycm9yOiAkKiIKKwl0cmFwIC0gZXhpdAorCWV4aXQgMQorfQorCitzYXkgKCkgeworCWVjaG8gIiogJCoiCit9CisKK3Rlc3QgIiR7dGVzdF9kZXNjcmlwdGlvbn0iICE9ICIiIHx8CitlcnJvciAiVGVzdCBzY3JpcHQgZGlkIG5vdCBzZXQgdGVzdF9kZXNjcmlwdGlvbi4iCisKKyMgSWYgJHNyY2RpciBpcyBub3Qgc2V0LCBzZXQgaXQsIGlmIGl0J3MgIi4iLiAgT3RoZXJ3aXNlLCBmYWlsLgoraWYgdGVzdCAtYSAiJHNyY2RpciI7IHRoZW4KKyAgICBpZiB0ZXN0IC1mIHRlc3QtbGliLnNoOyB0aGVuCisJc3JjZGlyPS4KKyAgICBlbHNlCisJZXJyb3IgJyRzcmNkaXIgaXMgbm90IHNldDsgZWl0aGVyIHNldCBpdCwgb3IgcnVuIHRoZSB0ZXN0JyBcCisJICAgICdmcm9tIHRoZSBzb3VyY2UgZGlyZWN0b3J5JworICAgIGZpCitmaQorCit3aGlsZSB0ZXN0ICIkIyIgLW5lIDAKK2RvCisJY2FzZSAiJDEiIGluCisJLWR8LS1kfC0tZGV8LS1kZWJ8LS1kZWJ1fC0tZGVidWcpCisJCWRlYnVnPXQ7IHNoaWZ0IDs7CisJLWl8LS1pfC0taW18LS1pbW18LS1pbW1lfC0taW1tZWR8LS1pbW1lZGl8LS1pbW1lZGlhfC0taW1tZWRpYXR8LS1pbW1lZGlhdGUpCisJCWltbWVkaWF0ZT10OyBzaGlmdCA7OworCS1ofC0taHwtLWhlfC0taGVsfC0taGVscCkKKwkJZWNobyAiJHRlc3RfZGVzY3JpcHRpb24iCisJCWV4aXQgMCA7OworCS12fC0tdnwtLXZlfC0tdmVyfC0tdmVyYnwtLXZlcmJvfC0tdmVyYm9zfC0tdmVyYm9zZSkKKwkJdmVyYm9zZT10OyBzaGlmdCA7OworCWVzYWMKK2RvbmUKKworZXhlYyA1PiYxCitpZiB0ZXN0ICIkdmVyYm9zZSIgPSAidCIKK3RoZW4KKwlleGVjIDQ+JjIgMz4mMQorZWxzZQorCWV4ZWMgND4vZGV2L251bGwgMz4vZGV2L251bGwKK2ZpCisKK3Rlc3RfZmFpbHVyZT0wCit0ZXN0X2NvdW50PTAKKwordHJhcCAnZWNobyA+JjUgIkZBVEFMOiBVbmV4cGVjdGVkIGV4aXQgd2l0aCBjb2RlICQ/IjsgZXhpdCAxJyBleGl0CisKKyMgWW91IGFyZSBub3QgZXhwZWN0ZWQgdG8gY2FsbCB0ZXN0X29rXyBhbmQgdGVzdF9mYWlsdXJlXyBkaXJlY3RseSwgdXNlCisjIHRoZSB0ZXh0X2V4cGVjdF8qIGZ1bmN0aW9ucyBpbnN0ZWFkLgorCit0ZXN0X29rXyAoKSB7CisJdGVzdF9jb3VudD0kKGV4cHIgIiR0ZXN0X2NvdW50IiArIDEpCisJc2F5ICIgIG9rICR0ZXN0X2NvdW50OiAkQCIKK30KKwordGVzdF9mYWlsdXJlXyAoKSB7CisJdGVzdF9jb3VudD0kKGV4cHIgIiR0ZXN0X2NvdW50IiArIDEpCisJdGVzdF9mYWlsdXJlPSQoZXhwciAiJHRlc3RfZmFpbHVyZSIgKyAxKTsKKwlzYXkgIkZBSUwgJHRlc3RfY291bnQ6ICQxIgorCXNoaWZ0CisJZWNobyAiJEAiIHwgc2VkIC1lICdzL14vCS8nCisJdGVzdCAiJGltbWVkaWF0ZSIgPSAiIiB8fCB7IHRyYXAgLSBleGl0OyBleGl0IDE7IH0KK30KKwordGVzdF9kZWJ1ZyAoKSB7CisJdGVzdCAiJGRlYnVnIiA9ICIiIHx8IGV2YWwgIiQxIgorfQorCit0ZXN0X3J1bl8gKCkgeworCWV2YWwgPiYzIDI+JjQgIiQxIgorCWV2YWxfcmV0PSIkPyIKKwlyZXR1cm4gMAorfQorCit0ZXN0X3NraXAgKCkgeworCXRoaXNfdGVzdD0kKGV4cHIgIi4vJDAiIDogJy4qL1wodFswLTldKlwpLVteL10qJCcpCisJdGhpc190ZXN0PSIkdGhpc190ZXN0LiQoZXhwciAiJHRlc3RfY291bnQiICsgMSkiCisJdG9fc2tpcD0KKwlmb3Igc2twIGluICRTS0lQX1RFU1RTCisJZG8KKwkJY2FzZSAiJHRoaXNfdGVzdCIgaW4KKwkJJHNrcCkKKwkJCXRvX3NraXA9dAorCQllc2FjCisJZG9uZQorCWNhc2UgIiR0b19za2lwIiBpbgorCXQpCisJCXNheSA+JjMgInNraXBwaW5nIHRlc3Q6ICRAIgorCQl0ZXN0X2NvdW50PSQoZXhwciAiJHRlc3RfY291bnQiICsgMSkKKwkJc2F5ICJza2lwICR0ZXN0X2NvdW50OiAkMSIKKwkJOiB0cnVlCisJCTs7CisJKikKKwkJZmFsc2UKKwkJOzsKKwllc2FjCit9CisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgKCkgeworCXRlc3QgIiQjIiA9IDIgfHwKKwllcnJvciAiYnVnIGluIHRoZSB0ZXN0IHNjcmlwdDogbm90IDIgcGFyYW1ldGVycyB0byB0ZXN0LWV4cGVjdC1mYWlsdXJlIgorCWlmICEgdGVzdF9za2lwICIkQCIKKwl0aGVuCisJCXNheSA+JjMgImV4cGVjdGluZyBmYWlsdXJlOiAkMiIKKwkJdGVzdF9ydW5fICIkMiIKKwkJaWYgWyAiJD8iID0gMCAtYSAiJGV2YWxfcmV0IiAhPSAwIC1hICIkZXZhbF9yZXQiIC1sdCAxMjkgXQorCQl0aGVuCisJCQl0ZXN0X29rXyAiJDEiCisJCWVsc2UKKwkJCXRlc3RfZmFpbHVyZV8gIiRAIgorCQlmaQorCWZpCisJZWNobyA+JjMgIiIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAoKSB7CisJdGVzdCAiJCMiID0gMiB8fAorCWVycm9yICJidWcgaW4gdGhlIHRlc3Qgc2NyaXB0OiBub3QgMiBwYXJhbWV0ZXJzIHRvIHRlc3QtZXhwZWN0LXN1Y2Nlc3MiCisJaWYgISB0ZXN0X3NraXAgIiRAIgorCXRoZW4KKwkJc2F5ID4mMyAiZXhwZWN0aW5nIHN1Y2Nlc3M6ICQyIgorCQl0ZXN0X3J1bl8gIiQyIgorCQlpZiBbICIkPyIgPSAwIC1hICIkZXZhbF9yZXQiID0gMCBdCisJCXRoZW4KKwkJCXRlc3Rfb2tfICIkMSIKKwkJZWxzZQorCQkJdGVzdF9mYWlsdXJlXyAiJEAiCisJCWZpCisJZmkKKwllY2hvID4mMyAiIgorfQorCit0ZXN0X2V4cGVjdF9jb2RlICgpIHsKKwl0ZXN0ICIkIyIgPSAzIHx8CisJZXJyb3IgImJ1ZyBpbiB0aGUgdGVzdCBzY3JpcHQ6IG5vdCAzIHBhcmFtZXRlcnMgdG8gdGVzdC1leHBlY3QtY29kZSIKKwlpZiAhIHRlc3Rfc2tpcCAiJEAiCisJdGhlbgorCQlzYXkgPiYzICJleHBlY3RpbmcgZXhpdCBjb2RlICQxOiAkMyIKKwkJdGVzdF9ydW5fICIkMyIKKwkJaWYgWyAiJD8iID0gMCAtYSAiJGV2YWxfcmV0IiA9ICIkMSIgXQorCQl0aGVuCisJCQl0ZXN0X29rXyAiJDIiCisJCWVsc2UKKwkJCXRlc3RfZmFpbHVyZV8gIiRAIgorCQlmaQorCWZpCisJZWNobyA+JjMgIiIKK30KKwordGVzdF9kb25lICgpIHsKKwljYXNlICIkdGVzdF9mYWlsdXJlIiBpbgorCTApCisJCSMgV2UgY291bGQ6CisJCSMgY2QgLi4gJiYgcm0gLWZyIHRyYXNoCisJCSMgYnV0IHRoYXQgbWVhbnMgd2UgZm9yYmlkIGFueSB0ZXN0cyB0aGF0IHVzZSB0aGVpciBvd24KKwkJIyBzdWJkaXJlY3RvcnkgZnJvbSBjYWxsaW5nIHRlc3RfZG9uZSB3aXRob3V0IGNvbWluZyBiYWNrCisJCSMgdG8gd2hlcmUgdGhleSBzdGFydGVkIGZyb20uCisJCSMgVGhlIE1ha2VmaWxlIHByb3ZpZGVkIHdpbGwgY2xlYW4gdGhpcyB0ZXN0IGFyZWEgc28KKwkJIyB3ZSB3aWxsIGxlYXZlIHRoaW5ncyBhcyB0aGV5IGFyZS4KKworCQlzYXkgInBhc3NlZCBhbGwgJHRlc3RfY291bnQgdGVzdChzKSIKKwkJZXhpdCAwIDs7CisKKwkqKQorCQlzYXkgImZhaWxlZCAkdGVzdF9mYWlsdXJlIGFtb25nICR0ZXN0X2NvdW50IHRlc3QocykiCisJCWV4aXQgMSA7OworCisJZXNhYworfQorCitwd2RfPWBwd2RgCisKKyMgVGVzdCB0aGUgYmluYXJpZXMgd2UgaGF2ZSBqdXN0IGJ1aWx0LiAgVGhlIHRlc3RzIGFyZSBrZXB0IGluCisjIHQvIHN1YmRpcmVjdG9yeSBhbmQgYXJlIHJ1biBpbiB0cmFzaCBzdWJkaXJlY3RvcnkuCitQQVRIPSRwd2RfLy4uL3BhcnRlZDokUEFUSAorZXhwb3J0IFBBVEgKKwordDA9YGVjaG8gIiQwInxzZWQgJ3MsLiovLCwnYC50bXA7IHRtcF89JHQwLyQkCit0cmFwICdzdD0kPzsgY2QgIiRwd2RfIiAmJiBjaG1vZCAtUiB1K3J3eCAkdDAgJiYgcm0gLXJmICR0MCAmJiBleGl0ICRzdCcgMAordHJhcCAnKGV4aXQgJD8pOyBleGl0ICQ/JyAxIDIgMTMgMTUKKworZnJhbWV3b3JrX2ZhaWx1cmU9MAorbWtkaXIgLXAgJHRtcF8gfHwgZnJhbWV3b3JrX2ZhaWx1cmU9MQorY2QgJHRtcF8gfHwgZnJhbWV3b3JrX2ZhaWx1cmU9MQordGVzdCAkZnJhbWV3b3JrX2ZhaWx1cmUgPSAwIFwKKyAgICAgfHwgZXJyb3IgJ2ZhaWxlZCB0byBjcmVhdGUgdGVtcG9yYXJ5IGRpcmVjdG9yeScKKwordGhpc190ZXN0PSQoZXhwciAiLi8kMCIgOiAnLiovXCh0WzAtOV0qXCktW14vXSokJykKK2ZvciBza3AgaW4gJFNLSVBfVEVTVFMKK2RvCisJdG9fc2tpcD0KKwlmb3Igc2twIGluICRTS0lQX1RFU1RTCisJZG8KKwkJY2FzZSAiJHRoaXNfdGVzdCIgaW4KKwkJJHNrcCkKKwkJCXRvX3NraXA9dAorCQllc2FjCisJZG9uZQorCWNhc2UgIiR0b19za2lwIiBpbgorCXQpCisJCXNheSA+JjMgInNraXBwaW5nIHRlc3QgJHRoaXNfdGVzdCBhbHRvZ2V0aGVyIgorCQlzYXkgInNraXAgYWxsIHRlc3RzIGluICR0aGlzX3Rlc3QiCisJCXRlc3RfZG9uZQorCWVzYWMKK2RvbmUKKworaWYgKCBkaWZmIC0tdmVyc2lvbiA8IC9kZXYvbnVsbCAyPiYxIHwgZ3JlcCBHTlUgKSAyPiYxID4gL2Rldi9udWxsOyB0aGVuCisgIGNvbXBhcmU9J2RpZmYgLXUnCitlbGlmICggY21wIC0tdmVyc2lvbiA8IC9kZXYvbnVsbCAyPiYxIHwgZ3JlcCBHTlUgKSAyPiYxID4gL2Rldi9udWxsOyB0aGVuCisgIGNvbXBhcmU9J2NtcCAtcycKK2Vsc2UKKyAgY29tcGFyZT1jbXAKK2ZpCmRpZmYgLS1naXQgYS9wYXJ0ZWQucGF0Y2hlcy9wYXJ0ZWQtNTAuZGVzY3JpcHRpb24gYi9wYXJ0ZWQucGF0Y2hlcy9wYXJ0ZWQtNTAuZGVzY3JpcHRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGIyMTVhNQotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC5wYXRjaGVzL3BhcnRlZC01MC5kZXNjcmlwdGlvbgpAQCAtMCwwICsxIEBACitSZW1vdmUgdW51c2VkIHdvcmthcm91bmQgZm9yIDY0LWJpdCBQR0MgY29tcGlsZXIgdGhhdCdzIGNhdXNpbmcgYSBidWlsZCBlcnJvciBmb3IgdXMuIApkaWZmIC0tZ2l0IGEvcGFydGVkLnBhdGNoZXMvcGFydGVkLTUwLnBhdGNoIGIvcGFydGVkLnBhdGNoZXMvcGFydGVkLTUwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNWU5MGYKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQucGF0Y2hlcy9wYXJ0ZWQtNTAucGF0Y2gKQEAgLTAsMCArMSwxMyBAQAorLS0tIGxpYi9yZWdleF9pbnRlcm5hbC5oCTIwMDctMDItMTQgMTY6MTY6NTUuMDAwMDAwMDAwIC0wODAwCisrKysgbGliL3JlZ2V4X2ludGVybmFsLmgJMjAxNC0wNC0zMCAxODozNDozMS4xMTA3NzM2MzUgLTA3MDAKK0BAIC0xODIsMTAgKzE4Miw2IEBACisgIyBpZiBCSVRTRVRfV09SRF9CSVRTIDw9IFNCQ19NQVgKKyAjICBlcnJvciAiSW52YWxpZCBTQkNfTUFYIgorICMgZW5kaWYKKy0jZWxpZiBCSVRTRVRfV09SRF9NQVggPT0gKDB4ZmZmZmZmZmYgKyAyKSAqIDB4ZmZmZmZmZmYKKy0vKiBXb3JrIGFyb3VuZCBhIGJ1ZyBpbiA2NC1iaXQgUEdDIChiZWZvcmUgdmVyc2lvbiA2LjEtMiksIHdoZXJlIHRoZQorLSAgIHByZXByb2Nlc3NvciBtaXNoYW5kbGVzIGxhcmdlIHVuc2lnbmVkIHZhbHVlcyBhcyBpZiB0aGV5IHdlcmUgc2lnbmVkLiAgKi8KKy0jIGRlZmluZSBCSVRTRVRfV09SRF9CSVRTIDY0CisgI2Vsc2UKKyAjIGVycm9yICJBZGQgY2FzZSBmb3IgbmV3IGJpdHNldF93b3JkX3Qgc2l6ZSIKKyAjZW5kaWYKZGlmZiAtLWdpdCBhL3BhcnRlZC5wYXRjaGVzL3BhcnRlZC01MS5kZXNjcmlwdGlvbiBiL3BhcnRlZC5wYXRjaGVzL3BhcnRlZC01MS5kZXNjcmlwdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTM2MjE2Ci0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLnBhdGNoZXMvcGFydGVkLTUxLmRlc2NyaXB0aW9uCkBAIC0wLDAgKzEgQEAKK1JlbW92ZSBpbmxpbmUga2V5d29yZCBmcm9tIGZ1bmN0aW9uIHByb3RvdHlwZS4gRnVuY3Rpb24gaW5saW5lZCBpbiBkZWZpbml0aW9uLgpkaWZmIC0tZ2l0IGEvcGFydGVkLnBhdGNoZXMvcGFydGVkLTUxLnBhdGNoIGIvcGFydGVkLnBhdGNoZXMvcGFydGVkLTUxLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0NDgyM2MKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJ0ZWQucGF0Y2hlcy9wYXJ0ZWQtNTEucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorLS0tIGluY2x1ZGUvcGFydGVkL25hdG1hdGguaAkyMDA3LTA0LTE4IDE0OjEyOjEwLjAwMDAwMDAwMCAtMDcwMAorKysrIGluY2x1ZGUvcGFydGVkL25hdG1hdGguaAkyMDE0LTA0LTMwIDE4OjM3OjIyLjQ4Nzk5MTM4NyAtMDcwMAorQEAgLTg3LDEwICs4NywxMCBAQAorIGV4dGVybiBjb25zdCBQZWRBbGlnbm1lbnQqIHBlZF9hbGlnbm1lbnRfYW55OworIGV4dGVybiBjb25zdCBQZWRBbGlnbm1lbnQqIHBlZF9hbGlnbm1lbnRfbm9uZTsKKyAKKy1leHRlcm4gaW5saW5lIFBlZFNlY3RvcgorK2V4dGVybiBQZWRTZWN0b3IKKyBwZWRfZGl2X3JvdW5kX3VwIChQZWRTZWN0b3IgbnVtZXJhdG9yLCBQZWRTZWN0b3IgZGl2aXNvcik7CisgCistZXh0ZXJuIGlubGluZSBQZWRTZWN0b3IKKytleHRlcm4gUGVkU2VjdG9yCisgcGVkX2Rpdl9yb3VuZF90b19uZWFyZXN0IChQZWRTZWN0b3IgbnVtZXJhdG9yLCBQZWRTZWN0b3IgZGl2aXNvcik7CisgCisgI2VuZGlmIC8qIFBFRF9OQVRNQVRIX0hfSU5DTFVERUQgKi8KZGlmZiAtLWdpdCBhL3BhcnRlZC5wYXRjaGVzL3BhcnRlZC01Mi5kZXNjcmlwdGlvbiBiL3BhcnRlZC5wYXRjaGVzL3BhcnRlZC01Mi5kZXNjcmlwdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTBiZjcwCi0tLSAvZGV2L251bGwKKysrIGIvcGFydGVkLnBhdGNoZXMvcGFydGVkLTUyLmRlc2NyaXB0aW9uCkBAIC0wLDAgKzEgQEAKK0FsbG93IEZBVCBmcyBpbWFnZXMgd2l0aG91dCBNQlJzCmRpZmYgLS1naXQgYS9wYXJ0ZWQucGF0Y2hlcy9wYXJ0ZWQtNTIucGF0Y2ggYi9wYXJ0ZWQucGF0Y2hlcy9wYXJ0ZWQtNTIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFkNGI2YQotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC5wYXRjaGVzL3BhcnRlZC01Mi5wYXRjaApAQCAtMCwwICsxLDE2IEBACistLS0gbGlicGFydGVkL2xhYmVscy9kb3MuYwkyMDE0LTExLTEzIDE0OjIzOjEwLjE0NzQ5NDIxMyAtMDgwMAorKysrIGxpYnBhcnRlZC9sYWJlbHMvZG9zLmMJMjAxNC0xMS0xMyAxNDoyODo1NC4yNjIwMzEwNTQgLTA4MDAKK0BAIC0xNzMsMTAgKzE3MywxMiBAQCBtc2Rvc19wcm9iZSAoY29uc3QgUGVkRGV2aWNlICpkZXYpCisgCSAqIExvYWRlciAoU0JNTCkgc2lnbmF0dXJlIGluZGljYXRlcyBhIHBhcnRpdGlvbiB0YWJsZSwgbm90IGEgZmlsZQorIAkgKiBzeXN0ZW0uCisgCSAqLworLQlpZiAoKCFzdHJuY21wIChwYXJ0X3RhYmxlLmJvb3RfY29kZSArIDB4MzYsICJGQVQiLCAzKQorKyAgICAgICAvKiBjaGVjayBiZWxvdyBjb21tZW50ZWQgb3V0IHRvIGFsbG93IEZBVCBmcyBpbWFnZXMgd2l0aG91dCBhIE1CUiAqLyAKKysvKglpZiAoKCFzdHJuY21wIChwYXJ0X3RhYmxlLmJvb3RfY29kZSArIDB4MzYsICJGQVQiLCAzKQorIAkgICAgJiYgc3RybmNtcCAocGFydF90YWJsZS5ib290X2NvZGUgKyAweDQwLCAiU0JNTCIsIDQpICE9IDApCisgCSAgICB8fCAhc3RybmNtcCAocGFydF90YWJsZS5ib290X2NvZGUgKyAweDUyLCAiRkFUIiwgMykpCisgCQlyZXR1cm4gMDsKKysqLworIAorIAkvKiBJZiB0aGlzIGlzIGEgR1BUIGRpc2ssIGZhaWwgaGVyZSAqLworIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CmRpZmYgLS1naXQgYS9wYXJ0ZWQucGF0Y2hlcy9wYXJ0ZWQtNTMuZGVzY3JpcHRpb24gYi9wYXJ0ZWQucGF0Y2hlcy9wYXJ0ZWQtNTMuZGVzY3JpcHRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ4NjcxOAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC5wYXRjaGVzL3BhcnRlZC01My5kZXNjcmlwdGlvbgpAQCAtMCwwICsxIEBACitPX0RJUkVDVCBtb2RlIHVuc3VwcG9ydGVkIGluIFNhcHBoaXJlCmRpZmYgLS1naXQgYS9wYXJ0ZWQucGF0Y2hlcy9wYXJ0ZWQtNTMucGF0Y2ggYi9wYXJ0ZWQucGF0Y2hlcy9wYXJ0ZWQtNTMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM4NWUyYgotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC5wYXRjaGVzL3BhcnRlZC01My5wYXRjaApAQCAtMCwwICsxLDExIEBACistLS0gbGlicGFydGVkL2FyY2gvbGludXguYwkyMDE0LTExLTEzIDE0OjIzOjEwLjE0NzQ5NDIxMyAtMDgwMAorKysrIGxpYnBhcnRlZC9hcmNoL2xpbnV4LmMJMjAxNC0xMS0xMyAxNToxODowOS42NzM3ODkzOTUgLTA4MDAKK0BAIC02NSw2ICs2NSw4IEBACisgI2RlZmluZSBIRElPX0dFVEdFTyAgICAgICAgICAgICAweDAzMDEgIC8qIGdldCBkZXZpY2UgZ2VvbWV0cnkgKi8KKyAjZGVmaW5lIEhESU9fR0VUX0lERU5USVRZICAgICAgIDB4MDMwZCAgLyogZ2V0IElERSBpZGVudGlmaWNhdGlvbiBpbmZvICovCisgCisrLyogT19ESVJFQ1QgbW9kZSBub3Qgc3VwcG9ydGVkIGluIFNhcHBoaXJlICovCisrI3VuZGVmIE9fRElSRUNUCisgI2lmIGRlZmluZWQoT19ESVJFQ1QpICYmICghZGVmaW5lZChfX3MzOTBfXykgfHwgIWRlZmluZWQoX19zMzkweF9fKSkKKyAjZGVmaW5lIFJEX01PREUgKE9fUkRPTkxZIHwgT19ESVJFQ1QpCisgI2RlZmluZSBXUl9NT0RFIChPX1dST05MWSB8IE9fRElSRUNUKQpkaWZmIC0tZ2l0IGEvcGFydGVkLnRhci5neiBiL3BhcnRlZC50YXIuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJlYTFlMAotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC50YXIuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFydGVkLnVybCBiL3BhcnRlZC51cmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU4NzIwYgotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC51cmwKQEAgLTAsMCArMSBAQAoraHR0cDovL2Z0cC5nbnUub3JnL3B1Yi9nbnUvcGFydGVkL3BhcnRlZC0xLjguNy50YXIuZ3oKZGlmZiAtLWdpdCBhL3BhcnRlZC52ZXJzaW9uIGIvcGFydGVkLnZlcnNpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhkM2VlNwotLS0gL2Rldi9udWxsCisrKyBiL3BhcnRlZC52ZXJzaW9uCkBAIC0wLDAgKzEgQEAKKzEuOC43Cg==